From: jenkins-bot Date: Thu, 21 Mar 2019 23:55:30 +0000 (+0000) Subject: Merge "objectcache: convert APC and hash BagOStuff to using mergeViaCas()" X-Git-Tag: 1.34.0-rc.0~2421 X-Git-Url: http://git.cyclocoop.org/%7B%7B%20url_for%28%27admin_vote_del%27%2C%20idvote=vote.voteid%29%20%7D%7D?a=commitdiff_plain;h=a34f57387da5a71e7d1fba1939ac600a767b64dc;hp=6812712bd69f8c52162bc4cc5e1df42b3c0cb46f;p=lhc%2Fweb%2Fwiklou.git Merge "objectcache: convert APC and hash BagOStuff to using mergeViaCas()" --- diff --git a/.travis.yml b/.travis.yml index 9dc2ef7789..e4a173dce6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,10 +13,6 @@ language: php # - Required for non-buggy xml library for XmlTypeCheck/UploadBaseTest (T75176). dist: trusty -git: - depth: 3 - quiet: true - # Cache NPM and Composer directories # cache: diff --git a/RELEASE-NOTES-1.33 b/RELEASE-NOTES-1.33 index 646a9c24f0..10b1eaa605 100644 --- a/RELEASE-NOTES-1.33 +++ b/RELEASE-NOTES-1.33 @@ -27,6 +27,12 @@ Some specific notes for MediaWiki 1.33 upgrades are below: run your wiki with $wgActorTableSchemaMigrationStage SCHEMA_COMPAT_READ_OLD, note that log_search rows needed to find revision deletions by target user were incorrectly deleted. See T215464 for details. +* If revision deletions were performed when the wiki was configured with + $wgActorTableSchemaMigrationStage SCHEMA_COMPAT_WRITE_BOTH and without + migrateActors.php having been run, the log_search table may contain rows with + empty values for "target_author_actor" which will prevent log searches for + revision deletions by target user from finding those log entries. These rows + may be corrected by (re-)running migrateActors.php. For notes on 1.32.x and older releases, see HISTORY. @@ -331,6 +337,8 @@ because of Phabricator reports. Use ParserOutput::allCacheVaryingOptions instead. * CdnCacheUpdate::newSimplePurge, deprecated in 1.27, has been removed. Use CdnCacheUpdate::newFromTitles() instead. +* Handling of multiple arguments by the Block constructor, deprecated in 1.26, + has been removed. === Deprecations in 1.33 === * The configuration option $wgUseESI has been deprecated, and is expected diff --git a/docs/export-0.10.xsd b/docs/export-0.10.xsd index 9d5d49e08e..6291bfcd28 100644 --- a/docs/export-0.10.xsd +++ b/docs/export-0.10.xsd @@ -224,7 +224,7 @@ - + diff --git a/includes/Block.php b/includes/Block.php index 65408f63a9..0693650238 100644 --- a/includes/Block.php +++ b/includes/Block.php @@ -148,14 +148,6 @@ class Block { 'sitewide' => true, ]; - if ( func_num_args() > 1 || !is_array( $options ) ) { - $options = array_combine( - array_slice( array_keys( $defaults ), 0, func_num_args() ), - func_get_args() - ); - wfDeprecated( __METHOD__ . ' with multiple arguments', '1.26' ); - } - $options += $defaults; $this->setTarget( $options['address'] ); diff --git a/includes/ContentSecurityPolicy.php b/includes/ContentSecurityPolicy.php index 62160461c9..be598eae83 100644 --- a/includes/ContentSecurityPolicy.php +++ b/includes/ContentSecurityPolicy.php @@ -98,11 +98,14 @@ class ContentSecurityPolicy { * * @param int $reportOnly Either self::REPORT_ONLY_MODE or self::FULL_MODE * @return string Name of http header + * @throws UnexpectedValueException */ private function getHeaderName( $reportOnly ) { if ( $reportOnly === self::REPORT_ONLY_MODE ) { return 'Content-Security-Policy-Report-Only'; - } elseif ( $reportOnly === self::FULL_MODE ) { + } + + if ( $reportOnly === self::FULL_MODE ) { return 'Content-Security-Policy'; } throw new UnexpectedValueException( $reportOnly ); @@ -111,7 +114,8 @@ class ContentSecurityPolicy { /** * Determine what CSP policies to set for this page * - * @param array|bool $config Policy configuration (Either $wgCSPHeader or $wgCSPReportOnlyHeader) + * @param array|bool $policyConfig Policy configuration + * (Either $wgCSPHeader or $wgCSPReportOnlyHeader) * @param int $mode self::REPORT_ONLY_MODE, self::FULL_MODE * @return string Policy directives, or empty string for no policy. */ @@ -152,8 +156,8 @@ class ContentSecurityPolicy { } } // Note: default on if unspecified. - if ( ( !isset( $policyConfig['unsafeFallback'] ) - || $policyConfig['unsafeFallback'] ) + if ( !isset( $policyConfig['unsafeFallback'] ) + || $policyConfig['unsafeFallback'] ) { // unsafe-inline should be ignored on browsers // that support 'nonce-foo' sources. diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 68d784614a..3afa593254 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -4877,6 +4877,7 @@ $wgDefaultUserOptions = [ 'rows' => 25, // @deprecated since 1.29 No longer used in core 'showhiddencats' => 0, 'shownumberswatching' => 1, + 'showrollbackconfirmation' => 0, 'skin' => false, 'stubthreshold' => 0, 'thumbsize' => 5, @@ -8976,6 +8977,12 @@ $wgInterwikiPrefixDisplayTypes = []; */ $wgMultiContentRevisionSchemaMigrationStage = SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW; +/** + * The schema to use per default when generating XML dumps. This allows sites to control + * explicitly when to make breaking changes to their export and dump format. + */ +$wgXmlDumpSchemaVersion = XML_DUMP_SCHEMA_VERSION_10; + /** * Actor table schema migration stage. * @@ -9004,15 +9011,6 @@ $wgActorTableSchemaMigrationStage = SCHEMA_COMPAT_OLD; */ $wgEnablePartialBlocks = false; -/** - * Enable confirmation prompt for rollback actions to prevent accidental rollbacks. - * May be disabled to reduce number of clicks needed to perform rollbacks. - * - * @since 1.33 - * @var bool - */ -$wgEnableRollbackConfirmationPrompt = true; - /** * Enable stats monitoring when Block Notices are displayed in different places around core * and extensions. @@ -9041,6 +9039,26 @@ $wgOriginTrials = []; */ $wgPriorityHints = false; +/** + * Enable Element Timing. + * + * @warning EXPERIMENTAL! + * + * @since 1.34 + * @var bool + */ +$wgElementTiming = false; + +/** + * Temporary option to show rollback confirmation user settings + * without activating the feature itself + * @see T217039 + * @since 1.33 + * @deprecated 1.33 + * @var bool + */ +$wgDisableRollbackConfirmationFeature = false; + /** * For really cool vim folding this needs to be at the end: * vim: foldmarker=@{,@} foldmethod=marker diff --git a/includes/Defines.php b/includes/Defines.php index 720e8d018d..5f98b443c8 100644 --- a/includes/Defines.php +++ b/includes/Defines.php @@ -317,3 +317,13 @@ define( 'MIGRATION_WRITE_BOTH', 0x10000000 | SCHEMA_COMPAT_READ_BOTH | SCHEMA_CO define( 'MIGRATION_WRITE_NEW', 0x20000000 | SCHEMA_COMPAT_READ_BOTH | SCHEMA_COMPAT_WRITE_NEW ); define( 'MIGRATION_NEW', 0x30000000 | SCHEMA_COMPAT_NEW ); /**@}*/ + +/**@{ + * XML dump schema versions, for use with XmlDumpWriter. + * See also the corresponding export-nnnn.xsd files in the docs directory, + * which are also listed at . + * Note that not all old schema versions are represented here, as several + * were already unsupported at the time these constants were introduced. + */ +define( 'XML_DUMP_SCHEMA_VERSION_10', '0.10' ); +/**@}*/ diff --git a/includes/Linker.php b/includes/Linker.php index 3e50ac64d0..7dc6541c5f 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1768,6 +1768,20 @@ class Linker { $inner = $context->msg( 'brackets' )->rawParams( $inner )->escaped(); } + /** + * FIXME + * Remove all references to DisableRollbackConfirmationFeature + * after release of rollback feature. See T199534 + */ + if ( !MediaWikiServices::getInstance() + ->getMainConfig()->get( 'DisableRollbackConfirmationFeature' ) && + $context->getUser()->getBoolOption( 'showrollbackconfirmation' ) + ) { + $stats = MediaWikiServices::getInstance()->getStatsdDataFactory(); + $stats->increment( 'rollbackconfirmation.event.load' ); + $context->getOutput()->addModules( 'mediawiki.page.rollback.confirmation' ); + } + return '' . $inner . ''; } @@ -1861,20 +1875,25 @@ class Linker { } $title = $rev->getTitle(); + $query = [ 'action' => 'rollback', 'from' => $rev->getUserText(), 'token' => $context->getUser()->getEditToken( 'rollback' ), ]; + $attrs = [ 'data-mw' => 'interface', 'title' => $context->msg( 'tooltip-rollback' )->text(), + 'data-rollback-count' => (int)$editCount ]; + $options = [ 'known', 'noclasses' ]; if ( $context->getRequest()->getBool( 'bot' ) ) { + //T17999 + $query['hidediff'] = '1'; $query['bot'] = '1'; - $query['hidediff'] = '1'; // T17999 } $disableRollbackEditCount = false; diff --git a/includes/WebRequest.php b/includes/WebRequest.php index e5cdda65d4..d5b081e624 100644 --- a/includes/WebRequest.php +++ b/includes/WebRequest.php @@ -387,12 +387,10 @@ class WebRequest { $name = strtr( $name, '.', '_' ); if ( isset( $arr[$name] ) ) { $data = $arr[$name]; - if ( isset( $_GET[$name] ) && !is_array( $data ) ) { + if ( isset( $_GET[$name] ) && is_string( $data ) ) { # Check for alternate/legacy character encoding. $contLang = MediaWikiServices::getInstance()->getContentLanguage(); - if ( $contLang ) { - $data = $contLang->checkTitleEncoding( $data ); - } + $data = $contLang->checkTitleEncoding( $data ); } $data = $this->normalizeUnicode( $data ); return $data; diff --git a/includes/actions/RollbackAction.php b/includes/actions/RollbackAction.php index 03a5bc840a..0e86fda81a 100644 --- a/includes/actions/RollbackAction.php +++ b/includes/actions/RollbackAction.php @@ -25,7 +25,7 @@ * * @ingroup Actions */ -class RollbackAction extends FormlessAction { +class RollbackAction extends FormAction { public function getName() { return 'rollback'; @@ -35,21 +35,67 @@ class RollbackAction extends FormlessAction { return 'rollback'; } - /** - * Temporarily unused message keys due to T88044/T136375: - * - confirm-rollback-top - * - confirm-rollback-button - * - rollbackfailed - * - rollback-missingparam - * - rollback-success-notify - */ + protected function usesOOUI() { + return true; + } + + protected function getDescription() { + return ''; + } + + public function doesWrites() { + return true; + } + + public function onSuccess() { + return false; + } + + public function onSubmit( $data ) { + return false; + } + + protected function alterForm( HTMLForm $form ) { + $form->setWrapperLegendMsg( 'confirm-rollback-top' ); + $form->setSubmitTextMsg( 'confirm-rollback-button' ); + $form->setTokenSalt( 'rollback' ); + + $from = $this->getRequest()->getVal( 'from' ); + if ( $from === null ) { + throw new BadRequestError( 'rollbackfailed', 'rollback-missingparam' ); + } + foreach ( [ 'from', 'bot', 'hidediff', 'summary', 'token' ] as $param ) { + $val = $this->getRequest()->getVal( $param ); + if ( $val !== null ) { + $form->addHiddenField( $param, $val ); + } + } + } /** + * @throws ConfigException * @throws ErrorPageError + * @throws ReadOnlyError + * @throws ThrottledError */ - public function onView() { - // TODO: use $this->useTransactionalTimeLimit(); when POST only - wfTransactionalTimeLimit(); + public function show() { + /** + * FIXME + * Remove temporary check of DisableRollbackConfirmationFeature + * after release of rollback feature. See T199534 + */ + $config = \MediaWiki\MediaWikiServices::getInstance()->getMainConfig(); + if ( $config->get( 'DisableRollbackConfirmationFeature' ) == true || + $this->getUser()->getOption( 'showrollbackconfirmation' ) == false || + $this->getRequest()->wasPosted() ) { + $this->handleRollbackRequest(); + } else { + $this->showRollbackConfirmationForm(); + } + } + + public function handleRollbackRequest() { + $this->enableTransactionalTimelimit(); $request = $this->getRequest(); $user = $this->getUser(); @@ -69,15 +115,6 @@ class RollbackAction extends FormlessAction { ] ); } - // @TODO: remove this hack once rollback uses POST (T88044) - $fname = __METHOD__; - $trxLimits = $this->context->getConfig()->get( 'TrxProfilerLimits' ); - $trxProfiler = Profiler::instance()->getTransactionProfiler(); - $trxProfiler->redefineExpectations( $trxLimits['POST'], $fname ); - DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits, $fname ) { - $trxProfiler->redefineExpectations( $trxLimits['PostSend-POST'], $fname ); - } ); - $data = null; $errors = $this->page->doRollback( $from, @@ -92,9 +129,7 @@ class RollbackAction extends FormlessAction { throw new ThrottledError; } - if ( isset( $errors[0][0] ) && - ( $errors[0][0] == 'alreadyrolled' || $errors[0][0] == 'cantrollback' ) - ) { + if ( $this->hasRollbackRelatedErrors( $errors ) ) { $this->getOutput()->setPageTitle( $this->msg( 'rollbackfailed' ) ); $errArray = $errors[0]; $errMsg = array_shift( $errArray ); @@ -166,11 +201,51 @@ class RollbackAction extends FormlessAction { } } - protected function getDescription() { - return ''; + /** + * Enables transactional time limit for POST and GET requests to RollbackAction + * @throws ConfigException + */ + private function enableTransactionalTimelimit() { + // If Rollbacks are made POST-only, use $this->useTransactionalTimeLimit() + wfTransactionalTimeLimit(); + if ( !$this->getRequest()->wasPosted() ) { + /** + * We apply the higher POST limits on GET requests + * to prevent logstash.wikimedia.org from being spammed + */ + $fname = __METHOD__; + $trxLimits = $this->context->getConfig()->get( 'TrxProfilerLimits' ); + $trxProfiler = Profiler::instance()->getTransactionProfiler(); + $trxProfiler->redefineExpectations( $trxLimits['POST'], $fname ); + DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits, $fname + ) { + $trxProfiler->redefineExpectations( $trxLimits['PostSend-POST'], $fname ); + } ); + } } - public function doesWrites() { - return true; + private function showRollbackConfirmationForm() { + $form = $this->getForm(); + if ( $form->show() ) { + $this->onSuccess(); + } + } + + protected function getFormFields() { + return [ + 'intro' => [ + 'type' => 'info', + 'vertical-label' => true, + 'raw' => true, + 'default' => $this->msg( 'confirm-rollback-bottom' )->parse() + ] + ]; + } + + private function hasRollbackRelatedErrors( array $errors ) { + return isset( $errors[0][0] ) && + ( $errors[0][0] == 'alreadyrolled' || + $errors[0][0] == 'cantrollback' + ); } } diff --git a/includes/api/ApiSetNotificationTimestamp.php b/includes/api/ApiSetNotificationTimestamp.php index c9ebfa88cc..ba4c6e8321 100644 --- a/includes/api/ApiSetNotificationTimestamp.php +++ b/includes/api/ApiSetNotificationTimestamp.php @@ -108,14 +108,7 @@ class ApiSetNotificationTimestamp extends ApiBase { $result = []; if ( $params['entirewatchlist'] ) { // Entire watchlist mode: Just update the thing and return a success indicator - if ( is_null( $timestamp ) ) { - $watchedItemStore->resetAllNotificationTimestampsForUser( $user ); - } else { - $watchedItemStore->setNotificationTimestampsForUser( - $user, - $timestamp - ); - } + $watchedItemStore->resetAllNotificationTimestampsForUser( $user, $timestamp ); $result['notificationtimestamp'] = is_null( $timestamp ) ? '' diff --git a/includes/api/ApiUpload.php b/includes/api/ApiUpload.php index 2c5b583f3b..12ecd7411c 100644 --- a/includes/api/ApiUpload.php +++ b/includes/api/ApiUpload.php @@ -542,7 +542,7 @@ class ApiUpload extends ApiBase { } // Check blocks - if ( $user->isBlocked() ) { + if ( $user->isBlockedFromUpload() ) { $this->dieBlocked( $user->getBlock() ); } diff --git a/includes/api/i18n/de.json b/includes/api/i18n/de.json index b7892f03d2..36fb60b360 100644 --- a/includes/api/i18n/de.json +++ b/includes/api/i18n/de.json @@ -307,7 +307,7 @@ "apihelp-parse-paramvalue-prop-sections": "Gibt die Abschnitte im geparsten Wikitext zurück.", "apihelp-parse-paramvalue-prop-revid": "Ergänzt die Versionskennung der geparsten Seite.", "apihelp-parse-paramvalue-prop-displaytitle": "Ergänzt den Titel des geparsten Wikitextes.", - "apihelp-parse-paramvalue-prop-headhtml": "Gibt geparsten <head> der Seite zurück.", + "apihelp-parse-paramvalue-prop-headhtml": "Gibt geparsten doctype, offenes <html>, das Element <head> und offenes <body> der Seite aus.", "apihelp-parse-paramvalue-prop-jsconfigvars": "Gibt die JavaScript-Konfigurationsvariablen speziell für die Seite aus. Zur Anwendung verwende mw.config.set().", "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Gibt die JavaScript-Konfigurationsvariablen speziell für die Seite als JSON-Zeichenfolge aus.", "apihelp-parse-paramvalue-prop-indicators": "Gibt das HTML der Seitenstatusindikatoren zurück, die auf der Seite verwendet werden.", diff --git a/includes/api/i18n/en.json b/includes/api/i18n/en.json index 25df749465..f5cdddbb09 100644 --- a/includes/api/i18n/en.json +++ b/includes/api/i18n/en.json @@ -371,7 +371,7 @@ "apihelp-parse-paramvalue-prop-revid": "Adds the revision ID of the parsed page.", "apihelp-parse-paramvalue-prop-displaytitle": "Adds the title of the parsed wikitext.", "apihelp-parse-paramvalue-prop-headitems": "Gives items to put in the <head> of the page.", - "apihelp-parse-paramvalue-prop-headhtml": "Gives parsed <head> of the page.", + "apihelp-parse-paramvalue-prop-headhtml": "Gives parsed doctype, opening <html>, <head> element and opening <body> of the page.", "apihelp-parse-paramvalue-prop-modules": "Gives the ResourceLoader modules used on the page. To load, use mw.loader.using(). Either jsconfigvars or encodedjsconfigvars must be requested jointly with modules.", "apihelp-parse-paramvalue-prop-jsconfigvars": "Gives the JavaScript configuration variables specific to the page. To apply, use mw.config.set().", "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Gives the JavaScript configuration variables specific to the page as a JSON string.", diff --git a/includes/api/i18n/et.json b/includes/api/i18n/et.json index 64107fc0e7..30c73cea18 100644 --- a/includes/api/i18n/et.json +++ b/includes/api/i18n/et.json @@ -4,6 +4,135 @@ "Pikne" ] }, + "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentatsioon]]\n* [[mw:Special:MyLanguage/API:FAQ|KKK]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Postiloend]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API teadaanded]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Vead ja taotlused]\n
\nOlek: MediaWiki API on kasutusküps ja stabiilne liides, millel on olemas tugi ja mida täiustatakse aktiivselt. Püüame seda küll vältida, aga mõnikord võib olla vajalik teha muudatusi, mille järel liides ei toimi enam varasemal kujul. Telli postiloend [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce], et saada teavitusi uuenduste kohta.\n\nVigased päringud: Kui API-le saadetakse vigane päring, saadetakse HTTP päis võtmega \"MediaWiki-API-Error\" ning päisele ja tagastatavale veakoodile määratakse sama väärtus. Täpsemalt loe dokumentatsioonist: [[mw:Special:MyLanguage/API:Errors_and_warnings|API: veateated ja hoiatused]].\n\n

Katsetamine: Et API päringuid lihtsamini katsetada, saad kasutada lehekülge [[Special:ApiSandbox]].

", + "apihelp-main-param-action": "Sooritatav toiming.", + "apihelp-main-param-format": "Väljundi vorming.", + "apihelp-compare-param-prop": "Millised teabe elemendid hankida.", + "apihelp-edit-param-bot": "Märgi see muudatus robotimuudatuseks.", + "apihelp-expandtemplates-param-prop": "Millised teabe elemendid hankida.\n\nPane tähele, et kui väärtusi pole valitud, siis sisaldab tulemus vikiteksti, aga väljund on ebasoovitatavas vormingus.", + "apihelp-feedcontributions-param-feedformat": "Voo väljund.", + "apihelp-feedcontributions-param-user": "Milliste kasutajate kaastöö hankida.", + "apihelp-feedcontributions-param-namespace": "Millise nimeruumi järgi kaastöö filtreerida.", + "apihelp-feedrecentchanges-param-feedformat": "Voo väljund.", + "apihelp-feedwatchlist-param-feedformat": "Voo väljund.", + "apihelp-help-param-helpformat": "Abiväljundi vorming.", + "apihelp-help-example-main": "Põhimooduli abi.", + "apihelp-opensearch-param-format": "Väljundi vorming.", + "apihelp-parse-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query-param-prop": "Millised atribuudid päritavate lehekülgede kohta hankida.", + "apihelp-query-param-list": "Millised loendid hankida.", + "apihelp-query-param-meta": "Millised metaandmed hankida.", + "apihelp-query+allcategories-summary": "Loetle kõik kategooriad.", + "apihelp-query+allcategories-param-from": "Kategooria, millest alates loetleda.", + "apihelp-query+allcategories-param-to": "Kategooria, milleni loetleda.", + "apihelp-query+allcategories-param-dir": "Järjestuse suund.", + "apihelp-query+allcategories-param-limit": "Kui palju kategooriaid tagastada.", + "apihelp-query+allcategories-param-prop": "Millised atribuudid hankida:", + "apihelp-query+alldeletedrevisions-param-start": "Ajatempel, millest alates loetleda.", + "apihelp-query+alldeletedrevisions-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+alldeletedrevisions-param-tag": "Loetle ainult redaktsioonid, mille küljes on see märgis.", + "apihelp-query+alldeletedrevisions-param-excludeuser": "Ära loetle selle kasutaja redaktsioone.", + "apihelp-query+alldeletedrevisions-param-namespace": "Loetle ainult leheküljed selles nimeruumis.", + "apihelp-query+allfileusages-param-from": "Faili pealkiri, millest alates loetleda.", + "apihelp-query+allfileusages-param-to": "Faili pealkiri, milleni loetleda.", + "apihelp-query+allfileusages-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+allfileusages-param-limit": "Kui palju üksusi kokku tagastada.", + "apihelp-query+allfileusages-param-dir": "Järjestuse suund.", + "apihelp-query+allimages-summary": "Loetle kõik pildid järjestatult.", + "apihelp-query+allimages-param-dir": "Järjestuse suund.", + "apihelp-query+allimages-param-from": "Pildi pealkiri, millest alates loetleda. Saab kasutada ainult parameetriga $1sort=name.", + "apihelp-query+allimages-param-to": "Pildi pealkiri, milleni loetleda. Saab kasutada ainult parameetriga $1sort=name.", + "apihelp-query+allimages-param-start": "Ajatempel, millest alates loetleda. Saab kasutada ainult parameetriga $1sort=timestamp.", + "apihelp-query+allimages-param-end": "Ajatempel, milleni loetleda. Saab kasutada ainult parameetriga $1sort=timestamp.", + "apihelp-query+allimages-param-limit": "Kui palju pilte kokku tagastada.", + "apihelp-query+alllinks-summary": "Loetle kõik lingid, mis viitavad teatud nimeruumi.", + "apihelp-query+alllinks-param-from": "Lingi pealkiri, millest alates loetleda.", + "apihelp-query+alllinks-param-to": "Lingi pealkiri, milleni loetleda.", + "apihelp-query+alllinks-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+alllinks-param-namespace": "Loetlemise nimeruum.", + "apihelp-query+alllinks-param-limit": "Kui palju üksusi kokku tagastada.", + "apihelp-query+alllinks-param-dir": "Järjestuse suund.", + "apihelp-query+allmessages-param-prop": "Millised atribuudid hankida.", + "apihelp-query+allpages-summary": "Loetle kõik leheküljed järjestatult teatud nimeruumis.", + "apihelp-query+allpages-param-from": "Lehekülje pealkiri, millest alates loetleda.", + "apihelp-query+allpages-param-to": "Lehekülje pealkiri, milleni loetleda.", + "apihelp-query+allpages-param-namespace": "Loetlemise nimeruum.", + "apihelp-query+allpages-param-filterredir": "Millised leheküljed loetleda.", + "apihelp-query+allpages-param-limit": "Kui palju lehekülgi kokku tagastada.", + "apihelp-query+allpages-param-dir": "Järjestuse suund.", + "apihelp-query+allredirects-param-from": "Ümbersuunamise pealkiri, millest alates loetleda.", + "apihelp-query+allredirects-param-to": "Ümbersuunamise pealkiri, milleni loetleda.", + "apihelp-query+allredirects-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+allredirects-param-namespace": "Loetlemise nimeruum.", + "apihelp-query+allredirects-param-limit": "Kui palju üksusi kokku tagastada.", + "apihelp-query+allredirects-param-dir": "Järjestuse suund.", + "apihelp-query+allrevisions-param-start": "Ajatempel, millest alates loetleda.", + "apihelp-query+allrevisions-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+allrevisions-param-user": "Loetle ainult selle kasutaja redaktsioonid.", + "apihelp-query+allrevisions-param-excludeuser": "Ära loetle selle kasutaja redaktsioone.", + "apihelp-query+allrevisions-param-namespace": "Loetle ainult leheküljed selles nimeruumis.", + "apihelp-query+mystashedfiles-param-prop": "Millised atribuudid failide kohta hankida.", + "apihelp-query+mystashedfiles-param-limit": "Kui palju faile hankida.", + "apihelp-query+alltransclusions-param-from": "Mallina kasutatava lehekülje pealkiri, millest alates loetleda.", + "apihelp-query+alltransclusions-param-to": "Mallina kasutatava lehekülje pealkiri, milleni loetleda.", + "apihelp-query+alltransclusions-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+alltransclusions-param-namespace": "Loetlemise nimeruum.", + "apihelp-query+alltransclusions-param-limit": "Kui palju üksusi kokku tagastada.", + "apihelp-query+alltransclusions-param-dir": "Järjestuse suund.", + "apihelp-query+allusers-summary": "Loetle kõik registreeritud kasutajad.", + "apihelp-query+allusers-param-from": "Kasutajanimi, millest alates loetleda.", + "apihelp-query+allusers-param-to": "Kasutajanimi, milleni loetleda.", + "apihelp-query+allusers-param-dir": "Järjestuse suund.", + "apihelp-query+allusers-param-excludegroup": "Välja arvatud kasutajad, kes on neis rühmades.", + "apihelp-query+allusers-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+allusers-param-limit": "Kui palju kasutajanimesid kokku tagastada.", + "apihelp-query+allusers-param-witheditsonly": "Loetle ainult kasutajad, kes on teinud muudatusi.", + "apihelp-query+backlinks-param-namespace": "Loetlemise nimeruum.", + "apihelp-query+backlinks-param-dir": "Järjestuse suund.", + "apihelp-query+backlinks-param-limit": "Kui palju lehekülgi kokku tagastada. Kui $1redirect on lubatud, siis rakendub piirang mõlemal tasemel eraldi (see tähendab, et tagastada võidakse kuni 2 × $1limit tulemust).", + "apihelp-query+blocks-param-start": "Ajatempel, millest alates loetleda.", + "apihelp-query+blocks-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+blocks-param-prop": "Millised atribuudid hankida:", + "apihelp-query+blocks-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele.\nNäiteks, et näidata ainult IP-aadresside suhtes rakendatud tähtajatuid blokeeringuid, määra $1show=ip|!temp.", + "apihelp-query+categories-param-prop": "Millised lisaatribuudid iga kategooria kohta hankida:", + "apihelp-query+categories-param-show": "Milliseid kategooriaid näidata.", + "apihelp-query+categories-param-limit": "Kui palju kategooriaid tagastada.", + "apihelp-query+categories-param-categories": "Loetle ainult need kategooriad. Kasulik, kui vaja kontrollida, kas teatud lehekülg on teatud kategoorias.", + "apihelp-query+categories-param-dir": "Järjestuse suund.", + "apihelp-query+categorymembers-param-title": "Loetlemise kategooria (nõutav). Peab sisaldama eesliidet {{ns:category}}:. Ei saa kasutada parameetriga $1pageid.", + "apihelp-query+categorymembers-param-pageid": "Loetlemise kategooria lehekülje identifikaator. Ei saa kasutada parameetriga $1title.", + "apihelp-query+categorymembers-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+categorymembers-param-type": "Mis tüüpi liikmed kategooriatest hankida. Eiratakse, kui määratud on $1sort=timestamp.", + "apihelp-query+categorymembers-param-dir": "Järjestuse suund.", + "apihelp-query+contributors-param-limit": "Kui palju kaastöölisi tagastada.", + "apihelp-query+deletedrevisions-param-start": "Ajatempel, millest alates loetleda. Eiratakse, kui töötlusel on redaktsioonide identifikaatorite loend.", + "apihelp-query+deletedrevisions-param-end": "Ajatempel, milleni loetleda. Eiratakse, kui töötlusel on redaktsioonide identifikaatorite loend.", + "apihelp-query+deletedrevisions-param-tag": "Loetle ainult redaktsioonid, mille küljes on see märgis.", + "apihelp-query+deletedrevisions-param-excludeuser": "Ära loetle selle kasutaja redaktsioone.", + "apihelp-query+deletedrevs-param-start": "Ajatempel, millest alates loetleda.", + "apihelp-query+deletedrevs-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+deletedrevs-param-tag": "Loetle ainult redaktsioonid, mille küljes on see märgis.", + "apihelp-query+deletedrevs-param-excludeuser": "Ära loetle selle kasutaja redaktsioone.", + "apihelp-query+deletedrevs-param-namespace": "Loetle ainult leheküljed selles nimeruumis.", + "apihelp-query+duplicatefiles-param-limit": "Kui palju duplikaatfaile tagastada.", + "apihelp-query+duplicatefiles-param-dir": "Järjestuse suund.", + "apihelp-query+embeddedin-param-namespace": "Loetlemise nimeruum.", + "apihelp-query+embeddedin-param-dir": "Järjestuse suund.", + "apihelp-query+embeddedin-param-limit": "Kui palju lehekülgi kokku tagastada.", + "apihelp-query+extlinks-param-limit": "Kui palju linke tagastada.", + "apihelp-query+exturlusage-summary": "Loetle leheküljed, mis sisaldavad teatud internetiaadressi.", + "apihelp-query+exturlusage-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+exturlusage-param-namespace": "Lehekülgede loetlemise nimeruumid.", + "apihelp-query+exturlusage-param-limit": "Kui palju lehekülgi tagastada.", + "apihelp-query+filearchive-summary": "Loetle kõik kustutatud failid järjestatult.", + "apihelp-query+filearchive-param-from": "Pildi pealkiri, millest alates loetleda.", + "apihelp-query+filearchive-param-to": "Pildi pealkiri, milleni loetleda.", + "apihelp-query+filearchive-param-limit": "Kui palju pilte kokku tagastada.", + "apihelp-query+filearchive-param-dir": "Järjestuse suund.", + "apihelp-query+filearchive-param-prop": "Milline pilditeave hankida:", + "apihelp-query+fileusage-param-prop": "Millised atribuudid hankida:", + "apihelp-query+fileusage-param-limit": "Kui palju tagastada.", + "apihelp-query+fileusage-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele:\n;redirect:Näita ainult ümbersuunamisi.\n;!redirect:Näita ainult üksusi, mis pole ümbersuunamised.", "apihelp-query+imageinfo-summary": "Tagastab failiteabe ja üleslaadimisajaloo.", "apihelp-query+imageinfo-param-prop": "Millist teavet faili kohta hankida:", "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Lisab üles laaditud versiooni ajatempli.", @@ -38,5 +167,117 @@ "apihelp-query+imageinfo-param-localonly": "Kaasa päringusse ainult kohaliku hoidla failid.", "apihelp-query+imageinfo-example-simple": "Faili [[:File:Albert Einstein Head.jpg|Albert Einstein Head.jpg]] praeguse versiooni teabe väljavõtt.", "apihelp-query+imageinfo-example-dated": "Faili [[:File:Test.jpg|Test.jpg]] teabe väljavõtt alates 2008. aasta versioonidest.", - "api-help-param-continue": "Kui saadaval on rohkem tulemusi, kasuta seda jätkamiseks." + "apihelp-query+images-param-limit": "Kui palju faile tagastada.", + "apihelp-query+images-param-images": "Loetle ainult need failid. Kasulik, kui vaja kontrollida, kas teatud leheküljel on teatud fail.", + "apihelp-query+images-param-dir": "Järjestuse suund.", + "apihelp-query+imageusage-param-namespace": "Loetlemise nimeruum.", + "apihelp-query+imageusage-param-dir": "Järjestuse suund.", + "apihelp-query+imageusage-param-limit": "Kui palju lehekülgi kokku tagastada. Kui $1redirect on lubatud, siis rakendub piirang mõlemal tasemel eraldi (see tähendab, et tagastada võidakse kuni 2 × $1limit tulemust).", + "apihelp-query+info-param-prop": "Millised lisaatribuudid hankida:", + "apihelp-query+iwbacklinks-param-limit": "Kui palju lehekülgi kokku tagastada.", + "apihelp-query+iwbacklinks-param-prop": "Millised atribuudid hankida:", + "apihelp-query+iwbacklinks-param-dir": "Järjestuse suund.", + "apihelp-query+iwlinks-param-prop": "Millised lisaatribuudid iga intervikilingi kohta hankida:", + "apihelp-query+iwlinks-param-limit": "Kui palju intervikilinke tagastada.", + "apihelp-query+iwlinks-param-dir": "Järjestuse suund.", + "apihelp-query+langbacklinks-param-limit": "Kui palju lehekülgi kokku tagastada.", + "apihelp-query+langbacklinks-param-prop": "Millised atribuudid hankida:", + "apihelp-query+langbacklinks-param-dir": "Järjestuse suund.", + "apihelp-query+langlinks-param-limit": "Kui palju keelelinke tagastada.", + "apihelp-query+langlinks-param-prop": "Millised lisaatribuudid iga intervikilingi kohta hankida:", + "apihelp-query+langlinks-param-dir": "Järjestuse suund.", + "apihelp-query+links-param-limit": "Kui palju linke tagastada.", + "apihelp-query+links-param-titles": "Loetle ainult lingid, mis viitavad neile pealkirjadele. Kasulik, kui vaja kontrollida, kas teatud lehekülg lingib teatud leheküljele.", + "apihelp-query+links-param-dir": "Järjestuse suund.", + "apihelp-query+linkshere-param-prop": "Millised atribuudid hankida:", + "apihelp-query+linkshere-param-limit": "Kui palju tagastada.", + "apihelp-query+linkshere-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele:\n;redirect:Näita ainult ümbersuunamisi.\n;!redirect:Näita ainult üksusi, mis pole ümbersuunamised.", + "apihelp-query+logevents-param-prop": "Millised atribuudid hankida:", + "apihelp-query+logevents-param-type": "Loetle ainult seda tüüpi logisündmused.", + "apihelp-query+logevents-param-action": "Loetle ainult logisündmused selle toimingu kohta. Kirjutab üle parameetri $1type. Väärtused, milles on võimalike väärtuste loetelus metamärk asterisk (toiming/*), võib kaldkriipsu (/) järel olla erinev sõne.", + "apihelp-query+logevents-param-start": "Ajatempel, millest alates loetleda.", + "apihelp-query+logevents-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+logevents-param-user": "Loetle ainult selle kasutaja sissekanded.", + "apihelp-query+logevents-param-namespace": "Loetle ainult sissekanded, mis on selles nimeruumis.", + "apihelp-query+logevents-param-tag": "Loetle ainult logisündmused, mille küljes on see märgis.", + "apihelp-query+logevents-param-limit": "Kui palju logisündmusi kokku tagastada.", + "apihelp-query+pagepropnames-example-simple": "Hangi esimese 10 atribuudi nimi.", + "apihelp-query+pageprops-param-prop": "Loetle ainult need leheatribuudid ([[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]] tagastab kasutatavate atribuutide nimed). Kasulik, kui vaja kontrollida, kas leheküljed kasutavad teatud leheatribuuti.", + "apihelp-query+pageswithprop-summary": "Loetle kõik leheküljed, mis kasutavad teatud leheatribuuti.", + "apihelp-query+pageswithprop-param-propname": "Leheatribuut, mille kohta lehekülgi loetleda ([[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]] tagastab kasutatavate atribuutide nimed).", + "apihelp-query+pageswithprop-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+pageswithprop-paramvalue-prop-value": "Lisab leheatribuudi väärtuse.", + "apihelp-query+pageswithprop-param-dir": "Järjestuse suund.", + "apihelp-query+protectedtitles-param-namespace": "Loetle ainult pealkirjad nendes nimeruumides.", + "apihelp-query+protectedtitles-param-limit": "Kui palju lehekülgi kokku tagastada.", + "apihelp-query+protectedtitles-param-prop": "Millised atribuudid hankida:", + "apihelp-query+random-param-limit": "Kui palju juhuslikke lehekülgi tagastada.", + "apihelp-query+recentchanges-summary": "Loetle viimased muudatused.", + "apihelp-query+recentchanges-param-start": "Ajatempel, millest alates loetleda.", + "apihelp-query+recentchanges-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+recentchanges-param-namespace": "Loetle muudatusi ainult neist nimeruumidest.", + "apihelp-query+recentchanges-param-user": "Loetle ainult selle kasutaja muudatused.", + "apihelp-query+recentchanges-param-excludeuser": "Ära loetle selle kasutaja muudatusi.", + "apihelp-query+recentchanges-param-tag": "Loetle ainult muudatused, mille küljes on see märgis.", + "apihelp-query+recentchanges-param-prop": "Hangi teabe lisaelemendid:", + "apihelp-query+recentchanges-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele. Näiteks, et näha ainult pisimuudatusi, mille on teinud sisseloginud kasutajad, määra $1show=minor|!anon.", + "apihelp-query+recentchanges-param-limit": "Kui palju muudatusi kokku tagastada.", + "apihelp-query+recentchanges-param-type": "Mis tüüpi muudatusi näidata.", + "apihelp-query+recentchanges-param-toponly": "Loetle ainult muudatused, millele vastab viimane redaktsioon.", + "apihelp-query+recentchanges-param-title": "Loetle ainult sissekanded, mis on seotud leheküljega.", + "apihelp-query+redirects-param-prop": "Millised atribuudid hankida:", + "apihelp-query+redirects-param-limit": "Kui palju ümbersuunamisi tagastada.", + "apihelp-query+redirects-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele:\n;redirect:Näita ainult fragmendiga ümbersuunamisi.\n;!redirect:Näita ainult ümbersuunamisi, millel pole fragmenti.", + "apihelp-query+revisions-param-startid": "Redaktsioon, mille ajatemplist alates loetleda. Redaktsioon peab olemas olema, aga ei pea kuuluma selle lehekülje juurde.", + "apihelp-query+revisions-param-endid": "Redaktsioon, mille ajatemplini loetleda. Redaktsioon peab olemas olema, aga ei pea kuuluma selle lehekülje juurde.", + "apihelp-query+revisions-param-start": "Redaktsiooni ajatempel, millest alates loetleda.", + "apihelp-query+revisions-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+revisions-param-tag": "Loetle ainult redaktsioonid, mille küljes on see märgis.", + "apihelp-query+revisions+base-param-prop": "Millised atribuudid iga redaktsiooni kohta hankida:", + "apihelp-query+revisions+base-param-limit": "Kui palju redaktsioone tagastada.", + "apihelp-query+search-summary": "Soorita täisteksti otsing.", + "apihelp-query+search-param-search": "Otsi lehekülgede pealkirju või sisu, mis vastab sellele väärtusele. Saad otsisõnes kasutada neid erifunktsioone, mida otsing selles vikis võimaldab.", + "apihelp-query+search-param-namespace": "Otsi ainult neist nimeruumidest.", + "apihelp-query+search-param-what": "Mis tüüpi otsing sooritada.", + "apihelp-query+search-param-info": "Millised metaandmed tagastada.", + "apihelp-query+search-param-prop": "Millised atribuudid hankida:", + "apihelp-query+search-param-limit": "Kui palju lehekülgi kokku tagastada.", + "apihelp-query+siteinfo-param-prop": "Milline teave hankida:", + "apihelp-query+tags-param-prop": "Millised atribuudid hankida:", + "apihelp-query+templates-param-limit": "Kui palju malle tagastada.", + "apihelp-query+templates-param-templates": "Loetle ainult need mallid. Kasulik, kui vaja kontrollida, kas teatud lehekülg kasutab teatud malli.", + "apihelp-query+templates-param-dir": "Järjestuse suund.", + "apihelp-query+transcludedin-param-prop": "Millised atribuudid hankida:", + "apihelp-query+transcludedin-param-limit": "Kui palju tagastada.", + "apihelp-query+transcludedin-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele:\n;redirect:Näita ainult ümbersuunamisi.\n;!redirect:Näita ainult üksusi, mis pole ümbersuunamised.", + "apihelp-query+usercontribs-param-namespace": "Loetle ainult kaastöö nendes nimeruumides.", + "apihelp-query+usercontribs-param-prop": "Hangi teabe lisaelemendid:", + "apihelp-query+usercontribs-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele. Näiteks ainult muudatused, mis pole pisimuudatused: $2show=!minor.\n\nKui määratud on $2show=patrolled või $2show=!patrolled, siis ei näidata muudatusi, mis on vanemad kui [[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]] ($1 {{PLURAL:$1|sekund|sekundit}}).", + "apihelp-query+usercontribs-param-tag": "Loetle ainult redaktsioonid, mille küljes on see märgis.", + "apihelp-query+usercontribs-param-toponly": "Loetle ainult muudatused, millele vastab viimane redaktsioon.", + "apihelp-query+userinfo-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+users-param-prop": "Millised teabe elemendid hankida:", + "apihelp-query+watchlist-param-start": "Ajatempel, millest alates loetleda.", + "apihelp-query+watchlist-param-end": "Ajatempel, milleni loetleda.", + "apihelp-query+watchlist-param-namespace": "Loetle ainult muudatused neis nimeruumides.", + "apihelp-query+watchlist-param-user": "Loetle ainult selle kasutaja muudatused.", + "apihelp-query+watchlist-param-excludeuser": "Ära loetle selle kasutaja muudatusi.", + "apihelp-query+watchlist-param-limit": "Kui palju tulemusi päringu kohta kokku tagastada.", + "apihelp-query+watchlist-param-prop": "Millised lisaatribuudid hankida:", + "apihelp-query+watchlist-param-show": "Näita ainult üksusi, mis vastavad neile kriteeriumitele. Näiteks, et näha ainult pisimuudatusi, mille on teinud sisseloginud kasutajad, määra $1show=minor|!anon.", + "apihelp-query+watchlist-param-type": "Mis tüüpi muudatusi näidata:", + "apihelp-query+watchlistraw-param-namespace": "Loetle ainult leheküljed nendes nimeruumides.", + "apihelp-query+watchlistraw-param-limit": "Kui palju tulemusi päringu kohta kokku tagastada.", + "apihelp-query+watchlistraw-param-prop": "Millised lisaatribuudid hankida:", + "apihelp-query+watchlistraw-param-show": "Loetle ainult üksused, mis vastavad neile kriteeriumitele.", + "apihelp-query+watchlistraw-param-dir": "Järjestuse suund.", + "apihelp-query+watchlistraw-param-fromtitle": "Pealkiri (nimeruumi eesliitega), millest alates loetleda.", + "apihelp-query+watchlistraw-param-totitle": "Pealkiri (nimeruumi eesliitega), milleni loetleda.", + "api-help-main-header": "Põhimoodul.", + "api-help-param-limit": "Lubatud pole üle $1.", + "api-help-param-limit2": "Lubatud pole üle $1 (robotitele $2).", + "api-help-param-direction": "Loetlemise suund:\n;newer:Vanemad enne. Märkus: element $1start peab olema enne elementi $1end.\n;older:Uuemad enne (vaikimisi). Märkus: element $1start peab olema pärast elementi $1end.", + "api-help-param-continue": "Kui saadaval on rohkem tulemusi, kasuta seda jätkamiseks.", + "apierror-mustbeloggedin": "Pead olema sisse logitud, et $1.", + "apierror-timeout": "Server ei vastanud oodatud aja sees." } diff --git a/includes/api/i18n/ja.json b/includes/api/i18n/ja.json index f824f8d802..6629309c92 100644 --- a/includes/api/i18n/ja.json +++ b/includes/api/i18n/ja.json @@ -596,7 +596,7 @@ "apihelp-query+embeddedin-param-filterredir": "転送ページを絞り込む方法。", "apihelp-query+embeddedin-param-limit": "返すページの総数。", "apihelp-query+embeddedin-example-simple": "Template:Stub を参照読み込みしているページを表示する。", - "apihelp-query+embeddedin-example-generator": "Template:Stub をトランスクルードしているページに関する情報を取得する。", + "apihelp-query+embeddedin-example-generator": "Template:Stub を参照読み込みしているページに関する情報を取得する。", "apihelp-query+extlinks-summary": "与えられたページにあるすべての外部URL (インターウィキを除く) を返します。", "apihelp-query+extlinks-param-limit": "返すリンクの数。", "apihelp-query+extlinks-param-protocol": "URLのプロトコル。このパラメータが空であり、かつ$1query が設定されている場合, protocol は http となります。すべての外部リンクを一覧表示するためにはこのパラメータと $1query の両方を空にしてください。", @@ -869,7 +869,7 @@ "apihelp-query+transcludedin-param-namespace": "この名前空間に含まれるページのみを一覧表示します。", "apihelp-query+transcludedin-param-limit": "返す数。", "apihelp-query+transcludedin-example-simple": "Main Page をトランスクルードしているページの一覧を取得する。", - "apihelp-query+transcludedin-example-generator": "Main Page をトランスクルードしているページに関する情報を取得する。", + "apihelp-query+transcludedin-example-generator": "Main Page を参照読み込みしているページに関する情報を取得する。", "apihelp-query+usercontribs-summary": "利用者によるすべての編集を取得します。", "apihelp-query+usercontribs-param-limit": "返す投稿記録の最大数。", "apihelp-query+usercontribs-param-user": "投稿記録を取得する利用者。$1userids または $1userprefix とは同時に使用できません。", diff --git a/includes/collation/Collation.php b/includes/collation/Collation.php index ab3c6fb432..312c2d438c 100644 --- a/includes/collation/Collation.php +++ b/includes/collation/Collation.php @@ -76,7 +76,7 @@ abstract class Collation { $collationObject = null; Hooks::run( 'Collation::factory', [ $collationName, &$collationObject ] ); - if ( $collationObject instanceof Collation ) { + if ( $collationObject instanceof self ) { return $collationObject; } diff --git a/includes/context/DerivativeContext.php b/includes/context/DerivativeContext.php index 9817c3fc4f..d32617e0c3 100644 --- a/includes/context/DerivativeContext.php +++ b/includes/context/DerivativeContext.php @@ -91,11 +91,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return Config */ public function getConfig() { - if ( !is_null( $this->config ) ) { - return $this->config; - } else { - return $this->getContext()->getConfig(); - } + return $this->config ?: $this->getContext()->getConfig(); } /** @@ -111,11 +107,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return Timing */ public function getTiming() { - if ( !is_null( $this->timing ) ) { - return $this->timing; - } else { - return $this->getContext()->getTiming(); - } + return $this->timing ?: $this->getContext()->getTiming(); } /** @@ -129,11 +121,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return WebRequest */ public function getRequest() { - if ( !is_null( $this->request ) ) { - return $this->request; - } else { - return $this->getContext()->getRequest(); - } + return $this->request ?: $this->getContext()->getRequest(); } /** @@ -147,11 +135,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return Title|null */ public function getTitle() { - if ( !is_null( $this->title ) ) { - return $this->title; - } else { - return $this->getContext()->getTitle(); - } + return $this->title ?: $this->getContext()->getTitle(); } /** @@ -165,11 +149,13 @@ class DerivativeContext extends ContextSource implements MutableContext { public function canUseWikiPage() { if ( $this->wikipage !== null ) { return true; - } elseif ( $this->title !== null ) { + } + + if ( $this->title !== null ) { return $this->title->canExist(); - } else { - return $this->getContext()->canUseWikiPage(); } + + return $this->getContext()->canUseWikiPage(); } /** @@ -190,11 +176,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return WikiPage */ public function getWikiPage() { - if ( !is_null( $this->wikipage ) ) { - return $this->wikipage; - } else { - return $this->getContext()->getWikiPage(); - } + return $this->wikipage ?: $this->getContext()->getWikiPage(); } /** @@ -208,11 +190,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return OutputPage */ public function getOutput() { - if ( !is_null( $this->output ) ) { - return $this->output; - } else { - return $this->getContext()->getOutput(); - } + return $this->output ?: $this->getContext()->getOutput(); } /** @@ -226,11 +204,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return User */ public function getUser() { - if ( !is_null( $this->user ) ) { - return $this->user; - } else { - return $this->getContext()->getUser(); - } + return $this->user ?: $this->getContext()->getUser(); } /** @@ -255,11 +229,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @since 1.19 */ public function getLanguage() { - if ( !is_null( $this->lang ) ) { - return $this->lang; - } else { - return $this->getContext()->getLanguage(); - } + return $this->lang ?: $this->getContext()->getLanguage(); } /** @@ -274,11 +244,7 @@ class DerivativeContext extends ContextSource implements MutableContext { * @return Skin */ public function getSkin() { - if ( !is_null( $this->skin ) ) { - return $this->skin; - } else { - return $this->getContext()->getSkin(); - } + return $this->skin ?: $this->getContext()->getSkin(); } /** diff --git a/includes/db/CloneDatabase.php b/includes/db/CloneDatabase.php index d4277245c1..cdf0f797df 100644 --- a/includes/db/CloneDatabase.php +++ b/includes/db/CloneDatabase.php @@ -25,16 +25,16 @@ use Wikimedia\Rdbms\IMaintainableDatabase; class CloneDatabase { /** @var string Table prefix for cloning */ - private $newTablePrefix = ''; + private $newTablePrefix; /** @var string Current table prefix */ - private $oldTablePrefix = ''; + private $oldTablePrefix; /** @var array List of tables to be cloned */ - private $tablesToClone = []; + private $tablesToClone; /** @var bool Should we DROP tables containing the new names? */ - private $dropCurrentTables = true; + private $dropCurrentTables; /** @var bool Whether to use temporary tables or not */ private $useTemporaryTables = true; @@ -128,7 +128,7 @@ class CloneDatabase { } /** - * Change the table prefix on all open DB connections/ + * Change the table prefix on all open DB connections * * @param string $prefix * @return void diff --git a/includes/db/DatabaseOracle.php b/includes/db/DatabaseOracle.php index a051d83aef..16bde4b959 100644 --- a/includes/db/DatabaseOracle.php +++ b/includes/db/DatabaseOracle.php @@ -116,7 +116,7 @@ class DatabaseOracle extends Database { $this->setFlag( DBO_PERSISTENT ); } - $session_mode = $this->flags & DBO_SYSDBA ? OCI_SYSDBA : OCI_DEFAULT; + $session_mode = ( $this->flags & DBO_SYSDBA ) ? OCI_SYSDBA : OCI_DEFAULT; Wikimedia\suppressWarnings(); if ( $this->flags & DBO_PERSISTENT ) { diff --git a/includes/export/WikiExporter.php b/includes/export/WikiExporter.php index fbcf832070..120632c365 100644 --- a/includes/export/WikiExporter.php +++ b/includes/export/WikiExporter.php @@ -63,12 +63,16 @@ class WikiExporter { /** @var DumpOutput */ public $sink; + /** @var XmlDumpWriter */ + private $writer; + /** - * Returns the export schema version. + * Returns the default export schema version, as defined by $wgXmlDumpSchemaVersion. * @return string */ public static function schemaVersion() { - return "0.10"; + global $wgXmlDumpSchemaVersion; + return $wgXmlDumpSchemaVersion; } /** @@ -83,11 +87,20 @@ class WikiExporter { function __construct( $db, $history = self::CURRENT, $text = self::TEXT ) { $this->db = $db; $this->history = $history; - $this->writer = new XmlDumpWriter(); + $this->writer = new XmlDumpWriter( $text, self::schemaVersion() ); $this->sink = new DumpOutput(); $this->text = $text; } + /** + * @param string $schemaVersion which schema version the generated XML should comply to. + * One of the values from self::$supportedSchemas, using the XML_DUMP_SCHEMA_VERSION_XX + * constants. + */ + public function setSchemaVersion( $schemaVersion ) { + $this->writer = new XmlDumpWriter( $this->text, $schemaVersion ); + } + /** * Set the DumpOutput or DumpFilter object which will receive * various row objects and XML output for filtering. Filters diff --git a/includes/export/XmlDumpWriter.php b/includes/export/XmlDumpWriter.php index fbc4b0d643..3c0b569743 100644 --- a/includes/export/XmlDumpWriter.php +++ b/includes/export/XmlDumpWriter.php @@ -30,6 +30,13 @@ use MediaWiki\Storage\SqlBlobStore; * @ingroup Dump */ class XmlDumpWriter { + /** + * @var string[] the schema versions supported for output + * @final + */ + public static $supportedSchemas = [ + XML_DUMP_SCHEMA_VERSION_10, + ]; /** * Title of the currently processed page diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index a3d1624205..9b9e748c19 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -1838,8 +1838,13 @@ class LocalFile extends File { $this->lock(); - $archiveName = wfTimestamp( TS_MW ) . '!' . $this->getName(); - $archiveRel = $this->getArchiveRel( $archiveName ); + if ( $this->isOld() ) { + $archiveRel = $dstRel; + $archiveName = basename( $archiveRel ); + } else { + $archiveName = wfTimestamp( TS_MW ) . '!' . $this->getName(); + $archiveRel = $this->getArchiveRel( $archiveName ); + } if ( $repo->hasSha1Storage() ) { $sha1 = FileRepo::isVirtualUrl( $srcPath ) diff --git a/includes/import/WikiImporter.php b/includes/import/WikiImporter.php index 4d7210245f..bd19aa7513 100644 --- a/includes/import/WikiImporter.php +++ b/includes/import/WikiImporter.php @@ -893,6 +893,7 @@ class WikiImporter { ) . " exceeds the maximum allowable size ($wgMaxArticleSize KB)" ); } + // FIXME: process schema version 11! $revision = new WikiRevision( $this->config ); if ( isset( $revisionInfo['id'] ) ) { diff --git a/includes/installer/i18n/bg.json b/includes/installer/i18n/bg.json index 4e9ae3b90c..21d7cbb6b2 100644 --- a/includes/installer/i18n/bg.json +++ b/includes/installer/i18n/bg.json @@ -70,7 +70,7 @@ "config-mod-security": "Предупреждение: [https://modsecurity.org/ mod_security]/mod_security2 е включено на вашия уеб сървър. Много от обичайните му конфигурации пораждат проблеми с МедияУики и друг софтуер, който позволява публикуване на произволно съдържание.\nАко е възможно, моля изключете го. В противен случай се обърнете към [https://modsecurity.org/documentation/ документацията на mod_security] или се свържете с поддръжката на хостинга си, ако се сблъскате със случайни грешки.", "config-diff3-bad": "Инструментът за сравняване на текст GNU diff3 не беше намерен. Можете да игнорирате това за сега, но конфликтите при редактиране може да бъдат по-чести.", "config-git": "Налична е системата за контрол на версиите Git: $1.", - "config-git-bad": "Не е намерен софтуер за контрол на версиите Git.", + "config-git-bad": "Не е намерен софтуер за контрол на версиите Git. Може да игнорирате това. Забележете, че Специални:Версия няма да покаже хешове на къмит.", "config-imagemagick": "Открит е ImageMagick: $1.\nПреоразмеряването на картинки ще бъде включено ако качването на файлове бъде разрешено.", "config-gd": "Открита е вградена графичната библиотека GD.\nАко качването на файлове бъде включено, ще бъде включена възможността за преоразмеряване на картинки.", "config-no-scaling": "Не са открити библиотеките GD или ImageMagick.\nПреоразмеряването на картинки ще бъде изключено.", @@ -85,7 +85,7 @@ "config-using-32bit": "Внимание: изглежда, че системата Ви работи с 32-битови числа. Това [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit не се препоръчва].", "config-db-type": "Тип на базата от данни:", "config-db-host": "Сървър на базата от данни:", - "config-db-host-help": "Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.\n\nАко се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост.\n\nАко инсталацията протича на Windows-сървър и се използва MySQL, използването на \"localhost\" може да е неприемливо. В такива случаи се използва \"127.0.0.1\" за локален IP адрес.\n\nПри използване на PostgreSQL, това поле се оставя празно, за свързване чрез Unix socket.", + "config-db-host-help": "Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.\n\nАко се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост.\n\nАко се използва MySQL, използването на „localhost“ може да е неприемливо. В такива случаи се използва „127.0.0.1“ за локален IP адрес.\n\nПри използване на PostgreSQL, това поле се оставя празно, за свързване чрез Unix socket.", "config-db-host-oracle": "TNS на базата от данни:", "config-db-host-oracle-help": "Въведете валидно [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]. Файлът tnsnames.ora трябва да бъде видим за инсталацията.
Ако използвате клиентска библиотека версия 10g или по-нова можете да използвате метода [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].", "config-db-wiki-settings": "Идентифициране на това уики", @@ -133,7 +133,7 @@ "config-invalid-db-server-oracle": "Невалиден TNS на базата от данни „$1“.\nИзползвайте „TNS Name“ или „Easy Connect“ ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи за именуване на Oracle])", "config-invalid-db-name": "Невалидно име на базата от данни „$1“.\nИзползват се само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).", "config-invalid-db-prefix": "Невалидна представка за базата от данни „$1“.\nПозволени са само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).", - "config-connection-error": "$1.\n\nНеобходимо е да се проверят хостът, потребителското име и паролата, след което да се опита отново.", + "config-connection-error": "$1.\n\nНеобходимо е да се проверят хостът, потребителското име и паролата, след което да се опита отново. Ако използвате „localhost“ като хост на базата от данни, опитайте с „127.0.0.1“ вместо него (и обратно).", "config-invalid-schema": "Невалидна схема за МедияУики „$1“.\nДопустими са само ASCII букви (a-z, A-Z), цифри (0-9) и долни черти (_).", "config-db-sys-create-oracle": "Инсталаторът поддържа само сметка SYSDBA за създаване на нова сметка.", "config-db-sys-user-exists-oracle": "Потребителската сметка „$1“ вече съществува. SYSDBA може да се използва само за създаване на нова сметка!", diff --git a/includes/installer/i18n/fa.json b/includes/installer/i18n/fa.json index 3102bfbb7d..c7fe40597c 100644 --- a/includes/installer/i18n/fa.json +++ b/includes/installer/i18n/fa.json @@ -15,10 +15,11 @@ "درفش کاویانی", "Hamisun", "Alifakoor", - "Seb35" + "Seb35", + "Ahmad252" ] }, - "config-desc": "نصب کنندهٔ مدیاویکی", + "config-desc": "نصب‌کنندهٔ مدیاویکی", "config-title": "نصب مدیاویکی $1", "config-information": "اطلاعات", "config-localsettings-upgrade": "یک پرونده LocalSettings.php شناسایی شده‌است.\nبرای ارتقاء این نصب لطفاً مقدار $wgUpgradeKey در جعبه زیر وارد کنید.\nشما می‌توانید آن را در LocalSettings.php پیدا کنید.", @@ -76,9 +77,9 @@ "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] نصب شده‌است.", "config-no-cache-apcu": "هشدار: پیوند [https://secure.php.net/apcu APCu] یا [https://www.iis.net/downloads/microsoft/wincache-extension WinCache] یافت نشد. ذخیره شی فعال نیست.", "config-mod-security": "'''هشدار:''' وب سرور شما [https://modsecurity.org/ mod_security] فعال است.اگر اشتباه پیکربندی شده‌‌ باشد،می تواند باعث ایجاد مشکلاتی برای مدیاویکی یا دیگر نرم‌افزاری شود که به کاربران اجازه می‌دهد پیام دلخواه ارسال کنند.\nبه [https://modsecurity.org/documentation/ mod_security documentation] مراجعه کنید یا اگر با خطاهای اتفاقی مواجه شدید با پشتیبانی میزبان خود در تماس باشید.", - "config-diff3-bad": "جی‌ان‌یو دیف۳ پیدا نشد.", + "config-diff3-bad": "ابزار مقایسه متن تفاوت۳ گنو پیدا نشد. می‌توانید فعلاً این پیام را نادیده بگیرید، اما ممکن است به دفعات بیشتری دچار تعارض ویرایشی شوید.", "config-git": "کنترل نسخهٔ نرم‌افزار گیت پیدا شد: $1.", - "config-git-bad": "کنترل نسخهٔ نرم‌افزار گیت پیدا نشد.", + "config-git-bad": "کنترل نسخهٔ نرم‌افزار گیت پیدا نشد. فعلاً می‌توانید این پیام را نادیده بگیرید. در نظر داشته باشید که ویژه:نسخه، توابع درهم‌سازی‌شده را نمایش نخواهد داد.", "config-imagemagick": "ایمیج‌مجیک پیدا شد: $1.\nاگر ارسال‌ها را فعال کنید،تصویر کوچک فعال خواهد‌شد.", "config-gd": "گرافیک‌های جی‌دی ساخته‌‌ شده در کتابخانه پیدا شد.\nاگر ارسال‌ها را فعال کنید تصویر کوچک فعال خواهد‌شد.", "config-no-scaling": "کتابخانهٔ جی‌دی یا ایمیج‌مجیک نتوانست پیدا شود.\nتصویر کوچک غیر‌فعال خواهد‌شد.", @@ -93,11 +94,11 @@ "config-using-32bit": "هشدار: سیستم شما به‌نظر می‌آید با اعداد صحیح ۳۲ بیت اجرا شده باشد. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit توصیه نمی‌شود].", "config-db-type": "نوع پایگاه اطلاعات:", "config-db-host": "میزبان پایگاه اطلاعات:", - "config-db-host-help": "اگر سرور پایگاه اطلاعاتی شما در سرور دیگری است، نام گروه و آدرس آی‌پی را اینجا وارد کنید.\nاگر از گروه شبکهٔ اشتراک گذاری استفاده می‌کنید، تهیه‌کنندهٔ گروه‌تان باید نام گروه صحیح در اسنادومدارک را به شما بدهد.\nاگر در حال نصب یک سرور ویندوز هستید و از مای‌اس‌کیو‌ال استفاده می‌کنید، ممکن است استفاده از \"گروه داخلی\" برای نام سرور کار نکند.اگر کار نکرد، \"۱۲۷.۰.۰.۱\" را برای آدرس آی‌پی داخلی امتحان کنید.\nاگر از پستگِرِاس‌کیوال استفاده می‌کنید،برای اتصال از طریق یک سوکت یونیکس این زمینه را خالی رها کنید.", + "config-db-host-help": "اگر سرور پایگاه اطلاعاتی شما در سرور دیگری است، نام گروه و آدرس آی‌پی را اینجا وارد کنید.\nاگر از میزبان شبکهٔ به اشتراک گذاشته‌شده استفاده می‌کنید، تهیه‌کنندهٔ خدمات میزبانی شما باید نام میزبان صحیح در اسناد و مدارک را به شما بدهد.\nاگر از مای‌اس‌کیو‌ال استفاده می‌کنید، ممکن است استفاده از «میزبان‌محلی» برای نام سرور کار نکند.اگر کار نکرد، «۱۲۷.۰.۰.۱» را برای آدرس آی‌پی محلی امتحان کنید.\nاگر از پستگرس‌کیوال استفاده می‌کنید، برای اتصال از طریق یک سوکت یونیکس این قسمت را خالی رها کنید.", "config-db-host-oracle": "پایگاه اطلاعاتی تی‌ان‌اس:", "config-db-host-oracle-help": "یک [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] معتبر وارد کنید؛ پوشهٔ tnsnames.ora باید برای این نصب نمایان باشد.
اگر از کتابخانه‌های پردازشگر ۱۰جی یا جدیدتر استفاده می‌کنید،همچنین می‌توانید از روش نامبردهٔ [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] استفاده کنید.", "config-db-wiki-settings": "این ویکی را شناسایی کنید.", - "config-db-name": "نام پایگاه اطلاعاتی:", + "config-db-name": "نام پایگاه داده (بدون خط پیوند):", "config-db-name-help": "نامی را انتخاب کنید که ویکی شما را شناسایی کند.\nنباید شامل فاصله باشد.\nاگر از گروه شبکهٔ اشتراک‌گذاری استفاده می‌کنید، تهیه‌کنندهٔ گروهتان یا باید به شما نام یک پایگاه اطلاعاتی مشخص برای استفاده بدهد یا برای ایجاد پایگاه‌های اطلاعاتی از طریق یک کنترل پنل به شما اجازه بدهد.", "config-db-name-oracle": "طرح کلی پایگاه اطلاعاتی:", "config-db-account-oracle-warn": "برای نصب برنامهٔ اوراکل به عنوان پایگاه اطلاعاتی در بخش گذشته،سه سناریو پشتیبانی شده است:\nاگر مایل به ایجاد حساب پایگاه اطلاعاتی به عنوان بخشی از روند نصب هستید، لطفاً یک حساب با نقش اس‌وای‌اس‌دی‌بی‌ای به عنوان حساب پایگاه اطلاعاتی برای نصب تهیه کنید و اعتبارنامه‌های مطلوبی را برای حساب دردسترس شبکه تعیین کنید، به عبارتی دیگر یا می‌توانید حساب دردسترس شبکه را به طور دستی ایجاد کنید و تنها آن حساب را تهیه کنید (اگر مستلزم مجوزهایی برای ایجاد موضوعات طرح کلی باشد) یا دو حساب دیگر تهیه کنید،یکی با ایجاد مزایا و یک حساب محدود برای دسترسی شبکه.\nمتنی برای ایجاد یک حساب با مزایای لازم بنویسید که می‌تواند در فهرست\"نگهداری/برنامهٔ اوراکل\" این نصب یافت شود. به یاد داشته باشید که استفاده از یک حساب محدود،همهٔ قابلیت‌های نگهداری با حساب پیش‌فرض را غیرفعال خواهد کرد.", @@ -110,11 +111,11 @@ "config-db-account-lock": "در طی عملیات عادی از نام کاربری و رمز عبور یکسان استفاده کنید", "config-db-wiki-account": "حساب کاربری برای عملیات عادی", "config-db-wiki-help": "نام کاربری و رمز عبوری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طی عملیات عادی ویکی استفاده خواهید‌کرد.\nاگر حساب وجود ندارد، و نصب حساب مزایای کافی را داراست، این حساب کاربر با حداقل مزایای مورد نیاز برای عمل کردن ویکی به‌وجود خواهد‌آمد.", - "config-db-prefix": "جدول پیشوند پایگاه اطلاعاتی", + "config-db-prefix": "جدول پیشوند پایگاه داده (بدون خط پیوند):", "config-db-prefix-help": "اگر نیاز دارید یک اطلاعات پایگاهی را بین چندین ویکی یا بین مدیاویکی و برنامهٔ کاربردی وب دیگری به اشتراک بگذارید،مجاز به انتخاب برای اضافه کردن یک پیشوند به همهٔ نام‌های جدول برای جلوگیری از اختلاف‌ها هستید.\nاز فاصله‌ها استفاده نکنید.\nاغلب این زمینه خالی مانده‌است.", "config-mysql-old": "مای‌اس‌کیو‌ال نسخهٔ $1 و یا بالاتر نیاز است، شما نسخهٔ $2 را دارید.", "config-db-port": "درگاه پایگاه‌داده:", - "config-db-schema": "طرح کلی برای مدیاویکی:", + "config-db-schema": "طرح کلی برای مدیاویکی (بدون خط پیوند):", "config-db-schema-help": "طرح کلی اغلب بی‌نقص خواهد بود.\nاگر می‌دانید نیاز دارید که تغییرش دهید،آن را تغییر دهید.", "config-pg-test-error": "نمی‌توان به پایگاه اطلاعاتی '''$1''' وصل شد: $2", "config-sqlite-dir": "فهرست اطلاعات اس‌کیو‌لایت:", @@ -141,7 +142,7 @@ "config-invalid-db-server-oracle": "تی‌ان‌اس پایگاه اطلاعاتی $1 نامعتبر.\nیا از \"نام تی‌ان‌اس\" یا یک سلسله \"ارتباط آسان\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]) استفاده کنید.", "config-invalid-db-name": "نام پایگاه اطلاعاتی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.", "config-invalid-db-prefix": "پیشوند پایگاه اطلاعاتی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.", - "config-connection-error": "$1.\n\nمیزبان، نام کاربری و گذرواژه را بررسی کنید و دوباره امتحان کنید.", + "config-connection-error": "$1.\n\nمیزبان، نام کاربری و گذرواژه را بررسی کرده و دوباره امتحان کنید. اگر از «میزبان محلی» به عنوان میزبان پایگاه داده استفاده می‌کنید، استفاده از «۱۲۷.۰.۰.۱» را امتحان کنید (یا برعکس).", "config-invalid-schema": "طرح‌کلی برای مدیاویکی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.", "config-db-sys-create-oracle": "نصب‌کننده تنها از استفادهٔ یک حساب اس‌وای‌اس‌دی‌بی‌اِی برای ایجاد یک حساب جدید حمایت می‌کند.", "config-db-sys-user-exists-oracle": "حساب کاربری \"$1\" در‌حال‌حاضر وجود دارد.تنها اس‌وای‌اس‌دی‌بی‌اِی می‌تواند برای ایجاد یک حساب جدید استفاده شود!", @@ -157,6 +158,7 @@ "config-sqlite-cant-create-db": "پوشه‌ٔ پایگاه اطلا‌عاتی $1نتوانست ایجاد شود.", "config-sqlite-fts3-downgrade": "پی‌اچ‌پی، پشتیبانی اف‌تی‌اس۳ کار نمی‌کند، کاهش جدول‌ها", "config-can-upgrade": "جدول‌های مدیاویکی در این پایگاه اطلاعاتی وجود دارند.\nبرای ارتقاء دادن آنها به مدیاویکی $1، '''ادامه''' را کلیک کنید.", + "config-upgrade-error": "در به‌روزرسانی جدول‌های مدیاویکی در پایگاه داده شما خطایی پیش آمد.\n\nبرای اطلاعات بیشتر به سیاهۀ بالا نگاه کنید. برای تلاش دوباره، روی ادامه کلیک کنید.", "config-upgrade-done": "تکمیل ارتقاء.\nاکنون شما می‌توانید [$1 start using your wiki].\nاگر می‌خواهید پوشهٔ LocalSettings.php را احیا کنید،دکمهٔ زیر را کلیک کنید.\nاین ''' توصیه نمی‌شود ''' مگر اینکه با ویکی خود مشکل داشته باشید.", "config-upgrade-done-no-regenerate": "ارتقاء کامل شد.\nاکنون شما می‌توانید [$1 start using your wiki].", "config-regenerate": "بازسازی LocalSettings.php ←", @@ -311,15 +313,17 @@ "config-install-mainpage-failed": "قادر به درج صفحهٔ اصلی نمی‌باشد:$1", "config-install-done": "'''تبریک!'''\nبا موفقیت مدیاویکی را نصب کردید.\nبرنامه نصب‌کننده پرونده LocalSettings.php را درست کرد.\nکه شامل تمام تنظیمات می‌باشد.\n\nشما نیاز به دریافت آن دارید و آن را در پایهٔ نصب ویکی قرار دهید (همان پوشهٔ index.php). دریافت باید به صورت خودکار شروع شده‌باشد.\n\nاگر دریافت شروع نشد یا اگر آن را لغو کردید با کلیک روی پیوند زیر می‌توانید آن را دریافت کنید:\n\n$3\n\n'''توجه داشته باشید:''' اگر این را الآن انجام ندهید، این پرونده تولیدشده در صورتی که نصب را بدون دریافت آن تمام کردید بعداً در اختیار شما قرار نخواهد گرفت.\n\nوقتی انجام شد شما می‌توانید '''[$2 وارد ویکی شوید]'''.", "config-install-done-path": "تبریک!\nمدیاویکی با موفقیت نصب گردید.\nبرنامه نصب‌کننده یک پرونده LocalSettings.php ایجاد کرده است که شامل تمام تنظیمات می‌باشد.\n\nلازم است شما آن را دریافت کرده و در $4 قرار دهید. اِن دریافت می باِست به صورت خودکار شروع شده‌باشد.\n\nاگر دریافت شروع نشده بود و یا آن را لغو کرده اید با کلیک روی پیوند زیر می‌توانید آن را دریافت کنید:\n\n$3\n\nتوجه: اگر این کار را هم اکنون انجام ندهید و بدون دریافت آن از برنامه نصب خارج شويد، این پرونده تنظیمات تولیدشده در آینده در اختیار شما قرار نخواهد داشت.\n\nوقتی که آن کار را انجام داديد، می‌توانید [$2 وارد ويکی خودتان شويد].", - "config-install-success": "مدیاویکی به صورت موفقیت‌آمیز نصب شد. شما می‌توانید\nاز <$1$2> برای دیدن ویکی‌تان بازدید کنید.\nاگر پرسشی داشتید، فهرست سوال‌های متداول ما را مطالعه کنید:\n یا از یکی از انجمن‌های پشیبانی ما که در آن صفحه فهرست شده‌اند استفاده کنید.", + "config-install-success": "نصب مدیاویکی موفق بود. شما می‌توانید برای دیدن ویکی‌تان از <$1$2> بازدید کنید.\nاگر پرسشی داشتید، فهرست پرسش‌های متداول ما را مطالعه کنید:\n یا از یکی از انجمن‌های پشیبانی که در آن صفحه فهرست شده‌اند استفاده کنید.", "config-download-localsettings": "دریافت LocalSettings.php", "config-help": "راهنما", "config-help-tooltip": "برای گسترش کلیک کنید", "config-nofile": "پروندهٔ «$1» یافت نشد. آیا حذف شده‌است؟", - "config-extension-link": "آیا می‌دانستید که ویکی شما [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions] را پشتیبانی می‌کند؟\nشما می‌توانید [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category]", + "config-extension-link": "آیا می‌دانستید که ویکی شما از [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions] پشتیبانی می‌کند؟\nمی‌توانید [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category] را مرور کنید.", "config-skins-screenshots": "$1 (تصاویر: $2)", "config-extensions-requires": "$1 (نیازمند $2)", "config-screenshot": "تصویر", + "config-extension-not-found": "پرونده ثبت افزونه «$1» پیدا نشد.", + "config-extension-dependency": "خطای وابسته در حین نصب افزونه «$1» رخ داد: $2", "mainpagetext": "'''مدیاویکی با موفقیت نصب شد.'''", "mainpagedocfooter": "از [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents راهنمای کاربری]\nبرای اطلاعات بیشتر در مورد به‌کارگیری نرم‌افزار ویکی استفاده کنید.\n\n== آغاز به کار ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings فهرست تنظیمات پیکربندی]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ پرسش‌های متداول مدیاویکی]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce فهرست ایمیلی نسخه‌های مدیاویکی]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources محلی‌سازی مدیاویکی به زبان شما]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam یادگیری روش‌های مقابله با هرزنگاری در ویکی]" } diff --git a/includes/installer/i18n/pms.json b/includes/installer/i18n/pms.json index 131e06f430..f928e20bae 100644 --- a/includes/installer/i18n/pms.json +++ b/includes/installer/i18n/pms.json @@ -7,7 +7,8 @@ "아라", "Amire80", "Macofe", - "Seb35" + "Seb35", + "MaxSem" ] }, "config-desc": "L'instalador për mediaWiki", @@ -76,7 +77,7 @@ "config-uploads-not-safe": "'''Avis:''' Sò dossié stàndard për carié $1 a l'é vulneràbil a l'esecussion ëd qualsëssìa senari.\nBele che MediaWiki a contròla j'aspet ëd sicurëssa ëd tùit j'archivi carià, a l'é motobin arcomandà ëd [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security saré ës përtus ëd sicurëssa] prima d'abilité ij cariament.", "config-no-cli-uploads-check": "'''Avis:''' Toa cartela predefinìa për j-amportassion ($1) a l'é nen controlà a propòsit ëd la vulnerabilità\nd'esecussion ëd senari arbitrari durant l'istalassion CLI.", "config-brokenlibxml": "Sò sistema a l'ha na combinassion ëd version PHP e libxml2 che a l'ha dij bigat e a peul provoché la corussion ëd dat ëstërmà an MediaWiki e d'àutre aplicassion për l'aragnà.\nCh'a agiorna a PHP 5.2.9 o pi neuv e libxml2 2.7.3 o pi neuv ([https://bugs.php.net/bug.php?id=45996 bigat archivià con PHP]).\nAnstalassion abortìa.", - "config-suhosin-max-value-length": "Suhosin a l'é instalà e a lìmita la longheur dël paràmetr GET a $1 byte. Ël component ResourceLoader ëd MediaWiki a travajerà an rispetand ës lìmit, ma sòn a degraderà le prestassion. Se possìbil, a dovrìa amposté suhosin.get.max_value_lenght a 1024 o pi àut an php.ini, e amposté $wgResourceLoaderMaxQueryLength al midem valor an LocalSettings.php .", + "config-suhosin-max-value-length": "Suhosin a l'é instalà e a lìmita la longheur dël paràmetr GET a $1 byte. Ël component ResourceLoader ëd MediaWiki a travajerà an rispetand ës lìmit, ma sòn a degraderà le prestassion. Se possìbil, a dovrìa amposté suhosin.get.max_value_length a 1024 o pi àut an php.ini, e amposté $wgResourceLoaderMaxQueryLength al midem valor an LocalSettings.php .", "config-db-type": "Sòrt ëd base ëd dàit:", "config-db-host": "Ospitant ëd la base ëd dàit:", "config-db-host-help": "Se sò servent ëd base ëd dàit a l'é su un servent diferent, ch'a anserissa ambelessì ël nòm dl'ospitant o l'adrëssa IP.\n\nS'a deuvra n'ospitalità partagià, sò fornidor d'ospitalità a dovrìa deje ël nòm dl'ospitant giust ant soa documentassion.\n\nSe a anstala su un servent Windows e a deuvra MySQL, dovré «localhost» a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva «127.0.0.1» com adrëssa IP local.\n\nS'a deuvra PostgresSQL, ch'a lassa sto camp bianch për coleghesse a travers un socket UNIX.", diff --git a/includes/jobqueue/jobs/ClearWatchlistNotificationsJob.php b/includes/jobqueue/jobs/ClearWatchlistNotificationsJob.php index 94c1351a79..b71580a525 100644 --- a/includes/jobqueue/jobs/ClearWatchlistNotificationsJob.php +++ b/includes/jobqueue/jobs/ClearWatchlistNotificationsJob.php @@ -22,11 +22,13 @@ use MediaWiki\MediaWikiServices; /** - * Job for clearing all of the "last viewed" timestamps for a user's watchlist + * Job for clearing all of the "last viewed" timestamps for a user's watchlist, or setting them all + * to the same value. * * Job parameters include: * - userId: affected user ID [required] * - casTime: UNIX timestamp of the event that triggered this job [required] + * - timestamp: value to set all of the "last viewed" timestamps to [optional, defaults to null] * * @ingroup JobQueue * @since 1.31 @@ -38,7 +40,7 @@ class ClearWatchlistNotificationsJob extends Job { static $required = [ 'userId', 'casTime' ]; $missing = implode( ', ', array_diff( $required, array_keys( $this->params ) ) ); if ( $missing != '' ) { - throw new InvalidArgumentException( "Missing paramter(s) $missing" ); + throw new InvalidArgumentException( "Missing parameter(s) $missing" ); } $this->removeDuplicates = true; @@ -51,29 +53,48 @@ class ClearWatchlistNotificationsJob extends Job { $dbw = $lbFactory->getMainLB()->getConnection( DB_MASTER ); $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ ); + $timestamp = $this->params['timestamp'] ?? null; + if ( $timestamp === null ) { + $timestampCond = 'wl_notificationtimestamp IS NOT NULL'; + } else { + $timestamp = $dbw->timestamp( $timestamp ); + $timestampCond = 'wl_notificationtimestamp != ' . $dbw->addQuotes( $timestamp ) . + ' OR wl_notificationtimestamp IS NULL'; + } + // New notifications since the reset should not be cleared + $casTimeCond = 'wl_notificationtimestamp < ' . + $dbw->addQuotes( $dbw->timestamp( $this->params['casTime'] ) ) . + ' OR wl_notificationtimestamp IS NULL'; - $asOfTimes = array_unique( $dbw->selectFieldValues( - 'watchlist', - 'wl_notificationtimestamp', - [ 'wl_user' => $this->params['userId'], 'wl_notificationtimestamp IS NOT NULL' ], - __METHOD__, - [ 'ORDER BY' => 'wl_notificationtimestamp DESC' ] - ) ); - - foreach ( array_chunk( $asOfTimes, $rowsPerQuery ) as $asOfTimeBatch ) { - $dbw->update( + $firstBatch = true; + do { + $idsToUpdate = $dbw->selectFieldValues( 'watchlist', - [ 'wl_notificationtimestamp' => null ], + 'wl_id', [ 'wl_user' => $this->params['userId'], - 'wl_notificationtimestamp' => $asOfTimeBatch, - // New notifications since the reset should not be cleared - 'wl_notificationtimestamp < ' . - $dbw->addQuotes( $dbw->timestamp( $this->params['casTime'] ) ) + $timestampCond, + $casTimeCond, ], - __METHOD__ + __METHOD__, + [ 'LIMIT' => $rowsPerQuery ] ); - $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket ); - } + if ( $idsToUpdate ) { + $dbw->update( + 'watchlist', + [ 'wl_notificationtimestamp' => $timestamp ], + [ + 'wl_id' => $idsToUpdate, + // For paranoia, enforce the CAS time condition here too + $casTimeCond + ], + __METHOD__ + ); + if ( !$firstBatch ) { + $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket ); + } + $firstBatch = false; + } + } while ( $idsToUpdate ); } } diff --git a/includes/libs/objectcache/BagOStuff.php b/includes/libs/objectcache/BagOStuff.php index 27c616725d..e2b021293a 100644 --- a/includes/libs/objectcache/BagOStuff.php +++ b/includes/libs/objectcache/BagOStuff.php @@ -139,7 +139,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface { /** * Get an item with the given key, regenerating and setting it if not found * - * If the callback returns false, then nothing is stored. + * Nothing is stored nor deleted if the callback returns false * * @param string $key * @param int $ttl Time-to-live (seconds) @@ -176,7 +176,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface { * @param string $key * @param int $flags Bitfield of BagOStuff::READ_* constants [optional] * @param int|null $oldFlags [unused] - * @return mixed Returns false on failure and if the item does not exist + * @return mixed Returns false on failure or if the item does not exist */ public function get( $key, $flags = 0, $oldFlags = null ) { // B/C for ( $key, &$casToken = null, $flags = 0 ) @@ -223,7 +223,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface { /** * @param string $key * @param int $flags Bitfield of BagOStuff::READ_* constants [optional] - * @return mixed Returns false on failure and if the item does not exist + * @return mixed Returns false on failure or if the item does not exist */ abstract protected function doGet( $key, $flags = 0 ); @@ -233,7 +233,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface { * @param string $key * @param mixed &$casToken * @param int $flags Bitfield of BagOStuff::READ_* constants [optional] - * @return mixed Returns false on failure and if the item does not exist + * @return mixed Returns false on failure or if the item does not exist * @throws Exception */ protected function getWithToken( $key, &$casToken, $flags = 0 ) { @@ -267,7 +267,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface { * (which will be false if not present), and takes the arguments: * (this BagOStuff, cache key, current value, TTL). * The TTL parameter is reference set to $exptime. It can be overriden in the callback. - * If the callback returns false, then the current value will be unchanged (including TTL). + * Nothing is stored nor deleted if the callback returns false. * * @param string $key * @param callable $callback Callback method to be executed @@ -422,18 +422,32 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface { } /** - * Reset the TTL on a key if it exists + * Change the expiration on a key if it exists + * + * If an expiry in the past is given then the key will immediately be expired * * @param string $key - * @param int $expiry + * @param int $expiry TTL or UNIX timestamp * @param int $flags Bitfield of BagOStuff::WRITE_* constants (since 1.33) - * @return bool Success Returns false if there is no key + * @return bool Success Returns false on failure or if the item does not exist * @since 1.28 */ public function changeTTL( $key, $expiry = 0, $flags = 0 ) { - $value = $this->get( $key ); + $found = false; + + $ok = $this->merge( + $key, + function ( $cache, $ttl, $currentValue ) use ( &$found ) { + $found = ( $currentValue !== false ); + + return $currentValue; // nothing is written if this is false + }, + $expiry, + 1, // 1 attempt + $flags + ); - return ( $value === false ) ? false : $this->set( $key, $value, $expiry, $flags ); + return ( $ok && $found ); } /** diff --git a/includes/libs/rdbms/database/DatabaseSqlite.php b/includes/libs/rdbms/database/DatabaseSqlite.php index 7049df5d3d..f2bc01d5b6 100644 --- a/includes/libs/rdbms/database/DatabaseSqlite.php +++ b/includes/libs/rdbms/database/DatabaseSqlite.php @@ -216,6 +216,11 @@ class DatabaseSqlite extends Database { # Enforce LIKE to be case sensitive, just like MySQL $this->query( 'PRAGMA case_sensitive_like = 1' ); + $sync = $this->sessionVars['synchronous'] ?? null; + if ( in_array( $sync, [ 'EXTRA', 'FULL', 'NORMAL' ], true ) ) { + $this->query( "PRAGMA synchronous = $sync" ); + } + return $this->conn; } diff --git a/includes/media/MediaTransformOutput.php b/includes/media/MediaTransformOutput.php index 87b4be7803..48ea4a510f 100644 --- a/includes/media/MediaTransformOutput.php +++ b/includes/media/MediaTransformOutput.php @@ -358,7 +358,7 @@ class ThumbnailImage extends MediaTransformOutput { * @return string */ function toHtml( $options = [] ) { - global $wgPriorityHints; + global $wgPriorityHints, $wgElementTiming; if ( count( func_get_args() ) == 2 ) { throw new MWException( __METHOD__ . ' called in the old style' ); @@ -374,12 +374,19 @@ class ThumbnailImage extends MediaTransformOutput { 'decoding' => 'async', ]; + $elementTimingName = 'thumbnail'; + if ( $wgPriorityHints && !self::$firstNonIconImageRendered && $this->width * $this->height > 100 * 100 ) { self::$firstNonIconImageRendered = true; $attribs['importance'] = 'high'; + $elementTimingName = 'thumbnail-high'; + } + + if ( $wgElementTiming ) { + $attribs['elementtiming'] = $elementTimingName; } if ( !empty( $options['custom-url-link'] ) ) { diff --git a/includes/parser/BlockLevelPass.php b/includes/parser/BlockLevelPass.php index b2bcc8c0a3..f925038302 100644 --- a/includes/parser/BlockLevelPass.php +++ b/includes/parser/BlockLevelPass.php @@ -199,8 +199,11 @@ class BlockLevelPass { $pendingPTag = false; $inBlockquote = false; - $lineCount = count( $textLines ); - foreach ( $textLines as $i => $inputLine ) { + for ( $textLines->rewind(); $textLines->valid(); ) { + $inputLine = $textLines->current(); + $textLines->next(); + $notLastLine = $textLines->valid(); + # Fix up $lineStart if ( !$this->lineStart ) { $output .= $inputLine; @@ -407,7 +410,7 @@ class BlockLevelPass { $output .= $t; // Add a newline if there's an open paragraph // or we've yet to reach the last line. - if ( $i < $lineCount - 1 || $this->hasOpenParagraph() ) { + if ( $notLastLine || $this->hasOpenParagraph() ) { $output .= "\n"; } } else { diff --git a/includes/preferences/DefaultPreferencesFactory.php b/includes/preferences/DefaultPreferencesFactory.php index 36518823e9..b2f5342ad2 100644 --- a/includes/preferences/DefaultPreferencesFactory.php +++ b/includes/preferences/DefaultPreferencesFactory.php @@ -121,7 +121,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { $this->skinPreferences( $user, $context, $preferences ); $this->datetimePreferences( $user, $context, $preferences ); $this->filesPreferences( $context, $preferences ); - $this->renderingPreferences( $context, $preferences ); + $this->renderingPreferences( $user, $context, $preferences ); $this->editingPreferences( $user, $context, $preferences ); $this->rcPreferences( $user, $context, $preferences ); $this->watchlistPreferences( $user, $context, $preferences ); @@ -800,10 +800,12 @@ class DefaultPreferencesFactory implements PreferencesFactory { } /** + * @param User $user * @param MessageLocalizer $l10n * @param array &$defaultPreferences */ protected function renderingPreferences( + User $user, MessageLocalizer $l10n, &$defaultPreferences ) { @@ -861,6 +863,25 @@ class DefaultPreferencesFactory implements PreferencesFactory { 'section' => 'rendering/advancedrendering', 'label-message' => 'tog-numberheadings', ]; + + if ( $user->isAllowed( 'rollback' ) ) { + $defaultPreferences['showrollbackconfirmation'] = [ + 'type' => 'toggle', + 'section' => 'rendering/advancedrendering', + 'label-message' => 'tog-showrollbackconfirmation', + ]; + + /** + * FIXME + * Remove temporary help text and references to DisableRollbackConfirmationFeature + * after release of rollback feature. See T199534 + */ + if ( MediaWikiServices::getInstance() + ->getMainConfig()->get( 'DisableRollbackConfirmationFeature' ) ) { + $defaultPreferences['showrollbackconfirmation'] + ['help-message'] = 'tog-showrollbackconfirmation-prerelease-warning'; + } + } } /** diff --git a/includes/revisiondelete/RevDelList.php b/includes/revisiondelete/RevDelList.php index 7ddf587c9b..221359da27 100644 --- a/includes/revisiondelete/RevDelList.php +++ b/includes/revisiondelete/RevDelList.php @@ -224,8 +224,21 @@ abstract class RevDelList extends RevisionListBase { } elseif ( IP::isIPAddress( $item->getAuthorName() ) ) { $authorIPs[] = $item->getAuthorName(); } - } - if ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) { + if ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) { + $actorId = $item->getAuthorActor(); + // During migration, the actor field might be empty. If so, populate + // it here. + if ( !$actorId ) { + if ( $item->getAuthorId() > 0 ) { + $user = User::newFromId( $item->getAuthorId() ); + } else { + $user = User::newFromName( $item->getAuthorName(), false ); + } + $actorId = $user->getActorId( $dbw ); + } + $authorActors[] = $actorId; + } + } elseif ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) { $authorActors[] = $item->getAuthorActor(); } diff --git a/includes/session/SessionProvider.php b/includes/session/SessionProvider.php index 1f015b52e6..781fc337a0 100644 --- a/includes/session/SessionProvider.php +++ b/includes/session/SessionProvider.php @@ -374,7 +374,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI public function preventSessionsForUser( $username ) { if ( !$this->canChangeUser() ) { throw new \BadMethodCallException( - __METHOD__ . ' must be implmented when canChangeUser() is false' + __METHOD__ . ' must be implemented when canChangeUser() is false' ); } } diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php index c29c9963bf..a9c0993e29 100644 --- a/includes/skins/SkinTemplate.php +++ b/includes/skins/SkinTemplate.php @@ -171,6 +171,9 @@ class SkinTemplate extends Skin { return $languageLinks; } + /** + * @return QuickTemplate + */ protected function setupTemplateForOutput() { $request = $this->getRequest(); $user = $this->getUser(); @@ -389,8 +392,11 @@ class SkinTemplate extends Skin { if ( $out->isArticle() ) { if ( $this->isRevisionCurrent() ) { if ( $wgMaxCredits != 0 ) { - $tpl->set( 'credits', Action::factory( 'credits', $this->getWikiPage(), - $this->getContext() )->getCredits( $wgMaxCredits, $wgShowCreditsIfMax ) ); + /** @var CreditsAction $action */ + $action = Action::factory( + 'credits', $this->getWikiPage(), $this->getContext() ); + $tpl->set( 'credits', + $action->getCredits( $wgMaxCredits, $wgShowCreditsIfMax ) ); } else { $tpl->set( 'lastmod', $this->lastModified() ); } @@ -526,7 +532,9 @@ class SkinTemplate extends Skin { $html = ''; if ( $personalTools === null ) { - $personalTools = $tpl->getPersonalTools(); + $personalTools = ( $tpl instanceof BaseTemplate ) + ? $tpl->getPersonalTools() + : []; } foreach ( $personalTools as $key => $item ) { @@ -547,7 +555,7 @@ class SkinTemplate extends Skin { $tpl = $this->setupTemplateForOutput(); $tpl->set( 'personal_urls', $this->buildPersonalUrls() ); - return $tpl->getPersonalTools(); + return ( $tpl instanceof BaseTemplate ) ? $tpl->getPersonalTools() : []; } /** diff --git a/includes/specials/SpecialBlock.php b/includes/specials/SpecialBlock.php index 7330e7751e..02a8d009d4 100644 --- a/includes/specials/SpecialBlock.php +++ b/includes/specials/SpecialBlock.php @@ -308,6 +308,18 @@ class SpecialBlock extends FormSpecialPage { 'cssclass' => 'mw-block-confirm', ]; + // Block Id if a block already exists matching the target + $a['BlockId'] = [ + 'type' => 'hidden', + 'default' => '', + ]; + + // Has the form been submitted + $a['WasPosted'] = [ + 'type' => 'hidden', + 'default' => '', + ]; + $this->maybeAlterFormDefaults( $a ); // Allow extensions to add more fields @@ -383,10 +395,16 @@ class SpecialBlock extends FormSpecialPage { $fields['Expiry']['default'] = wfTimestamp( TS_RFC2822, $block->mExpiry ); } + $fields['BlockId']['default'] = $block->getId(); + $this->alreadyBlocked = true; $this->preErrors[] = [ 'ipb-needreblock', wfEscapeWikiText( (string)$block->getTarget() ) ]; } + if ( $this->getRequest()->wasPosted() ) { + $fields['WasPosted']['default'] = true; + } + # We always need confirmation to do HideUser if ( $this->requestedHideUser ) { $fields['Confirm']['type'] = 'check'; diff --git a/includes/user/User.php b/includes/user/User.php index 786f2882c4..fe15034c4e 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -1844,16 +1844,14 @@ class User implements IDBAccessObject, UserIdentity { # user is not immune to autoblocks/hardblocks, and they are the current user so we # know which IP address they're actually coming from $ip = null; - if ( !$this->isAllowed( 'ipblock-exempt' ) ) { - $sessionUser = RequestContext::getMain()->getUser(); - // the session user is set up towards the end of Setup.php. Until then, - // assume it's a logged-out user. - $globalUserName = $sessionUser->isSafeToLoad() - ? $sessionUser->getName() - : IP::sanitizeIP( $sessionUser->getRequest()->getIP() ); - if ( $this->getName() === $globalUserName ) { - $ip = $this->getRequest()->getIP(); - } + $sessionUser = RequestContext::getMain()->getUser(); + // the session user is set up towards the end of Setup.php. Until then, + // assume it's a logged-out user. + $globalUserName = $sessionUser->isSafeToLoad() + ? $sessionUser->getName() + : IP::sanitizeIP( $sessionUser->getRequest()->getIP() ); + if ( $this->getName() === $globalUserName && !$this->isAllowed( 'ipblock-exempt' ) ) { + $ip = $this->getRequest()->getIP(); } // User/IP blocking diff --git a/includes/watcheditem/WatchedItemStore.php b/includes/watcheditem/WatchedItemStore.php index e092859089..8aca689a24 100644 --- a/includes/watcheditem/WatchedItemStore.php +++ b/includes/watcheditem/WatchedItemStore.php @@ -211,6 +211,10 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac } } } + + $pageSeenKey = $this->getPageSeenTimestampsKey( $user ); + $this->latestUpdateCache->delete( $pageSeenKey ); + $this->stash->delete( $pageSeenKey ); } /** @@ -805,36 +809,64 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac } /** + * Set the "last viewed" timestamps for certain titles on a user's watchlist. + * + * If the $targets parameter is omitted or set to [], this method simply wraps + * resetAllNotificationTimestampsForUser(), and in that case you should instead call that method + * directly; support for omitting $targets is for backwards compatibility. + * + * If $targets is omitted or set to [], timestamps will be updated for every title on the user's + * watchlist, and this will be done through a DeferredUpdate. If $targets is a non-empty array, + * only the specified titles will be updated, and this will be done immediately (not deferred). + * * @since 1.27 * @param User $user - * @param string|int $timestamp - * @param LinkTarget[] $targets + * @param string|int $timestamp Value to set the "last viewed" timestamp to (null to clear) + * @param LinkTarget[] $targets Titles to set the timestamp for; [] means the entire watchlist * @return bool */ public function setNotificationTimestampsForUser( User $user, $timestamp, array $targets = [] ) { // Only loggedin user can have a watchlist - if ( $user->isAnon() ) { + if ( $user->isAnon() || $this->readOnlyMode->isReadOnly() ) { return false; } - $dbw = $this->getConnectionRef( DB_MASTER ); - - $conds = [ 'wl_user' => $user->getId() ]; - if ( $targets ) { - $batch = new LinkBatch( $targets ); - $conds[] = $batch->constructSet( 'wl', $dbw ); + if ( !$targets ) { + // Backwards compatibility + $this->resetAllNotificationTimestampsForUser( $user, $timestamp ); + return true; } + $rows = $this->getTitleDbKeysGroupedByNamespace( $targets ); + + $dbw = $this->getConnectionRef( DB_MASTER ); if ( $timestamp !== null ) { $timestamp = $dbw->timestamp( $timestamp ); } + $ticket = $this->lbFactory->getEmptyTransactionTicket( __METHOD__ ); + $affectedSinceWait = 0; - $dbw->update( - 'watchlist', - [ 'wl_notificationtimestamp' => $timestamp ], - $conds, - __METHOD__ - ); + // Batch update items per namespace + foreach ( $rows as $namespace => $namespaceTitles ) { + $rowBatches = array_chunk( $namespaceTitles, $this->updateRowsPerQuery ); + foreach ( $rowBatches as $toUpdate ) { + $dbw->update( + 'watchlist', + [ 'wl_notificationtimestamp' => $timestamp ], + [ + 'wl_user' => $user->getId(), + 'wl_namespace' => $namespace, + 'wl_title' => $toUpdate + ] + ); + $affectedSinceWait += $dbw->affectedRows(); + // Wait for replication every time we've touched updateRowsPerQuery rows + if ( $affectedSinceWait >= $this->updateRowsPerQuery ) { + $this->lbFactory->commitAndWaitForReplication( __METHOD__, $ticket ); + $affectedSinceWait = 0; + } + } + } $this->uncacheUser( $user ); @@ -859,7 +891,13 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac return $timestamp; } - public function resetAllNotificationTimestampsForUser( User $user ) { + /** + * Schedule a DeferredUpdate that sets all of the "last viewed" timestamps for a given user + * to the same value. + * @param User $user + * @param string|int|null $timestamp Value to set all timestamps to, null to clear them + */ + public function resetAllNotificationTimestampsForUser( User $user, $timestamp = null ) { // Only loggedin user can have a watchlist if ( $user->isAnon() ) { return; @@ -868,7 +906,7 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac // If the page is watched by the user (or may be watched), update the timestamp $job = new ClearWatchlistNotificationsJob( $user->getUserPage(), - [ 'userId' => $user->getId(), 'casTime' => time() ] + [ 'userId' => $user->getId(), 'timestamp' => $timestamp, 'casTime' => time() ] ); // Try to run this post-send @@ -1191,7 +1229,7 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac } /** - * @param TitleValue[] $titles + * @param LinkTarget[] $titles * @return array */ private function getTitleDbKeysGroupedByNamespace( array $titles ) { diff --git a/languages/Language.php b/languages/Language.php index aaaf2a206c..9eea7ab1b8 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -2838,11 +2838,14 @@ class Language { } /** + * TODO: $s is not always a string per T218883 * @param string $s * @return string */ function checkTitleEncoding( $s ) { - Assert::parameterType( 'string', $s, '$s' ); + if ( is_array( $s ) ) { + throw new MWException( 'Given array to checkTitleEncoding.' ); + } if ( StringUtils::isUtf8( $s ) ) { return $s; } diff --git a/languages/i18n/ais.json b/languages/i18n/ais.json index ce464142a8..fb82b2ece7 100644 --- a/languages/i18n/ais.json +++ b/languages/i18n/ais.json @@ -2015,7 +2015,6 @@ "revertpage": "mapatiku tuway [[Special:Contributions/$2|$2]] ([[User talk:$2|sasukamu]]) a mikawaway-kalumyiti sazikuzay nay [[User:$1|$1]] amisumad nu ayaway a baziyong", "revertpage-nouser": "mapatiku tu midimut misaungayay ku mikawaway-kalumyiti malasazikuz {{GENDER:$1|[[User:$1|$1]]}} masumad nu ayaway a baziyong", "rollback-success": "mapatiku tuway {{GENDER:$3|$1}} mapasanga’ay a mikawaway-kalumyiti;\nmisumad tatiku nay {{GENDER:$4|$2}} masumad nu ayaway sazikuzay a baziyong.", - "rollback-success-notify": "mapatiku $1 nikawawan mikawaway-kalumyiti;\nmisumad patiku ta $2 masumad nu ayaway a sazikuz cacay baziyong. [$3 paazih ku masumaday]", "sessionfailure-title": "kasasiket mungangaw", "sessionfailure": "kisu patalabu kasasiketan mahiza simunday,\nsaka pataayaw-milangat kasasiketan maalaw atu madebung, tina saungay mapalawpes tuway.\npitatiku ayaway a kasabelih, miliyaw maasip kya kasabelih pitaneng aca.", "changecontentmodel": "misumad lacul tatudungen misanga’", diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index 161ae49b16..e470bb809c 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -2332,7 +2332,6 @@ "revertpage": "استرجع تعديلات [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]]) حتى آخر مراجعة ل[[User:$1|$1]]", "revertpage-nouser": "استرجع تعديلات مستخدم مخفي حتى آخر مراجعة ل{{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "تم استرجاع تعديلات {{GENDER:$3|$1}}، حتى آخر نسخة بواسطة {{GENDER:$4|$2}}.", - "rollback-success-notify": "تم استرجاع التعديلات بواسطة $1;\nتم التغيير إلى آخر مراجعة بواسطة $2. [$3 عرض التغييرات]", "sessionfailure-title": "فشل في الجلسة", "sessionfailure": "يبدو أنه هناك مشكلة في جلسة الدخول الخاصة بك؛\nلذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق.\nمن فضلك أعد إرسال الاستمارة مرة أخرى.", "changecontentmodel": "تغيير نموذج المحتوى لصفحة", diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json index 82d02142ce..b66914bb12 100644 --- a/languages/i18n/ast.json +++ b/languages/i18n/ast.json @@ -2251,7 +2251,6 @@ "revertpage": "Revertíes les ediciones de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]]) hasta la cabera versión de [[User:$1|$1]]", "revertpage-nouser": "Revertíes les ediciones de (usuariu desaniciáu) a la cabera revisión de {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Revertíes les ediciones de {{GENDER:$3|$1}}; devueltu a la última revisión de {{GENDER:$4|$2}}.", - "rollback-success-notify": "Revertíes les ediciones de $1 a la última revisión de $2. [$3 Ver cambeos]", "sessionfailure-title": "Fallu de sesión", "sessionfailure": "Paez qu'hai un problema col aniciu de sesión;\natayóse esta aición por precaución escontra secuestru de sesiones.\nUnvia'l formulariu otra vegada.", "changecontentmodel": "Cambiar el modelu de conteníu d'una páxina", diff --git a/languages/i18n/ba.json b/languages/i18n/ba.json index 8a7e4bcc54..5e9f93e06e 100644 --- a/languages/i18n/ba.json +++ b/languages/i18n/ba.json @@ -2161,7 +2161,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|фекер алышыу]]) уҙгәртеүҙәре [[User:$1|$1]] өлгөһөнә ҡайтарылды", "revertpage-nouser": "(Ҡатнашыусының исеме йәшерелгән) үҙгәртеүҙәре {{GENDER:$1|[[User:$1|$1]]}}өлгөһөнә ҡайтарылды", "rollback-success": "{{GENDER:$3|$1}} үҙгәртеүҙәре кире алынды; {{GENDER:$4|$2}} версияһына ҡайтарылды.", - "rollback-success-notify": "Төҙәтеүҙәр кире тейәлгән $1; һуңғы $2 версияға кире ҡайтыу. [$3 Үҙгәрештәрҙе күрһәтеү]", "sessionfailure-title": "Сеанс хатаһы", "sessionfailure": "Хәҙерге сеанста хаталар килеп сыҡҡан, булырға тейеш;\n\"сеансты баҫып алыу\"ға юл ҡуймау өсөн был ғәмәл үтәлмәне.\nАлдағы биткә кире ҡайтығыҙ, битте яңыртығыҙ һәм яңынан ҡабатлап ҡарағыҙ.", "changecontentmodel": "Биттең контент моделен мөхәррирләү", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index a693179ddb..39b9597056 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -2270,7 +2270,6 @@ "revertpage": "Рэдагаваньні [[Special:Contributions/$2|$2]] ([[User talk:$2|гутаркі]]) скасаваныя да папярэдняй вэрсіі [[User:$1|$1]]", "revertpage-nouser": "Рэдагаваньні схаванага ўдзельніка скасаваныя да папярэдняй вэрсіі {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Адмененыя рэдагаваньні {{GENDER:$3|$1}};\nвернутая папярэдняя вэрсія {{GENDER:$4|$2}}.", - "rollback-success-notify": "Адмененыя праўкі $1;\nвернутая папярэдняя вэрсія $2. [$3 Паказаць зьмены]", "sessionfailure-title": "Памылка сэсіі", "sessionfailure": "Магчыма ўзьніклі праблемы ў вашым цяперашнім сэансе працы;\nгэтае дзеяньне было скасаванае для прадухіленьня перахопу сэансу.\nКалі ласка, падайце форму яшчэ раз.", "changecontentmodel": "Зьмена мадэлі зьместу старонкі", diff --git a/languages/i18n/be.json b/languages/i18n/be.json index 979e34dbbc..8f7bc9b74d 100644 --- a/languages/i18n/be.json +++ b/languages/i18n/be.json @@ -2209,7 +2209,6 @@ "revertpage": "Праўкі аўтарства [[Special:Contributions/$2|$2]] ([[User talk:$2|размова]]) адкочаныя; вернута апошняя версія аўтарства [[User:$1|$1]]", "revertpage-nouser": "Праўкі (імя ўдзельніка схавана) адкочаны да версіі {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Адкочаны праўкі {{GENDER:$3|$1}}; вернута апошняя версія {{GENDER:$4|$2}}.", - "rollback-success-notify": "Адкочаны праўкі $1;\nвернута апошняя версія $2. [$3 Паказаць змены]", "sessionfailure-title": "Памылка сеансу", "sessionfailure": "Магчыма, ёсць праблемы з вашым сеансам працы ў сістэме. Таму вам было адмоўлена ў выкананні дзеяння, каб засцерагчыся ад захопу сеанса.\n\nВярніцеся на папярэднюю старонку, перазагрузіце яе і тады паспрабуйце зноў.", "changecontentmodel": "Змяніць мадэль змесціва старонкі", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index 00c6a0487d..12ce570d11 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -2202,7 +2202,6 @@ "revertpage": "Премахване на [[Special:Contributions/$2|редакции на $2]] ([[User talk:$2|беседа]]); възвръщане към последната версия на [[User:$1|$1]]", "revertpage-nouser": "Връщане на редакции на скрит потребител до последната версия на [[User:$1|$1]]", "rollback-success": "Отменени редакции на {{GENDER:$3|$1}};\nвъзвръщане към последната версия на {{GENDER:$4|$2}}.", - "rollback-success-notify": "Премахнати редакции на $1;\nвръщане към последна версия на $2. [$3 Показване на промени]", "sessionfailure-title": "Прекъсната сесия", "sessionfailure": "Изглежда има проблем със сесията ви;\nдействието беше отказано като предпазна мярка срещу крадене на сесията.\nМоля, изпратете формуляра повторно.", "changecontentmodel": "Промяна на модела на съдържанието на страница", @@ -3361,6 +3360,7 @@ "expand_templates_input": "Входящ уикитекст:", "expand_templates_output": "Резултат", "expand_templates_xml_output": "Изход на XML", + "expand_templates_html_output": "Суров HTML изход", "expand_templates_ok": "ОК", "expand_templates_remove_comments": "Премахване на коментари", "expand_templates_remove_nowiki": "Потискане на елементите в резултата", @@ -3436,6 +3436,7 @@ "mw-widgets-titleinput-description-redirect": "пренасочване към $1", "mw-widgets-categoryselector-add-category-placeholder": "Добавяне на категория...", "mw-widgets-usersmultiselect-placeholder": "Добавяне на още...", + "mw-widgets-titlesmultiselect-placeholder": "Добавяне на още...", "date-range-from": "От дата:", "date-range-to": "До дата:", "sessionprovider-generic": "$1 сесии", diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index f364c670eb..f2c60166a1 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -2281,7 +2281,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলাপ]])-এর সম্পাদিত সংস্করণ হতে [[User:$1|$1]]-এর সম্পাদিত সর্বশেষ সংস্করণে ফেরত যাওয়া হয়েছে", "revertpage-nouser": "একজন গোপন ব্যবহারকারী কর্তৃক সম্পাদিত সম্পাদনাটি বাতিলপূর্বক {{GENDER:$1|[[User:$1|$1]]}}-এর সর্বশেষ সম্পাদনায় ফেরত যাওয়া হয়েছে", "rollback-success": "{{GENDER:$3|$1}}-এর সম্পাদনাগুলি পূর্বাবস্থায় ফিরিয়ে নেওয়া হয়েছে; {{GENDER:$4|$2}}-এর করা শেষ সংস্করণে পাতাটি ফেরত নেওয়া হয়েছে।", - "rollback-success-notify": "$1-এর সম্পাদনাগুলি বাতিল করা হয়েছে; \n$2-এর করা শেষ সংস্করণে ফেরত নেওয়া হয়েছে। [$3 পরিবর্তন দেখুন]", "sessionfailure-title": "সেশন পরিত্যক্ত", "sessionfailure": "আপনার প্রবেশ সেশনে একটি সমস্যা হয়েছে বলে মনে হচ্ছে;\nসেশন হাইজ্যাক প্রতিরোধের উপায় হিসেবে এই কাজটি বাতিল করা হয়েছে।\nদয়া করে ফরমটি পুনরায় জমা দিন।", "changecontentmodel": "একটি পাতার বিষয়বস্তুর রূপ পরিবর্তন", diff --git a/languages/i18n/br.json b/languages/i18n/br.json index 578152c522..5aaea0dd39 100644 --- a/languages/i18n/br.json +++ b/languages/i18n/br.json @@ -2160,7 +2160,6 @@ "revertpage": "Kemmoù distaolet gant [[Special:Contributions/$2|$2]] ([[User talk:$2|Kaozeal]]); adlakaet d'ar stumm diwezhañ a-gent gant [[User:$1|$1]]", "revertpage-nouser": "Disteuler kemmoù un implijer kuzhet ha distreiñ d'ar stumm diwezhañ gant an {{GENDER:$1|[[implijer :$1|$1]]}}", "rollback-success": "Nullet ar c'hemmoù gant {{GENDER:$3|$1}};\nadlakaet diouzh ar stumm diwezhañ gant {{GENDER:$4|$2}}.", - "rollback-success-notify": "Nullet ar c'hemmoù gant $1;\nadlakaet diouzh ar stumm diwezhañ gant $2. [$3 Diskouez ar c'hemmoù]", "sessionfailure-title": "Fazi dalc'h", "sessionfailure": "Evit doare ez eus ur gudenn gant ho talc'h;\nNullet eo bet an ober-mañ a-benn en em wareziñ diouzh an tagadennoù preizhañ.\nKlikit war \"kent\" hag adkargit ar bajenn oc'h deuet drezi; goude klaskit en-dro.", "changecontentmodel": "Cheñch patrom danvez ur bajenn", diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json index f3591a5a26..28e3a77f0e 100644 --- a/languages/i18n/bs.json +++ b/languages/i18n/bs.json @@ -2179,7 +2179,6 @@ "revertpage": "Vraćene izmjene {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]", "revertpage-nouser": "Vraćene izmjene skrivenog korisnika na posljednju reviziju, koju je {{GENDER:$1|napravio|napravila}} [[User:$1|$1]]", "rollback-success": "Vraćene izmjene {{GENDER:$3|korisnika|korisnice}} $1 na posljednju verziju {{GENDER:$4|korisnika|korisnice}} $2.", - "rollback-success-notify": "Vraćenje izmjene korisnika $1;\nvraćeno na posljednju izmjenu korisnika $2. [$3 Prikaži izmjene]", "sessionfailure-title": "Greška u sesiji", "sessionfailure": "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.", "changecontentmodel": "Promijeni model sadržaja stranice", diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json index 86bce967ab..4e760c88e7 100644 --- a/languages/i18n/ca.json +++ b/languages/i18n/ca.json @@ -324,7 +324,7 @@ "confirmable-no": "No", "thisisdeleted": "Voleu mostrar o restaurar $1?", "viewdeleted": "Voleu mostrar $1?", - "restorelink": "{{PLURAL:$1|una versió esborrada|$1 versions esborrades}}", + "restorelink": "{{PLURAL:$1|una versió suprimida|$1 versions suprimides}}", "feedlinks": "Sindicació:", "feed-invalid": "La subscripció no és vàlida pel tipus de sindicament.", "feed-unavailable": "Els canals de sindicació no estan disponibles", @@ -853,7 +853,7 @@ "page_last": "última", "histlegend": "Simbologia: (act) = diferència amb la versió actual,\n(prev) = diferència amb la versió anterior, m = modificació menor", "history-fieldset-title": "Cerca revisions", - "history-show-deleted": "Només revisions esborrades", + "history-show-deleted": "Només revisions suprimides", "histfirst": "les més antigues", "histlast": "les més noves", "historysize": "({{PLURAL:$1|1 octet|$1 octets}})", @@ -1233,8 +1233,8 @@ "right-deleterevision": "Esborrar i restaurar versions específiques de pàgines", "right-deletedhistory": "Veure els historials esborrats sense consultar-ne el text", "right-deletedtext": "Veure el text esborrat i els canvis entre revisions esborrades", - "right-browsearchive": "Cercar pàgines esborrades", - "right-undelete": "Restaurar pàgines esborrades", + "right-browsearchive": "Cercar pàgines suprimides", + "right-undelete": "Restaurar pàgines suprimides", "right-suppressrevision": "Mostra, amaga i revela revisions específiques de pàgines d'un usuari", "right-viewsuppressed": "Mostra les revisions amagades de qualsevol usuari", "right-suppressionlog": "Veure registres privats", @@ -1340,7 +1340,7 @@ "action-deletelogentry": "suprimeix les entrades de registre", "action-deletedhistory": "mostra l'historial esborrat d'una pàgina", "action-deletedtext": "mostra el text de la revisió eliminada", - "action-browsearchive": "cercar pàgines esborrades", + "action-browsearchive": "cercar pàgines suprimides", "action-undelete": "restaura les pàgines", "action-suppressrevision": "revisa i restaura les revisions ocultes", "action-suppressionlog": "visualitzar aquest registre privat", @@ -2101,8 +2101,8 @@ "categories-submit": "Mostra", "categoriespagetext": "{{PLURAL:$1|La següent categoria conté|Les següents categories contenen}} pàgines, o fitxers multimèdia.\n[[Special:UnusedCategories|Les categories no usades]] no s'hi mostren.\nVegeu també [[Special:WantedCategories|les categories sol·licitades]].", "categoriesfrom": "Mostra les categories que comencen a:", - "deletedcontributions": "Contribucions esborrades", - "deletedcontributions-title": "Contribucions esborrades", + "deletedcontributions": "Contribucions suprimides", + "deletedcontributions-title": "Contribucions suprimides", "sp-deletedcontributions-contribs": "contribucions", "linksearch": "Cerca d'enllaços externs", "linksearch-pat": "Patró de cerca:", @@ -2279,6 +2279,7 @@ "deleteprotected": "No podeu eliminar la pàgina perquè ha estat protegida.", "deleting-backlinks-warning": "Atenció:\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Altres pàgines]] enllacen aquí o inclouen la pàgina que esteu a punt de suprimir.", "rollback": "Reverteix edicions", + "rollback-confirmation-no": "Cancel·la", "rollbacklink": "Reverteix", "rollbacklinkcount": "reverteix $1 {{PLURAL:$1|edició|edicions}}", "rollbacklinkcount-morethan": "reverteix més de $1 {{PLURAL:$1|edició|edicions}}", @@ -2291,7 +2292,6 @@ "revertpage": "Revertides les edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussió]]) a l'última versió de [[User:$1|$1]]", "revertpage-nouser": "Edicions revertides per un usuari ocult a l'última revisió de {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Revertides les edicions de {{GENDER:$3|$1}}; recuperant la darrera versió de {{GENDER:$4|$2}}.", - "rollback-success-notify": "Modificacions revertides per $1;\ns'ha revertit a la darrera versió de $2. [$3 Mostra els canvis]", "sessionfailure-title": "Error de sessió", "sessionfailure": "S'ha produït un error amb la vostra sessió. S'ha anul·lat aquesta acció en prevenció de pirateig de sessió. Premeu «Torna», recarregueu la pàgina des d'on veniu i torneu-ho a intentar.", "changecontentmodel": "Canvia el model de contingut d'una pàgina", @@ -2372,7 +2372,7 @@ "restriction-level-autoconfirmed": "semiprotegida", "restriction-level-all": "qualsevol nivell", "undelete": "Restaura una pàgina esborrada", - "undeletepage": "Mostra i restaura pàgines esborrades", + "undeletepage": "Mostra i restaura pàgines suprimides", "undeletepagetitle": "'''A continuació teniu revisions eliminades de [[:$1]]'''.", "viewdeletedpage": "Visualitza les pàgines eliminades", "undeletepagetext": "{{PLURAL:$1|S'ha eliminat la pàgina següent, però encara és a l'arxiu i pot ser restaurada|S'han eliminat les $1 pàgines següents, però encara són a l'arxiu i poden ser restaurades}}.\nL'arxiu pot ser netejat periòdicament.", @@ -2394,8 +2394,8 @@ "cannotundelete": "Hi ha hagut un error en algunes o totes les restauracions:\n$1", "undeletedpage": "'''S'ha restaurat «$1»'''\n\nConsulteu el [[Special:Log/delete|registre d'esborraments]] per a veure els esborraments i els restauraments més recents.", "undelete-header": "Vegeu [[Special:Log/delete|el registre d'eliminació]] per a veure les pàgines eliminades recentment.", - "undelete-search-title": "Cerca de pàgines esborrades", - "undelete-search-box": "Cerca pàgines esborrades", + "undelete-search-title": "Cerca de pàgines suprimides", + "undelete-search-box": "Cerca pàgines suprimides", "undelete-search-prefix": "Mostra pàgines que comencin:", "undelete-search-full": "Mostra títols de pàgines que continguin:", "undelete-search-submit": "Cerca", @@ -2431,7 +2431,7 @@ "sp-contributions-newbies-title": "Contribucions dels comptes d'usuari més nous", "sp-contributions-blocklog": "Registre de blocatges", "sp-contributions-suppresslog": "contribucions suprimides de {{GENDER:$1|l'usuari|la usuària}}", - "sp-contributions-deleted": "Contribucions de {{GENDER:$1|l'usuari|la usuària}} esborrades", + "sp-contributions-deleted": "contribucions de {{GENDER:$1|l’usuari|la usuària}} suprimides", "sp-contributions-uploads": "càrregues", "sp-contributions-logs": "registres", "sp-contributions-talk": "discussió", diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json index 2834381aee..c747efb8cf 100644 --- a/languages/i18n/cs.json +++ b/languages/i18n/cs.json @@ -2295,7 +2295,6 @@ "revertpage": "Editace uživatele „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|diskuse]]) vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“", "revertpage-nouser": "Editace skrytého uživatele vráceny do předchozího stavu, jehož {{GENDER:$1|autorem|autorkou}} je „[[User:$1|$1]]“", "rollback-success": "Editace {{GENDER:$3|uživatele|uživatelky}} $1 byly vráceny na poslední verzi od {{GENDER:$4|uživatele|uživatelky}} $2.", - "rollback-success-notify": "Editace uživatele $1 byly vráceny;\nobnovena poslední verze od uživatele $2. [$3 Zobrazit změny]", "sessionfailure-title": "Chyba relace", "sessionfailure": "Nastal problém s vaším přihlášením;\nvámi požadovaná činnost byla zrušena jako prevence před neoprávněným přístupem.\nStiskněte tlačítko „zpět“, obnovte stránku, ze které jste přišli, a zkuste činnost znovu.", "changecontentmodel": "Změnit model obsahu stránky", diff --git a/languages/i18n/csb.json b/languages/i18n/csb.json index f4a37aefc5..d8b61ac60a 100644 --- a/languages/i18n/csb.json +++ b/languages/i18n/csb.json @@ -940,7 +940,6 @@ "alreadyrolled": "Ni mòże copnąc slédny edicëji starnë [[:$1]], chtërny ùsôdzcą je [[User:$2|$2]] ([[User talk:$2|Diskùsëjô]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nchtos jiny ju zeditowôł starnã abò copnął zmianë.\n\nSlédnym ùsódzcą starnë bëł [[User:$3|$3]] ([[User talk:$3|Diskùsëjô]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).", "revertpage": "Edicje brëkòwnika [[Special:Contributions/$2|$2]] ([[User talk:$2|diskùsjô]]) òstałë òdrzucóné. Aùtorã przëwrócóny wersji je [[User:$1|$1]].", "rollback-success": "Copniãto edicje {{GENDER:$3|brëkòwnika|brëkòwniczczi}} $1;\ndoprowadzóno nazôd slédną wersëjã ùsôdzcë {{GENDER:$4|$2}}.", - "rollback-success-notify": "Edicje brëkòwnika $1 òstałë òdrzucóné; \nòsta przëwrócónô òstatnô wersjô, aùtorã chtërny je $2. [$3 Pòkażë zjinaczi]", "protectlogpage": "Zazychrowóné", "protectedarticle": "zazychrowónô [[$1]]", "modifiedarticleprotection": "zmienionô léga zazychrowaniô [[$1]]", diff --git a/languages/i18n/cy.json b/languages/i18n/cy.json index 4b7e31cedc..4aa77b81bb 100644 --- a/languages/i18n/cy.json +++ b/languages/i18n/cy.json @@ -2028,7 +2028,6 @@ "revertpage": "Wedi gwrthdroi golygiadau gan [[Special:Contributions/$2|$2]] ([[User talk:$2|Sgwrs]]); wedi adfer y golygiad diweddaraf gan [[User:$1|$1]]", "revertpage-nouser": "Wedi gwrthdroi golygiadau gan ddefnyddiwr cudd; wedi adfer y golygiad diweddaraf gan {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Gwrthdrowyd y golygiadau gan {{GENDER:$3|$1}};\nailosodwyd y golygiad olaf gan {{GENDER:$4|$2}}.", - "rollback-success-notify": "Gwrthdrowyd y golygiadau gan $1;\nailosodwyd y golygiad olaf gan $2. [$3 Dangoser y gwahaniaeth]", "sessionfailure-title": "Sesiwn wedi methu", "sessionfailure": "Mae'n debyg fod yna broblem gyda'ch sesiwn mewngofnodi; diddymwyd y weithred er mwyn diogelu'r sustem rhag ddefnyddwyr maleisus. Gwasgwch botwm 'nôl' eich porwr ac ail-lwythwch y dudalen honno, yna ceisiwch eto.", "changecontentmodel-title-label": "Teitl y ddalen", diff --git a/languages/i18n/de.json b/languages/i18n/de.json index f23fc0e0d6..f7c3806a60 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -2342,6 +2342,9 @@ "deleting-backlinks-warning": "Warnung: Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf diese zu löschende Seite oder sie ist noch an anderer Stelle eingebunden.", "deleting-subpages-warning": "Warnung: Die Seite, die du löschen möchtest, hat [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|eine Unterseite|$1 Unterseiten|51=über 50 Unterseiten}}]].", "rollback": "Zurücksetzen der Änderungen", + "rollback-confirmation-confirm": "{{PLURAL:$1|0=Diese Bearbeitungen|Eine Bearbeitung|$1 Bearbeitungen}} zurücksetzen?", + "rollback-confirmation-yes": "Zurücksetzen", + "rollback-confirmation-no": "Abbrechen", "rollbacklink": "Zurücksetzen", "rollbacklinkcount": "{{PLURAL:$1|Eine Version|$1 Versionen}} zurücksetzen", "rollbacklinkcount-morethan": "Mehr als {{PLURAL:$1|eine Version|$1 Versionen}} zurücksetzen", @@ -2354,7 +2357,6 @@ "revertpage": "Änderungen von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) wurden auf die letzte Version von [[User:$1|$1]] zurückgesetzt", "revertpage-nouser": "Änderungen von einem versteckten Benutzer rückgängig gemacht und letzte Version von {{GENDER:$1|[[User:$1|$1]]}} wiederhergestellt", "rollback-success": "Die Änderungen von {{GENDER:$3|$1}} wurden rückgängig gemacht und die letzte Version von {{GENDER:$4|$2}} wurde wiederhergestellt.", - "rollback-success-notify": "Bearbeitungen von $1 rückgängig gemacht;\nzurückgeändert auf die letzte Version von $2. [$3 Änderungen zeigen]", "sessionfailure-title": "Sitzungsfehler", "sessionfailure": "Es gab ein Problem bei der Übertragung deiner Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung deiner Änderungen zu einem anderen Benutzer zu verhindern.\nBitte sende das Formular erneut ab.", "changecontentmodel": "Inhaltsmodell einer Seite ändern", @@ -3130,6 +3132,7 @@ "confirm-unwatch-top": "Diese Seite von der persönlichen Beobachtungsliste entfernen?", "confirm-rollback-button": "Okay", "confirm-rollback-top": "Bearbeitungen an dieser Seite zurücksetzen?", + "confirm-rollback-bottom": "Diese Aktion wird sofort die ausgewählten Änderungen an dieser Seite zurücksetzen.", "confirm-mcrrestore-title": "Eine Version wiederherstellen", "confirm-mcrundo-title": "Eine Änderung rückgängig machen", "mcrundofailed": "Rückgängigmachung fehlgeschlagen", diff --git a/languages/i18n/diq.json b/languages/i18n/diq.json index 8df2180b92..c17a6bbdee 100644 --- a/languages/i18n/diq.json +++ b/languages/i18n/diq.json @@ -1214,7 +1214,7 @@ "grant-basic": "Heqê basiti", "grant-viewdeleted": "Besteryaya peran u dosyaya bıasne", "grant-viewmywatchlist": "Lista serykerdışê xo bıvêne", - "newuserlogpage": "Roceka karberanê newa", + "newuserlogpage": "Qeydê karberanê neweyan", "newuserlogpagetext": "No yew qeydê afernayışanê karberio.", "rightslog": "Qeydê heqanê karberi", "rightslogtext": "Ena listeyê loganê ke heqqa karbaranî mucneno.", diff --git a/languages/i18n/el.json b/languages/i18n/el.json index 160b2c2941..36d1847530 100644 --- a/languages/i18n/el.json +++ b/languages/i18n/el.json @@ -2232,7 +2232,6 @@ "revertpage": "Ανάκληση των αλλαγών [[Special:Contributions/$2|$2]] ([[User talk:$2|συζήτηση]]) επιστροφή στην προηγούμενη αναθεώρηση [[User:$1|$1]]", "revertpage-nouser": "Αναστράφηκαν οι επεξεργασίες από τον (όνομα χρήστη αφαιρέθηκε) στη τελευταία έκδοση από τον/την {{GENDER:$1|[[User:$1|$1]]}}φ", "rollback-success": "Αναστροφή επεξεργασιών από {{GENDER:$3|τον|την}} $1, επιστροφή στην προηγούμενη έκδοση από {{GENDER:$4|τον|την}} $2.", - "rollback-success-notify": "Αναίρεση επεξεργασιών από $1; επιστροφή στην τελευταία αναθεώρηση από $2.[$3 Εμφάνιση αλλαγών]", "sessionfailure-title": "Η συνεδρία απέτυχε", "sessionfailure": "Υπάρχει πρόβλημα με τη σύνδεσή σας -η ενέργεια αυτή ακυρώθηκε προληπτικά για την αντιμετώπιση τυχόν πειρατείας συνόδου (session hijacking). Παρακαλoύμε πατήστε \"Επιστροφή\", ξαναφορτώστε τη σελίδα από την οποία φθάσατε εδώ και προσπαθήστε ξανά.", "changecontentmodel": "Αλλαγή μοντέλου περιεχομένου της σελίδας", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 28e0b052a1..05bbf3cbfa 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -47,6 +47,7 @@ "tog-useeditwarning": "Warn me when I leave an edit page with unsaved changes", "tog-prefershttps": "Always use a secure connection while logged in", "tog-showrollbackconfirmation": "Show a confirmation prompt when clicking on a rollback link", + "tog-showrollbackconfirmation-prerelease-warning": "Please note: This feature is not available yet. If you set this preference now, your choice will be remembered [https://meta.wikimedia.org/wiki/WMDE_Technical_Wishes/Rollback#Status when the feature is released].", "underline-always": "Always", "underline-never": "Never", "underline-default": "Skin or browser default", @@ -2389,6 +2390,9 @@ "deleting-backlinks-warning": "Warning: [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.", "deleting-subpages-warning": "Warning: The page you are about to delete has [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|a subpage|$1 subpages|51=over 50 subpages}}]].", "rollback": "Roll back edits", + "rollback-confirmation-confirm": "Please confirm:", + "rollback-confirmation-yes": "Rollback", + "rollback-confirmation-no": "Cancel", "rollbacklink": "rollback", "rollbacklinkcount": "rollback $1 {{PLURAL:$1|edit|edits}}", "rollbacklinkcount-morethan": "rollback more than $1 {{PLURAL:$1|edit|edits}}", @@ -2401,7 +2405,6 @@ "revertpage": "Reverted edits by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) to last revision by [[User:$1|$1]]", "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Reverted edits by {{GENDER:$3|$1}};\nchanged back to last revision by {{GENDER:$4|$2}}.", - "rollback-success-notify": "Reverted edits by $1;\nchanged back to last revision by $2. [$3 Show changes]", "sessionfailure-title": "Session failure", "sessionfailure": "There seems to be a problem with your login session;\nthis action has been canceled as a precaution against session hijacking.\nPlease resubmit the form.", "changecontentmodel" : "Change content model of a page", @@ -3326,6 +3329,7 @@ "confirm-unwatch-top": "Remove this page from your watchlist?", "confirm-rollback-button": "OK", "confirm-rollback-top": "Revert edits to this page?", + "confirm-rollback-bottom": "This action will instantly rollback the selected changes to this page.", "confirm-mcrrestore-title": "Restore a revision", "confirm-mcrundo-title": "Undo a change", "mcrundofailed": "Undo failed", diff --git a/languages/i18n/eo.json b/languages/i18n/eo.json index 6c060c549b..21a3ef0de7 100644 --- a/languages/i18n/eo.json +++ b/languages/i18n/eo.json @@ -2224,7 +2224,6 @@ "revertpage": "Malfaris redaktojn de [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuto]]) al la lasta versio de [[User:$1|$1]]", "revertpage-nouser": "Restarigis redaktojn de (salutnomo forigita) al lasta revizio de {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Restaris redaktojn de {{GENDER:$3|$1}}; ŝanĝis al lasta versio de {{GENDER:$4|$2}}.", - "rollback-success-notify": "Malfaritis redaktojn far $1;\nŝanĝis al la lasta reviziaĵo far $2. [$3 Prezenti ŝanĝojn]", "sessionfailure-title": "Seanco malsukcesis", "sessionfailure": "Ŝajnas, ke estas problemo kun via ensalutado;\nĈi ago estis nuligita por malhelpi fiensalutadon.\nBonvolu resendi la formularoj", "changecontentmodel": "Ŝanĝi la enhavomodelon de paĝo", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 4fbc4ecd88..100642db65 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -2453,7 +2453,6 @@ "revertpage": "Revertidos los cambios de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]]) a la última edición de [[User:$1|$1]]", "revertpage-nouser": "Revertidas las ediciones hechas por un usuario oculto a la última revisión hecha por {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Revertidas las ediciones de {{GENDER:$3|$1}};\nrecuperada la última versión de {{GENDER:$4|$2}}.", - "rollback-success-notify": "Revertidas las ediciones de $1 hasta la última revisión de $2. [$3 Ver cambios]", "sessionfailure-title": "Error de sesión", "sessionfailure": "Parece que hay un problema con tu sesión;\nse ha cancelado esta acción como medida de precaución contra el robo de sesiones.\nEnvía el formulario otra vez.", "changecontentmodel": "Cambiar el modelo de contenido de una página", diff --git a/languages/i18n/et.json b/languages/i18n/et.json index 97d256ccd7..6f32bc033e 100644 --- a/languages/i18n/et.json +++ b/languages/i18n/et.json @@ -2283,7 +2283,6 @@ "revertpage": "Tühistati kasutaja [[Special:Contributions/$2|$2]] ([[User talk:$2|arutelu]]) tehtud muudatused ja pöörduti tagasi viimasele muudatusele, mille tegi [[User:$1|$1]].", "revertpage-nouser": "Tühistati peidetud kasutaja muudatused ja pöörduti tagasi viimasele muudatusele, mille tegi [[User:$1|$1]].", "rollback-success": "Tühistati muudatused, mille tegi {{GENDER:$3|$1}};\npöörduti tagasi viimasele muudatusele, mille tegi {{GENDER:$4|$2}}.", - "rollback-success-notify": "Tühistatud kasutaja $1 tehtud muudatused;\npöördutud tagasi kasutaja $2 viimase redaktsiooni juurde. [$3 Näita muudatusi]", "sessionfailure-title": "Seansiviga", "sessionfailure": "Näib, et sinu sisselogimisseanss on probleemne.\nSeansiärandamise vastase ettevaatusabinõuna on see toiming tühistatud.\nPalun saada vorm uuesti.", "changecontentmodel": "Lehekülje sisumudeli muutmine", diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json index e8e435f860..437ed46993 100644 --- a/languages/i18n/eu.json +++ b/languages/i18n/eu.json @@ -2275,7 +2275,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) wikilariaren aldaketak deseginda, edukia [[User:$1|$1]] wikilariaren azken bertsiora itzuli da.", "revertpage-nouser": "{{GENDER:$1|[[User:$1|$1]]}}-n azken berrikuspena ezkutatutako erabiltzaile batek egindako leheneraketa aldaketak.", "rollback-success": "{{GENDER:$3|$1}}; wikilariaren aldaketak deseginda,\nedukia {{GENDER:$4|$2}} wikilariaren azken bertsiora itzuli da.", - "rollback-success-notify": "$1k leheneratutako aldaketal;\nazkenengo berrikusketara aldatu da berriz $2ren eskutik. [$3 Erakutsi aldaketak]", "sessionfailure-title": "Saio-akatsa", "sessionfailure": "Badirudi saioarekin arazoren bat dagoela; ekintza hau ezeztatua izan da, saio bahiketa saihesteko neurri bezala. Mesedez, nabigatzaileko \"atzera\" botoian klik egin, hona ekarri zaituen orrialde hori berriz kargatu, eta saiatu berriz.", "changecontentmodel": "Aldatu orri bateko eduki eredua", diff --git a/languages/i18n/exif/fa.json b/languages/i18n/exif/fa.json index 13454d1d89..9c4c0475ac 100644 --- a/languages/i18n/exif/fa.json +++ b/languages/i18n/exif/fa.json @@ -4,7 +4,8 @@ "Ebraminio", "Huji", "Meisam", - "ZxxZxxZ" + "ZxxZxxZ", + "Reza1615" ] }, "exif-imagewidth": "عرض", @@ -52,6 +53,7 @@ "exif-exposuretime": "زمان نوردهی", "exif-exposuretime-format": "$1 ثانیه ($2)", "exif-fnumber": "ضریب اف", + "exif-fnumber-format": "f/$1", "exif-exposureprogram": "برنامهٔ نوردهی", "exif-spectralsensitivity": "حساسیت طیفی", "exif-isospeedratings": "درجه‌بندی سرعت ایزو", @@ -190,7 +192,14 @@ "exif-compression-4": "رمزگذاری نمابر سی‌سی‌آی‌تی‌تی گروه ۴", "exif-copyrighted-true": "دارای حق تکثیر", "exif-copyrighted-false": "وضعیت حق‌تکثیر تعیین نشده است", + "exif-photometricinterpretation-0": "سیاه و سفید (سفید ۰ است)", "exif-photometricinterpretation-1": "سیاه و سفید (سیاه ۰ است)", + "exif-photometricinterpretation-3": "پالت", + "exif-photometricinterpretation-4": "شفافیت پوشش", + "exif-photometricinterpretation-5": "جداشده (احتمالاُ CMYK)", + "exif-photometricinterpretation-8": "CIE L*a*b*", + "exif-photometricinterpretation-9": "CIE L*a*b* (رمزنگاری ICC)", + "exif-photometricinterpretation-10": "CIE L*a*b* (رمزنگاری ITU)", "exif-unknowndate": "تاریخ نامعلوم", "exif-orientation-1": "عادی", "exif-orientation-2": "افقی پشت و روشده", diff --git a/languages/i18n/exif/lrc.json b/languages/i18n/exif/lrc.json index 4c19e312cf..43c77e8913 100644 --- a/languages/i18n/exif/lrc.json +++ b/languages/i18n/exif/lrc.json @@ -149,7 +149,7 @@ "exif-writer": "نیسنه", "exif-languagecode": "زون", "exif-iimversion": "نسقه آی آی ام", - "exif-iimcategory": "دسه", + "exif-iimcategory": "دٱسٱ", "exif-iimsupplementalcategory": "دسه یا اضافی", "exif-datetimeexpires": "وا نها دش استفاده نبوئه", "exif-datetimereleased": "ول بیه د", diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json index c386ee2fa8..47a0c87029 100644 --- a/languages/i18n/fa.json +++ b/languages/i18n/fa.json @@ -717,7 +717,7 @@ "accmailtext": "یک گذرواژهٔ تصادفی برای [[User talk:$1|$1]] به $2 فرستاده شد. می‌توان آن را از صفحهٔ ''[[Special:ChangePassword|تغییر گذرواژه]]'' که هنگام ثبت ورود نمایش می‌یابد تغییر داد.", "newarticle": "(تازه)", "newarticletext": "شما پیوندی را دنبال کرده‌اید و به صفحه‌ای رسیده‌اید که هنوز وجود ندارد.\nبرای ایجاد صفحه، در مستطیل زیر شروع به نوشتن کنید (برای اطلاعات بیشتر به [$1 صفحهٔ راهنما] مراجعه کنید).\nاگر به اشتباه اینجا آمده‌اید، دکمهٔ «بازگشت» مرورگرتان را بزنید.", - "anontalkpagetext": "----این صفحهٔ بحث برای کاربر گمنامی است که هنوز حسابی درست نکرده است یا از آن استفاده نمی‌کند.\nبنا بر این برای شناسایی‌اش مجبوریم از نشانی آی‌پی عددی استفاده کنیم.\nچنین نشانی‌های آی‌پی ممکن است توسط چندین کاربر به شکل مشترک استفاده شود.\nاگر شما کاربر گمنامی هستید و تصور می‌کنید اظهار نظرات نامربوط به شما صورت گرفته است، لطفاً برای پیشگیری از اشتباه گرفته شدن با کاربران گمنام دیگر در آینده [[Special:CreateAccount|حسابی ایجاد کنید]] یا [[Special:UserLogin|به سامانه وارد شوید]].", + "anontalkpagetext": "----این صفحهٔ بحث برای کاربر گمنامی است که هنوز حسابی درست نکرده است یا از آن استفاده نمی‌کند.\nبنا بر این برای شناسایی‌اش مجبوریم از نشانی آی‌پی عددی استفاده کنیم. \nچنین نشانی‌های آی‌پی ممکن است توسط چندین کاربر به شکل مشترک استفاده شود.\nاگر شما کاربر گمنامی هستید و تصور می‌کنید اظهار نظرات نامربوط به شما صورت گرفته است، لطفاً برای پیشگیری از اشتباه گرفته شدن با کاربران گمنام دیگر در آینده [[Special:CreateAccount|حسابی ایجاد کنید]] یا [[Special:UserLogin|به سامانه وارد شوید]].", "noarticletext": "این صفحه هم‌اکنون دارای هیچ متنی نیست.\nشما می‌توانید در صفحه‌های دیگر [[Special:Search/{{PAGENAME}}|عنوان این صفحه را جستجو کنید]]،\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را جستجو کنید]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} این صفحه را ایجاد کنید].", "noarticletext-nopermission": "این صفحه هم‌اکنون متنی ندارد.\nشما می‌توانید در دیگر صفحات [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،\nیا [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را بگردید] ولی شما اجازه ایجاد این صفحه را ندارید.", "missing-revision": "ویرایش #$1 از صفحهٔ «{{FULLPAGENAME}}» موجود نیست.\n\nاین اتفاق معمولاً در اثر دنبال کردن پیوندی به تاریخچهٔ یک صفحهٔ حذف‌شده پیش می‌آید.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.", @@ -2319,7 +2319,6 @@ "revertpage": "ویرایش [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]]) به آخرین تغییری که [[User:$1|$1]] انجام داده بود واگردانده شد", "revertpage-nouser": "ویرایش‌های انجام‌شده توسط (نام کاربری حذف شده) به آخرین ویرایش [[User:$1|$1]] واگردانی شد.", "rollback-success": "ویرایش‌های {{GENDER:$3|$1}} واگردانی شد؛\nصفحه به آخرین ویرایش {{GENDER:$4|$2}} برگردانده شد.", - "rollback-success-notify": "ویرایش‌های توسط $1 واگردانی شد؛\nبه آخرین نسخه توسط $2 بازگردانی شد. [$3 نمایش تغییرات]", "sessionfailure-title": "خطای نشست کاربری", "sessionfailure": "به نظر می‌رسد مشکلی در مورد نشست کاربری شما وجود دارد؛\nعمل درخواست شده در اقدامی پیشگیرانه در برابر ربوده‌شدن اطلاعات نشست کاربری، لغو شد.\nلطفاً فرم را از نو بارگذاری کنید.", "changecontentmodel": "ویرایش نمونه محتوای یک صفحه", @@ -3734,6 +3733,7 @@ "log-action-filter-suppress-reblock": "مخفی‌سازی کاربر با بستن مجدد", "log-action-filter-upload-upload": "بارگذاری جدید", "log-action-filter-upload-overwrite": "بارگذاری دوباره", + "log-action-filter-upload-revert": "واگردانی", "authmanager-authn-not-in-progress": "ارزیابی ورود در جريان نيست یا اطلاعات جلسه کاری از بين رفته است. لطفاً دوباره از ابتدا شروع کنيد.", "authmanager-authn-no-primary": "اعتبارسنجی اطلاعات ارائه شده جهت ورود ميسر نيست", "authmanager-authn-no-local-user": "اطلاعات ورود ارائه شده با هيچ کاربری در اين ويکی مرتبط نيست", diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index 12caff87ad..dd476da25f 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -2312,7 +2312,6 @@ "revertpage": "Käyttäjän [[Special:Contributions/$2|$2]] ([[User talk:$2|keskustelu]]) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.", "revertpage-nouser": "Käyttäjän (käyttäjänimi poistettu) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän {{GENDER:$1|[[User:$1|$1]]}} tekemään versioon", "rollback-success": "Käyttäjän {{GENDER:$3|$1}} tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän {{GENDER:$4|$2}} versioon.", - "rollback-success-notify": "Kumottiin käyttäjän $1 muokkaukset; palautettiin viimeiseen käyttäjän $2 versioon. [$3 Näytä muutokset]", "sessionfailure-title": "Istuntovirhe", "sessionfailure": "Näyttää siltä, että tämänhetkisessä istunnossasi on jokin ongelma; \ntämä toiminto on peruutettu varotoimena istunnon kaappaamisen estämiseksi.\nLähetä lomake uudelleen.", "changecontentmodel": "Muuta sivun sisältömallia", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index f96984579f..e232795344 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -2444,7 +2444,6 @@ "revertpage": "Révocation des modifications de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]) vers la dernière version de [[User:$1|$1]]", "revertpage-nouser": "Révocation des modifications par un utilisateur masqué à la dernière version par {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Révocation des modifications effectuées par {{GENDER:$3|$1}} ;\nrétablissement de la dernière version par {{GENDER:$4|$2}}.", - "rollback-success-notify": "Modifications annulées par $1 ;\nretour à la dernière révision par $2. [$3 Voir les changements]", "sessionfailure-title": "Erreur de session", "sessionfailure": "Votre session de connexion semble avoir des problèmes ;\ncette action a été annulée en prévention d'un piratage de session.\nVeuillez soumettre le formulaire de nouveau.", "changecontentmodel": "Modifier le modèle de contenu d’une page", diff --git a/languages/i18n/fy.json b/languages/i18n/fy.json index 2ea80d4274..4211a20bb5 100644 --- a/languages/i18n/fy.json +++ b/languages/i18n/fy.json @@ -726,7 +726,7 @@ "prefs-email": "E-mail", "prefs-rendering": "Uterlik", "saveprefs": "Bewarje", - "restoreprefs": "Tebek nei de standertynstellings", + "restoreprefs": "Alle standertynstellings weromsette (yn alle parten)", "prefs-editing": "Siden bewurkje", "searchresultshead": "Sykje", "stub-threshold": "Drompel foar markearring stobbe (bytes):", @@ -757,6 +757,7 @@ "default": "standert", "prefs-files": "Bestannen", "prefs-custom-js": "Persoanlik JS", + "prefs-reset-intro": "Jo kinne dizze side brûke, en set jo ynstellings werom nei de websteestandert.\nDat kin net ûngedien makke wurde.", "prefs-emailconfirm-label": "E-mailbefêstiging:", "youremail": "E-mail:", "username": "{{GENDER:$1|Meidochnamme}}:", @@ -995,7 +996,7 @@ "upload-preferred": "Oanwiisde bestânstypen: $1.", "upload-prohibited": "Ferbeane bestânstypen: $1.", "uploadlogpage": "Oanbiedloch", - "uploadlogpagetext": "List fan de lêst oanbeane bestannen. (Tiid oanjûn as UTC).", + "uploadlogpagetext": "Hjirûnder stiet in list fan 'e meast resint opladen bestannen.\nSjoch de [[Special:NewFiles|galery mei nije bestannen]] foar in fisueler oersjoch.", "filename": "Bestânsnamme", "filedesc": "Omskriuwing", "fileuploadsummary": "Gearfetting:", @@ -1082,7 +1083,7 @@ "filehist-deleteone": "fuortsmite", "filehist-revert": "werom sette", "filehist-current": "lêste", - "filehist-datetime": "Tiid", + "filehist-datetime": "Datum/tiid", "filehist-thumb": "Miniatuer", "filehist-thumbtext": "Miniatuer foar de ferzje sûnt $1", "filehist-nothumb": "Gjin miniatuerôfbylding", @@ -1096,7 +1097,8 @@ "nolinkstoimage": "Der binne gjin siden oan dit ôfbyld keppele.", "morelinkstoimage": "[[Special:WhatLinksHere/$1|Mear ferwizings]] nei dit bestân besjen.", "duplicatesoffile": "{{PLURAL:$1|It|De}} neikommend{{PLURAL:$1| bestân is|e $1 bestannen binne}} identyk oan dit bestân ([[Special:FileDuplicateSearch/$2|mear bysûnderheden]]):", - "sharedupload": "Dit bestân komt fan $1 en kin ek troch oare projekten brûkt wurde.", + "sharedupload": "Dit bestân komt fan $1, en kin ek troch oare projekten brûkt wurde.", + "sharedupload-desc-here": "Dit bestân komt fan $1, en kin ek troch oare projekten brûkt wurde.\nDe beskriuwing op syn [$2 bestânsside] dêre wurdt hjirûnder werjûn.", "filepage-nofile": "Der bestiet gjin bestân mei sa'n namme.", "filepage-nofile-link": "Der bestiet gjin bestân mei sa'n namme [bied $1 oan].", "uploadnewversion-linktext": "Bied in nije ferzje fan dit bestân oan", @@ -1681,6 +1683,7 @@ "show-big-image-size": "$1 × $2 pixels", "newimages": "Nije ôfbylden", "imagelisttext": "Dit is in list fan '''$1''' {{PLURAL:$1|bestân|bestannen}}, op $2.", + "newimages-summary": "Dizze bysûndere side lit de lêst opladen bestannen sjen.", "newimages-legend": "Filter", "noimages": "Neat te sjen.", "ilsubmit": "Sykje", diff --git a/languages/i18n/gd.json b/languages/i18n/gd.json index 495fd47312..24ffad344c 100644 --- a/languages/i18n/gd.json +++ b/languages/i18n/gd.json @@ -1880,7 +1880,6 @@ "revertpage": "Deasachaidhean a chaidh a thilleadh leis [[Special:Contributions/$2|$2]] ([[User talk:$2|an deasbaireachd]]) dhan mhùthadh mu dheireadh le [[User:$1|$1]]", "revertpage-nouser": "Deasachaidhean a chaidh a thilleadh le cleachdaiche falaichte dhan mhùthadh mu dheireadh le [[User:$1|$1]]", "rollback-success": "Na deasachaidhean a chaidh a thilleadh le $1;\nchaidh an tilleadh gun mhùthadh mu dheireadh le $2.", - "rollback-success-notify": "Na deasachaidhean a chaidh a thilleadh le $1;\nchaidh an tilleadh gun mhùthadh mu dheireadh le $2. [$3 Seall na h-atharraichean]", "sessionfailure-title": "Trioblaid leis an t-seisean", "sessionfailure": "Tha duilgheadas ann leis an seisean logaidh a-steach agad a-rèir coltais;\nchaidh sgur dhen ghnìomh seo a chum dìon o session hijacking.\nTill dhan duilleag roimhpe, ath-luchdaich an duilleag ud 's feuch ris a-rithist an uairsin.", "logentry-contentmodel-change-revertlink": "till", diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json index 0cf2e459f2..5421c9a83e 100644 --- a/languages/i18n/gl.json +++ b/languages/i18n/gl.json @@ -2305,7 +2305,6 @@ "revertpage": "Desfixéronse as edicións de [[Special:Contributions/$2|$2]] ([[User talk:$2|conversa]]); cambiado á última versión feita por [[User:$1|$1]]", "revertpage-nouser": "Desfixéronse as edicións dun usuario agochado; cambiado á última versión feita por {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Desfixéronse as edicións de {{GENDER:$3|$1}};\nvolveuse á última edición, feita por {{GENDER:$4|$2}}.", - "rollback-success-notify": "Revertéronse as edicións de $1;\nrestaurouse a última revisión de $2. [$3 Amosar os cambios]", "sessionfailure-title": "Erro de sesión", "sessionfailure": "Parece que hai un problema co rexistro da súa sesión;\nesta acción cancelouse como precaución fronte ao secuestro de sesións.\nPor favor, volva enviar o formulario.", "changecontentmodel": "Cambiar o modelo de contido dunha páxina", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index 8f8c6b994b..6f66416411 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -2296,7 +2296,6 @@ "revertpage": "שוחזר מעריכות של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]]) לעריכה האחרונה של [[User:$1|$1]]", "revertpage-nouser": "שוחזר מעריכות של משתמש מוסתר לעריכה האחרונה של {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "שוחזר מעריכות של {{GENDER:$3|$1}}\nלעריכה האחרונה של {{GENDER:$4|$2}}.", - "rollback-success-notify": "שוחזר מעריכות של $1\nלעריכה האחרונה של $2. [$3 הצגת שינויים]", "sessionfailure-title": "בעיה בחיבור", "sessionfailure": "נראה שיש בעיה בחיבור שלך לאתר;\nפעולה זו בוטלה כאמצעי זהירות נגד התחזות לתקשורת ממחשבך.\nנא לשלוח מחדש את הטופס.", "changecontentmodel": "שינוי מודל התוכן של דף", diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json index efe06b43e5..17137afc72 100644 --- a/languages/i18n/hi.json +++ b/languages/i18n/hi.json @@ -2356,7 +2356,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) के संपादनों को हटाकर [[User:$1|$1]] के अन्तिम अवतरण को पूर्ववत किया", "revertpage-nouser": "(सदस्य नाम हटाया गया है) के संपादनों को हटाकर {{GENDER:$1|[[User:$1|$1]]}} के अन्तिम अवतरण को पूर्ववत किया।", "rollback-success": "{{GENDER:$3|$1}} के संपादन हटाए;\n{{GENDER:$4|$2}} द्वारा संपादित अन्तिम अवतरण को पुनर्स्थापित किया।", - "rollback-success-notify": "$1 के सम्पादन वापिस लौटाए;\n$2 द्वारा संपादित अंतिम संस्करण पुनर्स्थापित किया। [$3 बदलाव दिखाएँ]", "sessionfailure-title": "सत्र विफलता", "sessionfailure": "ऐसा प्रतीत होता है कि आपके लॉगिन सत्र के साथ कोई समस्या है।\nसत्र अपहरण से बचाने के लिए सावधानी के तौर पर आपका यह क्रियाकलाप रद्द कर दिया गया है।\nकृपया प्रपत्र दोबारा जमा करें।", "changecontentmodel": "पन्ने का सामग्री प्रारूप बदलें", diff --git a/languages/i18n/hif-latn.json b/languages/i18n/hif-latn.json index 3590351106..6ccad2a746 100644 --- a/languages/i18n/hif-latn.json +++ b/languages/i18n/hif-latn.json @@ -2137,7 +2137,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ke badlao ke [[User:$1|$1]] ke aakhri badlao ke jaise kar dewa gais hai.", "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Reverted edits by {{GENDER:$3|$1}};\nchanged back to last revision by {{GENDER:$4|$2}}.", - "rollback-success-notify": "$1 ke badlao ke pahile jaise kar dewa gais hai;\nbadlao ke $2 ke aakhri version kar dewa gais hai.[$3 Show changes]", "sessionfailure-title": "Session fail hoe gais hae", "sessionfailure": "Aap ke login session me kuch karrbarr hai.\niske cancel kar dewa gais hai jisse ki koi iisession ke hijack nai kar.\nMeharbani kar ke \"back\" ke press kar ke jon pana se aap aae rahaa ke fir se load karo, tab fir kosis karo.", "changecontentmodel": "Panna ke content model ke badlo", diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index c585e50c3a..238310800e 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -2111,7 +2111,6 @@ "revertpage": "uklonjena promjena {{GENDER:$2|suradnika|suradnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]), vraćeno na posljednju inačicu {{GENDER:$1|suradnika|suradnice}} [[User:$1|$1]]", "revertpage-nouser": "Vraćene izmjene suradnika (suradničko ime uklonjeno) na posljednju inačicu suradnika [[User:$1|$1]]", "rollback-success": "Uklonjeno uređivanje {{GENDER:$3|suradnika|suradnice}} $1; vraćeno na posljednju inačicu {{GENDER:$4|suradnika|suradnice}} $2.", - "rollback-success-notify": "Uklonili ste izmjene suradnika $1;\nvraćeno na posljednju izmjenu suradnika $2. [$3 Prikaži izmjene]", "sessionfailure-title": "Prekid sesije", "sessionfailure": "Izgleda da postoji problem s Vašom prijavom; ta radnja otkazana je kao način sprječavanja zlouporabe. Molimo ponovno pošaljite obrazac.", "changecontentmodel": "Promjena modela sadržaja stranice", diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json index 4915b7b9f6..929235c2cd 100644 --- a/languages/i18n/hu.json +++ b/languages/i18n/hu.json @@ -2298,7 +2298,6 @@ "revertpage": "Visszaállítottam a lap korábbi változatát [[Special:Contributions/$2|$2]] ([[User talk:$2|vita]]) szerkesztéséről [[User:$1|$1]] szerkesztésére", "revertpage-nouser": "Visszaállítottam a lap korábbi változatát (szerkesztőnév eltávolítva) szerkesztéséről [[User:$1|$1]] szerkesztésére", "rollback-success": "{{GENDER:$3|$1}} szerkesztéseit visszaállítottam {{GENDER:$4|$2}} utolsó változatára.", - "rollback-success-notify": "$1 szerkesztései visszaállítva;\nhelyreállítva $2 utolsó változata. [$3 Változtatások megtekintése]", "sessionfailure-title": "Munkamenethiba", "sessionfailure": "Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel;\nez a művelet a munkamenet eltérítése miatti óvatosságból megszakadt.\nKérjük, küldd el újra az űrlapot.", "changecontentmodel": "A lap tartalommodelljének megváltoztatása", diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json index 02a2b82975..f2739bebdc 100644 --- a/languages/i18n/ia.json +++ b/languages/i18n/ia.json @@ -2269,7 +2269,6 @@ "revertpage": "Reverteva modificationes per [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]]) al ultime version per [[User:$1|$1]]", "revertpage-nouser": "Reverteva modificationes per un usator celate al ultime version per {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Revocava modificationes per {{GENDER:$3|$1}};\nretornava al version per {{GENDER:$4|$2}}.", - "rollback-success-notify": "Modificationes de $1 revertite;\nultime version de $2 restaurate. [$3 Monstrar cambiamentos]", "sessionfailure-title": "Error de session", "sessionfailure": "Il pare haber un problema con tu session;\niste action ha essite cancellate como precaution contra le robamento de sessiones.\nPer favor, resubmitte le formulario.", "changecontentmodel": "Cambiar le modello de contento de un pagina", diff --git a/languages/i18n/id.json b/languages/i18n/id.json index 7ad95e2cf6..33651e0f10 100644 --- a/languages/i18n/id.json +++ b/languages/i18n/id.json @@ -2331,7 +2331,6 @@ "revertpage": "←Suntingan [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]]) dibatalkan ke versi terakhir oleh [[User:$1|$1]]", "revertpage-nouser": "Mengembalikan suntingan oleh (nama pengguna dihapus) ke suntingan terakhir oleh [[User:$1|$1]]", "rollback-success": "Pembatalan suntingan oleh {{GENDER:$3|$1}}; dibatalkan ke versi terakhir oleh {{GENDER:$4|$2}}.", - "rollback-success-notify": "Mengembalikan suntingan oleh $1; rubah kembali untuk revisi terakhir oleh $2. [$3 Lihat perubahan]", "sessionfailure-title": "Kegagalan sesi", "sessionfailure": "Sepertinya ada masalah dengan sesi log Anda; log Anda telah dibatalkan sebagai antisipasi untuk mencegah pembajakan. Silakan tekan tombol \"kembali\" dan muat kembali halaman sebelum Anda masuk, lalu coba lagi.", "changecontentmodel": "Ubah model isi sebuah halaman", diff --git a/languages/i18n/ilo.json b/languages/i18n/ilo.json index fa3f46d9a8..e506555bd9 100644 --- a/languages/i18n/ilo.json +++ b/languages/i18n/ilo.json @@ -2179,7 +2179,6 @@ "revertpage": "Insubli ti panagurnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli iti naudi a rebision babaen ni [[User:$1|$1]]", "revertpage-nouser": "Naisubli dagiti inurnos babaen ti nailemmeng nga agar-aramat iti kinaudi a rebision babaen ni {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Naibabawi dagiti panagurnos babaen ni {{GENDER:$3|$1}};\nnaisubli manen ti naudi a rebision babaen ni {{GENDER:$4|$2}}.", - "rollback-success-notify": "Naibabawi dagiti panagurnos babaen ni $1;\nisubli ti naudi a rebision babaen ni $2. [$3 Ipakita dagiti binaliwan]", "sessionfailure-title": "Napaay ti sesion", "sessionfailure": "Adda parikut ti sesion ti panagserrekmo;\ndaytoy nga aramid ket naibabawi a kas pagpawilan ti panaghijack ti sesion.\nPangngaasi nga ited manen ti porma.", "changecontentmodel": "Baliwan ti modelo ti linaon ti panid", diff --git a/languages/i18n/io.json b/languages/i18n/io.json index 70ed457a06..edeeb8a9a3 100644 --- a/languages/i18n/io.json +++ b/languages/i18n/io.json @@ -1686,6 +1686,7 @@ "ipblocklist-submit": "Serchar", "ipblocklist-otherblocks": "Altra {{PLURAL:$1|blokuso|blokusi}}", "infiniteblock": "nefinita", + "expiringblock": "finas ye $2 kloki, en $1", "emailblock": "e-posto blokusita", "blocklist-nousertalk": "ne povas redaktar lua propra diskuto-pagino", "blocklink": "blokusar", diff --git a/languages/i18n/is.json b/languages/i18n/is.json index 39d33358cf..d77ab4c240 100644 --- a/languages/i18n/is.json +++ b/languages/i18n/is.json @@ -2112,7 +2112,6 @@ "revertpage": "Tók aftur breytingar [[Special:Contributions/$2|$2]] ([[User talk:$2|spjall]]), breytt til síðustu útgáfu [[User:$1|$1]]", "revertpage-nouser": "Tók aftur breytingar falins notanda til síðustu útgáfu {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Tók til baka breytingar eftir {{GENDER:$3|$1}};\nsetti yfir á síðustu útgáfu eftir {{GENDER:$4|$2}}.", - "rollback-success-notify": "Tók aftur breytingar $1;\nbreytti í síðustu útgafu $2. [$3 Sýna breytingar]", "sessionfailure-title": "Mistök í setu", "sessionfailure": "Líklega er vandamál með innskráningarsetuna þína;\nhætt hefur verið við þessa aðgerð sem vörn gegn mögulegu samskiptaráni setunar.\nReyndu að senda upplýsingarnar aftur inn.", "changecontentmodel": "Breyta efnislíkani síðu", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index 6eac855a1c..6dedc1e289 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -2337,7 +2337,6 @@ "revertpage": "Annullate le modifiche di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), riportata alla versione precedente di [[User:$1|$1]]", "revertpage-nouser": "Annullate le modifiche di un utente nascosto, riportata alla versione precedente di {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Annullate le modifiche di {{GENDER:$3|$1}}; pagina riportata all'ultima versione di {{GENDER:$4|$2}}.", - "rollback-success-notify": "Annullate le modifiche di $1;\npagina riportata all'ultima revisione di $2. [$3 Mostra le modifiche]", "sessionfailure-title": "Sessione fallita", "sessionfailure": "Si è verificato un problema nella sessione che identifica l'accesso; il sistema non ha eseguito il comando impartito per precauzione. Invia nuovamente il modulo.", "changecontentmodel": "Modifica il modello di contenuto di una pagina", diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json index aa0949ccdd..f1ec639783 100644 --- a/languages/i18n/ja.json +++ b/languages/i18n/ja.json @@ -2369,7 +2369,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|トーク]]) による編集を [[User:$1|$1]] による直前の版へ差し戻しました", "revertpage-nouser": "非表示の利用者による編集を {{GENDER:$1|[[User:$1|$1]]}} による直前の版へ差し戻しました", "rollback-success": "{{GENDER:$3|$1}}による編集を差し戻しました。\n{{GENDER:$4|$2}}による直前の版へ変更されました。", - "rollback-success-notify": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。[$3 変更を表示]", "sessionfailure-title": "セッションの失敗", "sessionfailure": "ログインのセッションに問題が発生しました。\nセッション乗っ取りを防ぐため、操作を取り消しました。\nフォームを再送信してください。", "changecontentmodel": "ページのコンテンツ・モデルの変更", @@ -3652,7 +3651,7 @@ "logentry-rights-autopromote": "$1 が $4 から $5 に自動的に{{GENDER:$2|昇格しました}}", "logentry-upload-upload": "$1 が $3 を {{GENDER:$2|アップロードしました}}", "logentry-upload-overwrite": "$1 が $3 の新しいバージョンを {{GENDER:$2|アップロードしました}}", - "logentry-upload-revert": "$1 が $3 を {{GENDER:$2|アップロードしました}}", + "logentry-upload-revert": "$1 が $3 を元の版に {{GENDER:$2|巻き戻しました}}", "log-name-managetags": "タグ管理記録", "log-description-managetags": "このページは[[Special:Tags|タグ]]に関係する管理タスクをリストアップしています。ログには管理者によって手動で実行された操作の記録しか記載されていません。ウィキ・ソフトウェアによって、ログを残さずにタグが作成・削除されている場合があります。", "logentry-managetags-create": "$1 がタグ「$4」を{{GENDER:$2|作成しました}}", diff --git a/languages/i18n/ka.json b/languages/i18n/ka.json index 17906302b3..4bae0599a0 100644 --- a/languages/i18n/ka.json +++ b/languages/i18n/ka.json @@ -2222,7 +2222,6 @@ "revertpage": "[[Special:Contributions/$2|$2]]-ის რედაქტირება გაუქმდა; აღდგა ბოლოს [[User:$1|$1]]-ის მიერ რედაქტირებული ვერსია", "revertpage-nouser": "მომხმარებლის (მომხმარებლის სახელი დამალულია) ცვლილებები დაბრუნებულია ვერსიაზე {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "გაუქმდა რედაქტირება {{GENDER:$3|$1}}-ის მიერ;\nდაბრუნდა ვერსიაზე, რომელიც განახორციელა {{GENDER:$4|$2}}-მ.", - "rollback-success-notify": "გაუმქდა $1-ის მიერ განხორციელებული რედაქტირებები;\nდაბრუნდე ვერსიაზე, რომელიც განახორციელა $2-მ. [$3 ცვლილებების ნახვა]", "sessionfailure-title": "სეანსის შეცდომა", "sessionfailure": "ჩანს, რომ პრობლემაა თქვენი რეგისტრაციის სესიისათვის;\nეს მოქმედება შეჩერდა თქვენი სესიაში შემოჭრის თავიდან ასაცილებლად.\nგთხოვთ, დააწკაპუნოთ ღილაკს „უკან“ და თავიდან ჩართოთ გვერდი, რომლიდანაც შემოხვედით და სცადოთ განმეორებით.", "changecontentmodel": "გვერდის კონტენტური მოდელის შეცვლა", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index f6e8a3d420..ca465b773a 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -2327,7 +2327,6 @@ "revertpage": "[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 판으로 되돌림", "revertpage-nouser": "숨긴 사용자의 편집을 {{GENDER:$1|[[User:$1|$1]]}}의 마지막 판으로 되돌림", "rollback-success": "{{GENDER:$3|$1}}의 편집을 되돌렸습니다.\n{{GENDER:$4|$2}}의 마지막 판으로 바뀌었습니다.", - "rollback-success-notify": "$1의 편집을 되돌렸습니다.\n$2의 마지막 판으로 바뀌었습니다. [$3 차이 보기]", "sessionfailure-title": "세션 실패", "sessionfailure": "로그인 세션에 문제가 발생한 것 같습니다.\n세션 하이재킹을 막기 위해 동작이 취소되었습니다.\n양식을 다시 제출해 주십시오.", "changecontentmodel": "문서의 콘텐츠 모델을 변경", diff --git a/languages/i18n/ksh.json b/languages/i18n/ksh.json index a3792e8a49..da4f7ae9a6 100644 --- a/languages/i18n/ksh.json +++ b/languages/i18n/ksh.json @@ -1982,7 +1982,6 @@ "revertpage": "Änderunge vun däm Metmaacher „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|däm sing Klaafsigg]]) fottjeschmeße, un doför de lätzde Väsjohn vum „[[User:$1|$1]]“ widder zeröckjehollt", "revertpage-nouser": "Änderunge vun enem Metmaacher, däm singe Name vershtoche es, retuur jemaat op de letzte Version {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} [[User:$1|$1]]", "rollback-success": "De Änderungen vum $1 zeröckjenumme, un dobei de letzte Version vum $2 widder jehollt.", - "rollback-success-notify": "Änderonge {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} „$1“ sin zerök jenumme un di Sigg es op der Schtand vun doför {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} „$2“ jesaz. [$3 Belohr, wat derbeij veränndert wood]", "sessionfailure-title": "Fähler met dä Daate vum Enlogge", "sessionfailure": "Et jov wall e täschnesch Problehm met Dingem Login. Dröm ham_mer dat us Vörseesch jäz nix jemaht, domet mer nit velleich Ding Änderong däm verkihrte Metmaacher ongerjubele. Jangk zeröck un versöhk et noch ens.", "changecontentmodel": "Et Modäll vum Ennhald vun ene Sigg verändere", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index 5d1ece3b93..ec60a63581 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -2119,7 +2119,6 @@ "revertpage": "Ännerunge vum [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussioun]]) zréckgesat op déi lescht Versioun vum [[User:$1|$1]]", "revertpage-nouser": "Zréckgesaten Ännerungen duerch e verstoppte Benotzer op déi lescht Versioun vum {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "D'Ännerunge vum {{GENDER:$3|$1}} goufen zréckgesat op déi lescht Versioun vum {{GENDER:$4|$2}}.", - "rollback-success-notify": "Zréckgesat Ännerunge vum $1:\nzréckgeännert op déi lescht Versioun vum $2. [$3 Ännerunge weisen]", "sessionfailure-title": "Setzungsfeeler", "sessionfailure": "Et schéngt e Problem mat Ärer Sessioun ze ginn;\nDës Aktioun gouf aus Sécherheetsgrënn ofgebrach, fir ze verhënneren datt Är Sessioun piratéiert ka ginn.\nSchéckt de Formulaire w.e.g. nach eng Kéier.", "changecontentmodel": "De Modell vum Inhalt vun enger Säit änneren", diff --git a/languages/i18n/lfn.json b/languages/i18n/lfn.json index 699f8d307f..23246414e6 100644 --- a/languages/i18n/lfn.json +++ b/languages/i18n/lfn.json @@ -2192,7 +2192,6 @@ "revertpage": "Editas par [[Special:Contributions/$2|$2]] ([[User talk:$2|discute]]) ia es reversada a la revisa la plu resente par [[User:$1|$1]]", "revertpage-nouser": "Editas par un usor ascondeda ia es reversada a la revisa la plu resente par [[User:$1|$1]]", "rollback-success": "Editas par {{GENDER:$3|$1}} ia es reversada e cambiada a la revisa la plu resente par {{GENDER:$4|$2}}", - "rollback-success-notify": "Editas par $1 ia es reversada e cambiada a la revisa la plu resente par $2. [$3 Mostra cambias]", "sessionfailure-title": "Fali de sesion", "sessionfailure": "Lo pare ce tua sesion de autentici ave un problem; esta ata ia es canselada per proteje contra saisis de sesion. Reenvia la formulario, per favore.", "changecontentmodel": "Cambia model de contenida de un paje", diff --git a/languages/i18n/li.json b/languages/i18n/li.json index e17578888e..8475cbd575 100644 --- a/languages/i18n/li.json +++ b/languages/i18n/li.json @@ -2213,7 +2213,6 @@ "revertpage": "Wieziginge door [[Special:Contributions/$2|$2]] ([[User talk:$2|Euverlik]]) trukgedriejd tot de lètste versie door [[User:$1|$1]]", "revertpage-nouser": "Verangeringe door 'ne verstaoke gebroeker trökgedrejd nao de litste versie van {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Verangeringe door {{GENDER:$3|$1}} trökgedrejd;\nlitste versie van {{GENDER:$4|$2}} herstèld.", - "rollback-success-notify": "De verangeringe door $1 zint trökgedrejd;\nde litste versie van $2 is herstèld. [$3 Tuin verangeringe]", "sessionfailure-title": "Sessiefout", "sessionfailure": "'t Liek op det se e perbleem höbs mit dien aanmeldingssessie;\ndees hanjeling is aafgebraoke oet veurzörg taenge 'nen hack.\nVersjik estebleef 't formeleer.", "changecontentmodel": "Bewirk inhawdsmodel van pagina", diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json index 0e198146fd..e68770baf5 100644 --- a/languages/i18n/lij.json +++ b/languages/i18n/lij.json @@ -2128,7 +2128,6 @@ "revertpage": "Annullou e modiffiche de [[Special:Contributions/$2|$2]] ([[User talk:$2|discuscion]]), riportâ a-a verscion precedente de [[User:$1|$1]]", "revertpage-nouser": "Annullou e modiffiche de un utente ascoso, riportâ a-a verscion precedente de {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Annullou e modiffiche de {{GENDER:$3|$1}}; paggina riportâ a l'urtima verscion de {{GENDER:$4|$2}}.", - "rollback-success-notify": "Annullou e modiffiche de $1;\npaggina riportâ a l'urtima revixon de $2. [$3 Mostra e modiffiche]", "sessionfailure-title": "Sescion fallia", "sessionfailure": "S'è veificou un problema inta sescion ch'a l'identiffica l'accesso; o scistema o no l'ha eseguio o comando impartio pe precauçion. Torna a-a paggina precedente co-o tasto 'Inderê' do to browser, recarega a paggina e riproeuva.", "changecontentmodel": "Cangia o modello de contegnuo de 'na paggina", diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json index 1ade781287..7458dea35a 100644 --- a/languages/i18n/lrc.json +++ b/languages/i18n/lrc.json @@ -193,7 +193,7 @@ "toolbox": "ٱڤزارؽا", "imagepage": "ديئن بألگە جانیا", "mediawikipage": "ديئن بألگە پئيغوم", - "templatepage": "دیئن بٱلگٱ چۊٱ", + "templatepage": "دیئن بٱلگٱ چۊئٱ", "viewhelppage": "ديئن بألگە هومیاری", "categorypage": "ديئن بألگە دأسە بأنی", "viewtalkpage": "دیئن چأک چئنە یا", @@ -283,7 +283,7 @@ "nstab-project": "بٱلگٱ پرۉژٱ", "nstab-image": "جانؽا", "nstab-mediawiki": "پاٛغوم", - "nstab-template": "چۊٱ", + "nstab-template": "چۊئٱ", "nstab-help": "بألگە هومیاری", "nstab-category": "دٱسٱ", "mainpage-nstab": "سرآسونٱ", @@ -617,9 +617,9 @@ "semiprotectedpagewarning": "د ڤیر داشتوٙئیت: ئی بألگە سی یە کئ فأقأط کاریاریا ثأڤتئنام کئردە تونئسوٙئن دئش ڤیراشتکار بأکأن پأر و پیم بییە.\nآخئری پئھرئستنوٙمە دأئە بییە سی سأرچئشمە ھاری نئھا ئمایە بییە:", "cascadeprotectedwarning": "زئنار: ئی بألگە ڤئ دأس کاریاریایی کئ صئلا سأردیڤوٙنکاری دارن می توٙنە ڤیرایئشت کاری بوٙە سی یە کئ ئی بألگە ڤئ رأڤئشت تاف نئمایی پأر و پیم کاری بییە {{PLURAL:$1|بألگە|بألگە یا}}:", "titleprotectedwarning": "زئنار:ئی بألگە پأر و پیم بییە سی یە کئ [[Special:نومگە حوقوٙق کاریاری جأرغە|حوقوٙق ڤیجە]] بایأد ڤئنە رأڤأندیاری بأکأن.\nآخئری پئھرئستنوٙمە دأ بییە سی سأرچئشمە دأئن نئھا ئمایە بییە:", - "templatesused": "{{PLURAL:$1|چۊٱ|چۊٱ یا}} ڤ کار گرتٱ بیٱ د اؽ بٱلگٱ:", - "templatesusedpreview": "{{PLURAL:$1| چۊٱ|چۊٱ یا}} ڤ کار گرتٱ بیٱ د پیش ساٛلٛ :", - "templatesusedsection": "{{PLURAL:$1|چوٙأ|چوٙأ یا}} ڤئ کار گئرئتە بییە د ئی بأرجا:", + "templatesused": "{{PLURAL:$1|چۊئٱ|چۊئٱ یا}} ڤ کار گرتٱ بیٱ د اؽ بٱلگٱ:", + "templatesusedpreview": "{{PLURAL:$1| چۊئٱ|چۊئٱ یا}} ڤ کار گرتٱ بیٱ د پیش ساٛلٛ :", + "templatesusedsection": "{{PLURAL:$1|چۊئٱ|چۊئٱ یا}} ڤ کار گرتٱ بیٱ د اؽ بٱلگٱ:", "template-protected": "(پٱر ۉ پیم بیٱ)", "template-semiprotected": "(نسم ۉ نیمٱ پٱر ۉ پیم بیٱ)", "hiddencategories": "اؽ بٱلگٱ یٱکؽ د ٱندومؽا ٱ {{PLURAL:$1|1 hidden category|$1 hidden categories}} :", @@ -2277,7 +2277,7 @@ "tooltip-ca-nstab-project": "ديئن بٱلگٱ پرۉژٱ", "tooltip-ca-nstab-image": "دیئن بٱلگٱ جانؽا", "tooltip-ca-nstab-mediawiki": "دیئن پاٛغوم سامونٱ", - "tooltip-ca-nstab-template": "ديئن چۊٱ", + "tooltip-ca-nstab-template": "ديئن چۊئٱ", "tooltip-ca-nstab-help": "ديئن بلگه هومیاری", "tooltip-ca-nstab-category": "دیئن بٱلگٱ دٱسٱ بٱنی", "tooltip-minoredit": "یٱ ناْ ڤ عونڤان هیردٱ ڤیرایش سٱبت کو", @@ -2345,7 +2345,7 @@ "pageinfo-recent-authors": "شمارٱ کولٛی نڤیسٱیا یٱکونٱ", "pageinfo-magic-words": "جادۊیی{{PLURAL:$1|کلٱمٱ|کلٱمٱیا}} ($1)", "pageinfo-hidden-categories": "$1{{PLURAL:$1|دٱسٱ|دٱسٱيا}} قایم بیٱ", - "pageinfo-templates": "{{PLURAL:$1|چۊٱ|چۊٱ یا}} ڤ کار گرتٱ بیٱ ($1)", + "pageinfo-templates": "{{PLURAL:$1|چۊئٱ|چۊئٱ یا}} ڤ کار گرتٱ بیٱ ($1)", "pageinfo-transclusions": "{{PLURAL:$1|بلگه|بلگه یا}} وه کار گرته بیه د ($1)", "pageinfo-toolboxlink": "دونسمٱنیٛا بٱلگٱ", "pageinfo-redirectsto": "واگردونی سی", diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json index dac0bcc682..210ba2dbc1 100644 --- a/languages/i18n/lt.json +++ b/languages/i18n/lt.json @@ -2192,7 +2192,6 @@ "revertpage": "Atmestas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]]) pakeitimas; sugrąžinta [[User:$1|$1]] versija", "revertpage-nouser": "Atversti pakeitimai paslėpto vartotojo, grąžino prieš tai buvusią versiją {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Atmesti {{GENDER:$3|$1}} pakeitimai;\ngrąžinta prieš tai buvusi {{GENDER:$4|$2}} versija.", - "rollback-success-notify": "Atmesti $1 pakeitimai;\ngrąžinta prieš tai buvusi $2 versija. [$3 Rodyti skirtumus]", "sessionfailure-title": "Sesijos klaida", "sessionfailure": "Atrodo yra problemų su jūsų prisijungimo sesija; šis veiksmas buvo atšauktas kaip atsargumo priemonė prieš sesijos vogimą.\nPrašome iš naujo pateikti formą.", "changecontentmodel": "Keisti puslapio turinio modelį", diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json index c3adb57840..aac9a3d740 100644 --- a/languages/i18n/lv.json +++ b/languages/i18n/lv.json @@ -1871,6 +1871,7 @@ "delete-toobig": "Šai lapai ir liela izmaiņu hronoloģija, vairāk nekā $1 {{PLURAL:$1|versijas|versija|versijas}}.\nŠādu lapu dzēšana ir atslēgta, lai novērstu nejaušus traucējumus {{grammar:lokatīvs|{{SITENAME}}}}.", "deleting-backlinks-warning": "'''Brīdinājums:''' uz lapu, ko grasies izdzēst, ved [[Special:WhatLinksHere/{{FULLPAGENAME}}|saites no citām lapām]].", "rollback": "Novērst labojumus", + "rollback-confirmation-no": "Atcelt", "rollbacklink": "novērst", "rollbacklinkcount": "atcelt $1 {{PLURAL:$1|labojumus|labojumu|labojumus}}", "rollbacklinkcount-morethan": "atcelt vairāk kā $1 {{PLURAL:$1|labojumus|labojumu|labojumus}}", diff --git a/languages/i18n/mai.json b/languages/i18n/mai.json index 5eafe6b1ba..5e8ff1a3dd 100644 --- a/languages/i18n/mai.json +++ b/languages/i18n/mai.json @@ -2024,7 +2024,6 @@ "revertpage": "सम्पादन आपस कएल गेल [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) सँ अन्तिम संशोधन धरि एकरा द्वारा [[User:$1|$1]]।", "revertpage-nouser": "(प्रयोक्ताक नाम हटा देल गेल अछि) द्वारा केल गेल संपादनकेँ फेरसँ पुरान स्थितिमे आनि कऽ एकर पहिलुक [[User:$1|$1]] सँ बनल संस्करणकेँ फेरसँ ताजा संस्करण बनाऊ।", "rollback-success": "{{GENDER:$3|$1}} क संपादन हटाबी;\n{{GENDER:$4|$2}} द्वारा संपादित अन्तिम अवतरण क पुनर्स्थापित करू।", - "rollback-success-notify": "$1द्वारा पूर्ववत सम्पादन;\n$2द्वारा केल अन्तिम अवतरण पर वापस। [$3 परिवर्तन देखाबी]", "sessionfailure-title": "सत्र विफल भ गेल", "sessionfailure": "एहन लागैत अछि जे अहां के लागिन सत्र में कोनो त्रुटि अछि. सत्र अपहरण से बचाबय सं सावधानीक लेल अहां के अहि क्रियाकलाप क रद्द क देल गेल. अहां पाछां के पृष्ठ पर जौउ आ पृष्ठ के फेर सं लोड क दोबारा कोशिश करू.", "changecontentmodel": "पृष्ठ सामग्री मोडल परिवर्तन करी", diff --git a/languages/i18n/map-bms.json b/languages/i18n/map-bms.json index 66dc8ab232..873ac47e9f 100644 --- a/languages/i18n/map-bms.json +++ b/languages/i18n/map-bms.json @@ -1207,7 +1207,6 @@ "revertpage": "Suntingane [[Special:Contributions/$2|$2]] ([[User talk:$2|dhiskusi]]) dibalekna maring versi pungkasan sekang [[User:$1|$1]]", "revertpage-nouser": "Mbalekna suntingan sekang (jeneng panganggo dibusek) ming revisi pungkasan sekang [[User:$1|$1]]", "rollback-success": "Mbalekna suntingane $1;\ndibalekna ming revisi pungkasan sekang $2.", - "rollback-success-notify": "Mbalekna besutan sekang $1; owah mbalik nggo revisi mburi sekang $2. [$3 Deleng owahane]", "sessionfailure-title": "Sèsi gagal", "sessionfailure": "Ketone lagi ana masalah karo sesi log-e Rika;\nloge Rika wis dibatalna nggo nyegah pambajakan.\nMonggo mbalik ming kaca sedurunge, dibaleni gole muatna kaca (reload) lan jajal diunggahna maning.", "protectlogpage": "Log pangreksan", diff --git a/languages/i18n/min.json b/languages/i18n/min.json index e7b687709c..1f0dc81a54 100644 --- a/languages/i18n/min.json +++ b/languages/i18n/min.json @@ -817,12 +817,32 @@ "revdel-restore": "ganti tampilan", "pagehist": "Riwayaik laman", "deletedhist": "Riwayaik pangapuihan", + "revdelete-hide-current": "Gagal manyambunyian parubahan tanggal $2, $1: iko adolah parubahan paliang baru.\nParubahan ko indak dapek disambunyian.", + "revdelete-show-no-access": "Gagal manampilan parubahan tanggal $2, $1: parubahan ko alah ditandoi ''tabateh''.\nSanak indak punyo akses ka parubahan ko.", + "revdelete-modify-no-access": "Gagal maubah parubahan tanggal $2, $1: parubahan ko alah ditandoi ''tabateh''.\nSanak indak punyo akses ka parubahan ko.", + "revdelete-modify-missing": "Gagal maubah parubahan ID $1: parubahan ko indak ado di basis data!", + "revdelete-no-change": "Paringatan:Parubahan tanggal $2, $1 alah punyo aturan panyambunyian.", + "revdelete-concurrent-change": "Gagal maubah parubahan tanggal $2, $1: statusnyo mungkin alah diubah pangguno lain basamoan jo Sanak.\nCubo pareso catatan log.", + "revdelete-only-restricted": "Ado yang salah wakatu manyambunyian item tanggal $2, $1: Sanak indak dapek manyambunyiannyo dari panguruih tanpa mamiliah salah satu opsi panyambunyian lainnyo.", "revdelete-reason-dropdown": "*Alasan pangapuihan umum\n** Palanggaran hak cipta\n** Komentar atau informasi paribadi nan indak patuik\n** Namo pangguno nan indak patuik\n** Bapotensi mancemarkan namo baiak", "revdelete-otherreason": "Alasan lain/tambahan:", "revdelete-reasonotherlist": "Alasan lain", "revdelete-edit-reasonlist": "Alasan mangapuih laman", "revdelete-offender": "Pambuek reviri:", "suppressionlog": "Log pambanaman", + "suppressionlogtext": "Dibawah ko adolah daftar panghapuihan jo pamblokiran, tamasuak isi yang disambunyian dari panguruih.\nCaliak [[Special:BlockList|block list]] untuak daftar yang paliang baru.", + "mergehistory": "Riwayaik panggabuangan sajarah halaman", + "mergehistory-box": "Gabuang parubahan-parubahan dari duo halaman:", + "mergehistory-from": "Halaman sumber:", + "mergehistory-into": "Halaman tujuan:", + "mergehistory-go": "Tampilan suntiangan yang dapek digabuang", + "mergehistory-submit": "Gabuang revisi", + "mergehistory-empty": "Indak ado parubahan yang dapek digabuang.", + "mergehistory-done": "$3 {{PLURAL:$3|revision|revisions}} dari $1 {{PLURAL:$3|was|were}} berhasil digabuangan ka [[:$2]].", + "mergehistory-fail": "Indak dapek digabuang, mohon pareso baliak halaman jo parameter waktu.", + "mergehistory-fail-invalid-source": "Halaman asal indak sah.", + "mergehistory-fail-invalid-dest": "Halaman tujuan indak sah.", + "mergehistory-fail-self-merge": "Halaman sumber jo tujuannyo samo.", "mergehistory-reason": "Alasan:", "mergelog": "Log panggabuangan", "revertmerge": "Batal gabuang", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index 42680f9406..2d3e88b638 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -2276,6 +2276,9 @@ "deleting-backlinks-warning": "Предупредување: До страницата што сакате да ја избришете водат [[Special:WhatLinksHere/{{FULLPAGENAME}}|други страници]] или пак се превметнуваат во неа.", "deleting-subpages-warning": "Предупредување: Страницата што сакате да ја избришете има [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|потстраница|$1 потстраници|51=преку 50 потстраници}}]].", "rollback": "Отповикај промени", + "rollback-confirmation-confirm": "Да {{PLURAL:$1|0=ги отповикам овие уредувања|отповикам едно уредување|отповикам $1 уредувања}}?", + "rollback-confirmation-yes": "Отповикај", + "rollback-confirmation-no": "Откажи", "rollbacklink": "отповикај", "rollbacklinkcount": "отповикај $1 {{PLURAL:$1|уредување|уредувања}}", "rollbacklinkcount-morethan": "отповикај повеќе од $1 {{PLURAL:$1|уредување|уредувања}}", @@ -2288,7 +2291,6 @@ "revertpage": "Отстрането уредувањето на [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]), вратено на последната верзија на [[User:$1|$1]]", "revertpage-nouser": "Вратени уредувања од скриен корисник на последната преработка на {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Откажани уредувањата на {{GENDER:$3|$1}};\nвратено на последната верзија на {{GENDER:$4|$2}}.", - "rollback-success-notify": "Откажани уредувањата на $1;\nвратено на последната преработка на $2. [$3 Пок. промени]", "sessionfailure-title": "Седницата не успеа", "sessionfailure": "Се јави проблем со најавната седница;\nова дејство е откажано за да се спречи нејзина кражба.\nПоднесете го образецот повторно.", "changecontentmodel": "Промена на содржинскиот модел на страница", @@ -3100,6 +3102,7 @@ "confirm-unwatch-top": "Да ја отстранам страницава од набљудуваните?", "confirm-rollback-button": "ОК", "confirm-rollback-top": "Да ги отповикам уредувањата на страницава?", + "confirm-rollback-bottom": "Ова дејство веднаш ќе ги отповика избраните промени на страницава.", "confirm-mcrrestore-title": "Поврати преработка", "confirm-mcrundo-title": "Откажи промена", "mcrundofailed": "Откажувањето не успеа", @@ -3876,7 +3879,7 @@ "gotointerwiki": "Го напуштате {{SITENAME}}", "gotointerwiki-invalid": "Укажаниот наслов е неважечки.", "gotointerwiki-external": "Го напуштате {{SITENAME}} упатени кон [[$2]], кое е посебно мрежно место.\n\n'''[$1 Продолжете кон $1]'''", - "undelete-cantedit": "Не можете да ја вратите избришаната страница бидејќи уредувањето на страницава не ви е дозволено.", + "undelete-cantedit": "Не можете да ја вратите оваа страница бидејќи уредувањето на страницава не ви е дозволено.", "undelete-cantcreate": "Не можете да ја вратите страницава бидејќи не постои страница со таков назив и не ви е дозволено да ја создадете.", "pagedata-title": "Податоци за страницата", "pagedata-text": "Страницава дава посредник за податоци за страниците. Укажете го насловот на страницата во URL-то, користејќи ја синтаксата за потстраници.\n* Префрлањето на содржината се заснова на заглавието Прифати на вашиот клиент. Ова значи дека податоците за страницата ќе бидат ставени во форматот кој го претпочита вашиот клиент.", diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json index e7496183f8..75b69a0f4f 100644 --- a/languages/i18n/ml.json +++ b/languages/i18n/ml.json @@ -1953,10 +1953,10 @@ "apisandbox-submit-invalid-fields-title": "ചില മണ്ഡലങ്ങൾ അസാധുവാണ്", "apisandbox-results": "ഫലങ്ങൾ", "apisandbox-request-url-label": "അഭ്യർത്ഥനാ യൂ.ആർ.എൽ.:", - "apisandbox-request-json-label": "JSON നുവേണ്ടി അപേക്ഷിക്കുക:", + "apisandbox-request-json-label": "ജെസൺ അപേക്ഷിക്കുക:", "apisandbox-request-time": "അഭ്യർത്ഥനയുടെ സമയം: {{PLURAL:$1|$1 മി.സെ.}}", "apisandbox-results-fixtoken": "ചീട്ട് ശരിയാക്കിയ ശേഷം വീണ്ടും സമർപ്പിക്കുക", - "apisandbox-results-fixtoken-fail": "\"$1\" ടോക്കൻ എടുക്കുന്നത്‌ പരാജയപെട്ടു.", + "apisandbox-results-fixtoken-fail": "\"$1\" ചീട്ട് എടുക്കുന്നത്‌ പരാജയപെട്ടു.", "apisandbox-alert-page": "ഈ താളിലെ ഫീൽഡുകൾ അസാധുവാണ്.", "apisandbox-continue": "തുടരുക", "apisandbox-continue-clear": "ശൂന്യമാക്കുക", @@ -2191,7 +2191,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|സംവാദം]]) നടത്തിയ തിരുത്തലുകൾ നീക്കം ചെയ്തിരിക്കുന്നു; നിലവിലുള്ള പതിപ്പ് [[User:$1|$1]] സൃഷ്ടിച്ചതാണ്", "revertpage-nouser": "മറയ്ക്കപ്പെട്ട ഉപയോക്താവ് നടത്തിയ തിരുത്തലുകൾ {{GENDER:$1|[[User:$1|$1]]}} സൃഷ്ടിച്ച അവസാന പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു", "rollback-success": "{{GENDER:$3|$1}} ചെയ്ത തിരുത്ത് തിരസ്ക്കരിച്ചിരിക്കുന്നു; {{GENDER:$4|$2}} ചെയ്ത തൊട്ടു മുൻപത്തെ പതിപ്പിലേക്ക് സേവ് ചെയ്യുന്നു.", - "rollback-success-notify": "$1 ചെയ്ത തിരുത്തുകൾ തിരസ്ക്കരിച്ചിരിക്കുന്നു; $2 ചെയ്ത തൊട്ടു മുൻപത്തെ പതിപ്പിലേക്ക് സേവ് ചെയ്യുന്നു. [$3 മാറ്റങ്ങൾ കാണിക്കുക]", "sessionfailure-title": "സെഷൻ പരാജയപ്പെട്ടിരിക്കുന്നു", "sessionfailure": "താങ്കളുടെ ലോഗിൻ സെഷനിൽ പ്രശ്നങ്ങളുള്ളതായി കാണുന്നു;\nസെഷൻ തട്ടിയെടുക്കൽ ഒഴിവാക്കാനുള്ള മുൻകരുതലായി ഈ പ്രവൃത്തി റദ്ദാക്കിയിരിക്കുന്നു.\nദയവായി ഫോം വീണ്ടും സമർപ്പിക്കുക.", "changecontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക", @@ -3556,11 +3555,11 @@ "authmanager-provider-password": "രഹസ്യവാക്ക്-അധിഷ്ഠിത സാധൂകരണം", "authmanager-provider-password-domain": "രഹസ്യവാക്ക്-ഡൊമൈൻ-അധിഷ്ഠിത സാധൂകരണം", "authmanager-provider-temporarypassword": "താത്കാലിക രഹസ്യവാക്ക്", - "authprovider-confirmlink-success-line": "$1: വിജയകരമായി ലിങ്ക് ചെയ്തു.", + "authprovider-confirmlink-success-line": "$1: വിജയകരമായി കണ്ണി ചേർത്തു.", "authprovider-resetpass-skip-label": "മറികടക്കുക", - "authform-newtoken": "ടോക്കൺ കാണുന്നില്ല. $1", - "authform-notoken": "ടോക്കൺ കാണുന്നില്ല", - "authform-wrongtoken": "തെറ്റായ ടോക്കൻ", + "authform-newtoken": "ചീട്ട് കാണുന്നില്ല. $1", + "authform-notoken": "ചീട്ട് കാണുന്നില്ല", + "authform-wrongtoken": "തെറ്റായ ചീട്ട്", "specialpage-securitylevel-not-allowed-title": "അനുവദിച്ചിട്ടില്ല", "specialpage-securitylevel-not-allowed": "താങ്കളുടെ വ്യക്തിത്വം പരിശോധിക്കാൻ കഴിയാഞ്ഞതിനാൽ ഈ താൾ ഉപയോഗിക്കാൻ താങ്കളെ അനുവദിക്കാനാവില്ല.", "authpage-cannot-login": "പ്രവേശനം തുടങ്ങാൻ സാധിക്കുന്നില്ല.", diff --git a/languages/i18n/nap.json b/languages/i18n/nap.json index 93402f30fd..8a393a9a16 100644 --- a/languages/i18n/nap.json +++ b/languages/i18n/nap.json @@ -2166,7 +2166,6 @@ "revertpage": "Cangiaje 'e cagnamiénte 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), cu â verzione 'e pprimma 'e [[User:$1|$1]]", "revertpage-nouser": "Annullate 'e cagnamiente 'e n'utente annascunnuto, è stata ripigliata ll'urdema verzione 'e {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Cagnamiente annullate 'a {{GENDER:$3|$1}};\ns'è turnato arreto a l'urdema verzione 'e {{GENDER:$4|$2}}.", - "rollback-success-notify": "Cagnamiente annullate 'a $1;\ns'è turnat arreto a l'urdema verzione 'e $2. [$3 Fà vedé 'e cagnamiente]", "sessionfailure-title": "Sessione fallita", "sessionfailure": "Pare ca stanno probbleme cu 'a sessiona toja;\nst'azione è stata fermata pe' precauzione annanz' 'e cavall' 'e troia;\nPe' piacere turnate arreto, carrecate n'ata vota 'a paggena pe pruvate n'ata vota.", "changecontentmodel": "Cagna 'o mudello 'e cuntenute 'e na paggena", diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index 05016bf8cd..e0afd43de9 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -2308,7 +2308,6 @@ "revertpage": "Tilbakestilte endringer av [[Special:Contributions/$2|$2]] ([[User talk:$2|brukerdiskusjon]]) til siste versjon av [[User:$1|$1]]", "revertpage-nouser": "Tilbakestilt endringer av skjult bruker til siste versjon av\n{{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Tilbakestilte endringer av {{GENDER:$3|$1}}; endret til siste versjon av {{GENDER:$4|$2}}.", - "rollback-success-notify": "Tilbakestilte endringer av $1;\nendret tilbake til siste revisjon av $2. [$3 Vis endringer]", "sessionfailure-title": "Sesjonsfeil", "sessionfailure": "Det ser ut til å være et problem med innloggingen din, og handlingen ble avbrutt av sikkerhetshensyn. Vennlgist prøv å sende skjemaet en gang til.", "changecontentmodel": "Endre innholdsmodell for en side", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index c2d7cc08da..befe0f4cf9 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -2347,7 +2347,6 @@ "revertpage": "Wijzigingen door [[Special:Contributions/$2|$2]] ([[User talk:$2|Overleg]]) hersteld tot de laatste versie door [[User:$1|$1]]", "revertpage-nouser": "Wijzigingen door een verborgen gebruiker teruggedraaid naar de laatste versie door {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Wijzigingen door {{GENDER:$3|$1}} ongedaan gemaakt;\nlaatste versie van {{GENDER:$4|$2}} hersteld.", - "rollback-success-notify": "De wijzigingen door $1 zijn teruggedraaid;\nde laatste versie van $2 is hersteld. [$3 Wijzigingen weergeven]", "sessionfailure-title": "Sessiefout", "sessionfailure": "Er lijkt een probleem te zijn met uw aanmeldsessie.\nUw handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nProbeer het formulier opnieuw te versturen.", "changecontentmodel": "Inhoudsmodel van pagina bewerken", diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json index ccb9f47f25..1749737322 100644 --- a/languages/i18n/pl.json +++ b/languages/i18n/pl.json @@ -2355,7 +2355,6 @@ "revertpage": "Wycofano edycje użytkownika [[Special:Contributions/$2|$2]] ([[User talk:$2|dyskusja]]). Autor przywróconej wersji to [[User:$1|$1]].", "revertpage-nouser": "Wycofano edycje ukrytego użytkownika. Autor przywróconej wersji to {{GENDER:$1|[[User:$1|$1]]}}.", "rollback-success": "Wycofano edycje {{GENDER:$3|użytkownika|użytkowniczki}} $1;\nprzywrócono ostatnią wersję autorstwa {{GENDER:$4|$2}}.", - "rollback-success-notify": "Wycofano edycje użytkownika $1;\nprzywrócono ostatnią wersję autorstwa $2. [$3 Pokaż zmiany]", "sessionfailure-title": "Błąd sesji", "sessionfailure": "Wydaje się, że wystąpił błąd z Twoją sesją zalogowania;\nto działanie zostało anulowane, aby uniknąć przechwycenia sesji.\nPrześlij formularz jeszcze raz.", "changecontentmodel": "Edycja modelu zawartości strony", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index 857cd834a0..933b98ac25 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -2349,7 +2349,7 @@ "enotif_lastvisited": "Consulte $1 para todas as alterações efetuadas desde a sua última visita.", "enotif_lastdiff": "Acesse $1 para ver esta alteração.", "enotif_anon_editor": "usuário anônimo $1", - "enotif_body": "{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},\n\n$PAGEINTRO $NEWPAGE\n\nResumo do editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContate o editor:\ne-mail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nAté que visite esta página, você não receberá mais notificações das alterações futuras.\nVocê pode também reativar as notificações para todas páginas na sua lista de páginas vigiadas.\n\nO seu sistema de notificação amigável da {{SITENAME}}\n\n--\nPara alterar as suas preferências das notificações por correio electrônico, visite\n{{canonicalurl:{{#special:Preferences}}}}\n\nPara alterar as suas preferências das páginas vigiadas, visite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPara retirar a página da lista de páginas vigiadas, visite\n$UNWATCHURL\n\nPara comentários e pedidos de ajuda:\n$HELPPAGE", + "enotif_body": "{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},\n\n$PAGEINTRO $NEWPAGE\n\nResumo do editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContate o editor:\ne-mail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nAté que visite esta página, você não receberá mais notificações das alterações futuras.\nVocê pode também reativar as notificações para todas páginas na sua lista de páginas vigiadas.\n\nO seu sistema de notificação amigável da {{SITENAME}}\n\n--\nPara alterar as suas preferências das notificações por correio eletrônico, visite\n{{canonicalurl:{{#special:Preferences}}}}\n\nPara alterar as suas preferências das páginas vigiadas, visite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPara retirar a página da lista de páginas vigiadas, visite\n$UNWATCHURL\n\nPara comentários e pedidos de ajuda:\n$HELPPAGE", "enotif_minoredit": "Esta é uma edição menor", "created": "criada", "changed": "alterada", @@ -2384,6 +2384,8 @@ "deleting-backlinks-warning": "'''Cuidado:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|outras páginas]] ligam ou redirecionam para a página que você está prestes a eliminar.", "deleting-subpages-warning": "Aviso: A página que você está prestes a excluir tem [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|uma subpágina|$1 subpáginas|51=mais de 50 subpáginas}}]].", "rollback": "Reverter edições", + "rollback-confirmation-yes": "Reverter", + "rollback-confirmation-no": "Cancelar", "rollbacklink": "reverter", "rollbacklinkcount": "reverter $1 {{PLURAL:$1|edição|edições}}", "rollbacklinkcount-morethan": "reverter mais de $1 {{PLURAL:$1|edição|edições}}", @@ -2396,7 +2398,6 @@ "revertpage": "Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última versão por [[User:$1|$1]]", "revertpage-nouser": "Revertidas as edições de um usuário oculto para a última revisão de {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Edições revertidas por {{GENDER:$3|$1}};\nalterado para a última revisão por {{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": "Parece haver um problema com sua sessão de login;\nEsta ação foi cancelada como uma precaução contra o seqüestro de sessão.\nPor favor, reenvie o formulário.", "changecontentmodel": "Alterar o modelo de conteúdo de uma página", @@ -3219,6 +3220,7 @@ "confirm-unwatch-top": "Remover esta página das páginas vigiadas?", "confirm-rollback-button": "OK", "confirm-rollback-top": "Reverter edições nesta página?", + "confirm-rollback-bottom": "Essa ação reverterá instantaneamente as alterações selecionadas para esta página.", "confirm-mcrrestore-title": "Restaurar uma revisão", "confirm-mcrundo-title": "Desfazer uma mudança", "mcrundofailed": "A reversão falhou", diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json index e54a79e247..779d982c94 100644 --- a/languages/i18n/pt.json +++ b/languages/i18n/pt.json @@ -2347,7 +2347,6 @@ "revertpage": "Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última revisão de [[User:$1|$1]]", "revertpage-nouser": "Foram revertidas as edições de um utilizador oculto para a última revisão de {{GENDER:$1|[[User:$1|$1]]}}", "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 detetados problemas com a sua sessão;\na operação foi cancelada como medida de proteção contra a intercetação de sessões.\nReenvie o formulário, por favor.", "changecontentmodel": "Alterar modelo de conteúdo de uma página", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index 790633bf7a..3438272be3 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -252,7 +252,8 @@ "tog-norollbackdiff": "Option in [[Special:Preferences]], 'Misc' tab. Only shown for users with the rollback right. By default a diff is shown below the return screen of a rollback. Checking this preference toggle will suppress that. {{Gender}}\n{{Identical|Rollback}}", "tog-useeditwarning": "Used as label for the checkbox in [[Special:Preferences#mw-prefsection-editing|Special:Preferences]].", "tog-prefershttps": "Toggle option used in [[Special:Preferences]] that indicates if the user wants to use a secure connection when logged in", - "tog-showrollbackconfirmation": "Toggle option used in [[Special:Preferences]] to enable/disable rollback confirmation prompt. Should be visible only to users with rollback rights", + "tog-showrollbackconfirmation": "Toggle option used in [[Special:Preferences]] to enable/disable rollback confirmation prompt. Should be visible only to users with rollback rights.", + "tog-showrollbackconfirmation-prerelease-warning": "Notice for wikis where the option can be set before the feature is enabled.\n\nNote: This notice is temporary and will only appear before the rollback confirmation feature is released.", "underline-always": "Used in [[Special:Preferences#mw-prefsection-rendering|Preferences]].\n\nThis option means \"always underline links\", there are also options {{msg-mw|Underline-never}} and {{msg-mw|Underline-default}}.\n\n{{Gender}}\n{{Identical|Always}}", "underline-never": "Used in [[Special:Preferences#mw-prefsection-rendering|Preferences]].\n\nThis option means \"never underline links\", there are also options {{msg-mw|Underline-always}} and {{msg-mw|Underline-default}}.\n\n{{Gender}}\n{{Identical|Never}}", "underline-default": "Used in [[Special:Preferences#mw-prefsection-rendering|Preferences]].\n\nThis option means \"underline links as in your user skin or your browser\", there are also options {{msg-mw|Underline-never}} and {{msg-mw|Underline-always}}.\n\n{{Gender}}\n{{Identical|Browser default}}", @@ -2595,6 +2596,9 @@ "deleting-backlinks-warning": "A warning shown when a page that is being deleted has at least one link to it or is transcluded in at least one page.", "deleting-subpages-warning": "A warning shown when a page that is being deleted has at least one subpage. $1 is the number of subpages of the page. For any number of subpages over 50, $1 will be 51.\nSee also:\n* {{msg-mw|Deleting-backlinks-warning}}", "rollback": "{{Identical|Rollback}}", + "rollback-confirmation-confirm": "Prompt which asks the user to confirm that they want to really perform the rollback action after clicking on the rollback button.", + "rollback-confirmation-yes": "Button text to confirm that a rollback should be executed.", + "rollback-confirmation-no": "Button text to cancel a rollback instead of executing it.", "rollbacklink": "{{Doc-actionlink}}\nThis link text appears on the recent changes page to users who have the \"rollback\" right.\nThis message has a tooltip {{msg-mw|tooltip-rollback}}\n{{Identical|Rollback}}", "rollbacklinkcount": "{{doc-actionlink}}\nText of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.\n\nParameters:\n* $1 - the number of edits that will be rolled back. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.\n\nThe rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}", "rollbacklinkcount-morethan": "{{doc-actionlink}}\nText of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.\n\nWhen the number of edits rolled back is smaller than [[mw:Special:MyLanguage/Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.\n\nParameters:\n* $1 - number of edits", @@ -2607,7 +2611,6 @@ "revertpage": "Parameters:\n* $1 - username 1\n* $2 - username 2\n* $3 - (Optional) revision ID of the revision reverted to\n* $4 - (Optional) timestamp of the revision reverted to\n* $5 - (Optional) revision ID of the revision reverted from\n* $6 - (Optional) timestamp of the revision reverted from\nSee also:\n* {{msg-mw|Revertpage-nouser}}\n{{Identical|Revert}}", "revertpage-nouser": "This is a confirmation message a user sees after reverting, when the username of the version is hidden with RevisionDelete.\n\nIn other cases the message {{msg-mw|Revertpage}} is used.\n\nParameters:\n* $1 - username 1, can be used for GENDER\n* $2 - (Optional) username 2\n* $3 - (Optional) revision ID of the revision reverted to\n* $4 - (Optional) timestamp of the revision reverted to\n* $5 - (Optional) revision ID of the revision reverted from\n* $6 - (Optional) timestamp of the revision reverted from", "rollback-success": "This message shows up on screen after successful revert (generally visible only to admins). Parameters:\n* $1 - user whose changes have been reverted\n* $2 - user who produced version, which replaces reverted version\n* $3 - the first user's name, can be used for GENDER\n* $4 - the second user's name, can be used for GENDER\n{{Identical|Revert}}\n{{Identical|Rollback}}", - "rollback-success-notify": "Notification shown after a successful revert.\n* $1 - User whose changes have been reverted\n* $2 - User that made the edit that was restored\n* $3 - Url to the diff of the rollback\nSee also:\n* {{msg-mw|showdiff}}\n{{related|rollback-success}}\n{{Format|jquerymsg}}", "sessionfailure-title": "Used as title of the error message {{msg-mw|Sessionfailure}}.", "sessionfailure": "Used as error message.\n\nThe title for this error message is {{msg-mw|Sessionfailure-title}}.", "changecontentmodel": "Title of the change content model special page", @@ -3532,6 +3535,7 @@ "confirm-unwatch-top": "Used as confirmation message.", "confirm-rollback-button": "Used as Submit button text.\n{{Identical|OK}}", "confirm-rollback-top": "Used as confirmation message.", + "confirm-rollback-bottom": "Used to describe the rollback action to the user.", "confirm-mcrrestore-title": "Title for the editless restore form.", "confirm-mcrundo-title": "Title for the editless undo form.", "mcrundofailed": "Title of the error page when an editless undo fails.", diff --git a/languages/i18n/ro.json b/languages/i18n/ro.json index 980836d80a..28bfd42a91 100644 --- a/languages/i18n/ro.json +++ b/languages/i18n/ro.json @@ -2302,7 +2302,6 @@ "revertpage": "Anularea modificărilor efectuate de către [[Special:Contributions/$2|$2]] ([[User talk:$2|discuție]]) și revenire la ultima versiune de către [[User:$1|$1]]", "revertpage-nouser": "Anularea modificărilor efectuate de un utilizator ascuns și revenirea la ultima modificare de către {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Modificările făcute de {{GENDER:$3|$1}} au fost anulate;\nam revenit la ultima versiune de {{GENDER:$4|$2}}.", - "rollback-success-notify": "S-a revenit asupra schimbărilor făcute de $1;\nam revenit la ultima versiune de $2. [$3 Arată schimbările]", "sessionfailure-title": "Eroare de sesiune", "sessionfailure": "Se pare că este o problemă cu sesiunea de autentificare; această acțiune a fost oprită ca o precauție împotriva furtului sesiunii. Vă rugăm să trimiteți formularul din nou.", "changecontentmodel": "Modificare model de conținut al unei pagini", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index 927448b251..7c541ed094 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -2402,7 +2402,6 @@ "revertpage": "Откат правок [[Special:Contributions/$2|$2]] ([[User talk:$2|обсуждение]]) к версии [[User:$1|$1]]", "revertpage-nouser": "Откат правок (имя участника скрыто) к версии {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Откачены правки {{GENDER:$3|$1}}; возвращена последняя версия {{GENDER:$4|$2}}.", - "rollback-success-notify": "Откачены правки $1; возвращена последняя версия $2. [$3 Показать изменения]", "sessionfailure-title": "Ошибка сеанса", "sessionfailure": "Похоже, возникли проблемы с текущим сеансом работы;\nэто действие было отменено в целях предотвращения «захвата сеанса».\nПожалуйста, переотправьте форму.", "changecontentmodel": "Редактирование контентной модели страницы", diff --git a/languages/i18n/sah.json b/languages/i18n/sah.json index 3680088555..03b66bb545 100644 --- a/languages/i18n/sah.json +++ b/languages/i18n/sah.json @@ -2211,7 +2211,6 @@ "revertpage": "([[User talk:$2|Ырытыы]]) көннөрүүлэрэ: [[Special:Contributions/$2|$2]] бу торумҥа: [[User:$1|$1]] төннөрүлүннүлэр", "revertpage-nouser": "Аата кистэммит киһи уларытыылара суох оҥоһуллан, ыстатыйа бу киһи барылыгар төннөрүлүннэ: {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "{{GENDER:$3|$1}} көннөрүүтэ сотулунна; {{GENDER:$4|$2}} барылыгар төннөрүлүннэ.", - "rollback-success-notify": "$1 уларытыылара сотулуннулар; \n$2 тиһэх торумугар төннөрүлүннэ. [$3 Уларытыыны көрдөр]", "sessionfailure-title": "Сиэссийэ алҕаһа", "sessionfailure": "Арааһа туох эрэ сатаммата, дьайыыҥ оҥоһуллубата. Браузергар \"Төнүн\" тимэҕи баттаа уонна бу иннинээҕи сирэйгин иккистээн киллэрэн көр.", "changecontentmodel": "Сирэй ис тутулун киэбин уларытыы", diff --git a/languages/i18n/sgs.json b/languages/i18n/sgs.json index c24b7796d4..24f947211d 100644 --- a/languages/i18n/sgs.json +++ b/languages/i18n/sgs.json @@ -1320,7 +1320,6 @@ "editcomment": "Padėrbėma paāškėnėms bova: $1.", "revertpage": "Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|aptarėms]]) pakeitėms; sogrōžints atmains, katron padėrba nauduotuos [[User:$1|$1]]", "rollback-success": "Atmestė $1 padėrbtė keitėmā; grōžints $2 padėrbts atmains.", - "rollback-success-notify": "Atmestė $1 padėrbtė keitėmā; grōžints $2 padėrbts atmains. [$3 ruodītė keitėmus]", "sessionfailure-title": "Sesėjės klaida", "sessionfailure": "Atruod ka īr biedū so Tamstas prėsėjongėmo; tas vēksmos bova grōžints kāp atsargoma prėimonė nu sesėjės vuogėma.\nPrašoum mīgtė „atgal“ ėr parkrautė poslapi ėš katruo atiejėt, ė pamieginkėt apent.", "changecontentmodel-title-label": "Poslapė pavadėnėms", diff --git a/languages/i18n/sh.json b/languages/i18n/sh.json index 268943256a..a272171fbd 100644 --- a/languages/i18n/sh.json +++ b/languages/i18n/sh.json @@ -939,7 +939,7 @@ "search-category": "(kategorija $1)", "search-file-match": "(odgovara sadržaju datoteke)", "search-suggest": "Da li ste mislili: $1", - "search-rewritten": "Ishod iz $1. Umjesto toga pretraži $2.", + "search-rewritten": "Ishod iz $1. Ili potražite ga $2.", "search-interwiki-caption": "Ishod s bratskih projekata", "search-interwiki-default": "Rezultati od $1:", "search-interwiki-more": "(više)", @@ -2193,7 +2193,6 @@ "revertpage": "Vraćene izmjene [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu korisnika [[User:$1|$1]]", "revertpage-nouser": "Vraćene izmjene skrivenog korisnika na posljednju reviziju, koju je {{GENDER:$1|napravio|napravila}} [[User:$1|$1]]", "rollback-success": "Vraćene su izmjene korisnika {{GENDER:$3|$1}};\nvraćeno na posljednju verziju koju je snimio {{GENDER:$4|$2}}.", - "rollback-success-notify": "Vraćene izmjene korisnika $1;\nvraćeno na posljednju izmjenu korisnika $2. [$3 Pok. promjene]", "sessionfailure-title": "Greška u sesiji", "sessionfailure": "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.", "changecontentmodel": "Promijeni model sadržaja stranice", @@ -3519,5 +3518,30 @@ "edit-error-short": "Greška: $1", "edit-error-long": "Greške:\n\n$1", "revid": "izmjena $1", - "pageid": "ID stranice $1" + "pageid": "ID stranice $1", + "gotointerwiki": "Napuštate projekt {{SITENAME}}", + "gotointerwiki-invalid": "Navedeni naslov je nevalidan.", + "gotointerwiki-external": "Napuštate projekt {{SITENAME}} da biste posjetili zasebno mrežno mjesto [[$2]].\n\n[$1 Nastavljate na $1]", + "undelete-cantedit": "Ne možete vratiti ovu stranicu jer Vam nije dozvoljeno da je uređujete.", + "undelete-cantcreate": "Ne možete vratiti stranicu jer ne postoji stranica s tim nazivom i nije Vam dozvoljeno da je napravite.", + "pagedata-title": "Podaci o stranici", + "pagedata-text": "Stranica pruža posrednik za podaci za stranice. Navedite naslov stranice u URL-u pomoću sintakse podstranice.\n* Prebacivanje sadržaja temelji se na zaglavlju Prihvati vašeg klijenta. To znači da će podaci stranice biti stavljeni u formatu koji preferira vaš klijent.", + "pagedata-not-acceptable": "Nisam našao odgovarajući format. Podržane MIME-vrste: $1", + "pagedata-bad-title": "Nevalidan naslov: $1.", + "unregistered-user-config": "Iz bezbednosnih razloga JavaScript, CSS i JSON korisničke podstranice ne mogu biti učitane za neregistrovane korisnike.", + "passwordpolicies": "Pravila za lozinke", + "passwordpolicies-summary": "Ovo je popis djelotvornih pravila za zaporke za korisničke grupe određene na ovom wikiju.", + "passwordpolicies-group": "Grupa", + "passwordpolicies-policies": "Pravila", + "passwordpolicies-policy-minimalpasswordlength": "Lozinka mora da ima najmanje $1 {{PLURAL:$1|znak|znaka|znakova}}", + "passwordpolicies-policy-minimumpasswordlengthtologin": "Lozinka mora da ima najmanje $1 {{PLURAL:$1|znak|znaka|znakova}} da bi ste mogli da se prijavite", + "passwordpolicies-policy-passwordcannotmatchusername": "Lozinka ne može biti ista što i korisničko ime", + "passwordpolicies-policy-passwordcannotmatchblacklist": "Lozinka ne smije biti iz onih na crnom spisku", + "passwordpolicies-policy-maximalpasswordlength": "Lozinka ne mora biti više od $1 {{PLURAL:$1|znaka|znakova}}", + "passwordpolicies-policy-passwordcannotbepopular": "Lozinka ne može da bude {{PLURAL:$1|popularna|iz spiska $1 popularnih lozinki}}", + "passwordpolicies-policy-passwordnotinlargeblacklist": "Lozinka ne može biti na listi 100.000 najčešće korišćenih lozinki.", + "passwordpolicies-policyflag-forcechange": "mora se promjeniti pri prijavi", + "passwordpolicies-policyflag-suggestchangeonlogin": "predloži izmjenu pri prijavi", + "easydeflate-invaliddeflate": "Sadržaj nije ispravno pročišćen", + "unprotected-js": "JavaScript ne može da se učita sa nezaštićenih stranica iz bezbednosnih razloga. Samo napravite JavaScript u imenskom prostoru MediaWiki: ili kao korisničku podstranicu" } diff --git a/languages/i18n/sk.json b/languages/i18n/sk.json index e825d4b778..ae38bab099 100644 --- a/languages/i18n/sk.json +++ b/languages/i18n/sk.json @@ -2112,7 +2112,6 @@ "revertpage": "Posledné úpravy používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) vrátené; bola obnovená posledná úprava $1", "revertpage-nouser": "Vrátené úpravy od skrytého používateľa na poslednú revíziu od {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Úpravy $1 vrátené; obnovená posledná verzia od $2.", - "rollback-success-notify": "Úpravy používateľa $1 boli vrátené;\nobnovená posledná revízia od používateľa $2. [$3 Zobraziť zmeny]", "sessionfailure-title": "Chyba relácie", "sessionfailure": "Zdá sa, že je problém s vašou prihlasovacou reláciou;\ntáto akcia bola zrušená ako prevencia proti zneužitiu relácie (session).\nProsím, stlačte \"naspäť\", obnovte stránku, z ktorej ste sa sem dostali, a skúste to znova.", "changecontentmodel": "Zmeniť model obsahu stránky", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index d93d7d28d8..adf869b2ec 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -2271,7 +2271,6 @@ "revertpage": "vrnitev sprememb uporabnika [[Special:Contributions/$2|$2]] ([[User talk:$2|pogovor]]) na zadnje urejanje uporabnika [[User:$1|$1]]", "revertpage-nouser": "vrnitev sprememb skritega uporabnika na zadnjo redakcijo {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Razveljavljene spremembe {{GENDER:$3|uporabnika|uporabnice}} $1;\nvrnjeno na urejanje {{GENDER:$4|uporabnika|uporabnice}} $2.", - "rollback-success-notify": "Povrnili smo urejanja $1;\nspremenjeno nazaj na zadnjo redakcijo $2. [$3 Prikaži spremembe]", "sessionfailure-title": "Neuspeh seje", "sessionfailure": "Zdi se, da z vašo sejo prijave obstaja težava;\nto dejanje smo preklicali, da bi preprečili morebitno ugrabitev seje. Prosimo, ponovno potrdite obrazec.", "changecontentmodel": "Spremeni model vsebine strani", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index 2bfc929158..b015010a2d 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -2268,7 +2268,6 @@ "revertpage": "Враћене измене {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]", "revertpage-nouser": "Враћене измене скривеног корисника на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]", "rollback-success": "Враћене измене {{GENDER:$1|корисника|кориснице}} {{GENDER:$3|$1}} на последњу измену {{GENDER:$2|корисника|кориснице}} {{GENDER:$4|$2}}.", - "rollback-success-notify": "Враћене измене корисника $1;\nвраћено на последњу измену корисника $2. [$3 Прикажи промене]", "sessionfailure-title": "Сесија је окончана", "sessionfailure": "Изгледа да постоји проблем с вашом сесијом;\nова радња је отказана да би се избегла злоупотреба.\nМолимо, поново пошаљите образац.", "changecontentmodel": "Промена модела садржаја странице", diff --git a/languages/i18n/sr-el.json b/languages/i18n/sr-el.json index f089ca0157..889c449da3 100644 --- a/languages/i18n/sr-el.json +++ b/languages/i18n/sr-el.json @@ -2261,7 +2261,6 @@ "revertpage": "Vraćene izmene {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]", "revertpage-nouser": "Vraćene izmene skrivenog korisnika na poslednju izmenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]", "rollback-success": "Vraćene izmene {{GENDER:$1|korisnika|korisnice}} {{GENDER:$3|$1}} na poslednju izmenu {{GENDER:$2|korisnika|korisnice}} {{GENDER:$4|$2}}.", - "rollback-success-notify": "Vraćene izmene korisnika $1;\nvraćeno na poslednju izmenu korisnika $2. [$3 Prikaži promene]", "sessionfailure-title": "Sesija je okončana", "sessionfailure": "Izgleda da postoji problem s vašom sesijom;\nova radnja je otkazana da bi se izbegla zloupotreba.\nMolimo, ponovo pošaljite obrazac.", "changecontentmodel": "Promena modela sadržaja stranice", diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json index aca767d019..e87f2ea58e 100644 --- a/languages/i18n/sv.json +++ b/languages/i18n/sv.json @@ -127,6 +127,7 @@ "tog-norollbackdiff": "Visa inte diff efter tillbakarullning", "tog-useeditwarning": "Varna mig om jag lämnar en redigeringssida med osparade ändringar", "tog-prefershttps": "Använd alltid en säker anslutning medan jag är inloggad", + "tog-showrollbackconfirmation": "Visa en bekräftelsedialog när man klickar på en tillbakarullningslänk", "underline-always": "Alltid", "underline-never": "Aldrig", "underline-default": "Webbläsarens eller utseendets standardinställning", @@ -2335,7 +2336,6 @@ "revertpage": "Återställde redigeringar av [[Special:Contributions/$2|$2]] ([[User talk:$2|användardiskussion]]) till senaste versionen av [[User:$1|$1]]", "revertpage-nouser": "Återställde redigeringar av en dold användare till den senaste versionen av {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Återställde ändringar av {{GENDER:$3|$1}};\nändrade tillbaka till senaste versionen av {{GENDER:$4|$2}}.", - "rollback-success-notify": "Återställde ändringar av $1;\nändrade tillbaka till senaste sidversion av $2. [$3 Visa ändringar]", "sessionfailure-title": "Sessionsfel", "sessionfailure": "Någonting med din inloggningssession är på tok;\ndin begärda åtgärd har avbrutits för att förhindra att någon kapar din session.\nSkicka formuläret igen.", "changecontentmodel": "Ändra innehållsmodell för en sida", diff --git a/languages/i18n/te.json b/languages/i18n/te.json index c79eead299..57097131f3 100644 --- a/languages/i18n/te.json +++ b/languages/i18n/te.json @@ -2142,7 +2142,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|చర్చ]]) చేసిన మార్పులను [[User:$1|$1]] చివరి కూర్పు వరకు తిప్పికొట్టారు.", "revertpage-nouser": "దాగి ఉన్న వాడుకరి చేసిన మార్పులను [[User:$1|$1]] చివరి కూర్పు వరకు తిప్పికొట్టారు", "rollback-success": "{{GENDER:$3|$1}} చేసిన దిద్దుబాట్లను వెనక్కు తీసుకెళ్ళారు; తిరిగి {{GENDER:$4|$2}} చేసిన చివరి కూర్పుకు మార్చారు.", - "rollback-success-notify": "$1 చేసిన దిద్దుబాట్లను వెనక్కు తీసుకెళ్ళారు;\nతిరిగి $2 చేసిన చివరి కూర్పుకు మార్చారు. [$3 మార్పులు చూపించు]", "sessionfailure-title": "సెషను వైఫల్యం", "sessionfailure": "మీ లాగిన్ సెషనుతో ఏదో సమస్య ఉన్నట్లుంది;\nసెషను హైజాకు కాకుండా ఈ చర్యను రద్దు చేసాం.\nఫారమును తిరిగి సమర్పించండి.", "changecontentmodel": "పేజీ కంటెంటు మోడలును మార్చు", diff --git a/languages/i18n/tg-cyrl.json b/languages/i18n/tg-cyrl.json index d58e1e065d..04421499de 100644 --- a/languages/i18n/tg-cyrl.json +++ b/languages/i18n/tg-cyrl.json @@ -1300,7 +1300,6 @@ "editcomment": "Хулосаи вироиш ин буд: $1.", "revertpage": "Вироиши [[Special:Contributions/$2|$2]] ([[User talk:$2|Баҳс]]) вогардонида шуд ба охирин тағйире, ки [[User:$1|$1]] анҷом дода буд", "rollback-success": "Вироишҳои $1 вогардонӣ шуд; саҳифа ба вироиши $2 баргардонида шуд.", - "rollback-success-notify": "Вироишоти $1 вогардонида шуд ба охирин вироише, ки $2 анҷом дода буд. [$3 Намоиши тавофут]", "sessionfailure": "Ба назар мерасад, мушкилие дар мавриди нишасти корбарии шумо вуҷуд дорад; амали дархостшуда ба унвони иқдоми пешгирона дар баробари рабуда шудани иттилооти нишасти корбарӣ, лағв шуд. Лутфан тугмаи \"бозгашт\"-ро дар мурургари худ пахш кунед ва саҳифае, ки аз он инҷо расидаед муҷаддадан фарохонӣ кунед, сипас муҷаддадан боз саъй кунед.", "protectlogpage": "Гузориши муҳофизат", "protectlogtext": "Дар зер феҳристи қуфл карданҳо ва аз қуфл озод шуданҳо омада аст. Барои иттилооти бештар ба [[Special:ProtectedPages|феҳристи саҳифаҳои муҳофизатшуда]] нигаред.", diff --git a/languages/i18n/th.json b/languages/i18n/th.json index 70ef7bf171..252f7f52b8 100644 --- a/languages/i18n/th.json +++ b/languages/i18n/th.json @@ -2202,7 +2202,6 @@ "revertpage": "ย้อนการแก้ไขโดย [[Special:Contributions/$2|$2]] ([[User talk:$2|คุย]]) ไปยังรุ่นแก้ไขล่าสุดโดย [[User:$1|$1]]", "revertpage-nouser": "ย้อนการแก้ไขโดยผู้ใช้ไม่ระบุชื่อไปยังรุ่นล่าสุดโดย {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "ย้อนการแก้ไขโดย $1; \nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2", - "rollback-success-notify": "ย้อนการแก้ไขโดย $1;\nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2 [$3 แสดงการเปลี่ยนแปลง]", "sessionfailure-title": "เซสชันล้มเหลว", "sessionfailure": "ดูเหมือนมีปัญหากับเซสชันการเข้าสู่ระบบของคุณ\nการกระทำนี้ถูกยกเลิกเพื่อเป็นการป้องกันการลักลอบเซสชันไว้ก่อน \nกรุณากรอกแบบฟอร์มใหม่อีกครั้ง", "changecontentmodel-title-label": "ชื่อหน้า:", diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json index ef4f285cac..fad362d280 100644 --- a/languages/i18n/uk.json +++ b/languages/i18n/uk.json @@ -2348,7 +2348,6 @@ "revertpage": "Відкинуто редагування [[Special:Contributions/$2|$2]] ([[User talk:$2|обговорення]]) до зробленого [[User:$1|$1]]", "revertpage-nouser": "Відкинуто редагування прихованого користувача до останньої версії, зробленої {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Відкинуті редагування {{GENDER:$3|користувача|користувачки}} $1; повернення до версії {{GENDER:$4|користувача|користувачки}} $2.", - "rollback-success-notify": "Відкинуті редагування користувача $1; \nповернено до останньої версії користувача $2. [$3 Показати зміни]", "sessionfailure-title": "Помилка сеансу", "sessionfailure": "Здається, виникли проблеми з поточним сеансом роботи;\nцю дію скасовано, щоб запобігти «захопленню сеансу».\nБудь ласка, надішліть форму ще раз.", "changecontentmodel": "Змінити модель вмісту сторінки", diff --git a/languages/i18n/ur.json b/languages/i18n/ur.json index 81bbff4dd9..611501fad5 100644 --- a/languages/i18n/ur.json +++ b/languages/i18n/ur.json @@ -2201,7 +2201,6 @@ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|تبادلۂ خیال]]) کی ترامیم [[User:$1|$1]] کی گذشتہ ترمیم کی جانب واپس پھیر دی گئیں۔", "revertpage-nouser": "(حذف شدہ صارف نام) کی ترامیم {{GENDER:$1|[[User:$1|$1]]}} کی گذشتہ ترمیم کی جانب واپس پھیر دی گئیں", "rollback-success": "{{GENDER:$3|$1}} کی ترامیم واپس پھیر دی گئیں؛\nصفحہ واپس {{GENDER:$4|$2}} کی آخری ترمیم کی جانب منتقل کر دیا گیا۔", - "rollback-success-notify": "$1 کی ترامیم واپس پھیر دی گئیں؛\nصفحہ واپس $2 کی آخری ترمیم کی جانب منتقل کر دیا گیا۔ [$3 تبدیلیاں دکھائیں]", "sessionfailure-title": "نشست میں خامی", "sessionfailure": "معلوم ہوتا ہے کہ آپ کی لاگ ان نشست میں کوئی مسئلہ درپیش ہے؛\nاس صورت میں نشست کے اغوا کا خدشہ ہوتا ہے، چنانچہ پیش بندی کے طور پر آپ کے اقدام کو مسترد کر دیا گیا ہے۔\nبراہ کرم دوبارہ کوشش کریں۔", "changecontentmodel": "صفحہ کے مواد کے ماڈل میں تبدیلی کریں", diff --git a/languages/i18n/vi.json b/languages/i18n/vi.json index 823f589f5f..81920347f1 100644 --- a/languages/i18n/vi.json +++ b/languages/i18n/vi.json @@ -2298,7 +2298,6 @@ "revertpage": "Đã lùi lại sửa đổi của [[Special:Contributions/$2|$2]] ([[User talk:$2|Thảo luận]]) quay về phiên bản cuối của [[User:$1|$1]]", "revertpage-nouser": "Đã lùi lại sửa đổi của người dùng ẩn quay về phiên bản cuối của {{GENDER:$1}}[[User:$1|$1]]", "rollback-success": "Đã hủy sửa đổi của {{GENDER:$3}}$1;\nquay về phiên bản cuối của {{GENDER:$4}}$2.", - "rollback-success-notify": "Đã hủy sửa đổi của $1;\nquay về phiên bản cuối của $2. [$3 Xem thay đổi]", "sessionfailure-title": "Phiên thất bại", "sessionfailure": "Dường như có trục trặc với phiên đăng nhập của bạn; thao tác này đã bị hủy để tránh việc cướp quyền đăng nhập. Xin hãy gửi lại biểu mẫu.", "changecontentmodel": "Thay đổi kiểu nội dung của một trang", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index bb144ad5da..2f15b07477 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -2367,7 +2367,6 @@ "revertpage": "恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后版本", "revertpage-nouser": "恢复隐藏用户的编辑至{{GENDER:$1|[[User:$1|$1]]}}的最后版本", "rollback-success": "已恢复{{GENDER:$3|$1}}的编辑;更改回{{GENDER:$4|$2}}的最后版本。", - "rollback-success-notify": "已回退$1的编辑,更改回$2的最后版本。[$3 显示更改]", "sessionfailure-title": "会话无效", "sessionfailure": "似乎您的登录会话有问题;为了防止会话劫持,这个操作已经被取消。请重新提交表单。", "changecontentmodel": "更改一个页面的内容模型", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index 79b07c1692..5e2cb469a9 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -2343,6 +2343,9 @@ "deleting-backlinks-warning": "警告:您正要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連結或引用。", "deleting-subpages-warning": "警告:您要刪除的頁面有[[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|$1個子頁面|51=超過50個子頁面}}]]。", "rollback": "復原編輯", + "rollback-confirmation-confirm": "回退{{PLURAL:$1|0=這些編輯|1個編輯|$1個編輯}}?", + "rollback-confirmation-yes": "回退", + "rollback-confirmation-no": "取消", "rollbacklink": "回退", "rollbacklinkcount": "還原 $1 次編輯", "rollbacklinkcount-morethan": "回退超過 $1 次{{PLURAL:$1|編輯}}", @@ -2355,7 +2358,6 @@ "revertpage": "已還原[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])的編輯為最後由[[User:$1|$1]]所修訂的版本", "revertpage-nouser": "已還原隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本", "rollback-success": "已還原 {{GENDER:$3|$1}} 所做的編輯;\n變更回由 {{GENDER:$4|$2}} 修訂的最後一個版本。", - "rollback-success-notify": "已還原 $1 所做的編輯;\n變更回由 $2 修訂的最後一個版本。[$3 顯示變更]", "sessionfailure-title": "連線階段失敗", "sessionfailure": "您的登入連線階段似乎有問題,為了預防連線階段受到劫持攻擊,此動作已經被取消。請重新提交表單。", "changecontentmodel": "變更頁面的內容模型", @@ -3136,6 +3138,7 @@ "confirm-unwatch-top": "從您的監視清單中移除此頁面?", "confirm-rollback-button": "確定", "confirm-rollback-top": "還原編輯到此頁面?", + "confirm-rollback-bottom": "此操作會立即回退對於此頁面的所選更改。", "confirm-mcrrestore-title": "還原修訂", "confirm-mcrundo-title": "還原變更", "mcrundofailed": "還原失敗", diff --git a/maintenance/dumpTextPass.php b/maintenance/dumpTextPass.php index 0479a91dd2..f515df70f4 100644 --- a/maintenance/dumpTextPass.php +++ b/maintenance/dumpTextPass.php @@ -30,7 +30,6 @@ require_once __DIR__ . '/../includes/export/WikiExporter.php'; use MediaWiki\MediaWikiServices; use MediaWiki\Storage\BlobAccessException; -use MediaWiki\Storage\BlobStore; use MediaWiki\Storage\SqlBlobStore; use Wikimedia\Rdbms\IMaintainableDatabase; @@ -143,7 +142,7 @@ TEXT } /** - * @return BlobStore + * @return SqlBlobStore */ private function getBlobStore() { return MediaWikiServices::getInstance()->getBlobStore(); @@ -737,16 +736,16 @@ TEXT } /** - * @param int|string $id Content address, or text row ID. + * @param int|string $address Content address, or text row ID. * @return bool|string */ - private function getTextSpawned( $id ) { + private function getTextSpawned( $address ) { Wikimedia\suppressWarnings(); if ( !$this->spawnProc ) { // First time? $this->openSpawn(); } - $text = $this->getTextSpawnedOnce( $id ); + $text = $this->getTextSpawnedOnce( $address ); Wikimedia\restoreWarnings(); return $text; @@ -814,11 +813,15 @@ TEXT } /** - * @param int|string $id Content address, or text row ID. + * @param int|string $address Content address, or text row ID. * @return bool|string */ - private function getTextSpawnedOnce( $id ) { - $ok = fwrite( $this->spawnWrite, "$id\n" ); + private function getTextSpawnedOnce( $address ) { + if ( is_int( $address ) || intval( $address ) ) { + $address = SqlBlobStore::makeAddressFromTextId( (int)$address ); + } + + $ok = fwrite( $this->spawnWrite, "$address\n" ); // $this->progress( ">> $id" ); if ( !$ok ) { return false; @@ -830,26 +833,17 @@ TEXT return false; } - // check that the text id they are sending is the one we asked for + // check that the text address they are sending is the one we asked for // this avoids out of sync revision text errors we have encountered in the past $newAddress = fgets( $this->spawnRead ); if ( $newAddress === false ) { return false; } if ( strpos( $newAddress, ':' ) === false ) { - $newId = intval( $newAddress ); - if ( $newId === false ) { - return false; - } - } else { - try { - $newAddressFields = SqlBlobStore::splitBlobAddress( $newAddress ); - $newId = $newAddressFields[ 1 ]; - } catch ( InvalidArgumentException $ex ) { - return false; - } + $newAddress = SqlBlobStore::makeAddressFromTextId( intval( $newAddress ) ); } - if ( $id != intval( $newId ) ) { + + if ( $newAddress !== $address ) { return false; } diff --git a/maintenance/includes/BackupDumper.php b/maintenance/includes/BackupDumper.php index 45786d8da0..a9e757e7b4 100644 --- a/maintenance/includes/BackupDumper.php +++ b/maintenance/includes/BackupDumper.php @@ -51,6 +51,7 @@ abstract class BackupDumper extends Maintenance { protected $reportingInterval = 100; protected $pageCount = 0; protected $revCount = 0; + protected $schemaVersion = null; // use default protected $server = null; // use default protected $sink = null; // Output filters protected $lastTime = 0; @@ -101,6 +102,8 @@ abstract class BackupDumper extends Maintenance { '[:]. s: latest, notalk, namespace', false, true, false, true ); $this->addOption( 'report', 'Report position and speed after every n pages processed. ' . 'Default: 100.', false, true ); + $this->addOption( 'schema-version', 'Schema version to use for output. ' . + 'Default: ' . WikiExporter::schemaVersion(), false, true ); $this->addOption( 'server', 'Force reading from MySQL server', false, true ); $this->addOption( '7ziplevel', '7zip compression level for all 7zip outputs. Used for ' . '-mx option to 7za command.', false, true ); @@ -155,6 +158,8 @@ abstract class BackupDumper extends Maintenance { $sink = null; $sinks = []; + $this->schemaVersion = WikiExporter::schemaVersion(); + $options = $this->orderedOptions; foreach ( $options as $arg ) { $opt = $arg[0]; @@ -215,6 +220,15 @@ abstract class BackupDumper extends Maintenance { unset( $sink ); $sink = $filter; + break; + case 'schema-version': + if ( !in_array( $param, XmlDumpWriter::$supportedSchemas ) ) { + $this->fatalError( + "Unsupported schema version $param. Supported versions: " . + implode( ', ', XmlDumpWriter::$supportedSchemas ) + ); + } + $this->schemaVersion = $param; break; } } @@ -250,6 +264,7 @@ abstract class BackupDumper extends Maintenance { $db = $this->backupDb(); $exporter = new WikiExporter( $db, $history, $text ); + $exporter->setSchemaVersion( $this->schemaVersion ); $exporter->dumpUploads = $this->dumpUploads; $exporter->dumpUploadFileContents = $this->dumpUploadFileContents; diff --git a/maintenance/includes/MigrateActors.php b/maintenance/includes/MigrateActors.php index ef8756f357..d9c207241f 100644 --- a/maintenance/includes/MigrateActors.php +++ b/maintenance/includes/MigrateActors.php @@ -32,9 +32,13 @@ require_once __DIR__ . '/../Maintenance.php'; * @ingroup Maintenance */ class MigrateActors extends LoggedUpdateMaintenance { + + protected $tables = null; + public function __construct() { parent::__construct(); $this->addDescription( 'Migrates actors from pre-1.31 columns to the \'actor\' table' ); + $this->addOption( 'tables', 'List of tables to process, comma-separated', false, true ); $this->setBatchSize( 100 ); } @@ -42,6 +46,10 @@ class MigrateActors extends LoggedUpdateMaintenance { return __CLASS__; } + protected function doTable( $table ) { + return $this->tables === null || in_array( $table, $this->tables, true ); + } + protected function doDBUpdates() { global $wgActorTableSchemaMigrationStage; @@ -52,28 +60,51 @@ class MigrateActors extends LoggedUpdateMaintenance { return false; } - $this->output( "Creating actor entries for all registered users\n" ); - $end = 0; - $dbw = $this->getDB( DB_MASTER ); - $max = $dbw->selectField( 'user', 'MAX(user_id)', '', __METHOD__ ); - $count = 0; - while ( $end < $max ) { - $start = $end + 1; - $end = min( $start + $this->mBatchSize, $max ); - $this->output( "... $start - $end\n" ); - $dbw->insertSelect( - 'actor', - 'user', - [ 'actor_user' => 'user_id', 'actor_name' => 'user_name' ], - [ "user_id >= $start", "user_id <= $end" ], + $tables = $this->getOption( 'tables' ); + if ( $tables !== null ) { + $this->tables = explode( ',', $tables ); + } + + if ( $this->doTable( 'user' ) ) { + $this->output( "Creating actor entries for all registered users\n" ); + $end = 0; + $dbw = $this->getDB( DB_MASTER ); + $max = $dbw->selectField( 'user', 'MAX(user_id)', '', __METHOD__ ); + $count = 0; + while ( $end < $max ) { + $start = $end + 1; + $end = min( $start + $this->mBatchSize, $max ); + $this->output( "... $start - $end\n" ); + $dbw->insertSelect( + 'actor', + 'user', + [ 'actor_user' => 'user_id', 'actor_name' => 'user_name' ], + [ "user_id >= $start", "user_id <= $end" ], + __METHOD__, + [ 'IGNORE' ], + [ 'ORDER BY' => [ 'user_id' ] ] + ); + $count += $dbw->affectedRows(); + wfWaitForSlaves(); + } + $this->output( "Completed actor creation, added $count new actor(s)\n" ); + } else { + $this->output( "Checking that actors exist for all registered users\n" ); + $dbr = $this->getDB( DB_REPLICA, [ 'vslow' ] ); + $anyMissing = $dbr->selectField( + [ 'user', 'actor' ], + '1', + [ 'actor_id' => null ], __METHOD__, - [ 'IGNORE' ], - [ 'ORDER BY' => [ 'user_id' ] ] + [ 'LIMIT 1' ], + [ 'actor' => [ 'LEFT JOIN', 'actor_user = user_id' ] ] ); - $count += $dbw->affectedRows(); - wfWaitForSlaves(); + if ( $anyMissing ) { + $this->error( 'Some users lack actors; run without --tables or include `user` in --tables.' ); + return false; + } + $this->output( "Ok, continuing.\n" ); } - $this->output( "Completed actor creation, added $count new actor(s)\n" ); $errors = 0; $errors += $this->migrateToTemp( @@ -229,6 +260,11 @@ class MigrateActors extends LoggedUpdateMaintenance { * @return int Number of errors */ protected function migrate( $table, $primaryKey, $userField, $nameField, $actorField ) { + if ( !$this->doTable( $table ) ) { + $this->output( "Skipping $table, not included in --tables\n" ); + return 0; + } + $complainedAboutUsers = []; $primaryKey = (array)$primaryKey; @@ -325,6 +361,11 @@ class MigrateActors extends LoggedUpdateMaintenance { protected function migrateToTemp( $table, $primaryKey, $extra, $userField, $nameField, $newPrimaryKey, $actorField ) { + if ( !$this->doTable( $table ) ) { + $this->output( "Skipping $table, not included in --tables\n" ); + return 0; + } + $complainedAboutUsers = []; $newTable = $table . '_actor_temp'; @@ -413,6 +454,11 @@ class MigrateActors extends LoggedUpdateMaintenance { * @return int Number of errors */ protected function migrateLogSearch() { + if ( !$this->doTable( 'log_search' ) ) { + $this->output( "Skipping log_search, not included in --tables\n" ); + return 0; + } + $complainedAboutUsers = []; $primaryKey = [ 'ls_value', 'ls_log_id' ]; @@ -424,6 +470,25 @@ class MigrateActors extends LoggedUpdateMaintenance { $countActors = 0; $countErrors = 0; + $anyBad = $dbw->selectField( + 'log_search', + 1, + [ 'ls_field' => 'target_author_actor', 'ls_value' => '' ], + __METHOD__, + [ 'LIMIT' => 1 ] + ); + if ( $anyBad ) { + $this->output( "... Deleting bogus rows due to T21552\n" ); + $dbw->delete( + 'log_search', + [ 'ls_field' => 'target_author_actor', 'ls_value' => '' ], + __METHOD__ + ); + $ct = $dbw->affectedRows(); + $this->output( "... Deleted $ct bogus row(s) from T21552\n" ); + wfWaitForSlaves(); + } + $next = '1=1'; while ( true ) { // Fetch the rows needing update diff --git a/maintenance/resources/foreign-resources.yaml b/maintenance/resources/foreign-resources.yaml index 37768cce39..3ecd12e8a3 100644 --- a/maintenance/resources/foreign-resources.yaml +++ b/maintenance/resources/foreign-resources.yaml @@ -90,6 +90,36 @@ jquery.cookie: src: https://raw.githubusercontent.com/carhartl/jquery-cookie/v1.3.1/CHANGELOG.md integrity: sha384-SQOHhLc7PHxHDQpGE/zv9XfXKL0A7OBu8kuyVDnHVp+zSoWyRw4xUJ+LSm5ql4kS +jquery.form: + type: file + src: https://raw.githubusercontent.com/jquery-form/form/ff80d9ddf4/jquery.form.js + integrity: sha384-h4G2CrcSbixzMvrrK259cNBYaL/vS1D4+KdUN9NJDzQnTU1bQ6Avluget+Id13M7 + dest: jquery.form.js + +jquery.fullscreen: + type: file + src: https://raw.githubusercontent.com/theopolisme/jquery-fullscreen/v2.1.0/jquery.fullscreen.js + integrity: sha384-G4KPs2d99tgcsyUnJ3eeZ1r2hEKDwZfc4+/xowL/LIemq2VVwEE8HpVAWt4WYNLR + dest: jquery.fullscreen.js + +jquery.hoverIntent: + type: file + src: https://raw.githubusercontent.com/briancherne/jquery-hoverIntent/823603fdac/jquery.hoverIntent.js + integrity: sha384-lca0haN0hqFGGh2aYUhtAgX9dhVHfQnTADH4svDeM6gcXnL7aFGeAi1NYwipDMyS + dest: jquery.hoverIntent.js + +jquery.jStorage: + type: file + src: https://raw.githubusercontent.com/andris9/jStorage/v0.4.12/jstorage.js + integrity: sha384-geMeN8k803kPp6cqRL4VNfuSM1L8DcbKRk0St/KHJzxgpX9S0y9FA6HxA/JgucrJ + dest: jstorage.js + +jquery.throttle-debounce: + type: file + src: https://raw.githubusercontent.com/cowboy/jquery-throttle-debounce/v1.1/jquery.ba-throttle-debounce.js + integrity: sha384-ULOy4DbAghrCqRcrTJLXOY9e4gDpWh0BeEf6xMSL0VtNudXWggcb6AmrVrl4KDAP + dest: jquery.ba-throttle-debounce.js + moment: type: tar src: https://codeload.github.com/moment/moment/tar.gz/2.24.0 diff --git a/resources/Resources.php b/resources/Resources.php index 86bca6c6c0..5e5f3087f3 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -223,10 +223,10 @@ return [ 'targets' => [ 'desktop', 'mobile' ], ], 'jquery.form' => [ - 'scripts' => 'resources/lib/jquery.form.js', + 'scripts' => 'resources/lib/jquery.form/jquery.form.js', ], 'jquery.fullscreen' => [ - 'scripts' => 'resources/lib/jquery.fullscreen.js', + 'scripts' => 'resources/lib/jquery.fullscreen/jquery.fullscreen.js', ], 'jquery.getAttrs' => [ 'scripts' => 'resources/src/jquery/jquery.getAttrs.js', @@ -240,7 +240,7 @@ return [ 'targets' => [ 'desktop', 'mobile' ], ], 'jquery.hoverIntent' => [ - 'scripts' => 'resources/lib/jquery.hoverIntent.js', + 'scripts' => 'resources/lib/jquery.hoverIntent/jquery.hoverIntent.js', ], 'jquery.i18n' => [ 'scripts' => [ @@ -299,7 +299,7 @@ return [ ], 'jquery.jStorage' => [ 'deprecated' => 'Please use "mediawiki.storage" instead.', - 'scripts' => 'resources/lib/jquery.jStorage.js', + 'scripts' => 'resources/lib/jquery.jStorage/jstorage.js', ], 'jquery.suggestions' => [ 'targets' => [ 'desktop', 'mobile' ], @@ -332,7 +332,7 @@ return [ 'jquery.throttle-debounce' => [ 'deprecated' => 'Please use OO.ui.throttle/debounce instead. See ' . 'https://phabricator.wikimedia.org/T213426', - 'scripts' => 'resources/lib/jquery.ba-throttle-debounce.js', + 'scripts' => 'resources/lib/jquery.throttle-debounce/jquery.ba-throttle-debounce.js', 'targets' => [ 'desktop', 'mobile' ], ], @@ -1776,6 +1776,17 @@ return [ 'actioncomplete', ], ], + 'mediawiki.page.rollback.confirmation' => [ + 'scripts' => 'resources/src/mediawiki.rollback.confirmation.js', + 'dependencies' => [ + 'jquery.confirmable' + ], + 'messages' => [ + 'rollback-confirmation-confirm', + 'rollback-confirmation-yes', + 'rollback-confirmation-no', + ], + ], 'mediawiki.page.image.pagination' => [ 'scripts' => 'resources/src/mediawiki.page.image.pagination.js', 'dependencies' => [ diff --git a/resources/lib/jquery.ba-throttle-debounce.js b/resources/lib/jquery.ba-throttle-debounce.js deleted file mode 100644 index fa30bdfffe..0000000000 --- a/resources/lib/jquery.ba-throttle-debounce.js +++ /dev/null @@ -1,252 +0,0 @@ -/*! - * jQuery throttle / debounce - v1.1 - 3/7/2010 - * http://benalman.com/projects/jquery-throttle-debounce-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ - -// Script: jQuery throttle / debounce: Sometimes, less is more! -// -// *Version: 1.1, Last updated: 3/7/2010* -// -// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/ -// GitHub - http://github.com/cowboy/jquery-throttle-debounce/ -// Source - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js -// (Minified) - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb) -// -// About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, -// Dual licensed under the MIT and GPL licenses. -// http://benalman.com/about/license/ -// -// About: Examples -// -// These working examples, complete with fully commented code, illustrate a few -// ways in which this plugin can be used. -// -// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/ -// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/ -// -// About: Support and Testing -// -// Information about what version or versions of jQuery this plugin has been -// tested with, what browsers it has been tested in, and where the unit tests -// reside (so you can test it yourself). -// -// jQuery Versions - none, 1.3.2, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1. -// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/ -// -// About: Release History -// -// 1.1 - (3/7/2010) Fixed a bug in where trailing callbacks -// executed later than they should. Reworked a fair amount of internal -// logic as well. -// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over -// from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the -// no_trailing throttle parameter and debounce functionality. -// -// Topic: Note for non-jQuery users -// -// jQuery isn't actually required for this plugin, because nothing internal -// uses any jQuery methods or properties. jQuery is just used as a namespace -// under which these methods can exist. -// -// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist -// when this plugin is loaded, the method described below will be created in -// the `Cowboy` namespace. Usage will be exactly the same, but instead of -// $.method() or jQuery.method(), you'll need to use Cowboy.method(). - -(function(window,undefined){ - '$:nomunge'; // Used by YUI compressor. - - // Since jQuery really isn't required for this plugin, use `jQuery` as the - // namespace only if it already exists, otherwise use the `Cowboy` namespace, - // creating it if necessary. - var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ), - - // Internal method reference. - jq_throttle; - - // Method: jQuery.throttle - // - // Throttle execution of a function. Especially useful for rate limiting - // execution of handlers on events like resize and scroll. If you want to - // rate-limit execution of a function to a single time, see the - // method. - // - // In this visualization, | is a throttled-function call and X is the actual - // callback execution: - // - // > Throttled with `no_trailing` specified as false or unspecified: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X X X X X X X X X X X - // > - // > Throttled with `no_trailing` specified as true: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X X X X X X X X X - // - // Usage: - // - // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback ); - // > - // > jQuery('selector').bind( 'someevent', throttled ); - // > jQuery('selector').unbind( 'someevent', throttled ); - // - // This also works in jQuery 1.4+: - // - // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) ); - // > jQuery('selector').unbind( 'someevent', callback ); - // - // Arguments: - // - // delay - (Number) A zero-or-greater delay in milliseconds. For event - // callbacks, values around 100 or 250 (or even higher) are most useful. - // no_trailing - (Boolean) Optional, defaults to false. If no_trailing is - // true, callback will only execute every `delay` milliseconds while the - // throttled-function is being called. If no_trailing is false or - // unspecified, callback will be executed one final time after the last - // throttled-function call. (After the throttled-function has not been - // called for `delay` milliseconds, the internal counter is reset) - // callback - (Function) A function to be executed after delay milliseconds. - // The `this` context and all arguments are passed through, as-is, to - // `callback` when the throttled-function is executed. - // - // Returns: - // - // (Function) A new, throttled, function. - - $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) { - // After wrapper has stopped being called, this timeout ensures that - // `callback` is executed at the proper times in `throttle` and `end` - // debounce modes. - var timeout_id, - - // Keep track of the last time `callback` was executed. - last_exec = 0; - - // `no_trailing` defaults to falsy. - if ( typeof no_trailing !== 'boolean' ) { - debounce_mode = callback; - callback = no_trailing; - no_trailing = undefined; - } - - // The `wrapper` function encapsulates all of the throttling / debouncing - // functionality and when executed will limit the rate at which `callback` - // is executed. - function wrapper() { - var that = this, - elapsed = +new Date() - last_exec, - args = arguments; - - // Execute `callback` and update the `last_exec` timestamp. - function exec() { - last_exec = +new Date(); - callback.apply( that, args ); - }; - - // If `debounce_mode` is true (at_begin) this is used to clear the flag - // to allow future `callback` executions. - function clear() { - timeout_id = undefined; - }; - - if ( debounce_mode && !timeout_id ) { - // Since `wrapper` is being called for the first time and - // `debounce_mode` is true (at_begin), execute `callback`. - exec(); - } - - // Clear any existing timeout. - timeout_id && clearTimeout( timeout_id ); - - if ( debounce_mode === undefined && elapsed > delay ) { - // In throttle mode, if `delay` time has been exceeded, execute - // `callback`. - exec(); - - } else if ( no_trailing !== true ) { - // In trailing throttle mode, since `delay` time has not been - // exceeded, schedule `callback` to execute `delay` ms after most - // recent execution. - // - // If `debounce_mode` is true (at_begin), schedule `clear` to execute - // after `delay` ms. - // - // If `debounce_mode` is false (at end), schedule `callback` to - // execute after `delay` ms. - timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay ); - } - }; - - // Set the guid of `wrapper` function to the same of original callback, so - // it can be removed in jQuery 1.4+ .unbind or .die by using the original - // callback as a reference. - if ( $.guid ) { - wrapper.guid = callback.guid = callback.guid || $.guid++; - } - - // Return the wrapper function. - return wrapper; - }; - - // Method: jQuery.debounce - // - // Debounce execution of a function. Debouncing, unlike throttling, - // guarantees that a function is only executed a single time, either at the - // very beginning of a series of calls, or at the very end. If you want to - // simply rate-limit execution of a function, see the - // method. - // - // In this visualization, | is a debounced-function call and X is the actual - // callback execution: - // - // > Debounced with `at_begin` specified as false or unspecified: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X - // > - // > Debounced with `at_begin` specified as true: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X - // - // Usage: - // - // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback ); - // > - // > jQuery('selector').bind( 'someevent', debounced ); - // > jQuery('selector').unbind( 'someevent', debounced ); - // - // This also works in jQuery 1.4+: - // - // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) ); - // > jQuery('selector').unbind( 'someevent', callback ); - // - // Arguments: - // - // delay - (Number) A zero-or-greater delay in milliseconds. For event - // callbacks, values around 100 or 250 (or even higher) are most useful. - // at_begin - (Boolean) Optional, defaults to false. If at_begin is false or - // unspecified, callback will only be executed `delay` milliseconds after - // the last debounced-function call. If at_begin is true, callback will be - // executed only at the first debounced-function call. (After the - // throttled-function has not been called for `delay` milliseconds, the - // internal counter is reset) - // callback - (Function) A function to be executed after delay milliseconds. - // The `this` context and all arguments are passed through, as-is, to - // `callback` when the debounced-function is executed. - // - // Returns: - // - // (Function) A new, debounced, function. - - $.debounce = function( delay, at_begin, callback ) { - return callback === undefined - ? jq_throttle( delay, at_begin, false ) - : jq_throttle( delay, callback, at_begin !== false ); - }; - -})(this); diff --git a/resources/lib/jquery.form.js b/resources/lib/jquery.form.js deleted file mode 100644 index 13e9a55c58..0000000000 --- a/resources/lib/jquery.form.js +++ /dev/null @@ -1,1089 +0,0 @@ -/*! - * jQuery Form Plugin - * version: 3.14 (30-JUL-2012) - * @requires jQuery v1.3.2 or later - * - * Examples and documentation at: http://malsup.com/jquery/form/ - * Project repository: https://github.com/malsup/form - * Dual licensed under the MIT and GPL licenses: - * http://malsup.github.com/mit-license.txt - * http://malsup.github.com/gpl-license-v2.txt - */ -/*global ActiveXObject alert */ -;(function($) { -"use strict"; - -/* - Usage Note: - ----------- - Do not use both ajaxSubmit and ajaxForm on the same form. These - functions are mutually exclusive. Use ajaxSubmit if you want - to bind your own submit handler to the form. For example, - - $(document).ready(function() { - $('#myForm').on('submit', function(e) { - e.preventDefault(); // <-- important - $(this).ajaxSubmit({ - target: '#output' - }); - }); - }); - - Use ajaxForm when you want the plugin to manage all the event binding - for you. For example, - - $(document).ready(function() { - $('#myForm').ajaxForm({ - target: '#output' - }); - }); - - You can also use ajaxForm with delegation (requires jQuery v1.7+), so the - form does not have to exist when you invoke ajaxForm: - - $('#myForm').ajaxForm({ - delegation: true, - target: '#output' - }); - - When using ajaxForm, the ajaxSubmit function will be invoked for you - at the appropriate time. -*/ - -/** - * Feature detection - */ -var feature = {}; -feature.fileapi = $("").get(0).files !== undefined; -feature.formdata = window.FormData !== undefined; - -/** - * ajaxSubmit() provides a mechanism for immediately submitting - * an HTML form using AJAX. - */ -$.fn.ajaxSubmit = function(options) { - /*jshint scripturl:true */ - - // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) - if (!this.length) { - log('ajaxSubmit: skipping submit process - no element selected'); - return this; - } - - var method, action, url, $form = this; - - if (typeof options == 'function') { - options = { success: options }; - } - - method = this.attr('method'); - action = this.attr('action'); - url = (typeof action === 'string') ? $.trim(action) : ''; - url = url || window.location.href || ''; - if (url) { - // clean url (don't include hash vaue) - url = (url.match(/^([^#]+)/)||[])[1]; - } - - options = $.extend(true, { - url: url, - success: $.ajaxSettings.success, - type: method || 'GET', - iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' - }, options); - - // hook for manipulating the form data before it is extracted; - // convenient for use with rich editors like tinyMCE or FCKEditor - var veto = {}; - this.trigger('form-pre-serialize', [this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); - return this; - } - - // provide opportunity to alter form data before it is serialized - if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSerialize callback'); - return this; - } - - var traditional = options.traditional; - if ( traditional === undefined ) { - traditional = $.ajaxSettings.traditional; - } - - var elements = []; - var qx, a = this.formToArray(options.semantic, elements); - if (options.data) { - options.extraData = options.data; - qx = $.param(options.data, traditional); - } - - // give pre-submit callback an opportunity to abort the submit - if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSubmit callback'); - return this; - } - - // fire vetoable 'validate' event - this.trigger('form-submit-validate', [a, this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); - return this; - } - - var q = $.param(a, traditional); - if (qx) { - q = ( q ? (q + '&' + qx) : qx ); - } - if (options.type.toUpperCase() == 'GET') { - options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; - options.data = null; // data is null for 'get' - } - else { - options.data = q; // data is the query string for 'post' - } - - var callbacks = []; - if (options.resetForm) { - callbacks.push(function() { $form.resetForm(); }); - } - if (options.clearForm) { - callbacks.push(function() { $form.clearForm(options.includeHidden); }); - } - - // perform a load on the target only if dataType is not provided - if (!options.dataType && options.target) { - var oldSuccess = options.success || function(){}; - callbacks.push(function(data) { - var fn = options.replaceTarget ? 'replaceWith' : 'html'; - $(options.target)[fn](data).each(oldSuccess, arguments); - }); - } - else if (options.success) { - callbacks.push(options.success); - } - - options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg - var context = options.context || this ; // jQuery 1.4+ supports scope context - for (var i=0, max=callbacks.length; i < max; i++) { - callbacks[i].apply(context, [data, status, xhr || $form, $form]); - } - }; - - // are there files to upload? - var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113) - var hasFileInputs = fileInputs.length > 0; - var mp = 'multipart/form-data'; - var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp); - - var fileAPI = feature.fileapi && feature.formdata; - log("fileAPI :" + fileAPI); - var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI; - - // options.iframe allows user to force iframe mode - // 06-NOV-09: now defaulting to iframe mode if file input is detected - if (options.iframe !== false && (options.iframe || shouldUseFrame)) { - // hack to fix Safari hang (thanks to Tim Molendijk for this) - // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d - if (options.closeKeepAlive) { - $.get(options.closeKeepAlive, function() { - fileUploadIframe(a); - }); - } - else { - fileUploadIframe(a); - } - } - else if ((hasFileInputs || multipart) && fileAPI) { - fileUploadXhr(a); - } - else { - $.ajax(options); - } - - // clear element array - for (var k=0; k < elements.length; k++) - elements[k] = null; - - // fire 'notify' event - this.trigger('form-submit-notify', [this, options]); - return this; - - // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz) - function fileUploadXhr(a) { - var formdata = new FormData(); - - for (var i=0; i < a.length; i++) { - formdata.append(a[i].name, a[i].value); - } - - if (options.extraData) { - for (var p in options.extraData) - if (options.extraData.hasOwnProperty(p)) - formdata.append(p, options.extraData[p]); - } - - options.data = null; - - var s = $.extend(true, {}, $.ajaxSettings, options, { - contentType: false, - processData: false, - cache: false, - type: 'POST' - }); - - if (options.uploadProgress) { - // workaround because jqXHR does not expose upload property - s.xhr = function() { - var xhr = jQuery.ajaxSettings.xhr(); - if (xhr.upload) { - xhr.upload.onprogress = function(event) { - var percent = 0; - var position = event.loaded || event.position; /*event.position is deprecated*/ - var total = event.total; - if (event.lengthComputable) { - percent = Math.ceil(position / total * 100); - } - options.uploadProgress(event, position, total, percent); - }; - } - return xhr; - }; - } - - s.data = null; - var beforeSend = s.beforeSend; - s.beforeSend = function(xhr, o) { - o.data = formdata; - if(beforeSend) - beforeSend.call(this, xhr, o); - }; - $.ajax(s); - } - - // private function for handling file uploads (hat tip to YAHOO!) - function fileUploadIframe(a) { - var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle; - var useProp = !!$.fn.prop; - - if ($(':input[name=submit],:input[id=submit]', form).length) { - // if there is an input with a name or id of 'submit' then we won't be - // able to invoke the submit fn on the form (at least not x-browser) - alert('Error: Form elements must not have name or id of "submit".'); - return; - } - - if (a) { - // ensure that every serialized input is still enabled - for (i=0; i < elements.length; i++) { - el = $(elements[i]); - if ( useProp ) - el.prop('disabled', false); - else - el.removeAttr('disabled'); - } - } - - s = $.extend(true, {}, $.ajaxSettings, options); - s.context = s.context || s; - id = 'jqFormIO' + (new Date().getTime()); - if (s.iframeTarget) { - $io = $(s.iframeTarget); - n = $io.attr('name'); - if (!n) - $io.attr('name', id); - else - id = n; - } - else { - $io = $('