Merge "Mock CommentStore in some RevisionTest tests"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 6 Feb 2018 15:32:03 +0000 (15:32 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 6 Feb 2018 15:32:03 +0000 (15:32 +0000)
31 files changed:
RELEASE-NOTES-1.31
includes/OutputPage.php
includes/ServiceWiring.php
includes/Storage/RevisionStore.php
includes/Title.php
includes/api/ApiQueryBase.php
includes/api/i18n/ru.json
includes/api/i18n/sv.json
includes/http/MWHttpRequest.php
includes/installer/i18n/en.json
includes/interwiki/Interwiki.php
includes/libs/MultiHttpClient.php
includes/media/IPTC.php
includes/media/MediaTransformOutput.php
languages/i18n/be-tarask.json
languages/i18n/bqi.json
languages/i18n/gcr.json [new file with mode: 0644]
languages/i18n/lrc.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/ug-arab.json
languages/i18n/ur.json
maintenance/interwiki.list
maintenance/interwiki.sql
resources/src/jquery/jquery.localize.js
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/Storage/RevisionStoreTest.php
tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
tests/phpunit/includes/parser/SanitizerTest.php

index 8261a39..4d8f2fd 100644 (file)
@@ -211,6 +211,8 @@ changes to languages because of Phabricator reports.
   * OutputPage::setSquidMaxage(); deprecated in 1.27
   * OutputPage::readOnlyPage(); deprecated in 1.25
   * OutputPage::rateLimited(); deprecated in 1.25
+  * Additionally, the protected OutputPage::$mExtStyles array, only accessed through
+    the above and with no known uses, was removed.
 * The no-op method Skin::showIPinHeader(), deprecated in 1.27, was removed.
 * \ObjectFactory (no namespace) is deprecated, the namespaced \Wikimedia\ObjectFactory
   from the wikimedia/object-factory library should be used instead.
index 5fa66e8..e6345ba 100644 (file)
@@ -52,12 +52,6 @@ class OutputPage extends ContextSource {
        /** @var bool */
        protected $mCanonicalUrl = false;
 
-       /**
-        * @var array Additional stylesheets. Looks like this is for extensions.
-        *   Might be replaced by ResourceLoader.
-        */
-       protected $mExtStyles = [];
-
        /**
         * @var string Should be private - has getter and setter. Contains
         *   the HTML title */
@@ -3643,12 +3637,6 @@ class OutputPage extends ContextSource {
        public function buildCssLinksArray() {
                $links = [];
 
-               // Add any extension CSS
-               foreach ( $this->mExtStyles as $url ) {
-                       $this->addStyle( $url );
-               }
-               $this->mExtStyles = [];
-
                foreach ( $this->styles as $file => $options ) {
                        $link = $this->styleLink( $file, $options );
                        if ( $link ) {
index dc397a2..9217fc0 100644 (file)
@@ -477,6 +477,8 @@ return [
                        $services->getMainWANObjectCache()
                );
 
+               $store->setLogger( LoggerFactory::getInstance( 'RevisionStore' ) );
+
                $config = $services->getMainConfig();
                $store->setContentHandlerUseDB( $config->get( 'ContentHandlerUseDB' ) );
 
index b358631..bce3ba1 100644 (file)
@@ -42,6 +42,9 @@ use MediaWiki\User\UserIdentityValue;
 use Message;
 use MWException;
 use MWUnknownContentModelException;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
 use RecentChange;
 use stdClass;
 use Title;
@@ -61,7 +64,8 @@ use Wikimedia\Rdbms\LoadBalancer;
  * @note This was written to act as a drop-in replacement for the corresponding
  *       static methods in Revision.
  */
-class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup {
+class RevisionStore
+       implements IDBAccessObject, RevisionFactory, RevisionLookup, LoggerAwareInterface {
 
        /**
         * @var SqlBlobStore
@@ -88,6 +92,11 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup
         */
        private $cache;
 
+       /**
+        * @var LoggerInterface
+        */
+       private $logger;
+
        /**
         * @todo $blobStore should be allowed to be any BlobStore!
         *
@@ -108,6 +117,11 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup
                $this->blobStore = $blobStore;
                $this->cache = $cache;
                $this->wikiId = $wikiId;
+               $this->logger = new NullLogger();
+       }
+
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
        }
 
        /**
@@ -173,23 +187,34 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup
         * @return Title
         * @throws RevisionAccessException
         */
-       public function getTitle( $pageId, $revId, $queryFlags = 0 ) {
+       public function getTitle( $pageId, $revId, $queryFlags = self::READ_NORMAL ) {
                if ( !$pageId && !$revId ) {
                        throw new InvalidArgumentException( '$pageId and $revId cannot both be 0 or null' );
                }
 
-               list( $dbMode, $dbOptions, , ) = DBAccessObjectUtils::getDBOptions( $queryFlags );
-               $titleFlags = $dbMode == DB_MASTER ? Title::GAID_FOR_UPDATE : 0;
-               $title = null;
+               // This method recalls itself with READ_LATEST if READ_NORMAL doesn't get us a Title
+               // So ignore READ_LATEST_IMMUTABLE flags and handle the fallback logic in this method
+               if ( DBAccessObjectUtils::hasFlags( $queryFlags, self::READ_LATEST_IMMUTABLE ) ) {
+                       $queryFlags = self::READ_NORMAL;
+               }
+
+               $canUseTitleNewFromId = ( $pageId !== null && $pageId > 0 && $this->wikiId === false );
+               list( $dbMode, $dbOptions ) = DBAccessObjectUtils::getDBOptions( $queryFlags );
+               $titleFlags = ( $dbMode == DB_MASTER ? Title::GAID_FOR_UPDATE : 0 );
 
                // Loading by ID is best, but Title::newFromID does not support that for foreign IDs.
-               if ( $pageId !== null && $pageId > 0 && $this->wikiId === false ) {
+               if ( $canUseTitleNewFromId ) {
                        // TODO: better foreign title handling (introduce TitleFactory)
                        $title = Title::newFromID( $pageId, $titleFlags );
+                       if ( $title ) {
+                               return $title;
+                       }
                }
 
                // rev_id is defined as NOT NULL, but this revision may not yet have been inserted.
-               if ( !$title && $revId !== null && $revId > 0 ) {
+               $canUseRevId = ( $revId !== null && $revId > 0 );
+
+               if ( $canUseRevId ) {
                        $dbr = $this->getDBConnectionRef( $dbMode );
                        // @todo: Title::getSelectFields(), or Title::getQueryInfo(), or something like that
                        $row = $dbr->selectRow(
@@ -209,17 +234,25 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup
                        );
                        if ( $row ) {
                                // TODO: better foreign title handling (introduce TitleFactory)
-                               $title = Title::newFromRow( $row );
+                               return Title::newFromRow( $row );
                        }
                }
 
-               if ( !$title ) {
-                       throw new RevisionAccessException(
-                               "Could not determine title for page ID $pageId and revision ID $revId"
-                       );
+               // If we still don't have a title, fallback to master if that wasn't already happening.
+               if ( $dbMode !== DB_MASTER ) {
+                       $title = $this->getTitle( $pageId, $revId, self::READ_LATEST );
+                       if ( $title ) {
+                               $this->logger->info(
+                                       __METHOD__ . ' fell back to READ_LATEST and got a Title.',
+                                       [ 'trace' => wfDebugBacktrace() ]
+                               );
+                               return $title;
+                       }
                }
 
-               return $title;
+               throw new RevisionAccessException(
+                       "Could not determine title for page ID $pageId and revision ID $revId"
+               );
        }
 
        /**
index 0cdea35..1be9863 100644 (file)
@@ -4500,7 +4500,7 @@ class Title implements LinkTarget {
                }
 
                if ( $this->isExternal() ) {
-                       return true;  // any interwiki link might be viewable, for all we know
+                       return true; // any interwiki link might be viewable, for all we know
                }
 
                switch ( $this->mNamespace ) {
index 57a70bc..84169cb 100644 (file)
@@ -255,7 +255,7 @@ abstract class ApiQueryBase extends ApiBase {
        /**
         * Equivalent to addWhere(array($field => $value))
         * @param string $field Field name
-        * @param string|string[] $value Value; ignored if null or empty array;
+        * @param string|string[] $value Value; ignored if null or empty array
         */
        protected function addWhereFld( $field, $value ) {
                if ( $value !== null && !( is_array( $value ) && !$value ) ) {
index b45300f..9ee3527 100644 (file)
@@ -30,7 +30,7 @@
                        "Jack who built the house"
                ]
        },
-       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документация]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].",
+       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документация]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<p class=\"mw-apisandbox-link\"><strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].</p>",
        "apihelp-main-param-action": "Действие, которое следует выполнить.",
        "apihelp-main-param-format": "Формат вывода.",
        "apihelp-main-param-maxlag": "Значение максимального отставания может использоваться, когда MediaWiki установлена на кластер из реплицируемых баз данных. Чтобы избежать ухудшения ситуации с отставанием репликации сайта, этот параметр может заставить клиента ждать, когда задержка репликации станет ниже указанного значения. В случае чрезмерной задержки возвращается код ошибки «<samp>maxlag</samp>» с сообщением «<samp>Waiting for $host: $lag seconds lagged</samp>».<br>См. подробнее на странице с описанием [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: параметра Maxlag]].",
index b1df86e..8e5228a 100644 (file)
@@ -19,7 +19,7 @@
                        "Bengtsson96"
                ]
        },
-       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Vanliga frågor]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Sändlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-nyheter]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Buggar och begäran]\n</div>\n<strong>Status:</strong> Alla funktioner som visas på denna sida bör fungera, men API:et är fortfarande under utveckling och kan ändras när som helst. Prenumerera på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ sändlistan mediawiki-api-announce] för uppdateringsaviseringar.\n\n<strong>Felaktiga begäran:</strong> När felaktiga begäran skickas till API:et kommer en HTTP-header skickas med nyckeln \"MediaWiki-API-Error\" och sedan kommer både värdet i headern och felkoden som skickades tillbaka anges som samma värde. För mer information se [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fel och varningar]].\n\n<strong>Testning:</strong> För enkelt testning av API-begäran, se [[Special:ApiSandbox]].",
+       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Vanliga frågor]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Sändlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-nyheter]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Buggar och begäran]\n</div>\n<strong>Status:</strong> Alla funktioner som visas på denna sida bör fungera, men API:et är fortfarande under utveckling och kan ändras när som helst. Prenumerera på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ sändlistan mediawiki-api-announce] för uppdateringsaviseringar.\n\n<strong>Felaktiga begäran:</strong> När felaktiga begäran skickas till API:et kommer en HTTP-header skickas med nyckeln \"MediaWiki-API-Error\" och sedan kommer både värdet i headern och felkoden som skickades tillbaka anges som samma värde. För mer information se [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fel och varningar]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testning:</strong> För enkelt testning av API-begäran, se [[Special:ApiSandbox]].</p>",
        "apihelp-main-param-action": "Vilken åtgärd som ska utföras.",
        "apihelp-main-param-format": "Formatet för utdata.",
        "apihelp-main-param-smaxage": "Ange headervärdet <code>s-maxage</code> till så här många sekunder. Fel cachelagras aldrig.",
index ac16032..f13461c 100644 (file)
@@ -49,7 +49,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
        protected $reqHeaders = [];
        protected $url;
        protected $parsedUrl;
-       /** @var callable  */
+       /** @var callable */
        protected $callback;
        protected $maxRedirects = 5;
        protected $followRedirects = false;
@@ -79,7 +79,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
        protected $profileName;
 
        /**
-        * @var LoggerInterface;
+        * @var LoggerInterface
         */
        protected $logger;
 
index 6d4c485..fee7b13 100644 (file)
        "config-help-restart": "Do you want to clear all saved data that you have entered and restart the installation process?",
        "config-restart": "Yes, restart it",
        "config-welcome": "=== Environmental checks ===\nBasic checks will now be performed to see if this environment is suitable for MediaWiki installation.\nRemember to include this information if you seek support on how to complete the installation.",
-       "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but <strong>without any warranty</strong>; without even the implied warranty of <strong>merchantability</strong> or <strong>fitness for a particular purpose</strong>.\nSee the GNU General Public License for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or [http://www.gnu.org/copyleft/gpl.html read it online].",
+       "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but <strong>without any warranty</strong>; without even the implied warranty of <strong>merchantability</strong> or <strong>fitness for a particular purpose</strong>.\nSee the GNU General Public License for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or [https://www.gnu.org/copyleft/gpl.html read it online].",
        "config-sidebar": "* [https://www.mediawiki.org MediaWiki home]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrator's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Read me</doclink>\n* <doclink href=ReleaseNotes>Release notes</doclink>\n* <doclink href=Copying>Copying</doclink>\n* <doclink href=UpgradeDoc>Upgrading</doclink>",
        "config-env-good": "The environment has been checked.\nYou can install MediaWiki.",
        "config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.",
        "config-env-php": "PHP $1 is installed.",
        "config-env-hhvm": "HHVM $1 is installed.",
-       "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.",
-       "config-unicode-pure-php-warning": "<strong>Warning:</strong> The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
+       "config-unicode-using-intl": "Using the [https://pecl.php.net/intl intl PECL extension] for Unicode normalization.",
+       "config-unicode-pure-php-warning": "<strong>Warning:</strong> The [https://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "<strong>Warning:</strong> The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
        "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database {{PLURAL:$2|type is|types are}} supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.",
        "config-outdated-sqlite": "<strong>Warning:</strong> you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.",
        "config-pcre-no-utf8": "<strong>Fatal:</strong> PHP's PCRE module seems to be compiled without PCRE_UTF8 support.\nMediaWiki requires UTF-8 support to function correctly.",
        "config-memory-raised": "PHP's <code>memory_limit</code> is $1, raised to $2.",
        "config-memory-bad": "<strong>Warning:</strong> PHP's <code>memory_limit</code> is $1.\nThis is probably too low.\nThe installation may fail!",
-       "config-xcache": "[http://xcache.lighttpd.net/ XCache] is installed",
+       "config-xcache": "[https://xcache.lighttpd.net/ XCache] is installed",
        "config-apc": "[http://www.php.net/apc APC] is installed",
        "config-apcu": "[http://www.php.net/apcu APCu] is installed",
-       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is installed",
+       "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] is installed",
        "config-no-cache-apcu": "<strong>Warning:</strong> Could not find [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObject caching is not enabled.",
-       "config-mod-security": "<strong>Warning:</strong> Your web server has [http://modsecurity.org/ mod_security]/mod_security2 enabled. Many common configurations of this will cause problems for MediaWiki and other software that allows users to post arbitrary content.\nIf possible, this should be disabled. Otherwise, refer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
+       "config-mod-security": "<strong>Warning:</strong> Your web server has [https://modsecurity.org/ mod_security]/mod_security2 enabled. Many common configurations of this will cause problems for MediaWiki and other software that allows users to post arbitrary content.\nIf possible, this should be disabled. Otherwise, refer to [https://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
        "config-diff3-bad": "GNU diff3 not found.",
        "config-git": "Found the Git version control software: <code>$1</code>.",
        "config-git-bad": "Git version control software not found.",
        "config-license-gfdl": "GNU Free Documentation License 1.3 or later",
        "config-license-pd": "Public Domain",
        "config-license-cc-choose": "Select a custom Creative Commons license",
-       "config-license-help": "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free license].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia previously used the GNU Free Documentation License.\nThe GFDL is a valid license, but it is difficult to understand.\nIt is also difficult to reuse content licensed under the GFDL.",
+       "config-license-help": "Many public wikis put all contributions under a [https://freedomdefined.org/Definition free license].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia previously used the GNU Free Documentation License.\nThe GFDL is a valid license, but it is difficult to understand.\nIt is also difficult to reuse content licensed under the GFDL.",
        "config-email-settings": "Email settings",
        "config-enable-email": "Enable outbound email",
        "config-enable-email-help": "If you want email to work, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] need to be configured correctly.\nIf you do not want any email features, you can disable them here.",
index 2156820..5a996d9 100644 (file)
@@ -32,7 +32,7 @@ class Interwiki {
        /** @var string The URL of the wiki, with "$1" as a placeholder for an article name. */
        protected $mURL;
 
-       /** @var string The URL of the file api.php  */
+       /** @var string The URL of the file api.php */
        protected $mAPI;
 
        /** @var string The name of the database (for a connection to be established
index 3282ae2..053a5ff 100644 (file)
@@ -48,7 +48,7 @@ use Psr\Log\NullLogger;
 class MultiHttpClient implements LoggerAwareInterface {
        /** @var resource */
        protected $multiHandle = null; // curl_multi handle
-       /** @var string|null SSL certificates path  */
+       /** @var string|null SSL certificates path */
        protected $caBundlePath;
        /** @var int */
        protected $connTimeout = 10;
index 894043a..ef7ed5f 100644 (file)
@@ -75,7 +75,7 @@ class IPTC {
                                         * Title, person. Not sure if this is best
                                         * approach since we no longer have the two fields
                                         * separate. each byline title entry corresponds to a
-                                        * specific byline.                          */
+                                        * specific byline. */
 
                                        $bylines = self::convIPTC( $val, $c );
                                        if ( isset( $parsed['2#085'] ) ) {
index 5366c4f..3506684 100644 (file)
@@ -47,13 +47,13 @@ abstract class MediaTransformOutput {
        /** @var bool|string */
        protected $page;
 
-       /** @var bool|string Filesystem path to the thumb  */
+       /** @var bool|string Filesystem path to the thumb */
        protected $path;
 
        /** @var bool|string Language code, false if not set */
        protected $lang;
 
-       /** @var bool|string Permanent storage path  */
+       /** @var bool|string Permanent storage path */
        protected $storagePath = false;
 
        /**
index d0fb92e..56cd20d 100644 (file)
        "right-movefile": "Перайменаваньне файлаў",
        "right-suppressredirect": "Не ствараць перанакіраваньне са старой назвы пасьля пераносу старонкі",
        "right-upload": "Загрузка файлаў",
-       "right-reupload": "пеÑ\80азапÑ\96Ñ\81 Ñ\96Ñ\81нÑ\83Ñ\8eÑ\87ых файлаў",
+       "right-reupload": "Ð\9fеÑ\80азапÑ\96Ñ\81 Ñ\96Ñ\81ных файлаў",
        "right-reupload-own": "перазапіс уласных існуючых файлаў",
        "right-reupload-shared": "перазапіс файлаў з агульнага сховішча лякальнымі",
        "right-upload_by_url": "загрузка файлаў з URL-адрасу",
index b11514d..9b68a28 100644 (file)
@@ -8,7 +8,8 @@
                        "Meno25",
                        "Mogoeilor",
                        "아라",
-                       "Mjbmr"
+                       "Mjbmr",
+                       "Beyronvan"
                ]
        },
        "tog-underline": "لینکهای خط به زیر",
        "recentchanges-label-unpatrolled": "ای ويرايشت هنی تيه واداشت نوابيه",
        "recentchanges-label-plusminus": "أندازإ بألگأ ب شومار اي بایتا آلشد کردإ.",
        "recentchanges-legend-heading": "<strong>میراث:</strong>",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنو سإیل کونين ب[[Special:بألگإیل تازأ|نومگأ بإلگإیل تازأ]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچینو ساٛیل [[Special:بلگٱیل تازٱ|نومگٱ بلگٱیل تازاٛ]]) کونین",
        "rcnotefrom": "ۋازیر {{PLURAL:$5|ۋیرایشد|ۋیرایشدا}}ز ۋیرگار strong>$3, $4</strong> تا ۋیرگار <strong>$1</strong>  دیاری اٛکونن .",
        "rclistfrom": "نشودادن تغییرات تازه با شروع زه $3 $2",
        "rcshowhideminor": "اصلاحات کوچیک $1",
        "rcshowhidemine": "$1 اصلاحات مو",
        "rcshowhidemine-show": "نشون دائن",
        "rcshowhidemine-hide": "قام کئردئن",
-       "rclinks": "Ù\86Ø´Ù\88دادÙ\86 Ø¢Ø®Ø±Û\8cÙ\86 $1 ØªØºÛ\8cÛ\8cر Ø¯Ø± $2 Ø±Ù\88ز Ø§Ø®Û\8cرØ\9b $3",
+       "rclinks": "دÛ\8cار Ú©Ø±Ø¯Ù\86 Ø¢Ø®Ø±Û\8c $1 Ø¢Ù\84شتکارÛ\8c Ù\85اÙ\9bÙ\86 $2 Ú\86اÙ\9bÙ\86 Ø±Û\8aزٱØ\9b $3",
        "diff": "تفاوت",
        "hist": "گزارش",
        "hide": "قایم شدن",
diff --git a/languages/i18n/gcr.json b/languages/i18n/gcr.json
new file mode 100644 (file)
index 0000000..072c516
--- /dev/null
@@ -0,0 +1,625 @@
+{
+       "@metadata": {
+               "authors": [
+                       "LeGuyanaisPure"
+               ]
+       },
+       "sunday": "Dimanch",
+       "monday": "Lendi",
+       "tuesday": "Mardi",
+       "wednesday": "Mèrkrédi",
+       "thursday": "Jédi",
+       "friday": "Vandrédi",
+       "saturday": "Sanmdi",
+       "sun": "Dim.",
+       "mon": "Len.",
+       "tue": "Mar.",
+       "wed": "Mèr.",
+       "thu": "Jé.",
+       "fri": "Van.",
+       "sat": "Sanm.",
+       "january": "Janvyé",
+       "february": "Févriyé",
+       "march": "Mars",
+       "april": "Avril",
+       "may_long": "Mè",
+       "june": "Jen",
+       "july": "Jwiyé",
+       "august": "Out",
+       "september": "Sèptanm",
+       "october": "Òktòb",
+       "november": "Novanm",
+       "december": "Désanm",
+       "january-gen": "Janvyé",
+       "february-gen": "Févriyé",
+       "march-gen": "Mars",
+       "april-gen": "Avril",
+       "may-gen": "Mè",
+       "june-gen": "Jen",
+       "july-gen": "Jwiyé",
+       "august-gen": "Out",
+       "september-gen": "Sèptanm",
+       "october-gen": "Òktòb",
+       "november-gen": "Novanm",
+       "december-gen": "Désanm",
+       "jan": "Jan.",
+       "feb": "Fév.",
+       "mar": "Mar.",
+       "apr": "Avr.",
+       "may": "Mè",
+       "jun": "Jen.",
+       "jul": "Jwi.",
+       "aug": "Out",
+       "sep": "Sèp.",
+       "oct": "Òkt.",
+       "nov": "Nov.",
+       "dec": "Dés.",
+       "pagecategories": "{{PLURAL:$1|Katégori}}",
+       "category_header": "Paj andan katégori-a « $1 »",
+       "subcategories": "Soukatégori",
+       "category-media-header": "Médya andan katégori-a « $1 »",
+       "category-empty": "<em>Sa katégori pa ka kontni atchwèlman pyès paj ni fiché miltimédya.</em>",
+       "hidden-categories": "{{PLURAL:$1|Katégori kaché}}",
+       "category-subcat-count": "Sa katégori {{PLURAL:$2|0=pa ka konprann pyès soukatégori|1=ka konprann sèlman soukatégori ki anba|ka konprann $2 soukatégori, don {{PLURAL:$1|0=pyès|1=sala|$1}} ki anba}}.",
+       "category-article-count": "Sa katégori {{PLURAL:$2|0=pa ka konprann pyès paj|1=ka konprann sèlman paj ki anba|ka konprann $2 paj, don {{PLURAL:$1|0=pyès|1=sala|$1}} ki anba}}.",
+       "category-file-count": "Sa katégori {{PLURAL:$2|0=pa ka konprann pyès katégori|1=ka konprann fiché swivan|ka konprann $2 fiché, don {{PLURAL:$1|0=pyès|1=sala|$1}} ki anba}}.",
+       "listingcontinuesabbrev": "(swit)",
+       "noindex-category": "Paj ki pa endèksé",
+       "broken-file-category": "Paj ké dé lyen di fiché brizé",
+       "about": "À propo",
+       "newwindow": "(Ka ouvri so kò andan roun nouvèl finèt)",
+       "cancel": "Anilé",
+       "mytalk": "Diskisyon",
+       "navigation": "Navigasyon",
+       "and": "&#32;é",
+       "namespaces": "Lèspas di non",
+       "variants": "Varyant",
+       "navigation-heading": "Menu di navigasyon",
+       "returnto": "Rouvini kot paj-a $1.",
+       "tagline": "Di {{SITENAME}}",
+       "help": "Èd",
+       "search": "Sasé",
+       "searchbutton": "Sasé",
+       "searcharticle": "Kontinwé",
+       "history": "Istorik di paj-a",
+       "history_short": "Istorik",
+       "printableversion": "Vèrsyon enprimab",
+       "permalink": "Lyen pèrmanan",
+       "view": "Lir",
+       "view-foreign": "Wè asou $1",
+       "edit": "Modifyé",
+       "create": "Kréyé",
+       "create-local": "Ajouté roun dèskripsyon lokal",
+       "delete": "Souprimé",
+       "newpage": "Nouvèl paj",
+       "talkpagelinktext": "diskisyon",
+       "personaltools": "Zouti pèrsonèl",
+       "talk": "Diskisyon",
+       "views": "Afichaj",
+       "toolbox": "Zouti",
+       "otherlanguages": "Annan rounòt langaj",
+       "redirectedfrom": "(Roudirijé dipi $1)",
+       "redirectpagesub": "Paj di roudirèksyon",
+       "redirectto": "Roudirijé vèr :",
+       "lastmodifiedat": "Dannyé modifikasyon di sa paj té fè asou $1 à $2.",
+       "jumpto": "Alé à",
+       "jumptonavigation": "navigasyon",
+       "jumptosearch": "sasé",
+       "aboutsite": "À propo di {{SITENAME}}",
+       "aboutpage": "Project:À propo di",
+       "copyright": "Kontni-a sa disponib anba lisans $1 sof mansyon kontrèr.",
+       "copyrightpage": "{{ns:project}}:Copyrights",
+       "currentevents": "Atchwalité",
+       "currentevents-url": "Project:Atchwalité",
+       "disclaimers": "Panga",
+       "disclaimerpage": "Project:Panga jénéral",
+       "edithelp": "Èd pou modifikasyon",
+       "mainpage": "Paj Prensipal",
+       "mainpage-description": "Paj prensipal",
+       "portal": "Pòrtay konminotèr",
+       "portal-url": "Project:Pòrtay konminotèr",
+       "privacy": "Politik di konfidansyalité",
+       "privacypage": "Project:Politik di konfidansyalité",
+       "retrievedfrom": "Rékipéré di « $1 »",
+       "youhavenewmessages": "{{PLURAL:$3|Zòt gen}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Zòt gen}} $1 {{PLURAL:$3|di rounòt itilizatò|di $3 ròt itilizatò}} ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|oun nouvèl mésaj|dé nouvèl mésaj}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|dannyé modifikasyon}}",
+       "editsection": "Modifyé",
+       "editold": "modifyé",
+       "viewsourceold": "wè sours-a",
+       "editlink": "modifyé",
+       "viewsourcelink": "wè sours-a",
+       "editsectionhint": "Modifyé sèksyon-an : $1",
+       "toc": "Somèr",
+       "site-atom-feed": "Flux Atom di $1",
+       "page-atom-feed": "Flux Atom di « $1 »",
+       "red-link-title": "$1 (paj pa ka ègzisté)",
+       "nstab-main": "Paj",
+       "nstab-user": "Paj di {{GENDER:{{ROOTPAGENAME}}|itilizatò|itilizatris}}",
+       "nstab-special": "Paj spésyal",
+       "nstab-project": "À propo",
+       "nstab-image": "Fiché",
+       "nstab-mediawiki": "Mésaj",
+       "nstab-template": "Modèl",
+       "nstab-category": "Katégori",
+       "mainpage-nstab": "Paj prensipal",
+       "nosuchspecialpage": "Paj spésyal inègzistant",
+       "nospecialpagetext": "<strong>Zòt doumandé oun paj spésyal ki pa ka ègzisté.</strong>\n\nOun lis dé paj spésyal valid ka trouvé so kò asou [[Special:SpecialPages|{{int:specialpages}}]].",
+       "badtitle": "Movè tit",
+       "badtitletext": "Tit di paj doumandé pa valid, vid, ou mal formé si a roun tit entèr-lanng ou entèr-projè.\nI ka kontni pitèt oun ou plizyò karaktèr ki pa pé sa itilizé andan tit-ya.",
+       "viewsource": "Wè tèks sours",
+       "viewsource-title": "Wè sours-a di $1",
+       "viewsourcetext": "Zòt pé wè é kopyé kontni di sa paj.",
+       "userlogin-yourname": "Non di itilizatò",
+       "userlogin-yourname-ph": "Antré zòt non di itilizatò",
+       "userlogin-yourpassword": "Mo di pas",
+       "userlogin-yourpassword-ph": "Antré zòt mo di pas",
+       "createacct-yourpassword-ph": "Antré oun mo di pas",
+       "createacct-yourpasswordagain": "Konfirmé mo di pas",
+       "createacct-yourpasswordagain-ph": "Antré òkò menm mo di pas",
+       "userlogin-remembermypassword": "Gardé mo sésyon aktiv",
+       "login": "Konèksyon",
+       "userlogin-noaccount": "Zòt pa gen roun kont ?",
+       "userlogin-joinproject": "Roujwenn {{SITENAME}}",
+       "createaccount": "Kréyé roun kont",
+       "userlogin-resetpassword-link": "Zòt bliyé zòt mo di pas ?",
+       "userlogin-helplink2": "Èd pou konèkté so kò",
+       "createacct-emailoptional": "Adrès di kouryé (fakiltativ)",
+       "createacct-email-ph": "Zòt adrès di kouryé",
+       "createacct-submit": "Kréyé zòt kont",
+       "createacct-benefit-heading": "{{SITENAME}} sa ékri pa dé moun kou zòt.",
+       "createacct-benefit-body1": "modifikasyon{{PLURAL:$1|}}",
+       "createacct-benefit-body2": "paj{{PLURAL:$1|}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|kontribitò résant}}",
+       "loginlanguagelabel": "Lanng : $1",
+       "pt-login": "Konèkté so kò",
+       "pt-login-button": "Konèkté so kò",
+       "pt-createaccount": "Kréyé roun kont",
+       "pt-userlogout": "Dékonèkté so kò",
+       "passwordreset": "Réyinisyalizasyon di mo di pas",
+       "bold_sample": "Tèks gra",
+       "bold_tip": "Tèks gra",
+       "italic_sample": "Tèks italik",
+       "italic_tip": "Tèks italik",
+       "link_sample": "Tit di lyen",
+       "link_tip": "Lyen entèrn",
+       "extlink_sample": "http://www.example.com/ tit di lyen",
+       "extlink_tip": "Lyen èkstèrn (pa bliyé préfiks http://)",
+       "headline_sample": "Tèks di tit",
+       "headline_tip": "Soutit nivo 2",
+       "nowiki_sample": "Antré tèks ki pa formaté isi",
+       "nowiki_tip": "Ignoré sentaks wiki-a",
+       "image_tip": "Fiché enséré",
+       "media_tip": "Lyen vèr roun fiché médya",
+       "sig_tip": "Zòt signatir ké dat",
+       "hr_tip": "Lign orizontal (pa an abizé)",
+       "summary": "Rézimé :",
+       "minoredit": "Sa modifikasyon sa minò.",
+       "watchthis": "Swiv sa paj",
+       "savearticle": "Anréjistré",
+       "preview": "Prévizwalizasyon",
+       "showpreview": "Prévizwalizé",
+       "showdiff": "Wè modifikasyon-yan",
+       "anoneditwarning": "<strong>Panga :</strong> zòt pa konèkté. Zòt adrès IP ké sa vizib di tout moun si zòt ka fè dé modifikasyon. Si zòt <strong>[$1 ka konèkté zòt kò]</strong> ou <strong>[$2 kréyé roun kont]</strong>, zòt modifikasyon ké sq atribwé à zòt pròp non di itilizatò(ris) é zòt ké gen dé ròt avantaj.",
+       "blockedtext": "<strong>Zòt kont itilizatò ou zòt adrès IP bloké.</strong>\n\nBlokaj té éfèktchwé pa $1.\nRézon-an évoké sa swivant : <em>$2</em>.\n\n* Koumansman di blokaj : $8\n* Èkspirasyon di blokaj : $6\n* Kont bloké : $7.\n\nZòt pé kontakté $1 ou rounòt [[{{MediaWiki:Grouppage-sysop}}|administratò]] pou an diskité.\nZòt pa pé itilizé fonksyon-an « {{int:emailuser}} » sèlman si oun adrès di kouryé valid sa spésifyé andan zòt [[Special:Preferences|préférans]] é sèlman si sa fonksyonalité pa bloké.\nZòt adrèd IP atchwèl sa $3 é zòt idantifyan di blokaj sa $5.\nSouplé, enkli tout détay-ya lasou'l annan chakin dé rékèt ki zòt ké fè.",
+       "loginreqlink": "konèkté so kò",
+       "newarticletext": "Zòt té ka swiv roun lyen vèr roun paj ki pa ka ègzisté òkò. \nAtò di kréyé sa paj, antré zòt tèks annan bwat ki aprè (zòt pé konsilté [$1 paj d'èd-a] pou plis enfòrmasyon).\nSi zòt pa rivé{{GENDER:|}} isi pa éròr, kliké asou bouton <strong>Routour</strong> di zòt navigatò.",
+       "anontalkpagetext": "----\n<em>Zòt asou paj di diskisyon di oun itilizatò anonim ki pa òkò kréyé di kont ou ki pa ka an itilizé</em>.\nPou sa rézon, nou divèt itilizé so adrès IP pou idantifyé li.\nOun adrès IP pé sa partajé pa plizyò itilizatò.\nSi zòt roun itiliza{{GENDER:|ò|ris}} anonim é si zòt ka kontasté ki dé koumantèr ki pa ka konsèrné zòt sa adrèsé à zòt, zòt pé [[Special:CreateAccount|kréyé roun kont]] ou [[Special:UserLogin|konèkté zòt kò]] atò di évité tout konfizyon fitir ké ròt kontribitò anonim.",
+       "noarticletext": "I pa gen pou moman-an pyès tèks asou sa paj.\nZòt pé [[Special:Search/{{PAGENAME}}|lansé oun sasé asou sa tit]] annan ròt paj-ya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sasé annan opérasyon-yan lyé]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} kréyé sa paj]</span>.",
+       "noarticletext-nopermission": "I pa gen pou moman-an pyès tèks asou sa paj.\nZòt pé [[Special:Search/{{PAGENAME}}|fè roun sasé asou sa tit]] andan ròt paj-ya,\nou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|paj={{FULLPAGENAMEE}}}} sasé andan journal asosyé]</span>, mè zòt pa gen pèrmisyon di kréyé sa paj.",
+       "userpage-userdoesnotexist-view": "Kont itilizatò-a « $1 » pa anréjistré.",
+       "clearyourcache": "<strong>Nòt :</strong> aprè zòt anréjistré zòt modifikasyon, zòt divèt forsé roucharjman konplè di kach di zòt navigatò pou wè chanjman-yan.\n* <strong>Firefox / Safari :</strong> mentné touch-a <em>Maj</em> (<em>Shift</em>) an klikan asou bouton-an <em>Atchwalizé</em> ou présé <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> asou roun Mac) \n* <strong>Google Chrome :</strong> apwiyé asou <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> asou roun Mac) \n* <strong>Internet Explorer :</strong> mentné touch-a <em>Ctrl</em> an klikan asou bouton-an <em>Atchwalizé</em> ou présé <em>Ctrl-F5</em> \n* <strong>Opera :</strong> alé annan <em>Menu → Settings</em> (<em>Opera → Préférences</em> asou roun Mac) é answit à <em>Konfidansyalité & sékrité → Éfasé doné d'èksplorasyon-yan → Imaj ké fiché an kach</em>.",
+       "previewnote": "<strong>Raplé-zòt ki a jis roun prévizwalizasyon.</strong>\nZòt modifikasyon pa òkò anréjistré !",
+       "continue-editing": "Alé kot zonn di modifikasyon",
+       "editing": "Modifikasyon di $1",
+       "creating": "Kréyasyon di $1",
+       "editingsection": "Modifikasyon di $1 (sèksyon)",
+       "templatesused": "{{PLURAL:$1|Modèl itilizé}} pa sa paj :",
+       "templatesusedpreview": "{{PLURAL:$1|Modèl itilizé}} annan sa prévizwalizasyon :",
+       "template-protected": "(protéjé)",
+       "template-semiprotected": "(sémi-protéjé)",
+       "hiddencategories": "{{PLURAL:$1|Katégori kaché}} don sa paj ka fè parti :",
+       "permissionserrors": "Éròr di pèrmisyon",
+       "permissionserrorstext-withaction": "Zòt pa pé $2, pou {{PLURAL:$1|rézon swivant}} :",
+       "recreate-moveddeleted-warn": "<strong>Panga : zòt ka roukréyé oun paj ki té présédaman souprimé.</strong>\n\nAsouré-zòt ki li sa pertinan di pourswiv modifikasyon-yan asou sa paj.\nJournal dé souprésyon é dé déplasman pou sa paj sa afiché anba à tit di enfòrmasyon :",
+       "moveddeleted-notice": "Sa paj té souprimé. \nJournal dé souprésyon, dé protèksyon é dé déplasman di paj-a sa afiché anba pou référans.",
+       "content-model-wikitext": "wikitèks",
+       "undo-failure": "Sa modifikasyon pa pé défèt : sala ké antré an konfli ké modifikasyon-yan entèrmédyèr.",
+       "viewpagelogs": "Wè opérasyon-yan asou sa paj",
+       "currentrev-asof": "Vèrsyon atchwèl daté di $1",
+       "revisionasof": "Vèrsyon di $1",
+       "revision-info": "Révizyon daté di $1 pa {{GENDER:$6|$2}}$7",
+       "previousrevision": "← Vèrsyon présédant",
+       "nextrevision": "Vèrsyon swivant →",
+       "currentrevisionlink": "Wè vèrsyon atchwèl-a",
+       "cur": "atch",
+       "last": "dif",
+       "histlegend": "Sélèksyon di dif : koché bouton radyo-ya dé vèrsyon à konparé é apwiyé asou antré ou asou bouton an ba.<br />\nLéjann : <strong>({{int:cur}})</strong> = diférans ké dannyé vèrsyon-an, <strong>({{int:last}})</strong> = diférans ké vèrsyon présédant, <strong>{{int:minoreditletter}}</strong> = modifikasyon minò.",
+       "history-fieldset-title": "Sasé dé révizyon",
+       "histfirst": "Pli ansyenn",
+       "histlast": "Pli résant",
+       "history-feed-title": "Istorik dé vèrsyon",
+       "history-feed-description": "Istorik dé vèrsyon pou sa paj asou wiki",
+       "history-feed-item-nocomment": "$1 à $2",
+       "rev-delundel": "afiché/maské",
+       "mergelog": "Journal dé fizyon",
+       "history-title": "$1 : Istorik é vèrsyon",
+       "difference-title": "$1 : Diférans ant vèrsyon",
+       "lineno": "Lign $1 :",
+       "compareselectedversions": "Konparé vèrsyon-yan sélèksyoné",
+       "editundo": "anilé",
+       "diff-empty": "(Pyès diférans)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Oun révizyon entermédyèr pa menm itilizatò pa afiché|$1}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Oun révizyon entèrmédyèr|$1}} pa {{PLURAL:$2|rounòt itilizatò|$2}} pa {{PLURAL:$1|afiché|}})",
+       "searchresults": "Rézilta di sasé",
+       "searchresults-title": "Rézilta di sasé pou « $1 »",
+       "prevn": "{{PLURAL:$1|présédant|$1}}",
+       "nextn": "{{PLURAL:$1|swivant|$1}}",
+       "prevn-title": "$1 {{PLURAL:$1|rézilta présédan|}}",
+       "nextn-title": "$1 {{PLURAL:$1|rézilta swivan}}",
+       "shown-title": "Afiché $1 rézilta{{PLURAL:$1|}} pa paj",
+       "viewprevnext": "Wè ($1 {{int:pipe-separator}} $2) ($3).",
+       "searchmenu-exists": "<strong>I ka ègzisté oun paj nonmen « [[:$1]] » asou sa wiki.</strong> {{PLURAL:$2|0=|Wè égalman ròt rézilta di zòt sasé.}}",
+       "searchmenu-new": "<strong>Kréyé paj-a « [[:$1|$1]] » asou sa wiki !</strong> {{PLURAL:$2|0=Wè égalman paj trouvé ké zòt sasé.|Wè égalman rézilta di zòt sasé.}}",
+       "searchprofile-articles": "Paj di kontni",
+       "searchprofile-images": "Miltimédya",
+       "searchprofile-everything": "Tout",
+       "searchprofile-advanced": "Sasé vansé",
+       "searchprofile-articles-tooltip": "Sasé andan $1",
+       "searchprofile-images-tooltip": "Sasé dé fiché miltimédya",
+       "searchprofile-everything-tooltip": "Sasé annan tout sit-a (osi annan paj di diskisyon-yan)",
+       "searchprofile-advanced-tooltip": "Sasé annan lèspas di non pèrsonalizé",
+       "search-result-size": "$1 ({{PLURAL:$2|1 mo|$2}})",
+       "search-result-category-size": "$1 manm{{PLURAL:$1|}} ($2 soukatégori{{PLURAL:$2|}}, $3 fiché{{PLURAL:$3|}})",
+       "search-redirect": "(Roudirèksyon dipi $1)",
+       "search-section": "(sèksyon $1)",
+       "search-file-match": "(ka korèsponn o kontni di fiché)",
+       "search-suggest": "Éséyé ké sa òrtograf : $1",
+       "searchall": "tout",
+       "search-showingresults": "{{PLURAL:$4|Rézilta <strong>$1</strong> parmi <strong>$3</strong>|Rézilta <strong>$1 à $2</strong> parmi <strong>$3</strong>}}",
+       "search-nonefound": "I pa gen pyès rézilta ki ka koresponn à rékèt-a.",
+       "mypreferences": "Préférans",
+       "group-bot": "Robo",
+       "group-sysop": "Administratò",
+       "grouppage-bot": "{{ns:project}}:Robo",
+       "grouppage-sysop": "{{ns:project}}:Administratò",
+       "right-writeapi": "Itilizé API di modifikasyon di wiki",
+       "newuserlogpage": "Journal dé kréyasyon di kont itilizatò",
+       "rightslog": "Journal dé modifikasyon di drwè di itilizatò",
+       "action-edit": "modifyé sa paj",
+       "action-createaccount": "kréyé sa kont itilizatò",
+       "enhancedrc-history": "istorik",
+       "recentchanges": "Modifikasyon résant",
+       "recentchanges-legend": "Lòpsyon dé modifikasyon résant",
+       "recentchanges-summary": "Swiv chanjman-yan pli résan wiki asou sa paj.",
+       "recentchanges-noresult": "Pyès modifikasyon ka korèsponn à sa kritèr asou péryòd endiké.",
+       "recentchanges-feed-description": "Swivé dannyé modifikasyon-yan di wiki andan sa flux.",
+       "recentchanges-label-newpage": "Sa modifikasyon té kréyé roun nouvèl paj",
+       "recentchanges-label-minor": "Sa modifikasyon sa minò.",
+       "recentchanges-label-bot": "Sa modifikasyon té éfèktchwé pa roun robo.",
+       "recentchanges-label-unpatrolled": "Sa modifikasyon pa té òkò réli.",
+       "recentchanges-label-plusminus": "Tay di paj-a chanjé di sa nonm d'oktè.",
+       "recentchanges-legend-heading": "<strong>Léjann :</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (wè osi [[Special:NewPages|lis dé nouvèl paj]]).",
+       "rcnotefrom": "Anba {{PLURAL:$5|modifikasyon éfèktchwé}} dipi <strong>$3, $4</strong> (afiché jouk à <strong>$1</strong>).",
+       "rclistfrom": "Afiché nouvèl modifikasyon-yan dipi $3, $2",
+       "rcshowhideminor": "$1 modifikasyon minò",
+       "rcshowhideminor-show": "Afiché",
+       "rcshowhideminor-hide": "Maské",
+       "rcshowhidebots": "$1 robo-ya",
+       "rcshowhidebots-show": "Afiché",
+       "rcshowhidebots-hide": "Maské",
+       "rcshowhideliu": "$1 itilizatò anréjistré",
+       "rcshowhideliu-show": "Afiché",
+       "rcshowhideliu-hide": "Maské",
+       "rcshowhideanons": "$1 itilizatò anonim-ya",
+       "rcshowhideanons-show": "Afiché",
+       "rcshowhideanons-hide": "Maské",
+       "rcshowhidepatr": "$1 modifikasyon sirvéyé",
+       "rcshowhidemine": "$1 mo modifikasyon-yan",
+       "rcshowhidemine-show": "Afiché",
+       "rcshowhidemine-hide": "Maské",
+       "rclinks": "Afiché $1 dannyé modifikasyon éfèktchwé o kour dé $2 dannyé jou.",
+       "diff": "dif",
+       "hist": "ist",
+       "hide": "Maské",
+       "show": "Afiché",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "rc-change-size-new": "$1 {{PLURAL:$1|oktè}} aprè chanjman",
+       "rc-old-title": "kréyé inisyalman ké tit « $1 »",
+       "recentchangeslinked": "Swivi dé paj lyé",
+       "recentchangeslinked-feed": "Swivi dé paj lyé",
+       "recentchangeslinked-toolbox": "Swivi dé paj lyé",
+       "recentchangeslinked-title": "Swivi dé paj asosyé à « $1 »",
+       "recentchangeslinked-summary": "Antré roun non di paj pou wè modifikasyon-yan ki fè résaman asou dé paj lyé dipi ou vèr sa paj (pou wè manm-yan di oun katégori, antré Katégori:Non di katégori). Modifikasyon-yan dé paj di [[Special:Watchlist|zòt lis di swivi]] sa <strong>an gra</strong>.",
+       "recentchangeslinked-page": "Non di paj :",
+       "recentchangeslinked-to": "Afiché modifikasyon-yan dé paj ki ka konpòrté roun lyen vèr paj ki bay plito ki envèrs",
+       "upload": "Enpòrté roun fiché",
+       "uploadlogpage": "Journal di enpo di fiché",
+       "filedesc": "Dèskripsyon",
+       "license": "Lisans",
+       "license-header": "Kondisyon di itilizasyon",
+       "imgfile": "fiché",
+       "listfiles": "Lis di fiché",
+       "file-anchor-link": "Fiché",
+       "filehist": "Istorik di fiché",
+       "filehist-help": "Kliké asou roun dat ké lò pou wè fiché-a tèl ki li té yé à sa moman.",
+       "filehist-revert": "rétablir",
+       "filehist-current": "atchwèl",
+       "filehist-datetime": "Dat ké lò",
+       "filehist-thumb": "Vignèt",
+       "filehist-thumbtext": "Vignèt pou vèrsyon-an di $1",
+       "filehist-nothumb": "Pyès minyatir",
+       "filehist-user": "Itilizatò",
+       "filehist-dimensions": "Dimansyon",
+       "filehist-comment": "Koumantèr",
+       "imagelinks": "Itilizasyon di fiché",
+       "linkstoimage": "{{PLURAL:$1|Paj swivant ka itilizé}} sa fiché :",
+       "linkstoimage-more": "Plis {{PLURAL:$1|di roun paj ka itilizé|di $1 paj ka itilizé}} sa fiché.\nLis swivant ka afiché sèlman {{PLURAL:$1|pronmyé paj-a ki ka itilizé|$1 pronmyé paj-ya ki ka itilizé}} sa fiché.\nOun [[Special:WhatLinksHere/$2|lis konplèt]] sa disponib.",
+       "nolinkstoimage": "Pyès paj pa ka itilizé sa fiché.",
+       "linkstoimage-redirect": "$1 (roudirèksyon di fiché) $2",
+       "sharedupload-desc-here": "Sa fiché ka provini di $1. Li pé sa itilizé pa dé ròt projè.\nSo dèskripsyon asou so [$2 paj di dèskripsyon] sa afiché anba.",
+       "filepage-nofile": "Pyès fiché di sa non ka ègzisté.",
+       "upload-disallowed-here": "Zòt pa pé ranplasé sa fiché.",
+       "randompage": "Paj o azar",
+       "statistics": "Statistik",
+       "double-redirect-fixer": "Korèktò di roudirèksyon",
+       "nbytes": "$1 {{PLURAL:$1|òktè}}",
+       "nmembers": "$1 manm{{PLURAL:$1|}}",
+       "prefixindex": "Tout paj ki ka koumansé pa...",
+       "listusers": "Lis dé itilizatò",
+       "newpages": "Nouvèl paj",
+       "move": "Rounonmen",
+       "pager-newer-n": "{{PLURAL:$1|1 pli résant|$1}}",
+       "pager-older-n": "{{PLURAL:$1|1 pli ansyenn|$1}}",
+       "booksources": "Ouvraj di référans",
+       "booksources-search-legend": "Sasé parmi dé ouvraj di référans",
+       "booksources-search": "Sasé",
+       "specialloguserlabel": "Otò :",
+       "speciallogtitlelabel": "Sib (tit ou {{ns:user}}:non di itilizatò) :",
+       "log": "Journal d’opérasyon",
+       "all-logs-page": "Tout journal piblik",
+       "alllogstext": "Afichaj konbiné di tout journal disponib asou {{SITENAME}}.\nZòt pé pèrsobalizé afichaj an sélèksyonan tip di journal, non di itilizatò ou paj-a konserné (sa dé dannyé sa sansib à lakas).",
+       "logempty": "Pyès opérasyon korèspondant andan journal-ya.",
+       "allpages": "Tout paj-ya",
+       "allarticles": "Tout paj-ya",
+       "allpagessubmit": "Listé",
+       "allpages-hide-redirects": "Maské roudirèksyon-yan",
+       "categories": "Lis dé katégori",
+       "listgrouprights-members": "(lis dé manm)",
+       "emailuser": "Voyé li roun kouryé",
+       "usermessage-editor": "Mésajé di sistèm",
+       "watchlist": "Lis di swivi",
+       "mywatchlist": "Lis di swivi",
+       "watchlistfor2": "Pou $1 $2",
+       "watch": "Swiv",
+       "unwatch": "Pli swiv òkò",
+       "watchlist-details": "{{PLURAL:$1|$1 paj sa|$1}} annan zòt lis di swivi (plis paj-ya di diskisyon).",
+       "wlheader-showupdated": "Paj-ya ki modifyé dipi zòt dannyé vizit sa afiché an <strong>gra</strong>.",
+       "wlnote": "Anba {{PLURAL:$1|figir dannyé modifikasyon-an éfèktchwé|figir <strong>$1</strong> dannyé modifikasyon-yan éfèktchwé}} douran {{PLURAL:$2|dannyé lò| <strong>$2</strong>}}, jouk o $3, $4.",
+       "wlshowlast": "Montré dannyé $1 lò, dannyé $2 jou",
+       "watchlist-options": "Opsyon di lis di swivi",
+       "enotif_reset": "Marké tout paj-ya kou vizité",
+       "dellogpage": "Journal dé souprésyon",
+       "rollbacklink": "révoké",
+       "rollbacklinkcount": "révoké $1 {{PLURAL:$1|modifikasyon}}",
+       "protectlogpage": "Journal dé protèksyon",
+       "protectedarticle": "protéjé « [[$1]] »",
+       "modifiedarticleprotection": "modifyé nivo di protèksyon di « [[$1]] »",
+       "protect-default": "Otorizé tout itilizatò-ya",
+       "restriction-edit": "Modifyé",
+       "restriction-move": "Rounonmen",
+       "namespace": "Lèspas di non",
+       "invert": "Envèrsé sélèksyon-an",
+       "tooltip-invert": "Koché sa kaz pou kaché modifikasyon-yan dé paj annan lèspas di non sélèksyoné (ké lèspas di non asosyé si koché)",
+       "namespace_association": "Lèspas di non asosyé",
+       "tooltip-namespace_association": "Koché sa kaz pou enklir égalman lèspas di non di diskisyon ou di sijè, asosyé à lèspas di non sélèksyoné",
+       "blanknamespace": "(Prensipal)",
+       "contributions": "Kontribisyon di {{GENDER:$1|itilizatò|itilizatris}}",
+       "contributions-title": "Lis kontribisyon-yan di itiliza{{GENDER:$1|ò|ris}} $1",
+       "mycontris": "Kontribisyon",
+       "anoncontribs": "Kontribisyon",
+       "contribsub2": "Pou {{GENDER:$3|$1}} ($2)",
+       "nocontribs": "Pyès modifikasyon korèspondan à sa kritèr trouvé.",
+       "uctop": "(atchwèl)",
+       "month": "À partir di mwa (é présédan) :",
+       "year": "À partir di lannen (é présédant) :",
+       "sp-contributions-newbies": "Montré ren ki kontribisyon-yan dé nouvèl itilizatò",
+       "sp-contributions-blocklog": "journal dé blokaj",
+       "sp-contributions-uploads": "enpòr",
+       "sp-contributions-logs": "journal",
+       "sp-contributions-talk": "diskité",
+       "sp-contributions-search": "Sasé kontribisyon-yan",
+       "sp-contributions-username": "Adrès IP ou non di itilizatò :",
+       "sp-contributions-toponly": "Montré ki kontribisyon-yan ki sa dannyé-ya dé artik",
+       "sp-contributions-newonly": "Afiché inikman modifikasyon-yan ki sa dé kréyasyon di paj",
+       "sp-contributions-submit": "Sasé",
+       "whatlinkshere": "Paj lyé",
+       "whatlinkshere-title": "Paj ki ka pwenté vèr « $1 »",
+       "whatlinkshere-page": "Paj :",
+       "linkshere": "Paj-ya ki anba ka kontni roun lyen vèr <strong>[[:$1]]</strong> :",
+       "nolinkshere": "Pyès paj pa gen kontni dé lyen vèr <strong>[[:$1]]</strong>.",
+       "isredirect": "paj di roudirèksyon",
+       "istemplate": "enklizyon",
+       "isimage": "Lyen vèr fiché-a",
+       "whatlinkshere-prev": "{{PLURAL:$1|présédant|$1 présédant}}",
+       "whatlinkshere-next": "{{PLURAL:$1|swivant|$1 swivant}}",
+       "whatlinkshere-links": "lyen",
+       "whatlinkshere-hideredirs": "$1 roudirèksyon-yan",
+       "whatlinkshere-hidetrans": "$1 enklizyon-yan",
+       "whatlinkshere-hidelinks": "$1 lyen-yan",
+       "whatlinkshere-hideimages": "$1 lyen vèr fiché-a",
+       "whatlinkshere-filters": "Filt",
+       "ipboptions": "2 lò:2 hours,1 jou:1 day,3 jou:3 days,1 simenn:1 week,2 simenn:2 weeks,1 mwa:1 month,3 mwa:3 months,6 mwa:6 months,1 lan:1 year,endéfiniman:infinite",
+       "infiniteblock": "enfini",
+       "blocklink": "bloké",
+       "contribslink": "kontribisyon",
+       "blocklogpage": "Journal dé blokaj",
+       "blocklogentry": "bloké [[$1]] ; èkspirasyon : $2 $3",
+       "reblock-logentry": "modifyé paramèt di blokaj di [[$1]] ké roun èkspirasyon pou $2 $3",
+       "block-log-flags-nocreate": "kréyasyon di kont entèrdit",
+       "proxyblocker": "Blokò di mandatèr",
+       "movelogpage": "Journal dé rounonmaj",
+       "export": "Èkspòrté dé paj",
+       "thumbnail-more": "Agrandir",
+       "importlogpage": "Journal dé enpòrtasyon",
+       "tooltip-pt-userpage": "Zòt paj di {{GENDER:|itilizatò|itilizatris}}",
+       "tooltip-pt-mytalk": "Zòt paj di diskisyon",
+       "tooltip-pt-preferences": "{{GENDER:|Zòt}} préférans",
+       "tooltip-pt-watchlist": "Oun lis dé paj don zòt ka swiv modifikasyon",
+       "tooltip-pt-mycontris": "Oun lis di {{GENDER:|zòt}} kontribisyon",
+       "tooltip-pt-login": "Nou ka ankourajé zòt à konèkté zòt kò ; soupannan, i pa obligatwar",
+       "tooltip-pt-logout": "Dékonèkté so kò",
+       "tooltip-pt-createaccount": "Nou ka ankourajé zòt à kréyé roun kont itilizatò é konèkté zòt kò ; soupannan, i pa obligatwar",
+       "tooltip-ca-talk": "Diskisyon o sijè di sa paj di kontni",
+       "tooltip-ca-edit": "Modifyé wikikod-a",
+       "tooltip-ca-addsection": "Koumansé roun nouvèl sèksyon",
+       "tooltip-ca-viewsource": "Sa paj sa protéjé.\nZòt pé toutfwè vizwalizé sours-a.",
+       "tooltip-ca-history": "Istorik vèrsyon-yan di sa paj",
+       "tooltip-ca-protect": "Protéjé sa paj",
+       "tooltip-ca-delete": "Souprimé sa paj",
+       "tooltip-ca-move": "Rounonmen sa paj",
+       "tooltip-ca-watch": "Ajouté sa paj annan zòt lis di swivi",
+       "tooltip-ca-unwatch": "Routiré sa paj di zòt lis di swivi",
+       "tooltip-search": "Sasé andan {{SITENAME}}",
+       "tooltip-search-go": "Aksédé à roun paj di menm non si li ka ègzisté",
+       "tooltip-search-fulltext": "Sasé paj-ya ka konpòrté sa tèks.",
+       "tooltip-p-logo": "Vizité paj prensipal-a",
+       "tooltip-n-mainpage": "Vizité paj prensipal-a di sit",
+       "tooltip-n-mainpage-description": "Paj prensipal jénéral",
+       "tooltip-n-portal": "À propo di projè, sa ki zòt pé fè, koté trouvé enfòrmasyon-yan",
+       "tooltip-n-currentevents": "Trouvé plis d'enfòrmasyon asou atchwalité an kour",
+       "tooltip-n-recentchanges": "Lis di modifikasyon résant asou wiki-a",
+       "tooltip-n-randompage": "Afiché roun paj o azar",
+       "tooltip-n-help": "Aksè à lèd",
+       "tooltip-t-whatlinkshere": "Lis di paj liyé ki ka pwenté asou sala",
+       "tooltip-t-recentchangeslinked": "Lis di modifikasyon résant liyé à sa paj",
+       "tooltip-feed-atom": "Flux Atom pou sa paj",
+       "tooltip-t-contributions": "Wè lis dé kontribisyon di {{GENDER:$1|sa itilizatò|sa itilizatris}}",
+       "tooltip-t-emailuser": "Voyé roun kouryé à {{GENDER:$1|sa itilizatò|sa itilizatris}}",
+       "tooltip-t-upload": "Télévèrsé dé fiché",
+       "tooltip-t-specialpages": "Lis di tout paj spésyal",
+       "tooltip-t-print": "Vèrsyon enprimab di sa paj",
+       "tooltip-t-permalink": "Adrès pèrmanant di sa vèrsyon di paj-a",
+       "tooltip-ca-nstab-main": "Wè kontni di paj-a",
+       "tooltip-ca-nstab-user": "Wè paj di itilizatò",
+       "tooltip-ca-nstab-special": "A roun paj spésyal, é li pa pé sa modifyé.",
+       "tooltip-ca-nstab-project": "Wè paj-a di projè",
+       "tooltip-ca-nstab-image": "Wè paj-a di fiché",
+       "tooltip-ca-nstab-mediawiki": "Wè mésaj sistèm-a",
+       "tooltip-ca-nstab-template": "Wè modèl-a",
+       "tooltip-ca-nstab-category": "Wè paj-a di katégori-a",
+       "tooltip-minoredit": "Marké sala kou modifikasyon minò",
+       "tooltip-save": "Anréjistré zòt modifikasyon",
+       "tooltip-preview": "Mési di prévizwalizé zòt modifikasyon anvan di pibliyé yé.",
+       "tooltip-diff": "Afiché modifikasyon-yan ki zòt apòrté andan tèks-a.",
+       "tooltip-compareselectedversions": "Afiché diférans-ya ant dé vèrsyon-yan sélèksyoné di sa paj",
+       "tooltip-watch": "Ajouté sa paj annan zòt lis di swivi",
+       "tooltip-rollback": "« Révoké » ka anilé an roun klik modifikasyon(-an ou yan) di sa paj réyalizé pa so dannyé kontribitò",
+       "tooltip-undo": "« Anilé » ka rétabli modifikasyon présédant é ka ouvri lafinèt di modifikasyon an mòd prévizwalizasyon. I posib di ajouté roun rézon annan rézimé-a.",
+       "tooltip-summary": "Antré roun brèf rézimé",
+       "simpleantispam-label": "Vérifikasyon anti-pouryèl.\nPa <strong>enskri</strong> anyen isi !",
+       "pageinfo-title": "Enfòrmasyon pou « $1 »",
+       "pageinfo-header-basic": "Enfòrmasyon di baz",
+       "pageinfo-header-edits": "Istorik dé modifikasyon",
+       "pageinfo-header-restrictions": "Protèksyon di paj-a",
+       "pageinfo-header-properties": "Propriyété di paj-a",
+       "pageinfo-display-title": "Tit afiché",
+       "pageinfo-default-sort": "Klé di tri pa défo",
+       "pageinfo-length": "Tay di paj-a (an òktè)",
+       "pageinfo-article-id": "Niméro di paj-a",
+       "pageinfo-language": "Langaj di kontni di paj-a",
+       "pageinfo-content-model": "Modèl di kontni di paj-a",
+       "pageinfo-robot-policy": "Endèksasyon pa robo",
+       "pageinfo-robot-index": "Otorizé",
+       "pageinfo-robot-noindex": "Pa otorizé",
+       "pageinfo-watchers": "Nonm di kontribitò ki gen paj andan yé lis di swivi",
+       "pageinfo-few-watchers": "Mwens di $1 {{PLURAL:$1|obsèrvatò}}",
+       "pageinfo-redirects-name": "Nonm di roudirèksyon vèr sa paj",
+       "pageinfo-subpages-name": "Nonm di soupaj di sa paj",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|roudirèksyon}}; $3 {{PLURAL:$3|pa-roudirèksyon}})",
+       "pageinfo-firstuser": "Kréyatò di paj-a",
+       "pageinfo-firsttime": "Dat di kréyasyon di paj-a",
+       "pageinfo-lastuser": "Dannyé kontribitò",
+       "pageinfo-lasttime": "Dat di dannyé modifikasyon",
+       "pageinfo-edits": "Nonm total di modifikasyon",
+       "pageinfo-authors": "Nonm total di otò distenk",
+       "pageinfo-recent-edits": "Nonm di modifikasyon résant (annan dannyé $1)",
+       "pageinfo-recent-authors": "Nonm di otò distenk résant",
+       "pageinfo-magic-words": "{{PLURAL:$1|Mo majik}} ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Katégori kaché|}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Modèl enkli}} ($1)",
+       "pageinfo-toolboxlink": "Enfòrmasyon asou paj-a",
+       "pageinfo-contentpage": "Konté kou paj di kontni",
+       "pageinfo-contentpage-yes": "Wi",
+       "patrol-log-page": "Journal dé roulèktir",
+       "previousdiff": "← Modifikasyon présédant",
+       "nextdiff": "Modifikasyon swivant →",
+       "widthheightpage": "$1 × $2, $3 paj{{PLURAL:$3|}}",
+       "file-info-size": "$1 × $2 piksèl, tay di fiché : $3, tip MIME : $4",
+       "file-info-size-pages": "$1 × $2 piksèl ; tay di fiché : $3 ; tip MIME : $4 ; $5 paj{{PLURAL:$5|}}",
+       "file-nohires": "Pa di pli rot rézolisyon disponib.",
+       "svg-long-desc": "Fiché SVG, rézolisyon di $1 × $2 piksèl, tay : $3",
+       "show-big-image": "Fiché d’orijin",
+       "show-big-image-preview": "Tay di sa apèrsou : $1.",
+       "show-big-image-other": "{{PLURAL:$2|Ròt rézolisyon}} : $1.",
+       "show-big-image-size": "$1 × $2 piksèl",
+       "metadata": "Métadoné",
+       "metadata-help": "Sa fiché ka kontni dé enfòrmasyon siplémantèr, probabman ajouté pa aparèy foto nimèrik ou nimérizò itilizé pou kréyé. \nSi fiché té modifyé dipi so léta orijinal, serten détay pa pé rouflété antyèrman imaj modifyé-a.",
+       "metadata-fields": "Chan di métadoné d'imaj listé andan sa mésaj ké sa enkli andan paj di dèskripsyon di imaj-a lò tab-a di métadoné ké sa rédjwit. Ròt chan ké sa kaché pa défo.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Oryantasyon",
+       "exif-xresolution": "Rézolisyon orizontal",
+       "exif-yresolution": "Rézolisyon vèrtikal",
+       "exif-datetime": "Dat di modifikasyon di fiché",
+       "exif-make": "Fèzò di aparèy foto",
+       "exif-model": "Modèl di aparèy foto",
+       "exif-software": "Lojisyèl itilizé",
+       "exif-exifversion": "Vèrsyon EXIF",
+       "exif-colorspace": "Lèspas kolorimétrik",
+       "exif-datetimeoriginal": "Dat di pran orijinèl",
+       "exif-datetimedigitized": "Dat di nimérizasyon-an",
+       "exif-orientation-1": "Nòrmal",
+       "namespacesall": "tout",
+       "monthsall": "tout",
+       "imgmultipagenext": "paj swivant →",
+       "imgmultigo": "Aksédé !",
+       "imgmultigoto": "Alé koté paj $1",
+       "watchlisttools-clear": "Éfasé lis di swivi",
+       "watchlisttools-view": "Wè chanjman-yan korèspondan",
+       "watchlisttools-edit": "Wè é modifyé lis di swivi",
+       "watchlisttools-raw": "Modifyé lis di swivi an mòd brout",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskisyon]])",
+       "redirect": "Roudirijé pa ID di fiché, itilizatò, paj, révizyon ou journal",
+       "redirect-summary": "Sa paj spésyal ka roudirijé vèr roun fiché (non di fiché fourni), oun paj (ID di révizyon ou di paj fourni), oun paj di itilizatò (idantifyan nimérik di itilizatò fourni), ou roun antré di journal (ID di journal fourni). Itilizasyon : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-submit": "Validé",
+       "redirect-lookup": "Sasé :",
+       "redirect-value": "Valò :",
+       "redirect-user": "ID di itilizatò",
+       "redirect-page": "ID di paj",
+       "redirect-revision": "Révizyon di paj-a",
+       "redirect-file": "Non di fiché",
+       "specialpages": "Paj spésyal",
+       "tag-filter": "Filtré [[Special:Tags|baliz]] :",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Baliz}}]] : $2)",
+       "tags-active-yes": "Wi",
+       "tags-active-no": "Awa",
+       "tags-hitcount": "$1 modifikasyon{{PLURAL:$1|}}",
+       "logentry-delete-delete": "$1 souprimé paj-a $3",
+       "logentry-delete-restore": "$1 rèstoré paj-a $3 ($4)",
+       "logentry-delete-revision": "$1 {{GENDER:$2|modifyé}} vizibilité {{PLURAL:$5|di oun révizyon|di $5 révizyon}} asou paj $3 : $4",
+       "revdelete-content-hid": "kontni maské",
+       "logentry-move-move": "$1 déplasé paj $3 vèr $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|déplasé}} paj-a $3 vèr $4 san lésé di roudirèksyon",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|déplasé}} paj-a $3 vèr $4 pa lasou oun roudirèksyon",
+       "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|té otomatikman marké}} révizyon $4 di paj $3 kou rouli",
+       "logentry-newusers-create": "Kont di itilizat{{GENDER:$4|ò|ris}} $1 té kréyé",
+       "logentry-newusers-autocreate": "Kont $1 {{GENDER:$2|té kréyé}} otomatikman",
+       "logentry-upload-upload": "$1 {{GENDER:$2|té télévèrsé}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|télévèrsé}} oun nouvèl vèrsyon di $3",
+       "searchsuggest-search": "Sasé andan {{SITENAME}}",
+       "duration-days": "$1 jou{{PLURAL:$1|}}",
+       "randomrootpage": "Paj rakaba aléyatwar"
+}
index 767f389..25df335 100644 (file)
@@ -9,7 +9,8 @@
                        "Matma Rex",
                        "Lakzon",
                        "Nemo bis",
-                       "Amire80"
+                       "Amire80",
+                       "Beyronvan"
                ]
        },
        "tog-underline": "هوم پئیڤأند زیرخأط دار:",
@@ -74,8 +75,8 @@
        "thu": "پأن شأمە",
        "fri": "جومە",
        "sat": "شأمە",
-       "january": "جانڤیە",
-       "february": "فئڤریە",
+       "january": "جانۋیٱ",
+       "february": "فۋریٱ",
        "march": "مارس",
        "april": "آڤریل",
        "may_long": "مئی",
        "november-gen": "نوڤامر",
        "december-gen": "دئسامر",
        "jan": "جانڤیە",
-       "feb": "فئڤریە",
+       "feb": "فۋریٱ",
        "mar": "مارس",
        "apr": "آڤریل",
        "may": "مئی",
        "returnto": "ڤورگأشتئن د $1.",
        "tagline": "د {{SITENAME}}",
        "help": "هومياری",
-       "search": "پئی جوٙری",
+       "search": "پی جۊری",
        "searchbutton": "پئی جوٙری",
        "go": "رو",
        "searcharticle": "رو",
        "history": "ڤیرگار بألگە",
        "history_short": "ڤیرگار",
        "updatedmarker": "د آخئری دییئن مئنە ڤئ هنگوم کو",
-       "printableversion": "نوسقە پئلا بیئنی",
+       "printableversion": "نوسقٱ پلا بیاٛنی",
        "permalink": "هوم پئیڤأند هأمیشئ یی",
        "print": "چاپ گئرئتئن",
        "view": "ديئن",
        "protect_change": "آلئشت بأکیت",
        "unprotect": "آلئشت دأئن پأر و پیم کاری",
        "newpage": "بألگە نۊ",
-       "talkpagelinktext": "چأک چئنە",
+       "talkpagelinktext": "چٱک چنٱ",
        "specialpage": "بألگە ڤیجە",
        "personaltools": "أڤزاریا شأصقی",
        "talk": "گأپ",
        "pool-errorunknown": "خأطا نادیار",
        "pool-servererror": "پوٙل ئشمار خئذمأتگە د دأسرئس نی($1).",
        "poolcounter-usage-error": "خأطا ڤئ کار گئرئتئن:$1",
-       "aboutsite": "دئبارÛ\95 {{SITENAME}}",
+       "aboutsite": "داÙ\9bبارٱ {{SITENAME}}",
        "aboutpage": "پوروجٱ:دبارٱ",
        "copyright": "مینوٙنە یا هان د دأسرئس $1 مأر یە کئ ڤئ یئ گئل شیڤە هأنی نیسأنە بوٙە.",
        "copyrightpage": "{{ns:project}}:کوپی رایت",
        "currentevents": "روخ ڤأنیا ئیسئنی",
        "currentevents-url": "پوروجە یا:روخ ڤأنیا ئیسئنی",
-       "disclaimers": "تیە پوٙشکاریا",
+       "disclaimers": "تیٱپۊشکاریا",
        "disclaimerpage": "پوروجٱ: تیٱپوشی کردن همٱگیر",
        "edithelp": "هومياری سی ڤیرایئشت",
        "helppage-top-gethelp": "هومياری",
-       "mainpage": "سأرآسÙ\88Ù\99Ù\86Û\95",
+       "mainpage": "سرآسÛ\8aÙ\86Ù±",
        "mainpage-description": "سأرآسوٙنە",
        "policy-url": "پوروجە:رأدیارجوٙری",
        "portal": "دأرآسوٙنە کومولە یأکی",
        "portal-url": "پوروجٱ:درآسۊنٱ کومولٱیکی",
-       "privacy": "پوٙلتیک رازینە داری",
+       "privacy": "پۊلتیک رازینٱداری",
        "privacypage": "پوروجٱ: راگوۋاری رازینٱ کاری کردن",
        "badaccess": "خأطا صئلا دأئن",
        "badaccess-group0": "شوما صئلا أنجوم دأئن کاری نە کئ میهایت ناریت.",
        "newmessageslinkplural": "{{PLURAL:$1|یئ گئل پئیغوم تازە|999=پئیغومیا تازە}}",
        "newmessagesdifflinkplural": "آخئر {{PLURAL:$1|آلئشت|آلئشتیا}}",
        "youhavenewmessagesmulti": "شوما یئ گئل پئیغوم تازە د $1 داریت",
-       "editsection": "ڤیرایئشت",
+       "editsection": "ۋیرایشت",
        "editold": "ڤیرایئشت",
        "viewsourceold": "سئیل د سأرچئشمە بأکیت",
        "editlink": "ڤیرایئشت",
        "viewsourcelink": "سئیل د سأرچئشمە بأکیت",
-       "editsectionhint": "ڤیرایئشت یئ گئل بأرجا:$1",
+       "editsectionhint": "ۋیرایشت یاٛ گاٛل بٱرجا:$1",
        "toc": "مینوٙنە یا",
        "showtoc": "نئشوٙ دأئن",
        "hidetoc": "قام کئردئن",
        "page-atom-feed": "هأڤال حوٙن Atom سی $1",
        "feed-atom": "اتم",
        "feed-rss": "آر اس اس",
-       "red-link-title": "$1(بألگە ڤوجوٙد نارە)",
+       "red-link-title": "$1(بلگٱ نیاٛش)",
        "sort-descending": "کأم بییئن سأرجاخود",
        "sort-ascending": "زياد بيیئن سأرجادخود",
        "nstab-main": "بألگە",
        "nstab-template": "چوٙأ",
        "nstab-help": "بألگە هومیاری",
        "nstab-category": "دأسە",
-       "mainpage-nstab": "سأرآسÙ\88Ù\99Ù\86Û\95",
+       "mainpage-nstab": "سرآسÛ\8aÙ\86Ù±",
        "nosuchaction": "چئنی کونئشتگأری نییئش",
        "nosuchactiontext": "کاری کئ ڤا یوٙ آر ئل تیار بییە نادیارە.\nگاسی شوما یوٙ آر ئل نە دوروس نأنیسأنیتە، یا یئ گئل هوم پئیڤأند ئشتئڤا ڤارئد بییە.\nڤئ گاسی یئ گئل سیسئریک د نأرم أفزاز ڤئ کار گئرئتە بییە ڤا {{SITENAME}} ئشارە بأکە.",
        "nosuchspecialpage": "چئنی بألگە ڤیجە یی نییئش",
        "rc_categories": "جأرغە یا نە مأدوٙد کو(ڤا \"|\" جئگا بان)",
        "rc_categories_any": "ھأرکوم کئ گولئ ڤورچیە بیینە",
        "rc-change-size": "$1",
-       "rc-change-size-new": "$1 {{PLURAL:$1|باÛ\8cت|باÛ\8cتÛ\8cا}} Ù\86ئÙ\87ا Ø¢Ù\84ئشتکاری",
+       "rc-change-size-new": "$1 {{PLURAL:$1|باÛ\8cت|باÛ\8cتÛ\8cا}} Ù\86اÙ\9bÙ\87ا Ø¢Ù\84شتکاری",
        "newsectionsummary": "/* $1 */ بهرجا تازه",
        "rc-enhanced-expand": "جزيات نشون بيئه",
        "rc-enhanced-hide": "جزياته قام كو",
index 03701e7..f79a337 100644 (file)
        "upload_source_url": "(ваша изабрана датотека од исправних и јавно доступних адреса)",
        "upload_source_file": "(ваша одабрана датотека са вашег рачунара)",
        "listfiles-delete": "обриши",
-       "listfiles-summary": "Ð\9eва Ð¿Ð¾Ñ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ñ\80иказÑ\83Ñ\98е Ñ\81ве Ð¿Ð¾Ñ\81лаÑ\82е датотеке.",
+       "listfiles-summary": "Ð\9eва Ð¿Ð¾Ñ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ñ\80иказÑ\83Ñ\98е Ñ\81ве Ð¾Ñ\82пÑ\80емÑ\99ене датотеке.",
        "listfiles_search_for": "Назив датотеке:",
        "listfiles-userdoesnotexist": "Кориснички налог „$1“ није регистрован.",
        "imgfile": "датотека",
        "delete-warning-toobig": "Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|изменe|измена}}.\nЊено брисање може пореметити базу података, стога поступајте с опрезом.",
        "deleteprotected": "Не можете обрисати ову страницу зато што је заштићена.",
        "deleting-backlinks-warning": "<strong>Упозорење:</strong> бришете страницу која је укључена у [[Special:WhatLinksHere/{{FULLPAGENAME}}|друге странице]] или друге странице воде на њу.",
-       "deleting-subpages-warning": "<strong>Пажња:</strong> Страницу коју желите обрисати има [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|подстраницу|$1 подстранице|51=преко 50 подстраница}}]].",
+       "deleting-subpages-warning": "<strong>Пажња:</strong> Страницу коју желите обрисати има [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|подстраницу|$1 подстранице|$1 подстраница|51=преко 50 подстраница}}]].",
        "rollback": "Врати измене",
        "rollbacklink": "врати",
        "rollbacklinkcount": "врати $1 {{PLURAL:$1|измену|измене|измена}}",
        "newimages-legend": "Филтер",
        "newimages-label": "Назив датотеке (или њен део):",
        "newimages-user": "IP адреса или корисничко име",
+       "newimages-newbies": "Прикажи само доприносе нових корисника",
        "newimages-showbots": "Прикажи датотеке које су послали ботови",
        "newimages-hidepatrolled": "Сакриј патролирана отпремања",
+       "newimages-mediatype": "Врста датотеке:",
        "noimages": "Нема ништа.",
        "ilsubmit": "Претражи",
        "bydate": "по датуму",
index b9dd55a..de9ce07 100644 (file)
        "delete-warning-toobig": "Ova stranica ima veliku istoriju, preko $1 {{PLURAL:$1|izmene|izmene|izmena}}.\nNjeno brisanje može poremetiti bazu podataka, stoga postupajte s oprezom.",
        "deleteprotected": "Ne možete obrisati ovu stranicu zato što je zaštićena.",
        "deleting-backlinks-warning": "<strong>Upozorenje:</strong> brišete stranicu koja je uključena u [[Special:WhatLinksHere/{{FULLPAGENAME}}|druge stranice]] ili druge stranice vode na nju.",
-       "deleting-subpages-warning": "<strong>Pažnja:</strong> Stranicu koju želite obrisati ima [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|podstranicu|$1 podstranice|51=preko 50 podstranica}}]].",
+       "deleting-subpages-warning": "<strong>Pažnja:</strong> Stranicu koju želite obrisati ima [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|podstranicu|$1 podstranice|$1 podstranica|51=preko 50 podstranica}}]].",
        "rollback": "Vrati izmene",
        "rollbacklink": "vrati",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmenu|izmene|izmena}}",
index 8d41428..0ac4ddd 100644 (file)
        "postedit-confirmation-created": "بەت قۇرۇلدى.",
        "postedit-confirmation-restored": "بەت ئەسلىگە كەلدى.",
        "postedit-confirmation-saved": "تەھرىرلىگىنىڭىز ساقلاندى.",
+       "postedit-confirmation-published": "تەھرىرىڭىز يوللاندى.",
        "edit-already-exists": "يېڭى بەت قۇرالمىدى.\nبەت بۇرۇندىن مەۋجۇد.",
        "defaultmessagetext": "كۆڭۈلدىكى ئۇچۇر تېكستى",
        "content-failed-to-parse": "$2 نى $1 گە ئانالىز قلش مەغلۇپ بولدى: $3",
        "wlheader-enotif": "ئېلخەتتە ئەسكەرتىش ئىقتىدارى قوزغىتىلدى.",
        "wlheader-showupdated": "سىز ئالدىنقى قېتىم كۆرگەندىن كېيىن ئۆزگەرتىلگەن بەتلەر '''توم''' كۆرۈنىدۇ",
        "wlnote": "تۆۋەندىكىسى يېقىنقى {{PLURAL:$2|سائەت}} ئىچىدىكى ئاخىرقى '{{PLURAL:$1| قېتىملىق}}  ئۆزگەرتىش، $3 $4 گىچە.",
-       "wlshowlast": "يېقىنقى $1 سائەت $2 كۈن  نىڭ ئۆزگەرتىشىنى كۆرسەت",
+       "wlshowlast": "يېقىنقى $1 سائەت $2 كۈنلۈك ئۆزگەرتىشىنى كۆرسەت",
        "watchlist-options": "كۆزەت تىزىملىك تاللانما",
        "watching": "كۆزەت قىلىۋاتىدۇ…",
        "unwatching": "كۆزەت قىلمايۋاتىدۇ…",
        "pageinfo-robot-index": "چەكلەنمىگەن",
        "pageinfo-robot-noindex": "چەكلەنگەن",
        "pageinfo-watchers": "بەت كۆزەتكۈچىلەر سانى",
-       "pageinfo-redirects-name": "بۇ بەتكە قايتا نىشانلايدۇ",
+       "pageinfo-redirects-name": "بۇ بەتكە قايتا نىشانلاش سانى",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "بۇ بەتنىڭ تارماق بېتى",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|قايتا نىشانلاش}}; $3 {{PLURAL:$3|قايتا نىشانلىماسلىق}})",
index 676233c..a676422 100644 (file)
        "sectioneditnotsupported-title": "قطعہ کی تدوین حمایت شدہ نہیں ہے",
        "sectioneditnotsupported-text": "اِس صفحہ میں قطعہ کی تدوین حمایت شدہ نہیں ہے.",
        "permissionserrors": "نقص اجازت",
-       "permissionserrorstext": "درج ذیل {{PLURAL:$1|وجہ|وجوہات}} کی بناء پر آپ کو ایسا کرنے کی اجازت نہیں ہے:",
-       "permissionserrorstext-withaction": "درج ذیل {{PLURAL:$1|وجہ|وجوہات}} کی بناء پر آپ کو $2  کی اجازت نہیں ہے:",
+       "permissionserrorstext": "درج ذیل {{PLURAL:$1|وجہ|وجوہات}} کی بنا پر آپ کو ایسا کرنے کی اجازت نہیں ہے:",
+       "permissionserrorstext-withaction": "درج ذیل {{PLURAL:$1|وجہ|وجوہات}} کی بنا پر آپ کو $2  کی اجازت نہیں ہے:",
        "contentmodelediterror": "آپ اس نسخے میں ترمیم نہیں کر سکتے کیونکہ اس کے مواد کا ماڈل ‌‌<code>$1</code> ہے جو اس صفحہ کے مواد کے موجودہ ماڈل <code>$2</code> سے مختلف ہے۔",
        "recreate-moveddeleted-warn": "''' انتباہ: آپ ایک گزشتہ حذف شدہ صفحہ دوبارہ تخلیق کررہے ہیں. '''\n\nآپ کو اِس بات پر غور کرنا چاہئے کہ آیا اِس صفحہ کی تدوین جاری رکھنا موزوں ہے یا نہیں.\nصفحہ کا نوشتۂ حذف شدگی و منتقلی یہاں سہولت کی خاطر مہیّا کیا جارہا ہے:",
        "moveddeleted-notice": "اس صفحہ کو حذف کر دیا گیا ہے۔\nحوالہ کے لیے ذیل میں اس صفحہ کا نوشتہ حذف شدگی اور نوشتہ منتقلی درج ہے۔",
        "rightslog": "نوشتہ صارفی اختیارات",
        "rightslogtext": "یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔",
        "action-read": "اس صفحہ کو پڑھنے",
-       "action-edit": "اس صفحہ میں ترمیم کریں",
+       "action-edit": "اس صفحہ میں ترمیم کرنے",
        "action-createpage": "اس صفحہ کو تخلیق کرنے",
        "action-createtalk": "اس تبادلۂ خیال صفحہ کو تخلیق کرنے",
        "action-createaccount": "اس کھاتے کو بنانے",
        "rollback-missingparam": "درخواست میں ضروری پیرامیٹر موجود نہیں۔",
        "rollback-missingrevision": "نسخہ کی معلومات لوڈ نہیں ہو سکتی۔",
        "cantrollback": "تدوین ثانی کا اعادہ نہیں کیا جاسکتا؛ کیونکہ اس میں آخری بار حصہ لینے والا ہی اس صفحہ کا واحد کاتب ہے۔",
-       "alreadyrolled": " [[User:$2|$2]] ([[User talk:$2|تبادلہ خیال]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) کی [[:$1]] پر آخری ترمیم استرجع نہیں کی جاسکتی کیونکہ کوئی صفحے میں پہلے ہی ترمیم یا استرجع کر چکا ہے۔\n\nصفحہ پر آخری ترمیم [[User:$3|$3]] ([[User talk:$3|تبادلہ خیال ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) کی تھی۔",
+       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|تبادلہ خیال]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) کی [[:$1]] پر آخری ترمیم استرجع نہیں کی جاسکتی کیونکہ کوئی صفحے میں پہلے ہی ترمیم یا استرجع کر چکا ہے۔\n\nصفحہ پر آخری ترمیم [[User:$3|$3]] ([[User talk:$3|تبادلہ خیال ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) کی تھی۔",
        "editcomment": "خلاصہ ترمیم یہ تھا: <em>«$1»</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|تبادلۂ خیال]]) کی ترامیم [[User:$1|$1]] کی گذشتہ ترمیم کی جانب واپس پھیر دی گئیں۔",
        "revertpage-nouser": "(حذف شدہ صارف نام) کی ترامیم {{GENDER:$1|[[User:$1|$1]]}} کی گذشتہ ترمیم کی جانب واپس پھیر دی گئیں",
        "table_pager_limit_label": "فی صفحہ اندراج:",
        "table_pager_limit_submit": "چلیں",
        "table_pager_empty": "کوئی نتیجہ برآمد نہیں ہوا",
-       "autosumm-blank": "تÙ\85اÙ\85 Ù\85Ù\86درجات Ø­Ø°Ù\81",
+       "autosumm-blank": "صÙ\81Ø­Û\81 Ø®Ø§Ù\84Û\8c Ú©Û\8cا",
        "autosumm-replace": "\"$1\" سے مواد کی تبدیلی",
        "autoredircomment": "[[$1]] سے رجوع مکرر",
        "autosumm-removed-redirect": "[[$1]] سے رجوع مکرر ہٹایا",
index fa8bf3b..5f87e16 100644 (file)
@@ -1,60 +1,60 @@
 # Based more or less on the public interwiki map from MeatballWiki
 # Default interwiki prefixes...
-acronym|http://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1|0|
+acronym|https://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1|0|
 advogato|http://www.advogato.org/$1|0|
-arxiv|http://www.arxiv.org/abs/$1|0|
+arxiv|https://www.arxiv.org/abs/$1|0|
 c2find|http://c2.com/cgi/wiki?FindPage&value=$1|0|
-cache|http://www.google.com/search?q=cache:$1|0|
+cache|https://www.google.com/search?q=cache:$1|0|
 commons|https://commons.wikimedia.org/wiki/$1|0|https://commons.wikimedia.org/w/api.php
 dictionary|http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1|0|
-doi|http://dx.doi.org/$1|0|
+doi|https://dx.doi.org/$1|0|
 drumcorpswiki|http://www.drumcorpswiki.com/$1|0|http://drumcorpswiki.com/api.php
 dwjwiki|http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1|0|
 elibre|http://enciclopedia.us.es/index.php/$1|0|http://enciclopedia.us.es/api.php
-emacswiki|http://www.emacswiki.org/cgi-bin/wiki.pl?$1|0|
-foldoc|http://foldoc.org/?$1|0|
-foxwiki|http://fox.wikis.com/wc.dll?Wiki~$1|0|
-freebsdman|http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1|0|
+emacswiki|https://www.emacswiki.org/cgi-bin/wiki.pl?$1|0|
+foldoc|https://foldoc.org/?$1|0|
+foxwiki|https://fox.wikis.com/wc.dll?Wiki~$1|0|
+freebsdman|https://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1|0|
 gentoo-wiki|http://gentoo-wiki.com/$1|0|
-google|http://www.google.com/search?q=$1|0|
-googlegroups|http://groups.google.com/groups?q=$1|0|
+google|https://www.google.com/search?q=$1|0|
+googlegroups|https://groups.google.com/groups?q=$1|0|
 hammondwiki|http://www.dairiki.org/HammondWiki/$1|0|
 hrwiki|http://www.hrwiki.org/wiki/$1|0|http://www.hrwiki.org/w/api.php
 imdb|http://www.imdb.com/find?q=$1&tt=on|0|
-kmwiki|http://kmwiki.wikispaces.com/$1|0|
+kmwiki|https://kmwiki.wikispaces.com/$1|0|
 linuxwiki|http://linuxwiki.de/$1|0|
-lojban|http://mw.lojban.org/papri/$1|0|
+lojban|https://mw.lojban.org/papri/$1|0|
 lqwiki|http://wiki.linuxquestions.org/wiki/$1|0|
 meatball|http://www.usemod.com/cgi-bin/mb.pl?$1|0|
 mediawikiwiki|https://www.mediawiki.org/wiki/$1|0|https://www.mediawiki.org/w/api.php
 memoryalpha|http://en.memory-alpha.org/wiki/$1|0|http://en.memory-alpha.org/api.php
 metawiki|http://sunir.org/apps/meta.pl?$1|0|
 metawikimedia|https://meta.wikimedia.org/wiki/$1|0|https://meta.wikimedia.org/w/api.php
-mozillawiki|http://wiki.mozilla.org/$1|0|https://wiki.mozilla.org/api.php
+mozillawiki|https://wiki.mozilla.org/$1|0|https://wiki.mozilla.org/api.php
 mw|https://www.mediawiki.org/wiki/$1|0|https://www.mediawiki.org/w/api.php
-oeis|http://oeis.org/$1|0|
+oeis|https://oeis.org/$1|0|
 openwiki|http://openwiki.com/ow.asp?$1|0|
 pmid|https://www.ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract|0|
-pythoninfo|http://wiki.python.org/moin/$1|0|
+pythoninfo|https://wiki.python.org/moin/$1|0|
 rfc|https://tools.ietf.org/html/rfc$1|0|
 s23wiki|http://s23.org/wiki/$1|0|http://s23.org/w/api.php
 seattlewireless|http://seattlewireless.net/$1|0|
-senseislibrary|http://senseis.xmp.net/?$1|0|
+senseislibrary|https://senseis.xmp.net/?$1|0|
 shoutwiki|http://www.shoutwiki.com/wiki/$1|0|http://www.shoutwiki.com/w/api.php
 squeak|http://wiki.squeak.org/squeak/$1|0|
 tmbw|http://www.tmbw.net/wiki/$1|0|http://tmbw.net/wiki/api.php
 tmnet|http://www.technomanifestos.net/?$1|0|
-theopedia|http://www.theopedia.com/$1|0|
+theopedia|https://www.theopedia.com/$1|0|
 twiki|http://twiki.org/cgi-bin/view/$1|0|
-uncyclopedia|http://en.uncyclopedia.co/wiki/$1|0|http://en.uncyclopedia.co/w/api.php
-unreal|http://wiki.beyondunreal.com/$1|0|http://wiki.beyondunreal.com/w/api.php
+uncyclopedia|https://en.uncyclopedia.co/wiki/$1|0|https://en.uncyclopedia.co/w/api.php
+unreal|https://wiki.beyondunreal.com/$1|0|https://wiki.beyondunreal.com/w/api.php
 usemod|http://www.usemod.com/cgi-bin/wiki.pl?$1|0|
 wiki|http://c2.com/cgi/wiki?$1|0|
 wikia|http://www.wikia.com/wiki/$1|0|
 wikibooks|https://en.wikibooks.org/wiki/$1|0|https://en.wikibooks.org/w/api.php
 wikidata|https://www.wikidata.org/wiki/$1|0|https://www.wikidata.org/w/api.php
 wikif1|http://www.wikif1.org/$1|0|
-wikihow|http://www.wikihow.com/$1|0|http://www.wikihow.com/api.php
+wikihow|https://www.wikihow.com/$1|0|https://www.wikihow.com/api.php
 wikinfo|http://wikinfo.co/English/index.php/$1|0|
 wikimedia|https://wikimediafoundation.org/wiki/$1|0|https://wikimediafoundation.org/w/api.php
 wikinews|https://en.wikinews.org/wiki/$1|0|https://en.wikinews.org/w/api.php
index adb6cd1..9e6072b 100644 (file)
@@ -2,61 +2,61 @@
 -- Default interwiki prefixes...
 
 REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local,iw_api) VALUES
-('acronym','http://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1',0,''),
+('acronym','https://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1',0,''),
 ('advogato','http://www.advogato.org/$1',0,''),
-('arxiv','http://www.arxiv.org/abs/$1',0,''),
+('arxiv','https://www.arxiv.org/abs/$1',0,''),
 ('c2find','http://c2.com/cgi/wiki?FindPage&value=$1',0,''),
-('cache','http://www.google.com/search?q=cache:$1',0,''),
+('cache','https://www.google.com/search?q=cache:$1',0,''),
 ('commons','https://commons.wikimedia.org/wiki/$1',0,'https://commons.wikimedia.org/w/api.php'),
 ('dictionary','http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1',0,''),
-('doi','http://dx.doi.org/$1',0,''),
+('doi','https://dx.doi.org/$1',0,''),
 ('drumcorpswiki','http://www.drumcorpswiki.com/$1',0,'http://drumcorpswiki.com/api.php'),
 ('dwjwiki','http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1',0,''),
 ('elibre','http://enciclopedia.us.es/index.php/$1',0,'http://enciclopedia.us.es/api.php'),
-('emacswiki','http://www.emacswiki.org/cgi-bin/wiki.pl?$1',0,''),
-('foldoc','http://foldoc.org/?$1',0,''),
-('foxwiki','http://fox.wikis.com/wc.dll?Wiki~$1',0,''),
-('freebsdman','http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1',0,''),
+('emacswiki','https://www.emacswiki.org/cgi-bin/wiki.pl?$1',0,''),
+('foldoc','https://foldoc.org/?$1',0,''),
+('foxwiki','https://fox.wikis.com/wc.dll?Wiki~$1',0,''),
+('freebsdman','https://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1',0,''),
 ('gentoo-wiki','http://gentoo-wiki.com/$1',0,''),
-('google','http://www.google.com/search?q=$1',0,''),
-('googlegroups','http://groups.google.com/groups?q=$1',0,''),
+('google','https://www.google.com/search?q=$1',0,''),
+('googlegroups','https://groups.google.com/groups?q=$1',0,''),
 ('hammondwiki','http://www.dairiki.org/HammondWiki/$1',0,''),
 ('hrwiki','http://www.hrwiki.org/wiki/$1',0,'http://www.hrwiki.org/w/api.php'),
 ('imdb','http://www.imdb.com/find?q=$1&tt=on',0,''),
-('kmwiki','http://kmwiki.wikispaces.com/$1',0,''),
+('kmwiki','https://kmwiki.wikispaces.com/$1',0,''),
 ('linuxwiki','http://linuxwiki.de/$1',0,''),
-('lojban','http://www.lojban.org/tiki/tiki-index.php?page=$1',0,''),
+('lojban','https://www.lojban.org/tiki/tiki-index.php?page=$1',0,''),
 ('lqwiki','http://wiki.linuxquestions.org/wiki/$1',0,''),
 ('meatball','http://www.usemod.com/cgi-bin/mb.pl?$1',0,''),
 ('mediawikiwiki','https://www.mediawiki.org/wiki/$1',0,'https://www.mediawiki.org/w/api.php'),
 ('memoryalpha','http://en.memory-alpha.org/wiki/$1',0,'http://en.memory-alpha.org/api.php'),
 ('metawiki','http://sunir.org/apps/meta.pl?$1',0,''),
 ('metawikimedia','https://meta.wikimedia.org/wiki/$1',0,'https://meta.wikimedia.org/w/api.php'),
-('mozillawiki','http://wiki.mozilla.org/$1',0,'https://wiki.mozilla.org/api.php'),
+('mozillawiki','https://wiki.mozilla.org/$1',0,'https://wiki.mozilla.org/api.php'),
 ('mw','https://www.mediawiki.org/wiki/$1',0,'https://www.mediawiki.org/w/api.php'),
-('oeis','http://oeis.org/$1',0,''),
+('oeis','https://oeis.org/$1',0,''),
 ('openwiki','http://openwiki.com/ow.asp?$1',0,''),
 ('pmid', 'https://www.ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract',0,''),
-('pythoninfo','http://wiki.python.org/moin/$1',0,''),
+('pythoninfo','https://wiki.python.org/moin/$1',0,''),
 ('rfc','https://tools.ietf.org/html/rfc$1',0,''),
 ('s23wiki','http://s23.org/wiki/$1',0,'http://s23.org/w/api.php'),
 ('seattlewireless','http://seattlewireless.net/$1',0,''),
-('senseislibrary','http://senseis.xmp.net/?$1',0,''),
+('senseislibrary','https://senseis.xmp.net/?$1',0,''),
 ('shoutwiki','http://www.shoutwiki.com/wiki/$1',0,'http://www.shoutwiki.com/w/api.php'),
 ('squeak','http://wiki.squeak.org/squeak/$1',0,''),
 ('tmbw','http://www.tmbw.net/wiki/$1',0,'http://tmbw.net/wiki/api.php'),
 ('tmnet','http://www.technomanifestos.net/?$1',0,''),
-('theopedia','http://www.theopedia.com/$1',0,''),
+('theopedia','https://www.theopedia.com/$1',0,''),
 ('twiki','http://twiki.org/cgi-bin/view/$1',0,''),
-('uncyclopedia','http://en.uncyclopedia.co/wiki/$1',0,'http://en.uncyclopedia.co/w/api.php'),
-('unreal','http://wiki.beyondunreal.com/$1',0,'http://wiki.beyondunreal.com/w/api.php'),
+('uncyclopedia','https://en.uncyclopedia.co/wiki/$1',0,'https://en.uncyclopedia.co/w/api.php'),
+('unreal','https://wiki.beyondunreal.com/$1',0,'https://wiki.beyondunreal.com/w/api.php'),
 ('usemod','http://www.usemod.com/cgi-bin/wiki.pl?$1',0,''),
 ('wiki','http://c2.com/cgi/wiki?$1',0,''),
 ('wikia','http://www.wikia.com/wiki/$1',0,''),
 ('wikibooks','https://en.wikibooks.org/wiki/$1',0,'https://en.wikibooks.org/w/api.php'),
 ('wikidata','https://www.wikidata.org/wiki/$1',0,'https://www.wikidata.org/w/api.php'),
 ('wikif1','http://www.wikif1.org/$1',0,''),
-('wikihow','http://www.wikihow.com/$1',0,'http://www.wikihow.com/api.php'),
+('wikihow','https://www.wikihow.com/$1',0,'https://www.wikihow.com/api.php'),
 ('wikinfo','http://wikinfo.co/English/index.php/$1',0,''),
 ('wikimedia','https://wikimediafoundation.org/wiki/$1',0,'https://wikimediafoundation.org/w/api.php'),
 ('wikinews','https://en.wikinews.org/wiki/$1',0,'https://en.wikinews.org/w/api.php'),
index b1bf0f4..20dc1b2 100644 (file)
@@ -29,6 +29,7 @@
         * with attributes that do not have the "-msg" suffix and contain a localized message.
         *
         * Example:
+        *
         *     // Messages: { 'title': 'Awesome', 'desc': 'Cat doing backflip' 'search' contains 'Search' }
         *     var html = '\
         *         <p>\
@@ -39,6 +40,7 @@
         *     $( 'body' ).append( $( html ).localize() );
         *
         * Appends something like this to the body...
+        *
         *     <p>
         *         Awesome
         *         <img src="something.jpg" title="Awesome" alt="Cat doing backflip" />
         * of a message in the same selection being localized - they will all recieve the same parameters.
         *
         * Example:
+        *
         *     // Messages: { 'easy-as': 'Easy as $1 $2 $3.' }
         *     var html = '<p><html:msg key="easy-as" /></p>';
         *     $( 'body' ).append( $( html ).localize( { 'params': { 'easy-as': ['a', 'b', 'c'] } } ) );
         *
         * Appends something like this to the body...
+        *
         *     <p>Easy as a, b, c</p>
         *
         * Raw HTML content can be used, instead of it being escaped as text. To do this, just use the raw
         * attribute on a msg element.
         *
         * Example:
+        *
         *     // Messages: { 'hello': '<b><i>Hello</i> $1!</b>' }
         *     var html = '\
         *         <p>\
@@ -72,6 +77,7 @@
         *     $( 'body' ).append( $( html ).localize( { 'params': { 'hello': ['world'] } } ) );
         *
         * Appends something like this to the body...
+        *
         *     <p>
         *         <!-- escaped: -->&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt; world!&lt;/b&gt;
         *         <!-- raw: --><b><i>Hello</i> world!</b>
         * of messages. This is important for improving re-usability of templates.
         *
         * Example:
+        *
         *     // Messages: { 'good-afternoon': 'Good afternoon' }
         *     var html = '<p><html:msg key="greeting" /></p>';
         *     $( 'body' ).append( $( html ).localize( { 'keys': { 'greeting': 'good-afternoon' } } ) );
         *
         * Appends something like this to the body...
+        *
         *     <p>Good afternoon</p>
         *
         * Message keys can also be prefixed globally, which is handy when writing extensions, where by
         * convention all messages are prefixed with the extension's name.
         *
         * Example:
+        *
         *     // Messages: { 'teleportation-warning': 'You may not get there all in one piece.' }
         *     var html = '<p><html:msg key="warning" /></p>';
         *     $( 'body' ).append( $( html ).localize( { 'prefix': 'teleportation-' } ) );
         *
         * Appends something like this to the body...
+        *
         *     <p>You may not get there all in one piece.</p>
         *
         * @param {Object} options Map of options to be used while localizing
index 394b42f..d22fc4b 100644 (file)
                                                }
                                        }
                                        $( this ).trigger( 'encapsulateSelection', [ options.pre, options.peri, options.post, options.ownline,
-                                               options.replace, options.spitlines ] );
+                                               options.replace, options.splitlines ] );
                                } );
                        },
                        /**
index 3f19509..b3bcc0d 100644 (file)
                /** Search for existing categories with the exact title */
                Exists: 2,
 
-               /** Search only subcategories  */
+               /** Search only subcategories */
                SubCategories: 3,
 
                /** Search only parent categories */
index 8a7368f..872a23e 100644 (file)
@@ -317,6 +317,8 @@ class RevisionTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionStore::newMutableRevisionFromArray
         */
        public function testConstructFromRowWithBadPageId() {
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
+               $this->overrideMwServices();
                MediaWiki\suppressWarnings();
                $rev = new Revision( (object)[ 'rev_page' => 77777777 ] );
                $this->assertSame( 77777777, $rev->getPage() );
@@ -608,6 +610,8 @@ class RevisionTest extends MediaWikiTestCase {
         * @covers Revision::loadFromTitle
         */
        public function testLoadFromTitle() {
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
+               $this->overrideMwServices();
                $title = $this->getMockTitle();
 
                $conditions = [
index b6aed7f..bee94f3 100644 (file)
@@ -338,6 +338,62 @@ class RevisionStoreTest extends MediaWikiTestCase {
                $this->assertSame( 'Food', $title->getDBkey() );
        }
 
+       public function testGetTitle_successFromPageIdOnFallback() {
+               $mockLoadBalancer = $this->getMockLoadBalancer();
+               // Title calls wfGetDB() so we have to set the main service
+               $this->setService( 'DBLoadBalancer', $mockLoadBalancer );
+
+               $db = $this->getMockDatabase();
+               // Title calls wfGetDB() which uses a regular Connection
+               // Assert that the first call uses a REPLICA and the second falls back to master
+               $mockLoadBalancer->expects( $this->exactly( 2 ) )
+                       ->method( 'getConnection' )
+                       ->willReturn( $db );
+               // RevisionStore getTitle uses a ConnectionRef
+               $mockLoadBalancer->expects( $this->atLeastOnce() )
+                       ->method( 'getConnectionRef' )
+                       ->willReturn( $db );
+
+               // First call to Title::newFromID, faking no result (db lag?)
+               $db->expects( $this->at( 0 ) )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'page',
+                               $this->anything(),
+                               [ 'page_id' => 1 ]
+                       )
+                       ->willReturn( false );
+
+               // First select using rev_id, faking no result (db lag?)
+               $db->expects( $this->at( 1 ) )
+                       ->method( 'selectRow' )
+                       ->with(
+                               [ 'revision', 'page' ],
+                               $this->anything(),
+                               [ 'rev_id' => 2 ]
+                       )
+                       ->willReturn( false );
+
+               // Second call to Title::newFromID, no result
+               $db->expects( $this->at( 2 ) )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'page',
+                               $this->anything(),
+                               [ 'page_id' => 1 ]
+                       )
+                       ->willReturn( (object)[
+                               'page_namespace' => '2',
+                               'page_title' => 'Foodey',
+                       ] );
+
+               $store = $this->getRevisionStore( $mockLoadBalancer );
+               $title = $store->getTitle( 1, 2, RevisionStore::READ_NORMAL );
+
+               $this->assertSame( 2, $title->getNamespace() );
+               $this->assertSame( 'Foodey', $title->getDBkey() );
+       }
+
        public function testGetTitle_successFromRevId() {
                $mockLoadBalancer = $this->getMockLoadBalancer();
                // Title calls wfGetDB() so we have to set the main service
@@ -383,17 +439,15 @@ class RevisionStoreTest extends MediaWikiTestCase {
                $this->assertSame( 'Food2', $title->getDBkey() );
        }
 
-       /**
-        * @covers \MediaWiki\Storage\RevisionStore::getTitle
-        */
-       public function testGetTitle_throwsExceptionAfterFallbacks() {
+       public function testGetTitle_successFromRevIdOnFallback() {
                $mockLoadBalancer = $this->getMockLoadBalancer();
                // Title calls wfGetDB() so we have to set the main service
                $this->setService( 'DBLoadBalancer', $mockLoadBalancer );
 
                $db = $this->getMockDatabase();
                // Title calls wfGetDB() which uses a regular Connection
-               $mockLoadBalancer->expects( $this->atLeastOnce() )
+               // Assert that the first call uses a REPLICA and the second falls back to master
+               $mockLoadBalancer->expects( $this->exactly( 2 ) )
                        ->method( 'getConnection' )
                        ->willReturn( $db );
                // RevisionStore getTitle uses a ConnectionRef
@@ -421,6 +475,88 @@ class RevisionStoreTest extends MediaWikiTestCase {
                        )
                        ->willReturn( false );
 
+               // Second call to Title::newFromID, no result
+               $db->expects( $this->at( 2 ) )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'page',
+                               $this->anything(),
+                               [ 'page_id' => 1 ]
+                       )
+                       ->willReturn( false );
+
+               // Second select using rev_id, result
+               $db->expects( $this->at( 3 ) )
+                       ->method( 'selectRow' )
+                       ->with(
+                               [ 'revision', 'page' ],
+                               $this->anything(),
+                               [ 'rev_id' => 2 ]
+                       )
+                       ->willReturn( (object)[
+                               'page_namespace' => '2',
+                               'page_title' => 'Foodey',
+                       ] );
+
+               $store = $this->getRevisionStore( $mockLoadBalancer );
+               $title = $store->getTitle( 1, 2, RevisionStore::READ_NORMAL );
+
+               $this->assertSame( 2, $title->getNamespace() );
+               $this->assertSame( 'Foodey', $title->getDBkey() );
+       }
+
+       /**
+        * @covers \MediaWiki\Storage\RevisionStore::getTitle
+        */
+       public function testGetTitle_correctFallbackAndthrowsExceptionAfterFallbacks() {
+               $mockLoadBalancer = $this->getMockLoadBalancer();
+               // Title calls wfGetDB() so we have to set the main service
+               $this->setService( 'DBLoadBalancer', $mockLoadBalancer );
+
+               $db = $this->getMockDatabase();
+               // Title calls wfGetDB() which uses a regular Connection
+               // Assert that the first call uses a REPLICA and the second falls back to master
+
+               // RevisionStore getTitle uses getConnectionRef
+               // Title::newFromID uses getConnection
+               foreach ( [ 'getConnection', 'getConnectionRef' ] as $method ) {
+                       $mockLoadBalancer->expects( $this->exactly( 2 ) )
+                               ->method( $method )
+                               ->willReturnCallback( function ( $masterOrReplica ) use ( $db ) {
+                                       static $callCounter = 0;
+                                       $callCounter++;
+                                       // The first call should be to a REPLICA, and the second a MASTER.
+                                       if ( $callCounter === 1 ) {
+                                               $this->assertSame( DB_REPLICA, $masterOrReplica );
+                                       } elseif ( $callCounter === 2 ) {
+                                               $this->assertSame( DB_MASTER, $masterOrReplica );
+                                       }
+                                       return $db;
+                               } );
+               }
+               // First and third call to Title::newFromID, faking no result
+               foreach ( [ 0, 2 ] as $counter ) {
+                       $db->expects( $this->at( $counter ) )
+                               ->method( 'selectRow' )
+                               ->with(
+                                       'page',
+                                       $this->anything(),
+                                       [ 'page_id' => 1 ]
+                               )
+                               ->willReturn( false );
+               }
+
+               foreach ( [ 1, 3 ] as $counter ) {
+                       $db->expects( $this->at( $counter ) )
+                               ->method( 'selectRow' )
+                               ->with(
+                                       [ 'revision', 'page' ],
+                                       $this->anything(),
+                                       [ 'rev_id' => 2 ]
+                               )
+                               ->willReturn( false );
+               }
+
                $store = $this->getRevisionStore( $mockLoadBalancer );
 
                $this->setExpectedException( RevisionAccessException::class );
index ac81b28..b1857cc 100644 (file)
@@ -18,7 +18,7 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
        private $testRecentChangesHelper;
 
        /**
-        * @var LinkRenderer;
+        * @var LinkRenderer
         */
        private $linkRenderer;
 
index 2cf9553..6590338 100644 (file)
@@ -517,6 +517,7 @@ class SanitizerTest extends MediaWikiTestCase {
         * @dataProvider provideStripAllTags
         *
         * @covers Sanitizer::stripAllTags()
+        * @covers RemexStripTagHandler
         *
         * @param string $input
         * @param string $expected