Merge "Disable addHelpLink when including special pages"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 13 Jun 2017 08:49:58 +0000 (08:49 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 13 Jun 2017 08:49:58 +0000 (08:49 +0000)
99 files changed:
RELEASE-NOTES-1.30
autoload.php
includes/DefaultSettings.php
includes/api/ApiOpenSearch.php
includes/api/ApiParse.php
includes/api/i18n/hu.json
includes/api/i18n/ru.json
includes/debug/logger/monolog/AvroFormatter.php
includes/filerepo/FileBackendDBRepoWrapper.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/htmlform/OOUIHTMLForm.php
includes/installer/i18n/lij.json
includes/installer/i18n/pt.json
includes/jobqueue/JobRunner.php
includes/libs/CryptRand.php
includes/libs/filebackend/FileBackendStore.php
includes/libs/http/HttpAcceptNegotiator.php [new file with mode: 0644]
includes/libs/http/HttpAcceptParser.php [new file with mode: 0644]
includes/libs/rdbms/TransactionProfiler.php
includes/libs/rdbms/database/DBConnRef.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/IDatabase.php
includes/linkeddata/PageDataRequestHandler.php [new file with mode: 0644]
includes/media/DjVu.php
includes/media/MediaHandler.php
includes/page/CategoryPage.php
includes/revisiondelete/RevDelFileItem.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialPageData.php [new file with mode: 0644]
includes/specials/SpecialUndelete.php
includes/tidy/RemexCompatFormatter.php
includes/widget/search/InterwikiSearchResultWidget.php
includes/widget/search/SimpleSearchResultWidget.php
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/atj.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es-formal.json
languages/i18n/es.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/gu.json
languages/i18n/hr.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lij.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mg.json
languages/i18n/mk.json
languages/i18n/nds-nl.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/rue.json
languages/i18n/sah.json
languages/i18n/sk.json
languages/i18n/sq.json
languages/i18n/sv.json
languages/i18n/th.json
languages/i18n/tt-cyrl.json
languages/i18n/ur.json
languages/i18n/yi.json
languages/i18n/zh-hant.json
languages/messages/MessagesEn.php
maintenance/importImages.php
resources/Resources.php
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
tests/parser/parserTests.txt
tests/phpunit/includes/ReadOnlyModeTest.php
tests/phpunit/includes/api/ApiParseTest.php
tests/phpunit/includes/libs/http/HttpAcceptNegotiatorTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/http/HttpAcceptParserTest.php [new file with mode: 0644]
tests/phpunit/includes/linkeddata/PageDataRequestHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/media/MediaHandlerTest.php
tests/phpunit/includes/media/XContentDimensionsTest.php [deleted file]
tests/phpunit/includes/specials/SpecialPageDataTest.php [new file with mode: 0644]

index cd800da..f2cb871 100644 (file)
@@ -34,9 +34,6 @@ production.
   ParserOptions::setWrapOutputClass().
 * Added 'ChangeTagsAllowedAdd' hook, enabling extensions to allow software-
   specific tags to be added by users.
-* File storage backends that supports headers (eg. Swift) now store an
-  X-Content-Dimensions header for originals that contain the media's dimensions
-  as page ranges keyed by dimensions.
 * Added a 'ParserOptionsRegister' hook to allow extensions to register
   additional parser options.
 
@@ -106,6 +103,7 @@ changes to languages because of Phabricator reports.
   hooks have an additional parameter, for manipulating HTML data attributes of
   RC/history lines. EnhancedChangesListModifyBlockLineData can do that via the
   $data['attribs'] subarray.
+* (T130632) The OutputPage::enableTOC() method was removed.
 
 == Compatibility ==
 MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
index 0264435..6c5aff5 100644 (file)
@@ -1070,6 +1070,7 @@ $wgAutoloadLocalClasses = [
        'PackedOverlayImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
        'Page' => __DIR__ . '/includes/page/Page.php',
        'PageArchive' => __DIR__ . '/includes/page/PageArchive.php',
+       'PageDataRequestHandler' => __DIR__ . '/includes/linkeddata/PageDataRequestHandler.php',
        'PageExists' => __DIR__ . '/maintenance/pageExists.php',
        'PageLangLogFormatter' => __DIR__ . '/includes/logging/PageLangLogFormatter.php',
        'PageProps' => __DIR__ . '/includes/PageProps.php',
@@ -1378,6 +1379,7 @@ $wgAutoloadLocalClasses = [
        'SpecialNewpages' => __DIR__ . '/includes/specials/SpecialNewpages.php',
        'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
        'SpecialPageAction' => __DIR__ . '/includes/actions/SpecialPageAction.php',
+       'SpecialPageData' => __DIR__ . '/includes/specials/SpecialPageData.php',
        'SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
        'SpecialPageLanguage' => __DIR__ . '/includes/specials/SpecialPageLanguage.php',
        'SpecialPagesWithProp' => __DIR__ . '/includes/specials/SpecialPagesWithProp.php',
@@ -1606,6 +1608,8 @@ $wgAutoloadLocalClasses = [
        'WikiRevision' => __DIR__ . '/includes/import/WikiRevision.php',
        'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
        'WikiTextStructure' => __DIR__ . '/includes/content/WikiTextStructure.php',
+       'Wikimedia\\Http\\HttpAcceptNegotiator' => __DIR__ . '/includes/libs/http/HttpAcceptNegotiator.php',
+       'Wikimedia\\Http\\HttpAcceptParser' => __DIR__ . '/includes/libs/http/HttpAcceptParser.php',
        'Wikimedia\\Rdbms\\Blob' => __DIR__ . '/includes/libs/rdbms/encasing/Blob.php',
        'Wikimedia\\Rdbms\\ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php',
        'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php',
index 5b7ca3e..9436aa6 100644 (file)
@@ -8559,6 +8559,15 @@ $wgPopularPasswordFile = __DIR__ . '/../serialized/commonpasswords.cdb';
  */
 $wgMaxUserDBWriteDuration = false;
 
+/*
+ * Max time (in seconds) a job-generated transaction can spend in writes.
+ * If exceeded, the transaction is rolled back with an error instead of being committed.
+ *
+ * @var int|bool Disabled if false
+ * @since 1.30
+ */
+$wgMaxJobDBWriteDuration = false;
+
 /**
  * Mapping of event channels (or channel categories) to EventRelayer configuration.
  *
index dc1b4e7..ff65d0e 100644 (file)
@@ -25,7 +25,6 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\Database;
 
 /**
  * @ingroup API
index 91e49ab..402494c 100644 (file)
@@ -38,6 +38,9 @@ class ApiParse extends ApiBase {
        /** @var Content $pstContent */
        private $pstContent = null;
 
+       /** @var bool */
+       private $contentIsDeleted = false, $contentIsSuppressed = false;
+
        public function execute() {
                // The data is hot but user-dependent, like page views, so we set vary cookies
                $this->getMain()->setCacheMode( 'anon-public-user-private' );
@@ -110,27 +113,9 @@ class ApiParse extends ApiBase {
                                $wgTitle = $titleObj;
                                $pageObj = WikiPage::factory( $titleObj );
                                list( $popts, $reset, $suppressCache ) = $this->makeParserOptions( $pageObj, $params );
-
-                               // If for some reason the "oldid" is actually the current revision, it may be cached
-                               // Deliberately comparing $pageObj->getLatest() with $rev->getId(), rather than
-                               // checking $rev->isCurrent(), because $pageObj is what actually ends up being used,
-                               // and if its ->getLatest() is outdated, $rev->isCurrent() won't tell us that.
-                               if ( !$suppressCache && $rev->getId() == $pageObj->getLatest() ) {
-                                       // May get from/save to parser cache
-                                       $p_result = $this->getParsedContent( $pageObj, $popts,
-                                               $pageid, isset( $prop['wikitext'] ) );
-                               } else { // This is an old revision, so get the text differently
-                                       $this->content = $rev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
-
-                                       if ( $this->section !== false ) {
-                                               $this->content = $this->getSectionContent(
-                                                       $this->content, $this->msg( 'revid', $rev->getId() )
-                                               );
-                                       }
-
-                                       // Should we save old revision parses to the parser cache?
-                                       $p_result = $this->content->getParserOutput( $titleObj, $rev->getId(), $popts );
-                               }
+                               $p_result = $this->getParsedContent(
+                                       $pageObj, $popts, $suppressCache, $pageid, $rev, isset( $prop['wikitext'] )
+                               );
                        } else { // Not $oldid, but $pageid or $page
                                if ( $params['redirects'] ) {
                                        $reqParams = [
@@ -172,25 +157,9 @@ class ApiParse extends ApiBase {
                                }
 
                                list( $popts, $reset, $suppressCache ) = $this->makeParserOptions( $pageObj, $params );
-
-                               // Don't pollute the parser cache when setting options that aren't
-                               // in ParserOptions::optionsHash()
-                               /// @todo: This should be handled closer to the actual cache instead of here, see T110269
-                               $suppressCache = $suppressCache ||
-                                       $params['disablepp'] ||
-                                       $params['disablelimitreport'] ||
-                                       $params['preview'] ||
-                                       $params['sectionpreview'] ||
-                                       $params['disabletidy'];
-
-                               if ( $suppressCache ) {
-                                       $this->content = $this->getContent( $pageObj, $pageid );
-                                       $p_result = $this->content->getParserOutput( $titleObj, null, $popts );
-                               } else {
-                                       // Potentially cached
-                                       $p_result = $this->getParsedContent( $pageObj, $popts, $pageid,
-                                               isset( $prop['wikitext'] ) );
-                               }
+                               $p_result = $this->getParsedContent(
+                                       $pageObj, $popts, $suppressCache, $pageid, null, isset( $prop['wikitext'] )
+                               );
                        }
                } else { // Not $oldid, $pageid, $page. Hence based on $text
                        $titleObj = Title::newFromText( $title );
@@ -249,6 +218,12 @@ class ApiParse extends ApiBase {
                        if ( $params['onlypst'] ) {
                                // Build a result and bail out
                                $result_array = [];
+                               if ( $this->contentIsDeleted ) {
+                                       $result_array['textdeleted'] = true;
+                               }
+                               if ( $this->contentIsSuppressed ) {
+                                       $result_array['textsuppressed'] = true;
+                               }
                                $result_array['text'] = $this->pstContent->serialize( $format );
                                $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
                                if ( isset( $prop['wikitext'] ) ) {
@@ -279,6 +254,12 @@ class ApiParse extends ApiBase {
 
                $result_array['title'] = $titleObj->getPrefixedText();
                $result_array['pageid'] = $pageid ?: $pageObj->getId();
+               if ( $this->contentIsDeleted ) {
+                       $result_array['textdeleted'] = true;
+               }
+               if ( $this->contentIsSuppressed ) {
+                       $result_array['textsuppressed'] = true;
+               }
 
                if ( $params['disabletoc'] ) {
                        $p_result->setTOCEnabled( false );
@@ -541,64 +522,72 @@ class ApiParse extends ApiBase {
                Hooks::run( 'ApiMakeParserOptions',
                        [ $popts, $pageObj->getTitle(), $params, $this, &$reset, &$suppressCache ] );
 
+               // Force cache suppression when $popts aren't cacheable.
+               $suppressCache = $suppressCache || !$popts->isSafeToCache();
+
                return [ $popts, $reset, $suppressCache ];
        }
 
        /**
         * @param WikiPage $page
         * @param ParserOptions $popts
+        * @param bool $suppressCache
         * @param int $pageId
-        * @param bool $getWikitext
+        * @param Revision|null $rev
+        * @param bool $getContent
         * @return ParserOutput
         */
-       private function getParsedContent( WikiPage $page, $popts, $pageId = null, $getWikitext = false ) {
-               $this->content = $this->getContent( $page, $pageId );
+       private function getParsedContent(
+               WikiPage $page, $popts, $suppressCache, $pageId, $rev, $getContent
+       ) {
+               $revId = $rev ? $rev->getId() : null;
+               $isDeleted = $rev && $rev->isDeleted( Revision::DELETED_TEXT );
+
+               if ( $getContent || $this->section !== false || $isDeleted ) {
+                       if ( $rev ) {
+                               $this->content = $rev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+                               if ( !$this->content ) {
+                                       $this->dieWithError( [ 'apierror-missingcontent-revid', $revId ] );
+                               }
+                       } else {
+                               $this->content = $page->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+                               if ( !$this->content ) {
+                                       $this->dieWithError( [ 'apierror-missingcontent-pageid', $pageId ] );
+                               }
+                       }
+                       $this->contentIsDeleted = $isDeleted;
+                       $this->contentIsSuppressed = $rev &&
+                               $rev->isDeleted( Revision::DELETED_TEXT | Revision::DELETED_RESTRICTED );
+               }
 
-               if ( $this->section !== false && $this->content !== null ) {
-                       // Not cached (save or load)
-                       return $this->content->getParserOutput( $page->getTitle(), null, $popts );
+               if ( $this->section !== false ) {
+                       $this->content = $this->getSectionContent(
+                               $this->content,
+                               $pageId === null ? $page->getTitle()->getPrefixedText() : $this->msg( 'pageid', $pageId )
+                       );
+                       return $this->content->getParserOutput( $page->getTitle(), $revId, $popts );
                }
 
-               // Try the parser cache first
-               // getParserOutput will save to Parser cache if able
-               $pout = $page->getParserOutput( $popts );
-               if ( !$pout ) {
-                       $this->dieWithError( [ 'apierror-nosuchrevid', $page->getLatest() ] );
+               if ( $isDeleted ) {
+                       // getParserOutput can't do revdeled revisions
+                       $pout = $this->content->getParserOutput( $page->getTitle(), $revId, $popts );
+               } else {
+                       // getParserOutput will save to Parser cache if able
+                       $pout = $page->getParserOutput( $popts, $revId, $suppressCache );
                }
-               if ( $getWikitext ) {
-                       $this->content = $page->getContent( Revision::RAW );
+               if ( !$pout ) {
+                       $this->dieWithError( [ 'apierror-nosuchrevid', $revId ?: $page->getLatest() ] );
                }
 
                return $pout;
        }
 
-       /**
-        * Get the content for the given page and the requested section.
-        *
-        * @param WikiPage $page
-        * @param int $pageId
-        * @return Content
-        */
-       private function getContent( WikiPage $page, $pageId = null ) {
-               $content = $page->getContent( Revision::RAW ); // XXX: really raw?
-
-               if ( $this->section !== false && $content !== null ) {
-                       $content = $this->getSectionContent(
-                               $content,
-                               !is_null( $pageId )
-                                       ? $this->msg( 'pageid', $pageId )
-                                       : $page->getTitle()->getPrefixedText()
-                       );
-               }
-               return $content;
-       }
-
        /**
         * Extract the requested section from the given Content
         *
         * @param Content $content
         * @param string|Message $what Identifies the content in error messages, e.g. page title.
-        * @return Content|bool
+        * @return Content
         */
        private function getSectionContent( Content $content, $what ) {
                // Not cached (save or load)
index 78db9c7..5d997be 100644 (file)
        "apihelp-setnotificationtimestamp-example-page": "A <kbd>Main page</kbd> értesítési állapotának visszaállítása.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "A <kbd>Main page</kbd> értesítési időbélyegének módosítása, hogy a 2012. január 1-jét követő szerkesztések nem megtekintettek legyenek.",
        "apihelp-setnotificationtimestamp-example-allpages": "A <kbd>{{ns:user}}</kbd> névtérbeli lapok értesítési állapotának visszaállítása.",
+       "apihelp-setpagelanguage-description": "Egy lap nyelvének módosítása.",
+       "apihelp-setpagelanguage-description-disabled": "A lapnyelv módosítása nem engedélyezett ezen a wikin.\n\nEngedélyezd a <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> PHP-változót ezen művelet használatához.",
+       "apihelp-setpagelanguage-param-title": "A módosítandó lap címe. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+       "apihelp-setpagelanguage-param-pageid": "A módosítandó lap azonosítója. Nem használható együtt a <var>$1title</var> paraméterrel.",
+       "apihelp-setpagelanguage-param-lang": "A lap nyelvének módosítása erre a nyelvkódra. Használd a <kbd>default</kbd> értéket a wiki alapértelmezett tartalomnyelvére való visszaállításhoz.",
+       "apihelp-setpagelanguage-param-reason": "A módosítás oka.",
+       "apihelp-setpagelanguage-example-language": "A <kbd>Main Page</kbd> nyelvének módosítása baszkra.",
+       "apihelp-setpagelanguage-example-default": "A 123 azonosítójú lap nyelvének módosítása a wiki alapértelmezett tartalomnyelvére.",
        "apihelp-userrights-param-userid": "Felhasználói azonosító.",
        "api-help-title": "MediaWiki API súgó",
        "api-help-lead": "Ez egy automatikusan generált MediaWiki API-dokumentációs lap.\n\nDokumentáció és példák: https://www.mediawiki.org/wiki/API",
index 588f9b2..dee4625 100644 (file)
        "apihelp-compare-param-totitle": "Заголовок второй сравниваемой страницы.",
        "apihelp-compare-param-toid": "Идентификатор второй сравниваемой страницы.",
        "apihelp-compare-param-torev": "Вторая сравниваемая версия.",
+       "apihelp-compare-param-torelative": "Использовать версию, относящуюся к определённой<var>fromtitle</var>, <var>fromid</var> или <var>fromrev</var> Все другие опции 'to' будут проигнорированы.",
+       "apihelp-compare-param-totext": "Используйте этот текст вместо содержимого версии, заданной <var>totitle</var>, <var>toid</var> или <var>torev</var>.",
+       "apihelp-compare-param-topst": "Выполнить преобразование перед записью правки (PST) над <var>totext</var>.",
+       "apihelp-compare-param-tocontentmodel": "Модель содержимого <var>totext</var>. Если не задана, будет угадана по другим параметрам.",
+       "apihelp-compare-param-tocontentformat": "Формат сериализации содержимого <var>totext</var>.",
+       "apihelp-compare-param-prop": "Какую информацию получить.",
+       "apihelp-compare-paramvalue-prop-diff": "HTML разницы.",
+       "apihelp-compare-paramvalue-prop-diffsize": "Размер HTML разницы в байтах.",
+       "apihelp-compare-paramvalue-prop-rel": "Идентификаторы предыдущей к 'from' и следующей за 'to' версий.",
+       "apihelp-compare-paramvalue-prop-ids": "Идентификаторы страниц и версий 'from' и 'to'.",
+       "apihelp-compare-paramvalue-prop-title": "Названия страниц для версий 'from' и 'to'.",
+       "apihelp-compare-paramvalue-prop-user": "Имя и идентификатор участника для версий 'from' и 'to'.",
+       "apihelp-compare-paramvalue-prop-comment": "Описания правок для версий 'from' и 'to'.",
+       "apihelp-compare-paramvalue-prop-parsedcomment": "Распарсенные описания правок для версий 'from' и 'to'.",
+       "apihelp-compare-paramvalue-prop-size": "Размер версий 'from' и 'to'.",
        "apihelp-compare-example-1": "Создать разницу между версиями 1 и 2.",
        "apihelp-createaccount-description": "Создание новой учётной записи.",
        "apihelp-createaccount-param-preservestate": "Если запрос <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> возвращает true для <samp>hasprimarypreservedstate</samp>, то запросы, отмеченные как <samp>primary-required</samp>, должны быть пропущены. Если запрос возвращает непустое значение поля <samp>preservedusername</samp>, то это значение должно быть использовано в параметре <samp>username</var>.",
        "apierror-changeauth-norequest": "Попытка создать запрос правки провалилась.",
        "apierror-chunk-too-small": "Минимальный размер кусочка — $1 {{PLURAL:$1|байт|байта|байтов}}, если кусочек не является последним.",
        "apierror-cidrtoobroad": "Диапазоны $1 CIDR, шире /$2, не разрешены.",
+       "apierror-compare-no-title": "Невозможно выполнить преобразование перед записью правки без заголовка. Попробуйте задать <var>fromtitle</var> или <var>totitle</var>.",
+       "apierror-compare-relative-to-nothing": "Нет версии 'from', к которой относится <var>torelative</var>.",
        "apierror-contentserializationexception": "Сериализация содержимого провалилась: $1",
        "apierror-contenttoobig": "Предоставленное вами содержимое превышает максимальный размер страницы в $1 {{PLURAL:$1|килобайт|килобайта|килобайтов}}.",
        "apierror-copyuploadbaddomain": "Загрузка по ссылке недоступна с этого домена.",
        "apierror-maxlag": "Ожидание $2: $1 {{PLURAL:$1|секунда|секунды|секунд}} задержки.",
        "apierror-mimesearchdisabled": "Поиск по MIME отключен в жадном режиме.",
        "apierror-missingcontent-pageid": "Отсутствует содержимое страницы с идентификатором $1.",
+       "apierror-missingcontent-revid": "Отсутствует содержимое версии с идентификатором $1.",
        "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|Параметр|Как минимум один из параметров}} $1 обязателен.",
        "apierror-missingparam-one-of": "{{PLURAL:$2|Параметр|Один из параметров}} $1 обязателен.",
        "apierror-missingparam": "Параметр <var>$1</var> должен быть задан.",
        "apierror-missingrev-pageid": "Нет текущей версии страницы с идентификатором $1.",
+       "apierror-missingrev-title": "Нет текущей версии для заголовка $1.",
        "apierror-missingtitle-createonly": "Несуществующие названия страниц могут быть защищены только с помощью <kbd>create</kbd>.",
        "apierror-missingtitle": "Указанная вами страница не существует.",
        "apierror-missingtitle-byname": "Страница $1 не существует.",
        "apiwarn-badurlparam": "Невозможно распарсить $2 из <var>$1urlparam</var>. Используется только ширина и высота.",
        "apiwarn-badutf8": "Значение, переданное <var>$1</var>, содержит некорректные или ненормализованные данные. Текстовые данные должны быть корректным NFC-нормализованным Юникодом без символов управления C0, кроме HT (\\t), LF (\\n) и CR (\\r).",
        "apiwarn-checktoken-percentencoding": "Проверьте, что символы вроде «+» в токене корректно закодированы %-последовательностями в ссылке.",
+       "apiwarn-compare-nocontentmodel": "Модель содержимого не может быть определена, предполагается $1.",
        "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> не поддерживается. Пожалуйста, вместо него используйте <kbd>prop=deletedrevisions</kbd> или <kbd>list=alldeletedrevisions</kbd>.",
        "apiwarn-deprecation-expandtemplates-prop": "Поскольку никакие значения не были указаны в параметре <var>prop</var>, был использован наследованный формат. Этот формат является устаревшим, и в будущем параметру <var>prop</var> будет присвоено значение по умолчанию, что приведёт к повсеместному использованию нового формата.",
        "apiwarn-deprecation-httpsexpected": "Использован HTTP, где ожидался HTTPS.",
index 2700daa..2a50566 100644 (file)
@@ -23,7 +23,6 @@ namespace MediaWiki\Logger\Monolog;
 use AvroIODatumWriter;
 use AvroIOBinaryEncoder;
 use AvroIOTypeException;
-use AvroNamedSchemata;
 use AvroSchema;
 use AvroStringIO;
 use AvroValidator;
index 856dc36..2394704 100644 (file)
@@ -24,7 +24,6 @@
  */
 
 use Wikimedia\Rdbms\DBConnRef;
-use Wikimedia\Rdbms\MaintainableDBConnRef;
 
 /**
  * @brief Proxy backend that manages file layout rewriting for FileRepo.
index 53211fe..9aa2b18 100644 (file)
@@ -2173,7 +2173,7 @@ abstract class File implements IDBAccessObject {
                                $metadata = [];
                        }
 
-                       return $handler->getContentHeaders( $metadata, $this->getWidth(), $this->getHeight() );
+                       return $handler->getContentHeaders( $metadata );
                }
 
                return [];
index a90156f..8d715e8 100644 (file)
@@ -1206,9 +1206,7 @@ class LocalFile extends File {
                                $metadata = [];
                        }
 
-                       $options['headers'] = $handler->getContentHeaders(
-                               $metadata, $props['width'], $props['height']
-                       );
+                       $options['headers'] = $handler->getContentHeaders( $metadata );
                } else {
                        $options['headers'] = [];
                }
index 6650321..ed99802 100644 (file)
@@ -191,6 +191,10 @@ class OOUIHTMLForm extends HTMLForm {
         * @return string
         */
        public function getErrorsOrWarnings( $elements, $elementsType ) {
+               if ( $elements === '' ) {
+                       return '';
+               }
+
                if ( !in_array( $elementsType, [ 'error', 'warning' ], true ) ) {
                        throw new DomainException( $elementsType . ' is not a valid type.' );
                }
index 0f692d4..ba39bc7 100644 (file)
        "config-postgres-old": "Ghe voeu MySQL $1 ò 'na verscion succesciva. Ti ti g'hæ a $2.",
        "config-mssql-old": "Ghe voeu Microsoft SQL Server $1 ò succescivo. Ti ti g'hæ a verscion $2.",
        "config-sqlite-name-help": "Çerni un nomme ch'o l'identiffiche a to wiki.\nNo doeuviâ spaÇçi ò trattin.\nQuesto o serviâ pe-o nomme do file di dæti SQLite.",
-       "config-sqlite-parent-unwritable-group": "No se poeu creâ a directory dæti <code><nowiki>$1</nowiki></code>, percose a directory supeiô <code><nowiki>$2</nowiki></code> a no l'è scrivibbile da-o webserver.\n\nO programma d'instalaÇion o l'ha determinou l'utente con chi o serviou web o l'è in esecuçion.\nDagghe a poscibilitæ de scrive inta directory <code><nowiki>$3</nowiki></code> pe continoâ.\nInsce un scistema Unix/Linux fanni:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>"
+       "config-sqlite-parent-unwritable-group": "No se poeu creâ a directory dæti <code><nowiki>$1</nowiki></code>, percose a directory supeiô <code><nowiki>$2</nowiki></code> a no l'è scrivibbile da-o webserver.\n\nO programma d'instalaÇion o l'ha determinou l'utente con chi o serviou web o l'è in esecuçion.\nDagghe a poscibilitæ de scrive inta directory <code><nowiki>$3</nowiki></code> pe continoâ.\nInsce un scistema Unix/Linux fanni:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "No se poeu creâ a directory dæti <code><nowiki>$1</nowiki></code>, percose a directory supeiô <code><nowiki>$2</nowiki></code> a no l'è scrivibbile da-o webserver.\n\nO programma d'instalaçion o no l'ha posciuo determinâ l'utente con chi o serviou web o l'è in esecuçion.\nRendi a directory <code><nowiki>$3</nowiki></code> scrivibbile globalmente, da esso (e da atri) pe continoâ.\nInsce un scistema Unix/Linux fanni:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+       "config-sqlite-mkdir-error": "Errô durante a creaçion da directory dæti \"$1\".\nControlla a poxiçion e proeuva torna.",
+       "config-sqlite-dir-unwritable": "Imposcibile scrive inta directory \"$1\".\nCangia i aotoizaçioin de mainea che o webserver o ghe  posse scrive e proeuva torna.",
+       "config-sqlite-connection-error": "$1.\n\nControlla a directory dæti e o nomme do database chì de sotta, e proeuva torna.",
+       "config-sqlite-readonly": "O file <code>$1</code> o no l'è scrivibbile.",
+       "config-sqlite-cant-create-db": "Imposcibile creâ o file do database <code>$1</code> .",
+       "config-sqlite-fts3-downgrade": "A-o PHP gh'amanca o suporto FTS3, declassamento tabelle in corso",
+       "config-can-upgrade": "Gh'è de tabelle da MediaWiki in questo database.\nPe agiornâle a MediaWiki $1, clicca insce '''continnoa'''.",
+       "config-upgrade-done": "Agiornamento completo.\n\nAoa ti poeu [$1 començâ a doeuviâ a to wiki].\n\nSe t'oeu rigenerâ o to file <code>LocalSettings.php</code>, clicca in sciô pomello de sotta. Questa opiaçion '''a no l'è racomandâ''', a meno che no ti gh'aggi di problemi co-a to wiki.",
+       "config-upgrade-done-no-regenerate": "Agiornamento completo.\n\nAoa ti poeu [$1 començâ a doeuviâ a to wiki].",
+       "config-regenerate": "Rigennera LocalSettings.php →",
+       "config-show-table-status": "A query <code>SHOW TABLE STATUS</code> a l'è fallia!",
+       "config-unknown-collation": "'''Atençion:''' o database o doeuvia de reggole de confronto non riconosciue.",
+       "config-db-web-account": "Account do database pe l'acesso web",
+       "config-db-web-help": "Seleçion-a o nomme utente e a password che o serviou web o l'adoeuviâ pe conettise a-o serviou de database, durante o normale fonçionamento da wiki.",
+       "config-db-web-account-same": "Doeuvia o mæximo account de l'instalaçion",
+       "config-db-web-create": "Crea l'account s'o no l'existe ancon",
+       "config-db-web-no-create-privs": "L'account doeuviou pe l'installaçion o no dispon-e di privileggi necessai pe creâ un atro account.\nL'account indicou chì o deve za existe.",
+       "config-mysql-engine": "Motô d'archiviaçion:",
+       "config-mysql-innodb": "InnoDB",
+       "config-mysql-myisam": "MyISAM",
+       "config-mysql-myisam-dep": "<strong>Atençion:</strong> t'hæ seleçionou MyISAM comme motô d'archiviaçion pe MySQL, ch'o no l'è racomandou pe l'uso con  MediaWiki, percose:\n* o supporta debolmente a concorença pe-o blocco da tabella\n* o l'è ciu inclinou a-a corruçion di atri motoî\n* o codiçe de base MediaWiki o no gestisce sempre MyISAM comm'o doviæ\n\nSe a to instalaçion MySQL a supporta InnoDB, l'è atamente racomandou che ti o çerni a-o so posto.\nSe a to installaçion MySQL a no supporta InnoDB, foscia l'è o momento pe 'n agiornamento.",
+       "config-mysql-only-myisam-dep": "<strong>Atençion:</strong> MyISAM o l'è l'unnico motô d'archiviaçion disponibbile pe MySQL insce sta macchina, e questo no l'è consegiou pe doeuviâlo con MediaWiki, percose:\n* o supporta debolmente a concorenza pe-o blocco da tabella\n* o l''è ciu inclinou a-a corruçion di atri motoî\n* o coddiçe de base MediaWiki MyISAM  o no-o gestisce sempre comm'o doviæ\n\nS'a to installaçion MySQL a no supporta InnoDB, foscia l'è o momento pe 'n agiornamento.",
+       "config-mysql-engine-help": "<strong>InnoDB</strong> o l'è quæxi sempre a megio opçion, in quante o g'ha 'n bon supporto da concorença.\n\n<strong>MyISAM</strong> o poriæ vese ciu veloçe inte installaçioin mono-utente ò in sola-lettua.\nI database MyISAM tendan a dannezâse ciu soventi di database InnoDB.",
+       "config-mysql-charset": "Set di caratteri do database:",
+       "config-mysql-binary": "Binaio",
+       "config-mysql-utf8": "UTF-8",
+       "config-mssql-auth": "Tipo d'aotenticaçion:",
+       "config-mssql-install-auth": "Seleçion-a o tipo d'aotenticaçion ch'o saiâ doeuviou pe conettise a-o database durante o processo de instalaçion.\nSe ti seleçion-i \"{{int:config-mssql-windowsauth}}\", saiâ doeuviou e credençiæ de quæ se segge utente segge aproeuv'a fâ giâ o serviou web.",
+       "config-mssql-web-auth": "Seleçion-a o tipo d'aotenticaçion che o serviou web o doeuviâ pe conettise a-o database. \nSe ti seleçion-i \"{{int:config-mssql-windowsauth}}\", saiâ doeuviou e credençiæ de quæ se segge utente segge aproeuv'a fâ giâ o serviou web.",
+       "config-mssql-sqlauth": "Aotenticaçion de SQL Server",
+       "config-mssql-windowsauth": "Aotenticaçion de Windows",
+       "config-site-name": "Nomme da wiki:",
+       "config-site-name-help": "Questo saiâ vixualizou inta bara do tittolo do navegatô e in atri varri recanti.",
+       "config-site-name-blank": "Inseisci o nomme de 'n scito.",
+       "config-project-namespace": "Namespace do progetto:",
+       "config-ns-generic": "Progetto",
+       "config-ns-site-name": "Pægio che o nomme do wiki: $1",
+       "config-ns-other": "Atro (specificâ)",
+       "config-ns-other-default": "MyWiki",
+       "config-project-namespace-help": "Aproeuvo a l'exempio da Wikipedia, molte wiki tegnan e so paggine co-e reggole separæ da-e paggine de contegnuo, inte 'n '''namespace de progetto'''.\nTutti i tittoli de paggine inte sto namespace començan co-in çerto prefisso, che ti poeu indicâ chie.\nA l'uzo, sto prefisso o deriva da-o nomme da wiki, ma o no poeu contegnî di caratteri de pontezatua comme \"#\" ò \":\".",
+       "config-ns-invalid": "O namespace indicou \"<nowiki>$1</nowiki>\" o no l'è vallido.\nSpecificâ un despægio namespace de progetto.",
+       "config-ns-conflict": "O namespace indicou \"<nowiki>$1</nowiki>\" o l'è in conflito co-in namespace predefinio MediaWiki.\nSpecificâ un despægio namespace de progetto.",
+       "config-admin-box": "Account amministratô",
+       "config-admin-name": "O to nomme utente:",
+       "config-admin-password": "Poula segretta:",
+       "config-admin-password-confirm": "Ripeti a poula segretta:",
+       "config-admin-help": "Inseisci chì o to nomme utente prefeio, presempio \"Giobatta Parodi\".\nSto chì o l'è o nomme che ti doeuviæ pe acede a-a wiki.",
+       "config-admin-name-blank": "Inseisci un nomme pe l'aministratô.",
+       "config-admin-name-invalid": "O nomme utente indicou \"<nowiki>$1</nowiki>\" o no l'è vallido.\nSpecificâ un nomme utente despægio.",
+       "config-admin-password-blank": "Inseisci 'na password pe l'account d'aministratô.",
+       "config-admin-password-mismatch": "E doe password inseie no corispondan.",
+       "config-admin-email": "Adresso e-mail:",
+       "config-admin-email-help": "Inseisci chì 'n adresso e-mail pe poei riçeive di e-mail da-i atri utenti da wiki, rimpostâ a to password, e vese informou de modiffiche aportæ a-e to paggine sotta oservaçion. Se no te interessa, ti poeu lasciâ voeuo questo campo.",
+       "config-admin-error-user": "Erô interno durante a creaçion de 'n aministratô co-o nomme \"<nowiki>$1</nowiki>\".",
+       "config-admin-error-password": "Erô interno durante l'impostaçion de 'na password pe aministratô \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+       "config-admin-error-bademail": "T'hæ inseio un adresso e-mail non vallido.",
+       "config-subscribe": "Sottoscrivi a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list di anonçi de release].",
+       "config-subscribe-help": "Se tratta de 'na mailing list a basso traffego dedicâ a-i anonçi de sciortie de noeuve verscioin, compreize de importante segnalaçioin pe-a segueçça.\nSe conseggia de inscrivise e agiornâ a proppia instalaçion de MediaWiki quande sciorte 'na noeuva verscion."
 }
index 779a32f..4202061 100644 (file)
        "config-desc": "O instalador do MediaWiki",
        "config-title": "Instalação da MediaWiki $1",
        "config-information": "Informação",
-       "config-localsettings-upgrade": "Foi detectado um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação, por favor introduza o valor de <code>$wgUpgradeKey</code> na caixa abaixo.\nEncontra este valor em <code>LocalSettings.php</code>.",
-       "config-localsettings-cli-upgrade": "Foi detectado um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação, execute o <code>update.php</code>, por favor",
+       "config-localsettings-upgrade": "Foi detetado um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação, por favor introduza o valor de <code>$wgUpgradeKey</code> na caixa abaixo.\nEncontra este valor em <code>LocalSettings.php</code>.",
+       "config-localsettings-cli-upgrade": "Foi detetado um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação, execute o <code>update.php</code>, por favor",
        "config-localsettings-key": "Chave de atualização:",
        "config-localsettings-badkey": "A chave de atualização que forneceu está incorreta.",
-       "config-upgrade-key-missing": "Foi detectada uma instalação existente do MediaWiki.\nPara atualizar esta instalação, por favor coloque a seguinte linha no final do seu <code>LocalSettings.php</code>:\n\n$1",
+       "config-upgrade-key-missing": "Foi detetada uma instalação existente do MediaWiki.\nPara atualizar esta instalação, por favor coloque a seguinte linha no final do seu <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "O ficheiro <code>LocalSettings.php</code> existente parece estar incompleto.\nA variável $1 não está definida.\nPor favor, defina esta variável no <code>LocalSettings.php</code> e clique \"{{int:Config-continue}}\".",
        "config-localsettings-connection-error": "Ocorreu um erro ao ligar à base de dados usando as configurações especificadas no <code>LocalSettings.php</code>. Por favor corrija essas configurações e tente novamente.\n\n$1",
        "config-session-error": "Erro ao iniciar a sessão: $1",
        "config-memcache-noport": "Não especificou a porta a usar para o servidor Memcached: $1.\nSe não sabe qual é a porta, a predefinida é a 11211.",
        "config-memcache-badport": "Os números das portas do Memcached devem estar entre $1 e $2.",
        "config-extensions": "Extensões",
-       "config-extensions-help": "Foi detectada a existência das extensões listadas acima, no seu diretório <code>./extensions</code>.\n\nEstas talvez necessitem de configurações adicionais, mas pode ativá-las agora",
+       "config-extensions-help": "Foi detetada a existência das extensões listadas acima, no seu diretório <code>./extensions</code>.\n\nEstas talvez necessitem de configurações adicionais, mas pode ativá-las agora.",
        "config-skins": "Temas",
        "config-skins-help": "Os temas listados abaixo foram detetados no seu diretório <code>./skins</code>. Deverá ativar pelo menos um e escolher qual o escolhido por padrão.",
        "config-skins-use-as-default": "Usar este tema como padrão",
index ff90a9e..49b7a45 100644 (file)
@@ -38,6 +38,8 @@ use Wikimedia\Rdbms\DBReplicationWaitError;
  * @since 1.24
  */
 class JobRunner implements LoggerAwareInterface {
+       /** @var Config */
+       protected $config;
        /** @var callable|null Debug output handler */
        protected $debug;
 
@@ -74,6 +76,7 @@ class JobRunner implements LoggerAwareInterface {
                        $logger = LoggerFactory::getInstance( 'runJobs' );
                }
                $this->setLogger( $logger );
+               $this->config = MediaWikiServices::getInstance()->getMainConfig();
        }
 
        /**
@@ -101,7 +104,8 @@ class JobRunner implements LoggerAwareInterface {
         * @return array Summary response that can easily be JSON serialized
         */
        public function run( array $options ) {
-               global $wgJobClasses, $wgTrxProfilerLimits;
+               $jobClasses = $this->config->get( 'JobClasses' );
+               $profilerLimits = $this->config->get( 'TrxProfilerLimits' );
 
                $response = [ 'jobs' => [], 'reached' => 'none-ready' ];
 
@@ -111,7 +115,7 @@ class JobRunner implements LoggerAwareInterface {
                $noThrottle = isset( $options['throttle'] ) && !$options['throttle'];
 
                // Bail if job type is invalid
-               if ( $type !== false && !isset( $wgJobClasses[$type] ) ) {
+               if ( $type !== false && !isset( $jobClasses[$type] ) ) {
                        $response['reached'] = 'none-possible';
                        return $response;
                }
@@ -136,7 +140,7 @@ class JobRunner implements LoggerAwareInterface {
                // Catch huge single updates that lead to replica DB lag
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
                $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
-               $trxProfiler->setExpectations( $wgTrxProfilerLimits['JobRunner'], __METHOD__ );
+               $trxProfiler->setExpectations( $profilerLimits['JobRunner'], __METHOD__ );
 
                // Some jobs types should not run until a certain timestamp
                $backoffs = []; // map of (type => UNIX expiry)
@@ -362,15 +366,13 @@ class JobRunner implements LoggerAwareInterface {
         * @see $wgJobBackoffThrottling
         */
        private function getBackoffTimeToWait( Job $job ) {
-               global $wgJobBackoffThrottling;
+               $throttling = $this->config->get( 'JobBackoffThrottling' );
 
-               if ( !isset( $wgJobBackoffThrottling[$job->getType()] ) ||
-                       $job instanceof DuplicateJob // no work was done
-               ) {
+               if ( !isset( $throttling[$job->getType()] ) || $job instanceof DuplicateJob ) {
                        return 0; // not throttled
                }
 
-               $itemsPerSecond = $wgJobBackoffThrottling[$job->getType()];
+               $itemsPerSecond = $throttling[$job->getType()];
                if ( $itemsPerSecond <= 0 ) {
                        return 0; // not throttled
                }
@@ -518,17 +520,17 @@ class JobRunner implements LoggerAwareInterface {
         * @throws DBError
         */
        private function commitMasterChanges( LBFactory $lbFactory, Job $job, $fnameTrxOwner ) {
-               global $wgJobSerialCommitThreshold;
+               $syncThreshold = $this->config->get( 'JobSerialCommitThreshold' );
 
                $time = false;
                $lb = $lbFactory->getMainLB( wfWikiID() );
-               if ( $wgJobSerialCommitThreshold !== false && $lb->getServerCount() > 1 ) {
+               if ( $syncThreshold !== false && $lb->getServerCount() > 1 ) {
                        // Generally, there is one master connection to the local DB
                        $dbwSerial = $lb->getAnyOpenConnection( $lb->getWriterIndex() );
                        // We need natively blocking fast locks
                        if ( $dbwSerial && $dbwSerial->namedLocksEnqueue() ) {
                                $time = $dbwSerial->pendingWriteQueryDuration( $dbwSerial::ESTIMATE_DB_APPLY );
-                               if ( $time < $wgJobSerialCommitThreshold ) {
+                               if ( $time < $syncThreshold ) {
                                        $dbwSerial = false;
                                }
                        } else {
@@ -540,7 +542,12 @@ class JobRunner implements LoggerAwareInterface {
                }
 
                if ( !$dbwSerial ) {
-                       $lbFactory->commitMasterChanges( $fnameTrxOwner );
+                       $lbFactory->commitMasterChanges(
+                               $fnameTrxOwner,
+                               // Abort if any transaction was too big
+                               [ 'maxWriteDuration' => $this->config->get( 'MaxJobDBWriteDuration' ) ]
+                       );
+
                        return;
                }
 
@@ -565,7 +572,11 @@ class JobRunner implements LoggerAwareInterface {
                }
 
                // Actually commit the DB master changes
-               $lbFactory->commitMasterChanges( $fnameTrxOwner );
+               $lbFactory->commitMasterChanges(
+                       $fnameTrxOwner,
+                       // Abort if any transaction was too big
+                       [ 'maxWriteDuration' => $this->config->get( 'MaxJobDBWriteDuration' ) ]
+               );
                ScopedCallback::consume( $unlocker );
        }
 }
index 0d3613a..4b4a913 100644 (file)
@@ -247,8 +247,11 @@ class CryptRand {
                        // On Linux, getrandom syscall will be used if available.
                        // On Windows CryptGenRandom will always be used
                        // On other platforms, /dev/urandom will be used.
+                       // Avoids polyfills from before php 7.0
                        // All error situations will throw Exceptions and or Errors
-                       if ( function_exists( 'random_bytes' ) ) {
+                       if ( PHP_VERSION_ID >= 70000
+                               || ( defined( 'HHVM_VERSION_ID' ) && HHVM_VERSION_ID >= 31101 )
+                       ) {
                                $rem = $bytes - strlen( $buffer );
                                $buffer .= random_bytes( $rem );
                        }
index e2f7886..039bd42 100644 (file)
@@ -1250,7 +1250,7 @@ abstract class FileBackendStore extends FileBackend {
         * @return array
         */
        protected function sanitizeOpHeaders( array $op ) {
-               static $longs = [ 'content-disposition', 'x-content-dimensions' ];
+               static $longs = [ 'content-disposition' ];
 
                if ( isset( $op['headers'] ) ) { // op sets HTTP headers
                        $newHeaders = [];
diff --git a/includes/libs/http/HttpAcceptNegotiator.php b/includes/libs/http/HttpAcceptNegotiator.php
new file mode 100644 (file)
index 0000000..5f8d9a6
--- /dev/null
@@ -0,0 +1,139 @@
+<?php
+
+/**
+ * Utility for negotiating a value from a set of supported values using a preference list.
+ * This is intended for use with HTTP headers like Accept, Accept-Language, Accept-Encoding, etc.
+ * See RFC 2616 section 14 for details.
+ *
+ * To use this with a request header, first parse the header value into an array of weights
+ * using HttpAcceptParser, then call getBestSupportedKey.
+ *
+ * @license GPL-2.0+
+ * @author Daniel Kinzler
+ * @author Thiemo Mättig
+ */
+
+namespace Wikimedia\Http;
+
+class HttpAcceptNegotiator {
+
+       /**
+        * @var string[]
+        */
+       private $supportedValues;
+
+       /**
+        * @var string
+        */
+       private $defaultValue;
+
+       /**
+        * @param string[] $supported A list of supported values.
+        */
+       public function __construct( array $supported ) {
+               $this->supportedValues = $supported;
+               $this->defaultValue = reset( $supported );
+       }
+
+       /**
+        * Returns the best supported key from the given weight map. Of the keys from the
+        * $weights parameter that are also in the list of supported values supplied to
+        * the constructor, this returns the key that has the highest weight associated
+        * with it. If two keys have the same weight, the more specific key is preferred,
+        * as required by RFC2616 section 14. Keys that map to 0 or false are ignored.
+        * If no matching key is found, $default is returned.
+        *
+        * @param float[] $weights An associative array mapping accepted values to their
+        *              respective weights.
+        *
+        * @param null|string $default The value to return if non of the keys in $weights
+        *              is supported (null per default).
+        *
+        * @return null|string The best supported key from the $weights parameter.
+        */
+       public function getBestSupportedKey( array $weights, $default = null ) {
+               // Make sure we correctly bias against wildcards and ranges, see RFC2616, section 14.
+               foreach ( $weights as $name => &$weight ) {
+                       if ( $name === '*' || $name === '*/*' ) {
+                               $weight -= 0.000002;
+                       } elseif ( substr( $name, -2 ) === '/*' ) {
+                               $weight -= 0.000001;
+                       }
+               }
+
+               // Sort $weights by value and...
+               asort( $weights );
+
+               // remove any keys with values equal to 0 or false (HTTP/1.1 section 3.9)
+               $weights = array_filter( $weights );
+
+               // ...use the ordered list of keys
+               $preferences = array_reverse( array_keys( $weights ) );
+
+               $value = $this->getFirstSupportedValue( $preferences, $default );
+               return $value;
+       }
+
+       /**
+        * Returns the first supported value from the given preference list. Of the values from
+        * the $preferences parameter that are also in the list of supported values supplied
+        * to the constructor, this returns the value that has the lowest index in the list.
+        * If no such value is found, $default is returned.
+        *
+        * @param string[] $preferences A list of acceptable values, in order of preference.
+        *
+        * @param null|string $default The value to return if non of the keys in $weights
+        *              is supported (null per default).
+        *
+        * @return null|string The best supported key from the $weights parameter.
+        */
+       public function getFirstSupportedValue( array $preferences, $default = null ) {
+               foreach ( $preferences as $value ) {
+                       foreach ( $this->supportedValues as $supported ) {
+                               if ( $this->valueMatches( $value, $supported ) ) {
+                                       return $supported;
+                               }
+                       }
+               }
+
+               return $default;
+       }
+
+       /**
+        * Returns true if the given acceptable value matches the given supported value,
+        * according to the HTTP specification. The following rules are used:
+        *
+        * - comparison is case-insensitive
+        * - if $accepted and $supported are equal, they match
+        * - if $accepted is `*` or `*` followed by `/*`, it matches any $supported value.
+        * - if both $accepted and $supported contain a `/`, and $accepted ends with `/*`,
+        *   they match if the part before the first `/` is equal.
+        *
+        * @param string $accepted An accepted value (may contain wildcards)
+        * @param string  $supported A supported value.
+        *
+        * @return bool Whether the given supported value matches the given accepted value.
+        */
+       private function valueMatches( $accepted, $supported ) {
+               // RDF 2045: MIME types are case insensitive.
+               // full match
+               if ( strcasecmp( $accepted, $supported ) === 0 ) {
+                       return true;
+               }
+
+               // wildcard match (HTTP/1.1 section 14.1, 14.2, 14.3)
+               if ( $accepted === '*' || $accepted === '*/*' ) {
+                       return true;
+               }
+
+               // wildcard match (HTTP/1.1 section 14.1)
+               if ( substr( $accepted, -2 ) === '/*'
+                       && strncasecmp( $accepted, $supported, strlen( $accepted ) - 2 ) === 0
+               ) {
+                       return true;
+               }
+
+               return false;
+       }
+
+}
diff --git a/includes/libs/http/HttpAcceptParser.php b/includes/libs/http/HttpAcceptParser.php
new file mode 100644 (file)
index 0000000..bce071e
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * Utility for parsing a HTTP Accept header value into a weight map. May also be used with
+ * other, similar headers like Accept-Language, Accept-Encoding, etc.
+ *
+ * @license GPL-2.0+
+ * @author Daniel Kinzler
+ */
+
+namespace Wikimedia\Http;
+
+class HttpAcceptParser {
+
+       /**
+        * Parses an HTTP header into a weight map, that is an associative array
+        * mapping values to their respective weights. Any header name preceding
+        * weight spec is ignored for convenience.
+        *
+        * This implementation is partially based on the code at
+        * http://www.thefutureoftheweb.com/blog/use-accept-language-header
+        *
+        * Note that type parameters and accept extension like the "level" parameter
+        * are not supported, weights are derived from "q" values only.
+        *
+        * @todo: If additional type parameters are present, ignore them cleanly.
+        *        At present, they often confuse the result.
+        *
+        * See HTTP/1.1 section 14 for details.
+        *
+        * @param string $rawHeader
+        *
+        * @return array
+        */
+       public function parseWeights( $rawHeader ) {
+               //FIXME: The code below was copied and adapted from WebRequest::getAcceptLang.
+               //       Move this utility class into core for reuse!
+
+               // first, strip header name
+               $rawHeader = preg_replace( '/^[-\w]+:\s*/', '', $rawHeader );
+
+               // Return values in lower case
+               $rawHeader = strtolower( $rawHeader );
+
+               // Break up string into pieces (values and q factors)
+               $value_parse = null;
+               preg_match_all( '@([a-z\d*]+([-+/.][a-z\d*]+)*)\s*(;\s*q\s*=\s*(1(\.0{0,3})?|0(\.\d{0,3})?)?)?@',
+                       $rawHeader, $value_parse );
+
+               if ( !count( $value_parse[1] ) ) {
+                       return [];
+               }
+
+               $values = $value_parse[1];
+               $qvalues = $value_parse[4];
+               $indices = range( 0, count( $value_parse[1] ) - 1 );
+
+               // Set default q factor to 1
+               foreach ( $indices as $index ) {
+                       if ( $qvalues[$index] === '' ) {
+                               $qvalues[$index] = 1;
+                       } elseif ( $qvalues[$index] == 0 ) {
+                               unset( $values[$index], $qvalues[$index], $indices[$index] );
+                       } else {
+                               $qvalues[$index] = (float)$qvalues[$index];
+                       }
+               }
+
+               // Sort list. First by $qvalues, then by order. Reorder $values the same way
+               array_multisort( $qvalues, SORT_DESC, SORT_NUMERIC, $indices, $values );
+
+               // Create a list like "en" => 0.8
+               $weights = array_combine( $values, $qvalues );
+
+               return $weights;
+       }
+
+}
index 5d3534f..823e0dc 100644 (file)
@@ -265,8 +265,9 @@ class TransactionProfiler implements LoggerAwareInterface {
         * @param string $db DB name
         * @param string $id ID string of transaction
         * @param float $writeTime Time spent in write queries
+        * @param integer $affected Number of rows affected by writes
         */
-       public function transactionWritingOut( $server, $db, $id, $writeTime = 0.0 ) {
+       public function transactionWritingOut( $server, $db, $id, $writeTime = 0.0, $affected = 0 ) {
                $name = "{$server} ({$db}) (TRX#$id)";
                if ( !isset( $this->dbTrxMethodTimes[$name] ) ) {
                        $this->logger->info( "Detected no transaction for '$name' - out of sync." );
@@ -284,6 +285,14 @@ class TransactionProfiler implements LoggerAwareInterface {
                        );
                        $slow = true;
                }
+               // Warn if too many rows were changed...
+               if ( $affected > $this->expect['maxAffected'] ) {
+                       $this->reportExpectationViolated(
+                               'maxAffected',
+                               "[transaction $id writes to {$server} ({$db})]",
+                               $affected
+                       );
+               }
                // Fill in the last non-query period...
                $lastQuery = end( $this->dbTrxMethodTimes[$name] );
                if ( $lastQuery ) {
index b6167aa..5b59d2a 100644 (file)
@@ -124,6 +124,10 @@ class DBConnRef implements IDatabase {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
 
+       public function pendingWriteRowsAffected() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
        public function isOpen() {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
index ee7644f..8bea8cc 100644 (file)
@@ -200,6 +200,10 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         * @var integer Number of write queries for the current transaction
         */
        private $mTrxWriteQueryCount = 0;
+       /**
+        * @var integer Number of rows affected by write queries for the current transaction
+        */
+       private $mTrxWriteAffectedRows = 0;
        /**
         * @var float Like mTrxWriteQueryCount but excludes lock-bound, easy to replicate, queries
         */
@@ -583,6 +587,10 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $this->mTrxLevel ? $this->mTrxWriteCallers : [];
        }
 
+       public function pendingWriteRowsAffected() {
+               return $this->mTrxWriteAffectedRows;
+       }
+
        /**
         * Get the list of method names that have pending write queries or callbacks
         * for this transaction
@@ -1011,7 +1019,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                if ( $ret !== false ) {
                        $this->lastPing = $startTime;
                        if ( $isWrite && $this->mTrxLevel ) {
-                               $this->updateTrxWriteQueryTime( $sql, $queryRuntime );
+                               $this->updateTrxWriteQueryTime( $sql, $queryRuntime, $this->affectedRows() );
                                $this->mTrxWriteCallers[] = $fname;
                        }
                }
@@ -1042,8 +1050,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         *
         * @param string $sql A SQL write query
         * @param float $runtime Total runtime, including RTT
+        * @param integer $affected Affected row count
         */
-       private function updateTrxWriteQueryTime( $sql, $runtime ) {
+       private function updateTrxWriteQueryTime( $sql, $runtime, $affected ) {
                // Whether this is indicative of replica DB runtime (except for RBR or ws_repl)
                $indicativeOfReplicaRuntime = true;
                if ( $runtime > self::SLOW_WRITE_SEC ) {
@@ -1058,6 +1067,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 
                $this->mTrxWriteDuration += $runtime;
                $this->mTrxWriteQueryCount += 1;
+               $this->mTrxWriteAffectedRows += $affected;
                if ( $indicativeOfReplicaRuntime ) {
                        $this->mTrxWriteAdjDuration += $runtime;
                        $this->mTrxWriteAdjQueryCount += 1;
@@ -2805,6 +2815,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                $this->mTrxShortId = sprintf( '%06x', mt_rand( 0, 0xffffff ) );
                $this->mTrxWriteDuration = 0.0;
                $this->mTrxWriteQueryCount = 0;
+               $this->mTrxWriteAffectedRows = 0;
                $this->mTrxWriteAdjDuration = 0.0;
                $this->mTrxWriteAdjQueryCount = 0;
                $this->mTrxWriteCallers = [];
@@ -2871,7 +2882,12 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                if ( $this->mTrxDoneWrites ) {
                        $this->mLastWriteTime = microtime( true );
                        $this->trxProfiler->transactionWritingOut(
-                               $this->mServer, $this->mDBname, $this->mTrxShortId, $writeTime );
+                               $this->mServer,
+                               $this->mDBname,
+                               $this->mTrxShortId,
+                               $writeTime,
+                               $this->mTrxWriteAffectedRows
+                       );
                }
 
                $this->runOnTransactionIdleCallbacks( self::TRIGGER_COMMIT );
@@ -2916,7 +2932,10 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                $this->mTrxAtomicLevels = [];
                if ( $this->mTrxDoneWrites ) {
                        $this->trxProfiler->transactionWritingOut(
-                               $this->mServer, $this->mDBname, $this->mTrxShortId );
+                               $this->mServer,
+                               $this->mDBname,
+                               $this->mTrxShortId
+                       );
                }
 
                $this->mTrxIdleCallbacks = []; // clear
index bec26a6..617982c 100644 (file)
@@ -274,6 +274,14 @@ interface IDatabase {
         */
        public function pendingWriteCallers();
 
+       /**
+        * Get the number of affected rows from pending write queries
+        *
+        * @return integer
+        * @since 1.30
+        */
+       public function pendingWriteRowsAffected();
+
        /**
         * Is a connection to the database open?
         * @return bool
diff --git a/includes/linkeddata/PageDataRequestHandler.php b/includes/linkeddata/PageDataRequestHandler.php
new file mode 100644 (file)
index 0000000..9804b2d
--- /dev/null
@@ -0,0 +1,152 @@
+<?php
+
+use Wikimedia\Http\HttpAcceptParser;
+use Wikimedia\Http\HttpAcceptNegotiator;
+
+/**
+ * Request handler implementing a data interface for mediawiki pages.
+ *
+ * @license GPL-2.0+
+ * @author Daniel Kinzler
+ * @author Amir Sarabadanai
+ */
+
+class PageDataRequestHandler {
+
+       /**
+        * Checks whether the request is complete, i.e. whether it contains all information needed
+        * to reply with page data.
+        *
+        * This does not check whether the request is valid and will actually produce a successful
+        * response.
+        *
+        * @param string|null $title Page title
+        * @param WebRequest $request
+        *
+        * @return bool
+        * @throws HttpError
+        */
+       public function canHandleRequest( $title, WebRequest $request ) {
+               if ( $title === '' || $title === null ) {
+                       if ( $request->getText( 'target', '' ) === '' ) {
+                               return false;
+                       }
+               }
+
+               return true;
+       }
+
+       /**
+        * Main method for handling requests.
+        *
+        * @param string $title Page title
+        * @param WebRequest $request The request parameters. Known parameters are:
+        *        - title: the page title
+        *        - format: the format
+        *        - oldid|revision: the revision ID
+        * @param OutputPage $output
+        *
+        * @note: Instead of an output page, a WebResponse could be sufficient, but
+        *        redirect logic is currently implemented in OutputPage.
+        *
+        * @throws HttpError
+        */
+       public function handleRequest( $title, WebRequest $request, OutputPage $output ) {
+               // No matter what: The response is always public
+               $output->getRequest()->response()->header( 'Access-Control-Allow-Origin: *' );
+
+               $revision = 0;
+
+               $title = $request->getText( 'target', $title );
+               $revision = $request->getInt( 'oldid', $revision );
+               $revision = $request->getInt( 'revision', $revision );
+
+               if ( $title === null || $title === '' ) {
+                       //TODO: different error message?
+                       throw new HttpError( 400, wfMessage( 'pagedata-bad-title', $title ) );
+               }
+
+               try {
+                       $title = Title::newFromTextThrow( $title );
+               } catch ( MalformedTitleException $ex ) {
+                       throw new HttpError( 400, wfMessage( 'pagedata-bad-title', $title ) );
+               }
+
+               $this->httpContentNegotiation( $request, $output, $title, $revision );
+       }
+
+       /**
+        * Applies HTTP content negotiation.
+        * If the negotiation is successful, this method will set the appropriate redirect
+        * in the OutputPage object and return. Otherwise, an HttpError is thrown.
+        *
+        * @param WebRequest $request
+        * @param OutputPage $output
+        * @param Title $title
+        * @param int $revision The desired revision
+        *
+        * @throws HttpError
+        */
+       public function httpContentNegotiation(
+               WebRequest $request,
+               OutputPage $output,
+               Title $title,
+               $revision = 0
+       ) {
+               $contentHandler = ContentHandler::getForTitle( $title );
+               $mimeTypes = $contentHandler->getSupportedFormats();
+
+               $headers = $request->getAllHeaders();
+               if ( isset( $headers['ACCEPT'] ) ) {
+                       $parser = new HttpAcceptParser();
+                       $accept = $parser->parseWeights( $headers['ACCEPT'] );
+               } else {
+                       // anything goes
+                       $accept = [
+                               '*' => 0.1 // just to make extra sure
+                       ];
+                       // prefer the default
+                       $accept[$mimeTypes[0]] = 1;
+               }
+
+               $negotiator = new HttpAcceptNegotiator( $mimeTypes );
+               $format = $negotiator->getBestSupportedKey( $accept, null );
+
+               if ( $format === null ) {
+                       $format = isset( $accept['text/html'] ) ? 'text/html' : null;
+               }
+
+               if ( $format === null ) {
+                       $msg = wfMessage( 'pagedata-not-acceptable', implode( ', ', $mimeTypes ) );
+                       throw new HttpError( 406, $msg );
+               }
+
+               $url = $this->getDocUrl( $title, $format, $revision );
+               $output->redirect( $url, 303 );
+       }
+
+       /**
+        * Returns a url representing the given title.
+        *
+        * @param Title $title
+        * @param string|null $format The (normalized) format name, or ''
+        * @param int $revision
+        * @return string
+        */
+       private function getDocUrl( Title $title, $format = '', $revision = 0 ) {
+               $params = [];
+
+               if ( $revision > 0 ) {
+                       $params['oldid'] = $revision;
+               }
+
+               if ( $format === 'text/html' ) {
+                       return $title->getFullURL( $params );
+               }
+
+               $params[ 'action' ] = 'raw';
+
+               return $title->getFullURL( $params );
+       }
+
+}
index f260850..aae66d3 100644 (file)
@@ -461,43 +461,4 @@ class DjVuHandler extends ImageHandler {
                        return false;
                }
        }
-
-       /**
-       * Get useful response headers for GET/HEAD requests for a file with the given metadata
-       * @param $metadata Array Contains this handler's unserialized getMetadata() for a file
-       * @param $fallbackWidth int|null Width to fall back to if metadata doesn't have any
-       * @param $fallbackHeight int|null Height to fall back to if metadata doesn't have any
-       * @return Array
-       * @since 1.30
-       */
-       public function getContentHeaders( $metadata, $fallbackWidth = null, $fallbackHeight = null ) {
-               if ( !isset( $metadata['xml'] ) ) {
-                       return [];
-               }
-
-               $trees = $this->extractTreesFromMetadata( $metadata['xml'] );
-               $dimensionInfo = $this->getDimensionInfoFromMetaTree( $trees['MetaTree'] );
-
-               if ( !$dimensionInfo ) {
-                       return [];
-               }
-
-               $pagesByDimensions = [];
-               $count = $dimensionInfo['pageCount'];
-
-               for ( $i = 1; $i <= $count; $i++ ) {
-                       $dimensions = $dimensionInfo['dimensionsByPage'][ $i - 1 ];
-                       $dimensionString = $dimensions['width'] . 'x' . $dimensions['height'];
-
-                       if ( isset ( $pagesByDimensions[ $dimensionString ] ) ) {
-                               $pagesByDimensions[ $dimensionString ][] = $i;
-                       } else {
-                               $pagesByDimensions[ $dimensionString ] = [ $i ];
-                       }
-               }
-
-               $pageRangesByDimensions = MediaHandler::getPageRangesByDimensions( $pagesByDimensions );
-
-               return [ 'X-Content-Dimensions' => $pageRangesByDimensions ];
-       }
 }
index ec4d372..8896264 100644 (file)
@@ -916,32 +916,10 @@ abstract class MediaHandler {
        /**
        * Get useful response headers for GET/HEAD requests for a file with the given metadata
        * @param $metadata Array Contains this handler's unserialized getMetadata() for a file
-       * @param $fallbackWidth int|null Width to fall back to if metadata doesn't have any
-       * @param $fallbackHeight int|null Height to fall back to if metadata doesn't have any
        * @return Array
        * @since 1.30
        */
-       public function getContentHeaders( $metadata, $fallbackWidth = null, $fallbackHeight = null ) {
-               if ( !isset( $metadata['width'] ) ) {
-                       if ( is_null( $fallbackWidth ) ) {
-                               return [];
-                       }
-
-                       $metadata['width'] = $fallbackWidth;
-               }
-
-               if ( !isset( $metadata['height'] ) ) {
-                       if ( is_null( $fallbackHeight ) ) {
-                               return [];
-                       }
-
-                       $metadata['height'] = $fallbackHeight;
-               }
-
-               $dimensionString = $metadata['width'] . 'x' . $metadata['height'];
-               $pagesByDimensions = [ $dimensionString => [ 1 ] ];
-               $pageRangesByDimensions = MediaHandler::getPageRangesByDimensions( $pagesByDimensions );
-
-               return [ 'X-Content-Dimensions' => $pageRangesByDimensions ];
+       public function getContentHeaders( $metadata ) {
+               return [];
        }
 }
index ccc50f7..7dea271 100644 (file)
@@ -27,7 +27,7 @@
  */
 class CategoryPage extends Article {
        # Subclasses can change this to override the viewer class.
-       protected $mCategoryViewerClass = 'CategoryViewer';
+       public $mCategoryViewerClass = 'CategoryViewer';
 
        /**
         * @var WikiCategoryPage
index 62bafe9..9beafc9 100644 (file)
@@ -19,8 +19,6 @@
  * @ingroup RevisionDelete
  */
 
-use Wikimedia\Rdbms\IDatabase;
-
 /**
  * Item class for an oldimage table row
  */
index 84d3b08..81e2b7e 100644 (file)
@@ -186,6 +186,7 @@ class SpecialPageFactory {
                'Revisiondelete' => 'SpecialRevisionDelete',
                'RunJobs' => 'SpecialRunJobs',
                'Specialpages' => 'SpecialSpecialpages',
+               'PageData' => 'SpecialPageData'
        ];
 
        private static $list;
index 583d4f9..5fa0a73 100644 (file)
@@ -34,7 +34,6 @@ class SpecialNewFiles extends IncludableSpecialPage {
                $this->outputHeader();
 
                $out = $this->getOutput();
-               $out->addModules( 'mediawiki.special.newFiles' );
                $this->addHelpLink( 'Help:New images' );
 
                $opts = new FormOptions();
@@ -149,6 +148,8 @@ class SpecialNewFiles extends IncludableSpecialPage {
                        ->setMethod( 'get' )
                        ->prepareForm()
                        ->displayForm( false );
+
+               $this->getOutput()->addModules( 'mediawiki.special.newFiles' );
        }
 
        protected function getGroupName() {
diff --git a/includes/specials/SpecialPageData.php b/includes/specials/SpecialPageData.php
new file mode 100644 (file)
index 0000000..f7084a8
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * Special page to act as an endpoint for accessing raw page data.
+ * The web server should generally be configured to make this accessible via a canonical URL/URI,
+ * such as <http://my.domain.org/data/main/Foo>.
+ *
+ * @license GPL-2.0+
+ */
+class SpecialPageData extends SpecialPage {
+
+       /**
+        * @var PageDataRequestHandler|null
+        */
+       private $requestHandler = null;
+
+       public function __construct() {
+               parent::__construct( 'PageData' );
+       }
+
+       /**
+        * Sets the request handler to be used by the special page.
+        * May be used when a particular instance of PageDataRequestHandler is already
+        * known, e.g. during testing.
+        *
+        * If no request handler is set using this method, a default handler is created
+        * on demand by initDependencies().
+        *
+        * @param PageDataRequestHandler $requestHandler
+        */
+       public function setRequestHandler( PageDataRequestHandler $requestHandler ) {
+               $this->requestHandler = $requestHandler;
+       }
+
+       /**
+        * Initialize any un-initialized members from global context.
+        * In particular, this initializes $this->requestHandler
+        */
+       protected function initDependencies() {
+               if ( $this->requestHandler === null ) {
+                       $this->requestHandler = $this->newDefaultRequestHandler();
+               }
+       }
+
+       /**
+        * Creates a PageDataRequestHandler based on global defaults.
+        *
+        * @return PageDataRequestHandler
+        */
+       private function newDefaultRequestHandler() {
+
+               return new PageDataRequestHandler();
+       }
+
+       /**
+        * @see SpecialWikibasePage::execute
+        *
+        * @param string|null $subPage
+        *
+        * @throws HttpError
+        */
+       public function execute( $subPage ) {
+               $this->initDependencies();
+
+               // If there is no title, show an HTML form
+               // TODO: Don't do this if HTML is not acceptable according to HTTP headers.
+               if ( !$this->requestHandler->canHandleRequest( $subPage, $this->getRequest() ) ) {
+                       $this->showForm();
+                       return;
+               }
+
+               $this->requestHandler->handleRequest( $subPage, $this->getRequest(), $this->getOutput() );
+       }
+
+       /**
+        * Shows an informative page to the user; Called when there is no page to output.
+        */
+       public function showForm() {
+               $this->getOutput()->showErrorPage( 'pagedata-title', 'pagedata-text' );
+       }
+
+       public function isListed() {
+               // Do not list this page in Special:SpecialPages
+               return false;
+       }
+
+}
index eb4f0cc..fa38506 100644 (file)
@@ -21,7 +21,6 @@
  * @ingroup SpecialPage
  */
 
-use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
 
 /**
index 3dc727b..c8a715b 100644 (file)
@@ -5,7 +5,6 @@ namespace MediaWiki\Tidy;
 use RemexHtml\HTMLData;
 use RemexHtml\Serializer\HtmlFormatter;
 use RemexHtml\Serializer\SerializerNode;
-use RemexHtml\Tokenizer\PlainAttributes;
 
 /**
  * @internal
index acd792d..861fb6d 100644 (file)
@@ -6,7 +6,6 @@ use HtmlArmor;
 use MediaWiki\Linker\LinkRenderer;
 use SearchResult;
 use SpecialSearch;
-use Title;
 use Html;
 
 /**
index 9fe816a..8190442 100644 (file)
@@ -6,7 +6,6 @@ use HtmlArmor;
 use MediaWiki\Linker\LinkRenderer;
 use SearchResult;
 use SpecialSearch;
-use Title;
 
 /**
  * Renders a simple one-line result
index 2020de3..696be25 100644 (file)
        "anontalk": "نقاش",
        "navigation": "تصفح",
        "and": "&#32;و",
-       "qbfind": "جد",
-       "qbbrowse": "تصفح",
-       "qbedit": "عدل",
-       "qbpageoptions": "هذه الصفحة",
-       "qbmyoptions": "صفحاتي",
        "faq": "الأسئلة المتكررة",
-       "faqpage": "Project:أسئلة متكررة",
        "actions": "أفعال",
        "namespaces": "نطاقات",
        "variants": "المتغيرات",
        "edit-local": "تعديل الوصف المحلي",
        "create": "أنشئ",
        "create-local": "أضف وصفا محليا",
-       "editthispage": "عدل هذه الصفحة",
-       "create-this-page": "أنشئ صفحة بهذا العنوان",
        "delete": "حذف",
-       "deletethispage": "احذف هذه الصفحة",
-       "undeletethispage": "استرجع هذه الصفحة",
        "undelete_short": "استرجاع {{PLURAL:$1||تعديل واحد|تعديلين|$1 تعديلات|$1 تعديلاً|$1 تعديل}}",
        "viewdeleted_short": "استعرض {{PLURAL:$1||تعديل واحد|تعديلين|$1 تعديلات|$1 تعديلاً|$1 تعديل}}",
        "protect": "حماية",
        "protect_change": "غير",
-       "protectthispage": "احم هذه الصفحة",
        "unprotect": "غير الحماية",
-       "unprotectthispage": "غير حماية هذه الصفحة",
        "newpage": "صفحة جديدة",
-       "talkpage": "ناقش هذه الصفحة",
        "talkpagelinktext": "نقاش",
        "specialpage": "صفحة خاصة",
        "personaltools": "أدوات شخصية",
-       "articlepage": "اعرض صفحة المحتوى",
        "talk": "نقاش",
        "views": "معاينة",
        "toolbox": "أدوات",
        "tool-link-userrights": "تغيير مجموعات {{GENDER:$1|المستخدم|المستخدمة}}",
        "tool-link-userrights-readonly": "عرض مجموعات {{GENDER:$1|المستخدم|المستخدمة}}",
        "tool-link-emailuser": "أرسل رسالة {{GENDER:$1|لهذا المستخدم|لهذه المستخدمة}}",
-       "userpage": "طالع صفحة المستخدم",
-       "projectpage": "طالع صفحة المشروع",
        "imagepage": "طالع صفحة الملف",
        "mediawikipage": "طالع صفحة الرسالة",
        "templatepage": "طالع صفحة القالب",
index beac634..f46b9d3 100644 (file)
        "anontalk": "Alderique",
        "navigation": "Navegación",
        "and": "&#32;y",
-       "qbfind": "Alcontrar",
-       "qbbrowse": "Navegar",
-       "qbedit": "Editar",
-       "qbpageoptions": "Esta páxina",
-       "qbmyoptions": "Les mios páxines",
        "faq": "EMF (entrugues más frecuentes)",
-       "faqpage": "Project:FAQ",
        "actions": "Aiciones",
        "namespaces": "Espacios de nome",
        "variants": "Variantes",
        "edit-local": "Editar la descripción llocal",
        "create": "Crear",
        "create-local": "Amestar descripción llocal",
-       "editthispage": "Editar esta páxina",
-       "create-this-page": "Crear esta páxina",
        "delete": "Desaniciar",
-       "deletethispage": "Desaniciar esta páxina",
-       "undeletethispage": "Restaurar esta páxina",
        "undelete_short": "Restaurar {{PLURAL:$1|una edición|$1 ediciones}}",
        "viewdeleted_short": "Ver {{PLURAL:$1|una edición desaniciada|$1 ediciones desaniciaes}}",
        "protect": "Protexer",
        "protect_change": "camudar",
-       "protectthispage": "Protexer esta páxina",
        "unprotect": "Camudar la proteición",
-       "unprotectthispage": "Camudar la proteición d'esta páxina",
        "newpage": "Páxina nueva",
-       "talkpage": "Aldericar sobre esta páxina",
        "talkpagelinktext": "Alderique",
        "specialpage": "Páxina especial",
        "personaltools": "Ferramientes personales",
-       "articlepage": "Ver la páxina de conteníu",
        "talk": "Alderique",
        "views": "Vistes",
        "toolbox": "Ferramientes",
        "tool-link-userrights": "Cambiar los grupos {{GENDER:$1|del usuariu|de la usuaria}}",
        "tool-link-userrights-readonly": "Ver los grupos {{GENDER:$1|del usuariu|de la usuaria}}",
        "tool-link-emailuser": "Unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}",
-       "userpage": "Ver la páxina d'usuariu",
-       "projectpage": "Ver la páxina del proyeutu",
        "imagepage": "Ver la páxina del ficheru",
        "mediawikipage": "Ver la páxina del mensaxe",
        "templatepage": "Ver la páxina de plantía",
        "gotointerwiki-invalid": "El títulu especificáu nun ye válidu.",
        "gotointerwiki-external": "Tas a piques de dexar {{SITENAME}} pa visitar [[$2]], que ye un sitiu web distintu.\n\n'''[$1 Siguir a $1]'''",
        "undelete-cantedit": "Nun puedes desfacer el borráu d'esta páxina porque nun tienes permisu pa editala.",
-       "undelete-cantcreate": "Nun puedes desfacer el borráu d'esta páxina porque nun existe nenguna páxina con esti nome y nun tienes permisu pa creala."
+       "undelete-cantcreate": "Nun puedes desfacer el borráu d'esta páxina porque nun existe nenguna páxina con esti nome y nun tienes permisu pa creala.",
+       "pagedata-title": "Datos de la páxina",
+       "pagedata-not-acceptable": "Nun s'alcontró nengún formatu que coincidiera. Tipos MIME soportaos: $1",
+       "pagedata-bad-title": "Títulu inválidu: $1."
 }
index c2c2f60..f104ab7 100644 (file)
        "anontalk": "Ka ici arimowaniok",
        "navigation": "Matcecikinikan",
        "and": "&#32;kaie",
-       "qbbrowse": "Nantowepaha",
-       "qbedit": "Meckotcita",
-       "qbpageoptions": "Nohwe paskickwemakan",
-       "qbmyoptions": "Nipaskickwemakana",
        "namespaces": "Ka ici masinasotcik",
        "variants": "Pitoc",
        "navigation-heading": "Matcecikinikana",
        "edit": "Meckotcita",
        "create": "Ocita",
        "create-local": "Arimota ke acotcictek",
-       "editthispage": "Mecikotona owe",
-       "create-this-page": "Wita ohwe ka masinatek",
        "delete": "Wepina",
        "protect": "Tacikatek",
        "newpage": "Ocki matcecikinakanik",
        "talk": "Ka ici arimowaniwok",
        "views": "Ke icinakok",
        "toolbox": "Irapitcitcikan",
-       "userpage": "Kitci wapataman nihe masinahikan ka apatak",
-       "projectpage": "Kitci wapataman nehe masinihikan ocki otamirowinik otci",
        "imagepage": "Kitci wapataman nihe masinahikan",
        "otherlanguages": "Kotakahi aiarimowewina",
        "redirectedfrom": "(Taci e kiweckwemakak $1)",
index e59b05d..c5b80ae 100644 (file)
        "anontalk": "Müzakirə",
        "navigation": "Naviqasiya",
        "and": "&#32;və",
-       "qbfind": "Tap",
-       "qbbrowse": "Gözdən keçir",
-       "qbedit": "Redaktə",
-       "qbpageoptions": "Bu səhifə",
-       "qbmyoptions": "Mənim səhifələrim",
        "faq": "TSS",
-       "faqpage": "Project:TSS",
        "actions": "Hərəkətlər",
        "namespaces": "Adlar fəzası",
        "variants": "Variantlar",
        "edit-local": "Lokal izahı redaktə et",
        "create": "Yarat",
        "create-local": "Lokal izah əlavə et",
-       "editthispage": "Bu səhifəni redaktə et",
-       "create-this-page": "Bu səhifəni yarat",
        "delete": "Sil",
-       "deletethispage": "Bu səhifəni sil",
-       "undeletethispage": "Bu səhifənin silmə əməliyyatını geri qaytar",
        "undelete_short": "$1 {{PLURAL:$1|dəyişikliyi|dəyişiklikləri}} bərpa et",
        "viewdeleted_short": "{{PLURAL:$1|bir silinmiş redaktəyə|$1 silinmiş redaktəyə}}",
        "protect": "Mühafizə et",
        "protect_change": "dəyiş",
-       "protectthispage": "Bu səhifəni mühafizə et",
        "unprotect": "Mühafizəni kənarlaşdır",
-       "unprotectthispage": "Bu səhifənin mühafizəsini kənarlaşdır",
        "newpage": "Yeni səhifə",
-       "talkpage": "Bu səhifəni müzakirə et",
        "talkpagelinktext": "Müzakirə",
        "specialpage": "Xüsusi səhifə",
        "personaltools": "Şəxsi alətlər",
-       "articlepage": "Məqaləni nəzərdən keçir",
        "talk": "Müzakirə",
        "views": "Görünüş",
        "toolbox": "Alətlər",
-       "userpage": "İstifadəçi səhifəsini göstər",
-       "projectpage": "Layihə səhifəsini göstər",
        "imagepage": "Fayl səhifəsini göstər",
        "mediawikipage": "Mesaj səhifəsini göstər",
        "templatepage": "Şablon səhifəsini göstər",
index dd65fc7..a9dcc4f 100644 (file)
        "anontalk": "دانیشیق",
        "navigation": "دوْلانماق",
        "and": "&#32;و",
-       "qbfind": "تاپ",
-       "qbbrowse": "گؤزدن گئچیرت",
-       "qbedit": "دَییشدیر",
-       "qbpageoptions": "بۇ صفحه‌‌",
-       "qbmyoptions": "صفحه‌‌لریم",
        "faq": "چوْخ سوْروشولان سوْال‌لار",
-       "faqpage": "Project:چوْخ سوْروشولان سوْال‌لار",
        "actions": "چالیشمالار",
        "namespaces": "آد فضالاری",
        "variants": "دئییش‌لر",
        "edit-local": "یئرلی آچیقلامالاری دَییشدیر",
        "create": "یارات",
        "create-local": "یئرلی آچیقلاما آرتیر",
-       "editthispage": "بۇ صحیفه‌‌نی دَییشدیر",
-       "create-this-page": "بۇ صفحه‌‌نی يارات",
        "delete": "سیل",
-       "deletethispage": "بۇ صحیفه‌‌نی سیل",
-       "undeletethispage": "بۇ صحیفه‌نی دیریلت",
        "undelete_short": "{{PLURAL:$1|بیر دَییشیکلیگی|$1 دَییشیکلیگی}} قایتار",
        "viewdeleted_short": "{{PLURAL:$1|بیر|$1}} سیلینمیش دَییشیکلیگه باخ",
        "protect": "قوْرو",
        "protect_change": "ديَیشدیر",
-       "protectthispage": "بۇ صحیفه‌‌نی قوْرو",
        "unprotect": "قوْروماغی دَییشدیر",
-       "unprotectthispage": "بۇ صحیفه‌نین قوْروماسینی دَییشدیر",
        "newpage": "يئنی صفحه‌‌",
-       "talkpage": "بۇ صحیفه‌نی دانیش",
        "talkpagelinktext": "دانیشیق",
        "specialpage": "اؤزل صفحه",
        "personaltools": "شخصی آراجلار",
-       "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
        "views": "گؤرونوشلر",
        "toolbox": "آلتلر",
-       "userpage": "ایشلدن صفحه‌‌سینه باخ",
-       "projectpage": "پروژه صحیفه‌سینه باخ",
        "imagepage": "فایل صحیفه‌سینه باخ",
        "mediawikipage": "مئساژ صحیفه‌سینه باخ",
        "templatepage": "شابلون صحیفه‌سینه باخ",
index 03a7dd2..de0df85 100644 (file)
        "anontalk": "Гутаркі",
        "navigation": "Навігацыя",
        "and": "&#32;і",
-       "qbfind": "Знайсьці",
-       "qbbrowse": "Праглядзець",
-       "qbedit": "Рэдагаваць",
-       "qbpageoptions": "Гэтая старонка",
-       "qbmyoptions": "Мае старонкі",
        "faq": "Частыя пытаньні",
-       "faqpage": "Project:Частыя пытаньні",
        "actions": "Дзеяньні",
        "namespaces": "Прасторы назваў",
        "variants": "Варыянты",
        "edit-local": "Рэдагаваць лякальнае апісаньне",
        "create": "Стварыць",
        "create-local": "Дадаць лякальнае апісаньне",
-       "editthispage": "Рэдагаваць гэтую старонку",
-       "create-this-page": "Стварыць гэтую старонку",
        "delete": "Выдаліць",
-       "deletethispage": "Выдаліць гэтую старонку",
-       "undeletethispage": "Аднавіць гэту старонку",
        "undelete_short": "Аднавіць $1 {{PLURAL:$1|рэдагаваньне|рэдагаваньні|рэдагаваньняў}}",
        "viewdeleted_short": "Паказаць $1 {{PLURAL:$1|выдаленае рэдагаваньне|выдаленыя рэдагаваньні|выдаленых рэдагаваньняў}}",
        "protect": "Абараніць",
        "protect_change": "зьмяніць",
-       "protectthispage": "Абараніць гэтую старонку",
        "unprotect": "Зьмяніць абарону",
-       "unprotectthispage": "Зьмяніць абарону старонкі",
        "newpage": "Новая старонка",
-       "talkpage": "Абмеркаваць гэтую старонку",
        "talkpagelinktext": "гутаркі",
        "specialpage": "Спэцыяльная старонка",
        "personaltools": "Асабістыя прылады",
-       "articlepage": "Паказаць старонку зьместу",
        "talk": "Абмеркаваньне",
        "views": "Рэжымы",
        "toolbox": "Інструмэнты",
        "tool-link-userrights": "Зьмяніць групы {{GENDER:$1|ўдзельніка|ўдзельніцы}}",
        "tool-link-userrights-readonly": "Паказаць групы {{GENDER:$1|ўдзельніка|ўдзельніцы}}",
        "tool-link-emailuser": "Даслаць {{GENDER:$1|удзельніку|удзельніцы}} ліст электроннай поштай",
-       "userpage": "Паказаць старонку ўдзельніка",
-       "projectpage": "Паказаць старонку праекту",
        "imagepage": "Паказаць старонку файла",
        "mediawikipage": "Паказаць старонку паведамленьня",
        "templatepage": "Паказаць старонку шаблёну",
        "authprovider-confirmlink-ok-help": "Працягнуць пасьля паказу паведамленьняў пра памылкі далучэньня.",
        "authprovider-resetpass-skip-label": "Прапусьціць",
        "authprovider-resetpass-skip-help": "Прапусьціць скіданьне паролю.",
+       "authform-nosession-login": "Аўтэнтыфікацыя была пасьпяховай, але ваш браўзэр ня змог «запомніць» уваход у сыстэму.\n\n$1",
+       "authform-nosession-signup": "Рахунак быў створаны, але ваш браўзэр ня змог «запомніць» уваход у сыстэму.\n\n$1",
        "changecredentials": "Зьмена ўліковых зьвестак",
        "removecredentials": "Выдаленьне ўліковых зьвестак",
        "removecredentials-submit": "Выдаліць уліковыя зьвесткі",
index 1004ee3..1cee1b9 100644 (file)
        "anontalk": "Беседа",
        "navigation": "Навигация",
        "and": "&#32;и",
-       "qbfind": "Търсене",
-       "qbbrowse": "Избор",
-       "qbedit": "Редактиране",
-       "qbpageoptions": "Тази страница",
-       "qbmyoptions": "Моите страници",
        "faq": "ЧЗВ",
-       "faqpage": "Project:ЧЗВ",
        "actions": "Действия",
        "namespaces": "Именни пространства",
        "variants": "Варианти",
        "edit-local": "Редактиране на локалното описание",
        "create": "Създаване",
        "create-local": "Добавяне на локално описание",
-       "editthispage": "Редактиране",
-       "create-this-page": "Създаване на страницата",
        "delete": "Изтриване",
-       "deletethispage": "Изтриване",
-       "undeletethispage": "Възстановяване на страницата",
        "undelete_short": "Възстановяване на {{PLURAL:$1|една редакция|$1 редакции}}",
        "viewdeleted_short": "Преглед на {{PLURAL:$1|една изтрита редакция|$1 изтрити редакции}}",
        "protect": "Защита",
        "protect_change": "промяна",
-       "protectthispage": "Защита",
        "unprotect": "Промяна на защитата",
-       "unprotectthispage": "Промяна на защитата на тази страница",
        "newpage": "Нова страница",
-       "talkpage": "Дискусионна страница",
        "talkpagelinktext": "беседа",
        "specialpage": "Специална страница",
        "personaltools": "Лични инструменти",
-       "articlepage": "Преглед на страница",
        "talk": "Беседа",
        "views": "Прегледи",
        "toolbox": "Инструменти",
        "tool-link-userrights": "Промяна на {{GENDER:$1|потребителските}} групи",
        "tool-link-userrights-readonly": "Преглед на {{GENDER:$1|потребителските}} групи",
        "tool-link-emailuser": "Писмо до {{GENDER:$1|потребителя}}",
-       "userpage": "Потребителска страница",
-       "projectpage": "Проектна страница",
        "imagepage": "Преглед на файла",
        "mediawikipage": "Преглед на съобщението",
        "templatepage": "Преглед на шаблона",
index 4a32779..bf65acc 100644 (file)
        "anontalk": "আলাপ",
        "navigation": "পরিভ্রমণ",
        "and": "&#32;এবং",
-       "qbfind": "অনুসন্ধান",
-       "qbbrowse": "ব্রাউজ",
-       "qbedit": "সম্পাদনা",
-       "qbpageoptions": "এই পাতা",
-       "qbmyoptions": "আমার পাতাগুলি",
        "faq": "প্রাজিপ্র",
-       "faqpage": "Project:প্রাজিপ্র",
        "actions": "কার্যক্রম",
        "namespaces": "নামস্থান",
        "variants": "বিকল্পসমূহ",
        "edit-local": "স্থানীয় বিবরণ সম্পাদনা করুন",
        "create": "তৈরি করুন",
        "create-local": "স্থানীয় বিবরণ যোগ করুন",
-       "editthispage": "এই পাতাটি সম্পাদনা করুন",
-       "create-this-page": "এই পাতাটি তৈরি করুন",
        "delete": "অপসারণ",
-       "deletethispage": "এই পাতাটি অপসারণ করুন",
-       "undeletethispage": "পাতাটি পুনরুদ্ধার করুন",
        "undelete_short": "{{PLURAL:$1|১টি সম্পাদনা|$1টি সম্পাদনা}} পুনঃস্থাপন করুন",
        "viewdeleted_short": "{{PLURAL:$1|একটি অপসারিত সম্পাদনা|$1টি অপসারিত সম্পাদনা}} দেখুন",
        "protect": "সুরক্ষা",
        "protect_change": "পরিবর্তন করুন",
-       "protectthispage": "এই পাতাটি সুরক্ষিত করুন",
        "unprotect": "সুরক্ষা পরিবর্তন",
-       "unprotectthispage": "এই পাতার সুরক্ষা পরিবর্তন করুন",
        "newpage": "নতুন পাতা",
-       "talkpage": "আলোচনা করুন",
        "talkpagelinktext": "আলোচনা",
        "specialpage": "বিশেষ পাতা",
        "personaltools": "নিজস্ব সরঞ্জামসমূহ",
-       "articlepage": "বিষয়বস্তুর পাতাটি দেখুন",
        "talk": "আলোচনা",
        "views": "দৃষ্টিকোণ",
        "toolbox": "সরঞ্জাম",
        "tool-link-userrights": "{{GENDER:$1|ব্যবহারকারী}} দল পরিবর্তন করুন",
        "tool-link-userrights-readonly": "{{GENDER:$1|ব্যবহারকারী}} দল দেখুন",
        "tool-link-emailuser": "এই {{GENDER:$1|ব্যবহারকারী}}কে ইমেইল পাঠান",
-       "userpage": "ব্যবহারকারীর পাতা দেখুন",
-       "projectpage": "প্রকল্প পাতাটি দেখুন",
        "imagepage": "ফাইল পাতা দেখুন",
        "mediawikipage": "বার্তার পাতা দেখুন",
        "templatepage": "টেমপ্লেট পাতা দেখুন",
index 4f5efff..945dd7f 100644 (file)
        "anontalk": "Razgovor",
        "navigation": "Navigacija",
        "and": "&#32;i",
-       "qbfind": "Pronađi",
-       "qbbrowse": "Potraži",
-       "qbedit": "Uredi",
-       "qbpageoptions": "Opcije stranice",
-       "qbmyoptions": "Moje opcije",
        "faq": "ČPP",
-       "faqpage": "Project:NPP",
        "actions": "Akcije",
        "namespaces": "Imenski prostori",
        "variants": "Varijante",
        "edit-local": "Uredi lokalni opis",
        "create": "Napravi",
        "create-local": "Dodaj lokalni opis",
-       "editthispage": "Uredite ovu stranicu",
-       "create-this-page": "Napravi ovu stranicu",
        "delete": "Obriši",
-       "deletethispage": "Obriši ovu stranicu",
-       "undeletethispage": "Povrati ovu stranicu",
        "undelete_short": "Vrati obrisanih {{PLURAL:$1|$1 izmjenu|$1 izmjene|$1 izmjena}}",
        "viewdeleted_short": "Pogledaj {{PLURAL:$1|jednu obrisanu izmjenu|$1 obrisane izmjene|$1 obrisanih izmjena}}",
        "protect": "Zaštiti",
        "protect_change": "promijeni",
-       "protectthispage": "Zaštiti ovu stranicu",
        "unprotect": "Promijeni zaštitu",
-       "unprotectthispage": "Promijeni zaštitu ove stranice",
        "newpage": "Nova stranica",
-       "talkpage": "Razgovor o stranici",
        "talkpagelinktext": "razgovor",
        "specialpage": "Posebna stranica",
        "personaltools": "Lični alati",
-       "articlepage": "Pogledaj članak",
        "talk": "Razgovor",
        "views": "Pregledi",
        "toolbox": "Alati",
        "tool-link-userrights": "Promijeni {{GENDER:$1|korisničke}} grupe",
        "tool-link-userrights-readonly": "Vidi {{GENDER:$1|korisničke}} grupe",
        "tool-link-emailuser": "Pošalji e-poruku {{GENDER:$1|korisniku|korisnici}}",
-       "userpage": "Pogledaj korisničku stranicu",
-       "projectpage": "Pogledaj stranicu projekta",
        "imagepage": "Pogledaj stranicu datoteke",
        "mediawikipage": "Pogledaj stranicu sa porukama",
        "templatepage": "Pogledaj stranicu za šablone",
index 068904c..9d1ad3a 100644 (file)
        "anontalk": "Discussió",
        "navigation": "Navegació",
        "and": "&#32;i",
-       "qbfind": "Cerca",
-       "qbbrowse": "Navega",
-       "qbedit": "Modifica",
-       "qbpageoptions": "Opcions de pàgina",
-       "qbmyoptions": "Pàgines pròpies",
        "faq": "PMF",
-       "faqpage": "Project:PMF",
        "actions": "Accions",
        "namespaces": "Espais de noms",
        "variants": "Variants",
        "edit-local": "Modifica la descripció local",
        "create": "Crea",
        "create-local": "Afegeix una descripció local",
-       "editthispage": "Modifica la pàgina",
-       "create-this-page": "Crea aquesta pàgina",
        "delete": "Elimina",
-       "deletethispage": "Elimina la pàgina",
-       "undeletethispage": "Desfés l'eliminació d'aquesta pàgina",
        "undelete_short": "Restaura {{PLURAL:$1|l'edició eliminada|$1 edicions eliminades}}",
        "viewdeleted_short": "Mostra {{PLURAL:$1|una edició eliminada|$1 edicions eliminades}}",
        "protect": "Protegeix",
        "protect_change": "canvia",
-       "protectthispage": "Protegeix aquesta pàgina",
        "unprotect": "Desprotegeix",
-       "unprotectthispage": "Desprotegeix aquesta pàgina",
        "newpage": "Pàgina nova",
-       "talkpage": "Discussió",
        "talkpagelinktext": "discussió",
        "specialpage": "Pàgina especial",
        "personaltools": "Eines de l'usuari",
-       "articlepage": "Mostra la pàgina",
        "talk": "Discussió",
        "views": "Vistes",
        "toolbox": "Eines",
        "tool-link-userrights": "Canvia els grups de l'{{GENDER:$1|usuari|usuària}}",
        "tool-link-userrights-readonly": "Mostra els grups d'{{GENDER:$1|usuari}}",
        "tool-link-emailuser": "Envia un missatge electrònic a l'{{GENDER:$1|usuari|usuària}}",
-       "userpage": "Visualitza la pàgina d'usuari",
-       "projectpage": "Visualitza la pàgina del projecte",
        "imagepage": "Visualitza la pàgina del fitxer",
        "mediawikipage": "Visualitza la pàgina de missatges",
        "templatepage": "Visualitza la pàgina de plantilla",
        "recentchanges-submit": "Mostra",
        "rcfilters-activefilters": "Filtres actius",
        "rcfilters-quickfilters-placeholder-title": "Encara no s’ha desat cap enllaç",
+       "rcfilters-savedqueries-defaultlabel": "Filtres desats",
        "rcfilters-savedqueries-rename": "Reanomena",
+       "rcfilters-savedqueries-setdefault": "Defineix per defecte",
+       "rcfilters-savedqueries-remove": "Suprimeix",
        "rcfilters-savedqueries-new-name-label": "Nom",
        "rcfilters-savedqueries-apply-label": "Desa els paràmetres",
        "rcfilters-savedqueries-cancel-label": "Cancel·la",
+       "rcfilters-savedqueries-add-new-title": "Desa els paràmetres de filtres actuals",
        "rcfilters-restore-default-filters": "Restaura els filtres per defecte",
        "rcfilters-clear-all-filters": "Esborra tots els filtres",
        "rcfilters-search-placeholder": "Canvis recents dels filtres (navegueu o comenceu a escriure)",
        "rcfilters-filter-minor-description": "Modificacions que l'autor va etiquetar com a menors.",
        "rcfilters-filter-major-label": "Modificacions no menors",
        "rcfilters-filter-major-description": "Modificacions no etiquetades com a menors.",
+       "rcfilters-filtergroup-watchlist": "Pàgines en seguiment",
+       "rcfilters-filter-watchlist-watched-label": "A la llista de seguiment",
+       "rcfilters-filter-watchlist-watched-description": "Canvis a les pàgines en la vostra llista de seguiment.",
+       "rcfilters-filter-watchlist-watchednew-label": "Canvis nous a la llista de seguiment",
+       "rcfilters-filter-watchlist-watchednew-description": "Canvis a les pàgines en seguiment que no heu visitat des que van ocórrer els canvis.",
        "rcfilters-filter-watchlist-notwatched-label": "No és a la llista de seguiment",
        "rcfilters-filtergroup-changetype": "Tipus de canvi",
        "rcfilters-filter-pageedits-label": "Modificacions de pàgina",
        "rcfilters-filter-categorization-description": "Registres de pàgines afegides o suprimides de les categories.",
        "rcfilters-filter-logactions-label": "Accions registrades",
        "rcfilters-filter-logactions-description": "Accions administratives, creacions de comptes, eliminacions de pàgines, càrregues...",
+       "rcfilters-filtergroup-lastRevision": "Darrera revisió",
        "rcfilters-filter-lastrevision-label": "Darrera revisió",
+       "rcfilters-filter-lastrevision-description": "El canvi més recent a una pàgina.",
+       "rcfilters-filter-previousrevision-label": "Revisions anteriors",
        "rcnotefrom": "A sota hi ha {{PLURAL:$5|el canvi|els canvis}} a partir de <strong>$3, $4</strong> (fins a <strong>$1</strong>).",
        "rclistfrom": "Mostra els canvis nous des de $3, $2",
        "rcshowhideminor": "$1 edicions menors",
        "tooltip-pt-mycontris": "Llista de {{GENDER:|les vostres}} contribucions",
        "tooltip-pt-anoncontribs": "Una llista de les modificacions fetes des d'aquesta adreça IP",
        "tooltip-pt-login": "Us animem a registrar-vos, però no és obligatori",
+       "tooltip-pt-login-private": "Cal que inicieu una sessió per a utilitzar aquest wiki",
        "tooltip-pt-logout": "Finalitza la sessió d'usuari",
        "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
        "tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
        "mw-widgets-titleinput-description-redirect": "redirigeix a $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Afegeix una categoria...",
        "mw-widgets-usersmultiselect-placeholder": "Afegeix-ne més...",
+       "date-range-from": "De la data:",
+       "date-range-to": "A la data:",
        "sessionmanager-tie": "No es poden combinar diferents tipus de sol·licituds d'autenticació: $1.",
        "sessionprovider-generic": "$1 sessions",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sessions basades en galetes",
index f029b3d..22e4858 100644 (file)
        "anontalk": "Diskuse",
        "navigation": "Navigace",
        "and": "&#32;a",
-       "qbfind": "Hledání",
-       "qbbrowse": "Listování",
-       "qbedit": "Editování",
-       "qbpageoptions": "Tato stránka",
-       "qbmyoptions": "Moje stránky",
        "faq": "Často kladené otázky",
-       "faqpage": "Project:Často kladené otázky",
        "actions": "Akce",
        "namespaces": "Jmenné prostory",
        "variants": "Varianty",
        "edit-local": "Editovat místní popis",
        "create": "Vytvořit",
        "create-local": "Přidat místní popis",
-       "editthispage": "Editovat stránku",
-       "create-this-page": "Vytvořit tuto stránku",
        "delete": "Smazat",
-       "deletethispage": "Smazat stránku",
-       "undeletethispage": "Obnovit tuto stránku",
        "undelete_short": "Obnovit $1 {{PLURAL:$1|verzi|verze|verzí}}",
        "viewdeleted_short": "Zobrazit {{PLURAL:$1|smazanou editaci|$1 smazané editace|$1 smazaných editací}}",
        "protect": "Zamknout",
        "protect_change": "změnit",
-       "protectthispage": "Zamknout stránku",
        "unprotect": "Změnit zámek",
-       "unprotectthispage": "Změnit zámek této stránky",
        "newpage": "Nová stránka",
-       "talkpage": "Diskusní stránka",
        "talkpagelinktext": "diskuse",
        "specialpage": "Speciální stránka",
        "personaltools": "Osobní nástroje",
-       "articlepage": "Prohlédnout si stránku",
        "talk": "Diskuse",
        "views": "Zobrazení",
        "toolbox": "Nástroje",
        "tool-link-userrights": "Změnit uživatelské skupiny {{GENDER:$1|tohoto uživatele|této uživatelky}}",
        "tool-link-userrights-readonly": "Zobrazit {{GENDER:$1|uživatelské}} skupiny",
        "tool-link-emailuser": "Poslat e-mail {{GENDER:$1|tomuto uživateli|této uživatelce}}",
-       "userpage": "Prohlédnout si uživatelskou stránku",
-       "projectpage": "Prohlédnout si stránku projektu",
        "imagepage": "Prohlédnout si stránku o souboru",
        "mediawikipage": "Prohlédnout si text rozhraní",
        "templatepage": "Prohlédnout si šablonu",
index 928d66f..68727dd 100644 (file)
        "anontalk": "Diskussion",
        "navigation": "Navigation",
        "and": "&#32;og",
-       "qbfind": "Søg",
-       "qbbrowse": "Gennemse",
-       "qbedit": "Redigér",
-       "qbpageoptions": "Denne side",
-       "qbmyoptions": "Mine sider",
        "faq": "OSS",
-       "faqpage": "Project:OSS",
        "actions": "Handlinger",
        "namespaces": "Navnerum",
        "variants": "Varianter",
        "edit-local": "Redigér lokal beskrivelse",
        "create": "Opret",
        "create-local": "Tilføj lokal beskrivelse",
-       "editthispage": "Redigér side",
-       "create-this-page": "Opret denne side",
        "delete": "Slet",
-       "deletethispage": "Slet side",
-       "undeletethispage": "Gendan denne side",
        "undelete_short": "Gendan {{PLURAL:$1|én redigering|$1 redigeringer}}",
        "viewdeleted_short": "Vis {{PLURAL:$1|én slettet redigering|$1 slettede redigeringer}}",
        "protect": "Beskyt",
        "protect_change": "ændr",
-       "protectthispage": "Beskyt side",
        "unprotect": "Ændr beskyttelse",
-       "unprotectthispage": "Ændr beskyttelsen af denne side",
        "newpage": "Ny side",
-       "talkpage": "Diskussion",
        "talkpagelinktext": "diskussion",
        "specialpage": "Speciel side",
        "personaltools": "Personlige værktøjer",
-       "articlepage": "Se artiklen",
        "talk": "Diskussion",
        "views": "Visninger",
        "toolbox": "Værktøjer",
        "tool-link-userrights": "Ændre {{GENDER:$1|bruger}}grupper",
        "tool-link-userrights-readonly": "Se {{GENDER:$1|bruger}}grupper",
        "tool-link-emailuser": "Send e-mail til denne {{GENDER:$1|bruger}}",
-       "userpage": "Vis brugerside",
-       "projectpage": "Vis projektside",
        "imagepage": "Vis filside",
        "mediawikipage": "Vis beskedside",
        "templatepage": "Vis skabelonside",
index d48127c..1492aa4 100644 (file)
        "anontalk": "Σελίδα συζήτησης αυτής της διεύθυνσης IP",
        "navigation": "Πλοήγηση",
        "and": "&#32;και",
-       "qbfind": "Εύρεση",
-       "qbbrowse": "Περιήγηση",
-       "qbedit": "Επεξεργασία",
-       "qbpageoptions": "Αυτή η σελίδα",
-       "qbmyoptions": "Οι σελίδες μου",
        "faq": "Συχνές ερωτήσεις",
-       "faqpage": "Project:Συχνές ερωτήσεις",
        "actions": "Ενέργειες",
        "namespaces": "Ονοματοχώροι",
        "variants": "Παραλλαγές",
        "edit-local": "Επεξεργασία τοπικής περιγραφής",
        "create": "Δημιουργία",
        "create-local": "Προσθήκη τοπικής περιγραφής",
-       "editthispage": "Επεξεργασία αυτής της σελίδας",
-       "create-this-page": "Δημιουργία αυτής της σελίδας",
        "delete": "Διαγραφή",
-       "deletethispage": "Διαγραφή αυτής της σελίδας",
-       "undeletethispage": "Επαναφορά αυτής της διαγεγραμμένης σελίδας",
        "undelete_short": "Επαναφορά {{PLURAL:$1|μίας διαγεγραμμένης επεξεργασίας|$1 διαγεγραμμένων επεξεργασιών}}.",
        "viewdeleted_short": "Προβολή {{PLURAL:$1|μίας διαγεγραμμένης επεξεργασίας|$1 διαγεγραμμένων επεξεργασιών}}",
        "protect": "Προστασία",
        "protect_change": "αλλαγή",
-       "protectthispage": "Προστασία αυτής της σελίδας",
        "unprotect": "Αλλαγή προστασίας",
-       "unprotectthispage": "Αλλαγή προστασίας αυτής της σελίδας",
        "newpage": "Νέα σελίδα",
-       "talkpage": "Συζήτηση για αυτήν τη σελίδα",
        "talkpagelinktext": "Συζήτηση",
        "specialpage": "Ειδική σελίδα",
        "personaltools": "Προσωπικά εργαλεία",
-       "articlepage": "Εμφάνιση σελίδας περιεχομένου",
        "talk": "Συζήτηση",
        "views": "Προβολές",
        "toolbox": "Εργαλεία",
        "tool-link-userrights": "Αλλαγή ομάδων {{GENDER:$1|χρήστη}}",
        "tool-link-userrights-readonly": "Εμφάνιση {{GENDER:$1|ομάδων}}  χρηστών",
        "tool-link-emailuser": "Αποστολή e-mail {{GENDER:$1|στο|στη}} χρήστη",
-       "userpage": "Προβολή σελίδας χρήστη",
-       "projectpage": "Προβολή σελίδας εγχειρήματος",
        "imagepage": "Προβολή σελίδας αρχείου",
        "mediawikipage": "Προβολή σελίδας μηνύματος",
        "templatepage": "Προβολή σελίδας προτύπου",
index a3db47b..9f34b7b 100644 (file)
        "anontalk": "Talk",
        "navigation": "Navigation",
        "and": "&#32;and",
-       "qbfind": "Find",
-       "qbbrowse": "Browse",
-       "qbedit": "Edit",
-       "qbpageoptions": "This page",
-       "qbmyoptions": "My pages",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "sitetitle": "{{SITENAME}}",
        "sitesubtitle": "",
        "actions": "Actions",
        "edit-local": "Edit local description",
        "create": "Create",
        "create-local": "Add local description",
-       "editthispage": "Edit this page",
-       "create-this-page": "Create this page",
        "delete": "Delete",
-       "deletethispage": "Delete this page",
-       "undeletethispage": "Undelete this page",
        "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
        "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
        "protect": "Protect",
        "protect_change": "change",
-       "protectthispage": "Protect this page",
        "unprotect": "Change protection",
-       "unprotectthispage": "Change protection of this page",
        "newpage": "New page",
-       "talkpage": "Discuss this page",
        "talkpagelinktext": "talk",
        "specialpage": "Special page",
        "personaltools": "Personal tools",
        "addsection": "+",
-       "articlepage": "View content page",
        "talk": "Discussion",
        "views": "Views",
        "toolbox": "Tools",
        "tool-link-userrights": "Change {{GENDER:$1|user}} groups",
        "tool-link-userrights-readonly": "View {{GENDER:$1|user}} groups",
        "tool-link-emailuser": "Email this {{GENDER:$1|user}}",
-       "userpage": "View user page",
-       "projectpage": "View project page",
        "imagepage": "View file page",
        "mediawikipage": "View message page",
        "templatepage": "View template page",
        "gotointerwiki-invalid": "The specified title is invalid.",
        "gotointerwiki-external": "You are about to leave {{SITENAME}} to visit [[$2]], which is a separate website.\n\n'''[$1 Continue to $1]'''",
        "undelete-cantedit": "You cannot undelete this page as you are not allowed to edit this page.",
-       "undelete-cantcreate": "You cannot undelete this page as there is no existing page with this name and you are not allowed to create this page."
+       "undelete-cantcreate": "You cannot undelete this page as there is no existing page with this name and you are not allowed to create this page.",
+       "pagedata-title": "Page data",
+       "pagedata-text": "This page provides a data interface to pages. Please provide the page title in the URL, using subpage syntax.\n* Content negotiation applies based on you client's Accept header. This means that the page data will be provided in the format preferred by your client.",
+       "pagedata-not-acceptable": "No matching format found. Supported MIME types: $1",
+       "pagedata-bad-title": "Invalid title: $1."
 }
index a594a39..87a00be 100644 (file)
        "anontalk": "Diskuto",
        "navigation": "Navigado",
        "and": "&#32;kaj",
-       "qbfind": "Serĉi",
-       "qbbrowse": "Foliumi",
-       "qbedit": "Redakti",
-       "qbpageoptions": "Ĉi tiu paĝo",
-       "qbmyoptions": "Miaj paĝoj",
        "faq": "Oftaj demandoj",
-       "faqpage": "Project:Oftaj demandoj",
        "actions": "Agoj",
        "namespaces": "Nomspacoj",
        "variants": "Variantoj",
        "edit-local": "Redakti lokan priskribon",
        "create": "Krei",
        "create-local": "Aldoni lokan priskribon",
-       "editthispage": "Redakti la paĝon",
-       "create-this-page": "Krei ĉi tiun paĝon",
        "delete": "Forigi",
-       "deletethispage": "Forigi ĉi tiun paĝon",
-       "undeletethispage": "Restarigi tiun ĉi paĝon",
        "undelete_short": "Malforigi {{PLURAL:$1|redakton|$1 redaktojn}}",
        "viewdeleted_short": "Vidi {{PLURAL:$1|unu forigitan redakton|$1 forigitajn redaktojn}}",
        "protect": "Protekti",
        "protect_change": "ŝanĝi",
-       "protectthispage": "Protekti la paĝon",
        "unprotect": "Ŝanĝi protekton",
-       "unprotectthispage": "Ŝanĝi protekton de ĉi tiu paĝo",
        "newpage": "Nova paĝo",
-       "talkpage": "Diskuti la paĝon",
        "talkpagelinktext": "diskuto",
        "specialpage": "Speciala paĝo",
        "personaltools": "Personaj iloj",
-       "articlepage": "Vidi enhavan paĝon",
        "talk": "Diskuto",
        "views": "Vidoj",
        "toolbox": "Iloj",
        "tool-link-userrights": "Ŝanĝi grupojn de ĉi tiu {{GENDER:$1|uzanto}}",
        "tool-link-userrights-readonly": "Vidi grupojn de {{GENDER:$1|uzanto}}",
        "tool-link-emailuser": "Sendi retpoŝton al ĉi tiu {{GENDER:$1|uzanto}}",
-       "userpage": "Vidi uzantopaĝon",
-       "projectpage": "Rigardi projektopaĝon",
        "imagepage": "Vidi dosieropaĝon",
        "mediawikipage": "Vidi mesaĝopaĝon",
        "templatepage": "Vidi ŝablonopaĝon",
        "page_first": "unua",
        "page_last": "lasta",
        "histlegend": "Klarigo: (nuna) = vidu malsamojn kompare kun la nuna versio, (antaŭa) = malsamojn kompare kun la antaŭa versio, <strong>E</strong> = malgranda redakteto",
-       "history-fieldset-title": "Traserĉi historion",
+       "history-fieldset-title": "Serĉi versiojn",
        "history-show-deleted": "Nur forigitaĵoj",
        "histfirst": "plej malnova",
        "histlast": "plej nova",
        "uploadnewversion-linktext": "Alŝuti novan version de ĉi tiu dosiero",
        "shared-repo-from": "de $1",
        "shared-repo": "komuna dosierujo",
+       "shared-repo-name-wikimediacommons": "Vikimedia Komunejo",
        "upload-disallowed-here": "Vi ne povas superskribi ĉi tiun bildon.",
        "filerevert": "Restarigi $1",
        "filerevert-legend": "Restarigi dosieron",
        "htmlform-user-not-valid": "<strong>$1</strong> ne estas valida salutnomo.",
        "logentry-delete-delete": "$1 forigis paĝon $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|forigis}} alidirektitan $3 per anstataŭigado",
-       "logentry-delete-restore": "$1 restarigis paĝon $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restarigis}} paĝon $3 ($4)",
        "logentry-delete-event": "$1 ŝanĝis videblecon de {{PLURAL:$5|protokola evento|$5 protokolaj eventoj}} je $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|ŝanĝis}} videblecon de {{PLURAL:$5|revizio|$5 reviziojn}} je paĝo $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|ŝanĝis}} videblecon de protokolaj eventoj en $3",
index b8cd52e..a86ccea 100644 (file)
        "anontalk": "Discusión para esta IP",
        "navigation": "Navegación",
        "and": "&#32;y",
-       "qbfind": "Buscar",
-       "qbbrowse": "Examinar",
-       "qbedit": "Editar",
-       "qbpageoptions": "Esta página",
-       "qbmyoptions": "Mis páginas",
        "faq": "PP. FF.",
-       "faqpage": "Project:Preguntas frecuentes",
        "actions": "Acciones",
        "namespaces": "Espacios de nombres",
        "variants": "Variantes",
        "edit-local": "Editar descripción local",
        "create": "Crear",
        "create-local": "Añadir descripción local",
-       "editthispage": "Editar esta página",
-       "create-this-page": "Crear esta página",
        "talkpagelinktext": "Discusión",
        "personaltools": "Herramientas personales",
        "talk": "Discusión",
index ce8da68..be8e3c6 100644 (file)
        "anontalk": "Discusión",
        "navigation": "Navegación",
        "and": "&#32;y",
-       "qbfind": "Buscar",
-       "qbbrowse": "Navegar",
-       "qbedit": "Editar",
-       "qbpageoptions": "Esta página",
-       "qbmyoptions": "Mis páginas",
        "faq": "Preguntas frecuentes",
-       "faqpage": "Project:Preguntas frecuentes",
        "actions": "Acciones",
        "namespaces": "Espacios de nombres",
        "variants": "Variantes",
        "edit-local": "Editar descripción local",
        "create": "Crear",
        "create-local": "Añadir descripción local",
-       "editthispage": "Editar esta página",
-       "create-this-page": "Crear esta página",
        "delete": "Borrar",
-       "deletethispage": "Borrar esta página",
-       "undeletethispage": "Restaurar esta página",
        "undelete_short": "Restaurar {{PLURAL:$1|una edición|$1 ediciones}}",
        "viewdeleted_short": "Ver {{PLURAL:$1|una edición borrada|$1 ediciones borradas}}",
        "protect": "Proteger",
        "protect_change": "cambiar",
-       "protectthispage": "Proteger esta página",
        "unprotect": "Cambiar protección",
-       "unprotectthispage": "Cambiar la protección de esta página",
        "newpage": "Página nueva",
-       "talkpage": "Discutir esta página",
        "talkpagelinktext": "discusión",
        "specialpage": "Página especial",
        "personaltools": "Herramientas personales",
-       "articlepage": "Ver artículo",
        "talk": "Discusión",
        "views": "Vistas",
        "toolbox": "Herramientas",
        "tool-link-userrights": "Modificar grupos {{GENDER:$1|del usuario|de la usuaria}}",
        "tool-link-userrights-readonly": "Ver los grupos {{GENDER:$1|del usuario|de la usuaria}}",
        "tool-link-emailuser": "Enviar un correo a {{GENDER:$1|este usuario|esta usuaria}}",
-       "userpage": "Ver página de usuario",
-       "projectpage": "Ver página del proyecto",
        "imagepage": "Ver página del archivo",
        "mediawikipage": "Ver página del mensaje",
        "templatepage": "Ver página de plantilla",
index d3cb899..d1724f2 100644 (file)
        "anontalk": "بحث",
        "navigation": "ناوبری",
        "and": "&#32;و",
-       "qbfind": "یافتن",
-       "qbbrowse": "مرور",
-       "qbedit": "ویرایش",
-       "qbpageoptions": "این صفحه",
-       "qbmyoptions": "صفحه‌های من",
        "faq": "پرسش‌های متداول",
-       "faqpage": "Project:پرسش‌های متداول",
        "actions": "عملکردها",
        "namespaces": "فضاهای نام",
        "variants": "گویش‌ها",
        "edit-local": "ویرایش توضیحات محلی",
        "create": "ایجاد",
        "create-local": "افزودن توضیحات محلی",
-       "editthispage": "ویرایش این صفحه",
-       "create-this-page": "ایجاد این صفحه",
        "delete": "حذف",
-       "deletethispage": "حذف این صفحه",
-       "undeletethispage": "احیای این صفحه",
        "undelete_short": "احیای {{PLURAL:$1|یک ویرایش|$1 ویرایش}}",
        "viewdeleted_short": "نمایش {{PLURAL:$1|یک ویرایش حذف‌شده|$1 ویرایش حذف‌شده}}",
        "protect": "محافظت",
        "protect_change": "تغییر",
-       "protectthispage": "محافظت از این صفحه",
        "unprotect": "تغییر محافظت",
-       "unprotectthispage": "تغییر محافظت این صفحه",
        "newpage": "صفحهٔ تازه",
-       "talkpage": "بحث دربارهٔ این صفحه",
        "talkpagelinktext": "بحث",
        "specialpage": "صفحهٔ ویژه",
        "personaltools": "ابزارهای شخصی",
-       "articlepage": "نمایش مقاله",
        "talk": "بحث",
        "views": "بازدیدها",
        "toolbox": "ابزارها",
        "tool-link-userrights": "تغییر گروه‌های {{GENDER:$1|کاربر}}",
        "tool-link-userrights-readonly": "نمایش گروه‌های {{GENDER:$1|کاربر}}",
        "tool-link-emailuser": "فرستادن نامه به {{GENDER:$1|کاربر}}",
-       "userpage": "نمایش صفحهٔ کاربر",
-       "projectpage": "نمایش صفحهٔ پروژه",
        "imagepage": "نمایش صفحهٔ پرونده",
        "mediawikipage": "نمایش صفحهٔ پیغام",
        "templatepage": "نمایش صفحهٔ الگو",
        "recentchanges-legend-plusminus": "(<em>±۱۲۳</em>)",
        "recentchanges-submit": "نمایش",
        "rcfilters-activefilters": "پالایه‌های فعال",
-       "rcfilters-quickfilters": "پیوندهای سریع",
+       "rcfilters-quickfilters": "تنظیمات ذخیره‌شدهٔ پالایه",
+       "rcfilters-quickfilters-placeholder-title": "هنوز پیوندی ذخیره نشده‌است",
+       "rcfilters-quickfilters-placeholder-description": "برای ذخیره پالایه‌هایتان و استفاده مجدد آِنها، در محیط فعال پالایه در پایین بر روی دکمهٔ بوک‌مارک کلیک کنید.",
        "rcfilters-savedqueries-defaultlabel": "پالایه‌های ذخیره‌شده",
        "rcfilters-savedqueries-rename": "تغییر نام",
        "rcfilters-savedqueries-setdefault": "تنظیم به عنوان پیش‌فرض",
        "rcfilters-savedqueries-unsetdefault": "حذف از پیش‌فرض",
        "rcfilters-savedqueries-remove": "حذف",
        "rcfilters-savedqueries-new-name-label": "نام",
-       "rcfilters-savedqueries-apply-label": "اÛ\8cجاد Ù¾Û\8cÙ\88Ù\86د Ø³Ø±Û\8cع",
+       "rcfilters-savedqueries-apply-label": "ذخÛ\8cرÙ\87 ØªÙ\86ظÛ\8cÙ\85ات",
        "rcfilters-savedqueries-cancel-label": "لغو",
-       "rcfilters-savedqueries-add-new-title": "ذخیرهٔ پالایه‌ها به عنوان پیوند سریع",
+       "rcfilters-savedqueries-add-new-title": "ذخیره تنظیمات کنونی پالایه",
        "rcfilters-restore-default-filters": "بازگردانی پالایه‌های پیش‌فرض",
        "rcfilters-clear-all-filters": "پاک‌کردن تمام پالایه‌ها",
        "rcfilters-search-placeholder": "پالایش تغییرات اخیر (جستجو یا شروع به تایپ)",
        "rcfilters-filter-categorization-label": "تغییرات رده",
        "rcfilters-filter-categorization-description": "سوابق صفحه‌هایی که به رده‌ها افزوده یا حذف شده‌اند.",
        "rcfilters-filter-logactions-label": "سیاههٔ فعالیت‌ها",
-       "rcfilters-filter-logactions-description": "فعالیت‌های مدیریتی، ایجاد حساب، حذف صفحه، بارگذاری‌ها ....",
+       "rcfilters-filter-logactions-description": "فعالیت‌های مدیریتی، ایجاد حساب، حذف صفحه، بارگذاری‌ها ...",
        "rcfilters-hideminor-conflicts-typeofchange-global": "پالایهٔ «ویرایش جزئی» با یک یا چند تا از پالایه‌های «نوع تغییرات» تعارض دارد چرا که برخی از انواع تغییرات را نمی‌توان به عنوان «جزئی» علامت زد. پالایه‌های دیگر در قسمت «پالایه‌های فعال» در بالا نشان داده شده‌اند.",
        "rcfilters-hideminor-conflicts-typeofchange": "برخی از انواع تغییرات را نمی‌توان به عنوان «جزئی» علامت زد، به همین خاطر این پالایه با پالایه‌های «نوع تغییرات» که در ادامه آمده در تعارض است: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "این پالایهٔ «نوع تغییرات» با پالایهٔ «تغییرات جزئی» در تعارض است. برخی از انواع تغییرات را نمی‌توان به عنوان «جزئی» علامت زد.",
        "autoblocklist-submit": "جستجو کن",
        "autoblocklist-legend": "فهرست قطع دسترسی‌های خودکار",
        "autoblocklist-localblocks": "{{PLURAL:$1|قطع دسترسی خودکار|قطع دسترسی‌های خودکار}} به صورت محلی",
+       "autoblocklist-total-autoblocks": "تعداد کلی بستن‌های خودکار: $1",
        "autoblocklist-empty": "فهرست قطع دسترسی‌های خودکار خالی‌ست.",
        "autoblocklist-otherblocks": "سایر {{PLURAL:$1|قطع دسترسی خودکار|قطع دسترسی‌های خودکار}}",
        "ipblocklist": "کاربران بسته‌شده",
index 71ada4a..2c31ef5 100644 (file)
        "anontalk": "Discussion",
        "navigation": "Navigation",
        "and": "&#32;et",
-       "qbfind": "Rechercher",
-       "qbbrowse": "Parcourir",
-       "qbedit": "Modifier",
-       "qbpageoptions": "Cette page",
-       "qbmyoptions": "Mes pages",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Actions",
        "namespaces": "Espaces de noms",
        "variants": "Variantes",
        "edit-local": "Modifier la description locale",
        "create": "Créer",
        "create-local": "Ajouter une description locale",
-       "editthispage": "Modifier cette page",
-       "create-this-page": "Créer cette page",
        "delete": "Supprimer",
-       "deletethispage": "Supprimer cette page",
-       "undeletethispage": "Restaurer cette page",
        "undelete_short": "Restaurer {{PLURAL:$1|une modification|$1 modifications}}",
        "viewdeleted_short": "Voir {{PLURAL:$1|une modification supprimée|$1 modifications supprimées}}",
        "protect": "Protéger",
        "protect_change": "modifier",
-       "protectthispage": "Protéger cette page",
        "unprotect": "Changer la protection",
-       "unprotectthispage": "Changer la protection de cette page",
        "newpage": "Nouvelle page",
-       "talkpage": "Discussion sur cette page",
        "talkpagelinktext": "discussion",
        "specialpage": "Page spéciale",
        "personaltools": "Outils personnels",
-       "articlepage": "Voir la page de contenu",
        "talk": "Discussion",
        "views": "Affichages",
        "toolbox": "Outils",
        "tool-link-userrights": "Modifier les groupes de l’utilisat{{GENDER:$1|eur|rice}}",
        "tool-link-userrights-readonly": "Voir les {{GENDER:$1|groupes utilisateur}}",
        "tool-link-emailuser": "Envoyer un courriel à {{GENDER:$1|l’utilisateur|l’utilisatrice}}",
-       "userpage": "Voir la page utilisateur",
-       "projectpage": "Voir la page du projet",
        "imagepage": "Voir la page du fichier",
        "mediawikipage": "Voir la page du message",
        "templatepage": "Voir la page du modèle",
index f6eacfa..664b6f5 100644 (file)
        "anontalk": "Conversa",
        "navigation": "Navegación",
        "and": "&#32;e",
-       "qbfind": "Procurar",
-       "qbbrowse": "Navegar",
-       "qbedit": "Editar",
-       "qbpageoptions": "Esta páxina",
-       "qbmyoptions": "As miñas páxinas",
        "faq": "Preguntas máis frecuentes",
-       "faqpage": "Project:FAQ",
        "actions": "Accións",
        "namespaces": "Espazos de nomes",
        "variants": "Variantes",
        "edit-local": "Editar a descrición local",
        "create": "Crear",
        "create-local": "Engadir unha descrición local",
-       "editthispage": "Editar esta páxina",
-       "create-this-page": "Crear esta páxina",
        "delete": "Borrar",
-       "deletethispage": "Borrar esta páxina",
-       "undeletethispage": "Restaurar esta páxina",
        "undelete_short": "Restaurar {{PLURAL:$1|unha edición|$1 edicións}}",
        "viewdeleted_short": "Ver {{PLURAL:$1|unha edición borrada|$1 edicións borradas}}",
        "protect": "Protexer",
        "protect_change": "cambiar",
-       "protectthispage": "Protexer esta páxina",
        "unprotect": "Cambiar a protección",
-       "unprotectthispage": "Cambiar a protección desta páxina",
        "newpage": "Páxina nova",
-       "talkpage": "Conversar sobre esta páxina",
        "talkpagelinktext": "Conversa",
        "specialpage": "Páxina especial",
        "personaltools": "Ferramentas persoais",
-       "articlepage": "Ver a páxina de contido",
        "talk": "Conversa",
        "views": "Vistas",
        "toolbox": "Ferramentas",
        "tool-link-userrights": "Modificar os grupos {{GENDER:$1|do usuario|da usuaria}}",
        "tool-link-userrights-readonly": "Ver os {{GENDER:$1|grupos de usuario}}",
        "tool-link-emailuser": "Enviar un correo electrónico {{GENDER:$1|ao usuario|á usuaria}}",
-       "userpage": "Ver a páxina {{GENDER:{{BASEPAGENAME}}|do usuario|da usuaria}}",
-       "projectpage": "Ver a páxina do proxecto",
        "imagepage": "Ver a páxina do ficheiro",
        "mediawikipage": "Ver a páxina da mensaxe",
        "templatepage": "Ver a páxina do modelo",
index be7130e..15c7bf2 100644 (file)
        "anontalk": "ચર્ચા",
        "navigation": "ભ્રમણ",
        "and": "&#32;અને",
-       "qbfind": "શોધો",
-       "qbbrowse": "બ્રાઉઝ",
-       "qbedit": "ફેરફાર કરો",
-       "qbpageoptions": "આ પાનું",
-       "qbmyoptions": "મારાં પાનાં",
        "faq": "FAQ\nવારંવાર પુછાતા પ્રશ્નો",
-       "faqpage": "Project:વારંવાર પુછાતા પ્રશ્નો",
        "actions": "ક્રિયાઓ",
        "namespaces": "નામાવકાશો",
        "variants": "ભિન્ન રૂપો",
        "edit-local": "સ્થાનિક વર્ણનમાં ફેરફાર કરો",
        "create": "બનાવો",
        "create-local": "સ્થાનિક વર્ણન ઉમેરો",
-       "editthispage": "આ પાનામાં ફેરફાર કરો",
-       "create-this-page": "આ પાનું બનાવો",
        "delete": "રદ કરો",
-       "deletethispage": "આ પાનું હટાવો",
-       "undeletethispage": "આ પાનું પુનર્જીવીત કરો",
        "undelete_short": "હટાવેલ {{PLURAL:$1|એક ફેરફાર|$1 ફેરફારો}} પરત લાવો.",
        "viewdeleted_short": "{{PLURAL:$1|ભૂંસી નાખેલો એક|ભૂંસી નાખેલા $1}} ફેરફાર જુઓ",
        "protect": "સુરક્ષિત કરો",
        "protect_change": "બદલો",
-       "protectthispage": "આ પાનું સુરક્ષિત કરો",
        "unprotect": "સુરક્ષા બદલો",
-       "unprotectthispage": "આ પાનાનું સુરક્ષા  બદલો",
        "newpage": "નવું પાનું",
-       "talkpage": "આ પાના વિષે ચર્ચા કરો",
        "talkpagelinktext": "ચર્ચા",
        "specialpage": "ખાસ પાનું",
        "personaltools": "વ્યક્તિગત સાધનો",
-       "articlepage": "લેખનું પાનું જુઓ",
        "talk": "ચર્ચા",
        "views": "દેખાવ",
        "toolbox": "સાધનો",
-       "userpage": "સભ્યનું પાનું જુઓ",
-       "projectpage": "પ્રકલ્પનું પાનું જુઓ",
        "imagepage": "ફાઇલનું પાનું જુઓ",
        "mediawikipage": "સંદેશનું પાનું જુઓ",
        "templatepage": "ઢાંચાનું પાનુ જુઓ",
index 53f47de..1dab1ea 100644 (file)
        "anontalk": "Razgovor",
        "navigation": "Orijentacija",
        "and": "&#32;i",
-       "qbfind": "Nađi",
-       "qbbrowse": "Pregledaj",
-       "qbedit": "Uredi",
-       "qbpageoptions": "Postavke stranice",
-       "qbmyoptions": "Moje stranice",
        "faq": "Najčešća pitanja",
-       "faqpage": "Project:FAQ",
        "actions": "Radnje",
        "namespaces": "Imenski prostori",
        "variants": "Inačice",
        "edit-local": "Uredi lokalni opis",
        "create": "Započni",
        "create-local": "dodaj lokalni opis",
-       "editthispage": "Uredi ovu stranicu",
-       "create-this-page": "Započni ovu stranicu",
        "delete": "Izbriši",
-       "deletethispage": "Izbriši ovu stranicu",
-       "undeletethispage": "Vrati ovu stranicu",
        "undelete_short": "Vrati {{PLURAL:$1|$1 uređivanje|$1 uređivanja}}",
        "viewdeleted_short": "Prikaži $1 {{PLURAL:$1|izbrisano uređivanje|izbrisana uređivanja|izbrisanih uređivanja}}",
        "protect": "Zaštiti",
        "protect_change": "promijeni",
-       "protectthispage": "Zaštiti ovu stranicu",
        "unprotect": "Promijeni zaštitu",
-       "unprotectthispage": "Promijeni zaštitu ove stranice",
        "newpage": "Nova stranica",
-       "talkpage": "Razgovor o ovoj stranici",
        "talkpagelinktext": "razgovor",
        "specialpage": "Posebna stranica",
        "personaltools": "Osobni alati",
-       "articlepage": "Vidi članak",
        "talk": "Razgovor",
        "views": "Pogledi",
        "toolbox": "Pomagala",
        "tool-link-userrights": "Promijeni {{GENDER:$1|suradnikovu|suradničinu}} pripadnost skupinama",
        "tool-link-userrights-readonly": "Vidi {{GENDER:$1|suradnikovu|suradničinu|suradničku}} pripadnost skupinama",
        "tool-link-emailuser": "Pošalji {{GENDER:$1|suradniku|suradnici}} e-poruku",
-       "userpage": "Vidi suradnikovu stranicu",
-       "projectpage": "Vidi stranicu o projektu",
        "imagepage": "Vidi stranicu datoteke",
        "mediawikipage": "Vidi stranicu za razgovor",
        "templatepage": "Vidi ovaj predložak",
index a764e8b..83a891b 100644 (file)
        "anontalk": "discussioni",
        "navigation": "Navigazione",
        "and": "&#32;e",
-       "qbfind": "Trova",
-       "qbbrowse": "Sfoglia",
-       "qbedit": "Modifica",
-       "qbpageoptions": "Opzioni pagina",
-       "qbmyoptions": "Le mie pagine",
        "faq": "Domande frequenti",
-       "faqpage": "Project:Domande frequenti",
        "actions": "Azioni",
        "namespaces": "Namespace",
        "variants": "Varianti",
        "edit-local": "Modifica descrizione locale",
        "create": "Crea",
        "create-local": "Aggiungi descrizione locale",
-       "editthispage": "Modifica questa pagina",
-       "create-this-page": "Crea questa pagina",
        "delete": "Cancella",
-       "deletethispage": "Cancella questa pagina",
-       "undeletethispage": "Recupera questa pagina",
        "undelete_short": "Recupera {{PLURAL:$1|una versione|$1 versioni}}",
        "viewdeleted_short": "Vedi {{PLURAL:$1|una modifica cancellata|$1 modifiche cancellate}}",
        "protect": "Proteggi",
        "protect_change": "cambia",
-       "protectthispage": "Proteggi questa pagina",
        "unprotect": "Cambia la protezione",
-       "unprotectthispage": "Modifica la protezione di questa pagina",
        "newpage": "Nuova pagina",
-       "talkpage": "Pagina di discussione",
        "talkpagelinktext": "Discussione",
        "specialpage": "Pagina speciale",
        "personaltools": "Strumenti personali",
-       "articlepage": "Visualizza la voce",
        "talk": "Discussione",
        "views": "Visite",
        "toolbox": "Strumenti",
        "tool-link-userrights": "Modifica gruppi {{GENDER:$1|utente}}",
        "tool-link-userrights-readonly": "Visualizza gruppi {{GENDER:$1|utente}}",
        "tool-link-emailuser": "Invia una email a questo {{GENDER:$1|utente}}",
-       "userpage": "Visualizza la pagina utente",
-       "projectpage": "Visualizza la pagina di servizio",
        "imagepage": "Visualizza la pagina del file",
        "mediawikipage": "Visualizza il messaggio",
        "templatepage": "Visualizza il template",
index edeba9c..82f677d 100644 (file)
        "anontalk": "トーク",
        "navigation": "案内",
        "and": "&#32;および",
-       "qbfind": "検索",
-       "qbbrowse": "閲覧",
-       "qbedit": "編集",
-       "qbpageoptions": "このページについて",
-       "qbmyoptions": "自分のページ",
        "faq": "よくある質問と回答",
-       "faqpage": "Project:よくある質問と回答",
        "actions": "操作",
        "namespaces": "名前空間",
        "variants": "変種",
        "edit-local": "ローカルの解説を編集",
        "create": "作成",
        "create-local": "ローカルの解説を作成",
-       "editthispage": "このページを編集",
-       "create-this-page": "このページを作成",
        "delete": "削除",
-       "deletethispage": "このページを削除",
-       "undeletethispage": "このページを復元",
        "undelete_short": "{{PLURAL:$1|$1 編集}}を復元",
        "viewdeleted_short": "{{PLURAL:$1|削除された $1 編集}}を閲覧",
        "protect": "保護",
        "protect_change": "設定変更",
-       "protectthispage": "このページを保護",
        "unprotect": "保護の設定変更",
-       "unprotectthispage": "このページの保護を変更",
        "newpage": "新規ページ",
-       "talkpage": "このページについて話し合う",
        "talkpagelinktext": "トーク",
        "specialpage": "特別ページ",
        "personaltools": "個人用ツール",
-       "articlepage": "本文を表示",
        "talk": "議論",
        "views": "表示",
        "toolbox": "ツール",
        "tool-link-userrights": "{{GENDER:$1|利用者}}グループの変更",
        "tool-link-userrights-readonly": "{{GENDER:$1|利用者}}グループの表示",
        "tool-link-emailuser": "この{{GENDER:$1|利用者}}にメールを送信",
-       "userpage": "利用者ページを表示",
-       "projectpage": "プロジェクトのページを表示",
        "imagepage": "ファイルのページを表示",
        "mediawikipage": "メッセージのページを表示",
        "templatepage": "テンプレートのページを表示",
        "createacct-email-ph": "メールアドレスを入力",
        "createacct-another-email-ph": "メールアドレスを入力",
        "createaccountmail": "無作為な仮パスワードを生成し、指定のメールアドレスに送信",
-       "createaccountmail-help": "パスワードを知ることなく他の人のためにアカウントを作成するために使用することが出来ます。",
+       "createaccountmail-help": "パスワードを知ることなく他人のアカウントを作成することができます。",
        "createacct-realname": "本名 (省略可能)",
        "createacct-reason": "理由",
        "createacct-reason-ph": "アカウントを作成する理由",
        "action-applychangetags": "自分の編集にタグを適用する",
        "action-changetags": "個々の版および記録項目への任意のタグの追加と除去",
        "action-deletechangetags": "データベースからタグの削除",
-       "action-purge": "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ã\83\91ã\83¼ã\82¸ã\81\99ã\82\8b",
+       "action-purge": "ã\82­ã\83£ã\83\83ã\82·ã\83¥ã\81®ç ´æ£\84",
        "nchanges": "$1 {{PLURAL:$1|回の変更}}",
        "enhancedrc-since-last-visit": "最終閲覧以降 $1 {{PLURAL:$1|件}}",
        "enhancedrc-history": "履歴",
        "rcfilters-filter-registered-label": "登録済み",
        "rcfilters-filter-registered-description": "ログイン済みの編集者。",
        "rcfilters-filter-unregistered-label": "未登録",
-       "rcfilters-filter-unregistered-description": "ログインしていない編集者。",
+       "rcfilters-filter-unregistered-description": "ログインしていない利用者。",
        "rcfilters-filter-unregistered-conflicts-user-experience-level": "この項目は、登録済み利用者を編集回数別で絞り込む以下の{{PLURAL:$2|項目}}と競合しています :$1",
        "rcfilters-filtergroup-authorship": "自分の編集か他者の編集か",
        "rcfilters-filter-editsbyself-label": "自分の編集",
        "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "「未登録」の項目が登録済み利用者を絞り込む項目と競合しています。競合している項目は項目選択欄で強調表示されています。",
        "rcfilters-filter-user-experience-level-newcomer-label": "新規利用者",
        "rcfilters-filter-user-experience-level-newcomer-description": "登録から4日以内、かつ10編集以下の利用者",
-       "rcfilters-filter-user-experience-level-learner-label": "一般利用者",
-       "rcfilters-filter-user-experience-level-learner-description": "「新規参加者」よりも編集経験があり、「定着参加者」より編集経験が少ない利用者",
-       "rcfilters-filter-user-experience-level-experienced-label": "定着利用者",
+       "rcfilters-filter-user-experience-level-learner-label": "Learners",
+       "rcfilters-filter-user-experience-level-learner-description": "「新規参加者」よりも編集経験があり、「Experienced users」より編集経験が少ない利用者",
+       "rcfilters-filter-user-experience-level-experienced-label": "Experienced users",
        "rcfilters-filter-user-experience-level-experienced-description": "30日以上、かつ500編集以上の活動履歴がある利用者",
        "rcfilters-filtergroup-automated": "自動編集",
        "rcfilters-filter-bots-label": "ボット",
        "rcfilters-filter-watchlist-watched-label": "ウォッチリストに登録されたページ",
        "rcfilters-filter-watchlist-watched-description": "ウォッチリストに登録されているページの変更",
        "rcfilters-filter-watchlist-watchednew-label": "ウォッチリストのページの新しい変更",
-       "rcfilters-filter-watchlist-watchednew-description": "最終訪問後にウォッチリストに登録されたページに対して行われた変更",
+       "rcfilters-filter-watchlist-watchednew-description": "Changes to Watchlisted pages you haven't visited since the changes occurred.",
        "rcfilters-filter-watchlist-notwatched-label": "ウォッチリストに登録されていないページ",
        "rcfilters-filter-watchlist-notwatched-description": "ウォッチリストに登録されているページ以外の全ての変更。",
        "rcfilters-filtergroup-changetype": "変更の種類",
        "rcshowhidemine": "自分の編集を$1",
        "rcshowhidemine-show": "表示する",
        "rcshowhidemine-hide": "非表示にする",
-       "rcshowhidecategorization": "ã\83\9aã\83¼ã\82¸ã\81®ã\82«ã\83\86ã\82´ã\83ªã\83¼è¿½å\8a ã\83»é\99¤å\8e»を$1",
+       "rcshowhidecategorization": "ã\83\9aã\83¼ã\82¸ã\81®ã\82«ã\83\86ã\82´ã\83ªã\83¼è¿½å\8a ã\83»é\99¤å¤\96を$1",
        "rcshowhidecategorization-show": "表示する",
        "rcshowhidecategorization-hide": "非表示にする",
        "rclinks": "最近 $2 日間の更新を最大 $1 件表示",
        "fileexists-forbidden": "この名前のファイルは既に存在しており、上書きできません。\nアップロードを継続したい場合は、前のページに戻り、別のファイル名を使用してください。\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "この名前のファイルは共有ファイルリポジトリに既に存在しています。\nアップロードを継続したい場合は、前のページに戻り、別のファイル名を使用してください。\n[[File:$1|thumb|center|$1]]",
        "fileexists-no-change": "アップロードされたものは<strong>[[:$1]]</strong>の現在のバージョンのものと全く同じです。",
-       "fileexists-duplicate-version": "ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\82\82ã\81®ã\81¯<strong>[[:$1]]</strong>ã\81®{{PLURAL:$2|é\81\8eå\8e»ã\81®ã\83\90ã\83¼ã\82¸ã\83§ã\83³}}ã\82\92全く同じです。",
+       "fileexists-duplicate-version": "ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\82\82ã\81®ã\81¯<strong>[[:$1]]</strong>ã\81®{{PLURAL:$2|é\81\8eå\8e»ã\81®ã\83\90ã\83¼ã\82¸ã\83§ã\83³}}ã\81¨全く同じです。",
        "file-exists-duplicate": "このファイルは以下の{{PLURAL:$1|ファイル|ファイル群}}と重複しています:",
        "file-deleted-duplicate": "このファイル ([[:$1]]) と同一のファイルが以前に削除されています。\n再度アップロードをする前に、以前削除されたファイルの削除記録を確認してください。",
        "file-deleted-duplicate-notitle": "このファイルと同一のファイルが、以前に削除されページ名が秘匿されました。\n再度アップロードをする前に、秘匿されたファイルのデータを閲覧する権限を持った利用者に連絡して、状況を精査してもらってください。",
        "apisandbox-continue-clear": "消去",
        "apisandbox-param-limit": "最大限度を利用するには<kbd>max</kbd>と入力してください。",
        "apisandbox-multivalue-all-namespaces": "$1 (全ての名前空間)",
-       "apisandbox-multivalue-all-values": "$1 (全ての値",
+       "apisandbox-multivalue-all-values": "$1 (全ての値)",
        "booksources": "書籍情報源",
        "booksources-search-legend": "書籍情報源を検索",
        "booksources-isbn": "ISBN:",
        "booksources-search": "検索",
        "booksources-text": "お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:",
        "booksources-invalid-isbn": "指定した ISBN は有効ではないようです。情報源から写し間違えていないか確認してください。",
-       "magiclink-tracking-rfc": "RFCリンクを使用しているページ",
+       "magiclink-tracking-rfc": "RFCã\83\9eã\82¸ã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bã\83\9aã\83¼ã\82¸",
        "magiclink-tracking-rfc-desc": "このページはRFCマジックリンクを使用しています。移行方法について[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org]を参照してください。",
-       "magiclink-tracking-pmid": "PMIDリンクを使用しているページ",
+       "magiclink-tracking-pmid": "PMIDã\83\9eã\82¸ã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bã\83\9aã\83¼ã\82¸",
        "magiclink-tracking-pmid-desc": "このページはPMIDマジックリンクを使用しています。移行方法について[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org]を参照してください。",
-       "magiclink-tracking-isbn": "ISBNリンクを使用しているページ",
+       "magiclink-tracking-isbn": "ISBNã\83\9eã\82¸ã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bã\83\9aã\83¼ã\82¸",
        "magiclink-tracking-isbn-desc": "このページはISBNマジックリンクを使用しています。移行方法について[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org]を参照してください。",
        "specialloguserlabel": "実行者:",
        "speciallogtitlelabel": "対象 (ページ名または利用者の場合、{{ns:user}}:利用者名):",
        "confirm-purge-title": "このページをパージする",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "このページのキャッシュを破棄しますか?",
-       "confirm-purge-bottom": "ã\83\9aã\83¼ã\82¸ã\81®ã\83\91ã\83¼ã\82¸ã\81«ã\82\88ã\82\8aã\82­ã\83£ã\83\83ã\82·ã\83¥ã\82\92ç ´æ£\84ã\81\97ã\80\81å¼·å\88¶ç\9a\84ã\81«æ\9c\80æ\96°ç\89\88ã\82\92表示ã\81\97ã\81¾ã\81\99ã\80\82",
+       "confirm-purge-bottom": "ページのキャッシュを破棄し、強制的に最新版を表示します。",
        "confirm-watch-button": "OK",
        "confirm-watch-top": "このページをウォッチリストに追加しますか?",
        "confirm-unwatch-button": "OK",
        "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
        "htmlform-date-invalid": "あなたが入力した日付を識別できませんでした。YYYY-MM-DD形式で試してください。",
        "htmlform-time-invalid": "入力された時刻を識別できませんでした。HH:MM:SS形式で試してください。",
-       "htmlform-datetime-invalid": "入力された日付と時刻を識別できませんでした。YYYY-MM-DD HH:MM:SS形式で試してください。",
+       "htmlform-datetime-invalid": "入力された日を識別できませんでした。YYYY-MM-DD HH:MM:SS形式で試してください。",
        "htmlform-date-toolow": "入力された日付は入力できる最も早い日付($1)よりも前です。",
        "htmlform-date-toohigh": "入力された日付は入力できる最も遅い日付($1)よりも後です。",
        "htmlform-time-toolow": "入力された時刻は入力できる最も早い時刻($1)よりも前です。",
        "special-characters-group-thai": "タイ文字",
        "special-characters-group-lao": "ラオス文字",
        "special-characters-group-khmer": "クメール文字",
-       "special-characters-group-canadianaboriginal": "カナダの原住民",
+       "special-characters-group-canadianaboriginal": "カナダ先住民文字",
        "special-characters-title-endash": "en ダッシュ",
        "special-characters-title-emdash": "em ダッシュ",
        "special-characters-title-minus": "マイナス記号",
        "rawhtml-notallowed": "&lt;html&gt;タグは通常ページ以外では使用できません。",
        "gotointerwiki": "{{SITENAME}}を離れる",
        "gotointerwiki-invalid": "指定したページは無効です。",
-       "gotointerwiki-external": "{{SITENAME}}を離れ、別のWebサイトである[[$2]]を訪れようとしています。\n\n'''[$1 $1に行く]'''",
+       "gotointerwiki-external": "{{SITENAME}}を離れ、別のウェブサイトである[[$2]]を訪れようとしています。\n\n'''[$1 $1に行く]'''",
        "undelete-cantedit": "このページを編集する許可がないため復元できません。",
        "undelete-cantcreate": "同名のページが存在せず、このページを作成する許可がないため復元できません。"
 }
index 4d27a1b..b854fe2 100644 (file)
        "anontalk": "Parembugan",
        "navigation": "Navigasi",
        "and": "&#32;lan",
-       "qbfind": "Golèk",
-       "qbbrowse": "Luru",
-       "qbedit": "Besut",
-       "qbpageoptions": "Kaca iki",
-       "qbmyoptions": "Kaca-kacaku",
        "faq": "Pitakon Kerep",
-       "faqpage": "Project:Pitakon Kerep",
        "actions": "Lelabuhan",
        "namespaces": "Mandala aran",
        "variants": "Varian",
        "edit-local": "Besut andharan enggon-enggonan",
        "create": "Gawé",
        "create-local": "Tambah panyadra enggon-enggonan",
-       "editthispage": "Besut kaca iki",
-       "create-this-page": "Gawé kaca iki",
        "delete": "Busak",
-       "deletethispage": "Busak kaca iki",
-       "undeletethispage": "Wurung busak kaca iki",
        "undelete_short": "Wurung busak {{PLURAL:$1|sabesutan|$1 besutan}}",
        "viewdeleted_short": "Deleng {{PLURAL:$1|sabesutan kabusak|$1 besutan kabusak}}",
        "protect": "Reksa",
        "protect_change": "owahi",
-       "protectthispage": "Reksa kaca iki",
        "unprotect": "Owah rereksan",
-       "unprotectthispage": "Owah rereksan kaca iki",
        "newpage": "Kaca anyar",
-       "talkpage": "Rembug kaca iki",
        "talkpagelinktext": "rembugan",
        "specialpage": "Kaca mirunggan",
        "personaltools": "Piranti priangga",
-       "articlepage": "Deleng kaca isi",
        "talk": "Parembugan",
        "views": "Praèn",
        "toolbox": "Piranti",
        "tool-link-userrights": "Owahi golongan {{GENDER:$1|panganggo}}",
        "tool-link-userrights-readonly": "Deleng golongan {{GENDER:$1|panganggo}}",
        "tool-link-emailuser": "Kirimi {{GENDER:$1|panganggo}} iki layang-é",
-       "userpage": "Deleng kaca panganggo",
-       "projectpage": "Deleng kaca proyèk",
        "imagepage": "Deleng kaca barkas",
        "mediawikipage": "Deleng kaca layang",
        "templatepage": "Deleng kaca cithakan",
        "cascadeprotectedwarning": "<strong>Pènget:</strong> Kaca iki wis direksa saéngga mung panganggo kanthi hak pangurus waé sing bisa mbesut amarga kaca iki katranklusi ing {{PLURAL:$1|kaca|kaca-kaca}} sing kareksa runut ngisor iki:",
        "titleprotectedwarning": "'''Pènget: Kaca iki wis dikunci saéngga perlu [[Special:ListGroupRights|hak mligi]] kanggo gawéné.'''\nEntri cathetan pungkasan disadiakake ing ngisor kanggo referensi:",
        "templatesused": "{{PLURAL:$1|Cithakan|Cithakan}} sing dienggo ing kaca iki:",
-       "templatesusedpreview": "{{PLURAL:$1|Cithakan|Cithakan-cithakan}} sing dienggo ing pratilik iki:",
+       "templatesusedpreview": "{{PLURAL:$1|Cithakan}} sing dienggo ing pratuduh iki:",
        "templatesusedsection": "{{PLURAL:$1|Cithakan}} sing dienggo ding bagian iki:",
        "template-protected": "(kareksa)",
        "template-semiprotected": "(semu kareksa)",
        "categories-submit": "Tuduhaké",
        "categoriespagetext": "{{PLURAL:$1|kategori ing ngisor iki ngandhut|kategori ing ngisor iki ngandhut}} kaca utawa media.\n[[Special:UnusedCategories|Kategori sing ora dianggo]] ora ditampilaké ing kéné.\nDeleng uga [[Special:WantedCategories|kategori sing diperlokaké]].",
        "categoriesfrom": "Tuduhaké kategori-kategori sing diwiwiti:",
-       "deletedcontributions": "Sumbangan panganggo sing dibusak",
-       "deletedcontributions-title": "Sumbanganing panganggo sing dibusak",
+       "deletedcontributions": "Sumbangané panganggo sing dibusak",
+       "deletedcontributions-title": "Sumbangané panganggo sing dibusak",
        "sp-deletedcontributions-contribs": "sumbangan",
        "linksearch": "Golèkan pranala njaba",
        "linksearch-pat": "Pola panggolèkan:",
        "maximum-size": "Ukuran maksimum:",
        "pagesize": "(bita)",
        "restriction-edit": "Besut",
-       "restriction-move": "Pamindhahan",
+       "restriction-move": "Lih",
        "restriction-create": "Gawé",
        "restriction-upload": "Unggah",
        "restriction-level-sysop": "kareksa sawutuhé",
        "namespace_association": "Mandala aran magepokan",
        "tooltip-namespace_association": "Centhang kothak iki kanggo nglebokaké uga bilik jeneng gumenan utawa subyèk sing kakait karo bilik jeneng kapilih",
        "blanknamespace": "(Pokok)",
-       "contributions": "Sumbangan {{GENDER:$1|panganggo}}",
-       "contributions-title": "Sumbangan panganggo $1",
+       "contributions": "Sumbangané {{GENDER:$1|panganggo}}",
+       "contributions-title": "Sumbangané panganggo $1",
        "mycontris": "Sumbangan",
        "anoncontribs": "Sumbangan",
        "contribsub2": "Kanggo {{GENDER:$3|$1}} ($2)",
        "year": "Wiwit taun (lan sadurungé):",
        "sp-contributions-newbies": "Tuduhaké mung sumbangané akun-akun anyar waé",
        "sp-contributions-newbies-sub": "Kanggo panganggo anyar",
-       "sp-contributions-newbies-title": "Sumbanganing para panganggo anyar",
-       "sp-contributions-blocklog": "Log blokir",
-       "sp-contributions-deleted": "sumbanganing panganggo sing dibusak",
+       "sp-contributions-newbies-title": "Sumbangané panganggo anyar",
+       "sp-contributions-blocklog": "log blokir",
+       "sp-contributions-deleted": "sumbangané {{GENDER:$1|panganggo}} sing dibusak",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "sp-contributions-talk": "rembug",
        "nolinkshere": "Ora ana kaca sing nduwé pranala menyang '''[[:$1]]'''.",
        "nolinkshere-ns": " Ora ana kaca sing nduwé pranala menyang '''[[:$1]]''' ing bilik jeneng sing kapilih.",
        "isredirect": "kaca lih-lihan",
-       "istemplate": "karo cithakan",
+       "istemplate": "tranklusi",
        "isimage": "pranala barkas",
        "whatlinkshere-prev": "{{PLURAL:$1|sadurungé|$1 sadurungé}}",
        "whatlinkshere-next": "{{PLURAL:$1|sabanjuré|$1 sabanjuré}}",
        "ipb-blocklist": "Ndeleng blokir sing lagi ditrapaké",
        "ipb-blocklist-contribs": "Kontribusi kanggo $1",
        "ipb-blocklist-duration-left": "Kari $1",
-       "unblockip": "Jabel blokir marang alamat IP utawa panganggo",
+       "unblockip": "Copot blokiran panganggo",
        "unblockiptext": "Nggonen formulir ing ngisor iki kanggo mbalèkaké aksès nulis sawijining alamt IP utawa panganggo sing sadurungé diblokir.",
        "ipusubmit": "Ilangna blokir iki",
        "unblocked": "Blokir marang [[User:$1|$1]] wis dijabel",
        "ipblocklist-empty": "Pratélan blokir kosong.",
        "ipblocklist-no-results": "alamat IP utawa panganggo sing disuwun ora diblokir.",
        "blocklink": "palang",
-       "unblocklink": "jabel blokir",
-       "change-blocklink": "owahi blokir",
+       "unblocklink": "copot blokiran",
+       "change-blocklink": "owahi blokiran",
        "contribslink": "sumbangan",
        "emaillink": "kirim layang-èl",
        "autoblocker": "Panjenengan otomatis dipun-blok amargi nganggé alamat protokol internet (IP) ingkang sami kaliyan \"[[User:$1|$1]]\". Alesanipun $1 dipun blok inggih punika \"'''$2'''\"",
        "revertmove": "balèkaké",
        "delete_and_move_text": "Kaca jujugan \"[[:$1]]\" wis ana.\nApa sampéyan kersa mbusak iku supaya kacané bisa dilih?",
        "delete_and_move_confirm": "Ya, busak kaca iku.",
-       "delete_and_move_reason": "Dibusak kanggo jaga-jaga ananing pamindhahan saka \"[[$1]]\"",
+       "delete_and_move_reason": "Dibusak kanggo sarana ngalihaké saka \"[[$1]]\"",
        "selfmove": "Sesirah sumber lan tujuan padha;\nora bisa ngalih nyang tujuan sing padha.",
        "immobile-source-namespace": "Ora bisa mindhahaké kaca jroning bilik jeneng \"$1\"",
        "immobile-target-namespace": "Ora bisa mindhahaké kaca menyang bilik jeneng \"$1\"",
-       "immobile-target-namespace-iw": "Pranala interwiki dudu target sing sah kanggo pamindhahan kaca.",
+       "immobile-target-namespace-iw": "Pranala interwiki dudu tujuan sing trep tumrap pangalihé kaca.",
        "immobile-source-page": "Kaca iki ora bisa dilih-lih.",
        "immobile-target-page": "Ora bisa mindhahaké menyang irah-irahan tujuan kasebut.",
        "bad-target-model": "Tujuan sing diarepaké nganggo gagrag isi sing béda. Ora bisa ngganti $1 dadi $2.",
        "export-addnstext": "Nambahaké kaca saka bilik jeneng:",
        "export-addns": "Tambah",
        "export-download": "Simpen minangka berkas",
-       "export-templates": "Kalebu cithakan-cithakan",
+       "export-templates": "Lebokaké cithakan",
        "export-pagelinks": "Lebokaké kaca sing kagayut nyang jeroning:",
        "export-manual": "Tambah kaca kanthi manual:",
        "allmessages": "Layang sistem",
        "tooltip-pt-anontalk": "Parembug ing besutan-besutan saka alamat IP iki",
        "tooltip-pt-preferences": "Pilih-pilihaning {{GENDER:|sampéyan}}",
        "tooltip-pt-watchlist": "Pratélaning kaca sing sampéyan awasi owah-owahané",
-       "tooltip-pt-mycontris": "Pratélaning sumbanganing {{GENDER:|sampéyan}}",
+       "tooltip-pt-mycontris": "Pratélané sumbangané {{GENDER:|panjenengan}}",
        "tooltip-pt-anoncontribs": "Pratélan besutané alamat IP iki",
        "tooltip-pt-login": "Panjenengan prayogané mlebu log, sanadyan ora kudu",
        "tooltip-pt-login-private": "Panjenengan kudu mlebu log supaya bisa nganggo wiki iki",
        "tooltip-t-recentchangeslinked": "Owah-owahan anyar saka kaca-kaca sing nggayut kaca iki",
        "tooltip-feed-rss": "''RSS feed'' kanggo kaca iki",
        "tooltip-feed-atom": "''Atom feed'' kanggo kaca iki",
-       "tooltip-t-contributions": "Pratélaning sumbangan {{GENDER:$1|panganggo iki}}",
+       "tooltip-t-contributions": "Pratélané sumbangané {{GENDER:$1|panganggo iki}}",
        "tooltip-t-emailuser": "Kirimi layang-èl nyang {{GENDER:$1|panganggo iki}}",
        "tooltip-t-info": "Katerangan liyané ngenani kaca iki",
        "tooltip-t-upload": "Unggah barkas",
index 41b7162..c586fa1 100644 (file)
        "anontalk": "განხილვა",
        "navigation": "ნავიგაცია",
        "and": "&#32;და",
-       "qbfind": "მოძებნე",
-       "qbbrowse": "გადახედე",
-       "qbedit": "რედაქტირება",
-       "qbpageoptions": "ეს გვერდი",
-       "qbmyoptions": "ჩემი გვერდები",
        "faq": "ხშირი შეკითხვები",
-       "faqpage": "Project:ხშირი შეკითხვები",
        "actions": "მოქმედებები",
        "namespaces": "სახელთა სივრცე",
        "variants": "ვარიანტები",
        "edit-local": "ლოკალური აღწერის რედაქტირება",
        "create": "შექმნა",
        "create-local": "ლოკალური აღწერის დამატება",
-       "editthispage": "გვერდის რედაქტირება",
-       "create-this-page": "ამ გვერდის შექმნა",
        "delete": "წაშლა",
-       "deletethispage": "გვერდის წაშლა",
-       "undeletethispage": "ამ გვერდის აღდგენა",
        "undelete_short": "გააუქმე წაშლა {{PLURAL:$1|ერთი რედაქტირება|$1 რედაქტირება}}",
        "viewdeleted_short": "{{PLURAL:$1|წაშლილი რედაქტირების|$1 წაშლილი რედაქტირებების}} ხილვა",
        "protect": "დაბლოკე",
        "protect_change": "შეცვლა",
-       "protectthispage": "დაბლოკე ეს გვერდი",
        "unprotect": "დაცვის შეცვლა",
-       "unprotectthispage": "შეცვალე ამ გვერდის დაცვის დონე",
        "newpage": "ახალი გვერდი",
-       "talkpage": "მოცემული გვერდის განხილვა",
        "talkpagelinktext": "განხილვა",
        "specialpage": "სპეციალური გვერდი",
        "personaltools": "პირადი ხელსაწყოები",
-       "articlepage": "სტატიის ნახვა",
        "talk": "განხილვა",
        "views": "გადახედვა",
        "toolbox": "ხელსაწყოები",
        "tool-link-userrights": "{{GENDER:$1|მომხმარებლის}} ჯგუფების შეცვლა",
        "tool-link-userrights-readonly": "{{GENDER:$1|მომხმარებლის}} ჯგუფების ხილვა",
        "tool-link-emailuser": "{{GENDER:$1|მომხმარებლისთვის}} ი-მეილის მიწერა",
-       "userpage": "გადახედე მომხმარებლის გვერდს",
-       "projectpage": "დაათვალიერე პროექტის გვერდი",
        "imagepage": "ფაილის გვერდის ნახვა",
        "mediawikipage": "გადახედე შეტყობინების გვერდს",
        "templatepage": "გადახედე თარგის გვერდს",
index 969b2e0..772a6cf 100644 (file)
        "anontalk": "토론",
        "navigation": "둘러보기",
        "and": ",",
-       "qbfind": "찾기",
-       "qbbrowse": "찾아보기",
-       "qbedit": "편집",
-       "qbpageoptions": "문서 기능",
-       "qbmyoptions": "내 사용자 문서",
        "faq": "자주 묻는 질문",
-       "faqpage": "Project:FAQ",
        "actions": "행위",
        "namespaces": "이름공간",
        "variants": "변수",
        "edit-local": "로컬 설명 편집",
        "create": "만들기",
        "create-local": "로컬 설명 추가",
-       "editthispage": "이 문서 편집하기",
-       "create-this-page": "이 문서 만들기",
        "delete": "삭제",
-       "deletethispage": "이 문서 삭제하기",
-       "undeletethispage": "이 문서를 되살리기",
        "undelete_short": "{{PLURAL:$1|편집 한 개|편집 $1개}} 되살리기",
        "viewdeleted_short": "{{PLURAL:$1|삭제된 편집 한 개|삭제된 편집 $1개}} 보기",
        "protect": "보호",
        "protect_change": "바꾸기",
-       "protectthispage": "이 문서 보호하기",
        "unprotect": "보호 설정 바꾸기",
-       "unprotectthispage": "이 문서의 보호 설정을 바꾸기",
        "newpage": "새 문서",
-       "talkpage": "토론 문서",
        "talkpagelinktext": "토론",
        "specialpage": "특수 문서",
        "personaltools": "개인 도구",
-       "articlepage": "문서 보기",
        "talk": "토론",
        "views": "보기",
        "toolbox": "도구",
        "tool-link-userrights": "{{GENDER:$1|사용자}} 그룹 변경",
        "tool-link-userrights-readonly": "{{GENDER:$1|사용자}} 그룹을 보기",
        "tool-link-emailuser": "이 {{GENDER:$1|사용자}}에게 이메일 보내기",
-       "userpage": "사용자 문서 보기",
-       "projectpage": "프로젝트 문서 보기",
        "imagepage": "파일 문서 보기",
        "mediawikipage": "메시지 문서 보기",
        "templatepage": "틀 문서 보기",
        "rcfilters-filter-watchlist-watched-label": "주시문서 목록에서",
        "rcfilters-filter-watchlist-watched-description": "주시문서 목록의 문서의 변경사항입니다.",
        "rcfilters-filter-watchlist-watchednew-label": "새로운 주시문서 목록 변경사항",
+       "rcfilters-filter-watchlist-watchednew-description": "변경사항이 발생한 이후로 방문한 적이 없는 주시 중인 문서의 변경사항입니다.",
        "rcfilters-filter-watchlist-notwatched-label": "주시문서 목록에서가 아닌",
        "rcfilters-filter-watchlist-notwatched-description": "주시 중인 문서의 변경사항을 제외한 모든 사항입니다.",
        "rcfilters-filtergroup-changetype": "차이 종류",
        "rcfilters-filter-lastrevision-label": "마지막 판",
        "rcfilters-filter-lastrevision-description": "문서의 최근 변경사항입니다.",
        "rcfilters-filter-previousrevision-label": "이전 판",
+       "rcfilters-filter-previousrevision-description": "문서에 대한 최근 변경사항이 아닌 모든 변경사항입니다.",
        "rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 표시됨)",
        "rclistfromreset": "날짜 선택 초기화",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
index 44653cd..d3c0888 100644 (file)
        "anontalk": "Diskussioun",
        "navigation": "Navigatioun",
        "and": "&#32;a(n)",
-       "qbfind": "Fannen",
-       "qbbrowse": "Duerchsichen",
-       "qbedit": "Änneren",
-       "qbpageoptions": "Säitenoptiounen",
-       "qbmyoptions": "Meng Säiten",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Aktiounen",
        "namespaces": "Nummraim",
        "variants": "Varianten",
        "edit-local": "Lokal Beschreiwung änneren",
        "create": "Uleeën",
        "create-local": "Lokal Beschreiwung derbäisetzen",
-       "editthispage": "Dës Säit änneren",
-       "create-this-page": "Dës Säit uleeën",
        "delete": "Läschen",
-       "deletethispage": "Dës Säit läschen",
-       "undeletethispage": "Dës Säit restauréieren",
        "undelete_short": "$1 {{PLURAL:$1|Versioun|Versioune}} restauréieren",
        "viewdeleted_short": "{{PLURAL:$1|Eng geläschte Versioun|$1 geläscht Versioune}} weisen",
        "protect": "Spären",
        "protect_change": "änneren",
-       "protectthispage": "Dës Säit schützen",
        "unprotect": "Spär änneren",
-       "unprotectthispage": "D'Spär vun dëser Säit änneren",
        "newpage": "Nei Säit",
-       "talkpage": "Diskussioun",
        "talkpagelinktext": "Diskussioun",
        "specialpage": "Spezialsäit",
        "personaltools": "Perséinlech Tools",
-       "articlepage": "Säit",
        "talk": "Diskussioun",
        "views": "Affichagen",
        "toolbox": "Geschirkëscht",
        "tool-link-userrights": "{{GENDER:$1|Benotzer}}gruppen änneren",
        "tool-link-userrights-readonly": "{{GENDER:$1|Benotzer}}gruppe weisen",
        "tool-link-emailuser": "{{GENDER:$1|Dëser Benotzerin|Dësem Benotzer}} eng Mail schécken",
-       "userpage": "Benotzersäit",
-       "projectpage": "Meta-Text",
        "imagepage": "Billersäit kucken",
        "mediawikipage": "Säit mat de Message weisen",
        "templatepage": "Schabloune(säit) weisen",
        "rcfilters-filter-newpages-label": "Ugeluechte Säiten",
        "rcfilters-filter-categorization-label": "Ännerunge vun de Kategorien:",
        "rcfilters-filter-logactions-label": "Protokolléiert Aktiounen",
+       "rcfilters-hideminor-conflicts-typeofchange": "Verschidden Type vu Ännerunge kënnen net als \"kleng\" markéiert ginn, dofir ass dëse Filter a Konflikt mat dësem Typ vun Ännerungsfilteren: $1",
        "rcfilters-filtergroup-lastRevision": "Lescht Versioun",
        "rcfilters-filter-lastrevision-label": "Lescht Versioun",
        "rcfilters-filter-lastrevision-description": "Déi lescht Ännerung op enger Säit",
index d0ef772..f829501 100644 (file)
        "anontalk": "Discuscion pe questo addresso IP",
        "navigation": "Navegaçión",
        "and": "&#32;e",
-       "qbfind": "Attrêuva",
-       "qbbrowse": "Navvega",
-       "qbedit": "Cangia",
-       "qbpageoptions": "Opsioîn de 'sta paggina",
-       "qbmyoptions": "E mæ paggine",
        "faq": "Domande frequenti",
-       "faqpage": "Project:Domande frequente",
        "actions": "Açioìn",
        "namespaces": "Namespaces",
        "variants": "Diferense",
        "edit-local": "Modifica descrission locale",
        "create": "Crea",
        "create-local": "Azonzi descrission locale",
-       "editthispage": "Modificâ 'sta pagina",
-       "create-this-page": "Crea 'sta paggina",
        "delete": "Scancella",
-       "deletethispage": "Scassa 'sta paggina",
-       "undeletethispage": "Recuppera sta paggina",
        "undelete_short": "Recuppera {{PLURAL:$1|una revixon|$1 revixoin}}",
        "viewdeleted_short": "{{PLURAL:$1|una modiffica cançelâ|$1 modiffiche cançelæ}}",
        "protect": "Protezi",
        "protect_change": "cangia",
-       "protectthispage": "Proteze 'sta paggina.",
        "unprotect": "Càngia proteçión",
-       "unprotectthispage": "Càngia a proteçión de sta paggina",
        "newpage": "Nêuva pàgina",
-       "talkpage": "Paggina de discuscion",
        "talkpagelinktext": "Ciæti",
        "specialpage": "Pagina speçiâ",
        "personaltools": "Strumenti personâli",
-       "articlepage": "Veddi a voxe",
        "talk": "Discuscion",
        "views": "Vìxite",
        "toolbox": "Arneixi",
        "tool-link-userrights": "Modiffica groppi {{GENDER:$1|utente}}",
        "tool-link-userrights-readonly": "Vixualizza groppi {{GENDER:$1|utente}}",
        "tool-link-emailuser": "Manda un'e-mail a questo {{GENDER:$1|utente}}",
-       "userpage": "Veddi a paggina utente",
-       "projectpage": "Amia a paggina de serviççio",
        "imagepage": "Vizualizza a paggina do file",
        "mediawikipage": "Vizualizza o messaggio",
        "templatepage": "Vizualizza o modello",
        "htmlform-user-not-exists": "'''$1''' o no l'existe.",
        "htmlform-user-not-valid": "<strong>$1</strong> o no l'è un nomme utente vallido.",
        "logentry-delete-delete": "$1 {{GENDER:$2|o l'ha scassou}} a paggina $3",
-       "logentry-delete-restore": "$1 {{GENDER:$2|o|a}} l'ha ripristinou a paggina $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|o|a}} l'ha ripristinou a paggina $3 ($4)",
        "logentry-delete-event": "$1 {{GENDER:$2|o|a}} l'ha modificou a vixibilitæ de {{PLURAL:$5|un'açion do registro|$5 açioin do registro}} de \"$3\": $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|o l'ha modificou}} a vixibilitæ pe {{PLURAL:$5|una verscion|$5 verscioin}} da paggina $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|o l'ha modificou}} a vixibilitæ de quarche açion do registro de $3",
index 4cf917e..bb0588a 100644 (file)
        "anontalk": "Aptarimas",
        "navigation": "Naršymas",
        "and": "&#32;ir",
-       "qbfind": "Paieška",
-       "qbbrowse": "Naršymas",
-       "qbedit": "Taisyti",
-       "qbpageoptions": "Šis puslapis",
-       "qbmyoptions": "Mano puslapiai",
        "faq": "DUK",
-       "faqpage": "Project:DUK",
        "actions": "Veiksmai",
        "namespaces": "Vardų sritys",
        "variants": "Variantai",
        "edit-local": "Redaguoti vietos aprašymą",
        "create": "Sukurti",
        "create-local": "Pridėti vietos aprašymą",
-       "editthispage": "Redaguoti šį puslapį",
-       "create-this-page": "Sukurti šį puslapį",
        "delete": "Trinti",
-       "deletethispage": "Ištrinti šį puslapį",
-       "undeletethispage": "Atkurti šį puslapį",
        "undelete_short": "Atkurti $1 {{PLURAL:$1:redagavimą|redagavimus|redagavimų}}",
        "viewdeleted_short": "Peržiūrėti $1 {{PLURAL:$1|ištrintą keitimą|ištrintus keitimus|ištrintų keitimų}}",
        "protect": "Užrakinti",
        "protect_change": "keisti",
-       "protectthispage": "Rakinti šį puslapį",
        "unprotect": "Keisti apsaugą",
-       "unprotectthispage": "Keisti šio puslapio apsaugą",
        "newpage": "Naujas puslapis",
-       "talkpage": "Aptarti šį puslapį",
        "talkpagelinktext": "Aptarimas",
        "specialpage": "Specialusis puslapis",
        "personaltools": "Asmeniniai įrankiai",
-       "articlepage": "Rodyti turinio puslapį",
        "talk": "Aptarimas",
        "views": "Peržiūros",
        "toolbox": "Įrankiai",
        "tool-link-userrights": "Keisti {{GENDER:$1|naudotojo|naudotojos}} grupes",
        "tool-link-userrights-readonly": "Žiūrėti {{GENDER:$1|vartotojo|vartotojos}} grupes",
        "tool-link-emailuser": "Siųsti {{GENDER:$1|šiam naudotojui|šiai naudotojai}} el. laišką",
-       "userpage": "Rodyti naudotojo puslapį",
-       "projectpage": "Rodyti projekto puslapį",
        "imagepage": "Žiūrėti failo puslapį",
        "mediawikipage": "Rodyti pranešimo puslapį",
        "templatepage": "Rodyti šablono puslapį",
index 6e1fd5a..9ff946d 100644 (file)
        "anontalk": "Diskusijas",
        "navigation": "Navigācija",
        "and": "&#32;un",
-       "qbfind": "Meklēšana",
-       "qbbrowse": "Navigācija",
-       "qbedit": "Labošana",
-       "qbpageoptions": "Šī lapa",
-       "qbmyoptions": "Manas lapas",
        "faq": "BUJ",
-       "faqpage": "Project:BUJ",
        "actions": "Darbības",
        "namespaces": "Vārdtelpas",
        "variants": "Varianti",
        "edit-local": "Labot vietējo aprakstu",
        "create": "Izveidot",
        "create-local": "Pievienot vietējo aprakstu",
-       "editthispage": "Izmainīt šo lapu",
-       "create-this-page": "Izveidot šo lapu",
        "delete": "Dzēst",
-       "deletethispage": "Dzēst šo lapu",
-       "undeletethispage": "Atjaunot šo lapu",
        "undelete_short": "Atjaunot $1 {{PLURAL:$1|versijas|versiju|versijas}}",
        "viewdeleted_short": "Apskatīt {{PLURAL:$1|$1 dzēstus labojumus|$1 dzēstu labojumu|$1 dzēstus labojumus}}",
        "protect": "Aizsargāt",
        "protect_change": "izmainīt",
-       "protectthispage": "Aizsargāt šo lapu",
        "unprotect": "Mainīt aizsardzību",
-       "unprotectthispage": "Mainīt šīs lapas aizsardzību",
        "newpage": "Jauna lapa",
-       "talkpage": "Diskusija par šo lapu",
        "talkpagelinktext": "Diskusija",
        "specialpage": "Īpašā Lapa",
        "personaltools": "Dalībnieka rīki",
-       "articlepage": "Apskatīt rakstu",
        "talk": "Diskusija",
        "views": "Apskates",
        "toolbox": "Rīki",
        "tool-link-userrights": "Mainīt {{GENDER:$1|dalībnieka|dalībnieces}} grupas",
        "tool-link-userrights-readonly": "Apskatīt {{GENDER:$1|dalībnieka|dalībnieces}} grupas",
        "tool-link-emailuser": "Nosūtīt e-pastu {{GENDER:$1|šim dalībniekam|šai dalībniecei}}",
-       "userpage": "Skatīt dalībnieka lapu",
-       "projectpage": "Skatīt projekta lapu",
        "imagepage": "Skatīt faila lapu",
        "mediawikipage": "Skatīt paziņojuma lapu",
        "templatepage": "Skatīt veidnes lapu",
index 5d79b9a..a0f331d 100644 (file)
        "anontalk": "議",
        "navigation": "導",
        "and": "與",
-       "qbfind": "尋",
-       "qbbrowse": "覽",
-       "qbedit": "纂",
-       "qbpageoptions": "此頁",
-       "qbmyoptions": "吾好",
        "faq": "頻答問",
-       "faqpage": "Project:頻答問",
        "actions": "動",
        "namespaces": "名集",
        "variants": "變字",
        "edit-local": "纂地言",
        "create": "立",
        "create-local": "增地言",
-       "editthispage": "纂",
-       "create-this-page": "立",
        "delete": "刪",
-       "deletethispage": "刪是頁",
-       "undeletethispage": "反刪此頁",
        "undelete_short": "還$1已刪",
        "viewdeleted_short": "察$1已刪",
        "protect": "緘",
        "protect_change": "易",
-       "protectthispage": "緘封",
        "unprotect": "啟",
-       "unprotectthispage": "啟函",
        "newpage": "新頁",
-       "talkpage": "參議此文",
        "talkpagelinktext": "議",
        "specialpage": "特查",
        "personaltools": "家私",
-       "articlepage": "閱內文",
        "talk": "議",
        "views": "覽",
        "toolbox": "多寶",
-       "userpage": "簿",
-       "projectpage": "計畫",
        "imagepage": "述",
        "mediawikipage": "觀訊",
        "templatepage": "鑄模",
index a57b00d..35a7e31 100644 (file)
        "anontalk": "Pejin-dresaka",
        "navigation": "Fikarohana",
        "and": "&#32;sy",
-       "qbfind": "Tadiavina",
-       "qbbrowse": "Tadiavina",
-       "qbedit": "Hanova",
-       "qbpageoptions": "Ity pejy ity",
-       "qbmyoptions": "Ny pejiko",
        "faq": "FMM",
-       "faqpage": "Project:FMM",
        "actions": "Tao",
        "namespaces": "Valam-pejy",
        "variants": "Ny ''skin'' Voasintona",
        "edit-local": "Hanova ny famisavisana eo an-toerana",
        "create": "Amboarina",
        "create-local": "Hanampy famisavisana eo an-toerana",
-       "editthispage": "Hanova ity pejy ity",
-       "create-this-page": "Forony ity pejy ity",
        "delete": "Hamafa",
-       "deletethispage": "Fafao ity pejy ity",
-       "undeletethispage": "Hamerina ity pejy ity",
        "undelete_short": "Famerenana fanovana {{PLURAL:$1|$1|$1}}",
        "viewdeleted_short": "Hijery fanovana voafafa {{PLURAL:$1|tokana|$1}}",
        "protect": "Hiaro",
        "protect_change": "ovaina",
-       "protectthispage": "Hiaro an'ity pejy ity",
        "unprotect": "Hanala ny fiarovana",
-       "unprotectthispage": "Hanala idy an'ity pejy ity",
        "newpage": "Pejy vaovao",
-       "talkpage": "Dinidinika momba ity pejy ity",
        "talkpagelinktext": "Dinika",
        "specialpage": "Pejy manokana",
        "personaltools": "Fitaovana manokana",
-       "articlepage": "Hijery ny votoatin'ny pejy",
        "talk": "dinika",
        "views": "Fijerena",
        "toolbox": "Fitaovana",
        "tool-link-userrights": "Hanova ny vondron'i {{GENDER:$1|}}mpikambana",
        "tool-link-userrights-readonly": "Hijery ny vondron'ny mpikambana{{GENDER:$1|}}",
        "tool-link-emailuser": "Handefa mailaka an'ity mpikambana ity{{GENDER:$1|}}",
-       "userpage": "Hijery ny pejy manokan'ny mpikambana",
-       "projectpage": "Pejy meta",
        "imagepage": "Jereo ny pejin'ny sary",
        "mediawikipage": "Hijery ny pejy misy io hafatra io",
        "templatepage": "Jereo ny pejin'ny endrika",
        "pageinfo-header-restrictions": "Fiarovana an'ilay pejy",
        "pageinfo-header-properties": "Tondron'ilay pejy",
        "pageinfo-display-title": "Lohateny aseho",
+       "pageinfo-default-sort": "Lakilem-pampirimana raha tsy misy",
        "pageinfo-length": "Halavam-pejy (oktety)",
        "pageinfo-article-id": "Laharam-pejy",
        "pageinfo-language": "Tenin'ny votoatiny",
        "pageinfo-authors": "Isa manontolon'ny mpandray anjara",
        "pageinfo-recent-edits": "Fanovana vao haingana (natao tanatin'ny $1)",
        "pageinfo-recent-authors": "Isa vao haingan'ny mpanoratra misongadina",
+       "pageinfo-magic-words": "Teny majika{{PLURAL:$1|}} ($1)",
        "pageinfo-hidden-categories": "Sokajy nafenina{{PLURAL:$1}} ($1)",
        "pageinfo-templates": "Endrika natsofoka{{PLURAL:$1}} ($1)",
        "pageinfo-transclusions": "Pejy natsofoka tanatin'i ($1){{PLURAL:}}",
        "watchlistedit-clear-legend": "Handio ny lisitra arahanao",
        "watchlistedit-clear-explain": "Ho esorina amin'ny lisitry ny pejy arahanao ny lohateny rehetra",
        "watchlistedit-clear-titles": "Lohateny:",
+       "watchlisttools-clear": "Handio ny lisitra arahanao",
        "watchlisttools-view": "pejy arahako maso",
        "watchlisttools-edit": "Jereo sy ovao ny lisitra ny pejy fanaraha-maso",
        "watchlisttools-raw": "Ovay ilay pejy arahako maso amizao",
        "mw-widgets-titleinput-description-new-page": "Tsy mbola misy ilay pejy",
        "mw-widgets-usersmultiselect-placeholder": "Hanampy be kokoa",
        "sessionmanager-tie": "Tsy afaka mampikambana karazan-kataka fampamantarana maromaro: $1.",
+       "randomrootpage": "Foto-pejy kisendra",
        "log-action-filter-all": "Manontolo",
        "log-action-filter-block-block": "Bolongana",
        "log-action-filter-protect-protect": "Fiarovana",
index adc6828..92b6003 100644 (file)
        "anontalk": "Разговор",
        "navigation": "Прегледник",
        "and": "&#32;и",
-       "qbfind": "Најди",
-       "qbbrowse": "Прелистај",
-       "qbedit": "Уреди",
-       "qbpageoptions": "Оваа страница",
-       "qbmyoptions": "Мои страници",
        "faq": "ЧПП",
-       "faqpage": "Project:ЧПП",
        "actions": "Дејства",
        "namespaces": "Именски простори",
        "variants": "Варијанти",
        "edit-local": "Уреди месен опис",
        "create": "Создај",
        "create-local": "Додај месен опис",
-       "editthispage": "Уреди ја страницава",
-       "create-this-page": "Создај ја страницава",
        "delete": "Избриши",
-       "deletethispage": "Избриши ја страницава",
-       "undeletethispage": "обнови ја страницава",
        "undelete_short": "Врати {{PLURAL:$1|едно уредување|$1 уредувања}}",
        "viewdeleted_short": "Преглед на {{PLURAL:$1|едно избришано уредување|$1 избришани уредувања}}",
        "protect": "Заштити",
        "protect_change": "промена",
-       "protectthispage": "Заштити ја страницава",
        "unprotect": "Измени заштита",
-       "unprotectthispage": "Измена на заштитата на страницава",
        "newpage": "Нова страница",
-       "talkpage": "Разговор",
        "talkpagelinktext": "разговор",
        "specialpage": "Службена страница",
        "personaltools": "Лични алатки",
-       "articlepage": "Преглед на содржината",
        "talk": "Разговор",
        "views": "Посети",
        "toolbox": "Алатки",
        "tool-link-userrights": "Смени ги {{GENDER:$1|корисничките}} групи",
        "tool-link-userrights-readonly": "Погл. {{GENDER:$1|кориснички}} групи",
        "tool-link-emailuser": "Испрати е-пошта на {{GENDER:$1|корисников}}",
-       "userpage": "Преглед на корисничката страница",
-       "projectpage": "Преглед на проектната страница",
        "imagepage": "Преглед на страницата на податотеката",
        "mediawikipage": "Преглед на пораката",
        "templatepage": "Преглед на шаблонот",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Прикажи",
        "rcfilters-activefilters": "Активни филтри",
-       "rcfilters-quickfilters": "Ð\91Ñ\80зи Ð²Ñ\80Ñ\81ки",
+       "rcfilters-quickfilters": "Ð\97аÑ\87Ñ\83вани Ñ\84илÑ\82еÑ\80Ñ\81ки Ð¿Ð¾Ñ\81Ñ\82авки",
        "rcfilters-quickfilters-placeholder-title": "Засега нема зачувани врски",
        "rcfilters-quickfilters-placeholder-description": "За да ги зачувате вашите филтерски псотавки за да ги употребите другпат, стиснете на иконката за бележник во подрачјето „Активен филтер“ подолу.",
        "rcfilters-savedqueries-defaultlabel": "Зачувани филтри",
        "rcfilters-savedqueries-unsetdefault": "Отстрани од основно",
        "rcfilters-savedqueries-remove": "Отстрани",
        "rcfilters-savedqueries-new-name-label": "Назив",
-       "rcfilters-savedqueries-apply-label": "Ð\9dапÑ\80ави Ð±Ñ\80за Ð²Ñ\80Ñ\81ка",
+       "rcfilters-savedqueries-apply-label": "Ð\97аÑ\87Ñ\83ваÑ\98 Ð¿Ð¾Ñ\81Ñ\82авки",
        "rcfilters-savedqueries-cancel-label": "Откажи",
-       "rcfilters-savedqueries-add-new-title": "Ð\97аÑ\87Ñ\83ваÑ\98 Ñ\84илÑ\82Ñ\80и ÐºÐ°ÐºÐ¾ Ð±Ñ\80за Ð²Ñ\80Ñ\81ка",
+       "rcfilters-savedqueries-add-new-title": "Ð\97аÑ\87Ñ\83ваÑ\98 Ñ\82ековни Ñ\84илÑ\82еÑ\80Ñ\81ки Ð¿Ð¾Ñ\81Ñ\82авки",
        "rcfilters-restore-default-filters": "Поврати основни филтри",
        "rcfilters-clear-all-filters": "Тргни ги сите филтри",
        "rcfilters-search-placeholder": "Филтрирај скорешни промени (прелстајте или почнете да пишувате)",
index a987d6f..af8796e 100644 (file)
        "anontalk": "Overleg",
        "navigation": "Navigasie",
        "and": "&#32;en",
-       "qbfind": "Zeuken",
-       "qbbrowse": "Blaojen",
-       "qbedit": "Bewark",
-       "qbpageoptions": "Disse zied",
-       "qbmyoptions": "Veurkeuren",
        "faq": "Vragen die vake esteld wörden",
-       "faqpage": "Project:Vragen die vake esteld wörden",
        "actions": "Haandeling",
        "namespaces": "Naamruumtes",
        "variants": "Variaanten",
        "edit-local": "Lokale beschrieving bewarken",
        "create": "Anmaken",
        "create-local": "Lokale beschrieving derbie doon",
-       "editthispage": "Disse zied bewarken",
-       "create-this-page": "Disse zied anmaken",
        "delete": "Vortdoon",
-       "deletethispage": "Disse zied vortdoon",
-       "undeletethispage": "Zied weerummeplaotsen",
        "undelete_short": "$1 {{PLURAL:$1|versie|versies}} weerummeplaotsen",
        "viewdeleted_short": "{{PLURAL:$1|Eén versie die vortedaon is|$1 versies die vortedaon bin}} bekieken",
        "protect": "Beveiligen",
        "protect_change": "wiezigen",
-       "protectthispage": "Beveiligen",
        "unprotect": "Beveiliging wiezigen",
-       "unprotectthispage": "Beveiliging van disse zied wiezigen",
        "newpage": "Nieje zied",
-       "talkpage": "Overlegzied",
        "talkpagelinktext": "Overleg",
        "specialpage": "Spesiale zied",
        "personaltools": "Persoonlike instellingen",
-       "articlepage": "Artikel",
        "talk": "Overleg",
        "views": "Weergaven",
        "toolbox": "Hulpmiddels",
-       "userpage": "gebrukerszied",
-       "projectpage": "Bekiek projektzied",
        "imagepage": "Bestaandszied bekieken",
        "mediawikipage": "Tiejige bekieken",
        "templatepage": "Mal bekieken",
        "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zie oek de [[Special:NewPages|lieste mit nieje ziejen]])",
        "recentchanges-submit": "Bekiek",
+       "rcfilters-activefilters": "Aktieve filters",
+       "rcfilters-quickfilters": "Op-esleugen filterinstellingen",
+       "rcfilters-quickfilters-placeholder-title": "Nog gien verwiezingen op-esleugen",
+       "rcfilters-quickfilters-placeholder-description": "Um joew filterinstellingen op te slaon en t laoter te gebruken, klik op t bladwiezerikoon onderan bie \"Aktieve filter\".",
+       "rcfilters-savedqueries-apply-label": "Instellingen opslaon",
+       "rcfilters-savedqueries-cancel-label": "Aofbreken",
+       "rcfilters-savedqueries-add-new-title": "Filterinstellingen opslaon",
+       "rcfilters-restore-default-filters": "Standardfilters weerummezetten",
+       "rcfilters-clear-all-filters": "Alle filters vortdoon",
+       "rcfilters-search-placeholder": "Filter leste wiezigingen (blaojer of begin mit intypen)",
+       "rcfilters-filterlist-feedbacklink": "Geef kommentaar op de nieje (bèta)filters",
+       "rcfilters-highlightbutton-title": "Resultaoten markeren",
+       "rcfilters-highlightmenu-title": "Kies n kleur",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Meenselik (gien bot)",
+       "rcfilters-filter-humans-description": "Bewarkingen deur meenselike bewarkers.",
+       "rcfilters-filtergroup-reviewstatus": "Beoordelingsstaotus",
+       "rcfilters-filter-patrolled-label": "Nao-ekeken",
+       "rcfilters-filter-unpatrolled-label": "Niet nao-ekeken",
+       "rcfilters-filtergroup-significance": "Petansie",
+       "rcfilters-filter-minor-label": "Kleine bewarkingen",
+       "rcfilters-filter-major-label": "Gien kleine bewarking",
+       "rcfilters-filter-major-description": "Bewarkingen niet emarkeerd as klein.",
+       "rcfilters-filtergroup-watchlist": "Evolgde ziejen",
+       "rcfilters-filter-watchlist-watched-label": "Op de volglieste",
+       "rcfilters-filter-watchlist-watched-description": "Wiezigingen an ziejen op joew volglieste.",
+       "rcfilters-filter-watchlist-watchednew-label": "Nieje volgliestwiezigingen",
+       "rcfilters-filter-watchlist-notwatched-label": "Niet op de volglieste",
+       "rcfilters-filter-watchlist-notwatched-description": "Alles behalve wiezigingen an ziejen die op joew volglieste staon.",
+       "rcfilters-filter-pageedits-label": "Ziedbewarkingen",
+       "rcfilters-filter-newpages-label": "Nieje ziejen",
+       "rcfilters-filter-newpages-description": "Bewarkingen waormee'j een nieje zied anmaken.",
+       "rcfilters-filter-categorization-label": "Kategoriewiezigingen",
+       "rcfilters-filter-logactions-label": "Eregistreerden aksies",
+       "rcfilters-filtergroup-lastRevision": "Leste versie",
+       "rcfilters-filter-lastrevision-label": "Leste versie",
+       "rcfilters-filter-previousrevision-label": "Eerdere versies",
        "rcnotefrom": "Dit bin de wiezigingen sinds <strong>$2</strong> (maximum van <strong>$1</strong> wiezigingen).",
        "rclistfrom": "Bekiek wiezigingen vanaof $3 $2",
        "rcshowhideminor": "$1 kleine wiezigingen",
        "upload-too-many-redirects": "Der zatten te veule deurverwiezingen in de URL.",
        "upload-http-error": "Der is n HTTP-fout op-etrejen: $1",
        "upload-copy-upload-invalid-domain": "Bestaanden per kopie opsturen is niet beschikbaor vanuut dit domein.",
+       "upload-dialog-button-cancel": "Aofbreken",
+       "upload-dialog-button-back": "Weerumme",
+       "upload-dialog-button-done": "Ree",
+       "upload-dialog-button-save": "Opslaon",
+       "upload-dialog-button-upload": "Bestaand opsturen",
+       "upload-form-label-infoform-title": "Details",
+       "upload-form-label-infoform-name": "Naam",
+       "upload-form-label-infoform-description": "Beschrieving",
+       "upload-form-label-usage-title": "Gebruuk",
+       "upload-form-label-usage-filename": "Bestaandsnaam",
+       "upload-form-label-infoform-categories": "Kategorieën",
+       "upload-form-label-infoform-date": "Daotum",
        "backend-fail-stream": "t Was niet meugelik t bestaand $1 te streumen.",
        "backend-fail-backup": "t Was niet meugelik n reservekopie van t bestaand $1 te maken.",
        "backend-fail-notexists": "t Bestaand $1 besteet niet.",
        "wlnote": "Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofgeleupen ure|de leste $2 uren}} vanaof $3 um $4.",
        "wlshowlast": "Laot de veurbieje $1 uur $2 dagen  zien",
        "watchlist-submit": "Bekiek",
+       "wlshowhideminor": "kleine bewarkingen",
        "watchlist-options": "Opsies veur de volglieste",
        "watching": "Volg...",
        "unwatching": "Niet volgen...",
index 0ae1aa6..b89df5f 100644 (file)
        "anontalk": "Overleg",
        "navigation": "Navigatie",
        "and": "&#32;en",
-       "qbfind": "Zoeken",
-       "qbbrowse": "Bladeren",
-       "qbedit": "Bewerken",
-       "qbpageoptions": "Deze pagina",
-       "qbmyoptions": "Mijn pagina's",
        "faq": "Veelgestelde vragen",
-       "faqpage": "Project:Veelgestelde vragen",
        "actions": "Handelingen",
        "namespaces": "Naamruimten",
        "variants": "Varianten",
        "edit-local": "Lokale beschrijving bewerken",
        "create": "Aanmaken",
        "create-local": "Lokale beschrijving toevoegen",
-       "editthispage": "Deze pagina bewerken",
-       "create-this-page": "Deze pagina aanmaken",
        "delete": "Verwijderen",
-       "deletethispage": "Deze pagina verwijderen",
-       "undeletethispage": "Pagina terugplaatsen",
        "undelete_short": "{{PLURAL:$1|één bewerking|$1 bewerkingen}} terugplaatsen",
        "viewdeleted_short": "{{PLURAL:$1|Eén geschrapte bewerking |$1 geschrapte bewerkingen}} bekijken",
        "protect": "Beveiligen",
        "protect_change": "wijzigen",
-       "protectthispage": "Deze pagina beveiligen",
        "unprotect": "Beveiliging wijzigen",
-       "unprotectthispage": "Beveiliging van deze pagina wijzigen",
        "newpage": "Nieuwe pagina",
-       "talkpage": "Overlegpagina",
        "talkpagelinktext": "overleg",
        "specialpage": "Speciale pagina",
        "personaltools": "Persoonlijke instellingen",
-       "articlepage": "Pagina bekijken",
        "talk": "Overleg",
        "views": "Weergaven",
        "toolbox": "Hulpmiddelen",
        "tool-link-userrights": "{{GENDER:$1|Gebruikersgroepen}} wijzigen",
        "tool-link-userrights-readonly": "{{GENDER:$1|Gebruikers}}groepen weergeven",
        "tool-link-emailuser": "Deze {{GENDER:$1|gebruiker}} e-mailen",
-       "userpage": "Gebruikerspagina bekijken",
-       "projectpage": "Projectpagina bekijken",
        "imagepage": "Bestandspagina bekijken",
        "mediawikipage": "Berichtpagina bekijken",
        "templatepage": "Sjabloonpagina bekijken",
        "rcfilters-noresults-conflict": "Geen resultaten gevonden omdat de zoekcriteria met elkaar conflicteren",
        "rcfilters-state-message-subset": "Dit filter heeft geen effect omdat de resultaten ook worden gefilterd door {{PLURAL:$2|het|de}} bredere {{PLURAL:$2|filter|filters}} (probeer ze te markeren om ze te onderscheiden): $1",
        "rcfilters-state-message-fullcoverage": "Het selecteren van alle filters in deze groep is hetzelfde als geen filter selecteren, waardoor dit filter geen effect heeft. De groep bevat: $1",
-       "rcfilters-filtergroup-registration": "Gebruikers-registratie",
+       "rcfilters-filtergroup-registration": "Gebruikersregistratie",
        "rcfilters-filter-registered-label": "Geregistreerd",
        "rcfilters-filter-registered-description": "Ingelogde gebruikers.",
        "rcfilters-filter-unregistered-label": "Niet-geregistreerd",
        "rcfilters-filter-editsbyself-description": "Uw eigen bijdragen.",
        "rcfilters-filter-editsbyother-label": "Wijzigingen door anderen",
        "rcfilters-filter-editsbyother-description": "Alle wijzigingen behalve die door u gemaakt zijn.",
-       "rcfilters-filtergroup-userExpLevel": "Gebruikerservarings niveau (alleen voor geregistreerde gebruikers)",
+       "rcfilters-filtergroup-userExpLevel": "Ervaringsniveau (alleen voor geregistreerde gebruikers)",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nieuwkomers",
        "rcfilters-filter-user-experience-level-newcomer-description": "Minder dan 10 bewerkingen en 4 dagen van activiteit.",
        "rcfilters-filter-user-experience-level-learner-label": "Leerlingen",
        "rcfilters-filter-watchlist-watchednew-label": "Nieuwe volglijstwijzigingen",
        "rcfilters-filter-watchlist-watchednew-description": "Wijzigingen aan pagina's die op uw volglijst staan, die u nog niet hebt bezocht sinds de wijziging.",
        "rcfilters-filter-watchlist-notwatched-label": "Niet op de volglijst",
-       "rcfilters-filter-watchlist-notwatched-description": "Alles behalve wijzigingen op pagina's die op uw Volglijst staan.",
+       "rcfilters-filter-watchlist-notwatched-description": "Alles behalve wijzigingen aan pagina's die op uw volglijst staan.",
        "rcfilters-filtergroup-changetype": "Soort wijziging",
        "rcfilters-filter-pageedits-label": "Paginabewerkingen",
        "rcfilters-filter-pageedits-description": "Wijzigingen aan de wiki inhoud, discussies, categorie beschrijvingen…",
        "rcfilters-filter-newpages-label": "Nieuwe pagina's",
        "rcfilters-filter-newpages-description": "Bewerkingen die een nieuwe pagina aanmaken.",
-       "rcfilters-filter-categorization-label": "Categorie wijzigingen",
-       "rcfilters-filter-categorization-description": "Categorisatie van pagina's tonen",
+       "rcfilters-filter-categorization-label": "Categoriewijzigingen",
+       "rcfilters-filter-categorization-description": "Categorisatie van pagina's tonen.",
        "rcfilters-filter-logactions-label": "Geregistreerde acties",
        "rcfilters-filter-logactions-description": "Administratieve handelingen, account creaties, pagina verwijderingen, uploads…",
        "rcfilters-hideminor-conflicts-typeofchange": "Bepaalde soorten wijzigingen kunnen niet worden aangemerkt als \"klein\", dus dit filter is in conflict met de volgende soorten wijzigingenfilters: $1",
index 729f8fe..f2e8b92 100644 (file)
        "anontalk": "Diskusjon",
        "navigation": "Navigering",
        "and": "&#32;og",
-       "qbfind": "Finn",
-       "qbbrowse": "Bla gjennom",
-       "qbedit": "Endre",
-       "qbpageoptions": "Denne sida",
-       "qbmyoptions": "Sidene mine",
        "faq": "OSS",
-       "faqpage": "Project:OSS",
        "actions": "Handlingar",
        "namespaces": "Namnerom",
        "variants": "Variantar",
        "edit-local": "Endre lokal skildring",
        "create": "Opprett",
        "create-local": "Legg til lokal skildring",
-       "editthispage": "Endre sida",
-       "create-this-page": "Opprett sida",
        "delete": "Slett",
-       "deletethispage": "Slett denne sida",
-       "undeletethispage": "Attopprett sida",
        "undelete_short": "Attopprett {{PLURAL:$1|éin versjon|$1 versjonar}}",
        "viewdeleted_short": "Vis {{PLURAL:$1|éin sletta versjon|$1 sletta versjonar}}",
        "protect": "Vern",
        "protect_change": "endre",
-       "protectthispage": "Vern denne sida",
        "unprotect": "Endra vern",
-       "unprotectthispage": "Endra vernet av sida",
        "newpage": "Ny side",
-       "talkpage": "Diskuter sida",
        "talkpagelinktext": "Diskusjon",
        "specialpage": "Spesialside",
        "personaltools": "Personlege verktøy",
-       "articlepage": "Vis innhaldsside",
        "talk": "Diskusjon",
        "views": "Visningar",
        "toolbox": "Verktøy",
        "tool-link-userrights": "Endra {{GENDER:$1|brukargrupper}}",
        "tool-link-userrights-readonly": "Syn {{GENDER:$1|brukar}}grupper",
        "tool-link-emailuser": "Send e-post til {{GENDER:$1|brukaren}}",
-       "userpage": "Vis brukarside",
-       "projectpage": "Sjå prosjektsida",
        "imagepage": "Vis filside",
        "mediawikipage": "Vis systemmeldingsside",
        "templatepage": "Vis malside",
        "rcshowhidemine-hide": "Gøym",
        "rcshowhidecategorization": "$1 kategorisering av sider",
        "rcshowhidecategorization-show": "Vis",
+       "rcshowhidecategorization-hide": "Gøym",
        "rclinks": "Vis dei siste $1 endringane dei siste $2 dagane",
        "diff": "skil",
        "hist": "hist",
        "sp-contributions-username": "IP-adresse eller brukarnamn:",
        "sp-contributions-toponly": "Vis berre endringar som er gjeldande versjonar",
        "sp-contributions-newonly": "Berre vis endringar som oppretta ei side",
+       "sp-contributions-hideminor": "Gøym småplukk",
        "sp-contributions-submit": "Søk",
        "whatlinkshere": "Lenkjer hit",
        "whatlinkshere-title": "Sider som har lenkje til «$1»",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Singalesisk",
        "special-characters-group-gujarati": "Gujarati",
+       "mw-widgets-dateinput-no-date": "Ingen dato er vald",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
        "mw-widgets-titleinput-description-new-page": "sida finst ikkje enno",
        "mw-widgets-titleinput-description-redirect": "omdiriger til $1",
+       "date-range-from": "Frå dato:",
+       "date-range-to": "Til dato:",
        "randomrootpage": "Tilfeldig rotsida",
        "log-action-filter-rights": "Type endring av rettar:",
        "authmanager-userdoesnotexist": "Brukarkontoen «$1» er ikkje oppretta.",
index 3527801..8f7e95f 100644 (file)
        "anontalk": "Dyskusja",
        "navigation": "Nawigacja",
        "and": "&#32;oraz",
-       "qbfind": "Znajdź",
-       "qbbrowse": "Przeglądanie",
-       "qbedit": "Edycja",
-       "qbpageoptions": "Ta strona",
-       "qbmyoptions": "Moje strony",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Akcje",
        "namespaces": "Przestrzenie nazw",
        "variants": "Warianty",
        "edit-local": "Edytuj lokalny opis",
        "create": "Utwórz",
        "create-local": "Dodaj lokalny opis",
-       "editthispage": "Edytuj tę stronę",
-       "create-this-page": "Utwórz tę stronę",
        "delete": "Usuń",
-       "deletethispage": "Usuń tę stronę",
-       "undeletethispage": "Przywróć tę stronę",
        "undelete_short": "odtwórz {{PLURAL:$1|1 wersję|$1 wersje|$1 wersji}}",
        "viewdeleted_short": "Podgląd {{PLURAL:$1|usuniętej|$1 usuniętych}} wersji",
        "protect": "Zabezpiecz",
        "protect_change": "zmień",
-       "protectthispage": "Zabezpiecz tę stronę",
        "unprotect": "Zmień zabezpieczenie",
-       "unprotectthispage": "Zmień zabezpieczenie strony",
        "newpage": "Nowa strona",
-       "talkpage": "Dyskusja",
        "talkpagelinktext": "dyskusja",
        "specialpage": "Strona specjalna",
        "personaltools": "Narzędzia osobiste",
-       "articlepage": "Pokaż zawartość strony",
        "talk": "Dyskusja",
        "views": "Widok",
        "toolbox": "Narzędzia",
        "tool-link-userrights": "Zmiana grup {{GENDER:$1|użytkownika|użytkowniczki}}",
        "tool-link-userrights-readonly": "Zobacz grupy {{GENDER:$1|użytkownika|użytkowniczki}}",
        "tool-link-emailuser": "Wyślij e-mail do {{GENDER:$1|tego użytkownika|tej użytkowniczki}}",
-       "userpage": "Pokaż stronę użytkownika",
-       "projectpage": "Pokaż stronę projektu",
        "imagepage": "Pokaż stronę pliku",
        "mediawikipage": "Strona komunikatu",
        "templatepage": "Strona szablonu",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Pokaż",
        "rcfilters-activefilters": "Aktywne filtry",
-       "rcfilters-quickfilters": "Szybkie linki",
+       "rcfilters-quickfilters": "Zapisane ustawienia filtrów",
        "rcfilters-quickfilters-placeholder-title": "Nie masz jeszcze zapisanych linków",
        "rcfilters-quickfilters-placeholder-description": "Aby zapisać ustawienia filtrów i używać ich później, kliknij ikonkę zakładki w polu aktywnych filtrów znajdującym się niżej.",
        "rcfilters-savedqueries-defaultlabel": "Zapisane filtry",
        "rcfilters-savedqueries-new-name-label": "Nazwa",
        "rcfilters-savedqueries-apply-label": "Zapisz ustawienia",
        "rcfilters-savedqueries-cancel-label": "Anuluj",
-       "rcfilters-savedqueries-add-new-title": "Zapisz szybki link do filtrów",
+       "rcfilters-savedqueries-add-new-title": "Zapisz bieżące ustawienia filtrów",
        "rcfilters-restore-default-filters": "Przywróć domyślne filtry",
        "rcfilters-clear-all-filters": "Wyczyść filtry",
        "rcfilters-search-placeholder": "Filtruj ostatnie zmiany (przeglądaj lub zacznij wpisywać)",
        "rcfilters-filter-watchlist-notwatched-description": "Wszystko oprócz zmian na obserwowanych przez ciebie stronach.",
        "rcfilters-filtergroup-changetype": "Rodzaj zmiany",
        "rcfilters-filter-pageedits-label": "Edycje strony",
-       "rcfilters-filter-pageedits-description": "Edycje treści, stron dyskusji, opisów kategorii...",
+       "rcfilters-filter-pageedits-description": "Edycje treści, stron dyskusji, opisów kategorii",
        "rcfilters-filter-newpages-label": "Tworzenie stron",
        "rcfilters-filter-newpages-description": "Zmiany prowadzące do utworzenia nowych stron.",
        "rcfilters-filter-categorization-label": "Zmiany kategorii",
        "rcfilters-filter-categorization-description": "Dodanie lub usunięcie strony z kategorii",
        "rcfilters-filter-logactions-label": "Działania rejestrowane",
-       "rcfilters-filter-logactions-description": "Działania administracyjne, tworzenie kont, usuwanie stron, przesyłanie plików...",
+       "rcfilters-filter-logactions-description": "Działania administracyjne, tworzenie kont, usuwanie stron, przesyłanie plików",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Filtr „Drobne zmiany” koliduje z jednym lub wieloma filtrami Rodzaju zmian, ponieważ niektóre rodzaje zmian nie mogą być uznawane za  „drobne”. Kolidujące filtry zostały powyżej odpowiednio zaznaczone na pasku aktywnych filtrów.",
        "rcfilters-hideminor-conflicts-typeofchange": "Niektóre rodzaje zmian nie mogą być uznawane za „drobne”, dlatego ten filtr koliduje z następującymi filtrami Rodzaju zmian: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Ten filtr Rodzaju zmian koliduje z filtrem „Drobne zmiany”. Nie wszystkie zmiany mogą być uznawane za „drobne”.",
index 18c52c1..f90d793 100644 (file)
        "anontalk": "Discussão",
        "navigation": "Navegação",
        "and": "&#32;e",
-       "qbfind": "Procurar",
-       "qbbrowse": "Navegar",
-       "qbedit": "Editar",
-       "qbpageoptions": "Esta página",
-       "qbmyoptions": "As minhas páginas",
        "faq": "Perguntas frequentes",
-       "faqpage": "Project:FAQ",
        "actions": "Ações",
        "namespaces": "Domínios",
        "variants": "Variantes",
        "edit-local": "Editar descrição local",
        "create": "Criar",
        "create-local": "Adicionar descrição local",
-       "editthispage": "Editar esta página",
-       "create-this-page": "Criar esta página",
        "delete": "Eliminar",
-       "deletethispage": "Eliminar esta página",
-       "undeletethispage": "Restaurar esta página",
        "undelete_short": "Restaurar {{PLURAL:$1|uma edição|$1 edições}}",
        "viewdeleted_short": "Ver {{PLURAL:$1|uma edição eliminada|$1 edições eliminadas}}",
        "protect": "Proteger",
        "protect_change": "alterar",
-       "protectthispage": "Proteger esta página",
        "unprotect": "Alterar proteção",
-       "unprotectthispage": "Alterar a proteção desta página",
        "newpage": "Página nova",
-       "talkpage": "Discutir esta página",
        "talkpagelinktext": "Discussão",
        "specialpage": "Página especial",
        "personaltools": "Ferramentas pessoais",
-       "articlepage": "Ver página de conteúdo",
        "talk": "Discussão",
        "views": "Vistas",
        "toolbox": "Ferramentas",
        "tool-link-userrights": "Alterar grupos {{GENDER:$1|do utilizador|da utilizadora}}",
        "tool-link-userrights-readonly": "Ver grupos {{GENDER:$1|do utilizador|da utilizadora}}",
        "tool-link-emailuser": "Enviar correio eletrónico a {{GENDER:$1|este utilizador|esta utilizadora|este(a) utilizador(a)}}",
-       "userpage": "Ver página de utilizador",
-       "projectpage": "Ver página de projeto",
        "imagepage": "Ver página de ficheiro",
        "mediawikipage": "Ver página de mensagem",
        "templatepage": "Ver página de predefinição",
        "expansion-depth-exceeded-category": "Páginas em que a profundidade de expansão é excedida",
        "expansion-depth-exceeded-category-desc": "A página excede a profundidade de expansão permitida.",
        "expansion-depth-exceeded-warning": "A página excedeu a profundidade de expansão",
-       "parser-unstrip-loop-warning": "Foi detectado um ciclo infinito unstrip",
+       "parser-unstrip-loop-warning": "Foi detetado um ciclo infinito unstrip",
        "parser-unstrip-recursion-limit": "Limite de recursão do unstrip excedido ($1)",
        "converter-manual-rule-error": "Erro detetado na regra de conversão de língua manual",
        "undo-success": "É possível desfazer a edição.\nVerifique a comparação abaixo, para se certificar que corresponde ao que pretende fazer.\nDepois grave as alterações, para finalizar e desfazer a edição.",
        "uploaded-remote-url-svg": "A configuração de qualquer atributo de estilo com um URL remoto em ficheiros SVG está bloqueada. Foi detetado <code>$1=\"$2\"</code> no ficheiro SVG carregado.",
        "uploaded-image-filter-svg": "Foi encontrado um filtro de imagem com o URL: <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG carregado.",
        "uploadscriptednamespace": "Este ficheiro SVG contém um domínio que não é permitido \"<nowiki>$1</nowiki>\".",
-       "uploadinvalidxml": "Erro detectado na análise do XML do ficheiro carregado.",
+       "uploadinvalidxml": "Não foi possível analisar o XML do ficheiro carregado.",
        "uploadvirus": "O ficheiro contém um vírus! \nDetalhes: $1",
        "uploadjava": "Este é um ficheiro ZIP que contém um ficheiro .class de Java.\nNão é permitido o carregamento de ficheiros Java, porque estes podem contornar as restrições de segurança.",
        "upload-source": "Ficheiro de origem",
        "rollback-success": "Foram revertidas as edições de {{GENDER:$3|$1}}; reposta a última edição de {{GENDER:$4|$2}}.",
        "rollback-success-notify": "Revertidas as edições de $1;\nMudança para a última revisão de $2. [$3 Mostrar alterações]",
        "sessionfailure-title": "Erro de sessão",
-       "sessionfailure": "Foram detectados problemas com a sua sessão;\na operação foi cancelada como medida de proteção contra a interceptação de sessões.\nVolte à página anterior, recarregue-a e tente novamente.",
+       "sessionfailure": "Foram detetados problemas com a sua sessão;\na operação foi cancelada como medida de proteção contra a intercetação de sessões.\nVolte à página anterior, recarregue-a e tente novamente.",
        "changecontentmodel": "Alterar modelo de conteúdo de uma página",
        "changecontentmodel-legend": "Editar modelo de contéudo",
        "changecontentmodel-title-label": "Título da página",
        "exif-flash-fired-0": "Flash não disparou",
        "exif-flash-fired-1": "Flash disparado",
        "exif-flash-return-0": "nenhuma função de detecção de luz de retorno",
-       "exif-flash-return-2": "luz de retorno não detectada",
-       "exif-flash-return-3": "luz de retorno detectada",
+       "exif-flash-return-2": "luz de retorno não detetada",
+       "exif-flash-return-3": "luz de retorno detetada",
        "exif-flash-mode-1": "disparo de flash forçado",
        "exif-flash-mode-2": "disparo de flash suprimido",
        "exif-flash-mode-3": "modo auto",
index 947a6e8..6dfd73f 100644 (file)
        "anontalk": "Same as {{msg-mw|mytalk}} but used for non-logged-in users.\n{{Identical|Talk}}\n\nSee also:\n* {{msg-mw|Accesskey-pt-anontalk}}\n* {{msg-mw|Tooltip-pt-anontalk}}",
        "navigation": "This is shown as a section header in the sidebar of most skins.\n\n{{Identical|Navigation}}",
        "and": "The translation for \"and\" appears in the [[Special:Version]] page, between the last two items of a list. If a comma is needed, add it at the beginning without a gap between it and the \"&\". &amp;#32; is a blank space, one character long. Please leave it as it is.\n\nThis can also appear in the credits page if the credits feature is enabled,for example [{{canonicalurl:Support|action=credits}} the credits of the support page]. (To view any credits page type <nowiki>&action=credits</nowiki> at the end of any URL in the address bar.)\n{{Identical|And}}",
-       "qbfind": "Alternative for \"search\" as used in Cologne Blue skin.\n{{Identical|Find}}",
-       "qbbrowse": "Heading in sidebar menu in CologneBlue skin as seen in [[File:CologneBlue sidebar qqx.png]]\n{{Identical|Browse}}",
-       "qbedit": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|Edit}}",
-       "qbpageoptions": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|This page}}",
-       "qbmyoptions": "Heading in the Cologne Blue skin user menu containing links to user (talk) page, preferences, watchlist, etc.\n{{Identical|My pages}}",
        "faq": "FAQ is short for ''frequently asked questions''.\n{{Identical|FAQ}}",
-       "faqpage": "{{doc-important|Do not translate <code>Project:</code> part.}}\n\"FAQ\" is short for \"frequently asked questions\".\n\nThis page is only linked in CologneBlue (an old skin), not in Monobook or Vector.",
        "sitetitle": "{{Ignore}}",
        "sitesubtitle": "{{Ignore}}",
        "actions": "{{Identical|Action}}",
        "edit-local": "The text on the tab going to the edit form for the local description page of a file from a foreign file repository (e.g. Wikimedia Commons). Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Edit}}\n* {{msg-mw|Create-local}}",
        "create": "The text on the tab of the edit form on unexisting pages starts editing them. Should be in the infinitive mood.\n\n{{Identical|Create}}",
        "create-local": "The text on the tab going to the creation form for the (not yet existing) local description page of a file from a foreign file repository (e.g. Wikimedia Commons). Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Create}}\n* {{msg-mw|Edit-local}}",
-       "editthispage": "This is the \"edit\" link as used in the Cologne Blue skin, at the bottom of the page.\n\nSee {{msg-mw|Create-this-page}} for when the page does not exist.\n{{Identical|Edit this page}}",
-       "create-this-page": "In the Cologne Blue skin this is the text for the link leading to the edit form on pages that have not yet been created, at the bottom of the page. See {{msg-mw|editthispage}} for when the page already exists.\n{{Identical|Createpage}}",
        "delete": "Name of the Delete tab shown for admins. Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Delete}}\n* {{msg-mw|Accesskey-ca-delete}}\n* {{msg-mw|Tooltip-ca-delete}}\n{{Identical|Delete}}",
-       "deletethispage": "In the Cologne Blue skin this is the text for link to delete the page in admin view, at the bottom of the page.\n{{Identical|Delete this page}}",
-       "undeletethispage": "In the Cologne Blue skin this is the text for link to undelete the page in admin view, at the bottom of the page.",
        "undelete_short": "It is tab label. It's really can be named ''nstab-undelete''. Parameters:\n* $1 - number of edits",
        "viewdeleted_short": "Tab label for the undelete button when the user has permission to view the deleted history but not undelete.\n\nParameters:\n* $1 - number of edits",
        "protect": "Name of protect tab displayed for admins. Should be in the infinitive mood.\n\nSee also:\n* {{msg-mw|Protect}}\n* {{msg-mw|Accesskey-ca-protect}}\n* {{msg-mw|Tooltip-ca-protect}}\n{{Identical|Protect}}",
        "protect_change": "Text on links for each entry in [[Special:ProtectedPages]] to change the protection of pages (only displayed to admins).\n{{Identical|Change}}",
-       "protectthispage": "In the Cologne Blue skin this is the text for link to protect the page in admin view, at the bottom of the page.\n{{Identical|Protect this page}}",
        "unprotect": "Name of unprotect tab displayed for admins\n\nSee also:\n* {{msg-mw|Unprotect}}\n* {{msg-mw|Accesskey-ca-unprotect}}\n* {{msg-mw|Tooltip-ca-unprotect}}\n{{Identical|Change protection}}",
-       "unprotectthispage": "In the Cologne Blue skin this is the anchor text for the link to unprotect the page in admin view, at the bottom of the page.\n{{Identical|Unprotect this page}}",
        "newpage": "{{Identical|New page}}",
-       "talkpage": "In the Cologne Blue skin this is the text for link to discuss the page, at the bottom of the page.",
        "talkpagelinktext": "Used as name of links going to talk page in some places, like in [[Special:RecentChanges]], [[Special:Allmessages]], [[Special:Logs]], and [[Special:Watchlist/edit]].\n\n{{Identical|Talk}}",
        "specialpage": "{{Identical|Special page}}",
        "personaltools": "Heading for a group of links to your user page, talk page, preferences, watchlist, and contributions. This heading is visible in the sidebar in some skins. For an example, see [{{canonicalurl:Main_Page|useskin=simple}} Main Page using simple skin].",
        "addsection": "{{notranslate}}\nText of the new section tab (the one next to the \"edit\" tab on non-Vector skins).\n\nSee also:\n* {{msg-mw|Addsection}}\n* {{msg-mw|Accesskey-ca-addsection}}\n* {{msg-mw|Tooltip-ca-addsection}}",
-       "articlepage": "'Content page' is used for NS_MAIN and any other non-standard namespaces. Only used in the Cologne Blue skin in the bottomLinks part.\n\n{{Identical|Content page}}",
        "talk": "Used as display name for the tab to all {{msg-mw|Talk}} pages. These pages accompany all content pages and can be used for discussing the content page. Example: [[Talk:Example]].\n\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}\n{{Identical|Discussion}}",
        "views": "Subtitle for the list of available views, for the current page. In \"monobook\" skin the list of views are shown as tabs, so this sub-title is not shown. For an example, see [{{canonicalurl:Main_Page|useskin=simple}} Main Page using simple skin].\n\n'''Note:''' This is \"views\" as in \"appearances\"/\"representations\", '''not''' as in \"visits\"/\"accesses\".\n{{Identical|View}}",
        "toolbox": "The title of the toolbox below the search menu.\n{{Identical|Tool}}",
        "tool-link-userrights": "Link to [[Special:UserRights]] (user rights management) in the sidebar toolbox, shown if the current user is allowed to change given user's groups.\n\nParameters:\n* $1 - Name of user for the user group management (usable for GENDER)",
        "tool-link-userrights-readonly": "Link to [[Special:UserRights]] (user rights management) in the sidebar toolbox, shown if the current user is '''not''' allowed to change given user's groups.\n\nParameters:\n* $1 - Name of user for the user group management (usable for GENDER)",
        "tool-link-emailuser": "Link to [[Special:EmailUser]] (email user tool) in the sidebar toolbox.\n\nParameters:\n* $1 - Name of user who would receive the email\n\nSee also:\n* {{msg-mw|Emailuser-title-target}}",
-       "userpage": "Used in user talk pages as the text of the link to the user page, with the Cologne Blue skin.",
-       "projectpage": "Used as link text in Talk page of project page with the Cologne Blue skin.",
        "imagepage": "Used as link text in Talk page of file page.",
        "mediawikipage": "Used as link text in Talk page of MediaWiki message page.",
        "templatepage": "Used as link text in Talk page of template page.",
        "gotointerwiki-invalid": "Message shown on Special:GoToInterwiki if given an invalid title.",
        "gotointerwiki-external": "Message shown on Special:GoToInterwiki if given a external interwiki link (e.g. [[Special:GoToInterwiki/Google:Foo]]). $1 is the full url the user is trying to get to. $2 is the text of the interwiki link (e.g. \"Google:foo\").",
        "undelete-cantedit": "Shown if the user tries to undelete a page that they cannot edit",
-       "undelete-cantcreate": "Shown if the user tries to undelete a page which currently does not exist, and they are not allowed to create it. This could for example happen on a wiki with custom protection levels where the page name has been create-protected and the user has the right to undelete but not the right to edit protected pages."
+       "undelete-cantcreate": "Shown if the user tries to undelete a page which currently does not exist, and they are not allowed to create it. This could for example happen on a wiki with custom protection levels where the page name has been create-protected and the user has the right to undelete but not the right to edit protected pages.",
+       "pagedata-title": "Title shown on the special page when a form or text is presented",
+       "pagedata-text": "Error shown when none of the formats acceptable to the client is suppoerted (HTTP error 406). Parameters:\n* $1 - the list of supported MIME types",
+       "pagedata-not-acceptable": "No matching format found. Supported MIME types: $1",
+       "pagedata-bad-title": "Error shown when the requested title is invalid. Parameters:\n* $1: the malformed ID"
 }
index 98a1316..e3cbf71 100644 (file)
        "anontalk": "Discuții",
        "navigation": "Navigare",
        "and": "&#32;și",
-       "qbfind": "Găsește",
-       "qbbrowse": "Răsfoiește",
-       "qbedit": "Modificare",
-       "qbpageoptions": "Această pagină",
-       "qbmyoptions": "Paginile mele",
        "faq": "Întrebări frecvente",
-       "faqpage": "Project:Întrebări frecvente",
        "actions": "Acțiuni",
        "namespaces": "Spații de nume",
        "variants": "Variante",
        "edit-local": "Modificare descriere locală",
        "create": "Creare",
        "create-local": "Adăugare descriere locală",
-       "editthispage": "Modificați pagina",
-       "create-this-page": "Creați această pagină",
        "delete": "Ștergere",
-       "deletethispage": "Șterge această pagină",
-       "undeletethispage": "Recuperează această pagină",
        "undelete_short": "Recuperarea {{PLURAL:$1|unei modificări|a $1 modificări|a $1 de modificări}}",
        "viewdeleted_short": "Vizualizați {{PLURAL:$1|o modificare ștearsă|$1 modificări șterse|$1 de modificări șterse}}",
        "protect": "Protejare",
        "protect_change": "schimbă protecția",
-       "protectthispage": "Protejați această pagină",
        "unprotect": "Modificare protecție",
-       "unprotectthispage": "Schimbă nivelul de protejare al acestei pagini",
        "newpage": "Pagină nouă",
-       "talkpage": "Discutați despre această pagină",
        "talkpagelinktext": "Discuție",
        "specialpage": "Pagină specială",
        "personaltools": "Unelte personale",
-       "articlepage": "Vizualizați conținutul paginii",
        "talk": "Discuție",
        "views": "Vizualizări",
        "toolbox": "Unelte",
        "tool-link-userrights": "Schimbă grupurile {{GENDER:$1|utilizatorului|utilizatoarei}}",
        "tool-link-userrights-readonly": "Vezi grupurile {{GENDER:$1|utilizatorului|utilizatoarei}}",
        "tool-link-emailuser": "Trimiteți un mesaj {{GENDER:$1|acestui utilizator|acestei utilizatoare}}",
-       "userpage": "Vizualizați pagina utilizatorului",
-       "projectpage": "Vizualizați pagina proiectului",
        "imagepage": "Vizualizați pagina fișierului",
        "mediawikipage": "Vizualizați pagina mesajului",
        "templatepage": "Vizualizați pagina formatului",
        "recentchanges-submit": "Afișează",
        "rcfilters-activefilters": "Filtre active",
        "rcfilters-quickfilters": "Legături rapide",
-       "rcfilters-quickfilters-placeholder": "Salvați setările de instrumente preferate pentru a le reutiliza mai târziu.",
        "rcfilters-savedqueries-defaultlabel": "Filtre salvate",
        "rcfilters-savedqueries-rename": "Redenumește",
        "rcfilters-savedqueries-setdefault": "Setează ca predefinit",
index 6a99e94..a55e772 100644 (file)
        "anontalk": "Діскузія к тїй IP-адресї",
        "navigation": "Навіґація",
        "and": "&#32;і",
-       "qbfind": "Найти",
-       "qbbrowse": "Переглядати",
-       "qbedit": "Едітовати",
-       "qbpageoptions": "Тота сторінка",
-       "qbmyoptions": "Мої сторінкы",
        "faq": "Часты звідованя",
-       "faqpage": "Project:Часты звідованя",
        "actions": "Дїї",
        "namespaces": "Просторы назв",
        "variants": "Варіанты",
        "view": "Видіти",
        "edit": "Едітовати",
        "create": "Створити",
-       "editthispage": "Едітовату тоту сторінку",
-       "create-this-page": "Створити тоту сторінку",
        "delete": "Вымазати",
-       "deletethispage": "Змазати тоту сторінку",
-       "undeletethispage": "Обновити тоту сторінку",
        "undelete_short": "Обновити $1 {{PLURAL:$1|верзію|верзії|верзії}}",
        "viewdeleted_short": "Видїти {{PLURAL:$1|змазанов едітаціёв|$1 змазаны едітації|$1 змазаных едітацій}}",
        "protect": "Всокотити",
        "protect_change": "змінити",
-       "protectthispage": "Сокотити тоту сторінку",
        "unprotect": "Змінити замок",
-       "unprotectthispage": "Змінити замок той сторінкы",
        "newpage": "Нова сторінка",
-       "talkpage": "Діскутовати тоту сторінку",
        "talkpagelinktext": "діскузія",
        "specialpage": "Шпеціална сторінка",
        "personaltools": "Особны інштрументы",
-       "articlepage": "Посмотрити сторінку",
        "talk": "Діскузія",
        "views": "Перегляды",
        "toolbox": "Інштрументы",
-       "userpage": "Посмотрити сторінку хоснователя",
-       "projectpage": "Посмотрити сторінку проєкту",
        "imagepage": "Посмотрити сторінку файлу",
        "mediawikipage": "Посмотрити сторінку повідомлїнь",
        "templatepage": "Посмотрити шаблону",
index c61edfd..83760b1 100644 (file)
        "anontalk": "Ырытыы",
        "navigation": "Навигация",
        "and": "&#32;уонна",
-       "qbfind": "Бул",
-       "qbbrowse": "Көр",
-       "qbedit": "Уларыт",
-       "qbpageoptions": "Бу сирэй",
-       "qbmyoptions": "Мин сирэйдэрим",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Дьайыылар",
        "namespaces": "Аат даллара",
        "variants": "Барыллар",
        "edit-local": "Олохтоох ойуулааһынын уларытыы",
        "create": "Саҥаны айыы",
        "create-local": "Бу туһунан суруйуу",
-       "editthispage": "Бу сирэйи уларыт",
-       "create-this-page": "Бу сирэйи ай",
        "delete": "Соттор",
-       "deletethispage": "Бу сирэйи соттор",
-       "undeletethispage": "Бу сирэйи сөргүт",
        "undelete_short": "{{PLURAL:$1|Биир уларытыыны|$1 уларытыыны}} сөргүт",
        "viewdeleted_short": "{{PLURAL:$1|Соҕотох сотторуллубут көннөрүүнү|$1 сотторуллубут көннөрүүнү}} көрүү",
        "protect": "Уларыппат гын",
        "protect_change": "уларытыы",
-       "protectthispage": "Бу сирэйи уларыппат гын",
        "unprotect": "Көмүскэлин уларыт",
-       "unprotectthispage": "Бу сирэй көмүскэлин уларыт",
        "newpage": "Саҥа сирэй",
-       "talkpage": "Бу сирэйи ырыт",
        "talkpagelinktext": "ырытыы",
        "specialpage": "Анал сирэй",
        "personaltools": "Тус бэйэ туттар тэриллэрэ",
-       "articlepage": "Ыстатыйаны көр",
        "talk": "Ырытыы",
        "views": "Көрүү",
        "toolbox": "Сэп-сэбиргэл",
        "tool-link-userrights": "{{GENDER:$1|Кыттааччы}} бөлөҕүн уларыт",
        "tool-link-userrights-readonly": "{{GENDER:$1|Кыттааччы}} бөлөхтөрүн көр",
        "tool-link-emailuser": "{{GENDER:$1|Кыттааччыга}} сурук суруйуу",
-       "userpage": "Кыттааччы туһунан сирэй",
-       "projectpage": "Бырайыак сирэйэ",
        "imagepage": "Билэ сирэйин көрүү",
        "mediawikipage": "Сурук сирэйэ",
        "templatepage": "Халыып сирэйэ",
index da2d369..9daccbb 100644 (file)
        "anontalk": "Diskusia",
        "navigation": "Navigácia",
        "and": "&#32;a",
-       "qbfind": "Hľadať",
-       "qbbrowse": "Prehliadať",
-       "qbedit": "Upraviť",
-       "qbpageoptions": "Táto stránka",
-       "qbmyoptions": "Moje stránky",
        "faq": "Často kladené otázky",
-       "faqpage": "Project:Často kladené otázky",
        "actions": "Operácie",
        "namespaces": "Menné priestory",
        "variants": "Varianty",
        "edit-local": "Upraviť miestny popis",
        "create": "Vytvoriť",
        "create-local": "Pridať miestny popis",
-       "editthispage": "Upraviť túto stránku",
-       "create-this-page": "Vytvoriť túto stránku",
        "delete": "Vymazať",
-       "deletethispage": "Vymazať túto stránku",
-       "undeletethispage": "Obnoviť túto stránku",
        "undelete_short": "Obnoviť {{PLURAL:$1|jednu úpravu|$1 úpravy|$1 úprav}}",
        "viewdeleted_short": "Zobraziť {{PLURAL:$1|jednu zmazanú úpravu|$1 zmazané úpravy|$1 zmazaných úprav}}",
        "protect": "Zamknúť",
        "protect_change": "Zmeniť",
-       "protectthispage": "Zamknúť túto stránku",
        "unprotect": "Zmeniť stav ochrany",
-       "unprotectthispage": "Zmeniť stav ochrany tejto stránky",
        "newpage": "Nová stránka",
-       "talkpage": "Diskusia k stránke",
        "talkpagelinktext": "diskusia",
        "specialpage": "Špeciálna stránka",
        "personaltools": "Osobné nástroje",
-       "articlepage": "Zobraziť stránku",
        "talk": "Diskusia",
        "views": "Zobrazenia",
        "toolbox": "Nástroje",
        "tool-link-userrights": "Zmeniť používateľské skupiny {{GENDER:$1|tohoto použivateľa|tejto používateľky}}",
        "tool-link-userrights-readonly": "Zobraziť {{GENDER:$1|používateľské}} skupiny",
        "tool-link-emailuser": "Poslať e-mail {{GENDER:$1|tomuto používateľovi|tejto používateľke}}",
-       "userpage": "Zobraziť stránku používateľa",
-       "projectpage": "Zobraziť projektovú stránku",
        "imagepage": "Zobraziť stránku súboru",
        "mediawikipage": "Zobraziť stránku so správou",
        "templatepage": "Zobraziť stránku šablóny",
        "mw-widgets-mediasearch-noresults": "Neboli nájdené žiadne výsledky.",
        "mw-widgets-titleinput-description-new-page": "stránka zatiaľ neexistuje",
        "mw-widgets-titleinput-description-redirect": "presmerovanie na $1",
+       "date-range-from": "Od dátumu:",
+       "date-range-to": "Po dátum:",
        "randomrootpage": "Náhodná koreňová stránka",
        "changecredentials": "Zmena prihlasovacích údajov",
        "removecredentials": "Odstránenie prihlasovacích údajov"
index 8b091e0..c23b14b 100644 (file)
        "anontalk": "Diskutimi",
        "navigation": "Navigimi",
        "and": "&#32;dhe",
-       "qbfind": "Gjeni",
-       "qbbrowse": "Shfletoni",
-       "qbedit": "Redakto",
-       "qbpageoptions": "Kjo faqe",
-       "qbmyoptions": "Faqet e mia",
        "faq": "Pyetje të shpeshta",
-       "faqpage": "Project: Pyetje të shpeshta",
        "actions": "Veprimet",
        "namespaces": "Hapsirat e emrit",
        "variants": "Variantat",
        "edit-local": "Redakto përshkrimin lokal",
        "create": "Krijo",
        "create-local": "Shtonipërshkrimin lokal",
-       "editthispage": "Redakto këtë faqe",
-       "create-this-page": "Krijo këtë faqe",
        "delete": "Fshi",
-       "deletethispage": "Grise këtë faqe",
-       "undeletethispage": "Rikthe faqen",
        "undelete_short": "Anullo fshirjen {{PLURAL:$1|një redaktim|$1 redaktime}}",
        "viewdeleted_short": "Shiko {{PLURAL:$1|një redaktim të fshirë|$1 redaktime të fshira}}",
        "protect": "Mbroje",
        "protect_change": "ndrysho",
-       "protectthispage": "Mbroje këtë faqe",
        "unprotect": "Ndrysho mbrojtjen",
-       "unprotectthispage": "Ndrysho mbrojtjen e kësaj faqeje",
        "newpage": "Faqe e re",
-       "talkpage": "Diskuto rreth kësaj faqeje",
        "talkpagelinktext": "Diskuto",
        "specialpage": "Faqe speciale",
        "personaltools": "Mjetet e mia",
-       "articlepage": "Shiko faqen me përmbajtje",
        "talk": "Diskutimet",
        "views": "Shikime",
        "toolbox": "Mjete",
        "tool-link-userrights": "Ndrysho grupet e {{GENDER:$1|përdoruesit}}",
        "tool-link-userrights-readonly": "Shiko grupet e {{GENDER:$1|përdoruesit}}",
        "tool-link-emailuser": "Dërgo email {{GENDER:$1|user}}",
-       "userpage": "Shfaq faqen e përdoruesit",
-       "projectpage": "Shfaq faqen e projektit",
        "imagepage": "Shfaq faqen e skedës",
        "mediawikipage": "Shiko faqen e mesazhit",
        "templatepage": "Shiko faqen e shabllonit",
        "uploaddisabledtext": "Ngarkimi i skedave është i ndaluar.",
        "php-uploaddisabledtext": "Ngarkimet e skedave në PHP janë të çaktivizuara.\nJu lutemi kontrolloni parametrat e ngarkimeve të skedave.",
        "uploadscripted": "Skeda përmban HTML ose kode të tjera që mund të interpretohen gabimisht nga një shfletues.",
+       "uploadinvalidxml": "XML në skedarin e ngarkuar nuk mund të kontrollohej.",
        "uploadvirus": "Skeda përmban një virus! Detaje: $1",
        "uploadjava": "Dokumenti është në formatin ZIP i cili përmban Java. class dokumente.\nNgarkimi i Java dokumenteve nuk është i lejuar, sepse ato mund të shkaktojnë kufizime të sigurisë për ti anashkaluar.",
        "upload-source": "Burimi i skedës",
        "upload-too-many-redirects": "Adresa URL përmbante shumë përcjellime.",
        "upload-http-error": "Ndodhi një gabim HTTP: $1",
        "upload-copy-upload-invalid-domain": "Ngarkesat e kopjimit nuk janë në dispozicion nga ky domein.",
+       "upload-dialog-disabled": "Ngarkimet e skedarëve që përdorin këtë dialog janë çaktivizuar në këtë wiki.",
        "upload-dialog-title": "Ngarko skedën",
        "upload-dialog-button-cancel": "Anulo",
        "upload-dialog-button-back": "Prapa",
        "apisandbox-submit": "Bëj kërkesë",
        "apisandbox-reset": "Pastro",
        "apisandbox-retry": "Riprovo",
+       "apisandbox-no-parameters": "Moduli API nuk ka parametra.",
        "apisandbox-helpurls": "Lidhje të ndihmës",
        "apisandbox-examples": "Shembuj",
        "apisandbox-dynamic-parameters": "Parametra shtesë",
        "apisandbox-dynamic-parameters-add-label": "Shto parametër:",
        "apisandbox-dynamic-parameters-add-placeholder": "Emri i parametrit",
        "apisandbox-dynamic-error-exists": "Një parametër i quajtur \"$1\" tashmë ekziston.",
+       "apisandbox-deprecated-parameters": "Parametra të nxjerrë nga funksioni",
+       "apisandbox-fetch-token": "Vet-mbush tokenin",
        "apisandbox-submit-invalid-fields-title": "Disa fusha janë të pavlefshme",
        "apisandbox-submit-invalid-fields-message": "Ju lutem korrigjoni fushat e shënuara dhe provoni prap.",
        "apisandbox-results": "Rezultatet",
        "apisandbox-sending-request": "Po dërgohen kërkesat API...",
        "apisandbox-loading-results": "Po pranohen rezultatet API...",
+       "apisandbox-results-error": "Ndodhi një gabim gjatë ngarkimit të përgjigjes në kërkesën API: $1",
+       "apisandbox-request-selectformat-label": "Trego të dhënat e kërkuara si:",
        "apisandbox-request-url-label": "URL e kërkesës:",
        "apisandbox-request-json-label": "Kërko JSON:",
        "apisandbox-request-time": "Koha e kërkesës: {{PLURAL:$1|$1 ms}}",
        "expand_templates_ok": "Shko",
        "expand_templates_remove_comments": "Hiq komentet",
        "expand_templates_preview": "Parapamje",
+       "expand_templates_input_missing": "Duhet të jepni së paku pak tekst.",
        "pagelanguage": "Ndrysho gjuhën e faqës",
        "pagelang-name": "Faqja",
        "pagelang-language": "Gjuha",
        "pagelang-reason": "Arsyeja",
        "pagelang-submit": "Dërgo",
        "pagelang-nonexistent-page": "Faqja $1 nuk ekziston.",
+       "pagelang-unchanged-language": "Faqja $1 veç është vendosur në gjuhën $2",
+       "pagelang-unchanged-language-default": "Faqja $1 veç është vendosur në gjuhën e parazgjedhur e wikit.",
+       "pagelang-db-failed": "Baza e të dhënave nuk mundi të ndryshoi gjuhën e faqes.",
        "right-pagelang": "Ndrysho gjuhën e faqës",
        "action-pagelang": "ndrysho gjuhën e faqës",
+       "log-name-pagelang": "Regjistri i ndryshimit të gjuhës",
+       "log-description-pagelang": "Ky është regjistri i ndryshimeve në gjuhët e faqes.",
        "mediastatistics-table-mimetype": "Lloji MIME",
        "mediastatistics-table-extensions": "Shtojcat e mundshme",
        "mediastatistics-table-count": "Numri i skedave",
index 5efa5f7..e9d45b7 100644 (file)
        "anontalk": "Diskussion",
        "navigation": "Navigering",
        "and": "&#32;och",
-       "qbfind": "Hitta",
-       "qbbrowse": "Bläddra igenom",
-       "qbedit": "Redigera",
-       "qbpageoptions": "Denna sida",
-       "qbmyoptions": "Mina sidor",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Åtgärder",
        "namespaces": "Namnrymder",
        "variants": "Varianter",
        "edit-local": "Redigera lokal beskrivning",
        "create": "Skapa",
        "create-local": "Lägg till en lokal beskrivning",
-       "editthispage": "Redigera denna sida",
-       "create-this-page": "Skapa denna sida",
        "delete": "Radera",
-       "deletethispage": "Radera denna sida",
-       "undeletethispage": "Återställ denna sida",
        "undelete_short": "Återställ {{PLURAL:$1|en version|$1 versioner}}",
        "viewdeleted_short": "Visa {{PLURAL:$1|en raderad redigering|$1 raderade redigeringar}}",
        "protect": "Skrivskydda",
        "protect_change": "ändra",
-       "protectthispage": "Skrivskydda denna sida",
        "unprotect": "Ändra skydd",
-       "unprotectthispage": "Ändra skyddet på denna sidan",
        "newpage": "Ny sida",
-       "talkpage": "Diskutera denna sida",
        "talkpagelinktext": "Diskussion",
        "specialpage": "Specialsida",
        "personaltools": "Personliga verktyg",
-       "articlepage": "Visa innehållssida",
        "talk": "Diskussion",
        "views": "Visningar",
        "toolbox": "Verktyg",
        "tool-link-userrights": "Ändra {{GENDER:$1|användargrupper}}",
        "tool-link-userrights-readonly": "Visa {{GENDER:$1|användargrupper}}",
        "tool-link-emailuser": "Skicka e-post till denna {{GENDER:$1|användare}}",
-       "userpage": "Visa användarsida",
-       "projectpage": "Visa projektsida",
        "imagepage": "Visa filsida",
        "mediawikipage": "Visa meddelandesida",
        "templatepage": "Visa mallsida",
index 101771d..aedf0b1 100644 (file)
        "anontalk": "พูดคุย",
        "navigation": "การนำทาง",
        "and": "&#32;และ",
-       "qbfind": "ค้นหา",
-       "qbbrowse": "สืบค้น",
-       "qbedit": "แก้ไข",
-       "qbpageoptions": "หน้านี้",
-       "qbmyoptions": "หน้าของฉัน",
        "faq": "คำถามที่พบบ่อย",
-       "faqpage": "Project:คำถามที่พบบ่อย",
        "actions": "ปฏิบัติการ",
        "namespaces": "เนมสเปซ",
        "variants": "สิ่งที่แตกต่าง",
        "edit-local": "แก้ไขคำอธิบายท้องถิ่น",
        "create": "สร้าง",
        "create-local": "เพิ่มคำอธิบายท้องถิ่น",
-       "editthispage": "แก้ไขหน้านี้",
-       "create-this-page": "สร้างหน้านี้",
        "delete": "ลบ",
-       "deletethispage": "ลบหน้านี้",
-       "undeletethispage": "กู้คืนหน้านี้",
        "undelete_short": "กู้คืนการแก้ไข $1 ครั้ง",
        "viewdeleted_short": "ดู $1 การแก้ไขที่ถูกลบ",
        "protect": "ล็อก",
        "protect_change": "เปลี่ยน",
-       "protectthispage": "ล็อกหน้านี้",
        "unprotect": "เปลี่ยนการล็อก",
-       "unprotectthispage": "เปลี่ยนการล็อกหน้านี้",
        "newpage": "หน้าใหม่",
-       "talkpage": "อภิปรายหน้านี้",
        "talkpagelinktext": "พูดคุย",
        "specialpage": "หน้าพิเศษ",
        "personaltools": "เครื่องมือส่วนตัว",
-       "articlepage": "ดูหน้าเนื้อหา",
        "talk": "อภิปราย",
        "views": "ดู",
        "toolbox": "เครื่องมือ",
        "tool-link-userrights": "เปลี่ยนกลุ่ม{{GENDER:$1|ผู้ใช้}}",
        "tool-link-userrights-readonly": "ดูกลุ่ม{{GENDER:$1|ผู้ใช้}}",
        "tool-link-emailuser": "ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้",
-       "userpage": "ดูหน้าผู้ใช้",
-       "projectpage": "ดูหน้าโครงการ",
        "imagepage": "ดูหน้าไฟล์",
        "mediawikipage": "ดูหน้าข้อความ",
        "templatepage": "ดูหน้าแม่แบบ",
index 90249ea..e771d78 100644 (file)
        "anontalk": "Бәхәс",
        "navigation": "Навигация",
        "and": "&#32;һәм",
-       "qbfind": "Эзләү",
-       "qbbrowse": "Карау",
-       "qbedit": "Үзгәртү",
-       "qbpageoptions": "Бу бит",
-       "qbmyoptions": "Битләрем",
        "faq": "ЕБС",
-       "faqpage": "Project:ЕБС",
        "actions": "Гамәлләр",
        "namespaces": "Исемнәр мәйданы",
        "variants": "Вариантлар",
        "edit-local": "Локаль тасвирламаны үзгәртү",
        "create": "Төзү",
        "create-local": "Локаль тасвирлама өстәү",
-       "editthispage": "Бу битне үзгәртү",
-       "create-this-page": "Бу битне төзү",
        "delete": "Бетерү",
-       "deletethispage": "Бу битне бетерү",
-       "undeletethispage": "Бу битне кайтару",
        "undelete_short": "$1 {{PLURAL:$1|төзәтмәне|$1 төзәтмә}} торгызу",
        "viewdeleted_short": "{{PLURAL:$1|1=1 бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}} карау\n{{PLURAL:$1|бетерелгән төзәтмәне|$1 бетерелгән төзәтмәне}} карау",
        "protect": "Яклау",
        "protect_change": "үзгәртү",
-       "protectthispage": "Бу битне яклау",
        "unprotect": "Яклауны үзгәртү",
-       "unprotectthispage": "Бу битнең яклауын үзгәртү",
        "newpage": "Яңа бит",
-       "talkpage": "Бит турында фикер алышу",
        "talkpagelinktext": "бәхәс",
        "specialpage": "Махсус бит",
        "personaltools": "Шәхси кораллар",
-       "articlepage": "Мәкаләне карау",
        "talk": "Бәхәс",
        "views": "Караулар",
        "toolbox": "Кораллар",
        "tool-link-userrights": "{{GENDER:$1|Кулланучының}} төркемнәрен алмаштыру",
        "tool-link-userrights-readonly": "{{GENDER:$1|Кулланучының}} төркемнәрен карау",
        "tool-link-emailuser": "{{GENDER:$1|Кулланучыга}} хат язу",
-       "userpage": "Кулланучы битен карау",
-       "projectpage": "Проект битен карау",
        "imagepage": "Файл битен карау",
        "mediawikipage": "Хәбәр битен карау",
        "templatepage": "Үрнәк битен карау",
index b94ce16..1ac6e04 100644 (file)
        "anontalk": "اس آئی پی پتہ کا تبادلۂ خیال",
        "navigation": "رہنمائی",
        "and": "&#32;اور",
-       "qbfind": "تلاش",
-       "qbbrowse": "مطالعہ",
-       "qbedit": "ترمیم",
-       "qbpageoptions": "یہ صفحہ",
-       "qbmyoptions": "میرے صفحات",
        "faq": "عام طور پر پوچھے جانے والے سوالات",
-       "faqpage": "Project:عمومی سوالات",
        "actions": "اقدامات",
        "namespaces": "نام فضا",
        "variants": "متغیرات",
        "edit-local": "مقامی وضاحت کی ترمیم",
        "create": "تخلیق",
        "create-local": "مقامی وضاحت کا اندراج",
-       "editthispage": "اس صفحہ میں ترمیم کریں",
-       "create-this-page": "اس صفحہ کو تخلیق کریں",
        "delete": "حذف",
-       "deletethispage": "یہ صفحہ حذف کریں",
-       "undeletethispage": "یہ صفحہ بحال کریں",
        "undelete_short": "بحال {{PLURAL:$1|ایک ترمیم|$1 ترامیم}}",
        "viewdeleted_short": "{{PLURAL:$1|ایک ترمیم حذف ہو چکی|$1 ترامیم حذف ہو چکیں}} دیکھیں",
        "protect": "محفوظ",
        "protect_change": "تبدیل کریں",
-       "protectthispage": "اس صفحے کو محفوظ کریں",
        "unprotect": "حفاظت میں تبدیلی",
-       "unprotectthispage": "اِسے صفحے کی حفاظت بدلیں",
        "newpage": "نیا صفحہ",
-       "talkpage": "اس صفحہ پر تبادلۂ خیال کریں",
        "talkpagelinktext": "تبادلۂ خیال",
        "specialpage": "خصوصی صفحہ",
        "personaltools": "ذاتی آلات",
-       "articlepage": "مندرجاتی صفحہ دیکھیے",
        "talk": "تبادلہٴ خیال",
        "views": "مشاہدات",
        "toolbox": "آلات",
        "tool-link-userrights": "حلقہ ہائے {{GENDER:$1|صارف}} میں تبدیلی",
        "tool-link-userrights-readonly": "حلقے{{GENDER:$1|}}دیکھیں",
        "tool-link-emailuser": "اس {{GENDER:$1|صارف}} کو برقی خط لکھیں",
-       "userpage": "صارف کا صفحہ دیکھیے",
-       "projectpage": "منصوبہ کا صفحہ دیکھیے",
        "imagepage": "فائل کا صفحہ دیکھیے",
        "mediawikipage": "پیغام کا صفحہ دیکھیے",
        "templatepage": "سانچہ کا صفحہ دیکھیے",
index b2018b4..e0eb586 100644 (file)
        "anontalk": "שמועס",
        "navigation": "נאַוויגאַציע",
        "and": "&#32;און",
-       "qbfind": "טרעף",
-       "qbbrowse": "בלעטערן",
-       "qbedit": "ענדערן",
-       "qbpageoptions": "דער בלאט",
-       "qbmyoptions": "מיינע בלעטער",
        "faq": "מערסטע געפרעגטע פראגעס",
-       "faqpage": "Project:מערסטע געפרעגט פראגעס",
        "actions": "אַקציעס",
        "namespaces": "נאָמענטיילן",
        "variants": "װאַריאַנטן",
        "edit-local": "רעדאקטירן לאקאלע באשרײַבונג",
        "create": "שאַפֿן",
        "create-local": "צולייגן לאקאלע באשרײַבונג",
-       "editthispage": "ענדערן דעם בלאט",
-       "create-this-page": "שאַפֿן דעם בלאַט",
        "delete": "אויסמעקן",
-       "deletethispage": "אויסמעקן דעם בלאַט",
-       "undeletethispage": "צוריקשטעלן דעם בלאט",
        "undelete_short": "צוריקשטעלן {{PLURAL:$1|איין רעדאַקטירונג|$1 רעדאַקטירונגען}}",
        "viewdeleted_short": "באַקוקן {{PLURAL:$1|איין געמעקטע ענדערונג|$1 געמעקטע ענדערונגען}}",
        "protect": "באשיצן",
        "protect_change": "טוישן",
-       "protectthispage": "באשיץ דעם בלאט",
        "unprotect": "ענדערונג באַשיצונג",
-       "unprotectthispage": "ענדערן באַשיצונג פון דעם בלאַט",
        "newpage": "נייער בלאַט",
-       "talkpage": "שמועסט איבער דעם בלאט",
        "talkpagelinktext": "שמועס",
        "specialpage": "ספעציעלער בלאט",
        "personaltools": "פערזענלעכע געצייג",
-       "articlepage": "זען אינהאַלט בלאַט",
        "talk": "שמועס",
        "views": "קוקן",
        "toolbox": "געצייג",
        "tool-link-userrights": "ענדערן {{GENDER:$1|באַניצער}} גרופעס",
        "tool-link-userrights-readonly": "באקוקן {{GENDER:$1|באַניצער}} גרופעס",
        "tool-link-emailuser": "שיקן {{GENDER:$1|דעם באניצער|די באניצערין}} ע־פאסט",
-       "userpage": "זען באַניצער בלאַט",
-       "projectpage": "זען פראיעקט בלאַט",
        "imagepage": "זען טעקע בלאט",
        "mediawikipage": "זען מעלדונג בלאַט",
        "templatepage": "זעט מוסטער בלאט",
index e19345c..cb9b5ca 100644 (file)
        "anontalk": "對話",
        "navigation": "導覽",
        "and": "&#32;和&#32;",
-       "qbfind": "尋找",
-       "qbbrowse": "瀏覽",
-       "qbedit": "編輯",
-       "qbpageoptions": "此頁面",
-       "qbmyoptions": "我的頁面",
        "faq": "常見問題",
-       "faqpage": "Project:FAQ",
        "actions": "動作",
        "namespaces": "命名空間",
        "variants": "變體",
        "edit-local": "編輯本地說明",
        "create": "建立",
        "create-local": "新增本地說明",
-       "editthispage": "編輯本頁",
-       "create-this-page": "建立本頁",
        "delete": "刪除",
-       "deletethispage": "刪除此頁",
-       "undeletethispage": "取消刪除此頁",
        "undelete_short": "取消刪除 $1 項修訂",
        "viewdeleted_short": "檢視 {{PLURAL:$1|1 項已刪除的修訂|$1 項已刪除的修訂}}",
        "protect": "保護",
        "protect_change": "變更",
-       "protectthispage": "保護此頁面",
        "unprotect": "變更保護",
-       "unprotectthispage": "變更此頁的保護",
        "newpage": "新頁面",
-       "talkpage": "討論此頁面",
        "talkpagelinktext": "對話",
        "specialpage": "特殊頁面",
        "personaltools": "個人工具",
-       "articlepage": "檢視內容頁面",
        "talk": "討論",
        "views": "檢視",
        "toolbox": "工具",
        "tool-link-userrights": "變更{{GENDER:$1|使用者}}群組",
        "tool-link-userrights-readonly": "檢視{{GENDER:$1|使用者}}群組",
        "tool-link-emailuser": "寄信給這位{{GENDER:$1|使用者}}",
-       "userpage": "檢視使用者頁面",
-       "projectpage": "檢視專案頁面",
        "imagepage": "檢視檔案頁面",
        "mediawikipage": "檢視訊息頁面",
        "templatepage": "檢視模板頁面",
        "revdelete-reasonotherlist": "其它原因",
        "revdelete-edit-reasonlist": "編輯刪除原因",
        "revdelete-offender": "修訂作者:",
-       "suppressionlog": "ç¦\81止顯示日誌",
+       "suppressionlog": "ç\9b£ç\9d£日誌",
        "suppressionlogtext": "以下清單為管理員透過刪除或封鎖所隱藏的內容。\n請至 [[Special:BlockList|封鎖清單]] 取得目前已封鎖的清單。",
        "mergehistory": "合併頁面歷史",
        "mergehistory-header": "這頁可以讓您合併一個來源頁面的歷史到另一個新頁面中。\n請確認這次更改能夠繼續保留該頁面先前歷史版本的連續性。",
index ac9f1b7..17b00b7 100644 (file)
@@ -466,6 +466,7 @@ $specialPageAliases = [
        'Newimages'                 => [ 'NewFiles', 'NewImages' ],
        'Newpages'                  => [ 'NewPages' ],
        'PagesWithProp'             => [ 'PagesWithProp', 'Pageswithprop', 'PagesByProp', 'Pagesbyprop' ],
+       'PageData'                  => [ 'Pagedata' ],
        'PageLanguage'              => [ 'PageLanguage' ],
        'PasswordReset'             => [ 'PasswordReset' ],
        'PermanentLink'             => [ 'PermanentLink', 'PermaLink' ],
index d396703..b3866c1 100644 (file)
@@ -309,9 +309,7 @@ class ImportImages extends Maintenance {
                                        if ( $handler ) {
                                                $metadata = MediaWiki\quietCall( 'unserialize', $props['metadata'] );
 
-                                               $publishOptions['headers'] = $handler->getContentHeaders(
-                                                       $metadata, $props['width'], $props['height']
-                                               );
+                                               $publishOptions['headers'] = $handler->getContentHeaders( $metadata );
                                        } else {
                                                $publishOptions['headers'] = [];
                                        }
index 7c0e4af..77c8af8 100644 (file)
@@ -1058,7 +1058,9 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.hlist' => [
-               'styles' => 'resources/src/mediawiki/mediawiki.hlist.css',
+               'skinStyles' => [
+                       'default' => 'resources/src/mediawiki/mediawiki.hlist.css',
+               ],
        ],
        'mediawiki.htmlform' => [
                'scripts' => [
index b7b46f6..375b68b 100644 (file)
                // actual parameter visibility/representation in the URL
                currentFilterState = this.filtersModel.getFiltersFromParameters( uri.query );
                updatedFilterState = this.filtersModel.getFiltersFromParameters( updatedUri.query );
+               // HACK: Re-merge extra parameters in
+               // This is a hack and a quickfix; a better, more sustainable
+               // fix is being worked on with a UriProcessor, but for now
+               // we need to make sure the **comparison** of whether currentFilterState
+               // and updatedFilterState differ **includes** the extra parameters in the URL
+               currentFilterState = $.extend( true, {}, uri.query, currentFilterState );
+               updatedFilterState = $.extend( true, {}, updatedUri.query, updatedFilterState );
 
                // Include highlight states
                $.extend( true,
index 8127695..d973c3e 100644 (file)
@@ -8301,6 +8301,21 @@ subpage
 <p><a rel="mw:WikiLink" href="./User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"./User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
 !! end
 
+!! test
+Serialization of purely hash wikilink
+!! options
+title=[[User:Test/123]]
+subpage
+parsoid=html2wt
+!! html/parsoid
+<p><a href="#a">[[</a></p>
+!! wikitext
+[[#a|<nowiki>[[</nowiki>]]
+!! html/php
+<p><a href="#a">[[</a>
+</p>
+!! end
+
 !! test
 1. Interaction of linktrail and template encapsulation
 !! wikitext
@@ -17895,6 +17910,19 @@ Sanitizer: Validating that <meta> and <link> work, but only for Microdata
 
 !! end
 
+!! test
+Sanitizer: Strip comments from CSS attributes
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+<span style="margin:/*negate mbox-text padding */-0.125em -0.45em; /*rainbow*/rgba(255, 0, 0, 0.3)">2013</span>
+!! html/php
+<p><span style="margin: -0.125em -0.45em;  rgba(255, 0, 0, 0.3)">2013</span>
+</p>
+!! html/parsoid
+<p><span style="margin: -0.125em -0.45em;  rgba(255, 0, 0, 0.3)">2013</span></p>
+!! end
+
 !! test
 Language converter: output gets cut off unexpectedly (T7757)
 !! options
@@ -23420,26 +23448,26 @@ parsoid={
 <meta typeof="mw:Extension/LabeledSectionTransclusion/end" content="2014-04-10 (MW 1.23wmf22)"/></p>
 !! end
 
-## The unconventional output is the result of `usePHPPreProcessor` being
-## disabled in parserTests.js.  This test is mainly just to show <section> is
-## recognized as an extension tag w/o a native handler.
 !! test
 LST Sections: Newfangled approach
 !! wikitext
 <section begin="2011-05-16" />
 <section end="2014-04-10 (MW 1.23wmf22)" />
 !! html/parsoid
-<p><span typeof="mw:Error mw:Extension/section" about="#mwt1" data-mw='{"name":"section","attrs":{"begin":"2011-05-16"},"body":null,"errors":[{"key":"mw-api-extexpand-error","message":"Could not expand extension source."}]}'>&lt;section begin="2011-05-16" /></span>
-<span typeof="mw:Error mw:Extension/section" about="#mwt2" data-mw='{"name":"section","attrs":{"end":"2014-04-10 (MW 1.23wmf22)"},"body":null,"errors":[{"key":"mw-api-extexpand-error","message":"Could not expand extension source."}]}'>&lt;section end="2014-04-10 (MW 1.23wmf22)" /></span></p>
+<p><span typeof="mw:Extension/section" about="#mwt4" data-mw='{"name":"section","attrs":{"begin":"2011-05-16"},"body":null}'>
+</span>
+<span typeof="mw:Extension/section" about="#mwt6" data-mw='{"name":"section","attrs":{"end":"2014-04-10 (MW 1.23wmf22)"},"body":null}'>
+</span></p>
 !! end
 
 #--------- Test stripping of empty nodes in template content ----------
-!!test
+
+!! test
 Empty LI and TR nodes should be stripped from template content
-!!wikitext
+!! wikitext
 {{EmptyLITest}}
 {{EmptyTRTest}}
-!!html/parsoid
+!! html/parsoid
 <ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
 <li>a</li>
 <li>b</li>
@@ -23454,11 +23482,11 @@ Empty LI and TR nodes should be stripped from template content
 </tr>
 </tbody>
 </table>
-!!end
+!! end
 
-!!test
+!! test
 Empty LI and TR nodes should not be stripped from top-level content
-!!wikitext
+!! wikitext
 * a
 *
 * b
@@ -23467,7 +23495,7 @@ Empty LI and TR nodes should not be stripped from top-level content
 |-
 |foo
 |}
-!!html/parsoid
+!! html/parsoid
 <ul>
 <li> a</li>
 <li></li>
@@ -23481,20 +23509,20 @@ Empty LI and TR nodes should not be stripped from top-level content
 </tr>
 </tbody>
 </table>
-!!end
+!! end
 
-!!test
+!! test
 Empty TR nodes should not be stripped if they have any attributes set
-!!wikitext
+!! wikitext
 {{EmptyTRWithHTMLAttrTest}}
-!!html/parsoid
+!! html/parsoid
 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
 <tr align="center"></tr>
 <tr><td>foo</td></tr>
 <tr align="center"></tr>
 <tr><td>bar</td></tr>
 </table>
-!!end
+!! end
 
 #### ----------------------------------------------------------------
 #### The following section of tests are primarily to test
@@ -25911,6 +25939,41 @@ parsoid=html2wt
 [[Foo]]
 !! end
 
+!! test
+Parsoid should accept interwiki shortcuts
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel='mw:WikiLink' href='./fr:Foo'>Foo</a>
+<a rel='mw:ExtLink' href='./fr:Foo'>Foo</a>
+<a href='./fr:Foo'>Foo</a></p>
+<p><a rel='mw:WikiLink' href='fr%3AFoo'>Foo</a>
+<a rel='mw:ExtLink' href='fr%3AFoo'>Foo</a>
+<a href='fr%3AFoo'>Foo</a></p>
+!! wikitext
+[[:fr:Foo|Foo]]
+[[:fr:Foo|Foo]]
+[[:fr:Foo|Foo]]
+
+[[:fr:Foo|Foo]]
+[[:fr:Foo|Foo]]
+[[:fr:Foo|Foo]]
+!! end
+
+!! test
+Parsoid should not accept invalid interwiki shortcuts
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel='mw:WikiLink' href='news:Foo'>Foo</a>
+<a rel='mw:ExtLink' href='news:Foo'>Foo</a>
+<a href='news:Foo'>Foo</a></p>
+!! wikitext
+[news:Foo Foo]
+[news:Foo Foo]
+[news:Foo Foo]
+!! end
+
 # See T93839
 !! test
 New wikilinks should be serialized properly
@@ -28082,6 +28145,17 @@ dice
 <span name="foo"></span>
 !! end
 
+!! test
+New transclusion added after a list should be serialized after the list
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul><li>a</li></ul><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span>
+!! wikitext
+* a
+{{echo|foo}}
+!! end
+
 # -----------------------------------------------------------------
 # End of section for Parsoid-only html2wt tests for serialization
 # of new content
index 9c02bbd..b14424f 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 
-use MediaWiki\MediaWikiServices;
-
 /**
  * @group Database
  *
index f01a670..028d3b4 100644 (file)
  */
 class ApiParseTest extends ApiTestCase {
 
-       protected function setUp() {
-               parent::setUp();
-               $this->doLogin();
+       protected static $pageId;
+       protected static $revIds = [];
+
+       public function addDBDataOnce() {
+               $user = static::getTestSysop()->getUser();
+               $title = Title::newFromText( __CLASS__ );
+               $page = WikiPage::factory( $title );
+
+               $status = $page->doEditContent(
+                       ContentHandler::makeContent( 'Test for revdel', $title, CONTENT_MODEL_WIKITEXT ),
+                       __METHOD__ . ' Test for revdel', 0, false, $user
+               );
+               if ( !$status->isOk() ) {
+                       $this->fail( "Failed to create $title: " . $status->getWikiText( false, false, 'en' ) );
+               }
+               self::$pageId = $status->value['revision']->getPage();
+               self::$revIds['revdel'] = $status->value['revision']->getId();
+
+               $status = $page->doEditContent(
+                       ContentHandler::makeContent( 'Test for oldid', $title, CONTENT_MODEL_WIKITEXT ),
+                       __METHOD__ . ' Test for oldid', 0, false, $user
+               );
+               if ( !$status->isOk() ) {
+                       $this->fail( "Failed to edit $title: " . $status->getWikiText( false, false, 'en' ) );
+               }
+               self::$revIds['oldid'] = $status->value['revision']->getId();
+
+               $status = $page->doEditContent(
+                       ContentHandler::makeContent( 'Test for latest', $title, CONTENT_MODEL_WIKITEXT ),
+                       __METHOD__ . ' Test for latest', 0, false, $user
+               );
+               if ( !$status->isOk() ) {
+                       $this->fail( "Failed to edit $title: " . $status->getWikiText( false, false, 'en' ) );
+               }
+               self::$revIds['latest'] = $status->value['revision']->getId();
+
+               RevisionDeleter::createList(
+                       'revision', RequestContext::getMain(), $title, [ self::$revIds['revdel'] ]
+               )->setVisibility( [
+                       'value' => [
+                               Revision::DELETED_TEXT => 1,
+                       ],
+                       'comment' => 'Test for revdel',
+               ] );
+
+               Title::clearCaches(); // Otherwise it has the wrong latest revision for some reason
        }
 
-       public function testParseNonexistentPage() {
-               $somePage = mt_rand();
+       public function testParseByName() {
+               $res = $this->doApiRequest( [
+                       'action' => 'parse',
+                       'page' => __CLASS__,
+               ] );
+               $this->assertContains( 'Test for latest', $res[0]['parse']['text'] );
+
+               $res = $this->doApiRequest( [
+                       'action' => 'parse',
+                       'page' => __CLASS__,
+                       'disablelimitreport' => 1,
+               ] );
+               $this->assertContains( 'Test for latest', $res[0]['parse']['text'] );
+       }
+
+       public function testParseById() {
+               $res = $this->doApiRequest( [
+                       'action' => 'parse',
+                       'pageid' => self::$pageId,
+               ] );
+               $this->assertContains( 'Test for latest', $res[0]['parse']['text'] );
+       }
+
+       public function testParseByOldId() {
+               $res = $this->doApiRequest( [
+                       'action' => 'parse',
+                       'oldid' => self::$revIds['oldid'],
+               ] );
+               $this->assertContains( 'Test for oldid', $res[0]['parse']['text'] );
+               $this->assertArrayNotHasKey( 'textdeleted', $res[0]['parse'] );
+               $this->assertArrayNotHasKey( 'textsuppressed', $res[0]['parse'] );
+       }
+
+       public function testParseRevDel() {
+               $user = static::getTestUser()->getUser();
+               $sysop = static::getTestSysop()->getUser();
 
                try {
                        $this->doApiRequest( [
                                'action' => 'parse',
-                               'page' => $somePage ] );
+                               'oldid' => self::$revIds['revdel'],
+                       ], null, null, $user );
+                       $this->fail( "API did not return an error as expected" );
+               } catch ( ApiUsageException $ex ) {
+                       $this->assertTrue( ApiTestCase::apiExceptionHasCode( $ex, 'permissiondenied' ),
+                               "API failed with error 'permissiondenied'" );
+               }
+
+               $res = $this->doApiRequest( [
+                       'action' => 'parse',
+                       'oldid' => self::$revIds['revdel'],
+               ], null, null, $sysop );
+               $this->assertContains( 'Test for revdel', $res[0]['parse']['text'] );
+               $this->assertArrayHasKey( 'textdeleted', $res[0]['parse'] );
+               $this->assertArrayNotHasKey( 'textsuppressed', $res[0]['parse'] );
+       }
+
+       public function testParseNonexistentPage() {
+               try {
+                       $this->doApiRequest( [
+                               'action' => 'parse',
+                               'page' => 'DoesNotExist',
+                       ] );
 
                        $this->fail( "API did not return an error when parsing a nonexistent page" );
                } catch ( ApiUsageException $ex ) {
diff --git a/tests/phpunit/includes/libs/http/HttpAcceptNegotiatorTest.php b/tests/phpunit/includes/libs/http/HttpAcceptNegotiatorTest.php
new file mode 100644 (file)
index 0000000..4415bc9
--- /dev/null
@@ -0,0 +1,151 @@
+<?php
+
+use Wikimedia\Http\HttpAcceptNegotiator;
+
+/**
+ * @covers Wikimedia\Http\HttpAcceptNegotiator
+ *
+ * @license GPL-2.0+
+ * @author Daniel Kinzler
+ */
+class HttpAcceptNegotiatorTest extends \PHPUnit_Framework_TestCase {
+
+       public function provideGetFirstSupportedValue() {
+               return [
+                       [ // #0: empty
+                               [], // supported
+                               [], // accepted
+                               null, // default
+                               null,  // expected
+                       ],
+                       [ // #1: simple
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xzy', 'text/bar' ], // accepted
+                               null, // default
+                               'text/BAR',  // expected
+                       ],
+                       [ // #2: default
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xzy', 'text/xoo' ], // accepted
+                               'X', // default
+                               'X',  // expected
+                       ],
+                       [ // #3: preference
+                               [ 'text/foo', 'text/bar', 'application/zuul' ], // supported
+                               [ 'text/xoo', 'text/BAR', 'text/foo' ], // accepted
+                               null, // default
+                               'text/bar',  // expected
+                       ],
+                       [ // #4: * wildcard
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xoo', '*' ], // accepted
+                               null, // default
+                               'text/foo',  // expected
+                       ],
+                       [ // #5: */* wildcard
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xoo', '*/*' ], // accepted
+                               null, // default
+                               'text/foo',  // expected
+                       ],
+                       [ // #6: text/* wildcard
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'application/*', 'text/foo' ], // accepted
+                               null, // default
+                               'application/zuul',  // expected
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetFirstSupportedValue
+        */
+       public function testGetFirstSupportedValue( $supported, $accepted, $default, $expected ) {
+               $negotiator = new HttpAcceptNegotiator( $supported );
+               $actual = $negotiator->getFirstSupportedValue( $accepted, $default );
+
+               $this->assertEquals( $expected, $actual );
+       }
+
+       public function provideGetBestSupportedKey() {
+               return [
+                       [ // #0: empty
+                               [], // supported
+                               [], // accepted
+                               null, // default
+                               null,  // expected
+                       ],
+                       [ // #1: simple
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xzy' => 1, 'text/bar' => 0.5 ], // accepted
+                               null, // default
+                               'text/BAR',  // expected
+                       ],
+                       [ // #2: default
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xzy' => 1, 'text/xoo' => 0.5 ], // accepted
+                               'X', // default
+                               'X',  // expected
+                       ],
+                       [ // #3: weighted
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/foo' => 0.3, 'text/BAR' => 0.8, 'application/zuul' => 0.5 ], // accepted
+                               null, // default
+                               'text/BAR',  // expected
+                       ],
+                       [ // #4: zero weight
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/foo' => 0, 'text/xoo' => 1 ], // accepted
+                               null, // default
+                               null,  // expected
+                       ],
+                       [ // #5: * wildcard
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xoo' => 0.5, '*' => 0.1 ], // accepted
+                               null, // default
+                               'text/foo',  // expected
+                       ],
+                       [ // #6: */* wildcard
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/xoo' => 0.5, '*/*' => 0.1 ], // accepted
+                               null, // default
+                               'text/foo',  // expected
+                       ],
+                       [ // #7: text/* wildcard
+                               [ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
+                               [ 'text/foo' => 0.3, 'application/*' => 0.8 ], // accepted
+                               null, // default
+                               'application/zuul',  // expected
+                       ],
+                       [ // #8: Test specific format preferred over wildcard (T133314)
+                               [ 'application/rdf+xml', 'text/json', 'text/html' ], // supported
+                               [ '*/*' => 1, 'text/html' => 1 ], // accepted
+                               null, // default
+                               'text/html',  // expected
+                       ],
+                       [ // #9: Test specific format preferred over range (T133314)
+                               [ 'application/rdf+xml', 'text/json', 'text/html' ], // supported
+                               [ 'text/*' => 1, 'text/html' => 1 ], // accepted
+                               null, // default
+                               'text/html',  // expected
+                       ],
+                       [ // #10: Test range preferred over wildcard (T133314)
+                               [ 'application/rdf+xml', 'text/html' ], // supported
+                               [ '*/*' => 1, 'text/*' => 1 ], // accepted
+                               null, // default
+                               'text/html',  // expected
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetBestSupportedKey
+        */
+       public function testGetBestSupportedKey( $supported, $accepted, $default, $expected ) {
+               $negotiator = new HttpAcceptNegotiator( $supported );
+               $actual = $negotiator->getBestSupportedKey( $accepted, $default );
+
+               $this->assertEquals( $expected, $actual );
+       }
+
+}
diff --git a/tests/phpunit/includes/libs/http/HttpAcceptParserTest.php b/tests/phpunit/includes/libs/http/HttpAcceptParserTest.php
new file mode 100644 (file)
index 0000000..5bd9425
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+use Wikimedia\Http\HttpAcceptParser;
+
+/**
+ * @covers Wikimedia\Http\HttpAcceptParser
+ *
+ * @license GPL-2.0+
+ * @author Daniel Kinzler
+ */
+class HttpAcceptParserTest extends \PHPUnit_Framework_TestCase {
+
+       public function provideParseWeights() {
+               return [
+                       [ // #0
+                               '',
+                               []
+                       ],
+                       [ // #1
+                               'Foo/Bar',
+                               [ 'foo/bar' => 1 ]
+                       ],
+                       [ // #2
+                               'Accept: text/plain',
+                               [ 'text/plain' => 1 ]
+                       ],
+                       [ // #3
+                               'Accept: application/vnd.php.serialized, application/rdf+xml',
+                               [ 'application/vnd.php.serialized' => 1, 'application/rdf+xml' => 1 ]
+                       ],
+                       [ // #4
+                               'foo; q=0.2, xoo; q=0,text/n3',
+                               [ 'text/n3' => 1, 'foo' => 0.2 ]
+                       ],
+                       [ // #5
+                               '*; q=0.2, */*; q=0.1,text/*',
+                               [ 'text/*' => 1, '*' => 0.2, '*/*' => 0.1 ]
+                       ],
+                       // TODO: nicely ignore additional type paramerters
+                       //[ // #6
+                       //      'Foo; q=0.2, Xoo; level=3, Bar; charset=xyz; q=0.4',
+                       //      [ 'xoo' => 1, 'bar' => 0.4, 'foo' => 0.1 ]
+                       //],
+               ];
+       }
+
+       /**
+        * @dataProvider provideParseWeights
+        */
+       public function testParseWeights( $header, $expected ) {
+               $parser = new HttpAcceptParser();
+               $actual = $parser->parseWeights( $header );
+
+               $this->assertEquals( $expected, $actual ); // shouldn't be sensitive to order
+       }
+
+}
diff --git a/tests/phpunit/includes/linkeddata/PageDataRequestHandlerTest.php b/tests/phpunit/includes/linkeddata/PageDataRequestHandlerTest.php
new file mode 100644 (file)
index 0000000..56790e2
--- /dev/null
@@ -0,0 +1,270 @@
+<?php
+
+/**
+ * @covers PageDataRequestHandler
+ *
+ * @group PageData
+ *
+ * @license GPL-2.0+
+ */
+class PageDataRequestHandlerTest extends \MediaWikiTestCase {
+
+       /**
+        * @var Title
+        */
+       private $interfaceTitle;
+
+       /**
+        * @var int
+        */
+       private $obLevel;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->interfaceTitle = Title::newFromText( "Special:PageDataRequestHandlerTest" );
+
+               $this->obLevel = ob_get_level();
+       }
+
+       protected function tearDown() {
+               $obLevel = ob_get_level();
+
+               while ( ob_get_level() > $this->obLevel ) {
+                       ob_end_clean();
+               }
+
+               if ( $obLevel !== $this->obLevel ) {
+                       $this->fail( "Test changed output buffer level: was {$this->obLevel}" .
+                               "before test, but $obLevel after test."
+                       );
+               }
+
+               parent::tearDown();
+       }
+
+       /**
+        * @return PageDataRequestHandler
+        */
+       protected function newHandler() {
+               return new PageDataRequestHandler( 'json' );
+       }
+
+       /**
+        * @param array $params
+        * @param string[] $headers
+        *
+        * @return OutputPage
+        */
+       protected function makeOutputPage( array $params, array $headers ) {
+               // construct request
+               $request = new FauxRequest( $params );
+               $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
+
+               foreach ( $headers as $name => $value ) {
+                       $request->setHeader( strtoupper( $name ), $value );
+               }
+
+               // construct Context and OutputPage
+               $context = new DerivativeContext( RequestContext::getMain() );
+               $context->setRequest( $request );
+
+               $output = new OutputPage( $context );
+               $output->setTitle( $this->interfaceTitle );
+               $context->setOutput( $output );
+
+               return $output;
+       }
+
+       public function handleRequestProvider() {
+
+               $cases = [];
+
+               $cases[] = [ '', [], [], '!!', 400 ];
+
+               $cases[] = [ '', [ 'target' => 'Helsinki' ], [], '!!', 303,  [ 'Location' => '!.+!' ] ];
+
+               $subpageCases = [];
+               foreach ( $cases as $c ) {
+                       $case = $c;
+                       $case[0] = '';
+
+                       if ( isset( $case[1]['target'] ) ) {
+                               $case[0] .= $case[1]['target'];
+                               unset( $case[1]['target'] );
+                       }
+
+                       $subpageCases[] = $case;
+               }
+
+               $cases = array_merge( $cases, $subpageCases );
+
+               $cases[] = [
+                       '',
+                       [ 'target' => 'Helsinki' ],
+                       [ 'Accept' => 'text/HTML' ],
+                       '!!',
+                       303,
+                       [ 'Location' => '!Helsinki$!' ]
+               ];
+
+               $cases[] = [
+                       '',
+                       [
+                               'target' => 'Helsinki',
+                               'revision' => '4242',
+                       ],
+                       [ 'Accept' => 'text/HTML' ],
+                       '!!',
+                       303,
+                       [ 'Location' => '!Helsinki(\?|&)oldid=4242!' ]
+               ];
+
+               $cases[] = [
+                       'Helsinki',
+                       [],
+                       [],
+                       '!!',
+                       303,
+                       [ 'Location' => '!Helsinki&action=raw!' ]
+               ];
+
+               // #31: /Q5 with "Accept: text/foobar" triggers a 406
+               $cases[] = [
+                       'Helsinki',
+                       [],
+                       [ 'Accept' => 'text/foobar' ],
+                       '!!',
+                       406,
+                       [],
+               ];
+
+               $cases[] = [
+                       'Helsinki',
+                       [],
+                       [ 'Accept' => 'text/HTML' ],
+                       '!!',
+                       303,
+                       [ 'Location' => '!Helsinki$!' ]
+               ];
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider handleRequestProvider
+        *
+        * @param string $subpage The subpage to request (or '')
+        * @param array  $params  Request parameters
+        * @param array  $headers  Request headers
+        * @param string $expectedOutput Regex to match the output against.
+        * @param int $expectedStatusCode Expected HTTP status code.
+        * @param string[] $expectedHeaders Expected HTTP response headers.
+        */
+       public function testHandleRequest(
+               $subpage,
+               array $params,
+               array $headers,
+               $expectedOutput,
+               $expectedStatusCode = 200,
+               array $expectedHeaders = []
+       ) {
+               $output = $this->makeOutputPage( $params, $headers );
+               $request = $output->getRequest();
+
+               /* @var FauxResponse $response */
+               $response = $request->response();
+
+               // construct handler
+               $handler = $this->newHandler();
+
+               try {
+                       ob_start();
+                       $handler->handleRequest( $subpage, $request, $output );
+
+                       if ( $output->getRedirect() !== '' ) {
+                               // hack to apply redirect to web response
+                               $output->output();
+                       }
+
+                       $text = ob_get_contents();
+                       ob_end_clean();
+
+                       $this->assertEquals( $expectedStatusCode, $response->getStatusCode(), 'status code' );
+                       $this->assertRegExp( $expectedOutput, $text, 'output' );
+
+                       foreach ( $expectedHeaders as $name => $exp ) {
+                               $value = $response->getHeader( $name );
+                               $this->assertNotNull( $value, "header: $name" );
+                               $this->assertInternalType( 'string', $value, "header: $name" );
+                               $this->assertRegExp( $exp, $value, "header: $name" );
+                       }
+               } catch ( HttpError $e ) {
+                       ob_end_clean();
+                       $this->assertEquals( $expectedStatusCode, $e->getStatusCode(), 'status code' );
+                       $this->assertRegExp( $expectedOutput, $e->getHTML(), 'error output' );
+               }
+
+               // We always set "Access-Control-Allow-Origin: *"
+               $this->assertSame( '*', $response->getHeader( 'Access-Control-Allow-Origin' ) );
+       }
+
+       public function provideHttpContentNegotiation() {
+               $helsinki = Title::newFromText( 'Helsinki' );
+               return [
+                       'Accept Header of HTML' => [
+                               $helsinki,
+                               [ 'ACCEPT' => 'text/html' ], // headers
+                               'Helsinki'
+                       ],
+                       'Accept Header without weights' => [
+                               $helsinki,
+                               [ 'ACCEPT' => '*/*, text/html, text/x-wiki' ],
+                               'Helsinki&action=raw'
+                       ],
+                       'Accept Header with weights' => [
+                               $helsinki,
+                               [ 'ACCEPT' => 'text/*; q=0.5, text/json; q=0.7, application/rdf+xml; q=0.8' ],
+                               'Helsinki&action=raw'
+                       ],
+                       'Accept Header accepting evertyhing and HTML' => [
+                               $helsinki,
+                               [ 'ACCEPT' => 'text/html, */*' ],
+                               'Helsinki&action=raw'
+                       ],
+                       'No Accept Header' => [
+                               $helsinki,
+                               [],
+                               'Helsinki&action=raw'
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideHttpContentNegotiation
+        *
+        * @param Title $title
+        * @param array $headers Request headers
+        * @param string $expectedRedirectSuffix Expected suffix of the HTTP Location header.
+        *
+        * @throws HttpError
+        */
+       public function testHttpContentNegotiation(
+               Title $title,
+               array $headers,
+               $expectedRedirectSuffix
+       ) {
+               /* @var FauxResponse $response */
+               $output = $this->makeOutputPage( [], $headers );
+               $request = $output->getRequest();
+
+               $handler = $this->newHandler();
+               $handler->httpContentNegotiation( $request, $output, $title );
+
+               $this->assertStringEndsWith(
+                       $expectedRedirectSuffix,
+                       $output->getRedirect(),
+                       'redirect target'
+               );
+       }
+}
index 530afa0..7a052f6 100644 (file)
@@ -65,27 +65,4 @@ class MediaHandlerTest extends MediaWikiTestCase {
                }
                return $result;
        }
-
-       /**
-        * @covers MediaHandler::getPageRangesByDimensions
-        *
-        * @dataProvider provideTestGetPageRangesByDimensions
-        */
-       public function testGetPageRangesByDimensions( $pagesByDimensions, $expected ) {
-               $this->assertEquals( $expected, MediaHandler::getPageRangesByDimensions( $pagesByDimensions ) );
-       }
-
-       public static function provideTestGetPageRangesByDimensions() {
-               return [
-                       [ [ '123x456' => [ 1 ] ], '123x456:1' ],
-                       [ [ '123x456' => [ 1, 2 ] ], '123x456:1-2' ],
-                       [ [ '123x456' => [ 1, 2, 3 ] ], '123x456:1-3' ],
-                       [ [ '123x456' => [ 1, 2, 3, 5 ] ], '123x456:1-3,5' ],
-                       [ [ '123x456' => [ 1, 3 ] ], '123x456:1,3' ],
-                       [ [ '123x456' => [ 1, 2, 3, 5, 6, 7 ] ], '123x456:1-3,5-7' ],
-                       [ [ '123x456' => [ 1, 2, 3, 5, 6, 7 ],
-                               '789x789' => [ 4, 8, 9 ] ], '123x456:1-3,5-7/789x789:4,8-9'
-                       ],
-               ];
-       }
 }
diff --git a/tests/phpunit/includes/media/XContentDimensionsTest.php b/tests/phpunit/includes/media/XContentDimensionsTest.php
deleted file mode 100644 (file)
index dddcc98..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/**
- * @group Media
- */
-class XContentDimensionsTest extends MediaWikiMediaTestCase {
-       /**
-        * @param string $filename
-        * @param string $expectedXContentDimensions
-        * @dataProvider provideGetContentHeaders
-        * @covers File::getContentHeaders
-        */
-       public function testGetContentHeaders( $filename, $expectedXContentDimensions ) {
-               $file = $this->dataFile( $filename );
-               $headers = $file->getContentHeaders();
-               $this->assertEquals( true, isset( $headers['X-Content-Dimensions'] ) );
-               $this->assertEquals( $headers['X-Content-Dimensions'], $expectedXContentDimensions );
-       }
-
-       public static function provideGetContentHeaders() {
-               return [
-                       [ '80x60-2layers.xcf', '80x60:1' ],
-                       [ 'animated.gif', '45x30:1' ],
-                       [ 'landscape-plain.jpg', '1024x768:1' ],
-                       [ 'portrait-rotated.jpg', '768x1024:1' ],
-                       [ 'Wikimedia-logo.svg', '1024x1024:1' ],
-                       [ 'webp_animated.webp', '300x225:1' ],
-                       [ 'test.tiff', '20x20:1' ],
-               ];
-       }
-}
diff --git a/tests/phpunit/includes/specials/SpecialPageDataTest.php b/tests/phpunit/includes/specials/SpecialPageDataTest.php
new file mode 100644 (file)
index 0000000..2566875
--- /dev/null
@@ -0,0 +1,155 @@
+<?php
+
+/**
+ * @covers SpecialPageData
+ *
+ * @group Database
+ *
+ * @group SpecialPage
+ *
+ * @license GPL-2.0+
+ * @author Daniel Kinzler
+ */
+class SpecialPageDataTest extends SpecialPageTestBase {
+
+       protected function newSpecialPage() {
+               $page = new SpecialPageData();
+
+               // why is this needed?
+               $page->getContext()->setOutput( new OutputPage( $page->getContext() ) );
+
+               $page->setRequestHandler( new PageDataRequestHandler() );
+
+               return $page;
+       }
+
+       public function provideExecute() {
+               $cases = [];
+
+               $cases['Empty request'] = [ '', [], [], '!!', 200 ];
+
+               $cases['Only title specified'] = [
+                       '',
+                       [ 'target' => 'Helsinki' ],
+                       [],
+                       '!!',
+                       303,
+                       [ 'Location' => '!.+!' ]
+               ];
+
+               $subpageCases = [];
+               foreach ( $cases as $c ) {
+                       $case = $c;
+                       $case[0] = '';
+
+                       if ( isset( $case[1]['title'] ) ) {
+                               $case[0] .= $case[1]['title'];
+                               unset( $case[1]['title'] );
+                       }
+
+                       $subpageCases[] = $case;
+               }
+
+               $cases = array_merge( $cases, $subpageCases );
+
+               $cases['Accept only HTML'] = [
+                       '',
+                       [ 'target' => 'Helsinki' ],
+                       [ 'Accept' => 'text/HTML' ],
+                       '!!',
+                       303,
+                       [ 'Location' => '!Helsinki$!' ]
+               ];
+
+               $cases['Accept only HTML with revid'] = [
+                       '',
+                       [
+                               'target' => 'Helsinki',
+                               'revision' => '4242',
+                       ],
+                       [ 'Accept' => 'text/HTML' ],
+                       '!!',
+                       303,
+                       [ 'Location' => '!Helsinki(\?|&)oldid=4242!' ]
+               ];
+
+               $cases['Nothing specified'] = [
+                       'Helsinki',
+                       [],
+                       [],
+                       '!!',
+                       303,
+                       [ 'Location' => '!Helsinki&action=raw!' ]
+               ];
+
+               $cases['Invalid Accept header'] = [
+                       'Helsinki',
+                       [],
+                       [ 'Accept' => 'text/foobar' ],
+                       '!!',
+                       406,
+                       [],
+               ];
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provideExecute
+        *
+        * @param string $subpage The subpage to request (or '')
+        * @param array  $params  Request parameters
+        * @param array  $headers  Request headers
+        * @param string $expRegExp   Regex to match the output against.
+        * @param int    $expCode     Expected HTTP status code
+        * @param array  $expHeaders  Expected HTTP response headers
+        */
+       public function testExecute(
+               $subpage,
+               array $params,
+               array $headers,
+               $expRegExp,
+               $expCode = 200,
+               array $expHeaders = []
+       ) {
+               $request = new FauxRequest( $params );
+               $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
+
+               foreach ( $headers as $name => $value ) {
+                       $request->setHeader( strtoupper( $name ), $value );
+               }
+
+               try {
+                       /* @var FauxResponse $response */
+                       list( $output, $response ) = $this->executeSpecialPage( $subpage, $request );
+
+                       $this->assertEquals( $expCode, $response->getStatusCode(), "status code" );
+                       $this->assertRegExp( $expRegExp, $output, "output" );
+
+                       foreach ( $expHeaders as $name => $exp ) {
+                               $value = $response->getHeader( $name );
+                               $this->assertNotNull( $value, "header: $name" );
+                               $this->assertInternalType( 'string', $value, "header: $name" );
+                               $this->assertRegExp( $exp, $value, "header: $name" );
+                       }
+               } catch ( HttpError $e ) {
+                       $this->assertEquals( $expCode, $e->getStatusCode(), "status code" );
+                       $this->assertRegExp( $expRegExp, $e->getHTML(), "error output" );
+               }
+       }
+
+       public function testSpecialPageWithoutParameters() {
+               $this->setContentLang( Language::factory( 'en' ) );
+               $request = new FauxRequest();
+               $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
+
+               list( $output, ) = $this->executeSpecialPage( '', $request );
+
+               $this->assertContains(
+                       "Content negotiation applies based on you client's Accept header.",
+                       $output,
+                       "output"
+               );
+       }
+
+}