Merge "API: Spread autoblocks from action=edit and action=move"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 20 Feb 2019 19:31:44 +0000 (19:31 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 20 Feb 2019 19:31:44 +0000 (19:31 +0000)
45 files changed:
.fresnel.yml [new file with mode: 0644]
.gitignore
Gruntfile.js
RELEASE-NOTES-1.33
includes/cache/MessageBlobStore.php
includes/cache/localisation/LocalisationCache.php
includes/changes/ChangesList.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/i18n/is.json
includes/jobqueue/JobQueueDB.php
includes/libs/MultiHttpClient.php
includes/libs/objectcache/WANObjectCache.php
includes/parser/LinkHolderArray.php
includes/resourceloader/ResourceLoader.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialContributions.php
includes/specials/SpecialRedirect.php
includes/specials/pagers/ActiveUsersPager.php
includes/specials/pagers/BlockListPager.php
includes/specials/pagers/NewPagesPager.php
includes/specials/pagers/ProtectedPagesPager.php
languages/data/Names.php
languages/i18n/aeb-arab.json
languages/i18n/bn.json
languages/i18n/bqi.json
languages/i18n/diq.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fi.json
languages/i18n/gom-latn.json
languages/i18n/he.json
languages/i18n/is.json
languages/i18n/myv.json
languages/i18n/qqq.json
languages/i18n/ur.json
languages/i18n/xsy.json [new file with mode: 0644]
languages/i18n/zh-hant.json
languages/messages/MessagesGcr.php
maintenance/includes/MigrateActors.php
resources/src/mediawiki.toc.styles/screen.less
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/resourceloader/MessageBlobStoreTest.php

diff --git a/.fresnel.yml b/.fresnel.yml
new file mode 100644 (file)
index 0000000..f081fb5
--- /dev/null
@@ -0,0 +1,17 @@
+warmup: true
+runs: 3
+scenarios:
+  # View the Main Page without redirect
+  - url: "{MW_SERVER}{MW_SCRIPT_PATH}/index.php?mainpage"
+    viewport:
+      width: 1100
+      height: 700
+    reports:
+      - navtiming
+      - paint
+      - transfer
+    probes:
+      - screenshot
+      - trace
+    # alerts:
+    #   navtiming/loadEventEnd: 10%
index d25d525..def5a08 100644 (file)
@@ -52,6 +52,7 @@ npm-debug.log
 node_modules/
 /tests/phpunit/phpunit.phar
 /tests/selenium/log
+.eslintcache
 
 # Composer
 /vendor
index 2592815..fbb93bf 100644 (file)
@@ -22,7 +22,8 @@ module.exports = function ( grunt ) {
        grunt.initConfig( {
                eslint: {
                        options: {
-                               reportUnusedDisableDirectives: true
+                               reportUnusedDisableDirectives: true,
+                               cache: true
                        },
                        all: [
                                '**/*.js',
index 3141561..c26f453 100644 (file)
@@ -22,6 +22,10 @@ production.
   MediaWiki 1.32, now defaults to MIGRATION_NEW instead of MIGRATION_WRITE_BOTH.
 * Special:ActiveUsers will no longer filter out users who became inactive since
   the last time the active users query cache was updated.
+* If you ran migrateActors.php using an older version of MediaWiki and want to
+  run your wiki with $wgActorTableSchemaMigrationStage SCHEMA_COMPAT_READ_OLD,
+  note that log_search rows needed to find revision deletions by target user
+  were incorrectly deleted. See T215464 for details.
 
 ==== Removed configuration ====
 * (T199334) $wgTagStatisticsNewTable — This temporary setting, added in
@@ -253,6 +257,9 @@ because of Phabricator reports.
 * Removed deprecated class property WikiRevision::$importer.
 * ResourceLoaderFileModule::readStyleFiles() now requires its $context
   parameter.
+* The ChangeList::insertArticleLink() method, that was deprecated in 1.27, has
+  been removed.
+* MessageBlobStore::__construct() now requires its $rl parameter.
 
 === Deprecations in 1.33 ===
 * The configuration option $wgUseESI has been deprecated, and is expected
index 19c4997..ceb51f2 100644 (file)
@@ -37,7 +37,7 @@ use Wikimedia\Rdbms\Database;
  */
 class MessageBlobStore implements LoggerAwareInterface {
 
-       /* @var ResourceLoader|null */
+       /* @var ResourceLoader */
        private $resourceloader;
 
        /**
@@ -51,13 +51,13 @@ class MessageBlobStore implements LoggerAwareInterface {
        protected $wanCache;
 
        /**
-        * @param ResourceLoader|null $rl
+        * @param ResourceLoader $rl
         * @param LoggerInterface|null $logger
         */
-       public function __construct( ResourceLoader $rl = null, LoggerInterface $logger = null ) {
+       public function __construct( ResourceLoader $rl, LoggerInterface $logger = null ) {
                $this->resourceloader = $rl;
                $this->logger = $logger ?: new NullLogger();
-               $this->wanCache = ObjectCache::getMainWANInstance();
+               $this->wanCache = MediaWikiServices::getInstance()->getMainWANObjectCache();
        }
 
        /**
@@ -191,12 +191,6 @@ class MessageBlobStore implements LoggerAwareInterface {
         * @return ResourceLoader
         */
        protected function getResourceLoader() {
-               // Back-compat: This class supports instantiation without a ResourceLoader object.
-               // Lazy-initialise this property because most callers don't need it.
-               if ( $this->resourceloader === null ) {
-                       $this->logger->warning( __CLASS__ . ' created without a ResourceLoader instance' );
-                       $this->resourceloader = MediaWikiServices::getInstance()->getResourceLoader();
-               }
                return $this->resourceloader;
        }
 
index 21b262a..1d00d19 100644 (file)
@@ -1034,7 +1034,9 @@ class LocalisationCache {
                # HACK: If using a null (i.e. disabled) storage backend, we
                # can't write to the MessageBlobStore either
                if ( $purgeBlobs && !$this->store instanceof LCStoreNull ) {
-                       $blobStore = new MessageBlobStore();
+                       $blobStore = new MessageBlobStore(
+                               MediaWikiServices::getInstance()->getResourceLoader()
+                       );
                        $blobStore->clear();
                }
        }
index 7a54f95..b8ab971 100644 (file)
@@ -472,17 +472,6 @@ class ChangesList extends ContextSource {
                        ' <span class="mw-changeslist-separator"></span> ';
        }
 
-       /**
-        * @param string &$s Article link will be appended to this string, in place.
-        * @param RecentChange $rc
-        * @param bool $unpatrolled
-        * @param bool $watched
-        * @deprecated since 1.27, use getArticleLink instead.
-        */
-       public function insertArticleLink( &$s, RecentChange $rc, $unpatrolled, $watched ) {
-               $s .= $this->getArticleLink( $rc, $unpatrolled, $watched );
-       }
-
        /**
         * @param RecentChange &$rc
         * @param bool $unpatrolled
index bb30d3d..6315de4 100644 (file)
@@ -373,6 +373,7 @@ abstract class DatabaseInstaller {
        /**
         * Perform database upgrades
         *
+        * @suppress SecurityCheck-XSS Escaping provided by $this->outputHandler
         * @return bool
         */
        public function doUpgrade() {
index d64e2d7..7a92807 100644 (file)
@@ -1074,7 +1074,9 @@ abstract class DatabaseUpdater {
                }
 
                // ResourceLoader: Message cache
-               $blobStore = new MessageBlobStore();
+               $blobStore = new MessageBlobStore(
+                       MediaWikiServices::getInstance()->getResourceLoader()
+               );
                $blobStore->clear();
 
                // ResourceLoader: File-dependency cache
index 5a3d77a..20661f2 100644 (file)
@@ -1464,6 +1464,7 @@ abstract class Installer {
        /**
         * Installs the auto-detected extensions.
         *
+        * @suppress SecurityCheck-OTHER It thinks $exts/$IP is user controlled but they are not.
         * @return Status
         */
        protected function includeExtensions() {
index 93039ff..707fc24 100644 (file)
        "config-env-hhvm": "HHVM $1 er uppsett.",
        "config-apc": "[https://secure.php.net/apc APC] er uppsett",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] er uppsett",
-       "config-diff3-bad": "GNU diff3 fannst ekki.",
+       "config-diff3-bad": "GNU diff3 textasamanburðartólið fannst ekki. Þú getur hunsað þetta núna, en þú gætir lent oftar í breytingaárekstrum.",
        "config-using-server": "Nota \"<nowiki>$1</nowiki>\" sem heiti á þjóni.",
        "config-using-uri": "Nota \"<nowiki>$1$2</nowiki>\" sem slóð á þjón.",
        "config-db-type": "Tegund gagnagrunns:",
        "config-db-host": "Netþjónn gagnagrunns:",
-       "config-db-name": "Heiti gagnagrunns:",
+       "config-db-name": "Heiti gagnagrunns (engin bandstrik):",
        "config-db-name-oracle": "Gagnagrunnsskema:",
        "config-db-username": "Notandanafn á gagnagrunni:",
        "config-db-password": "Lykilorð gagnagrunns:",
        "config-db-port": "Gátt gagnagrunns:",
        "config-sqlite-dir": "Gagnamappa SQLite:",
-       "config-type-mysql": "MySQL (eða samhæft)",
+       "config-type-mysql": "MariaDB, MySQL, eða samhæft",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
-       "config-header-mysql": "Stillingar MySQL",
+       "config-header-mysql": "Stillingar MariaDB/MySQL",
        "config-header-postgres": "Stillingar PostgreSQL",
        "config-header-sqlite": "Stillingar SQLite",
        "config-header-oracle": "Stillingar Oracle",
@@ -61,7 +61,7 @@
        "config-show-table-status": "<code>SHOW TABLE STATUS</code> beiðni mistókst!",
        "config-db-web-account": "Gagnagrunnsreikningur fyrir vefaðgang",
        "config-mysql-engine": "Gagnagrunnshýsing:",
-       "config-mysql-innodb": "InnoDB",
+       "config-mysql-innodb": "InnoDB (mælt með)",
        "config-mysql-myisam": "MyISAM",
        "config-mssql-auth": "Tegund auðkenningar:",
        "config-mssql-sqlauth": "SQL Server auðkenning",
index fa17284..cda0636 100644 (file)
@@ -206,6 +206,7 @@ class JobQueueDB extends JobQueue {
        /**
         * This function should *not* be called outside of JobQueueDB
         *
+        * @suppress SecurityCheck-SQLInjection Bug in phan-taint-check handling bulk inserts
         * @param IDatabase $dbw
         * @param IJobSpecification[] $jobs
         * @param int $flags
index 6ce8f45..536177e 100644 (file)
@@ -384,7 +384,7 @@ class MultiHttpClient implements LoggerAwareInterface {
 
                curl_setopt( $ch, CURLOPT_HEADERFUNCTION,
                        function ( $ch, $header ) use ( &$req ) {
-                               if ( !empty( $req['flags']['relayResponseHeaders'] ) ) {
+                               if ( !empty( $req['flags']['relayResponseHeaders'] ) && trim( $header ) !== '' ) {
                                        header( $header );
                                }
                                $length = strlen( $header );
index 2329140..40030c3 100644 (file)
@@ -159,6 +159,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
        /** Seconds to keep lock keys around */
        const LOCK_TTL = 10;
+       /** Seconds to no-op key set() calls to avoid large blob I/O stampedes */
+       const COOLOFF_TTL = 1;
        /** Default remaining TTL at which to consider pre-emptive regeneration */
        const LOW_TTL = 30;
 
@@ -190,6 +192,9 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        /** Tiny negative float to use when CTL comes up >= 0 due to clock skew */
        const TINY_NEGATIVE = -0.000001;
 
+       /** Seconds of delay after get() where set() storms are a consideration with 'lockTSE' */
+       const SET_DELAY_HIGH_SEC = 0.1;
+
        /** Cache format version number */
        const VERSION = 1;
 
@@ -213,6 +218,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        const INTERIM_KEY_PREFIX = 'WANCache:i:';
        const TIME_KEY_PREFIX = 'WANCache:t:';
        const MUTEX_KEY_PREFIX = 'WANCache:m:';
+       const COOLOFF_KEY_PREFIX = 'WANCache:c:';
 
        const PURGE_VAL_PREFIX = 'PURGED:';
 
@@ -1034,21 +1040,28 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *      is useful if thousands or millions of keys depend on the same entity. The entity can
         *      simply have its "check" key updated whenever the entity is modified.
         *      Default: [].
-        *   - graceTTL: If the key is invalidated (by "checkKeys") less than this many seconds ago,
-        *      consider reusing the stale value. The odds of a refresh becomes more likely over time,
-        *      becoming certain once the grace period is reached. This can reduce traffic spikes
-        *      when millions of keys are compared to the same "check" key and touchCheckKey() or
-        *      resetCheckKey() is called on that "check" key. This option is not useful for the
-        *      case of the key simply expiring on account of its TTL (use "lowTTL" instead).
+        *   - graceTTL: If the key is invalidated (by "checkKeys"/"touchedCallback") less than this
+        *      many seconds ago, consider reusing the stale value. The odds of a refresh becomes
+        *      more likely over time, becoming certain once the grace period is reached. This can
+        *      reduce traffic spikes when millions of keys are compared to the same "check" key and
+        *      touchCheckKey() or resetCheckKey() is called on that "check" key. This option is not
+        *      useful for avoiding traffic spikes in the case of the key simply expiring on account
+        *      of its TTL (use "lowTTL" instead).
         *      Default: WANObjectCache::GRACE_TTL_NONE.
-        *   - lockTSE: If the key is tombstoned or invalidated (by "checkKeys") less than this many
-        *      seconds ago, try to have a single thread handle cache regeneration at any given time.
-        *      Other threads will try to use stale values if possible. If, on miss, the time since
-        *      expiration is low, the assumption is that the key is hot and that a stampede is worth
-        *      avoiding. Setting this above WANObjectCache::HOLDOFF_TTL makes no difference. The
-        *      higher this is set, the higher the worst-case staleness can be. This option does not
-        *      by itself handle the case of the key simply expiring on account of its TTL, so make
-        *      sure that "lowTTL" is not disabled when using this option.
+        *   - lockTSE: If the key is tombstoned or invalidated (by "checkKeys"/"touchedCallback")
+        *      less than this many seconds ago, try to have a single thread handle cache regeneration
+        *      at any given time. Other threads will use stale values if possible. If, on miss,
+        *      the time since expiration is low, the assumption is that the key is hot and that a
+        *      stampede is worth avoiding. Note that if the key falls out of cache then concurrent
+        *      threads will all run the callback on cache miss until the value is saved in cache.
+        *      The only stampede protection in that case is from duplicate cache sets when the
+        *      callback takes longer than WANObjectCache::SET_DELAY_HIGH_SEC seconds; consider
+        *      using "busyValue" if such stampedes are a problem. Note that the higher "lockTSE" is
+        *      set, the higher the worst-case staleness of returned values can be. Also note that
+        *      this option does not by itself handle the case of the key simply expiring on account
+        *      of its TTL, so make sure that "lowTTL" is not disabled when using this option. Avoid
+        *      combining this option with delete() as it can always cause a stampede due to their
+        *      being no stale value available until after a thread completes the callback.
         *      Use WANObjectCache::TSE_NONE to disable this logic.
         *      Default: WANObjectCache::TSE_NONE.
         *   - busyValue: If no value exists and another thread is currently regenerating it, use this
@@ -1267,12 +1280,12 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        // This avoids stampedes on eviction or preemptive regeneration taking too long.
                        ( $busyValue !== null && $value === false );
 
-               $lockAcquired = false;
+               $hasLock = false;
                if ( $useMutex ) {
                        // Acquire a datacenter-local non-blocking lock
                        if ( $this->cache->add( self::MUTEX_KEY_PREFIX . $key, 1, self::LOCK_TTL ) ) {
                                // Lock acquired; this thread will recompute the value and update cache
-                               $lockAcquired = true;
+                               $hasLock = true;
                        } elseif ( $this->isValid( $value, $versioned, $asOf, $minTime ) ) {
                                // Lock not acquired and a stale value exists; use the stale value
                                $this->stats->increment( "wanobjectcache.$kClass.hit.stale" );
@@ -1315,26 +1328,31 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                $valueIsCacheable = ( $value !== false && $ttl >= 0 );
 
                if ( $valueIsCacheable ) {
+                       $ago = max( $this->getCurrentTime() - $preCallbackTime, 0.0 );
                        if ( $isKeyTombstoned ) {
-                               // When delete() is called, writes are write-holed by the tombstone,
-                               // so use a special INTERIM key to pass the new value among threads.
-                               $tempTTL = max( self::INTERIM_KEY_TTL, (int)$lockTSE ); // set() expects seconds
-                               $newAsOf = $this->getCurrentTime();
-                               $wrapped = $this->wrap( $value, $tempTTL, $newAsOf );
-                               // Avoid using set() to avoid pointless mcrouter broadcasting
-                               $this->setInterimValue( $key, $wrapped, $tempTTL );
-                       } elseif ( !$useMutex || $lockAcquired ) {
-                               // Save the value unless a lock-winning thread is already expected to do that
-                               $setOpts['lockTSE'] = $lockTSE;
-                               $setOpts['staleTTL'] = $staleTTL;
-                               // Use best known "since" timestamp if not provided
-                               $setOpts += [ 'since' => $preCallbackTime ];
-                               // Update the cache; this will fail if the key is tombstoned
-                               $this->set( $key, $value, $ttl, $setOpts );
+                               if ( $this->checkAndSetCooloff( $key, $kClass, $ago, $lockTSE, $hasLock ) ) {
+                                       // When delete() is called, writes are write-holed by the tombstone,
+                                       // so use a special INTERIM key to pass the new value among threads.
+                                       $tempTTL = max( self::INTERIM_KEY_TTL, (int)$lockTSE ); // set() expects seconds
+                                       $newAsOf = $this->getCurrentTime();
+                                       $wrapped = $this->wrap( $value, $tempTTL, $newAsOf );
+                                       // Avoid using set() to avoid pointless mcrouter broadcasting
+                                       $this->setInterimValue( $key, $wrapped, $tempTTL );
+                               }
+                       } elseif ( !$useMutex || $hasLock ) {
+                               if ( $this->checkAndSetCooloff( $key, $kClass, $ago, $lockTSE, $hasLock ) ) {
+                                       // Save the value unless a lock-winning thread is already expected to do that
+                                       $setOpts['lockTSE'] = $lockTSE;
+                                       $setOpts['staleTTL'] = $staleTTL;
+                                       // Use best known "since" timestamp if not provided
+                                       $setOpts += [ 'since' => $preCallbackTime ];
+                                       // Update the cache; this will fail if the key is tombstoned
+                                       $this->set( $key, $value, $ttl, $setOpts );
+                               }
                        }
                }
 
-               if ( $lockAcquired ) {
+               if ( $hasLock ) {
                        // Avoid using delete() to avoid pointless mcrouter broadcasting
                        $this->cache->changeTTL( self::MUTEX_KEY_PREFIX . $key, (int)$preCallbackTime - 60 );
                }
@@ -1345,6 +1363,41 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                return $value;
        }
 
+       /**
+        * @param string $key
+        * @param string $kClass
+        * @param float $elapsed Seconds spent regenerating the value
+        * @param float $lockTSE
+        * @param $hasLock bool
+        * @return bool Whether it is OK to proceed with a key set operation
+        */
+       private function checkAndSetCooloff( $key, $kClass, $elapsed, $lockTSE, $hasLock ) {
+               // If $lockTSE is set, the lock was bypassed because there was no stale/interim value,
+               // and $elapsed indicates that regeration is slow, then there is a risk of set()
+               // stampedes with large blobs. With a typical scale-out infrastructure, CPU and query
+               // load from $callback invocations is distributed among appservers and replica DBs,
+               // but cache operations for a given key route to a single cache server (e.g. striped
+               // consistent hashing).
+               if ( $lockTSE < 0 || $hasLock ) {
+                       return true; // either not a priori hot or thread has the lock
+               } elseif ( $elapsed <= self::SET_DELAY_HIGH_SEC ) {
+                       return true; // not enough time for threads to pile up
+               }
+
+               $this->cache->clearLastError();
+               if (
+                       !$this->cache->add( self::COOLOFF_KEY_PREFIX . $key, 1, self::COOLOFF_TTL ) &&
+                       // Don't treat failures due to I/O errors as the key being in cooloff
+                       $this->cache->getLastError() === BagOStuff::ERR_NONE
+               ) {
+                       $this->stats->increment( "wanobjectcache.$kClass.cooloff_bounce" );
+
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * @param mixed $value
         * @param float $asOf
index f4856be..078c819 100644 (file)
@@ -275,6 +275,7 @@ class LinkHolderArray {
 
        /**
         * Replace internal links
+        * @suppress SecurityCheck-XSS Gets confused with $entry['pdbk']
         * @param string &$text
         */
        protected function replaceInternal( &$text ) {
@@ -418,6 +419,7 @@ class LinkHolderArray {
        /**
         * Replace interwiki links
         * @param string &$text
+        * @suppress SecurityCheck-XSS Gets confused with $this->interwikis['pdbk']
         */
        protected function replaceInterwiki( &$text ) {
                if ( empty( $this->interwikis ) ) {
index 1a23258..4158082 100644 (file)
@@ -423,6 +423,11 @@ class ResourceLoader implements LoggerAwareInterface {
 
                // Add the QUnit testrunner as implicit dependency to extension test suites.
                foreach ( $testModules['qunit'] as &$module ) {
+                       // Shuck any single-module dependency as an array
+                       if ( is_string( $module['dependencies'] ) ) {
+                               $module['dependencies'] = [ $module['dependencies'] ];
+                       }
+
                        $module['dependencies'][] = 'test.mediawiki.qunit.testrunner';
                }
 
index ea1cf59..dfdbc07 100644 (file)
@@ -848,23 +848,23 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
                                $softwareActivatedTags = array_fill_keys( ChangeTags::listSoftwareActivatedTags(), 0 );
 
-                               // Hit counts disabled for perf reasons, see T169997
-                               /*
                                $tagStats = ChangeTags::tagUsageStatistics();
                                $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags, $tagStats );
 
-                               // Sort by hits
-                               arsort( $tagHitCounts );
-                               */
-                               $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags );
+                               // Sort by hits (disabled for now)
+                               //arsort( $tagHitCounts );
 
                                // Build the list and data
                                $result = [];
                                foreach ( $tagHitCounts as $tagName => $hits ) {
                                        if (
-                                               // Only get active tags
-                                               isset( $explicitlyDefinedTags[ $tagName ] ) ||
-                                               isset( $softwareActivatedTags[ $tagName ] )
+                                               (
+                                                       // Only get active tags
+                                                       isset( $explicitlyDefinedTags[ $tagName ] ) ||
+                                                       isset( $softwareActivatedTags[ $tagName ] )
+                                               ) &&
+                                               // Only get tags with more than 0 hits
+                                               $hits > 0
                                        ) {
                                                $result[] = [
                                                        'name' => $tagName,
index 5b939ef..3a180db 100644 (file)
@@ -152,6 +152,15 @@ class SpecialContributions extends IncludableSpecialPage {
                }
                $this->opts = ContribsPager::processDateFilter( $this->opts );
 
+               if ( $this->opts['namespace'] < NS_MAIN ) {
+                       $this->getOutput()->wrapWikiMsg(
+                               "<div class=\"mw-negative-namespace-not-supported error\">\n\$1\n</div>",
+                               [ 'negative-namespace-not-supported' ]
+                       );
+                       $out->addHTML( $this->getForm() );
+                       return;
+               }
+
                $feedType = $request->getVal( 'feed' );
 
                $feedParams = [
index 1b2bda9..c4e4635 100644 (file)
@@ -119,7 +119,9 @@ class SpecialRedirect extends FormSpecialPage {
                        // ... and we can
                        if ( $mto && !$mto->isError() ) {
                                // ... change the URL to point to a thumbnail.
-                               $url = $mto->getUrl();
+                               // Note: This url is more temporary as can change
+                               // if file is reuploaded and has different aspect ratio.
+                               $url = [ $mto->getUrl(), $height === -1 ? 301 : 302 ];
                        }
                }
 
@@ -224,7 +226,21 @@ class SpecialRedirect extends FormSpecialPage {
                                break;
                }
                if ( $status && $status->isGood() ) {
-                       $this->getOutput()->redirect( $status->getValue() );
+                       // These urls can sometimes be linked from prominent places,
+                       // so varnish cache.
+                       $value = $status->getValue();
+                       if ( is_array( $value ) ) {
+                               list( $url, $code ) = $value;
+                       } else {
+                               $url = $value;
+                               $code = 301;
+                       }
+                       if ( $code === 301 ) {
+                               $this->getOutput()->setCdnMaxage( 60 * 60 );
+                       } else {
+                               $this->getOutput()->setCdnMaxage( 10 );
+                       }
+                       $this->getOutput()->redirect( $url, $code );
 
                        return true;
                }
index 3fac73c..aedb9e6 100644 (file)
@@ -99,7 +99,7 @@ class ActiveUsersPager extends UsersPager {
                ];
                $options = [];
                if ( $data !== null ) {
-                       $options['ORDER BY'] = 'qcc_title ' . $data['dir'];
+                       $options['ORDER BY'] = 'qcc_title ' . $data['order'];
                        $options['LIMIT'] = $data['limit'];
                        $conds = array_merge( $conds, $data['conds'] );
                }
index 69dce53..2fc946e 100644 (file)
@@ -32,7 +32,6 @@ use Wikimedia\Rdbms\IResultWrapper;
 class BlockListPager extends TablePager {
 
        protected $conds;
-       protected $page;
 
        /**
         * Array of restrictions.
@@ -46,7 +45,6 @@ class BlockListPager extends TablePager {
         * @param array $conds
         */
        public function __construct( $page, $conds ) {
-               $this->page = $page;
                $this->conds = $conds;
                $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                parent::__construct( $page->getContext() );
index 2b094b1..d03401d 100644 (file)
  */
 class NewPagesPager extends ReverseChronologicalPager {
 
-       // Stored opts
+       /**
+        * @var FormOptions
+        */
        protected $opts;
 
        /**
-        * @var HTMLForm
+        * @var SpecialNewpages
         */
        protected $mForm;
 
+       /**
+        * @param SpecialNewpages $form
+        * @param FormOptions $opts
+        */
        public function __construct( $form, FormOptions $opts ) {
                parent::__construct( $form->getContext() );
                $this->mForm = $form;
index f457d2f..bc4202e 100644 (file)
@@ -23,7 +23,7 @@ use MediaWiki\Linker\LinkRenderer;
 
 class ProtectedPagesPager extends TablePager {
 
-       public $mForm, $mConds;
+       public $mConds;
        private $type, $level, $namespace, $sizetype, $size, $indefonly, $cascadeonly, $noredirect;
 
        /**
@@ -32,7 +32,7 @@ class ProtectedPagesPager extends TablePager {
        private $linkRenderer;
 
        /**
-        * @param SpecialProtectedpages $form
+        * @param SpecialPage $form
         * @param array $conds
         * @param string $type
         * @param string $level
@@ -48,7 +48,6 @@ class ProtectedPagesPager extends TablePager {
                $sizetype, $size, $indefonly, $cascadeonly, $noredirect,
                LinkRenderer $linkRenderer
        ) {
-               $this->mForm = $form;
                $this->mConds = $conds;
                $this->type = ( $type ) ? $type : 'edit';
                $this->level = $level;
index 4f24713..aaa5d16 100644 (file)
@@ -173,7 +173,7 @@ class Names {
                'gan' => '贛語', # Gan (multiple scripts - defaults to Traditional)
                'gan-hans' => "赣语(简体)\u{200E}", # Gan (Simplified Han)
                'gan-hant' => "贛語(繁體)\u{200E}", # Gan (Traditional Han)
-               'gcr' => 'kréyòl gwiyanè', # Guianan Creole
+               'gcr' => 'kriyòl gwiyannen', # Guianan Creole
                'gd' => 'Gàidhlig', # Scots Gaelic
                'gl' => 'galego', # Galician
                'glk' => 'گیلکی', # Gilaki
index 6a4f6f1..b36855f 100644 (file)
        "recentchangeslinked": "تغييرات ذات علاقة",
        "recentchangeslinked-title": "التغييرات المرتبطة ب \"$1\"",
        "recentchangeslinked-summary": "هذي ليستة بالتبديلات إلّي صاروا ما صارلهمش برشا للپاجات إلّي موجود ليان يدّي ليهم في پاج بذاتها (ولّا في پاج متاع تصنيف معين).\nالپاجات في [[Special:Watchlist|ليستة الپاجات إلّي تّبعها]] '''مكتوبين بالغليظ'''",
-       "recentchangeslinked-page": "Ø¥سم الپاج:",
+       "recentchangeslinked-page": "اسم الپاج:",
        "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضاً عن ذلك",
        "upload": "صبّ فشياي",
        "uploadlogpage": "سجل الرفع",
index fd356d7..74c7e34 100644 (file)
        "privacypage": "Project:গোপনীয়তার নীতি",
        "badaccess": "অনুমোদন ত্রুটি",
        "badaccess-group0": "আপনি যে কাজের জন্য অনুরোধ করেছেন তা আপনার সম্পন্ন করার অনুমতি নেই।",
-       "badaccess-groups": "à¦\86পনি à¦¯à§\87 à¦\95াà¦\9cà¦\9fি à¦\95রতà§\87 à¦\9aাà¦\9aà§\8dà¦\9bà§\87ন à¦¤à¦¾ à¦\95à§\87বল {{PLURAL:$2|à¦\8fà¦\87 à¦¦à¦²à§\87র|à¦\8fà¦\87 à¦¦à¦²à¦\97à§\81লির à¦¯à§\87à¦\95à§\8bন à¦\8fà¦\95à¦\9fির}} à¦\8fà¦\95à¦\9cন à¦¸à¦¦à¦¸à§\8dয à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¸à¦®à§\8dপাদন à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন: $1।",
+       "badaccess-groups": "আপনি যে কাজটি করতে চাচ্ছেন তা কেবল {{PLURAL:$2|এই দলের|এই দলগুলির যেকোন একটির}} একজন ব্যবহারকারী সম্পাদন করতে পারেন: $1।",
        "versionrequired": "মিডিয়াউইকির $1 নং সংস্করণ প্রয়োজন",
        "versionrequiredtext": "এই পাতাটি ব্যবহার করার জন্য মিডিয়াউইকির $1 নং সংস্করণ প্রয়োজন। [[Special:Version|সংস্করণ পাতা]] দেখুন।",
        "ok": "ঠিক আছে",
index 048a310..ab3b572 100644 (file)
        "mergehistory-list": "ڤیرگار آلشدکاریٱل سٱریٱک بیڌنی",
        "mergehistory-go": "دیاری کردن آلشدکاریٱل سٱریٱک بیڌنی",
        "mergehistory-submit": "سر یٱک کردن ڤانیاریٱل",
+       "mergehistory-fail-invalid-source": "سرچشمٱ بٱلگاْ نادیاراْ.",
+       "mergehistory-fail-invalid-dest": "بٱلگاْ مٱقسٱڌ نادیاراْ.",
        "mergehistory-reason": "دلیل:",
        "mergelog": "سیائاْ ؤریٱک",
        "revertmerge": "سٱڤا کردن",
        "history-title": "دوڤارتاْ دیڌن ڤیرگار $1",
        "difference-title": "فٱرخ میٛنجقا ڤاناٛیریا \"$1\"",
-       "difference-multipage": "(فٱخ میٛنجقا بٱلگاْیٱل)",
+       "difference-title-multipage": "فٱرخ میٛنجقا بٱلگاْیٱل \"$1\" و \"$2\"",
+       "difference-multipage": "(فٱرخ میٛنجقا بٱلگاْیٱل)",
        "lineno": "خٱت $1:",
        "compareselectedversions": "کنار یٱک ناهاڌن ڤانیٱریٱل گولاْڤورچین ڤابیڌاْ",
        "editundo": "ٱنجومشیڤ کردن",
        "diff-empty": "(یٱ جۊر)",
        "diff-multi-sameuser": "({{PLURAL:$1|یٱ دۊناٛ نوسقاٛ مؽنجخایی|$1 نوسقاٛیٱل مؽنجخایی}} ب دٱسد{{PLURAL:$2|کاریاری ديٱ|$2 کاريارا}} نشۊن دیاری نٱکرداْ)",
        "diff-multi-otherusers": "({{PLURAL:$1|یٱ نوسقاْ میٛنجقایی|$1 نوسقاْیٱل میٛنجایی}} ڤا دٱسد {{PLURAL:$2|کاریاری دیٱ|$2 کاریارٱل}} نشۊن داڌاْ نٱڤابیڌاْ)",
+       "diff-paragraph-moved-tonew": "پاراگراف جا ب جا ڤابی، یٱ کاْرٱت بپۊرنین تا رۉین یٱ جا دیٱر.",
+       "diff-paragraph-moved-toold": "پاراگراف جا ب جا ڤابی، یٱ کاْرٱت بپۊرنین تا رۉین ب جا نیایی.",
        "searchresults": "نتيجاْیٱل پاٛی جۊری",
        "search-filter-title-prefix-reset": "پاٛی جۊری میٛن تٱموم بٱلگاْیٱل",
        "searchresults-title": "نتيجاْیٱل پاٛی جۊری سی \"$1\"",
        "search-redirect": "(ڤاگٱردونی ز $1)",
        "search-section": "(بٱرجا $1)",
        "search-category": "(دٱسداْ $1)",
-       "search-file-match": "(Û\8cÚ©Û\8c Ú©Ø±Ø¯Ù\86 Ù\85Û\8cÙ\86Û\8aناْ جانیا)",
+       "search-file-match": "(Û\8cÚ©Û\8c Ú©Ø±Ø¯Ù\86 Ù\85Û\8cÙ\9bÙ\86Ù\88ناْ جانیا)",
        "search-suggest": "مٱنزۊرت یو بی:$1",
        "search-interwiki-default": "نتیجاْیٱل $1:",
        "search-interwiki-more": "(بيشتر)",
        "right-upload_by_url": "سوڤار کرد جانیایٱل ز یٱ یۊ آر اْل",
        "right-writeapi": "سي نڤشدن اْی پی آی ڤٱنين ڤاکار",
        "right-delete": "پاکسا کردن بٱلگاْیٱل",
+       "right-bigdelete": "بٱلگاْیٱلی ناْ کاْ ڤیرگار گٱپ دارن پاکسا کونین.",
+       "right-browsearchive": "پاٛی جۊری میٛن بٱلگاْیٱل پاکسا ڤابیڌاْ.",
+       "right-undelete": "بٱلگاْ ناْ پاکسا نٱکونین",
        "right-block": "نیا کاریارٱل دیٱر ناْ ز آلشدکاری بگرین.",
        "right-blockemail": "نیا کاریار ناْ سی بیٛسی کردن ٱنجوماناماْ بگرین",
        "right-hideuser": "نیاگری یٱ نوم کاریاری، قام کردنس ز ڤٱر تی خٱلک",
        "rcfilters-activefilters-hide": "قام کردن",
        "rcfilters-activefilters-show": "دیاری کردن",
        "rcfilters-advancedfilters": "فیلترٱل پیشکرداْ",
+       "rcfilters-limit-title": "نتیجاْیٱل سی دیاری کردن",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|آلشدکاری|آلشدکاریٱل}}, $2",
        "rcfilters-days-title": "رۊزٱل ایسنی",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|رۊز|رۊزٱل}}",
        "rcfilters-highlighted-filters-list": "پورٱنڳ ڤابیڌاْ:$1",
        "rcfilters-invalid-filter": "فیلتر نادیار",
        "rcfilters-filterlist-title": "فیلترٱل",
        "rcfilters-filterlist-whatsthis": "یونو چ جۊر کار اْکونن؟",
+       "rcfilters-highlightmenu-title": "یٱ رٱنڳ گولاْڤورچین کونین",
+       "rcfilters-filterlist-noresults": "هیچ فیلتری دیاری نکرد.",
        "rcfilters-filter-editsbyself-label": "ایسا آلشدس کردین",
        "rcfilters-filter-editsbyother-label": "آلشدکاریٱل دیٱرون",
        "rcfilters-filter-user-experience-level-registered-label": "سٱڤت نام ڤابیڌاْ",
        "rcfilters-filtergroup-lastRevision": "آخری ڤانیٱریٱل",
        "rcfilters-filter-lastrevision-label": "آخری ڤانیٱری",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:نیڌ</strong> $1",
+       "rcfilters-target-page-placeholder": "نوم یٱ بٱلگاْ(یا دٱسداْ) ناْ بزنین",
        "rcnotefrom": "ڤازیر {{PLURAL:$5|آلشدکاری|آلشدکاریٱل}}ز ڤیرگار strong>$3, $4</strong> تا ڤیرگار <strong>$1</strong>  دیاری اْکونن .",
        "rclistfrom": "دیار کردن آلشدکاریٱل ز $3 $2",
        "rcshowhideminor": "آلشدکاری کۊچیر $1",
        "sourcefilename": "سرچشماْ نوم جانیا:",
        "sourceurl": "سرچشماْ يۊ آر ال:",
        "destfilename": "نوم جانیا مٱقسٱڌ:",
+       "upload-description": "تۉزی جانیا",
        "watchthisupload": "ساٛیل ای جانیا کونین",
        "upload-proto-error": "پورتوکول نادوروسد",
        "upload-file-error": "خٱتا میٛنجقایی",
        "upload-form-label-own-work": "یو کار موناْ.",
        "upload-form-label-infoform-categories": "دٱسداْیٱل",
        "upload-form-label-infoform-date": "ڤیرگار",
+       "http-invalid-url": "یۊ آر اْل لیش:$1",
        "http-read-error": "خٱتا خوندن اْچ تی تی پی.",
        "http-internal-error": "خٱتا میٛنجقایی اْچ تی تی پی",
        "license": "میٛن هال و بال لیسانس دار ڤابیڌن",
        "linkstoimage-more": "More than $1 {{PLURAL:$1|page uses|pages use}} this file.\nThe following list shows the {{PLURAL:$1|first page|first $1 pages}} that use this file only.\nA [[Special:WhatLinksHere/$2|full list]] is available.",
        "nolinkstoimage": "ای پٱرڤٱناْ مؽن هیچ بٱلٛیاْ نؽڌا",
        "linkstoimage-redirect": "$1 (ڤاگٱردۊنی جانیا) $2",
-       "sharedupload": "ای فایل یک آپلود اشتراکی هده و ممکنه زه طریق  پروژه‌های دیگه  هم قابل دسترسی بوه",
+       "sharedupload": "ای جانیا کاْ ز  $1 گاشا میٛن پوروجاْیٱل دیٱ ڤٱسداْ بۊ ڤاکار",
        "sharedupload-desc-here": "جانیایی کاْ میٛن $1 گاشا میٛن پوروجٱیٱل هٱنی ٱم ب کار گرهڌاْ ڤابیڌاْ بۊ.\nتۉزی سی [$2 file description page] میٛن دڤۊن دیاراْ",
        "filepage-nofile": "چونو جانیایی ڤا چونڤ اْسمی نیڌس.",
-       "uploadnewversion-linktext": "آپلود کردن یه نسخه تازه زه ای فایل",
+       "uploadnewversion-linktext": "یٱ نوسقاْ تازاْ زی جانیا سوڤار کونین",
        "shared-repo-from": "ز $1",
        "upload-disallowed-here": "ايسا ناْترین ای جانیا نٱ ز نۉ سوڤار کونین",
+       "filerevert": "ز سرگرهڌن سی $1",
+       "filerevert-legend": "ز سرگرهڌن جانیا",
        "filerevert-comment": "دلیل:",
+       "filerevert-submit": "لرنیڌن",
        "filedelete": "$1 ناْ پاکسا کو",
        "filedelete-legend": "پاکسا کردن جانیا",
        "filedelete-comment": "دلیل:",
        "filedelete-submit": "پاکسا کردن",
+       "filedelete-success": "<strong>$1</strong> پاکسا ڤابیڌاْ.",
+       "filedelete-otherreason": "دیٱری/دلیل اْزافی:",
        "filedelete-reason-otherlist": "دلیل هیٛنی",
+       "filedelete-reason-dropdown": "*دلیل جاڤٱسداْ سی پاکسا کردن\n*تی پۊشنیڌن ز کوپی رایت\n*جانیا تکراری",
+       "filedelete-edit-reasonlist": "دلیل پاکسا کردن ناْ آلشد کونین",
+       "filedelete-maintenance-title": "نیبۊ جانیا ناْ پاکسا کونین",
        "mimesearch": "MIME جستجو رو پایه",
+       "mimetype": "جۊر MIME:",
        "download": "گرهڌن",
-       "listredirects": "لیست تغییر مسیرها",
-       "unusedtemplates": "قالبها یا الگوهای استفاده نوابیده",
+       "listredirects": "نومگاْ ڤاگٱردونیٱل",
+       "unusedtemplates": "چۊئاْیٱل ڤا کار نٱڤٱسداْ",
+       "unusedtemplateswlh": "هومپاٛیڤٱندٱل هیٛنی",
        "randompage": "بٱلگاْ شامسٱکی",
        "randomincategory-category": "دٱسداْ:",
        "randomincategory-submit": "رۉ",
-       "randomredirect": "تغییر مسیر اتفاقی",
+       "randomredirect": "ڤاگٱردونی بٱختٱکی",
        "statistics": "آمار",
        "statistics-header-pages": "آمار بٱلگاْ",
        "statistics-header-edits": "آمار آلشدکاریٱل",
        "statistics-header-users": "آمار کاریارٱل",
+       "statistics-articles": "بٱلگاْیٱل مینۊناْ دار",
        "statistics-pages": "بٱگاْیٱل",
        "statistics-files": "جانیایٱل سوڤار ڤابیڌاْ",
        "statistics-users": "کاریارٱل سٱڤت نام کرداْ",
        "statistics-users-active": "کاریارٱل کونشتکار",
+       "pageswithprop-prop": "نوم خاسیٱت:",
        "pageswithprop-submit": "رۉ",
-       "doubleredirects": "تغییر مسیر دوبله",
+       "doubleredirects": "ڤاگٱردونی دۊبلاْ",
        "double-redirect-fixer": "ساموݩکار آلشڌتورٱل",
-       "brokenredirects": "تغییرمسیرهای اشکسته وخراو",
+       "brokenredirects": "ڤاگٱردونیٱل بی سرٱنجوم",
        "brokenredirects-edit": "آلشدکاری کردن",
        "brokenredirects-delete": "پاکسا کردن",
-       "withoutinterwiki": "صÙ\81حات Ø¨Ø¯Ù\88Ù\86 Ù\84Û\8cÙ\86Ú© Ù\87اÛ\8c Ø²Ø¨Ø§Ù\86Û\8c Ù\85Û\8cاÙ\86 Ù\88Û\8cÚ©Û\8c",
+       "withoutinterwiki": "بٱÙ\84گاÙ\92Û\8cÙ±Ù\84Û\8c Ú©Ø§Ù\92 Ù\87Ù\88Ù\85پاÙ\9bÛ\8cÚ¤Ù±Ù\86د Ø²Ú¤Ù\88Ù\86 Ù\86ارÙ\86",
        "withoutinterwiki-legend": "دیندادیس",
        "withoutinterwiki-submit": "دیاری کردن",
-       "fewestrevisions": "صÙ\81حات Ø¨Ø§ Ú©Ù\85ترÛ\8cÙ\86 ØªØ¹Ø¯Ø§Ø¯Ø§ØµÙ\84احات Ù\88تجدÛ\8cدÙ\86ظرÙ\87ا",
+       "fewestrevisions": "بٱÙ\84گاÙ\92Û\8cÙ±Ù\84Û\8c Ú©Ø§Ù\92 Ú©Ù\85ترÛ\8cÙ\86 Ú¤Ø§Ù\86Û\8cٱرÛ\8c Ù\86اÙ\92 Ø¯Ø§Ø±Ù\86",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
        "ncategories": "{{PLURAL:$1|دٱسداْ|دٱسداْیٱل}}",
        "ninterwikis": "$1 {{PLURAL:$1|میٛن ڤیکی|میٛن ڤیکی یٱل}}",
        "nmembers": "$1 {{PLURAL:$1|ٱندوم|ٱندومٱل}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|ٱندوم|ٱندومٱل}}",
        "nrevisions": "$1 {{PLURAL:$1|ڤانیٱری|ڤانیٱریٱل}}",
+       "nimagelinks": "ڤا کار ڤٱسداْ میٛن $1 {{PLURAL:$1|بٱلگاْ|بٱلگاْیٱل}}",
+       "ntransclusions": "ڤا کار ڤٱسداْ میٛن $1 {{PLURAL:$1|بٱلگاْ|بٱلگاْیٱل}}",
+       "specialpage-empty": "نتیجاْیی سی ای گوزارشت نی.",
        "lonelypages": "بٱلگاْیٱل ییٛتیم",
        "uncategorizedpages": "بٱلگاْیٱل دٱسداْ بٱندی نٱڤابیڌاْ",
        "uncategorizedcategories": "دٱسداْیٱل دٱسداْ بٱندی نٱڤابیڌاْ",
        "unusedimages": "جانیایٱل ڤا کار نٱڤٱسداْ",
        "wantedcategories": "دٱسداْیٱل خاستنی",
        "wantedpages": "بٱلگاْیٱل خاستنی",
-       "mostlinked": "صفحاتی که بیشتر زه همه به هونو لینک داده وابیده",
-       "mostlinkedcategories": "دسته هایی که بیشتر زه همه به هونو لینک داده وابیده",
-       "mostlinkedtemplates": "قالبها یا الگوهایی که بیشتر زه همه به هونو لینک داده وابیده",
-       "mostcategories": "صفحات با بیشترین تعداد دسته بندی",
-       "mostimages": "تصاویری که بیشتر زه همه به هونو لینک داده وابیده",
-       "mostrevisions": "صفحات با تعداد اصلاحات زیاد",
+       "wantedfiles": "جانیایٱل خاستنی",
+       "wantedtemplates": "چۊئاْیٱل خاستنی",
+       "mostlinked": "بٱلگاْیٱلی کاْ بیشترین هومپاٛیڤٱند ناْ دارن",
+       "mostlinkedcategories": "دٱسداْیٱلی کاْ بیشترین هومپاٛیڤٱند ناْ دارن",
+       "mostlinkedtemplates": "چۊئاْیٱلی کاْ بیشترین هومپاٛیڤٱند ناْ دارن",
+       "mostcategories": "بٱلگاْیٱلی کاْ بیشترین دٱسداْبندی ناْ دارن",
+       "mostimages": "عسگایی کاْ بیشترین هومپاٛیڤٱند ناْ دارن",
+       "mostrevisions": "بٱلگاْیٱلی کاْ بیشترین ڤانیٱری ناْ دارن",
        "prefixindex": "نماواٛ نهاڤٱنڌ",
        "prefixindex-submit": "دیاری کردن",
+       "prefixindex-strip": "دیندادیس ناْ میٛن نتیچاْیٱل قام کو",
        "shortpages": "بٱلگاْیٱل کۊچیر",
        "longpages": "بٱلگاْیٱل بولوند",
        "deadendpages": "بٱلگاْیٱل بون بٱست",
-       "protectedpages": "صÙ\81حات Ø­Ù\81اظت Ù\88Ø­Ù\85اÛ\8cت Ù\88ابÛ\8cدÙ\87",
+       "protectedpages": "بٱÙ\84گاÙ\92Û\8cÙ±Ù\84 Ù¾Ù±Ø± Ù\88 Ù¾Û\8cÙ\85 Ú¤Ø§Ø¨Û\8cÚ\8cاÙ\92",
        "protectedpages-filters": "فيلترٱل",
        "protectedpages-page": "بٱلگاْ",
        "protectedpages-expiry": "خلاس ڤابیڌاْ:",
        "protectedpages-performer": "کاریار پٱر و پیم ڤابیڌاْ.",
        "protectedpages-params": "پینیارٱل پٱر و پیم کاری",
        "protectedpages-reason": "دلیل",
+       "protectedpages-submit": "نشوݩ داڌن بٱلگاْیٱل",
        "protectedpages-unknown-timestamp": "نادیار",
        "protectedpages-unknown-performer": "کاریار نادیار",
        "listusers": "نومگاْ کاریار",
+       "listusers-creationsort": "میزونکاری ز ری گات راست ڤابیڌن",
+       "listusers-desc": "میزونکاری ز ری گٱپ کۊچیری",
        "usereditcount": "$1 {{PLURAL:$1|آلشدکاری|آلشدکاریٱل}}",
        "usercreated": "{{GENDER:$3|راسد ڤابیڌاْ}} سی $1 تا $2",
        "newpages": "بٱلگاْیٱل نۏ",
        "pager-older-n": "{{PLURAL:$1|گٱپسالتر 1|گٱپسالتر $1}}",
        "apihelp": "هومیاری اْی پی آی",
        "apihelp-no-such-module": "ماجۊل \"$1\" دیاری نٱکرد.",
+       "apisandbox-submit": "خاستن",
+       "apisandbox-reset": "پاکسا کردن",
+       "apisandbox-retry": "ز نۉ تلاش کردن",
+       "apisandbox-helpurls": "هومپاٛیڤٱند هومیاری",
+       "apisandbox-examples": "نموناْیٱل",
+       "apisandbox-dynamic-parameters": "پینیارٱل اْزافی",
+       "apisandbox-dynamic-parameters-add-label": "اْزاف کردن پینیار:",
+       "apisandbox-dynamic-parameters-add-placeholder": "نوم پینیار.",
+       "apisandbox-add-multi": "اْزاف کردن",
+       "apisandbox-results": "نتیجاْیٱل",
+       "apisandbox-request-url-label": "درخاست یۊ آر اْل:",
+       "apisandbox-request-json-label": "درخاست JSON:",
+       "apisandbox-continue": "ديندا گرهڌن",
+       "apisandbox-continue-clear": "پاکسا کردن",
+       "apisandbox-multivalue-all-values": "$1 (تٱموم ٱرزایشتٱل)",
        "booksources": "سرچشماْیٱل کتاو",
        "booksources-search-legend": "پاٛ جۊری سی سٱرچٱشمٱیٱل کتاو",
        "booksources-search": "پاٛی جۊری",
        "specialloguserlabel": "مؽنتور:",
        "speciallogtitlelabel": "دال(داسۊن یا {{ns:user}}:نوم کاریاری سی کاریار):",
        "log": "پاْرستنوماْیٱل",
+       "logeventslist-submit": "نشوݩ دائن",
        "all-logs-page": "گشڌنمائیٱل",
        "alllogstext": "نمایشت یٱ جا کاْ تٱموم پهرستنۊماْیٱل میٛن {{SITENAME}}.\nایسا تاْرین ڤا گولاْڤورچین کردن جۊر پهرستنۊماْ ، نوم کاریاری(هساس ب کۊچیری و گٱپی هٱرفا) و بٱلگاْیٱل آلشت کرداْ(هساس ب گٱپی و کۊچیری هٱرفا) نمایشت نٱ دیر ز ڤیر کونین.",
        "logempty": "چونو چی کاْ ایسا خاسدین میٛن پهرستنۊماْ نیڌس",
+       "checkbox-select": "گولاْڤورچین کردن: $1",
+       "checkbox-all": "هٱماْ",
+       "checkbox-none": "هيش کوم",
        "allpages": "تٱموم بٱلگاْیٱل",
-       "nextpage": "صÙ\81Ø­Ù\87 Ø¨Ø¹Ø¯ی ($1)",
-       "prevpage": "صÙ\81Ø­Ù\87 Ù\82بÙ\84Û\8c($1)",
-       "allpagesfrom": "نمایش دادن صفحات با شروع زه:",
+       "nextpage": "بٱÙ\84گاÙ\92 Ù\86Û\8cاÛ\8cی ($1)",
+       "prevpage": "بٱÙ\84گاÙ\92 Ø¯Û\8cÙ\86داÛ\8cÛ\8c ($1)",
+       "allpagesfrom": "بٱلگاْیٱلی کاْ ز شورۊ ڤابیڌاْ ناْ دیاری کو:",
        "allarticles": "تٱموم بٱلگاْیٱل",
        "allpagessubmit": "رۉ",
-       "allpagesprefix": "نشو دادن صفحات همراه با پیشوند:",
+       "allpagesprefix": "دیاری کردن بٱلگاْیٱل ڤا پیشڤٱند:",
        "allpages-hide-redirects": "بؽ دیارنیڌن آلشڌتورٱل",
        "categories": "دٱسداْیٱل",
+       "categories-submit": "دیاری کردن",
+       "sp-deletedcontributions-contribs": "هومياریٱل",
+       "linksearch": "هومپاٛیڤٱند پاٛی جۊری خارجی",
+       "linksearch-pat": "سازاْیار پاٛی جۊری:",
+       "linksearch-ns": "نوم جا:",
+       "linksearch-ok": "پاٛی جۊری",
+       "listusers-submit": "نشوݩ دائن",
+       "listusers-noresult": "چونو کاریاری ڤوجۊڌ ناراْ.",
+       "listusers-blocked": "(نیاگری ڤابیڌاْ)",
+       "activeusers": "نومگٱ کاریارٱل کونشتکار",
+       "activeusers-noresult": "چونو کاریارٱلی ڤوجۊڌ نارن.",
+       "activeusers-submit": "دیاری کردن کاریارٱل کونتشکار",
+       "listgrouprights-group": "جٱرغاْ",
+       "listgrouprights-rights": "هوقۊق",
+       "listgrouprights-helppage": "هومیاری:هوقۊق جٱرغاْ",
        "listgrouprights-members": "(نومگاْ ٱندومٱل)",
+       "listgrouprights-addgroup": "{{PLURAL:$2|جٱرغاْ|جٱرغاْیٱل}} ناْ اْزاف کونین: $1",
+       "listgrouprights-removegroup": "{{PLURAL:$2|جٱرغاْ|جٱرغاْیٱل}} ناْ ڤوردارین: $1",
+       "listgrouprights-addgroup-all": "اْزاف کردن تٱموم جٱرغاْیٱل",
+       "listgrouprights-removegroup-all": "ڤورداشتن تٱموم جٱرغاْیٱل",
+       "listgrants-rights": "هوقۊق",
+       "trackingcategories-name": "نوم پاٛیغوم",
        "emailuser": "ٱنجوماناماْ کاریار",
-       "usermessage-editor": "پاٛیغوم فرشن سامۊناْیی",
+       "emailuser-title-notarget": "ٱنجوماناماْ کاریار",
+       "defemailsubject": "{{SITENAME}} ٱنجوماناماْ ز کاریار \"$1\"",
+       "emailusername": "نوم کاریاری:",
+       "emailusernamesubmit": "داڌن",
+       "email-legend": "یٱ ٱنجومانٱماْ سی کاریار دیٱری {{SITENAME}} بیٛسی کو",
+       "emailfrom": "ز:",
+       "emailto": "سی:",
+       "emailsubject": "داسوݩ:",
+       "emailmessage": "پاٛیغوم",
+       "emailsend": "بیٛسی کردن",
+       "emailccme": "یٱ کوپی ز پاٛیغوموم سیم بیٛسی کو",
+       "emailsent": "ٱنجوماناماْ بیٛسی ڤابیڌاْ",
+       "emailsenttext": "پاٛیغومتوݩ ٱنجوماناماْیی بیٛسی ڤابیڌاْ.",
+       "usermessage-summary": "لاهاڌن پاٛیغوم سیستمی.",
+       "usermessage-editor": "پاٛیغوم فرشن ساموناْیی",
        "watchlist": "لیسڌ دیناگریٱل مو",
-       "mywatchlist": "سئیل بٱرگ",
+       "mywatchlist": "ساÙ\9bیل بٱرگ",
        "watchlistfor2": "سی $1 $2",
-       "addedwatchtext": "صفحه «<nowiki>$1</nowiki>» به [[Special:Watchlist|لیست پی‌گیری‌های ]] ایسا\nاضاف وابید.\nتغییرات این صفحه و صفحه صحبت مر بوطه اش در آینده ایچو لیست ابوه. به‌علاوه، ای صفحه، سی واضح‌تر دیده وابیدن در [[Special:RecentChanges|فهرست تغییرات اخیر]] به شکل <b>سیاه</b> ایا.\n\nایر بعدا خواستین ای  صفحه زه لیست پی‌گیریهاتو ورداشته بوه، رو «'''عدم پی‌گیری'''» در بالای صفحه کلیک کنین.",
-       "removedwatchtext": "آن صفحه\"[[:$1]]\" جابجا وابیده زه[[Special:لیست پیگیری|لیست پیگیری ایسا]].",
+       "watchnologin": "هٱنی نٱڤۊڌیناْ ڤامیٛن",
+       "addwatch": "اْزاف کردن ب ساٛیل بٱرگ",
+       "addedwatchtext": "\"[[:$1]]\" و بٱلگاْ چٱک چناْس  اْزاف ڤابی ب [[Special:ساٛیل بٱرگ|ساٛیل بٱرگ]]توݩ .",
+       "removewatch": "ڤورداشتن ز ساٛیل بٱرگ",
+       "removedwatchtext": "\"[[:$1]]\" و بٱلگاْ چٱک چناْس  ز [[Special:نومگاْ ساٛیل بٱرگ|نومگٱ ساٛیل بٱرگ]]ایسا ڤورداشتاْ ڤابی.",
+       "removedwatchtext-talk": "\"[[:$1]]\" و بٱلگاْ هومیاریس  ز [[Special:نومگاْ ساٛیل بٱرگ|نومگٱ ساٛیل بٱرگ]]ایسا ڤورداشتاْ ڤابی.",
        "watch": "پاٛیگری",
-       "watchthispage": "پیگیری ای صفحه",
+       "watchthispage": "پاٛگری ای بٱلگاْ",
        "unwatch": "پاٛیگری نٱڤابیڌاْ",
        "watchlist-details": "{{PLURAL:$1|$1 بٱلٛگاْ|$1 بٱلٛگیٱل}} مؽن لیست دیناگری ایسا,هؽڌا",
        "wlheader-showupdated": "بٱلٛگیٱلؽ کاْ دیناتٱر زاْ آخرین ساٛل اؽسا آلشڌ آڤیڌ ناْ<strong>پورٱنڳ</strong> نماونیڌاْ آڤیڌناْ",
        "wlnote": "ڤاْ لٱم {{PLURAL:$1|آلشڌؽ|<strong>$1</strong> آلشڌؽ}} کاْ ڤاْ {{PLURAL:$2|سات|<strong>$2</strong> سات}} رٱئڌاْ انجوم آڤؽڌ مۉجۊڌ هؽڌا،ؤرگار دوکرٱت ڤینی دینائی: $3، $4",
        "wlshowlast": "نماونیڌن ٱخیری $1 سات $2 رۊز",
+       "watchlist-hide": "قام کردن",
+       "watchlist-submit": "نشوݩ دائن",
+       "wlshowhideminor": "هیرداْ ڤیرایشت",
+       "wlshowhidebots": "روڤاتٱل",
+       "wlshowhideliu": "کاریارٱل سٱڤت نام کرداْ",
+       "wlshowhideanons": "کاریارٱل نادیار",
+       "wlshowhidemine": "آلشدکاریٱل مو",
+       "wlshowhidecategorization": "دٱسداْ بٱندی بٱلگاْ",
        "watchlist-options": "دزاٛیٱل دیناگری",
-       "watching": "مئن حالت پي جوري",
-       "unwatching": "درحالت عدم پیگیری...",
+       "watching": "میٛن هال و بال پاٛیگری",
+       "unwatching": "میٛن هال و بال پاٛیگری نٱکردن...",
        "enotif_reset": "دزاٛکرڌن گشڌ بٱلٛگیٱل ڤاْ اوڌڤان نیٱشڌ آڤیڌاْ",
-       "deletepage": "حذف صفحه",
-       "historywarning": "توجه: آن صفحه ای که ایسا اخوین حذف کنین گزارش تاریخی داره:",
-       "confirmdeletetext": "ایسا اخوین یه صفحه بلند با همه گزارش تاریخی هونه حذف کنین.\nلطفا کانفیرم یا تائید کنین که تمایل وقصد ای کار را دارین, وایسا دوین یا می دانید نتایج وآثار ای کار را, و ایسا انجام ادین ای کار را مطابق با [[{{MediaWiki:Policy-url}}|سیاست‌ها]].",
-       "actioncomplete": "عمل  مربوطه راکامل کن",
-       "deletedtext": "\"$1\" حذف وابیده.\nبوین $2 سی ثبت حذف آخر.",
+       "enotif_impersonal_salutation": "{{SITENAME}} کاریار",
+       "enotif_minoredit": "یو یٱ هیرداْ ڤیرایشداْ",
+       "deletepage": "پاکسا کردن بٱلگاْ",
+       "confirm": "پوشت راست کاری کردن",
+       "excontent": "میٛنوناْ: \"$1\" بی",
+       "delete-confirm": "پاکسا کردن \"$1\"",
+       "delete-legend": "پاکسا کردن",
+       "historywarning": "ب ڤیرتوݩ بۊ:بٱلگاْیی کاْ ایسا خاین پاکساس کونین یٱ ڤیرگار $1 ڤا{{PLURAL:$1|ڤانیٱری|ڤانیٱریٱل}} داراْ:",
+       "historyaction-submit": "نشوݩ دائن",
+       "confirmdeletetext": "ایسا اْخاین یٱ بٱلگاْ بولوند ناْ ڤا تٱموم ڤیرگارس پاکسا کونن.\nلوتف کونین پوشت راستکاری کونین کاْ چونو کاری ناْ اْخاین ٱنجوم بڌین، ایسا دونین کاْ نتیجاْ و آریٛنگ کاری کاْ خاین ٱنجوم بڌین ڤا زی ری  [[{{MediaWiki:Policy-url}}|سیاستٱل]] بۊ.",
+       "actioncomplete": "کار کاْ خلاس ڤابی",
+       "actionfailed": "کار کاْ ناخوش سرٱنجوم بی",
+       "deletedtext": "\"$1\" پاکسا ڤابیڌاْ.\nبیٛنیٱر ب $2 سی سٱڤت آخری پاکسا کاریٱل.",
        "dellogpage": "پهرستنۊماْ پاکسا کردن",
+       "deletionlog": "پهرستنۊماْ پاکسا کردن",
        "deletecomment": "دلیل:",
-       "deleteotherreason": "دÛ\8cÙ\87/دÙ\84Û\8cÙ\84 Ø§Ø¶افی:",
-       "deletereasonotherlist": "دÙ\84Û\8cÙ\84 Ø¯Û\8cÙ\87",
+       "deleteotherreason": "دÛ\8cٱر/دÙ\84Û\8cÙ\84 Ø§Ù\92زافی:",
+       "deletereasonotherlist": "دÙ\84Û\8cÙ\84 Ø¯Û\8cٱر",
        "rollbacklink": "ڤورگٱشتن",
        "rollbacklinkcount": "چٱڤاساْ کردن $1 {{PLURAL:$1|آلشدکاری|آلشدکاریٱل}}",
+       "changecontentmodel-title-label": "داسوݩ بٱلگاْ",
+       "changecontentmodel-model-label": "مودل میٛنوناْ تازاْ",
+       "changecontentmodel-reason-label": "دلیل:",
+       "changecontentmodel-submit": "آلشد کردن",
        "protectlogpage": "پهرستنۊماْ پٱر و پیم کاری",
        "protectedarticle": "پٱر و پیم ڤابیڌاٛ \"[[$1]]\"",
        "modifiedarticleprotection": "بارت هناگری«[[$1]]» ناْ آلشڌنیڌ",
-       "prot_1movedto2": "[[$1]] جابجا وابید به[[$2]]",
+       "prot_1movedto2": "[[$1]] جا ب جا ڤابی سی [[$2]]",
        "protectcomment": "دلیل:",
-       "protectexpiry": "سپرÛ\8c Ù\88ابÛ\8cÚ\8eÙ\87 Ø§:",
-       "protect_expiry_invalid": "با سپری وابیدن وقت غیر معتبره.",
-       "protect_expiry_old": "سپری وابیدن وقت مربوط به گذشته.",
-       "protect-text": "ایسا ممکنه بوینین وتغییر بدین سطح حمایت زه ای صفحه'''$1'''.",
-       "protect-locked-access": "حساب کاربری ایسا اجازه تغییر سطح حمایت ای صفحه را نداره.\nای چونه تنظیمات جاری سی آن صفحه '''$1''':",
-       "protect-cascadeon": "ای صفحه  در حال حاضر حفاظت وحمایت وابیده چون که در {{PLURAL:$1|صفحه|صفحات}}\nزیر که گزینه حفاظت وحمایت موجی {{PLURAL:$1|آن|آن‌ها}} فعال هده ،\nایسا ترین سطح حفاظت ای صفحه را تغییر بدین اما ای کارنتره تاثیری رو\nحفاظت وحمایت موجی صفحه داشته بوه.",
+       "protectexpiry": "Ø®Ù\84اس Ú¤Ø§Ø¨Û\8cÚ\8cاÙ\92:",
+       "protect_expiry_invalid": "گات تٱموم ڤابیڌن دوروست نیڌ.",
+       "protect_expiry_old": "گات تٱموم ڤابیڌن ز دینداتراْ.",
+       "protect-text": "گاشا ایسا ریتراز پٱر و پیم کاری بٱلگاْ ناْ بیٛنیٱرین و آلشدس کونین سی '''$1'''.",
+       "protect-locked-access": "هساو کاریاری ایسا سلا آلشدکاری ریتراز پٱر و پیم کاری ناْ ناراْ.\nمیزونکاری ایسنی سی بلگاْ ایچوناْ '''$1''':",
+       "protect-cascadeon": "This page is currently protected because it is transcluded in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.\nChanges to this page's protection level will not affect the cascading protection.",
        "protect-default": "هٱماْ کاریارٱل سلادارن",
-       "protect-fallback": "درخواست\"$1\" اجازه",
-       "protect-level-autoconfirmed": "بستن کاربران ثبت نام نوابیده",
-       "protect-level-sysop": "Sysops فقط",
-       "protect-summary-cascade": "موجی کردن",
-       "protect-expiring": "سپری وابیده $1 (UTC)",
+       "protect-fallback": "فٱقٱت کاریارٱلی کاْ ب «$1» دٱسرسی دارن، سلادار ای کارن.",
+       "protect-level-autoconfirmed": "فٱقٱت کاریارٱلی کاْ خودپوشت راست کاری ڤابیڌناْ سلا چونو کاری دارن",
+       "protect-level-sysop": "فٱقٱت سردیڤونکارٱل",
+       "protect-summary-cascade": "مۉجی کردن",
+       "protect-expiring": "گات تٱمو ڤابیڌاْ $1 (UTC)",
+       "protect-expiry-indefinite": "بی گات",
        "protect-cascade": "حمایت صفحات دربرگیرنده در ای صفحه (cascading protection)",
        "protect-cantedit": "ایسا نترین تغییر بدین سطوح حمایتی ای صفحه را, زیرا ایسا اجازه اصلاح آن را ندارین.",
+       "protect-othertime": "گات هیٛنی:",
+       "protect-othertime-op": "گات هیٛنی:",
+       "protect-otherreason-op": "دلیل هیٛنی",
        "protect-expiry-options": "۱ ساعت:1 hour,۱ روز:1 day,۱ هفته:1 week,۲ هفته:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌نهایت:infinite",
        "restriction-type": "اجازه:",
        "restriction-level": "سطح محدودیت:",
-       "restriction-edit": "ڤيرایشت کردن",
+       "pagesize": "(بایتٱل)",
+       "restriction-edit": "آلشدکاری کردن",
        "restriction-move": "جا ڤا جا کردن",
+       "restriction-create": "راس كردن",
+       "restriction-upload": "سوڤارکرد",
        "undeletebtn": "بازیافت",
+       "undeleteviewlink": "ديڌن",
+       "undeletecomment": "دلیل:",
+       "undelete-search-submit": "پاٛی جۊری",
+       "undelete-show-file-submit": "هٱراْ",
        "namespace": "نوم جا:",
        "invert": "گولڤورچین کردن بٱرٱسگ بۊ",
        "tooltip-invert": "ز ری ای جٱڤاْ بپۊرنین و آلشدٱلی ناْ کاْ ماٛنجقا نوم ڤٱرگٱ گولاْڤورچین ڤابیڌن و ٱنجوم داڌاْ ڤابیڌناْ قام کونین.",
        "sp-contributions-blocklog": "پهرستنوماْ قولف ڤابیڌاْ",
        "sp-contributions-uploads": "سوڤارکردٱل",
        "sp-contributions-logs": "پاْرستنۊماْیٱل",
-       "sp-contributions-talk": "Ú\86Ù±Ú© Ú\86Ù\86اÙ\9b",
+       "sp-contributions-talk": "Ú\86Ù±Ú© Ú\86Ù\86اÙ\92",
        "sp-contributions-search": "سی هومیاریٱل پاٛی جۊری ڤابۊ",
        "sp-contributions-username": "نوم ناٛشۊن آی پی یا نوم کاریاری",
        "sp-contributions-toponly": "فقٱت آلشدکاریٱلی کاْ جۏزڤاْ آخریݩ دۉران دیاری کو",
        "whatlinkshere-hidelinks": "هومپاٛیڤٱند سی $1",
        "whatlinkshere-hideimages": "جانیا هومپاٛیڤٱندٱل $1",
        "whatlinkshere-filters": "فيلترٱل",
-       "blockip": "بستن کاربر",
+       "whatlinkshere-submit": "رۉ",
+       "autoblockid": "خود نیاگری #$1",
+       "block": "قولف کردن کاریار",
+       "unblock": "قولف نکردن کاریار",
+       "blockip": "قولف کردن {{GENDER:$1|کاریار}}",
+       "ipaddressorusername": "نوم نشوݩ آی پی یا نوم کاریاری",
+       "ipbreason": "دلیل:",
        "ipbcreateaccount": "راسد کردن هساو کاریاری",
+       "ipbsubmit": "ای کاریار ناْ نیاگری کو",
+       "ipbother": "گات هیٛنی:",
        "ipboptions": "۲ سات:2 hours,۱ رۊز:1 day,۳ رۊز:3 days,۱ هٱفتاْ:1 week,۲ هٱفتاْ:2 weeks,۱ ما:1 month,۳ ما:3 months,۶ ما:6 months,۱ سال:1 year,بی ڤیرگار:infinite",
+       "ipb-pages-label": "بٱگاْیٱل",
+       "ipb-namespaces-label": "نوم ڤارگٱیٱل",
+       "autoblocklist-submit": "پاٛی جۊری",
        "ipblocklist": "آدرسهای  آی پی وکاربران بسته وابیدند",
        "blocklist-userblocks": "قام کردن هساو نیاگری ڤابیڌاْ.",
        "infiniteblock": "بؽ تٱ",
index 9aa1bbb..c661dba 100644 (file)
        "and": "&#32;u",
        "faq": "PVP",
        "actions": "Hereketi",
-       "namespaces": "Heruna naman",
+       "namespaces": "Heruna nameyan",
        "variants": "Varyanti",
        "navigation-heading": "Menuyê navigasyoni",
        "errorpagetitle": "Xeta",
        "delete": "Bestere",
        "undelete_short": "{{PLURAL:$1|Yew vırnayışi|$1 Vırnayışan}} mestere",
        "viewdeleted_short": "{{PLURAL:$1|Jew vurnayış esternayi|$1 Vurnayışanê esternayan}} bımotne",
-       "protect": "Bısıtarne",
+       "protect": "Bışevekne",
        "protect_change": "bıvırne",
        "unprotect": "Starnayışi bıvurne",
        "newpage": "Perra newi",
        "templatesused": "{{PLURAL:$1|Şablon|Şabloni}} ke ena perrer de karneyayê:",
        "templatesusedpreview": "{{PLURAL:$1|Sablon|Sabloni}}  ke na verqayt de xebetnayê:",
        "templatesusedsection": "{{PLURAL:$1|Template|Templateyan}}  ke na qısım de xebetniyenê:",
-       "template-protected": "(sıtarna)",
+       "template-protected": "(şeveknaye)",
        "template-semiprotected": "(nime staryayış)",
        "hiddencategories": "Ena per de {{PLURAL:$1|1 kategoriyo nımıte|$1 kategoriyê nımıtey}} muhtewa benê:",
        "edittools": "<div id=\"specialcharss\" class=\"toccolours specialchars\" style=\"margin-top:.5em; padding: .3em .5em; font-size: 100%; color:#aaa; text-align:left;\" title=\"{{int:bw-edittools-tooltip}}\">\n<p class=\"specialbasic\" id=\"Standard\">\n'''{{int:bw-edittools-lead-in}}''' \n<charinsert>Á á É é Í í Ó ó Ú ú Ý ý</charinsert> –\n<charinsert>À à È è Ì ì Ò ò Ù ù </charinsert> –\n<charinsert> â Ê ê Î î Ô ô Û û </charinsert> –\n<charinsert>Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ</charinsert> –\n<charinsert>Æ æ Ø ø Œ œ ẞ ß </charinsert> –\n<charinsert>Å å Ů ů </charinsert> –\n<charinsert>àã Ẽ ẽ ɛ̃ Ĩ ĩ Ñ ñ Õ õ ɔ̃ Ũ ũ </charinsert> –\n<charinsert>Рð Þ þ </charinsert> –\n<charinsert>Ç ç Ģ ģ Ķ ķ Ļ ļ Ņ ņ Ŗ ŗ Ş ş Ţ ţ </charinsert> –\n<charinsert>Ć ć Ĺ ĺ Ń ń Ŕ ŕ Ś ś Ý ý Ź ź </charinsert> –\n<charinsert>Č č Ď ď Ľ ľ Ň ň Ř ř Š š Ť ť Ž ž </charinsert> –\n<charinsert>Ǎ ǎ Ě ě Ǐ ǐ Ǒ ǒ Ǔ ǔ </charinsert> –\n<charinsert>Ā ā Ē ē Ī ī Ō ō Ū ū </charinsert> –\n<charinsert>ǖ ǘ ǚ ǜ </charinsert> –\n<charinsert>Ĉ ĉ Ĝ ĝ Ĥ ĥ Ĵ ĵ Ŝ ŝ Ŵ ŵ Ŷ ŷ </charinsert> –\n<charinsert>Ă ă Ğ ğ Ŭ ŭ </charinsert> –\n<charinsert>Ċ ċ Ė ė Ġ ġ Għ għ İ ı Ż ż </charinsert> –\n<charinsert>Ą ą Ę ę Į į Ų ų </charinsert> –\n<charinsert>Ő ő Ű ű </charinsert> –\n<charinsert>Đ đ Ħ ħ Ł ł Ŀ ŀ </charinsert> –\n<charinsert>Ɖ ɖ Ɛ ɛ Ƒ ƒ Ɣ ɣ Ŋ ŋ Ɔ ɔ Ʋ ʋ </charinsert> -\n<charinsert>Ə ə </charinsert> –\n<charinsert>– — ’</charinsert> –\n<charinsert>~ | ° ¹ ² ³ ⅛ ¼ ⅓ ⅜ ½ ⅝ ¾ ⅔ ⅞ € $ ¥ £ † × ← → ↔ ↑ ± ≠ © ® ™ ‰ «+» ‹+› „+“ „+” ‚+‘ ¡ ¿ …</charinsert> –\n<charinsert>&amp;nbsp; &nbsp; [[Category:+]] #REDIRECT[[+]] {{msg-mw|+|notext=1}} &#33;!FUZZY!! ~~~~  &lt;nowiki>+</nowiki></charinsert>\n<charinsert>ڈ ڑ ٹ </charinsert>\n<charinsert>ټ څ ځ ډ ړ ږ ښ ڼ ؤ ي ې ۍ ئ </charinsert>\n<charinsert>{{{+}}} {{+}} {{subst:+}} <noinclude>+</noinclude></charinsert>\n<charinsert>&lt;!--&nbsp;+&nbsp;--> &lt;br&nbsp;/></charinsert>\n</p></div>",
        "email-allow-new-users-label": "Karberanê neweyan ra eposte gırotışi rê mısade bıdê",
        "email-blacklist-label": "Wa nê karberi mı rê mesac nêrışê:",
        "prefs-searchoptions": "Cı geyre",
-       "prefs-namespaces": "Heruna naman",
+       "prefs-namespaces": "Heruna nameyan",
        "default": "qısur",
        "prefs-files": "Dosyeyi",
        "prefs-custom-css": "CSSê xasi",
        "group": "Grube:",
        "group-user": "Karberi",
        "group-autoconfirmed": "Karberê ke otomatikmen biyê araşt",
-       "group-bot": "Roboti",
+       "group-bot": "Boti",
        "group-sysop": "İdarekari",
        "group-interface-admin": "İdarekarê namnişani",
        "group-bureaucrat": "Buroqrati",
        "right-upload_by_url": "Yew URL ra dosyeyan bar ke",
        "right-purge": "Virê sita seba yew pele bêdestur bestere.",
        "right-autoconfirmed": "Perê ke nême kılit biyê, inan bıvurne",
-       "right-bot": "Zey yew kardê otomotiki kar bıvin",
+       "right-bot": "Zey yew karê otomatiki kar bıvêne",
        "right-nominornewtalk": "Pelanê werênayışan rê vurnayışê qıckeki çıniyê, qutiya mesacanê newiyan bıgurene",
        "right-apihighlimits": "Persanê API de sinoranê berzêran bıgurene",
        "right-writeapi": "Xebtnayışê API nusnayışi",
        "rcshowhideminor": "Vırnayışê werdiy $1",
        "rcshowhideminor-show": "Bımocne",
        "rcshowhideminor-hide": "Bınımne",
-       "rcshowhidebots": "botan $1",
+       "rcshowhidebots": "boti $1",
        "rcshowhidebots-show": "Bımocne",
        "rcshowhidebots-hide": "Bınımne",
        "rcshowhideliu": "karberê qeydbiyay $1",
        "sp-deletedcontributions-contribs": "iştiraki",
        "linksearch": "Gıreyê teberi cı geyrê",
        "linksearch-pat": "bıgêr motif:",
-       "linksearch-ns": "Heruna namey:",
+       "linksearch-ns": "Heruna nameyan:",
        "linksearch-ok": "Cı geyre",
        "linksearch-text": "Jokeri ê zey \"*.wikipedia.org\"i benê ke bıgureniyê.\nTewr senık yew sewiya serêna cayê tesiri lazıma, mesela \"*.org\".<br />\nQeydeyê {{PLURAL:$2|protoqol|protoqoli}}:destegbiyayey: $1 (qet yew qeydeyo hesabiyaye http:// ke name nêbiyo).",
        "linksearch-line": "$1, $2 ra link biya",
        "listgrouprights-addgroup-self-all": "şıma eşkeni hesabê xo re heme gruban têare bıkerî",
        "listgrouprights-removegroup-self-all": "şıma hesabê xo ra eşkeni heme gruban bıveci",
        "listgrouprights-namespaceprotection-header": "Kılm kerdena nameyan",
-       "listgrouprights-namespaceprotection-namespace": "Heruna nami",
+       "listgrouprights-namespaceprotection-namespace": "Heruna nameyan",
        "listgrants": "Hibey",
        "listgrants-grant": "Hibe",
        "listgrants-rights": "Heqi",
        "undelete-error-long": "hewn a kerdışê na dosyayi wexta tepiya geriyenê xeta vıraziya:\n\n$1",
        "undelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" şıma emin î dosyaya revizyonê no $2 $3 tarixi bıvini?",
        "undelete-show-file-submit": "Eya",
-       "namespace": "Heruna namey:",
+       "namespace": "Heruna nameyan:",
        "invert": "Weçinayışi dimlaşt ke",
        "tooltip-invert": "nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan  zerrekan nımtışi re ena dore tesdiqi nışan kerê",
        "namespace_association": "Heruna namanê elaqedaran",
        "logentry-newusers-create2": "Hesabê karberi $1 terefê $3 ra {{GENDER:$2|vıraziya}}",
        "logentry-newusers-byemail": "Karber $1 hesabe $3 {{GENDER:$2|virast}} u parola rist epostadaci",
        "logentry-newusers-autocreate": "Hesabê karberi $1 otomatikmen {{GENDER:$2|vıraşt}}",
-       "logentry-protect-protect": "$1, pela $3 gırewte {{GENDER:$2|sıtare}} $4",
-       "logentry-protect-protect-cascade": "$1, pela $3 gırewte {{GENDER:$2|sıtare}} $4 [qademeyın]",
+       "logentry-protect-protect": "$1, pela $3 {{GENDER:$2|şeveknê}} $4",
+       "logentry-protect-protect-cascade": "$1, pela $3 {{GENDER:$2|şeveknê}} $4 [qademeyın]",
        "logentry-rights-rights": "$1 qandê {{GENDER:$6|$3}} rê ezayiya grube $4 ra $5 {{GENDER:$2|vuriye}}",
        "logentry-rights-rights-legacy": "$1 qandê $3 rê ezayiya grube {{GENDER:$2|vuriye}}",
        "logentry-rights-autopromote": "$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}",
index 81c305f..7416d3f 100644 (file)
        "anoncontribs": "Contributions",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "User account \"$1\" is not registered.",
+       "negative-namespace-not-supported": "Namespaces with negative values are not supported.",
        "nocontribs": "No changes were found matching these criteria.",
        "uctop": "current",
        "month": "From month (and earlier):",
index 3ae24a7..941da39 100644 (file)
                        "Theklan",
                        "Laura Ospina",
                        "Pipino-pumuki",
-                       "Carlosmg.dg"
+                       "Carlosmg.dg",
+                       "Mynor Archila"
                ]
        },
        "tog-underline": "Enlaces a subrayar:",
        "edit-gone-missing": "No se ha podido actualizar la página.\nParece haber sido borrada.",
        "edit-conflict": "Conflicto de edición.",
        "edit-no-change": "Se ignoró tu edición porque no se hizo ningún cambio en el texto.",
+       "edit-slots-cannot-add": "{{PLURAL:$1|La siguiente ranura no es soportada|Las siguientes ranuras no son soportadas}} aquí:",
        "edit-slots-missing": "{{PLURAL:$1|Falta el siguiente espacio|Faltan los siguientes espacios}}: $2",
        "postedit-confirmation-created": "Se ha creado la página.",
        "postedit-confirmation-restored": "Se ha restaurado la página.",
        "move": "Trasladar",
        "movethispage": "Trasladar esta página",
        "unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nTen en cuenta que otros sitios web pueden enlazar un archivo directamente por la URL, y por tanto pueden estar listados aquí a pesar de estar siendo usados de forma activa.",
+       "unusedimagestext-categorizedimgisused": "Los siguientes archivos existen, pero no están integrados en ninguna página. Las imágenes categorizadas son consideradas como utilizadas, a pesar de que no están incrustadas en ninguna página. Por favor tómese en cuenta que otros sitios pueden enlazarse a un archivo con una URL directa, y todavía pueden enlistarse aquí a pesar de estar en uso activo.",
        "unusedcategoriestext": "Las siguientes categorías han sido creadas, pero ningún artículo o categoría las utiliza.",
        "notargettitle": "No hay página objetivo",
        "notargettext": "No has especificado sobre qué página deseas llevar a cabo esta acción.",
index 5f5cc2c..655f524 100644 (file)
@@ -31,7 +31,8 @@
                        "Metsavend",
                        "Cumbril",
                        "Ilmarine",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Mardus"
                ]
        },
        "tog-underline": "Linkide allakriipsutus:",
        "pagecategories": "{{PLURAL:$1|Kategooria|Kategooriad}}",
        "category_header": "Leheküljed kategoorias \"$1\"",
        "subcategories": "Alamkategooriad",
-       "category-media-header": "Meediumifailid kategoorias \"$1\"",
-       "category-empty": "<em>Selles kategoorias pole praegu ühtegi lehekülge ega meediumifaili.</em>",
+       "category-media-header": "Meediafaile kategoorias \"$1\"",
+       "category-empty": "<em>Selles kategoorias pole praegu ühtegi lehekülge ega meediafaili.</em>",
        "hidden-categories": "{{PLURAL:$1|Peidetud kategooria|Peidetud kategooriad}}",
        "hidden-category-category": "Peidetud kategooriad",
        "category-subcat-count": "{{PLURAL:$2|Selles kategoorias on ainult järgmine alamkategooria.|{{PLURAL:$1|Järgmine alamkategooria|Järgmised $1 alamkategooriat}} on selles kategoorias (kokku $2).}}",
        "sort-ascending": "Järjesta tõusvalt",
        "nstab-main": "Artikkel",
        "nstab-user": "Kasutaja leht",
-       "nstab-media": "Meediumileht",
+       "nstab-media": "Meedialeht",
        "nstab-special": "Eri",
        "nstab-project": "Projektileht",
        "nstab-image": "Fail",
        "right-deletechangetags": "Kustutada andmebaasist [[Special:Tags|märgiseid]]",
        "grant-generic": "Volituse \"$1\" õiguste komplekt",
        "grant-group-page-interaction": "Interaktsioon lehekülgedega",
-       "grant-group-file-interaction": "Interaktsioon meediumifailidega",
+       "grant-group-file-interaction": "Käsitle meediafaile",
        "grant-group-watchlist-interaction": "Interaktsioon sinu jälgimisloendiga",
        "grant-group-email": "E-kirja saatmine",
        "grant-group-high-volume": "Suuremahuline tegevus",
        "tooltip-t-permalink": "Püsilink lehekülje sellele redaktsioonile",
        "tooltip-ca-nstab-main": "Vaata sisulehekülge",
        "tooltip-ca-nstab-user": "Näita kasutaja lehte",
-       "tooltip-ca-nstab-media": "Vaata meediumifaili lehekülge",
+       "tooltip-ca-nstab-media": "Vaata meedialehte",
        "tooltip-ca-nstab-special": "See on erilehekülg ja seda ei saa redigeerida.",
        "tooltip-ca-nstab-project": "Näita projekti lehte",
        "tooltip-ca-nstab-image": "Vaata faili lehekülge",
        "version-editors": "Toimetid",
        "version-antispam": "Rämpsposti tõkestus",
        "version-other": "Muu",
-       "version-mediahandlers": "Meediumitöötlejad",
+       "version-mediahandlers": "Meedia käsitlejad",
        "version-hooks": "Haagid",
        "version-parser-extensiontags": "Parseri lisasildid",
        "version-parser-function-hooks": "Parserifunktsioonid",
        "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins kasutada Giti, et kujundusi alla laadida].\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>keelatud</strong>)",
-       "mediastatistics": "Meediumifailide arvandmestik",
+       "mediastatistics": "Meediastatistika",
        "mediastatistics-summary": "Arvandmed üles laaditud failitüüpide kohta. See käib ainult failide viimaste versioonide kohta. Vanu ja kustutatud versioone pole arvesse võetud.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bait|$1 baiti}} ($2; $3%)",
        "mediastatistics-bytespertype": "Failide kogusuurus selles alaosas: $1 {{PLURAL:$1|bait|baiti}} ($2; $3%).",
        "mw-widgets-dateinput-no-date": "Kuupäev valimata",
        "mw-widgets-dateinput-placeholder-day": "AAAA-KK-PP",
        "mw-widgets-dateinput-placeholder-month": "AAAA-KK",
-       "mw-widgets-mediasearch-input-placeholder": "Otsi meediumifaile",
+       "mw-widgets-mediasearch-input-placeholder": "Otsi meediat",
        "mw-widgets-mediasearch-noresults": "Tulemusi ei leitud.",
        "mw-widgets-titleinput-description-new-page": "lehekülge pole veel",
        "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\"",
index 25eae75..f82b638 100644 (file)
        "blocklist-nousertalk": "oman keskustelusivun muokkaaminen estetty",
        "blocklist-editing": "muokkaaminen",
        "blocklist-editing-sitewide": "muokkaaminen (sivuston laajuisesti)",
+       "blocklist-editing-page": "лопат",
+       "blocklist-editing-ns": "лемпотмот",
        "ipblocklist-empty": "Estolista on tyhjä.",
        "ipblocklist-no-results": "Pyydettyä IP-osoitetta tai käyttäjätunnusta ei ole estetty.",
        "blocklink": "estä",
        "ipb_expiry_old": "Vanhentumisaika on menneisyyttä.",
        "ipb_expiry_temp": "Piilotettujen käyttäjätunnusten estojen tulee olla pysyviä.",
        "ipb_hide_invalid": "Tämän tunnuksen piilottaminen ei onnistu; sillä on enemmän kuin {{PLURAL:$1|yksi muokkaus|$1 muokkausta}}.",
+       "ipb_hide_partial": "Кекшезь совамолемень саймес саематне эрявить теемс сайтань келес.",
        "ipb_already_blocked": "”$1” on jo estetty.",
        "ipb-needreblock": "$1 on jo estetty. Haluatko muuttaa eston asetuksia?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Muu esto|Muut estot}}",
        "logentry-block-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|poisti muokkauseston}} käyttäjältä {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|muutti}} eston asetuksia kohteessa {{GENDER:$4|$3}}. Eston kesto on $5 $6",
-       "logentry-partialblock-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} muokkaamasta {{PLURAL:$8||sivuja}} $7. Eston kesto on $5 $6",
+       "logentry-partialblock-block-page": "{{PLURAL:$1|лопа|лопат}} $2",
+       "logentry-partialblock-block-ns": "{{PLURAL:$1|лемпотмо|лемпотмот}} $2",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|саймас саизе}} {{GENDER:$4|$3}}-нь, илязо витне-петне $7, зярдо витнема-петнема шказо $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} muokkauseston asetuksia estäen muokkausten tekemisen {{PLURAL:$8||sivuihin}} $7. Eston kesto on $5 $6",
        "logentry-non-editing-block-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} suorittamasta määrättyjä toimenpiteitä (lukuun ottamatta muokkaamista). Eston kesto on $5 $6",
        "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} toimintaeston asetuksia, jotka koskevat määrättyjä toimenpiteitä. Eston kesto on $5 $6",
index ce64a0a..1729226 100644 (file)
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|uloi]])",
        "duplicate-defaultsort": "'''Chotrai:''' Default arin manddunk chavi ''$2'' rodd korta adhlem default arin manddunk chavi ''$1'', haka.",
        "redirect": "Fayl, vaporpi, pan, uzollnni vo sotr ank‎ vorvim punornirdexon kor",
-       "redirect-summary": "Hem vixex pan punornirdexit korta eka faylik (faylichem nanv dilear), eke panak (uziollnecho ank vo panacho ank dilear), ek vaporpeachem panak (eke vaporpeache ank dilear), vo ek sotr provishtt (sotrachem ank dilear). Vapor: [[{{#Special:Redirect}}/file/Dekhik.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], vo [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-summary": "Hem vixex pan punornirdexit korta eka faylik (faylichem nanv dilear), eke panak (uziollnecho ank vo panacho ank dilear), ek vaporpeachem panak (eke vaporpeache ank dilear), vo ek sotr nond (sotrachem ank dilear). Vapor: [[{{#Special:Redirect}}/file/Dekhik.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], vo [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Voch‎",
        "redirect-lookup": "Suchien polloi:",
        "redirect-value": "Mol:",
index 41842e4..1f0d32e 100644 (file)
        "anoncontribs": "תרומות",
        "contribsub2": "עבור {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.",
+       "negative-namespace-not-supported": "אין תמיכה במרחבי שם בעלי ערך שלילי.",
        "nocontribs": "לא נמצאו שינויים המתאימים לקריטריונים אלו.",
        "uctop": "נוכחי",
        "month": "עד החודש:",
index 501a4b0..1692f47 100644 (file)
        "grant-delete": "Eyða síðum, yfirferðum og annálsfærslum",
        "grant-editinterface": "Breyta nafnrými MediaWiki og JSON notanda/vefsvæðis",
        "grant-editmycssjs": "Breyta þínum eigin CSS/JSON/JavaScript",
-       "grant-editmyoptions": "Breyta notandastillingunum þínum",
+       "grant-editmyoptions": "Breyta notandastillingunum þínum og JSON-uppsetningu",
        "grant-editmywatchlist": "Breyta vaktlistanum þínum",
        "grant-editpage": "Breyta fyrirliggjandi síðum",
        "grant-editprotected": "Breyta vernduðum síðum",
        "uploadstash-zero-length": "Lengd skráar er núll.",
        "invalid-chunk-offset": "Ógild raðbreyting bunka",
        "img-auth-accessdenied": "Aðgangur óheimill",
-       "img-auth-nopathinfo": "PATH_INFO vantar.\nBiðlarinn þínn er ekki stilltur til að gefa upp þessar upplýsingar.\nÞær mega vera CGI-byggðar og mega ekki styðja img_auth.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+       "img-auth-nopathinfo": "Vantar upplýsingar um slóð.\nÞjónninn þinn er ekki stilltur til að senda REQUEST_URI og/eða PATH_INFO breyturnar.\nEf svo er, prófaðu að virkja $wgUsePathInfo.\nSkoðaðu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Umbeðin slóð var ekki í stilltri innhleðslumöppu.",
        "img-auth-badtitle": "Mistókst að búa til gildan titil útfrá „$1”.",
        "img-auth-nologinnWL": "Þú ert ekki skráð(ur) inn og „$1“ er ekki á hvítlista.",
        "ipbreason": "Ástæða:",
        "ipbreason-dropdown": "* Algengar bannástæður\n** Setur inn rangar upplýsingar\n** Fjarlægir efni af síðum\n** Setur inn rusltengla á utanaðkomandi síður\n** Setur inn vitleysu/þvaður á síður\n** Yfirþyrmandi framkoma/áreitni\n** Misnotkun á fjölda notandanafna\n** Óásættanlegt notandanafn",
        "ipb-hardblock": "Banna innskráðum notendum að breyta frá þessu IP-vistfangi.",
-       "ipbcreateaccount": "Banna nýskráningu notandanafns",
-       "ipbemailban": "Banna notanda að senda tölvupóst",
+       "ipbcreateaccount": "Gerð notandaaðgangs",
+       "ipbemailban": "Senda tölvupóst",
        "ipbenableautoblock": "Banna síðasta vistfang notanda sjálfkrafa; og þau vistföng sem viðkomandi notar til að breyta síðum",
        "ipbsubmit": "Banna notanda",
        "ipbother": "Annar tími:",
        "ipboptions": "2 tíma:2 hours,1 dag:1 day,3 daga:3 days,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite",
        "ipbhidename": "Fela notandanafn úr breytingaskrá og listum",
        "ipbwatchuser": "Vakta notanda- og spjallsíður þessa notanda",
-       "ipb-disableusertalk": "Banna þessum notanda að breyta eigin spjallsíðu",
+       "ipb-disableusertalk": "Breyta eigin spjallsíðu",
        "ipb-change-block": "Endurbanna notanda með þessum stillingum",
        "ipb-confirm": "Staðfesta bann",
        "ipb-sitewide": "Á öllum vefnum",
index b59a20e..0333212 100644 (file)
@@ -31,6 +31,8 @@
        "tog-watchdefault": "Совавтомс монь витевть лопатнень ванома лемрисьмезэнь",
        "tog-watchmoves": "Совавтомс монь одов лемдявт лопатнень-керьмазтнэнь ванома лемрисьмезэнь",
        "tog-watchdeletion": "Совавтомс монь нардавт лопатнень-керьмазтнэнь ванома лемрисьмезэнь",
+       "tog-watchuploads": "Поладомс од файлат ваннома лемрисьмезэнь тонгомстост",
+       "tog-watchrollback": "Поладомс ваннома лемрисьмезэнь лопат, конатнень потмост велявтокшнынь мекев",
        "tog-minordefault": "Тешкстамс витевкстнэнь апокшкэкс, бути лиякс апак ёвта",
        "tog-previewontop": "Невтемс сёрмадовксонть васнянь невтевксэнь вальманть витеманьседенть икеле",
        "tog-previewonfirst": "Васнянь невтевкс васенцеде витнемстэ-петнемстэ",
@@ -53,6 +55,7 @@
        "tog-ccmeonemails": "Кучт монень копия е-сёрматнеде, конатнень кучан лия теицянень",
        "tog-diffonly": "Иляк невтне лопапотмоксонть diffs ало",
        "tog-showhiddencats": "Невтемс кекшень категориятнень",
+       "tog-norollbackdiff": "А невтемс явовоманзо лопапотмонть велявтомадо мейле",
        "underline-always": "Свал",
        "underline-never": "Зярдояк",
        "underline-default": "Браузерэнь ушодкс ладсематне",
        "right-mergehistory": "Вейсэндямс лопатнень юрост-путовксост",
        "right-userrights": "Витнемс-петнемс совицянь весе видечитнень",
        "right-siteadmin": "Сёлгомс ды панжомс датаюртонть",
+       "grant-createaccount": "Шкамс совамо таркат",
+       "grant-createeditmovepage": "Шкамс, витнемс-петнемс ды печтевтемс лопат",
+       "grant-editmywatchlist": "Витнемс-петнемс ваннома лемрисьменть",
+       "grant-rollback": "Велявтомс мекев лопатнес полавтоматнень",
+       "grant-uploadfile": "Тонгомс од файлат",
+       "grant-viewmywatchlist": "Ваномс ваннома лемрисьменть",
        "newuserlogpage": "Теицянь шкамодо-теемадо конёв",
        "newuserlogpagetext": "Те теицянь шкавксто журнал",
        "rightslog": "Уськетеицянть видечинть кемекстома",
        "empty-file": "Тонь максовт файлась чаво.",
        "filename-tooshort": "Файлань лементь а саты кувалмозо.",
        "unknown-error": "А содавикс манявкс лиссь.",
-       "file-thumbnail-no": "Файланть лемезэ ушодови  <strong>$1</strong>.\nСонсь маряви вишкалгавтозь фотокуво, покшолмазо ''(кенжешка)''.\nУлиндеряй файланть покш верзиязо, йовкстыка сонзэ  - арась, полавтыка тетень лемензэ.",
+       "file-thumbnail-no": "Файланть лемезэ ушодови  <strong>$1</strong>.\nСонсь маряви вишкалгавтозь фотокуво, покшолмазо ''(кенжешка)''.\nУлиндеряй файланть покш верзиязо, тонгика сонзэ  - арась, полавтыка тетень лемензэ.",
        "file-exists-duplicate": "Те кавонзавкс файла вана {{PLURAL:$1|те файланть|неть файлатнень}} эйстэ:",
        "uploadwarning": "Совавтомадо кардамонь пачтямо",
        "savefile": "Ванстомс файланть",
        "destfilename": "Теевиця файланть лемезэ",
        "upload-maxfilesize": "Файлань покшолмазо иляссо юта: $1",
        "upload-description": "Файланть йовтамозо",
-       "upload-options": "Ð\99овкÑ\81Ñ\82амонь параметрат",
+       "upload-options": "Тонгомань параметрат",
        "watchthisupload": "Ваномс те лопанть мельга",
        "upload-proto-error": "Аволь истямо протокол",
        "upload-file-error": "Потмонь ильведькс",
        "sharedupload": "Те файлась саезь \"$1\" файлань пусмосто, сон нолдави тевс лия проектсэяк.",
        "sharedupload-desc-here": "Те файлась сась истямо $1 таркасто, паряк сон нолдави тевс лия проектсэ.\nКувалманзо сёрмадовксось [$2 файладонть ёвтнема лопазо] невтезь ало.",
        "filepage-nofile": "Истямо лем марто файла арась.",
-       "uploadnewversion-linktext": "Ð\99овкÑ\81Ñ\82ак од версия те файластонть",
+       "uploadnewversion-linktext": "ТонгÑ\82 од версия те файластонть",
        "shared-repo-from": "вана теньстэ $1",
        "shared-repo": "вейсэнь ванстома тарка",
        "upload-disallowed-here": "Те файланть лангс од а сёрмадови.",
        "statistics-header-hooks": "Лия статистика",
        "statistics-articles": "Потмо марто лопат",
        "statistics-pages": "Лопат",
-       "statistics-files": "Ð\99овкÑ\81Ñ\82ань файлат",
+       "statistics-files": "Тонгозь файлат",
        "statistics-users-active": "Чистэ лисийть-совийть",
        "doubleredirects": "Кавксть ютавтозь",
        "double-redirect-fixer": "Печтевтемс витнема-петнема пель",
        "deletereasonotherlist": "Лия тувтал",
        "deletereason-dropdown": "*Нардамонь сех вастневиця тувталтнэ\n** Теицянть вешемазо\n** Теицянь видечинть коламозо\n** Вандализма",
        "delete-edit-reasonlist": "Витнемс-петнемс нардамонь тувталтнэнь",
-       "rollback": "Ð\9aевеÑ\80демÑ\81 Ð²Ð¸Ñ\82немаÑ\82ненÑ\8c-пеÑ\82немаÑ\82ненÑ\8c Ð¼ÐµÐºÐµÐ²",
+       "rollback": "Ð\92елÑ\8fвÑ\82омÑ\81 Ð¼ÐµÐºÐµÐ² Ð²Ð¸Ñ\82немаÑ\82ненÑ\8c-пеÑ\82немаÑ\82ненÑ\8c",
        "rollbacklink": "кевердемс",
-       "rollbackfailed": "Ð\9cекев ÐºÐµÐ²ÐµÑ\80демась эзь лисе",
+       "rollbackfailed": "Ð\9cекев Ð²ÐµÐ»Ñ\8fвÑ\82омась эзь лисе",
        "rollback-missingrevision": "Ревизиядатась а тонгови.",
        "protectlogpage": "Ванстомань совамо-кемекстамо",
        "protectedarticle": "ванстозь \"[[$1]]\"",
        "importcantopen": "Совавтозь файлась эзь панжово",
        "importbadinterwiki": "Амаштовикс интервики сюлмавома пе",
        "importsuccess": "Совавтомась прядовсь!",
-       "importnofile": "Кодамояк совавтома файла эзь йовкставо.",
+       "importnofile": "Кодамояк совавтома файла эзь тонгово.",
        "import-noarticle": "Совавтомс лопат арасть!",
        "import-upload": "Ёвкстамс XML датанть",
        "importlogpage": "Импортонть журналось",
        "tooltip-feed-atom": "Атом лезкс те лопантень",
        "tooltip-t-contributions": "Невтть мезе {{GENDER:$1|те теицясь}} полавтсь",
        "tooltip-t-emailuser": "Кучомс е-сёрма {{GENDER:$1|те теицянтень}}",
-       "tooltip-t-upload": "Ð\99овкÑ\81Ñ\82амс файлат",
+       "tooltip-t-upload": "Тонгомс файлат",
        "tooltip-t-specialpages": "Башка тевень лопатне мельга-мельцек",
        "tooltip-t-print": "Лопанть конёв лангс нолдавома версиязо",
        "tooltip-t-permalink": "Свал шкань сюлмавома пе лопань те верзиянтень",
        "tooltip-diff": "Невтемс мейсэ лиякстомтыть текстэнть.",
        "tooltip-compareselectedversions": "Вант явовкст кавто саезь версиятнень те лопанть.",
        "tooltip-watch": "Топавтомс те лопанть тынк ваномалопаньте",
-       "tooltip-upload": "Ушодомс йовкстамонть",
+       "tooltip-upload": "Ушодомс тонгоманть",
        "tooltip-rollback": "\"Мекев кевердема\" повнэнть весть лепштямось велявтсынзе те лопасонть меельцекс теезь витнематнень-петнематнень",
        "tooltip-undo": "\"Велявтомс мекев\" велявтсы витнемань-петнемань тевенть ды панжсы васнянь невтемань формасо.\nСонзэ вельде маштови поладомс полавтомадо тувтал.",
        "tooltip-preferences-save": "Ванстомс эсень аравтоматнень",
        "intentionallyblankpage": "Те лопась арьсезь-содазь чавосто кадозь",
        "tag-filter": "[[Special:Tags|Tag]] сувтемесь:",
        "tag-filter-submit": "Сувтемень пачк нолдамс",
+       "tag-mw-rollback": "Мекев велявтома",
        "tags-active-yes": "Истя",
        "tags-active-no": "Аволь",
        "tags-source-extension": "Программакерькссэ вешема",
index 0c43ccc..796d436 100644 (file)
        "anoncontribs": "Same as {{msg-mw|mycontris}} but used for non-logged-in users.\n\nSee also:\n* {{msg-mw|Accesskey-pt-anoncontribs}}\n* {{msg-mw|Tooltip-pt-anoncontribs}}\n{{Identical|Contribution}}",
        "contribsub2": "Contributions for \"user\" (links). Parameters:\n* $1 is an IP address or a username, with a link which points to the user page (if registered user).\n* $2 is list of tool links. The list contains a link which has text {{msg-mw|Sp-contributions-talk}}.\n* $3 is a plain text username used for GENDER.\n{{Identical|For $1}}",
        "contributions-userdoesnotexist": "This message is used in [[Special:Contributions]]. It is used to tell the user that the name he searched for doesn't exist.\n\nParameters:\n* $1 - a username\n{{Identical|Userdoesnotexist}}",
+       "negative-namespace-not-supported": "This message is used in [[Special:Contributions]] to tell users that use namespaces with negative value. It not supported as associated namespace(s) doesn't exist.",
        "nocontribs": "Used in [[Special:Contributions]] and [[Special:DeletedContributions]].\n\nSee examples: [[Special:Contributions/x]] and [[Special:DeletedContributions/x]].\n\nParameters:\n* $1 - (Unused) the user name",
        "uctop": "This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (current)\n{{Identical|Current}}",
        "month": "Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg-mw|year}}.",
index dc1a22a..34d6d38 100644 (file)
        "pageinfo-display-title": "عنوان",
        "pageinfo-default-sort": "کلید برائے ابتدائی ترتیب",
        "pageinfo-length": "صفحہ کا حجم (بائٹ میں)",
+       "pageinfo-namespace": "نام فضا",
        "pageinfo-article-id": "صفحہ کی شناخت",
        "pageinfo-language": "زبان",
        "pageinfo-language-change": "تبدیلی",
diff --git a/languages/i18n/xsy.json b/languages/i18n/xsy.json
new file mode 100644 (file)
index 0000000..304e56b
--- /dev/null
@@ -0,0 +1,673 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Lalotahes"
+               ]
+       },
+       "sunday": "kaSangayan",
+       "monday": "ray ’aehae’ Sinangayan",
+       "tuesday": "ray roSa’ Sinangyan",
+       "wednesday": "to:o’ Sinangayan",
+       "thursday": "Sopat Sinangayan",
+       "friday": "haseb Sinangayan",
+       "saturday": "SayboSi: ka Sinangayan",
+       "sun": "kaSangayan",
+       "tue": "roSa’ Sinangayan",
+       "wed": "to:o’ Sinangayan",
+       "thu": "Sopat Sinangayan",
+       "fri": "haseb Sinangayan",
+       "sat": "SayboSi: Sinangayan",
+       "january": "’aehae’ ’ilaS",
+       "february": "roSa’ ilaS",
+       "march": "to:o’ ’ilaS",
+       "april": "Sopt ’ilaS",
+       "may_long": "haseb ’ilaS",
+       "june": "SayboSi’ ’ilaS",
+       "july": "SayboSi: o ’aehae’ ’ilaS",
+       "august": "maykaSpat ’ilaS",
+       "september": "hae’hae’ ’ilaS",
+       "october": "langpez ’ilaS",
+       "november": "langpez o ’aehae’ ’ilaS",
+       "december": "langpez o roSa’ ’ilaS",
+       "january-gen": "’aehae’ ’ilaS",
+       "february-gen": "roSa’ ilaS",
+       "march-gen": "to:o’ ’ilaS",
+       "april-gen": "Sopt ’ilaS",
+       "may-gen": "haseb ’ilaS",
+       "june-gen": "SayboSi’ ’ilaS",
+       "july-gen": "SayboSi: o ’aehae’ ’ilaS",
+       "august-gen": "maykaSpat ’ilaS",
+       "september-gen": "hae’hae’ ’ilaS",
+       "october-gen": "langpez ’ilaS",
+       "november-gen": "langpez o ’aehae’ ’ilaS",
+       "december-gen": "langpez o roSa’ ’ilaS",
+       "jan": "’aehae’ ’ilaS",
+       "feb": "roSa’ ilaS",
+       "mar": "to:o’ ’ilaS",
+       "apr": "Sopat ’ilaS",
+       "may": "haseb ’ilaS",
+       "jun": "SayboSi: ’ilaS",
+       "jul": "SayboSi:o ’aehae’ ’ilaS",
+       "aug": "maykaSpat ’ilaS",
+       "sep": "hae’hae’ ’ilaS",
+       "oct": "langpez ’ilaS",
+       "nov": "langpez o ’aehae’ ’ilaS",
+       "dec": "langpez o roSa’ ’ilaS",
+       "january-date": "’aehae’ ’ilaS $1",
+       "february-date": "roSa’ ilaS $1",
+       "march-date": "to:o’ ’ilaS $1",
+       "april-date": "Sopt ’ilaS $1",
+       "may-date": "haseb ’ilaS $1",
+       "june-date": "SayboSi’ ’ilaS $1",
+       "july-date": "SayboSi: o ’aehae’ ’ilaS $1",
+       "august-date": "maykaSpat ’ilaS $1",
+       "september-date": "hae’hae’ ’ilaS $1",
+       "october-date": "langpez ’ilaS $1",
+       "november-date": "langpez o ’aehae’ ’ilaS $1",
+       "december-date": "langpez o roSa’ ’ilaS $1",
+       "pagecategories": "{{PLURAL:$1| ’a’apolen |$1 ka ’a’apolen }}",
+       "category_header": " ’a’apolen ray \"$1\" ’izo’ ka ye:myen",
+       "subcategories": "’ima ’ol’olae’an ka’a’apolan",
+       "category-media-header": " ka’a’apolen \"$1\" ’izo’ ka me:ti:",
+       "category-empty": "<em> hini pin ’a’apol haysani ’i’ini’ ray hani yemien o ka meiti .</em>",
+       "hidden-categories": "{{PLURAL:$1| Sina:il ka pin’a’apol }}",
+       "category-subcat-count": "{{PLURAL:$2|hini ka’a’apolan hani nanaw saeboeh ray wahoer 1 ka ’ima ’ol’olae’an ka’a’apolan .|hini ka’a’apolan hani saeboeh wahoer $1 ka ima ’ol’olae’an ka’a’apolan , saeboeh $2. }}",
+       "category-article-count": "{{PLURAL:$2|hini ka’a’apolan hani ray wahoer saeboeh ’aehae’ ka yemyen.|hini ka’a’apolan hani ray wahoer saeboeh ’ $1 aehae’ ka yemyen, saeboeh $2 .}}",
+       "category-file-count": "{{PLURAL:$2|hini ka’a’apolan hani saeboeh nanaw ’ano ’aehae’ naehan tang’an.|hini ka’a’apolan hani saeboeh waehoer $1 ka tang’an, saeboeh $2.}}",
+       "listingcontinuesabbrev": "lososo:oy",
+       "noindex-category": "’inokay ka:ati kaSa’amoehan kina:at ka yemien",
+       "broken-file-category": " tang’an  lomotor ’aewhay ilaka yemien",
+       "newwindow": "(’anoka ’ima SaSo’ hinohaes haewaeh )",
+       "cancel": "kayni’",
+       "moredotdotdot": "akoy...",
+       "mypage": "ye:myen",
+       "mytalk": " kapaehrahrangan",
+       "navigation": " tawlan",
+       "and": "&#32; ki &#32;",
+       "namespaces": " karo:o’an",
+       "variants": "pyenti:",
+       "navigation-heading": "tawlan kapawhi:ilan",
+       "returnto": " lobih ray $1.",
+       "tagline": "minay-{{SITENAME}}",
+       "help": " kapakSekla’an",
+       "search": "komi:im",
+       "searchbutton": " komi:im",
+       "go": " patawaw",
+       "searcharticle": "patawaw",
+       "history": "ray yemyen kin’i’iyaehan",
+       "history_short": "kakhayza’an kin’i’iyaeh",
+       "history_small": "kakhayza’an kin’i’iyaeh",
+       "printableversion": "kayzaeh mal’oehaez ka kina:at banben",
+       "permalink": "pinakrengreng kalotoran",
+       "view": " komita",
+       "view-foreign": "ray $1 komita’",
+       "edit": " bienji",
+       "create": "paskayzaeh",
+       "create-local": "baba:aw rinpa: hini ray ’asang kapakSekla’an",
+       "newpage": "’ima SaSo’ ye:myen",
+       "talkpagelinktext": " kapaehrahrangan",
+       "specialpage": " ’ima nonak yemyen",
+       "personaltools": " ’in nonak a nom matwaw",
+       "talk": "maehrahrang",
+       "views": " komita",
+       "toolbox": "nom matwaw",
+       "otherlanguages": "’aroma’ ka:i’",
+       "redirectedfrom": "( papanra:anen ila nahan ray $1)",
+       "redirectpagesub": " papanra:an nahan ka ye:myen",
+       "redirectto": " papanra:an nahan ray:",
+       "lastmodifiedat": "hini ye:myen ’ima maybi:il bienji 於 $1 $2.",
+       "jumpto": " rima’",
+       "jumptonavigation": " tawlan",
+       "jumptosearch": "komi:im",
+       "aboutsite": " ’inakhini’an {{SITENAME}}",
+       "aboutpage": "Project: ’inakhini’an",
+       "copyrightpage": "{{ns:project}}: banqyuen",
+       "currentevents": "hinapa: ray Sinbon",
+       "disclaimers": " pinakSekla’ kina:at",
+       "disclaimerpage": "Project: saeboeh SikoSa’ pinakSekla’ kina:at",
+       "edithelp": " bienji kapakSekla’an",
+       "mainpage": "So:ye’",
+       "mainpage-description": "So:ye’",
+       "portal": "kakS’aboe’an noka Se’cyun",
+       "portal-url": "Project: kakS’aboe’an noka Se’cyun",
+       "privacy": " kina:at ka kaspengan",
+       "privacypage": "Project: kina:at ka kaspengan",
+       "retrievedfrom": "’inmari’ ray \"$1\"",
+       "youhavenewmessages": "So’o hayza’ $1 ($2)",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|niSo’}}hayza’ ’inay{{PLURAL:$3|’aroma’ kamamatawaw |$3 ka kamamatawaw }} $1 ($2).",
+       "newmessagesdifflinkplural": "haysani’ {{PLURAL:$1| sinpih }}",
+       "editsection": " bienji",
+       "editold": " bienji",
+       "viewsourceold": " komita’ ka yuensema:",
+       "editlink": " bienji",
+       "viewsourcelink": " komita’ ka yuensema:",
+       "editsectionhint": "bienji zhang jie :$1",
+       "toc": "raro:o’ noka kina:at",
+       "showtoc": "pinakita’",
+       "hidetoc": " Sa:il",
+       "collapsible-expand": "pawSika:",
+       "site-atom-feed": "kawa:i’an ray $1 ka Atom",
+       "page-atom-feed": "$1 ray Atom kawa:i’an",
+       "red-link-title": " ’oka’ ka yemyen",
+       "nstab-main": "ye:myen",
+       "nstab-user": " nom matawaw ye:myen",
+       "nstab-special": " ’ima nonak yemyen",
+       "nstab-project": " zhwan’an ye:myen",
+       "nstab-image": " tang’an",
+       "nstab-template": " kakSaro:olan",
+       "nstab-category": " ’a’apolen",
+       "mainpage-nstab": "So:ye’",
+       "nospecialpagetext": "<strong> niSo’ pina’alo’ ’ima nonak yemien ’inokay paylal’oz .</strong> So: ’iyakina mari’ ’ima kayzaeh ka ’ima nonak yemyen kapakSekla’ kina:at kazaeh maray hini [[Special:SpecialPages|{{int:specialpages}}]].",
+       "missingarticle-diff": "( kin nonak: $1 , $2 )",
+       "badtitle": " ’inokay paylal’oz ka raro:o’",
+       "badtitletext": " tinoroe’ ray ye:myen raro:o’ ’inokay paylal’oz 、’inoka’ ka kano’, a ’oka’i paskayzaeh lomotor nom kaSkoraeh ka:i’ a kaSkoraeh ray Wiki ka raro:o’ .\n raro:o’ raro:o’ ’izo’ ra:amen hani saeboeh ’oka’ nanaw papatawaw ray raro:o’ ka kaka:at ka ka:i’.",
+       "viewsource": " komita’ ka yuensema:",
+       "viewsource-title": " komita  $1 的 yuensema:",
+       "viewsourcetext": "So’o kayzaeh komita o ’alro:ol rini ray yemien ka yuensema:",
+       "yourname": " kamamatawaw raro:o’:",
+       "userlogin-yourname-ph": " koma:at ’inSo’a nom matawaw raro:o’",
+       "yourpassword": " mima:",
+       "userlogin-yourpassword": "mima",
+       "userlogin-yourpassword-ph": " ka:at ka mima: niSo’",
+       "createacct-yourpassword-ph": "koma:at mima:",
+       "createacct-yourpasswordagain": "Sa:hael nahan ka mima:",
+       "createacct-yourpasswordagain-ph": "’onhael nahan koma:at mima:",
+       "userlogin-remembermypassword": "hoehoero: ma’an kakaS’aboe’an",
+       "login": "kaS’aboe’",
+       "logout": "kas’oehaez",
+       "userlogin-noaccount": "’oka’ ka zhanghaw ay?",
+       "userlogin-joinproject": "ropa: {{SITENAME}}",
+       "createaccount": " paskayzaeh zhanghaw",
+       "userlogin-resetpassword-link": "mangowip ka mima?",
+       "userlogin-helplink2": "patilhaehael kaS’aboe’",
+       "createacct-emailoptional": " tyenze: yo:jyen ( pawhi:il ka:at )",
+       "createacct-email-ph": " ka:at ka tyenze: yo:jyen niSo’",
+       "createacct-submit": "paskayzaeh niSo’ ka zhanghaw",
+       "createacct-another-submit": " paskayzaeh zhanghaw",
+       "createacct-benefit-heading": "{{SITENAME}} hini ’inak So’oan hingha’ kamamobay ka pinatawaw ma’iyaeh nasiya pinaskayzaeh.",
+       "createacct-benefit-body1": "{{PLURAL:$1| ’okik miniSa’la’ pinbienji }}",
+       "createacct-benefit-body3": " ray haysani’ ka{{PLURAL:$1| kama mobay }}",
+       "mailmypassword": " ’in’alay naehan paskayzaeh ka mima:",
+       "loginlanguagelabel": " ka:i’ :$1",
+       "pt-login": "kaS’aboe’",
+       "pt-login-button": "kaS’aboe’",
+       "pt-createaccount": " paskayzaeh zhanghaw",
+       "pt-userlogout": "kas’oehaez",
+       "botpasswords-label-create": "paskayzaeh",
+       "botpasswords-label-cancel": "kayni’",
+       "resetpass-submit-cancel": "kayni’",
+       "passwordreset": " ’in’alay naehan paskayzaeh ka mima:",
+       "passwordreset-username": " kamamatawaw raro:o’:",
+       "bold_sample": " pinakrarahoe’ ka kina:at",
+       "bold_tip": " pinakrarahoe’ ka kina:at",
+       "italic_sample": " kina:at pinay’iring",
+       "italic_tip": " kina:at pinay’iring",
+       "link_sample": " kalotoran raro:o’",
+       "link_tip": "izo’ kalotoran",
+       "extlink_sample": "http://www.example.com kalotoran raro:o’",
+       "extlink_tip": " ’oehaez kalotoran ( hoehoero: ’anoka http:// ’on’alay)",
+       "headline_sample": "minayhal ka raro:o’ kina:at",
+       "headline_tip": "minaypoSal ka raro:o’ kina:at",
+       "nowiki_sample": "paksilaeh ’inoki ke:Se’hwa’ ka kina:at",
+       "nowiki_tip": "’itayso: ka wiki pinke:Se’hwa’",
+       "image_tip": "tang’an rinpa:",
+       "media_tip": " tang’an kalotoran",
+       "sig_tip": "’inSo’a kina:at raro:o’ ki hahila: jikang",
+       "hr_tip": "hinoba:ang ’imatatihingha’ (’okik rengreng)",
+       "summary": "zhayaw:",
+       "minoredit": "hini ’aehae’ ka pinaybiil kaponrowa’en",
+       "watchthis": "kitkita’ ka hini ye:myen",
+       "savearticle": "kaSili’an ye:myen",
+       "savearticle-start": "kaSili’an ye:myen...",
+       "showpreview": " pinakita’ ka pinaSawaSak",
+       "showdiff": " pinakita’ ka sinapih",
+       "anoneditwarning": "<strong>pati’azem:</strong> So’o ’i’ini’ kaS’abo’, So: So’o matawaw ’ana kano’ pinbienji niSo’ katnaIPan kapakita’ saeboeh. So: So’o <strong>[$1 kaS’abo’ ]</strong> a <strong>[$2 paskayzaeh ka zhanghaw ]</strong>, niSo’ pinbienji ’am ’anoka ’inSo’a nom matawaw raro:o’ kaSakira:a’an, hayza ka ’aroma’ ’ima kayzaeh.",
+       "blockedtext": "<strong> niSo’ kapatawaw raro:o’ a IP Sina:ang soksoken ila.<strong>So’o soksoken noka $1,\nkomSa noka <em>$2</em>.* kasoksokan ’in’alay ray:$8 * sizaeh ka sinoksok ’in’alay ray :$6 * ’ima hingha’ kasoksoken :$7 So’o kayzaeh pakra:am ka $1 a ka ’aroma’ [[{{MediaWiki:Grouppage-sysop}}| kama malahang ]] paehrahrang noka kasoksokan howaw. So: So’o ray [[Special:Preferences| kin hinowa’an ]] ’izo’ hayza’ ila ka ’ima kayzaeh ka Sina:ang nom maraytyennaw kina:at ,\no ’i’ini’i: hayza’ ka nom soksok, ’isa: So’o kayzaeh maray \"Email pakra:am ka hini kamamatawaw \" ka nom pinakra:am ka ’ima hingha’an kama malahang. niSo’ ’isahini ka\nIP ray $3,hini nom somoksok ka ID ka #$5. So: So’o ray ’am somingozaw ka ka:at ka hani babaw ka pinakSekla’.",
+       "loginreqlink": "kaS’aboe’",
+       "newarticletext": "So’o mam lomotor ray ’aehae’ ’inoka’ ka yemien.\n’am paskayzaeh hiza yemien, paray hini waehoer ka pienji: fangkoway ’izo’ ka:at kapapnabih (’am Sekla’ kita’ [$1 kapatawawan kapakSekla’an yemien ]).\nSo: So’o ’okik ’iya’azem mowa:i’ ray hini yemien, ’isa: pawhi:il kakita’an ka<strong> nom lobih </strong> kakonhootan.",
+       "anontalkpagetext": "<em>hini yemien kapaehraerang nom pakita’ ka ’ima ’i’ini’ paSkira:a’ ka raro:o’ ma’iyaeh kapatwaw.\n</em> ’isa: yami ’am ’anoka IP Sina:ang ma Swkla’ ka raro:o’, ’oka’ ila ’ima hingha’ ka IP Sina:eng ra:amen haeba:an ka ’ima ma’onhael mata:waw rini. So: So’o ’inoka’ ka raro:o’ o So: komSa’ hini pinaehraehrang ’oka’ howaw ki So’on, ’isa: [[Special:CreateAccount|\npakhayza’ ka ’ima SaSo’ zhanghaw ]] a [[Special:UserLogin| kaS’abo’ ]]\n ’aewhay hahamez kil ’aroma’ ka ’ima ’oka’ ka raro:o’.",
+       "noarticletext": "hini ye:myen ’isahini ’ oka’ kapinanabih, So’okayzaeh ray ’aroma’ ye:myen ’izo’[[Special:Search/{{PAGENAME}}| komi:im hini ye:myen ka raro:o’ ]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} komi:im ka ’ima hingha’an pinatawawan] a [{{fullurl:{{FULLPAGENAME}}|action=edit}} paskayzaeh ka hini ye:myen]</span>",
+       "userpage-userdoesnotexist-view": "kamamatawaw zhanghaw \"$1\" ’i’ini’ ka:at ka raro:o’",
+       "clearyourcache": "<strong>bazae’:</strong>kanSo’ ’inaSkan sizaeh So’o boloe’ani ray kakita’an ray katal’amoeh ’isa: Sahoero: ila ka ’ima SaSo’ pyenti: . * <strong>Firefox / Safari:</strong> konhoeoet <em>Shift</em> ’isa: pawhi:il <em> ka tal’izaehan </em>,a konhoeoet <em>Ctrl-F5</em> a <em>Ctrl-R</em> (Mac ’isa: ka <em>⌘-R</em>) * <strong>Google Chrome:</strong>konhoeoet ka<em>Ctrl-Shift-R</em> (Mac ’isa: ka <em>⌘-Shift-R</em>) * <strong>Internet Explorer:</strong> konhoeoet <em>Ctrl</em> ’isa: pawhi:il ka <em> tinal’izaehan </em>,a konhoeoet ka <em>Ctrl-F5</em> * <strong>Opera:</strong> Sa’ila ray <em> kapawhi:ilan → paskayzaeh </em> (ray Mac ’isa: ka <em>Opera → kin hinowa’an </em>) ’isa: Sa’ila nahan ray <em> Sina:il & kakkayzaehan → boloe’ ka kinita’ kina:at → tinal’amoehan ka hinoba:ang ki tang’an </em>.",
+       "previewnote": "</strong>So’o ’isahini ray kaSawaSwaSakan, niSo’ sinapih ’i’ini’i: Sili’i:! </strong>",
+       "editing": "mam bienji $1",
+       "creating": "mam paskayzaeh $1",
+       "editingsection": "mam pienji: $1 ( zhang jie: )",
+       "templatesused": "hini ye:myen matawaw ila hini wahoer ka {{PLURAL:$1| kakSaro:olan }}:",
+       "templatesusedpreview": "hini kaSawaSakan ’anoka hani wahoer ka {{PLURAL:$1| kakSaro:olan }}:",
+       "template-protected": "(kinalahaeng)",
+       "template-semiprotected": "(’inokay kalahaengi saeboeh)",
+       "hiddencategories": "hini ye:myen ’anoka {{PLURAL:$1|1 Sina:il ka’a’apolen |$1 Sina:il ka’a’apolen }}saeboeh ma’iyaeh:",
+       "permissionserrorstext-withaction": "komSa’ hini waehoer {{PLURAL:$1| nak’ino’ ’isa: }}, niSo’ ’oka’ ka qyuenSyen nom ray $2 matawaw :",
+       "recreate-moveddeleted-warn": "<strong> pati’azem :So’o mam boloe’ Sa’la’ pinaskayzaeh ka ymien .</strong> So’o ’az’azem nahan ’am pienji: ay ka hini ’aehae’ biyae’. rini hayza’ kaboloe’an ki kapa’inkoraehan ka kina:at kakita’an:",
+       "moveddeleted-notice": "hini ye:myen boloe’en ila.\nray waehoer binoway ray hini ye:myen ka binoloe’ ki tinilkoraeh ka pinatawaw kayzaeh nom Saro:ol.",
+       "undo-failure": "hini ray pienji: ka pinonrowa’ ’izo’ hayza’ \n’inokik paylal’oz, ’isa: hini pinpienji: ’aewhay ka paklobihin.",
+       "viewpagelogs": " kita’ hini ray ye:myen ka pinatawaw",
+       "currentrev": " ’ima SaSo’ pinonrowa’",
+       "currentrev-asof": "ray $1 ka ’ima SaSo’ pinonrowa’",
+       "revisionasof": "ray $1 ka pinonrowa’",
+       "revision-info": "ray $1 maray {{GENDER:$6|$2}} pinatawaw ka pinonrowa’ $7",
+       "previousrevision": "←Sa’la’ pinonrowa’",
+       "nextrevision": "wahoer ila pinonrowa’ →",
+       "currentrevisionlink": " ’ima SaSo’ pinonrowa’",
+       "cur": " ’isahini",
+       "last": "cyenpi:",
+       "histlegend": "tatihola’ pawhi:il ka kin nonak banben: pawhi:il ka pintatihola’ o pinonrowa’ banben kapawhi:ilan fangkoway o pawhi:il kamaSal k kakonhootan rima’ tatihola’ .<br /> kaka:at kapakSekla’an:<strong>({{int:cur}})</strong> = ki ’ima SaSo’ ka pinonrowa’ banben tatihola’ ,<strong>({{int:last}})</strong> = ki mininSa’la’ ka pinonrowa’ banben tatihola’ ,<strong>{{int:minoreditletter}}</strong> = pinapaybi:il ka pinonrowa’.",
+       "history-feed-description": "hini ray Wiki babaw ’isahini ka yemien pinonrowa’ ka kintatini’an",
+       "history-feed-item-nocomment": "ray $1 o $2 pinawhi:il",
+       "rev-delundel": " somapih kakita’an",
+       "rev-showdeleted": "pinakita’",
+       "revdel-restore": " somapih kakita’an",
+       "pagehist": "ray yemyen kin’i’iyaehan",
+       "history-title": "\"$1\" ’inkakhayza’an ka pinonrowa’",
+       "difference-title": "\"$1\" ponrowa’ ray ’izo’ ka kin nonakan",
+       "lineno": "ra:an $1:",
+       "compareselectedversions": "tatihola’ pawhi:il ka pinonrowa’",
+       "editundo": " paklobih",
+       "diff-multi-sameuser": "(’i’ini’ pinakita’ ’ima hingha’ ka kamamatawaw ray wazwaz pinatawaw $1 ka pinonrowa’ )",
+       "diff-multi-otherusers": "(’i’ini’ ka pinakita’ pak $2 位 kamamatawaw ray wazwaz pinatawaw $1’onhael ponrowa’)",
+       "searchresults": " komi:im ka pinatawawan",
+       "searchresults-title": "ray $1 kini:im ka pinatawawan",
+       "prevn": "ray kati’ae’la’an $1",
+       "nextn": "ray hikor {{PLURAL:$1|$1}}",
+       "prevn-title": "ray mininSa’la’ $1 ka pinatawawan",
+       "nextn-title": "ray hikor $1 ka pinatawawan",
+       "shown-title": "ray sa’sa’ih ye:myen pinakita’ $1 pinatawawan",
+       "viewprevnext": " komita’ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "<strong>hini ka Wiki hayza’ ila ka raro:o’ ray \"[[:$1]]\" ka yemien .</strong> {{PLURAL:$2|0=| o kita’ ’oyeh ka ’aroma’ kini:im ka pinatawawan .}}",
+       "searchmenu-new": "<strong> ray hini Wiki paskayzaeh ka ye:myen \"[[:$1]]\"!</strong>{{PLURAL:$2|0=|a pakita’ ka ’inSo’a kina:at kapaehrahrang tomihoero: ka kini:im, | a pakita’ ka ’aroma’ kini:im pinatawawan.}}",
+       "searchprofile-articles": " kapapnabih ye:myen",
+       "searchprofile-images": "tome:thi:",
+       "searchprofile-everything": "saeboeh",
+       "searchprofile-advanced": "kaS’izo’ nahan",
+       "searchprofile-articles-tooltip": "ray $1 ’ izo’ komi:im",
+       "searchprofile-everything-tooltip": " komi:im saeboeh kapapnabih ( hani saeboeh kapaehrahrangan ye:myen)",
+       "searchprofile-advanced-tooltip": " komi:im nonak karo:o’an",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ka kina:at |$2 ka kina:at}})",
+       "search-result-category-size": ",",
+       "search-redirect": "( papanra:an nahan ray $1)",
+       "search-section": "( zhang jie $1)",
+       "search-category": "( ’a’apolen $1)",
+       "search-file-match": "( maylal’oz ray tang’an kapapnabih )",
+       "search-suggest": "niSo’ SikoSa’ hini ay:$1",
+       "search-interwiki-more": "(akoy)",
+       "searchall": "saeboeh",
+       "search-showingresults": "{{PLURAL:$4| ray <strong>$1</strong> pinatawawan, saeboeh <strong>$3</strong> |ray <strong>$1 - $2</strong> pinatawawan, saeboeh <strong>$3</strong> }}",
+       "search-nonefound": " ’ okay paylal’oz kini:im kapaehrahrang ka pinatawawan.",
+       "powersearch-toggleall": "saeboeh",
+       "preferences": "kin hinowa’an",
+       "mypreferences": "kin hinowa’an",
+       "prefs-user-pages": " nom matawaw ye:myen",
+       "prefs-rc": "haysani’ sinapih",
+       "prefs-watchlist": " jyenSe’ qintan",
+       "prefs-editwatchlist-raw": "pienji: ’inin’alayan kakita’an qintan",
+       "searchresultshead": "komi:im",
+       "prefs-searchoptions": "komi:im",
+       "prefs-namespaces": " karo:o’an",
+       "prefs-files": " tang’an",
+       "prefs-diffs": " kin nonak",
+       "group-user": " kamamatawaw",
+       "group-all": "(saeboeh)",
+       "right-upload": " maray tiyanaw mobay ka kina:at tang’an",
+       "right-writeapi": "ka:at ka API",
+       "grant-createaccount": " paskayzaeh zhanghaw",
+       "newuserlogpage": " paskayzaeh noka kamamatawaw ka pinatawawan",
+       "rightslog": "noka kamamatawaw ka’letan kina:at",
+       "action-edit": " bienji ka hini ye:myen",
+       "action-createaccount": "paskayzaeh ka hini kamamatawaw zhanghaw",
+       "action-move": " tilkoraeh ka hini kina:at",
+       "enhancedrc-history": "kakhayza’an kin’i’iyaeh",
+       "recentchanges": "haysani’ sinapih",
+       "recentchanges-legend": " haysani’ somapih kapawhi:ilan",
+       "recentchanges-summary": "taniSowaw ray Wiki ’izo’ hini ye:myen haysani’ ka sinapih .",
+       "recentchanges-noresult": "tani tinoroe’ hahila: ’izo’ ’inoka’ ka minaylal’oz pinaehrahrang ka pyenti.",
+       "recentchanges-feed-description": "taniSowaw ray Wiki ’izo’ hini zhayaw ray haysani ka pinaSohowih.",
+       "recentchanges-label-newpage": "hiza bienji paskayzaeh ila ka ’ima SaSo’ ye:myen",
+       "recentchanges-label-minor": "hini ’aehae’ ka pinaybiil kaponrowa’en",
+       "recentchanges-label-bot": "hiza bienji ’anoka kikay ma’iyaeh matawaw",
+       "recentchanges-label-unpatrolled": "hiza pinbienji ’i’ini’ ki:imi",
+       "recentchanges-label-plusminus": "hiza ye:myen sinapih ka kinsopaloy ( Sinepe: kaSili’an ka kina:at )",
+       "recentchanges-legend-heading": "<strong>pinakita’ ka hinoba:ang:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pakita’ [[Special:NewPages| ’ima SaSo’ ye:myen]])",
+       "recentchanges-submit": "pinakita’",
+       "rcfilters-tag-remove": "tilkoraeh '$1'",
+       "rcfilters-activefilters-hide": " Sa:il",
+       "rcfilters-activefilters-show": "pinakita’",
+       "rcfilters-days-show-days": "$1 hahila:",
+       "rcfilters-savedqueries-cancel-label": "kayni’",
+       "rcfilters-filtergroup-lastRevision": " ’ima SaSo’ pinonrowa’",
+       "rcnotefrom": "hani wahoer{{PLURAL:$5| ’ima}} ’aring <strong>$3 $4</strong> pinara:an ka pyenti: (kapakita’ <strong>$1</strong> ).",
+       "rclistfrom": "pinakita’ ray $3 $2 ka ’ima SaSo’ sinapih",
+       "rcshowhideminor": "$1 pinaybiil bienji",
+       "rcshowhideminor-show": " pinakita’",
+       "rcshowhideminor-hide": " Sa:il",
+       "rcshowhidebots": "$1 kikay ma’iyaeh",
+       "rcshowhidebots-show": " pinakita’",
+       "rcshowhidebots-hide": " Sa:il",
+       "rcshowhideliu": "$1 pinaSkira:a’ kamamatawaw",
+       "rcshowhideliu-show": " pinakita’",
+       "rcshowhideliu-hide": " Sa:il",
+       "rcshowhideanons": "$1 Sina:il ka raro:o’ kamamatawaw",
+       "rcshowhideanons-show": " pinakita’",
+       "rcshowhideanons-hide": " Sa:il",
+       "rcshowhidepatr": "komi:im ka pinpiyenji:",
+       "rcshowhidepatr-show": " pinakita’",
+       "rcshowhidepatr-hide": " Sa:il",
+       "rcshowhidemine": "$1 ’inma’ana bienji",
+       "rcshowhidemine-show": " pinakita’",
+       "rcshowhidemine-hide": " Sa:il",
+       "rcshowhidecategorization-show": " pinakita’",
+       "rcshowhidecategorization-hide": " Sa:il",
+       "rclinks": "pinakita’ haysani’ ray $2 hahila: ’izo’ $1 monhael somapih",
+       "diff": " kin nonak",
+       "hist": "kakhayza’an kin’i’iyaehan",
+       "hide": " Sa:il",
+       "show": " pinakita’",
+       "rc-change-size-new": "sinapih ila ka $1 Sinepe: kaSili’an ka kina:at",
+       "rc-old-title": " ray ’inin’alay pinaskayzaeh ka raro:o’ {{PLURAL:$1| sinapih }}",
+       "recentchangeslinked": " ’ima hingha’an sinapih",
+       "recentchangeslinked-feed": " ’ima hingha’an sinapih",
+       "recentchangeslinked-toolbox": " ’ima hingha’an sinapih",
+       "recentchangeslinked-title": "ki \"$1\" ’ima hingha’an somapih",
+       "recentchangeslinked-page": "noka ye:myen ka raro:o’ :",
+       "recentchangeslinked-to": "sapih ila ka pinakita’ kalotoran ray tinoroe’ ka ye:myen sinapih",
+       "upload": " maray tiyanaw mobay ka kina:at tang’an",
+       "filedesc": "zhayaw",
+       "fileuploadsummary": "zhayaw:",
+       "filesource": " kawa:i’an:",
+       "upload-dialog-title": " maray tiyanaw mobay ka kina:at tang’an",
+       "upload-dialog-button-cancel": "kayni’",
+       "upload-form-label-infoform-description": " papapnabih",
+       "upload-form-label-infoform-categories": " ’a’apolen",
+       "upload-form-label-infoform-date": " hahila",
+       "license": " kinSiwa’ kina:at:",
+       "license-header": " kinSiwa’ kina:at",
+       "listfiles-userdoesnotexist": "kamamatawaw zhanghaw \"$1\" ’i’ini’ ka:at ka raro:o’",
+       "imgfile": " tang’an",
+       "listfiles_date": " hahila",
+       "listfiles_user": " kamamatawaw",
+       "listfiles_description": " papapnabih",
+       "file-anchor-link": " tang’an",
+       "filehist": " tang’an ’inkakhayza’an",
+       "filehist-help": " pawhi:il ka hahila: / jikang kayzaeh komita’ hiza jikang ka tang’an banben .",
+       "filehist-current": " ’isahini",
+       "filehist-datetime": " hahila: / jikang",
+       "filehist-thumb": " pinak’ol’olae’an",
+       "filehist-thumbtext": "ray $1 banben ka hinoba:ang pinak’ol’olae’an",
+       "filehist-user": " kamamatawaw",
+       "filehist-dimensions": "ce:cun",
+       "filehist-comment": "kina:at ka kakSekla’an",
+       "imagelinks": "nom ray tang’an",
+       "linkstoimage-redirect": "$1 ( tang’an papanra:an nahan ) $2",
+       "sharedupload-desc-here": "hin tang’an minay $1 o kayzaeh noka ’aroma’ zhwan’an patawawen .\nray wahoer pinakita’ ka hini tang’an ray [$2 tang’an pinapanabih ye:myen] ray ’izo’ ka papapnabih",
+       "filepage-nofile": "’inokik rini raro:o’ ka tang’an.",
+       "upload-disallowed-here": "So’o ’am ’oka’ nanaw manehmek ka hini tang’an .",
+       "randompage": " tanikikay ka ye:myen",
+       "randomincategory-submit": " patawaw",
+       "statistics-articles": " kapapnabih ye:myen",
+       "statistics-pages": "ye:myen",
+       "pageswithprop-submit": " patawaw",
+       "double-redirect-fixer": " papanra:an nahan ka kama painrowa’",
+       "brokenredirects-edit": " bienji",
+       "withoutinterwiki-submit": "pinakita’",
+       "nbytes": "$1 ka weyyuenzu:",
+       "ncategories": "$1 {{PLURAL:$1| ’a’apolen |$1 ka ’a’apolen }}",
+       "nmembers": "$1 ka kamamatawaw",
+       "prefixindex": "taniche:to: ki:im ka yemien",
+       "prefixindex-submit": "pinakita’",
+       "protectedpages-filters": " komi:im:",
+       "protectedpages-page": "ye:myen",
+       "usereditcount": "$1 {{PLURAL:$1| ’okik miniSa’la’ pinbienji }}",
+       "newpages": "’ima SaSo’ ye:myen",
+       "newpages-submit": "pinakita’",
+       "newpages-username": " kamamatawaw raro:o’:",
+       "move": " tilkoraeh",
+       "movethispage": " tilkoraeh ka hini kina:at",
+       "pager-newer-n": "{{PLURAL:$1| ’ima SaSo’ ora $1 }}",
+       "pager-older-n": " ’ima tatini’ $1",
+       "apisandbox-add-multi": "baba:aw rinpa:",
+       "booksources": " kina:at kawa:i’an ka kin Sekla’an",
+       "booksources-search-legend": "komi:im ka kina:at kawa:i’an ka kin Sekla’an",
+       "booksources-search": "komi:im",
+       "speciallogtitlelabel": "kalokngoran ( raro:o’ a ’inoka {{ns:user}}: kamamatawaw a koSa’en kamamatawaw ):",
+       "log": "pinatawaw",
+       "logeventslist-submit": "pinakita’",
+       "alllogstext": "patsaeboeh pakita’ saeboeh {{SITENAME}} ’izo’ saeboeh Sinraehoe’ ka kina:at . So’o kayzaeh pawhi:il ray ka’aSo:olan ka kina:at ka Sinraehoe’, Sowatoroe’ ka kamamatawaw raro:o’ (’ae’aeppol ’ima sopaloy ’ima ’ol’olae’an ka kina:at) ki kamapapatalay ka yemien (’ae’aeppol ’ima sopaloy ’ima ’ol’olae’an ka kina:at).",
+       "logempty": "’oka’ ka pinaylal’oz kapaehrahrang kina:at.",
+       "checkbox-all": "saeboeh",
+       "allpages": " saeboeh ye:myen",
+       "allarticles": " saeboeh ye:myen",
+       "allpagessubmit": " patawaw",
+       "categories": " ’a’apolen",
+       "categories-submit": "pinakita’",
+       "sp-deletedcontributions-contribs": " mobay ka pinatawaw",
+       "linksearch-ns": " karo:o’an :",
+       "linksearch-ok": "komi:im",
+       "listusers-submit": "pinakita’",
+       "emailuser": "Email kapakra:am ka hini kamamatawaw",
+       "emailusername": " kamamatawaw raro:o’:",
+       "watchlist": " jyenSe’ qintan",
+       "mywatchlist": " jyenSe’ qintan",
+       "watchlistfor2": "noka $1 ka jienshi qintan $2",
+       "watch": "komitkita’",
+       "watchthispage": "kitkita’ ka hini ye:myen",
+       "watchlist-details": "niSo’ kakita’an ray qintan babaw saeboeh hayza’ $1 yemien ( nom maehraehrang yemien saeboeh).",
+       "wlheader-showupdated": "niSo’ ray ’ima maybi:il monhael komita sizaeh ka pinonrowa’ yemian ’am ’anoka <strong>\npinakrarahoe’ kina:at </strong> Sipinakita’.",
+       "wlnote": "hani wahoer ’ima ’aring $3 $4 kaysa’an <strong>$2</strong> kakita’an hahila: pinaskayzayzaeh <strong>$1</strong> pinapaybi:il ka pyenti:",
+       "wlshowlast": "pinakita’  haysani’  $1 kakita’an ka hahila: $2 hahila:",
+       "watchlist-hide": " Sa:il",
+       "watchlist-submit": "pinakita’",
+       "enotif_reset": "pinSakira:a’ ray yemien kinita’ ila saeboeh",
+       "enotif_minoredit": "hini ’aehae’ ka pinaybiil kaponrowa’en",
+       "historyaction-submit": " pinakita’",
+       "dellogpage": " boloe’ ka pinatawaw",
+       "deletionlog": " boloe’ ka pinatawaw",
+       "rollbacklink": "paklobih",
+       "rollbacklinkcount": " paklobih $1 ka pinbienji",
+       "protectlogpage": "kinalahaeng ka pinatawaw",
+       "protectedarticle": "kinalahaeng ila \"[[$1]]\"",
+       "modifiedarticleprotection": "sinapih ila \"[[$1]]\" nom malahaeng ka kin’ibabaw.",
+       "protect-default": " somiwa’ saeboeh kamamatawaw",
+       "restriction-type": "Somiwa’ ka Siniwa’:",
+       "restriction-edit": " bienji",
+       "restriction-move": " tilkoraeh",
+       "restriction-create": "paskayzaeh",
+       "undeleteinvert": "hin’ohay pawhi:il",
+       "undelete-search-submit": "komi:im",
+       "namespace": " karo:o’an :",
+       "invert": "hin’ohay pawhi:il",
+       "tooltip-invert": "pawhi:il ka hini he:Syuen fangkway ’ano Sina:il pawhi:il ray karo:o’an ’izo’ ka ye:myen sapih (So: pawhi:il ka ’ima hingha’an karo:o’an, ’isa: ’am hoSa:il ka ’ima hingha’an karo:o’an )",
+       "namespace_association": "’ima hingha’an karo:o’an",
+       "tooltip-namespace_association": "pawhi:il ka hini he:Syuen fangkway ’anoka hani saeboeh ki pinawhi:il karo:o’an ka ’ima hinfha’ kapaehrahrang a ka Sapang karo:o’an",
+       "blanknamespace": "(’ima Sapang)",
+       "contributions": "{{GENDER:$1| kamamatawaw }} mobay ka pinatawaw",
+       "contributions-title": "noka $1 ka kamamatawaw binoway ka pinatawaw",
+       "mycontris": " mobay ka pinatawaw",
+       "anoncontribs": " mobay ka pinatawaw",
+       "contribsub2": "{{GENDER:$3|$1}} binoway ka pinatawaw ($2)",
+       "contributions-userdoesnotexist": "kamamatawaw zhanghaw \"$1\" ’i’ini’ ka:at ka raro:o’",
+       "nocontribs": "’okay tihoero: ka pinaylal’oz pinaehrahrang ka pyenti:.",
+       "uctop": " ’isahini",
+       "month": "kalokngoran ka ’ilaS:",
+       "year": "kalokngoran ka tinal’oemaeh:",
+       "sp-contributions-newbies": "pinakita’ nanaw ka ’ima SaSo’ zhanghaw ka pinatawaw",
+       "sp-contributions-blocklog": " soksok ka pinatawaw",
+       "sp-contributions-logs": "pinatawaw",
+       "sp-contributions-talk": " kapaehrahrangan",
+       "sp-contributions-username": "noka IP Sina:engan o noka kamamatawaw raro:o’:",
+       "sp-contributions-toponly": "pinakita’ nanaw ’ima SaSo’ pinonrowa’ ka pinpienji:",
+       "sp-contributions-newonly": "pinakita’ nanaw ka paskayzaeh ray yemien ka pinpienji.",
+       "sp-contributions-submit": "komi:im",
+       "whatlinkshere": " lotor ray hini ye:myen",
+       "whatlinkshere-title": " lomotor ray \"$1\" ka ye:myen",
+       "whatlinkshere-page": "ye:myen:",
+       "linkshere": "’anoka hini wahoer lomotor ray <strong>[[:$2]]</strong>:",
+       "isredirect": " papanra:an nahan ka ye:myen",
+       "istemplate": " Somibae:aeh ka pinayaka:i’  Somibae:aeh ka pinayaka:i’",
+       "isimage": " tang’an kalotoran",
+       "whatlinkshere-prev": "ray kati’aela’an $1",
+       "whatlinkshere-next": "{{PLURAL:$1|| ’aehae’ naehan ray hikor $1 }}",
+       "whatlinkshere-links": "← kalotoran",
+       "whatlinkshere-hideredirs": "$1 papanra:an nahan",
+       "whatlinkshere-hidetrans": "$1  Somibae:aeh ka pinayaka:i’",
+       "whatlinkshere-hidelinks": "$1 kalotoran",
+       "whatlinkshere-hideimages": "$1 tang’an lomotor",
+       "whatlinkshere-filters": " komi:im",
+       "whatlinkshere-submit": " patawaw",
+       "ipaddressorusername": "noka IP Sina:engan o noka kamamatawaw raro:o’:",
+       "ipboptions": "hinroSa’, ’aehae’ hahila:, to:o’ hahila:,’aehae’ Sinangayan, roSa’ Sinangayan, ’aehae’ ’ilaS, to:o’ ’ilsaS, SayboSi: ’ilaS, ‘aehae’ tinal’oemaeh, tabin’inowan",
+       "ipb-pages-label": "ye:myen",
+       "ipb-namespaces-label": " karo:o’an",
+       "autoblocklist-submit": "komi:im",
+       "ipblocklist-submit": "komi:im",
+       "createaccountblock": "paskayzaeh ka ’inlet zhanghaw",
+       "blocklist-editing-page": "ye:myen",
+       "blocklist-editing-ns": " karo:o’an",
+       "blocklink": "soksok",
+       "blocklogpage": " soksok ka pinatawaw",
+       "blocklogentry": " sinoksok ila ka pinahrahrangan hahila: tabin $2 $3",
+       "reblock-logentry": "somapih [[$1]] ka sinoksok pinahrahrangan hahila: tabin $2 $3",
+       "block-log-flags-nocreate": "paskayzaeh ka ’inlet zhanghaw",
+       "proxyblocker": " somapih ka’oSa’an Sefuchi’ kasoksokan",
+       "move-page": " tilkoraeh $1",
+       "movelogpage": " tilkoraeh ka pinatawaw",
+       "export": " pa’al’oehaez ray ye:myen",
+       "allmessages-filter-all": "saeboeh",
+       "thumbnail-more": "paksopaloy",
+       "import-comment": "kina:at ka kakSekla’an",
+       "tooltip-pt-userpage": "{{GENDER:| niSo’ nom matawaw }}ye:myen",
+       "tooltip-pt-mytalk": "{{GENDER:| niSo’}} kapaehrahrangan ye:myen",
+       "tooltip-pt-preferences": "{{GENDER:| niSo’}}kin hinowa’an",
+       "tooltip-pt-watchlist": "So’o mam komitkita’ sinapih ka ye:myen kina:at kapakSekla’",
+       "tooltip-pt-mycontris": "{{GENDER:| niSo’}} bino:ay ka pinatawaw kina:at kapakSekla’",
+       "tooltip-pt-login": "So’o ’inSa’la’ kaS’abo’ ,o So: kayni’ kaS’abo’ ma’ kayzaeh.",
+       "tooltip-pt-logout": "kas’oehaez",
+       "tooltip-pt-createaccount": "yami ’am romokol ’iSo’on pakayzaeh ’aehae’ ka zhanghaw o kaS’aboe’, ’ana komSa’ kayni’ kaS’aboe’ ma’ kayzaeh.",
+       "tooltip-ca-talk": "inakhini’an ye:myen ’izo’ kapaehraehrang",
+       "tooltip-ca-edit": " bienji ka hini ye:myen",
+       "tooltip-ca-addsection": "ka’on’alayan ’ima SaSo’ zhang jie",
+       "tooltip-ca-viewsource": "hini ye:myen kinalahaeng ila. So’o kayzaeh komita’ ka hini yuensema:",
+       "tooltip-ca-history": "hini ye:myen Sa’la’ pinonrowa’an",
+       "tooltip-ca-move": " tilkoraeh ka hini kina:at",
+       "tooltip-ca-watch": "hini ka ye:myen rompa: kanSo’ ray jyenSe’ qintan",
+       "tooltip-ca-unwatch": "hini ray yemien ’in’alay kakita’an qintan ’izo’ tilkoraeh.",
+       "tooltip-search": " komi:im {{SITENAME}}",
+       "tooltip-search-go": "So: ki hini raro:o’ ’ima hingha’ ka yemyen haysaza, ’oSa’ ziza ray yemyen",
+       "tooltip-search-fulltext": "komi:im ’ima matawaw ka hini kina:at ka yemyen",
+       "tooltip-p-logo": " rima’ ray So:ye:",
+       "tooltip-n-mainpage": " rima’ ray So:ye:",
+       "tooltip-n-mainpage-description": " rima’ ray So:ye:",
+       "tooltip-n-portal": "’inkhini’an ka zhwan’an, So’o kayzaeh powa’ ka kano’, hayno’ kayzaeh tomihoero: niSo’ ka kinSarara’ howaw",
+       "tooltip-n-currentevents": "ray Sinbon ’izo’ tomihoero: ’ima hingha’an ka kina:at",
+       "tooltip-n-recentchanges": "lyecu ray Wiki ’izo’ haysani’ sinapih kina:at kapakSekla’",
+       "tooltip-n-randompage": "tanikikay kaS’aboe’ ray ’aehae’ ye:myen",
+       "tooltip-n-help": "komi:im katilhaehaelan",
+       "tooltip-t-whatlinkshere": "lye’in saeboeh ka linotor rayhiniye:myen ka ye:myen",
+       "tooltip-t-recentchangeslinked": "hini ye:myen lotoren ray ’aroma’ ye:myen haysani sinapih",
+       "tooltip-feed-atom": "hini ye:myen ray Atom kawa:i’an",
+       "tooltip-t-contributions": "{{GENDER:$1|hini kamamatawaw }} mobay ka pinatawaw kapakSekla’ kina:at",
+       "tooltip-t-emailuser": "maraytyennaw Somater ka kina:at kaklienlo:an {{GENDER:$1|hini ’aehae’ kamamatawaw }}",
+       "tooltip-t-upload": " maray tiyanaw mobay ka kina:at tang’an",
+       "tooltip-t-specialpages": "saeboeh ’ima nonak yemyen ka kina:at kapakSekla’",
+       "tooltip-t-print": "hini ye:myen hayza’ kaklye’in ka kina:at banben",
+       "tooltip-t-permalink": "hini ye:myen pinonrowa’ ka pinakrengreng kalotoran",
+       "tooltip-ca-nstab-main": " komita ray ye:myen ka kina:at",
+       "tooltip-ca-nstab-user": " komita nom matawaw ka ye:myen",
+       "tooltip-ca-nstab-special": "hini ye:myen ka ’ima nonak yemyen , ’oka’ nanaw bienji",
+       "tooltip-ca-nstab-project": " komita ray zhwan’an ka ye:myen",
+       "tooltip-ca-nstab-image": "komita ray tang’an ka ye:myen",
+       "tooltip-ca-nstab-mediawiki": "komita ray Sitong  pinakSekla’ ka:i’",
+       "tooltip-ca-nstab-template": " komita kakSaro:olan",
+       "tooltip-ca-nstab-category": " komita ’a’apol ka ye:myen",
+       "tooltip-minoredit": "paSkira: ka hini komSa’ pinapaybi:il ka pinpienji:",
+       "tooltip-save": " Somili’ ka ’inSo’a sinapih",
+       "tooltip-preview": "pakray ’i’ini’ Somili’ SawaSak ka ’inSo’a sinapih !",
+       "tooltip-diff": " pinakita’ niSo’ ka kapapnabih sinapih ka pinatawaw",
+       "tooltip-compareselectedversions": "kita’ ka hini yemien roSa’ pinawhi:il ila pinonrowa’ ’izo’ ka kin nonakan.",
+       "tooltip-watch": "hini ka ye:myen rompa: kanSo’ ray jyenSe’ qintan",
+       "tooltip-rollback": "konhoe:oet \" paklobih \" lotor ’isa: kayzaeh paklobih ray kaysa’an ’aehae’ ’ima mobay ray hini ye:myen pinbienji",
+       "tooltip-undo": "\" paklobih \" kayzaeh paklobih ka hini bienji o ’anoka pinaSawaSak mo:Se’ haewaeh bienji pyawtan,So’o kayzaeh ray zhayaw ’izo’ rompa: ka tinak’ino’an.",
+       "tooltip-summary": "ka:at ka ’ima ’itaSan zhayaw",
+       "simpleantispam-label": "nom ’emlet ka saepae’. pak <strong>’izi’</strong> ka:at ka hini lanwey!",
+       "pageinfo-title": "noka \"$1\" ka kakra:aman",
+       "pageinfo-default-sort": "pinyunbi’ ka pinpaySi’ nom.... :",
+       "pageinfo-length": "noka yemien kin’inaro’( weiyenzu)",
+       "pageinfo-robot-policy": "’ anoka kikay ma’iyaeh paskayzaeh kaSa’amoehan kina:at",
+       "pageinfo-few-watchers": "wawalae’ ’aehae’ ka kamamiyalawa’",
+       "pageinfo-redirects-name": "tinoroe’ka hini yemien nom papanra:an ka yemien Sinepe:",
+       "pageinfo-subpages-name": "hini ka yemien ray wahoer yemien Sinepe:",
+       "pageinfo-subpages-value": "$1 ($2 個{{PLURAL:$2| papanra:an nahan }}; $3 個{{PLURAL:$3| ’okik ka papanra:anen nahan }})",
+       "pageinfo-recent-edits": " haysani’ monpilaz pienji: (Saehpi:ih $1 ’izo’)",
+       "pageinfo-magic-words": "pa:se: {{PLURAL:$1|  kina:at }} ($1)",
+       "pageinfo-hidden-categories": "Sa:il  ’a’apolen Sinraehoe’ ($1)",
+       "pageinfo-templates": "Somibae:aeh ka pinayaka:i’ kakSaro:olan ($1)",
+       "pageinfo-toolboxlink": "ray ye:myen kakra:aman",
+       "pageinfo-contentpage": "nom Somepe: ka pinanabih ray yemien",
+       "previousdiff": "’ima tatini’ sowiti’ pinpienji",
+       "nextdiff": "’ima SaSo’ bienji →",
+       "widthheightpage": "$1 × $2,$3 biyae’",
+       "file-info-size": "$1 × $2 kakita’an ka hinoba:ang , tang’an kinsopaloy:$3,MIME Sinrahoe’:$4",
+       "file-info-size-pages": "$1 × $2 kakita’an ka hinoba:ang ,noka tang’an kin sopaloy :$3,MIME Sinraehoe’ :$4,$5 {{PLURAL:$5| biyae’ }}",
+       "file-nohires": " ’ oka’ ila ka ’ima ’ibabaw kin tilka:an ka baboway .",
+       "svg-long-desc": "SVG tang’an, ray ’oehaez kinsopaloy:$1 × $2 kakita’an ka hinoba:ang, tang’an kin sopaloy:$3",
+       "show-big-image": "’a’aringan tang’an",
+       "show-big-image-preview": " pinaSawaSak kinSopaloy:$1.",
+       "show-big-image-other": " ’aroma’ {{PLURAL:$2||}} kin tilka:an :$1.$1",
+       "show-big-image-size": "$1 × $2 kakita’an ka hinoba:ang",
+       "newimages-newbies": "pinakita’ nanaw ka ’ima SaSo’ zhanghaw ka pinatawaw",
+       "ilsubmit": " komi:im",
+       "metadata": " pinqyuanSe’ ka kina:at",
+       "metadata-help": "hini tang’an ’izo’ hani saeboeh ka ’aroma’ kakra:aman, hini saeboeh kakra:aman ra:amen ’inaySu’wey kakSaSing a kikay nom Sawmya ray pinaskayzaeh a Su’weyhwa’ ’izo’ baba:aw rinpa:, So: tang’an ’inay’a’aringan pinonrowa’, pinakita’ kina:at ra:amen ’oka’ nanaw pakita’ ka pinonrowa’ tang’an",
+       "metadata-fields": "ray hini pinakSekla’ ka:i’ ’izo’ pinlye’in ka EXIF qyuanSe’ kina:at ’izo’ ’am hani saeboeh ray SaSing pinakita’ ye:myen,So: pinqyuanSe’ ka kina:at ’aewhay ila pinakita’ nanaw hani wahoer pinakSekla’ ka:i’ .\n’aroma’ pinqyuanSe’ ka kina:at ka ’iSe’ ’isa: Sina:il .\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "namespacesall": "saeboeh",
+       "monthsall": "saeboeh",
+       "confirm-watch-top": "hini ka ye:myen rompa: kanSo’ ray jyenSe’ qintan?",
+       "confirm-unwatch-top": "hini ray yemien ’in’alay kakita’an qintan ’izo’ tilkoraeh?",
+       "imgmultigo": " patawaw!",
+       "imgmultigoto": " rima’ ray minay $1 yemien",
+       "img-lang-go": " patawaw",
+       "table_pager_limit_submit": " patawaw",
+       "watchlistedit-raw-title": "pienji: ’inin’alayan kakita’an qintan",
+       "watchlisttools-view": " komita  ’ima hingha’an somapih",
+       "watchlisttools-edit": " komita o pienji: kakita’an qintan",
+       "watchlisttools-raw": "pienji: ’inin’alayan kakita’an qintan",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1| kapaehrahrangan ]])",
+       "version-specialpages": " ’ima nonak yemyen",
+       "version-ext-colheader-description": " papapnabih",
+       "version-ext-colheader-credits": "kamapaskayzaeh",
+       "version-libraries-description": " papapnabih",
+       "version-libraries-authors": "kamapaskayzaeh",
+       "redirect": "tani tang’an, kamamatawaw, yemin, pinonrowa’ o ka kina:at ID mowa:i’ papanra:an nahan",
+       "redirect-summary": "hini ’ima nonak yemien kayzaeh ’anoka pinapanra:an nahan painrowa’en ray tang’an ( tinoroe’ tang’an raro:o’)、 yemien ( tinoroe’ ka pinonrowa’ ID a ka yemien ID)、 kamamatawaw ka yemien ( tinoroe’ kamamatawaw ID)、a kina:at ka Sinrahoe’ ( tinoroe’ ka kina:at ID).’anoka-:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]、[[{{#Special:Redirect}}/user/101]] a [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-submit": " patawaw",
+       "redirect-revision": "pinonrpwa’ ka yemin ID",
+       "fileduplicatesearch-submit": " komi:im",
+       "specialpages": " ’ima nonak yemyen",
+       "tag-filter": "[[Special:Tags| kakSekla’an ]] komi:im :",
+       "tag-list-wrapper": "[[Special:Tags|$1 ka kaSakira’an ]]:$2",
+       "tag-mw-rollback": "paklobih",
+       "tag-mw-undo": " paklobih",
+       "tags-source-header": " kawa:i’an",
+       "tags-edit": " bienji",
+       "tags-create-submit": "paskayzaeh",
+       "permanentlink": "pinakrengreng kalotoran",
+       "htmlform-cloner-delete": "tilkoraeh",
+       "logentry-delete-delete": "$1 boloe’ ka ye:myen $3",
+       "logentry-delete-restore": "$1{{GENDER:$2| paklobih }} ray yemien $3($4)",
+       "logentry-delete-revision": "$1 {{GENDER:$2|sinapih ila}} ray yemien ’izo’ $3 中 {{PLURAL:$5|1 筆 pinonrowa’|$5 筆 pinonrowa’}}ka kakita’an :$4",
+       "logentry-move-move": "$1 {{GENDER:$2| tinilkoraeh }} ka ye:myen $3 ray $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|tinilkoraeh ila}} yemien $3 o $4,’okay ’o:ol papanra:an nahan",
+       "logentry-move-move_redir": "$1 tinilkoraeh ka yemien $3 o $4 ma manehmek ka ’inkahayza’an papanra:an nahan",
+       "logentry-patrol-patrol-auto": "$1 pinkakoway nonak ila{{GENDER:$2| pinaSkira:a’ }}yemien $3 ka pinonrowa’ $4 ’isa: kini:im ila.",
+       "logentry-newusers-newusers": "ray{{GENDER:$2| paskayzaehen ila }} kamamatawaw zhanghaw $1",
+       "logentry-newusers-create": "ray{{GENDER:$2| paskayzaehen ila }} kamamatawaw zhanghaw $1",
+       "logentry-newusers-autocreate": "pinakkakoway ila {{GENDER:$2| paskayzaeh }} kamamatawaw zhanghaw $1",
+       "logentry-upload-upload": "$1 {{GENDER:$2| paraytiyanawen ila mobay ka kina:at }} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2| maray tiyanaw mobay ka kina:at ila}}’ima SaSo’ panpen ka $3",
+       "feedback-cancel": "kayni’",
+       "searchsuggest-search": " komi:im {{SITENAME}}",
+       "duration-days": "$1 hahila:",
+       "log-action-filter-all": "saeboeh",
+       "log-action-filter-block-block": "soksok",
+       "authmanager-userdoesnotexist": "kamamatawaw zhanghaw \"$1\" ’i’ini’ ka:at ka raro:o’"
+}
index ccc29b3..841019f 100644 (file)
        "nospecialpagetext": "<strong>您請求的特定頁面無效。</strong>\n\n欲取得有效的特定頁面清單可至 [[Special:SpecialPages|{{int:specialpages}}]]。",
        "error": "錯誤",
        "databaseerror": "資料庫錯誤",
-       "databaseerror-text": "出現資料庫查詢錯誤。\n這可能表示系統有問題存在。",
+       "databaseerror-text": "出現資料庫查詢錯誤。\n這表示系統可能有問題存在。",
        "databaseerror-textcl": "資料庫查詢錯誤。",
        "databaseerror-query": "查詢:$1",
        "databaseerror-function": "功能:$1",
        "title-invalid-too-long": "請求的頁面標題過長,標題使用 UTF-8 編碼不可超過 $1 {{PLURAL:$1|位元組|位元組}}。",
        "title-invalid-leading-colon": "請求的頁面標題包含無效的冒號於開始。",
        "perfcached": "以下為快取資料,可能不是最新的。 快取資料最多可儲存 {{PLURAL:$1|1 筆結果|$1 筆結果}}。",
-       "perfcachedts": "以下為快取資料,最後更新時間為 $1。 快取資料最多可儲存 {{PLURAL:$4|1 筆結果|$4 筆結果}}。",
+       "perfcachedts": "以下為快取資料,最後更新時間為 $1。快取資料最多可儲存 {{PLURAL:$4|1 筆結果|$4 筆結果}}。",
        "querypage-no-updates": "目前已停用此頁面的更新功能。\n在此頁面的資料不會被立即更新。",
        "viewsource": "檢視原始碼",
        "viewsource-title": "檢視 $1 的原始碼",
        "logeventslist-patrol-log": "巡查日誌",
        "logeventslist-tag-log": "標籤日誌",
        "all-logs-page": "所有公開日誌",
-       "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。您可以點選下拉式選單選擇日誌的類型,指定使用者名稱(區分大小寫)或影響的頁面(區分大小寫)。",
+       "alllogstext": "合併顯示所有{{SITENAME}}中所有類型的日誌。您可以點選下拉式選單選擇日誌的類型,指定使用者名稱(區分大小寫)或影響的頁面(區分大小寫)。",
        "logempty": "無符合條件的日誌。",
        "log-title-wildcard": "搜尋以此欄位文字為字首的標題",
        "showhideselectedlogentries": "顯示/隱藏已選擇的日誌項目",
index 6e460fa..a880114 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Guianan Creole (kréyòl gwiyanè)
+/** Guianan Creole (Kriyòl Gwiyannen)
  *
  * To improve a translation please visit https://translatewiki.net
  *
index ceba9b5..813f88e 100644 (file)
@@ -413,13 +413,13 @@ class MigrateActors extends LoggedUpdateMaintenance {
        protected function migrateLogSearch() {
                $complainedAboutUsers = [];
 
-               $primaryKey = [ 'ls_field', 'ls_value' ];
+               $primaryKey = [ 'ls_value', 'ls_log_id' ];
                $pkFilter = array_flip( $primaryKey );
                $this->output( "Beginning migration of log_search\n" );
                wfWaitForSlaves();
 
                $dbw = $this->getDB( DB_MASTER );
-               $countUpdated = 0;
+               $countInserted = 0;
                $countActors = 0;
                $countErrors = 0;
 
@@ -427,72 +427,44 @@ class MigrateActors extends LoggedUpdateMaintenance {
                while ( true ) {
                        // Fetch the rows needing update
                        $res = $dbw->select(
+                               [ 'log_search', 'actor' ],
+                               [ 'ls_value', 'ls_log_id', 'actor_id' ],
                                [
-                                       'ls' => $dbw->buildSelectSubquery(
-                                               'log_search',
-                                               'ls_value',
-                                               [
-                                                       'ls_field' => 'target_author_id',
-                                                       $next
-                                               ],
-                                               __METHOD__,
-                                               [
-                                                       'DISTINCT',
-                                                       'ORDER BY' => [ 'ls_value' ],
-                                                       'LIMIT' => $this->mBatchSize,
-                                               ]
-                                       ),
-                                       'actor'
+                                       'ls_field' => 'target_author_id',
+                                       $next
                                ],
+                               __METHOD__,
                                [
-                                       'ls_field' => $dbw->addQuotes( 'target_author_id' ),
-                                       'ls_value',
-                                       'actor_id'
+                                       'ORDER BY' => $primaryKey,
+                                       'LIMIT' => $this->mBatchSize,
                                ],
-                               [],
-                               __METHOD__,
-                               [],
                                [ 'actor' => [ 'LEFT JOIN', 'ls_value = ' . $dbw->buildStringCast( 'actor_user' ) ] ]
                        );
                        if ( !$res->numRows() ) {
                                break;
                        }
 
-                       // Update the rows
-                       $del = [];
+                       // Insert a 'target_author_actor' for each 'target_author_id'
+                       $ins = [];
                        foreach ( $res as $row ) {
                                $lastRow = $row;
                                if ( !$row->actor_id ) {
                                        list( , $display ) = $this->makeNextCond( $dbw, $primaryKey, $row );
-                                       $this->error( "No actor for row with $display\n" );
+                                       $this->error( "No actor for target_author_id row with $display\n" );
                                        $countErrors++;
                                        continue;
                                }
-                               $dbw->update(
-                                       'log_search',
-                                       [
-                                               'ls_field' => 'target_author_actor',
-                                               'ls_value' => $row->actor_id,
-                                       ],
-                                       [
-                                               'ls_field' => $row->ls_field,
-                                               'ls_value' => $row->ls_value,
-                                       ],
-                                       __METHOD__,
-                                       [ 'IGNORE' ]
-                               );
-                               $countUpdated += $dbw->affectedRows();
-                               $del[] = $row->ls_value;
-                       }
-                       if ( $del ) {
-                               $dbw->delete(
-                                       'log_search', [ 'ls_field' => 'target_author_id', 'ls_value' => $del ], __METHOD__
-                               );
-                               $countUpdated += $dbw->affectedRows();
+                               $ins[] = [
+                                       'ls_field' => 'target_author_actor',
+                                       'ls_value' => $row->actor_id,
+                                       'ls_log_id' => $row->ls_log_id,
+                               ];
                        }
+                       $dbw->insert( 'log_search', $ins, __METHOD__, [ 'IGNORE' ] );
+                       $countInserted += $dbw->affectedRows();
 
                        list( $next, $display ) = $this->makeNextCond( $dbw, $primaryKey, $lastRow );
-                       $this->output( "... $display\n" );
+                       $this->output( "... target_author_id, $display\n" );
                        wfWaitForSlaves();
                }
 
@@ -500,31 +472,17 @@ class MigrateActors extends LoggedUpdateMaintenance {
                while ( true ) {
                        // Fetch the rows needing update
                        $res = $dbw->select(
+                               [ 'log_search', 'actor' ],
+                               [ 'ls_value', 'ls_log_id', 'actor_id' ],
                                [
-                                       'ls' => $dbw->buildSelectSubquery(
-                                               'log_search',
-                                               'ls_value',
-                                               [
-                                                       'ls_field' => 'target_author_ip',
-                                                       $next
-                                               ],
-                                               __METHOD__,
-                                               [
-                                                       'DISTINCT',
-                                                       'ORDER BY' => [ 'ls_value' ],
-                                                       'LIMIT' => $this->mBatchSize,
-                                               ]
-                                       ),
-                                       'actor'
+                                       'ls_field' => 'target_author_ip',
+                                       $next
                                ],
+                               __METHOD__,
                                [
-                                       'ls_field' => $dbw->addQuotes( 'target_author_ip' ),
-                                       'ls_value',
-                                       'actor_id'
+                                       'ORDER BY' => $primaryKey,
+                                       'LIMIT' => $this->mBatchSize,
                                ],
-                               [],
-                               __METHOD__,
-                               [],
                                [ 'actor' => [ 'LEFT JOIN', 'ls_value = actor_name' ] ]
                        );
                        if ( !$res->numRows() ) {
@@ -538,45 +496,31 @@ class MigrateActors extends LoggedUpdateMaintenance {
                                $dbw, 'ls_value', $rows, $complainedAboutUsers, $countErrors
                        );
 
-                       // Update the rows
-                       $del = [];
+                       // Insert a 'target_author_actor' for each 'target_author_ip'
+                       $ins = [];
                        foreach ( $rows as $row ) {
                                if ( !$row->actor_id ) {
                                        list( , $display ) = $this->makeNextCond( $dbw, $primaryKey, $row );
-                                       $this->error( "Could not make actor for row with $display\n" );
+                                       $this->error( "Could not make actor for target_author_ip row with $display\n" );
                                        $countErrors++;
                                        continue;
                                }
-                               $dbw->update(
-                                       'log_search',
-                                       [
-                                               'ls_field' => 'target_author_actor',
-                                               'ls_value' => $row->actor_id,
-                                       ],
-                                       [
-                                               'ls_field' => $row->ls_field,
-                                               'ls_value' => $row->ls_value,
-                                       ],
-                                       __METHOD__,
-                                       [ 'IGNORE' ]
-                               );
-                               $countUpdated += $dbw->affectedRows();
-                               $del[] = $row->ls_value;
-                       }
-                       if ( $del ) {
-                               $dbw->delete(
-                                       'log_search', [ 'ls_field' => 'target_author_ip', 'ls_value' => $del ], __METHOD__
-                               );
-                               $countUpdated += $dbw->affectedRows();
+                               $ins[] = [
+                                       'ls_field' => 'target_author_actor',
+                                       'ls_value' => $row->actor_id,
+                                       'ls_log_id' => $row->ls_log_id,
+                               ];
                        }
+                       $dbw->insert( 'log_search', $ins, __METHOD__, [ 'IGNORE' ] );
+                       $countInserted += $dbw->affectedRows();
 
                        list( $next, $display ) = $this->makeNextCond( $dbw, $primaryKey, $lastRow );
-                       $this->output( "... $display\n" );
+                       $this->output( "... target_author_ip, $display\n" );
                        wfWaitForSlaves();
                }
 
                $this->output(
-                       "Completed migration, updated $countUpdated row(s) with $countActors new actor(s), "
+                       "Completed migration, inserted $countInserted row(s) with $countActors new actor(s), "
                        . "$countErrors error(s)\n"
                );
                return $countErrors;
index 16b2591..ff41b5e 100644 (file)
@@ -1,11 +1,16 @@
 /* This style adds a toggle button with internationalized message for the TOC. */
 
-/* When the browser supports :checked then overwrite the style="display:none" and make the /*
+/* When the browser supports :checked then overwrite the style="display:none" and make the */
 /* checkbox invisible on another way to allow to focus the checkbox with keyboard. */
 :not( :checked ) > .toctogglecheckbox {
+       // Make the checkbox visible to allow it to focus with keyboard.
        display: inline !important; /* stylelint-disable-line declaration-no-important */
+       // Remove any size of the checkbox.
        position: absolute;
+       // Make the checkbox invisible.
        opacity: 0;
+       // Prevent that the checkbox is clickable and changes the cursor.
+       z-index: -1;
 }
 
 .toctogglespan {
index 7d40d8c..7bb5c38 100644 (file)
@@ -2531,7 +2531,7 @@ class OutputPageTest extends MediaWikiTestCase {
                $nonce->setAccessible( true );
                $nonce->setValue( $out, 'secret' );
                $rl = $out->getResourceLoader();
-               $rl->setMessageBlobStore( new NullMessageBlobStore() );
+               $rl->setMessageBlobStore( $this->createMock( MessageBlobStore::class ) );
                $rl->register( [
                        'test.foo' => new ResourceLoaderTestModule( [
                                'script' => 'mw.test.foo( { a: true } );',
@@ -2647,7 +2647,7 @@ class OutputPageTest extends MediaWikiTestCase {
                        ->method( 'buildCssLinksArray' )
                        ->willReturn( [] );
                $rl = $op->getResourceLoader();
-               $rl->setMessageBlobStore( new NullMessageBlobStore() );
+               $rl->setMessageBlobStore( $this->createMock( MessageBlobStore::class ) );
 
                // Register custom modules
                $rl->register( [
@@ -3051,21 +3051,3 @@ class OutputPageTest extends MediaWikiTestCase {
                return new OutputPage( $context );
        }
 }
-
-/**
- * MessageBlobStore that doesn't do anything
- */
-class NullMessageBlobStore extends MessageBlobStore {
-       public function get( ResourceLoader $resourceLoader, $modules, $lang ) {
-               return [];
-       }
-
-       public function updateModule( $name, ResourceLoaderModule $module, $lang ) {
-       }
-
-       public function updateMessage( $key ) {
-       }
-
-       public function clear() {
-       }
-}
index 58e6d7d..70bf39f 100644 (file)
@@ -9,6 +9,7 @@ use Wikimedia\TestingAccessWrapper;
 class MessageBlobStoreTest extends PHPUnit\Framework\TestCase {
 
        use MediaWikiCoversValidator;
+       use PHPUnit4And6Compat;
 
        protected function setUp() {
                parent::setUp();
@@ -37,7 +38,7 @@ class MessageBlobStoreTest extends PHPUnit\Framework\TestCase {
 
        protected function makeBlobStore( $methods = null, $rl = null ) {
                $blobStore = $this->getMockBuilder( MessageBlobStore::class )
-                       ->setConstructorArgs( [ $rl ] )
+                       ->setConstructorArgs( [ $rl ?? $this->createMock( ResourceLoader::class ) ] )
                        ->setMethods( $methods )
                        ->getMock();