summaryrefslogtreecommitdiff
path: root/www/wiki/includes/api
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
committerYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
commitfc7369835258467bf97eb64f184b93691f9a9fd5 (patch)
treedaabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/includes/api
first commit
Diffstat (limited to 'www/wiki/includes/api')
-rw-r--r--www/wiki/includes/api/ApiAMCreateAccount.php137
-rw-r--r--www/wiki/includes/api/ApiAuthManagerHelper.php396
-rw-r--r--www/wiki/includes/api/ApiBase.php2971
-rw-r--r--www/wiki/includes/api/ApiBlock.php199
-rw-r--r--www/wiki/includes/api/ApiCSPReport.php242
-rw-r--r--www/wiki/includes/api/ApiChangeAuthenticationData.php98
-rw-r--r--www/wiki/includes/api/ApiCheckToken.php88
-rw-r--r--www/wiki/includes/api/ApiClearHasMsg.php53
-rw-r--r--www/wiki/includes/api/ApiClientLogin.php137
-rw-r--r--www/wiki/includes/api/ApiComparePages.php520
-rw-r--r--www/wiki/includes/api/ApiContinuationManager.php271
-rw-r--r--www/wiki/includes/api/ApiDelete.php230
-rw-r--r--www/wiki/includes/api/ApiDisabled.php54
-rw-r--r--www/wiki/includes/api/ApiEditPage.php625
-rw-r--r--www/wiki/includes/api/ApiEmailUser.php115
-rw-r--r--www/wiki/includes/api/ApiErrorFormatter.php460
-rw-r--r--www/wiki/includes/api/ApiExpandTemplates.php229
-rw-r--r--www/wiki/includes/api/ApiFeedContributions.php232
-rw-r--r--www/wiki/includes/api/ApiFeedRecentChanges.php183
-rw-r--r--www/wiki/includes/api/ApiFeedWatchlist.php305
-rw-r--r--www/wiki/includes/api/ApiFileRevert.php132
-rw-r--r--www/wiki/includes/api/ApiFormatBase.php387
-rw-r--r--www/wiki/includes/api/ApiFormatFeedWrapper.php113
-rw-r--r--www/wiki/includes/api/ApiFormatJson.php134
-rw-r--r--www/wiki/includes/api/ApiFormatNone.php36
-rw-r--r--www/wiki/includes/api/ApiFormatPhp.php83
-rw-r--r--www/wiki/includes/api/ApiFormatRaw.php116
-rw-r--r--www/wiki/includes/api/ApiFormatXml.php297
-rw-r--r--www/wiki/includes/api/ApiHelp.php903
-rw-r--r--www/wiki/includes/api/ApiHelpParamValueMessage.php91
-rw-r--r--www/wiki/includes/api/ApiImageRotate.php198
-rw-r--r--www/wiki/includes/api/ApiImport.php222
-rw-r--r--www/wiki/includes/api/ApiLinkAccount.php129
-rw-r--r--www/wiki/includes/api/ApiLogin.php308
-rw-r--r--www/wiki/includes/api/ApiLogout.php88
-rw-r--r--www/wiki/includes/api/ApiMain.php2028
-rw-r--r--www/wiki/includes/api/ApiManageTags.php130
-rw-r--r--www/wiki/includes/api/ApiMergeHistory.php138
-rw-r--r--www/wiki/includes/api/ApiMessage.php301
-rw-r--r--www/wiki/includes/api/ApiModuleManager.php290
-rw-r--r--www/wiki/includes/api/ApiMove.php280
-rw-r--r--www/wiki/includes/api/ApiOpenSearch.php419
-rw-r--r--www/wiki/includes/api/ApiOptions.php185
-rw-r--r--www/wiki/includes/api/ApiPageSet.php1541
-rw-r--r--www/wiki/includes/api/ApiParamInfo.php583
-rw-r--r--www/wiki/includes/api/ApiParse.php908
-rw-r--r--www/wiki/includes/api/ApiPatrol.php115
-rw-r--r--www/wiki/includes/api/ApiProtect.php200
-rw-r--r--www/wiki/includes/api/ApiPurge.php177
-rw-r--r--www/wiki/includes/api/ApiQuery.php544
-rw-r--r--www/wiki/includes/api/ApiQueryAllCategories.php201
-rw-r--r--www/wiki/includes/api/ApiQueryAllDeletedRevisions.php465
-rw-r--r--www/wiki/includes/api/ApiQueryAllImages.php424
-rw-r--r--www/wiki/includes/api/ApiQueryAllLinks.php309
-rw-r--r--www/wiki/includes/api/ApiQueryAllMessages.php257
-rw-r--r--www/wiki/includes/api/ApiQueryAllPages.php356
-rw-r--r--www/wiki/includes/api/ApiQueryAllRevisions.php282
-rw-r--r--www/wiki/includes/api/ApiQueryAllUsers.php412
-rw-r--r--www/wiki/includes/api/ApiQueryAuthManagerInfo.php132
-rw-r--r--www/wiki/includes/api/ApiQueryBacklinks.php576
-rw-r--r--www/wiki/includes/api/ApiQueryBacklinksprop.php437
-rw-r--r--www/wiki/includes/api/ApiQueryBase.php612
-rw-r--r--www/wiki/includes/api/ApiQueryBlocks.php347
-rw-r--r--www/wiki/includes/api/ApiQueryCategories.php232
-rw-r--r--www/wiki/includes/api/ApiQueryCategoryInfo.php116
-rw-r--r--www/wiki/includes/api/ApiQueryCategoryMembers.php392
-rw-r--r--www/wiki/includes/api/ApiQueryContributors.php270
-rw-r--r--www/wiki/includes/api/ApiQueryDeletedRevisions.php298
-rw-r--r--www/wiki/includes/api/ApiQueryDeletedrevs.php512
-rw-r--r--www/wiki/includes/api/ApiQueryDisabled.php54
-rw-r--r--www/wiki/includes/api/ApiQueryDuplicateFiles.php190
-rw-r--r--www/wiki/includes/api/ApiQueryExtLinksUsage.php231
-rw-r--r--www/wiki/includes/api/ApiQueryExternalLinks.php135
-rw-r--r--www/wiki/includes/api/ApiQueryFileRepoInfo.php116
-rw-r--r--www/wiki/includes/api/ApiQueryFilearchive.php287
-rw-r--r--www/wiki/includes/api/ApiQueryGeneratorBase.php105
-rw-r--r--www/wiki/includes/api/ApiQueryIWBacklinks.php218
-rw-r--r--www/wiki/includes/api/ApiQueryIWLinks.php197
-rw-r--r--www/wiki/includes/api/ApiQueryImageInfo.php826
-rw-r--r--www/wiki/includes/api/ApiQueryImages.php177
-rw-r--r--www/wiki/includes/api/ApiQueryInfo.php986
-rw-r--r--www/wiki/includes/api/ApiQueryLangBacklinks.php217
-rw-r--r--www/wiki/includes/api/ApiQueryLangLinks.php191
-rw-r--r--www/wiki/includes/api/ApiQueryLinks.php238
-rw-r--r--www/wiki/includes/api/ApiQueryLogEvents.php482
-rw-r--r--www/wiki/includes/api/ApiQueryMyStashedFiles.php150
-rw-r--r--www/wiki/includes/api/ApiQueryPagePropNames.php110
-rw-r--r--www/wiki/includes/api/ApiQueryPageProps.php121
-rw-r--r--www/wiki/includes/api/ApiQueryPagesWithProp.php175
-rw-r--r--www/wiki/includes/api/ApiQueryPrefixSearch.php132
-rw-r--r--www/wiki/includes/api/ApiQueryProtectedTitles.php244
-rw-r--r--www/wiki/includes/api/ApiQueryQueryPage.php167
-rw-r--r--www/wiki/includes/api/ApiQueryRandom.php219
-rw-r--r--www/wiki/includes/api/ApiQueryRecentChanges.php754
-rw-r--r--www/wiki/includes/api/ApiQueryRevisions.php507
-rw-r--r--www/wiki/includes/api/ApiQueryRevisionsBase.php522
-rw-r--r--www/wiki/includes/api/ApiQuerySearch.php420
-rw-r--r--www/wiki/includes/api/ApiQuerySiteinfo.php936
-rw-r--r--www/wiki/includes/api/ApiQueryStashImageInfo.php128
-rw-r--r--www/wiki/includes/api/ApiQueryTags.php165
-rw-r--r--www/wiki/includes/api/ApiQueryTokens.php134
-rw-r--r--www/wiki/includes/api/ApiQueryUserContributions.php832
-rw-r--r--www/wiki/includes/api/ApiQueryUserInfo.php349
-rw-r--r--www/wiki/includes/api/ApiQueryUsers.php408
-rw-r--r--www/wiki/includes/api/ApiQueryWatchlist.php531
-rw-r--r--www/wiki/includes/api/ApiQueryWatchlistRaw.php200
-rw-r--r--www/wiki/includes/api/ApiRemoveAuthenticationData.php111
-rw-r--r--www/wiki/includes/api/ApiResetPassword.php139
-rw-r--r--www/wiki/includes/api/ApiResult.php1229
-rw-r--r--www/wiki/includes/api/ApiRevisionDelete.php201
-rw-r--r--www/wiki/includes/api/ApiRollback.php203
-rw-r--r--www/wiki/includes/api/ApiRsd.php167
-rw-r--r--www/wiki/includes/api/ApiSerializable.php45
-rw-r--r--www/wiki/includes/api/ApiSetNotificationTimestamp.php251
-rw-r--r--www/wiki/includes/api/ApiSetPageLanguage.php145
-rw-r--r--www/wiki/includes/api/ApiStashEdit.php486
-rw-r--r--www/wiki/includes/api/ApiTag.php192
-rw-r--r--www/wiki/includes/api/ApiTokens.php112
-rw-r--r--www/wiki/includes/api/ApiUnblock.php133
-rw-r--r--www/wiki/includes/api/ApiUndelete.php149
-rw-r--r--www/wiki/includes/api/ApiUpload.php929
-rw-r--r--www/wiki/includes/api/ApiUsageException.php231
-rw-r--r--www/wiki/includes/api/ApiUserrights.php224
-rw-r--r--www/wiki/includes/api/ApiValidatePassword.php81
-rw-r--r--www/wiki/includes/api/ApiWatch.php184
-rw-r--r--www/wiki/includes/api/SearchApi.php197
-rw-r--r--www/wiki/includes/api/i18n/ar.json426
-rw-r--r--www/wiki/includes/api/i18n/ast.json37
-rw-r--r--www/wiki/includes/api/i18n/av.json8
-rw-r--r--www/wiki/includes/api/i18n/awa.json11
-rw-r--r--www/wiki/includes/api/i18n/azb.json15
-rw-r--r--www/wiki/includes/api/i18n/ba.json440
-rw-r--r--www/wiki/includes/api/i18n/bcl.json10
-rw-r--r--www/wiki/includes/api/i18n/be-tarask.json62
-rw-r--r--www/wiki/includes/api/i18n/bg.json66
-rw-r--r--www/wiki/includes/api/i18n/bgn.json11
-rw-r--r--www/wiki/includes/api/i18n/bn.json28
-rw-r--r--www/wiki/includes/api/i18n/br.json35
-rw-r--r--www/wiki/includes/api/i18n/bs.json17
-rw-r--r--www/wiki/includes/api/i18n/ca.json61
-rw-r--r--www/wiki/includes/api/i18n/ce.json29
-rw-r--r--www/wiki/includes/api/i18n/ckb.json10
-rw-r--r--www/wiki/includes/api/i18n/cs.json300
-rw-r--r--www/wiki/includes/api/i18n/cv.json8
-rw-r--r--www/wiki/includes/api/i18n/da.json8
-rw-r--r--www/wiki/includes/api/i18n/de.json1113
-rw-r--r--www/wiki/includes/api/i18n/diq.json66
-rw-r--r--www/wiki/includes/api/i18n/el.json109
-rw-r--r--www/wiki/includes/api/i18n/en-gb.json154
-rw-r--r--www/wiki/includes/api/i18n/en.json1890
-rw-r--r--www/wiki/includes/api/i18n/eo.json30
-rw-r--r--www/wiki/includes/api/i18n/es.json1655
-rw-r--r--www/wiki/includes/api/i18n/et.json42
-rw-r--r--www/wiki/includes/api/i18n/eu.json262
-rw-r--r--www/wiki/includes/api/i18n/fa.json340
-rw-r--r--www/wiki/includes/api/i18n/fi.json99
-rw-r--r--www/wiki/includes/api/i18n/fo.json39
-rw-r--r--www/wiki/includes/api/i18n/fr.json1785
-rw-r--r--www/wiki/includes/api/i18n/frc.json20
-rw-r--r--www/wiki/includes/api/i18n/fy.json15
-rw-r--r--www/wiki/includes/api/i18n/gl.json1712
-rw-r--r--www/wiki/includes/api/i18n/he.json1757
-rw-r--r--www/wiki/includes/api/i18n/hr.json9
-rw-r--r--www/wiki/includes/api/i18n/hsb.json8
-rw-r--r--www/wiki/includes/api/i18n/hsn.json9
-rw-r--r--www/wiki/includes/api/i18n/ht.json8
-rw-r--r--www/wiki/includes/api/i18n/hu.json1167
-rw-r--r--www/wiki/includes/api/i18n/ia.json63
-rw-r--r--www/wiki/includes/api/i18n/id.json105
-rw-r--r--www/wiki/includes/api/i18n/is.json10
-rw-r--r--www/wiki/includes/api/i18n/it.json695
-rw-r--r--www/wiki/includes/api/i18n/ja.json977
-rw-r--r--www/wiki/includes/api/i18n/jam.json8
-rw-r--r--www/wiki/includes/api/i18n/jv.json11
-rw-r--r--www/wiki/includes/api/i18n/ka.json11
-rw-r--r--www/wiki/includes/api/i18n/kn.json8
-rw-r--r--www/wiki/includes/api/i18n/ko.json891
-rw-r--r--www/wiki/includes/api/i18n/ksh.json1046
-rw-r--r--www/wiki/includes/api/i18n/ku-latn.json44
-rw-r--r--www/wiki/includes/api/i18n/ky.json20
-rw-r--r--www/wiki/includes/api/i18n/lb.json254
-rw-r--r--www/wiki/includes/api/i18n/lij.json221
-rw-r--r--www/wiki/includes/api/i18n/lki.json28
-rw-r--r--www/wiki/includes/api/i18n/ln.json8
-rw-r--r--www/wiki/includes/api/i18n/lt.json422
-rw-r--r--www/wiki/includes/api/i18n/lv.json14
-rw-r--r--www/wiki/includes/api/i18n/lzh.json8
-rw-r--r--www/wiki/includes/api/i18n/mg.json37
-rw-r--r--www/wiki/includes/api/i18n/mk.json431
-rw-r--r--www/wiki/includes/api/i18n/mr.json107
-rw-r--r--www/wiki/includes/api/i18n/ms.json58
-rw-r--r--www/wiki/includes/api/i18n/my.json10
-rw-r--r--www/wiki/includes/api/i18n/nap.json148
-rw-r--r--www/wiki/includes/api/i18n/nb.json712
-rw-r--r--www/wiki/includes/api/i18n/nds.json8
-rw-r--r--www/wiki/includes/api/i18n/ne.json13
-rw-r--r--www/wiki/includes/api/i18n/nl.json394
-rw-r--r--www/wiki/includes/api/i18n/nso.json9
-rw-r--r--www/wiki/includes/api/i18n/oc.json135
-rw-r--r--www/wiki/includes/api/i18n/olo.json13
-rw-r--r--www/wiki/includes/api/i18n/or.json14
-rw-r--r--www/wiki/includes/api/i18n/pa.json8
-rw-r--r--www/wiki/includes/api/i18n/pam.json32
-rw-r--r--www/wiki/includes/api/i18n/pl.json725
-rw-r--r--www/wiki/includes/api/i18n/ps.json73
-rw-r--r--www/wiki/includes/api/i18n/pt-br.json1759
-rw-r--r--www/wiki/includes/api/i18n/pt.json1763
-rw-r--r--www/wiki/includes/api/i18n/qqq.json1776
-rw-r--r--www/wiki/includes/api/i18n/ro.json19
-rw-r--r--www/wiki/includes/api/i18n/roa-tara.json11
-rw-r--r--www/wiki/includes/api/i18n/ru.json1783
-rw-r--r--www/wiki/includes/api/i18n/sah.json9
-rw-r--r--www/wiki/includes/api/i18n/sd.json15
-rw-r--r--www/wiki/includes/api/i18n/sh.json8
-rw-r--r--www/wiki/includes/api/i18n/shn.json8
-rw-r--r--www/wiki/includes/api/i18n/si.json65
-rw-r--r--www/wiki/includes/api/i18n/sk.json8
-rw-r--r--www/wiki/includes/api/i18n/sq.json15
-rw-r--r--www/wiki/includes/api/i18n/sr-ec.json28
-rw-r--r--www/wiki/includes/api/i18n/sr-el.json12
-rw-r--r--www/wiki/includes/api/i18n/sv.json557
-rw-r--r--www/wiki/includes/api/i18n/ta.json28
-rw-r--r--www/wiki/includes/api/i18n/tcy.json22
-rw-r--r--www/wiki/includes/api/i18n/te.json21
-rw-r--r--www/wiki/includes/api/i18n/th.json9
-rw-r--r--www/wiki/includes/api/i18n/tl.json38
-rw-r--r--www/wiki/includes/api/i18n/tr.json58
-rw-r--r--www/wiki/includes/api/i18n/tt-cyrl.json8
-rw-r--r--www/wiki/includes/api/i18n/udm.json11
-rw-r--r--www/wiki/includes/api/i18n/uk.json1750
-rw-r--r--www/wiki/includes/api/i18n/ur.json8
-rw-r--r--www/wiki/includes/api/i18n/vi.json225
-rw-r--r--www/wiki/includes/api/i18n/wuu.json8
-rw-r--r--www/wiki/includes/api/i18n/yi.json10
-rw-r--r--www/wiki/includes/api/i18n/zh-hans.json1777
-rw-r--r--www/wiki/includes/api/i18n/zh-hant.json327
-rw-r--r--www/wiki/includes/api/i18n/zu.json10
237 files changed, 76302 insertions, 0 deletions
diff --git a/www/wiki/includes/api/ApiAMCreateAccount.php b/www/wiki/includes/api/ApiAMCreateAccount.php
new file mode 100644
index 00000000..72a36d71
--- /dev/null
+++ b/www/wiki/includes/api/ApiAMCreateAccount.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Auth\AuthManager;
+use MediaWiki\Auth\AuthenticationResponse;
+
+/**
+ * Create an account with AuthManager
+ *
+ * @ingroup API
+ */
+class ApiAMCreateAccount extends ApiBase {
+
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action, 'create' );
+ }
+
+ public function getFinalDescription() {
+ // A bit of a hack to append 'api-help-authmanager-general-usage'
+ $msgs = parent::getFinalDescription();
+ $msgs[] = ApiBase::makeMessage( 'api-help-authmanager-general-usage', $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ AuthManager::ACTION_CREATE,
+ self::needsToken(),
+ ] );
+ return $msgs;
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $this->requireAtLeastOneParameter( $params, 'continue', 'returnurl' );
+
+ if ( $params['returnurl'] !== null ) {
+ $bits = wfParseUrl( $params['returnurl'] );
+ if ( !$bits || $bits['scheme'] === '' ) {
+ $encParamName = $this->encodeParamName( 'returnurl' );
+ $this->dieWithError(
+ [ 'apierror-badurl', $encParamName, wfEscapeWikiText( $params['returnurl'] ) ],
+ "badurl_{$encParamName}"
+ );
+ }
+ }
+
+ $helper = new ApiAuthManagerHelper( $this );
+ $manager = AuthManager::singleton();
+
+ // Make sure it's possible to create accounts
+ if ( !$manager->canCreateAccounts() ) {
+ $this->getResult()->addValue( null, 'createaccount', $helper->formatAuthenticationResponse(
+ AuthenticationResponse::newFail(
+ $this->msg( 'userlogin-cannot-' . AuthManager::ACTION_CREATE )
+ )
+ ) );
+ $helper->logAuthenticationResult( 'accountcreation',
+ 'userlogin-cannot-' . AuthManager::ACTION_CREATE );
+ return;
+ }
+
+ // Perform the create step
+ if ( $params['continue'] ) {
+ $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_CREATE_CONTINUE );
+ $res = $manager->continueAccountCreation( $reqs );
+ } else {
+ $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_CREATE );
+ if ( $params['preservestate'] ) {
+ $req = $helper->getPreservedRequest();
+ if ( $req ) {
+ $reqs[] = $req;
+ }
+ }
+ $res = $manager->beginAccountCreation( $this->getUser(), $reqs, $params['returnurl'] );
+ }
+
+ $this->getResult()->addValue( null, 'createaccount',
+ $helper->formatAuthenticationResponse( $res ) );
+ $helper->logAuthenticationResult( 'accountcreation', $res );
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'createaccount';
+ }
+
+ public function getAllowedParams() {
+ $ret = ApiAuthManagerHelper::getStandardParams( AuthManager::ACTION_CREATE,
+ 'requests', 'messageformat', 'mergerequestfields', 'preservestate', 'returnurl', 'continue'
+ );
+ $ret['preservestate'][ApiBase::PARAM_HELP_MSG_APPEND][] =
+ 'apihelp-createaccount-param-preservestate';
+ return $ret;
+ }
+
+ public function dynamicParameterDocumentation() {
+ return [ 'api-help-authmanagerhelper-additional-params', AuthManager::ACTION_CREATE ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=createaccount&username=Example&password=ExamplePassword&retype=ExamplePassword'
+ . '&createreturnurl=http://example.org/&createtoken=123ABC'
+ => 'apihelp-createaccount-example-create',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Account_creation';
+ }
+}
diff --git a/www/wiki/includes/api/ApiAuthManagerHelper.php b/www/wiki/includes/api/ApiAuthManagerHelper.php
new file mode 100644
index 00000000..d6b9f761
--- /dev/null
+++ b/www/wiki/includes/api/ApiAuthManagerHelper.php
@@ -0,0 +1,396 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.27
+ */
+
+use MediaWiki\Auth\AuthManager;
+use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\Auth\AuthenticationResponse;
+use MediaWiki\Auth\CreateFromLoginAuthenticationRequest;
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * Helper class for AuthManager-using API modules. Intended for use via
+ * composition.
+ *
+ * @ingroup API
+ */
+class ApiAuthManagerHelper {
+
+ /** @var ApiBase API module, for context and parameters */
+ private $module;
+
+ /** @var string Message output format */
+ private $messageFormat;
+
+ /**
+ * @param ApiBase $module API module, for context and parameters
+ */
+ public function __construct( ApiBase $module ) {
+ $this->module = $module;
+
+ $params = $module->extractRequestParams();
+ $this->messageFormat = isset( $params['messageformat'] ) ? $params['messageformat'] : 'wikitext';
+ }
+
+ /**
+ * Static version of the constructor, for chaining
+ * @param ApiBase $module API module, for context and parameters
+ * @return ApiAuthManagerHelper
+ */
+ public static function newForModule( ApiBase $module ) {
+ return new self( $module );
+ }
+
+ /**
+ * Format a message for output
+ * @param array &$res Result array
+ * @param string $key Result key
+ * @param Message $message
+ */
+ private function formatMessage( array &$res, $key, Message $message ) {
+ switch ( $this->messageFormat ) {
+ case 'none':
+ break;
+
+ case 'wikitext':
+ $res[$key] = $message->setContext( $this->module )->text();
+ break;
+
+ case 'html':
+ $res[$key] = $message->setContext( $this->module )->parseAsBlock();
+ $res[$key] = Parser::stripOuterParagraph( $res[$key] );
+ break;
+
+ case 'raw':
+ $res[$key] = [
+ 'key' => $message->getKey(),
+ 'params' => $message->getParams(),
+ ];
+ ApiResult::setIndexedTagName( $res[$key]['params'], 'param' );
+ break;
+ }
+ }
+
+ /**
+ * Call $manager->securitySensitiveOperationStatus()
+ * @param string $operation Operation being checked.
+ * @throws ApiUsageException
+ */
+ public function securitySensitiveOperation( $operation ) {
+ $status = AuthManager::singleton()->securitySensitiveOperationStatus( $operation );
+ switch ( $status ) {
+ case AuthManager::SEC_OK:
+ return;
+
+ case AuthManager::SEC_REAUTH:
+ $this->module->dieWithError( 'apierror-reauthenticate' );
+
+ case AuthManager::SEC_FAIL:
+ $this->module->dieWithError( 'apierror-cannotreauthenticate' );
+
+ default:
+ throw new UnexpectedValueException( "Unknown status \"$status\"" );
+ }
+ }
+
+ /**
+ * Filter out authentication requests by class name
+ * @param AuthenticationRequest[] $reqs Requests to filter
+ * @param string[] $blacklist Class names to remove
+ * @return AuthenticationRequest[]
+ */
+ public static function blacklistAuthenticationRequests( array $reqs, array $blacklist ) {
+ if ( $blacklist ) {
+ $blacklist = array_flip( $blacklist );
+ $reqs = array_filter( $reqs, function ( $req ) use ( $blacklist ) {
+ return !isset( $blacklist[get_class( $req )] );
+ } );
+ }
+ return $reqs;
+ }
+
+ /**
+ * Fetch and load the AuthenticationRequests for an action
+ * @param string $action One of the AuthManager::ACTION_* constants
+ * @return AuthenticationRequest[]
+ */
+ public function loadAuthenticationRequests( $action ) {
+ $params = $this->module->extractRequestParams();
+
+ $manager = AuthManager::singleton();
+ $reqs = $manager->getAuthenticationRequests( $action, $this->module->getUser() );
+
+ // Filter requests, if requested to do so
+ $wantedRequests = null;
+ if ( isset( $params['requests'] ) ) {
+ $wantedRequests = array_flip( $params['requests'] );
+ } elseif ( isset( $params['request'] ) ) {
+ $wantedRequests = [ $params['request'] => true ];
+ }
+ if ( $wantedRequests !== null ) {
+ $reqs = array_filter( $reqs, function ( $req ) use ( $wantedRequests ) {
+ return isset( $wantedRequests[$req->getUniqueId()] );
+ } );
+ }
+
+ // Collect the fields for all the requests
+ $fields = [];
+ $sensitive = [];
+ foreach ( $reqs as $req ) {
+ $info = (array)$req->getFieldInfo();
+ $fields += $info;
+ $sensitive += array_filter( $info, function ( $opts ) {
+ return !empty( $opts['sensitive'] );
+ } );
+ }
+
+ // Extract the request data for the fields and mark those request
+ // parameters as used
+ $data = array_intersect_key( $this->module->getRequest()->getValues(), $fields );
+ $this->module->getMain()->markParamsUsed( array_keys( $data ) );
+
+ if ( $sensitive ) {
+ $this->module->getMain()->markParamsSensitive( array_keys( $sensitive ) );
+ $this->module->requirePostedParameters( array_keys( $sensitive ), 'noprefix' );
+ }
+
+ return AuthenticationRequest::loadRequestsFromSubmission( $reqs, $data );
+ }
+
+ /**
+ * Format an AuthenticationResponse for return
+ * @param AuthenticationResponse $res
+ * @return array
+ */
+ public function formatAuthenticationResponse( AuthenticationResponse $res ) {
+ $ret = [
+ 'status' => $res->status,
+ ];
+
+ if ( $res->status === AuthenticationResponse::PASS && $res->username !== null ) {
+ $ret['username'] = $res->username;
+ }
+
+ if ( $res->status === AuthenticationResponse::REDIRECT ) {
+ $ret['redirecttarget'] = $res->redirectTarget;
+ if ( $res->redirectApiData !== null ) {
+ $ret['redirectdata'] = $res->redirectApiData;
+ }
+ }
+
+ if ( $res->status === AuthenticationResponse::REDIRECT ||
+ $res->status === AuthenticationResponse::UI ||
+ $res->status === AuthenticationResponse::RESTART
+ ) {
+ $ret += $this->formatRequests( $res->neededRequests );
+ }
+
+ if ( $res->status === AuthenticationResponse::FAIL ||
+ $res->status === AuthenticationResponse::UI ||
+ $res->status === AuthenticationResponse::RESTART
+ ) {
+ $this->formatMessage( $ret, 'message', $res->message );
+ $ret['messagecode'] = ApiMessage::create( $res->message )->getApiCode();
+ }
+
+ if ( $res->status === AuthenticationResponse::FAIL ||
+ $res->status === AuthenticationResponse::RESTART
+ ) {
+ $this->module->getRequest()->getSession()->set(
+ 'ApiAuthManagerHelper::createRequest',
+ $res->createRequest
+ );
+ $ret['canpreservestate'] = $res->createRequest !== null;
+ } else {
+ $this->module->getRequest()->getSession()->remove( 'ApiAuthManagerHelper::createRequest' );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Logs successful or failed authentication.
+ * @param string $event Event type (e.g. 'accountcreation')
+ * @param string|AuthenticationResponse $result Response or error message
+ */
+ public function logAuthenticationResult( $event, $result ) {
+ if ( is_string( $result ) ) {
+ $status = Status::newFatal( $result );
+ } elseif ( $result->status === AuthenticationResponse::PASS ) {
+ $status = Status::newGood();
+ } elseif ( $result->status === AuthenticationResponse::FAIL ) {
+ $status = Status::newFatal( $result->message );
+ } else {
+ return;
+ }
+
+ $module = $this->module->getModuleName();
+ LoggerFactory::getInstance( 'authevents' )->info( "$module API attempt", [
+ 'event' => $event,
+ 'status' => $status,
+ 'module' => $module,
+ ] );
+ }
+
+ /**
+ * Fetch the preserved CreateFromLoginAuthenticationRequest, if any
+ * @return CreateFromLoginAuthenticationRequest|null
+ */
+ public function getPreservedRequest() {
+ $ret = $this->module->getRequest()->getSession()->get( 'ApiAuthManagerHelper::createRequest' );
+ return $ret instanceof CreateFromLoginAuthenticationRequest ? $ret : null;
+ }
+
+ /**
+ * Format an array of AuthenticationRequests for return
+ * @param AuthenticationRequest[] $reqs
+ * @return array Will have a 'requests' key, and also 'fields' if $module's
+ * params include 'mergerequestfields'.
+ */
+ public function formatRequests( array $reqs ) {
+ $params = $this->module->extractRequestParams();
+ $mergeFields = !empty( $params['mergerequestfields'] );
+
+ $ret = [ 'requests' => [] ];
+ foreach ( $reqs as $req ) {
+ $describe = $req->describeCredentials();
+ $reqInfo = [
+ 'id' => $req->getUniqueId(),
+ 'metadata' => $req->getMetadata() + [ ApiResult::META_TYPE => 'assoc' ],
+ ];
+ switch ( $req->required ) {
+ case AuthenticationRequest::OPTIONAL:
+ $reqInfo['required'] = 'optional';
+ break;
+ case AuthenticationRequest::REQUIRED:
+ $reqInfo['required'] = 'required';
+ break;
+ case AuthenticationRequest::PRIMARY_REQUIRED:
+ $reqInfo['required'] = 'primary-required';
+ break;
+ }
+ $this->formatMessage( $reqInfo, 'provider', $describe['provider'] );
+ $this->formatMessage( $reqInfo, 'account', $describe['account'] );
+ if ( !$mergeFields ) {
+ $reqInfo['fields'] = $this->formatFields( (array)$req->getFieldInfo() );
+ }
+ $ret['requests'][] = $reqInfo;
+ }
+
+ if ( $mergeFields ) {
+ $fields = AuthenticationRequest::mergeFieldInfo( $reqs );
+ $ret['fields'] = $this->formatFields( $fields );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Clean up a field array for output
+ * @param ApiBase $module For context and parameters 'mergerequestfields'
+ * and 'messageformat'
+ * @param array $fields
+ * @return array
+ */
+ private function formatFields( array $fields ) {
+ static $copy = [
+ 'type' => true,
+ 'value' => true,
+ ];
+
+ $module = $this->module;
+ $retFields = [];
+
+ foreach ( $fields as $name => $field ) {
+ $ret = array_intersect_key( $field, $copy );
+
+ if ( isset( $field['options'] ) ) {
+ $ret['options'] = array_map( function ( $msg ) use ( $module ) {
+ return $msg->setContext( $module )->plain();
+ }, $field['options'] );
+ ApiResult::setArrayType( $ret['options'], 'assoc' );
+ }
+ $this->formatMessage( $ret, 'label', $field['label'] );
+ $this->formatMessage( $ret, 'help', $field['help'] );
+ $ret['optional'] = !empty( $field['optional'] );
+ $ret['sensitive'] = !empty( $field['sensitive'] );
+
+ $retFields[$name] = $ret;
+ }
+
+ ApiResult::setArrayType( $retFields, 'assoc' );
+
+ return $retFields;
+ }
+
+ /**
+ * Fetch the standard parameters this helper recognizes
+ * @param string $action AuthManager action
+ * @param string $param,... Parameters to use
+ * @return array
+ */
+ public static function getStandardParams( $action, $param /* ... */ ) {
+ $params = [
+ 'requests' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => [ 'api-help-authmanagerhelper-requests', $action ],
+ ],
+ 'request' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ApiBase::PARAM_HELP_MSG => [ 'api-help-authmanagerhelper-request', $action ],
+ ],
+ 'messageformat' => [
+ ApiBase::PARAM_DFLT => 'wikitext',
+ ApiBase::PARAM_TYPE => [ 'html', 'wikitext', 'raw', 'none' ],
+ ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-messageformat',
+ ],
+ 'mergerequestfields' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-mergerequestfields',
+ ],
+ 'preservestate' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-preservestate',
+ ],
+ 'returnurl' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-returnurl',
+ ],
+ 'continue' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-continue',
+ ],
+ ];
+
+ $ret = [];
+ $wantedParams = func_get_args();
+ array_shift( $wantedParams );
+ foreach ( $wantedParams as $name ) {
+ if ( isset( $params[$name] ) ) {
+ $ret[$name] = $params[$name];
+ }
+ }
+ return $ret;
+ }
+}
diff --git a/www/wiki/includes/api/ApiBase.php b/www/wiki/includes/api/ApiBase.php
new file mode 100644
index 00000000..7fafa1f1
--- /dev/null
+++ b/www/wiki/includes/api/ApiBase.php
@@ -0,0 +1,2971 @@
+<?php
+/**
+ * Copyright © 2006, 2010 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * This abstract class implements many basic API functions, and is the base of
+ * all API classes.
+ * The class functions are divided into several areas of functionality:
+ *
+ * Module parameters: Derived classes can define getAllowedParams() to specify
+ * which parameters to expect, how to parse and validate them.
+ *
+ * Self-documentation: code to allow the API to document its own state
+ *
+ * @ingroup API
+ */
+abstract class ApiBase extends ContextSource {
+
+ /**
+ * @name Constants for ::getAllowedParams() arrays
+ * These constants are keys in the arrays returned by ::getAllowedParams()
+ * and accepted by ::getParameterFromSettings() that define how the
+ * parameters coming in from the request are to be interpreted.
+ * @{
+ */
+
+ /** (null|boolean|integer|string) Default value of the parameter. */
+ const PARAM_DFLT = 0;
+
+ /** (boolean) Accept multiple pipe-separated values for this parameter (e.g. titles)? */
+ const PARAM_ISMULTI = 1;
+
+ /**
+ * (string|string[]) Either an array of allowed value strings, or a string
+ * type as described below. If not specified, will be determined from the
+ * type of PARAM_DFLT.
+ *
+ * Supported string types are:
+ * - boolean: A boolean parameter, returned as false if the parameter is
+ * omitted and true if present (even with a falsey value, i.e. it works
+ * like HTML checkboxes). PARAM_DFLT must be boolean false, if specified.
+ * Cannot be used with PARAM_ISMULTI.
+ * - integer: An integer value. See also PARAM_MIN, PARAM_MAX, and
+ * PARAM_RANGE_ENFORCE.
+ * - limit: An integer or the string 'max'. Default lower limit is 0 (but
+ * see PARAM_MIN), and requires that PARAM_MAX and PARAM_MAX2 be
+ * specified. Cannot be used with PARAM_ISMULTI.
+ * - namespace: An integer representing a MediaWiki namespace. Forces PARAM_ALL = true to
+ * support easily specifying all namespaces.
+ * - NULL: Any string.
+ * - password: Any non-empty string. Input value is private or sensitive.
+ * <input type="password"> would be an appropriate HTML form field.
+ * - string: Any non-empty string, not expected to be very long or contain newlines.
+ * <input type="text"> would be an appropriate HTML form field.
+ * - submodule: The name of a submodule of this module, see PARAM_SUBMODULE_MAP.
+ * - tags: A string naming an existing, explicitly-defined tag. Should usually be
+ * used with PARAM_ISMULTI.
+ * - text: Any non-empty string, expected to be very long or contain newlines.
+ * <textarea> would be an appropriate HTML form field.
+ * - timestamp: A timestamp in any format recognized by MWTimestamp, or the
+ * string 'now' representing the current timestamp. Will be returned in
+ * TS_MW format.
+ * - user: A MediaWiki username or IP. Will be returned normalized but not canonicalized.
+ * - upload: An uploaded file. Will be returned as a WebRequestUpload object.
+ * Cannot be used with PARAM_ISMULTI.
+ */
+ const PARAM_TYPE = 2;
+
+ /** (integer) Max value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'. */
+ const PARAM_MAX = 3;
+
+ /**
+ * (integer) Max value allowed for the parameter for users with the
+ * apihighlimits right, for PARAM_TYPE 'limit'.
+ */
+ const PARAM_MAX2 = 4;
+
+ /** (integer) Lowest value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'. */
+ const PARAM_MIN = 5;
+
+ /** (boolean) Allow the same value to be set more than once when PARAM_ISMULTI is true? */
+ const PARAM_ALLOW_DUPLICATES = 6;
+
+ /** (boolean) Is the parameter deprecated (will show a warning)? */
+ const PARAM_DEPRECATED = 7;
+
+ /**
+ * (boolean) Is the parameter required?
+ * @since 1.17
+ */
+ const PARAM_REQUIRED = 8;
+
+ /**
+ * (boolean) For PARAM_TYPE 'integer', enforce PARAM_MIN and PARAM_MAX?
+ * @since 1.17
+ */
+ const PARAM_RANGE_ENFORCE = 9;
+
+ /**
+ * (string|array|Message) Specify an alternative i18n documentation message
+ * for this parameter. Default is apihelp-{$path}-param-{$param}.
+ * @since 1.25
+ */
+ const PARAM_HELP_MSG = 10;
+
+ /**
+ * ((string|array|Message)[]) Specify additional i18n messages to append to
+ * the normal message for this parameter.
+ * @since 1.25
+ */
+ const PARAM_HELP_MSG_APPEND = 11;
+
+ /**
+ * (array) Specify additional information tags for the parameter. Value is
+ * an array of arrays, with the first member being the 'tag' for the info
+ * and the remaining members being the values. In the help, this is
+ * formatted using apihelp-{$path}-paraminfo-{$tag}, which is passed
+ * $1 = count, $2 = comma-joined list of values, $3 = module prefix.
+ * @since 1.25
+ */
+ const PARAM_HELP_MSG_INFO = 12;
+
+ /**
+ * (string[]) When PARAM_TYPE is an array, this may be an array mapping
+ * those values to page titles which will be linked in the help.
+ * @since 1.25
+ */
+ const PARAM_VALUE_LINKS = 13;
+
+ /**
+ * ((string|array|Message)[]) When PARAM_TYPE is an array, this is an array
+ * mapping those values to $msg for ApiBase::makeMessage(). Any value not
+ * having a mapping will use apihelp-{$path}-paramvalue-{$param}-{$value}.
+ * Specify an empty array to use the default message key for all values.
+ * @since 1.25
+ */
+ const PARAM_HELP_MSG_PER_VALUE = 14;
+
+ /**
+ * (string[]) When PARAM_TYPE is 'submodule', map parameter values to
+ * submodule paths. Default is to use all modules in
+ * $this->getModuleManager() in the group matching the parameter name.
+ * @since 1.26
+ */
+ const PARAM_SUBMODULE_MAP = 15;
+
+ /**
+ * (string) When PARAM_TYPE is 'submodule', used to indicate the 'g' prefix
+ * added by ApiQueryGeneratorBase (and similar if anything else ever does that).
+ * @since 1.26
+ */
+ const PARAM_SUBMODULE_PARAM_PREFIX = 16;
+
+ /**
+ * (boolean|string) When PARAM_TYPE has a defined set of values and PARAM_ISMULTI is true,
+ * this allows for an asterisk ('*') to be passed in place of a pipe-separated list of
+ * every possible value. If a string is set, it will be used in place of the asterisk.
+ * @since 1.29
+ */
+ const PARAM_ALL = 17;
+
+ /**
+ * (int[]) When PARAM_TYPE is 'namespace', include these as additional possible values.
+ * @since 1.29
+ */
+ const PARAM_EXTRA_NAMESPACES = 18;
+
+ /**
+ * (boolean) Is the parameter sensitive? Note 'password'-type fields are
+ * always sensitive regardless of the value of this field.
+ * @since 1.29
+ */
+ const PARAM_SENSITIVE = 19;
+
+ /**
+ * (array) When PARAM_TYPE is an array, this indicates which of the values are deprecated.
+ * Keys are the deprecated parameter values, values define the warning
+ * message to emit: either boolean true (to use a default message) or a
+ * $msg for ApiBase::makeMessage().
+ * @since 1.30
+ */
+ const PARAM_DEPRECATED_VALUES = 20;
+
+ /**
+ * (integer) Maximum number of values, for normal users. Must be used with PARAM_ISMULTI.
+ * @since 1.30
+ */
+ const PARAM_ISMULTI_LIMIT1 = 21;
+
+ /**
+ * (integer) Maximum number of values, for users with the apihighimits right.
+ * Must be used with PARAM_ISMULTI.
+ * @since 1.30
+ */
+ const PARAM_ISMULTI_LIMIT2 = 22;
+
+ /**
+ * (integer) Maximum length of a string in bytes (in UTF-8 encoding).
+ * @since 1.31
+ */
+ const PARAM_MAX_BYTES = 23;
+
+ /**
+ * (integer) Maximum length of a string in characters (unicode codepoints).
+ * @since 1.31
+ */
+ const PARAM_MAX_CHARS = 24;
+
+ /**@}*/
+
+ const ALL_DEFAULT_STRING = '*';
+
+ /** Fast query, standard limit. */
+ const LIMIT_BIG1 = 500;
+ /** Fast query, apihighlimits limit. */
+ const LIMIT_BIG2 = 5000;
+ /** Slow query, standard limit. */
+ const LIMIT_SML1 = 50;
+ /** Slow query, apihighlimits limit. */
+ const LIMIT_SML2 = 500;
+
+ /**
+ * getAllowedParams() flag: When set, the result could take longer to generate,
+ * but should be more thorough. E.g. get the list of generators for ApiSandBox extension
+ * @since 1.21
+ */
+ const GET_VALUES_FOR_HELP = 1;
+
+ /** @var array Maps extension paths to info arrays */
+ private static $extensionInfo = null;
+
+ /** @var ApiMain */
+ private $mMainModule;
+ /** @var string */
+ private $mModuleName, $mModulePrefix;
+ private $mSlaveDB = null;
+ private $mParamCache = [];
+ /** @var array|null|bool */
+ private $mModuleSource = false;
+
+ /**
+ * @param ApiMain $mainModule
+ * @param string $moduleName Name of this module
+ * @param string $modulePrefix Prefix to use for parameter names
+ */
+ public function __construct( ApiMain $mainModule, $moduleName, $modulePrefix = '' ) {
+ $this->mMainModule = $mainModule;
+ $this->mModuleName = $moduleName;
+ $this->mModulePrefix = $modulePrefix;
+
+ if ( !$this->isMain() ) {
+ $this->setContext( $mainModule->getContext() );
+ }
+ }
+
+ /************************************************************************//**
+ * @name Methods to implement
+ * @{
+ */
+
+ /**
+ * Evaluates the parameters, performs the requested query, and sets up
+ * the result. Concrete implementations of ApiBase must override this
+ * method to provide whatever functionality their module offers.
+ * Implementations must not produce any output on their own and are not
+ * expected to handle any errors.
+ *
+ * The execute() method will be invoked directly by ApiMain immediately
+ * before the result of the module is output. Aside from the
+ * constructor, implementations should assume that no other methods
+ * will be called externally on the module before the result is
+ * processed.
+ *
+ * The result data should be stored in the ApiResult object available
+ * through getResult().
+ */
+ abstract public function execute();
+
+ /**
+ * Get the module manager, or null if this module has no sub-modules
+ * @since 1.21
+ * @return ApiModuleManager
+ */
+ public function getModuleManager() {
+ return null;
+ }
+
+ /**
+ * If the module may only be used with a certain format module,
+ * it should override this method to return an instance of that formatter.
+ * A value of null means the default format will be used.
+ * @note Do not use this just because you don't want to support non-json
+ * formats. This should be used only when there is a fundamental
+ * requirement for a specific format.
+ * @return mixed Instance of a derived class of ApiFormatBase, or null
+ */
+ public function getCustomPrinter() {
+ return null;
+ }
+
+ /**
+ * Returns usage examples for this module.
+ *
+ * Return value has query strings as keys, with values being either strings
+ * (message key), arrays (message key + parameter), or Message objects.
+ *
+ * Do not call this base class implementation when overriding this method.
+ *
+ * @since 1.25
+ * @return array
+ */
+ protected function getExamplesMessages() {
+ // Fall back to old non-localised method
+ $ret = [];
+
+ $examples = $this->getExamples();
+ if ( $examples ) {
+ if ( !is_array( $examples ) ) {
+ $examples = [ $examples ];
+ } elseif ( $examples && ( count( $examples ) & 1 ) == 0 &&
+ array_keys( $examples ) === range( 0, count( $examples ) - 1 ) &&
+ !preg_match( '/^\s*api\.php\?/', $examples[0] )
+ ) {
+ // Fix up the ugly "even numbered elements are description, odd
+ // numbered elemts are the link" format (see doc for self::getExamples)
+ $tmp = [];
+ $examplesCount = count( $examples );
+ for ( $i = 0; $i < $examplesCount; $i += 2 ) {
+ $tmp[$examples[$i + 1]] = $examples[$i];
+ }
+ $examples = $tmp;
+ }
+
+ foreach ( $examples as $k => $v ) {
+ if ( is_numeric( $k ) ) {
+ $qs = $v;
+ $msg = '';
+ } else {
+ $qs = $k;
+ $msg = self::escapeWikiText( $v );
+ if ( is_array( $msg ) ) {
+ $msg = implode( ' ', $msg );
+ }
+ }
+
+ $qs = preg_replace( '/^\s*api\.php\?/', '', $qs );
+ $ret[$qs] = $this->msg( 'api-help-fallback-example', [ $msg ] );
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Return links to more detailed help pages about the module.
+ * @since 1.25, returning boolean false is deprecated
+ * @return string|array
+ */
+ public function getHelpUrls() {
+ return [];
+ }
+
+ /**
+ * Returns an array of allowed parameters (parameter name) => (default
+ * value) or (parameter name) => (array with PARAM_* constants as keys)
+ * Don't call this function directly: use getFinalParams() to allow
+ * hooks to modify parameters as needed.
+ *
+ * Some derived classes may choose to handle an integer $flags parameter
+ * in the overriding methods. Callers of this method can pass zero or
+ * more OR-ed flags like GET_VALUES_FOR_HELP.
+ *
+ * @return array
+ */
+ protected function getAllowedParams( /* $flags = 0 */ ) {
+ // int $flags is not declared because it causes "Strict standards"
+ // warning. Most derived classes do not implement it.
+ return [];
+ }
+
+ /**
+ * Indicates if this module needs maxlag to be checked
+ * @return bool
+ */
+ public function shouldCheckMaxlag() {
+ return true;
+ }
+
+ /**
+ * Indicates whether this module requires read rights
+ * @return bool
+ */
+ public function isReadMode() {
+ return true;
+ }
+
+ /**
+ * Indicates whether this module requires write mode
+ *
+ * This should return true for modules that may require synchronous database writes.
+ * Modules that do not need such writes should also not rely on master database access,
+ * since only read queries are needed and each master DB is a single point of failure.
+ * Additionally, requests that only need replica DBs can be efficiently routed to any
+ * datacenter via the Promise-Non-Write-API-Action header.
+ *
+ * @return bool
+ */
+ public function isWriteMode() {
+ return false;
+ }
+
+ /**
+ * Indicates whether this module must be called with a POST request
+ * @return bool
+ */
+ public function mustBePosted() {
+ return $this->needsToken() !== false;
+ }
+
+ /**
+ * Indicates whether this module is deprecated
+ * @since 1.25
+ * @return bool
+ */
+ public function isDeprecated() {
+ return false;
+ }
+
+ /**
+ * Indicates whether this module is "internal"
+ * Internal API modules are not (yet) intended for 3rd party use and may be unstable.
+ * @since 1.25
+ * @return bool
+ */
+ public function isInternal() {
+ return false;
+ }
+
+ /**
+ * Returns the token type this module requires in order to execute.
+ *
+ * Modules are strongly encouraged to use the core 'csrf' type unless they
+ * have specialized security needs. If the token type is not one of the
+ * core types, you must use the ApiQueryTokensRegisterTypes hook to
+ * register it.
+ *
+ * Returning a non-falsey value here will force the addition of an
+ * appropriate 'token' parameter in self::getFinalParams(). Also,
+ * self::mustBePosted() must return true when tokens are used.
+ *
+ * In previous versions of MediaWiki, true was a valid return value.
+ * Returning true will generate errors indicating that the API module needs
+ * updating.
+ *
+ * @return string|false
+ */
+ public function needsToken() {
+ return false;
+ }
+
+ /**
+ * Fetch the salt used in the Web UI corresponding to this module.
+ *
+ * Only override this if the Web UI uses a token with a non-constant salt.
+ *
+ * @since 1.24
+ * @param array $params All supplied parameters for the module
+ * @return string|array|null
+ */
+ protected function getWebUITokenSalt( array $params ) {
+ return null;
+ }
+
+ /**
+ * Returns data for HTTP conditional request mechanisms.
+ *
+ * @since 1.26
+ * @param string $condition Condition being queried:
+ * - last-modified: Return a timestamp representing the maximum of the
+ * last-modified dates for all resources involved in the request. See
+ * RFC 7232 § 2.2 for semantics.
+ * - etag: Return an entity-tag representing the state of all resources involved
+ * in the request. Quotes must be included. See RFC 7232 § 2.3 for semantics.
+ * @return string|bool|null As described above, or null if no value is available.
+ */
+ public function getConditionalRequestData( $condition ) {
+ return null;
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Data access methods
+ * @{
+ */
+
+ /**
+ * Get the name of the module being executed by this instance
+ * @return string
+ */
+ public function getModuleName() {
+ return $this->mModuleName;
+ }
+
+ /**
+ * Get parameter prefix (usually two letters or an empty string).
+ * @return string
+ */
+ public function getModulePrefix() {
+ return $this->mModulePrefix;
+ }
+
+ /**
+ * Get the main module
+ * @return ApiMain
+ */
+ public function getMain() {
+ return $this->mMainModule;
+ }
+
+ /**
+ * Returns true if this module is the main module ($this === $this->mMainModule),
+ * false otherwise.
+ * @return bool
+ */
+ public function isMain() {
+ return $this === $this->mMainModule;
+ }
+
+ /**
+ * Get the parent of this module
+ * @since 1.25
+ * @return ApiBase|null
+ */
+ public function getParent() {
+ return $this->isMain() ? null : $this->getMain();
+ }
+
+ /**
+ * Returns true if the current request breaks the same-origin policy.
+ *
+ * For example, json with callbacks.
+ *
+ * https://en.wikipedia.org/wiki/Same-origin_policy
+ *
+ * @since 1.25
+ * @return bool
+ */
+ public function lacksSameOriginSecurity() {
+ // Main module has this method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ self::dieDebug( __METHOD__, 'base method was called on main module.' );
+ }
+
+ return $this->getMain()->lacksSameOriginSecurity();
+ }
+
+ /**
+ * Get the path to this module
+ *
+ * @since 1.25
+ * @return string
+ */
+ public function getModulePath() {
+ if ( $this->isMain() ) {
+ return 'main';
+ } elseif ( $this->getParent()->isMain() ) {
+ return $this->getModuleName();
+ } else {
+ return $this->getParent()->getModulePath() . '+' . $this->getModuleName();
+ }
+ }
+
+ /**
+ * Get a module from its module path
+ *
+ * @since 1.25
+ * @param string $path
+ * @return ApiBase|null
+ * @throws ApiUsageException
+ */
+ public function getModuleFromPath( $path ) {
+ $module = $this->getMain();
+ if ( $path === 'main' ) {
+ return $module;
+ }
+
+ $parts = explode( '+', $path );
+ if ( count( $parts ) === 1 ) {
+ // In case the '+' was typed into URL, it resolves as a space
+ $parts = explode( ' ', $path );
+ }
+
+ $count = count( $parts );
+ for ( $i = 0; $i < $count; $i++ ) {
+ $parent = $module;
+ $manager = $parent->getModuleManager();
+ if ( $manager === null ) {
+ $errorPath = implode( '+', array_slice( $parts, 0, $i ) );
+ $this->dieWithError( [ 'apierror-badmodule-nosubmodules', $errorPath ], 'badmodule' );
+ }
+ $module = $manager->getModule( $parts[$i] );
+
+ if ( $module === null ) {
+ $errorPath = $i ? implode( '+', array_slice( $parts, 0, $i ) ) : $parent->getModuleName();
+ $this->dieWithError(
+ [ 'apierror-badmodule-badsubmodule', $errorPath, wfEscapeWikiText( $parts[$i] ) ],
+ 'badmodule'
+ );
+ }
+ }
+
+ return $module;
+ }
+
+ /**
+ * Get the result object
+ * @return ApiResult
+ */
+ public function getResult() {
+ // Main module has getResult() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ self::dieDebug( __METHOD__, 'base method was called on main module. ' );
+ }
+
+ return $this->getMain()->getResult();
+ }
+
+ /**
+ * Get the error formatter
+ * @return ApiErrorFormatter
+ */
+ public function getErrorFormatter() {
+ // Main module has getErrorFormatter() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ self::dieDebug( __METHOD__, 'base method was called on main module. ' );
+ }
+
+ return $this->getMain()->getErrorFormatter();
+ }
+
+ /**
+ * Gets a default replica DB connection object
+ * @return IDatabase
+ */
+ protected function getDB() {
+ if ( !isset( $this->mSlaveDB ) ) {
+ $this->mSlaveDB = wfGetDB( DB_REPLICA, 'api' );
+ }
+
+ return $this->mSlaveDB;
+ }
+
+ /**
+ * Get the continuation manager
+ * @return ApiContinuationManager|null
+ */
+ public function getContinuationManager() {
+ // Main module has getContinuationManager() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ self::dieDebug( __METHOD__, 'base method was called on main module. ' );
+ }
+
+ return $this->getMain()->getContinuationManager();
+ }
+
+ /**
+ * Set the continuation manager
+ * @param ApiContinuationManager|null $manager
+ */
+ public function setContinuationManager( ApiContinuationManager $manager = null ) {
+ // Main module has setContinuationManager() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ self::dieDebug( __METHOD__, 'base method was called on main module. ' );
+ }
+
+ $this->getMain()->setContinuationManager( $manager );
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Parameter handling
+ * @{
+ */
+
+ /**
+ * Indicate if the module supports dynamically-determined parameters that
+ * cannot be included in self::getAllowedParams().
+ * @return string|array|Message|null Return null if the module does not
+ * support additional dynamic parameters, otherwise return a message
+ * describing them.
+ */
+ public function dynamicParameterDocumentation() {
+ return null;
+ }
+
+ /**
+ * This method mangles parameter name based on the prefix supplied to the constructor.
+ * Override this method to change parameter name during runtime
+ * @param string|string[] $paramName Parameter name
+ * @return string|string[] Prefixed parameter name
+ * @since 1.29 accepts an array of strings
+ */
+ public function encodeParamName( $paramName ) {
+ if ( is_array( $paramName ) ) {
+ return array_map( function ( $name ) {
+ return $this->mModulePrefix . $name;
+ }, $paramName );
+ } else {
+ return $this->mModulePrefix . $paramName;
+ }
+ }
+
+ /**
+ * Using getAllowedParams(), this function makes an array of the values
+ * provided by the user, with key being the name of the variable, and
+ * value - validated value from user or default. limits will not be
+ * parsed if $parseLimit is set to false; use this when the max
+ * limit is not definitive yet, e.g. when getting revisions.
+ * @param bool $parseLimit True by default
+ * @return array
+ */
+ public function extractRequestParams( $parseLimit = true ) {
+ // Cache parameters, for performance and to avoid T26564.
+ if ( !isset( $this->mParamCache[$parseLimit] ) ) {
+ $params = $this->getFinalParams();
+ $results = [];
+
+ if ( $params ) { // getFinalParams() can return false
+ foreach ( $params as $paramName => $paramSettings ) {
+ $results[$paramName] = $this->getParameterFromSettings(
+ $paramName, $paramSettings, $parseLimit );
+ }
+ }
+ $this->mParamCache[$parseLimit] = $results;
+ }
+
+ return $this->mParamCache[$parseLimit];
+ }
+
+ /**
+ * Get a value for the given parameter
+ * @param string $paramName Parameter name
+ * @param bool $parseLimit See extractRequestParams()
+ * @return mixed Parameter value
+ */
+ protected function getParameter( $paramName, $parseLimit = true ) {
+ $paramSettings = $this->getFinalParams()[$paramName];
+
+ return $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+ }
+
+ /**
+ * Die if none or more than one of a certain set of parameters is set and not false.
+ *
+ * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+ * @param string $required,... Names of parameters of which exactly one must be set
+ */
+ public function requireOnlyOneParameter( $params, $required /*...*/ ) {
+ $required = func_get_args();
+ array_shift( $required );
+
+ $intersection = array_intersect( array_keys( array_filter( $params,
+ [ $this, 'parameterNotEmpty' ] ) ), $required );
+
+ if ( count( $intersection ) > 1 ) {
+ $this->dieWithError( [
+ 'apierror-invalidparammix',
+ Message::listParam( array_map(
+ function ( $p ) {
+ return '<var>' . $this->encodeParamName( $p ) . '</var>';
+ },
+ array_values( $intersection )
+ ) ),
+ count( $intersection ),
+ ] );
+ } elseif ( count( $intersection ) == 0 ) {
+ $this->dieWithError( [
+ 'apierror-missingparam-one-of',
+ Message::listParam( array_map(
+ function ( $p ) {
+ return '<var>' . $this->encodeParamName( $p ) . '</var>';
+ },
+ array_values( $required )
+ ) ),
+ count( $required ),
+ ], 'missingparam' );
+ }
+ }
+
+ /**
+ * Die if more than one of a certain set of parameters is set and not false.
+ *
+ * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+ * @param string $required,... Names of parameters of which at most one must be set
+ */
+ public function requireMaxOneParameter( $params, $required /*...*/ ) {
+ $required = func_get_args();
+ array_shift( $required );
+
+ $intersection = array_intersect( array_keys( array_filter( $params,
+ [ $this, 'parameterNotEmpty' ] ) ), $required );
+
+ if ( count( $intersection ) > 1 ) {
+ $this->dieWithError( [
+ 'apierror-invalidparammix',
+ Message::listParam( array_map(
+ function ( $p ) {
+ return '<var>' . $this->encodeParamName( $p ) . '</var>';
+ },
+ array_values( $intersection )
+ ) ),
+ count( $intersection ),
+ ] );
+ }
+ }
+
+ /**
+ * Die if none of a certain set of parameters is set and not false.
+ *
+ * @since 1.23
+ * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+ * @param string $required,... Names of parameters of which at least one must be set
+ */
+ public function requireAtLeastOneParameter( $params, $required /*...*/ ) {
+ $required = func_get_args();
+ array_shift( $required );
+
+ $intersection = array_intersect(
+ array_keys( array_filter( $params, [ $this, 'parameterNotEmpty' ] ) ),
+ $required
+ );
+
+ if ( count( $intersection ) == 0 ) {
+ $this->dieWithError( [
+ 'apierror-missingparam-at-least-one-of',
+ Message::listParam( array_map(
+ function ( $p ) {
+ return '<var>' . $this->encodeParamName( $p ) . '</var>';
+ },
+ array_values( $required )
+ ) ),
+ count( $required ),
+ ], 'missingparam' );
+ }
+ }
+
+ /**
+ * Die if any of the specified parameters were found in the query part of
+ * the URL rather than the post body.
+ * @since 1.28
+ * @param string[] $params Parameters to check
+ * @param string $prefix Set to 'noprefix' to skip calling $this->encodeParamName()
+ */
+ public function requirePostedParameters( $params, $prefix = 'prefix' ) {
+ // Skip if $wgDebugAPI is set or we're in internal mode
+ if ( $this->getConfig()->get( 'DebugAPI' ) || $this->getMain()->isInternalMode() ) {
+ return;
+ }
+
+ $queryValues = $this->getRequest()->getQueryValues();
+ $badParams = [];
+ foreach ( $params as $param ) {
+ if ( $prefix !== 'noprefix' ) {
+ $param = $this->encodeParamName( $param );
+ }
+ if ( array_key_exists( $param, $queryValues ) ) {
+ $badParams[] = $param;
+ }
+ }
+
+ if ( $badParams ) {
+ $this->dieWithError(
+ [ 'apierror-mustpostparams', implode( ', ', $badParams ), count( $badParams ) ]
+ );
+ }
+ }
+
+ /**
+ * Callback function used in requireOnlyOneParameter to check whether required parameters are set
+ *
+ * @param object $x Parameter to check is not null/false
+ * @return bool
+ */
+ private function parameterNotEmpty( $x ) {
+ return !is_null( $x ) && $x !== false;
+ }
+
+ /**
+ * Get a WikiPage object from a title or pageid param, if possible.
+ * Can die, if no param is set or if the title or page id is not valid.
+ *
+ * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+ * @param bool|string $load Whether load the object's state from the database:
+ * - false: don't load (if the pageid is given, it will still be loaded)
+ * - 'fromdb': load from a replica DB
+ * - 'fromdbmaster': load from the master database
+ * @return WikiPage
+ */
+ public function getTitleOrPageId( $params, $load = false ) {
+ $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
+
+ $pageObj = null;
+ if ( isset( $params['title'] ) ) {
+ $titleObj = Title::newFromText( $params['title'] );
+ if ( !$titleObj || $titleObj->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+ if ( !$titleObj->canExist() ) {
+ $this->dieWithError( 'apierror-pagecannotexist' );
+ }
+ $pageObj = WikiPage::factory( $titleObj );
+ if ( $load !== false ) {
+ $pageObj->loadPageData( $load );
+ }
+ } elseif ( isset( $params['pageid'] ) ) {
+ if ( $load === false ) {
+ $load = 'fromdb';
+ }
+ $pageObj = WikiPage::newFromID( $params['pageid'], $load );
+ if ( !$pageObj ) {
+ $this->dieWithError( [ 'apierror-nosuchpageid', $params['pageid'] ] );
+ }
+ }
+
+ return $pageObj;
+ }
+
+ /**
+ * Get a Title object from a title or pageid param, if possible.
+ * Can die, if no param is set or if the title or page id is not valid.
+ *
+ * @since 1.29
+ * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+ * @return Title
+ */
+ public function getTitleFromTitleOrPageId( $params ) {
+ $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
+
+ $titleObj = null;
+ if ( isset( $params['title'] ) ) {
+ $titleObj = Title::newFromText( $params['title'] );
+ if ( !$titleObj || $titleObj->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+ return $titleObj;
+ } elseif ( isset( $params['pageid'] ) ) {
+ $titleObj = Title::newFromID( $params['pageid'] );
+ if ( !$titleObj ) {
+ $this->dieWithError( [ 'apierror-nosuchpageid', $params['pageid'] ] );
+ }
+ }
+
+ return $titleObj;
+ }
+
+ /**
+ * Return true if we're to watch the page, false if not, null if no change.
+ * @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+ * @param Title $titleObj The page under consideration
+ * @param string $userOption The user option to consider when $watchlist=preferences.
+ * If not set will use watchdefault always and watchcreations if $titleObj doesn't exist.
+ * @return bool
+ */
+ protected function getWatchlistValue( $watchlist, $titleObj, $userOption = null ) {
+ $userWatching = $this->getUser()->isWatched( $titleObj, User::IGNORE_USER_RIGHTS );
+
+ switch ( $watchlist ) {
+ case 'watch':
+ return true;
+
+ case 'unwatch':
+ return false;
+
+ case 'preferences':
+ # If the user is already watching, don't bother checking
+ if ( $userWatching ) {
+ return true;
+ }
+ # If no user option was passed, use watchdefault and watchcreations
+ if ( is_null( $userOption ) ) {
+ return $this->getUser()->getBoolOption( 'watchdefault' ) ||
+ $this->getUser()->getBoolOption( 'watchcreations' ) && !$titleObj->exists();
+ }
+
+ # Watch the article based on the user preference
+ return $this->getUser()->getBoolOption( $userOption );
+
+ case 'nochange':
+ return $userWatching;
+
+ default:
+ return $userWatching;
+ }
+ }
+
+ /**
+ * Using the settings determine the value for the given parameter
+ *
+ * @param string $paramName Parameter name
+ * @param array|mixed $paramSettings Default value or an array of settings
+ * using PARAM_* constants.
+ * @param bool $parseLimit Whether to parse and validate 'limit' parameters
+ * @return mixed Parameter value
+ */
+ protected function getParameterFromSettings( $paramName, $paramSettings, $parseLimit ) {
+ // Some classes may decide to change parameter names
+ $encParamName = $this->encodeParamName( $paramName );
+
+ // Shorthand
+ if ( !is_array( $paramSettings ) ) {
+ $paramSettings = [
+ self::PARAM_DFLT => $paramSettings,
+ ];
+ }
+
+ $default = isset( $paramSettings[self::PARAM_DFLT] )
+ ? $paramSettings[self::PARAM_DFLT]
+ : null;
+ $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
+ ? $paramSettings[self::PARAM_ISMULTI]
+ : false;
+ $multiLimit1 = isset( $paramSettings[self::PARAM_ISMULTI_LIMIT1] )
+ ? $paramSettings[self::PARAM_ISMULTI_LIMIT1]
+ : null;
+ $multiLimit2 = isset( $paramSettings[self::PARAM_ISMULTI_LIMIT2] )
+ ? $paramSettings[self::PARAM_ISMULTI_LIMIT2]
+ : null;
+ $type = isset( $paramSettings[self::PARAM_TYPE] )
+ ? $paramSettings[self::PARAM_TYPE]
+ : null;
+ $dupes = isset( $paramSettings[self::PARAM_ALLOW_DUPLICATES] )
+ ? $paramSettings[self::PARAM_ALLOW_DUPLICATES]
+ : false;
+ $deprecated = isset( $paramSettings[self::PARAM_DEPRECATED] )
+ ? $paramSettings[self::PARAM_DEPRECATED]
+ : false;
+ $deprecatedValues = isset( $paramSettings[self::PARAM_DEPRECATED_VALUES] )
+ ? $paramSettings[self::PARAM_DEPRECATED_VALUES]
+ : [];
+ $required = isset( $paramSettings[self::PARAM_REQUIRED] )
+ ? $paramSettings[self::PARAM_REQUIRED]
+ : false;
+ $allowAll = isset( $paramSettings[self::PARAM_ALL] )
+ ? $paramSettings[self::PARAM_ALL]
+ : false;
+
+ // When type is not given, and no choices, the type is the same as $default
+ if ( !isset( $type ) ) {
+ if ( isset( $default ) ) {
+ $type = gettype( $default );
+ } else {
+ $type = 'NULL'; // allow everything
+ }
+ }
+
+ if ( $type == 'password' || !empty( $paramSettings[self::PARAM_SENSITIVE] ) ) {
+ $this->getMain()->markParamsSensitive( $encParamName );
+ }
+
+ if ( $type == 'boolean' ) {
+ if ( isset( $default ) && $default !== false ) {
+ // Having a default value of anything other than 'false' is not allowed
+ self::dieDebug(
+ __METHOD__,
+ "Boolean param $encParamName's default is set to '$default'. " .
+ 'Boolean parameters must default to false.'
+ );
+ }
+
+ $value = $this->getMain()->getCheck( $encParamName );
+ } elseif ( $type == 'upload' ) {
+ if ( isset( $default ) ) {
+ // Having a default value is not allowed
+ self::dieDebug(
+ __METHOD__,
+ "File upload param $encParamName's default is set to " .
+ "'$default'. File upload parameters may not have a default." );
+ }
+ if ( $multi ) {
+ self::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
+ }
+ $value = $this->getMain()->getUpload( $encParamName );
+ if ( !$value->exists() ) {
+ // This will get the value without trying to normalize it
+ // (because trying to normalize a large binary file
+ // accidentally uploaded as a field fails spectacularly)
+ $value = $this->getMain()->getRequest()->unsetVal( $encParamName );
+ if ( $value !== null ) {
+ $this->dieWithError(
+ [ 'apierror-badupload', $encParamName ],
+ "badupload_{$encParamName}"
+ );
+ }
+ }
+ } else {
+ $value = $this->getMain()->getVal( $encParamName, $default );
+
+ if ( isset( $value ) && $type == 'namespace' ) {
+ $type = MWNamespace::getValidNamespaces();
+ if ( isset( $paramSettings[self::PARAM_EXTRA_NAMESPACES] ) &&
+ is_array( $paramSettings[self::PARAM_EXTRA_NAMESPACES] )
+ ) {
+ $type = array_merge( $type, $paramSettings[self::PARAM_EXTRA_NAMESPACES] );
+ }
+ // Namespace parameters allow ALL_DEFAULT_STRING to be used to
+ // specify all namespaces irrespective of PARAM_ALL.
+ $allowAll = true;
+ }
+ if ( isset( $value ) && $type == 'submodule' ) {
+ if ( isset( $paramSettings[self::PARAM_SUBMODULE_MAP] ) ) {
+ $type = array_keys( $paramSettings[self::PARAM_SUBMODULE_MAP] );
+ } else {
+ $type = $this->getModuleManager()->getNames( $paramName );
+ }
+ }
+
+ $request = $this->getMain()->getRequest();
+ $rawValue = $request->getRawVal( $encParamName );
+ if ( $rawValue === null ) {
+ $rawValue = $default;
+ }
+
+ // Preserve U+001F for self::parseMultiValue(), or error out if that won't be called
+ if ( isset( $value ) && substr( $rawValue, 0, 1 ) === "\x1f" ) {
+ if ( $multi ) {
+ // This loses the potential $wgContLang->checkTitleEncoding() transformation
+ // done by WebRequest for $_GET. Let's call that a feature.
+ $value = implode( "\x1f", $request->normalizeUnicode( explode( "\x1f", $rawValue ) ) );
+ } else {
+ $this->dieWithError( 'apierror-badvalue-notmultivalue', 'badvalue_notmultivalue' );
+ }
+ }
+
+ // Check for NFC normalization, and warn
+ if ( $rawValue !== $value ) {
+ $this->handleParamNormalization( $paramName, $value, $rawValue );
+ }
+ }
+
+ $allSpecifier = ( is_string( $allowAll ) ? $allowAll : self::ALL_DEFAULT_STRING );
+ if ( $allowAll && $multi && is_array( $type ) && in_array( $allSpecifier, $type, true ) ) {
+ self::dieDebug(
+ __METHOD__,
+ "For param $encParamName, PARAM_ALL collides with a possible value" );
+ }
+ if ( isset( $value ) && ( $multi || is_array( $type ) ) ) {
+ $value = $this->parseMultiValue(
+ $encParamName,
+ $value,
+ $multi,
+ is_array( $type ) ? $type : null,
+ $allowAll ? $allSpecifier : null,
+ $multiLimit1,
+ $multiLimit2
+ );
+ }
+
+ if ( isset( $value ) ) {
+ // More validation only when choices were not given
+ // choices were validated in parseMultiValue()
+ if ( !is_array( $type ) ) {
+ switch ( $type ) {
+ case 'NULL': // nothing to do
+ break;
+ case 'string':
+ case 'text':
+ case 'password':
+ if ( $required && $value === '' ) {
+ $this->dieWithError( [ 'apierror-missingparam', $paramName ] );
+ }
+ break;
+ case 'integer': // Force everything using intval() and optionally validate limits
+ $min = isset( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : null;
+ $max = isset( $paramSettings[self::PARAM_MAX] ) ? $paramSettings[self::PARAM_MAX] : null;
+ $enforceLimits = isset( $paramSettings[self::PARAM_RANGE_ENFORCE] )
+ ? $paramSettings[self::PARAM_RANGE_ENFORCE] : false;
+
+ if ( is_array( $value ) ) {
+ $value = array_map( 'intval', $value );
+ if ( !is_null( $min ) || !is_null( $max ) ) {
+ foreach ( $value as &$v ) {
+ $this->validateLimit( $paramName, $v, $min, $max, null, $enforceLimits );
+ }
+ }
+ } else {
+ $value = intval( $value );
+ if ( !is_null( $min ) || !is_null( $max ) ) {
+ $this->validateLimit( $paramName, $value, $min, $max, null, $enforceLimits );
+ }
+ }
+ break;
+ case 'limit':
+ if ( !$parseLimit ) {
+ // Don't do any validation whatsoever
+ break;
+ }
+ if ( !isset( $paramSettings[self::PARAM_MAX] )
+ || !isset( $paramSettings[self::PARAM_MAX2] )
+ ) {
+ self::dieDebug(
+ __METHOD__,
+ "MAX1 or MAX2 are not defined for the limit $encParamName"
+ );
+ }
+ if ( $multi ) {
+ self::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
+ }
+ $min = isset( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : 0;
+ if ( $value == 'max' ) {
+ $value = $this->getMain()->canApiHighLimits()
+ ? $paramSettings[self::PARAM_MAX2]
+ : $paramSettings[self::PARAM_MAX];
+ $this->getResult()->addParsedLimit( $this->getModuleName(), $value );
+ } else {
+ $value = intval( $value );
+ $this->validateLimit(
+ $paramName,
+ $value,
+ $min,
+ $paramSettings[self::PARAM_MAX],
+ $paramSettings[self::PARAM_MAX2]
+ );
+ }
+ break;
+ case 'boolean':
+ if ( $multi ) {
+ self::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
+ }
+ break;
+ case 'timestamp':
+ if ( is_array( $value ) ) {
+ foreach ( $value as $key => $val ) {
+ $value[$key] = $this->validateTimestamp( $val, $encParamName );
+ }
+ } else {
+ $value = $this->validateTimestamp( $value, $encParamName );
+ }
+ break;
+ case 'user':
+ if ( is_array( $value ) ) {
+ foreach ( $value as $key => $val ) {
+ $value[$key] = $this->validateUser( $val, $encParamName );
+ }
+ } else {
+ $value = $this->validateUser( $value, $encParamName );
+ }
+ break;
+ case 'upload': // nothing to do
+ break;
+ case 'tags':
+ // If change tagging was requested, check that the tags are valid.
+ if ( !is_array( $value ) && !$multi ) {
+ $value = [ $value ];
+ }
+ $tagsStatus = ChangeTags::canAddTagsAccompanyingChange( $value );
+ if ( !$tagsStatus->isGood() ) {
+ $this->dieStatus( $tagsStatus );
+ }
+ break;
+ default:
+ self::dieDebug( __METHOD__, "Param $encParamName's type is unknown - $type" );
+ }
+ }
+
+ // Throw out duplicates if requested
+ if ( !$dupes && is_array( $value ) ) {
+ $value = array_unique( $value );
+ }
+
+ if ( in_array( $type, [ 'NULL', 'string', 'text', 'password' ], true ) ) {
+ foreach ( (array)$value as $val ) {
+ if ( isset( $paramSettings[self::PARAM_MAX_BYTES] )
+ && strlen( $val ) > $paramSettings[self::PARAM_MAX_BYTES]
+ ) {
+ $this->dieWithError( [ 'apierror-maxbytes', $encParamName,
+ $paramSettings[self::PARAM_MAX_BYTES] ] );
+ }
+ if ( isset( $paramSettings[self::PARAM_MAX_CHARS] )
+ && mb_strlen( $val, 'UTF-8' ) > $paramSettings[self::PARAM_MAX_CHARS]
+ ) {
+ $this->dieWithError( [ 'apierror-maxchars', $encParamName,
+ $paramSettings[self::PARAM_MAX_CHARS] ] );
+ }
+ }
+ }
+
+ // Set a warning if a deprecated parameter has been passed
+ if ( $deprecated && $value !== false ) {
+ $feature = $encParamName;
+ $m = $this;
+ while ( !$m->isMain() ) {
+ $p = $m->getParent();
+ $name = $m->getModuleName();
+ $param = $p->encodeParamName( $p->getModuleManager()->getModuleGroup( $name ) );
+ $feature = "{$param}={$name}&{$feature}";
+ $m = $p;
+ }
+ $this->addDeprecation( [ 'apiwarn-deprecation-parameter', $encParamName ], $feature );
+ }
+
+ // Set a warning if a deprecated parameter value has been passed
+ $usedDeprecatedValues = $deprecatedValues && $value !== false
+ ? array_intersect( array_keys( $deprecatedValues ), (array)$value )
+ : [];
+ if ( $usedDeprecatedValues ) {
+ $feature = "$encParamName=";
+ $m = $this;
+ while ( !$m->isMain() ) {
+ $p = $m->getParent();
+ $name = $m->getModuleName();
+ $param = $p->encodeParamName( $p->getModuleManager()->getModuleGroup( $name ) );
+ $feature = "{$param}={$name}&{$feature}";
+ $m = $p;
+ }
+ foreach ( $usedDeprecatedValues as $v ) {
+ $msg = $deprecatedValues[$v];
+ if ( $msg === true ) {
+ $msg = [ 'apiwarn-deprecation-parameter', "$encParamName=$v" ];
+ }
+ $this->addDeprecation( $msg, "$feature$v" );
+ }
+ }
+ } elseif ( $required ) {
+ $this->dieWithError( [ 'apierror-missingparam', $paramName ] );
+ }
+
+ return $value;
+ }
+
+ /**
+ * Handle when a parameter was Unicode-normalized
+ * @since 1.28
+ * @param string $paramName Unprefixed parameter name
+ * @param string $value Input that will be used.
+ * @param string $rawValue Input before normalization.
+ */
+ protected function handleParamNormalization( $paramName, $value, $rawValue ) {
+ $encParamName = $this->encodeParamName( $paramName );
+ $this->addWarning( [ 'apiwarn-badutf8', $encParamName ] );
+ }
+
+ /**
+ * Split a multi-valued parameter string, like explode()
+ * @since 1.28
+ * @param string $value
+ * @param int $limit
+ * @return string[]
+ */
+ protected function explodeMultiValue( $value, $limit ) {
+ if ( substr( $value, 0, 1 ) === "\x1f" ) {
+ $sep = "\x1f";
+ $value = substr( $value, 1 );
+ } else {
+ $sep = '|';
+ }
+
+ return explode( $sep, $value, $limit );
+ }
+
+ /**
+ * Return an array of values that were given in a 'a|b|c' notation,
+ * after it optionally validates them against the list allowed values.
+ *
+ * @param string $valueName The name of the parameter (for error
+ * reporting)
+ * @param mixed $value The value being parsed
+ * @param bool $allowMultiple Can $value contain more than one value
+ * separated by '|'?
+ * @param string[]|null $allowedValues An array of values to check against. If
+ * null, all values are accepted.
+ * @param string|null $allSpecifier String to use to specify all allowed values, or null
+ * if this behavior should not be allowed
+ * @param int|null $limit1 Maximum number of values, for normal users.
+ * @param int|null $limit2 Maximum number of values, for users with the apihighlimits right.
+ * @return string|string[] (allowMultiple ? an_array_of_values : a_single_value)
+ */
+ protected function parseMultiValue( $valueName, $value, $allowMultiple, $allowedValues,
+ $allSpecifier = null, $limit1 = null, $limit2 = null
+ ) {
+ if ( ( $value === '' || $value === "\x1f" ) && $allowMultiple ) {
+ return [];
+ }
+ $limit1 = $limit1 ?: self::LIMIT_SML1;
+ $limit2 = $limit2 ?: self::LIMIT_SML2;
+
+ // This is a bit awkward, but we want to avoid calling canApiHighLimits()
+ // because it unstubs $wgUser
+ $valuesList = $this->explodeMultiValue( $value, $limit2 + 1 );
+ $sizeLimit = count( $valuesList ) > $limit1 && $this->mMainModule->canApiHighLimits()
+ ? $limit2
+ : $limit1;
+
+ if ( $allowMultiple && is_array( $allowedValues ) && $allSpecifier &&
+ count( $valuesList ) === 1 && $valuesList[0] === $allSpecifier
+ ) {
+ return $allowedValues;
+ }
+
+ if ( self::truncateArray( $valuesList, $sizeLimit ) ) {
+ $this->addDeprecation(
+ [ 'apiwarn-toomanyvalues', $valueName, $sizeLimit ],
+ "too-many-$valueName-for-{$this->getModulePath()}"
+ );
+ }
+
+ if ( !$allowMultiple && count( $valuesList ) != 1 ) {
+ // T35482 - Allow entries with | in them for non-multiple values
+ if ( in_array( $value, $allowedValues, true ) ) {
+ return $value;
+ }
+
+ $values = array_map( function ( $v ) {
+ return '<kbd>' . wfEscapeWikiText( $v ) . '</kbd>';
+ }, $allowedValues );
+ $this->dieWithError( [
+ 'apierror-multival-only-one-of',
+ $valueName,
+ Message::listParam( $values ),
+ count( $values ),
+ ], "multival_$valueName" );
+ }
+
+ if ( is_array( $allowedValues ) ) {
+ // Check for unknown values
+ $unknown = array_map( 'wfEscapeWikiText', array_diff( $valuesList, $allowedValues ) );
+ if ( count( $unknown ) ) {
+ if ( $allowMultiple ) {
+ $this->addWarning( [
+ 'apiwarn-unrecognizedvalues',
+ $valueName,
+ Message::listParam( $unknown, 'comma' ),
+ count( $unknown ),
+ ] );
+ } else {
+ $this->dieWithError(
+ [ 'apierror-unrecognizedvalue', $valueName, wfEscapeWikiText( $valuesList[0] ) ],
+ "unknown_$valueName"
+ );
+ }
+ }
+ // Now throw them out
+ $valuesList = array_intersect( $valuesList, $allowedValues );
+ }
+
+ return $allowMultiple ? $valuesList : $valuesList[0];
+ }
+
+ /**
+ * Validate the value against the minimum and user/bot maximum limits.
+ * Prints usage info on failure.
+ * @param string $paramName Parameter name
+ * @param int &$value Parameter value
+ * @param int|null $min Minimum value
+ * @param int|null $max Maximum value for users
+ * @param int $botMax Maximum value for sysops/bots
+ * @param bool $enforceLimits Whether to enforce (die) if value is outside limits
+ */
+ protected function validateLimit( $paramName, &$value, $min, $max, $botMax = null,
+ $enforceLimits = false
+ ) {
+ if ( !is_null( $min ) && $value < $min ) {
+ $msg = ApiMessage::create(
+ [ 'apierror-integeroutofrange-belowminimum',
+ $this->encodeParamName( $paramName ), $min, $value ],
+ 'integeroutofrange',
+ [ 'min' => $min, 'max' => $max, 'botMax' => $botMax ?: $max ]
+ );
+ $this->warnOrDie( $msg, $enforceLimits );
+ $value = $min;
+ }
+
+ // Minimum is always validated, whereas maximum is checked only if not
+ // running in internal call mode
+ if ( $this->getMain()->isInternalMode() ) {
+ return;
+ }
+
+ // Optimization: do not check user's bot status unless really needed -- skips db query
+ // assumes $botMax >= $max
+ if ( !is_null( $max ) && $value > $max ) {
+ if ( !is_null( $botMax ) && $this->getMain()->canApiHighLimits() ) {
+ if ( $value > $botMax ) {
+ $msg = ApiMessage::create(
+ [ 'apierror-integeroutofrange-abovebotmax',
+ $this->encodeParamName( $paramName ), $botMax, $value ],
+ 'integeroutofrange',
+ [ 'min' => $min, 'max' => $max, 'botMax' => $botMax ?: $max ]
+ );
+ $this->warnOrDie( $msg, $enforceLimits );
+ $value = $botMax;
+ }
+ } else {
+ $msg = ApiMessage::create(
+ [ 'apierror-integeroutofrange-abovemax',
+ $this->encodeParamName( $paramName ), $max, $value ],
+ 'integeroutofrange',
+ [ 'min' => $min, 'max' => $max, 'botMax' => $botMax ?: $max ]
+ );
+ $this->warnOrDie( $msg, $enforceLimits );
+ $value = $max;
+ }
+ }
+ }
+
+ /**
+ * Validate and normalize parameters of type 'timestamp'
+ * @param string $value Parameter value
+ * @param string $encParamName Parameter name
+ * @return string Validated and normalized parameter
+ */
+ protected function validateTimestamp( $value, $encParamName ) {
+ // Confusing synonyms for the current time accepted by wfTimestamp()
+ // (wfTimestamp() also accepts various non-strings and the string of 14
+ // ASCII NUL bytes, but those can't get here)
+ if ( !$value ) {
+ $this->addDeprecation(
+ [ 'apiwarn-unclearnowtimestamp', $encParamName, wfEscapeWikiText( $value ) ],
+ 'unclear-"now"-timestamp'
+ );
+ return wfTimestamp( TS_MW );
+ }
+
+ // Explicit synonym for the current time
+ if ( $value === 'now' ) {
+ return wfTimestamp( TS_MW );
+ }
+
+ $timestamp = wfTimestamp( TS_MW, $value );
+ if ( $timestamp === false ) {
+ $this->dieWithError(
+ [ 'apierror-badtimestamp', $encParamName, wfEscapeWikiText( $value ) ],
+ "badtimestamp_{$encParamName}"
+ );
+ }
+
+ return $timestamp;
+ }
+
+ /**
+ * Validate the supplied token.
+ *
+ * @since 1.24
+ * @param string $token Supplied token
+ * @param array $params All supplied parameters for the module
+ * @return bool
+ * @throws MWException
+ */
+ final public function validateToken( $token, array $params ) {
+ $tokenType = $this->needsToken();
+ $salts = ApiQueryTokens::getTokenTypeSalts();
+ if ( !isset( $salts[$tokenType] ) ) {
+ throw new MWException(
+ "Module '{$this->getModuleName()}' tried to use token type '$tokenType' " .
+ 'without registering it'
+ );
+ }
+
+ $tokenObj = ApiQueryTokens::getToken(
+ $this->getUser(), $this->getRequest()->getSession(), $salts[$tokenType]
+ );
+ if ( $tokenObj->match( $token ) ) {
+ return true;
+ }
+
+ $webUiSalt = $this->getWebUITokenSalt( $params );
+ if ( $webUiSalt !== null && $this->getUser()->matchEditToken(
+ $token,
+ $webUiSalt,
+ $this->getRequest()
+ ) ) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Validate and normalize parameters of type 'user'
+ * @param string $value Parameter value
+ * @param string $encParamName Parameter name
+ * @return string Validated and normalized parameter
+ */
+ private function validateUser( $value, $encParamName ) {
+ if ( ExternalUserNames::isExternal( $value ) && User::newFromName( $value, false ) ) {
+ return $value;
+ }
+
+ $titleObj = Title::makeTitleSafe( NS_USER, $value );
+
+ if ( $titleObj ) {
+ $value = $titleObj->getText();
+ }
+
+ if (
+ !User::isValidUserName( $value ) &&
+ // We allow ranges as well, for blocks.
+ !IP::isIPAddress( $value ) &&
+ // See comment for User::isIP. We don't just call that function
+ // here because it also returns true for things like
+ // 300.300.300.300 that are neither valid usernames nor valid IP
+ // addresses.
+ !preg_match(
+ '/^' . RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.xxx$/',
+ $value
+ )
+ ) {
+ $this->dieWithError(
+ [ 'apierror-baduser', $encParamName, wfEscapeWikiText( $value ) ],
+ "baduser_{$encParamName}"
+ );
+ }
+
+ return $value;
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Utility methods
+ * @{
+ */
+
+ /**
+ * Set a watch (or unwatch) based the based on a watchlist parameter.
+ * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+ * @param Title $titleObj The article's title to change
+ * @param string $userOption The user option to consider when $watch=preferences
+ */
+ protected function setWatch( $watch, $titleObj, $userOption = null ) {
+ $value = $this->getWatchlistValue( $watch, $titleObj, $userOption );
+ if ( $value === null ) {
+ return;
+ }
+
+ WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() );
+ }
+
+ /**
+ * Truncate an array to a certain length.
+ * @param array &$arr Array to truncate
+ * @param int $limit Maximum length
+ * @return bool True if the array was truncated, false otherwise
+ */
+ public static function truncateArray( &$arr, $limit ) {
+ $modified = false;
+ while ( count( $arr ) > $limit ) {
+ array_pop( $arr );
+ $modified = true;
+ }
+
+ return $modified;
+ }
+
+ /**
+ * Gets the user for whom to get the watchlist
+ *
+ * @param array $params
+ * @return User
+ */
+ public function getWatchlistUser( $params ) {
+ if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) {
+ $user = User::newFromName( $params['owner'], false );
+ if ( !( $user && $user->getId() ) ) {
+ $this->dieWithError(
+ [ 'nosuchusershort', wfEscapeWikiText( $params['owner'] ) ], 'bad_wlowner'
+ );
+ }
+ $token = $user->getOption( 'watchlisttoken' );
+ if ( $token == '' || !hash_equals( $token, $params['token'] ) ) {
+ $this->dieWithError( 'apierror-bad-watchlist-token', 'bad_wltoken' );
+ }
+ } else {
+ if ( !$this->getUser()->isLoggedIn() ) {
+ $this->dieWithError( 'watchlistanontext', 'notloggedin' );
+ }
+ $this->checkUserRightsAny( 'viewmywatchlist' );
+ $user = $this->getUser();
+ }
+
+ return $user;
+ }
+
+ /**
+ * A subset of wfEscapeWikiText for BC texts
+ *
+ * @since 1.25
+ * @param string|array $v
+ * @return string|array
+ */
+ private static function escapeWikiText( $v ) {
+ if ( is_array( $v ) ) {
+ return array_map( 'self::escapeWikiText', $v );
+ } else {
+ return strtr( $v, [
+ '__' => '_&#95;', '{' => '&#123;', '}' => '&#125;',
+ '[[Category:' => '[[:Category:',
+ '[[File:' => '[[:File:', '[[Image:' => '[[:Image:',
+ ] );
+ }
+ }
+
+ /**
+ * Create a Message from a string or array
+ *
+ * A string is used as a message key. An array has the message key as the
+ * first value and message parameters as subsequent values.
+ *
+ * @since 1.25
+ * @param string|array|Message $msg
+ * @param IContextSource $context
+ * @param array $params
+ * @return Message|null
+ */
+ public static function makeMessage( $msg, IContextSource $context, array $params = null ) {
+ if ( is_string( $msg ) ) {
+ $msg = wfMessage( $msg );
+ } elseif ( is_array( $msg ) ) {
+ $msg = call_user_func_array( 'wfMessage', $msg );
+ }
+ if ( !$msg instanceof Message ) {
+ return null;
+ }
+
+ $msg->setContext( $context );
+ if ( $params ) {
+ $msg->params( $params );
+ }
+
+ return $msg;
+ }
+
+ /**
+ * Turn an array of message keys or key+param arrays into a Status
+ * @since 1.29
+ * @param array $errors
+ * @param User|null $user
+ * @return Status
+ */
+ public function errorArrayToStatus( array $errors, User $user = null ) {
+ if ( $user === null ) {
+ $user = $this->getUser();
+ }
+
+ $status = Status::newGood();
+ foreach ( $errors as $error ) {
+ if ( is_array( $error ) && $error[0] === 'blockedtext' && $user->getBlock() ) {
+ $status->fatal( ApiMessage::create(
+ 'apierror-blocked',
+ 'blocked',
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
+ ) );
+ } elseif ( is_array( $error ) && $error[0] === 'autoblockedtext' && $user->getBlock() ) {
+ $status->fatal( ApiMessage::create(
+ 'apierror-autoblocked',
+ 'autoblocked',
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
+ ) );
+ } elseif ( is_array( $error ) && $error[0] === 'systemblockedtext' && $user->getBlock() ) {
+ $status->fatal( ApiMessage::create(
+ 'apierror-systemblocked',
+ 'blocked',
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
+ ) );
+ } else {
+ call_user_func_array( [ $status, 'fatal' ], (array)$error );
+ }
+ }
+ return $status;
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Warning and error reporting
+ * @{
+ */
+
+ /**
+ * Add a warning for this module.
+ *
+ * Users should monitor this section to notice any changes in API. Multiple
+ * calls to this function will result in multiple warning messages.
+ *
+ * If $msg is not an ApiMessage, the message code will be derived from the
+ * message key by stripping any "apiwarn-" or "apierror-" prefix.
+ *
+ * @since 1.29
+ * @param string|array|Message $msg See ApiErrorFormatter::addWarning()
+ * @param string|null $code See ApiErrorFormatter::addWarning()
+ * @param array|null $data See ApiErrorFormatter::addWarning()
+ */
+ public function addWarning( $msg, $code = null, $data = null ) {
+ $this->getErrorFormatter()->addWarning( $this->getModulePath(), $msg, $code, $data );
+ }
+
+ /**
+ * Add a deprecation warning for this module.
+ *
+ * A combination of $this->addWarning() and $this->logFeatureUsage()
+ *
+ * @since 1.29
+ * @param string|array|Message $msg See ApiErrorFormatter::addWarning()
+ * @param string|null $feature See ApiBase::logFeatureUsage()
+ * @param array|null $data See ApiErrorFormatter::addWarning()
+ */
+ public function addDeprecation( $msg, $feature, $data = [] ) {
+ $data = (array)$data;
+ if ( $feature !== null ) {
+ $data['feature'] = $feature;
+ $this->logFeatureUsage( $feature );
+ }
+ $this->addWarning( $msg, 'deprecation', $data );
+
+ // No real need to deduplicate here, ApiErrorFormatter does that for
+ // us (assuming the hook is deterministic).
+ $msgs = [ $this->msg( 'api-usage-mailinglist-ref' ) ];
+ Hooks::run( 'ApiDeprecationHelp', [ &$msgs ] );
+ if ( count( $msgs ) > 1 ) {
+ $key = '$' . implode( ' $', range( 1, count( $msgs ) ) );
+ $msg = ( new RawMessage( $key ) )->params( $msgs );
+ } else {
+ $msg = reset( $msgs );
+ }
+ $this->getMain()->addWarning( $msg, 'deprecation-help' );
+ }
+
+ /**
+ * Add an error for this module without aborting
+ *
+ * If $msg is not an ApiMessage, the message code will be derived from the
+ * message key by stripping any "apiwarn-" or "apierror-" prefix.
+ *
+ * @note If you want to abort processing, use self::dieWithError() instead.
+ * @since 1.29
+ * @param string|array|Message $msg See ApiErrorFormatter::addError()
+ * @param string|null $code See ApiErrorFormatter::addError()
+ * @param array|null $data See ApiErrorFormatter::addError()
+ */
+ public function addError( $msg, $code = null, $data = null ) {
+ $this->getErrorFormatter()->addError( $this->getModulePath(), $msg, $code, $data );
+ }
+
+ /**
+ * Add warnings and/or errors from a Status
+ *
+ * @note If you want to abort processing, use self::dieStatus() instead.
+ * @since 1.29
+ * @param StatusValue $status
+ * @param string[] $types 'warning' and/or 'error'
+ */
+ public function addMessagesFromStatus( StatusValue $status, $types = [ 'warning', 'error' ] ) {
+ $this->getErrorFormatter()->addMessagesFromStatus( $this->getModulePath(), $status, $types );
+ }
+
+ /**
+ * Abort execution with an error
+ *
+ * If $msg is not an ApiMessage, the message code will be derived from the
+ * message key by stripping any "apiwarn-" or "apierror-" prefix.
+ *
+ * @since 1.29
+ * @param string|array|Message $msg See ApiErrorFormatter::addError()
+ * @param string|null $code See ApiErrorFormatter::addError()
+ * @param array|null $data See ApiErrorFormatter::addError()
+ * @param int|null $httpCode HTTP error code to use
+ * @throws ApiUsageException always
+ */
+ public function dieWithError( $msg, $code = null, $data = null, $httpCode = null ) {
+ throw ApiUsageException::newWithMessage( $this, $msg, $code, $data, $httpCode );
+ }
+
+ /**
+ * Abort execution with an error derived from an exception
+ *
+ * @since 1.29
+ * @param Exception|Throwable $exception See ApiErrorFormatter::getMessageFromException()
+ * @param array $options See ApiErrorFormatter::getMessageFromException()
+ * @throws ApiUsageException always
+ */
+ public function dieWithException( $exception, array $options = [] ) {
+ $this->dieWithError(
+ $this->getErrorFormatter()->getMessageFromException( $exception, $options )
+ );
+ }
+
+ /**
+ * Adds a warning to the output, else dies
+ *
+ * @param ApiMessage $msg Message to show as a warning, or error message if dying
+ * @param bool $enforceLimits Whether this is an enforce (die)
+ */
+ private function warnOrDie( ApiMessage $msg, $enforceLimits = false ) {
+ if ( $enforceLimits ) {
+ $this->dieWithError( $msg );
+ } else {
+ $this->addWarning( $msg );
+ }
+ }
+
+ /**
+ * Throw an ApiUsageException, which will (if uncaught) call the main module's
+ * error handler and die with an error message including block info.
+ *
+ * @since 1.27
+ * @param Block $block The block used to generate the ApiUsageException
+ * @throws ApiUsageException always
+ */
+ public function dieBlocked( Block $block ) {
+ // Die using the appropriate message depending on block type
+ if ( $block->getType() == Block::TYPE_AUTO ) {
+ $this->dieWithError(
+ 'apierror-autoblocked',
+ 'autoblocked',
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $block ) ]
+ );
+ } else {
+ $this->dieWithError(
+ 'apierror-blocked',
+ 'blocked',
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $block ) ]
+ );
+ }
+ }
+
+ /**
+ * Throw an ApiUsageException based on the Status object.
+ *
+ * @since 1.22
+ * @since 1.29 Accepts a StatusValue
+ * @param StatusValue $status
+ * @throws ApiUsageException always
+ */
+ public function dieStatus( StatusValue $status ) {
+ if ( $status->isGood() ) {
+ throw new MWException( 'Successful status passed to ApiBase::dieStatus' );
+ }
+
+ // ApiUsageException needs a fatal status, but this method has
+ // historically accepted any non-good status. Convert it if necessary.
+ $status->setOK( false );
+ if ( !$status->getErrorsByType( 'error' ) ) {
+ $newStatus = Status::newGood();
+ foreach ( $status->getErrorsByType( 'warning' ) as $err ) {
+ call_user_func_array(
+ [ $newStatus, 'fatal' ],
+ array_merge( [ $err['message'] ], $err['params'] )
+ );
+ }
+ if ( !$newStatus->getErrorsByType( 'error' ) ) {
+ $newStatus->fatal( 'unknownerror-nocode' );
+ }
+ $status = $newStatus;
+ }
+
+ throw new ApiUsageException( $this, $status );
+ }
+
+ /**
+ * Helper function for readonly errors
+ *
+ * @throws ApiUsageException always
+ */
+ public function dieReadOnly() {
+ $this->dieWithError(
+ 'apierror-readonly',
+ 'readonly',
+ [ 'readonlyreason' => wfReadOnlyReason() ]
+ );
+ }
+
+ /**
+ * Helper function for permission-denied errors
+ * @since 1.29
+ * @param string|string[] $rights
+ * @param User|null $user
+ * @throws ApiUsageException if the user doesn't have any of the rights.
+ * The error message is based on $rights[0].
+ */
+ public function checkUserRightsAny( $rights, $user = null ) {
+ if ( !$user ) {
+ $user = $this->getUser();
+ }
+ $rights = (array)$rights;
+ if ( !call_user_func_array( [ $user, 'isAllowedAny' ], $rights ) ) {
+ $this->dieWithError( [ 'apierror-permissiondenied', $this->msg( "action-{$rights[0]}" ) ] );
+ }
+ }
+
+ /**
+ * Helper function for permission-denied errors
+ * @since 1.29
+ * @param Title $title
+ * @param string|string[] $actions
+ * @param User|null $user
+ * @throws ApiUsageException if the user doesn't have all of the rights.
+ */
+ public function checkTitleUserPermissions( Title $title, $actions, $user = null ) {
+ if ( !$user ) {
+ $user = $this->getUser();
+ }
+
+ $errors = [];
+ foreach ( (array)$actions as $action ) {
+ $errors = array_merge( $errors, $title->getUserPermissionsErrors( $action, $user ) );
+ }
+ if ( $errors ) {
+ $this->dieStatus( $this->errorArrayToStatus( $errors, $user ) );
+ }
+ }
+
+ /**
+ * Will only set a warning instead of failing if the global $wgDebugAPI
+ * is set to true. Otherwise behaves exactly as self::dieWithError().
+ *
+ * @since 1.29
+ * @param string|array|Message $msg
+ * @param string|null $code
+ * @param array|null $data
+ * @param int|null $httpCode
+ * @throws ApiUsageException
+ */
+ public function dieWithErrorOrDebug( $msg, $code = null, $data = null, $httpCode = null ) {
+ if ( $this->getConfig()->get( 'DebugAPI' ) !== true ) {
+ $this->dieWithError( $msg, $code, $data, $httpCode );
+ } else {
+ $this->addWarning( $msg, $code, $data );
+ }
+ }
+
+ /**
+ * Die with the 'badcontinue' error.
+ *
+ * This call is common enough to make it into the base method.
+ *
+ * @param bool $condition Will only die if this value is true
+ * @throws ApiUsageException
+ * @since 1.21
+ */
+ protected function dieContinueUsageIf( $condition ) {
+ if ( $condition ) {
+ $this->dieWithError( 'apierror-badcontinue' );
+ }
+ }
+
+ /**
+ * Internal code errors should be reported with this method
+ * @param string $method Method or function name
+ * @param string $message Error message
+ * @throws MWException always
+ */
+ protected static function dieDebug( $method, $message ) {
+ throw new MWException( "Internal error in $method: $message" );
+ }
+
+ /**
+ * Write logging information for API features to a debug log, for usage
+ * analysis.
+ * @note Consider using $this->addDeprecation() instead to both warn and log.
+ * @param string $feature Feature being used.
+ */
+ public function logFeatureUsage( $feature ) {
+ $request = $this->getRequest();
+ $s = '"' . addslashes( $feature ) . '"' .
+ ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' .
+ ' "' . $request->getIP() . '"' .
+ ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' .
+ ' "' . addslashes( $this->getMain()->getUserAgent() ) . '"';
+ wfDebugLog( 'api-feature-usage', $s, 'private' );
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Help message generation
+ * @{
+ */
+
+ /**
+ * Return the summary message.
+ *
+ * This is a one-line description of the module, suitable for display in a
+ * list of modules.
+ *
+ * @since 1.30
+ * @return string|array|Message
+ */
+ protected function getSummaryMessage() {
+ return "apihelp-{$this->getModulePath()}-summary";
+ }
+
+ /**
+ * Return the extended help text message.
+ *
+ * This is additional text to display at the top of the help section, below
+ * the summary.
+ *
+ * @since 1.30
+ * @return string|array|Message
+ */
+ protected function getExtendedDescription() {
+ return [ [
+ "apihelp-{$this->getModulePath()}-extended-description",
+ 'api-help-no-extended-description',
+ ] ];
+ }
+
+ /**
+ * Get final module summary
+ *
+ * Ideally this will just be the getSummaryMessage(). However, for
+ * backwards compatibility, if that message does not exist then the first
+ * line of wikitext from the description message will be used instead.
+ *
+ * @since 1.30
+ * @return Message
+ */
+ public function getFinalSummary() {
+ $msg = self::makeMessage( $this->getSummaryMessage(), $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ ] );
+ if ( !$msg->exists() ) {
+ wfDeprecated( 'API help "description" messages', '1.30' );
+ $msg = self::makeMessage( $this->getDescriptionMessage(), $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ ] );
+ $msg = self::makeMessage( 'rawmessage', $this->getContext(), [
+ preg_replace( '/\n.*/s', '', $msg->text() )
+ ] );
+ }
+ return $msg;
+ }
+
+ /**
+ * Get final module description, after hooks have had a chance to tweak it as
+ * needed.
+ *
+ * @since 1.25, returns Message[] rather than string[]
+ * @return Message[]
+ */
+ public function getFinalDescription() {
+ $desc = $this->getDescription();
+
+ // Avoid PHP 7.1 warning of passing $this by reference
+ $apiModule = $this;
+ Hooks::run( 'APIGetDescription', [ &$apiModule, &$desc ] );
+ $desc = self::escapeWikiText( $desc );
+ if ( is_array( $desc ) ) {
+ $desc = implode( "\n", $desc );
+ } else {
+ $desc = (string)$desc;
+ }
+
+ $summary = self::makeMessage( $this->getSummaryMessage(), $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ ] );
+ $extendedDescription = self::makeMessage(
+ $this->getExtendedDescription(), $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ ]
+ );
+
+ if ( $summary->exists() ) {
+ $msgs = [ $summary, $extendedDescription ];
+ } else {
+ wfDeprecated( 'API help "description" messages', '1.30' );
+ $description = self::makeMessage( $this->getDescriptionMessage(), $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ ] );
+ if ( !$description->exists() ) {
+ $description = $this->msg( 'api-help-fallback-description', $desc );
+ }
+ $msgs = [ $description ];
+ }
+
+ Hooks::run( 'APIGetDescriptionMessages', [ $this, &$msgs ] );
+
+ return $msgs;
+ }
+
+ /**
+ * Get final list of parameters, after hooks have had a chance to
+ * tweak it as needed.
+ *
+ * @param int $flags Zero or more flags like GET_VALUES_FOR_HELP
+ * @return array|bool False on no parameters
+ * @since 1.21 $flags param added
+ */
+ public function getFinalParams( $flags = 0 ) {
+ $params = $this->getAllowedParams( $flags );
+ if ( !$params ) {
+ $params = [];
+ }
+
+ if ( $this->needsToken() ) {
+ $params['token'] = [
+ self::PARAM_TYPE => 'string',
+ self::PARAM_REQUIRED => true,
+ self::PARAM_SENSITIVE => true,
+ self::PARAM_HELP_MSG => [
+ 'api-help-param-token',
+ $this->needsToken(),
+ ],
+ ] + ( isset( $params['token'] ) ? $params['token'] : [] );
+ }
+
+ // Avoid PHP 7.1 warning of passing $this by reference
+ $apiModule = $this;
+ Hooks::run( 'APIGetAllowedParams', [ &$apiModule, &$params, $flags ] );
+
+ return $params;
+ }
+
+ /**
+ * Get final parameter descriptions, after hooks have had a chance to tweak it as
+ * needed.
+ *
+ * @since 1.25, returns array of Message[] rather than array of string[]
+ * @return array Keys are parameter names, values are arrays of Message objects
+ */
+ public function getFinalParamDescription() {
+ $prefix = $this->getModulePrefix();
+ $name = $this->getModuleName();
+ $path = $this->getModulePath();
+
+ $desc = $this->getParamDescription();
+
+ // Avoid PHP 7.1 warning of passing $this by reference
+ $apiModule = $this;
+ Hooks::run( 'APIGetParamDescription', [ &$apiModule, &$desc ] );
+
+ if ( !$desc ) {
+ $desc = [];
+ }
+ $desc = self::escapeWikiText( $desc );
+
+ $params = $this->getFinalParams( self::GET_VALUES_FOR_HELP );
+ $msgs = [];
+ foreach ( $params as $param => $settings ) {
+ if ( !is_array( $settings ) ) {
+ $settings = [];
+ }
+
+ $d = isset( $desc[$param] ) ? $desc[$param] : '';
+ if ( is_array( $d ) ) {
+ // Special handling for prop parameters
+ $d = array_map( function ( $line ) {
+ if ( preg_match( '/^\s+(\S+)\s+-\s+(.+)$/', $line, $m ) ) {
+ $line = "\n;{$m[1]}:{$m[2]}";
+ }
+ return $line;
+ }, $d );
+ $d = implode( ' ', $d );
+ }
+
+ if ( isset( $settings[self::PARAM_HELP_MSG] ) ) {
+ $msg = $settings[self::PARAM_HELP_MSG];
+ } else {
+ $msg = $this->msg( "apihelp-{$path}-param-{$param}" );
+ if ( !$msg->exists() ) {
+ $msg = $this->msg( 'api-help-fallback-parameter', $d );
+ }
+ }
+ $msg = self::makeMessage( $msg, $this->getContext(),
+ [ $prefix, $param, $name, $path ] );
+ if ( !$msg ) {
+ self::dieDebug( __METHOD__,
+ 'Value in ApiBase::PARAM_HELP_MSG is not valid' );
+ }
+ $msgs[$param] = [ $msg ];
+
+ if ( isset( $settings[self::PARAM_TYPE] ) &&
+ $settings[self::PARAM_TYPE] === 'submodule'
+ ) {
+ if ( isset( $settings[self::PARAM_SUBMODULE_MAP] ) ) {
+ $map = $settings[self::PARAM_SUBMODULE_MAP];
+ } else {
+ $prefix = $this->isMain() ? '' : ( $this->getModulePath() . '+' );
+ $map = [];
+ foreach ( $this->getModuleManager()->getNames( $param ) as $submoduleName ) {
+ $map[$submoduleName] = $prefix . $submoduleName;
+ }
+ }
+ ksort( $map );
+ $submodules = [];
+ $deprecatedSubmodules = [];
+ foreach ( $map as $v => $m ) {
+ $arr = &$submodules;
+ $isDeprecated = false;
+ $summary = null;
+ try {
+ $submod = $this->getModuleFromPath( $m );
+ if ( $submod ) {
+ $summary = $submod->getFinalSummary();
+ $isDeprecated = $submod->isDeprecated();
+ if ( $isDeprecated ) {
+ $arr = &$deprecatedSubmodules;
+ }
+ }
+ } catch ( ApiUsageException $ex ) {
+ // Ignore
+ }
+ if ( $summary ) {
+ $key = $summary->getKey();
+ $params = $summary->getParams();
+ } else {
+ $key = 'api-help-undocumented-module';
+ $params = [ $m ];
+ }
+ $m = new ApiHelpParamValueMessage( "[[Special:ApiHelp/$m|$v]]", $key, $params, $isDeprecated );
+ $arr[] = $m->setContext( $this->getContext() );
+ }
+ $msgs[$param] = array_merge( $msgs[$param], $submodules, $deprecatedSubmodules );
+ } elseif ( isset( $settings[self::PARAM_HELP_MSG_PER_VALUE] ) ) {
+ if ( !is_array( $settings[self::PARAM_HELP_MSG_PER_VALUE] ) ) {
+ self::dieDebug( __METHOD__,
+ 'ApiBase::PARAM_HELP_MSG_PER_VALUE is not valid' );
+ }
+ if ( !is_array( $settings[self::PARAM_TYPE] ) ) {
+ self::dieDebug( __METHOD__,
+ 'ApiBase::PARAM_HELP_MSG_PER_VALUE may only be used when ' .
+ 'ApiBase::PARAM_TYPE is an array' );
+ }
+
+ $valueMsgs = $settings[self::PARAM_HELP_MSG_PER_VALUE];
+ $deprecatedValues = isset( $settings[self::PARAM_DEPRECATED_VALUES] )
+ ? $settings[self::PARAM_DEPRECATED_VALUES]
+ : [];
+
+ foreach ( $settings[self::PARAM_TYPE] as $value ) {
+ if ( isset( $valueMsgs[$value] ) ) {
+ $msg = $valueMsgs[$value];
+ } else {
+ $msg = "apihelp-{$path}-paramvalue-{$param}-{$value}";
+ }
+ $m = self::makeMessage( $msg, $this->getContext(),
+ [ $prefix, $param, $name, $path, $value ] );
+ if ( $m ) {
+ $m = new ApiHelpParamValueMessage(
+ $value,
+ [ $m->getKey(), 'api-help-param-no-description' ],
+ $m->getParams(),
+ isset( $deprecatedValues[$value] )
+ );
+ $msgs[$param][] = $m->setContext( $this->getContext() );
+ } else {
+ self::dieDebug( __METHOD__,
+ "Value in ApiBase::PARAM_HELP_MSG_PER_VALUE for $value is not valid" );
+ }
+ }
+ }
+
+ if ( isset( $settings[self::PARAM_HELP_MSG_APPEND] ) ) {
+ if ( !is_array( $settings[self::PARAM_HELP_MSG_APPEND] ) ) {
+ self::dieDebug( __METHOD__,
+ 'Value for ApiBase::PARAM_HELP_MSG_APPEND is not an array' );
+ }
+ foreach ( $settings[self::PARAM_HELP_MSG_APPEND] as $m ) {
+ $m = self::makeMessage( $m, $this->getContext(),
+ [ $prefix, $param, $name, $path ] );
+ if ( $m ) {
+ $msgs[$param][] = $m;
+ } else {
+ self::dieDebug( __METHOD__,
+ 'Value in ApiBase::PARAM_HELP_MSG_APPEND is not valid' );
+ }
+ }
+ }
+ }
+
+ Hooks::run( 'APIGetParamDescriptionMessages', [ $this, &$msgs ] );
+
+ return $msgs;
+ }
+
+ /**
+ * Generates the list of flags for the help screen and for action=paraminfo
+ *
+ * Corresponding messages: api-help-flag-deprecated,
+ * api-help-flag-internal, api-help-flag-readrights,
+ * api-help-flag-writerights, api-help-flag-mustbeposted
+ *
+ * @return string[]
+ */
+ protected function getHelpFlags() {
+ $flags = [];
+
+ if ( $this->isDeprecated() ) {
+ $flags[] = 'deprecated';
+ }
+ if ( $this->isInternal() ) {
+ $flags[] = 'internal';
+ }
+ if ( $this->isReadMode() ) {
+ $flags[] = 'readrights';
+ }
+ if ( $this->isWriteMode() ) {
+ $flags[] = 'writerights';
+ }
+ if ( $this->mustBePosted() ) {
+ $flags[] = 'mustbeposted';
+ }
+
+ return $flags;
+ }
+
+ /**
+ * Returns information about the source of this module, if known
+ *
+ * Returned array is an array with the following keys:
+ * - path: Install path
+ * - name: Extension name, or "MediaWiki" for core
+ * - namemsg: (optional) i18n message key for a display name
+ * - license-name: (optional) Name of license
+ *
+ * @return array|null
+ */
+ protected function getModuleSourceInfo() {
+ global $IP;
+
+ if ( $this->mModuleSource !== false ) {
+ return $this->mModuleSource;
+ }
+
+ // First, try to find where the module comes from...
+ $rClass = new ReflectionClass( $this );
+ $path = $rClass->getFileName();
+ if ( !$path ) {
+ // No path known?
+ $this->mModuleSource = null;
+ return null;
+ }
+ $path = realpath( $path ) ?: $path;
+
+ // Build map of extension directories to extension info
+ if ( self::$extensionInfo === null ) {
+ $extDir = $this->getConfig()->get( 'ExtensionDirectory' );
+ self::$extensionInfo = [
+ realpath( __DIR__ ) ?: __DIR__ => [
+ 'path' => $IP,
+ 'name' => 'MediaWiki',
+ 'license-name' => 'GPL-2.0-or-later',
+ ],
+ realpath( "$IP/extensions" ) ?: "$IP/extensions" => null,
+ realpath( $extDir ) ?: $extDir => null,
+ ];
+ $keep = [
+ 'path' => null,
+ 'name' => null,
+ 'namemsg' => null,
+ 'license-name' => null,
+ ];
+ foreach ( $this->getConfig()->get( 'ExtensionCredits' ) as $group ) {
+ foreach ( $group as $ext ) {
+ if ( !isset( $ext['path'] ) || !isset( $ext['name'] ) ) {
+ // This shouldn't happen, but does anyway.
+ continue;
+ }
+
+ $extpath = $ext['path'];
+ if ( !is_dir( $extpath ) ) {
+ $extpath = dirname( $extpath );
+ }
+ self::$extensionInfo[realpath( $extpath ) ?: $extpath] =
+ array_intersect_key( $ext, $keep );
+ }
+ }
+ foreach ( ExtensionRegistry::getInstance()->getAllThings() as $ext ) {
+ $extpath = $ext['path'];
+ if ( !is_dir( $extpath ) ) {
+ $extpath = dirname( $extpath );
+ }
+ self::$extensionInfo[realpath( $extpath ) ?: $extpath] =
+ array_intersect_key( $ext, $keep );
+ }
+ }
+
+ // Now traverse parent directories until we find a match or run out of
+ // parents.
+ do {
+ if ( array_key_exists( $path, self::$extensionInfo ) ) {
+ // Found it!
+ $this->mModuleSource = self::$extensionInfo[$path];
+ return $this->mModuleSource;
+ }
+
+ $oldpath = $path;
+ $path = dirname( $path );
+ } while ( $path !== $oldpath );
+
+ // No idea what extension this might be.
+ $this->mModuleSource = null;
+ return null;
+ }
+
+ /**
+ * Called from ApiHelp before the pieces are joined together and returned.
+ *
+ * This exists mainly for ApiMain to add the Permissions and Credits
+ * sections. Other modules probably don't need it.
+ *
+ * @param string[] &$help Array of help data
+ * @param array $options Options passed to ApiHelp::getHelp
+ * @param array &$tocData If a TOC is being generated, this array has keys
+ * as anchors in the page and values as for Linker::generateTOC().
+ */
+ public function modifyHelp( array &$help, array $options, array &$tocData ) {
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Deprecated
+ * @{
+ */
+
+ /**
+ * Returns the description string for this module
+ *
+ * Ignored if an i18n message exists for
+ * "apihelp-{$this->getModulePath()}-description".
+ *
+ * @deprecated since 1.25
+ * @return Message|string|array|false
+ */
+ protected function getDescription() {
+ return false;
+ }
+
+ /**
+ * Returns an array of parameter descriptions.
+ *
+ * For each parameter, ignored if an i18n message exists for the parameter.
+ * By default that message is
+ * "apihelp-{$this->getModulePath()}-param-{$param}", but it may be
+ * overridden using ApiBase::PARAM_HELP_MSG in the data returned by
+ * self::getFinalParams().
+ *
+ * @deprecated since 1.25
+ * @return array|bool False on no parameter descriptions
+ */
+ protected function getParamDescription() {
+ return [];
+ }
+
+ /**
+ * Returns usage examples for this module.
+ *
+ * Return value as an array is either:
+ * - numeric keys with partial URLs ("api.php?" plus a query string) as
+ * values
+ * - sequential numeric keys with even-numbered keys being display-text
+ * and odd-numbered keys being partial urls
+ * - partial URLs as keys with display-text (string or array-to-be-joined)
+ * as values
+ * Return value as a string is the same as an array with a numeric key and
+ * that value, and boolean false means "no examples".
+ *
+ * @deprecated since 1.25, use getExamplesMessages() instead
+ * @return bool|string|array
+ */
+ protected function getExamples() {
+ return false;
+ }
+
+ /**
+ * @deprecated since 1.25
+ */
+ public function profileIn() {
+ // No wfDeprecated() yet because extensions call this and might need to
+ // keep doing so for BC.
+ }
+
+ /**
+ * @deprecated since 1.25
+ */
+ public function profileOut() {
+ // No wfDeprecated() yet because extensions call this and might need to
+ // keep doing so for BC.
+ }
+
+ /**
+ * @deprecated since 1.25
+ */
+ public function safeProfileOut() {
+ wfDeprecated( __METHOD__, '1.25' );
+ }
+
+ /**
+ * @deprecated since 1.25
+ */
+ public function profileDBIn() {
+ wfDeprecated( __METHOD__, '1.25' );
+ }
+
+ /**
+ * @deprecated since 1.25
+ */
+ public function profileDBOut() {
+ wfDeprecated( __METHOD__, '1.25' );
+ }
+
+ /**
+ * Call wfTransactionalTimeLimit() if this request was POSTed
+ * @since 1.26
+ */
+ protected function useTransactionalTimeLimit() {
+ if ( $this->getRequest()->wasPosted() ) {
+ wfTransactionalTimeLimit();
+ }
+ }
+
+ /**
+ * @deprecated since 1.29, use ApiBase::addWarning() instead
+ * @param string $warning Warning message
+ */
+ public function setWarning( $warning ) {
+ wfDeprecated( __METHOD__, '1.29' );
+ $msg = new ApiRawMessage( $warning, 'warning' );
+ $this->getErrorFormatter()->addWarning( $this->getModulePath(), $msg );
+ }
+
+ /**
+ * Throw an ApiUsageException, which will (if uncaught) call the main module's
+ * error handler and die with an error message.
+ *
+ * @deprecated since 1.29, use self::dieWithError() instead
+ * @param string $description One-line human-readable description of the
+ * error condition, e.g., "The API requires a valid action parameter"
+ * @param string $errorCode Brief, arbitrary, stable string to allow easy
+ * automated identification of the error, e.g., 'unknown_action'
+ * @param int $httpRespCode HTTP response code
+ * @param array|null $extradata Data to add to the "<error>" element; array in ApiResult format
+ * @throws ApiUsageException always
+ */
+ public function dieUsage( $description, $errorCode, $httpRespCode = 0, $extradata = null ) {
+ wfDeprecated( __METHOD__, '1.29' );
+ $this->dieWithError(
+ new RawMessage( '$1', [ $description ] ),
+ $errorCode,
+ $extradata,
+ $httpRespCode
+ );
+ }
+
+ /**
+ * Get error (as code, string) from a Status object.
+ *
+ * @since 1.23
+ * @deprecated since 1.29, use ApiErrorFormatter::arrayFromStatus instead
+ * @param Status $status
+ * @param array|null &$extraData Set if extra data from IApiMessage is available (since 1.27)
+ * @return array Array of code and error string
+ * @throws MWException
+ */
+ public function getErrorFromStatus( $status, &$extraData = null ) {
+ wfDeprecated( __METHOD__, '1.29' );
+ if ( $status->isGood() ) {
+ throw new MWException( 'Successful status passed to ApiBase::dieStatus' );
+ }
+
+ $errors = $status->getErrorsByType( 'error' );
+ if ( !$errors ) {
+ // No errors? Assume the warnings should be treated as errors
+ $errors = $status->getErrorsByType( 'warning' );
+ }
+ if ( !$errors ) {
+ // Still no errors? Punt
+ $errors = [ [ 'message' => 'unknownerror-nocode', 'params' => [] ] ];
+ }
+
+ if ( $errors[0]['message'] instanceof MessageSpecifier ) {
+ $msg = $errors[0]['message'];
+ } else {
+ $msg = new Message( $errors[0]['message'], $errors[0]['params'] );
+ }
+ if ( !$msg instanceof IApiMessage ) {
+ $key = $msg->getKey();
+ $params = $msg->getParams();
+ array_unshift( $params, isset( self::$messageMap[$key] ) ? self::$messageMap[$key] : $key );
+ $msg = ApiMessage::create( $params );
+ }
+
+ return [
+ $msg->getApiCode(),
+ ApiErrorFormatter::stripMarkup( $msg->inLanguage( 'en' )->useDatabase( false )->text() )
+ ];
+ }
+
+ /**
+ * @deprecated since 1.29. Prior to 1.29, this was a public mapping from
+ * arbitrary strings (often message keys used elsewhere in MediaWiki) to
+ * API codes and message texts, and a few interfaces required poking
+ * something in here. Now we're repurposing it to map those same strings
+ * to i18n messages, and declaring that any interface that requires poking
+ * at this is broken and needs replacing ASAP.
+ */
+ private static $messageMap = [
+ 'unknownerror' => 'apierror-unknownerror',
+ 'unknownerror-nocode' => 'apierror-unknownerror-nocode',
+ 'ns-specialprotected' => 'ns-specialprotected',
+ 'protectedinterface' => 'protectedinterface',
+ 'namespaceprotected' => 'namespaceprotected',
+ 'customcssprotected' => 'customcssprotected',
+ 'customjsprotected' => 'customjsprotected',
+ 'cascadeprotected' => 'cascadeprotected',
+ 'protectedpagetext' => 'protectedpagetext',
+ 'protect-cantedit' => 'protect-cantedit',
+ 'deleteprotected' => 'deleteprotected',
+ 'badaccess-group0' => 'badaccess-group0',
+ 'badaccess-groups' => 'badaccess-groups',
+ 'titleprotected' => 'titleprotected',
+ 'nocreate-loggedin' => 'nocreate-loggedin',
+ 'nocreatetext' => 'nocreatetext',
+ 'movenologintext' => 'movenologintext',
+ 'movenotallowed' => 'movenotallowed',
+ 'confirmedittext' => 'confirmedittext',
+ 'blockedtext' => 'apierror-blocked',
+ 'autoblockedtext' => 'apierror-autoblocked',
+ 'systemblockedtext' => 'apierror-systemblocked',
+ 'actionthrottledtext' => 'apierror-ratelimited',
+ 'alreadyrolled' => 'alreadyrolled',
+ 'cantrollback' => 'cantrollback',
+ 'readonlytext' => 'readonlytext',
+ 'sessionfailure' => 'sessionfailure',
+ 'cannotdelete' => 'cannotdelete',
+ 'notanarticle' => 'apierror-missingtitle',
+ 'selfmove' => 'selfmove',
+ 'immobile_namespace' => 'apierror-immobilenamespace',
+ 'articleexists' => 'articleexists',
+ 'hookaborted' => 'hookaborted',
+ 'cantmove-titleprotected' => 'cantmove-titleprotected',
+ 'imagenocrossnamespace' => 'imagenocrossnamespace',
+ 'imagetypemismatch' => 'imagetypemismatch',
+ 'ip_range_invalid' => 'ip_range_invalid',
+ 'range_block_disabled' => 'range_block_disabled',
+ 'nosuchusershort' => 'nosuchusershort',
+ 'badipaddress' => 'badipaddress',
+ 'ipb_expiry_invalid' => 'ipb_expiry_invalid',
+ 'ipb_already_blocked' => 'ipb_already_blocked',
+ 'ipb_blocked_as_range' => 'ipb_blocked_as_range',
+ 'ipb_cant_unblock' => 'ipb_cant_unblock',
+ 'mailnologin' => 'apierror-cantsend',
+ 'ipbblocked' => 'ipbblocked',
+ 'ipbnounblockself' => 'ipbnounblockself',
+ 'usermaildisabled' => 'usermaildisabled',
+ 'blockedemailuser' => 'apierror-blockedfrommail',
+ 'notarget' => 'apierror-notarget',
+ 'noemail' => 'noemail',
+ 'rcpatroldisabled' => 'rcpatroldisabled',
+ 'markedaspatrollederror-noautopatrol' => 'markedaspatrollederror-noautopatrol',
+ 'delete-toobig' => 'delete-toobig',
+ 'movenotallowedfile' => 'movenotallowedfile',
+ 'userrights-no-interwiki' => 'userrights-no-interwiki',
+ 'userrights-nodatabase' => 'userrights-nodatabase',
+ 'nouserspecified' => 'nouserspecified',
+ 'noname' => 'noname',
+ 'summaryrequired' => 'apierror-summaryrequired',
+ 'import-rootpage-invalid' => 'import-rootpage-invalid',
+ 'import-rootpage-nosubpage' => 'import-rootpage-nosubpage',
+ 'readrequired' => 'apierror-readapidenied',
+ 'writedisabled' => 'apierror-noapiwrite',
+ 'writerequired' => 'apierror-writeapidenied',
+ 'missingparam' => 'apierror-missingparam',
+ 'invalidtitle' => 'apierror-invalidtitle',
+ 'nosuchpageid' => 'apierror-nosuchpageid',
+ 'nosuchrevid' => 'apierror-nosuchrevid',
+ 'nosuchuser' => 'nosuchusershort',
+ 'invaliduser' => 'apierror-invaliduser',
+ 'invalidexpiry' => 'apierror-invalidexpiry',
+ 'pastexpiry' => 'apierror-pastexpiry',
+ 'create-titleexists' => 'apierror-create-titleexists',
+ 'missingtitle-createonly' => 'apierror-missingtitle-createonly',
+ 'cantblock' => 'apierror-cantblock',
+ 'canthide' => 'apierror-canthide',
+ 'cantblock-email' => 'apierror-cantblock-email',
+ 'cantunblock' => 'apierror-permissiondenied-generic',
+ 'cannotundelete' => 'cannotundelete',
+ 'permdenied-undelete' => 'apierror-permissiondenied-generic',
+ 'createonly-exists' => 'apierror-articleexists',
+ 'nocreate-missing' => 'apierror-missingtitle',
+ 'cantchangecontentmodel' => 'apierror-cantchangecontentmodel',
+ 'nosuchrcid' => 'apierror-nosuchrcid',
+ 'nosuchlogid' => 'apierror-nosuchlogid',
+ 'protect-invalidaction' => 'apierror-protect-invalidaction',
+ 'protect-invalidlevel' => 'apierror-protect-invalidlevel',
+ 'toofewexpiries' => 'apierror-toofewexpiries',
+ 'cantimport' => 'apierror-cantimport',
+ 'cantimport-upload' => 'apierror-cantimport-upload',
+ 'importnofile' => 'importnofile',
+ 'importuploaderrorsize' => 'importuploaderrorsize',
+ 'importuploaderrorpartial' => 'importuploaderrorpartial',
+ 'importuploaderrortemp' => 'importuploaderrortemp',
+ 'importcantopen' => 'importcantopen',
+ 'import-noarticle' => 'import-noarticle',
+ 'importbadinterwiki' => 'importbadinterwiki',
+ 'import-unknownerror' => 'apierror-import-unknownerror',
+ 'cantoverwrite-sharedfile' => 'apierror-cantoverwrite-sharedfile',
+ 'sharedfile-exists' => 'apierror-fileexists-sharedrepo-perm',
+ 'mustbeposted' => 'apierror-mustbeposted',
+ 'show' => 'apierror-show',
+ 'specialpage-cantexecute' => 'apierror-specialpage-cantexecute',
+ 'invalidoldimage' => 'apierror-invalidoldimage',
+ 'nodeleteablefile' => 'apierror-nodeleteablefile',
+ 'fileexists-forbidden' => 'fileexists-forbidden',
+ 'fileexists-shared-forbidden' => 'fileexists-shared-forbidden',
+ 'filerevert-badversion' => 'filerevert-badversion',
+ 'noimageredirect-anon' => 'apierror-noimageredirect-anon',
+ 'noimageredirect-logged' => 'apierror-noimageredirect',
+ 'spamdetected' => 'apierror-spamdetected',
+ 'contenttoobig' => 'apierror-contenttoobig',
+ 'noedit-anon' => 'apierror-noedit-anon',
+ 'noedit' => 'apierror-noedit',
+ 'wasdeleted' => 'apierror-pagedeleted',
+ 'blankpage' => 'apierror-emptypage',
+ 'editconflict' => 'editconflict',
+ 'hashcheckfailed' => 'apierror-badmd5',
+ 'missingtext' => 'apierror-notext',
+ 'emptynewsection' => 'apierror-emptynewsection',
+ 'revwrongpage' => 'apierror-revwrongpage',
+ 'undo-failure' => 'undo-failure',
+ 'content-not-allowed-here' => 'content-not-allowed-here',
+ 'edit-hook-aborted' => 'edit-hook-aborted',
+ 'edit-gone-missing' => 'edit-gone-missing',
+ 'edit-conflict' => 'edit-conflict',
+ 'edit-already-exists' => 'edit-already-exists',
+ 'invalid-file-key' => 'apierror-invalid-file-key',
+ 'nouploadmodule' => 'apierror-nouploadmodule',
+ 'uploaddisabled' => 'uploaddisabled',
+ 'copyuploaddisabled' => 'copyuploaddisabled',
+ 'copyuploadbaddomain' => 'apierror-copyuploadbaddomain',
+ 'copyuploadbadurl' => 'apierror-copyuploadbadurl',
+ 'filename-tooshort' => 'filename-tooshort',
+ 'filename-toolong' => 'filename-toolong',
+ 'illegal-filename' => 'illegal-filename',
+ 'filetype-missing' => 'filetype-missing',
+ 'mustbeloggedin' => 'apierror-mustbeloggedin',
+ ];
+
+ /**
+ * @deprecated do not use
+ * @param array|string|MessageSpecifier $error Element of a getUserPermissionsErrors()-style array
+ * @return ApiMessage
+ */
+ private function parseMsgInternal( $error ) {
+ $msg = Message::newFromSpecifier( $error );
+ if ( !$msg instanceof IApiMessage ) {
+ $key = $msg->getKey();
+ if ( isset( self::$messageMap[$key] ) ) {
+ $params = $msg->getParams();
+ array_unshift( $params, self::$messageMap[$key] );
+ } else {
+ $params = [ 'apierror-unknownerror', wfEscapeWikiText( $key ) ];
+ }
+ $msg = ApiMessage::create( $params );
+ }
+ return $msg;
+ }
+
+ /**
+ * Return the error message related to a certain array
+ * @deprecated since 1.29
+ * @param array|string|MessageSpecifier $error Element of a getUserPermissionsErrors()-style array
+ * @return array [ 'code' => code, 'info' => info ]
+ */
+ public function parseMsg( $error ) {
+ wfDeprecated( __METHOD__, '1.29' );
+ // Check whether someone passed the whole array, instead of one element as
+ // documented. This breaks if it's actually an array of fallback keys, but
+ // that's long-standing misbehavior introduced in r87627 to incorrectly
+ // fix T30797.
+ if ( is_array( $error ) ) {
+ $first = reset( $error );
+ if ( is_array( $first ) ) {
+ wfDebug( __METHOD__ . ' was passed an array of arrays. ' . wfGetAllCallers( 5 ) );
+ $error = $first;
+ }
+ }
+
+ $msg = $this->parseMsgInternal( $error );
+ return [
+ 'code' => $msg->getApiCode(),
+ 'info' => ApiErrorFormatter::stripMarkup(
+ $msg->inLanguage( 'en' )->useDatabase( false )->text()
+ ),
+ 'data' => $msg->getApiData()
+ ];
+ }
+
+ /**
+ * Output the error message related to a certain array
+ * @deprecated since 1.29, use ApiBase::dieWithError() instead
+ * @param array|string|MessageSpecifier $error Element of a getUserPermissionsErrors()-style array
+ * @throws ApiUsageException always
+ */
+ public function dieUsageMsg( $error ) {
+ wfDeprecated( __METHOD__, '1.29' );
+ $this->dieWithError( $this->parseMsgInternal( $error ) );
+ }
+
+ /**
+ * Will only set a warning instead of failing if the global $wgDebugAPI
+ * is set to true. Otherwise behaves exactly as dieUsageMsg().
+ * @deprecated since 1.29, use ApiBase::dieWithErrorOrDebug() instead
+ * @param array|string|MessageSpecifier $error Element of a getUserPermissionsErrors()-style array
+ * @throws ApiUsageException
+ * @since 1.21
+ */
+ public function dieUsageMsgOrDebug( $error ) {
+ wfDeprecated( __METHOD__, '1.29' );
+ $this->dieWithErrorOrDebug( $this->parseMsgInternal( $error ) );
+ }
+
+ /**
+ * Return the description message.
+ *
+ * This is additional text to display on the help page after the summary.
+ *
+ * @deprecated since 1.30
+ * @return string|array|Message
+ */
+ protected function getDescriptionMessage() {
+ return [ [
+ "apihelp-{$this->getModulePath()}-description",
+ "apihelp-{$this->getModulePath()}-summary",
+ ] ];
+ }
+
+ /**@}*/
+}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
diff --git a/www/wiki/includes/api/ApiBlock.php b/www/wiki/includes/api/ApiBlock.php
new file mode 100644
index 00000000..85dd2c7f
--- /dev/null
+++ b/www/wiki/includes/api/ApiBlock.php
@@ -0,0 +1,199 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that facilitates the blocking of users. Requires API write mode
+ * to be enabled.
+ *
+ * @ingroup API
+ */
+class ApiBlock extends ApiBase {
+
+ /**
+ * Blocks the user specified in the parameters for the given expiry, with the
+ * given reason, and with all other settings provided in the params. If the block
+ * succeeds, produces a result containing the details of the block and notice
+ * of success. If it fails, the result will specify the nature of the error.
+ */
+ public function execute() {
+ $this->checkUserRightsAny( 'block' );
+
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ $this->requireOnlyOneParameter( $params, 'user', 'userid' );
+
+ # T17810: blocked admins should have limited access here
+ if ( $user->isBlocked() ) {
+ $status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
+ if ( $status !== true ) {
+ $this->dieWithError(
+ $status,
+ null,
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
+ );
+ }
+ }
+
+ if ( $params['userid'] !== null ) {
+ $username = User::whoIs( $params['userid'] );
+
+ if ( $username === false ) {
+ $this->dieWithError( [ 'apierror-nosuchuserid', $params['userid'] ], 'nosuchuserid' );
+ } else {
+ $params['user'] = $username;
+ }
+ } else {
+ list( $target, $type ) = SpecialBlock::getTargetAndType( $params['user'] );
+
+ // T40633 - if the target is a user (not an IP address), but it
+ // doesn't exist or is unusable, error.
+ if ( $type === Block::TYPE_USER &&
+ ( $target->isAnon() /* doesn't exist */ || !User::isUsableName( $params['user'] ) )
+ ) {
+ $this->dieWithError( [ 'nosuchusershort', $params['user'] ], 'nosuchuser' );
+ }
+ }
+
+ if ( $params['tags'] ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ if ( $params['hidename'] && !$user->isAllowed( 'hideuser' ) ) {
+ $this->dieWithError( 'apierror-canthide' );
+ }
+ if ( $params['noemail'] && !SpecialBlock::canBlockEmail( $user ) ) {
+ $this->dieWithError( 'apierror-cantblock-email' );
+ }
+
+ $data = [
+ 'PreviousTarget' => $params['user'],
+ 'Target' => $params['user'],
+ 'Reason' => [
+ $params['reason'],
+ 'other',
+ $params['reason']
+ ],
+ 'Expiry' => $params['expiry'],
+ 'HardBlock' => !$params['anononly'],
+ 'CreateAccount' => $params['nocreate'],
+ 'AutoBlock' => $params['autoblock'],
+ 'DisableEmail' => $params['noemail'],
+ 'HideUser' => $params['hidename'],
+ 'DisableUTEdit' => !$params['allowusertalk'],
+ 'Reblock' => $params['reblock'],
+ 'Watch' => $params['watchuser'],
+ 'Confirm' => true,
+ 'Tags' => $params['tags'],
+ ];
+
+ $status = SpecialBlock::validateTarget( $params['user'], $user );
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+
+ $retval = SpecialBlock::processForm( $data, $this->getContext() );
+ if ( $retval !== true ) {
+ $this->dieStatus( $this->errorArrayToStatus( $retval ) );
+ }
+
+ list( $target, /*...*/ ) = SpecialBlock::getTargetAndType( $params['user'] );
+ $res['user'] = $params['user'];
+ $res['userID'] = $target instanceof User ? $target->getId() : 0;
+
+ $block = Block::newFromTarget( $target, null, true );
+ if ( $block instanceof Block ) {
+ $res['expiry'] = ApiResult::formatExpiry( $block->mExpiry, 'infinite' );
+ $res['id'] = $block->getId();
+ } else {
+ # should be unreachable
+ $res['expiry'] = ''; // @codeCoverageIgnore
+ $res['id'] = ''; // @codeCoverageIgnore
+ }
+
+ $res['reason'] = $params['reason'];
+ $res['anononly'] = $params['anononly'];
+ $res['nocreate'] = $params['nocreate'];
+ $res['autoblock'] = $params['autoblock'];
+ $res['noemail'] = $params['noemail'];
+ $res['hidename'] = $params['hidename'];
+ $res['allowusertalk'] = $params['allowusertalk'];
+ $res['watchuser'] = $params['watchuser'];
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $res );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'userid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'expiry' => 'never',
+ 'reason' => '',
+ 'anononly' => false,
+ 'nocreate' => false,
+ 'autoblock' => false,
+ 'noemail' => false,
+ 'hidename' => false,
+ 'allowusertalk' => false,
+ 'reblock' => false,
+ 'watchuser' => false,
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ // phpcs:disable Generic.Files.LineLength
+ return [
+ 'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
+ => 'apihelp-block-example-ip-simple',
+ 'action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
+ => 'apihelp-block-example-user-complex',
+ ];
+ // phpcs:enable
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Block';
+ }
+}
diff --git a/www/wiki/includes/api/ApiCSPReport.php b/www/wiki/includes/api/ApiCSPReport.php
new file mode 100644
index 00000000..af040d15
--- /dev/null
+++ b/www/wiki/includes/api/ApiCSPReport.php
@@ -0,0 +1,242 @@
+<?php
+/**
+ * Copyright © 2015 Brian Wolff
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * Api module to receive and log CSP violation reports
+ *
+ * @ingroup API
+ */
+class ApiCSPReport extends ApiBase {
+
+ private $log;
+
+ /**
+ * These reports should be small. Ignore super big reports out of paranoia
+ */
+ const MAX_POST_SIZE = 8192;
+
+ /**
+ * Logs a content-security-policy violation report from web browser.
+ */
+ public function execute() {
+ $reportOnly = $this->getParameter( 'reportonly' );
+ $logname = $reportOnly ? 'csp-report-only' : 'csp';
+ $this->log = LoggerFactory::getInstance( $logname );
+ $userAgent = $this->getRequest()->getHeader( 'user-agent' );
+
+ $this->verifyPostBodyOk();
+ $report = $this->getReport();
+ $flags = $this->getFlags( $report );
+
+ $warningText = $this->generateLogLine( $flags, $report );
+ $this->logReport( $flags, $warningText, [
+ // XXX Is it ok to put untrusted data into log??
+ 'csp-report' => $report,
+ 'method' => __METHOD__,
+ 'user' => $this->getUser()->getName(),
+ 'user-agent' => $userAgent,
+ 'source' => $this->getParameter( 'source' ),
+ ] );
+ $this->getResult()->addValue( null, $this->getModuleName(), 'success' );
+ }
+
+ /**
+ * Log CSP report, with a different severity depending on $flags
+ * @param array $flags Flags for this report
+ * @param string $logLine text of log entry
+ * @param array $context logging context
+ */
+ private function logReport( $flags, $logLine, $context ) {
+ if ( in_array( 'false-positive', $flags ) ) {
+ // These reports probably don't matter much
+ $this->log->debug( $logLine, $context );
+ } else {
+ // Normal report.
+ $this->log->warning( $logLine, $context );
+ }
+ }
+
+ /**
+ * Get extra notes about the report.
+ *
+ * @param array $report The CSP report
+ * @return array
+ */
+ private function getFlags( $report ) {
+ $reportOnly = $this->getParameter( 'reportonly' );
+ $source = $this->getParameter( 'source' );
+ $falsePositives = $this->getConfig()->get( 'CSPFalsePositiveUrls' );
+
+ $flags = [];
+ if ( $source !== 'internal' ) {
+ $flags[] = 'source=' . $source;
+ }
+ if ( $reportOnly ) {
+ $flags[] = 'report-only';
+ }
+
+ if (
+ ( isset( $report['blocked-uri'] ) &&
+ isset( $falsePositives[$report['blocked-uri']] ) )
+ || ( isset( $report['source-file'] ) &&
+ isset( $falsePositives[$report['source-file']] ) )
+ ) {
+ // Report caused by Ad-Ware
+ $flags[] = 'false-positive';
+ }
+ return $flags;
+ }
+
+ /**
+ * Output an api error if post body is obviously not OK.
+ */
+ private function verifyPostBodyOk() {
+ $req = $this->getRequest();
+ $contentType = $req->getHeader( 'content-type' );
+ if ( $contentType !== 'application/json'
+ && $contentType !== 'application/csp-report'
+ ) {
+ $this->error( 'wrongformat', __METHOD__ );
+ }
+ if ( $req->getHeader( 'content-length' ) > self::MAX_POST_SIZE ) {
+ $this->error( 'toobig', __METHOD__ );
+ }
+ }
+
+ /**
+ * Get the report from post body and turn into associative array.
+ *
+ * @return Array
+ */
+ private function getReport() {
+ $postBody = $this->getRequest()->getRawInput();
+ if ( strlen( $postBody ) > self::MAX_POST_SIZE ) {
+ // paranoia, already checked content-length earlier.
+ $this->error( 'toobig', __METHOD__ );
+ }
+ $status = FormatJson::parse( $postBody, FormatJson::FORCE_ASSOC );
+ if ( !$status->isGood() ) {
+ $msg = $status->getErrors()[0]['message'];
+ if ( $msg instanceof Message ) {
+ $msg = $msg->getKey();
+ }
+ $this->error( $msg, __METHOD__ );
+ }
+
+ $report = $status->getValue();
+
+ if ( !isset( $report['csp-report'] ) ) {
+ $this->error( 'missingkey', __METHOD__ );
+ }
+ return $report['csp-report'];
+ }
+
+ /**
+ * Get text of log line.
+ *
+ * @param array $flags of additional markers for this report
+ * @param array $report the csp report
+ * @return string Text to put in log
+ */
+ private function generateLogLine( $flags, $report ) {
+ $flagText = '';
+ if ( $flags ) {
+ $flagText = '[' . implode( ', ', $flags ) . ']';
+ }
+
+ $blockedFile = isset( $report['blocked-uri'] ) ? $report['blocked-uri'] : 'n/a';
+ $page = isset( $report['document-uri'] ) ? $report['document-uri'] : 'n/a';
+ $line = isset( $report['line-number'] ) ? ':' . $report['line-number'] : '';
+ $warningText = $flagText .
+ ' Received CSP report: <' . $blockedFile .
+ '> blocked from being loaded on <' . $page . '>' . $line;
+ return $warningText;
+ }
+
+ /**
+ * Stop processing the request, and output/log an error
+ *
+ * @param string $code error code
+ * @param string $method method that made error
+ * @throws ApiUsageException Always
+ */
+ private function error( $code, $method ) {
+ $this->log->info( 'Error reading CSP report: ' . $code, [
+ 'method' => $method,
+ 'user-agent' => $this->getRequest()->getHeader( 'user-agent' )
+ ] );
+ // Return 400 on error for user agents to display, e.g. to the console.
+ $this->dieWithError(
+ [ 'apierror-csp-report', wfEscapeWikiText( $code ) ], 'cspreport-' . $code, [], 400
+ );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'reportonly' => [
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DFLT => false
+ ],
+ 'source' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_DFLT => 'internal',
+ ApiBase::PARAM_REQUIRED => false
+ ]
+ ];
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return false;
+ }
+
+ /**
+ * Mark as internal. This isn't meant to be used by normal api users
+ * @return bool
+ */
+ public function isInternal() {
+ return true;
+ }
+
+ /**
+ * Even if you don't have read rights, we still want your report.
+ * @return bool
+ */
+ public function isReadMode() {
+ return false;
+ }
+
+ /**
+ * Doesn't touch db, so max lag should be rather irrelavent.
+ *
+ * Also, this makes sure that reports aren't lost during lag events.
+ * @return bool
+ */
+ public function shouldCheckMaxLag() {
+ return false;
+ }
+}
diff --git a/www/wiki/includes/api/ApiChangeAuthenticationData.php b/www/wiki/includes/api/ApiChangeAuthenticationData.php
new file mode 100644
index 00000000..d4a26ad9
--- /dev/null
+++ b/www/wiki/includes/api/ApiChangeAuthenticationData.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * Change authentication data with AuthManager
+ *
+ * @ingroup API
+ */
+class ApiChangeAuthenticationData extends ApiBase {
+
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action, 'changeauth' );
+ }
+
+ public function execute() {
+ if ( !$this->getUser()->isLoggedIn() ) {
+ $this->dieWithError( 'apierror-mustbeloggedin-changeauthenticationdata', 'notloggedin' );
+ }
+
+ $helper = new ApiAuthManagerHelper( $this );
+ $manager = AuthManager::singleton();
+
+ // Check security-sensitive operation status
+ $helper->securitySensitiveOperation( 'ChangeCredentials' );
+
+ // Fetch the request
+ $reqs = ApiAuthManagerHelper::blacklistAuthenticationRequests(
+ $helper->loadAuthenticationRequests( AuthManager::ACTION_CHANGE ),
+ $this->getConfig()->get( 'ChangeCredentialsBlacklist' )
+ );
+ if ( count( $reqs ) !== 1 ) {
+ $this->dieWithError( 'apierror-changeauth-norequest', 'badrequest' );
+ }
+ $req = reset( $reqs );
+
+ // Make the change
+ $status = $manager->allowsAuthenticationDataChange( $req, true );
+ Hooks::run( 'ChangeAuthenticationDataAudit', [ $req, $status ] );
+ if ( !$status->isGood() ) {
+ $this->dieStatus( $status );
+ }
+ $manager->changeAuthenticationData( $req );
+
+ $this->getResult()->addValue( null, 'changeauthenticationdata', [ 'status' => 'success' ] );
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ public function getAllowedParams() {
+ return ApiAuthManagerHelper::getStandardParams( AuthManager::ACTION_CHANGE,
+ 'request'
+ );
+ }
+
+ public function dynamicParameterDocumentation() {
+ return [ 'api-help-authmanagerhelper-additional-params', AuthManager::ACTION_CHANGE ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=changeauthenticationdata' .
+ '&changeauthrequest=MediaWiki%5CAuth%5CPasswordAuthenticationRequest' .
+ '&password=ExamplePassword&retype=ExamplePassword&changeauthtoken=123ABC'
+ => 'apihelp-changeauthenticationdata-example-password',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Manage_authentication_data';
+ }
+}
diff --git a/www/wiki/includes/api/ApiCheckToken.php b/www/wiki/includes/api/ApiCheckToken.php
new file mode 100644
index 00000000..5d641d83
--- /dev/null
+++ b/www/wiki/includes/api/ApiCheckToken.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright © 2015 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Session\Token;
+
+/**
+ * @since 1.25
+ * @ingroup API
+ */
+class ApiCheckToken extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $token = $params['token'];
+ $maxage = $params['maxtokenage'];
+ $salts = ApiQueryTokens::getTokenTypeSalts();
+
+ $res = [];
+
+ $tokenObj = ApiQueryTokens::getToken(
+ $this->getUser(), $this->getRequest()->getSession(), $salts[$params['type']]
+ );
+
+ if ( substr( $token, -strlen( urldecode( Token::SUFFIX ) ) ) === urldecode( Token::SUFFIX ) ) {
+ $this->addWarning( 'apiwarn-checktoken-percentencoding' );
+ }
+
+ if ( $tokenObj->match( $token, $maxage ) ) {
+ $res['result'] = 'valid';
+ } elseif ( $maxage !== null && $tokenObj->match( $token ) ) {
+ $res['result'] = 'expired';
+ } else {
+ $res['result'] = 'invalid';
+ }
+
+ $ts = Token::getTimestamp( $token );
+ if ( $ts !== null ) {
+ $mwts = new MWTimestamp();
+ $mwts->timestamp->setTimestamp( $ts );
+ $res['generated'] = $mwts->getTimestamp( TS_ISO_8601 );
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $res );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'type' => [
+ ApiBase::PARAM_TYPE => array_keys( ApiQueryTokens::getTokenTypeSalts() ),
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'token' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ApiBase::PARAM_SENSITIVE => true,
+ ],
+ 'maxtokenage' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=checktoken&type=csrf&token=123ABC'
+ => 'apihelp-checktoken-example-simple',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiClearHasMsg.php b/www/wiki/includes/api/ApiClearHasMsg.php
new file mode 100644
index 00000000..12e0b6f2
--- /dev/null
+++ b/www/wiki/includes/api/ApiClearHasMsg.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Copyright © 2014 Petr Bena (benapetr@gmail.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that clears the hasmsg flag for current user
+ * @ingroup API
+ */
+class ApiClearHasMsg extends ApiBase {
+ public function execute() {
+ $user = $this->getUser();
+ $user->setNewtalk( false );
+ $this->getResult()->addValue( null, $this->getModuleName(), 'success' );
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=clearhasmsg'
+ => 'apihelp-clearhasmsg-example-1',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:ClearHasMsg';
+ }
+}
diff --git a/www/wiki/includes/api/ApiClientLogin.php b/www/wiki/includes/api/ApiClientLogin.php
new file mode 100644
index 00000000..65dea93b
--- /dev/null
+++ b/www/wiki/includes/api/ApiClientLogin.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Auth\AuthManager;
+use MediaWiki\Auth\AuthenticationResponse;
+use MediaWiki\Auth\CreateFromLoginAuthenticationRequest;
+
+/**
+ * Log in to the wiki with AuthManager
+ *
+ * @ingroup API
+ */
+class ApiClientLogin extends ApiBase {
+
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action, 'login' );
+ }
+
+ public function getFinalDescription() {
+ // A bit of a hack to append 'api-help-authmanager-general-usage'
+ $msgs = parent::getFinalDescription();
+ $msgs[] = ApiBase::makeMessage( 'api-help-authmanager-general-usage', $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ AuthManager::ACTION_LOGIN,
+ self::needsToken(),
+ ] );
+ return $msgs;
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $this->requireAtLeastOneParameter( $params, 'continue', 'returnurl' );
+
+ if ( $params['returnurl'] !== null ) {
+ $bits = wfParseUrl( $params['returnurl'] );
+ if ( !$bits || $bits['scheme'] === '' ) {
+ $encParamName = $this->encodeParamName( 'returnurl' );
+ $this->dieWithError(
+ [ 'apierror-badurl', $encParamName, wfEscapeWikiText( $params['returnurl'] ) ],
+ "badurl_{$encParamName}"
+ );
+ }
+ }
+
+ $helper = new ApiAuthManagerHelper( $this );
+ $manager = AuthManager::singleton();
+
+ // Make sure it's possible to log in
+ if ( !$manager->canAuthenticateNow() ) {
+ $this->getResult()->addValue( null, 'clientlogin', $helper->formatAuthenticationResponse(
+ AuthenticationResponse::newFail( $this->msg( 'userlogin-cannot-' . AuthManager::ACTION_LOGIN ) )
+ ) );
+ $helper->logAuthenticationResult( 'login', 'userlogin-cannot-' . AuthManager::ACTION_LOGIN );
+ return;
+ }
+
+ // Perform the login step
+ if ( $params['continue'] ) {
+ $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_LOGIN_CONTINUE );
+ $res = $manager->continueAuthentication( $reqs );
+ } else {
+ $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_LOGIN );
+ if ( $params['preservestate'] ) {
+ $req = $helper->getPreservedRequest();
+ if ( $req ) {
+ $reqs[] = $req;
+ }
+ }
+ $res = $manager->beginAuthentication( $reqs, $params['returnurl'] );
+ }
+
+ // Remove CreateFromLoginAuthenticationRequest from $res->neededRequests.
+ // It's there so a RESTART treated as UI will work right, but showing
+ // it to the API client is just confusing.
+ $res->neededRequests = ApiAuthManagerHelper::blacklistAuthenticationRequests(
+ $res->neededRequests, [ CreateFromLoginAuthenticationRequest::class ]
+ );
+
+ $this->getResult()->addValue( null, 'clientlogin',
+ $helper->formatAuthenticationResponse( $res ) );
+ $helper->logAuthenticationResult( 'login', $res );
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ public function needsToken() {
+ return 'login';
+ }
+
+ public function getAllowedParams() {
+ return ApiAuthManagerHelper::getStandardParams( AuthManager::ACTION_LOGIN,
+ 'requests', 'messageformat', 'mergerequestfields', 'preservestate', 'returnurl', 'continue'
+ );
+ }
+
+ public function dynamicParameterDocumentation() {
+ return [ 'api-help-authmanagerhelper-additional-params', AuthManager::ACTION_LOGIN ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=clientlogin&username=Example&password=ExamplePassword&'
+ . 'loginreturnurl=http://example.org/&logintoken=123ABC'
+ => 'apihelp-clientlogin-example-login',
+ 'action=clientlogin&logincontinue=1&OATHToken=987654&logintoken=123ABC'
+ => 'apihelp-clientlogin-example-login2',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Login';
+ }
+}
diff --git a/www/wiki/includes/api/ApiComparePages.php b/www/wiki/includes/api/ApiComparePages.php
new file mode 100644
index 00000000..93c35d3d
--- /dev/null
+++ b/www/wiki/includes/api/ApiComparePages.php
@@ -0,0 +1,520 @@
+<?php
+/**
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class ApiComparePages extends ApiBase {
+
+ private $guessed = false, $guessedTitle, $guessedModel, $props;
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ // Parameter validation
+ $this->requireAtLeastOneParameter( $params, 'fromtitle', 'fromid', 'fromrev', 'fromtext' );
+ $this->requireAtLeastOneParameter( $params, 'totitle', 'toid', 'torev', 'totext', 'torelative' );
+
+ $this->props = array_flip( $params['prop'] );
+
+ // Cache responses publicly by default. This may be overridden later.
+ $this->getMain()->setCacheMode( 'public' );
+
+ // Get the 'from' Revision and Content
+ list( $fromRev, $fromContent, $relRev ) = $this->getDiffContent( 'from', $params );
+
+ // Get the 'to' Revision and Content
+ if ( $params['torelative'] !== null ) {
+ if ( !$relRev ) {
+ $this->dieWithError( 'apierror-compare-relative-to-nothing' );
+ }
+ switch ( $params['torelative'] ) {
+ case 'prev':
+ // Swap 'from' and 'to'
+ $toRev = $fromRev;
+ $toContent = $fromContent;
+ $fromRev = $relRev->getPrevious();
+ $fromContent = $fromRev
+ ? $fromRev->getContent( Revision::FOR_THIS_USER, $this->getUser() )
+ : $toContent->getContentHandler()->makeEmptyContent();
+ if ( !$fromContent ) {
+ $this->dieWithError(
+ [ 'apierror-missingcontent-revid', $fromRev->getId() ], 'missingcontent'
+ );
+ }
+ break;
+
+ case 'next':
+ $toRev = $relRev->getNext();
+ $toContent = $toRev
+ ? $toRev->getContent( Revision::FOR_THIS_USER, $this->getUser() )
+ : $fromContent;
+ if ( !$toContent ) {
+ $this->dieWithError( [ 'apierror-missingcontent-revid', $toRev->getId() ], 'missingcontent' );
+ }
+ break;
+
+ case 'cur':
+ $title = $relRev->getTitle();
+ $id = $title->getLatestRevID();
+ $toRev = $id ? Revision::newFromId( $id ) : null;
+ if ( !$toRev ) {
+ $this->dieWithError(
+ [ 'apierror-missingrev-title', wfEscapeWikiText( $title->getPrefixedText() ) ], 'nosuchrevid'
+ );
+ }
+ $toContent = $toRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+ if ( !$toContent ) {
+ $this->dieWithError( [ 'apierror-missingcontent-revid', $toRev->getId() ], 'missingcontent' );
+ }
+ break;
+ }
+ $relRev2 = null;
+ } else {
+ list( $toRev, $toContent, $relRev2 ) = $this->getDiffContent( 'to', $params );
+ }
+
+ // Should never happen, but just in case...
+ if ( !$fromContent || !$toContent ) {
+ $this->dieWithError( 'apierror-baddiff' );
+ }
+
+ // Extract sections, if told to
+ if ( isset( $params['fromsection'] ) ) {
+ $fromContent = $fromContent->getSection( $params['fromsection'] );
+ if ( !$fromContent ) {
+ $this->dieWithError(
+ [ 'apierror-compare-nosuchfromsection', wfEscapeWikiText( $params['fromsection'] ) ],
+ 'nosuchfromsection'
+ );
+ }
+ }
+ if ( isset( $params['tosection'] ) ) {
+ $toContent = $toContent->getSection( $params['tosection'] );
+ if ( !$toContent ) {
+ $this->dieWithError(
+ [ 'apierror-compare-nosuchtosection', wfEscapeWikiText( $params['tosection'] ) ],
+ 'nosuchtosection'
+ );
+ }
+ }
+
+ // Get the diff
+ $context = new DerivativeContext( $this->getContext() );
+ if ( $relRev && $relRev->getTitle() ) {
+ $context->setTitle( $relRev->getTitle() );
+ } elseif ( $relRev2 && $relRev2->getTitle() ) {
+ $context->setTitle( $relRev2->getTitle() );
+ } else {
+ $this->guessTitleAndModel();
+ if ( $this->guessedTitle ) {
+ $context->setTitle( $this->guessedTitle );
+ }
+ }
+ $de = $fromContent->getContentHandler()->createDifferenceEngine(
+ $context,
+ $fromRev ? $fromRev->getId() : 0,
+ $toRev ? $toRev->getId() : 0,
+ /* $rcid = */ null,
+ /* $refreshCache = */ false,
+ /* $unhide = */ true
+ );
+ $de->setContent( $fromContent, $toContent );
+ $difftext = $de->getDiffBody();
+ if ( $difftext === false ) {
+ $this->dieWithError( 'apierror-baddiff' );
+ }
+
+ // Fill in the response
+ $vals = [];
+ $this->setVals( $vals, 'from', $fromRev );
+ $this->setVals( $vals, 'to', $toRev );
+
+ if ( isset( $this->props['rel'] ) ) {
+ if ( $fromRev ) {
+ $rev = $fromRev->getPrevious();
+ if ( $rev ) {
+ $vals['prev'] = $rev->getId();
+ }
+ }
+ if ( $toRev ) {
+ $rev = $toRev->getNext();
+ if ( $rev ) {
+ $vals['next'] = $rev->getId();
+ }
+ }
+ }
+
+ if ( isset( $this->props['diffsize'] ) ) {
+ $vals['diffsize'] = strlen( $difftext );
+ }
+ if ( isset( $this->props['diff'] ) ) {
+ ApiResult::setContentValue( $vals, 'body', $difftext );
+ }
+
+ // Diffs can be really big and there's little point in having
+ // ApiResult truncate it to an empty response since the diff is the
+ // whole reason this module exists. So pass NO_SIZE_CHECK here.
+ $this->getResult()->addValue( null, $this->getModuleName(), $vals, ApiResult::NO_SIZE_CHECK );
+ }
+
+ /**
+ * Guess an appropriate default Title and content model for this request
+ *
+ * Fills in $this->guessedTitle based on the first of 'fromrev',
+ * 'fromtitle', 'fromid', 'torev', 'totitle', and 'toid' that's present and
+ * valid.
+ *
+ * Fills in $this->guessedModel based on the Revision or Title used to
+ * determine $this->guessedTitle, or the 'fromcontentmodel' or
+ * 'tocontentmodel' parameters if no title was guessed.
+ */
+ private function guessTitleAndModel() {
+ if ( $this->guessed ) {
+ return;
+ }
+
+ $this->guessed = true;
+ $params = $this->extractRequestParams();
+
+ foreach ( [ 'from', 'to' ] as $prefix ) {
+ if ( $params["{$prefix}rev"] !== null ) {
+ $revId = $params["{$prefix}rev"];
+ $rev = Revision::newFromId( $revId );
+ if ( !$rev ) {
+ // Titles of deleted revisions aren't secret, per T51088
+ $arQuery = Revision::getArchiveQueryInfo();
+ $row = $this->getDB()->selectRow(
+ $arQuery['tables'],
+ array_merge(
+ $arQuery['fields'],
+ [ 'ar_namespace', 'ar_title' ]
+ ),
+ [ 'ar_rev_id' => $revId ],
+ __METHOD__,
+ [],
+ $arQuery['joins']
+ );
+ if ( $row ) {
+ $rev = Revision::newFromArchiveRow( $row );
+ }
+ }
+ if ( $rev ) {
+ $this->guessedTitle = $rev->getTitle();
+ $this->guessedModel = $rev->getContentModel();
+ break;
+ }
+ }
+
+ if ( $params["{$prefix}title"] !== null ) {
+ $title = Title::newFromText( $params["{$prefix}title"] );
+ if ( $title && !$title->isExternal() ) {
+ $this->guessedTitle = $title;
+ break;
+ }
+ }
+
+ if ( $params["{$prefix}id"] !== null ) {
+ $title = Title::newFromID( $params["{$prefix}id"] );
+ if ( $title ) {
+ $this->guessedTitle = $title;
+ break;
+ }
+ }
+ }
+
+ if ( !$this->guessedModel ) {
+ if ( $this->guessedTitle ) {
+ $this->guessedModel = $this->guessedTitle->getContentModel();
+ } elseif ( $params['fromcontentmodel'] !== null ) {
+ $this->guessedModel = $params['fromcontentmodel'];
+ } elseif ( $params['tocontentmodel'] !== null ) {
+ $this->guessedModel = $params['tocontentmodel'];
+ }
+ }
+ }
+
+ /**
+ * Get the Revision and Content for one side of the diff
+ *
+ * This uses the appropriate set of 'rev', 'id', 'title', 'text', 'pst',
+ * 'contentmodel', and 'contentformat' parameters to determine what content
+ * should be diffed.
+ *
+ * Returns three values:
+ * - The revision used to retrieve the content, if any
+ * - The content to be diffed
+ * - The revision specified, if any, even if not used to retrieve the
+ * Content
+ *
+ * @param string $prefix 'from' or 'to'
+ * @param array $params
+ * @return array [ Revision|null, Content, Revision|null ]
+ */
+ private function getDiffContent( $prefix, array $params ) {
+ $title = null;
+ $rev = null;
+ $suppliedContent = $params["{$prefix}text"] !== null;
+
+ // Get the revision and title, if applicable
+ $revId = null;
+ if ( $params["{$prefix}rev"] !== null ) {
+ $revId = $params["{$prefix}rev"];
+ } elseif ( $params["{$prefix}title"] !== null || $params["{$prefix}id"] !== null ) {
+ if ( $params["{$prefix}title"] !== null ) {
+ $title = Title::newFromText( $params["{$prefix}title"] );
+ if ( !$title || $title->isExternal() ) {
+ $this->dieWithError(
+ [ 'apierror-invalidtitle', wfEscapeWikiText( $params["{$prefix}title"] ) ]
+ );
+ }
+ } else {
+ $title = Title::newFromID( $params["{$prefix}id"] );
+ if ( !$title ) {
+ $this->dieWithError( [ 'apierror-nosuchpageid', $params["{$prefix}id"] ] );
+ }
+ }
+ $revId = $title->getLatestRevID();
+ if ( !$revId ) {
+ $revId = null;
+ // Only die here if we're not using supplied text
+ if ( !$suppliedContent ) {
+ if ( $title->exists() ) {
+ $this->dieWithError(
+ [ 'apierror-missingrev-title', wfEscapeWikiText( $title->getPrefixedText() ) ], 'nosuchrevid'
+ );
+ } else {
+ $this->dieWithError(
+ [ 'apierror-missingtitle-byname', wfEscapeWikiText( $title->getPrefixedText() ) ],
+ 'missingtitle'
+ );
+ }
+ }
+ }
+ }
+ if ( $revId !== null ) {
+ $rev = Revision::newFromId( $revId );
+ if ( !$rev && $this->getUser()->isAllowedAny( 'deletedtext', 'undelete' ) ) {
+ // Try the 'archive' table
+ $arQuery = Revision::getArchiveQueryInfo();
+ $row = $this->getDB()->selectRow(
+ $arQuery['tables'],
+ array_merge(
+ $arQuery['fields'],
+ [ 'ar_namespace', 'ar_title' ]
+ ),
+ [ 'ar_rev_id' => $revId ],
+ __METHOD__,
+ [],
+ $arQuery['joins']
+ );
+ if ( $row ) {
+ $rev = Revision::newFromArchiveRow( $row );
+ $rev->isArchive = true;
+ }
+ }
+ if ( !$rev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $revId ] );
+ }
+ $title = $rev->getTitle();
+
+ // If we don't have supplied content, return here. Otherwise,
+ // continue on below with the supplied content.
+ if ( !$suppliedContent ) {
+ $content = $rev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+ if ( !$content ) {
+ $this->dieWithError( [ 'apierror-missingcontent-revid', $revId ], 'missingcontent' );
+ }
+ return [ $rev, $content, $rev ];
+ }
+ }
+
+ // Override $content based on supplied text
+ $model = $params["{$prefix}contentmodel"];
+ $format = $params["{$prefix}contentformat"];
+
+ if ( !$model && $rev ) {
+ $model = $rev->getContentModel();
+ }
+ if ( !$model && $title ) {
+ $model = $title->getContentModel();
+ }
+ if ( !$model ) {
+ $this->guessTitleAndModel();
+ $model = $this->guessedModel;
+ }
+ if ( !$model ) {
+ $model = CONTENT_MODEL_WIKITEXT;
+ $this->addWarning( [ 'apiwarn-compare-nocontentmodel', $model ] );
+ }
+
+ if ( !$title ) {
+ $this->guessTitleAndModel();
+ $title = $this->guessedTitle;
+ }
+
+ try {
+ $content = ContentHandler::makeContent( $params["{$prefix}text"], $title, $model, $format );
+ } catch ( MWContentSerializationException $ex ) {
+ $this->dieWithException( $ex, [
+ 'wrap' => ApiMessage::create( 'apierror-contentserializationexception', 'parseerror' )
+ ] );
+ }
+
+ if ( $params["{$prefix}pst"] ) {
+ if ( !$title ) {
+ $this->dieWithError( 'apierror-compare-no-title' );
+ }
+ $popts = ParserOptions::newFromContext( $this->getContext() );
+ $content = $content->preSaveTransform( $title, $this->getUser(), $popts );
+ }
+
+ return [ null, $content, $rev ];
+ }
+
+ /**
+ * Set value fields from a Revision object
+ * @param array &$vals Result array to set data into
+ * @param string $prefix 'from' or 'to'
+ * @param Revision|null $rev
+ */
+ private function setVals( &$vals, $prefix, $rev ) {
+ if ( $rev ) {
+ $title = $rev->getTitle();
+ if ( isset( $this->props['ids'] ) ) {
+ $vals["{$prefix}id"] = $title->getArticleID();
+ $vals["{$prefix}revid"] = $rev->getId();
+ }
+ if ( isset( $this->props['title'] ) ) {
+ ApiQueryBase::addTitleInfo( $vals, $title, $prefix );
+ }
+ if ( isset( $this->props['size'] ) ) {
+ $vals["{$prefix}size"] = $rev->getSize();
+ }
+
+ $anyHidden = false;
+ if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
+ $vals["{$prefix}texthidden"] = true;
+ $anyHidden = true;
+ }
+
+ if ( $rev->isDeleted( Revision::DELETED_USER ) ) {
+ $vals["{$prefix}userhidden"] = true;
+ $anyHidden = true;
+ }
+ if ( isset( $this->props['user'] ) &&
+ $rev->userCan( Revision::DELETED_USER, $this->getUser() )
+ ) {
+ $vals["{$prefix}user"] = $rev->getUserText( Revision::RAW );
+ $vals["{$prefix}userid"] = $rev->getUser( Revision::RAW );
+ }
+
+ if ( $rev->isDeleted( Revision::DELETED_COMMENT ) ) {
+ $vals["{$prefix}commenthidden"] = true;
+ $anyHidden = true;
+ }
+ if ( $rev->userCan( Revision::DELETED_COMMENT, $this->getUser() ) ) {
+ if ( isset( $this->props['comment'] ) ) {
+ $vals["{$prefix}comment"] = $rev->getComment( Revision::RAW );
+ }
+ if ( isset( $this->props['parsedcomment'] ) ) {
+ $vals["{$prefix}parsedcomment"] = Linker::formatComment(
+ $rev->getComment( Revision::RAW ),
+ $rev->getTitle()
+ );
+ }
+ }
+
+ if ( $anyHidden ) {
+ $this->getMain()->setCacheMode( 'private' );
+ if ( $rev->isDeleted( Revision::DELETED_RESTRICTED ) ) {
+ $vals["{$prefix}suppressed"] = true;
+ }
+ }
+
+ if ( !empty( $rev->isArchive ) ) {
+ $this->getMain()->setCacheMode( 'private' );
+ $vals["{$prefix}archive"] = true;
+ }
+ }
+ }
+
+ public function getAllowedParams() {
+ // Parameters for the 'from' and 'to' content
+ $fromToParams = [
+ 'title' => null,
+ 'id' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'rev' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'text' => [
+ ApiBase::PARAM_TYPE => 'text'
+ ],
+ 'section' => null,
+ 'pst' => false,
+ 'contentformat' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ],
+ 'contentmodel' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+ ]
+ ];
+
+ $ret = [];
+ foreach ( $fromToParams as $k => $v ) {
+ $ret["from$k"] = $v;
+ }
+ foreach ( $fromToParams as $k => $v ) {
+ $ret["to$k"] = $v;
+ }
+
+ $ret = wfArrayInsertAfter(
+ $ret,
+ [ 'torelative' => [ ApiBase::PARAM_TYPE => [ 'prev', 'next', 'cur' ], ] ],
+ 'torev'
+ );
+
+ $ret['prop'] = [
+ ApiBase::PARAM_DFLT => 'diff|ids|title',
+ ApiBase::PARAM_TYPE => [
+ 'diff',
+ 'diffsize',
+ 'rel',
+ 'ids',
+ 'title',
+ 'user',
+ 'comment',
+ 'parsedcomment',
+ 'size',
+ ],
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ];
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=compare&fromrev=1&torev=2'
+ => 'apihelp-compare-example-1',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiContinuationManager.php b/www/wiki/includes/api/ApiContinuationManager.php
new file mode 100644
index 00000000..7da8ed9a
--- /dev/null
+++ b/www/wiki/includes/api/ApiContinuationManager.php
@@ -0,0 +1,271 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This manages continuation state.
+ * @since 1.25 this is no longer a subclass of ApiBase
+ * @ingroup API
+ */
+class ApiContinuationManager {
+ private $source;
+
+ private $allModules = [];
+ private $generatedModules = [];
+
+ private $continuationData = [];
+ private $generatorContinuationData = [];
+ private $generatorNonContinuationData = [];
+
+ private $generatorParams = [];
+ private $generatorDone = false;
+
+ /**
+ * @param ApiBase $module Module starting the continuation
+ * @param ApiBase[] $allModules Contains ApiBase instances that will be executed
+ * @param array $generatedModules Names of modules that depend on the generator
+ * @throws ApiUsageException
+ */
+ public function __construct(
+ ApiBase $module, array $allModules = [], array $generatedModules = []
+ ) {
+ $this->source = get_class( $module );
+ $request = $module->getRequest();
+
+ $this->generatedModules = $generatedModules
+ ? array_combine( $generatedModules, $generatedModules )
+ : [];
+
+ $skip = [];
+ $continue = $request->getVal( 'continue', '' );
+ if ( $continue !== '' ) {
+ $continue = explode( '||', $continue );
+ if ( count( $continue ) !== 2 ) {
+ throw ApiUsageException::newWithMessage( $module->getMain(), 'apierror-badcontinue' );
+ }
+ $this->generatorDone = ( $continue[0] === '-' );
+ $skip = explode( '|', $continue[1] );
+ if ( !$this->generatorDone ) {
+ $params = explode( '|', $continue[0] );
+ if ( $params ) {
+ $this->generatorParams = array_intersect_key(
+ $request->getValues(),
+ array_flip( $params )
+ );
+ }
+ } else {
+ // When the generator is complete, don't run any modules that
+ // depend on it.
+ $skip += $this->generatedModules;
+ }
+ }
+
+ foreach ( $allModules as $module ) {
+ $name = $module->getModuleName();
+ if ( in_array( $name, $skip, true ) ) {
+ $this->allModules[$name] = false;
+ // Prevent spurious "unused parameter" warnings
+ $module->extractRequestParams();
+ } else {
+ $this->allModules[$name] = $module;
+ }
+ }
+ }
+
+ /**
+ * Get the class that created this manager
+ * @return string
+ */
+ public function getSource() {
+ return $this->source;
+ }
+
+ /**
+ * Is the generator done?
+ * @return bool
+ */
+ public function isGeneratorDone() {
+ return $this->generatorDone;
+ }
+
+ /**
+ * Get the list of modules that should actually be run
+ * @return ApiBase[]
+ */
+ public function getRunModules() {
+ return array_values( array_filter( $this->allModules ) );
+ }
+
+ /**
+ * Set the continuation parameter for a module
+ * @param ApiBase $module
+ * @param string $paramName
+ * @param string|array $paramValue
+ * @throws UnexpectedValueException
+ */
+ public function addContinueParam( ApiBase $module, $paramName, $paramValue ) {
+ $name = $module->getModuleName();
+ if ( !isset( $this->allModules[$name] ) ) {
+ throw new UnexpectedValueException(
+ "Module '$name' called " . __METHOD__ .
+ ' but was not passed to ' . __CLASS__ . '::__construct'
+ );
+ }
+ if ( !$this->allModules[$name] ) {
+ throw new UnexpectedValueException(
+ "Module '$name' was not supposed to have been executed, but " .
+ 'it was executed anyway'
+ );
+ }
+ $paramName = $module->encodeParamName( $paramName );
+ if ( is_array( $paramValue ) ) {
+ $paramValue = implode( '|', $paramValue );
+ }
+ $this->continuationData[$name][$paramName] = $paramValue;
+ }
+
+ /**
+ * Set the non-continuation parameter for the generator module
+ *
+ * In case the generator isn't going to be continued, this sets the fields
+ * to return.
+ *
+ * @since 1.28
+ * @param ApiBase $module
+ * @param string $paramName
+ * @param string|array $paramValue
+ */
+ public function addGeneratorNonContinueParam( ApiBase $module, $paramName, $paramValue ) {
+ $name = $module->getModuleName();
+ $paramName = $module->encodeParamName( $paramName );
+ if ( is_array( $paramValue ) ) {
+ $paramValue = implode( '|', $paramValue );
+ }
+ $this->generatorNonContinuationData[$name][$paramName] = $paramValue;
+ }
+
+ /**
+ * Set the continuation parameter for the generator module
+ * @param ApiBase $module
+ * @param string $paramName
+ * @param string|array $paramValue
+ */
+ public function addGeneratorContinueParam( ApiBase $module, $paramName, $paramValue ) {
+ $name = $module->getModuleName();
+ $paramName = $module->encodeParamName( $paramName );
+ if ( is_array( $paramValue ) ) {
+ $paramValue = implode( '|', $paramValue );
+ }
+ $this->generatorContinuationData[$name][$paramName] = $paramValue;
+ }
+
+ /**
+ * Fetch raw continuation data
+ * @return array
+ */
+ public function getRawContinuation() {
+ return array_merge_recursive( $this->continuationData, $this->generatorContinuationData );
+ }
+
+ /**
+ * Fetch raw non-continuation data
+ * @since 1.28
+ * @return array
+ */
+ public function getRawNonContinuation() {
+ return $this->generatorNonContinuationData;
+ }
+
+ /**
+ * Fetch continuation result data
+ * @return array [ (array)$data, (bool)$batchcomplete ]
+ */
+ public function getContinuation() {
+ $data = [];
+ $batchcomplete = false;
+
+ $finishedModules = array_diff(
+ array_keys( $this->allModules ),
+ array_keys( $this->continuationData )
+ );
+
+ // First, grab the non-generator-using continuation data
+ $continuationData = array_diff_key( $this->continuationData, $this->generatedModules );
+ foreach ( $continuationData as $module => $kvp ) {
+ $data += $kvp;
+ }
+
+ // Next, handle the generator-using continuation data
+ $continuationData = array_intersect_key( $this->continuationData, $this->generatedModules );
+ if ( $continuationData ) {
+ // Some modules are unfinished: include those params, and copy
+ // the generator params.
+ foreach ( $continuationData as $module => $kvp ) {
+ $data += $kvp;
+ }
+ $generatorParams = [];
+ foreach ( $this->generatorNonContinuationData as $kvp ) {
+ $generatorParams += $kvp;
+ }
+ $generatorParams += $this->generatorParams;
+ $data += $generatorParams;
+ $generatorKeys = implode( '|', array_keys( $generatorParams ) );
+ } elseif ( $this->generatorContinuationData ) {
+ // All the generator-using modules are complete, but the
+ // generator isn't. Continue the generator and restart the
+ // generator-using modules
+ $generatorParams = [];
+ foreach ( $this->generatorContinuationData as $kvp ) {
+ $generatorParams += $kvp;
+ }
+ $data += $generatorParams;
+ $finishedModules = array_diff( $finishedModules, $this->generatedModules );
+ $generatorKeys = implode( '|', array_keys( $generatorParams ) );
+ $batchcomplete = true;
+ } else {
+ // Generator and prop modules are all done. Mark it so.
+ $generatorKeys = '-';
+ $batchcomplete = true;
+ }
+
+ // Set 'continue' if any continuation data is set or if the generator
+ // still needs to run
+ if ( $data || $generatorKeys !== '-' ) {
+ $data['continue'] = $generatorKeys . '||' . implode( '|', $finishedModules );
+ }
+
+ return [ $data, $batchcomplete ];
+ }
+
+ /**
+ * Store the continuation data into the result
+ * @param ApiResult $result
+ */
+ public function setContinuationIntoResult( ApiResult $result ) {
+ list( $data, $batchcomplete ) = $this->getContinuation();
+ if ( $data ) {
+ $result->addValue( null, 'continue', $data,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ if ( $batchcomplete ) {
+ $result->addValue( null, 'batchcomplete', true,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ }
+}
diff --git a/www/wiki/includes/api/ApiDelete.php b/www/wiki/includes/api/ApiDelete.php
new file mode 100644
index 00000000..a63dee6f
--- /dev/null
+++ b/www/wiki/includes/api/ApiDelete.php
@@ -0,0 +1,230 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that facilitates deleting pages. The API equivalent of action=delete.
+ * Requires API write mode to be enabled.
+ *
+ * @ingroup API
+ */
+class ApiDelete extends ApiBase {
+ /**
+ * Extracts the title and reason from the request parameters and invokes
+ * the local delete() function with these as arguments. It does not make use of
+ * the delete function specified by Article.php. If the deletion succeeds, the
+ * details of the article deleted and the reason for deletion are added to the
+ * result object.
+ */
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $params = $this->extractRequestParams();
+
+ $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
+ $titleObj = $pageObj->getTitle();
+ if ( !$pageObj->exists() &&
+ !( $titleObj->getNamespace() == NS_FILE && self::canDeleteFile( $pageObj->getFile() ) )
+ ) {
+ $this->dieWithError( 'apierror-missingtitle' );
+ }
+
+ $reason = $params['reason'];
+ $user = $this->getUser();
+
+ // Check that the user is allowed to carry out the deletion
+ $this->checkTitleUserPermissions( $titleObj, 'delete' );
+
+ // If change tagging was requested, check that the user is allowed to tag,
+ // and the tags are valid
+ if ( $params['tags'] ) {
+ $tagStatus = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$tagStatus->isOK() ) {
+ $this->dieStatus( $tagStatus );
+ }
+ }
+
+ if ( $titleObj->getNamespace() == NS_FILE ) {
+ $status = self::deleteFile(
+ $pageObj,
+ $user,
+ $params['oldimage'],
+ $reason,
+ false,
+ $params['tags']
+ );
+ } else {
+ $status = self::delete( $pageObj, $user, $reason, $params['tags'] );
+ }
+
+ if ( !$status->isGood() ) {
+ $this->dieStatus( $status );
+ }
+
+ // Deprecated parameters
+ if ( $params['watch'] ) {
+ $watch = 'watch';
+ } elseif ( $params['unwatch'] ) {
+ $watch = 'unwatch';
+ } else {
+ $watch = $params['watchlist'];
+ }
+ $this->setWatch( $watch, $titleObj, 'watchdeletion' );
+
+ $r = [
+ 'title' => $titleObj->getPrefixedText(),
+ 'reason' => $reason,
+ 'logid' => $status->value
+ ];
+ $this->getResult()->addValue( null, $this->getModuleName(), $r );
+ }
+
+ /**
+ * We have our own delete() function, since Article.php's implementation is split in two phases
+ *
+ * @param Page|WikiPage $page Page or WikiPage object to work on
+ * @param User $user User doing the action
+ * @param string|null &$reason Reason for the deletion. Autogenerated if null
+ * @param array $tags Tags to tag the deletion with
+ * @return Status
+ */
+ protected static function delete( Page $page, User $user, &$reason = null, $tags = [] ) {
+ $title = $page->getTitle();
+
+ // Auto-generate a summary, if necessary
+ if ( is_null( $reason ) ) {
+ // Need to pass a throwaway variable because generateReason expects
+ // a reference
+ $hasHistory = false;
+ $reason = $page->getAutoDeleteReason( $hasHistory );
+ if ( $reason === false ) {
+ // Should be reachable only if the page has no revisions
+ return Status::newFatal( 'cannotdelete', $title->getPrefixedText() ); // @codeCoverageIgnore
+ }
+ }
+
+ $error = '';
+
+ // Luckily, Article.php provides a reusable delete function that does the hard work for us
+ return $page->doDeleteArticleReal( $reason, false, 0, true, $error, $user, $tags );
+ }
+
+ /**
+ * @param File $file
+ * @return bool
+ */
+ protected static function canDeleteFile( File $file ) {
+ return $file->exists() && $file->isLocal() && !$file->getRedirected();
+ }
+
+ /**
+ * @param Page $page Object to work on
+ * @param User $user User doing the action
+ * @param string $oldimage Archive name
+ * @param string &$reason Reason for the deletion. Autogenerated if null.
+ * @param bool $suppress Whether to mark all deleted versions as restricted
+ * @param array $tags Tags to tag the deletion with
+ * @return Status
+ */
+ protected static function deleteFile( Page $page, User $user, $oldimage,
+ &$reason = null, $suppress = false, $tags = []
+ ) {
+ $title = $page->getTitle();
+
+ $file = $page->getFile();
+ if ( !self::canDeleteFile( $file ) ) {
+ return self::delete( $page, $user, $reason, $tags );
+ }
+
+ if ( $oldimage ) {
+ if ( !FileDeleteForm::isValidOldSpec( $oldimage ) ) {
+ return Status::newFatal( 'invalidoldimage' );
+ }
+ $oldfile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $title, $oldimage );
+ if ( !$oldfile->exists() || !$oldfile->isLocal() || $oldfile->getRedirected() ) {
+ return Status::newFatal( 'nodeleteablefile' );
+ }
+ }
+
+ if ( is_null( $reason ) ) { // Log and RC don't like null reasons
+ $reason = '';
+ }
+
+ return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress, $user, $tags );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => null,
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'reason' => null,
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'watch' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'watchlist' => [
+ ApiBase::PARAM_DFLT => 'preferences',
+ ApiBase::PARAM_TYPE => [
+ 'watch',
+ 'unwatch',
+ 'preferences',
+ 'nochange'
+ ],
+ ],
+ 'unwatch' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'oldimage' => null,
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=delete&title=Main%20Page&token=123ABC'
+ => 'apihelp-delete-example-simple',
+ 'action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
+ => 'apihelp-delete-example-reason',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Delete';
+ }
+}
diff --git a/www/wiki/includes/api/ApiDisabled.php b/www/wiki/includes/api/ApiDisabled.php
new file mode 100644
index 00000000..32111894
--- /dev/null
+++ b/www/wiki/includes/api/ApiDisabled.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that dies with an error immediately.
+ *
+ * Use this to disable core modules with
+ * $wgAPIModules['modulename'] = 'ApiDisabled';
+ *
+ * To disable submodules of action=query, use ApiQueryDisabled instead
+ *
+ * @ingroup API
+ */
+class ApiDisabled extends ApiBase {
+
+ public function execute() {
+ $this->dieWithError( [ 'apierror-moduledisabled', $this->getModuleName() ] );
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ protected function getDescriptionMessage() {
+ return 'apihelp-disabled-summary';
+ }
+
+ protected function getSummaryMessage() {
+ return 'apihelp-disabled-summary';
+ }
+
+ protected function getExtendedDescription() {
+ return 'apihelp-disabled-extended-description';
+ }
+}
diff --git a/www/wiki/includes/api/ApiEditPage.php b/www/wiki/includes/api/ApiEditPage.php
new file mode 100644
index 00000000..83f72e54
--- /dev/null
+++ b/www/wiki/includes/api/ApiEditPage.php
@@ -0,0 +1,625 @@
+<?php
+/**
+ * Copyright © 2007 Iker Labarga "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A module that allows for editing and creating pages.
+ *
+ * Currently, this wraps around the EditPage class in an ugly way,
+ * EditPage.php should be rewritten to provide a cleaner interface,
+ * see T20654 if you're inspired to fix this.
+ *
+ * @ingroup API
+ */
+class ApiEditPage extends ApiBase {
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ $this->requireAtLeastOneParameter( $params, 'text', 'appendtext', 'prependtext', 'undo' );
+
+ $pageObj = $this->getTitleOrPageId( $params );
+ $titleObj = $pageObj->getTitle();
+ $apiResult = $this->getResult();
+
+ if ( $params['redirect'] ) {
+ if ( $params['prependtext'] === null && $params['appendtext'] === null
+ && $params['section'] !== 'new'
+ ) {
+ $this->dieWithError( 'apierror-redirect-appendonly' );
+ }
+ if ( $titleObj->isRedirect() ) {
+ $oldTitle = $titleObj;
+
+ $titles = Revision::newFromTitle( $oldTitle, false, Revision::READ_LATEST )
+ ->getContent( Revision::FOR_THIS_USER, $user )
+ ->getRedirectChain();
+ // array_shift( $titles );
+
+ $redirValues = [];
+
+ /** @var Title $newTitle */
+ foreach ( $titles as $id => $newTitle ) {
+ if ( !isset( $titles[$id - 1] ) ) {
+ $titles[$id - 1] = $oldTitle;
+ }
+
+ $redirValues[] = [
+ 'from' => $titles[$id - 1]->getPrefixedText(),
+ 'to' => $newTitle->getPrefixedText()
+ ];
+
+ $titleObj = $newTitle;
+ }
+
+ ApiResult::setIndexedTagName( $redirValues, 'r' );
+ $apiResult->addValue( null, 'redirects', $redirValues );
+
+ // Since the page changed, update $pageObj
+ $pageObj = WikiPage::factory( $titleObj );
+ }
+ }
+
+ if ( !isset( $params['contentmodel'] ) || $params['contentmodel'] == '' ) {
+ $contentHandler = $pageObj->getContentHandler();
+ } else {
+ $contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
+ }
+ $contentModel = $contentHandler->getModelID();
+
+ $name = $titleObj->getPrefixedDBkey();
+ $model = $contentHandler->getModelID();
+
+ if ( $params['undo'] > 0 ) {
+ // allow undo via api
+ } elseif ( $contentHandler->supportsDirectApiEditing() === false ) {
+ $this->dieWithError( [ 'apierror-no-direct-editing', $model, $name ] );
+ }
+
+ if ( !isset( $params['contentformat'] ) || $params['contentformat'] == '' ) {
+ $contentFormat = $contentHandler->getDefaultFormat();
+ } else {
+ $contentFormat = $params['contentformat'];
+ }
+
+ if ( !$contentHandler->isSupportedFormat( $contentFormat ) ) {
+ $this->dieWithError( [ 'apierror-badformat', $contentFormat, $model, $name ] );
+ }
+
+ if ( $params['createonly'] && $titleObj->exists() ) {
+ $this->dieWithError( 'apierror-articleexists' );
+ }
+ if ( $params['nocreate'] && !$titleObj->exists() ) {
+ $this->dieWithError( 'apierror-missingtitle' );
+ }
+
+ // Now let's check whether we're even allowed to do this
+ $this->checkTitleUserPermissions(
+ $titleObj,
+ $titleObj->exists() ? 'edit' : [ 'edit', 'create' ]
+ );
+
+ $toMD5 = $params['text'];
+ if ( !is_null( $params['appendtext'] ) || !is_null( $params['prependtext'] ) ) {
+ $content = $pageObj->getContent();
+
+ if ( !$content ) {
+ if ( $titleObj->getNamespace() == NS_MEDIAWIKI ) {
+ # If this is a MediaWiki:x message, then load the messages
+ # and return the message value for x.
+ $text = $titleObj->getDefaultMessageText();
+ if ( $text === false ) {
+ $text = '';
+ }
+
+ try {
+ $content = ContentHandler::makeContent( $text, $titleObj );
+ } catch ( MWContentSerializationException $ex ) {
+ $this->dieWithException( $ex, [
+ 'wrap' => ApiMessage::create( 'apierror-contentserializationexception', 'parseerror' )
+ ] );
+ return;
+ }
+ } else {
+ # Otherwise, make a new empty content.
+ $content = $contentHandler->makeEmptyContent();
+ }
+ }
+
+ // @todo Add support for appending/prepending to the Content interface
+
+ if ( !( $content instanceof TextContent ) ) {
+ $modelName = $contentHandler->getModelID();
+ $this->dieWithError( [ 'apierror-appendnotsupported', $modelName ] );
+ }
+
+ if ( !is_null( $params['section'] ) ) {
+ if ( !$contentHandler->supportsSections() ) {
+ $modelName = $contentHandler->getModelID();
+ $this->dieWithError( [ 'apierror-sectionsnotsupported', $modelName ] );
+ }
+
+ if ( $params['section'] == 'new' ) {
+ // DWIM if they're trying to prepend/append to a new section.
+ $content = null;
+ } else {
+ // Process the content for section edits
+ $section = $params['section'];
+ $content = $content->getSection( $section );
+
+ if ( !$content ) {
+ $this->dieWithError( [ 'apierror-nosuchsection', wfEscapeWikiText( $section ) ] );
+ }
+ }
+ }
+
+ if ( !$content ) {
+ $text = '';
+ } else {
+ $text = $content->serialize( $contentFormat );
+ }
+
+ $params['text'] = $params['prependtext'] . $text . $params['appendtext'];
+ $toMD5 = $params['prependtext'] . $params['appendtext'];
+ }
+
+ if ( $params['undo'] > 0 ) {
+ if ( $params['undoafter'] > 0 ) {
+ if ( $params['undo'] < $params['undoafter'] ) {
+ list( $params['undo'], $params['undoafter'] ) =
+ [ $params['undoafter'], $params['undo'] ];
+ }
+ $undoafterRev = Revision::newFromId( $params['undoafter'] );
+ }
+ $undoRev = Revision::newFromId( $params['undo'] );
+ if ( is_null( $undoRev ) || $undoRev->isDeleted( Revision::DELETED_TEXT ) ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $params['undo'] ] );
+ }
+
+ if ( $params['undoafter'] == 0 ) {
+ $undoafterRev = $undoRev->getPrevious();
+ }
+ if ( is_null( $undoafterRev ) || $undoafterRev->isDeleted( Revision::DELETED_TEXT ) ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $params['undoafter'] ] );
+ }
+
+ if ( $undoRev->getPage() != $pageObj->getId() ) {
+ $this->dieWithError( [ 'apierror-revwrongpage', $undoRev->getId(),
+ $titleObj->getPrefixedText() ] );
+ }
+ if ( $undoafterRev->getPage() != $pageObj->getId() ) {
+ $this->dieWithError( [ 'apierror-revwrongpage', $undoafterRev->getId(),
+ $titleObj->getPrefixedText() ] );
+ }
+
+ $newContent = $contentHandler->getUndoContent(
+ $pageObj->getRevision(),
+ $undoRev,
+ $undoafterRev
+ );
+
+ if ( !$newContent ) {
+ $this->dieWithError( 'undo-failure', 'undofailure' );
+ }
+ if ( empty( $params['contentmodel'] )
+ && empty( $params['contentformat'] )
+ ) {
+ // If we are reverting content model, the new content model
+ // might not support the current serialization format, in
+ // which case go back to the old serialization format,
+ // but only if the user hasn't specified a format/model
+ // parameter.
+ if ( !$newContent->isSupportedFormat( $contentFormat ) ) {
+ $contentFormat = $undoafterRev->getContentFormat();
+ }
+ // Override content model with model of undid revision.
+ $contentModel = $newContent->getModel();
+ }
+ $params['text'] = $newContent->serialize( $contentFormat );
+ // If no summary was given and we only undid one rev,
+ // use an autosummary
+ if ( is_null( $params['summary'] ) &&
+ $titleObj->getNextRevisionID( $undoafterRev->getId() ) == $params['undo']
+ ) {
+ $params['summary'] = wfMessage( 'undo-summary' )
+ ->params( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
+ }
+ }
+
+ // See if the MD5 hash checks out
+ if ( !is_null( $params['md5'] ) && md5( $toMD5 ) !== $params['md5'] ) {
+ $this->dieWithError( 'apierror-badmd5' );
+ }
+
+ // EditPage wants to parse its stuff from a WebRequest
+ // That interface kind of sucks, but it's workable
+ $requestArray = [
+ 'wpTextbox1' => $params['text'],
+ 'format' => $contentFormat,
+ 'model' => $contentModel,
+ 'wpEditToken' => $params['token'],
+ 'wpIgnoreBlankSummary' => true,
+ 'wpIgnoreBlankArticle' => true,
+ 'wpIgnoreSelfRedirect' => true,
+ 'bot' => $params['bot'],
+ 'wpUnicodeCheck' => EditPage::UNICODE_CHECK,
+ ];
+
+ if ( !is_null( $params['summary'] ) ) {
+ $requestArray['wpSummary'] = $params['summary'];
+ }
+
+ if ( !is_null( $params['sectiontitle'] ) ) {
+ $requestArray['wpSectionTitle'] = $params['sectiontitle'];
+ }
+
+ // TODO: Pass along information from 'undoafter' as well
+ if ( $params['undo'] > 0 ) {
+ $requestArray['wpUndidRevision'] = $params['undo'];
+ }
+
+ // Watch out for basetimestamp == '' or '0'
+ // It gets treated as NOW, almost certainly causing an edit conflict
+ if ( $params['basetimestamp'] !== null && (bool)$this->getMain()->getVal( 'basetimestamp' ) ) {
+ $requestArray['wpEdittime'] = $params['basetimestamp'];
+ } else {
+ $requestArray['wpEdittime'] = $pageObj->getTimestamp();
+ }
+
+ if ( $params['starttimestamp'] !== null ) {
+ $requestArray['wpStarttime'] = $params['starttimestamp'];
+ } else {
+ $requestArray['wpStarttime'] = wfTimestampNow(); // Fake wpStartime
+ }
+
+ if ( $params['minor'] || ( !$params['notminor'] && $user->getOption( 'minordefault' ) ) ) {
+ $requestArray['wpMinoredit'] = '';
+ }
+
+ if ( $params['recreate'] ) {
+ $requestArray['wpRecreate'] = '';
+ }
+
+ if ( !is_null( $params['section'] ) ) {
+ $section = $params['section'];
+ if ( !preg_match( '/^((T-)?\d+|new)$/', $section ) ) {
+ $this->dieWithError( 'apierror-invalidsection' );
+ }
+ $content = $pageObj->getContent();
+ if ( $section !== '0' && $section != 'new'
+ && ( !$content || !$content->getSection( $section ) )
+ ) {
+ $this->dieWithError( [ 'apierror-nosuchsection', $section ] );
+ }
+ $requestArray['wpSection'] = $params['section'];
+ } else {
+ $requestArray['wpSection'] = '';
+ }
+
+ $watch = $this->getWatchlistValue( $params['watchlist'], $titleObj );
+
+ // Deprecated parameters
+ if ( $params['watch'] ) {
+ $watch = true;
+ } elseif ( $params['unwatch'] ) {
+ $watch = false;
+ }
+
+ if ( $watch ) {
+ $requestArray['wpWatchthis'] = '';
+ }
+
+ // Apply change tags
+ if ( $params['tags'] ) {
+ $tagStatus = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( $tagStatus->isOK() ) {
+ $requestArray['wpChangeTags'] = implode( ',', $params['tags'] );
+ } else {
+ $this->dieStatus( $tagStatus );
+ }
+ }
+
+ // Pass through anything else we might have been given, to support extensions
+ // This is kind of a hack but it's the best we can do to make extensions work
+ $requestArray += $this->getRequest()->getValues();
+
+ global $wgTitle, $wgRequest;
+
+ $req = new DerivativeRequest( $this->getRequest(), $requestArray, true );
+
+ // Some functions depend on $wgTitle == $ep->mTitle
+ // TODO: Make them not or check if they still do
+ $wgTitle = $titleObj;
+
+ $articleContext = new RequestContext;
+ $articleContext->setRequest( $req );
+ $articleContext->setWikiPage( $pageObj );
+ $articleContext->setUser( $this->getUser() );
+
+ /** @var Article $articleObject */
+ $articleObject = Article::newFromWikiPage( $pageObj, $articleContext );
+
+ $ep = new EditPage( $articleObject );
+
+ $ep->setApiEditOverride( true );
+ $ep->setContextTitle( $titleObj );
+ $ep->importFormData( $req );
+ $content = $ep->textbox1;
+
+ // Run hooks
+ // Handle APIEditBeforeSave parameters
+ $r = [];
+ // Deprecated in favour of EditFilterMergedContent
+ if ( !Hooks::run( 'APIEditBeforeSave', [ $ep, $content, &$r ], '1.28' ) ) {
+ if ( count( $r ) ) {
+ $r['result'] = 'Failure';
+ $apiResult->addValue( null, $this->getModuleName(), $r );
+
+ return;
+ }
+
+ $this->dieWithError( 'hookaborted' );
+ }
+
+ // Do the actual save
+ $oldRevId = $articleObject->getRevIdFetched();
+ $result = null;
+ // Fake $wgRequest for some hooks inside EditPage
+ // @todo FIXME: This interface SUCKS
+ $oldRequest = $wgRequest;
+ $wgRequest = $req;
+
+ $status = $ep->attemptSave( $result );
+ $wgRequest = $oldRequest;
+
+ switch ( $status->value ) {
+ case EditPage::AS_HOOK_ERROR:
+ case EditPage::AS_HOOK_ERROR_EXPECTED:
+ if ( isset( $status->apiHookResult ) ) {
+ $r = $status->apiHookResult;
+ $r['result'] = 'Failure';
+ $apiResult->addValue( null, $this->getModuleName(), $r );
+ return;
+ }
+ if ( !$status->getErrors() ) {
+ // This appears to be unreachable right now, because all
+ // code paths will set an error. Could change, though.
+ $status->fatal( 'hookaborted' ); //@codeCoverageIgnore
+ }
+ $this->dieStatus( $status );
+
+ // These two cases will normally have been caught earlier, and will
+ // only occur if something blocks the user between the earlier
+ // check and the check in EditPage (presumably a hook). It's not
+ // obvious that this is even possible.
+ // @codeCoverageIgnoreStart
+ case EditPage::AS_BLOCKED_PAGE_FOR_USER:
+ $this->dieWithError(
+ 'apierror-blocked',
+ 'blocked',
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
+ );
+
+ case EditPage::AS_READ_ONLY_PAGE:
+ $this->dieReadOnly();
+ // @codeCoverageIgnoreEnd
+
+ case EditPage::AS_SUCCESS_NEW_ARTICLE:
+ $r['new'] = true;
+ // fall-through
+
+ case EditPage::AS_SUCCESS_UPDATE:
+ $r['result'] = 'Success';
+ $r['pageid'] = intval( $titleObj->getArticleID() );
+ $r['title'] = $titleObj->getPrefixedText();
+ $r['contentmodel'] = $articleObject->getContentModel();
+ $newRevId = $articleObject->getLatest();
+ if ( $newRevId == $oldRevId ) {
+ $r['nochange'] = true;
+ } else {
+ $r['oldrevid'] = intval( $oldRevId );
+ $r['newrevid'] = intval( $newRevId );
+ $r['newtimestamp'] = wfTimestamp( TS_ISO_8601,
+ $pageObj->getTimestamp() );
+ }
+ break;
+
+ default:
+ if ( !$status->getErrors() ) {
+ // EditPage sometimes only sets the status code without setting
+ // any actual error messages. Supply defaults for those cases.
+ switch ( $status->value ) {
+ // Currently needed
+ case EditPage::AS_IMAGE_REDIRECT_ANON:
+ $status->fatal( 'apierror-noimageredirect-anon' );
+ break;
+ case EditPage::AS_IMAGE_REDIRECT_LOGGED:
+ $status->fatal( 'apierror-noimageredirect' );
+ break;
+ case EditPage::AS_CONTENT_TOO_BIG:
+ case EditPage::AS_MAX_ARTICLE_SIZE_EXCEEDED:
+ $status->fatal( 'apierror-contenttoobig', $this->getConfig()->get( 'MaxArticleSize' ) );
+ break;
+ case EditPage::AS_READ_ONLY_PAGE_ANON:
+ $status->fatal( 'apierror-noedit-anon' );
+ break;
+ case EditPage::AS_NO_CHANGE_CONTENT_MODEL:
+ $status->fatal( 'apierror-cantchangecontentmodel' );
+ break;
+ case EditPage::AS_ARTICLE_WAS_DELETED:
+ $status->fatal( 'apierror-pagedeleted' );
+ break;
+ case EditPage::AS_CONFLICT_DETECTED:
+ $status->fatal( 'editconflict' );
+ break;
+
+ // Currently shouldn't be needed, but here in case
+ // hooks use them without setting appropriate
+ // errors on the status.
+ // @codeCoverageIgnoreStart
+ case EditPage::AS_SPAM_ERROR:
+ $status->fatal( 'apierror-spamdetected', $result['spam'] );
+ break;
+ case EditPage::AS_READ_ONLY_PAGE_LOGGED:
+ $status->fatal( 'apierror-noedit' );
+ break;
+ case EditPage::AS_RATE_LIMITED:
+ $status->fatal( 'apierror-ratelimited' );
+ break;
+ case EditPage::AS_NO_CREATE_PERMISSION:
+ $status->fatal( 'nocreate-loggedin' );
+ break;
+ case EditPage::AS_BLANK_ARTICLE:
+ $status->fatal( 'apierror-emptypage' );
+ break;
+ case EditPage::AS_TEXTBOX_EMPTY:
+ $status->fatal( 'apierror-emptynewsection' );
+ break;
+ case EditPage::AS_SUMMARY_NEEDED:
+ $status->fatal( 'apierror-summaryrequired' );
+ break;
+ default:
+ wfWarn( __METHOD__ . ": Unknown EditPage code {$status->value} with no message" );
+ $status->fatal( 'apierror-unknownerror-editpage', $status->value );
+ break;
+ // @codeCoverageIgnoreEnd
+ }
+ }
+ $this->dieStatus( $status );
+ }
+ $apiResult->addValue( null, $this->getModuleName(), $r );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'section' => null,
+ 'sectiontitle' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'text' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ],
+ 'summary' => null,
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'minor' => false,
+ 'notminor' => false,
+ 'bot' => false,
+ 'basetimestamp' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+ 'starttimestamp' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+ 'recreate' => false,
+ 'createonly' => false,
+ 'nocreate' => false,
+ 'watch' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'unwatch' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'watchlist' => [
+ ApiBase::PARAM_DFLT => 'preferences',
+ ApiBase::PARAM_TYPE => [
+ 'watch',
+ 'unwatch',
+ 'preferences',
+ 'nochange'
+ ],
+ ],
+ 'md5' => null,
+ 'prependtext' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ],
+ 'appendtext' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ],
+ 'undo' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_MIN => 0,
+ ApiBase::PARAM_RANGE_ENFORCE => true,
+ ],
+ 'undoafter' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_MIN => 0,
+ ApiBase::PARAM_RANGE_ENFORCE => true,
+ ],
+ 'redirect' => [
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DFLT => false,
+ ],
+ 'contentformat' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ],
+ 'contentmodel' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+ ],
+ 'token' => [
+ // Standard definition automatically inserted
+ ApiBase::PARAM_HELP_MSG_APPEND => [ 'apihelp-edit-param-token' ],
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=edit&title=Test&summary=test%20summary&' .
+ 'text=article%20content&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+ => 'apihelp-edit-example-edit',
+ 'action=edit&title=Test&summary=NOTOC&minor=&' .
+ 'prependtext=__NOTOC__%0A&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+ => 'apihelp-edit-example-prepend',
+ 'action=edit&title=Test&undo=13585&undoafter=13579&' .
+ 'basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+ => 'apihelp-edit-example-undo',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Edit';
+ }
+}
diff --git a/www/wiki/includes/api/ApiEmailUser.php b/www/wiki/includes/api/ApiEmailUser.php
new file mode 100644
index 00000000..535a3e80
--- /dev/null
+++ b/www/wiki/includes/api/ApiEmailUser.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Copyright © 2008 Bryan Tong Minh <Bryan.TongMinh@Gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API Module to facilitate sending of emails to users
+ * @ingroup API
+ */
+class ApiEmailUser extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ // Validate target
+ $targetUser = SpecialEmailUser::getTarget( $params['target'], $this->getUser() );
+ if ( !( $targetUser instanceof User ) ) {
+ switch ( $targetUser ) {
+ case 'notarget':
+ $this->dieWithError( 'apierror-notarget' );
+ case 'noemail':
+ $this->dieWithError( [ 'noemail', $params['target'] ] );
+ case 'nowikiemail':
+ $this->dieWithError( 'nowikiemailtext', 'nowikiemail' );
+ default:
+ $this->dieWithError( [ 'apierror-unknownerror', $targetUser ] );
+ }
+ }
+
+ // Check permissions and errors
+ $error = SpecialEmailUser::getPermissionsError(
+ $this->getUser(),
+ $params['token'],
+ $this->getConfig()
+ );
+ if ( $error ) {
+ $this->dieWithError( $error );
+ }
+
+ $data = [
+ 'Target' => $targetUser->getName(),
+ 'Text' => $params['text'],
+ 'Subject' => $params['subject'],
+ 'CCMe' => $params['ccme'],
+ ];
+ $retval = SpecialEmailUser::submit( $data, $this->getContext() );
+ if ( !$retval instanceof Status ) {
+ // This is probably the reason
+ $retval = Status::newFatal( 'hookaborted' );
+ }
+
+ $result = array_filter( [
+ 'result' => $retval->isGood() ? 'Success' : ( $retval->isOK() ? 'Warnings' : 'Failure' ),
+ 'warnings' => $this->getErrorFormatter()->arrayFromStatus( $retval, 'warning' ),
+ 'errors' => $this->getErrorFormatter()->arrayFromStatus( $retval, 'error' ),
+ ] );
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $result );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'target' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'subject' => null,
+ 'text' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'ccme' => false,
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=emailuser&target=WikiSysop&text=Content&token=123ABC'
+ => 'apihelp-emailuser-example-email',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Email';
+ }
+}
diff --git a/www/wiki/includes/api/ApiErrorFormatter.php b/www/wiki/includes/api/ApiErrorFormatter.php
new file mode 100644
index 00000000..c637752d
--- /dev/null
+++ b/www/wiki/includes/api/ApiErrorFormatter.php
@@ -0,0 +1,460 @@
+<?php
+/**
+ * This file contains the ApiErrorFormatter definition, plus implementations of
+ * specific formatters.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Formats errors and warnings for the API, and add them to the associated
+ * ApiResult.
+ * @since 1.25
+ * @ingroup API
+ */
+class ApiErrorFormatter {
+ /** @var Title Dummy title to silence warnings from MessageCache::parse() */
+ private static $dummyTitle = null;
+
+ /** @var ApiResult */
+ protected $result;
+
+ /** @var Language */
+ protected $lang;
+ protected $useDB = false;
+ protected $format = 'none';
+
+ /**
+ * @param ApiResult $result Into which data will be added
+ * @param Language $lang Used for i18n
+ * @param string $format
+ * - plaintext: Error message as something vaguely like plaintext
+ * (it's basically wikitext with HTML tags stripped and entities decoded)
+ * - wikitext: Error message as wikitext
+ * - html: Error message as HTML
+ * - raw: Raw message key and parameters, no human-readable text
+ * - none: Code and data only, no human-readable text
+ * @param bool $useDB Whether to use local translations for errors and warnings.
+ */
+ public function __construct( ApiResult $result, Language $lang, $format, $useDB = false ) {
+ $this->result = $result;
+ $this->lang = $lang;
+ $this->useDB = $useDB;
+ $this->format = $format;
+ }
+
+ /**
+ * Fetch the Language for this formatter
+ * @since 1.29
+ * @return Language
+ */
+ public function getLanguage() {
+ return $this->lang;
+ }
+
+ /**
+ * Fetch a dummy title to set on Messages
+ * @return Title
+ */
+ protected function getDummyTitle() {
+ if ( self::$dummyTitle === null ) {
+ self::$dummyTitle = Title::makeTitle( NS_SPECIAL, 'Badtitle/' . __METHOD__ );
+ }
+ return self::$dummyTitle;
+ }
+
+ /**
+ * Add a warning to the result
+ * @param string|null $modulePath
+ * @param Message|array|string $msg Warning message. See ApiMessage::create().
+ * @param string|null $code See ApiMessage::create().
+ * @param array|null $data See ApiMessage::create().
+ */
+ public function addWarning( $modulePath, $msg, $code = null, $data = null ) {
+ $msg = ApiMessage::create( $msg, $code, $data )
+ ->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ $this->addWarningOrError( 'warning', $modulePath, $msg );
+ }
+
+ /**
+ * Add an error to the result
+ * @param string|null $modulePath
+ * @param Message|array|string $msg Warning message. See ApiMessage::create().
+ * @param string|null $code See ApiMessage::create().
+ * @param array|null $data See ApiMessage::create().
+ */
+ public function addError( $modulePath, $msg, $code = null, $data = null ) {
+ $msg = ApiMessage::create( $msg, $code, $data )
+ ->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ $this->addWarningOrError( 'error', $modulePath, $msg );
+ }
+
+ /**
+ * Add warnings and errors from a StatusValue object to the result
+ * @param string|null $modulePath
+ * @param StatusValue $status
+ * @param string[]|string $types 'warning' and/or 'error'
+ */
+ public function addMessagesFromStatus(
+ $modulePath, StatusValue $status, $types = [ 'warning', 'error' ]
+ ) {
+ if ( $status->isGood() || !$status->getErrors() ) {
+ return;
+ }
+
+ $types = (array)$types;
+ foreach ( $status->getErrors() as $error ) {
+ if ( !in_array( $error['type'], $types, true ) ) {
+ continue;
+ }
+
+ if ( $error['type'] === 'error' ) {
+ $tag = 'error';
+ } else {
+ // Assume any unknown type is a warning
+ $tag = 'warning';
+ }
+
+ $msg = ApiMessage::create( $error )
+ ->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ $this->addWarningOrError( $tag, $modulePath, $msg );
+ }
+ }
+
+ /**
+ * Get an ApiMessage from an exception
+ * @since 1.29
+ * @param Exception|Throwable $exception
+ * @param array $options
+ * - wrap: (string|array|MessageSpecifier) Used to wrap the exception's
+ * message if it's not an ILocalizedException. The exception's message
+ * will be added as the final parameter.
+ * - code: (string) Default code
+ * - data: (array) Default extra data
+ * @return IApiMessage
+ */
+ public function getMessageFromException( $exception, array $options = [] ) {
+ $options += [ 'code' => null, 'data' => [] ];
+
+ if ( $exception instanceof ILocalizedException ) {
+ $msg = $exception->getMessageObject();
+ $params = [];
+ } elseif ( $exception instanceof MessageSpecifier ) {
+ $msg = Message::newFromSpecifier( $exception );
+ $params = [];
+ } else {
+ // Extract code and data from the exception, if applicable
+ if ( $exception instanceof UsageException ) {
+ $data = $exception->getMessageArray();
+ if ( !$options['code'] ) {
+ $options['code'] = $data['code'];
+ }
+ unset( $data['code'], $data['info'] );
+ $options['data'] = array_merge( $data, $options['data'] );
+ }
+
+ if ( isset( $options['wrap'] ) ) {
+ $msg = $options['wrap'];
+ } else {
+ $msg = new RawMessage( '$1' );
+ if ( !isset( $options['code'] ) ) {
+ $class = preg_replace( '#^Wikimedia\\\Rdbms\\\#', '', get_class( $exception ) );
+ $options['code'] = 'internal_api_error_' . $class;
+ }
+ }
+ $params = [ wfEscapeWikiText( $exception->getMessage() ) ];
+ }
+ return ApiMessage::create( $msg, $options['code'], $options['data'] )
+ ->params( $params )
+ ->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ }
+
+ /**
+ * Format an exception as an array
+ * @since 1.29
+ * @param Exception|Throwable $exception
+ * @param array $options See self::getMessageFromException(), plus
+ * - format: (string) Format override
+ * @return array
+ */
+ public function formatException( $exception, array $options = [] ) {
+ return $this->formatMessage(
+ $this->getMessageFromException( $exception, $options ),
+ isset( $options['format'] ) ? $options['format'] : null
+ );
+ }
+
+ /**
+ * Format a message as an array
+ * @param Message|array|string $msg Message. See ApiMessage::create().
+ * @param string|null $format
+ * @return array
+ */
+ public function formatMessage( $msg, $format = null ) {
+ $msg = ApiMessage::create( $msg )
+ ->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ return $this->formatMessageInternal( $msg, $format ?: $this->format );
+ }
+
+ /**
+ * Format messages from a StatusValue as an array
+ * @param StatusValue $status
+ * @param string $type 'warning' or 'error'
+ * @param string|null $format
+ * @return array
+ */
+ public function arrayFromStatus( StatusValue $status, $type = 'error', $format = null ) {
+ if ( $status->isGood() || !$status->getErrors() ) {
+ return [];
+ }
+
+ $result = new ApiResult( 1e6 );
+ $formatter = new ApiErrorFormatter(
+ $result, $this->lang, $format ?: $this->format, $this->useDB
+ );
+ $formatter->addMessagesFromStatus( null, $status, [ $type ] );
+ switch ( $type ) {
+ case 'error':
+ return (array)$result->getResultData( [ 'errors' ] );
+ case 'warning':
+ return (array)$result->getResultData( [ 'warnings' ] );
+ }
+ }
+
+ /**
+ * Turn wikitext into something resembling plaintext
+ * @since 1.29
+ * @param string $text
+ * @return string
+ */
+ public static function stripMarkup( $text ) {
+ // Turn semantic quoting tags to quotes
+ $ret = preg_replace( '!</?(var|kbd|samp|code)>!', '"', $text );
+
+ // Strip tags and decode.
+ $ret = Sanitizer::stripAllTags( $ret );
+
+ return $ret;
+ }
+
+ /**
+ * Format a Message object for raw format
+ * @param MessageSpecifier $msg
+ * @return array
+ */
+ private function formatRawMessage( MessageSpecifier $msg ) {
+ $ret = [
+ 'key' => $msg->getKey(),
+ 'params' => $msg->getParams(),
+ ];
+ ApiResult::setIndexedTagName( $ret['params'], 'param' );
+
+ // Transform Messages as parameters in the style of Message::fooParam().
+ foreach ( $ret['params'] as $i => $param ) {
+ if ( $param instanceof MessageSpecifier ) {
+ $ret['params'][$i] = [ 'message' => $this->formatRawMessage( $param ) ];
+ }
+ }
+ return $ret;
+ }
+
+ /**
+ * Format a message as an array
+ * @since 1.29
+ * @param ApiMessage|ApiRawMessage $msg
+ * @param string|null $format
+ * @return array
+ */
+ protected function formatMessageInternal( $msg, $format ) {
+ $value = [ 'code' => $msg->getApiCode() ];
+ switch ( $format ) {
+ case 'plaintext':
+ $value += [
+ 'text' => self::stripMarkup( $msg->text() ),
+ ApiResult::META_CONTENT => 'text',
+ ];
+ break;
+
+ case 'wikitext':
+ $value += [
+ 'text' => $msg->text(),
+ ApiResult::META_CONTENT => 'text',
+ ];
+ break;
+
+ case 'html':
+ $value += [
+ 'html' => $msg->parse(),
+ ApiResult::META_CONTENT => 'html',
+ ];
+ break;
+
+ case 'raw':
+ $value += $this->formatRawMessage( $msg );
+ break;
+
+ case 'none':
+ break;
+ }
+ $data = $msg->getApiData();
+ if ( $data ) {
+ $value['data'] = $msg->getApiData() + [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ }
+ return $value;
+ }
+
+ /**
+ * Actually add the warning or error to the result
+ * @param string $tag 'warning' or 'error'
+ * @param string|null $modulePath
+ * @param ApiMessage|ApiRawMessage $msg
+ */
+ protected function addWarningOrError( $tag, $modulePath, $msg ) {
+ $value = $this->formatMessageInternal( $msg, $this->format );
+ if ( $modulePath !== null ) {
+ $value += [ 'module' => $modulePath ];
+ }
+
+ $path = [ $tag . 's' ];
+ $existing = $this->result->getResultData( $path );
+ if ( $existing === null || !in_array( $value, $existing ) ) {
+ $flags = ApiResult::NO_SIZE_CHECK;
+ if ( $existing === null ) {
+ $flags |= ApiResult::ADD_ON_TOP;
+ }
+ $this->result->addValue( $path, null, $value, $flags );
+ $this->result->addIndexedTagName( $path, $tag );
+ }
+ }
+}
+
+/**
+ * Format errors and warnings in the old style, for backwards compatibility.
+ * @since 1.25
+ * @deprecated Only for backwards compatibility, do not use
+ * @ingroup API
+ */
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
+class ApiErrorFormatter_BackCompat extends ApiErrorFormatter {
+
+ /**
+ * @param ApiResult $result Into which data will be added
+ */
+ public function __construct( ApiResult $result ) {
+ parent::__construct( $result, Language::factory( 'en' ), 'none', false );
+ }
+
+ public function arrayFromStatus( StatusValue $status, $type = 'error', $format = null ) {
+ if ( $status->isGood() || !$status->getErrors() ) {
+ return [];
+ }
+
+ $result = [];
+ foreach ( $status->getErrorsByType( $type ) as $error ) {
+ $msg = ApiMessage::create( $error );
+ $error = [
+ 'message' => $msg->getKey(),
+ 'params' => $msg->getParams(),
+ 'code' => $msg->getApiCode(),
+ ] + $error;
+ ApiResult::setIndexedTagName( $error['params'], 'param' );
+ $result[] = $error;
+ }
+ ApiResult::setIndexedTagName( $result, $type );
+
+ return $result;
+ }
+
+ protected function formatMessageInternal( $msg, $format ) {
+ return [
+ 'code' => $msg->getApiCode(),
+ 'info' => $msg->text(),
+ ] + $msg->getApiData();
+ }
+
+ /**
+ * Format an exception as an array
+ * @since 1.29
+ * @param Exception|Throwable $exception
+ * @param array $options See parent::formatException(), plus
+ * - bc: (bool) Return only the string, not an array
+ * @return array|string
+ */
+ public function formatException( $exception, array $options = [] ) {
+ $ret = parent::formatException( $exception, $options );
+ return empty( $options['bc'] ) ? $ret : $ret['info'];
+ }
+
+ protected function addWarningOrError( $tag, $modulePath, $msg ) {
+ $value = self::stripMarkup( $msg->text() );
+
+ if ( $tag === 'error' ) {
+ // In BC mode, only one error
+ $existingError = $this->result->getResultData( [ 'error' ] );
+ if ( !is_array( $existingError ) ||
+ !isset( $existingError['code'] ) || !isset( $existingError['info'] )
+ ) {
+ $value = [
+ 'code' => $msg->getApiCode(),
+ 'info' => $value,
+ ] + $msg->getApiData();
+ $this->result->addValue( null, 'error', $value,
+ ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ } else {
+ if ( $modulePath === null ) {
+ $moduleName = 'unknown';
+ } else {
+ $i = strrpos( $modulePath, '+' );
+ $moduleName = $i === false ? $modulePath : substr( $modulePath, $i + 1 );
+ }
+
+ // Don't add duplicate warnings
+ $tag .= 's';
+ $path = [ $tag, $moduleName ];
+ $oldWarning = $this->result->getResultData( [ $tag, $moduleName, $tag ] );
+ if ( $oldWarning !== null ) {
+ $warnPos = strpos( $oldWarning, $value );
+ // If $value was found in $oldWarning, check if it starts at 0 or after "\n"
+ if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) {
+ // Check if $value is followed by "\n" or the end of the $oldWarning
+ $warnPos += strlen( $value );
+ if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) {
+ return;
+ }
+ }
+ // If there is a warning already, append it to the existing one
+ $value = "$oldWarning\n$value";
+ }
+ $this->result->addContentValue( $path, $tag, $value,
+ ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ }
+}
diff --git a/www/wiki/includes/api/ApiExpandTemplates.php b/www/wiki/includes/api/ApiExpandTemplates.php
new file mode 100644
index 00000000..fe49b259
--- /dev/null
+++ b/www/wiki/includes/api/ApiExpandTemplates.php
@@ -0,0 +1,229 @@
+<?php
+/**
+ * Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that functions as a shortcut to the wikitext preprocessor. Expands
+ * any templates in a provided string, and returns the result of this expansion
+ * to the caller.
+ *
+ * @ingroup API
+ */
+class ApiExpandTemplates extends ApiBase {
+
+ public function execute() {
+ // Cache may vary on the user because ParserOptions gets data from it
+ $this->getMain()->setCacheMode( 'anon-public-user-private' );
+
+ // Get parameters
+ $params = $this->extractRequestParams();
+ $this->requireMaxOneParameter( $params, 'prop', 'generatexml' );
+
+ $title = $params['title'];
+ if ( $title === null ) {
+ $titleProvided = false;
+ // A title is needed for parsing, so arbitrarily choose one
+ $title = 'API';
+ } else {
+ $titleProvided = true;
+ }
+
+ if ( $params['prop'] === null ) {
+ $this->addDeprecation(
+ 'apiwarn-deprecation-expandtemplates-prop', 'action=expandtemplates&!prop'
+ );
+ $prop = [];
+ } else {
+ $prop = array_flip( $params['prop'] );
+ }
+
+ $titleObj = Title::newFromText( $title );
+ if ( !$titleObj || $titleObj->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+
+ // Get title and revision ID for parser
+ $revid = $params['revid'];
+ if ( $revid !== null ) {
+ $rev = Revision::newFromId( $revid );
+ if ( !$rev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $revid ] );
+ }
+ $pTitleObj = $titleObj;
+ $titleObj = $rev->getTitle();
+ if ( $titleProvided ) {
+ if ( !$titleObj->equals( $pTitleObj ) ) {
+ $this->addWarning( [ 'apierror-revwrongpage', $rev->getId(),
+ wfEscapeWikiText( $pTitleObj->getPrefixedText() ) ] );
+ }
+ } else {
+ // Consider the title derived from the revid as having
+ // been provided.
+ $titleProvided = true;
+ }
+ }
+
+ $result = $this->getResult();
+
+ // Parse text
+ global $wgParser;
+ $options = ParserOptions::newFromContext( $this->getContext() );
+
+ if ( $params['includecomments'] ) {
+ $options->setRemoveComments( false );
+ }
+
+ $reset = null;
+ $suppressCache = false;
+ Hooks::run( 'ApiMakeParserOptions',
+ [ $options, $titleObj, $params, $this, &$reset, &$suppressCache ] );
+
+ $retval = [];
+
+ if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
+ $wgParser->startExternalParse( $titleObj, $options, Parser::OT_PREPROCESS );
+ $dom = $wgParser->preprocessToDom( $params['text'] );
+ if ( is_callable( [ $dom, 'saveXML' ] ) ) {
+ $xml = $dom->saveXML();
+ } else {
+ $xml = $dom->__toString();
+ }
+ if ( isset( $prop['parsetree'] ) ) {
+ unset( $prop['parsetree'] );
+ $retval['parsetree'] = $xml;
+ } else {
+ // the old way
+ $result->addValue( null, 'parsetree', $xml );
+ $result->addValue( null, ApiResult::META_BC_SUBELEMENTS, [ 'parsetree' ] );
+ }
+ }
+
+ // if they didn't want any output except (probably) the parse tree,
+ // then don't bother actually fully expanding it
+ if ( $prop || $params['prop'] === null ) {
+ $wgParser->startExternalParse( $titleObj, $options, Parser::OT_PREPROCESS );
+ $frame = $wgParser->getPreprocessor()->newFrame();
+ $wikitext = $wgParser->preprocess( $params['text'], $titleObj, $options, $revid, $frame );
+ if ( $params['prop'] === null ) {
+ // the old way
+ ApiResult::setContentValue( $retval, 'wikitext', $wikitext );
+ } else {
+ $p_output = $wgParser->getOutput();
+ if ( isset( $prop['categories'] ) ) {
+ $categories = $p_output->getCategories();
+ if ( $categories ) {
+ $categories_result = [];
+ foreach ( $categories as $category => $sortkey ) {
+ $entry = [];
+ $entry['sortkey'] = $sortkey;
+ ApiResult::setContentValue( $entry, 'category', (string)$category );
+ $categories_result[] = $entry;
+ }
+ ApiResult::setIndexedTagName( $categories_result, 'category' );
+ $retval['categories'] = $categories_result;
+ }
+ }
+ if ( isset( $prop['properties'] ) ) {
+ $properties = $p_output->getProperties();
+ if ( $properties ) {
+ ApiResult::setArrayType( $properties, 'BCkvp', 'name' );
+ ApiResult::setIndexedTagName( $properties, 'property' );
+ $retval['properties'] = $properties;
+ }
+ }
+ if ( isset( $prop['volatile'] ) ) {
+ $retval['volatile'] = $frame->isVolatile();
+ }
+ if ( isset( $prop['ttl'] ) && $frame->getTTL() !== null ) {
+ $retval['ttl'] = $frame->getTTL();
+ }
+ if ( isset( $prop['wikitext'] ) ) {
+ $retval['wikitext'] = $wikitext;
+ }
+ if ( isset( $prop['modules'] ) ) {
+ $retval['modules'] = array_values( array_unique( $p_output->getModules() ) );
+ $retval['modulescripts'] = array_values( array_unique( $p_output->getModuleScripts() ) );
+ $retval['modulestyles'] = array_values( array_unique( $p_output->getModuleStyles() ) );
+ }
+ if ( isset( $prop['jsconfigvars'] ) ) {
+ $retval['jsconfigvars'] =
+ ApiResult::addMetadataToResultVars( $p_output->getJsConfigVars() );
+ }
+ if ( isset( $prop['encodedjsconfigvars'] ) ) {
+ $retval['encodedjsconfigvars'] = FormatJson::encode(
+ $p_output->getJsConfigVars(), false, FormatJson::ALL_OK
+ );
+ $retval[ApiResult::META_SUBELEMENTS][] = 'encodedjsconfigvars';
+ }
+ if ( isset( $prop['modules'] ) &&
+ !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
+ $this->addWarning( 'apiwarn-moduleswithoutvars' );
+ }
+ }
+ }
+ ApiResult::setSubelementsList( $retval, [ 'wikitext', 'parsetree' ] );
+ $result->addValue( null, $this->getModuleName(), $retval );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => null,
+ 'text' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'revid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'prop' => [
+ ApiBase::PARAM_TYPE => [
+ 'wikitext',
+ 'categories',
+ 'properties',
+ 'volatile',
+ 'ttl',
+ 'modules',
+ 'jsconfigvars',
+ 'encodedjsconfigvars',
+ 'parsetree',
+ ],
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'includecomments' => false,
+ 'generatexml' => [
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=expandtemplates&text={{Project:Sandbox}}'
+ => 'apihelp-expandtemplates-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Parsing_wikitext#expandtemplates';
+ }
+}
diff --git a/www/wiki/includes/api/ApiFeedContributions.php b/www/wiki/includes/api/ApiFeedContributions.php
new file mode 100644
index 00000000..61a90358
--- /dev/null
+++ b/www/wiki/includes/api/ApiFeedContributions.php
@@ -0,0 +1,232 @@
+<?php
+/**
+ * Copyright © 2011 Sam Reed
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiFeedContributions extends ApiBase {
+
+ /**
+ * This module uses a custom feed wrapper printer.
+ *
+ * @return ApiFormatFeedWrapper
+ */
+ public function getCustomPrinter() {
+ return new ApiFormatFeedWrapper( $this->getMain() );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $config = $this->getConfig();
+ if ( !$config->get( 'Feed' ) ) {
+ $this->dieWithError( 'feed-unavailable' );
+ }
+
+ $feedClasses = $config->get( 'FeedClasses' );
+ if ( !isset( $feedClasses[$params['feedformat']] ) ) {
+ $this->dieWithError( 'feed-invalid' );
+ }
+
+ if ( $params['showsizediff'] && $this->getConfig()->get( 'MiserMode' ) ) {
+ $this->dieWithError( 'apierror-sizediffdisabled' );
+ }
+
+ $msg = wfMessage( 'Contributions' )->inContentLanguage()->text();
+ $feedTitle = $config->get( 'Sitename' ) . ' - ' . $msg .
+ ' [' . $config->get( 'LanguageCode' ) . ']';
+ $feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
+
+ $target = $params['user'] == 'newbies'
+ ? 'newbies'
+ : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
+
+ $feed = new $feedClasses[$params['feedformat']] (
+ $feedTitle,
+ htmlspecialchars( $msg ),
+ $feedUrl
+ );
+
+ // Convert year/month parameters to end parameter
+ $params['start'] = '';
+ $params['end'] = '';
+ $params = ContribsPager::processDateFilter( $params );
+
+ $pager = new ContribsPager( $this->getContext(), [
+ 'target' => $target,
+ 'namespace' => $params['namespace'],
+ 'start' => $params['start'],
+ 'end' => $params['end'],
+ 'tagFilter' => $params['tagfilter'],
+ 'deletedOnly' => $params['deletedonly'],
+ 'topOnly' => $params['toponly'],
+ 'newOnly' => $params['newonly'],
+ 'hideMinor' => $params['hideminor'],
+ 'showSizeDiff' => $params['showsizediff'],
+ ] );
+
+ $feedLimit = $this->getConfig()->get( 'FeedLimit' );
+ if ( $pager->getLimit() > $feedLimit ) {
+ $pager->setLimit( $feedLimit );
+ }
+
+ $feedItems = [];
+ if ( $pager->getNumRows() > 0 ) {
+ $count = 0;
+ $limit = $pager->getLimit();
+ foreach ( $pager->mResult as $row ) {
+ // ContribsPager selects one more row for navigation, skip that row
+ if ( ++$count > $limit ) {
+ break;
+ }
+ $item = $this->feedItem( $row );
+ if ( $item !== null ) {
+ $feedItems[] = $item;
+ }
+ }
+ }
+
+ ApiFormatFeedWrapper::setResult( $this->getResult(), $feed, $feedItems );
+ }
+
+ protected function feedItem( $row ) {
+ // This hook is the api contributions equivalent to the
+ // ContributionsLineEnding hook. Hook implementers may cancel
+ // the hook to signal the user is not allowed to read this item.
+ $feedItem = null;
+ $hookResult = Hooks::run(
+ 'ApiFeedContributions::feedItem',
+ [ $row, $this->getContext(), &$feedItem ]
+ );
+ // Hook returned a valid feed item
+ if ( $feedItem instanceof FeedItem ) {
+ return $feedItem;
+ // Hook was canceled and did not return a valid feed item
+ } elseif ( !$hookResult ) {
+ return null;
+ }
+
+ // Hook completed and did not return a valid feed item
+ $title = Title::makeTitle( intval( $row->page_namespace ), $row->page_title );
+ if ( $title && $title->userCan( 'read', $this->getUser() ) ) {
+ $date = $row->rev_timestamp;
+ $comments = $title->getTalkPage()->getFullURL();
+ $revision = Revision::newFromRow( $row );
+
+ return new FeedItem(
+ $title->getPrefixedText(),
+ $this->feedItemDesc( $revision ),
+ $title->getFullURL( [ 'diff' => $revision->getId() ] ),
+ $date,
+ $this->feedItemAuthor( $revision ),
+ $comments
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * @param Revision $revision
+ * @return string
+ */
+ protected function feedItemAuthor( $revision ) {
+ return $revision->getUserText();
+ }
+
+ /**
+ * @param Revision $revision
+ * @return string
+ */
+ protected function feedItemDesc( $revision ) {
+ if ( $revision ) {
+ $msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+ $content = $revision->getContent();
+
+ if ( $content instanceof TextContent ) {
+ // only textual content has a "source view".
+ $html = nl2br( htmlspecialchars( $content->getNativeData() ) );
+ } else {
+ // XXX: we could get an HTML representation of the content via getParserOutput, but that may
+ // contain JS magic and generally may not be suitable for inclusion in a feed.
+ // Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
+ // Compare also FeedUtils::formatDiffRow.
+ $html = '';
+ }
+
+ return '<p>' . htmlspecialchars( $revision->getUserText() ) . $msg .
+ htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
+ "</p>\n<hr />\n<div>" . $html . '</div>';
+ }
+
+ return '';
+ }
+
+ public function getAllowedParams() {
+ $feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
+
+ $ret = [
+ 'feedformat' => [
+ ApiBase::PARAM_DFLT => 'rss',
+ ApiBase::PARAM_TYPE => $feedFormatNames
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_TYPE => 'namespace'
+ ],
+ 'year' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'month' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'tagfilter' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => array_values( ChangeTags::listDefinedTags() ),
+ ApiBase::PARAM_DFLT => '',
+ ],
+ 'deletedonly' => false,
+ 'toponly' => false,
+ 'newonly' => false,
+ 'hideminor' => false,
+ 'showsizediff' => [
+ ApiBase::PARAM_DFLT => false,
+ ],
+ ];
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['showsizediff'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=feedcontributions&user=Example'
+ => 'apihelp-feedcontributions-example-simple',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiFeedRecentChanges.php b/www/wiki/includes/api/ApiFeedRecentChanges.php
new file mode 100644
index 00000000..e5dba8fe
--- /dev/null
+++ b/www/wiki/includes/api/ApiFeedRecentChanges.php
@@ -0,0 +1,183 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.23
+ */
+
+/**
+ * Recent changes feed.
+ *
+ * @ingroup API
+ */
+class ApiFeedRecentChanges extends ApiBase {
+
+ private $params;
+
+ /**
+ * This module uses a custom feed wrapper printer.
+ *
+ * @return ApiFormatFeedWrapper
+ */
+ public function getCustomPrinter() {
+ return new ApiFormatFeedWrapper( $this->getMain() );
+ }
+
+ /**
+ * Format the rows (generated by SpecialRecentchanges or SpecialRecentchangeslinked)
+ * as an RSS/Atom feed.
+ */
+ public function execute() {
+ $config = $this->getConfig();
+
+ $this->params = $this->extractRequestParams();
+
+ if ( !$config->get( 'Feed' ) ) {
+ $this->dieWithError( 'feed-unavailable' );
+ }
+
+ $feedClasses = $config->get( 'FeedClasses' );
+ if ( !isset( $feedClasses[$this->params['feedformat']] ) ) {
+ $this->dieWithError( 'feed-invalid' );
+ }
+
+ $this->getMain()->setCacheMode( 'public' );
+ if ( !$this->getMain()->getParameter( 'smaxage' ) ) {
+ // T65249: This page gets hit a lot, cache at least 15 seconds.
+ $this->getMain()->setCacheMaxAge( 15 );
+ }
+
+ $feedFormat = $this->params['feedformat'];
+ $specialClass = $this->params['target'] !== null
+ ? SpecialRecentChangesLinked::class
+ : SpecialRecentChanges::class;
+
+ $formatter = $this->getFeedObject( $feedFormat, $specialClass );
+
+ // Parameters are passed via the request in the context… :(
+ $context = new DerivativeContext( $this );
+ $context->setRequest( new DerivativeRequest(
+ $this->getRequest(),
+ $this->params,
+ $this->getRequest()->wasPosted()
+ ) );
+
+ // The row-getting functionality should be factored out of ChangesListSpecialPage too…
+ $rc = new $specialClass();
+ $rc->setContext( $context );
+ $rows = $rc->getRows();
+
+ $feedItems = $rows ? ChangesFeed::buildItems( $rows ) : [];
+
+ ApiFormatFeedWrapper::setResult( $this->getResult(), $formatter, $feedItems );
+ }
+
+ /**
+ * Return a ChannelFeed object.
+ *
+ * @param string $feedFormat Feed's format (either 'rss' or 'atom')
+ * @param string $specialClass Relevant special page name (either 'SpecialRecentChanges' or
+ * 'SpecialRecentChangesLinked')
+ * @return ChannelFeed
+ */
+ public function getFeedObject( $feedFormat, $specialClass ) {
+ if ( $specialClass === SpecialRecentChangesLinked::class ) {
+ $title = Title::newFromText( $this->params['target'] );
+ if ( !$title ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $this->params['target'] ) ] );
+ }
+
+ $feed = new ChangesFeed( $feedFormat, false );
+ $feedObj = $feed->getFeedObject(
+ $this->msg( 'recentchangeslinked-title', $title->getPrefixedText() )
+ ->inContentLanguage()->text(),
+ $this->msg( 'recentchangeslinked-feed' )->inContentLanguage()->text(),
+ SpecialPage::getTitleFor( 'Recentchangeslinked' )->getFullURL()
+ );
+ } else {
+ $feed = new ChangesFeed( $feedFormat, 'rcfeed' );
+ $feedObj = $feed->getFeedObject(
+ $this->msg( 'recentchanges' )->inContentLanguage()->text(),
+ $this->msg( 'recentchanges-feed-description' )->inContentLanguage()->text(),
+ SpecialPage::getTitleFor( 'Recentchanges' )->getFullURL()
+ );
+ }
+
+ return $feedObj;
+ }
+
+ public function getAllowedParams() {
+ $config = $this->getConfig();
+ $feedFormatNames = array_keys( $config->get( 'FeedClasses' ) );
+
+ $ret = [
+ 'feedformat' => [
+ ApiBase::PARAM_DFLT => 'rss',
+ ApiBase::PARAM_TYPE => $feedFormatNames,
+ ],
+
+ 'namespace' => [
+ ApiBase::PARAM_TYPE => 'namespace',
+ ],
+ 'invert' => false,
+ 'associated' => false,
+
+ 'days' => [
+ ApiBase::PARAM_DFLT => 7,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 50,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => $config->get( 'FeedLimit' ),
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'from' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+
+ 'hideminor' => false,
+ 'hidebots' => false,
+ 'hideanons' => false,
+ 'hideliu' => false,
+ 'hidepatrolled' => false,
+ 'hidemyself' => false,
+ 'hidecategorization' => false,
+
+ 'tagfilter' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+
+ 'target' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'showlinkedto' => false,
+ ];
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=feedrecentchanges'
+ => 'apihelp-feedrecentchanges-example-simple',
+ 'action=feedrecentchanges&days=30'
+ => 'apihelp-feedrecentchanges-example-30days',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiFeedWatchlist.php b/www/wiki/includes/api/ApiFeedWatchlist.php
new file mode 100644
index 00000000..393e5362
--- /dev/null
+++ b/www/wiki/includes/api/ApiFeedWatchlist.php
@@ -0,0 +1,305 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This action allows users to get their watchlist items in RSS/Atom formats.
+ * When executed, it performs a nested call to the API to get the needed data,
+ * and formats it in a proper format.
+ *
+ * @ingroup API
+ */
+class ApiFeedWatchlist extends ApiBase {
+
+ private $watchlistModule = null;
+ private $linkToSections = false;
+
+ /**
+ * This module uses a custom feed wrapper printer.
+ *
+ * @return ApiFormatFeedWrapper
+ */
+ public function getCustomPrinter() {
+ return new ApiFormatFeedWrapper( $this->getMain() );
+ }
+
+ /**
+ * Make a nested call to the API to request watchlist items in the last $hours.
+ * Wrap the result as an RSS/Atom feed.
+ */
+ public function execute() {
+ $config = $this->getConfig();
+ $feedClasses = $config->get( 'FeedClasses' );
+ $params = [];
+ try {
+ $params = $this->extractRequestParams();
+
+ if ( !$config->get( 'Feed' ) ) {
+ $this->dieWithError( 'feed-unavailable' );
+ }
+
+ if ( !isset( $feedClasses[$params['feedformat']] ) ) {
+ $this->dieWithError( 'feed-invalid' );
+ }
+
+ // limit to the number of hours going from now back
+ $endTime = wfTimestamp( TS_MW, time() - intval( $params['hours'] * 60 * 60 ) );
+
+ // Prepare parameters for nested request
+ $fauxReqArr = [
+ 'action' => 'query',
+ 'meta' => 'siteinfo',
+ 'siprop' => 'general',
+ 'list' => 'watchlist',
+ 'wlprop' => 'title|user|comment|timestamp|ids',
+ 'wldir' => 'older', // reverse order - from newest to oldest
+ 'wlend' => $endTime, // stop at this time
+ 'wllimit' => min( 50, $this->getConfig()->get( 'FeedLimit' ) )
+ ];
+
+ if ( $params['wlowner'] !== null ) {
+ $fauxReqArr['wlowner'] = $params['wlowner'];
+ }
+ if ( $params['wltoken'] !== null ) {
+ $fauxReqArr['wltoken'] = $params['wltoken'];
+ }
+ if ( $params['wlexcludeuser'] !== null ) {
+ $fauxReqArr['wlexcludeuser'] = $params['wlexcludeuser'];
+ }
+ if ( $params['wlshow'] !== null ) {
+ $fauxReqArr['wlshow'] = $params['wlshow'];
+ }
+ if ( $params['wltype'] !== null ) {
+ $fauxReqArr['wltype'] = $params['wltype'];
+ }
+
+ // Support linking directly to sections when possible
+ // (possible only if section name is present in comment)
+ if ( $params['linktosections'] ) {
+ $this->linkToSections = true;
+ }
+
+ // Check for 'allrev' parameter, and if found, show all revisions to each page on wl.
+ if ( $params['allrev'] ) {
+ $fauxReqArr['wlallrev'] = '';
+ }
+
+ // Create the request
+ $fauxReq = new FauxRequest( $fauxReqArr );
+
+ // Execute
+ $module = new ApiMain( $fauxReq );
+ $module->execute();
+
+ $data = $module->getResult()->getResultData( [ 'query', 'watchlist' ] );
+ $feedItems = [];
+ foreach ( (array)$data as $key => $info ) {
+ if ( ApiResult::isMetadataKey( $key ) ) {
+ continue;
+ }
+ $feedItem = $this->createFeedItem( $info );
+ if ( $feedItem ) {
+ $feedItems[] = $feedItem;
+ }
+ }
+
+ $msg = wfMessage( 'watchlist' )->inContentLanguage()->text();
+
+ $feedTitle = $this->getConfig()->get( 'Sitename' ) . ' - ' . $msg .
+ ' [' . $this->getConfig()->get( 'LanguageCode' ) . ']';
+ $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
+
+ $feed = new $feedClasses[$params['feedformat']] (
+ $feedTitle,
+ htmlspecialchars( $msg ),
+ $feedUrl
+ );
+
+ ApiFormatFeedWrapper::setResult( $this->getResult(), $feed, $feedItems );
+ } catch ( Exception $e ) {
+ // Error results should not be cached
+ $this->getMain()->setCacheMaxAge( 0 );
+
+ // @todo FIXME: Localise brackets
+ $feedTitle = $this->getConfig()->get( 'Sitename' ) . ' - Error - ' .
+ wfMessage( 'watchlist' )->inContentLanguage()->text() .
+ ' [' . $this->getConfig()->get( 'LanguageCode' ) . ']';
+ $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
+
+ $feedFormat = isset( $params['feedformat'] ) ? $params['feedformat'] : 'rss';
+ $msg = wfMessage( 'watchlist' )->inContentLanguage()->escaped();
+ $feed = new $feedClasses[$feedFormat] ( $feedTitle, $msg, $feedUrl );
+
+ if ( $e instanceof ApiUsageException ) {
+ foreach ( $e->getStatusValue()->getErrors() as $error ) {
+ $msg = ApiMessage::create( $error )
+ ->inLanguage( $this->getLanguage() );
+ $errorTitle = $this->msg( 'api-feed-error-title', $msg->getApiCode() );
+ $errorText = $msg->text();
+ $feedItems[] = new FeedItem( $errorTitle, $errorText, '', '', '' );
+ }
+ } else {
+ if ( $e instanceof UsageException ) {
+ $errorCode = $e->getCodeString();
+ } else {
+ // Something is seriously wrong
+ $errorCode = 'internal_api_error';
+ }
+ $errorTitle = $this->msg( 'api-feed-error-title', $errorCode );
+ $errorText = $e->getMessage();
+ $feedItems[] = new FeedItem( $errorTitle, $errorText, '', '', '' );
+ }
+
+ ApiFormatFeedWrapper::setResult( $this->getResult(), $feed, $feedItems );
+ }
+ }
+
+ /**
+ * @param array $info
+ * @return FeedItem
+ */
+ private function createFeedItem( $info ) {
+ if ( !isset( $info['title'] ) ) {
+ // Probably a revdeled log entry, skip it.
+ return null;
+ }
+
+ $titleStr = $info['title'];
+ $title = Title::newFromText( $titleStr );
+ $curidParam = [];
+ if ( !$title || $title->isExternal() ) {
+ // Probably a formerly-valid title that's now conflicting with an
+ // interwiki prefix or the like.
+ if ( isset( $info['pageid'] ) ) {
+ $title = Title::newFromID( $info['pageid'] );
+ $curidParam = [ 'curid' => $info['pageid'] ];
+ }
+ if ( !$title || $title->isExternal() ) {
+ return null;
+ }
+ }
+ if ( isset( $info['revid'] ) ) {
+ $titleUrl = $title->getFullURL( [ 'diff' => $info['revid'] ] );
+ } else {
+ $titleUrl = $title->getFullURL( $curidParam );
+ }
+ $comment = isset( $info['comment'] ) ? $info['comment'] : null;
+
+ // Create an anchor to section.
+ // The anchor won't work for sections that have dupes on page
+ // as there's no way to strip that info from ApiWatchlist (apparently?).
+ // RegExp in the line below is equal to Linker::formatAutocomments().
+ if ( $this->linkToSections && $comment !== null &&
+ preg_match( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', $comment, $matches )
+ ) {
+ global $wgParser;
+ $titleUrl .= $wgParser->guessSectionNameFromWikiText( $matches[ 2 ] );
+ }
+
+ $timestamp = $info['timestamp'];
+
+ if ( isset( $info['user'] ) ) {
+ $user = $info['user'];
+ $completeText = "$comment ($user)";
+ } else {
+ $user = '';
+ $completeText = (string)$comment;
+ }
+
+ return new FeedItem( $titleStr, $completeText, $titleUrl, $timestamp, $user );
+ }
+
+ private function getWatchlistModule() {
+ if ( $this->watchlistModule === null ) {
+ $this->watchlistModule = $this->getMain()->getModuleManager()->getModule( 'query' )
+ ->getModuleManager()->getModule( 'watchlist' );
+ }
+
+ return $this->watchlistModule;
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
+ $ret = [
+ 'feedformat' => [
+ ApiBase::PARAM_DFLT => 'rss',
+ ApiBase::PARAM_TYPE => $feedFormatNames
+ ],
+ 'hours' => [
+ ApiBase::PARAM_DFLT => 24,
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => 72,
+ ],
+ 'linktosections' => false,
+ ];
+
+ $copyParams = [
+ 'allrev' => 'allrev',
+ 'owner' => 'wlowner',
+ 'token' => 'wltoken',
+ 'show' => 'wlshow',
+ 'type' => 'wltype',
+ 'excludeuser' => 'wlexcludeuser',
+ ];
+ if ( $flags ) {
+ $wlparams = $this->getWatchlistModule()->getAllowedParams( $flags );
+ foreach ( $copyParams as $from => $to ) {
+ $p = $wlparams[$from];
+ if ( !is_array( $p ) ) {
+ $p = [ ApiBase::PARAM_DFLT => $p ];
+ }
+ if ( !isset( $p[ApiBase::PARAM_HELP_MSG] ) ) {
+ $p[ApiBase::PARAM_HELP_MSG] = "apihelp-query+watchlist-param-$from";
+ }
+ if ( isset( $p[ApiBase::PARAM_TYPE] ) && is_array( $p[ApiBase::PARAM_TYPE] ) &&
+ isset( $p[ApiBase::PARAM_HELP_MSG_PER_VALUE] )
+ ) {
+ foreach ( $p[ApiBase::PARAM_TYPE] as $v ) {
+ if ( !isset( $p[ApiBase::PARAM_HELP_MSG_PER_VALUE][$v] ) ) {
+ $p[ApiBase::PARAM_HELP_MSG_PER_VALUE][$v] = "apihelp-query+watchlist-paramvalue-$from-$v";
+ }
+ }
+ }
+ $ret[$to] = $p;
+ }
+ } else {
+ foreach ( $copyParams as $from => $to ) {
+ $ret[$to] = null;
+ }
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=feedwatchlist'
+ => 'apihelp-feedwatchlist-example-default',
+ 'action=feedwatchlist&allrev=&hours=6'
+ => 'apihelp-feedwatchlist-example-all6hrs',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watchlist_feed';
+ }
+}
diff --git a/www/wiki/includes/api/ApiFileRevert.php b/www/wiki/includes/api/ApiFileRevert.php
new file mode 100644
index 00000000..b68b9482
--- /dev/null
+++ b/www/wiki/includes/api/ApiFileRevert.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * Copyright © 2011 Bryan Tong Minh <Bryan.TongMinh@Gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiFileRevert extends ApiBase {
+ /** @var LocalFile */
+ protected $file;
+
+ /** @var string */
+ protected $archiveName;
+
+ /** @var array */
+ protected $params;
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $this->params = $this->extractRequestParams();
+ // Extract the file and archiveName from the request parameters
+ $this->validateParameters();
+
+ // Check whether we're allowed to revert this file
+ $this->checkTitleUserPermissions( $this->file->getTitle(), [ 'edit', 'upload' ] );
+
+ $sourceUrl = $this->file->getArchiveVirtualUrl( $this->archiveName );
+ $status = $this->file->upload(
+ $sourceUrl,
+ $this->params['comment'],
+ $this->params['comment'],
+ 0,
+ false,
+ false,
+ $this->getUser()
+ );
+
+ if ( $status->isGood() ) {
+ $result = [ 'result' => 'Success' ];
+ } else {
+ $result = [
+ 'result' => 'Failure',
+ 'errors' => $this->getErrorFormatter()->arrayFromStatus( $status ),
+ ];
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $result );
+ }
+
+ /**
+ * Validate the user parameters and set $this->archiveName and $this->file.
+ * Throws an error if validation fails
+ */
+ protected function validateParameters() {
+ // Validate the input title
+ $title = Title::makeTitleSafe( NS_FILE, $this->params['filename'] );
+ if ( is_null( $title ) ) {
+ $this->dieWithError(
+ [ 'apierror-invalidtitle', wfEscapeWikiText( $this->params['filename'] ) ]
+ );
+ }
+ $localRepo = RepoGroup::singleton()->getLocalRepo();
+
+ // Check if the file really exists
+ $this->file = $localRepo->newFile( $title );
+ if ( !$this->file->exists() ) {
+ $this->dieWithError( 'apierror-missingtitle' );
+ }
+
+ // Check if the archivename is valid for this file
+ $this->archiveName = $this->params['archivename'];
+ $oldFile = $localRepo->newFromArchiveName( $title, $this->archiveName );
+ if ( !$oldFile->exists() ) {
+ $this->dieWithError( 'filerevert-badversion' );
+ }
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'filename' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'comment' => [
+ ApiBase::PARAM_DFLT => '',
+ ],
+ 'archivename' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=filerevert&filename=Wiki.png&comment=Revert&' .
+ 'archivename=20110305152740!Wiki.png&token=123ABC'
+ => 'apihelp-filerevert-example-revert',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiFormatBase.php b/www/wiki/includes/api/ApiFormatBase.php
new file mode 100644
index 00000000..234fcfdd
--- /dev/null
+++ b/www/wiki/includes/api/ApiFormatBase.php
@@ -0,0 +1,387 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This is the abstract base class for API formatters.
+ *
+ * @ingroup API
+ */
+abstract class ApiFormatBase extends ApiBase {
+ private $mIsHtml, $mFormat;
+ private $mBuffer, $mDisabled = false;
+ private $mIsWrappedHtml = false;
+ private $mHttpStatus = false;
+ protected $mForceDefaultParams = false;
+
+ /**
+ * If $format ends with 'fm', pretty-print the output in HTML.
+ * @param ApiMain $main
+ * @param string $format Format name
+ */
+ public function __construct( ApiMain $main, $format ) {
+ parent::__construct( $main, $format );
+
+ $this->mIsHtml = ( substr( $format, -2, 2 ) === 'fm' ); // ends with 'fm'
+ if ( $this->mIsHtml ) {
+ $this->mFormat = substr( $format, 0, -2 ); // remove ending 'fm'
+ $this->mIsWrappedHtml = $this->getMain()->getCheck( 'wrappedhtml' );
+ } else {
+ $this->mFormat = $format;
+ }
+ $this->mFormat = strtoupper( $this->mFormat );
+ }
+
+ /**
+ * Overriding class returns the MIME type that should be sent to the client.
+ *
+ * When getIsHtml() returns true, the return value here is used for syntax
+ * highlighting but the client sees text/html.
+ *
+ * @return string
+ */
+ abstract public function getMimeType();
+
+ /**
+ * Return a filename for this module's output.
+ * @note If $this->getIsWrappedHtml() || $this->getIsHtml(), you'll very
+ * likely want to fall back to this class's version.
+ * @since 1.27
+ * @return string Generally this should be "api-result.$ext"
+ */
+ public function getFilename() {
+ if ( $this->getIsWrappedHtml() ) {
+ return 'api-result-wrapped.json';
+ } elseif ( $this->getIsHtml() ) {
+ return 'api-result.html';
+ } else {
+ $exts = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer()
+ ->getExtensionsForType( $this->getMimeType() );
+ $ext = $exts ? strtok( $exts, ' ' ) : strtolower( $this->mFormat );
+ return "api-result.$ext";
+ }
+ }
+
+ /**
+ * Get the internal format name
+ * @return string
+ */
+ public function getFormat() {
+ return $this->mFormat;
+ }
+
+ /**
+ * Returns true when the HTML pretty-printer should be used.
+ * The default implementation assumes that formats ending with 'fm'
+ * should be formatted in HTML.
+ * @return bool
+ */
+ public function getIsHtml() {
+ return $this->mIsHtml;
+ }
+
+ /**
+ * Returns true when the special wrapped mode is enabled.
+ * @since 1.27
+ * @return bool
+ */
+ protected function getIsWrappedHtml() {
+ return $this->mIsWrappedHtml;
+ }
+
+ /**
+ * Disable the formatter.
+ *
+ * This causes calls to initPrinter() and closePrinter() to be ignored.
+ */
+ public function disable() {
+ $this->mDisabled = true;
+ }
+
+ /**
+ * Whether the printer is disabled
+ * @return bool
+ */
+ public function isDisabled() {
+ return $this->mDisabled;
+ }
+
+ /**
+ * Whether this formatter can handle printing API errors.
+ *
+ * If this returns false, then on API errors the default printer will be
+ * instantiated.
+ * @since 1.23
+ * @return bool
+ */
+ public function canPrintErrors() {
+ return true;
+ }
+
+ /**
+ * Ignore request parameters, force a default.
+ *
+ * Used as a fallback if errors are being thrown.
+ * @since 1.26
+ */
+ public function forceDefaultParams() {
+ $this->mForceDefaultParams = true;
+ }
+
+ /**
+ * Overridden to honor $this->forceDefaultParams(), if applicable
+ * @inheritDoc
+ * @since 1.26
+ */
+ protected function getParameterFromSettings( $paramName, $paramSettings, $parseLimit ) {
+ if ( !$this->mForceDefaultParams ) {
+ return parent::getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+ }
+
+ if ( !is_array( $paramSettings ) ) {
+ return $paramSettings;
+ } elseif ( isset( $paramSettings[self::PARAM_DFLT] ) ) {
+ return $paramSettings[self::PARAM_DFLT];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the HTTP status code to be used for the response
+ * @since 1.29
+ * @param int $code
+ */
+ public function setHttpStatus( $code ) {
+ if ( $this->mDisabled ) {
+ return;
+ }
+
+ if ( $this->getIsHtml() ) {
+ $this->mHttpStatus = $code;
+ } else {
+ $this->getMain()->getRequest()->response()->statusHeader( $code );
+ }
+ }
+
+ /**
+ * Initialize the printer function and prepare the output headers.
+ * @param bool $unused Always false since 1.25
+ */
+ public function initPrinter( $unused = false ) {
+ if ( $this->mDisabled ) {
+ return;
+ }
+
+ $mime = $this->getIsWrappedHtml()
+ ? 'text/mediawiki-api-prettyprint-wrapped'
+ : ( $this->getIsHtml() ? 'text/html' : $this->getMimeType() );
+
+ // Some printers (ex. Feed) do their own header settings,
+ // in which case $mime will be set to null
+ if ( $mime === null ) {
+ return; // skip any initialization
+ }
+
+ $this->getMain()->getRequest()->response()->header( "Content-Type: $mime; charset=utf-8" );
+
+ // Set X-Frame-Options API results (T41180)
+ $apiFrameOptions = $this->getConfig()->get( 'ApiFrameOptions' );
+ if ( $apiFrameOptions ) {
+ $this->getMain()->getRequest()->response()->header( "X-Frame-Options: $apiFrameOptions" );
+ }
+
+ // Set a Content-Disposition header so something downloading an API
+ // response uses a halfway-sensible filename (T128209).
+ $header = 'Content-Disposition: inline';
+ $filename = $this->getFilename();
+ $compatFilename = mb_convert_encoding( $filename, 'ISO-8859-1' );
+ if ( preg_match( '/^[0-9a-zA-Z!#$%&\'*+\-.^_`|~]+$/', $compatFilename ) ) {
+ $header .= '; filename=' . $compatFilename;
+ } else {
+ $header .= '; filename="'
+ . preg_replace( '/([\0-\x1f"\x5c\x7f])/', '\\\\$1', $compatFilename ) . '"';
+ }
+ if ( $compatFilename !== $filename ) {
+ $value = "UTF-8''" . rawurlencode( $filename );
+ // rawurlencode() encodes more characters than RFC 5987 specifies. Unescape the ones it allows.
+ $value = strtr( $value, [
+ '%21' => '!', '%23' => '#', '%24' => '$', '%26' => '&', '%2B' => '+', '%5E' => '^',
+ '%60' => '`', '%7C' => '|',
+ ] );
+ $header .= '; filename*=' . $value;
+ }
+ $this->getMain()->getRequest()->response()->header( $header );
+ }
+
+ /**
+ * Finish printing and output buffered data.
+ */
+ public function closePrinter() {
+ if ( $this->mDisabled ) {
+ return;
+ }
+
+ $mime = $this->getMimeType();
+ if ( $this->getIsHtml() && $mime !== null ) {
+ $format = $this->getFormat();
+ $lcformat = strtolower( $format );
+ $result = $this->getBuffer();
+
+ $context = new DerivativeContext( $this->getMain() );
+ $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
+ $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
+ $out = new OutputPage( $context );
+ $context->setOutput( $out );
+
+ $out->addModuleStyles( 'mediawiki.apipretty' );
+ $out->setPageTitle( $context->msg( 'api-format-title' ) );
+
+ if ( !$this->getIsWrappedHtml() ) {
+ // When the format without suffix 'fm' is defined, there is a non-html version
+ if ( $this->getMain()->getModuleManager()->isDefined( $lcformat, 'format' ) ) {
+ if ( !$this->getRequest()->wasPosted() ) {
+ $nonHtmlUrl = strtok( $this->getRequest()->getFullRequestURL(), '?' )
+ . '?' . $this->getRequest()->appendQueryValue( 'format', $lcformat );
+ $msg = $context->msg( 'api-format-prettyprint-header-hyperlinked' )
+ ->params( $format, $lcformat, $nonHtmlUrl );
+ } else {
+ $msg = $context->msg( 'api-format-prettyprint-header' )->params( $format, $lcformat );
+ }
+ } else {
+ $msg = $context->msg( 'api-format-prettyprint-header-only-html' )->params( $format );
+ }
+
+ $header = $msg->parseAsBlock();
+ $out->addHTML(
+ Html::rawElement( 'div', [ 'class' => 'api-pretty-header' ],
+ ApiHelp::fixHelpLinks( $header )
+ )
+ );
+
+ if ( $this->mHttpStatus && $this->mHttpStatus !== 200 ) {
+ $out->addHTML(
+ Html::rawElement( 'div', [ 'class' => 'api-pretty-header api-pretty-status' ],
+ $this->msg(
+ 'api-format-prettyprint-status',
+ $this->mHttpStatus,
+ HttpStatus::getMessage( $this->mHttpStatus )
+ )->parse()
+ )
+ );
+ }
+ }
+
+ if ( Hooks::run( 'ApiFormatHighlight', [ $context, $result, $mime, $format ] ) ) {
+ $out->addHTML(
+ Html::element( 'pre', [ 'class' => 'api-pretty-content' ], $result )
+ );
+ }
+
+ if ( $this->getIsWrappedHtml() ) {
+ // This is a special output mode mainly intended for ApiSandbox use
+ $time = $this->getMain()->getRequest()->getElapsedTime();
+ $json = FormatJson::encode(
+ [
+ 'status' => (int)( $this->mHttpStatus ?: 200 ),
+ 'statustext' => HttpStatus::getMessage( $this->mHttpStatus ?: 200 ),
+ 'html' => $out->getHTML(),
+ 'modules' => array_values( array_unique( array_merge(
+ $out->getModules(),
+ $out->getModuleScripts(),
+ $out->getModuleStyles()
+ ) ) ),
+ 'continue' => $this->getResult()->getResultData( 'continue' ),
+ 'time' => round( $time * 1000 ),
+ ],
+ false, FormatJson::ALL_OK
+ );
+
+ // T68776: OutputHandler::mangleFlashPolicy() avoids a nasty bug in
+ // Flash, but what it does isn't friendly for the API, so we need to
+ // work around it.
+ if ( preg_match( '/\<\s*cross-domain-policy\s*\>/i', $json ) ) {
+ $json = preg_replace(
+ '/\<(\s*cross-domain-policy\s*)\>/i', '\\u003C$1\\u003E', $json
+ );
+ }
+
+ echo $json;
+ } else {
+ // API handles its own clickjacking protection.
+ // Note, that $wgBreakFrames will still override $wgApiFrameOptions for format mode.
+ $out->allowClickjacking();
+ $out->output();
+ }
+ } else {
+ // For non-HTML output, clear all errors that might have been
+ // displayed if display_errors=On
+ ob_clean();
+
+ echo $this->getBuffer();
+ }
+ }
+
+ /**
+ * Append text to the output buffer.
+ * @param string $text
+ */
+ public function printText( $text ) {
+ $this->mBuffer .= $text;
+ }
+
+ /**
+ * Get the contents of the buffer.
+ * @return string
+ */
+ public function getBuffer() {
+ return $this->mBuffer;
+ }
+
+ public function getAllowedParams() {
+ $ret = [];
+ if ( $this->getIsHtml() ) {
+ $ret['wrappedhtml'] = [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-format-param-wrappedhtml',
+
+ ];
+ }
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&meta=siteinfo&siprop=namespaces&format=' . $this->getModuleName()
+ => [ 'apihelp-format-example-generic', $this->getFormat() ]
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Data_formats';
+ }
+
+}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
diff --git a/www/wiki/includes/api/ApiFormatFeedWrapper.php b/www/wiki/includes/api/ApiFormatFeedWrapper.php
new file mode 100644
index 00000000..262eb1f7
--- /dev/null
+++ b/www/wiki/includes/api/ApiFormatFeedWrapper.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This printer is used to wrap an instance of the Feed class
+ * @ingroup API
+ */
+class ApiFormatFeedWrapper extends ApiFormatBase {
+
+ public function __construct( ApiMain $main ) {
+ parent::__construct( $main, 'feed' );
+ }
+
+ /**
+ * Call this method to initialize output data. See execute()
+ * @param ApiResult $result
+ * @param object $feed An instance of one of the $wgFeedClasses classes
+ * @param array $feedItems Array of FeedItem objects
+ */
+ public static function setResult( $result, $feed, $feedItems ) {
+ // Store output in the Result data.
+ // This way we can check during execution if any error has occurred
+ // Disable size checking for this because we can't continue
+ // cleanly; size checking would cause more problems than it'd
+ // solve
+ $result->addValue( null, '_feed', $feed, ApiResult::NO_VALIDATE );
+ $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_VALIDATE );
+ }
+
+ /**
+ * Feed does its own headers
+ *
+ * @return null
+ */
+ public function getMimeType() {
+ return null;
+ }
+
+ /**
+ * ChannelFeed doesn't give us a method to print errors in a friendly
+ * manner, so just punt errors to the default printer.
+ * @return bool
+ */
+ public function canPrintErrors() {
+ return false;
+ }
+
+ /**
+ * This class expects the result data to be in a custom format set by self::setResult()
+ * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+ * $result['_feeditems'] - an array of FeedItem instances
+ * @param bool $unused
+ */
+ public function initPrinter( $unused = false ) {
+ parent::initPrinter( $unused );
+
+ if ( $this->isDisabled() ) {
+ return;
+ }
+
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
+ $data['_feed']->httpHeaders();
+ } else {
+ // Error has occurred, print something useful
+ ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
+ }
+ }
+
+ /**
+ * This class expects the result data to be in a custom format set by self::setResult()
+ * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+ * $result['_feeditems'] - an array of FeedItem instances
+ */
+ public function execute() {
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
+ $feed = $data['_feed'];
+ $items = $data['_feeditems'];
+
+ // execute() needs to pass strings to $this->printText, not produce output itself.
+ ob_start();
+ $feed->outHeader();
+ foreach ( $items as & $item ) {
+ $feed->outItem( $item );
+ }
+ $feed->outFooter();
+ $this->printText( ob_get_clean() );
+ } else {
+ // Error has occurred, print something useful
+ ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
+ }
+ }
+}
diff --git a/www/wiki/includes/api/ApiFormatJson.php b/www/wiki/includes/api/ApiFormatJson.php
new file mode 100644
index 00000000..2f63faff
--- /dev/null
+++ b/www/wiki/includes/api/ApiFormatJson.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API JSON output formatter
+ * @ingroup API
+ */
+class ApiFormatJson extends ApiFormatBase {
+
+ private $isRaw;
+
+ public function __construct( ApiMain $main, $format ) {
+ parent::__construct( $main, $format );
+ $this->isRaw = ( $format === 'rawfm' );
+
+ if ( $this->getMain()->getCheck( 'callback' ) ) {
+ # T94015: jQuery appends a useless '_' parameter in jsonp mode.
+ # Mark the parameter as used in that case to avoid a warning that's
+ # outside the control of the end user.
+ # (and do it here because ApiMain::reportUnusedParams() gets called
+ # before our ::execute())
+ $this->getMain()->markParamsUsed( '_' );
+ }
+ }
+
+ public function getMimeType() {
+ $params = $this->extractRequestParams();
+ // callback:
+ if ( isset( $params['callback'] ) ) {
+ return 'text/javascript';
+ }
+
+ return 'application/json';
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $opt = 0;
+ if ( $this->isRaw ) {
+ $opt |= FormatJson::ALL_OK;
+ $transform = [];
+ } else {
+ switch ( $params['formatversion'] ) {
+ case 1:
+ $opt |= $params['utf8'] ? FormatJson::ALL_OK : FormatJson::XMLMETA_OK;
+ $transform = [
+ 'BC' => [],
+ 'Types' => [ 'AssocAsObject' => true ],
+ 'Strip' => 'all',
+ ];
+ break;
+
+ case 2:
+ case 'latest':
+ $opt |= $params['ascii'] ? FormatJson::XMLMETA_OK : FormatJson::ALL_OK;
+ $transform = [
+ 'Types' => [ 'AssocAsObject' => true ],
+ 'Strip' => 'all',
+ ];
+ break;
+
+ default:
+ // Should have been caught during parameter validation
+ $this->dieDebug( __METHOD__, 'Unknown value for \'formatversion\'' );
+ }
+ }
+ $data = $this->getResult()->getResultData( null, $transform );
+ $json = FormatJson::encode( $data, $this->getIsHtml(), $opt );
+
+ // T68776: OutputHandler::mangleFlashPolicy() avoids a nasty bug in
+ // Flash, but what it does isn't friendly for the API, so we need to
+ // work around it.
+ if ( preg_match( '/\<\s*cross-domain-policy(?=\s|\>)/i', $json ) ) {
+ $json = preg_replace(
+ '/\<(\s*cross-domain-policy(?=\s|\>))/i', '\\u003C$1', $json
+ );
+ }
+
+ if ( isset( $params['callback'] ) ) {
+ $callback = preg_replace( "/[^][.\\'\\\"_A-Za-z0-9]/", '', $params['callback'] );
+ # Prepend a comment to try to avoid attacks against content
+ # sniffers, such as T70187.
+ $this->printText( "/**/$callback($json)" );
+ } else {
+ $this->printText( $json );
+ }
+ }
+
+ public function getAllowedParams() {
+ if ( $this->isRaw ) {
+ return parent::getAllowedParams();
+ }
+
+ $ret = parent::getAllowedParams() + [
+ 'callback' => [
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-callback',
+ ],
+ 'utf8' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-utf8',
+ ],
+ 'ascii' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-ascii',
+ ],
+ 'formatversion' => [
+ ApiBase::PARAM_TYPE => [ '1', '2', 'latest' ],
+ ApiBase::PARAM_DFLT => '1',
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-formatversion',
+ ],
+ ];
+ return $ret;
+ }
+}
diff --git a/www/wiki/includes/api/ApiFormatNone.php b/www/wiki/includes/api/ApiFormatNone.php
new file mode 100644
index 00000000..602e3c18
--- /dev/null
+++ b/www/wiki/includes/api/ApiFormatNone.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Formatter that outputs nothing, for when you don't care about the response
+ * at all
+ * @ingroup API
+ */
+class ApiFormatNone extends ApiFormatBase {
+
+ public function getMimeType() {
+ return 'text/plain';
+ }
+
+ public function execute() {
+ }
+}
diff --git a/www/wiki/includes/api/ApiFormatPhp.php b/www/wiki/includes/api/ApiFormatPhp.php
new file mode 100644
index 00000000..45bdb6d4
--- /dev/null
+++ b/www/wiki/includes/api/ApiFormatPhp.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API Serialized PHP output formatter
+ * @ingroup API
+ */
+class ApiFormatPhp extends ApiFormatBase {
+
+ public function getMimeType() {
+ return 'application/vnd.php.serialized';
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ switch ( $params['formatversion'] ) {
+ case 1:
+ $transforms = [
+ 'BC' => [],
+ 'Types' => [],
+ 'Strip' => 'all',
+ ];
+ break;
+
+ case 2:
+ case 'latest':
+ $transforms = [
+ 'Types' => [],
+ 'Strip' => 'all',
+ ];
+ break;
+
+ default:
+ // Should have been caught during parameter validation
+ $this->dieDebug( __METHOD__, 'Unknown value for \'formatversion\'' );
+ }
+ $text = serialize( $this->getResult()->getResultData( null, $transforms ) );
+
+ // T68776: OutputHandler::mangleFlashPolicy() avoids a nasty bug in
+ // Flash, but what it does isn't friendly for the API. There's nothing
+ // we can do here that isn't actively broken in some manner, so let's
+ // just be broken in a useful manner.
+ if ( $this->getConfig()->get( 'MangleFlashPolicy' ) &&
+ in_array( 'MediaWiki\\OutputHandler::handle', ob_list_handlers(), true ) &&
+ preg_match( '/\<\s*cross-domain-policy(?=\s|\>)/i', $text )
+ ) {
+ $this->dieWithError( 'apierror-formatphp', 'internalerror' );
+ }
+
+ $this->printText( $text );
+ }
+
+ public function getAllowedParams() {
+ $ret = parent::getAllowedParams() + [
+ 'formatversion' => [
+ ApiBase::PARAM_TYPE => [ '1', '2', 'latest' ],
+ ApiBase::PARAM_DFLT => '1',
+ ApiBase::PARAM_HELP_MSG => 'apihelp-php-param-formatversion',
+ ],
+ ];
+ return $ret;
+ }
+}
diff --git a/www/wiki/includes/api/ApiFormatRaw.php b/www/wiki/includes/api/ApiFormatRaw.php
new file mode 100644
index 00000000..9ec4a2c3
--- /dev/null
+++ b/www/wiki/includes/api/ApiFormatRaw.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Copyright © 2009 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Formatter that spits out anything you like with any desired MIME type
+ * @ingroup API
+ */
+class ApiFormatRaw extends ApiFormatBase {
+
+ private $errorFallback;
+ private $mFailWithHTTPError = false;
+
+ /**
+ * @param ApiMain $main
+ * @param ApiFormatBase|null $errorFallback Object to fall back on for errors
+ */
+ public function __construct( ApiMain $main, ApiFormatBase $errorFallback = null ) {
+ parent::__construct( $main, 'raw' );
+ if ( $errorFallback === null ) {
+ $this->errorFallback = $main->createPrinterByName( $main->getParameter( 'format' ) );
+ } else {
+ $this->errorFallback = $errorFallback;
+ }
+ }
+
+ public function getMimeType() {
+ $data = $this->getResult()->getResultData();
+
+ if ( isset( $data['error'] ) || isset( $data['errors'] ) ) {
+ return $this->errorFallback->getMimeType();
+ }
+
+ if ( !isset( $data['mime'] ) ) {
+ ApiBase::dieDebug( __METHOD__, 'No MIME type set for raw formatter' );
+ }
+
+ return $data['mime'];
+ }
+
+ public function getFilename() {
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['error'] ) ) {
+ return $this->errorFallback->getFilename();
+ } elseif ( !isset( $data['filename'] ) || $this->getIsWrappedHtml() || $this->getIsHtml() ) {
+ return parent::getFilename();
+ } else {
+ return $data['filename'];
+ }
+ }
+
+ public function initPrinter( $unused = false ) {
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['error'] ) || isset( $data['errors'] ) ) {
+ $this->errorFallback->initPrinter( $unused );
+ if ( $this->mFailWithHTTPError ) {
+ $this->getMain()->getRequest()->response()->statusHeader( 400 );
+ }
+ } else {
+ parent::initPrinter( $unused );
+ }
+ }
+
+ public function closePrinter() {
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['error'] ) || isset( $data['errors'] ) ) {
+ $this->errorFallback->closePrinter();
+ } else {
+ parent::closePrinter();
+ }
+ }
+
+ public function execute() {
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['error'] ) || isset( $data['errors'] ) ) {
+ $this->errorFallback->execute();
+ return;
+ }
+
+ if ( !isset( $data['text'] ) ) {
+ ApiBase::dieDebug( __METHOD__, 'No text given for raw formatter' );
+ }
+ $this->printText( $data['text'] );
+ }
+
+ /**
+ * Output HTTP error code 400 when if an error is encountered
+ *
+ * The purpose is for output formats where the user-agent will
+ * not be able to interpret the validity of the content in any
+ * other way. For example subtitle files read by browser video players.
+ *
+ * @param bool $fail
+ */
+ public function setFailWithHTTPError( $fail ) {
+ $this->mFailWithHTTPError = $fail;
+ }
+}
diff --git a/www/wiki/includes/api/ApiFormatXml.php b/www/wiki/includes/api/ApiFormatXml.php
new file mode 100644
index 00000000..cc1bd820
--- /dev/null
+++ b/www/wiki/includes/api/ApiFormatXml.php
@@ -0,0 +1,297 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API XML output formatter
+ * @ingroup API
+ */
+class ApiFormatXml extends ApiFormatBase {
+
+ private $mRootElemName = 'api';
+ public static $namespace = 'http://www.mediawiki.org/xml/api/';
+ private $mIncludeNamespace = false;
+ private $mXslt = null;
+
+ public function getMimeType() {
+ return 'text/xml';
+ }
+
+ public function setRootElement( $rootElemName ) {
+ $this->mRootElemName = $rootElemName;
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $this->mIncludeNamespace = $params['includexmlnamespace'];
+ $this->mXslt = $params['xslt'];
+
+ $this->printText( '<?xml version="1.0"?>' );
+ if ( !is_null( $this->mXslt ) ) {
+ $this->addXslt();
+ }
+
+ $result = $this->getResult();
+ if ( $this->mIncludeNamespace && $result->getResultData( 'xmlns' ) === null ) {
+ // If the result data already contains an 'xmlns' namespace added
+ // for custom XML output types, it will override the one for the
+ // generic API results.
+ // This allows API output of other XML types like Atom, RSS, RSD.
+ $result->addValue( null, 'xmlns', self::$namespace, ApiResult::NO_SIZE_CHECK );
+ }
+ $data = $result->getResultData( null, [
+ 'Custom' => function ( &$data, &$metadata ) {
+ if ( isset( $metadata[ApiResult::META_TYPE] ) ) {
+ // We want to use non-BC for BCassoc to force outputting of _idx.
+ switch ( $metadata[ApiResult::META_TYPE] ) {
+ case 'BCassoc':
+ $metadata[ApiResult::META_TYPE] = 'assoc';
+ break;
+ }
+ }
+ },
+ 'BC' => [ 'nobool', 'no*', 'nosub' ],
+ 'Types' => [ 'ArmorKVP' => '_name' ],
+ ] );
+
+ $this->printText(
+ static::recXmlPrint( $this->mRootElemName,
+ $data,
+ $this->getIsHtml() ? -2 : null
+ )
+ );
+ }
+
+ /**
+ * This method takes an array and converts it to XML.
+ *
+ * @param string|null $name Tag name
+ * @param mixed $value Tag value (attributes/content/subelements)
+ * @param int|null $indent Indentation
+ * @param array $attributes Additional attributes
+ * @return string
+ */
+ public static function recXmlPrint( $name, $value, $indent, $attributes = [] ) {
+ $retval = '';
+ if ( $indent !== null ) {
+ if ( $name !== null ) {
+ $indent += 2;
+ }
+ $indstr = "\n" . str_repeat( ' ', $indent );
+ } else {
+ $indstr = '';
+ }
+
+ if ( is_object( $value ) ) {
+ $value = (array)$value;
+ }
+ if ( is_array( $value ) ) {
+ $contentKey = isset( $value[ApiResult::META_CONTENT] )
+ ? $value[ApiResult::META_CONTENT]
+ : '*';
+ $subelementKeys = isset( $value[ApiResult::META_SUBELEMENTS] )
+ ? $value[ApiResult::META_SUBELEMENTS]
+ : [];
+ if ( isset( $value[ApiResult::META_BC_SUBELEMENTS] ) ) {
+ $subelementKeys = array_merge(
+ $subelementKeys, $value[ApiResult::META_BC_SUBELEMENTS]
+ );
+ }
+ $preserveKeys = isset( $value[ApiResult::META_PRESERVE_KEYS] )
+ ? $value[ApiResult::META_PRESERVE_KEYS]
+ : [];
+ $indexedTagName = isset( $value[ApiResult::META_INDEXED_TAG_NAME] )
+ ? self::mangleName( $value[ApiResult::META_INDEXED_TAG_NAME], $preserveKeys )
+ : '_v';
+ $bcBools = isset( $value[ApiResult::META_BC_BOOLS] )
+ ? $value[ApiResult::META_BC_BOOLS]
+ : [];
+ $indexSubelements = isset( $value[ApiResult::META_TYPE] )
+ ? $value[ApiResult::META_TYPE] !== 'array'
+ : false;
+
+ $content = null;
+ $subelements = [];
+ $indexedSubelements = [];
+ foreach ( $value as $k => $v ) {
+ if ( ApiResult::isMetadataKey( $k ) && !in_array( $k, $preserveKeys, true ) ) {
+ continue;
+ }
+
+ $oldv = $v;
+ if ( is_bool( $v ) && !in_array( $k, $bcBools, true ) ) {
+ $v = $v ? 'true' : 'false';
+ }
+
+ if ( $name !== null && $k === $contentKey ) {
+ $content = $v;
+ } elseif ( is_int( $k ) ) {
+ $indexedSubelements[$k] = $v;
+ } elseif ( is_array( $v ) || is_object( $v ) ) {
+ $subelements[self::mangleName( $k, $preserveKeys )] = $v;
+ } elseif ( in_array( $k, $subelementKeys, true ) || $name === null ) {
+ $subelements[self::mangleName( $k, $preserveKeys )] = [
+ 'content' => $v,
+ ApiResult::META_CONTENT => 'content',
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ } elseif ( is_bool( $oldv ) ) {
+ if ( $oldv ) {
+ $attributes[self::mangleName( $k, $preserveKeys )] = '';
+ }
+ } elseif ( $v !== null ) {
+ $attributes[self::mangleName( $k, $preserveKeys )] = $v;
+ }
+ }
+
+ if ( $content !== null ) {
+ if ( $subelements || $indexedSubelements ) {
+ $subelements[self::mangleName( $contentKey, $preserveKeys )] = [
+ 'content' => $content,
+ ApiResult::META_CONTENT => 'content',
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ $content = null;
+ } elseif ( is_scalar( $content ) ) {
+ // Add xml:space="preserve" to the element so XML parsers
+ // will leave whitespace in the content alone
+ $attributes += [ 'xml:space' => 'preserve' ];
+ }
+ }
+
+ if ( $content !== null ) {
+ if ( is_scalar( $content ) ) {
+ $retval .= $indstr . Xml::element( $name, $attributes, $content );
+ } else {
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes, null );
+ }
+ $retval .= static::recXmlPrint( null, $content, $indent );
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::closeElement( $name );
+ }
+ }
+ } elseif ( !$indexedSubelements && !$subelements ) {
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes );
+ }
+ } else {
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes, null );
+ }
+ foreach ( $subelements as $k => $v ) {
+ $retval .= static::recXmlPrint( $k, $v, $indent );
+ }
+ foreach ( $indexedSubelements as $k => $v ) {
+ $retval .= static::recXmlPrint( $indexedTagName, $v, $indent,
+ $indexSubelements ? [ '_idx' => $k ] : []
+ );
+ }
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::closeElement( $name );
+ }
+ }
+ } else {
+ // to make sure null value doesn't produce unclosed element,
+ // which is what Xml::element( $name, null, null ) returns
+ if ( $value === null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes );
+ } else {
+ $retval .= $indstr . Xml::element( $name, $attributes, $value );
+ }
+ }
+
+ return $retval;
+ }
+
+ /**
+ * Mangle XML-invalid names to be valid in XML
+ * @param string $name
+ * @param array $preserveKeys Names to not mangle
+ * @return string Mangled name
+ */
+ private static function mangleName( $name, $preserveKeys = [] ) {
+ static $nsc = null, $nc = null;
+
+ if ( in_array( $name, $preserveKeys, true ) ) {
+ return $name;
+ }
+
+ if ( $name === '' ) {
+ return '_';
+ }
+
+ if ( $nsc === null ) {
+ // Note we omit ':' from $nsc and $nc because it's reserved for XML
+ // namespacing, and we omit '_' from $nsc (but not $nc) because we
+ // reserve it.
+ $nsc = 'A-Za-z\x{C0}-\x{D6}\x{D8}-\x{F6}\x{F8}-\x{2FF}\x{370}-\x{37D}\x{37F}-\x{1FFF}' .
+ '\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}' .
+ '\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}';
+ $nc = $nsc . '_\-.0-9\x{B7}\x{300}-\x{36F}\x{203F}-\x{2040}';
+ }
+
+ if ( preg_match( "/^[$nsc][$nc]*$/uS", $name ) ) {
+ return $name;
+ }
+
+ return '_' . preg_replace_callback(
+ "/[^$nc]/uS",
+ function ( $m ) {
+ return sprintf( '.%X.', UtfNormal\Utils::utf8ToCodepoint( $m[0] ) );
+ },
+ str_replace( '.', '.2E.', $name )
+ );
+ }
+
+ protected function addXslt() {
+ $nt = Title::newFromText( $this->mXslt );
+ if ( is_null( $nt ) || !$nt->exists() ) {
+ $this->addWarning( 'apiwarn-invalidxmlstylesheet' );
+
+ return;
+ }
+ if ( $nt->getNamespace() != NS_MEDIAWIKI ) {
+ $this->addWarning( 'apiwarn-invalidxmlstylesheetns' );
+
+ return;
+ }
+ if ( substr( $nt->getText(), -4 ) !== '.xsl' ) {
+ $this->addWarning( 'apiwarn-invalidxmlstylesheetext' );
+
+ return;
+ }
+ $this->printText( '<?xml-stylesheet href="' .
+ htmlspecialchars( $nt->getLocalURL( 'action=raw' ) ) . '" type="text/xsl" ?>' );
+ }
+
+ public function getAllowedParams() {
+ return parent::getAllowedParams() + [
+ 'xslt' => [
+ ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-xslt',
+ ],
+ 'includexmlnamespace' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-includexmlnamespace',
+ ],
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiHelp.php b/www/wiki/includes/api/ApiHelp.php
new file mode 100644
index 00000000..8d248590
--- /dev/null
+++ b/www/wiki/includes/api/ApiHelp.php
@@ -0,0 +1,903 @@
+<?php
+/**
+ * Copyright © 2014 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use HtmlFormatter\HtmlFormatter;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Class to output help for an API module
+ *
+ * @since 1.25 completely rewritten
+ * @ingroup API
+ */
+class ApiHelp extends ApiBase {
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $modules = [];
+
+ foreach ( $params['modules'] as $path ) {
+ $modules[] = $this->getModuleFromPath( $path );
+ }
+
+ // Get the help
+ $context = new DerivativeContext( $this->getMain()->getContext() );
+ $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
+ $context->setLanguage( $this->getMain()->getLanguage() );
+ $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
+ $out = new OutputPage( $context );
+ $out->setCopyrightUrl( 'https://www.mediawiki.org/wiki/Special:MyLanguage/Copyright' );
+ $context->setOutput( $out );
+
+ self::getHelp( $context, $modules, $params );
+
+ // Grab the output from the skin
+ ob_start();
+ $context->getOutput()->output();
+ $html = ob_get_clean();
+
+ $result = $this->getResult();
+ if ( $params['wrap'] ) {
+ $data = [
+ 'mime' => 'text/html',
+ 'filename' => 'api-help.html',
+ 'help' => $html,
+ ];
+ ApiResult::setSubelementsList( $data, 'help' );
+ $result->addValue( null, $this->getModuleName(), $data );
+ } else {
+ $result->reset();
+ $result->addValue( null, 'text', $html, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, 'mime', 'text/html', ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, 'filename', 'api-help.html', ApiResult::NO_SIZE_CHECK );
+ }
+ }
+
+ /**
+ * Generate help for the specified modules
+ *
+ * Help is placed into the OutputPage object returned by
+ * $context->getOutput().
+ *
+ * Recognized options include:
+ * - headerlevel: (int) Header tag level
+ * - nolead: (bool) Skip the inclusion of api-help-lead
+ * - noheader: (bool) Skip the inclusion of the top-level section headers
+ * - submodules: (bool) Include help for submodules of the current module
+ * - recursivesubmodules: (bool) Include help for submodules recursively
+ * - helptitle: (string) Title to link for additional modules' help. Should contain $1.
+ * - toc: (bool) Include a table of contents
+ *
+ * @param IContextSource $context
+ * @param ApiBase[]|ApiBase $modules
+ * @param array $options Formatting options (described above)
+ */
+ public static function getHelp( IContextSource $context, $modules, array $options ) {
+ global $wgContLang;
+
+ if ( !is_array( $modules ) ) {
+ $modules = [ $modules ];
+ }
+
+ $out = $context->getOutput();
+ $out->addModuleStyles( [
+ 'mediawiki.hlist',
+ 'mediawiki.apihelp',
+ ] );
+ if ( !empty( $options['toc'] ) ) {
+ $out->addModules( 'mediawiki.toc' );
+ }
+ $out->setPageTitle( $context->msg( 'api-help-title' ) );
+
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $cacheKey = null;
+ if ( count( $modules ) == 1 && $modules[0] instanceof ApiMain &&
+ $options['recursivesubmodules'] && $context->getLanguage() === $wgContLang
+ ) {
+ $cacheHelpTimeout = $context->getConfig()->get( 'APICacheHelpTimeout' );
+ if ( $cacheHelpTimeout > 0 ) {
+ // Get help text from cache if present
+ $cacheKey = $cache->makeKey( 'apihelp', $modules[0]->getModulePath(),
+ (int)!empty( $options['toc'] ),
+ str_replace( ' ', '_', SpecialVersion::getVersion( 'nodb' ) ) );
+ $cached = $cache->get( $cacheKey );
+ if ( $cached ) {
+ $out->addHTML( $cached );
+ return;
+ }
+ }
+ }
+ if ( $out->getHTML() !== '' ) {
+ // Don't save to cache, there's someone else's content in the page
+ // already
+ $cacheKey = null;
+ }
+
+ $options['recursivesubmodules'] = !empty( $options['recursivesubmodules'] );
+ $options['submodules'] = $options['recursivesubmodules'] || !empty( $options['submodules'] );
+
+ // Prepend lead
+ if ( empty( $options['nolead'] ) ) {
+ $msg = $context->msg( 'api-help-lead' );
+ if ( !$msg->isDisabled() ) {
+ $out->addHTML( $msg->parseAsBlock() );
+ }
+ }
+
+ $haveModules = [];
+ $html = self::getHelpInternal( $context, $modules, $options, $haveModules );
+ if ( !empty( $options['toc'] ) && $haveModules ) {
+ $out->addHTML( Linker::generateTOC( $haveModules, $context->getLanguage() ) );
+ }
+ $out->addHTML( $html );
+
+ $helptitle = isset( $options['helptitle'] ) ? $options['helptitle'] : null;
+ $html = self::fixHelpLinks( $out->getHTML(), $helptitle, $haveModules );
+ $out->clearHTML();
+ $out->addHTML( $html );
+
+ if ( $cacheKey !== null ) {
+ $cache->set( $cacheKey, $out->getHTML(), $cacheHelpTimeout );
+ }
+ }
+
+ /**
+ * Replace Special:ApiHelp links with links to api.php
+ *
+ * @param string $html
+ * @param string|null $helptitle Title to link to rather than api.php, must contain '$1'
+ * @param array $localModules Keys are modules to link within the current page, values are ignored
+ * @return string
+ */
+ public static function fixHelpLinks( $html, $helptitle = null, $localModules = [] ) {
+ $formatter = new HtmlFormatter( $html );
+ $doc = $formatter->getDoc();
+ $xpath = new DOMXPath( $doc );
+ $nodes = $xpath->query( '//a[@href][not(contains(@class,\'apihelp-linktrail\'))]' );
+ foreach ( $nodes as $node ) {
+ $href = $node->getAttribute( 'href' );
+ do {
+ $old = $href;
+ $href = rawurldecode( $href );
+ } while ( $old !== $href );
+ if ( preg_match( '!Special:ApiHelp/([^&/|#]+)((?:#.*)?)!', $href, $m ) ) {
+ if ( isset( $localModules[$m[1]] ) ) {
+ $href = $m[2] === '' ? '#' . $m[1] : $m[2];
+ } elseif ( $helptitle !== null ) {
+ $href = Title::newFromText( str_replace( '$1', $m[1], $helptitle ) . $m[2] )
+ ->getFullURL();
+ } else {
+ $href = wfAppendQuery( wfScript( 'api' ), [
+ 'action' => 'help',
+ 'modules' => $m[1],
+ ] ) . $m[2];
+ }
+ $node->setAttribute( 'href', $href );
+ $node->removeAttribute( 'title' );
+ }
+ }
+
+ return $formatter->getText();
+ }
+
+ /**
+ * Wrap a message in HTML with a class.
+ *
+ * @param Message $msg
+ * @param string $class
+ * @param string $tag
+ * @return string
+ */
+ private static function wrap( Message $msg, $class, $tag = 'span' ) {
+ return Html::rawElement( $tag, [ 'class' => $class ],
+ $msg->parse()
+ );
+ }
+
+ /**
+ * Recursively-called function to actually construct the help
+ *
+ * @param IContextSource $context
+ * @param ApiBase[] $modules
+ * @param array $options
+ * @param array &$haveModules
+ * @return string
+ */
+ private static function getHelpInternal( IContextSource $context, array $modules,
+ array $options, &$haveModules
+ ) {
+ $out = '';
+
+ $level = empty( $options['headerlevel'] ) ? 2 : $options['headerlevel'];
+ if ( empty( $options['tocnumber'] ) ) {
+ $tocnumber = [ 2 => 0 ];
+ } else {
+ $tocnumber = &$options['tocnumber'];
+ }
+
+ foreach ( $modules as $module ) {
+ $tocnumber[$level]++;
+ $path = $module->getModulePath();
+ $module->setContext( $context );
+ $help = [
+ 'header' => '',
+ 'flags' => '',
+ 'description' => '',
+ 'help-urls' => '',
+ 'parameters' => '',
+ 'examples' => '',
+ 'submodules' => '',
+ ];
+
+ if ( empty( $options['noheader'] ) || !empty( $options['toc'] ) ) {
+ $anchor = $path;
+ $i = 1;
+ while ( isset( $haveModules[$anchor] ) ) {
+ $anchor = $path . '|' . ++$i;
+ }
+
+ if ( $module->isMain() ) {
+ $headerContent = $context->msg( 'api-help-main-header' )->parse();
+ $headerAttr = [
+ 'class' => 'apihelp-header',
+ ];
+ } else {
+ $name = $module->getModuleName();
+ $headerContent = $module->getParent()->getModuleManager()->getModuleGroup( $name ) .
+ "=$name";
+ if ( $module->getModulePrefix() !== '' ) {
+ $headerContent .= ' ' .
+ $context->msg( 'parentheses', $module->getModulePrefix() )->parse();
+ }
+ // Module names are always in English and not localized,
+ // so English language and direction must be set explicitly,
+ // otherwise parentheses will get broken in RTL wikis
+ $headerAttr = [
+ 'class' => 'apihelp-header apihelp-module-name',
+ 'dir' => 'ltr',
+ 'lang' => 'en',
+ ];
+ }
+
+ $headerAttr['id'] = $anchor;
+
+ $haveModules[$anchor] = [
+ 'toclevel' => count( $tocnumber ),
+ 'level' => $level,
+ 'anchor' => $anchor,
+ 'line' => $headerContent,
+ 'number' => implode( '.', $tocnumber ),
+ 'index' => false,
+ ];
+ if ( empty( $options['noheader'] ) ) {
+ $help['header'] .= Html::element(
+ 'h' . min( 6, $level ),
+ $headerAttr,
+ $headerContent
+ );
+ }
+ } else {
+ $haveModules[$path] = true;
+ }
+
+ $links = [];
+ $any = false;
+ for ( $m = $module; $m !== null; $m = $m->getParent() ) {
+ $name = $m->getModuleName();
+ if ( $name === 'main_int' ) {
+ $name = 'main';
+ }
+
+ if ( count( $modules ) === 1 && $m === $modules[0] &&
+ !( !empty( $options['submodules'] ) && $m->getModuleManager() )
+ ) {
+ $link = Html::element( 'b', [ 'dir' => 'ltr', 'lang' => 'en' ], $name );
+ } else {
+ $link = SpecialPage::getTitleFor( 'ApiHelp', $m->getModulePath() )->getLocalURL();
+ $link = Html::element( 'a',
+ [ 'href' => $link, 'class' => 'apihelp-linktrail', 'dir' => 'ltr', 'lang' => 'en' ],
+ $name
+ );
+ $any = true;
+ }
+ array_unshift( $links, $link );
+ }
+ if ( $any ) {
+ $help['header'] .= self::wrap(
+ $context->msg( 'parentheses' )
+ ->rawParams( $context->getLanguage()->pipeList( $links ) ),
+ 'apihelp-linktrail', 'div'
+ );
+ }
+
+ $flags = $module->getHelpFlags();
+ $help['flags'] .= Html::openElement( 'div',
+ [ 'class' => 'apihelp-block apihelp-flags' ] );
+ $msg = $context->msg( 'api-help-flags' );
+ if ( !$msg->isDisabled() ) {
+ $help['flags'] .= self::wrap(
+ $msg->numParams( count( $flags ) ), 'apihelp-block-head', 'div'
+ );
+ }
+ $help['flags'] .= Html::openElement( 'ul' );
+ foreach ( $flags as $flag ) {
+ $help['flags'] .= Html::rawElement( 'li', null,
+ self::wrap( $context->msg( "api-help-flag-$flag" ), "apihelp-flag-$flag" )
+ );
+ }
+ $sourceInfo = $module->getModuleSourceInfo();
+ if ( $sourceInfo ) {
+ if ( isset( $sourceInfo['namemsg'] ) ) {
+ $extname = $context->msg( $sourceInfo['namemsg'] )->text();
+ } else {
+ // Probably English, so wrap it.
+ $extname = Html::element( 'span', [ 'dir' => 'ltr', 'lang' => 'en' ], $sourceInfo['name'] );
+ }
+ $help['flags'] .= Html::rawElement( 'li', null,
+ self::wrap(
+ $context->msg( 'api-help-source', $extname, $sourceInfo['name'] ),
+ 'apihelp-source'
+ )
+ );
+
+ $link = SpecialPage::getTitleFor( 'Version', 'License/' . $sourceInfo['name'] );
+ if ( isset( $sourceInfo['license-name'] ) ) {
+ $msg = $context->msg( 'api-help-license', $link,
+ Html::element( 'span', [ 'dir' => 'ltr', 'lang' => 'en' ], $sourceInfo['license-name'] )
+ );
+ } elseif ( SpecialVersion::getExtLicenseFileName( dirname( $sourceInfo['path'] ) ) ) {
+ $msg = $context->msg( 'api-help-license-noname', $link );
+ } else {
+ $msg = $context->msg( 'api-help-license-unknown' );
+ }
+ $help['flags'] .= Html::rawElement( 'li', null,
+ self::wrap( $msg, 'apihelp-license' )
+ );
+ } else {
+ $help['flags'] .= Html::rawElement( 'li', null,
+ self::wrap( $context->msg( 'api-help-source-unknown' ), 'apihelp-source' )
+ );
+ $help['flags'] .= Html::rawElement( 'li', null,
+ self::wrap( $context->msg( 'api-help-license-unknown' ), 'apihelp-license' )
+ );
+ }
+ $help['flags'] .= Html::closeElement( 'ul' );
+ $help['flags'] .= Html::closeElement( 'div' );
+
+ foreach ( $module->getFinalDescription() as $msg ) {
+ $msg->setContext( $context );
+ $help['description'] .= $msg->parseAsBlock();
+ }
+
+ $urls = $module->getHelpUrls();
+ if ( $urls ) {
+ $help['help-urls'] .= Html::openElement( 'div',
+ [ 'class' => 'apihelp-block apihelp-help-urls' ]
+ );
+ $msg = $context->msg( 'api-help-help-urls' );
+ if ( !$msg->isDisabled() ) {
+ $help['help-urls'] .= self::wrap(
+ $msg->numParams( count( $urls ) ), 'apihelp-block-head', 'div'
+ );
+ }
+ if ( !is_array( $urls ) ) {
+ $urls = [ $urls ];
+ }
+ $help['help-urls'] .= Html::openElement( 'ul' );
+ foreach ( $urls as $url ) {
+ $help['help-urls'] .= Html::rawElement( 'li', null,
+ Html::element( 'a', [ 'href' => $url, 'dir' => 'ltr' ], $url )
+ );
+ }
+ $help['help-urls'] .= Html::closeElement( 'ul' );
+ $help['help-urls'] .= Html::closeElement( 'div' );
+ }
+
+ $params = $module->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+ $dynamicParams = $module->dynamicParameterDocumentation();
+ $groups = [];
+ if ( $params || $dynamicParams !== null ) {
+ $help['parameters'] .= Html::openElement( 'div',
+ [ 'class' => 'apihelp-block apihelp-parameters' ]
+ );
+ $msg = $context->msg( 'api-help-parameters' );
+ if ( !$msg->isDisabled() ) {
+ $help['parameters'] .= self::wrap(
+ $msg->numParams( count( $params ) ), 'apihelp-block-head', 'div'
+ );
+ }
+ $help['parameters'] .= Html::openElement( 'dl' );
+
+ $descriptions = $module->getFinalParamDescription();
+
+ foreach ( $params as $name => $settings ) {
+ if ( !is_array( $settings ) ) {
+ $settings = [ ApiBase::PARAM_DFLT => $settings ];
+ }
+
+ $help['parameters'] .= Html::rawElement( 'dt', null,
+ Html::element( 'span', [ 'dir' => 'ltr', 'lang' => 'en' ], $module->encodeParamName( $name ) )
+ );
+
+ // Add description
+ $description = [];
+ if ( isset( $descriptions[$name] ) ) {
+ foreach ( $descriptions[$name] as $msg ) {
+ $msg->setContext( $context );
+ $description[] = $msg->parseAsBlock();
+ }
+ }
+
+ // Add usage info
+ $info = [];
+
+ // Required?
+ if ( !empty( $settings[ApiBase::PARAM_REQUIRED] ) ) {
+ $info[] = $context->msg( 'api-help-param-required' )->parse();
+ }
+
+ // Custom info?
+ if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+ foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+ $tag = array_shift( $i );
+ $info[] = $context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+ ->numParams( count( $i ) )
+ ->params( $context->getLanguage()->commaList( $i ) )
+ ->params( $module->getModulePrefix() )
+ ->parse();
+ }
+ }
+
+ // Type documentation
+ if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
+ ? $settings[ApiBase::PARAM_DFLT]
+ : null;
+ if ( is_bool( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'boolean';
+ } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'string';
+ } elseif ( is_int( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'integer';
+ }
+ }
+ if ( isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ $type = $settings[ApiBase::PARAM_TYPE];
+ $multi = !empty( $settings[ApiBase::PARAM_ISMULTI] );
+ $hintPipeSeparated = true;
+ $count = !empty( $settings[ApiBase::PARAM_ISMULTI_LIMIT2] )
+ ? $settings[ApiBase::PARAM_ISMULTI_LIMIT2] + 1
+ : ApiBase::LIMIT_SML2 + 1;
+
+ if ( is_array( $type ) ) {
+ $count = count( $type );
+ $deprecatedValues = isset( $settings[ApiBase::PARAM_DEPRECATED_VALUES] )
+ ? $settings[ApiBase::PARAM_DEPRECATED_VALUES]
+ : [];
+ $links = isset( $settings[ApiBase::PARAM_VALUE_LINKS] )
+ ? $settings[ApiBase::PARAM_VALUE_LINKS]
+ : [];
+ $values = array_map( function ( $v ) use ( $links, $deprecatedValues ) {
+ $attr = [];
+ if ( $v !== '' ) {
+ // We can't know whether this contains LTR or RTL text.
+ $attr['dir'] = 'auto';
+ }
+ if ( isset( $deprecatedValues[$v] ) ) {
+ $attr['class'] = 'apihelp-deprecated-value';
+ }
+ $ret = $attr ? Html::element( 'span', $attr, $v ) : $v;
+ if ( isset( $links[$v] ) ) {
+ $ret = "[[{$links[$v]}|$ret]]";
+ }
+ return $ret;
+ }, $type );
+ $i = array_search( '', $type, true );
+ if ( $i === false ) {
+ $values = $context->getLanguage()->commaList( $values );
+ } else {
+ unset( $values[$i] );
+ $values = $context->msg( 'api-help-param-list-can-be-empty' )
+ ->numParams( count( $values ) )
+ ->params( $context->getLanguage()->commaList( $values ) )
+ ->parse();
+ }
+ $info[] = $context->msg( 'api-help-param-list' )
+ ->params( $multi ? 2 : 1 )
+ ->params( $values )
+ ->parse();
+ $hintPipeSeparated = false;
+ } else {
+ switch ( $type ) {
+ case 'submodule':
+ $groups[] = $name;
+
+ if ( isset( $settings[ApiBase::PARAM_SUBMODULE_MAP] ) ) {
+ $map = $settings[ApiBase::PARAM_SUBMODULE_MAP];
+ $defaultAttrs = [];
+ } else {
+ $prefix = $module->isMain() ? '' : ( $module->getModulePath() . '+' );
+ $map = [];
+ foreach ( $module->getModuleManager()->getNames( $name ) as $submoduleName ) {
+ $map[$submoduleName] = $prefix . $submoduleName;
+ }
+ $defaultAttrs = [ 'dir' => 'ltr', 'lang' => 'en' ];
+ }
+ ksort( $map );
+
+ $submodules = [];
+ $deprecatedSubmodules = [];
+ foreach ( $map as $v => $m ) {
+ $attrs = $defaultAttrs;
+ $arr = &$submodules;
+ try {
+ $submod = $module->getModuleFromPath( $m );
+ if ( $submod ) {
+ if ( $submod->isDeprecated() ) {
+ $arr = &$deprecatedSubmodules;
+ $attrs['class'] = 'apihelp-deprecated-value';
+ }
+ }
+ } catch ( ApiUsageException $ex ) {
+ // Ignore
+ }
+ if ( $attrs ) {
+ $v = Html::element( 'span', $attrs, $v );
+ }
+ $arr[] = "[[Special:ApiHelp/{$m}|{$v}]]";
+ }
+ $submodules = array_merge( $submodules, $deprecatedSubmodules );
+ $count = count( $submodules );
+ $info[] = $context->msg( 'api-help-param-list' )
+ ->params( $multi ? 2 : 1 )
+ ->params( $context->getLanguage()->commaList( $submodules ) )
+ ->parse();
+ $hintPipeSeparated = false;
+ // No type message necessary, we have a list of values.
+ $type = null;
+ break;
+
+ case 'namespace':
+ $namespaces = MWNamespace::getValidNamespaces();
+ if ( isset( $settings[ApiBase::PARAM_EXTRA_NAMESPACES] ) &&
+ is_array( $settings[ApiBase::PARAM_EXTRA_NAMESPACES] )
+ ) {
+ $namespaces = array_merge( $namespaces, $settings[ApiBase::PARAM_EXTRA_NAMESPACES] );
+ }
+ sort( $namespaces );
+ $count = count( $namespaces );
+ $info[] = $context->msg( 'api-help-param-list' )
+ ->params( $multi ? 2 : 1 )
+ ->params( $context->getLanguage()->commaList( $namespaces ) )
+ ->parse();
+ $hintPipeSeparated = false;
+ // No type message necessary, we have a list of values.
+ $type = null;
+ break;
+
+ case 'tags':
+ $tags = ChangeTags::listExplicitlyDefinedTags();
+ $count = count( $tags );
+ $info[] = $context->msg( 'api-help-param-list' )
+ ->params( $multi ? 2 : 1 )
+ ->params( $context->getLanguage()->commaList( $tags ) )
+ ->parse();
+ $hintPipeSeparated = false;
+ $type = null;
+ break;
+
+ case 'limit':
+ if ( isset( $settings[ApiBase::PARAM_MAX2] ) ) {
+ $info[] = $context->msg( 'api-help-param-limit2' )
+ ->numParams( $settings[ApiBase::PARAM_MAX] )
+ ->numParams( $settings[ApiBase::PARAM_MAX2] )
+ ->parse();
+ } else {
+ $info[] = $context->msg( 'api-help-param-limit' )
+ ->numParams( $settings[ApiBase::PARAM_MAX] )
+ ->parse();
+ }
+ break;
+
+ case 'integer':
+ // Possible messages:
+ // api-help-param-integer-min,
+ // api-help-param-integer-max,
+ // api-help-param-integer-minmax
+ $suffix = '';
+ $min = $max = 0;
+ if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
+ $suffix .= 'min';
+ $min = $settings[ApiBase::PARAM_MIN];
+ }
+ if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
+ $suffix .= 'max';
+ $max = $settings[ApiBase::PARAM_MAX];
+ }
+ if ( $suffix !== '' ) {
+ $info[] =
+ $context->msg( "api-help-param-integer-$suffix" )
+ ->params( $multi ? 2 : 1 )
+ ->numParams( $min, $max )
+ ->parse();
+ }
+ break;
+
+ case 'upload':
+ $info[] = $context->msg( 'api-help-param-upload' )
+ ->parse();
+ // No type message necessary, api-help-param-upload should handle it.
+ $type = null;
+ break;
+
+ case 'string':
+ case 'text':
+ // Displaying a type message here would be useless.
+ $type = null;
+ break;
+ }
+ }
+
+ // Add type. Messages for grep: api-help-param-type-limit
+ // api-help-param-type-integer api-help-param-type-boolean
+ // api-help-param-type-timestamp api-help-param-type-user
+ // api-help-param-type-password
+ if ( is_string( $type ) ) {
+ $msg = $context->msg( "api-help-param-type-$type" );
+ if ( !$msg->isDisabled() ) {
+ $info[] = $msg->params( $multi ? 2 : 1 )->parse();
+ }
+ }
+
+ if ( $multi ) {
+ $extra = [];
+ $lowcount = !empty( $settings[ApiBase::PARAM_ISMULTI_LIMIT1] )
+ ? $settings[ApiBase::PARAM_ISMULTI_LIMIT1]
+ : ApiBase::LIMIT_SML1;
+ $highcount = !empty( $settings[ApiBase::PARAM_ISMULTI_LIMIT2] )
+ ? $settings[ApiBase::PARAM_ISMULTI_LIMIT2]
+ : ApiBase::LIMIT_SML2;
+
+ if ( $hintPipeSeparated ) {
+ $extra[] = $context->msg( 'api-help-param-multi-separate' )->parse();
+ }
+ if ( $count > $lowcount ) {
+ if ( $lowcount === $highcount ) {
+ $msg = $context->msg( 'api-help-param-multi-max-simple' )
+ ->numParams( $lowcount );
+ } else {
+ $msg = $context->msg( 'api-help-param-multi-max' )
+ ->numParams( $lowcount, $highcount );
+ }
+ $extra[] = $msg->parse();
+ }
+ if ( $extra ) {
+ $info[] = implode( ' ', $extra );
+ }
+
+ $allowAll = isset( $settings[ApiBase::PARAM_ALL] )
+ ? $settings[ApiBase::PARAM_ALL]
+ : false;
+ if ( $allowAll || $settings[ApiBase::PARAM_TYPE] === 'namespace' ) {
+ if ( $settings[ApiBase::PARAM_TYPE] === 'namespace' ) {
+ $allSpecifier = ApiBase::ALL_DEFAULT_STRING;
+ } else {
+ $allSpecifier = ( is_string( $allowAll ) ? $allowAll : ApiBase::ALL_DEFAULT_STRING );
+ }
+ $info[] = $context->msg( 'api-help-param-multi-all' )
+ ->params( $allSpecifier )
+ ->parse();
+ }
+ }
+ }
+
+ if ( isset( $settings[self::PARAM_MAX_BYTES] ) ) {
+ $info[] = $context->msg( 'api-help-param-maxbytes' )
+ ->numParams( $settings[self::PARAM_MAX_BYTES] );
+ }
+ if ( isset( $settings[self::PARAM_MAX_CHARS] ) ) {
+ $info[] = $context->msg( 'api-help-param-maxchars' )
+ ->numParams( $settings[self::PARAM_MAX_CHARS] );
+ }
+
+ // Add default
+ $default = isset( $settings[ApiBase::PARAM_DFLT] )
+ ? $settings[ApiBase::PARAM_DFLT]
+ : null;
+ if ( $default === '' ) {
+ $info[] = $context->msg( 'api-help-param-default-empty' )
+ ->parse();
+ } elseif ( $default !== null && $default !== false ) {
+ // We can't know whether this contains LTR or RTL text.
+ $info[] = $context->msg( 'api-help-param-default' )
+ ->params( Html::element( 'span', [ 'dir' => 'auto' ], $default ) )
+ ->parse();
+ }
+
+ if ( !array_filter( $description ) ) {
+ $description = [ self::wrap(
+ $context->msg( 'api-help-param-no-description' ),
+ 'apihelp-empty'
+ ) ];
+ }
+
+ // Add "deprecated" flag
+ if ( !empty( $settings[ApiBase::PARAM_DEPRECATED] ) ) {
+ $help['parameters'] .= Html::openElement( 'dd',
+ [ 'class' => 'info' ] );
+ $help['parameters'] .= self::wrap(
+ $context->msg( 'api-help-param-deprecated' ),
+ 'apihelp-deprecated', 'strong'
+ );
+ $help['parameters'] .= Html::closeElement( 'dd' );
+ }
+
+ if ( $description ) {
+ $description = implode( '', $description );
+ $description = preg_replace( '!\s*</([oud]l)>\s*<\1>\s*!', "\n", $description );
+ $help['parameters'] .= Html::rawElement( 'dd',
+ [ 'class' => 'description' ], $description );
+ }
+
+ foreach ( $info as $i ) {
+ $help['parameters'] .= Html::rawElement( 'dd', [ 'class' => 'info' ], $i );
+ }
+ }
+
+ if ( $dynamicParams !== null ) {
+ $dynamicParams = ApiBase::makeMessage( $dynamicParams, $context, [
+ $module->getModulePrefix(),
+ $module->getModuleName(),
+ $module->getModulePath()
+ ] );
+ $help['parameters'] .= Html::element( 'dt', null, '*' );
+ $help['parameters'] .= Html::rawElement( 'dd',
+ [ 'class' => 'description' ], $dynamicParams->parse() );
+ }
+
+ $help['parameters'] .= Html::closeElement( 'dl' );
+ $help['parameters'] .= Html::closeElement( 'div' );
+ }
+
+ $examples = $module->getExamplesMessages();
+ if ( $examples ) {
+ $help['examples'] .= Html::openElement( 'div',
+ [ 'class' => 'apihelp-block apihelp-examples' ] );
+ $msg = $context->msg( 'api-help-examples' );
+ if ( !$msg->isDisabled() ) {
+ $help['examples'] .= self::wrap(
+ $msg->numParams( count( $examples ) ), 'apihelp-block-head', 'div'
+ );
+ }
+
+ $help['examples'] .= Html::openElement( 'dl' );
+ foreach ( $examples as $qs => $msg ) {
+ $msg = ApiBase::makeMessage( $msg, $context, [
+ $module->getModulePrefix(),
+ $module->getModuleName(),
+ $module->getModulePath()
+ ] );
+
+ $link = wfAppendQuery( wfScript( 'api' ), $qs );
+ $sandbox = SpecialPage::getTitleFor( 'ApiSandbox' )->getLocalURL() . '#' . $qs;
+ $help['examples'] .= Html::rawElement( 'dt', null, $msg->parse() );
+ $help['examples'] .= Html::rawElement( 'dd', null,
+ Html::element( 'a', [ 'href' => $link, 'dir' => 'ltr' ], "api.php?$qs" ) . ' ' .
+ Html::rawElement( 'a', [ 'href' => $sandbox ],
+ $context->msg( 'api-help-open-in-apisandbox' )->parse() )
+ );
+ }
+ $help['examples'] .= Html::closeElement( 'dl' );
+ $help['examples'] .= Html::closeElement( 'div' );
+ }
+
+ $subtocnumber = $tocnumber;
+ $subtocnumber[$level + 1] = 0;
+ $suboptions = [
+ 'submodules' => $options['recursivesubmodules'],
+ 'headerlevel' => $level + 1,
+ 'tocnumber' => &$subtocnumber,
+ 'noheader' => false,
+ ] + $options;
+
+ if ( $options['submodules'] && $module->getModuleManager() ) {
+ $manager = $module->getModuleManager();
+ $submodules = [];
+ foreach ( $groups as $group ) {
+ $names = $manager->getNames( $group );
+ sort( $names );
+ foreach ( $names as $name ) {
+ $submodules[] = $manager->getModule( $name );
+ }
+ }
+ $help['submodules'] .= self::getHelpInternal(
+ $context,
+ $submodules,
+ $suboptions,
+ $haveModules
+ );
+ }
+
+ $module->modifyHelp( $help, $suboptions, $haveModules );
+
+ Hooks::run( 'APIHelpModifyOutput', [ $module, &$help, $suboptions, &$haveModules ] );
+
+ $out .= implode( "\n", $help );
+ }
+
+ return $out;
+ }
+
+ public function shouldCheckMaxlag() {
+ return false;
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ public function getCustomPrinter() {
+ $params = $this->extractRequestParams();
+ if ( $params['wrap'] ) {
+ return null;
+ }
+
+ $main = $this->getMain();
+ $errorPrinter = $main->createPrinterByName( $main->getParameter( 'format' ) );
+ return new ApiFormatRaw( $main, $errorPrinter );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'modules' => [
+ ApiBase::PARAM_DFLT => 'main',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'submodules' => false,
+ 'recursivesubmodules' => false,
+ 'wrap' => false,
+ 'toc' => false,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=help'
+ => 'apihelp-help-example-main',
+ 'action=help&modules=query&submodules=1'
+ => 'apihelp-help-example-submodules',
+ 'action=help&recursivesubmodules=1'
+ => 'apihelp-help-example-recursive',
+ 'action=help&modules=help'
+ => 'apihelp-help-example-help',
+ 'action=help&modules=query+info|query+categorymembers'
+ => 'apihelp-help-example-query',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return [
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page',
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:FAQ',
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Quick_start_guide',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiHelpParamValueMessage.php b/www/wiki/includes/api/ApiHelpParamValueMessage.php
new file mode 100644
index 00000000..7aebf90e
--- /dev/null
+++ b/www/wiki/includes/api/ApiHelpParamValueMessage.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Copyright © 2014 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Message subclass that prepends wikitext for API help.
+ *
+ * This exists so the apihelp-*-paramvalue-*-* messages don't all have to
+ * include markup wikitext while still keeping the
+ * 'APIGetParamDescriptionMessages' hook simple.
+ *
+ * @since 1.25
+ */
+class ApiHelpParamValueMessage extends Message {
+
+ protected $paramValue;
+ protected $deprecated;
+
+ /**
+ * @see Message::__construct
+ *
+ * @param string $paramValue Parameter value being documented
+ * @param string $text Message to use.
+ * @param array $params Parameters for the message.
+ * @param bool $deprecated Whether the value is deprecated
+ * @throws InvalidArgumentException
+ * @since 1.30 Added the `$deprecated` parameter
+ */
+ public function __construct( $paramValue, $text, $params = [], $deprecated = false ) {
+ parent::__construct( $text, $params );
+ $this->paramValue = $paramValue;
+ $this->deprecated = (bool)$deprecated;
+ }
+
+ /**
+ * Fetch the parameter value
+ * @return string
+ */
+ public function getParamValue() {
+ return $this->paramValue;
+ }
+
+ /**
+ * Fetch the 'deprecated' flag
+ * @since 1.30
+ * @return bool
+ */
+ public function isDeprecated() {
+ return $this->deprecated;
+ }
+
+ /**
+ * Fetch the message.
+ * @return string
+ */
+ public function fetchMessage() {
+ if ( $this->message === null ) {
+ $dep = '';
+ if ( $this->isDeprecated() ) {
+ $msg = new Message( 'api-help-param-deprecated' );
+ $msg->interface = $this->interface;
+ $msg->language = $this->language;
+ $msg->useDatabase = $this->useDatabase;
+ $msg->title = $this->title;
+ $dep = '<span class="apihelp-deprecated">' . $msg->fetchMessage() . '</span> ';
+ }
+ $this->message = ";<span dir=\"ltr\" lang=\"en\">{$this->paramValue}</span>:"
+ . $dep . parent::fetchMessage();
+ }
+ return $this->message;
+ }
+
+}
diff --git a/www/wiki/includes/api/ApiImageRotate.php b/www/wiki/includes/api/ApiImageRotate.php
new file mode 100644
index 00000000..21e26949
--- /dev/null
+++ b/www/wiki/includes/api/ApiImageRotate.php
@@ -0,0 +1,198 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class ApiImageRotate extends ApiBase {
+ private $mPageSet = null;
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $params = $this->extractRequestParams();
+ $rotation = $params['rotation'];
+
+ $continuationManager = new ApiContinuationManager( $this, [], [] );
+ $this->setContinuationManager( $continuationManager );
+
+ $pageSet = $this->getPageSet();
+ $pageSet->execute();
+
+ $result = [];
+
+ $result = $pageSet->getInvalidTitlesAndRevisions( [
+ 'invalidTitles', 'special', 'missingIds', 'missingRevIds', 'interwikiTitles',
+ ] );
+
+ // Check if user can add tags
+ if ( $params['tags'] ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $this->getUser() );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ foreach ( $pageSet->getTitles() as $title ) {
+ $r = [];
+ $r['id'] = $title->getArticleID();
+ ApiQueryBase::addTitleInfo( $r, $title );
+ if ( !$title->exists() ) {
+ $r['missing'] = true;
+ if ( $title->isKnown() ) {
+ $r['known'] = true;
+ }
+ }
+
+ $file = wfFindFile( $title, [ 'latest' => true ] );
+ if ( !$file ) {
+ $r['result'] = 'Failure';
+ $r['errors'] = $this->getErrorFormatter()->arrayFromStatus(
+ Status::newFatal( 'apierror-filedoesnotexist' )
+ );
+ $result[] = $r;
+ continue;
+ }
+ $handler = $file->getHandler();
+ if ( !$handler || !$handler->canRotate() ) {
+ $r['result'] = 'Failure';
+ $r['errors'] = $this->getErrorFormatter()->arrayFromStatus(
+ Status::newFatal( 'apierror-filetypecannotberotated' )
+ );
+ $result[] = $r;
+ continue;
+ }
+
+ // Check whether we're allowed to rotate this file
+ $permError = $this->checkTitleUserPermissions( $file->getTitle(), [ 'edit', 'upload' ] );
+ if ( $permError ) {
+ $r['result'] = 'Failure';
+ $r['errors'] = $this->getErrorFormatter()->arrayFromStatus(
+ $this->errorArrayToStatus( $permError )
+ );
+ $result[] = $r;
+ continue;
+ }
+
+ $srcPath = $file->getLocalRefPath();
+ if ( $srcPath === false ) {
+ $r['result'] = 'Failure';
+ $r['errors'] = $this->getErrorFormatter()->arrayFromStatus(
+ Status::newFatal( 'apierror-filenopath' )
+ );
+ $result[] = $r;
+ continue;
+ }
+ $ext = strtolower( pathinfo( "$srcPath", PATHINFO_EXTENSION ) );
+ $tmpFile = TempFSFile::factory( 'rotate_', $ext, wfTempDir() );
+ $dstPath = $tmpFile->getPath();
+ $err = $handler->rotate( $file, [
+ 'srcPath' => $srcPath,
+ 'dstPath' => $dstPath,
+ 'rotation' => $rotation
+ ] );
+ if ( !$err ) {
+ $comment = wfMessage(
+ 'rotate-comment'
+ )->numParams( $rotation )->inContentLanguage()->text();
+ $status = $file->upload(
+ $dstPath,
+ $comment,
+ $comment,
+ 0,
+ false,
+ false,
+ $this->getUser(),
+ $params['tags'] ?: []
+ );
+ if ( $status->isGood() ) {
+ $r['result'] = 'Success';
+ } else {
+ $r['result'] = 'Failure';
+ $r['errors'] = $this->getErrorFormatter()->arrayFromStatus( $status );
+ }
+ } else {
+ $r['result'] = 'Failure';
+ $r['errors'] = $this->getErrorFormatter()->arrayFromStatus(
+ Status::newFatal( ApiMessage::create( $err->getMsg() ) )
+ );
+ }
+ $result[] = $r;
+ }
+ $apiResult = $this->getResult();
+ ApiResult::setIndexedTagName( $result, 'page' );
+ $apiResult->addValue( null, $this->getModuleName(), $result );
+
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $apiResult );
+ }
+
+ /**
+ * Get a cached instance of an ApiPageSet object
+ * @return ApiPageSet
+ */
+ private function getPageSet() {
+ if ( $this->mPageSet === null ) {
+ $this->mPageSet = new ApiPageSet( $this, 0, NS_FILE );
+ }
+
+ return $this->mPageSet;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $result = [
+ 'rotation' => [
+ ApiBase::PARAM_TYPE => [ '90', '180', '270' ],
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ if ( $flags ) {
+ $result += $this->getPageSet()->getFinalParams( $flags );
+ }
+
+ return $result;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=imagerotate&titles=File:Example.jpg&rotation=90&token=123ABC'
+ => 'apihelp-imagerotate-example-simple',
+ 'action=imagerotate&generator=categorymembers&gcmtitle=Category:Flip&gcmtype=file&' .
+ 'rotation=180&token=123ABC'
+ => 'apihelp-imagerotate-example-generator',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiImport.php b/www/wiki/includes/api/ApiImport.php
new file mode 100644
index 00000000..822711aa
--- /dev/null
+++ b/www/wiki/includes/api/ApiImport.php
@@ -0,0 +1,222 @@
+<?php
+/**
+ * Copyright © 2009 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that imports an XML file like Special:Import does
+ *
+ * @ingroup API
+ */
+class ApiImport extends ApiBase {
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ $this->requireMaxOneParameter( $params, 'namespace', 'rootpage' );
+
+ $isUpload = false;
+ if ( isset( $params['interwikisource'] ) ) {
+ if ( !$user->isAllowed( 'import' ) ) {
+ $this->dieWithError( 'apierror-cantimport' );
+ }
+ if ( !isset( $params['interwikipage'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'interwikipage' ] );
+ }
+ $source = ImportStreamSource::newFromInterwiki(
+ $params['interwikisource'],
+ $params['interwikipage'],
+ $params['fullhistory'],
+ $params['templates']
+ );
+ $usernamePrefix = $params['interwikisource'];
+ } else {
+ $isUpload = true;
+ if ( !$user->isAllowed( 'importupload' ) ) {
+ $this->dieWithError( 'apierror-cantimport-upload' );
+ }
+ $source = ImportStreamSource::newFromUpload( 'xml' );
+ $usernamePrefix = (string)$params['interwikiprefix'];
+ if ( $usernamePrefix === '' ) {
+ $encParamName = $this->encodeParamName( 'interwikiprefix' );
+ $this->dieWithError( [ 'apierror-missingparam', $encParamName ] );
+ }
+ }
+ if ( !$source->isOK() ) {
+ $this->dieStatus( $source );
+ }
+
+ // Check if user can add the log entry tags which were requested
+ if ( $params['tags'] ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ $importer = new WikiImporter( $source->value, $this->getConfig() );
+ if ( isset( $params['namespace'] ) ) {
+ $importer->setTargetNamespace( $params['namespace'] );
+ } elseif ( isset( $params['rootpage'] ) ) {
+ $statusRootPage = $importer->setTargetRootPage( $params['rootpage'] );
+ if ( !$statusRootPage->isGood() ) {
+ $this->dieStatus( $statusRootPage );
+ }
+ }
+ $importer->setUsernamePrefix( $usernamePrefix, $params['assignknownusers'] );
+ $reporter = new ApiImportReporter(
+ $importer,
+ $isUpload,
+ $params['interwikisource'],
+ $params['summary']
+ );
+ if ( $params['tags'] ) {
+ $reporter->setChangeTags( $params['tags'] );
+ }
+
+ try {
+ $importer->doImport();
+ } catch ( Exception $e ) {
+ $this->dieWithException( $e, [ 'wrap' => 'apierror-import-unknownerror' ] );
+ }
+
+ $resultData = $reporter->getData();
+ $result = $this->getResult();
+ ApiResult::setIndexedTagName( $resultData, 'page' );
+ $result->addValue( null, $this->getModuleName(), $resultData );
+ }
+
+ /**
+ * Returns a list of interwiki prefixes corresponding to each defined import
+ * source.
+ *
+ * @return array
+ * @since 1.27
+ */
+ public function getAllowedImportSources() {
+ $importSources = $this->getConfig()->get( 'ImportSources' );
+ Hooks::run( 'ImportSources', [ &$importSources ] );
+
+ $result = [];
+ foreach ( $importSources as $key => $value ) {
+ if ( is_int( $key ) ) {
+ $result[] = $value;
+ } else {
+ foreach ( $value as $subproject ) {
+ $result[] = "$key:$subproject";
+ }
+ }
+ }
+ return $result;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'summary' => null,
+ 'xml' => [
+ ApiBase::PARAM_TYPE => 'upload',
+ ],
+ 'interwikiprefix' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'interwikisource' => [
+ ApiBase::PARAM_TYPE => $this->getAllowedImportSources(),
+ ],
+ 'interwikipage' => null,
+ 'fullhistory' => false,
+ 'templates' => false,
+ 'namespace' => [
+ ApiBase::PARAM_TYPE => 'namespace'
+ ],
+ 'assignknownusers' => false,
+ 'rootpage' => null,
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
+ 'namespace=100&fullhistory=&token=123ABC'
+ => 'apihelp-import-example-import',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Import';
+ }
+}
+
+/**
+ * Import reporter for the API
+ * @ingroup API
+ */
+class ApiImportReporter extends ImportReporter {
+ private $mResultArr = [];
+
+ /**
+ * @param Title $title
+ * @param Title $origTitle
+ * @param int $revisionCount
+ * @param int $successCount
+ * @param array $pageInfo
+ * @return void
+ */
+ public function reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo ) {
+ // Add a result entry
+ $r = [];
+
+ if ( $title === null ) {
+ # Invalid or non-importable title
+ $r['title'] = $pageInfo['title'];
+ $r['invalid'] = true;
+ } else {
+ ApiQueryBase::addTitleInfo( $r, $title );
+ $r['revisions'] = intval( $successCount );
+ }
+
+ $this->mResultArr[] = $r;
+
+ // Piggyback on the parent to do the logging
+ parent::reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo );
+ }
+
+ public function getData() {
+ return $this->mResultArr;
+ }
+}
diff --git a/www/wiki/includes/api/ApiLinkAccount.php b/www/wiki/includes/api/ApiLinkAccount.php
new file mode 100644
index 00000000..9553f297
--- /dev/null
+++ b/www/wiki/includes/api/ApiLinkAccount.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Auth\AuthManager;
+use MediaWiki\Auth\AuthenticationResponse;
+
+/**
+ * Link an account with AuthManager
+ *
+ * @ingroup API
+ */
+class ApiLinkAccount extends ApiBase {
+
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action, 'link' );
+ }
+
+ public function getFinalDescription() {
+ // A bit of a hack to append 'api-help-authmanager-general-usage'
+ $msgs = parent::getFinalDescription();
+ $msgs[] = ApiBase::makeMessage( 'api-help-authmanager-general-usage', $this->getContext(), [
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ AuthManager::ACTION_LINK,
+ self::needsToken(),
+ ] );
+ return $msgs;
+ }
+
+ public function execute() {
+ if ( !$this->getUser()->isLoggedIn() ) {
+ $this->dieWithError( 'apierror-mustbeloggedin-linkaccounts', 'notloggedin' );
+ }
+
+ $params = $this->extractRequestParams();
+
+ $this->requireAtLeastOneParameter( $params, 'continue', 'returnurl' );
+
+ if ( $params['returnurl'] !== null ) {
+ $bits = wfParseUrl( $params['returnurl'] );
+ if ( !$bits || $bits['scheme'] === '' ) {
+ $encParamName = $this->encodeParamName( 'returnurl' );
+ $this->dieWithError(
+ [ 'apierror-badurl', $encParamName, wfEscapeWikiText( $params['returnurl'] ) ],
+ "badurl_{$encParamName}"
+ );
+ }
+ }
+
+ $helper = new ApiAuthManagerHelper( $this );
+ $manager = AuthManager::singleton();
+
+ // Check security-sensitive operation status
+ $helper->securitySensitiveOperation( 'LinkAccounts' );
+
+ // Make sure it's possible to link accounts
+ if ( !$manager->canLinkAccounts() ) {
+ $this->getResult()->addValue( null, 'linkaccount', $helper->formatAuthenticationResponse(
+ AuthenticationResponse::newFail( $this->msg( 'userlogin-cannot-' . AuthManager::ACTION_LINK ) )
+ ) );
+ return;
+ }
+
+ // Perform the link step
+ if ( $params['continue'] ) {
+ $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_LINK_CONTINUE );
+ $res = $manager->continueAccountLink( $reqs );
+ } else {
+ $reqs = $helper->loadAuthenticationRequests( AuthManager::ACTION_LINK );
+ $res = $manager->beginAccountLink( $this->getUser(), $reqs, $params['returnurl'] );
+ }
+
+ $this->getResult()->addValue( null, 'linkaccount',
+ $helper->formatAuthenticationResponse( $res ) );
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ public function getAllowedParams() {
+ return ApiAuthManagerHelper::getStandardParams( AuthManager::ACTION_LINK,
+ 'requests', 'messageformat', 'mergerequestfields', 'returnurl', 'continue'
+ );
+ }
+
+ public function dynamicParameterDocumentation() {
+ return [ 'api-help-authmanagerhelper-additional-params', AuthManager::ACTION_LINK ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=linkaccount&provider=Example&linkreturnurl=http://example.org/&linktoken=123ABC'
+ => 'apihelp-linkaccount-example-link',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Linkaccount';
+ }
+}
diff --git a/www/wiki/includes/api/ApiLogin.php b/www/wiki/includes/api/ApiLogin.php
new file mode 100644
index 00000000..14491da1
--- /dev/null
+++ b/www/wiki/includes/api/ApiLogin.php
@@ -0,0 +1,308 @@
+<?php
+/**
+ * Copyright © 2006-2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com",
+ * Daniel Cannon (cannon dot danielc at gmail dot com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Auth\AuthManager;
+use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\Auth\AuthenticationResponse;
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * Unit to authenticate log-in attempts to the current wiki.
+ *
+ * @ingroup API
+ */
+class ApiLogin extends ApiBase {
+
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action, 'lg' );
+ }
+
+ protected function getExtendedDescription() {
+ if ( $this->getConfig()->get( 'EnableBotPasswords' ) ) {
+ return 'apihelp-login-extended-description';
+ } else {
+ return 'apihelp-login-extended-description-nobotpasswords';
+ }
+ }
+
+ /**
+ * Format a message for the response
+ * @param Message|string|array $message
+ * @return string|array
+ */
+ private function formatMessage( $message ) {
+ $message = Message::newFromSpecifier( $message );
+ $errorFormatter = $this->getErrorFormatter();
+ if ( $errorFormatter instanceof ApiErrorFormatter_BackCompat ) {
+ return ApiErrorFormatter::stripMarkup(
+ $message->useDatabase( false )->inLanguage( 'en' )->text()
+ );
+ } else {
+ return $errorFormatter->formatMessage( $message );
+ }
+ }
+
+ /**
+ * Executes the log-in attempt using the parameters passed. If
+ * the log-in succeeds, it attaches a cookie to the session
+ * and outputs the user id, username, and session token. If a
+ * log-in fails, as the result of a bad password, a nonexistent
+ * user, or any other reason, the host is cached with an expiry
+ * and no log-in attempts will be accepted until that expiry
+ * is reached. The expiry is $this->mLoginThrottle.
+ */
+ public function execute() {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ $this->getResult()->addValue( null, 'login', [
+ 'result' => 'Aborted',
+ 'reason' => $this->formatMessage( 'api-login-fail-sameorigin' ),
+ ] );
+
+ return;
+ }
+
+ $this->requirePostedParameters( [ 'password', 'token' ] );
+
+ $params = $this->extractRequestParams();
+
+ $result = [];
+
+ // Make sure session is persisted
+ $session = MediaWiki\Session\SessionManager::getGlobalSession();
+ $session->persist();
+
+ // Make sure it's possible to log in
+ if ( !$session->canSetUser() ) {
+ $this->getResult()->addValue( null, 'login', [
+ 'result' => 'Aborted',
+ 'reason' => $this->formatMessage( [
+ 'api-login-fail-badsessionprovider',
+ $session->getProvider()->describe( $this->getErrorFormatter()->getLanguage() ),
+ ] )
+ ] );
+
+ return;
+ }
+
+ $authRes = false;
+ $context = new DerivativeContext( $this->getContext() );
+ $loginType = 'N/A';
+
+ // Check login token
+ $token = $session->getToken( '', 'login' );
+ if ( $token->wasNew() || !$params['token'] ) {
+ $authRes = 'NeedToken';
+ } elseif ( !$token->match( $params['token'] ) ) {
+ $authRes = 'WrongToken';
+ }
+
+ // Try bot passwords
+ if (
+ $authRes === false && $this->getConfig()->get( 'EnableBotPasswords' ) &&
+ ( $botLoginData = BotPassword::canonicalizeLoginData( $params['name'], $params['password'] ) )
+ ) {
+ $status = BotPassword::login(
+ $botLoginData[0], $botLoginData[1], $this->getRequest()
+ );
+ if ( $status->isOK() ) {
+ $session = $status->getValue();
+ $authRes = 'Success';
+ $loginType = 'BotPassword';
+ } elseif ( !$botLoginData[2] ||
+ $status->hasMessage( 'login-throttled' ) ||
+ $status->hasMessage( 'botpasswords-needs-reset' ) ||
+ $status->hasMessage( 'botpasswords-locked' )
+ ) {
+ $authRes = 'Failed';
+ $message = $status->getMessage();
+ LoggerFactory::getInstance( 'authentication' )->info(
+ 'BotPassword login failed: ' . $status->getWikiText( false, false, 'en' )
+ );
+ }
+ }
+
+ if ( $authRes === false ) {
+ // Simplified AuthManager login, for backwards compatibility
+ $manager = AuthManager::singleton();
+ $reqs = AuthenticationRequest::loadRequestsFromSubmission(
+ $manager->getAuthenticationRequests( AuthManager::ACTION_LOGIN, $this->getUser() ),
+ [
+ 'username' => $params['name'],
+ 'password' => $params['password'],
+ 'domain' => $params['domain'],
+ 'rememberMe' => true,
+ ]
+ );
+ $res = AuthManager::singleton()->beginAuthentication( $reqs, 'null:' );
+ switch ( $res->status ) {
+ case AuthenticationResponse::PASS:
+ if ( $this->getConfig()->get( 'EnableBotPasswords' ) ) {
+ $this->addDeprecation( 'apiwarn-deprecation-login-botpw', 'main-account-login' );
+ } else {
+ $this->addDeprecation( 'apiwarn-deprecation-login-nobotpw', 'main-account-login' );
+ }
+ $authRes = 'Success';
+ $loginType = 'AuthManager';
+ break;
+
+ case AuthenticationResponse::FAIL:
+ // Hope it's not a PreAuthenticationProvider that failed...
+ $authRes = 'Failed';
+ $message = $res->message;
+ \MediaWiki\Logger\LoggerFactory::getInstance( 'authentication' )
+ ->info( __METHOD__ . ': Authentication failed: '
+ . $message->inLanguage( 'en' )->plain() );
+ break;
+
+ default:
+ \MediaWiki\Logger\LoggerFactory::getInstance( 'authentication' )
+ ->info( __METHOD__ . ': Authentication failed due to unsupported response type: '
+ . $res->status, $this->getAuthenticationResponseLogData( $res ) );
+ $authRes = 'Aborted';
+ break;
+ }
+ }
+
+ $result['result'] = $authRes;
+ switch ( $authRes ) {
+ case 'Success':
+ $user = $session->getUser();
+
+ ApiQueryInfo::resetTokenCache();
+
+ // Deprecated hook
+ $injected_html = '';
+ Hooks::run( 'UserLoginComplete', [ &$user, &$injected_html, true ] );
+
+ $result['lguserid'] = intval( $user->getId() );
+ $result['lgusername'] = $user->getName();
+ break;
+
+ case 'NeedToken':
+ $result['token'] = $token->toString();
+ $this->addDeprecation( 'apiwarn-deprecation-login-token', 'action=login&!lgtoken' );
+ break;
+
+ case 'WrongToken':
+ break;
+
+ case 'Failed':
+ $result['reason'] = $this->formatMessage( $message );
+ break;
+
+ case 'Aborted':
+ $result['reason'] = $this->formatMessage(
+ $this->getConfig()->get( 'EnableBotPasswords' )
+ ? 'api-login-fail-aborted'
+ : 'api-login-fail-aborted-nobotpw'
+ );
+ break;
+
+ default:
+ ApiBase::dieDebug( __METHOD__, "Unhandled case value: {$authRes}" );
+ }
+
+ $this->getResult()->addValue( null, 'login', $result );
+
+ if ( $loginType === 'LoginForm' && isset( LoginForm::$statusCodes[$authRes] ) ) {
+ $authRes = LoginForm::$statusCodes[$authRes];
+ }
+ LoggerFactory::getInstance( 'authevents' )->info( 'Login attempt', [
+ 'event' => 'login',
+ 'successful' => $authRes === 'Success',
+ 'loginType' => $loginType,
+ 'status' => $authRes,
+ ] );
+ }
+
+ public function isDeprecated() {
+ return !$this->getConfig()->get( 'EnableBotPasswords' );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'name' => null,
+ 'password' => [
+ ApiBase::PARAM_TYPE => 'password',
+ ],
+ 'domain' => null,
+ 'token' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => false, // for BC
+ ApiBase::PARAM_SENSITIVE => true,
+ ApiBase::PARAM_HELP_MSG => [ 'api-help-param-token', 'login' ],
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=login&lgname=user&lgpassword=password'
+ => 'apihelp-login-example-gettoken',
+ 'action=login&lgname=user&lgpassword=password&lgtoken=123ABC'
+ => 'apihelp-login-example-login',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Login';
+ }
+
+ /**
+ * Turns an AuthenticationResponse into a hash suitable for passing to Logger
+ * @param AuthenticationResponse $response
+ * @return array
+ */
+ protected function getAuthenticationResponseLogData( AuthenticationResponse $response ) {
+ $ret = [
+ 'status' => $response->status,
+ ];
+ if ( $response->message ) {
+ $ret['message'] = $response->message->inLanguage( 'en' )->plain();
+ };
+ $reqs = [
+ 'neededRequests' => $response->neededRequests,
+ 'createRequest' => $response->createRequest,
+ 'linkRequest' => $response->linkRequest,
+ ];
+ foreach ( $reqs as $k => $v ) {
+ if ( $v ) {
+ $v = is_array( $v ) ? $v : [ $v ];
+ $reqClasses = array_unique( array_map( 'get_class', $v ) );
+ sort( $reqClasses );
+ $ret[$k] = implode( ', ', $reqClasses );
+ }
+ }
+ return $ret;
+ }
+}
diff --git a/www/wiki/includes/api/ApiLogout.php b/www/wiki/includes/api/ApiLogout.php
new file mode 100644
index 00000000..d549e75f
--- /dev/null
+++ b/www/wiki/includes/api/ApiLogout.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright © 2008 Yuri Astrakhan "<Firstname><Lastname>@gmail.com",
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Session\BotPasswordSessionProvider;
+
+/**
+ * API module to allow users to log out of the wiki. API equivalent of
+ * Special:Userlogout.
+ *
+ * @ingroup API
+ */
+class ApiLogout extends ApiBase {
+
+ public function execute() {
+ $session = MediaWiki\Session\SessionManager::getGlobalSession();
+
+ // Handle bot password logout specially
+ if ( $session->getProvider() instanceof BotPasswordSessionProvider ) {
+ $session->unpersist();
+ return;
+ }
+
+ // Make sure it's possible to log out
+ if ( !$session->canSetUser() ) {
+ $this->dieWithError(
+ [
+ 'cannotlogoutnow-text',
+ $session->getProvider()->describe( $this->getErrorFormatter()->getLanguage() )
+ ],
+ 'cannotlogout'
+ );
+ }
+
+ $user = $this->getUser();
+ $oldName = $user->getName();
+ $user->logout();
+
+ // Give extensions to do something after user logout
+ $injected_html = '';
+ Hooks::run( 'UserLogoutComplete', [ &$user, &$injected_html, $oldName ] );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getWebUITokenSalt( array $params ) {
+ return 'logoutToken';
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=logout&token=123ABC'
+ => 'apihelp-logout-example-logout',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Logout';
+ }
+}
diff --git a/www/wiki/includes/api/ApiMain.php b/www/wiki/includes/api/ApiMain.php
new file mode 100644
index 00000000..b7b13c5d
--- /dev/null
+++ b/www/wiki/includes/api/ApiMain.php
@@ -0,0 +1,2028 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @defgroup API API
+ */
+
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Timestamp\TimestampException;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\DBError;
+
+/**
+ * This is the main API class, used for both external and internal processing.
+ * When executed, it will create the requested formatter object,
+ * instantiate and execute an object associated with the needed action,
+ * and use formatter to print results.
+ * In case of an exception, an error message will be printed using the same formatter.
+ *
+ * To use API from another application, run it using FauxRequest object, in which
+ * case any internal exceptions will not be handled but passed up to the caller.
+ * After successful execution, use getResult() for the resulting data.
+ *
+ * @ingroup API
+ */
+class ApiMain extends ApiBase {
+ /**
+ * When no format parameter is given, this format will be used
+ */
+ const API_DEFAULT_FORMAT = 'jsonfm';
+
+ /**
+ * When no uselang parameter is given, this language will be used
+ */
+ const API_DEFAULT_USELANG = 'user';
+
+ /**
+ * List of available modules: action name => module class
+ */
+ private static $Modules = [
+ 'login' => ApiLogin::class,
+ 'clientlogin' => ApiClientLogin::class,
+ 'logout' => ApiLogout::class,
+ 'createaccount' => ApiAMCreateAccount::class,
+ 'linkaccount' => ApiLinkAccount::class,
+ 'unlinkaccount' => ApiRemoveAuthenticationData::class,
+ 'changeauthenticationdata' => ApiChangeAuthenticationData::class,
+ 'removeauthenticationdata' => ApiRemoveAuthenticationData::class,
+ 'resetpassword' => ApiResetPassword::class,
+ 'query' => ApiQuery::class,
+ 'expandtemplates' => ApiExpandTemplates::class,
+ 'parse' => ApiParse::class,
+ 'stashedit' => ApiStashEdit::class,
+ 'opensearch' => ApiOpenSearch::class,
+ 'feedcontributions' => ApiFeedContributions::class,
+ 'feedrecentchanges' => ApiFeedRecentChanges::class,
+ 'feedwatchlist' => ApiFeedWatchlist::class,
+ 'help' => ApiHelp::class,
+ 'paraminfo' => ApiParamInfo::class,
+ 'rsd' => ApiRsd::class,
+ 'compare' => ApiComparePages::class,
+ 'tokens' => ApiTokens::class,
+ 'checktoken' => ApiCheckToken::class,
+ 'cspreport' => ApiCSPReport::class,
+ 'validatepassword' => ApiValidatePassword::class,
+
+ // Write modules
+ 'purge' => ApiPurge::class,
+ 'setnotificationtimestamp' => ApiSetNotificationTimestamp::class,
+ 'rollback' => ApiRollback::class,
+ 'delete' => ApiDelete::class,
+ 'undelete' => ApiUndelete::class,
+ 'protect' => ApiProtect::class,
+ 'block' => ApiBlock::class,
+ 'unblock' => ApiUnblock::class,
+ 'move' => ApiMove::class,
+ 'edit' => ApiEditPage::class,
+ 'upload' => ApiUpload::class,
+ 'filerevert' => ApiFileRevert::class,
+ 'emailuser' => ApiEmailUser::class,
+ 'watch' => ApiWatch::class,
+ 'patrol' => ApiPatrol::class,
+ 'import' => ApiImport::class,
+ 'clearhasmsg' => ApiClearHasMsg::class,
+ 'userrights' => ApiUserrights::class,
+ 'options' => ApiOptions::class,
+ 'imagerotate' => ApiImageRotate::class,
+ 'revisiondelete' => ApiRevisionDelete::class,
+ 'managetags' => ApiManageTags::class,
+ 'tag' => ApiTag::class,
+ 'mergehistory' => ApiMergeHistory::class,
+ 'setpagelanguage' => ApiSetPageLanguage::class,
+ ];
+
+ /**
+ * List of available formats: format name => format class
+ */
+ private static $Formats = [
+ 'json' => ApiFormatJson::class,
+ 'jsonfm' => ApiFormatJson::class,
+ 'php' => ApiFormatPhp::class,
+ 'phpfm' => ApiFormatPhp::class,
+ 'xml' => ApiFormatXml::class,
+ 'xmlfm' => ApiFormatXml::class,
+ 'rawfm' => ApiFormatJson::class,
+ 'none' => ApiFormatNone::class,
+ ];
+
+ /**
+ * List of user roles that are specifically relevant to the API.
+ * [ 'right' => [ 'msg' => 'Some message with a $1',
+ * 'params' => [ $someVarToSubst ] ],
+ * ];
+ */
+ private static $mRights = [
+ 'writeapi' => [
+ 'msg' => 'right-writeapi',
+ 'params' => []
+ ],
+ 'apihighlimits' => [
+ 'msg' => 'api-help-right-apihighlimits',
+ 'params' => [ ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 ]
+ ]
+ ];
+
+ /**
+ * @var ApiFormatBase
+ */
+ private $mPrinter;
+
+ private $mModuleMgr, $mResult, $mErrorFormatter = null;
+ /** @var ApiContinuationManager|null */
+ private $mContinuationManager;
+ private $mAction;
+ private $mEnableWrite;
+ private $mInternalMode, $mSquidMaxage;
+ /** @var ApiBase */
+ private $mModule;
+
+ private $mCacheMode = 'private';
+ private $mCacheControl = [];
+ private $mParamsUsed = [];
+ private $mParamsSensitive = [];
+
+ /** @var bool|null Cached return value from self::lacksSameOriginSecurity() */
+ private $lacksSameOriginSecurity = null;
+
+ /**
+ * Constructs an instance of ApiMain that utilizes the module and format specified by $request.
+ *
+ * @param IContextSource|WebRequest $context If this is an instance of
+ * FauxRequest, errors are thrown and no printing occurs
+ * @param bool $enableWrite Should be set to true if the api may modify data
+ */
+ public function __construct( $context = null, $enableWrite = false ) {
+ if ( $context === null ) {
+ $context = RequestContext::getMain();
+ } elseif ( $context instanceof WebRequest ) {
+ // BC for pre-1.19
+ $request = $context;
+ $context = RequestContext::getMain();
+ }
+ // We set a derivative context so we can change stuff later
+ $this->setContext( new DerivativeContext( $context ) );
+
+ if ( isset( $request ) ) {
+ $this->getContext()->setRequest( $request );
+ } else {
+ $request = $this->getRequest();
+ }
+
+ $this->mInternalMode = ( $request instanceof FauxRequest );
+
+ // Special handling for the main module: $parent === $this
+ parent::__construct( $this, $this->mInternalMode ? 'main_int' : 'main' );
+
+ $config = $this->getConfig();
+
+ if ( !$this->mInternalMode ) {
+ // Log if a request with a non-whitelisted Origin header is seen
+ // with session cookies.
+ $originHeader = $request->getHeader( 'Origin' );
+ if ( $originHeader === false ) {
+ $origins = [];
+ } else {
+ $originHeader = trim( $originHeader );
+ $origins = preg_split( '/\s+/', $originHeader );
+ }
+ $sessionCookies = array_intersect(
+ array_keys( $_COOKIE ),
+ MediaWiki\Session\SessionManager::singleton()->getVaryCookies()
+ );
+ if ( $origins && $sessionCookies && (
+ count( $origins ) !== 1 || !self::matchOrigin(
+ $origins[0],
+ $config->get( 'CrossSiteAJAXdomains' ),
+ $config->get( 'CrossSiteAJAXdomainExceptions' )
+ )
+ ) ) {
+ LoggerFactory::getInstance( 'cors' )->warning(
+ 'Non-whitelisted CORS request with session cookies', [
+ 'origin' => $originHeader,
+ 'cookies' => $sessionCookies,
+ 'ip' => $request->getIP(),
+ 'userAgent' => $this->getUserAgent(),
+ 'wiki' => wfWikiID(),
+ ]
+ );
+ }
+
+ // If we're in a mode that breaks the same-origin policy, strip
+ // user credentials for security.
+ if ( $this->lacksSameOriginSecurity() ) {
+ global $wgUser;
+ wfDebug( "API: stripping user credentials when the same-origin policy is not applied\n" );
+ $wgUser = new User();
+ $this->getContext()->setUser( $wgUser );
+ $request->response()->header( 'MediaWiki-Login-Suppressed: true' );
+ }
+ }
+
+ $this->mResult = new ApiResult( $this->getConfig()->get( 'APIMaxResultSize' ) );
+
+ // Setup uselang. This doesn't use $this->getParameter()
+ // because we're not ready to handle errors yet.
+ $uselang = $request->getVal( 'uselang', self::API_DEFAULT_USELANG );
+ if ( $uselang === 'user' ) {
+ // Assume the parent context is going to return the user language
+ // for uselang=user (see T85635).
+ } else {
+ if ( $uselang === 'content' ) {
+ global $wgContLang;
+ $uselang = $wgContLang->getCode();
+ }
+ $code = RequestContext::sanitizeLangCode( $uselang );
+ $this->getContext()->setLanguage( $code );
+ if ( !$this->mInternalMode ) {
+ global $wgLang;
+ $wgLang = $this->getContext()->getLanguage();
+ RequestContext::getMain()->setLanguage( $wgLang );
+ }
+ }
+
+ // Set up the error formatter. This doesn't use $this->getParameter()
+ // because we're not ready to handle errors yet.
+ $errorFormat = $request->getVal( 'errorformat', 'bc' );
+ $errorLangCode = $request->getVal( 'errorlang', 'uselang' );
+ $errorsUseDB = $request->getCheck( 'errorsuselocal' );
+ if ( in_array( $errorFormat, [ 'plaintext', 'wikitext', 'html', 'raw', 'none' ], true ) ) {
+ if ( $errorLangCode === 'uselang' ) {
+ $errorLang = $this->getLanguage();
+ } elseif ( $errorLangCode === 'content' ) {
+ global $wgContLang;
+ $errorLang = $wgContLang;
+ } else {
+ $errorLangCode = RequestContext::sanitizeLangCode( $errorLangCode );
+ $errorLang = Language::factory( $errorLangCode );
+ }
+ $this->mErrorFormatter = new ApiErrorFormatter(
+ $this->mResult, $errorLang, $errorFormat, $errorsUseDB
+ );
+ } else {
+ $this->mErrorFormatter = new ApiErrorFormatter_BackCompat( $this->mResult );
+ }
+ $this->mResult->setErrorFormatter( $this->getErrorFormatter() );
+
+ $this->mModuleMgr = new ApiModuleManager( $this );
+ $this->mModuleMgr->addModules( self::$Modules, 'action' );
+ $this->mModuleMgr->addModules( $config->get( 'APIModules' ), 'action' );
+ $this->mModuleMgr->addModules( self::$Formats, 'format' );
+ $this->mModuleMgr->addModules( $config->get( 'APIFormatModules' ), 'format' );
+
+ Hooks::run( 'ApiMain::moduleManager', [ $this->mModuleMgr ] );
+
+ $this->mContinuationManager = null;
+ $this->mEnableWrite = $enableWrite;
+
+ $this->mSquidMaxage = -1; // flag for executeActionWithErrorHandling()
+ $this->mCommit = false;
+ }
+
+ /**
+ * Return true if the API was started by other PHP code using FauxRequest
+ * @return bool
+ */
+ public function isInternalMode() {
+ return $this->mInternalMode;
+ }
+
+ /**
+ * Get the ApiResult object associated with current request
+ *
+ * @return ApiResult
+ */
+ public function getResult() {
+ return $this->mResult;
+ }
+
+ /**
+ * Get the security flag for the current request
+ * @return bool
+ */
+ public function lacksSameOriginSecurity() {
+ if ( $this->lacksSameOriginSecurity !== null ) {
+ return $this->lacksSameOriginSecurity;
+ }
+
+ $request = $this->getRequest();
+
+ // JSONP mode
+ if ( $request->getVal( 'callback' ) !== null ) {
+ $this->lacksSameOriginSecurity = true;
+ return true;
+ }
+
+ // Anonymous CORS
+ if ( $request->getVal( 'origin' ) === '*' ) {
+ $this->lacksSameOriginSecurity = true;
+ return true;
+ }
+
+ // Header to be used from XMLHTTPRequest when the request might
+ // otherwise be used for XSS.
+ if ( $request->getHeader( 'Treat-as-Untrusted' ) !== false ) {
+ $this->lacksSameOriginSecurity = true;
+ return true;
+ }
+
+ // Allow extensions to override.
+ $this->lacksSameOriginSecurity = !Hooks::run( 'RequestHasSameOriginSecurity', [ $request ] );
+ return $this->lacksSameOriginSecurity;
+ }
+
+ /**
+ * Get the ApiErrorFormatter object associated with current request
+ * @return ApiErrorFormatter
+ */
+ public function getErrorFormatter() {
+ return $this->mErrorFormatter;
+ }
+
+ /**
+ * Get the continuation manager
+ * @return ApiContinuationManager|null
+ */
+ public function getContinuationManager() {
+ return $this->mContinuationManager;
+ }
+
+ /**
+ * Set the continuation manager
+ * @param ApiContinuationManager|null $manager
+ */
+ public function setContinuationManager( ApiContinuationManager $manager = null ) {
+ if ( $manager !== null && $this->mContinuationManager !== null ) {
+ throw new UnexpectedValueException(
+ __METHOD__ . ': tried to set manager from ' . $manager->getSource() .
+ ' when a manager is already set from ' . $this->mContinuationManager->getSource()
+ );
+ }
+ $this->mContinuationManager = $manager;
+ }
+
+ /**
+ * Get the API module object. Only works after executeAction()
+ *
+ * @return ApiBase
+ */
+ public function getModule() {
+ return $this->mModule;
+ }
+
+ /**
+ * Get the result formatter object. Only works after setupExecuteAction()
+ *
+ * @return ApiFormatBase
+ */
+ public function getPrinter() {
+ return $this->mPrinter;
+ }
+
+ /**
+ * Set how long the response should be cached.
+ *
+ * @param int $maxage
+ */
+ public function setCacheMaxAge( $maxage ) {
+ $this->setCacheControl( [
+ 'max-age' => $maxage,
+ 's-maxage' => $maxage
+ ] );
+ }
+
+ /**
+ * Set the type of caching headers which will be sent.
+ *
+ * @param string $mode One of:
+ * - 'public': Cache this object in public caches, if the maxage or smaxage
+ * parameter is set, or if setCacheMaxAge() was called. If a maximum age is
+ * not provided by any of these means, the object will be private.
+ * - 'private': Cache this object only in private client-side caches.
+ * - 'anon-public-user-private': Make this object cacheable for logged-out
+ * users, but private for logged-in users. IMPORTANT: If this is set, it must be
+ * set consistently for a given URL, it cannot be set differently depending on
+ * things like the contents of the database, or whether the user is logged in.
+ *
+ * If the wiki does not allow anonymous users to read it, the mode set here
+ * will be ignored, and private caching headers will always be sent. In other words,
+ * the "public" mode is equivalent to saying that the data sent is as public as a page
+ * view.
+ *
+ * For user-dependent data, the private mode should generally be used. The
+ * anon-public-user-private mode should only be used where there is a particularly
+ * good performance reason for caching the anonymous response, but where the
+ * response to logged-in users may differ, or may contain private data.
+ *
+ * If this function is never called, then the default will be the private mode.
+ */
+ public function setCacheMode( $mode ) {
+ if ( !in_array( $mode, [ 'private', 'public', 'anon-public-user-private' ] ) ) {
+ wfDebug( __METHOD__ . ": unrecognised cache mode \"$mode\"\n" );
+
+ // Ignore for forwards-compatibility
+ return;
+ }
+
+ if ( !User::isEveryoneAllowed( 'read' ) ) {
+ // Private wiki, only private headers
+ if ( $mode !== 'private' ) {
+ wfDebug( __METHOD__ . ": ignoring request for $mode cache mode, private wiki\n" );
+
+ return;
+ }
+ }
+
+ if ( $mode === 'public' && $this->getParameter( 'uselang' ) === 'user' ) {
+ // User language is used for i18n, so we don't want to publicly
+ // cache. Anons are ok, because if they have non-default language
+ // then there's an appropriate Vary header set by whatever set
+ // their non-default language.
+ wfDebug( __METHOD__ . ": downgrading cache mode 'public' to " .
+ "'anon-public-user-private' due to uselang=user\n" );
+ $mode = 'anon-public-user-private';
+ }
+
+ wfDebug( __METHOD__ . ": setting cache mode $mode\n" );
+ $this->mCacheMode = $mode;
+ }
+
+ /**
+ * Set directives (key/value pairs) for the Cache-Control header.
+ * Boolean values will be formatted as such, by including or omitting
+ * without an equals sign.
+ *
+ * Cache control values set here will only be used if the cache mode is not
+ * private, see setCacheMode().
+ *
+ * @param array $directives
+ */
+ public function setCacheControl( $directives ) {
+ $this->mCacheControl = $directives + $this->mCacheControl;
+ }
+
+ /**
+ * Create an instance of an output formatter by its name
+ *
+ * @param string $format
+ *
+ * @return ApiFormatBase
+ */
+ public function createPrinterByName( $format ) {
+ $printer = $this->mModuleMgr->getModule( $format, 'format' );
+ if ( $printer === null ) {
+ $this->dieWithError(
+ [ 'apierror-unknownformat', wfEscapeWikiText( $format ) ], 'unknown_format'
+ );
+ }
+
+ return $printer;
+ }
+
+ /**
+ * Execute api request. Any errors will be handled if the API was called by the remote client.
+ */
+ public function execute() {
+ if ( $this->mInternalMode ) {
+ $this->executeAction();
+ } else {
+ $this->executeActionWithErrorHandling();
+ }
+ }
+
+ /**
+ * Execute an action, and in case of an error, erase whatever partial results
+ * have been accumulated, and replace it with an error message and a help screen.
+ */
+ protected function executeActionWithErrorHandling() {
+ // Verify the CORS header before executing the action
+ if ( !$this->handleCORS() ) {
+ // handleCORS() has sent a 403, abort
+ return;
+ }
+
+ // Exit here if the request method was OPTIONS
+ // (assume there will be a followup GET or POST)
+ if ( $this->getRequest()->getMethod() === 'OPTIONS' ) {
+ return;
+ }
+
+ // In case an error occurs during data output,
+ // clear the output buffer and print just the error information
+ $obLevel = ob_get_level();
+ ob_start();
+
+ $t = microtime( true );
+ $isError = false;
+ try {
+ $this->executeAction();
+ $runTime = microtime( true ) - $t;
+ $this->logRequest( $runTime );
+ if ( $this->mModule->isWriteMode() && $this->getRequest()->wasPosted() ) {
+ MediaWikiServices::getInstance()->getStatsdDataFactory()->timing(
+ 'api.' . $this->mModule->getModuleName() . '.executeTiming', 1000 * $runTime
+ );
+ }
+ } catch ( Exception $e ) {
+ $this->handleException( $e );
+ $this->logRequest( microtime( true ) - $t, $e );
+ $isError = true;
+ }
+
+ // Commit DBs and send any related cookies and headers
+ MediaWiki::preOutputCommit( $this->getContext() );
+
+ // Send cache headers after any code which might generate an error, to
+ // avoid sending public cache headers for errors.
+ $this->sendCacheHeaders( $isError );
+
+ // Executing the action might have already messed with the output
+ // buffers.
+ while ( ob_get_level() > $obLevel ) {
+ ob_end_flush();
+ }
+ }
+
+ /**
+ * Handle an exception as an API response
+ *
+ * @since 1.23
+ * @param Exception $e
+ */
+ protected function handleException( Exception $e ) {
+ // T65145: Rollback any open database transactions
+ if ( !( $e instanceof ApiUsageException || $e instanceof UsageException ) ) {
+ // UsageExceptions are intentional, so don't rollback if that's the case
+ MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+ }
+
+ // Allow extra cleanup and logging
+ Hooks::run( 'ApiMain::onException', [ $this, $e ] );
+
+ // Handle any kind of exception by outputting properly formatted error message.
+ // If this fails, an unhandled exception should be thrown so that global error
+ // handler will process and log it.
+
+ $errCodes = $this->substituteResultWithError( $e );
+
+ // Error results should not be cached
+ $this->setCacheMode( 'private' );
+
+ $response = $this->getRequest()->response();
+ $headerStr = 'MediaWiki-API-Error: ' . implode( ', ', $errCodes );
+ $response->header( $headerStr );
+
+ // Reset and print just the error message
+ ob_clean();
+
+ // Printer may not be initialized if the extractRequestParams() fails for the main module
+ $this->createErrorPrinter();
+
+ $failed = false;
+ try {
+ $this->printResult( $e->getCode() );
+ } catch ( ApiUsageException $ex ) {
+ // The error printer itself is failing. Try suppressing its request
+ // parameters and redo.
+ $failed = true;
+ $this->addWarning( 'apiwarn-errorprinterfailed' );
+ foreach ( $ex->getStatusValue()->getErrors() as $error ) {
+ try {
+ $this->mPrinter->addWarning( $error );
+ } catch ( Exception $ex2 ) {
+ // WTF?
+ $this->addWarning( $error );
+ }
+ }
+ } catch ( UsageException $ex ) {
+ // The error printer itself is failing. Try suppressing its request
+ // parameters and redo.
+ $failed = true;
+ $this->addWarning(
+ [ 'apiwarn-errorprinterfailed-ex', $ex->getMessage() ], 'errorprinterfailed'
+ );
+ }
+ if ( $failed ) {
+ $this->mPrinter = null;
+ $this->createErrorPrinter();
+ $this->mPrinter->forceDefaultParams();
+ if ( $e->getCode() ) {
+ $response->statusHeader( 200 ); // Reset in case the fallback doesn't want a non-200
+ }
+ $this->printResult( $e->getCode() );
+ }
+ }
+
+ /**
+ * Handle an exception from the ApiBeforeMain hook.
+ *
+ * This tries to print the exception as an API response, to be more
+ * friendly to clients. If it fails, it will rethrow the exception.
+ *
+ * @since 1.23
+ * @param Exception $e
+ * @throws Exception
+ */
+ public static function handleApiBeforeMainException( Exception $e ) {
+ ob_start();
+
+ try {
+ $main = new self( RequestContext::getMain(), false );
+ $main->handleException( $e );
+ $main->logRequest( 0, $e );
+ } catch ( Exception $e2 ) {
+ // Nope, even that didn't work. Punt.
+ throw $e;
+ }
+
+ // Reset cache headers
+ $main->sendCacheHeaders( true );
+
+ ob_end_flush();
+ }
+
+ /**
+ * Check the &origin= query parameter against the Origin: HTTP header and respond appropriately.
+ *
+ * If no origin parameter is present, nothing happens.
+ * If an origin parameter is present but doesn't match the Origin header, a 403 status code
+ * is set and false is returned.
+ * If the parameter and the header do match, the header is checked against $wgCrossSiteAJAXdomains
+ * and $wgCrossSiteAJAXdomainExceptions, and if the origin qualifies, the appropriate CORS
+ * headers are set.
+ * https://www.w3.org/TR/cors/#resource-requests
+ * https://www.w3.org/TR/cors/#resource-preflight-requests
+ *
+ * @return bool False if the caller should abort (403 case), true otherwise (all other cases)
+ */
+ protected function handleCORS() {
+ $originParam = $this->getParameter( 'origin' ); // defaults to null
+ if ( $originParam === null ) {
+ // No origin parameter, nothing to do
+ return true;
+ }
+
+ $request = $this->getRequest();
+ $response = $request->response();
+
+ $matchedOrigin = false;
+ $allowTiming = false;
+ $varyOrigin = true;
+
+ if ( $originParam === '*' ) {
+ // Request for anonymous CORS
+ // Technically we should check for the presence of an Origin header
+ // and not process it as CORS if it's not set, but that would
+ // require us to vary on Origin for all 'origin=*' requests which
+ // we don't want to do.
+ $matchedOrigin = true;
+ $allowOrigin = '*';
+ $allowCredentials = 'false';
+ $varyOrigin = false; // No need to vary
+ } else {
+ // Non-anonymous CORS, check we allow the domain
+
+ // Origin: header is a space-separated list of origins, check all of them
+ $originHeader = $request->getHeader( 'Origin' );
+ if ( $originHeader === false ) {
+ $origins = [];
+ } else {
+ $originHeader = trim( $originHeader );
+ $origins = preg_split( '/\s+/', $originHeader );
+ }
+
+ if ( !in_array( $originParam, $origins ) ) {
+ // origin parameter set but incorrect
+ // Send a 403 response
+ $response->statusHeader( 403 );
+ $response->header( 'Cache-Control: no-cache' );
+ echo "'origin' parameter does not match Origin header\n";
+
+ return false;
+ }
+
+ $config = $this->getConfig();
+ $matchedOrigin = count( $origins ) === 1 && self::matchOrigin(
+ $originParam,
+ $config->get( 'CrossSiteAJAXdomains' ),
+ $config->get( 'CrossSiteAJAXdomainExceptions' )
+ );
+
+ $allowOrigin = $originHeader;
+ $allowCredentials = 'true';
+ $allowTiming = $originHeader;
+ }
+
+ if ( $matchedOrigin ) {
+ $requestedMethod = $request->getHeader( 'Access-Control-Request-Method' );
+ $preflight = $request->getMethod() === 'OPTIONS' && $requestedMethod !== false;
+ if ( $preflight ) {
+ // This is a CORS preflight request
+ if ( $requestedMethod !== 'POST' && $requestedMethod !== 'GET' ) {
+ // If method is not a case-sensitive match, do not set any additional headers and terminate.
+ $response->header( 'MediaWiki-CORS-Rejection: Unsupported method requested in preflight' );
+ return true;
+ }
+ // We allow the actual request to send the following headers
+ $requestedHeaders = $request->getHeader( 'Access-Control-Request-Headers' );
+ if ( $requestedHeaders !== false ) {
+ if ( !self::matchRequestedHeaders( $requestedHeaders ) ) {
+ $response->header( 'MediaWiki-CORS-Rejection: Unsupported header requested in preflight' );
+ return true;
+ }
+ $response->header( 'Access-Control-Allow-Headers: ' . $requestedHeaders );
+ }
+
+ // We only allow the actual request to be GET or POST
+ $response->header( 'Access-Control-Allow-Methods: POST, GET' );
+ } elseif ( $request->getMethod() !== 'POST' && $request->getMethod() !== 'GET' ) {
+ // Unsupported non-preflight method, don't handle it as CORS
+ $response->header(
+ 'MediaWiki-CORS-Rejection: Unsupported method for simple request or actual request'
+ );
+ return true;
+ }
+
+ $response->header( "Access-Control-Allow-Origin: $allowOrigin" );
+ $response->header( "Access-Control-Allow-Credentials: $allowCredentials" );
+ // https://www.w3.org/TR/resource-timing/#timing-allow-origin
+ if ( $allowTiming !== false ) {
+ $response->header( "Timing-Allow-Origin: $allowTiming" );
+ }
+
+ if ( !$preflight ) {
+ $response->header(
+ 'Access-Control-Expose-Headers: MediaWiki-API-Error, Retry-After, X-Database-Lag, '
+ . 'MediaWiki-Login-Suppressed'
+ );
+ }
+ } else {
+ $response->header( 'MediaWiki-CORS-Rejection: Origin mismatch' );
+ }
+
+ if ( $varyOrigin ) {
+ $this->getOutput()->addVaryHeader( 'Origin' );
+ }
+
+ return true;
+ }
+
+ /**
+ * Attempt to match an Origin header against a set of rules and a set of exceptions
+ * @param string $value Origin header
+ * @param array $rules Set of wildcard rules
+ * @param array $exceptions Set of wildcard rules
+ * @return bool True if $value matches a rule in $rules and doesn't match
+ * any rules in $exceptions, false otherwise
+ */
+ protected static function matchOrigin( $value, $rules, $exceptions ) {
+ foreach ( $rules as $rule ) {
+ if ( preg_match( self::wildcardToRegex( $rule ), $value ) ) {
+ // Rule matches, check exceptions
+ foreach ( $exceptions as $exc ) {
+ if ( preg_match( self::wildcardToRegex( $exc ), $value ) ) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Attempt to validate the value of Access-Control-Request-Headers against a list
+ * of headers that we allow the follow up request to send.
+ *
+ * @param string $requestedHeaders Comma seperated list of HTTP headers
+ * @return bool True if all requested headers are in the list of allowed headers
+ */
+ protected static function matchRequestedHeaders( $requestedHeaders ) {
+ if ( trim( $requestedHeaders ) === '' ) {
+ return true;
+ }
+ $requestedHeaders = explode( ',', $requestedHeaders );
+ $allowedAuthorHeaders = array_flip( [
+ /* simple headers (see spec) */
+ 'accept',
+ 'accept-language',
+ 'content-language',
+ 'content-type',
+ /* non-authorable headers in XHR, which are however requested by some UAs */
+ 'accept-encoding',
+ 'dnt',
+ 'origin',
+ /* MediaWiki whitelist */
+ 'api-user-agent',
+ ] );
+ foreach ( $requestedHeaders as $rHeader ) {
+ $rHeader = strtolower( trim( $rHeader ) );
+ if ( !isset( $allowedAuthorHeaders[$rHeader] ) ) {
+ wfDebugLog( 'api', 'CORS preflight failed on requested header: ' . $rHeader );
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Helper function to convert wildcard string into a regex
+ * '*' => '.*?'
+ * '?' => '.'
+ *
+ * @param string $wildcard String with wildcards
+ * @return string Regular expression
+ */
+ protected static function wildcardToRegex( $wildcard ) {
+ $wildcard = preg_quote( $wildcard, '/' );
+ $wildcard = str_replace(
+ [ '\*', '\?' ],
+ [ '.*?', '.' ],
+ $wildcard
+ );
+
+ return "/^https?:\/\/$wildcard$/";
+ }
+
+ /**
+ * Send caching headers
+ * @param bool $isError Whether an error response is being output
+ * @since 1.26 added $isError parameter
+ */
+ protected function sendCacheHeaders( $isError ) {
+ $response = $this->getRequest()->response();
+ $out = $this->getOutput();
+
+ $out->addVaryHeader( 'Treat-as-Untrusted' );
+
+ $config = $this->getConfig();
+
+ if ( $config->get( 'VaryOnXFP' ) ) {
+ $out->addVaryHeader( 'X-Forwarded-Proto' );
+ }
+
+ if ( !$isError && $this->mModule &&
+ ( $this->getRequest()->getMethod() === 'GET' || $this->getRequest()->getMethod() === 'HEAD' )
+ ) {
+ $etag = $this->mModule->getConditionalRequestData( 'etag' );
+ if ( $etag !== null ) {
+ $response->header( "ETag: $etag" );
+ }
+ $lastMod = $this->mModule->getConditionalRequestData( 'last-modified' );
+ if ( $lastMod !== null ) {
+ $response->header( 'Last-Modified: ' . wfTimestamp( TS_RFC2822, $lastMod ) );
+ }
+ }
+
+ // The logic should be:
+ // $this->mCacheControl['max-age'] is set?
+ // Use it, the module knows better than our guess.
+ // !$this->mModule || $this->mModule->isWriteMode(), and mCacheMode is private?
+ // Use 0 because we can guess caching is probably the wrong thing to do.
+ // Use $this->getParameter( 'maxage' ), which already defaults to 0.
+ $maxage = 0;
+ if ( isset( $this->mCacheControl['max-age'] ) ) {
+ $maxage = $this->mCacheControl['max-age'];
+ } elseif ( ( $this->mModule && !$this->mModule->isWriteMode() ) ||
+ $this->mCacheMode !== 'private'
+ ) {
+ $maxage = $this->getParameter( 'maxage' );
+ }
+ $privateCache = 'private, must-revalidate, max-age=' . $maxage;
+
+ if ( $this->mCacheMode == 'private' ) {
+ $response->header( "Cache-Control: $privateCache" );
+ return;
+ }
+
+ $useKeyHeader = $config->get( 'UseKeyHeader' );
+ if ( $this->mCacheMode == 'anon-public-user-private' ) {
+ $out->addVaryHeader( 'Cookie' );
+ $response->header( $out->getVaryHeader() );
+ if ( $useKeyHeader ) {
+ $response->header( $out->getKeyHeader() );
+ if ( $out->haveCacheVaryCookies() ) {
+ // Logged in, mark this request private
+ $response->header( "Cache-Control: $privateCache" );
+ return;
+ }
+ // Logged out, send normal public headers below
+ } elseif ( MediaWiki\Session\SessionManager::getGlobalSession()->isPersistent() ) {
+ // Logged in or otherwise has session (e.g. anonymous users who have edited)
+ // Mark request private
+ $response->header( "Cache-Control: $privateCache" );
+
+ return;
+ } // else no Key and anonymous, send public headers below
+ }
+
+ // Send public headers
+ $response->header( $out->getVaryHeader() );
+ if ( $useKeyHeader ) {
+ $response->header( $out->getKeyHeader() );
+ }
+
+ // If nobody called setCacheMaxAge(), use the (s)maxage parameters
+ if ( !isset( $this->mCacheControl['s-maxage'] ) ) {
+ $this->mCacheControl['s-maxage'] = $this->getParameter( 'smaxage' );
+ }
+ if ( !isset( $this->mCacheControl['max-age'] ) ) {
+ $this->mCacheControl['max-age'] = $this->getParameter( 'maxage' );
+ }
+
+ if ( !$this->mCacheControl['s-maxage'] && !$this->mCacheControl['max-age'] ) {
+ // Public cache not requested
+ // Sending a Vary header in this case is harmless, and protects us
+ // against conditional calls of setCacheMaxAge().
+ $response->header( "Cache-Control: $privateCache" );
+
+ return;
+ }
+
+ $this->mCacheControl['public'] = true;
+
+ // Send an Expires header
+ $maxAge = min( $this->mCacheControl['s-maxage'], $this->mCacheControl['max-age'] );
+ $expiryUnixTime = ( $maxAge == 0 ? 1 : time() + $maxAge );
+ $response->header( 'Expires: ' . wfTimestamp( TS_RFC2822, $expiryUnixTime ) );
+
+ // Construct the Cache-Control header
+ $ccHeader = '';
+ $separator = '';
+ foreach ( $this->mCacheControl as $name => $value ) {
+ if ( is_bool( $value ) ) {
+ if ( $value ) {
+ $ccHeader .= $separator . $name;
+ $separator = ', ';
+ }
+ } else {
+ $ccHeader .= $separator . "$name=$value";
+ $separator = ', ';
+ }
+ }
+
+ $response->header( "Cache-Control: $ccHeader" );
+ }
+
+ /**
+ * Create the printer for error output
+ */
+ private function createErrorPrinter() {
+ if ( !isset( $this->mPrinter ) ) {
+ $value = $this->getRequest()->getVal( 'format', self::API_DEFAULT_FORMAT );
+ if ( !$this->mModuleMgr->isDefined( $value, 'format' ) ) {
+ $value = self::API_DEFAULT_FORMAT;
+ }
+ $this->mPrinter = $this->createPrinterByName( $value );
+ }
+
+ // Printer may not be able to handle errors. This is particularly
+ // likely if the module returns something for getCustomPrinter().
+ if ( !$this->mPrinter->canPrintErrors() ) {
+ $this->mPrinter = $this->createPrinterByName( self::API_DEFAULT_FORMAT );
+ }
+ }
+
+ /**
+ * Create an error message for the given exception.
+ *
+ * If an ApiUsageException, errors/warnings will be extracted from the
+ * embedded StatusValue.
+ *
+ * If a base UsageException, the getMessageArray() method will be used to
+ * extract the code and English message for a single error (no warnings).
+ *
+ * Any other exception will be returned with a generic code and wrapper
+ * text around the exception's (presumably English) message as a single
+ * error (no warnings).
+ *
+ * @param Exception $e
+ * @param string $type 'error' or 'warning'
+ * @return ApiMessage[]
+ * @since 1.27
+ */
+ protected function errorMessagesFromException( $e, $type = 'error' ) {
+ $messages = [];
+ if ( $e instanceof ApiUsageException ) {
+ foreach ( $e->getStatusValue()->getErrorsByType( $type ) as $error ) {
+ $messages[] = ApiMessage::create( $error );
+ }
+ } elseif ( $type !== 'error' ) {
+ // None of the rest have any messages for non-error types
+ } elseif ( $e instanceof UsageException ) {
+ // User entered incorrect parameters - generate error response
+ $data = Wikimedia\quietCall( [ $e, 'getMessageArray' ] );
+ $code = $data['code'];
+ $info = $data['info'];
+ unset( $data['code'], $data['info'] );
+ $messages[] = new ApiRawMessage( [ '$1', $info ], $code, $data );
+ } else {
+ // Something is seriously wrong
+ $config = $this->getConfig();
+ $class = preg_replace( '#^Wikimedia\\\Rdbms\\\#', '', get_class( $e ) );
+ $code = 'internal_api_error_' . $class;
+ if ( ( $e instanceof DBQueryError ) && !$config->get( 'ShowSQLErrors' ) ) {
+ $params = [ 'apierror-databaseerror', WebRequest::getRequestId() ];
+ } else {
+ if ( $e instanceof ILocalizedException ) {
+ $msg = $e->getMessageObject();
+ } elseif ( $e instanceof MessageSpecifier ) {
+ $msg = Message::newFromSpecifier( $e );
+ } else {
+ $msg = wfEscapeWikiText( $e->getMessage() );
+ }
+ $params = [ 'apierror-exceptioncaught', WebRequest::getRequestId(), $msg ];
+ }
+ $messages[] = ApiMessage::create( $params, $code );
+ }
+ return $messages;
+ }
+
+ /**
+ * Replace the result data with the information about an exception.
+ * @param Exception $e
+ * @return string[] Error codes
+ */
+ protected function substituteResultWithError( $e ) {
+ $result = $this->getResult();
+ $formatter = $this->getErrorFormatter();
+ $config = $this->getConfig();
+ $errorCodes = [];
+
+ // Remember existing warnings and errors across the reset
+ $errors = $result->getResultData( [ 'errors' ] );
+ $warnings = $result->getResultData( [ 'warnings' ] );
+ $result->reset();
+ if ( $warnings !== null ) {
+ $result->addValue( null, 'warnings', $warnings, ApiResult::NO_SIZE_CHECK );
+ }
+ if ( $errors !== null ) {
+ $result->addValue( null, 'errors', $errors, ApiResult::NO_SIZE_CHECK );
+
+ // Collect the copied error codes for the return value
+ foreach ( $errors as $error ) {
+ if ( isset( $error['code'] ) ) {
+ $errorCodes[$error['code']] = true;
+ }
+ }
+ }
+
+ // Add errors from the exception
+ $modulePath = $e instanceof ApiUsageException ? $e->getModulePath() : null;
+ foreach ( $this->errorMessagesFromException( $e, 'error' ) as $msg ) {
+ $errorCodes[$msg->getApiCode()] = true;
+ $formatter->addError( $modulePath, $msg );
+ }
+ foreach ( $this->errorMessagesFromException( $e, 'warning' ) as $msg ) {
+ $formatter->addWarning( $modulePath, $msg );
+ }
+
+ // Add additional data. Path depends on whether we're in BC mode or not.
+ // Data depends on the type of exception.
+ if ( $formatter instanceof ApiErrorFormatter_BackCompat ) {
+ $path = [ 'error' ];
+ } else {
+ $path = null;
+ }
+ if ( $e instanceof ApiUsageException || $e instanceof UsageException ) {
+ $link = wfExpandUrl( wfScript( 'api' ) );
+ $result->addContentValue(
+ $path,
+ 'docref',
+ trim(
+ $this->msg( 'api-usage-docref', $link )->inLanguage( $formatter->getLanguage() )->text()
+ . ' '
+ . $this->msg( 'api-usage-mailinglist-ref' )->inLanguage( $formatter->getLanguage() )->text()
+ )
+ );
+ } else {
+ if ( $config->get( 'ShowExceptionDetails' ) &&
+ ( !$e instanceof DBError || $config->get( 'ShowDBErrorBacktrace' ) )
+ ) {
+ $result->addContentValue(
+ $path,
+ 'trace',
+ $this->msg( 'api-exception-trace',
+ get_class( $e ),
+ $e->getFile(),
+ $e->getLine(),
+ MWExceptionHandler::getRedactedTraceAsString( $e )
+ )->inLanguage( $formatter->getLanguage() )->text()
+ );
+ }
+ }
+
+ // Add the id and such
+ $this->addRequestedFields( [ 'servedby' ] );
+
+ return array_keys( $errorCodes );
+ }
+
+ /**
+ * Add requested fields to the result
+ * @param string[] $force Which fields to force even if not requested. Accepted values are:
+ * - servedby
+ */
+ protected function addRequestedFields( $force = [] ) {
+ $result = $this->getResult();
+
+ $requestid = $this->getParameter( 'requestid' );
+ if ( $requestid !== null ) {
+ $result->addValue( null, 'requestid', $requestid, ApiResult::NO_SIZE_CHECK );
+ }
+
+ if ( $this->getConfig()->get( 'ShowHostnames' ) && (
+ in_array( 'servedby', $force, true ) || $this->getParameter( 'servedby' )
+ ) ) {
+ $result->addValue( null, 'servedby', wfHostname(), ApiResult::NO_SIZE_CHECK );
+ }
+
+ if ( $this->getParameter( 'curtimestamp' ) ) {
+ $result->addValue( null, 'curtimestamp', wfTimestamp( TS_ISO_8601, time() ),
+ ApiResult::NO_SIZE_CHECK );
+ }
+
+ if ( $this->getParameter( 'responselanginfo' ) ) {
+ $result->addValue( null, 'uselang', $this->getLanguage()->getCode(),
+ ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, 'errorlang', $this->getErrorFormatter()->getLanguage()->getCode(),
+ ApiResult::NO_SIZE_CHECK );
+ }
+ }
+
+ /**
+ * Set up for the execution.
+ * @return array
+ */
+ protected function setupExecuteAction() {
+ $this->addRequestedFields();
+
+ $params = $this->extractRequestParams();
+ $this->mAction = $params['action'];
+
+ return $params;
+ }
+
+ /**
+ * Set up the module for response
+ * @return ApiBase The module that will handle this action
+ * @throws MWException
+ * @throws ApiUsageException
+ */
+ protected function setupModule() {
+ // Instantiate the module requested by the user
+ $module = $this->mModuleMgr->getModule( $this->mAction, 'action' );
+ if ( $module === null ) {
+ // Probably can't happen
+ // @codeCoverageIgnoreStart
+ $this->dieWithError(
+ [ 'apierror-unknownaction', wfEscapeWikiText( $this->mAction ) ], 'unknown_action'
+ );
+ // @codeCoverageIgnoreEnd
+ }
+ $moduleParams = $module->extractRequestParams();
+
+ // Check token, if necessary
+ if ( $module->needsToken() === true ) {
+ throw new MWException(
+ "Module '{$module->getModuleName()}' must be updated for the new token handling. " .
+ 'See documentation for ApiBase::needsToken for details.'
+ );
+ }
+ if ( $module->needsToken() ) {
+ if ( !$module->mustBePosted() ) {
+ throw new MWException(
+ "Module '{$module->getModuleName()}' must require POST to use tokens."
+ );
+ }
+
+ if ( !isset( $moduleParams['token'] ) ) {
+ // Probably can't happen
+ // @codeCoverageIgnoreStart
+ $module->dieWithError( [ 'apierror-missingparam', 'token' ] );
+ // @codeCoverageIgnoreEnd
+ }
+
+ $module->requirePostedParameters( [ 'token' ] );
+
+ if ( !$module->validateToken( $moduleParams['token'], $moduleParams ) ) {
+ $module->dieWithError( 'apierror-badtoken' );
+ }
+ }
+
+ return $module;
+ }
+
+ /**
+ * @return array
+ */
+ private function getMaxLag() {
+ $dbLag = MediaWikiServices::getInstance()->getDBLoadBalancer()->getMaxLag();
+ $lagInfo = [
+ 'host' => $dbLag[0],
+ 'lag' => $dbLag[1],
+ 'type' => 'db'
+ ];
+
+ $jobQueueLagFactor = $this->getConfig()->get( 'JobQueueIncludeInMaxLagFactor' );
+ if ( $jobQueueLagFactor ) {
+ // Turn total number of jobs into seconds by using the configured value
+ $totalJobs = array_sum( JobQueueGroup::singleton()->getQueueSizes() );
+ $jobQueueLag = $totalJobs / (float)$jobQueueLagFactor;
+ if ( $jobQueueLag > $lagInfo['lag'] ) {
+ $lagInfo = [
+ 'host' => wfHostname(), // XXX: Is there a better value that could be used?
+ 'lag' => $jobQueueLag,
+ 'type' => 'jobqueue',
+ 'jobs' => $totalJobs,
+ ];
+ }
+ }
+
+ return $lagInfo;
+ }
+
+ /**
+ * Check the max lag if necessary
+ * @param ApiBase $module Api module being used
+ * @param array $params Array an array containing the request parameters.
+ * @return bool True on success, false should exit immediately
+ */
+ protected function checkMaxLag( $module, $params ) {
+ if ( $module->shouldCheckMaxlag() && isset( $params['maxlag'] ) ) {
+ $maxLag = $params['maxlag'];
+ $lagInfo = $this->getMaxLag();
+ if ( $lagInfo['lag'] > $maxLag ) {
+ $response = $this->getRequest()->response();
+
+ $response->header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) );
+ $response->header( 'X-Database-Lag: ' . intval( $lagInfo['lag'] ) );
+
+ if ( $this->getConfig()->get( 'ShowHostnames' ) ) {
+ $this->dieWithError(
+ [ 'apierror-maxlag', $lagInfo['lag'], $lagInfo['host'] ],
+ 'maxlag',
+ $lagInfo
+ );
+ }
+
+ $this->dieWithError( [ 'apierror-maxlag-generic', $lagInfo['lag'] ], 'maxlag', $lagInfo );
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Check selected RFC 7232 precondition headers
+ *
+ * RFC 7232 envisions a particular model where you send your request to "a
+ * resource", and for write requests that you can read "the resource" by
+ * changing the method to GET. When the API receives a GET request, it
+ * works out even though "the resource" from RFC 7232's perspective might
+ * be many resources from MediaWiki's perspective. But it totally fails for
+ * a POST, since what HTTP sees as "the resource" is probably just
+ * "/api.php" with all the interesting bits in the body.
+ *
+ * Therefore, we only support RFC 7232 precondition headers for GET (and
+ * HEAD). That means we don't need to bother with If-Match and
+ * If-Unmodified-Since since they only apply to modification requests.
+ *
+ * And since we don't support Range, If-Range is ignored too.
+ *
+ * @since 1.26
+ * @param ApiBase $module Api module being used
+ * @return bool True on success, false should exit immediately
+ */
+ protected function checkConditionalRequestHeaders( $module ) {
+ if ( $this->mInternalMode ) {
+ // No headers to check in internal mode
+ return true;
+ }
+
+ if ( $this->getRequest()->getMethod() !== 'GET' && $this->getRequest()->getMethod() !== 'HEAD' ) {
+ // Don't check POSTs
+ return true;
+ }
+
+ $return304 = false;
+
+ $ifNoneMatch = array_diff(
+ $this->getRequest()->getHeader( 'If-None-Match', WebRequest::GETHEADER_LIST ) ?: [],
+ [ '' ]
+ );
+ if ( $ifNoneMatch ) {
+ if ( $ifNoneMatch === [ '*' ] ) {
+ // API responses always "exist"
+ $etag = '*';
+ } else {
+ $etag = $module->getConditionalRequestData( 'etag' );
+ }
+ }
+ if ( $ifNoneMatch && $etag !== null ) {
+ $test = substr( $etag, 0, 2 ) === 'W/' ? substr( $etag, 2 ) : $etag;
+ $match = array_map( function ( $s ) {
+ return substr( $s, 0, 2 ) === 'W/' ? substr( $s, 2 ) : $s;
+ }, $ifNoneMatch );
+ $return304 = in_array( $test, $match, true );
+ } else {
+ $value = trim( $this->getRequest()->getHeader( 'If-Modified-Since' ) );
+
+ // Some old browsers sends sizes after the date, like this:
+ // Wed, 20 Aug 2003 06:51:19 GMT; length=5202
+ // Ignore that.
+ $i = strpos( $value, ';' );
+ if ( $i !== false ) {
+ $value = trim( substr( $value, 0, $i ) );
+ }
+
+ if ( $value !== '' ) {
+ try {
+ $ts = new MWTimestamp( $value );
+ if (
+ // RFC 7231 IMF-fixdate
+ $ts->getTimestamp( TS_RFC2822 ) === $value ||
+ // RFC 850
+ $ts->format( 'l, d-M-y H:i:s' ) . ' GMT' === $value ||
+ // asctime (with and without space-padded day)
+ $ts->format( 'D M j H:i:s Y' ) === $value ||
+ $ts->format( 'D M j H:i:s Y' ) === $value
+ ) {
+ $lastMod = $module->getConditionalRequestData( 'last-modified' );
+ if ( $lastMod !== null ) {
+ // Mix in some MediaWiki modification times
+ $modifiedTimes = [
+ 'page' => $lastMod,
+ 'user' => $this->getUser()->getTouched(),
+ 'epoch' => $this->getConfig()->get( 'CacheEpoch' ),
+ ];
+ if ( $this->getConfig()->get( 'UseSquid' ) ) {
+ // T46570: the core page itself may not change, but resources might
+ $modifiedTimes['sepoch'] = wfTimestamp(
+ TS_MW, time() - $this->getConfig()->get( 'SquidMaxage' )
+ );
+ }
+ Hooks::run( 'OutputPageCheckLastModified', [ &$modifiedTimes, $this->getOutput() ] );
+ $lastMod = max( $modifiedTimes );
+ $return304 = wfTimestamp( TS_MW, $lastMod ) <= $ts->getTimestamp( TS_MW );
+ }
+ }
+ } catch ( TimestampException $e ) {
+ // Invalid timestamp, ignore it
+ }
+ }
+ }
+
+ if ( $return304 ) {
+ $this->getRequest()->response()->statusHeader( 304 );
+
+ // Avoid outputting the compressed representation of a zero-length body
+ Wikimedia\suppressWarnings();
+ ini_set( 'zlib.output_compression', 0 );
+ Wikimedia\restoreWarnings();
+ wfClearOutputBuffers();
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Check for sufficient permissions to execute
+ * @param ApiBase $module An Api module
+ */
+ protected function checkExecutePermissions( $module ) {
+ $user = $this->getUser();
+ if ( $module->isReadMode() && !User::isEveryoneAllowed( 'read' ) &&
+ !$user->isAllowed( 'read' )
+ ) {
+ $this->dieWithError( 'apierror-readapidenied' );
+ }
+
+ if ( $module->isWriteMode() ) {
+ if ( !$this->mEnableWrite ) {
+ $this->dieWithError( 'apierror-noapiwrite' );
+ } elseif ( !$user->isAllowed( 'writeapi' ) ) {
+ $this->dieWithError( 'apierror-writeapidenied' );
+ } elseif ( $this->getRequest()->getHeader( 'Promise-Non-Write-API-Action' ) ) {
+ $this->dieWithError( 'apierror-promised-nonwrite-api' );
+ }
+
+ $this->checkReadOnly( $module );
+ }
+
+ // Allow extensions to stop execution for arbitrary reasons.
+ $message = 'hookaborted';
+ if ( !Hooks::run( 'ApiCheckCanExecute', [ $module, $user, &$message ] ) ) {
+ $this->dieWithError( $message );
+ }
+ }
+
+ /**
+ * Check if the DB is read-only for this user
+ * @param ApiBase $module An Api module
+ */
+ protected function checkReadOnly( $module ) {
+ if ( wfReadOnly() ) {
+ $this->dieReadOnly();
+ }
+
+ if ( $module->isWriteMode()
+ && $this->getUser()->isBot()
+ && MediaWikiServices::getInstance()->getDBLoadBalancer()->getServerCount() > 1
+ ) {
+ $this->checkBotReadOnly();
+ }
+ }
+
+ /**
+ * Check whether we are readonly for bots
+ */
+ private function checkBotReadOnly() {
+ // Figure out how many servers have passed the lag threshold
+ $numLagged = 0;
+ $lagLimit = $this->getConfig()->get( 'APIMaxLagThreshold' );
+ $laggedServers = [];
+ $loadBalancer = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ foreach ( $loadBalancer->getLagTimes() as $serverIndex => $lag ) {
+ if ( $lag > $lagLimit ) {
+ ++$numLagged;
+ $laggedServers[] = $loadBalancer->getServerName( $serverIndex ) . " ({$lag}s)";
+ }
+ }
+
+ // If a majority of replica DBs are too lagged then disallow writes
+ $replicaCount = $loadBalancer->getServerCount() - 1;
+ if ( $numLagged >= ceil( $replicaCount / 2 ) ) {
+ $laggedServers = implode( ', ', $laggedServers );
+ wfDebugLog(
+ 'api-readonly',
+ "Api request failed as read only because the following DBs are lagged: $laggedServers"
+ );
+
+ $this->dieWithError(
+ 'readonly_lag',
+ 'readonly',
+ [ 'readonlyreason' => "Waiting for $numLagged lagged database(s)" ]
+ );
+ }
+ }
+
+ /**
+ * Check asserts of the user's rights
+ * @param array $params
+ */
+ protected function checkAsserts( $params ) {
+ if ( isset( $params['assert'] ) ) {
+ $user = $this->getUser();
+ switch ( $params['assert'] ) {
+ case 'user':
+ if ( $user->isAnon() ) {
+ $this->dieWithError( 'apierror-assertuserfailed' );
+ }
+ break;
+ case 'bot':
+ if ( !$user->isAllowed( 'bot' ) ) {
+ $this->dieWithError( 'apierror-assertbotfailed' );
+ }
+ break;
+ }
+ }
+ if ( isset( $params['assertuser'] ) ) {
+ $assertUser = User::newFromName( $params['assertuser'], false );
+ if ( !$assertUser || !$this->getUser()->equals( $assertUser ) ) {
+ $this->dieWithError(
+ [ 'apierror-assertnameduserfailed', wfEscapeWikiText( $params['assertuser'] ) ]
+ );
+ }
+ }
+ }
+
+ /**
+ * Check POST for external response and setup result printer
+ * @param ApiBase $module An Api module
+ * @param array $params An array with the request parameters
+ */
+ protected function setupExternalResponse( $module, $params ) {
+ $request = $this->getRequest();
+ if ( !$request->wasPosted() && $module->mustBePosted() ) {
+ // Module requires POST. GET request might still be allowed
+ // if $wgDebugApi is true, otherwise fail.
+ $this->dieWithErrorOrDebug( [ 'apierror-mustbeposted', $this->mAction ] );
+ }
+
+ // See if custom printer is used
+ $this->mPrinter = $module->getCustomPrinter();
+ if ( is_null( $this->mPrinter ) ) {
+ // Create an appropriate printer
+ $this->mPrinter = $this->createPrinterByName( $params['format'] );
+ }
+
+ if ( $request->getProtocol() === 'http' && (
+ $request->getSession()->shouldForceHTTPS() ||
+ ( $this->getUser()->isLoggedIn() &&
+ $this->getUser()->requiresHTTPS() )
+ ) ) {
+ $this->addDeprecation( 'apiwarn-deprecation-httpsexpected', 'https-expected' );
+ }
+ }
+
+ /**
+ * Execute the actual module, without any error handling
+ */
+ protected function executeAction() {
+ $params = $this->setupExecuteAction();
+ $module = $this->setupModule();
+ $this->mModule = $module;
+
+ if ( !$this->mInternalMode ) {
+ $this->setRequestExpectations( $module );
+ }
+
+ $this->checkExecutePermissions( $module );
+
+ if ( !$this->checkMaxLag( $module, $params ) ) {
+ return;
+ }
+
+ if ( !$this->checkConditionalRequestHeaders( $module ) ) {
+ return;
+ }
+
+ if ( !$this->mInternalMode ) {
+ $this->setupExternalResponse( $module, $params );
+ }
+
+ $this->checkAsserts( $params );
+
+ // Execute
+ $module->execute();
+ Hooks::run( 'APIAfterExecute', [ &$module ] );
+
+ $this->reportUnusedParams();
+
+ if ( !$this->mInternalMode ) {
+ // append Debug information
+ MWDebug::appendDebugInfoToApiResult( $this->getContext(), $this->getResult() );
+
+ // Print result data
+ $this->printResult();
+ }
+ }
+
+ /**
+ * Set database connection, query, and write expectations given this module request
+ * @param ApiBase $module
+ */
+ protected function setRequestExpectations( ApiBase $module ) {
+ $limits = $this->getConfig()->get( 'TrxProfilerLimits' );
+ $trxProfiler = Profiler::instance()->getTransactionProfiler();
+ $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
+ if ( $this->getRequest()->hasSafeMethod() ) {
+ $trxProfiler->setExpectations( $limits['GET'], __METHOD__ );
+ } elseif ( $this->getRequest()->wasPosted() && !$module->isWriteMode() ) {
+ $trxProfiler->setExpectations( $limits['POST-nonwrite'], __METHOD__ );
+ $this->getRequest()->markAsSafeRequest();
+ } else {
+ $trxProfiler->setExpectations( $limits['POST'], __METHOD__ );
+ }
+ }
+
+ /**
+ * Log the preceding request
+ * @param float $time Time in seconds
+ * @param Exception $e Exception caught while processing the request
+ */
+ protected function logRequest( $time, $e = null ) {
+ $request = $this->getRequest();
+ $logCtx = [
+ 'ts' => time(),
+ 'ip' => $request->getIP(),
+ 'userAgent' => $this->getUserAgent(),
+ 'wiki' => wfWikiID(),
+ 'timeSpentBackend' => (int)round( $time * 1000 ),
+ 'hadError' => $e !== null,
+ 'errorCodes' => [],
+ 'params' => [],
+ ];
+
+ if ( $e ) {
+ foreach ( $this->errorMessagesFromException( $e ) as $msg ) {
+ $logCtx['errorCodes'][] = $msg->getApiCode();
+ }
+ }
+
+ // Construct space separated message for 'api' log channel
+ $msg = "API {$request->getMethod()} " .
+ wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) .
+ " {$logCtx['ip']} " .
+ "T={$logCtx['timeSpentBackend']}ms";
+
+ $sensitive = array_flip( $this->getSensitiveParams() );
+ foreach ( $this->getParamsUsed() as $name ) {
+ $value = $request->getVal( $name );
+ if ( $value === null ) {
+ continue;
+ }
+
+ if ( isset( $sensitive[$name] ) ) {
+ $value = '[redacted]';
+ $encValue = '[redacted]';
+ } elseif ( strlen( $value ) > 256 ) {
+ $value = substr( $value, 0, 256 );
+ $encValue = $this->encodeRequestLogValue( $value ) . '[...]';
+ } else {
+ $encValue = $this->encodeRequestLogValue( $value );
+ }
+
+ $logCtx['params'][$name] = $value;
+ $msg .= " {$name}={$encValue}";
+ }
+
+ wfDebugLog( 'api', $msg, 'private' );
+ // ApiAction channel is for structured data consumers
+ wfDebugLog( 'ApiAction', '', 'private', $logCtx );
+ }
+
+ /**
+ * Encode a value in a format suitable for a space-separated log line.
+ * @param string $s
+ * @return string
+ */
+ protected function encodeRequestLogValue( $s ) {
+ static $table;
+ if ( !$table ) {
+ $chars = ';@$!*(),/:';
+ $numChars = strlen( $chars );
+ for ( $i = 0; $i < $numChars; $i++ ) {
+ $table[rawurlencode( $chars[$i] )] = $chars[$i];
+ }
+ }
+
+ return strtr( rawurlencode( $s ), $table );
+ }
+
+ /**
+ * Get the request parameters used in the course of the preceding execute() request
+ * @return array
+ */
+ protected function getParamsUsed() {
+ return array_keys( $this->mParamsUsed );
+ }
+
+ /**
+ * Mark parameters as used
+ * @param string|string[] $params
+ */
+ public function markParamsUsed( $params ) {
+ $this->mParamsUsed += array_fill_keys( (array)$params, true );
+ }
+
+ /**
+ * Get the request parameters that should be considered sensitive
+ * @since 1.29
+ * @return array
+ */
+ protected function getSensitiveParams() {
+ return array_keys( $this->mParamsSensitive );
+ }
+
+ /**
+ * Mark parameters as sensitive
+ * @since 1.29
+ * @param string|string[] $params
+ */
+ public function markParamsSensitive( $params ) {
+ $this->mParamsSensitive += array_fill_keys( (array)$params, true );
+ }
+
+ /**
+ * Get a request value, and register the fact that it was used, for logging.
+ * @param string $name
+ * @param string|null $default
+ * @return string|null
+ */
+ public function getVal( $name, $default = null ) {
+ $this->mParamsUsed[$name] = true;
+
+ $ret = $this->getRequest()->getVal( $name );
+ if ( $ret === null ) {
+ if ( $this->getRequest()->getArray( $name ) !== null ) {
+ // See T12262 for why we don't just implode( '|', ... ) the
+ // array.
+ $this->addWarning( [ 'apiwarn-unsupportedarray', $name ] );
+ }
+ $ret = $default;
+ }
+ return $ret;
+ }
+
+ /**
+ * Get a boolean request value, and register the fact that the parameter
+ * was used, for logging.
+ * @param string $name
+ * @return bool
+ */
+ public function getCheck( $name ) {
+ return $this->getVal( $name, null ) !== null;
+ }
+
+ /**
+ * Get a request upload, and register the fact that it was used, for logging.
+ *
+ * @since 1.21
+ * @param string $name Parameter name
+ * @return WebRequestUpload
+ */
+ public function getUpload( $name ) {
+ $this->mParamsUsed[$name] = true;
+
+ return $this->getRequest()->getUpload( $name );
+ }
+
+ /**
+ * Report unused parameters, so the client gets a hint in case it gave us parameters we don't know,
+ * for example in case of spelling mistakes or a missing 'g' prefix for generators.
+ */
+ protected function reportUnusedParams() {
+ $paramsUsed = $this->getParamsUsed();
+ $allParams = $this->getRequest()->getValueNames();
+
+ if ( !$this->mInternalMode ) {
+ // Printer has not yet executed; don't warn that its parameters are unused
+ $printerParams = $this->mPrinter->encodeParamName(
+ array_keys( $this->mPrinter->getFinalParams() ?: [] )
+ );
+ $unusedParams = array_diff( $allParams, $paramsUsed, $printerParams );
+ } else {
+ $unusedParams = array_diff( $allParams, $paramsUsed );
+ }
+
+ if ( count( $unusedParams ) ) {
+ $this->addWarning( [
+ 'apierror-unrecognizedparams',
+ Message::listParam( array_map( 'wfEscapeWikiText', $unusedParams ), 'comma' ),
+ count( $unusedParams )
+ ] );
+ }
+ }
+
+ /**
+ * Print results using the current printer
+ *
+ * @param int $httpCode HTTP status code, or 0 to not change
+ */
+ protected function printResult( $httpCode = 0 ) {
+ if ( $this->getConfig()->get( 'DebugAPI' ) !== false ) {
+ $this->addWarning( 'apiwarn-wgDebugAPI' );
+ }
+
+ $printer = $this->mPrinter;
+ $printer->initPrinter( false );
+ if ( $httpCode ) {
+ $printer->setHttpStatus( $httpCode );
+ }
+ $printer->execute();
+ $printer->closePrinter();
+ }
+
+ /**
+ * @return bool
+ */
+ public function isReadMode() {
+ return false;
+ }
+
+ /**
+ * See ApiBase for description.
+ *
+ * @return array
+ */
+ public function getAllowedParams() {
+ return [
+ 'action' => [
+ ApiBase::PARAM_DFLT => 'help',
+ ApiBase::PARAM_TYPE => 'submodule',
+ ],
+ 'format' => [
+ ApiBase::PARAM_DFLT => self::API_DEFAULT_FORMAT,
+ ApiBase::PARAM_TYPE => 'submodule',
+ ],
+ 'maxlag' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'smaxage' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_DFLT => 0
+ ],
+ 'maxage' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_DFLT => 0
+ ],
+ 'assert' => [
+ ApiBase::PARAM_TYPE => [ 'user', 'bot' ]
+ ],
+ 'assertuser' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'requestid' => null,
+ 'servedby' => false,
+ 'curtimestamp' => false,
+ 'responselanginfo' => false,
+ 'origin' => null,
+ 'uselang' => [
+ ApiBase::PARAM_DFLT => self::API_DEFAULT_USELANG,
+ ],
+ 'errorformat' => [
+ ApiBase::PARAM_TYPE => [ 'plaintext', 'wikitext', 'html', 'raw', 'none', 'bc' ],
+ ApiBase::PARAM_DFLT => 'bc',
+ ],
+ 'errorlang' => [
+ ApiBase::PARAM_DFLT => 'uselang',
+ ],
+ 'errorsuselocal' => [
+ ApiBase::PARAM_DFLT => false,
+ ],
+ ];
+ }
+
+ /** @inheritDoc */
+ protected function getExamplesMessages() {
+ return [
+ 'action=help'
+ => 'apihelp-help-example-main',
+ 'action=help&recursivesubmodules=1'
+ => 'apihelp-help-example-recursive',
+ ];
+ }
+
+ public function modifyHelp( array &$help, array $options, array &$tocData ) {
+ // Wish PHP had an "array_insert_before". Instead, we have to manually
+ // reindex the array to get 'permissions' in the right place.
+ $oldHelp = $help;
+ $help = [];
+ foreach ( $oldHelp as $k => $v ) {
+ if ( $k === 'submodules' ) {
+ $help['permissions'] = '';
+ }
+ $help[$k] = $v;
+ }
+ $help['datatypes'] = '';
+ $help['credits'] = '';
+
+ // Fill 'permissions'
+ $help['permissions'] .= Html::openElement( 'div',
+ [ 'class' => 'apihelp-block apihelp-permissions' ] );
+ $m = $this->msg( 'api-help-permissions' );
+ if ( !$m->isDisabled() ) {
+ $help['permissions'] .= Html::rawElement( 'div', [ 'class' => 'apihelp-block-head' ],
+ $m->numParams( count( self::$mRights ) )->parse()
+ );
+ }
+ $help['permissions'] .= Html::openElement( 'dl' );
+ foreach ( self::$mRights as $right => $rightMsg ) {
+ $help['permissions'] .= Html::element( 'dt', null, $right );
+
+ $rightMsg = $this->msg( $rightMsg['msg'], $rightMsg['params'] )->parse();
+ $help['permissions'] .= Html::rawElement( 'dd', null, $rightMsg );
+
+ $groups = array_map( function ( $group ) {
+ return $group == '*' ? 'all' : $group;
+ }, User::getGroupsWithPermission( $right ) );
+
+ $help['permissions'] .= Html::rawElement( 'dd', null,
+ $this->msg( 'api-help-permissions-granted-to' )
+ ->numParams( count( $groups ) )
+ ->params( Message::listParam( $groups ) )
+ ->parse()
+ );
+ }
+ $help['permissions'] .= Html::closeElement( 'dl' );
+ $help['permissions'] .= Html::closeElement( 'div' );
+
+ // Fill 'datatypes' and 'credits', if applicable
+ if ( empty( $options['nolead'] ) ) {
+ $level = $options['headerlevel'];
+ $tocnumber = &$options['tocnumber'];
+
+ $header = $this->msg( 'api-help-datatypes-header' )->parse();
+
+ $id = Sanitizer::escapeIdForAttribute( 'main/datatypes', Sanitizer::ID_PRIMARY );
+ $idFallback = Sanitizer::escapeIdForAttribute( 'main/datatypes', Sanitizer::ID_FALLBACK );
+ $headline = Linker::makeHeadline( min( 6, $level ),
+ ' class="apihelp-header">',
+ $id,
+ $header,
+ '',
+ $idFallback
+ );
+ // Ensure we have a sane anchor
+ if ( $id !== 'main/datatypes' && $idFallback !== 'main/datatypes' ) {
+ $headline = '<div id="main/datatypes"></div>' . $headline;
+ }
+ $help['datatypes'] .= $headline;
+ $help['datatypes'] .= $this->msg( 'api-help-datatypes' )->parseAsBlock();
+ if ( !isset( $tocData['main/datatypes'] ) ) {
+ $tocnumber[$level]++;
+ $tocData['main/datatypes'] = [
+ 'toclevel' => count( $tocnumber ),
+ 'level' => $level,
+ 'anchor' => 'main/datatypes',
+ 'line' => $header,
+ 'number' => implode( '.', $tocnumber ),
+ 'index' => false,
+ ];
+ }
+
+ $header = $this->msg( 'api-credits-header' )->parse();
+ $id = Sanitizer::escapeIdForAttribute( 'main/credits', Sanitizer::ID_PRIMARY );
+ $idFallback = Sanitizer::escapeIdForAttribute( 'main/credits', Sanitizer::ID_FALLBACK );
+ $headline = Linker::makeHeadline( min( 6, $level ),
+ ' class="apihelp-header">',
+ $id,
+ $header,
+ '',
+ $idFallback
+ );
+ // Ensure we have a sane anchor
+ if ( $id !== 'main/credits' && $idFallback !== 'main/credits' ) {
+ $headline = '<div id="main/credits"></div>' . $headline;
+ }
+ $help['credits'] .= $headline;
+ $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock();
+ if ( !isset( $tocData['main/credits'] ) ) {
+ $tocnumber[$level]++;
+ $tocData['main/credits'] = [
+ 'toclevel' => count( $tocnumber ),
+ 'level' => $level,
+ 'anchor' => 'main/credits',
+ 'line' => $header,
+ 'number' => implode( '.', $tocnumber ),
+ 'index' => false,
+ ];
+ }
+ }
+ }
+
+ private $mCanApiHighLimits = null;
+
+ /**
+ * Check whether the current user is allowed to use high limits
+ * @return bool
+ */
+ public function canApiHighLimits() {
+ if ( !isset( $this->mCanApiHighLimits ) ) {
+ $this->mCanApiHighLimits = $this->getUser()->isAllowed( 'apihighlimits' );
+ }
+
+ return $this->mCanApiHighLimits;
+ }
+
+ /**
+ * Overrides to return this instance's module manager.
+ * @return ApiModuleManager
+ */
+ public function getModuleManager() {
+ return $this->mModuleMgr;
+ }
+
+ /**
+ * Fetches the user agent used for this request
+ *
+ * The value will be the combination of the 'Api-User-Agent' header (if
+ * any) and the standard User-Agent header (if any).
+ *
+ * @return string
+ */
+ public function getUserAgent() {
+ return trim(
+ $this->getRequest()->getHeader( 'Api-user-agent' ) . ' ' .
+ $this->getRequest()->getHeader( 'User-agent' )
+ );
+ }
+}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
diff --git a/www/wiki/includes/api/ApiManageTags.php b/www/wiki/includes/api/ApiManageTags.php
new file mode 100644
index 00000000..42de1610
--- /dev/null
+++ b/www/wiki/includes/api/ApiManageTags.php
@@ -0,0 +1,130 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ * @since 1.25
+ */
+class ApiManageTags extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $user = $this->getUser();
+
+ // make sure the user is allowed
+ if ( $params['operation'] !== 'delete'
+ && !$this->getUser()->isAllowed( 'managechangetags' )
+ ) {
+ $this->dieWithError( 'tags-manage-no-permission', 'permissiondenied' );
+ } elseif ( !$this->getUser()->isAllowed( 'deletechangetags' ) ) {
+ $this->dieWithError( 'tags-delete-no-permission', 'permissiondenied' );
+ }
+
+ // Check if user can add the log entry tags which were requested
+ if ( $params['tags'] ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ $result = $this->getResult();
+ $funcName = "{$params['operation']}TagWithChecks";
+ $status = ChangeTags::$funcName(
+ $params['tag'],
+ $params['reason'],
+ $user,
+ $params['ignorewarnings'],
+ $params['tags'] ?: []
+ );
+
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+
+ $ret = [
+ 'operation' => $params['operation'],
+ 'tag' => $params['tag'],
+ ];
+ if ( !$status->isGood() ) {
+ $ret['warnings'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'warning' );
+ }
+ $ret['success'] = $status->value !== null;
+ if ( $ret['success'] ) {
+ $ret['logid'] = $status->value;
+ }
+
+ $result->addValue( null, $this->getModuleName(), $ret );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'operation' => [
+ ApiBase::PARAM_TYPE => [ 'create', 'delete', 'activate', 'deactivate' ],
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'tag' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'reason' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'ignorewarnings' => [
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DFLT => false,
+ ],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=managetags&operation=create&tag=spam&reason=For+use+in+edit+patrolling&token=123ABC'
+ => 'apihelp-managetags-example-create',
+ 'action=managetags&operation=delete&tag=vandlaism&reason=Misspelt&token=123ABC'
+ => 'apihelp-managetags-example-delete',
+ 'action=managetags&operation=activate&tag=spam&reason=For+use+in+edit+patrolling&token=123ABC'
+ => 'apihelp-managetags-example-activate',
+ 'action=managetags&operation=deactivate&tag=spam&reason=No+longer+required&token=123ABC'
+ => 'apihelp-managetags-example-deactivate',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tag_management';
+ }
+}
diff --git a/www/wiki/includes/api/ApiMergeHistory.php b/www/wiki/includes/api/ApiMergeHistory.php
new file mode 100644
index 00000000..86b44270
--- /dev/null
+++ b/www/wiki/includes/api/ApiMergeHistory.php
@@ -0,0 +1,138 @@
+<?php
+/**
+ * Copyright © 2015 Geoffrey Mon <geofbot@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API Module to merge page histories
+ * @ingroup API
+ */
+class ApiMergeHistory extends ApiBase {
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $params = $this->extractRequestParams();
+
+ $this->requireOnlyOneParameter( $params, 'from', 'fromid' );
+ $this->requireOnlyOneParameter( $params, 'to', 'toid' );
+
+ // Get page objects (nonexistant pages get caught in MergeHistory::isValidMerge())
+ if ( isset( $params['from'] ) ) {
+ $fromTitle = Title::newFromText( $params['from'] );
+ if ( !$fromTitle || $fromTitle->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['from'] ) ] );
+ }
+ } elseif ( isset( $params['fromid'] ) ) {
+ $fromTitle = Title::newFromID( $params['fromid'] );
+ if ( !$fromTitle ) {
+ $this->dieWithError( [ 'apierror-nosuchpageid', $params['fromid'] ] );
+ }
+ }
+
+ if ( isset( $params['to'] ) ) {
+ $toTitle = Title::newFromText( $params['to'] );
+ if ( !$toTitle || $toTitle->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['to'] ) ] );
+ }
+ } elseif ( isset( $params['toid'] ) ) {
+ $toTitle = Title::newFromID( $params['toid'] );
+ if ( !$toTitle ) {
+ $this->dieWithError( [ 'apierror-nosuchpageid', $params['toid'] ] );
+ }
+ }
+
+ $reason = $params['reason'];
+ $timestamp = $params['timestamp'];
+
+ // Merge!
+ $status = $this->merge( $fromTitle, $toTitle, $timestamp, $reason );
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+
+ $r = [
+ 'from' => $fromTitle->getPrefixedText(),
+ 'to' => $toTitle->getPrefixedText(),
+ 'timestamp' => wfTimestamp( TS_ISO_8601, $params['timestamp'] ),
+ 'reason' => $params['reason']
+ ];
+ $result = $this->getResult();
+
+ $result->addValue( null, $this->getModuleName(), $r );
+ }
+
+ /**
+ * @param Title $from
+ * @param Title $to
+ * @param string $timestamp
+ * @param string $reason
+ * @return Status
+ */
+ protected function merge( Title $from, Title $to, $timestamp, $reason ) {
+ $mh = new MergeHistory( $from, $to, $timestamp );
+
+ return $mh->merge( $this->getUser(), $reason );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'from' => null,
+ 'fromid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'to' => null,
+ 'toid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'timestamp' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'reason' => '',
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=mergehistory&from=Oldpage&to=Newpage&token=123ABC&' .
+ 'reason=Reason'
+ => 'apihelp-mergehistory-example-merge',
+ 'action=mergehistory&from=Oldpage&to=Newpage&token=123ABC&' .
+ 'reason=Reason&timestamp=2015-12-31T04%3A37%3A41Z' // TODO
+ => 'apihelp-mergehistory-example-merge-timestamp',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Mergehistory';
+ }
+}
diff --git a/www/wiki/includes/api/ApiMessage.php b/www/wiki/includes/api/ApiMessage.php
new file mode 100644
index 00000000..33471287
--- /dev/null
+++ b/www/wiki/includes/api/ApiMessage.php
@@ -0,0 +1,301 @@
+<?php
+/**
+ * Defines an interface for messages with additional machine-readable data for
+ * use by the API, and provides concrete implementations of that interface.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Interface for messages with machine-readable data for use by the API
+ *
+ * The idea is that it's a Message that has some extra data for the API to use when interpreting it
+ * as an error (or, in the future, as a warning). Internals of MediaWiki often use messages (or
+ * message keys, or Status objects containing messages) to pass information about errors to the user
+ * (see e.g. Title::getUserPermissionsErrors()) and the API has to make do with that.
+ *
+ * @since 1.25
+ * @note This interface exists to work around PHP's inheritance, so ApiMessage
+ * can extend Message and ApiRawMessage can extend RawMessage while still
+ * allowing an instanceof check for a Message object including this
+ * functionality. If for some reason you feel the need to implement this
+ * interface on some other class, that class must also implement all the
+ * public methods the Message class provides (not just those from
+ * MessageSpecifier, which as written is fairly useless).
+ * @ingroup API
+ */
+interface IApiMessage extends MessageSpecifier {
+ /**
+ * Returns a machine-readable code for use by the API
+ *
+ * If no code was specifically set, the message key is used as the code
+ * after removing "apiwarn-" or "apierror-" prefixes and applying
+ * backwards-compatibility mappings.
+ *
+ * @return string
+ */
+ public function getApiCode();
+
+ /**
+ * Returns additional machine-readable data about the error condition
+ * @return array
+ */
+ public function getApiData();
+
+ /**
+ * Sets the machine-readable code for use by the API
+ * @param string|null $code If null, uses the default (see self::getApiCode())
+ * @param array|null $data If non-null, passed to self::setApiData()
+ */
+ public function setApiCode( $code, array $data = null );
+
+ /**
+ * Sets additional machine-readable data about the error condition
+ * @param array $data
+ */
+ public function setApiData( array $data );
+}
+
+/**
+ * Trait to implement the IApiMessage interface for Message subclasses
+ * @since 1.27
+ * @ingroup API
+ */
+trait ApiMessageTrait {
+
+ /**
+ * Compatibility code mappings for various MW messages.
+ * @todo Ideally anything relying on this should be changed to use ApiMessage.
+ */
+ protected static $messageMap = [
+ 'actionthrottledtext' => 'ratelimited',
+ 'autoblockedtext' => 'autoblocked',
+ 'badaccess-group0' => 'permissiondenied',
+ 'badaccess-groups' => 'permissiondenied',
+ 'badipaddress' => 'invalidip',
+ 'blankpage' => 'emptypage',
+ 'blockedtext' => 'blocked',
+ 'cannotdelete' => 'cantdelete',
+ 'cannotundelete' => 'cantundelete',
+ 'cantmove-titleprotected' => 'protectedtitle',
+ 'cantrollback' => 'onlyauthor',
+ 'confirmedittext' => 'confirmemail',
+ 'content-not-allowed-here' => 'contentnotallowedhere',
+ 'deleteprotected' => 'cantedit',
+ 'delete-toobig' => 'bigdelete',
+ 'edit-conflict' => 'editconflict',
+ 'imagenocrossnamespace' => 'nonfilenamespace',
+ 'imagetypemismatch' => 'filetypemismatch',
+ 'importbadinterwiki' => 'badinterwiki',
+ 'importcantopen' => 'cantopenfile',
+ 'import-noarticle' => 'badinterwiki',
+ 'importnofile' => 'nofile',
+ 'importuploaderrorpartial' => 'partialupload',
+ 'importuploaderrorsize' => 'filetoobig',
+ 'importuploaderrortemp' => 'notempdir',
+ 'ipb_already_blocked' => 'alreadyblocked',
+ 'ipb_blocked_as_range' => 'blockedasrange',
+ 'ipb_cant_unblock' => 'cantunblock',
+ 'ipb_expiry_invalid' => 'invalidexpiry',
+ 'ip_range_invalid' => 'invalidrange',
+ 'mailnologin' => 'cantsend',
+ 'markedaspatrollederror-noautopatrol' => 'noautopatrol',
+ 'movenologintext' => 'cantmove-anon',
+ 'movenotallowed' => 'cantmove',
+ 'movenotallowedfile' => 'cantmovefile',
+ 'namespaceprotected' => 'protectednamespace',
+ 'nocreate-loggedin' => 'cantcreate',
+ 'nocreatetext' => 'cantcreate-anon',
+ 'noname' => 'invaliduser',
+ 'nosuchusershort' => 'nosuchuser',
+ 'notanarticle' => 'missingtitle',
+ 'nouserspecified' => 'invaliduser',
+ 'ns-specialprotected' => 'unsupportednamespace',
+ 'protect-cantedit' => 'cantedit',
+ 'protectedinterface' => 'protectednamespace-interface',
+ 'protectedpagetext' => 'protectedpage',
+ 'range_block_disabled' => 'rangedisabled',
+ 'rcpatroldisabled' => 'patroldisabled',
+ 'readonlytext' => 'readonly',
+ 'sessionfailure' => 'badtoken',
+ 'systemblockedtext' => 'blocked',
+ 'titleprotected' => 'protectedtitle',
+ 'undo-failure' => 'undofailure',
+ 'userrights-nodatabase' => 'nosuchdatabase',
+ 'userrights-no-interwiki' => 'nointerwikiuserrights',
+ ];
+
+ protected $apiCode = null;
+ protected $apiData = [];
+
+ public function getApiCode() {
+ if ( $this->apiCode === null ) {
+ $key = $this->getKey();
+ if ( isset( self::$messageMap[$key] ) ) {
+ $this->apiCode = self::$messageMap[$key];
+ } elseif ( $key === 'apierror-missingparam' ) {
+ /// @todo: Kill this case along with ApiBase::$messageMap
+ $this->apiCode = 'no' . $this->getParams()[0];
+ } elseif ( substr( $key, 0, 8 ) === 'apiwarn-' ) {
+ $this->apiCode = substr( $key, 8 );
+ } elseif ( substr( $key, 0, 9 ) === 'apierror-' ) {
+ $this->apiCode = substr( $key, 9 );
+ } else {
+ $this->apiCode = $key;
+ }
+ }
+ return $this->apiCode;
+ }
+
+ public function setApiCode( $code, array $data = null ) {
+ if ( $code !== null && !( is_string( $code ) && $code !== '' ) ) {
+ throw new InvalidArgumentException( "Invalid code \"$code\"" );
+ }
+
+ $this->apiCode = $code;
+ if ( $data !== null ) {
+ $this->setApiData( $data );
+ }
+ }
+
+ public function getApiData() {
+ return $this->apiData;
+ }
+
+ public function setApiData( array $data ) {
+ $this->apiData = $data;
+ }
+
+ public function serialize() {
+ return serialize( [
+ 'parent' => parent::serialize(),
+ 'apiCode' => $this->apiCode,
+ 'apiData' => $this->apiData,
+ ] );
+ }
+
+ public function unserialize( $serialized ) {
+ $data = unserialize( $serialized );
+ parent::unserialize( $data['parent'] );
+ $this->apiCode = $data['apiCode'];
+ $this->apiData = $data['apiData'];
+ }
+}
+
+/**
+ * Extension of Message implementing IApiMessage
+ * @since 1.25
+ * @ingroup API
+ */
+class ApiMessage extends Message implements IApiMessage {
+ use ApiMessageTrait;
+
+ /**
+ * Create an IApiMessage for the message
+ *
+ * This returns $msg if it's an IApiMessage, calls 'new ApiRawMessage' if
+ * $msg is a RawMessage, or calls 'new ApiMessage' in all other cases.
+ *
+ * @param Message|RawMessage|array|string $msg
+ * @param string|null $code
+ * @param array|null $data
+ * @return IApiMessage
+ */
+ public static function create( $msg, $code = null, array $data = null ) {
+ if ( is_array( $msg ) ) {
+ // From StatusValue
+ if ( isset( $msg['message'] ) ) {
+ if ( isset( $msg['params'] ) ) {
+ $msg = array_merge( [ $msg['message'] ], $msg['params'] );
+ } else {
+ $msg = [ $msg['message'] ];
+ }
+ }
+
+ // Weirdness that comes in sometimes, including the above
+ if ( $msg[0] instanceof MessageSpecifier ) {
+ $msg = $msg[0];
+ }
+ }
+
+ if ( $msg instanceof IApiMessage ) {
+ return $msg;
+ } elseif ( $msg instanceof RawMessage ) {
+ return new ApiRawMessage( $msg, $code, $data );
+ } else {
+ return new ApiMessage( $msg, $code, $data );
+ }
+ }
+
+ /**
+ * @param Message|string|array $msg
+ * - Message: is cloned
+ * - array: first element is $key, rest are $params to Message::__construct
+ * - string: passed to Message::__construct
+ * @param string|null $code
+ * @param array|null $data
+ */
+ public function __construct( $msg, $code = null, array $data = null ) {
+ if ( $msg instanceof Message ) {
+ foreach ( get_class_vars( get_class( $this ) ) as $key => $value ) {
+ if ( isset( $msg->$key ) ) {
+ $this->$key = $msg->$key;
+ }
+ }
+ } elseif ( is_array( $msg ) ) {
+ $key = array_shift( $msg );
+ parent::__construct( $key, $msg );
+ } else {
+ parent::__construct( $msg );
+ }
+ $this->setApiCode( $code, $data );
+ }
+}
+
+/**
+ * Extension of RawMessage implementing IApiMessage
+ * @since 1.25
+ * @ingroup API
+ */
+class ApiRawMessage extends RawMessage implements IApiMessage {
+ use ApiMessageTrait;
+
+ /**
+ * @param RawMessage|string|array $msg
+ * - RawMessage: is cloned
+ * - array: first element is $key, rest are $params to RawMessage::__construct
+ * - string: passed to RawMessage::__construct
+ * @param string|null $code
+ * @param array|null $data
+ */
+ public function __construct( $msg, $code = null, array $data = null ) {
+ if ( $msg instanceof RawMessage ) {
+ foreach ( get_class_vars( get_class( $this ) ) as $key => $value ) {
+ if ( isset( $msg->$key ) ) {
+ $this->$key = $msg->$key;
+ }
+ }
+ } elseif ( is_array( $msg ) ) {
+ $key = array_shift( $msg );
+ parent::__construct( $key, $msg );
+ } else {
+ parent::__construct( $msg );
+ }
+ $this->setApiCode( $code, $data );
+ }
+}
diff --git a/www/wiki/includes/api/ApiModuleManager.php b/www/wiki/includes/api/ApiModuleManager.php
new file mode 100644
index 00000000..e02c8627
--- /dev/null
+++ b/www/wiki/includes/api/ApiModuleManager.php
@@ -0,0 +1,290 @@
+<?php
+/**
+ * Copyright © 2012 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.21
+ */
+
+/**
+ * This class holds a list of modules and handles instantiation
+ *
+ * @since 1.21
+ * @ingroup API
+ */
+class ApiModuleManager extends ContextSource {
+
+ /**
+ * @var ApiBase
+ */
+ private $mParent;
+ /**
+ * @var ApiBase[]
+ */
+ private $mInstances = [];
+ /**
+ * @var null[]
+ */
+ private $mGroups = [];
+ /**
+ * @var array[]
+ */
+ private $mModules = [];
+
+ /**
+ * Construct new module manager
+ * @param ApiBase $parentModule Parent module instance will be used during instantiation
+ */
+ public function __construct( ApiBase $parentModule ) {
+ $this->mParent = $parentModule;
+ }
+
+ /**
+ * Add a list of modules to the manager. Each module is described
+ * by a module spec.
+ *
+ * Each module spec is an associative array containing at least
+ * the 'class' key for the module's class, and optionally a
+ * 'factory' key for the factory function to use for the module.
+ *
+ * That factory function will be called with two parameters,
+ * the parent module (an instance of ApiBase, usually ApiMain)
+ * and the name the module was registered under. The return
+ * value must be an instance of the class given in the 'class'
+ * field.
+ *
+ * For backward compatibility, the module spec may also be a
+ * simple string containing the module's class name. In that
+ * case, the class' constructor will be called with the parent
+ * module and module name as parameters, as described above.
+ *
+ * Examples for defining module specs:
+ *
+ * @code
+ * $modules['foo'] = 'ApiFoo';
+ * $modules['bar'] = [
+ * 'class' => ApiBar::class,
+ * 'factory' => function( $main, $name ) { ... }
+ * ];
+ * $modules['xyzzy'] = [
+ * 'class' => ApiXyzzy::class,
+ * 'factory' => [ XyzzyFactory::class, 'newApiModule' ]
+ * ];
+ * @endcode
+ *
+ * @param array $modules A map of ModuleName => ModuleSpec; The ModuleSpec
+ * is either a string containing the module's class name, or an associative
+ * array (see above for details).
+ * @param string $group Which group modules belong to (action,format,...)
+ */
+ public function addModules( array $modules, $group ) {
+ foreach ( $modules as $name => $moduleSpec ) {
+ if ( is_array( $moduleSpec ) ) {
+ $class = $moduleSpec['class'];
+ $factory = ( isset( $moduleSpec['factory'] ) ? $moduleSpec['factory'] : null );
+ } else {
+ $class = $moduleSpec;
+ $factory = null;
+ }
+
+ $this->addModule( $name, $group, $class, $factory );
+ }
+ }
+
+ /**
+ * Add or overwrite a module in this ApiMain instance. Intended for use by extending
+ * classes who wish to add their own modules to their lexicon or override the
+ * behavior of inherent ones.
+ *
+ * @param string $name The identifier for this module.
+ * @param string $group Name of the module group
+ * @param string $class The class where this module is implemented.
+ * @param callable|null $factory Callback for instantiating the module.
+ *
+ * @throws InvalidArgumentException
+ */
+ public function addModule( $name, $group, $class, $factory = null ) {
+ if ( !is_string( $name ) ) {
+ throw new InvalidArgumentException( '$name must be a string' );
+ }
+
+ if ( !is_string( $group ) ) {
+ throw new InvalidArgumentException( '$group must be a string' );
+ }
+
+ if ( !is_string( $class ) ) {
+ throw new InvalidArgumentException( '$class must be a string' );
+ }
+
+ if ( $factory !== null && !is_callable( $factory ) ) {
+ throw new InvalidArgumentException( '$factory must be a callable (or null)' );
+ }
+
+ $this->mGroups[$group] = null;
+ $this->mModules[$name] = [ $group, $class, $factory ];
+ }
+
+ /**
+ * Get module instance by name, or instantiate it if it does not exist
+ *
+ * @param string $moduleName Module name
+ * @param string $group Optionally validate that the module is in a specific group
+ * @param bool $ignoreCache If true, force-creates a new instance and does not cache it
+ *
+ * @return ApiBase|null The new module instance, or null if failed
+ */
+ public function getModule( $moduleName, $group = null, $ignoreCache = false ) {
+ if ( !isset( $this->mModules[$moduleName] ) ) {
+ return null;
+ }
+
+ list( $moduleGroup, $moduleClass, $moduleFactory ) = $this->mModules[$moduleName];
+
+ if ( $group !== null && $moduleGroup !== $group ) {
+ return null;
+ }
+
+ if ( !$ignoreCache && isset( $this->mInstances[$moduleName] ) ) {
+ // already exists
+ return $this->mInstances[$moduleName];
+ } else {
+ // new instance
+ $instance = $this->instantiateModule( $moduleName, $moduleClass, $moduleFactory );
+
+ if ( !$ignoreCache ) {
+ // cache this instance in case it is needed later
+ $this->mInstances[$moduleName] = $instance;
+ }
+
+ return $instance;
+ }
+ }
+
+ /**
+ * Instantiate the module using the given class or factory function.
+ *
+ * @param string $name The identifier for this module.
+ * @param string $class The class where this module is implemented.
+ * @param callable|null $factory Callback for instantiating the module.
+ *
+ * @throws MWException
+ * @return ApiBase
+ */
+ private function instantiateModule( $name, $class, $factory = null ) {
+ if ( $factory !== null ) {
+ // create instance from factory
+ $instance = call_user_func( $factory, $this->mParent, $name );
+
+ if ( !$instance instanceof $class ) {
+ throw new MWException(
+ "The factory function for module $name did not return an instance of $class!"
+ );
+ }
+ } else {
+ // create instance from class name
+ $instance = new $class( $this->mParent, $name );
+ }
+
+ return $instance;
+ }
+
+ /**
+ * Get an array of modules in a specific group or all if no group is set.
+ * @param string $group Optional group filter
+ * @return array List of module names
+ */
+ public function getNames( $group = null ) {
+ if ( $group === null ) {
+ return array_keys( $this->mModules );
+ }
+ $result = [];
+ foreach ( $this->mModules as $name => $grpCls ) {
+ if ( $grpCls[0] === $group ) {
+ $result[] = $name;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Create an array of (moduleName => moduleClass) for a specific group or for all.
+ * @param string $group Name of the group to get or null for all
+ * @return array Name=>class map
+ */
+ public function getNamesWithClasses( $group = null ) {
+ $result = [];
+ foreach ( $this->mModules as $name => $grpCls ) {
+ if ( $group === null || $grpCls[0] === $group ) {
+ $result[$name] = $grpCls[1];
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Returns the class name of the given module
+ *
+ * @param string $module Module name
+ * @return string|bool class name or false if the module does not exist
+ * @since 1.24
+ */
+ public function getClassName( $module ) {
+ if ( isset( $this->mModules[$module] ) ) {
+ return $this->mModules[$module][1];
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns true if the specific module is defined at all or in a specific group.
+ * @param string $moduleName Module name
+ * @param string $group Group name to check against, or null to check all groups,
+ * @return bool True if defined
+ */
+ public function isDefined( $moduleName, $group = null ) {
+ if ( isset( $this->mModules[$moduleName] ) ) {
+ return $group === null || $this->mModules[$moduleName][0] === $group;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the group name for the given module
+ * @param string $moduleName
+ * @return string|null Group name or null if missing
+ */
+ public function getModuleGroup( $moduleName ) {
+ if ( isset( $this->mModules[$moduleName] ) ) {
+ return $this->mModules[$moduleName][0];
+ }
+
+ return null;
+ }
+
+ /**
+ * Get a list of groups this manager contains.
+ * @return array
+ */
+ public function getGroups() {
+ return array_keys( $this->mGroups );
+ }
+}
diff --git a/www/wiki/includes/api/ApiMove.php b/www/wiki/includes/api/ApiMove.php
new file mode 100644
index 00000000..f6b6b35d
--- /dev/null
+++ b/www/wiki/includes/api/ApiMove.php
@@ -0,0 +1,280 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API Module to move pages
+ * @ingroup API
+ */
+class ApiMove extends ApiBase {
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ $this->requireOnlyOneParameter( $params, 'from', 'fromid' );
+
+ if ( isset( $params['from'] ) ) {
+ $fromTitle = Title::newFromText( $params['from'] );
+ if ( !$fromTitle || $fromTitle->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['from'] ) ] );
+ }
+ } elseif ( isset( $params['fromid'] ) ) {
+ $fromTitle = Title::newFromID( $params['fromid'] );
+ if ( !$fromTitle ) {
+ $this->dieWithError( [ 'apierror-nosuchpageid', $params['fromid'] ] );
+ }
+ }
+
+ if ( !$fromTitle->exists() ) {
+ $this->dieWithError( 'apierror-missingtitle' );
+ }
+ $fromTalk = $fromTitle->getTalkPage();
+
+ $toTitle = Title::newFromText( $params['to'] );
+ if ( !$toTitle || $toTitle->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['to'] ) ] );
+ }
+ $toTalk = $toTitle->getTalkPageIfDefined();
+
+ if ( $toTitle->getNamespace() == NS_FILE
+ && !RepoGroup::singleton()->getLocalRepo()->findFile( $toTitle )
+ && wfFindFile( $toTitle )
+ ) {
+ if ( !$params['ignorewarnings'] && $user->isAllowed( 'reupload-shared' ) ) {
+ $this->dieWithError( 'apierror-fileexists-sharedrepo-perm' );
+ } elseif ( !$user->isAllowed( 'reupload-shared' ) ) {
+ $this->dieWithError( 'apierror-cantoverwrite-sharedfile' );
+ }
+ }
+
+ // Rate limit
+ if ( $user->pingLimiter( 'move' ) ) {
+ $this->dieWithError( 'apierror-ratelimited' );
+ }
+
+ // Check if the user is allowed to add the specified changetags
+ if ( $params['tags'] ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ // Move the page
+ $toTitleExists = $toTitle->exists();
+ $status = $this->movePage( $fromTitle, $toTitle, $params['reason'], !$params['noredirect'],
+ $params['tags'] ?: [] );
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+
+ $r = [
+ 'from' => $fromTitle->getPrefixedText(),
+ 'to' => $toTitle->getPrefixedText(),
+ 'reason' => $params['reason']
+ ];
+
+ // NOTE: we assume that if the old title exists, it's because it was re-created as
+ // a redirect to the new title. This is not safe, but what we did before was
+ // even worse: we just determined whether a redirect should have been created,
+ // and reported that it was created if it should have, without any checks.
+ $r['redirectcreated'] = $fromTitle->exists();
+
+ $r['moveoverredirect'] = $toTitleExists;
+
+ // Move the talk page
+ if ( $params['movetalk'] && $toTalk && $fromTalk->exists() && !$fromTitle->isTalkPage() ) {
+ $toTalkExists = $toTalk->exists();
+ $status = $this->movePage(
+ $fromTalk,
+ $toTalk,
+ $params['reason'],
+ !$params['noredirect'],
+ $params['tags'] ?: []
+ );
+ if ( $status->isOK() ) {
+ $r['talkfrom'] = $fromTalk->getPrefixedText();
+ $r['talkto'] = $toTalk->getPrefixedText();
+ $r['talkmoveoverredirect'] = $toTalkExists;
+ } else {
+ // We're not going to dieWithError() on failure, since we already changed something
+ $r['talkmove-errors'] = $this->getErrorFormatter()->arrayFromStatus( $status );
+ }
+ }
+
+ $result = $this->getResult();
+
+ // Move subpages
+ if ( $params['movesubpages'] ) {
+ $r['subpages'] = $this->moveSubpages(
+ $fromTitle,
+ $toTitle,
+ $params['reason'],
+ $params['noredirect'],
+ $params['tags'] ?: []
+ );
+ ApiResult::setIndexedTagName( $r['subpages'], 'subpage' );
+
+ if ( $params['movetalk'] ) {
+ $r['subpages-talk'] = $this->moveSubpages(
+ $fromTalk,
+ $toTalk,
+ $params['reason'],
+ $params['noredirect'],
+ $params['tags'] ?: []
+ );
+ ApiResult::setIndexedTagName( $r['subpages-talk'], 'subpage' );
+ }
+ }
+
+ $watch = 'preferences';
+ if ( isset( $params['watchlist'] ) ) {
+ $watch = $params['watchlist'];
+ }
+
+ // Watch pages
+ $this->setWatch( $watch, $fromTitle, 'watchmoves' );
+ $this->setWatch( $watch, $toTitle, 'watchmoves' );
+
+ $result->addValue( null, $this->getModuleName(), $r );
+ }
+
+ /**
+ * @param Title $from
+ * @param Title $to
+ * @param string $reason
+ * @param bool $createRedirect
+ * @param array $changeTags Applied to the entry in the move log and redirect page revision
+ * @return Status
+ */
+ protected function movePage( Title $from, Title $to, $reason, $createRedirect, $changeTags ) {
+ $mp = new MovePage( $from, $to );
+ $valid = $mp->isValidMove();
+ if ( !$valid->isOK() ) {
+ return $valid;
+ }
+
+ $user = $this->getUser();
+ $permStatus = $mp->checkPermissions( $user, $reason );
+ if ( !$permStatus->isOK() ) {
+ return $permStatus;
+ }
+
+ // Check suppressredirect permission
+ if ( !$user->isAllowed( 'suppressredirect' ) ) {
+ $createRedirect = true;
+ }
+
+ return $mp->move( $user, $reason, $createRedirect, $changeTags );
+ }
+
+ /**
+ * @param Title $fromTitle
+ * @param Title $toTitle
+ * @param string $reason
+ * @param bool $noredirect
+ * @param array $changeTags Applied to the entry in the move log and redirect page revisions
+ * @return array
+ */
+ public function moveSubpages( $fromTitle, $toTitle, $reason, $noredirect, $changeTags = [] ) {
+ $retval = [];
+
+ $success = $fromTitle->moveSubpages( $toTitle, true, $reason, !$noredirect, $changeTags );
+ if ( isset( $success[0] ) ) {
+ $status = $this->errorArrayToStatus( $success );
+ return [ 'errors' => $this->getErrorFormatter()->arrayFromStatus( $status ) ];
+ }
+
+ // At least some pages could be moved
+ // Report each of them separately
+ foreach ( $success as $oldTitle => $newTitle ) {
+ $r = [ 'from' => $oldTitle ];
+ if ( is_array( $newTitle ) ) {
+ $status = $this->errorArrayToStatus( $newTitle );
+ $r['errors'] = $this->getErrorFormatter()->arrayFromStatus( $status );
+ } else {
+ // Success
+ $r['to'] = $newTitle;
+ }
+ $retval[] = $r;
+ }
+
+ return $retval;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'from' => null,
+ 'fromid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'to' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'reason' => '',
+ 'movetalk' => false,
+ 'movesubpages' => false,
+ 'noredirect' => false,
+ 'watchlist' => [
+ ApiBase::PARAM_DFLT => 'preferences',
+ ApiBase::PARAM_TYPE => [
+ 'watch',
+ 'unwatch',
+ 'preferences',
+ 'nochange'
+ ],
+ ],
+ 'ignorewarnings' => false,
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
+ 'reason=Misspelled%20title&movetalk=&noredirect='
+ => 'apihelp-move-example-move',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Move';
+ }
+}
diff --git a/www/wiki/includes/api/ApiOpenSearch.php b/www/wiki/includes/api/ApiOpenSearch.php
new file mode 100644
index 00000000..416fc7f6
--- /dev/null
+++ b/www/wiki/includes/api/ApiOpenSearch.php
@@ -0,0 +1,419 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ * Copyright © 2008 Brion Vibber <brion@wikimedia.org>
+ * Copyright © 2014 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @ingroup API
+ */
+class ApiOpenSearch extends ApiBase {
+ use SearchApi;
+
+ private $format = null;
+ private $fm = null;
+
+ /** @var array list of api allowed params */
+ private $allowedParams = null;
+
+ /**
+ * Get the output format
+ *
+ * @return string
+ */
+ protected function getFormat() {
+ if ( $this->format === null ) {
+ $params = $this->extractRequestParams();
+ $format = $params['format'];
+
+ $allowedParams = $this->getAllowedParams();
+ if ( !in_array( $format, $allowedParams['format'][ApiBase::PARAM_TYPE] ) ) {
+ $format = $allowedParams['format'][ApiBase::PARAM_DFLT];
+ }
+
+ if ( substr( $format, -2 ) === 'fm' ) {
+ $this->format = substr( $format, 0, -2 );
+ $this->fm = 'fm';
+ } else {
+ $this->format = $format;
+ $this->fm = '';
+ }
+ }
+ return $this->format;
+ }
+
+ public function getCustomPrinter() {
+ switch ( $this->getFormat() ) {
+ case 'json':
+ return new ApiOpenSearchFormatJson(
+ $this->getMain(), $this->fm, $this->getParameter( 'warningsaserror' )
+ );
+
+ case 'xml':
+ $printer = $this->getMain()->createPrinterByName( 'xml' . $this->fm );
+ $printer->setRootElement( 'SearchSuggestion' );
+ return $printer;
+
+ default:
+ ApiBase::dieDebug( __METHOD__, "Unsupported format '{$this->getFormat()}'" );
+ }
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $search = $params['search'];
+ $suggest = $params['suggest'];
+ $results = [];
+ if ( !$suggest || $this->getConfig()->get( 'EnableOpenSearchSuggest' ) ) {
+ // Open search results may be stored for a very long time
+ $this->getMain()->setCacheMaxAge( $this->getConfig()->get( 'SearchSuggestCacheExpiry' ) );
+ $this->getMain()->setCacheMode( 'public' );
+ $results = $this->search( $search, $params );
+
+ // Allow hooks to populate extracts and images
+ Hooks::run( 'ApiOpenSearchSuggest', [ &$results ] );
+
+ // Trim extracts, if necessary
+ $length = $this->getConfig()->get( 'OpenSearchDescriptionLength' );
+ foreach ( $results as &$r ) {
+ if ( is_string( $r['extract'] ) && !$r['extract trimmed'] ) {
+ $r['extract'] = self::trimExtract( $r['extract'], $length );
+ }
+ }
+ }
+
+ // Populate result object
+ $this->populateResult( $search, $results );
+ }
+
+ /**
+ * Perform the search
+ * @param string $search the search query
+ * @param array $params api request params
+ * @return array search results. Keys are integers.
+ */
+ private function search( $search, array $params ) {
+ $searchEngine = $this->buildSearchEngine( $params );
+ $titles = $searchEngine->extractTitles( $searchEngine->completionSearchWithVariants( $search ) );
+ $results = [];
+
+ if ( !$titles ) {
+ return $results;
+ }
+
+ // Special pages need unique integer ids in the return list, so we just
+ // assign them negative numbers because those won't clash with the
+ // always positive articleIds that non-special pages get.
+ $nextSpecialPageId = -1;
+
+ if ( $params['redirects'] === null ) {
+ // Backwards compatibility, don't resolve for JSON.
+ $resolveRedir = $this->getFormat() !== 'json';
+ } else {
+ $resolveRedir = $params['redirects'] === 'resolve';
+ }
+
+ if ( $resolveRedir ) {
+ // Query for redirects
+ $redirects = [];
+ $lb = new LinkBatch( $titles );
+ if ( !$lb->isEmpty() ) {
+ $db = $this->getDB();
+ $res = $db->select(
+ [ 'page', 'redirect' ],
+ [ 'page_namespace', 'page_title', 'rd_namespace', 'rd_title' ],
+ [
+ 'rd_from = page_id',
+ 'rd_interwiki IS NULL OR rd_interwiki = ' . $db->addQuotes( '' ),
+ $lb->constructSet( 'page', $db ),
+ ],
+ __METHOD__
+ );
+ foreach ( $res as $row ) {
+ $redirects[$row->page_namespace][$row->page_title] =
+ [ $row->rd_namespace, $row->rd_title ];
+ }
+ }
+
+ // Bypass any redirects
+ $seen = [];
+ foreach ( $titles as $title ) {
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+ $from = null;
+ if ( isset( $redirects[$ns][$dbkey] ) ) {
+ list( $ns, $dbkey ) = $redirects[$ns][$dbkey];
+ $from = $title;
+ $title = Title::makeTitle( $ns, $dbkey );
+ }
+ if ( !isset( $seen[$ns][$dbkey] ) ) {
+ $seen[$ns][$dbkey] = true;
+ $resultId = $title->getArticleID();
+ if ( $resultId === 0 ) {
+ $resultId = $nextSpecialPageId;
+ $nextSpecialPageId -= 1;
+ }
+ $results[$resultId] = [
+ 'title' => $title,
+ 'redirect from' => $from,
+ 'extract' => false,
+ 'extract trimmed' => false,
+ 'image' => false,
+ 'url' => wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ),
+ ];
+ }
+ }
+ } else {
+ foreach ( $titles as $title ) {
+ $resultId = $title->getArticleID();
+ if ( $resultId === 0 ) {
+ $resultId = $nextSpecialPageId;
+ $nextSpecialPageId -= 1;
+ }
+ $results[$resultId] = [
+ 'title' => $title,
+ 'redirect from' => null,
+ 'extract' => false,
+ 'extract trimmed' => false,
+ 'image' => false,
+ 'url' => wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ),
+ ];
+ }
+ }
+
+ return $results;
+ }
+
+ /**
+ * @param string $search
+ * @param array &$results
+ */
+ protected function populateResult( $search, &$results ) {
+ $result = $this->getResult();
+
+ switch ( $this->getFormat() ) {
+ case 'json':
+ // http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.1
+ $result->addArrayType( null, 'array' );
+ $result->addValue( null, 0, strval( $search ) );
+ $terms = [];
+ $descriptions = [];
+ $urls = [];
+ foreach ( $results as $r ) {
+ $terms[] = $r['title']->getPrefixedText();
+ $descriptions[] = strval( $r['extract'] );
+ $urls[] = $r['url'];
+ }
+ $result->addValue( null, 1, $terms );
+ $result->addValue( null, 2, $descriptions );
+ $result->addValue( null, 3, $urls );
+ break;
+
+ case 'xml':
+ // https://msdn.microsoft.com/en-us/library/cc891508(v=vs.85).aspx
+ $imageKeys = [
+ 'source' => true,
+ 'alt' => true,
+ 'width' => true,
+ 'height' => true,
+ 'align' => true,
+ ];
+ $items = [];
+ foreach ( $results as $r ) {
+ $item = [
+ 'Text' => $r['title']->getPrefixedText(),
+ 'Url' => $r['url'],
+ ];
+ if ( is_string( $r['extract'] ) && $r['extract'] !== '' ) {
+ $item['Description'] = $r['extract'];
+ }
+ if ( is_array( $r['image'] ) && isset( $r['image']['source'] ) ) {
+ $item['Image'] = array_intersect_key( $r['image'], $imageKeys );
+ }
+ ApiResult::setSubelementsList( $item, array_keys( $item ) );
+ $items[] = $item;
+ }
+ ApiResult::setIndexedTagName( $items, 'Item' );
+ $result->addValue( null, 'version', '2.0' );
+ $result->addValue( null, 'xmlns', 'http://opensearch.org/searchsuggest2' );
+ $result->addValue( null, 'Query', strval( $search ) );
+ $result->addSubelementsList( null, 'Query' );
+ $result->addValue( null, 'Section', $items );
+ break;
+
+ default:
+ ApiBase::dieDebug( __METHOD__, "Unsupported format '{$this->getFormat()}'" );
+ }
+ }
+
+ public function getAllowedParams() {
+ if ( $this->allowedParams !== null ) {
+ return $this->allowedParams;
+ }
+ $this->allowedParams = $this->buildCommonApiParams( false ) + [
+ 'suggest' => false,
+ 'redirects' => [
+ ApiBase::PARAM_TYPE => [ 'return', 'resolve' ],
+ ],
+ 'format' => [
+ ApiBase::PARAM_DFLT => 'json',
+ ApiBase::PARAM_TYPE => [ 'json', 'jsonfm', 'xml', 'xmlfm' ],
+ ],
+ 'warningsaserror' => false,
+ ];
+
+ // Use open search specific default limit
+ $this->allowedParams['limit'][ApiBase::PARAM_DFLT] = $this->getConfig()->get(
+ 'OpenSearchDefaultLimit'
+ );
+
+ return $this->allowedParams;
+ }
+
+ public function getSearchProfileParams() {
+ return [
+ 'profile' => [
+ 'profile-type' => SearchEngine::COMPLETION_PROFILE_TYPE,
+ 'help-message' => 'apihelp-query+prefixsearch-param-profile'
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=opensearch&search=Te'
+ => 'apihelp-opensearch-example-te',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Opensearch';
+ }
+
+ /**
+ * Trim an extract to a sensible length.
+ *
+ * Adapted from Extension:OpenSearchXml, which adapted it from
+ * Extension:ActiveAbstract.
+ *
+ * @param string $text
+ * @param int $length Target length; actual result will continue to the end of a sentence.
+ * @return string
+ */
+ public static function trimExtract( $text, $length ) {
+ static $regex = null;
+
+ if ( $regex === null ) {
+ $endchars = [
+ '([^\d])\.\s', '\!\s', '\?\s', // regular ASCII
+ '。', // full-width ideographic full-stop
+ '.', '!', '?', // double-width roman forms
+ '。', // half-width ideographic full stop
+ ];
+ $endgroup = implode( '|', $endchars );
+ $end = "(?:$endgroup)";
+ $sentence = ".{{$length},}?$end+";
+ $regex = "/^($sentence)/u";
+ }
+
+ $matches = [];
+ if ( preg_match( $regex, $text, $matches ) ) {
+ return trim( $matches[1] );
+ } else {
+ // Just return the first line
+ return trim( explode( "\n", $text )[0] );
+ }
+ }
+
+ /**
+ * Fetch the template for a type.
+ *
+ * @param string $type MIME type
+ * @return string
+ * @throws MWException
+ */
+ public static function getOpenSearchTemplate( $type ) {
+ $config = MediaWikiServices::getInstance()->getSearchEngineConfig();
+ $template = $config->getConfig()->get( 'OpenSearchTemplate' );
+
+ if ( $template && $type === 'application/x-suggestions+json' ) {
+ return $template;
+ }
+
+ $ns = implode( '|', $config->defaultNamespaces() );
+ if ( !$ns ) {
+ $ns = '0';
+ }
+
+ switch ( $type ) {
+ case 'application/x-suggestions+json':
+ return $config->getConfig()->get( 'CanonicalServer' ) . wfScript( 'api' )
+ . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
+
+ case 'application/x-suggestions+xml':
+ return $config->getConfig()->get( 'CanonicalServer' ) . wfScript( 'api' )
+ . '?action=opensearch&format=xml&search={searchTerms}&namespace=' . $ns;
+
+ default:
+ throw new MWException( __METHOD__ . ": Unknown type '$type'" );
+ }
+ }
+}
+
+/**
+ * @ingroup API
+ */
+class ApiOpenSearchFormatJson extends ApiFormatJson {
+ private $warningsAsError = false;
+
+ public function __construct( ApiMain $main, $fm, $warningsAsError ) {
+ parent::__construct( $main, "json$fm" );
+ $this->warningsAsError = $warningsAsError;
+ }
+
+ public function execute() {
+ $result = $this->getResult();
+ if ( !$result->getResultData( 'error' ) && !$result->getResultData( 'errors' ) ) {
+ // Ignore warnings or treat as errors, as requested
+ $warnings = $result->removeValue( 'warnings', null );
+ if ( $this->warningsAsError && $warnings ) {
+ $this->dieWithError(
+ 'apierror-opensearch-json-warnings',
+ 'warnings',
+ [ 'warnings' => $warnings ]
+ );
+ }
+
+ // Ignore any other unexpected keys (e.g. from $wgDebugToolbar)
+ $remove = array_keys( array_diff_key(
+ $result->getResultData(),
+ [ 0 => 'search', 1 => 'terms', 2 => 'descriptions', 3 => 'urls' ]
+ ) );
+ foreach ( $remove as $key ) {
+ $result->removeValue( $key, null );
+ }
+ }
+
+ parent::execute();
+ }
+}
diff --git a/www/wiki/includes/api/ApiOptions.php b/www/wiki/includes/api/ApiOptions.php
new file mode 100644
index 00000000..4b769060
--- /dev/null
+++ b/www/wiki/includes/api/ApiOptions.php
@@ -0,0 +1,185 @@
+<?php
+/**
+ * Copyright © 2012 Szymon Świerkosz beau@adres.pl
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * API module that facilitates the changing of user's preferences.
+ * Requires API write mode to be enabled.
+ *
+ * @ingroup API
+ */
+class ApiOptions extends ApiBase {
+ /**
+ * Changes preferences of the current user.
+ */
+ public function execute() {
+ if ( $this->getUser()->isAnon() ) {
+ $this->dieWithError(
+ [ 'apierror-mustbeloggedin', $this->msg( 'action-editmyoptions' ) ], 'notloggedin'
+ );
+ }
+
+ $this->checkUserRightsAny( 'editmyoptions' );
+
+ $params = $this->extractRequestParams();
+ $changed = false;
+
+ if ( isset( $params['optionvalue'] ) && !isset( $params['optionname'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'optionname' ] );
+ }
+
+ // Load the user from the master to reduce CAS errors on double post (T95839)
+ $user = $this->getUser()->getInstanceForUpdate();
+ if ( !$user ) {
+ $this->dieWithError(
+ [ 'apierror-mustbeloggedin', $this->msg( 'action-editmyoptions' ) ], 'notloggedin'
+ );
+ }
+
+ if ( $params['reset'] ) {
+ $user->resetOptions( $params['resetkinds'], $this->getContext() );
+ $changed = true;
+ }
+
+ $changes = [];
+ if ( $params['change'] ) {
+ foreach ( $params['change'] as $entry ) {
+ $array = explode( '=', $entry, 2 );
+ $changes[$array[0]] = isset( $array[1] ) ? $array[1] : null;
+ }
+ }
+ if ( isset( $params['optionname'] ) ) {
+ $newValue = isset( $params['optionvalue'] ) ? $params['optionvalue'] : null;
+ $changes[$params['optionname']] = $newValue;
+ }
+ if ( !$changed && !count( $changes ) ) {
+ $this->dieWithError( 'apierror-nochanges' );
+ }
+
+ $preferencesFactory = MediaWikiServices::getInstance()->getPreferencesFactory();
+ $prefs = $preferencesFactory->getFormDescriptor( $user, $this->getContext() );
+ $prefsKinds = $user->getOptionKinds( $this->getContext(), $changes );
+
+ $htmlForm = null;
+ foreach ( $changes as $key => $value ) {
+ switch ( $prefsKinds[$key] ) {
+ case 'registered':
+ // Regular option.
+ if ( $htmlForm === null ) {
+ // We need a dummy HTMLForm for the validate callback...
+ $htmlForm = new HTMLForm( [], $this );
+ }
+ $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key], $htmlForm );
+ $validation = $field->validate( $value, $user->getOptions() );
+ break;
+ case 'registered-multiselect':
+ case 'registered-checkmatrix':
+ // A key for a multiselect or checkmatrix option.
+ $validation = true;
+ $value = $value !== null ? (bool)$value : null;
+ break;
+ case 'userjs':
+ // Allow non-default preferences prefixed with 'userjs-', to be set by user scripts
+ if ( strlen( $key ) > 255 ) {
+ $validation = $this->msg( 'apiwarn-validationfailed-keytoolong', Message::numParam( 255 ) );
+ } elseif ( preg_match( '/[^a-zA-Z0-9_-]/', $key ) !== 0 ) {
+ $validation = $this->msg( 'apiwarn-validationfailed-badchars' );
+ } else {
+ $validation = true;
+ }
+ break;
+ case 'special':
+ $validation = $this->msg( 'apiwarn-validationfailed-cannotset' );
+ break;
+ case 'unused':
+ default:
+ $validation = $this->msg( 'apiwarn-validationfailed-badpref' );
+ break;
+ }
+ if ( $validation === true ) {
+ $user->setOption( $key, $value );
+ $changed = true;
+ } else {
+ $this->addWarning( [ 'apiwarn-validationfailed', wfEscapeWikiText( $key ), $validation ] );
+ }
+ }
+
+ if ( $changed ) {
+ // Commit changes
+ $user->saveSettings();
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), 'success' );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ $optionKinds = User::listOptionKinds();
+ $optionKinds[] = 'all';
+
+ return [
+ 'reset' => false,
+ 'resetkinds' => [
+ ApiBase::PARAM_TYPE => $optionKinds,
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'change' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'optionname' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'optionvalue' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Options';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=options&reset=&token=123ABC'
+ => 'apihelp-options-example-reset',
+ 'action=options&change=skin=vector|hideminor=1&token=123ABC'
+ => 'apihelp-options-example-change',
+ 'action=options&reset=&change=skin=monobook&optionname=nickname&' .
+ 'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC'
+ => 'apihelp-options-example-complex',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiPageSet.php b/www/wiki/includes/api/ApiPageSet.php
new file mode 100644
index 00000000..48303a57
--- /dev/null
+++ b/www/wiki/includes/api/ApiPageSet.php
@@ -0,0 +1,1541 @@
+<?php
+/**
+ * Copyright © 2006, 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * This class contains a list of pages that the client has requested.
+ * Initially, when the client passes in titles=, pageids=, or revisions=
+ * parameter, an instance of the ApiPageSet class will normalize titles,
+ * determine if the pages/revisions exist, and prefetch any additional page
+ * data requested.
+ *
+ * When a generator is used, the result of the generator will become the input
+ * for the second instance of this class, and all subsequent actions will use
+ * the second instance for all their work.
+ *
+ * @ingroup API
+ * @since 1.21 derives from ApiBase instead of ApiQueryBase
+ */
+class ApiPageSet extends ApiBase {
+ /**
+ * Constructor flag: The new instance of ApiPageSet will ignore the 'generator=' parameter
+ * @since 1.21
+ */
+ const DISABLE_GENERATORS = 1;
+
+ private $mDbSource;
+ private $mParams;
+ private $mResolveRedirects;
+ private $mConvertTitles;
+ private $mAllowGenerator;
+
+ private $mAllPages = []; // [ns][dbkey] => page_id or negative when missing
+ private $mTitles = [];
+ private $mGoodAndMissingPages = []; // [ns][dbkey] => page_id or negative when missing
+ private $mGoodPages = []; // [ns][dbkey] => page_id
+ private $mGoodTitles = [];
+ private $mMissingPages = []; // [ns][dbkey] => fake page_id
+ private $mMissingTitles = [];
+ /** @var array [fake_page_id] => [ 'title' => $title, 'invalidreason' => $reason ] */
+ private $mInvalidTitles = [];
+ private $mMissingPageIDs = [];
+ private $mRedirectTitles = [];
+ private $mSpecialTitles = [];
+ private $mAllSpecials = []; // separate from mAllPages to avoid breaking getAllTitlesByNamespace()
+ private $mNormalizedTitles = [];
+ private $mInterwikiTitles = [];
+ /** @var Title[] */
+ private $mPendingRedirectIDs = [];
+ private $mPendingRedirectSpecialPages = []; // [dbkey] => [ Title $from, Title $to ]
+ private $mResolvedRedirectTitles = [];
+ private $mConvertedTitles = [];
+ private $mGoodRevIDs = [];
+ private $mLiveRevIDs = [];
+ private $mDeletedRevIDs = [];
+ private $mMissingRevIDs = [];
+ private $mGeneratorData = []; // [ns][dbkey] => data array
+ private $mFakePageId = -1;
+ private $mCacheMode = 'public';
+ private $mRequestedPageFields = [];
+ /** @var int */
+ private $mDefaultNamespace = NS_MAIN;
+ /** @var callable|null */
+ private $mRedirectMergePolicy;
+
+ /**
+ * Add all items from $values into the result
+ * @param array $result Output
+ * @param array $values Values to add
+ * @param string[] $flags The names of boolean flags to mark this element
+ * @param string $name If given, name of the value
+ */
+ private static function addValues( array &$result, $values, $flags = [], $name = null ) {
+ foreach ( $values as $val ) {
+ if ( $val instanceof Title ) {
+ $v = [];
+ ApiQueryBase::addTitleInfo( $v, $val );
+ } elseif ( $name !== null ) {
+ $v = [ $name => $val ];
+ } else {
+ $v = $val;
+ }
+ foreach ( $flags as $flag ) {
+ $v[$flag] = true;
+ }
+ $result[] = $v;
+ }
+ }
+
+ /**
+ * @param ApiBase $dbSource Module implementing getDB().
+ * Allows PageSet to reuse existing db connection from the shared state like ApiQuery.
+ * @param int $flags Zero or more flags like DISABLE_GENERATORS
+ * @param int $defaultNamespace The namespace to use if none is specified by a prefix.
+ * @since 1.21 accepts $flags instead of two boolean values
+ */
+ public function __construct( ApiBase $dbSource, $flags = 0, $defaultNamespace = NS_MAIN ) {
+ parent::__construct( $dbSource->getMain(), $dbSource->getModuleName() );
+ $this->mDbSource = $dbSource;
+ $this->mAllowGenerator = ( $flags & self::DISABLE_GENERATORS ) == 0;
+ $this->mDefaultNamespace = $defaultNamespace;
+
+ $this->mParams = $this->extractRequestParams();
+ $this->mResolveRedirects = $this->mParams['redirects'];
+ $this->mConvertTitles = $this->mParams['converttitles'];
+ }
+
+ /**
+ * In case execute() is not called, call this method to mark all relevant parameters as used
+ * This prevents unused parameters from being reported as warnings
+ */
+ public function executeDryRun() {
+ $this->executeInternal( true );
+ }
+
+ /**
+ * Populate the PageSet from the request parameters.
+ */
+ public function execute() {
+ $this->executeInternal( false );
+ }
+
+ /**
+ * Populate the PageSet from the request parameters.
+ * @param bool $isDryRun If true, instantiates generator, but only to mark
+ * relevant parameters as used
+ */
+ private function executeInternal( $isDryRun ) {
+ $generatorName = $this->mAllowGenerator ? $this->mParams['generator'] : null;
+ if ( isset( $generatorName ) ) {
+ $dbSource = $this->mDbSource;
+ if ( !$dbSource instanceof ApiQuery ) {
+ // If the parent container of this pageset is not ApiQuery, we must create it to run generator
+ $dbSource = $this->getMain()->getModuleManager()->getModule( 'query' );
+ }
+ $generator = $dbSource->getModuleManager()->getModule( $generatorName, null, true );
+ if ( $generator === null ) {
+ $this->dieWithError( [ 'apierror-badgenerator-unknown', $generatorName ], 'badgenerator' );
+ }
+ if ( !$generator instanceof ApiQueryGeneratorBase ) {
+ $this->dieWithError( [ 'apierror-badgenerator-notgenerator', $generatorName ], 'badgenerator' );
+ }
+ // Create a temporary pageset to store generator's output,
+ // add any additional fields generator may need, and execute pageset to populate titles/pageids
+ $tmpPageSet = new ApiPageSet( $dbSource, self::DISABLE_GENERATORS );
+ $generator->setGeneratorMode( $tmpPageSet );
+ $this->mCacheMode = $generator->getCacheMode( $generator->extractRequestParams() );
+
+ if ( !$isDryRun ) {
+ $generator->requestExtraData( $tmpPageSet );
+ }
+ $tmpPageSet->executeInternal( $isDryRun );
+
+ // populate this pageset with the generator output
+ if ( !$isDryRun ) {
+ $generator->executeGenerator( $this );
+
+ // Avoid PHP 7.1 warning of passing $this by reference
+ $apiModule = $this;
+ Hooks::run( 'APIQueryGeneratorAfterExecute', [ &$generator, &$apiModule ] );
+ } else {
+ // Prevent warnings from being reported on these parameters
+ $main = $this->getMain();
+ foreach ( $generator->extractRequestParams() as $paramName => $param ) {
+ $main->markParamsUsed( $generator->encodeParamName( $paramName ) );
+ }
+ }
+
+ if ( !$isDryRun ) {
+ $this->resolvePendingRedirects();
+ }
+ } else {
+ // Only one of the titles/pageids/revids is allowed at the same time
+ $dataSource = null;
+ if ( isset( $this->mParams['titles'] ) ) {
+ $dataSource = 'titles';
+ }
+ if ( isset( $this->mParams['pageids'] ) ) {
+ if ( isset( $dataSource ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-cannotusewith',
+ $this->encodeParamName( 'pageids' ),
+ $this->encodeParamName( $dataSource )
+ ],
+ 'multisource'
+ );
+ }
+ $dataSource = 'pageids';
+ }
+ if ( isset( $this->mParams['revids'] ) ) {
+ if ( isset( $dataSource ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-cannotusewith',
+ $this->encodeParamName( 'revids' ),
+ $this->encodeParamName( $dataSource )
+ ],
+ 'multisource'
+ );
+ }
+ $dataSource = 'revids';
+ }
+
+ if ( !$isDryRun ) {
+ // Populate page information with the original user input
+ switch ( $dataSource ) {
+ case 'titles':
+ $this->initFromTitles( $this->mParams['titles'] );
+ break;
+ case 'pageids':
+ $this->initFromPageIds( $this->mParams['pageids'] );
+ break;
+ case 'revids':
+ if ( $this->mResolveRedirects ) {
+ $this->addWarning( 'apiwarn-redirectsandrevids' );
+ }
+ $this->mResolveRedirects = false;
+ $this->initFromRevIDs( $this->mParams['revids'] );
+ break;
+ default:
+ // Do nothing - some queries do not need any of the data sources.
+ break;
+ }
+ }
+ }
+ }
+
+ /**
+ * Check whether this PageSet is resolving redirects
+ * @return bool
+ */
+ public function isResolvingRedirects() {
+ return $this->mResolveRedirects;
+ }
+
+ /**
+ * Return the parameter name that is the source of data for this PageSet
+ *
+ * If multiple source parameters are specified (e.g. titles and pageids),
+ * one will be named arbitrarily.
+ *
+ * @return string|null
+ */
+ public function getDataSource() {
+ if ( $this->mAllowGenerator && isset( $this->mParams['generator'] ) ) {
+ return 'generator';
+ }
+ if ( isset( $this->mParams['titles'] ) ) {
+ return 'titles';
+ }
+ if ( isset( $this->mParams['pageids'] ) ) {
+ return 'pageids';
+ }
+ if ( isset( $this->mParams['revids'] ) ) {
+ return 'revids';
+ }
+
+ return null;
+ }
+
+ /**
+ * Request an additional field from the page table.
+ * Must be called before execute()
+ * @param string $fieldName Field name
+ */
+ public function requestField( $fieldName ) {
+ $this->mRequestedPageFields[$fieldName] = null;
+ }
+
+ /**
+ * Get the value of a custom field previously requested through
+ * requestField()
+ * @param string $fieldName Field name
+ * @return mixed Field value
+ */
+ public function getCustomField( $fieldName ) {
+ return $this->mRequestedPageFields[$fieldName];
+ }
+
+ /**
+ * Get the fields that have to be queried from the page table:
+ * the ones requested through requestField() and a few basic ones
+ * we always need
+ * @return array Array of field names
+ */
+ public function getPageTableFields() {
+ // Ensure we get minimum required fields
+ // DON'T change this order
+ $pageFlds = [
+ 'page_namespace' => null,
+ 'page_title' => null,
+ 'page_id' => null,
+ ];
+
+ if ( $this->mResolveRedirects ) {
+ $pageFlds['page_is_redirect'] = null;
+ }
+
+ if ( $this->getConfig()->get( 'ContentHandlerUseDB' ) ) {
+ $pageFlds['page_content_model'] = null;
+ }
+
+ if ( $this->getConfig()->get( 'PageLanguageUseDB' ) ) {
+ $pageFlds['page_lang'] = null;
+ }
+
+ foreach ( LinkCache::getSelectFields() as $field ) {
+ $pageFlds[$field] = null;
+ }
+
+ $pageFlds = array_merge( $pageFlds, $this->mRequestedPageFields );
+
+ return array_keys( $pageFlds );
+ }
+
+ /**
+ * Returns an array [ns][dbkey] => page_id for all requested titles.
+ * page_id is a unique negative number in case title was not found.
+ * Invalid titles will also have negative page IDs and will be in namespace 0
+ * @return array
+ */
+ public function getAllTitlesByNamespace() {
+ return $this->mAllPages;
+ }
+
+ /**
+ * All Title objects provided.
+ * @return Title[]
+ */
+ public function getTitles() {
+ return $this->mTitles;
+ }
+
+ /**
+ * Returns the number of unique pages (not revisions) in the set.
+ * @return int
+ */
+ public function getTitleCount() {
+ return count( $this->mTitles );
+ }
+
+ /**
+ * Returns an array [ns][dbkey] => page_id for all good titles.
+ * @return array
+ */
+ public function getGoodTitlesByNamespace() {
+ return $this->mGoodPages;
+ }
+
+ /**
+ * Title objects that were found in the database.
+ * @return Title[] Array page_id (int) => Title (obj)
+ */
+ public function getGoodTitles() {
+ return $this->mGoodTitles;
+ }
+
+ /**
+ * Returns the number of found unique pages (not revisions) in the set.
+ * @return int
+ */
+ public function getGoodTitleCount() {
+ return count( $this->mGoodTitles );
+ }
+
+ /**
+ * Returns an array [ns][dbkey] => fake_page_id for all missing titles.
+ * fake_page_id is a unique negative number.
+ * @return array
+ */
+ public function getMissingTitlesByNamespace() {
+ return $this->mMissingPages;
+ }
+
+ /**
+ * Title objects that were NOT found in the database.
+ * The array's index will be negative for each item
+ * @return Title[]
+ */
+ public function getMissingTitles() {
+ return $this->mMissingTitles;
+ }
+
+ /**
+ * Returns an array [ns][dbkey] => page_id for all good and missing titles.
+ * @return array
+ */
+ public function getGoodAndMissingTitlesByNamespace() {
+ return $this->mGoodAndMissingPages;
+ }
+
+ /**
+ * Title objects for good and missing titles.
+ * @return array
+ */
+ public function getGoodAndMissingTitles() {
+ return $this->mGoodTitles + $this->mMissingTitles;
+ }
+
+ /**
+ * Titles that were deemed invalid by Title::newFromText()
+ * The array's index will be unique and negative for each item
+ * @deprecated since 1.26, use self::getInvalidTitlesAndReasons()
+ * @return string[] Array of strings (not Title objects)
+ */
+ public function getInvalidTitles() {
+ wfDeprecated( __METHOD__, '1.26' );
+ return array_map( function ( $t ) {
+ return $t['title'];
+ }, $this->mInvalidTitles );
+ }
+
+ /**
+ * Titles that were deemed invalid by Title::newFromText()
+ * The array's index will be unique and negative for each item
+ * @return array[] Array of arrays with 'title' and 'invalidreason' properties
+ */
+ public function getInvalidTitlesAndReasons() {
+ return $this->mInvalidTitles;
+ }
+
+ /**
+ * Page IDs that were not found in the database
+ * @return array Array of page IDs
+ */
+ public function getMissingPageIDs() {
+ return $this->mMissingPageIDs;
+ }
+
+ /**
+ * Get a list of redirect resolutions - maps a title to its redirect
+ * target, as an array of output-ready arrays
+ * @return Title[]
+ */
+ public function getRedirectTitles() {
+ return $this->mRedirectTitles;
+ }
+
+ /**
+ * Get a list of redirect resolutions - maps a title to its redirect
+ * target. Includes generator data for redirect source when available.
+ * @param ApiResult $result
+ * @return array Array of prefixed_title (string) => Title object
+ * @since 1.21
+ */
+ public function getRedirectTitlesAsResult( $result = null ) {
+ $values = [];
+ foreach ( $this->getRedirectTitles() as $titleStrFrom => $titleTo ) {
+ $r = [
+ 'from' => strval( $titleStrFrom ),
+ 'to' => $titleTo->getPrefixedText(),
+ ];
+ if ( $titleTo->hasFragment() ) {
+ $r['tofragment'] = $titleTo->getFragment();
+ }
+ if ( $titleTo->isExternal() ) {
+ $r['tointerwiki'] = $titleTo->getInterwiki();
+ }
+ if ( isset( $this->mResolvedRedirectTitles[$titleStrFrom] ) ) {
+ $titleFrom = $this->mResolvedRedirectTitles[$titleStrFrom];
+ $ns = $titleFrom->getNamespace();
+ $dbkey = $titleFrom->getDBkey();
+ if ( isset( $this->mGeneratorData[$ns][$dbkey] ) ) {
+ $r = array_merge( $this->mGeneratorData[$ns][$dbkey], $r );
+ }
+ }
+
+ $values[] = $r;
+ }
+ if ( !empty( $values ) && $result ) {
+ ApiResult::setIndexedTagName( $values, 'r' );
+ }
+
+ return $values;
+ }
+
+ /**
+ * Get a list of title normalizations - maps a title to its normalized
+ * version.
+ * @return array Array of raw_prefixed_title (string) => prefixed_title (string)
+ */
+ public function getNormalizedTitles() {
+ return $this->mNormalizedTitles;
+ }
+
+ /**
+ * Get a list of title normalizations - maps a title to its normalized
+ * version in the form of result array.
+ * @param ApiResult $result
+ * @return array Array of raw_prefixed_title (string) => prefixed_title (string)
+ * @since 1.21
+ */
+ public function getNormalizedTitlesAsResult( $result = null ) {
+ global $wgContLang;
+
+ $values = [];
+ foreach ( $this->getNormalizedTitles() as $rawTitleStr => $titleStr ) {
+ $encode = ( $wgContLang->normalize( $rawTitleStr ) !== $rawTitleStr );
+ $values[] = [
+ 'fromencoded' => $encode,
+ 'from' => $encode ? rawurlencode( $rawTitleStr ) : $rawTitleStr,
+ 'to' => $titleStr
+ ];
+ }
+ if ( !empty( $values ) && $result ) {
+ ApiResult::setIndexedTagName( $values, 'n' );
+ }
+
+ return $values;
+ }
+
+ /**
+ * Get a list of title conversions - maps a title to its converted
+ * version.
+ * @return array Array of raw_prefixed_title (string) => prefixed_title (string)
+ */
+ public function getConvertedTitles() {
+ return $this->mConvertedTitles;
+ }
+
+ /**
+ * Get a list of title conversions - maps a title to its converted
+ * version as a result array.
+ * @param ApiResult $result
+ * @return array Array of (from, to) strings
+ * @since 1.21
+ */
+ public function getConvertedTitlesAsResult( $result = null ) {
+ $values = [];
+ foreach ( $this->getConvertedTitles() as $rawTitleStr => $titleStr ) {
+ $values[] = [
+ 'from' => $rawTitleStr,
+ 'to' => $titleStr
+ ];
+ }
+ if ( !empty( $values ) && $result ) {
+ ApiResult::setIndexedTagName( $values, 'c' );
+ }
+
+ return $values;
+ }
+
+ /**
+ * Get a list of interwiki titles - maps a title to its interwiki
+ * prefix.
+ * @return array Array of raw_prefixed_title (string) => interwiki_prefix (string)
+ */
+ public function getInterwikiTitles() {
+ return $this->mInterwikiTitles;
+ }
+
+ /**
+ * Get a list of interwiki titles - maps a title to its interwiki
+ * prefix as result.
+ * @param ApiResult $result
+ * @param bool $iwUrl
+ * @return array Array of raw_prefixed_title (string) => interwiki_prefix (string)
+ * @since 1.21
+ */
+ public function getInterwikiTitlesAsResult( $result = null, $iwUrl = false ) {
+ $values = [];
+ foreach ( $this->getInterwikiTitles() as $rawTitleStr => $interwikiStr ) {
+ $item = [
+ 'title' => $rawTitleStr,
+ 'iw' => $interwikiStr,
+ ];
+ if ( $iwUrl ) {
+ $title = Title::newFromText( $rawTitleStr );
+ $item['url'] = $title->getFullURL( '', false, PROTO_CURRENT );
+ }
+ $values[] = $item;
+ }
+ if ( !empty( $values ) && $result ) {
+ ApiResult::setIndexedTagName( $values, 'i' );
+ }
+
+ return $values;
+ }
+
+ /**
+ * Get an array of invalid/special/missing titles.
+ *
+ * @param array $invalidChecks List of types of invalid titles to include.
+ * Recognized values are:
+ * - invalidTitles: Titles and reasons from $this->getInvalidTitlesAndReasons()
+ * - special: Titles from $this->getSpecialTitles()
+ * - missingIds: ids from $this->getMissingPageIDs()
+ * - missingRevIds: ids from $this->getMissingRevisionIDs()
+ * - missingTitles: Titles from $this->getMissingTitles()
+ * - interwikiTitles: Titles from $this->getInterwikiTitlesAsResult()
+ * @return array Array suitable for inclusion in the response
+ * @since 1.23
+ */
+ public function getInvalidTitlesAndRevisions( $invalidChecks = [ 'invalidTitles',
+ 'special', 'missingIds', 'missingRevIds', 'missingTitles', 'interwikiTitles' ]
+ ) {
+ $result = [];
+ if ( in_array( 'invalidTitles', $invalidChecks ) ) {
+ self::addValues( $result, $this->getInvalidTitlesAndReasons(), [ 'invalid' ] );
+ }
+ if ( in_array( 'special', $invalidChecks ) ) {
+ $known = [];
+ $unknown = [];
+ foreach ( $this->getSpecialTitles() as $title ) {
+ if ( $title->isKnown() ) {
+ $known[] = $title;
+ } else {
+ $unknown[] = $title;
+ }
+ }
+ self::addValues( $result, $unknown, [ 'special', 'missing' ] );
+ self::addValues( $result, $known, [ 'special' ] );
+ }
+ if ( in_array( 'missingIds', $invalidChecks ) ) {
+ self::addValues( $result, $this->getMissingPageIDs(), [ 'missing' ], 'pageid' );
+ }
+ if ( in_array( 'missingRevIds', $invalidChecks ) ) {
+ self::addValues( $result, $this->getMissingRevisionIDs(), [ 'missing' ], 'revid' );
+ }
+ if ( in_array( 'missingTitles', $invalidChecks ) ) {
+ $known = [];
+ $unknown = [];
+ foreach ( $this->getMissingTitles() as $title ) {
+ if ( $title->isKnown() ) {
+ $known[] = $title;
+ } else {
+ $unknown[] = $title;
+ }
+ }
+ self::addValues( $result, $unknown, [ 'missing' ] );
+ self::addValues( $result, $known, [ 'missing', 'known' ] );
+ }
+ if ( in_array( 'interwikiTitles', $invalidChecks ) ) {
+ self::addValues( $result, $this->getInterwikiTitlesAsResult() );
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get the list of valid revision IDs (requested with the revids= parameter)
+ * @return array Array of revID (int) => pageID (int)
+ */
+ public function getRevisionIDs() {
+ return $this->mGoodRevIDs;
+ }
+
+ /**
+ * Get the list of non-deleted revision IDs (requested with the revids= parameter)
+ * @return array Array of revID (int) => pageID (int)
+ */
+ public function getLiveRevisionIDs() {
+ return $this->mLiveRevIDs;
+ }
+
+ /**
+ * Get the list of revision IDs that were associated with deleted titles.
+ * @return array Array of revID (int) => pageID (int)
+ */
+ public function getDeletedRevisionIDs() {
+ return $this->mDeletedRevIDs;
+ }
+
+ /**
+ * Revision IDs that were not found in the database
+ * @return array Array of revision IDs
+ */
+ public function getMissingRevisionIDs() {
+ return $this->mMissingRevIDs;
+ }
+
+ /**
+ * Revision IDs that were not found in the database as result array.
+ * @param ApiResult $result
+ * @return array Array of revision IDs
+ * @since 1.21
+ */
+ public function getMissingRevisionIDsAsResult( $result = null ) {
+ $values = [];
+ foreach ( $this->getMissingRevisionIDs() as $revid ) {
+ $values[$revid] = [
+ 'revid' => $revid
+ ];
+ }
+ if ( !empty( $values ) && $result ) {
+ ApiResult::setIndexedTagName( $values, 'rev' );
+ }
+
+ return $values;
+ }
+
+ /**
+ * Get the list of titles with negative namespace
+ * @return Title[]
+ */
+ public function getSpecialTitles() {
+ return $this->mSpecialTitles;
+ }
+
+ /**
+ * Returns the number of revisions (requested with revids= parameter).
+ * @return int Number of revisions.
+ */
+ public function getRevisionCount() {
+ return count( $this->getRevisionIDs() );
+ }
+
+ /**
+ * Populate this PageSet from a list of Titles
+ * @param array $titles Array of Title objects
+ */
+ public function populateFromTitles( $titles ) {
+ $this->initFromTitles( $titles );
+ }
+
+ /**
+ * Populate this PageSet from a list of page IDs
+ * @param array $pageIDs Array of page IDs
+ */
+ public function populateFromPageIDs( $pageIDs ) {
+ $this->initFromPageIds( $pageIDs );
+ }
+
+ /**
+ * Populate this PageSet from a rowset returned from the database
+ *
+ * Note that the query result must include the columns returned by
+ * $this->getPageTableFields().
+ *
+ * @param IDatabase $db
+ * @param ResultWrapper $queryResult
+ */
+ public function populateFromQueryResult( $db, $queryResult ) {
+ $this->initFromQueryResult( $queryResult );
+ }
+
+ /**
+ * Populate this PageSet from a list of revision IDs
+ * @param array $revIDs Array of revision IDs
+ */
+ public function populateFromRevisionIDs( $revIDs ) {
+ $this->initFromRevIDs( $revIDs );
+ }
+
+ /**
+ * Extract all requested fields from the row received from the database
+ * @param stdClass $row Result row
+ */
+ public function processDbRow( $row ) {
+ // Store Title object in various data structures
+ $title = Title::newFromRow( $row );
+
+ LinkCache::singleton()->addGoodLinkObjFromRow( $title, $row );
+
+ $pageId = intval( $row->page_id );
+ $this->mAllPages[$row->page_namespace][$row->page_title] = $pageId;
+ $this->mTitles[] = $title;
+
+ if ( $this->mResolveRedirects && $row->page_is_redirect == '1' ) {
+ $this->mPendingRedirectIDs[$pageId] = $title;
+ } else {
+ $this->mGoodPages[$row->page_namespace][$row->page_title] = $pageId;
+ $this->mGoodAndMissingPages[$row->page_namespace][$row->page_title] = $pageId;
+ $this->mGoodTitles[$pageId] = $title;
+ }
+
+ foreach ( $this->mRequestedPageFields as $fieldName => &$fieldValues ) {
+ $fieldValues[$pageId] = $row->$fieldName;
+ }
+ }
+
+ /**
+ * This method populates internal variables with page information
+ * based on the given array of title strings.
+ *
+ * Steps:
+ * #1 For each title, get data from `page` table
+ * #2 If page was not found in the DB, store it as missing
+ *
+ * Additionally, when resolving redirects:
+ * #3 If no more redirects left, stop.
+ * #4 For each redirect, get its target from the `redirect` table.
+ * #5 Substitute the original LinkBatch object with the new list
+ * #6 Repeat from step #1
+ *
+ * @param array $titles Array of Title objects or strings
+ */
+ private function initFromTitles( $titles ) {
+ // Get validated and normalized title objects
+ $linkBatch = $this->processTitlesArray( $titles );
+ if ( $linkBatch->isEmpty() ) {
+ // There might be special-page redirects
+ $this->resolvePendingRedirects();
+ return;
+ }
+
+ $db = $this->getDB();
+ $set = $linkBatch->constructSet( 'page', $db );
+
+ // Get pageIDs data from the `page` table
+ $res = $db->select( 'page', $this->getPageTableFields(), $set,
+ __METHOD__ );
+
+ // Hack: get the ns:titles stored in [ ns => [ titles ] ] format
+ $this->initFromQueryResult( $res, $linkBatch->data, true ); // process Titles
+
+ // Resolve any found redirects
+ $this->resolvePendingRedirects();
+ }
+
+ /**
+ * Does the same as initFromTitles(), but is based on page IDs instead
+ * @param array $pageids Array of page IDs
+ */
+ private function initFromPageIds( $pageids ) {
+ if ( !$pageids ) {
+ return;
+ }
+
+ $pageids = array_map( 'intval', $pageids ); // paranoia
+ $remaining = array_flip( $pageids );
+
+ $pageids = self::getPositiveIntegers( $pageids );
+
+ $res = null;
+ if ( !empty( $pageids ) ) {
+ $set = [
+ 'page_id' => $pageids
+ ];
+ $db = $this->getDB();
+
+ // Get pageIDs data from the `page` table
+ $res = $db->select( 'page', $this->getPageTableFields(), $set,
+ __METHOD__ );
+ }
+
+ $this->initFromQueryResult( $res, $remaining, false ); // process PageIDs
+
+ // Resolve any found redirects
+ $this->resolvePendingRedirects();
+ }
+
+ /**
+ * Iterate through the result of the query on 'page' table,
+ * and for each row create and store title object and save any extra fields requested.
+ * @param ResultWrapper $res DB Query result
+ * @param array $remaining Array of either pageID or ns/title elements (optional).
+ * If given, any missing items will go to $mMissingPageIDs and $mMissingTitles
+ * @param bool $processTitles Must be provided together with $remaining.
+ * If true, treat $remaining as an array of [ns][title]
+ * If false, treat it as an array of [pageIDs]
+ */
+ private function initFromQueryResult( $res, &$remaining = null, $processTitles = null ) {
+ if ( !is_null( $remaining ) && is_null( $processTitles ) ) {
+ ApiBase::dieDebug( __METHOD__, 'Missing $processTitles parameter when $remaining is provided' );
+ }
+
+ $usernames = [];
+ if ( $res ) {
+ foreach ( $res as $row ) {
+ $pageId = intval( $row->page_id );
+
+ // Remove found page from the list of remaining items
+ if ( isset( $remaining ) ) {
+ if ( $processTitles ) {
+ unset( $remaining[$row->page_namespace][$row->page_title] );
+ } else {
+ unset( $remaining[$pageId] );
+ }
+ }
+
+ // Store any extra fields requested by modules
+ $this->processDbRow( $row );
+
+ // Need gender information
+ if ( MWNamespace::hasGenderDistinction( $row->page_namespace ) ) {
+ $usernames[] = $row->page_title;
+ }
+ }
+ }
+
+ if ( isset( $remaining ) ) {
+ // Any items left in the $remaining list are added as missing
+ if ( $processTitles ) {
+ // The remaining titles in $remaining are non-existent pages
+ $linkCache = LinkCache::singleton();
+ foreach ( $remaining as $ns => $dbkeys ) {
+ foreach ( array_keys( $dbkeys ) as $dbkey ) {
+ $title = Title::makeTitle( $ns, $dbkey );
+ $linkCache->addBadLinkObj( $title );
+ $this->mAllPages[$ns][$dbkey] = $this->mFakePageId;
+ $this->mMissingPages[$ns][$dbkey] = $this->mFakePageId;
+ $this->mGoodAndMissingPages[$ns][$dbkey] = $this->mFakePageId;
+ $this->mMissingTitles[$this->mFakePageId] = $title;
+ $this->mFakePageId--;
+ $this->mTitles[] = $title;
+
+ // need gender information
+ if ( MWNamespace::hasGenderDistinction( $ns ) ) {
+ $usernames[] = $dbkey;
+ }
+ }
+ }
+ } else {
+ // The remaining pageids do not exist
+ if ( !$this->mMissingPageIDs ) {
+ $this->mMissingPageIDs = array_keys( $remaining );
+ } else {
+ $this->mMissingPageIDs = array_merge( $this->mMissingPageIDs, array_keys( $remaining ) );
+ }
+ }
+ }
+
+ // Get gender information
+ $genderCache = MediaWikiServices::getInstance()->getGenderCache();
+ $genderCache->doQuery( $usernames, __METHOD__ );
+ }
+
+ /**
+ * Does the same as initFromTitles(), but is based on revision IDs
+ * instead
+ * @param array $revids Array of revision IDs
+ */
+ private function initFromRevIDs( $revids ) {
+ if ( !$revids ) {
+ return;
+ }
+
+ $revids = array_map( 'intval', $revids ); // paranoia
+ $db = $this->getDB();
+ $pageids = [];
+ $remaining = array_flip( $revids );
+
+ $revids = self::getPositiveIntegers( $revids );
+
+ if ( !empty( $revids ) ) {
+ $tables = [ 'revision', 'page' ];
+ $fields = [ 'rev_id', 'rev_page' ];
+ $where = [ 'rev_id' => $revids, 'rev_page = page_id' ];
+
+ // Get pageIDs data from the `page` table
+ $res = $db->select( $tables, $fields, $where, __METHOD__ );
+ foreach ( $res as $row ) {
+ $revid = intval( $row->rev_id );
+ $pageid = intval( $row->rev_page );
+ $this->mGoodRevIDs[$revid] = $pageid;
+ $this->mLiveRevIDs[$revid] = $pageid;
+ $pageids[$pageid] = '';
+ unset( $remaining[$revid] );
+ }
+ }
+
+ $this->mMissingRevIDs = array_keys( $remaining );
+
+ // Populate all the page information
+ $this->initFromPageIds( array_keys( $pageids ) );
+
+ // If the user can see deleted revisions, pull out the corresponding
+ // titles from the archive table and include them too. We ignore
+ // ar_page_id because deleted revisions are tied by title, not page_id.
+ if ( !empty( $this->mMissingRevIDs ) && $this->getUser()->isAllowed( 'deletedhistory' ) ) {
+ $remaining = array_flip( $this->mMissingRevIDs );
+ $tables = [ 'archive' ];
+ $fields = [ 'ar_rev_id', 'ar_namespace', 'ar_title' ];
+ $where = [ 'ar_rev_id' => $this->mMissingRevIDs ];
+
+ $res = $db->select( $tables, $fields, $where, __METHOD__ );
+ $titles = [];
+ foreach ( $res as $row ) {
+ $revid = intval( $row->ar_rev_id );
+ $titles[$revid] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ unset( $remaining[$revid] );
+ }
+
+ $this->initFromTitles( $titles );
+
+ foreach ( $titles as $revid => $title ) {
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+
+ // Handle converted titles
+ if ( !isset( $this->mAllPages[$ns][$dbkey] ) &&
+ isset( $this->mConvertedTitles[$title->getPrefixedText()] )
+ ) {
+ $title = Title::newFromText( $this->mConvertedTitles[$title->getPrefixedText()] );
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+ }
+
+ if ( isset( $this->mAllPages[$ns][$dbkey] ) ) {
+ $this->mGoodRevIDs[$revid] = $this->mAllPages[$ns][$dbkey];
+ $this->mDeletedRevIDs[$revid] = $this->mAllPages[$ns][$dbkey];
+ } else {
+ $remaining[$revid] = true;
+ }
+ }
+
+ $this->mMissingRevIDs = array_keys( $remaining );
+ }
+ }
+
+ /**
+ * Resolve any redirects in the result if redirect resolution was
+ * requested. This function is called repeatedly until all redirects
+ * have been resolved.
+ */
+ private function resolvePendingRedirects() {
+ if ( $this->mResolveRedirects ) {
+ $db = $this->getDB();
+ $pageFlds = $this->getPageTableFields();
+
+ // Repeat until all redirects have been resolved
+ // The infinite loop is prevented by keeping all known pages in $this->mAllPages
+ while ( $this->mPendingRedirectIDs || $this->mPendingRedirectSpecialPages ) {
+ // Resolve redirects by querying the pagelinks table, and repeat the process
+ // Create a new linkBatch object for the next pass
+ $linkBatch = $this->getRedirectTargets();
+
+ if ( $linkBatch->isEmpty() ) {
+ break;
+ }
+
+ $set = $linkBatch->constructSet( 'page', $db );
+ if ( $set === false ) {
+ break;
+ }
+
+ // Get pageIDs data from the `page` table
+ $res = $db->select( 'page', $pageFlds, $set, __METHOD__ );
+
+ // Hack: get the ns:titles stored in [ns => array(titles)] format
+ $this->initFromQueryResult( $res, $linkBatch->data, true );
+ }
+ }
+ }
+
+ /**
+ * Get the targets of the pending redirects from the database
+ *
+ * Also creates entries in the redirect table for redirects that don't
+ * have one.
+ * @return LinkBatch
+ */
+ private function getRedirectTargets() {
+ $titlesToResolve = [];
+ $db = $this->getDB();
+
+ if ( $this->mPendingRedirectIDs ) {
+ $res = $db->select(
+ 'redirect',
+ [
+ 'rd_from',
+ 'rd_namespace',
+ 'rd_fragment',
+ 'rd_interwiki',
+ 'rd_title'
+ ], [ 'rd_from' => array_keys( $this->mPendingRedirectIDs ) ],
+ __METHOD__
+ );
+ foreach ( $res as $row ) {
+ $rdfrom = intval( $row->rd_from );
+ $from = $this->mPendingRedirectIDs[$rdfrom]->getPrefixedText();
+ $to = Title::makeTitle(
+ $row->rd_namespace,
+ $row->rd_title,
+ $row->rd_fragment,
+ $row->rd_interwiki
+ );
+ $this->mResolvedRedirectTitles[$from] = $this->mPendingRedirectIDs[$rdfrom];
+ unset( $this->mPendingRedirectIDs[$rdfrom] );
+ if ( $to->isExternal() ) {
+ $this->mInterwikiTitles[$to->getPrefixedText()] = $to->getInterwiki();
+ } elseif ( !isset( $this->mAllPages[$to->getNamespace()][$to->getDBkey()] ) ) {
+ $titlesToResolve[] = $to;
+ }
+ $this->mRedirectTitles[$from] = $to;
+ }
+
+ if ( $this->mPendingRedirectIDs ) {
+ // We found pages that aren't in the redirect table
+ // Add them
+ foreach ( $this->mPendingRedirectIDs as $id => $title ) {
+ $page = WikiPage::factory( $title );
+ $rt = $page->insertRedirect();
+ if ( !$rt ) {
+ // What the hell. Let's just ignore this
+ continue;
+ }
+ if ( $rt->isExternal() ) {
+ $this->mInterwikiTitles[$rt->getPrefixedText()] = $rt->getInterwiki();
+ } elseif ( !isset( $this->mAllPages[$rt->getNamespace()][$rt->getDBkey()] ) ) {
+ $titlesToResolve[] = $rt;
+ }
+ $from = $title->getPrefixedText();
+ $this->mResolvedRedirectTitles[$from] = $title;
+ $this->mRedirectTitles[$from] = $rt;
+ unset( $this->mPendingRedirectIDs[$id] );
+ }
+ }
+ }
+
+ if ( $this->mPendingRedirectSpecialPages ) {
+ foreach ( $this->mPendingRedirectSpecialPages as $key => list( $from, $to ) ) {
+ $fromKey = $from->getPrefixedText();
+ $this->mResolvedRedirectTitles[$fromKey] = $from;
+ $this->mRedirectTitles[$fromKey] = $to;
+ if ( $to->isExternal() ) {
+ $this->mInterwikiTitles[$to->getPrefixedText()] = $to->getInterwiki();
+ } elseif ( !isset( $this->mAllPages[$to->getNamespace()][$to->getDBkey()] ) ) {
+ $titlesToResolve[] = $to;
+ }
+ }
+ $this->mPendingRedirectSpecialPages = [];
+
+ // Set private caching since we don't know what criteria the
+ // special pages used to decide on these redirects.
+ $this->mCacheMode = 'private';
+ }
+
+ return $this->processTitlesArray( $titlesToResolve );
+ }
+
+ /**
+ * Get the cache mode for the data generated by this module.
+ * All PageSet users should take into account whether this returns a more-restrictive
+ * cache mode than the using module itself. For possible return values and other
+ * details about cache modes, see ApiMain::setCacheMode()
+ *
+ * Public caching will only be allowed if *all* the modules that supply
+ * data for a given request return a cache mode of public.
+ *
+ * @param array|null $params
+ * @return string
+ * @since 1.21
+ */
+ public function getCacheMode( $params = null ) {
+ return $this->mCacheMode;
+ }
+
+ /**
+ * Given an array of title strings, convert them into Title objects.
+ * Alternatively, an array of Title objects may be given.
+ * This method validates access rights for the title,
+ * and appends normalization values to the output.
+ *
+ * @param array $titles Array of Title objects or strings
+ * @return LinkBatch
+ */
+ private function processTitlesArray( $titles ) {
+ $usernames = [];
+ $linkBatch = new LinkBatch();
+
+ foreach ( $titles as $title ) {
+ if ( is_string( $title ) ) {
+ try {
+ $titleObj = Title::newFromTextThrow( $title, $this->mDefaultNamespace );
+ } catch ( MalformedTitleException $ex ) {
+ // Handle invalid titles gracefully
+ if ( !isset( $this->mAllPages[0][$title] ) ) {
+ $this->mAllPages[0][$title] = $this->mFakePageId;
+ $this->mInvalidTitles[$this->mFakePageId] = [
+ 'title' => $title,
+ 'invalidreason' => $this->getErrorFormatter()->formatException( $ex, [ 'bc' => true ] ),
+ ];
+ $this->mFakePageId--;
+ }
+ continue; // There's nothing else we can do
+ }
+ } else {
+ $titleObj = $title;
+ }
+ $unconvertedTitle = $titleObj->getPrefixedText();
+ $titleWasConverted = false;
+ if ( $titleObj->isExternal() ) {
+ // This title is an interwiki link.
+ $this->mInterwikiTitles[$unconvertedTitle] = $titleObj->getInterwiki();
+ } else {
+ // Variants checking
+ global $wgContLang;
+ if ( $this->mConvertTitles &&
+ count( $wgContLang->getVariants() ) > 1 &&
+ !$titleObj->exists()
+ ) {
+ // Language::findVariantLink will modify titleText and titleObj into
+ // the canonical variant if possible
+ $titleText = is_string( $title ) ? $title : $titleObj->getPrefixedText();
+ $wgContLang->findVariantLink( $titleText, $titleObj );
+ $titleWasConverted = $unconvertedTitle !== $titleObj->getPrefixedText();
+ }
+
+ if ( $titleObj->getNamespace() < 0 ) {
+ // Handle Special and Media pages
+ $titleObj = $titleObj->fixSpecialName();
+ $ns = $titleObj->getNamespace();
+ $dbkey = $titleObj->getDBkey();
+ if ( !isset( $this->mAllSpecials[$ns][$dbkey] ) ) {
+ $this->mAllSpecials[$ns][$dbkey] = $this->mFakePageId;
+ $target = null;
+ if ( $ns === NS_SPECIAL && $this->mResolveRedirects ) {
+ $special = SpecialPageFactory::getPage( $dbkey );
+ if ( $special instanceof RedirectSpecialArticle ) {
+ // Only RedirectSpecialArticle is intended to redirect to an article, other kinds of
+ // RedirectSpecialPage are probably applying weird URL parameters we don't want to handle.
+ $context = new DerivativeContext( $this );
+ $context->setTitle( $titleObj );
+ $context->setRequest( new FauxRequest );
+ $special->setContext( $context );
+ list( /* $alias */, $subpage ) = SpecialPageFactory::resolveAlias( $dbkey );
+ $target = $special->getRedirect( $subpage );
+ }
+ }
+ if ( $target ) {
+ $this->mPendingRedirectSpecialPages[$dbkey] = [ $titleObj, $target ];
+ } else {
+ $this->mSpecialTitles[$this->mFakePageId] = $titleObj;
+ $this->mFakePageId--;
+ }
+ }
+ } else {
+ // Regular page
+ $linkBatch->addObj( $titleObj );
+ }
+ }
+
+ // Make sure we remember the original title that was
+ // given to us. This way the caller can correlate new
+ // titles with the originally requested when e.g. the
+ // namespace is localized or the capitalization is
+ // different
+ if ( $titleWasConverted ) {
+ $this->mConvertedTitles[$unconvertedTitle] = $titleObj->getPrefixedText();
+ // In this case the page can't be Special.
+ if ( is_string( $title ) && $title !== $unconvertedTitle ) {
+ $this->mNormalizedTitles[$title] = $unconvertedTitle;
+ }
+ } elseif ( is_string( $title ) && $title !== $titleObj->getPrefixedText() ) {
+ $this->mNormalizedTitles[$title] = $titleObj->getPrefixedText();
+ }
+
+ // Need gender information
+ if ( MWNamespace::hasGenderDistinction( $titleObj->getNamespace() ) ) {
+ $usernames[] = $titleObj->getText();
+ }
+ }
+ // Get gender information
+ $genderCache = MediaWikiServices::getInstance()->getGenderCache();
+ $genderCache->doQuery( $usernames, __METHOD__ );
+
+ return $linkBatch;
+ }
+
+ /**
+ * Set data for a title.
+ *
+ * This data may be extracted into an ApiResult using
+ * self::populateGeneratorData. This should generally be limited to
+ * data that is likely to be particularly useful to end users rather than
+ * just being a dump of everything returned in non-generator mode.
+ *
+ * Redirects here will *not* be followed, even if 'redirects' was
+ * specified, since in the case of multiple redirects we can't know which
+ * source's data to use on the target.
+ *
+ * @param Title $title
+ * @param array $data
+ */
+ public function setGeneratorData( Title $title, array $data ) {
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+ $this->mGeneratorData[$ns][$dbkey] = $data;
+ }
+
+ /**
+ * Controls how generator data about a redirect source is merged into
+ * the generator data for the redirect target. When not set no data
+ * is merged. Note that if multiple titles redirect to the same target
+ * the order of operations is undefined.
+ *
+ * Example to include generated data from redirect in target, prefering
+ * the data generated for the destination when there is a collision:
+ * @code
+ * $pageSet->setRedirectMergePolicy( function( array $current, array $new ) {
+ * return $current + $new;
+ * } );
+ * @endcode
+ *
+ * @param callable|null $callable Recieves two array arguments, first the
+ * generator data for the redirect target and second the generator data
+ * for the redirect source. Returns the resulting generator data to use
+ * for the redirect target.
+ */
+ public function setRedirectMergePolicy( $callable ) {
+ $this->mRedirectMergePolicy = $callable;
+ }
+
+ /**
+ * Populate the generator data for all titles in the result
+ *
+ * The page data may be inserted into an ApiResult object or into an
+ * associative array. The $path parameter specifies the path within the
+ * ApiResult or array to find the "pages" node.
+ *
+ * The "pages" node itself must be an associative array mapping the page ID
+ * or fake page ID values returned by this pageset (see
+ * self::getAllTitlesByNamespace() and self::getSpecialTitles()) to
+ * associative arrays of page data. Each of those subarrays will have the
+ * data from self::setGeneratorData() merged in.
+ *
+ * Data that was set by self::setGeneratorData() for pages not in the
+ * "pages" node will be ignored.
+ *
+ * @param ApiResult|array &$result
+ * @param array $path
+ * @return bool Whether the data fit
+ */
+ public function populateGeneratorData( &$result, array $path = [] ) {
+ if ( $result instanceof ApiResult ) {
+ $data = $result->getResultData( $path );
+ if ( $data === null ) {
+ return true;
+ }
+ } else {
+ $data = &$result;
+ foreach ( $path as $key ) {
+ if ( !isset( $data[$key] ) ) {
+ // Path isn't in $result, so nothing to add, so everything
+ // "fits"
+ return true;
+ }
+ $data = &$data[$key];
+ }
+ }
+ foreach ( $this->mGeneratorData as $ns => $dbkeys ) {
+ if ( $ns === NS_SPECIAL ) {
+ $pages = [];
+ foreach ( $this->mSpecialTitles as $id => $title ) {
+ $pages[$title->getDBkey()] = $id;
+ }
+ } else {
+ if ( !isset( $this->mAllPages[$ns] ) ) {
+ // No known titles in the whole namespace. Skip it.
+ continue;
+ }
+ $pages = $this->mAllPages[$ns];
+ }
+ foreach ( $dbkeys as $dbkey => $genData ) {
+ if ( !isset( $pages[$dbkey] ) ) {
+ // Unknown title. Forget it.
+ continue;
+ }
+ $pageId = $pages[$dbkey];
+ if ( !isset( $data[$pageId] ) ) {
+ // $pageId didn't make it into the result. Ignore it.
+ continue;
+ }
+
+ if ( $result instanceof ApiResult ) {
+ $path2 = array_merge( $path, [ $pageId ] );
+ foreach ( $genData as $key => $value ) {
+ if ( !$result->addValue( $path2, $key, $value ) ) {
+ return false;
+ }
+ }
+ } else {
+ $data[$pageId] = array_merge( $data[$pageId], $genData );
+ }
+ }
+ }
+
+ // Merge data generated about redirect titles into the redirect destination
+ if ( $this->mRedirectMergePolicy ) {
+ foreach ( $this->mResolvedRedirectTitles as $titleFrom ) {
+ $dest = $titleFrom;
+ while ( isset( $this->mRedirectTitles[$dest->getPrefixedText()] ) ) {
+ $dest = $this->mRedirectTitles[$dest->getPrefixedText()];
+ }
+ $fromNs = $titleFrom->getNamespace();
+ $fromDBkey = $titleFrom->getDBkey();
+ $toPageId = $dest->getArticleID();
+ if ( isset( $data[$toPageId] ) &&
+ isset( $this->mGeneratorData[$fromNs][$fromDBkey] )
+ ) {
+ // It is necesary to set both $data and add to $result, if an ApiResult,
+ // to ensure multiple redirects to the same destination are all merged.
+ $data[$toPageId] = call_user_func(
+ $this->mRedirectMergePolicy,
+ $data[$toPageId],
+ $this->mGeneratorData[$fromNs][$fromDBkey]
+ );
+ if ( $result instanceof ApiResult ) {
+ if ( !$result->addValue( $path, $toPageId, $data[$toPageId], ApiResult::OVERRIDE ) ) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the database connection (read-only)
+ * @return IDatabase
+ */
+ protected function getDB() {
+ return $this->mDbSource->getDB();
+ }
+
+ /**
+ * Returns the input array of integers with all values < 0 removed
+ *
+ * @param array $array
+ * @return array
+ */
+ private static function getPositiveIntegers( $array ) {
+ // T27734 API: possible issue with revids validation
+ // It seems with a load of revision rows, MySQL gets upset
+ // Remove any < 0 integers, as they can't be valid
+ foreach ( $array as $i => $int ) {
+ if ( $int < 0 ) {
+ unset( $array[$i] );
+ }
+ }
+
+ return $array;
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $result = [
+ 'titles' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-titles',
+ ],
+ 'pageids' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-pageids',
+ ],
+ 'revids' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-revids',
+ ],
+ 'generator' => [
+ ApiBase::PARAM_TYPE => null,
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-generator',
+ ApiBase::PARAM_SUBMODULE_PARAM_PREFIX => 'g',
+ ],
+ 'redirects' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => $this->mAllowGenerator
+ ? 'api-pageset-param-redirects-generator'
+ : 'api-pageset-param-redirects-nogenerator',
+ ],
+ 'converttitles' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => [
+ 'api-pageset-param-converttitles',
+ [ Message::listParam( LanguageConverter::$languagesWithVariants, 'text' ) ],
+ ],
+ ],
+ ];
+
+ if ( !$this->mAllowGenerator ) {
+ unset( $result['generator'] );
+ } elseif ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
+ $result['generator'][ApiBase::PARAM_TYPE] = 'submodule';
+ $result['generator'][ApiBase::PARAM_SUBMODULE_MAP] = $this->getGenerators();
+ }
+
+ return $result;
+ }
+
+ protected function handleParamNormalization( $paramName, $value, $rawValue ) {
+ parent::handleParamNormalization( $paramName, $value, $rawValue );
+
+ if ( $paramName === 'titles' ) {
+ // For the 'titles' parameter, we want to split it like ApiBase would
+ // and add any changed titles to $this->mNormalizedTitles
+ $value = $this->explodeMultiValue( $value, self::LIMIT_SML2 + 1 );
+ $l = count( $value );
+ $rawValue = $this->explodeMultiValue( $rawValue, $l );
+ for ( $i = 0; $i < $l; $i++ ) {
+ if ( $value[$i] !== $rawValue[$i] ) {
+ $this->mNormalizedTitles[$rawValue[$i]] = $value[$i];
+ }
+ }
+ }
+ }
+
+ private static $generators = null;
+
+ /**
+ * Get an array of all available generators
+ * @return array
+ */
+ private function getGenerators() {
+ if ( self::$generators === null ) {
+ $query = $this->mDbSource;
+ if ( !( $query instanceof ApiQuery ) ) {
+ // If the parent container of this pageset is not ApiQuery,
+ // we must create it to get module manager
+ $query = $this->getMain()->getModuleManager()->getModule( 'query' );
+ }
+ $gens = [];
+ $prefix = $query->getModulePath() . '+';
+ $mgr = $query->getModuleManager();
+ foreach ( $mgr->getNamesWithClasses() as $name => $class ) {
+ if ( is_subclass_of( $class, ApiQueryGeneratorBase::class ) ) {
+ $gens[$name] = $prefix . $name;
+ }
+ }
+ ksort( $gens );
+ self::$generators = $gens;
+ }
+
+ return self::$generators;
+ }
+}
diff --git a/www/wiki/includes/api/ApiParamInfo.php b/www/wiki/includes/api/ApiParamInfo.php
new file mode 100644
index 00000000..bfd3d614
--- /dev/null
+++ b/www/wiki/includes/api/ApiParamInfo.php
@@ -0,0 +1,583 @@
+<?php
+/**
+ * Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiParamInfo extends ApiBase {
+
+ private $helpFormat;
+ private $context;
+
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action );
+ }
+
+ public function execute() {
+ // Get parameters
+ $params = $this->extractRequestParams();
+
+ $this->helpFormat = $params['helpformat'];
+ $this->context = new RequestContext;
+ $this->context->setUser( new User ); // anon to avoid caching issues
+ $this->context->setLanguage( $this->getMain()->getLanguage() );
+
+ if ( is_array( $params['modules'] ) ) {
+ $modules = [];
+ foreach ( $params['modules'] as $path ) {
+ if ( $path === '*' || $path === '**' ) {
+ $path = "main+$path";
+ }
+ if ( substr( $path, -2 ) === '+*' || substr( $path, -2 ) === ' *' ) {
+ $submodules = true;
+ $path = substr( $path, 0, -2 );
+ $recursive = false;
+ } elseif ( substr( $path, -3 ) === '+**' || substr( $path, -3 ) === ' **' ) {
+ $submodules = true;
+ $path = substr( $path, 0, -3 );
+ $recursive = true;
+ } else {
+ $submodules = false;
+ }
+
+ if ( $submodules ) {
+ try {
+ $module = $this->getModuleFromPath( $path );
+ } catch ( ApiUsageException $ex ) {
+ foreach ( $ex->getStatusValue()->getErrors() as $error ) {
+ $this->addWarning( $error );
+ }
+ continue;
+ }
+ $submodules = $this->listAllSubmodules( $module, $recursive );
+ if ( $submodules ) {
+ $modules = array_merge( $modules, $submodules );
+ } else {
+ $this->addWarning( [ 'apierror-badmodule-nosubmodules', $path ], 'badmodule' );
+ }
+ } else {
+ $modules[] = $path;
+ }
+ }
+ } else {
+ $modules = [];
+ }
+
+ if ( is_array( $params['querymodules'] ) ) {
+ $queryModules = $params['querymodules'];
+ foreach ( $queryModules as $m ) {
+ $modules[] = 'query+' . $m;
+ }
+ } else {
+ $queryModules = [];
+ }
+
+ if ( is_array( $params['formatmodules'] ) ) {
+ $formatModules = $params['formatmodules'];
+ foreach ( $formatModules as $m ) {
+ $modules[] = $m;
+ }
+ } else {
+ $formatModules = [];
+ }
+
+ $modules = array_unique( $modules );
+
+ $res = [];
+
+ foreach ( $modules as $m ) {
+ try {
+ $module = $this->getModuleFromPath( $m );
+ } catch ( ApiUsageException $ex ) {
+ foreach ( $ex->getStatusValue()->getErrors() as $error ) {
+ $this->addWarning( $error );
+ }
+ continue;
+ }
+ $key = 'modules';
+
+ // Back compat
+ $isBCQuery = false;
+ if ( $module->getParent() && $module->getParent()->getModuleName() == 'query' &&
+ in_array( $module->getModuleName(), $queryModules )
+ ) {
+ $isBCQuery = true;
+ $key = 'querymodules';
+ }
+ if ( in_array( $module->getModuleName(), $formatModules ) ) {
+ $key = 'formatmodules';
+ }
+
+ $item = $this->getModuleInfo( $module );
+ if ( $isBCQuery ) {
+ $item['querytype'] = $item['group'];
+ }
+ $res[$key][] = $item;
+ }
+
+ $result = $this->getResult();
+ $result->addValue( [ $this->getModuleName() ], 'helpformat', $this->helpFormat );
+
+ foreach ( $res as $key => $stuff ) {
+ ApiResult::setIndexedTagName( $res[$key], 'module' );
+ }
+
+ if ( $params['mainmodule'] ) {
+ $res['mainmodule'] = $this->getModuleInfo( $this->getMain() );
+ }
+
+ if ( $params['pagesetmodule'] ) {
+ $pageSet = new ApiPageSet( $this->getMain()->getModuleManager()->getModule( 'query' ) );
+ $res['pagesetmodule'] = $this->getModuleInfo( $pageSet );
+ unset( $res['pagesetmodule']['name'] );
+ unset( $res['pagesetmodule']['path'] );
+ unset( $res['pagesetmodule']['group'] );
+ }
+
+ $result->addValue( null, $this->getModuleName(), $res );
+ }
+
+ /**
+ * List all submodules of a module
+ * @param ApiBase $module
+ * @param bool $recursive
+ * @return string[]
+ */
+ private function listAllSubmodules( ApiBase $module, $recursive ) {
+ $manager = $module->getModuleManager();
+ if ( $manager ) {
+ $paths = [];
+ $names = $manager->getNames();
+ sort( $names );
+ foreach ( $names as $name ) {
+ $submodule = $manager->getModule( $name );
+ $paths[] = $submodule->getModulePath();
+ if ( $recursive && $submodule->getModuleManager() ) {
+ $paths = array_merge( $paths, $this->listAllSubmodules( $submodule, $recursive ) );
+ }
+ }
+ }
+ return $paths;
+ }
+
+ /**
+ * @param array &$res Result array
+ * @param string $key Result key
+ * @param Message[] $msgs
+ * @param bool $joinLists
+ */
+ protected function formatHelpMessages( array &$res, $key, array $msgs, $joinLists = false ) {
+ switch ( $this->helpFormat ) {
+ case 'none':
+ break;
+
+ case 'wikitext':
+ $ret = [];
+ foreach ( $msgs as $m ) {
+ $ret[] = $m->setContext( $this->context )->text();
+ }
+ $res[$key] = implode( "\n\n", $ret );
+ if ( $joinLists ) {
+ $res[$key] = preg_replace( '!^(([*#:;])[^\n]*)\n\n(?=\2)!m', "$1\n", $res[$key] );
+ }
+ break;
+
+ case 'html':
+ $ret = [];
+ foreach ( $msgs as $m ) {
+ $ret[] = $m->setContext( $this->context )->parseAsBlock();
+ }
+ $ret = implode( "\n", $ret );
+ if ( $joinLists ) {
+ $ret = preg_replace( '!\s*</([oud]l)>\s*<\1>\s*!', "\n", $ret );
+ }
+ $res[$key] = Parser::stripOuterParagraph( $ret );
+ break;
+
+ case 'raw':
+ $res[$key] = [];
+ foreach ( $msgs as $m ) {
+ $a = [
+ 'key' => $m->getKey(),
+ 'params' => $m->getParams(),
+ ];
+ ApiResult::setIndexedTagName( $a['params'], 'param' );
+ if ( $m instanceof ApiHelpParamValueMessage ) {
+ $a['forvalue'] = $m->getParamValue();
+ }
+ $res[$key][] = $a;
+ }
+ ApiResult::setIndexedTagName( $res[$key], 'msg' );
+ break;
+ }
+ }
+
+ /**
+ * @param ApiBase $module
+ * @return array
+ */
+ private function getModuleInfo( $module ) {
+ $ret = [];
+ $path = $module->getModulePath();
+
+ $ret['name'] = $module->getModuleName();
+ $ret['classname'] = get_class( $module );
+ $ret['path'] = $path;
+ if ( !$module->isMain() ) {
+ $ret['group'] = $module->getParent()->getModuleManager()->getModuleGroup(
+ $module->getModuleName()
+ );
+ }
+ $ret['prefix'] = $module->getModulePrefix();
+
+ $sourceInfo = $module->getModuleSourceInfo();
+ if ( $sourceInfo ) {
+ $ret['source'] = $sourceInfo['name'];
+ if ( isset( $sourceInfo['namemsg'] ) ) {
+ $ret['sourcename'] = $this->context->msg( $sourceInfo['namemsg'] )->text();
+ } else {
+ $ret['sourcename'] = $ret['source'];
+ }
+
+ $link = SpecialPage::getTitleFor( 'Version', 'License/' . $sourceInfo['name'] )->getFullURL();
+ if ( isset( $sourceInfo['license-name'] ) ) {
+ $ret['licensetag'] = $sourceInfo['license-name'];
+ $ret['licenselink'] = (string)$link;
+ } elseif ( SpecialVersion::getExtLicenseFileName( dirname( $sourceInfo['path'] ) ) ) {
+ $ret['licenselink'] = (string)$link;
+ }
+ }
+
+ $this->formatHelpMessages( $ret, 'description', $module->getFinalDescription() );
+
+ foreach ( $module->getHelpFlags() as $flag ) {
+ $ret[$flag] = true;
+ }
+
+ $ret['helpurls'] = (array)$module->getHelpUrls();
+ if ( isset( $ret['helpurls'][0] ) && $ret['helpurls'][0] === false ) {
+ $ret['helpurls'] = [];
+ }
+ ApiResult::setIndexedTagName( $ret['helpurls'], 'helpurl' );
+
+ if ( $this->helpFormat !== 'none' ) {
+ $ret['examples'] = [];
+ $examples = $module->getExamplesMessages();
+ foreach ( $examples as $qs => $msg ) {
+ $item = [
+ 'query' => $qs
+ ];
+ $msg = ApiBase::makeMessage( $msg, $this->context, [
+ $module->getModulePrefix(),
+ $module->getModuleName(),
+ $module->getModulePath()
+ ] );
+ $this->formatHelpMessages( $item, 'description', [ $msg ] );
+ if ( isset( $item['description'] ) ) {
+ if ( is_array( $item['description'] ) ) {
+ $item['description'] = $item['description'][0];
+ } else {
+ ApiResult::setSubelementsList( $item, 'description' );
+ }
+ }
+ $ret['examples'][] = $item;
+ }
+ ApiResult::setIndexedTagName( $ret['examples'], 'example' );
+ }
+
+ $ret['parameters'] = [];
+ $params = $module->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+ $paramDesc = $module->getFinalParamDescription();
+ foreach ( $params as $name => $settings ) {
+ if ( !is_array( $settings ) ) {
+ $settings = [ ApiBase::PARAM_DFLT => $settings ];
+ }
+
+ $item = [
+ 'name' => $name
+ ];
+ if ( isset( $paramDesc[$name] ) ) {
+ $this->formatHelpMessages( $item, 'description', $paramDesc[$name], true );
+ }
+
+ $item['required'] = !empty( $settings[ApiBase::PARAM_REQUIRED] );
+
+ if ( !empty( $settings[ApiBase::PARAM_DEPRECATED] ) ) {
+ $item['deprecated'] = true;
+ }
+
+ if ( $name === 'token' && $module->needsToken() ) {
+ $item['tokentype'] = $module->needsToken();
+ }
+
+ if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
+ ? $settings[ApiBase::PARAM_DFLT]
+ : null;
+ if ( is_bool( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'boolean';
+ } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'string';
+ } elseif ( is_int( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'integer';
+ }
+ }
+
+ if ( isset( $settings[ApiBase::PARAM_DFLT] ) ) {
+ switch ( $settings[ApiBase::PARAM_TYPE] ) {
+ case 'boolean':
+ $item['default'] = (bool)$settings[ApiBase::PARAM_DFLT];
+ break;
+ case 'string':
+ case 'text':
+ case 'password':
+ $item['default'] = strval( $settings[ApiBase::PARAM_DFLT] );
+ break;
+ case 'integer':
+ case 'limit':
+ $item['default'] = intval( $settings[ApiBase::PARAM_DFLT] );
+ break;
+ case 'timestamp':
+ $item['default'] = wfTimestamp( TS_ISO_8601, $settings[ApiBase::PARAM_DFLT] );
+ break;
+ default:
+ $item['default'] = $settings[ApiBase::PARAM_DFLT];
+ break;
+ }
+ }
+
+ $item['multi'] = !empty( $settings[ApiBase::PARAM_ISMULTI] );
+ if ( $item['multi'] ) {
+ $item['lowlimit'] = !empty( $settings[ApiBase::PARAM_ISMULTI_LIMIT1] )
+ ? $settings[ApiBase::PARAM_ISMULTI_LIMIT1]
+ : ApiBase::LIMIT_SML1;
+ $item['highlimit'] = !empty( $settings[ApiBase::PARAM_ISMULTI_LIMIT2] )
+ ? $settings[ApiBase::PARAM_ISMULTI_LIMIT2]
+ : ApiBase::LIMIT_SML2;
+ $item['limit'] = $this->getMain()->canApiHighLimits()
+ ? $item['highlimit']
+ : $item['lowlimit'];
+ }
+
+ if ( !empty( $settings[ApiBase::PARAM_ALLOW_DUPLICATES] ) ) {
+ $item['allowsduplicates'] = true;
+ }
+
+ if ( isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ if ( $settings[ApiBase::PARAM_TYPE] === 'submodule' ) {
+ if ( isset( $settings[ApiBase::PARAM_SUBMODULE_MAP] ) ) {
+ ksort( $settings[ApiBase::PARAM_SUBMODULE_MAP] );
+ $item['type'] = array_keys( $settings[ApiBase::PARAM_SUBMODULE_MAP] );
+ $item['submodules'] = $settings[ApiBase::PARAM_SUBMODULE_MAP];
+ } else {
+ $item['type'] = $module->getModuleManager()->getNames( $name );
+ sort( $item['type'] );
+ $prefix = $module->isMain()
+ ? '' : ( $module->getModulePath() . '+' );
+ $item['submodules'] = [];
+ foreach ( $item['type'] as $v ) {
+ $item['submodules'][$v] = $prefix . $v;
+ }
+ }
+ if ( isset( $settings[ApiBase::PARAM_SUBMODULE_PARAM_PREFIX] ) ) {
+ $item['submoduleparamprefix'] = $settings[ApiBase::PARAM_SUBMODULE_PARAM_PREFIX];
+ }
+
+ $deprecatedSubmodules = [];
+ foreach ( $item['submodules'] as $v => $submodulePath ) {
+ try {
+ $submod = $this->getModuleFromPath( $submodulePath );
+ if ( $submod && $submod->isDeprecated() ) {
+ $deprecatedSubmodules[] = $v;
+ }
+ } catch ( ApiUsageException $ex ) {
+ // Ignore
+ }
+ }
+ if ( $deprecatedSubmodules ) {
+ $item['type'] = array_merge(
+ array_diff( $item['type'], $deprecatedSubmodules ),
+ $deprecatedSubmodules
+ );
+ $item['deprecatedvalues'] = $deprecatedSubmodules;
+ }
+ } elseif ( $settings[ApiBase::PARAM_TYPE] === 'tags' ) {
+ $item['type'] = ChangeTags::listExplicitlyDefinedTags();
+ } else {
+ $item['type'] = $settings[ApiBase::PARAM_TYPE];
+ }
+ if ( is_array( $item['type'] ) ) {
+ // To prevent sparse arrays from being serialized to JSON as objects
+ $item['type'] = array_values( $item['type'] );
+ ApiResult::setIndexedTagName( $item['type'], 't' );
+ }
+
+ // Add 'allspecifier' if applicable
+ if ( $item['type'] === 'namespace' ) {
+ $allowAll = true;
+ $allSpecifier = ApiBase::ALL_DEFAULT_STRING;
+ } else {
+ $allowAll = isset( $settings[ApiBase::PARAM_ALL] )
+ ? $settings[ApiBase::PARAM_ALL]
+ : false;
+ $allSpecifier = ( is_string( $allowAll ) ? $allowAll : ApiBase::ALL_DEFAULT_STRING );
+ }
+ if ( $allowAll && $item['multi'] &&
+ ( is_array( $item['type'] ) || $item['type'] === 'namespace' ) ) {
+ $item['allspecifier'] = $allSpecifier;
+ }
+
+ if ( $item['type'] === 'namespace' &&
+ isset( $settings[ApiBase::PARAM_EXTRA_NAMESPACES] ) &&
+ is_array( $settings[ApiBase::PARAM_EXTRA_NAMESPACES] )
+ ) {
+ $item['extranamespaces'] = $settings[ApiBase::PARAM_EXTRA_NAMESPACES];
+ ApiResult::setArrayType( $item['extranamespaces'], 'array' );
+ ApiResult::setIndexedTagName( $item['extranamespaces'], 'ns' );
+ }
+ }
+ if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
+ $item['max'] = $settings[ApiBase::PARAM_MAX];
+ }
+ if ( isset( $settings[ApiBase::PARAM_MAX2] ) ) {
+ $item['highmax'] = $settings[ApiBase::PARAM_MAX2];
+ }
+ if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
+ $item['min'] = $settings[ApiBase::PARAM_MIN];
+ }
+ if ( !empty( $settings[ApiBase::PARAM_RANGE_ENFORCE] ) ) {
+ $item['enforcerange'] = true;
+ }
+ if ( isset( $settings[self::PARAM_MAX_BYTES] ) ) {
+ $item['maxbytes'] = $settings[self::PARAM_MAX_BYTES];
+ }
+ if ( isset( $settings[self::PARAM_MAX_CHARS] ) ) {
+ $item['maxchars'] = $settings[self::PARAM_MAX_CHARS];
+ }
+ if ( !empty( $settings[ApiBase::PARAM_DEPRECATED_VALUES] ) ) {
+ $deprecatedValues = array_keys( $settings[ApiBase::PARAM_DEPRECATED_VALUES] );
+ if ( is_array( $item['type'] ) ) {
+ $deprecatedValues = array_intersect( $deprecatedValues, $item['type'] );
+ }
+ if ( $deprecatedValues ) {
+ $item['deprecatedvalues'] = array_values( $deprecatedValues );
+ ApiResult::setIndexedTagName( $item['deprecatedvalues'], 'v' );
+ }
+ }
+
+ if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+ $item['info'] = [];
+ foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+ $tag = array_shift( $i );
+ $info = [
+ 'name' => $tag,
+ ];
+ if ( count( $i ) ) {
+ $info['values'] = $i;
+ ApiResult::setIndexedTagName( $info['values'], 'v' );
+ }
+ $this->formatHelpMessages( $info, 'text', [
+ $this->context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+ ->numParams( count( $i ) )
+ ->params( $this->context->getLanguage()->commaList( $i ) )
+ ->params( $module->getModulePrefix() )
+ ] );
+ ApiResult::setSubelementsList( $info, 'text' );
+ $item['info'][] = $info;
+ }
+ ApiResult::setIndexedTagName( $item['info'], 'i' );
+ }
+
+ $ret['parameters'][] = $item;
+ }
+ ApiResult::setIndexedTagName( $ret['parameters'], 'param' );
+
+ $dynamicParams = $module->dynamicParameterDocumentation();
+ if ( $dynamicParams !== null ) {
+ if ( $this->helpFormat === 'none' ) {
+ $ret['dynamicparameters'] = true;
+ } else {
+ $dynamicParams = ApiBase::makeMessage( $dynamicParams, $this->context, [
+ $module->getModulePrefix(),
+ $module->getModuleName(),
+ $module->getModulePath()
+ ] );
+ $this->formatHelpMessages( $ret, 'dynamicparameters', [ $dynamicParams ] );
+ }
+ }
+
+ return $ret;
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ public function getAllowedParams() {
+ // back compat
+ $querymodules = $this->getMain()->getModuleManager()
+ ->getModule( 'query' )->getModuleManager()->getNames();
+ sort( $querymodules );
+ $formatmodules = $this->getMain()->getModuleManager()->getNames( 'format' );
+ sort( $formatmodules );
+
+ return [
+ 'modules' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'helpformat' => [
+ ApiBase::PARAM_DFLT => 'none',
+ ApiBase::PARAM_TYPE => [ 'html', 'wikitext', 'raw', 'none' ],
+ ],
+
+ 'querymodules' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => $querymodules,
+ ],
+ 'mainmodule' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'pagesetmodule' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'formatmodules' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => $formatmodules,
+ ]
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=paraminfo&modules=parse|phpfm|query%2Ballpages|query%2Bsiteinfo'
+ => 'apihelp-paraminfo-example-1',
+ 'action=paraminfo&modules=query%2B*'
+ => 'apihelp-paraminfo-example-2',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Parameter_information';
+ }
+}
diff --git a/www/wiki/includes/api/ApiParse.php b/www/wiki/includes/api/ApiParse.php
new file mode 100644
index 00000000..099d278f
--- /dev/null
+++ b/www/wiki/includes/api/ApiParse.php
@@ -0,0 +1,908 @@
+<?php
+/**
+ * Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @ingroup API
+ */
+class ApiParse extends ApiBase {
+
+ /** @var string $section */
+ private $section = null;
+
+ /** @var Content $content */
+ private $content = null;
+
+ /** @var Content $pstContent */
+ private $pstContent = null;
+
+ /** @var bool */
+ private $contentIsDeleted = false, $contentIsSuppressed = false;
+
+ public function execute() {
+ // The data is hot but user-dependent, like page views, so we set vary cookies
+ $this->getMain()->setCacheMode( 'anon-public-user-private' );
+
+ // Get parameters
+ $params = $this->extractRequestParams();
+
+ // No easy way to say that text and title or revid are allowed together
+ // while the rest aren't, so just do it in three calls.
+ $this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'text' );
+ $this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'title' );
+ $this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'revid' );
+
+ $text = $params['text'];
+ $title = $params['title'];
+ if ( $title === null ) {
+ $titleProvided = false;
+ // A title is needed for parsing, so arbitrarily choose one
+ $title = 'API';
+ } else {
+ $titleProvided = true;
+ }
+
+ $page = $params['page'];
+ $pageid = $params['pageid'];
+ $oldid = $params['oldid'];
+
+ $model = $params['contentmodel'];
+ $format = $params['contentformat'];
+
+ $prop = array_flip( $params['prop'] );
+
+ if ( isset( $params['section'] ) ) {
+ $this->section = $params['section'];
+ if ( !preg_match( '/^((T-)?\d+|new)$/', $this->section ) ) {
+ $this->dieWithError( 'apierror-invalidsection' );
+ }
+ } else {
+ $this->section = false;
+ }
+
+ // The parser needs $wgTitle to be set, apparently the
+ // $title parameter in Parser::parse isn't enough *sigh*
+ // TODO: Does this still need $wgTitle?
+ global $wgParser, $wgTitle;
+
+ $redirValues = null;
+
+ $needContent = isset( $prop['wikitext'] ) ||
+ isset( $prop['parsetree'] ) || $params['generatexml'];
+
+ // Return result
+ $result = $this->getResult();
+
+ if ( !is_null( $oldid ) || !is_null( $pageid ) || !is_null( $page ) ) {
+ if ( $this->section === 'new' ) {
+ $this->dieWithError( 'apierror-invalidparammix-parse-new-section', 'invalidparammix' );
+ }
+ if ( !is_null( $oldid ) ) {
+ // Don't use the parser cache
+ $rev = Revision::newFromId( $oldid );
+ if ( !$rev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $oldid ] );
+ }
+
+ $this->checkTitleUserPermissions( $rev->getTitle(), 'read' );
+ if ( !$rev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
+ $this->dieWithError(
+ [ 'apierror-permissiondenied', $this->msg( 'action-deletedtext' ) ]
+ );
+ }
+
+ $titleObj = $rev->getTitle();
+ $wgTitle = $titleObj;
+ $pageObj = WikiPage::factory( $titleObj );
+ list( $popts, $reset, $suppressCache ) = $this->makeParserOptions( $pageObj, $params );
+ $p_result = $this->getParsedContent(
+ $pageObj, $popts, $suppressCache, $pageid, $rev, $needContent
+ );
+ } else { // Not $oldid, but $pageid or $page
+ if ( $params['redirects'] ) {
+ $reqParams = [
+ 'redirects' => '',
+ ];
+ if ( !is_null( $pageid ) ) {
+ $reqParams['pageids'] = $pageid;
+ } else { // $page
+ $reqParams['titles'] = $page;
+ }
+ $req = new FauxRequest( $reqParams );
+ $main = new ApiMain( $req );
+ $pageSet = new ApiPageSet( $main );
+ $pageSet->execute();
+ $redirValues = $pageSet->getRedirectTitlesAsResult( $this->getResult() );
+
+ $to = $page;
+ foreach ( $pageSet->getRedirectTitles() as $title ) {
+ $to = $title->getFullText();
+ }
+ $pageParams = [ 'title' => $to ];
+ } elseif ( !is_null( $pageid ) ) {
+ $pageParams = [ 'pageid' => $pageid ];
+ } else { // $page
+ $pageParams = [ 'title' => $page ];
+ }
+
+ $pageObj = $this->getTitleOrPageId( $pageParams, 'fromdb' );
+ $titleObj = $pageObj->getTitle();
+ if ( !$titleObj || !$titleObj->exists() ) {
+ $this->dieWithError( 'apierror-missingtitle' );
+ }
+
+ $this->checkTitleUserPermissions( $titleObj, 'read' );
+ $wgTitle = $titleObj;
+
+ if ( isset( $prop['revid'] ) ) {
+ $oldid = $pageObj->getLatest();
+ }
+
+ list( $popts, $reset, $suppressCache ) = $this->makeParserOptions( $pageObj, $params );
+ $p_result = $this->getParsedContent(
+ $pageObj, $popts, $suppressCache, $pageid, null, $needContent
+ );
+ }
+ } else { // Not $oldid, $pageid, $page. Hence based on $text
+ $titleObj = Title::newFromText( $title );
+ if ( !$titleObj || $titleObj->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $title ) ] );
+ }
+ $revid = $params['revid'];
+ if ( $revid !== null ) {
+ $rev = Revision::newFromId( $revid );
+ if ( !$rev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $revid ] );
+ }
+ $pTitleObj = $titleObj;
+ $titleObj = $rev->getTitle();
+ if ( $titleProvided ) {
+ if ( !$titleObj->equals( $pTitleObj ) ) {
+ $this->addWarning( [ 'apierror-revwrongpage', $rev->getId(),
+ wfEscapeWikiText( $pTitleObj->getPrefixedText() ) ] );
+ }
+ } else {
+ // Consider the title derived from the revid as having
+ // been provided.
+ $titleProvided = true;
+ }
+ }
+ $wgTitle = $titleObj;
+ if ( $titleObj->canExist() ) {
+ $pageObj = WikiPage::factory( $titleObj );
+ } else {
+ // Do like MediaWiki::initializeArticle()
+ $article = Article::newFromTitle( $titleObj, $this->getContext() );
+ $pageObj = $article->getPage();
+ }
+
+ list( $popts, $reset ) = $this->makeParserOptions( $pageObj, $params );
+ $textProvided = !is_null( $text );
+
+ if ( !$textProvided ) {
+ if ( $titleProvided && ( $prop || $params['generatexml'] ) ) {
+ if ( $revid !== null ) {
+ $this->addWarning( 'apiwarn-parse-revidwithouttext' );
+ } else {
+ $this->addWarning( 'apiwarn-parse-titlewithouttext' );
+ }
+ }
+ // Prevent warning from ContentHandler::makeContent()
+ $text = '';
+ }
+
+ // If we are parsing text, do not use the content model of the default
+ // API title, but default to wikitext to keep BC.
+ if ( $textProvided && !$titleProvided && is_null( $model ) ) {
+ $model = CONTENT_MODEL_WIKITEXT;
+ $this->addWarning( [ 'apiwarn-parse-nocontentmodel', $model ] );
+ }
+
+ try {
+ $this->content = ContentHandler::makeContent( $text, $titleObj, $model, $format );
+ } catch ( MWContentSerializationException $ex ) {
+ $this->dieWithException( $ex, [
+ 'wrap' => ApiMessage::create( 'apierror-contentserializationexception', 'parseerror' )
+ ] );
+ }
+
+ if ( $this->section !== false ) {
+ if ( $this->section === 'new' ) {
+ // Insert the section title above the content.
+ if ( !is_null( $params['sectiontitle'] ) && $params['sectiontitle'] !== '' ) {
+ $this->content = $this->content->addSectionHeader( $params['sectiontitle'] );
+ }
+ } else {
+ $this->content = $this->getSectionContent( $this->content, $titleObj->getPrefixedText() );
+ }
+ }
+
+ if ( $params['pst'] || $params['onlypst'] ) {
+ $this->pstContent = $this->content->preSaveTransform( $titleObj, $this->getUser(), $popts );
+ }
+ if ( $params['onlypst'] ) {
+ // Build a result and bail out
+ $result_array = [];
+ $result_array['text'] = $this->pstContent->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
+ if ( isset( $prop['wikitext'] ) ) {
+ $result_array['wikitext'] = $this->content->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'wikitext';
+ }
+ if ( !is_null( $params['summary'] ) ||
+ ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
+ ) {
+ $result_array['parsedsummary'] = $this->formatSummary( $titleObj, $params );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsedsummary';
+ }
+
+ $result->addValue( null, $this->getModuleName(), $result_array );
+
+ return;
+ }
+
+ // Not cached (save or load)
+ if ( $params['pst'] ) {
+ $p_result = $this->pstContent->getParserOutput( $titleObj, $revid, $popts );
+ } else {
+ $p_result = $this->content->getParserOutput( $titleObj, $revid, $popts );
+ }
+ }
+
+ $result_array = [];
+
+ $result_array['title'] = $titleObj->getPrefixedText();
+ $result_array['pageid'] = $pageid ?: $pageObj->getId();
+ if ( $this->contentIsDeleted ) {
+ $result_array['textdeleted'] = true;
+ }
+ if ( $this->contentIsSuppressed ) {
+ $result_array['textsuppressed'] = true;
+ }
+
+ if ( isset( $params['useskin'] ) ) {
+ $factory = MediaWikiServices::getInstance()->getSkinFactory();
+ $skin = $factory->makeSkin( Skin::normalizeKey( $params['useskin'] ) );
+ } else {
+ $skin = null;
+ }
+
+ $outputPage = null;
+ if ( $skin || isset( $prop['headhtml'] ) || isset( $prop['categorieshtml'] ) ) {
+ // Enabling the skin via 'useskin', 'headhtml', or 'categorieshtml'
+ // gets OutputPage and Skin involved, which (among others) applies
+ // these hooks:
+ // - ParserOutputHooks
+ // - Hook: LanguageLinks
+ // - Hook: OutputPageParserOutput
+ // - Hook: OutputPageMakeCategoryLinks
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $titleObj );
+ $context->setWikiPage( $pageObj );
+
+ if ( $skin ) {
+ // Use the skin specified by 'useskin'
+ $context->setSkin( $skin );
+ // Context clones the skin, refetch to stay in sync. (T166022)
+ $skin = $context->getSkin();
+ } else {
+ // Make sure the context's skin refers to the context. Without this,
+ // $outputPage->getSkin()->getOutput() !== $outputPage which
+ // confuses some of the output.
+ $context->setSkin( $context->getSkin() );
+ }
+
+ $outputPage = new OutputPage( $context );
+ $outputPage->addParserOutputMetadata( $p_result );
+ $context->setOutput( $outputPage );
+
+ if ( $skin ) {
+ // Based on OutputPage::headElement()
+ $skin->setupSkinUserCss( $outputPage );
+ // Based on OutputPage::output()
+ foreach ( $skin->getDefaultModules() as $group ) {
+ $outputPage->addModules( $group );
+ }
+ }
+ }
+
+ if ( !is_null( $oldid ) ) {
+ $result_array['revid'] = intval( $oldid );
+ }
+
+ if ( $params['redirects'] && !is_null( $redirValues ) ) {
+ $result_array['redirects'] = $redirValues;
+ }
+
+ if ( isset( $prop['text'] ) ) {
+ $result_array['text'] = $p_result->getText( [
+ 'allowTOC' => !$params['disabletoc'],
+ 'enableSectionEditLinks' => !$params['disableeditsection'],
+ 'unwrap' => $params['wrapoutputclass'] === '',
+ 'deduplicateStyles' => !$params['disablestylededuplication'],
+ ] );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
+ }
+
+ if ( !is_null( $params['summary'] ) ||
+ ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
+ ) {
+ $result_array['parsedsummary'] = $this->formatSummary( $titleObj, $params );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsedsummary';
+ }
+
+ if ( isset( $prop['langlinks'] ) ) {
+ if ( $skin ) {
+ $langlinks = $outputPage->getLanguageLinks();
+ } else {
+ $langlinks = $p_result->getLanguageLinks();
+ // The deprecated 'effectivelanglinks' option depredates OutputPage
+ // support via 'useskin'. If not already applied, then run just this
+ // one hook of OutputPage::addParserOutputMetadata here.
+ if ( $params['effectivelanglinks'] ) {
+ $linkFlags = [];
+ Hooks::run( 'LanguageLinks', [ $titleObj, &$langlinks, &$linkFlags ] );
+ }
+ }
+
+ $result_array['langlinks'] = $this->formatLangLinks( $langlinks );
+ }
+ if ( isset( $prop['categories'] ) ) {
+ $result_array['categories'] = $this->formatCategoryLinks( $p_result->getCategories() );
+ }
+ if ( isset( $prop['categorieshtml'] ) ) {
+ $result_array['categorieshtml'] = $outputPage->getSkin()->getCategories();
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'categorieshtml';
+ }
+ if ( isset( $prop['links'] ) ) {
+ $result_array['links'] = $this->formatLinks( $p_result->getLinks() );
+ }
+ if ( isset( $prop['templates'] ) ) {
+ $result_array['templates'] = $this->formatLinks( $p_result->getTemplates() );
+ }
+ if ( isset( $prop['images'] ) ) {
+ $result_array['images'] = array_keys( $p_result->getImages() );
+ }
+ if ( isset( $prop['externallinks'] ) ) {
+ $result_array['externallinks'] = array_keys( $p_result->getExternalLinks() );
+ }
+ if ( isset( $prop['sections'] ) ) {
+ $result_array['sections'] = $p_result->getSections();
+ }
+ if ( isset( $prop['parsewarnings'] ) ) {
+ $result_array['parsewarnings'] = $p_result->getWarnings();
+ }
+
+ if ( isset( $prop['displaytitle'] ) ) {
+ $result_array['displaytitle'] = $p_result->getDisplayTitle() !== false
+ ? $p_result->getDisplayTitle() : $titleObj->getPrefixedText();
+ }
+
+ if ( isset( $prop['headitems'] ) ) {
+ if ( $skin ) {
+ $result_array['headitems'] = $this->formatHeadItems( $outputPage->getHeadItemsArray() );
+ } else {
+ $result_array['headitems'] = $this->formatHeadItems( $p_result->getHeadItems() );
+ }
+ }
+
+ if ( isset( $prop['headhtml'] ) ) {
+ $result_array['headhtml'] = $outputPage->headElement( $context->getSkin() );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'headhtml';
+ }
+
+ if ( isset( $prop['modules'] ) ) {
+ if ( $skin ) {
+ $result_array['modules'] = $outputPage->getModules();
+ $result_array['modulescripts'] = $outputPage->getModuleScripts();
+ $result_array['modulestyles'] = $outputPage->getModuleStyles();
+ } else {
+ $result_array['modules'] = array_values( array_unique( $p_result->getModules() ) );
+ $result_array['modulescripts'] = array_values( array_unique( $p_result->getModuleScripts() ) );
+ $result_array['modulestyles'] = array_values( array_unique( $p_result->getModuleStyles() ) );
+ }
+ }
+
+ if ( isset( $prop['jsconfigvars'] ) ) {
+ $jsconfigvars = $skin ? $outputPage->getJsConfigVars() : $p_result->getJsConfigVars();
+ $result_array['jsconfigvars'] = ApiResult::addMetadataToResultVars( $jsconfigvars );
+ }
+
+ if ( isset( $prop['encodedjsconfigvars'] ) ) {
+ $jsconfigvars = $skin ? $outputPage->getJsConfigVars() : $p_result->getJsConfigVars();
+ $result_array['encodedjsconfigvars'] = FormatJson::encode(
+ $jsconfigvars,
+ false,
+ FormatJson::ALL_OK
+ );
+ $result_array[ApiResult::META_SUBELEMENTS][] = 'encodedjsconfigvars';
+ }
+
+ if ( isset( $prop['modules'] ) &&
+ !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
+ $this->addWarning( 'apiwarn-moduleswithoutvars' );
+ }
+
+ if ( isset( $prop['indicators'] ) ) {
+ if ( $skin ) {
+ $result_array['indicators'] = (array)$outputPage->getIndicators();
+ } else {
+ $result_array['indicators'] = (array)$p_result->getIndicators();
+ }
+ ApiResult::setArrayType( $result_array['indicators'], 'BCkvp', 'name' );
+ }
+
+ if ( isset( $prop['iwlinks'] ) ) {
+ $result_array['iwlinks'] = $this->formatIWLinks( $p_result->getInterwikiLinks() );
+ }
+
+ if ( isset( $prop['wikitext'] ) ) {
+ $result_array['wikitext'] = $this->content->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'wikitext';
+ if ( !is_null( $this->pstContent ) ) {
+ $result_array['psttext'] = $this->pstContent->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'psttext';
+ }
+ }
+ if ( isset( $prop['properties'] ) ) {
+ $result_array['properties'] = (array)$p_result->getProperties();
+ ApiResult::setArrayType( $result_array['properties'], 'BCkvp', 'name' );
+ }
+
+ if ( isset( $prop['limitreportdata'] ) ) {
+ $result_array['limitreportdata'] =
+ $this->formatLimitReportData( $p_result->getLimitReportData() );
+ }
+ if ( isset( $prop['limitreporthtml'] ) ) {
+ $result_array['limitreporthtml'] = EditPage::getPreviewLimitReport( $p_result );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'limitreporthtml';
+ }
+
+ if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
+ if ( $this->content->getModel() != CONTENT_MODEL_WIKITEXT ) {
+ $this->dieWithError( 'apierror-parsetree-notwikitext', 'notwikitext' );
+ }
+
+ $wgParser->startExternalParse( $titleObj, $popts, Parser::OT_PREPROCESS );
+ $xml = $wgParser->preprocessToDom( $this->content->getNativeData() )->__toString();
+ $result_array['parsetree'] = $xml;
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsetree';
+ }
+
+ $result_mapping = [
+ 'redirects' => 'r',
+ 'langlinks' => 'll',
+ 'categories' => 'cl',
+ 'links' => 'pl',
+ 'templates' => 'tl',
+ 'images' => 'img',
+ 'externallinks' => 'el',
+ 'iwlinks' => 'iw',
+ 'sections' => 's',
+ 'headitems' => 'hi',
+ 'modules' => 'm',
+ 'indicators' => 'ind',
+ 'modulescripts' => 'm',
+ 'modulestyles' => 'm',
+ 'properties' => 'pp',
+ 'limitreportdata' => 'lr',
+ 'parsewarnings' => 'pw'
+ ];
+ $this->setIndexedTagNames( $result_array, $result_mapping );
+ $result->addValue( null, $this->getModuleName(), $result_array );
+ }
+
+ /**
+ * Constructs a ParserOptions object
+ *
+ * @param WikiPage $pageObj
+ * @param array $params
+ *
+ * @return array [ ParserOptions, ScopedCallback, bool $suppressCache ]
+ */
+ protected function makeParserOptions( WikiPage $pageObj, array $params ) {
+ $popts = $pageObj->makeParserOptions( $this->getContext() );
+ $popts->enableLimitReport( !$params['disablepp'] && !$params['disablelimitreport'] );
+ $popts->setIsPreview( $params['preview'] || $params['sectionpreview'] );
+ $popts->setIsSectionPreview( $params['sectionpreview'] );
+ if ( $params['disabletidy'] ) {
+ $popts->setTidy( false );
+ }
+ if ( $params['wrapoutputclass'] !== '' ) {
+ $popts->setWrapOutputClass( $params['wrapoutputclass'] );
+ }
+
+ $reset = null;
+ $suppressCache = false;
+ Hooks::run( 'ApiMakeParserOptions',
+ [ $popts, $pageObj->getTitle(), $params, $this, &$reset, &$suppressCache ] );
+
+ // Force cache suppression when $popts aren't cacheable.
+ $suppressCache = $suppressCache || !$popts->isSafeToCache();
+
+ return [ $popts, $reset, $suppressCache ];
+ }
+
+ /**
+ * @param WikiPage $page
+ * @param ParserOptions $popts
+ * @param bool $suppressCache
+ * @param int $pageId
+ * @param Revision|null $rev
+ * @param bool $getContent
+ * @return ParserOutput
+ */
+ private function getParsedContent(
+ WikiPage $page, $popts, $suppressCache, $pageId, $rev, $getContent
+ ) {
+ $revId = $rev ? $rev->getId() : null;
+ $isDeleted = $rev && $rev->isDeleted( Revision::DELETED_TEXT );
+
+ if ( $getContent || $this->section !== false || $isDeleted ) {
+ if ( $rev ) {
+ $this->content = $rev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+ if ( !$this->content ) {
+ $this->dieWithError( [ 'apierror-missingcontent-revid', $revId ] );
+ }
+ } else {
+ $this->content = $page->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+ if ( !$this->content ) {
+ $this->dieWithError( [ 'apierror-missingcontent-pageid', $page->getId() ] );
+ }
+ }
+ $this->contentIsDeleted = $isDeleted;
+ $this->contentIsSuppressed = $rev &&
+ $rev->isDeleted( Revision::DELETED_TEXT | Revision::DELETED_RESTRICTED );
+ }
+
+ if ( $this->section !== false ) {
+ $this->content = $this->getSectionContent(
+ $this->content,
+ $pageId === null ? $page->getTitle()->getPrefixedText() : $this->msg( 'pageid', $pageId )
+ );
+ return $this->content->getParserOutput( $page->getTitle(), $revId, $popts );
+ }
+
+ if ( $isDeleted ) {
+ // getParserOutput can't do revdeled revisions
+ $pout = $this->content->getParserOutput( $page->getTitle(), $revId, $popts );
+ } else {
+ // getParserOutput will save to Parser cache if able
+ $pout = $page->getParserOutput( $popts, $revId, $suppressCache );
+ }
+ if ( !$pout ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $revId ?: $page->getLatest() ] ); // @codeCoverageIgnore
+ }
+
+ return $pout;
+ }
+
+ /**
+ * Extract the requested section from the given Content
+ *
+ * @param Content $content
+ * @param string|Message $what Identifies the content in error messages, e.g. page title.
+ * @return Content
+ */
+ private function getSectionContent( Content $content, $what ) {
+ // Not cached (save or load)
+ $section = $content->getSection( $this->section );
+ if ( $section === false ) {
+ $this->dieWithError( [ 'apierror-nosuchsection-what', $this->section, $what ], 'nosuchsection' );
+ }
+ if ( $section === null ) {
+ $this->dieWithError( [ 'apierror-sectionsnotsupported-what', $what ], 'nosuchsection' );
+ $section = false;
+ }
+
+ return $section;
+ }
+
+ /**
+ * This mimicks the behavior of EditPage in formatting a summary
+ *
+ * @param Title $title of the page being parsed
+ * @param Array $params the API parameters of the request
+ * @return Content|bool
+ */
+ private function formatSummary( $title, $params ) {
+ global $wgParser;
+ $summary = !is_null( $params['summary'] ) ? $params['summary'] : '';
+ $sectionTitle = !is_null( $params['sectiontitle'] ) ? $params['sectiontitle'] : '';
+
+ if ( $this->section === 'new' && ( $sectionTitle === '' || $summary === '' ) ) {
+ if ( $sectionTitle !== '' ) {
+ $summary = $params['sectiontitle'];
+ }
+ if ( $summary !== '' ) {
+ $summary = wfMessage( 'newsectionsummary' )
+ ->rawParams( $wgParser->stripSectionName( $summary ) )
+ ->inContentLanguage()->text();
+ }
+ }
+ return Linker::formatComment( $summary, $title, $this->section === 'new' );
+ }
+
+ private function formatLangLinks( $links ) {
+ $result = [];
+ foreach ( $links as $link ) {
+ $entry = [];
+ $bits = explode( ':', $link, 2 );
+ $title = Title::newFromText( $link );
+
+ $entry['lang'] = $bits[0];
+ if ( $title ) {
+ $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
+ // localised language name in 'uselang' language
+ $entry['langname'] = Language::fetchLanguageName(
+ $title->getInterwiki(),
+ $this->getLanguage()->getCode()
+ );
+
+ // native language name
+ $entry['autonym'] = Language::fetchLanguageName( $title->getInterwiki() );
+ }
+ ApiResult::setContentValue( $entry, 'title', $bits[1] );
+ $result[] = $entry;
+ }
+
+ return $result;
+ }
+
+ private function formatCategoryLinks( $links ) {
+ $result = [];
+
+ if ( !$links ) {
+ return $result;
+ }
+
+ // Fetch hiddencat property
+ $lb = new LinkBatch;
+ $lb->setArray( [ NS_CATEGORY => $links ] );
+ $db = $this->getDB();
+ $res = $db->select( [ 'page', 'page_props' ],
+ [ 'page_title', 'pp_propname' ],
+ $lb->constructSet( 'page', $db ),
+ __METHOD__,
+ [],
+ [ 'page_props' => [
+ 'LEFT JOIN', [ 'pp_propname' => 'hiddencat', 'pp_page = page_id' ]
+ ] ]
+ );
+ $hiddencats = [];
+ foreach ( $res as $row ) {
+ $hiddencats[$row->page_title] = isset( $row->pp_propname );
+ }
+
+ $linkCache = LinkCache::singleton();
+
+ foreach ( $links as $link => $sortkey ) {
+ $entry = [];
+ $entry['sortkey'] = $sortkey;
+ // array keys will cast numeric category names to ints, so cast back to string
+ ApiResult::setContentValue( $entry, 'category', (string)$link );
+ if ( !isset( $hiddencats[$link] ) ) {
+ $entry['missing'] = true;
+
+ // We already know the link doesn't exist in the database, so
+ // tell LinkCache that before calling $title->isKnown().
+ $title = Title::makeTitle( NS_CATEGORY, $link );
+ $linkCache->addBadLinkObj( $title );
+ if ( $title->isKnown() ) {
+ $entry['known'] = true;
+ }
+ } elseif ( $hiddencats[$link] ) {
+ $entry['hidden'] = true;
+ }
+ $result[] = $entry;
+ }
+
+ return $result;
+ }
+
+ private function formatLinks( $links ) {
+ $result = [];
+ foreach ( $links as $ns => $nslinks ) {
+ foreach ( $nslinks as $title => $id ) {
+ $entry = [];
+ $entry['ns'] = $ns;
+ ApiResult::setContentValue( $entry, 'title', Title::makeTitle( $ns, $title )->getFullText() );
+ $entry['exists'] = $id != 0;
+ $result[] = $entry;
+ }
+ }
+
+ return $result;
+ }
+
+ private function formatIWLinks( $iw ) {
+ $result = [];
+ foreach ( $iw as $prefix => $titles ) {
+ foreach ( array_keys( $titles ) as $title ) {
+ $entry = [];
+ $entry['prefix'] = $prefix;
+
+ $title = Title::newFromText( "{$prefix}:{$title}" );
+ if ( $title ) {
+ $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
+ }
+
+ ApiResult::setContentValue( $entry, 'title', $title->getFullText() );
+ $result[] = $entry;
+ }
+ }
+
+ return $result;
+ }
+
+ private function formatHeadItems( $headItems ) {
+ $result = [];
+ foreach ( $headItems as $tag => $content ) {
+ $entry = [];
+ $entry['tag'] = $tag;
+ ApiResult::setContentValue( $entry, 'content', $content );
+ $result[] = $entry;
+ }
+
+ return $result;
+ }
+
+ private function formatLimitReportData( $limitReportData ) {
+ $result = [];
+
+ foreach ( $limitReportData as $name => $value ) {
+ $entry = [];
+ $entry['name'] = $name;
+ if ( !is_array( $value ) ) {
+ $value = [ $value ];
+ }
+ ApiResult::setIndexedTagNameRecursive( $value, 'param' );
+ $entry = array_merge( $entry, $value );
+ $result[] = $entry;
+ }
+
+ return $result;
+ }
+
+ private function setIndexedTagNames( &$array, $mapping ) {
+ foreach ( $mapping as $key => $name ) {
+ if ( isset( $array[$key] ) ) {
+ ApiResult::setIndexedTagName( $array[$key], $name );
+ }
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => null,
+ 'text' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ],
+ 'revid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'summary' => null,
+ 'page' => null,
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'redirects' => false,
+ 'oldid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|' .
+ 'images|externallinks|sections|revid|displaytitle|iwlinks|' .
+ 'properties|parsewarnings',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'text',
+ 'langlinks',
+ 'categories',
+ 'categorieshtml',
+ 'links',
+ 'templates',
+ 'images',
+ 'externallinks',
+ 'sections',
+ 'revid',
+ 'displaytitle',
+ 'headhtml',
+ 'modules',
+ 'jsconfigvars',
+ 'encodedjsconfigvars',
+ 'indicators',
+ 'iwlinks',
+ 'wikitext',
+ 'properties',
+ 'limitreportdata',
+ 'limitreporthtml',
+ 'parsetree',
+ 'parsewarnings',
+ 'headitems',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [
+ 'parsetree' => [ 'apihelp-parse-paramvalue-prop-parsetree', CONTENT_MODEL_WIKITEXT ],
+ ],
+ ApiBase::PARAM_DEPRECATED_VALUES => [
+ 'headitems' => 'apiwarn-deprecation-parse-headitems',
+ ],
+ ],
+ 'wrapoutputclass' => 'mw-parser-output',
+ 'pst' => false,
+ 'onlypst' => false,
+ 'effectivelanglinks' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'section' => null,
+ 'sectiontitle' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'disablepp' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'disablelimitreport' => false,
+ 'disableeditsection' => false,
+ 'disabletidy' => false,
+ 'disablestylededuplication' => false,
+ 'generatexml' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => [
+ 'apihelp-parse-param-generatexml', CONTENT_MODEL_WIKITEXT
+ ],
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'preview' => false,
+ 'sectionpreview' => false,
+ 'disabletoc' => false,
+ 'useskin' => [
+ ApiBase::PARAM_TYPE => array_keys( Skin::getAllowedSkins() ),
+ ],
+ 'contentformat' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ],
+ 'contentmodel' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+ ]
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=parse&page=Project:Sandbox'
+ => 'apihelp-parse-example-page',
+ 'action=parse&text={{Project:Sandbox}}&contentmodel=wikitext'
+ => 'apihelp-parse-example-text',
+ 'action=parse&text={{PAGENAME}}&title=Test'
+ => 'apihelp-parse-example-texttitle',
+ 'action=parse&summary=Some+[[link]]&prop='
+ => 'apihelp-parse-example-summary',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Parsing_wikitext#parse';
+ }
+}
diff --git a/www/wiki/includes/api/ApiPatrol.php b/www/wiki/includes/api/ApiPatrol.php
new file mode 100644
index 00000000..a20aca4d
--- /dev/null
+++ b/www/wiki/includes/api/ApiPatrol.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * API for MediaWiki 1.14+
+ *
+ * Copyright © 2008 Soxred93 soxred93@gmail.com,
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Allows user to patrol pages
+ * @ingroup API
+ */
+class ApiPatrol extends ApiBase {
+
+ /**
+ * Patrols the article or provides the reason the patrol failed.
+ */
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $this->requireOnlyOneParameter( $params, 'rcid', 'revid' );
+
+ if ( isset( $params['rcid'] ) ) {
+ $rc = RecentChange::newFromId( $params['rcid'] );
+ if ( !$rc ) {
+ $this->dieWithError( [ 'apierror-nosuchrcid', $params['rcid'] ] );
+ }
+ } else {
+ $rev = Revision::newFromId( $params['revid'] );
+ if ( !$rev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $params['revid'] ] );
+ }
+ $rc = $rev->getRecentChange();
+ if ( !$rc ) {
+ $this->dieWithError( [ 'apierror-notpatrollable', $params['revid'] ] );
+ }
+ }
+
+ $user = $this->getUser();
+ $tags = $params['tags'];
+
+ // Check if user can add tags
+ if ( !is_null( $tags ) ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $tags, $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ $retval = $rc->doMarkPatrolled( $user, false, $tags );
+
+ if ( $retval ) {
+ $this->dieStatus( $this->errorArrayToStatus( $retval, $user ) );
+ }
+
+ $result = [ 'rcid' => intval( $rc->getAttribute( 'rc_id' ) ) ];
+ ApiQueryBase::addTitleInfo( $result, $rc->getTitle() );
+ $this->getResult()->addValue( null, $this->getModuleName(), $result );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'rcid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'revid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'patrol';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=patrol&token=123ABC&rcid=230672766'
+ => 'apihelp-patrol-example-rcid',
+ 'action=patrol&token=123ABC&revid=230672766'
+ => 'apihelp-patrol-example-revid',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Patrol';
+ }
+}
diff --git a/www/wiki/includes/api/ApiProtect.php b/www/wiki/includes/api/ApiProtect.php
new file mode 100644
index 00000000..f67d3b3e
--- /dev/null
+++ b/www/wiki/includes/api/ApiProtect.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiProtect extends ApiBase {
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
+ $titleObj = $pageObj->getTitle();
+
+ $this->checkTitleUserPermissions( $titleObj, 'protect' );
+
+ $user = $this->getUser();
+ $tags = $params['tags'];
+
+ // Check if user can add tags
+ if ( !is_null( $tags ) ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $tags, $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ $expiry = (array)$params['expiry'];
+ if ( count( $expiry ) != count( $params['protections'] ) ) {
+ if ( count( $expiry ) == 1 ) {
+ $expiry = array_fill( 0, count( $params['protections'] ), $expiry[0] );
+ } else {
+ $this->dieWithError( [
+ 'apierror-toofewexpiries',
+ count( $expiry ),
+ count( $params['protections'] )
+ ] );
+ }
+ }
+
+ $restrictionTypes = $titleObj->getRestrictionTypes();
+
+ $protections = [];
+ $expiryarray = [];
+ $resultProtections = [];
+ foreach ( $params['protections'] as $i => $prot ) {
+ $p = explode( '=', $prot );
+ $protections[$p[0]] = ( $p[1] == 'all' ? '' : $p[1] );
+
+ if ( $titleObj->exists() && $p[0] == 'create' ) {
+ $this->dieWithError( 'apierror-create-titleexists' );
+ }
+ if ( !$titleObj->exists() && $p[0] != 'create' ) {
+ $this->dieWithError( 'apierror-missingtitle-createonly' );
+ }
+
+ if ( !in_array( $p[0], $restrictionTypes ) && $p[0] != 'create' ) {
+ $this->dieWithError( [ 'apierror-protect-invalidaction', wfEscapeWikiText( $p[0] ) ] );
+ }
+ if ( !in_array( $p[1], $this->getConfig()->get( 'RestrictionLevels' ) ) && $p[1] != 'all' ) {
+ $this->dieWithError( [ 'apierror-protect-invalidlevel', wfEscapeWikiText( $p[1] ) ] );
+ }
+
+ if ( wfIsInfinity( $expiry[$i] ) ) {
+ $expiryarray[$p[0]] = 'infinity';
+ } else {
+ $exp = strtotime( $expiry[$i] );
+ if ( $exp < 0 || !$exp ) {
+ $this->dieWithError( [ 'apierror-invalidexpiry', wfEscapeWikiText( $expiry[$i] ) ] );
+ }
+
+ $exp = wfTimestamp( TS_MW, $exp );
+ if ( $exp < wfTimestampNow() ) {
+ $this->dieWithError( [ 'apierror-pastexpiry', wfEscapeWikiText( $expiry[$i] ) ] );
+ }
+ $expiryarray[$p[0]] = $exp;
+ }
+ $resultProtections[] = [
+ $p[0] => $protections[$p[0]],
+ 'expiry' => ApiResult::formatExpiry( $expiryarray[$p[0]], 'infinite' ),
+ ];
+ }
+
+ $cascade = $params['cascade'];
+
+ $watch = $params['watch'] ? 'watch' : $params['watchlist'];
+ $this->setWatch( $watch, $titleObj, 'watchdefault' );
+
+ $status = $pageObj->doUpdateRestrictions(
+ $protections,
+ $expiryarray,
+ $cascade,
+ $params['reason'],
+ $user,
+ $tags
+ );
+
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+ $res = [
+ 'title' => $titleObj->getPrefixedText(),
+ 'reason' => $params['reason']
+ ];
+ if ( $cascade ) {
+ $res['cascade'] = true;
+ }
+ $res['protections'] = $resultProtections;
+ $result = $this->getResult();
+ ApiResult::setIndexedTagName( $res['protections'], 'protection' );
+ $result->addValue( null, $this->getModuleName(), $res );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'protections' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'expiry' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_ALLOW_DUPLICATES => true,
+ ApiBase::PARAM_DFLT => 'infinite',
+ ],
+ 'reason' => '',
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'cascade' => false,
+ 'watch' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'watchlist' => [
+ ApiBase::PARAM_DFLT => 'preferences',
+ ApiBase::PARAM_TYPE => [
+ 'watch',
+ 'unwatch',
+ 'preferences',
+ 'nochange'
+ ],
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=protect&title=Main%20Page&token=123ABC&' .
+ 'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never'
+ => 'apihelp-protect-example-protect',
+ 'action=protect&title=Main%20Page&token=123ABC&' .
+ 'protections=edit=all|move=all&reason=Lifting%20restrictions'
+ => 'apihelp-protect-example-unprotect',
+ 'action=protect&title=Main%20Page&token=123ABC&' .
+ 'protections=&reason=Lifting%20restrictions'
+ => 'apihelp-protect-example-unprotect2',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Protect';
+ }
+}
diff --git a/www/wiki/includes/api/ApiPurge.php b/www/wiki/includes/api/ApiPurge.php
new file mode 100644
index 00000000..bb0be684
--- /dev/null
+++ b/www/wiki/includes/api/ApiPurge.php
@@ -0,0 +1,177 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * API interface for page purging
+ * @ingroup API
+ */
+class ApiPurge extends ApiBase {
+ private $mPageSet = null;
+
+ /**
+ * Purges the cache of a page
+ */
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $continuationManager = new ApiContinuationManager( $this, [], [] );
+ $this->setContinuationManager( $continuationManager );
+
+ $forceLinkUpdate = $params['forcelinkupdate'];
+ $forceRecursiveLinkUpdate = $params['forcerecursivelinkupdate'];
+ $pageSet = $this->getPageSet();
+ $pageSet->execute();
+
+ $result = $pageSet->getInvalidTitlesAndRevisions();
+ $user = $this->getUser();
+
+ foreach ( $pageSet->getGoodTitles() as $title ) {
+ $r = [];
+ ApiQueryBase::addTitleInfo( $r, $title );
+ $page = WikiPage::factory( $title );
+ if ( !$user->pingLimiter( 'purge' ) ) {
+ // Directly purge and skip the UI part of purge()
+ $page->doPurge();
+ $r['purged'] = true;
+ } else {
+ $this->addWarning( 'apierror-ratelimited' );
+ }
+
+ if ( $forceLinkUpdate || $forceRecursiveLinkUpdate ) {
+ if ( !$user->pingLimiter( 'linkpurge' ) ) {
+ $popts = $page->makeParserOptions( 'canonical' );
+
+ # Parse content; note that HTML generation is only needed if we want to cache the result.
+ $content = $page->getContent( Revision::RAW );
+ if ( $content ) {
+ $enableParserCache = $this->getConfig()->get( 'EnableParserCache' );
+ $p_result = $content->getParserOutput(
+ $title,
+ $page->getLatest(),
+ $popts,
+ $enableParserCache
+ );
+
+ # Logging to better see expensive usage patterns
+ if ( $forceRecursiveLinkUpdate ) {
+ LoggerFactory::getInstance( 'RecursiveLinkPurge' )->info(
+ "Recursive link purge enqueued for {title}",
+ [
+ 'user' => $this->getUser()->getName(),
+ 'title' => $title->getPrefixedText()
+ ]
+ );
+ }
+
+ # Update the links tables
+ $updates = $content->getSecondaryDataUpdates(
+ $title, null, $forceRecursiveLinkUpdate, $p_result );
+ foreach ( $updates as $update ) {
+ $update->setCause( 'api-purge', $this->getUser()->getName() );
+ DeferredUpdates::addUpdate( $update, DeferredUpdates::PRESEND );
+ }
+
+ $r['linkupdate'] = true;
+
+ if ( $enableParserCache ) {
+ $pcache = MediaWikiServices::getInstance()->getParserCache();
+ $pcache->save( $p_result, $page, $popts );
+ }
+ }
+ } else {
+ $this->addWarning( 'apierror-ratelimited' );
+ $forceLinkUpdate = false;
+ }
+ }
+
+ $result[] = $r;
+ }
+ $apiResult = $this->getResult();
+ ApiResult::setIndexedTagName( $result, 'page' );
+ $apiResult->addValue( null, $this->getModuleName(), $result );
+
+ $values = $pageSet->getNormalizedTitlesAsResult( $apiResult );
+ if ( $values ) {
+ $apiResult->addValue( null, 'normalized', $values );
+ }
+ $values = $pageSet->getConvertedTitlesAsResult( $apiResult );
+ if ( $values ) {
+ $apiResult->addValue( null, 'converted', $values );
+ }
+ $values = $pageSet->getRedirectTitlesAsResult( $apiResult );
+ if ( $values ) {
+ $apiResult->addValue( null, 'redirects', $values );
+ }
+
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $apiResult );
+ }
+
+ /**
+ * Get a cached instance of an ApiPageSet object
+ * @return ApiPageSet
+ */
+ private function getPageSet() {
+ if ( $this->mPageSet === null ) {
+ $this->mPageSet = new ApiPageSet( $this );
+ }
+
+ return $this->mPageSet;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $result = [
+ 'forcelinkupdate' => false,
+ 'forcerecursivelinkupdate' => false,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ if ( $flags ) {
+ $result += $this->getPageSet()->getFinalParams( $flags );
+ }
+
+ return $result;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=purge&titles=Main_Page|API'
+ => 'apihelp-purge-example-simple',
+ 'action=purge&generator=allpages&gapnamespace=0&gaplimit=10'
+ => 'apihelp-purge-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Purge';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQuery.php b/www/wiki/includes/api/ApiQuery.php
new file mode 100644
index 00000000..e49024d1
--- /dev/null
+++ b/www/wiki/includes/api/ApiQuery.php
@@ -0,0 +1,544 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * This is the main query class. It behaves similar to ApiMain: based on the
+ * parameters given, it will create a list of titles to work on (an ApiPageSet
+ * object), instantiate and execute various property/list/meta modules, and
+ * assemble all resulting data into a single ApiResult object.
+ *
+ * In generator mode, a generator will be executed first to populate a second
+ * ApiPageSet object, and that object will be used for all subsequent modules.
+ *
+ * @ingroup API
+ */
+class ApiQuery extends ApiBase {
+
+ /**
+ * List of Api Query prop modules
+ * @var array
+ */
+ private static $QueryPropModules = [
+ 'categories' => ApiQueryCategories::class,
+ 'categoryinfo' => ApiQueryCategoryInfo::class,
+ 'contributors' => ApiQueryContributors::class,
+ 'deletedrevisions' => ApiQueryDeletedRevisions::class,
+ 'duplicatefiles' => ApiQueryDuplicateFiles::class,
+ 'extlinks' => ApiQueryExternalLinks::class,
+ 'fileusage' => ApiQueryBacklinksprop::class,
+ 'images' => ApiQueryImages::class,
+ 'imageinfo' => ApiQueryImageInfo::class,
+ 'info' => ApiQueryInfo::class,
+ 'links' => ApiQueryLinks::class,
+ 'linkshere' => ApiQueryBacklinksprop::class,
+ 'iwlinks' => ApiQueryIWLinks::class,
+ 'langlinks' => ApiQueryLangLinks::class,
+ 'pageprops' => ApiQueryPageProps::class,
+ 'redirects' => ApiQueryBacklinksprop::class,
+ 'revisions' => ApiQueryRevisions::class,
+ 'stashimageinfo' => ApiQueryStashImageInfo::class,
+ 'templates' => ApiQueryLinks::class,
+ 'transcludedin' => ApiQueryBacklinksprop::class,
+ ];
+
+ /**
+ * List of Api Query list modules
+ * @var array
+ */
+ private static $QueryListModules = [
+ 'allcategories' => ApiQueryAllCategories::class,
+ 'alldeletedrevisions' => ApiQueryAllDeletedRevisions::class,
+ 'allfileusages' => ApiQueryAllLinks::class,
+ 'allimages' => ApiQueryAllImages::class,
+ 'alllinks' => ApiQueryAllLinks::class,
+ 'allpages' => ApiQueryAllPages::class,
+ 'allredirects' => ApiQueryAllLinks::class,
+ 'allrevisions' => ApiQueryAllRevisions::class,
+ 'mystashedfiles' => ApiQueryMyStashedFiles::class,
+ 'alltransclusions' => ApiQueryAllLinks::class,
+ 'allusers' => ApiQueryAllUsers::class,
+ 'backlinks' => ApiQueryBacklinks::class,
+ 'blocks' => ApiQueryBlocks::class,
+ 'categorymembers' => ApiQueryCategoryMembers::class,
+ 'deletedrevs' => ApiQueryDeletedrevs::class,
+ 'embeddedin' => ApiQueryBacklinks::class,
+ 'exturlusage' => ApiQueryExtLinksUsage::class,
+ 'filearchive' => ApiQueryFilearchive::class,
+ 'imageusage' => ApiQueryBacklinks::class,
+ 'iwbacklinks' => ApiQueryIWBacklinks::class,
+ 'langbacklinks' => ApiQueryLangBacklinks::class,
+ 'logevents' => ApiQueryLogEvents::class,
+ 'pageswithprop' => ApiQueryPagesWithProp::class,
+ 'pagepropnames' => ApiQueryPagePropNames::class,
+ 'prefixsearch' => ApiQueryPrefixSearch::class,
+ 'protectedtitles' => ApiQueryProtectedTitles::class,
+ 'querypage' => ApiQueryQueryPage::class,
+ 'random' => ApiQueryRandom::class,
+ 'recentchanges' => ApiQueryRecentChanges::class,
+ 'search' => ApiQuerySearch::class,
+ 'tags' => ApiQueryTags::class,
+ 'usercontribs' => ApiQueryContributions::class,
+ 'users' => ApiQueryUsers::class,
+ 'watchlist' => ApiQueryWatchlist::class,
+ 'watchlistraw' => ApiQueryWatchlistRaw::class,
+ ];
+
+ /**
+ * List of Api Query meta modules
+ * @var array
+ */
+ private static $QueryMetaModules = [
+ 'allmessages' => ApiQueryAllMessages::class,
+ 'authmanagerinfo' => ApiQueryAuthManagerInfo::class,
+ 'siteinfo' => ApiQuerySiteinfo::class,
+ 'userinfo' => ApiQueryUserInfo::class,
+ 'filerepoinfo' => ApiQueryFileRepoInfo::class,
+ 'tokens' => ApiQueryTokens::class,
+ ];
+
+ /**
+ * @var ApiPageSet
+ */
+ private $mPageSet;
+
+ private $mParams;
+ private $mNamedDB = [];
+ private $mModuleMgr;
+
+ /**
+ * @param ApiMain $main
+ * @param string $action
+ */
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action );
+
+ $this->mModuleMgr = new ApiModuleManager( $this );
+
+ // Allow custom modules to be added in LocalSettings.php
+ $config = $this->getConfig();
+ $this->mModuleMgr->addModules( self::$QueryPropModules, 'prop' );
+ $this->mModuleMgr->addModules( $config->get( 'APIPropModules' ), 'prop' );
+ $this->mModuleMgr->addModules( self::$QueryListModules, 'list' );
+ $this->mModuleMgr->addModules( $config->get( 'APIListModules' ), 'list' );
+ $this->mModuleMgr->addModules( self::$QueryMetaModules, 'meta' );
+ $this->mModuleMgr->addModules( $config->get( 'APIMetaModules' ), 'meta' );
+
+ Hooks::run( 'ApiQuery::moduleManager', [ $this->mModuleMgr ] );
+
+ // Create PageSet that will process titles/pageids/revids/generator
+ $this->mPageSet = new ApiPageSet( $this );
+ }
+
+ /**
+ * Overrides to return this instance's module manager.
+ * @return ApiModuleManager
+ */
+ public function getModuleManager() {
+ return $this->mModuleMgr;
+ }
+
+ /**
+ * Get the query database connection with the given name.
+ * If no such connection has been requested before, it will be created.
+ * Subsequent calls with the same $name will return the same connection
+ * as the first, regardless of the values of $db and $groups
+ * @param string $name Name to assign to the database connection
+ * @param int $db One of the DB_* constants
+ * @param string|string[] $groups Query groups
+ * @return IDatabase
+ */
+ public function getNamedDB( $name, $db, $groups ) {
+ if ( !array_key_exists( $name, $this->mNamedDB ) ) {
+ $this->mNamedDB[$name] = wfGetDB( $db, $groups );
+ }
+
+ return $this->mNamedDB[$name];
+ }
+
+ /**
+ * Gets the set of pages the user has requested (or generated)
+ * @return ApiPageSet
+ */
+ public function getPageSet() {
+ return $this->mPageSet;
+ }
+
+ /**
+ * @return ApiFormatRaw|null
+ */
+ public function getCustomPrinter() {
+ // If &exportnowrap is set, use the raw formatter
+ if ( $this->getParameter( 'export' ) &&
+ $this->getParameter( 'exportnowrap' )
+ ) {
+ return new ApiFormatRaw( $this->getMain(),
+ $this->getMain()->createPrinterByName( 'xml' ) );
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Query execution happens in the following steps:
+ * #1 Create a PageSet object with any pages requested by the user
+ * #2 If using a generator, execute it to get a new ApiPageSet object
+ * #3 Instantiate all requested modules.
+ * This way the PageSet object will know what shared data is required,
+ * and minimize DB calls.
+ * #4 Output all normalization and redirect resolution information
+ * #5 Execute all requested modules
+ */
+ public function execute() {
+ $this->mParams = $this->extractRequestParams();
+
+ // Instantiate requested modules
+ $allModules = [];
+ $this->instantiateModules( $allModules, 'prop' );
+ $propModules = array_keys( $allModules );
+ $this->instantiateModules( $allModules, 'list' );
+ $this->instantiateModules( $allModules, 'meta' );
+
+ // Filter modules based on continue parameter
+ $continuationManager = new ApiContinuationManager( $this, $allModules, $propModules );
+ $this->setContinuationManager( $continuationManager );
+ $modules = $continuationManager->getRunModules();
+
+ if ( !$continuationManager->isGeneratorDone() ) {
+ // Query modules may optimize data requests through the $this->getPageSet()
+ // object by adding extra fields from the page table.
+ foreach ( $modules as $module ) {
+ $module->requestExtraData( $this->mPageSet );
+ }
+ // Populate page/revision information
+ $this->mPageSet->execute();
+ // Record page information (title, namespace, if exists, etc)
+ $this->outputGeneralPageInfo();
+ } else {
+ $this->mPageSet->executeDryRun();
+ }
+
+ $cacheMode = $this->mPageSet->getCacheMode();
+
+ // Execute all unfinished modules
+ /** @var ApiQueryBase $module */
+ foreach ( $modules as $module ) {
+ $params = $module->extractRequestParams();
+ $cacheMode = $this->mergeCacheMode(
+ $cacheMode, $module->getCacheMode( $params ) );
+ $module->execute();
+ Hooks::run( 'APIQueryAfterExecute', [ &$module ] );
+ }
+
+ // Set the cache mode
+ $this->getMain()->setCacheMode( $cacheMode );
+
+ // Write the continuation data into the result
+ $this->setContinuationManager( null );
+ if ( $this->mParams['rawcontinue'] ) {
+ $data = $continuationManager->getRawNonContinuation();
+ if ( $data ) {
+ $this->getResult()->addValue( null, 'query-noncontinue', $data,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ $data = $continuationManager->getRawContinuation();
+ if ( $data ) {
+ $this->getResult()->addValue( null, 'query-continue', $data,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ } else {
+ $continuationManager->setContinuationIntoResult( $this->getResult() );
+ }
+ }
+
+ /**
+ * Update a cache mode string, applying the cache mode of a new module to it.
+ * The cache mode may increase in the level of privacy, but public modules
+ * added to private data do not decrease the level of privacy.
+ *
+ * @param string $cacheMode
+ * @param string $modCacheMode
+ * @return string
+ */
+ protected function mergeCacheMode( $cacheMode, $modCacheMode ) {
+ if ( $modCacheMode === 'anon-public-user-private' ) {
+ if ( $cacheMode !== 'private' ) {
+ $cacheMode = 'anon-public-user-private';
+ }
+ } elseif ( $modCacheMode === 'public' ) {
+ // do nothing, if it's public already it will stay public
+ } else { // private
+ $cacheMode = 'private';
+ }
+
+ return $cacheMode;
+ }
+
+ /**
+ * Create instances of all modules requested by the client
+ * @param array $modules To append instantiated modules to
+ * @param string $param Parameter name to read modules from
+ */
+ private function instantiateModules( &$modules, $param ) {
+ $wasPosted = $this->getRequest()->wasPosted();
+ if ( isset( $this->mParams[$param] ) ) {
+ foreach ( $this->mParams[$param] as $moduleName ) {
+ $instance = $this->mModuleMgr->getModule( $moduleName, $param );
+ if ( $instance === null ) {
+ ApiBase::dieDebug( __METHOD__, 'Error instantiating module' );
+ }
+ if ( !$wasPosted && $instance->mustBePosted() ) {
+ $this->dieWithErrorOrDebug( [ 'apierror-mustbeposted', $moduleName ] );
+ }
+ // Ignore duplicates. TODO 2.0: die()?
+ if ( !array_key_exists( $moduleName, $modules ) ) {
+ $modules[$moduleName] = $instance;
+ }
+ }
+ }
+ }
+
+ /**
+ * Appends an element for each page in the current pageSet with the
+ * most general information (id, title), plus any title normalizations
+ * and missing or invalid title/pageids/revids.
+ */
+ private function outputGeneralPageInfo() {
+ $pageSet = $this->getPageSet();
+ $result = $this->getResult();
+
+ // We can't really handle max-result-size failure here, but we need to
+ // check anyway in case someone set the limit stupidly low.
+ $fit = true;
+
+ $values = $pageSet->getNormalizedTitlesAsResult( $result );
+ if ( $values ) {
+ $fit = $fit && $result->addValue( 'query', 'normalized', $values );
+ }
+ $values = $pageSet->getConvertedTitlesAsResult( $result );
+ if ( $values ) {
+ $fit = $fit && $result->addValue( 'query', 'converted', $values );
+ }
+ $values = $pageSet->getInterwikiTitlesAsResult( $result, $this->mParams['iwurl'] );
+ if ( $values ) {
+ $fit = $fit && $result->addValue( 'query', 'interwiki', $values );
+ }
+ $values = $pageSet->getRedirectTitlesAsResult( $result );
+ if ( $values ) {
+ $fit = $fit && $result->addValue( 'query', 'redirects', $values );
+ }
+ $values = $pageSet->getMissingRevisionIDsAsResult( $result );
+ if ( $values ) {
+ $fit = $fit && $result->addValue( 'query', 'badrevids', $values );
+ }
+
+ // Page elements
+ $pages = [];
+
+ // Report any missing titles
+ foreach ( $pageSet->getMissingTitles() as $fakeId => $title ) {
+ $vals = [];
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ $vals['missing'] = true;
+ if ( $title->isKnown() ) {
+ $vals['known'] = true;
+ }
+ $pages[$fakeId] = $vals;
+ }
+ // Report any invalid titles
+ foreach ( $pageSet->getInvalidTitlesAndReasons() as $fakeId => $data ) {
+ $pages[$fakeId] = $data + [ 'invalid' => true ];
+ }
+ // Report any missing page ids
+ foreach ( $pageSet->getMissingPageIDs() as $pageid ) {
+ $pages[$pageid] = [
+ 'pageid' => $pageid,
+ 'missing' => true,
+ ];
+ }
+ // Report special pages
+ /** @var Title $title */
+ foreach ( $pageSet->getSpecialTitles() as $fakeId => $title ) {
+ $vals = [];
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ $vals['special'] = true;
+ if ( !$title->isKnown() ) {
+ $vals['missing'] = true;
+ }
+ $pages[$fakeId] = $vals;
+ }
+
+ // Output general page information for found titles
+ foreach ( $pageSet->getGoodTitles() as $pageid => $title ) {
+ $vals = [];
+ $vals['pageid'] = $pageid;
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ $pages[$pageid] = $vals;
+ }
+
+ if ( count( $pages ) ) {
+ $pageSet->populateGeneratorData( $pages );
+ ApiResult::setArrayType( $pages, 'BCarray' );
+
+ if ( $this->mParams['indexpageids'] ) {
+ $pageIDs = array_keys( ApiResult::stripMetadataNonRecursive( $pages ) );
+ // json treats all map keys as strings - converting to match
+ $pageIDs = array_map( 'strval', $pageIDs );
+ ApiResult::setIndexedTagName( $pageIDs, 'id' );
+ $fit = $fit && $result->addValue( 'query', 'pageids', $pageIDs );
+ }
+
+ ApiResult::setIndexedTagName( $pages, 'page' );
+ $fit = $fit && $result->addValue( 'query', 'pages', $pages );
+ }
+
+ if ( !$fit ) {
+ $this->dieWithError( 'apierror-badconfig-resulttoosmall', 'badconfig' );
+ }
+
+ if ( $this->mParams['export'] ) {
+ $this->doExport( $pageSet, $result );
+ }
+ }
+
+ /**
+ * @param ApiPageSet $pageSet Pages to be exported
+ * @param ApiResult $result Result to output to
+ */
+ private function doExport( $pageSet, $result ) {
+ $exportTitles = [];
+ $titles = $pageSet->getGoodTitles();
+ if ( count( $titles ) ) {
+ $user = $this->getUser();
+ /** @var Title $title */
+ foreach ( $titles as $title ) {
+ if ( $title->userCan( 'read', $user ) ) {
+ $exportTitles[] = $title;
+ }
+ }
+ }
+
+ $exporter = new WikiExporter( $this->getDB() );
+ $sink = new DumpStringOutput;
+ $exporter->setOutputSink( $sink );
+ $exporter->openStream();
+ foreach ( $exportTitles as $title ) {
+ $exporter->pageByTitle( $title );
+ }
+ $exporter->closeStream();
+
+ // Don't check the size of exported stuff
+ // It's not continuable, so it would cause more
+ // problems than it'd solve
+ if ( $this->mParams['exportnowrap'] ) {
+ $result->reset();
+ // Raw formatter will handle this
+ $result->addValue( null, 'text', $sink, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, 'mime', 'text/xml', ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, 'filename', 'export.xml', ApiResult::NO_SIZE_CHECK );
+ } else {
+ $result->addValue( 'query', 'export', $sink, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( 'query', ApiResult::META_BC_SUBELEMENTS, [ 'export' ] );
+ }
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $result = [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'submodule',
+ ],
+ 'list' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'submodule',
+ ],
+ 'meta' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'submodule',
+ ],
+ 'indexpageids' => false,
+ 'export' => false,
+ 'exportnowrap' => false,
+ 'iwurl' => false,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'rawcontinue' => false,
+ ];
+ if ( $flags ) {
+ $result += $this->getPageSet()->getFinalParams( $flags );
+ }
+
+ return $result;
+ }
+
+ public function isReadMode() {
+ // We need to make an exception for certain meta modules that should be
+ // accessible even without the 'read' right. Restrict the exception as
+ // much as possible: no other modules allowed, and no pageset
+ // parameters either. We do allow the 'rawcontinue' and 'indexpageids'
+ // parameters since frameworks might add these unconditionally and they
+ // can't expose anything here.
+ $this->mParams = $this->extractRequestParams();
+ $params = array_filter(
+ array_diff_key(
+ $this->mParams + $this->getPageSet()->extractRequestParams(),
+ [ 'rawcontinue' => 1, 'indexpageids' => 1 ]
+ )
+ );
+ if ( array_keys( $params ) !== [ 'meta' ] ) {
+ return true;
+ }
+
+ // Ask each module if it requires read mode. Any true => this returns
+ // true.
+ $modules = [];
+ $this->instantiateModules( $modules, 'meta' );
+ foreach ( $modules as $module ) {
+ if ( $module->isReadMode() ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=revisions&meta=siteinfo&' .
+ 'titles=Main%20Page&rvprop=user|comment&continue='
+ => 'apihelp-query-example-revisions',
+ 'action=query&generator=allpages&gapprefix=API/&prop=revisions&continue='
+ => 'apihelp-query-example-allpages',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return [
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Query',
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Meta',
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Properties',
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Lists',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllCategories.php b/www/wiki/includes/api/ApiQueryAllCategories.php
new file mode 100644
index 00000000..4f833e0c
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllCategories.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all categories, even the ones that don't have
+ * category pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllCategories extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ac' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ private function run( $resultPageSet = null ) {
+ $db = $this->getDB();
+ $params = $this->extractRequestParams();
+
+ $this->addTables( 'category' );
+ $this->addFields( 'cat_title' );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 1 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $cont_from = $db->addQuotes( $cont[0] );
+ $this->addWhere( "cat_title $op= $cont_from" );
+ }
+
+ $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
+ $from = ( $params['from'] === null
+ ? null
+ : $this->titlePartToKey( $params['from'], NS_CATEGORY ) );
+ $to = ( $params['to'] === null
+ ? null
+ : $this->titlePartToKey( $params['to'], NS_CATEGORY ) );
+ $this->addWhereRange( 'cat_title', $dir, $from, $to );
+
+ $min = $params['min'];
+ $max = $params['max'];
+ if ( $dir == 'newer' ) {
+ $this->addWhereRange( 'cat_pages', 'newer', $min, $max );
+ } else {
+ $this->addWhereRange( 'cat_pages', 'older', $max, $min );
+ }
+
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhere( 'cat_title' . $db->buildLike(
+ $this->titlePartToKey( $params['prefix'], NS_CATEGORY ),
+ $db->anyString() ) );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ $this->addOption( 'ORDER BY', 'cat_title' . $sort );
+
+ $prop = array_flip( $params['prop'] );
+ $this->addFieldsIf( [ 'cat_pages', 'cat_subcats', 'cat_files' ], isset( $prop['size'] ) );
+ if ( isset( $prop['hidden'] ) ) {
+ $this->addTables( [ 'page', 'page_props' ] );
+ $this->addJoinConds( [
+ 'page' => [ 'LEFT JOIN', [
+ 'page_namespace' => NS_CATEGORY,
+ 'page_title=cat_title' ] ],
+ 'page_props' => [ 'LEFT JOIN', [
+ 'pp_page=page_id',
+ 'pp_propname' => 'hiddencat' ] ],
+ ] );
+ $this->addFields( [ 'cat_hidden' => 'pp_propname' ] );
+ }
+
+ $res = $this->select( __METHOD__ );
+
+ $pages = [];
+
+ $result = $this->getResult();
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional cats to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->cat_title );
+ break;
+ }
+
+ // Normalize titles
+ $titleObj = Title::makeTitle( NS_CATEGORY, $row->cat_title );
+ if ( !is_null( $resultPageSet ) ) {
+ $pages[] = $titleObj;
+ } else {
+ $item = [];
+ ApiResult::setContentValue( $item, 'category', $titleObj->getText() );
+ if ( isset( $prop['size'] ) ) {
+ $item['size'] = intval( $row->cat_pages );
+ $item['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
+ $item['files'] = intval( $row->cat_files );
+ $item['subcats'] = intval( $row->cat_subcats );
+ }
+ if ( isset( $prop['hidden'] ) ) {
+ $item['hidden'] = (bool)$row->cat_hidden;
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $item );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->cat_title );
+ break;
+ }
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'c' );
+ } else {
+ $resultPageSet->populateFromTitles( $pages );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'from' => null,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'to' => null,
+ 'prefix' => null,
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ],
+ ],
+ 'min' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'max' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'prop' => [
+ ApiBase::PARAM_TYPE => [ 'size', 'hidden' ],
+ ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=allcategories&acprop=size'
+ => 'apihelp-query+allcategories-example-size',
+ 'action=query&generator=allcategories&gacprefix=List&prop=info'
+ => 'apihelp-query+allcategories-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allcategories';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllDeletedRevisions.php b/www/wiki/includes/api/ApiQueryAllDeletedRevisions.php
new file mode 100644
index 00000000..be129779
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllDeletedRevisions.php
@@ -0,0 +1,465 @@
+<?php
+/**
+ * Copyright © 2014 Wikimedia Foundation and contributors
+ *
+ * Heavily based on ApiQueryDeletedrevs,
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all deleted revisions.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'adr' );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ protected function run( ApiPageSet $resultPageSet = null ) {
+ // Before doing anything at all, let's check permissions
+ $this->checkUserRightsAny( 'deletedhistory' );
+
+ $user = $this->getUser();
+ $db = $this->getDB();
+ $params = $this->extractRequestParams( false );
+
+ $result = $this->getResult();
+
+ // If the user wants no namespaces, they get no pages.
+ if ( $params['namespace'] === [] ) {
+ if ( $resultPageSet === null ) {
+ $result->addValue( 'query', $this->getModuleName(), [] );
+ }
+ return;
+ }
+
+ // This module operates in two modes:
+ // 'user': List deleted revs by a certain user
+ // 'all': List all deleted revs in NS
+ $mode = 'all';
+ if ( !is_null( $params['user'] ) ) {
+ $mode = 'user';
+ }
+
+ if ( $mode == 'user' ) {
+ foreach ( [ 'from', 'to', 'prefix', 'excludeuser' ] as $param ) {
+ if ( !is_null( $params[$param] ) ) {
+ $p = $this->getModulePrefix();
+ $this->dieWithError(
+ [ 'apierror-invalidparammix-cannotusewith', $p.$param, "{$p}user" ],
+ 'invalidparammix'
+ );
+ }
+ }
+ } else {
+ foreach ( [ 'start', 'end' ] as $param ) {
+ if ( !is_null( $params[$param] ) ) {
+ $p = $this->getModulePrefix();
+ $this->dieWithError(
+ [ 'apierror-invalidparammix-mustusewith', $p.$param, "{$p}user" ],
+ 'invalidparammix'
+ );
+ }
+ }
+ }
+
+ // If we're generating titles only, we can use DISTINCT for a better
+ // query. But we can't do that in 'user' mode (wrong index), and we can
+ // only do it when sorting ASC (because MySQL apparently can't use an
+ // index backwards for grouping even though it can for ORDER BY, WTF?)
+ $dir = $params['dir'];
+ $optimizeGenerateTitles = false;
+ if ( $mode === 'all' && $params['generatetitles'] && $resultPageSet !== null ) {
+ if ( $dir === 'newer' ) {
+ $optimizeGenerateTitles = true;
+ } else {
+ $p = $this->getModulePrefix();
+ $this->addWarning( [ 'apiwarn-alldeletedrevisions-performance', $p ], 'performance' );
+ }
+ }
+
+ if ( $resultPageSet === null ) {
+ $this->parseParameters( $params );
+ $arQuery = Revision::getArchiveQueryInfo();
+ $this->addTables( $arQuery['tables'] );
+ $this->addJoinConds( $arQuery['joins'] );
+ $this->addFields( $arQuery['fields'] );
+ $this->addFields( [ 'ar_title', 'ar_namespace' ] );
+ } else {
+ $this->limit = $this->getParameter( 'limit' ) ?: 10;
+ $this->addTables( 'archive' );
+ $this->addFields( [ 'ar_title', 'ar_namespace' ] );
+ if ( $optimizeGenerateTitles ) {
+ $this->addOption( 'DISTINCT' );
+ } else {
+ $this->addFields( [ 'ar_timestamp', 'ar_rev_id', 'ar_id' ] );
+ }
+ }
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ [ 'tag_summary' => [ 'LEFT JOIN', [ 'ar_rev_id=ts_rev_id' ] ] ]
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( !is_null( $params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds(
+ [ 'change_tag' => [ 'INNER JOIN', [ 'ar_rev_id=ct_rev_id' ] ] ]
+ );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ if ( $this->fetchContent ) {
+ $this->addTables( 'text' );
+ $this->addJoinConds(
+ [ 'text' => [ 'LEFT JOIN', [ 'ar_text_id=old_id' ] ] ]
+ );
+ $this->addFields( [ 'old_text', 'old_flags' ] );
+
+ // This also means stricter restrictions
+ $this->checkUserRightsAny( [ 'deletedtext', 'undelete' ] );
+ }
+
+ $miser_ns = null;
+
+ if ( $mode == 'all' ) {
+ if ( $params['namespace'] !== null ) {
+ $namespaces = $params['namespace'];
+ } else {
+ $namespaces = MWNamespace::getValidNamespaces();
+ }
+ $this->addWhereFld( 'ar_namespace', $namespaces );
+
+ // For from/to/prefix, we have to consider the potential
+ // transformations of the title in all specified namespaces.
+ // Generally there will be only one transformation, but wikis with
+ // some namespaces case-sensitive could have two.
+ if ( $params['from'] !== null || $params['to'] !== null ) {
+ $isDirNewer = ( $dir === 'newer' );
+ $after = ( $isDirNewer ? '>=' : '<=' );
+ $before = ( $isDirNewer ? '<=' : '>=' );
+ $where = [];
+ foreach ( $namespaces as $ns ) {
+ $w = [];
+ if ( $params['from'] !== null ) {
+ $w[] = 'ar_title' . $after .
+ $db->addQuotes( $this->titlePartToKey( $params['from'], $ns ) );
+ }
+ if ( $params['to'] !== null ) {
+ $w[] = 'ar_title' . $before .
+ $db->addQuotes( $this->titlePartToKey( $params['to'], $ns ) );
+ }
+ $w = $db->makeList( $w, LIST_AND );
+ $where[$w][] = $ns;
+ }
+ if ( count( $where ) == 1 ) {
+ $where = key( $where );
+ $this->addWhere( $where );
+ } else {
+ $where2 = [];
+ foreach ( $where as $w => $ns ) {
+ $where2[] = $db->makeList( [ $w, 'ar_namespace' => $ns ], LIST_AND );
+ }
+ $this->addWhere( $db->makeList( $where2, LIST_OR ) );
+ }
+ }
+
+ if ( isset( $params['prefix'] ) ) {
+ $where = [];
+ foreach ( $namespaces as $ns ) {
+ $w = 'ar_title' . $db->buildLike(
+ $this->titlePartToKey( $params['prefix'], $ns ),
+ $db->anyString() );
+ $where[$w][] = $ns;
+ }
+ if ( count( $where ) == 1 ) {
+ $where = key( $where );
+ $this->addWhere( $where );
+ } else {
+ $where2 = [];
+ foreach ( $where as $w => $ns ) {
+ $where2[] = $db->makeList( [ $w, 'ar_namespace' => $ns ], LIST_AND );
+ }
+ $this->addWhere( $db->makeList( $where2, LIST_OR ) );
+ }
+ }
+ } else {
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $miser_ns = $params['namespace'];
+ } else {
+ $this->addWhereFld( 'ar_namespace', $params['namespace'] );
+ }
+ $this->addTimestampWhereRange( 'ar_timestamp', $dir, $params['start'], $params['end'] );
+ }
+
+ if ( !is_null( $params['user'] ) ) {
+ // Don't query by user ID here, it might be able to use the ar_usertext_timestamp index.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'ar_user', User::newFromName( $params['user'], false ), false );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( $actorQuery['conds'] );
+ } elseif ( !is_null( $params['excludeuser'] ) ) {
+ // Here there's no chance of using ar_usertext_timestamp.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'ar_user', User::newFromName( $params['excludeuser'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( 'NOT(' . $actorQuery['conds'] . ')' );
+ }
+
+ if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+ // Paranoia: avoid brute force searches (T19342)
+ // (shouldn't be able to get here without 'deletedhistory', but
+ // check it again just in case)
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'ar_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $op = ( $dir == 'newer' ? '>' : '<' );
+ if ( $optimizeGenerateTitles ) {
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $ns = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $this->addWhere( "ar_namespace $op $ns OR " .
+ "(ar_namespace = $ns AND ar_title $op= $title)" );
+ } elseif ( $mode == 'all' ) {
+ $this->dieContinueUsageIf( count( $cont ) != 4 );
+ $ns = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
+ $ar_id = (int)$cont[3];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[3] );
+ $this->addWhere( "ar_namespace $op $ns OR " .
+ "(ar_namespace = $ns AND " .
+ "(ar_title $op $title OR " .
+ "(ar_title = $title AND " .
+ "(ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)))))" );
+ } else {
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $ts = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $ar_id = (int)$cont[1];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[1] );
+ $this->addWhere( "ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)" );
+ }
+ }
+
+ $this->addOption( 'LIMIT', $this->limit + 1 );
+
+ $sort = ( $dir == 'newer' ? '' : ' DESC' );
+ $orderby = [];
+ if ( $optimizeGenerateTitles ) {
+ // Targeting index name_title_timestamp
+ if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
+ $orderby[] = "ar_namespace $sort";
+ }
+ $orderby[] = "ar_title $sort";
+ } elseif ( $mode == 'all' ) {
+ // Targeting index name_title_timestamp
+ if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
+ $orderby[] = "ar_namespace $sort";
+ }
+ $orderby[] = "ar_title $sort";
+ $orderby[] = "ar_timestamp $sort";
+ $orderby[] = "ar_id $sort";
+ } else {
+ // Targeting index usertext_timestamp
+ // 'user' is always constant.
+ $orderby[] = "ar_timestamp $sort";
+ $orderby[] = "ar_id $sort";
+ }
+ $this->addOption( 'ORDER BY', $orderby );
+
+ $res = $this->select( __METHOD__ );
+ $pageMap = []; // Maps ns&title to array index
+ $count = 0;
+ $nextIndex = 0;
+ $generated = [];
+ foreach ( $res as $row ) {
+ if ( ++$count > $this->limit ) {
+ // We've had enough
+ if ( $optimizeGenerateTitles ) {
+ $this->setContinueEnumParameter( 'continue', "$row->ar_namespace|$row->ar_title" );
+ } elseif ( $mode == 'all' ) {
+ $this->setContinueEnumParameter( 'continue',
+ "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+ }
+ break;
+ }
+
+ // Miser mode namespace check
+ if ( $miser_ns !== null && !in_array( $row->ar_namespace, $miser_ns ) ) {
+ continue;
+ }
+
+ if ( $resultPageSet !== null ) {
+ if ( $params['generatetitles'] ) {
+ $key = "{$row->ar_namespace}:{$row->ar_title}";
+ if ( !isset( $generated[$key] ) ) {
+ $generated[$key] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ }
+ } else {
+ $generated[] = $row->ar_rev_id;
+ }
+ } else {
+ $revision = Revision::newFromArchiveRow( $row );
+ $rev = $this->extractRevisionInfo( $revision, $row );
+
+ if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+ $index = $nextIndex++;
+ $pageMap[$row->ar_namespace][$row->ar_title] = $index;
+ $title = $revision->getTitle();
+ $a = [
+ 'pageid' => $title->getArticleID(),
+ 'revisions' => [ $rev ],
+ ];
+ ApiResult::setIndexedTagName( $a['revisions'], 'rev' );
+ ApiQueryBase::addTitleInfo( $a, $title );
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], $index, $a );
+ } else {
+ $index = $pageMap[$row->ar_namespace][$row->ar_title];
+ $fit = $result->addValue(
+ [ 'query', $this->getModuleName(), $index, 'revisions' ],
+ null, $rev );
+ }
+ if ( !$fit ) {
+ if ( $mode == 'all' ) {
+ $this->setContinueEnumParameter( 'continue',
+ "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+ }
+ break;
+ }
+ }
+ }
+
+ if ( $resultPageSet !== null ) {
+ if ( $params['generatetitles'] ) {
+ $resultPageSet->populateFromTitles( $generated );
+ } else {
+ $resultPageSet->populateFromRevisionIDs( $generated );
+ }
+ } else {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'page' );
+ }
+ }
+
+ public function getAllowedParams() {
+ $ret = parent::getAllowedParams() + [
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'useronly' ] ],
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'useronly' ] ],
+ ],
+ 'dir' => [
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'from' => [
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'nonuseronly' ] ],
+ ],
+ 'to' => [
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'nonuseronly' ] ],
+ ],
+ 'prefix' => [
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'nonuseronly' ] ],
+ ],
+ 'excludeuser' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'nonuseronly' ] ],
+ ],
+ 'tag' => null,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'generatetitles' => [
+ ApiBase::PARAM_DFLT => false
+ ],
+ ];
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['user'][ApiBase::PARAM_HELP_MSG_APPEND] = [
+ 'apihelp-query+alldeletedrevisions-param-miser-user-namespace',
+ ];
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = [
+ 'apihelp-query+alldeletedrevisions-param-miser-user-namespace',
+ ];
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=alldeletedrevisions&adruser=Example&adrlimit=50'
+ => 'apihelp-query+alldeletedrevisions-example-user',
+ 'action=query&list=alldeletedrevisions&adrdir=newer&adrnamespace=0&adrlimit=50'
+ => 'apihelp-query+alldeletedrevisions-example-ns-main',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Alldeletedrevisions';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllImages.php b/www/wiki/includes/api/ApiQueryAllImages.php
new file mode 100644
index 00000000..14f1cc4f
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllImages.php
@@ -0,0 +1,424 @@
+<?php
+
+/**
+ * API for MediaWiki 1.12+
+ *
+ * Copyright © 2008 Vasiliev Victor vasilvv@gmail.com,
+ * based on ApiQueryAllPages.php
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * Query module to enumerate all available pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllImages extends ApiQueryGeneratorBase {
+ protected $mRepo;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ai' );
+ $this->mRepo = RepoGroup::singleton()->getLocalRepo();
+ }
+
+ /**
+ * Override parent method to make sure the repo's DB is used
+ * which may not necessarily be the same as the local DB.
+ *
+ * TODO: allow querying non-local repos.
+ * @return IDatabase
+ */
+ protected function getDB() {
+ return $this->mRepo->getReplicaDB();
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ public function executeGenerator( $resultPageSet ) {
+ if ( $resultPageSet->isResolvingRedirects() ) {
+ $this->dieWithError( 'apierror-allimages-redirect', 'invalidparammix' );
+ }
+
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $repo = $this->mRepo;
+ if ( !$repo instanceof LocalRepo ) {
+ $this->dieWithError( 'apierror-unsupportedrepo' );
+ }
+
+ $prefix = $this->getModulePrefix();
+
+ $db = $this->getDB();
+
+ $params = $this->extractRequestParams();
+
+ // Table and return fields
+ $prop = array_flip( $params['prop'] );
+
+ $fileQuery = LocalFile::getQueryInfo();
+ $this->addTables( $fileQuery['tables'] );
+ $this->addFields( $fileQuery['fields'] );
+ $this->addJoinConds( $fileQuery['joins'] );
+
+ $ascendingOrder = true;
+ if ( $params['dir'] == 'descending' || $params['dir'] == 'older' ) {
+ $ascendingOrder = false;
+ }
+
+ if ( $params['sort'] == 'name' ) {
+ // Check mutually exclusive params
+ $disallowed = [ 'start', 'end', 'user' ];
+ foreach ( $disallowed as $pname ) {
+ if ( isset( $params[$pname] ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-mustusewith',
+ "{$prefix}{$pname}",
+ "{$prefix}sort=timestamp"
+ ],
+ 'invalidparammix'
+ );
+ }
+ }
+ if ( $params['filterbots'] != 'all' ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-mustusewith',
+ "{$prefix}filterbots",
+ "{$prefix}sort=timestamp"
+ ],
+ 'invalidparammix'
+ );
+ }
+
+ // Pagination
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 1 );
+ $op = ( $ascendingOrder ? '>' : '<' );
+ $continueFrom = $db->addQuotes( $cont[0] );
+ $this->addWhere( "img_name $op= $continueFrom" );
+ }
+
+ // Image filters
+ $from = ( $params['from'] === null ? null : $this->titlePartToKey( $params['from'], NS_FILE ) );
+ $to = ( $params['to'] === null ? null : $this->titlePartToKey( $params['to'], NS_FILE ) );
+ $this->addWhereRange( 'img_name', ( $ascendingOrder ? 'newer' : 'older' ), $from, $to );
+
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhere( 'img_name' . $db->buildLike(
+ $this->titlePartToKey( $params['prefix'], NS_FILE ),
+ $db->anyString() ) );
+ }
+ } else {
+ // Check mutually exclusive params
+ $disallowed = [ 'from', 'to', 'prefix' ];
+ foreach ( $disallowed as $pname ) {
+ if ( isset( $params[$pname] ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-mustusewith',
+ "{$prefix}{$pname}",
+ "{$prefix}sort=name"
+ ],
+ 'invalidparammix'
+ );
+ }
+ }
+ if ( !is_null( $params['user'] ) && $params['filterbots'] != 'all' ) {
+ // Since filterbots checks if each user has the bot right, it
+ // doesn't make sense to use it with user
+ $this->dieWithError(
+ [ 'apierror-invalidparammix-cannotusewith', "{$prefix}user", "{$prefix}filterbots" ]
+ );
+ }
+
+ // Pagination
+ $this->addTimestampWhereRange(
+ 'img_timestamp',
+ $ascendingOrder ? 'newer' : 'older',
+ $params['start'],
+ $params['end']
+ );
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'img_name', $ascendingOrder ? 'newer' : 'older', null, null );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = ( $ascendingOrder ? '>' : '<' );
+ $continueTimestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $continueName = $db->addQuotes( $cont[1] );
+ $this->addWhere( "img_timestamp $op $continueTimestamp OR " .
+ "(img_timestamp = $continueTimestamp AND " .
+ "img_name $op= $continueName)"
+ );
+ }
+
+ // Image filters
+ if ( !is_null( $params['user'] ) ) {
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'img_user', User::newFromName( $params['user'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( $actorQuery['conds'] );
+ }
+ if ( $params['filterbots'] != 'all' ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'img_user' );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addTables( 'user_groups' );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addJoinConds( [ 'user_groups' => [
+ 'LEFT JOIN',
+ [
+ 'ug_group' => User::getGroupsWithPermission( 'bot' ),
+ 'ug_user = ' . $actorQuery['fields']['img_user'],
+ 'ug_expiry IS NULL OR ug_expiry >= ' . $db->addQuotes( $db->timestamp() )
+ ]
+ ] ] );
+ $groupCond = ( $params['filterbots'] == 'nobots' ? 'NULL' : 'NOT NULL' );
+ $this->addWhere( "ug_group IS $groupCond" );
+ }
+ }
+
+ // Filters not depending on sort
+ if ( isset( $params['minsize'] ) ) {
+ $this->addWhere( 'img_size>=' . intval( $params['minsize'] ) );
+ }
+
+ if ( isset( $params['maxsize'] ) ) {
+ $this->addWhere( 'img_size<=' . intval( $params['maxsize'] ) );
+ }
+
+ $sha1 = false;
+ if ( isset( $params['sha1'] ) ) {
+ $sha1 = strtolower( $params['sha1'] );
+ if ( !$this->validateSha1Hash( $sha1 ) ) {
+ $this->dieWithError( 'apierror-invalidsha1hash' );
+ }
+ $sha1 = Wikimedia\base_convert( $sha1, 16, 36, 31 );
+ } elseif ( isset( $params['sha1base36'] ) ) {
+ $sha1 = strtolower( $params['sha1base36'] );
+ if ( !$this->validateSha1Base36Hash( $sha1 ) ) {
+ $this->dieWithError( 'apierror-invalidsha1base36hash' );
+ }
+ }
+ if ( $sha1 ) {
+ $this->addWhereFld( 'img_sha1', $sha1 );
+ }
+
+ if ( !is_null( $params['mime'] ) ) {
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $this->dieWithError( 'apierror-mimesearchdisabled' );
+ }
+
+ $mimeConds = [];
+ foreach ( $params['mime'] as $mime ) {
+ list( $major, $minor ) = File::splitMime( $mime );
+ $mimeConds[] = $db->makeList(
+ [
+ 'img_major_mime' => $major,
+ 'img_minor_mime' => $minor,
+ ],
+ LIST_AND
+ );
+ }
+ // safeguard against internal_api_error_DBQueryError
+ if ( count( $mimeConds ) > 0 ) {
+ $this->addWhere( $db->makeList( $mimeConds, LIST_OR ) );
+ } else {
+ // no MIME types, no files
+ $this->getResult()->addValue( 'query', $this->getModuleName(), [] );
+ return;
+ }
+ }
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+ $sortFlag = '';
+ if ( !$ascendingOrder ) {
+ $sortFlag = ' DESC';
+ }
+ if ( $params['sort'] == 'timestamp' ) {
+ $this->addOption( 'ORDER BY', 'img_timestamp' . $sortFlag );
+ } else {
+ $this->addOption( 'ORDER BY', 'img_name' . $sortFlag );
+ }
+
+ $res = $this->select( __METHOD__ );
+
+ $titles = [];
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ if ( $params['sort'] == 'name' ) {
+ $this->setContinueEnumParameter( 'continue', $row->img_name );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->img_timestamp|$row->img_name" );
+ }
+ break;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $file = $repo->newFileFromRow( $row );
+ $info = array_merge( [ 'name' => $row->img_name ],
+ ApiQueryImageInfo::getInfo( $file, $prop, $result ) );
+ self::addTitleInfo( $info, $file->getTitle() );
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $info );
+ if ( !$fit ) {
+ if ( $params['sort'] == 'name' ) {
+ $this->setContinueEnumParameter( 'continue', $row->img_name );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->img_timestamp|$row->img_name" );
+ }
+ break;
+ }
+ } else {
+ $titles[] = Title::makeTitle( NS_FILE, $row->img_name );
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'img' );
+ } else {
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getAllowedParams() {
+ $ret = [
+ 'sort' => [
+ ApiBase::PARAM_DFLT => 'name',
+ ApiBase::PARAM_TYPE => [
+ 'name',
+ 'timestamp'
+ ]
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ // sort=name
+ 'ascending',
+ 'descending',
+ // sort=timestamp
+ 'newer',
+ 'older'
+ ]
+ ],
+ 'from' => null,
+ 'to' => null,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'prop' => [
+ ApiBase::PARAM_TYPE => ApiQueryImageInfo::getPropertyNames( $this->propertyFilter ),
+ ApiBase::PARAM_DFLT => 'timestamp|url',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-prop',
+ ApiBase::PARAM_HELP_MSG_PER_VALUE =>
+ ApiQueryImageInfo::getPropertyMessages( $this->propertyFilter ),
+ ],
+ 'prefix' => null,
+ 'minsize' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'maxsize' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'sha1' => null,
+ 'sha1base36' => null,
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'filterbots' => [
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => [
+ 'all',
+ 'bots',
+ 'nobots'
+ ]
+ ],
+ 'mime' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ ];
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['mime'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+ }
+
+ return $ret;
+ }
+
+ private $propertyFilter = [ 'archivename', 'thumbmime', 'uploadwarning' ];
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=allimages&aifrom=B'
+ => 'apihelp-query+allimages-example-B',
+ 'action=query&list=allimages&aiprop=user|timestamp|url&' .
+ 'aisort=timestamp&aidir=older'
+ => 'apihelp-query+allimages-example-recent',
+ 'action=query&list=allimages&aimime=image/png|image/gif'
+ => 'apihelp-query+allimages-example-mimetypes',
+ 'action=query&generator=allimages&gailimit=4&' .
+ 'gaifrom=T&prop=imageinfo'
+ => 'apihelp-query+allimages-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allimages';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllLinks.php b/www/wiki/includes/api/ApiQueryAllLinks.php
new file mode 100644
index 00000000..057dbb2a
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllLinks.php
@@ -0,0 +1,309 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate links from all pages together.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllLinks extends ApiQueryGeneratorBase {
+
+ private $table, $tablePrefix, $indexTag;
+ private $fieldTitle = 'title';
+ private $dfltNamespace = NS_MAIN;
+ private $hasNamespace = true;
+ private $useIndex = null;
+ private $props = [];
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ switch ( $moduleName ) {
+ case 'alllinks':
+ $prefix = 'al';
+ $this->table = 'pagelinks';
+ $this->tablePrefix = 'pl_';
+ $this->useIndex = 'pl_namespace';
+ $this->indexTag = 'l';
+ break;
+ case 'alltransclusions':
+ $prefix = 'at';
+ $this->table = 'templatelinks';
+ $this->tablePrefix = 'tl_';
+ $this->dfltNamespace = NS_TEMPLATE;
+ $this->useIndex = 'tl_namespace';
+ $this->indexTag = 't';
+ break;
+ case 'allfileusages':
+ $prefix = 'af';
+ $this->table = 'imagelinks';
+ $this->tablePrefix = 'il_';
+ $this->fieldTitle = 'to';
+ $this->dfltNamespace = NS_FILE;
+ $this->hasNamespace = false;
+ $this->indexTag = 'f';
+ break;
+ case 'allredirects':
+ $prefix = 'ar';
+ $this->table = 'redirect';
+ $this->tablePrefix = 'rd_';
+ $this->indexTag = 'r';
+ $this->props = [
+ 'fragment' => 'rd_fragment',
+ 'interwiki' => 'rd_interwiki',
+ ];
+ break;
+ default:
+ ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
+ }
+
+ parent::__construct( $query, $moduleName, $prefix );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $db = $this->getDB();
+ $params = $this->extractRequestParams();
+
+ $pfx = $this->tablePrefix;
+ $fieldTitle = $this->fieldTitle;
+ $prop = array_flip( $params['prop'] );
+ $fld_ids = isset( $prop['ids'] );
+ $fld_title = isset( $prop['title'] );
+ if ( $this->hasNamespace ) {
+ $namespace = $params['namespace'];
+ } else {
+ $namespace = $this->dfltNamespace;
+ }
+
+ if ( $params['unique'] ) {
+ $matches = array_intersect_key( $prop, $this->props + [ 'ids' => 1 ] );
+ if ( $matches ) {
+ $p = $this->getModulePrefix();
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-cannotusewith',
+ "{$p}prop=" . implode( '|', array_keys( $matches ) ),
+ "{$p}unique"
+ ],
+ 'invalidparammix'
+ );
+ }
+ $this->addOption( 'DISTINCT' );
+ }
+
+ $this->addTables( $this->table );
+ if ( $this->hasNamespace ) {
+ $this->addWhereFld( $pfx . 'namespace', $namespace );
+ }
+
+ $continue = !is_null( $params['continue'] );
+ if ( $continue ) {
+ $continueArr = explode( '|', $params['continue'] );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ if ( $params['unique'] ) {
+ $this->dieContinueUsageIf( count( $continueArr ) != 1 );
+ $continueTitle = $db->addQuotes( $continueArr[0] );
+ $this->addWhere( "{$pfx}{$fieldTitle} $op= $continueTitle" );
+ } else {
+ $this->dieContinueUsageIf( count( $continueArr ) != 2 );
+ $continueTitle = $db->addQuotes( $continueArr[0] );
+ $continueFrom = intval( $continueArr[1] );
+ $this->addWhere(
+ "{$pfx}{$fieldTitle} $op $continueTitle OR " .
+ "({$pfx}{$fieldTitle} = $continueTitle AND " .
+ "{$pfx}from $op= $continueFrom)"
+ );
+ }
+ }
+
+ // 'continue' always overrides 'from'
+ $from = ( $continue || $params['from'] === null ? null :
+ $this->titlePartToKey( $params['from'], $namespace ) );
+ $to = ( $params['to'] === null ? null :
+ $this->titlePartToKey( $params['to'], $namespace ) );
+ $this->addWhereRange( $pfx . $fieldTitle, 'newer', $from, $to );
+
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhere( $pfx . $fieldTitle . $db->buildLike( $this->titlePartToKey(
+ $params['prefix'], $namespace ), $db->anyString() ) );
+ }
+
+ $this->addFields( [ 'pl_title' => $pfx . $fieldTitle ] );
+ $this->addFieldsIf( [ 'pl_from' => $pfx . 'from' ], !$params['unique'] );
+ foreach ( $this->props as $name => $field ) {
+ $this->addFieldsIf( $field, isset( $prop[$name] ) );
+ }
+
+ if ( $this->useIndex ) {
+ $this->addOption( 'USE INDEX', $this->useIndex );
+ }
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ $orderBy = [];
+ $orderBy[] = $pfx . $fieldTitle . $sort;
+ if ( !$params['unique'] ) {
+ $orderBy[] = $pfx . 'from' . $sort;
+ }
+ $this->addOption( 'ORDER BY', $orderBy );
+
+ $res = $this->select( __METHOD__ );
+
+ $pageids = [];
+ $titles = [];
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ if ( $params['unique'] ) {
+ $this->setContinueEnumParameter( 'continue', $row->pl_title );
+ } else {
+ $this->setContinueEnumParameter( 'continue', $row->pl_title . '|' . $row->pl_from );
+ }
+ break;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $vals = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ if ( $fld_ids ) {
+ $vals['fromid'] = intval( $row->pl_from );
+ }
+ if ( $fld_title ) {
+ $title = Title::makeTitle( $namespace, $row->pl_title );
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+ foreach ( $this->props as $name => $field ) {
+ if ( isset( $prop[$name] ) && $row->$field !== null && $row->$field !== '' ) {
+ $vals[$name] = $row->$field;
+ }
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ if ( $params['unique'] ) {
+ $this->setContinueEnumParameter( 'continue', $row->pl_title );
+ } else {
+ $this->setContinueEnumParameter( 'continue', $row->pl_title . '|' . $row->pl_from );
+ }
+ break;
+ }
+ } elseif ( $params['unique'] ) {
+ $titles[] = Title::makeTitle( $namespace, $row->pl_title );
+ } else {
+ $pageids[] = $row->pl_from;
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], $this->indexTag );
+ } elseif ( $params['unique'] ) {
+ $resultPageSet->populateFromTitles( $titles );
+ } else {
+ $resultPageSet->populateFromPageIDs( $pageids );
+ }
+ }
+
+ public function getAllowedParams() {
+ $allowedParams = [
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'from' => null,
+ 'to' => null,
+ 'prefix' => null,
+ 'unique' => false,
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'title',
+ ApiBase::PARAM_TYPE => array_merge(
+ [ 'ids', 'title' ], array_keys( $this->props )
+ ),
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_DFLT => $this->dfltNamespace,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_EXTRA_NAMESPACES => [ NS_MEDIA, NS_SPECIAL ],
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ ];
+ if ( !$this->hasNamespace ) {
+ unset( $allowedParams['namespace'] );
+ }
+
+ return $allowedParams;
+ }
+
+ protected function getExamplesMessages() {
+ $p = $this->getModulePrefix();
+ $name = $this->getModuleName();
+ $path = $this->getModulePath();
+
+ return [
+ "action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
+ => "apihelp-$path-example-B",
+ "action=query&list={$name}&{$p}unique=&{$p}from=B"
+ => "apihelp-$path-example-unique",
+ "action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
+ => "apihelp-$path-example-unique-generator",
+ "action=query&generator={$name}&g{$p}from=B"
+ => "apihelp-$path-example-generator",
+ ];
+ }
+
+ public function getHelpUrls() {
+ $name = ucfirst( $this->getModuleName() );
+
+ return "https://www.mediawiki.org/wiki/Special:MyLanguage/API:{$name}";
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllMessages.php b/www/wiki/includes/api/ApiQueryAllMessages.php
new file mode 100644
index 00000000..40abcaf2
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllMessages.php
@@ -0,0 +1,257 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query action to return messages from site message cache
+ *
+ * @ingroup API
+ */
+class ApiQueryAllMessages extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'am' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ if ( is_null( $params['lang'] ) ) {
+ $langObj = $this->getLanguage();
+ } elseif ( !Language::isValidCode( $params['lang'] ) ) {
+ $this->dieWithError(
+ [ 'apierror-invalidlang', $this->encodeParamName( 'lang' ) ], 'invalidlang'
+ );
+ } else {
+ $langObj = Language::factory( $params['lang'] );
+ }
+
+ if ( $params['enableparser'] ) {
+ if ( !is_null( $params['title'] ) ) {
+ $title = Title::newFromText( $params['title'] );
+ if ( !$title || $title->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+ } else {
+ $title = Title::newFromText( 'API' );
+ }
+ }
+
+ $prop = array_flip( (array)$params['prop'] );
+
+ // Determine which messages should we print
+ if ( in_array( '*', $params['messages'] ) ) {
+ $message_names = Language::getMessageKeysFor( $langObj->getCode() );
+ if ( $params['includelocal'] ) {
+ $message_names = array_unique( array_merge(
+ $message_names,
+ // Pass in the content language code so we get local messages that have a
+ // MediaWiki:msgkey page. We might theoretically miss messages that have no
+ // MediaWiki:msgkey page but do have a MediaWiki:msgkey/lang page, but that's
+ // just a stupid case.
+ MessageCache::singleton()->getAllMessageKeys( $this->getConfig()->get( 'LanguageCode' ) )
+ ) );
+ }
+ sort( $message_names );
+ $messages_target = $message_names;
+ } else {
+ $messages_target = $params['messages'];
+ }
+
+ // Filter messages that have the specified prefix
+ // Because we sorted the message array earlier, they will appear in a clump:
+ if ( isset( $params['prefix'] ) ) {
+ $skip = false;
+ $messages_filtered = [];
+ foreach ( $messages_target as $message ) {
+ // === 0: must be at beginning of string (position 0)
+ if ( strpos( $message, $params['prefix'] ) === 0 ) {
+ if ( !$skip ) {
+ $skip = true;
+ }
+ $messages_filtered[] = $message;
+ } elseif ( $skip ) {
+ break;
+ }
+ }
+ $messages_target = $messages_filtered;
+ }
+
+ // Filter messages that contain specified string
+ if ( isset( $params['filter'] ) ) {
+ $messages_filtered = [];
+ foreach ( $messages_target as $message ) {
+ // !== is used because filter can be at the beginning of the string
+ if ( strpos( $message, $params['filter'] ) !== false ) {
+ $messages_filtered[] = $message;
+ }
+ }
+ $messages_target = $messages_filtered;
+ }
+
+ // Whether we have any sort of message customisation filtering
+ $customiseFilterEnabled = $params['customised'] !== 'all';
+ if ( $customiseFilterEnabled ) {
+ global $wgContLang;
+
+ $customisedMessages = AllMessagesTablePager::getCustomisedStatuses(
+ array_map(
+ [ $langObj, 'ucfirst' ],
+ $messages_target
+ ),
+ $langObj->getCode(),
+ !$langObj->equals( $wgContLang )
+ );
+
+ $customised = $params['customised'] === 'modified';
+ }
+
+ // Get all requested messages and print the result
+ $skip = !is_null( $params['from'] );
+ $useto = !is_null( $params['to'] );
+ $result = $this->getResult();
+ foreach ( $messages_target as $message ) {
+ // Skip all messages up to $params['from']
+ if ( $skip && $message === $params['from'] ) {
+ $skip = false;
+ }
+
+ if ( $useto && $message > $params['to'] ) {
+ break;
+ }
+
+ if ( !$skip ) {
+ $a = [
+ 'name' => $message,
+ 'normalizedname' => MessageCache::normalizeKey( $message ),
+ ];
+
+ $args = [];
+ if ( isset( $params['args'] ) && count( $params['args'] ) != 0 ) {
+ $args = $params['args'];
+ }
+
+ if ( $customiseFilterEnabled ) {
+ $messageIsCustomised = isset( $customisedMessages['pages'][$langObj->ucfirst( $message )] );
+ if ( $customised === $messageIsCustomised ) {
+ if ( $customised ) {
+ $a['customised'] = true;
+ }
+ } else {
+ continue;
+ }
+ }
+
+ $msg = wfMessage( $message, $args )->inLanguage( $langObj );
+
+ if ( !$msg->exists() ) {
+ $a['missing'] = true;
+ } else {
+ // Check if the parser is enabled:
+ if ( $params['enableparser'] ) {
+ $msgString = $msg->title( $title )->text();
+ } else {
+ $msgString = $msg->plain();
+ }
+ if ( !$params['nocontent'] ) {
+ ApiResult::setContentValue( $a, 'content', $msgString );
+ }
+ if ( isset( $prop['default'] ) ) {
+ $default = wfMessage( $message )->inLanguage( $langObj )->useDatabase( false );
+ if ( !$default->exists() ) {
+ $a['defaultmissing'] = true;
+ } elseif ( $default->plain() != $msgString ) {
+ $a['default'] = $default->plain();
+ }
+ }
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $a );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'from', $message );
+ break;
+ }
+ }
+ }
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'message' );
+ }
+
+ public function getCacheMode( $params ) {
+ if ( is_null( $params['lang'] ) ) {
+ // Language not specified, will be fetched from preferences
+ return 'anon-public-user-private';
+ } elseif ( $params['enableparser'] ) {
+ // User-specific parser options will be used
+ return 'anon-public-user-private';
+ } else {
+ // OK to cache
+ return 'public';
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'messages' => [
+ ApiBase::PARAM_DFLT => '*',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'default'
+ ]
+ ],
+ 'enableparser' => false,
+ 'nocontent' => false,
+ 'includelocal' => false,
+ 'args' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_ALLOW_DUPLICATES => true,
+ ],
+ 'filter' => [],
+ 'customised' => [
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => [
+ 'all',
+ 'modified',
+ 'unmodified'
+ ]
+ ],
+ 'lang' => null,
+ 'from' => null,
+ 'to' => null,
+ 'title' => null,
+ 'prefix' => null,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&meta=allmessages&amprefix=ipb-'
+ => 'apihelp-query+allmessages-example-ipb',
+ 'action=query&meta=allmessages&ammessages=august|mainpage&amlang=de'
+ => 'apihelp-query+allmessages-example-de',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allmessages';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllPages.php b/www/wiki/includes/api/ApiQueryAllPages.php
new file mode 100644
index 00000000..40909a49
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllPages.php
@@ -0,0 +1,356 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Query module to enumerate all available pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllPages extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ap' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ public function executeGenerator( $resultPageSet ) {
+ if ( $resultPageSet->isResolvingRedirects() ) {
+ $this->dieWithError( 'apierror-allpages-generator-redirects', 'params' );
+ }
+
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $db = $this->getDB();
+
+ $params = $this->extractRequestParams();
+
+ // Page filters
+ $this->addTables( 'page' );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 1 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $cont_from = $db->addQuotes( $cont[0] );
+ $this->addWhere( "page_title $op= $cont_from" );
+ }
+
+ $miserMode = $this->getConfig()->get( 'MiserMode' );
+ if ( !$miserMode ) {
+ if ( $params['filterredir'] == 'redirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 1 );
+ } elseif ( $params['filterredir'] == 'nonredirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 0 );
+ }
+ }
+
+ $this->addWhereFld( 'page_namespace', $params['namespace'] );
+ $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
+ $from = ( $params['from'] === null
+ ? null
+ : $this->titlePartToKey( $params['from'], $params['namespace'] ) );
+ $to = ( $params['to'] === null
+ ? null
+ : $this->titlePartToKey( $params['to'], $params['namespace'] ) );
+ $this->addWhereRange( 'page_title', $dir, $from, $to );
+
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhere( 'page_title' . $db->buildLike(
+ $this->titlePartToKey( $params['prefix'], $params['namespace'] ),
+ $db->anyString() ) );
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $selectFields = [
+ 'page_namespace',
+ 'page_title',
+ 'page_id'
+ ];
+ } else {
+ $selectFields = $resultPageSet->getPageTableFields();
+ }
+
+ $miserModeFilterRedirValue = null;
+ $miserModeFilterRedir = $miserMode && $params['filterredir'] !== 'all';
+ if ( $miserModeFilterRedir ) {
+ $selectFields[] = 'page_is_redirect';
+
+ if ( $params['filterredir'] == 'redirects' ) {
+ $miserModeFilterRedirValue = 1;
+ } elseif ( $params['filterredir'] == 'nonredirects' ) {
+ $miserModeFilterRedirValue = 0;
+ }
+ }
+
+ $this->addFields( $selectFields );
+ $forceNameTitleIndex = true;
+ if ( isset( $params['minsize'] ) ) {
+ $this->addWhere( 'page_len>=' . intval( $params['minsize'] ) );
+ $forceNameTitleIndex = false;
+ }
+
+ if ( isset( $params['maxsize'] ) ) {
+ $this->addWhere( 'page_len<=' . intval( $params['maxsize'] ) );
+ $forceNameTitleIndex = false;
+ }
+
+ // Page protection filtering
+ if ( $params['prtype'] || $params['prexpiry'] != 'all' ) {
+ $this->addTables( 'page_restrictions' );
+ $this->addWhere( 'page_id=pr_page' );
+ $this->addWhere( "pr_expiry > {$db->addQuotes( $db->timestamp() )} OR pr_expiry IS NULL" );
+
+ if ( $params['prtype'] ) {
+ $this->addWhereFld( 'pr_type', $params['prtype'] );
+
+ if ( isset( $params['prlevel'] ) ) {
+ // Remove the empty string and '*' from the prlevel array
+ $prlevel = array_diff( $params['prlevel'], [ '', '*' ] );
+
+ if ( count( $prlevel ) ) {
+ $this->addWhereFld( 'pr_level', $prlevel );
+ }
+ }
+ if ( $params['prfiltercascade'] == 'cascading' ) {
+ $this->addWhereFld( 'pr_cascade', 1 );
+ } elseif ( $params['prfiltercascade'] == 'noncascading' ) {
+ $this->addWhereFld( 'pr_cascade', 0 );
+ }
+ }
+ $forceNameTitleIndex = false;
+
+ if ( $params['prexpiry'] == 'indefinite' ) {
+ $this->addWhere( "pr_expiry = {$db->addQuotes( $db->getInfinity() )} OR pr_expiry IS NULL" );
+ } elseif ( $params['prexpiry'] == 'definite' ) {
+ $this->addWhere( "pr_expiry != {$db->addQuotes( $db->getInfinity() )}" );
+ }
+
+ $this->addOption( 'DISTINCT' );
+ } elseif ( isset( $params['prlevel'] ) ) {
+ $this->dieWithError(
+ [ 'apierror-invalidparammix-mustusewith', 'prlevel', 'prtype' ], 'invalidparammix'
+ );
+ }
+
+ if ( $params['filterlanglinks'] == 'withoutlanglinks' ) {
+ $this->addTables( 'langlinks' );
+ $this->addJoinConds( [ 'langlinks' => [ 'LEFT JOIN', 'page_id=ll_from' ] ] );
+ $this->addWhere( 'll_from IS NULL' );
+ $forceNameTitleIndex = false;
+ } elseif ( $params['filterlanglinks'] == 'withlanglinks' ) {
+ $this->addTables( 'langlinks' );
+ $this->addWhere( 'page_id=ll_from' );
+ $this->addOption( 'STRAIGHT_JOIN' );
+
+ // MySQL filesorts if we use a GROUP BY that works with the rules
+ // in the 1992 SQL standard (it doesn't like having the
+ // constant-in-WHERE page_namespace column in there). Using the
+ // 1999 rules works fine, but that breaks other DBs. Sigh.
+ /// @todo Once we drop support for 1992-rule DBs, we can simplify this.
+ $dbType = $db->getType();
+ if ( $dbType === 'mysql' || $dbType === 'sqlite' ) {
+ // Ignore the rules, or 1999 rules if you count unique keys
+ // over non-NULL columns as satisfying the requirement for
+ // "functional dependency" and don't require including
+ // constant-in-WHERE columns in the GROUP BY.
+ $this->addOption( 'GROUP BY', [ 'page_title' ] );
+ } elseif ( $dbType === 'postgres' && $db->getServerVersion() >= 9.1 ) {
+ // 1999 rules only counting primary keys
+ $this->addOption( 'GROUP BY', [ 'page_title', 'page_id' ] );
+ } else {
+ // 1992 rules
+ $this->addOption( 'GROUP BY', $selectFields );
+ }
+
+ $forceNameTitleIndex = false;
+ }
+
+ if ( $forceNameTitleIndex ) {
+ $this->addOption( 'USE INDEX', 'name_title' );
+ }
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+ $res = $this->select( __METHOD__ );
+
+ // Get gender information
+ if ( MWNamespace::hasGenderDistinction( $params['namespace'] ) ) {
+ $users = [];
+ foreach ( $res as $row ) {
+ $users[] = $row->page_title;
+ }
+ MediaWikiServices::getInstance()->getGenderCache()->doQuery( $users, __METHOD__ );
+ $res->rewind(); // reset
+ }
+
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->page_title );
+ break;
+ }
+
+ if ( $miserModeFilterRedir && (int)$row->page_is_redirect !== $miserModeFilterRedirValue ) {
+ // Filter implemented in PHP due to being in Miser Mode
+ continue;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $vals = [
+ 'pageid' => intval( $row->page_id ),
+ 'ns' => intval( $title->getNamespace() ),
+ 'title' => $title->getPrefixedText()
+ ];
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->page_title );
+ break;
+ }
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'p' );
+ }
+ }
+
+ public function getAllowedParams() {
+ $ret = [
+ 'from' => null,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'to' => null,
+ 'prefix' => null,
+ 'namespace' => [
+ ApiBase::PARAM_DFLT => NS_MAIN,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ],
+ 'filterredir' => [
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => [
+ 'all',
+ 'redirects',
+ 'nonredirects'
+ ]
+ ],
+ 'minsize' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'maxsize' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'prtype' => [
+ ApiBase::PARAM_TYPE => Title::getFilteredRestrictionTypes( true ),
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'prlevel' => [
+ ApiBase::PARAM_TYPE => $this->getConfig()->get( 'RestrictionLevels' ),
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'prfiltercascade' => [
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => [
+ 'cascading',
+ 'noncascading',
+ 'all'
+ ],
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ 'filterlanglinks' => [
+ ApiBase::PARAM_TYPE => [
+ 'withlanglinks',
+ 'withoutlanglinks',
+ 'all'
+ ],
+ ApiBase::PARAM_DFLT => 'all'
+ ],
+ 'prexpiry' => [
+ ApiBase::PARAM_TYPE => [
+ 'indefinite',
+ 'definite',
+ 'all'
+ ],
+ ApiBase::PARAM_DFLT => 'all'
+ ],
+ ];
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['filterredir'][ApiBase::PARAM_HELP_MSG_APPEND] = [ 'api-help-param-limited-in-miser-mode' ];
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=allpages&apfrom=B'
+ => 'apihelp-query+allpages-example-B',
+ 'action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info'
+ => 'apihelp-query+allpages-example-generator',
+ 'action=query&generator=allpages&gaplimit=2&' .
+ 'gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content'
+ => 'apihelp-query+allpages-example-generator-revisions',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allpages';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllRevisions.php b/www/wiki/includes/api/ApiQueryAllRevisions.php
new file mode 100644
index 00000000..3af24597
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllRevisions.php
@@ -0,0 +1,282 @@
+<?php
+/**
+ * Copyright © 2015 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all revisions.
+ *
+ * @ingroup API
+ * @since 1.27
+ */
+class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'arv' );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ protected function run( ApiPageSet $resultPageSet = null ) {
+ $db = $this->getDB();
+ $params = $this->extractRequestParams( false );
+
+ $result = $this->getResult();
+
+ $this->requireMaxOneParameter( $params, 'user', 'excludeuser' );
+
+ // Namespace check is likely to be desired, but can't be done
+ // efficiently in SQL.
+ $miser_ns = null;
+ $needPageTable = false;
+ if ( $params['namespace'] !== null ) {
+ $params['namespace'] = array_unique( $params['namespace'] );
+ sort( $params['namespace'] );
+ if ( $params['namespace'] != MWNamespace::getValidNamespaces() ) {
+ $needPageTable = true;
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $miser_ns = $params['namespace'];
+ } else {
+ $this->addWhere( [ 'page_namespace' => $params['namespace'] ] );
+ }
+ }
+ }
+
+ if ( $resultPageSet === null ) {
+ $this->parseParameters( $params );
+ $revQuery = Revision::getQueryInfo(
+ $this->fetchContent ? [ 'page', 'text' ] : [ 'page' ]
+ );
+ $this->addTables( $revQuery['tables'] );
+ $this->addFields( $revQuery['fields'] );
+ $this->addJoinConds( $revQuery['joins'] );
+
+ // Review this depeneding on the outcome of T113901
+ $this->addOption( 'STRAIGHT_JOIN' );
+ } else {
+ $this->limit = $this->getParameter( 'limit' ) ?: 10;
+ $this->addTables( 'revision' );
+ $this->addFields( [ 'rev_timestamp', 'rev_id' ] );
+ if ( $params['generatetitles'] ) {
+ $this->addFields( [ 'rev_page' ] );
+ }
+
+ if ( $needPageTable ) {
+ $this->addTables( 'page' );
+ $this->addJoinConds(
+ [ 'page' => [ 'INNER JOIN', [ 'rev_page = page_id' ] ] ]
+ );
+ $this->addFieldsIf( [ 'page_namespace' ], (bool)$miser_ns );
+
+ // Review this depeneding on the outcome of T113901
+ $this->addOption( 'STRAIGHT_JOIN' );
+ }
+ }
+
+ $dir = $params['dir'];
+ $this->addTimestampWhereRange( 'rev_timestamp', $dir, $params['start'], $params['end'] );
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ [ 'tag_summary' => [ 'LEFT JOIN', [ 'rev_id=ts_rev_id' ] ] ]
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( $params['user'] !== null ) {
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'rev_user', User::newFromName( $params['user'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( $actorQuery['conds'] );
+ } elseif ( $params['excludeuser'] !== null ) {
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'rev_user', User::newFromName( $params['excludeuser'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( 'NOT(' . $actorQuery['conds'] . ')' );
+ }
+
+ if ( $params['user'] !== null || $params['excludeuser'] !== null ) {
+ // Paranoia: avoid brute force searches (T19342)
+ if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$this->getUser()->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'rev_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+
+ if ( $params['continue'] !== null ) {
+ $op = ( $dir == 'newer' ? '>' : '<' );
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $ts = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $rev_id = (int)$cont[1];
+ $this->dieContinueUsageIf( strval( $rev_id ) !== $cont[1] );
+ $this->addWhere( "rev_timestamp $op $ts OR " .
+ "(rev_timestamp = $ts AND " .
+ "rev_id $op= $rev_id)" );
+ }
+
+ $this->addOption( 'LIMIT', $this->limit + 1 );
+
+ $sort = ( $dir == 'newer' ? '' : ' DESC' );
+ $orderby = [];
+ // Targeting index rev_timestamp, user_timestamp, or usertext_timestamp
+ // But 'user' is always constant for the latter two, so it doesn't matter here.
+ $orderby[] = "rev_timestamp $sort";
+ $orderby[] = "rev_id $sort";
+ $this->addOption( 'ORDER BY', $orderby );
+
+ $hookData = [];
+ $res = $this->select( __METHOD__, [], $hookData );
+ $pageMap = []; // Maps rev_page to array index
+ $count = 0;
+ $nextIndex = 0;
+ $generated = [];
+ foreach ( $res as $row ) {
+ if ( $count === 0 && $resultPageSet !== null ) {
+ // Set the non-continue since the list of all revisions is
+ // prone to having entries added at the start frequently.
+ $this->getContinuationManager()->addGeneratorNonContinueParam(
+ $this, 'continue', "$row->rev_timestamp|$row->rev_id"
+ );
+ }
+ if ( ++$count > $this->limit ) {
+ // We've had enough
+ $this->setContinueEnumParameter( 'continue', "$row->rev_timestamp|$row->rev_id" );
+ break;
+ }
+
+ // Miser mode namespace check
+ if ( $miser_ns !== null && !in_array( $row->page_namespace, $miser_ns ) ) {
+ continue;
+ }
+
+ if ( $resultPageSet !== null ) {
+ if ( $params['generatetitles'] ) {
+ $generated[$row->rev_page] = $row->rev_page;
+ } else {
+ $generated[] = $row->rev_id;
+ }
+ } else {
+ $revision = Revision::newFromRow( $row );
+ $rev = $this->extractRevisionInfo( $revision, $row );
+
+ if ( !isset( $pageMap[$row->rev_page] ) ) {
+ $index = $nextIndex++;
+ $pageMap[$row->rev_page] = $index;
+ $title = $revision->getTitle();
+ $a = [
+ 'pageid' => $title->getArticleID(),
+ 'revisions' => [ $rev ],
+ ];
+ ApiResult::setIndexedTagName( $a['revisions'], 'rev' );
+ ApiQueryBase::addTitleInfo( $a, $title );
+ $fit = $this->processRow( $row, $a['revisions'][0], $hookData ) &&
+ $result->addValue( [ 'query', $this->getModuleName() ], $index, $a );
+ } else {
+ $index = $pageMap[$row->rev_page];
+ $fit = $this->processRow( $row, $rev, $hookData ) &&
+ $result->addValue( [ 'query', $this->getModuleName(), $index, 'revisions' ], null, $rev );
+ }
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', "$row->rev_timestamp|$row->rev_id" );
+ break;
+ }
+ }
+ }
+
+ if ( $resultPageSet !== null ) {
+ if ( $params['generatetitles'] ) {
+ $resultPageSet->populateFromPageIDs( $generated );
+ } else {
+ $resultPageSet->populateFromRevisionIDs( $generated );
+ }
+ } else {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'page' );
+ }
+ }
+
+ public function getAllowedParams() {
+ $ret = parent::getAllowedParams() + [
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_DFLT => null,
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+ 'dir' => [
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'excludeuser' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'generatetitles' => [
+ ApiBase::PARAM_DFLT => false,
+ ],
+ ];
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = [
+ 'api-help-param-limited-in-miser-mode',
+ ];
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=allrevisions&arvuser=Example&arvlimit=50'
+ => 'apihelp-query+allrevisions-example-user',
+ 'action=query&list=allrevisions&arvdir=newer&arvlimit=50'
+ => 'apihelp-query+allrevisions-example-ns-main',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allrevisions';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAllUsers.php b/www/wiki/includes/api/ApiQueryAllUsers.php
new file mode 100644
index 00000000..9652f810
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAllUsers.php
@@ -0,0 +1,412 @@
+<?php
+/**
+ * Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all registered users.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllUsers extends ApiQueryBase {
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'au' );
+ }
+
+ /**
+ * This function converts the user name to a canonical form
+ * which is stored in the database.
+ * @param string $name
+ * @return string
+ */
+ private function getCanonicalUserName( $name ) {
+ return strtr( $name, '_', ' ' );
+ }
+
+ public function execute() {
+ global $wgActorTableSchemaMigrationStage;
+
+ $params = $this->extractRequestParams();
+ $activeUserDays = $this->getConfig()->get( 'ActiveUserDays' );
+
+ $db = $this->getDB();
+ $commentStore = CommentStore::getStore();
+
+ $prop = $params['prop'];
+ if ( !is_null( $prop ) ) {
+ $prop = array_flip( $prop );
+ $fld_blockinfo = isset( $prop['blockinfo'] );
+ $fld_editcount = isset( $prop['editcount'] );
+ $fld_groups = isset( $prop['groups'] );
+ $fld_rights = isset( $prop['rights'] );
+ $fld_registration = isset( $prop['registration'] );
+ $fld_implicitgroups = isset( $prop['implicitgroups'] );
+ $fld_centralids = isset( $prop['centralids'] );
+ } else {
+ $fld_blockinfo = $fld_editcount = $fld_groups = $fld_registration =
+ $fld_rights = $fld_implicitgroups = $fld_centralids = false;
+ }
+
+ $limit = $params['limit'];
+
+ $this->addTables( 'user' );
+
+ $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
+ $from = is_null( $params['from'] ) ? null : $this->getCanonicalUserName( $params['from'] );
+ $to = is_null( $params['to'] ) ? null : $this->getCanonicalUserName( $params['to'] );
+
+ # MySQL can't figure out that 'user_name' and 'qcc_title' are the same
+ # despite the JOIN condition, so manually sort on the correct one.
+ $userFieldToSort = $params['activeusers'] ? 'qcc_title' : 'user_name';
+
+ # Some of these subtable joins are going to give us duplicate rows, so
+ # calculate the maximum number of duplicates we might see.
+ $maxDuplicateRows = 1;
+
+ $this->addWhereRange( $userFieldToSort, $dir, $from, $to );
+
+ if ( !is_null( $params['prefix'] ) ) {
+ $this->addWhere( $userFieldToSort .
+ $db->buildLike( $this->getCanonicalUserName( $params['prefix'] ), $db->anyString() ) );
+ }
+
+ if ( !is_null( $params['rights'] ) && count( $params['rights'] ) ) {
+ $groups = [];
+ foreach ( $params['rights'] as $r ) {
+ $groups = array_merge( $groups, User::getGroupsWithPermission( $r ) );
+ }
+
+ // no group with the given right(s) exists, no need for a query
+ if ( !count( $groups ) ) {
+ $this->getResult()->addIndexedTagName( [ 'query', $this->getModuleName() ], '' );
+
+ return;
+ }
+
+ $groups = array_unique( $groups );
+
+ if ( is_null( $params['group'] ) ) {
+ $params['group'] = $groups;
+ } else {
+ $params['group'] = array_unique( array_merge( $params['group'], $groups ) );
+ }
+ }
+
+ $this->requireMaxOneParameter( $params, 'group', 'excludegroup' );
+
+ if ( !is_null( $params['group'] ) && count( $params['group'] ) ) {
+ // Filter only users that belong to a given group. This might
+ // produce as many rows-per-user as there are groups being checked.
+ $this->addTables( 'user_groups', 'ug1' );
+ $this->addJoinConds( [
+ 'ug1' => [
+ 'INNER JOIN',
+ [
+ 'ug1.ug_user=user_id',
+ 'ug1.ug_group' => $params['group'],
+ 'ug1.ug_expiry IS NULL OR ug1.ug_expiry >= ' . $db->addQuotes( $db->timestamp() )
+ ]
+ ]
+ ] );
+ $maxDuplicateRows *= count( $params['group'] );
+ }
+
+ if ( !is_null( $params['excludegroup'] ) && count( $params['excludegroup'] ) ) {
+ // Filter only users don't belong to a given group. This can only
+ // produce one row-per-user, because we only keep on "no match".
+ $this->addTables( 'user_groups', 'ug1' );
+
+ if ( count( $params['excludegroup'] ) == 1 ) {
+ $exclude = [ 'ug1.ug_group' => $params['excludegroup'][0] ];
+ } else {
+ $exclude = [ $db->makeList(
+ [ 'ug1.ug_group' => $params['excludegroup'] ],
+ LIST_OR
+ ) ];
+ }
+ $this->addJoinConds( [ 'ug1' => [ 'LEFT OUTER JOIN',
+ array_merge( [
+ 'ug1.ug_user=user_id',
+ 'ug1.ug_expiry IS NULL OR ug1.ug_expiry >= ' . $db->addQuotes( $db->timestamp() )
+ ], $exclude )
+ ] ] );
+ $this->addWhere( 'ug1.ug_user IS NULL' );
+ }
+
+ if ( $params['witheditsonly'] ) {
+ $this->addWhere( 'user_editcount > 0' );
+ }
+
+ $this->showHiddenUsersAddBlockInfo( $fld_blockinfo );
+
+ if ( $fld_groups || $fld_rights ) {
+ $this->addFields( [ 'groups' =>
+ $db->buildGroupConcatField( '|', 'user_groups', 'ug_group', [
+ 'ug_user=user_id',
+ 'ug_expiry IS NULL OR ug_expiry >= ' . $db->addQuotes( $db->timestamp() )
+ ] )
+ ] );
+ }
+
+ if ( $params['activeusers'] ) {
+ $activeUserSeconds = $activeUserDays * 86400;
+
+ // Filter query to only include users in the active users cache.
+ // There shouldn't be any duplicate rows in querycachetwo here.
+ $this->addTables( 'querycachetwo' );
+ $this->addJoinConds( [ 'querycachetwo' => [
+ 'INNER JOIN', [
+ 'qcc_type' => 'activeusers',
+ 'qcc_namespace' => NS_USER,
+ 'qcc_title=user_name',
+ ],
+ ] ] );
+
+ // Actually count the actions using a subquery (T66505 and T66507)
+ $tables = [ 'recentchanges' ];
+ $joins = [];
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_OLD ) {
+ $userCond = 'rc_user_text = user_name';
+ } else {
+ $tables[] = 'actor';
+ $joins['actor'] = [
+ $wgActorTableSchemaMigrationStage === MIGRATION_NEW ? 'JOIN' : 'LEFT JOIN',
+ 'rc_actor = actor_id'
+ ];
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) {
+ $userCond = 'actor_user = user_id';
+ } else {
+ $userCond = 'actor_user = user_id OR (rc_actor = 0 AND rc_user_text = user_name)';
+ }
+ }
+ $timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $activeUserSeconds );
+ $this->addFields( [
+ 'recentactions' => '(' . $db->selectSQLText(
+ $tables,
+ 'COUNT(*)',
+ [
+ $userCond,
+ 'rc_type != ' . $db->addQuotes( RC_EXTERNAL ), // no wikidata
+ 'rc_log_type IS NULL OR rc_log_type != ' . $db->addQuotes( 'newusers' ),
+ 'rc_timestamp >= ' . $db->addQuotes( $timestamp ),
+ ],
+ __METHOD__,
+ [],
+ $joins
+ ) . ')'
+ ] );
+ }
+
+ $sqlLimit = $limit + $maxDuplicateRows;
+ $this->addOption( 'LIMIT', $sqlLimit );
+
+ $this->addFields( [
+ 'user_name',
+ 'user_id'
+ ] );
+ $this->addFieldsIf( 'user_editcount', $fld_editcount );
+ $this->addFieldsIf( 'user_registration', $fld_registration );
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ $countDuplicates = 0;
+ $lastUser = false;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ $count++;
+
+ if ( $lastUser === $row->user_name ) {
+ // Duplicate row due to one of the needed subtable joins.
+ // Ignore it, but count the number of them to sanely handle
+ // miscalculation of $maxDuplicateRows.
+ $countDuplicates++;
+ if ( $countDuplicates == $maxDuplicateRows ) {
+ ApiBase::dieDebug( __METHOD__, 'Saw more duplicate rows than expected' );
+ }
+ continue;
+ }
+
+ $countDuplicates = 0;
+ $lastUser = $row->user_name;
+
+ if ( $count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'from', $row->user_name );
+ break;
+ }
+
+ if ( $count == $sqlLimit ) {
+ // Should never hit this (either the $countDuplicates check or
+ // the $count > $limit check should hit first), but check it
+ // anyway just in case.
+ ApiBase::dieDebug( __METHOD__, 'Saw more duplicate rows than expected' );
+ }
+
+ if ( $params['activeusers'] && $row->recentactions === 0 ) {
+ // activeusers cache was out of date
+ continue;
+ }
+
+ $data = [
+ 'userid' => (int)$row->user_id,
+ 'name' => $row->user_name,
+ ];
+
+ if ( $fld_centralids ) {
+ $data += ApiQueryUserInfo::getCentralUserInfo(
+ $this->getConfig(), User::newFromId( $row->user_id ), $params['attachedwiki']
+ );
+ }
+
+ if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
+ $data['blockid'] = (int)$row->ipb_id;
+ $data['blockedby'] = $row->ipb_by_text;
+ $data['blockedbyid'] = (int)$row->ipb_by;
+ $data['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
+ $data['blockreason'] = $commentStore->getComment( 'ipb_reason', $row )->text;
+ $data['blockexpiry'] = $row->ipb_expiry;
+ }
+ if ( $row->ipb_deleted ) {
+ $data['hidden'] = true;
+ }
+ if ( $fld_editcount ) {
+ $data['editcount'] = intval( $row->user_editcount );
+ }
+ if ( $params['activeusers'] ) {
+ $data['recentactions'] = intval( $row->recentactions );
+ // @todo 'recenteditcount' is set for BC, remove in 1.25
+ $data['recenteditcount'] = $data['recentactions'];
+ }
+ if ( $fld_registration ) {
+ $data['registration'] = $row->user_registration ?
+ wfTimestamp( TS_ISO_8601, $row->user_registration ) : '';
+ }
+
+ if ( $fld_implicitgroups || $fld_groups || $fld_rights ) {
+ $implicitGroups = User::newFromId( $row->user_id )->getAutomaticGroups();
+ if ( isset( $row->groups ) && $row->groups !== '' ) {
+ $groups = array_merge( $implicitGroups, explode( '|', $row->groups ) );
+ } else {
+ $groups = $implicitGroups;
+ }
+
+ if ( $fld_groups ) {
+ $data['groups'] = $groups;
+ ApiResult::setIndexedTagName( $data['groups'], 'g' );
+ ApiResult::setArrayType( $data['groups'], 'array' );
+ }
+
+ if ( $fld_implicitgroups ) {
+ $data['implicitgroups'] = $implicitGroups;
+ ApiResult::setIndexedTagName( $data['implicitgroups'], 'g' );
+ ApiResult::setArrayType( $data['implicitgroups'], 'array' );
+ }
+
+ if ( $fld_rights ) {
+ $data['rights'] = User::getGroupPermissions( $groups );
+ ApiResult::setIndexedTagName( $data['rights'], 'r' );
+ ApiResult::setArrayType( $data['rights'], 'array' );
+ }
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'from', $data['name'] );
+ break;
+ }
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'u' );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'anon-public-user-private';
+ }
+
+ public function getAllowedParams() {
+ $userGroups = User::getAllGroups();
+
+ return [
+ 'from' => null,
+ 'to' => null,
+ 'prefix' => null,
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ],
+ ],
+ 'group' => [
+ ApiBase::PARAM_TYPE => $userGroups,
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'excludegroup' => [
+ ApiBase::PARAM_TYPE => $userGroups,
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'rights' => [
+ ApiBase::PARAM_TYPE => User::getAllRights(),
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'blockinfo',
+ 'groups',
+ 'implicitgroups',
+ 'rights',
+ 'editcount',
+ 'registration',
+ 'centralids',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'witheditsonly' => false,
+ 'activeusers' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => [
+ 'apihelp-query+allusers-param-activeusers',
+ $this->getConfig()->get( 'ActiveUserDays' )
+ ],
+ ],
+ 'attachedwiki' => null,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=allusers&aufrom=Y'
+ => 'apihelp-query+allusers-example-Y',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allusers';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryAuthManagerInfo.php b/www/wiki/includes/api/ApiQueryAuthManagerInfo.php
new file mode 100644
index 00000000..d23d8988
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryAuthManagerInfo.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.27
+ */
+
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * A query action to return meta information about AuthManager state.
+ *
+ * @ingroup API
+ */
+class ApiQueryAuthManagerInfo extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ami' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $helper = new ApiAuthManagerHelper( $this );
+
+ $manager = AuthManager::singleton();
+ $ret = [
+ 'canauthenticatenow' => $manager->canAuthenticateNow(),
+ 'cancreateaccounts' => $manager->canCreateAccounts(),
+ 'canlinkaccounts' => $manager->canLinkAccounts(),
+ ];
+
+ if ( $params['securitysensitiveoperation'] !== null ) {
+ $ret['securitysensitiveoperationstatus'] = $manager->securitySensitiveOperationStatus(
+ $params['securitysensitiveoperation']
+ );
+ }
+
+ if ( $params['requestsfor'] ) {
+ $action = $params['requestsfor'];
+
+ $preservedReq = $helper->getPreservedRequest();
+ if ( $preservedReq ) {
+ $ret += [
+ 'haspreservedstate' => $preservedReq->hasStateForAction( $action ),
+ 'hasprimarypreservedstate' => $preservedReq->hasPrimaryStateForAction( $action ),
+ 'preservedusername' => (string)$preservedReq->username,
+ ];
+ } else {
+ $ret += [
+ 'haspreservedstate' => false,
+ 'hasprimarypreservedstate' => false,
+ 'preservedusername' => '',
+ ];
+ }
+
+ $reqs = $manager->getAuthenticationRequests( $action, $this->getUser() );
+
+ // Filter out blacklisted requests, depending on the action
+ switch ( $action ) {
+ case AuthManager::ACTION_CHANGE:
+ $reqs = ApiAuthManagerHelper::blacklistAuthenticationRequests(
+ $reqs, $this->getConfig()->get( 'ChangeCredentialsBlacklist' )
+ );
+ break;
+ case AuthManager::ACTION_REMOVE:
+ $reqs = ApiAuthManagerHelper::blacklistAuthenticationRequests(
+ $reqs, $this->getConfig()->get( 'RemoveCredentialsBlacklist' )
+ );
+ break;
+ }
+
+ $ret += $helper->formatRequests( $reqs );
+ }
+
+ $this->getResult()->addValue( [ 'query' ], $this->getModuleName(), $ret );
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'securitysensitiveoperation' => null,
+ 'requestsfor' => [
+ ApiBase::PARAM_TYPE => [
+ AuthManager::ACTION_LOGIN,
+ AuthManager::ACTION_LOGIN_CONTINUE,
+ AuthManager::ACTION_CREATE,
+ AuthManager::ACTION_CREATE_CONTINUE,
+ AuthManager::ACTION_LINK,
+ AuthManager::ACTION_LINK_CONTINUE,
+ AuthManager::ACTION_CHANGE,
+ AuthManager::ACTION_REMOVE,
+ AuthManager::ACTION_UNLINK,
+ ],
+ ],
+ ] + ApiAuthManagerHelper::getStandardParams( '', 'mergerequestfields', 'messageformat' );
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&meta=authmanagerinfo&amirequestsfor=' . urlencode( AuthManager::ACTION_LOGIN )
+ => 'apihelp-query+authmanagerinfo-example-login',
+ 'action=query&meta=authmanagerinfo&amirequestsfor=' . urlencode( AuthManager::ACTION_LOGIN ) .
+ '&amimergerequestfields=1'
+ => 'apihelp-query+authmanagerinfo-example-login-merged',
+ 'action=query&meta=authmanagerinfo&amisecuritysensitiveoperation=foo'
+ => 'apihelp-query+authmanagerinfo-example-securitysensitiveoperation',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Authmanagerinfo';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryBacklinks.php b/www/wiki/includes/api/ApiQueryBacklinks.php
new file mode 100644
index 00000000..35cb83ac
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryBacklinks.php
@@ -0,0 +1,576 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This is a three-in-one module to query:
+ * * backlinks - links pointing to the given page,
+ * * embeddedin - what pages transclude the given page within themselves,
+ * * imageusage - what pages use the given image
+ *
+ * @ingroup API
+ */
+class ApiQueryBacklinks extends ApiQueryGeneratorBase {
+
+ /**
+ * @var Title
+ */
+ private $rootTitle;
+
+ private $params, $cont, $redirect;
+ private $bl_ns, $bl_from, $bl_from_ns, $bl_table, $bl_code, $bl_title, $bl_fields, $hasNS;
+
+ /**
+ * Maps ns and title to pageid
+ *
+ * @var array
+ */
+ private $pageMap = [];
+ private $resultArr;
+
+ private $redirTitles = [];
+ private $continueStr = null;
+
+ // output element name, database column field prefix, database table
+ private $backlinksSettings = [
+ 'backlinks' => [
+ 'code' => 'bl',
+ 'prefix' => 'pl',
+ 'linktbl' => 'pagelinks',
+ 'helpurl' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Backlinks',
+ ],
+ 'embeddedin' => [
+ 'code' => 'ei',
+ 'prefix' => 'tl',
+ 'linktbl' => 'templatelinks',
+ 'helpurl' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Embeddedin',
+ ],
+ 'imageusage' => [
+ 'code' => 'iu',
+ 'prefix' => 'il',
+ 'linktbl' => 'imagelinks',
+ 'helpurl' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Imageusage',
+ ]
+ ];
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ $settings = $this->backlinksSettings[$moduleName];
+ $prefix = $settings['prefix'];
+ $code = $settings['code'];
+ $this->resultArr = [];
+
+ parent::__construct( $query, $moduleName, $code );
+ $this->bl_ns = $prefix . '_namespace';
+ $this->bl_from = $prefix . '_from';
+ $this->bl_from_ns = $prefix . '_from_namespace';
+ $this->bl_table = $settings['linktbl'];
+ $this->bl_code = $code;
+ $this->helpUrl = $settings['helpurl'];
+
+ $this->hasNS = $moduleName !== 'imageusage';
+ if ( $this->hasNS ) {
+ $this->bl_title = $prefix . '_title';
+ $this->bl_fields = [
+ $this->bl_ns,
+ $this->bl_title
+ ];
+ } else {
+ $this->bl_title = $prefix . '_to';
+ $this->bl_fields = [
+ $this->bl_title
+ ];
+ }
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function runFirstQuery( $resultPageSet = null ) {
+ $this->addTables( [ $this->bl_table, 'page' ] );
+ $this->addWhere( "{$this->bl_from}=page_id" );
+ if ( is_null( $resultPageSet ) ) {
+ $this->addFields( [ 'page_id', 'page_title', 'page_namespace' ] );
+ } else {
+ $this->addFields( $resultPageSet->getPageTableFields() );
+ }
+ $this->addFields( [ 'page_is_redirect', 'from_ns' => 'page_namespace' ] );
+
+ $this->addWhereFld( $this->bl_title, $this->rootTitle->getDBkey() );
+ if ( $this->hasNS ) {
+ $this->addWhereFld( $this->bl_ns, $this->rootTitle->getNamespace() );
+ }
+ $this->addWhereFld( $this->bl_from_ns, $this->params['namespace'] );
+
+ if ( count( $this->cont ) >= 2 ) {
+ $op = $this->params['dir'] == 'descending' ? '<' : '>';
+ if ( $this->params['namespace'] !== null && count( $this->params['namespace'] ) > 1 ) {
+ $this->addWhere(
+ "{$this->bl_from_ns} $op {$this->cont[0]} OR " .
+ "({$this->bl_from_ns} = {$this->cont[0]} AND " .
+ "{$this->bl_from} $op= {$this->cont[1]})"
+ );
+ } else {
+ $this->addWhere( "{$this->bl_from} $op= {$this->cont[1]}" );
+ }
+ }
+
+ if ( $this->params['filterredir'] == 'redirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 1 );
+ } elseif ( $this->params['filterredir'] == 'nonredirects' && !$this->redirect ) {
+ // T24245 - Check for !redirect, as filtering nonredirects, when
+ // getting what links to them is contradictory
+ $this->addWhereFld( 'page_is_redirect', 0 );
+ }
+
+ $this->addOption( 'LIMIT', $this->params['limit'] + 1 );
+ $sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
+ $orderBy = [];
+ if ( $this->params['namespace'] !== null && count( $this->params['namespace'] ) > 1 ) {
+ $orderBy[] = $this->bl_from_ns . $sort;
+ }
+ $orderBy[] = $this->bl_from . $sort;
+ $this->addOption( 'ORDER BY', $orderBy );
+ $this->addOption( 'STRAIGHT_JOIN' );
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $this->params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // Continue string may be overridden at a later step
+ $this->continueStr = "{$row->from_ns}|{$row->page_id}";
+ break;
+ }
+
+ // Fill in continuation fields for later steps
+ if ( count( $this->cont ) < 2 ) {
+ $this->cont[] = $row->from_ns;
+ $this->cont[] = $row->page_id;
+ }
+
+ $this->pageMap[$row->page_namespace][$row->page_title] = $row->page_id;
+ $t = Title::makeTitle( $row->page_namespace, $row->page_title );
+ if ( $row->page_is_redirect ) {
+ $this->redirTitles[] = $t;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $a = [ 'pageid' => intval( $row->page_id ) ];
+ ApiQueryBase::addTitleInfo( $a, $t );
+ if ( $row->page_is_redirect ) {
+ $a['redirect'] = true;
+ }
+ // Put all the results in an array first
+ $this->resultArr[$a['pageid']] = $a;
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function runSecondQuery( $resultPageSet = null ) {
+ $db = $this->getDB();
+ $this->addTables( [ 'page', $this->bl_table ] );
+ $this->addWhere( "{$this->bl_from}=page_id" );
+
+ if ( is_null( $resultPageSet ) ) {
+ $this->addFields( [ 'page_id', 'page_title', 'page_namespace', 'page_is_redirect' ] );
+ } else {
+ $this->addFields( $resultPageSet->getPageTableFields() );
+ }
+
+ $this->addFields( [ $this->bl_title, 'from_ns' => 'page_namespace' ] );
+ if ( $this->hasNS ) {
+ $this->addFields( $this->bl_ns );
+ }
+
+ // We can't use LinkBatch here because $this->hasNS may be false
+ $titleWhere = [];
+ $allRedirNs = [];
+ $allRedirDBkey = [];
+ /** @var Title $t */
+ foreach ( $this->redirTitles as $t ) {
+ $redirNs = $t->getNamespace();
+ $redirDBkey = $t->getDBkey();
+ $titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $redirDBkey ) .
+ ( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
+ $allRedirNs[$redirNs] = true;
+ $allRedirDBkey[$redirDBkey] = true;
+ }
+ $this->addWhere( $db->makeList( $titleWhere, LIST_OR ) );
+ $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
+
+ if ( count( $this->cont ) >= 6 ) {
+ $op = $this->params['dir'] == 'descending' ? '<' : '>';
+
+ $where = "{$this->bl_from} $op= {$this->cont[5]}";
+ // Don't bother with namespace, title, or from_namespace if it's
+ // otherwise constant in the where clause.
+ if ( $this->params['namespace'] !== null && count( $this->params['namespace'] ) > 1 ) {
+ $where = "{$this->bl_from_ns} $op {$this->cont[4]} OR " .
+ "({$this->bl_from_ns} = {$this->cont[4]} AND ($where))";
+ }
+ if ( count( $allRedirDBkey ) > 1 ) {
+ $title = $db->addQuotes( $this->cont[3] );
+ $where = "{$this->bl_title} $op $title OR " .
+ "({$this->bl_title} = $title AND ($where))";
+ }
+ if ( $this->hasNS && count( $allRedirNs ) > 1 ) {
+ $where = "{$this->bl_ns} $op {$this->cont[2]} OR " .
+ "({$this->bl_ns} = {$this->cont[2]} AND ($where))";
+ }
+
+ $this->addWhere( $where );
+ }
+ if ( $this->params['filterredir'] == 'redirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 1 );
+ } elseif ( $this->params['filterredir'] == 'nonredirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 0 );
+ }
+
+ $this->addOption( 'LIMIT', $this->params['limit'] + 1 );
+ $orderBy = [];
+ $sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
+ // Don't order by namespace/title/from_namespace if it's constant in the WHERE clause
+ if ( $this->hasNS && count( $allRedirNs ) > 1 ) {
+ $orderBy[] = $this->bl_ns . $sort;
+ }
+ if ( count( $allRedirDBkey ) > 1 ) {
+ $orderBy[] = $this->bl_title . $sort;
+ }
+ if ( $this->params['namespace'] !== null && count( $this->params['namespace'] ) > 1 ) {
+ $orderBy[] = $this->bl_from_ns . $sort;
+ }
+ $orderBy[] = $this->bl_from . $sort;
+ $this->addOption( 'ORDER BY', $orderBy );
+ $this->addOption( 'USE INDEX', [ 'page' => 'PRIMARY' ] );
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ foreach ( $res as $row ) {
+ $ns = $this->hasNS ? $row->{$this->bl_ns} : NS_FILE;
+
+ if ( ++$count > $this->params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // Note we must keep the parameters for the first query constant
+ // This may be overridden at a later step
+ $title = $row->{$this->bl_title};
+ $this->continueStr = implode( '|', array_slice( $this->cont, 0, 2 ) ) .
+ "|$ns|$title|{$row->from_ns}|{$row->page_id}";
+ break;
+ }
+
+ // Fill in continuation fields for later steps
+ if ( count( $this->cont ) < 6 ) {
+ $this->cont[] = $ns;
+ $this->cont[] = $row->{$this->bl_title};
+ $this->cont[] = $row->from_ns;
+ $this->cont[] = $row->page_id;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $a['pageid'] = intval( $row->page_id );
+ ApiQueryBase::addTitleInfo( $a, Title::makeTitle( $row->page_namespace, $row->page_title ) );
+ if ( $row->page_is_redirect ) {
+ $a['redirect'] = true;
+ }
+ $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
+ // Put all the results in an array first
+ $this->resultArr[$parentID]['redirlinks'][$row->page_id] = $a;
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $this->params = $this->extractRequestParams( false );
+ $this->redirect = isset( $this->params['redirect'] ) && $this->params['redirect'];
+ $userMax = ( $this->redirect ? ApiBase::LIMIT_BIG1 / 2 : ApiBase::LIMIT_BIG1 );
+ $botMax = ( $this->redirect ? ApiBase::LIMIT_BIG2 / 2 : ApiBase::LIMIT_BIG2 );
+
+ $result = $this->getResult();
+
+ if ( $this->params['limit'] == 'max' ) {
+ $this->params['limit'] = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
+ $result->addParsedLimit( $this->getModuleName(), $this->params['limit'] );
+ } else {
+ $this->params['limit'] = intval( $this->params['limit'] );
+ $this->validateLimit( 'limit', $this->params['limit'], 1, $userMax, $botMax );
+ }
+
+ $this->rootTitle = $this->getTitleFromTitleOrPageId( $this->params );
+
+ // only image titles are allowed for the root in imageinfo mode
+ if ( !$this->hasNS && $this->rootTitle->getNamespace() !== NS_FILE ) {
+ $this->dieWithError(
+ [ 'apierror-imageusage-badtitle', $this->getModuleName() ],
+ 'bad_image_title'
+ );
+ }
+
+ // Parse and validate continuation parameter
+ $this->cont = [];
+ if ( $this->params['continue'] !== null ) {
+ $cont = explode( '|', $this->params['continue'] );
+
+ switch ( count( $cont ) ) {
+ case 8:
+ // redirect page ID for result adding
+ $this->cont[7] = (int)$cont[7];
+ $this->dieContinueUsageIf( $cont[7] !== (string)$this->cont[7] );
+
+ /* Fall through */
+
+ case 7:
+ // top-level page ID for result adding
+ $this->cont[6] = (int)$cont[6];
+ $this->dieContinueUsageIf( $cont[6] !== (string)$this->cont[6] );
+
+ /* Fall through */
+
+ case 6:
+ // ns for 2nd query (even for imageusage)
+ $this->cont[2] = (int)$cont[2];
+ $this->dieContinueUsageIf( $cont[2] !== (string)$this->cont[2] );
+
+ // title for 2nd query
+ $this->cont[3] = $cont[3];
+
+ // from_ns for 2nd query
+ $this->cont[4] = (int)$cont[4];
+ $this->dieContinueUsageIf( $cont[4] !== (string)$this->cont[4] );
+
+ // from_id for 1st query
+ $this->cont[5] = (int)$cont[5];
+ $this->dieContinueUsageIf( $cont[5] !== (string)$this->cont[5] );
+
+ /* Fall through */
+
+ case 2:
+ // from_ns for 1st query
+ $this->cont[0] = (int)$cont[0];
+ $this->dieContinueUsageIf( $cont[0] !== (string)$this->cont[0] );
+
+ // from_id for 1st query
+ $this->cont[1] = (int)$cont[1];
+ $this->dieContinueUsageIf( $cont[1] !== (string)$this->cont[1] );
+
+ break;
+
+ default:
+ $this->dieContinueUsageIf( true );
+ }
+
+ ksort( $this->cont );
+ }
+
+ $this->runFirstQuery( $resultPageSet );
+ if ( $this->redirect && count( $this->redirTitles ) ) {
+ $this->resetQueryParams();
+ $this->runSecondQuery( $resultPageSet );
+ }
+
+ // Fill in any missing fields in case it's needed below
+ $this->cont += [ 0, 0, 0, '', 0, 0, 0 ];
+
+ if ( is_null( $resultPageSet ) ) {
+ // Try to add the result data in one go and pray that it fits
+ $code = $this->bl_code;
+ $data = array_map( function ( $arr ) use ( $result, $code ) {
+ if ( isset( $arr['redirlinks'] ) ) {
+ $arr['redirlinks'] = array_values( $arr['redirlinks'] );
+ ApiResult::setIndexedTagName( $arr['redirlinks'], $code );
+ }
+ return $arr;
+ }, array_values( $this->resultArr ) );
+ $fit = $result->addValue( 'query', $this->getModuleName(), $data );
+ if ( !$fit ) {
+ // It didn't fit. Add elements one by one until the
+ // result is full.
+ ksort( $this->resultArr );
+ if ( count( $this->cont ) >= 7 ) {
+ $startAt = $this->cont[6];
+ } else {
+ reset( $this->resultArr );
+ $startAt = key( $this->resultArr );
+ }
+ $idx = 0;
+ foreach ( $this->resultArr as $pageID => $arr ) {
+ if ( $pageID < $startAt ) {
+ continue;
+ }
+
+ // Add the basic entry without redirlinks first
+ $fit = $result->addValue(
+ [ 'query', $this->getModuleName() ],
+ $idx, array_diff_key( $arr, [ 'redirlinks' => '' ] ) );
+ if ( !$fit ) {
+ $this->continueStr = implode( '|', array_slice( $this->cont, 0, 6 ) ) .
+ "|$pageID";
+ break;
+ }
+
+ $hasRedirs = false;
+ $redirLinks = isset( $arr['redirlinks'] ) ? (array)$arr['redirlinks'] : [];
+ ksort( $redirLinks );
+ if ( count( $this->cont ) >= 8 && $pageID == $startAt ) {
+ $redirStartAt = $this->cont[7];
+ } else {
+ reset( $redirLinks );
+ $redirStartAt = key( $redirLinks );
+ }
+ foreach ( $redirLinks as $key => $redir ) {
+ if ( $key < $redirStartAt ) {
+ continue;
+ }
+
+ $fit = $result->addValue(
+ [ 'query', $this->getModuleName(), $idx, 'redirlinks' ],
+ null, $redir );
+ if ( !$fit ) {
+ $this->continueStr = implode( '|', array_slice( $this->cont, 0, 6 ) ) .
+ "|$pageID|$key";
+ break;
+ }
+ $hasRedirs = true;
+ }
+ if ( $hasRedirs ) {
+ $result->addIndexedTagName(
+ [ 'query', $this->getModuleName(), $idx, 'redirlinks' ],
+ $this->bl_code );
+ }
+ if ( !$fit ) {
+ break;
+ }
+
+ $idx++;
+ }
+ }
+
+ $result->addIndexedTagName(
+ [ 'query', $this->getModuleName() ],
+ $this->bl_code
+ );
+ }
+ if ( !is_null( $this->continueStr ) ) {
+ $this->setContinueEnumParameter( 'continue', $this->continueStr );
+ }
+ }
+
+ public function getAllowedParams() {
+ $retval = [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace'
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ 'filterredir' => [
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => [
+ 'all',
+ 'redirects',
+ 'nonredirects'
+ ]
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ]
+ ];
+ if ( $this->getModuleName() == 'embeddedin' ) {
+ return $retval;
+ }
+ $retval['redirect'] = false;
+
+ return $retval;
+ }
+
+ protected function getExamplesMessages() {
+ static $examples = [
+ 'backlinks' => [
+ 'action=query&list=backlinks&bltitle=Main%20Page'
+ => 'apihelp-query+backlinks-example-simple',
+ 'action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+ => 'apihelp-query+backlinks-example-generator',
+ ],
+ 'embeddedin' => [
+ 'action=query&list=embeddedin&eititle=Template:Stub'
+ => 'apihelp-query+embeddedin-example-simple',
+ 'action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+ => 'apihelp-query+embeddedin-example-generator',
+ ],
+ 'imageusage' => [
+ 'action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg'
+ => 'apihelp-query+imageusage-example-simple',
+ 'action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+ => 'apihelp-query+imageusage-example-generator',
+ ]
+ ];
+
+ return $examples[$this->getModuleName()];
+ }
+
+ public function getHelpUrls() {
+ return $this->helpUrl;
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryBacklinksprop.php b/www/wiki/includes/api/ApiQueryBacklinksprop.php
new file mode 100644
index 00000000..fb90e25c
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryBacklinksprop.php
@@ -0,0 +1,437 @@
+<?php
+/**
+ * API module to handle links table back-queries
+ *
+ * Copyright © 2014 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.24
+ */
+
+/**
+ * This implements prop=redirects, prop=linkshere, prop=catmembers,
+ * prop=transcludedin, and prop=fileusage
+ *
+ * @ingroup API
+ * @since 1.24
+ */
+class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
+
+ // Data for the various modules implemented by this class
+ private static $settings = [
+ 'redirects' => [
+ 'code' => 'rd',
+ 'prefix' => 'rd',
+ 'linktable' => 'redirect',
+ 'props' => [
+ 'fragment',
+ ],
+ 'showredirects' => false,
+ 'show' => [
+ 'fragment',
+ '!fragment',
+ ],
+ ],
+ 'linkshere' => [
+ 'code' => 'lh',
+ 'prefix' => 'pl',
+ 'linktable' => 'pagelinks',
+ 'indexes' => [ 'pl_namespace', 'pl_backlinks_namespace' ],
+ 'from_namespace' => true,
+ 'showredirects' => true,
+ ],
+ 'transcludedin' => [
+ 'code' => 'ti',
+ 'prefix' => 'tl',
+ 'linktable' => 'templatelinks',
+ 'indexes' => [ 'tl_namespace', 'tl_backlinks_namespace' ],
+ 'from_namespace' => true,
+ 'showredirects' => true,
+ ],
+ 'fileusage' => [
+ 'code' => 'fu',
+ 'prefix' => 'il',
+ 'linktable' => 'imagelinks',
+ 'indexes' => [ 'il_to', 'il_backlinks_namespace' ],
+ 'from_namespace' => true,
+ 'to_namespace' => NS_FILE,
+ 'exampletitle' => 'File:Example.jpg',
+ 'showredirects' => true,
+ ],
+ ];
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, self::$settings[$moduleName]['code'] );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ private function run( ApiPageSet $resultPageSet = null ) {
+ $settings = self::$settings[$this->getModuleName()];
+
+ $db = $this->getDB();
+ $params = $this->extractRequestParams();
+ $prop = array_flip( $params['prop'] );
+ $emptyString = $db->addQuotes( '' );
+
+ $pageSet = $this->getPageSet();
+ $titles = $pageSet->getGoodAndMissingTitles();
+ $map = $pageSet->getGoodAndMissingTitlesByNamespace();
+
+ // Add in special pages, they can theoretically have backlinks too.
+ // (although currently they only do for prop=redirects)
+ foreach ( $pageSet->getSpecialTitles() as $id => $title ) {
+ $titles[] = $title;
+ $map[$title->getNamespace()][$title->getDBkey()] = $id;
+ }
+
+ // Determine our fields to query on
+ $p = $settings['prefix'];
+ $hasNS = !isset( $settings['to_namespace'] );
+ if ( $hasNS ) {
+ $bl_namespace = "{$p}_namespace";
+ $bl_title = "{$p}_title";
+ } else {
+ $bl_namespace = $settings['to_namespace'];
+ $bl_title = "{$p}_to";
+
+ $titles = array_filter( $titles, function ( $t ) use ( $bl_namespace ) {
+ return $t->getNamespace() === $bl_namespace;
+ } );
+ $map = array_intersect_key( $map, [ $bl_namespace => true ] );
+ }
+ $bl_from = "{$p}_from";
+
+ if ( !$titles ) {
+ return; // nothing to do
+ }
+
+ // Figure out what we're sorting by, and add associated WHERE clauses.
+ // MySQL's query planner screws up if we include a field in ORDER BY
+ // when it's constant in WHERE, so we have to test that for each field.
+ $sortby = [];
+ if ( $hasNS && count( $map ) > 1 ) {
+ $sortby[$bl_namespace] = 'ns';
+ }
+ $theTitle = null;
+ foreach ( $map as $nsTitles ) {
+ reset( $nsTitles );
+ $key = key( $nsTitles );
+ if ( $theTitle === null ) {
+ $theTitle = $key;
+ }
+ if ( count( $nsTitles ) > 1 || $key !== $theTitle ) {
+ $sortby[$bl_title] = 'title';
+ break;
+ }
+ }
+ $miser_ns = null;
+ if ( $params['namespace'] !== null ) {
+ if ( empty( $settings['from_namespace'] ) ) {
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $miser_ns = $params['namespace'];
+ } else {
+ $this->addWhereFld( 'page_namespace', $params['namespace'] );
+ }
+ } else {
+ $this->addWhereFld( "{$p}_from_namespace", $params['namespace'] );
+ if ( !empty( $settings['from_namespace'] )
+ && $params['namespace'] !== null && count( $params['namespace'] ) > 1
+ ) {
+ $sortby["{$p}_from_namespace"] = 'int';
+ }
+ }
+ }
+ $sortby[$bl_from] = 'int';
+
+ // Now use the $sortby to figure out the continuation
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != count( $sortby ) );
+ $where = '';
+ $i = count( $sortby ) - 1;
+ foreach ( array_reverse( $sortby, true ) as $field => $type ) {
+ $v = $cont[$i];
+ switch ( $type ) {
+ case 'ns':
+ case 'int':
+ $v = (int)$v;
+ $this->dieContinueUsageIf( $v != $cont[$i] );
+ break;
+ default:
+ $v = $db->addQuotes( $v );
+ break;
+ }
+
+ if ( $where === '' ) {
+ $where = "$field >= $v";
+ } else {
+ $where = "$field > $v OR ($field = $v AND ($where))";
+ }
+
+ $i--;
+ }
+ $this->addWhere( $where );
+ }
+
+ // Populate the rest of the query
+ $this->addTables( [ $settings['linktable'], 'page' ] );
+ $this->addWhere( "$bl_from = page_id" );
+
+ if ( $this->getModuleName() === 'redirects' ) {
+ $this->addWhere( "rd_interwiki = $emptyString OR rd_interwiki IS NULL" );
+ }
+
+ $this->addFields( array_keys( $sortby ) );
+ $this->addFields( [ 'bl_namespace' => $bl_namespace, 'bl_title' => $bl_title ] );
+ if ( is_null( $resultPageSet ) ) {
+ $fld_pageid = isset( $prop['pageid'] );
+ $fld_title = isset( $prop['title'] );
+ $fld_redirect = isset( $prop['redirect'] );
+
+ $this->addFieldsIf( 'page_id', $fld_pageid );
+ $this->addFieldsIf( [ 'page_title', 'page_namespace' ], $fld_title );
+ $this->addFieldsIf( 'page_is_redirect', $fld_redirect );
+
+ // prop=redirects
+ $fld_fragment = isset( $prop['fragment'] );
+ $this->addFieldsIf( 'rd_fragment', $fld_fragment );
+ } else {
+ $this->addFields( $resultPageSet->getPageTableFields() );
+ }
+
+ $this->addFieldsIf( 'page_namespace', $miser_ns !== null );
+
+ if ( $hasNS ) {
+ // Can't use LinkBatch because it throws away Special titles.
+ // And we already have the needed data structure anyway.
+ $this->addWhere( $db->makeWhereFrom2d( $map, $bl_namespace, $bl_title ) );
+ } else {
+ $where = [];
+ foreach ( $titles as $t ) {
+ if ( $t->getNamespace() == $bl_namespace ) {
+ $where[] = "$bl_title = " . $db->addQuotes( $t->getDBkey() );
+ }
+ }
+ $this->addWhere( $db->makeList( $where, LIST_OR ) );
+ }
+
+ if ( $params['show'] !== null ) {
+ // prop=redirects only
+ $show = array_flip( $params['show'] );
+ if ( isset( $show['fragment'] ) && isset( $show['!fragment'] ) ||
+ isset( $show['redirect'] ) && isset( $show['!redirect'] )
+ ) {
+ $this->dieWithError( 'apierror-show' );
+ }
+ $this->addWhereIf( "rd_fragment != $emptyString", isset( $show['fragment'] ) );
+ $this->addWhereIf(
+ "rd_fragment = $emptyString OR rd_fragment IS NULL",
+ isset( $show['!fragment'] )
+ );
+ $this->addWhereIf( [ 'page_is_redirect' => 1 ], isset( $show['redirect'] ) );
+ $this->addWhereIf( [ 'page_is_redirect' => 0 ], isset( $show['!redirect'] ) );
+ }
+
+ // Override any ORDER BY from above with what we calculated earlier.
+ $this->addOption( 'ORDER BY', array_keys( $sortby ) );
+
+ // MySQL's optimizer chokes if we have too many values in "$bl_title IN
+ // (...)" and chooses the wrong index, so specify the correct index to
+ // use for the query. See T139056 for details.
+ if ( !empty( $settings['indexes'] ) ) {
+ list( $idxNoFromNS, $idxWithFromNS ) = $settings['indexes'];
+ if ( $params['namespace'] !== null && !empty( $settings['from_namespace'] ) ) {
+ $this->addOption( 'USE INDEX', [ $settings['linktable'] => $idxWithFromNS ] );
+ } else {
+ $this->addOption( 'USE INDEX', [ $settings['linktable'] => $idxNoFromNS ] );
+ }
+ }
+
+ // MySQL (or at least 5.5.5-10.0.23-MariaDB) chooses a really bad query
+ // plan if it thinks there will be more matching rows in the linktable
+ // than are in page. Use STRAIGHT_JOIN here to force it to use the
+ // intended, fast plan. See T145079 for details.
+ $this->addOption( 'STRAIGHT_JOIN' );
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+ $res = $this->select( __METHOD__ );
+
+ if ( is_null( $resultPageSet ) ) {
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinue( $row, $sortby );
+ break;
+ }
+
+ if ( $miser_ns !== null && !in_array( $row->page_namespace, $miser_ns ) ) {
+ // Miser mode namespace check
+ continue;
+ }
+
+ // Get the ID of the current page
+ $id = $map[$row->bl_namespace][$row->bl_title];
+
+ $vals = [];
+ if ( $fld_pageid ) {
+ $vals['pageid'] = (int)$row->page_id;
+ }
+ if ( $fld_title ) {
+ ApiQueryBase::addTitleInfo( $vals,
+ Title::makeTitle( $row->page_namespace, $row->page_title )
+ );
+ }
+ if ( $fld_fragment && $row->rd_fragment !== null && $row->rd_fragment !== '' ) {
+ $vals['fragment'] = $row->rd_fragment;
+ }
+ if ( $fld_redirect ) {
+ $vals['redirect'] = (bool)$row->page_is_redirect;
+ }
+ $fit = $this->addPageSubItem( $id, $vals );
+ if ( !$fit ) {
+ $this->setContinue( $row, $sortby );
+ break;
+ }
+ }
+ } else {
+ $titles = [];
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinue( $row, $sortby );
+ break;
+ }
+ $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
+ }
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ private function setContinue( $row, $sortby ) {
+ $cont = [];
+ foreach ( $sortby as $field => $v ) {
+ $cont[] = $row->$field;
+ }
+ $this->setContinueEnumParameter( 'continue', implode( '|', $cont ) );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ $settings = self::$settings[$this->getModuleName()];
+
+ $ret = [
+ 'prop' => [
+ ApiBase::PARAM_TYPE => [
+ 'pageid',
+ 'title',
+ ],
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'pageid|title',
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ],
+ 'show' => null, // Will be filled/removed below
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+
+ if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = [
+ 'api-help-param-limited-in-miser-mode',
+ ];
+ }
+
+ if ( !empty( $settings['showredirects'] ) ) {
+ $ret['prop'][ApiBase::PARAM_TYPE][] = 'redirect';
+ $ret['prop'][ApiBase::PARAM_DFLT] .= '|redirect';
+ }
+ if ( isset( $settings['props'] ) ) {
+ $ret['prop'][ApiBase::PARAM_TYPE] = array_merge(
+ $ret['prop'][ApiBase::PARAM_TYPE], $settings['props']
+ );
+ }
+
+ $show = [];
+ if ( !empty( $settings['showredirects'] ) ) {
+ $show[] = 'redirect';
+ $show[] = '!redirect';
+ }
+ if ( isset( $settings['show'] ) ) {
+ $show = array_merge( $show, $settings['show'] );
+ }
+ if ( $show ) {
+ $ret['show'] = [
+ ApiBase::PARAM_TYPE => $show,
+ ApiBase::PARAM_ISMULTI => true,
+ ];
+ } else {
+ unset( $ret['show'] );
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ $settings = self::$settings[$this->getModuleName()];
+ $name = $this->getModuleName();
+ $path = $this->getModulePath();
+ $title = isset( $settings['exampletitle'] ) ? $settings['exampletitle'] : 'Main Page';
+ $etitle = rawurlencode( $title );
+
+ return [
+ "action=query&prop={$name}&titles={$etitle}"
+ => "apihelp-$path-example-simple",
+ "action=query&generator={$name}&titles={$etitle}&prop=info"
+ => "apihelp-$path-example-generator",
+ ];
+ }
+
+ public function getHelpUrls() {
+ $name = ucfirst( $this->getModuleName() );
+ return "https://www.mediawiki.org/wiki/Special:MyLanguage/API:{$name}";
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryBase.php b/www/wiki/includes/api/ApiQueryBase.php
new file mode 100644
index 00000000..3ad45bbb
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryBase.php
@@ -0,0 +1,612 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\ResultWrapper;
+
+/**
+ * This is a base class for all Query modules.
+ * It provides some common functionality such as constructing various SQL
+ * queries.
+ *
+ * @ingroup API
+ */
+abstract class ApiQueryBase extends ApiBase {
+
+ private $mQueryModule, $mDb, $tables, $where, $fields, $options, $join_conds;
+
+ /**
+ * @param ApiQuery $queryModule
+ * @param string $moduleName
+ * @param string $paramPrefix
+ */
+ public function __construct( ApiQuery $queryModule, $moduleName, $paramPrefix = '' ) {
+ parent::__construct( $queryModule->getMain(), $moduleName, $paramPrefix );
+ $this->mQueryModule = $queryModule;
+ $this->mDb = null;
+ $this->resetQueryParams();
+ }
+
+ /************************************************************************//**
+ * @name Methods to implement
+ * @{
+ */
+
+ /**
+ * Get the cache mode for the data generated by this module. Override
+ * this in the module subclass. For possible return values and other
+ * details about cache modes, see ApiMain::setCacheMode()
+ *
+ * Public caching will only be allowed if *all* the modules that supply
+ * data for a given request return a cache mode of public.
+ *
+ * @param array $params
+ * @return string
+ */
+ public function getCacheMode( $params ) {
+ return 'private';
+ }
+
+ /**
+ * Override this method to request extra fields from the pageSet
+ * using $pageSet->requestField('fieldName')
+ *
+ * Note this only makes sense for 'prop' modules, as 'list' and 'meta'
+ * modules should not be using the pageset.
+ *
+ * @param ApiPageSet $pageSet
+ */
+ public function requestExtraData( $pageSet ) {
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Data access
+ * @{
+ */
+
+ /**
+ * Get the main Query module
+ * @return ApiQuery
+ */
+ public function getQuery() {
+ return $this->mQueryModule;
+ }
+
+ /** @inheritDoc */
+ public function getParent() {
+ return $this->getQuery();
+ }
+
+ /**
+ * Get the Query database connection (read-only)
+ * @return IDatabase
+ */
+ protected function getDB() {
+ if ( is_null( $this->mDb ) ) {
+ $this->mDb = $this->getQuery()->getDB();
+ }
+
+ return $this->mDb;
+ }
+
+ /**
+ * Selects the query database connection with the given name.
+ * See ApiQuery::getNamedDB() for more information
+ * @param string $name Name to assign to the database connection
+ * @param int $db One of the DB_* constants
+ * @param string|string[] $groups Query groups
+ * @return IDatabase
+ */
+ public function selectNamedDB( $name, $db, $groups ) {
+ $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
+ return $this->mDb;
+ }
+
+ /**
+ * Get the PageSet object to work on
+ * @return ApiPageSet
+ */
+ protected function getPageSet() {
+ return $this->getQuery()->getPageSet();
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Querying
+ * @{
+ */
+
+ /**
+ * Blank the internal arrays with query parameters
+ */
+ protected function resetQueryParams() {
+ $this->tables = [];
+ $this->where = [];
+ $this->fields = [];
+ $this->options = [];
+ $this->join_conds = [];
+ }
+
+ /**
+ * Add a set of tables to the internal array
+ * @param string|string[] $tables Table name or array of table names
+ * @param string|null $alias Table alias, or null for no alias. Cannot be
+ * used with multiple tables
+ */
+ protected function addTables( $tables, $alias = null ) {
+ if ( is_array( $tables ) ) {
+ if ( !is_null( $alias ) ) {
+ ApiBase::dieDebug( __METHOD__, 'Multiple table aliases not supported' );
+ }
+ $this->tables = array_merge( $this->tables, $tables );
+ } else {
+ if ( !is_null( $alias ) ) {
+ $this->tables[$alias] = $tables;
+ } else {
+ $this->tables[] = $tables;
+ }
+ }
+ }
+
+ /**
+ * Add a set of JOIN conditions to the internal array
+ *
+ * JOIN conditions are formatted as [ tablename => [ jointype, conditions ] ]
+ * e.g. [ 'page' => [ 'LEFT JOIN', 'page_id=rev_page' ] ].
+ * Conditions may be a string or an addWhere()-style array.
+ * @param array $join_conds JOIN conditions
+ */
+ protected function addJoinConds( $join_conds ) {
+ if ( !is_array( $join_conds ) ) {
+ ApiBase::dieDebug( __METHOD__, 'Join conditions have to be arrays' );
+ }
+ $this->join_conds = array_merge( $this->join_conds, $join_conds );
+ }
+
+ /**
+ * Add a set of fields to select to the internal array
+ * @param array|string $value Field name or array of field names
+ */
+ protected function addFields( $value ) {
+ if ( is_array( $value ) ) {
+ $this->fields = array_merge( $this->fields, $value );
+ } else {
+ $this->fields[] = $value;
+ }
+ }
+
+ /**
+ * Same as addFields(), but add the fields only if a condition is met
+ * @param array|string $value See addFields()
+ * @param bool $condition If false, do nothing
+ * @return bool $condition
+ */
+ protected function addFieldsIf( $value, $condition ) {
+ if ( $condition ) {
+ $this->addFields( $value );
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Add a set of WHERE clauses to the internal array.
+ * Clauses can be formatted as 'foo=bar' or [ 'foo' => 'bar' ],
+ * the latter only works if the value is a constant (i.e. not another field)
+ *
+ * If $value is an empty array, this function does nothing.
+ *
+ * For example, [ 'foo=bar', 'baz' => 3, 'bla' => 'foo' ] translates
+ * to "foo=bar AND baz='3' AND bla='foo'"
+ * @param string|array $value
+ */
+ protected function addWhere( $value ) {
+ if ( is_array( $value ) ) {
+ // Sanity check: don't insert empty arrays,
+ // Database::makeList() chokes on them
+ if ( count( $value ) ) {
+ $this->where = array_merge( $this->where, $value );
+ }
+ } else {
+ $this->where[] = $value;
+ }
+ }
+
+ /**
+ * Same as addWhere(), but add the WHERE clauses only if a condition is met
+ * @param string|array $value
+ * @param bool $condition If false, do nothing
+ * @return bool $condition
+ */
+ protected function addWhereIf( $value, $condition ) {
+ if ( $condition ) {
+ $this->addWhere( $value );
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Equivalent to addWhere(array($field => $value))
+ * @param string $field Field name
+ * @param string|string[] $value Value; ignored if null or empty array
+ */
+ protected function addWhereFld( $field, $value ) {
+ if ( $value !== null && !( is_array( $value ) && !$value ) ) {
+ $this->where[$field] = $value;
+ }
+ }
+
+ /**
+ * Add a WHERE clause corresponding to a range, and an ORDER BY
+ * clause to sort in the right direction
+ * @param string $field Field name
+ * @param string $dir If 'newer', sort in ascending order, otherwise
+ * sort in descending order
+ * @param string $start Value to start the list at. If $dir == 'newer'
+ * this is the lower boundary, otherwise it's the upper boundary
+ * @param string $end Value to end the list at. If $dir == 'newer' this
+ * is the upper boundary, otherwise it's the lower boundary
+ * @param bool $sort If false, don't add an ORDER BY clause
+ */
+ protected function addWhereRange( $field, $dir, $start, $end, $sort = true ) {
+ $isDirNewer = ( $dir === 'newer' );
+ $after = ( $isDirNewer ? '>=' : '<=' );
+ $before = ( $isDirNewer ? '<=' : '>=' );
+ $db = $this->getDB();
+
+ if ( !is_null( $start ) ) {
+ $this->addWhere( $field . $after . $db->addQuotes( $start ) );
+ }
+
+ if ( !is_null( $end ) ) {
+ $this->addWhere( $field . $before . $db->addQuotes( $end ) );
+ }
+
+ if ( $sort ) {
+ $order = $field . ( $isDirNewer ? '' : ' DESC' );
+ // Append ORDER BY
+ $optionOrderBy = isset( $this->options['ORDER BY'] )
+ ? (array)$this->options['ORDER BY']
+ : [];
+ $optionOrderBy[] = $order;
+ $this->addOption( 'ORDER BY', $optionOrderBy );
+ }
+ }
+
+ /**
+ * Add a WHERE clause corresponding to a range, similar to addWhereRange,
+ * but converts $start and $end to database timestamps.
+ * @see addWhereRange
+ * @param string $field
+ * @param string $dir
+ * @param string $start
+ * @param string $end
+ * @param bool $sort
+ */
+ protected function addTimestampWhereRange( $field, $dir, $start, $end, $sort = true ) {
+ $db = $this->getDB();
+ $this->addWhereRange( $field, $dir,
+ $db->timestampOrNull( $start ), $db->timestampOrNull( $end ), $sort );
+ }
+
+ /**
+ * Add an option such as LIMIT or USE INDEX. If an option was set
+ * before, the old value will be overwritten
+ * @param string $name Option name
+ * @param string|string[] $value Option value
+ */
+ protected function addOption( $name, $value = null ) {
+ if ( is_null( $value ) ) {
+ $this->options[] = $name;
+ } else {
+ $this->options[$name] = $value;
+ }
+ }
+
+ /**
+ * Execute a SELECT query based on the values in the internal arrays
+ * @param string $method Function the query should be attributed to.
+ * You should usually use __METHOD__ here
+ * @param array $extraQuery Query data to add but not store in the object
+ * Format is [
+ * 'tables' => ...,
+ * 'fields' => ...,
+ * 'where' => ...,
+ * 'options' => ...,
+ * 'join_conds' => ...
+ * ]
+ * @param array|null &$hookData If set, the ApiQueryBaseBeforeQuery and
+ * ApiQueryBaseAfterQuery hooks will be called, and the
+ * ApiQueryBaseProcessRow hook will be expected.
+ * @return ResultWrapper
+ */
+ protected function select( $method, $extraQuery = [], array &$hookData = null ) {
+ $tables = array_merge(
+ $this->tables,
+ isset( $extraQuery['tables'] ) ? (array)$extraQuery['tables'] : []
+ );
+ $fields = array_merge(
+ $this->fields,
+ isset( $extraQuery['fields'] ) ? (array)$extraQuery['fields'] : []
+ );
+ $where = array_merge(
+ $this->where,
+ isset( $extraQuery['where'] ) ? (array)$extraQuery['where'] : []
+ );
+ $options = array_merge(
+ $this->options,
+ isset( $extraQuery['options'] ) ? (array)$extraQuery['options'] : []
+ );
+ $join_conds = array_merge(
+ $this->join_conds,
+ isset( $extraQuery['join_conds'] ) ? (array)$extraQuery['join_conds'] : []
+ );
+
+ if ( $hookData !== null ) {
+ Hooks::run( 'ApiQueryBaseBeforeQuery',
+ [ $this, &$tables, &$fields, &$where, &$options, &$join_conds, &$hookData ]
+ );
+ }
+
+ $res = $this->getDB()->select( $tables, $fields, $where, $method, $options, $join_conds );
+
+ if ( $hookData !== null ) {
+ Hooks::run( 'ApiQueryBaseAfterQuery', [ $this, $res, &$hookData ] );
+ }
+
+ return $res;
+ }
+
+ /**
+ * Call the ApiQueryBaseProcessRow hook
+ *
+ * Generally, a module that passed $hookData to self::select() will call
+ * this just before calling ApiResult::addValue(), and treat a false return
+ * here in the same way it treats a false return from addValue().
+ *
+ * @since 1.28
+ * @param object $row Database row
+ * @param array &$data Data to be added to the result
+ * @param array &$hookData Hook data from ApiQueryBase::select()
+ * @return bool Return false if row processing should end with continuation
+ */
+ protected function processRow( $row, array &$data, array &$hookData ) {
+ return Hooks::run( 'ApiQueryBaseProcessRow', [ $this, $row, &$data, &$hookData ] );
+ }
+
+ /**
+ * @param string $query
+ * @param string $protocol
+ * @return null|string
+ */
+ public function prepareUrlQuerySearchString( $query = null, $protocol = null ) {
+ $db = $this->getDB();
+ if ( !is_null( $query ) || $query != '' ) {
+ if ( is_null( $protocol ) ) {
+ $protocol = 'http://';
+ }
+
+ $likeQuery = LinkFilter::makeLikeArray( $query, $protocol );
+ if ( !$likeQuery ) {
+ $this->dieWithError( 'apierror-badquery' );
+ }
+
+ $likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
+
+ return 'el_index ' . $db->buildLike( $likeQuery );
+ } elseif ( !is_null( $protocol ) ) {
+ return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
+ }
+
+ return null;
+ }
+
+ /**
+ * Filters hidden users (where the user doesn't have the right to view them)
+ * Also adds relevant block information
+ *
+ * @param bool $showBlockInfo
+ * @return void
+ */
+ public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
+ $this->addTables( 'ipblocks' );
+ $this->addJoinConds( [
+ 'ipblocks' => [ 'LEFT JOIN', 'ipb_user=user_id' ],
+ ] );
+
+ $this->addFields( 'ipb_deleted' );
+
+ if ( $showBlockInfo ) {
+ $this->addFields( [
+ 'ipb_id',
+ 'ipb_expiry',
+ 'ipb_timestamp'
+ ] );
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'ipb_by' );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addFields( $actorQuery['fields'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $commentQuery = CommentStore::getStore()->getJoin( 'ipb_reason' );
+ $this->addTables( $commentQuery['tables'] );
+ $this->addFields( $commentQuery['fields'] );
+ $this->addJoinConds( $commentQuery['joins'] );
+ }
+
+ // Don't show hidden names
+ if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+ $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
+ }
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Utility methods
+ * @{
+ */
+
+ /**
+ * Add information (title and namespace) about a Title object to a
+ * result array
+ * @param array &$arr Result array à la ApiResult
+ * @param Title $title
+ * @param string $prefix Module prefix
+ */
+ public static function addTitleInfo( &$arr, $title, $prefix = '' ) {
+ $arr[$prefix . 'ns'] = intval( $title->getNamespace() );
+ $arr[$prefix . 'title'] = $title->getPrefixedText();
+ }
+
+ /**
+ * Add a sub-element under the page element with the given page ID
+ * @param int $pageId Page ID
+ * @param array $data Data array à la ApiResult
+ * @return bool Whether the element fit in the result
+ */
+ protected function addPageSubItems( $pageId, $data ) {
+ $result = $this->getResult();
+ ApiResult::setIndexedTagName( $data, $this->getModulePrefix() );
+
+ return $result->addValue( [ 'query', 'pages', intval( $pageId ) ],
+ $this->getModuleName(),
+ $data );
+ }
+
+ /**
+ * Same as addPageSubItems(), but one element of $data at a time
+ * @param int $pageId Page ID
+ * @param array $item Data array à la ApiResult
+ * @param string $elemname XML element name. If null, getModuleName()
+ * is used
+ * @return bool Whether the element fit in the result
+ */
+ protected function addPageSubItem( $pageId, $item, $elemname = null ) {
+ if ( is_null( $elemname ) ) {
+ $elemname = $this->getModulePrefix();
+ }
+ $result = $this->getResult();
+ $fit = $result->addValue( [ 'query', 'pages', $pageId,
+ $this->getModuleName() ], null, $item );
+ if ( !$fit ) {
+ return false;
+ }
+ $result->addIndexedTagName( [ 'query', 'pages', $pageId,
+ $this->getModuleName() ], $elemname );
+
+ return true;
+ }
+
+ /**
+ * Set a query-continue value
+ * @param string $paramName Parameter name
+ * @param string|array $paramValue Parameter value
+ */
+ protected function setContinueEnumParameter( $paramName, $paramValue ) {
+ $this->getContinuationManager()->addContinueParam( $this, $paramName, $paramValue );
+ }
+
+ /**
+ * Convert an input title or title prefix into a dbkey.
+ *
+ * $namespace should always be specified in order to handle per-namespace
+ * capitalization settings.
+ *
+ * @param string $titlePart Title part
+ * @param int $namespace Namespace of the title
+ * @return string DBkey (no namespace prefix)
+ */
+ public function titlePartToKey( $titlePart, $namespace = NS_MAIN ) {
+ $t = Title::makeTitleSafe( $namespace, $titlePart . 'x' );
+ if ( !$t || $t->hasFragment() ) {
+ // Invalid title (e.g. bad chars) or contained a '#'.
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $titlePart ) ] );
+ }
+ if ( $namespace != $t->getNamespace() || $t->isExternal() ) {
+ // This can happen in two cases. First, if you call titlePartToKey with a title part
+ // that looks like a namespace, but with $defaultNamespace = NS_MAIN. It would be very
+ // difficult to handle such a case. Such cases cannot exist and are therefore treated
+ // as invalid user input. The second case is when somebody specifies a title interwiki
+ // prefix.
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $titlePart ) ] );
+ }
+
+ return substr( $t->getDBkey(), 0, -1 );
+ }
+
+ /**
+ * Convert an input title or title prefix into a namespace constant and dbkey.
+ *
+ * @since 1.26
+ * @param string $titlePart Title part
+ * @param int $defaultNamespace Default namespace if none is given
+ * @return array (int, string) Namespace number and DBkey
+ */
+ public function prefixedTitlePartToKey( $titlePart, $defaultNamespace = NS_MAIN ) {
+ $t = Title::newFromText( $titlePart . 'x', $defaultNamespace );
+ if ( !$t || $t->hasFragment() || $t->isExternal() ) {
+ // Invalid title (e.g. bad chars) or contained a '#'.
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $titlePart ) ] );
+ }
+
+ return [ $t->getNamespace(), substr( $t->getDBkey(), 0, -1 ) ];
+ }
+
+ /**
+ * @param string $hash
+ * @return bool
+ */
+ public function validateSha1Hash( $hash ) {
+ return (bool)preg_match( '/^[a-f0-9]{40}$/', $hash );
+ }
+
+ /**
+ * @param string $hash
+ * @return bool
+ */
+ public function validateSha1Base36Hash( $hash ) {
+ return (bool)preg_match( '/^[a-z0-9]{31}$/', $hash );
+ }
+
+ /**
+ * Check whether the current user has permission to view revision-deleted
+ * fields.
+ * @return bool
+ */
+ public function userCanSeeRevDel() {
+ return $this->getUser()->isAllowedAny(
+ 'deletedhistory',
+ 'deletedtext',
+ 'suppressrevision',
+ 'viewsuppressed'
+ );
+ }
+
+ /**@}*/
+}
diff --git a/www/wiki/includes/api/ApiQueryBlocks.php b/www/wiki/includes/api/ApiQueryBlocks.php
new file mode 100644
index 00000000..08c13e7a
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryBlocks.php
@@ -0,0 +1,347 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all user blocks
+ *
+ * @ingroup API
+ */
+class ApiQueryBlocks extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'bk' );
+ }
+
+ public function execute() {
+ $db = $this->getDB();
+ $commentStore = CommentStore::getStore();
+ $params = $this->extractRequestParams();
+ $this->requireMaxOneParameter( $params, 'users', 'ip' );
+
+ $prop = array_flip( $params['prop'] );
+ $fld_id = isset( $prop['id'] );
+ $fld_user = isset( $prop['user'] );
+ $fld_userid = isset( $prop['userid'] );
+ $fld_by = isset( $prop['by'] );
+ $fld_byid = isset( $prop['byid'] );
+ $fld_timestamp = isset( $prop['timestamp'] );
+ $fld_expiry = isset( $prop['expiry'] );
+ $fld_reason = isset( $prop['reason'] );
+ $fld_range = isset( $prop['range'] );
+ $fld_flags = isset( $prop['flags'] );
+
+ $result = $this->getResult();
+
+ $this->addTables( 'ipblocks' );
+ $this->addFields( [ 'ipb_auto', 'ipb_id', 'ipb_timestamp' ] );
+
+ $this->addFieldsIf( [ 'ipb_address', 'ipb_user' ], $fld_user || $fld_userid );
+ if ( $fld_by || $fld_byid ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'ipb_by' );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addFields( $actorQuery['fields'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ }
+ $this->addFieldsIf( 'ipb_expiry', $fld_expiry );
+ $this->addFieldsIf( [ 'ipb_range_start', 'ipb_range_end' ], $fld_range );
+ $this->addFieldsIf( [ 'ipb_anon_only', 'ipb_create_account', 'ipb_enable_autoblock',
+ 'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk' ],
+ $fld_flags );
+
+ if ( $fld_reason ) {
+ $commentQuery = $commentStore->getJoin( 'ipb_reason' );
+ $this->addTables( $commentQuery['tables'] );
+ $this->addFields( $commentQuery['fields'] );
+ $this->addJoinConds( $commentQuery['joins'] );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $this->addTimestampWhereRange(
+ 'ipb_timestamp',
+ $params['dir'],
+ $params['start'],
+ $params['end']
+ );
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'ipb_id', $params['dir'], null, null );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = ( $params['dir'] == 'newer' ? '>' : '<' );
+ $continueTimestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $continueId = (int)$cont[1];
+ $this->dieContinueUsageIf( $continueId != $cont[1] );
+ $this->addWhere( "ipb_timestamp $op $continueTimestamp OR " .
+ "(ipb_timestamp = $continueTimestamp AND " .
+ "ipb_id $op= $continueId)"
+ );
+ }
+
+ if ( isset( $params['ids'] ) ) {
+ $this->addWhereFld( 'ipb_id', $params['ids'] );
+ }
+ if ( isset( $params['users'] ) ) {
+ $usernames = [];
+ foreach ( (array)$params['users'] as $u ) {
+ $usernames[] = $this->prepareUsername( $u );
+ }
+ $this->addWhereFld( 'ipb_address', $usernames );
+ $this->addWhereFld( 'ipb_auto', 0 );
+ }
+ if ( isset( $params['ip'] ) ) {
+ $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
+ if ( IP::isIPv4( $params['ip'] ) ) {
+ $type = 'IPv4';
+ $cidrLimit = $blockCIDRLimit['IPv4'];
+ $prefixLen = 0;
+ } elseif ( IP::isIPv6( $params['ip'] ) ) {
+ $type = 'IPv6';
+ $cidrLimit = $blockCIDRLimit['IPv6'];
+ $prefixLen = 3; // IP::toHex output is prefixed with "v6-"
+ } else {
+ $this->dieWithError( 'apierror-badip', 'param_ip' );
+ }
+
+ # Check range validity, if it's a CIDR
+ list( $ip, $range ) = IP::parseCIDR( $params['ip'] );
+ if ( $ip !== false && $range !== false && $range < $cidrLimit ) {
+ $this->dieWithError( [ 'apierror-cidrtoobroad', $type, $cidrLimit ] );
+ }
+
+ # Let IP::parseRange handle calculating $upper, instead of duplicating the logic here.
+ list( $lower, $upper ) = IP::parseRange( $params['ip'] );
+
+ # Extract the common prefix to any rangeblock affecting this IP/CIDR
+ $prefix = substr( $lower, 0, $prefixLen + floor( $cidrLimit / 4 ) );
+
+ # Fairly hard to make a malicious SQL statement out of hex characters,
+ # but it is good practice to add quotes
+ $lower = $db->addQuotes( $lower );
+ $upper = $db->addQuotes( $upper );
+
+ $this->addWhere( [
+ 'ipb_range_start' . $db->buildLike( $prefix, $db->anyString() ),
+ 'ipb_range_start <= ' . $lower,
+ 'ipb_range_end >= ' . $upper,
+ 'ipb_auto' => 0
+ ] );
+ }
+
+ if ( !is_null( $params['show'] ) ) {
+ $show = array_flip( $params['show'] );
+
+ /* Check for conflicting parameters. */
+ if ( ( isset( $show['account'] ) && isset( $show['!account'] ) )
+ || ( isset( $show['ip'] ) && isset( $show['!ip'] ) )
+ || ( isset( $show['range'] ) && isset( $show['!range'] ) )
+ || ( isset( $show['temp'] ) && isset( $show['!temp'] ) )
+ ) {
+ $this->dieWithError( 'apierror-show' );
+ }
+
+ $this->addWhereIf( 'ipb_user = 0', isset( $show['!account'] ) );
+ $this->addWhereIf( 'ipb_user != 0', isset( $show['account'] ) );
+ $this->addWhereIf( 'ipb_user != 0 OR ipb_range_end > ipb_range_start', isset( $show['!ip'] ) );
+ $this->addWhereIf( 'ipb_user = 0 AND ipb_range_end = ipb_range_start', isset( $show['ip'] ) );
+ $this->addWhereIf( 'ipb_expiry = ' .
+ $db->addQuotes( $db->getInfinity() ), isset( $show['!temp'] ) );
+ $this->addWhereIf( 'ipb_expiry != ' .
+ $db->addQuotes( $db->getInfinity() ), isset( $show['temp'] ) );
+ $this->addWhereIf( 'ipb_range_end = ipb_range_start', isset( $show['!range'] ) );
+ $this->addWhereIf( 'ipb_range_end > ipb_range_start', isset( $show['range'] ) );
+ }
+
+ if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+ $this->addWhereFld( 'ipb_deleted', 0 );
+ }
+
+ # Filter out expired rows
+ $this->addWhere( 'ipb_expiry > ' . $db->addQuotes( $db->timestamp() ) );
+
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've had enough
+ $this->setContinueEnumParameter( 'continue', "$row->ipb_timestamp|$row->ipb_id" );
+ break;
+ }
+ $block = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ if ( $fld_id ) {
+ $block['id'] = (int)$row->ipb_id;
+ }
+ if ( $fld_user && !$row->ipb_auto ) {
+ $block['user'] = $row->ipb_address;
+ }
+ if ( $fld_userid && !$row->ipb_auto ) {
+ $block['userid'] = (int)$row->ipb_user;
+ }
+ if ( $fld_by ) {
+ $block['by'] = $row->ipb_by_text;
+ }
+ if ( $fld_byid ) {
+ $block['byid'] = (int)$row->ipb_by;
+ }
+ if ( $fld_timestamp ) {
+ $block['timestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
+ }
+ if ( $fld_expiry ) {
+ $block['expiry'] = ApiResult::formatExpiry( $row->ipb_expiry );
+ }
+ if ( $fld_reason ) {
+ $block['reason'] = $commentStore->getComment( 'ipb_reason', $row )->text;
+ }
+ if ( $fld_range && !$row->ipb_auto ) {
+ $block['rangestart'] = IP::formatHex( $row->ipb_range_start );
+ $block['rangeend'] = IP::formatHex( $row->ipb_range_end );
+ }
+ if ( $fld_flags ) {
+ // For clarity, these flags use the same names as their action=block counterparts
+ $block['automatic'] = (bool)$row->ipb_auto;
+ $block['anononly'] = (bool)$row->ipb_anon_only;
+ $block['nocreate'] = (bool)$row->ipb_create_account;
+ $block['autoblock'] = (bool)$row->ipb_enable_autoblock;
+ $block['noemail'] = (bool)$row->ipb_block_email;
+ $block['hidden'] = (bool)$row->ipb_deleted;
+ $block['allowusertalk'] = (bool)$row->ipb_allow_usertalk;
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $block );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', "$row->ipb_timestamp|$row->ipb_id" );
+ break;
+ }
+ }
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'block' );
+ }
+
+ protected function prepareUsername( $user ) {
+ if ( !$user ) {
+ $encParamName = $this->encodeParamName( 'users' );
+ $this->dieWithError( [ 'apierror-baduser', $encParamName, wfEscapeWikiText( $user ) ],
+ "baduser_{$encParamName}"
+ );
+ }
+ $name = User::isIP( $user )
+ ? $user
+ : User::getCanonicalName( $user, 'valid' );
+ if ( $name === false ) {
+ $encParamName = $this->encodeParamName( 'users' );
+ $this->dieWithError( [ 'apierror-baduser', $encParamName, wfEscapeWikiText( $user ) ],
+ "baduser_{$encParamName}"
+ );
+ }
+ return $name;
+ }
+
+ public function getAllowedParams() {
+ $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
+
+ return [
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+ 'dir' => [
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'ids' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'users' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'ip' => [
+ ApiBase::PARAM_HELP_MSG => [
+ 'apihelp-query+blocks-param-ip',
+ $blockCIDRLimit['IPv4'],
+ $blockCIDRLimit['IPv6'],
+ ],
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'id|user|by|timestamp|expiry|reason|flags',
+ ApiBase::PARAM_TYPE => [
+ 'id',
+ 'user',
+ 'userid',
+ 'by',
+ 'byid',
+ 'timestamp',
+ 'expiry',
+ 'reason',
+ 'range',
+ 'flags'
+ ],
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'show' => [
+ ApiBase::PARAM_TYPE => [
+ 'account',
+ '!account',
+ 'temp',
+ '!temp',
+ 'ip',
+ '!ip',
+ 'range',
+ '!range',
+ ],
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=blocks'
+ => 'apihelp-query+blocks-example-simple',
+ 'action=query&list=blocks&bkusers=Alice|Bob'
+ => 'apihelp-query+blocks-example-users',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Blocks';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryCategories.php b/www/wiki/includes/api/ApiQueryCategories.php
new file mode 100644
index 00000000..7b447cb9
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryCategories.php
@@ -0,0 +1,232 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to enumerate categories the set of pages belong to.
+ *
+ * @ingroup API
+ */
+class ApiQueryCategories extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'cl' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ private function run( $resultPageSet = null ) {
+ if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
+ return; // nothing to do
+ }
+
+ $params = $this->extractRequestParams();
+ $prop = array_flip( (array)$params['prop'] );
+ $show = array_flip( (array)$params['show'] );
+
+ $this->addFields( [
+ 'cl_from',
+ 'cl_to'
+ ] );
+
+ $this->addFieldsIf( [ 'cl_sortkey', 'cl_sortkey_prefix' ], isset( $prop['sortkey'] ) );
+ $this->addFieldsIf( 'cl_timestamp', isset( $prop['timestamp'] ) );
+
+ $this->addTables( 'categorylinks' );
+ $this->addWhereFld( 'cl_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
+ if ( $params['categories'] ) {
+ $cats = [];
+ foreach ( $params['categories'] as $cat ) {
+ $title = Title::newFromText( $cat );
+ if ( !$title || $title->getNamespace() != NS_CATEGORY ) {
+ $this->addWarning( [ 'apiwarn-invalidcategory', wfEscapeWikiText( $cat ) ] );
+ } else {
+ $cats[] = $title->getDBkey();
+ }
+ }
+ if ( !$cats ) {
+ // No titles so no results
+ return;
+ }
+ $this->addWhereFld( 'cl_to', $cats );
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $clfrom = intval( $cont[0] );
+ $clto = $this->getDB()->addQuotes( $cont[1] );
+ $this->addWhere(
+ "cl_from $op $clfrom OR " .
+ "(cl_from = $clfrom AND " .
+ "cl_to $op= $clto)"
+ );
+ }
+
+ if ( isset( $show['hidden'] ) && isset( $show['!hidden'] ) ) {
+ $this->dieWithError( 'apierror-show' );
+ }
+ if ( isset( $show['hidden'] ) || isset( $show['!hidden'] ) || isset( $prop['hidden'] ) ) {
+ $this->addOption( 'STRAIGHT_JOIN' );
+ $this->addTables( [ 'page', 'page_props' ] );
+ $this->addFieldsIf( 'pp_propname', isset( $prop['hidden'] ) );
+ $this->addJoinConds( [
+ 'page' => [ 'LEFT JOIN', [
+ 'page_namespace' => NS_CATEGORY,
+ 'page_title = cl_to' ] ],
+ 'page_props' => [ 'LEFT JOIN', [
+ 'pp_page=page_id',
+ 'pp_propname' => 'hiddencat' ] ]
+ ] );
+ if ( isset( $show['hidden'] ) ) {
+ $this->addWhere( [ 'pp_propname IS NOT NULL' ] );
+ } elseif ( isset( $show['!hidden'] ) ) {
+ $this->addWhere( [ 'pp_propname IS NULL' ] );
+ }
+ }
+
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ // Don't order by cl_from if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
+ $this->addOption( 'ORDER BY', 'cl_to' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'cl_from' . $sort,
+ 'cl_to' . $sort
+ ] );
+ }
+
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ if ( is_null( $resultPageSet ) ) {
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->cl_from . '|' . $row->cl_to );
+ break;
+ }
+
+ $title = Title::makeTitle( NS_CATEGORY, $row->cl_to );
+ $vals = [];
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ if ( isset( $prop['sortkey'] ) ) {
+ $vals['sortkey'] = bin2hex( $row->cl_sortkey );
+ $vals['sortkeyprefix'] = $row->cl_sortkey_prefix;
+ }
+ if ( isset( $prop['timestamp'] ) ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->cl_timestamp );
+ }
+ if ( isset( $prop['hidden'] ) ) {
+ $vals['hidden'] = !is_null( $row->pp_propname );
+ }
+
+ $fit = $this->addPageSubItem( $row->cl_from, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->cl_from . '|' . $row->cl_to );
+ break;
+ }
+ }
+ } else {
+ $titles = [];
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->cl_from . '|' . $row->cl_to );
+ break;
+ }
+
+ $titles[] = Title::makeTitle( NS_CATEGORY, $row->cl_to );
+ }
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'sortkey',
+ 'timestamp',
+ 'hidden',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'show' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'hidden',
+ '!hidden',
+ ]
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'categories' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=categories&titles=Albert%20Einstein'
+ => 'apihelp-query+categories-example-simple',
+ 'action=query&generator=categories&titles=Albert%20Einstein&prop=info'
+ => 'apihelp-query+categories-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Categories';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryCategoryInfo.php b/www/wiki/includes/api/ApiQueryCategoryInfo.php
new file mode 100644
index 00000000..02361a27
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryCategoryInfo.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This query adds the "<categories>" subelement to all pages with the list of
+ * categories the page is in.
+ *
+ * @ingroup API
+ */
+class ApiQueryCategoryInfo extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ci' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $alltitles = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
+ if ( empty( $alltitles[NS_CATEGORY] ) ) {
+ return;
+ }
+ $categories = $alltitles[NS_CATEGORY];
+
+ $titles = $this->getPageSet()->getGoodAndMissingTitles();
+ $cattitles = [];
+ foreach ( $categories as $c ) {
+ /** @var Title $t */
+ $t = $titles[$c];
+ $cattitles[$c] = $t->getDBkey();
+ }
+
+ $this->addTables( [ 'category', 'page', 'page_props' ] );
+ $this->addJoinConds( [
+ 'page' => [ 'LEFT JOIN', [
+ 'page_namespace' => NS_CATEGORY,
+ 'page_title=cat_title' ] ],
+ 'page_props' => [ 'LEFT JOIN', [
+ 'pp_page=page_id',
+ 'pp_propname' => 'hiddencat' ] ],
+ ] );
+
+ $this->addFields( [
+ 'cat_title',
+ 'cat_pages',
+ 'cat_subcats',
+ 'cat_files',
+ 'cat_hidden' => 'pp_propname'
+ ] );
+ $this->addWhere( [ 'cat_title' => $cattitles ] );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $title = $this->getDB()->addQuotes( $params['continue'] );
+ $this->addWhere( "cat_title >= $title" );
+ }
+ $this->addOption( 'ORDER BY', 'cat_title' );
+
+ $res = $this->select( __METHOD__ );
+
+ $catids = array_flip( $cattitles );
+ foreach ( $res as $row ) {
+ $vals = [];
+ $vals['size'] = intval( $row->cat_pages );
+ $vals['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
+ $vals['files'] = intval( $row->cat_files );
+ $vals['subcats'] = intval( $row->cat_subcats );
+ $vals['hidden'] = (bool)$row->cat_hidden;
+ $fit = $this->addPageSubItems( $catids[$row->cat_title], $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->cat_title );
+ break;
+ }
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar'
+ => 'apihelp-query+categoryinfo-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Categoryinfo';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryCategoryMembers.php b/www/wiki/includes/api/ApiQueryCategoryMembers.php
new file mode 100644
index 00000000..37d07887
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryCategoryMembers.php
@@ -0,0 +1,392 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to enumerate pages that belong to a category.
+ *
+ * @ingroup API
+ */
+class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'cm' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param string $hexSortkey
+ * @return bool
+ */
+ private function validateHexSortkey( $hexSortkey ) {
+ // A hex sortkey has an unbound number of 2 letter pairs
+ return (bool)preg_match( '/^(?:[a-fA-F0-9]{2})*$/D', $hexSortkey );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ $categoryTitle = $this->getTitleOrPageId( $params )->getTitle();
+ if ( $categoryTitle->getNamespace() != NS_CATEGORY ) {
+ $this->dieWithError( 'apierror-invalidcategory' );
+ }
+
+ $prop = array_flip( $params['prop'] );
+ $fld_ids = isset( $prop['ids'] );
+ $fld_title = isset( $prop['title'] );
+ $fld_sortkey = isset( $prop['sortkey'] );
+ $fld_sortkeyprefix = isset( $prop['sortkeyprefix'] );
+ $fld_timestamp = isset( $prop['timestamp'] );
+ $fld_type = isset( $prop['type'] );
+
+ if ( is_null( $resultPageSet ) ) {
+ $this->addFields( [ 'cl_from', 'cl_sortkey', 'cl_type', 'page_namespace', 'page_title' ] );
+ $this->addFieldsIf( 'page_id', $fld_ids );
+ $this->addFieldsIf( 'cl_sortkey_prefix', $fld_sortkeyprefix );
+ } else {
+ $this->addFields( $resultPageSet->getPageTableFields() ); // will include page_ id, ns, title
+ $this->addFields( [ 'cl_from', 'cl_sortkey', 'cl_type' ] );
+ }
+
+ $this->addFieldsIf( 'cl_timestamp', $fld_timestamp || $params['sort'] == 'timestamp' );
+
+ $this->addTables( [ 'page', 'categorylinks' ] ); // must be in this order for 'USE INDEX'
+
+ $this->addWhereFld( 'cl_to', $categoryTitle->getDBkey() );
+ $queryTypes = $params['type'];
+ $contWhere = false;
+
+ // Scanning large datasets for rare categories sucks, and I already told
+ // how to have efficient subcategory access :-) ~~~~ (oh well, domas)
+ $miser_ns = [];
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $miser_ns = $params['namespace'] ?: [];
+ } else {
+ $this->addWhereFld( 'page_namespace', $params['namespace'] );
+ }
+
+ $dir = in_array( $params['dir'], [ 'asc', 'ascending', 'newer' ] ) ? 'newer' : 'older';
+
+ if ( $params['sort'] == 'timestamp' ) {
+ $this->addTimestampWhereRange( 'cl_timestamp',
+ $dir,
+ $params['start'],
+ $params['end'] );
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'cl_from', $dir, null, null );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = ( $dir === 'newer' ? '>' : '<' );
+ $db = $this->getDB();
+ $continueTimestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $continueFrom = (int)$cont[1];
+ $this->dieContinueUsageIf( $continueFrom != $cont[1] );
+ $this->addWhere( "cl_timestamp $op $continueTimestamp OR " .
+ "(cl_timestamp = $continueTimestamp AND " .
+ "cl_from $op= $continueFrom)"
+ );
+ }
+
+ $this->addOption( 'USE INDEX', 'cl_timestamp' );
+ } else {
+ if ( $params['continue'] ) {
+ $cont = explode( '|', $params['continue'], 3 );
+ $this->dieContinueUsageIf( count( $cont ) != 3 );
+
+ // Remove the types to skip from $queryTypes
+ $contTypeIndex = array_search( $cont[0], $queryTypes );
+ $queryTypes = array_slice( $queryTypes, $contTypeIndex );
+
+ // Add a WHERE clause for sortkey and from
+ $this->dieContinueUsageIf( !$this->validateHexSortkey( $cont[1] ) );
+ $escSortkey = $this->getDB()->addQuotes( hex2bin( $cont[1] ) );
+ $from = intval( $cont[2] );
+ $op = $dir == 'newer' ? '>' : '<';
+ // $contWhere is used further down
+ $contWhere = "cl_sortkey $op $escSortkey OR " .
+ "(cl_sortkey = $escSortkey AND " .
+ "cl_from $op= $from)";
+ // The below produces ORDER BY cl_sortkey, cl_from, possibly with DESC added to each of them
+ $this->addWhereRange( 'cl_sortkey', $dir, null, null );
+ $this->addWhereRange( 'cl_from', $dir, null, null );
+ } else {
+ if ( $params['startsortkeyprefix'] !== null ) {
+ $startsortkey = Collation::singleton()->getSortKey( $params['startsortkeyprefix'] );
+ } elseif ( $params['starthexsortkey'] !== null ) {
+ if ( !$this->validateHexSortkey( $params['starthexsortkey'] ) ) {
+ $encParamName = $this->encodeParamName( 'starthexsortkey' );
+ $this->dieWithError( [ 'apierror-badparameter', $encParamName ], "badvalue_$encParamName" );
+ }
+ $startsortkey = hex2bin( $params['starthexsortkey'] );
+ } else {
+ $startsortkey = $params['startsortkey'];
+ }
+ if ( $params['endsortkeyprefix'] !== null ) {
+ $endsortkey = Collation::singleton()->getSortKey( $params['endsortkeyprefix'] );
+ } elseif ( $params['endhexsortkey'] !== null ) {
+ if ( !$this->validateHexSortkey( $params['endhexsortkey'] ) ) {
+ $encParamName = $this->encodeParamName( 'endhexsortkey' );
+ $this->dieWithError( [ 'apierror-badparameter', $encParamName ], "badvalue_$encParamName" );
+ }
+ $endsortkey = hex2bin( $params['endhexsortkey'] );
+ } else {
+ $endsortkey = $params['endsortkey'];
+ }
+
+ // The below produces ORDER BY cl_sortkey, cl_from, possibly with DESC added to each of them
+ $this->addWhereRange( 'cl_sortkey',
+ $dir,
+ $startsortkey,
+ $endsortkey );
+ $this->addWhereRange( 'cl_from', $dir, null, null );
+ }
+ $this->addOption( 'USE INDEX', 'cl_sortkey' );
+ }
+
+ $this->addWhere( 'cl_from=page_id' );
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+
+ if ( $params['sort'] == 'sortkey' ) {
+ // Run a separate SELECT query for each value of cl_type.
+ // This is needed because cl_type is an enum, and MySQL has
+ // inconsistencies between ORDER BY cl_type and
+ // WHERE cl_type >= 'foo' making proper paging impossible
+ // and unindexed.
+ $rows = [];
+ $first = true;
+ foreach ( $queryTypes as $type ) {
+ $extraConds = [ 'cl_type' => $type ];
+ if ( $first && $contWhere ) {
+ // Continuation condition. Only added to the
+ // first query, otherwise we'll skip things
+ $extraConds[] = $contWhere;
+ }
+ $res = $this->select( __METHOD__, [ 'where' => $extraConds ] );
+ $rows = array_merge( $rows, iterator_to_array( $res ) );
+ if ( count( $rows ) >= $limit + 1 ) {
+ break;
+ }
+ $first = false;
+ }
+ } else {
+ // Sorting by timestamp
+ // No need to worry about per-type queries because we
+ // aren't sorting or filtering by type anyway
+ $res = $this->select( __METHOD__ );
+ $rows = iterator_to_array( $res );
+ }
+
+ $result = $this->getResult();
+ $count = 0;
+ foreach ( $rows as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // @todo Security issue - if the user has no right to view next
+ // title, it will still be shown
+ if ( $params['sort'] == 'timestamp' ) {
+ $this->setContinueEnumParameter( 'continue', "$row->cl_timestamp|$row->cl_from" );
+ } else {
+ $sortkey = bin2hex( $row->cl_sortkey );
+ $this->setContinueEnumParameter( 'continue',
+ "{$row->cl_type}|$sortkey|{$row->cl_from}"
+ );
+ }
+ break;
+ }
+
+ // Since domas won't tell anyone what he told long ago, apply
+ // cmnamespace here. This means the query may return 0 actual
+ // results, but on the other hand it could save returning 5000
+ // useless results to the client. ~~~~
+ if ( count( $miser_ns ) && !in_array( $row->page_namespace, $miser_ns ) ) {
+ continue;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $vals = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ if ( $fld_ids ) {
+ $vals['pageid'] = intval( $row->page_id );
+ }
+ if ( $fld_title ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+ if ( $fld_sortkey ) {
+ $vals['sortkey'] = bin2hex( $row->cl_sortkey );
+ }
+ if ( $fld_sortkeyprefix ) {
+ $vals['sortkeyprefix'] = $row->cl_sortkey_prefix;
+ }
+ if ( $fld_type ) {
+ $vals['type'] = $row->cl_type;
+ }
+ if ( $fld_timestamp ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->cl_timestamp );
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ],
+ null, $vals );
+ if ( !$fit ) {
+ if ( $params['sort'] == 'timestamp' ) {
+ $this->setContinueEnumParameter( 'continue', "$row->cl_timestamp|$row->cl_from" );
+ } else {
+ $sortkey = bin2hex( $row->cl_sortkey );
+ $this->setContinueEnumParameter( 'continue',
+ "{$row->cl_type}|$sortkey|{$row->cl_from}"
+ );
+ }
+ break;
+ }
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName(
+ [ 'query', $this->getModuleName() ], 'cm' );
+ }
+ }
+
+ public function getAllowedParams() {
+ $ret = [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'ids|title',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'ids',
+ 'title',
+ 'sortkey',
+ 'sortkeyprefix',
+ 'type',
+ 'timestamp',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ],
+ 'type' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'page|subcat|file',
+ ApiBase::PARAM_TYPE => [
+ 'page',
+ 'subcat',
+ 'file'
+ ]
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'sort' => [
+ ApiBase::PARAM_DFLT => 'sortkey',
+ ApiBase::PARAM_TYPE => [
+ 'sortkey',
+ 'timestamp'
+ ]
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'asc',
+ 'desc',
+ // Normalising with other modules
+ 'ascending',
+ 'descending',
+ 'newer',
+ 'older',
+ ]
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'starthexsortkey' => null,
+ 'endhexsortkey' => null,
+ 'startsortkeyprefix' => null,
+ 'endsortkeyprefix' => null,
+ 'startsortkey' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'endsortkey' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ ];
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = [
+ 'api-help-param-limited-in-miser-mode',
+ ];
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=categorymembers&cmtitle=Category:Physics'
+ => 'apihelp-query+categorymembers-example-simple',
+ 'action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
+ => 'apihelp-query+categorymembers-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Categorymembers';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryContributors.php b/www/wiki/includes/api/ApiQueryContributors.php
new file mode 100644
index 00000000..d07df5a3
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryContributors.php
@@ -0,0 +1,270 @@
+<?php
+/**
+ * Query the list of contributors to a page
+ *
+ * Copyright © 2013 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.23
+ */
+
+/**
+ * A query module to show contributors to a page
+ *
+ * @ingroup API
+ * @since 1.23
+ */
+class ApiQueryContributors extends ApiQueryBase {
+ /** We don't want to process too many pages at once (it hits cold
+ * database pages too heavily), so only do the first MAX_PAGES input pages
+ * in each API call (leaving the rest for continuation).
+ */
+ const MAX_PAGES = 100;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ // "pc" is short for "page contributors", "co" was already taken by the
+ // GeoData extension's prop=coordinates.
+ parent::__construct( $query, $moduleName, 'pc' );
+ }
+
+ public function execute() {
+ global $wgActorTableSchemaMigrationStage;
+
+ $db = $this->getDB();
+ $params = $this->extractRequestParams();
+ $this->requireMaxOneParameter( $params, 'group', 'excludegroup', 'rights', 'excluderights' );
+
+ // Only operate on existing pages
+ $pages = array_keys( $this->getPageSet()->getGoodTitles() );
+
+ // Filter out already-processed pages
+ if ( $params['continue'] !== null ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $cont_page = (int)$cont[0];
+ $pages = array_filter( $pages, function ( $v ) use ( $cont_page ) {
+ return $v >= $cont_page;
+ } );
+ }
+ if ( !count( $pages ) ) {
+ // Nothing to do
+ return;
+ }
+
+ // Apply MAX_PAGES, leaving any over the limit for a continue.
+ sort( $pages );
+ $continuePages = null;
+ if ( count( $pages ) > self::MAX_PAGES ) {
+ $continuePages = $pages[self::MAX_PAGES] . '|0';
+ $pages = array_slice( $pages, 0, self::MAX_PAGES );
+ }
+
+ $result = $this->getResult();
+ $revQuery = Revision::getQueryInfo();
+
+ // For MIGRATION_NEW, target indexes on the revision_actor_temp table.
+ // Otherwise, revision is fine because it'll have to check all revision rows anyway.
+ $pageField = $wgActorTableSchemaMigrationStage === MIGRATION_NEW ? 'revactor_page' : 'rev_page';
+ $idField = $wgActorTableSchemaMigrationStage === MIGRATION_NEW
+ ? 'revactor_actor' : $revQuery['fields']['rev_user'];
+ $countField = $wgActorTableSchemaMigrationStage === MIGRATION_NEW
+ ? 'revactor_actor' : $revQuery['fields']['rev_user_text'];
+
+ // First, count anons
+ $this->addTables( $revQuery['tables'] );
+ $this->addJoinConds( $revQuery['joins'] );
+ $this->addFields( [
+ 'page' => $pageField,
+ 'anons' => "COUNT(DISTINCT $countField)",
+ ] );
+ $this->addWhereFld( $pageField, $pages );
+ $this->addWhere( ActorMigration::newMigration()->isAnon( $revQuery['fields']['rev_user'] ) );
+ $this->addWhere( $db->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0' );
+ $this->addOption( 'GROUP BY', $pageField );
+ $res = $this->select( __METHOD__ );
+ foreach ( $res as $row ) {
+ $fit = $result->addValue( [ 'query', 'pages', $row->page ],
+ 'anoncontributors', (int)$row->anons
+ );
+ if ( !$fit ) {
+ // This not fitting isn't reasonable, so it probably means that
+ // some other module used up all the space. Just set a dummy
+ // continue and hope it works next time.
+ $this->setContinueEnumParameter( 'continue',
+ $params['continue'] !== null ? $params['continue'] : '0|0'
+ );
+
+ return;
+ }
+ }
+
+ // Next, add logged-in users
+ $this->resetQueryParams();
+ $this->addTables( $revQuery['tables'] );
+ $this->addJoinConds( $revQuery['joins'] );
+ $this->addFields( [
+ 'page' => $pageField,
+ 'id' => $idField,
+ // Non-MySQL databases don't like partial group-by
+ 'userid' => 'MAX(' . $revQuery['fields']['rev_user'] . ')',
+ 'username' => 'MAX(' . $revQuery['fields']['rev_user_text'] . ')',
+ ] );
+ $this->addWhereFld( $pageField, $pages );
+ $this->addWhere( ActorMigration::newMigration()->isNotAnon( $revQuery['fields']['rev_user'] ) );
+ $this->addWhere( $db->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0' );
+ $this->addOption( 'GROUP BY', [ $pageField, $idField ] );
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+ // Force a sort order to ensure that properties are grouped by page
+ // But only if rev_page is not constant in the WHERE clause.
+ if ( count( $pages ) > 1 ) {
+ $this->addOption( 'ORDER BY', [ 'page', 'id' ] );
+ } else {
+ $this->addOption( 'ORDER BY', 'id' );
+ }
+
+ $limitGroups = [];
+ if ( $params['group'] ) {
+ $excludeGroups = false;
+ $limitGroups = $params['group'];
+ } elseif ( $params['excludegroup'] ) {
+ $excludeGroups = true;
+ $limitGroups = $params['excludegroup'];
+ } elseif ( $params['rights'] ) {
+ $excludeGroups = false;
+ foreach ( $params['rights'] as $r ) {
+ $limitGroups = array_merge( $limitGroups, User::getGroupsWithPermission( $r ) );
+ }
+
+ // If no group has the rights requested, no need to query
+ if ( !$limitGroups ) {
+ if ( $continuePages !== null ) {
+ // But we still need to continue for the next page's worth
+ // of anoncontributors
+ $this->setContinueEnumParameter( 'continue', $continuePages );
+ }
+
+ return;
+ }
+ } elseif ( $params['excluderights'] ) {
+ $excludeGroups = true;
+ foreach ( $params['excluderights'] as $r ) {
+ $limitGroups = array_merge( $limitGroups, User::getGroupsWithPermission( $r ) );
+ }
+ }
+
+ if ( $limitGroups ) {
+ $limitGroups = array_unique( $limitGroups );
+ $this->addTables( 'user_groups' );
+ $this->addJoinConds( [ 'user_groups' => [
+ $excludeGroups ? 'LEFT OUTER JOIN' : 'INNER JOIN',
+ [
+ 'ug_user=' . $revQuery['fields']['rev_user'],
+ 'ug_group' => $limitGroups,
+ 'ug_expiry IS NULL OR ug_expiry >= ' . $db->addQuotes( $db->timestamp() )
+ ]
+ ] ] );
+ $this->addWhereIf( 'ug_user IS NULL', $excludeGroups );
+ }
+
+ if ( $params['continue'] !== null ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $cont_page = (int)$cont[0];
+ $cont_id = (int)$cont[1];
+ $this->addWhere(
+ "$pageField > $cont_page OR " .
+ "($pageField = $cont_page AND " .
+ "$idField >= $cont_id)"
+ );
+ }
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->page . '|' . $row->id );
+ return;
+ }
+
+ $fit = $this->addPageSubItem( $row->page,
+ [ 'userid' => (int)$row->userid, 'name' => $row->username ],
+ 'user'
+ );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->page . '|' . $row->id );
+ return;
+ }
+ }
+
+ if ( $continuePages !== null ) {
+ $this->setContinueEnumParameter( 'continue', $continuePages );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ $userGroups = User::getAllGroups();
+ $userRights = User::getAllRights();
+
+ return [
+ 'group' => [
+ ApiBase::PARAM_TYPE => $userGroups,
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'excludegroup' => [
+ ApiBase::PARAM_TYPE => $userGroups,
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'rights' => [
+ ApiBase::PARAM_TYPE => $userRights,
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'excluderights' => [
+ ApiBase::PARAM_TYPE => $userRights,
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=contributors&titles=Main_Page'
+ => 'apihelp-query+contributors-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Contributors';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryDeletedRevisions.php b/www/wiki/includes/api/ApiQueryDeletedRevisions.php
new file mode 100644
index 00000000..1a1e8f7a
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryDeletedRevisions.php
@@ -0,0 +1,298 @@
+<?php
+/**
+ * Copyright © 2014 Wikimedia Foundation and contributors
+ *
+ * Heavily based on ApiQueryDeletedrevs,
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate deleted revisions for pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'drv' );
+ }
+
+ protected function run( ApiPageSet $resultPageSet = null ) {
+ $user = $this->getUser();
+ // Before doing anything at all, let's check permissions
+ $this->checkUserRightsAny( 'deletedhistory' );
+
+ $pageSet = $this->getPageSet();
+ $pageMap = $pageSet->getGoodAndMissingTitlesByNamespace();
+ $pageCount = count( $pageSet->getGoodAndMissingTitles() );
+ $revCount = $pageSet->getRevisionCount();
+ if ( $revCount === 0 && $pageCount === 0 ) {
+ // Nothing to do
+ return;
+ }
+ if ( $revCount !== 0 && count( $pageSet->getDeletedRevisionIDs() ) === 0 ) {
+ // Nothing to do, revisions were supplied but none are deleted
+ return;
+ }
+
+ $params = $this->extractRequestParams( false );
+
+ $db = $this->getDB();
+
+ $this->requireMaxOneParameter( $params, 'user', 'excludeuser' );
+
+ if ( $resultPageSet === null ) {
+ $this->parseParameters( $params );
+ $arQuery = Revision::getArchiveQueryInfo();
+ $this->addTables( $arQuery['tables'] );
+ $this->addFields( $arQuery['fields'] );
+ $this->addJoinConds( $arQuery['joins'] );
+ $this->addFields( [ 'ar_title', 'ar_namespace' ] );
+ } else {
+ $this->limit = $this->getParameter( 'limit' ) ?: 10;
+ $this->addTables( 'archive' );
+ $this->addFields( [ 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ] );
+ }
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ [ 'tag_summary' => [ 'LEFT JOIN', [ 'ar_rev_id=ts_rev_id' ] ] ]
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( !is_null( $params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds(
+ [ 'change_tag' => [ 'INNER JOIN', [ 'ar_rev_id=ct_rev_id' ] ] ]
+ );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ if ( $this->fetchContent ) {
+ $this->addTables( 'text' );
+ $this->addJoinConds(
+ [ 'text' => [ 'LEFT JOIN', [ 'ar_text_id=old_id' ] ] ]
+ );
+ $this->addFields( [ 'old_text', 'old_flags' ] );
+
+ // This also means stricter restrictions
+ $this->checkUserRightsAny( [ 'deletedtext', 'undelete' ] );
+ }
+
+ $dir = $params['dir'];
+
+ if ( $revCount !== 0 ) {
+ $this->addWhere( [
+ 'ar_rev_id' => array_keys( $pageSet->getDeletedRevisionIDs() )
+ ] );
+ } else {
+ // We need a custom WHERE clause that matches all titles.
+ $lb = new LinkBatch( $pageSet->getGoodAndMissingTitles() );
+ $where = $lb->constructSet( 'ar', $db );
+ $this->addWhere( $where );
+ }
+
+ if ( !is_null( $params['user'] ) ) {
+ // Don't query by user ID here, it might be able to use the ar_usertext_timestamp index.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'ar_user', User::newFromName( $params['user'], false ), false );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( $actorQuery['conds'] );
+ } elseif ( !is_null( $params['excludeuser'] ) ) {
+ // Here there's no chance of using ar_usertext_timestamp.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'ar_user', User::newFromName( $params['excludeuser'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( 'NOT(' . $actorQuery['conds'] . ')' );
+ }
+
+ if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+ // Paranoia: avoid brute force searches (T19342)
+ // (shouldn't be able to get here without 'deletedhistory', but
+ // check it again just in case)
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'ar_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $op = ( $dir == 'newer' ? '>' : '<' );
+ if ( $revCount !== 0 ) {
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $rev = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $rev ) !== $cont[0] );
+ $ar_id = (int)$cont[1];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[1] );
+ $this->addWhere( "ar_rev_id $op $rev OR " .
+ "(ar_rev_id = $rev AND " .
+ "ar_id $op= $ar_id)" );
+ } else {
+ $this->dieContinueUsageIf( count( $cont ) != 4 );
+ $ns = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
+ $ar_id = (int)$cont[3];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[3] );
+ $this->addWhere( "ar_namespace $op $ns OR " .
+ "(ar_namespace = $ns AND " .
+ "(ar_title $op $title OR " .
+ "(ar_title = $title AND " .
+ "(ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)))))" );
+ }
+ }
+
+ $this->addOption( 'LIMIT', $this->limit + 1 );
+
+ if ( $revCount !== 0 ) {
+ // Sort by ar_rev_id when querying by ar_rev_id
+ $this->addWhereRange( 'ar_rev_id', $dir, null, null );
+ } else {
+ // Sort by ns and title in the same order as timestamp for efficiency
+ // But only when not already unique in the query
+ if ( count( $pageMap ) > 1 ) {
+ $this->addWhereRange( 'ar_namespace', $dir, null, null );
+ }
+ $oneTitle = key( reset( $pageMap ) );
+ foreach ( $pageMap as $pages ) {
+ if ( count( $pages ) > 1 || key( $pages ) !== $oneTitle ) {
+ $this->addWhereRange( 'ar_title', $dir, null, null );
+ break;
+ }
+ }
+ $this->addTimestampWhereRange( 'ar_timestamp', $dir, $params['start'], $params['end'] );
+ }
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'ar_id', $dir, null, null );
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ $generated = [];
+ foreach ( $res as $row ) {
+ if ( ++$count > $this->limit ) {
+ // We've had enough
+ $this->setContinueEnumParameter( 'continue',
+ $revCount
+ ? "$row->ar_rev_id|$row->ar_id"
+ : "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ break;
+ }
+
+ if ( $resultPageSet !== null ) {
+ $generated[] = $row->ar_rev_id;
+ } else {
+ if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+ // Was it converted?
+ $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ $converted = $pageSet->getConvertedTitles();
+ if ( $title && isset( $converted[$title->getPrefixedText()] ) ) {
+ $title = Title::newFromText( $converted[$title->getPrefixedText()] );
+ if ( $title && isset( $pageMap[$title->getNamespace()][$title->getDBkey()] ) ) {
+ $pageMap[$row->ar_namespace][$row->ar_title] =
+ $pageMap[$title->getNamespace()][$title->getDBkey()];
+ }
+ }
+ }
+ if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+ ApiBase::dieDebug(
+ __METHOD__,
+ "Found row in archive (ar_id={$row->ar_id}) that didn't get processed by ApiPageSet"
+ );
+ }
+
+ $fit = $this->addPageSubItem(
+ $pageMap[$row->ar_namespace][$row->ar_title],
+ $this->extractRevisionInfo( Revision::newFromArchiveRow( $row ), $row ),
+ 'rev'
+ );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue',
+ $revCount
+ ? "$row->ar_rev_id|$row->ar_id"
+ : "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ break;
+ }
+ }
+ }
+
+ if ( $resultPageSet !== null ) {
+ $resultPageSet->populateFromRevisionIDs( $generated );
+ }
+ }
+
+ public function getAllowedParams() {
+ return parent::getAllowedParams() + [
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ],
+ 'dir' => [
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'tag' => null,
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'excludeuser' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=deletedrevisions&titles=Main%20Page|Talk:Main%20Page&' .
+ 'drvprop=user|comment|content'
+ => 'apihelp-query+deletedrevisions-example-titles',
+ 'action=query&prop=deletedrevisions&revids=123456'
+ => 'apihelp-query+deletedrevisions-example-revids',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Deletedrevisions';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryDeletedrevs.php b/www/wiki/includes/api/ApiQueryDeletedrevs.php
new file mode 100644
index 00000000..83d00a93
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryDeletedrevs.php
@@ -0,0 +1,512 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all deleted revisions.
+ *
+ * @ingroup API
+ * @deprecated since 1.25
+ */
+class ApiQueryDeletedrevs extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'dr' );
+ }
+
+ public function execute() {
+ // Before doing anything at all, let's check permissions
+ $this->checkUserRightsAny( 'deletedhistory' );
+
+ $this->addDeprecation( 'apiwarn-deprecation-deletedrevs', 'action=query&list=deletedrevs' );
+
+ $user = $this->getUser();
+ $db = $this->getDB();
+ $commentStore = CommentStore::getStore();
+ $params = $this->extractRequestParams( false );
+ $prop = array_flip( $params['prop'] );
+ $fld_parentid = isset( $prop['parentid'] );
+ $fld_revid = isset( $prop['revid'] );
+ $fld_user = isset( $prop['user'] );
+ $fld_userid = isset( $prop['userid'] );
+ $fld_comment = isset( $prop['comment'] );
+ $fld_parsedcomment = isset( $prop['parsedcomment'] );
+ $fld_minor = isset( $prop['minor'] );
+ $fld_len = isset( $prop['len'] );
+ $fld_sha1 = isset( $prop['sha1'] );
+ $fld_content = isset( $prop['content'] );
+ $fld_token = isset( $prop['token'] );
+ $fld_tags = isset( $prop['tags'] );
+
+ if ( isset( $prop['token'] ) ) {
+ $p = $this->getModulePrefix();
+ }
+
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ $fld_token = false;
+ }
+
+ // If user can't undelete, no tokens
+ if ( !$user->isAllowed( 'undelete' ) ) {
+ $fld_token = false;
+ }
+
+ $result = $this->getResult();
+ $pageSet = $this->getPageSet();
+ $titles = $pageSet->getTitles();
+
+ // This module operates in three modes:
+ // 'revs': List deleted revs for certain titles (1)
+ // 'user': List deleted revs by a certain user (2)
+ // 'all': List all deleted revs in NS (3)
+ $mode = 'all';
+ if ( count( $titles ) > 0 ) {
+ $mode = 'revs';
+ } elseif ( !is_null( $params['user'] ) ) {
+ $mode = 'user';
+ }
+
+ if ( $mode == 'revs' || $mode == 'user' ) {
+ // Ignore namespace and unique due to inability to know whether they were purposely set
+ foreach ( [ 'from', 'to', 'prefix', /*'namespace', 'unique'*/ ] as $p ) {
+ if ( !is_null( $params[$p] ) ) {
+ $this->dieWithError( [ 'apierror-deletedrevs-param-not-1-2', $p ], 'badparams' );
+ }
+ }
+ } else {
+ foreach ( [ 'start', 'end' ] as $p ) {
+ if ( !is_null( $params[$p] ) ) {
+ $this->dieWithError( [ 'apierror-deletedrevs-param-not-3', $p ], 'badparams' );
+ }
+ }
+ }
+
+ if ( !is_null( $params['user'] ) && !is_null( $params['excludeuser'] ) ) {
+ $this->dieWithError( 'user and excludeuser cannot be used together', 'badparams' );
+ }
+
+ $this->addTables( 'archive' );
+ $this->addFields( [ 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_deleted', 'ar_id' ] );
+
+ $this->addFieldsIf( 'ar_parent_id', $fld_parentid );
+ $this->addFieldsIf( 'ar_rev_id', $fld_revid );
+ if ( $fld_user || $fld_userid ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'ar_user' );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addFields( $actorQuery['fields'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ }
+ $this->addFieldsIf( 'ar_minor_edit', $fld_minor );
+ $this->addFieldsIf( 'ar_len', $fld_len );
+ $this->addFieldsIf( 'ar_sha1', $fld_sha1 );
+
+ if ( $fld_comment || $fld_parsedcomment ) {
+ $commentQuery = $commentStore->getJoin( 'ar_comment' );
+ $this->addTables( $commentQuery['tables'] );
+ $this->addFields( $commentQuery['fields'] );
+ $this->addJoinConds( $commentQuery['joins'] );
+ }
+
+ if ( $fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ [ 'tag_summary' => [ 'LEFT JOIN', [ 'ar_rev_id=ts_rev_id' ] ] ]
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( !is_null( $params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds(
+ [ 'change_tag' => [ 'INNER JOIN', [ 'ar_rev_id=ct_rev_id' ] ] ]
+ );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ if ( $fld_content ) {
+ $this->addTables( 'text' );
+ $this->addJoinConds(
+ [ 'text' => [ 'LEFT JOIN', [ 'ar_text_id=old_id' ] ] ]
+ );
+ $this->addFields( [ 'ar_text_id', 'old_text', 'old_flags' ] );
+
+ // This also means stricter restrictions
+ $this->checkUserRightsAny( [ 'deletedtext', 'undelete' ] );
+ }
+ // Check limits
+ $userMax = $fld_content ? ApiBase::LIMIT_SML1 : ApiBase::LIMIT_BIG1;
+ $botMax = $fld_content ? ApiBase::LIMIT_SML2 : ApiBase::LIMIT_BIG2;
+
+ $limit = $params['limit'];
+
+ if ( $limit == 'max' ) {
+ $limit = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
+ $this->getResult()->addParsedLimit( $this->getModuleName(), $limit );
+ }
+
+ $this->validateLimit( 'limit', $limit, 1, $userMax, $botMax );
+
+ if ( $fld_token ) {
+ // Undelete tokens are identical for all pages, so we cache one here
+ $token = $user->getEditToken( '', $this->getMain()->getRequest() );
+ }
+
+ $dir = $params['dir'];
+
+ // We need a custom WHERE clause that matches all titles.
+ if ( $mode == 'revs' ) {
+ $lb = new LinkBatch( $titles );
+ $where = $lb->constructSet( 'ar', $db );
+ $this->addWhere( $where );
+ } elseif ( $mode == 'all' ) {
+ $this->addWhereFld( 'ar_namespace', $params['namespace'] );
+
+ $from = $params['from'] === null
+ ? null
+ : $this->titlePartToKey( $params['from'], $params['namespace'] );
+ $to = $params['to'] === null
+ ? null
+ : $this->titlePartToKey( $params['to'], $params['namespace'] );
+ $this->addWhereRange( 'ar_title', $dir, $from, $to );
+
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhere( 'ar_title' . $db->buildLike(
+ $this->titlePartToKey( $params['prefix'], $params['namespace'] ),
+ $db->anyString() ) );
+ }
+ }
+
+ if ( !is_null( $params['user'] ) ) {
+ // Don't query by user ID here, it might be able to use the ar_usertext_timestamp index.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'ar_user', User::newFromName( $params['user'], false ), false );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( $actorQuery['conds'] );
+ } elseif ( !is_null( $params['excludeuser'] ) ) {
+ // Here there's no chance of using ar_usertext_timestamp.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'ar_user', User::newFromName( $params['excludeuser'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( 'NOT(' . $actorQuery['conds'] . ')' );
+ }
+
+ if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+ // Paranoia: avoid brute force searches (T19342)
+ // (shouldn't be able to get here without 'deletedhistory', but
+ // check it again just in case)
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'ar_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $op = ( $dir == 'newer' ? '>' : '<' );
+ if ( $mode == 'all' || $mode == 'revs' ) {
+ $this->dieContinueUsageIf( count( $cont ) != 4 );
+ $ns = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
+ $ar_id = (int)$cont[3];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[3] );
+ $this->addWhere( "ar_namespace $op $ns OR " .
+ "(ar_namespace = $ns AND " .
+ "(ar_title $op $title OR " .
+ "(ar_title = $title AND " .
+ "(ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)))))" );
+ } else {
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $ts = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $ar_id = (int)$cont[1];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[1] );
+ $this->addWhere( "ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)" );
+ }
+ }
+
+ $this->addOption( 'LIMIT', $limit + 1 );
+ if ( $mode == 'all' ) {
+ if ( $params['unique'] ) {
+ // @todo Does this work on non-MySQL?
+ $this->addOption( 'GROUP BY', 'ar_title' );
+ } else {
+ $sort = ( $dir == 'newer' ? '' : ' DESC' );
+ $this->addOption( 'ORDER BY', [
+ 'ar_title' . $sort,
+ 'ar_timestamp' . $sort,
+ 'ar_id' . $sort,
+ ] );
+ }
+ } else {
+ if ( $mode == 'revs' ) {
+ // Sort by ns and title in the same order as timestamp for efficiency
+ $this->addWhereRange( 'ar_namespace', $dir, null, null );
+ $this->addWhereRange( 'ar_title', $dir, null, null );
+ }
+ $this->addTimestampWhereRange( 'ar_timestamp', $dir, $params['start'], $params['end'] );
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'ar_id', $dir, null, null );
+ }
+ $res = $this->select( __METHOD__ );
+ $pageMap = []; // Maps ns&title to (fake) pageid
+ $count = 0;
+ $newPageID = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $limit ) {
+ // We've had enough
+ if ( $mode == 'all' || $mode == 'revs' ) {
+ $this->setContinueEnumParameter( 'continue',
+ "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+ }
+ break;
+ }
+
+ $rev = [];
+ $anyHidden = false;
+
+ $rev['timestamp'] = wfTimestamp( TS_ISO_8601, $row->ar_timestamp );
+ if ( $fld_revid ) {
+ $rev['revid'] = intval( $row->ar_rev_id );
+ }
+ if ( $fld_parentid && !is_null( $row->ar_parent_id ) ) {
+ $rev['parentid'] = intval( $row->ar_parent_id );
+ }
+ if ( $fld_user || $fld_userid ) {
+ if ( $row->ar_deleted & Revision::DELETED_USER ) {
+ $rev['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_USER, $user ) ) {
+ if ( $fld_user ) {
+ $rev['user'] = $row->ar_user_text;
+ }
+ if ( $fld_userid ) {
+ $rev['userid'] = (int)$row->ar_user;
+ }
+ }
+ }
+
+ if ( $fld_comment || $fld_parsedcomment ) {
+ if ( $row->ar_deleted & Revision::DELETED_COMMENT ) {
+ $rev['commenthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_COMMENT, $user ) ) {
+ $comment = $commentStore->getComment( 'ar_comment', $row )->text;
+ if ( $fld_comment ) {
+ $rev['comment'] = $comment;
+ }
+ if ( $fld_parsedcomment ) {
+ $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ $rev['parsedcomment'] = Linker::formatComment( $comment, $title );
+ }
+ }
+ }
+
+ if ( $fld_minor ) {
+ $rev['minor'] = $row->ar_minor_edit == 1;
+ }
+ if ( $fld_len ) {
+ $rev['len'] = $row->ar_len;
+ }
+ if ( $fld_sha1 ) {
+ if ( $row->ar_deleted & Revision::DELETED_TEXT ) {
+ $rev['sha1hidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_TEXT, $user ) ) {
+ if ( $row->ar_sha1 != '' ) {
+ $rev['sha1'] = Wikimedia\base_convert( $row->ar_sha1, 36, 16, 40 );
+ } else {
+ $rev['sha1'] = '';
+ }
+ }
+ }
+ if ( $fld_content ) {
+ if ( $row->ar_deleted & Revision::DELETED_TEXT ) {
+ $rev['texthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_TEXT, $user ) ) {
+ ApiResult::setContentValue( $rev, 'text', Revision::getRevisionText( $row ) );
+ }
+ }
+
+ if ( $fld_tags ) {
+ if ( $row->ts_tags ) {
+ $tags = explode( ',', $row->ts_tags );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
+ $rev['tags'] = $tags;
+ } else {
+ $rev['tags'] = [];
+ }
+ }
+
+ if ( $anyHidden && ( $row->ar_deleted & Revision::DELETED_RESTRICTED ) ) {
+ $rev['suppressed'] = true;
+ }
+
+ if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+ $pageID = $newPageID++;
+ $pageMap[$row->ar_namespace][$row->ar_title] = $pageID;
+ $a['revisions'] = [ $rev ];
+ ApiResult::setIndexedTagName( $a['revisions'], 'rev' );
+ $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ ApiQueryBase::addTitleInfo( $a, $title );
+ if ( $fld_token ) {
+ $a['token'] = $token;
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], $pageID, $a );
+ } else {
+ $pageID = $pageMap[$row->ar_namespace][$row->ar_title];
+ $fit = $result->addValue(
+ [ 'query', $this->getModuleName(), $pageID, 'revisions' ],
+ null, $rev );
+ }
+ if ( !$fit ) {
+ if ( $mode == 'all' || $mode == 'revs' ) {
+ $this->setContinueEnumParameter( 'continue',
+ "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+ }
+ break;
+ }
+ }
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'page' );
+ }
+
+ public function isDeprecated() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 1, 2 ] ],
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 1, 2 ] ],
+ ],
+ 'dir' => [
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 1, 3 ] ],
+ ],
+ 'from' => [
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 3 ] ],
+ ],
+ 'to' => [
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 3 ] ],
+ ],
+ 'prefix' => [
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 3 ] ],
+ ],
+ 'unique' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 3 ] ],
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_DFLT => NS_MAIN,
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'modes', 3 ] ],
+ ],
+ 'tag' => null,
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'excludeuser' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'user|comment',
+ ApiBase::PARAM_TYPE => [
+ 'revid',
+ 'parentid',
+ 'user',
+ 'userid',
+ 'comment',
+ 'parsedcomment',
+ 'minor',
+ 'len',
+ 'sha1',
+ 'content',
+ 'token',
+ 'tags'
+ ],
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
+ 'drprop=user|comment|content'
+ => 'apihelp-query+deletedrevs-example-mode1',
+ 'action=query&list=deletedrevs&druser=Bob&drlimit=50'
+ => 'apihelp-query+deletedrevs-example-mode2',
+ 'action=query&list=deletedrevs&drdir=newer&drlimit=50'
+ => 'apihelp-query+deletedrevs-example-mode3-main',
+ 'action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
+ => 'apihelp-query+deletedrevs-example-mode3-talk',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Deletedrevs';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryDisabled.php b/www/wiki/includes/api/ApiQueryDisabled.php
new file mode 100644
index 00000000..86100077
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryDisabled.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that does nothing
+ *
+ * Use this to disable core modules with e.g.
+ * $wgAPIPropModules['modulename'] = 'ApiQueryDisabled';
+ *
+ * To disable top-level modules, use ApiDisabled instead
+ *
+ * @ingroup API
+ */
+class ApiQueryDisabled extends ApiQueryBase {
+
+ public function execute() {
+ $this->addWarning( [ 'apierror-moduledisabled', $this->getModuleName() ] );
+ }
+
+ public function getAllowedParams() {
+ return [];
+ }
+
+ public function getDescriptionMessage() {
+ return 'apihelp-query+disabled-summary';
+ }
+
+ public function getSummaryMessage() {
+ return 'apihelp-query+disabled-summary';
+ }
+
+ public function getExtendedDescription() {
+ return 'apihelp-query+disabled-extended-description';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryDuplicateFiles.php b/www/wiki/includes/api/ApiQueryDuplicateFiles.php
new file mode 100644
index 00000000..dfe3cf35
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryDuplicateFiles.php
@@ -0,0 +1,190 @@
+<?php
+/**
+ * Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to list duplicates of the given file(s)
+ *
+ * @ingroup API
+ */
+class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'df' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ private function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+ $namespaces = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
+ if ( empty( $namespaces[NS_FILE] ) ) {
+ return;
+ }
+ $images = $namespaces[NS_FILE];
+
+ if ( $params['dir'] == 'descending' ) {
+ $images = array_reverse( $images );
+ }
+
+ $skipUntilThisDup = false;
+ if ( isset( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $fromImage = $cont[0];
+ $skipUntilThisDup = $cont[1];
+ // Filter out any images before $fromImage
+ foreach ( $images as $image => $pageId ) {
+ if ( $image < $fromImage ) {
+ unset( $images[$image] );
+ } else {
+ break;
+ }
+ }
+ }
+
+ $filesToFind = array_keys( $images );
+ if ( $params['localonly'] ) {
+ $files = RepoGroup::singleton()->getLocalRepo()->findFiles( $filesToFind );
+ } else {
+ $files = RepoGroup::singleton()->findFiles( $filesToFind );
+ }
+
+ $fit = true;
+ $count = 0;
+ $titles = [];
+
+ $sha1s = [];
+ foreach ( $files as $file ) {
+ /** @var File $file */
+ $sha1s[$file->getName()] = $file->getSha1();
+ }
+
+ // find all files with the hashes, result format is:
+ // [ hash => [ dup1, dup2 ], hash1 => ... ]
+ $filesToFindBySha1s = array_unique( array_values( $sha1s ) );
+ if ( $params['localonly'] ) {
+ $filesBySha1s = RepoGroup::singleton()->getLocalRepo()->findBySha1s( $filesToFindBySha1s );
+ } else {
+ $filesBySha1s = RepoGroup::singleton()->findBySha1s( $filesToFindBySha1s );
+ }
+
+ // iterate over $images to handle continue param correct
+ foreach ( $images as $image => $pageId ) {
+ if ( !isset( $sha1s[$image] ) ) {
+ continue; // file does not exist
+ }
+ $sha1 = $sha1s[$image];
+ $dupFiles = $filesBySha1s[$sha1];
+ if ( $params['dir'] == 'descending' ) {
+ $dupFiles = array_reverse( $dupFiles );
+ }
+ /** @var File $dupFile */
+ foreach ( $dupFiles as $dupFile ) {
+ $dupName = $dupFile->getName();
+ if ( $image == $dupName && $dupFile->isLocal() ) {
+ continue; // ignore the local file itself
+ }
+ if ( $skipUntilThisDup !== false && $dupName < $skipUntilThisDup ) {
+ continue; // skip to pos after the image from continue param
+ }
+ $skipUntilThisDup = false;
+ if ( ++$count > $params['limit'] ) {
+ $fit = false; // break outer loop
+ // We're one over limit which shows that
+ // there are additional images to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $image . '|' . $dupName );
+ break;
+ }
+ if ( !is_null( $resultPageSet ) ) {
+ $titles[] = $dupFile->getTitle();
+ } else {
+ $r = [
+ 'name' => $dupName,
+ 'user' => $dupFile->getUser( 'text' ),
+ 'timestamp' => wfTimestamp( TS_ISO_8601, $dupFile->getTimestamp() ),
+ 'shared' => !$dupFile->isLocal(),
+ ];
+ $fit = $this->addPageSubItem( $pageId, $r );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $image . '|' . $dupName );
+ break;
+ }
+ }
+ }
+ if ( !$fit ) {
+ break;
+ }
+ }
+ if ( !is_null( $resultPageSet ) ) {
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ 'localonly' => false,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles'
+ => 'apihelp-query+duplicatefiles-example-simple',
+ 'action=query&generator=allimages&prop=duplicatefiles'
+ => 'apihelp-query+duplicatefiles-example-generated',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Duplicatefiles';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryExtLinksUsage.php b/www/wiki/includes/api/ApiQueryExtLinksUsage.php
new file mode 100644
index 00000000..fc5d8a04
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryExtLinksUsage.php
@@ -0,0 +1,231 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'eu' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ $query = $params['query'];
+ $protocol = self::getProtocolPrefix( $params['protocol'] );
+
+ $this->addTables( [ 'page', 'externallinks' ] ); // must be in this order for 'USE INDEX'
+ $this->addOption( 'USE INDEX', 'el_index' );
+ $this->addWhere( 'page_id=el_from' );
+
+ $miser_ns = [];
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $miser_ns = $params['namespace'] ?: [];
+ } else {
+ $this->addWhereFld( 'page_namespace', $params['namespace'] );
+ }
+
+ // Normalize query to match the normalization applied for the externallinks table
+ $query = Parser::normalizeLinkUrl( $query );
+
+ $whereQuery = $this->prepareUrlQuerySearchString( $query, $protocol );
+
+ if ( $whereQuery !== null ) {
+ $this->addWhere( $whereQuery );
+ }
+
+ $prop = array_flip( $params['prop'] );
+ $fld_ids = isset( $prop['ids'] );
+ $fld_title = isset( $prop['title'] );
+ $fld_url = isset( $prop['url'] );
+
+ if ( is_null( $resultPageSet ) ) {
+ $this->addFields( [
+ 'page_id',
+ 'page_namespace',
+ 'page_title'
+ ] );
+ $this->addFieldsIf( 'el_to', $fld_url );
+ } else {
+ $this->addFields( $resultPageSet->getPageTableFields() );
+ }
+
+ $limit = $params['limit'];
+ $offset = $params['offset'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+ if ( isset( $offset ) ) {
+ $this->addOption( 'OFFSET', $offset );
+ }
+
+ $res = $this->select( __METHOD__ );
+
+ $result = $this->getResult();
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'offset', $offset + $limit );
+ break;
+ }
+
+ if ( count( $miser_ns ) && !in_array( $row->page_namespace, $miser_ns ) ) {
+ continue;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $vals = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ if ( $fld_ids ) {
+ $vals['pageid'] = intval( $row->page_id );
+ }
+ if ( $fld_title ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+ if ( $fld_url ) {
+ $to = $row->el_to;
+ // expand protocol-relative urls
+ if ( $params['expandurl'] ) {
+ $to = wfExpandUrl( $to, PROTO_CANONICAL );
+ }
+ $vals['url'] = $to;
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
+ break;
+ }
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ],
+ $this->getModulePrefix() );
+ }
+ }
+
+ public function getAllowedParams() {
+ $ret = [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'ids|title|url',
+ ApiBase::PARAM_TYPE => [
+ 'ids',
+ 'title',
+ 'url'
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'offset' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'protocol' => [
+ ApiBase::PARAM_TYPE => self::prepareProtocols(),
+ ApiBase::PARAM_DFLT => '',
+ ],
+ 'query' => null,
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace'
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'expandurl' => false,
+ ];
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = [
+ 'api-help-param-limited-in-miser-mode',
+ ];
+ }
+
+ return $ret;
+ }
+
+ public static function prepareProtocols() {
+ global $wgUrlProtocols;
+ $protocols = [ '' ];
+ foreach ( $wgUrlProtocols as $p ) {
+ if ( $p !== '//' ) {
+ $protocols[] = substr( $p, 0, strpos( $p, ':' ) );
+ }
+ }
+
+ return $protocols;
+ }
+
+ public static function getProtocolPrefix( $protocol ) {
+ // Find the right prefix
+ global $wgUrlProtocols;
+ if ( $protocol && !in_array( $protocol, $wgUrlProtocols ) ) {
+ foreach ( $wgUrlProtocols as $p ) {
+ if ( substr( $p, 0, strlen( $protocol ) ) === $protocol ) {
+ $protocol = $p;
+ break;
+ }
+ }
+
+ return $protocol;
+ } else {
+ return null;
+ }
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=exturlusage&euquery=www.mediawiki.org'
+ => 'apihelp-query+exturlusage-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Exturlusage';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryExternalLinks.php b/www/wiki/includes/api/ApiQueryExternalLinks.php
new file mode 100644
index 00000000..fd196aab
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryExternalLinks.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to list all external URLs found on a given set of pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryExternalLinks extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'el' );
+ }
+
+ public function execute() {
+ if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
+ return;
+ }
+
+ $params = $this->extractRequestParams();
+
+ $query = $params['query'];
+ $protocol = ApiQueryExtLinksUsage::getProtocolPrefix( $params['protocol'] );
+
+ $this->addFields( [
+ 'el_from',
+ 'el_to'
+ ] );
+
+ $this->addTables( 'externallinks' );
+ $this->addWhereFld( 'el_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
+
+ $whereQuery = $this->prepareUrlQuerySearchString( $query, $protocol );
+
+ if ( $whereQuery !== null ) {
+ $this->addWhere( $whereQuery );
+ }
+
+ // Don't order by el_from if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) != 1 ) {
+ $this->addOption( 'ORDER BY', 'el_from' );
+ }
+
+ // If we're querying all protocols, use DISTINCT to avoid repeating protocol-relative links twice
+ if ( $protocol === null ) {
+ $this->addOption( 'DISTINCT' );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $offset = isset( $params['offset'] ) ? $params['offset'] : 0;
+ if ( $offset ) {
+ $this->addOption( 'OFFSET', $params['offset'] );
+ }
+
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'offset', $offset + $params['limit'] );
+ break;
+ }
+ $entry = [];
+ $to = $row->el_to;
+ // expand protocol-relative urls
+ if ( $params['expandurl'] ) {
+ $to = wfExpandUrl( $to, PROTO_CANONICAL );
+ }
+ ApiResult::setContentValue( $entry, 'url', $to );
+ $fit = $this->addPageSubItem( $row->el_from, $entry );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
+ break;
+ }
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'offset' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'protocol' => [
+ ApiBase::PARAM_TYPE => ApiQueryExtLinksUsage::prepareProtocols(),
+ ApiBase::PARAM_DFLT => '',
+ ],
+ 'query' => null,
+ 'expandurl' => false,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=extlinks&titles=Main%20Page'
+ => 'apihelp-query+extlinks-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Extlinks';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryFileRepoInfo.php b/www/wiki/includes/api/ApiQueryFileRepoInfo.php
new file mode 100644
index 00000000..45899911
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryFileRepoInfo.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Copyright © 2013 Mark Holmquist <mtraceur@member.fsf.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.22
+ */
+
+/**
+ * A query action to return meta information about the foreign file repos
+ * configured on the wiki.
+ *
+ * @ingroup API
+ */
+class ApiQueryFileRepoInfo extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'fri' );
+ }
+
+ protected function getInitialisedRepoGroup() {
+ $repoGroup = RepoGroup::singleton();
+ $repoGroup->initialiseRepos();
+
+ return $repoGroup;
+ }
+
+ public function execute() {
+ $conf = $this->getConfig();
+
+ $params = $this->extractRequestParams();
+ $props = array_flip( $params['prop'] );
+
+ $repos = [];
+
+ $repoGroup = $this->getInitialisedRepoGroup();
+ $foreignTargets = $conf->get( 'ForeignUploadTargets' );
+
+ $repoGroup->forEachForeignRepo( function ( $repo ) use ( &$repos, $props, $foreignTargets ) {
+ $repoProps = $repo->getInfo();
+ $repoProps['canUpload'] = in_array( $repoProps['name'], $foreignTargets );
+
+ $repos[] = array_intersect_key( $repoProps, $props );
+ } );
+
+ $localInfo = $repoGroup->getLocalRepo()->getInfo();
+ $localInfo['canUpload'] = $conf->get( 'EnableUploads' );
+ $repos[] = array_intersect_key( $localInfo, $props );
+
+ $result = $this->getResult();
+ ApiResult::setIndexedTagName( $repos, 'repo' );
+ ApiResult::setArrayTypeRecursive( $repos, 'assoc' );
+ ApiResult::setArrayType( $repos, 'array' );
+ $result->addValue( [ 'query' ], 'repos', $repos );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ $props = $this->getProps();
+
+ return [
+ 'prop' => [
+ ApiBase::PARAM_DFLT => implode( '|', $props ),
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => $props,
+ ],
+ ];
+ }
+
+ public function getProps() {
+ $props = [];
+ $repoGroup = $this->getInitialisedRepoGroup();
+
+ $repoGroup->forEachForeignRepo( function ( $repo ) use ( &$props ) {
+ $props = array_merge( $props, array_keys( $repo->getInfo() ) );
+ } );
+
+ $propValues = array_values( array_unique( array_merge(
+ $props,
+ array_keys( $repoGroup->getLocalRepo()->getInfo() )
+ ) ) );
+
+ $propValues[] = 'canUpload';
+
+ return $propValues;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&meta=filerepoinfo&friprop=apiurl|name|displayname'
+ => 'apihelp-query+filerepoinfo-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Filerepoinfo';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryFilearchive.php b/www/wiki/includes/api/ApiQueryFilearchive.php
new file mode 100644
index 00000000..ebffb151
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryFilearchive.php
@@ -0,0 +1,287 @@
+<?php
+/**
+ * API for MediaWiki 1.12+
+ *
+ * Copyright © 2010 Sam Reed
+ * Copyright © 2008 Vasiliev Victor vasilvv@gmail.com,
+ * based on ApiQueryAllPages.php
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all deleted files.
+ *
+ * @ingroup API
+ */
+class ApiQueryFilearchive extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'fa' );
+ }
+
+ public function execute() {
+ // Before doing anything at all, let's check permissions
+ $this->checkUserRightsAny( 'deletedhistory' );
+
+ $user = $this->getUser();
+ $db = $this->getDB();
+ $commentStore = CommentStore::getStore();
+
+ $params = $this->extractRequestParams();
+
+ $prop = array_flip( $params['prop'] );
+ $fld_sha1 = isset( $prop['sha1'] );
+ $fld_timestamp = isset( $prop['timestamp'] );
+ $fld_user = isset( $prop['user'] );
+ $fld_size = isset( $prop['size'] );
+ $fld_dimensions = isset( $prop['dimensions'] );
+ $fld_description = isset( $prop['description'] ) || isset( $prop['parseddescription'] );
+ $fld_mime = isset( $prop['mime'] );
+ $fld_mediatype = isset( $prop['mediatype'] );
+ $fld_metadata = isset( $prop['metadata'] );
+ $fld_bitdepth = isset( $prop['bitdepth'] );
+ $fld_archivename = isset( $prop['archivename'] );
+
+ $fileQuery = ArchivedFile::getQueryInfo();
+ $this->addTables( $fileQuery['tables'] );
+ $this->addFields( $fileQuery['fields'] );
+ $this->addJoinConds( $fileQuery['joins'] );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 3 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $cont_from = $db->addQuotes( $cont[0] );
+ $cont_timestamp = $db->addQuotes( $db->timestamp( $cont[1] ) );
+ $cont_id = (int)$cont[2];
+ $this->dieContinueUsageIf( $cont[2] !== (string)$cont_id );
+ $this->addWhere( "fa_name $op $cont_from OR " .
+ "(fa_name = $cont_from AND " .
+ "(fa_timestamp $op $cont_timestamp OR " .
+ "(fa_timestamp = $cont_timestamp AND " .
+ "fa_id $op= $cont_id )))"
+ );
+ }
+
+ // Image filters
+ $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
+ $from = ( $params['from'] === null ? null : $this->titlePartToKey( $params['from'], NS_FILE ) );
+ $to = ( $params['to'] === null ? null : $this->titlePartToKey( $params['to'], NS_FILE ) );
+ $this->addWhereRange( 'fa_name', $dir, $from, $to );
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhere( 'fa_name' . $db->buildLike(
+ $this->titlePartToKey( $params['prefix'], NS_FILE ),
+ $db->anyString() ) );
+ }
+
+ $sha1Set = isset( $params['sha1'] );
+ $sha1base36Set = isset( $params['sha1base36'] );
+ if ( $sha1Set || $sha1base36Set ) {
+ $sha1 = false;
+ if ( $sha1Set ) {
+ $sha1 = strtolower( $params['sha1'] );
+ if ( !$this->validateSha1Hash( $sha1 ) ) {
+ $this->dieWithError( 'apierror-invalidsha1hash' );
+ }
+ $sha1 = Wikimedia\base_convert( $sha1, 16, 36, 31 );
+ } elseif ( $sha1base36Set ) {
+ $sha1 = strtolower( $params['sha1base36'] );
+ if ( !$this->validateSha1Base36Hash( $sha1 ) ) {
+ $this->dieWithError( 'apierror-invalidsha1base36hash' );
+ }
+ }
+ if ( $sha1 ) {
+ $this->addWhereFld( 'fa_sha1', $sha1 );
+ }
+ }
+
+ // Exclude files this user can't view.
+ if ( !$user->isAllowed( 'deletedtext' ) ) {
+ $bitmask = File::DELETED_FILE;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = File::DELETED_FILE | File::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $this->getDB()->bitAnd( 'fa_deleted', $bitmask ) . " != $bitmask" );
+ }
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ $this->addOption( 'ORDER BY', [
+ 'fa_name' . $sort,
+ 'fa_timestamp' . $sort,
+ 'fa_id' . $sort,
+ ] );
+
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter(
+ 'continue', "$row->fa_name|$row->fa_timestamp|$row->fa_id"
+ );
+ break;
+ }
+
+ $file = [];
+ $file['id'] = (int)$row->fa_id;
+ $file['name'] = $row->fa_name;
+ $title = Title::makeTitle( NS_FILE, $row->fa_name );
+ self::addTitleInfo( $file, $title );
+
+ if ( $fld_description &&
+ Revision::userCanBitfield( $row->fa_deleted, File::DELETED_COMMENT, $user )
+ ) {
+ $file['description'] = $commentStore->getComment( 'fa_description', $row )->text;
+ if ( isset( $prop['parseddescription'] ) ) {
+ $file['parseddescription'] = Linker::formatComment(
+ $file['description'], $title );
+ }
+ }
+ if ( $fld_user &&
+ Revision::userCanBitfield( $row->fa_deleted, File::DELETED_USER, $user )
+ ) {
+ $file['userid'] = (int)$row->fa_user;
+ $file['user'] = $row->fa_user_text;
+ }
+ if ( $fld_sha1 ) {
+ $file['sha1'] = Wikimedia\base_convert( $row->fa_sha1, 36, 16, 40 );
+ }
+ if ( $fld_timestamp ) {
+ $file['timestamp'] = wfTimestamp( TS_ISO_8601, $row->fa_timestamp );
+ }
+ if ( $fld_size || $fld_dimensions ) {
+ $file['size'] = $row->fa_size;
+
+ $pageCount = ArchivedFile::newFromRow( $row )->pageCount();
+ if ( $pageCount !== false ) {
+ $file['pagecount'] = $pageCount;
+ }
+
+ $file['height'] = $row->fa_height;
+ $file['width'] = $row->fa_width;
+ }
+ if ( $fld_mediatype ) {
+ $file['mediatype'] = $row->fa_media_type;
+ }
+ if ( $fld_metadata ) {
+ $file['metadata'] = $row->fa_metadata
+ ? ApiQueryImageInfo::processMetaData( unserialize( $row->fa_metadata ), $result )
+ : null;
+ }
+ if ( $fld_bitdepth ) {
+ $file['bitdepth'] = $row->fa_bits;
+ }
+ if ( $fld_mime ) {
+ $file['mime'] = "$row->fa_major_mime/$row->fa_minor_mime";
+ }
+ if ( $fld_archivename && !is_null( $row->fa_archive_name ) ) {
+ $file['archivename'] = $row->fa_archive_name;
+ }
+
+ if ( $row->fa_deleted & File::DELETED_FILE ) {
+ $file['filehidden'] = true;
+ }
+ if ( $row->fa_deleted & File::DELETED_COMMENT ) {
+ $file['commenthidden'] = true;
+ }
+ if ( $row->fa_deleted & File::DELETED_USER ) {
+ $file['userhidden'] = true;
+ }
+ if ( $row->fa_deleted & File::DELETED_RESTRICTED ) {
+ // This file is deleted for normal admins
+ $file['suppressed'] = true;
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $file );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter(
+ 'continue', "$row->fa_name|$row->fa_timestamp|$row->fa_id"
+ );
+ break;
+ }
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'fa' );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'from' => null,
+ 'to' => null,
+ 'prefix' => null,
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ 'sha1' => null,
+ 'sha1base36' => null,
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'timestamp',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'sha1',
+ 'timestamp',
+ 'user',
+ 'size',
+ 'dimensions',
+ 'description',
+ 'parseddescription',
+ 'mime',
+ 'mediatype',
+ 'metadata',
+ 'bitdepth',
+ 'archivename',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=filearchive'
+ => 'apihelp-query+filearchive-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Filearchive';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryGeneratorBase.php b/www/wiki/includes/api/ApiQueryGeneratorBase.php
new file mode 100644
index 00000000..a7df33a1
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryGeneratorBase.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+abstract class ApiQueryGeneratorBase extends ApiQueryBase {
+
+ private $mGeneratorPageSet = null;
+
+ /**
+ * Switch this module to generator mode. By default, generator mode is
+ * switched off and the module acts like a normal query module.
+ * @since 1.21 requires pageset parameter
+ * @param ApiPageSet $generatorPageSet ApiPageSet object that the module will get
+ * by calling getPageSet() when in generator mode.
+ */
+ public function setGeneratorMode( ApiPageSet $generatorPageSet ) {
+ if ( $generatorPageSet === null ) {
+ ApiBase::dieDebug( __METHOD__, 'Required parameter missing - $generatorPageSet' );
+ }
+ $this->mGeneratorPageSet = $generatorPageSet;
+ }
+
+ /**
+ * Indicate whether the module is in generator mode
+ * @since 1.28
+ * @return bool
+ */
+ public function isInGeneratorMode() {
+ return $this->mGeneratorPageSet !== null;
+ }
+
+ /**
+ * Get the PageSet object to work on.
+ * If this module is generator, the pageSet object is different from other module's
+ * @return ApiPageSet
+ */
+ protected function getPageSet() {
+ if ( $this->mGeneratorPageSet !== null ) {
+ return $this->mGeneratorPageSet;
+ }
+
+ return parent::getPageSet();
+ }
+
+ /**
+ * Overrides ApiBase to prepend 'g' to every generator parameter
+ * @param string $paramName Parameter name
+ * @return string Prefixed parameter name
+ */
+ public function encodeParamName( $paramName ) {
+ if ( $this->mGeneratorPageSet !== null ) {
+ return 'g' . parent::encodeParamName( $paramName );
+ } else {
+ return parent::encodeParamName( $paramName );
+ }
+ }
+
+ /**
+ * Overridden to set the generator param if in generator mode
+ * @param string $paramName Parameter name
+ * @param string|array $paramValue Parameter value
+ */
+ protected function setContinueEnumParameter( $paramName, $paramValue ) {
+ if ( $this->mGeneratorPageSet !== null ) {
+ $this->getContinuationManager()->addGeneratorContinueParam( $this, $paramName, $paramValue );
+ } else {
+ parent::setContinueEnumParameter( $paramName, $paramValue );
+ }
+ }
+
+ /** @inheritDoc */
+ protected function getHelpFlags() {
+ // Corresponding messages: api-help-flag-generator
+ $flags = parent::getHelpFlags();
+ $flags[] = 'generator';
+ return $flags;
+ }
+
+ /**
+ * Execute this module as a generator
+ * @param ApiPageSet $resultPageSet All output should be appended to this object
+ */
+ abstract public function executeGenerator( $resultPageSet );
+}
diff --git a/www/wiki/includes/api/ApiQueryIWBacklinks.php b/www/wiki/includes/api/ApiQueryIWBacklinks.php
new file mode 100644
index 00000000..83801c73
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryIWBacklinks.php
@@ -0,0 +1,218 @@
+<?php
+/**
+ * API for MediaWiki 1.17+
+ *
+ * Copyright © 2010 Sam Reed
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This gives links pointing to the given interwiki
+ * @ingroup API
+ */
+class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'iwbl' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ public function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ if ( isset( $params['title'] ) && !isset( $params['prefix'] ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-mustusewith',
+ $this->encodeParamName( 'title' ),
+ $this->encodeParamName( 'prefix' ),
+ ],
+ 'invalidparammix'
+ );
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 3 );
+
+ $db = $this->getDB();
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $prefix = $db->addQuotes( $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $from = intval( $cont[2] );
+ $this->addWhere(
+ "iwl_prefix $op $prefix OR " .
+ "(iwl_prefix = $prefix AND " .
+ "(iwl_title $op $title OR " .
+ "(iwl_title = $title AND " .
+ "iwl_from $op= $from)))"
+ );
+ }
+
+ $prop = array_flip( $params['prop'] );
+ $iwprefix = isset( $prop['iwprefix'] );
+ $iwtitle = isset( $prop['iwtitle'] );
+
+ $this->addTables( [ 'iwlinks', 'page' ] );
+ $this->addWhere( 'iwl_from = page_id' );
+
+ $this->addFields( [ 'page_id', 'page_title', 'page_namespace', 'page_is_redirect',
+ 'iwl_from', 'iwl_prefix', 'iwl_title' ] );
+
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhereFld( 'iwl_prefix', $params['prefix'] );
+ if ( isset( $params['title'] ) ) {
+ $this->addWhereFld( 'iwl_title', $params['title'] );
+ $this->addOption( 'ORDER BY', 'iwl_from' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'iwl_title' . $sort,
+ 'iwl_from' . $sort
+ ] );
+ }
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'iwl_prefix' . $sort,
+ 'iwl_title' . $sort,
+ 'iwl_from' . $sort
+ ] );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+ $res = $this->select( __METHOD__ );
+
+ $pages = [];
+
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // Continue string preserved in case the redirect query doesn't
+ // pass the limit
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}"
+ );
+ break;
+ }
+
+ if ( !is_null( $resultPageSet ) ) {
+ $pages[] = Title::newFromRow( $row );
+ } else {
+ $entry = [ 'pageid' => (int)$row->page_id ];
+
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ ApiQueryBase::addTitleInfo( $entry, $title );
+
+ if ( $row->page_is_redirect ) {
+ $entry['redirect'] = true;
+ }
+
+ if ( $iwprefix ) {
+ $entry['iwprefix'] = $row->iwl_prefix;
+ }
+
+ if ( $iwtitle ) {
+ $entry['iwtitle'] = $row->iwl_title;
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $entry );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}"
+ );
+ break;
+ }
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'iw' );
+ } else {
+ $resultPageSet->populateFromTitles( $pages );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prefix' => null,
+ 'title' => null,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_TYPE => [
+ 'iwprefix',
+ 'iwtitle',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks'
+ => 'apihelp-query+iwbacklinks-example-simple',
+ 'action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+ => 'apihelp-query+iwbacklinks-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Iwbacklinks';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryIWLinks.php b/www/wiki/includes/api/ApiQueryIWLinks.php
new file mode 100644
index 00000000..08c8abf1
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryIWLinks.php
@@ -0,0 +1,197 @@
+<?php
+/**
+ * API for MediaWiki 1.17+
+ *
+ * Copyright © 2010 Sam Reed
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to list all interwiki links on a page
+ *
+ * @ingroup API
+ */
+class ApiQueryIWLinks extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'iw' );
+ }
+
+ public function execute() {
+ if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
+ return;
+ }
+
+ $params = $this->extractRequestParams();
+ $prop = array_flip( (array)$params['prop'] );
+
+ if ( isset( $params['title'] ) && !isset( $params['prefix'] ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-mustusewith',
+ $this->encodeParamName( 'title' ),
+ $this->encodeParamName( 'prefix' ),
+ ],
+ 'invalidparammix'
+ );
+ }
+
+ // Handle deprecated param
+ $this->requireMaxOneParameter( $params, 'url', 'prop' );
+ if ( $params['url'] ) {
+ $prop = [ 'url' => 1 ];
+ }
+
+ $this->addFields( [
+ 'iwl_from',
+ 'iwl_prefix',
+ 'iwl_title'
+ ] );
+
+ $this->addTables( 'iwlinks' );
+ $this->addWhereFld( 'iwl_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 3 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $db = $this->getDB();
+ $iwlfrom = intval( $cont[0] );
+ $iwlprefix = $db->addQuotes( $cont[1] );
+ $iwltitle = $db->addQuotes( $cont[2] );
+ $this->addWhere(
+ "iwl_from $op $iwlfrom OR " .
+ "(iwl_from = $iwlfrom AND " .
+ "(iwl_prefix $op $iwlprefix OR " .
+ "(iwl_prefix = $iwlprefix AND " .
+ "iwl_title $op= $iwltitle)))"
+ );
+ }
+
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhereFld( 'iwl_prefix', $params['prefix'] );
+ if ( isset( $params['title'] ) ) {
+ $this->addWhereFld( 'iwl_title', $params['title'] );
+ $this->addOption( 'ORDER BY', 'iwl_from' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'iwl_from' . $sort,
+ 'iwl_title' . $sort
+ ] );
+ }
+ } else {
+ // Don't order by iwl_from if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
+ $this->addOption( 'ORDER BY', 'iwl_prefix' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'iwl_from' . $sort,
+ 'iwl_prefix' . $sort,
+ 'iwl_title' . $sort
+ ] );
+ }
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}"
+ );
+ break;
+ }
+ $entry = [ 'prefix' => $row->iwl_prefix ];
+
+ if ( isset( $prop['url'] ) ) {
+ $title = Title::newFromText( "{$row->iwl_prefix}:{$row->iwl_title}" );
+ if ( $title ) {
+ $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
+ }
+ }
+
+ ApiResult::setContentValue( $entry, 'title', $row->iwl_title );
+ $fit = $this->addPageSubItem( $row->iwl_from, $entry );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}"
+ );
+ break;
+ }
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'url',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'prefix' => null,
+ 'title' => null,
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'url' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=iwlinks&titles=Main%20Page'
+ => 'apihelp-query+iwlinks-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Iwlinks';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryImageInfo.php b/www/wiki/includes/api/ApiQueryImageInfo.php
new file mode 100644
index 00000000..e447f4f4
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryImageInfo.php
@@ -0,0 +1,826 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query action to get image information and upload history.
+ *
+ * @ingroup API
+ */
+class ApiQueryImageInfo extends ApiQueryBase {
+ const TRANSFORM_LIMIT = 50;
+ private static $transformCount = 0;
+
+ public function __construct( ApiQuery $query, $moduleName, $prefix = 'ii' ) {
+ // We allow a subclass to override the prefix, to create a related API
+ // module. Some other parts of MediaWiki construct this with a null
+ // $prefix, which used to be ignored when this only took two arguments
+ if ( is_null( $prefix ) ) {
+ $prefix = 'ii';
+ }
+ parent::__construct( $query, $moduleName, $prefix );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $prop = array_flip( $params['prop'] );
+
+ $scale = $this->getScale( $params );
+
+ $opts = [
+ 'version' => $params['metadataversion'],
+ 'language' => $params['extmetadatalanguage'],
+ 'multilang' => $params['extmetadatamultilang'],
+ 'extmetadatafilter' => $params['extmetadatafilter'],
+ 'revdelUser' => $this->getUser(),
+ ];
+
+ if ( isset( $params['badfilecontexttitle'] ) ) {
+ $badFileContextTitle = Title::newFromText( $params['badfilecontexttitle'] );
+ if ( !$badFileContextTitle ) {
+ $this->dieUsage( 'Invalid title in badfilecontexttitle parameter', 'invalid-title' );
+ }
+ } else {
+ $badFileContextTitle = false;
+ }
+
+ $pageIds = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
+ if ( !empty( $pageIds[NS_FILE] ) ) {
+ $titles = array_keys( $pageIds[NS_FILE] );
+ asort( $titles ); // Ensure the order is always the same
+
+ $fromTitle = null;
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $fromTitle = strval( $cont[0] );
+ $fromTimestamp = $cont[1];
+ // Filter out any titles before $fromTitle
+ foreach ( $titles as $key => $title ) {
+ if ( $title < $fromTitle ) {
+ unset( $titles[$key] );
+ } else {
+ break;
+ }
+ }
+ }
+
+ $user = $this->getUser();
+ $findTitles = array_map( function ( $title ) use ( $user ) {
+ return [
+ 'title' => $title,
+ 'private' => $user,
+ ];
+ }, $titles );
+
+ if ( $params['localonly'] ) {
+ $images = RepoGroup::singleton()->getLocalRepo()->findFiles( $findTitles );
+ } else {
+ $images = RepoGroup::singleton()->findFiles( $findTitles );
+ }
+
+ $result = $this->getResult();
+ foreach ( $titles as $title ) {
+ $info = [];
+ $pageId = $pageIds[NS_FILE][$title];
+ $start = $title === $fromTitle ? $fromTimestamp : $params['start'];
+
+ if ( !isset( $images[$title] ) ) {
+ if ( isset( $prop['uploadwarning'] ) || isset( $prop['badfile'] ) ) {
+ // uploadwarning and badfile need info about non-existing files
+ $images[$title] = wfLocalFile( $title );
+ // Doesn't exist, so set an empty image repository
+ $info['imagerepository'] = '';
+ } else {
+ $result->addValue(
+ [ 'query', 'pages', intval( $pageId ) ],
+ 'imagerepository', ''
+ );
+ // The above can't fail because it doesn't increase the result size
+ continue;
+ }
+ }
+
+ /** @var File $img */
+ $img = $images[$title];
+
+ if ( self::getTransformCount() >= self::TRANSFORM_LIMIT ) {
+ if ( count( $pageIds[NS_FILE] ) == 1 ) {
+ // See the 'the user is screwed' comment below
+ $this->setContinueEnumParameter( 'start',
+ $start !== null ? $start : wfTimestamp( TS_ISO_8601, $img->getTimestamp() )
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue',
+ $this->getContinueStr( $img, $start ) );
+ }
+ break;
+ }
+
+ if ( !isset( $info['imagerepository'] ) ) {
+ $info['imagerepository'] = $img->getRepoName();
+ }
+ if ( isset( $prop['badfile'] ) ) {
+ $info['badfile'] = (bool)wfIsBadImage( $title, $badFileContextTitle );
+ }
+
+ $fit = $result->addValue( [ 'query', 'pages' ], intval( $pageId ), $info );
+ if ( !$fit ) {
+ if ( count( $pageIds[NS_FILE] ) == 1 ) {
+ // The user is screwed. imageinfo can't be solely
+ // responsible for exceeding the limit in this case,
+ // so set a query-continue that just returns the same
+ // thing again. When the violating queries have been
+ // out-continued, the result will get through
+ $this->setContinueEnumParameter( 'start',
+ $start !== null ? $start : wfTimestamp( TS_ISO_8601, $img->getTimestamp() )
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue',
+ $this->getContinueStr( $img, $start ) );
+ }
+ break;
+ }
+
+ // Check if we can make the requested thumbnail, and get transform parameters.
+ $finalThumbParams = $this->mergeThumbParams( $img, $scale, $params['urlparam'] );
+
+ // Get information about the current version first
+ // Check that the current version is within the start-end boundaries
+ $gotOne = false;
+ if (
+ ( is_null( $start ) || $img->getTimestamp() <= $start ) &&
+ ( is_null( $params['end'] ) || $img->getTimestamp() >= $params['end'] )
+ ) {
+ $gotOne = true;
+
+ $fit = $this->addPageSubItem( $pageId,
+ static::getInfo( $img, $prop, $result,
+ $finalThumbParams, $opts
+ )
+ );
+ if ( !$fit ) {
+ if ( count( $pageIds[NS_FILE] ) == 1 ) {
+ // See the 'the user is screwed' comment above
+ $this->setContinueEnumParameter( 'start',
+ wfTimestamp( TS_ISO_8601, $img->getTimestamp() ) );
+ } else {
+ $this->setContinueEnumParameter( 'continue',
+ $this->getContinueStr( $img ) );
+ }
+ break;
+ }
+ }
+
+ // Now get the old revisions
+ // Get one more to facilitate query-continue functionality
+ $count = ( $gotOne ? 1 : 0 );
+ $oldies = $img->getHistory( $params['limit'] - $count + 1, $start, $params['end'] );
+ /** @var File $oldie */
+ foreach ( $oldies as $oldie ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the extra one which shows that there are
+ // additional pages to be had. Stop here...
+ // Only set a query-continue if there was only one title
+ if ( count( $pageIds[NS_FILE] ) == 1 ) {
+ $this->setContinueEnumParameter( 'start',
+ wfTimestamp( TS_ISO_8601, $oldie->getTimestamp() ) );
+ }
+ break;
+ }
+ $fit = self::getTransformCount() < self::TRANSFORM_LIMIT &&
+ $this->addPageSubItem( $pageId,
+ static::getInfo( $oldie, $prop, $result,
+ $finalThumbParams, $opts
+ )
+ );
+ if ( !$fit ) {
+ if ( count( $pageIds[NS_FILE] ) == 1 ) {
+ $this->setContinueEnumParameter( 'start',
+ wfTimestamp( TS_ISO_8601, $oldie->getTimestamp() ) );
+ } else {
+ $this->setContinueEnumParameter( 'continue',
+ $this->getContinueStr( $oldie ) );
+ }
+ break;
+ }
+ }
+ if ( !$fit ) {
+ break;
+ }
+ }
+ }
+ }
+
+ /**
+ * From parameters, construct a 'scale' array
+ * @param array $params Parameters passed to api.
+ * @return array|null Key-val array of 'width' and 'height', or null
+ */
+ public function getScale( $params ) {
+ if ( $params['urlwidth'] != -1 ) {
+ $scale = [];
+ $scale['width'] = $params['urlwidth'];
+ $scale['height'] = $params['urlheight'];
+ } elseif ( $params['urlheight'] != -1 ) {
+ // Height is specified but width isn't
+ // Don't set $scale['width']; this signals mergeThumbParams() to fill it with the image's width
+ $scale = [];
+ $scale['height'] = $params['urlheight'];
+ } else {
+ if ( $params['urlparam'] ) {
+ // Audio files might not have a width/height.
+ $scale = [];
+ } else {
+ $scale = null;
+ }
+ }
+
+ return $scale;
+ }
+
+ /** Validate and merge scale parameters with handler thumb parameters, give error if invalid.
+ *
+ * We do this later than getScale, since we need the image
+ * to know which handler, since handlers can make their own parameters.
+ * @param File $image Image that params are for.
+ * @param array $thumbParams Thumbnail parameters from getScale
+ * @param string $otherParams String of otherParams (iiurlparam).
+ * @return array Array of parameters for transform.
+ */
+ protected function mergeThumbParams( $image, $thumbParams, $otherParams ) {
+ if ( $thumbParams === null ) {
+ // No scaling requested
+ return null;
+ }
+ if ( !isset( $thumbParams['width'] ) && isset( $thumbParams['height'] ) ) {
+ // We want to limit only by height in this situation, so pass the
+ // image's full width as the limiting width. But some file types
+ // don't have a width of their own, so pick something arbitrary so
+ // thumbnailing the default icon works.
+ if ( $image->getWidth() <= 0 ) {
+ $thumbParams['width'] = max( $this->getConfig()->get( 'ThumbLimits' ) );
+ } else {
+ $thumbParams['width'] = $image->getWidth();
+ }
+ }
+
+ if ( !$otherParams ) {
+ $this->checkParameterNormalise( $image, $thumbParams );
+ return $thumbParams;
+ }
+ $p = $this->getModulePrefix();
+
+ $h = $image->getHandler();
+ if ( !$h ) {
+ $this->addWarning( [ 'apiwarn-nothumb-noimagehandler', wfEscapeWikiText( $image->getName() ) ] );
+
+ return $thumbParams;
+ }
+
+ $paramList = $h->parseParamString( $otherParams );
+ if ( !$paramList ) {
+ // Just set a warning (instead of dieUsage), as in many cases
+ // we could still render the image using width and height parameters,
+ // and this type of thing could happen between different versions of
+ // handlers.
+ $this->addWarning( [ 'apiwarn-badurlparam', $p, wfEscapeWikiText( $image->getName() ) ] );
+ $this->checkParameterNormalise( $image, $thumbParams );
+ return $thumbParams;
+ }
+
+ if ( isset( $paramList['width'] ) && isset( $thumbParams['width'] ) ) {
+ if ( intval( $paramList['width'] ) != intval( $thumbParams['width'] ) ) {
+ $this->addWarning(
+ [ 'apiwarn-urlparamwidth', $p, $paramList['width'], $thumbParams['width'] ]
+ );
+ }
+ }
+
+ foreach ( $paramList as $name => $value ) {
+ if ( !$h->validateParam( $name, $value ) ) {
+ $this->dieWithError(
+ [ 'apierror-invalidurlparam', $p, wfEscapeWikiText( $name ), wfEscapeWikiText( $value ) ]
+ );
+ }
+ }
+
+ $finalParams = $thumbParams + $paramList;
+ $this->checkParameterNormalise( $image, $finalParams );
+ return $finalParams;
+ }
+
+ /**
+ * Verify that the final image parameters can be normalised.
+ *
+ * This doesn't use the normalised parameters, since $file->transform
+ * expects the pre-normalised parameters, but doing the normalisation
+ * allows us to catch certain error conditions early (such as missing
+ * required parameter).
+ *
+ * @param File $image
+ * @param array $finalParams List of parameters to transform image with
+ */
+ protected function checkParameterNormalise( $image, $finalParams ) {
+ $h = $image->getHandler();
+ if ( !$h ) {
+ return;
+ }
+ // Note: normaliseParams modifies the array in place, but we aren't interested
+ // in the actual normalised version, only if we can actually normalise them,
+ // so we use the functions scope to throw away the normalisations.
+ if ( !$h->normaliseParams( $image, $finalParams ) ) {
+ $this->dieWithError( [ 'apierror-urlparamnormal', wfEscapeWikiText( $image->getName() ) ] );
+ }
+ }
+
+ /**
+ * Get result information for an image revision
+ *
+ * @param File $file
+ * @param array $prop Array of properties to get (in the keys)
+ * @param ApiResult $result
+ * @param array $thumbParams Containing 'width' and 'height' items, or null
+ * @param array|bool|string $opts Options for data fetching.
+ * This is an array consisting of the keys:
+ * 'version': The metadata version for the metadata option
+ * 'language': The language for extmetadata property
+ * 'multilang': Return all translations in extmetadata property
+ * 'revdelUser': User to use when checking whether to show revision-deleted fields.
+ * @return array Result array
+ */
+ public static function getInfo( $file, $prop, $result, $thumbParams = null, $opts = false ) {
+ global $wgContLang;
+
+ $anyHidden = false;
+
+ if ( !$opts || is_string( $opts ) ) {
+ $opts = [
+ 'version' => $opts ?: 'latest',
+ 'language' => $wgContLang,
+ 'multilang' => false,
+ 'extmetadatafilter' => [],
+ 'revdelUser' => null,
+ ];
+ }
+ $version = $opts['version'];
+ $vals = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ // Timestamp is shown even if the file is revdelete'd in interface
+ // so do same here.
+ if ( isset( $prop['timestamp'] ) ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $file->getTimestamp() );
+ }
+
+ // Handle external callers who don't pass revdelUser
+ if ( isset( $opts['revdelUser'] ) && $opts['revdelUser'] ) {
+ $revdelUser = $opts['revdelUser'];
+ $canShowField = function ( $field ) use ( $file, $revdelUser ) {
+ return $file->userCan( $field, $revdelUser );
+ };
+ } else {
+ $canShowField = function ( $field ) use ( $file ) {
+ return !$file->isDeleted( $field );
+ };
+ }
+
+ $user = isset( $prop['user'] );
+ $userid = isset( $prop['userid'] );
+
+ if ( $user || $userid ) {
+ if ( $file->isDeleted( File::DELETED_USER ) ) {
+ $vals['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $canShowField( File::DELETED_USER ) ) {
+ if ( $user ) {
+ $vals['user'] = $file->getUser();
+ }
+ if ( $userid ) {
+ $vals['userid'] = $file->getUser( 'id' );
+ }
+ if ( !$file->getUser( 'id' ) ) {
+ $vals['anon'] = true;
+ }
+ }
+ }
+
+ // This is shown even if the file is revdelete'd in interface
+ // so do same here.
+ if ( isset( $prop['size'] ) || isset( $prop['dimensions'] ) ) {
+ $vals['size'] = intval( $file->getSize() );
+ $vals['width'] = intval( $file->getWidth() );
+ $vals['height'] = intval( $file->getHeight() );
+
+ $pageCount = $file->pageCount();
+ if ( $pageCount !== false ) {
+ $vals['pagecount'] = $pageCount;
+ }
+
+ // length as in how many seconds long a video is.
+ $length = $file->getLength();
+ if ( $length ) {
+ // Call it duration, because "length" can be ambiguous.
+ $vals['duration'] = (float)$length;
+ }
+ }
+
+ $pcomment = isset( $prop['parsedcomment'] );
+ $comment = isset( $prop['comment'] );
+
+ if ( $pcomment || $comment ) {
+ if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
+ $vals['commenthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $canShowField( File::DELETED_COMMENT ) ) {
+ if ( $pcomment ) {
+ $vals['parsedcomment'] = Linker::formatComment(
+ $file->getDescription( File::RAW ), $file->getTitle() );
+ }
+ if ( $comment ) {
+ $vals['comment'] = $file->getDescription( File::RAW );
+ }
+ }
+ }
+
+ $canonicaltitle = isset( $prop['canonicaltitle'] );
+ $url = isset( $prop['url'] );
+ $sha1 = isset( $prop['sha1'] );
+ $meta = isset( $prop['metadata'] );
+ $extmetadata = isset( $prop['extmetadata'] );
+ $commonmeta = isset( $prop['commonmetadata'] );
+ $mime = isset( $prop['mime'] );
+ $mediatype = isset( $prop['mediatype'] );
+ $archive = isset( $prop['archivename'] );
+ $bitdepth = isset( $prop['bitdepth'] );
+ $uploadwarning = isset( $prop['uploadwarning'] );
+
+ if ( $uploadwarning ) {
+ $vals['html'] = SpecialUpload::getExistsWarning( UploadBase::getExistsWarning( $file ) );
+ }
+
+ if ( $file->isDeleted( File::DELETED_FILE ) ) {
+ $vals['filehidden'] = true;
+ $anyHidden = true;
+ }
+
+ if ( $anyHidden && $file->isDeleted( File::DELETED_RESTRICTED ) ) {
+ $vals['suppressed'] = true;
+ }
+
+ if ( !$canShowField( File::DELETED_FILE ) ) {
+ // Early return, tidier than indenting all following things one level
+ return $vals;
+ }
+
+ if ( $canonicaltitle ) {
+ $vals['canonicaltitle'] = $file->getTitle()->getPrefixedText();
+ }
+
+ if ( $url ) {
+ if ( $file->exists() ) {
+ if ( !is_null( $thumbParams ) ) {
+ $mto = $file->transform( $thumbParams );
+ self::$transformCount++;
+ if ( $mto && !$mto->isError() ) {
+ $vals['thumburl'] = wfExpandUrl( $mto->getUrl(), PROTO_CURRENT );
+
+ // T25834 - If the URLs are the same, we haven't resized it, so shouldn't give the wanted
+ // thumbnail sizes for the thumbnail actual size
+ if ( $mto->getUrl() !== $file->getUrl() ) {
+ $vals['thumbwidth'] = intval( $mto->getWidth() );
+ $vals['thumbheight'] = intval( $mto->getHeight() );
+ } else {
+ $vals['thumbwidth'] = intval( $file->getWidth() );
+ $vals['thumbheight'] = intval( $file->getHeight() );
+ }
+
+ if ( isset( $prop['thumbmime'] ) && $file->getHandler() ) {
+ list( , $mime ) = $file->getHandler()->getThumbType(
+ $mto->getExtension(), $file->getMimeType(), $thumbParams );
+ $vals['thumbmime'] = $mime;
+ }
+ } elseif ( $mto && $mto->isError() ) {
+ $vals['thumberror'] = $mto->toText();
+ }
+ }
+ $vals['url'] = wfExpandUrl( $file->getFullUrl(), PROTO_CURRENT );
+ } else {
+ $vals['filemissing'] = true;
+ }
+ $vals['descriptionurl'] = wfExpandUrl( $file->getDescriptionUrl(), PROTO_CURRENT );
+
+ $shortDescriptionUrl = $file->getDescriptionShortUrl();
+ if ( $shortDescriptionUrl !== null ) {
+ $vals['descriptionshorturl'] = wfExpandUrl( $shortDescriptionUrl, PROTO_CURRENT );
+ }
+ }
+
+ if ( $sha1 ) {
+ $vals['sha1'] = Wikimedia\base_convert( $file->getSha1(), 36, 16, 40 );
+ }
+
+ if ( $meta ) {
+ Wikimedia\suppressWarnings();
+ $metadata = unserialize( $file->getMetadata() );
+ Wikimedia\restoreWarnings();
+ if ( $metadata && $version !== 'latest' ) {
+ $metadata = $file->convertMetadataVersion( $metadata, $version );
+ }
+ $vals['metadata'] = $metadata ? static::processMetaData( $metadata, $result ) : null;
+ }
+ if ( $commonmeta ) {
+ $metaArray = $file->getCommonMetaArray();
+ $vals['commonmetadata'] = $metaArray ? static::processMetaData( $metaArray, $result ) : [];
+ }
+
+ if ( $extmetadata ) {
+ // Note, this should return an array where all the keys
+ // start with a letter, and all the values are strings.
+ // Thus there should be no issue with format=xml.
+ $format = new FormatMetadata;
+ $format->setSingleLanguage( !$opts['multilang'] );
+ $format->getContext()->setLanguage( $opts['language'] );
+ $extmetaArray = $format->fetchExtendedMetadata( $file );
+ if ( $opts['extmetadatafilter'] ) {
+ $extmetaArray = array_intersect_key(
+ $extmetaArray, array_flip( $opts['extmetadatafilter'] )
+ );
+ }
+ $vals['extmetadata'] = $extmetaArray;
+ }
+
+ if ( $mime ) {
+ $vals['mime'] = $file->getMimeType();
+ }
+
+ if ( $mediatype ) {
+ $vals['mediatype'] = $file->getMediaType();
+ }
+
+ if ( $archive && $file->isOld() ) {
+ $vals['archivename'] = $file->getArchiveName();
+ }
+
+ if ( $bitdepth ) {
+ $vals['bitdepth'] = $file->getBitDepth();
+ }
+
+ return $vals;
+ }
+
+ /**
+ * Get the count of image transformations performed
+ *
+ * If this is >= TRANSFORM_LIMIT, you should probably stop processing images.
+ *
+ * @return int Count
+ */
+ static function getTransformCount() {
+ return self::$transformCount;
+ }
+
+ /**
+ *
+ * @param array $metadata
+ * @param ApiResult $result
+ * @return array
+ */
+ public static function processMetaData( $metadata, $result ) {
+ $retval = [];
+ if ( is_array( $metadata ) ) {
+ foreach ( $metadata as $key => $value ) {
+ $r = [
+ 'name' => $key,
+ ApiResult::META_BC_BOOLS => [ 'value' ],
+ ];
+ if ( is_array( $value ) ) {
+ $r['value'] = static::processMetaData( $value, $result );
+ } else {
+ $r['value'] = $value;
+ }
+ $retval[] = $r;
+ }
+ }
+ ApiResult::setIndexedTagName( $retval, 'metadata' );
+
+ return $retval;
+ }
+
+ public function getCacheMode( $params ) {
+ if ( $this->userCanSeeRevDel() ) {
+ return 'private';
+ }
+
+ return 'public';
+ }
+
+ /**
+ * @param File $img
+ * @param null|string $start
+ * @return string
+ */
+ protected function getContinueStr( $img, $start = null ) {
+ if ( $start === null ) {
+ $start = $img->getTimestamp();
+ }
+
+ return $img->getOriginalTitle()->getDBkey() . '|' . $start;
+ }
+
+ public function getAllowedParams() {
+ global $wgContLang;
+
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'timestamp|user',
+ ApiBase::PARAM_TYPE => static::getPropertyNames(),
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => static::getPropertyMessages(),
+ ],
+ 'limit' => [
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_DFLT => 1,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'urlwidth' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_DFLT => -1,
+ ApiBase::PARAM_HELP_MSG => [
+ 'apihelp-query+imageinfo-param-urlwidth',
+ self::TRANSFORM_LIMIT,
+ ],
+ ],
+ 'urlheight' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_DFLT => -1
+ ],
+ 'metadataversion' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_DFLT => '1',
+ ],
+ 'extmetadatalanguage' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_DFLT => $wgContLang->getCode(),
+ ],
+ 'extmetadatamultilang' => [
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DFLT => false,
+ ],
+ 'extmetadatafilter' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'urlparam' => [
+ ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'badfilecontexttitle' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'localonly' => false,
+ ];
+ }
+
+ /**
+ * Returns all possible parameters to iiprop
+ *
+ * @param array $filter List of properties to filter out
+ * @return array
+ */
+ public static function getPropertyNames( $filter = [] ) {
+ return array_keys( static::getPropertyMessages( $filter ) );
+ }
+
+ /**
+ * Returns messages for all possible parameters to iiprop
+ *
+ * @param array $filter List of properties to filter out
+ * @return array
+ */
+ public static function getPropertyMessages( $filter = [] ) {
+ return array_diff_key(
+ [
+ 'timestamp' => 'apihelp-query+imageinfo-paramvalue-prop-timestamp',
+ 'user' => 'apihelp-query+imageinfo-paramvalue-prop-user',
+ 'userid' => 'apihelp-query+imageinfo-paramvalue-prop-userid',
+ 'comment' => 'apihelp-query+imageinfo-paramvalue-prop-comment',
+ 'parsedcomment' => 'apihelp-query+imageinfo-paramvalue-prop-parsedcomment',
+ 'canonicaltitle' => 'apihelp-query+imageinfo-paramvalue-prop-canonicaltitle',
+ 'url' => 'apihelp-query+imageinfo-paramvalue-prop-url',
+ 'size' => 'apihelp-query+imageinfo-paramvalue-prop-size',
+ 'dimensions' => 'apihelp-query+imageinfo-paramvalue-prop-dimensions',
+ 'sha1' => 'apihelp-query+imageinfo-paramvalue-prop-sha1',
+ 'mime' => 'apihelp-query+imageinfo-paramvalue-prop-mime',
+ 'thumbmime' => 'apihelp-query+imageinfo-paramvalue-prop-thumbmime',
+ 'mediatype' => 'apihelp-query+imageinfo-paramvalue-prop-mediatype',
+ 'metadata' => 'apihelp-query+imageinfo-paramvalue-prop-metadata',
+ 'commonmetadata' => 'apihelp-query+imageinfo-paramvalue-prop-commonmetadata',
+ 'extmetadata' => 'apihelp-query+imageinfo-paramvalue-prop-extmetadata',
+ 'archivename' => 'apihelp-query+imageinfo-paramvalue-prop-archivename',
+ 'bitdepth' => 'apihelp-query+imageinfo-paramvalue-prop-bitdepth',
+ 'uploadwarning' => 'apihelp-query+imageinfo-paramvalue-prop-uploadwarning',
+ 'badfile' => 'apihelp-query+imageinfo-paramvalue-prop-badfile',
+ ],
+ array_flip( $filter )
+ );
+ }
+
+ /**
+ * Returns array key value pairs of properties and their descriptions
+ *
+ * @deprecated since 1.25
+ * @param string $modulePrefix
+ * @return array
+ */
+ private static function getProperties( $modulePrefix = '' ) {
+ return [
+ 'timestamp' => ' timestamp - Adds timestamp for the uploaded version',
+ 'user' => ' user - Adds the user who uploaded the image version',
+ 'userid' => ' userid - Add the user ID that uploaded the image version',
+ 'comment' => ' comment - Comment on the version',
+ 'parsedcomment' => ' parsedcomment - Parse the comment on the version',
+ 'canonicaltitle' => ' canonicaltitle - Adds the canonical title of the image file',
+ 'url' => ' url - Gives URL to the image and the description page',
+ 'size' => ' size - Adds the size of the image in bytes, ' .
+ 'its height and its width. Page count and duration are added if applicable',
+ 'dimensions' => ' dimensions - Alias for size', // B/C with Allimages
+ 'sha1' => ' sha1 - Adds SHA-1 hash for the image',
+ 'mime' => ' mime - Adds MIME type of the image',
+ 'thumbmime' => ' thumbmime - Adds MIME type of the image thumbnail' .
+ ' (requires url and param ' . $modulePrefix . 'urlwidth)',
+ 'mediatype' => ' mediatype - Adds the media type of the image',
+ 'metadata' => ' metadata - Lists Exif metadata for the version of the image',
+ 'commonmetadata' => ' commonmetadata - Lists file format generic metadata ' .
+ 'for the version of the image',
+ 'extmetadata' => ' extmetadata - Lists formatted metadata combined ' .
+ 'from multiple sources. Results are HTML formatted.',
+ 'archivename' => ' archivename - Adds the file name of the archive ' .
+ 'version for non-latest versions',
+ 'bitdepth' => ' bitdepth - Adds the bit depth of the version',
+ 'uploadwarning' => ' uploadwarning - Used by the Special:Upload page to ' .
+ 'get information about an existing file. Not intended for use outside MediaWiki core',
+ ];
+ }
+
+ /**
+ * Returns the descriptions for the properties provided by getPropertyNames()
+ *
+ * @deprecated since 1.25
+ * @param array $filter List of properties to filter out
+ * @param string $modulePrefix
+ * @return array
+ */
+ public static function getPropertyDescriptions( $filter = [], $modulePrefix = '' ) {
+ return array_merge(
+ [ 'What image information to get:' ],
+ array_values( array_diff_key( static::getProperties( $modulePrefix ), array_flip( $filter ) ) )
+ );
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo'
+ => 'apihelp-query+imageinfo-example-simple',
+ 'action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
+ 'iiend=2007-12-31T23:59:59Z&iiprop=timestamp|user|url'
+ => 'apihelp-query+imageinfo-example-dated',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Imageinfo';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryImages.php b/www/wiki/includes/api/ApiQueryImages.php
new file mode 100644
index 00000000..06a3ba08
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryImages.php
@@ -0,0 +1,177 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This query adds an "<images>" subelement to all pages with the list of
+ * images embedded into those pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryImages extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'im' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ private function run( $resultPageSet = null ) {
+ if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
+ return; // nothing to do
+ }
+
+ $params = $this->extractRequestParams();
+ $this->addFields( [
+ 'il_from',
+ 'il_to'
+ ] );
+
+ $this->addTables( 'imagelinks' );
+ $this->addWhereFld( 'il_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $ilfrom = intval( $cont[0] );
+ $ilto = $this->getDB()->addQuotes( $cont[1] );
+ $this->addWhere(
+ "il_from $op $ilfrom OR " .
+ "(il_from = $ilfrom AND " .
+ "il_to $op= $ilto)"
+ );
+ }
+
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ // Don't order by il_from if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
+ $this->addOption( 'ORDER BY', 'il_to' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'il_from' . $sort,
+ 'il_to' . $sort
+ ] );
+ }
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+ if ( $params['images'] ) {
+ $images = [];
+ foreach ( $params['images'] as $img ) {
+ $title = Title::newFromText( $img );
+ if ( !$title || $title->getNamespace() != NS_FILE ) {
+ $this->addWarning( [ 'apiwarn-notfile', wfEscapeWikiText( $img ) ] );
+ } else {
+ $images[] = $title->getDBkey();
+ }
+ }
+ if ( !$images ) {
+ // No titles so no results
+ return;
+ }
+ $this->addWhereFld( 'il_to', $images );
+ }
+
+ $res = $this->select( __METHOD__ );
+
+ if ( is_null( $resultPageSet ) ) {
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->il_from . '|' . $row->il_to );
+ break;
+ }
+ $vals = [];
+ ApiQueryBase::addTitleInfo( $vals, Title::makeTitle( NS_FILE, $row->il_to ) );
+ $fit = $this->addPageSubItem( $row->il_from, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->il_from . '|' . $row->il_to );
+ break;
+ }
+ }
+ } else {
+ $titles = [];
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->il_from . '|' . $row->il_to );
+ break;
+ }
+ $titles[] = Title::makeTitle( NS_FILE, $row->il_to );
+ }
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'images' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=images&titles=Main%20Page'
+ => 'apihelp-query+images-example-simple',
+ 'action=query&generator=images&titles=Main%20Page&prop=info'
+ => 'apihelp-query+images-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Images';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryInfo.php b/www/wiki/includes/api/ApiQueryInfo.php
new file mode 100644
index 00000000..1d3c110c
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryInfo.php
@@ -0,0 +1,986 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Linker\LinkTarget;
+
+/**
+ * A query module to show basic page information.
+ *
+ * @ingroup API
+ */
+class ApiQueryInfo extends ApiQueryBase {
+
+ private $fld_protection = false, $fld_talkid = false,
+ $fld_subjectid = false, $fld_url = false,
+ $fld_readable = false, $fld_watched = false,
+ $fld_watchers = false, $fld_visitingwatchers = false,
+ $fld_notificationtimestamp = false,
+ $fld_preload = false, $fld_displaytitle = false, $fld_varianttitles = false;
+
+ private $params;
+
+ /** @var Title[] */
+ private $titles;
+ /** @var Title[] */
+ private $missing;
+ /** @var Title[] */
+ private $everything;
+
+ private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
+ $pageLatest, $pageLength;
+
+ private $protections, $restrictionTypes, $watched, $watchers, $visitingwatchers,
+ $notificationtimestamps, $talkids, $subjectids, $displaytitles, $variantTitles;
+ private $showZeroWatchers = false;
+
+ private $tokenFunctions;
+
+ private $countTestedActions = 0;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'in' );
+ }
+
+ /**
+ * @param ApiPageSet $pageSet
+ * @return void
+ */
+ public function requestExtraData( $pageSet ) {
+ $pageSet->requestField( 'page_restrictions' );
+ // If the pageset is resolving redirects we won't get page_is_redirect.
+ // But we can't know for sure until the pageset is executed (revids may
+ // turn it off), so request it unconditionally.
+ $pageSet->requestField( 'page_is_redirect' );
+ $pageSet->requestField( 'page_is_new' );
+ $config = $this->getConfig();
+ $pageSet->requestField( 'page_touched' );
+ $pageSet->requestField( 'page_latest' );
+ $pageSet->requestField( 'page_len' );
+ if ( $config->get( 'ContentHandlerUseDB' ) ) {
+ $pageSet->requestField( 'page_content_model' );
+ }
+ if ( $config->get( 'PageLanguageUseDB' ) ) {
+ $pageSet->requestField( 'page_lang' );
+ }
+ }
+
+ /**
+ * Get an array mapping token names to their handler functions.
+ * The prototype for a token function is func($pageid, $title)
+ * it should return a token or false (permission denied)
+ * @deprecated since 1.24
+ * @return array [ tokenname => function ]
+ */
+ protected function getTokenFunctions() {
+ // Don't call the hooks twice
+ if ( isset( $this->tokenFunctions ) ) {
+ return $this->tokenFunctions;
+ }
+
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ return [];
+ }
+
+ $this->tokenFunctions = [
+ 'edit' => [ self::class, 'getEditToken' ],
+ 'delete' => [ self::class, 'getDeleteToken' ],
+ 'protect' => [ self::class, 'getProtectToken' ],
+ 'move' => [ self::class, 'getMoveToken' ],
+ 'block' => [ self::class, 'getBlockToken' ],
+ 'unblock' => [ self::class, 'getUnblockToken' ],
+ 'email' => [ self::class, 'getEmailToken' ],
+ 'import' => [ self::class, 'getImportToken' ],
+ 'watch' => [ self::class, 'getWatchToken' ],
+ ];
+ Hooks::run( 'APIQueryInfoTokens', [ &$this->tokenFunctions ] );
+
+ return $this->tokenFunctions;
+ }
+
+ static protected $cachedTokens = [];
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function resetTokenCache() {
+ self::$cachedTokens = [];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getEditToken( $pageid, $title ) {
+ // We could check for $title->userCan('edit') here,
+ // but that's too expensive for this purpose
+ // and would break caching
+ global $wgUser;
+ if ( !$wgUser->isAllowed( 'edit' ) ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['edit'] ) ) {
+ self::$cachedTokens['edit'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['edit'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getDeleteToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->isAllowed( 'delete' ) ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['delete'] ) ) {
+ self::$cachedTokens['delete'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['delete'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getProtectToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->isAllowed( 'protect' ) ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['protect'] ) ) {
+ self::$cachedTokens['protect'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['protect'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getMoveToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->isAllowed( 'move' ) ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['move'] ) ) {
+ self::$cachedTokens['move'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['move'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getBlockToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->isAllowed( 'block' ) ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['block'] ) ) {
+ self::$cachedTokens['block'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['block'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getUnblockToken( $pageid, $title ) {
+ // Currently, this is exactly the same as the block token
+ return self::getBlockToken( $pageid, $title );
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getEmailToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->canSendEmail() || $wgUser->isBlockedFromEmailuser() ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['email'] ) ) {
+ self::$cachedTokens['email'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['email'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getImportToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->isAllowedAny( 'import', 'importupload' ) ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['import'] ) ) {
+ self::$cachedTokens['import'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['import'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getWatchToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->isLoggedIn() ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['watch'] ) ) {
+ self::$cachedTokens['watch'] = $wgUser->getEditToken( 'watch' );
+ }
+
+ return self::$cachedTokens['watch'];
+ }
+
+ /**
+ * @deprecated since 1.24
+ */
+ public static function getOptionsToken( $pageid, $title ) {
+ global $wgUser;
+ if ( !$wgUser->isLoggedIn() ) {
+ return false;
+ }
+
+ // The token is always the same, let's exploit that
+ if ( !isset( self::$cachedTokens['options'] ) ) {
+ self::$cachedTokens['options'] = $wgUser->getEditToken();
+ }
+
+ return self::$cachedTokens['options'];
+ }
+
+ public function execute() {
+ $this->params = $this->extractRequestParams();
+ if ( !is_null( $this->params['prop'] ) ) {
+ $prop = array_flip( $this->params['prop'] );
+ $this->fld_protection = isset( $prop['protection'] );
+ $this->fld_watched = isset( $prop['watched'] );
+ $this->fld_watchers = isset( $prop['watchers'] );
+ $this->fld_visitingwatchers = isset( $prop['visitingwatchers'] );
+ $this->fld_notificationtimestamp = isset( $prop['notificationtimestamp'] );
+ $this->fld_talkid = isset( $prop['talkid'] );
+ $this->fld_subjectid = isset( $prop['subjectid'] );
+ $this->fld_url = isset( $prop['url'] );
+ $this->fld_readable = isset( $prop['readable'] );
+ $this->fld_preload = isset( $prop['preload'] );
+ $this->fld_displaytitle = isset( $prop['displaytitle'] );
+ $this->fld_varianttitles = isset( $prop['varianttitles'] );
+ }
+
+ $pageSet = $this->getPageSet();
+ $this->titles = $pageSet->getGoodTitles();
+ $this->missing = $pageSet->getMissingTitles();
+ $this->everything = $this->titles + $this->missing;
+ $result = $this->getResult();
+
+ uasort( $this->everything, [ Title::class, 'compare' ] );
+ if ( !is_null( $this->params['continue'] ) ) {
+ // Throw away any titles we're gonna skip so they don't
+ // clutter queries
+ $cont = explode( '|', $this->params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $conttitle = Title::makeTitleSafe( $cont[0], $cont[1] );
+ foreach ( $this->everything as $pageid => $title ) {
+ if ( Title::compare( $title, $conttitle ) >= 0 ) {
+ break;
+ }
+ unset( $this->titles[$pageid] );
+ unset( $this->missing[$pageid] );
+ unset( $this->everything[$pageid] );
+ }
+ }
+
+ $this->pageRestrictions = $pageSet->getCustomField( 'page_restrictions' );
+ // when resolving redirects, no page will have this field
+ $this->pageIsRedir = !$pageSet->isResolvingRedirects()
+ ? $pageSet->getCustomField( 'page_is_redirect' )
+ : [];
+ $this->pageIsNew = $pageSet->getCustomField( 'page_is_new' );
+
+ $this->pageTouched = $pageSet->getCustomField( 'page_touched' );
+ $this->pageLatest = $pageSet->getCustomField( 'page_latest' );
+ $this->pageLength = $pageSet->getCustomField( 'page_len' );
+
+ // Get protection info if requested
+ if ( $this->fld_protection ) {
+ $this->getProtectionInfo();
+ }
+
+ if ( $this->fld_watched || $this->fld_notificationtimestamp ) {
+ $this->getWatchedInfo();
+ }
+
+ if ( $this->fld_watchers ) {
+ $this->getWatcherInfo();
+ }
+
+ if ( $this->fld_visitingwatchers ) {
+ $this->getVisitingWatcherInfo();
+ }
+
+ // Run the talkid/subjectid query if requested
+ if ( $this->fld_talkid || $this->fld_subjectid ) {
+ $this->getTSIDs();
+ }
+
+ if ( $this->fld_displaytitle ) {
+ $this->getDisplayTitle();
+ }
+
+ if ( $this->fld_varianttitles ) {
+ $this->getVariantTitles();
+ }
+
+ /** @var Title $title */
+ foreach ( $this->everything as $pageid => $title ) {
+ $pageInfo = $this->extractPageInfo( $pageid, $title );
+ $fit = $pageInfo !== null && $result->addValue( [
+ 'query',
+ 'pages'
+ ], $pageid, $pageInfo );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue',
+ $title->getNamespace() . '|' .
+ $title->getText() );
+ break;
+ }
+ }
+ }
+
+ /**
+ * Get a result array with information about a title
+ * @param int $pageid Page ID (negative for missing titles)
+ * @param Title $title
+ * @return array|null
+ */
+ private function extractPageInfo( $pageid, $title ) {
+ $pageInfo = [];
+ // $title->exists() needs pageid, which is not set for all title objects
+ $titleExists = $pageid > 0;
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+
+ $pageInfo['contentmodel'] = $title->getContentModel();
+
+ $pageLanguage = $title->getPageLanguage();
+ $pageInfo['pagelanguage'] = $pageLanguage->getCode();
+ $pageInfo['pagelanguagehtmlcode'] = $pageLanguage->getHtmlCode();
+ $pageInfo['pagelanguagedir'] = $pageLanguage->getDir();
+
+ if ( $titleExists ) {
+ $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
+ $pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] );
+ $pageInfo['length'] = intval( $this->pageLength[$pageid] );
+
+ if ( isset( $this->pageIsRedir[$pageid] ) && $this->pageIsRedir[$pageid] ) {
+ $pageInfo['redirect'] = true;
+ }
+ if ( $this->pageIsNew[$pageid] ) {
+ $pageInfo['new'] = true;
+ }
+ }
+
+ if ( !is_null( $this->params['token'] ) ) {
+ $tokenFunctions = $this->getTokenFunctions();
+ $pageInfo['starttimestamp'] = wfTimestamp( TS_ISO_8601, time() );
+ foreach ( $this->params['token'] as $t ) {
+ $val = call_user_func( $tokenFunctions[$t], $pageid, $title );
+ if ( $val === false ) {
+ $this->addWarning( [ 'apiwarn-tokennotallowed', $t ] );
+ } else {
+ $pageInfo[$t . 'token'] = $val;
+ }
+ }
+ }
+
+ if ( $this->fld_protection ) {
+ $pageInfo['protection'] = [];
+ if ( isset( $this->protections[$ns][$dbkey] ) ) {
+ $pageInfo['protection'] =
+ $this->protections[$ns][$dbkey];
+ }
+ ApiResult::setIndexedTagName( $pageInfo['protection'], 'pr' );
+
+ $pageInfo['restrictiontypes'] = [];
+ if ( isset( $this->restrictionTypes[$ns][$dbkey] ) ) {
+ $pageInfo['restrictiontypes'] =
+ $this->restrictionTypes[$ns][$dbkey];
+ }
+ ApiResult::setIndexedTagName( $pageInfo['restrictiontypes'], 'rt' );
+ }
+
+ if ( $this->fld_watched && $this->watched !== null ) {
+ $pageInfo['watched'] = $this->watched[$ns][$dbkey];
+ }
+
+ if ( $this->fld_watchers ) {
+ if ( $this->watchers !== null && $this->watchers[$ns][$dbkey] !== 0 ) {
+ $pageInfo['watchers'] = $this->watchers[$ns][$dbkey];
+ } elseif ( $this->showZeroWatchers ) {
+ $pageInfo['watchers'] = 0;
+ }
+ }
+
+ if ( $this->fld_visitingwatchers ) {
+ if ( $this->visitingwatchers !== null && $this->visitingwatchers[$ns][$dbkey] !== 0 ) {
+ $pageInfo['visitingwatchers'] = $this->visitingwatchers[$ns][$dbkey];
+ } elseif ( $this->showZeroWatchers ) {
+ $pageInfo['visitingwatchers'] = 0;
+ }
+ }
+
+ if ( $this->fld_notificationtimestamp ) {
+ $pageInfo['notificationtimestamp'] = '';
+ if ( $this->notificationtimestamps[$ns][$dbkey] ) {
+ $pageInfo['notificationtimestamp'] =
+ wfTimestamp( TS_ISO_8601, $this->notificationtimestamps[$ns][$dbkey] );
+ }
+ }
+
+ if ( $this->fld_talkid && isset( $this->talkids[$ns][$dbkey] ) ) {
+ $pageInfo['talkid'] = $this->talkids[$ns][$dbkey];
+ }
+
+ if ( $this->fld_subjectid && isset( $this->subjectids[$ns][$dbkey] ) ) {
+ $pageInfo['subjectid'] = $this->subjectids[$ns][$dbkey];
+ }
+
+ if ( $this->fld_url ) {
+ $pageInfo['fullurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
+ $pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT );
+ $pageInfo['canonicalurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CANONICAL );
+ }
+ if ( $this->fld_readable ) {
+ $pageInfo['readable'] = $title->userCan( 'read', $this->getUser() );
+ }
+
+ if ( $this->fld_preload ) {
+ if ( $titleExists ) {
+ $pageInfo['preload'] = '';
+ } else {
+ $text = null;
+ Hooks::run( 'EditFormPreloadText', [ &$text, &$title ] );
+
+ $pageInfo['preload'] = $text;
+ }
+ }
+
+ if ( $this->fld_displaytitle ) {
+ if ( isset( $this->displaytitles[$pageid] ) ) {
+ $pageInfo['displaytitle'] = $this->displaytitles[$pageid];
+ } else {
+ $pageInfo['displaytitle'] = $title->getPrefixedText();
+ }
+ }
+
+ if ( $this->fld_varianttitles ) {
+ if ( isset( $this->variantTitles[$pageid] ) ) {
+ $pageInfo['varianttitles'] = $this->variantTitles[$pageid];
+ }
+ }
+
+ if ( $this->params['testactions'] ) {
+ $limit = $this->getMain()->canApiHighLimits() ? self::LIMIT_SML1 : self::LIMIT_SML2;
+ if ( $this->countTestedActions >= $limit ) {
+ return null; // force a continuation
+ }
+
+ $user = $this->getUser();
+ $pageInfo['actions'] = [];
+ foreach ( $this->params['testactions'] as $action ) {
+ $this->countTestedActions++;
+ $pageInfo['actions'][$action] = $title->userCan( $action, $user );
+ }
+ }
+
+ return $pageInfo;
+ }
+
+ /**
+ * Get information about protections and put it in $protections
+ */
+ private function getProtectionInfo() {
+ $this->protections = [];
+ $db = $this->getDB();
+
+ // Get normal protections for existing titles
+ if ( count( $this->titles ) ) {
+ $this->resetQueryParams();
+ $this->addTables( 'page_restrictions' );
+ $this->addFields( [ 'pr_page', 'pr_type', 'pr_level',
+ 'pr_expiry', 'pr_cascade' ] );
+ $this->addWhereFld( 'pr_page', array_keys( $this->titles ) );
+
+ $res = $this->select( __METHOD__ );
+ foreach ( $res as $row ) {
+ /** @var Title $title */
+ $title = $this->titles[$row->pr_page];
+ $a = [
+ 'type' => $row->pr_type,
+ 'level' => $row->pr_level,
+ 'expiry' => ApiResult::formatExpiry( $row->pr_expiry )
+ ];
+ if ( $row->pr_cascade ) {
+ $a['cascade'] = true;
+ }
+ $this->protections[$title->getNamespace()][$title->getDBkey()][] = $a;
+ }
+ // Also check old restrictions
+ foreach ( $this->titles as $pageId => $title ) {
+ if ( $this->pageRestrictions[$pageId] ) {
+ $namespace = $title->getNamespace();
+ $dbKey = $title->getDBkey();
+ $restrictions = explode( ':', trim( $this->pageRestrictions[$pageId] ) );
+ foreach ( $restrictions as $restrict ) {
+ $temp = explode( '=', trim( $restrict ) );
+ if ( count( $temp ) == 1 ) {
+ // old old format should be treated as edit/move restriction
+ $restriction = trim( $temp[0] );
+
+ if ( $restriction == '' ) {
+ continue;
+ }
+ $this->protections[$namespace][$dbKey][] = [
+ 'type' => 'edit',
+ 'level' => $restriction,
+ 'expiry' => 'infinity',
+ ];
+ $this->protections[$namespace][$dbKey][] = [
+ 'type' => 'move',
+ 'level' => $restriction,
+ 'expiry' => 'infinity',
+ ];
+ } else {
+ $restriction = trim( $temp[1] );
+ if ( $restriction == '' ) {
+ continue;
+ }
+ $this->protections[$namespace][$dbKey][] = [
+ 'type' => $temp[0],
+ 'level' => $restriction,
+ 'expiry' => 'infinity',
+ ];
+ }
+ }
+ }
+ }
+ }
+
+ // Get protections for missing titles
+ if ( count( $this->missing ) ) {
+ $this->resetQueryParams();
+ $lb = new LinkBatch( $this->missing );
+ $this->addTables( 'protected_titles' );
+ $this->addFields( [ 'pt_title', 'pt_namespace', 'pt_create_perm', 'pt_expiry' ] );
+ $this->addWhere( $lb->constructSet( 'pt', $db ) );
+ $res = $this->select( __METHOD__ );
+ foreach ( $res as $row ) {
+ $this->protections[$row->pt_namespace][$row->pt_title][] = [
+ 'type' => 'create',
+ 'level' => $row->pt_create_perm,
+ 'expiry' => ApiResult::formatExpiry( $row->pt_expiry )
+ ];
+ }
+ }
+
+ // Separate good and missing titles into files and other pages
+ // and populate $this->restrictionTypes
+ $images = $others = [];
+ foreach ( $this->everything as $title ) {
+ if ( $title->getNamespace() == NS_FILE ) {
+ $images[] = $title->getDBkey();
+ } else {
+ $others[] = $title;
+ }
+ // Applicable protection types
+ $this->restrictionTypes[$title->getNamespace()][$title->getDBkey()] =
+ array_values( $title->getRestrictionTypes() );
+ }
+
+ if ( count( $others ) ) {
+ // Non-images: check templatelinks
+ $lb = new LinkBatch( $others );
+ $this->resetQueryParams();
+ $this->addTables( [ 'page_restrictions', 'page', 'templatelinks' ] );
+ $this->addFields( [ 'pr_type', 'pr_level', 'pr_expiry',
+ 'page_title', 'page_namespace',
+ 'tl_title', 'tl_namespace' ] );
+ $this->addWhere( $lb->constructSet( 'tl', $db ) );
+ $this->addWhere( 'pr_page = page_id' );
+ $this->addWhere( 'pr_page = tl_from' );
+ $this->addWhereFld( 'pr_cascade', 1 );
+
+ $res = $this->select( __METHOD__ );
+ foreach ( $res as $row ) {
+ $source = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $this->protections[$row->tl_namespace][$row->tl_title][] = [
+ 'type' => $row->pr_type,
+ 'level' => $row->pr_level,
+ 'expiry' => ApiResult::formatExpiry( $row->pr_expiry ),
+ 'source' => $source->getPrefixedText()
+ ];
+ }
+ }
+
+ if ( count( $images ) ) {
+ // Images: check imagelinks
+ $this->resetQueryParams();
+ $this->addTables( [ 'page_restrictions', 'page', 'imagelinks' ] );
+ $this->addFields( [ 'pr_type', 'pr_level', 'pr_expiry',
+ 'page_title', 'page_namespace', 'il_to' ] );
+ $this->addWhere( 'pr_page = page_id' );
+ $this->addWhere( 'pr_page = il_from' );
+ $this->addWhereFld( 'pr_cascade', 1 );
+ $this->addWhereFld( 'il_to', $images );
+
+ $res = $this->select( __METHOD__ );
+ foreach ( $res as $row ) {
+ $source = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $this->protections[NS_FILE][$row->il_to][] = [
+ 'type' => $row->pr_type,
+ 'level' => $row->pr_level,
+ 'expiry' => ApiResult::formatExpiry( $row->pr_expiry ),
+ 'source' => $source->getPrefixedText()
+ ];
+ }
+ }
+ }
+
+ /**
+ * Get talk page IDs (if requested) and subject page IDs (if requested)
+ * and put them in $talkids and $subjectids
+ */
+ private function getTSIDs() {
+ $getTitles = $this->talkids = $this->subjectids = [];
+
+ /** @var Title $t */
+ foreach ( $this->everything as $t ) {
+ if ( MWNamespace::isTalk( $t->getNamespace() ) ) {
+ if ( $this->fld_subjectid ) {
+ $getTitles[] = $t->getSubjectPage();
+ }
+ } elseif ( $this->fld_talkid ) {
+ $getTitles[] = $t->getTalkPage();
+ }
+ }
+ if ( !count( $getTitles ) ) {
+ return;
+ }
+
+ $db = $this->getDB();
+
+ // Construct a custom WHERE clause that matches
+ // all titles in $getTitles
+ $lb = new LinkBatch( $getTitles );
+ $this->resetQueryParams();
+ $this->addTables( 'page' );
+ $this->addFields( [ 'page_title', 'page_namespace', 'page_id' ] );
+ $this->addWhere( $lb->constructSet( 'page', $db ) );
+ $res = $this->select( __METHOD__ );
+ foreach ( $res as $row ) {
+ if ( MWNamespace::isTalk( $row->page_namespace ) ) {
+ $this->talkids[MWNamespace::getSubject( $row->page_namespace )][$row->page_title] =
+ intval( $row->page_id );
+ } else {
+ $this->subjectids[MWNamespace::getTalk( $row->page_namespace )][$row->page_title] =
+ intval( $row->page_id );
+ }
+ }
+ }
+
+ private function getDisplayTitle() {
+ $this->displaytitles = [];
+
+ $pageIds = array_keys( $this->titles );
+
+ if ( !count( $pageIds ) ) {
+ return;
+ }
+
+ $this->resetQueryParams();
+ $this->addTables( 'page_props' );
+ $this->addFields( [ 'pp_page', 'pp_value' ] );
+ $this->addWhereFld( 'pp_page', $pageIds );
+ $this->addWhereFld( 'pp_propname', 'displaytitle' );
+ $res = $this->select( __METHOD__ );
+
+ foreach ( $res as $row ) {
+ $this->displaytitles[$row->pp_page] = $row->pp_value;
+ }
+ }
+
+ private function getVariantTitles() {
+ if ( !count( $this->titles ) ) {
+ return;
+ }
+ $this->variantTitles = [];
+ foreach ( $this->titles as $pageId => $t ) {
+ $this->variantTitles[$pageId] = isset( $this->displaytitles[$pageId] )
+ ? $this->getAllVariants( $this->displaytitles[$pageId] )
+ : $this->getAllVariants( $t->getText(), $t->getNamespace() );
+ }
+ }
+
+ private function getAllVariants( $text, $ns = NS_MAIN ) {
+ global $wgContLang;
+ $result = [];
+ foreach ( $wgContLang->getVariants() as $variant ) {
+ $convertTitle = $wgContLang->autoConvert( $text, $variant );
+ if ( $ns !== NS_MAIN ) {
+ $convertNs = $wgContLang->convertNamespace( $ns, $variant );
+ $convertTitle = $convertNs . ':' . $convertTitle;
+ }
+ $result[$variant] = $convertTitle;
+ }
+ return $result;
+ }
+
+ /**
+ * Get information about watched status and put it in $this->watched
+ * and $this->notificationtimestamps
+ */
+ private function getWatchedInfo() {
+ $user = $this->getUser();
+
+ if ( $user->isAnon() || count( $this->everything ) == 0
+ || !$user->isAllowed( 'viewmywatchlist' )
+ ) {
+ return;
+ }
+
+ $this->watched = [];
+ $this->notificationtimestamps = [];
+
+ $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+ $timestamps = $store->getNotificationTimestampsBatch( $user, $this->everything );
+
+ if ( $this->fld_watched ) {
+ foreach ( $timestamps as $namespaceId => $dbKeys ) {
+ $this->watched[$namespaceId] = array_map(
+ function ( $x ) {
+ return $x !== false;
+ },
+ $dbKeys
+ );
+ }
+ }
+ if ( $this->fld_notificationtimestamp ) {
+ $this->notificationtimestamps = $timestamps;
+ }
+ }
+
+ /**
+ * Get the count of watchers and put it in $this->watchers
+ */
+ private function getWatcherInfo() {
+ if ( count( $this->everything ) == 0 ) {
+ return;
+ }
+
+ $user = $this->getUser();
+ $canUnwatchedpages = $user->isAllowed( 'unwatchedpages' );
+ $unwatchedPageThreshold = $this->getConfig()->get( 'UnwatchedPageThreshold' );
+ if ( !$canUnwatchedpages && !is_int( $unwatchedPageThreshold ) ) {
+ return;
+ }
+
+ $this->showZeroWatchers = $canUnwatchedpages;
+
+ $countOptions = [];
+ if ( !$canUnwatchedpages ) {
+ $countOptions['minimumWatchers'] = $unwatchedPageThreshold;
+ }
+
+ $this->watchers = MediaWikiServices::getInstance()->getWatchedItemStore()->countWatchersMultiple(
+ $this->everything,
+ $countOptions
+ );
+ }
+
+ /**
+ * Get the count of watchers who have visited recent edits and put it in
+ * $this->visitingwatchers
+ *
+ * Based on InfoAction::pageCounts
+ */
+ private function getVisitingWatcherInfo() {
+ $config = $this->getConfig();
+ $user = $this->getUser();
+ $db = $this->getDB();
+
+ $canUnwatchedpages = $user->isAllowed( 'unwatchedpages' );
+ $unwatchedPageThreshold = $this->getConfig()->get( 'UnwatchedPageThreshold' );
+ if ( !$canUnwatchedpages && !is_int( $unwatchedPageThreshold ) ) {
+ return;
+ }
+
+ $this->showZeroWatchers = $canUnwatchedpages;
+
+ $titlesWithThresholds = [];
+ if ( $this->titles ) {
+ $lb = new LinkBatch( $this->titles );
+
+ // Fetch last edit timestamps for pages
+ $this->resetQueryParams();
+ $this->addTables( [ 'page', 'revision' ] );
+ $this->addFields( [ 'page_namespace', 'page_title', 'rev_timestamp' ] );
+ $this->addWhere( [
+ 'page_latest = rev_id',
+ $lb->constructSet( 'page', $db ),
+ ] );
+ $this->addOption( 'GROUP BY', [ 'page_namespace', 'page_title' ] );
+ $timestampRes = $this->select( __METHOD__ );
+
+ $age = $config->get( 'WatchersMaxAge' );
+ $timestamps = [];
+ foreach ( $timestampRes as $row ) {
+ $revTimestamp = wfTimestamp( TS_UNIX, (int)$row->rev_timestamp );
+ $timestamps[$row->page_namespace][$row->page_title] = $revTimestamp - $age;
+ }
+ $titlesWithThresholds = array_map(
+ function ( LinkTarget $target ) use ( $timestamps ) {
+ return [
+ $target, $timestamps[$target->getNamespace()][$target->getDBkey()]
+ ];
+ },
+ $this->titles
+ );
+ }
+
+ if ( $this->missing ) {
+ $titlesWithThresholds = array_merge(
+ $titlesWithThresholds,
+ array_map(
+ function ( LinkTarget $target ) {
+ return [ $target, null ];
+ },
+ $this->missing
+ )
+ );
+ }
+ $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+ $this->visitingwatchers = $store->countVisitingWatchersMultiple(
+ $titlesWithThresholds,
+ !$canUnwatchedpages ? $unwatchedPageThreshold : null
+ );
+ }
+
+ public function getCacheMode( $params ) {
+ // Other props depend on something about the current user
+ $publicProps = [
+ 'protection',
+ 'talkid',
+ 'subjectid',
+ 'url',
+ 'preload',
+ 'displaytitle',
+ 'varianttitles',
+ ];
+ if ( array_diff( (array)$params['prop'], $publicProps ) ) {
+ return 'private';
+ }
+
+ // testactions also depends on the current user
+ if ( $params['testactions'] ) {
+ return 'private';
+ }
+
+ if ( !is_null( $params['token'] ) ) {
+ return 'private';
+ }
+
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'protection',
+ 'talkid',
+ 'watched', # private
+ 'watchers', # private
+ 'visitingwatchers', # private
+ 'notificationtimestamp', # private
+ 'subjectid',
+ 'url',
+ 'readable', # private
+ 'preload',
+ 'displaytitle',
+ 'varianttitles',
+ // If you add more properties here, please consider whether they
+ // need to be added to getCacheMode()
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'testactions' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'token' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() )
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=info&titles=Main%20Page'
+ => 'apihelp-query+info-example-simple',
+ 'action=query&prop=info&inprop=protection&titles=Main%20Page'
+ => 'apihelp-query+info-example-protection',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Info';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryLangBacklinks.php b/www/wiki/includes/api/ApiQueryLangBacklinks.php
new file mode 100644
index 00000000..2e19783c
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryLangBacklinks.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * API for MediaWiki 1.17+
+ *
+ * Copyright © 2011 Sam Reed
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This gives links pointing to the given interwiki
+ * @ingroup API
+ */
+class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'lbl' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ public function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ if ( isset( $params['title'] ) && !isset( $params['lang'] ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-mustusewith',
+ $this->encodeParamName( 'title' ),
+ $this->encodeParamName( 'lang' )
+ ],
+ 'nolang'
+ );
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 3 );
+
+ $db = $this->getDB();
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $prefix = $db->addQuotes( $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $from = intval( $cont[2] );
+ $this->addWhere(
+ "ll_lang $op $prefix OR " .
+ "(ll_lang = $prefix AND " .
+ "(ll_title $op $title OR " .
+ "(ll_title = $title AND " .
+ "ll_from $op= $from)))"
+ );
+ }
+
+ $prop = array_flip( $params['prop'] );
+ $lllang = isset( $prop['lllang'] );
+ $lltitle = isset( $prop['lltitle'] );
+
+ $this->addTables( [ 'langlinks', 'page' ] );
+ $this->addWhere( 'll_from = page_id' );
+
+ $this->addFields( [ 'page_id', 'page_title', 'page_namespace', 'page_is_redirect',
+ 'll_from', 'll_lang', 'll_title' ] );
+
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ if ( isset( $params['lang'] ) ) {
+ $this->addWhereFld( 'll_lang', $params['lang'] );
+ if ( isset( $params['title'] ) ) {
+ $this->addWhereFld( 'll_title', $params['title'] );
+ $this->addOption( 'ORDER BY', 'll_from' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'll_title' . $sort,
+ 'll_from' . $sort
+ ] );
+ }
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'll_lang' . $sort,
+ 'll_title' . $sort,
+ 'll_from' . $sort
+ ] );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+ $res = $this->select( __METHOD__ );
+
+ $pages = [];
+
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here... Continue string
+ // preserved in case the redirect query doesn't pass the limit.
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}"
+ );
+ break;
+ }
+
+ if ( !is_null( $resultPageSet ) ) {
+ $pages[] = Title::newFromRow( $row );
+ } else {
+ $entry = [ 'pageid' => (int)$row->page_id ];
+
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ ApiQueryBase::addTitleInfo( $entry, $title );
+
+ if ( $row->page_is_redirect ) {
+ $entry['redirect'] = true;
+ }
+
+ if ( $lllang ) {
+ $entry['lllang'] = $row->ll_lang;
+ }
+
+ if ( $lltitle ) {
+ $entry['lltitle'] = $row->ll_title;
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $entry );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}"
+ );
+ break;
+ }
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'll' );
+ } else {
+ $resultPageSet->populateFromTitles( $pages );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'lang' => null,
+ 'title' => null,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_TYPE => [
+ 'lllang',
+ 'lltitle',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=langbacklinks&lbltitle=Test&lbllang=fr'
+ => 'apihelp-query+langbacklinks-example-simple',
+ 'action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+ => 'apihelp-query+langbacklinks-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Langbacklinks';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryLangLinks.php b/www/wiki/includes/api/ApiQueryLangLinks.php
new file mode 100644
index 00000000..2d8e44cd
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryLangLinks.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to list all langlinks (links to corresponding foreign language pages).
+ *
+ * @ingroup API
+ */
+class ApiQueryLangLinks extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'll' );
+ }
+
+ public function execute() {
+ if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
+ return;
+ }
+
+ $params = $this->extractRequestParams();
+ $prop = array_flip( (array)$params['prop'] );
+
+ if ( isset( $params['title'] ) && !isset( $params['lang'] ) ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-mustusewith',
+ $this->encodeParamName( 'title' ),
+ $this->encodeParamName( 'lang' ),
+ ],
+ 'invalidparammix'
+ );
+ }
+
+ // Handle deprecated param
+ $this->requireMaxOneParameter( $params, 'url', 'prop' );
+ if ( $params['url'] ) {
+ $prop = [ 'url' => 1 ];
+ }
+
+ $this->addFields( [
+ 'll_from',
+ 'll_lang',
+ 'll_title'
+ ] );
+
+ $this->addTables( 'langlinks' );
+ $this->addWhereFld( 'll_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $llfrom = intval( $cont[0] );
+ $lllang = $this->getDB()->addQuotes( $cont[1] );
+ $this->addWhere(
+ "ll_from $op $llfrom OR " .
+ "(ll_from = $llfrom AND " .
+ "ll_lang $op= $lllang)"
+ );
+ }
+
+ // FIXME: (follow-up) To allow extensions to add to the language links, we need
+ // to load them all, add the extra links, then apply paging.
+ // Should not be terrible, it's not going to be more than a few hundred links.
+
+ // Note that, since (ll_from, ll_lang) is a unique key, we don't need
+ // to sort by ll_title to ensure deterministic ordering.
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ if ( isset( $params['lang'] ) ) {
+ $this->addWhereFld( 'll_lang', $params['lang'] );
+ if ( isset( $params['title'] ) ) {
+ $this->addWhereFld( 'll_title', $params['title'] );
+ }
+ $this->addOption( 'ORDER BY', 'll_from' . $sort );
+ } else {
+ // Don't order by ll_from if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
+ $this->addOption( 'ORDER BY', 'll_lang' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'll_from' . $sort,
+ 'll_lang' . $sort
+ ] );
+ }
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', "{$row->ll_from}|{$row->ll_lang}" );
+ break;
+ }
+ $entry = [ 'lang' => $row->ll_lang ];
+ if ( isset( $prop['url'] ) ) {
+ $title = Title::newFromText( "{$row->ll_lang}:{$row->ll_title}" );
+ if ( $title ) {
+ $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
+ }
+ }
+ if ( isset( $prop['langname'] ) ) {
+ $entry['langname'] = Language::fetchLanguageName( $row->ll_lang, $params['inlanguagecode'] );
+ }
+ if ( isset( $prop['autonym'] ) ) {
+ $entry['autonym'] = Language::fetchLanguageName( $row->ll_lang );
+ }
+ ApiResult::setContentValue( $entry, 'title', $row->ll_title );
+ $fit = $this->addPageSubItem( $row->ll_from, $entry );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', "{$row->ll_from}|{$row->ll_lang}" );
+ break;
+ }
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ global $wgContLang;
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'url',
+ 'langname',
+ 'autonym',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'lang' => null,
+ 'title' => null,
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ 'inlanguagecode' => $wgContLang->getCode(),
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'url' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=langlinks&titles=Main%20Page&redirects='
+ => 'apihelp-query+langlinks-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Langlinks';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryLinks.php b/www/wiki/includes/api/ApiQueryLinks.php
new file mode 100644
index 00000000..67bf619c
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryLinks.php
@@ -0,0 +1,238 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to list all wiki links on a given set of pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryLinks extends ApiQueryGeneratorBase {
+
+ const LINKS = 'links';
+ const TEMPLATES = 'templates';
+
+ private $table, $prefix, $titlesParam, $helpUrl;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ switch ( $moduleName ) {
+ case self::LINKS:
+ $this->table = 'pagelinks';
+ $this->prefix = 'pl';
+ $this->titlesParam = 'titles';
+ $this->helpUrl = 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Links';
+ break;
+ case self::TEMPLATES:
+ $this->table = 'templatelinks';
+ $this->prefix = 'tl';
+ $this->titlesParam = 'templates';
+ $this->helpUrl = 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Templates';
+ break;
+ default:
+ ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
+ }
+
+ parent::__construct( $query, $moduleName, $this->prefix );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ private function run( $resultPageSet = null ) {
+ if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
+ return; // nothing to do
+ }
+
+ $params = $this->extractRequestParams();
+
+ $this->addFields( [
+ 'pl_from' => $this->prefix . '_from',
+ 'pl_namespace' => $this->prefix . '_namespace',
+ 'pl_title' => $this->prefix . '_title'
+ ] );
+
+ $this->addTables( $this->table );
+ $this->addWhereFld( $this->prefix . '_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
+
+ $multiNS = true;
+ $multiTitle = true;
+ if ( $params[$this->titlesParam] ) {
+ // Filter the titles in PHP so our ORDER BY bug avoidance below works right.
+ $filterNS = $params['namespace'] ? array_flip( $params['namespace'] ) : false;
+
+ $lb = new LinkBatch;
+ foreach ( $params[$this->titlesParam] as $t ) {
+ $title = Title::newFromText( $t );
+ if ( !$title ) {
+ $this->addWarning( [ 'apiwarn-invalidtitle', wfEscapeWikiText( $t ) ] );
+ } elseif ( !$filterNS || isset( $filterNS[$title->getNamespace()] ) ) {
+ $lb->addObj( $title );
+ }
+ }
+ $cond = $lb->constructSet( $this->prefix, $this->getDB() );
+ if ( $cond ) {
+ $this->addWhere( $cond );
+ $multiNS = count( $lb->data ) !== 1;
+ $multiTitle = count( call_user_func_array( 'array_merge', $lb->data ) ) !== 1;
+ } else {
+ // No titles so no results
+ return;
+ }
+ } elseif ( $params['namespace'] ) {
+ $this->addWhereFld( $this->prefix . '_namespace', $params['namespace'] );
+ $multiNS = $params['namespace'] === null || count( $params['namespace'] ) !== 1;
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 3 );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $plfrom = intval( $cont[0] );
+ $plns = intval( $cont[1] );
+ $pltitle = $this->getDB()->addQuotes( $cont[2] );
+ $this->addWhere(
+ "{$this->prefix}_from $op $plfrom OR " .
+ "({$this->prefix}_from = $plfrom AND " .
+ "({$this->prefix}_namespace $op $plns OR " .
+ "({$this->prefix}_namespace = $plns AND " .
+ "{$this->prefix}_title $op= $pltitle)))"
+ );
+ }
+
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ // Here's some MySQL craziness going on: if you use WHERE foo='bar'
+ // and later ORDER BY foo MySQL doesn't notice the ORDER BY is pointless
+ // but instead goes and filesorts, because the index for foo was used
+ // already. To work around this, we drop constant fields in the WHERE
+ // clause from the ORDER BY clause
+ $order = [];
+ if ( count( $this->getPageSet()->getGoodTitles() ) != 1 ) {
+ $order[] = $this->prefix . '_from' . $sort;
+ }
+ if ( $multiNS ) {
+ $order[] = $this->prefix . '_namespace' . $sort;
+ }
+ if ( $multiTitle ) {
+ $order[] = $this->prefix . '_title' . $sort;
+ }
+ if ( $order ) {
+ $this->addOption( 'ORDER BY', $order );
+ }
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+ $res = $this->select( __METHOD__ );
+
+ if ( is_null( $resultPageSet ) ) {
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue',
+ "{$row->pl_from}|{$row->pl_namespace}|{$row->pl_title}" );
+ break;
+ }
+ $vals = [];
+ ApiQueryBase::addTitleInfo( $vals, Title::makeTitle( $row->pl_namespace, $row->pl_title ) );
+ $fit = $this->addPageSubItem( $row->pl_from, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue',
+ "{$row->pl_from}|{$row->pl_namespace}|{$row->pl_title}" );
+ break;
+ }
+ }
+ } else {
+ $titles = [];
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue',
+ "{$row->pl_from}|{$row->pl_namespace}|{$row->pl_title}" );
+ break;
+ }
+ $titles[] = Title::makeTitle( $row->pl_namespace, $row->pl_title );
+ }
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'namespace' => [
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_EXTRA_NAMESPACES => [ NS_MEDIA, NS_SPECIAL ],
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ $this->titlesParam => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ]
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ $name = $this->getModuleName();
+ $path = $this->getModulePath();
+
+ return [
+ "action=query&prop={$name}&titles=Main%20Page"
+ => "apihelp-{$path}-example-simple",
+ "action=query&generator={$name}&titles=Main%20Page&prop=info"
+ => "apihelp-{$path}-example-generator",
+ "action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
+ => "apihelp-{$path}-example-namespaces",
+ ];
+ }
+
+ public function getHelpUrls() {
+ return $this->helpUrl;
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryLogEvents.php b/www/wiki/includes/api/ApiQueryLogEvents.php
new file mode 100644
index 00000000..84e12d7d
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryLogEvents.php
@@ -0,0 +1,482 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query action to List the log events, with optional filtering by various parameters.
+ *
+ * @ingroup API
+ */
+class ApiQueryLogEvents extends ApiQueryBase {
+
+ private $commentStore;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'le' );
+ }
+
+ private $fld_ids = false, $fld_title = false, $fld_type = false,
+ $fld_user = false, $fld_userid = false,
+ $fld_timestamp = false, $fld_comment = false, $fld_parsedcomment = false,
+ $fld_details = false, $fld_tags = false;
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $db = $this->getDB();
+ $this->commentStore = CommentStore::getStore();
+ $this->requireMaxOneParameter( $params, 'title', 'prefix', 'namespace' );
+
+ $prop = array_flip( $params['prop'] );
+
+ $this->fld_ids = isset( $prop['ids'] );
+ $this->fld_title = isset( $prop['title'] );
+ $this->fld_type = isset( $prop['type'] );
+ $this->fld_user = isset( $prop['user'] );
+ $this->fld_userid = isset( $prop['userid'] );
+ $this->fld_timestamp = isset( $prop['timestamp'] );
+ $this->fld_comment = isset( $prop['comment'] );
+ $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
+ $this->fld_details = isset( $prop['details'] );
+ $this->fld_tags = isset( $prop['tags'] );
+
+ $hideLogs = LogEventsList::getExcludeClause( $db, 'user', $this->getUser() );
+ if ( $hideLogs !== false ) {
+ $this->addWhere( $hideLogs );
+ }
+
+ $actorMigration = ActorMigration::newMigration();
+ $actorQuery = $actorMigration->getJoin( 'log_user' );
+ $this->addTables( 'logging' );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addTables( [ 'user', 'page' ] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addJoinConds( [
+ 'user' => [ 'LEFT JOIN',
+ 'user_id=' . $actorQuery['fields']['log_user'] ],
+ 'page' => [ 'LEFT JOIN',
+ [ 'log_namespace=page_namespace',
+ 'log_title=page_title' ] ] ] );
+
+ $this->addFields( [
+ 'log_id',
+ 'log_type',
+ 'log_action',
+ 'log_timestamp',
+ 'log_deleted',
+ ] );
+
+ $this->addFieldsIf( 'page_id', $this->fld_ids );
+ // log_page is the page_id saved at log time, whereas page_id is from a
+ // join at query time. This leads to different results in various
+ // scenarios, e.g. deletion, recreation.
+ $this->addFieldsIf( 'log_page', $this->fld_ids );
+ $this->addFieldsIf( $actorQuery['fields'] + [ 'user_name' ], $this->fld_user );
+ $this->addFieldsIf( $actorQuery['fields'], $this->fld_userid );
+ $this->addFieldsIf(
+ [ 'log_namespace', 'log_title' ],
+ $this->fld_title || $this->fld_parsedcomment
+ );
+ $this->addFieldsIf( 'log_params', $this->fld_details );
+
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ $commentQuery = $this->commentStore->getJoin( 'log_comment' );
+ $this->addTables( $commentQuery['tables'] );
+ $this->addFields( $commentQuery['fields'] );
+ $this->addJoinConds( $commentQuery['joins'] );
+ }
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds( [ 'tag_summary' => [ 'LEFT JOIN', 'log_id=ts_log_id' ] ] );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( !is_null( $params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds( [ 'change_tag' => [ 'INNER JOIN',
+ [ 'log_id=ct_log_id' ] ] ] );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ if ( !is_null( $params['action'] ) ) {
+ // Do validation of action param, list of allowed actions can contains wildcards
+ // Allow the param, when the actions is in the list or a wildcard version is listed.
+ $logAction = $params['action'];
+ if ( strpos( $logAction, '/' ) === false ) {
+ // all items in the list have a slash
+ $valid = false;
+ } else {
+ $logActions = array_flip( $this->getAllowedLogActions() );
+ list( $type, $action ) = explode( '/', $logAction, 2 );
+ $valid = isset( $logActions[$logAction] ) || isset( $logActions[$type . '/*'] );
+ }
+
+ if ( !$valid ) {
+ $encParamName = $this->encodeParamName( 'action' );
+ $this->dieWithError(
+ [ 'apierror-unrecognizedvalue', $encParamName, wfEscapeWikiText( $logAction ) ],
+ "unknown_$encParamName"
+ );
+ }
+
+ $this->addWhereFld( 'log_type', $type );
+ $this->addWhereFld( 'log_action', $action );
+ } elseif ( !is_null( $params['type'] ) ) {
+ $this->addWhereFld( 'log_type', $params['type'] );
+ }
+
+ $this->addTimestampWhereRange(
+ 'log_timestamp',
+ $params['dir'],
+ $params['start'],
+ $params['end']
+ );
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'log_id', $params['dir'], null, null );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = ( $params['dir'] === 'newer' ? '>' : '<' );
+ $continueTimestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $continueId = (int)$cont[1];
+ $this->dieContinueUsageIf( $continueId != $cont[1] );
+ $this->addWhere( "log_timestamp $op $continueTimestamp OR " .
+ "(log_timestamp = $continueTimestamp AND " .
+ "log_id $op= $continueId)"
+ );
+ }
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+
+ $user = $params['user'];
+ if ( !is_null( $user ) ) {
+ // Note the joins in $q are the same as those from ->getJoin() above
+ // so we only need to add 'conds' here.
+ $q = $actorMigration->getWhere(
+ $db, 'log_user', User::newFromName( $params['user'], false )
+ );
+ $this->addWhere( $q['conds'] );
+ }
+
+ $title = $params['title'];
+ if ( !is_null( $title ) ) {
+ $titleObj = Title::newFromText( $title );
+ if ( is_null( $titleObj ) ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $title ) ] );
+ }
+ $this->addWhereFld( 'log_namespace', $titleObj->getNamespace() );
+ $this->addWhereFld( 'log_title', $titleObj->getDBkey() );
+ }
+
+ if ( $params['namespace'] !== null ) {
+ $this->addWhereFld( 'log_namespace', $params['namespace'] );
+ }
+
+ $prefix = $params['prefix'];
+
+ if ( !is_null( $prefix ) ) {
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $this->dieWithError( 'apierror-prefixsearchdisabled' );
+ }
+
+ $title = Title::newFromText( $prefix );
+ if ( is_null( $title ) ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $prefix ) ] );
+ }
+ $this->addWhereFld( 'log_namespace', $title->getNamespace() );
+ $this->addWhere( 'log_title ' . $db->buildLike( $title->getDBkey(), $db->anyString() ) );
+ }
+
+ // Paranoia: avoid brute force searches (T19342)
+ if ( $params['namespace'] !== null || !is_null( $title ) || !is_null( $user ) ) {
+ if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
+ $titleBits = LogPage::DELETED_ACTION;
+ $userBits = LogPage::DELETED_USER;
+ } elseif ( !$this->getUser()->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $titleBits = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED;
+ $userBits = LogPage::DELETED_USER | LogPage::DELETED_RESTRICTED;
+ } else {
+ $titleBits = 0;
+ $userBits = 0;
+ }
+ if ( ( $params['namespace'] !== null || !is_null( $title ) ) && $titleBits ) {
+ $this->addWhere( $db->bitAnd( 'log_deleted', $titleBits ) . " != $titleBits" );
+ }
+ if ( !is_null( $user ) && $userBits ) {
+ $this->addWhere( $db->bitAnd( 'log_deleted', $userBits ) . " != $userBits" );
+ }
+ }
+
+ $count = 0;
+ $res = $this->select( __METHOD__ );
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', "$row->log_timestamp|$row->log_id" );
+ break;
+ }
+
+ $vals = $this->extractRowInfo( $row );
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', "$row->log_timestamp|$row->log_id" );
+ break;
+ }
+ }
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'item' );
+ }
+
+ /**
+ * @deprecated since 1.25 Use LogFormatter::formatParametersForApi instead
+ * @param ApiResult $result
+ * @param array &$vals
+ * @param string $params
+ * @param string $type
+ * @param string $action
+ * @param string $ts
+ * @param bool $legacy
+ * @return array
+ */
+ public static function addLogParams( $result, &$vals, $params, $type,
+ $action, $ts, $legacy = false
+ ) {
+ wfDeprecated( __METHOD__, '1.25' );
+
+ $entry = new ManualLogEntry( $type, $action );
+ $entry->setParameters( $params );
+ $entry->setTimestamp( $ts );
+ $entry->setLegacy( $legacy );
+ $formatter = LogFormatter::newFromEntry( $entry );
+ $vals['params'] = $formatter->formatParametersForApi();
+
+ return $vals;
+ }
+
+ private function extractRowInfo( $row ) {
+ $logEntry = DatabaseLogEntry::newFromRow( $row );
+ $vals = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ $anyHidden = false;
+ $user = $this->getUser();
+
+ if ( $this->fld_ids ) {
+ $vals['logid'] = intval( $row->log_id );
+ }
+
+ if ( $this->fld_title || $this->fld_parsedcomment ) {
+ $title = Title::makeTitle( $row->log_namespace, $row->log_title );
+ }
+
+ if ( $this->fld_title || $this->fld_ids || $this->fld_details && $row->log_params !== '' ) {
+ if ( LogEventsList::isDeleted( $row, LogPage::DELETED_ACTION ) ) {
+ $vals['actionhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( LogEventsList::userCan( $row, LogPage::DELETED_ACTION, $user ) ) {
+ if ( $this->fld_title ) {
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+ if ( $this->fld_ids ) {
+ $vals['pageid'] = intval( $row->page_id );
+ $vals['logpage'] = intval( $row->log_page );
+ }
+ if ( $this->fld_details ) {
+ $vals['params'] = LogFormatter::newFromEntry( $logEntry )->formatParametersForApi();
+ }
+ }
+ }
+
+ if ( $this->fld_type ) {
+ $vals['type'] = $row->log_type;
+ $vals['action'] = $row->log_action;
+ }
+
+ if ( $this->fld_user || $this->fld_userid ) {
+ if ( LogEventsList::isDeleted( $row, LogPage::DELETED_USER ) ) {
+ $vals['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( LogEventsList::userCan( $row, LogPage::DELETED_USER, $user ) ) {
+ if ( $this->fld_user ) {
+ $vals['user'] = $row->user_name === null ? $row->log_user_text : $row->user_name;
+ }
+ if ( $this->fld_userid ) {
+ $vals['userid'] = intval( $row->log_user );
+ }
+
+ if ( !$row->log_user ) {
+ $vals['anon'] = true;
+ }
+ }
+ }
+ if ( $this->fld_timestamp ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->log_timestamp );
+ }
+
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ if ( LogEventsList::isDeleted( $row, LogPage::DELETED_COMMENT ) ) {
+ $vals['commenthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( LogEventsList::userCan( $row, LogPage::DELETED_COMMENT, $user ) ) {
+ $comment = $this->commentStore->getComment( 'log_comment', $row )->text;
+ if ( $this->fld_comment ) {
+ $vals['comment'] = $comment;
+ }
+
+ if ( $this->fld_parsedcomment ) {
+ $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
+ }
+ }
+ }
+
+ if ( $this->fld_tags ) {
+ if ( $row->ts_tags ) {
+ $tags = explode( ',', $row->ts_tags );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
+ $vals['tags'] = $tags;
+ } else {
+ $vals['tags'] = [];
+ }
+ }
+
+ if ( $anyHidden && LogEventsList::isDeleted( $row, LogPage::DELETED_RESTRICTED ) ) {
+ $vals['suppressed'] = true;
+ }
+
+ return $vals;
+ }
+
+ /**
+ * @return array
+ */
+ private function getAllowedLogActions() {
+ $config = $this->getConfig();
+ return array_keys( array_merge(
+ $config->get( 'LogActions' ),
+ $config->get( 'LogActionsHandlers' )
+ ) );
+ }
+
+ public function getCacheMode( $params ) {
+ if ( $this->userCanSeeRevDel() ) {
+ return 'private';
+ }
+ if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
+ // formatComment() calls wfMessage() among other things
+ return 'anon-public-user-private';
+ } elseif ( LogEventsList::getExcludeClause( $this->getDB(), 'user', $this->getUser() )
+ === LogEventsList::getExcludeClause( $this->getDB(), 'public' )
+ ) { // Output can only contain public data.
+ return 'public';
+ } else {
+ return 'anon-public-user-private';
+ }
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $config = $this->getConfig();
+ $ret = [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'ids|title|type|user|timestamp|comment|details',
+ ApiBase::PARAM_TYPE => [
+ 'ids',
+ 'title',
+ 'type',
+ 'user',
+ 'userid',
+ 'timestamp',
+ 'comment',
+ 'parsedcomment',
+ 'details',
+ 'tags'
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'type' => [
+ ApiBase::PARAM_TYPE => $config->get( 'LogTypes' )
+ ],
+ 'action' => [
+ // validation on request is done in execute()
+ ApiBase::PARAM_TYPE => ( $flags & ApiBase::GET_VALUES_FOR_HELP )
+ ? $this->getAllowedLogActions()
+ : null
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'title' => null,
+ 'namespace' => [
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_EXTRA_NAMESPACES => [ NS_MEDIA, NS_SPECIAL ],
+ ],
+ 'prefix' => [],
+ 'tag' => null,
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+
+ if ( $config->get( 'MiserMode' ) ) {
+ $ret['prefix'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=logevents'
+ => 'apihelp-query+logevents-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Logevents';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryMyStashedFiles.php b/www/wiki/includes/api/ApiQueryMyStashedFiles.php
new file mode 100644
index 00000000..457f6c6e
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryMyStashedFiles.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * API for MediaWiki 1.27+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * action=query&list=mystashedfiles module, gets all stashed files for
+ * the current user.
+ *
+ * @ingroup API
+ */
+class ApiQueryMyStashedFiles extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'msf' );
+ }
+
+ public function execute() {
+ $user = $this->getUser();
+
+ if ( $user->isAnon() ) {
+ $this->dieWithError( 'apierror-mustbeloggedin-uploadstash', 'stashnotloggedin' );
+ }
+
+ // Note: If user is logged in but cannot upload, they can still see
+ // the list of stashed uploads...but it will probably be empty.
+
+ $params = $this->extractRequestParams();
+
+ $this->addTables( 'uploadstash' );
+
+ $this->addFields( [ 'us_id', 'us_key', 'us_status' ] );
+
+ $this->addWhere( [ 'us_user' => $user->getId() ] );
+
+ if ( $params['continue'] !== null ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 1 );
+ $cont_from = (int)$cont[0];
+ $this->dieContinueUsageIf( strval( $cont_from ) !== $cont[0] );
+ $this->addWhere( "us_id >= $cont_from" );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $this->addOption( 'ORDER BY', 'us_id' );
+
+ $prop = array_flip( $params['prop'] );
+ $this->addFieldsIf(
+ [
+ 'us_size',
+ 'us_image_width',
+ 'us_image_height',
+ 'us_image_bits'
+ ],
+
+ isset( $prop['size'] )
+ );
+ $this->addFieldsIf( [ 'us_mime', 'us_media_type' ], isset( $prop['type'] ) );
+
+ $res = $this->select( __METHOD__ );
+ $result = $this->getResult();
+ $count = 0;
+
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional files to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->us_id );
+ break;
+ }
+
+ $item = [
+ 'filekey' => $row->us_key,
+ 'status' => $row->us_status,
+ ];
+
+ if ( isset( $prop['size'] ) ) {
+ $item['size'] = (int)$row->us_size;
+ $item['width'] = (int)$row->us_image_width;
+ $item['height'] = (int)$row->us_image_height;
+ $item['bits'] = (int)$row->us_image_bits;
+ }
+
+ if ( isset( $prop['type'] ) ) {
+ $item['mimetype'] = $row->us_mime;
+ $item['mediatype'] = $row->us_media_type;
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $item );
+
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->us_id );
+ break;
+ }
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'file' );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_TYPE => [ 'size', 'type' ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+
+ 'limit' => [
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+ ],
+
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=mystashedfiles&msfprop=size'
+ => 'apihelp-query+mystashedfiles-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:mystashedfiles';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryPagePropNames.php b/www/wiki/includes/api/ApiQueryPagePropNames.php
new file mode 100644
index 00000000..f280ef06
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryPagePropNames.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Copyright © 2013 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.21
+ */
+
+/**
+ * A query module to list used page props
+ *
+ * @ingroup API
+ * @since 1.21
+ */
+class ApiQueryPagePropNames extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ppn' );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $this->addTables( 'page_props' );
+ $this->addFields( 'pp_propname' );
+ $this->addOption( 'DISTINCT' );
+ $this->addOption( 'ORDER BY', 'pp_propname' );
+
+ if ( $params['continue'] ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 1 );
+
+ // Add a WHERE clause
+ $this->addWhereRange( 'pp_propname', 'newer', $cont[0], null );
+ }
+
+ $limit = $params['limit'];
+
+ // mysql has issues with limit in loose index T115825
+ if ( $this->getDB()->getType() !== 'mysql' ) {
+ $this->addOption( 'LIMIT', $limit + 1 );
+ }
+
+ $result = $this->getResult();
+ $count = 0;
+ foreach ( $this->select( __METHOD__ ) as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->pp_propname );
+ break;
+ }
+
+ $vals = [];
+ $vals['propname'] = $row->pp_propname;
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->pp_propname );
+ break;
+ }
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'p' );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=pagepropnames'
+ => 'apihelp-query+pagepropnames-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Pagepropnames';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryPageProps.php b/www/wiki/includes/api/ApiQueryPageProps.php
new file mode 100644
index 00000000..2bee6983
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryPageProps.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright © 2010 soxred93, Bryan Tong Minh
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query module to show basic page information.
+ *
+ * @ingroup API
+ */
+class ApiQueryPageProps extends ApiQueryBase {
+
+ private $params;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'pp' );
+ }
+
+ public function execute() {
+ # Only operate on existing pages
+ $pages = $this->getPageSet()->getGoodTitles();
+
+ $this->params = $this->extractRequestParams();
+ if ( $this->params['continue'] ) {
+ $continueValue = intval( $this->params['continue'] );
+ $this->dieContinueUsageIf( strval( $continueValue ) !== $this->params['continue'] );
+ $filteredPages = [];
+ foreach ( $pages as $id => $page ) {
+ if ( $id >= $continueValue ) {
+ $filteredPages[$id] = $page;
+ }
+ }
+ $pages = $filteredPages;
+ }
+
+ if ( !count( $pages ) ) {
+ # Nothing to do
+ return;
+ }
+
+ $pageProps = PageProps::getInstance();
+ $result = $this->getResult();
+ if ( $this->params['prop'] ) {
+ $propnames = $this->params['prop'];
+ $properties = $pageProps->getProperties( $pages, $propnames );
+ } else {
+ $properties = $pageProps->getAllProperties( $pages );
+ }
+
+ ksort( $properties );
+
+ foreach ( $properties as $page => $props ) {
+ if ( !$this->addPageProps( $result, $page, $props ) ) {
+ break;
+ }
+ }
+ }
+
+ /**
+ * Add page properties to an ApiResult, adding a continue
+ * parameter if it doesn't fit.
+ *
+ * @param ApiResult $result
+ * @param int $page
+ * @param array $props
+ * @return bool True if it fits in the result
+ */
+ private function addPageProps( $result, $page, $props ) {
+ ApiResult::setArrayType( $props, 'assoc' );
+ $fit = $result->addValue( [ 'query', 'pages', $page ], 'pageprops', $props );
+
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $page );
+ }
+
+ return $fit;
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=pageprops&titles=Main%20Page|MediaWiki'
+ => 'apihelp-query+pageprops-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Pageprops';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryPagesWithProp.php b/www/wiki/includes/api/ApiQueryPagesWithProp.php
new file mode 100644
index 00000000..06b412f8
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryPagesWithProp.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * Copyright © 2012 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.21
+ */
+
+/**
+ * A query module to enumerate pages that use a particular prop
+ *
+ * @ingroup API
+ * @since 1.21
+ */
+class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'pwp' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ $prop = array_flip( $params['prop'] );
+ $fld_ids = isset( $prop['ids'] );
+ $fld_title = isset( $prop['title'] );
+ $fld_value = isset( $prop['value'] );
+
+ if ( $resultPageSet === null ) {
+ $this->addFields( [ 'page_id' ] );
+ $this->addFieldsIf( [ 'page_title', 'page_namespace' ], $fld_title );
+ $this->addFieldsIf( 'pp_value', $fld_value );
+ } else {
+ $this->addFields( $resultPageSet->getPageTableFields() );
+ }
+ $this->addTables( [ 'page_props', 'page' ] );
+ $this->addWhere( 'pp_page=page_id' );
+ $this->addWhereFld( 'pp_propname', $params['propname'] );
+
+ $dir = ( $params['dir'] == 'ascending' ) ? 'newer' : 'older';
+
+ if ( $params['continue'] ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 1 );
+
+ // Add a WHERE clause
+ $from = (int)$cont[0];
+ $this->addWhereRange( 'pp_page', $dir, $from, null );
+ }
+
+ $sort = ( $params['dir'] === 'descending' ? ' DESC' : '' );
+ $this->addOption( 'ORDER BY', 'pp_page' . $sort );
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+
+ $result = $this->getResult();
+ $count = 0;
+ foreach ( $this->select( __METHOD__ ) as $row ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $row->page_id );
+ break;
+ }
+
+ if ( $resultPageSet === null ) {
+ $vals = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ if ( $fld_ids ) {
+ $vals['pageid'] = (int)$row->page_id;
+ }
+ if ( $fld_title ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+ if ( $fld_value ) {
+ $vals['value'] = $row->pp_value;
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $row->page_id );
+ break;
+ }
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+
+ if ( $resultPageSet === null ) {
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'page' );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'propname' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'ids|title',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'ids',
+ 'title',
+ 'value',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending',
+ ]
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
+ => 'apihelp-query+pageswithprop-example-simple',
+ 'action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
+ => 'apihelp-query+pageswithprop-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Pageswithprop';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryPrefixSearch.php b/www/wiki/includes/api/ApiQueryPrefixSearch.php
new file mode 100644
index 00000000..2fbc518b
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryPrefixSearch.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.23
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
+ use SearchApi;
+
+ /** @var array list of api allowed params */
+ private $allowedParams;
+
+ public function __construct( $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ps' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ private function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+ $search = $params['search'];
+ $limit = $params['limit'];
+ $offset = $params['offset'];
+
+ $searchEngine = $this->buildSearchEngine( $params );
+ $titles = $searchEngine->extractTitles( $searchEngine->completionSearchWithVariants( $search ) );
+
+ if ( $resultPageSet ) {
+ $resultPageSet->setRedirectMergePolicy( function ( array $current, array $new ) {
+ if ( !isset( $current['index'] ) || $new['index'] < $current['index'] ) {
+ $current['index'] = $new['index'];
+ }
+ return $current;
+ } );
+ if ( count( $titles ) > $limit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $limit );
+ array_pop( $titles );
+ }
+ $resultPageSet->populateFromTitles( $titles );
+ foreach ( $titles as $index => $title ) {
+ $resultPageSet->setGeneratorData( $title, [ 'index' => $index + $offset + 1 ] );
+ }
+ } else {
+ $result = $this->getResult();
+ $count = 0;
+ foreach ( $titles as $title ) {
+ if ( ++$count > $limit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $limit );
+ break;
+ }
+ $vals = [
+ 'ns' => intval( $title->getNamespace() ),
+ 'title' => $title->getPrefixedText(),
+ ];
+ if ( $title->isSpecialPage() ) {
+ $vals['special'] = true;
+ } else {
+ $vals['pageid'] = intval( $title->getArticleID() );
+ }
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
+ break;
+ }
+ }
+ $result->addIndexedTagName(
+ [ 'query', $this->getModuleName() ], $this->getModulePrefix()
+ );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ if ( $this->allowedParams !== null ) {
+ return $this->allowedParams;
+ }
+ $this->allowedParams = $this->buildCommonApiParams();
+
+ return $this->allowedParams;
+ }
+
+ public function getSearchProfileParams() {
+ return [
+ 'profile' => [
+ 'profile-type' => SearchEngine::COMPLETION_PROFILE_TYPE,
+ 'help-message' => 'apihelp-query+prefixsearch-param-profile',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=prefixsearch&pssearch=meaning'
+ => 'apihelp-query+prefixsearch-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Prefixsearch';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryProtectedTitles.php b/www/wiki/includes/api/ApiQueryProtectedTitles.php
new file mode 100644
index 00000000..f5266850
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryProtectedTitles.php
@@ -0,0 +1,244 @@
+<?php
+/**
+ * Copyright © 2009 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all create-protected pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'pt' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ $this->addTables( 'protected_titles' );
+ $this->addFields( [ 'pt_namespace', 'pt_title', 'pt_timestamp' ] );
+
+ $prop = array_flip( $params['prop'] );
+ $this->addFieldsIf( 'pt_user', isset( $prop['user'] ) || isset( $prop['userid'] ) );
+ $this->addFieldsIf( 'pt_expiry', isset( $prop['expiry'] ) );
+ $this->addFieldsIf( 'pt_create_perm', isset( $prop['level'] ) );
+
+ if ( isset( $prop['comment'] ) || isset( $prop['parsedcomment'] ) ) {
+ $commentStore = CommentStore::getStore();
+ $commentQuery = $commentStore->getJoin( 'pt_reason' );
+ $this->addTables( $commentQuery['tables'] );
+ $this->addFields( $commentQuery['fields'] );
+ $this->addJoinConds( $commentQuery['joins'] );
+ }
+
+ $this->addTimestampWhereRange( 'pt_timestamp', $params['dir'], $params['start'], $params['end'] );
+ $this->addWhereFld( 'pt_namespace', $params['namespace'] );
+ $this->addWhereFld( 'pt_create_perm', $params['level'] );
+
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'pt_namespace', $params['dir'], null, null );
+ $this->addWhereRange( 'pt_title', $params['dir'], null, null );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 3 );
+ $op = ( $params['dir'] === 'newer' ? '>' : '<' );
+ $db = $this->getDB();
+ $continueTimestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $continueNs = (int)$cont[1];
+ $this->dieContinueUsageIf( $continueNs != $cont[1] );
+ $continueTitle = $db->addQuotes( $cont[2] );
+ $this->addWhere( "pt_timestamp $op $continueTimestamp OR " .
+ "(pt_timestamp = $continueTimestamp AND " .
+ "(pt_namespace $op $continueNs OR " .
+ "(pt_namespace = $continueNs AND " .
+ "pt_title $op= $continueTitle)))"
+ );
+ }
+
+ if ( isset( $prop['user'] ) ) {
+ $this->addTables( 'user' );
+ $this->addFields( 'user_name' );
+ $this->addJoinConds( [ 'user' => [ 'LEFT JOIN',
+ 'user_id=pt_user'
+ ] ] );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ $result = $this->getResult();
+
+ $titles = [];
+
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue',
+ "$row->pt_timestamp|$row->pt_namespace|$row->pt_title"
+ );
+ break;
+ }
+
+ $title = Title::makeTitle( $row->pt_namespace, $row->pt_title );
+ if ( is_null( $resultPageSet ) ) {
+ $vals = [];
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ if ( isset( $prop['timestamp'] ) ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->pt_timestamp );
+ }
+
+ if ( isset( $prop['user'] ) && !is_null( $row->user_name ) ) {
+ $vals['user'] = $row->user_name;
+ }
+
+ if ( isset( $prop['userid'] ) || /*B/C*/isset( $prop['user'] ) ) {
+ $vals['userid'] = (int)$row->pt_user;
+ }
+
+ if ( isset( $prop['comment'] ) ) {
+ $vals['comment'] = $commentStore->getComment( 'pt_reason', $row )->text;
+ }
+
+ if ( isset( $prop['parsedcomment'] ) ) {
+ $vals['parsedcomment'] = Linker::formatComment(
+ $commentStore->getComment( 'pt_reason', $row )->text, $titles
+ );
+ }
+
+ if ( isset( $prop['expiry'] ) ) {
+ $vals['expiry'] = ApiResult::formatExpiry( $row->pt_expiry );
+ }
+
+ if ( isset( $prop['level'] ) ) {
+ $vals['level'] = $row->pt_create_perm;
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue',
+ "$row->pt_timestamp|$row->pt_namespace|$row->pt_title"
+ );
+ break;
+ }
+ } else {
+ $titles[] = $title;
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName(
+ [ 'query', $this->getModuleName() ],
+ $this->getModulePrefix()
+ );
+ } else {
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
+ // formatComment() calls wfMessage() among other things
+ return 'anon-public-user-private';
+ } else {
+ return 'public';
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ],
+ 'level' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => array_diff( $this->getConfig()->get( 'RestrictionLevels' ), [ '' ] )
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'timestamp|level',
+ ApiBase::PARAM_TYPE => [
+ 'timestamp',
+ 'user',
+ 'userid',
+ 'comment',
+ 'parsedcomment',
+ 'expiry',
+ 'level'
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=protectedtitles'
+ => 'apihelp-query+protectedtitles-example-simple',
+ 'action=query&generator=protectedtitles&gptnamespace=0&prop=linkshere'
+ => 'apihelp-query+protectedtitles-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Protectedtitles';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryQueryPage.php b/www/wiki/includes/api/ApiQueryQueryPage.php
new file mode 100644
index 00000000..a828e117
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryQueryPage.php
@@ -0,0 +1,167 @@
+<?php
+/**
+ * Copyright © 2010 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to get the results of a QueryPage-based special page
+ *
+ * @ingroup API
+ */
+class ApiQueryQueryPage extends ApiQueryGeneratorBase {
+ private $qpMap;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'qp' );
+ // Build mapping from special page names to QueryPage classes
+ $uselessQueryPages = $this->getConfig()->get( 'APIUselessQueryPages' );
+ $this->qpMap = [];
+ foreach ( QueryPage::getPages() as $page ) {
+ if ( !in_array( $page[1], $uselessQueryPages ) ) {
+ $this->qpMap[$page[1]] = $page[0];
+ }
+ }
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ */
+ public function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+ $result = $this->getResult();
+
+ /** @var QueryPage $qp */
+ $qp = new $this->qpMap[$params['page']]();
+ if ( !$qp->userCanExecute( $this->getUser() ) ) {
+ $this->dieWithError( 'apierror-specialpage-cantexecute' );
+ }
+
+ $r = [ 'name' => $params['page'] ];
+ if ( $qp->isCached() ) {
+ if ( !$qp->isCacheable() ) {
+ $r['disabled'] = true;
+ } else {
+ $r['cached'] = true;
+ $ts = $qp->getCachedTimestamp();
+ if ( $ts ) {
+ $r['cachedtimestamp'] = wfTimestamp( TS_ISO_8601, $ts );
+ }
+ $r['maxresults'] = $this->getConfig()->get( 'QueryCacheLimit' );
+ }
+ }
+ $result->addValue( [ 'query' ], $this->getModuleName(), $r );
+
+ if ( $qp->isCached() && !$qp->isCacheable() ) {
+ // Disabled query page, don't run the query
+ return;
+ }
+
+ $res = $qp->doQuery( $params['offset'], $params['limit'] + 1 );
+ $count = 0;
+ $titles = [];
+ foreach ( $res as $row ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've had enough
+ $this->setContinueEnumParameter( 'offset', $params['offset'] + $params['limit'] );
+ break;
+ }
+
+ $title = Title::makeTitle( $row->namespace, $row->title );
+ if ( is_null( $resultPageSet ) ) {
+ $data = [ 'value' => $row->value ];
+ if ( $qp->usesTimestamps() ) {
+ $data['timestamp'] = wfTimestamp( TS_ISO_8601, $row->value );
+ }
+ self::addTitleInfo( $data, $title );
+
+ foreach ( $row as $field => $value ) {
+ if ( !in_array( $field, [ 'namespace', 'title', 'value', 'qc_type' ] ) ) {
+ $data['databaseResult'][$field] = $value;
+ }
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName(), 'results' ], null, $data );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'offset', $params['offset'] + $count - 1 );
+ break;
+ }
+ } else {
+ $titles[] = $title;
+ }
+ }
+ if ( is_null( $resultPageSet ) ) {
+ $result->addIndexedTagName(
+ [ 'query', $this->getModuleName(), 'results' ],
+ 'page'
+ );
+ } else {
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ /** @var QueryPage $qp */
+ $qp = new $this->qpMap[$params['page']]();
+ if ( $qp->getRestriction() != '' ) {
+ return 'private';
+ }
+
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'page' => [
+ ApiBase::PARAM_TYPE => array_keys( $this->qpMap ),
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'offset' => [
+ ApiBase::PARAM_DFLT => 0,
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=querypage&qppage=Ancientpages'
+ => 'apihelp-query+querypage-example-ancientpages',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Querypage';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryRandom.php b/www/wiki/includes/api/ApiQueryRandom.php
new file mode 100644
index 00000000..636191d3
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryRandom.php
@@ -0,0 +1,219 @@
+<?php
+
+/**
+ * Copyright © 2008 Brent Garber
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to get list of random pages
+ *
+ * @ingroup API
+ */
+class ApiQueryRandom extends ApiQueryGeneratorBase {
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'rn' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * Actually perform the query and add pages to the result.
+ * @param ApiPageSet|null $resultPageSet
+ * @param int $limit Number of pages to fetch
+ * @param string|null $start Starting page_random
+ * @param int $startId Starting page_id
+ * @param string|null $end Ending page_random
+ * @return array (int, string|null) Number of pages left to query and continuation string
+ */
+ protected function runQuery( $resultPageSet, $limit, $start, $startId, $end ) {
+ $params = $this->extractRequestParams();
+
+ $this->resetQueryParams();
+ $this->addTables( 'page' );
+ $this->addFields( [ 'page_id', 'page_random' ] );
+ if ( is_null( $resultPageSet ) ) {
+ $this->addFields( [ 'page_title', 'page_namespace' ] );
+ } else {
+ $this->addFields( $resultPageSet->getPageTableFields() );
+ }
+ $this->addWhereFld( 'page_namespace', $params['namespace'] );
+ if ( $params['redirect'] || $params['filterredir'] === 'redirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 1 );
+ } elseif ( $params['filterredir'] === 'nonredirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 0 );
+ } elseif ( is_null( $resultPageSet ) ) {
+ $this->addFields( [ 'page_is_redirect' ] );
+ }
+ $this->addOption( 'LIMIT', $limit + 1 );
+
+ if ( $start !== null ) {
+ $start = $this->getDB()->addQuotes( $start );
+ if ( $startId > 0 ) {
+ $startId = (int)$startId; // safety
+ $this->addWhere( "page_random = $start AND page_id >= $startId OR page_random > $start" );
+ } else {
+ $this->addWhere( "page_random >= $start" );
+ }
+ }
+ if ( $end !== null ) {
+ $this->addWhere( 'page_random < ' . $this->getDB()->addQuotes( $end ) );
+ }
+ $this->addOption( 'ORDER BY', [ 'page_random', 'page_id' ] );
+
+ $result = $this->getResult();
+ $path = [ 'query', $this->getModuleName() ];
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( $count++ >= $limit ) {
+ return [ 0, "{$row->page_random}|{$row->page_id}" ];
+ }
+ if ( is_null( $resultPageSet ) ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $page = [
+ 'id' => (int)$row->page_id,
+ ];
+ ApiQueryBase::addTitleInfo( $page, $title );
+ if ( isset( $row->page_is_redirect ) ) {
+ $page['redirect'] = (bool)$row->page_is_redirect;
+ }
+ $fit = $result->addValue( $path, null, $page );
+ if ( !$fit ) {
+ return [ 0, "{$row->page_random}|{$row->page_id}" ];
+ }
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+
+ return [ $limit - $count, null ];
+ }
+
+ /**
+ * @param ApiPageSet|null $resultPageSet
+ */
+ public function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ // Since 'filterredir" will always be set in $params, we have to dig
+ // into the WebRequest to see if it was actually passed.
+ $request = $this->getMain()->getRequest();
+ if ( $request->getCheck( $this->encodeParamName( 'filterredir' ) ) ) {
+ $this->requireMaxOneParameter( $params, 'filterredir', 'redirect' );
+ }
+
+ if ( isset( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 4 );
+ $rand = $cont[0];
+ $start = $cont[1];
+ $startId = (int)$cont[2];
+ $end = $cont[3] ? $rand : null;
+ $this->dieContinueUsageIf( !preg_match( '/^0\.\d+$/', $rand ) );
+ $this->dieContinueUsageIf( !preg_match( '/^0\.\d+$/', $start ) );
+ $this->dieContinueUsageIf( $cont[2] !== (string)$startId );
+ $this->dieContinueUsageIf( $cont[3] !== '0' && $cont[3] !== '1' );
+ } else {
+ $rand = wfRandom();
+ $start = $rand;
+ $startId = 0;
+ $end = null;
+ }
+
+ // Set the non-continue if this is being used as a generator
+ // (as a list it doesn't matter because lists never non-continue)
+ if ( $resultPageSet !== null ) {
+ $endFlag = $end === null ? 0 : 1;
+ $this->getContinuationManager()->addGeneratorNonContinueParam(
+ $this, 'continue', "$rand|$start|$startId|$endFlag"
+ );
+ }
+
+ list( $left, $continue ) =
+ $this->runQuery( $resultPageSet, $params['limit'], $start, $startId, $end );
+ if ( $end === null && $continue === null ) {
+ // Wrap around. We do this even if $left === 0 for continuation
+ // (saving a DB query in this rare case probably isn't worth the
+ // added code complexity it would require).
+ $end = $rand;
+ list( $left, $continue ) = $this->runQuery( $resultPageSet, $left, null, null, $end );
+ }
+
+ if ( $continue !== null ) {
+ $endFlag = $end === null ? 0 : 1;
+ $this->setContinueEnumParameter( 'continue', "$rand|$continue|$endFlag" );
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $this->getResult()->addIndexedTagName( [ 'query', $this->getModuleName() ], 'page' );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'namespace' => [
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'filterredir' => [
+ ApiBase::PARAM_TYPE => [ 'all', 'redirects', 'nonredirects' ],
+ ApiBase::PARAM_DFLT => 'nonredirects', // for BC
+ ],
+ 'redirect' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_DFLT => false,
+ ],
+ 'limit' => [
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_DFLT => 1,
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue'
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=random&rnnamespace=0&rnlimit=2'
+ => 'apihelp-query+random-example-simple',
+ 'action=query&generator=random&grnnamespace=0&grnlimit=2&prop=info'
+ => 'apihelp-query+random-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Random';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryRecentChanges.php b/www/wiki/includes/api/ApiQueryRecentChanges.php
new file mode 100644
index 00000000..864b1828
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryRecentChanges.php
@@ -0,0 +1,754 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query action to enumerate the recent changes that were done to the wiki.
+ * Various filters are supported.
+ *
+ * @ingroup API
+ */
+class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'rc' );
+ }
+
+ private $commentStore;
+
+ private $fld_comment = false, $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
+ $fld_flags = false, $fld_timestamp = false, $fld_title = false, $fld_ids = false,
+ $fld_sizes = false, $fld_redirect = false, $fld_patrolled = false, $fld_loginfo = false,
+ $fld_tags = false, $fld_sha1 = false, $token = [];
+
+ private $tokenFunctions;
+
+ /**
+ * Get an array mapping token names to their handler functions.
+ * The prototype for a token function is func($pageid, $title, $rc)
+ * it should return a token or false (permission denied)
+ * @deprecated since 1.24
+ * @return array [ tokenname => function ]
+ */
+ protected function getTokenFunctions() {
+ // Don't call the hooks twice
+ if ( isset( $this->tokenFunctions ) ) {
+ return $this->tokenFunctions;
+ }
+
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ return [];
+ }
+
+ $this->tokenFunctions = [
+ 'patrol' => [ self::class, 'getPatrolToken' ]
+ ];
+ Hooks::run( 'APIQueryRecentChangesTokens', [ &$this->tokenFunctions ] );
+
+ return $this->tokenFunctions;
+ }
+
+ /**
+ * @deprecated since 1.24
+ * @param int $pageid
+ * @param Title $title
+ * @param RecentChange|null $rc
+ * @return bool|string
+ */
+ public static function getPatrolToken( $pageid, $title, $rc = null ) {
+ global $wgUser;
+
+ $validTokenUser = false;
+
+ if ( $rc ) {
+ if ( ( $wgUser->useRCPatrol() && $rc->getAttribute( 'rc_type' ) == RC_EDIT ) ||
+ ( $wgUser->useNPPatrol() && $rc->getAttribute( 'rc_type' ) == RC_NEW )
+ ) {
+ $validTokenUser = true;
+ }
+ } elseif ( $wgUser->useRCPatrol() || $wgUser->useNPPatrol() ) {
+ $validTokenUser = true;
+ }
+
+ if ( $validTokenUser ) {
+ // The patrol token is always the same, let's exploit that
+ static $cachedPatrolToken = null;
+
+ if ( is_null( $cachedPatrolToken ) ) {
+ $cachedPatrolToken = $wgUser->getEditToken( 'patrol' );
+ }
+
+ return $cachedPatrolToken;
+ }
+
+ return false;
+ }
+
+ /**
+ * Sets internal state to include the desired properties in the output.
+ * @param array $prop Associative array of properties, only keys are used here
+ */
+ public function initProperties( $prop ) {
+ $this->fld_comment = isset( $prop['comment'] );
+ $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
+ $this->fld_user = isset( $prop['user'] );
+ $this->fld_userid = isset( $prop['userid'] );
+ $this->fld_flags = isset( $prop['flags'] );
+ $this->fld_timestamp = isset( $prop['timestamp'] );
+ $this->fld_title = isset( $prop['title'] );
+ $this->fld_ids = isset( $prop['ids'] );
+ $this->fld_sizes = isset( $prop['sizes'] );
+ $this->fld_redirect = isset( $prop['redirect'] );
+ $this->fld_patrolled = isset( $prop['patrolled'] );
+ $this->fld_loginfo = isset( $prop['loginfo'] );
+ $this->fld_tags = isset( $prop['tags'] );
+ $this->fld_sha1 = isset( $prop['sha1'] );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * Generates and outputs the result of this query based upon the provided parameters.
+ *
+ * @param ApiPageSet $resultPageSet
+ */
+ public function run( $resultPageSet = null ) {
+ $user = $this->getUser();
+ /* Get the parameters of the request. */
+ $params = $this->extractRequestParams();
+
+ /* Build our basic query. Namely, something along the lines of:
+ * SELECT * FROM recentchanges WHERE rc_timestamp > $start
+ * AND rc_timestamp < $end AND rc_namespace = $namespace
+ */
+ $this->addTables( 'recentchanges' );
+ $this->addTimestampWhereRange( 'rc_timestamp', $params['dir'], $params['start'], $params['end'] );
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $db = $this->getDB();
+ $timestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $id = intval( $cont[1] );
+ $this->dieContinueUsageIf( $id != $cont[1] );
+ $op = $params['dir'] === 'older' ? '<' : '>';
+ $this->addWhere(
+ "rc_timestamp $op $timestamp OR " .
+ "(rc_timestamp = $timestamp AND " .
+ "rc_id $op= $id)"
+ );
+ }
+
+ $order = $params['dir'] === 'older' ? 'DESC' : 'ASC';
+ $this->addOption( 'ORDER BY', [
+ "rc_timestamp $order",
+ "rc_id $order",
+ ] );
+
+ $this->addWhereFld( 'rc_namespace', $params['namespace'] );
+
+ if ( !is_null( $params['type'] ) ) {
+ try {
+ $this->addWhereFld( 'rc_type', RecentChange::parseToRCType( $params['type'] ) );
+ } catch ( Exception $e ) {
+ ApiBase::dieDebug( __METHOD__, $e->getMessage() );
+ }
+ }
+
+ if ( !is_null( $params['show'] ) ) {
+ $show = array_flip( $params['show'] );
+
+ /* Check for conflicting parameters. */
+ if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
+ || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
+ || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
+ || ( isset( $show['redirect'] ) && isset( $show['!redirect'] ) )
+ || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+ || ( isset( $show['patrolled'] ) && isset( $show['unpatrolled'] ) )
+ || ( isset( $show['!patrolled'] ) && isset( $show['unpatrolled'] ) )
+ || ( isset( $show['autopatrolled'] ) && isset( $show['!autopatrolled'] ) )
+ || ( isset( $show['autopatrolled'] ) && isset( $show['unpatrolled'] ) )
+ || ( isset( $show['autopatrolled'] ) && isset( $show['!patrolled'] ) )
+ ) {
+ $this->dieWithError( 'apierror-show' );
+ }
+
+ // Check permissions
+ if ( $this->includesPatrollingFlags( $show ) ) {
+ if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
+ $this->dieWithError( 'apierror-permissiondenied-patrolflag', 'permissiondenied' );
+ }
+ }
+
+ /* Add additional conditions to query depending upon parameters. */
+ $this->addWhereIf( 'rc_minor = 0', isset( $show['!minor'] ) );
+ $this->addWhereIf( 'rc_minor != 0', isset( $show['minor'] ) );
+ $this->addWhereIf( 'rc_bot = 0', isset( $show['!bot'] ) );
+ $this->addWhereIf( 'rc_bot != 0', isset( $show['bot'] ) );
+ if ( isset( $show['anon'] ) || isset( $show['!anon'] ) ) {
+ $actorMigration = ActorMigration::newMigration();
+ $actorQuery = $actorMigration->getJoin( 'rc_user' );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhereIf(
+ $actorMigration->isAnon( $actorQuery['fields']['rc_user'] ), isset( $show['anon'] )
+ );
+ $this->addWhereIf(
+ $actorMigration->isNotAnon( $actorQuery['fields']['rc_user'] ), isset( $show['!anon'] )
+ );
+ }
+ $this->addWhereIf( 'rc_patrolled = 0', isset( $show['!patrolled'] ) );
+ $this->addWhereIf( 'rc_patrolled != 0', isset( $show['patrolled'] ) );
+ $this->addWhereIf( 'page_is_redirect = 1', isset( $show['redirect'] ) );
+
+ if ( isset( $show['unpatrolled'] ) ) {
+ // See ChangesList::isUnpatrolled
+ if ( $user->useRCPatrol() ) {
+ $this->addWhere( 'rc_patrolled = ' . RecentChange::PRC_UNPATROLLED );
+ } elseif ( $user->useNPPatrol() ) {
+ $this->addWhere( 'rc_patrolled = ' . RecentChange::PRC_UNPATROLLED );
+ $this->addWhereFld( 'rc_type', RC_NEW );
+ }
+ }
+
+ $this->addWhereIf(
+ 'rc_patrolled != ' . RecentChange::PRC_AUTOPATROLLED,
+ isset( $show['!autopatrolled'] )
+ );
+ $this->addWhereIf(
+ 'rc_patrolled = ' . RecentChange::PRC_AUTOPATROLLED,
+ isset( $show['autopatrolled'] )
+ );
+
+ // Don't throw log entries out the window here
+ $this->addWhereIf(
+ 'page_is_redirect = 0 OR page_is_redirect IS NULL',
+ isset( $show['!redirect'] )
+ );
+ }
+
+ $this->requireMaxOneParameter( $params, 'user', 'excludeuser' );
+
+ if ( !is_null( $params['user'] ) ) {
+ // Don't query by user ID here, it might be able to use the rc_user_text index.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $this->getDB(), 'rc_user', User::newFromName( $params['user'], false ), false );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( $actorQuery['conds'] );
+ }
+
+ if ( !is_null( $params['excludeuser'] ) ) {
+ // Here there's no chance to use the rc_user_text index, so allow ID to be used.
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $this->getDB(), 'rc_user', User::newFromName( $params['excludeuser'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( 'NOT(' . $actorQuery['conds'] . ')' );
+ }
+
+ /* Add the fields we're concerned with to our query. */
+ $this->addFields( [
+ 'rc_id',
+ 'rc_timestamp',
+ 'rc_namespace',
+ 'rc_title',
+ 'rc_cur_id',
+ 'rc_type',
+ 'rc_deleted'
+ ] );
+
+ $showRedirects = false;
+ /* Determine what properties we need to display. */
+ if ( !is_null( $params['prop'] ) ) {
+ $prop = array_flip( $params['prop'] );
+
+ /* Set up internal members based upon params. */
+ $this->initProperties( $prop );
+
+ if ( $this->fld_patrolled && !$user->useRCPatrol() && !$user->useNPPatrol() ) {
+ $this->dieWithError( 'apierror-permissiondenied-patrolflag', 'permissiondenied' );
+ }
+
+ /* Add fields to our query if they are specified as a needed parameter. */
+ $this->addFieldsIf( [ 'rc_this_oldid', 'rc_last_oldid' ], $this->fld_ids );
+ if ( $this->fld_user || $this->fld_userid ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rc_user' );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addFields( $actorQuery['fields'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ }
+ $this->addFieldsIf( [ 'rc_minor', 'rc_type', 'rc_bot' ], $this->fld_flags );
+ $this->addFieldsIf( [ 'rc_old_len', 'rc_new_len' ], $this->fld_sizes );
+ $this->addFieldsIf( [ 'rc_patrolled', 'rc_log_type' ], $this->fld_patrolled );
+ $this->addFieldsIf(
+ [ 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ],
+ $this->fld_loginfo
+ );
+ $showRedirects = $this->fld_redirect || isset( $show['redirect'] )
+ || isset( $show['!redirect'] );
+ }
+ $this->addFieldsIf( [ 'rc_this_oldid' ],
+ $resultPageSet && $params['generaterevisions'] );
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds( [ 'tag_summary' => [ 'LEFT JOIN', [ 'rc_id=ts_rc_id' ] ] ] );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( $this->fld_sha1 ) {
+ $this->addTables( 'revision' );
+ $this->addJoinConds( [ 'revision' => [ 'LEFT JOIN',
+ [ 'rc_this_oldid=rev_id' ] ] ] );
+ $this->addFields( [ 'rev_sha1', 'rev_deleted' ] );
+ }
+
+ if ( $params['toponly'] || $showRedirects ) {
+ $this->addTables( 'page' );
+ $this->addJoinConds( [ 'page' => [ 'LEFT JOIN',
+ [ 'rc_namespace=page_namespace', 'rc_title=page_title' ] ] ] );
+ $this->addFields( 'page_is_redirect' );
+
+ if ( $params['toponly'] ) {
+ $this->addWhere( 'rc_this_oldid = page_latest' );
+ }
+ }
+
+ if ( !is_null( $params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds( [ 'change_tag' => [ 'INNER JOIN', [ 'rc_id=ct_rc_id' ] ] ] );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ // Paranoia: avoid brute force searches (T19342)
+ if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $this->getDB()->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+ if ( $this->getRequest()->getCheck( 'namespace' ) ) {
+ // LogPage::DELETED_ACTION hides the affected page, too.
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = LogPage::DELETED_ACTION;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $this->getDB()->makeList( [
+ 'rc_type != ' . RC_LOG,
+ $this->getDB()->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask",
+ ], LIST_OR ) );
+ }
+ }
+
+ $this->token = $params['token'];
+
+ if ( $this->fld_comment || $this->fld_parsedcomment || $this->token ) {
+ $this->commentStore = CommentStore::getStore();
+ $commentQuery = $this->commentStore->getJoin( 'rc_comment' );
+ $this->addTables( $commentQuery['tables'] );
+ $this->addFields( $commentQuery['fields'] );
+ $this->addJoinConds( $commentQuery['joins'] );
+ }
+
+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+ $hookData = [];
+ $count = 0;
+ /* Perform the actual query. */
+ $res = $this->select( __METHOD__, [], $hookData );
+
+ $revids = [];
+ $titles = [];
+
+ $result = $this->getResult();
+
+ /* Iterate through the rows, adding data extracted from them to our query result. */
+ foreach ( $res as $row ) {
+ if ( $count === 0 && $resultPageSet !== null ) {
+ // Set the non-continue since the list of recentchanges is
+ // prone to having entries added at the start frequently.
+ $this->getContinuationManager()->addGeneratorNonContinueParam(
+ $this, 'continue', "$row->rc_timestamp|$row->rc_id"
+ );
+ }
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', "$row->rc_timestamp|$row->rc_id" );
+ break;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ /* Extract the data from a single row. */
+ $vals = $this->extractRowInfo( $row );
+
+ /* Add that row's data to our final output. */
+ $fit = $this->processRow( $row, $vals, $hookData ) &&
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', "$row->rc_timestamp|$row->rc_id" );
+ break;
+ }
+ } elseif ( $params['generaterevisions'] ) {
+ $revid = (int)$row->rc_this_oldid;
+ if ( $revid > 0 ) {
+ $revids[] = $revid;
+ }
+ } else {
+ $titles[] = Title::makeTitle( $row->rc_namespace, $row->rc_title );
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ /* Format the result */
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'rc' );
+ } elseif ( $params['generaterevisions'] ) {
+ $resultPageSet->populateFromRevisionIDs( $revids );
+ } else {
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ /**
+ * Extracts from a single sql row the data needed to describe one recent change.
+ *
+ * @param stdClass $row The row from which to extract the data.
+ * @return array An array mapping strings (descriptors) to their respective string values.
+ * @access public
+ */
+ public function extractRowInfo( $row ) {
+ /* Determine the title of the page that has been changed. */
+ $title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
+ $user = $this->getUser();
+
+ /* Our output data. */
+ $vals = [];
+
+ $type = intval( $row->rc_type );
+ $vals['type'] = RecentChange::parseFromRCType( $type );
+
+ $anyHidden = false;
+
+ /* Create a new entry in the result for the title. */
+ if ( $this->fld_title || $this->fld_ids ) {
+ if ( $type === RC_LOG && ( $row->rc_deleted & LogPage::DELETED_ACTION ) ) {
+ $vals['actionhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $type !== RC_LOG ||
+ LogEventsList::userCanBitfield( $row->rc_deleted, LogPage::DELETED_ACTION, $user )
+ ) {
+ if ( $this->fld_title ) {
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+ if ( $this->fld_ids ) {
+ $vals['pageid'] = intval( $row->rc_cur_id );
+ $vals['revid'] = intval( $row->rc_this_oldid );
+ $vals['old_revid'] = intval( $row->rc_last_oldid );
+ }
+ }
+ }
+
+ if ( $this->fld_ids ) {
+ $vals['rcid'] = intval( $row->rc_id );
+ }
+
+ /* Add user data and 'anon' flag, if user is anonymous. */
+ if ( $this->fld_user || $this->fld_userid ) {
+ if ( $row->rc_deleted & Revision::DELETED_USER ) {
+ $vals['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_USER, $user ) ) {
+ if ( $this->fld_user ) {
+ $vals['user'] = $row->rc_user_text;
+ }
+
+ if ( $this->fld_userid ) {
+ $vals['userid'] = (int)$row->rc_user;
+ }
+
+ if ( !$row->rc_user ) {
+ $vals['anon'] = true;
+ }
+ }
+ }
+
+ /* Add flags, such as new, minor, bot. */
+ if ( $this->fld_flags ) {
+ $vals['bot'] = (bool)$row->rc_bot;
+ $vals['new'] = $row->rc_type == RC_NEW;
+ $vals['minor'] = (bool)$row->rc_minor;
+ }
+
+ /* Add sizes of each revision. (Only available on 1.10+) */
+ if ( $this->fld_sizes ) {
+ $vals['oldlen'] = intval( $row->rc_old_len );
+ $vals['newlen'] = intval( $row->rc_new_len );
+ }
+
+ /* Add the timestamp. */
+ if ( $this->fld_timestamp ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->rc_timestamp );
+ }
+
+ /* Add edit summary / log summary. */
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ if ( $row->rc_deleted & Revision::DELETED_COMMENT ) {
+ $vals['commenthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_COMMENT, $user ) ) {
+ $comment = $this->commentStore->getComment( 'rc_comment', $row )->text;
+ if ( $this->fld_comment ) {
+ $vals['comment'] = $comment;
+ }
+
+ if ( $this->fld_parsedcomment ) {
+ $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
+ }
+ }
+ }
+
+ if ( $this->fld_redirect ) {
+ $vals['redirect'] = (bool)$row->page_is_redirect;
+ }
+
+ /* Add the patrolled flag */
+ if ( $this->fld_patrolled ) {
+ $vals['patrolled'] = $row->rc_patrolled != RecentChange::PRC_UNPATROLLED;
+ $vals['unpatrolled'] = ChangesList::isUnpatrolled( $row, $user );
+ $vals['autopatrolled'] = $row->rc_patrolled == RecentChange::PRC_AUTOPATROLLED;
+ }
+
+ if ( $this->fld_loginfo && $row->rc_type == RC_LOG ) {
+ if ( $row->rc_deleted & LogPage::DELETED_ACTION ) {
+ $vals['actionhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( LogEventsList::userCanBitfield( $row->rc_deleted, LogPage::DELETED_ACTION, $user ) ) {
+ $vals['logid'] = intval( $row->rc_logid );
+ $vals['logtype'] = $row->rc_log_type;
+ $vals['logaction'] = $row->rc_log_action;
+ $vals['logparams'] = LogFormatter::newFromRow( $row )->formatParametersForApi();
+ }
+ }
+
+ if ( $this->fld_tags ) {
+ if ( $row->ts_tags ) {
+ $tags = explode( ',', $row->ts_tags );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
+ $vals['tags'] = $tags;
+ } else {
+ $vals['tags'] = [];
+ }
+ }
+
+ if ( $this->fld_sha1 && $row->rev_sha1 !== null ) {
+ if ( $row->rev_deleted & Revision::DELETED_TEXT ) {
+ $vals['sha1hidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield( $row->rev_deleted, Revision::DELETED_TEXT, $user ) ) {
+ if ( $row->rev_sha1 !== '' ) {
+ $vals['sha1'] = Wikimedia\base_convert( $row->rev_sha1, 36, 16, 40 );
+ } else {
+ $vals['sha1'] = '';
+ }
+ }
+ }
+
+ if ( !is_null( $this->token ) ) {
+ $tokenFunctions = $this->getTokenFunctions();
+ foreach ( $this->token as $t ) {
+ $val = call_user_func( $tokenFunctions[$t], $row->rc_cur_id,
+ $title, RecentChange::newFromRow( $row ) );
+ if ( $val === false ) {
+ $this->addWarning( [ 'apiwarn-tokennotallowed', $t ] );
+ } else {
+ $vals[$t . 'token'] = $val;
+ }
+ }
+ }
+
+ if ( $anyHidden && ( $row->rc_deleted & Revision::DELETED_RESTRICTED ) ) {
+ $vals['suppressed'] = true;
+ }
+
+ return $vals;
+ }
+
+ /**
+ * @param array $flagsArray flipped array (string flags are keys)
+ * @return bool
+ */
+ private function includesPatrollingFlags( array $flagsArray ) {
+ return isset( $flagsArray['patrolled'] ) ||
+ isset( $flagsArray['!patrolled'] ) ||
+ isset( $flagsArray['unpatrolled'] ) ||
+ isset( $flagsArray['autopatrolled'] ) ||
+ isset( $flagsArray['!autopatrolled'] );
+ }
+
+ public function getCacheMode( $params ) {
+ if ( isset( $params['show'] ) &&
+ $this->includesPatrollingFlags( array_flip( $params['show'] ) )
+ ) {
+ return 'private';
+ }
+ if ( isset( $params['token'] ) ) {
+ return 'private';
+ }
+ if ( $this->userCanSeeRevDel() ) {
+ return 'private';
+ }
+ if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
+ // formatComment() calls wfMessage() among other things
+ return 'anon-public-user-private';
+ }
+
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_EXTRA_NAMESPACES => [ NS_MEDIA, NS_SPECIAL ],
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'excludeuser' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'tag' => null,
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'title|timestamp|ids',
+ ApiBase::PARAM_TYPE => [
+ 'user',
+ 'userid',
+ 'comment',
+ 'parsedcomment',
+ 'flags',
+ 'timestamp',
+ 'title',
+ 'ids',
+ 'sizes',
+ 'redirect',
+ 'patrolled',
+ 'loginfo',
+ 'tags',
+ 'sha1',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'token' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'show' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'minor',
+ '!minor',
+ 'bot',
+ '!bot',
+ 'anon',
+ '!anon',
+ 'redirect',
+ '!redirect',
+ 'patrolled',
+ '!patrolled',
+ 'unpatrolled',
+ 'autopatrolled',
+ '!autopatrolled',
+ ]
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'type' => [
+ ApiBase::PARAM_DFLT => 'edit|new|log|categorize',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => RecentChange::getChangeTypes()
+ ],
+ 'toponly' => false,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'generaterevisions' => false,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=recentchanges'
+ => 'apihelp-query+recentchanges-example-simple',
+ 'action=query&generator=recentchanges&grcshow=!patrolled&prop=info'
+ => 'apihelp-query+recentchanges-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Recentchanges';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryRevisions.php b/www/wiki/includes/api/ApiQueryRevisions.php
new file mode 100644
index 00000000..5858bc72
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryRevisions.php
@@ -0,0 +1,507 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query action to enumerate revisions of a given page, or show top revisions
+ * of multiple pages. Various pieces of information may be shown - flags,
+ * comments, and the actual wiki markup of the rev. In the enumeration mode,
+ * ranges of revisions may be requested and filtered.
+ *
+ * @ingroup API
+ */
+class ApiQueryRevisions extends ApiQueryRevisionsBase {
+
+ private $token = null;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'rv' );
+ }
+
+ private $tokenFunctions;
+
+ /** @deprecated since 1.24 */
+ protected function getTokenFunctions() {
+ // tokenname => function
+ // function prototype is func($pageid, $title, $rev)
+ // should return token or false
+
+ // Don't call the hooks twice
+ if ( isset( $this->tokenFunctions ) ) {
+ return $this->tokenFunctions;
+ }
+
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ return [];
+ }
+
+ $this->tokenFunctions = [
+ 'rollback' => [ self::class, 'getRollbackToken' ]
+ ];
+ Hooks::run( 'APIQueryRevisionsTokens', [ &$this->tokenFunctions ] );
+
+ return $this->tokenFunctions;
+ }
+
+ /**
+ * @deprecated since 1.24
+ * @param int $pageid
+ * @param Title $title
+ * @param Revision $rev
+ * @return bool|string
+ */
+ public static function getRollbackToken( $pageid, $title, $rev ) {
+ global $wgUser;
+ if ( !$wgUser->isAllowed( 'rollback' ) ) {
+ return false;
+ }
+
+ return $wgUser->getEditToken( 'rollback' );
+ }
+
+ protected function run( ApiPageSet $resultPageSet = null ) {
+ $params = $this->extractRequestParams( false );
+
+ // If any of those parameters are used, work in 'enumeration' mode.
+ // Enum mode can only be used when exactly one page is provided.
+ // Enumerating revisions on multiple pages make it extremely
+ // difficult to manage continuations and require additional SQL indexes
+ $enumRevMode = ( $params['user'] !== null || $params['excludeuser'] !== null ||
+ $params['limit'] !== null || $params['startid'] !== null ||
+ $params['endid'] !== null || $params['dir'] === 'newer' ||
+ $params['start'] !== null || $params['end'] !== null );
+
+ $pageSet = $this->getPageSet();
+ $pageCount = $pageSet->getGoodTitleCount();
+ $revCount = $pageSet->getRevisionCount();
+
+ // Optimization -- nothing to do
+ if ( $revCount === 0 && $pageCount === 0 ) {
+ // Nothing to do
+ return;
+ }
+ if ( $revCount > 0 && count( $pageSet->getLiveRevisionIDs() ) === 0 ) {
+ // We're in revisions mode but all given revisions are deleted
+ return;
+ }
+
+ if ( $revCount > 0 && $enumRevMode ) {
+ $this->dieWithError(
+ [ 'apierror-revisions-nolist', $this->getModulePrefix() ], 'invalidparammix'
+ );
+ }
+
+ if ( $pageCount > 1 && $enumRevMode ) {
+ $this->dieWithError(
+ [ 'apierror-revisions-singlepage', $this->getModulePrefix() ], 'invalidparammix'
+ );
+ }
+
+ // In non-enum mode, rvlimit can't be directly used. Use the maximum
+ // allowed value.
+ if ( !$enumRevMode ) {
+ $this->setParsedLimit = false;
+ $params['limit'] = 'max';
+ }
+
+ $db = $this->getDB();
+
+ if ( $resultPageSet === null ) {
+ $this->parseParameters( $params );
+ $this->token = $params['token'];
+ $opts = [];
+ if ( $this->token !== null || $pageCount > 0 ) {
+ $opts[] = 'page';
+ }
+ if ( $this->fetchContent ) {
+ $opts[] = 'text';
+ }
+ if ( $this->fld_user ) {
+ $opts[] = 'user';
+ }
+ $revQuery = Revision::getQueryInfo( $opts );
+ $this->addTables( $revQuery['tables'] );
+ $this->addFields( $revQuery['fields'] );
+ $this->addJoinConds( $revQuery['joins'] );
+ } else {
+ $this->limit = $this->getParameter( 'limit' ) ?: 10;
+ // Always join 'page' so orphaned revisions are filtered out
+ $this->addTables( [ 'revision', 'page' ] );
+ $this->addJoinConds(
+ [ 'page' => [ 'INNER JOIN', [ 'page_id = rev_page' ] ] ]
+ );
+ $this->addFields( [ 'rev_id', 'rev_timestamp', 'rev_page' ] );
+ }
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ [ 'tag_summary' => [ 'LEFT JOIN', [ 'rev_id=ts_rev_id' ] ] ]
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( $params['tag'] !== null ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds(
+ [ 'change_tag' => [ 'INNER JOIN', [ 'rev_id=ct_rev_id' ] ] ]
+ );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ if ( $resultPageSet === null && $this->fetchContent ) {
+ // For each page we will request, the user must have read rights for that page
+ $user = $this->getUser();
+ $status = Status::newGood();
+ /** @var Title $title */
+ foreach ( $pageSet->getGoodTitles() as $title ) {
+ if ( !$title->userCan( 'read', $user ) ) {
+ $status->fatal( ApiMessage::create(
+ [ 'apierror-cannotviewtitle', wfEscapeWikiText( $title->getPrefixedText() ) ],
+ 'accessdenied'
+ ) );
+ }
+ }
+ if ( !$status->isGood() ) {
+ $this->dieStatus( $status );
+ }
+ }
+
+ if ( $enumRevMode ) {
+ // Indexes targeted:
+ // page_timestamp if we don't have rvuser
+ // page_user_timestamp if we have a logged-in rvuser
+ // page_timestamp or usertext_timestamp if we have an IP rvuser
+
+ // This is mostly to prevent parameter errors (and optimize SQL?)
+ $this->requireMaxOneParameter( $params, 'startid', 'start' );
+ $this->requireMaxOneParameter( $params, 'endid', 'end' );
+ $this->requireMaxOneParameter( $params, 'user', 'excludeuser' );
+
+ if ( $params['continue'] !== null ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $op = ( $params['dir'] === 'newer' ? '>' : '<' );
+ $continueTimestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $continueId = (int)$cont[1];
+ $this->dieContinueUsageIf( $continueId != $cont[1] );
+ $this->addWhere( "rev_timestamp $op $continueTimestamp OR " .
+ "(rev_timestamp = $continueTimestamp AND " .
+ "rev_id $op= $continueId)"
+ );
+ }
+
+ // Convert startid/endid to timestamps (T163532)
+ $revids = [];
+ if ( $params['startid'] !== null ) {
+ $revids[] = (int)$params['startid'];
+ }
+ if ( $params['endid'] !== null ) {
+ $revids[] = (int)$params['endid'];
+ }
+ if ( $revids ) {
+ $db = $this->getDB();
+ $sql = $db->unionQueries( [
+ $db->selectSQLText(
+ 'revision',
+ [ 'id' => 'rev_id', 'ts' => 'rev_timestamp' ],
+ [ 'rev_id' => $revids ],
+ __METHOD__
+ ),
+ $db->selectSQLText(
+ 'archive',
+ [ 'id' => 'ar_rev_id', 'ts' => 'ar_timestamp' ],
+ [ 'ar_rev_id' => $revids ],
+ __METHOD__
+ ),
+ ], false );
+ $res = $db->query( $sql, __METHOD__ );
+ foreach ( $res as $row ) {
+ if ( (int)$row->id === (int)$params['startid'] ) {
+ $params['start'] = $row->ts;
+ }
+ if ( (int)$row->id === (int)$params['endid'] ) {
+ $params['end'] = $row->ts;
+ }
+ }
+ if ( $params['startid'] !== null && $params['start'] === null ) {
+ $p = $this->encodeParamName( 'startid' );
+ $this->dieWithError( [ 'apierror-revisions-badid', $p ], "badid_$p" );
+ }
+ if ( $params['endid'] !== null && $params['end'] === null ) {
+ $p = $this->encodeParamName( 'endid' );
+ $this->dieWithError( [ 'apierror-revisions-badid', $p ], "badid_$p" );
+ }
+
+ if ( $params['start'] !== null ) {
+ $op = ( $params['dir'] === 'newer' ? '>' : '<' );
+ $ts = $db->addQuotes( $db->timestampOrNull( $params['start'] ) );
+ if ( $params['startid'] !== null ) {
+ $this->addWhere( "rev_timestamp $op $ts OR "
+ . "rev_timestamp = $ts AND rev_id $op= " . intval( $params['startid'] ) );
+ } else {
+ $this->addWhere( "rev_timestamp $op= $ts" );
+ }
+ }
+ if ( $params['end'] !== null ) {
+ $op = ( $params['dir'] === 'newer' ? '<' : '>' ); // Yes, opposite of the above
+ $ts = $db->addQuotes( $db->timestampOrNull( $params['end'] ) );
+ if ( $params['endid'] !== null ) {
+ $this->addWhere( "rev_timestamp $op $ts OR "
+ . "rev_timestamp = $ts AND rev_id $op= " . intval( $params['endid'] ) );
+ } else {
+ $this->addWhere( "rev_timestamp $op= $ts" );
+ }
+ }
+ } else {
+ $this->addTimestampWhereRange( 'rev_timestamp', $params['dir'],
+ $params['start'], $params['end'] );
+ }
+
+ $sort = ( $params['dir'] === 'newer' ? '' : 'DESC' );
+ $this->addOption( 'ORDER BY', [ "rev_timestamp $sort", "rev_id $sort" ] );
+
+ // There is only one ID, use it
+ $ids = array_keys( $pageSet->getGoodTitles() );
+ $this->addWhereFld( 'rev_page', reset( $ids ) );
+
+ if ( $params['user'] !== null ) {
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'rev_user', User::newFromName( $params['user'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( $actorQuery['conds'] );
+ } elseif ( $params['excludeuser'] !== null ) {
+ $actorQuery = ActorMigration::newMigration()
+ ->getWhere( $db, 'rev_user', User::newFromName( $params['excludeuser'], false ) );
+ $this->addTables( $actorQuery['tables'] );
+ $this->addJoinConds( $actorQuery['joins'] );
+ $this->addWhere( 'NOT(' . $actorQuery['conds'] . ')' );
+ }
+ if ( $params['user'] !== null || $params['excludeuser'] !== null ) {
+ // Paranoia: avoid brute force searches (T19342)
+ if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$this->getUser()->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'rev_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+ } elseif ( $revCount > 0 ) {
+ // Always targets the PRIMARY index
+
+ $revs = $pageSet->getLiveRevisionIDs();
+
+ // Get all revision IDs
+ $this->addWhereFld( 'rev_id', array_keys( $revs ) );
+
+ if ( $params['continue'] !== null ) {
+ $this->addWhere( 'rev_id >= ' . intval( $params['continue'] ) );
+ }
+ $this->addOption( 'ORDER BY', 'rev_id' );
+ } elseif ( $pageCount > 0 ) {
+ // Always targets the rev_page_id index
+
+ $titles = $pageSet->getGoodTitles();
+
+ // When working in multi-page non-enumeration mode,
+ // limit to the latest revision only
+ $this->addWhere( 'page_latest=rev_id' );
+
+ // Get all page IDs
+ $this->addWhereFld( 'page_id', array_keys( $titles ) );
+ // Every time someone relies on equality propagation, god kills a kitten :)
+ $this->addWhereFld( 'rev_page', array_keys( $titles ) );
+
+ if ( $params['continue'] !== null ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $pageid = intval( $cont[0] );
+ $revid = intval( $cont[1] );
+ $this->addWhere(
+ "rev_page > $pageid OR " .
+ "(rev_page = $pageid AND " .
+ "rev_id >= $revid)"
+ );
+ }
+ $this->addOption( 'ORDER BY', [
+ 'rev_page',
+ 'rev_id'
+ ] );
+ } else {
+ ApiBase::dieDebug( __METHOD__, 'param validation?' );
+ }
+
+ $this->addOption( 'LIMIT', $this->limit + 1 );
+
+ $count = 0;
+ $generated = [];
+ $hookData = [];
+ $res = $this->select( __METHOD__, [], $hookData );
+
+ foreach ( $res as $row ) {
+ if ( ++$count > $this->limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ if ( $enumRevMode ) {
+ $this->setContinueEnumParameter( 'continue',
+ $row->rev_timestamp . '|' . intval( $row->rev_id ) );
+ } elseif ( $revCount > 0 ) {
+ $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+ } else {
+ $this->setContinueEnumParameter( 'continue', intval( $row->rev_page ) .
+ '|' . intval( $row->rev_id ) );
+ }
+ break;
+ }
+
+ if ( $resultPageSet !== null ) {
+ $generated[] = $row->rev_id;
+ } else {
+ $revision = new Revision( $row );
+ $rev = $this->extractRevisionInfo( $revision, $row );
+
+ if ( $this->token !== null ) {
+ $title = $revision->getTitle();
+ $tokenFunctions = $this->getTokenFunctions();
+ foreach ( $this->token as $t ) {
+ $val = call_user_func( $tokenFunctions[$t], $title->getArticleID(), $title, $revision );
+ if ( $val === false ) {
+ $this->addWarning( [ 'apiwarn-tokennotallowed', $t ] );
+ } else {
+ $rev[$t . 'token'] = $val;
+ }
+ }
+ }
+
+ $fit = $this->processRow( $row, $rev, $hookData ) &&
+ $this->addPageSubItem( $row->rev_page, $rev, 'rev' );
+ if ( !$fit ) {
+ if ( $enumRevMode ) {
+ $this->setContinueEnumParameter( 'continue',
+ $row->rev_timestamp . '|' . intval( $row->rev_id ) );
+ } elseif ( $revCount > 0 ) {
+ $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+ } else {
+ $this->setContinueEnumParameter( 'continue', intval( $row->rev_page ) .
+ '|' . intval( $row->rev_id ) );
+ }
+ break;
+ }
+ }
+ }
+
+ if ( $resultPageSet !== null ) {
+ $resultPageSet->populateFromRevisionIDs( $generated );
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ if ( isset( $params['token'] ) ) {
+ return 'private';
+ }
+ return parent::getCacheMode( $params );
+ }
+
+ public function getAllowedParams() {
+ $ret = parent::getAllowedParams() + [
+ 'startid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'singlepageonly' ] ],
+ ],
+ 'endid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'singlepageonly' ] ],
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'singlepageonly' ] ],
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'singlepageonly' ] ],
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'singlepageonly' ] ],
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'singlepageonly' ] ],
+ ],
+ 'excludeuser' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_HELP_MSG_INFO => [ [ 'singlepageonly' ] ],
+ ],
+ 'tag' => null,
+ 'token' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+
+ $ret['limit'][ApiBase::PARAM_HELP_MSG_INFO] = [ [ 'singlepageonly' ] ];
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=revisions&titles=API|Main%20Page&' .
+ 'rvprop=timestamp|user|comment|content'
+ => 'apihelp-query+revisions-example-content',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment'
+ => 'apihelp-query+revisions-example-last5',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvdir=newer'
+ => 'apihelp-query+revisions-example-first5',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvdir=newer&rvstart=2006-05-01T00:00:00Z'
+ => 'apihelp-query+revisions-example-first5-after',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1'
+ => 'apihelp-query+revisions-example-first5-not-localhost',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default'
+ => 'apihelp-query+revisions-example-first5-user',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Revisions';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryRevisionsBase.php b/www/wiki/includes/api/ApiQueryRevisionsBase.php
new file mode 100644
index 00000000..f888434d
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryRevisionsBase.php
@@ -0,0 +1,522 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A base class for functions common to producing a list of revisions.
+ *
+ * @ingroup API
+ */
+abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
+
+ protected $limit, $diffto, $difftotext, $difftotextpst, $expandTemplates, $generateXML,
+ $section, $parseContent, $fetchContent, $contentFormat, $setParsedLimit = true;
+
+ protected $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
+ $fld_size = false, $fld_sha1 = false, $fld_comment = false,
+ $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
+ $fld_content = false, $fld_tags = false, $fld_contentmodel = false, $fld_parsetree = false;
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ abstract protected function run( ApiPageSet $resultPageSet = null );
+
+ /**
+ * Parse the parameters into the various instance fields.
+ *
+ * @param array $params
+ */
+ protected function parseParameters( $params ) {
+ if ( !is_null( $params['difftotext'] ) ) {
+ $this->difftotext = $params['difftotext'];
+ $this->difftotextpst = $params['difftotextpst'];
+ } elseif ( !is_null( $params['diffto'] ) ) {
+ if ( $params['diffto'] == 'cur' ) {
+ $params['diffto'] = 0;
+ }
+ if ( ( !ctype_digit( $params['diffto'] ) || $params['diffto'] < 0 )
+ && $params['diffto'] != 'prev' && $params['diffto'] != 'next'
+ ) {
+ $p = $this->getModulePrefix();
+ $this->dieWithError( [ 'apierror-baddiffto', $p ], 'diffto' );
+ }
+ // Check whether the revision exists and is readable,
+ // DifferenceEngine returns a rather ambiguous empty
+ // string if that's not the case
+ if ( $params['diffto'] != 0 ) {
+ $difftoRev = Revision::newFromId( $params['diffto'] );
+ if ( !$difftoRev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $params['diffto'] ] );
+ }
+ if ( !$difftoRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
+ $this->addWarning( [ 'apiwarn-difftohidden', $difftoRev->getId() ] );
+ $params['diffto'] = null;
+ }
+ }
+ $this->diffto = $params['diffto'];
+ }
+
+ $prop = array_flip( $params['prop'] );
+
+ $this->fld_ids = isset( $prop['ids'] );
+ $this->fld_flags = isset( $prop['flags'] );
+ $this->fld_timestamp = isset( $prop['timestamp'] );
+ $this->fld_comment = isset( $prop['comment'] );
+ $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
+ $this->fld_size = isset( $prop['size'] );
+ $this->fld_sha1 = isset( $prop['sha1'] );
+ $this->fld_content = isset( $prop['content'] );
+ $this->fld_contentmodel = isset( $prop['contentmodel'] );
+ $this->fld_userid = isset( $prop['userid'] );
+ $this->fld_user = isset( $prop['user'] );
+ $this->fld_tags = isset( $prop['tags'] );
+ $this->fld_parsetree = isset( $prop['parsetree'] );
+
+ if ( $this->fld_parsetree ) {
+ $encParam = $this->encodeParamName( 'prop' );
+ $name = $this->getModuleName();
+ $parent = $this->getParent();
+ $parentParam = $parent->encodeParamName( $parent->getModuleManager()->getModuleGroup( $name ) );
+ $this->addDeprecation(
+ [ 'apiwarn-deprecation-parameter', "{$encParam}=parsetree" ],
+ "action=query&{$parentParam}={$name}&{$encParam}=parsetree"
+ );
+ }
+
+ if ( !empty( $params['contentformat'] ) ) {
+ $this->contentFormat = $params['contentformat'];
+ }
+
+ $this->limit = $params['limit'];
+
+ $this->fetchContent = $this->fld_content || !is_null( $this->diffto )
+ || !is_null( $this->difftotext ) || $this->fld_parsetree;
+
+ $smallLimit = false;
+ if ( $this->fetchContent ) {
+ $smallLimit = true;
+ $this->expandTemplates = $params['expandtemplates'];
+ $this->generateXML = $params['generatexml'];
+ $this->parseContent = $params['parse'];
+ if ( $this->parseContent ) {
+ // Must manually initialize unset limit
+ if ( is_null( $this->limit ) ) {
+ $this->limit = 1;
+ }
+ }
+ if ( isset( $params['section'] ) ) {
+ $this->section = $params['section'];
+ } else {
+ $this->section = false;
+ }
+ }
+
+ $userMax = $this->parseContent ? 1 : ( $smallLimit ? ApiBase::LIMIT_SML1 : ApiBase::LIMIT_BIG1 );
+ $botMax = $this->parseContent ? 1 : ( $smallLimit ? ApiBase::LIMIT_SML2 : ApiBase::LIMIT_BIG2 );
+ if ( $this->limit == 'max' ) {
+ $this->limit = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
+ if ( $this->setParsedLimit ) {
+ $this->getResult()->addParsedLimit( $this->getModuleName(), $this->limit );
+ }
+ }
+
+ if ( is_null( $this->limit ) ) {
+ $this->limit = 10;
+ }
+ $this->validateLimit( 'limit', $this->limit, 1, $userMax, $botMax );
+ }
+
+ /**
+ * Extract information from the Revision
+ *
+ * @param Revision $revision
+ * @param object $row Should have a field 'ts_tags' if $this->fld_tags is set
+ * @return array
+ */
+ protected function extractRevisionInfo( Revision $revision, $row ) {
+ $title = $revision->getTitle();
+ $user = $this->getUser();
+ $vals = [];
+ $anyHidden = false;
+
+ if ( $this->fld_ids ) {
+ $vals['revid'] = intval( $revision->getId() );
+ if ( !is_null( $revision->getParentId() ) ) {
+ $vals['parentid'] = intval( $revision->getParentId() );
+ }
+ }
+
+ if ( $this->fld_flags ) {
+ $vals['minor'] = $revision->isMinor();
+ }
+
+ if ( $this->fld_user || $this->fld_userid ) {
+ if ( $revision->isDeleted( Revision::DELETED_USER ) ) {
+ $vals['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $revision->userCan( Revision::DELETED_USER, $user ) ) {
+ if ( $this->fld_user ) {
+ $vals['user'] = $revision->getUserText( Revision::RAW );
+ }
+ $userid = $revision->getUser( Revision::RAW );
+ if ( !$userid ) {
+ $vals['anon'] = true;
+ }
+
+ if ( $this->fld_userid ) {
+ $vals['userid'] = $userid;
+ }
+ }
+ }
+
+ if ( $this->fld_timestamp ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $revision->getTimestamp() );
+ }
+
+ if ( $this->fld_size ) {
+ if ( !is_null( $revision->getSize() ) ) {
+ $vals['size'] = intval( $revision->getSize() );
+ } else {
+ $vals['size'] = 0;
+ }
+ }
+
+ if ( $this->fld_sha1 ) {
+ if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+ $vals['sha1hidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $revision->userCan( Revision::DELETED_TEXT, $user ) ) {
+ if ( $revision->getSha1() != '' ) {
+ $vals['sha1'] = Wikimedia\base_convert( $revision->getSha1(), 36, 16, 40 );
+ } else {
+ $vals['sha1'] = '';
+ }
+ }
+ }
+
+ if ( $this->fld_contentmodel ) {
+ $vals['contentmodel'] = $revision->getContentModel();
+ }
+
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ if ( $revision->isDeleted( Revision::DELETED_COMMENT ) ) {
+ $vals['commenthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $revision->userCan( Revision::DELETED_COMMENT, $user ) ) {
+ $comment = $revision->getComment( Revision::RAW );
+
+ if ( $this->fld_comment ) {
+ $vals['comment'] = $comment;
+ }
+
+ if ( $this->fld_parsedcomment ) {
+ $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
+ }
+ }
+ }
+
+ if ( $this->fld_tags ) {
+ if ( $row->ts_tags ) {
+ $tags = explode( ',', $row->ts_tags );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
+ $vals['tags'] = $tags;
+ } else {
+ $vals['tags'] = [];
+ }
+ }
+
+ $content = null;
+ global $wgParser;
+ if ( $this->fetchContent ) {
+ $content = $revision->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+ // Expand templates after getting section content because
+ // template-added sections don't count and Parser::preprocess()
+ // will have less input
+ if ( $content && $this->section !== false ) {
+ $content = $content->getSection( $this->section, false );
+ if ( !$content ) {
+ $this->dieWithError(
+ [
+ 'apierror-nosuchsection-what',
+ wfEscapeWikiText( $this->section ),
+ $this->msg( 'revid', $revision->getId() )
+ ],
+ 'nosuchsection'
+ );
+ }
+ }
+ if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+ $vals['texthidden'] = true;
+ $anyHidden = true;
+ } elseif ( !$content ) {
+ $vals['textmissing'] = true;
+ }
+ }
+ if ( $this->fld_parsetree || ( $this->fld_content && $this->generateXML ) ) {
+ if ( $content ) {
+ if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+ $t = $content->getNativeData(); # note: don't set $text
+
+ $wgParser->startExternalParse(
+ $title,
+ ParserOptions::newFromContext( $this->getContext() ),
+ Parser::OT_PREPROCESS
+ );
+ $dom = $wgParser->preprocessToDom( $t );
+ if ( is_callable( [ $dom, 'saveXML' ] ) ) {
+ $xml = $dom->saveXML();
+ } else {
+ $xml = $dom->__toString();
+ }
+ $vals['parsetree'] = $xml;
+ } else {
+ $vals['badcontentformatforparsetree'] = true;
+ $this->addWarning(
+ [
+ 'apierror-parsetree-notwikitext-title',
+ wfEscapeWikiText( $title->getPrefixedText() ),
+ $content->getModel()
+ ],
+ 'parsetree-notwikitext'
+ );
+ }
+ }
+ }
+
+ if ( $this->fld_content && $content ) {
+ $text = null;
+
+ if ( $this->expandTemplates && !$this->parseContent ) {
+ # XXX: implement template expansion for all content types in ContentHandler?
+ if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+ $text = $content->getNativeData();
+
+ $text = $wgParser->preprocess(
+ $text,
+ $title,
+ ParserOptions::newFromContext( $this->getContext() )
+ );
+ } else {
+ $this->addWarning( [
+ 'apierror-templateexpansion-notwikitext',
+ wfEscapeWikiText( $title->getPrefixedText() ),
+ $content->getModel()
+ ] );
+ $vals['badcontentformat'] = true;
+ $text = false;
+ }
+ }
+ if ( $this->parseContent ) {
+ $po = $content->getParserOutput(
+ $title,
+ $revision->getId(),
+ ParserOptions::newFromContext( $this->getContext() )
+ );
+ $text = $po->getText();
+ }
+
+ if ( $text === null ) {
+ $format = $this->contentFormat ?: $content->getDefaultFormat();
+ $model = $content->getModel();
+
+ if ( !$content->isSupportedFormat( $format ) ) {
+ $name = wfEscapeWikiText( $title->getPrefixedText() );
+ $this->addWarning( [ 'apierror-badformat', $this->contentFormat, $model, $name ] );
+ $vals['badcontentformat'] = true;
+ $text = false;
+ } else {
+ $text = $content->serialize( $format );
+ // always include format and model.
+ // Format is needed to deserialize, model is needed to interpret.
+ $vals['contentformat'] = $format;
+ $vals['contentmodel'] = $model;
+ }
+ }
+
+ if ( $text !== false ) {
+ ApiResult::setContentValue( $vals, 'content', $text );
+ }
+ }
+
+ if ( $content && ( !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) ) {
+ static $n = 0; // Number of uncached diffs we've had
+
+ if ( $n < $this->getConfig()->get( 'APIMaxUncachedDiffs' ) ) {
+ $vals['diff'] = [];
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $title );
+ $handler = $revision->getContentHandler();
+
+ if ( !is_null( $this->difftotext ) ) {
+ $model = $title->getContentModel();
+
+ if ( $this->contentFormat
+ && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat )
+ ) {
+ $name = wfEscapeWikiText( $title->getPrefixedText() );
+ $this->addWarning( [ 'apierror-badformat', $this->contentFormat, $model, $name ] );
+ $vals['diff']['badcontentformat'] = true;
+ $engine = null;
+ } else {
+ $difftocontent = ContentHandler::makeContent(
+ $this->difftotext,
+ $title,
+ $model,
+ $this->contentFormat
+ );
+
+ if ( $this->difftotextpst ) {
+ $popts = ParserOptions::newFromContext( $this->getContext() );
+ $difftocontent = $difftocontent->preSaveTransform( $title, $user, $popts );
+ }
+
+ $engine = $handler->createDifferenceEngine( $context );
+ $engine->setContent( $content, $difftocontent );
+ }
+ } else {
+ $engine = $handler->createDifferenceEngine( $context, $revision->getId(), $this->diffto );
+ $vals['diff']['from'] = $engine->getOldid();
+ $vals['diff']['to'] = $engine->getNewid();
+ }
+ if ( $engine ) {
+ $difftext = $engine->getDiffBody();
+ ApiResult::setContentValue( $vals['diff'], 'body', $difftext );
+ if ( !$engine->wasCacheHit() ) {
+ $n++;
+ }
+ }
+ } else {
+ $vals['diff']['notcached'] = true;
+ }
+ }
+
+ if ( $anyHidden && $revision->isDeleted( Revision::DELETED_RESTRICTED ) ) {
+ $vals['suppressed'] = true;
+ }
+
+ return $vals;
+ }
+
+ public function getCacheMode( $params ) {
+ if ( $this->userCanSeeRevDel() ) {
+ return 'private';
+ }
+
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'ids|timestamp|flags|comment|user',
+ ApiBase::PARAM_TYPE => [
+ 'ids',
+ 'flags',
+ 'timestamp',
+ 'user',
+ 'userid',
+ 'size',
+ 'sha1',
+ 'contentmodel',
+ 'comment',
+ 'parsedcomment',
+ 'content',
+ 'tags',
+ 'parsetree',
+ ],
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-prop',
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [
+ 'ids' => 'apihelp-query+revisions+base-paramvalue-prop-ids',
+ 'flags' => 'apihelp-query+revisions+base-paramvalue-prop-flags',
+ 'timestamp' => 'apihelp-query+revisions+base-paramvalue-prop-timestamp',
+ 'user' => 'apihelp-query+revisions+base-paramvalue-prop-user',
+ 'userid' => 'apihelp-query+revisions+base-paramvalue-prop-userid',
+ 'size' => 'apihelp-query+revisions+base-paramvalue-prop-size',
+ 'sha1' => 'apihelp-query+revisions+base-paramvalue-prop-sha1',
+ 'contentmodel' => 'apihelp-query+revisions+base-paramvalue-prop-contentmodel',
+ 'comment' => 'apihelp-query+revisions+base-paramvalue-prop-comment',
+ 'parsedcomment' => 'apihelp-query+revisions+base-paramvalue-prop-parsedcomment',
+ 'content' => 'apihelp-query+revisions+base-paramvalue-prop-content',
+ 'tags' => 'apihelp-query+revisions+base-paramvalue-prop-tags',
+ 'parsetree' => [ 'apihelp-query+revisions+base-paramvalue-prop-parsetree',
+ CONTENT_MODEL_WIKITEXT ],
+ ],
+ ],
+ 'limit' => [
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-limit',
+ ],
+ 'expandtemplates' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-expandtemplates',
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'generatexml' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-generatexml',
+ ],
+ 'parse' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-parse',
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'section' => [
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-section',
+ ],
+ 'diffto' => [
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-diffto',
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'difftotext' => [
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-difftotext',
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'difftotextpst' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-difftotextpst',
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'contentformat' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-contentformat',
+ ],
+ ];
+ }
+
+}
diff --git a/www/wiki/includes/api/ApiQuerySearch.php b/www/wiki/includes/api/ApiQuerySearch.php
new file mode 100644
index 00000000..7d46a5fb
--- /dev/null
+++ b/www/wiki/includes/api/ApiQuerySearch.php
@@ -0,0 +1,420 @@
+<?php
+/**
+ * Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to perform full text search within wiki titles and content
+ *
+ * @ingroup API
+ */
+class ApiQuerySearch extends ApiQueryGeneratorBase {
+ use SearchApi;
+
+ /** @var array list of api allowed params */
+ private $allowedParams;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'sr' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ global $wgContLang;
+ $params = $this->extractRequestParams();
+
+ // Extract parameters
+ $query = $params['search'];
+ $what = $params['what'];
+ $interwiki = $params['interwiki'];
+ $searchInfo = array_flip( $params['info'] );
+ $prop = array_flip( $params['prop'] );
+
+ // Create search engine instance and set options
+ $search = $this->buildSearchEngine( $params );
+ $search->setFeatureData( 'rewrite', (bool)$params['enablerewrites'] );
+ $search->setFeatureData( 'interwiki', (bool)$interwiki );
+
+ $query = $search->transformSearchTerm( $query );
+ $query = $search->replacePrefixes( $query );
+
+ // Perform the actual search
+ if ( $what == 'text' ) {
+ $matches = $search->searchText( $query );
+ } elseif ( $what == 'title' ) {
+ $matches = $search->searchTitle( $query );
+ } elseif ( $what == 'nearmatch' ) {
+ // near matches must receive the user input as provided, otherwise
+ // the near matches within namespaces are lost.
+ $matches = $search->getNearMatcher( $this->getConfig() )
+ ->getNearMatchResultSet( $params['search'] );
+ } else {
+ // We default to title searches; this is a terrible legacy
+ // of the way we initially set up the MySQL fulltext-based
+ // search engine with separate title and text fields.
+ // In the future, the default should be for a combined index.
+ $what = 'title';
+ $matches = $search->searchTitle( $query );
+
+ // Not all search engines support a separate title search,
+ // for instance the Lucene-based engine we use on Wikipedia.
+ // In this case, fall back to full-text search (which will
+ // include titles in it!)
+ if ( is_null( $matches ) ) {
+ $what = 'text';
+ $matches = $search->searchText( $query );
+ }
+ }
+
+ if ( $matches instanceof Status ) {
+ $status = $matches;
+ $matches = $status->getValue();
+ } else {
+ $status = null;
+ }
+
+ if ( $status ) {
+ if ( $status->isOK() ) {
+ $this->getMain()->getErrorFormatter()->addMessagesFromStatus(
+ $this->getModuleName(),
+ $status
+ );
+ } else {
+ $this->dieStatus( $status );
+ }
+ } elseif ( is_null( $matches ) ) {
+ $this->dieWithError( [ 'apierror-searchdisabled', $what ], "search-{$what}-disabled" );
+ }
+
+ if ( $resultPageSet === null ) {
+ $apiResult = $this->getResult();
+ // Add search meta data to result
+ if ( isset( $searchInfo['totalhits'] ) ) {
+ $totalhits = $matches->getTotalHits();
+ if ( $totalhits !== null ) {
+ $apiResult->addValue( [ 'query', 'searchinfo' ],
+ 'totalhits', $totalhits );
+ }
+ }
+ if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
+ $apiResult->addValue( [ 'query', 'searchinfo' ],
+ 'suggestion', $matches->getSuggestionQuery() );
+ $apiResult->addValue( [ 'query', 'searchinfo' ],
+ 'suggestionsnippet', $matches->getSuggestionSnippet() );
+ }
+ if ( isset( $searchInfo['rewrittenquery'] ) && $matches->hasRewrittenQuery() ) {
+ $apiResult->addValue( [ 'query', 'searchinfo' ],
+ 'rewrittenquery', $matches->getQueryAfterRewrite() );
+ $apiResult->addValue( [ 'query', 'searchinfo' ],
+ 'rewrittenquerysnippet', $matches->getQueryAfterRewriteSnippet() );
+ }
+ }
+
+ // Add the search results to the result
+ $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
+ $titles = [];
+ $count = 0;
+ $result = $matches->next();
+ $limit = $params['limit'];
+
+ while ( $result ) {
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional items to be had. Stop here...
+ $this->setContinueEnumParameter( 'offset', $params['offset'] + $params['limit'] );
+ break;
+ }
+
+ // Silently skip broken and missing titles
+ if ( $result->isBrokenTitle() || $result->isMissingRevision() ) {
+ $result = $matches->next();
+ continue;
+ }
+
+ if ( $resultPageSet === null ) {
+ $vals = $this->getSearchResultData( $result, $prop, $terms );
+ if ( $vals ) {
+ // Add item to results and see whether it fits
+ $fit = $apiResult->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'offset', $params['offset'] + $count - 1 );
+ break;
+ }
+ }
+ } else {
+ $titles[] = $result->getTitle();
+ }
+
+ $result = $matches->next();
+ }
+
+ // Here we assume interwiki results do not count with
+ // regular search results. We may want to reconsider this
+ // if we ever return a lot of interwiki results or want pagination
+ // for them.
+ // Interwiki results inside main result set
+ $canAddInterwiki = (bool)$params['enablerewrites'] && ( $resultPageSet === null );
+ if ( $canAddInterwiki ) {
+ $this->addInterwikiResults( $matches, $apiResult, $prop, $terms, 'additional',
+ SearchResultSet::INLINE_RESULTS );
+ }
+
+ // Interwiki results outside main result set
+ if ( $interwiki && $resultPageSet === null ) {
+ $this->addInterwikiResults( $matches, $apiResult, $prop, $terms, 'interwiki',
+ SearchResultSet::SECONDARY_RESULTS );
+ }
+
+ if ( $resultPageSet === null ) {
+ $apiResult->addIndexedTagName( [
+ 'query', $this->getModuleName()
+ ], 'p' );
+ } else {
+ $resultPageSet->setRedirectMergePolicy( function ( $current, $new ) {
+ if ( !isset( $current['index'] ) || $new['index'] < $current['index'] ) {
+ $current['index'] = $new['index'];
+ }
+ return $current;
+ } );
+ $resultPageSet->populateFromTitles( $titles );
+ $offset = $params['offset'] + 1;
+ foreach ( $titles as $index => $title ) {
+ $resultPageSet->setGeneratorData( $title, [ 'index' => $index + $offset ] );
+ }
+ }
+ }
+
+ /**
+ * Assemble search result data.
+ * @param SearchResult $result Search result
+ * @param array $prop Props to extract (as keys)
+ * @param array $terms Terms list
+ * @return array|null Result data or null if result is broken in some way.
+ */
+ private function getSearchResultData( SearchResult $result, $prop, $terms ) {
+ // Silently skip broken and missing titles
+ if ( $result->isBrokenTitle() || $result->isMissingRevision() ) {
+ return null;
+ }
+
+ $vals = [];
+
+ $title = $result->getTitle();
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ $vals['pageid'] = $title->getArticleID();
+
+ if ( isset( $prop['size'] ) ) {
+ $vals['size'] = $result->getByteSize();
+ }
+ if ( isset( $prop['wordcount'] ) ) {
+ $vals['wordcount'] = $result->getWordCount();
+ }
+ if ( isset( $prop['snippet'] ) ) {
+ $vals['snippet'] = $result->getTextSnippet( $terms );
+ }
+ if ( isset( $prop['timestamp'] ) ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $result->getTimestamp() );
+ }
+ if ( isset( $prop['titlesnippet'] ) ) {
+ $vals['titlesnippet'] = $result->getTitleSnippet();
+ }
+ if ( isset( $prop['categorysnippet'] ) ) {
+ $vals['categorysnippet'] = $result->getCategorySnippet();
+ }
+ if ( !is_null( $result->getRedirectTitle() ) ) {
+ if ( isset( $prop['redirecttitle'] ) ) {
+ $vals['redirecttitle'] = $result->getRedirectTitle()->getPrefixedText();
+ }
+ if ( isset( $prop['redirectsnippet'] ) ) {
+ $vals['redirectsnippet'] = $result->getRedirectSnippet();
+ }
+ }
+ if ( !is_null( $result->getSectionTitle() ) ) {
+ if ( isset( $prop['sectiontitle'] ) ) {
+ $vals['sectiontitle'] = $result->getSectionTitle()->getFragment();
+ }
+ if ( isset( $prop['sectionsnippet'] ) ) {
+ $vals['sectionsnippet'] = $result->getSectionSnippet();
+ }
+ }
+ if ( isset( $prop['isfilematch'] ) ) {
+ $vals['isfilematch'] = $result->isFileMatch();
+ }
+
+ if ( isset( $prop['extensiondata'] ) ) {
+ $extra = $result->getExtensionData();
+ // Add augmented data to the result. The data would be organized as a map:
+ // augmentorName => data
+ if ( $extra ) {
+ $vals['extensiondata'] = ApiResult::addMetadataToResultVars( $extra );
+ }
+ }
+
+ return $vals;
+ }
+
+ /**
+ * Add interwiki results as a section in query results.
+ * @param SearchResultSet $matches
+ * @param ApiResult $apiResult
+ * @param array $prop Props to extract (as keys)
+ * @param array $terms Terms list
+ * @param string $section Section name where results would go
+ * @param int $type Interwiki result type
+ * @return int|null Number of total hits in the data or null if none was produced
+ */
+ private function addInterwikiResults(
+ SearchResultSet $matches, ApiResult $apiResult, $prop,
+ $terms, $section, $type
+ ) {
+ $totalhits = null;
+ if ( $matches->hasInterwikiResults( $type ) ) {
+ foreach ( $matches->getInterwikiResults( $type ) as $interwikiMatches ) {
+ // Include number of results if requested
+ $totalhits += $interwikiMatches->getTotalHits();
+
+ $result = $interwikiMatches->next();
+ while ( $result ) {
+ $title = $result->getTitle();
+ $vals = $this->getSearchResultData( $result, $prop, $terms );
+
+ $vals['namespace'] = $result->getInterwikiNamespaceText();
+ $vals['title'] = $title->getText();
+ $vals['url'] = $title->getFullURL();
+
+ // Add item to results and see whether it fits
+ $fit = $apiResult->addValue( [
+ 'query',
+ $section . $this->getModuleName(),
+ $result->getInterwikiPrefix()
+ ], null, $vals );
+
+ if ( !$fit ) {
+ // We hit the limit. We can't really provide any meaningful
+ // pagination info so just bail out
+ break;
+ }
+
+ $result = $interwikiMatches->next();
+ }
+ }
+ if ( $totalhits !== null ) {
+ $apiResult->addValue( [ 'query', $section . 'searchinfo' ], 'totalhits', $totalhits );
+ $apiResult->addIndexedTagName( [
+ 'query', $section . $this->getModuleName()
+ ], 'p' );
+ }
+ }
+ return $totalhits;
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ if ( $this->allowedParams !== null ) {
+ return $this->allowedParams;
+ }
+
+ $this->allowedParams = $this->buildCommonApiParams() + [
+ 'what' => [
+ ApiBase::PARAM_TYPE => [
+ 'title',
+ 'text',
+ 'nearmatch',
+ ]
+ ],
+ 'info' => [
+ ApiBase::PARAM_DFLT => 'totalhits|suggestion|rewrittenquery',
+ ApiBase::PARAM_TYPE => [
+ 'totalhits',
+ 'suggestion',
+ 'rewrittenquery',
+ ],
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'size|wordcount|timestamp|snippet',
+ ApiBase::PARAM_TYPE => [
+ 'size',
+ 'wordcount',
+ 'timestamp',
+ 'snippet',
+ 'titlesnippet',
+ 'redirecttitle',
+ 'redirectsnippet',
+ 'sectiontitle',
+ 'sectionsnippet',
+ 'isfilematch',
+ 'categorysnippet',
+ 'score', // deprecated
+ 'hasrelated', // deprecated
+ 'extensiondata',
+ ],
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ApiBase::PARAM_DEPRECATED_VALUES => [
+ 'score' => true,
+ 'hasrelated' => true
+ ],
+ ],
+ 'interwiki' => false,
+ 'enablerewrites' => false,
+ ];
+
+ return $this->allowedParams;
+ }
+
+ public function getSearchProfileParams() {
+ return [
+ 'qiprofile' => [
+ 'profile-type' => SearchEngine::FT_QUERY_INDEP_PROFILE_TYPE,
+ 'help-message' => 'apihelp-query+search-param-qiprofile',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=search&srsearch=meaning'
+ => 'apihelp-query+search-example-simple',
+ 'action=query&list=search&srwhat=text&srsearch=meaning'
+ => 'apihelp-query+search-example-text',
+ 'action=query&generator=search&gsrsearch=meaning&prop=info'
+ => 'apihelp-query+search-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Search';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQuerySiteinfo.php b/www/wiki/includes/api/ApiQuerySiteinfo.php
new file mode 100644
index 00000000..30482732
--- /dev/null
+++ b/www/wiki/includes/api/ApiQuerySiteinfo.php
@@ -0,0 +1,936 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+use MediaWiki\MediaWikiServices;
+
+/**
+ * A query action to return meta information about the wiki site.
+ *
+ * @ingroup API
+ */
+class ApiQuerySiteinfo extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'si' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $done = [];
+ $fit = false;
+ foreach ( $params['prop'] as $p ) {
+ switch ( $p ) {
+ case 'general':
+ $fit = $this->appendGeneralInfo( $p );
+ break;
+ case 'namespaces':
+ $fit = $this->appendNamespaces( $p );
+ break;
+ case 'namespacealiases':
+ $fit = $this->appendNamespaceAliases( $p );
+ break;
+ case 'specialpagealiases':
+ $fit = $this->appendSpecialPageAliases( $p );
+ break;
+ case 'magicwords':
+ $fit = $this->appendMagicWords( $p );
+ break;
+ case 'interwikimap':
+ $filteriw = isset( $params['filteriw'] ) ? $params['filteriw'] : false;
+ $fit = $this->appendInterwikiMap( $p, $filteriw );
+ break;
+ case 'dbrepllag':
+ $fit = $this->appendDbReplLagInfo( $p, $params['showalldb'] );
+ break;
+ case 'statistics':
+ $fit = $this->appendStatistics( $p );
+ break;
+ case 'usergroups':
+ $fit = $this->appendUserGroups( $p, $params['numberingroup'] );
+ break;
+ case 'libraries':
+ $fit = $this->appendInstalledLibraries( $p );
+ break;
+ case 'extensions':
+ $fit = $this->appendExtensions( $p );
+ break;
+ case 'fileextensions':
+ $fit = $this->appendFileExtensions( $p );
+ break;
+ case 'rightsinfo':
+ $fit = $this->appendRightsInfo( $p );
+ break;
+ case 'restrictions':
+ $fit = $this->appendRestrictions( $p );
+ break;
+ case 'languages':
+ $fit = $this->appendLanguages( $p );
+ break;
+ case 'languagevariants':
+ $fit = $this->appendLanguageVariants( $p );
+ break;
+ case 'skins':
+ $fit = $this->appendSkins( $p );
+ break;
+ case 'extensiontags':
+ $fit = $this->appendExtensionTags( $p );
+ break;
+ case 'functionhooks':
+ $fit = $this->appendFunctionHooks( $p );
+ break;
+ case 'showhooks':
+ $fit = $this->appendSubscribedHooks( $p );
+ break;
+ case 'variables':
+ $fit = $this->appendVariables( $p );
+ break;
+ case 'protocols':
+ $fit = $this->appendProtocols( $p );
+ break;
+ case 'defaultoptions':
+ $fit = $this->appendDefaultOptions( $p );
+ break;
+ case 'uploaddialog':
+ $fit = $this->appendUploadDialog( $p );
+ break;
+ default:
+ ApiBase::dieDebug( __METHOD__, "Unknown prop=$p" );
+ }
+ if ( !$fit ) {
+ // Abuse siprop as a query-continue parameter
+ // and set it to all unprocessed props
+ $this->setContinueEnumParameter( 'prop', implode( '|',
+ array_diff( $params['prop'], $done ) ) );
+ break;
+ }
+ $done[] = $p;
+ }
+ }
+
+ protected function appendGeneralInfo( $property ) {
+ global $wgContLang;
+
+ $config = $this->getConfig();
+
+ $data = [];
+ $mainPage = Title::newMainPage();
+ $data['mainpage'] = $mainPage->getPrefixedText();
+ $data['base'] = wfExpandUrl( $mainPage->getFullURL(), PROTO_CURRENT );
+ $data['sitename'] = $config->get( 'Sitename' );
+
+ // wgLogo can either be a relative or an absolute path
+ // make sure we always return an absolute path
+ $data['logo'] = wfExpandUrl( $config->get( 'Logo' ), PROTO_RELATIVE );
+
+ $data['generator'] = "MediaWiki {$config->get( 'Version' )}";
+
+ $data['phpversion'] = PHP_VERSION;
+ $data['phpsapi'] = PHP_SAPI;
+ if ( defined( 'HHVM_VERSION' ) ) {
+ $data['hhvmversion'] = HHVM_VERSION;
+ }
+ $data['dbtype'] = $config->get( 'DBtype' );
+ $data['dbversion'] = $this->getDB()->getServerVersion();
+
+ $allowFrom = [ '' ];
+ $allowException = true;
+ if ( !$config->get( 'AllowExternalImages' ) ) {
+ $data['imagewhitelistenabled'] = (bool)$config->get( 'EnableImageWhitelist' );
+ $allowFrom = $config->get( 'AllowExternalImagesFrom' );
+ $allowException = !empty( $allowFrom );
+ }
+ if ( $allowException ) {
+ $data['externalimages'] = (array)$allowFrom;
+ ApiResult::setIndexedTagName( $data['externalimages'], 'prefix' );
+ }
+
+ $data['langconversion'] = !$config->get( 'DisableLangConversion' );
+ $data['titleconversion'] = !$config->get( 'DisableTitleConversion' );
+
+ if ( $wgContLang->linkPrefixExtension() ) {
+ $linkPrefixCharset = $wgContLang->linkPrefixCharset();
+ $data['linkprefixcharset'] = $linkPrefixCharset;
+ // For backwards compatibility
+ $data['linkprefix'] = "/^((?>.*[^$linkPrefixCharset]|))(.+)$/sDu";
+ } else {
+ $data['linkprefixcharset'] = '';
+ $data['linkprefix'] = '';
+ }
+
+ $linktrail = $wgContLang->linkTrail();
+ $data['linktrail'] = $linktrail ?: '';
+
+ $data['legaltitlechars'] = Title::legalChars();
+ $data['invalidusernamechars'] = $config->get( 'InvalidUsernameCharacters' );
+
+ $data['allunicodefixes'] = (bool)$config->get( 'AllUnicodeFixes' );
+ $data['fixarabicunicode'] = (bool)$config->get( 'FixArabicUnicode' );
+ $data['fixmalayalamunicode'] = (bool)$config->get( 'FixMalayalamUnicode' );
+
+ global $IP;
+ $git = SpecialVersion::getGitHeadSha1( $IP );
+ if ( $git ) {
+ $data['git-hash'] = $git;
+ $data['git-branch'] =
+ SpecialVersion::getGitCurrentBranch( $GLOBALS['IP'] );
+ }
+
+ // 'case-insensitive' option is reserved for future
+ $data['case'] = $config->get( 'CapitalLinks' ) ? 'first-letter' : 'case-sensitive';
+ $data['lang'] = $config->get( 'LanguageCode' );
+
+ $fallbacks = [];
+ foreach ( $wgContLang->getFallbackLanguages() as $code ) {
+ $fallbacks[] = [ 'code' => $code ];
+ }
+ $data['fallback'] = $fallbacks;
+ ApiResult::setIndexedTagName( $data['fallback'], 'lang' );
+
+ if ( $wgContLang->hasVariants() ) {
+ $variants = [];
+ foreach ( $wgContLang->getVariants() as $code ) {
+ $variants[] = [
+ 'code' => $code,
+ 'name' => $wgContLang->getVariantname( $code ),
+ ];
+ }
+ $data['variants'] = $variants;
+ ApiResult::setIndexedTagName( $data['variants'], 'lang' );
+ }
+
+ $data['rtl'] = $wgContLang->isRTL();
+ $data['fallback8bitEncoding'] = $wgContLang->fallback8bitEncoding();
+
+ $data['readonly'] = wfReadOnly();
+ if ( $data['readonly'] ) {
+ $data['readonlyreason'] = wfReadOnlyReason();
+ }
+ $data['writeapi'] = (bool)$config->get( 'EnableWriteAPI' );
+
+ $data['maxarticlesize'] = $config->get( 'MaxArticleSize' ) * 1024;
+
+ $tz = $config->get( 'Localtimezone' );
+ $offset = $config->get( 'LocalTZoffset' );
+ if ( is_null( $tz ) ) {
+ $tz = 'UTC';
+ $offset = 0;
+ } elseif ( is_null( $offset ) ) {
+ $offset = 0;
+ }
+ $data['timezone'] = $tz;
+ $data['timeoffset'] = intval( $offset );
+ $data['articlepath'] = $config->get( 'ArticlePath' );
+ $data['scriptpath'] = $config->get( 'ScriptPath' );
+ $data['script'] = $config->get( 'Script' );
+ $data['variantarticlepath'] = $config->get( 'VariantArticlePath' );
+ $data[ApiResult::META_BC_BOOLS][] = 'variantarticlepath';
+ $data['server'] = $config->get( 'Server' );
+ $data['servername'] = $config->get( 'ServerName' );
+ $data['wikiid'] = wfWikiID();
+ $data['time'] = wfTimestamp( TS_ISO_8601, time() );
+
+ $data['misermode'] = (bool)$config->get( 'MiserMode' );
+
+ $data['uploadsenabled'] = UploadBase::isEnabled();
+ $data['maxuploadsize'] = UploadBase::getMaxUploadSize();
+ $data['minuploadchunksize'] = (int)$config->get( 'MinUploadChunkSize' );
+
+ $data['galleryoptions'] = $config->get( 'GalleryOptions' );
+
+ $data['thumblimits'] = $config->get( 'ThumbLimits' );
+ ApiResult::setArrayType( $data['thumblimits'], 'BCassoc' );
+ ApiResult::setIndexedTagName( $data['thumblimits'], 'limit' );
+ $data['imagelimits'] = [];
+ ApiResult::setArrayType( $data['imagelimits'], 'BCassoc' );
+ ApiResult::setIndexedTagName( $data['imagelimits'], 'limit' );
+ foreach ( $config->get( 'ImageLimits' ) as $k => $limit ) {
+ $data['imagelimits'][$k] = [ 'width' => $limit[0], 'height' => $limit[1] ];
+ }
+
+ $favicon = $config->get( 'Favicon' );
+ if ( !empty( $favicon ) ) {
+ // wgFavicon can either be a relative or an absolute path
+ // make sure we always return an absolute path
+ $data['favicon'] = wfExpandUrl( $favicon, PROTO_RELATIVE );
+ }
+
+ $data['centralidlookupprovider'] = $config->get( 'CentralIdLookupProvider' );
+ $providerIds = array_keys( $config->get( 'CentralIdLookupProviders' ) );
+ $data['allcentralidlookupproviders'] = $providerIds;
+
+ $data['interwikimagic'] = (bool)$config->get( 'InterwikiMagic' );
+ $data['magiclinks'] = $config->get( 'EnableMagicLinks' );
+
+ $data['categorycollation'] = $config->get( 'CategoryCollation' );
+
+ Hooks::run( 'APIQuerySiteInfoGeneralInfo', [ $this, &$data ] );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendNamespaces( $property ) {
+ global $wgContLang;
+ $data = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+ foreach ( $wgContLang->getFormattedNamespaces() as $ns => $title ) {
+ $data[$ns] = [
+ 'id' => intval( $ns ),
+ 'case' => MWNamespace::isCapitalized( $ns ) ? 'first-letter' : 'case-sensitive',
+ ];
+ ApiResult::setContentValue( $data[$ns], 'name', $title );
+ $canonical = MWNamespace::getCanonicalName( $ns );
+
+ $data[$ns]['subpages'] = MWNamespace::hasSubpages( $ns );
+
+ if ( $canonical ) {
+ $data[$ns]['canonical'] = strtr( $canonical, '_', ' ' );
+ }
+
+ $data[$ns]['content'] = MWNamespace::isContent( $ns );
+ $data[$ns]['nonincludable'] = MWNamespace::isNonincludable( $ns );
+
+ $contentmodel = MWNamespace::getNamespaceContentModel( $ns );
+ if ( $contentmodel ) {
+ $data[$ns]['defaultcontentmodel'] = $contentmodel;
+ }
+ }
+
+ ApiResult::setArrayType( $data, 'assoc' );
+ ApiResult::setIndexedTagName( $data, 'ns' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendNamespaceAliases( $property ) {
+ global $wgContLang;
+ $aliases = array_merge( $this->getConfig()->get( 'NamespaceAliases' ),
+ $wgContLang->getNamespaceAliases() );
+ $namespaces = $wgContLang->getNamespaces();
+ $data = [];
+ foreach ( $aliases as $title => $ns ) {
+ if ( $namespaces[$ns] == $title ) {
+ // Don't list duplicates
+ continue;
+ }
+ $item = [
+ 'id' => intval( $ns )
+ ];
+ ApiResult::setContentValue( $item, 'alias', strtr( $title, '_', ' ' ) );
+ $data[] = $item;
+ }
+
+ sort( $data );
+
+ ApiResult::setIndexedTagName( $data, 'ns' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendSpecialPageAliases( $property ) {
+ global $wgContLang;
+ $data = [];
+ $aliases = $wgContLang->getSpecialPageAliases();
+ foreach ( SpecialPageFactory::getNames() as $specialpage ) {
+ if ( isset( $aliases[$specialpage] ) ) {
+ $arr = [ 'realname' => $specialpage, 'aliases' => $aliases[$specialpage] ];
+ ApiResult::setIndexedTagName( $arr['aliases'], 'alias' );
+ $data[] = $arr;
+ }
+ }
+ ApiResult::setIndexedTagName( $data, 'specialpage' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendMagicWords( $property ) {
+ global $wgContLang;
+ $data = [];
+ foreach ( $wgContLang->getMagicWords() as $magicword => $aliases ) {
+ $caseSensitive = array_shift( $aliases );
+ $arr = [ 'name' => $magicword, 'aliases' => $aliases ];
+ $arr['case-sensitive'] = (bool)$caseSensitive;
+ ApiResult::setIndexedTagName( $arr['aliases'], 'alias' );
+ $data[] = $arr;
+ }
+ ApiResult::setIndexedTagName( $data, 'magicword' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendInterwikiMap( $property, $filter ) {
+ $local = null;
+ if ( $filter === 'local' ) {
+ $local = 1;
+ } elseif ( $filter === '!local' ) {
+ $local = 0;
+ } elseif ( $filter ) {
+ ApiBase::dieDebug( __METHOD__, "Unknown filter=$filter" );
+ }
+
+ $params = $this->extractRequestParams();
+ $langCode = isset( $params['inlanguagecode'] ) ? $params['inlanguagecode'] : '';
+ $langNames = Language::fetchLanguageNames( $langCode );
+
+ $getPrefixes = MediaWikiServices::getInstance()->getInterwikiLookup()->getAllPrefixes( $local );
+ $extraLangPrefixes = $this->getConfig()->get( 'ExtraInterlanguageLinkPrefixes' );
+ $localInterwikis = $this->getConfig()->get( 'LocalInterwikis' );
+ $data = [];
+
+ foreach ( $getPrefixes as $row ) {
+ $prefix = $row['iw_prefix'];
+ $val = [];
+ $val['prefix'] = $prefix;
+ if ( isset( $row['iw_local'] ) && $row['iw_local'] == '1' ) {
+ $val['local'] = true;
+ }
+ if ( isset( $row['iw_trans'] ) && $row['iw_trans'] == '1' ) {
+ $val['trans'] = true;
+ }
+
+ if ( isset( $langNames[$prefix] ) ) {
+ $val['language'] = $langNames[$prefix];
+ }
+ if ( in_array( $prefix, $localInterwikis ) ) {
+ $val['localinterwiki'] = true;
+ }
+ if ( in_array( $prefix, $extraLangPrefixes ) ) {
+ $val['extralanglink'] = true;
+
+ $linktext = wfMessage( "interlanguage-link-$prefix" );
+ if ( !$linktext->isDisabled() ) {
+ $val['linktext'] = $linktext->text();
+ }
+
+ $sitename = wfMessage( "interlanguage-link-sitename-$prefix" );
+ if ( !$sitename->isDisabled() ) {
+ $val['sitename'] = $sitename->text();
+ }
+ }
+
+ $val['url'] = wfExpandUrl( $row['iw_url'], PROTO_CURRENT );
+ $val['protorel'] = substr( $row['iw_url'], 0, 2 ) == '//';
+ if ( isset( $row['iw_wikiid'] ) && $row['iw_wikiid'] !== '' ) {
+ $val['wikiid'] = $row['iw_wikiid'];
+ }
+ if ( isset( $row['iw_api'] ) && $row['iw_api'] !== '' ) {
+ $val['api'] = $row['iw_api'];
+ }
+
+ $data[] = $val;
+ }
+
+ ApiResult::setIndexedTagName( $data, 'iw' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendDbReplLagInfo( $property, $includeAll ) {
+ $data = [];
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ $showHostnames = $this->getConfig()->get( 'ShowHostnames' );
+ if ( $includeAll ) {
+ if ( !$showHostnames ) {
+ $this->dieWithError( 'apierror-siteinfo-includealldenied', 'includeAllDenied' );
+ }
+
+ $lags = $lb->getLagTimes();
+ foreach ( $lags as $i => $lag ) {
+ $data[] = [
+ 'host' => $lb->getServerName( $i ),
+ 'lag' => $lag
+ ];
+ }
+ } else {
+ list( , $lag, $index ) = $lb->getMaxLag();
+ $data[] = [
+ 'host' => $showHostnames
+ ? $lb->getServerName( $index )
+ : '',
+ 'lag' => $lag
+ ];
+ }
+
+ ApiResult::setIndexedTagName( $data, 'db' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendStatistics( $property ) {
+ $data = [];
+ $data['pages'] = intval( SiteStats::pages() );
+ $data['articles'] = intval( SiteStats::articles() );
+ $data['edits'] = intval( SiteStats::edits() );
+ $data['images'] = intval( SiteStats::images() );
+ $data['users'] = intval( SiteStats::users() );
+ $data['activeusers'] = intval( SiteStats::activeUsers() );
+ $data['admins'] = intval( SiteStats::numberingroup( 'sysop' ) );
+ $data['jobs'] = intval( SiteStats::jobs() );
+
+ Hooks::run( 'APIQuerySiteInfoStatisticsInfo', [ &$data ] );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendUserGroups( $property, $numberInGroup ) {
+ $config = $this->getConfig();
+
+ $data = [];
+ $result = $this->getResult();
+ $allGroups = array_values( User::getAllGroups() );
+ foreach ( $config->get( 'GroupPermissions' ) as $group => $permissions ) {
+ $arr = [
+ 'name' => $group,
+ 'rights' => array_keys( $permissions, true ),
+ ];
+
+ if ( $numberInGroup ) {
+ $autopromote = $config->get( 'Autopromote' );
+
+ if ( $group == 'user' ) {
+ $arr['number'] = SiteStats::users();
+ // '*' and autopromote groups have no size
+ } elseif ( $group !== '*' && !isset( $autopromote[$group] ) ) {
+ $arr['number'] = SiteStats::numberingroup( $group );
+ }
+ }
+
+ $groupArr = [
+ 'add' => $config->get( 'AddGroups' ),
+ 'remove' => $config->get( 'RemoveGroups' ),
+ 'add-self' => $config->get( 'GroupsAddToSelf' ),
+ 'remove-self' => $config->get( 'GroupsRemoveFromSelf' )
+ ];
+
+ foreach ( $groupArr as $type => $rights ) {
+ if ( isset( $rights[$group] ) ) {
+ if ( $rights[$group] === true ) {
+ $groups = $allGroups;
+ } else {
+ $groups = array_intersect( $rights[$group], $allGroups );
+ }
+ if ( $groups ) {
+ $arr[$type] = $groups;
+ ApiResult::setArrayType( $arr[$type], 'BCarray' );
+ ApiResult::setIndexedTagName( $arr[$type], 'group' );
+ }
+ }
+ }
+
+ ApiResult::setIndexedTagName( $arr['rights'], 'permission' );
+ $data[] = $arr;
+ }
+
+ ApiResult::setIndexedTagName( $data, 'group' );
+
+ return $result->addValue( 'query', $property, $data );
+ }
+
+ protected function appendFileExtensions( $property ) {
+ $data = [];
+ foreach ( array_unique( $this->getConfig()->get( 'FileExtensions' ) ) as $ext ) {
+ $data[] = [ 'ext' => $ext ];
+ }
+ ApiResult::setIndexedTagName( $data, 'fe' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendInstalledLibraries( $property ) {
+ global $IP;
+ $path = "$IP/vendor/composer/installed.json";
+ if ( !file_exists( $path ) ) {
+ return true;
+ }
+
+ $data = [];
+ $installed = new ComposerInstalled( $path );
+ foreach ( $installed->getInstalledDependencies() as $name => $info ) {
+ if ( strpos( $info['type'], 'mediawiki-' ) === 0 ) {
+ // Skip any extensions or skins since they'll be listed
+ // in their proper section
+ continue;
+ }
+ $data[] = [
+ 'name' => $name,
+ 'version' => $info['version'],
+ ];
+ }
+ ApiResult::setIndexedTagName( $data, 'library' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendExtensions( $property ) {
+ $data = [];
+ foreach ( $this->getConfig()->get( 'ExtensionCredits' ) as $type => $extensions ) {
+ foreach ( $extensions as $ext ) {
+ $ret = [];
+ $ret['type'] = $type;
+ if ( isset( $ext['name'] ) ) {
+ $ret['name'] = $ext['name'];
+ }
+ if ( isset( $ext['namemsg'] ) ) {
+ $ret['namemsg'] = $ext['namemsg'];
+ }
+ if ( isset( $ext['description'] ) ) {
+ $ret['description'] = $ext['description'];
+ }
+ if ( isset( $ext['descriptionmsg'] ) ) {
+ // Can be a string or [ key, param1, param2, ... ]
+ if ( is_array( $ext['descriptionmsg'] ) ) {
+ $ret['descriptionmsg'] = $ext['descriptionmsg'][0];
+ $ret['descriptionmsgparams'] = array_slice( $ext['descriptionmsg'], 1 );
+ ApiResult::setIndexedTagName( $ret['descriptionmsgparams'], 'param' );
+ } else {
+ $ret['descriptionmsg'] = $ext['descriptionmsg'];
+ }
+ }
+ if ( isset( $ext['author'] ) ) {
+ $ret['author'] = is_array( $ext['author'] ) ?
+ implode( ', ', $ext['author'] ) : $ext['author'];
+ }
+ if ( isset( $ext['url'] ) ) {
+ $ret['url'] = $ext['url'];
+ }
+ if ( isset( $ext['version'] ) ) {
+ $ret['version'] = $ext['version'];
+ }
+ if ( isset( $ext['path'] ) ) {
+ $extensionPath = dirname( $ext['path'] );
+ $gitInfo = new GitInfo( $extensionPath );
+ $vcsVersion = $gitInfo->getHeadSHA1();
+ if ( $vcsVersion !== false ) {
+ $ret['vcs-system'] = 'git';
+ $ret['vcs-version'] = $vcsVersion;
+ $ret['vcs-url'] = $gitInfo->getHeadViewUrl();
+ $vcsDate = $gitInfo->getHeadCommitDate();
+ if ( $vcsDate !== false ) {
+ $ret['vcs-date'] = wfTimestamp( TS_ISO_8601, $vcsDate );
+ }
+ }
+
+ if ( SpecialVersion::getExtLicenseFileName( $extensionPath ) ) {
+ $ret['license-name'] = isset( $ext['license-name'] ) ? $ext['license-name'] : '';
+ $ret['license'] = SpecialPage::getTitleFor(
+ 'Version',
+ "License/{$ext['name']}"
+ )->getLinkURL();
+ }
+
+ if ( SpecialVersion::getExtAuthorsFileName( $extensionPath ) ) {
+ $ret['credits'] = SpecialPage::getTitleFor(
+ 'Version',
+ "Credits/{$ext['name']}"
+ )->getLinkURL();
+ }
+ }
+ $data[] = $ret;
+ }
+ }
+
+ ApiResult::setIndexedTagName( $data, 'ext' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendRightsInfo( $property ) {
+ $config = $this->getConfig();
+ $rightsPage = $config->get( 'RightsPage' );
+ if ( is_string( $rightsPage ) ) {
+ $title = Title::newFromText( $rightsPage );
+ $url = wfExpandUrl( $title, PROTO_CURRENT );
+ } else {
+ $title = false;
+ $url = $config->get( 'RightsUrl' );
+ }
+ $text = $config->get( 'RightsText' );
+ if ( !$text && $title ) {
+ $text = $title->getPrefixedText();
+ }
+
+ $data = [
+ 'url' => $url ?: '',
+ 'text' => $text ?: ''
+ ];
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendRestrictions( $property ) {
+ $config = $this->getConfig();
+ $data = [
+ 'types' => $config->get( 'RestrictionTypes' ),
+ 'levels' => $config->get( 'RestrictionLevels' ),
+ 'cascadinglevels' => $config->get( 'CascadingRestrictionLevels' ),
+ 'semiprotectedlevels' => $config->get( 'SemiprotectedRestrictionLevels' ),
+ ];
+
+ ApiResult::setArrayType( $data['types'], 'BCarray' );
+ ApiResult::setArrayType( $data['levels'], 'BCarray' );
+ ApiResult::setArrayType( $data['cascadinglevels'], 'BCarray' );
+ ApiResult::setArrayType( $data['semiprotectedlevels'], 'BCarray' );
+
+ ApiResult::setIndexedTagName( $data['types'], 'type' );
+ ApiResult::setIndexedTagName( $data['levels'], 'level' );
+ ApiResult::setIndexedTagName( $data['cascadinglevels'], 'level' );
+ ApiResult::setIndexedTagName( $data['semiprotectedlevels'], 'level' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ public function appendLanguages( $property ) {
+ $params = $this->extractRequestParams();
+ $langCode = isset( $params['inlanguagecode'] ) ? $params['inlanguagecode'] : '';
+ $langNames = Language::fetchLanguageNames( $langCode );
+
+ $data = [];
+
+ foreach ( $langNames as $code => $name ) {
+ $lang = [ 'code' => $code ];
+ ApiResult::setContentValue( $lang, 'name', $name );
+ $data[] = $lang;
+ }
+ ApiResult::setIndexedTagName( $data, 'lang' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ // Export information about which page languages will trigger
+ // language conversion. (T153341)
+ public function appendLanguageVariants( $property ) {
+ $langNames = LanguageConverter::$languagesWithVariants;
+ if ( $this->getConfig()->get( 'DisableLangConversion' ) ) {
+ // Ensure result is empty if language conversion is disabled.
+ $langNames = [];
+ }
+ sort( $langNames );
+
+ $data = [];
+ foreach ( $langNames as $langCode ) {
+ $lang = Language::factory( $langCode );
+ if ( $lang->getConverter() instanceof FakeConverter ) {
+ // Only languages which do not return instances of
+ // FakeConverter implement language conversion.
+ continue;
+ }
+ $data[$langCode] = [];
+ ApiResult::setIndexedTagName( $data[$langCode], 'variant' );
+ ApiResult::setArrayType( $data[$langCode], 'kvp', 'code' );
+
+ $variants = $lang->getVariants();
+ sort( $variants );
+ foreach ( $variants as $v ) {
+ $fallbacks = $lang->getConverter()->getVariantFallbacks( $v );
+ if ( !is_array( $fallbacks ) ) {
+ $fallbacks = [ $fallbacks ];
+ }
+ $data[$langCode][$v] = [
+ 'fallbacks' => $fallbacks,
+ ];
+ ApiResult::setIndexedTagName(
+ $data[$langCode][$v]['fallbacks'], 'variant'
+ );
+ }
+ }
+ ApiResult::setIndexedTagName( $data, 'lang' );
+ ApiResult::setArrayType( $data, 'kvp', 'code' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ public function appendSkins( $property ) {
+ $data = [];
+ $allowed = Skin::getAllowedSkins();
+ $default = Skin::normalizeKey( 'default' );
+ foreach ( Skin::getSkinNames() as $name => $displayName ) {
+ $msg = $this->msg( "skinname-{$name}" );
+ $code = $this->getParameter( 'inlanguagecode' );
+ if ( $code && Language::isValidCode( $code ) ) {
+ $msg->inLanguage( $code );
+ } else {
+ $msg->inContentLanguage();
+ }
+ if ( $msg->exists() ) {
+ $displayName = $msg->text();
+ }
+ $skin = [ 'code' => $name ];
+ ApiResult::setContentValue( $skin, 'name', $displayName );
+ if ( !isset( $allowed[$name] ) ) {
+ $skin['unusable'] = true;
+ }
+ if ( $name === $default ) {
+ $skin['default'] = true;
+ }
+ $data[] = $skin;
+ }
+ ApiResult::setIndexedTagName( $data, 'skin' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ public function appendExtensionTags( $property ) {
+ global $wgParser;
+ $wgParser->firstCallInit();
+ $tags = array_map( [ $this, 'formatParserTags' ], $wgParser->getTags() );
+ ApiResult::setArrayType( $tags, 'BCarray' );
+ ApiResult::setIndexedTagName( $tags, 't' );
+
+ return $this->getResult()->addValue( 'query', $property, $tags );
+ }
+
+ public function appendFunctionHooks( $property ) {
+ global $wgParser;
+ $wgParser->firstCallInit();
+ $hooks = $wgParser->getFunctionHooks();
+ ApiResult::setArrayType( $hooks, 'BCarray' );
+ ApiResult::setIndexedTagName( $hooks, 'h' );
+
+ return $this->getResult()->addValue( 'query', $property, $hooks );
+ }
+
+ public function appendVariables( $property ) {
+ $variables = MagicWord::getVariableIDs();
+ ApiResult::setArrayType( $variables, 'BCarray' );
+ ApiResult::setIndexedTagName( $variables, 'v' );
+
+ return $this->getResult()->addValue( 'query', $property, $variables );
+ }
+
+ public function appendProtocols( $property ) {
+ // Make a copy of the global so we don't try to set the _element key of it - T47130
+ $protocols = array_values( $this->getConfig()->get( 'UrlProtocols' ) );
+ ApiResult::setArrayType( $protocols, 'BCarray' );
+ ApiResult::setIndexedTagName( $protocols, 'p' );
+
+ return $this->getResult()->addValue( 'query', $property, $protocols );
+ }
+
+ public function appendDefaultOptions( $property ) {
+ $options = User::getDefaultOptions();
+ $options[ApiResult::META_BC_BOOLS] = array_keys( $options );
+ return $this->getResult()->addValue( 'query', $property, $options );
+ }
+
+ public function appendUploadDialog( $property ) {
+ $config = $this->getConfig()->get( 'UploadDialog' );
+ return $this->getResult()->addValue( 'query', $property, $config );
+ }
+
+ private function formatParserTags( $item ) {
+ return "<{$item}>";
+ }
+
+ public function appendSubscribedHooks( $property ) {
+ $hooks = $this->getConfig()->get( 'Hooks' );
+ $myWgHooks = $hooks;
+ ksort( $myWgHooks );
+
+ $data = [];
+ foreach ( $myWgHooks as $name => $subscribers ) {
+ $arr = [
+ 'name' => $name,
+ 'subscribers' => array_map( [ SpecialVersion::class, 'arrayToString' ], $subscribers ),
+ ];
+
+ ApiResult::setArrayType( $arr['subscribers'], 'array' );
+ ApiResult::setIndexedTagName( $arr['subscribers'], 's' );
+ $data[] = $arr;
+ }
+
+ ApiResult::setIndexedTagName( $data, 'hook' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ public function getCacheMode( $params ) {
+ // Messages for $wgExtraInterlanguageLinkPrefixes depend on user language
+ if (
+ count( $this->getConfig()->get( 'ExtraInterlanguageLinkPrefixes' ) ) &&
+ !is_null( $params['prop'] ) &&
+ in_array( 'interwikimap', $params['prop'] )
+ ) {
+ return 'anon-public-user-private';
+ }
+
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_DFLT => 'general',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'general',
+ 'namespaces',
+ 'namespacealiases',
+ 'specialpagealiases',
+ 'magicwords',
+ 'interwikimap',
+ 'dbrepllag',
+ 'statistics',
+ 'usergroups',
+ 'libraries',
+ 'extensions',
+ 'fileextensions',
+ 'rightsinfo',
+ 'restrictions',
+ 'languages',
+ 'languagevariants',
+ 'skins',
+ 'extensiontags',
+ 'functionhooks',
+ 'showhooks',
+ 'variables',
+ 'protocols',
+ 'defaultoptions',
+ 'uploaddialog',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'filteriw' => [
+ ApiBase::PARAM_TYPE => [
+ 'local',
+ '!local',
+ ]
+ ],
+ 'showalldb' => false,
+ 'numberingroup' => false,
+ 'inlanguagecode' => null,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
+ => 'apihelp-query+siteinfo-example-simple',
+ 'action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local'
+ => 'apihelp-query+siteinfo-example-interwiki',
+ 'action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb='
+ => 'apihelp-query+siteinfo-example-replag',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Siteinfo';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryStashImageInfo.php b/www/wiki/includes/api/ApiQueryStashImageInfo.php
new file mode 100644
index 00000000..1924ca03
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryStashImageInfo.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * API for MediaWiki 1.16+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A query action to get image information from temporarily stashed files.
+ *
+ * @ingroup API
+ */
+class ApiQueryStashImageInfo extends ApiQueryImageInfo {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'sii' );
+ }
+
+ public function execute() {
+ if ( !$this->getUser()->isLoggedIn() ) {
+ $this->dieWithError( 'apierror-mustbeloggedin-uploadstash', 'notloggedin' );
+ }
+
+ $params = $this->extractRequestParams();
+ $modulePrefix = $this->getModulePrefix();
+
+ $prop = array_flip( $params['prop'] );
+
+ $scale = $this->getScale( $params );
+
+ $result = $this->getResult();
+
+ $this->requireAtLeastOneParameter( $params, 'filekey', 'sessionkey' );
+
+ // Alias sessionkey to filekey, but give an existing filekey precedence.
+ if ( !$params['filekey'] && $params['sessionkey'] ) {
+ $params['filekey'] = $params['sessionkey'];
+ }
+
+ try {
+ $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
+
+ foreach ( $params['filekey'] as $filekey ) {
+ $file = $stash->getFile( $filekey );
+ $finalThumbParam = $this->mergeThumbParams( $file, $scale, $params['urlparam'] );
+ $imageInfo = ApiQueryImageInfo::getInfo( $file, $prop, $result, $finalThumbParam );
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $imageInfo );
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], $modulePrefix );
+ }
+ // @todo Update exception handling here to understand current getFile exceptions
+ } catch ( UploadStashFileNotFoundException $e ) {
+ $this->dieWithException( $e, [ 'wrap' => 'apierror-stashedfilenotfound' ] );
+ } catch ( UploadStashBadPathException $e ) {
+ $this->dieWithException( $e, [ 'wrap' => 'apierror-stashpathinvalid' ] );
+ }
+ }
+
+ private $propertyFilter = [
+ 'user', 'userid', 'comment', 'parsedcomment',
+ 'mediatype', 'archivename', 'uploadwarning',
+ ];
+
+ public function getAllowedParams() {
+ return [
+ 'filekey' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'sessionkey' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'timestamp|url',
+ ApiBase::PARAM_TYPE => self::getPropertyNames( $this->propertyFilter ),
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-prop',
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => self::getPropertyMessages( $this->propertyFilter )
+ ],
+ 'urlwidth' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_DFLT => -1,
+ ApiBase::PARAM_HELP_MSG => [
+ 'apihelp-query+imageinfo-param-urlwidth',
+ ApiQueryImageInfo::TRANSFORM_LIMIT,
+ ],
+ ],
+ 'urlheight' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_DFLT => -1,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlheight',
+ ],
+ 'urlparam' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlparam',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567'
+ => 'apihelp-query+stashimageinfo-example-simple',
+ 'action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+ 'siiurlwidth=120&siiprop=url'
+ => 'apihelp-query+stashimageinfo-example-params',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Stashimageinfo';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryTags.php b/www/wiki/includes/api/ApiQueryTags.php
new file mode 100644
index 00000000..ed5fe8a5
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryTags.php
@@ -0,0 +1,165 @@
+<?php
+/**
+ * Copyright © 2009
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate change tags.
+ *
+ * @ingroup API
+ */
+class ApiQueryTags extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'tg' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $prop = array_flip( $params['prop'] );
+
+ $fld_displayname = isset( $prop['displayname'] );
+ $fld_description = isset( $prop['description'] );
+ $fld_hitcount = isset( $prop['hitcount'] );
+ $fld_defined = isset( $prop['defined'] );
+ $fld_source = isset( $prop['source'] );
+ $fld_active = isset( $prop['active'] );
+
+ $limit = $params['limit'];
+ $result = $this->getResult();
+
+ $softwareDefinedTags = array_fill_keys( ChangeTags::listSoftwareDefinedTags(), 0 );
+ $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
+ $softwareActivatedTags = array_fill_keys( ChangeTags::listSoftwareActivatedTags(), 0 );
+ $tagStats = ChangeTags::tagUsageStatistics();
+
+ $tagHitcounts = array_merge( $softwareDefinedTags, $explicitlyDefinedTags, $tagStats );
+ $tags = array_keys( $tagHitcounts );
+
+ # Fetch defined tags that aren't past the continuation
+ if ( $params['continue'] !== null ) {
+ $cont = $params['continue'];
+ $tags = array_filter( $tags, function ( $v ) use ( $cont ) {
+ return $v >= $cont;
+ } );
+ }
+
+ # Now make sure the array is sorted for proper continuation
+ sort( $tags );
+
+ $count = 0;
+ foreach ( $tags as $tagName ) {
+ if ( ++$count > $limit ) {
+ $this->setContinueEnumParameter( 'continue', $tagName );
+ break;
+ }
+
+ $tag = [];
+ $tag['name'] = $tagName;
+
+ if ( $fld_displayname ) {
+ $tag['displayname'] = ChangeTags::tagDescription( $tagName, $this );
+ }
+
+ if ( $fld_description ) {
+ $msg = $this->msg( "tag-$tagName-description" );
+ $tag['description'] = $msg->exists() ? $msg->text() : '';
+ }
+
+ if ( $fld_hitcount ) {
+ $tag['hitcount'] = intval( $tagHitcounts[$tagName] );
+ }
+
+ $isSoftware = isset( $softwareDefinedTags[$tagName] );
+ $isExplicit = isset( $explicitlyDefinedTags[$tagName] );
+
+ if ( $fld_defined ) {
+ $tag['defined'] = $isSoftware || $isExplicit;
+ }
+
+ if ( $fld_source ) {
+ $tag['source'] = [];
+ if ( $isSoftware ) {
+ // TODO: Can we change this to 'software'?
+ $tag['source'][] = 'extension';
+ }
+ if ( $isExplicit ) {
+ $tag['source'][] = 'manual';
+ }
+ }
+
+ if ( $fld_active ) {
+ $tag['active'] = $isExplicit || isset( $softwareActivatedTags[$tagName] );
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $tag );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $tagName );
+ break;
+ }
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'tag' );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'prop' => [
+ ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_TYPE => [
+ 'displayname',
+ 'description',
+ 'hitcount',
+ 'defined',
+ 'source',
+ 'active',
+ ],
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ]
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=tags&tgprop=displayname|description|hitcount|defined'
+ => 'apihelp-query+tags-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tags';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryTokens.php b/www/wiki/includes/api/ApiQueryTokens.php
new file mode 100644
index 00000000..e86fdf35
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryTokens.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Module to fetch tokens via action=query&meta=tokens
+ *
+ * Copyright © 2014 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.24
+ */
+
+/**
+ * Module to fetch tokens via action=query&meta=tokens
+ *
+ * @ingroup API
+ * @since 1.24
+ */
+class ApiQueryTokens extends ApiQueryBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $res = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+
+ if ( $this->lacksSameOriginSecurity() ) {
+ $this->addWarning( [ 'apiwarn-tokens-origin' ] );
+ return;
+ }
+
+ $user = $this->getUser();
+ $session = $this->getRequest()->getSession();
+ $salts = self::getTokenTypeSalts();
+ foreach ( $params['type'] as $type ) {
+ $res[$type . 'token'] = self::getToken( $user, $session, $salts[$type] )->toString();
+ }
+
+ $this->getResult()->addValue( 'query', $this->getModuleName(), $res );
+ }
+
+ /**
+ * Get the salts for known token types
+ * @return (string|array)[] Returning a string will use that as the salt
+ * for User::getEditTokenObject() to fetch the token, which will give a
+ * LoggedOutEditToken (always "+\\") for anonymous users. Returning an
+ * array will use it as parameters to MediaWiki\Session\Session::getToken(),
+ * which will always return a full token even for anonymous users.
+ */
+ public static function getTokenTypeSalts() {
+ static $salts = null;
+ if ( !$salts ) {
+ $salts = [
+ 'csrf' => '',
+ 'watch' => 'watch',
+ 'patrol' => 'patrol',
+ 'rollback' => 'rollback',
+ 'userrights' => 'userrights',
+ 'login' => [ '', 'login' ],
+ 'createaccount' => [ '', 'createaccount' ],
+ ];
+ Hooks::run( 'ApiQueryTokensRegisterTypes', [ &$salts ] );
+ ksort( $salts );
+ }
+
+ return $salts;
+ }
+
+ /**
+ * Get a token from a salt
+ * @param User $user
+ * @param MediaWiki\Session\Session $session
+ * @param string|array $salt A string will be used as the salt for
+ * User::getEditTokenObject() to fetch the token, which will give a
+ * LoggedOutEditToken (always "+\\") for anonymous users. An array will
+ * be used as parameters to MediaWiki\Session\Session::getToken(), which
+ * will always return a full token even for anonymous users. An array will
+ * also persist the session.
+ * @return MediaWiki\Session\Token
+ */
+ public static function getToken( User $user, MediaWiki\Session\Session $session, $salt ) {
+ if ( is_array( $salt ) ) {
+ $session->persist();
+ return call_user_func_array( [ $session, 'getToken' ], $salt );
+ } else {
+ return $user->getEditTokenObject( $salt, $session->getRequest() );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'type' => [
+ ApiBase::PARAM_DFLT => 'csrf',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => array_keys( self::getTokenTypeSalts() ),
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&meta=tokens'
+ => 'apihelp-query+tokens-example-simple',
+ 'action=query&meta=tokens&type=watch|patrol'
+ => 'apihelp-query+tokens-example-types',
+ ];
+ }
+
+ public function isReadMode() {
+ // So login tokens can be fetched on private wikis
+ return false;
+ }
+
+ public function getCacheMode( $params ) {
+ return 'private';
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tokens';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryUserContributions.php b/www/wiki/includes/api/ApiQueryUserContributions.php
new file mode 100644
index 00000000..12f42edc
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryUserContributions.php
@@ -0,0 +1,832 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This query action adds a list of a specified user's contributions to the output.
+ *
+ * @ingroup API
+ */
+class ApiQueryContributions extends ApiQueryBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'uc' );
+ }
+
+ private $params, $multiUserMode, $orderBy, $parentLens;
+ private $fld_ids = false, $fld_title = false, $fld_timestamp = false,
+ $fld_comment = false, $fld_parsedcomment = false, $fld_flags = false,
+ $fld_patrolled = false, $fld_tags = false, $fld_size = false, $fld_sizediff = false;
+
+ public function execute() {
+ global $wgActorTableSchemaMigrationStage;
+
+ // Parse some parameters
+ $this->params = $this->extractRequestParams();
+
+ $this->commentStore = CommentStore::getStore();
+
+ $prop = array_flip( $this->params['prop'] );
+ $this->fld_ids = isset( $prop['ids'] );
+ $this->fld_title = isset( $prop['title'] );
+ $this->fld_comment = isset( $prop['comment'] );
+ $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
+ $this->fld_size = isset( $prop['size'] );
+ $this->fld_sizediff = isset( $prop['sizediff'] );
+ $this->fld_flags = isset( $prop['flags'] );
+ $this->fld_timestamp = isset( $prop['timestamp'] );
+ $this->fld_patrolled = isset( $prop['patrolled'] );
+ $this->fld_tags = isset( $prop['tags'] );
+
+ // Most of this code will use the 'contributions' group DB, which can map to replica DBs
+ // with extra user based indexes or partioning by user. The additional metadata
+ // queries should use a regular replica DB since the lookup pattern is not all by user.
+ $dbSecondary = $this->getDB(); // any random replica DB
+
+ // TODO: if the query is going only against the revision table, should this be done?
+ $this->selectNamedDB( 'contributions', DB_REPLICA, 'contributions' );
+
+ $sort = ( $this->params['dir'] == 'newer' ? '' : ' DESC' );
+ $op = ( $this->params['dir'] == 'older' ? '<' : '>' );
+
+ // Create an Iterator that produces the UserIdentity objects we need, depending
+ // on which of the 'userprefix', 'userids', or 'user' params was
+ // specified.
+ $this->requireOnlyOneParameter( $this->params, 'userprefix', 'userids', 'user' );
+ if ( isset( $this->params['userprefix'] ) ) {
+ $this->multiUserMode = true;
+ $this->orderBy = 'name';
+ $fname = __METHOD__;
+
+ // Because 'userprefix' might produce a huge number of users (e.g.
+ // a wiki with users "Test00000001" to "Test99999999"), use a
+ // generator with batched lookup and continuation.
+ $userIter = call_user_func( function () use ( $dbSecondary, $sort, $op, $fname ) {
+ global $wgActorTableSchemaMigrationStage;
+
+ $fromName = false;
+ if ( !is_null( $this->params['continue'] ) ) {
+ $continue = explode( '|', $this->params['continue'] );
+ $this->dieContinueUsageIf( count( $continue ) != 4 );
+ $this->dieContinueUsageIf( $continue[0] !== 'name' );
+ $fromName = $continue[1];
+ }
+ $like = $dbSecondary->buildLike( $this->params['userprefix'], $dbSecondary->anyString() );
+
+ $limit = 501;
+
+ do {
+ $from = $fromName ? "$op= " . $dbSecondary->addQuotes( $fromName ) : false;
+
+ // For the new schema, pull from the actor table. For the
+ // old, pull from rev_user. For migration a FULL [OUTER]
+ // JOIN would be what we want, except MySQL doesn't support
+ // that so we have to UNION instead.
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) {
+ $res = $dbSecondary->select(
+ 'actor',
+ [ 'actor_id', 'user_id' => 'COALESCE(actor_user,0)', 'user_name' => 'actor_name' ],
+ array_merge( [ "actor_name$like" ], $from ? [ "actor_name $from" ] : [] ),
+ $fname,
+ [ 'ORDER BY' => [ "user_name $sort" ], 'LIMIT' => $limit ]
+ );
+ } elseif ( $wgActorTableSchemaMigrationStage === MIGRATION_OLD ) {
+ $res = $dbSecondary->select(
+ 'revision',
+ [ 'actor_id' => 'NULL', 'user_id' => 'rev_user', 'user_name' => 'rev_user_text' ],
+ array_merge( [ "rev_user_text$like" ], $from ? [ "rev_user_text $from" ] : [] ),
+ $fname,
+ [ 'DISTINCT', 'ORDER BY' => [ "rev_user_text $sort" ], 'LIMIT' => $limit ]
+ );
+ } else {
+ // There are three queries we have to combine to be sure of getting all results:
+ // - actor table (any rows that have been migrated will have empty rev_user_text)
+ // - revision+actor by user id
+ // - revision+actor by name for anons
+ $options = $dbSecondary->unionSupportsOrderAndLimit()
+ ? [ 'ORDER BY' => [ "user_name $sort" ], 'LIMIT' => $limit ] : [];
+ $subsql = [];
+ $subsql[] = $dbSecondary->selectSQLText(
+ 'actor',
+ [ 'actor_id', 'user_id' => 'COALESCE(actor_user,0)', 'user_name' => 'actor_name' ],
+ array_merge( [ "actor_name$like" ], $from ? [ "actor_name $from" ] : [] ),
+ $fname,
+ $options
+ );
+ $subsql[] = $dbSecondary->selectSQLText(
+ [ 'revision', 'actor' ],
+ [ 'actor_id', 'user_id' => 'rev_user', 'user_name' => 'rev_user_text' ],
+ array_merge(
+ [ "rev_user_text$like", 'rev_user != 0' ],
+ $from ? [ "rev_user_text $from" ] : []
+ ),
+ $fname,
+ array_merge( [ 'DISTINCT' ], $options ),
+ [ 'actor' => [ 'LEFT JOIN', 'rev_user = actor_user' ] ]
+ );
+ $subsql[] = $dbSecondary->selectSQLText(
+ [ 'revision', 'actor' ],
+ [ 'actor_id', 'user_id' => 'rev_user', 'user_name' => 'rev_user_text' ],
+ array_merge(
+ [ "rev_user_text$like", 'rev_user = 0' ],
+ $from ? [ "rev_user_text $from" ] : []
+ ),
+ $fname,
+ array_merge( [ 'DISTINCT' ], $options ),
+ [ 'actor' => [ 'LEFT JOIN', 'rev_user_text = actor_name' ] ]
+ );
+ $sql = $dbSecondary->unionQueries( $subsql, false ) . " ORDER BY user_name $sort";
+ $sql = $dbSecondary->limitResult( $sql, $limit );
+ $res = $dbSecondary->query( $sql, $fname );
+ }
+
+ $count = 0;
+ $fromName = false;
+ foreach ( $res as $row ) {
+ if ( ++$count >= $limit ) {
+ $fromName = $row->user_name;
+ break;
+ }
+ yield User::newFromRow( $row );
+ }
+ } while ( $fromName !== false );
+ } );
+ // Do the actual sorting client-side, because otherwise
+ // prepareQuery might try to sort by actor and confuse everything.
+ $batchSize = 1;
+ } elseif ( isset( $this->params['userids'] ) ) {
+ if ( !count( $this->params['userids'] ) ) {
+ $encParamName = $this->encodeParamName( 'userids' );
+ $this->dieWithError( [ 'apierror-paramempty', $encParamName ], "paramempty_$encParamName" );
+ }
+
+ $ids = [];
+ foreach ( $this->params['userids'] as $uid ) {
+ if ( $uid <= 0 ) {
+ $this->dieWithError( [ 'apierror-invaliduserid', $uid ], 'invaliduserid' );
+ }
+ $ids[] = $uid;
+ }
+
+ $this->orderBy = 'id';
+ $this->multiUserMode = count( $ids ) > 1;
+
+ $from = $fromId = false;
+ if ( $this->multiUserMode && !is_null( $this->params['continue'] ) ) {
+ $continue = explode( '|', $this->params['continue'] );
+ $this->dieContinueUsageIf( count( $continue ) != 4 );
+ $this->dieContinueUsageIf( $continue[0] !== 'id' && $continue[0] !== 'actor' );
+ $fromId = (int)$continue[1];
+ $this->dieContinueUsageIf( $continue[1] !== (string)$fromId );
+ $from = "$op= $fromId";
+ }
+
+ // For the new schema, just select from the actor table. For the
+ // old and transitional schemas, select from user and left join
+ // actor if it exists.
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) {
+ $res = $dbSecondary->select(
+ 'actor',
+ [ 'actor_id', 'user_id' => 'actor_user', 'user_name' => 'actor_name' ],
+ array_merge( [ 'actor_user' => $ids ], $from ? [ "actor_id $from" ] : [] ),
+ __METHOD__,
+ [ 'ORDER BY' => "user_id $sort" ]
+ );
+ } elseif ( $wgActorTableSchemaMigrationStage === MIGRATION_OLD ) {
+ $res = $dbSecondary->select(
+ 'user',
+ [ 'actor_id' => 'NULL', 'user_id' => 'user_id', 'user_name' => 'user_name' ],
+ array_merge( [ 'user_id' => $ids ], $from ? [ "user_id $from" ] : [] ),
+ __METHOD__,
+ [ 'ORDER BY' => "user_id $sort" ]
+ );
+ } else {
+ $res = $dbSecondary->select(
+ [ 'user', 'actor' ],
+ [ 'actor_id', 'user_id', 'user_name' ],
+ array_merge( [ 'user_id' => $ids ], $from ? [ "user_id $from" ] : [] ),
+ __METHOD__,
+ [ 'ORDER BY' => "user_id $sort" ],
+ [ 'actor' => [ 'LEFT JOIN', 'actor_user = user_id' ] ]
+ );
+ }
+ $userIter = UserArray::newFromResult( $res );
+ $batchSize = count( $ids );
+ } else {
+ $names = [];
+ if ( !count( $this->params['user'] ) ) {
+ $encParamName = $this->encodeParamName( 'user' );
+ $this->dieWithError(
+ [ 'apierror-paramempty', $encParamName ], "paramempty_$encParamName"
+ );
+ }
+ foreach ( $this->params['user'] as $u ) {
+ if ( $u === '' ) {
+ $encParamName = $this->encodeParamName( 'user' );
+ $this->dieWithError(
+ [ 'apierror-paramempty', $encParamName ], "paramempty_$encParamName"
+ );
+ }
+
+ if ( User::isIP( $u ) || ExternalUserNames::isExternal( $u ) ) {
+ $names[$u] = null;
+ } else {
+ $name = User::getCanonicalName( $u, 'valid' );
+ if ( $name === false ) {
+ $encParamName = $this->encodeParamName( 'user' );
+ $this->dieWithError(
+ [ 'apierror-baduser', $encParamName, wfEscapeWikiText( $u ) ], "baduser_$encParamName"
+ );
+ }
+ $names[$name] = null;
+ }
+ }
+
+ $this->orderBy = 'name';
+ $this->multiUserMode = count( $names ) > 1;
+
+ $from = $fromName = false;
+ if ( $this->multiUserMode && !is_null( $this->params['continue'] ) ) {
+ $continue = explode( '|', $this->params['continue'] );
+ $this->dieContinueUsageIf( count( $continue ) != 4 );
+ $this->dieContinueUsageIf( $continue[0] !== 'name' && $continue[0] !== 'actor' );
+ $fromName = $continue[1];
+ $from = "$op= " . $dbSecondary->addQuotes( $fromName );
+ }
+
+ // For the new schema, just select from the actor table. For the
+ // old and transitional schemas, select from user and left join
+ // actor if it exists then merge in any unknown users (IPs and imports).
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) {
+ $res = $dbSecondary->select(
+ 'actor',
+ [ 'actor_id', 'user_id' => 'actor_user', 'user_name' => 'actor_name' ],
+ array_merge( [ 'actor_name' => array_keys( $names ) ], $from ? [ "actor_id $from" ] : [] ),
+ __METHOD__,
+ [ 'ORDER BY' => "actor_name $sort" ]
+ );
+ $userIter = UserArray::newFromResult( $res );
+ } else {
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_OLD ) {
+ $res = $dbSecondary->select(
+ 'user',
+ [ 'actor_id' => 'NULL', 'user_id', 'user_name' ],
+ array_merge( [ 'user_name' => array_keys( $names ) ], $from ? [ "user_name $from" ] : [] ),
+ __METHOD__
+ );
+ } else {
+ $res = $dbSecondary->select(
+ [ 'user', 'actor' ],
+ [ 'actor_id', 'user_id', 'user_name' ],
+ array_merge( [ 'user_name' => array_keys( $names ) ], $from ? [ "user_name $from" ] : [] ),
+ __METHOD__,
+ [],
+ [ 'actor' => [ 'LEFT JOIN', 'actor_user = user_id' ] ]
+ );
+ }
+ foreach ( $res as $row ) {
+ $names[$row->user_name] = $row;
+ }
+ call_user_func_array(
+ $this->params['dir'] == 'newer' ? 'ksort' : 'krsort', [ &$names, SORT_STRING ]
+ );
+ $neg = $op === '>' ? -1 : 1;
+ $userIter = call_user_func( function () use ( $names, $fromName, $neg ) {
+ foreach ( $names as $name => $row ) {
+ if ( $fromName === false || $neg * strcmp( $name, $fromName ) <= 0 ) {
+ $user = $row ? User::newFromRow( $row ) : User::newFromName( $name, false );
+ yield $user;
+ }
+ }
+ } );
+ }
+ $batchSize = count( $names );
+ }
+
+ // During migration, force ordering on the client side because we're
+ // having to combine multiple queries that would otherwise have
+ // different sort orders.
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_WRITE_BOTH ||
+ $wgActorTableSchemaMigrationStage === MIGRATION_WRITE_NEW
+ ) {
+ $batchSize = 1;
+ }
+
+ // With the new schema, the DB query will order by actor so update $this->orderBy to match.
+ if ( $batchSize > 1 && $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) {
+ $this->orderBy = 'actor';
+ }
+
+ $count = 0;
+ $limit = $this->params['limit'];
+ $userIter->rewind();
+ while ( $userIter->valid() ) {
+ $users = [];
+ while ( count( $users ) < $batchSize && $userIter->valid() ) {
+ $users[] = $userIter->current();
+ $userIter->next();
+ }
+
+ // Ugh. We have to run the query three times, once for each
+ // possible 'orcond' from ActorMigration, and then merge them all
+ // together in the proper order. And preserving the correct
+ // $hookData for each one.
+ // @todo When ActorMigration is removed, this can go back to a
+ // single prepare and select.
+ $merged = [];
+ foreach ( [ 'actor', 'userid', 'username' ] as $which ) {
+ if ( $this->prepareQuery( $users, $limit - $count, $which ) ) {
+ $hookData = [];
+ $res = $this->select( __METHOD__, [], $hookData );
+ foreach ( $res as $row ) {
+ $merged[] = [ $row, &$hookData ];
+ }
+ }
+ }
+ $neg = $this->params['dir'] == 'newer' ? 1 : -1;
+ usort( $merged, function ( $a, $b ) use ( $neg, $batchSize ) {
+ if ( $batchSize === 1 ) { // One user, can't be different
+ $ret = 0;
+ } elseif ( $this->orderBy === 'id' ) {
+ $ret = $a[0]->rev_user - $b[0]->rev_user;
+ } elseif ( $this->orderBy === 'name' ) {
+ $ret = strcmp( $a[0]->rev_user_text, $b[0]->rev_user_text );
+ } else {
+ $ret = $a[0]->rev_actor - $b[0]->rev_actor;
+ }
+
+ if ( !$ret ) {
+ $ret = strcmp(
+ wfTimestamp( TS_MW, $a[0]->rev_timestamp ),
+ wfTimestamp( TS_MW, $b[0]->rev_timestamp )
+ );
+ }
+
+ if ( !$ret ) {
+ $ret = $a[0]->rev_id - $b[0]->rev_id;
+ }
+
+ return $neg * $ret;
+ } );
+ $merged = array_slice( $merged, 0, $limit - $count + 1 );
+ // (end "Ugh")
+
+ if ( $this->fld_sizediff ) {
+ $revIds = [];
+ foreach ( $merged as $data ) {
+ if ( $data[0]->rev_parent_id ) {
+ $revIds[] = $data[0]->rev_parent_id;
+ }
+ }
+ $this->parentLens = Revision::getParentLengths( $dbSecondary, $revIds );
+ }
+
+ foreach ( $merged as $data ) {
+ $row = $data[0];
+ $hookData = &$data[1];
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $this->continueStr( $row ) );
+ break 2;
+ }
+
+ $vals = $this->extractRowInfo( $row );
+ $fit = $this->processRow( $row, $vals, $hookData ) &&
+ $this->getResult()->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $this->continueStr( $row ) );
+ break 2;
+ }
+ }
+ }
+
+ $this->getResult()->addIndexedTagName( [ 'query', $this->getModuleName() ], 'item' );
+ }
+
+ /**
+ * Prepares the query and returns the limit of rows requested
+ * @param User[] $users
+ * @param int $limit
+ * @param string $which 'actor', 'userid', or 'username'
+ * @return bool
+ */
+ private function prepareQuery( array $users, $limit, $which ) {
+ global $wgActorTableSchemaMigrationStage;
+
+ $this->resetQueryParams();
+ $db = $this->getDB();
+
+ $revQuery = Revision::getQueryInfo( [ 'page' ] );
+ $this->addTables( $revQuery['tables'] );
+ $this->addJoinConds( $revQuery['joins'] );
+ $this->addFields( $revQuery['fields'] );
+
+ $revWhere = ActorMigration::newMigration()->getWhere( $db, 'rev_user', $users );
+ if ( !isset( $revWhere['orconds'][$which] ) ) {
+ return false;
+ }
+ $this->addWhere( $revWhere['orconds'][$which] );
+
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) {
+ $orderUserField = 'rev_actor';
+ $userField = $this->orderBy === 'actor' ? 'revactor_actor' : 'actor_name';
+ } else {
+ $orderUserField = $this->orderBy === 'id' ? 'rev_user' : 'rev_user_text';
+ $userField = $revQuery['fields'][$orderUserField];
+ }
+ if ( $which === 'actor' ) {
+ $tsField = 'revactor_timestamp';
+ $idField = 'revactor_rev';
+ } else {
+ $tsField = 'rev_timestamp';
+ $idField = 'rev_id';
+ }
+
+ // Handle continue parameter
+ if ( !is_null( $this->params['continue'] ) ) {
+ $continue = explode( '|', $this->params['continue'] );
+ if ( $this->multiUserMode ) {
+ $this->dieContinueUsageIf( count( $continue ) != 4 );
+ $modeFlag = array_shift( $continue );
+ $this->dieContinueUsageIf( $modeFlag !== $this->orderBy );
+ $encUser = $db->addQuotes( array_shift( $continue ) );
+ } else {
+ $this->dieContinueUsageIf( count( $continue ) != 2 );
+ }
+ $encTS = $db->addQuotes( $db->timestamp( $continue[0] ) );
+ $encId = (int)$continue[1];
+ $this->dieContinueUsageIf( $encId != $continue[1] );
+ $op = ( $this->params['dir'] == 'older' ? '<' : '>' );
+ if ( $this->multiUserMode ) {
+ $this->addWhere(
+ "$userField $op $encUser OR " .
+ "($userField = $encUser AND " .
+ "($tsField $op $encTS OR " .
+ "($tsField = $encTS AND " .
+ "$idField $op= $encId)))"
+ );
+ } else {
+ $this->addWhere(
+ "$tsField $op $encTS OR " .
+ "($tsField = $encTS AND " .
+ "$idField $op= $encId)"
+ );
+ }
+ }
+
+ // Don't include any revisions where we're not supposed to be able to
+ // see the username.
+ $user = $this->getUser();
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'rev_deleted', $bitmask ) . " != $bitmask" );
+ }
+
+ // Add the user field to ORDER BY if there are multiple users
+ if ( count( $users ) > 1 ) {
+ $this->addWhereRange( $orderUserField, $this->params['dir'], null, null );
+ }
+
+ // Then timestamp
+ $this->addTimestampWhereRange( $tsField,
+ $this->params['dir'], $this->params['start'], $this->params['end'] );
+
+ // Then rev_id for a total ordering
+ $this->addWhereRange( $idField, $this->params['dir'], null, null );
+
+ $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
+
+ $show = $this->params['show'];
+ if ( $this->params['toponly'] ) { // deprecated/old param
+ $show[] = 'top';
+ }
+ if ( !is_null( $show ) ) {
+ $show = array_flip( $show );
+
+ if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
+ || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+ || ( isset( $show['autopatrolled'] ) && isset( $show['!autopatrolled'] ) )
+ || ( isset( $show['autopatrolled'] ) && isset( $show['!patrolled'] ) )
+ || ( isset( $show['top'] ) && isset( $show['!top'] ) )
+ || ( isset( $show['new'] ) && isset( $show['!new'] ) )
+ ) {
+ $this->dieWithError( 'apierror-show' );
+ }
+
+ $this->addWhereIf( 'rev_minor_edit = 0', isset( $show['!minor'] ) );
+ $this->addWhereIf( 'rev_minor_edit != 0', isset( $show['minor'] ) );
+ $this->addWhereIf(
+ 'rc_patrolled = ' . RecentChange::PRC_UNPATROLLED,
+ isset( $show['!patrolled'] )
+ );
+ $this->addWhereIf(
+ 'rc_patrolled != ' . RecentChange::PRC_UNPATROLLED,
+ isset( $show['patrolled'] )
+ );
+ $this->addWhereIf(
+ 'rc_patrolled != ' . RecentChange::PRC_AUTOPATROLLED,
+ isset( $show['!autopatrolled'] )
+ );
+ $this->addWhereIf(
+ 'rc_patrolled = ' . RecentChange::PRC_AUTOPATROLLED,
+ isset( $show['autopatrolled'] )
+ );
+ $this->addWhereIf( $idField . ' != page_latest', isset( $show['!top'] ) );
+ $this->addWhereIf( $idField . ' = page_latest', isset( $show['top'] ) );
+ $this->addWhereIf( 'rev_parent_id != 0', isset( $show['!new'] ) );
+ $this->addWhereIf( 'rev_parent_id = 0', isset( $show['new'] ) );
+ }
+ $this->addOption( 'LIMIT', $limit + 1 );
+
+ if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ||
+ isset( $show['autopatrolled'] ) || isset( $show['!autopatrolled'] ) || $this->fld_patrolled
+ ) {
+ if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
+ $this->dieWithError( 'apierror-permissiondenied-patrolflag', 'permissiondenied' );
+ }
+
+ $isFilterset = isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ||
+ isset( $show['autopatrolled'] ) || isset( $show['!autopatrolled'] );
+ $this->addTables( 'recentchanges' );
+ $this->addJoinConds( [ 'recentchanges' => [
+ $isFilterset ? 'JOIN' : 'LEFT JOIN',
+ [
+ // This is a crazy hack. recentchanges has no index on rc_this_oldid, so instead of adding
+ // one T19237 did a join using rc_user_text and rc_timestamp instead. Now rc_user_text is
+ // probably unavailable, so just do rc_timestamp.
+ 'rc_timestamp = ' . $tsField,
+ 'rc_this_oldid = ' . $idField,
+ ]
+ ] ] );
+ }
+
+ $this->addFieldsIf( 'rc_patrolled', $this->fld_patrolled );
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ [ 'tag_summary' => [ 'LEFT JOIN', [ $idField . ' = ts_rev_id' ] ] ]
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( isset( $this->params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds(
+ [ 'change_tag' => [ 'INNER JOIN', [ $idField . ' = ct_rev_id' ] ] ]
+ );
+ $this->addWhereFld( 'ct_tag', $this->params['tag'] );
+ }
+
+ return true;
+ }
+
+ /**
+ * Extract fields from the database row and append them to a result array
+ *
+ * @param stdClass $row
+ * @return array
+ */
+ private function extractRowInfo( $row ) {
+ $vals = [];
+ $anyHidden = false;
+
+ if ( $row->rev_deleted & Revision::DELETED_TEXT ) {
+ $vals['texthidden'] = true;
+ $anyHidden = true;
+ }
+
+ // Any rows where we can't view the user were filtered out in the query.
+ $vals['userid'] = (int)$row->rev_user;
+ $vals['user'] = $row->rev_user_text;
+ if ( $row->rev_deleted & Revision::DELETED_USER ) {
+ $vals['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $this->fld_ids ) {
+ $vals['pageid'] = intval( $row->rev_page );
+ $vals['revid'] = intval( $row->rev_id );
+ // $vals['textid'] = intval( $row->rev_text_id ); // todo: Should this field be exposed?
+
+ if ( !is_null( $row->rev_parent_id ) ) {
+ $vals['parentid'] = intval( $row->rev_parent_id );
+ }
+ }
+
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+
+ if ( $this->fld_title ) {
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+
+ if ( $this->fld_timestamp ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->rev_timestamp );
+ }
+
+ if ( $this->fld_flags ) {
+ $vals['new'] = $row->rev_parent_id == 0 && !is_null( $row->rev_parent_id );
+ $vals['minor'] = (bool)$row->rev_minor_edit;
+ $vals['top'] = $row->page_latest == $row->rev_id;
+ }
+
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ if ( $row->rev_deleted & Revision::DELETED_COMMENT ) {
+ $vals['commenthidden'] = true;
+ $anyHidden = true;
+ }
+
+ $userCanView = Revision::userCanBitfield(
+ $row->rev_deleted,
+ Revision::DELETED_COMMENT, $this->getUser()
+ );
+
+ if ( $userCanView ) {
+ $comment = $this->commentStore->getComment( 'rev_comment', $row )->text;
+ if ( $this->fld_comment ) {
+ $vals['comment'] = $comment;
+ }
+
+ if ( $this->fld_parsedcomment ) {
+ $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
+ }
+ }
+ }
+
+ if ( $this->fld_patrolled ) {
+ $vals['patrolled'] = $row->rc_patrolled != RecentChange::PRC_UNPATROLLED;
+ $vals['autopatrolled'] = $row->rc_patrolled == RecentChange::PRC_AUTOPATROLLED;
+ }
+
+ if ( $this->fld_size && !is_null( $row->rev_len ) ) {
+ $vals['size'] = intval( $row->rev_len );
+ }
+
+ if ( $this->fld_sizediff
+ && !is_null( $row->rev_len )
+ && !is_null( $row->rev_parent_id )
+ ) {
+ $parentLen = isset( $this->parentLens[$row->rev_parent_id] )
+ ? $this->parentLens[$row->rev_parent_id]
+ : 0;
+ $vals['sizediff'] = intval( $row->rev_len - $parentLen );
+ }
+
+ if ( $this->fld_tags ) {
+ if ( $row->ts_tags ) {
+ $tags = explode( ',', $row->ts_tags );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
+ $vals['tags'] = $tags;
+ } else {
+ $vals['tags'] = [];
+ }
+ }
+
+ if ( $anyHidden && $row->rev_deleted & Revision::DELETED_RESTRICTED ) {
+ $vals['suppressed'] = true;
+ }
+
+ return $vals;
+ }
+
+ private function continueStr( $row ) {
+ if ( $this->multiUserMode ) {
+ switch ( $this->orderBy ) {
+ case 'id':
+ return "id|$row->rev_user|$row->rev_timestamp|$row->rev_id";
+ case 'name':
+ return "name|$row->rev_user_text|$row->rev_timestamp|$row->rev_id";
+ case 'actor':
+ return "actor|$row->rev_actor|$row->rev_timestamp|$row->rev_id";
+ }
+ } else {
+ return "$row->rev_timestamp|$row->rev_id";
+ }
+ }
+
+ public function getCacheMode( $params ) {
+ // This module provides access to deleted revisions and patrol flags if
+ // the requester is logged in
+ return 'anon-public-user-private';
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'userids' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'userprefix' => null,
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace'
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'ids|title|timestamp|comment|size|flags',
+ ApiBase::PARAM_TYPE => [
+ 'ids',
+ 'title',
+ 'timestamp',
+ 'comment',
+ 'parsedcomment',
+ 'size',
+ 'sizediff',
+ 'flags',
+ 'patrolled',
+ 'tags'
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'show' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'minor',
+ '!minor',
+ 'patrolled',
+ '!patrolled',
+ 'autopatrolled',
+ '!autopatrolled',
+ 'top',
+ '!top',
+ 'new',
+ '!new',
+ ],
+ ApiBase::PARAM_HELP_MSG => [
+ 'apihelp-query+usercontribs-param-show',
+ $this->getConfig()->get( 'RCMaxAge' )
+ ],
+ ],
+ 'tag' => null,
+ 'toponly' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=usercontribs&ucuser=Example'
+ => 'apihelp-query+usercontribs-example-user',
+ 'action=query&list=usercontribs&ucuserprefix=192.0.2.'
+ => 'apihelp-query+usercontribs-example-ipprefix',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Usercontribs';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryUserInfo.php b/www/wiki/includes/api/ApiQueryUserInfo.php
new file mode 100644
index 00000000..fa151c98
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryUserInfo.php
@@ -0,0 +1,349 @@
+<?php
+/**
+ * Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Query module to get information about the currently logged-in user
+ *
+ * @ingroup API
+ */
+class ApiQueryUserInfo extends ApiQueryBase {
+
+ const WL_UNREAD_LIMIT = 1000;
+
+ private $params = [];
+ private $prop = [];
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ui' );
+ }
+
+ public function execute() {
+ $this->params = $this->extractRequestParams();
+ $result = $this->getResult();
+
+ if ( !is_null( $this->params['prop'] ) ) {
+ $this->prop = array_flip( $this->params['prop'] );
+ }
+
+ $r = $this->getCurrentUserInfo();
+ $result->addValue( 'query', $this->getModuleName(), $r );
+ }
+
+ /**
+ * Get basic info about a given block
+ * @param Block $block
+ * @return array Array containing several keys:
+ * - blockid - ID of the block
+ * - blockedby - username of the blocker
+ * - blockedbyid - user ID of the blocker
+ * - blockreason - reason provided for the block
+ * - blockedtimestamp - timestamp for when the block was placed/modified
+ * - blockexpiry - expiry time of the block
+ * - systemblocktype - system block type, if any
+ */
+ public static function getBlockInfo( Block $block ) {
+ $vals = [];
+ $vals['blockid'] = $block->getId();
+ $vals['blockedby'] = $block->getByName();
+ $vals['blockedbyid'] = $block->getBy();
+ $vals['blockreason'] = $block->mReason;
+ $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
+ $vals['blockexpiry'] = ApiResult::formatExpiry( $block->getExpiry(), 'infinite' );
+ if ( $block->getSystemBlockType() !== null ) {
+ $vals['systemblocktype'] = $block->getSystemBlockType();
+ }
+ return $vals;
+ }
+
+ /**
+ * Get central user info
+ * @param Config $config
+ * @param User $user
+ * @param string|null $attachedWiki
+ * @return array Central user info
+ * - centralids: Array mapping non-local Central ID provider names to IDs
+ * - attachedlocal: Array mapping Central ID provider names to booleans
+ * indicating whether the local user is attached.
+ * - attachedwiki: Array mapping Central ID provider names to booleans
+ * indicating whether the user is attached to $attachedWiki.
+ */
+ public static function getCentralUserInfo( Config $config, User $user, $attachedWiki = null ) {
+ $providerIds = array_keys( $config->get( 'CentralIdLookupProviders' ) );
+
+ $ret = [
+ 'centralids' => [],
+ 'attachedlocal' => [],
+ ];
+ ApiResult::setArrayType( $ret['centralids'], 'assoc' );
+ ApiResult::setArrayType( $ret['attachedlocal'], 'assoc' );
+ if ( $attachedWiki ) {
+ $ret['attachedwiki'] = [];
+ ApiResult::setArrayType( $ret['attachedwiki'], 'assoc' );
+ }
+
+ $name = $user->getName();
+ foreach ( $providerIds as $providerId ) {
+ $provider = CentralIdLookup::factory( $providerId );
+ $ret['centralids'][$providerId] = $provider->centralIdFromName( $name );
+ $ret['attachedlocal'][$providerId] = $provider->isAttached( $user );
+ if ( $attachedWiki ) {
+ $ret['attachedwiki'][$providerId] = $provider->isAttached( $user, $attachedWiki );
+ }
+ }
+
+ return $ret;
+ }
+
+ protected function getCurrentUserInfo() {
+ $user = $this->getUser();
+ $vals = [];
+ $vals['id'] = intval( $user->getId() );
+ $vals['name'] = $user->getName();
+
+ if ( $user->isAnon() ) {
+ $vals['anon'] = true;
+ }
+
+ if ( isset( $this->prop['blockinfo'] ) && $user->isBlocked() ) {
+ $vals = array_merge( $vals, self::getBlockInfo( $user->getBlock() ) );
+ }
+
+ if ( isset( $this->prop['hasmsg'] ) ) {
+ $vals['messages'] = $user->getNewtalk();
+ }
+
+ if ( isset( $this->prop['groups'] ) ) {
+ $vals['groups'] = $user->getEffectiveGroups();
+ ApiResult::setArrayType( $vals['groups'], 'array' ); // even if empty
+ ApiResult::setIndexedTagName( $vals['groups'], 'g' ); // even if empty
+ }
+
+ if ( isset( $this->prop['groupmemberships'] ) ) {
+ $ugms = $user->getGroupMemberships();
+ $vals['groupmemberships'] = [];
+ foreach ( $ugms as $group => $ugm ) {
+ $vals['groupmemberships'][] = [
+ 'group' => $group,
+ 'expiry' => ApiResult::formatExpiry( $ugm->getExpiry() ),
+ ];
+ }
+ ApiResult::setArrayType( $vals['groupmemberships'], 'array' ); // even if empty
+ ApiResult::setIndexedTagName( $vals['groupmemberships'], 'groupmembership' ); // even if empty
+ }
+
+ if ( isset( $this->prop['implicitgroups'] ) ) {
+ $vals['implicitgroups'] = $user->getAutomaticGroups();
+ ApiResult::setArrayType( $vals['implicitgroups'], 'array' ); // even if empty
+ ApiResult::setIndexedTagName( $vals['implicitgroups'], 'g' ); // even if empty
+ }
+
+ if ( isset( $this->prop['rights'] ) ) {
+ // User::getRights() may return duplicate values, strip them
+ $vals['rights'] = array_values( array_unique( $user->getRights() ) );
+ ApiResult::setArrayType( $vals['rights'], 'array' ); // even if empty
+ ApiResult::setIndexedTagName( $vals['rights'], 'r' ); // even if empty
+ }
+
+ if ( isset( $this->prop['changeablegroups'] ) ) {
+ $vals['changeablegroups'] = $user->changeableGroups();
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['add'], 'g' );
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['remove'], 'g' );
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['add-self'], 'g' );
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['remove-self'], 'g' );
+ }
+
+ if ( isset( $this->prop['options'] ) ) {
+ $vals['options'] = $user->getOptions();
+ $vals['options'][ApiResult::META_BC_BOOLS] = array_keys( $vals['options'] );
+ }
+
+ if ( isset( $this->prop['preferencestoken'] ) &&
+ !$this->lacksSameOriginSecurity() &&
+ $user->isAllowed( 'editmyoptions' )
+ ) {
+ $vals['preferencestoken'] = $user->getEditToken( '', $this->getMain()->getRequest() );
+ }
+
+ if ( isset( $this->prop['editcount'] ) ) {
+ // use intval to prevent null if a non-logged-in user calls
+ // api.php?format=jsonfm&action=query&meta=userinfo&uiprop=editcount
+ $vals['editcount'] = intval( $user->getEditCount() );
+ }
+
+ if ( isset( $this->prop['ratelimits'] ) ) {
+ $vals['ratelimits'] = $this->getRateLimits();
+ }
+
+ if ( isset( $this->prop['realname'] ) &&
+ !in_array( 'realname', $this->getConfig()->get( 'HiddenPrefs' ) )
+ ) {
+ $vals['realname'] = $user->getRealName();
+ }
+
+ if ( $user->isAllowed( 'viewmyprivateinfo' ) ) {
+ if ( isset( $this->prop['email'] ) ) {
+ $vals['email'] = $user->getEmail();
+ $auth = $user->getEmailAuthenticationTimestamp();
+ if ( !is_null( $auth ) ) {
+ $vals['emailauthenticated'] = wfTimestamp( TS_ISO_8601, $auth );
+ }
+ }
+ }
+
+ if ( isset( $this->prop['registrationdate'] ) ) {
+ $regDate = $user->getRegistration();
+ if ( $regDate !== false ) {
+ $vals['registrationdate'] = wfTimestamp( TS_ISO_8601, $regDate );
+ }
+ }
+
+ if ( isset( $this->prop['acceptlang'] ) ) {
+ $langs = $this->getRequest()->getAcceptLang();
+ $acceptLang = [];
+ foreach ( $langs as $lang => $val ) {
+ $r = [ 'q' => $val ];
+ ApiResult::setContentValue( $r, 'code', $lang );
+ $acceptLang[] = $r;
+ }
+ ApiResult::setIndexedTagName( $acceptLang, 'lang' );
+ $vals['acceptlang'] = $acceptLang;
+ }
+
+ if ( isset( $this->prop['unreadcount'] ) ) {
+ $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+ $unreadNotifications = $store->countUnreadNotifications(
+ $user,
+ self::WL_UNREAD_LIMIT
+ );
+
+ if ( $unreadNotifications === true ) {
+ $vals['unreadcount'] = self::WL_UNREAD_LIMIT . '+';
+ } else {
+ $vals['unreadcount'] = $unreadNotifications;
+ }
+ }
+
+ if ( isset( $this->prop['centralids'] ) ) {
+ $vals += self::getCentralUserInfo(
+ $this->getConfig(), $this->getUser(), $this->params['attachedwiki']
+ );
+ }
+
+ return $vals;
+ }
+
+ protected function getRateLimits() {
+ $retval = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+
+ $user = $this->getUser();
+ if ( !$user->isPingLimitable() ) {
+ return $retval; // No limits
+ }
+
+ // Find out which categories we belong to
+ $categories = [];
+ if ( $user->isAnon() ) {
+ $categories[] = 'anon';
+ } else {
+ $categories[] = 'user';
+ }
+ if ( $user->isNewbie() ) {
+ $categories[] = 'ip';
+ $categories[] = 'subnet';
+ if ( !$user->isAnon() ) {
+ $categories[] = 'newbie';
+ }
+ }
+ $categories = array_merge( $categories, $user->getGroups() );
+
+ // Now get the actual limits
+ foreach ( $this->getConfig()->get( 'RateLimits' ) as $action => $limits ) {
+ foreach ( $categories as $cat ) {
+ if ( isset( $limits[$cat] ) && !is_null( $limits[$cat] ) ) {
+ $retval[$action][$cat]['hits'] = intval( $limits[$cat][0] );
+ $retval[$action][$cat]['seconds'] = intval( $limits[$cat][1] );
+ }
+ }
+ }
+
+ return $retval;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'blockinfo',
+ 'hasmsg',
+ 'groups',
+ 'groupmemberships',
+ 'implicitgroups',
+ 'rights',
+ 'changeablegroups',
+ 'options',
+ 'editcount',
+ 'ratelimits',
+ 'email',
+ 'realname',
+ 'acceptlang',
+ 'registrationdate',
+ 'unreadcount',
+ 'centralids',
+ 'preferencestoken',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [
+ 'unreadcount' => [
+ 'apihelp-query+userinfo-paramvalue-prop-unreadcount',
+ self::WL_UNREAD_LIMIT - 1,
+ self::WL_UNREAD_LIMIT . '+',
+ ],
+ ],
+ ApiBase::PARAM_DEPRECATED_VALUES => [
+ 'preferencestoken' => [
+ 'apiwarn-deprecation-withreplacement',
+ $this->getModulePrefix() . "prop=preferencestoken",
+ 'action=query&meta=tokens',
+ ]
+ ],
+ ],
+ 'attachedwiki' => null,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&meta=userinfo'
+ => 'apihelp-query+userinfo-example-simple',
+ 'action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg'
+ => 'apihelp-query+userinfo-example-data',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Userinfo';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryUsers.php b/www/wiki/includes/api/ApiQueryUsers.php
new file mode 100644
index 00000000..824c4d52
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryUsers.php
@@ -0,0 +1,408 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to get information about a list of users
+ *
+ * @ingroup API
+ */
+class ApiQueryUsers extends ApiQueryBase {
+
+ private $tokenFunctions, $prop;
+
+ /**
+ * Properties whose contents does not depend on who is looking at them. If the usprops field
+ * contains anything not listed here, the cache mode will never be public for logged-in users.
+ * @var array
+ */
+ protected static $publicProps = [
+ // everything except 'blockinfo' which might show hidden records if the user
+ // making the request has the appropriate permissions
+ 'groups',
+ 'groupmemberships',
+ 'implicitgroups',
+ 'rights',
+ 'editcount',
+ 'registration',
+ 'emailable',
+ 'gender',
+ 'centralids',
+ 'cancreate',
+ ];
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'us' );
+ }
+
+ /**
+ * Get an array mapping token names to their handler functions.
+ * The prototype for a token function is func($user)
+ * it should return a token or false (permission denied)
+ * @deprecated since 1.24
+ * @return array Array of tokenname => function
+ */
+ protected function getTokenFunctions() {
+ // Don't call the hooks twice
+ if ( isset( $this->tokenFunctions ) ) {
+ return $this->tokenFunctions;
+ }
+
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ return [];
+ }
+
+ $this->tokenFunctions = [
+ 'userrights' => [ self::class, 'getUserrightsToken' ],
+ ];
+ Hooks::run( 'APIQueryUsersTokens', [ &$this->tokenFunctions ] );
+
+ return $this->tokenFunctions;
+ }
+
+ /**
+ * @deprecated since 1.24
+ * @param User $user
+ * @return string
+ */
+ public static function getUserrightsToken( $user ) {
+ global $wgUser;
+
+ // Since the permissions check for userrights is non-trivial,
+ // don't bother with it here
+ return $wgUser->getEditToken( $user->getName() );
+ }
+
+ public function execute() {
+ $db = $this->getDB();
+ $commentStore = CommentStore::getStore();
+
+ $params = $this->extractRequestParams();
+ $this->requireMaxOneParameter( $params, 'userids', 'users' );
+
+ if ( !is_null( $params['prop'] ) ) {
+ $this->prop = array_flip( $params['prop'] );
+ } else {
+ $this->prop = [];
+ }
+ $useNames = !is_null( $params['users'] );
+
+ $users = (array)$params['users'];
+ $userids = (array)$params['userids'];
+
+ $goodNames = $done = [];
+ $result = $this->getResult();
+ // Canonicalize user names
+ foreach ( $users as $u ) {
+ $n = User::getCanonicalName( $u );
+ if ( $n === false || $n === '' ) {
+ $vals = [ 'name' => $u, 'invalid' => true ];
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ],
+ null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'users',
+ implode( '|', array_diff( $users, $done ) ) );
+ $goodNames = [];
+ break;
+ }
+ $done[] = $u;
+ } else {
+ $goodNames[] = $n;
+ }
+ }
+
+ if ( $useNames ) {
+ $parameters = &$goodNames;
+ } else {
+ $parameters = &$userids;
+ }
+
+ $result = $this->getResult();
+
+ if ( count( $parameters ) ) {
+ $userQuery = User::getQueryInfo();
+ $this->addTables( $userQuery['tables'] );
+ $this->addFields( $userQuery['fields'] );
+ $this->addJoinConds( $userQuery['joins'] );
+ if ( $useNames ) {
+ $this->addWhereFld( 'user_name', $goodNames );
+ } else {
+ $this->addWhereFld( 'user_id', $userids );
+ }
+
+ $this->showHiddenUsersAddBlockInfo( isset( $this->prop['blockinfo'] ) );
+
+ $data = [];
+ $res = $this->select( __METHOD__ );
+ $this->resetQueryParams();
+
+ // get user groups if needed
+ if ( isset( $this->prop['groups'] ) || isset( $this->prop['rights'] ) ) {
+ $userGroups = [];
+
+ $this->addTables( 'user' );
+ if ( $useNames ) {
+ $this->addWhereFld( 'user_name', $goodNames );
+ } else {
+ $this->addWhereFld( 'user_id', $userids );
+ }
+
+ $this->addTables( 'user_groups' );
+ $this->addJoinConds( [ 'user_groups' => [ 'INNER JOIN', 'ug_user=user_id' ] ] );
+ $this->addFields( [ 'user_name' ] );
+ $this->addFields( UserGroupMembership::selectFields() );
+ $this->addWhere( 'ug_expiry IS NULL OR ug_expiry >= ' .
+ $db->addQuotes( $db->timestamp() ) );
+ $userGroupsRes = $this->select( __METHOD__ );
+
+ foreach ( $userGroupsRes as $row ) {
+ $userGroups[$row->user_name][] = $row;
+ }
+ }
+
+ foreach ( $res as $row ) {
+ // create user object and pass along $userGroups if set
+ // that reduces the number of database queries needed in User dramatically
+ if ( !isset( $userGroups ) ) {
+ $user = User::newFromRow( $row );
+ } else {
+ if ( !isset( $userGroups[$row->user_name] ) || !is_array( $userGroups[$row->user_name] ) ) {
+ $userGroups[$row->user_name] = [];
+ }
+ $user = User::newFromRow( $row, [ 'user_groups' => $userGroups[$row->user_name] ] );
+ }
+ if ( $useNames ) {
+ $key = $user->getName();
+ } else {
+ $key = $user->getId();
+ }
+ $data[$key]['userid'] = $user->getId();
+ $data[$key]['name'] = $user->getName();
+
+ if ( isset( $this->prop['editcount'] ) ) {
+ $data[$key]['editcount'] = $user->getEditCount();
+ }
+
+ if ( isset( $this->prop['registration'] ) ) {
+ $data[$key]['registration'] = wfTimestampOrNull( TS_ISO_8601, $user->getRegistration() );
+ }
+
+ if ( isset( $this->prop['groups'] ) ) {
+ $data[$key]['groups'] = $user->getEffectiveGroups();
+ }
+
+ if ( isset( $this->prop['groupmemberships'] ) ) {
+ $data[$key]['groupmemberships'] = array_map( function ( $ugm ) {
+ return [
+ 'group' => $ugm->getGroup(),
+ 'expiry' => ApiResult::formatExpiry( $ugm->getExpiry() ),
+ ];
+ }, $user->getGroupMemberships() );
+ }
+
+ if ( isset( $this->prop['implicitgroups'] ) ) {
+ $data[$key]['implicitgroups'] = $user->getAutomaticGroups();
+ }
+
+ if ( isset( $this->prop['rights'] ) ) {
+ $data[$key]['rights'] = $user->getRights();
+ }
+ if ( $row->ipb_deleted ) {
+ $data[$key]['hidden'] = true;
+ }
+ if ( isset( $this->prop['blockinfo'] ) && !is_null( $row->ipb_by_text ) ) {
+ $data[$key]['blockid'] = (int)$row->ipb_id;
+ $data[$key]['blockedby'] = $row->ipb_by_text;
+ $data[$key]['blockedbyid'] = (int)$row->ipb_by;
+ $data[$key]['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
+ $data[$key]['blockreason'] = $commentStore->getComment( 'ipb_reason', $row )
+ ->text;
+ $data[$key]['blockexpiry'] = $row->ipb_expiry;
+ }
+
+ if ( isset( $this->prop['emailable'] ) ) {
+ $data[$key]['emailable'] = $user->canReceiveEmail();
+ }
+
+ if ( isset( $this->prop['gender'] ) ) {
+ $gender = $user->getOption( 'gender' );
+ if ( strval( $gender ) === '' ) {
+ $gender = 'unknown';
+ }
+ $data[$key]['gender'] = $gender;
+ }
+
+ if ( isset( $this->prop['centralids'] ) ) {
+ $data[$key] += ApiQueryUserInfo::getCentralUserInfo(
+ $this->getConfig(), $user, $params['attachedwiki']
+ );
+ }
+
+ if ( !is_null( $params['token'] ) ) {
+ $tokenFunctions = $this->getTokenFunctions();
+ foreach ( $params['token'] as $t ) {
+ $val = call_user_func( $tokenFunctions[$t], $user );
+ if ( $val === false ) {
+ $this->addWarning( [ 'apiwarn-tokennotallowed', $t ] );
+ } else {
+ $data[$key][$t . 'token'] = $val;
+ }
+ }
+ }
+ }
+ }
+
+ $context = $this->getContext();
+ // Second pass: add result data to $retval
+ foreach ( $parameters as $u ) {
+ if ( !isset( $data[$u] ) ) {
+ if ( $useNames ) {
+ $data[$u] = [ 'name' => $u ];
+ $urPage = new UserrightsPage;
+ $urPage->setContext( $context );
+
+ $iwUser = $urPage->fetchUser( $u );
+
+ if ( $iwUser instanceof UserRightsProxy ) {
+ $data[$u]['interwiki'] = true;
+
+ if ( !is_null( $params['token'] ) ) {
+ $tokenFunctions = $this->getTokenFunctions();
+
+ foreach ( $params['token'] as $t ) {
+ $val = call_user_func( $tokenFunctions[$t], $iwUser );
+ if ( $val === false ) {
+ $this->addWarning( [ 'apiwarn-tokennotallowed', $t ] );
+ } else {
+ $data[$u][$t . 'token'] = $val;
+ }
+ }
+ }
+ } else {
+ $data[$u]['missing'] = true;
+ if ( isset( $this->prop['cancreate'] ) ) {
+ $status = MediaWiki\Auth\AuthManager::singleton()->canCreateAccount( $u );
+ $data[$u]['cancreate'] = $status->isGood();
+ if ( !$status->isGood() ) {
+ $data[$u]['cancreateerror'] = $this->getErrorFormatter()->arrayFromStatus( $status );
+ }
+ }
+ }
+ } else {
+ $data[$u] = [ 'userid' => $u, 'missing' => true ];
+ }
+
+ } else {
+ if ( isset( $this->prop['groups'] ) && isset( $data[$u]['groups'] ) ) {
+ ApiResult::setArrayType( $data[$u]['groups'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['groups'], 'g' );
+ }
+ if ( isset( $this->prop['groupmemberships'] ) && isset( $data[$u]['groupmemberships'] ) ) {
+ ApiResult::setArrayType( $data[$u]['groupmemberships'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['groupmemberships'], 'groupmembership' );
+ }
+ if ( isset( $this->prop['implicitgroups'] ) && isset( $data[$u]['implicitgroups'] ) ) {
+ ApiResult::setArrayType( $data[$u]['implicitgroups'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['implicitgroups'], 'g' );
+ }
+ if ( isset( $this->prop['rights'] ) && isset( $data[$u]['rights'] ) ) {
+ ApiResult::setArrayType( $data[$u]['rights'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['rights'], 'r' );
+ }
+ }
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ],
+ null, $data[$u] );
+ if ( !$fit ) {
+ if ( $useNames ) {
+ $this->setContinueEnumParameter( 'users',
+ implode( '|', array_diff( $users, $done ) ) );
+ } else {
+ $this->setContinueEnumParameter( 'userids',
+ implode( '|', array_diff( $userids, $done ) ) );
+ }
+ break;
+ }
+ $done[] = $u;
+ }
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'user' );
+ }
+
+ public function getCacheMode( $params ) {
+ if ( isset( $params['token'] ) ) {
+ return 'private';
+ } elseif ( array_diff( (array)$params['prop'], static::$publicProps ) ) {
+ return 'anon-public-user-private';
+ } else {
+ return 'public';
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'blockinfo',
+ 'groups',
+ 'groupmemberships',
+ 'implicitgroups',
+ 'rights',
+ 'editcount',
+ 'registration',
+ 'emailable',
+ 'gender',
+ 'centralids',
+ 'cancreate',
+ // When adding a prop, consider whether it should be added
+ // to self::$publicProps
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'attachedwiki' => null,
+ 'users' => [
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'userids' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'token' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=users&ususers=Example&usprop=groups|editcount|gender'
+ => 'apihelp-query+users-example-simple',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Users';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryWatchlist.php b/www/wiki/includes/api/ApiQueryWatchlist.php
new file mode 100644
index 00000000..bb09838e
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryWatchlist.php
@@ -0,0 +1,531 @@
+<?php
+/**
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * This query action allows clients to retrieve a list of recently modified pages
+ * that are part of the logged-in user's watchlist.
+ *
+ * @ingroup API
+ */
+class ApiQueryWatchlist extends ApiQueryGeneratorBase {
+
+ /** @var CommentStore */
+ private $commentStore;
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'wl' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ private $fld_ids = false, $fld_title = false, $fld_patrol = false,
+ $fld_flags = false, $fld_timestamp = false, $fld_user = false,
+ $fld_comment = false, $fld_parsedcomment = false, $fld_sizes = false,
+ $fld_notificationtimestamp = false, $fld_userid = false,
+ $fld_loginfo = false, $fld_tags;
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $this->selectNamedDB( 'watchlist', DB_REPLICA, 'watchlist' );
+
+ $params = $this->extractRequestParams();
+
+ $user = $this->getUser();
+ $wlowner = $this->getWatchlistUser( $params );
+
+ if ( !is_null( $params['prop'] ) && is_null( $resultPageSet ) ) {
+ $prop = array_flip( $params['prop'] );
+
+ $this->fld_ids = isset( $prop['ids'] );
+ $this->fld_title = isset( $prop['title'] );
+ $this->fld_flags = isset( $prop['flags'] );
+ $this->fld_user = isset( $prop['user'] );
+ $this->fld_userid = isset( $prop['userid'] );
+ $this->fld_comment = isset( $prop['comment'] );
+ $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
+ $this->fld_timestamp = isset( $prop['timestamp'] );
+ $this->fld_sizes = isset( $prop['sizes'] );
+ $this->fld_patrol = isset( $prop['patrol'] );
+ $this->fld_notificationtimestamp = isset( $prop['notificationtimestamp'] );
+ $this->fld_loginfo = isset( $prop['loginfo'] );
+ $this->fld_tags = isset( $prop['tags'] );
+
+ if ( $this->fld_patrol ) {
+ if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
+ $this->dieWithError( 'apierror-permissiondenied-patrolflag', 'patrol' );
+ }
+ }
+
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ $this->commentStore = CommentStore::getStore();
+ }
+ }
+
+ $options = [
+ 'dir' => $params['dir'] === 'older'
+ ? WatchedItemQueryService::DIR_OLDER
+ : WatchedItemQueryService::DIR_NEWER,
+ ];
+
+ if ( is_null( $resultPageSet ) ) {
+ $options['includeFields'] = $this->getFieldsToInclude();
+ } else {
+ $options['usedInGenerator'] = true;
+ }
+
+ if ( $params['start'] ) {
+ $options['start'] = $params['start'];
+ }
+ if ( $params['end'] ) {
+ $options['end'] = $params['end'];
+ }
+
+ $startFrom = null;
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $continueTimestamp = $cont[0];
+ $continueId = (int)$cont[1];
+ $this->dieContinueUsageIf( $continueId != $cont[1] );
+ $startFrom = [ $continueTimestamp, $continueId ];
+ }
+
+ if ( $wlowner !== $user ) {
+ $options['watchlistOwner'] = $wlowner;
+ $options['watchlistOwnerToken'] = $params['token'];
+ }
+
+ if ( !is_null( $params['namespace'] ) ) {
+ $options['namespaceIds'] = $params['namespace'];
+ }
+
+ if ( $params['allrev'] ) {
+ $options['allRevisions'] = true;
+ }
+
+ if ( !is_null( $params['show'] ) ) {
+ $show = array_flip( $params['show'] );
+
+ /* Check for conflicting parameters. */
+ if ( $this->showParamsConflicting( $show ) ) {
+ $this->dieWithError( 'apierror-show' );
+ }
+
+ // Check permissions.
+ if ( isset( $show[WatchedItemQueryService::FILTER_PATROLLED] )
+ || isset( $show[WatchedItemQueryService::FILTER_NOT_PATROLLED] )
+ ) {
+ if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
+ $this->dieWithError( 'apierror-permissiondenied-patrolflag', 'permissiondenied' );
+ }
+ }
+
+ $options['filters'] = array_keys( $show );
+ }
+
+ if ( !is_null( $params['type'] ) ) {
+ try {
+ $rcTypes = RecentChange::parseToRCType( $params['type'] );
+ if ( $rcTypes ) {
+ $options['rcTypes'] = $rcTypes;
+ }
+ } catch ( Exception $e ) {
+ ApiBase::dieDebug( __METHOD__, $e->getMessage() );
+ }
+ }
+
+ $this->requireMaxOneParameter( $params, 'user', 'excludeuser' );
+ if ( !is_null( $params['user'] ) ) {
+ $options['onlyByUser'] = $params['user'];
+ }
+ if ( !is_null( $params['excludeuser'] ) ) {
+ $options['notByUser'] = $params['excludeuser'];
+ }
+
+ $options['limit'] = $params['limit'];
+
+ Hooks::run( 'ApiQueryWatchlistPrepareWatchedItemQueryServiceOptions', [
+ $this, $params, &$options
+ ] );
+
+ $ids = [];
+ $count = 0;
+ $watchedItemQuery = MediaWikiServices::getInstance()->getWatchedItemQueryService();
+ $items = $watchedItemQuery->getWatchedItemsWithRecentChangeInfo( $wlowner, $options, $startFrom );
+
+ foreach ( $items as list( $watchedItem, $recentChangeInfo ) ) {
+ /** @var WatchedItem $watchedItem */
+ if ( is_null( $resultPageSet ) ) {
+ $vals = $this->extractOutputData( $watchedItem, $recentChangeInfo );
+ $fit = $this->getResult()->addValue( [ 'query', $this->getModuleName() ], null, $vals );
+ if ( !$fit ) {
+ $startFrom = [ $recentChangeInfo['rc_timestamp'], $recentChangeInfo['rc_id'] ];
+ break;
+ }
+ } else {
+ if ( $params['allrev'] ) {
+ $ids[] = intval( $recentChangeInfo['rc_this_oldid'] );
+ } else {
+ $ids[] = intval( $recentChangeInfo['rc_cur_id'] );
+ }
+ }
+ }
+
+ if ( $startFrom !== null ) {
+ $this->setContinueEnumParameter( 'continue', implode( '|', $startFrom ) );
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $this->getResult()->addIndexedTagName(
+ [ 'query', $this->getModuleName() ],
+ 'item'
+ );
+ } elseif ( $params['allrev'] ) {
+ $resultPageSet->populateFromRevisionIDs( $ids );
+ } else {
+ $resultPageSet->populateFromPageIDs( $ids );
+ }
+ }
+
+ private function getFieldsToInclude() {
+ $includeFields = [];
+ if ( $this->fld_flags ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_FLAGS;
+ }
+ if ( $this->fld_user || $this->fld_userid ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_USER_ID;
+ }
+ if ( $this->fld_user ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_USER;
+ }
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_COMMENT;
+ }
+ if ( $this->fld_patrol ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_PATROL_INFO;
+ $includeFields[] = WatchedItemQueryService::INCLUDE_AUTOPATROL_INFO;
+ }
+ if ( $this->fld_sizes ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_SIZES;
+ }
+ if ( $this->fld_loginfo ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_LOG_INFO;
+ }
+ if ( $this->fld_tags ) {
+ $includeFields[] = WatchedItemQueryService::INCLUDE_TAGS;
+ }
+ return $includeFields;
+ }
+
+ private function showParamsConflicting( array $show ) {
+ return ( isset( $show[WatchedItemQueryService::FILTER_MINOR] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_MINOR] ) )
+ || ( isset( $show[WatchedItemQueryService::FILTER_BOT] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_BOT] ) )
+ || ( isset( $show[WatchedItemQueryService::FILTER_ANON] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_ANON] ) )
+ || ( isset( $show[WatchedItemQueryService::FILTER_PATROLLED] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_PATROLLED] ) )
+ || ( isset( $show[WatchedItemQueryService::FILTER_AUTOPATROLLED] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_AUTOPATROLLED] ) )
+ || ( isset( $show[WatchedItemQueryService::FILTER_AUTOPATROLLED] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_PATROLLED] ) )
+ || ( isset( $show[WatchedItemQueryService::FILTER_UNREAD] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_UNREAD] ) );
+ }
+
+ private function extractOutputData( WatchedItem $watchedItem, array $recentChangeInfo ) {
+ /* Determine the title of the page that has been changed. */
+ $title = Title::newFromLinkTarget( $watchedItem->getLinkTarget() );
+ $user = $this->getUser();
+
+ /* Our output data. */
+ $vals = [];
+ $type = intval( $recentChangeInfo['rc_type'] );
+ $vals['type'] = RecentChange::parseFromRCType( $type );
+ $anyHidden = false;
+
+ /* Create a new entry in the result for the title. */
+ if ( $this->fld_title || $this->fld_ids ) {
+ // These should already have been filtered out of the query, but just in case.
+ if ( $type === RC_LOG && ( $recentChangeInfo['rc_deleted'] & LogPage::DELETED_ACTION ) ) {
+ $vals['actionhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $type !== RC_LOG ||
+ LogEventsList::userCanBitfield(
+ $recentChangeInfo['rc_deleted'],
+ LogPage::DELETED_ACTION,
+ $user
+ )
+ ) {
+ if ( $this->fld_title ) {
+ ApiQueryBase::addTitleInfo( $vals, $title );
+ }
+ if ( $this->fld_ids ) {
+ $vals['pageid'] = intval( $recentChangeInfo['rc_cur_id'] );
+ $vals['revid'] = intval( $recentChangeInfo['rc_this_oldid'] );
+ $vals['old_revid'] = intval( $recentChangeInfo['rc_last_oldid'] );
+ }
+ }
+ }
+
+ /* Add user data and 'anon' flag, if user is anonymous. */
+ if ( $this->fld_user || $this->fld_userid ) {
+ if ( $recentChangeInfo['rc_deleted'] & Revision::DELETED_USER ) {
+ $vals['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield(
+ $recentChangeInfo['rc_deleted'],
+ Revision::DELETED_USER,
+ $user
+ ) ) {
+ if ( $this->fld_userid ) {
+ $vals['userid'] = (int)$recentChangeInfo['rc_user'];
+ // for backwards compatibility
+ $vals['user'] = (int)$recentChangeInfo['rc_user'];
+ }
+
+ if ( $this->fld_user ) {
+ $vals['user'] = $recentChangeInfo['rc_user_text'];
+ }
+
+ if ( !$recentChangeInfo['rc_user'] ) {
+ $vals['anon'] = true;
+ }
+ }
+ }
+
+ /* Add flags, such as new, minor, bot. */
+ if ( $this->fld_flags ) {
+ $vals['bot'] = (bool)$recentChangeInfo['rc_bot'];
+ $vals['new'] = $recentChangeInfo['rc_type'] == RC_NEW;
+ $vals['minor'] = (bool)$recentChangeInfo['rc_minor'];
+ }
+
+ /* Add sizes of each revision. (Only available on 1.10+) */
+ if ( $this->fld_sizes ) {
+ $vals['oldlen'] = intval( $recentChangeInfo['rc_old_len'] );
+ $vals['newlen'] = intval( $recentChangeInfo['rc_new_len'] );
+ }
+
+ /* Add the timestamp. */
+ if ( $this->fld_timestamp ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $recentChangeInfo['rc_timestamp'] );
+ }
+
+ if ( $this->fld_notificationtimestamp ) {
+ $vals['notificationtimestamp'] = ( $watchedItem->getNotificationTimestamp() == null )
+ ? ''
+ : wfTimestamp( TS_ISO_8601, $watchedItem->getNotificationTimestamp() );
+ }
+
+ /* Add edit summary / log summary. */
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ if ( $recentChangeInfo['rc_deleted'] & Revision::DELETED_COMMENT ) {
+ $vals['commenthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( Revision::userCanBitfield(
+ $recentChangeInfo['rc_deleted'],
+ Revision::DELETED_COMMENT,
+ $user
+ ) ) {
+ $comment = $this->commentStore->getComment( 'rc_comment', $recentChangeInfo )->text;
+ if ( $this->fld_comment ) {
+ $vals['comment'] = $comment;
+ }
+
+ if ( $this->fld_parsedcomment ) {
+ $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
+ }
+ }
+ }
+
+ /* Add the patrolled flag */
+ if ( $this->fld_patrol ) {
+ $vals['patrolled'] = $recentChangeInfo['rc_patrolled'] != RecentChange::PRC_UNPATROLLED;
+ $vals['unpatrolled'] = ChangesList::isUnpatrolled( (object)$recentChangeInfo, $user );
+ $vals['autopatrolled'] = $recentChangeInfo['rc_patrolled'] == RecentChange::PRC_AUTOPATROLLED;
+ }
+
+ if ( $this->fld_loginfo && $recentChangeInfo['rc_type'] == RC_LOG ) {
+ if ( $recentChangeInfo['rc_deleted'] & LogPage::DELETED_ACTION ) {
+ $vals['actionhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( LogEventsList::userCanBitfield(
+ $recentChangeInfo['rc_deleted'],
+ LogPage::DELETED_ACTION,
+ $user
+ ) ) {
+ $vals['logid'] = intval( $recentChangeInfo['rc_logid'] );
+ $vals['logtype'] = $recentChangeInfo['rc_log_type'];
+ $vals['logaction'] = $recentChangeInfo['rc_log_action'];
+ $vals['logparams'] = LogFormatter::newFromRow( $recentChangeInfo )->formatParametersForApi();
+ }
+ }
+
+ if ( $this->fld_tags ) {
+ if ( $recentChangeInfo['rc_tags'] ) {
+ $tags = explode( ',', $recentChangeInfo['rc_tags'] );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
+ $vals['tags'] = $tags;
+ } else {
+ $vals['tags'] = [];
+ }
+ }
+
+ if ( $anyHidden && ( $recentChangeInfo['rc_deleted'] & Revision::DELETED_RESTRICTED ) ) {
+ $vals['suppressed'] = true;
+ }
+
+ Hooks::run( 'ApiQueryWatchlistExtractOutputData', [
+ $this, $watchedItem, $recentChangeInfo, &$vals
+ ] );
+
+ return $vals;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'allrev' => false,
+ 'start' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'end' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace'
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'excludeuser' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_TYPE => [
+ 'newer',
+ 'older'
+ ],
+ ApiHelp::PARAM_HELP_MSG => 'api-help-param-direction',
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'ids|title|flags',
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ApiBase::PARAM_TYPE => [
+ 'ids',
+ 'title',
+ 'flags',
+ 'user',
+ 'userid',
+ 'comment',
+ 'parsedcomment',
+ 'timestamp',
+ 'patrol',
+ 'sizes',
+ 'notificationtimestamp',
+ 'loginfo',
+ 'tags',
+ ]
+ ],
+ 'show' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ WatchedItemQueryService::FILTER_MINOR,
+ WatchedItemQueryService::FILTER_NOT_MINOR,
+ WatchedItemQueryService::FILTER_BOT,
+ WatchedItemQueryService::FILTER_NOT_BOT,
+ WatchedItemQueryService::FILTER_ANON,
+ WatchedItemQueryService::FILTER_NOT_ANON,
+ WatchedItemQueryService::FILTER_PATROLLED,
+ WatchedItemQueryService::FILTER_NOT_PATROLLED,
+ WatchedItemQueryService::FILTER_AUTOPATROLLED,
+ WatchedItemQueryService::FILTER_NOT_AUTOPATROLLED,
+ WatchedItemQueryService::FILTER_UNREAD,
+ WatchedItemQueryService::FILTER_NOT_UNREAD,
+ ]
+ ],
+ 'type' => [
+ ApiBase::PARAM_DFLT => 'edit|new|log|categorize',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ApiBase::PARAM_TYPE => RecentChange::getChangeTypes()
+ ],
+ 'owner' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'token' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_SENSITIVE => true,
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=watchlist'
+ => 'apihelp-query+watchlist-example-simple',
+ 'action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment'
+ => 'apihelp-query+watchlist-example-props',
+ 'action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment'
+ => 'apihelp-query+watchlist-example-allrev',
+ 'action=query&generator=watchlist&prop=info'
+ => 'apihelp-query+watchlist-example-generator',
+ 'action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user'
+ => 'apihelp-query+watchlist-example-generator-rev',
+ 'action=query&list=watchlist&wlowner=Example&wltoken=123ABC'
+ => 'apihelp-query+watchlist-example-wlowner',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watchlist';
+ }
+}
diff --git a/www/wiki/includes/api/ApiQueryWatchlistRaw.php b/www/wiki/includes/api/ApiQueryWatchlistRaw.php
new file mode 100644
index 00000000..0adbfdbf
--- /dev/null
+++ b/www/wiki/includes/api/ApiQueryWatchlistRaw.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * This query action allows clients to retrieve a list of pages
+ * on the logged-in user's watchlist.
+ *
+ * @ingroup API
+ */
+class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'wr' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $params = $this->extractRequestParams();
+
+ $user = $this->getWatchlistUser( $params );
+
+ $prop = array_flip( (array)$params['prop'] );
+ $show = array_flip( (array)$params['show'] );
+ if ( isset( $show[WatchedItemQueryService::FILTER_CHANGED] )
+ && isset( $show[WatchedItemQueryService::FILTER_NOT_CHANGED] )
+ ) {
+ $this->dieWithError( 'apierror-show' );
+ }
+
+ $options = [];
+ if ( $params['namespace'] ) {
+ $options['namespaceIds'] = $params['namespace'];
+ }
+ if ( isset( $show[WatchedItemQueryService::FILTER_CHANGED] ) ) {
+ $options['filter'] = WatchedItemQueryService::FILTER_CHANGED;
+ }
+ if ( isset( $show[WatchedItemQueryService::FILTER_NOT_CHANGED] ) ) {
+ $options['filter'] = WatchedItemQueryService::FILTER_NOT_CHANGED;
+ }
+
+ if ( isset( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $ns = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+ $title = $cont[1];
+ $options['startFrom'] = new TitleValue( $ns, $title );
+ }
+
+ if ( isset( $params['fromtitle'] ) ) {
+ list( $ns, $title ) = $this->prefixedTitlePartToKey( $params['fromtitle'] );
+ $options['from'] = new TitleValue( $ns, $title );
+ }
+
+ if ( isset( $params['totitle'] ) ) {
+ list( $ns, $title ) = $this->prefixedTitlePartToKey( $params['totitle'] );
+ $options['until'] = new TitleValue( $ns, $title );
+ }
+
+ $options['sort'] = WatchedItemStore::SORT_ASC;
+ if ( $params['dir'] === 'descending' ) {
+ $options['sort'] = WatchedItemStore::SORT_DESC;
+ }
+ $options['limit'] = $params['limit'] + 1;
+
+ $titles = [];
+ $count = 0;
+ $items = MediaWikiServices::getInstance()->getWatchedItemQueryService()
+ ->getWatchedItemsForUser( $user, $options );
+ foreach ( $items as $item ) {
+ $ns = $item->getLinkTarget()->getNamespace();
+ $dbKey = $item->getLinkTarget()->getDBkey();
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $ns . '|' . $dbKey );
+ break;
+ }
+ $t = Title::makeTitle( $ns, $dbKey );
+
+ if ( is_null( $resultPageSet ) ) {
+ $vals = [];
+ ApiQueryBase::addTitleInfo( $vals, $t );
+ if ( isset( $prop['changed'] ) && !is_null( $item->getNotificationTimestamp() ) ) {
+ $vals['changed'] = wfTimestamp( TS_ISO_8601, $item->getNotificationTimestamp() );
+ }
+ $fit = $this->getResult()->addValue( $this->getModuleName(), null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $ns . '|' . $dbKey );
+ break;
+ }
+ } else {
+ $titles[] = $t;
+ }
+ }
+ if ( is_null( $resultPageSet ) ) {
+ $this->getResult()->addIndexedTagName( $this->getModuleName(), 'wr' );
+ } else {
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace'
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ],
+ 'prop' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ 'changed',
+ ],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
+ ],
+ 'show' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => [
+ WatchedItemQueryService::FILTER_CHANGED,
+ WatchedItemQueryService::FILTER_NOT_CHANGED
+ ]
+ ],
+ 'owner' => [
+ ApiBase::PARAM_TYPE => 'user'
+ ],
+ 'token' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_SENSITIVE => true,
+ ],
+ 'dir' => [
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => [
+ 'ascending',
+ 'descending'
+ ],
+ ],
+ 'fromtitle' => [
+ ApiBase::PARAM_TYPE => 'string'
+ ],
+ 'totitle' => [
+ ApiBase::PARAM_TYPE => 'string'
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=query&list=watchlistraw'
+ => 'apihelp-query+watchlistraw-example-simple',
+ 'action=query&generator=watchlistraw&gwrshow=changed&prop=info'
+ => 'apihelp-query+watchlistraw-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watchlistraw';
+ }
+}
diff --git a/www/wiki/includes/api/ApiRemoveAuthenticationData.php b/www/wiki/includes/api/ApiRemoveAuthenticationData.php
new file mode 100644
index 00000000..e18484be
--- /dev/null
+++ b/www/wiki/includes/api/ApiRemoveAuthenticationData.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * Remove authentication data from AuthManager
+ *
+ * @ingroup API
+ */
+class ApiRemoveAuthenticationData extends ApiBase {
+
+ private $authAction;
+ private $operation;
+
+ public function __construct( ApiMain $main, $action ) {
+ parent::__construct( $main, $action );
+
+ $this->authAction = $action === 'unlinkaccount'
+ ? AuthManager::ACTION_UNLINK
+ : AuthManager::ACTION_REMOVE;
+ $this->operation = $action === 'unlinkaccount'
+ ? 'UnlinkAccount'
+ : 'RemoveCredentials';
+ }
+
+ public function execute() {
+ if ( !$this->getUser()->isLoggedIn() ) {
+ $this->dieWithError( 'apierror-mustbeloggedin-removeauth', 'notloggedin' );
+ }
+
+ $params = $this->extractRequestParams();
+ $manager = AuthManager::singleton();
+
+ // Check security-sensitive operation status
+ ApiAuthManagerHelper::newForModule( $this )->securitySensitiveOperation( $this->operation );
+
+ // Fetch the request. No need to load from the request, so don't use
+ // ApiAuthManagerHelper's method.
+ $blacklist = $this->authAction === AuthManager::ACTION_REMOVE
+ ? array_flip( $this->getConfig()->get( 'RemoveCredentialsBlacklist' ) )
+ : [];
+ $reqs = array_filter(
+ $manager->getAuthenticationRequests( $this->authAction, $this->getUser() ),
+ function ( $req ) use ( $params, $blacklist ) {
+ return $req->getUniqueId() === $params['request'] &&
+ !isset( $blacklist[get_class( $req )] );
+ }
+ );
+ if ( count( $reqs ) !== 1 ) {
+ $this->dieWithError( 'apierror-changeauth-norequest', 'badrequest' );
+ }
+ $req = reset( $reqs );
+
+ // Perform the removal
+ $status = $manager->allowsAuthenticationDataChange( $req, true );
+ Hooks::run( 'ChangeAuthenticationDataAudit', [ $req, $status ] );
+ if ( !$status->isGood() ) {
+ $this->dieStatus( $status );
+ }
+ $manager->changeAuthenticationData( $req );
+
+ $this->getResult()->addValue( null, $this->getModuleName(), [ 'status' => 'success' ] );
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ public function getAllowedParams() {
+ return ApiAuthManagerHelper::getStandardParams( $this->authAction,
+ 'request'
+ );
+ }
+
+ protected function getExamplesMessages() {
+ $path = $this->getModulePath();
+ $action = $this->getModuleName();
+ return [
+ "action={$action}&request=FooAuthenticationRequest&token=123ABC"
+ => "apihelp-{$path}-example-simple",
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Manage_authentication_data';
+ }
+}
diff --git a/www/wiki/includes/api/ApiResetPassword.php b/www/wiki/includes/api/ApiResetPassword.php
new file mode 100644
index 00000000..77838269
--- /dev/null
+++ b/www/wiki/includes/api/ApiResetPassword.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * Copyright © 2016 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * Reset password, with AuthManager
+ *
+ * @ingroup API
+ */
+class ApiResetPassword extends ApiBase {
+
+ private $hasAnyRoutes = null;
+
+ /**
+ * Determine whether any reset routes are available.
+ * @return bool
+ */
+ private function hasAnyRoutes() {
+ if ( $this->hasAnyRoutes === null ) {
+ $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
+ $this->hasAnyRoutes = !empty( $resetRoutes['username'] ) || !empty( $resetRoutes['email'] );
+ }
+ return $this->hasAnyRoutes;
+ }
+
+ protected function getExtendedDescription() {
+ if ( !$this->hasAnyRoutes() ) {
+ return 'apihelp-resetpassword-extended-description-noroutes';
+ }
+ return parent::getExtendedDescription();
+ }
+
+ public function execute() {
+ if ( !$this->hasAnyRoutes() ) {
+ $this->dieWithError( 'apihelp-resetpassword-description-noroutes', 'moduledisabled' );
+ }
+
+ $params = $this->extractRequestParams() + [
+ // Make sure the keys exist even if getAllowedParams didn't define them
+ 'user' => null,
+ 'email' => null,
+ ];
+
+ $this->requireOnlyOneParameter( $params, 'user', 'email' );
+
+ $passwordReset = new PasswordReset( $this->getConfig(), AuthManager::singleton() );
+
+ $status = $passwordReset->isAllowed( $this->getUser() );
+ if ( !$status->isOK() ) {
+ $this->dieStatus( Status::wrap( $status ) );
+ }
+
+ $status = $passwordReset->execute(
+ $this->getUser(), $params['user'], $params['email']
+ );
+ if ( !$status->isOK() ) {
+ $status->value = null;
+ $this->dieStatus( Status::wrap( $status ) );
+ }
+
+ $result = $this->getResult();
+ $result->addValue( [ 'resetpassword' ], 'status', 'success' );
+ }
+
+ public function isWriteMode() {
+ return $this->hasAnyRoutes();
+ }
+
+ public function needsToken() {
+ if ( !$this->hasAnyRoutes() ) {
+ return false;
+ }
+ return 'csrf';
+ }
+
+ public function getAllowedParams() {
+ if ( !$this->hasAnyRoutes() ) {
+ return [];
+ }
+
+ $ret = [
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'email' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ ];
+
+ $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
+ if ( empty( $resetRoutes['username'] ) ) {
+ unset( $ret['user'] );
+ }
+ if ( empty( $resetRoutes['email'] ) ) {
+ unset( $ret['email'] );
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ $ret = [];
+ $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
+
+ if ( !empty( $resetRoutes['username'] ) ) {
+ $ret['action=resetpassword&user=Example&token=123ABC'] = 'apihelp-resetpassword-example-user';
+ }
+ if ( !empty( $resetRoutes['email'] ) ) {
+ $ret['action=resetpassword&user=user@example.com&token=123ABC'] =
+ 'apihelp-resetpassword-example-email';
+ }
+
+ return $ret;
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Manage_authentication_data';
+ }
+}
diff --git a/www/wiki/includes/api/ApiResult.php b/www/wiki/includes/api/ApiResult.php
new file mode 100644
index 00000000..468d8783
--- /dev/null
+++ b/www/wiki/includes/api/ApiResult.php
@@ -0,0 +1,1229 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This class represents the result of the API operations.
+ * It simply wraps a nested array structure, adding some functions to simplify
+ * array's modifications. As various modules execute, they add different pieces
+ * of information to this result, structuring it as it will be given to the client.
+ *
+ * Each subarray may either be a dictionary - key-value pairs with unique keys,
+ * or lists, where the items are added using $data[] = $value notation.
+ *
+ * @since 1.25 this is no longer a subclass of ApiBase
+ * @ingroup API
+ */
+class ApiResult implements ApiSerializable {
+
+ /**
+ * Override existing value in addValue(), setValue(), and similar functions
+ * @since 1.21
+ */
+ const OVERRIDE = 1;
+
+ /**
+ * For addValue(), setValue() and similar functions, if the value does not
+ * exist, add it as the first element. In case the new value has no name
+ * (numerical index), all indexes will be renumbered.
+ * @since 1.21
+ */
+ const ADD_ON_TOP = 2;
+
+ /**
+ * For addValue() and similar functions, do not check size while adding a value
+ * Don't use this unless you REALLY know what you're doing.
+ * Values added while the size checking was disabled will never be counted.
+ * Ignored for setValue() and similar functions.
+ * @since 1.24
+ */
+ const NO_SIZE_CHECK = 4;
+
+ /**
+ * For addValue(), setValue() and similar functions, do not validate data.
+ * Also disables size checking. If you think you need to use this, you're
+ * probably wrong.
+ * @since 1.25
+ */
+ const NO_VALIDATE = 12;
+
+ /**
+ * Key for the 'indexed tag name' metadata item. Value is string.
+ * @since 1.25
+ */
+ const META_INDEXED_TAG_NAME = '_element';
+
+ /**
+ * Key for the 'subelements' metadata item. Value is string[].
+ * @since 1.25
+ */
+ const META_SUBELEMENTS = '_subelements';
+
+ /**
+ * Key for the 'preserve keys' metadata item. Value is string[].
+ * @since 1.25
+ */
+ const META_PRESERVE_KEYS = '_preservekeys';
+
+ /**
+ * Key for the 'content' metadata item. Value is string.
+ * @since 1.25
+ */
+ const META_CONTENT = '_content';
+
+ /**
+ * Key for the 'type' metadata item. Value is one of the following strings:
+ * - default: Like 'array' if all (non-metadata) keys are numeric with no
+ * gaps, otherwise like 'assoc'.
+ * - array: Keys are used for ordering, but are not output. In a format
+ * like JSON, outputs as [].
+ * - assoc: In a format like JSON, outputs as {}.
+ * - kvp: For a format like XML where object keys have a restricted
+ * character set, use an alternative output format. For example,
+ * <container><item name="key">value</item></container> rather than
+ * <container key="value" />
+ * - BCarray: Like 'array' normally, 'default' in backwards-compatibility mode.
+ * - BCassoc: Like 'assoc' normally, 'default' in backwards-compatibility mode.
+ * - BCkvp: Like 'kvp' normally. In backwards-compatibility mode, forces
+ * the alternative output format for all formats, for example
+ * [{"name":key,"*":value}] in JSON. META_KVP_KEY_NAME must also be set.
+ * @since 1.25
+ */
+ const META_TYPE = '_type';
+
+ /**
+ * Key for the metadata item whose value specifies the name used for the
+ * kvp key in the alternative output format with META_TYPE 'kvp' or
+ * 'BCkvp', i.e. the "name" in <container><item name="key">value</item></container>.
+ * Value is string.
+ * @since 1.25
+ */
+ const META_KVP_KEY_NAME = '_kvpkeyname';
+
+ /**
+ * Key for the metadata item that indicates that the KVP key should be
+ * added into an assoc value, i.e. {"key":{"val1":"a","val2":"b"}}
+ * transforms to {"name":"key","val1":"a","val2":"b"} rather than
+ * {"name":"key","value":{"val1":"a","val2":"b"}}.
+ * Value is boolean.
+ * @since 1.26
+ */
+ const META_KVP_MERGE = '_kvpmerge';
+
+ /**
+ * Key for the 'BC bools' metadata item. Value is string[].
+ * Note no setter is provided.
+ * @since 1.25
+ */
+ const META_BC_BOOLS = '_BC_bools';
+
+ /**
+ * Key for the 'BC subelements' metadata item. Value is string[].
+ * Note no setter is provided.
+ * @since 1.25
+ */
+ const META_BC_SUBELEMENTS = '_BC_subelements';
+
+ private $data, $size, $maxSize;
+ private $errorFormatter;
+
+ // Deprecated fields
+ private $checkingSize, $mainForContinuation;
+
+ /**
+ * @param int|bool $maxSize Maximum result "size", or false for no limit
+ * @since 1.25 Takes an integer|bool rather than an ApiMain
+ */
+ public function __construct( $maxSize ) {
+ if ( $maxSize instanceof ApiMain ) {
+ wfDeprecated( 'ApiMain to ' . __METHOD__, '1.25' );
+ $this->errorFormatter = $maxSize->getErrorFormatter();
+ $this->mainForContinuation = $maxSize;
+ $maxSize = $maxSize->getConfig()->get( 'APIMaxResultSize' );
+ }
+
+ $this->maxSize = $maxSize;
+ $this->checkingSize = true;
+ $this->reset();
+ }
+
+ /**
+ * Set the error formatter
+ * @since 1.25
+ * @param ApiErrorFormatter $formatter
+ */
+ public function setErrorFormatter( ApiErrorFormatter $formatter ) {
+ $this->errorFormatter = $formatter;
+ }
+
+ /**
+ * Allow for adding one ApiResult into another
+ * @since 1.25
+ * @return mixed
+ */
+ public function serializeForApiResult() {
+ return $this->data;
+ }
+
+ /************************************************************************//**
+ * @name Content
+ * @{
+ */
+
+ /**
+ * Clear the current result data.
+ */
+ public function reset() {
+ $this->data = [
+ self::META_TYPE => 'assoc', // Usually what's desired
+ ];
+ $this->size = 0;
+ }
+
+ /**
+ * Get the result data array
+ *
+ * The returned value should be considered read-only.
+ *
+ * Transformations include:
+ *
+ * Custom: (callable) Applied before other transformations. Signature is
+ * function ( &$data, &$metadata ), return value is ignored. Called for
+ * each nested array.
+ *
+ * BC: (array) This transformation does various adjustments to bring the
+ * output in line with the pre-1.25 result format. The value array is a
+ * list of flags: 'nobool', 'no*', 'nosub'.
+ * - Boolean-valued items are changed to '' if true or removed if false,
+ * unless listed in META_BC_BOOLS. This may be skipped by including
+ * 'nobool' in the value array.
+ * - The tag named by META_CONTENT is renamed to '*', and META_CONTENT is
+ * set to '*'. This may be skipped by including 'no*' in the value
+ * array.
+ * - Tags listed in META_BC_SUBELEMENTS will have their values changed to
+ * [ '*' => $value ]. This may be skipped by including 'nosub' in
+ * the value array.
+ * - If META_TYPE is 'BCarray', set it to 'default'
+ * - If META_TYPE is 'BCassoc', set it to 'default'
+ * - If META_TYPE is 'BCkvp', perform the transformation (even if
+ * the Types transformation is not being applied).
+ *
+ * Types: (assoc) Apply transformations based on META_TYPE. The values
+ * array is an associative array with the following possible keys:
+ * - AssocAsObject: (bool) If true, return arrays with META_TYPE 'assoc'
+ * as objects.
+ * - ArmorKVP: (string) If provided, transform arrays with META_TYPE 'kvp'
+ * and 'BCkvp' into arrays of two-element arrays, something like this:
+ * $output = [];
+ * foreach ( $input as $key => $value ) {
+ * $pair = [];
+ * $pair[$META_KVP_KEY_NAME ?: $ArmorKVP_value] = $key;
+ * ApiResult::setContentValue( $pair, 'value', $value );
+ * $output[] = $pair;
+ * }
+ *
+ * Strip: (string) Strips metadata keys from the result.
+ * - 'all': Strip all metadata, recursively
+ * - 'base': Strip metadata at the top-level only.
+ * - 'none': Do not strip metadata.
+ * - 'bc': Like 'all', but leave certain pre-1.25 keys.
+ *
+ * @since 1.25
+ * @param array|string|null $path Path to fetch, see ApiResult::addValue
+ * @param array $transforms See above
+ * @return mixed Result data, or null if not found
+ */
+ public function getResultData( $path = [], $transforms = [] ) {
+ $path = (array)$path;
+ if ( !$path ) {
+ return self::applyTransformations( $this->data, $transforms );
+ }
+
+ $last = array_pop( $path );
+ $ret = &$this->path( $path, 'dummy' );
+ if ( !isset( $ret[$last] ) ) {
+ return null;
+ } elseif ( is_array( $ret[$last] ) ) {
+ return self::applyTransformations( $ret[$last], $transforms );
+ } else {
+ return $ret[$last];
+ }
+ }
+
+ /**
+ * Get the size of the result, i.e. the amount of bytes in it
+ * @return int
+ */
+ public function getSize() {
+ return $this->size;
+ }
+
+ /**
+ * Add an output value to the array by name.
+ *
+ * Verifies that value with the same name has not been added before.
+ *
+ * @since 1.25
+ * @param array &$arr To add $value to
+ * @param string|int|null $name Index of $arr to add $value at,
+ * or null to use the next numeric index.
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ */
+ public static function setValue( array &$arr, $name, $value, $flags = 0 ) {
+ if ( ( $flags & self::NO_VALIDATE ) !== self::NO_VALIDATE ) {
+ $value = self::validateValue( $value );
+ }
+
+ if ( $name === null ) {
+ if ( $flags & self::ADD_ON_TOP ) {
+ array_unshift( $arr, $value );
+ } else {
+ array_push( $arr, $value );
+ }
+ return;
+ }
+
+ $exists = isset( $arr[$name] );
+ if ( !$exists || ( $flags & self::OVERRIDE ) ) {
+ if ( !$exists && ( $flags & self::ADD_ON_TOP ) ) {
+ $arr = [ $name => $value ] + $arr;
+ } else {
+ $arr[$name] = $value;
+ }
+ } elseif ( is_array( $arr[$name] ) && is_array( $value ) ) {
+ $conflicts = array_intersect_key( $arr[$name], $value );
+ if ( !$conflicts ) {
+ $arr[$name] += $value;
+ } else {
+ $keys = implode( ', ', array_keys( $conflicts ) );
+ throw new RuntimeException(
+ "Conflicting keys ($keys) when attempting to merge element $name"
+ );
+ }
+ } else {
+ throw new RuntimeException(
+ "Attempting to add element $name=$value, existing value is {$arr[$name]}"
+ );
+ }
+ }
+
+ /**
+ * Validate a value for addition to the result
+ * @param mixed $value
+ * @return array|mixed|string
+ */
+ private static function validateValue( $value ) {
+ global $wgContLang;
+
+ if ( is_object( $value ) ) {
+ // Note we use is_callable() here instead of instanceof because
+ // ApiSerializable is an informal protocol (see docs there for details).
+ if ( is_callable( [ $value, 'serializeForApiResult' ] ) ) {
+ $oldValue = $value;
+ $value = $value->serializeForApiResult();
+ if ( is_object( $value ) ) {
+ throw new UnexpectedValueException(
+ get_class( $oldValue ) . '::serializeForApiResult() returned an object of class ' .
+ get_class( $value )
+ );
+ }
+
+ // Recursive call instead of fall-through so we can throw a
+ // better exception message.
+ try {
+ return self::validateValue( $value );
+ } catch ( Exception $ex ) {
+ throw new UnexpectedValueException(
+ get_class( $oldValue ) . '::serializeForApiResult() returned an invalid value: ' .
+ $ex->getMessage(),
+ 0,
+ $ex
+ );
+ }
+ } elseif ( is_callable( [ $value, '__toString' ] ) ) {
+ $value = (string)$value;
+ } else {
+ $value = (array)$value + [ self::META_TYPE => 'assoc' ];
+ }
+ }
+ if ( is_array( $value ) ) {
+ // Work around https://bugs.php.net/bug.php?id=45959 by copying to a temporary
+ // (in this case, foreach gets $k === "1" but $tmp[$k] assigns as if $k === 1)
+ $tmp = [];
+ foreach ( $value as $k => $v ) {
+ $tmp[$k] = self::validateValue( $v );
+ }
+ $value = $tmp;
+ } elseif ( is_float( $value ) && !is_finite( $value ) ) {
+ throw new InvalidArgumentException( 'Cannot add non-finite floats to ApiResult' );
+ } elseif ( is_string( $value ) ) {
+ $value = $wgContLang->normalize( $value );
+ } elseif ( $value !== null && !is_scalar( $value ) ) {
+ $type = gettype( $value );
+ if ( is_resource( $value ) ) {
+ $type .= '(' . get_resource_type( $value ) . ')';
+ }
+ throw new InvalidArgumentException( "Cannot add $type to ApiResult" );
+ }
+
+ return $value;
+ }
+
+ /**
+ * Add value to the output data at the given path.
+ *
+ * Path can be an indexed array, each element specifying the branch at which to add the new
+ * value. Setting $path to [ 'a', 'b', 'c' ] is equivalent to data['a']['b']['c'] = $value.
+ * If $path is null, the value will be inserted at the data root.
+ *
+ * @param array|string|int|null $path
+ * @param string|int|null $name See ApiResult::setValue()
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ * This parameter used to be boolean, and the value of OVERRIDE=1 was specifically
+ * chosen so that it would be backwards compatible with the new method signature.
+ * @return bool True if $value fits in the result, false if not
+ * @since 1.21 int $flags replaced boolean $override
+ */
+ public function addValue( $path, $name, $value, $flags = 0 ) {
+ $arr = &$this->path( $path, ( $flags & self::ADD_ON_TOP ) ? 'prepend' : 'append' );
+
+ if ( $this->checkingSize && !( $flags & self::NO_SIZE_CHECK ) ) {
+ // self::size needs the validated value. Then flag
+ // to not re-validate later.
+ $value = self::validateValue( $value );
+ $flags |= self::NO_VALIDATE;
+
+ $newsize = $this->size + self::size( $value );
+ if ( $this->maxSize !== false && $newsize > $this->maxSize ) {
+ $this->errorFormatter->addWarning(
+ 'result', [ 'apiwarn-truncatedresult', Message::numParam( $this->maxSize ) ]
+ );
+ return false;
+ }
+ $this->size = $newsize;
+ }
+
+ self::setValue( $arr, $name, $value, $flags );
+ return true;
+ }
+
+ /**
+ * Remove an output value to the array by name.
+ * @param array &$arr To remove $value from
+ * @param string|int $name Index of $arr to remove
+ * @return mixed Old value, or null
+ */
+ public static function unsetValue( array &$arr, $name ) {
+ $ret = null;
+ if ( isset( $arr[$name] ) ) {
+ $ret = $arr[$name];
+ unset( $arr[$name] );
+ }
+ return $ret;
+ }
+
+ /**
+ * Remove value from the output data at the given path.
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string|int|null $name Index to remove at $path.
+ * If null, $path itself is removed.
+ * @param int $flags Flags used when adding the value
+ * @return mixed Old value, or null
+ */
+ public function removeValue( $path, $name, $flags = 0 ) {
+ $path = (array)$path;
+ if ( $name === null ) {
+ if ( !$path ) {
+ throw new InvalidArgumentException( 'Cannot remove the data root' );
+ }
+ $name = array_pop( $path );
+ }
+ $ret = self::unsetValue( $this->path( $path, 'dummy' ), $name );
+ if ( $this->checkingSize && !( $flags & self::NO_SIZE_CHECK ) ) {
+ $newsize = $this->size - self::size( $ret );
+ $this->size = max( $newsize, 0 );
+ }
+ return $ret;
+ }
+
+ /**
+ * Add an output value to the array by name and mark as META_CONTENT.
+ *
+ * @since 1.25
+ * @param array &$arr To add $value to
+ * @param string|int $name Index of $arr to add $value at.
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ */
+ public static function setContentValue( array &$arr, $name, $value, $flags = 0 ) {
+ if ( $name === null ) {
+ throw new InvalidArgumentException( 'Content value must be named' );
+ }
+ self::setContentField( $arr, $name, $flags );
+ self::setValue( $arr, $name, $value, $flags );
+ }
+
+ /**
+ * Add value to the output data at the given path and mark as META_CONTENT
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string|int $name See ApiResult::setValue()
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ * @return bool True if $value fits in the result, false if not
+ */
+ public function addContentValue( $path, $name, $value, $flags = 0 ) {
+ if ( $name === null ) {
+ throw new InvalidArgumentException( 'Content value must be named' );
+ }
+ $this->addContentField( $path, $name, $flags );
+ $this->addValue( $path, $name, $value, $flags );
+ }
+
+ /**
+ * Add the numeric limit for a limit=max to the result.
+ *
+ * @since 1.25
+ * @param string $moduleName
+ * @param int $limit
+ */
+ public function addParsedLimit( $moduleName, $limit ) {
+ // Add value, allowing overwriting
+ $this->addValue( 'limits', $moduleName, $limit,
+ self::OVERRIDE | self::NO_SIZE_CHECK );
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Metadata
+ * @{
+ */
+
+ /**
+ * Set the name of the content field name (META_CONTENT)
+ *
+ * @since 1.25
+ * @param array &$arr
+ * @param string|int $name Name of the field
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ */
+ public static function setContentField( array &$arr, $name, $flags = 0 ) {
+ if ( isset( $arr[self::META_CONTENT] ) &&
+ isset( $arr[$arr[self::META_CONTENT]] ) &&
+ !( $flags & self::OVERRIDE )
+ ) {
+ throw new RuntimeException(
+ "Attempting to set content element as $name when " . $arr[self::META_CONTENT] .
+ ' is already set as the content element'
+ );
+ }
+ $arr[self::META_CONTENT] = $name;
+ }
+
+ /**
+ * Set the name of the content field name (META_CONTENT)
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string|int $name Name of the field
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ */
+ public function addContentField( $path, $name, $flags = 0 ) {
+ $arr = &$this->path( $path, ( $flags & self::ADD_ON_TOP ) ? 'prepend' : 'append' );
+ self::setContentField( $arr, $name, $flags );
+ }
+
+ /**
+ * Causes the elements with the specified names to be output as
+ * subelements rather than attributes.
+ * @since 1.25 is static
+ * @param array &$arr
+ * @param array|string|int $names The element name(s) to be output as subelements
+ */
+ public static function setSubelementsList( array &$arr, $names ) {
+ if ( !isset( $arr[self::META_SUBELEMENTS] ) ) {
+ $arr[self::META_SUBELEMENTS] = (array)$names;
+ } else {
+ $arr[self::META_SUBELEMENTS] = array_merge( $arr[self::META_SUBELEMENTS], (array)$names );
+ }
+ }
+
+ /**
+ * Causes the elements with the specified names to be output as
+ * subelements rather than attributes.
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string|int $names The element name(s) to be output as subelements
+ */
+ public function addSubelementsList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::setSubelementsList( $arr, $names );
+ }
+
+ /**
+ * Causes the elements with the specified names to be output as
+ * attributes (when possible) rather than as subelements.
+ * @since 1.25
+ * @param array &$arr
+ * @param array|string|int $names The element name(s) to not be output as subelements
+ */
+ public static function unsetSubelementsList( array &$arr, $names ) {
+ if ( isset( $arr[self::META_SUBELEMENTS] ) ) {
+ $arr[self::META_SUBELEMENTS] = array_diff( $arr[self::META_SUBELEMENTS], (array)$names );
+ }
+ }
+
+ /**
+ * Causes the elements with the specified names to be output as
+ * attributes (when possible) rather than as subelements.
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string|int $names The element name(s) to not be output as subelements
+ */
+ public function removeSubelementsList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::unsetSubelementsList( $arr, $names );
+ }
+
+ /**
+ * Set the tag name for numeric-keyed values in XML format
+ * @since 1.25 is static
+ * @param array &$arr
+ * @param string $tag Tag name
+ */
+ public static function setIndexedTagName( array &$arr, $tag ) {
+ if ( !is_string( $tag ) ) {
+ throw new InvalidArgumentException( 'Bad tag name' );
+ }
+ $arr[self::META_INDEXED_TAG_NAME] = $tag;
+ }
+
+ /**
+ * Set the tag name for numeric-keyed values in XML format
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string $tag Tag name
+ */
+ public function addIndexedTagName( $path, $tag ) {
+ $arr = &$this->path( $path );
+ self::setIndexedTagName( $arr, $tag );
+ }
+
+ /**
+ * Set indexed tag name on $arr and all subarrays
+ *
+ * @since 1.25
+ * @param array &$arr
+ * @param string $tag Tag name
+ */
+ public static function setIndexedTagNameRecursive( array &$arr, $tag ) {
+ if ( !is_string( $tag ) ) {
+ throw new InvalidArgumentException( 'Bad tag name' );
+ }
+ $arr[self::META_INDEXED_TAG_NAME] = $tag;
+ foreach ( $arr as $k => &$v ) {
+ if ( !self::isMetadataKey( $k ) && is_array( $v ) ) {
+ self::setIndexedTagNameRecursive( $v, $tag );
+ }
+ }
+ }
+
+ /**
+ * Set indexed tag name on $path and all subarrays
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string $tag Tag name
+ */
+ public function addIndexedTagNameRecursive( $path, $tag ) {
+ $arr = &$this->path( $path );
+ self::setIndexedTagNameRecursive( $arr, $tag );
+ }
+
+ /**
+ * Preserve specified keys.
+ *
+ * This prevents XML name mangling and preventing keys from being removed
+ * by self::stripMetadata().
+ *
+ * @since 1.25
+ * @param array &$arr
+ * @param array|string $names The element name(s) to preserve
+ */
+ public static function setPreserveKeysList( array &$arr, $names ) {
+ if ( !isset( $arr[self::META_PRESERVE_KEYS] ) ) {
+ $arr[self::META_PRESERVE_KEYS] = (array)$names;
+ } else {
+ $arr[self::META_PRESERVE_KEYS] = array_merge( $arr[self::META_PRESERVE_KEYS], (array)$names );
+ }
+ }
+
+ /**
+ * Preserve specified keys.
+ * @since 1.25
+ * @see self::setPreserveKeysList()
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string $names The element name(s) to preserve
+ */
+ public function addPreserveKeysList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::setPreserveKeysList( $arr, $names );
+ }
+
+ /**
+ * Don't preserve specified keys.
+ * @since 1.25
+ * @see self::setPreserveKeysList()
+ * @param array &$arr
+ * @param array|string $names The element name(s) to not preserve
+ */
+ public static function unsetPreserveKeysList( array &$arr, $names ) {
+ if ( isset( $arr[self::META_PRESERVE_KEYS] ) ) {
+ $arr[self::META_PRESERVE_KEYS] = array_diff( $arr[self::META_PRESERVE_KEYS], (array)$names );
+ }
+ }
+
+ /**
+ * Don't preserve specified keys.
+ * @since 1.25
+ * @see self::setPreserveKeysList()
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string $names The element name(s) to not preserve
+ */
+ public function removePreserveKeysList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::unsetPreserveKeysList( $arr, $names );
+ }
+
+ /**
+ * Set the array data type
+ *
+ * @since 1.25
+ * @param array &$arr
+ * @param string $type See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public static function setArrayType( array &$arr, $type, $kvpKeyName = null ) {
+ if ( !in_array( $type, [
+ 'default', 'array', 'assoc', 'kvp', 'BCarray', 'BCassoc', 'BCkvp'
+ ], true ) ) {
+ throw new InvalidArgumentException( 'Bad type' );
+ }
+ $arr[self::META_TYPE] = $type;
+ if ( is_string( $kvpKeyName ) ) {
+ $arr[self::META_KVP_KEY_NAME] = $kvpKeyName;
+ }
+ }
+
+ /**
+ * Set the array data type for a path
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string $tag See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public function addArrayType( $path, $tag, $kvpKeyName = null ) {
+ $arr = &$this->path( $path );
+ self::setArrayType( $arr, $tag, $kvpKeyName );
+ }
+
+ /**
+ * Set the array data type recursively
+ * @since 1.25
+ * @param array &$arr
+ * @param string $type See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public static function setArrayTypeRecursive( array &$arr, $type, $kvpKeyName = null ) {
+ self::setArrayType( $arr, $type, $kvpKeyName );
+ foreach ( $arr as $k => &$v ) {
+ if ( !self::isMetadataKey( $k ) && is_array( $v ) ) {
+ self::setArrayTypeRecursive( $v, $type, $kvpKeyName );
+ }
+ }
+ }
+
+ /**
+ * Set the array data type for a path recursively
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string $tag See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public function addArrayTypeRecursive( $path, $tag, $kvpKeyName = null ) {
+ $arr = &$this->path( $path );
+ self::setArrayTypeRecursive( $arr, $tag, $kvpKeyName );
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Utility
+ * @{
+ */
+
+ /**
+ * Test whether a key should be considered metadata
+ *
+ * @param string $key
+ * @return bool
+ */
+ public static function isMetadataKey( $key ) {
+ return substr( $key, 0, 1 ) === '_';
+ }
+
+ /**
+ * Apply transformations to an array, returning the transformed array.
+ *
+ * @see ApiResult::getResultData()
+ * @since 1.25
+ * @param array $dataIn
+ * @param array $transforms
+ * @return array|object
+ */
+ protected static function applyTransformations( array $dataIn, array $transforms ) {
+ $strip = isset( $transforms['Strip'] ) ? $transforms['Strip'] : 'none';
+ if ( $strip === 'base' ) {
+ $transforms['Strip'] = 'none';
+ }
+ $transformTypes = isset( $transforms['Types'] ) ? $transforms['Types'] : null;
+ if ( $transformTypes !== null && !is_array( $transformTypes ) ) {
+ throw new InvalidArgumentException( __METHOD__ . ':Value for "Types" must be an array' );
+ }
+
+ $metadata = [];
+ $data = self::stripMetadataNonRecursive( $dataIn, $metadata );
+
+ if ( isset( $transforms['Custom'] ) ) {
+ if ( !is_callable( $transforms['Custom'] ) ) {
+ throw new InvalidArgumentException( __METHOD__ . ': Value for "Custom" must be callable' );
+ }
+ call_user_func_array( $transforms['Custom'], [ &$data, &$metadata ] );
+ }
+
+ if ( ( isset( $transforms['BC'] ) || $transformTypes !== null ) &&
+ isset( $metadata[self::META_TYPE] ) && $metadata[self::META_TYPE] === 'BCkvp' &&
+ !isset( $metadata[self::META_KVP_KEY_NAME] )
+ ) {
+ throw new UnexpectedValueException( 'Type "BCkvp" used without setting ' .
+ 'ApiResult::META_KVP_KEY_NAME metadata item' );
+ }
+
+ // BC transformations
+ $boolKeys = null;
+ if ( isset( $transforms['BC'] ) ) {
+ if ( !is_array( $transforms['BC'] ) ) {
+ throw new InvalidArgumentException( __METHOD__ . ':Value for "BC" must be an array' );
+ }
+ if ( !in_array( 'nobool', $transforms['BC'], true ) ) {
+ $boolKeys = isset( $metadata[self::META_BC_BOOLS] )
+ ? array_flip( $metadata[self::META_BC_BOOLS] )
+ : [];
+ }
+
+ if ( !in_array( 'no*', $transforms['BC'], true ) &&
+ isset( $metadata[self::META_CONTENT] ) && $metadata[self::META_CONTENT] !== '*'
+ ) {
+ $k = $metadata[self::META_CONTENT];
+ $data['*'] = $data[$k];
+ unset( $data[$k] );
+ $metadata[self::META_CONTENT] = '*';
+ }
+
+ if ( !in_array( 'nosub', $transforms['BC'], true ) &&
+ isset( $metadata[self::META_BC_SUBELEMENTS] )
+ ) {
+ foreach ( $metadata[self::META_BC_SUBELEMENTS] as $k ) {
+ if ( isset( $data[$k] ) ) {
+ $data[$k] = [
+ '*' => $data[$k],
+ self::META_CONTENT => '*',
+ self::META_TYPE => 'assoc',
+ ];
+ }
+ }
+ }
+
+ if ( isset( $metadata[self::META_TYPE] ) ) {
+ switch ( $metadata[self::META_TYPE] ) {
+ case 'BCarray':
+ case 'BCassoc':
+ $metadata[self::META_TYPE] = 'default';
+ break;
+ case 'BCkvp':
+ $transformTypes['ArmorKVP'] = $metadata[self::META_KVP_KEY_NAME];
+ break;
+ }
+ }
+ }
+
+ // Figure out type, do recursive calls, and do boolean transform if necessary
+ $defaultType = 'array';
+ $maxKey = -1;
+ foreach ( $data as $k => &$v ) {
+ $v = is_array( $v ) ? self::applyTransformations( $v, $transforms ) : $v;
+ if ( $boolKeys !== null && is_bool( $v ) && !isset( $boolKeys[$k] ) ) {
+ if ( !$v ) {
+ unset( $data[$k] );
+ continue;
+ }
+ $v = '';
+ }
+ if ( is_string( $k ) ) {
+ $defaultType = 'assoc';
+ } elseif ( $k > $maxKey ) {
+ $maxKey = $k;
+ }
+ }
+ unset( $v );
+
+ // Determine which metadata to keep
+ switch ( $strip ) {
+ case 'all':
+ case 'base':
+ $keepMetadata = [];
+ break;
+ case 'none':
+ $keepMetadata = &$metadata;
+ break;
+ case 'bc':
+ $keepMetadata = array_intersect_key( $metadata, [
+ self::META_INDEXED_TAG_NAME => 1,
+ self::META_SUBELEMENTS => 1,
+ ] );
+ break;
+ default:
+ throw new InvalidArgumentException( __METHOD__ . ': Unknown value for "Strip"' );
+ }
+
+ // Type transformation
+ if ( $transformTypes !== null ) {
+ if ( $defaultType === 'array' && $maxKey !== count( $data ) - 1 ) {
+ $defaultType = 'assoc';
+ }
+
+ // Override type, if provided
+ $type = $defaultType;
+ if ( isset( $metadata[self::META_TYPE] ) && $metadata[self::META_TYPE] !== 'default' ) {
+ $type = $metadata[self::META_TYPE];
+ }
+ if ( ( $type === 'kvp' || $type === 'BCkvp' ) &&
+ empty( $transformTypes['ArmorKVP'] )
+ ) {
+ $type = 'assoc';
+ } elseif ( $type === 'BCarray' ) {
+ $type = 'array';
+ } elseif ( $type === 'BCassoc' ) {
+ $type = 'assoc';
+ }
+
+ // Apply transformation
+ switch ( $type ) {
+ case 'assoc':
+ $metadata[self::META_TYPE] = 'assoc';
+ $data += $keepMetadata;
+ return empty( $transformTypes['AssocAsObject'] ) ? $data : (object)$data;
+
+ case 'array':
+ ksort( $data );
+ $data = array_values( $data );
+ $metadata[self::META_TYPE] = 'array';
+ return $data + $keepMetadata;
+
+ case 'kvp':
+ case 'BCkvp':
+ $key = isset( $metadata[self::META_KVP_KEY_NAME] )
+ ? $metadata[self::META_KVP_KEY_NAME]
+ : $transformTypes['ArmorKVP'];
+ $valKey = isset( $transforms['BC'] ) ? '*' : 'value';
+ $assocAsObject = !empty( $transformTypes['AssocAsObject'] );
+ $merge = !empty( $metadata[self::META_KVP_MERGE] );
+
+ $ret = [];
+ foreach ( $data as $k => $v ) {
+ if ( $merge && ( is_array( $v ) || is_object( $v ) ) ) {
+ $vArr = (array)$v;
+ if ( isset( $vArr[self::META_TYPE] ) ) {
+ $mergeType = $vArr[self::META_TYPE];
+ } elseif ( is_object( $v ) ) {
+ $mergeType = 'assoc';
+ } else {
+ $keys = array_keys( $vArr );
+ sort( $keys, SORT_NUMERIC );
+ $mergeType = ( $keys === array_keys( $keys ) ) ? 'array' : 'assoc';
+ }
+ } else {
+ $mergeType = 'n/a';
+ }
+ if ( $mergeType === 'assoc' ) {
+ $item = $vArr + [
+ $key => $k,
+ ];
+ if ( $strip === 'none' ) {
+ self::setPreserveKeysList( $item, [ $key ] );
+ }
+ } else {
+ $item = [
+ $key => $k,
+ $valKey => $v,
+ ];
+ if ( $strip === 'none' ) {
+ $item += [
+ self::META_PRESERVE_KEYS => [ $key ],
+ self::META_CONTENT => $valKey,
+ self::META_TYPE => 'assoc',
+ ];
+ }
+ }
+ $ret[] = $assocAsObject ? (object)$item : $item;
+ }
+ $metadata[self::META_TYPE] = 'array';
+
+ return $ret + $keepMetadata;
+
+ default:
+ throw new UnexpectedValueException( "Unknown type '$type'" );
+ }
+ } else {
+ return $data + $keepMetadata;
+ }
+ }
+
+ /**
+ * Recursively remove metadata keys from a data array or object
+ *
+ * Note this removes all potential metadata keys, not just the defined
+ * ones.
+ *
+ * @since 1.25
+ * @param array|object $data
+ * @return array|object
+ */
+ public static function stripMetadata( $data ) {
+ if ( is_array( $data ) || is_object( $data ) ) {
+ $isObj = is_object( $data );
+ if ( $isObj ) {
+ $data = (array)$data;
+ }
+ $preserveKeys = isset( $data[self::META_PRESERVE_KEYS] )
+ ? (array)$data[self::META_PRESERVE_KEYS]
+ : [];
+ foreach ( $data as $k => $v ) {
+ if ( self::isMetadataKey( $k ) && !in_array( $k, $preserveKeys, true ) ) {
+ unset( $data[$k] );
+ } elseif ( is_array( $v ) || is_object( $v ) ) {
+ $data[$k] = self::stripMetadata( $v );
+ }
+ }
+ if ( $isObj ) {
+ $data = (object)$data;
+ }
+ }
+ return $data;
+ }
+
+ /**
+ * Remove metadata keys from a data array or object, non-recursive
+ *
+ * Note this removes all potential metadata keys, not just the defined
+ * ones.
+ *
+ * @since 1.25
+ * @param array|object $data
+ * @param array &$metadata Store metadata here, if provided
+ * @return array|object
+ */
+ public static function stripMetadataNonRecursive( $data, &$metadata = null ) {
+ if ( !is_array( $metadata ) ) {
+ $metadata = [];
+ }
+ if ( is_array( $data ) || is_object( $data ) ) {
+ $isObj = is_object( $data );
+ if ( $isObj ) {
+ $data = (array)$data;
+ }
+ $preserveKeys = isset( $data[self::META_PRESERVE_KEYS] )
+ ? (array)$data[self::META_PRESERVE_KEYS]
+ : [];
+ foreach ( $data as $k => $v ) {
+ if ( self::isMetadataKey( $k ) && !in_array( $k, $preserveKeys, true ) ) {
+ $metadata[$k] = $v;
+ unset( $data[$k] );
+ }
+ }
+ if ( $isObj ) {
+ $data = (object)$data;
+ }
+ }
+ return $data;
+ }
+
+ /**
+ * Get the 'real' size of a result item. This means the strlen() of the item,
+ * or the sum of the strlen()s of the elements if the item is an array.
+ * @param mixed $value Validated value (see self::validateValue())
+ * @return int
+ */
+ private static function size( $value ) {
+ $s = 0;
+ if ( is_array( $value ) ) {
+ foreach ( $value as $k => $v ) {
+ if ( !self::isMetadataKey( $k ) ) {
+ $s += self::size( $v );
+ }
+ }
+ } elseif ( is_scalar( $value ) ) {
+ $s = strlen( $value );
+ }
+
+ return $s;
+ }
+
+ /**
+ * Return a reference to the internal data at $path
+ *
+ * @param array|string|null $path
+ * @param string $create
+ * If 'append', append empty arrays.
+ * If 'prepend', prepend empty arrays.
+ * If 'dummy', return a dummy array.
+ * Else, raise an error.
+ * @return array
+ */
+ private function &path( $path, $create = 'append' ) {
+ $path = (array)$path;
+ $ret = &$this->data;
+ foreach ( $path as $i => $k ) {
+ if ( !isset( $ret[$k] ) ) {
+ switch ( $create ) {
+ case 'append':
+ $ret[$k] = [];
+ break;
+ case 'prepend':
+ $ret = [ $k => [] ] + $ret;
+ break;
+ case 'dummy':
+ $tmp = [];
+ return $tmp;
+ default:
+ $fail = implode( '.', array_slice( $path, 0, $i + 1 ) );
+ throw new InvalidArgumentException( "Path $fail does not exist" );
+ }
+ }
+ if ( !is_array( $ret[$k] ) ) {
+ $fail = implode( '.', array_slice( $path, 0, $i + 1 ) );
+ throw new InvalidArgumentException( "Path $fail is not an array" );
+ }
+ $ret = &$ret[$k];
+ }
+ return $ret;
+ }
+
+ /**
+ * Add the correct metadata to an array of vars we want to export through
+ * the API.
+ *
+ * @param array $vars
+ * @param bool $forceHash
+ * @return array
+ */
+ public static function addMetadataToResultVars( $vars, $forceHash = true ) {
+ // Process subarrays and determine if this is a JS [] or {}
+ $hash = $forceHash;
+ $maxKey = -1;
+ $bools = [];
+ foreach ( $vars as $k => $v ) {
+ if ( is_array( $v ) || is_object( $v ) ) {
+ $vars[$k] = self::addMetadataToResultVars( (array)$v, is_object( $v ) );
+ } elseif ( is_bool( $v ) ) {
+ // Better here to use real bools even in BC formats
+ $bools[] = $k;
+ }
+ if ( is_string( $k ) ) {
+ $hash = true;
+ } elseif ( $k > $maxKey ) {
+ $maxKey = $k;
+ }
+ }
+ if ( !$hash && $maxKey !== count( $vars ) - 1 ) {
+ $hash = true;
+ }
+
+ // Set metadata appropriately
+ if ( $hash ) {
+ // Get the list of keys we actually care about. Unfortunately, we can't support
+ // certain keys that conflict with ApiResult metadata.
+ $keys = array_diff( array_keys( $vars ), [
+ self::META_TYPE, self::META_PRESERVE_KEYS, self::META_KVP_KEY_NAME,
+ self::META_INDEXED_TAG_NAME, self::META_BC_BOOLS
+ ] );
+
+ return [
+ self::META_TYPE => 'kvp',
+ self::META_KVP_KEY_NAME => 'key',
+ self::META_PRESERVE_KEYS => $keys,
+ self::META_BC_BOOLS => $bools,
+ self::META_INDEXED_TAG_NAME => 'var',
+ ] + $vars;
+ } else {
+ return [
+ self::META_TYPE => 'array',
+ self::META_BC_BOOLS => $bools,
+ self::META_INDEXED_TAG_NAME => 'value',
+ ] + $vars;
+ }
+ }
+
+ /**
+ * Format an expiry timestamp for API output
+ * @since 1.29
+ * @param string $expiry Expiry timestamp, likely from the database
+ * @param string $infinity Use this string for infinite expiry
+ * (only use this to maintain backward compatibility with existing output)
+ * @return string Formatted expiry
+ */
+ public static function formatExpiry( $expiry, $infinity = 'infinity' ) {
+ static $dbInfinity;
+ if ( $dbInfinity === null ) {
+ $dbInfinity = wfGetDB( DB_REPLICA )->getInfinity();
+ }
+
+ if ( $expiry === '' || $expiry === null || $expiry === false ||
+ wfIsInfinity( $expiry ) || $expiry === $dbInfinity
+ ) {
+ return $infinity;
+ } else {
+ return wfTimestamp( TS_ISO_8601, $expiry );
+ }
+ }
+
+ /**@}*/
+
+}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
diff --git a/www/wiki/includes/api/ApiRevisionDelete.php b/www/wiki/includes/api/ApiRevisionDelete.php
new file mode 100644
index 00000000..9a793e2f
--- /dev/null
+++ b/www/wiki/includes/api/ApiRevisionDelete.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Copyright © 2013 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.23
+ */
+
+/**
+ * API interface to RevDel. The API equivalent of Special:RevisionDelete.
+ * Requires API write mode to be enabled.
+ *
+ * @ingroup API
+ */
+class ApiRevisionDelete extends ApiBase {
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $params = $this->extractRequestParams();
+ $user = $this->getUser();
+ $this->checkUserRightsAny( RevisionDeleter::getRestriction( $params['type'] ) );
+
+ if ( $user->isBlocked() ) {
+ $this->dieBlocked( $user->getBlock() );
+ }
+
+ if ( !$params['ids'] ) {
+ $this->dieWithError( [ 'apierror-paramempty', 'ids' ], 'paramempty_ids' );
+ }
+
+ // Check if user can add tags
+ if ( $params['tags'] ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ $hide = $params['hide'] ?: [];
+ $show = $params['show'] ?: [];
+ if ( array_intersect( $hide, $show ) ) {
+ $this->dieWithError( 'apierror-revdel-mutuallyexclusive', 'badparams' );
+ } elseif ( !$hide && !$show ) {
+ $this->dieWithError( 'apierror-revdel-paramneeded', 'badparams' );
+ }
+ $bits = [
+ 'content' => RevisionDeleter::getRevdelConstant( $params['type'] ),
+ 'comment' => Revision::DELETED_COMMENT,
+ 'user' => Revision::DELETED_USER,
+ ];
+ $bitfield = [];
+ foreach ( $bits as $key => $bit ) {
+ if ( in_array( $key, $hide ) ) {
+ $bitfield[$bit] = 1;
+ } elseif ( in_array( $key, $show ) ) {
+ $bitfield[$bit] = 0;
+ } else {
+ $bitfield[$bit] = -1;
+ }
+ }
+
+ if ( $params['suppress'] === 'yes' ) {
+ $this->checkUserRightsAny( 'suppressrevision' );
+ $bitfield[Revision::DELETED_RESTRICTED] = 1;
+ } elseif ( $params['suppress'] === 'no' ) {
+ $bitfield[Revision::DELETED_RESTRICTED] = 0;
+ } else {
+ $bitfield[Revision::DELETED_RESTRICTED] = -1;
+ }
+
+ $targetObj = null;
+ if ( $params['target'] ) {
+ $targetObj = Title::newFromText( $params['target'] );
+ }
+ $targetObj = RevisionDeleter::suggestTarget( $params['type'], $targetObj, $params['ids'] );
+ if ( $targetObj === null ) {
+ $this->dieWithError( [ 'apierror-revdel-needtarget' ], 'needtarget' );
+ }
+
+ $list = RevisionDeleter::createList(
+ $params['type'], $this->getContext(), $targetObj, $params['ids']
+ );
+ $status = $list->setVisibility( [
+ 'value' => $bitfield,
+ 'comment' => $params['reason'],
+ 'perItemStatus' => true,
+ 'tags' => $params['tags']
+ ] );
+
+ $result = $this->getResult();
+ $data = $this->extractStatusInfo( $status );
+ $data['target'] = $targetObj->getFullText();
+ $data['items'] = [];
+
+ foreach ( $status->itemStatuses as $id => $s ) {
+ $data['items'][$id] = $this->extractStatusInfo( $s );
+ $data['items'][$id]['id'] = $id;
+ }
+
+ $list->reloadFromMaster();
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
+ for ( $item = $list->reset(); $list->current(); $item = $list->next() ) {
+ $data['items'][$item->getId()] += $item->getApiData( $this->getResult() );
+ }
+
+ $data['items'] = array_values( $data['items'] );
+ ApiResult::setIndexedTagName( $data['items'], 'i' );
+ $result->addValue( null, $this->getModuleName(), $data );
+ }
+
+ private function extractStatusInfo( $status ) {
+ $ret = [
+ 'status' => $status->isOK() ? 'Success' : 'Fail',
+ ];
+
+ $errors = $this->getErrorFormatter()->arrayFromStatus( $status, 'error' );
+ if ( $errors ) {
+ $ret['errors'] = $errors;
+ }
+ $warnings = $this->getErrorFormatter()->arrayFromStatus( $status, 'warning' );
+ if ( $warnings ) {
+ $ret['warnings'] = $warnings;
+ }
+
+ return $ret;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'type' => [
+ ApiBase::PARAM_TYPE => RevisionDeleter::getTypes(),
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'target' => null,
+ 'ids' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'hide' => [
+ ApiBase::PARAM_TYPE => [ 'content', 'comment', 'user' ],
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'show' => [
+ ApiBase::PARAM_TYPE => [ 'content', 'comment', 'user' ],
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'suppress' => [
+ ApiBase::PARAM_TYPE => [ 'yes', 'no', 'nochange' ],
+ ApiBase::PARAM_DFLT => 'nochange',
+ ],
+ 'reason' => null,
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
+ 'hide=content&token=123ABC'
+ => 'apihelp-revisiondelete-example-revision',
+ 'action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
+ 'reason=BLP%20violation&token=123ABC'
+ => 'apihelp-revisiondelete-example-log',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Revisiondelete';
+ }
+}
diff --git a/www/wiki/includes/api/ApiRollback.php b/www/wiki/includes/api/ApiRollback.php
new file mode 100644
index 00000000..d2ff7902
--- /dev/null
+++ b/www/wiki/includes/api/ApiRollback.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiRollback extends ApiBase {
+
+ /**
+ * @var Title
+ */
+ private $mTitleObj = null;
+
+ /**
+ * @var User
+ */
+ private $mUser = null;
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ $titleObj = $this->getRbTitle( $params );
+ $pageObj = WikiPage::factory( $titleObj );
+ $summary = $params['summary'];
+ $details = [];
+
+ // If change tagging was requested, check that the user is allowed to tag,
+ // and the tags are valid
+ if ( $params['tags'] ) {
+ $tagStatus = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$tagStatus->isOK() ) {
+ $this->dieStatus( $tagStatus );
+ }
+ }
+
+ $retval = $pageObj->doRollback(
+ $this->getRbUser( $params ),
+ $summary,
+ $params['token'],
+ $params['markbot'],
+ $details,
+ $user,
+ $params['tags']
+ );
+
+ if ( $retval ) {
+ $this->dieStatus( $this->errorArrayToStatus( $retval, $user ) );
+ }
+
+ $watch = 'preferences';
+ if ( isset( $params['watchlist'] ) ) {
+ $watch = $params['watchlist'];
+ }
+
+ // Watch pages
+ $this->setWatch( $watch, $titleObj, 'watchrollback' );
+
+ $info = [
+ 'title' => $titleObj->getPrefixedText(),
+ 'pageid' => intval( $details['current']->getPage() ),
+ 'summary' => $details['summary'],
+ 'revid' => intval( $details['newid'] ),
+ // The revision being reverted (previously the current revision of the page)
+ 'old_revid' => intval( $details['current']->getID() ),
+ // The revision being restored (the last revision before revision(s) by the reverted user)
+ 'last_revid' => intval( $details['target']->getID() )
+ ];
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $info );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => null,
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'summary' => '',
+ 'markbot' => false,
+ 'watchlist' => [
+ ApiBase::PARAM_DFLT => 'preferences',
+ ApiBase::PARAM_TYPE => [
+ 'watch',
+ 'unwatch',
+ 'preferences',
+ 'nochange'
+ ],
+ ],
+ 'token' => [
+ // Standard definition automatically inserted
+ ApiBase::PARAM_HELP_MSG_APPEND => [ 'api-help-param-token-webui' ],
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'rollback';
+ }
+
+ /**
+ * @param array $params
+ *
+ * @return string
+ */
+ private function getRbUser( array $params ) {
+ if ( $this->mUser !== null ) {
+ return $this->mUser;
+ }
+
+ // We need to be able to revert IPs, but getCanonicalName rejects them
+ $this->mUser = User::isIP( $params['user'] )
+ ? $params['user']
+ : User::getCanonicalName( $params['user'] );
+ if ( !$this->mUser ) {
+ $this->dieWithError( [ 'apierror-invaliduser', wfEscapeWikiText( $params['user'] ) ] );
+ }
+
+ return $this->mUser;
+ }
+
+ /**
+ * @param array $params
+ *
+ * @return Title
+ */
+ private function getRbTitle( array $params ) {
+ if ( $this->mTitleObj !== null ) {
+ return $this->mTitleObj;
+ }
+
+ $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
+
+ if ( isset( $params['title'] ) ) {
+ $this->mTitleObj = Title::newFromText( $params['title'] );
+ if ( !$this->mTitleObj || $this->mTitleObj->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+ } elseif ( isset( $params['pageid'] ) ) {
+ $this->mTitleObj = Title::newFromID( $params['pageid'] );
+ if ( !$this->mTitleObj ) {
+ $this->dieWithError( [ 'apierror-nosuchpageid', $params['pageid'] ] );
+ }
+ }
+
+ if ( !$this->mTitleObj->exists() ) {
+ $this->dieWithError( 'apierror-missingtitle' );
+ }
+
+ return $this->mTitleObj;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=rollback&title=Main%20Page&user=Example&token=123ABC' =>
+ 'apihelp-rollback-example-simple',
+ 'action=rollback&title=Main%20Page&user=192.0.2.5&' .
+ 'token=123ABC&summary=Reverting%20vandalism&markbot=1' =>
+ 'apihelp-rollback-example-summary',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Rollback';
+ }
+}
diff --git a/www/wiki/includes/api/ApiRsd.php b/www/wiki/includes/api/ApiRsd.php
new file mode 100644
index 00000000..f20d1c6c
--- /dev/null
+++ b/www/wiki/includes/api/ApiRsd.php
@@ -0,0 +1,167 @@
+<?php
+
+/**
+ * API for MediaWiki 1.17+
+ *
+ * Copyright © 2010 Bryan Tong Minh and Brion Vibber
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module for sending out RSD information
+ * @ingroup API
+ */
+class ApiRsd extends ApiBase {
+
+ public function execute() {
+ $result = $this->getResult();
+
+ $result->addValue( null, 'version', '1.0' );
+ $result->addValue( null, 'xmlns', 'http://archipelago.phrasewise.com/rsd' );
+
+ $service = [
+ 'apis' => $this->formatRsdApiList(),
+ 'engineName' => 'MediaWiki',
+ 'engineLink' => 'https://www.mediawiki.org/',
+ 'homePageLink' => Title::newMainPage()->getCanonicalURL(),
+ ];
+
+ ApiResult::setSubelementsList( $service, [ 'engineName', 'engineLink', 'homePageLink' ] );
+ ApiResult::setIndexedTagName( $service['apis'], 'api' );
+
+ $result->addValue( null, 'service', $service );
+ }
+
+ public function getCustomPrinter() {
+ return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=rsd'
+ => 'apihelp-rsd-example-simple',
+ ];
+ }
+
+ public function isReadMode() {
+ return false;
+ }
+
+ /**
+ * Builds an internal list of APIs to expose information about.
+ * Normally this only lists the MediaWiki API, with its base URL,
+ * link to documentation, and a marker as to available authentication
+ * (to aid in OAuth client apps switching to support in the future).
+ *
+ * Extensions can expose other APIs, such as WordPress or Twitter-
+ * compatible APIs, by hooking 'ApiRsdServiceApis' and adding more
+ * elements to the array.
+ *
+ * See https://cyber.harvard.edu/blogs/gems/tech/rsd.html for
+ * the base RSD spec, and check WordPress and StatusNet sites for
+ * in-production examples listing several blogging and micrblogging
+ * APIs.
+ *
+ * @return array
+ */
+ protected function getRsdApiList() {
+ $apis = [
+ 'MediaWiki' => [
+ // The API link is required for all RSD API entries.
+ 'apiLink' => wfExpandUrl( wfScript( 'api' ), PROTO_CURRENT ),
+
+ // Docs link is optional, but recommended.
+ 'docs' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API',
+
+ // Some APIs may need a blog ID, but it may be left blank.
+ 'blogID' => '',
+
+ // Additional settings are optional.
+ 'settings' => [
+ // Change this to true in the future as an aid to
+ // machine discovery of OAuth for API access.
+ 'OAuth' => false,
+ ]
+ ],
+ ];
+ Hooks::run( 'ApiRsdServiceApis', [ &$apis ] );
+
+ return $apis;
+ }
+
+ /**
+ * Formats the internal list of exposed APIs into an array suitable
+ * to pass to the API's XML formatter.
+ *
+ * @return array
+ */
+ protected function formatRsdApiList() {
+ $apis = $this->getRsdApiList();
+
+ $outputData = [];
+ foreach ( $apis as $name => $info ) {
+ $data = [
+ 'name' => $name,
+ 'preferred' => wfBoolToStr( $name == 'MediaWiki' ),
+ 'apiLink' => $info['apiLink'],
+ 'blogID' => isset( $info['blogID'] ) ? $info['blogID'] : '',
+ ];
+ $settings = [];
+ if ( isset( $info['docs'] ) ) {
+ $settings['docs'] = $info['docs'];
+ ApiResult::setSubelementsList( $settings, 'docs' );
+ }
+ if ( isset( $info['settings'] ) ) {
+ foreach ( $info['settings'] as $setting => $val ) {
+ if ( is_bool( $val ) ) {
+ $xmlVal = wfBoolToStr( $val );
+ } else {
+ $xmlVal = $val;
+ }
+ $setting = [ 'name' => $setting ];
+ ApiResult::setContentValue( $setting, 'value', $xmlVal );
+ $settings[] = $setting;
+ }
+ }
+ if ( count( $settings ) ) {
+ ApiResult::setIndexedTagName( $settings, 'setting' );
+ $data['settings'] = $settings;
+ }
+ $outputData[] = $data;
+ }
+
+ return $outputData;
+ }
+}
+
+class ApiFormatXmlRsd extends ApiFormatXml {
+ public function __construct( ApiMain $main, $format ) {
+ parent::__construct( $main, $format );
+ $this->setRootElement( 'rsd' );
+ }
+
+ public function getMimeType() {
+ return 'application/rsd+xml';
+ }
+
+ public static function recXmlPrint( $name, $value, $indent, $attributes = [] ) {
+ unset( $attributes['_idx'] );
+ return parent::recXmlPrint( $name, $value, $indent, $attributes );
+ }
+}
diff --git a/www/wiki/includes/api/ApiSerializable.php b/www/wiki/includes/api/ApiSerializable.php
new file mode 100644
index 00000000..31d00cc8
--- /dev/null
+++ b/www/wiki/includes/api/ApiSerializable.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Copyright © 2015 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This interface allows for overriding the default conversion applied by
+ * ApiResult::validateValue().
+ *
+ * @note This is currently an informal interface; it need not be explicitly
+ * implemented, as long as the method is provided. This allows for extension
+ * code to maintain compatibility with older MediaWiki while still taking
+ * advantage of this where it exists.
+ *
+ * @ingroup API
+ * @since 1.25
+ */
+interface ApiSerializable {
+ /**
+ * Return the value to be added to ApiResult in place of this object.
+ *
+ * The returned value must not be an object, and must pass
+ * all checks done by ApiResult::validateValue().
+ *
+ * @return mixed
+ */
+ public function serializeForApiResult();
+}
diff --git a/www/wiki/includes/api/ApiSetNotificationTimestamp.php b/www/wiki/includes/api/ApiSetNotificationTimestamp.php
new file mode 100644
index 00000000..f7dc4a78
--- /dev/null
+++ b/www/wiki/includes/api/ApiSetNotificationTimestamp.php
@@ -0,0 +1,251 @@
+<?php
+
+/**
+ * API for MediaWiki 1.14+
+ *
+ * Copyright © 2012 Wikimedia Foundation and contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+use MediaWiki\MediaWikiServices;
+
+/**
+ * API interface for setting the wl_notificationtimestamp field
+ * @ingroup API
+ */
+class ApiSetNotificationTimestamp extends ApiBase {
+
+ private $mPageSet = null;
+
+ public function execute() {
+ $user = $this->getUser();
+
+ if ( $user->isAnon() ) {
+ $this->dieWithError( 'watchlistanontext', 'notloggedin' );
+ }
+ $this->checkUserRightsAny( 'editmywatchlist' );
+
+ $params = $this->extractRequestParams();
+ $this->requireMaxOneParameter( $params, 'timestamp', 'torevid', 'newerthanrevid' );
+
+ $continuationManager = new ApiContinuationManager( $this, [], [] );
+ $this->setContinuationManager( $continuationManager );
+
+ $pageSet = $this->getPageSet();
+ if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-cannotusewith',
+ $this->encodeParamName( 'entirewatchlist' ),
+ $pageSet->encodeParamName( $pageSet->getDataSource() )
+ ],
+ 'multisource'
+ );
+ }
+
+ $dbw = wfGetDB( DB_MASTER, 'api' );
+
+ $timestamp = null;
+ if ( isset( $params['timestamp'] ) ) {
+ $timestamp = $dbw->timestamp( $params['timestamp'] );
+ }
+
+ if ( !$params['entirewatchlist'] ) {
+ $pageSet->execute();
+ }
+
+ if ( isset( $params['torevid'] ) ) {
+ if ( $params['entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) {
+ $this->dieWithError( [ 'apierror-multpages', $this->encodeParamName( 'torevid' ) ] );
+ }
+ $title = reset( $pageSet->getGoodTitles() );
+ if ( $title ) {
+ $timestamp = Revision::getTimestampFromId(
+ $title, $params['torevid'], Revision::READ_LATEST );
+ if ( $timestamp ) {
+ $timestamp = $dbw->timestamp( $timestamp );
+ } else {
+ $timestamp = null;
+ }
+ }
+ } elseif ( isset( $params['newerthanrevid'] ) ) {
+ if ( $params['entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) {
+ $this->dieWithError( [ 'apierror-multpages', $this->encodeParamName( 'newerthanrevid' ) ] );
+ }
+ $title = reset( $pageSet->getGoodTitles() );
+ if ( $title ) {
+ $revid = $title->getNextRevisionID(
+ $params['newerthanrevid'], Title::GAID_FOR_UPDATE );
+ if ( $revid ) {
+ $timestamp = $dbw->timestamp( Revision::getTimestampFromId( $title, $revid ) );
+ } else {
+ $timestamp = null;
+ }
+ }
+ }
+
+ $watchedItemStore = MediaWikiServices::getInstance()->getWatchedItemStore();
+ $apiResult = $this->getResult();
+ $result = [];
+ if ( $params['entirewatchlist'] ) {
+ // Entire watchlist mode: Just update the thing and return a success indicator
+ $watchedItemStore->setNotificationTimestampsForUser(
+ $user,
+ $timestamp
+ );
+
+ $result['notificationtimestamp'] = is_null( $timestamp )
+ ? ''
+ : wfTimestamp( TS_ISO_8601, $timestamp );
+ } else {
+ // First, log the invalid titles
+ foreach ( $pageSet->getInvalidTitlesAndReasons() as $r ) {
+ $r['invalid'] = true;
+ $result[] = $r;
+ }
+ foreach ( $pageSet->getMissingPageIDs() as $p ) {
+ $page = [];
+ $page['pageid'] = $p;
+ $page['missing'] = true;
+ $page['notwatched'] = true;
+ $result[] = $page;
+ }
+ foreach ( $pageSet->getMissingRevisionIDs() as $r ) {
+ $rev = [];
+ $rev['revid'] = $r;
+ $rev['missing'] = true;
+ $rev['notwatched'] = true;
+ $result[] = $rev;
+ }
+
+ if ( $pageSet->getTitles() ) {
+ // Now process the valid titles
+ $watchedItemStore->setNotificationTimestampsForUser(
+ $user,
+ $timestamp,
+ $pageSet->getTitles()
+ );
+
+ // Query the results of our update
+ $timestamps = $watchedItemStore->getNotificationTimestampsBatch(
+ $user,
+ $pageSet->getTitles()
+ );
+
+ // Now, put the valid titles into the result
+ /** @var Title $title */
+ foreach ( $pageSet->getTitles() as $title ) {
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+ $r = [
+ 'ns' => intval( $ns ),
+ 'title' => $title->getPrefixedText(),
+ ];
+ if ( !$title->exists() ) {
+ $r['missing'] = true;
+ if ( $title->isKnown() ) {
+ $r['known'] = true;
+ }
+ }
+ if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) {
+ $r['notificationtimestamp'] = '';
+ if ( $timestamps[$ns][$dbkey] !== null ) {
+ $r['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $timestamps[$ns][$dbkey] );
+ }
+ } else {
+ $r['notwatched'] = true;
+ }
+ $result[] = $r;
+ }
+ }
+
+ ApiResult::setIndexedTagName( $result, 'page' );
+ }
+ $apiResult->addValue( null, $this->getModuleName(), $result );
+
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $apiResult );
+ }
+
+ /**
+ * Get a cached instance of an ApiPageSet object
+ * @return ApiPageSet
+ */
+ private function getPageSet() {
+ if ( $this->mPageSet === null ) {
+ $this->mPageSet = new ApiPageSet( $this );
+ }
+
+ return $this->mPageSet;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $result = [
+ 'entirewatchlist' => [
+ ApiBase::PARAM_TYPE => 'boolean'
+ ],
+ 'timestamp' => [
+ ApiBase::PARAM_TYPE => 'timestamp'
+ ],
+ 'torevid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'newerthanrevid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ if ( $flags ) {
+ $result += $this->getPageSet()->getFinalParams( $flags );
+ }
+
+ return $result;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
+ => 'apihelp-setnotificationtimestamp-example-all',
+ 'action=setnotificationtimestamp&titles=Main_page&token=123ABC'
+ => 'apihelp-setnotificationtimestamp-example-page',
+ 'action=setnotificationtimestamp&titles=Main_page&' .
+ 'timestamp=2012-01-01T00:00:00Z&token=123ABC'
+ => 'apihelp-setnotificationtimestamp-example-pagetimestamp',
+ 'action=setnotificationtimestamp&generator=allpages&gapnamespace=2&token=123ABC'
+ => 'apihelp-setnotificationtimestamp-example-allpages',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:SetNotificationTimestamp';
+ }
+}
diff --git a/www/wiki/includes/api/ApiSetPageLanguage.php b/www/wiki/includes/api/ApiSetPageLanguage.php
new file mode 100644
index 00000000..40826ae3
--- /dev/null
+++ b/www/wiki/includes/api/ApiSetPageLanguage.php
@@ -0,0 +1,145 @@
+<?php
+/**
+ * Copyright © 2017 Justin Du "<justin.d128@gmail.com>"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that facilitates changing the language of a page.
+ * The API equivalent of SpecialPageLanguage.
+ * Requires API write mode to be enabled.
+ *
+ * @ingroup API
+ */
+class ApiSetPageLanguage extends ApiBase {
+ // Check if change language feature is enabled
+ protected function getExtendedDescription() {
+ if ( !$this->getConfig()->get( 'PageLanguageUseDB' ) ) {
+ return 'apihelp-setpagelanguage-extended-description-disabled';
+ }
+ return parent::getExtendedDescription();
+ }
+
+ /**
+ * Extracts the title and language from the request parameters and invokes
+ * the static SpecialPageLanguage::changePageLanguage() function with these as arguments.
+ * If the language change succeeds, the title, old language, and new language
+ * of the article changed, as well as the performer of the language change
+ * are added to the result object.
+ */
+ public function execute() {
+ // Check if change language feature is enabled
+ if ( !$this->getConfig()->get( 'PageLanguageUseDB' ) ) {
+ $this->dieWithError( 'apierror-pagelang-disabled' );
+ }
+
+ // Check if the user has permissions
+ $this->checkUserRightsAny( 'pagelang' );
+
+ $this->useTransactionalTimeLimit();
+
+ $params = $this->extractRequestParams();
+
+ $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
+ if ( !$pageObj->exists() ) {
+ $this->dieWithError( 'apierror-missingtitle' );
+ }
+
+ $titleObj = $pageObj->getTitle();
+ $user = $this->getUser();
+
+ // Check that the user is allowed to edit the page
+ $this->checkTitleUserPermissions( $titleObj, 'edit' );
+
+ // If change tagging was requested, check that the user is allowed to tag,
+ // and the tags are valid
+ if ( $params['tags'] ) {
+ $tagStatus = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$tagStatus->isOK() ) {
+ $this->dieStatus( $tagStatus );
+ }
+ }
+
+ $status = SpecialPageLanguage::changePageLanguage(
+ $this,
+ $titleObj,
+ $params['lang'],
+ $params['reason'] === null ? '' : $params['reason'],
+ $params['tags'] ?: []
+ );
+
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+
+ $r = [
+ 'title' => $titleObj->getPrefixedText(),
+ 'oldlanguage' => $status->value->oldLanguage,
+ 'newlanguage' => $status->value->newLanguage,
+ 'logid' => $status->value->logId
+ ];
+ $this->getResult()->addValue( null, $this->getModuleName(), $r );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => null,
+ 'pageid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'lang' => [
+ ApiBase::PARAM_TYPE => array_merge(
+ [ 'default' ],
+ array_keys( Language::fetchLanguageNames( null, 'mwfile' ) )
+ ),
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'reason' => null,
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=setpagelanguage&title=Main%20Page&lang=eu&token=123ABC'
+ => 'apihelp-setpagelanguage-example-language',
+ 'action=setpagelanguage&pageid=123&lang=default&token=123ABC'
+ => 'apihelp-setpagelanguage-example-default',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:SetPageLanguage';
+ }
+}
diff --git a/www/wiki/includes/api/ApiStashEdit.php b/www/wiki/includes/api/ApiStashEdit.php
new file mode 100644
index 00000000..23163c24
--- /dev/null
+++ b/www/wiki/includes/api/ApiStashEdit.php
@@ -0,0 +1,486 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
+
+/**
+ * Prepare an edit in shared cache so that it can be reused on edit
+ *
+ * This endpoint can be called via AJAX as the user focuses on the edit
+ * summary box. By the time of submission, the parse may have already
+ * finished, and can be immediately used on page save. Certain parser
+ * functions like {{REVISIONID}} or {{CURRENTTIME}} may cause the cache
+ * to not be used on edit. Template and files used are check for changes
+ * since the output was generated. The cache TTL is also kept low for sanity.
+ *
+ * @ingroup API
+ * @since 1.25
+ */
+class ApiStashEdit extends ApiBase {
+ const ERROR_NONE = 'stashed';
+ const ERROR_PARSE = 'error_parse';
+ const ERROR_CACHE = 'error_cache';
+ const ERROR_UNCACHEABLE = 'uncacheable';
+ const ERROR_BUSY = 'busy';
+
+ const PRESUME_FRESH_TTL_SEC = 30;
+ const MAX_CACHE_TTL = 300; // 5 minutes
+ const MAX_SIGNATURE_TTL = 60;
+
+ public function execute() {
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ if ( $user->isBot() ) { // sanity
+ $this->dieWithError( 'apierror-botsnotsupported' );
+ }
+
+ $cache = ObjectCache::getLocalClusterInstance();
+ $page = $this->getTitleOrPageId( $params );
+ $title = $page->getTitle();
+
+ if ( !ContentHandler::getForModelID( $params['contentmodel'] )
+ ->isSupportedFormat( $params['contentformat'] )
+ ) {
+ $this->dieWithError(
+ [ 'apierror-badformat-generic', $params['contentformat'], $params['contentmodel'] ],
+ 'badmodelformat'
+ );
+ }
+
+ $this->requireAtLeastOneParameter( $params, 'stashedtexthash', 'text' );
+
+ $text = null;
+ $textHash = null;
+ if ( strlen( $params['stashedtexthash'] ) ) {
+ // Load from cache since the client indicates the text is the same as last stash
+ $textHash = $params['stashedtexthash'];
+ if ( !preg_match( '/^[0-9a-f]{40}$/', $textHash ) ) {
+ $this->dieWithError( 'apierror-stashedit-missingtext', 'missingtext' );
+ }
+ $textKey = $cache->makeKey( 'stashedit', 'text', $textHash );
+ $text = $cache->get( $textKey );
+ if ( !is_string( $text ) ) {
+ $this->dieWithError( 'apierror-stashedit-missingtext', 'missingtext' );
+ }
+ } elseif ( $params['text'] !== null ) {
+ // Trim and fix newlines so the key SHA1's match (see WebRequest::getText())
+ $text = rtrim( str_replace( "\r\n", "\n", $params['text'] ) );
+ $textHash = sha1( $text );
+ } else {
+ $this->dieWithError( [
+ 'apierror-missingparam-at-least-one-of',
+ Message::listParam( [ '<var>stashedtexthash</var>', '<var>text</var>' ] ),
+ 2,
+ ], 'missingparam' );
+ }
+
+ $textContent = ContentHandler::makeContent(
+ $text, $title, $params['contentmodel'], $params['contentformat'] );
+
+ $page = WikiPage::factory( $title );
+ if ( $page->exists() ) {
+ // Page exists: get the merged content with the proposed change
+ $baseRev = Revision::newFromPageId( $page->getId(), $params['baserevid'] );
+ if ( !$baseRev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $params['baserevid'] ] );
+ }
+ $currentRev = $page->getRevision();
+ if ( !$currentRev ) {
+ $this->dieWithError( [ 'apierror-missingrev-pageid', $page->getId() ], 'missingrev' );
+ }
+ // Merge in the new version of the section to get the proposed version
+ $editContent = $page->replaceSectionAtRev(
+ $params['section'],
+ $textContent,
+ $params['sectiontitle'],
+ $baseRev->getId()
+ );
+ if ( !$editContent ) {
+ $this->dieWithError( 'apierror-sectionreplacefailed', 'replacefailed' );
+ }
+ if ( $currentRev->getId() == $baseRev->getId() ) {
+ // Base revision was still the latest; nothing to merge
+ $content = $editContent;
+ } else {
+ // Merge the edit into the current version
+ $baseContent = $baseRev->getContent();
+ $currentContent = $currentRev->getContent();
+ if ( !$baseContent || !$currentContent ) {
+ $this->dieWithError( [ 'apierror-missingcontent-pageid', $page->getId() ], 'missingrev' );
+ }
+ $handler = ContentHandler::getForModelID( $baseContent->getModel() );
+ $content = $handler->merge3( $baseContent, $editContent, $currentContent );
+ }
+ } else {
+ // New pages: use the user-provided content model
+ $content = $textContent;
+ }
+
+ if ( !$content ) { // merge3() failed
+ $this->getResult()->addValue( null,
+ $this->getModuleName(), [ 'status' => 'editconflict' ] );
+ return;
+ }
+
+ // The user will abort the AJAX request by pressing "save", so ignore that
+ ignore_user_abort( true );
+
+ if ( $user->pingLimiter( 'stashedit' ) ) {
+ $status = 'ratelimited';
+ } else {
+ $status = self::parseAndStash( $page, $content, $user, $params['summary'] );
+ $textKey = $cache->makeKey( 'stashedit', 'text', $textHash );
+ $cache->set( $textKey, $text, self::MAX_CACHE_TTL );
+ }
+
+ $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+ $stats->increment( "editstash.cache_stores.$status" );
+
+ $this->getResult()->addValue(
+ null,
+ $this->getModuleName(),
+ [
+ 'status' => $status,
+ 'texthash' => $textHash
+ ]
+ );
+ }
+
+ /**
+ * @param WikiPage $page
+ * @param Content $content Edit content
+ * @param User $user
+ * @param string $summary Edit summary
+ * @return string ApiStashEdit::ERROR_* constant
+ * @since 1.25
+ */
+ public static function parseAndStash( WikiPage $page, Content $content, User $user, $summary ) {
+ $cache = ObjectCache::getLocalClusterInstance();
+ $logger = LoggerFactory::getInstance( 'StashEdit' );
+
+ $title = $page->getTitle();
+ $key = self::getStashKey( $title, self::getContentHash( $content ), $user );
+
+ // Use the master DB to allow for fast blocking locks on the "save path" where this
+ // value might actually be used to complete a page edit. If the edit submission request
+ // happens before this edit stash requests finishes, then the submission will block until
+ // the stash request finishes parsing. For the lock acquisition below, there is not much
+ // need to duplicate parsing of the same content/user/summary bundle, so try to avoid
+ // blocking at all here.
+ $dbw = wfGetDB( DB_MASTER );
+ if ( !$dbw->lock( $key, __METHOD__, 0 ) ) {
+ // De-duplicate requests on the same key
+ return self::ERROR_BUSY;
+ }
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $unlocker = new ScopedCallback( function () use ( $dbw, $key ) {
+ $dbw->unlock( $key, __METHOD__ );
+ } );
+
+ $cutoffTime = time() - self::PRESUME_FRESH_TTL_SEC;
+
+ // Reuse any freshly build matching edit stash cache
+ $editInfo = $cache->get( $key );
+ if ( $editInfo && wfTimestamp( TS_UNIX, $editInfo->timestamp ) >= $cutoffTime ) {
+ $alreadyCached = true;
+ } else {
+ $format = $content->getDefaultFormat();
+ $editInfo = $page->prepareContentForEdit( $content, null, $user, $format, false );
+ $alreadyCached = false;
+ }
+
+ if ( $editInfo && $editInfo->output ) {
+ // Let extensions add ParserOutput metadata or warm other caches
+ Hooks::run( 'ParserOutputStashForEdit',
+ [ $page, $content, $editInfo->output, $summary, $user ] );
+
+ $titleStr = (string)$title;
+ if ( $alreadyCached ) {
+ $logger->debug( "Already cached parser output for key '{cachekey}' ('{title}').",
+ [ 'cachekey' => $key, 'title' => $titleStr ] );
+ return self::ERROR_NONE;
+ }
+
+ list( $stashInfo, $ttl, $code ) = self::buildStashValue(
+ $editInfo->pstContent,
+ $editInfo->output,
+ $editInfo->timestamp,
+ $user
+ );
+
+ if ( $stashInfo ) {
+ $ok = $cache->set( $key, $stashInfo, $ttl );
+ if ( $ok ) {
+ $logger->debug( "Cached parser output for key '{cachekey}' ('{title}').",
+ [ 'cachekey' => $key, 'title' => $titleStr ] );
+ return self::ERROR_NONE;
+ } else {
+ $logger->error( "Failed to cache parser output for key '{cachekey}' ('{title}').",
+ [ 'cachekey' => $key, 'title' => $titleStr ] );
+ return self::ERROR_CACHE;
+ }
+ } else {
+ $logger->info( "Uncacheable parser output for key '{cachekey}' ('{title}') [{code}].",
+ [ 'cachekey' => $key, 'title' => $titleStr, 'code' => $code ] );
+ return self::ERROR_UNCACHEABLE;
+ }
+ }
+
+ return self::ERROR_PARSE;
+ }
+
+ /**
+ * Check that a prepared edit is in cache and still up-to-date
+ *
+ * This method blocks if the prepared edit is already being rendered,
+ * waiting until rendering finishes before doing final validity checks.
+ *
+ * The cache is rejected if template or file changes are detected.
+ * Note that foreign template or file transclusions are not checked.
+ *
+ * The result is a map (pstContent,output,timestamp) with fields
+ * extracted directly from WikiPage::prepareContentForEdit().
+ *
+ * @param Title $title
+ * @param Content $content
+ * @param User $user User to get parser options from
+ * @return stdClass|bool Returns false on cache miss
+ */
+ public static function checkCache( Title $title, Content $content, User $user ) {
+ if ( $user->isBot() ) {
+ return false; // bots never stash - don't pollute stats
+ }
+
+ $cache = ObjectCache::getLocalClusterInstance();
+ $logger = LoggerFactory::getInstance( 'StashEdit' );
+ $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+
+ $key = self::getStashKey( $title, self::getContentHash( $content ), $user );
+ $editInfo = $cache->get( $key );
+ if ( !is_object( $editInfo ) ) {
+ $start = microtime( true );
+ // We ignore user aborts and keep parsing. Block on any prior parsing
+ // so as to use its results and make use of the time spent parsing.
+ // Skip this logic if there no master connection in case this method
+ // is called on an HTTP GET request for some reason.
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ $dbw = $lb->getAnyOpenConnection( $lb->getWriterIndex() );
+ if ( $dbw && $dbw->lock( $key, __METHOD__, 30 ) ) {
+ $editInfo = $cache->get( $key );
+ $dbw->unlock( $key, __METHOD__ );
+ }
+
+ $timeMs = 1000 * max( 0, microtime( true ) - $start );
+ $stats->timing( 'editstash.lock_wait_time', $timeMs );
+ }
+
+ if ( !is_object( $editInfo ) || !$editInfo->output ) {
+ $stats->increment( 'editstash.cache_misses.no_stash' );
+ $logger->debug( "Empty cache for key '$key' ('$title'); user '{$user->getName()}'." );
+ return false;
+ }
+
+ $age = time() - wfTimestamp( TS_UNIX, $editInfo->output->getCacheTime() );
+ if ( $age <= self::PRESUME_FRESH_TTL_SEC ) {
+ // Assume nothing changed in this time
+ $stats->increment( 'editstash.cache_hits.presumed_fresh' );
+ $logger->debug( "Timestamp-based cache hit for key '$key' (age: $age sec)." );
+ } elseif ( isset( $editInfo->edits ) && $editInfo->edits === $user->getEditCount() ) {
+ // Logged-in user made no local upload/template edits in the meantime
+ $stats->increment( 'editstash.cache_hits.presumed_fresh' );
+ $logger->debug( "Edit count based cache hit for key '$key' (age: $age sec)." );
+ } elseif ( $user->isAnon()
+ && self::lastEditTime( $user ) < $editInfo->output->getCacheTime()
+ ) {
+ // Logged-out user made no local upload/template edits in the meantime
+ $stats->increment( 'editstash.cache_hits.presumed_fresh' );
+ $logger->debug( "Edit check based cache hit for key '$key' (age: $age sec)." );
+ } else {
+ // User may have changed included content
+ $editInfo = false;
+ }
+
+ if ( !$editInfo ) {
+ $stats->increment( 'editstash.cache_misses.proven_stale' );
+ $logger->info( "Stale cache for key '$key'; old key with outside edits. (age: $age sec)" );
+ } elseif ( $editInfo->output->getFlag( 'vary-revision' ) ) {
+ // This can be used for the initial parse, e.g. for filters or doEditContent(),
+ // but a second parse will be triggered in doEditUpdates(). This is not optimal.
+ $logger->info( "Cache for key '$key' ('$title') has vary_revision." );
+ } elseif ( $editInfo->output->getFlag( 'vary-revision-id' ) ) {
+ // Similar to the above if we didn't guess the ID correctly.
+ $logger->info( "Cache for key '$key' ('$title') has vary_revision_id." );
+ }
+
+ return $editInfo;
+ }
+
+ /**
+ * @param User $user
+ * @return string|null TS_MW timestamp or null
+ */
+ private static function lastEditTime( User $user ) {
+ $db = wfGetDB( DB_REPLICA );
+ $actorQuery = ActorMigration::newMigration()->getWhere( $db, 'rc_user', $user, false );
+ $time = $db->selectField(
+ [ 'recentchanges' ] + $actorQuery['tables'],
+ 'MAX(rc_timestamp)',
+ [ $actorQuery['conds'] ],
+ __METHOD__,
+ [],
+ $actorQuery['joins']
+ );
+
+ return wfTimestampOrNull( TS_MW, $time );
+ }
+
+ /**
+ * Get hash of the content, factoring in model/format
+ *
+ * @param Content $content
+ * @return string
+ */
+ private static function getContentHash( Content $content ) {
+ return sha1( implode( "\n", [
+ $content->getModel(),
+ $content->getDefaultFormat(),
+ $content->serialize( $content->getDefaultFormat() )
+ ] ) );
+ }
+
+ /**
+ * Get the temporary prepared edit stash key for a user
+ *
+ * This key can be used for caching prepared edits provided:
+ * - a) The $user was used for PST options
+ * - b) The parser output was made from the PST using cannonical matching options
+ *
+ * @param Title $title
+ * @param string $contentHash Result of getContentHash()
+ * @param User $user User to get parser options from
+ * @return string
+ */
+ private static function getStashKey( Title $title, $contentHash, User $user ) {
+ return ObjectCache::getLocalClusterInstance()->makeKey(
+ 'prepared-edit',
+ md5( $title->getPrefixedDBkey() ),
+ // Account for the edit model/text
+ $contentHash,
+ // Account for user name related variables like signatures
+ md5( $user->getId() . "\n" . $user->getName() )
+ );
+ }
+
+ /**
+ * Build a value to store in memcached based on the PST content and parser output
+ *
+ * This makes a simple version of WikiPage::prepareContentForEdit() as stash info
+ *
+ * @param Content $pstContent Pre-Save transformed content
+ * @param ParserOutput $parserOutput
+ * @param string $timestamp TS_MW
+ * @param User $user
+ * @return array (stash info array, TTL in seconds, info code) or (null, 0, info code)
+ */
+ private static function buildStashValue(
+ Content $pstContent, ParserOutput $parserOutput, $timestamp, User $user
+ ) {
+ // If an item is renewed, mind the cache TTL determined by config and parser functions.
+ // Put an upper limit on the TTL for sanity to avoid extreme template/file staleness.
+ $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
+ $ttl = min( $parserOutput->getCacheExpiry() - $since, self::MAX_CACHE_TTL );
+
+ // Avoid extremely stale user signature timestamps (T84843)
+ if ( $parserOutput->getFlag( 'user-signature' ) ) {
+ $ttl = min( $ttl, self::MAX_SIGNATURE_TTL );
+ }
+
+ if ( $ttl <= 0 ) {
+ return [ null, 0, 'no_ttl' ];
+ }
+
+ // Only store what is actually needed
+ $stashInfo = (object)[
+ 'pstContent' => $pstContent,
+ 'output' => $parserOutput,
+ 'timestamp' => $timestamp,
+ 'edits' => $user->getEditCount()
+ ];
+
+ return [ $stashInfo, $ttl, 'ok' ];
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'section' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'sectiontitle' => [
+ ApiBase::PARAM_TYPE => 'string'
+ ],
+ 'text' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ApiBase::PARAM_DFLT => null
+ ],
+ 'stashedtexthash' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_DFLT => null
+ ],
+ 'summary' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'contentmodel' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'contentformat' => [
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'baserevid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_REQUIRED => true
+ ]
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function isInternal() {
+ return true;
+ }
+}
diff --git a/www/wiki/includes/api/ApiTag.php b/www/wiki/includes/api/ApiTag.php
new file mode 100644
index 00000000..c9f6db39
--- /dev/null
+++ b/www/wiki/includes/api/ApiTag.php
@@ -0,0 +1,192 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ * @since 1.25
+ */
+class ApiTag extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $user = $this->getUser();
+
+ // make sure the user is allowed
+ $this->checkUserRightsAny( 'changetags' );
+
+ if ( $user->isBlocked() ) {
+ $this->dieBlocked( $user->getBlock() );
+ }
+
+ // Check if user can add tags
+ if ( $params['tags'] ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ // validate and process each revid, rcid and logid
+ $this->requireAtLeastOneParameter( $params, 'revid', 'rcid', 'logid' );
+ $ret = [];
+ if ( $params['revid'] ) {
+ foreach ( $params['revid'] as $id ) {
+ $ret[] = $this->processIndividual( 'revid', $params, $id );
+ }
+ }
+ if ( $params['rcid'] ) {
+ foreach ( $params['rcid'] as $id ) {
+ $ret[] = $this->processIndividual( 'rcid', $params, $id );
+ }
+ }
+ if ( $params['logid'] ) {
+ foreach ( $params['logid'] as $id ) {
+ $ret[] = $this->processIndividual( 'logid', $params, $id );
+ }
+ }
+
+ ApiResult::setIndexedTagName( $ret, 'result' );
+ $this->getResult()->addValue( null, $this->getModuleName(), $ret );
+ }
+
+ protected static function validateLogId( $logid ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $result = $dbr->selectField( 'logging', 'log_id', [ 'log_id' => $logid ],
+ __METHOD__ );
+ return (bool)$result;
+ }
+
+ protected function processIndividual( $type, $params, $id ) {
+ $idResult = [ $type => $id ];
+
+ // validate the ID
+ $valid = false;
+ switch ( $type ) {
+ case 'rcid':
+ $valid = RecentChange::newFromId( $id );
+ break;
+ case 'revid':
+ $valid = Revision::newFromId( $id );
+ break;
+ case 'logid':
+ $valid = self::validateLogId( $id );
+ break;
+ }
+
+ if ( !$valid ) {
+ $idResult['status'] = 'error';
+ // Messages: apierror-nosuchrcid apierror-nosuchrevid apierror-nosuchlogid
+ $idResult += $this->getErrorFormatter()->formatMessage( [ "apierror-nosuch$type", $id ] );
+ return $idResult;
+ }
+
+ $status = ChangeTags::updateTagsWithChecks( $params['add'],
+ $params['remove'],
+ ( $type === 'rcid' ? $id : null ),
+ ( $type === 'revid' ? $id : null ),
+ ( $type === 'logid' ? $id : null ),
+ null,
+ $params['reason'],
+ $this->getUser() );
+
+ if ( !$status->isOK() ) {
+ if ( $status->hasMessage( 'actionthrottledtext' ) ) {
+ $idResult['status'] = 'skipped';
+ } else {
+ $idResult['status'] = 'failure';
+ $idResult['errors'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'error' );
+ }
+ } else {
+ $idResult['status'] = 'success';
+ if ( is_null( $status->value->logId ) ) {
+ $idResult['noop'] = true;
+ } else {
+ $idResult['actionlogid'] = $status->value->logId;
+ $idResult['added'] = $status->value->addedTags;
+ ApiResult::setIndexedTagName( $idResult['added'], 't' );
+ $idResult['removed'] = $status->value->removedTags;
+ ApiResult::setIndexedTagName( $idResult['removed'], 't' );
+
+ if ( $params['tags'] ) {
+ ChangeTags::addTags( $params['tags'], null, null, $status->value->logId );
+ }
+ }
+ }
+ return $idResult;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'rcid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'revid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'logid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'add' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'remove' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'reason' => [
+ ApiBase::PARAM_DFLT => '',
+ ],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=tag&revid=123&add=vandalism&token=123ABC'
+ => 'apihelp-tag-example-rev',
+ 'action=tag&logid=123&remove=spam&reason=Wrongly+applied&token=123ABC'
+ => 'apihelp-tag-example-log',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tag';
+ }
+}
diff --git a/www/wiki/includes/api/ApiTokens.php b/www/wiki/includes/api/ApiTokens.php
new file mode 100644
index 00000000..ff1914c8
--- /dev/null
+++ b/www/wiki/includes/api/ApiTokens.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Copyright © 2011 John Du Hart john@johnduhart.me
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @deprecated since 1.24
+ * @ingroup API
+ */
+class ApiTokens extends ApiBase {
+
+ public function execute() {
+ $this->addDeprecation(
+ [ 'apiwarn-deprecation-withreplacement', 'action=tokens', 'action=query&meta=tokens' ],
+ 'action=tokens'
+ );
+
+ $params = $this->extractRequestParams();
+ $res = [
+ ApiResult::META_TYPE => 'assoc',
+ ];
+
+ $types = $this->getTokenTypes();
+ foreach ( $params['type'] as $type ) {
+ $val = call_user_func( $types[$type], null, null );
+
+ if ( $val === false ) {
+ $this->addWarning( [ 'apiwarn-tokennotallowed', $type ] );
+ } else {
+ $res[$type . 'token'] = $val;
+ }
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $res );
+ }
+
+ private function getTokenTypes() {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ return [];
+ }
+
+ static $types = null;
+ if ( $types ) {
+ return $types;
+ }
+ $types = [ 'patrol' => [ ApiQueryRecentChanges::class, 'getPatrolToken' ] ];
+ $names = [ 'edit', 'delete', 'protect', 'move', 'block', 'unblock',
+ 'email', 'import', 'watch', 'options' ];
+ foreach ( $names as $name ) {
+ $types[$name] = [ ApiQueryInfo::class, 'get' . ucfirst( $name ) . 'Token' ];
+ }
+ Hooks::run( 'ApiTokensGetTokenTypes', [ &$types ] );
+
+ // For forwards-compat, copy any token types from ApiQueryTokens that
+ // we don't already have something for.
+ $user = $this->getUser();
+ $request = $this->getRequest();
+ foreach ( ApiQueryTokens::getTokenTypeSalts() as $name => $salt ) {
+ if ( !isset( $types[$name] ) ) {
+ $types[$name] = function () use ( $salt, $user, $request ) {
+ return ApiQueryTokens::getToken( $user, $request->getSession(), $salt )->toString();
+ };
+ }
+ }
+
+ ksort( $types );
+
+ return $types;
+ }
+
+ public function isDeprecated() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'type' => [
+ ApiBase::PARAM_DFLT => 'edit',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => array_keys( $this->getTokenTypes() ),
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=tokens'
+ => 'apihelp-tokens-example-edit',
+ 'action=tokens&type=email|move'
+ => 'apihelp-tokens-example-emailmove',
+ ];
+ }
+}
diff --git a/www/wiki/includes/api/ApiUnblock.php b/www/wiki/includes/api/ApiUnblock.php
new file mode 100644
index 00000000..b748cb32
--- /dev/null
+++ b/www/wiki/includes/api/ApiUnblock.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that facilitates the unblocking of users. Requires API write mode
+ * to be enabled.
+ *
+ * @ingroup API
+ */
+class ApiUnblock extends ApiBase {
+
+ /**
+ * Unblocks the specified user or provides the reason the unblock failed.
+ */
+ public function execute() {
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ $this->requireOnlyOneParameter( $params, 'id', 'user', 'userid' );
+
+ if ( !$user->isAllowed( 'block' ) ) {
+ $this->dieWithError( 'apierror-permissiondenied-unblock', 'permissiondenied' );
+ }
+ # T17810: blocked admins should have limited access here
+ if ( $user->isBlocked() ) {
+ $status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
+ if ( $status !== true ) {
+ $this->dieWithError(
+ $status,
+ null,
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
+ );
+ }
+ }
+
+ // Check if user can add tags
+ if ( !is_null( $params['tags'] ) ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ if ( $params['userid'] !== null ) {
+ $username = User::whoIs( $params['userid'] );
+
+ if ( $username === false ) {
+ $this->dieWithError( [ 'apierror-nosuchuserid', $params['userid'] ], 'nosuchuserid' );
+ } else {
+ $params['user'] = $username;
+ }
+ }
+
+ $data = [
+ 'Target' => is_null( $params['id'] ) ? $params['user'] : "#{$params['id']}",
+ 'Reason' => $params['reason'],
+ 'Tags' => $params['tags']
+ ];
+ $block = Block::newFromTarget( $data['Target'] );
+ $retval = SpecialUnblock::processUnblock( $data, $this->getContext() );
+ if ( $retval !== true ) {
+ $this->dieStatus( $this->errorArrayToStatus( $retval ) );
+ }
+
+ $res['id'] = $block->getId();
+ $target = $block->getType() == Block::TYPE_AUTO ? '' : $block->getTarget();
+ $res['user'] = $target instanceof User ? $target->getName() : $target;
+ $res['userid'] = $target instanceof User ? $target->getId() : 0;
+ $res['reason'] = $params['reason'];
+ $this->getResult()->addValue( null, $this->getModuleName(), $res );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'id' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'user' => null,
+ 'userid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
+ 'reason' => '',
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=unblock&id=105'
+ => 'apihelp-unblock-example-id',
+ 'action=unblock&user=Bob&reason=Sorry%20Bob'
+ => 'apihelp-unblock-example-user',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Block';
+ }
+}
diff --git a/www/wiki/includes/api/ApiUndelete.php b/www/wiki/includes/api/ApiUndelete.php
new file mode 100644
index 00000000..ee5c3a2f
--- /dev/null
+++ b/www/wiki/includes/api/ApiUndelete.php
@@ -0,0 +1,149 @@
+<?php
+/**
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiUndelete extends ApiBase {
+
+ public function execute() {
+ $this->useTransactionalTimeLimit();
+
+ $params = $this->extractRequestParams();
+
+ $user = $this->getUser();
+ if ( $user->isBlocked() ) {
+ $this->dieBlocked( $user->getBlock() );
+ }
+
+ $titleObj = Title::newFromText( $params['title'] );
+ if ( !$titleObj || $titleObj->isExternal() ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+
+ if ( !$titleObj->userCan( 'undelete', $user, 'secure' ) ) {
+ $this->dieWithError( 'permdenied-undelete' );
+ }
+
+ // Check if user can add tags
+ if ( !is_null( $params['tags'] ) ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ // Convert timestamps
+ if ( !isset( $params['timestamps'] ) ) {
+ $params['timestamps'] = [];
+ }
+ if ( !is_array( $params['timestamps'] ) ) {
+ $params['timestamps'] = [ $params['timestamps'] ];
+ }
+ foreach ( $params['timestamps'] as $i => $ts ) {
+ $params['timestamps'][$i] = wfTimestamp( TS_MW, $ts );
+ }
+
+ $pa = new PageArchive( $titleObj, $this->getConfig() );
+ $retval = $pa->undelete(
+ ( isset( $params['timestamps'] ) ? $params['timestamps'] : [] ),
+ $params['reason'],
+ $params['fileids'],
+ false,
+ $user,
+ $params['tags']
+ );
+ if ( !is_array( $retval ) ) {
+ $this->dieWithError( 'apierror-cantundelete' );
+ }
+
+ if ( $retval[1] ) {
+ Hooks::run( 'FileUndeleteComplete',
+ [ $titleObj, $params['fileids'], $this->getUser(), $params['reason'] ] );
+ }
+
+ $this->setWatch( $params['watchlist'], $titleObj );
+
+ $info['title'] = $titleObj->getPrefixedText();
+ $info['revisions'] = intval( $retval[0] );
+ $info['fileversions'] = intval( $retval[1] );
+ $info['reason'] = $retval[2];
+ $this->getResult()->addValue( null, $this->getModuleName(), $info );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'reason' => '',
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'timestamps' => [
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'fileids' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'watchlist' => [
+ ApiBase::PARAM_DFLT => 'preferences',
+ ApiBase::PARAM_TYPE => [
+ 'watch',
+ 'unwatch',
+ 'preferences',
+ 'nochange'
+ ],
+ ],
+ ];
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page'
+ => 'apihelp-undelete-example-page',
+ 'action=undelete&title=Main%20Page&token=123ABC' .
+ '&timestamps=2007-07-03T22:00:45Z|2007-07-02T19:48:56Z'
+ => 'apihelp-undelete-example-revisions',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Undelete';
+ }
+}
diff --git a/www/wiki/includes/api/ApiUpload.php b/www/wiki/includes/api/ApiUpload.php
new file mode 100644
index 00000000..93e432b9
--- /dev/null
+++ b/www/wiki/includes/api/ApiUpload.php
@@ -0,0 +1,929 @@
+<?php
+/**
+ * Copyright © 2008 - 2010 Bryan Tong Minh <Bryan.TongMinh@Gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiUpload extends ApiBase {
+ /** @var UploadBase|UploadFromChunks */
+ protected $mUpload = null;
+
+ protected $mParams;
+
+ public function execute() {
+ // Check whether upload is enabled
+ if ( !UploadBase::isEnabled() ) {
+ $this->dieWithError( 'uploaddisabled' );
+ }
+
+ $user = $this->getUser();
+
+ // Parameter handling
+ $this->mParams = $this->extractRequestParams();
+ $request = $this->getMain()->getRequest();
+ // Check if async mode is actually supported (jobs done in cli mode)
+ $this->mParams['async'] = ( $this->mParams['async'] &&
+ $this->getConfig()->get( 'EnableAsyncUploads' ) );
+ // Add the uploaded file to the params array
+ $this->mParams['file'] = $request->getFileName( 'file' );
+ $this->mParams['chunk'] = $request->getFileName( 'chunk' );
+
+ // Copy the session key to the file key, for backward compatibility.
+ if ( !$this->mParams['filekey'] && $this->mParams['sessionkey'] ) {
+ $this->mParams['filekey'] = $this->mParams['sessionkey'];
+ }
+
+ // Select an upload module
+ try {
+ if ( !$this->selectUploadModule() ) {
+ return; // not a true upload, but a status request or similar
+ } elseif ( !isset( $this->mUpload ) ) {
+ $this->dieDebug( __METHOD__, 'No upload module set' );
+ }
+ } catch ( UploadStashException $e ) { // XXX: don't spam exception log
+ $this->dieStatus( $this->handleStashException( $e ) );
+ }
+
+ // First check permission to upload
+ $this->checkPermissions( $user );
+
+ // Fetch the file (usually a no-op)
+ /** @var Status $status */
+ $status = $this->mUpload->fetchFile();
+ if ( !$status->isGood() ) {
+ $this->dieStatus( $status );
+ }
+
+ // Check if the uploaded file is sane
+ if ( $this->mParams['chunk'] ) {
+ $maxSize = UploadBase::getMaxUploadSize();
+ if ( $this->mParams['filesize'] > $maxSize ) {
+ $this->dieWithError( 'file-too-large' );
+ }
+ if ( !$this->mUpload->getTitle() ) {
+ $this->dieWithError( 'illegal-filename' );
+ }
+ } elseif ( $this->mParams['async'] && $this->mParams['filekey'] ) {
+ // defer verification to background process
+ } else {
+ wfDebug( __METHOD__ . " about to verify\n" );
+ $this->verifyUpload();
+ }
+
+ // Check if the user has the rights to modify or overwrite the requested title
+ // (This check is irrelevant if stashing is already requested, since the errors
+ // can always be fixed by changing the title)
+ if ( !$this->mParams['stash'] ) {
+ $permErrors = $this->mUpload->verifyTitlePermissions( $user );
+ if ( $permErrors !== true ) {
+ $this->dieRecoverableError( $permErrors, 'filename' );
+ }
+ }
+
+ // Get the result based on the current upload context:
+ try {
+ $result = $this->getContextResult();
+ } catch ( UploadStashException $e ) { // XXX: don't spam exception log
+ $this->dieStatus( $this->handleStashException( $e ) );
+ }
+ $this->getResult()->addValue( null, $this->getModuleName(), $result );
+
+ // Add 'imageinfo' in a separate addValue() call. File metadata can be unreasonably large,
+ // so otherwise when it exceeded $wgAPIMaxResultSize, no result would be returned (T143993).
+ if ( $result['result'] === 'Success' ) {
+ $imageinfo = $this->mUpload->getImageInfo( $this->getResult() );
+ $this->getResult()->addValue( $this->getModuleName(), 'imageinfo', $imageinfo );
+ }
+
+ // Cleanup any temporary mess
+ $this->mUpload->cleanupTempFile();
+ }
+
+ /**
+ * Get an upload result based on upload context
+ * @return array
+ */
+ private function getContextResult() {
+ $warnings = $this->getApiWarnings();
+ if ( $warnings && !$this->mParams['ignorewarnings'] ) {
+ // Get warnings formatted in result array format
+ return $this->getWarningsResult( $warnings );
+ } elseif ( $this->mParams['chunk'] ) {
+ // Add chunk, and get result
+ return $this->getChunkResult( $warnings );
+ } elseif ( $this->mParams['stash'] ) {
+ // Stash the file and get stash result
+ return $this->getStashResult( $warnings );
+ }
+
+ // Check throttle after we've handled warnings
+ if ( UploadBase::isThrottled( $this->getUser() )
+ ) {
+ $this->dieWithError( 'apierror-ratelimited' );
+ }
+
+ // This is the most common case -- a normal upload with no warnings
+ // performUpload will return a formatted properly for the API with status
+ return $this->performUpload( $warnings );
+ }
+
+ /**
+ * Get Stash Result, throws an exception if the file could not be stashed.
+ * @param array $warnings Array of Api upload warnings
+ * @return array
+ */
+ private function getStashResult( $warnings ) {
+ $result = [];
+ $result['result'] = 'Success';
+ if ( $warnings && count( $warnings ) > 0 ) {
+ $result['warnings'] = $warnings;
+ }
+ // Some uploads can request they be stashed, so as not to publish them immediately.
+ // In this case, a failure to stash ought to be fatal
+ $this->performStash( 'critical', $result );
+
+ return $result;
+ }
+
+ /**
+ * Get Warnings Result
+ * @param array $warnings Array of Api upload warnings
+ * @return array
+ */
+ private function getWarningsResult( $warnings ) {
+ $result = [];
+ $result['result'] = 'Warning';
+ $result['warnings'] = $warnings;
+ // in case the warnings can be fixed with some further user action, let's stash this upload
+ // and return a key they can use to restart it
+ $this->performStash( 'optional', $result );
+
+ return $result;
+ }
+
+ /**
+ * Get the result of a chunk upload.
+ * @param array $warnings Array of Api upload warnings
+ * @return array
+ */
+ private function getChunkResult( $warnings ) {
+ $result = [];
+
+ if ( $warnings && count( $warnings ) > 0 ) {
+ $result['warnings'] = $warnings;
+ }
+
+ $request = $this->getMain()->getRequest();
+ $chunkPath = $request->getFileTempname( 'chunk' );
+ $chunkSize = $request->getUpload( 'chunk' )->getSize();
+ $totalSoFar = $this->mParams['offset'] + $chunkSize;
+ $minChunkSize = $this->getConfig()->get( 'MinUploadChunkSize' );
+
+ // Sanity check sizing
+ if ( $totalSoFar > $this->mParams['filesize'] ) {
+ $this->dieWithError( 'apierror-invalid-chunk' );
+ }
+
+ // Enforce minimum chunk size
+ if ( $totalSoFar != $this->mParams['filesize'] && $chunkSize < $minChunkSize ) {
+ $this->dieWithError( [ 'apierror-chunk-too-small', Message::numParam( $minChunkSize ) ] );
+ }
+
+ if ( $this->mParams['offset'] == 0 ) {
+ $filekey = $this->performStash( 'critical' );
+ } else {
+ $filekey = $this->mParams['filekey'];
+
+ // Don't allow further uploads to an already-completed session
+ $progress = UploadBase::getSessionStatus( $this->getUser(), $filekey );
+ if ( !$progress ) {
+ // Probably can't get here, but check anyway just in case
+ $this->dieWithError( 'apierror-stashfailed-nosession', 'stashfailed' );
+ } elseif ( $progress['result'] !== 'Continue' || $progress['stage'] !== 'uploading' ) {
+ $this->dieWithError( 'apierror-stashfailed-complete', 'stashfailed' );
+ }
+
+ $status = $this->mUpload->addChunk(
+ $chunkPath, $chunkSize, $this->mParams['offset'] );
+ if ( !$status->isGood() ) {
+ $extradata = [
+ 'offset' => $this->mUpload->getOffset(),
+ ];
+
+ $this->dieStatusWithCode( $status, 'stashfailed', $extradata );
+ }
+ }
+
+ // Check we added the last chunk:
+ if ( $totalSoFar == $this->mParams['filesize'] ) {
+ if ( $this->mParams['async'] ) {
+ UploadBase::setSessionStatus(
+ $this->getUser(),
+ $filekey,
+ [ 'result' => 'Poll',
+ 'stage' => 'queued', 'status' => Status::newGood() ]
+ );
+ JobQueueGroup::singleton()->push( new AssembleUploadChunksJob(
+ Title::makeTitle( NS_FILE, $filekey ),
+ [
+ 'filename' => $this->mParams['filename'],
+ 'filekey' => $filekey,
+ 'session' => $this->getContext()->exportSession()
+ ]
+ ) );
+ $result['result'] = 'Poll';
+ $result['stage'] = 'queued';
+ } else {
+ $status = $this->mUpload->concatenateChunks();
+ if ( !$status->isGood() ) {
+ UploadBase::setSessionStatus(
+ $this->getUser(),
+ $filekey,
+ [ 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status ]
+ );
+ $this->dieStatusWithCode( $status, 'stashfailed' );
+ }
+
+ // We can only get warnings like 'duplicate' after concatenating the chunks
+ $warnings = $this->getApiWarnings();
+ if ( $warnings ) {
+ $result['warnings'] = $warnings;
+ }
+
+ // The fully concatenated file has a new filekey. So remove
+ // the old filekey and fetch the new one.
+ UploadBase::setSessionStatus( $this->getUser(), $filekey, false );
+ $this->mUpload->stash->removeFile( $filekey );
+ $filekey = $this->mUpload->getStashFile()->getFileKey();
+
+ $result['result'] = 'Success';
+ }
+ } else {
+ UploadBase::setSessionStatus(
+ $this->getUser(),
+ $filekey,
+ [
+ 'result' => 'Continue',
+ 'stage' => 'uploading',
+ 'offset' => $totalSoFar,
+ 'status' => Status::newGood(),
+ ]
+ );
+ $result['result'] = 'Continue';
+ $result['offset'] = $totalSoFar;
+ }
+
+ $result['filekey'] = $filekey;
+
+ return $result;
+ }
+
+ /**
+ * Stash the file and add the file key, or error information if it fails, to the data.
+ *
+ * @param string $failureMode What to do on failure to stash:
+ * - When 'critical', use dieStatus() to produce an error response and throw an exception.
+ * Use this when stashing the file was the primary purpose of the API request.
+ * - When 'optional', only add a 'stashfailed' key to the data and return null.
+ * Use this when some error happened for a non-stash upload and we're stashing the file
+ * only to save the client the trouble of re-uploading it.
+ * @param array &$data API result to which to add the information
+ * @return string|null File key
+ */
+ private function performStash( $failureMode, &$data = null ) {
+ $isPartial = (bool)$this->mParams['chunk'];
+ try {
+ $status = $this->mUpload->tryStashFile( $this->getUser(), $isPartial );
+
+ if ( $status->isGood() && !$status->getValue() ) {
+ // Not actually a 'good' status...
+ $status->fatal( new ApiMessage( 'apierror-stashinvalidfile', 'stashfailed' ) );
+ }
+ } catch ( Exception $e ) {
+ $debugMessage = 'Stashing temporary file failed: ' . get_class( $e ) . ' ' . $e->getMessage();
+ wfDebug( __METHOD__ . ' ' . $debugMessage . "\n" );
+ $status = Status::newFatal( $this->getErrorFormatter()->getMessageFromException(
+ $e, [ 'wrap' => new ApiMessage( 'apierror-stashexception', 'stashfailed' ) ]
+ ) );
+ }
+
+ if ( $status->isGood() ) {
+ $stashFile = $status->getValue();
+ $data['filekey'] = $stashFile->getFileKey();
+ // Backwards compatibility
+ $data['sessionkey'] = $data['filekey'];
+ return $data['filekey'];
+ }
+
+ if ( $status->getMessage()->getKey() === 'uploadstash-exception' ) {
+ // The exceptions thrown by upload stash code and pretty silly and UploadBase returns poor
+ // Statuses for it. Just extract the exception details and parse them ourselves.
+ list( $exceptionType, $message ) = $status->getMessage()->getParams();
+ $debugMessage = 'Stashing temporary file failed: ' . $exceptionType . ' ' . $message;
+ wfDebug( __METHOD__ . ' ' . $debugMessage . "\n" );
+ }
+
+ // Bad status
+ if ( $failureMode !== 'optional' ) {
+ $this->dieStatus( $status );
+ } else {
+ $data['stasherrors'] = $this->getErrorFormatter()->arrayFromStatus( $status );
+ return null;
+ }
+ }
+
+ /**
+ * Throw an error that the user can recover from by providing a better
+ * value for $parameter
+ *
+ * @param array $errors Array of Message objects, message keys, key+param
+ * arrays, or StatusValue::getErrors()-style arrays
+ * @param string|null $parameter Parameter that needs revising
+ * @throws ApiUsageException
+ */
+ private function dieRecoverableError( $errors, $parameter = null ) {
+ $this->performStash( 'optional', $data );
+
+ if ( $parameter ) {
+ $data['invalidparameter'] = $parameter;
+ }
+
+ $sv = StatusValue::newGood();
+ foreach ( $errors as $error ) {
+ $msg = ApiMessage::create( $error );
+ $msg->setApiData( $msg->getApiData() + $data );
+ $sv->fatal( $msg );
+ }
+ $this->dieStatus( $sv );
+ }
+
+ /**
+ * Like dieStatus(), but always uses $overrideCode for the error code, unless the code comes from
+ * IApiMessage.
+ *
+ * @param Status $status
+ * @param string $overrideCode Error code to use if there isn't one from IApiMessage
+ * @param array|null $moreExtraData
+ * @throws ApiUsageException
+ */
+ public function dieStatusWithCode( $status, $overrideCode, $moreExtraData = null ) {
+ $sv = StatusValue::newGood();
+ foreach ( $status->getErrors() as $error ) {
+ $msg = ApiMessage::create( $error, $overrideCode );
+ if ( $moreExtraData ) {
+ $msg->setApiData( $msg->getApiData() + $moreExtraData );
+ }
+ $sv->fatal( $msg );
+ }
+ $this->dieStatus( $sv );
+ }
+
+ /**
+ * Select an upload module and set it to mUpload. Dies on failure. If the
+ * request was a status request and not a true upload, returns false;
+ * otherwise true
+ *
+ * @return bool
+ */
+ protected function selectUploadModule() {
+ $request = $this->getMain()->getRequest();
+
+ // chunk or one and only one of the following parameters is needed
+ if ( !$this->mParams['chunk'] ) {
+ $this->requireOnlyOneParameter( $this->mParams,
+ 'filekey', 'file', 'url' );
+ }
+
+ // Status report for "upload to stash"/"upload from stash"
+ if ( $this->mParams['filekey'] && $this->mParams['checkstatus'] ) {
+ $progress = UploadBase::getSessionStatus( $this->getUser(), $this->mParams['filekey'] );
+ if ( !$progress ) {
+ $this->dieWithError( 'api-upload-missingresult', 'missingresult' );
+ } elseif ( !$progress['status']->isGood() ) {
+ $this->dieStatusWithCode( $progress['status'], 'stashfailed' );
+ }
+ if ( isset( $progress['status']->value['verification'] ) ) {
+ $this->checkVerification( $progress['status']->value['verification'] );
+ }
+ if ( isset( $progress['status']->value['warnings'] ) ) {
+ $warnings = $this->transformWarnings( $progress['status']->value['warnings'] );
+ if ( $warnings ) {
+ $progress['warnings'] = $warnings;
+ }
+ }
+ unset( $progress['status'] ); // remove Status object
+ $imageinfo = null;
+ if ( isset( $progress['imageinfo'] ) ) {
+ $imageinfo = $progress['imageinfo'];
+ unset( $progress['imageinfo'] );
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $progress );
+ // Add 'imageinfo' in a separate addValue() call. File metadata can be unreasonably large,
+ // so otherwise when it exceeded $wgAPIMaxResultSize, no result would be returned (T143993).
+ if ( $imageinfo ) {
+ $this->getResult()->addValue( $this->getModuleName(), 'imageinfo', $imageinfo );
+ }
+
+ return false;
+ }
+
+ // The following modules all require the filename parameter to be set
+ if ( is_null( $this->mParams['filename'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'filename' ] );
+ }
+
+ if ( $this->mParams['chunk'] ) {
+ // Chunk upload
+ $this->mUpload = new UploadFromChunks( $this->getUser() );
+ if ( isset( $this->mParams['filekey'] ) ) {
+ if ( $this->mParams['offset'] === 0 ) {
+ $this->dieWithError( 'apierror-upload-filekeynotallowed', 'filekeynotallowed' );
+ }
+
+ // handle new chunk
+ $this->mUpload->continueChunks(
+ $this->mParams['filename'],
+ $this->mParams['filekey'],
+ $request->getUpload( 'chunk' )
+ );
+ } else {
+ if ( $this->mParams['offset'] !== 0 ) {
+ $this->dieWithError( 'apierror-upload-filekeyneeded', 'filekeyneeded' );
+ }
+
+ // handle first chunk
+ $this->mUpload->initialize(
+ $this->mParams['filename'],
+ $request->getUpload( 'chunk' )
+ );
+ }
+ } elseif ( isset( $this->mParams['filekey'] ) ) {
+ // Upload stashed in a previous request
+ if ( !UploadFromStash::isValidKey( $this->mParams['filekey'] ) ) {
+ $this->dieWithError( 'apierror-invalid-file-key' );
+ }
+
+ $this->mUpload = new UploadFromStash( $this->getUser() );
+ // This will not download the temp file in initialize() in async mode.
+ // We still have enough information to call checkWarnings() and such.
+ $this->mUpload->initialize(
+ $this->mParams['filekey'], $this->mParams['filename'], !$this->mParams['async']
+ );
+ } elseif ( isset( $this->mParams['file'] ) ) {
+ // Can't async upload directly from a POSTed file, we'd have to
+ // stash the file and then queue the publish job. The user should
+ // just submit the two API queries to perform those two steps.
+ if ( $this->mParams['async'] ) {
+ $this->dieWithError( 'apierror-cannot-async-upload-file' );
+ }
+
+ $this->mUpload = new UploadFromFile();
+ $this->mUpload->initialize(
+ $this->mParams['filename'],
+ $request->getUpload( 'file' )
+ );
+ } elseif ( isset( $this->mParams['url'] ) ) {
+ // Make sure upload by URL is enabled:
+ if ( !UploadFromUrl::isEnabled() ) {
+ $this->dieWithError( 'copyuploaddisabled' );
+ }
+
+ if ( !UploadFromUrl::isAllowedHost( $this->mParams['url'] ) ) {
+ $this->dieWithError( 'apierror-copyuploadbaddomain' );
+ }
+
+ if ( !UploadFromUrl::isAllowedUrl( $this->mParams['url'] ) ) {
+ $this->dieWithError( 'apierror-copyuploadbadurl' );
+ }
+
+ $this->mUpload = new UploadFromUrl;
+ $this->mUpload->initialize( $this->mParams['filename'],
+ $this->mParams['url'] );
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks that the user has permissions to perform this upload.
+ * Dies with usage message on inadequate permissions.
+ * @param User $user The user to check.
+ */
+ protected function checkPermissions( $user ) {
+ // Check whether the user has the appropriate permissions to upload anyway
+ $permission = $this->mUpload->isAllowed( $user );
+
+ if ( $permission !== true ) {
+ if ( !$user->isLoggedIn() ) {
+ $this->dieWithError( [ 'apierror-mustbeloggedin', $this->msg( 'action-upload' ) ] );
+ }
+
+ $this->dieStatus( User::newFatalPermissionDeniedStatus( $permission ) );
+ }
+
+ // Check blocks
+ if ( $user->isBlocked() ) {
+ $this->dieBlocked( $user->getBlock() );
+ }
+
+ // Global blocks
+ if ( $user->isBlockedGlobally() ) {
+ $this->dieBlocked( $user->getGlobalBlock() );
+ }
+ }
+
+ /**
+ * Performs file verification, dies on error.
+ */
+ protected function verifyUpload() {
+ $verification = $this->mUpload->verifyUpload();
+ if ( $verification['status'] === UploadBase::OK ) {
+ return;
+ }
+
+ $this->checkVerification( $verification );
+ }
+
+ /**
+ * Performs file verification, dies on error.
+ * @param array $verification
+ */
+ protected function checkVerification( array $verification ) {
+ switch ( $verification['status'] ) {
+ // Recoverable errors
+ case UploadBase::MIN_LENGTH_PARTNAME:
+ $this->dieRecoverableError( [ 'filename-tooshort' ], 'filename' );
+ break;
+ case UploadBase::ILLEGAL_FILENAME:
+ $this->dieRecoverableError(
+ [ ApiMessage::create(
+ 'illegal-filename', null, [ 'filename' => $verification['filtered'] ]
+ ) ], 'filename'
+ );
+ break;
+ case UploadBase::FILENAME_TOO_LONG:
+ $this->dieRecoverableError( [ 'filename-toolong' ], 'filename' );
+ break;
+ case UploadBase::FILETYPE_MISSING:
+ $this->dieRecoverableError( [ 'filetype-missing' ], 'filename' );
+ break;
+ case UploadBase::WINDOWS_NONASCII_FILENAME:
+ $this->dieRecoverableError( [ 'windows-nonascii-filename' ], 'filename' );
+ break;
+
+ // Unrecoverable errors
+ case UploadBase::EMPTY_FILE:
+ $this->dieWithError( 'empty-file' );
+ break;
+ case UploadBase::FILE_TOO_LARGE:
+ $this->dieWithError( 'file-too-large' );
+ break;
+
+ case UploadBase::FILETYPE_BADTYPE:
+ $extradata = [
+ 'filetype' => $verification['finalExt'],
+ 'allowed' => array_values( array_unique( $this->getConfig()->get( 'FileExtensions' ) ) )
+ ];
+ $extensions = array_unique( $this->getConfig()->get( 'FileExtensions' ) );
+ $msg = [
+ 'filetype-banned-type',
+ null, // filled in below
+ Message::listParam( $extensions, 'comma' ),
+ count( $extensions ),
+ null, // filled in below
+ ];
+ ApiResult::setIndexedTagName( $extradata['allowed'], 'ext' );
+
+ if ( isset( $verification['blacklistedExt'] ) ) {
+ $msg[1] = Message::listParam( $verification['blacklistedExt'], 'comma' );
+ $msg[4] = count( $verification['blacklistedExt'] );
+ $extradata['blacklisted'] = array_values( $verification['blacklistedExt'] );
+ ApiResult::setIndexedTagName( $extradata['blacklisted'], 'ext' );
+ } else {
+ $msg[1] = $verification['finalExt'];
+ $msg[4] = 1;
+ }
+
+ $this->dieWithError( $msg, 'filetype-banned', $extradata );
+ break;
+
+ case UploadBase::VERIFICATION_ERROR:
+ $msg = ApiMessage::create( $verification['details'], 'verification-error' );
+ if ( $verification['details'][0] instanceof MessageSpecifier ) {
+ $details = array_merge( [ $msg->getKey() ], $msg->getParams() );
+ } else {
+ $details = $verification['details'];
+ }
+ ApiResult::setIndexedTagName( $details, 'detail' );
+ $msg->setApiData( $msg->getApiData() + [ 'details' => $details ] );
+ $this->dieWithError( $msg );
+ break;
+
+ case UploadBase::HOOK_ABORTED:
+ $msg = $verification['error'] === '' ? 'hookaborted' : $verification['error'];
+ $this->dieWithError( $msg, 'hookaborted', [ 'details' => $verification['error'] ] );
+ break;
+ default:
+ $this->dieWithError( 'apierror-unknownerror-nocode', 'unknown-error',
+ [ 'details' => [ 'code' => $verification['status'] ] ] );
+ break;
+ }
+ }
+
+ /**
+ * Check warnings.
+ * Returns a suitable array for inclusion into API results if there were warnings
+ * Returns the empty array if there were no warnings
+ *
+ * @return array
+ */
+ protected function getApiWarnings() {
+ $warnings = $this->mUpload->checkWarnings();
+
+ return $this->transformWarnings( $warnings );
+ }
+
+ protected function transformWarnings( $warnings ) {
+ if ( $warnings ) {
+ // Add indices
+ ApiResult::setIndexedTagName( $warnings, 'warning' );
+
+ if ( isset( $warnings['duplicate'] ) ) {
+ $dupes = [];
+ /** @var File $dupe */
+ foreach ( $warnings['duplicate'] as $dupe ) {
+ $dupes[] = $dupe->getName();
+ }
+ ApiResult::setIndexedTagName( $dupes, 'duplicate' );
+ $warnings['duplicate'] = $dupes;
+ }
+
+ if ( isset( $warnings['exists'] ) ) {
+ $warning = $warnings['exists'];
+ unset( $warnings['exists'] );
+ /** @var LocalFile $localFile */
+ $localFile = isset( $warning['normalizedFile'] )
+ ? $warning['normalizedFile']
+ : $warning['file'];
+ $warnings[$warning['warning']] = $localFile->getName();
+ }
+
+ if ( isset( $warnings['no-change'] ) ) {
+ /** @var File $file */
+ $file = $warnings['no-change'];
+ unset( $warnings['no-change'] );
+
+ $warnings['nochange'] = [
+ 'timestamp' => wfTimestamp( TS_ISO_8601, $file->getTimestamp() )
+ ];
+ }
+
+ if ( isset( $warnings['duplicate-version'] ) ) {
+ $dupes = [];
+ /** @var File $dupe */
+ foreach ( $warnings['duplicate-version'] as $dupe ) {
+ $dupes[] = [
+ 'timestamp' => wfTimestamp( TS_ISO_8601, $dupe->getTimestamp() )
+ ];
+ }
+ unset( $warnings['duplicate-version'] );
+
+ ApiResult::setIndexedTagName( $dupes, 'ver' );
+ $warnings['duplicateversions'] = $dupes;
+ }
+ }
+
+ return $warnings;
+ }
+
+ /**
+ * Handles a stash exception, giving a useful error to the user.
+ * @todo Internationalize the exceptions then get rid of this
+ * @param Exception $e
+ * @return StatusValue
+ */
+ protected function handleStashException( $e ) {
+ switch ( get_class( $e ) ) {
+ case UploadStashFileNotFoundException::class:
+ $wrap = 'apierror-stashedfilenotfound';
+ break;
+ case UploadStashBadPathException::class:
+ $wrap = 'apierror-stashpathinvalid';
+ break;
+ case UploadStashFileException::class:
+ $wrap = 'apierror-stashfilestorage';
+ break;
+ case UploadStashZeroLengthFileException::class:
+ $wrap = 'apierror-stashzerolength';
+ break;
+ case UploadStashNotLoggedInException::class:
+ return StatusValue::newFatal( ApiMessage::create(
+ [ 'apierror-mustbeloggedin', $this->msg( 'action-upload' ) ], 'stashnotloggedin'
+ ) );
+ case UploadStashWrongOwnerException::class:
+ $wrap = 'apierror-stashwrongowner';
+ break;
+ case UploadStashNoSuchKeyException::class:
+ $wrap = 'apierror-stashnosuchfilekey';
+ break;
+ default:
+ $wrap = [ 'uploadstash-exception', get_class( $e ) ];
+ break;
+ }
+ return StatusValue::newFatal(
+ $this->getErrorFormatter()->getMessageFromException( $e, [ 'wrap' => $wrap ] )
+ );
+ }
+
+ /**
+ * Perform the actual upload. Returns a suitable result array on success;
+ * dies on failure.
+ *
+ * @param array $warnings Array of Api upload warnings
+ * @return array
+ */
+ protected function performUpload( $warnings ) {
+ // Use comment as initial page text by default
+ if ( is_null( $this->mParams['text'] ) ) {
+ $this->mParams['text'] = $this->mParams['comment'];
+ }
+
+ /** @var LocalFile $file */
+ $file = $this->mUpload->getLocalFile();
+
+ // For preferences mode, we want to watch if 'watchdefault' is set,
+ // or if the *file* doesn't exist, and either 'watchuploads' or
+ // 'watchcreations' is set. But getWatchlistValue()'s automatic
+ // handling checks if the *title* exists or not, so we need to check
+ // all three preferences manually.
+ $watch = $this->getWatchlistValue(
+ $this->mParams['watchlist'], $file->getTitle(), 'watchdefault'
+ );
+
+ if ( !$watch && $this->mParams['watchlist'] == 'preferences' && !$file->exists() ) {
+ $watch = (
+ $this->getWatchlistValue( 'preferences', $file->getTitle(), 'watchuploads' ) ||
+ $this->getWatchlistValue( 'preferences', $file->getTitle(), 'watchcreations' )
+ );
+ }
+
+ // Deprecated parameters
+ if ( $this->mParams['watch'] ) {
+ $watch = true;
+ }
+
+ if ( $this->mParams['tags'] ) {
+ $status = ChangeTags::canAddTagsAccompanyingChange( $this->mParams['tags'], $this->getUser() );
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+ }
+
+ // No errors, no warnings: do the upload
+ if ( $this->mParams['async'] ) {
+ $progress = UploadBase::getSessionStatus( $this->getUser(), $this->mParams['filekey'] );
+ if ( $progress && $progress['result'] === 'Poll' ) {
+ $this->dieWithError( 'apierror-upload-inprogress', 'publishfailed' );
+ }
+ UploadBase::setSessionStatus(
+ $this->getUser(),
+ $this->mParams['filekey'],
+ [ 'result' => 'Poll', 'stage' => 'queued', 'status' => Status::newGood() ]
+ );
+ JobQueueGroup::singleton()->push( new PublishStashedFileJob(
+ Title::makeTitle( NS_FILE, $this->mParams['filename'] ),
+ [
+ 'filename' => $this->mParams['filename'],
+ 'filekey' => $this->mParams['filekey'],
+ 'comment' => $this->mParams['comment'],
+ 'tags' => $this->mParams['tags'],
+ 'text' => $this->mParams['text'],
+ 'watch' => $watch,
+ 'session' => $this->getContext()->exportSession()
+ ]
+ ) );
+ $result['result'] = 'Poll';
+ $result['stage'] = 'queued';
+ } else {
+ /** @var Status $status */
+ $status = $this->mUpload->performUpload( $this->mParams['comment'],
+ $this->mParams['text'], $watch, $this->getUser(), $this->mParams['tags'] );
+
+ if ( !$status->isGood() ) {
+ $this->dieRecoverableError( $status->getErrors() );
+ }
+ $result['result'] = 'Success';
+ }
+
+ $result['filename'] = $file->getName();
+ if ( $warnings && count( $warnings ) > 0 ) {
+ $result['warnings'] = $warnings;
+ }
+
+ return $result;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ $params = [
+ 'filename' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ 'comment' => [
+ ApiBase::PARAM_DFLT => ''
+ ],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'text' => [
+ ApiBase::PARAM_TYPE => 'text',
+ ],
+ 'watch' => [
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'watchlist' => [
+ ApiBase::PARAM_DFLT => 'preferences',
+ ApiBase::PARAM_TYPE => [
+ 'watch',
+ 'preferences',
+ 'nochange'
+ ],
+ ],
+ 'ignorewarnings' => false,
+ 'file' => [
+ ApiBase::PARAM_TYPE => 'upload',
+ ],
+ 'url' => null,
+ 'filekey' => null,
+ 'sessionkey' => [
+ ApiBase::PARAM_DEPRECATED => true,
+ ],
+ 'stash' => false,
+
+ 'filesize' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_MIN => 0,
+ ApiBase::PARAM_MAX => UploadBase::getMaxUploadSize(),
+ ],
+ 'offset' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_MIN => 0,
+ ],
+ 'chunk' => [
+ ApiBase::PARAM_TYPE => 'upload',
+ ],
+
+ 'async' => false,
+ 'checkstatus' => false,
+ ];
+
+ return $params;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=upload&filename=Wiki.png' .
+ '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
+ => 'apihelp-upload-example-url',
+ 'action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
+ => 'apihelp-upload-example-filekey',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Upload';
+ }
+}
diff --git a/www/wiki/includes/api/ApiUsageException.php b/www/wiki/includes/api/ApiUsageException.php
new file mode 100644
index 00000000..c200dcba
--- /dev/null
+++ b/www/wiki/includes/api/ApiUsageException.php
@@ -0,0 +1,231 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This exception will be thrown when dieUsage is called to stop module execution.
+ *
+ * @ingroup API
+ * @deprecated since 1.29, use ApiUsageException instead
+ */
+class UsageException extends MWException {
+
+ private $mCodestr;
+
+ /**
+ * @var null|array
+ */
+ private $mExtraData;
+
+ /**
+ * @param string $message
+ * @param string $codestr
+ * @param int $code
+ * @param array|null $extradata
+ */
+ public function __construct( $message, $codestr, $code = 0, $extradata = null ) {
+ parent::__construct( $message, $code );
+ $this->mCodestr = $codestr;
+ $this->mExtraData = $extradata;
+
+ if ( !$this instanceof ApiUsageException ) {
+ wfDeprecated( __METHOD__, '1.29' );
+ }
+
+ // This should never happen, so throw an exception about it that will
+ // hopefully get logged with a backtrace (T138585)
+ if ( !is_string( $codestr ) || $codestr === '' ) {
+ throw new InvalidArgumentException( 'Invalid $codestr, was ' .
+ ( $codestr === '' ? 'empty string' : gettype( $codestr ) )
+ );
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getCodeString() {
+ wfDeprecated( __METHOD__, '1.29' );
+ return $this->mCodestr;
+ }
+
+ /**
+ * @return array
+ */
+ public function getMessageArray() {
+ wfDeprecated( __METHOD__, '1.29' );
+ $result = [
+ 'code' => $this->mCodestr,
+ 'info' => $this->getMessage()
+ ];
+ if ( is_array( $this->mExtraData ) ) {
+ $result = array_merge( $result, $this->mExtraData );
+ }
+
+ return $result;
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString() {
+ return "{$this->getCodeString()}: {$this->getMessage()}";
+ }
+}
+
+/**
+ * Exception used to abort API execution with an error
+ *
+ * If possible, use ApiBase::dieWithError() instead of throwing this directly.
+ *
+ * @ingroup API
+ * @note This currently extends UsageException for backwards compatibility, so
+ * all the existing code that catches UsageException won't break when stuff
+ * starts throwing ApiUsageException. Eventually UsageException will go away
+ * and this will (probably) extend MWException directly.
+ */
+class ApiUsageException extends UsageException implements ILocalizedException {
+
+ protected $modulePath;
+ protected $status;
+
+ /**
+ * @param ApiBase|null $module API module responsible for the error, if known
+ * @param StatusValue $status Status holding errors
+ * @param int $httpCode HTTP error code to use
+ */
+ public function __construct(
+ ApiBase $module = null, StatusValue $status, $httpCode = 0
+ ) {
+ if ( $status->isOK() ) {
+ throw new InvalidArgumentException( __METHOD__ . ' requires a fatal Status' );
+ }
+
+ $this->modulePath = $module ? $module->getModulePath() : null;
+ $this->status = $status;
+
+ // Bug T46111: Messages in the log files should be in English and not
+ // customized by the local wiki.
+ $enMsg = clone $this->getApiMessage();
+ $enMsg->inLanguage( 'en' )->useDatabase( false );
+ parent::__construct(
+ ApiErrorFormatter::stripMarkup( $enMsg->text() ),
+ $enMsg->getApiCode(),
+ $httpCode,
+ $enMsg->getApiData()
+ );
+ }
+
+ /**
+ * @param ApiBase|null $module API module responsible for the error, if known
+ * @param string|array|Message $msg See ApiMessage::create()
+ * @param string|null $code See ApiMessage::create()
+ * @param array|null $data See ApiMessage::create()
+ * @param int $httpCode HTTP error code to use
+ * @return static
+ */
+ public static function newWithMessage(
+ ApiBase $module = null, $msg, $code = null, $data = null, $httpCode = 0
+ ) {
+ return new static(
+ $module,
+ StatusValue::newFatal( ApiMessage::create( $msg, $code, $data ) ),
+ $httpCode
+ );
+ }
+
+ /**
+ * @return ApiMessage
+ */
+ private function getApiMessage() {
+ $errors = $this->status->getErrorsByType( 'error' );
+ if ( !$errors ) {
+ $errors = $this->status->getErrors();
+ }
+ if ( !$errors ) {
+ $msg = new ApiMessage( 'apierror-unknownerror-nocode', 'unknownerror' );
+ } else {
+ $msg = ApiMessage::create( $errors[0] );
+ }
+ return $msg;
+ }
+
+ /**
+ * Fetch the responsible module name
+ * @return string|null
+ */
+ public function getModulePath() {
+ return $this->modulePath;
+ }
+
+ /**
+ * Fetch the error status
+ * @return StatusValue
+ */
+ public function getStatusValue() {
+ return $this->status;
+ }
+
+ /**
+ * @deprecated Do not use. This only exists here because UsageException is in
+ * the inheritance chain for backwards compatibility.
+ * @inheritDoc
+ */
+ public function getCodeString() {
+ wfDeprecated( __METHOD__, '1.29' );
+ return $this->getApiMessage()->getApiCode();
+ }
+
+ /**
+ * @deprecated Do not use. This only exists here because UsageException is in
+ * the inheritance chain for backwards compatibility.
+ * @inheritDoc
+ */
+ public function getMessageArray() {
+ wfDeprecated( __METHOD__, '1.29' );
+ $enMsg = clone $this->getApiMessage();
+ $enMsg->inLanguage( 'en' )->useDatabase( false );
+
+ return [
+ 'code' => $enMsg->getApiCode(),
+ 'info' => ApiErrorFormatter::stripMarkup( $enMsg->text() ),
+ ] + $enMsg->getApiData();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getMessageObject() {
+ return Status::wrap( $this->status )->getMessage();
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString() {
+ $enMsg = clone $this->getApiMessage();
+ $enMsg->inLanguage( 'en' )->useDatabase( false );
+ $text = ApiErrorFormatter::stripMarkup( $enMsg->text() );
+
+ return get_class( $this ) . ": {$enMsg->getApiCode()}: {$text} "
+ . "in {$this->getFile()}:{$this->getLine()}\n"
+ . "Stack trace:\n{$this->getTraceAsString()}";
+ }
+
+}
diff --git a/www/wiki/includes/api/ApiUserrights.php b/www/wiki/includes/api/ApiUserrights.php
new file mode 100644
index 00000000..47f3bc5a
--- /dev/null
+++ b/www/wiki/includes/api/ApiUserrights.php
@@ -0,0 +1,224 @@
+<?php
+
+/**
+ * API userrights module
+ *
+ * Copyright © 2009 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiUserrights extends ApiBase {
+
+ private $mUser = null;
+
+ /**
+ * Get a UserrightsPage object, or subclass.
+ * @return UserrightsPage
+ */
+ protected function getUserRightsPage() {
+ return new UserrightsPage;
+ }
+
+ /**
+ * Get all available groups.
+ * @return array
+ */
+ protected function getAllGroups() {
+ return User::getAllGroups();
+ }
+
+ public function execute() {
+ $pUser = $this->getUser();
+
+ // Deny if the user is blocked and doesn't have the full 'userrights' permission.
+ // This matches what Special:UserRights does for the web UI.
+ if ( $pUser->isBlocked() && !$pUser->isAllowed( 'userrights' ) ) {
+ $this->dieBlocked( $pUser->getBlock() );
+ }
+
+ $params = $this->extractRequestParams();
+
+ // Figure out expiry times from the input
+ // $params['expiry'] is not set in CentralAuth's ApiGlobalUserRights subclass
+ if ( isset( $params['expiry'] ) ) {
+ $expiry = (array)$params['expiry'];
+ } else {
+ $expiry = [ 'infinity' ];
+ }
+ $add = (array)$params['add'];
+ if ( !$add ) {
+ $expiry = [];
+ } elseif ( count( $expiry ) !== count( $add ) ) {
+ if ( count( $expiry ) === 1 ) {
+ $expiry = array_fill( 0, count( $add ), $expiry[0] );
+ } else {
+ $this->dieWithError( [
+ 'apierror-toofewexpiries',
+ count( $expiry ),
+ count( $add )
+ ] );
+ }
+ }
+
+ // Validate the expiries
+ $groupExpiries = [];
+ foreach ( $expiry as $index => $expiryValue ) {
+ $group = $add[$index];
+ $groupExpiries[$group] = UserrightsPage::expiryToTimestamp( $expiryValue );
+
+ if ( $groupExpiries[$group] === false ) {
+ $this->dieWithError( [ 'apierror-invalidexpiry', wfEscapeWikiText( $expiryValue ) ] );
+ }
+
+ // not allowed to have things expiring in the past
+ if ( $groupExpiries[$group] && $groupExpiries[$group] < wfTimestampNow() ) {
+ $this->dieWithError( [ 'apierror-pastexpiry', wfEscapeWikiText( $expiryValue ) ] );
+ }
+ }
+
+ $user = $this->getUrUser( $params );
+
+ $tags = $params['tags'];
+
+ // Check if user can add tags
+ if ( $tags !== null ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $tags, $pUser );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ $form = $this->getUserRightsPage();
+ $form->setContext( $this->getContext() );
+ $r['user'] = $user->getName();
+ $r['userid'] = $user->getId();
+ list( $r['added'], $r['removed'] ) = $form->doSaveUserGroups(
+ // Don't pass null to doSaveUserGroups() for array params, cast to empty array
+ $user, (array)$add, (array)$params['remove'],
+ $params['reason'], (array)$tags, $groupExpiries
+ );
+
+ $result = $this->getResult();
+ ApiResult::setIndexedTagName( $r['added'], 'group' );
+ ApiResult::setIndexedTagName( $r['removed'], 'group' );
+ $result->addValue( null, $this->getModuleName(), $r );
+ }
+
+ /**
+ * @param array $params
+ * @return User
+ */
+ private function getUrUser( array $params ) {
+ if ( $this->mUser !== null ) {
+ return $this->mUser;
+ }
+
+ $this->requireOnlyOneParameter( $params, 'user', 'userid' );
+
+ $user = isset( $params['user'] ) ? $params['user'] : '#' . $params['userid'];
+
+ $form = $this->getUserRightsPage();
+ $form->setContext( $this->getContext() );
+ $status = $form->fetchUser( $user );
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+
+ $this->mUser = $status->value;
+
+ return $status->value;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ $a = [
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'userid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
+ 'add' => [
+ ApiBase::PARAM_TYPE => $this->getAllGroups(),
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'expiry' => [
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_ALLOW_DUPLICATES => true,
+ ApiBase::PARAM_DFLT => 'infinite',
+ ],
+ 'remove' => [
+ ApiBase::PARAM_TYPE => $this->getAllGroups(),
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ 'reason' => [
+ ApiBase::PARAM_DFLT => ''
+ ],
+ 'token' => [
+ // Standard definition automatically inserted
+ ApiBase::PARAM_HELP_MSG_APPEND => [ 'api-help-param-token-webui' ],
+ ],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true
+ ],
+ ];
+ // CentralAuth's ApiGlobalUserRights subclass can't handle expiries
+ if ( !$this->getUserRightsPage()->canProcessExpiries() ) {
+ unset( $a['expiry'] );
+ }
+ return $a;
+ }
+
+ public function needsToken() {
+ return 'userrights';
+ }
+
+ protected function getWebUITokenSalt( array $params ) {
+ return $this->getUrUser( $params )->getName();
+ }
+
+ protected function getExamplesMessages() {
+ $a = [
+ 'action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC'
+ => 'apihelp-userrights-example-user',
+ 'action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+ => 'apihelp-userrights-example-userid',
+ ];
+ if ( $this->getUserRightsPage()->canProcessExpiries() ) {
+ $a['action=userrights&user=SometimeSysop&add=sysop&expiry=1%20month&token=123ABC']
+ = 'apihelp-userrights-example-expiry';
+ }
+ return $a;
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:User_group_membership';
+ }
+}
diff --git a/www/wiki/includes/api/ApiValidatePassword.php b/www/wiki/includes/api/ApiValidatePassword.php
new file mode 100644
index 00000000..943149da
--- /dev/null
+++ b/www/wiki/includes/api/ApiValidatePassword.php
@@ -0,0 +1,81 @@
+<?php
+
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * @ingroup API
+ */
+class ApiValidatePassword extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ // For sanity
+ $this->requirePostedParameters( [ 'password' ] );
+
+ if ( $params['user'] !== null ) {
+ $user = User::newFromName( $params['user'], 'creatable' );
+ if ( !$user ) {
+ $encParamName = $this->encodeParamName( 'user' );
+ $this->dieWithError(
+ [ 'apierror-baduser', $encParamName, wfEscapeWikiText( $params['user'] ) ],
+ "baduser_{$encParamName}"
+ );
+ }
+
+ if ( !$user->isAnon() || AuthManager::singleton()->userExists( $user->getName() ) ) {
+ $this->dieWithError( 'userexists' );
+ }
+
+ $user->setEmail( (string)$params['email'] );
+ $user->setRealName( (string)$params['realname'] );
+ } else {
+ $user = $this->getUser();
+ }
+
+ $validity = $user->checkPasswordValidity( $params['password'] );
+ $r['validity'] = $validity->isGood() ? 'Good' : ( $validity->isOK() ? 'Change' : 'Invalid' );
+ $messages = array_merge(
+ $this->getErrorFormatter()->arrayFromStatus( $validity, 'error' ),
+ $this->getErrorFormatter()->arrayFromStatus( $validity, 'warning' )
+ );
+ if ( $messages ) {
+ $r['validitymessages'] = $messages;
+ }
+
+ Hooks::run( 'ApiValidatePassword', [ $this, &$r ] );
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $r );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'password' => [
+ ApiBase::PARAM_TYPE => 'password',
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'user' => [
+ ApiBase::PARAM_TYPE => 'user',
+ ],
+ 'email' => null,
+ 'realname' => null,
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=validatepassword&password=foobar'
+ => 'apihelp-validatepassword-example-1',
+ 'action=validatepassword&password=querty&user=Example'
+ => 'apihelp-validatepassword-example-2',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Validatepassword';
+ }
+}
diff --git a/www/wiki/includes/api/ApiWatch.php b/www/wiki/includes/api/ApiWatch.php
new file mode 100644
index 00000000..38be178b
--- /dev/null
+++ b/www/wiki/includes/api/ApiWatch.php
@@ -0,0 +1,184 @@
+<?php
+/**
+ * Copyright © 2008 Yuri Astrakhan "<Firstname><Lastname>@gmail.com",
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module to allow users to watch a page
+ *
+ * @ingroup API
+ */
+class ApiWatch extends ApiBase {
+ private $mPageSet = null;
+
+ public function execute() {
+ $user = $this->getUser();
+ if ( !$user->isLoggedIn() ) {
+ $this->dieWithError( 'watchlistanontext', 'notloggedin' );
+ }
+
+ $this->checkUserRightsAny( 'editmywatchlist' );
+
+ $params = $this->extractRequestParams();
+
+ $continuationManager = new ApiContinuationManager( $this, [], [] );
+ $this->setContinuationManager( $continuationManager );
+
+ $pageSet = $this->getPageSet();
+ // by default we use pageset to extract the page to work on.
+ // title is still supported for backward compatibility
+ if ( !isset( $params['title'] ) ) {
+ $pageSet->execute();
+ $res = $pageSet->getInvalidTitlesAndRevisions( [
+ 'invalidTitles',
+ 'special',
+ 'missingIds',
+ 'missingRevIds',
+ 'interwikiTitles'
+ ] );
+
+ foreach ( $pageSet->getMissingTitles() as $title ) {
+ $r = $this->watchTitle( $title, $user, $params );
+ $r['missing'] = true;
+ $res[] = $r;
+ }
+
+ foreach ( $pageSet->getGoodTitles() as $title ) {
+ $r = $this->watchTitle( $title, $user, $params );
+ $res[] = $r;
+ }
+ ApiResult::setIndexedTagName( $res, 'w' );
+ } else {
+ // dont allow use of old title parameter with new pageset parameters.
+ $extraParams = array_keys( array_filter( $pageSet->extractRequestParams(), function ( $x ) {
+ return $x !== null && $x !== false;
+ } ) );
+
+ if ( $extraParams ) {
+ $this->dieWithError(
+ [
+ 'apierror-invalidparammix-cannotusewith',
+ $this->encodeParamName( 'title' ),
+ $pageSet->encodeParamName( $extraParams[0] )
+ ],
+ 'invalidparammix'
+ );
+ }
+
+ $title = Title::newFromText( $params['title'] );
+ if ( !$title || !$title->isWatchable() ) {
+ $this->dieWithError( [ 'invalidtitle', $params['title'] ] );
+ }
+ $res = $this->watchTitle( $title, $user, $params, true );
+ }
+ $this->getResult()->addValue( null, $this->getModuleName(), $res );
+
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $this->getResult() );
+ }
+
+ private function watchTitle( Title $title, User $user, array $params,
+ $compatibilityMode = false
+ ) {
+ if ( !$title->isWatchable() ) {
+ return [ 'title' => $title->getPrefixedText(), 'watchable' => 0 ];
+ }
+
+ $res = [ 'title' => $title->getPrefixedText() ];
+
+ if ( $params['unwatch'] ) {
+ $status = UnwatchAction::doUnwatch( $title, $user );
+ $res['unwatched'] = $status->isOK();
+ } else {
+ $status = WatchAction::doWatch( $title, $user );
+ $res['watched'] = $status->isOK();
+ }
+
+ if ( !$status->isOK() ) {
+ if ( $compatibilityMode ) {
+ $this->dieStatus( $status );
+ }
+ $res['errors'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'error' );
+ $res['warnings'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'warning' );
+ if ( !$res['warnings'] ) {
+ unset( $res['warnings'] );
+ }
+ }
+
+ return $res;
+ }
+
+ /**
+ * Get a cached instance of an ApiPageSet object
+ * @return ApiPageSet
+ */
+ private function getPageSet() {
+ if ( $this->mPageSet === null ) {
+ $this->mPageSet = new ApiPageSet( $this );
+ }
+
+ return $this->mPageSet;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'watch';
+ }
+
+ public function getAllowedParams( $flags = 0 ) {
+ $result = [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_DEPRECATED => true
+ ],
+ 'unwatch' => false,
+ 'continue' => [
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ if ( $flags ) {
+ $result += $this->getPageSet()->getFinalParams( $flags );
+ }
+
+ return $result;
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=watch&titles=Main_Page&token=123ABC'
+ => 'apihelp-watch-example-watch',
+ 'action=watch&titles=Main_Page&unwatch=&token=123ABC'
+ => 'apihelp-watch-example-unwatch',
+ 'action=watch&generator=allpages&gapnamespace=0&token=123ABC'
+ => 'apihelp-watch-example-generator',
+ ];
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watch';
+ }
+}
diff --git a/www/wiki/includes/api/SearchApi.php b/www/wiki/includes/api/SearchApi.php
new file mode 100644
index 00000000..f7c6471e
--- /dev/null
+++ b/www/wiki/includes/api/SearchApi.php
@@ -0,0 +1,197 @@
+<?php
+use MediaWiki\MediaWikiServices;
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.28
+ */
+
+/**
+ * Traits for API components that use a SearchEngine.
+ * @ingroup API
+ */
+trait SearchApi {
+
+ /**
+ * When $wgSearchType is null, $wgSearchAlternatives[0] is null. Null isn't
+ * a valid option for an array for PARAM_TYPE, so we'll use a fake name
+ * that can't possibly be a class name and describes what the null behavior
+ * does
+ */
+ private static $BACKEND_NULL_PARAM = 'database-backed';
+
+ /**
+ * The set of api parameters that are shared between api calls that
+ * call the SearchEngine. Primarily this defines parameters that
+ * are utilized by self::buildSearchEngine().
+ *
+ * @param bool $isScrollable True if the api offers scrolling
+ * @return array
+ */
+ public function buildCommonApiParams( $isScrollable = true ) {
+ $params = [
+ 'search' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'namespace' => [
+ ApiBase::PARAM_DFLT => NS_MAIN,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ 'limit' => [
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+ ],
+ ];
+ if ( $isScrollable ) {
+ $params['offset'] = [
+ ApiBase::PARAM_DFLT => 0,
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ];
+ }
+
+ $searchConfig = MediaWikiServices::getInstance()->getSearchEngineConfig();
+ $alternatives = $searchConfig->getSearchTypes();
+ if ( count( $alternatives ) > 1 ) {
+ if ( $alternatives[0] === null ) {
+ $alternatives[0] = self::$BACKEND_NULL_PARAM;
+ }
+ $this->allowedParams['backend'] = [
+ ApiBase::PARAM_DFLT => $searchConfig->getSearchType(),
+ ApiBase::PARAM_TYPE => $alternatives,
+ ];
+ // @todo: support profile selection when multiple
+ // backends are available. The solution could be to
+ // merge all possible profiles and let ApiBase
+ // subclasses do the check. Making ApiHelp and ApiSandbox
+ // comprehensive might be more difficult.
+ } else {
+ $params += $this->buildProfileApiParam();
+ }
+
+ return $params;
+ }
+
+ /**
+ * Build the profile api param definitions. Makes bold assumption only one search
+ * engine is available, ensure that is true before calling.
+ *
+ * @return array array containing available additional api param definitions.
+ * Empty if profiles are not supported by the searchEngine implementation.
+ */
+ private function buildProfileApiParam() {
+ $configs = $this->getSearchProfileParams();
+ $searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
+ $params = [];
+ foreach ( $configs as $paramName => $paramConfig ) {
+ $profiles = $searchEngine->getProfiles( $paramConfig['profile-type'],
+ $this->getContext()->getUser() );
+ if ( !$profiles ) {
+ continue;
+ }
+
+ $types = [];
+ $helpMessages = [];
+ $defaultProfile = null;
+ foreach ( $profiles as $profile ) {
+ $types[] = $profile['name'];
+ if ( isset( $profile['desc-message'] ) ) {
+ $helpMessages[$profile['name']] = $profile['desc-message'];
+ }
+ if ( !empty( $profile['default'] ) ) {
+ $defaultProfile = $profile['name'];
+ }
+ }
+
+ $params[$paramName] = [
+ ApiBase::PARAM_TYPE => $types,
+ ApiBase::PARAM_HELP_MSG => $paramConfig['help-message'],
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => $helpMessages,
+ ApiBase::PARAM_DFLT => $defaultProfile,
+ ];
+ }
+
+ return $params;
+ }
+
+ /**
+ * Build the search engine to use.
+ * If $params is provided then the following searchEngine options
+ * will be set:
+ * - backend: which search backend to use
+ * - limit: mandatory
+ * - offset: optional, if set limit will be incremented by
+ * one ( to support the continue parameter )
+ * - namespace: mandatory
+ * - search engine profiles defined by SearchApi::getSearchProfileParams()
+ * @param string[]|null $params API request params (must be sanitized by
+ * ApiBase::extractRequestParams() before)
+ * @return SearchEngine the search engine
+ */
+ public function buildSearchEngine( array $params = null ) {
+ if ( $params != null ) {
+ $type = isset( $params['backend'] ) ? $params['backend'] : null;
+ if ( $type === self::$BACKEND_NULL_PARAM ) {
+ $type = null;
+ }
+ $searchEngine = MediaWikiServices::getInstance()->getSearchEngineFactory()->create( $type );
+ $limit = $params['limit'];
+ $searchEngine->setNamespaces( $params['namespace'] );
+ $offset = null;
+ if ( isset( $params['offset'] ) ) {
+ // If the API supports offset then it probably
+ // wants to fetch limit+1 so it can check if
+ // more results are available to properly set
+ // the continue param
+ $offset = $params['offset'];
+ $limit += 1;
+ }
+ $searchEngine->setLimitOffset( $limit, $offset );
+
+ // Initialize requested search profiles.
+ $configs = $this->getSearchProfileParams();
+ foreach ( $configs as $paramName => $paramConfig ) {
+ if ( isset( $params[$paramName] ) ) {
+ $searchEngine->setFeatureData(
+ $paramConfig['profile-type'],
+ $params[$paramName]
+ );
+ }
+ }
+ } else {
+ $searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
+ }
+ return $searchEngine;
+ }
+
+ /**
+ * @return array[] array of arrays mapping from parameter name to a two value map
+ * containing 'help-message' and 'profile-type' keys.
+ */
+ abstract public function getSearchProfileParams();
+
+ /**
+ * @return IContextSource
+ */
+ abstract public function getContext();
+}
diff --git a/www/wiki/includes/api/i18n/ar.json b/www/wiki/includes/api/i18n/ar.json
new file mode 100644
index 00000000..f07c6e2d
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ar.json
@@ -0,0 +1,426 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "أحمد المحمودي",
+ "Khaled",
+ "Fatz",
+ "Hiba Alshawi",
+ "Maroen1990",
+ "محمد أحمد عبد الفتاح",
+ "ديفيد",
+ "ASHmed",
+ "Yasser Yousssef",
+ "Azouz.anis"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> يجب أن تعمل جميع الميزات المعروضة في هذه الصفحة، إلا أن واجهة برمجة التطبيقات لا تزال قيد التطوير النشط، وقد تتغير في أي وقت. الاشتراك في\n<strong>Erroneous requests:</strong>عند إرسال طلبات خاطئة إلى api, فالـHTTP سيتم إرسال رأس مع المفتاح \"MediaWiki-API-Error\" ومن ثم سيتم تعيين قيمة رأس ورمز الخطأ المرسل مرة أخرى إلى نفس القيمة. لمزيد من المعلومات، راجع [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n<p class=\"mw-apisandbox-link\"><strong>Testing:</strong> لسهولة إختبار طلبات API، انظر [[Special:ApiSandbox]].</p>",
+ "apihelp-main-param-action": "أي فعل للعمل.",
+ "apihelp-main-param-format": "صيغة الخرج.",
+ "apihelp-main-param-assertuser": "التحقق من أن المستخدم الحالي هو المستخدم المسمى.",
+ "apihelp-main-param-requestid": "سيتم إدراج أي قيمة معينة هنا في الاستجابة. يمكن أن تُستخدَم لتمييز الطلبات.",
+ "apihelp-main-param-servedby": "تتضمن اسم المضيف الذي الخدم طلب في النتائج.",
+ "apihelp-main-param-curtimestamp": "تشمل الطابع الزمني الحالي في النتيجة.",
+ "apihelp-main-param-responselanginfo": "تشمل اللغات المستخدمة لأجل <var>uselang</var> and <var>errorlang</var> في النتيجة.",
+ "apihelp-main-param-errorsuselocal": "إذا ما أعطيت، النصوص الخطأ ستستخدم الرسائل المخصصة محليا من نطاق {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "منع مستخدم.",
+ "apihelp-block-param-user": "اسم المستخدم، أو عنوان IP أو نطاق عنوان IP لمنعه. لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1userid</var>",
+ "apihelp-block-param-userid": "معرف المستخدم لمنعه، لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1user</var>",
+ "apihelp-block-param-reason": "السبب للمنع.",
+ "apihelp-block-param-anononly": "منع المستخدمين المجهولين فقط (أي تعطيل تعديلات المجهولين من عنوان IP هذا).",
+ "apihelp-block-param-nocreate": "امنع إنشاء الحسابات.",
+ "apihelp-block-param-autoblock": "منع آخر عنوان IP مستخدم تلقائيا، وأية عناوين IP لاحقة حاولت الدخول من خلاله.",
+ "apihelp-block-param-noemail": "منع المستخدم من إرسال البريد الإلكتروني من خلال الويكي. (يتطلب صلاحية <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "إخفاء اسم المستخدم من سجل المنع. (يتطلب صلاحية <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "تسمح للمستخدم بتحرير صفحة النقاش الخاصة (يعتمد على <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "إذا كان المستخدم محظوراً بالفعل، يستبدل الحظر القائم.",
+ "apihelp-block-param-watchuser": "مشاهدة صفحة المستخدم ونقاش IP.",
+ "apihelp-block-param-tags": "تغيير الوسوم للتطبيق على الإدخال في سجل الحظر.",
+ "apihelp-block-example-ip-simple": "منع عنوان IP <kbd>192.0.2.5</kbd> لمدة ثلاثة أيام بسبب >المخالفة الأولى</kbd>.",
+ "apihelp-block-example-user-complex": "منع المستخدم <kbd>المخرب</kbd> لأجل غير مسمى بسبب <kbd>التخريب</kbd>، ومنع إنشاء حساب جديد وإرسال بريد إلكتروني.",
+ "apihelp-changeauthenticationdata-summary": "تغيير بيانات المصادقة للمستخدم الحالي.",
+ "apihelp-changeauthenticationdata-example-password": "محاولة تغيير كلمة المرور للمستخدم الحالي إلى <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "تحقق من صحة رمز من <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "نوع من الرموز يجري اختبارها.",
+ "apihelp-checktoken-param-token": "اختبار الرموز.",
+ "apihelp-checktoken-param-maxtokenage": "أقصى عمر للرمز يسمح، في ثوان.",
+ "apihelp-checktoken-example-simple": "اختبار صلاحية رمز <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "مسح <code>hasmsg</code> العلم للمستخدم الحالي.",
+ "apihelp-clearhasmsg-example-1": "مسح <code>hasmsg</code> العلم للمستخدم الحالي.",
+ "apihelp-clientlogin-summary": "تسجيل الدخول إلى ويكي باستخدام التدفق التفاعلي.",
+ "apihelp-clientlogin-example-login": "بدء عملية تسجيل الدخول إلى الويكي كمستخدم <kbd>Example</kbd> بكلمة المرور <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "واصلة تسجيل الدخول بعد استجابة <samp>UI</samp> لعاملي الصادقة، إمداد <var>OATHToken</var> ل<kbd>987654</kbd>.",
+ "apihelp-compare-summary": "الحصول على الفرق بين صفحتين.",
+ "apihelp-compare-extended-description": "يجب تمرير عنوان الصفحة أو رقم المراجعة أو معرف الصفحة لكل من \"من\" و\"إلى\".",
+ "apihelp-compare-param-fromtitle": "العنوان الأول للمقارنة.",
+ "apihelp-compare-param-fromid": "رقم الصفحة الأول للمقارنة.",
+ "apihelp-compare-param-fromrev": "أول مراجعة للمقارنة.",
+ "apihelp-compare-param-totitle": "العنوان الثاني للمقارنة.",
+ "apihelp-compare-param-toid": "رقم الصفحة الثاني للمقارنة.",
+ "apihelp-compare-param-torev": "المراجعة الثانية للمقارنة.",
+ "apihelp-compare-example-1": "إنشاء فرق بين المراجعة 1 و2.",
+ "apihelp-createaccount-summary": "انشاء حساب مستخدم جديد",
+ "apihelp-createaccount-example-create": "بدء عملية إنشاء المستخدم <kbd>Example</kbd> بكلمة المرور <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "اسم المستخدم.",
+ "apihelp-createaccount-param-domain": "مجال للمصادقة الخارجية (اختياري).",
+ "apihelp-createaccount-param-token": "حصلت على رمز إنشاء حساب في الطلب الأول.",
+ "apihelp-createaccount-param-email": "عنوان البريد الإلكتروني للمستخدم (اختياري).",
+ "apihelp-createaccount-param-realname": "الاسم الحقيقي للمستخدم (اختياري).",
+ "apihelp-createaccount-param-mailpassword": "اذا تم تعيين اي قيمة, سيتم ارسال كلمة سر عشوائية للمستخدم عن طريق الاميل.",
+ "apihelp-createaccount-param-reason": "السبب اختياري لإنشاء الحساب لوضعه في السجلات.",
+ "apihelp-createaccount-param-language": "رمز اللغة لتعيينه كافتراضي للمستخدم (اختياري، لغة المحتوى الافتراضية).",
+ "apihelp-createaccount-example-pass": "إنشاء المستخدم <kbd>testuser</kbd> بكلمة المرور <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "إنشاء مستخدم <kbd>testmailuser</kbd> وأرسل كلمة المرور بالبريد الإلكتروني بشكل عشوائي.",
+ "apihelp-cspreport-summary": "مستخدمة من قبل المتصفحات للإبلاغ عن انتهاكات سياسة أمن المحتوى. لا ينبغي أبدا أن تستخدم هذه الوحدة، إلا عند استخدامها تلقائيا باستخدام متصفح ويب CSP متوافق.",
+ "apihelp-cspreport-param-reportonly": "علم على أنه تقرير عن سياسة الرصد، وليس فرض سياسة",
+ "apihelp-delete-summary": "حذف صفحة.",
+ "apihelp-delete-param-title": "عنوان الصفحة للحذف. لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1pageid</var",
+ "apihelp-delete-param-pageid": "معرف الصفحة للحذف. لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1pageid</var",
+ "apihelp-delete-param-reason": "سبب الحذف. إذا لم يُحدَّد، سوف تُستخدَم أحد الأسباب التي تنشأ تلقائيا.",
+ "apihelp-delete-param-tags": "تغيير وسوم لتطبيق الإدخال في سجل الحذف.",
+ "apihelp-delete-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
+ "apihelp-delete-param-unwatch": "إزالة الصفحة من قائمة المراقبة للمستخدم الحالي.",
+ "apihelp-delete-param-oldimage": "اسم الصورة القديمة لحذفها كما هو منصوص عليه [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "حذف <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "حذف <kbd>Main Page</kbd> بسبب <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "هذا الاصدار تم تعطيله.",
+ "apihelp-edit-summary": "إنشاء وتعديل الصفحات.",
+ "apihelp-edit-param-title": "عنوان الصفحة للحذف. لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1pageid</var",
+ "apihelp-edit-param-pageid": "معرف الصفحة لتحريرها. لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1pageid</var",
+ "apihelp-edit-param-section": "رقم القسم. <kbd>0</kbd> للقسم العلوي، <kbd>new</kbd> لقسم جديد.",
+ "apihelp-edit-param-sectiontitle": "عنوان لقسم جديد.",
+ "apihelp-edit-param-text": "محتوى الصفحة",
+ "apihelp-edit-param-summary": "ملخص التعديل. أيضا عنوان القسم عند عدم تعيين $1section=new and $1sectiontitle.",
+ "apihelp-edit-param-tags": "عدل الوسوم لتطبيق المراجعة.",
+ "apihelp-edit-param-minor": "تعديل طفيف",
+ "apihelp-edit-param-notminor": "تعديل غير طفيف.",
+ "apihelp-edit-param-bot": "علم على هذا التعديل كتعديل بوت.",
+ "apihelp-edit-param-basetimestamp": "الطابع الزمني للمراجعة الأساسية، ويُستخدَم للكشف عن الحروب التحريرية، ويمكن الحصول عليها من خلال [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "الطابع الزمني عند بدء عملية التحرير، ويُستخدَم للكشف عن الحروب التحريرية، ويمكن الحصول عليها من خلال <var>[[Special:ApiHelp/main|curtimestamp]]</var> when beginning the edit process (e.g. when loading the page content to edit).",
+ "apihelp-edit-param-recreate": "تجاوز أية أخطاء حول الصفحة التي تم حذفها في هذه الأثناء.",
+ "apihelp-edit-param-createonly": "لا تحرر الصفحة إذا كان موجودا بالفعل.",
+ "apihelp-edit-param-nocreate": "يحدث خطأ إذا كانت الصفحة غير موجودة.",
+ "apihelp-edit-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
+ "apihelp-edit-param-unwatch": "إزالة الصفحة من قائمة المراقبة للمستخدم الحالي.",
+ "apihelp-edit-param-prependtext": "إضافة هذا النص إلى بداية الصفحة. تجاوز $1text.",
+ "apihelp-edit-param-appendtext": "إضافة هذا النص إلى بداية الصفحة. تجاوز $1text.\n\nاستخدم $1section=جديد لحاق القسم الجديد، بدلا من هذا الوسيط.",
+ "apihelp-edit-param-undo": "التراجع عن هذه المراجعة. تجاوز $1text, $1prependtext و$1appendtext.",
+ "apihelp-edit-param-undoafter": "التراجع عن جميع المراجعات من $1undo لهذه. إذا لم يتم التغيير، تراجع عن تعديل واحد فقط.",
+ "apihelp-edit-param-redirect": "حل التحويلات تلقائيا.",
+ "apihelp-edit-param-contentmodel": "نموذج المحتوى للمحتوى الجديد.",
+ "apihelp-edit-param-token": "ينبغي دائما أن يُرسَل الرمز كوسيط أخير، أو على الأقل بعد الوسيط $1text.",
+ "apihelp-edit-example-edit": "عدل صفحة.",
+ "apihelp-edit-example-prepend": "إضافة البادئة <kbd>_&#95;NOTOC_&#95;</kbd> إلى الصفحة.",
+ "apihelp-edit-example-undo": "التراجع عن التعديلات 13579 خلال 13585 بملخص تلقائي.",
+ "apihelp-emailuser-summary": "مراسلة المستخدم",
+ "apihelp-emailuser-param-target": "مستخدم لإرسال بريد إلكتروني له.",
+ "apihelp-emailuser-param-subject": "رأس الموضوع",
+ "apihelp-emailuser-param-text": "جسم البريد الإلكتروني",
+ "apihelp-emailuser-param-ccme": "إرسال نسخة من هذه الرسالة لي.",
+ "apihelp-emailuser-example-email": "أرسل بريدا إلكترونيا للمستخدم <kbd>WikiSysop</kbd> بالنص <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "يوسع كافة القوالب ضمن نصوص الويكي.",
+ "apihelp-expandtemplates-param-title": "عنوان الصفحة.",
+ "apihelp-expandtemplates-param-text": "نص ويكي للتحويل.",
+ "apihelp-expandtemplates-param-revid": "معرف المراجعة، ل<code><nowiki>{{REVISIONID}}</nowiki></code> والمتغيرات مماثلة.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "نص الويكي الموسع",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "خصائص الصفحة التي تحددها الكلمات السحرية الموسعة في نص الويكي.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "إذا كان الإخراج سريع التأثر، ينبغي عدم استخدامه في أي مكان آخر داخل الصفحة.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "يعطي متغيرات تكوين جافا سكريبت الخاصة بهذه الصفحة.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "يعطي متغيرات تكوين جافا سكريبت الخاصة بهذه الصفحة كسلسلة JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "شجرة تحليل XML للمدخلات.",
+ "apihelp-expandtemplates-param-includecomments": "إدراج أو عدم إدراج تعليقات HTML في الإخراج.",
+ "apihelp-expandtemplates-param-generatexml": "ولد شجرة تحليل XML (حل محلها $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "توسيع نص الويكي <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "إرجاع تغذية مساهمات المستخدم.",
+ "apihelp-feedcontributions-param-feedformat": "هيئة التلقيم.",
+ "apihelp-feedcontributions-param-user": "أي المستخدمين سيتم الحصول على تبرعات لهم.",
+ "apihelp-feedcontributions-param-namespace": "أي نطاق ستتم تصفية المساهمات حسبه.",
+ "apihelp-feedcontributions-param-year": "من سنة (وأقدم).",
+ "apihelp-feedcontributions-param-month": "من شهر (وأقدم).",
+ "apihelp-feedcontributions-param-tagfilter": "تصفية المساهمات التي بها هذه الوسوم.",
+ "apihelp-feedcontributions-param-deletedonly": "اعرض المساهمات المحذوفة فقط.",
+ "apihelp-feedcontributions-param-toponly": "تظهر فقط التعديلات التي هي أحدث المراجعات.",
+ "apihelp-feedcontributions-param-newonly": "أظهر إنشاء الصفحات فقط",
+ "apihelp-feedcontributions-param-hideminor": "إخفاء التعديلات الطفيفة.",
+ "apihelp-feedcontributions-param-showsizediff": "عرض حجم الفرق بين النسخ.",
+ "apihelp-feedrecentchanges-param-feedformat": "هيئة التلقيم.",
+ "apihelp-feedrecentchanges-param-namespace": "نطاق لتقييد النتائج.",
+ "apihelp-feedrecentchanges-param-invert": "جميع النطاقات عدا المختار.",
+ "apihelp-feedrecentchanges-param-associated": "تشمل النطاق المرتبط (نقاش أو الرئيسي).",
+ "apihelp-feedrecentchanges-param-days": "أيام لتقييد النتائج.",
+ "apihelp-feedrecentchanges-param-limit": "الحد الأقصى للنتائج المُرجعة",
+ "apihelp-feedrecentchanges-param-from": "أظهر التغييرات منذ",
+ "apihelp-feedrecentchanges-param-hideminor": "إخفاء التعديلات الطفيفة.",
+ "apihelp-feedrecentchanges-param-hidebots": "إخفاء التغييرات التي أجرتها بوتات.",
+ "apihelp-feedrecentchanges-param-hideanons": "إخفاء التغييرات التي أجراها مستخدمون مجهولون.",
+ "apihelp-feedrecentchanges-param-hideliu": "إخفاء التغييرات التي أجراها مستخدمون مسجلون.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "إخفاء التغييرات المراجعة.",
+ "apihelp-feedrecentchanges-param-hidemyself": "إخفاء التغييرات التي قام بها المستخدم الحالي.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "إخفاء تغيير عضوية التصنيف.",
+ "apihelp-feedrecentchanges-param-tagfilter": "فلتر بالوسم.",
+ "apihelp-feedrecentchanges-param-target": "أحدث التغييرات في الصفحات الموصولة من هذه الصفحة فقط",
+ "apihelp-feedrecentchanges-param-showlinkedto": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك",
+ "apihelp-feedrecentchanges-example-simple": " اظهر التغييرات الحديثة",
+ "apihelp-feedrecentchanges-example-30days": "أظهر التغييرات الأخيرة في 30 يوم.",
+ "apihelp-feedwatchlist-summary": "إرجاع تغذية قائمة المراقبة.",
+ "apihelp-feedwatchlist-param-feedformat": "هيئة التلقيم.",
+ "apihelp-feedwatchlist-param-hours": "صفحات قائمة معدلة ضمن عدة ساعات من الآن.",
+ "apihelp-feedwatchlist-example-default": "عرض تغذية قائمة المراقبة.",
+ "apihelp-feedwatchlist-example-all6hrs": "اظهر كل التغييرات في اخر 6 ساعات",
+ "apihelp-filerevert-summary": "استرجع الملف لنسخة قديمة.",
+ "apihelp-filerevert-param-filename": "اسم الملف المستهدف، دون البادئة ملف:.",
+ "apihelp-filerevert-param-comment": "تعليق الرفع.",
+ "apihelp-filerevert-example-revert": "استرجاع <kbd>Wiki.png</kbd> لنسحة <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "عرض مساعدة لوحدات محددة.",
+ "apihelp-help-param-modules": "وحدات لعرض مساعدة لها (قيم وسائط <var>action</var> و<var>format</var> أو<kbd>main</kbd>). يمكن تحديد الوحدات الفرعية ب <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "تشمل المساعدة للوحدات الفرعية من الوحدة المسماة.",
+ "apihelp-help-param-recursivesubmodules": "تشمل المساعدة للوحدات الفرعية بشكل متكرر.",
+ "apihelp-help-param-helpformat": "شكل مخرجات المساعدة.",
+ "apihelp-help-param-wrap": "التفاف المخرجات في بنية استجابة API القياسية.",
+ "apihelp-help-param-toc": "يتضمن جدول المحتويات في مخرجات HTML.",
+ "apihelp-help-example-main": "مساعدة للوحدة الرئيسية.",
+ "apihelp-help-example-submodules": "مساعدة ل<kbd>action=query</kbd> وجميع الوحدات الفرعية لها.",
+ "apihelp-help-example-recursive": "كل المساعدة في صفحة واحدة.",
+ "apihelp-help-example-help": "مساعدة لوحدة المساعدة نفسها.",
+ "apihelp-help-example-query": "مساعدة لوحدتي استعلام فرعيتين.",
+ "apihelp-imagerotate-summary": "تدوير صورة واحدة أو أكثر.",
+ "apihelp-imagerotate-param-rotation": "درجة تدوير الصورة في اتجاه عقارب الساعة.",
+ "apihelp-imagerotate-example-simple": "تدوير <kbd>File:Example.png</kbd> بمقدار <kbd>90</kbd> درجة.",
+ "apihelp-imagerotate-example-generator": "تدوير جميع الصور في <kbd>Category:Flip</kbd> بمقدار <kbd>180</kbd> درجة.",
+ "apihelp-import-param-summary": "ملخص إدخال سجل الاستيراد.",
+ "apihelp-import-param-xml": "ملف XML مرفوع.",
+ "apihelp-import-param-interwikisource": "بالنسبة لواردات الإنترويكي: ويكي للاستيراد منه.",
+ "apihelp-import-param-interwikipage": "بالنسبة لواردات الإنترويكي: صفحة لاستيرادها.",
+ "apihelp-import-param-fullhistory": "بالنسبة لواردات الإنترويكي: استيراد التاريخ كاملا، وليست النسخة الحالية فقط.",
+ "apihelp-import-param-templates": "بالنسبة لواردات الإنترويكي: الإستيراد شمل كافة القوالب كذلك.",
+ "apihelp-import-param-namespace": "استيراد إلى هذا النطاق. لا يمكن أن يُستخدَم إلى جانب <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "استيراد كصفحة فرعية لهذه الصفحة. لا يمكن أن يُستخدَم إلى جانب <var>$1rootpage</var>.",
+ "apihelp-import-example-import": "استيراد [[meta:Help:ParserFunctions]] للنطاق 100 بالتاريخ الكامل.",
+ "apihelp-linkaccount-summary": "ربط حساب من موفر طرف ثالث للمستخدم الحالي.",
+ "apihelp-linkaccount-example-link": "بدء عملية ربط حساب من <kbd>Example</kbd>.",
+ "apihelp-login-summary": "سجل دخولك الآن واحصل على مصادقة الكوكيز.",
+ "apihelp-login-extended-description": "وينبغي استخدام هذا الإجراء فقط في تركيبة مع [[Special:BotPasswords|خاص:كلمات مرور البوت]]. تم إهمال استخدام لتسجيل الدخول للحساب الرئيسي وقد يفشل دون سابق إنذار. لتسجيل الدخول بأمان إلى الحساب الرئيسي; استخدم <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "هذا العمل مستنكر وقد يفشل دون سابق إنذار. لتسجيل الدخول بأمان إلى الحساب الرئيسي; استخدم <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "اسم المستخدم.",
+ "apihelp-login-param-password": "كلمة السر",
+ "apihelp-login-param-domain": "النطاق (اختياري).",
+ "apihelp-login-param-token": "تم الحصول على رمز الدخول في الطلب الأول.",
+ "apihelp-login-example-gettoken": "استرداد رمز تسجيل الدخول.",
+ "apihelp-login-example-login": "تسجيل الدخول",
+ "apihelp-logout-summary": "تسجيل الخروج ومسح بيانات الجلسة.",
+ "apihelp-logout-example-logout": "تسجيل خروج المستخدم الحالي.",
+ "apihelp-managetags-summary": "أداء المهام الإدارية المتعلقة بتغيير الوسوم.",
+ "apihelp-managetags-param-operation": "أي الإجراءات ستنفذ:\n؛ إنشاء: إنشاء وسم التغيير جديدة للاستخدام اليدوي.\n؛ حذف: إزالة وسم التغيير من قاعدة البيانات، بما في ذلك إزالة الوسم من كافة المراجعات، وإدخالات التغيير الأخيرة، وإدخالات السجل المستخدم.\n؛ تنشيط: تنشيط وسم التغيير، مما يسمح للمستخدمين بتطبيقه يدويا.\n; إلغاء: إلغاء تنشيط وسم التغيير، ومنع المستخدمين من تطبيقه يدويا.",
+ "apihelp-managetags-param-reason": "سبب اختياري لإنشاء، وحذف، وتفعيل أو تعطيل الوسم.",
+ "apihelp-managetags-param-ignorewarnings": "إذا كان سيتم تجاهل أي تحذيرات تصدر خلال العملية.",
+ "apihelp-managetags-example-create": "إنشاء وسم مسمى <kbd>spam</kbd> بسبب <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "حذف <kbd>vandlaism</kbd> وسم بسبب <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "تنشيط الوسم المسمى <kbd>spam</kbd> بسبب <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "تعطيل الوسم المسمى <kbd>spam</kbd> بسبب <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "ادمج تاريخ الصفحة.",
+ "apihelp-mergehistory-param-from": "عنوان الصفحة التي سيتم دمج تاريخها. لا يمكن أن تُستخدَم بجانب <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "معرف الصفحة التي سيتم دمج تاريخها. لا يمكن أن تُستخدَم بجانب <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "عنوان الصفحة التي سيتم دمج تاريخها. لا يمكن أن تُستخدَم بجانب <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "معرف الصفحة التي سيتم دمج تاريخها. لا يمكن أن تُستخدَم بجانب <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "الطابع الزمني للمراجعات التي سيتم نقلها من تاريخ صفحة المصدر إلى تاريخ صفحة الوجهة. إذا تم حذفها، سيتم دمج تاريخ الصفحة كاملا من صفحة المصدر إلى صفحة الوجهة.",
+ "apihelp-mergehistory-param-reason": "سبب دمج التاريخ.",
+ "apihelp-mergehistory-example-merge": "دمج تاريخ <kbd>Oldpage</kbd> كاملا إلى <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "دمج مراجعات الصفحة <kbd>Oldpage</kbd> dating up to <kbd>2015-12-31T04:37:41Z</kbd> إلى <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "نقل صفحة.",
+ "apihelp-move-param-from": "عنوان الصفحة للنقل. لا يمكن أن تُستخدَم بجانب <var>$1pageid</var",
+ "apihelp-move-param-fromid": "معرف الصفحة للنقل. لا يمكن أن تُستخدَم بجانب <var>$1pageid</var",
+ "apihelp-move-param-to": "عنوان لإعادة تسمية الصفحة له.",
+ "apihelp-move-param-reason": "السبب لإعادة التسمية.",
+ "apihelp-move-param-movetalk": "إعادة تسمية صفحة النقاش، إن وُجِدت.",
+ "apihelp-move-param-movesubpages": "إعادة تسمية الصفحات الفرعية، إن وُجِدت.",
+ "apihelp-move-param-noredirect": "لا تنشئ تحويلة.",
+ "apihelp-move-param-watch": "إضافة الصفحة والتحويلة إلى قائمة مراقبة المستخدم الحالي.",
+ "apihelp-move-param-unwatch": "إزالة الصفحة والتحويلة إلى قائمة مراقبة المستخدم الحالي.",
+ "apihelp-move-param-ignorewarnings": "تجاهل أي تحذيرات.",
+ "apihelp-move-example-move": "انقل <kbd>Badtitle</kbd> إلى <kbd>Goodtitle</kbd> دون ترك تحويلة.",
+ "apihelp-opensearch-summary": "بحث الويكي باستخدام بروتوكول أوبن سيرش OpenSearch.",
+ "apihelp-opensearch-param-search": "سطر البحث",
+ "apihelp-opensearch-param-limit": "الحد الأقصى للنتائج المُرجعة",
+ "apihelp-opensearch-param-namespace": "النطاقات للبحث.",
+ "apihelp-opensearch-param-suggest": "لا تفعل شيئا إذا كان <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> خاطئا.",
+ "apihelp-opensearch-param-format": "شكل الإخراج.",
+ "apihelp-opensearch-param-warningsaserror": "إذا تم رفع التحذيرات ب<kbd>format=json</kbd>, أعد أخطاء API بدلا من تجاهلها.",
+ "apihelp-opensearch-example-te": "العثور على صفحات تبدأ ب<kbd>Te</kbd>.",
+ "apihelp-options-param-reset": "إعادة تعيين التفضيلات إلى إعدادات الموقع الإفتراضية.",
+ "apihelp-options-param-resetkinds": "قائمة أنواع الخيارات لإعادة ضبطها عندما يتم تعيين خيار <var>$1reset</var>.",
+ "apihelp-options-param-optionname": "اسم الخيار الذي ينبغي ضبطه إلى القيمة التي قدمها <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "قيمة للخيار المحدد من قبل <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "إعادة تعيين كل التفضيلات.",
+ "apihelp-options-example-change": "غير تفضيلات <kbd>skin</kbd> و<kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "إعادة تعيين جميع تفضيلات، ثم تعيين <kbd>skin</kbd> و<kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "الحصول على معلومات حول وحدات API.",
+ "apihelp-paraminfo-param-helpformat": "شكل سلاسل المساعدة.",
+ "apihelp-paraminfo-param-mainmodule": "الحصول على معلومات عن وحدة (المستوى الأعلى) الرئيسية أيضا. استخدم <kbd>$1modules=main</kbd> بدلا من ذلك.",
+ "apihelp-paraminfo-param-formatmodules": "قائمة بأسماء أشكال الوحدات (قيم الوسيط <var>format</var>). استخدم <var>$1modules</var> بدلا من ذلك.",
+ "apihelp-paraminfo-example-1": "عرض معلومات عن <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> و<kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd> و<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> و<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "أظهر المعلومات لجميع الوحدات الفرعية ل<kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-param-title": "عنوان الصفحة التي ينتمي النص إليها.إذا تم حذفها، <var>$1contentmodel</var> يجب أن تكون محددة، و[[API]] سيتم استخدامه كعنوان.",
+ "apihelp-parse-param-text": "نص للتحليل. استخدم <var>$1title</var> أو <var>$1contentmodel</var> للتحكم في نموذج المحتوى.",
+ "apihelp-parse-param-summary": "ملخص للتحليل.",
+ "apihelp-parse-param-page": "تحليل محتوى هذه الصفحة. لا يمكن أن تُستخدَم بجانب <var>$1text</var> and <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "حلل محتوى هذه الصفحة. تجاوز <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "لو <var>$1page</var> أو <var>$1pageid</var> is تم تعيينها للتحويل، حلها.",
+ "apihelp-parse-param-oldid": "تحليل مضمون هذا التعديل. تجاوز <var>$1page</var> و<var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "أي قطعة من المعلومات تريد الحصول عليها:",
+ "apihelp-parse-paramvalue-prop-langlinks": "يعطي وصلات اللغات في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-categories": "يعطي التصنيفات في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "يعطي إصدار HTML للتصنيفات.",
+ "apihelp-parse-paramvalue-prop-links": "يعطي الوصلات الداخلية في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-templates": "يعطي القوالب في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-images": "يعطي الصور في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-externallinks": "يعطي الوصلات الخارجية في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-sections": "يعطي الأقسام في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "يضيف العنوان في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-headitems": "يعطي عناصر لوضعها في <code>&lt;head&gt;</code> الصفحة.",
+ "apihelp-parse-paramvalue-prop-headhtml": "يعطي تحليل <code>&lt;head&gt;</code> الصفحة.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "يعطي متغيرات تكوين جافا سكريبت الخاصة بهذه الصفحة. للتطبيق; استخدم <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "يعطي متغيرات تكوين جافا سكريبت الخاصة بهذه الصفحة كسلسلة JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "يعطي HTML مؤشرات حالة الصفحة المستخدمة في الصفحة.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "يعطي وصلات اللغات في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-wikitext": "يعطي نصوص الويكي الأصلية التي تم تحليلها.",
+ "apihelp-parse-paramvalue-prop-properties": "يعطي الخصائص المختلفة المحددة في تحليل نصوص الويكي.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "يعطي تقرير الحد بطريقة منظمة. لا يعطي أية بيانات، عندما يتم تعيين <var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "يعطي إصدار HTML لتقرير الحد. لا يعطي أية بيانات، عندما يتم تعيين<var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-parsetree": "شجرة تحليل XML لمحتويات المراجعة (يتطلب نموذج محتوى <code>$1</code>)",
+ "apihelp-parse-param-pst": "قم بتحويل قبل الحفظ على المدخلات قبل تحليل ذلك. صالح فقط عند استخدامه مع النص.",
+ "apihelp-parse-param-effectivelanglinks": "يشمل وصلات لغة المقدمة بواسطة ملحقات (للاستخدام مع <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-disablelimitreport": "تجاهل تقرير الحد (\"NewPP limit report\") من مخرجات المحلل.",
+ "apihelp-parse-param-disablepp": "استخدم <var>$1disablelimitreport</var> بدلا من ذلك.",
+ "apihelp-parse-param-disableeditsection": "تجاهل روابط تحرير الأقسام من مخرجات المحلل.",
+ "apihelp-parse-param-disabletidy": "لا تشغل تنظيف HTML (على سبيل المثال مرتبة) على مخرجات المحلل.",
+ "apihelp-parse-param-generatexml": "توليد شجرة تحليل XML (يتطلب نموذج المحتوى <code>$1</code>; حل محلها <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "تحليل في وضع المعاينة.",
+ "apihelp-parse-param-sectionpreview": "تحليل في وضع معاينة القسم (يمكن وضع المعاينة أيضا).",
+ "apihelp-parse-param-disabletoc": "تجاهل جدول المحتويات في المخرجات.",
+ "apihelp-parse-param-contentformat": "نموذج المحتوى المسلسل يُستخدَم للنص المدخل. صالح فقط عند استخدامه مع $1text.",
+ "apihelp-parse-example-page": "تحليل صفحة.",
+ "apihelp-parse-example-text": "تحليل نصوص ويكي",
+ "apihelp-parse-example-texttitle": "تحليل نصوص ويكي، تحديد عنوان الصفحة.",
+ "apihelp-parse-example-summary": "تحليل الملخص.",
+ "apihelp-patrol-summary": "مراجعة صفحة أو مراجعة.",
+ "apihelp-patrol-param-rcid": "معرف أحدث التغييرات للمراجعة",
+ "apihelp-patrol-param-revid": "معرف مراجعة للمراجعة",
+ "apihelp-patrol-param-tags": "تغيير وسوم لتطبيق الإدخال في سجل المراجعة.",
+ "apihelp-patrol-example-rcid": "ابحث عن تغيير جديد",
+ "apihelp-patrol-example-revid": "راجع مراجعة.",
+ "apihelp-protect-summary": "غير مستوى الحماية لصفحة.",
+ "apihelp-protect-param-title": "عنوان الصفحة ل (إزالة) الحماية. لا يمكن أن تُستخدَم بجانب $1pageid.",
+ "apihelp-protect-param-pageid": "معرف الصفحة ل (إزالة) الحماية. لا يمكن أن تُستخدَم بجانب $1pageid.",
+ "apihelp-protect-param-reason": "سبب (إزالة) الحماية.",
+ "apihelp-protect-param-tags": "تغيير وسوم لتطبيق الإدخال في سجل الحماية.",
+ "apihelp-protect-param-watch": "إذا تم الضبط، أضف الصفحة (غير) المحمية لقائمة مراقبة المستخدم الحالي.",
+ "apihelp-protect-example-protect": "حماية صفحة.",
+ "apihelp-protect-example-unprotect": "إلغاء حماية الصفحة من خلال وضع قيود ل<kbd>all</kbd> (أي يُسمَح أي شخص باتخاذ الإجراءات).",
+ "apihelp-protect-example-unprotect2": "إلغاء حماية الصفحة عن طريق عدم وضع أية قيود.",
+ "apihelp-purge-summary": "مسح ذاكرة التخزين المؤقت للعناوين المعطاة",
+ "apihelp-purge-param-forcelinkupdate": "تحديث جداول الروابط.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "تحديث جدول الروابط، وتحديث جداول الروابط لأية صفحة تستخدم هذه الصفحة كقالب.",
+ "apihelp-purge-example-simple": "إفراغ كاش <kbd>Main Page</kbd> وصفحة <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "إفراغ كاش أول 10 صفحات في النطاق الرئيسي.",
+ "apihelp-query-summary": "جلب البيانات من وعن ميدياويكي.",
+ "apihelp-query-extended-description": "يجب على جميع تعديلات البيانات أولا استخدام استعلام للحصول على رمز لمنع الاعتداء من المواقع الخبيثة.",
+ "apihelp-query-param-prop": "أي الخصائص تريد الحصول على صفحات استعلام عنها.",
+ "apihelp-query-param-list": "أي القوائم تريد الحصول عليها.",
+ "apihelp-query-param-meta": "أي البيانات الوصفية تريد الحصول عليها.",
+ "apihelp-query-param-export": "تصدير المراجعات الحالية لجميع الصفحات المعينة أو المولدة.",
+ "apihelp-query-param-exportnowrap": "إعادة تصدير XML دون التفاف عليه في نتيجة XML (نفس شكل [[Special:Export|خاص:تصدير]]). يمكن استخدامها فقط مع $1export.",
+ "apihelp-query-param-rawcontinue": "إرجاع <samp>query-continue</samp> بيانات خام للاستمرار.",
+ "apihelp-query-example-revisions": "جلب [[Special:ApiHelp/query+siteinfo|معلومات الموقع]] و[[Special:ApiHelp/query+revisions|مراجعات]] <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "جلب مراجعات الصفحات التي تبدأ ب<kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "تعداد جميع التصنيفات.",
+ "apihelp-query+allcategories-param-from": "التصنيف الذي يبدأ التعداد منه.",
+ "apihelp-query+allcategories-param-to": "التصنيف الذي يقف التعداد عنده.",
+ "apihelp-query+allcategories-param-prefix": "ابحث عن جميع التصنيفات التي تبدأ أسماؤها بهذه القيمة.",
+ "apihelp-query+allcategories-param-dir": "اتجاه الفرز.",
+ "apihelp-query+allcategories-param-limit": "كم عدد الفئات في الإرجاع.",
+ "apihelp-query+allcategories-param-prop": "أي الخصائص تريد الحصول عليها:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "أضف عدد الصفحات في هذا التصنيف.",
+ "apihelp-query+allcategories-example-generator": "استرداد المعلومات حول صفحة التصنيف نفسها للتصنيفات التي تبدأ ب<kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "قائمة جميع المراجعات المحذوفة بواسطة المستخدم أو في نطاق.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "يمكن أن تُستخدَم فقط مع <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "لا يمكن أن تُستخدَم مع <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-end": "الطابع الزمني الذي يقف التعداد منه.",
+ "apihelp-query+alldeletedrevisions-param-from": "بدء الإدراج في القائمة من هذا العنوان.",
+ "apihelp-query+alldeletedrevisions-param-to": "وقف الإدراج في القائمة من هذا العنوان.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "ابحث عن جميع عناوين الصفحات التي تبدأ أسماؤها بهذه القيمة.",
+ "apihelp-query+alldeletedrevisions-param-tag": "مراجعات القائمة فقط تم وسمها بهذ الوسم.",
+ "apihelp-query+alldeletedrevisions-param-user": "أدرج المراجعات التي كتبها هذا المستخدم فقط.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "لا تدرج المراجعات التي كتبها هذا المستخدم.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "أدرج الصفحات في هذا النطاق فقط.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "عندما يُستخدَم كمولد، ولد عناوين بدلا من معرفات المراجعات.",
+ "apihelp-query+allfileusages-summary": "قائمة جميع استخدامات الملفات، بما في ذلك غير الموجودة.",
+ "apihelp-query+allfileusages-param-from": "عنوان الملف لبدء التعداد منه.",
+ "apihelp-query+allfileusages-param-to": "عنوان الملف لوقف التعداد منه.",
+ "apihelp-query+allfileusages-param-prefix": "البحث عن كل عناوين الملفات التي تبدأ بهذه القيمة.",
+ "apihelp-query+allfileusages-param-prop": "أي قطعة من المعلومات تريد تضمينها:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "تضيف معرفات استخدام الصفحات (لا يمكن استخدامها مع $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "تضيف عنوان الملف.",
+ "apihelp-query+allfileusages-param-limit": "كم عدد مجموع البنود للعودة.",
+ "apihelp-query+allimages-summary": "تعداد كافة الصور بشكل متتالي.",
+ "apihelp-query+allimages-param-sort": "خاصية للفرز وفقًا لها.",
+ "apihelp-query+allimages-param-from": "عنوان الصورة لبدء التعداد منه. يمكن استخدامها مع $1sort=name فقط.",
+ "apihelp-query+allimages-param-to": "عنوان الصورة لوقف التعداد منه. يمكن استخدامها مع $1sort=name فقط.",
+ "apihelp-query+allimages-param-start": "طابع زمني لبدء التعداد منه. يمكن استخدامه مع $1sort فقط.",
+ "apihelp-query+allimages-param-end": "طابع زمني لإنهاء التعداد منه. يمكن استخدامه مع $1sort فقط.",
+ "apihelp-query+allimages-param-prefix": "البحث عن كل عناوين الصور التي تبدأ بهذه القيمة. يمكن استخدامها مع $1sort فقط.",
+ "apihelp-query+allimages-param-sha1": "SHA1 تجزئة الصورة. تجاوز $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1 تجزئة الصورة في قاعدة 36 (تُستخدَم في ميدياويكي).",
+ "apihelp-query+allimages-param-filterbots": "كيفية تصفية الملفات التي تم تحميلها بواسطة بوتات. يمكن استخدامها مع $1sort=timestamp فقط. لا يمكن أن تُستخدَم بجانب $1user.",
+ "apihelp-query+allimages-param-mime": "عن أي أنواع MIME تبحث، على سبيل المثال <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-example-B": "أظهر قائمة الملفات التي تبدأ ب<kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "أظهر قائمة الملفات التي تم تحميلها مؤخرا، على غرار [[Special:NewFiles|خاص:ملفات جديدة]].",
+ "apihelp-query+allimages-example-mimetypes": "أظهر قائمة الملفات من نوع MIME <kbd>image/png</kbd> أو <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "عرض معلومات حول 4 ملفات تبدأ بالحرف <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "تعداد كافة الروابط التي تشير إلى نطاق معين.",
+ "apihelp-query+alllinks-param-from": "عنوان الرابط لبدء التعداد منه.",
+ "apihelp-query+alllinks-param-to": "عنوان الرابط لوقف التعداد منه.",
+ "apihelp-query+alllinks-param-prefix": "البحث عن كل العناوين المرتبطة التي تبدأ بهذه القيمة.",
+ "apihelp-query+alllinks-param-prop": "أي قطعة من المعلومات تريد تضمينها:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "تضيف معرف الصفحة للصفحة المرتبطة (لا يمكن استخدامها مع $1unique).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "تضيف عنوان الرابط.",
+ "apihelp-query+alllinks-param-namespace": "نطاق للتعداد.",
+ "apihelp-query+alllinks-param-limit": "كم عدد مجموع البنود للعودة.",
+ "apihelp-query+alllinks-example-generator": "يحصل على الصفحات التي تحتوي على وصلات.",
+ "apihelp-query+allmessages-param-prop": "أي الخصائص تريد الحصول عليها:",
+ "apihelp-query+allmessages-param-filter": "إرجاع الرسائل بالأسماء التي تحتوي على هذه السلسلة فقط.",
+ "apihelp-query+allmessages-param-lang": "إرجاع الرسائل بهذه اللغة.",
+ "apihelp-query+allmessages-param-from": "إرجاع الرسائل ابتداء من هذه الرسالة.",
+ "apihelp-query+allmessages-param-to": "إرجاع الرسائل التي تنتهي بهذه الرسالة.",
+ "apihelp-query+allmessages-param-prefix": "إرجاء الرسائل بهذه البادئة.",
+ "apihelp-query+allmessages-example-ipb": "عرض رسائل تبدأ ب<kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "عرض رسائل <kbd>august</kbd> and <kbd>mainpage</kbd> باللغة الألمانية.",
+ "apihelp-query+allpages-summary": "تعداد كافة الصفحات بشكل متتالي في نطاق معين.",
+ "apihelp-query+allpages-param-to": "عنوان الصفحة لإيقاف التعداد منه.",
+ "apihelp-query+allpages-param-prefix": "البحث عن كل عناوين الصفحات التي تبدأ بهذه القيمة.",
+ "apihelp-query+allpages-param-namespace": "نطاق للتعداد.",
+ "apihelp-query+allpages-param-filterredir": "أي الصفحات للعرض.",
+ "apihelp-query+allpages-param-limit": "كم عدد مجموع الصفحات للعودة.",
+ "apihelp-query+allpages-example-B": "عرض قائمة من الصفحات التي تبدأ بالحرف <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "عرض معلومات حول 4 صفحات تبدأ بالحرف <kbd>T</kbd>.",
+ "apihelp-query+allredirects-param-from": "عنوان التحويلة لبدء التعداد منه.",
+ "apihelp-query+allredirects-param-to": "عنوان التحويلة لإيقاف التعداد منه.",
+ "apihelp-query+allredirects-param-prefix": "ابحث عن جميع عناوين الصفحات المستهدفة التي تبدأ بهذه القيمة.",
+ "apihelp-query+allredirects-param-prop": "أي قطعة من المعلومات تريد تضمينها:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "تضيف معرف الصفحة لصفحة التحويل (لا يمكن استخدامها مع $1unique).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "تضيف عنوان التحويلة.",
+ "apihelp-query+allredirects-param-namespace": "نطاق للتعداد.",
+ "apihelp-query+allredirects-param-limit": "كم عدد مجموع البنود للعودة.",
+ "apihelp-query+allredirects-example-generator": "يحصل على الصفحات التي تحتوي على تحويلات.",
+ "apihelp-query+allrevisions-summary": "اعرض كل المراجعات.",
+ "apihelp-query+allrevisions-param-start": "التصنيف الذي يبدأ التعداد منه.",
+ "apihelp-query+allrevisions-param-end": "الطابع الزمني الذي يقف التعداد منه.",
+ "apihelp-query+allrevisions-param-generatetitles": "عندما يُستخدَم كمولد، ولد عناوين بدلا من معرفات المراجعات.",
+ "apihelp-query+mystashedfiles-param-prop": "أي الخصائص تريد لجلب للملفات.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "جلب حجم الملف وأبعاد الصورة.",
+ "apihelp-query+blocks-example-simple": "قائمة المنع.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
+ "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها.",
+ "apierror-offline": "لم يمكن المتابعة بسبب مشاكل في الاتصال بالشبكة; تأكد من أنه لديك اتصال بالإنترنت وحاول مرة أخرى.",
+ "apierror-timeout": "لم يستجب الخادم ضمن الوقت المتوقع.",
+ "api-feed-error-title": "خطأ ($1)"
+}
diff --git a/www/wiki/includes/api/i18n/ast.json b/www/wiki/includes/api/i18n/ast.json
new file mode 100644
index 00000000..09c63777
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ast.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu",
+ "Enolp"
+ ]
+ },
+ "apihelp-main-summary": "",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Llista d'alderique]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios de la API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fallos y solicitúes]\n</div>\n<strong>Estau:</strong> Toles carauterístiques qu'apaecen nesta páxina tendríen de funcionar, pero la API inda ta en desendolcu activu, y puede camudar en cualquier momentu. Suscríbete a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ llista de corréu mediawiki-api-announce] p'avisos sobro anovamientos.\n\n<strong>Solicitúes incorreutes:</strong> Cuando s'unvíen solicitúes incorreutes a la API, unvíase una cabecera HTTP cola clave \"MediaWiki-API-Error\" y, darréu, tanto'l valor de la cabecera como'l códigu d'error devueltu pondránse al mesmu valor. Pa más información, consulta [[mw:API:Errors_and_warnings|API: Errores y avisos]].\n\n<strong>Pruebes:</strong> Pa facilitar les pruebes de solicitúes API, consulta [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Qué aición facer.",
+ "apihelp-main-param-format": "El formatu de la salida.",
+ "apihelp-main-param-maxlag": "El retrasu (lag) máximu puede utilizase cuando MediaWiki ta instaláu nun conxuntu de bases de datos replicaes. Pa evitar les aiciones que pudieran causar un retrasu entá mayor na replicación del sitiu, esti parámetru puede causar que'l cliente espere hasta que'l retrasu de replicación sía menor que'l valor especificáu. En casu de retrasu escesivu, devuélvese un códigu d'error <samp>maxlag</samp> con un mensaxe asemeyáu a <samp>Esperando a $host: $lag segundos de retrasu<s/amp>.<br />Ver [[mw:Manual:Maxlag_parameter|Manual:Parámetru maxlag]] pa más información.",
+ "apihelp-main-param-smaxage": "Establez l'encabezáu HTTP <code>s-maxage</code> de control de caché a esta cantidá de segundos. Los errores nunca se guarden na caché.",
+ "apihelp-main-param-maxage": "Establez l'encabezáu HTTP <code>max-age</code> de control de caché a esta cantidá de segundos. Los errores nunca se guarden na caché.",
+ "apihelp-main-param-assert": "Comprobar que l'usuariu tien sesión aniciada si'l valor ye <kbd>user</kbd> o que tien el permisu de bot si ye <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Comprobar que'l usuariu actual ye l'usuariu nomáu.",
+ "apihelp-main-param-servedby": "Incluyir el nome del host que sirvió la solicitú nes resultancies.",
+ "apihelp-main-param-curtimestamp": "Incluyir la marca de tiempu actual na resultancia.",
+ "apihelp-block-summary": "Bloquiar a un usuariu.",
+ "apihelp-block-param-user": "Nome d'usuariu, dirección #IP o intervalu d'IP que quies bloquiar. Nun puede utilizase con <var>$1userid</var>",
+ "apihelp-block-param-expiry": "Fecha de caducidá. Puede ser relativa (por casu, <kbd>5 meses</kbd> o <kbd>2 selmanes</kbd>) o absoluta (por casu, 2016-01-16T12:34:56Z). Si s'establez a <kbd>infinitu</kbd>, <kbd>indefiníu</kbd>, o <kbd>nunca</kbd>, el bloquéu nun caducará nunca.",
+ "apihelp-block-param-reason": "Motivu del bloquéu.",
+ "apihelp-block-param-anononly": "Bloquiar solo los usuarios anónimos (esto ye, desactivar ediciones anónimes dende esta dirección IP).",
+ "apihelp-block-param-nocreate": "Torgar la creación de cuentes.",
+ "apihelp-block-param-autoblock": "Bloquiar automáticamente la última dirección IP usada y les siguientes direcciones IP de les que traten d'aniciar sesión darréu.",
+ "apihelp-block-param-noemail": "Torgar que l'usuariu unvie corréu al traviés de la wiki (Rique'l permisu <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Despintar el nome d'usuariu del rexistru de bloquéu (Rique'l permisu <code>hideuser</code>).",
+ "apihelp-block-param-reblock": "Si la cuenta yá ta bloquiada, sobrescribir el bloquéu esistente.",
+ "apihelp-block-param-watchuser": "Vixilar les páxines d'usuariu y d'alderique del usuariu o de la dirección IP.",
+ "apihelp-block-example-ip-simple": "Bloquiar la dirección IP <kbd>192.0.2.5</kbd> mientres 3 díes col motivu <kbd>Primer avisu</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquiar al usuariu <kbd>Vandal</kbd> indefinidamente col motivu <kbd>Vandalismu</kbd> y torgar que cree nueves cuentes o unvie correos.",
+ "apihelp-changeauthenticationdata-summary": "Camudar los datos d'identificación del usuariu actual.",
+ "apihelp-changeauthenticationdata-example-password": "Intentar camudar la contraseña del usuariu actual a <kbd>ContraseñaExemplu</kbd>.",
+ "apihelp-createaccount-param-name": "Nome d'usuariu.",
+ "apihelp-createaccount-param-language": "Códigu de llingua p'afitar como predetermináu al usuariu (opcional, predetermina la llingua del conteníu).",
+ "apihelp-disabled-summary": "Esti módulu deshabilitóse."
+}
diff --git a/www/wiki/includes/api/i18n/av.json b/www/wiki/includes/api/i18n/av.json
new file mode 100644
index 00000000..df85c0b6
--- /dev/null
+++ b/www/wiki/includes/api/i18n/av.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Аль-Гимравий"
+ ]
+ },
+ "apihelp-block-param-user": "Нужее блокалда лъезе бокьун вугев гІахьалчиясул цІар, IP-адрес яги IP-адресазул диапазон"
+}
diff --git a/www/wiki/includes/api/i18n/awa.json b/www/wiki/includes/api/i18n/awa.json
new file mode 100644
index 00000000..b961399f
--- /dev/null
+++ b/www/wiki/includes/api/i18n/awa.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "apihelp-block-summary": "सदस्य कय अवरोधित करा जाय।",
+ "apihelp-block-param-reason": "ब्लाक करेकै कारण",
+ "apihelp-block-param-nocreate": "खाते बनावेकै रोका जाय",
+ "apihelp-edit-param-minor": "छोट संपादन"
+}
diff --git a/www/wiki/includes/api/i18n/azb.json b/www/wiki/includes/api/i18n/azb.json
new file mode 100644
index 00000000..37259d7a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/azb.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ilğım"
+ ]
+ },
+ "apihelp-main-param-action": "هانسی ایش گؤرولسون.",
+ "apihelp-main-param-requestid": "بۇرادا یازیلان هر میقدار جاوابا آرتیلاجاقدیر. ایستک‌لری فرقلندیرمه‌یه ایشلنه بیلر.",
+ "apihelp-block-param-nocreate": "حساب آچماغین قاباغینی آل.",
+ "apihelp-checktoken-param-token": "تِست اۆچون توکن.",
+ "apihelp-compare-param-fromtitle": "مۆقاییسه اۆچون ایلک باشلیق.",
+ "apihelp-delete-summary": "بیر صفحه‌نی سیل.",
+ "apihelp-delete-param-unwatch": "صفحه‌نی ایزله‌دیکلر لیستیندن سیل.",
+ "apihelp-edit-summary": "صفحه‌لری یارادیب دَییشدیر."
+}
diff --git a/www/wiki/includes/api/i18n/ba.json b/www/wiki/includes/api/i18n/ba.json
new file mode 100644
index 00000000..99421fed
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ba.json
@@ -0,0 +1,440 @@
+{
+ "@metadata": {
+ "authors": [
+ "Рустам Нурыев",
+ "Азат Хәлилов",
+ "Sagan",
+ "Айсар",
+ "Янмурза Баки",
+ "Айбикә",
+ "Лилиә",
+ "Lizalizaufa",
+ "Гульчатай",
+ "Ilmira",
+ "Гизатуллина",
+ "Танзиля Кутлугильдина",
+ "Ләйсән"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почта таратыу]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API яңылыҡтары]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Хаталар һәм яуаптар]\n</div>\n<strong>Статус:</strong> Был биттә күрһәтелгән бар функциялар ҙа эшләргә тейеш, шулай ҙа API әүҙем эшкәртеү хәлендә тора һәм теләгән бер ваҡытта үҙгәрергә мөмкин. Яңыртылыуҙарҙы һәр саҡ белеп торор өсөн [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почта таратыу mediawiki-api-announce], ошоға яҙыл.\n\n<strong>Хаталы һоратыуҙар:</strong> Әгәр API хаталы һоратыу алһа, HTTP баш һүҙе «MediaWiki-API-Error» асҡысы менән кире ҡайтарыла, бынан һуң баш һүҙҙең мәғәнәһе һәм хата коды кире ебәреләсәк һәм кире шул уҡ мәғәнәлә кире ҡуйыласаҡ. Киңерәк мәғлүмәтте ошонан ҡара [[mw:API:Errors_and_warnings|API:Хаталар һәм иҫкәртеүҙәр]].\n\n<strong>Тестлау:</strong> API-һоратыуҙарҙы тестлау уңайлы булһын өсөн ҡара. [[Special:ApiSandbox]]",
+ "apihelp-main-param-action": "Үтәлергә тейеш булған ғәмәлдәр.",
+ "apihelp-main-param-format": "Мәғлүмәттәр сығарыу форматы.",
+ "apihelp-main-param-smaxage": "Cache-Control HTTP-баш һүҙҙең <code>s-maxage</code> мәғәнәһен бирелгән секунд эсендә билдәләй.",
+ "apihelp-main-param-maxage": "Cache-Control HTTP-баш һүҙҙең <code>s-maxage</code> мәғәнәһен бирелгән секунд эсендә билдәләй.",
+ "apihelp-main-param-assert": "Әгәр <kbd>user</kbd>бирелһә ҡулланыусы танылған икәненә, йәки <kbd>bot</kbd>бирелһә ҡол хоҡуғына эйә икәненә ышанырға",
+ "apihelp-main-param-requestid": "Бында бирелгән һәр мәғәнә яуапҡа индереләсәк. Һорауҙарҙы айырыу өсөн файҙаланылырға мөмкин",
+ "apihelp-main-param-servedby": "Һөҙөмтәләргә һорауҙы эшкәрткән хост исемен индерергә",
+ "apihelp-main-param-curtimestamp": "Һөҙөмтәләргә ваҡытлыса тамға ҡуйырға.",
+ "apihelp-main-param-origin": "API мөрәжәғәт иткәндә AJAX-һорау (CORS) кросс-домены ҡулланһағыҙ, параметрға тәүге домен мәғәнәһен бирегеҙ. Ул алдағы һорауҙа булырға һәм шул рәүешле URI-һорауҙың (POST түгел) бер өлөшө булырға тейеш. Ул атамалағы бер сығанаҡҡа <code>Origin<code> тап килергә тейеш, мәҫәлән, <kbd>https://ru.wikipedia.org</kbd> йәки <kbd>https://meta.wikimedia.org</kbd>. Әгәр ҙә параметр атамаға <code>Origin<code> тура килмәһә, яуап 403 хата коды менән кире ҡайтарыла. Әгәр параметр <code>Origin</code> атамаға тура килһә, һәм сығанаҡ рөхсәт ителгән исемлектә икән, <code>Access-Control-Allow-Origin</code> тигән атама ҡуйыласаҡ.",
+ "apihelp-block-summary": "Ҡатнашыусыны бикләү",
+ "apihelp-block-param-user": "Һеҙ бикләргә теләгән ҡатнашыусының IP адресы йәки IP диапозоны.",
+ "apihelp-block-param-expiry": "Ғәмәлдән сығыу ваҡыты. Ул сағыштырмаса булыуы мөмкин(мәҫәлән <kbd>5 ай</kbd> йәки <kbd>2 аҙна</kbd>) йәки абсолют (мәҫәлән <kbd>2014-09-18T12:34:56Z</kbd>). Әгәр саманан тыш ҡуйылһа <kbd>сикһеҙ</kbd>, <kbd>билдәләнмәгән</kbd>, йәки <kbd>һис ҡасан</kbd>, блок ғәмәлдән сыҡмай.",
+ "apihelp-block-param-reason": "Бикләү сәбәбе.",
+ "apihelp-block-param-anononly": "Аноним ҡатнашыусыларҙы бикләү (йәғни IP адресынан төҙәтеүҙе тыйыу).",
+ "apihelp-block-param-nocreate": "Яңы иҫәп яҙыуҙарын булдырыуҙы тыйыу.",
+ "apihelp-block-param-autoblock": "Был ҡатнашыусы ҡулланған һуңғы IP адрестарҙы һәм артабан үҙгәртеү өсөн ҡулланрға тырышҡан IP адрестарҙы бикләргә",
+ "apihelp-block-param-noemail": "Ҡулланыусының Вики аша электрон почта ебәреүен тыйыу. (Талап итә <code>blockemail</code> хоҡуғын).",
+ "apihelp-block-param-hidename": "Бикләү журналында ҡулланыусы исемен йәшерергә. (Хоҡуҡ талап ителә<code>hideuser</code>)",
+ "apihelp-block-param-allowusertalk": "Ҡатнашыусыларға үҙҙәренең биттәрен мөхәррирләргә мөмкинлек бирә (<var> менән бәйләнгән. [[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Әгәр ҡатнашыусы бикләнгән булһа, ғәмәлдәге бикләүгә күсереп яҙырға.",
+ "apihelp-block-param-watchuser": "Битте йәки IP-ҡатнашыусыны һәм фекер алышыу битен күҙәтеү аҫтына аларға.",
+ "apihelp-block-example-ip-simple": "Блок IP-адрес <KBD> 192.0.2.5 </ KBD> өс көн эсендә <KBD> Беренсе удар </ KBD>.",
+ "apihelp-block-example-user-complex": "Ҡулланыусыны ябыу <KBD> Вандал </ KBD> уйланылған билдәһеҙ мөҙҙәткә <KBD> Вандаллыҡ </ KBD>, шулай уҡ яңы иҫәп булдырыуға юл ҡуймау һәм электрон почтаға ебәреү.",
+ "apihelp-checktoken-summary": "<kbd>-нан Маркерҙың дөрөҫлөгөн тикшерегеҙ [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Тамға тибы һынау үтә.",
+ "apihelp-checktoken-param-token": "Тикшереү токены.",
+ "apihelp-checktoken-param-maxtokenage": "Токендың максималь йәше (секундтарҙа)",
+ "apihelp-checktoken-example-simple": "<kbd>csrf</kbd>-токендың яраҡлығын тикшерергә",
+ "apihelp-clearhasmsg-summary": "Ағымдағы ҡуллыныусының <code>hasmsg</code> флагын таҙарта",
+ "apihelp-clearhasmsg-example-1": "Ағымдағы ҡуллыныусының <code>hasmsg</code> флагын таҙарта",
+ "apihelp-compare-summary": "Тикшереү һаны, биттең баш һүҙе, йәки бит өсөн идентификатор баштан аҙаҡҡаса икеһе өсөн дә ҡабул ителергә тейеш",
+ "apihelp-compare-param-fromtitle": "Сағыштырыу өсөн беренсе баш һүҙ",
+ "apihelp-compare-param-fromid": "Сағыштырыу өсөн беренсе идентификатор.",
+ "apihelp-compare-param-fromrev": "Сағыштырыу өсөн беренсе редакция.",
+ "apihelp-compare-param-totitle": "Сағыштырыу өсөн икенсе баш һүҙ",
+ "apihelp-compare-param-toid": "Сағыштырыу өсөн икенсе идентификатор.",
+ "apihelp-compare-param-torev": "Сағыштырыу өсөн икенсе версия.",
+ "apihelp-compare-example-1": "1-се һәм 2-се версиялар араһында айырма эшләү",
+ "apihelp-createaccount-summary": "Ҡатнашыусыларҙың яңы иҫәп яҙыуҙарын булдырыу.",
+ "apihelp-createaccount-param-name": "Ҡатнашыусы исеме.",
+ "apihelp-createaccount-param-password": "Серһүҙ (ignored if <var>$1mailpassword</var> is set).",
+ "apihelp-createaccount-param-domain": "Тышҡы аутентификация домены (өҫтәмә).",
+ "apihelp-createaccount-param-token": "Беренсе ғариза буйынса алынған токендың иҫәп яҙмаһын булдырыу",
+ "apihelp-createaccount-param-email": "Ҡатнашыусының электрон почта адресы (өҫтәмә).",
+ "apihelp-createaccount-param-realname": "Ҡатнашыусының ысын исеме(өҫтәмә)",
+ "apihelp-createaccount-param-mailpassword": "Әгәр ҙә теләһә ниндәй мәғәнә ҡуйылһа, осраҡлы серһүҙ ҡулланыусыға ебәреләсәк",
+ "apihelp-createaccount-param-reason": "Журналға яҙыу өсөн иҫәп яҙмаһын булдырыуға өҫтәмә сәбәп",
+ "apihelp-createaccount-param-language": "Тел кодын ҡулланыусы өсөн һүҙһеҙ ҡуйырға (мотлаҡ түгел, эсенә алғандағында тел һүҙһеҙ файҙаланыла)",
+ "apihelp-createaccount-example-pass": "<kbd>test123</kbd> серһүҙле <kbd>testuser</kbd> ҡулланыусыһын булдырыу.",
+ "apihelp-createaccount-example-mail": "<kbd>testmailuser</kbd> ҡулланыусыһын һәм электрон почтаны булдырыу, осраҡлы серһеҙ яһау",
+ "apihelp-delete-summary": "Битте юйырға.",
+ "apihelp-delete-param-title": "Биттең баш һүҙен юйырға. <var>$1биттәрҙән</var> бергә файҙаланыу мөмкин түгел.",
+ "apihelp-delete-param-pageid": "Бит идентифакторы юйылыу өсөн биттәр. <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+ "apihelp-delete-param-reason": "Юйылыу сәбәбе. Әгәр ул ҡуйылмаған булһа, билдәләнмәгән сәбәп менән автоматик рәүештә юйыласаҡ.",
+ "apihelp-delete-param-tags": "Юйҙырылғандар журналындағы яҙмаларға мөрәжәғәт итер өсөн, билдәләрҙе үҙгәртергә.",
+ "apihelp-delete-param-watch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенә бит өҫтәргә.",
+ "apihelp-delete-param-watchlist": "Ағымдағы ҡулланыусының теҙмәһенән битте һүҙһеҙ өҫтәргә йәки юйырға, һылтанмаларҙы файҙаланығыҙ йәки сәғәтте алмаштырмаҫҡа.",
+ "apihelp-delete-param-unwatch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенән битте юйырға.",
+ "apihelp-delete-param-oldimage": "\nБында нисек ҡаралғанса, юйыу өсөн иҫке һүрәтләмәнең исеме [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]]",
+ "apihelp-delete-example-simple": "Юйырға: <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Юйырға <kbd>Main Page</kbd> сәбәп <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Был модуль һүндерелгән.",
+ "apihelp-edit-summary": "Биттәрҙе төҙөргә һәм мөхәррирләргә.",
+ "apihelp-edit-param-title": "Мөхәриррләү өсөн биттең исеме.<var>$1биттәрҙән</var> бергә файҙаланыу мөмкин түгел.",
+ "apihelp-edit-param-pageid": "Бит идентифакторын мөхәррирләү өсөн биттәр. <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+ "apihelp-edit-param-section": "Номерҙы айырыу. <KBD> 0 </ KBD> өҫкө секция өсөн, <KBD> яңы </ KBD> яңынан бүлеү өсөн.",
+ "apihelp-edit-param-sectiontitle": "Яңы бүлек өсөн баш исем.",
+ "apihelp-edit-param-text": "Биттең йөкмәткеһе.",
+ "apihelp-edit-param-summary": "Һығымтаны мөхәррирләргә. Шулай уҡ бүлектең $1section = яңы $1sectiontitle исеме ҡуйылмаған",
+ "apihelp-edit-param-tags": "Яңынан ҡарау өсөн, билдәләрҙе үҙгәртергә.",
+ "apihelp-edit-param-minor": "Әҙ генә үҙгәртеүҙәр.",
+ "apihelp-edit-param-notminor": "Ҙур ғына үҙгәреш (ғәҙәттә, «әҙ»ҙән күберәк төҙәтеү).",
+ "apihelp-edit-param-bot": "Төҙәтеүҙе бот яһаған тип билдәләү.",
+ "apihelp-edit-param-basetimestamp": "База тикшереү билдәһе тышҡы ҡаршылыҡтарҙы белеү өсөн файҙаланыла. \n\n[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]] ярҙамында алынырға мөмкин",
+ "apihelp-edit-param-starttimestamp": "Билдә, мөхәриррләү процессы башланған саҡта, мөхәриррләү ҡаршылыҡтары беленгәндә файҙаланыла. Тура килгән ғәмәл <вар> [[Special:ApiHelp/main|curtimestamp]] ярҙамы менән мөхәриррләү процессы башында алынырға мөмкин (мәҫәлән, мөхәриррләү бите эстәлеген тейәгәндә)",
+ "apihelp-edit-param-recreate": "Шул уҡ ваҡытта юйыласаҡ бит тураһындағы бар хаталарҙы ҡапларға.",
+ "apihelp-edit-param-createonly": "Булған битте мөхәррирләмәҫкә.",
+ "apihelp-edit-param-nocreate": "Сик күрһәтелмәһә, хаталарҙы ташларға.",
+ "apihelp-edit-param-watch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенә бит өҫтәргә.",
+ "apihelp-edit-param-unwatch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенән битте юйырға.",
+ "apihelp-edit-param-watchlist": "Ағымдағы ҡулланыусының теҙмәһенән битте һүҙһеҙ өҫтәргә йәки юйырға, һылтанмаларҙы файҙаланығыҙ йәки сәғәтте алмаштырмағыҙ.",
+ "apihelp-edit-param-md5": "\n\nMD5-хэш параметрының $1 text, йәки $1 prepend тексы һәм $1 appendtext параметрҙары бәйләнгән. \nҠуйылған булһа, әгәр хэш дөрөҫ булмаһа, мөхәррирләү эшләнмәйәсәк.",
+ "apihelp-edit-param-prependtext": "Был тексты биттең башына өҫтәгеҙ. $1text алмаштыра.",
+ "apihelp-edit-param-appendtext": "Был тексты биттең аҙағынаса өҫтәгеҙ.$1text алмаштыра.\n$1section -ды файҙаланығыҙ = яңы, яңы бүлек өҫтәү өсөн, ә был параметрға түгел.",
+ "apihelp-edit-param-undo": "Был версияны кире алырға. $1text,$1prependtext,$1appendtext алмаштыра.",
+ "apihelp-edit-param-undoafter": "$1undo- нан алып барлыҡ үҙгәртеүҙәрҙе кире алырға. Әгәр ул ҡуйылмаған булһа, бер тикшереүҙе кире алыу ҙа етә.",
+ "apihelp-edit-param-redirect": "Автоматик йүнәлтеүҙе рөхсәт итергә.",
+ "apihelp-edit-param-contentformat": "Текстҡа ҡуйыу өсөн йөкмәткенең сериализация форматы.",
+ "apihelp-edit-param-contentmodel": "Яңы йөкмәткенең контент моделе.",
+ "apihelp-edit-param-token": "Маркер һуңғы параметр сифатында ебәрелергә тейеш, йәки, һәрхәлдә $1text параметрынан һуң.",
+ "apihelp-edit-example-edit": "Битте мөхәррирләү",
+ "apihelp-edit-example-prepend": "Бит башына тылсымлы һүҙ ҡуйырға <kbd>_&#95;NOTOC_&#95;</kbd>.",
+ "apihelp-edit-example-undo": " 13579-ҙан 13585-кә тиклем төҙәтеүҙәрҙе кире алырға",
+ "apihelp-emailuser-summary": "Ҡатнашыусыға хат",
+ "apihelp-emailuser-param-target": "Ҡатнашыусы электрон хат ебәрә",
+ "apihelp-emailuser-param-subject": "Теманың баш һүҙе",
+ "apihelp-emailuser-param-text": "Хат эстәлеге",
+ "apihelp-emailuser-param-ccme": "Был хәбәрҙең копияһын миңә ебәрергә",
+ "apihelp-emailuser-example-email": "Ҡатнашыусыға хат ебәрергә <kbd>WikiSysop</kbd>текст <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "wikitext ҡалыптарын аса.",
+ "apihelp-expandtemplates-param-title": "Бит баш һүҙе",
+ "apihelp-expandtemplates-param-text": "Конвертлау өсөн викитекст",
+ "apihelp-expandtemplates-param-revid": "<code><nowiki>{{REVISIONID}}</nowiki></code> һәм шуға оҡшаған алмаштар өсөн ID-ны яңынан ҡарау",
+ "apihelp-expandtemplates-param-prop": "\nАлыу өсөн, мәғлүмәттең ҡайһы өлөшө\n\nИғтибар итегеҙ, әгәр бер ғәмәл дә һайланмаһа, ул саҡта һөҙөмтә вики- текстан торасаҡ, тик сығыу элекке форматта.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Киңәйтелгән викитекст",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Бар категориялар ҙа вики текста күрһәтелмәй индерелгән мәғлүмәттәрҙе күрһәтә",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Вики-текстағы билдәле киңәйтелгән тылсымлы һүҙҙәрҙең биттәре үҙенсәлеге.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Максималь ваҡыт үткәндән һуң һөҙөмтә кэштары яраҡһыҙ тип табылырға тейеш.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Бит өсөн үҙенсәлекле JavaScript үҙгәреүсән конфигурациялар бирә.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "JavaScriptтың JSON юлы һымаҡ үҙенсәлекле биттәренә алышына торған конфигурация бирә.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "XML керетелә торған мәғлүмәт ағасы (шәжәрәһе).",
+ "apihelp-expandtemplates-param-includecomments": "Сыҡҡанда HTML комментарийҙарына индереү кәрәкме?",
+ "apihelp-expandtemplates-example-simple": "Вики-тексты асығыҙ <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Һеҙҙең исемгә килгән тәҡдимдәргә ҡайтыу",
+ "apihelp-feedcontributions-param-feedformat": "Мәғлүмәттәр сығарыу форматы.",
+ "apihelp-feedcontributions-param-year": "Йылдан башлап (һәм элегерәк):",
+ "apihelp-feedcontributions-param-month": "Айҙан башлап (һәм элегерәк):",
+ "apihelp-feedcontributions-param-deletedonly": "Юйылған төҙәтеүҙәрҙе генә күрһәтергә.",
+ "apihelp-feedcontributions-param-toponly": "Һуңғы өлгө булған төҙәтеүҙәрҙе генә күрһәтергә",
+ "apihelp-feedcontributions-param-newonly": "Яңы бит яһаған төҙәтеүҙәрҙе генә күрһәтергә",
+ "apihelp-feedcontributions-param-showsizediff": "Өлгәоәр араһыдағы күләм айырмаһын күрһәтергә",
+ "apihelp-feedcontributions-example-simple": "Ҡулланыусының өлөшөн күрһәтергә <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Каналдың һуңғы үҙгәрештәрен кире ҡайтарырға.",
+ "apihelp-feedrecentchanges-param-feedformat": "Мәғлүмәттәр сығарыу форматы.",
+ "apihelp-feedrecentchanges-param-invert": "Һайланғандан башҡа исемдәр арауығы",
+ "apihelp-feedrecentchanges-param-limit": "Ҡайтарылған һөҙөмтәләрҙең максималь һаны.",
+ "apihelp-feedrecentchanges-param-from": "Теге ваҡыттын булған үҙгәрештәрҙе күрһәтергә",
+ "apihelp-feedrecentchanges-param-hideminor": "Бәләкәй төҙәтеүҙәрҙе йәшерергә",
+ "apihelp-feedrecentchanges-param-hidebots": "Робот эшләгән төҙәтеүҙәрҙе йәшерергә",
+ "apihelp-feedrecentchanges-param-hideanons": "Аноним ҡатнашыусылар төҙәтеүен йәшерергә",
+ "apihelp-feedrecentchanges-param-hideliu": "Теркәлгән ҡатнашыусылар өлөшөн йәшерергә",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Патрулләнгән төҙәтеүҙәрҙе йәшерергә",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ағымдаға ҡатнашыусы эшләгән үҙгәртеүҙәрҙе йәшерергә.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Тэг буйынса һөҙгөс",
+ "apihelp-feedrecentchanges-param-target": "Был биттән һылтанған биттәрҙә һуңғы үҙгәртеүҙәрҙе күрһәтергә",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Киреһенсә, был биткә һылтанма яһаған биттәрҙәге үҙгәртеүҙәрҙе күрһәтергә",
+ "apihelp-feedrecentchanges-example-simple": "Һуңғы үҙгәртеүҙәрҙе күрһәтергә.",
+ "apihelp-feedrecentchanges-example-30days": "30 көн арауығындағы һуңғы үҙгәртеүҙәрҙе күрһәтергә.",
+ "apihelp-feedwatchlist-summary": "Күҙәтеү каналын ҡайтара",
+ "apihelp-feedwatchlist-param-feedformat": "Мәғлүмәттәр сығарыу форматы.",
+ "apihelp-feedwatchlist-param-hours": "Был моменттан һуң күп сәғәт эсендә биттәр исемлеге үҙгәртелгән.",
+ "apihelp-feedwatchlist-param-linktosections": "Мөмкин булһа, үҙгәртеүҙәр булған бүлеккә тура һылтанма.",
+ "apihelp-feedwatchlist-example-default": "Күҙәтеү каналын күрһәтергә",
+ "apihelp-feedwatchlist-example-all6hrs": "Күҙәтеү биттәрендәге һуңғы 6 сәғәт эсендәге барлыҡ үҙгәрештәрҙе күрһәтергә.",
+ "apihelp-filerevert-summary": "Файлды иҫке версияға ҡайтарырға.",
+ "apihelp-filerevert-param-filename": "Префиксһыҙ файл исеме",
+ "apihelp-filerevert-param-comment": "Комментарий тейәргә",
+ "apihelp-filerevert-example-revert": "Кире <kbd>Wiki.png</kbd> юрауға <kbd>2011-03-05T15:27:40Z</kbd> ҡайтырға.",
+ "apihelp-help-summary": "Күрһәтелгән модулдәр өсөн белешмәне тасуирлау.",
+ "apihelp-help-param-modules": " Белешмәләр тасуирлау өсөн (күрһәткестәр <var>action</var> һәм <var>format</var> дәүмәленә, йәки <kbd>main</kbd>). Модулдәрҙе a <kbd>+</kbd> ярҙамында күрһәтә алаһығыҙ.",
+ "apihelp-help-param-submodules": "Модуль исеменән субмодулдәр өсөн ярҙам индерә",
+ "apihelp-help-param-recursivesubmodules": "Рекурсив рәүешле субмодулдәр өсөн ярҙам индерә.",
+ "apihelp-help-param-helpformat": "Һөҙөмтәгә ярҙам форматы",
+ "apihelp-help-example-main": "Төп модулгә ярҙам",
+ "apihelp-help-example-submodules": "<kbd>action=query</kbd> һәм уның барлыҡ субмодулдәренә ярҙам итегеҙ",
+ "apihelp-help-example-recursive": "Бар белешмә бер бүлектә.",
+ "apihelp-help-example-help": "Модулдең үҙ ярҙамына ярҙам итеү",
+ "apihelp-help-example-query": "Подмодулдәрҙең ике һорауына ярҙам итергә.",
+ "apihelp-imagerotate-summary": "Бер йәки бер нисә һүрәтте бороу.",
+ "apihelp-imagerotate-param-rotation": "Һүрәтте сәғәт йөрөшө буйынса нисә градусҡа борорға.",
+ "apihelp-imagerotate-example-simple": "<kbd>File:Example.png</kbd> на <kbd>90</kbd> градусҡа борорға.",
+ "apihelp-imagerotate-example-generator": "Бар һүрәттәрҙе лә <kbd>Category:Flip</kbd> на <kbd>180</kbd> градусҡа борорға.",
+ "apihelp-import-param-summary": "Йомғаҡты импортлау.",
+ "apihelp-import-param-xml": "Тултырылған XML-файл.",
+ "apihelp-import-param-interwikisource": "Интервики-импорт өсөн: Викинан импорт.",
+ "apihelp-import-param-interwikipage": "Интервики-импорт өсөн: битте импортлау.",
+ "apihelp-import-example-import": "Импортларға [[meta:Help:ParserFunctions]] 100 исемдәр арауығында тулы тарихы менән.",
+ "apihelp-login-param-name": "Ҡатнашыусы исеме.",
+ "apihelp-login-param-password": "Серһүҙ.",
+ "apihelp-login-param-domain": "Домен (мотлаҡ түгел).",
+ "apihelp-login-param-token": "Беренсе һорау ваҡытынла алынған логин маркер",
+ "apihelp-login-example-gettoken": "Системаға инеү маркерын алыу.",
+ "apihelp-login-example-login": "Танылыу.",
+ "apihelp-logout-summary": "Сығырға һәм сессия мәғлүмәтен юйырға.",
+ "apihelp-logout-example-logout": "Ағымдағы ҡулланыусының киткән саҡта инеүе",
+ "apihelp-managetags-summary": "Тегтарҙы үҙгәртеү менән бәйле идара итеү мәсьәләләрен хәл итеү",
+ "apihelp-managetags-param-reason": "\nБилдәне булдырыу, юйҙырыу, активациялау һәм деактивациялау өсөн мотлаҡ булмаған сәбәп",
+ "apihelp-mergehistory-summary": "Үҙгәртеүҙәр тарихын берләштереү.",
+ "apihelp-mergehistory-param-from": "Тарихты берләштергән бит атамаһы. <var>$1fromid</var> менән бергә ҡуланыуы мөмкин түгел.",
+ "apihelp-mergehistory-param-fromid": "Тарихты берләштергән бит атамаһы. <var>$1fromid</var> менән бергә ҡуланыуы мөмкин түгел.",
+ "apihelp-mergehistory-param-to": "Тарихты берләштергән бит атамаһы. <var>$1fromid</var> менән бергә ҡуланыуы мөмкин түгел.",
+ "apihelp-mergehistory-param-toid": "Тарихты берләштергән бит атамаһы. <var>$1fromid</var> менән бергә ҡуланыуы мөмкин түгел.",
+ "apihelp-mergehistory-param-reason": "Тарихты берләштереү сәбәбе",
+ "apihelp-move-summary": "Биттең исемен үҙгәртергә",
+ "apihelp-move-param-from": "Мөхәриррләү өсөн биттең исеме.<var>$1биттәрҙән</var> бергә файҙаланыу мөмкин түгел.",
+ "apihelp-move-param-fromid": "Бит идентифакторын мөхәррирләү өсөн биттәр. <var>$1title</var> менән бергә ҡулланыла алмайҙар.",
+ "apihelp-move-param-to": "Исемен үҙгәртергә тейешле биттең баш һүҙе",
+ "apihelp-move-param-reason": "Үҙгәртеү сәбәбе",
+ "apihelp-move-param-movetalk": "Фекер алышыу бите булһа, исемен үҙгәртергә.",
+ "apihelp-move-param-movesubpages": "Мөмкин булһа, ярҙамсы биттең исемен үҙгәртергә.",
+ "apihelp-move-param-noredirect": "Йүнәлтеүҙәр ҡуймаҫҡа",
+ "apihelp-move-param-watch": "Ағымдағы ҡулланыусының күҙәтеү битенә бит һәм йүнәлтеү өҫтәргә.",
+ "apihelp-move-param-unwatch": "Ағымдағы ҡулланыусының күҙәтеү битендә битте һәм йүнәлтеүҙе юйырға.",
+ "apihelp-move-param-watchlist": "Ағымдағы ҡулланыусының теҙмәһенән битте һүҙһеҙ өҫтәргә йәки юйырға, һылтанмаларҙы файҙаланығыҙ йәки сәғәтте алмаштырмаҫҡа.",
+ "apihelp-move-param-ignorewarnings": "Бөтә иҫкәрмәләргә иғтибар итмәҫкә",
+ "apihelp-move-example-move": "Исемен үҙгәртергә <kbd>Badtitle</kbd> <kbd>Goodtitle</kbd> йүнәлтеү ҡуймаҫҡа.",
+ "apihelp-opensearch-summary": "OpenSearch протоколын ҡулланып вики эҙләү.",
+ "apihelp-opensearch-param-search": "Эҙләү юлы.",
+ "apihelp-opensearch-param-limit": "Ҡайтарылған һөҙөмтәләрҙең максималь һаны.",
+ "apihelp-opensearch-param-namespace": "Эҙләү өсөн исемдәр арауығы",
+ "apihelp-opensearch-param-format": "Мәғлүмәттәр сығарыу форматы.",
+ "apihelp-opensearch-example-te": "<KBD> Te </ KBD> менән башланған биттәрҙе табырға.",
+ "apihelp-options-param-reset": "Килешеү буйынса көйләүҙәргә күсергә.",
+ "apihelp-options-example-reset": "Бөтә көйләүҙәрҙе ташларға",
+ "apihelp-paraminfo-summary": "API модуле тураһында мәғлүмәт алырға.",
+ "apihelp-paraminfo-param-helpformat": "Белешмә юлы форматы.",
+ "apihelp-parse-param-prop": "Ҡайһы мәғлүмәтте алырға:",
+ "apihelp-parse-paramvalue-prop-langlinks": "Вики-текстың синтаксик анализында тышҡы ссылкалар бирә.",
+ "apihelp-parse-paramvalue-prop-links": "Вики-текстың синтаксик анализында тышҡы ссылкалар бирә.",
+ "apihelp-parse-paramvalue-prop-templates": "Вики-текстың синтаксик анализ ҡалыбын бирә.",
+ "apihelp-parse-paramvalue-prop-images": "Вики-текстың синтаксик анализында һәрәттәр бирә.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Вики-текстың синтаксик анализында тышҡы ссылкалар бирә.",
+ "apihelp-parse-paramvalue-prop-sections": "Вики-текстың синтаксик анализында секциялар бирә.",
+ "apihelp-parse-paramvalue-prop-revid": "Тикшерелгән биттәргә версиялар идентификаторын өҫтәй.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Вики-текстың синтаксик анализына исем ҡуя.",
+ "apihelp-parse-paramvalue-prop-headitems": "<код> & ЛТ -ҡа һалыу өсөн элементтар бирә; башы & GT; биттең </ код>",
+ "apihelp-parse-paramvalue-prop-headhtml": "Айырылған <код> & лт бирә; & баштары GТ; биттең </ код>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Бит өсөн үҙенсәлекле JavaScript үҙгәреүсән конфигурациялар бирә. Ҡулланыр өсөн, <code>mw.config.set()</code> ҡабыҙырға.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "JavaScriptтың JSON юлы һымаҡ үҙенсәлекле биттәренә алышына торған конфигурация бирә.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Вики-текстың синтаксик анализында интервиктарға һылтанма бирә.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Һығымта яҺау өсөн тәүге вики-тексты күрһәтә",
+ "apihelp-parse-paramvalue-prop-properties": "Вики-текстың синтаксик анализында билдәләнгән төрлө сифаттарҙы бирә.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Структура һымаҡ итеп төплө отчет бирә. $1disablelimitreport</ вар> <алышыныусы> ҡуйылған ваҡытта бер ниндәй мәғлүмәт тә бирмәй.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Төплө отчеттың HTML версияһын бирә. <переменная>$1disablelimitreport </ вар> ҡуйылған булһа,бер мәғлүмәт тә бирмәй.",
+ "apihelp-parse-param-disablepp": "Урынына <var>$1disablelimitreport</var> ҡулланырға.",
+ "apihelp-parse-param-preview": "Алдан ҡарау режимында синтаксик анализ",
+ "apihelp-parse-example-page": "Битте тикшереү.",
+ "apihelp-parse-example-text": "Тикшереү: wikitext.",
+ "apihelp-parse-example-summary": "Һығымтаны тикшереү.",
+ "apihelp-patrol-param-rcid": "Яңы ID үҙгәртеүҙәрҙе патрулләү өсөн",
+ "apihelp-patrol-param-revid": "ID мөхәррирҙе патулләү",
+ "apihelp-patrol-param-tags": "Юйҙырылғандар журналындағы яҙмаларға мөрәжәғәт итер өсөн, билдәләрҙе үҙгәртергә.",
+ "apihelp-patrol-example-rcid": "Һуңғы үҙгәрештәрҙе ҡарау.",
+ "apihelp-patrol-example-revid": "Яңынан ҡарау.",
+ "apihelp-protect-summary": "Битте һаҡлау кимәлен үҙгәртергә",
+ "apihelp-protect-param-title": "Бит атамаһы. $1pageid менән бергә ҡулланылмай.",
+ "apihelp-protect-param-reason": "(ООН) һағы сәбәптәре.",
+ "apihelp-protect-param-tags": "Юйҙырылғандар журналындағы яҙмаларға мөрәжәғәт итер өсөн, билдәләрҙе үҙгәртергә.",
+ "apihelp-protect-param-watchlist": "Ағымдағы ҡулланыусының теҙмәһенән битте һүҙһеҙ өҫтәргә йәки юйырға, һылтанмаларҙы файҙаланығыҙ йәки сәғәтте алмаштырмаҫҡа.",
+ "apihelp-protect-example-protect": "Битте һаҡларға.",
+ "apihelp-protect-example-unprotect": "<kbd>all</kbd> сикләүҙәрен (йәғни һәр береһе эшләй ала) ҡуйып, бит һағын асырға.",
+ "apihelp-protect-example-unprotect2": "Бер ниндәй сикләүҙәр ҡуймай биттән һаҡлауҙы алырға.",
+ "apihelp-purge-param-forcelinkupdate": "Таблицалар бәйләнешен яңыртыу.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Һылтанманы һәм таблицаны яңыртығыҙ һәм был битте шаблон итеп ҡулланған башҡа биттәр өсөн һылтанмаларҙы ла яңыртығыҙ.",
+ "apihelp-query-param-list": "Ниндәй исемлекте ҡулланырға",
+ "apihelp-query-param-meta": "Ниндәй матамәғлүмәт ҡулланырға",
+ "apihelp-query+allcategories-summary": "Бөтә категорияларҙы иҫәпләргә",
+ "apihelp-query+allcategories-param-from": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allcategories-param-to": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allcategories-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+allcategories-param-dir": "Сортлау йүнәлештәре.",
+ "apihelp-query+allcategories-param-limit": "Нисә категорияны кире ҡайтарырға",
+ "apihelp-query+allcategories-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Категорияларға биттәр һаны өҫтәү",
+ "apihelp-query+allcategories-example-size": "Биттәр һаны буйынса мәғлүмәтле категориялар исемлеге.",
+ "apihelp-query+allcategories-example-generator": "<kbd>исемлек</kbd> категориялар битенән мәғлүмәт алырға.",
+ "apihelp-query+alldeletedrevisions-summary": "Бар мөхәррирләү исемлеге ҡулланыусы тарафынан юйылған.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "<var>$3ҡулланыусының</var> менән генә ҡулланыла ала.",
+ "apihelp-query+alldeletedrevisions-param-end": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+alldeletedrevisions-param-user": "Бары тик был ҡулланыусының үҙгәртеүҙәр исемлеге.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Бары тик был исемдәр арауығындағы биттәр исемлеге.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Төп исемдәр арауығында юйылған тәүге 50 үҙгәртеү исемлеге.",
+ "apihelp-query+allfileusages-summary": "Юйылғандар менән бергә барлыҡ файлдар тәртибе исемлеге.",
+ "apihelp-query+allfileusages-param-from": "Һанауҙы башлау өсөн файл атамаһы.",
+ "apihelp-query+allfileusages-param-to": "Һанауҙы туҡтатыу файлы атамаһы.",
+ "apihelp-query+allfileusages-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+allfileusages-param-prop": "Ҡайһы мәғлүмәтте күрһәтергә:",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Файл атамаһына ҡуша.",
+ "apihelp-query+allfileusages-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+allfileusages-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+allfileusages-example-unique": "Атамаларҙың уҙенсәлекле файлдары исемлеге.",
+ "apihelp-query+allfileusages-example-unique-generator": "Төшөп ҡалғандарҙы айырып, барлыҡ исем-һылтанмаларҙы алырға.",
+ "apihelp-query+allfileusages-example-generator": "Һылтанмалы биттәр бар.",
+ "apihelp-query+allimages-summary": "Бер-бер артлы бөтә образдарҙы һанап сығырға.",
+ "apihelp-query+allimages-param-sort": "Сортировкалау үҙенсәлектәре.",
+ "apihelp-query+allimages-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+allimages-param-minsize": "Һүрәттәр лимиты (байттарҙа).",
+ "apihelp-query+allimages-param-maxsize": "Бар һүрәттәр лимиты (байттарҙа).",
+ "apihelp-query+allimages-param-limit": "Кире ҡайтыу өсөн образдар һаны.",
+ "apihelp-query+allimages-example-B": "<kbd>Б</kbd> хәрефенән башланған файлдар исемлеген күрһәтергә.",
+ "apihelp-query+allimages-example-generator": "<kbd>Б</kbd> хәрефенән башланған файлдар исемлеген күрһәтергә.",
+ "apihelp-query+alllinks-summary": "Бирелгән исемдәр арауығына йүнәлткән барлыҡ һылтанмаларҙы һанап сығырға.",
+ "apihelp-query+alllinks-param-from": "Һанауҙы башлау өсөн һылтанма атамаһы.",
+ "apihelp-query+alllinks-param-to": "Һанауҙы туҡтатыу һылтанмаһы атамаһы.",
+ "apihelp-query+alllinks-param-prefix": "Был мәғәнәнән башланған бәйләнешле бар атамаларҙы эҙләргә.",
+ "apihelp-query+alllinks-param-prop": "Ҡайһы мәғлүмәтте күрһәтергә:",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Һылтанма атамаһын ҡуша.",
+ "apihelp-query+alllinks-param-namespace": "Һанау өсөн исемдәр арауығы.",
+ "apihelp-query+alllinks-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+alllinks-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+alllinks-example-unique": "Атамаларҙың уҙенсәлекле файлдары исемлеге.",
+ "apihelp-query+alllinks-example-unique-generator": "Төшөп ҡалғандарҙы айырып, барлыҡ исем-һылтанмаларҙы алырға.",
+ "apihelp-query+alllinks-example-generator": "Һылтанмалы биттәр бар.",
+ "apihelp-query+allmessages-summary": "Был сайттан хәбәр ҡайтарыу.",
+ "apihelp-query+allmessages-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+allmessages-param-args": "Аргументтар Хәбәрҙәрҙә биреләсәк.",
+ "apihelp-query+allpages-param-from": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allpages-param-to": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allpages-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+allpages-param-namespace": "Һанау өсөн исемдәр арауығы.",
+ "apihelp-query+allpages-param-minsize": "Һүрәттәр лимиты (байттарҙа).",
+ "apihelp-query+allpages-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+allpages-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+allpages-example-B": "<kbd>Б</kbd> хәрефенән башланған файлдар исемлеген күрһәтергә.",
+ "apihelp-query+allpages-example-generator": "<kbd>Б</kbd> хәрефенән башланған файлдар исемлеген күрһәтергә.",
+ "apihelp-query+allredirects-param-from": "Һанауҙы туҡтатыу файлы атамаһы.",
+ "apihelp-query+allredirects-param-to": "Һанауҙы туҡтатыу файлы атамаһы.",
+ "apihelp-query+allredirects-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+allredirects-param-prop": "Ҡайһы мәғлүмәтте күрһәтергә:",
+ "apihelp-query+allredirects-param-namespace": "Һанау өсөн исемдәр арауығы.",
+ "apihelp-query+allredirects-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+allredirects-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+allredirects-example-generator": "Һылтанмалы биттәр бар.",
+ "apihelp-query+allrevisions-param-start": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allrevisions-param-end": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allrevisions-param-user": "Бары тик был ҡулланыусының үҙгәртеүҙәр исемлеге.",
+ "apihelp-query+allrevisions-param-excludeuser": "Бары тик был ҡулланыусының үҙгәртеүҙәр исемлеге.",
+ "apihelp-query+alltransclusions-param-to": "Һанауҙы туҡтатыу һылтанмаһы атамаһы.",
+ "apihelp-query+alltransclusions-param-prop": "Ҡайһы мәғлүмәтте күрһәтергә:",
+ "apihelp-query+alltransclusions-param-namespace": "Һанау өсөн исемдәр арауығы.",
+ "apihelp-query+alltransclusions-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+alltransclusions-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+alltransclusions-example-generator": "Һылтанмалы биттәр бар.",
+ "apihelp-query+allusers-param-from": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allusers-param-to": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+allusers-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+allusers-param-dir": "Сортлау йүнәлештәре.",
+ "apihelp-query+allusers-param-prop": "Ҡайһы мәғлүмәтте күрһәтергә:",
+ "apihelp-query+backlinks-param-title": "Мөхәриррләү өсөн биттең исеме.<var>$1биттәрҙән</var> бергә файҙаланыу мөмкин түгел.",
+ "apihelp-query+backlinks-param-pageid": "Бит идентифакторын мөхәррирләү өсөн биттәр. <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+ "apihelp-query+backlinks-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+blocks-param-start": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+blocks-param-end": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+blocks-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+blocks-example-simple": "Берләшмә исемлеге",
+ "apihelp-query+categories-param-limit": "Нисә категорияны кире ҡайтарырға",
+ "apihelp-query+categories-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+categorymembers-param-pageid": "Бит идентифакторы юйылыу өсөн биттәр. <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+ "apihelp-query+categorymembers-param-prop": "Ҡайһы мәғлүмәтте күрһәтергә:",
+ "apihelp-query+categorymembers-param-limit": "Кире ҡайтарылған белдереүҙәрҙең иң күп һаны",
+ "apihelp-query+categorymembers-param-sort": "Сортҡа бүлеү үҙенсәлеге",
+ "apihelp-query+contributors-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+deletedrevisions-param-user": "Бары тик был ҡулланыусының үҙгәртеүҙәр исемлеге.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Бары тик был ҡулланыусының үҙгәртеүҙәр исемлеге.",
+ "apihelp-query+deletedrevs-param-start": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+deletedrevs-param-end": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+deletedrevs-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+deletedrevs-param-user": "Бары тик был ҡулланыусының үҙгәртеүҙәр исемлеге.",
+ "apihelp-query+duplicatefiles-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+duplicatefiles-example-generated": "Поиск дубликатов всех файлов.",
+ "apihelp-query+embeddedin-param-title": "Мөхәриррләү өсөн биттең исеме.<var>$1биттәрҙән</var> бергә файҙаланыу мөмкин түгел.",
+ "apihelp-query+embeddedin-param-pageid": "Бит идентифакторын мөхәррирләү өсөн биттәр. <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+ "apihelp-query+embeddedin-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+embeddedin-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+exturlusage-param-limit": "Күпме һылтанмаларҙы кире ҡайтарырға.",
+ "apihelp-query+filearchive-param-from": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+filearchive-param-to": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+filearchive-param-prefix": "Был мәғәнәнән башланған бар атамаларҙы категориялар буйынса эҙләргә.",
+ "apihelp-query+filearchive-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+fileusage-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+fileusage-param-limit": "Күпме һылтанмаларҙы кире ҡайтарырға.",
+ "apihelp-query+imageinfo-param-prop": "Ҡайһы мәғлүмәтте алырға:",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Файл атамаһына ҡуша.",
+ "apihelp-query+images-param-limit": "Күпме һылтанмаларҙы кире ҡайтарырға.",
+ "apihelp-query+images-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+imageusage-param-title": "Мөхәриррләү өсөн биттең исеме.<var>$1биттәрҙән</var> бергә файҙаланыу мөмкин түгел.",
+ "apihelp-query+imageusage-param-pageid": "Бит идентифакторын мөхәррирләү өсөн биттәр. <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+ "apihelp-query+imageusage-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+info-paramvalue-prop-protection": "Битте һаҡлау кимәлен үҙгәртергә",
+ "apihelp-query+iwbacklinks-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+iwbacklinks-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Файл атамаһына ҡуша.",
+ "apihelp-query+iwlinks-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+langbacklinks-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+langbacklinks-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+links-param-limit": "Күпме һылтанмаларҙы кире ҡайтарырға.",
+ "apihelp-query+links-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+linkshere-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+logevents-summary": "Журналдарҙан ваҡиға алыу.",
+ "apihelp-query+logevents-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+logevents-param-start": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+logevents-param-end": "Иҫәп күсереү тамамланған ваҡыт билдәһе",
+ "apihelp-query+logevents-example-simple": " Һуңғы теркәлгән ваҡиғалар исемлеге.",
+ "apihelp-query+pagepropnames-param-limit": "Кире ҡайтарылған белдереүҙәрҙең иң күп һаны",
+ "apihelp-query+pagepropnames-example-simple": "Тәүге 10 исем сифатын алыу.",
+ "apihelp-query+pageswithprop-param-prop": "Ҡайһы мәғлүмәтте күрһәтергә:",
+ "apihelp-query+pageswithprop-param-limit": "Кире ҡайтарылған белдереүҙәрҙең иң күп һаны",
+ "apihelp-query+pageswithprop-param-dir": "Ниндәй йүнәлешкә айырырға",
+ "apihelp-query+prefixsearch-param-search": "Эҙләү юлы.",
+ "apihelp-query+prefixsearch-param-namespace": "Эҙләү өсөн исемдәр арауығы",
+ "apihelp-query+prefixsearch-param-limit": "Ҡайтарылған һөҙөмтәләрҙең максималь һаны.",
+ "apihelp-query+prefixsearch-param-offset": "Төшөрөп ҡалдырыу өсөн һөҙөмтә иҫәбе",
+ "apihelp-query+protectedtitles-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+protectedtitles-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+querypage-param-limit": "Төшөрөп ҡалдырыу өсөн һөҙөмтә иҫәбе",
+ "apihelp-query+recentchanges-param-start": "Иҫәп күсереү башланған ваҡыт билдәһе",
+ "apihelp-query+recentchanges-param-end": "Иҫәп күсереү тамамланған ваҡыт билдәһе",
+ "apihelp-query+recentchanges-param-user": "Бары тик был ҡулланыусының үҙгәртеүҙәр исемлеге.",
+ "apihelp-query+recentchanges-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+recentchanges-param-type": "Ниндәй төрҙәр үҙгәртеүҙе күрһәтергө",
+ "apihelp-query+recentchanges-example-simple": "Һуңғы үҙгәртеүҙәрҙе күрһәтергә.",
+ "apihelp-query+redirects-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+redirects-param-limit": "Күпме һылтанмаларҙы кире ҡайтарырға.",
+ "apihelp-query+revisions-example-last5": "Һуңғы 5 <kbd>Main Page</kbd> версияны алырға.",
+ "apihelp-query+revisions-example-first5": "Тәүге 5 <kbd>Main Page</kbd> версияны алырға.",
+ "apihelp-query+search-param-info": "Ниндәй матамәғлүмәт ҡулланырға",
+ "apihelp-query+search-param-prop": "Ниндәй үҙенсәлекте ҡайтарырға",
+ "apihelp-query+search-param-limit": "Нисә битте тергеҙергә?",
+ "apihelp-query+tags-summary": "Үҙгәртелгән тамғалар исемлеге.",
+ "apihelp-query+tags-param-limit": "Кире ҡайтарылған белдереүҙәрҙең иң күп һаны",
+ "apihelp-query+tags-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+tags-example-simple": "Аңлайышлы тамғалар бите",
+ "apihelp-query+templates-param-limit": "Күпме һылтанмаларҙы кире ҡайтарырға.",
+ "apihelp-query+templates-param-dir": "Һанау йүнәлеше.",
+ "apihelp-query+transcludedin-param-prop": "Ниндәй үҙенсәлек алырға:",
+ "apihelp-query+transcludedin-param-limit": "Күпме һылтанмаларҙы кире ҡайтарырға.",
+ "apihelp-query+usercontribs-summary": "Ҡулланыусының бөтә төҙәтеүҙәрен алыу",
+ "apihelp-query+usercontribs-param-limit": "Кире ҡайтарылған белдереүҙәрҙең иң күп һаны",
+ "apierror-timeout": "Көтөлгән ваҡыт эсендә сервер яуып бирмәне."
+}
diff --git a/www/wiki/includes/api/i18n/bcl.json b/www/wiki/includes/api/i18n/bcl.json
new file mode 100644
index 00000000..420aded3
--- /dev/null
+++ b/www/wiki/includes/api/i18n/bcl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geopoet"
+ ]
+ },
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Arinman na mga kategoriyang yaon sa pinapalaog na bakong representado sa laog kan wikitext na kinaluwasan.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Titulo (may espasyong ngaran sa enotang panigmitan) sa pagpopoon kan gikanang pinagkuanan.",
+ "apihelp-query+watchlistraw-param-totitle": "Titulo (may espasyong ngaran sa enotang panigmitan) sa pagpapauntok kan gikanang pinaghalean."
+}
diff --git a/www/wiki/includes/api/i18n/be-tarask.json b/www/wiki/includes/api/i18n/be-tarask.json
new file mode 100644
index 00000000..3dad8300
--- /dev/null
+++ b/www/wiki/includes/api/i18n/be-tarask.json
@@ -0,0 +1,62 @@
+{
+ "@metadata": {
+ "authors": [
+ "Red Winged Duck",
+ "Renessaince"
+ ]
+ },
+ "apihelp-main-summary": "",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Дакумэнтацыя]]\n* [[mw:API:FAQ|Частыя пытаньні]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Сьпіс рассылкі]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-аб’явы]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Памылкі і запыты]\n</div>\n<strong>Статус:</strong> усе магчымасьці на гэтай старонцы павінны працаваць, але API знаходзіцца ў актыўнай распрацоўцы і можа зьмяняцца ў любы момант. Падпісвайцеся на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ рассылку mediawiki-api-announce] дзеля паведамленьняў пра абнаўленьні.\n\n<strong>Памылковыя запыты:</strong> калі да API дасылаюцца памылковыя запыты, HTTP-загаловак будзе дасланы з ключом «MediaWiki-API-Error», а потым значэньне загалоўку і код памылкі будуць выстаўленыя на аднолькавае значэньне. Дзеля дадатковай інфармацыі глядзіце [[mw:API:Errors_and_warnings|API: Памылкі і папярэджаньні]].\n\n<strong>Тэставаньне:</strong> для зручнасьці праверкі API-запытаў, глядзіце [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Дзеяньне для выкананьня.",
+ "apihelp-main-param-format": "Фармат вываду.",
+ "apihelp-main-param-maxlag": "Максымальная затрымка можа ўжывацца, калі MediaWiki ўсталяваная ў клястэр з рэплікаванай базай зьвестак. Дзеля захаваньня дзеяньняў, якія выклікаюць затрымку рэплікацыі, гэты парамэтар можа прымусіць кліента чакаць, пакуль затрымка рэплікацыі меншая за яго значэньне. У выпадку доўгай затрымкі, вяртаецца код памылкі <samp>maxlag</samp> з паведамленьнем кшталту <samp>Чаканьне $host: $lag сэкундаў затрымкі</samp>.<br />Глядзіце [[mw:Manual:Maxlag_parameter|Інструкцыя:Парамэтар maxlag]] дзеля дадатковай інфармацыі.",
+ "apihelp-main-param-smaxage": "Выстаўце HTTP-загаловак кантролю кэшу <code>s-maxage</code> на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.",
+ "apihelp-main-param-maxage": "Выстаўляе HTTP-загаловак кантролю кэшу <code>max-age</code> на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.",
+ "apihelp-main-param-assert": "Упэўніцеся, што ўдзельнік увайшоў у сыстэму, калі зададзена <kbd>user</kbd>, або мае правы робата, калі зададзена <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Любое значэньне, пададзенае тут, будзе ўключанае ў адказ. Можа быць выкарыстанае для адрозьненьня запытаў.",
+ "apihelp-main-param-servedby": "Уключае ў вынік назву сэрвэра, які апрацаваў запыт.",
+ "apihelp-main-param-curtimestamp": "Уключае ў вынік пазнаку актуальнага часу.",
+ "apihelp-main-param-origin": "Пры звароце да API з дапамогай міждамэннага AJAX-запыту (CORS), выстаўце парамэтру значэньне зыходнага дамэну. Ён мусіць быць уключаны ў кожны папярэдні запыт і такім чынам мусіць быць часткай URI-запыту (ня цела POST).\n\nДля аўтэнтыфікаваных запытаў ён мусіць супадаць з адной з крыніц у загалоўку <code>Origin</code>, павінна быць зададзена нешта кшталту <kbd>https://en.wikipedia.org</kbd> або <kbd>https://meta.wikimedia.org</kbd>. Калі парамэтар не супадае з загалоўкам <code>Origin</code>, будзе вернуты адказ з кодам памылкі 403. Калі парамэтар супадае з загалоўкам <code>Origin</code> і крыніца знаходзіцца ў белым сьпісе, будуць выстаўленыя загалоўкі <code>Access-Control-Allow-Origin</code> і <code>Access-Control-Allow-Credentials</code>.\n\nДля неаўтэнтыфікаваных запытаў выстаўце значэньне <kbd>*</kbd>. Гэта прывядзе да выстаўленьня загалоўку <code>Access-Control-Allow-Origin</code>, але <code>Access-Control-Allow-Credentials</code> будзе мець значэньне <code>false</code> і ўсе зьвесткі пра карыстальніка будуць абмежаваныя.",
+ "apihelp-main-param-uselang": "Мова для выкарыстаньня ў перакладах паведамленьняў. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> з <kbd>siprop=languages</kbd> вяртае сьпіс кодаў мовы, або трэба вызначыць <kbd>user</kbd>, каб ужываць налады мовы цяперашняга карыстальніка, або вызначыць <kbd>content</kbd>, каб ужываць мову зьместу гэтай вікі.",
+ "apihelp-block-summary": "Блякаваньне ўдзельніка.",
+ "apihelp-block-param-user": "Імя ўдзельніка, IP-адрас або IP-дыяпазон, якія вы хочаце заблякаваць. Ня можа быць ужыты разам з <var>$1userid</var>",
+ "apihelp-block-param-expiry": "Час заканчэньня. Можа быць адносным (напрыклад, <kbd>5 months</kbd> або <kbd>2 weeks</kbd>) ці абсалютным (напрыклад, <kbd>2014-09-18T12:34:56Z</kbd>). Калі выстаўлены на <kbd>infinite</kbd>, <kbd>indefinite</kbd> ці <kbd>never</kbd>, блякаваньне будзе бестэрміновым.",
+ "apihelp-block-param-reason": "Прычына блякаваньня.",
+ "apihelp-block-param-anononly": "Заблякаваць толькі ананімных удзельнікаў (напрыклад, забараніць ананімныя праўкі з гэтага IP-адрасу).",
+ "apihelp-block-param-nocreate": "Забарона стварэньня рахункаў.",
+ "apihelp-block-param-autoblock": "Аўтаматычна блякаваць апошні ўжыты IP-адрас, а таксама ўсе наступныя IP-адрасы, зь якіх будуць спробы ўваходу.",
+ "apihelp-block-param-noemail": "Забараняе ўдзельніку дасылаць лісты электроннай пошты празь вікі (трэба мець права <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Схаваць імя ўдзельніка з журналу блякаваньняў (патрабуе права <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Дазволіць удзельніку рэдагаваць уласную старонку гутарак (залежыць ад <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Калі ўдзельнік ужо заблякаваны, перапісаць дзейнае блякаваньне.",
+ "apihelp-block-param-watchuser": "Назіраць за старонкай удзельніка або старонкай IP-адрасу, а таксама старонкай гутарак.",
+ "apihelp-block-example-ip-simple": "Заблякаваць IP-адрас <kbd>192.0.2.5</kbd> на тры дні з прычынай <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Заблякаваць удзельніка <kbd>Vandal</kbd> назаўсёды з прычынай <kbd>Vandalism</kbd>, а таксама забараніць стварэньне новых рахункаў і адсылку лістоў электроннай поштай.",
+ "apihelp-clearhasmsg-summary": "Ачышчае сьцяг <code>hasmsg</code> для актуальнага карыстальніка.",
+ "apihelp-clearhasmsg-example-1": "Ачыстка сьцягу <code>hasmsg</code> для актуальнага карыстальніка",
+ "apihelp-compare-summary": "Атрымаць розьніцу паміж 2 старонкамі.",
+ "apihelp-compare-extended-description": "Вы мусіце перадаць нумар вэрсіі, назву або ID старонкі для абодвух «from» і «to».",
+ "apihelp-compare-param-fromtitle": "Першая назва для параўнаньня.",
+ "apihelp-compare-param-fromid": "ID першай старонкі для параўнаньня.",
+ "apihelp-compare-param-fromrev": "Першая вэрсія для параўнаньня.",
+ "apihelp-compare-param-totitle": "Другая назва для параўнаньня.",
+ "apihelp-compare-param-toid": "ID другой старонкі для параўнаньня.",
+ "apihelp-compare-param-torev": "Другая вэрсія для параўнаньня.",
+ "apihelp-compare-example-1": "Паказвае розьніцу паміж вэрсіямі 1 і 2",
+ "apihelp-createaccount-summary": "Стварэньне новага рахунку ўдзельніка.",
+ "apihelp-createaccount-param-name": "Імя ўдзельніка.",
+ "apihelp-createaccount-param-password": "Пароль (ігнаруецца, калі выстаўлена <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Дамэн для вонкавай аўтэнтыфікацыі (неабавязкова).",
+ "apihelp-createaccount-param-token": "Маркер стварэньня рахунку, атрыманы пры першым запыце.",
+ "apihelp-createaccount-param-email": "Адрас электроннай пошты ўдзельніка (неабавязкова).",
+ "apihelp-createaccount-param-realname": "Сапраўднае імя ўдзельніка (неабавязкова).",
+ "apihelp-createaccount-param-mailpassword": "Калі ўсталяванае любое значэньне, выпадковы пароль будзе дасланы карыстальніку на электронную пошту.",
+ "apihelp-createaccount-param-reason": "Неабавязковая прычына стварэньня рахунку, якая будзе запісаная ў журнал.",
+ "apihelp-createaccount-param-language": "Моўны код, які будзе выстаўлены ўдзельніку па змоўчаньні (неабавязкова, па змоўчаньні мова зьместу).",
+ "apihelp-createaccount-example-pass": "Стварэньне ўдзельніка <kbd>testuser</kbd> з паролем <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Стварэньне ўдзельніка <kbd>testmailuser</kbd> і адпраўка выпадковага паролю электроннай поштай.",
+ "apihelp-edit-param-text": "Зьмест старонкі.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Назва кожнай старонкі.",
+ "apihelp-query+transcludedin-param-limit": "Колькі вяртаць.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Дублюе загаловак <code>Accept-Language</code>, адасланы кліентам у структураваным фармаце."
+}
diff --git a/www/wiki/includes/api/i18n/bg.json b/www/wiki/includes/api/i18n/bg.json
new file mode 100644
index 00000000..3839bda6
--- /dev/null
+++ b/www/wiki/includes/api/i18n/bg.json
@@ -0,0 +1,66 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vodnokon4e",
+ "StanProg",
+ "Spas.Z.Spasov"
+ ]
+ },
+ "apihelp-main-param-action": "Кое действие да се извърши.",
+ "apihelp-block-summary": "Блокиране на потребител.",
+ "apihelp-block-param-user": "Потребителско име, IP адрес или диапазон от IP адреси, които искате да блокирате.",
+ "apihelp-block-param-reason": "Причина за блокиране.",
+ "apihelp-block-param-nocreate": "Забрана за създаване на потребителски сметки.",
+ "apihelp-block-param-hidename": "Скрива потребителското име от дневника на блокиранията. (Изисква право <code>hideuser</code>)",
+ "apihelp-createaccount-summary": "Създаване на нова потребителска сметка.",
+ "apihelp-createaccount-param-name": "Потребителско име.",
+ "apihelp-createaccount-param-email": "Адрес на електронна поща на потребителя (незадължително).",
+ "apihelp-createaccount-param-realname": "Истинско име на потребителя (незадължително).",
+ "apihelp-delete-summary": "Изтриване на страница.",
+ "apihelp-edit-summary": "Създаване и редактиране на страници.",
+ "apihelp-edit-param-text": "Съдържание на страница.",
+ "apihelp-edit-param-minor": "Малка промяна.",
+ "apihelp-edit-param-notminor": "Значителна промяна.",
+ "apihelp-edit-param-bot": "Отбелязване на редакцията като бот.",
+ "apihelp-emailuser-summary": "Изпращане на е-писмо до потребител.",
+ "apihelp-emailuser-param-target": "Получател на имейла.",
+ "apihelp-emailuser-param-subject": "Заглавие на тема.",
+ "apihelp-emailuser-param-text": "Съдържание на писмото.",
+ "apihelp-emailuser-param-ccme": "Изпращане на копие от това писмо до мен.",
+ "apihelp-expandtemplates-param-title": "Заглавие на страница.",
+ "apihelp-feedcontributions-param-year": "От година (и по-рано).",
+ "apihelp-feedcontributions-param-month": "От месец (и по-рано).",
+ "apihelp-feedcontributions-param-tagfilter": "Филтриране на приноси, които имат тези етикети.",
+ "apihelp-feedcontributions-param-deletedonly": "Покажи само изтритите приноси.",
+ "apihelp-feedcontributions-param-newonly": "Показване само на редакции за създаване на страници.",
+ "apihelp-feedcontributions-param-hideminor": "Скриване на малки промени.",
+ "apihelp-feedcontributions-param-showsizediff": "Показване на размера на разликите между версиите.",
+ "apihelp-feedrecentchanges-param-hideminor": "Скриване на малки промени.",
+ "apihelp-feedrecentchanges-param-hidebots": "Скриване на промени, направени от ботове.",
+ "apihelp-feedrecentchanges-param-hideanons": "Скриване на промени, направени от анонимни потребители.",
+ "apihelp-feedrecentchanges-param-hideliu": "Скриване на промени, направени от регистрирани потребители.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Скриване на проверени промени.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Скриване на промените, направени от настоящия потребител.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Филтриране по етикети.",
+ "apihelp-feedrecentchanges-example-simple": "Показване на последни промени.",
+ "apihelp-feedrecentchanges-example-30days": "Показване на последните промени в рамките на 30 дни.",
+ "apihelp-login-param-name": "Потребителско име.",
+ "apihelp-login-param-password": "Парола.",
+ "apihelp-login-param-domain": "Домейн (по избор).",
+ "apihelp-move-summary": "Преместване на страница.",
+ "apihelp-move-param-reason": "Причина за преименуването.",
+ "apihelp-move-param-movetalk": "Преименуване на беседата, ако има такава.",
+ "apihelp-move-param-movesubpages": "Преименуване на подстраници, ако е приложимо.",
+ "apihelp-move-param-noredirect": "Не създавай пренасочване.",
+ "apihelp-move-param-ignorewarnings": "Пренебрегване на всякакви предупреждения.",
+ "apihelp-protect-example-protect": "Защита на страница.",
+ "apihelp-query+allusers-param-prefix": "Търсене за всички потребители, които започват с тази стойност.",
+ "apihelp-query+allusers-param-dir": "Посока на сортиране.",
+ "apihelp-query+allusers-param-group": "Включва само потребители от определените групи.",
+ "apihelp-query+allusers-param-excludegroup": "Изключване на потребители от определените групи.",
+ "apihelp-query+allusers-param-prop": "Каква информация да включва:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Добавя информация за текущото блокиране на потребителя.",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Добавя пълният URL-адрес.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Заглавие на всяка страница.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Записи в дневника."
+}
diff --git a/www/wiki/includes/api/i18n/bgn.json b/www/wiki/includes/api/i18n/bgn.json
new file mode 100644
index 00000000..62fa6c83
--- /dev/null
+++ b/www/wiki/includes/api/i18n/bgn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim khashrowdi"
+ ]
+ },
+ "apihelp-block-summary": "کار زوروکئ بستین",
+ "apihelp-createaccount-param-name": "کار زورؤکین نام.",
+ "apihelp-login-param-name": "کار زورؤکین نام.",
+ "apihelp-userrights-param-user": "کار زورؤکین نام."
+}
diff --git a/www/wiki/includes/api/i18n/bn.json b/www/wiki/includes/api/i18n/bn.json
new file mode 100644
index 00000000..bfec841c
--- /dev/null
+++ b/www/wiki/includes/api/i18n/bn.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftabuzzaman",
+ "Bodhisattwa",
+ "আজিজ"
+ ]
+ },
+ "apihelp-main-param-format": "আউটপুটের বিন্যাস",
+ "apihelp-main-param-requestid": "এখানে প্রদত্ত যেকোন মান প্রতিক্রিয়ায় অন্তর্ভুক্ত করা হবে। অনুরোধের পার্থক্য করতে ব্যবহার করা যেতে পারে।",
+ "apihelp-block-summary": "ব্যবহারকারীকে বাধা দিন।",
+ "apihelp-block-param-reason": "বাধার দানের কারণ।",
+ "apihelp-createaccount-summary": "নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করুন",
+ "apihelp-createaccount-param-name": "ব্যবহারকারী নাম।",
+ "apihelp-delete-summary": "একটি পাতা মুছে ফেলুন।",
+ "apihelp-delete-example-simple": "<kbd>প্রধান পাতা</kbd> মুছে ফেলুন।",
+ "apihelp-edit-param-text": "পাতার বিষয়বস্তু।",
+ "apihelp-edit-param-minor": "অনুল্লেখ্য সম্পাদনা।",
+ "apihelp-edit-param-bot": "এই সম্পাদনাটি একটি বট সম্পাদনা হিসাবে চিহ্নিত করে।",
+ "apihelp-edit-param-createonly": "পাতাটি আগেই বিদ্যমান থাকলে সম্পদনা করবেন না।",
+ "apihelp-edit-param-contentmodel": "নতুন বিষয়বস্তুর, বিষয়বস্তু-মডেল।",
+ "apihelp-edit-example-edit": "একটি পাতা সম্পাদনা করুন",
+ "apihelp-edit-example-prepend": "একটি পৃষ্ঠার পূর্বে <kbd>_&#95;NOTOC_&#95;</kbd> লিখুন।",
+ "apihelp-login-example-login": "প্রবেশ",
+ "apihelp-setpagelanguage-param-reason": "পরিবর্তনের কারণ।",
+ "apierror-invaliduserid": "ব্যবহারকারী আইডি <var>$1</var> বৈধ নয়।",
+ "apierror-nosuchuserid": "$1 আইডি যুক্ত কোন ব্যবহারকারী নেই।"
+}
diff --git a/www/wiki/includes/api/i18n/br.json b/www/wiki/includes/api/i18n/br.json
new file mode 100644
index 00000000..079ea43a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/br.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Y-M D",
+ "Fulup"
+ ]
+ },
+ "apihelp-block-summary": "Stankañ un implijer",
+ "apihelp-block-param-reason": "Abeg evit stankañ.",
+ "apihelp-createaccount-summary": "Krouiñ ur gont implijer nevez.",
+ "apihelp-createaccount-param-name": "Anv implijer.",
+ "apihelp-delete-summary": "Diverkañ ur bajenn.",
+ "apihelp-edit-summary": "Krouiñ pajennoù ha kemmañ anezho.",
+ "apihelp-edit-param-sectiontitle": "Titl ur rannbennad nevez.",
+ "apihelp-edit-param-text": "Danvez ar bajenn.",
+ "apihelp-edit-param-minor": "Kemmig dister.",
+ "apihelp-edit-example-edit": "Kemmañ ur bajenn.",
+ "apihelp-emailuser-summary": "Kas ur postel d'un implijer.",
+ "apihelp-emailuser-param-text": "Korf ar postel.",
+ "apihelp-expandtemplates-param-title": "Titl ar bajenn.",
+ "apihelp-feedcontributions-param-year": "Adalek ar bloaz (ha koshoc'h)",
+ "apihelp-feedcontributions-param-month": "Adalek ar miz (ha koshoc'h).",
+ "apihelp-feedcontributions-param-hideminor": "Kuzhat ar c'hemmoù dister.",
+ "apihelp-feedrecentchanges-param-hideminor": "Kuzhat ar c'hemmoù dister.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Silañ dre dikedennoù.",
+ "apihelp-feedrecentchanges-example-simple": "Diskouez ar c'hemmoù diwezhañ.",
+ "apihelp-login-param-name": "Anv implijer.",
+ "apihelp-login-param-password": "Ger-tremen.",
+ "apihelp-login-param-domain": "Domani (diret).",
+ "apihelp-login-example-login": "Kevreañ.",
+ "apihelp-move-summary": "Dilec'hiañ ur bajenn.",
+ "apihelp-move-param-noredirect": "Chom hep krouiñ un adkas.",
+ "apihelp-protect-example-protect": "Gwareziñ ur bajenn.",
+ "apihelp-rollback-param-tags": "Tikedennoù da lakaat e talvoud war an distroioù."
+}
diff --git a/www/wiki/includes/api/i18n/bs.json b/www/wiki/includes/api/i18n/bs.json
new file mode 100644
index 00000000..7771f80e
--- /dev/null
+++ b/www/wiki/includes/api/i18n/bs.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Palapa",
+ "Semso98"
+ ]
+ },
+ "apihelp-main-param-action": "Koju akciju izvesti.",
+ "apihelp-main-param-format": "Format izlaza.",
+ "apihelp-block-summary": "Blokiraj korisnika",
+ "apihelp-block-param-reason": "Razlog za blokadu",
+ "apihelp-block-example-ip-simple": "Blokiraj IP adresu <kbd>192.0.2.5</kbd> na tri dana sa razlogom <kbd>Prvi napad</kbd>.",
+ "apihelp-compare-param-fromtitle": "Prvi naslov za poređenje.",
+ "apihelp-delete-summary": "Obriši stranicu.",
+ "apihelp-edit-param-text": "Sadržaj stranice.",
+ "apihelp-edit-param-minor": "Mala izmjena."
+}
diff --git a/www/wiki/includes/api/i18n/ca.json b/www/wiki/includes/api/i18n/ca.json
new file mode 100644
index 00000000..bba97338
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ca.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Toniher",
+ "Macofe",
+ "Xavier Dengra",
+ "F3RaN",
+ "Eduardo Martinez",
+ "Fitoschido"
+ ]
+ },
+ "apihelp-main-param-action": "Quina acció realitzar.",
+ "apihelp-main-param-format": "El format de la sortida.",
+ "apihelp-main-param-curtimestamp": "Inclou la marca horària actual en el resultat.",
+ "apihelp-block-summary": "Bloca un usuari.",
+ "apihelp-block-param-reason": "Raó del blocatge.",
+ "apihelp-block-param-nocreate": "Evita la creació de comptes.",
+ "apihelp-createaccount-summary": "Creeu un nou compte d'usuari.",
+ "apihelp-createaccount-param-name": "Nom d'usuari.",
+ "apihelp-createaccount-param-password": "Contrasenya (ignorada si es defineix <var>$1mailpassword</var>)",
+ "apihelp-createaccount-param-email": "Adreça electrònica de l'usuari (opcional).",
+ "apihelp-createaccount-param-realname": "Nom real de l'usuari (opcional).",
+ "apihelp-delete-summary": "Suprimeix una pàgina.",
+ "apihelp-disabled-summary": "Aquest mòdul ha estat desactivat.",
+ "apihelp-edit-summary": "Crea i edita pàgines.",
+ "apihelp-edit-param-text": "Contingut de la pàgina.",
+ "apihelp-edit-param-minor": "Edició menor.",
+ "apihelp-edit-param-createonly": "No editeu aquesta pàgina si ja existeix.",
+ "apihelp-edit-example-edit": "Editeu una pàgina.",
+ "apihelp-emailuser-summary": "Envieu un correu electrònic a un usuari.",
+ "apihelp-emailuser-param-target": "Usuari a qui enviar el correu.",
+ "apihelp-emailuser-param-text": "Cos del correu.",
+ "apihelp-emailuser-param-ccme": "Envia'm una còpia d'aquest correu electrònic.",
+ "apihelp-expandtemplates-param-title": "Títol de la pàgina.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostra només les contribucions esborrades.",
+ "apihelp-feedrecentchanges-param-hideminor": "Amaga les edicions menors.",
+ "apihelp-feedrecentchanges-param-hidebots": "Amaga les edicions de bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Amaga les edicions anònimes.",
+ "apihelp-feedrecentchanges-param-hideliu": "Amaga les edicions d'usuaris registrats.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Amaga les edicions patrullades.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Amaga les meves edicions.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtra segons etiqueta.",
+ "apihelp-feedrecentchanges-param-target": "Mostra només els canvis de les pàgines enllaçades a aquesta pàgina.",
+ "apihelp-feedrecentchanges-example-simple": "Mostra els canvis recents.",
+ "apihelp-help-summary": "Mostra l’ajuda dels mòduls especificats.",
+ "apihelp-help-example-recursive": "Tota l'ajuda en una sola pàgina.",
+ "apihelp-import-param-rootpage": "Importa com a subpàgina d'aquesta pàgina.",
+ "apihelp-login-param-name": "Nom d'usuari.",
+ "apihelp-login-param-password": "Contrasenya.",
+ "apihelp-login-example-login": "Inicia sessió.",
+ "apihelp-options-example-reset": "Reinicialitza totes les preferències.",
+ "apihelp-protect-param-cascade": "Activa la protecció en cascada (és a dir, protegeix les plantilles i imatges utilitzades en aquesta pàgina). S'ignora si cap dels nivells de protecció suporta la protecció en cascada.",
+ "apihelp-query+pageswithprop-example-generator": "Obtenir informació addicional sobre les 10 primeres pàgines utilitzant <code>__NOTOC__</code>.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Afegeix el títol de la pàgina.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Afegeix l'usuari que ha fet l'edició.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Afegeix l'IDentificador de l'usuari que ha fet l'edició.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Afegeix comentari de l'edició.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Afegeix timestamp de l'edició.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta les modificacions que són vigilades.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Afegeix informació de registre, si s'escau."
+}
diff --git a/www/wiki/includes/api/i18n/ce.json b/www/wiki/includes/api/i18n/ce.json
new file mode 100644
index 00000000..dc6ee3ce
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ce.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "apihelp-main-param-action": "Кхочушдан дезарг.",
+ "apihelp-main-param-format": "Гойту формат.",
+ "apihelp-main-param-curtimestamp": "Хилламийн юкъатоха ханна йолу билгало",
+ "apihelp-createaccount-param-name": "Декъашхочун цӀе.",
+ "apihelp-delete-summary": "ДӀаяккха агӀо.",
+ "apihelp-edit-example-edit": "АгӀо таян",
+ "apihelp-emailuser-summary": "Декъашхочунга кехат",
+ "apihelp-emailuser-param-target": "Электронан кехатан адрес.",
+ "apihelp-emailuser-param-subject": "Хьедаран корта.",
+ "apihelp-emailuser-param-text": "Кехатан чулацам",
+ "apihelp-expandtemplates-param-title": "АгӀонан корта.",
+ "apihelp-feedrecentchanges-param-hideminor": "Къайладаха жима нисдарш.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Тегийн луьттург.",
+ "apihelp-login-example-login": "ЧугӀо",
+ "apihelp-logout-summary": "ЧугӀой сессийн хаамаш дӀацӀанбе.",
+ "apihelp-move-summary": "АгӀон цӀе хийца.",
+ "apihelp-opensearch-param-search": "Лахаран могӀа.",
+ "apihelp-parse-example-page": "АгӀо зер",
+ "apihelp-parse-example-text": "Wikitext зер.",
+ "apihelp-protect-example-protect": "Ларъе агӀо.",
+ "apihelp-userrights-param-userid": "Декъашхочун ID.",
+ "api-help-datatypes-header": "Хаамийн тайпанаш"
+}
diff --git a/www/wiki/includes/api/i18n/ckb.json b/www/wiki/includes/api/i18n/ckb.json
new file mode 100644
index 00000000..3259f708
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ckb.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pirehelokan",
+ "Sarchia"
+ ]
+ },
+ "apihelp-parse-param-disabletoc": "پێرستی ناوەرۆک پیشان مەدە.",
+ "api-help-param-default": "بنەڕەت: $1"
+}
diff --git a/www/wiki/includes/api/i18n/cs.json b/www/wiki/includes/api/i18n/cs.json
new file mode 100644
index 00000000..90af65f9
--- /dev/null
+++ b/www/wiki/includes/api/i18n/cs.json
@@ -0,0 +1,300 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mormegil",
+ "YjM",
+ "Juandev",
+ "Aktron",
+ "Cvanca",
+ "Utar",
+ "Macofe",
+ "Danny B.",
+ "LordMsz",
+ "Dvorapa",
+ "Matěj Suchánek",
+ "Ilimanaq29"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentace]]\n* [[mw:Special:MyLanguage/API:FAQ|Otázky a odpovědi]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:Special:MyLanguage/API:Errors_and_warnings|v dokumentaci]].\n\n<strong>Testování:</strong> Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Která akce se má provést.",
+ "apihelp-main-param-format": "Formát výstupu.",
+ "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Special:MyLanguage/Manual:Maxlag_parameter|příručce]].",
+ "apihelp-main-param-smaxage": "Nastaví HTTP hlavičku pro řízení kešování <code>s-maxage</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
+ "apihelp-main-param-maxage": "Nastaví HTTP hlavičku pro řízení kešování <code>max-age</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
+ "apihelp-main-param-assert": "Pokud je nastaveno na „<kbd>user</kbd>“, ověří, že je uživatel přihlášen, pokud je nastaveno na „<kbd>bot</kbd>“, ověří, že má oprávnění „bot“.",
+ "apihelp-main-param-requestid": "Libovolná zde uvedená hodnota bude zahrnuta v odpovědi. Lze použít pro rozlišení požadavků.",
+ "apihelp-main-param-servedby": "Zahrnout do odpovědi název hostitele, který požadavek obsloužil.",
+ "apihelp-main-param-curtimestamp": "Zahrnout do odpovědi aktuální časové razítko.",
+ "apihelp-main-param-origin": "Pokud k API přistupujete pomocí mezidoménového AJAXového požadavku (CORS), nastavte tento parametr na doménu původu. Musí být součástí všech předběžných požadavků, takže musí být součástí URI požadavku (nikoli těla POSTu).\n\nU autentizovaných požadavků hodnota musí přesně odpovídat jednomu z původů v hlavičce <code>Origin</code>, takže musí být nastavena na něco jako <kbd>https://en.wikipedia.org</kbd> nebo <kbd>https://meta.wikimedia.org</kbd>. Pokud parametr neodpovídá hlavičce <code>Origin</code>, bude vrácena odpověď 403. Pokud parametr odpovídá hlavičce <code>Origin</code> a tento původ je na bílé listině, budou nastaveny hlavičky <code>Access-Control-Allow-Origin</code> a <code>Access-Control-Allow-Credentials</code>.\n\nU neautentizovaných požadavků uveďte hodnotu <kbd>*</kbd>. To způsobí nastavení hlavičky <code>Access-Control-Allow-Origin</code>, ale hlavička <code>Access-Control-Allow-Credentials</code> bude <code>false</code> a budou omezena všechna data specifická pro uživatele.",
+ "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Pomocí <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> se <kbd>siprop=languages</kbd> získáte seznam jazykových kódů nebo zadejte „<kbd>user</kbd>“ pro použití předvoleného jazyka aktuálního uživatele či „<kbd>content</kbd>“ pro použití jazyka obsahu této wiki.",
+ "apihelp-block-summary": "Zablokovat uživatele.",
+ "apihelp-block-param-user": "Uživatelské jméno, IP adresa nebo rozsah IP adres, které chcete zablokovat. Nelze použít dohromady s <var>$1userid</var>.",
+ "apihelp-block-param-reason": "Důvod bloku.",
+ "apihelp-block-param-anononly": "Zablokovat pouze anonymní uživatele (tj. zakázat editovat anonymně z této IP).",
+ "apihelp-block-param-nocreate": "Nedovolit registraci nových uživatelů.",
+ "apihelp-block-param-noemail": "Zakázat uživateli posílat e-maily prostřednictvím wiki. (Vyžaduje oprávnění „<code>blockemail</code>“.)",
+ "apihelp-block-param-hidename": "Skrýt uživatelské jméno v knize zablokování. (Vyžaduje oprávnění <code>hideuser</code>.)",
+ "apihelp-block-param-allowusertalk": "Povolit uživateli editovat svou vlastní diskusní stránku (závisí na <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Pokud již uživatel blokován je, přepsat současný blok.",
+ "apihelp-block-param-watchuser": "Sledovat stránku uživatele nebo IP adresy a jejich diskuzní stránky.",
+ "apihelp-block-example-ip-simple": "Na tři dny zablokovat IP adresu <kbd>192.0.2.5</kbd> s odůvodněním <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Trvale zablokovat uživatele <kbd>Vandal</kbd> s odůvodněním <kbd>Vandalism</kbd> a zabránit vytváření nových účtů a odesílání e-mailů.",
+ "apihelp-checktoken-param-type": "Typ testovaného tokenu.",
+ "apihelp-checktoken-param-token": "Token, který se má otestovat.",
+ "apihelp-checktoken-param-maxtokenage": "Nejvyšší povolené stáří tokenu v sekundách.",
+ "apihelp-checktoken-example-simple": "Testuje správnost tokenu <kbd>csrf</kbd>.",
+ "apihelp-compare-summary": "Vrátí rozdíl dvou stránek.",
+ "apihelp-compare-extended-description": "Ve „from“ i „to“ musíte zadat číslo revize, název stránky nebo ID stránky.",
+ "apihelp-compare-param-fromtitle": "Název první stránky k porovnání.",
+ "apihelp-compare-param-fromid": "ID první stránky k porovnání.",
+ "apihelp-compare-param-fromrev": "Číslo revize první stránky k porovnání.",
+ "apihelp-compare-param-totitle": "Název druhé stránky k porovnání.",
+ "apihelp-compare-param-toid": "ID druhé stránky k porovnání.",
+ "apihelp-compare-param-torev": "Číslo revize druhé stránky k porovnání.",
+ "apihelp-compare-example-1": "Porovnat revize 1 a 2.",
+ "apihelp-createaccount-summary": "Vytvořit nový uživatelský účet.",
+ "apihelp-createaccount-param-name": "Uživatelské jméno.",
+ "apihelp-createaccount-param-password": "Heslo (ignorováno, pokud je nastaveno <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Doména pro externí ověření (volitelné).",
+ "apihelp-createaccount-param-email": "E-mailová adresa uživatele (nepovinné).",
+ "apihelp-createaccount-param-realname": "Skutečné jméno uživatele (nepovinné).",
+ "apihelp-createaccount-param-mailpassword": "Pokud je nastaveno na libovolnou hodnotu, zašle se náhodně vygenerované heslo na e-mail uživatele.",
+ "apihelp-createaccount-param-reason": "Případný důvod pro vytvoření účtu, který se zaznamená do logu.",
+ "apihelp-createaccount-param-language": "Kód jazyka, který se má uživateli nastavit jako výchozí (volitelné, výchozí je jazyk obsahu).",
+ "apihelp-createaccount-example-pass": "Vytvořit uživatele <kbd>testuser</kbd> s heslem <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Vytvořit uživatele <kbd>testmailuser</kbd> a zaslat mu e-mail s náhodně vygenerovaným heslem.",
+ "apihelp-delete-summary": "Smazat stránku.",
+ "apihelp-delete-param-title": "Název stránky, která se má smazat. Není možné použít společně s <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID stránky, která se má smazat. Není možné použít společně s <var>$1title</var>.",
+ "apihelp-delete-param-watch": "Přidat stránku na seznam sledovaných.",
+ "apihelp-delete-param-unwatch": "Odstranit stránku ze seznamu sledovaných.",
+ "apihelp-delete-example-simple": "Smazat stránku <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Smazat stránku <kbd>Main Page</kbd> s odůvodněním <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Tento modul byl deaktivován.",
+ "apihelp-edit-summary": "Vytvářet a upravovat stránky.",
+ "apihelp-edit-param-title": "Název stránky, kterou chcete editovat. Nelze použít společně s <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID stránky, která se má editovat. Není možné použít společně s <var>$1title</var>.",
+ "apihelp-edit-param-sectiontitle": "Název nové sekce.",
+ "apihelp-edit-param-text": "Obsah stránky.",
+ "apihelp-edit-param-minor": "Malá editace.",
+ "apihelp-edit-param-notminor": "Nemalá editace.",
+ "apihelp-edit-param-bot": "Označit tuto editaci jako editaci robota.",
+ "apihelp-edit-param-createonly": "Needitovat stránku, pokud již existuje.",
+ "apihelp-edit-param-nocreate": "Pokud stránka neexistuje, vrátit chybu.",
+ "apihelp-edit-param-watch": "Přidat stránku na seznam sledovaných.",
+ "apihelp-edit-param-unwatch": "Odstranit stránku ze seznamu sledovaných.",
+ "apihelp-edit-param-watchlist": "Bezpodmínečně přidat nebo odstranit stránku ze sledovaných stránek aktuálního uživatele, použít nastavení nebo neměnit sledování.",
+ "apihelp-edit-param-redirect": "Automaticky opravit přesměrování.",
+ "apihelp-edit-example-edit": "Upravit stránku.",
+ "apihelp-emailuser-summary": "Poslat uživateli e-mail.",
+ "apihelp-emailuser-param-target": "Uživatel, kterému se má e-mail poslat.",
+ "apihelp-emailuser-param-subject": "Hlavička s předmětem.",
+ "apihelp-emailuser-param-text": "Tělo zprávy.",
+ "apihelp-emailuser-param-ccme": "Odeslat mi kopii této zprávy.",
+ "apihelp-emailuser-example-email": "Poslat e-mail uživateli <kbd>WikiSysop</kbd> s textem <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Rozbalí všechny šablony ve wikitextu.",
+ "apihelp-expandtemplates-param-title": "Název stránky.",
+ "apihelp-expandtemplates-param-text": "Wikitext k převedení.",
+ "apihelp-expandtemplates-param-revid": "ID revize, pro <code><nowiki>{{REVISIONID}}</nowiki></code> a podobné proměnné.",
+ "apihelp-feedcontributions-summary": "Vrátí kanál příspěvků uživatele.",
+ "apihelp-feedcontributions-param-feedformat": "Formát kanálu.",
+ "apihelp-feedcontributions-param-year": "Od roku (a dříve).",
+ "apihelp-feedcontributions-param-month": "Od měsíce (a dříve)",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrovat příspěvky, které mají tyto značky.",
+ "apihelp-feedcontributions-param-deletedonly": "Zobrazit pouze smazané příspěvky.",
+ "apihelp-feedcontributions-param-toponly": "Zobrazit pouze ty editace, které jsou aktuální revize.",
+ "apihelp-feedcontributions-param-newonly": "Zobrazit pouze ty editace, které vytvořily stránku.",
+ "apihelp-feedcontributions-param-hideminor": "Skrýt malé editace.",
+ "apihelp-feedcontributions-param-showsizediff": "Zobrazit rozdíl velikosti mezi revizemi.",
+ "apihelp-feedrecentchanges-param-namespace": "Jmenný prostor, na který mají být výsledky omezeny.",
+ "apihelp-feedrecentchanges-param-from": "Zobrazit změny od",
+ "apihelp-feedrecentchanges-param-hideminor": "Skrýt drobné změny.",
+ "apihelp-feedrecentchanges-param-hidebots": "Skrýt úpravy provedené roboty.",
+ "apihelp-feedrecentchanges-param-hideanons": "Skrýt změny provedené anonymními uživateli.",
+ "apihelp-feedrecentchanges-param-hideliu": "Skrýt změny provedené registrovanými uživateli.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Skrýt prověřené změny.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Skrýt změny aktuálního uživatele.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrovat podle značek.",
+ "apihelp-feedrecentchanges-param-target": "Zobrazit jen změny na stránkách odkazovaných z této stránky.",
+ "apihelp-feedrecentchanges-example-simple": "Zobrazit poslední změny.",
+ "apihelp-feedrecentchanges-example-30days": "Zobrazit poslední změny za 30 dní.",
+ "apihelp-filerevert-summary": "Revertovat soubor na starší verzi.",
+ "apihelp-filerevert-param-filename": "Cílový název souboru, bez prefixu Soubor:",
+ "apihelp-filerevert-param-comment": "Vložit komentář.",
+ "apihelp-help-summary": "Zobrazuje nápovědu k uvedeným modulům.",
+ "apihelp-help-param-modules": "Moduly, pro které se má zobrazit nápověda (hodnoty parametrů <var>action</var> a <var>format</var> anebo <kbd>main</kbd>). Submoduly lze zadávat pomocí <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Zahrnout nápovědu pro podmoduly uvedeného modulu.",
+ "apihelp-help-param-recursivesubmodules": "Zahrnout nápovědu pro podmoduly rekurzivně.",
+ "apihelp-help-param-helpformat": "Formát výstupu nápovědy.",
+ "apihelp-help-param-wrap": "Obalit výstup do standardní struktury API odpovědi.",
+ "apihelp-help-param-toc": "Zahrnout v HTML výstupu tabulku obsahu.",
+ "apihelp-help-example-main": "Nápověda k hlavnímu modulu",
+ "apihelp-help-example-recursive": "Veškerá nápověda na jedné stránce",
+ "apihelp-help-example-help": "Nápověda k samotnému modulu nápovědy",
+ "apihelp-help-example-query": "Nápověda pro dva podmoduly query",
+ "apihelp-imagerotate-summary": "Otočit jeden nebo více obrázků.",
+ "apihelp-imagerotate-example-generator": "Otočit všechny obrázky v <kbd>Category:Flip</kbd> o <kbd>180</kbd> stupňů.",
+ "apihelp-import-param-summary": "Shrnutí do protokolovacího záznamu importu.",
+ "apihelp-import-param-xml": "Nahraný XML soubor.",
+ "apihelp-import-param-namespace": "Importovat do tohoto jmenného prostoru. Nelze používat současně s parametrem <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importovat jako podstránku k této stránce. Nelze používat současně s parametrem <var>$1namespace</var>.",
+ "apihelp-login-param-name": "Uživatelské jméno.",
+ "apihelp-login-param-password": "Heslo.",
+ "apihelp-login-param-domain": "Doména (volitelná)",
+ "apihelp-login-example-login": "Přihlášení",
+ "apihelp-logout-example-logout": "Odhlášení aktuálního uživatele.",
+ "apihelp-move-summary": "Přesunout stránku.",
+ "apihelp-move-param-reason": "Důvod k přejmenování.",
+ "apihelp-move-param-movetalk": "Přejmenovat diskuzní stránku, pokud existuje.",
+ "apihelp-move-param-movesubpages": "Přejmenovat možné podstránky",
+ "apihelp-move-param-noredirect": "Nevytvářet přesměrování.",
+ "apihelp-move-param-watch": "Přidat stránku a přesměrování do sledovaných stránek aktuálního uživatele.",
+ "apihelp-move-param-unwatch": "Odstranit stránku a přesměrování ze sledovaných stránek současného uživatele.",
+ "apihelp-move-param-ignorewarnings": "Ignorovat všechna varování.",
+ "apihelp-opensearch-summary": "Vyhledávání na wiki pomocí protokolu OpenSearch.",
+ "apihelp-opensearch-param-search": "Hledaný řetězec.",
+ "apihelp-opensearch-param-limit": "Maximální počet vrácených výsledků",
+ "apihelp-opensearch-param-namespace": "Jmenné prostory pro vyhledávání. Ignorováno, pokud <var>$1search</var> začíná platným jmenným prostorem.",
+ "apihelp-opensearch-param-suggest": "Pokud je <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vypnuto, nedělat nic.",
+ "apihelp-opensearch-param-format": "Formát výstupu.",
+ "apihelp-opensearch-example-te": "Najít stránky začínající na „<kbd>Te</kbd>“.",
+ "apihelp-options-param-reset": "Vrátit nastavení na výchozí hodnoty.",
+ "apihelp-options-example-reset": "Vrátit všechna nastavení.",
+ "apihelp-parse-param-summary": "Shrnutí, které se má parsovat.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Přidává název parsovaného wikitextu.",
+ "apihelp-parse-param-disablestylededuplication": "Neodstraňovat duplicitní in-line styly ve výstupu parseru.",
+ "apihelp-parse-param-preview": "Parsovat v režimu náhledu.",
+ "apihelp-parse-example-page": "Parsovat stránku.",
+ "apihelp-parse-example-text": "Parsovat wikitext.",
+ "apihelp-parse-example-summary": "Parsovat shrnutí.",
+ "apihelp-patrol-example-revid": "Prověřit revizi.",
+ "apihelp-protect-summary": "Změnit úroveň zamčení stránky.",
+ "apihelp-protect-param-reason": "Důvod pro odemčení.",
+ "apihelp-protect-example-protect": "Zamknout stránku.",
+ "apihelp-query+allcategories-param-limit": "Kolik má být zobrazeno kategorií.",
+ "apihelp-query+alldeletedrevisions-summary": "Seznam všech smazaných revizí od konkrétního uživatele nebo v konkrétním jmenném prostoru.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Není možné užít s <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-example-user": "Seznam posledních 50 smazaných editací uživatele <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Seznam prvních 50 smazaných revizí v hlavním jmenném prostoru.",
+ "apihelp-query+allfileusages-summary": "Zobrazit seznam všech použití souboru, včetně neexistujících.",
+ "apihelp-query+allfileusages-example-unique": "Zobrazit seznam unikátních názvů souborů.",
+ "apihelp-query+allimages-param-minsize": "Omezit na obrázky, které mají alespoň tento počet bajtů.",
+ "apihelp-query+allimages-param-maxsize": "Omezit na obrázky, které mají maximálně tento počet bajtů.",
+ "apihelp-query+allimages-param-limit": "Kolik má být celkem zobrazeno obrázků.",
+ "apihelp-query+alllinks-example-generator": "Získat stránky obsahující odkazy.",
+ "apihelp-query+allpages-param-filterredir": "Které stránky uvést na seznam.",
+ "apihelp-query+allpages-param-minsize": "Omezit na stránky s určitým počtem bajtů.",
+ "apihelp-query+allpages-param-prtype": "Omezit jen na zamčené stránky.",
+ "apihelp-query+allpages-example-B": "Zobrazit seznam stránek začínajících na písmeno <kbd>B</kbd>.",
+ "apihelp-query+allredirects-summary": "Seznam všech přesměrování pro jmenný prostor.",
+ "apihelp-query+allredirects-example-unique": "Seznam unikátních cílových stránek.",
+ "apihelp-query+allredirects-example-generator": "Získat stránky obsahující přesměrování.",
+ "apihelp-query+alltransclusions-param-limit": "Kolik položek zobrazit celkem.",
+ "apihelp-query+alltransclusions-example-unique": "Seznam unikátně vložených titulů.",
+ "apihelp-query+allusers-example-Y": "Zobrazit uživatele počínaje písmenem <kbd>Y</kbd>.",
+ "apihelp-query+backlinks-summary": "Najít všechny stránky, které odkazují na danou stránku.",
+ "apihelp-query+backlinks-example-simple": "Zobrazit odkazy na <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-example-simple": "Vypsat zablokování.",
+ "apihelp-query+blocks-example-users": "Seznam bloků uživatelů <kbd>Alice</kbd> a <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Zobrazit všechny kategorie, do kterých je stránka zařazena.",
+ "apihelp-query+categories-param-limit": "Kolik kategorií má být zobrazeno.",
+ "apihelp-query+categorymembers-summary": "Seznam všech stránek v dané kategorii.",
+ "apihelp-query+categorymembers-param-limit": "Maximální počet stránek k zobrazení.",
+ "apihelp-query+categorymembers-example-simple": "Zobrazit prvních 10 stránek v <kbd>Category:Physics</kbd>",
+ "apihelp-query+categorymembers-example-generator": "Získat informace o prvních 10 stránkách v <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Zobrazit seznam registrovaných a počet anonymních přispěvatelů stránky.",
+ "apihelp-query+contributors-param-limit": "Kolik přispěvatelů má být zobrazeno.",
+ "apihelp-query+contributors-example-simple": "Zobrazit přispěvatele stránky <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Nezahrnovat revize od tohoto uživatele.",
+ "apihelp-query+deletedrevs-param-namespace": "Zahrnout pouze stránky z tohoto jmenného prostoru.",
+ "apihelp-query+deletedrevs-param-limit": "Maximální počet revizí k zobrazení.",
+ "apihelp-query+embeddedin-example-simple": "Zobrazit stránky, které obahují <kbd>Template:Stub</kbd>.",
+ "apihelp-query+filearchive-example-simple": "Zobrazit seznam všech smazaných souborů.",
+ "apihelp-query+filerepoinfo-example-simple": "Získat informace o souborových repozitářích.",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefix pro interwiki",
+ "apihelp-query+iwlinks-param-limit": "Počet interwiki odkazů k zobrazení.",
+ "apihelp-query+iwlinks-param-prefix": "Zobrazit pouze interwiki odkazy s tímto prefixem.",
+ "apihelp-query+iwlinks-param-title": "Interwiki odkaz, který se má hledat. Musí se použít spolu s <var>$1prefix</var>.",
+ "apihelp-query+langbacklinks-param-lang": "Jazyk pro jazykový odkaz.",
+ "apihelp-query+langbacklinks-example-simple": "Zobrazit stránky odkazující na [[:fr:Test]]",
+ "apihelp-query+langbacklinks-example-generator": "Získat informace o stránkách odkazujících na [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Zobrazit všechny mezijazykové odkazy z daných stránek.",
+ "apihelp-query+langlinks-param-lang": "Zobrazit pouze jazykové odkazy s tímto kódem jazyka.",
+ "apihelp-query+linkshere-example-generator": "Získat informace o stránkách, které odkazují na [[Hlavní Stránka|Hlavní stránku]].",
+ "apihelp-query+prefixsearch-param-namespace": "Jmenné prostory pro vyhledávání. Ignorováno, pokud <var>$1search</var> začíná platným jmenným prostorem.",
+ "apihelp-query+recentchanges-param-excludeuser": "Nezobrazovat změny od tohoto uživatele.",
+ "apihelp-query+recentchanges-example-simple": "Seznam posledních změn.",
+ "apihelp-query+redirects-param-limit": "Počet přesměrování, který má být zobrazen.",
+ "apihelp-query+redirects-example-simple": "Zobrazit seznam přesměrování na stránku [[Main Page]].",
+ "apihelp-query+search-example-simple": "Hledat <kbd>meaning</kbd>",
+ "apihelp-query+tags-example-simple": "Získat seznam dostupných tagů.",
+ "apihelp-query+usercontribs-example-user": "Zobrazit příspěvky uživatele <kbd>Příklad</kbd>",
+ "apihelp-query+watchlistraw-summary": "Získat všechny stránky, které jsou aktuálním uživatelem sledovány.",
+ "apihelp-query+watchlistraw-example-simple": "Seznam sledovaných stránek uživatele.",
+ "apihelp-stashedit-param-summary": "Změnit shrnutí.",
+ "apihelp-unblock-param-user": "Uživatel, IP adresa nebo rozsah IP adres k odblokování. Nelze použít dohromady s <var>$1id</var> nebo <var>$1userid</var>.",
+ "apihelp-watch-example-watch": "Sledovat stránku <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "Zobrazit prvních několik stránek z hlavního jmenného prostoru.",
+ "apihelp-format-example-generic": "Výsledek dotazu vrátit ve formátu $1.",
+ "apihelp-json-summary": "Vypisuje data ve formátu JSON.",
+ "apihelp-json-param-callback": "Pokud je uvedeno, obalí výstup do zadaného volání funkce. Z bezpečnostních důvodů budou omezena všechna data specifická pro uživatele.",
+ "apihelp-json-param-utf8": "Pokud je uvedeno, bude většina ne-ASCII znaků (ale ne všechny) kódována v UTF-8 místo nahrazení hexadecimálními escape sekvencemi. Implicitní chování, pokud není <var>formatversion</var> nastaveno na <kbd>1</kbd>.",
+ "apihelp-jsonfm-summary": "Vypisuje data ve formátu JSON (v čitelné HTML podobě).",
+ "apihelp-none-summary": "Nevypisuje nic.",
+ "apihelp-php-summary": "Vypisuje data v serializačním formátu PHP.",
+ "apihelp-phpfm-summary": "Vypisuje data v serializačním formátu PHP (v čitelné HTML podobě).",
+ "apihelp-rawfm-summary": "Data včetně ladicích prvků vypisuje ve formátu JSON (v čitelné HTML podobě).",
+ "apihelp-xml-summary": "Vypisuje data ve formátu XML.",
+ "apihelp-xml-param-xslt": "Pokud je uvedeno, přidá uvedenou stránku jako stylopis XSL. Hodnotou musí být název stránky ve jmenném prostoru MediaWiki, jejíž název končí na <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Pokud je uvedeno, přidá jmenný prostor XML.",
+ "apihelp-xmlfm-summary": "Vypisuje data ve formátu XML (v čitelné HTML podobě).",
+ "api-format-title": "Odpověď z MediaWiki API",
+ "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:Special:MyLanguage/API|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
+ "api-format-prettyprint-header-only-html": "Toto je HTML reprezentace určená pro ladění, která není vhodná pro použití v aplikacích.\n\nVíce informací najdete v [[mw:Special:MyLanguage/API|úplné dokumentaci]] nebo [[Special:ApiHelp/main|dokumentaci API]].",
+ "api-help-title": "Nápověda k MediaWiki API",
+ "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Hlavní modul",
+ "api-help-flag-deprecated": "Tento modul je zastaralý.",
+ "api-help-flag-internal": "<strong>Tento modul je interní nebo nestabilní.</strong> Jeho funkčnost se může bez předchozího upozornění změnit.",
+ "api-help-flag-readrights": "Tento modul vyžaduje oprávnění ke čtení.",
+ "api-help-flag-writerights": "Tento modul vyžaduje oprávnění k zápisu.",
+ "api-help-flag-mustbeposted": "Tento modul přijímá pouze požadavky POST.",
+ "api-help-flag-generator": "Tento modul lze využívat jako generátor.",
+ "api-help-source": "Zdroj: $1",
+ "api-help-license": "Licence: [[$1|$2]]",
+ "api-help-license-noname": "Licence: [[$1|Vizte odkaz]]",
+ "api-help-license-unknown": "Licence: <span class=\"apihelp-unknown\">neznámá</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+ "api-help-param-deprecated": "Zastaralý.",
+ "api-help-param-required": "Tento parametr je povinný.",
+ "api-help-datatypes-header": "Datové typy",
+ "api-help-datatypes": "Vstupem do MediaWiki by mělo být UTF-8 normalizované do NFC. Jiný vstup se MediaWiki může pokusit převést, ale tím se může stát, že některé operace (např. [[Special:ApiHelp/edit|editace]] s kontrolou MD5) selžou.\n\nNěkteré typy parametrů v API potřebují bližší vysvětlení:\n;boolean\n:Booleovské parametry fungují jako zaškrtávací políčka v HTML: pokud je parametr uveden, bez ohledu na hodnotu, je považován za pravdivý. Pro nepravdivou hodnotu parametr zcela vynechte.\n;časová značka\n:Časové značky lze uvádět v několika formátech. Doporučuje se datum a čas podle ISO 8601. Všechny časy jsou v UTC a obsažené časové pásmo je ignorováno.\n:* Datum a čas podle ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (interpunkce a <kbd>Z</kbd> jsou nepovinné)\n:* Datum a čas podle ISO 8601 s (ignorovaným) zlomkem sekundy, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (pomlčky, dvojtečky a <kbd>Z</kbd> jsou nepovinné)\n:* Formát MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Obecný číselný formát, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (nepovinné časové pásmo <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> nebo <kbd>-<var>##</var></kbd> se ignoruje)\n:* Formát EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 2822 (časové pásmo lze vynechat), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 850 (časové pásmo lze vynechat), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle céčkové funkce ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Sekundy od 1970-01-01T00:00:00Z jako celé číslo o 1–13 číslicích (s výjimkou <kbd>0</kbd>)\n:* Řetězec <kbd>now</kbd>\n;alternativní oddělovač vícenásobných hodnot\n:Parametry, které přijímají několik hodnot, se zpravidla předávají s hodnotami oddělenými svislítkem, např. <kbd>param=hodnota1|hodnota2</kbd> nebo <kbd>param=hodnota1%7Chodnota2</kbd>. Pokud musí hodnota obsahovat svislítko, použijte jako oddělovač znak U+001F (Unit Separator) ''a'' před hodnotu přidejte U+001F, např. <kbd>param=%1Fhodnota1%1Fhodnota2</kbd>.",
+ "api-help-param-type-integer": "Typ: {{PLURAL:$1|1=celé číslo|2=seznam celých čísel}}",
+ "api-help-param-type-boolean": "Typ: boolean ([[Special:ApiHelp/main#main/datatypes|podrobnosti]])",
+ "api-help-param-list": "{{PLURAL:$1|1=Jedna z následujících hodnot|2=Hodnoty (oddělené <kbd>{{!}}</kbd> nebo [[Special:ApiHelp/main#main/datatypes|alternativou]].)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
+ "api-help-param-limit": "Není dovoleno více než $1.",
+ "api-help-param-limit2": "Není dovoleno více než $1 ($2 pro boty).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být nižší než $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být vyšší než $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Hodnota|2=Hodnoty}} musí ležet mezi $2 a $3.",
+ "api-help-param-upload": "Musí se odeslat POST požadavkem jako načítaný soubor pomocí multipart/form-data.",
+ "api-help-param-multi-separate": "Hodnoty oddělujte pomocí <kbd>|</kbd> nebo [[Special:ApiHelp/main#main/datatypes|alternativou]].",
+ "api-help-param-multi-max": "Maximální počet hodnot je {{PLURAL:$1|$1}} (pro boty {{PLURAL:$2|$2}}).",
+ "api-help-param-default": "Implicitní hodnota: $1",
+ "api-help-param-default-empty": "Implicitní hodnota: <span class=\"apihelp-empty\">(prázdné)</span>",
+ "api-help-param-token": "Token typu „$1“ získaný pomocí [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez popisu)</span>",
+ "api-help-examples": "{{PLURAL:$1|Příklad|Příklady}}:",
+ "api-help-permissions": "{{PLURAL:$1|Oprávnění}}:",
+ "api-help-permissions-granted-to": "Uděleno {{PLURAL:$1|skupině|skupinám}}: $2",
+ "api-help-right-apihighlimits": "Používání vyšších limitů v API dotazech (pomalé dotazy: $1, rychlé dotazy: $2). Limity pro pomalé dotazy se vztahují i na vícehodnotové parametry.",
+ "api-help-open-in-apisandbox": "<small>[otevřít v pískovišti]</small>",
+ "apierror-blocked": "Byla vám zablokována možnost editace.",
+ "apierror-mustbeloggedin": "Abyste mohli $1, musíte být přihlášeni.",
+ "apierror-nosuchsection-what": "$2 neobsahuje sekci $1.",
+ "apierror-sectionsnotsupported-what": "$1 nepodporuje sekce.",
+ "apierror-timeout": "Server neodpověděl v očekávaném čase.",
+ "api-credits-header": "Zásluhy",
+ "api-credits": "Vývojáři API:\n* Roan Kattouw (hlavní vývojář září 2007–2009)\n* Viktor Vasiljev\n* Bryan Tong Minh\n* Sam Reed\n* Jurij Astrachan (tvůrce, hlavní vývojář září 2006–září 2007)\n* Brad Jorsch (hlavní vývojář od 2013)\n\nSvé komentáře, návrhy či dotazy posílejte na mediawiki-api@lists.wikimedia.org\nnebo založte chybové hlášení na https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/cv.json b/www/wiki/includes/api/i18n/cv.json
new file mode 100644
index 00000000..88f222f8
--- /dev/null
+++ b/www/wiki/includes/api/i18n/cv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash2014"
+ ]
+ },
+ "apihelp-login-example-login": "Кĕр"
+}
diff --git a/www/wiki/includes/api/i18n/da.json b/www/wiki/includes/api/i18n/da.json
new file mode 100644
index 00000000..bbb981bb
--- /dev/null
+++ b/www/wiki/includes/api/i18n/da.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sarrus"
+ ]
+ },
+ "apihelp-feedrecentchanges-param-hideminor": "Skjul mindre ændringer."
+}
diff --git a/www/wiki/includes/api/i18n/de.json b/www/wiki/includes/api/i18n/de.json
new file mode 100644
index 00000000..b1eee12d
--- /dev/null
+++ b/www/wiki/includes/api/i18n/de.json
@@ -0,0 +1,1113 @@
+{
+ "@metadata": {
+ "authors": [
+ "Florian",
+ "Kghbln",
+ "Metalhead64",
+ "Inkowik",
+ "Umherirrender",
+ "Giftpflanze",
+ "Macofe",
+ "Se4598",
+ "Purodha",
+ "Andreasburmeister",
+ "Anomie",
+ "Duder",
+ "Ljonka",
+ "FriedhelmW",
+ "Predatorix",
+ "Luke081515",
+ "Eddie",
+ "Zenith",
+ "Tacsipacsi"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Die MediaWiki-API ist eine ausgereifte und stabile Schnittstelle, die aktiv unterstützt und verbessert wird. Während wir versuchen, dies zu vermeiden, können wir gelegentlich Breaking Changes erforderlich machen. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste] für Mitteilungen zu Aktualisierungen.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fehler und Warnungen]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testen:</strong> Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].</p>",
+ "apihelp-main-param-action": "Auszuführende Aktion.",
+ "apihelp-main-param-format": "Format der Ausgabe.",
+ "apihelp-main-param-maxlag": "maxlag kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um weitere Replikationsrückstände zu verhindern, lässt dieser Parameter den Client warten, bis der Replikationsrückstand kleiner als der angegebene Wert (in Sekunden) ist. Bei einem größerem Rückstand wird der Fehlercode <samp>maxlag</samp> zurückgegeben mit einer Nachricht wie <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Siehe [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Handbuch: Maxlag parameter]] für weitere Informationen.",
+ "apihelp-main-param-smaxage": "Den <code>s-maxage</code>-HTTP-Cache-Control-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gepuffert.",
+ "apihelp-main-param-maxage": "Den <code>max-age</code>-HTTP-Cache-Control-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+ "apihelp-main-param-assert": "Sicherstellen, dass der Benutzer eingeloggt ist, wenn auf <kbd>user</kbd> gesetzt, oder Bot ist, wenn auf <kbd>bot</kbd> gesetzt.",
+ "apihelp-main-param-assertuser": "Überprüft, ob der aktuelle Benutzer der benannte Benutzer ist.",
+ "apihelp-main-param-requestid": "Der angegebene Wert wird mit in die Antwort aufgenommen und kann zur Unterscheidung von Anfragen verwendet werden.",
+ "apihelp-main-param-servedby": "Namen des bearbeitenden Hosts mit zurückgeben.",
+ "apihelp-main-param-curtimestamp": "Aktuellen Zeitstempel mit zurückgeben.",
+ "apihelp-main-param-responselanginfo": "Bezieht die für <var>uselang</var> und <var>errorlang</var> verwendeten Sprachen im Ergebnis mit ein.",
+ "apihelp-main-param-origin": "Beim Zugriff auf die API mit einer Kreuz-Domain-AJAX-Anfrage (CORS) muss dies als entstehende Domäne festgelegt werden. Dies muss in jeder Vorfluganfrage mit eingeschlossen werden und deshalb ein Teil der Anfragen-URI sein (nicht des POST-Körpers).\n\nFür authentifizierte Anfragen muss dies exakt einem der Ursprünge im Header <code>Origin</code> entsprechen, so dass es auf etwas wie <kbd>https://de.wikipedia.org</kbd> oder <kbd>https://meta.wikimedia.org</kbd> festgelegt werden muss. Falls dieser Parameter nicht mit dem Header <code>Origin</code> übereinstimmt, wird eine 403-Antwort zurückgegeben. Falls dieser Parameter mit dem Header <code>Origin</code> übereinstimmt und der Ursprung weißgelistet ist, werden die Header <code>Access-Control-Allow-Origin</code> und <code>Access-Control-Allow-Credentials</code> festgelegt.\n\nGib für nicht authentifizierte Anfragen den Wert <kbd>*</kbd> an. Dies verursacht, dass der Header <code>Access-Control-Allow-Origin</code> festgelegt wird, aber <code>Access-Control-Allow-Credentials</code> wird <code>false</code> sein und alle benutzerspezifischen Daten werden beschränkt.",
+ "apihelp-main-param-uselang": "Zu verwendende Sprache für Nachrichtenübersetzungen. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> mit <kbd>siprop=languages</kbd> gibt eine Liste der Sprachcodes zurück. Gib <kbd>user</kbd> zum Verwenden der aktuellen Benutzerspracheinstellung oder <kbd>content</kbd> an, um die Inhaltssprache des Wikis zu verwenden.",
+ "apihelp-main-param-errorformat": "Zu verwendendes Format zur Ausgabe von Warnungen und Fehlertexten.\n; plaintext: Wikitext mit entfernten HTML-Tags und ersetzten Entitäten.\n; wikitext: Ungeparster Wikitext.\n; html: HTML.\n; raw: Nachrichtenschlüssel und Parameter.\n; none: Keine Textausgabe, nur die Fehlercodes.\n; bc: Vor MediaWiki 1.29 verwendetes Format. <var>errorlang</var> und <var>errorsuselocal</var> werden ignoriert.",
+ "apihelp-main-param-errorsuselocal": "Falls angegeben, verwenden Fehlertexte lokalisierte Nachrichten aus dem {{ns:MediaWiki}}-Namensraum.",
+ "apihelp-block-summary": "Sperrt einen Benutzer.",
+ "apihelp-block-param-user": "Benutzername, IP-Adresse oder IP-Adressbereich, der gesperrt werden soll. Kann nicht zusammen mit <var>$1userid</var> verwendet werden.",
+ "apihelp-block-param-userid": "Die zu sperrende Benutzerkennung. Kann nicht zusammen mit <var>$1user</var> verwendet werden.",
+ "apihelp-block-param-expiry": "Sperrdauer. Kann relativ (z.&nbsp;B. <kbd>5 months</kbd> oder <kbd>2 weeks</kbd>) oder absolut (z.&nbsp;B. <kbd>2014-09-18T12:34:56Z</kbd>) sein. Wenn auf <kbd>infinite</kbd>, <kbd>indefinite</kbd> oder <kbd>never</kbd> gesetzt, ist die Sperre unbegrenzt.",
+ "apihelp-block-param-reason": "Sperrbegründung.",
+ "apihelp-block-param-anononly": "Nur anonyme Benutzer sperren (z.&nbsp;B. anonyme Bearbeitungen für diese IP deaktivieren).",
+ "apihelp-block-param-nocreate": "Benutzerkontenerstellung verhindern.",
+ "apihelp-block-param-autoblock": "Die zuletzt verwendete IP-Adresse automatisch sperren und alle darauffolgenden IP-Adressen, die versuchen sich anzumelden.",
+ "apihelp-block-param-noemail": "Benutzer davon abhalten, E-Mails auf dem Wiki zu versenden (erfordert das <code>blockemail</code>-Recht).",
+ "apihelp-block-param-hidename": "Den Benutzernamen im Sperr-Logbuch verstecken (erfordert das <code>hideuser</code>-Recht).",
+ "apihelp-block-param-allowusertalk": "Dem Benutzer erlauben, seine eigene Diskussionsseite zu bearbeiten (abhängig von <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Falls der Benutzer bereits gesperrt ist, die vorhandene Sperre überschreiben.",
+ "apihelp-block-param-watchuser": "Benutzer- und Diskussionsseiten des Benutzers oder der IP-Adresse beobachten.",
+ "apihelp-block-param-tags": "Auf den Eintrag im Sperr-Logbuch anzuwendende Änderungsmarkierungen.",
+ "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd> für drei Tage mit der Begründung „First strike“ (erste Verwarnung) sperren",
+ "apihelp-block-example-user-complex": "Benutzer <kbd>Vandal</kbd> unbeschränkt sperren mit der Begründung „Vandalism“ (Vandalismus), Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.",
+ "apihelp-changeauthenticationdata-summary": "Ändert die Authentifizierungsdaten für den aktuellen Benutzer.",
+ "apihelp-changeauthenticationdata-example-password": "Versucht, das Passwort des aktuellen Benutzers in <kbd>ExamplePassword</kbd> zu ändern.",
+ "apihelp-checktoken-summary": "Überprüft die Gültigkeit eines über <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> erhaltenen Tokens.",
+ "apihelp-checktoken-param-type": "Typ des Tokens, das getestet werden soll.",
+ "apihelp-checktoken-param-token": "Token, das getestet werden soll.",
+ "apihelp-checktoken-param-maxtokenage": "Maximal erlaubtes Alter des Tokens in Sekunden.",
+ "apihelp-checktoken-example-simple": "Überprüft die Gültigkeit des <kbd>csrf</kbd>-Tokens.",
+ "apihelp-clearhasmsg-summary": "Löschen des <code>hasmsg</code>-Flags („hat Nachrichten“-Flag) für den aktuellen Benutzer.",
+ "apihelp-clearhasmsg-example-1": "<code>hasmsg</code>-Flags für den aktuellen Benutzer löschen",
+ "apihelp-clientlogin-example-login": "Startet den Prozess der Anmeldung in dem Wiki als Benutzer <kbd>Example</kbd> mit dem Passwort <kbd>ExamplePassword</kbd>.",
+ "apihelp-compare-summary": "Ruft den Unterschied zwischen zwei Seiten ab.",
+ "apihelp-compare-extended-description": "Du musst eine Versionsnummer, einen Seitentitel oder eine Seitennummer für „from“ als auch „to“ angeben.",
+ "apihelp-compare-param-fromtitle": "Erster zu vergleichender Titel.",
+ "apihelp-compare-param-fromid": "Erste zu vergleichende Seitennummer.",
+ "apihelp-compare-param-fromrev": "Erste zu vergleichende Version.",
+ "apihelp-compare-param-totitle": "Zweiter zu vergleichender Titel.",
+ "apihelp-compare-param-toid": "Zweite zu vergleichende Seitennummer.",
+ "apihelp-compare-param-torev": "Zweite zu vergleichende Version.",
+ "apihelp-compare-paramvalue-prop-diff": "Das Unterschieds-HTML.",
+ "apihelp-compare-paramvalue-prop-diffsize": "Die Größe des Unterschieds-HTML in Bytes.",
+ "apihelp-compare-paramvalue-prop-title": "Die Seitentitel der Versionen „Von“ und „Nach“.",
+ "apihelp-compare-example-1": "Unterschied zwischen Version 1 und 2 abrufen",
+ "apihelp-createaccount-summary": "Erstellt ein neues Benutzerkonto.",
+ "apihelp-createaccount-param-preservestate": "Falls <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> für <samp>hasprimarypreservedstate</samp> wahr ausgegeben hat, sollten Anfragen, die als <samp>primary-required</samp> markiert wurden, ausgelassen werden. Falls ein nicht-leerer Wert für <samp>preservedusername</samp> zurückgegeben wurde, muss dieser Benutzername für den Parameter <var>username</var> verwendet werden.",
+ "apihelp-createaccount-param-name": "Benutzername.",
+ "apihelp-createaccount-param-password": "Passwort (wird ignoriert, wenn <var>$1mailpassword</var> angegeben ist).",
+ "apihelp-createaccount-param-domain": "Domain für die externe Authentifizierung (optional).",
+ "apihelp-createaccount-param-token": "Der in der ersten Anfrage erhaltene Benutzerkontenerstellungs-Token.",
+ "apihelp-createaccount-param-email": "E-Mail-Adresse des Benutzers (optional).",
+ "apihelp-createaccount-param-realname": "Realname des Benutzers (optional).",
+ "apihelp-createaccount-param-mailpassword": "Wenn ein Wert angegeben wird, wird ein zufälliges Passwort per E-Mail an den Benutzer versandt.",
+ "apihelp-createaccount-param-reason": "Optionale Begründung für die Benutzerkontenerstellung, die in den Logbüchern vermerkt wird.",
+ "apihelp-createaccount-param-language": "Festzulegender standardmäßiger Sprachcode für den Benutzer (optional, Standard ist Inhaltssprache).",
+ "apihelp-createaccount-example-pass": "Benutzer <kbd>testuser</kbd> mit dem Passwort <kbd>test123</kbd> erstellen.",
+ "apihelp-createaccount-example-mail": "Benutzer <kbd>testmailuser</kbd> erstellen und zufällig generiertes Passwort per E-Mail verschicken.",
+ "apihelp-delete-summary": "Löscht eine Seite.",
+ "apihelp-delete-param-title": "Titel der Seite, die gelöscht werden soll. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
+ "apihelp-delete-param-pageid": "Seitennummer der Seite, die gelöscht werden soll. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
+ "apihelp-delete-param-reason": "Löschbegründung. Falls nicht festgelegt, wird eine automatisch generierte Begründung verwendet.",
+ "apihelp-delete-param-tags": "Ändert die Markierungen, die auf den Eintrag im Lösch-Logbuch anzuwenden sind.",
+ "apihelp-delete-param-watch": "Seite auf die Beobachtungsliste des aktuellen Benutzers setzen.",
+ "apihelp-delete-param-watchlist": "Seite zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, die Standardeinstellungen verwenden oder die Beobachtung nicht ändern.",
+ "apihelp-delete-param-unwatch": "Seite von der Beobachtungsliste entfernen.",
+ "apihelp-delete-param-oldimage": "Name des alten zu löschenden Bildes, wie von [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] angegeben.",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd> löschen.",
+ "apihelp-delete-example-reason": "<kbd>Main Page</kbd> löschen mit der Begründung <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Dieses Modul wurde deaktiviert.",
+ "apihelp-edit-summary": "Erstellen und Bearbeiten von Seiten.",
+ "apihelp-edit-param-title": "Titel der Seite, die bearbeitet werden soll. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
+ "apihelp-edit-param-pageid": "Seitennummer der Seite, die bearbeitet werden soll. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
+ "apihelp-edit-param-section": "Abschnittsnummer. <kbd>0</kbd> für die Einleitung, <kbd>new</kbd> für einen neuen Abschnitt.",
+ "apihelp-edit-param-sectiontitle": "Die Überschrift für einen neuen Abschnitt.",
+ "apihelp-edit-param-text": "Seiteninhalt.",
+ "apihelp-edit-param-summary": "Bearbeitungszusammenfassung. Auch Abschnittsüberschrift, wenn $1section=new und $1sectiontitle nicht festgelegt ist.",
+ "apihelp-edit-param-tags": "Auf die Version anzuwendende Änderungsmarkierungen.",
+ "apihelp-edit-param-minor": "Kleine Bearbeitung.",
+ "apihelp-edit-param-notminor": "Nicht-kleine Bearbeitung.",
+ "apihelp-edit-param-bot": "Diese Bearbeitung als Bot-Bearbeitung markieren.",
+ "apihelp-edit-param-basetimestamp": "Zeitstempel der Basisversion, wird verwendet zum Aufspüren von Bearbeitungskonflikten. Kann abgerufen werden durch [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Zeitstempel, an dem der Bearbeitungsprozess begonnen wurde. Er wird zum Aufspüren von Bearbeitungskonflikten verwendet. Ein geeigneter Wert kann mithilfe von <var>[[Special:ApiHelp/main|curtimestamp]]</var> beim Beginn des Bearbeitungsprozesses (z.&nbsp;B. beim Laden des Seiteninhalts zum Bearbeiten) abgerufen werden.",
+ "apihelp-edit-param-recreate": "Keinen Fehler zurückgeben, wenn die Seite in der Zwischenzeit gelöscht wurde.",
+ "apihelp-edit-param-createonly": "Seite nicht bearbeiten, falls sie bereits vorhanden ist.",
+ "apihelp-edit-param-nocreate": "Einen Fehler zurückgeben, falls die Seite nicht vorhanden ist.",
+ "apihelp-edit-param-watch": "Seite der Beobachtungsliste hinzufügen.",
+ "apihelp-edit-param-unwatch": "Seite von der Beobachtungsliste entfernen.",
+ "apihelp-edit-param-watchlist": "Die Seite zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, die Standardeinstellungen verwenden oder die Beobachtung nicht ändern.",
+ "apihelp-edit-param-md5": "Der MD5-Hash des Parameters $1text oder der aneinandergehängten Parameter $1prependtext und $1appendtext. Wenn angegeben, wird die Bearbeitung nicht ausgeführt, wenn der Hash nicht korrekt ist.",
+ "apihelp-edit-param-prependtext": "Diesen Text an den Anfang der Seite setzen. Überschreibt $1text.",
+ "apihelp-edit-param-appendtext": "Diesen Text an das Ende der Seite hinzufügen. Überschreibt $1text.\n\nVerwende statt dieses Parameters $1section=new zum Anhängen eines neuen Abschnitts.",
+ "apihelp-edit-param-undo": "Diese Version rückgängig machen. Überschreibt $1text, $1prependtext und $1appendtext.",
+ "apihelp-edit-param-undoafter": "Alle Versionen von $1undo bis zu dieser rückgängig machen. Falls nicht angegeben, nur eine Version rückgängig machen.",
+ "apihelp-edit-param-redirect": "Weiterleitungen automatisch auflösen.",
+ "apihelp-edit-param-contentformat": "Für den Eingabetext verwendetes Inhaltsserialisierungsformat.",
+ "apihelp-edit-param-contentmodel": "Inhaltsmodell des neuen Inhalts.",
+ "apihelp-edit-param-token": "Der Token sollte immer als letzter Parameter gesendet werden, zumindest aber nach dem $1text-Parameter.",
+ "apihelp-edit-example-edit": "Eine Seite bearbeiten",
+ "apihelp-edit-example-prepend": "<kbd>_&#95;NOTOC_&#95;</kbd> bei einer Seite voranstellen",
+ "apihelp-edit-example-undo": "Versionen 13579 bis 13585 mit automatischer Zusammenfassung rückgängig machen",
+ "apihelp-emailuser-summary": "E-Mail an einen Benutzer senden.",
+ "apihelp-emailuser-param-target": "Benutzer, an den die E-Mail gesendet werden soll.",
+ "apihelp-emailuser-param-subject": "Betreffzeile.",
+ "apihelp-emailuser-param-text": "E-Mail-Inhalt.",
+ "apihelp-emailuser-param-ccme": "Eine Kopie dieser E-Mail an mich senden.",
+ "apihelp-emailuser-example-email": "Eine E-Mail an den Benutzer <kbd>WikiSysop</kbd> mit dem Text <kbd>Content</kbd> senden.",
+ "apihelp-expandtemplates-summary": "Alle Vorlagen innerhalb des Wikitextes expandieren.",
+ "apihelp-expandtemplates-param-title": "Titel der Seite.",
+ "apihelp-expandtemplates-param-text": "Zu konvertierender Wikitext.",
+ "apihelp-expandtemplates-param-revid": "Versionsnummer, die für die Anzeige von <code><nowiki>{{REVISIONID}}</nowiki></code> und ähnlichen Variablen verwendet wird.",
+ "apihelp-expandtemplates-param-prop": "Welche Informationen abgerufen werden sollen.\n\nBeachte bitte, dass das Ergebnis Wikitext enthält, aber die Ausgabe in einem veralteten Format ist, falls keine Werte ausgewählt sind.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Der expandierte Wikitext.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Kategorien in der Eingabe vorhanden, die nicht in der Ausgabe des Wikitextes vertreten sind.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Seiteneigenschaften, die durch expandierte magische Wörter im Wikitext definiert sind.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Ob die Ausgabe flüchtig ist und nicht an anderer Stelle auf der Seite wiederverwendet werden sollte.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Die maximale Zeit, nach der der Ergebnis-Cache ungültig wird.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Etwaige Ressourcen-Lader-Module, die Parserfunktionen angefordert haben, werden zur Ausgabe hinzugefügt. Entweder <kbd>jsconfigvars</kbd> oder <kbd>encodedjsconfigvars</kbd> müssen gemeinsam mit <kbd>modules</kbd> angefordert werden.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Gibt die JavaScript-Konfigurationsvariablen speziell für die Seite aus.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Gibt die JavaScript-Konfigurationsvariablen speziell für die Seite als JSON-Zeichenfolge aus.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "Der XML-Parserbaum der Eingabe.",
+ "apihelp-expandtemplates-param-includecomments": "Ob HTML-Kommentare in der Ausgabe eingeschlossen werden sollen.",
+ "apihelp-expandtemplates-param-generatexml": "XML-Parserbaum erzeugen (ersetzt durch $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Den Wikitext <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd> expandieren.",
+ "apihelp-feedcontributions-summary": "Gibt einen Benutzerbeiträge-Feed zurück.",
+ "apihelp-feedcontributions-param-feedformat": "Das Format des Feeds.",
+ "apihelp-feedcontributions-param-user": "Von welchen Benutzern die Beiträge abgerufen werden sollen.",
+ "apihelp-feedcontributions-param-namespace": "Auf welchen Namensraum die Beiträge begrenzt werden sollen.",
+ "apihelp-feedcontributions-param-year": "Von Jahr (und früher).",
+ "apihelp-feedcontributions-param-month": "Von Monat (und früher).",
+ "apihelp-feedcontributions-param-tagfilter": "Beiträge filtern, die diese Markierungen haben.",
+ "apihelp-feedcontributions-param-deletedonly": "Nur gelöschte Beiträge anzeigen.",
+ "apihelp-feedcontributions-param-toponly": "Nur aktuelle Versionen anzeigen.",
+ "apihelp-feedcontributions-param-newonly": "Nur Seitenerstellungen anzeigen.",
+ "apihelp-feedcontributions-param-hideminor": "Blendet Kleinigkeiten aus.",
+ "apihelp-feedcontributions-param-showsizediff": "Zeigt den Größenunterschied zwischen Versionen an.",
+ "apihelp-feedcontributions-example-simple": "Beiträge für die Benutzer <kbd>Beispiel<kbd> zurückgeben",
+ "apihelp-feedrecentchanges-summary": "Gibt einen Letzte-Änderungen-Feed zurück.",
+ "apihelp-feedrecentchanges-param-feedformat": "Das Format des Feeds.",
+ "apihelp-feedrecentchanges-param-namespace": "Namensraum, auf den die Ergebnisse beschränkt werden sollen.",
+ "apihelp-feedrecentchanges-param-invert": "Alle Namensräume außer dem ausgewählten.",
+ "apihelp-feedrecentchanges-param-associated": "Verbundenen Namensraum (Diskussions oder Hauptnamensraum) mit einschließen.",
+ "apihelp-feedrecentchanges-param-days": "Tage, auf die die Ergebnisse beschränkt werden sollen.",
+ "apihelp-feedrecentchanges-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+ "apihelp-feedrecentchanges-param-from": "Änderungen seit jetzt anzeigen.",
+ "apihelp-feedrecentchanges-param-hideminor": "Kleine Änderungen ausblenden.",
+ "apihelp-feedrecentchanges-param-hidebots": "Änderungen von Bots ausblenden.",
+ "apihelp-feedrecentchanges-param-hideanons": "Änderungen von anonymen Benutzern ausblenden.",
+ "apihelp-feedrecentchanges-param-hideliu": "Änderungen von registrierten Benutzern ausblenden.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Kontrollierte Änderungen ausblenden.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Änderungen des aktuellen Benutzers ausblenden.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Änderungen der Kategorie-Zugehörigkeit verstecken.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Nach Markierung filtern.",
+ "apihelp-feedrecentchanges-param-target": "Nur Änderungen an Seiten anzeigen, die von dieser Seite verlinkt sind.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Zeige Änderungen an Seiten die von der ausgewählten Seite verlinkt sind.",
+ "apihelp-feedrecentchanges-example-simple": "Letzte Änderungen anzeigen",
+ "apihelp-feedrecentchanges-example-30days": "Letzte Änderungen für 30 Tage anzeigen",
+ "apihelp-feedwatchlist-summary": "Gibt einen Beobachtungslisten-Feed zurück.",
+ "apihelp-feedwatchlist-param-feedformat": "Das Format des Feeds.",
+ "apihelp-feedwatchlist-param-hours": "Seiten auflisten, die innerhalb dieser Anzahl Stunden ab jetzt geändert wurden.",
+ "apihelp-feedwatchlist-param-linktosections": "Verlinke direkt zum veränderten Abschnitt, wenn möglich.",
+ "apihelp-feedwatchlist-example-default": "Den Beobachtungslisten-Feed anzeigen",
+ "apihelp-feedwatchlist-example-all6hrs": "Zeige alle Änderungen an beobachteten Seiten der letzten 6 Stunden.",
+ "apihelp-filerevert-summary": "Eine Datei auf eine alte Version zurücksetzen.",
+ "apihelp-filerevert-param-filename": "Ziel-Datei, ohne das Datei:-Präfix.",
+ "apihelp-filerevert-param-comment": "Hochladekommentar.",
+ "apihelp-filerevert-param-archivename": "Archivname der Version, auf die die Datei zurückgesetzt werden soll.",
+ "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd> auf die Version vom <kbd>2011-03-05T15:27:40Z</kbd> zurücksetzen.",
+ "apihelp-help-summary": "Hilfe für die angegebenen Module anzeigen.",
+ "apihelp-help-param-modules": "Module, zu denen eine Hilfe angezeigt werden soll (Werte der Parameter <var>action</var> und <var>format</var> oder <kbd>main</kbd>). Kann Submodule mit einem <kbd>+</kbd> angeben.",
+ "apihelp-help-param-submodules": "Hilfe für Submodule des benannten Moduls einschließen.",
+ "apihelp-help-param-recursivesubmodules": "Hilfe für Submodule rekursiv einschließen.",
+ "apihelp-help-param-helpformat": "Format der Hilfe-Ausgabe.",
+ "apihelp-help-param-wrap": "Die Ausgabe in eine Standard-API-Antwort-Struktur einschließen.",
+ "apihelp-help-param-toc": "Ein Inhaltsverzeichnis in der HTML-Ausgabe einschließen.",
+ "apihelp-help-example-main": "Hilfe für das Hauptmodul",
+ "apihelp-help-example-submodules": "Hilfe für <kbd>action=query</kbd> und all seine Untermodule.",
+ "apihelp-help-example-recursive": "Alle Hilfen in einer Seite",
+ "apihelp-help-example-help": "Hilfe für das Hilfemodul selbst",
+ "apihelp-help-example-query": "Hilfe für zwei Abfrage-Submodule",
+ "apihelp-imagerotate-summary": "Ein oder mehrere Bilder drehen.",
+ "apihelp-imagerotate-param-rotation": "Anzahl der Grad, um die das Bild im Uhrzeigersinn gedreht werden soll.",
+ "apihelp-imagerotate-param-tags": "Auf den Eintrag im Datei-Logbuch anzuwendende Markierungen",
+ "apihelp-imagerotate-example-simple": "<kbd>Datei:Beispiel.png</kbd> um <kbd>90</kbd> Grad drehen.",
+ "apihelp-imagerotate-example-generator": "Alle Bilder in der <kbd>Kategorie:Flip</kbd> um <kbd>180</kbd> Grad drehen.",
+ "apihelp-import-summary": "Importiert eine Seite aus einem anderen Wiki oder von einer XML-Datei.",
+ "apihelp-import-extended-description": "Bitte beachte, dass der HTTP-POST-Vorgang als Dateiupload ausgeführt werden muss (z.B. durch multipart/form-data), um eine Datei über den <var>xml</var>-Parameter zu senden.",
+ "apihelp-import-param-summary": "Importzusammenfassung des Logbucheintrags.",
+ "apihelp-import-param-xml": "Hochgeladene XML-Datei.",
+ "apihelp-import-param-interwikiprefix": "Für hochgeladene Importe: Auf unbekannte Benutzernamen anzuwendendes Interwiki-Präfix (und bekannte Benutzer, falls <var>$1assignknownusers</var> festgelegt ist).",
+ "apihelp-import-param-assignknownusers": "Weist Bearbeitungen lokalen Benutzern zu, wo der benannte Benutzer lokal vorhanden ist.",
+ "apihelp-import-param-interwikisource": "Für Interwiki-Importe: Wiki, von dem importiert werden soll.",
+ "apihelp-import-param-interwikipage": "Für Interwiki-Importe: zu importierende Seite.",
+ "apihelp-import-param-fullhistory": "Für Interwiki-Importe: importiere die komplette Versionsgeschichte, nicht nur die aktuelle Version.",
+ "apihelp-import-param-templates": "Für Interwiki-Importe: importiere auch alle eingebundenen Vorlagen.",
+ "apihelp-import-param-namespace": "In diesen Namensraum importieren. Kann nicht zusammen mit <var>$1rootpage</var> verwendet werden.",
+ "apihelp-import-param-rootpage": "Als Unterseite dieser Seite importieren. Kann nicht zusammen mit <var>$1namespace</var> verwendet werden.",
+ "apihelp-import-param-tags": "Auf den Eintrag im Import-Logbuch und die Nullversion bei den importierten Seiten anzuwendende Änderungsmarkierungen.",
+ "apihelp-import-example-import": "Importiere [[meta:Help:ParserFunctions]] mit der kompletten Versionsgeschichte in den Namensraum 100.",
+ "apihelp-linkaccount-summary": "Verbindet ein Benutzerkonto von einem Drittanbieter mit dem aktuellen Benutzer.",
+ "apihelp-login-summary": "Anmelden und Authentifizierungs-Cookies beziehen.",
+ "apihelp-login-extended-description": "Diese Aktion sollte nur in Kombination mit [[Special:BotPasswords]] verwendet werden. Die Verwendung für die Anmeldung beim Hauptkonto ist veraltet und kann ohne Warnung fehlschlagen. Um sich sicher beim Hauptkonto anzumelden, verwende <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Benutzername.",
+ "apihelp-login-param-password": "Passwort.",
+ "apihelp-login-param-domain": "Domain (optional).",
+ "apihelp-login-param-token": "Anmeldetoken, den du in der ersten Anfrage erhalten hast.",
+ "apihelp-login-example-gettoken": "Ruft einen Anmelde-Token ab",
+ "apihelp-login-example-login": "Anmelden",
+ "apihelp-logout-summary": "Abmelden und alle Sitzungsdaten löschen.",
+ "apihelp-logout-example-logout": "Meldet den aktuellen Benutzer ab",
+ "apihelp-managetags-summary": "Ermöglicht Verwaltungsaufgaben zu Änderungsmarkierungen.",
+ "apihelp-managetags-param-operation": "Welcher Vorgang soll ausgeführt werden:\n;create:Ein neues Änderungsschlagwort zum manuellen Gebrauch erstellen.\n;delete:Ein Änderungsschlagwort aus der Datenbank entfernen. Einschließlich dem Entfernen des Schlagworts von allen Überarbeitungen, kürzlichen Änderungseinträgen und Logbuch-Einträgen, in denen es genutzt wird.\n;activate:Ein Änderungsschlagwort aktivieren und damit Benutzern erlauben es manuell anzuwenden.\n;deactive:Ein Änderungsschlagwort deaktivieren und damit die manuelle Verwendung durch Benutzer unterbinden.",
+ "apihelp-managetags-param-tag": "Schlagwort zum Erstellen, Löschen, Aktivieren oder Deaktivieren. Zum Erstellen darf das Schlagwort noch nicht vorhanden sein. Zur Löschung muss das Schlagwort vorhanden sein. Zur Aktivierung muss das Schlagwort vorhanden sein, darf aber nicht von einer Erweiterung in Gebrauch sein. Zur Deaktivierung muss das Schlagwort gegenwärtig aktiv und manuell definiert sein.",
+ "apihelp-managetags-param-reason": "optionale Begründung für das Erstellen, Löschen, Aktivieren oder Deaktivieren der Markierung.",
+ "apihelp-managetags-param-ignorewarnings": "Warnungen während des Vorgangs ignorieren.",
+ "apihelp-managetags-param-tags": "Auf den Eintrag im Markierungs-Verwaltungs-Logbuch anzuwendende Änderungsmarkierungen.",
+ "apihelp-managetags-example-create": "Erstellt eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>For use in edit patrolling</kbd> (für die Eingangskontrolle).",
+ "apihelp-managetags-example-delete": "Löscht die <kbd>vandlaism</kbd>-Markierung mit der Begründung <kbd>Misspelt</kbd>.",
+ "apihelp-managetags-example-activate": "Aktiviert eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>For use in edit patrolling</kbd> (für die Eingangskontrolle).",
+ "apihelp-managetags-example-deactivate": "Deaktiviert eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>No longer required</kbd> (nicht mehr benötigt).",
+ "apihelp-mergehistory-summary": "Führt Versionsgeschichten von Seiten zusammen.",
+ "apihelp-mergehistory-param-reason": "Grund für die Zusammenführung der Versionsgeschichten",
+ "apihelp-mergehistory-example-merge": "Fügt alle Versionen von <kbd>Oldpage</kbd> der Versionsgeschichte von <kbd>Newpage</kbd> hinzu.",
+ "apihelp-move-summary": "Eine Seite verschieben.",
+ "apihelp-move-param-from": "Titel der zu verschiebenden Seite. Kann nicht zusammen mit <var>$1fromid</var> verwendet werden.",
+ "apihelp-move-param-fromid": "Seitenkennung der zu verschiebenden Seite. Kann nicht zusammen mit <var>$1from</var> verwendet werden.",
+ "apihelp-move-param-to": "Titel, zu dem die Seite umbenannt werden soll.",
+ "apihelp-move-param-reason": "Grund für die Umbenennung.",
+ "apihelp-move-param-movetalk": "Verschiebt die Diskussionsseite, falls vorhanden.",
+ "apihelp-move-param-movesubpages": "Unterseiten verschieben, falls möglich.",
+ "apihelp-move-param-noredirect": "Keine Weiterleitung erstellen.",
+ "apihelp-move-param-watch": "Die Seite und die entstandene Weiterleitung zur Beobachtungsliste hinzufügen.",
+ "apihelp-move-param-unwatch": "Die Seite und die entstandene Weiterleitung von der Beobachtungsliste entfernen.",
+ "apihelp-move-param-watchlist": "Die Seite in jedem Fall zur Beobachtungsliste hinzufügen oder davon entfernen, die Voreinstellungen dafür nutzen oder den Beobachtungsstatus nicht ändern.",
+ "apihelp-move-param-ignorewarnings": "Alle Warnungen ignorieren.",
+ "apihelp-move-param-tags": "Auf den Eintrag im Verschiebungs-Logbuch und die Nullversion der Zielseite anzuwendende Änderungsmarkierungen.",
+ "apihelp-move-example-move": "<kbd>Badtitle</kbd> nach <kbd>Goodtitle</kbd> verschieben, ohne eine Weiterleitung zu erstellen.",
+ "apihelp-opensearch-summary": "Das Wiki mithilfe des OpenSearch-Protokolls durchsuchen.",
+ "apihelp-opensearch-param-search": "Such-Zeichenfolge.",
+ "apihelp-opensearch-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+ "apihelp-opensearch-param-namespace": "Zu durchsuchende Namensräume. Wird ignoriert, falls <var>$1search</var> mit einem gültigen Namensraumpräfix beginnt.",
+ "apihelp-opensearch-param-suggest": "Nichts unternehmen, falls <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> falsch ist.",
+ "apihelp-opensearch-param-redirects": "Wie mit Weiterleitungen umgegangen werden soll:\n;return:Gibt die Weiterleitung selbst zurück.\n;resolve:Gibt die Zielseite zurück. Kann weniger als $1limit Ergebnisse zurückgeben.\nAus Kompatibilitätsgründen ist für $1format=json die Vorgabe \"return\" und \"resolve\" für alle anderen Formate.",
+ "apihelp-opensearch-param-format": "Das Format der Ausgabe.",
+ "apihelp-opensearch-param-warningsaserror": "Wenn Warnungen mit <kbd>format=json</kbd> auftreten, gib einen API-Fehler zurück, anstatt ihn zu ignorieren.",
+ "apihelp-opensearch-example-te": "Seiten finden, die mit <kbd>Te</kbd> beginnen.",
+ "apihelp-options-summary": "Die Voreinstellungen des gegenwärtigen Benutzers ändern.",
+ "apihelp-options-param-reset": "Setzt die Einstellungen auf Websitestandards zurück.",
+ "apihelp-options-param-resetkinds": "Liste von zurückzusetzenden Optionstypen, wenn die <var>$1reset</var>-Option ausgewählt ist.",
+ "apihelp-options-param-change": "Liste von Änderungen, die mit name=wert formatiert sind (z.&nbsp;B. skin=vector). Falls kein Wert angegeben wurde (ohne einem Gleichheitszeichen), z.&nbsp;B. Optionname|AndereOption|…, wird die Option auf ihren Standardwert zurückgesetzt. Falls ein übergebener Wert ein Trennzeichen enthält (<kbd>|</kbd>), verwende den [[Special:ApiHelp/main#main/datatypes|alternativen Mehrfachwerttrenner]] zur korrekten Bedienung.",
+ "apihelp-options-param-optionvalue": "Der Wert für die Option, die durch <var>$1optionname</var> angegeben ist.",
+ "apihelp-options-example-reset": "Alle Einstellungen zurücksetzen",
+ "apihelp-options-example-change": "Ändert die Einstellungen <kbd>skin</kbd> und <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Setzt alle Einstellungen zurück, dann <kbd>skin</kbd> und <kbd>nickname</kbd> festlegen.",
+ "apihelp-paraminfo-summary": "Ruft Informationen über API-Module ab.",
+ "apihelp-paraminfo-param-modules": "Liste von Modulnamen (Werte der Parameter <var>action</var> und <var>format</var> oder <kbd>main</kbd>). Kann Untermodule mit einem <kbd>+</kbd> oder alle Untermodule mit <kbd>+*</kbd> oder alle Untermodule rekursiv mit <kbd>+**</kbd> bestimmen.",
+ "apihelp-paraminfo-param-helpformat": "Format der Hilfe-Zeichenfolgen.",
+ "apihelp-paraminfo-param-querymodules": "Liste von Abfragemodulnamen (Werte von <var>prop</var>-, <var>meta</var>- oder <var>list</var>-Parameter). Benutze <kbd>$1modules=query+foo</kbd> anstatt <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Auch Informationen über die Hauptmodule (top-level) erhalten. Benutze <kbd>$1modules=main</kbd> stattdessen.",
+ "apihelp-paraminfo-param-formatmodules": "Liste von Formatmodulnamen (Wert des Parameters <var>format</var>). Stattdessen <var>$1modules</var> verwenden.",
+ "apihelp-paraminfo-example-1": "Zeige Info für <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, und <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-parse-summary": "Parst den Inhalt und gibt die Parserausgabe zurück.",
+ "apihelp-parse-param-title": "Titel der Seite, zu der der Text gehört. Falls ausgelassen, muss <var>$1contentmodel</var> angegeben werden und [[API]] wird als Titel verwendet.",
+ "apihelp-parse-param-text": "Zu parsender Text. <var>$1title</var> oder <var>$1contentmodel</var> verwenden, um das Inhaltsmodell zu steuern.",
+ "apihelp-parse-param-revid": "Versionskennung, für <code><nowiki>{{REVISIONID}}</nowiki></code> und ähnliche Variablen.",
+ "apihelp-parse-param-summary": "Zu parsende Zusammenfassung.",
+ "apihelp-parse-param-page": "Parst den Inhalt dieser Seite. Kann nicht zusammen mit <var>$1text</var> und <var>$1title</var> verwendet werden.",
+ "apihelp-parse-param-pageid": "Parst den Inhalt dieser Seite. Überschreibt <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Falls <var>$1page</var> oder <var>$1pageid</var> als eine Weiterleitung festgelegt ist, diese auflösen.",
+ "apihelp-parse-param-oldid": "Parst den Inhalt dieser Version. Überschreibt <var>$1page</var> und <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Welche Informationen bezogen werden sollen:",
+ "apihelp-parse-paramvalue-prop-text": "Gibt den geparsten Text des Wikitextes zurück.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Gibt die Sprachlinks im geparsten Wikitext zurück.",
+ "apihelp-parse-paramvalue-prop-categories": "Gibt die Kategorien im geparsten Wikitext zurück.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Gibt die HTML-Version der Kategorien zurück.",
+ "apihelp-parse-paramvalue-prop-links": "Gibt die internen Links im geparsten Wikitext zurück.",
+ "apihelp-parse-paramvalue-prop-templates": "Gibt die Vorlagen im geparsten Wikitext zurück.",
+ "apihelp-parse-paramvalue-prop-images": "Gibt die Bilder im geparsten Wikitext zurück.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Gibt die externen Links im geparsten Wikitext zurück.",
+ "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 <code>&lt;head&gt;</code> der Seite zurück.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Gibt die JavaScript-Konfigurationsvariablen speziell für die Seite aus. Zur Anwendung verwende <code>mw.config.set()</code>.",
+ "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.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Gibt Interwiki-Links des geparsten Wikitextes zurück.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Gibt den originalen Wikitext zurück, der geparst wurde.",
+ "apihelp-parse-paramvalue-prop-properties": "Gibt verschiedene Eigenschaften zurück, die im geparsten Wikitext definiert sind.",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Gibt die Warnungen aus, die beim Parsen des Inhalts aufgetreten sind.",
+ "apihelp-parse-param-wrapoutputclass": "Zu verwendende CSS-Klasse, in der die Parserausgabe verpackt werden soll.",
+ "apihelp-parse-param-section": "Parst nur den Inhalt dieser Abschnittsnummer.\n\nFalls <kbd>new</kbd>, parst <var>$1text</var> und <var>$1sectiontitle</var>, als ob ein neuer Abschnitt der Seite hinzugefügt wird.\n\n<kbd>new</kbd> ist nur erlaubt mit der Angabe <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "Überschrift des neuen Abschnittes, wenn <var>section</var> = <kbd>new</kbd> ist.\n\nAnders als beim Bearbeiten der Seite wird der Parameter nicht durch die <var>summary</var> ersetzt, wenn er weggelassen oder leer ist.",
+ "apihelp-parse-param-disablepp": "Benutze <var>$1disablelimitreport</var> stattdessen.",
+ "apihelp-parse-param-disableeditsection": "Lässt Abschnittsbearbeitungslinks in der Parserausgabe weg.",
+ "apihelp-parse-param-disabletidy": "Wende keine HTML-Säuberung (z.B. Aufräumen) auf die Parser-Ausgabe an.",
+ "apihelp-parse-param-preview": "Im Vorschaumodus parsen.",
+ "apihelp-parse-param-sectionpreview": "Im Abschnitt Vorschau-Modus parsen (aktiviert ebenfalls den Vorschau-Modus)",
+ "apihelp-parse-param-disabletoc": "Inhaltsverzeichnis in der Ausgabe weglassen.",
+ "apihelp-parse-param-useskin": "Wendet die ausgewählte Benutzeroberfläche auf die Parserausgabe an. Kann Auswirkungen auf die folgenden Eigenschaften haben: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-param-contentmodel": "Inhaltsmodell des eingegebenen Textes. Fall ausgelassen, muss $1title angegeben werden und Standardwert wird das Modell des angegebenen Titels. Ist nur gültig im Zusammenhang mit $1text.",
+ "apihelp-parse-example-page": "Eine Seite parsen.",
+ "apihelp-parse-example-text": "Wikitext parsen.",
+ "apihelp-parse-example-texttitle": "Parst den Wikitext über die Eingabe des Seitentitels.",
+ "apihelp-parse-example-summary": "Parst eine Zusammenfassung.",
+ "apihelp-patrol-summary": "Kontrolliert eine Seite oder Version.",
+ "apihelp-patrol-param-rcid": "Letzte-Änderungen-Kennung, die kontrolliert werden soll.",
+ "apihelp-patrol-param-revid": "Versionskennung, die kontrolliert werden soll.",
+ "apihelp-patrol-param-tags": "Auf den Kontroll-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
+ "apihelp-patrol-example-rcid": "Kontrolliert eine kürzlich getätigte Änderung.",
+ "apihelp-patrol-example-revid": "Kontrolliert eine Version",
+ "apihelp-protect-summary": "Ändert den Schutzstatus einer Seite.",
+ "apihelp-protect-param-title": "Titel der Seite, die du (ent-)sperren möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
+ "apihelp-protect-param-pageid": "Seitenkennung der Seite, die du (ent-)sperren möchtest. Kann nicht zusammen mit $1title verwendet werden.",
+ "apihelp-protect-param-protections": "Listet die Schutzebenen nach dem Format <kbd>Aktion=Ebene</kbd> (z.&nbsp;B. <kbd>edit=sysop</kbd>) auf. Die Ebene <kbd>all</kbd> bedeutet, dass jeder die Aktion ausführen darf, z.&nbsp;B. keine Beschränkung.\n\n<strong>HINWEIS:</strong> Wenn eine Aktion nicht angegeben wird, wird deren Schutz entfernt.",
+ "apihelp-protect-param-expiry": "Zeitstempel des Schutzablaufs. Wenn nur ein Zeitstempel übergeben wird, ist dieser für alle Seitenschutze gültig. Um eine unendliche Schutzdauer festzulegen, kannst du die Werte <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> oder <kbd>never</kbd> übergeben.",
+ "apihelp-protect-param-reason": "Grund für den Seitenschutz oder dessen Aufhebung.",
+ "apihelp-protect-param-tags": "Auf den Seitenschutz-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
+ "apihelp-protect-param-cascade": "Aktiviert den Kaskadenschutz (d.&nbsp;h. in dieser Seite eingebundene Vorlagen und Bilder werden geschützt). Wird ignoriert, falls keine der angegebenen Schutzebenen Kaskaden unterstützt.",
+ "apihelp-protect-param-watch": "Wenn vorhanden, fügt dieser Parameter die zu (ent-)sperrende Seite der Beobachtungsliste des aktuellen Benutzers hinzu.",
+ "apihelp-protect-param-watchlist": "Die Seite bedingungslos zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+ "apihelp-protect-example-protect": "Schützt eine Seite",
+ "apihelp-protect-example-unprotect": "Entsperrt eine Seite, indem die Einschränkungen durch den Schutz auf <kbd>all</kbd> gestellt werden (z.&nbsp;B. darf jeder die Aktion ausführen).",
+ "apihelp-protect-example-unprotect2": "Eine Seite entsperren, indem keine Einschränkungen übergeben werden",
+ "apihelp-purge-summary": "Setzt den Cache der angegebenen Seiten zurück.",
+ "apihelp-purge-param-forcelinkupdate": "Aktualisiert die Linktabellen.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Aktualisiert die Linktabelle der Seite und alle Linktabellen der Seiten, die sie als Vorlage einbinden.",
+ "apihelp-purge-example-simple": "Purgt die <kbd>Main Page</kbd> und die <kbd>API</kbd>-Seite.",
+ "apihelp-purge-example-generator": "Purgt die ersten 10 Seiten des Hauptnamensraums.",
+ "apihelp-query-summary": "Bezieht Daten von und über MediaWiki.",
+ "apihelp-query-extended-description": "Alle Änderungsvorgänge müssen unter Angabe eines Tokens ablaufen, um Missbrauch durch böswillige Anwendungen vorzubeugen.",
+ "apihelp-query-param-prop": "Zurückzugebende Eigenschaften der abgefragten Seiten.",
+ "apihelp-query-param-list": "Welche Listen abgerufen werden sollen.",
+ "apihelp-query-param-meta": "Zurückzugebende Metadaten.",
+ "apihelp-query-param-indexpageids": "Schließt einen zusätzlichen pageids-Abschnitt mit allen zurückgegebenen Seitenkennungen ein.",
+ "apihelp-query-param-export": "Exportiert die aktuellen Versionen der angegebenen oder generierten Seiten.",
+ "apihelp-query-param-exportnowrap": "Gibt den XML-Export zurück, ohne ihn in ein XML-Ergebnis einzuschließen (gleiches Format wie durch [[Special:Export]]). Kann nur zusammen mit $1export genutzt werden.",
+ "apihelp-query-param-iwurl": "Gibt an, ob die komplette URL zurückgegeben werden soll, wenn der Titel ein Interwikilink ist.",
+ "apihelp-query-param-rawcontinue": "Gibt <samp>query-continue</samp>-Rohdaten zur Fortsetzung zurück.",
+ "apihelp-query-example-revisions": "Bezieht [[Special:ApiHelp/query+siteinfo|Seiteninformationen]] und [[Special:ApiHelp/query+revisions|Versionen]] der <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Bezieht Versionen von Seiten, die mit <kbd>API/</kbd> beginnen.",
+ "apihelp-query+allcategories-summary": "Alle Kategorien aufzählen.",
+ "apihelp-query+allcategories-param-from": "Kategorie, bei der die Auflistung beginnen soll.",
+ "apihelp-query+allcategories-param-to": "Kategorie, bei der die Auflistung enden soll.",
+ "apihelp-query+allcategories-param-prefix": "Listet alle Kategorien auf, die mit dem angegebenen Wert beginnen.",
+ "apihelp-query+allcategories-param-dir": "Sortierrichtung.",
+ "apihelp-query+allcategories-param-min": "Gibt nur Kategorien zurück, die mindestens die angegebene Anzahl an Einträgen haben.",
+ "apihelp-query+allcategories-param-max": "Gibt nur Kategorien zurück, die höchstens die angegebene Anzahl an Einträgen haben.",
+ "apihelp-query+allcategories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
+ "apihelp-query+allcategories-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Ergänzt die Anzahl der Einträge in der Antwort.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Markiert über <code>_&#95;HIDDENCAT_&#95;</code> versteckte Kategorien.",
+ "apihelp-query+allcategories-example-size": "Listet Kategorien mit der Anzahl ihrer Einträge auf.",
+ "apihelp-query+allcategories-example-generator": "Bezieht Informationen über die Kategorieseite selbst für Kategorien, die mit <kbd>List</kbd> beginnen.",
+ "apihelp-query+alldeletedrevisions-summary": "Bezieht alle gelöschten Versionen eines Benutzers oder eines Namensraumes.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Darf nur mit <var>$3user</var> verwendet werden.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kann nicht zusammen mit <var>$3user</var> benutzt werden.",
+ "apihelp-query+alldeletedrevisions-param-start": "Der Zeitstempel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+alldeletedrevisions-param-end": "Der Zeitstempel, bei dem die Auflistung enden soll.",
+ "apihelp-query+alldeletedrevisions-param-from": "Seitentitel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+alldeletedrevisions-param-to": "Seitentitel, bei dem die Auflistung enden soll.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Listet alle Seitentitel auf, die mit dem angegebenen Wert beginnen.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Listet nur Versionen auf, die die angegebene Markierung haben.",
+ "apihelp-query+alldeletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Schließt Bearbeitungen des angegebenen Benutzers aus.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Nur Seiten in diesem Namensraum auflisten.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Wenn als Generator verwendet, werden eher Titel als Bearbeitungs-IDs erzeugt.",
+ "apihelp-query+alldeletedrevisions-example-user": "Liste die letzten 50 gelöschten Beiträge, sortiert nach Benutzer <kbd>Beispiel</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Liste die ersten 50 gelöschten Bearbeitungen im Hauptnamensraum.",
+ "apihelp-query+allfileusages-summary": "Liste alle Dateiverwendungen, einschließlich nicht-vorhandener.",
+ "apihelp-query+allfileusages-param-from": "Titel der Datei, bei der die Aufzählung beginnen soll.",
+ "apihelp-query+allfileusages-param-to": "Titel der Datei, bei der die Aufzählung enden soll.",
+ "apihelp-query+allfileusages-param-prefix": "Sucht nach allen Dateititeln, die mit diesem Wert beginnen.",
+ "apihelp-query+allfileusages-param-prop": "Informationsteile zum Einbinden:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Fügt die Seiten-IDs der benutzenden Seiten hinzu (kann nicht mit $1unique verwendet werden).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Ergänzt den Titel der Datei.",
+ "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
+ "apihelp-query+allfileusages-param-dir": "Aufzählungsrichtung.",
+ "apihelp-query+allfileusages-example-B": "Liste Dateititel, einschließlich fehlender, mit den Seiten-IDs von denen sie stammen, beginne bei <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
+ "apihelp-query+allfileusages-example-unique-generator": "Ruft alle Dateititel ab und markiert die fehlenden.",
+ "apihelp-query+allfileusages-example-generator": "Seiten abrufen, die die Dateien enthalten",
+ "apihelp-query+allimages-summary": "Alle Bilder nacheinander auflisten.",
+ "apihelp-query+allimages-param-sort": "Eigenschaft, nach der sortiert werden soll.",
+ "apihelp-query+allimages-param-dir": "Aufzählungsrichtung.",
+ "apihelp-query+allimages-param-from": "Der Bildtitel bei dem die Auflistung beginnen soll. Darf nur mit $1sort=Name verwendet werden.",
+ "apihelp-query+allimages-param-to": "Der Bildtitel bei dem die Auflistung anhalten soll. Dard nur mit $1sort=Name verwendet werden.",
+ "apihelp-query+allimages-param-start": "Der Zeitstempel bei dem die Auflistung beginnen soll. Darf nur mit $1sort=Zeitstempel verwendet werden.",
+ "apihelp-query+allimages-param-end": "Der Zeitstempel bei dem die Auflistung anhalten soll. Darf nur mit $1sort=Zeitstempel verwendet werden.",
+ "apihelp-query+allimages-param-prefix": "Suche nach allen Bilder die mit diesem Wert beginnen. Darf nur mit $1sort=Name verwendet werden.",
+ "apihelp-query+allimages-param-minsize": "Beschränkt auf Bilder mit mindestens dieser Anzahl an Bytes.",
+ "apihelp-query+allimages-param-maxsize": "Beschränkt auf Bilder mit höchstens dieser Anzahl an Bytes.",
+ "apihelp-query+allimages-param-sha1": "SHA1-Hash des Bildes. Überschreibt $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1-Hash des Bildes (Basis 36; verwendet in MediaWiki).",
+ "apihelp-query+allimages-param-user": "Gibt nur Dateien zurück, die von diesem Nutzer hochgeladen wurden. Darf nur mit $1sort=Zeitstempel verwendet werden. Darf nicht mit zusammen mit $1filterbots verwendet werden.",
+ "apihelp-query+allimages-param-filterbots": "Wie Dateien, die von Bots hochgeladen wurden, gefiltert werden sollen. Darf nur mit $1sort=Zeitstempel verwendet werden. Darf nicht zusammen mit $1user verwendet werden.",
+ "apihelp-query+allimages-param-mime": "Nach welchem MIME-Typ gesucht werden soll, z.B. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Wie viele Gesamtbilder zurückgegeben werden sollen.",
+ "apihelp-query+allimages-example-B": "Zeigt eine Liste der Dateien an, die mit dem Buchstaben <kbd>B</kbd> beginnen.",
+ "apihelp-query+allimages-example-recent": "Zeigt eine Liste von kürzlich hochgeladenen Dateien ähnlich zu [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Zeige eine Liste von Dateien mit den MIME-Typen <kbd>image/png</kbd> oder <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Zeige Informationen über 4 Dateien beginnend mit dem Buchstaben <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Liste alle Verknüpfungen auf, die auf einen bestimmten Namensraum verweisen.",
+ "apihelp-query+alllinks-param-from": "Der Titel der Verknüpfung bei der die Auflistung beginnen soll.",
+ "apihelp-query+alllinks-param-to": "Der Titel der Verknüpfung bei der die Auflistung enden soll.",
+ "apihelp-query+alllinks-param-prefix": "Suche nach allen verknüpften Titeln die mit diesem Wert beginnen.",
+ "apihelp-query+alllinks-param-prop": "Welche Informationsteile einbinden:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Fügt die Seiten-ID der verknüpfenden Seite hinzu (darf nicht zusammen mit <var>$1unique</var> verwendet werden).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Fügt den Titel der Verknüpfung hinzu.",
+ "apihelp-query+alllinks-param-namespace": "Der aufzulistende Namensraum.",
+ "apihelp-query+alllinks-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
+ "apihelp-query+alllinks-param-dir": "Aufzählungsrichtung.",
+ "apihelp-query+alllinks-example-B": "Liste verknüpfte Titel, einschließlich fehlender, mit den Seiten-IDs von denen sie stammen, beginne bei <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Einheitlich verlinkte Titel auflisten",
+ "apihelp-query+alllinks-example-unique-generator": "Ruft alle verknüpften Titel ab und markiert die fehlenden.",
+ "apihelp-query+alllinks-example-generator": "Ruft Seiten ab welche die Verknüpfungen beinhalten.",
+ "apihelp-query+allmessages-summary": "Gibt Nachrichten von dieser Website zurück.",
+ "apihelp-query+allmessages-param-messages": "Welche Nachrichten ausgegeben werden sollen. <kbd>*</kbd> (Vorgabe) bedeutet alle Nachrichten.",
+ "apihelp-query+allmessages-param-prop": "Zurückzugebende Eigenschaften.",
+ "apihelp-query+allmessages-param-enableparser": "Setzen, um den Parser zu aktivieren. Dies wird den Wikitext der Nachricht vorverarbeiten (magische Worte ersetzen, Vorlagen berücksichtigen, usw.).",
+ "apihelp-query+allmessages-param-nocontent": "Wenn gesetzt, füge nicht den Inhalt der Nachricht der Ausgabe hinzu.",
+ "apihelp-query+allmessages-param-includelocal": "Schließt auch lokale Nachrichten ein, zum Beispiel Nachrichten, die nicht in der Software vorhanden sind, aber dafür im {{ns:MediaWiki}}-Namensraum.\nDies listet alle Seiten im {{ns:MediaWiki}}-Namensraum auf, auch solche, die nicht wirklich Nachrichten sind, wie [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Argumente die in der Nachricht ersetzt werden sollen.",
+ "apihelp-query+allmessages-param-filter": "Gebe nur Nachrichten mit Namen, die diese Zeichenfolge enthalten, zurück.",
+ "apihelp-query+allmessages-param-customised": "Gebe nur Nachrichten in diesem Anpassungszustand zurück.",
+ "apihelp-query+allmessages-param-lang": "Gebe Nachrichten in dieser Sprache zurück.",
+ "apihelp-query+allmessages-param-from": "Gebe Nachrichten beginnend mit dieser Nachricht zurück.",
+ "apihelp-query+allmessages-param-to": "Gebe Nachrichten bei dieser Nachricht endend zurück.",
+ "apihelp-query+allmessages-param-title": "Seitenname, der als Kontext verwendet werden soll, wenn eine Nachricht geparst wird (für die $1enableparser-Option).",
+ "apihelp-query+allmessages-param-prefix": "Gebe Nachrichten mit diesem Präfix zurück.",
+ "apihelp-query+allmessages-example-ipb": "Zeige Nachrichten die mit <kbd>ipb-</kbd> beginnen.",
+ "apihelp-query+allmessages-example-de": "Zeige Nachrichten <kbd>august</kbd> und <kbd>mainpage</kbd> auf deutsch.",
+ "apihelp-query+allpages-summary": "Listet alle Seiten in einem Namensraum nacheinander auf.",
+ "apihelp-query+allpages-param-from": "Seitentitel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+allpages-param-to": "Seitentitel, bei dem die Auflistung enden soll.",
+ "apihelp-query+allpages-param-prefix": "Nach Seitentiteln suchen, die mit diesem Wert beginnen.",
+ "apihelp-query+allpages-param-namespace": "Der zu untersuchende Namensraum.",
+ "apihelp-query+allpages-param-filterredir": "Welche Seiten aufgelistet werden sollen.",
+ "apihelp-query+allpages-param-minsize": "Nur Seiten auflisten, die mindestens diese Größe in Byte haben.",
+ "apihelp-query+allpages-param-maxsize": "Nur Seiten auflisten, die höchstens diese Größe in Byte haben.",
+ "apihelp-query+allpages-param-prtype": "Nur geschützte Seiten auflisten.",
+ "apihelp-query+allpages-param-prlevel": "Seitenschutze nach Schutzstufe filtern (muss zusammen mit $1prtype=parameter angegeben werden).",
+ "apihelp-query+allpages-param-prfiltercascade": "Seitenschutze nach Kaskadierung filtern (wird ignoriert, wenn $1prtype nicht gesetzt ist).",
+ "apihelp-query+allpages-param-limit": "Gesamtanzahl der aufzulistenden Seiten.",
+ "apihelp-query+allpages-param-dir": "Aufzählungsrichtung.",
+ "apihelp-query+allpages-param-filterlanglinks": "Nur Seiten auflisten, die Sprachlinks haben. Beachte, dass von Erweiterungen gesetzte Sprachlinks möglicherweise nicht beachtet werden.",
+ "apihelp-query+allpages-param-prexpiry": "Ablaufzeit des Seitenschutzes, nach dem die Auflistung gefiltert werden soll:\n; indefinite: Nur unbeschränkt geschützte Seiten auflisten.\n; definite: Nur für einen bestimmten Zeitraum geschützte Seiten auflisten.\n; all: geschützte Seiten unabhängig von der Schutzlänge auflisten.",
+ "apihelp-query+allpages-example-B": "Bezieht eine Liste von Seiten, die mit dem Buchstaben <kbd>B</kbd> beginnen.",
+ "apihelp-query+allpages-example-generator": "Gibt Informationen über vier Seiten mit dem Anfangsbuchstaben <kbd>T</kbd> zurück.",
+ "apihelp-query+allpages-example-generator-revisions": "Übermittelt den Inhalt der ersten beiden Seiten, die mit <kbd>Re</kbd> beginnen und keine Weiterleitungen sind.",
+ "apihelp-query+allredirects-summary": "Bezieht alle Weiterleitungen in einem Namensraum.",
+ "apihelp-query+allredirects-param-from": "Titel der Weiterleitung, bei der die Auflistung beginnen soll.",
+ "apihelp-query+allredirects-param-to": "Titel der Weiterleitung, bei der die Auflistung enden soll.",
+ "apihelp-query+allredirects-param-prefix": "Weiterleitungen auflisten, deren Zielseiten mit diesem Wert beginnen.",
+ "apihelp-query+allredirects-param-unique": "Nur Weiterleitungen mit unterschiedlichen Zielseiten anzeigen. Kann nicht zusammen mit $1prop=ids|fragment|interwiki benutzt werden. Bei Nutzung als Generator werden die Zielseiten anstelle der Ursprungsseiten zurückgegeben.",
+ "apihelp-query+allredirects-param-prop": "Zu beziehende Informationen:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Ergänzt die Seitenkennung der Weiterleitungsseite (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Ergänzt den Titel der Weiterleitung.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Ergänzt das Abschnittsziel der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Ergänzt das Interwiki-Präfix der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
+ "apihelp-query+allredirects-param-namespace": "Der zu untersuchende Namensraum.",
+ "apihelp-query+allredirects-param-limit": "Gesamtanzahl der aufzulistenden Einträge.",
+ "apihelp-query+allredirects-param-dir": "Aufzählungsrichtung.",
+ "apihelp-query+allredirects-example-B": "Listet Zielseiten, auch fehlende, mit den Seitenkennungen der Weiterleitung auf, beginnend bei <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Einzigartige Zielseiten auflisten.",
+ "apihelp-query+allredirects-example-unique-generator": "Bezieht alle Zielseiten und markiert die Fehlenden.",
+ "apihelp-query+allredirects-example-generator": "Seiten abrufen, die die Weiterleitungen enthalten",
+ "apihelp-query+allrevisions-summary": "Liste alle Bearbeitungen.",
+ "apihelp-query+allrevisions-param-start": "Der Zeitstempel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+allrevisions-param-end": "Der Zeitstempel, bei dem die Auflistung enden soll.",
+ "apihelp-query+allrevisions-param-user": "Liste nur Bearbeitungen von diesem Benutzer auf.",
+ "apihelp-query+allrevisions-param-excludeuser": "Schließe Bearbeitungen dieses Benutzers bei der Auflistung aus.",
+ "apihelp-query+allrevisions-param-namespace": "Nur Seiten dieses Namensraums auflisten.",
+ "apihelp-query+allrevisions-param-generatetitles": "Wenn als Generator verwendet, werden eher Titel als Bearbeitungs-IDs erzeugt.",
+ "apihelp-query+allrevisions-example-user": "Liste die letzten 50 Beiträge, sortiert nach Benutzer <kbd>Beispiel</kbd> auf.",
+ "apihelp-query+allrevisions-example-ns-main": "Liste die ersten 50 Bearbeitungen im Hauptnamensraum auf.",
+ "apihelp-query+mystashedfiles-param-prop": "Welche Eigenschaften für die Dateien abgerufen werden sollen.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Ruft die Dateigröße und Bildabmessungen ab.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Ruft den MIME- und Medientyp der Datei ab.",
+ "apihelp-query+mystashedfiles-param-limit": "Wie viele Dateien zurückgegeben werden sollen.",
+ "apihelp-query+alltransclusions-summary": "Liste alle Transklusionen auf (eingebettete Seiten die &#123;&#123;x&#125;&#125; benutzen), einschließlich nicht vorhandener.",
+ "apihelp-query+alltransclusions-param-from": "Der Titel der Transklusion bei dem die Auflistung beginnen soll.",
+ "apihelp-query+alltransclusions-param-to": "Der Titel der Transklusion bei dem die Auflistung enden soll.",
+ "apihelp-query+alltransclusions-param-prefix": "Suche nach allen transkludierten Titeln die mit diesem Wert beginnen.",
+ "apihelp-query+alltransclusions-param-prop": "Welche Informationsteile einbinden:",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Fügt den Titel der Transklusion hinzu.",
+ "apihelp-query+alltransclusions-param-namespace": "Der aufzulistende Namensraum.",
+ "apihelp-query+alltransclusions-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
+ "apihelp-query+alltransclusions-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+alltransclusions-example-B": "Liste transkludierte Titel, einschließlich fehlender, mit den Seiten-IDs von denen sie stammen, beginne bei <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Einzigartige eingebundene Titel auflisten.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Ruft alle transkludierten Titel ab und markiert die fehlenden.",
+ "apihelp-query+alltransclusions-example-generator": "Ruft Seiten ab welche die Transklusionen beinhalten.",
+ "apihelp-query+allusers-summary": "Auflisten aller registrierten Benutzer.",
+ "apihelp-query+allusers-param-from": "Der Benutzername, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+allusers-param-to": "Der Benutzername, bei dem die Auflistung enden soll.",
+ "apihelp-query+allusers-param-prefix": "Sucht nach allen Benutzern, die mit diesem Wert beginnen.",
+ "apihelp-query+allusers-param-dir": "Sortierrichtung.",
+ "apihelp-query+allusers-param-group": "Nur Benutzer der angegebenen Gruppen einbeziehen.",
+ "apihelp-query+allusers-param-excludegroup": "Benutzer dieser Gruppen ausschließen.",
+ "apihelp-query+allusers-param-prop": "Welche Informationsteile einbinden:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Fügt die Informationen über eine aktuelle Sperre des Benutzer hinzu.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Listet Gruppen auf denen der Benutzer angehört. Dies verwendet mehr Serverressourcen und kann weniger Ergebnisse als die Grenze zurückliefern.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Listet alle Gruppen auf, denen Benutzer automatisch angehört.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Listet die Berechtigungen auf, die der Benutzer hat.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Fügt den Bearbeitungszähler des Benutzers hinzu.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Fügt, falls vorhanden, den Zeitstempel hinzu, wann der Benutzer registriert wurde (kann leer sein).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Fügt die zentralen IDs und den Anhang-Status des Benutzers hinzu.",
+ "apihelp-query+allusers-param-limit": "Wie viele Benutzernamen insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+allusers-param-witheditsonly": "Listet nur Benutzer auf, die Bearbeitungen vorgenommen haben.",
+ "apihelp-query+allusers-param-activeusers": "Listet nur Benutzer auf, die in den letzten $1 {{PLURAL:$1|Tag|Tagen}} aktiv waren.",
+ "apihelp-query+allusers-example-Y": "Benutzer ab <kbd>Y</kbd> auflisten.",
+ "apihelp-query+authmanagerinfo-example-login": "Ruft die Anfragen ab, die beim Beginnen einer Anmeldung verwendet werden können.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Ruft die Anfragen ab, die beim Beginnen einer Anmeldung verwendet werden können, mit zusammengeführten Formularfeldern.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Testet, ob die Authentifizierung für die Aktion <kbd>foo</kbd> ausreichend ist.",
+ "apihelp-query+backlinks-summary": "Alle Seiten finden, die auf die angegebene Seite verlinken.",
+ "apihelp-query+backlinks-param-title": "Zu suchender Titel. Darf nicht zusammen mit <var>$1pageid</var> benutzt werden.",
+ "apihelp-query+backlinks-param-pageid": "Zu suchende Seiten-ID. Darf nicht zusammen mit <var>$1title</var> benutzt werden.",
+ "apihelp-query+backlinks-param-namespace": "Der aufzulistende Namensraum.",
+ "apihelp-query+backlinks-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+backlinks-param-filterredir": "Wie nach Weiterleitungen gefiltert werden soll. Falls auf <kbd>nonredirects</kbd> gesetzt, wenn <var>$1redirect</var> aktiviert ist, wird dies nur auf die zweite Ebene angewandt.",
+ "apihelp-query+backlinks-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen. Falls <var>$1redirect<var> aktiviert ist, wird die Grenze auf jede Ebene einzeln angewandt (was bedeutet, dass bis zu 2 * <var>$1limit</var> Ergebnisse zurückgegeben werden können).",
+ "apihelp-query+backlinks-param-redirect": "Falls die verweisende Seite eine Weiterleitung ist, finde alle Seiten, die auf diese Weiterleitung ebenfalls verweisen. Die maximale Grenze wird halbiert.",
+ "apihelp-query+backlinks-example-simple": "Links auf <kbd>Main page</kbd> anzeigen.",
+ "apihelp-query+backlinks-example-generator": "Hole Informationen über die Seiten, die auf die <kbd>Hauptseite</kbd> verweisen.",
+ "apihelp-query+blocks-summary": "Liste alle gesperrten Benutzer und IP-Adressen auf.",
+ "apihelp-query+blocks-param-start": "Der Zeitstempel, bei dem die Aufzählung beginnen soll.",
+ "apihelp-query+blocks-param-end": "Der Zeitstempel, bei dem die Aufzählung beendet werden soll.",
+ "apihelp-query+blocks-param-ids": "Liste von Sperren-IDs, die aufglistet werden sollen (optional).",
+ "apihelp-query+blocks-param-users": "Liste von Benutzern, nach denen gesucht werden soll (optional).",
+ "apihelp-query+blocks-param-limit": "Die maximale Zahl der aufzulistenden Sperren.",
+ "apihelp-query+blocks-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Fügt die ID der Sperre hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Fügt den Benutzernamen des gesperrten Benutzers hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Fügt die Benutzer-ID des gesperrten Benutzers hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Fügt den Benutzernamen des sperrenden Benutzers hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Fügt die Benutzer-ID des sperrenden Benutzers hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Fügt den Zeitstempel wann die Sperre gesetzt wurde hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Fügt den Zeitstempel wann die Sperre abläuft hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Fügt den angegebenen Grund für die Sperrung hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Fügt den von der Sperrung betroffenen Bereich von IP-Adressen hinzu.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Markiert die Sperre mit (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Zeige nur Elemente, die diese Kriterien erfüllen. Um zum Beispiel unbestimmte Sperren von IP-Adressen zu sehen, setzte <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Sperren auflisten",
+ "apihelp-query+blocks-example-users": "Listet Sperren der Benutzer <kbd>Alice</kbd> und <kbd>Bob</kbd> auf.",
+ "apihelp-query+categories-summary": "Liste alle Kategorien auf, zu denen die Seiten gehören.",
+ "apihelp-query+categories-param-prop": "Zusätzlich zurückzugebende Eigenschaften jeder Kategorie:",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Fügt einen Zeitstempel wann die Kategorie angelegt wurde hinzu.",
+ "apihelp-query+categories-param-show": "Welche Art von Kategorien gezeigt werden soll.",
+ "apihelp-query+categories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
+ "apihelp-query+categories-param-categories": "Liste nur diese Kategorien auf. Nützlich um zu prüfen, ob eine bestimmte Seite in einer bestimmten Kategorie enthalten ist.",
+ "apihelp-query+categories-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+categories-example-simple": "Rufe eine Liste von Kategorien ab, zu denen die Seite <kbd>Albert Einstein</kbd> gehört.",
+ "apihelp-query+categories-example-generator": "Rufe Informationen über alle Kategorien ab, die in der Seite <kbd>Albert Einstein</kbd> eingetragen sind.",
+ "apihelp-query+categoryinfo-summary": "Gibt Informationen zu den angegebenen Kategorien zurück.",
+ "apihelp-query+categoryinfo-example-simple": "Erhalte Informationen über <kbd>Category:Foo</kbd> und <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Liste alle Seiten in der angegebenen Kategorie auf.",
+ "apihelp-query+categorymembers-param-pageid": "Seitenkennung der Kategorie, die aufgelistet werden soll. Darf nicht zusammen mit <var>$1title</var> verwendet werden.",
+ "apihelp-query+categorymembers-param-prop": "Welche Informationsteile einbinden:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Fügt die Seitenkennung hinzu.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Fügt die Titel- und Namensraum-ID der Seite hinzu.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Fügt den Sortierungsschlüssel (hexadezimale Zeichenkette) hinzu, der verwendet wird, um innerhalb dieser Kategorie zu sortieren.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Fügt das Sortierungsschlüssel-Präfix hinzu, das verwendet wird, um innerhalb dieser Kategorie zu sortieren (für Menschen lesbarer Teil des Sortierungsschlüssels).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Fügt den Typ, als der diese Seite bestimmt wurde, hinzu (<samp>page</samp>, <samp>subcat</samp> oder <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Fügt den Zeitstempel wann die Seite eingebunden wurde hinzu.",
+ "apihelp-query+categorymembers-param-limit": "Die maximale Anzahl der zurückzugebenden Seiten.",
+ "apihelp-query+categorymembers-param-sort": "Eigenschaft, nach der sortiert werden soll.",
+ "apihelp-query+categorymembers-param-dir": "Sortierungsrichtung.",
+ "apihelp-query+categorymembers-param-start": "Zeitstempel bei dem die Auflistung beginnen soll. Darf nur zusammen mit <kbd>$1sort=timestamp</kbd> benutzt werden.",
+ "apihelp-query+categorymembers-param-end": "Zeitstempel bei dem die Auflistung enden soll. Darf nur zusammen mit <kbd>$1sort=timestamp</kbd> benutzt werden.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Sortierungsschlüssel bei dem die Auflistung beginnen soll, wie von <kbd>$1prop=sortkey</kbd> zurückgegeben. Darf nur zusammen mit <kbd>$1sort=sortkey</kbd> verwendet werden.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Suchschlüssel bei dem die Auflistung enden soll, wie von <kbd>$1prop=sortkey</kbd> zurückgegeben. Darf nur zusammen mit <kbd>$1sort=sortkey</kbd> verwendet werden.",
+ "apihelp-query+categorymembers-param-startsortkey": "Stattdessen $1starthexsortkey verwenden.",
+ "apihelp-query+categorymembers-param-endsortkey": "Stattdessen $1endhexsortkey verwenden.",
+ "apihelp-query+categorymembers-example-simple": "Rufe die ersten 10 Seiten von <kbd>Category:Physics</kbd> ab.",
+ "apihelp-query+categorymembers-example-generator": "Rufe die Seiteninformationen zu den ersten 10 Seiten von<kbd>Category:Physics</kbd> ab.",
+ "apihelp-query+contributors-summary": "Rufe die Liste der angemeldeten Bearbeiter und die Zahl anonymer Bearbeiter einer Seite ab.",
+ "apihelp-query+contributors-param-limit": "Wie viele Spender zurückgegeben werden sollen.",
+ "apihelp-query+contributors-example-simple": "Zeige Mitwirkende der Seite <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Ruft Informationen zur gelöschten Version ab.",
+ "apihelp-query+deletedrevisions-param-start": "Der Zeitstempel bei dem die Auflistung beginnen soll. Wird bei der Verarbeitung einer Liste von Bearbeitungs-IDs ignoriert.",
+ "apihelp-query+deletedrevisions-param-end": "Der Zeitstempel bei dem die Auflistung enden soll. Wird bei der Verarbeitung einer List von Bearbeitungs-IDs ignoriert.",
+ "apihelp-query+deletedrevisions-param-tag": "Listet nur Bearbeitungen auf, die die angegebene Markierung haben.",
+ "apihelp-query+deletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Schließe Bearbeitungen dieses Benutzers bei der Auflistung aus.",
+ "apihelp-query+deletedrevisions-example-titles": "Listet die gelöschten Bearbeitungen der Seiten <kbd>Main Page</kbd> und <kbd>Talk:Main Page</kbd> samt Inhalt auf.",
+ "apihelp-query+deletedrevisions-example-revids": "Liste Informationen zur gelöschten Bearbeitung <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Liste gelöschte Bearbeitungen.",
+ "apihelp-query+deletedrevs-extended-description": "Arbeitet in drei Modi:\n# Listet gelöschte Bearbeitungen des angegeben Titels auf, sortiert nach dem Zeitstempel.\n# Listet gelöschte Beiträge des angegebenen Benutzers auf, sortiert nach dem Zeitstempel (keine Titel bestimmt)\n# Listet alle gelöschten Bearbeitungen im angegebenen Namensraum auf, sortiert nach Titel und Zeitstempel (keine Titel bestimmt, $1user nicht gesetzt).\n\nBestimmte Parameter wirken nur bei bestimmten Modi und werden in anderen nicht berücksichtigt.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modus|Modi}}: $2",
+ "apihelp-query+deletedrevs-param-start": "Der Zeitstempel bei dem die Auflistung beginnen soll.",
+ "apihelp-query+deletedrevs-param-end": "Der Zeitstempel bei dem die Auflistung enden soll.",
+ "apihelp-query+deletedrevs-param-from": "Auflistung bei diesem Titel beginnen.",
+ "apihelp-query+deletedrevs-param-to": "Auflistung bei diesem Titel beenden.",
+ "apihelp-query+deletedrevs-param-prefix": "Suche nach allen Seitentiteln, die mit dem angegebenen Wert beginnen.",
+ "apihelp-query+deletedrevs-param-unique": "Listet nur eine Bearbeitung für jede Seite auf.",
+ "apihelp-query+deletedrevs-param-tag": "Listet nur Bearbeitungen auf, die die angegebene Markierung haben.",
+ "apihelp-query+deletedrevs-param-user": "Liste nur Bearbeitungen von diesem Benutzer auf.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Schließe Bearbeitungen dieses Benutzers bei der Auflistung aus.",
+ "apihelp-query+deletedrevs-param-namespace": "Nur Seiten dieses Namensraums auflisten.",
+ "apihelp-query+deletedrevs-param-limit": "Die maximale Anzahl aufzulistendender Bearbeitungen.",
+ "apihelp-query+deletedrevs-example-mode1": "Liste die letzten gelöschten Bearbeitungen der Seiten <kbd>Main Page</kbd> und <kbd>Talk:Main Page</kbd> samt Inhalt (Modus 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Liste die letzten 50 gelöschten Beiträge von <kbd>Bob</kbd> auf (Modus 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Liste die ersten 50 gelöschten Bearbeitungen im Hauptnamensraum (Modus 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Liste die ersten 50 gelöschten Seiten im {{ns:talk}}-Namensraum (Modus 3).",
+ "apihelp-query+disabled-summary": "Dieses Abfrage-Modul wurde deaktiviert.",
+ "apihelp-query+duplicatefiles-summary": "Liste alle Dateien auf die, basierend auf der Prüfsumme, Duplikate der angegebenen Dateien sind.",
+ "apihelp-query+duplicatefiles-param-limit": "Wie viele doppelte Dateien zurückgeben.",
+ "apihelp-query+duplicatefiles-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+duplicatefiles-param-localonly": "Sucht nur nach Dateien im lokalen Repositorium.",
+ "apihelp-query+duplicatefiles-example-simple": "Sucht nach Duplikaten von [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Sucht nach Duplikaten aller Dateien.",
+ "apihelp-query+embeddedin-summary": "Finde alle Seiten, die den angegebenen Titel einbetten (transkludieren).",
+ "apihelp-query+embeddedin-param-title": "Titel nach dem gesucht werden soll. Darf nicht zusammen mit $1pageid verwendet werden.",
+ "apihelp-query+embeddedin-param-pageid": "Seitenkennung nach der gesucht werden soll. Darf nicht zusammen mit $1title verwendet werden.",
+ "apihelp-query+embeddedin-param-namespace": "Der aufzulistende Namensraum.",
+ "apihelp-query+embeddedin-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+embeddedin-param-filterredir": "Wie Weiterleitungen behandelt werden sollen.",
+ "apihelp-query+embeddedin-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+embeddedin-example-simple": "Zeige Seiten, die <kbd>Template:Stub</kbd> transkludieren.",
+ "apihelp-query+embeddedin-example-generator": "Rufe Informationen über Seiten ab, die <kbd>Template:Stub</kbd> transkludieren.",
+ "apihelp-query+extlinks-summary": "Gebe alle externen URLs (nicht Interwiki) der angegebenen Seiten zurück.",
+ "apihelp-query+extlinks-param-limit": "Wie viele Links zurückgegeben werden sollen.",
+ "apihelp-query+extlinks-param-query": "Suchbegriff ohne Protokoll. Nützlich um zu prüfen, ob eine bestimmte Seite eine bestimmte externe URL enthält.",
+ "apihelp-query+extlinks-param-expandurl": "Expandiert protokollrelative URLs mit dem kanonischen Protokoll.",
+ "apihelp-query+extlinks-example-simple": "Rufe eine Liste erxterner Verweise auf <kbd>Main Page</kbd> ab.",
+ "apihelp-query+exturlusage-summary": "Listet Seiten auf, die die angegebene URL beinhalten.",
+ "apihelp-query+exturlusage-param-prop": "Welche Informationsteile einbinden:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Fügt die ID der Seite hinzu.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Fügt die Titel- und Namensraum-ID der Seite hinzu.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Fügt die URL, die in der Seite verwendet wird, hinzu.",
+ "apihelp-query+exturlusage-param-query": "Suchbegriff ohne Protokoll. Siehe [[Special:LinkSearch]]. Leer lassen, um alle externen Verknüpfungen aufzulisten.",
+ "apihelp-query+exturlusage-param-namespace": "Die aufzulistenden Seiten-Namensräume.",
+ "apihelp-query+exturlusage-param-limit": "Wie viele Seiten zurückgegeben werden sollen.",
+ "apihelp-query+exturlusage-param-expandurl": "Expandiert protokollrelative URLs mit dem kanonischen Protokoll.",
+ "apihelp-query+exturlusage-example-simple": "Zeigt Seiten, die auf <kbd>https://www.mediawiki.org</kbd> verlinken.",
+ "apihelp-query+filearchive-summary": "Alle gelöschten Dateien der Reihe nach auflisten.",
+ "apihelp-query+filearchive-param-from": "Der Bildertitel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+filearchive-param-to": "Der Bildertitel, bei dem die Auflistung enden soll.",
+ "apihelp-query+filearchive-param-prefix": "Nach allen Bildtiteln, die mit diesem Wert beginnen suchen.",
+ "apihelp-query+filearchive-param-limit": "Wie viele Bilder insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+filearchive-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+filearchive-param-sha1": "SHA1-Prüfsumme des Bildes. Überschreibt $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "SHA1-Prüfsumme des Bildes in Base-36 (in MediaWiki verwendet).",
+ "apihelp-query+filearchive-param-prop": "Welche Bildinformationen abgerufen werden sollen:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Ergänzt die SHA-1-Prüfsumme für das Bild.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Fügt einen Zeitstempel für die hochgeladene Version hinzu.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Fügt den Benutzer hinzu, der die Bildversion hochgeladen hat.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Fügt die Größe des Bilde in Bytes sowie die Höhe, Breite und (falls zutreffend) die Seitenzahl hinzu.",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias für die Größe.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Fügt die Beschreibung der Bildversion hinzu.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analysiert die Beschreibung der Version.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Fügt den MIME-Typ des Bildes hinzu.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Ergänzt den Medientyp des Bildes.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Listet die Exif-Metadaten dieser Bildversion auf.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Ergänzt die Bittiefe der Version.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Fügt den Dateinamen der Archivversion für die nicht-neuesten Versionen hinzu.",
+ "apihelp-query+filearchive-example-simple": "Eine Liste aller gelöschten Dateien auflisten",
+ "apihelp-query+filerepoinfo-summary": "Gebe Metainformationen über Bild-Repositorien zurück, die im Wiki eingerichtet sind.",
+ "apihelp-query+filerepoinfo-example-simple": "Ruft Informationen über Dateirepositorien ab.",
+ "apihelp-query+fileusage-summary": "Alle Seiten finden, die die angegebenen Dateien verwenden.",
+ "apihelp-query+fileusage-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "Seitenkennung jeder Seite.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Titel jeder Seite.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Markieren, falls die Seite eine Weiterleitung ist.",
+ "apihelp-query+fileusage-param-namespace": "Nur Seiten dieser Namensräume einbinden.",
+ "apihelp-query+fileusage-param-limit": "Wie viel zurückgegeben werden soll.",
+ "apihelp-query+fileusage-example-simple": "Zeige eine Liste von Seiten, die [[:File:Example.jpg]] verwenden.",
+ "apihelp-query+fileusage-example-generator": "Zeige Informationen über Seiten, die [[:File:Example.jpg]] verwenden.",
+ "apihelp-query+imageinfo-summary": "Gibt Informationen und alle Versionen der Datei zurück.",
+ "apihelp-query+imageinfo-param-prop": "Welche Dateiinformationen abgerufen werden sollen:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Fügt einen Zeitstempel für die hochgeladene Version hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Fügt den Benutzer zu jeder hochgeladenen Dateiversion hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Füge die ID des Benutzers zu jeder hochgeladenen Dateiversion hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Kommentar zu der Version.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analysiere den Kommentar zu dieser Version.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Ergänzt den kanonischen Titel für die Datei.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Gibt die URL zur Datei- und Beschreibungsseite zurück.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Fügt die Größe der Datei in Bytes und (falls zutreffend) in Höhe, Breite und Seitenzahl hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias für die Größe.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Fügt die SHA-1-Prüfsumme für die Datei hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Fügt den MIME-Typ dieser Datei hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Fügt den Medientyp dieser Datei hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Listet die Exif-Metadaten dieser Dateiversion auf.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Listet allgemeine Metadaten des Dateiformats dieser Dateiversion auf.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Listet formatierte Metadaten kombiniert aus mehreren Quellen auf. Die Ergebnisse sind im HTML-Format.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Fügt den Dateinamen der Archivversion für die nicht-letzten Versionen hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Fügt die Bittiefe der Version hinzu.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Ergänzt, ob die Datei auf der [[MediaWiki:Bad image list]] ist.",
+ "apihelp-query+imageinfo-param-limit": "Wie viele Dateiversionen pro Datei zurückgegeben werden sollen.",
+ "apihelp-query+imageinfo-param-start": "Zeitstempel, von dem die Liste beginnen soll.",
+ "apihelp-query+imageinfo-param-end": "Zeitstempel, an dem die Liste enden soll.",
+ "apihelp-query+imageinfo-param-urlheight": "Ähnlich wie $1urlwidth.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Falls <kbd>$2prop=badfile</kbd> festgelegt ist, ist dies der verwendete Seitentitel beim Auswerten der [[MediaWiki:Bad image list]].",
+ "apihelp-query+imageinfo-param-localonly": "Suche nur nach Dateien im lokalen Repositorium.",
+ "apihelp-query+imageinfo-example-simple": "Rufe Informationen über die aktuelle Version von [[:File:Albert Einstein Head.jpg]] ab.",
+ "apihelp-query+imageinfo-example-dated": "Rufe Informationen über Versionen von [[:File:Test.jpg]] von 2008 und später ab.",
+ "apihelp-query+images-summary": "Gibt alle Dateien zurück, die in den angegebenen Seiten enthalten sind.",
+ "apihelp-query+images-param-limit": "Wie viele Dateien zurückgegeben werden sollen.",
+ "apihelp-query+images-param-images": "Nur diese Dateien auflisten. Nützlich um zu prüfen, ob eine bestimmte Seite eine bestimmte Datei enthält.",
+ "apihelp-query+images-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+images-example-simple": "Rufe eine Liste von Dateien ab, die auf der [[Main Page]] verwendet werden.",
+ "apihelp-query+images-example-generator": "Rufe Informationen über alle Dateien ab, die auf der [[Main Page]] verwendet werden.",
+ "apihelp-query+imageusage-summary": "Finde alle Seiten, die den angegebenen Bildtitel verwenden.",
+ "apihelp-query+imageusage-param-title": "Titel nach dem gesucht werden soll. Darf nicht zusammen mit $1pageid verwendet werden.",
+ "apihelp-query+imageusage-param-pageid": "Seitenkennung nach der gesucht werden soll. Darf nicht zusammen mit $1title verwendet werden.",
+ "apihelp-query+imageusage-param-namespace": "Der aufzulistende Namensraum.",
+ "apihelp-query+imageusage-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+imageusage-param-redirect": "Falls die verweisende Seite eine Weiterleitung ist, finde alle Seiten, die ebenfalls auf diese Weiterleitung verweisen. Die maximale Grenze wird halbiert.",
+ "apihelp-query+imageusage-example-simple": "Zeige Seiten, die [[:File:Albert Einstein Head.jpg]] verwenden.",
+ "apihelp-query+info-summary": "Ruft Basisinformationen über die Seite ab.",
+ "apihelp-query+info-param-prop": "Zusätzlich zurückzugebende Eigenschaften:",
+ "apihelp-query+info-paramvalue-prop-protection": "Liste die Schutzstufe jeder Seite auf.",
+ "apihelp-query+info-paramvalue-prop-talkid": "Die Seitenkennung der Diskussionsseite für jede Nicht-Diskussionsseite.",
+ "apihelp-query+info-paramvalue-prop-watched": "Liste den Überwachungszustand jeder Seite auf.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Die Anzahl der Beobachter, falls erlaubt.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "Der Beobachtungslisten-Benachrichtigungs-Zeitstempel jeder Seite.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "Die Seitenkennung der Elternseite jeder Diskussionsseite.",
+ "apihelp-query+info-paramvalue-prop-readable": "Ob der Benutzer diese Seite betrachten darf.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Gibt die Art und Weise an, in der der Seitentitel tatsächlich angezeigt wird.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "Gibt den Anzeigetitel in allen Varianten der Sprache des Websiteinhalts aus.",
+ "apihelp-query+info-param-testactions": "Überprüft, ob der aktuelle Benutzer gewisse Aktionen auf der Seite ausführen kann.",
+ "apihelp-query+info-example-simple": "Ruft Informationen über die Seite <kbd>Hauptseite</kbd> ab.",
+ "apihelp-query+iwbacklinks-summary": "Findet alle Seiten, die auf einen angegebenen Interwikilink verlinken.",
+ "apihelp-query+iwbacklinks-param-prefix": "Präfix für das Interwiki.",
+ "apihelp-query+iwbacklinks-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+iwbacklinks-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Ergänzt das Präfix des Interwikis.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Ergänzt den Titel des Interwikis.",
+ "apihelp-query+iwbacklinks-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+iwbacklinks-example-simple": "Ruft Seiten ab, die auf [[wikibooks:Test]] verlinken.",
+ "apihelp-query+iwlinks-param-prop": "Zusätzlich zurückzugebende Eigenschaften jedes Interlanguage-Links:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Ergänzt die vollständige URL.",
+ "apihelp-query+iwlinks-param-limit": "Wie viele Interwiki-Links zurückgegeben werden sollen.",
+ "apihelp-query+iwlinks-param-prefix": "Gibt nur Interwiki-Links mit diesem Präfix zurück.",
+ "apihelp-query+iwlinks-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+langbacklinks-param-limit": "Wie viele Gesamtseiten zurückgegeben werden sollen.",
+ "apihelp-query+langbacklinks-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Ergänzt den Titel des Sprachlinks.",
+ "apihelp-query+langbacklinks-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+langbacklinks-example-simple": "Ruft Seiten ab, die auf [[:fr:Test]] verlinken.",
+ "apihelp-query+langlinks-param-limit": "Wie viele Sprachlinks zurückgegeben werden sollen.",
+ "apihelp-query+langlinks-param-prop": "Zusätzlich zurückzugebende Eigenschaften jedes Interlanguage-Links:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Ergänzt die vollständige URL.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Ergänzt den Namen der Muttersprache.",
+ "apihelp-query+langlinks-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+links-summary": "Gibt alle Links von den angegebenen Seiten zurück.",
+ "apihelp-query+links-param-namespace": "Zeigt nur Links in diesen Namensräumen.",
+ "apihelp-query+links-param-limit": "Wie viele Links zurückgegeben werden sollen.",
+ "apihelp-query+links-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+links-example-simple": "Links von der <kbd>Hauptseite</kbd> abrufen",
+ "apihelp-query+linkshere-summary": "Alle Seiten finden, die auf die angegebenen Seiten verlinken.",
+ "apihelp-query+linkshere-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "Die Seitenkennung jeder Seite.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Titel jeder Seite.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Markieren, falls die Seite eine Weiterleitung ist.",
+ "apihelp-query+linkshere-param-limit": "Wie viel zurückgegeben werden soll.",
+ "apihelp-query+linkshere-example-simple": "Holt eine Liste von Seiten, die auf [[Main Page]] verlinken.",
+ "apihelp-query+logevents-summary": "Ruft Ereignisse von Logbüchern ab.",
+ "apihelp-query+logevents-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Ergänzt die Kennung des Logbuchereignisses.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Ergänzt den Titel der Seite für das Logbuchereignis.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Ergänzt den Typ des Logbuchereignisses.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Ergänzt den verantwortlichen Benutzer für das Logbuchereignis.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Ergänzt den Zeitstempel des Logbucheintrags.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Ergänzt den Kommentar des Logbuchereignisses.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Listet Markierungen für das Logbuchereignis auf.",
+ "apihelp-query+logevents-param-type": "Filtert nur Logbucheinträge mit diesem Typ heraus.",
+ "apihelp-query+logevents-param-start": "Der Zeitstempel, bei dem die Aufzählung beginnen soll.",
+ "apihelp-query+logevents-param-end": "Der Zeitstempel, bei dem die Aufzählung enden soll.",
+ "apihelp-query+logevents-param-prefix": "Filtert Einträge, die mit diesem Präfix beginnen.",
+ "apihelp-query+logevents-param-limit": "Wie viele Ereigniseinträge insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+logevents-example-simple": "Listet die letzten Logbuch-Ereignisse auf.",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Fügt die Seitenkennung hinzu.",
+ "apihelp-query+pageswithprop-param-limit": "Die maximale Anzahl zurückzugebender Seiten.",
+ "apihelp-query+pageswithprop-param-dir": "In welche Richtung sortiert werden soll.",
+ "apihelp-query+prefixsearch-param-search": "Such-Zeichenfolge.",
+ "apihelp-query+prefixsearch-param-namespace": "Welche Namensräume durchsucht werden sollen. Wird ignoriert, falls <var>$1search</var> mit einem gültigen Namensraumpräfix beginnt.",
+ "apihelp-query+prefixsearch-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+ "apihelp-query+prefixsearch-param-offset": "Anzahl der zu überspringenden Ergebnisse.",
+ "apihelp-query+prefixsearch-param-profile": "Zu verwendendes Suchprofil.",
+ "apihelp-query+protectedtitles-summary": "Listet alle Titel auf, die vor einer Erstellung geschützt sind.",
+ "apihelp-query+protectedtitles-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+protectedtitles-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Ergänzt den Schutzstatus.",
+ "apihelp-query+protectedtitles-example-simple": "Listet geschützte Titel auf.",
+ "apihelp-query+querypage-param-limit": "Anzahl der zurückzugebenden Ergebnisse.",
+ "apihelp-query+recentchanges-summary": "Listet die letzten Änderungen auf.",
+ "apihelp-query+recentchanges-param-user": "Listet nur Änderungen von diesem Benutzer auf.",
+ "apihelp-query+recentchanges-param-excludeuser": "Listet keine Änderungen von diesem Benutzer auf.",
+ "apihelp-query+recentchanges-param-tag": "Listet nur Änderungen auf, die mit dieser Markierung markiert sind.",
+ "apihelp-query+recentchanges-param-prop": "Bezieht zusätzliche Informationen mit ein:",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Fügt den Kommentar für die Bearbeitung hinzu.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Ergänzt Markierungen für die Bearbeitung.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Ergänzt den Zeitstempel für die Bearbeitung.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Ergänzt den Seitentitel der Bearbeitung.",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "Markiert kontrollierbare Bearbeitungen als automatisch kontrolliert oder nicht.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Listet Markierungen für den Eintrag auf.",
+ "apihelp-query+recentchanges-example-simple": "Listet die letzten Änderungen auf.",
+ "apihelp-query+redirects-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "Seitenkennung einer jeden Weiterleitung.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Titel einer jeden Weiterleitung.",
+ "apihelp-query+redirects-param-namespace": "Schließt nur Seiten in diesen Namensräumen ein.",
+ "apihelp-query+redirects-param-limit": "Wie viele Weiterleitungen zurückgegeben werden sollen.",
+ "apihelp-query+revisions-param-tag": "Listet nur Versionen auf, die mit dieser Markierung markiert sind.",
+ "apihelp-query+revisions+base-param-prop": "Zurückzugebende Eigenschaften jeder Version:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "Die Kennung der Version.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Versionsmarkierungen (klein).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Der Zeitstempel der Version.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Benutzer, der die Version erstellt hat.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "Benutzerkennung des Versionserstellers.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Länge in Bytes der Version.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1-Prüfsumme (Basis 16) der Version.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Inhaltsmodell-Kennung der Version.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Text der Version.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Markierungen für die Version.",
+ "apihelp-query+search-param-what": "Welcher Suchtyp ausgeführt werden soll.",
+ "apihelp-query+search-param-info": "Welche Metadaten zurückgegeben werden sollen.",
+ "apihelp-query+search-param-prop": "Eigenschaften zur Rückgabe:",
+ "apihelp-query+search-param-qiprofile": "Zu verwendendes anfrageunabhängiges Profil (wirkt sich auf den Ranking-Algorithmus aus).",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Ergänzt den Wortzähler der Seite.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Ergänzt zusätzliche von Erweiterungen erzeugte Daten.",
+ "apihelp-query+search-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+search-example-simple": "Nach <kbd>meaning</kbd> suchen.",
+ "apihelp-query+search-example-text": "Texte nach <kbd>meaning</kbd> durchsuchen.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Liste von Spezialseiten-Aliasse.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Liste von magischen Wörtern und ihrer Aliasse.",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Gibt eine Liste für die Sprachcodes zurück, bei denen der [[mw:Special:MyLanguage/LanguageConverter|Sprachkonverter]] aktiviert ist und die unterstützten Varianten für jede Sprache.",
+ "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias für $1filekey, für die Rückwärtskompatibilität.",
+ "apihelp-query+stashimageinfo-example-simple": "Gibt Informationen für eine gespeicherte Datei zurück.",
+ "apihelp-query+stashimageinfo-example-params": "Gibt Vorschaubilder für zwei gespeicherte Dateien zurück.",
+ "apihelp-query+tags-summary": "Änderungs-Tags auflisten.",
+ "apihelp-query+tags-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+tags-paramvalue-prop-name": "Ergänzt den Namen der Markierung.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Ergänzt die Systemnachricht für die Markierung.",
+ "apihelp-query+tags-paramvalue-prop-description": "Ergänzt die Beschreibung der Markierung.",
+ "apihelp-query+tags-example-simple": "Verfügbare Tags auflisten",
+ "apihelp-query+templates-param-limit": "Wie viele Vorlagen zurückgegeben werden sollen.",
+ "apihelp-query+templates-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+tokens-param-type": "Typen der Token, die abgerufen werden sollen.",
+ "apihelp-query+transcludedin-param-prop": "Zurückzugebende Eigenschaften:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "Seitenkennung jeder Seite.",
+ "apihelp-query+usercontribs-summary": "Alle Bearbeitungen von einem Benutzer abrufen.",
+ "apihelp-query+usercontribs-param-limit": "Die maximale Anzahl der zurückzugebenden Beiträge.",
+ "apihelp-query+usercontribs-param-start": "Der zurückzugebende Start-Zeitstempel.",
+ "apihelp-query+usercontribs-param-end": "Der zurückzugebende End-Zeitstempel.",
+ "apihelp-query+usercontribs-param-user": "Die Benutzer, für die Beiträge abgerufen werden sollen. Kann nicht zusammen mit <var>$1userids</var> oder <var>$1userprefix</var> verwendet werden.",
+ "apihelp-query+usercontribs-param-userprefix": "Ruft Beiträge für alle Benutzer ab, deren Namen mit diesem Wert beginnt. Kann nicht zusammen mit <var>$1user</var> oder <var>$1userids</var> verwendet werden.",
+ "apihelp-query+usercontribs-param-userids": "Die Benutzerkennungen, für die die Beiträge abgerufen werden sollen. Kann nicht zusammen mit <var>$1user</var> oder <var>$1userprefix</var> verwendet werden.",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Fügt die Seiten- und Versionskennung hinzu.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Ergänzt den Zeitstempel der Bearbeitung.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Fügt den Kommentar der Bearbeitung hinzu.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Ergänzt die neue Größe der Bearbeitung.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Ergänzt Markierungen der Bearbeitung.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Markiert kontrollierte Bearbeitungen.",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "Markiert automatisch kontrollierte Bearbeitungen.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Listet die Markierungen für die Bearbeitung auf.",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Markiert, ob der aktuelle Benutzer gesperrt ist, von wem und aus welchem Grund.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Listet alle Einstellungen auf, die der aktuelle Benutzer festgelegt hat.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Ergänzt den Bearbeitungszähler des aktuellen Benutzers.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Fügt den bürgerlichen Namen des Benutzers hinzu.",
+ "apihelp-query+userinfo-example-simple": "Informationen über den aktuellen Benutzer abrufen",
+ "apihelp-query+userinfo-example-data": "Ruft zusätzliche Informationen über den aktuellen Benutzer ab.",
+ "apihelp-query+users-summary": "Informationen über eine Liste von Benutzern abrufen.",
+ "apihelp-query+users-param-prop": "Welche Informationsteile einbezogen werden sollen:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Markiert, ob der Benutzer gesperrt ist, von wem und aus welchem Grund.",
+ "apihelp-query+users-paramvalue-prop-groups": "Listet alle Gruppen auf, zu denen jeder Benutzer gehört.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Listet alle Gruppen auf, bei denen der Benutzer automatisch Mitglied ist.",
+ "apihelp-query+users-paramvalue-prop-rights": "Listet alle Rechte auf, die jeder Benutzer hat.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Ergänzt den Bearbeitungszähler des Benutzers.",
+ "apihelp-query+users-param-users": "Eine Liste der Benutzer, für die Informationen abgerufen werden sollen.",
+ "apihelp-query+users-param-userids": "Eine Liste der Benutzerkennungen, für die die Informationen abgerufen werden sollen.",
+ "apihelp-query+users-example-simple": "Gibt Informationen für den Benutzer <kbd>Example</kbd> zurück.",
+ "apihelp-query+watchlist-param-user": "Listet nur Änderungen von diesem Benutzer auf.",
+ "apihelp-query+watchlist-param-excludeuser": "Listet keine Änderungen von diesem Benutzer auf.",
+ "apihelp-query+watchlist-param-prop": "Zusätzlich zurückzugebende Eigenschaften:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Ergänzt die Versions- und Seitenkennungen.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Ergänzt den Titel der Seite.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Ergänzt die Markierungen für die Bearbeitungen.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Ergänzt den Benutzer, der die Bearbeitung ausgeführt hat.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Ergänzt die Kennung des Benutzers, der die Bearbeitung ausgeführt hat.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Ergänzt den Kommentar der Bearbeitung.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Ergänzt den geparsten Kommentar der Bearbeitung.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Ergänzt den Zeitstempel der Bearbeitung.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Markiert Bearbeitungen, die kontrolliert sind.",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "Markiert Bearbeitungen, die automatisch kontrolliert sind.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Ergänzt die alten und neuen Längen der Seite.",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "Listet Markierungen für den Eintrag auf.",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Normale Seitenbearbeitungen.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Externe Änderungen.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Seitenerstellungen.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Logbucheinträge.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Änderungen an der Kategoriemitgliedschaft.",
+ "apihelp-query+watchlistraw-summary": "Ruft alle Seiten der Beobachtungsliste des aktuellen Benutzers ab.",
+ "apihelp-query+watchlistraw-param-prop": "Zusätzlich zurückzugebende Eigenschaften:",
+ "apihelp-query+watchlistraw-param-fromtitle": "Titel (mit Namensraum-Präfix), bei dem die Aufzählung beginnen soll.",
+ "apihelp-query+watchlistraw-param-totitle": "Titel (mit Namensraum-Präfix), bei dem die Aufzählung enden soll.",
+ "apihelp-resetpassword-param-user": "Benutzer, der zurückgesetzt werden soll.",
+ "apihelp-revisiondelete-summary": "Löscht und stellt Versionen wieder her.",
+ "apihelp-revisiondelete-param-hide": "Was für jede Version versteckt werden soll.",
+ "apihelp-revisiondelete-param-show": "Was für jede Version wieder eingeblendet werden soll.",
+ "apihelp-revisiondelete-param-tags": "Auf den Eintrag im Lösch-Logbuch anzuwendende Markierungen.",
+ "apihelp-rsd-summary": "Ein RSD-Schema (Really Simple Discovery) exportieren.",
+ "apihelp-rsd-example-simple": "Das RSD-Schema exportieren",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "An allen beobachteten Seiten arbeiten.",
+ "apihelp-setpagelanguage-summary": "Ändert die Sprache einer Seite.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Das Ändern der Sprache von Seiten ist auf diesem Wiki nicht erlaubt.\n\nAktiviere <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>, um diese Aktion zu verwenden.",
+ "apihelp-setpagelanguage-param-title": "Titel der Seite, deren Sprache du ändern möchtest. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
+ "apihelp-setpagelanguage-param-pageid": "Kennung der Seite, deren Sprache du ändern möchtest. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
+ "apihelp-setpagelanguage-param-lang": "Code der Sprache, auf den die Seite geändert werden soll. Verwende <kbd>default</kbd>, um die Seite auf die Standardinhaltssprache des Wikis zurückzusetzen.",
+ "apihelp-setpagelanguage-param-reason": "Grund für die Änderung.",
+ "apihelp-setpagelanguage-param-tags": "Auf den Logbucheintrag anzuwendende Änderungsmarkierungen, die sich aus dieser Aktion ergeben.",
+ "apihelp-setpagelanguage-example-language": "Ändert die Sprache von <kbd>Hauptseite</kbd> auf Baskisch.",
+ "apihelp-setpagelanguage-example-default": "Ändert die Sprache der Seite mit der Kennung 123 auf die Standardinhaltssprache des Wikis.",
+ "apihelp-stashedit-param-sectiontitle": "Der Titel für einen neuen Abschnitt.",
+ "apihelp-stashedit-param-text": "Seiteninhalt.",
+ "apihelp-stashedit-param-stashedtexthash": "Stattdessen zu verwendende Prüfsumme des Seiteninhalts von einem vorherigen Speicher.",
+ "apihelp-stashedit-param-contentmodel": "Inhaltsmodell des neuen Inhalts.",
+ "apihelp-stashedit-param-summary": "Änderungszusammenfassung.",
+ "apihelp-tag-param-reason": "Grund für die Änderung.",
+ "apihelp-tag-param-tags": "Auf den Logbucheintrag anzuwendende Markierungen, die als Ergebnis dieser Aktion erstellt wurden.",
+ "apihelp-tokens-param-type": "Abzufragende Tokentypen.",
+ "apihelp-tokens-example-edit": "Ruft einen Bearbeitungstoken ab (Standard).",
+ "apihelp-tokens-example-emailmove": "Ruft einen E-Mail- und Verschiebungstoken ab.",
+ "apihelp-unblock-summary": "Einen Benutzer freigeben.",
+ "apihelp-unblock-param-id": "Kennung der Sperre zur Freigabe (abgerufen durch <kbd>list=blocks</kbd>). Kann nicht zusammen mit <var>$1user</var> oder <var>$1userid</var> verwendet werden.",
+ "apihelp-unblock-param-user": "Benutzername, IP-Adresse oder IP-Adressbereich, der freigegeben werden soll. Kann nicht zusammen mit <var>$1id</var> oder <var>$1userid</var> verwendet werden.",
+ "apihelp-unblock-param-reason": "Grund für die Freigabe.",
+ "apihelp-unblock-param-tags": "Auf den Benutzersperr-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
+ "apihelp-unblock-example-id": "Sperrkennung #<kbd>105</kbd> freigeben.",
+ "apihelp-undelete-param-title": "Titel der wiederherzustellenden Seite.",
+ "apihelp-undelete-param-reason": "Grund für die Wiederherstellung.",
+ "apihelp-undelete-param-tags": "Auf den Lösch-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
+ "apihelp-upload-param-filename": "Ziel-Dateiname.",
+ "apihelp-upload-param-tags": "Auf den Datei-Logbuch-Eintrag und die Dateiseitenversion anzuwendende Änderungsmarkierungen.",
+ "apihelp-upload-param-text": "Erster Seitentext für neue Dateien.",
+ "apihelp-upload-param-watch": "Die Seite beobachten.",
+ "apihelp-upload-param-ignorewarnings": "Ignoriert Warnungen.",
+ "apihelp-upload-param-file": "Dateiinhalte.",
+ "apihelp-upload-param-url": "URL, von der die Datei abgerufen werden soll.",
+ "apihelp-upload-param-filesize": "Dateigröße des gesamten Uploads.",
+ "apihelp-upload-param-checkstatus": "Ruft nur den Hochladestatus für den angegebenen Dateischlüssel ab.",
+ "apihelp-upload-example-url": "Von einer URL hochladen",
+ "apihelp-upload-example-filekey": "Vervollständigt einen Upload, der aufgrund von Warnungen fehlgeschlagen ist.",
+ "apihelp-userrights-summary": "Ändert die Gruppenzugehörigkeit eines Benutzers.",
+ "apihelp-userrights-param-user": "Benutzername.",
+ "apihelp-userrights-param-userid": "Benutzerkennung.",
+ "apihelp-userrights-param-add": "Fügt den Benutzer zu diesen Gruppen hinzu oder falls er bereits Mitglied ist, aktualisiert den Ablauf seiner Mitgliedschaft in dieser Gruppe.",
+ "apihelp-userrights-param-remove": "Entfernt den Benutzer von diesen Gruppen.",
+ "apihelp-userrights-param-reason": "Grund für die Änderung.",
+ "apihelp-userrights-param-tags": "Auf den Eintrag im Benutzerrechte-Logbuch anzuwendende Änderungsmarkierungen.",
+ "apihelp-validatepassword-summary": "Validiert ein Passwort gegen die Passwortrichtlinien des Wikis.",
+ "apihelp-validatepassword-extended-description": "Die Validität wird als <samp>Good</samp> gemeldet, falls das Passwort akzeptabel ist, <samp>Change</samp>, falls das Passwort zur Anmeldung verwendet werden kann, jedoch geändert werden muss oder <samp>Invalid</samp>, falls das Passwort nicht verwendbar ist.",
+ "apihelp-validatepassword-param-password": "Zu validierendes Passwort.",
+ "apihelp-validatepassword-param-user": "Der beim Austesten der Benutzerkontenerstellung verwendete Benutzername. Der angegebene Benutzer darf nicht vorhanden sein.",
+ "apihelp-validatepassword-param-email": "Die beim Austesten der Benutzerkontenerstellung verwendete E-Mail-Adresse.",
+ "apihelp-validatepassword-param-realname": "Der beim Austesten der Benutzerkontenerstellung verwendete bürgerliche Name.",
+ "apihelp-validatepassword-example-1": "Validiert das Passwort <kbd>foobar</kbd> für den aktuellen Benutzer.",
+ "apihelp-validatepassword-example-2": "Validiert das Passwort <kbd>qwerty</kbd> zum Erstellen des Benutzers <kbd>Beispiel</kbd>.",
+ "apihelp-watch-example-watch": "Die Seite <kbd>Main Page</kbd> beobachten.",
+ "apihelp-watch-example-unwatch": "Die Seite <kbd>Main Page</kbd> nicht beobachten.",
+ "apihelp-format-example-generic": "Das Abfrageergebnis im $1-Format ausgeben.",
+ "apihelp-json-summary": "Daten im JSON-Format ausgeben.",
+ "apihelp-json-param-callback": "Falls angegeben, wird die Ausgabe in einen angegebenen Funktionsaufruf eingeschlossen. Aus Sicherheitsgründen sind benutzerspezifische Daten beschränkt.",
+ "apihelp-json-param-utf8": "Falls angegeben, kodiert die meisten (aber nicht alle) Nicht-ASCII-Zeichen als UTF-8 anstatt sie mit hexadezimalen Escape-Sequenzen zu ersetzen. Standard, wenn <var>formatversion</var> nicht <kbd>1</kbd> ist.",
+ "apihelp-jsonfm-summary": "Daten im JSON-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-none-summary": "Nichts ausgeben.",
+ "apihelp-php-summary": "Daten im serialisierten PHP-Format ausgeben.",
+ "apihelp-phpfm-summary": "Daten im serialisierten PHP-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-rawfm-summary": "Daten, einschließlich Fehlerbehebungselementen, im JSON-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-xml-summary": "Daten im XML-Format ausgeben.",
+ "apihelp-xml-param-xslt": "Falls angegeben, fügt die benannte Seite als XSL-Stylesheet hinzu. Der Wert muss ein Titel im Namensraum „{{ns:MediaWiki}}“ sein und mit <code>.xsl</code> enden.",
+ "apihelp-xml-param-includexmlnamespace": "Falls angegeben, ergänzt einen XML-Namensraum.",
+ "apihelp-xmlfm-summary": "Daten im XML-Format ausgeben (schöngedruckt in HTML).",
+ "api-format-title": "MediaWiki-API-Ergebnis",
+ "api-format-prettyprint-header": "Dies ist die Darstellung des $1-Formats in HTML. HTML ist gut zur Fehlerbehebung geeignet, aber unpassend für die Nutzung durch Anwendungen.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Lege <kbd>format=$2</kbd> fest, um die von HTML abweichende Darstellung des $1-Formats zu erhalten.\n\nSiehe auch die [[mw:Special:MyLanguage/API|vollständige Dokumentation der API]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
+ "api-format-prettyprint-status": "Diese Antwort wird mit dem HTTP-Status $1 $2 zurückgegeben.",
+ "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
+ "api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
+ "api-pageset-param-revids": "Eine Liste der Versionskennungen, an denen gearbeitet werden soll.",
+ "api-help-title": "MediaWiki-API-Hilfe",
+ "api-help-lead": "Dies ist eine automatisch generierte MediaWiki-API-Dokumentationsseite.\n\nDokumentation und Beispiele: https://www.mediawiki.org/wiki/API/de",
+ "api-help-main-header": "Hauptmodul",
+ "api-help-undocumented-module": "Keine Dokumentation für das Modul „$1“.",
+ "api-help-flag-deprecated": "Dieses Modul ist veraltet.",
+ "api-help-flag-internal": "<strong>Dieses Modul ist intern oder instabil.</strong> Seine Operationen werden ohne Kenntnisnahme geändert.",
+ "api-help-flag-readrights": "Dieses Modul erfordert Leserechte.",
+ "api-help-flag-writerights": "Dieses Modul erfordert Schreibrechte.",
+ "api-help-flag-mustbeposted": "Dieses Modul akzeptiert nur POST-Anfragen.",
+ "api-help-flag-generator": "Dieses Modul kann als Generator verwendet werden.",
+ "api-help-source": "Quelle: $1",
+ "api-help-source-unknown": "Quelle: <span class=\"apihelp-unknown\">unbekannt</span>",
+ "api-help-license": "Lizenz: [[$1|$2]]",
+ "api-help-license-noname": "Lizenz: [[$1|Siehe Link]]",
+ "api-help-license-unknown": "Lizenz: <span class=\"apihelp-unknown\">unbekannt</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+ "api-help-param-deprecated": "Veraltet.",
+ "api-help-param-required": "Dieser Parameter ist erforderlich.",
+ "api-help-datatypes-header": "Datentypen",
+ "api-help-param-type-limit": "Typ: Ganzzahl oder <kbd>max</kbd>",
+ "api-help-param-type-integer": "Typ: {{PLURAL:$1|1=Ganzzahl|2=Liste von Ganzzahlen}}",
+ "api-help-param-type-boolean": "Typ: boolesch ([[Special:ApiHelp/main#main/datatypes|Einzelheiten]])",
+ "api-help-param-type-timestamp": "Typ: {{PLURAL:$1|1=Zeitstempel|2=Liste von Zeitstempeln}} ([[Special:ApiHelp/main#main/datatypes|erlaubte Formate]])",
+ "api-help-param-type-user": "Typ: {{PLURAL:$1|1=Benutzername|2=Liste von Benutzernamen}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Einer der folgenden Werte|2=Werte (mit <kbd>{{!}}</kbd> trennen oder [[Special:ApiHelp/main#main/datatypes|Alternative]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Muss leer sein|Kann leer sein oder $2}}",
+ "api-help-param-limit": "Nicht mehr als $1 erlaubt.",
+ "api-help-param-limit2": "Nicht mehr als $1 ($2 für Bots) erlaubt.",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht kleiner sein als $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht größer sein als $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Der Wert muss|2=Die Werte müssen}} zwischen $2 und $3 sein.",
+ "api-help-param-upload": "Muss als Dateiupload mithilfe eines multipart/form-data-Formular bereitgestellt werden.",
+ "api-help-param-multi-separate": "Werte mit <kbd>|</kbd> trennen oder [[Special:ApiHelp/main#main/datatypes|Alternative]].",
+ "api-help-param-multi-max": "Maximale Anzahl der Werte ist {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} für Bots).",
+ "api-help-param-multi-max-simple": "Die maximale Anzahl der Werte ist {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Um alle Werte anzugeben, verwende <kbd>$1</kbd>.",
+ "api-help-param-default": "Standard: $1",
+ "api-help-param-default-empty": "Standard: <span class=\"apihelp-empty\">(leer)</span>",
+ "api-help-param-token": "Ein „$1“-Token abgerufen von [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Aus Kompatibilitätsgründen wird der in der Weboberfläche verwendete Token ebenfalls akzeptiert.",
+ "api-help-param-disabled-in-miser-mode": "Deaktiviert aufgrund des [[mw:Special:MyLanguage/Manual:$wgMiserMode|Miser-Modus]].",
+ "api-help-param-continue": "Falls weitere Ergebnisse verfügbar sind, dies zum Fortfahren verwenden.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(keine Beschreibung)</span>",
+ "api-help-param-maxbytes": "Kann nicht länger sein als {{PLURAL:$1|ein Byte|$1 Bytes}}.",
+ "api-help-param-maxchars": "Kann nicht länger sein als {{PLURAL:$1|ein|$1}} Zeichen.",
+ "api-help-examples": "{{PLURAL:$1|Beispiel|Beispiele}}:",
+ "api-help-permissions": "{{PLURAL:$1|Berechtigung|Berechtigungen}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Gewährt an}}: $2",
+ "api-help-right-apihighlimits": "Höhere Beschränkungen in API-Anfragen verwenden (langsame Anfragen: $1; schnelle Anfragen: $2). Die Beschränkungen für langsame Anfragen werden auch auf Mehrwertparameter angewandt.",
+ "api-help-open-in-apisandbox": "<small>[in Spielwiese öffnen]</small>",
+ "api-help-authmanagerhelper-messageformat": "Zu verwendendes Format zur Rückgabe von Nachrichten.",
+ "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> unbekannt.",
+ "apierror-badip": "Der IP-Parameter ist nicht gültig.",
+ "apierror-badmd5": "Die angegebene MD5-Prüfsumme war falsch.",
+ "apierror-badmodule-badsubmodule": "Das Modul <kbd>$1</kbd> hat kein Untermodul namens „$2“.",
+ "apierror-badmodule-nosubmodules": "Das Modul <kbd>$1</kbd> hat keine Untermodule.",
+ "apierror-badparameter": "Ungültiger Wert für den Parameter <var>$1</var>.",
+ "apierror-badquery": "Ungültige Abfrage.",
+ "apierror-cannot-async-upload-file": "Die Parameter <var>async</var> und <var>file</var> können nicht kombiniert werden. Falls du eine asynchrone Verarbeitung deiner hochgeladenen Datei wünschst, lade sie zuerst mithilfe des Parameters <var>stash</var> auf den Speicher hoch. Veröffentliche anschließend die gespeicherte Datei asynchron mithilfe <var>filekey</var> und <var>async</var>.",
+ "apierror-emptypage": "Das Erstellen neuer leerer Seiten ist nicht erlaubt.",
+ "apierror-filedoesnotexist": "Die Datei ist nicht vorhanden.",
+ "apierror-import-unknownerror": "Unbekannter Fehler beim Importieren: $1.",
+ "apierror-invalid-file-key": "Kein gültiger Dateischlüssel.",
+ "apierror-invalidsection": "Der Parameter <var>section</var> muss eine gültige Abschnittskennung oder <kbd>new</kbd> sein.",
+ "apierror-invaliduserid": "Die Benutzerkennung <var>$1</var> ist nicht gültig.",
+ "apierror-maxbytes": "Der Parameter <var>$1</var> kann nicht länger sein als {{PLURAL:$2|ein Byte|$2 Bytes}}",
+ "apierror-maxchars": "Der Parameter <var>$1</var> kann nicht länger sein als {{PLURAL:$2|ein|$2}} Zeichen",
+ "apierror-nosuchsection": "Es gibt keinen Abschnitt $1.",
+ "apierror-nosuchuserid": "Es gibt keinen Benutzer mit der Kennung $1.",
+ "apierror-offline": "Aufgrund von Problemen bei der Netzwerkverbindung kannst du nicht weitermachen. Stelle sicher, dass du eine funktionierende Internetverbindung hast und versuche es erneut.",
+ "apierror-pagelang-disabled": "Das Ändern der Sprache von Seiten ist auf diesem Wiki nicht erlaubt.",
+ "apierror-protect-invalidaction": "Ungültiger Schutztyp „$1“.",
+ "apierror-readonly": "Das Wiki ist derzeit im schreibgeschützten Modus.",
+ "apierror-revisions-badid": "Für den Parameter <var>$1</var> wurde keine Version gefunden.",
+ "apierror-revwrongpage": "Die Version $1 ist keine Version von $2.",
+ "apierror-sectionreplacefailed": "Der aktualisierte Abschnitt konnte nicht zusammengeführt werden.",
+ "apierror-stashinvalidfile": "Ungültige gespeicherte Datei.",
+ "apierror-stashnosuchfilekey": "Kein derartiger Dateischlüssel: $1.",
+ "apierror-stashwrongowner": "Falscher Besitzer: $1",
+ "apierror-systemblocked": "Du wurdest von MediaWiki automatisch gesperrt.",
+ "apierror-timeout": "Der Server hat nicht innerhalb der erwarteten Zeit reagiert.",
+ "apierror-unknownerror-nocode": "Unbekannter Fehler.",
+ "apierror-unknownerror": "Unbekannter Fehler: „$1“.",
+ "apierror-unknownformat": "Nicht erkanntes Format „$1“.",
+ "apiwarn-invalidcategory": "„$1“ ist keine Kategorie.",
+ "apiwarn-invalidtitle": "„$1“ ist kein gültiger Titel.",
+ "apiwarn-notfile": "„$1“ ist keine Datei.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var>, ohne <var>text</var> verwendet, und geparste Seiteneigenschaften wurden angefordert. Wolltest du <var>oldid</var> anstatt <var>revid</var> verwenden?",
+ "apiwarn-toomanyvalues": "Es wurden zu viele Werte für den Parameter <var>$1</var> angegeben. Die Obergrenze liegt bei $2.",
+ "apiwarn-validationfailed-badpref": "Keine gültige Einstellung.",
+ "apiwarn-validationfailed-cannotset": "Kann nicht von diesem Modul festgelegt werden.",
+ "apiwarn-validationfailed-keytoolong": "Der Schlüssel ist zu lang. Es sind nicht mehr als $1 Bytes erlaubt.",
+ "apiwarn-validationfailed": "Validierungsfehler für <kbd>$1</kbd>: $2",
+ "api-feed-error-title": "Fehler ($1)",
+ "api-usage-docref": "Siehe $1 zur Verwendung der API.",
+ "api-usage-mailinglist-ref": "Abonniere die Mailingliste „mediawiki-api-announce“ auf &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; zum Feststellen von API-Veralterungen und „Breaking Changes“.",
+ "api-credits-header": "Danksagungen",
+ "api-credits": "API-Entwickler:\n* Roan Kattouw (Hauptentwickler von September 2007 bis 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Autor, Hauptentwickler von September 2006 bis September 2007)\n* Brad Jorsch (Hauptentwickler seit 2013)\n\nBitte sende deine Kommentare, Vorschläge und Fragen an mediawiki-api@lists.wikimedia.org\noder reiche einen Fehlerbericht auf https://phabricator.wikimedia.org/ ein."
+}
diff --git a/www/wiki/includes/api/i18n/diq.json b/www/wiki/includes/api/i18n/diq.json
new file mode 100644
index 00000000..2a0cbe8b
--- /dev/null
+++ b/www/wiki/includes/api/i18n/diq.json
@@ -0,0 +1,66 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gorizon",
+ "Mirzali",
+ "Kumkumuk",
+ "Asmen",
+ "1917 Ekim Devrimi",
+ "Gambollar"
+ ]
+ },
+ "apihelp-main-param-action": "Performansa kamci aksiyon",
+ "apihelp-block-summary": "Enê karberi bloqe ke",
+ "apihelp-block-param-reason": "Sebeba Bloqey",
+ "apihelp-block-param-nocreate": "Hesab viraştişi bloqe ke.",
+ "apihelp-checktoken-param-token": "Jetona test ke",
+ "apihelp-createaccount-summary": "Yew Hesabê karberi yo newe vıraze",
+ "apihelp-createaccount-param-name": "Nameyê karberi.",
+ "apihelp-createaccount-param-email": "E-postay karberi (keyfi)",
+ "apihelp-createaccount-param-realname": "Namey karberi yo raştay (keyfi)",
+ "apihelp-delete-summary": "Pele bestere.",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd> besternê.",
+ "apihelp-disabled-summary": "Eno modul aktiv niyo.",
+ "apihelp-edit-summary": "Vıraze û pelan bıvurne.",
+ "apihelp-edit-param-text": "Zerreki pele",
+ "apihelp-edit-param-minor": "Vurriyayışê werdiy",
+ "apihelp-edit-param-notminor": "Vurnayışo qıckek niyo.",
+ "apihelp-edit-param-bot": "Nê vurnayışi zey boti nişan ke.",
+ "apihelp-edit-example-edit": "Şeker bıvurne",
+ "apihelp-emailuser-summary": "Yew karberi rê e-poste bırışe.",
+ "apihelp-emailuser-param-target": "Karbero ke cı rê e-poste do bırışiyo.",
+ "apihelp-emailuser-param-subject": "Sernameyê mewzuyi.",
+ "apihelp-emailuser-param-text": "Metınê e-posteyi.",
+ "apihelp-emailuser-param-ccme": "Yew kopyaya nê posteyi mı rê bırışe.",
+ "apihelp-expandtemplates-param-title": "Sernameyê pele.",
+ "apihelp-expandtemplates-param-text": "Wikimetıni açarnê.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Herabıyaye wikimetin",
+ "apihelp-feedcontributions-param-feedformat": "Formata warikerdışi",
+ "apihelp-feedcontributions-param-year": "Ser ra (u rewên)",
+ "apihelp-feedcontributions-param-month": "Meng ra (u rewên)",
+ "apihelp-feedcontributions-param-hideminor": "Vuryayışanê werdiyan bınımne",
+ "apihelp-feedcontributions-param-showsizediff": "Goreyê ebati ferqê versiyoni bımotné.",
+ "apihelp-feedrecentchanges-param-hideminor": "Vurriyayışanê werdiyan bınımne.",
+ "apihelp-feedrecentchanges-param-hidebots": "Vurnayışanê botan bınımne.",
+ "apihelp-feedrecentchanges-param-hideanons": "Vurnayışanê karberanê anoniman bınımne.",
+ "apihelp-feedrecentchanges-param-hideliu": "Vurnayışanê karberanê qeydınan bınımne.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrey etiketi",
+ "apihelp-feedrecentchanges-example-simple": "Vurnayışê peyênan bıvin",
+ "apihelp-feedrecentchanges-example-30days": "Peyni vurnayışanê 30 raco bımosne",
+ "apihelp-filerevert-param-comment": "Mışewre bar ke",
+ "apihelp-login-param-name": "Nameyê karberi.",
+ "apihelp-login-param-password": "Parola.",
+ "apihelp-login-param-domain": "Domain (optional).",
+ "apihelp-login-example-login": "Dekew.",
+ "apihelp-mergehistory-summary": "Verorê pela yew ke",
+ "apihelp-move-summary": "Yew pele bere.",
+ "apihelp-move-param-noredirect": "Hetenayış mevıraz",
+ "apihelp-options-example-reset": "Terciha pêron reset ke",
+ "apihelp-options-example-change": "Tercihanê <kbd>skin</kbd> u <kbd>hideminor</kbd> bıvurnê",
+ "apihelp-parse-example-page": "Peler analiz ke",
+ "apihelp-parse-example-text": "Wikimetini analiz ke",
+ "apihelp-parse-example-summary": "Xulasay analiz ke",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Sernamey rê link dek",
+ "apihelp-query+allmessages-param-lang": "Mesaja açarn ena zıwan.",
+ "apihelp-query+blocks-example-simple": "Listey bloqeyan"
+}
diff --git a/www/wiki/includes/api/i18n/el.json b/www/wiki/includes/api/i18n/el.json
new file mode 100644
index 00000000..4e8dfa04
--- /dev/null
+++ b/www/wiki/includes/api/i18n/el.json
@@ -0,0 +1,109 @@
+{
+ "@metadata": {
+ "authors": [
+ "Glavkos",
+ "Protnet",
+ "Stam.nikos",
+ "Macofe",
+ "Geraki",
+ "Giorgos456"
+ ]
+ },
+ "apihelp-main-summary": "",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Τεκμηρίωση]]\n* [[mw:API:FAQ|Συχνές ερωτήσεις]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Λίστα αλληλογραφίας]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Ανακοινώσεις API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Σφάλματα & αιτήματα]\n</div>\n<strong>Κατάσταση:</strong> Όλα τα χαρακτηριστικά που εμφανίζονται σε αυτή τη σελίδα πρέπει να λειτουργούν, αλλά το API είναι ακόμα σε ενεργό ανάπτυξη, και μπορεί να αλλάξει ανά πάσα στιγμή. Εγγραφείτε στη [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce λίστα αλληλογραφίας] για να ειδοποιείστε για ενημερώσεις.\n\n<strong>Εσφαλμένα αιτήματα:</strong> Όταν στέλνονται εσφαλμένα αιτήματα στο API, επιστρέφεται μία κεφαλίδα HTTP (header) με το κλειδί \"MediaWiki-API-Error\" κι έπειτα η τιμή της κεφαλίδας και ο κωδικός σφάλματος που επιστρέφονται ορίζονται στην ίδια τιμή. Για περισσότερες πληροφορίες, δείτε [[mw:API:Errors_and_warnings|API: Σφάλματα και προειδοποιήσεις]].",
+ "apihelp-main-param-action": "Ποια ενέργει να εκτελεστεί.",
+ "apihelp-main-param-format": "Η μορφή των δεδομένων εξόδου.",
+ "apihelp-main-param-curtimestamp": "Συμπερίληψη της τρέχουσας χρονοσφραγίδας στο αποτέλεσμα.",
+ "apihelp-main-param-origin": "Κατά την πρόσβαση στο API χρησιμοποιώντας ένα cross-domain αίτημα AJAX (ΕΤΠ), το σύνολο αυτό το τομέα προέλευσης. Αυτό πρέπει να περιλαμβάνεται σε κάθε προ-πτήσης αίτηση, και ως εκ τούτου πρέπει να είναι μέρος του URI αιτήματος (δεν είναι η ΘΈΣΗ του σώματος). Αυτό πρέπει να ταιριάζει με μία από τις ρίζες της <code>Προέλευσης</code> κεφαλίδων ακριβώς, γι ' αυτό θα πρέπει να οριστεί σε κάτι σαν <kbd>https://en.wikipedia.org</kbd> ή <kbd>https://meta.wikimedia.org</kbd>. Εάν αυτή η παράμετρος δεν ταιριάζει με την <code>Προέλευση</code> κεφαλίδα, 403 απάντηση θα πρέπει να επιστραφεί. Εάν αυτή η παράμετρος ταιριάζει με την <code>Προέλευση</code> κεφαλίδα και η καταγωγή του είναι στη λίστα επιτρεπόμενων, μια <code>Access-Control-Allow-Origin</code> κεφαλίδα θα πρέπει να ρυθμιστεί.",
+ "apihelp-main-param-uselang": "Γλώσσα για τις μεταφράσεις μηνυμάτων. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> με <kbd>siprop=languages</kbd> επιστρέφει μια λίστα με κωδικούς γλωσσών, ή καθορίστε <kbd>user</kbd> για να χρησιμοποιήσετε την προτίμηση γλώσσας του τρέχοντα χρήστη, ή καθορίστε <kbd>content</kbd> για να χρησιμοποιήσετε τη γλώσσα περιεχομένου αυτού του wiki.",
+ "apihelp-block-summary": "Φραγή χρήστη",
+ "apihelp-block-param-user": "Όνομα χρήστη, διεύθυνση IP ή εύρος διευθύνσεων IP που θέλετε να επιβάλετε φραγή.",
+ "apihelp-block-param-expiry": "Ώρα λήξης. Μπορεί να είναι σχετική (π.χ. <kbd>σε 5 μήνες</kbd> ή <kbd>σε 2 εβδομάδες</kbd>) ή απόλυτη (π.χ. <kbd>2014-09-18T12:34:56Z</kbd>). Αν οριστεί σε <kbd>άπειρη</kbd>, <kbd>απεριόριστη</kbd>, ή <kbd>ποτέ</kbd>, ο αποκλεισμός δεν θα λήξει ποτέ.",
+ "apihelp-block-param-reason": "Λόγος φραγής.",
+ "apihelp-block-param-anononly": "Αποκλείστε ανώνυμους χρήστες μόνο (δηλ. απενεργοποιήστε ανώνυμες επεξεργασίες για αυτή τη διεύθυνση IP).",
+ "apihelp-block-param-nocreate": "Αποτροπή δημιουργίας λογαριασμού.",
+ "apihelp-block-param-autoblock": "Αποκλείστε αυτόματα την τελευταία χρησιμοποιημένη διεύθυνση IP και κάθε συνακόλουθη διεύθυνση IP από την οποία γίνεται προσπάθεια σύνδεσης.",
+ "apihelp-block-param-noemail": "Να αποτρέψει το χρήστη από την αποστολή e-mail μέσω του wiki. (Απαιτεί το δικαίωμα <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Κρύψε το όνομα χρήστη από το ημερολόγιο φραγών. (Απαιτείται το δικαίωμα <code>hideuser</code>).",
+ "apihelp-block-param-reblock": "Αν ο χρήστης είναι ήδη αποκλεισμέμος, αντικαταστήστε την υπάρχουσα φραγή.",
+ "apihelp-block-param-watchuser": "Παρακολούθηση του χρήστη ή της διεύθυνσης IP του χρήστη και των σελίδων συζήτησής του.",
+ "apihelp-block-example-ip-simple": "Φραγή διεύθυνσης IP <kbd>192.0.2.5</kbd> για τρεις μέρες με το λόγο, <kbd>Πρώτη απεργία</kbd>.",
+ "apihelp-checktoken-param-token": "Δείγμα σας για τη δοκιμή.",
+ "apihelp-checktoken-param-maxtokenage": "Μέγιστη επιτρεπόμενη διάρκεια του token, σε δευτερόλεπτα.",
+ "apihelp-createaccount-summary": "Δημιουργήστε νέο λογαριασμό χρήστη.",
+ "apihelp-createaccount-param-name": "Όνομα χρήστη.",
+ "apihelp-createaccount-param-password": "Κωδικός πρόσβασης (αγνοείται, αν έχει οριστεί το <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου χρήστη (προαιρετικό).",
+ "apihelp-createaccount-param-realname": "Πραγματικό όνομα χρήστη (προαιρετικό).",
+ "apihelp-createaccount-param-mailpassword": "Εάν οριστεί σε οποιαδήποτε τιμή, ένας τυχαίος κωδικός πρόσβασης θα αποσταλεί μέσω ηλεκτρονικού ταχυδρομείου στο χρήστη.",
+ "apihelp-createaccount-param-language": "Κωδικός γλώσσας που να οριστεί ως προεπιλογή για το χρήστη (προαιρετικό, έχει ως προεπιλογή τη γλώσσα περιεχομένου).",
+ "apihelp-delete-summary": "Διαγραφή σελίδας.",
+ "apihelp-delete-example-simple": "Διαγραφή <kbd>Main Page</kbd>.",
+ "apihelp-edit-summary": "Δημιουργία και επεξεργασία σελίδων.",
+ "apihelp-edit-param-sectiontitle": "Ο τίτλος νέας ενότητας.",
+ "apihelp-edit-param-text": "Περιεχόμενο σελίδας.",
+ "apihelp-edit-param-minor": "Μικροεπεξεργασία.",
+ "apihelp-edit-param-notminor": "Μη ήσσονος σημασίας επεξεργασία.",
+ "apihelp-edit-param-bot": "Σήμανση αυτής της επεξεργασίας ως επεξεργασία από ρομπότ.",
+ "apihelp-edit-param-createonly": "Να μην γίνει επεξεργασία της σελίδας εάν υπάρχει ήδη.",
+ "apihelp-edit-param-nocreate": "Να εμφανιστεί μήνυμα σφάλματος εάν η σελίδα δεν υπάρχει.",
+ "apihelp-edit-param-watch": "Να προστεθεί η σελίδα στη λίστα παρακολούθησης του τρέχοντα χρήστη.",
+ "apihelp-edit-param-unwatch": "Να αφαιρεθεί η σελίδα από τη λίστα παρακολούθησης του τρέχοντα χρήστη.",
+ "apihelp-edit-param-contentmodel": "Μοντέλο περιεχομένου για το νέο περιεχόμενο.",
+ "apihelp-edit-example-edit": "Επεξεργασία κάποιας σελίδας.",
+ "apihelp-emailuser-summary": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου σε χρήστη.",
+ "apihelp-emailuser-param-target": "Χρήστης στον οποίον να σταλεί το μήνυμα ηλεκτρονικού ταχυδρομείου.",
+ "apihelp-emailuser-param-subject": "Κεφαλίδα θέματος.",
+ "apihelp-emailuser-param-text": "Σώμα μηνύματος.",
+ "apihelp-emailuser-param-ccme": "Αποστολή αντιγράφου αυτού του μηνύματος σε εμένα.",
+ "apihelp-expandtemplates-summary": "Επεκτείνει όλα τα πρότυπα στον κώδικα wiki.",
+ "apihelp-expandtemplates-param-title": "Τίτλος σελίδας.",
+ "apihelp-expandtemplates-param-text": "Κώδικας wiki προς μετατροπή.",
+ "apihelp-feedcontributions-param-feedformat": "Η μορφή της ροής.",
+ "apihelp-feedcontributions-param-deletedonly": "Εμφάνιση μόνο διαγεγραμμένων συνεισφορών.",
+ "apihelp-feedcontributions-param-toponly": "Εμφάνιση μόνο των επεξεργασιών που είναι οι πιο πρόσφατες αναθεωρήσεις.",
+ "apihelp-feedcontributions-param-newonly": "Εμφάνιση μόνο των επεξεργασιών που είναι δημιουργία σελίδας.",
+ "apihelp-feedcontributions-param-showsizediff": "Εμφάνιση της διαφοράς μεγέθους μεταξύ αναθεωρήσεων.",
+ "apihelp-feedrecentchanges-param-from": "Εμφάνιση αλλαγών από τότε.",
+ "apihelp-feedrecentchanges-param-hideminor": "Απόκρυψη μικρών αλλαγών.",
+ "apihelp-feedrecentchanges-param-hidebots": "Απόκρυψη αλλαγών που έγιναν από ρομπότ.",
+ "apihelp-feedrecentchanges-param-hideanons": "Απόκρυψη αλλαγών που έγιναν από ανώνυμους χρήστες.",
+ "apihelp-feedrecentchanges-param-hideliu": "Απόκρυψη αλλαγών που έγιναν από εγγεγραμμένους χρήστες.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Απόκρυψη ελεγμένων αλλαγών.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Απόκρυψη αλλαγών που έγιναν από τον τρέχοντα χρήστη.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Φιλτράρισμα κατά ετικέτα.",
+ "apihelp-feedrecentchanges-param-target": "Εμφάνιση μόνο των αλλαγών σε σελίδες που συνδέονται με αυτή τη σελίδα.",
+ "apihelp-feedrecentchanges-example-simple": "Εμφάνιση πρόσφατων αλλαγών.",
+ "apihelp-feedrecentchanges-example-30days": "Εμφάνιση πρόσφατων αλλαγών για 30 ημέρες.",
+ "apihelp-feedwatchlist-summary": "Επιστρέφει μια ροή λίστας παρακολούθησης.",
+ "apihelp-feedwatchlist-param-feedformat": "Η μορφή της ροής.",
+ "apihelp-filerevert-param-comment": "Σχόλιο ανεβάσματος.",
+ "apihelp-help-example-recursive": "Όλη η βοήθεια σε μια σελίδα.",
+ "apihelp-imagerotate-summary": "Περιστροφή μίας ή περισσοτέρων εικόνων.",
+ "apihelp-imagerotate-param-rotation": "Μοίρες με τις οποίες να περιστραφεί η εικόνα ωρολογιακά.",
+ "apihelp-import-param-summary": "Εισαγωγή σύνοψης.",
+ "apihelp-login-param-name": "Όνομα χρήστη.",
+ "apihelp-login-param-password": "Κωδικός πρόσβασης.",
+ "apihelp-login-param-domain": "Τομέας (προαιρετικό).",
+ "apihelp-login-example-login": "Σύνδεση.",
+ "apihelp-logout-summary": "Αποσύνδεση και διαγραφή δεδομένων περιόδου λειτουργίας.",
+ "apihelp-logout-example-logout": "Αποσύνδεση του τρέχοντα χρήστη.",
+ "apihelp-move-summary": "Μετακίνηση σελίδας.",
+ "apihelp-move-param-reason": "Λόγος μετονομασίας.",
+ "apihelp-move-param-movetalk": "Μετονομασία της σελίδας συζήτησης, εάν υπάρχει.",
+ "apihelp-move-param-movesubpages": "Μετονομασία υποσελίδων, εφόσον συντρέχει περίπτωση.",
+ "apihelp-move-param-noredirect": "Να μην δημιουργηθεί ανακατεύθυνση.",
+ "apihelp-move-param-ignorewarnings": "Να αγνοηθούν τυχόν προειδοποιήσεις.",
+ "apihelp-opensearch-param-search": "Συμβολοσειρά αναζήτησης.",
+ "apihelp-opensearch-param-limit": "Μέγιστος αριθμός αποτελεσμάτων που θα επιστραφούν.",
+ "apihelp-opensearch-param-namespace": "Ονοματοχώροι προς αναζήτηση.",
+ "apihelp-opensearch-param-format": "Η μορφή των δεδομένων εξόδου.",
+ "apihelp-options-example-reset": "Επαναφορά όλων των προτιμήσεων.",
+ "apihelp-paraminfo-param-helpformat": "Μορφή των συμβολοσειρών βοήθειας.",
+ "apihelp-patrol-example-revid": "Έλεγχος αναθεώρησης.",
+ "apihelp-protect-example-protect": "Προστασία σελίδας.",
+ "apihelp-query+users-paramvalue-prop-gender": "Επισημαίνει το φύλο του χρήστη. Επιστρέφει «αρσενικό», «θηλυκό» ή «άγνωστο»",
+ "api-help-param-type-limit": "Τύπος: ακέραιος ή <kbd>max</kbd>",
+ "api-help-param-type-boolean": "Τύπος: boolean ([[Special:ApiHelp/main#main/datatypes|λεπτομέρειες]])",
+ "api-help-param-type-user": "Τύπος: {{PLURAL:$1|1=όνομα χρήστη|2=λίστα με ονόματα χρήστη}}"
+}
diff --git a/www/wiki/includes/api/i18n/en-gb.json b/www/wiki/includes/api/i18n/en-gb.json
new file mode 100644
index 00000000..777c4e87
--- /dev/null
+++ b/www/wiki/includes/api/i18n/en-gb.json
@@ -0,0 +1,154 @@
+{
+ "@metadata": {
+ "authors": [
+ "Reedy",
+ "Chase me ladies, I'm the Cavalry",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
+ "apihelp-main-param-maxage": "Set the <code>max-age</code> HTTP cache control header to this many seconds. Errors are never cached.",
+ "apihelp-main-param-assert": "Verify the user is logged in if set to <kbd>user</kbd>, or has the bot userright if <kbd>bot</kbd>.",
+ "apihelp-block-param-user": "Username, IP address, or IP range to block.",
+ "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-watchuser": "Watch the user and talk pages of the user or IP address.",
+ "apihelp-block-example-ip-simple": "Block IP address <kbd>192.0.2.5</kbd> for three days with reason <kbd>First strike</kbd>.",
+ "apihelp-clearhasmsg-summary": "Clears the <code>hasmsg</code> flag for the current user.",
+ "apihelp-compare-summary": "Get the difference between 2 pages.",
+ "apihelp-compare-extended-description": "A revision number, a page title, or a page ID for both \"from\" and \"to\" must be passed.",
+ "apihelp-createaccount-param-password": "Password (ignored if <var>$1mailpassword</var> is set).",
+ "apihelp-delete-param-title": "Title of the page to delete. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-delete-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-delete-example-simple": "Delete <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Delete <kbd>Main Page</kbd> with the reason <kbd>Preparing for move</kbd>.",
+ "apihelp-edit-param-title": "Title of the page to edit. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-edit-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-edit-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-edit-param-contentformat": "Content serialisation format used for the input text.",
+ "apihelp-edit-example-prepend": "Prepend <kbd>_&#95;NOTOC_&#95;</kbd> to a page.",
+ "apihelp-expandtemplates-example-simple": "Expand the wikitext <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Hide changes made by the current user.",
+ "apihelp-filerevert-example-revert": "Revert <kbd>Wiki.png</kbd> to the version of <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-example-main": "Help for the main module.",
+ "apihelp-help-example-query": "Help for two query submodules.",
+ "apihelp-import-summary": "Import a page from another wiki, or an XML file.",
+ "apihelp-import-extended-description": "Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the <var>xml</var> parameter.",
+ "apihelp-login-example-gettoken": "Retrieve a login token.",
+ "apihelp-logout-example-logout": "Log the current user out.",
+ "apihelp-move-param-to": "Title to rename the page to.",
+ "apihelp-move-param-reason": "Reason for the rename.",
+ "apihelp-move-example-move": "Move <kbd>Badtitle</kbd> to <kbd>Goodtitle</kbd> without leaving a redirect.",
+ "apihelp-opensearch-example-te": "Find pages beginning with <kbd>Te</kbd>.",
+ "apihelp-options-param-resetkinds": "List of types of options to reset when the <var>$1reset</var> option is set.",
+ "apihelp-options-param-optionvalue": "A value of the option specified by <var>$1optionname</var>, can contain pipe characters.",
+ "apihelp-options-example-change": "Change <kbd>skin</kbd> and <kbd>hideminor</kbd> preferences.",
+ "apihelp-options-example-complex": "Reset all preferences, then set <kbd>skin</kbd> and <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-param-querymodules": "List of query module names (value of <var>prop</var>, <var>meta</var> or <var>list</var> parameter). Use <kbd>$1modules=query+foo</kbd> instead of <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-parse-param-pageid": "Parse the content of this page. Overrides <var>$1page</var>.",
+ "apihelp-parse-param-contentformat": "Content serialisation format used for the input text. Only valid when used with $1text.",
+ "apihelp-patrol-example-rcid": "Patrol a recent change.",
+ "apihelp-patrol-example-revid": "Patrol a revision.",
+ "apihelp-protect-param-protections": "List of protection levels, formatted <kbd>action=level</kbd> (e.g. <kbd>edit=sysop</kbd>).\n\n<strong>Note:</strong> Any actions not listed will have restrictions removed.",
+ "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it will be used for all protections. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, or <kbd>never</kbd>, for a never-expiring protection.",
+ "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-protect-example-unprotect2": "Unprotect a page by setting no restrictions.",
+ "apihelp-purge-example-simple": "Purge the <kbd>Main Page</kbd> and the <kbd>API</kbd> page.",
+ "apihelp-query-example-allpages": "Fetch revisions of pages beginning with <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-example-generator": "Retrieve information about the category page for categories beginning <kbd>List</kbd>.",
+ "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones.",
+ "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with <kbd>$1prop=ids</kbd>.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "List unique linked titles.",
+ "apihelp-query+allmessages-example-ipb": "Show messages starting with <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Show messages <kbd>august</kbd> and <kbd>mainpage</kbd> in German.",
+ "apihelp-query+allpages-example-B": "Show a list of pages starting at the letter <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects.",
+ "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles.",
+ "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions.",
+ "apihelp-query+backlinks-param-pageid": "Page ID to search. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+backlinks-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
+ "apihelp-query+backlinks-example-generator": "Get information about pages linking to <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP or CIDR range, including range blocks.\nThis cannot be used together with <var>$3users</var>. CIDR ranges broader than IPv4/$1 or IPv6/$2 will not be not accepted.",
+ "apihelp-query+blocks-example-simple": "List blocks.",
+ "apihelp-query+blocks-example-users": "List blocks of users <kbd>Alice</kbd> and <kbd>Bob</kbd>.",
+ "apihelp-query+categoryinfo-example-simple": "Get information about <kbd>Category:Foo</kbd> and <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing from, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by <kbd>Bob</kbd> (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "List the first 50 deleted pages in the {{ns:talk}} namespace (mode 3).",
+ "apihelp-query+duplicatefiles-example-simple": "Look for duplicates of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Look for duplicates of all files.",
+ "apihelp-query+extlinks-example-simple": "Get a list of external links on <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
+ "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories.",
+ "apihelp-query+imageinfo-param-metadataversion": "Version of metadata to use. If <kbd>latest</kbd> is specified, use latest version. Defaults to <kbd>1</kbd> for backwards compatibility.",
+ "apihelp-query+imageinfo-example-simple": "Fetch information about the current version of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+images-example-simple": "Get a list of files used in the [[Main Page]].",
+ "apihelp-query+imageusage-example-simple": "Show pages using [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Get information about pages using [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-example-protection": "Get general and protection information about the page <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with <var>$1prefix</var>.",
+ "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]].",
+ "apihelp-query+langlinks-param-title": "Link to search for. Must be used with <var>$1lang</var>.",
+ "apihelp-query+links-example-simple": "Get links from the page <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-namespaces": "Get links from the page <kbd>Main Page</kbd> in the {{ns:user}} and {{ns:template}} namespaces.",
+ "apihelp-query+linkshere-example-simple": "Get a list of pages linking to the [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]].",
+ "apihelp-query+logevents-example-simple": "List recent log events.",
+ "apihelp-query+pagepropnames-summary": "List all page property names in use on the wiki.",
+ "apihelp-query+pageswithprop-summary": "List all pages using a given page property.",
+ "apihelp-query+pageswithprop-example-generator": "Get page information about the first 10 pages using <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace.",
+ "apihelp-query+random-example-simple": "Return two random pages from the main namespace.",
+ "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace.",
+ "apihelp-query+recentchanges-example-simple": "List recent changes.",
+ "apihelp-query+redirects-example-generator": "Get information about all redirects to the [[Main Page]].",
+ "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the <kbd>Main Page</kbd> that were not made by anonymous user <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions+base-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides <var>$1diffto</var>. If <var>$1section</var> is set, only that section will be diffed against this text",
+ "apihelp-query+revisions+base-param-contentformat": "Serialisation format used for <var>$1difftotext</var> and expected for output of content.",
+ "apihelp-query+search-example-text": "Search texts for <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Get page information about the pages returned for a search for <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-example-simple": "Fetch site information.",
+ "apihelp-query+siteinfo-example-replag": "Check the current replication lag.",
+ "apihelp-query+stashimageinfo-example-simple": "Returns information for a stashed file.",
+ "apihelp-query+tags-example-simple": "List available tags.",
+ "apihelp-query+templates-example-simple": "Get the templates used on the page <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Get information about the template pages used on <kbd>Main Page</kbd>.",
+ "apihelp-query+tokens-example-simple": "Retrieve a csrf token (the default).",
+ "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token.",
+ "apihelp-query+transcludedin-example-simple": "Get a list of pages transcluding <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Get information about pages transcluding <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-example-user": "Show contributions of user <kbd>Example</kbd>.",
+ "apihelp-query+userinfo-example-simple": "Get information about the current user.",
+ "apihelp-query+watchlist-example-simple": "List the top revision for recently changed pages on the watchlist of the current user.",
+ "apihelp-query+watchlist-example-generator": "Fetch page info for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-summary": "Get all pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-example-simple": "List pages on the watchlist of the current user.",
+ "apihelp-query+watchlistraw-example-generator": "Fetch page info for pages on the current user's watchlist.",
+ "apihelp-revisiondelete-example-revision": "Hide content for revision <kbd>12345</kbd> on the page <kbd>Main Page</kbd>.",
+ "apihelp-rollback-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-rollback-example-simple": "Roll back the last edits to page <kbd>Main Page</kbd> by user <kbd>Example</kbd>.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the <kbd>{{ns:user}}</kbd> namespace.",
+ "apihelp-unblock-param-id": "ID of the block to unblock (obtained through <kbd>list=blocks</kbd>). Cannot be used together with <var>$1user</var>.",
+ "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
+ "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-undelete-example-page": "Undelete page <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Undelete two revisions of page <kbd>Main Page</kbd>.",
+ "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if <var>$1text</var> is not specified.",
+ "apihelp-upload-example-url": "Upload from a URL.",
+ "apihelp-upload-example-filekey": "Complete an upload that failed due to warnings.",
+ "apihelp-userrights-example-userid": "Add the user with ID <kbd>123</kbd> to group <kbd>bot</kbd>, and remove from groups <kbd>sysop</kbd> and <kbd>bureaucrat</kbd>.",
+ "apihelp-watch-param-title": "The page to (un)watch. Use <var>$1titles</var> instead.",
+ "apihelp-watch-example-unwatch": "Unwatch the page <kbd>Main Page</kbd>.",
+ "apihelp-php-summary": "Output data in serialised PHP format.",
+ "apihelp-phpfm-summary": "Output data in serialised PHP format (pretty-print in HTML).",
+ "api-pageset-param-redirects-generator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>, and in pages returned by <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>.",
+ "api-help-param-multi-separate": "Separate values with <kbd>|</kbd>.",
+ "api-help-param-disabled-in-miser-mode": "Disabled due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Note:</strong> Due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]], using this may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned."
+}
diff --git a/www/wiki/includes/api/i18n/en.json b/www/wiki/includes/api/i18n/en.json
new file mode 100644
index 00000000..6838e545
--- /dev/null
+++ b/www/wiki/includes/api/i18n/en.json
@@ -0,0 +1,1890 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anomie",
+ "Siebrand",
+ "Zoranzoki21"
+ ]
+ },
+
+ "apihelp-main-summary": "",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> The MediaWiki API is a mature and stable interface that is actively supported and improved. While we try to avoid it, we may occasionally need to make breaking changes; subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testing:</strong> For ease of testing API requests, see [[Special:ApiSandbox]].</p>",
+ "apihelp-main-param-action": "Which action to perform.",
+ "apihelp-main-param-format": "The format of the output.",
+ "apihelp-main-param-maxlag": "Maximum lag can be used when MediaWiki is installed on a database replicated cluster. To save actions causing any more site replication lag, this parameter can make the client wait until the replication lag is less than the specified value. In case of excessive lag, error code <samp>maxlag</samp> is returned with a message like <samp>Waiting for $host: $lag seconds lagged</samp>.<br />See [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] for more information.",
+ "apihelp-main-param-smaxage": "Set the <code>s-maxage</code> HTTP cache control header to this many seconds. Errors are never cached.",
+ "apihelp-main-param-maxage": "Set the <code>max-age</code> HTTP cache control header to this many seconds. Errors are never cached.",
+ "apihelp-main-param-assert": "Verify the user is logged in if set to <kbd>user</kbd>, or has the bot user right if <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Verify the current user is the named user.",
+ "apihelp-main-param-requestid": "Any value given here will be included in the response. May be used to distinguish requests.",
+ "apihelp-main-param-servedby": "Include the hostname that served the request in the results.",
+ "apihelp-main-param-curtimestamp": "Include the current timestamp in the result.",
+ "apihelp-main-param-responselanginfo": "Include the languages used for <var>uselang</var> and <var>errorlang</var> in the result.",
+ "apihelp-main-param-origin": "When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain. This must be included in any pre-flight request, and therefore must be part of the request URI (not the POST body).\n\nFor authenticated requests, this must match one of the origins in the <code>Origin</code> header exactly, so it has to be set to something like <kbd>https://en.wikipedia.org</kbd> or <kbd>https://meta.wikimedia.org</kbd>. If this parameter does not match the <code>Origin</code> header, a 403 response will be returned. If this parameter matches the <code>Origin</code> header and the origin is whitelisted, the <code>Access-Control-Allow-Origin</code> and <code>Access-Control-Allow-Credentials</code> headers will be set.\n\nFor non-authenticated requests, specify the value <kbd>*</kbd>. This will cause the <code>Access-Control-Allow-Origin</code> header to be set, but <code>Access-Control-Allow-Credentials</code> will be <code>false</code> and all user-specific data will be restricted.",
+ "apihelp-main-param-uselang": "Language to use for message translations. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> with <kbd>siprop=languages</kbd> returns a list of language codes, or specify <kbd>user</kbd> to use the current user's language preference, or specify <kbd>content</kbd> to use this wiki's content language.",
+ "apihelp-main-param-errorformat": "Format to use for warning and error text output.\n; plaintext: Wikitext with HTML tags removed and entities replaced.\n; wikitext: Unparsed wikitext.\n; html: HTML.\n; raw: Message key and parameters.\n; none: No text output, only the error codes.\n; bc: Format used prior to MediaWiki 1.29. <var>errorlang</var> and <var>errorsuselocal</var> are ignored.",
+ "apihelp-main-param-errorlang": "Language to use for warnings and errors. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> with <kbd>siprop=languages</kbd> returns a list of language codes, or specify <kbd>content</kbd> to use this wiki's content language, or specify <kbd>uselang</kbd> to use the same value as the <var>uselang</var> parameter.",
+ "apihelp-main-param-errorsuselocal": "If given, error texts will use locally-customized messages from the {{ns:MediaWiki}} namespace.",
+
+ "apihelp-block-summary": "Block a user.",
+ "apihelp-block-param-user": "Username, IP address, or IP address range to block. Cannot be used together with <var>$1userid</var>",
+ "apihelp-block-param-userid": "User ID to block. Cannot be used together with <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Expiry time. May be relative (e.g. <kbd>5 months</kbd> or <kbd>2 weeks</kbd>) or absolute (e.g. <kbd>2014-09-18T12:34:56Z</kbd>). If set to <kbd>infinite</kbd>, <kbd>indefinite</kbd>, or <kbd>never</kbd>, the block will never expire.",
+ "apihelp-block-param-reason": "Reason for block.",
+ "apihelp-block-param-anononly": "Block anonymous users only (i.e. disable anonymous edits for this IP address).",
+ "apihelp-block-param-nocreate": "Prevent account creation.",
+ "apihelp-block-param-autoblock": "Automatically block the last used IP address, and any subsequent IP addresses they try to login from.",
+ "apihelp-block-param-noemail": "Prevent user from sending email through the wiki. (Requires the <code>blockemail</code> right).",
+ "apihelp-block-param-hidename": "Hide the username from the block log. (Requires the <code>hideuser</code> right).",
+ "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "If the user is already blocked, overwrite the existing block.",
+ "apihelp-block-param-watchuser": "Watch the user's or IP address's user and talk pages.",
+ "apihelp-block-param-tags": "Change tags to apply to the entry in the block log.",
+ "apihelp-block-example-ip-simple": "Block IP address <kbd>192.0.2.5</kbd> for three days with reason <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Block user <kbd>Vandal</kbd> indefinitely with reason <kbd>Vandalism</kbd>, and prevent new account creation and email sending.",
+
+ "apihelp-changeauthenticationdata-summary": "Change authentication data for the current user.",
+ "apihelp-changeauthenticationdata-example-password": "Attempt to change the current user's password to <kbd>ExamplePassword</kbd>.",
+
+ "apihelp-checktoken-summary": "Check the validity of a token from <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Type of token being tested.",
+ "apihelp-checktoken-param-token": "Token to test.",
+ "apihelp-checktoken-param-maxtokenage": "Maximum allowed age of the token, in seconds.",
+ "apihelp-checktoken-example-simple": "Test the validity of a <kbd>csrf</kbd> token.",
+
+ "apihelp-clearhasmsg-summary": "Clears the <code>hasmsg</code> flag for the current user.",
+ "apihelp-clearhasmsg-example-1": "Clear the <code>hasmsg</code> flag for the current user.",
+
+ "apihelp-clientlogin-summary": "Log in to the wiki using the interactive flow.",
+ "apihelp-clientlogin-example-login": "Start the process of logging in to the wiki as user <kbd>Example</kbd> with password <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continue logging in after a <samp>UI</samp> response for two-factor auth, supplying an <var>OATHToken</var> of <kbd>987654</kbd>.",
+
+ "apihelp-compare-summary": "Get the difference between two pages.",
+ "apihelp-compare-extended-description": "A revision number, a page title, a page ID, text, or a relative reference for both \"from\" and \"to\" must be passed.",
+ "apihelp-compare-param-fromtitle": "First title to compare.",
+ "apihelp-compare-param-fromid": "First page ID to compare.",
+ "apihelp-compare-param-fromrev": "First revision to compare.",
+ "apihelp-compare-param-fromtext": "Use this text instead of the content of the revision specified by <var>fromtitle</var>, <var>fromid</var> or <var>fromrev</var>.",
+ "apihelp-compare-param-fromsection": "Only use the specified section of the specified 'from' content.",
+ "apihelp-compare-param-frompst": "Do a pre-save transform on <var>fromtext</var>.",
+ "apihelp-compare-param-fromcontentmodel": "Content model of <var>fromtext</var>. If not supplied, it will be guessed based on the other parameters.",
+ "apihelp-compare-param-fromcontentformat": "Content serialization format of <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Second title to compare.",
+ "apihelp-compare-param-toid": "Second page ID to compare.",
+ "apihelp-compare-param-torev": "Second revision to compare.",
+ "apihelp-compare-param-torelative": "Use a revision relative to the revision determined from <var>fromtitle</var>, <var>fromid</var> or <var>fromrev</var>. All of the other 'to' options will be ignored.",
+ "apihelp-compare-param-totext": "Use this text instead of the content of the revision specified by <var>totitle</var>, <var>toid</var> or <var>torev</var>.",
+ "apihelp-compare-param-tosection": "Only use the specified section of the specified 'to' content.",
+ "apihelp-compare-param-topst": "Do a pre-save transform on <var>totext</var>.",
+ "apihelp-compare-param-tocontentmodel": "Content model of <var>totext</var>. If not supplied, it will be guessed based on the other parameters.",
+ "apihelp-compare-param-tocontentformat": "Content serialization format of <var>totext</var>.",
+ "apihelp-compare-param-prop": "Which pieces of information to get.",
+ "apihelp-compare-paramvalue-prop-diff": "The diff HTML.",
+ "apihelp-compare-paramvalue-prop-diffsize": "The size of the diff HTML, in bytes.",
+ "apihelp-compare-paramvalue-prop-rel": "The revision IDs of the revision previous to 'from' and after 'to', if any.",
+ "apihelp-compare-paramvalue-prop-ids": "The page and revision IDs of the 'from' and 'to' revisions.",
+ "apihelp-compare-paramvalue-prop-title": "The page titles of the 'from' and 'to' revisions.",
+ "apihelp-compare-paramvalue-prop-user": "The user name and ID of the 'from' and 'to' revisions.",
+ "apihelp-compare-paramvalue-prop-comment": "The comment on the 'from' and 'to' revisions.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "The parsed comment on the 'from' and 'to' revisions.",
+ "apihelp-compare-paramvalue-prop-size": "The size of the 'from' and 'to' revisions.",
+ "apihelp-compare-example-1": "Create a diff between revision 1 and 2.",
+
+ "apihelp-createaccount-summary": "Create a new user account.",
+ "apihelp-createaccount-param-preservestate": "If <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> returned true for <samp>hasprimarypreservedstate</samp>, requests marked as <samp>primary-required</samp> should be omitted. If it returned a non-empty value for <samp>preservedusername</samp>, that username must be used for the <var>username</var> parameter.",
+ "apihelp-createaccount-example-create": "Start the process of creating user <kbd>Example</kbd> with password <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Username.",
+ "apihelp-createaccount-param-password": "Password (ignored if <var>$1mailpassword</var> is set).",
+ "apihelp-createaccount-param-domain": "Domain for external authentication (optional).",
+ "apihelp-createaccount-param-token": "Account creation token obtained in first request.",
+ "apihelp-createaccount-param-email": "Email address of user (optional).",
+ "apihelp-createaccount-param-realname": "Real name of user (optional).",
+ "apihelp-createaccount-param-mailpassword": "If set to any value, a random password will be emailed to the user.",
+ "apihelp-createaccount-param-reason": "Optional reason for creating the account to be put in the logs.",
+ "apihelp-createaccount-param-language": "Language code to set as default for the user (optional, defaults to content language).",
+ "apihelp-createaccount-example-pass": "Create user <kbd>testuser</kbd> with password <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Create user <kbd>testmailuser</kbd> and email a randomly-generated password.",
+
+ "apihelp-cspreport-summary": "Used by browsers to report violations of the Content Security Policy. This module should never be used, except when used automatically by a CSP compliant web browser.",
+ "apihelp-cspreport-param-reportonly": "Mark as being a report from a monitoring policy, not an enforced policy",
+ "apihelp-cspreport-param-source": "What generated the CSP header that triggered this report",
+
+ "apihelp-delete-summary": "Delete a page.",
+ "apihelp-delete-param-title": "Title of the page to delete. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Page ID of the page to delete. Cannot be used together with <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Reason for the deletion. If not set, an automatically generated reason will be used.",
+ "apihelp-delete-param-tags": "Change tags to apply to the entry in the deletion log.",
+ "apihelp-delete-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-delete-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-delete-param-unwatch": "Remove the page from the current user's watchlist.",
+ "apihelp-delete-param-oldimage": "The name of the old image to delete as provided by [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Delete <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Delete <kbd>Main Page</kbd> with the reason <kbd>Preparing for move</kbd>.",
+
+ "apihelp-disabled-summary": "This module has been disabled.",
+
+ "apihelp-edit-summary": "Create and edit pages.",
+ "apihelp-edit-param-title": "Title of the page to edit. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Page ID of the page to edit. Cannot be used together with <var>$1title</var>.",
+ "apihelp-edit-param-section": "Section number. <kbd>0</kbd> for the top section, <kbd>new</kbd> for a new section.",
+ "apihelp-edit-param-sectiontitle": "The title for a new section.",
+ "apihelp-edit-param-text": "Page content.",
+ "apihelp-edit-param-summary": "Edit summary. Also section title when $1section=new and $1sectiontitle is not set.",
+ "apihelp-edit-param-tags": "Change tags to apply to the revision.",
+ "apihelp-edit-param-minor": "Minor edit.",
+ "apihelp-edit-param-notminor": "Non-minor edit.",
+ "apihelp-edit-param-bot": "Mark this edit as a bot edit.",
+ "apihelp-edit-param-basetimestamp": "Timestamp of the base revision, used to detect edit conflicts. May be obtained through [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Timestamp when the editing process began, used to detect edit conflicts. An appropriate value may be obtained using <var>[[Special:ApiHelp/main|curtimestamp]]</var> when beginning the edit process (e.g. when loading the page content to edit).",
+ "apihelp-edit-param-recreate": "Override any errors about the page having been deleted in the meantime.",
+ "apihelp-edit-param-createonly": "Don't edit the page if it exists already.",
+ "apihelp-edit-param-nocreate": "Throw an error if the page doesn't exist.",
+ "apihelp-edit-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-edit-param-unwatch": "Remove the page from the current user's watchlist.",
+ "apihelp-edit-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-edit-param-md5": "The MD5 hash of the $1text parameter, or the $1prependtext and $1appendtext parameters concatenated. If set, the edit won't be done unless the hash is correct.",
+ "apihelp-edit-param-prependtext": "Add this text to the beginning of the page. Overrides $1text.",
+ "apihelp-edit-param-appendtext": "Add this text to the end of the page. Overrides $1text.\n\nUse $1section=new to append a new section, rather than this parameter.",
+ "apihelp-edit-param-undo": "Undo this revision. Overrides $1text, $1prependtext and $1appendtext.",
+ "apihelp-edit-param-undoafter": "Undo all revisions from $1undo to this one. If not set, just undo one revision.",
+ "apihelp-edit-param-redirect": "Automatically resolve redirects.",
+ "apihelp-edit-param-contentformat": "Content serialization format used for the input text.",
+ "apihelp-edit-param-contentmodel": "Content model of the new content.",
+ "apihelp-edit-param-token": "The token should always be sent as the last parameter, or at least after the $1text parameter.",
+ "apihelp-edit-example-edit": "Edit a page.",
+ "apihelp-edit-example-prepend": "Prepend <kbd>_&#95;NOTOC_&#95;</kbd> to a page.",
+ "apihelp-edit-example-undo": "Undo revisions 13579 through 13585 with autosummary.",
+
+ "apihelp-emailuser-summary": "Email a user.",
+ "apihelp-emailuser-param-target": "User to send email to.",
+ "apihelp-emailuser-param-subject": "Subject header.",
+ "apihelp-emailuser-param-text": "Mail body.",
+ "apihelp-emailuser-param-ccme": "Send a copy of this mail to me.",
+ "apihelp-emailuser-example-email": "Send an email to user <kbd>WikiSysop</kbd> with the text <kbd>Content</kbd>.",
+
+ "apihelp-expandtemplates-summary": "Expands all templates within wikitext.",
+ "apihelp-expandtemplates-param-title": "Title of page.",
+ "apihelp-expandtemplates-param-text": "Wikitext to convert.",
+ "apihelp-expandtemplates-param-revid": "Revision ID, for <code><nowiki>{{REVISIONID}}</nowiki></code> and similar variables.",
+ "apihelp-expandtemplates-param-prop": "Which pieces of information to get.\n\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "The expanded wikitext.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Any categories present in the input that are not represented in the wikitext output.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Page properties defined by expanded magic words in the wikitext.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Whether the output is volatile and should not be reused elsewhere within the page.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "The maximum time after which caches of the result should be invalidated.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Any ResourceLoader modules that parser functions have requested be added to the output. Either <kbd>jsconfigvars</kbd> or <kbd>encodedjsconfigvars</kbd> must be requested jointly with <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Gives the JavaScript configuration variables specific to the page.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Gives the JavaScript configuration variables specific to the page as a JSON string.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "The XML parse tree of the input.",
+ "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
+ "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expand the wikitext <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+
+ "apihelp-feedcontributions-summary": "Returns a user contributions feed.",
+ "apihelp-feedcontributions-param-feedformat": "The format of the feed.",
+ "apihelp-feedcontributions-param-user": "What users to get the contributions for.",
+ "apihelp-feedcontributions-param-namespace": "Which namespace to filter the contributions by.",
+ "apihelp-feedcontributions-param-year": "From year (and earlier).",
+ "apihelp-feedcontributions-param-month": "From month (and earlier).",
+ "apihelp-feedcontributions-param-tagfilter": "Filter contributions that have these tags.",
+ "apihelp-feedcontributions-param-deletedonly": "Show only deleted contributions.",
+ "apihelp-feedcontributions-param-toponly": "Only show edits that are the latest revisions.",
+ "apihelp-feedcontributions-param-newonly": "Only show edits that are page creations.",
+ "apihelp-feedcontributions-param-hideminor": "Hide minor edits.",
+ "apihelp-feedcontributions-param-showsizediff": "Show the size difference between revisions.",
+ "apihelp-feedcontributions-example-simple": "Return contributions for user <kbd>Example</kbd>.",
+
+ "apihelp-feedrecentchanges-summary": "Returns a recent changes feed.",
+ "apihelp-feedrecentchanges-param-feedformat": "The format of the feed.",
+ "apihelp-feedrecentchanges-param-namespace": "Namespace to limit the results to.",
+ "apihelp-feedrecentchanges-param-invert": "All namespaces but the selected one.",
+ "apihelp-feedrecentchanges-param-associated": "Include associated (talk or main) namespace.",
+ "apihelp-feedrecentchanges-param-days": "Days to limit the results to.",
+ "apihelp-feedrecentchanges-param-limit": "Maximum number of results to return.",
+ "apihelp-feedrecentchanges-param-from": "Show changes since then.",
+ "apihelp-feedrecentchanges-param-hideminor": "Hide minor changes.",
+ "apihelp-feedrecentchanges-param-hidebots": "Hide changes made by bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Hide changes made by anonymous users.",
+ "apihelp-feedrecentchanges-param-hideliu": "Hide changes made by registered users.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Hide patrolled changes.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Hide changes made by the current user.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Hide category membership changes.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filter by tag.",
+ "apihelp-feedrecentchanges-param-target": "Show only changes on pages linked from this page.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Show changes on pages linked to the selected page instead.",
+ "apihelp-feedrecentchanges-example-simple": "Show recent changes.",
+ "apihelp-feedrecentchanges-example-30days": "Show recent changes for 30 days.",
+
+ "apihelp-feedwatchlist-summary": "Returns a watchlist feed.",
+ "apihelp-feedwatchlist-param-feedformat": "The format of the feed.",
+ "apihelp-feedwatchlist-param-hours": "List pages modified within this many hours from now.",
+ "apihelp-feedwatchlist-param-linktosections": "Link directly to changed sections if possible.",
+ "apihelp-feedwatchlist-example-default": "Show the watchlist feed.",
+ "apihelp-feedwatchlist-example-all6hrs": "Show all changes to watched pages in the past 6 hours.",
+
+ "apihelp-filerevert-summary": "Revert a file to an old version.",
+ "apihelp-filerevert-param-filename": "Target filename, without the File: prefix.",
+ "apihelp-filerevert-param-comment": "Upload comment.",
+ "apihelp-filerevert-param-archivename": "Archive name of the revision to revert to.",
+ "apihelp-filerevert-example-revert": "Revert <kbd>Wiki.png</kbd> to the version of <kbd>2011-03-05T15:27:40Z</kbd>.",
+
+ "apihelp-help-summary": "Display help for the specified modules.",
+ "apihelp-help-param-modules": "Modules to display help for (values of the <var>action</var> and <var>format</var> parameters, or <kbd>main</kbd>). Can specify submodules with a <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Include help for submodules of the named module.",
+ "apihelp-help-param-recursivesubmodules": "Include help for submodules recursively.",
+ "apihelp-help-param-helpformat": "Format of the help output.",
+ "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
+ "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
+ "apihelp-help-example-main": "Help for the main module.",
+ "apihelp-help-example-submodules": "Help for <kbd>action=query</kbd> and all its submodules.",
+ "apihelp-help-example-recursive": "All help in one page.",
+ "apihelp-help-example-help": "Help for the help module itself.",
+ "apihelp-help-example-query": "Help for two query submodules.",
+
+ "apihelp-imagerotate-summary": "Rotate one or more images.",
+ "apihelp-imagerotate-param-rotation": "Degrees to rotate image clockwise.",
+ "apihelp-imagerotate-param-tags": "Tags to apply to the entry in the upload log.",
+ "apihelp-imagerotate-example-simple": "Rotate <kbd>File:Example.png</kbd> by <kbd>90</kbd> degrees.",
+ "apihelp-imagerotate-example-generator": "Rotate all images in <kbd>Category:Flip</kbd> by <kbd>180</kbd> degrees.",
+
+ "apihelp-import-summary": "Import a page from another wiki, or from an XML file.",
+ "apihelp-import-extended-description": "Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the <var>xml</var> parameter.",
+ "apihelp-import-param-summary": "Log entry import summary.",
+ "apihelp-import-param-xml": "Uploaded XML file.",
+ "apihelp-import-param-interwikiprefix": "For uploaded imports: interwiki prefix to apply to unknown user names (and known users if <var>$1assignknownusers</var> is set).",
+ "apihelp-import-param-assignknownusers": "Assign edits to local users where the named user exists locally.",
+ "apihelp-import-param-interwikisource": "For interwiki imports: wiki to import from.",
+ "apihelp-import-param-interwikipage": "For interwiki imports: page to import.",
+ "apihelp-import-param-fullhistory": "For interwiki imports: import the full history, not just the current version.",
+ "apihelp-import-param-templates": "For interwiki imports: import all included templates as well.",
+ "apihelp-import-param-namespace": "Import to this namespace. Cannot be used together with <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Import as subpage of this page. Cannot be used together with <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Change tags to apply to the entry in the import log and to the null revision on the imported pages.",
+ "apihelp-import-example-import": "Import [[meta:Help:ParserFunctions]] to namespace 100 with full history.",
+
+ "apihelp-linkaccount-summary": "Link an account from a third-party provider to the current user.",
+ "apihelp-linkaccount-example-link": "Start the process of linking to an account from <kbd>Example</kbd>.",
+
+ "apihelp-login-summary": "Log in and get authentication cookies.",
+ "apihelp-login-extended-description": "This action should only be used in combination with [[Special:BotPasswords]]; use for main-account login is deprecated and may fail without warning. To safely log in to the main account, use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "This action is deprecated and may fail without warning. To safely log in, use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "User name.",
+ "apihelp-login-param-password": "Password.",
+ "apihelp-login-param-domain": "Domain (optional).",
+ "apihelp-login-param-token": "Login token obtained in first request.",
+ "apihelp-login-example-gettoken": "Retrieve a login token.",
+ "apihelp-login-example-login": "Log in.",
+
+ "apihelp-logout-summary": "Log out and clear session data.",
+ "apihelp-logout-example-logout": "Log the current user out.",
+
+ "apihelp-managetags-summary": "Perform management tasks relating to change tags.",
+ "apihelp-managetags-param-operation": "Which operation to perform:\n;create:Create a new change tag for manual use.\n;delete:Remove a change tag from the database, including removing the tag from all revisions, recent change entries and log entries on which it is used.\n;activate:Activate a change tag, allowing users to apply it manually.\n;deactivate:Deactivate a change tag, preventing users from applying it manually.",
+ "apihelp-managetags-param-tag": "Tag to create, delete, activate or deactivate. For tag creation, the tag must not exist. For tag deletion, the tag must exist. For tag activation, the tag must exist and not be in use by an extension. For tag deactivation, the tag must be currently active and manually defined.",
+ "apihelp-managetags-param-reason": "An optional reason for creating, deleting, activating or deactivating the tag.",
+ "apihelp-managetags-param-ignorewarnings": "Whether to ignore any warnings that are issued during the operation.",
+ "apihelp-managetags-param-tags": "Change tags to apply to the entry in the tag management log.",
+ "apihelp-managetags-example-create": "Create a tag named <kbd>spam</kbd> with the reason <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Delete the <kbd>vandlaism</kbd> tag with the reason <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Activate a tag named <kbd>spam</kbd> with the reason <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Deactivate a tag named <kbd>spam</kbd> with the reason <kbd>No longer required</kbd>",
+
+ "apihelp-mergehistory-summary": "Merge page histories.",
+ "apihelp-mergehistory-param-from": "Title of the page from which history will be merged. Cannot be used together with <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "Page ID of the page from which history will be merged. Cannot be used together with <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Title of the page to which history will be merged. Cannot be used together with <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "Page ID of the page to which history will be merged. Cannot be used together with <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Timestamp up to which revisions will be moved from the source page's history to the destination page's history. If omitted, the entire page history of the source page will be merged into the destination page.",
+ "apihelp-mergehistory-param-reason": "Reason for the history merge.",
+ "apihelp-mergehistory-example-merge": "Merge the entire history of <kbd>Oldpage</kbd> into <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Merge the page revisions of <kbd>Oldpage</kbd> dating up to <kbd>2015-12-31T04:37:41Z</kbd> into <kbd>Newpage</kbd>.",
+
+ "apihelp-move-summary": "Move a page.",
+ "apihelp-move-param-from": "Title of the page to rename. Cannot be used together with <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Page ID of the page to rename. Cannot be used together with <var>$1from</var>.",
+ "apihelp-move-param-to": "Title to rename the page to.",
+ "apihelp-move-param-reason": "Reason for the rename.",
+ "apihelp-move-param-movetalk": "Rename the talk page, if it exists.",
+ "apihelp-move-param-movesubpages": "Rename subpages, if applicable.",
+ "apihelp-move-param-noredirect": "Don't create a redirect.",
+ "apihelp-move-param-watch": "Add the page and the redirect to the current user's watchlist.",
+ "apihelp-move-param-unwatch": "Remove the page and the redirect from the current user's watchlist.",
+ "apihelp-move-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-move-param-ignorewarnings": "Ignore any warnings.",
+ "apihelp-move-param-tags": "Change tags to apply to the entry in the move log and to the null revision on the destination page.",
+ "apihelp-move-example-move": "Move <kbd>Badtitle</kbd> to <kbd>Goodtitle</kbd> without leaving a redirect.",
+
+ "apihelp-opensearch-summary": "Search the wiki using the OpenSearch protocol.",
+ "apihelp-opensearch-param-search": "Search string.",
+ "apihelp-opensearch-param-limit": "Maximum number of results to return.",
+ "apihelp-opensearch-param-namespace": "Namespaces to search. Ignored if <var>$1search</var> begins with a valid namespace prefix.",
+ "apihelp-opensearch-param-suggest": "Do nothing if <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> is false.",
+ "apihelp-opensearch-param-redirects": "How to handle redirects:\n;return:Return the redirect itself.\n;resolve:Return the target page. May return fewer than $1limit results.\nFor historical reasons, the default is \"return\" for $1format=json and \"resolve\" for other formats.",
+ "apihelp-opensearch-param-format": "The format of the output.",
+ "apihelp-opensearch-param-warningsaserror": "If warnings are raised with <kbd>format=json</kbd>, return an API error instead of ignoring them.",
+ "apihelp-opensearch-example-te": "Find pages beginning with <kbd>Te</kbd>.",
+
+ "apihelp-options-summary": "Change preferences of the current user.",
+ "apihelp-options-extended-description": "Only options which are registered in core or in one of installed extensions, or options with keys prefixed with <code>userjs-</code> (intended to be used by user scripts), can be set.",
+ "apihelp-options-param-reset": "Resets preferences to the site defaults.",
+ "apihelp-options-param-resetkinds": "List of types of options to reset when the <var>$1reset</var> option is set.",
+ "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value. If any value passed contains the pipe character (<kbd>|</kbd>), use the [[Special:ApiHelp/main#main/datatypes|alternative multiple-value separator]] for correct operation.",
+ "apihelp-options-param-optionname": "The name of the option that should be set to the value given by <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "The value for the option specified by <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Reset all preferences.",
+ "apihelp-options-example-change": "Change <kbd>skin</kbd> and <kbd>hideminor</kbd> preferences.",
+ "apihelp-options-example-complex": "Reset all preferences, then set <kbd>skin</kbd> and <kbd>nickname</kbd>.",
+
+ "apihelp-paraminfo-summary": "Obtain information about API modules.",
+ "apihelp-paraminfo-param-modules": "List of module names (values of the <var>action</var> and <var>format</var> parameters, or <kbd>main</kbd>). Can specify submodules with a <kbd>+</kbd>, or all submodules with <kbd>+*</kbd>, or all submodules recursively with <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Format of help strings.",
+ "apihelp-paraminfo-param-querymodules": "List of query module names (value of <var>prop</var>, <var>meta</var> or <var>list</var> parameter). Use <kbd>$1modules=query+foo</kbd> instead of <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Get information about the main (top-level) module as well. Use <kbd>$1modules=main</kbd> instead.",
+ "apihelp-paraminfo-param-pagesetmodule": "Get information about the pageset module (providing titles= and friends) as well.",
+ "apihelp-paraminfo-param-formatmodules": "List of format module names (value of <var>format</var> parameter). Use <var>$1modules</var> instead.",
+ "apihelp-paraminfo-example-1": "Show info for <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Show info for all submodules of <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+
+ "apihelp-parse-summary": "Parses content and returns parser output.",
+ "apihelp-parse-extended-description": "See the various prop-modules of <kbd>[[Special:ApiHelp/query|action=query]]</kbd> to get information from the current version of a page.\n\nThere are several ways to specify the text to parse:\n# Specify a page or revision, using <var>$1page</var>, <var>$1pageid</var>, or <var>$1oldid</var>.\n# Specify content explicitly, using <var>$1text</var>, <var>$1title</var>, <var>$1revid</var>, and <var>$1contentmodel</var>.\n# Specify only a summary to parse. <var>$1prop</var> should be given an empty value.",
+ "apihelp-parse-param-title": "Title of page the text belongs to. If omitted, <var>$1contentmodel</var> must be specified, and [[API]] will be used as the title.",
+ "apihelp-parse-param-text": "Text to parse. Use <var>$1title</var> or <var>$1contentmodel</var> to control the content model.",
+ "apihelp-parse-param-revid": "Revision ID, for <code><nowiki>{{REVISIONID}}</nowiki></code> and similar variables.",
+ "apihelp-parse-param-summary": "Summary to parse.",
+ "apihelp-parse-param-page": "Parse the content of this page. Cannot be used together with <var>$1text</var> and <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Parse the content of this page. Overrides <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "If <var>$1page</var> or <var>$1pageid</var> is set to a redirect, resolve it.",
+ "apihelp-parse-param-oldid": "Parse the content of this revision. Overrides <var>$1page</var> and <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Which pieces of information to get:",
+ "apihelp-parse-paramvalue-prop-text": "Gives the parsed text of the wikitext.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Gives the language links in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-categories": "Gives the categories in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Gives the HTML version of the categories.",
+ "apihelp-parse-paramvalue-prop-links": "Gives the internal links in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-templates": "Gives the templates in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-images": "Gives the images in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Gives the external links in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-sections": "Gives the sections in the parsed wikitext.",
+ "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 <code>&lt;head&gt;</code> of the page.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Gives parsed <code>&lt;head&gt;</code> of the page.",
+ "apihelp-parse-paramvalue-prop-modules": "Gives the ResourceLoader modules used on the page. To load, use <code>mw.loader.using()</code>. Either <kbd>jsconfigvars</kbd> or <kbd>encodedjsconfigvars</kbd> must be requested jointly with <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Gives the JavaScript configuration variables specific to the page. To apply, use <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Gives the JavaScript configuration variables specific to the page as a JSON string.",
+ "apihelp-parse-paramvalue-prop-indicators": "Gives the HTML of page status indicators used on the page.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Gives interwiki links in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Gives the original wikitext that was parsed.",
+ "apihelp-parse-paramvalue-prop-properties": "Gives various properties defined in the parsed wikitext.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablelimitreport</var> is set.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablelimitreport</var> is set.",
+ "apihelp-parse-paramvalue-prop-parsetree": "The XML parse tree of revision content (requires content model <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Gives the warnings that occurred while parsing content.",
+ "apihelp-parse-param-wrapoutputclass": "CSS class to use to wrap the parser output.",
+ "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
+ "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it. Returns the same wikitext, after a PST has been applied. Only valid when used with <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Only parse the content of this section number.\n\nWhen <kbd>new</kbd>, parse <var>$1text</var> and <var>$1sectiontitle</var> as if adding a new section to the page.\n\n<kbd>new</kbd> is allowed only when specifying <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "New section title when <var>section</var> is <kbd>new</kbd>.\n\nUnlike page editing, this does not fall back to <var>summary</var> when omitted or empty.",
+ "apihelp-parse-param-disablelimitreport": "Omit the limit report (\"NewPP limit report\") from the parser output.",
+ "apihelp-parse-param-disablepp": "Use <var>$1disablelimitreport</var> instead.",
+ "apihelp-parse-param-disableeditsection": "Omit edit section links from the parser output.",
+ "apihelp-parse-param-disabletidy": "Do not run HTML cleanup (e.g. tidy) on the parser output.",
+ "apihelp-parse-param-disablestylededuplication": "Do not deduplicate inline stylesheets in the parser output.",
+ "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model <code>$1</code>; replaced by <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Parse in preview mode.",
+ "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
+ "apihelp-parse-param-disabletoc": "Omit table of contents in output.",
+ "apihelp-parse-param-useskin": "Apply the selected skin to the parser output. May affect the following properties: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-param-contentformat": "Content serialization format used for the input text. Only valid when used with $1text.",
+ "apihelp-parse-param-contentmodel": "Content model of the input text. If omitted, $1title must be specified, and default will be the model of the specified title. Only valid when used with $1text.",
+ "apihelp-parse-example-page": "Parse a page.",
+ "apihelp-parse-example-text": "Parse wikitext.",
+ "apihelp-parse-example-texttitle": "Parse wikitext, specifying the page title.",
+ "apihelp-parse-example-summary": "Parse a summary.",
+
+ "apihelp-patrol-summary": "Patrol a page or revision.",
+ "apihelp-patrol-param-rcid": "Recentchanges ID to patrol.",
+ "apihelp-patrol-param-revid": "Revision ID to patrol.",
+ "apihelp-patrol-param-tags": "Change tags to apply to the entry in the patrol log.",
+ "apihelp-patrol-example-rcid": "Patrol a recent change.",
+ "apihelp-patrol-example-revid": "Patrol a revision.",
+
+ "apihelp-protect-summary": "Change the protection level of a page.",
+ "apihelp-protect-param-title": "Title of the page to (un)protect. Cannot be used together with $1pageid.",
+ "apihelp-protect-param-pageid": "ID of the page to (un)protect. Cannot be used together with $1title.",
+ "apihelp-protect-param-protections": "List of protection levels, formatted <kbd>action=level</kbd> (e.g. <kbd>edit=sysop</kbd>). A level of <kbd>all</kbd> means everyone is allowed to take the action, i.e. no restriction.\n\n<strong>Note:</strong> Any actions not listed will have restrictions removed.",
+ "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it'll be used for all protections. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, or <kbd>never</kbd>, for a never-expiring protection.",
+ "apihelp-protect-param-reason": "Reason for (un)protecting.",
+ "apihelp-protect-param-tags": "Change tags to apply to the entry in the protection log.",
+ "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect transcluded templates and images used in this page). Ignored if none of the given protection levels support cascading.",
+ "apihelp-protect-param-watch": "If set, add the page being (un)protected to the current user's watchlist.",
+ "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-protect-example-protect": "Protect a page.",
+ "apihelp-protect-example-unprotect": "Unprotect a page by setting restrictions to <kbd>all</kbd> (i.e. everyone is allowed to take the action).",
+ "apihelp-protect-example-unprotect2": "Unprotect a page by setting no restrictions.",
+
+ "apihelp-purge-summary": "Purge the cache for the given titles.",
+ "apihelp-purge-param-forcelinkupdate": "Update the links tables.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Update the links table, and update the links tables for any page that uses this page as a template.",
+ "apihelp-purge-example-simple": "Purge the <kbd>Main Page</kbd> and the <kbd>API</kbd> page.",
+ "apihelp-purge-example-generator": "Purge the first 10 pages in the main namespace.",
+
+ "apihelp-query-summary": "Fetch data from and about MediaWiki.",
+ "apihelp-query-extended-description": "All data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.",
+ "apihelp-query-param-prop": "Which properties to get for the queried pages.",
+ "apihelp-query-param-list": "Which lists to get.",
+ "apihelp-query-param-meta": "Which metadata to get.",
+ "apihelp-query-param-indexpageids": "Include an additional pageids section listing all returned page IDs.",
+ "apihelp-query-param-export": "Export the current revisions of all given or generated pages.",
+ "apihelp-query-param-exportnowrap": "Return the export XML without wrapping it in an XML result (same format as [[Special:Export]]). Can only be used with $1export.",
+ "apihelp-query-param-iwurl": "Whether to get the full URL if the title is an interwiki link.",
+ "apihelp-query-param-rawcontinue": "Return raw <samp>query-continue</samp> data for continuation.",
+ "apihelp-query-example-revisions": "Fetch [[Special:ApiHelp/query+siteinfo|site info]] and [[Special:ApiHelp/query+revisions|revisions]] of <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Fetch revisions of pages beginning with <kbd>API/</kbd>.",
+
+ "apihelp-query+allcategories-summary": "Enumerate all categories.",
+ "apihelp-query+allcategories-param-from": "The category to start enumerating from.",
+ "apihelp-query+allcategories-param-to": "The category to stop enumerating at.",
+ "apihelp-query+allcategories-param-prefix": "Search for all category titles that begin with this value.",
+ "apihelp-query+allcategories-param-dir": "Direction to sort in.",
+ "apihelp-query+allcategories-param-min": "Only return categories with at least this many members.",
+ "apihelp-query+allcategories-param-max": "Only return categories with at most this many members.",
+ "apihelp-query+allcategories-param-limit": "How many categories to return.",
+ "apihelp-query+allcategories-param-prop": "Which properties to get:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Adds number of pages in the category.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Tags categories that are hidden with <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "List categories with information on the number of pages in each.",
+ "apihelp-query+allcategories-example-generator": "Retrieve info about the category page itself for categories beginning <kbd>List</kbd>.",
+
+ "apihelp-query+alldeletedrevisions-summary": "List all deleted revisions by a user or in a namespace.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "May only be used with <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Cannot be used with <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+alldeletedrevisions-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+alldeletedrevisions-param-from": "Start listing at this title.",
+ "apihelp-query+alldeletedrevisions-param-to": "Stop listing at this title.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Search for all page titles that begin with this value.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+alldeletedrevisions-param-user": "Only list revisions by this user.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Don't list revisions by this user.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Only list pages in this namespace.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Note:</strong> Due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]], using <var>$1user</var> and <var>$1namespace</var> together may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "When being used as a generator, generate titles rather than revision IDs.",
+ "apihelp-query+alldeletedrevisions-example-user": "List the last 50 deleted contributions by user <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "List the first 50 deleted revisions in the main namespace.",
+
+ "apihelp-query+allfileusages-summary": "List all file usages, including non-existing.",
+ "apihelp-query+allfileusages-param-from": "The title of the file to start enumerating from.",
+ "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
+ "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
+ "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Adds the page IDs of the using pages (cannot be used with $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Adds the title of the file.",
+ "apihelp-query+allfileusages-param-limit": "How many total items to return.",
+ "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
+ "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "List unique file titles.",
+ "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones.",
+ "apihelp-query+allfileusages-example-generator": "Gets pages containing the files.",
+
+ "apihelp-query+allimages-summary": "Enumerate all images sequentially.",
+ "apihelp-query+allimages-param-sort": "Property to sort by.",
+ "apihelp-query+allimages-param-dir": "The direction in which to list.",
+ "apihelp-query+allimages-param-from": "The image title to start enumerating from. Can only be used with $1sort=name.",
+ "apihelp-query+allimages-param-to": "The image title to stop enumerating at. Can only be used with $1sort=name.",
+ "apihelp-query+allimages-param-start": "The timestamp to start enumerating from. Can only be used with $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "The timestamp to end enumerating. Can only be used with $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Search for all image titles that begin with this value. Can only be used with $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Limit to images with at least this many bytes.",
+ "apihelp-query+allimages-param-maxsize": "Limit to images with at most this many bytes.",
+ "apihelp-query+allimages-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+ "apihelp-query+allimages-param-user": "Only return files uploaded by this user. Can only be used with $1sort=timestamp. Cannot be used together with $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "How to filter files uploaded by bots. Can only be used with $1sort=timestamp. Cannot be used together with $1user.",
+ "apihelp-query+allimages-param-mime": "What MIME types to search for, e.g. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "How many images in total to return.",
+ "apihelp-query+allimages-example-B": "Show a list of files starting at the letter <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Show a list of recently uploaded files, similar to [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Show a list of files with MIME type <kbd>image/png</kbd> or <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Show info about 4 files starting at the letter <kbd>T</kbd>.",
+
+ "apihelp-query+alllinks-summary": "Enumerate all links that point to a given namespace.",
+ "apihelp-query+alllinks-param-from": "The title of the link to start enumerating from.",
+ "apihelp-query+alllinks-param-to": "The title of the link to stop enumerating at.",
+ "apihelp-query+alllinks-param-prefix": "Search for all linked titles that begin with this value.",
+ "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with <kbd>$1prop=ids</kbd>.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+alllinks-param-prop": "Which pieces of information to include:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Adds the page ID of the linking page (cannot be used with <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Adds the title of the link.",
+ "apihelp-query+alllinks-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+alllinks-param-limit": "How many total items to return.",
+ "apihelp-query+alllinks-param-dir": "The direction in which to list.",
+ "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "List unique linked titles.",
+ "apihelp-query+alllinks-example-unique-generator": "Gets all linked titles, marking the missing ones.",
+ "apihelp-query+alllinks-example-generator": "Gets pages containing the links.",
+
+ "apihelp-query+allmessages-summary": "Return messages from this site.",
+ "apihelp-query+allmessages-param-messages": "Which messages to output. <kbd>*</kbd> (default) means all messages.",
+ "apihelp-query+allmessages-param-prop": "Which properties to get.",
+ "apihelp-query+allmessages-param-enableparser": "Set to enable parser, will preprocess the wikitext of message (substitute magic words, handle templates, etc.).",
+ "apihelp-query+allmessages-param-nocontent": "If set, do not include the content of the messages in the output.",
+ "apihelp-query+allmessages-param-includelocal": "Also include local messages, i.e. messages that don't exist in the software but do exist as in the {{ns:MediaWiki}} namespace.\nThis lists all {{ns:MediaWiki}}-namespace pages, so it will also list those that aren't really messages such as [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Arguments to be substituted into message.",
+ "apihelp-query+allmessages-param-filter": "Return only messages with names that contain this string.",
+ "apihelp-query+allmessages-param-customised": "Return only messages in this customisation state.",
+ "apihelp-query+allmessages-param-lang": "Return messages in this language.",
+ "apihelp-query+allmessages-param-from": "Return messages starting at this message.",
+ "apihelp-query+allmessages-param-to": "Return messages ending at this message.",
+ "apihelp-query+allmessages-param-title": "Page name to use as context when parsing message (for $1enableparser option).",
+ "apihelp-query+allmessages-param-prefix": "Return messages with this prefix.",
+ "apihelp-query+allmessages-example-ipb": "Show messages starting with <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Show messages <kbd>august</kbd> and <kbd>mainpage</kbd> in German.",
+
+ "apihelp-query+allpages-summary": "Enumerate all pages sequentially in a given namespace.",
+ "apihelp-query+allpages-param-from": "The page title to start enumerating from.",
+ "apihelp-query+allpages-param-to": "The page title to stop enumerating at.",
+ "apihelp-query+allpages-param-prefix": "Search for all page titles that begin with this value.",
+ "apihelp-query+allpages-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+allpages-param-filterredir": "Which pages to list.",
+ "apihelp-query+allpages-param-minsize": "Limit to pages with at least this many bytes.",
+ "apihelp-query+allpages-param-maxsize": "Limit to pages with at most this many bytes.",
+ "apihelp-query+allpages-param-prtype": "Limit to protected pages only.",
+ "apihelp-query+allpages-param-prlevel": "Filter protections based on protection level (must be used with $1prtype= parameter).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filter protections based on cascadingness (ignored when $1prtype isn't set).",
+ "apihelp-query+allpages-param-limit": "How many total pages to return.",
+ "apihelp-query+allpages-param-dir": "The direction in which to list.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filter based on whether a page has langlinks. Note that this may not consider langlinks added by extensions.",
+ "apihelp-query+allpages-param-prexpiry": "Which protection expiry to filter the page on:\n;indefinite:Get only pages with indefinite protection expiry.\n;definite:Get only pages with a definite (specific) protection expiry.\n;all:Get pages with any protections expiry.",
+ "apihelp-query+allpages-example-B": "Show a list of pages starting at the letter <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Show info about 4 pages starting at the letter <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Show content of first 2 non-redirect pages beginning at <kbd>Re</kbd>.",
+
+ "apihelp-query+allredirects-summary": "List all redirects to a namespace.",
+ "apihelp-query+allredirects-param-from": "The title of the redirect to start enumerating from.",
+ "apihelp-query+allredirects-param-to": "The title of the redirect to stop enumerating at.",
+ "apihelp-query+allredirects-param-prefix": "Search for all target pages that begin with this value.",
+ "apihelp-query+allredirects-param-unique": "Only show distinct target pages. Cannot be used with $1prop=ids|fragment|interwiki.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+allredirects-param-prop": "Which pieces of information to include:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Adds the page ID of the redirecting page (cannot be used with <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Adds the title of the redirect.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Adds the fragment from the redirect, if any (cannot be used with <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Adds the interwiki prefix from the redirect, if any (cannot be used with <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+allredirects-param-limit": "How many total items to return.",
+ "apihelp-query+allredirects-param-dir": "The direction in which to list.",
+ "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "List unique target pages.",
+ "apihelp-query+allredirects-example-unique-generator": "Gets all target pages, marking the missing ones.",
+ "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects.",
+
+ "apihelp-query+allrevisions-summary": "List all revisions.",
+ "apihelp-query+allrevisions-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+allrevisions-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+allrevisions-param-user": "Only list revisions by this user.",
+ "apihelp-query+allrevisions-param-excludeuser": "Don't list revisions by this user.",
+ "apihelp-query+allrevisions-param-namespace": "Only list pages in this namespace.",
+ "apihelp-query+allrevisions-param-generatetitles": "When being used as a generator, generate titles rather than revision IDs.",
+ "apihelp-query+allrevisions-example-user": "List the last 50 contributions by user <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "List the first 50 revisions in the main namespace.",
+
+ "apihelp-query+mystashedfiles-summary": "Get a list of files in the current user's upload stash.",
+ "apihelp-query+mystashedfiles-param-prop": "Which properties to fetch for the files.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Fetch the file size and image dimensions.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Fetch the file's MIME type and media type.",
+ "apihelp-query+mystashedfiles-param-limit": "How many files to get.",
+ "apihelp-query+mystashedfiles-example-simple": "Get the filekey, file size, and pixel size of files in the current user's upload stash.",
+
+ "apihelp-query+alltransclusions-summary": "List all transclusions (pages embedded using &#123;&#123;x&#125;&#125;), including non-existing.",
+ "apihelp-query+alltransclusions-param-from": "The title of the transclusion to start enumerating from.",
+ "apihelp-query+alltransclusions-param-to": "The title of the transclusion to stop enumerating at.",
+ "apihelp-query+alltransclusions-param-prefix": "Search for all transcluded titles that begin with this value.",
+ "apihelp-query+alltransclusions-param-unique": "Only show distinct transcluded titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Adds the page ID of the transcluding page (cannot be used with $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Adds the title of the transclusion.",
+ "apihelp-query+alltransclusions-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+alltransclusions-param-limit": "How many total items to return.",
+ "apihelp-query+alltransclusions-param-dir": "The direction in which to list.",
+ "apihelp-query+alltransclusions-example-B": "List transcluded titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Gets all transcluded titles, marking the missing ones.",
+ "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions.",
+
+ "apihelp-query+allusers-summary": "Enumerate all registered users.",
+ "apihelp-query+allusers-param-from": "The user name to start enumerating from.",
+ "apihelp-query+allusers-param-to": "The user name to stop enumerating at.",
+ "apihelp-query+allusers-param-prefix": "Search for all users that begin with this value.",
+ "apihelp-query+allusers-param-dir": "Direction to sort in.",
+ "apihelp-query+allusers-param-group": "Only include users in the given groups.",
+ "apihelp-query+allusers-param-excludegroup": "Exclude users in the given groups.",
+ "apihelp-query+allusers-param-rights": "Only include users with the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+allusers-param-prop": "Which pieces of information to include:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Adds the information about a current block on the user.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Lists groups that the user is in. This uses more server resources and may return fewer results than the limit.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lists all the groups the user is automatically in.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Lists rights that the user has.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Adds the edit count of the user.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Adds the timestamp of when the user registered if available (may be blank).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Adds the central IDs and attachment status for the user.",
+ "apihelp-query+allusers-param-limit": "How many total user names to return.",
+ "apihelp-query+allusers-param-witheditsonly": "Only list users who have made edits.",
+ "apihelp-query+allusers-param-activeusers": "Only list users active in the last $1 {{PLURAL:$1|day|days}}.",
+ "apihelp-query+allusers-param-attachedwiki": "With <kbd>$1prop=centralids</kbd>, also indicate whether the user is attached with the wiki identified by this ID.",
+ "apihelp-query+allusers-example-Y": "List users starting at <kbd>Y</kbd>.",
+
+ "apihelp-query+authmanagerinfo-summary": "Retrieve information about the current authentication status.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Test whether the user's current authentication status is sufficient for the specified security-sensitive operation.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Fetch information about the authentication requests needed for the specified authentication action.",
+ "apihelp-query+authmanagerinfo-example-login": "Fetch the requests that may be used when beginning a login.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Fetch the requests that may be used when beginning a login, with form fields merged.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Test whether authentication is sufficient for action <kbd>foo</kbd>.",
+
+ "apihelp-query+backlinks-summary": "Find all pages that link to the given page.",
+ "apihelp-query+backlinks-param-title": "Title to search. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "Page ID to search. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+backlinks-param-dir": "The direction in which to list.",
+ "apihelp-query+backlinks-param-filterredir": "How to filter for redirects. If set to <kbd>nonredirects</kbd> when <var>$1redirect</var> is enabled, this is only applied to the second level.",
+ "apihelp-query+backlinks-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, the limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
+ "apihelp-query+backlinks-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+ "apihelp-query+backlinks-example-simple": "Show links to <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Get information about pages linking to <kbd>Main page</kbd>.",
+
+ "apihelp-query+blocks-summary": "List all blocked users and IP addresses.",
+ "apihelp-query+blocks-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+blocks-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+blocks-param-ids": "List of block IDs to list (optional).",
+ "apihelp-query+blocks-param-users": "List of users to search for (optional).",
+ "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP address or CIDR range, including range blocks.\nCannot be used together with <var>$3users</var>. CIDR ranges broader than IPv4/$1 or IPv6/$2 are not accepted.",
+ "apihelp-query+blocks-param-limit": "The maximum number of blocks to list.",
+ "apihelp-query+blocks-param-prop": "Which properties to get:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Adds the ID of the block.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Adds the username of the blocked user.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Adds the user ID of the blocked user.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Adds the username of the blocking user.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Adds the user ID of the blocking user.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Adds the timestamp of when the block was given.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Adds the timestamp of when the block expires.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Adds the reason given for the block.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Adds the range of IP addresses affected by the block.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Tags the ban with (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Show only items that meet these criteria.\nFor example, to see only indefinite blocks on IP addresses, set <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "List blocks.",
+ "apihelp-query+blocks-example-users": "List blocks of users <kbd>Alice</kbd> and <kbd>Bob</kbd>.",
+
+ "apihelp-query+categories-summary": "List all categories the pages belong to.",
+ "apihelp-query+categories-param-prop": "Which additional properties to get for each category:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Adds timestamp of when the category was added.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Tags categories that are hidden with <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Which kind of categories to show.",
+ "apihelp-query+categories-param-limit": "How many categories to return.",
+ "apihelp-query+categories-param-categories": "Only list these categories. Useful for checking whether a certain page is in a certain category.",
+ "apihelp-query+categories-param-dir": "The direction in which to list.",
+ "apihelp-query+categories-example-simple": "Get a list of categories the page <kbd>Albert Einstein</kbd> belongs to.",
+ "apihelp-query+categories-example-generator": "Get information about all categories used in the page <kbd>Albert Einstein</kbd>.",
+
+ "apihelp-query+categoryinfo-summary": "Returns information about the given categories.",
+ "apihelp-query+categoryinfo-example-simple": "Get information about <kbd>Category:Foo</kbd> and <kbd>Category:Bar</kbd>.",
+
+ "apihelp-query+categorymembers-summary": "List all pages in a given category.",
+ "apihelp-query+categorymembers-param-title": "Which category to enumerate (required). Must include the <kbd>{{ns:category}}:</kbd> prefix. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Which pieces of information to include:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Adds the page ID.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Adds the sortkey used for sorting in the category (hexadecimal string).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Adds the type that the page has been categorised as (<samp>page</samp>, <samp>subcat</samp> or <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Adds the timestamp of when the page was included.",
+ "apihelp-query+categorymembers-param-namespace": "Only include pages in these namespaces. Note that <kbd>$1type=subcat</kbd> or <kbd>$1type=file</kbd> may be used instead of <kbd>$1namespace=14</kbd> or <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Which type of category members to include. Ignored when <kbd>$1sort=timestamp</kbd> is set.",
+ "apihelp-query+categorymembers-param-limit": "The maximum number of pages to return.",
+ "apihelp-query+categorymembers-param-sort": "Property to sort by.",
+ "apihelp-query+categorymembers-param-dir": "In which direction to sort.",
+ "apihelp-query+categorymembers-param-start": "Timestamp to start listing from. Can only be used with <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Timestamp to end listing at. Can only be used with <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Sortkey to start listing from, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing at, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Sortkey prefix to start listing from. Can only be used with <kbd>$1sort=sortkey</kbd>. Overrides <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix to end listing <strong>before</strong> (not <strong>at</strong>; if this value occurs it will not be included!). Can only be used with $1sort=sortkey. Overrides $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Use $1starthexsortkey instead.",
+ "apihelp-query+categorymembers-param-endsortkey": "Use $1endhexsortkey instead.",
+ "apihelp-query+categorymembers-example-simple": "Get first 10 pages in <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Get page info about first 10 pages in <kbd>Category:Physics</kbd>.",
+
+ "apihelp-query+contributors-summary": "Get the list of logged-in contributors and the count of anonymous contributors to a page.",
+ "apihelp-query+contributors-param-group": "Only include users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-excludegroup": "Exclude users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-rights": "Only include users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-excluderights": "Exclude users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-limit": "How many contributors to return.",
+ "apihelp-query+contributors-example-simple": "Show contributors to the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+deletedrevisions-summary": "Get deleted revision information.",
+ "apihelp-query+deletedrevisions-extended-description": "May be used in several ways:\n# Get deleted revisions for a set of pages, by setting titles or pageids. Ordered by title and timestamp.\n# Get data about a set of deleted revisions by setting their IDs with revids. Ordered by revision ID.",
+ "apihelp-query+deletedrevisions-param-start": "The timestamp to start enumerating from. Ignored when processing a list of revision IDs.",
+ "apihelp-query+deletedrevisions-param-end": "The timestamp to stop enumerating at. Ignored when processing a list of revision IDs.",
+ "apihelp-query+deletedrevisions-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+deletedrevisions-param-user": "Only list revisions by this user.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Don't list revisions by this user.",
+ "apihelp-query+deletedrevisions-example-titles": "List the deleted revisions of the pages <kbd>Main Page</kbd> and <kbd>Talk:Main Page</kbd>, with content.",
+ "apihelp-query+deletedrevisions-example-revids": "List the information for deleted revision <kbd>123456</kbd>.",
+
+ "apihelp-query+deletedrevs-summary": "List deleted revisions.",
+ "apihelp-query+deletedrevs-extended-description": "Operates in three modes:\n# List deleted revisions for the given titles, sorted by timestamp.\n# List deleted contributions for the given user, sorted by timestamp (no titles specified).\n# List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, $1user not set).\n\nCertain parameters only apply to some modes and are ignored in others.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}}: $2",
+ "apihelp-query+deletedrevs-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+deletedrevs-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+deletedrevs-param-from": "Start listing at this title.",
+ "apihelp-query+deletedrevs-param-to": "Stop listing at this title.",
+ "apihelp-query+deletedrevs-param-prefix": "Search for all page titles that begin with this value.",
+ "apihelp-query+deletedrevs-param-unique": "List only one revision for each page.",
+ "apihelp-query+deletedrevs-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+deletedrevs-param-user": "Only list revisions by this user.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Don't list revisions by this user.",
+ "apihelp-query+deletedrevs-param-namespace": "Only list pages in this namespace.",
+ "apihelp-query+deletedrevs-param-limit": "The maximum amount of revisions to list.",
+ "apihelp-query+deletedrevs-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the ID of the user who made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;token:<span class=\"apihelp-deprecated\">Deprecated.</span> Gives the edit token.\n;tags:Tags for the revision.",
+ "apihelp-query+deletedrevs-example-mode1": "List the last deleted revisions of the pages <kbd>Main Page</kbd> and <kbd>Talk:Main Page</kbd>, with content (mode 1).",
+ "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by <kbd>Bob</kbd> (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "List the first 50 deleted pages in the {{ns:talk}} namespace (mode 3).",
+
+ "apihelp-query+disabled-summary": "This query module has been disabled.",
+
+ "apihelp-query+duplicatefiles-summary": "List all files that are duplicates of the given files based on hash values.",
+ "apihelp-query+duplicatefiles-param-limit": "How many duplicate files to return.",
+ "apihelp-query+duplicatefiles-param-dir": "The direction in which to list.",
+ "apihelp-query+duplicatefiles-param-localonly": "Look only for files in the local repository.",
+ "apihelp-query+duplicatefiles-example-simple": "Look for duplicates of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Look for duplicates of all files.",
+
+ "apihelp-query+embeddedin-summary": "Find all pages that embed (transclude) the given title.",
+ "apihelp-query+embeddedin-param-title": "Title to search. Cannot be used together with $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "Page ID to search. Cannot be used together with $1title.",
+ "apihelp-query+embeddedin-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+embeddedin-param-dir": "The direction in which to list.",
+ "apihelp-query+embeddedin-param-filterredir": "How to filter for redirects.",
+ "apihelp-query+embeddedin-param-limit": "How many total pages to return.",
+ "apihelp-query+embeddedin-example-simple": "Show pages transcluding <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Get information about pages transcluding <kbd>Template:Stub</kbd>.",
+
+ "apihelp-query+extlinks-summary": "Returns all external URLs (not interwikis) from the given pages.",
+ "apihelp-query+extlinks-param-limit": "How many links to return.",
+ "apihelp-query+extlinks-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> is set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
+ "apihelp-query+extlinks-param-query": "Search string without protocol. Useful for checking whether a certain page contains a certain external url.",
+ "apihelp-query+extlinks-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+ "apihelp-query+extlinks-example-simple": "Get a list of external links on <kbd>Main Page</kbd>.",
+
+ "apihelp-query+exturlusage-summary": "Enumerate pages that contain a given URL.",
+ "apihelp-query+exturlusage-param-prop": "Which pieces of information to include:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Adds the ID of page.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Adds the URL used in the page.",
+ "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> is set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
+ "apihelp-query+exturlusage-param-query": "Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links.",
+ "apihelp-query+exturlusage-param-namespace": "The page namespaces to enumerate.",
+ "apihelp-query+exturlusage-param-limit": "How many pages to return.",
+ "apihelp-query+exturlusage-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+ "apihelp-query+exturlusage-example-simple": "Show pages linking to <kbd>https://www.mediawiki.org</kbd>.",
+
+ "apihelp-query+filearchive-summary": "Enumerate all deleted files sequentially.",
+ "apihelp-query+filearchive-param-from": "The image title to start enumerating from.",
+ "apihelp-query+filearchive-param-to": "The image title to stop enumerating at.",
+ "apihelp-query+filearchive-param-prefix": "Search for all image titles that begin with this value.",
+ "apihelp-query+filearchive-param-limit": "How many images to return in total.",
+ "apihelp-query+filearchive-param-dir": "The direction in which to list.",
+ "apihelp-query+filearchive-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "Which image information to get:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Adds SHA-1 hash for the image.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Adds user who uploaded the image version.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Adds the size of the image in bytes and the height, width and page count (if applicable).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias for size.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Adds description of the image version.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Parse the description of the version.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Adds MIME of the image.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Adds the media type of the image.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Lists Exif metadata for the version of the image.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Adds the bit depth of the version.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Adds the filename of the archive version for non-latest versions.",
+ "apihelp-query+filearchive-example-simple": "Show a list of all deleted files.",
+
+ "apihelp-query+filerepoinfo-summary": "Return meta information about image repositories configured on the wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> and [[Special:ApiHelp/query+imageinfo|imageinfo]] return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
+ "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories.",
+
+ "apihelp-query+fileusage-summary": "Find all pages that use the given files.",
+ "apihelp-query+fileusage-param-prop": "Which properties to get:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "Page ID of each page.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Title of each page.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Flag if the page is a redirect.",
+ "apihelp-query+fileusage-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+fileusage-param-limit": "How many to return.",
+ "apihelp-query+fileusage-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
+ "apihelp-query+fileusage-example-simple": "Get a list of pages using [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Get information about pages using [[:File:Example.jpg]].",
+
+ "apihelp-query+imageinfo-summary": "Returns file information and upload history.",
+ "apihelp-query+imageinfo-param-prop": "Which file information to get:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Adds the user who uploaded each file version.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Add the ID of the user that uploaded each file version.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Comment on the version.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Parse the comment on the version.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Adds the canonical title of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Gives URL to the file and the description page.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Adds the size of the file in bytes and the height, width and page count (if applicable).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias for size.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Adds SHA-1 hash for the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Adds MIME type of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Adds MIME type of the image thumbnail (requires url and param $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Adds the media type of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Lists Exif metadata for the version of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Lists file format generic metadata for the version of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Lists formatted metadata combined from multiple sources. Results are HTML formatted.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Adds the filename of the archive version for non-latest versions.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Adds the bit depth of the version.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Adds whether the file is on the [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "How many file revisions to return per file.",
+ "apihelp-query+imageinfo-param-start": "Timestamp to start listing from.",
+ "apihelp-query+imageinfo-param-end": "Timestamp to stop listing at.",
+ "apihelp-query+imageinfo-param-urlwidth": "If $2prop=url is set, a URL to an image scaled to this width will be returned.\nFor performance reasons if this option is used, no more than $1 scaled images will be returned.",
+ "apihelp-query+imageinfo-param-urlheight": "Similar to $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Version of metadata to use. If <kbd>latest</kbd> is specified, use latest version. Defaults to <kbd>1</kbd> for backwards compatibility.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "What language to fetch extmetadata in. This affects both which translation to fetch, if multiple are available, as well as how things like numbers and various values are formatted.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "If translations for extmetadata property are available, fetch all of them.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "If specified and non-empty, only these keys will be returned for $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "A handler specific parameter string. For example, PDFs might use <kbd>page15-100px</kbd>. <var>$1urlwidth</var> must be used and be consistent with <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "If <kbd>$2prop=badfile</kbd> is set, this is the page title used when evaluating the [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "Look only for files in the local repository.",
+ "apihelp-query+imageinfo-example-simple": "Fetch information about the current version of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Fetch information about versions of [[:File:Test.jpg]] from 2008 and later.",
+
+ "apihelp-query+images-summary": "Returns all files contained on the given pages.",
+ "apihelp-query+images-param-limit": "How many files to return.",
+ "apihelp-query+images-param-images": "Only list these files. Useful for checking whether a certain page has a certain file.",
+ "apihelp-query+images-param-dir": "The direction in which to list.",
+ "apihelp-query+images-example-simple": "Get a list of files used in the [[Main Page]].",
+ "apihelp-query+images-example-generator": "Get information about all files used in the [[Main Page]].",
+
+ "apihelp-query+imageusage-summary": "Find all pages that use the given image title.",
+ "apihelp-query+imageusage-param-title": "Title to search. Cannot be used together with $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "Page ID to search. Cannot be used together with $1title.",
+ "apihelp-query+imageusage-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+imageusage-param-dir": "The direction in which to list.",
+ "apihelp-query+imageusage-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+ "apihelp-query+imageusage-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, the limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
+ "apihelp-query+imageusage-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+ "apihelp-query+imageusage-example-simple": "Show pages using [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Get information about pages using [[:File:Albert Einstein Head.jpg]].",
+
+ "apihelp-query+info-summary": "Get basic page information.",
+ "apihelp-query+info-param-prop": "Which additional properties to get:",
+ "apihelp-query+info-paramvalue-prop-protection": "List the protection level of each page.",
+ "apihelp-query+info-paramvalue-prop-talkid": "The page ID of the talk page for each non-talk page.",
+ "apihelp-query+info-paramvalue-prop-watched": "List the watched status of each page.",
+ "apihelp-query+info-paramvalue-prop-watchers": "The number of watchers, if allowed.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "The number of watchers of each page who have visited recent edits to that page, if allowed.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "The watchlist notification timestamp of each page.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "The page ID of the parent page for each talk page.",
+ "apihelp-query+info-paramvalue-prop-url": "Gives a full URL, an edit URL, and the canonical URL for each page.",
+ "apihelp-query+info-paramvalue-prop-readable": "Whether the user can read this page.",
+ "apihelp-query+info-paramvalue-prop-preload": "Gives the text returned by EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Gives the manner in which the page title is actually displayed.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "Gives the display title in all variants of the site content language.",
+ "apihelp-query+info-param-testactions": "Test whether the current user can perform certain actions on the page.",
+ "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+ "apihelp-query+info-example-simple": "Get information about the page <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Get general and protection information about the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+iwbacklinks-summary": "Find all pages that link to the given interwiki link.",
+ "apihelp-query+iwbacklinks-extended-description": "Can be used to find all links with a prefix, or all links to a title (with a given prefix). Using neither parameter is effectively \"all interwiki links\".",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefix for the interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Interwiki link to search for. Must be used with <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "How many total pages to return.",
+ "apihelp-query+iwbacklinks-param-prop": "Which properties to get:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Adds the prefix of the interwiki.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Adds the title of the interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "The direction in which to list.",
+ "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Get information about pages linking to [[wikibooks:Test]].",
+
+ "apihelp-query+iwlinks-summary": "Returns all interwiki links from the given pages.",
+ "apihelp-query+iwlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Which additional properties to get for each interlanguage link:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Adds the full URL.",
+ "apihelp-query+iwlinks-param-limit": "How many interwiki links to return.",
+ "apihelp-query+iwlinks-param-prefix": "Only return interwiki links with this prefix.",
+ "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "The direction in which to list.",
+ "apihelp-query+iwlinks-example-simple": "Get interwiki links from the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+langbacklinks-summary": "Find all pages that link to the given language link.",
+ "apihelp-query+langbacklinks-extended-description": "Can be used to find all links with a language code, or all links to a title (with a given language). Using neither parameter is effectively \"all language links\".\n\nNote that this may not consider language links added by extensions.",
+ "apihelp-query+langbacklinks-param-lang": "Language for the language link.",
+ "apihelp-query+langbacklinks-param-title": "Language link to search for. Must be used with $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "How many total pages to return.",
+ "apihelp-query+langbacklinks-param-prop": "Which properties to get:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Adds the language code of the language link.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Adds the title of the language link.",
+ "apihelp-query+langbacklinks-param-dir": "The direction in which to list.",
+ "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]].",
+
+ "apihelp-query+langlinks-summary": "Returns all interlanguage links from the given pages.",
+ "apihelp-query+langlinks-param-limit": "How many langlinks to return.",
+ "apihelp-query+langlinks-param-url": "Whether to get the full URL (cannot be used with <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Which additional properties to get for each interlanguage link:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Adds the full URL.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Adds the localised language name (best effort). Use <var>$1inlanguagecode</var> to control the language.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Adds the native language name.",
+ "apihelp-query+langlinks-param-lang": "Only return language links with this language code.",
+ "apihelp-query+langlinks-param-title": "Link to search for. Must be used with <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "The direction in which to list.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Language code for localised language names.",
+ "apihelp-query+langlinks-example-simple": "Get interlanguage links from the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+links-summary": "Returns all links from the given pages.",
+ "apihelp-query+links-param-namespace": "Show links in these namespaces only.",
+ "apihelp-query+links-param-limit": "How many links to return.",
+ "apihelp-query+links-param-titles": "Only list links to these titles. Useful for checking whether a certain page links to a certain title.",
+ "apihelp-query+links-param-dir": "The direction in which to list.",
+ "apihelp-query+links-example-simple": "Get links from the page <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Get information about the link pages in the page <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Get links from the page <kbd>Main Page</kbd> in the {{ns:user}} and {{ns:template}} namespaces.",
+
+ "apihelp-query+linkshere-summary": "Find all pages that link to the given pages.",
+ "apihelp-query+linkshere-param-prop": "Which properties to get:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "Page ID of each page.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Title of each page.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Flag if the page is a redirect.",
+ "apihelp-query+linkshere-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+linkshere-param-limit": "How many to return.",
+ "apihelp-query+linkshere-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
+ "apihelp-query+linkshere-example-simple": "Get a list of pages linking to the [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]].",
+
+ "apihelp-query+logevents-summary": "Get events from logs.",
+ "apihelp-query+logevents-param-prop": "Which properties to get:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Adds the ID of the log event.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Adds the title of the page for the log event.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Adds the type of log event.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Adds the user responsible for the log event.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Adds the user ID who was responsible for the log event.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Adds the timestamp for the log event.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Adds the comment of the log event.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Adds the parsed comment of the log event.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Lists additional details about the log event.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Lists tags for the log event.",
+ "apihelp-query+logevents-param-type": "Filter log entries to only this type.",
+ "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides <var>$1type</var>. In the list of possible values, values with the asterisk wildcard such as <kbd>action/*</kbd> can have different strings after the slash (/).",
+ "apihelp-query+logevents-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+logevents-param-end": "The timestamp to end enumerating.",
+ "apihelp-query+logevents-param-user": "Filter entries to those made by the given user.",
+ "apihelp-query+logevents-param-title": "Filter entries to those related to a page.",
+ "apihelp-query+logevents-param-namespace": "Filter entries to those in the given namespace.",
+ "apihelp-query+logevents-param-prefix": "Filter entries that start with this prefix.",
+ "apihelp-query+logevents-param-tag": "Only list event entries tagged with this tag.",
+ "apihelp-query+logevents-param-limit": "How many total event entries to return.",
+ "apihelp-query+logevents-example-simple": "List recent log events.",
+
+ "apihelp-query+pagepropnames-summary": "List all page property names in use on the wiki.",
+ "apihelp-query+pagepropnames-param-limit": "The maximum number of names to return.",
+ "apihelp-query+pagepropnames-example-simple": "Get first 10 property names.",
+
+ "apihelp-query+pageprops-summary": "Get various page properties defined in the page content.",
+ "apihelp-query+pageprops-param-prop": "Only list these page properties (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> returns page property names in use). Useful for checking whether pages use a certain page property.",
+ "apihelp-query+pageprops-example-simple": "Get properties for the pages <kbd>Main Page</kbd> and <kbd>MediaWiki</kbd>.",
+
+ "apihelp-query+pageswithprop-summary": "List all pages using a given page property.",
+ "apihelp-query+pageswithprop-param-propname": "Page property for which to enumerate pages (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> returns page property names in use).",
+ "apihelp-query+pageswithprop-param-prop": "Which pieces of information to include:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Adds the page ID.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Adds the value of the page property.",
+ "apihelp-query+pageswithprop-param-limit": "The maximum number of pages to return.",
+ "apihelp-query+pageswithprop-param-dir": "In which direction to sort.",
+ "apihelp-query+pageswithprop-example-simple": "List the first 10 pages using <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Get additional information about the first 10 pages using <code>_&#95;NOTOC_&#95;</code>.",
+
+ "apihelp-query+prefixsearch-summary": "Perform a prefix search for page titles.",
+ "apihelp-query+prefixsearch-extended-description": "Despite the similarity in names, this module is not intended to be equivalent to [[Special:PrefixIndex]]; for that, see <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> with the <kbd>apprefix</kbd> parameter. The purpose of this module is similar to <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: to take user input and provide the best-matching titles. Depending on the search engine backend, this might include typo correction, redirect avoidance, or other heuristics.",
+ "apihelp-query+prefixsearch-param-search": "Search string.",
+ "apihelp-query+prefixsearch-param-namespace": "Namespaces to search. Ignored if <var>$1search</var> begins with a valid namespace prefix.",
+ "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
+ "apihelp-query+prefixsearch-param-offset": "Number of results to skip.",
+ "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Search profile to use.",
+
+ "apihelp-query+protectedtitles-summary": "List all titles protected from creation.",
+ "apihelp-query+protectedtitles-param-namespace": "Only list titles in these namespaces.",
+ "apihelp-query+protectedtitles-param-level": "Only list titles with these protection levels.",
+ "apihelp-query+protectedtitles-param-limit": "How many total pages to return.",
+ "apihelp-query+protectedtitles-param-start": "Start listing at this protection timestamp.",
+ "apihelp-query+protectedtitles-param-end": "Stop listing at this protection timestamp.",
+ "apihelp-query+protectedtitles-param-prop": "Which properties to get:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Adds the timestamp of when protection was added.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Adds the user that added the protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Adds the user ID that added the protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Adds the comment for the protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Adds the parsed comment for the protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Adds the timestamp of when the protection will be lifted.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Adds the protection level.",
+ "apihelp-query+protectedtitles-example-simple": "List protected titles.",
+ "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace.",
+
+ "apihelp-query+querypage-summary": "Get a list provided by a QueryPage-based special page.",
+ "apihelp-query+querypage-param-page": "The name of the special page. Note, this is case sensitive.",
+ "apihelp-query+querypage-param-limit": "Number of results to return.",
+ "apihelp-query+querypage-example-ancientpages": "Return results from [[Special:Ancientpages]].",
+
+ "apihelp-query+random-summary": "Get a set of random pages.",
+ "apihelp-query+random-extended-description": "Pages are listed in a fixed sequence, only the starting point is random. This means that if, for example, <samp>Main Page</samp> is the first random page in the list, <samp>List of fictional monkeys</samp> will <em>always</em> be second, <samp>List of people on stamps of Vanuatu</samp> third, etc.",
+ "apihelp-query+random-param-namespace": "Return pages in these namespaces only.",
+ "apihelp-query+random-param-limit": "Limit how many random pages will be returned.",
+ "apihelp-query+random-param-redirect": "Use <kbd>$1filterredir=redirects</kbd> instead.",
+ "apihelp-query+random-param-filterredir": "How to filter for redirects.",
+ "apihelp-query+random-example-simple": "Return two random pages from the main namespace.",
+ "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace.",
+
+ "apihelp-query+recentchanges-summary": "Enumerate recent changes.",
+ "apihelp-query+recentchanges-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+recentchanges-param-end": "The timestamp to end enumerating.",
+ "apihelp-query+recentchanges-param-namespace": "Filter changes to only these namespaces.",
+ "apihelp-query+recentchanges-param-user": "Only list changes by this user.",
+ "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user.",
+ "apihelp-query+recentchanges-param-tag": "Only list changes tagged with this tag.",
+ "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Adds the user responsible for the edit and tags if they are an IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Adds the user ID responsible for the edit.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Adds the comment for the edit.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Adds the parsed comment for the edit.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Adds flags for the edit.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Adds timestamp of the edit.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Adds the page title of the edit.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Adds the page ID, recent changes ID and the new and old revision ID.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Adds the new and old page length in bytes.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Tags edit if page is a redirect.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Tags patrollable edits as being patrolled or unpatrolled.",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "Tags patrollable edits as being autopatrolled or not.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Adds log information (log ID, log type, etc) to log entries.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Lists tags for the entry.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Adds the content checksum for entries associated with a revision.",
+ "apihelp-query+recentchanges-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> instead.",
+ "apihelp-query+recentchanges-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "How many total changes to return.",
+ "apihelp-query+recentchanges-param-type": "Which types of changes to show.",
+ "apihelp-query+recentchanges-param-toponly": "Only list changes which are the latest revision.",
+ "apihelp-query+recentchanges-param-generaterevisions": "When being used as a generator, generate revision IDs rather than titles. Recent change entries without associated revision IDs (e.g. most log entries) will generate nothing.",
+ "apihelp-query+recentchanges-example-simple": "List recent changes.",
+ "apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes.",
+
+ "apihelp-query+redirects-summary": "Returns all redirects to the given pages.",
+ "apihelp-query+redirects-param-prop": "Which properties to get:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "Page ID of each redirect.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Title of each redirect.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Fragment of each redirect, if any.",
+ "apihelp-query+redirects-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+redirects-param-limit": "How many redirects to return.",
+ "apihelp-query+redirects-param-show": "Show only items that meet these criteria:\n;fragment:Only show redirects with a fragment.\n;!fragment:Only show redirects without a fragment.",
+ "apihelp-query+redirects-example-simple": "Get a list of redirects to the [[Main Page]].",
+ "apihelp-query+redirects-example-generator": "Get information about all redirects to the [[Main Page]].",
+
+ "apihelp-query+revisions-summary": "Get revision information.",
+ "apihelp-query+revisions-extended-description": "May be used in several ways:\n# Get data about a set of pages (last revision), by setting titles or pageids.\n# Get revisions for one given page, by using titles or pageids with start, end, or limit.\n# Get data about a set of revisions by setting their IDs with revids.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "May only be used with a single page (mode #2).",
+ "apihelp-query+revisions-param-startid": "Start enumeration from this revision's timestamp. The revision must exist, but need not belong to this page.",
+ "apihelp-query+revisions-param-endid": "Stop enumeration at this revision's timestamp. The revision must exist, but need not belong to this page.",
+ "apihelp-query+revisions-param-start": "From which revision timestamp to start enumeration.",
+ "apihelp-query+revisions-param-end": "Enumerate up to this timestamp.",
+ "apihelp-query+revisions-param-user": "Only include revisions made by user.",
+ "apihelp-query+revisions-param-excludeuser": "Exclude revisions made by user.",
+ "apihelp-query+revisions-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+revisions-param-token": "Which tokens to obtain for each revision.",
+ "apihelp-query+revisions-example-content": "Get data with content for the last revision of titles <kbd>API</kbd> and <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Get last 5 revisions of the <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Get first 5 revisions of the <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Get first 5 revisions of the <kbd>Main Page</kbd> made after 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the <kbd>Main Page</kbd> that were not made by anonymous user <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Get first 5 revisions of the <kbd>Main Page</kbd> that were made by the user <kbd>MediaWiki default</kbd>.",
+
+ "apihelp-query+revisions+base-param-prop": "Which properties to get for each revision:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "The ID of the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Revision flags (minor).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "The timestamp of the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "User that made the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "User ID of the revision creator.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Length (bytes) of the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) of the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Content model ID of the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Comment by the user for the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Parsed comment by the user for the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Text of the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Tags for the revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Deprecated.</span> Use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> or <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> instead. The XML parse tree of revision content (requires content model <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Limit how many revisions will be returned.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> instead. Expand templates in revision content (requires $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> or <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> instead. Generate XML parse tree for revision content (requires $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Use <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> instead. Parse revision content (requires $1prop=content). For performance reasons, if this option is used, $1limit is enforced to 1.",
+ "apihelp-query+revisions+base-param-section": "Only retrieve the content of this section number.",
+ "apihelp-query+revisions+base-param-diffto": "Use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> instead. Revision ID to diff each revision to. Use <kbd>prev</kbd>, <kbd>next</kbd> and <kbd>cur</kbd> for the previous, next and current revision respectively.",
+ "apihelp-query+revisions+base-param-difftotext": "Use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> instead. Text to diff each revision to. Only diffs a limited number of revisions. Overrides <var>$1diffto</var>. If <var>$1section</var> is set, only that section will be diffed against this text.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> instead. Perform a pre-save transform on the text before diffing it. Only valid when used with <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "Serialization format used for <var>$1difftotext</var> and expected for output of content.",
+
+ "apihelp-query+search-summary": "Perform a full text search.",
+ "apihelp-query+search-param-search": "Search for page titles or content matching this value. You can use the search string to invoke special search features, depending on what the wiki's search backend implements.",
+ "apihelp-query+search-param-namespace": "Search only within these namespaces.",
+ "apihelp-query+search-param-what": "Which type of search to perform.",
+ "apihelp-query+search-param-info": "Which metadata to return.",
+ "apihelp-query+search-param-prop": "Which properties to return:",
+ "apihelp-query+search-param-qiprofile": "Query independent profile to use (affects ranking algorithm).",
+ "apihelp-query+search-paramvalue-prop-size": "Adds the size of the page in bytes.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Adds the word count of the page.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Adds the timestamp of when the page was last edited.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Adds a parsed snippet of the page.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Adds a parsed snippet of the page title.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Adds a parsed snippet of the redirect title.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Adds the title of the matching redirect.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Adds a parsed snippet of the matching section title.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Adds the title of the matching section.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Adds a parsed snippet of the matching category.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Adds a boolean indicating if the search matched file content.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Adds extra data generated by extensions.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignored.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignored.",
+ "apihelp-query+search-param-limit": "How many total pages to return.",
+ "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
+ "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
+ "apihelp-query+search-param-enablerewrites": "Enable internal query rewriting. Some search backends can rewrite the query into another which is thought to provide better results, for instance by correcting spelling errors.",
+ "apihelp-query+search-example-simple": "Search for <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Search texts for <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Get page info about the pages returned for a search for <kbd>meaning</kbd>.",
+
+ "apihelp-query+siteinfo-summary": "Return general information about the site.",
+ "apihelp-query+siteinfo-param-prop": "Which information to get:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Overall system information.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "List of registered namespaces and their canonical names.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "List of registered namespace aliases.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "List of special page aliases.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "List of magic words and their aliases.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Returns site statistics.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Returns interwiki map (optionally filtered, optionally localised by using <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Returns database server with the highest replication lag.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Returns user groups and the associated permissions.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Returns libraries installed on the wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Returns extensions installed on the wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Returns list of file extensions (file types) allowed to be uploaded.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Returns wiki rights (license) information if available.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Returns information on available restriction (protection) types.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Returns a list of languages MediaWiki supports (optionally localised by using <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Returns a list of language codes for which [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] is enabled, and the variants supported for each.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Returns a list of all enabled skins (optionally localised by using <var>$1inlanguagecode</var>, otherwise in the content language).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Returns a list of parser extension tags.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Returns a list of parser function hooks.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Returns a list of all subscribed hooks (contents of <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Returns a list of variable IDs.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Returns a list of protocols that are allowed in external links.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Returns the default values for user preferences.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Returns the upload dialog configuration.",
+ "apihelp-query+siteinfo-param-filteriw": "Return only local or only nonlocal entries of the interwiki map.",
+ "apihelp-query+siteinfo-param-showalldb": "List all database servers, not just the one lagging the most.",
+ "apihelp-query+siteinfo-param-numberingroup": "Lists the number of users in user groups.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Language code for localised language names (best effort) and skin names.",
+ "apihelp-query+siteinfo-example-simple": "Fetch site information.",
+ "apihelp-query+siteinfo-example-interwiki": "Fetch a list of local interwiki prefixes.",
+ "apihelp-query+siteinfo-example-replag": "Check the current replication lag.",
+
+ "apihelp-query+stashimageinfo-summary": "Returns file information for stashed files.",
+ "apihelp-query+stashimageinfo-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias for $1filekey, for backward compatibility.",
+ "apihelp-query+stashimageinfo-example-simple": "Returns information for a stashed file.",
+ "apihelp-query+stashimageinfo-example-params": "Returns thumbnails for two stashed files.",
+
+ "apihelp-query+tags-summary": "List change tags.",
+ "apihelp-query+tags-param-limit": "The maximum number of tags to list.",
+ "apihelp-query+tags-param-prop": "Which properties to get:",
+ "apihelp-query+tags-paramvalue-prop-name": "Adds name of tag.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Adds system message for the tag.",
+ "apihelp-query+tags-paramvalue-prop-description": "Adds description of the tag.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Adds the number of revisions and log entries that have this tag.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Indicate whether the tag is defined.",
+ "apihelp-query+tags-paramvalue-prop-source": "Gets the sources of the tag, which may include <samp>extension</samp> for extension-defined tags and <samp>manual</samp> for tags that may be applied manually by users.",
+ "apihelp-query+tags-paramvalue-prop-active": "Whether the tag is still being applied.",
+ "apihelp-query+tags-example-simple": "List available tags.",
+
+ "apihelp-query+templates-summary": "Returns all pages transcluded on the given pages.",
+ "apihelp-query+templates-param-namespace": "Show templates in these namespaces only.",
+ "apihelp-query+templates-param-limit": "How many templates to return.",
+ "apihelp-query+templates-param-templates": "Only list these templates. Useful for checking whether a certain page uses a certain template.",
+ "apihelp-query+templates-param-dir": "The direction in which to list.",
+ "apihelp-query+templates-example-simple": "Get the templates used on the page <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Get information about the template pages used on <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Get pages in the {{ns:user}} and {{ns:template}} namespaces that are transcluded on the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+tokens-summary": "Gets tokens for data-modifying actions.",
+ "apihelp-query+tokens-param-type": "Types of token to request.",
+ "apihelp-query+tokens-example-simple": "Retrieve a csrf token (the default).",
+ "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token.",
+
+ "apihelp-query+transcludedin-summary": "Find all pages that transclude the given pages.",
+ "apihelp-query+transcludedin-param-prop": "Which properties to get:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "Page ID of each page.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Title of each page.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Flag if the page is a redirect.",
+ "apihelp-query+transcludedin-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+transcludedin-param-limit": "How many to return.",
+ "apihelp-query+transcludedin-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
+ "apihelp-query+transcludedin-example-simple": "Get a list of pages transcluding <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Get information about pages transcluding <kbd>Main Page</kbd>.",
+
+ "apihelp-query+usercontribs-summary": "Get all edits by a user.",
+ "apihelp-query+usercontribs-param-limit": "The maximum number of contributions to return.",
+ "apihelp-query+usercontribs-param-start": "The start timestamp to return from.",
+ "apihelp-query+usercontribs-param-end": "The end timestamp to return to.",
+ "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for. Cannot be used with <var>$1userids</var> or <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Cannot be used with <var>$1user</var> or <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "The user IDs to retrieve contributions for. Cannot be used with <var>$1user</var> or <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Only list contributions in these namespaces.",
+ "apihelp-query+usercontribs-param-prop": "Include additional pieces of information:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Adds the page ID and revision ID.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Adds the timestamp of the edit.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Adds the comment of the edit.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Adds the parsed comment of the edit.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Adds the new size of the edit.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Adds the size delta of the edit against its parent.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Adds flags of the edit.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Tags patrolled edits.",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "Tags autopatrolled edits.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Lists tags for the edit.",
+ "apihelp-query+usercontribs-param-show": "Show only items that meet these criteria, e.g. non minor edits only: <kbd>$2show=!minor</kbd>.\n\nIf <kbd>$2show=patrolled</kbd> or <kbd>$2show=!patrolled</kbd> is set, revisions older than <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
+ "apihelp-query+usercontribs-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+usercontribs-param-toponly": "Only list changes which are the latest revision.",
+ "apihelp-query+usercontribs-example-user": "Show contributions of user <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Show contributions from all IP addresses with prefix <kbd>192.0.2.</kbd>.",
+
+ "apihelp-query+userinfo-summary": "Get information about the current user.",
+ "apihelp-query+userinfo-param-prop": "Which pieces of information to include:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Tags if the current user is blocked, by whom, and for what reason.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Adds a tag <samp>messages</samp> if the current user has pending messages.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Lists all the groups the current user belongs to.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Lists groups that the current user has been explicitly assigned to, including the expiry date of each group membership.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lists all the groups the current user is automatically a member of.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Lists all the rights the current user has.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lists the groups the current user can add to and remove from.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Lists all preferences the current user has set.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Get a token to change current user's preferences.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Adds the current user's edit count.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lists all rate limits applying to the current user.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Adds the user's real name.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Adds the user's email address and email authentication date.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Echoes the <code>Accept-Language</code> header sent by the client in a structured format.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Adds the user's registration date.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Adds the count of unread pages on the user's watchlist (maximum $1; returns <samp>$2</samp> if more).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "Adds the central IDs and attachment status for the user.",
+ "apihelp-query+userinfo-param-attachedwiki": "With <kbd>$1prop=centralids</kbd>, indicate whether the user is attached with the wiki identified by this ID.",
+ "apihelp-query+userinfo-example-simple": "Get information about the current user.",
+ "apihelp-query+userinfo-example-data": "Get additional information about the current user.",
+
+ "apihelp-query+users-summary": "Get information about a list of users.",
+ "apihelp-query+users-param-prop": "Which pieces of information to include:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Tags if the user is blocked, by whom, and for what reason.",
+ "apihelp-query+users-paramvalue-prop-groups": "Lists all the groups each user belongs to.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "Lists groups that each user has been explicitly assigned to, including the expiry date of each group membership.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Lists all the groups a user is automatically a member of.",
+ "apihelp-query+users-paramvalue-prop-rights": "Lists all the rights each user has.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Adds the user's edit count.",
+ "apihelp-query+users-paramvalue-prop-registration": "Adds the user's registration timestamp.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Tags if the user can and wants to receive email through [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
+ "apihelp-query+users-paramvalue-prop-centralids": "Adds the central IDs and attachment status for the user.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Indicates whether an account for valid but unregistered usernames can be created.",
+ "apihelp-query+users-param-attachedwiki": "With <kbd>$1prop=centralids</kbd>, indicate whether the user is attached with the wiki identified by this ID.",
+ "apihelp-query+users-param-users": "A list of users to obtain information for.",
+ "apihelp-query+users-param-userids": "A list of user IDs to obtain information for.",
+ "apihelp-query+users-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> instead.",
+ "apihelp-query+users-example-simple": "Return information for user <kbd>Example</kbd>.",
+
+ "apihelp-query+watchlist-summary": "Get recent changes to pages in the current user's watchlist.",
+ "apihelp-query+watchlist-param-allrev": "Include multiple revisions of the same page within given timeframe.",
+ "apihelp-query+watchlist-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+watchlist-param-end": "The timestamp to end enumerating.",
+ "apihelp-query+watchlist-param-namespace": "Filter changes to only the given namespaces.",
+ "apihelp-query+watchlist-param-user": "Only list changes by this user.",
+ "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user.",
+ "apihelp-query+watchlist-param-limit": "How many total results to return per request.",
+ "apihelp-query+watchlist-param-prop": "Which additional properties to get:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Adds revision IDs and page IDs.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Adds title of the page.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Adds flags for the edit.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Adds the user who made the edit.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Adds user ID of whoever made the edit.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Adds comment of the edit.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Adds parsed comment of the edit.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Adds timestamp of the edit.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Tags edits that are patrolled.",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "Tags edits that are autopatrolled.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Adds the old and new lengths of the page.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Adds timestamp of when the user was last notified about the edit.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Adds log information where appropriate.",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "Lists tags for the entry.",
+ "apihelp-query+watchlist-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Which types of changes to show:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Regular page edits.",
+ "apihelp-query+watchlist-paramvalue-type-external": "External changes.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Page creations.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Log entries.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Category membership changes.",
+ "apihelp-query+watchlist-param-owner": "Used along with $1token to access a different user's watchlist.",
+ "apihelp-query+watchlist-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+ "apihelp-query+watchlist-example-simple": "List the top revision for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-props": "Fetch additional information about the top revision for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-allrev": "Fetch information about all recent changes to pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-generator": "Fetch page info for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-generator-rev": "Fetch revision info for recent changes to pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-wlowner": "List the top revision for recently changed pages on the watchlist of user <kbd>Example</kbd>.",
+
+ "apihelp-query+watchlistraw-summary": "Get all pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-param-namespace": "Only list pages in the given namespaces.",
+ "apihelp-query+watchlistraw-param-limit": "How many total results to return per request.",
+ "apihelp-query+watchlistraw-param-prop": "Which additional properties to get:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Adds timestamp of when the user was last notified about the edit.",
+ "apihelp-query+watchlistraw-param-show": "Only list items that meet these criteria.",
+ "apihelp-query+watchlistraw-param-owner": "Used along with $1token to access a different user's watchlist.",
+ "apihelp-query+watchlistraw-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+ "apihelp-query+watchlistraw-param-dir": "The direction in which to list.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Title (with namespace prefix) to begin enumerating from.",
+ "apihelp-query+watchlistraw-param-totitle": "Title (with namespace prefix) to stop enumerating at.",
+ "apihelp-query+watchlistraw-example-simple": "List pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-example-generator": "Fetch page info for pages on the current user's watchlist.",
+
+ "apihelp-removeauthenticationdata-summary": "Remove authentication data for the current user.",
+ "apihelp-removeauthenticationdata-example-simple": "Attempt to remove the current user's data for <kbd>FooAuthenticationRequest</kbd>.",
+
+ "apihelp-resetpassword-summary": "Send a password reset email to a user.",
+ "apihelp-resetpassword-extended-description-noroutes": "No password reset routes are available.\n\nEnable routes in <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> to use this module.",
+ "apihelp-resetpassword-param-user": "User being reset.",
+ "apihelp-resetpassword-param-email": "Email address of the user being reset.",
+ "apihelp-resetpassword-example-user": "Send a password reset email to user <kbd>Example</kbd>.",
+ "apihelp-resetpassword-example-email": "Send a password reset email for all users with email address <kbd>user@example.com</kbd>.",
+
+ "apihelp-revisiondelete-summary": "Delete and undelete revisions.",
+ "apihelp-revisiondelete-param-type": "Type of revision deletion being performed.",
+ "apihelp-revisiondelete-param-target": "Page title for the revision deletion, if required for the type.",
+ "apihelp-revisiondelete-param-ids": "Identifiers for the revisions to be deleted.",
+ "apihelp-revisiondelete-param-hide": "What to hide for each revision.",
+ "apihelp-revisiondelete-param-show": "What to unhide for each revision.",
+ "apihelp-revisiondelete-param-suppress": "Whether to suppress data from administrators as well as others.",
+ "apihelp-revisiondelete-param-reason": "Reason for the deletion or undeletion.",
+ "apihelp-revisiondelete-param-tags": "Tags to apply to the entry in the deletion log.",
+ "apihelp-revisiondelete-example-revision": "Hide content for revision <kbd>12345</kbd> on the page <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Hide all data on log entry <kbd>67890</kbd> with the reason <kbd>BLP violation</kbd>.",
+
+ "apihelp-rollback-summary": "Undo the last edit to the page.",
+ "apihelp-rollback-extended-description": "If the last user who edited the page made multiple edits in a row, they will all be rolled back.",
+ "apihelp-rollback-param-title": "Title of the page to roll back. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "Page ID of the page to roll back. Cannot be used together with <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Tags to apply to the rollback.",
+ "apihelp-rollback-param-user": "Name of the user whose edits are to be rolled back.",
+ "apihelp-rollback-param-summary": "Custom edit summary. If empty, default summary will be used.",
+ "apihelp-rollback-param-markbot": "Mark the reverted edits and the revert as bot edits.",
+ "apihelp-rollback-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-rollback-example-simple": "Roll back the last edits to page <kbd>Main Page</kbd> by user <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Roll back the last edits to page <kbd>Main Page</kbd> by IP user <kbd>192.0.2.5</kbd> with summary <kbd>Reverting vandalism</kbd>, and mark those edits and the revert as bot edits.",
+
+ "apihelp-rsd-summary": "Export an RSD (Really Simple Discovery) schema.",
+ "apihelp-rsd-example-simple": "Export the RSD schema.",
+
+ "apihelp-setnotificationtimestamp-summary": "Update the notification timestamp for watched pages.",
+ "apihelp-setnotificationtimestamp-extended-description": "This affects the highlighting of changed pages in the watchlist and history, and the sending of email when the \"{{int:tog-enotifwatchlistpages}}\" preference is enabled.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Work on all watched pages.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Timestamp to which to set the notification timestamp.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Revision to set the notification timestamp to (one page only).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revision to set the notification timestamp newer than (one page only).",
+ "apihelp-setnotificationtimestamp-example-all": "Reset the notification status for the entire watchlist.",
+ "apihelp-setnotificationtimestamp-example-page": "Reset the notification status for <kbd>Main page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Set the notification timestamp for <kbd>Main page</kbd> so all edits since 1 January 2012 are unviewed.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the <kbd>{{ns:user}}</kbd> namespace.",
+
+ "apihelp-setpagelanguage-summary": "Change the language of a page.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Changing the language of a page is not allowed on this wiki.\n\nEnable <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> to use this action.",
+ "apihelp-setpagelanguage-param-title": "Title of the page whose language you wish to change. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "Page ID of the page whose language you wish to change. Cannot be used together with <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Language code of the language to change the page to. Use <kbd>default</kbd> to reset the page to the wiki's default content language.",
+ "apihelp-setpagelanguage-param-reason": "Reason for the change.",
+ "apihelp-setpagelanguage-param-tags": "Change tags to apply to the log entry resulting from this action.",
+ "apihelp-setpagelanguage-example-language": "Change the language of <kbd>Main Page</kbd> to Basque.",
+ "apihelp-setpagelanguage-example-default": "Change the language of the page with ID 123 to the wiki's default content language.",
+
+ "apihelp-stashedit-summary": "Prepare an edit in shared cache.",
+ "apihelp-stashedit-extended-description": "This is intended to be used via AJAX from the edit form to improve the performance of the page save.",
+ "apihelp-stashedit-param-title": "Title of the page being edited.",
+ "apihelp-stashedit-param-section": "Section number. <kbd>0</kbd> for the top section, <kbd>new</kbd> for a new section.",
+ "apihelp-stashedit-param-sectiontitle": "The title for a new section.",
+ "apihelp-stashedit-param-text": "Page content.",
+ "apihelp-stashedit-param-stashedtexthash": "Page content hash from a prior stash to use instead.",
+ "apihelp-stashedit-param-contentmodel": "Content model of the new content.",
+ "apihelp-stashedit-param-contentformat": "Content serialization format used for the input text.",
+ "apihelp-stashedit-param-baserevid": "Revision ID of the base revision.",
+ "apihelp-stashedit-param-summary": "Change summary.",
+
+ "apihelp-tag-summary": "Add or remove change tags from individual revisions or log entries.",
+ "apihelp-tag-param-rcid": "One or more recent changes IDs from which to add or remove the tag.",
+ "apihelp-tag-param-revid": "One or more revision IDs from which to add or remove the tag.",
+ "apihelp-tag-param-logid": "One or more log entry IDs from which to add or remove the tag.",
+ "apihelp-tag-param-add": "Tags to add. Only manually defined tags can be added.",
+ "apihelp-tag-param-remove": "Tags to remove. Only tags that are either manually defined or completely undefined can be removed.",
+ "apihelp-tag-param-reason": "Reason for the change.",
+ "apihelp-tag-param-tags": "Tags to apply to the log entry that will be created as a result of this action.",
+ "apihelp-tag-example-rev": "Add the <kbd>vandalism</kbd> tag to revision ID 123 without specifying a reason",
+ "apihelp-tag-example-log": "Remove the <kbd>spam</kbd> tag from log entry ID 123 with the reason <kbd>Wrongly applied</kbd>",
+
+ "apihelp-tokens-summary": "Get tokens for data-modifying actions.",
+ "apihelp-tokens-extended-description": "This module is deprecated in favor of [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Types of token to request.",
+ "apihelp-tokens-example-edit": "Retrieve an edit token (the default).",
+ "apihelp-tokens-example-emailmove": "Retrieve an email token and a move token.",
+
+ "apihelp-unblock-summary": "Unblock a user.",
+ "apihelp-unblock-param-id": "ID of the block to unblock (obtained through <kbd>list=blocks</kbd>). Cannot be used together with <var>$1user</var> or <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Username, IP address or IP address range to unblock. Cannot be used together with <var>$1id</var> or <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "User ID to unblock. Cannot be used together with <var>$1id</var> or <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Reason for unblock.",
+ "apihelp-unblock-param-tags": "Change tags to apply to the entry in the block log.",
+ "apihelp-unblock-example-id": "Unblock block ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Unblock user <kbd>Bob</kbd> with reason <kbd>Sorry Bob</kbd>.",
+
+ "apihelp-undelete-summary": "Restore revisions of a deleted page.",
+ "apihelp-undelete-extended-description": "A list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], and a list of deleted file IDs can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Title of the page to restore.",
+ "apihelp-undelete-param-reason": "Reason for restoring.",
+ "apihelp-undelete-param-tags": "Change tags to apply to the entry in the deletion log.",
+ "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
+ "apihelp-undelete-param-fileids": "IDs of the file revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
+ "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-undelete-example-page": "Undelete page <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Undelete two revisions of page <kbd>Main Page</kbd>.",
+
+ "apihelp-unlinkaccount-summary": "Remove a linked third-party account from the current user.",
+ "apihelp-unlinkaccount-example-simple": "Attempt to remove the current user's link for the provider associated with <kbd>FooAuthenticationRequest</kbd>.",
+
+ "apihelp-upload-summary": "Upload a file, or get the status of pending uploads.",
+ "apihelp-upload-extended-description": "Several methods are available:\n* Upload file contents directly, using the <var>$1file</var> parameter.\n* Upload the file in pieces, using the <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var> parameters.\n* Have the MediaWiki server fetch a file from a URL, using the <var>$1url</var> parameter.\n* Complete an earlier upload that failed due to warnings, using the <var>$1filekey</var> parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using <code>multipart/form-data</code>) when sending the <var>$1file</var>.",
+ "apihelp-upload-param-filename": "Target filename.",
+ "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if <var>$1text</var> is not specified.",
+ "apihelp-upload-param-tags": "Change tags to apply to the upload log entry and file page revision.",
+ "apihelp-upload-param-text": "Initial page text for new files.",
+ "apihelp-upload-param-watch": "Watch the page.",
+ "apihelp-upload-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-upload-param-ignorewarnings": "Ignore any warnings.",
+ "apihelp-upload-param-file": "File contents.",
+ "apihelp-upload-param-url": "URL to fetch the file from.",
+ "apihelp-upload-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+ "apihelp-upload-param-sessionkey": "Same as $1filekey, maintained for backward compatibility.",
+ "apihelp-upload-param-stash": "If set, the server will stash the file temporarily instead of adding it to the repository.",
+ "apihelp-upload-param-filesize": "Filesize of entire upload.",
+ "apihelp-upload-param-offset": "Offset of chunk in bytes.",
+ "apihelp-upload-param-chunk": "Chunk contents.",
+ "apihelp-upload-param-async": "Make potentially large file operations asynchronous when possible.",
+ "apihelp-upload-param-checkstatus": "Only fetch the upload status for the given file key.",
+ "apihelp-upload-example-url": "Upload from a URL.",
+ "apihelp-upload-example-filekey": "Complete an upload that failed due to warnings.",
+
+ "apihelp-userrights-summary": "Change a user's group membership.",
+ "apihelp-userrights-param-user": "User name.",
+ "apihelp-userrights-param-userid": "User ID.",
+ "apihelp-userrights-param-add": "Add the user to these groups, or if they are already a member, update the expiry of their membership in that group.",
+ "apihelp-userrights-param-expiry": "Expiry timestamps. May be relative (e.g. <kbd>5 months</kbd> or <kbd>2 weeks</kbd>) or absolute (e.g. <kbd>2014-09-18T12:34:56Z</kbd>). If only one timestamp is set, it will be used for all groups passed to the <var>$1add</var> parameter. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, or <kbd>never</kbd> for a never-expiring user group.",
+ "apihelp-userrights-param-remove": "Remove the user from these groups.",
+ "apihelp-userrights-param-reason": "Reason for the change.",
+ "apihelp-userrights-param-tags": "Change tags to apply to the entry in the user rights log.",
+ "apihelp-userrights-example-user": "Add user <kbd>FooBot</kbd> to group <kbd>bot</kbd>, and remove from groups <kbd>sysop</kbd> and <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Add the user with ID <kbd>123</kbd> to group <kbd>bot</kbd>, and remove from groups <kbd>sysop</kbd> and <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "Add user <kbd>SometimeSysop</kbd> to group <kbd>sysop</kbd> for 1 month.",
+
+ "apihelp-validatepassword-summary": "Validate a password against the wiki's password policies.",
+ "apihelp-validatepassword-extended-description": "Validity is reported as <samp>Good</samp> if the password is acceptable, <samp>Change</samp> if the password may be used for login but must be changed, or <samp>Invalid</samp> if the password is not usable.",
+ "apihelp-validatepassword-param-password": "Password to validate.",
+ "apihelp-validatepassword-param-user": "User name, for use when testing account creation. The named user must not exist.",
+ "apihelp-validatepassword-param-email": "Email address, for use when testing account creation.",
+ "apihelp-validatepassword-param-realname": "Real name, for use when testing account creation.",
+ "apihelp-validatepassword-example-1": "Validate the password <kbd>foobar</kbd> for the current user.",
+ "apihelp-validatepassword-example-2": "Validate the password <kbd>qwerty</kbd> for creating user <kbd>Example</kbd>.",
+
+ "apihelp-watch-summary": "Add or remove pages from the current user's watchlist.",
+ "apihelp-watch-param-title": "The page to (un)watch. Use <var>$1titles</var> instead.",
+ "apihelp-watch-param-unwatch": "If set the page will be unwatched rather than watched.",
+ "apihelp-watch-example-watch": "Watch the page <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Unwatch the page <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "Watch the first few pages in the main namespace.",
+
+ "apihelp-format-example-generic": "Return the query result in the $1 format.",
+ "apihelp-format-param-wrappedhtml": "Return the pretty-printed HTML and associated ResourceLoader modules as a JSON object.",
+ "apihelp-json-summary": "Output data in JSON format.",
+ "apihelp-json-param-callback": "If specified, wraps the output into a given function call. For safety, all user-specific data will be restricted.",
+ "apihelp-json-param-utf8": "If specified, encodes most (but not all) non-ASCII characters as UTF-8 instead of replacing them with hexadecimal escape sequences. Default when <var>formatversion</var> is not <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "If specified, encodes all non-ASCII using hexadecimal escape sequences. Default when <var>formatversion</var> is <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Experimental modern format. Details may change!\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
+ "apihelp-jsonfm-summary": "Output data in JSON format (pretty-print in HTML).",
+ "apihelp-none-summary": "Output nothing.",
+ "apihelp-php-summary": "Output data in serialized PHP format.",
+ "apihelp-php-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Experimental modern format. Details may change!\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
+ "apihelp-phpfm-summary": "Output data in serialized PHP format (pretty-print in HTML).",
+ "apihelp-rawfm-summary": "Output data, including debugging elements, in JSON format (pretty-print in HTML).",
+ "apihelp-xml-summary": "Output data in XML format.",
+ "apihelp-xml-param-xslt": "If specified, adds the named page as an XSL stylesheet. The value must be a title in the {{ns:MediaWiki}} namespace ending in <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "If specified, adds an XML namespace.",
+ "apihelp-xmlfm-summary": "Output data in XML format (pretty-print in HTML).",
+
+ "api-format-title": "MediaWiki API result",
+ "api-format-prettyprint-header": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set <kbd>format=$2</kbd>.\n\nSee the [[mw:Special:MyLanguage/API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
+ "api-format-prettyprint-header-only-html": "This is an HTML representation intended for debugging, and is unsuitable for application use.\n\nSee the [[mw:Special:MyLanguage/API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
+ "api-format-prettyprint-header-hyperlinked": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set [$3 <kbd>format=$2</kbd>].\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
+ "api-format-prettyprint-status": "This response would be returned with HTTP status $1 $2.",
+
+ "api-login-fail-aborted": "Authentication requires user interaction, which is not supported by <kbd>action=login</kbd>. To be able to login with <kbd>action=login</kbd>, see [[Special:BotPasswords]]. To continue using main-account login, see <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-aborted-nobotpw": "Authentication requires user interaction, which is not supported by <kbd>action=login</kbd>. To log in, see <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-badsessionprovider": "Cannot log in when using $1.",
+ "api-login-fail-sameorigin": "Cannot log in when the same-origin policy is not applied.",
+
+ "api-pageset-param-titles": "A list of titles to work on.",
+ "api-pageset-param-pageids": "A list of page IDs to work on.",
+ "api-pageset-param-revids": "A list of revision IDs to work on.",
+ "api-pageset-param-generator": "Get the list of pages to work on by executing the specified query module.\n\n<strong>Note:</strong> Generator parameter names must be prefixed with a \"g\", see examples.",
+ "api-pageset-param-redirects-generator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>, and in pages returned by <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Convert titles to other variants if necessary. Only works if the wiki's content language supports variant conversion. Languages that support variant conversion include $1.",
+
+ "api-help-title": "MediaWiki API help",
+ "api-help-lead": "This is an auto-generated MediaWiki API documentation page.\n\nDocumentation and examples: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Main module",
+ "api-help-undocumented-module": "No documentation for module $1.",
+ "api-help-fallback-description": "$1",
+ "api-help-fallback-parameter": "$1",
+ "api-help-fallback-example": "$1",
+ "api-help-flags": "",
+ "api-help-flag-deprecated": "This module is deprecated.",
+ "api-help-flag-internal": "<strong>This module is internal or unstable.</strong> Its operation may change without notice.",
+ "api-help-flag-readrights": "This module requires read rights.",
+ "api-help-flag-writerights": "This module requires write rights.",
+ "api-help-flag-mustbeposted": "This module only accepts POST requests.",
+ "api-help-flag-generator": "This module can be used as a generator.",
+ "api-help-source": "Source: $1",
+ "api-help-source-unknown": "Source: <span class=\"apihelp-unknown\">unknown</span>",
+ "api-help-license": "License: [[$1|$2]]",
+ "api-help-license-noname": "License: [[$1|See link]]",
+ "api-help-license-unknown": "License: <span class=\"apihelp-unknown\">unknown</span>",
+ "api-help-help-urls": "",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
+ "api-help-param-deprecated": "Deprecated.",
+ "api-help-param-required": "This parameter is required.",
+ "api-help-datatypes-header": "Data types",
+ "api-help-datatypes": "Input to MediaWiki should be NFC-normalized UTF-8. MediaWiki may attempt to convert other input, but this may cause some operations (such as [[Special:ApiHelp/edit|edits]] with MD5 checks) to fail.\n\nSome parameter types in API requests need further explanation:\n;boolean\n:Boolean parameters work like HTML checkboxes: if the parameter is specified, regardless of value, it is considered true. For a false value, omit the parameter entirely.\n;timestamp\n:Timestamps may be specified in several formats. ISO 8601 date and time is recommended. All times are in UTC, any included timezone is ignored.\n:* ISO 8601 date and time, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (punctuation and <kbd>Z</kbd> are optional)\n:* ISO 8601 date and time with (ignored) fractional seconds, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (dashes, colons, and <kbd>Z</kbd> are optional)\n:* MediaWiki format, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Generic numeric format, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (optional timezone of <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, or <kbd>-<var>##</var></kbd> is ignored)\n:* EXIF format, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*RFC 2822 format (timezone may be omitted), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850 format (timezone may be omitted), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime format, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Seconds since 1970-01-01T00:00:00Z as a 1 to 13 digit integer (excluding <kbd>0</kbd>)\n:* The string <kbd>now</kbd>\n;alternative multiple-value separator\n:Parameters that take multiple values are normally submitted with the values separated using the pipe character, e.g. <kbd>param=value1|value2</kbd> or <kbd>param=value1%7Cvalue2</kbd>. If a value must contain the pipe character, use U+001F (Unit Separator) as the separator ''and'' prefix the value with U+001F, e.g. <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+ "api-help-param-type-limit": "Type: integer or <kbd>max</kbd>",
+ "api-help-param-type-integer": "Type: {{PLURAL:$1|1=integer|2=list of integers}}",
+ "api-help-param-type-boolean": "Type: boolean ([[Special:ApiHelp/main#main/datatypes|details]])",
+ "api-help-param-type-password": "",
+ "api-help-param-type-timestamp": "Type: {{PLURAL:$1|1=timestamp|2=list of timestamps}} ([[Special:ApiHelp/main#main/datatypes|allowed formats]])",
+ "api-help-param-type-user": "Type: {{PLURAL:$1|1=user name|2=list of user names}}",
+ "api-help-param-list": "{{PLURAL:$1|1=One of the following values|2=Values (separate with <kbd>{{!}}</kbd> or [[Special:ApiHelp/main#main/datatypes|alternative]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Must be empty|Can be empty, or $2}}",
+ "api-help-param-limit": "No more than $1 allowed.",
+ "api-help-param-limit2": "No more than $1 ($2 for bots) allowed.",
+ "api-help-param-integer-min": "The {{PLURAL:$1|1=value|2=values}} must be no less than $2.",
+ "api-help-param-integer-max": "The {{PLURAL:$1|1=value|2=values}} must be no greater than $3.",
+ "api-help-param-integer-minmax": "The {{PLURAL:$1|1=value|2=values}} must be between $2 and $3.",
+ "api-help-param-upload": "Must be posted as a file upload using multipart/form-data.",
+ "api-help-param-multi-separate": "Separate values with <kbd>|</kbd> or [[Special:ApiHelp/main#main/datatypes|alternative]].",
+ "api-help-param-multi-max": "Maximum number of values is {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} for bots).",
+ "api-help-param-multi-max-simple": "Maximum number of values is {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "To specify all values, use <kbd>$1</kbd>.",
+ "api-help-param-default": "Default: $1",
+ "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(empty)</span>",
+ "api-help-param-token": "A \"$1\" token retrieved from [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "For compatibility, the token used in the web UI is also accepted.",
+ "api-help-param-disabled-in-miser-mode": "Disabled due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Note:</strong> Due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]], using this may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
+ "api-help-param-direction": "In which direction to enumerate:\n;newer:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.",
+ "api-help-param-continue": "When more results are available, use this to continue.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(no description)</span>",
+ "api-help-param-maxbytes": "Cannot be longer than $1 {{PLURAL:$1|byte|bytes}}.",
+ "api-help-param-maxchars": "Cannot be longer than $1 {{PLURAL:$1|character|characters}}.",
+ "api-help-examples": "{{PLURAL:$1|Example|Examples}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permission|Permissions}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Granted to}}: $2",
+ "api-help-right-apihighlimits": "Use higher limits in API queries (slow queries: $1; fast queries: $2). The limits for slow queries also apply to multivalue parameters.",
+ "api-help-open-in-apisandbox": "<small>[open in sandbox]</small>",
+ "api-help-no-extended-description": "",
+
+ "api-help-authmanager-general-usage": "The general procedure to use this module is:\n# Fetch the fields available from <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> with <kbd>amirequestsfor=$4</kbd>, and a <kbd>$5</kbd> token from <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Present the fields to the user, and obtain their submission.\n# Post to this module, supplying <var>$1returnurl</var> and any relevant fields.\n# Check the <samp>status</samp> in the response.\n#* If you received <samp>PASS</samp> or <samp>FAIL</samp>, you're done. The operation either succeeded or it didn't.\n#* If you received <samp>UI</samp>, present the new fields to the user and obtain their submission. Then post to this module with <var>$1continue</var> and the relevant fields set, and repeat step 4.\n#* If you received <samp>REDIRECT</samp>, direct the user to the <samp>redirecttarget</samp> and wait for the return to <var>$1returnurl</var>. Then post to this module with <var>$1continue</var> and any fields passed to the return URL, and repeat step 4.\n#* If you received <samp>RESTART</samp>, that means the authentication worked but we don't have a linked user account. You might treat this as <samp>UI</samp> or as <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "Only use these authentication requests, by the <samp>id</samp> returned from <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> with <kbd>amirequestsfor=$1</kbd> or from a previous response from this module.",
+ "api-help-authmanagerhelper-request": "Use this authentication request, by the <samp>id</samp> returned from <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> with <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "Format to use for returning messages.",
+ "api-help-authmanagerhelper-mergerequestfields": "Merge field information for all authentication requests into one array.",
+ "api-help-authmanagerhelper-preservestate": "Preserve state from a previous failed login attempt, if possible.",
+ "api-help-authmanagerhelper-returnurl": "Return URL for third-party authentication flows, must be absolute. Either this or <var>$1continue</var> is required.\n\nUpon receiving a <samp>REDIRECT</samp> response, you will typically open a browser or web view to the specified <samp>redirecttarget</samp> URL for a third-party authentication flow. When that completes, the third party will send the browser or web view to this URL. You should extract any query or POST parameters from the URL and pass them as a <var>$1continue</var> request to this API module.",
+ "api-help-authmanagerhelper-continue": "This request is a continuation after an earlier <samp>UI</samp> or <samp>REDIRECT</samp> response. Either this or <var>$1returnurl</var> is required.",
+ "api-help-authmanagerhelper-additional-params": "This module accepts additional parameters depending on the available authentication requests. Use <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> with <kbd>amirequestsfor=$1</kbd> (or a previous response from this module, if applicable) to determine the requests available and the fields that they use.",
+
+ "apierror-allimages-redirect": "Use <kbd>gaifilterredir=nonredirects</kbd> instead of <var>redirects</var> when using <kbd>allimages</kbd> as a generator.",
+ "apierror-allpages-generator-redirects": "Use <kbd>gapfilterredir=nonredirects</kbd> instead of <var>redirects</var> when using <kbd>allpages</kbd> as a generator.",
+ "apierror-appendnotsupported": "Can't append to pages using content model $1.",
+ "apierror-articleexists": "The article you tried to create has been created already.",
+ "apierror-assertbotfailed": "Assertion that the user has the <code>bot</code> right failed.",
+ "apierror-assertnameduserfailed": "Assertion that the user is \"$1\" failed.",
+ "apierror-assertuserfailed": "Assertion that the user is logged in failed.",
+ "apierror-autoblocked": "Your IP address has been blocked automatically, because it was used by a blocked user.",
+ "apierror-badconfig-resulttoosmall": "The value of <code>$wgAPIMaxResultSize</code> on this wiki is too small to hold basic result information.",
+ "apierror-badcontinue": "Invalid continue param. You should pass the original value returned by the previous query.",
+ "apierror-baddiff": "The diff cannot be retrieved. One or both revisions do not exist or you do not have permission to view them.",
+ "apierror-baddiffto": "<var>$1diffto</var> must be set to a non-negative number, <kbd>prev</kbd>, <kbd>next</kbd> or <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "The requested format $1 is not supported for content model $2.",
+ "apierror-badformat": "The requested format $1 is not supported for content model $2 used by $3.",
+ "apierror-badgenerator-notgenerator": "Module <kbd>$1</kbd> cannot be used as a generator.",
+ "apierror-badgenerator-unknown": "Unknown <kbd>generator=$1</kbd>.",
+ "apierror-badip": "IP parameter is not valid.",
+ "apierror-badmd5": "The supplied MD5 hash was incorrect.",
+ "apierror-badmodule-badsubmodule": "The module <kbd>$1</kbd> does not have a submodule \"$2\".",
+ "apierror-badmodule-nosubmodules": "The module <kbd>$1</kbd> has no submodules.",
+ "apierror-badparameter": "Invalid value for parameter <var>$1</var>.",
+ "apierror-badquery": "Invalid query.",
+ "apierror-badtimestamp": "Invalid value \"$2\" for timestamp parameter <var>$1</var>.",
+ "apierror-badtoken": "Invalid CSRF token.",
+ "apierror-badupload": "File upload parameter <var>$1</var> is not a file upload; be sure to use <code>multipart/form-data</code> for your POST and include a filename in the <code>Content-Disposition</code> header.",
+ "apierror-badurl": "Invalid value \"$2\" for URL parameter <var>$1</var>.",
+ "apierror-baduser": "Invalid value \"$2\" for user parameter <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "U+001F multi-value separation may only be used for multi-valued parameters.",
+ "apierror-bad-watchlist-token": "Incorrect watchlist token provided. Please set a correct token in [[Special:Preferences]].",
+ "apierror-blockedfrommail": "You have been blocked from sending email.",
+ "apierror-blocked": "You have been blocked from editing.",
+ "apierror-botsnotsupported": "This interface is not supported for bots.",
+ "apierror-cannot-async-upload-file": "The parameters <var>async</var> and <var>file</var> cannot be combined. If you want asynchronous processing of your uploaded file, first upload it to stash (using the <var>stash</var> parameter) and then publish the stashed file asynchronously (using <var>filekey</var> and <var>async</var>).",
+ "apierror-cannotreauthenticate": "This action is not available as your identity cannot be verified.",
+ "apierror-cannotviewtitle": "You are not allowed to view $1.",
+ "apierror-cantblock-email": "You don't have permission to block users from sending email through the wiki.",
+ "apierror-cantblock": "You don't have permission to block users.",
+ "apierror-cantchangecontentmodel": "You don't have permission to change the content model of a page.",
+ "apierror-canthide": "You don't have permission to hide user names from the block log.",
+ "apierror-cantimport-upload": "You don't have permission to import uploaded pages.",
+ "apierror-cantimport": "You don't have permission to import pages.",
+ "apierror-cantoverwrite-sharedfile": "The target file exists on a shared repository and you do not have permission to override it.",
+ "apierror-cantsend": "You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email.",
+ "apierror-cantundelete": "Couldn't undelete: the requested revisions may not exist, or may have been undeleted already.",
+ "apierror-changeauth-norequest": "Failed to create change request.",
+ "apierror-chunk-too-small": "Minimum chunk size is $1 {{PLURAL:$1|byte|bytes}} for non-final chunks.",
+ "apierror-cidrtoobroad": "$1 CIDR ranges broader than /$2 are not accepted.",
+ "apierror-compare-no-title": "Cannot pre-save transform without a title. Try specifying <var>fromtitle</var> or <var>totitle</var>.",
+ "apierror-compare-nosuchfromsection": "There is no section $1 in the 'from' content.",
+ "apierror-compare-nosuchtosection": "There is no section $1 in the 'to' content.",
+ "apierror-compare-relative-to-nothing": "No 'from' revision for <var>torelative</var> to be relative to.",
+ "apierror-contentserializationexception": "Content serialization failed: $1",
+ "apierror-contenttoobig": "The content you supplied exceeds the article size limit of $1 {{PLURAL:$1|kilobyte|kilobytes}}.",
+ "apierror-copyuploadbaddomain": "Uploads by URL are not allowed from this domain.",
+ "apierror-copyuploadbadurl": "Upload not allowed from this URL.",
+ "apierror-create-titleexists": "Existing titles can't be protected with <kbd>create</kbd>.",
+ "apierror-csp-report": "Error processing CSP report: $1.",
+ "apierror-databaseerror": "[$1] Database query error.",
+ "apierror-deletedrevs-param-not-1-2": "The <var>$1</var> parameter cannot be used in modes 1 or 2.",
+ "apierror-deletedrevs-param-not-3": "The <var>$1</var> parameter cannot be used in mode 3.",
+ "apierror-emptynewsection": "Creating empty new sections is not possible.",
+ "apierror-emptypage": "Creating new, empty pages is not allowed.",
+ "apierror-exceptioncaught": "[$1] Exception caught: $2",
+ "apierror-filedoesnotexist": "File does not exist.",
+ "apierror-fileexists-sharedrepo-perm": "The target file exists on a shared repository. Use the <var>ignorewarnings</var> parameter to override it.",
+ "apierror-filenopath": "Cannot get local file path.",
+ "apierror-filetypecannotberotated": "File type cannot be rotated.",
+ "apierror-formatphp": "This response cannot be represented using <kbd>format=php</kbd>. See https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "The title for <kbd>$1</kbd> must be a file.",
+ "apierror-import-unknownerror": "Unknown error on import: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> may not be over $2 (set to $3) for bots or sysops.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> may not be over $2 (set to $3) for users.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> may not be less than $2 (set to $3).",
+ "apierror-invalidcategory": "The category name you entered is not valid.",
+ "apierror-invalid-chunk": "Offset plus current chunk is greater than claimed file size.",
+ "apierror-invalidexpiry": "Invalid expiry time \"$1\".",
+ "apierror-invalid-file-key": "Not a valid file key.",
+ "apierror-invalidlang": "Invalid language code for parameter <var>$1</var>.",
+ "apierror-invalidoldimage": "The <var>oldimage</var> parameter has an invalid format.",
+ "apierror-invalidparammix-cannotusewith": "The <kbd>$1</kbd> parameter cannot be used with <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "The <kbd>$1</kbd> parameter may only be used with <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> cannot be combined with the <var>oldid</var>, <var>pageid</var> or <var>page</var> parameters. Please use <var>title</var> and <var>text</var>.",
+ "apierror-invalidparammix": "The {{PLURAL:$2|parameters}} $1 can not be used together.",
+ "apierror-invalidsection": "The <var>section</var> parameter must be a valid section ID or <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "The SHA1Base36 hash provided is not valid.",
+ "apierror-invalidsha1hash": "The SHA1 hash provided is not valid.",
+ "apierror-invalidtitle": "Bad title \"$1\".",
+ "apierror-invalidurlparam": "Invalid value for <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Invalid username \"$1\".",
+ "apierror-invaliduserid": "User ID <var>$1</var> is not valid.",
+ "apierror-maxbytes": "Parameter <var>$1</var> cannot be longer than $2 {{PLURAL:$2|byte|bytes}}",
+ "apierror-maxchars": "Parameter <var>$1</var> cannot be longer than $2 {{PLURAL:$2|character|characters}}",
+ "apierror-maxlag-generic": "Waiting for a database server: $1 {{PLURAL:$1|second|seconds}} lagged.",
+ "apierror-maxlag": "Waiting for $2: $1 {{PLURAL:$1|second|seconds}} lagged.",
+ "apierror-mimesearchdisabled": "MIME search is disabled in Miser Mode.",
+ "apierror-missingcontent-pageid": "Missing content for page ID $1.",
+ "apierror-missingcontent-revid": "Missing content for revision ID $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|The parameter|At least one of the parameters}} $1 is required.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|The parameter|One of the parameters}} $1 is required.",
+ "apierror-missingparam": "The <var>$1</var> parameter must be set.",
+ "apierror-missingrev-pageid": "No current revision of page ID $1.",
+ "apierror-missingrev-title": "No current revision of title $1.",
+ "apierror-missingtitle-createonly": "Missing titles can only be protected with <kbd>create</kbd>.",
+ "apierror-missingtitle": "The page you specified doesn't exist.",
+ "apierror-missingtitle-byname": "The page $1 doesn't exist.",
+ "apierror-moduledisabled": "The <kbd>$1</kbd> module has been disabled.",
+ "apierror-multival-only-one-of": "{{PLURAL:$3|Only|Only one of}} $2 is allowed for parameter <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> may only be used with a single page.",
+ "apierror-mustbeloggedin-changeauth": "You must be logged in to change authentication data.",
+ "apierror-mustbeloggedin-generic": "You must be logged in.",
+ "apierror-mustbeloggedin-linkaccounts": "You must be logged in to link accounts.",
+ "apierror-mustbeloggedin-removeauth": "You must be logged in to remove authentication data.",
+ "apierror-mustbeloggedin-uploadstash": "The upload stash is only available to logged-in users.",
+ "apierror-mustbeloggedin": "You must be logged in to $1.",
+ "apierror-mustbeposted": "The <kbd>$1</kbd> module requires a POST request.",
+ "apierror-mustpostparams": "The following {{PLURAL:$2|parameter was|parameters were}} found in the query string, but must be in the POST body: $1.",
+ "apierror-noapiwrite": "Editing of this wiki through the API is disabled. Make sure the <code>$wgEnableWriteAPI=true;</code> statement is included in the wiki's <code>LocalSettings.php</code> file.",
+ "apierror-nochanges": "No changes were requested.",
+ "apierror-nodeleteablefile": "No such old version of the file.",
+ "apierror-no-direct-editing": "Direct editing via API is not supported for content model $1 used by $2.",
+ "apierror-noedit-anon": "Anonymous users can't edit pages.",
+ "apierror-noedit": "You don't have permission to edit pages.",
+ "apierror-noimageredirect-anon": "Anonymous users can't create image redirects.",
+ "apierror-noimageredirect": "You don't have permission to create image redirects.",
+ "apierror-nosuchlogid": "There is no log entry with ID $1.",
+ "apierror-nosuchpageid": "There is no page with ID $1.",
+ "apierror-nosuchrcid": "There is no recent change with ID $1.",
+ "apierror-nosuchrevid": "There is no revision with ID $1.",
+ "apierror-nosuchsection": "There is no section $1.",
+ "apierror-nosuchsection-what": "There is no section $1 in $2.",
+ "apierror-nosuchuserid": "There is no user with ID $1.",
+ "apierror-notarget": "You have not specified a valid target for this action.",
+ "apierror-notpatrollable": "The revision r$1 can't be patrolled as it's too old.",
+ "apierror-nouploadmodule": "No upload module set.",
+ "apierror-offline": "Could not proceed due to network connectivity issues. Make sure you have a working internet connection and try again.",
+ "apierror-opensearch-json-warnings": "Warnings cannot be represented in OpenSearch JSON format.",
+ "apierror-pagecannotexist": "Namespace doesn't allow actual pages.",
+ "apierror-pagedeleted": "The page has been deleted since you fetched its timestamp.",
+ "apierror-pagelang-disabled": "Changing the language of a page is not allowed on this wiki.",
+ "apierror-paramempty": "The parameter <var>$1</var> may not be empty.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> is only supported for wikitext content.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> is only supported for wikitext content. $1 uses content model $2.",
+ "apierror-pastexpiry": "Expiry time \"$1\" is in the past.",
+ "apierror-permissiondenied": "You don't have permission to $1.",
+ "apierror-permissiondenied-generic": "Permission denied.",
+ "apierror-permissiondenied-patrolflag": "You need the <code>patrol</code> or <code>patrolmarks</code> right to request the patrolled flag.",
+ "apierror-permissiondenied-unblock": "You don't have permission to unblock users.",
+ "apierror-prefixsearchdisabled": "Prefix search is disabled in Miser Mode.",
+ "apierror-promised-nonwrite-api": "The <code>Promise-Non-Write-API-Action</code> HTTP header cannot be sent to write-mode API modules.",
+ "apierror-protect-invalidaction": "Invalid protection type \"$1\".",
+ "apierror-protect-invalidlevel": "Invalid protection level \"$1\".",
+ "apierror-ratelimited": "You've exceeded your rate limit. Please wait some time and try again.",
+ "apierror-readapidenied": "You need read permission to use this module.",
+ "apierror-readonly": "The wiki is currently in read-only mode.",
+ "apierror-reauthenticate": "You have not authenticated recently in this session, please reauthenticate.",
+ "apierror-redirect-appendonly": "You have attempted to edit using the redirect-following mode, which must be used in conjuction with <kbd>section=new</kbd>, <var>prependtext</var>, or <var>appendtext</var>.",
+ "apierror-revdel-mutuallyexclusive": "The same field cannot be used in both <var>hide</var> and <var>show</var>.",
+ "apierror-revdel-needtarget": "A target title is required for this RevDel type.",
+ "apierror-revdel-paramneeded": "At least one value is required for <var>hide</var> and/or <var>show</var>.",
+ "apierror-revisions-badid": "No revision was found for parameter <var>$1</var>.",
+ "apierror-revisions-norevids": "The <var>revids</var> parameter may not be used with the list options (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var>, and <var>$1end</var>).",
+ "apierror-revisions-singlepage": "<var>titles</var>, <var>pageids</var> or a generator was used to supply multiple pages, but the <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var>, and <var>$1end</var> parameters may only be used on a single page.",
+ "apierror-revwrongpage": "r$1 is not a revision of $2.",
+ "apierror-searchdisabled": "<var>$1</var> search is disabled.",
+ "apierror-sectionreplacefailed": "Could not merge updated section.",
+ "apierror-sectionsnotsupported": "Sections are not supported for content model $1.",
+ "apierror-sectionsnotsupported-what": "Sections are not supported by $1.",
+ "apierror-show": "Incorrect parameter - mutually exclusive values may not be supplied.",
+ "apierror-siteinfo-includealldenied": "Cannot view all servers' info unless <var>$wgShowHostNames</var> is true.",
+ "apierror-sizediffdisabled": "Size difference is disabled in Miser Mode.",
+ "apierror-spamdetected": "Your edit was refused because it contained a spam fragment: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "You don't have permission to view the results of this special page.",
+ "apierror-stashedfilenotfound": "Could not find the file in the stash: $1.",
+ "apierror-stashedit-missingtext": "No stashed text found with the given hash.",
+ "apierror-stashexception": "$1",
+ "apierror-stashfailed-complete": "Chunked upload is already completed, check status for details.",
+ "apierror-stashfailed-nosession": "No chunked upload session with this key.",
+ "apierror-stashfilestorage": "Could not store upload in the stash: $1",
+ "apierror-stashinvalidfile": "Invalid stashed file.",
+ "apierror-stashnosuchfilekey": "No such filekey: $1.",
+ "apierror-stashpathinvalid": "File key of improper format or otherwise invalid: $1.",
+ "apierror-stashwrongowner": "Wrong owner: $1",
+ "apierror-stashzerolength": "File is of zero length, and could not be stored in the stash: $1.",
+ "apierror-systemblocked": "You have been blocked automatically by MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "Template expansion is only supported for wikitext content. $1 uses content model $2.",
+ "apierror-timeout": "The server did not respond within the expected time.",
+ "apierror-toofewexpiries": "$1 expiry {{PLURAL:$1|timestamp was|timestamps were}} provided where $2 {{PLURAL:$2|was|were}} needed.",
+ "apierror-unknownaction": "The action specified, <kbd>$1</kbd>, is not recognized.",
+ "apierror-unknownerror-editpage": "Unknown EditPage error: $1.",
+ "apierror-unknownerror-nocode": "Unknown error.",
+ "apierror-unknownerror": "Unknown error: \"$1\".",
+ "apierror-unknownformat": "Unrecognized format \"$1\".",
+ "apierror-unrecognizedparams": "Unrecognized {{PLURAL:$2|parameter|parameters}}: $1.",
+ "apierror-unrecognizedvalue": "Unrecognized value for parameter <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "Local file repository does not support querying all images.",
+ "apierror-upload-filekeyneeded": "Must supply a <var>filekey</var> when <var>offset</var> is non-zero.",
+ "apierror-upload-filekeynotallowed": "Cannot supply a <var>filekey</var> when <var>offset</var> is 0.",
+ "apierror-upload-inprogress": "Upload from stash already in progress.",
+ "apierror-upload-missingresult": "No result in status data.",
+ "apierror-urlparamnormal": "Could not normalize image parameters for $1.",
+ "apierror-writeapidenied": "You're not allowed to edit this wiki through the API.",
+
+ "apiwarn-alldeletedrevisions-performance": "For better performance when generating titles, set <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Could not parse <var>$1urlparam</var> for $2. Using only width and height.",
+ "apiwarn-badutf8": "The value passed for <var>$1</var> contains invalid or non-normalized data. Textual data should be valid, NFC-normalized Unicode without C0 control characters other than HT (\\t), LF (\\n), and CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "Check that symbols such as \"+\" in the token are properly percent-encoded in the URL.",
+ "apiwarn-compare-nocontentmodel": "No content model could be determined, assuming $1.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> has been deprecated. Please use <kbd>prop=deletedrevisions</kbd> or <kbd>list=alldeletedrevisions</kbd> instead.",
+ "apiwarn-deprecation-expandtemplates-prop": "Because no values have been specified for the <var>prop</var> parameter, a legacy format has been used for the output. This format is deprecated, and in the future, a default value will be set for the <var>prop</var> parameter, causing the new format to always be used.",
+ "apiwarn-deprecation-httpsexpected": "HTTP used when HTTPS was expected.",
+ "apiwarn-deprecation-login-botpw": "Main-account login via <kbd>action=login</kbd> is deprecated and may stop working without warning. To continue login with <kbd>action=login</kbd>, see [[Special:BotPasswords]]. To safely continue using main-account login, see <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "Main-account login via <kbd>action=login</kbd> is deprecated and may stop working without warning. To safely log in, see <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "Fetching a token via <kbd>action=login</kbd> is deprecated. Use <kbd>action=query&meta=tokens&type=login</kbd> instead.",
+ "apiwarn-deprecation-parameter": "The parameter <var>$1</var> has been deprecated.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> is deprecated since MediaWiki 1.28. Use <kbd>prop=headhtml</kbd> when creating new HTML documents, or <kbd>prop=modules|jsconfigvars</kbd> when updating a document client-side.",
+ "apiwarn-deprecation-purge-get": "Use of <kbd>action=purge</kbd> via GET is deprecated. Use POST instead.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> has been deprecated. Please use <kbd>$2</kbd> instead.",
+ "apiwarn-difftohidden": "Couldn't diff to r$1: content is hidden.",
+ "apiwarn-errorprinterfailed": "Error printer failed. Will retry without params.",
+ "apiwarn-errorprinterfailed-ex": "Error printer failed (will retry without params): $1",
+ "apiwarn-invalidcategory": "\"$1\" is not a category.",
+ "apiwarn-invalidtitle": "\"$1\" is not a valid title.",
+ "apiwarn-invalidxmlstylesheetext": "Stylesheet should have <code>.xsl</code> extension.",
+ "apiwarn-invalidxmlstylesheet": "Invalid or non-existent stylesheet specified.",
+ "apiwarn-invalidxmlstylesheetns": "Stylesheet should be in the {{ns:MediaWiki}} namespace.",
+ "apiwarn-moduleswithoutvars": "Property <kbd>modules</kbd> was set but not <kbd>jsconfigvars</kbd> or <kbd>encodedjsconfigvars</kbd>. Configuration variables are necessary for proper module usage.",
+ "apiwarn-notfile": "\"$1\" is not a file.",
+ "apiwarn-nothumb-noimagehandler": "Could not create thumbnail because $1 does not have an associated image handler.",
+ "apiwarn-parse-nocontentmodel": "No <var>title</var> or <var>contentmodel</var> was given, assuming $1.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var> used without <var>text</var>, and parsed page properties were requested. Did you mean to use <var>oldid</var> instead of <var>revid</var>?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> used without <var>text</var>, and parsed page properties were requested. Did you mean to use <var>page</var> instead of <var>title</var>?",
+ "apiwarn-redirectsandrevids": "Redirect resolution cannot be used together with the <var>revids</var> parameter. Any redirects the <var>revids</var> point to have not been resolved.",
+ "apiwarn-tokennotallowed": "Action \"$1\" is not allowed for the current user.",
+ "apiwarn-tokens-origin": "Tokens may not be obtained when the same-origin policy is not applied.",
+ "apiwarn-toomanyvalues": "Too many values supplied for parameter <var>$1</var>. The limit is $2.",
+ "apiwarn-truncatedresult": "This result was truncated because it would otherwise be larger than the limit of $1 bytes.",
+ "apiwarn-unclearnowtimestamp": "Passing \"$2\" for timestamp parameter <var>$1</var> has been deprecated. If for some reason you need to explicitly specify the current time without calculating it client-side, use <kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "Unrecognized {{PLURAL:$3|value|values}} for parameter <var>$1</var>: $2.",
+ "apiwarn-unsupportedarray": "Parameter <var>$1</var> uses unsupported PHP array syntax.",
+ "apiwarn-urlparamwidth": "Ignoring width value set in <var>$1urlparam</var> ($2) in favor of width value derived from <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
+ "apiwarn-validationfailed-badchars": "invalid characters in key (only <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, and <code>-</code> are allowed).",
+ "apiwarn-validationfailed-badpref": "not a valid preference.",
+ "apiwarn-validationfailed-cannotset": "cannot be set by this module.",
+ "apiwarn-validationfailed-keytoolong": "key too long (no more than $1 bytes allowed).",
+ "apiwarn-validationfailed": "Validation error for <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Security Warning</strong>: <var>$wgDebugAPI</var> is enabled.",
+
+ "api-feed-error-title": "Error ($1)",
+ "api-usage-docref": "See $1 for API usage.",
+ "api-usage-mailinglist-ref": "Subscribe to the mediawiki-api-announce mailing list at &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; for notice of API deprecations and breaking changes.",
+ "api-exception-trace": "$1 at $2($3)\n$4",
+ "api-credits-header": "Credits",
+ "api-credits": "API developers:\n* Yuri Astrakhan (creator, lead developer Sep 2006–Sep 2007)\n* Roan Kattouw (lead developer Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (lead developer 2013–present)\n\nPlease send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org\nor file a bug report at https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/eo.json b/www/wiki/includes/api/i18n/eo.json
new file mode 100644
index 00000000..e1c31612
--- /dev/null
+++ b/www/wiki/includes/api/i18n/eo.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin van der Vliet",
+ "Renardo"
+ ]
+ },
+ "apihelp-main-param-format": "La formo de la eligaĵo.",
+ "apihelp-block-summary": "Bloki uzanton.",
+ "apihelp-block-param-user": "Salutnomo, IP-adreso aŭ IP-adresa intervalo forbarota.",
+ "apihelp-block-param-expiry": "Eksvalidiĝa tempo. Ĝi povas esti relativa (ekz. <kbd>5 months</kbd> aŭ <kbd>2 weeks</kbd> aŭ absoluta (ekz. <kbd>2014-09-18T12:34:56Z</kbd>). Se vi indikas <kbd>infinite</kbd> (senfine), <kbd>indefinite</kbd> (nedifinite) aŭ <kbd>never</kbd> (neniam), la forbaro neniam eksvalidiĝos.",
+ "apihelp-createaccount-param-name": "Uzantnomo.",
+ "apihelp-delete-summary": "Forigi paĝon.",
+ "apihelp-edit-param-minor": "Redakteto.",
+ "apihelp-edit-example-edit": "Redakti paĝon.",
+ "apihelp-feedrecentchanges-param-hideminor": "Kaŝi redaktetojn.",
+ "apihelp-feedrecentchanges-param-hidebots": "Kaŝi robotajn ŝanĝojn.",
+ "apihelp-feedrecentchanges-param-hideanons": "Kaŝi redaktojn de anonimuloj.",
+ "apihelp-feedrecentchanges-param-hideliu": "Kaŝi redaktojn de ensalutintaj uzantoj.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Kaŝi reviziitajn ŝanĝojn.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Kaŝi ŝanĝojn faritajn de la nuna uzanto.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Kaŝi ŝanĝojn de kategoria aneco.",
+ "apihelp-feedrecentchanges-example-simple": "Montri ĵusajn ŝanĝojn.",
+ "apihelp-filerevert-summary": "Restarigi malnovan version de dosiero.",
+ "apihelp-filerevert-param-comment": "Alŝuta komento.",
+ "apihelp-login-param-name": "Uzantnomo.",
+ "apihelp-login-param-password": "Pasvorto.",
+ "apihelp-login-example-login": "Ensaluti.",
+ "apihelp-userrights-param-user": "Uzantnomo."
+}
diff --git a/www/wiki/includes/api/i18n/es.json b/www/wiki/includes/api/i18n/es.json
new file mode 100644
index 00000000..0816ed77
--- /dev/null
+++ b/www/wiki/includes/api/i18n/es.json
@@ -0,0 +1,1655 @@
+{
+ "@metadata": {
+ "authors": [
+ "Macofe",
+ "Effy",
+ "Alan",
+ "Fitoschido",
+ "JasterTDC",
+ "Edslov",
+ "Carlos Cristia",
+ "Ryo567",
+ "Csbotero",
+ "Chris TR",
+ "Ncontinanza",
+ "Poco a poco",
+ "YoViajo",
+ "Eloy",
+ "AlvaroMolina",
+ "Ciencia Al Poder",
+ "Lemondoge",
+ "Mgpena",
+ "Rubentl134",
+ "2axterix2",
+ "Dgstranz",
+ "Copper12",
+ "Irus",
+ "Hamilton Abreu",
+ "Pompilos",
+ "Igv",
+ "Fortega",
+ "Luzcaru",
+ "Javiersanp",
+ "KATRINE1992"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> Todas las funciones mostradas en esta página deberían estar funcionando, pero la API aún está en desarrollo activo, y puede cambiar en cualquier momento. Suscribase a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] para aviso de actualizaciones.\n\n<strong>Erroneous requests:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave \"MediaWiki-API-Error\" y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para más información ver [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testing:</strong> Para facilitar la comprobación de las solicitudes de API, consulte [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Qué acción se realizará.",
+ "apihelp-main-param-format": "El formato de la salida.",
+ "apihelp-main-param-maxlag": "El retardo máximo puede utilizarse cuando MediaWiki se instala en una agrupación replicada de bases de datos. Para guardar las acciones que causan más retardo de replicación de sitio, este parámetro puede hacer que el cliente espere hasta que el retardo de replicación sea menor que el valor especificado. En caso de un retardo excesivo, se devuelve el código de error <samp>maxlag</samp> con un mensaje como <samp>Esperando a $host: $lag segundos de retardo</samp>.<br />Consulta [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: parámetro Maxlag]] para más información.",
+ "apihelp-main-param-smaxage": "Establece la cabecera HTTP <code>s-maxage</code> de control de antememoria a esta cantidad de segundos. Los errores nunca se almacenan en la antememoria.",
+ "apihelp-main-param-maxage": "Establece la cabecera HTTP <code>max-age</code> de control de antememoria a esta cantidad de segundos. Los errores nunca se almacenan en la antememoria.",
+ "apihelp-main-param-assert": "Comprobar que el usuario haya iniciado sesión si el valor es <kbd>user</kbd> o si tiene el permiso de bot si es <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Verificar el usuario actual es el usuario nombrado.",
+ "apihelp-main-param-requestid": "Cualquier valor dado aquí se incluirá en la respuesta. Se puede utilizar para distinguir solicitudes.",
+ "apihelp-main-param-servedby": "Incluir el nombre del host que ha servido la solicitud en los resultados.",
+ "apihelp-main-param-curtimestamp": "Incluir la marca de tiempo actual en el resultado.",
+ "apihelp-main-param-responselanginfo": "Incluye los idiomas utilizados para <var>uselang</var> y <var>errorlang</var> en el resultado.",
+ "apihelp-main-param-origin": "Cuando se accede a la API usando una petición AJAX de distinto dominio (CORS), se establece este valor al dominio de origen. Debe ser incluido en cualquier petición pre-vuelo, y por lo tanto debe ser parte de la URI de la petición (no del cuerpo POST).\n\nEn las peticiones con autenticación, debe coincidir exactamente con uno de los orígenes de la cabecera <code>Origin</code>, por lo que debería ser algo como <kbd>https://en.wikipedia.org</kbd> o <kbd>https://meta.wikimedia.org</kbd>. Si este parámetro no coincide con la cabecera <code>Origin</code>, se devolverá una respuesta 403. Si este parámetro coincide con la cabecera <code>Origin</code> y el origen está en la lista blanca, se creará una cabecera <code>Access-Control-Allow-Origin</code>.\n\nEn las peticiones sin autenticación, introduce el valor <kbd>*</kbd>. Esto creará una cabecera <code>Access-Control-Allow-Origin</code>, pero el valor de <code>Access-Control-Allow-Credentials</code> será <code>false</code> y todos los datos que dependan del usuario estarán restringidos.",
+ "apihelp-main-param-uselang": "El idioma que se utilizará para las traducciones de mensajes. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> con <kbd>siprop=languages</kbd> devuelve una lista de códigos de idiomas. También puedes introducir <kbd>user</kbd> para usar la preferencia de idioma del usuario actual, o <kbd>content</kbd> para usar el idioma de contenido de este wiki.",
+ "apihelp-main-param-errorformat": "Formato utilizado para la salida de texto de avisos y errores.\n; plaintext: Wikitexto en el que se han eliminado las etiquetas HTML y reemplazado las entidades.\n; wikitext: Wikitexto sin analizar.\n; html: HTML.\n; raw: Clave del mensaje y parámetros.\n; none: Ninguna salida de texto, solo códigos de error.\n; bc: Formato empleado en versiones de MediaWiki anteriores a la 1.29. No se tienen en cuenta <var>errorlang</var> y <var>errorsuselocal</var>.",
+ "apihelp-main-param-errorlang": "Idioma empleado para advertencias y errores. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> con <kbd>siprop=languages</kbd> devuelve una lista de códigos de idioma. Puedes especificar <kbd>content</kbd> para utilizar el idioma del contenido de este wiki o <kbd>uselang</kbd> para utilizar el valor del parámetro <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "Si se da, los textos de error emplearán mensajes localmente personalizados del espacio de nombres {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "Bloquear a un usuario.",
+ "apihelp-block-param-user": "Nombre de usuario, dirección IP o intervalo de IP que quieres bloquear. No se puede utilizar junto con <var>$1userid</var>",
+ "apihelp-block-param-userid": "ID de usuario para bloquear. No se puede utilizar junto con <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Fecha de expiración. Puede ser relativa (por ejemplo, <kbd>5 months</kbd> o <kbd>2 weeks</kbd>) o absoluta (por ejemplo, <kbd>2014-09-18T12:34:56Z</kbd>). Si se establece en <kbd>infinite</kbd>, <kbd>indefinite</kbd>, o <kbd>never</kbd>, el bloqueo será permanente.",
+ "apihelp-block-param-reason": "Razón para el bloqueo.",
+ "apihelp-block-param-anononly": "Bloquear solo usuarios anónimos (es decir, desactivar ediciones anónimas de esta dirección IP).",
+ "apihelp-block-param-nocreate": "Prevenir la creación de cuentas.",
+ "apihelp-block-param-autoblock": "Bloquear automáticamente la última dirección IP y todas las direcciones IP que traten de iniciar sesión posteriormente.",
+ "apihelp-block-param-noemail": "Evitar que el usuario envíe correos a través de la wiki (es necesario el derecho <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Ocultar el nombre de usuario del registro de bloqueo (es necesario el derecho <coɗe>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Permitir que el usuario edite su propia página de discusión (depende de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Si la cuenta ya está bloqueada, sobrescribir el bloqueo existente.",
+ "apihelp-block-param-watchuser": "Vigilar las páginas de usuario y de discusión del usuario o de la dirección IP.",
+ "apihelp-block-param-tags": "Cambiar las etiquetas que aplicar a la entrada en el registro de bloqueos.",
+ "apihelp-block-example-ip-simple": "Bloquear la dirección IP <kbd>192.0.2.5</kbd> durante 3 días por el motivo <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquear al usuario <kbd>Vandal</kbd> indefinidamente con el motivo <kbd>Vandalism</kbd> y evitar que se cree nuevas cuentas o envíe correos.",
+ "apihelp-changeauthenticationdata-summary": "Cambiar los datos de autentificación para el usuario actual.",
+ "apihelp-changeauthenticationdata-example-password": "Intento para cambiar la contraseña del usuario actual a <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Comprueba la validez de una ficha desde <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo de ficha a probar.",
+ "apihelp-checktoken-param-token": "Ficha a probar.",
+ "apihelp-checktoken-param-maxtokenage": "Duración máxima de la ficha, en segundos.",
+ "apihelp-checktoken-example-simple": "Probar la validez de una ficha <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Limpia la marca <code>hasmsg</code> del usuario actual.",
+ "apihelp-clearhasmsg-example-1": "Limpiar la marca <code>hasmsg</code> del usuario actual.",
+ "apihelp-clientlogin-summary": "Entrar en wiki usando el flujo interactivo.",
+ "apihelp-clientlogin-example-login": "Comenzar el proceso para iniciar sesión en el wiki como usuario <kbd>Example</kbd> con la contraseña <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continuar el inicio de sesión después de una respuesta de la <samp>UI</samp> a la autenticación de dos pasos, en la que devuelve un <var>OATHToken</var> de <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Obtener la diferencia entre 2 páginas.",
+ "apihelp-compare-extended-description": "Se debe pasar un número de revisión, un título de página o una ID tanto desde \"de\" hasta \"a\".",
+ "apihelp-compare-param-fromtitle": "Primer título para comparar",
+ "apihelp-compare-param-fromid": "ID de la primera página a comparar.",
+ "apihelp-compare-param-fromrev": "Primera revisión para comparar.",
+ "apihelp-compare-param-fromsection": "Solamente usar la sección especificada del contenido 'from' especificado.",
+ "apihelp-compare-param-totitle": "Segundo título para comparar.",
+ "apihelp-compare-param-toid": "Segunda identificador de página para comparar.",
+ "apihelp-compare-param-torev": "Segunda revisión para comparar.",
+ "apihelp-compare-param-tosection": "Solamente usar la sección especificada del contenido 'to' especificado.",
+ "apihelp-compare-param-prop": "Cuáles fragmentos de información se obtendrán.",
+ "apihelp-compare-paramvalue-prop-diff": "El HTML de las diferencias.",
+ "apihelp-compare-paramvalue-prop-diffsize": "El tamaño del HTML de las diferencias, en bytes.",
+ "apihelp-compare-example-1": "Crear una diferencia entre las revisiones 1 y 2.",
+ "apihelp-createaccount-summary": "Crear una nueva cuenta de usuario.",
+ "apihelp-createaccount-param-preservestate": "Si <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> devolvió true (verdadero) para <samp>hasprimarypreservedstate</samp>, deberían omitirse las peticiones marcadas como <samp>primary-required</samp>. Si devolvió un valor no vacío para <samp>preservedusername</samp>, se debe usar ese nombre de usuario en el parámetro <var>username</var>.",
+ "apihelp-createaccount-example-create": "Empezar el proceso de creación del usuario <kbd>Example</kbd> con la contraseña <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Nombre de usuario.",
+ "apihelp-createaccount-param-password": "Contraseña (ignorada si está establecido <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Dominio de autenticación externa (opcional).",
+ "apihelp-createaccount-param-token": "La clave de creación de cuenta se obtiene en la primera solicitud.",
+ "apihelp-createaccount-param-email": "Dirección de correo electrónico del usuario (opcional).",
+ "apihelp-createaccount-param-realname": "Nombre verdadero del usuario (opcional).",
+ "apihelp-createaccount-param-mailpassword": "Si está puesto cualquier valor se enviará una contraseña aleatoria al usuario.",
+ "apihelp-createaccount-param-reason": "Motivo opcional por el que crear una cuenta puesta en los registros.",
+ "apihelp-createaccount-param-language": "Código de idioma a establecer como predeterminado para el usuario (opcional, predeterminado al contenido del idioma).",
+ "apihelp-createaccount-example-pass": "Crear usuario <kbd>testuser</kbd> con la contraseña <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Crear usuario <kbd>testmailuser</kbd> y enviar una contraseña generada aleatoriamente.",
+ "apihelp-cspreport-summary": "Utilizado por los navegadores para informar de violaciones a la normativa de seguridad de contenidos. Este módulo no debe usarse nunca, excepto cuando se usa automáticamente por un navegador web compatible con CSP.",
+ "apihelp-cspreport-param-reportonly": "Marcar como informe proveniente de una normativa de vigilancia, no una impuesta",
+ "apihelp-cspreport-param-source": "Qué generó la cabecera CSP que provocó este informe",
+ "apihelp-delete-summary": "Borrar una página.",
+ "apihelp-delete-param-title": "Título de la página a eliminar. No se puede utilizar junto a <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID de la página a eliminar. No se puede utilizar junto a <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Motivo de la eliminación. Si no se especifica, se generará uno automáticamente.",
+ "apihelp-delete-param-tags": "Cambio de etiquetas para aplicar a la entrada en la eliminación del registro.",
+ "apihelp-delete-param-watch": "Añadir esta página a la lista de seguimiento del usuario actual.",
+ "apihelp-delete-param-watchlist": "Añadir o quitar incondicionalmente la página de la lista de seguimiento del usuario actual, usar preferencias o no cambiar el estado de seguimiento.",
+ "apihelp-delete-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
+ "apihelp-delete-param-oldimage": "El nombre de la imagen antigua es proporcionado conforme a lo dispuesto por [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Borrar <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> con el motivo <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Se desactivó este módulo.",
+ "apihelp-edit-summary": "Crear y editar páginas.",
+ "apihelp-edit-param-title": "Título de la página a editar. No se puede utilizar junto a <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID de la página a editar. No se puede utilizar junto a <var>$1title</var>.",
+ "apihelp-edit-param-section": "Número de la sección. <kbd>0</kbd> para una sección superior, <kbd>new</kbd> para una sección nueva.",
+ "apihelp-edit-param-sectiontitle": "El título de una sección nueva.",
+ "apihelp-edit-param-text": "Contenido de la página.",
+ "apihelp-edit-param-summary": "Editar resumen. Además de la sección del título cuando $1section=new y $1sectiontitle no están establecidos.",
+ "apihelp-edit-param-tags": "Cambia las etiquetas para aplicarlas a la revisión.",
+ "apihelp-edit-param-minor": "Edición menor.",
+ "apihelp-edit-param-notminor": "Edición no menor.",
+ "apihelp-edit-param-bot": "Marcar esta edición como edición de bot.",
+ "apihelp-edit-param-basetimestamp": "Marca de tiempo de la revisión base, usada para detectar conflictos de edición. Se puede obtener mediante [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]",
+ "apihelp-edit-param-starttimestamp": "Marca de tiempo de cuando empezó el proceso de edición, usada para detectar conflictos de edición. Se puede obtener un valor apropiado usando <var>[[Special:ApiHelp/main|curtimestamp]]</var> cuando comiences el proceso de edición (por ejemplo, al cargar el contenido de la página por editar).",
+ "apihelp-edit-param-recreate": "Reemplazar los errores acerca de la página de haber sido eliminados en el ínterin.",
+ "apihelp-edit-param-createonly": "No editar la página si ya existe.",
+ "apihelp-edit-param-nocreate": "Producir un error si la página no existe.",
+ "apihelp-edit-param-watch": "Añadir la página a la lista de seguimiento del usuario actual.",
+ "apihelp-edit-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
+ "apihelp-edit-param-watchlist": "Incondicionalmente añadir o eliminar la página de lista del usuario actual, utilice referencias o no cambiar el reloj.",
+ "apihelp-edit-param-md5": "El hash MD5 del parámetro $1text, o los parámetros concatenados $1prependtext y $1appendtext. Si se establece, la edición no se hará a menos que el hash sea correcto.",
+ "apihelp-edit-param-prependtext": "Añadir este texto al principio de la página. Reemplaza $1text.",
+ "apihelp-edit-param-appendtext": "Añadir este texto al principio de la página. Reemplaza $1text.\n\nUtiliza $1section=new para añadir una nueva sección, en lugar de este parámetro.",
+ "apihelp-edit-param-undo": "Deshacer esta revisión. Reemplaza $1text, $1prependtext y $1appendtext.",
+ "apihelp-edit-param-undoafter": "Deshacer todas las revisiones desde $1undo a esta. Si no está establecido solo se deshace una revisión.",
+ "apihelp-edit-param-redirect": "Resolver redirecciones automáticamente.",
+ "apihelp-edit-param-contentformat": "Formato de serialización de contenido utilizado para el texto de entrada.",
+ "apihelp-edit-param-contentmodel": "Modelo de contenido del nuevo contenido.",
+ "apihelp-edit-param-token": "La clave debe enviarse siempre como el último parámetro o, al menos, después del parámetro $1text.",
+ "apihelp-edit-example-edit": "Editar una página",
+ "apihelp-edit-example-prepend": "Anteponer <kbd>_&#95;NOTOC_&#95;</kbd> a una página.",
+ "apihelp-edit-example-undo": "Deshacer intervalo de revisiones 13579-13585 con resumen automático",
+ "apihelp-emailuser-summary": "Enviar un mensaje de correo electrónico a un usuario.",
+ "apihelp-emailuser-param-target": "Cuenta de usuario destinatario.",
+ "apihelp-emailuser-param-subject": "Cabecera de asunto.",
+ "apihelp-emailuser-param-text": "Cuerpo del mensaje.",
+ "apihelp-emailuser-param-ccme": "Enviarme una copia de este mensaje.",
+ "apihelp-emailuser-example-email": "Enviar un correo al usuario <kbd>WikiSysop</kbd> con el texto <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Expande todas las plantillas en wikitexto.",
+ "apihelp-expandtemplates-param-title": "Título de la página.",
+ "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
+ "apihelp-expandtemplates-param-revid": "Id. de revisión, para <code><nowiki>{{REVISIONID}}</nowiki></code> y variables similares.",
+ "apihelp-expandtemplates-param-prop": "Qué elementos de información se utilizan para llegar.\n\nTenga en cuenta que si no se seleccionan los valores, el resultado contendrá el wikitexto, pero la salida será en un formato obsoleto.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "El wikitexto expandido.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Cualesquiera categorías presentes en la entrada que no están representadas en salida de wikitexto.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Propiedades de página definidas por palabras mágicas en el wikitexto.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Si la salida es volátil y no debe ser reutilizada en otro lugar dentro de la página.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "El tiempo máximo tras el cual deberían invalidarse los resultados en caché.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Todos los módulos ResourceLoader que las funciones del analizador sintáctico hayan solicitado añadir a la salida. Debe solicitarse <kbd>jsconfigvars</kbd> o bien <kbd>encodedjsconfigvars</kbd> junto con <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Da las variables de configuración JavaScript específicas para la página.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Da las variables de configuración JavaScript específicas para la página como una cadena JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "El árbol XML analiza el árbol de la entrada.",
+ "apihelp-expandtemplates-param-includecomments": "Incluir o no los comentarios HTML en la salida.",
+ "apihelp-expandtemplates-param-generatexml": "Generar un árbol de análisis XML (remplazado por $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expandir el wikitexto <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Devuelve el suministro de contribuciones de un usuario.",
+ "apihelp-feedcontributions-param-feedformat": "El formato del suministro.",
+ "apihelp-feedcontributions-param-user": "De qué usuarios recibir contribuciones.",
+ "apihelp-feedcontributions-param-namespace": "Espacio de nombre para filtrar las contribuciones.",
+ "apihelp-feedcontributions-param-year": "A partir del año (y anteriores).",
+ "apihelp-feedcontributions-param-month": "A partir del mes (y anteriores).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrar las contribuciones que tienen estas etiquetas.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostrar solo las contribuciones borradas.",
+ "apihelp-feedcontributions-param-toponly": "Mostrar solo ediciones que son últimas revisiones.",
+ "apihelp-feedcontributions-param-newonly": "Mostrar solo ediciones que son creaciones de páginas.",
+ "apihelp-feedcontributions-param-hideminor": "Ocultar ediciones menores.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostrar la diferencia de tamaño entre revisiones.",
+ "apihelp-feedcontributions-example-simple": "Devolver las contribuciones del usuario <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Devuelve un suministro de cambios recientes.",
+ "apihelp-feedrecentchanges-param-feedformat": "El formato del suministro.",
+ "apihelp-feedrecentchanges-param-namespace": "Espacio de nombres al cual limitar los resultados.",
+ "apihelp-feedrecentchanges-param-invert": "Todos los espacios de nombres menos el que está seleccionado.",
+ "apihelp-feedrecentchanges-param-associated": "Incluir el espacio de nombres asociado (discusión o principal).",
+ "apihelp-feedrecentchanges-param-days": "Días a los que limitar los resultados.",
+ "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados que devolver.",
+ "apihelp-feedrecentchanges-param-from": "Mostrar los cambios realizados a partir de entonces.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ocultar los cambios realizados por bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ocultar los cambios realizados por usuarios anónimos.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ocultar los cambios realizados por usuarios registrados.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios verificados.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar los cambios realizados por el usuario actual.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Ocultar los cambios de pertenencia a categorías.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiquetas.",
+ "apihelp-feedrecentchanges-param-target": "Mostrar solo los cambios en las páginas enlazadas en esta.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Mostrar los cambios en páginas enlazadas con la página seleccionada.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar los cambios recientes.",
+ "apihelp-feedrecentchanges-example-30days": "Mostrar los cambios recientes limitados a 30 días.",
+ "apihelp-feedwatchlist-summary": "Devuelve el suministro de una lista de seguimiento.",
+ "apihelp-feedwatchlist-param-feedformat": "El formato del suministro.",
+ "apihelp-feedwatchlist-param-hours": "Listar las páginas modificadas desde estas horas hasta ahora.",
+ "apihelp-feedwatchlist-param-linktosections": "Enlazar directamente a las secciones cambiadas de ser posible.",
+ "apihelp-feedwatchlist-example-default": "Mostrar el suministro de la lista de seguimiento.",
+ "apihelp-feedwatchlist-example-all6hrs": "Mostrar todos los cambios en páginas vigiladas en las últimas 6 horas.",
+ "apihelp-filerevert-summary": "Revertir el archivo a una versión anterior.",
+ "apihelp-filerevert-param-filename": "Nombre de archivo final, sin el prefijo Archivo:",
+ "apihelp-filerevert-param-comment": "Comentario de carga.",
+ "apihelp-filerevert-param-archivename": "Nombre del archivo de la revisión para deshacerla.",
+ "apihelp-filerevert-example-revert": "Devolver <kbd>Wiki.png</kbd> a la versión del <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Mostrar la ayuda para los módulos especificados.",
+ "apihelp-help-param-modules": "Módulos para los que mostrar ayuda (valores de los parámetros <var>action</var> y <var>format</var> o <kbd>main</kbd>). Se pueden especificar submódulos con un <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Incluir ayuda para submódulos del módulo con nombre.",
+ "apihelp-help-param-recursivesubmodules": "Incluir ayuda para submódulos recursivamente.",
+ "apihelp-help-param-helpformat": "Formato de salida de la ayuda.",
+ "apihelp-help-param-wrap": "Envolver el producto en una estructura de respuesta de la API estándar.",
+ "apihelp-help-param-toc": "Incluir un sumario en la salida HTML.",
+ "apihelp-help-example-main": "Ayuda del módulo principal",
+ "apihelp-help-example-submodules": "Ayuda para <kbd>action=query</kbd> y todos sus submódulos.",
+ "apihelp-help-example-recursive": "Toda la ayuda en una página",
+ "apihelp-help-example-help": "Ayuda del módulo de ayuda en sí",
+ "apihelp-help-example-query": "Ayuda para dos submódulos de consulta.",
+ "apihelp-imagerotate-summary": "Girar una o más imágenes.",
+ "apihelp-imagerotate-param-rotation": "Grados que rotar una imagen en sentido horario.",
+ "apihelp-imagerotate-param-tags": "Etiquetas que añadir a la entrada en el registro de subidas.",
+ "apihelp-imagerotate-example-simple": "Rotar <kbd>File:Example.png</kbd> <kbd>90</kbd> grados.",
+ "apihelp-imagerotate-example-generator": "Rotar todas las imágenes en <kbd>Category:Flip</kbd> <kbd>180</kbd> grados.",
+ "apihelp-import-summary": "Importar una página desde otra wiki, o desde un archivo XML.",
+ "apihelp-import-extended-description": "Tenga en cuenta que el HTTP POST debe hacerse como una carga de archivos (es decir, el uso de multipart/form-data) al enviar un archivo para el parámetro <var>xml</var>.",
+ "apihelp-import-param-summary": "Resumen de importación de entrada del registro.",
+ "apihelp-import-param-xml": "Se cargó el archivo XML.",
+ "apihelp-import-param-interwikiprefix": "Para importaciones cargadas: el prefijo de interwiki debe aplicarse a los nombres de usuario desconocidos (y a los conocidos si se define <var>$1assignknownusers</var>).",
+ "apihelp-import-param-assignknownusers": "Asignar ediciones a usuarios locales cuando sus nombres de usuario existan localmente.",
+ "apihelp-import-param-interwikisource": "Para importaciones interwiki: wiki desde la que importar.",
+ "apihelp-import-param-interwikipage": "Para importaciones interwiki: página a importar.",
+ "apihelp-import-param-fullhistory": "Para importaciones interwiki: importar todo el historial, no solo la versión actual.",
+ "apihelp-import-param-templates": "Para importaciones interwiki: importar también todas las plantillas incluidas.",
+ "apihelp-import-param-namespace": "Importar a este espacio de nombres. No puede usarse simultáneamente con <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importar como subpágina de esta página. No puede usarse simultáneamente con <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Cambiar las etiquetas que aplicar a la entrada en el registro de importaciones y a la revisión nula de las páginas importadas.",
+ "apihelp-import-example-import": "Importar [[meta:Help:ParserFunctions]] al espacio de nombres 100 con todo el historial.",
+ "apihelp-linkaccount-summary": "Vincular una cuenta de un proveedor de terceros para el usuario actual.",
+ "apihelp-linkaccount-example-link": "Iniciar el proceso de vincular a una cuenta de <kbd>Ejemplo</kbd>.",
+ "apihelp-login-summary": "Iniciar sesión y obtener las cookies de autenticación.",
+ "apihelp-login-extended-description": "Esta acción solo se debe utilizar en combinación con [[Special:BotPasswords]]; para la cuenta de inicio de sesión no se utiliza y puede fallar sin previo aviso. Para iniciar la sesión de forma segura a la cuenta principal, utilice <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Esta acción esta obsoleta y puede fallar sin previo aviso. Para conectarse de forma segura, utilice <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Nombre de usuario.",
+ "apihelp-login-param-password": "Contraseña.",
+ "apihelp-login-param-domain": "Dominio (opcional).",
+ "apihelp-login-param-token": "La clave de inicio de sesión se obtiene en la primera solicitud.",
+ "apihelp-login-example-gettoken": "Recuperar clave de inicio de sesión.",
+ "apihelp-login-example-login": "Acceder.",
+ "apihelp-logout-summary": "Salir y vaciar los datos de la sesión.",
+ "apihelp-logout-example-logout": "Cerrar la sesión del usuario actual.",
+ "apihelp-managetags-summary": "Realizar tareas de administración relacionadas con el cambio de etiquetas.",
+ "apihelp-managetags-param-operation": "Qué operación realizar:\n;create: Crear una nueva etiqueta de cambio de uso manual.\n;delete: Eliminar una etiqueta de cambio de la base de datos, eliminando la etiqueta de todas las revisiones, cambios en entradas recientes y registros en los que se ha utilizado.\n;activate: Activar una etiqueta de cambio, permitiendo a los usuarios aplicarla manualmente.\n;deactivate: Desactivar una etiqueta de cambio, evitando que los usuarios la apliquen manualmente.",
+ "apihelp-managetags-param-tag": "Etiqueta para crear, eliminar, activar o desactivar. Para crear una etiqueta, esta debe no existir. Para eliminarla, debe existir. Para activarla, debe existir y no estar en uso por ninguna extensión. Para desactivarla, debe estar activada y definida manualmente.",
+ "apihelp-managetags-param-reason": "Un motivo opcional para crear, eliminar, activar o desactivar la etiqueta.",
+ "apihelp-managetags-param-ignorewarnings": "Ya sea para ignorar las advertencias que se emiten durante la operación.",
+ "apihelp-managetags-param-tags": "Cambiar las etiquetas que aplicar a la entrada en el registro de administración de etiquetas.",
+ "apihelp-managetags-example-create": "Crear una etiqueta llamada <kbd>spam</kbd> con el motivo <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Eliminar la etiqueta <kbd>vandlaism</kbd> con el motivo <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Activar una etiqueta llamada <kbd>spam</kbd> con el motivo <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Desactivar una etiqueta llamada <kbd>spam</kbd> con el motivo <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Fusionar historiales de páginas.",
+ "apihelp-mergehistory-param-from": "El título de la página desde la que se combinará la historia. No se puede utilizar junto con <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "Page ID de la página desde la que se combinara el historial. No se puede utilizar junto con <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "El título de la página desde la que se combinara el historial. No se puede utilizar junto con <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "Page ID de la página desde la que se combinara el historial. No se puede utilizar junto con <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "La marca de tiempo de las revisiones se moverá del historial de la página de origen al historial de la página de destino. Si se omite, todo el historial de la página de la página de origen se fusionará en la página de destino.",
+ "apihelp-mergehistory-param-reason": "Motivo para la fusión del historial.",
+ "apihelp-mergehistory-example-merge": "Combinar todo el historial de <kbd>Oldpage</kbd> en <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Combinar las revisiones de <kbd>Oldpage</kbd> hasta el <kbd>2015-12-31T04:37:41Z</kbd> en <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Trasladar una página.",
+ "apihelp-move-param-from": "Título de la página a renombrar. No se puede utilizar con <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "ID de la página a renombrar. No se puede utilizar con <var>$1from</var>.",
+ "apihelp-move-param-to": "Título para cambiar el nombre de la página.",
+ "apihelp-move-param-reason": "Motivo del cambio de nombre.",
+ "apihelp-move-param-movetalk": "Renombrar la página de discusión si existe.",
+ "apihelp-move-param-movesubpages": "Renombrar las subpáginas si procede.",
+ "apihelp-move-param-noredirect": "No crear una redirección.",
+ "apihelp-move-param-watch": "Añadir la página y su redirección a la lista de seguimiento del usuario actual.",
+ "apihelp-move-param-unwatch": "Eliminar la página y la redirección de la lista de seguimiento del usuario.",
+ "apihelp-move-param-watchlist": "Incondicionalmente puede añadir o eliminar la página de lista del usuario actual, utilizar referencias o no cambiar el reloj.",
+ "apihelp-move-param-ignorewarnings": "Ignorar cualquier aviso.",
+ "apihelp-move-param-tags": "Cambiar las etiquetas que aplicar a la entrada en el registro de traslados y en la revisión nula de la página de destino.",
+ "apihelp-move-example-move": "Trasladar <kbd>Badtitle</kbd> a <kbd>Goodtitle</kbd> sin dejar una redirección.",
+ "apihelp-opensearch-summary": "Buscar en el wiki mediante el protocolo OpenSearch.",
+ "apihelp-opensearch-param-search": "Buscar cadena.",
+ "apihelp-opensearch-param-limit": "Número máximo de resultados que devolver.",
+ "apihelp-opensearch-param-namespace": "Espacios de nombres que buscar. Se ignora si <var>$1search</var> comienza por un prefijo de espacio de nombre válido.",
+ "apihelp-opensearch-param-suggest": "No hacer nada si <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> es falso.",
+ "apihelp-opensearch-param-redirects": "Cómo manejar las redirecciones:\n;return: Volver a la propia redirección.\n;resolve: Volver a la página de destino. Puede devolver menos de $1limit resultados.\nPor motivos históricos, se utiliza \"return\" para $1format=json y \"resolve\" para otros formatos.",
+ "apihelp-opensearch-param-format": "El formato de salida.",
+ "apihelp-opensearch-param-warningsaserror": "Si las advertencias están planteadas con <kbd>format=json</kbd>, devolver un error de API en lugar de hacer caso omiso de ellas.",
+ "apihelp-opensearch-example-te": "Buscar páginas que empiecen por <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Cambiar preferencias del usuario actual.",
+ "apihelp-options-extended-description": "Solo se pueden establecer opciones que estén registradas en el núcleo o en una de las extensiones instaladas u opciones con claves predefinidas con <code>userjs-</code> (diseñadas para utilizarse con scripts de usuario).",
+ "apihelp-options-param-reset": "Restablece las preferencias de la página web a sus valores predeterminados.",
+ "apihelp-options-param-resetkinds": "Lista de tipos de opciones a restablecer cuando la opción <var>$1reset</var> esté establecida.",
+ "apihelp-options-param-change": "Lista de cambios con el formato nombre=valor (por ejemplo: skin=vector). Si no se da ningún valor (ni siquiera un signo de igual), por ejemplo: optionname|otheroption|..., la opción se restablecerá a sus valores predeterminados. Si algún valor contiene el carácter tubería (<kbd>|</kbd>), se debe utilizar el [[Special:ApiHelp/main#main/datatypes|separador alternativo de múltiples valores]] para que las operaciones se realicen correctamente.",
+ "apihelp-options-param-optionname": "El nombre de la opción que debe establecerse en el valor dado por <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "El valor de la opción especificada por <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Restablecer todas las preferencias",
+ "apihelp-options-example-change": "Cambiar las preferencias <kbd>skin</kbd> y <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Restablecer todas las preferencias y establecer <kbd>skin</kbd> y <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Obtener información acerca de los módulos de la API.",
+ "apihelp-paraminfo-param-modules": "Lista de los nombres de los módulos (valores de los parámetros <var>action</var> y <var>format</var> o <kbd>main</kbd>). Se pueden especificar submódulos con un <kbd>+</kbd>, todos los submódulos con <kbd>+*</kbd> o todos los submódulos recursivamente con <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Formato de las cadenas de ayuda.",
+ "apihelp-paraminfo-param-querymodules": "Lista de los nombres de los módulos de consulta (valor de los parámetros <var>prop</var>, <var>meta</var> or <var>list</var>). Utiliza <kbd>$1modules=query+foo</kbd> en vez de <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Obtener también información sobre el módulo principal (primer nivel). Utilizar <kbd>$1modules=main</kbd> en su lugar.",
+ "apihelp-paraminfo-param-pagesetmodule": "Obtener también información sobre el módulo PageSet (Proporcionar títulos= y amigos).",
+ "apihelp-paraminfo-param-formatmodules": "Lista de los nombres del formato de los módulos (valor del parámetro <var>format</var>). Utiliza <var>$1modules</var> en su lugar.",
+ "apihelp-paraminfo-example-1": "Mostrar información para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> y <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Mostrar información para todos los submódulos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "Analiza el contenido y devuelve la salida del analizador sintáctico.",
+ "apihelp-parse-extended-description": "Véanse los distintos módulos prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obtener información de la versión actual de una página.\n\nHay varias maneras de especificar el texto que analizar:\n# Especificar una página o revisión, mediante <var>$1page</var>, <var>$1pageid</var> o <var>$1oldid</var>.\n# Especificar explícitamente el contenido, mediante <var>$1text</var>, <var>$1title</var> y <var>$1contentmodel</var>.\n# Especificar solamente un resumen que analizar. Se debería asignar a <var>$1prop</var> un valor vacío.",
+ "apihelp-parse-param-title": "Título de la página a la que pertenece el texto. Si se omite se debe especificar <var>$1contentmodel</var> y se debe utilizar el [[API]] como título.",
+ "apihelp-parse-param-text": "Texto a analizar. Utiliza <var>$1title</var> or <var>$1contentmodel</var> para controlar el modelo del contenido.",
+ "apihelp-parse-param-summary": "Resumen a analizar.",
+ "apihelp-parse-param-page": "Analizar el contenido de esta página. No se puede utilizar con <var>$1text</var> y <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Analizar el contenido de esta página. Remplaza <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Si <var>$1page</var> o <var>$1pageid</var> contienen una redirección, soluciónalo.",
+ "apihelp-parse-param-oldid": "Analizar el contenido de esta revisión. Remplaza <var>$1page</var> y <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Qué piezas de información obtener:",
+ "apihelp-parse-paramvalue-prop-text": "Da el texto analizado en wikitexto.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Da el idioma de los enlaces en el wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-categories": "Da las categorías en el wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Da la versión HTML de las categorías.",
+ "apihelp-parse-paramvalue-prop-links": "Da los enlaces internos del wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-templates": "Da las plantillas del wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-images": "Da las imágenes del wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Da los enlaces externos del wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-sections": "Da las secciones del wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-revid": "Añade la ID de revisión de la página analizada.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Añade el título del wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-headitems": "Proporciona elementos para colocar en el <code>&lt;head&gt;</code> de la página.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Proporciona la <code>&lt;head&gt;</code> analizada de la página.",
+ "apihelp-parse-paramvalue-prop-modules": "Proporciona los módulos de ResourceLoader utilizados en la página. Para cargar, utiliza <code>mw.loader.using()</code>. <kbd>jsconfigvars</kbd> o bien <kbd>encodedjsconfigvars</kbd> deben solicitarse en conjunto con <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Proporciona las variables de configuración de JavaScript específicas de la página. Para obtenerlas, utiliza <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Da la configuración JavaScript de variables específica para la página como cadena JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "Da el HTML de los indicadores de estado utilizados en la página.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Da los enlaces interwiki del texto analizado.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Da el wikitexto original que se había analizado.",
+ "apihelp-parse-paramvalue-prop-properties": "Da varias propiedades definidas en el wikitexto analizado.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Da el informe del límite de forma estructurada. No da datos si <var>$1disablelimitreport</var> está establecido.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Da la versión HTML del informe del límite. No da datos si <var>$1disablelimitreport</var> está establecido.",
+ "apihelp-parse-paramvalue-prop-parsetree": "El árbol de análisis sintáctico XML del contenido de la revisión (requiere modelo de contenido <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Da las advertencias que se produjeron al analizar el contenido.",
+ "apihelp-parse-param-pst": "Guardar previamente los cambios antes de transformar la entrada antes de analizarla. Sólo es válido cuando se utiliza con el texto.",
+ "apihelp-parse-param-onlypst": "Guardar previamente los cambios antes de transformar (PST) en la entrada. Devuelve el mismo wikitexto, después de que un PST se ha aplicado. Sólo es válido cuando se utiliza con <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Incluye enlaces de idiomas proporcionados por las extensiones (para utilizar con <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Analizar solo el contenido de este número de sección.\n\nSi el valor es <kbd>new</kbd>, analiza <var>$1text</var> y <var>$1sectiontitle</var> como si se añadiera una nueva sección a la página.\n\n<kbd>new</kbd> solo se permite cuando se especifique <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "Nuevo título de sección cuando <var>section</var> tiene el valor <kbd>new</kbd>.\n\nAl contrario que en la edición de páginas, no se sustituye por <var>summary</var> cuando se omite o su valor es vacío.",
+ "apihelp-parse-param-disablelimitreport": "Omitir el informe de límite (\"NewPP limit report\") desde la salida del analizador.",
+ "apihelp-parse-param-disablepp": "Usa <var>$1disablelimitreport</var> en su lugar.",
+ "apihelp-parse-param-disableeditsection": "Omitir los enlaces de edición de sección de la salida del analizador.",
+ "apihelp-parse-param-disabletidy": "No ejecute la limpieza HTML (por ejemplo ordenada) en la salida del analizador.",
+ "apihelp-parse-param-generatexml": "Generar árbol de análisis sintáctico XML (requiere modelo de contenido <code>$1</code>; sustituido por <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Analizar en modo de vista previa.",
+ "apihelp-parse-param-sectionpreview": "Analizar sección en modo de vista previa (también activa el modo de vista previa).",
+ "apihelp-parse-param-disabletoc": "Omitir el sumario en la salida.",
+ "apihelp-parse-param-useskin": "Aplicar la piel seleccionada a la salida del analizador. Puede afectar a las siguientes propiedades: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>módulos</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicadores</kbd>.",
+ "apihelp-parse-param-contentformat": "Formato de serialización de contenido utilizado para la introducción de texto. Sólo es válido cuando se utiliza con $1text.",
+ "apihelp-parse-param-contentmodel": "Modelo de contenido del texto de entrada. Si se omite, se debe especificar $1title, y el valor por defecto será el modelo del título especificado. Solo es válido cuando se use junto con $1text.",
+ "apihelp-parse-example-page": "Analizar una página.",
+ "apihelp-parse-example-text": "Analizar wikitexto.",
+ "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando el título de la página.",
+ "apihelp-parse-example-summary": "Analizar un resumen.",
+ "apihelp-patrol-summary": "Verificar una página o revisión.",
+ "apihelp-patrol-param-rcid": "Identificador de cambios recientes que verificar.",
+ "apihelp-patrol-param-revid": "Identificador de revisión que patrullar.",
+ "apihelp-patrol-param-tags": "Cambio de etiquetas para aplicar a la entrada en la patrulla de registro.",
+ "apihelp-patrol-example-rcid": "Verificar un cambio reciente.",
+ "apihelp-patrol-example-revid": "Verificar una revisión.",
+ "apihelp-protect-summary": "Cambiar el nivel de protección de una página.",
+ "apihelp-protect-param-title": "Título de la página a (des)proteger. No se puede utilizar con $1pageid.",
+ "apihelp-protect-param-pageid": "ID de la página a (des)proteger. No se puede utilizar con $1title.",
+ "apihelp-protect-param-protections": "Lista de los niveles de protección, con formato <kbd>action=level</kbd> (por ejemplo: <kbd>edit=sysop</kbd>). Un nivel de <kbd>all</kbd> («todos») significa que cualquier usuaro puede realizar la acción, es decir, no hay restricción.\n\n<strong>Nota:</strong> Cualquier acción no mencionada tendrá las restricciones eliminadas.",
+ "apihelp-protect-param-expiry": "Marcas de tiempo de expiración. Si solo se establece una marca de tiempo, se utilizará para todas las protecciones. Utiliza <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, o <kbd>never</kbd> para una protección indefinida.",
+ "apihelp-protect-param-reason": "Motivo de la (des)protección.",
+ "apihelp-protect-param-tags": "Cambiar las etiquetas para aplicar a la entrada en el registro de protección.",
+ "apihelp-protect-param-cascade": "Activar la protección en cascada (o sea, proteger plantillas e imágenes transcluidas usadas en esta página). Se ignorará si ninguno de los niveles de protección dados son compatibles con la función de cascada.",
+ "apihelp-protect-param-watch": "Si se activa, añade la página en proceso de (des)protección a la lista de seguimiento del usuario actual.",
+ "apihelp-protect-param-watchlist": "Añadir o borrar incondicionalmente la página de la lista de seguimiento del usuario actual, utilizar las preferencias o no cambiar el estado de seguimiento.",
+ "apihelp-protect-example-protect": "Proteger una página",
+ "apihelp-protect-example-unprotect": "Desproteger una página estableciendo la restricción a <kbd>all</kbd> («todos», es decir, cualquier usuario puede realizar la acción).",
+ "apihelp-protect-example-unprotect2": "Desproteger una página anulando las restricciones.",
+ "apihelp-purge-summary": "Purgar la caché de los títulos proporcionados.",
+ "apihelp-purge-param-forcelinkupdate": "Actualizar las tablas de enlaces.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Actualizar la tabla de enlaces y todas las tablas de enlaces de cualquier página que use esta página como una plantilla.",
+ "apihelp-purge-example-simple": "Purgar la <kbd>Main Page</kbd> y la página <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Purgar las 10 primeras páginas del espacio de nombres principal.",
+ "apihelp-query-summary": "Obtener datos de y sobre MediaWiki.",
+ "apihelp-query-extended-description": "Todas las modificaciones de datos tendrán que utilizar primero la consulta para adquirir un token para evitar el abuso desde sitios maliciosos.",
+ "apihelp-query-param-prop": "Qué propiedades obtener para las páginas consultadas.",
+ "apihelp-query-param-list": "Qué listas obtener.",
+ "apihelp-query-param-meta": "Qué metadatos obtener.",
+ "apihelp-query-param-indexpageids": "Incluir una sección de ID de páginas adicional en la que se muestran todas las ID de páginas.",
+ "apihelp-query-param-export": "Exportar las revisiones actuales de las páginas dadas o generadas.",
+ "apihelp-query-param-exportnowrap": "Devuelve el XML de exportación sin envolverlo en un resultado XML (mismo formato que [[Special:Export]]). Solo se puede usar junto con $1export.",
+ "apihelp-query-param-iwurl": "Si la URL completa si el título es un interwiki.",
+ "apihelp-query-param-rawcontinue": "Devuelve los datos <samp>query-continue</samp> en bruto para continuar.",
+ "apihelp-query-example-revisions": "Busque [[Special:ApiHelp/query+siteinfo|información del sitio]] y [[Special:ApiHelp/query+revisions|revisiones]] de <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Obtener revisiones de páginas que comiencen por <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "Enumerar todas las categorías.",
+ "apihelp-query+allcategories-param-from": "La categoría para comenzar la enumeración",
+ "apihelp-query+allcategories-param-to": "La categoría para detener la enumeración",
+ "apihelp-query+allcategories-param-prefix": "Buscar todos los títulos de las categorías que comiencen con este valor.",
+ "apihelp-query+allcategories-param-dir": "Dirección de ordenamiento.",
+ "apihelp-query+allcategories-param-min": "Devolver solo categorías con al menos este número de miembros.",
+ "apihelp-query+allcategories-param-max": "Devolver solo categorías con como mucho este número de miembros.",
+ "apihelp-query+allcategories-param-limit": "Cuántas categorías se devolverán.",
+ "apihelp-query+allcategories-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Añade el número de páginas en la categoría.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Etiqueta las categorías que están ocultas con <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Lista las categorías con información sobre el número de páginas de cada una.",
+ "apihelp-query+allcategories-example-generator": "Recupera la información sobre la propia página de categoría para las categorías que empiezan por <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "Listar todas las revisiones eliminadas por un usuario o en un espacio de nombres.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Solo puede usarse con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "No puede utilizarse con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "El sello de tiempo para comenzar la enumeración",
+ "apihelp-query+alldeletedrevisions-param-end": "El sello de tiempo para detener la enumeración",
+ "apihelp-query+alldeletedrevisions-param-from": "Empezar a listar en este título.",
+ "apihelp-query+alldeletedrevisions-param-to": "Terminar de listar en este título.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Buscar todos los títulos de las páginas que comiencen con este valor.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Listar solo las revisiones con esta etiqueta.",
+ "apihelp-query+alldeletedrevisions-param-user": "Listar solo las revisiones de este usuario.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "No listar las revisiones de este usuario.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Listar solo las páginas en este espacio de nombres.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> debido al [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo avaro]], usar juntos <var>$1user</var> y <var>$1namespace</var> puede dar lugar a que se devuelvan menos de <var>$1limit</var> resultados antes de continuar. En casos extremos, podrían devolverse cero resultados.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Cuando se utiliza como generador, generar títulos en lugar de identificadores de revisión.",
+ "apihelp-query+alldeletedrevisions-example-user": "Listar las últimas 50 contribuciones borradas del usuario <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Listar las primeras 50 revisiones borradas en el espacio de nombres principal.",
+ "apihelp-query+allfileusages-summary": "Enumerar todos los usos del archivo, incluidos los que no existen.",
+ "apihelp-query+allfileusages-param-from": "El título del archivo para comenzar la enumeración.",
+ "apihelp-query+allfileusages-param-to": "El título del archivo para detener la enumeración.",
+ "apihelp-query+allfileusages-param-prefix": "Buscar todos los títulos de los archivos que comiencen con este valor.",
+ "apihelp-query+allfileusages-param-unique": "Mostrar solo títulos únicos de archivo. No se puede usar junto con $1prop=ids. Cuando se use como generador, devuelve páginas de destino en vez de páginas de origen.",
+ "apihelp-query+allfileusages-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Agrega los ID de página de las páginas en uso (no se puede usar con $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Agrega el título del archivo.",
+ "apihelp-query+allfileusages-param-limit": "Cuántos elementos en total se devolverán.",
+ "apihelp-query+allfileusages-param-dir": "La dirección en la que se listará.",
+ "apihelp-query+allfileusages-example-B": "Listar títulos de archivos, incluyendo los desaparecidos, con las ID de páginas a las que pertenecen, empezando por la <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Listar títulos de archivos únicos.",
+ "apihelp-query+allfileusages-example-unique-generator": "Recupera los títulos de todos los archivos y marca los faltantes.",
+ "apihelp-query+allfileusages-example-generator": "Recupera las páginas que contienen los archivos.",
+ "apihelp-query+allimages-summary": "Enumerar todas las imágenes secuencialmente.",
+ "apihelp-query+allimages-param-sort": "Propiedad por la que realizar la ordenación.",
+ "apihelp-query+allimages-param-dir": "La dirección en la que se listará.",
+ "apihelp-query+allimages-param-from": "El título de la imagen para comenzar la enumeración. Solo puede utilizarse con $1sort=name.",
+ "apihelp-query+allimages-param-to": "El título de la imagen para detener la enumeración. Solo puede utilizarse con $1sort=name.",
+ "apihelp-query+allimages-param-start": "El sello de tiempo para comenzar la enumeración. Solo puede utilizarse con $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "El sello de tiempo para detener la enumeración. Solo puede utilizarse con $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Buscar todos los títulos de imágenes que empiecen por este valor. Solo puede utilizarse con $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Limitar a imágenes con al menos este número de bytes.",
+ "apihelp-query+allimages-param-maxsize": "Limitar a imágenes con como mucho este número de bytes.",
+ "apihelp-query+allimages-param-sha1": "Suma SHA1 de la imagen. Invalida $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "Suma SHA1 de la imagen en base 36 (usada en MediaWiki).",
+ "apihelp-query+allimages-param-user": "Devolver solo los archivos subidos por este usuario. Solo se puede usar con $1tipo=timestamp. No se puede usar junto con $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Cómo filtrar archivos subidos por bots. Solo se puede usar con $1sort=timestamp. No se puede usar junto con $1user.",
+ "apihelp-query+allimages-param-mime": "Tipos MIME que buscar, como, por ejemplo, <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Cuántas imágenes en total se devolverán.",
+ "apihelp-query+allimages-example-B": "Mostrar una lista de archivos que empiecen por la letra <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Mostrar una lista de archivos subidos recientemente, similar a [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Mostrar una lista de archivos tipo MIME <kbd>image/png</kbd> o <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Mostrar información acerca de 4 archivos que empiecen por la letra <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Enumerar todos los enlaces que apunten a un determinado espacio de nombres.",
+ "apihelp-query+alllinks-param-from": "El título del enlace para comenzar la enumeración.",
+ "apihelp-query+alllinks-param-to": "El título del enlace para detener la enumeración.",
+ "apihelp-query+alllinks-param-prefix": "Buscar todos los títulos vinculados que comiencen con este valor.",
+ "apihelp-query+alllinks-param-unique": "Mostrar solo títulos únicos enlazados. No se puede usar junto con $1prop=ids. Cuando se use como generador, devuelve páginas de destino en vez de páginas de origen.",
+ "apihelp-query+alllinks-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Agrega el ID de página de la página de enlace (no se puede usar con <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Añade el título del enlace.",
+ "apihelp-query+alllinks-param-namespace": "El espacio de nombres que enumerar.",
+ "apihelp-query+alllinks-param-limit": "Cuántos elementos en total se devolverán.",
+ "apihelp-query+alllinks-param-dir": "La dirección en la que se listará.",
+ "apihelp-query+alllinks-example-B": "Enumera los títulos enlazados, incluyendo los títulos faltantes, con los ID de página de los que provienen, empezando por <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Lista de títulos vinculados únicamente.",
+ "apihelp-query+alllinks-example-unique-generator": "Obtiene todos los títulos enlazados, marcando los que falten.",
+ "apihelp-query+alllinks-example-generator": "Obtiene páginas que contienen los enlaces.",
+ "apihelp-query+allmessages-summary": "Devolver los mensajes de este sitio.",
+ "apihelp-query+allmessages-param-messages": "Qué mensajes mostrar. <kbd>*</kbd> (predeterminado) significa todos los mensajes.",
+ "apihelp-query+allmessages-param-prop": "Qué propiedades se obtendrán.",
+ "apihelp-query+allmessages-param-enableparser": "Establecer para habilitar el analizador, se preprocesará el wikitexto del mensaje (sustitución de palabras mágicas, uso de plantillas, etc.).",
+ "apihelp-query+allmessages-param-nocontent": "Si se establece, no incluya el contenido de los mensajes en la salida.",
+ "apihelp-query+allmessages-param-includelocal": "Incluir también los mensajes locales, es decir, aquellos que no existen en el propio software pero sí en el espacio de nombres {{ns:MediaWiki}}.\nEsto muestra todas las páginas del espacio de nombres {{ns:MediaWiki}}, así que también mostrará las que no son propiamente mensajes, como, por ejemplo, [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Los argumentos que se sustituyen en el mensaje.",
+ "apihelp-query+allmessages-param-filter": "Devolver solo mensajes con nombres que contengan esta cadena.",
+ "apihelp-query+allmessages-param-customised": "Devolver solo mensajes en este estado de personalización.",
+ "apihelp-query+allmessages-param-lang": "Devolver mensajes en este idioma.",
+ "apihelp-query+allmessages-param-from": "Devolver mensajes que empiecen por este mensaje.",
+ "apihelp-query+allmessages-param-to": "Devolver mensajes que acaben por este mensaje.",
+ "apihelp-query+allmessages-param-title": "Nombre de página que usar como contexto al analizar el mensaje (para la opción $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Devolver mensajes con este prefijo.",
+ "apihelp-query+allmessages-example-ipb": "Mostrar mensajes que empiecen por <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Mostrar mensajes <kbd>august</kbd> y <kbd>mainpage</kbd> en alemán.",
+ "apihelp-query+allpages-summary": "Enumerar todas las páginas secuencialmente en un espacio de nombres determinado.",
+ "apihelp-query+allpages-param-from": "El título de página para comenzar la enumeración",
+ "apihelp-query+allpages-param-to": "El título de página para detener la enumeración.",
+ "apihelp-query+allpages-param-prefix": "Buscar todos los títulos de las páginas que comiencen con este valor.",
+ "apihelp-query+allpages-param-namespace": "El espacio de nombres que enumerar.",
+ "apihelp-query+allpages-param-filterredir": "Qué páginas listar.",
+ "apihelp-query+allpages-param-minsize": "Limitar a páginas con al menos este número de bytes.",
+ "apihelp-query+allpages-param-maxsize": "Limitar a páginas con este número máximo de bytes.",
+ "apihelp-query+allpages-param-prtype": "Limitar a páginas protegidas.",
+ "apihelp-query+allpages-param-prlevel": "Filtrar protecciones según el nivel de protección (se debe usar junto con el parámetro $1prtype= ).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filtrar protecciones según la protección en cascada (se ignora cuando $1prtype no está fijado).",
+ "apihelp-query+allpages-param-limit": "Cuántas páginas en total se devolverán.",
+ "apihelp-query+allpages-param-dir": "La dirección en la que se listará.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filtrar en función de si una página tiene langlinks. Tenga en cuenta que esto no puede considerar langlinks agregados por extensiones.",
+ "apihelp-query+allpages-param-prexpiry": "¿Cuál término de protección para filtrar la página en:\n; Indefinida: Obtener sólo páginas con protección de vencimiento indefinida.\n; Definida: Obtener sólo las páginas con un definitivo (específico) vencimiento.\n; Todos: Obtener páginas con cualquier caducidad.",
+ "apihelp-query+allpages-example-B": "Mostrar una lista de páginas que empiecen con la letra <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Mostrar información acerca de 4 páginas que empiecen por la letra <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Mostrar el contenido de las 2 primeras páginas que no redirijan y empiecen por <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Obtener la lista de todas las redirecciones a un espacio de nombres.",
+ "apihelp-query+allredirects-param-from": "El título de la redirección para iniciar la enumeración.",
+ "apihelp-query+allredirects-param-to": "El título de la redirección para detener la enumeración.",
+ "apihelp-query+allredirects-param-prefix": "Buscar todas las páginas de destino que empiecen con este valor.",
+ "apihelp-query+allredirects-param-unique": "Mostrar solo títulos únicos de páginas de destino. No se puede usar junto con $1prop=ids|fragment|interwiki. Cuando se use como generador, devuelve páginas de destino en vez de páginas de origen.",
+ "apihelp-query+allredirects-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Añade el identificador de la página de redirección (no se puede usar junto con <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Añade el título de la redirección.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Añade el fragmento de la redirección, si existe (no se puede usar junto con <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Añade el prefijo interwiki de la redirección, si existe (no se puede usar junto con <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "El espacio de nombres a enumerar.",
+ "apihelp-query+allredirects-param-limit": "Cuántos elementos se devolverán.",
+ "apihelp-query+allredirects-param-dir": "La dirección en la que se listará.",
+ "apihelp-query+allredirects-example-B": "Enumera las páginas de destino, incluyendo las páginas desaparecidas, con los identificadores de las páginas de las que provienen, empezando por <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "La lista de páginas de destino.",
+ "apihelp-query+allredirects-example-unique-generator": "Obtiene todas las páginas de destino, marcando los que faltan.",
+ "apihelp-query+allredirects-example-generator": "Obtiene páginas que contienen las redirecciones.",
+ "apihelp-query+allrevisions-summary": "Listar todas las revisiones.",
+ "apihelp-query+allrevisions-param-start": "La marca de tiempo para iniciar la enumeración.",
+ "apihelp-query+allrevisions-param-end": "La marca de tiempo para detener la enumeración.",
+ "apihelp-query+allrevisions-param-user": "Listar solo las revisiones de este usuario.",
+ "apihelp-query+allrevisions-param-excludeuser": "No listar las revisiones de este usuario.",
+ "apihelp-query+allrevisions-param-namespace": "Listar solo las páginas en este espacio de nombres.",
+ "apihelp-query+allrevisions-param-generatetitles": "Cuando se utilice como generador, genera títulos en lugar de ID de revisión.",
+ "apihelp-query+allrevisions-example-user": "Listar las últimas 50 contribuciones del usuario <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Listar las primeras 50 revisiones en el espacio de nombres principal.",
+ "apihelp-query+mystashedfiles-summary": "Obtener una lista de los archivos en el almacén provisional de cargas del usuario actual.",
+ "apihelp-query+mystashedfiles-param-prop": "Propiedades a buscar para los archivos.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Buscar el tamaño del archivo y las dimensiones de la imagen.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Obtener el tipo MIME y tipo multimedia del archivo.",
+ "apihelp-query+mystashedfiles-param-limit": "Cuántos archivos obtener.",
+ "apihelp-query+mystashedfiles-example-simple": "Obtener la clave de archivo, el tamaño del archivo y el tamaño en píxeles de los archivos en el almacén provisional de cargas del usuario actual.",
+ "apihelp-query+alltransclusions-summary": "Mostrar todas las transclusiones (páginas integradas mediante &#123;&#123;x&#125;&#125;), incluidas las inexistentes.",
+ "apihelp-query+alltransclusions-param-from": "El título de la transclusión por la que empezar la enumeración.",
+ "apihelp-query+alltransclusions-param-to": "El título de la transclusión por la que terminar la enumeración.",
+ "apihelp-query+alltransclusions-param-prefix": "Buscar todos los títulos transcluidos que comiencen con este valor.",
+ "apihelp-query+alltransclusions-param-unique": "Mostrar solo títulos únicos transcluidos. No se puede usar junto con $1prop=ids. Cuando se use como generador, devuelve páginas de destino en vez de páginas de origen.",
+ "apihelp-query+alltransclusions-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Agrega el ID de página de la página de redirección (no se puede usar con $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Añade el título de la transclusión.",
+ "apihelp-query+alltransclusions-param-namespace": "El espacio de nombres que enumerar.",
+ "apihelp-query+alltransclusions-param-limit": "Número de elementos que se desea obtener.",
+ "apihelp-query+alltransclusions-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+alltransclusions-example-B": "Enumerar los títulos transcluidos, incluyendo los faltantes, junto con los identificadores de las páginas de las que provienen, empezando por <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Listar títulos transcluidos de forma única.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtiene todos los títulos transcluidos, marcando los que faltan.",
+ "apihelp-query+alltransclusions-example-generator": "Obtiene las páginas que contienen las transclusiones.",
+ "apihelp-query+allusers-summary": "Enumerar todos los usuarios registrados.",
+ "apihelp-query+allusers-param-from": "El nombre de usuario por el que empezar la enumeración.",
+ "apihelp-query+allusers-param-to": "El nombre de usuario por el que finalizar la enumeración.",
+ "apihelp-query+allusers-param-prefix": "Buscar todos los usuarios que empiecen con este valor.",
+ "apihelp-query+allusers-param-dir": "Dirección de ordenamiento.",
+ "apihelp-query+allusers-param-group": "Incluir solo usuarios en los grupos dados.",
+ "apihelp-query+allusers-param-excludegroup": "Excluir a los usuarios en estos grupos",
+ "apihelp-query+allusers-param-rights": "Sólo se incluyen a los usuarios con los derechos cedidos. No incluye los derechos concedidos por la implícita o auto-promoverse grupos como *, usuario, o autoconfirmed.",
+ "apihelp-query+allusers-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Añade información sobre un bloque actual al usuario.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Lista los grupos a los que el usuario pertenece. Esto utiliza más recursos del servidor y puede devolver menos resultados que el límite.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lista todos los grupos el usuario es automáticamente en.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Lista los permisos que tiene el usuario.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Añade el número de ediciones del usuario.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Añade la marca de tiempo del momento en que el usuario se registró, si está disponible (puede estar en blanco).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Añade el central IDs y estado de anexo para el usuario.",
+ "apihelp-query+allusers-param-limit": "Cuántos nombres de usuario se devolverán.",
+ "apihelp-query+allusers-param-witheditsonly": "Mostrar solo los usuarios que han realizado ediciones.",
+ "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
+ "apihelp-query+allusers-param-attachedwiki": "Con <kbd>$1prop=centralids</kbd>, indicar también si el usuario está conectado con el wiki identificado por el ID.",
+ "apihelp-query+allusers-example-Y": "Listar usuarios que empiecen por <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Recuperar información sobre el estado de autenticación actual.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Compruebe si el estado de autenticación actual del usuario es suficiente para la operación sensible-seguridad especificada.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Obtener información sobre las peticiones de autentificación requeridas para la acción de autentificación especificada.",
+ "apihelp-query+authmanagerinfo-example-login": "Captura de las solicitudes que puede ser utilizadas al comienzo de inicio de sesión.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Obtener las peticiones que podrían utilizarse al empezar un inicio de sesión, con los campos de formulario integrados.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Comprueba si la autentificación es suficiente para realizar la acción <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Encuentra todas las páginas que enlazan a la página dada.",
+ "apihelp-query+backlinks-param-title": "Título que buscar. No se puede usar junto con <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "Identificador de página que buscar. No puede usarse junto con <var>$1title</var>",
+ "apihelp-query+backlinks-param-namespace": "El espacio de nombres que enumerar.",
+ "apihelp-query+backlinks-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+backlinks-param-filterredir": "Cómo filtrar redirecciones. Si se establece a <kbd>nonredirects</kbd> cuando está activo <var>$1redirect</var>, esto sólo se aplica al segundo nivel.",
+ "apihelp-query+backlinks-param-limit": "Cuántas páginas en total se devolverán. Si está activo <var>$1redirect</var>, el límite aplica a cada nivel por separado (lo que significa que se pueden devolver hasta 2 * <var>$1limit</var> resultados).",
+ "apihelp-query+backlinks-param-redirect": "Si la página con el enlace es una redirección, encontrar también las páginas que enlacen a esa redirección. El límite máximo se reduce a la mitad.",
+ "apihelp-query+backlinks-example-simple": "Mostrar enlaces a <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Obtener información acerca de las páginas enlazadas a <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Listar todos los usuarios y direcciones IP bloqueadas.",
+ "apihelp-query+blocks-param-start": "El sello de tiempo para comenzar la enumeración",
+ "apihelp-query+blocks-param-end": "El sello de tiempo para detener la enumeración",
+ "apihelp-query+blocks-param-ids": "Lista de bloquear IDs para listar (opcional).",
+ "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
+ "apihelp-query+blocks-param-ip": "Obtiene todos los bloqueos que se aplican a esta dirección IP o intervalo CIDR, incluyendo bloqueos de intervalos. No se puede usar en conjunto con <var>$3users</var>. No se aceptan intervalos CIDR mayores que IPv4/$1 o IPv6/$2.",
+ "apihelp-query+blocks-param-limit": "El número máximo de filtros a listar.",
+ "apihelp-query+blocks-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Agrega el ID del bloque.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Añade el nombre de usuario del usuario bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Añade el identificador del usuario bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Añade el nombre de usuario del bloqueo de usuario.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Añade el usuario ID del usuario bloqueador.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Añade la fecha y hora de cuando se aplicó el bloque.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Añade la marca de tiempo correspondiente a la expiración del bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Añade la razón dada para el bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Añade la gama de direcciones de IP afectó por el bloque.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Etiquetas la prohibición con (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Muestra solamente los elementos que cumplen estos criterios.\nPor ejemplo, para mostrar solamente los bloqueos indefinidos a direcciones IP, introduce <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Listar bloques.",
+ "apihelp-query+blocks-example-users": "Muestra los bloqueos de los usuarios <kbd>Alice</kbd> y <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Enumera todas las categorías a las que pertenecen las páginas.",
+ "apihelp-query+categories-param-prop": "Qué propiedades adicionales obtener para cada categoría:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Añade la clave de ordenación (cadena hexadecimal) y el prefijo de la clave de ordenación (la parte legible) de la categoría.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Añade la marca de tiempo del momento en que se añadió la categoría.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Etiqueta las categorías que están ocultas con <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Qué tipo de categorías mostrar.",
+ "apihelp-query+categories-param-limit": "Cuántas categorías se devolverán.",
+ "apihelp-query+categories-param-categories": "Enumerar solamente estas categorías. Útil para comprobar si una página determinada está en una categoría determinada.",
+ "apihelp-query+categories-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+categories-example-simple": "Obtener una lista de categorías a las que pertenece la página <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categories-example-generator": "Obtener información acerca de todas las categorías utilizadas en la página <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Devuelve información acerca de las categorías dadas.",
+ "apihelp-query+categoryinfo-example-simple": "Obtener información acerca de <kbd>Category:Foo</kbd> y <kbd>Category:Bar</kbd>",
+ "apihelp-query+categorymembers-summary": "Lista todas las páginas en una categoría dada.",
+ "apihelp-query+categorymembers-param-title": "Categoría que enumerar (requerida). Debe incluir el prefijo <kbd>{{ns:category}}:</kbd>. No se puede utilizar junto con <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID de página de la categoría para enumerar. No se puede utilizar junto con <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Añade el identificador de página.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Añade la clave de ordenación utilizada para la ordenación en la categoría (cadena hexadecimal).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Añade la clave de ordenación utilizada para la ordenación en la categoría (parte legible de la clave de ordenación).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Añade el tipo en el que se categorizó la página (<samp>page</samp>, <samp>subcat</samp> or <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Añade la marca de tiempo del momento en que se incluyó la página.",
+ "apihelp-query+categorymembers-param-namespace": "Incluir solamente páginas de estos espacios de nombres. Ten en cuenta que puede haberse utilizado <kbd>$1type=subcat</kbd> o <kbd>$1type=file</kbd> en lugar de <kbd>$1namespace=14</kbd> o <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Qué tipo de miembros de la categoría incluir. Ignorado cuando se ha establecido <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "Número máximo de páginas que devolver.",
+ "apihelp-query+categorymembers-param-sort": "Propiedad por la que realizar la ordenación.",
+ "apihelp-query+categorymembers-param-dir": "Dirección en la que desea ordenar.",
+ "apihelp-query+categorymembers-param-start": "Marca de tiempo por la que empezar la enumeración. Solo se puede utilizar junto con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Marca de tiempo por la que terminar la enumeración. Solo se puede utilizar junto con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Clave de ordenación por la que empezar la enumeración, tal como se ha devuelto por <kbd>$1prop=sortkey</kbd>. Solo se puede utilizar junto con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Clave de ordenación por la que terminar la enumeración, tal como se ha devuelto por <kbd>$1prop=sortkey</kbd>. Solo se puede utilizar junto con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefijo de la clave de ordenación por el que empezar la enumeración. Solo se puede utilizar junto con <kbd>$1sort=sortkey</kbd>. Reemplaza <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefijo de la clave de ordenación <strong>antes</strong> del cual termina la enumeración (no <strong>en</strong> el cual; si este valor existe, no será incluido). Solo se puede utilizar junto con <kbd>$1sort=sortkey</kbd>. Reemplaza <var>$1endhexsortkey</var>.",
+ "apihelp-query+categorymembers-param-startsortkey": "Utilizar $1starthexsortkey en su lugar.",
+ "apihelp-query+categorymembers-param-endsortkey": "Utilizar $1endhexsortkey en su lugar.",
+ "apihelp-query+categorymembers-example-simple": "Obtener las primeras 10 páginas en <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Obtener información sobre las primeras 10 páginas de la <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Obtener la lista de contribuidores conectados y el número de contribuidores anónimos de una página.",
+ "apihelp-query+contributors-param-group": "Solo incluir usuarios de los grupos especificados. No incluye grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
+ "apihelp-query+contributors-param-excludegroup": "Excluir usuarios de los grupos especificados. No incluye grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
+ "apihelp-query+contributors-param-rights": "Solo incluir usuarios con los derechos especificados. No incluye derechos concedidos a grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
+ "apihelp-query+contributors-param-excluderights": "Excluir usuarios con los derechos especificados. No incluye derechos concedidos a grupos implícitos o autopromocionados, como *, usuario o autoconfirmado.",
+ "apihelp-query+contributors-param-limit": "Cuántos contribuyentes se devolverán.",
+ "apihelp-query+contributors-example-simple": "Mostrar los contribuyentes de la página <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Obtener información de revisión eliminada.",
+ "apihelp-query+deletedrevisions-extended-description": "Puede ser utilizada de varias maneras:\n# Obtenga las revisiones eliminadas de un conjunto de páginas, estableciendo títulos o ID de paginas. Ordenadas por título y marca horaria.\n# Obtener datos sobre un conjunto de revisiones eliminadas estableciendo sus ID con identificación de revisión. Ordenado por ID de revisión.",
+ "apihelp-query+deletedrevisions-param-start": "Marca de tiempo por la que empezar la enumeración. Se ignora cuando se esté procesando una lista de ID de revisión.",
+ "apihelp-query+deletedrevisions-param-end": "Marca de tiempo por la que terminar la enumeración. Se ignora cuando se esté procesando una lista de ID de revisión.",
+ "apihelp-query+deletedrevisions-param-tag": "Listar solo las revisiones con esta etiqueta.",
+ "apihelp-query+deletedrevisions-param-user": "Listar solo las revisiones de este usuario.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "No listar las revisiones de este usuario.",
+ "apihelp-query+deletedrevisions-example-titles": "Muestra la lista de revisiones borradas de las páginas <kbd>Main Page</kbd> y <kbd>Talk:Main Page</kbd>, con su contenido.",
+ "apihelp-query+deletedrevisions-example-revids": "Mostrar la información de la revisión borrada <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Muestra la lista de revisiones borradas.",
+ "apihelp-query+deletedrevs-extended-description": "Opera en tres modos:\n# Lista de revisiones borradas de los títulos dados, ordenadas por marca de tiempo.\n# Lista de contribuciones borradas del usuario dado, ordenadas por marca de tiempo.\n# Lista de todas las revisiones borradas en el espacio de nombres dado, ordenadas por título y marca de tiempo (donde no se ha especificado ningún título ni se ha fijado $1user).",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+ "apihelp-query+deletedrevs-param-start": "Marca de tiempo por la que empezar la enumeración.",
+ "apihelp-query+deletedrevs-param-end": "Marca de tiempo por la que terminar la enumeración.",
+ "apihelp-query+deletedrevs-param-from": "Empezar a listar en este título.",
+ "apihelp-query+deletedrevs-param-to": "Terminar de listar en este título.",
+ "apihelp-query+deletedrevs-param-prefix": "Buscar todas las páginas que empiecen con este valor.",
+ "apihelp-query+deletedrevs-param-unique": "Listar solo una revisión por cada página.",
+ "apihelp-query+deletedrevs-param-tag": "Listar solo las revisiones con esta etiqueta.",
+ "apihelp-query+deletedrevs-param-user": "Listar solo las revisiones de este usuario.",
+ "apihelp-query+deletedrevs-param-excludeuser": "No listar las revisiones de este usuario.",
+ "apihelp-query+deletedrevs-param-namespace": "Listar solo las páginas en este espacio de nombres.",
+ "apihelp-query+deletedrevs-param-limit": "La cantidad máxima de revisiones que listar.",
+ "apihelp-query+deletedrevs-param-prop": "Propiedades que obtener:\n;revid: Añade el identificador de la revisión borrada.\n;parentid: Añade el identificador de la revisión anterior de la página.\n;user: Añade el usuario que hizo la revisión.\n;userid: Añade el identificador del usuario que hizo la revisión.\n;comment: Añade el comentario de la revisión.\n;parsedcomment: Añade el comentario de la revisión, pasado por el analizador sintáctico.\n;minor: Añade una etiqueta si la revisión es menor.\n;len: Añade la longitud (en bytes) de la revisión.\n;sha1: Añade el SHA-1 (base 16) de la revisión.\n;content: Añade el contenido de la revisión.\n;token:<span class=\"apihelp-deprecated\">Obsoleto.</span> Devuelve el token de edición.\n;tags: Etiquetas de la revisión.",
+ "apihelp-query+deletedrevs-example-mode1": "Muestra las últimas revisiones borradas de las páginas <kbd>Main Page</kbd> y <kbd>Talk:Main Page</kbd>, con contenido (modo 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Muestra las últimas 50 contribuciones de <kbd>Bob</kbd> (modo 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Muestra las primeras 50 revisiones borradas del espacio principal (modo 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Listar las primeras 50 páginas en el espacio de nombres {{ns:talk}} (modo 3).",
+ "apihelp-query+disabled-summary": "Se ha desactivado el módulo de consulta.",
+ "apihelp-query+duplicatefiles-summary": "Enumerar todos los archivos que son duplicados de los archivos dados a partir de los valores hash.",
+ "apihelp-query+duplicatefiles-param-limit": "Número de archivos duplicados para devolver.",
+ "apihelp-query+duplicatefiles-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+duplicatefiles-param-localonly": "Buscar solo archivos en el repositorio local.",
+ "apihelp-query+duplicatefiles-example-simple": "Buscar duplicados de [[:File:Alber Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados en todos los archivos.",
+ "apihelp-query+embeddedin-summary": "Encuentra todas las páginas que transcluyen el título dado.",
+ "apihelp-query+embeddedin-param-title": "Título a buscar. No puede usarse en conjunto con $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "Identificador de página que buscar. No se puede usar junto con $1title.",
+ "apihelp-query+embeddedin-param-namespace": "El espacio de nombres que enumerar.",
+ "apihelp-query+embeddedin-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+embeddedin-param-filterredir": "Cómo filtrar las redirecciones.",
+ "apihelp-query+embeddedin-param-limit": "Cuántas páginas se devolverán.",
+ "apihelp-query+embeddedin-example-simple": "Mostrar las páginas que transcluyen <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Obtener información sobre las páginas que transcluyen <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "Devuelve todas las URL externas (excluidos los interwikis) de las páginas dadas.",
+ "apihelp-query+extlinks-param-limit": "Cuántos enlaces se devolverán.",
+ "apihelp-query+extlinks-param-protocol": "Protocolo de la URL. Si está vacío y <var>$1query</var> está definido, el protocolo es <kbd>http</kbd>. Para enumerar todos los enlaces externos, deja a la vez vacíos esto y <var>$1query</var>.",
+ "apihelp-query+extlinks-param-query": "Cadena de búsqueda sin protocolo. Útil para comprobar si una determinada página contiene una determinada URL externa.",
+ "apihelp-query+extlinks-param-expandurl": "Expandir las URL relativas a un protocolo con el protocolo canónico.",
+ "apihelp-query+extlinks-example-simple": "Obtener una lista de los enlaces externos en <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "Enumera páginas que contienen una URL dada.",
+ "apihelp-query+exturlusage-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Añade el identificado de la página.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Añade el URL utilizado en la página.",
+ "apihelp-query+exturlusage-param-protocol": "Protocolo del URL. Si está vacío y se establece <var>$1query</var>, el protocolo es <kbd>http</kbd>. Deja vacío esto y <var>$1query</var> para listar todos los enlaces externos.",
+ "apihelp-query+exturlusage-param-query": "Cadena de búsqueda sin protocolo. Véase [[Special:LinkSearch]]. Deja el campo vacío para enumerar todos los enlaces externos.",
+ "apihelp-query+exturlusage-param-namespace": "Los espacios de nombres que enumerar.",
+ "apihelp-query+exturlusage-param-limit": "Cuántas páginas se devolverán.",
+ "apihelp-query+exturlusage-param-expandurl": "Expandir las URL relativas a un protocolo con el protocolo canónico.",
+ "apihelp-query+exturlusage-example-simple": "Mostrar páginas que enlacen con <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "Enumerar todos los archivos borrados de forma secuencial.",
+ "apihelp-query+filearchive-param-from": "El título de imagen para comenzar la enumeración",
+ "apihelp-query+filearchive-param-to": "El título de imagen para detener la enumeración.",
+ "apihelp-query+filearchive-param-prefix": "Buscar todos los títulos de las imágenes que comiencen con este valor.",
+ "apihelp-query+filearchive-param-limit": "Número de imágenes que devolver en total.",
+ "apihelp-query+filearchive-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+filearchive-param-sha1": "Hash SHA1 de la imagen. Reemplaza $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "Hash SHA1 de la imagen en base 36 (utilizado en MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "Qué información de imagen se obtendrá:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Añade el hash SHA-1 para la imagen.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Añade la marca de tiempo de la versión subida.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Agrega el usuario que subió la versión de la imagen.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Agrega el tamaño de la imagen en bytes y la altura, la anchura y el número de páginas (si es aplicable).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias del tamaño.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Añade la descripción de la versión de la imagen.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analizar la descripción de la versión.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Añade el MIME de la imagen.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Añade el tipo multimedia de la imagen.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Enumera los metadatos Exif para la versión de la imagen.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Añade la profundidad de bit de la versión.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Añade el nombre de archivo de la versión archivada para las versiones que no son las últimas.",
+ "apihelp-query+filearchive-example-simple": "Mostrar una lista de todos los archivos eliminados.",
+ "apihelp-query+filerepoinfo-summary": "Devuelve metainformación sobre los repositorios de imágenes configurados en el wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Propiedades del repositorio a obtener (puede haber más disponibles en algunos wikis):\n;apiurl:URL del repositorio API - útil para obtener información de imagen del servidor.\n;name:La clave del repositorio - usado in e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> y [[Special:ApiHelp/query+imageinfo|imageinfo]] devuelve valores.\n;displayname:El nombre legible del repositorio wiki.\n;rooturl:Raíz URL para rutas de imágenes.\n;local:Si ese repositorio es local o no.",
+ "apihelp-query+filerepoinfo-example-simple": "Obtener información acerca de los repositorios de archivos.",
+ "apihelp-query+fileusage-summary": "Encontrar todas las páginas que utilizan los archivos dados.",
+ "apihelp-query+fileusage-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "Identificador de cada página.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Título de cada página.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Marcar si la página es una redirección.",
+ "apihelp-query+fileusage-param-namespace": "Incluir solo páginas de estos espacios de nombres.",
+ "apihelp-query+fileusage-param-limit": "Cuántos se devolverán.",
+ "apihelp-query+fileusage-param-show": "Muestra solo los elementos que cumplen estos criterios:\n;redirect: Muestra solamente redirecciones.\n;!redirect: Muestra solamente páginas que no son redirecciones.",
+ "apihelp-query+fileusage-example-simple": "Obtener una lista de páginas que utilicen [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Obtener información acerca de las páginas que utilicen [[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "Devuelve información del archivo y su historial de subida.",
+ "apihelp-query+imageinfo-param-prop": "Qué información del archivo se obtendrá:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Añade la marca de tiempo a la versión actualizada.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Añade el usuario que subió cada versión del archivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Añade la ID de usuario que subió cada versión del archivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Comentarios sobre la versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analizar el comentario de la versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Agrega el título canónico del archivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Devuelve la URL para el archivo y la página de descripción.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Agrega el tamaño del archivo en bytes y la altura, el ancho y el número de páginas (si aplica).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias para el tamaño.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Añade el hash SHA-1 para la imagen.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Añade el tipo MIME del archivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Añade el tipo MIME de la miniatura de la imagen (se requiere la URL y el parámetro $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Añade el tipo multimedia de la imagen.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Enumera los metadatos Exif para la versión del archivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Enumera los metadatos genéricos del formato del archivo para la versión del archivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Enumera metadatos con formato combinados de múltiples fuentes. Los resultados están en formato HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Añade el nombre del archivo de la versión archivada para las versiones anteriores a la última.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Añade la profundidad de bits de la versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Usado por la página de Carga Especial para obtener información sobre un archivo existente. No está diseñado para ser utilizado fuera del núcleo MediaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Añade si el archivo está en la [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "Cuántos revisiones de archivos se devolverán por perfil.",
+ "apihelp-query+imageinfo-param-start": "Marca de tiempo por la que empezar la enumeración.",
+ "apihelp-query+imageinfo-param-end": "Marca de tiempo por la que terminar la enumeración.",
+ "apihelp-query+imageinfo-param-urlwidth": "Si se establece $2prop=url, se devolverá una URL a una imagen escalada a este ancho.\nPor razones de rendimiento, si se utiliza esta opción, no se devolverán más de $1 imágenes escaladas.",
+ "apihelp-query+imageinfo-param-urlheight": "Similar a $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Versión de los metadatos que se utilizará. Si se especifica <kbd>latest</kbd>, utilizará la última versión. El valor predeterminado es <kbd>1</kbd>, por motivo de retrocompatibilidad.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "En qué idioma obtener «extmetadata». Esto afecta tanto la traducción que se obtendrá ―si hay varias― como el formato de elementos como los números y algunos valores.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Si las traducciones para la propiedad extmetadata están disponibles, busque todas ellas.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Si se especifica y no vacío, sólo estas claves serán devueltos por $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Un controlador específico de la cadena de parámetro. Por ejemplo, los archivos Pdf pueden utilizar <kbd>page15-100px</kbd>. <var>$1urlwidth</var> debe ser utilizado y debe ser consistente con <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Si <kbd>$2prop=badfile</kbd> está establecido, este es el título de la página utilizado al evaluar la [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "Buscar solo archivos en el repositorio local.",
+ "apihelp-query+imageinfo-example-simple": "Obtener información sobre la versión actual de [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Obtener información sobre las versiones de [[:File:Test.jpg]] a partir de 2008.",
+ "apihelp-query+images-summary": "Devuelve todos los archivos contenidos en las páginas dadas.",
+ "apihelp-query+images-param-limit": "Cuántos archivos se devolverán.",
+ "apihelp-query+images-param-images": "Mostrar solo estos archivos. Útil para comprobar si una determinada página tiene un determinado archivo.",
+ "apihelp-query+images-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+images-example-simple": "Obtener una lista de los archivos usados en la [[Main Page|Portada]].",
+ "apihelp-query+images-example-generator": "Obtener información sobre todos los archivos empleados en [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Encontrar todas las páginas que usen el título de imagen dado.",
+ "apihelp-query+imageusage-param-title": "Título a buscar. No puede usarse en conjunto con $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "ID de página a buscar. No puede usarse con $1title.",
+ "apihelp-query+imageusage-param-namespace": "El espacio de nombres que enumerar.",
+ "apihelp-query+imageusage-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+imageusage-param-filterredir": "Cómo filtrar las redirecciones. Si se establece a no redirecciones cuando está habilitado $1redirect, esto solo se aplica al segundo nivel.",
+ "apihelp-query+imageusage-param-limit": "Número de páginas que devolver. Si está habilitado <var>$1redirect</var>, el límite se aplica a cada nivel de forma separada (es decir, se pueden devolver hasta 2 * <var>$1limit</var>).",
+ "apihelp-query+imageusage-param-redirect": "Si la página con el enlace es una redirección, encontrar también las páginas que enlacen a esa redirección. El límite máximo se reduce a la mitad.",
+ "apihelp-query+imageusage-example-simple": "Mostrar las páginas que usan [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Obtener información sobre las páginas que empleen [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Obtener información básica de la página.",
+ "apihelp-query+info-param-prop": "Qué propiedades adicionales se obtendrán:",
+ "apihelp-query+info-paramvalue-prop-protection": "Listar el nivel de protección de cada página.",
+ "apihelp-query+info-paramvalue-prop-talkid": "El identificador de la página de discusión correspondiente a cada página que no es de discusión.",
+ "apihelp-query+info-paramvalue-prop-watched": "Muestra el estado de seguimiento de cada página.",
+ "apihelp-query+info-paramvalue-prop-watchers": "El número de observadores, si se permite.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "El número de observadores de cada página que ha visitado ediciones recientes a esa página, si se permite.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "La hora de notificación de la lista de seguimiento de cada página.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "La ID de página de la página principal de cada página de discusión.",
+ "apihelp-query+info-paramvalue-prop-url": "Muestra una URL completa, una URL de edición y la URL canónica de cada página.",
+ "apihelp-query+info-paramvalue-prop-readable": "Si el usuario puede leer esta página.",
+ "apihelp-query+info-paramvalue-prop-preload": "Muestra el texto devuelto por EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Proporciona la manera en que se muestra realmente el título de la página",
+ "apihelp-query+info-param-testactions": "Comprobar su el usuario actual puede realizar determinadas acciones en la página.",
+ "apihelp-query+info-param-token": "Usa [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] en su lugar.",
+ "apihelp-query+info-example-simple": "Obtener información acerca de la página <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Obtén información general y protección acerca de la página <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "Encontrar todas las páginas que enlazan al enlace interwiki dado.",
+ "apihelp-query+iwbacklinks-extended-description": "Puede utilizarse para encontrar todos los enlaces con un prefijo, o todos los enlaces a un título (con un determinado prefijo). Si no se introduce ninguno de los parámetros, se entiende como «todos los enlaces interwiki».",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefijo para el interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Enlace interlingüístico que buscar. Se debe usar junto con <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Cuántas páginas se devolverán.",
+ "apihelp-query+iwbacklinks-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Añade el prefijo del interwiki.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Añade el título del interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+iwbacklinks-example-simple": "Obtener las páginas enlazadas a [[wikibooks:Test]]",
+ "apihelp-query+iwbacklinks-example-generator": "Obtener información sobre las páginas que enlacen a [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Devuelve todos los enlaces interwiki de las páginas dadas.",
+ "apihelp-query+iwlinks-param-url": "Si desea obtener la URL completa (no se puede usar con $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Qué propiedades adicionales obtener para cada enlace interlingüe:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Añade el URL completo.",
+ "apihelp-query+iwlinks-param-limit": "Cuántos enlaces interwiki se desea devolver.",
+ "apihelp-query+iwlinks-param-prefix": "Devolver únicamente enlaces interwiki con este prefijo.",
+ "apihelp-query+iwlinks-param-title": "El enlace Interwiki para buscar. Debe utilizarse con <var>$1prefix </var>.",
+ "apihelp-query+iwlinks-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+iwlinks-example-simple": "Obtener los enlaces interwiki de la página <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Encuentra todas las páginas que conectan con el enlace de idioma dado.",
+ "apihelp-query+langbacklinks-extended-description": "Puede utilizarse para encontrar todos los enlaces con un código de idioma, o todos los enlaces a un título (con un idioma dado). El uso de ninguno de los parámetros es efectivamente \"todos los enlaces de idioma\".\n\nTenga en cuenta que esto no puede considerar los enlaces de idiomas agregados por extensiones.",
+ "apihelp-query+langbacklinks-param-lang": "Idioma del enlace de idioma.",
+ "apihelp-query+langbacklinks-param-title": "Enlace de idioma para buscar. Debe utilizarse con $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Cuántas páginas en total se devolverán.",
+ "apihelp-query+langbacklinks-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Agrega el código de idioma del enlace de idioma.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Añade el título del enlace de idioma.",
+ "apihelp-query+langbacklinks-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+langbacklinks-example-simple": "Obtener las páginas enlazadas a [[:fr:Test]]",
+ "apihelp-query+langbacklinks-example-generator": "Obtener información acerca de las páginas enlazadas a [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Devuelve todos los enlaces interlingüísticos de las páginas dadas.",
+ "apihelp-query+langlinks-param-limit": "Número de enlaces interlingüísticos que devolver.",
+ "apihelp-query+langlinks-param-url": "Obtener la URL completa o no (no se puede usar con <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Qué propiedades adicionales obtener para cada enlace interlingüe:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Añade el URL completo.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Añade el nombre del idioma localizado (o la mejor estimación). Usa <var>$1inlanguagecode</var> para controlar el idioma.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Añade el nombre nativo del idioma.",
+ "apihelp-query+langlinks-param-lang": "Devolver solo enlaces de idioma con este código de idioma.",
+ "apihelp-query+langlinks-param-title": "Enlace que buscar. Se debe usar junto con <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Código de idioma para los nombres de idiomas localizados.",
+ "apihelp-query+langlinks-example-simple": "Obtener los enlaces interlingüísticos de la página <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Devuelve todos los enlaces de las páginas dadas.",
+ "apihelp-query+links-param-namespace": "Mostrar solo los enlaces en estos espacios de nombres.",
+ "apihelp-query+links-param-limit": "Cuántos enlaces se devolverán.",
+ "apihelp-query+links-param-titles": "Devolver solo los enlaces a estos títulos. Útil para comprobar si una determinada página enlaza a un determinado título.",
+ "apihelp-query+links-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+links-example-simple": "Obtener los enlaces de la página <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Obtenga información sobre las páginas de enlace en la página <kbd>Página principal</kbd>.",
+ "apihelp-query+links-example-namespaces": "Obtener enlaces de la página <kbd>Main Page</kbd> de los espacios de nombres {{ns:user}} and {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Buscar todas las páginas que enlazan a las páginas dadas.",
+ "apihelp-query+linkshere-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "Identificador de cada página.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Título de cada página.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Indicar si la página es una redirección.",
+ "apihelp-query+linkshere-param-namespace": "Incluir solo páginas de estos espacios de nombres.",
+ "apihelp-query+linkshere-param-limit": "Cuántos se devolverán.",
+ "apihelp-query+linkshere-param-show": "Muestra solo los elementos que cumplen estos criterios:\n;redirect: Muestra solamente redirecciones.\n;!redirect: Muestra solamente páginas que no son redirecciones.",
+ "apihelp-query+linkshere-example-simple": "Obtener una lista de páginas que enlacen a la [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Obtener información acerca de las páginas enlazadas a la [[Main Page|Portada]].",
+ "apihelp-query+logevents-summary": "Obtener eventos de los registros.",
+ "apihelp-query+logevents-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Agrega el identificador del evento de registro.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Añade el título de la página para el evento del registro.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Añade el tipo del evento de registro.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Añade el usuario responsable del evento del registro.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Agrega el identificador del usuario responsable del evento del registro.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Añade la marca de tiempo para el evento del registro.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Añade el comentario del evento del registro.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Añade el comentario analizado del evento de registro.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Muestra detalles adicionales sobre el evento del registro.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Muestra las etiquetas para el evento del registro.",
+ "apihelp-query+logevents-param-type": "Filtrar las entradas del registro solo a este tipo.",
+ "apihelp-query+logevents-param-action": "Filtrar las acciones del registro solo a esta acción. Reemplaza <var>$1type</var>. En la lista de valores posibles, los valores con el asterisco como carácter comodín tales como <kbd>action/*</kbd> pueden tener distintas cadenas después de la barra (/).",
+ "apihelp-query+logevents-param-start": "Marca de tiempo por la que empezar la enumeración.",
+ "apihelp-query+logevents-param-end": "Marca de tiempo por la que terminar la enumeración.",
+ "apihelp-query+logevents-param-user": "Filtrar entradas a aquellas realizadas por el usuario dado.",
+ "apihelp-query+logevents-param-title": "Filtrar entradas a aquellas relacionadas con una página.",
+ "apihelp-query+logevents-param-namespace": "Filtrar entradas a aquellas en el espacio de nombres dado.",
+ "apihelp-query+logevents-param-prefix": "Filtrar entradas que empiezan por este prefijo.",
+ "apihelp-query+logevents-param-tag": "Solo mostrar las entradas de eventos con esta etiqueta.",
+ "apihelp-query+logevents-param-limit": "Número total de entradas de eventos que devolver.",
+ "apihelp-query+logevents-example-simple": "Mostrar los eventos recientes del registro.",
+ "apihelp-query+pagepropnames-summary": "Mostrar todos los nombres de propiedades de página utilizados en el wiki.",
+ "apihelp-query+pagepropnames-param-limit": "Número máximo de nombres que devolver.",
+ "apihelp-query+pagepropnames-example-simple": "Obtener los 10 primeros nombres de propiedades.",
+ "apihelp-query+pageprops-summary": "Obtener diferentes propiedades de página definidas en el contenido de la página.",
+ "apihelp-query+pageprops-param-prop": "Sólo listar estas propiedades de página (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> devuelve los nombres de las propiedades de página en uso). Útil para comprobar si las páginas usan una determinada propiedad de página.",
+ "apihelp-query+pageprops-example-simple": "Obtener las propiedades de las páginas <kbd>Main Page</kbd> y <kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "Mostrar todas las páginas que usen una propiedad de página.",
+ "apihelp-query+pageswithprop-param-propname": "Propiedad de página para la cual enumerar páginas (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> devuelve los nombres de las propiedades de página en uso).",
+ "apihelp-query+pageswithprop-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Añade el identificador de página.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Añade el valor de la propiedad de página.",
+ "apihelp-query+pageswithprop-param-limit": "El máximo número de páginas que se devolverán.",
+ "apihelp-query+pageswithprop-param-dir": "Dirección en la que se desea ordenar.",
+ "apihelp-query+pageswithprop-example-simple": "Listar las 10 primeras páginas que utilicen <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Obtener información adicional acerca de las 10 primeras páginas que utilicen <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Realice una búsqueda de prefijo de títulos de página.",
+ "apihelp-query+prefixsearch-extended-description": "A pesar de la similitud en los nombres, este módulo no pretende ser equivalente a [[Special:PrefixIndex]]; para eso, vea <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> con el parámetro <kbd> apprefix</kbd>. El propósito de este módulo es similar a <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: para tomar la entrada del usuario y proporcionar los mejores títulos coincidentes. Dependiendo del motor de búsqueda backend, esto puede incluir la corrección de errores, redirigir la evasión, u otras heurísticas.",
+ "apihelp-query+prefixsearch-param-search": "Buscar cadena.",
+ "apihelp-query+prefixsearch-param-namespace": "Espacios de nombres que buscar. Se ignora si <var>$1search</var> comienza por un prefijo de espacio de nombre válido.",
+ "apihelp-query+prefixsearch-param-limit": "Número máximo de resultados que devolver.",
+ "apihelp-query+prefixsearch-param-offset": "Número de resultados que omitir.",
+ "apihelp-query+prefixsearch-example-simple": "Buscar títulos de páginas que empiecen con <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Perfil de búsqueda que utilizar.",
+ "apihelp-query+protectedtitles-summary": "Mostrar todos los títulos protegidos contra creación.",
+ "apihelp-query+protectedtitles-param-namespace": "Listar solo los títulos en estos espacios de nombres.",
+ "apihelp-query+protectedtitles-param-level": "Listar solo títulos con estos niveles de protección.",
+ "apihelp-query+protectedtitles-param-limit": "Cuántas páginas se devolverán.",
+ "apihelp-query+protectedtitles-param-start": "Empezar la enumeración en esta marca de tiempo de protección.",
+ "apihelp-query+protectedtitles-param-end": "Terminar la enumeración en esta marca de tiempo de protección.",
+ "apihelp-query+protectedtitles-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Añade la marca de tiempo de cuando se añadió la protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Agrega el usuario que agregó la protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Agrega el identificador de usuario que agregó la protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Añade el comentario de la protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Añade el comentario analizado para la protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Añade la fecha y hora de cuando se levantará la protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Agrega el nivel de protección.",
+ "apihelp-query+protectedtitles-example-simple": "Listar títulos protegidos.",
+ "apihelp-query+protectedtitles-example-generator": "Encuentra enlaces a títulos protegidos en el espacio de nombres principal.",
+ "apihelp-query+querypage-summary": "Obtenga una lista proporcionada por una página especial basada en QueryPage.",
+ "apihelp-query+querypage-param-page": "El nombre de la página especial. Recuerda, distingue mayúsculas y minúsculas.",
+ "apihelp-query+querypage-param-limit": "Número de resultados que se devolverán.",
+ "apihelp-query+querypage-example-ancientpages": "Devolver resultados de [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Obtener un conjunto de páginas aleatorias.",
+ "apihelp-query+random-extended-description": "Las páginas aparecen enumeradas en una secuencia fija, solo que el punto de partida es aleatorio. Esto quiere decir que, si, por ejemplo, <samp>Portada</samp> es la primera página aleatoria de la lista, <samp>Lista de monos ficticios</samp> <em>siempre</em> será la segunda, <samp>Lista de personas en sellos de Vanuatu</samp> la tercera, etc.",
+ "apihelp-query+random-param-namespace": "Devolver solo las páginas de estos espacios de nombres.",
+ "apihelp-query+random-param-limit": "Limita el número de páginas aleatorias que se devolverán.",
+ "apihelp-query+random-param-redirect": "Usa <kbd>$1filterredir=redirects</kbd> en su lugar.",
+ "apihelp-query+random-param-filterredir": "Cómo filtrar las redirecciones.",
+ "apihelp-query+random-example-simple": "Devuelve dos páginas aleatorias del espacio de nombres principal.",
+ "apihelp-query+random-example-generator": "Devuelve la información de dos páginas aleatorias del espacio de nombres principal.",
+ "apihelp-query+recentchanges-summary": "Enumerar cambios recientes.",
+ "apihelp-query+recentchanges-param-start": "El sello de tiempo para comenzar la enumeración.",
+ "apihelp-query+recentchanges-param-end": "El sello de tiempo para finalizar la enumeración.",
+ "apihelp-query+recentchanges-param-namespace": "Filtrar cambios solamente a los espacios de nombres dados.",
+ "apihelp-query+recentchanges-param-user": "Listar solo los cambios de este usuario.",
+ "apihelp-query+recentchanges-param-excludeuser": "No listar cambios de este usuario.",
+ "apihelp-query+recentchanges-param-tag": "Listar solo los cambios con esta etiqueta.",
+ "apihelp-query+recentchanges-param-prop": "Incluir piezas adicionales de información:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Añade el usuario responsable de la edición y añade una etiqueta si se trata de una IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Añade el identificador del usuario responsable de la edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Añade el comentario de la edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Añade el comentario analizado para la edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Añade marcas para la edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Añade la marca de tiempo de la edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Añade el título de página de la edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Añade los códigos ID de la página, de los cambios recientes y de las revisiones antigua y nueva.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Añade la longitud antigua y la longitud nueva de la página en bytes.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Etiqueta la edición si la página es una redirección.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta ediciones verificables como verificadas o no verificadas.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Añade información de registro (identificador de registro, tipo de registro, etc.) a las entradas de registro.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Muestra las etiquetas de la entrada.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Añade la suma de comprobación de contenido para las entradas asociadas a una revisión.",
+ "apihelp-query+recentchanges-param-token": "Usa <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> en su lugar.",
+ "apihelp-query+recentchanges-param-show": "Muestra solo los elementos que cumplan estos criterios. Por ejemplo, para ver solo ediciones menores realizadas por usuarios conectados, introduce $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.",
+ "apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
+ "apihelp-query+recentchanges-param-toponly": "Enumerar solo las modificaciones que sean las últimas revisiones.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Cuando se utilice como generador, genera identificadores de revisión en lugar de títulos. Las entradas en la lista de cambios recientes que no tengan identificador de revisión asociado (por ejemplo, la mayoría de las entradas de registro) no generarán nada.",
+ "apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.",
+ "apihelp-query+recentchanges-example-generator": "Obtener información de página de cambios recientes no patrullados.",
+ "apihelp-query+redirects-summary": "Devuelve todas las redirecciones a las páginas dadas.",
+ "apihelp-query+redirects-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "Identificador de página de cada redirección.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Título de cada redirección.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Fragmento de cada redirección, si los hubiere.",
+ "apihelp-query+redirects-param-namespace": "Incluir solo páginas de estos espacios de nombres.",
+ "apihelp-query+redirects-param-limit": "Cuántas redirecciones se devolverán.",
+ "apihelp-query+redirects-param-show": "Mostrar únicamente los elementos que cumplan con estos criterios:\n;fragment: mostrar solo redirecciones con fragmento.\n;!fragment: mostrar solo redirecciones sin fragmento.",
+ "apihelp-query+redirects-example-simple": "Mostrar una lista de las redirecciones a la [[Main Page|Portada]]",
+ "apihelp-query+redirects-example-generator": "Obtener información sobre todas las redirecciones a la [[Main Page|Portada]].",
+ "apihelp-query+revisions-summary": "Obtener información de la revisión.",
+ "apihelp-query+revisions-extended-description": "Puede ser utilizado de varias maneras:\n# Obtener datos sobre un conjunto de páginas (última revisión), estableciendo títulos o ID de paginas.\n# Obtener revisiones para una página determinada, usando títulos o ID de páginas con inicio, fin o límite.\n# Obtener datos sobre un conjunto de revisiones estableciendo sus ID con revids.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Solo se puede usar con una sola página (modo n.º 2).",
+ "apihelp-query+revisions-param-startid": "Identificador de revisión a partir del cual empezar la enumeración.",
+ "apihelp-query+revisions-param-endid": "Identificador de revisión en el que detener la enumeración.",
+ "apihelp-query+revisions-param-start": "Marca de tiempo a partir de la cual empezar la enumeración.",
+ "apihelp-query+revisions-param-end": "Enumerar hasta esta marca de tiempo.",
+ "apihelp-query+revisions-param-user": "Incluir solo las revisiones realizadas por el usuario.",
+ "apihelp-query+revisions-param-excludeuser": "Excluir las revisiones realizadas por el usuario.",
+ "apihelp-query+revisions-param-tag": "Mostrar solo revisiones marcadas con esta etiqueta.",
+ "apihelp-query+revisions-example-content": "Obtener datos con el contenido de la última revisión de los títulos <kbd>API</kbd> y <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Mostrar las últimas 5 revisiones de la <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Obtener las primeras 5 revisiones de <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Obtener las primeras 5 revisiones de <kbd>Main Page</kbd> realizadas después de 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Obtener las primeras 5 revisiones de <kbd>Main Page</kbd> que no fueron realizadas por el usuario anónimo <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Obtener las primeras 5 revisiones de <kbd>Main Page</kbd> que fueron realizadas por el usuario <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Las propiedades que se obtendrán para cada revisión:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "El identificador de la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Marcas de revisión (menor).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "La fecha y hora de la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Usuario que realizó la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "Identificador de usuario del creador de la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Longitud (en bytes) de la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) de la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Identificador del modelo de contenido de la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Comentario del usuario para la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Comentario analizado del usuario para la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Texto de la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Etiquetas para la revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "El árbol de análisis sintáctico XML del contenido de la revisión (requiere el modelo de contenido <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Limitar la cantidad de revisiones que se devolverán.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Expandir las plantillas en el contenido de la revisión (requiere $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Generar el árbol de análisis sintáctico XML para el contenido de la revisión (requiere $1prop=content; reemplazado por <kbd>$1prop=parsetree</kbd>).",
+ "apihelp-query+revisions+base-param-parse": "Analizar el contenido de la revisión (requiere $1prop=content). Por motivos de rendimiento, si se utiliza esta opción, el valor de $1limit es forzado a 1.",
+ "apihelp-query+revisions+base-param-section": "Recuperar solamente el contenido de este número de sección.",
+ "apihelp-query+revisions+base-param-contentformat": "Formato de serialización utilizado para <var>$1difftotext</var> y esperado para la salida de contenido.",
+ "apihelp-query+search-summary": "Realizar una búsqueda de texto completa.",
+ "apihelp-query+search-param-namespace": "Buscar solo en estos espacios de nombres.",
+ "apihelp-query+search-param-what": "Tipo de búsqueda que realizar.",
+ "apihelp-query+search-param-info": "Qué metadatos devolver.",
+ "apihelp-query+search-param-prop": "Qué propiedades se devolverán:",
+ "apihelp-query+search-paramvalue-prop-size": "Añade el tamaño de la página en bytes.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Añade el número de palabras de la página.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Añade la marca de tiempo de la última edición de la página.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Añade un fragmento analizado de la página.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Añade un fragmento analizado del título de la página.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Añade un fragmento analizado del título de la redirección.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Añade el título de la redirección coincidente.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Añade un fragmento analizado del título de la sección correspondiente.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Añade el título de la sección correspondiente.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Añade un fragmento analizado de la categoría correspondiente.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Añade un booleano que indica si la búsqueda corresponde al contenido del archivo.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Añade datos adicionales generados por las extensiones.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignorado.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignorado",
+ "apihelp-query+search-param-limit": "Cuántas páginas en total se devolverán.",
+ "apihelp-query+search-param-interwiki": "Incluir resultados interwiki en la búsqueda, si es posible.",
+ "apihelp-query+search-param-backend": "Qué servidor de búsqueda utilizar, si no es el servidor por defecto.",
+ "apihelp-query+search-param-enablerewrites": "Habilitar la reescritura de consultas internas. Algunos servidores de búsqueda pueden reescribir la consulta a una que considere que da mejores resultados, por ejemplo, corrigiendo las faltas ortográficas.",
+ "apihelp-query+search-example-simple": "Buscar <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Buscar <kbd>meaning</kbd> en los textos.",
+ "apihelp-query+search-example-generator": "Obtener información acerca de las páginas devueltas por una búsqueda de <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Devolver información general acerca de la página web.",
+ "apihelp-query+siteinfo-param-prop": "Qué información se obtendrá:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Información global del sistema.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista de espacios de nombres registrados y sus nombres canónicos.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista de alias registrados de espacios de nombres",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista de alias de páginas especiales.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista de palabras mágicas y sus alias.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devuelve las estadísticas del sitio.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Devuelve el mapa interwiki (opcionalmente filtrado, opcionalmente localizado mediante el uso de <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devuelve el servidor de base de datos con el retraso de replicación más grande.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Devuelve los grupos de usuarios y los permisos asociados.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Devuelve las bibliotecas instaladas en el wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Devuelve las extensiones instaladas en el wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Devuelve una lista de extensiones de archivo permitidas para subirse.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devuelve información de permisos (licencia) del wiki, si está disponible.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devuelve información sobre tipos de restricciones (protección) disponible.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Devuelve una lista de los idiomas que admite MediaWiki (opcionalmente localizada mediante el uso de <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Devuelve una lista de todos las apariencias habilitadas (opcionalmente localizada mediante el uso de <var>$1inlanguagecode</var>, de lo contrario en el idioma del contenido).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Devuelve una lista de las etiquetas extensoras del analizador.",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Devuelve una lista de identificadores variables.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devuelve una lista de los protocolos que se permiten en los enlaces externos.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devuelve los valores predeterminados de las preferencias del usuario.",
+ "apihelp-query+siteinfo-param-filteriw": "Devuelve solo entradas locales o solo entradas no locales del mapa interwiki.",
+ "apihelp-query+siteinfo-param-numberingroup": "Muestra el número de usuarios en los grupos de usuarios.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Código de idioma para los nombres localizados de los idiomas (en el mejor intento posible) y apariencias.",
+ "apihelp-query+siteinfo-example-simple": "Obtener información del sitio.",
+ "apihelp-query+siteinfo-example-interwiki": "Obtener una lista de prefijos interwiki locales.",
+ "apihelp-query+stashimageinfo-summary": "Devuelve información del archivo para archivos escondidos.",
+ "apihelp-query+stashimageinfo-param-filekey": "Clave que identifica una carga anterior que se guardó en el almacén provisional.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias de $1filekey, para retrocompatibilidad.",
+ "apihelp-query+stashimageinfo-example-simple": "Devuelve información para un archivo escondido.",
+ "apihelp-query+stashimageinfo-example-params": "Devuelve las miniaturas de dos archivos escondidos.",
+ "apihelp-query+tags-summary": "Enumerar las etiquetas de modificación.",
+ "apihelp-query+tags-param-limit": "El número máximo de etiquetas para enumerar.",
+ "apihelp-query+tags-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+tags-paramvalue-prop-name": "Añade el nombre de la etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Agrega el mensaje de sistema para la etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-description": "Añade la descripción de la etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Añade el número de revisiones y entradas de registro que tienen esta etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Indicar si la etiqueta está definida.",
+ "apihelp-query+tags-paramvalue-prop-source": "Obtiene las fuentes de la etiqueta, que pueden incluir <samp>extension</samp> para etiquetas definidas por extensiones y <samp>manual</samp> para etiquetas que pueden aplicarse manualmente por los usuarios.",
+ "apihelp-query+tags-paramvalue-prop-active": "Si la etiqueta aún se sigue aplicando.",
+ "apihelp-query+tags-example-simple": "Enumera las etiquetas disponibles.",
+ "apihelp-query+templates-summary": "Devuelve todas las páginas transcluidas en las páginas dadas.",
+ "apihelp-query+templates-param-namespace": "Mostrar plantillas solamente en estos espacios de nombres.",
+ "apihelp-query+templates-param-limit": "Cuántas plantillas se devolverán.",
+ "apihelp-query+templates-param-templates": "Mostrar solo estas plantillas. Útil para comprobar si una determinada página utiliza una determinada plantilla.",
+ "apihelp-query+templates-param-dir": "La dirección en que ordenar la lista.",
+ "apihelp-query+templates-example-simple": "Obtener las plantillas que se usan en la página <kbd>Portada</kbd>.",
+ "apihelp-query+templates-example-generator": "Obtener información sobre las páginas de las plantillas utilizadas en <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Obtener las páginas de los espacios de nombres {{ns:user}} y {{ns:template}} que están transcluidas en la página <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-summary": "Encuentra todas las páginas que transcluyan las páginas dadas.",
+ "apihelp-query+transcludedin-param-prop": "Qué propiedades se obtendrán:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "Identificador de cada página.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Título de cada página.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Marcar si la página es una redirección.",
+ "apihelp-query+transcludedin-param-namespace": "Incluir solo las páginas en estos espacios de nombres.",
+ "apihelp-query+transcludedin-param-limit": "Cuántos se devolverán.",
+ "apihelp-query+transcludedin-param-show": "Muestra solo los elementos que cumplen estos criterios:\n;redirect: Muestra solamente redirecciones.\n;!redirect: Muestra solamente páginas que no son redirecciones.",
+ "apihelp-query+transcludedin-example-simple": "Obtener una lista de páginas transcluyendo <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Obtener información sobre las páginas que transcluyen <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "Obtener todas las ediciones realizadas por un usuario.",
+ "apihelp-query+usercontribs-param-limit": "Número máximo de contribuciones que se devolverán.",
+ "apihelp-query+usercontribs-param-user": "Los usuarios para los cuales se desea recuperar las contribuciones. No se puede utilizar junto con <var>$1userids</var> o <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Recuperar las contribuciones de todos los usuarios cuyos nombres comienzan con este valor. No se puede utilizar junto con <var>$1user</var> o <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "Los identificadores de los usuarios para los cuales se desea recuperar las contribuciones. No se puede utilizar junto con <var>$1userids</var> o <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Enumerar solo las contribuciones en estos espacios de nombres.",
+ "apihelp-query+usercontribs-param-prop": "Incluir piezas adicionales de información:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Añade el identificador de página y el de revisión.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Añade el comentario de la edición.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Añade el comentario analizado de la edición.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Añade el nuevo tamaño de la edición.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Añade la diferencia de tamaño de la edición respecto de su progenitora.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Añade las marcas de la edición.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta ediciones verificadas.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista las etiquetas para la edición.",
+ "apihelp-query+usercontribs-param-show": "Mostrar solo los elementos que coinciden con estos criterios. Por ejemplo, solo ediciones no menores: <kbd>$2show=!minor</kbd>.\n\nSi se establece <kbd>$2show=patrolled</kbd> o <kbd>$2show=!patrolled</kbd>, no se mostrarán las revisiones con una antigüedad mayor que <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}).",
+ "apihelp-query+usercontribs-param-tag": "Enumerar solo las revisiones con esta etiqueta.",
+ "apihelp-query+usercontribs-param-toponly": "Enumerar solo las modificaciones que sean las últimas revisiones.",
+ "apihelp-query+usercontribs-example-user": "Mostrar contribuciones del usuario <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Mostrar las contribuciones de todas las direcciones IP con el prefijo <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-summary": "Obtener información sobre el usuario actual.",
+ "apihelp-query+userinfo-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Etiqueta si el usuario está bloqueado, por quién y por qué motivo.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Añade una etiqueta <samp>messages</samp> si el usuario actual tiene mensajes pendientes.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos los grupos al que pertenece el usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Enumera los grupos a los que se ha asignado explícitamente al usuario actual, incluida la fecha de expiración de la pertenencia a cada grupo.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Enumera todos los grupos a los que pertenece automáticamente el usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todos los permisos que tiene el usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Enumera los grupos a los que el usuario actual se puede unir o retirar.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas las preferencias que haya establecido el usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Añade el número de ediciones del usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todos los límites de velocidad aplicados al usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Añade el nombre real del usuario.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Añade la dirección de correo electrónico del usuario y la fecha de autenticación por correo.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Reenvía la cabecera <code>Accept-Language</code> enviada por el cliente en un formato estructurado.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Añade la fecha de registro del usuario.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Añade el recuento de páginas no leídas de la lista de seguimiento del usuario (máximo $1, devuelve <samp>$2</samp> si el número es mayor).",
+ "apihelp-query+userinfo-example-simple": "Obtener información sobre el usuario actual.",
+ "apihelp-query+userinfo-example-data": "Obtener información adicional sobre el usuario actual.",
+ "apihelp-query+users-summary": "Obtener información sobre una lista de usuarios.",
+ "apihelp-query+users-param-prop": "Qué piezas de información incluir:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Etiqueta si el usuario está bloqueado, por quién y por qué razón.",
+ "apihelp-query+users-paramvalue-prop-groups": "Lista todos los grupos a los que pertenece cada usuario.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Enumera todos los grupos a los que pertenece automáticamente un usuario.",
+ "apihelp-query+users-paramvalue-prop-rights": "Enumera todos los permisos que tiene cada usuario.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Añade el número de ediciones del usuario.",
+ "apihelp-query+users-paramvalue-prop-registration": "Añade la marca de tiempo del registro del usuario.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Marca si el usuario puede y quiere recibir correo electrónico a través de [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Etiqueta el género del usuario. Devuelve \"masculino\", \"femenino\" o \"desconocido\".",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Indica si se puede crear una cuenta para nombres de usuario válidos pero no registrados.",
+ "apihelp-query+users-param-users": "Una lista de usuarios de los que obtener información.",
+ "apihelp-query+users-param-userids": "Una lista de identificadores de usuarios de los que obtener información.",
+ "apihelp-query+users-param-token": "Usa <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> en su lugar.",
+ "apihelp-query+users-example-simple": "Devolver información del usuario <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "Obtener los cambios recientes de las páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlist-param-start": "El sello de tiempo para comenzar la enumeración",
+ "apihelp-query+watchlist-param-end": "El sello de tiempo para finalizar la enumeración.",
+ "apihelp-query+watchlist-param-namespace": "Filtrar cambios solamente a los espacios de nombres dados.",
+ "apihelp-query+watchlist-param-user": "Mostrar solamente los cambios de este usuario.",
+ "apihelp-query+watchlist-param-excludeuser": "No listar cambios de este usuario.",
+ "apihelp-query+watchlist-param-limit": "Número de resultados que devolver en cada petición.",
+ "apihelp-query+watchlist-param-prop": "Qué propiedades adicionales se obtendrán:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Añade identificadores de revisiones y de páginas.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Añade el título de la página.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Añade marcas para la edición.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Añade el usuario que hizo la edición.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Añade el identificador de usuario de quien hizo la edición.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Añade el comentario de la edición.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Añade el comentario analizado de la edición.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta las ediciones que están verificadas.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Añade la longitud vieja y la nueva de la página.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Añade fecha y hora de cuando el usuario fue notificado por última vez acerca de la edición.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Añade información del registro cuando corresponda.",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "Enumera las etiquetas de la entrada.",
+ "apihelp-query+watchlist-param-show": "Muestra solo los elementos que cumplan estos criterios. Por ejemplo, para ver solo ediciones menores realizadas por usuarios conectados, introduce $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Qué tipos de cambios mostrar:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Ediciones comunes a páginas",
+ "apihelp-query+watchlist-paramvalue-type-external": "Cambios externos.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Creaciones de páginas.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Entradas del registro.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Cambios de pertenencia a categorías.",
+ "apihelp-query+watchlist-param-owner": "Utilizado junto con $1token para acceder a la lista de seguimiento de otro usuario.",
+ "apihelp-query+watchlist-example-simple": "Enumera la última revisión de las páginas con cambios recientes de la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlist-example-props": "Obtener información adicional sobre la última revisión de páginas con cambios recientes en la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlist-example-allrev": "Obtener información sobre todos los cambios recientes de páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlist-example-generator": "Obtener información de página de las páginas con cambios recientes de la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlist-example-generator-rev": "Obtener información de revisión de los cambios recientes de páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlist-example-wlowner": "Enumerar la última revisión de páginas con cambios recientes de la lista de seguimiento del usuario <kbd>Example</kbd>.",
+ "apihelp-query+watchlistraw-summary": "Obtener todas las páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlistraw-param-namespace": "Mostrar solamente las páginas de los espacios de nombres dados.",
+ "apihelp-query+watchlistraw-param-limit": "Número de resultados que devolver en cada petición.",
+ "apihelp-query+watchlistraw-param-prop": "Qué propiedades adicionales se obtendrán:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Añade la marca de tiempo de la última notificación al usuario sobre la edición.",
+ "apihelp-query+watchlistraw-param-show": "Mostrar solo los elementos que cumplen con estos criterios.",
+ "apihelp-query+watchlistraw-param-owner": "Utilizado junto con $1token para acceder a la lista de seguimiento de otro usuario.",
+ "apihelp-query+watchlistraw-param-dir": "La dirección en la que se listará.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Título (con el prefijo de espacio de nombres) desde el que se empezará a enumerar.",
+ "apihelp-query+watchlistraw-param-totitle": "Título (con el prefijo de espacio de nombres) desde el que se dejará de enumerar.",
+ "apihelp-query+watchlistraw-example-simple": "Listar las páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-query+watchlistraw-example-generator": "Obtener información de las páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-removeauthenticationdata-summary": "Elimina los datos de autentificación del usuario actual.",
+ "apihelp-removeauthenticationdata-example-simple": "Trata de eliminar los datos del usuario actual para <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Enviar un email de reinicialización de la contraseña a un usuario.",
+ "apihelp-resetpassword-param-user": "Usuario en proceso de reinicialización",
+ "apihelp-resetpassword-param-email": "Dirección de correo electrónico del usuario que se va a reinicializar",
+ "apihelp-resetpassword-example-user": "Enviar un correo de recuperación de contraseña al usuario <kbd>Ejemplo</kbd>.",
+ "apihelp-resetpassword-example-email": "Enviar un correo de recuperación de contraseña para todos los usuarios con dirección de correo electrónico <kbd>usuario@ejemplo.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Eliminar y restaurar revisiones",
+ "apihelp-revisiondelete-param-target": "Título de la página para el borrado de la revisión, en caso de ser necesario para ese tipo.",
+ "apihelp-revisiondelete-param-ids": "Identificadores de las revisiones para borrar.",
+ "apihelp-revisiondelete-param-hide": "Qué ocultar en cada revisión.",
+ "apihelp-revisiondelete-param-show": "Qué mostrar en cada revisión.",
+ "apihelp-revisiondelete-param-reason": "Motivo de la eliminación o restauración.",
+ "apihelp-revisiondelete-param-tags": "Etiquetas que aplicar a la entrada en el registro de borrados.",
+ "apihelp-revisiondelete-example-revision": "Ocultar el contenido de la revisión <kbd>12345</kbd> de la página <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Ocultar todos los datos de la entrada de registro <kbd>67890</kbd> con el motivo <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "Deshacer la última edición de la página.",
+ "apihelp-rollback-extended-description": "Si el último usuario que editó la página hizo varias ediciones consecutivas, todas ellas serán revertidas.",
+ "apihelp-rollback-param-title": "Título de la página que revertir. No se puede usar junto con <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "Identificador de la página que revertir. No se puede usar junto con <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Etiquetas que aplicar a la reversión.",
+ "apihelp-rollback-param-user": "Nombre del usuario cuyas ediciones se van a revertir.",
+ "apihelp-rollback-param-summary": "Resumen de edición personalizado. Si se deja vacío se utilizará el predeterminado.",
+ "apihelp-rollback-param-markbot": "Marcar las acciones revertidas y la reversión como ediciones por bots.",
+ "apihelp-rollback-param-watchlist": "Añadir o borrar incondicionalmente la página de la lista de seguimiento del usuario actual, usar preferencias o no cambiar seguimiento.",
+ "apihelp-rollback-example-simple": "Revertir las últimas ediciones de la página <kbd>Main Page</kbd> por el usuario <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Revertir las últimas ediciones de la página <kbd>Main Page</kbd> por el usuario de IP <kbd>192.0.2.5</kbd> con resumen <kbd>Reverting vandalism</kbd>, y marcar esas ediciones y la reversión como ediciones realizadas por bots.",
+ "apihelp-rsd-summary": "Exportar un esquema RSD (Really Simple Discovery; Descubrimiento Muy Simple).",
+ "apihelp-rsd-example-simple": "Exportar el esquema RSD.",
+ "apihelp-setnotificationtimestamp-summary": "Actualizar la marca de tiempo de notificación de las páginas en la lista de seguimiento.",
+ "apihelp-setnotificationtimestamp-extended-description": "Esto afecta a la función de resaltado de las páginas modificadas en la lista de seguimiento y al envío de correo electrónico cuando la preferencia \"{{int:tog-enotifwatchlistpages}}\" está habilitada.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Trabajar en todas las páginas en seguimiento.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Marca de tiempo en la que fijar la marca de tiempo de notificación.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Revisión a la que fijar la marca de tiempo de notificación (una sola página).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revisión a la que fijar la marca de tiempo de notificación más reciente (una sola página).",
+ "apihelp-setnotificationtimestamp-example-all": "Restablecer el estado de notificación para la totalidad de la lista de seguimiento.",
+ "apihelp-setnotificationtimestamp-example-page": "Restablecer el estado de notificación de <kbd>Main page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fijar la marca de tiempo de notificación de <kbd>Main page</kbd> para que todas las ediciones posteriores al 1 de enero de 2012 estén consideradas como no vistas.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Restablecer el estado de notificación de las páginas del espacio de nombres <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "Cambiar el idioma de una página.",
+ "apihelp-setpagelanguage-extended-description-disabled": "En este wiki no se permite modificar el idioma de las páginas.\n\nActiva <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> para utilizar esta acción.",
+ "apihelp-setpagelanguage-param-title": "Título de la página cuyo idioma deseas cambiar. No se puede usar junto con <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "Identificador de la página cuyo idioma deseas cambiar. No se puede usar junto con <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Código del idioma al que se desea cambiar la página. Usa <kbd>default</kbd> para restablecer la página al idioma predeterminado para el contenido del wiki.",
+ "apihelp-setpagelanguage-param-reason": "Motivo del cambio.",
+ "apihelp-setpagelanguage-param-tags": "Cambiar las etiquetas que aplicar a la entrada de registro resultante de esta acción.",
+ "apihelp-setpagelanguage-example-language": "Cambiar el idioma de <kbd>Main Page</kbd> al euskera.",
+ "apihelp-setpagelanguage-example-default": "Cambiar el idioma de la página con identificador 123 al idioma predeterminado para el contenido del wiki.",
+ "apihelp-stashedit-param-title": "Título de la página que se está editando.",
+ "apihelp-stashedit-param-section": "Número de la sección. <kbd>0</kbd> para una sección superior, <kbd>new</kbd> para una sección nueva.",
+ "apihelp-stashedit-param-sectiontitle": "El título de una sección nueva.",
+ "apihelp-stashedit-param-text": "Contenido de la página.",
+ "apihelp-stashedit-param-contentmodel": "Modelo del contenido nuevo.",
+ "apihelp-stashedit-param-contentformat": "Formato de serialización de contenido utilizado para el texto de entrada.",
+ "apihelp-stashedit-param-baserevid": "Identificador de la revisión de base.",
+ "apihelp-stashedit-param-summary": "Resumen de cambios.",
+ "apihelp-tag-summary": "Añadir o borrar etiquetas de modificación de revisiones individuales o entradas de registro.",
+ "apihelp-tag-param-rcid": "Uno o más identificadores de cambios recientes a los que añadir o borrar la etiqueta.",
+ "apihelp-tag-param-revid": "Uno o más identificadores de revisión a los que añadir o borrar la etiqueta.",
+ "apihelp-tag-param-logid": "Uno o más identificadores de entradas del registro a los que agregar o eliminar la etiqueta.",
+ "apihelp-tag-param-add": "Etiquetas que añadir. Solo se pueden añadir etiquetas definidas manualmente.",
+ "apihelp-tag-param-remove": "Etiquetas que borrar. Solo se pueden borrar etiquetas definidas manualmente o completamente indefinidas.",
+ "apihelp-tag-param-reason": "Motivo del cambio.",
+ "apihelp-tag-param-tags": "Etiquetas que aplicar a la entrada de registro que se generará como resultado de esta acción.",
+ "apihelp-tag-example-rev": "Añadir la etiqueta <kbd>vandalism</kbd> al identificador de revisión 123 sin especificar un motivo",
+ "apihelp-tag-example-log": "Eliminar la etiqueta <kbd>spam</kbd> de la entrada del registro con identificador 123 con el motivo <kbd>Wrongly applied</kbd>",
+ "apihelp-unblock-summary": "Desbloquear un usuario.",
+ "apihelp-unblock-param-id": "Identificador del bloqueo que se desea desbloquear (obtenido mediante <kbd>list=blocks</kbd>). No se puede usar junto con with <var>$1user</var> o <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Nombre de usuario, dirección IP o intervalo de direcciones IP para desbloquear. No se puede utilizar junto con <var>$1id</var> o <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "ID de usuario que desbloquear. No se puede utilizar junto con <var>$1id</var> o <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Motivo del desbloqueo.",
+ "apihelp-unblock-param-tags": "Cambiar las etiquetas que aplicar a la entrada en el registro de bloqueos.",
+ "apihelp-unblock-example-id": "Desbloquear el bloqueo de ID #<kbd>105</kbd>",
+ "apihelp-unblock-example-user": "Desbloquear al usuario <kbd>Bob</kbd> con el motivo <kbd>Sorry Bob</kbd>",
+ "apihelp-undelete-param-title": "Título de la página que restaurar.",
+ "apihelp-undelete-param-reason": "Motivo de la restauración.",
+ "apihelp-undelete-param-tags": "Cambiar las etiquetas para aplicar a la entrada en el registro de borrados.",
+ "apihelp-undelete-param-timestamps": "Marcas de tiempo de las revisiones que se desea restaurar. Si tanto <var>$1timestamps</var> como <var>$1fileids</var> están vacíos, se restaurarán todas.",
+ "apihelp-undelete-param-fileids": "Identificadores de las revisiones que se desea restaurar. Si tanto <var>$1timestamps</var> como <var>$1fileids</var> están vacíos, se restaurarán todas.",
+ "apihelp-undelete-example-page": "Restaurar la página <kbd>Main page</kbd>.",
+ "apihelp-undelete-example-revisions": "Restaurar dos revisiones de la página <kbd>Main Page</kbd>.",
+ "apihelp-upload-param-filename": "Nombre del archivo de destino.",
+ "apihelp-upload-param-tags": "Cambiar etiquetas para aplicar a la entrada del registro de subidas y a la revisión de página de archivo.",
+ "apihelp-upload-param-text": "Texto de página inicial para archivos nuevos.",
+ "apihelp-upload-param-watch": "Vigilar la página.",
+ "apihelp-upload-param-watchlist": "Añadir o borrar incondicionalmente la página de la lista de seguimiento del usuario actual, utilizar las preferencias o no cambiar el estado de seguimiento.",
+ "apihelp-upload-param-ignorewarnings": "Ignorar las advertencias.",
+ "apihelp-upload-param-file": "Contenido del archivo.",
+ "apihelp-upload-param-url": "URL de la que obtener el archivo.",
+ "apihelp-upload-param-filekey": "Clave que identifica una carga anterior que se guardó en el almacén provisional.",
+ "apihelp-upload-param-sessionkey": "Idéntico a $1filekey, mantenido por razones de retrocompatibilidad.",
+ "apihelp-upload-param-filesize": "Tamaño de archivo total de la carga.",
+ "apihelp-upload-param-offset": "Posición del fragmento en bytes.",
+ "apihelp-upload-param-chunk": "Contenido del fragmento.",
+ "apihelp-upload-param-async": "Realizar de forma asíncrona las operaciones de archivo potencialmente grandes cuando sea posible.",
+ "apihelp-upload-example-url": "Subir desde una URL.",
+ "apihelp-upload-example-filekey": "Completar una subida que falló debido a advertencias.",
+ "apihelp-userrights-summary": "Cambiar la pertenencia a grupos de un usuario.",
+ "apihelp-userrights-param-user": "Nombre de usuario.",
+ "apihelp-userrights-param-userid": "ID de usuario.",
+ "apihelp-userrights-param-add": "Agregar el usuario a estos grupos, o, si ya es miembro, actualizar la fecha de expiración de su pertenencia a ese grupo.",
+ "apihelp-userrights-param-expiry": "Marcas de tiempo de expiración. Pueden ser relativas (por ejemplo, <kbd>5 months</kbd> o <kbd>2 weeks</kbd>) o absolutas (por ejemplo, <kbd>2014-09-18T12:34:56Z</kbd>). Si sólo se fija una marca de tiempo, se utilizará para todos los grupos que se pasen al parámetro <var>$1añadir</var>. Usa <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, o <kbd>never</kbd> para que la pertenencia al grupo no tenga fecha de expiración.",
+ "apihelp-userrights-param-remove": "Eliminar el usuario de estos grupos.",
+ "apihelp-userrights-param-reason": "Motivo del cambio.",
+ "apihelp-userrights-param-tags": "Cambia las etiquetas que aplicar a la entrada del registro de derechos del usuario.",
+ "apihelp-userrights-example-user": "Agregar al usuario <kbd>FooBot</kbd> al grupo <kbd>bot</kbd> y eliminarlo de los grupos <kbd>sysop</kbd> y <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Añade el usuario con identificador <kbd>123</kbd> al grupo <kbd>bot</kbd>, y lo borra de los grupos <kbd>sysop</kbd> y <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "Añadir al usuario <kbd>SometimeSysop</kbd> al grupo <kbd>sysop</kbd> por 1 mes.",
+ "apihelp-validatepassword-summary": "Valida una contraseña contra las políticas de contraseñas del wiki.",
+ "apihelp-validatepassword-extended-description": "La validez es <samp>Good</samp> si la contraseña es aceptable, <samp>Change</samp> y la contraseña se puede usar para iniciar sesión pero debe cambiarse o <samp>Invalid</samp> si la contraseña no se puede usar.",
+ "apihelp-validatepassword-param-password": "Contraseña para validar.",
+ "apihelp-validatepassword-param-user": "Nombre de usuario, para pruebas de creación de cuentas. El usuario nombrado no debe existir.",
+ "apihelp-validatepassword-param-email": "Dirección de correo electrónico, para pruebas de creación de cuentas.",
+ "apihelp-validatepassword-param-realname": "Nombre real, para pruebas de creación de cuentas.",
+ "apihelp-validatepassword-example-1": "Validar la contraseña <kbd>foobar</kbd> para el usuario actual.",
+ "apihelp-validatepassword-example-2": "Validar la contraseña <kbd>qwerty</kbd> para la creación del usuario <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "Añadir o borrar páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-watch-param-title": "La página que seguir o dejar de seguir. Usa <var>$1titles</var> en su lugar.",
+ "apihelp-watch-param-unwatch": "Si se define, en vez de seguir la página, se dejará de seguir.",
+ "apihelp-watch-example-watch": "Vigilar la página <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Dejar de vigilar la <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "Seguir las primeras páginas del espacio de nombres principal.",
+ "apihelp-format-example-generic": "Devolver el resultado de la consulta en formato $1.",
+ "apihelp-format-param-wrappedhtml": "Devolver el HTML con resaltado sintáctico y los módulos ResourceLoader asociados en forma de objeto JSON.",
+ "apihelp-json-summary": "Extraer los datos de salida en formato JSON.",
+ "apihelp-json-param-callback": "Si se especifica, envuelve la salida dentro de una llamada a una función dada. Por motivos de seguridad, cualquier dato específico del usuario estará restringido.",
+ "apihelp-json-param-utf8": "Si se especifica, codifica la mayoría (pero no todos) de los caracteres no pertenecientes a ASCII como UTF-8 en lugar de reemplazarlos por secuencias de escape hexadecimal. Toma el comportamiento por defecto si <var>formatversion</var> no es <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Si se especifica, codifica todos los caracteres no pertenecientes a ASCII mediante secuencias de escape hexadecimal. Toma el comportamiento por defecto si <var>formatversion</var> no es <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Formato de salida:\n;1: Formato retrocompatible (booleanos con estilo XML, claves <samp>*</samp> para nodos de contenido, etc.).\n;2: Formato moderno experimental. ¡Atención, las especificaciones pueden cambiar!\n;latest: Utiliza el último formato (actualmente <kbd>2</kbd>). Puede cambiar sin aviso.",
+ "apihelp-jsonfm-summary": "Producir los datos de salida en formato JSON (con resaltado sintáctico en HTML).",
+ "apihelp-none-summary": "No extraer nada.",
+ "apihelp-php-summary": "Extraer los datos de salida en formato serializado PHP.",
+ "apihelp-php-param-formatversion": "Formato de salida:\n;1: Formato retrocompatible (booleanos con estilo XML, claves <samp>*</samp> para nodos de contenido, etc.).\n;2: Formato moderno experimental. ¡Atención, las especificaciones pueden cambiar!\n;latest: Utilizar el último formato (actualmente <kbd>2</kbd>). Puede cambiar sin aviso.",
+ "apihelp-phpfm-summary": "Producir los datos de salida en formato PHP serializado (con resaltado sintáctico en HTML).",
+ "apihelp-rawfm-summary": "Extraer los datos de salida, incluidos los elementos de depuración, en formato JSON (embellecido en HTML).",
+ "apihelp-xml-summary": "Producir los datos de salida en formato XML.",
+ "apihelp-xml-param-xslt": "Si se especifica, añade la página nombrada como una hoja de estilo XSL. El valor debe ser un título en el espacio de nombres {{ns:MediaWiki}} que termine en <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Si se especifica, añade un espacio de nombres XML.",
+ "apihelp-xmlfm-summary": "Producir los datos de salida en formato XML (con resaltado sintáctico en HTML).",
+ "api-format-title": "Resultado de la API de MediaWiki",
+ "api-format-prettyprint-header": "Esta es la representación en HTML del formato $1. HTML es adecuado para realizar tareas de depuración, pero no para utilizarlo en aplicaciones.\n\nUtiliza el parámetro <var>format</var> para modificar el formato de salida. Para ver la representación no HTML del formato $1, emplea <kbd>format=$2</kbd>.\n\nPara obtener más información, consulta la [[mw:Special:MyLanguage/API|documentación completa]] o la [[Special:ApiHelp/main|ayuda de API]].",
+ "api-format-prettyprint-header-only-html": "Esta es una representación en HTML destinada a la depuración, y no es adecuada para el uso de la aplicación.\n\nVéase la [[mw:Special:MyLanguage/API|documentación completa]] o la [[Special:ApiHelp/main|página de ayuda de la API]] para más información.",
+ "api-format-prettyprint-status": "Esta respuesta se devolvería con el estado HTTP $1 $2.",
+ "api-login-fail-badsessionprovider": "No se puede acceder mientras esté utilizándose $1.",
+ "api-pageset-param-titles": "Una lista de títulos en los que trabajar.",
+ "api-pageset-param-pageids": "Una lista de identificadores de páginas en las que trabajar.",
+ "api-pageset-param-revids": "Una lista de identificadores de revisiones en las que trabajar.",
+ "api-pageset-param-generator": "Obtener la lista de páginas en las que trabajar mediante la ejecución del módulo de consulta especificado.\n\n<strong>Nota:</strong> Los nombres de los parámetros del generador deben prefijarse con una «g», véanse los ejemplos.",
+ "api-pageset-param-redirects-generator": "Resolver automáticamente las redirecciones en <var>$1titles</var>, <var>$1pageids</var>, y <var>$1revids</var> y en las páginas devueltas por <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Resolver automáticamente las redirecciones en <var>$1titles</var>, <var>$1pageids</var> y <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Convertir los títulos a otras variantes, si es necesario. Solo funciona si el idioma del contenido del wiki admite la conversión entre variantes. La conversión entre variantes está habilitada en idiomas tales como $1.",
+ "api-help-title": "Ayuda de la API de MediaWiki",
+ "api-help-lead": "Esta es una página de documentación autogenerada de la API de MediaWiki.\n\nDocumentación y ejemplos: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Módulo principal",
+ "api-help-undocumented-module": "No existe ninguna documentación para el módulo $1.",
+ "api-help-flag-deprecated": "Este módulo está en desuso.",
+ "api-help-flag-internal": "<strong>Este módulo es interno o inestable.</strong> Su funcionamiento puede cambiar sin previo aviso.",
+ "api-help-flag-readrights": "Este módulo requiere permisos de lectura.",
+ "api-help-flag-writerights": "Este módulo requiere permisos de escritura.",
+ "api-help-flag-mustbeposted": "Este módulo solo acepta solicitudes POST.",
+ "api-help-flag-generator": "Este módulo puede utilizarse como un generador.",
+ "api-help-source": "Fuente: $1",
+ "api-help-source-unknown": "Fuente: <span class=\"apihelp-unknown\">desconocida</span>",
+ "api-help-license": "Licencia: [[$1|$2]]",
+ "api-help-license-noname": "Licencia: [[$1|Ver enlace]]",
+ "api-help-license-unknown": "Licencia: <span class=\"apihelp-unknown\">desconocida</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parámetro|Parámetros}}:",
+ "api-help-param-deprecated": "En desuso.",
+ "api-help-param-required": "Este parámetro es obligatorio.",
+ "api-help-datatypes-header": "Tipos de datos",
+ "api-help-datatypes": "Las entradas en MediaWiki deberían estar en UTF-8 según la norma NFC. MediaWiki puede tratar de convertir otros formatos, pero esto puede provocar errores en algunas operaciones (tales como las [[Special:ApiHelp/edit|ediciones]] con controles MD5).\n\nAlgunos tipos de parámetros en las solicitudes de API requieren de una explicación más detallada:\n;boolean\n:Los parámetros booleanos trabajo como cajas de verificación de HTML: si el parámetro está definido, independientemente de su valor, se considera verdadero. Para un valor falso, se debe omitir el parámetro por completo.\n;marca de tiempo\n:Las marcas de tiempo se pueden definir en varios formatos. Se recomienda seguir la norma ISO 8601 de fecha y hora. Todas las horas están en UTC, ignorándose cualquier indicación de zona horaria.\n:* Fecha y hora en ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (los signos de puntuación y la <kbd>Z</kbd> son opcionales)\n:* Fecha y hora en ISO 8601 con fracciones de segundo (que se omiten), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (los guiones, los dos puntos y la <kbd>Z</kbd> son opcionales)\n:* Formato MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato genérico de número, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (la zona horaria opcional, sea <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> o <kbd>-<var>##</var></kbd> se omite)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (la zona horaria es opcional), <kbd><var>lun</var>, <var>15</var> <var>ene</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (la zona horaria es opcional), <kbd><var>lunes</var>, <var>15</var>-<var>ene</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato ctime de C, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Número de segundos desde 1970-01-01T00:00:00Z en forma de número entero de entre 1 y 13 cifras (sin <kbd>0</kbd>)\n:* La cadena <kbd>now</kbd>\n\n;separador alternativo de valores múltiples\n:Los parámetros que toman valores múltiples se envían normalmente utilizando la barra vertical para separar los valores, p. ej., <kbd>param=valor1|valor2</kbd> o <kbd>param=valor1%7Cvalor2</kbd>. Si un valor tiene que contener el carácter de barra vertical, utiliza U+001F (separador de unidades) como separador ''y'' prefija el valor con, p. ej. <kbd>param=%1Fvalor1%1Fvalor2</kbd>.",
+ "api-help-param-type-limit": "Tipo: entero o <kbd>max</kbd>",
+ "api-help-param-type-integer": "Tipo: {{PLURAL:$1|1=entero|2=lista de enteros}}",
+ "api-help-param-type-boolean": "Tipo: booleano/lógico ([[Special:ApiHelp/main#main/datatypes|detalles]])",
+ "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=timestamp|2=lista de timestamps}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
+ "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nombre de usuario|2=lista de nombres de usuarios}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Uno de los siguientes valores|2=Valores (separados por <kbd>{{!}}</kbd> u [[Special:ApiHelp/main#main/datatypes|otro separador]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe estar vacío|Puede estar vacío, o $2}}",
+ "api-help-param-limit": "No se permite más de $1.",
+ "api-help-param-limit2": "No se permite más de $1 ($2 para los bots).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=El valor no debe ser menor|2=Los valores no deben ser menores}} a $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=El valor no debe ser mayor|2=Los valores no deben ser mayores}} a $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=El valor debe|2=Los valores deben}} estar entre $2 y $3.",
+ "api-help-param-multi-separate": "Separar los valores con <kbd>|</kbd> o con una [[Special:ApiHelp/main#main/datatypes|alternativa]].",
+ "api-help-param-multi-max": "El número máximo de los valores es {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para los bots).",
+ "api-help-param-multi-all": "Para especificar todos los valores, utiliza <kbd>$1</kbd>.",
+ "api-help-param-default": "Predeterminado: $1",
+ "api-help-param-default-empty": "Predeterminado: <span class=\"apihelp-empty\">(vacío)</span>",
+ "api-help-param-disabled-in-miser-mode": "Deshabilitado debido al [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo avaro]].",
+ "api-help-param-limited-in-miser-mode": "strong>Nota:</strong> Debido al [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo avaro]], usar esto puede dar lugar a que se devuelvan menos de <var>$1limit</var> antes de continuar. En casos extremos, podrían devolverse cero resultados.",
+ "api-help-param-direction": "En qué sentido hacer la enumeración:\n;newer: De más antiguos a más recientes. Nota: $1start debe ser anterior a $1end.\n;older: De más recientes a más antiguos (orden predefinido). Nota: $1start debe ser posterior a $1end.",
+ "api-help-param-continue": "Cuando haya más resultados disponibles, utiliza esto para continuar.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(sin descripción)</span>",
+ "api-help-param-maxbytes": "No puede sobrepasar $1 {{PLURAL:$1|byte|bytes}} de longitud.",
+ "api-help-param-maxchars": "No puede sobrepasar $1 {{PLURAL:$1|carácter|caracteres}} de longitud.",
+ "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Concedido a|Concedidos a}}: $2",
+ "api-help-right-apihighlimits": "Usa límites más altos para consultas a través de la API (consultas lentas: $1; consultas rápidas: $2). Los límites para las consultas lentas también se aplican a los parámetros multivalorados.",
+ "api-help-open-in-apisandbox": "<small>[abrir en la zona de pruebas]</small>",
+ "api-help-authmanagerhelper-messageformat": "Formato utilizado para los mensajes devueltos.",
+ "api-help-authmanagerhelper-mergerequestfields": "Combinar la información de los campos para todas las peticiones de autentificación en una matriz.",
+ "api-help-authmanagerhelper-preservestate": "Preservar el estado de un intento fallido anterior de inicio de sesión, si es posible.",
+ "apierror-allimages-redirect": "Usar <kbd>gaifilterredir=nonredirects</kbd> en lugar de <var>redirects</var> cuando se use <kbd>allimages</kbd> como generador.",
+ "apierror-allpages-generator-redirects": "Usar <kbd>gaifilterredir=nonredirects</kbd> en lugar de <var>redirects</var> cuando se use <kbd>allpages</kbd> como generador.",
+ "apierror-appendnotsupported": "No se puede añadir a las páginas que utilizan el modelo de contenido $1.",
+ "apierror-articleexists": "El artículo que intentaste crear ya estaba creado.",
+ "apierror-assertbotfailed": "La aserción de que el usuario tiene el derecho <code>bot</code> falló.",
+ "apierror-assertnameduserfailed": "La aserción de que el usuario es «$1» falló.",
+ "apierror-assertuserfailed": "La aserción de que el usuario está conectado falló.",
+ "apierror-autoblocked": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por un usuario bloqueado.",
+ "apierror-badconfig-resulttoosmall": "El valor de <code>$wgAPIMaxResultSize</code> en este wiki es demasiado pequeño como para contener información básica de resultados.",
+ "apierror-badcontinue": "Parámetro continue no válido. Debes pasar el valor original devuelto por la consulta anterior.",
+ "apierror-baddiff": "La comparación no puede recuperarse. Una o ambas revisiones no existen o no tienes permiso para verlas.",
+ "apierror-baddiffto": "<var>$1diffto</var> debe fijarse a un número no negativo, <kbd>prev</kbd>, <kbd>next</kbd> or <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "El formato solicitado $1 no es compatible con el modelo de contenido $2.",
+ "apierror-badformat": "El formato solicitado $1 no es compatible con el modelo de contenido $2 utilizado por $3.",
+ "apierror-badgenerator-notgenerator": "El módulo <kbd>$1</kbd> no puede utilizarse como un generador.",
+ "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> desconocido.",
+ "apierror-badip": "El parámetro IP no es válido.",
+ "apierror-badmd5": "El hash MD5 suministrado es incorrecto.",
+ "apierror-badmodule-badsubmodule": "El módulo <kbd>$1</kbd> no tiene un submódulo \"$2\".",
+ "apierror-badmodule-nosubmodules": "El módulo <kbd>$1</kbd> no tiene submódulos.",
+ "apierror-badparameter": "Valor no válido para el parámetro <var>$1</var>.",
+ "apierror-badquery": "La consulta no es válida.",
+ "apierror-badtimestamp": "Valor no válido \"$2\" para el parámetro de marca de tiempo <var>$1</var>.",
+ "apierror-badupload": "El parámetro de subida de archivo <var>$1</var> no es una subida de archivo. Asegúrate de usar <code>multipart/form-data</code> para tu POST e introduce un nombre de archivo en la cabecera <code>Content-Disposition</code>.",
+ "apierror-badurl": "Valor no válido \"$2\" para el parámetro de URL <var>$1</var>.",
+ "apierror-baduser": "Valor no válido \"$2\" para el parámetro de usuario <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "El separador multivalor U+001F solo se puede utilizar en parámetros multivalorados.",
+ "apierror-blockedfrommail": "Se te ha bloqueado de enviar email.",
+ "apierror-blocked": "Se te ha bloqueado de editar.",
+ "apierror-botsnotsupported": "Esta interfaz no está disponible para bots.",
+ "apierror-cannotreauthenticate": "Esta acción no está disponible, ya que tu identidad no se puede verificar.",
+ "apierror-cannotviewtitle": "No tienes permiso para ver $1.",
+ "apierror-cantblock-email": "No tienes permiso para bloquear a los usuarios el envío de correo electrónico a través de la wiki.",
+ "apierror-cantblock": "No tienes permiso para bloquear usuarios.",
+ "apierror-cantchangecontentmodel": "No tienes permiso para cambiar el modelo de contenido de una página.",
+ "apierror-canthide": "No tienes permiso para ocultar nombres de usuario del registro de bloqueos.",
+ "apierror-cantimport-upload": "No tienes permiso para importar páginas subidas.",
+ "apierror-cantimport": "No tienes permiso para importar páginas.",
+ "apierror-cantoverwrite-sharedfile": "El fichero objetivo existe en un repositorio compartido y no tienes permiso para reemplazarlo.",
+ "apierror-cantsend": "No estás conectado, no tienes una dirección de correo electrónico confirmada o no tienes permiso para enviar correo electrónico a otros usuarios, así que no puedes enviar correo electrónico.",
+ "apierror-cantundelete": "No se ha podido restaurar: puede que las revisiones solicitadas no existan o que ya se hayan restaurado.",
+ "apierror-changeauth-norequest": "No se ha podido crear la petición de modificación.",
+ "apierror-compare-nosuchfromsection": "No existe una sección $1 en el contenido 'from'.",
+ "apierror-compare-nosuchtosection": "No existe una sección $1 en el contenido 'to'.",
+ "apierror-contentserializationexception": "La serialización de contenido falló: $1",
+ "apierror-contenttoobig": "El contenido que has suministrado supera el tamaño máximo de archivo de $1 {{PLURAL:$1|kilobyte|kilobytes}}.",
+ "apierror-copyuploadbaddomain": "No se permite realizar cargas a partir de este dominio.",
+ "apierror-copyuploadbadurl": "No se permite realizar cargas a partir de este URL.",
+ "apierror-create-titleexists": "Los títulos existentes no se pueden proteger con <kbd>create</kbd>.",
+ "apierror-csp-report": "Error de procesamiento del informe CSP: $1.",
+ "apierror-databaseerror": "[$1] Error en la consulta de la base de datos.",
+ "apierror-deletedrevs-param-not-1-2": "El parámetro <var>$1</var> no se puede utilizar en los modos 1 o 2.",
+ "apierror-deletedrevs-param-not-3": "El parámetro <var>$1</var> no se puede usar en modo 3.",
+ "apierror-emptynewsection": "Crear secciones vacías no es posible.",
+ "apierror-emptypage": "Crear páginas vacías no está permitido.",
+ "apierror-exceptioncaught": "[$1] Excepción capturada: $2",
+ "apierror-filedoesnotexist": "El archivo no existe.",
+ "apierror-fileexists-sharedrepo-perm": "El archivo objetivo existe en un repositorio compartido. Usa el parámetro <var>ignorewarnings</var> para reemplazarlo.",
+ "apierror-filenopath": "No se pudo obtener la ruta local del archivo.",
+ "apierror-filetypecannotberotated": "El tipo de archivo no se puede girar.",
+ "apierror-formatphp": "Esta respuesta no se puede representar con <kbd>format=php</kbd>. Véase https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "El título de <kbd>$1</kbd> debe ser un archivo.",
+ "apierror-import-unknownerror": "Error desconocido en la importación: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> no puede ser mayor que $2 (fijado a $3) para bots o administradores de sistema.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> no puede ser mayor que $2 (fijado a $3) para usuarios.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> no puede ser menor que $2 (fijado a $3).",
+ "apierror-invalidcategory": "El nombre de la categoría que has introducido no es válida.",
+ "apierror-invalidexpiry": "Tiempo de expiración \"$1\" no válido.",
+ "apierror-invalidlang": "Código de idioma no válido para el parámetro <var>$1</var>.",
+ "apierror-invalidparammix-cannotusewith": "El parámetro <kbd>$1</kbd> no se puede utilizar junto con <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "El parámetro <kbd>$1</kbd> solo se puede utilizar junto con <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> no se puede combinar con los parámetros <var>oldid</var>, <var>pageid</var> y <var>page</var>. Por favor, utiliza <var>title</var> y <var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Los parámetros}} $1 no se pueden utilizar juntos.",
+ "apierror-invalidsection": "El parámetro <var>section</var> debe ser un identificador de sección válido, o bien <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "El hash SHA1Base36 proporcionado no es válido.",
+ "apierror-invalidsha1hash": "El hash SHA1 proporcionado no es válido.",
+ "apierror-invalidtitle": "Título incorrecto \"$1\".",
+ "apierror-invalidurlparam": "Valor no válido para <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Nombre de usuario «$1» no válido.",
+ "apierror-invaliduserid": "El identificador de usuario <var>$1</var> no es válido.",
+ "apierror-maxbytes": "El parámetro <var>$1</var> no puede sobrepasar $2 {{PLURAL:$2|byte|bytes}}",
+ "apierror-maxchars": "El parámetro <var>$1</var> no puede sobrepasar $2 {{PLURAL:$2|carácter|caracteres}} de longitud.",
+ "apierror-mimesearchdisabled": "La búsqueda MIME está deshabilitada en el modo avaro.",
+ "apierror-missingcontent-pageid": "Contenido faltante para la página con identificador $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|El parámetro|Al menos uno de los parámetros}} $1 es necesario.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|El parámetro|Uno de los parámetros}} $1 es necesario.",
+ "apierror-missingparam": "Se debe establecer el parámetro <var>$1</var>.",
+ "apierror-missingrev-pageid": "No hay ninguna revisión actual de la página con ID $1.",
+ "apierror-missingtitle-createonly": "Los títulos faltantes solo se pueden proteger con <kbd>create</kbd>.",
+ "apierror-missingtitle": "El título especificado no existe.",
+ "apierror-missingtitle-byname": "La página $1 no existe.",
+ "apierror-moduledisabled": "El módulo <kbd>$1</kbd> ha sido deshabilitado.",
+ "apierror-multival-only-one-of": "Solo {{PLURAL:$3|se permite el valor|se permiten los valores}} $2 para el parámetro <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> no se puede utilizar más que con una sola página.",
+ "apierror-mustbeloggedin-changeauth": "Debes estar conectado para poder cambiar los datos de autentificación.",
+ "apierror-mustbeloggedin-generic": "Debes estar conectado.",
+ "apierror-mustbeloggedin-linkaccounts": "Debes estar conectado para enlazar cuentas.",
+ "apierror-mustbeloggedin-removeauth": "Debes estar conectado para borrar datos de autentificación.",
+ "apierror-mustbeloggedin-uploadstash": "El almacén provisional de cargas solo está disponible para usuarios que hayan accedido a una cuenta.",
+ "apierror-mustbeloggedin": "Debes estar conectado para $1.",
+ "apierror-mustbeposted": "El módulo <kbd>$1</kbd> requiere una petición POST.",
+ "apierror-mustpostparams": "Se {{PLURAL:$2|encontró el siguiente parámetro|encontraron los siguientes parámetros}} en la cadena de la consulta, pero deben estar en el cuerpo del POST: $1.",
+ "apierror-noapiwrite": "La edición de este wiki a través de la API está deshabilitada. Asegúrate de que la declaración <code>$wgEnableWriteAPI=true;</code> está incluida en el archivo <code>LocalSettings.php</code> del wiki.",
+ "apierror-nochanges": "No se solicitó ningún cambio.",
+ "apierror-nodeleteablefile": "No existe tal versión antigua del archivo.",
+ "apierror-no-direct-editing": "La edición directa a través de la API no es compatible con el modelo de contenido $1 utilizado por $2.",
+ "apierror-noedit-anon": "Los usuarios anónimos no pueden editar páginas.",
+ "apierror-noedit": "No tienes permiso para editar páginas.",
+ "apierror-noimageredirect-anon": "Los usuarios anónimos no pueden crear redirecciones de imágenes.",
+ "apierror-noimageredirect": "No tienes permiso para crear redirecciones de imágenes.",
+ "apierror-nosuchlogid": "No hay ninguna entrada de registro con identificador $1.",
+ "apierror-nosuchpageid": "No hay ninguna página con identificador $1.",
+ "apierror-nosuchrcid": "No hay ningún cambio reciente con identificador $1.",
+ "apierror-nosuchrevid": "No hay ninguna revisión con identificador $1.",
+ "apierror-nosuchsection": "No hay ninguna sección $1.",
+ "apierror-nosuchsection-what": "No hay ninguna sección $1 en $2.",
+ "apierror-nosuchuserid": "No hay ningún usuario con ID $1.",
+ "apierror-notarget": "No has especificado un destino válido para esta acción.",
+ "apierror-notpatrollable": "La revisión r$1 no se puede patrullar por ser demasiado antigua.",
+ "apierror-offline": "No se puede continuar debido a problemas de conectividad de la red. Asegúrate de que tienes una conexión activa a internet e inténtalo de nuevo.",
+ "apierror-opensearch-json-warnings": "No se pueden representar los avisos en formato JSON de OpenSearch.",
+ "apierror-pagecannotexist": "En este espacio de nombres no se permiten páginas reales.",
+ "apierror-pagedeleted": "La página ha sido borrada en algún momento desde que obtuviste su marca de tiempo.",
+ "apierror-pagelang-disabled": "En este wiki no se puede cambiar el idioma de una página.",
+ "apierror-paramempty": "El parámetro <var>$1</var> no puede estar vacío.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> solo es compatible con el contenido en wikitexto.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> solo es compatible con el contenido en wikitexto. $1 usa el modelo de contenido $2.",
+ "apierror-permissiondenied": "No tienes permiso para $1.",
+ "apierror-permissiondenied-generic": "Permiso denegado.",
+ "apierror-permissiondenied-unblock": "No tienes permiso para desbloquear usuarios.",
+ "apierror-prefixsearchdisabled": "La búsqueda por prefijo está deshabilitada en el modo avaro.",
+ "apierror-promised-nonwrite-api": "La cabecera HTTP <code>Promise-Non-Write-API-Action</code> no se puede enviar a módulos de la API en modo escritura.",
+ "apierror-protect-invalidaction": "Tipo de protección «$1» no válido.",
+ "apierror-protect-invalidlevel": "Nivel de protección «$1» no válido.",
+ "apierror-ratelimited": "Has excedido tu límite de frecuencia. Aguarda unos minutos y vuelve a intentarlo.",
+ "apierror-readapidenied": "Necesitas permiso de lectura para utilizar este módulo.",
+ "apierror-readonly": "El wiki está actualmente en modo de solo lectura.",
+ "apierror-reauthenticate": "No te has autentificado recientemente en esta sesión. Por favor, vuelve a autentificarte.",
+ "apierror-revdel-mutuallyexclusive": "No se puede usar el mismo campo en <var>hide</var> y <var>show</var>.",
+ "apierror-revdel-paramneeded": "Se requiere al menos un valor para <var>hide</var> y/o <var>show</var>.",
+ "apierror-revisions-badid": "No se encontró ninguna revisión para el parámetro <var>$1</var>.",
+ "apierror-revisions-norevids": "El parámetro <var>revids</var> no se puede utilizar junto con las opciones de lista (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> y <var>$1end</var>).",
+ "apierror-revisions-singlepage": "Se utilizó <var>titles</var>, <var>pageids</var> o un generador para proporcionar múltiples páginas, pero los parámetros <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> y <var>$1end</var> solo se pueden utilizar en una sola página.",
+ "apierror-revwrongpage": "r$1 no es una revisión de $2.",
+ "apierror-searchdisabled": "Se ha desactivado la búsqueda de «<var>$1</var>».",
+ "apierror-sectionreplacefailed": "No se ha podido combinar la sección actualizada.",
+ "apierror-sectionsnotsupported": "Las secciones no son compatibles con el modelo de contenido $1.",
+ "apierror-sectionsnotsupported-what": "Las secciones no son compatibles con $1.",
+ "apierror-show": "Parámetro incorrecto: no se pueden proporcionar valores mutuamente excluyentes.",
+ "apierror-siteinfo-includealldenied": "No se puede ver la información de todos los servidores a menos que <var>$wgShowHostNames</var> tenga valor verdadero.",
+ "apierror-sizediffdisabled": "La diferencia de tamaño está deshabilitada en el modo avaro.",
+ "apierror-spamdetected": "Tu edición fue rechazada por contener un fragmento de spam: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "No tienes permiso para ver los resultados de esta página especial.",
+ "apierror-stashedfilenotfound": "No se pudo encontrar el archivo en el almacén provisional: $1.",
+ "apierror-stashfilestorage": "No se pudo guardar la carga en el almacén provisional: $1",
+ "apierror-stashwrongowner": "Propietario incorrecto: $1",
+ "apierror-stashzerolength": "El archivo mide cero bytes y no puede guardarse en el almacén provisional: $1.",
+ "apierror-systemblocked": "Has sido bloqueado automáticamente por el software MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "La expansión de plantillas solo es compatible con el contenido en wikitexto. $1 usa el modelo de contenido $2.",
+ "apierror-timeout": "El servidor no respondió en el plazo previsto.",
+ "apierror-unknownaction": "La acción especificada, <kbd>$1</kbd>, no está reconocida.",
+ "apierror-unknownerror-editpage": "Error de EditPage desconocido: $1.",
+ "apierror-unknownerror-nocode": "Error desconocido.",
+ "apierror-unknownerror": "Error desconocido: «$1»",
+ "apierror-unknownformat": "Formato no reconocido «$1».",
+ "apierror-unrecognizedparams": "{{PLURAL:$2|Parámetro no reconocido|Parámetros no reconocidos}}: $1.",
+ "apierror-unrecognizedvalue": "Valor no reconocido para el parámetro <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "El repositorio local de archivos no permite consultar todas las imágenes.",
+ "apierror-upload-inprogress": "Ya está en curso la carga desde el almacén provisional.",
+ "apierror-urlparamnormal": "No se pudieron normalizar los parámetros de imagen de $1.",
+ "apierror-writeapidenied": "No tienes permiso para editar este wiki a través de la API.",
+ "apiwarn-alldeletedrevisions-performance": "Para conseguir un mejor rendimiento a la hora de generar títulos, establece <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "No se pudo analizar <var>$1urlparam</var> para $2. Se utilizarán solamente la anchura y altura.",
+ "apiwarn-badutf8": "El valor pasado para <var>$1</var> contiene datos no válidos o no normalizados. Los datos textuales deberían estar en Unicode válido, normalizado en NFC y sin caracteres de control C0 excepto HT (\\t), LF (\\n) y CR (\\r).",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> ha quedado obsoleto. En su lugar, utiliza <kbd>prop=deletedrevisions</kbd> o <kbd>list=alldeletedrevisions</kbd>.",
+ "apiwarn-deprecation-expandtemplates-prop": "Como no se ha especificado ningún valor para el parámetro <var>prop</var>, se ha utilizado un formato heredado para la salida. Este formato está en desuso y, en el futuro, el parámetro <var>prop</var> tendrá un valor predeterminado, de forma que siempre se utilizará el formato nuevo.",
+ "apiwarn-deprecation-httpsexpected": "Se ha utilizado HTTP cuando se esperaba HTTPS.",
+ "apiwarn-deprecation-login-botpw": "El inicio de sesión con la cuenta principal mediante <kbd>action=login</kbd> está en desuso y puede dejar de funcionar sin aviso previo. Para proseguir el inicio de sesión mediante <kbd>action=login</kbd>, véase [[Special:BotPasswords]]. Para proseguir el inicio de sesión con la cuenta principal de forma segura, véase <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "El inicio de sesión con la cuenta principal mediante <kbd>action=login</kbd> está en desuso y puede dejar de funcionar sin aviso previo. Para iniciar sesión de forma segura, véase <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-parameter": "El parámetro <var>$1</var> ha quedado obsoleto.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> está en desuso desde MediaWiki 1.28. Usa <kbd>prop=headhtml</kbd> cuando crees nuevos documentos HTML, o <kbd>prop=módulos|jsconfigvars</kbd> cuando actualices un documento en el lado del cliente.",
+ "apiwarn-deprecation-purge-get": "El uso de <kbd>action=purge</kbd> mediante GET está obsoleto. Usa POST en su lugar.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> ha quedado obsoleto. En su lugar, utiliza <kbd>$2</kbd>.",
+ "apiwarn-invalidcategory": "\"$1\" no es una categoría.",
+ "apiwarn-invalidtitle": "«$1» no es un título válido.",
+ "apiwarn-invalidxmlstylesheetext": "Las hojas de estilo deben tener la extensión <code>.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "La hoja de estilos especificada no es válida o no existe.",
+ "apiwarn-invalidxmlstylesheetns": "La hoja de estilos debería estar en el espacio de nombres {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "La propiedad <kbd>modules</kbd> está definida, pero no lo está <kbd>jsconfigvars</kbd> ni <kbd>encodedjsconfigvars</kbd>. Las variables de configuración son necesarias para el correcto uso del módulo.",
+ "apiwarn-notfile": "\"$1\" no es un archivo.",
+ "apiwarn-parse-nocontentmodel": "No se proporcionó <var>title</var> ni <var>contentmodel</var>. Se asume $1.",
+ "apiwarn-tokennotallowed": "La acción «$1» no está permitida para el usuario actual.",
+ "apiwarn-truncatedresult": "Se ha truncado este resultado porque de otra manera sobrepasaría el límite de $1 bytes.",
+ "apiwarn-unclearnowtimestamp": "El paso de «$2» para el parámetro <var>$1</var> de la marca de tiempo ha quedado obsoleto. Si por alguna razón necesitas especificar de forma explícita la hora actual sin calcularla desde el lado del cliente, utiliza <kbd>now</kbd> («ahora»).",
+ "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor no reconocido|Valores no reconocidos}} para el parámetro <var>$1</var>: $2.",
+ "apiwarn-validationfailed-badchars": "caracteres no válidos en la clave (solamente se admiten los caracteres <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> y <code>-</code>).",
+ "apiwarn-validationfailed-badpref": "no es una preferencia válida.",
+ "apiwarn-validationfailed-cannotset": "no puede ser establecido por este módulo.",
+ "apiwarn-validationfailed-keytoolong": "clave demasiado larga (no puede tener más de $1 bytes).",
+ "apiwarn-validationfailed": "Error de validación de <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Aviso de seguridad</strong>: <var>$wgDebugAPI</var> está habilitado.",
+ "api-feed-error-title": "Error ($1)",
+ "api-usage-docref": "Véase $1 para el uso de la API.",
+ "api-exception-trace": "$1 en $2($3)\n$4",
+ "api-credits-header": "Créditos",
+ "api-credits": "Desarrolladores de la API:\n* Roan Kattouw (desarrollador principal, sep. 2007-2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creador y desarrollador principal, sep. 2006-sep. 2007)\n* Brad Jorsch (desarrollador principal, 2013-actualidad)\n\nEnvía comentarios, sugerencias y preguntas a mediawiki-api@lists.wikimedia.org\no informa de un error en https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/et.json b/www/wiki/includes/api/i18n/et.json
new file mode 100644
index 00000000..64107fc0
--- /dev/null
+++ b/www/wiki/includes/api/i18n/et.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pikne"
+ ]
+ },
+ "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.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Lisab kasutaja, kes iga failiversiooni üles laadis.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Lisab iga failiversiooni üles laadinud kasutaja identifikaatori.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Versioonikommentaar.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Parsib versioonikommentaari.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Lisab faili kanoonilise pealkirja.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Tagastab faili ja kirjelduslehekülje internetiaadressi.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Lisab faili suuruse baitides, kõrguse ja laiuse ning lehekülgede arvu, kui see on kohane.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Elemendi \"size\" rööpnimi.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Lisab faili SHA-1 räsiväärtuse.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Lisab faili MIME tüübi.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Lisab faili pisipildi MIME tüübi (vaja elementi \"url\" ja parameetrit \"$1urlwidth\").",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Lisab faili meediatüübi.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Loetleb failiversiooni Exif-metaandmed.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Loetleb failiversiooni vormingu üldised metaandmed.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Loetleb mitme allika vormindatud ühendmetaandmed. Tulemused on HTML-vormingus.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Lisab praegusest versioonist vanemate arhiiviversioonide failinimed.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Lisab versiooni bitisügavuse.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Kasutab lehekülg Special:Upload, et saada teavet olemasoleva faili kohta. Pole mõeldud kasutamiseks väljaspool MediaWiki keskosa.",
+ "apihelp-query+imageinfo-param-limit": "Kui palju redaktsioone faili kohta tagastada.",
+ "apihelp-query+imageinfo-param-start": "Ajatempel, millest loetlemist alustada.",
+ "apihelp-query+imageinfo-param-end": "Ajatempel, mille juures loetlemine lõpetada.",
+ "apihelp-query+imageinfo-param-urlwidth": "Kui $2prop=url on määratud, tagastatakse selle laiusega mastaabitud pildi internetiaadress.\nKui seda valikut kasutatakse, siis ei tagastata jõudluskaalutlusel rohkem kui $1 mastaabitud pilti.",
+ "apihelp-query+imageinfo-param-urlheight": "Analoogne parameetriga \"$1urlwidth\".",
+ "apihelp-query+imageinfo-param-metadataversion": "Kasutatavate metaandmete versioon. Kui määratud on <kbd>latest</kbd>, kasutatakse viimast versiooni. Vaikeväärtus on tagasiühilduvuse huvides <kbd>1</kbd>.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Millises keeles metaandmed välja võtta. Sellest oleneb väljavõtte tõlge, juhul kui saadaval on mitu tõlget, ning samuti numbrite ja muude väärtuste vorming.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Kui atribuudi \"extmetadata\" tõlked on saadaval, siis kasuta neid kõiki.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Kui määratud ja mittetühi, tagastatakse atribuudi $1prop=extmetadata jaoks ainult need võtmed.",
+ "apihelp-query+imageinfo-param-urlparam": "Töötlusele omane parameetriväärtus. Näiteks PDF-i jaoks võib see olla <kbd>page15-100px</kbd>. Kasutatud peab olema atribuuti <var>$1urlwidth</var> ja see peab olema kooskõlas parameetriga <var>$1urlparam</var>.",
+ "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."
+}
diff --git a/www/wiki/includes/api/i18n/eu.json b/www/wiki/includes/api/i18n/eu.json
new file mode 100644
index 00000000..f15e8194
--- /dev/null
+++ b/www/wiki/includes/api/i18n/eu.json
@@ -0,0 +1,262 @@
+{
+ "@metadata": {
+ "authors": [
+ "Subi",
+ "Sator",
+ "An13sa",
+ "Gorkaazk",
+ "Mikel Ibaiba",
+ "Iñaki LL"
+ ]
+ },
+ "apihelp-main-param-action": "Zein ekintza burutuko da.",
+ "apihelp-main-param-format": "Irteerako formatua.",
+ "apihelp-main-param-assertuser": "Egiaztatu erabiltzaile hau izendatutakoa dela.",
+ "apihelp-main-param-requestid": "Hemen emandako edozein balio erantzunean kontuan hartuko da. Eskaerak ezberdintzeko erabili ahalko da.",
+ "apihelp-main-param-servedby": "Sartu eskaera emaitzetan zerbitzariaren izena.",
+ "apihelp-main-param-curtimestamp": "Emaitzan oraingo denbora-zigilua jarri.",
+ "apihelp-block-summary": "Blokeatu erabiltzaile bat.",
+ "apihelp-block-param-userid": "Erabiltzaile IDa blokeatzear. Ezin da honekin batera erabili: <var>$1user</var>.",
+ "apihelp-block-param-reason": "Blokeatzeko arrazoia.",
+ "apihelp-block-param-anononly": "Erabiltzaile ezezagunak bakarrik blokeatu (adb. IP helbide honetarako ezezagunen aldaketak ezgaitu).",
+ "apihelp-block-param-nocreate": "Saihestu kontuak sortzea.",
+ "apihelp-block-param-reblock": "Erabiltzailea honezkero blokeatuta badago, lehendik dagoen blokea gainidatzi.",
+ "apihelp-block-param-watchuser": "Ikusi erabiltzaile edo IP helbidearen erabiltzaileak eta mintzamen orriak.",
+ "apihelp-block-param-tags": "Aldatu etiketak blokeen erregistro sarreran aplikatzeko.",
+ "apihelp-changeauthenticationdata-summary": "Aldatu autentifikazio datuak uneko erabiltzailearentzat.",
+ "apihelp-checktoken-param-type": "Frogatzen ari den token mota.",
+ "apihelp-checktoken-param-token": "Testatzeko hartuta.",
+ "apihelp-checktoken-param-maxtokenage": "Token-aren gehienezko adin baimendua, segundutan.",
+ "apihelp-clientlogin-summary": "Hasi saioa wikiera fluxu interaktiboa erabiliz.",
+ "apihelp-compare-summary": "Bi orrien arteko ezberdintasuna jaso.",
+ "apihelp-compare-param-fromtitle": "Aldaratzeko lehenengo izenburua",
+ "apihelp-compare-param-fromid": "Aldaratzeko lehenengo orri IDa",
+ "apihelp-compare-param-fromrev": "Lehenengo berrikusketa aldaratzeko",
+ "apihelp-compare-param-totitle": "Aldaratzeko bigarren izenburua.",
+ "apihelp-compare-param-toid": "Aldaratzeko bigarren orri IDa.",
+ "apihelp-compare-param-torev": "Aldaratzeko bigarren berrikusketa.",
+ "apihelp-compare-param-prop": "Hartu beharreko informazio zatiak.",
+ "apihelp-compare-paramvalue-prop-diff": "HTML diff-a",
+ "apihelp-compare-paramvalue-prop-diffsize": "HTML diff-aren tamainia, byte-tan",
+ "apihelp-compare-paramvalue-prop-size": "\"nondik\" eta \"nora\" berrikuspenen tamaina.",
+ "apihelp-compare-example-1": "1. eta 2. berrikusketen arteko \"diff\"-a sortu.",
+ "apihelp-createaccount-summary": "Erabiltzaile kontu berria sortu.",
+ "apihelp-createaccount-param-name": "Erabiltzaile izena.",
+ "apihelp-createaccount-param-domain": "Kanpoko autentifikaziorako domeinua (aukerakoa).",
+ "apihelp-createaccount-param-token": "Lehenengo eskaeran lortutako kontu sorrera token-a.",
+ "apihelp-createaccount-param-email": "Erabiltzailearen helbide elektronikoa (aukerakoa).",
+ "apihelp-createaccount-param-realname": "Erabiltzailearen benetako izena (aukerakoa).",
+ "apihelp-createaccount-param-mailpassword": "Edozein baliorako jarriz, erabiltzaileari mezu elektroniko baten bitartez ausazko pasahitza bidaliko zaio.",
+ "apihelp-createaccount-param-language": "Erabiltzailearentzako lehenetsiko den hizkuntza kodea (aukerakoa, edukien hizkuntza lehenetsia).",
+ "apihelp-delete-summary": "Orrialde bat ezabatu.",
+ "apihelp-delete-param-title": "Ezabatzeko orri izenburua. Hurrengoarekin batera ezin da erabili: <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Ezabatzeko orri edo ID orria. Hurrengoarekin batera ezin da erabili: <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Ezabatzeko arrazoia. Ezartzen ez bada, automatikoki sortutako arrazoi bat erabiliko da.",
+ "apihelp-delete-param-watch": "Orria erabiltzaile honen ikus-zerrendan sartu.",
+ "apihelp-delete-param-unwatch": "Erabiltzailearen oraingo ikus-zerrendatik orria kendu.",
+ "apihelp-delete-example-simple": "Ezabatu <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Ezabatu <kbd>Orri Nagusia</kbd> <kbd> arrazoiarekin hurrengoa mugitzeko prestatuz:</kbd>.",
+ "apihelp-disabled-summary": "Modulu hau ezgaitu da.",
+ "apihelp-edit-summary": "Orrialdeak sortu eta aldatu.",
+ "apihelp-edit-param-title": "Orri izenburua aldatzeke. Hurrengoarekin batera ezin da erabili: <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Ezabatzeko orri edo ID orria. Hurrengoarekin batera ezin da erabili: <var>$1title</var>.",
+ "apihelp-edit-param-sectiontitle": "Atal berri baten izenburua.",
+ "apihelp-edit-param-text": "Orrialdearen edukia.",
+ "apihelp-edit-param-tags": "Aldatu etiketak berrikusketa eskatzeko.",
+ "apihelp-edit-param-minor": "Aldaketa txikia.",
+ "apihelp-edit-param-notminor": "Aldaketa ez-txikiak",
+ "apihelp-edit-param-bot": "Aldaketa hau errobot aldaketa bezala markatu.",
+ "apihelp-edit-param-recreate": "Bitartean ezabatu den orrialdearen inguruko akatsak gainidaztea.",
+ "apihelp-edit-param-createonly": "Ez aldatu orria jadanik existitzen bada.",
+ "apihelp-edit-param-nocreate": "Orria ez bada existitzen akatsa bota.",
+ "apihelp-edit-param-watch": "Orria erabiltzaile honen ikus-zerrendan sartu.",
+ "apihelp-edit-param-unwatch": "Erabiltzailearen oraingo ikus-zerrendatik orria kendu.",
+ "apihelp-edit-param-watchlist": "Baldintzarik gabe gehitu edo kendu orria uneko erabiltzaileen jarraipen zerrendatik, erabili hobespenak edo ikuspena ez aldatu.",
+ "apihelp-edit-param-redirect": "Birbideratzeak automatikoki konpondu.",
+ "apihelp-edit-param-contentformat": "Sarrera-testuan erabilitako edukien serializazio formatua.",
+ "apihelp-edit-param-contentmodel": "Eduki berriko eduki eredua.",
+ "apihelp-edit-example-edit": "Orrialde bat aldatu",
+ "apihelp-emailuser-summary": "Erabiltzaileari e-maila bidali",
+ "apihelp-emailuser-param-target": "Email-a bidaltzeko erabiltzailea.",
+ "apihelp-emailuser-param-subject": "Gaiaren goiburua.",
+ "apihelp-emailuser-param-text": "Mezuaren gorputza.",
+ "apihelp-emailuser-param-ccme": "Bidal iezadazu mezu elektroniko honen kopia bat.",
+ "apihelp-emailuser-example-email": "<kbd>WikiSysop</kbd> erabiltzaileari mezu elektronikoa bidali <kbd>Edukia</kbd> testuarekin.",
+ "apihelp-expandtemplates-summary": "Wikitesturako txantiloi guztiak zabaldu.",
+ "apihelp-expandtemplates-param-title": "Orrialdearen izenburua.",
+ "apihelp-expandtemplates-param-text": "Bihurtzeko Wikitestua",
+ "apihelp-expandtemplates-param-revid": "Berrikusketa ID, <code><nowiki>{{REVISIONID}}</nowiki></code> eta antzeko aldagaientzako.",
+ "apihelp-expandtemplates-param-prop": "Lortzeko informazio zatiak.\n\nKontuan izan baliorik ez bada hautatu, emaitzak wikitestua eramango duela, baina irteera formatu zaharkitu batekin.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Wikitestu zabaldua.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Emaitzen cache-ak baliogabetu baino lehen iraun dezaketen denbora.",
+ "apihelp-feedcontributions-param-feedformat": "Produktuaren formatua.",
+ "apihelp-feedcontributions-param-user": "Zeintzuk erabiltzaileei ekarpenak egin.",
+ "apihelp-feedcontributions-param-year": "Urtetik aurrera (eta lehenagotik)",
+ "apihelp-feedcontributions-param-month": "Hilabetetik aurrera (eta lehenagotik)",
+ "apihelp-feedcontributions-param-tagfilter": "Etiketa hauek dituzten laguntzak iragazki.",
+ "apihelp-feedcontributions-param-deletedonly": "Ezabatutako laguntzak soilik erakutsi.",
+ "apihelp-feedcontributions-param-toponly": "Soilik azkenengo berriskusketak diren aldaketak erakutsi.",
+ "apihelp-feedcontributions-param-newonly": "Orrialde sorkuntza direnak soilik erakutsi",
+ "apihelp-feedcontributions-param-hideminor": "Aldaketa txikiak ezkutatu",
+ "apihelp-feedcontributions-param-showsizediff": "Berrikusketen arteko tamaina aldea erakutsi.",
+ "apihelp-feedrecentchanges-param-feedformat": "Produktuaren formatua.",
+ "apihelp-feedrecentchanges-param-days": "Egunen arabera emaitzak murriztu.",
+ "apihelp-feedrecentchanges-param-from": "Momentu horretatik aurrerako aldaketak erakutsi.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ezkutatu aldaketa txikiak.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ezkutatu botek egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ezkutatu erabiltzaile anonimoek egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ezkutatu izena emandako erabiltzaileek egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ezkutatu zainpeko aldaketak.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ezkutatu zuk egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Iragazi etiketen arabera.",
+ "apihelp-feedrecentchanges-example-simple": "Erakutsi aldaketa berriak",
+ "apihelp-feedrecentchanges-example-30days": "Erakutsi aldaketa berriak 30 egunez",
+ "apihelp-feedwatchlist-param-feedformat": "Produktuaren formatua.",
+ "apihelp-filerevert-summary": "Artxibo bat bertsio zaharrera bueltatu.",
+ "apihelp-filerevert-param-comment": "Iruzkina igo.",
+ "apihelp-help-example-main": "Modulu nagusirako laguntza.",
+ "apihelp-help-example-recursive": "Laguntza guztia orrialde batean.",
+ "apihelp-help-example-help": "Laguntza modulurako laguntza.",
+ "apihelp-help-example-query": "Bi eskaera azpi-moduluentzako laguntza.",
+ "apihelp-imagerotate-summary": "Irudi bat edo gehiago biratu.",
+ "apihelp-imagerotate-param-rotation": "Irudia erloju-orratzen norabidean biratzeko graduak.",
+ "apihelp-import-param-summary": "Inportazioaren laburpena.",
+ "apihelp-import-param-xml": "XML fitxategia igo da.",
+ "apihelp-import-param-tags": "Aldatu etiketak sarrera aplikatzeko inportatzeko sarreran eta inportatutako orrialdeetan berrikuspena kentzeko.",
+ "apihelp-login-param-name": "Erabiltzaile izena.",
+ "apihelp-login-param-password": "Pasahitza.",
+ "apihelp-login-param-domain": "Domeinua (hautazkoa).",
+ "apihelp-login-example-login": "Hasi saioa",
+ "apihelp-logout-summary": "Saioa itxi eta saioko datuak garbitu.",
+ "apihelp-logout-example-logout": "Erabiltzaile honi sesioa itxi.",
+ "apihelp-mergehistory-summary": "Orrialdeen historiak erakutsi.",
+ "apihelp-move-summary": "Orrialde bat mugitu",
+ "apihelp-move-param-reason": "Berrizenpenaren arrazoia.",
+ "apihelp-move-param-noredirect": "Birzuzenketarik ez sortu.",
+ "apihelp-move-param-ignorewarnings": "Edozein ohar ezikusi.",
+ "apihelp-opensearch-param-search": "Bilatu katea.",
+ "apihelp-opensearch-param-limit": "Bueltatzeko gehienezko emaitza kopurua.",
+ "apihelp-opensearch-param-namespace": "Bilatzeko izen-tarteak.",
+ "apihelp-opensearch-param-format": "Irteerako formatua.",
+ "apihelp-options-example-reset": "Berrezarri hobespen guztiak.",
+ "apihelp-paraminfo-summary": "API moduluei buruzko informazioa eskuratu.",
+ "apihelp-paraminfo-param-helpformat": "Laguntza-kateen formatua.",
+ "apihelp-parse-param-summary": "Analizatzeko laburpena.",
+ "apihelp-parse-param-preview": "Aurrebista moduaren bitartez aztertu.",
+ "apihelp-parse-example-page": "Aztertu orri bat.",
+ "apihelp-parse-example-text": "Wikitestua aztertu.",
+ "apihelp-parse-example-texttitle": "Wikitestua aztertu, orri izenburua zehaztuz.",
+ "apihelp-parse-example-summary": "Laburpen bat aztertu.",
+ "apihelp-patrol-summary": "Orri edo berrikusketa bat patruilatu.",
+ "apihelp-patrol-param-revid": "Patruilatzeko ID bat berrikusi.",
+ "apihelp-patrol-example-rcid": "Azkenaldian egindako aldaketa bat patruilatu.",
+ "apihelp-patrol-example-revid": "Patruilatu berrikusketa bat.",
+ "apihelp-protect-summary": "Aldatu orri baten segurtasun maila.",
+ "apihelp-protect-param-reason": "Babesteko edo babesa kentzeko zergatia.",
+ "apihelp-protect-example-protect": "Orrialde bat babestu",
+ "apihelp-purge-param-forcelinkupdate": "Eguneratu taula linkak.",
+ "apihelp-query-param-list": "Jasotzeko zerrendak.",
+ "apihelp-query-param-meta": "Jasotzeko metadata.",
+ "apihelp-query+allcategories-summary": "Kategoria guztiak zenbakitu.",
+ "apihelp-query+allcategories-param-prefix": "Balio honekin hasten diren kategoria guztiak bilatu.",
+ "apihelp-query+allcategories-param-dir": "Sailkatzeko norabidea.",
+ "apihelp-query+allcategories-param-min": "Soilik itzuli gutxienez kide kopuru hauek dituzten sailkapenetara.",
+ "apihelp-query+allcategories-param-max": "Soilik itzuli gehienez kide kopuru hauek dituzten sailkapenetara.",
+ "apihelp-query+allcategories-param-limit": "Zenbat kategorietara itzuli.",
+ "apihelp-query+allcategories-param-prop": "Zeintzuk propietateak hartu:",
+ "apihelp-query+alldeletedrevisions-param-from": "Zerrendatzen hasi titulu honetan.",
+ "apihelp-query+alldeletedrevisions-param-to": "Zerrendatzeari utzi titulu honetan.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Balio honekin hasten diren orri izenburu guztiak bilatu.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Erabiltzaile honen berrikusketak ez zerrendatu.",
+ "apihelp-query+allfileusages-param-prefix": "Balio honekin hasten diren artxibo izenburu guztiak bilatu.",
+ "apihelp-query+allfileusages-param-prop": "Sartu beharreko informazio zatiak:",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Fitxategiaren izenburua gehitzen du.",
+ "apihelp-query+allfileusages-param-limit": "Guztira bueltatzeko elementu kopurua.",
+ "apihelp-query+allfileusages-param-dir": "Zerrendatzeko norabidea.",
+ "apihelp-query+allfileusages-example-unique": "Zerrendatu artxibo izenburu bakarrak.",
+ "apihelp-query+allfileusages-example-unique-generator": "Artxibo izenburu guztiak hartzen ditu, falta direnak markatuz.",
+ "apihelp-query+allfileusages-example-generator": "Artxiboak dituzten orriak lortzen ditu.",
+ "apihelp-query+allimages-summary": "Sekuentzialki zenbakitzen ditu irudi guztiak.",
+ "apihelp-query+allimages-param-dir": "Zerrendatzeko norabidea.",
+ "apihelp-query+allimages-param-limit": "Guztira zenbat irudietara itzuli.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Link-aren izenburua gehitzen du.",
+ "apihelp-query+allmessages-param-prop": "Zeintzuk propietateak hartu.",
+ "apihelp-query+allmessages-param-lang": "Hizkuntza honetan dauden mezuak itzuli.",
+ "apihelp-query+allmessages-param-from": "Mezu honetan hasten diren mezuak itzuli.",
+ "apihelp-query+allmessages-param-to": "Mezu honetan bukatzen duten mezuak itzuli.",
+ "apihelp-query+allmessages-param-prefix": "Aurrizki hau daramaten mezuak itzuli.",
+ "apihelp-query+allmessages-example-ipb": "Erakutsi honela hasten diren mezuak: <kbd>ipb-</kbd>.",
+ "apihelp-query+allpages-param-prefix": "Balio honekin hasten diren orri izenburu guztiak bilatu.",
+ "apihelp-query+allpages-param-filterredir": "Zeintzuk orri zerrendatu.",
+ "apihelp-query+allpages-param-minsize": "Gutxieneko byte kopuru hau betetzen duten orrietara mugatu.",
+ "apihelp-query+allpages-param-maxsize": "Gehienez byte kopuru hau betetzen duten orrietara mugatu.",
+ "apihelp-query+allpages-param-prtype": "Babestutako orrietara soilik mugatu.",
+ "apihelp-query+allrevisions-summary": "Zerrendatu berrikusketa guztiak.",
+ "apihelp-query+allrevisions-param-user": "Erabiltzaile honen berrikusketak soilik zerrendatu.",
+ "apihelp-query+allrevisions-param-excludeuser": "Erabiltzaile honen berrikusketak ez zerrendatu.",
+ "apihelp-query+allrevisions-example-user": "<kbd>Eredua</kbd> egindako azken 50 ekarpenak zerrendatu.",
+ "apihelp-query+mystashedfiles-param-limit": "Hartzeko artxibo kopurua",
+ "apihelp-query+alltransclusions-param-prop": "Sartu beharreko informazio zatiak:",
+ "apihelp-query+alltransclusions-param-limit": "Guztira bueltatzeko elementu kopurua.",
+ "apihelp-query+alltransclusions-param-dir": "Zerrendatzeko norabidea.",
+ "apihelp-query+allusers-summary": "Zerrendatu erregistratuko erabiltzaile guztiak.",
+ "apihelp-query+allusers-param-from": "Zerrendatzen hasteko erabiltzaile izen honetatik.",
+ "apihelp-query+allusers-param-to": "Zerrendatzen gelditzeko erabiltzaile izen honetatik.",
+ "apihelp-query+allusers-param-prefix": "Balio honekin hasten diren erabiltzaile guztiak bilatu.",
+ "apihelp-query+allusers-param-dir": "Sailkatzeko norabidea.",
+ "apihelp-query+allusers-param-group": "Soilik talde hauetatik erabiltzaileak hartu.",
+ "apihelp-query+allusers-param-witheditsonly": "Bakarrik zerrendatu aldaketak egin dituzten erabiltzaileak.",
+ "apihelp-query+allusers-param-activeusers": "Bakarrik zerrendatu azken {{PLURAL:$1|eguneko|$1 egunetako}} erabiltzaile aktiboak.",
+ "apihelp-query+blocks-summary": "Zerrendatu blokeatutako erabiltzaile eta IP helbide guztiak.",
+ "apihelp-query+blocks-example-simple": "Blokeak zerrendatu.",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Orri IDa gehitzen du.",
+ "apihelp-query+filearchive-example-simple": "Erakutsi ezabatutako fitxategi guztien zerrenda",
+ "apihelp-query+imageinfo-param-urlheight": "$1urlwidth-en antzekoa.",
+ "apihelp-query+imageusage-example-simple": "Erakutsi [[:File:Albert Einstein Head.jpg]] darabilten orriak",
+ "apihelp-query+iwbacklinks-param-prefix": "Interwikiaren aurrizkia.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Hizkuntza izenak aurkitzeko hizkuntza kodea.",
+ "apihelp-query+prefixsearch-param-search": "Bilatu katea.",
+ "apihelp-query+protectedtitles-example-simple": "Zerrendatu babestutako izenburuak",
+ "apihelp-query+recentchanges-example-simple": "Zerrendatu aldaketa berriak.",
+ "apihelp-query+revisions-example-last5": "<kbd>Orrialde Nagusiaren</kbd> azken 5 berrikuspenak eskuratu.",
+ "apihelp-query+revisions-example-first5": "<kbd>Orrialde Nagusiaren</kbd> lehen 5 berrikuspenak eskuratu.",
+ "apihelp-query+search-paramvalue-prop-score": "Ezikusia.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ezikusia.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Ikurra lortu oraingo lehentasunak aldatzeko.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Orrialdearen izenburua gehitzen du.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Aldaketa egin duen erabiltzailea gehitzen du.",
+ "apihelp-upload-param-file": "Fitxategiaren edukia.",
+ "apihelp-upload-example-url": "Igo URL batetik.",
+ "apihelp-userrights-param-reason": "Aldaketarako arrazoia.",
+ "api-help-main-header": "Modulu nagusia",
+ "api-help-undocumented-module": "Ez dago dokumentaziorik $1 modulurako.",
+ "api-help-flag-deprecated": "Modulu hau zaharkitua dago.",
+ "api-help-source": "Iturria: $1",
+ "api-help-source-unknown": "Iturria: <span class=\"apihelp-unknown\">ezezaguna</span>",
+ "api-help-license": "Lizentzia: [[$1|$2]]",
+ "api-help-license-noname": "Lizentzia: [[$1|Ikusi esteka]]",
+ "api-help-license-unknown": "Lizentzia: <span class=\"apihelp-unknown\">ezezaguna</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parametroa|Parametroak}}:",
+ "api-help-param-deprecated": "Zaharkitua.",
+ "api-help-param-required": "Parametro hau beharrezkoa da.",
+ "api-help-datatypes-header": "Datu-motak",
+ "api-help-param-type-limit": "Mota: osokoa edo <kbd>max</kbd>",
+ "api-help-param-type-integer": "Mota: {{PLURAL:$1|1=osokoa|2=osokoen zerrenda}}",
+ "api-help-param-type-boolean": "Mota: boolearra ([[Special:ApiHelp/main#main/datatypes|xehetasunak]])",
+ "api-help-param-type-timestamp": "Mota: {{PLURAL:$1|1=data-zigilua|2=data-zigiluen zerrenda}} ([[Special:ApiHelp/main#main/datatypes|onartutako formatuak]])",
+ "api-help-param-type-user": "Mota: {{PLURAL:$1|1=erabiltzaile-izena|2=erabiltzaile-izenen zerrenda}}",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Hutsik egon behar du|Hutsik egon daiteke edo $2}}",
+ "api-help-param-limit": "Ez dira $1 baino gehiago onartzen.",
+ "api-help-param-limit2": "Ez dira $1 ($2 botentzat) baino gehiago onartzen.",
+ "api-help-param-default": "Lehenetsia: $1",
+ "api-help-param-default-empty": "Lehenetsia: <span class=\"apihelp-empty\">(hutsik)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(deskribapenik gabe)</span>",
+ "api-help-examples": "{{PLURAL:$1|Adibidea|Adibideak}}:",
+ "api-help-permissions": "{{PLURAL:$1|Baimena|Baimenak}}:",
+ "apierror-timeout": "Zerbitzariak ez du erantzun espero zitekeen denboran.",
+ "apiwarn-invalidcategory": "\"$1\" ez da kategoria.",
+ "apiwarn-invalidtitle": "\"$1\" ez da baliozko izenburua.",
+ "apiwarn-notfile": "\"$1\" ez da fitxategia.",
+ "api-credits-header": "Kredituak",
+ "api-credits": "API garatzaileak:\n* Roan Kattouw (garatzaile nagusia, 2007ko ira.–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (sortzailea, garatzaile nagusia, 2006ko ira.–2007ko ira.)\n* Brad Jorsch (garatzaile nagusia 2013–gaur egun)\n\nMesedez, bidal iezazkiguzu zure iruzkinak, iradokizunak eta galderak mediawiki-api@lists.wikimedia.org helbidera edo bete ezazu errore-txostena https://phabricator.wikimedia.org/ helbidean."
+}
diff --git a/www/wiki/includes/api/i18n/fa.json b/www/wiki/includes/api/i18n/fa.json
new file mode 100644
index 00000000..a799d00f
--- /dev/null
+++ b/www/wiki/includes/api/i18n/fa.json
@@ -0,0 +1,340 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alirezaaa",
+ "Arash.pt",
+ "Fatemi127",
+ "Reza1615",
+ "KhabarNegar",
+ "Sahehco",
+ "Signal89",
+ "Mjbmr",
+ "Ebraminio",
+ "Macofe",
+ "Huji",
+ "Ladsgroup",
+ "Freshman404",
+ "Alifakoor"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|مستندات]]\n* [[mw:API:FAQ|پرسش‌های متداول]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api فهرست پست الکترونیکی]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce اعلانات رابط برنامه‌نویسی کاربردی]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R ایرادها و درخواست‌ها]\n</div>\n\n<strong>وضعیت:</strong> تمام ویژگی‌هایی که در این صفحه نمایش یافته‌اند باید کار بکنند، ولی رابط برنامه‌نویسی کاربردی کماکان در حال توسعه است، و ممکن است در هر زمان تغییر بکند. به عضویت [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ فهرست پست الکترونیکی mediawiki-api-announce] در بیایید تا از تغییرات باخبر شوید.\n\n<strong>درخواست‌های معیوب:</strong> وقتی درخواست‌های معیوب به رابط برنامه‌نویسی کاربردی فرستاده شوند، یک سرایند اچ‌تی‌تی‌پی با کلید «MediaWiki-API-Erorr» فرستاده می‌شود و بعد هم مقدار سرایند و هم کد خطای بازگردانده شده هر دو به یک مقدار نسبت داده می‌شوند. برای اطلاعات بیشتر [[mw:API:Errors_and_warnings|API: Errors and warnings]] را ببینید.\n\n<strong>آزمایش:</strong> برای انجام درخواست‌های API آزمایشی [[Special:ApiSandbox]] را ببینید.",
+ "apihelp-main-param-action": "کدام عملیات را انجام دهد.",
+ "apihelp-main-param-format": "فرمت خروجی.",
+ "apihelp-main-param-smaxage": "تنظيم <code>s-maxage</code> سرآیند کنترل حافضهٔ نهان HTTP بر اين تعداد ثانيه.",
+ "apihelp-main-param-maxage": "تنظيم <code>s-maxage</code> سرآیند کنترل حافضهٔ نهان HTTP بر اين تعداد ثانيه.\nخطاها هيچگاه در حافظهٔ نهان قرار نمی‌گيرند.",
+ "apihelp-main-param-requestid": "هر مقداری که در اینجا وارد شود در پاسخ گنجانده می‌شود. ممکن است برای تمايز بين درخواست‌ها بکار رود.",
+ "apihelp-main-param-servedby": "نام ميزبانی که درخواست را سرويس داده در نتايج گنجانده شود.",
+ "apihelp-main-param-curtimestamp": "برچسب زمان کنونی را در نتیجه قرار دهید.",
+ "apihelp-block-summary": "بستن کاربر",
+ "apihelp-block-param-user": "نام کاربری، آدرس آی پی یا محدوده آی پی موردنظر شما برای بستن.",
+ "apihelp-block-param-reason": "دلیل بسته‌شدن",
+ "apihelp-block-param-anononly": "فقط بستن کاربران ناشناس (مانند غیرفعال کردن ویرایش‌های ناشناس این آی‌پی).",
+ "apihelp-block-param-nocreate": "جلوگیری از ایجاد حساب.",
+ "apihelp-block-param-autoblock": "به طور خودکار آخرین نشانی آی‌پی استفاده‌شده، و هر نشانی پس از آن که سعی می‌کند از آن داخل شود را ببند.",
+ "apihelp-block-param-noemail": "از کاربر در برابر ارسال ایمیل از طریق ویکی جلوگیری شود. (نیازمند دسترسی <code>blockemail</code> است).",
+ "apihelp-block-param-hidename": "نام کاربری را از سیاههٔ بستن پنهان کن. (نیازمند دسترسی <code>hideuser</code> است).",
+ "apihelp-block-param-allowusertalk": "به کاربر برای ویرایش صفحه بحث‌شان اجازه دهید (بسته به <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "اگر کاربر پیش از این مسدود شده‌است، مسدود موجود را بازنویسی کن.",
+ "apihelp-block-param-watchuser": "صفحه‌های کاربر و بحث کاربر نشانی آی‌پی یا کاربر را پی‌گیری کنید.",
+ "apihelp-block-example-ip-simple": "آی‌پی <kbd>۱۹۲٫۰٫۲٫۵</kbd> را برای سه روز همراه دلیل <kbd>برخورد اول</kbd> ببندید",
+ "apihelp-block-example-user-complex": "بستن کاربر<kbd>خرابکار</kbd> به شکل نامحدود به علت <kbd>خرابکاری</kbd>، همچنين جلوگيری از ايجاد حساب جديد و ارسال ايميل.",
+ "apihelp-changeauthenticationdata-summary": "تغيير اطلاعات احراز هويت برای کاربر فعلی",
+ "apihelp-changeauthenticationdata-example-password": "تلاش برای تغيير گذرواژه فعلی کاربر به <kbd>نمونهٔ گذرواژه</kbd>.",
+ "apihelp-checktoken-param-type": "نوع توکنی که دارد آزمایش می‌شود.",
+ "apihelp-checktoken-param-token": "توکن برای تست",
+ "apihelp-checktoken-param-maxtokenage": "حداکثر عمر توکن به ثانیه.",
+ "apihelp-checktoken-example-simple": "تست اعتبار یک توکن <kbd>csrf</kbd>",
+ "apihelp-clearhasmsg-summary": "پرچم <code>hasmsg</code> را برای کاربر جاری پاک کن.",
+ "apihelp-clearhasmsg-example-1": "پاک‌کردن پرچم <code>hasmsg</code> برای کاربر جاری",
+ "apihelp-clientlogin-example-login": "شروع فرآیند ورود به ويکی به عنوان کاربر <kbd>نمونه</kbd> با گذرواژهٔ <kbd>نمونهٔ گذرواژه</kbd>",
+ "apihelp-compare-summary": "تفاوت بین ۲ صفحه را بیابید.",
+ "apihelp-compare-extended-description": "شما باید یک شماره بازبینی، یک عنوان صفحه، یا یک شناسه صفحه برای هر دو «از» و «به» مشخص کنید.",
+ "apihelp-compare-param-fromtitle": "عنوان اول برای مقایسه.",
+ "apihelp-compare-param-fromid": "شناسه صفحه اول برای مقایسه.",
+ "apihelp-compare-param-fromrev": "نسخه اول برای مقایسه.",
+ "apihelp-compare-param-totitle": "عنوان دوم برای مقایسه.",
+ "apihelp-compare-param-toid": "شناسه صفحه دوم برای مقایسه.",
+ "apihelp-compare-param-torev": "نسخه دوم برای مقایسه.",
+ "apihelp-compare-paramvalue-prop-diff": "تفاوت اچ‌تی‌ام‌ال.",
+ "apihelp-compare-paramvalue-prop-diffsize": "اندازهٔ تفاوت اچ‌تی‌ام‌ال، به بایت.",
+ "apihelp-compare-example-1": "ایجاد تفاوت بین نسخه 1 و 2",
+ "apihelp-createaccount-summary": "ایجاد حساب کاربری",
+ "apihelp-createaccount-param-name": "نام کاربری.",
+ "apihelp-createaccount-param-password": "رمز عبور (نادیده گرفته می‌شود اگر <var>$1mailpassword</var> تنظیم شده‌باشد).",
+ "apihelp-createaccount-param-domain": "دامنه برای احراز هویت خارجی (اختیاری).",
+ "apihelp-createaccount-param-email": "نشانی ایمیل کاربر (اختیاری)",
+ "apihelp-createaccount-param-realname": "نام واقعی کاربر (اختیاری).",
+ "apihelp-createaccount-param-mailpassword": "اگر به هر مقداری تنظیم شود، یک رمز عبور تصادفی به کاربر ایمیل خواهد شد.",
+ "apihelp-createaccount-param-reason": "دلیل اختیاری برای ایجاد حساب کاربری جهت قرارگرفتن در سیاهه‌ها.",
+ "apihelp-createaccount-example-pass": "ایجاد کاربر <kbd>testuser</kbd> همراه رمز عبور <kbd>test123</kbd>",
+ "apihelp-createaccount-example-mail": "ایجاد کاربر <kbd>testmailuser</kbd> و ارسال یک رمز عبور تصادفی به ای‌میل.",
+ "apihelp-delete-summary": "حذف صفحه",
+ "apihelp-delete-param-title": "عنوان صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار <var>$1pageid</var> استفاده شود.",
+ "apihelp-delete-param-pageid": "شناسه صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار <var>$1title</var> استفاده شود.",
+ "apihelp-delete-param-reason": "دلیل برای حذف. اگر تنظیم نشود، یک دلیل خودکار ساخته‌شده استفاده می‌شود.",
+ "apihelp-delete-param-watch": "افزودن صفحه به فهرست پی‌گیری کاربر فعلی",
+ "apihelp-delete-param-unwatch": "صفحه را از پی‌گیری‌تان حذف کنید.",
+ "apihelp-delete-example-simple": "حذف <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "حذف <kbd>صفحهٔ اصلی</kbd> همراه دلیل <kbd>آماده‌سازی برای انتقال</kbd>",
+ "apihelp-disabled-summary": "این پودمان غیرفعال شده است.",
+ "apihelp-edit-summary": "ایجاد و ویرایش صفحه",
+ "apihelp-edit-param-title": "عنوان صفحه‌ای که قصد ویرایشش را دارید. نمی‌تواند در کنار <var>$1pageid</var> استفاده شود.",
+ "apihelp-edit-param-pageid": "شناسه صفحهٔ صفحه‌ای که می‌خواهید ویرایشش کنید. نمی‌تواند در کنار <var>$1title</var> استفاده شود.",
+ "apihelp-edit-param-section": "شماره بخش. <kbd>۰</kbd> برای بخش بالا، «<kbd>تازه</kbd>» برای یک بخش تازه.",
+ "apihelp-edit-param-sectiontitle": "عنوان برای بخش جدید.",
+ "apihelp-edit-param-text": "محتوای صفحه.",
+ "apihelp-edit-param-summary": "خلاصه را ویرایش کنید. همچنین عنوان بخش را زمانی که $1section=تازه و $1sectiontitle تنظیم نشده‌است.",
+ "apihelp-edit-param-minor": "ویرایش جزئی.",
+ "apihelp-edit-param-notminor": "ویرایش غیر جزئی.",
+ "apihelp-edit-param-bot": "علامت زدن این ویرایش به عنوان ویرایش ربات.",
+ "apihelp-edit-param-createonly": "اگر صفحه موجود بود، ویرایش نکن.",
+ "apihelp-edit-param-nocreate": "رها کردن خطا در صورتی که صفحه وجود ندارد.",
+ "apihelp-edit-param-watch": "افزودن صفحه به فهرست پی‌گیری شما",
+ "apihelp-edit-param-unwatch": "حذف صفحه از فهرست پی‌گیری شما",
+ "apihelp-edit-param-prependtext": "این متن را به ابتدای صفحه اضافه کنید. $1text را لغو می‌کند.",
+ "apihelp-edit-param-undo": "این بازبینی را برگردانید. $1text، $1prependtext و $1appendtext را باطل می‌کند.",
+ "apihelp-edit-param-undoafter": "همه بازبینی‌ها را از $1undo تا این یکی برگردانید. اگر تنظیم نشد، فقط یک بازبینی را برگردانید.",
+ "apihelp-edit-param-redirect": "اصلاح خودکار تغییرمسیرها.",
+ "apihelp-edit-param-contentmodel": "مدل محتوایی محتوای جدید",
+ "apihelp-edit-param-token": "بلیط باید همیشه به عنوان اخرین پارامتر، یا دست کم بعد از پارامتر $1text فرستاده شود.",
+ "apihelp-edit-example-edit": "ویرایش صفحه",
+ "apihelp-edit-example-undo": "واگردانی نسخه‌های ۱۳۵۷۹ تا ۱۳۵۸۵ با خلاصهٔ خودکار.",
+ "apihelp-emailuser-summary": "ایمیل به کاربر",
+ "apihelp-emailuser-param-target": "کاربر برای ارسال ایمیل به وی.",
+ "apihelp-emailuser-param-subject": "موضوع هدر.",
+ "apihelp-emailuser-param-text": "متن رایانه.",
+ "apihelp-emailuser-param-ccme": "ارسال یک نسخه از رایانه به شما.",
+ "apihelp-expandtemplates-summary": "گسترش همه الگوها در ویکی نبشته",
+ "apihelp-expandtemplates-param-title": "عنوان صفحه",
+ "apihelp-expandtemplates-param-text": "تبدیل برای ویکی‌متن.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "ویکی‌متن گسترش‌یافته.",
+ "apihelp-feedcontributions-summary": "خوراک مشارکت‌های یک کاربر را برمی‌گرداند.",
+ "apihelp-feedcontributions-param-feedformat": "فرمت خوراک.",
+ "apihelp-feedcontributions-param-namespace": "فیلتر شدن مشارکتها براساس فضای نام.",
+ "apihelp-feedcontributions-param-year": "از سال (و پیش از آن).",
+ "apihelp-feedcontributions-param-month": "از ماه (و پیش از آن).",
+ "apihelp-feedcontributions-param-tagfilter": "فیلتر کردن مشارکتها براساس این برچسب‌ها.",
+ "apihelp-feedcontributions-param-deletedonly": "فقط مشارکت‌های حذف شده نمایش داده شود.",
+ "apihelp-feedcontributions-param-toponly": "فقط ویرایش‌هایی که آخرین نسخه‌اند نمایش داده شود.",
+ "apihelp-feedcontributions-param-newonly": "فقط نمایش ویرایش‌هایی که تولید‌های صفحه هستند.",
+ "apihelp-feedcontributions-param-showsizediff": "نمایش تفاوت حجم تغییرات بین نسخه‌ها.",
+ "apihelp-feedcontributions-example-simple": "مشارکت‌های [[کاربر:نمونه]] را برگردان",
+ "apihelp-feedrecentchanges-summary": "خوراک تغییرات اخیر را برمی‌گرداند.",
+ "apihelp-feedrecentchanges-param-feedformat": "فرمت خوراک.",
+ "apihelp-feedrecentchanges-param-namespace": "فضای نام برای محدودکردن نتایج به.",
+ "apihelp-feedrecentchanges-param-invert": "همهٔ فضاهای نام به جز انتخاب‌شده‌ها.",
+ "apihelp-feedrecentchanges-param-associated": "فضای نام مرتبط (بحث یا اصلی) را شامل می‌شود.",
+ "apihelp-feedrecentchanges-param-days": "روز برای محدود کردن نتایج.",
+ "apihelp-feedrecentchanges-param-limit": "حداکثر تعداد نتایج خروجی.",
+ "apihelp-feedrecentchanges-param-from": "نمایش تغییرات پس از آن.",
+ "apihelp-feedrecentchanges-param-hideminor": "پنهان کردن تغییرات جزئی.",
+ "apihelp-feedrecentchanges-param-hidebots": "پنهان کردن تغییرات انجام شده توسط ربات‌ها.",
+ "apihelp-feedrecentchanges-param-hideanons": "پنهان کردن ویرایش‌های کاربران ناشناس.",
+ "apihelp-feedrecentchanges-param-hideliu": "پنهان کردن ویرایش‌های کاربران ثبت‌نام کرده.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "پنهان کردن ویرایش گشت‌زن‌ها.",
+ "apihelp-feedrecentchanges-param-hidemyself": "پنهان کردن ویرایش‌های کاربر فعلی.",
+ "apihelp-feedrecentchanges-param-tagfilter": "فیلتر کردن براساس برچسب",
+ "apihelp-feedrecentchanges-param-target": "فقط نمایش ویرایش‌هایی که پیوند دارند به این صفحه.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "نمایش ویرایش‌ها بر روی صفحات پیوند داده شده به صفحات انتخاب شده.",
+ "apihelp-feedrecentchanges-example-simple": "نمایش تغییرات اخیر",
+ "apihelp-feedrecentchanges-example-30days": "نمایش تغییرات اخیر در 30 روز اخیر",
+ "apihelp-feedwatchlist-summary": "برگرداندن فهرست پیگیری‌های خوراک.",
+ "apihelp-feedwatchlist-param-feedformat": "فرمت خوراک.",
+ "apihelp-feedwatchlist-param-linktosections": "اگر ممکن است به طور مستقیم به بخش‌های تغییریافته پیوند دهید.",
+ "apihelp-feedwatchlist-example-default": "نمایش خوراک فهرست پی‌گیری",
+ "apihelp-feedwatchlist-example-all6hrs": "همهٔ تغییرات ۶ ساعت گذشته در صفحه‌های پی‌گیری را نمایش دهید",
+ "apihelp-filerevert-summary": "واگردانی فایل به یک نسخه قدیمی",
+ "apihelp-filerevert-param-filename": "نام پروندهٔ مقصد، بدون پیشوند پرونده:.",
+ "apihelp-filerevert-param-comment": "ارسال دیدگاه.",
+ "apihelp-filerevert-param-archivename": "نام بایگانی بازبینی برای برگرداندن.",
+ "apihelp-filerevert-example-revert": "برگرداندن <kbd>Wiki.png</kbd> به نسخهٔ <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "راهنما برای پودمان‌های مشخص‌شده را نمایش دهید.",
+ "apihelp-help-param-helpformat": "قالب‌بندی خروجی راهنما.",
+ "apihelp-help-example-main": "راهنما برای پودمان اصلی",
+ "apihelp-help-example-recursive": "همهٔ راهنما در یک صفحه",
+ "apihelp-help-example-help": "راهنمایی برای خود راهنما.",
+ "apihelp-help-example-query": "راهنما برای دو زیرپودمانِ پرسمان",
+ "apihelp-imagerotate-summary": "چرخاندن یک یا چند تصویر",
+ "apihelp-imagerotate-param-rotation": "درجه برای چرخاندن تصویر در جهت ساعت‌گرد.",
+ "apihelp-imagerotate-example-simple": "چرخاندن <kbd>۹۰</kbd> درجه برای <kbd>File:Example.png</kbd>",
+ "apihelp-imagerotate-example-generator": "چرخاندن <kbd>۱۸۰</kbd> درجه برای همهٔ تصاویر موجود در <kbd>Category:Flip</kbd>",
+ "apihelp-import-param-summary": "خلاصه درون‌ریزی.",
+ "apihelp-import-param-xml": "پرونده XML بارگذاری شد.",
+ "apihelp-import-param-interwikisource": "برای درون‌ریز میان‌ویکی: ویکی برای درون‌ریزی از.",
+ "apihelp-import-param-interwikipage": "برای درون‌ریز میان‌ویکی: صفحه برای درون‌ریزی.",
+ "apihelp-import-param-fullhistory": "برای درون‌ریزی میان‌ویکی: درون‌ریزی تاریخچهٔ کامل، نه فقط نسخهٔ موجود.",
+ "apihelp-import-param-templates": "برای درون ریزی میان‌ویکی: همچنین درون‌ریزی الگوهای مورد استفاده.",
+ "apihelp-import-param-namespace": "درون ریزی به این فضای نام. نمی‌تواند همزمان با <var>$1rootpage</var> استفاده شود.",
+ "apihelp-import-param-rootpage": "درون‌ریزی به عنوان زیر صفحهٔ این صفحه. نمی‌تواند همزمان با <var>$1rootpage</var> استفاده شود.",
+ "apihelp-login-param-name": "نام کاربری.",
+ "apihelp-login-param-password": "گذرواژه.",
+ "apihelp-login-param-domain": "دامنه (اختیاری)",
+ "apihelp-login-param-token": "بلیط ورود به سامانه که در اولین درخواست دریافت شد.",
+ "apihelp-login-example-gettoken": "دریافت توکن ورود",
+ "apihelp-login-example-login": "ورود",
+ "apihelp-logout-summary": "خروج به همراه پاک نمودن اطلاعات این نشست",
+ "apihelp-logout-example-logout": "خروج کاربر فعلی",
+ "apihelp-mergehistory-summary": "ادغام تاریخچه صفحات",
+ "apihelp-move-summary": "انتقال صفحه",
+ "apihelp-move-param-to": "عنوانی که قصد دارید صفحه را به آن نام تغییر دهید.",
+ "apihelp-move-param-reason": "دلیل انتقال",
+ "apihelp-move-param-movetalk": "صفحهٔ بحث را تغییرنام دهید، اگر وجوددارد.",
+ "apihelp-move-param-movesubpages": "زیرصفحه را تغییرنام دهید، اگر شدنی است.",
+ "apihelp-move-param-noredirect": "عدم ساخت تغییرمسیر.",
+ "apihelp-move-param-watch": "صفحه و تغییرمسیر را به پی‌گیری کاربر کنونی بیافزایید.",
+ "apihelp-move-param-unwatch": "صفحه و تغییرمسیر را از پی‌گیری کاربر کنونی حذف کنید.",
+ "apihelp-move-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+ "apihelp-opensearch-summary": "جستجو در ویکی بااستفاده از پروتکل اوپن‌سرچ.",
+ "apihelp-opensearch-param-search": "جستجوی رشته.",
+ "apihelp-opensearch-param-limit": "حداکثر تعداد نتایج برای بازگرداندن.",
+ "apihelp-opensearch-param-namespace": "فضاهای نامی برای جستجو",
+ "apihelp-opensearch-param-suggest": "کاری نکنید اگر <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> false است.",
+ "apihelp-opensearch-param-format": "فرمت خروجی.",
+ "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با <kbd>Te</kbd> آغاز می‌شوند",
+ "apihelp-options-summary": "تغییر ترجیحات کاربر جاری",
+ "apihelp-options-param-reset": "ترجیحات را به مقادیر پیش فرض سایت بازمی گرداند.",
+ "apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
+ "apihelp-paraminfo-param-helpformat": "ساختار راهنمای رشته‌ها",
+ "apihelp-parse-example-page": "تجزیه یک صفحه.",
+ "apihelp-parse-example-text": "تجزیه متن ویکی.",
+ "apihelp-parse-example-summary": "تجزیه خلاصه.",
+ "apihelp-patrol-summary": "گشت‌زنی یک صفحه یا نسخهٔ ویرایشی.",
+ "apihelp-patrol-example-rcid": "گشت‌زنی یک تغییر اخیر",
+ "apihelp-patrol-example-revid": "گشت‌زدن یک نسخه",
+ "apihelp-protect-summary": "تغییر سطح محافظت صفحه",
+ "apihelp-protect-param-reason": "دلیل برای (عدم) حفاظت.",
+ "apihelp-protect-example-protect": "محافظت از صفحه",
+ "apihelp-protect-example-unprotect": "خارج ساختن صفحه از حفاظت با تغییر سطح حفاظتی به <kbd>all</kbd>.",
+ "apihelp-protect-example-unprotect2": "خارج ساختن صفحه از حفاظت با قراردادن هیچ‌گونه محدودیت‌حفاظتی",
+ "apihelp-purge-param-forcelinkupdate": "به‌روزرسانی جداول پیوندها.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "جدول پیوندها را به‌روز رسانی کنید، و جدول‌های پیوندهای هر صفحه‌ای را که از این صفحه به عنوان الگو استفاده می‌کند به‌روز رسانی کنید.",
+ "apihelp-query-param-list": "کدام فهرست‌ها دریافت شود.",
+ "apihelp-query-param-meta": "کدام فراداده‌ها دریافت شود.",
+ "apihelp-query+allcategories-param-prefix": "عنوان همهٔ رده‌ها را که با این مقدار آغاز می‌شود جستجو کنید.",
+ "apihelp-query+allcategories-param-limit": "میزان رده‌ها برای بازگرداندن.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "نمی‌تواند همراه <var>$3user</var> به کار رود.",
+ "apihelp-query+allfileusages-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+ "apihelp-query+allfileusages-param-dir": "جهتی که باید فهرست شود.",
+ "apihelp-query+allfileusages-example-unique": "فهرست پرونده‌های با عنوان یکتا",
+ "apihelp-query+allfileusages-example-unique-generator": "گرفتن عنوان همهٔ پرونده‌ها، برچسب زدن موارد گم شده",
+ "apihelp-query+allfileusages-example-generator": "گرفتن صفحاتی که دارای پرونده هستند",
+ "apihelp-query+allimages-summary": "متوالی شمردن همهٔ تصاویر.",
+ "apihelp-query+allimages-param-sort": "خصوصیت برای مرتب‌سازی بر پایه آن",
+ "apihelp-query+allimages-param-dir": "جهتی که باید فهرست شود.",
+ "apihelp-query+allimages-param-minsize": "محدودکردن به صفحه‌هایی که دست کم این تعداد بایت دارند.",
+ "apihelp-query+allimages-param-maxsize": "محدودکردن به صفحه‌هایی که حداکثر این تعداد بایت دارند.",
+ "apihelp-query+alllinks-param-namespace": "فضای نامی که باید شمرده شود.",
+ "apihelp-query+alllinks-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+ "apihelp-query+alllinks-param-dir": "جهتی که باید فهرست شود.",
+ "apihelp-query+allpages-param-filterredir": "صفحه‌هایی که باید فهرست شوند.",
+ "apihelp-query+allpages-param-minsize": "محدودکردن به صفحه‌هایی که همراه دست کم این تعداد بایت است.",
+ "apihelp-query+allpages-param-limit": "میزان کل صفحه‌ها برای بازگرداندن.",
+ "apihelp-query+allredirects-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+ "apihelp-query+allrevisions-summary": "فهرست همه نسخه‌ها",
+ "apihelp-query+mystashedfiles-param-limit": "تعداد پرونده‌هایی که باید بگیرد.",
+ "apihelp-query+allusers-param-dir": "جهتی که باید مرتب شود.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "فهرست دسترسی‌هایی که کاربر دارد.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "شمار ويرایش کاربر را می‌افزايد",
+ "apihelp-query+allusers-paramvalue-prop-registration": "زمان ثبت نام کاربر را در صورت وجود می‌افزايد (ممکن است خالی باشد)",
+ "apihelp-query+allusers-param-limit": "تعداد کل نام‌های کاربری برای بازگرداندن.",
+ "apihelp-query+allusers-param-witheditsonly": "فقط کاربرانی را که ويرایش داشته اند ليست کن",
+ "apihelp-query+allusers-param-activeusers": "فقط کاربرانی را ليست کن که در $1 روز گذشته فعاليت داشته‌اند",
+ "apihelp-query+authmanagerinfo-summary": "بازیابی اطلاعات در مورد وضعيت فعلی احراز هويت",
+ "apihelp-query+backlinks-example-simple": "نمایش پیوندها به <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-example-simple": "فهرست بسته‌شده‌ها",
+ "apihelp-query+categories-param-show": "کدام نوع رده‌ها نمایش داده‌شود.",
+ "apihelp-query+categories-param-limit": "چه میزان رده بازگردانده شود.",
+ "apihelp-query+categories-param-categories": "فقط این رده‌ها فهرست شود. کاربردی برای بررسی وجود یک صفحهٔ مشخص در یک ردهٔ مشخص.",
+ "apihelp-query+categorymembers-summary": "فهرست‌کردن همهٔ صفحه‌ها در یک ردهٔ مشخص‌شده.",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "افزودن شناسه صفحه",
+ "apihelp-query+categorymembers-param-sort": "خصوصیت برای مرتب‌سازی",
+ "apihelp-query+categorymembers-param-dir": "جهت مرتب شدن",
+ "apihelp-query+categorymembers-param-startsortkey": "جایش از $1starthexsortkey استفاده کنید.",
+ "apihelp-query+deletedrevs-param-from": "شروع فهرست کردن مواردی که این عنوان را دارند.",
+ "apihelp-query+deletedrevs-param-to": "خاتمه فهرست کردن مواردی که این عنوان را دارند.",
+ "apihelp-query+deletedrevs-param-namespace": "فقط صفحات ین فضای نام را فهرست کن.",
+ "apihelp-query+deletedrevs-param-limit": "حداکثر تعداد بازنگری‌هايي که فهرست شوند.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "عنوان هر صفحه.",
+ "apihelp-query+fileusage-param-limit": "تعدادی که باید بازگردانده شود.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "نام مستعار برای size",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "افزودن SHA-1 hash برای پرونده",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "افزودن نوع MIME برای پرونده",
+ "apihelp-query+imageinfo-param-end": "زمان توقف فهرست کردن.",
+ "apihelp-query+imageinfo-param-urlheight": "مشابه $1urlwidth.",
+ "apihelp-query+images-param-limit": "تعداد پرونده‌هایی که باید بازگرداند.",
+ "apihelp-query+info-summary": "دریافت اطلاعات سادهٔ صفحه.",
+ "apihelp-query+iwbacklinks-param-prefix": "پیشوند میان‌ویکی.",
+ "apihelp-query+iwbacklinks-param-title": "پیوند میان‌ویکی برای جستجو. باید همراه <var>$1blprefix</var> استفاده شود.",
+ "apihelp-query+iwbacklinks-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+ "apihelp-query+iwbacklinks-param-prop": "خصوصیتی که باید گرفته شود.",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "افزودن نشانی اینترنتی کامل.",
+ "apihelp-query+langbacklinks-param-prop": "خصوصیتی که باید گرفته شود:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "افزودن نشانی اینترنتی کامل.",
+ "apihelp-query+links-param-limit": "تعداد پیوندهایی که باید بازگرداند.",
+ "apihelp-query+linkshere-param-prop": "خصوصیتی که باید گرفته شود:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "شناسه صفحه هر صفحه.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "عنوان هر صفحه.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "اگر صفحه تغییر مسیر بود برچسب بزن.",
+ "apihelp-query+linkshere-param-namespace": "فقط صفحات این فضای نام را فهرست کن.",
+ "apihelp-query+linkshere-param-limit": "تعداد برای بازگرداندن.",
+ "apihelp-query+logevents-summary": "دریافت رویدادها از سیاهه‌ها.",
+ "apihelp-query+logevents-param-prop": "خصوصیتی که باید گرفته شود.",
+ "apihelp-query+logevents-paramvalue-prop-ids": "افزودن شناسه سیاهه رویداد.",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "افزودن شناسه صفحه",
+ "apihelp-query+pageswithprop-param-dir": "جهت مرتب شدن",
+ "apihelp-query+prefixsearch-param-search": "جستجوی رشته",
+ "apihelp-query+prefixsearch-param-namespace": "فضاهای نامی برای جستجو",
+ "apihelp-query+prefixsearch-param-limit": "حداکثر تعداد نتایج برای بازگرداندن.",
+ "apihelp-query+prefixsearch-param-offset": "تعداد نتایج برای رها کردن.",
+ "apihelp-query+protectedtitles-param-namespace": "فقط عنوان‌ها در این فضاهای نام را فهرست کنید.",
+ "apihelp-query+protectedtitles-param-level": "فقط عنوان‌ها در این سطح‌های حفاظت را فهرست کنید.",
+ "apihelp-query+protectedtitles-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+ "apihelp-query+protectedtitles-param-start": "آغاز فهرست‌کردن از این برچسب زمانی حفاظت.",
+ "apihelp-query+protectedtitles-param-end": "متوقف‌کردن فهرست‌کردن در این برچسب زمانی حفاظت.",
+ "apihelp-query+random-param-namespace": "بازگرداندن صفحه‌های فقط در این فضاهای نام.",
+ "apihelp-query+random-param-limit": "محدود کنید چه تعداد صفحه بازگردانده خواهد شد.",
+ "apihelp-query+random-param-redirect": "از <kbd>$1filterredir=redirects</kbd> استفاده کنید.",
+ "apihelp-query+random-example-simple": "بازگرداندن تو صفحهٔ تصادفی از فضای نام اصلی",
+ "apihelp-query+random-example-generator": "بازگرداندن اطلاعات صفحه دربارهٔ دو صفحهٔ تصادفی از فضای نام اصلی",
+ "apihelp-query+recentchanges-param-start": "برچسب زمانی برای آغاز شمارش از.",
+ "apihelp-query+recentchanges-param-end": "برچسب زمانی برای پایان شمارش.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "افزودن برچسب برای ویرایش.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "افزودن زمان ویرایش.",
+ "apihelp-query+redirects-paramvalue-prop-title": "عنوان هر تغییرمسیر.",
+ "apihelp-query+redirects-param-limit": "تعداد تغییرمسیرها برای بازگرداندن.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "متن نسخه ویرایش.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "برچسب برای نسخه‌های ویرایش.",
+ "apihelp-query+siteinfo-param-prop": "اطلاعاتی که باید گرفته‌شود:",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "بازرگرداندن آمار سایت.",
+ "apihelp-query+siteinfo-example-simple": "دریافت اطلاعات سایت.",
+ "apihelp-query+tags-summary": "فهرست تغییرات برچسب‌ها.",
+ "apihelp-query+tags-param-limit": "حداکثر تعداد برچسب‌ها برای فهرست شدن.",
+ "apihelp-query+tags-param-prop": "خصوصیتی که باید گرفته شود:",
+ "apihelp-query+tags-paramvalue-prop-name": "افزودن نام برچسب.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "عنوان هر صفحه.",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "برچسب‌‌های یک مدخل را لیست می‌کند",
+ "apihelp-query+watchlist-paramvalue-type-log": "مدخل‌های سیاهه.",
+ "apihelp-stashedit-param-text": "محتوای صفحه.",
+ "apihelp-stashedit-param-contentmodel": "مدل محتوایی محتوای جدید",
+ "apihelp-stashedit-param-summary": "خلاصه تغییرات.",
+ "apihelp-tag-param-reason": "دلیل تغییر.",
+ "apihelp-unblock-summary": "بازکردن کاربر.",
+ "apihelp-undelete-param-reason": "دلیل احیا.",
+ "apihelp-upload-param-filename": "نام پرونده مقصد.",
+ "apihelp-upload-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+ "apihelp-upload-param-file": "محتوی پرونده.",
+ "apihelp-upload-param-url": "نشانی اینترنتی برای دریافت فایل.",
+ "apihelp-userrights-param-user": "نام کاربری.",
+ "apihelp-userrights-param-userid": "شناسه کاربر.",
+ "apihelp-userrights-param-reason": "دلیل تغییر.",
+ "apihelp-none-summary": "بیرون‌ریزی هیچ.",
+ "api-format-title": "نتیجه ای‌پی‌آی مدیاویکی",
+ "api-help-main-header": "پودمان اصلی",
+ "api-help-source": "منبع: $1",
+ "api-help-param-deprecated": "توصیه.",
+ "api-help-param-limit": "بيش از $1 مجاز نيست",
+ "api-help-param-limit2": "بيش از $1 (برای ربات‌ها $2) مجاز نيست",
+ "api-help-param-default": "پیش‌فرض: $1",
+ "apierror-timeout": "کارساز در زمان انتظار هیچ پاسخی نداد.",
+ "api-credits-header": "اعتبار"
+}
diff --git a/www/wiki/includes/api/i18n/fi.json b/www/wiki/includes/api/i18n/fi.json
new file mode 100644
index 00000000..a21afb05
--- /dev/null
+++ b/www/wiki/includes/api/i18n/fi.json
@@ -0,0 +1,99 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike",
+ "MrTapsa",
+ "Pitke",
+ "Stryn",
+ "Jaakkoh",
+ "01miki10",
+ "Silvonen"
+ ]
+ },
+ "apihelp-main-param-action": "Mikä toiminto suoritetaan.",
+ "apihelp-main-param-curtimestamp": "Sisällytä nykyinen aikaleima tulokseen.",
+ "apihelp-block-summary": "Estä käyttäjä.",
+ "apihelp-block-param-user": "Käyttäjä, IP-osoite tai IP-osoitealue, joka estetään.",
+ "apihelp-block-param-expiry": "Päättymisaika. Voi olla suhteellinen (esim. <kbd>5 months</kbd> tai <kbd>2 weeks</kbd>) tai absoluuttinen (esim. <kbd>2014-09-18T12:34:56Z</kbd>). Jos asetetaan <kbd>infinite</kbd>, <kbd>indefinite</kbd> tai <kbd>never</kbd>, esto ei pääty koskaan.",
+ "apihelp-block-param-reason": "Eston syy.",
+ "apihelp-block-param-anononly": "Estä vain anonyymit käytäjät (ts. estä anonyymit muokkaukset tästä IP-osoitteesta)",
+ "apihelp-block-param-nocreate": "Estä tunnusten luonti.",
+ "apihelp-block-param-autoblock": "Estä automaattisesti viimeksi käytetty IP-osoite, ja ne osoitteet, joista hän yrittää kirjautua sisään.",
+ "apihelp-block-param-noemail": "Estä käyttäjää lähettämästä sähköpostia wikin kautta. (Vaatii oikeuden <code>blockemail</code>.)",
+ "apihelp-block-param-hidename": "Piilota käyttäjänimi estolokista. (Vaatii oikeuden <code>hideuser</code>.)",
+ "apihelp-block-param-allowusertalk": "Salli käyttäjän muokata omaa keskustelusivuaan (riippuu asetuksesta <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Jos käyttäjä on jo estetty, korvaa nykyinen esto.",
+ "apihelp-block-param-watchuser": "Tarkkaile käyttäjän tai IP-osoitteen käyttäjä- ja keskustelusivuja.",
+ "apihelp-block-example-ip-simple": "Estä IP-osoite <kbd>192.0.2.5</kbd> kolmeksi päiväksi syystä <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Estä käyttäjä <kbd>Vandal</kbd> ikuisesti syystä <kbd>Vandalism</kbd>, sekä estä uusien käyttäjien luonti ja sähköpostin lähetys.",
+ "apihelp-compare-param-fromtitle": "Ensimmäinen vertailtava otsikko.",
+ "apihelp-createaccount-summary": "Luo uusi käyttäjätunnus.",
+ "apihelp-createaccount-param-name": "Käyttäjätunnus.",
+ "apihelp-createaccount-param-email": "Käyttäjän sähköpostiosoite (valinnainen).",
+ "apihelp-createaccount-param-realname": "Käyttäjän oikea nimi (valinnainen).",
+ "apihelp-createaccount-example-pass": "Luo käyttäjä <kbd>testuser</kbd> salasanalla <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Luo käyttäjä <kbd>testmailuset</kbd> ja lähetä sähköpostilla satunnaisesti luotu salasana.",
+ "apihelp-delete-summary": "Poista sivu.",
+ "apihelp-delete-param-watch": "Lisää sivu nykyisen käyttäjän tarkkailulistalle.",
+ "apihelp-delete-param-unwatch": "Poista sivu nykyisen käyttäjän tarkkailulistalta.",
+ "apihelp-delete-example-simple": "Poista <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Poista <kbd>Main Page</kbd> syystä <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Tämä moduuli on poistettu käytöstä.",
+ "apihelp-edit-summary": "Luo ja muokkaa sivuja.",
+ "apihelp-edit-param-text": "Sivun sisältö.",
+ "apihelp-edit-param-minor": "Pieni muokkaus.",
+ "apihelp-edit-param-notminor": "Ei-pieni muokkaus.",
+ "apihelp-edit-param-bot": "Merkitse tämä muokkaus bottimuokkaukseksi.",
+ "apihelp-edit-param-createonly": "Älä muokkaa sivua, jos se on jo olemassa.",
+ "apihelp-edit-param-watch": "Lisää sivu nykyisen käyttäjän tarkkailulistalle.",
+ "apihelp-edit-param-unwatch": "Poista sivu nykyisen käyttäjän tarkkailulistalta.",
+ "apihelp-edit-example-edit": "Muokkaa sivua.",
+ "apihelp-emailuser-summary": "Lähetä sähköpostia käyttäjälle.",
+ "apihelp-emailuser-param-target": "Käyttäjä, jolle lähetetään sähköpostia.",
+ "apihelp-emailuser-param-subject": "Otsikko.",
+ "apihelp-emailuser-param-text": "Sähköpostin sisältö.",
+ "apihelp-emailuser-param-ccme": "Lähetä kopio tästä viestistä minulle.",
+ "apihelp-emailuser-example-email": "Lähetä käyttäjälle <kbd>WikiSysop</kbd> sähköposti, jossa lukee <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Laajentaa kaikki wikitekstin mallineet.",
+ "apihelp-expandtemplates-param-title": "Sivun otsikko.",
+ "apihelp-expandtemplates-param-text": "Muunnettava wikiteksti.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Laajennettu wikiteksti.",
+ "apihelp-feedcontributions-param-year": "Alkaen vuodesta (ja aiemmin).",
+ "apihelp-feedcontributions-param-month": "Alkaen kuukaudesta (ja aiemmin).",
+ "apihelp-feedcontributions-param-tagfilter": "Suodata muokkaukset, joissa on nämä merkkaukset.",
+ "apihelp-feedcontributions-param-deletedonly": "Näytä vain poistetut muokkaukset.",
+ "apihelp-feedcontributions-param-toponly": "Näytä vain muokkaukset, jotka ovat viimeisimpiä versioita.",
+ "apihelp-feedcontributions-param-newonly": "Näytä vain muokkaukset, joilla on luotu sivu.",
+ "apihelp-feedrecentchanges-param-limit": "Kerralla näytettävien tulosten enimmäismäärä.",
+ "apihelp-feedrecentchanges-param-hideminor": "Piilota pienet muutokset.",
+ "apihelp-feedrecentchanges-param-hidebots": "Piilota bottien tekemät muutokset.",
+ "apihelp-feedrecentchanges-param-hideanons": "Piilota kirjautumattomien käyttäjien tekemät muutokset.",
+ "apihelp-feedrecentchanges-param-hideliu": "Piilota rekisteröityneiden käyttäjien tekemät muutokset.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Piilota tarkastetut muutokset.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Piilota nykyisen käyttäjän tekemät muutokset.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Suodata merkkauksen mukaan.",
+ "apihelp-feedrecentchanges-example-simple": "Näytä tuoreet muutokset.",
+ "apihelp-filerevert-param-filename": "Kohteen nimi ilman File:-etuliitettä.",
+ "apihelp-filerevert-param-comment": "Tallennuksen kommentti.",
+ "apihelp-imagerotate-summary": "Käännä kuva tai kuvia.",
+ "apihelp-imagerotate-example-simple": "Käännä kuvaa <kbd>File:Example.png</kbd> <kbd>90</kbd> astetta.",
+ "apihelp-imagerotate-example-generator": "Käännä kaikkia kuvia luokassa <kbd>Category:Flip</kbd> <kbd>180</kbd> astetta.",
+ "apihelp-login-param-name": "Käyttäjänimi.",
+ "apihelp-login-param-password": "Salasana.",
+ "apihelp-login-example-login": "Kirjaudu sisään.",
+ "apihelp-logout-summary": "Kirjaudu ulos ja tyhjennä istunnon tiedot.",
+ "apihelp-logout-example-logout": "Kirjaa nykyinen käyttäjä ulos.",
+ "apihelp-managetags-example-create": "Luo merkkaus nimeltä <kbd>spam</kbd> syystä <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Poista merkkaus <kbd>vandlaism</kbd> syystä <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Ota käyttöön merkkaus nimeltä <kbd>spam</kbd> syystä <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Poista käytöstä merkkaus nimeltä <kbd>spam</kbd> syystä <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Yhdistä sivujen muutoshistoriat.",
+ "apihelp-move-summary": "Siirrä sivu.",
+ "apihelp-move-param-noredirect": "Älä luo ohjausta.",
+ "apihelp-move-param-watch": "Lisää sivu ja ohjaus nykyisen käyttäjän tarkkailulistalle.",
+ "apihelp-move-param-unwatch": "Poista sivu ja ohjaus nykyisen käyttäjän tarkkailulistalta.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Lisää linkin otsikon.",
+ "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
+ "apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
+ "apihelp-upload-param-stash": "Mikäli valittu, palvelin säilöö tiedoston väliaikaisesti tallentamisen sijaan."
+}
diff --git a/www/wiki/includes/api/i18n/fo.json b/www/wiki/includes/api/i18n/fo.json
new file mode 100644
index 00000000..1470458a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/fo.json
@@ -0,0 +1,39 @@
+{
+ "@metadata": {
+ "authors": [
+ "EileenSanda"
+ ]
+ },
+ "apihelp-block-summary": "Sperra ein brúkara.",
+ "apihelp-block-param-user": "Brúkaranavn, IP adressa ella IP interval ið tú ynskir at sperra.",
+ "apihelp-block-param-expiry": "Lokadagur. Kann vera relativt (t.d. <kbd>5 months</kbd> ella <kbd>2 weeks</kbd>) ella absolutt (t.d. <kbd>2014-09-18T12:34:56Z</kbd>). Um ásett til <kbd>infinite</kbd>, <kbd>indefinite</kbd>, ella <kbd>never</kbd>, so gongur sperringin aldri út.",
+ "apihelp-block-param-reason": "Orsøk til sperring.",
+ "apihelp-block-param-anononly": "Sperra bara dulnevndir brúkarar (t.d. ger rættingar frá dulnendum óvirknar fyri hesa IP adressuna).",
+ "apihelp-block-param-nocreate": "Forða fyri upprættan av konto.",
+ "apihelp-block-param-autoblock": "Sperrað sjálvvirkandi tað seinastu IP adressuna og allar fylgjandi IP adressur, sum viðkomandi roynir at rætta/skriva frá.",
+ "apihelp-block-param-noemail": "Forða brúkaranum í at senda teldupost gjøgnum wikiina. (Krevur <code>blockemail</code> rættindini).",
+ "apihelp-block-param-hidename": "Fjal brúkaranavnið frá sperringarlogginum. (Krevur <code>hideuser</code> rættindi).",
+ "apihelp-block-param-allowusertalk": "Loyv brúkaranum at skriva á sína egnu síðu (avhongur av <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Um brúkarin longu er sperraður, yvirskriva so tað verandi sperringina.",
+ "apihelp-block-example-ip-simple": "Sperra IP adressuna <kbd>192.0.2.5</kbd> í tríggjar dagar við orsøkini <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Sperra brúkara <kbd>Vandal</kbd> í óvissa tíð við orsøkini <kbd>Vandalism</kbd>, og forða fyri upprættan av nýggjum kontum og at senda teldupost.",
+ "apihelp-createaccount-summary": "Upprætta eina nýggja brúkarakonto.",
+ "apihelp-createaccount-param-name": "Brúkaranavn.",
+ "apihelp-createaccount-param-password": "Loyniorð (síggj burtur frá <var>$1mailpassword</var> um er upplýst).",
+ "apihelp-createaccount-param-email": "Teldupostadressan hjá brúkaranum (valfrítt).",
+ "apihelp-createaccount-param-realname": "Veruliga navnið hjá brúkaranum (valfrítt).",
+ "apihelp-createaccount-example-pass": "Upprætta brúkara <kbd>testuser</kbd> við loyniorðinum <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Upprætta brúkaran <kbd>testmailuser</kbd> og send eitt tilvildarliga stovnað loyniorð við telduposti.",
+ "apihelp-delete-summary": "Strika eina síðu.",
+ "apihelp-edit-example-edit": "Rætta eina síðu.",
+ "apihelp-emailuser-summary": "Send t-post til ein brúkara.",
+ "apihelp-emailuser-param-subject": "Evni teigur.",
+ "apihelp-emailuser-param-text": "Innihaldið í teldubrævinum.",
+ "apihelp-emailuser-param-ccme": "Send mær eitt avrit av hesum telduposti.",
+ "apihelp-emailuser-example-email": "Send ein teldupost til brúkaran <kbd>WikiSysop</kbd> við tekstinum <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Víðkar allar fyrimyndir í wikitekstinum.",
+ "apihelp-expandtemplates-param-title": "Heiti á síðuni.",
+ "apihelp-login-param-name": "Brúkaranavn.",
+ "apihelp-login-param-password": "Loyniorð.",
+ "apihelp-move-summary": "Flyt eina síðu."
+}
diff --git a/www/wiki/includes/api/i18n/fr.json b/www/wiki/includes/api/i18n/fr.json
new file mode 100644
index 00000000..5ce23316
--- /dev/null
+++ b/www/wiki/includes/api/i18n/fr.json
@@ -0,0 +1,1785 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gomoko",
+ "Windes",
+ "Orlodrim",
+ "McDutchie",
+ "Element303",
+ "Macofe",
+ "Linedwell",
+ "Nicolapps",
+ "Raulel",
+ "Arkanosis",
+ "Ltrlg",
+ "Crochet.david",
+ "0x010C",
+ "Lucky",
+ "Freak2fast4u",
+ "Urhixidur",
+ "Wladek92",
+ "Ash Crow",
+ "L",
+ "Elfix",
+ "Lbayle",
+ "Verdy p",
+ "Yasten",
+ "Trial",
+ "Pols12",
+ "The RedBurn",
+ "Umherirrender",
+ "Thibaut120094",
+ "KATRINE1992",
+ "Kenjiraw",
+ "Framawiki"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> L’API MédiaWiki est une interface stable et mature qui est supportée et améliorée de façon active. Bien que nous essayions de l’éviter, nous pouvons avoir parfois besoin de faire des modifications impactantes ; inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet entête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<p class=\"mw-apisandbox-link\"><strong>Test :</strong> Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].</p>",
+ "apihelp-main-param-action": "Quelle action effectuer.",
+ "apihelp-main-param-format": "Le format de sortie.",
+ "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur <samp>maxlag</samp> est renvoyé avec un message tel que <samp>Attente de $host : $lag secondes de délai</samp>.<br />Voyez [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.",
+ "apihelp-main-param-smaxage": "Fixer l’entête HTTP de contrôle de cache <code>s-maxage</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+ "apihelp-main-param-maxage": "Fixer l’entête HTTP de contrôle de cache <code>max-age</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+ "apihelp-main-param-assert": "Vérifier si l’utilisateur est connecté si la valeur est <kbd>user</kbd>, ou s’il a le droit d’un utilisateur robot si la valeur est <kbd>bot</kbd><!-- {{int:group-bot}} ? -->.",
+ "apihelp-main-param-assertuser": "Vérifier que l’utilisateur actuel est l’utilisateur nommé.",
+ "apihelp-main-param-requestid": "Toute valeur fournie ici sera incluse dans la réponse. Peut être utilisé pour distinguer des demandes.",
+ "apihelp-main-param-servedby": "Inclure le nom d’hôte qui a renvoyé la requête dans les résultats.",
+ "apihelp-main-param-curtimestamp": "Inclure l’horodatage actuel dans le résultat.",
+ "apihelp-main-param-responselanginfo": "Inclure les langues utilisées pour <var>uselang</var> et <var>errorlang</var> dans le résultat.",
+ "apihelp-main-param-origin": "En accédant à l’API en utilisant une requête AJAX inter-domaines (CORS), mettre le domaine d’origine dans ce paramètre. Il doit être inclus dans toute requête de pre-flight, et doit donc faire partie de l’URI de la requête (pas du corps du POST).\n\nPour les requêtes authentifiées, il doit correspondre exactement à une des origines dans l’entête <code>Origin</code> header, donc il doit être fixé avec quelque chose comme <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Si ce paramètre ne correspond pas à l’entête <code>Origin</code>, une réponse 403 sera renvoyée. Si ce paramètre correspond à l’entête <code>Origin</code> et que l’origine est en liste blanche, des entêtes <code>Access-Control-Allow-Origin</code> et <code>Access-Control-Allow-Credentials</code> seront positionnés.\n\nPour les requêtes non authentifiées, spécifiez la valeur <kbd>*</kbd>. Cela positionnera l’entête <code>Access-Control-Allow-Origin</code>, mais <code>Access-Control-Allow-Credentials</code> vaudra <code>false</code> et toutes les données spécifiques à l’utilisateur seront filtrées.",
+ "apihelp-main-param-uselang": "Langue à utiliser pour les traductions de message. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> avec <kbd>siprop=languages</kbd> renvoie une liste de codes de langue, ou en spécifiant <kbd>user</kbd> pour utiliser la préférence de langue de l’utilisateur actuel, ou en spécifiant <kbd>content</kbd> pour utiliser le langage du contenu de ce wiki.",
+ "apihelp-main-param-errorformat": "Format à utiliser pour la sortie du texte d’avertissement et d’erreur.\n; plaintext: Wikitexte avec balises HTML supprimées et les entités remplacées.\n; wikitext: wikitexte non analysé.\n; html: HTML.\n; raw: Clé de message et paramètres.\n; none: Aucune sortie de texte, uniquement les codes erreur.\n; bc: Format utilisé avant MédiaWiki 1.29. <var>errorlang</var> et <var>errorsuselocal</var> sont ignorés.",
+ "apihelp-main-param-errorlang": "Langue à utiliser pour les avertissements et les erreurs. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> avec <kbd>siprop=languages</kbd> renvoyant une liste de codes de langue, ou spécifier <kbd>content</kbd> pour utiliser la langue du contenu de ce wiki, ou spécifier <kbd>uselang</kbd> pour utiliser la même valeur que le paramètre <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "S’il est fourni, les textes d’erreur utiliseront des messages adaptés à la langue dans l’espace de noms {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "Bloquer un utilisateur.",
+ "apihelp-block-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresses IP que vous voulez bloquer. Ne peut pas être utilisé en même temps que <var>$1userid</var>",
+ "apihelp-block-param-userid": "ID d'utilisateur à bloquer. Ne peut pas être utilisé avec <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Durée d’expiration. Peut être relative (par ex. <kbd>5 months</kbd> ou <kbd>2 weeks</kbd>) ou absolue (par ex. <kbd>2014-09-18T12:34:56Z</kbd>). Si elle est mise à <kbd>infinite</kbd>, <kbd>indefinite</kbd> ou <kbd>never</kbd>, le blocage n’expirera jamais.",
+ "apihelp-block-param-reason": "Motif du blocage.",
+ "apihelp-block-param-anononly": "Bloquer uniquement les utilisateurs anonymes (c’est-à-dire désactiver les modifications anonymes pour cette adresse IP).",
+ "apihelp-block-param-nocreate": "Empêcher la création de compte.",
+ "apihelp-block-param-autoblock": "Bloquer automatiquement la dernière adresse IP utilisée, et toute les adresses IP subséquentes depuis lesquelles ils ont essayé de se connecter.",
+ "apihelp-block-param-noemail": "Empêcher l’utilisateur d’envoyer des courriels via le wiki (nécessite le droit <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Masque le nom de l’utilisateur dans le journal des blocages (nécessite le droit <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Si l’utilisateur est déjà bloqué, écraser le blocage existant.",
+ "apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
+ "apihelp-block-param-tags": "Modifier les balises à appliquer à l’entrée du journal des blocages.",
+ "apihelp-block-example-ip-simple": "Bloquer l’adresse IP <kbd>192.0.2.5</kbd> pour trois jours avec le motif <kbd>Premier avertissement</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur <kbd>Vandal</kbd> avec le motif <kbd>Vandalism</kbd>, et empêcher la création de nouveau compte et l'envoi de courriel.",
+ "apihelp-changeauthenticationdata-summary": "Modifier les données d’authentification pour l’utilisateur actuel.",
+ "apihelp-changeauthenticationdata-example-password": "Tentative de modification du mot de passe de l’utilisateur actuel en <kbd>ExempleMotDePasse</kbd>.",
+ "apihelp-checktoken-summary": "Vérifier la validité d'un jeton de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Type de jeton testé",
+ "apihelp-checktoken-param-token": "Jeton à tester.",
+ "apihelp-checktoken-param-maxtokenage": "Temps maximum autorisé pour l'utilisation du jeton, en secondes",
+ "apihelp-checktoken-example-simple": "Tester la validité d'un jeton de <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Efface le drapeau <code>hasmsg</code> pour l’utilisateur courant.",
+ "apihelp-clearhasmsg-example-1": "Effacer le drapeau <code>hasmsg</code> pour l’utilisateur courant",
+ "apihelp-clientlogin-summary": "Se connecter au wiki en utilisant le flux interactif.",
+ "apihelp-clientlogin-example-login": "Commencer le processus de connexion au wiki en tant qu’utilisateur <kbd>Exemple</kbd> avec le mot de passe <kbd>ExempleMotDePasse</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continuer la connexion après une réponse de l’<samp>IHM</samp> pour l’authentification à deux facteurs, en fournissant un <var>OATHToken</var> valant <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Obtenir la différence entre deux pages.",
+ "apihelp-compare-extended-description": "Vous devez passer un numéro de révision, un titre de page, ou un ID de page, à la fois pour « from » et « to ».",
+ "apihelp-compare-param-fromtitle": "Premier titre à comparer.",
+ "apihelp-compare-param-fromid": "ID de la première page à comparer.",
+ "apihelp-compare-param-fromrev": "Première révision à comparer.",
+ "apihelp-compare-param-fromtext": "Utiliser ce texte au lieu du contenu de la révision spécifié par <var>fromtitle</var>, <var>fromid</var> ou <var>fromrev</var>.",
+ "apihelp-compare-param-fromsection": "N'utiliser que la section spécifiée du contenu 'from'.",
+ "apihelp-compare-param-frompst": "Faire une transformation avant enregistrement sur <var>fromtext</var>.",
+ "apihelp-compare-param-fromcontentmodel": "Modèle de contenu de <var>fromtext</var>. Si non fourni, il sera déduit d’après les autres paramètres.",
+ "apihelp-compare-param-fromcontentformat": "Sérialisation du contenu de <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Second titre à comparer.",
+ "apihelp-compare-param-toid": "ID de la seconde page à comparer.",
+ "apihelp-compare-param-torev": "Seconde révision à comparer.",
+ "apihelp-compare-param-torelative": "Utiliser une révision relative à la révision déterminée de <var>fromtitle</var>, <var>fromid</var> ou <var>fromrev</var>. Toutes les autres options 'to' seront ignorées.",
+ "apihelp-compare-param-totext": "Utiliser ce texte au lieu du contenu de la révision spécifié par <var>totitle</var>, <var>toid</var> ou <var>torev</var>.",
+ "apihelp-compare-param-tosection": "N'utiliser que la section spécifiée du contenu 'to'.",
+ "apihelp-compare-param-topst": "Faire une transformation avant enregistrement sur <var>totext</var>.",
+ "apihelp-compare-param-tocontentmodel": "Modèle de contenu de <var>totext</var>. Si non fourni, il sera deviné d’après les autres paramètres.",
+ "apihelp-compare-param-tocontentformat": "Format de sérialisation du contenu de <var>totext</var>.",
+ "apihelp-compare-param-prop": "Quelles informations obtenir.",
+ "apihelp-compare-paramvalue-prop-diff": "Le diff HTML.",
+ "apihelp-compare-paramvalue-prop-diffsize": "La taille du diff HTML en octets.",
+ "apihelp-compare-paramvalue-prop-rel": "L’ID des révisions précédant 'depuis' et 'vers', s’il y en a.",
+ "apihelp-compare-paramvalue-prop-ids": "L’ID de page et de révision des révisions 'depuis' et 'vers'.",
+ "apihelp-compare-paramvalue-prop-title": "Le titre de page des révisions 'depuis' et 'vers'.",
+ "apihelp-compare-paramvalue-prop-user": "Le nom et l’ID d’utilisateur des révisions 'depuis' et 'vers'.",
+ "apihelp-compare-paramvalue-prop-comment": "Le commentaire des révisions 'depuis' et 'vers'.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "Le commentaire analysé des révisions 'depuis' et 'vers'.",
+ "apihelp-compare-paramvalue-prop-size": "La taille des révisions 'depuis' et 'vers'.",
+ "apihelp-compare-example-1": "Créer une différence entre les révisions 1 et 2",
+ "apihelp-createaccount-summary": "Créer un nouveau compte utilisateur.",
+ "apihelp-createaccount-param-preservestate": "Si <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> a retourné true pour <samp>hasprimarypreservedstate</samp>, les demandes marquées comme <samp>primary-required</samp> doivent être omises. Si elle a retourné une valeur non vide pour <samp>preservedusername</samp>, ce nom d'utilisateur doit être utilisé pour le paramètre <var>username</var>.",
+ "apihelp-createaccount-example-create": "Commencer le processus de création d’un utilisateur <kbd>Exemple</kbd> avec le mot de passe <kbd>ExempleMotDePasse</kbd>.",
+ "apihelp-createaccount-param-name": "Nom d’utilisateur.",
+ "apihelp-createaccount-param-password": "Mot de passe (ignoré si <var>$1mailpassword</var> est défini).",
+ "apihelp-createaccount-param-domain": "Domaine pour l’authentification externe (facultatif).",
+ "apihelp-createaccount-param-token": "Jeton de création de compte obtenu à la première requête.",
+ "apihelp-createaccount-param-email": "Adresse courriel de l’utilisateur (facultatif).",
+ "apihelp-createaccount-param-realname": "Vrai nom de l’utilisateur (facultatif).",
+ "apihelp-createaccount-param-mailpassword": "S’il est fixé à une valeur quelconque, un mot de passe aléatoire sera envoyé par courriel à l’utilisateur.",
+ "apihelp-createaccount-param-reason": "Motif facultatif de création du compte à mettre dans les journaux.",
+ "apihelp-createaccount-param-language": "Code de langue à mettre par défaut pour l’utilisateur (facultatif, par défaut langue du contenu).",
+ "apihelp-createaccount-example-pass": "Créer l’utilisateur <kbd>testuser</kbd> avec le mot de passe <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Créer l’utilisateur <kbd>testmailuser</kbd> et envoyer par courriel un mot de passe généré aléatoirement.",
+ "apihelp-cspreport-summary": "Utilisé par les navigateurs pour signaler les violations de la politique de confidentialité du contenu. Ce module ne devrait jamais être utilisé, sauf quand il est utilisé automatiquement par un navigateur web compatible avec CSP.",
+ "apihelp-cspreport-param-reportonly": "Marquer comme étant un rapport d’une politique de surveillance, et non une politique exigée",
+ "apihelp-cspreport-param-source": "Ce qui a généré l’entête CSP qui a déclenché ce rapport",
+ "apihelp-delete-summary": "Supprimer une page.",
+ "apihelp-delete-param-title": "Titre de la page que vous voulez supprimer. Impossible à utiliser avec <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Motif de suppression. Si non défini, un motif généré automatiquement sera utilisé.",
+ "apihelp-delete-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal des suppressions.",
+ "apihelp-delete-param-watch": "Ajouter la page à la liste de suivi de l’utilisateur actuel.",
+ "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans distinction la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne rien changer au suivi.",
+ "apihelp-delete-param-unwatch": "Supprimer la page de la liste de suivi de l'utilisateur actuel.",
+ "apihelp-delete-param-oldimage": "Le nom de l’ancienne image à supprimer tel que fourni par [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Supprimer <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Supprimer <kbd>Main Page</kbd> avec le motif <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Ce module a été désactivé.",
+ "apihelp-edit-summary": "Créer et modifier les pages.",
+ "apihelp-edit-param-title": "Titre de la page que vous voulez modifier. Impossible de l’utiliser avec <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID de la page que vous voulez modifier. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-edit-param-section": "Numéro de section. <kbd>0</kbd> pour la section de tête, <kbd>new</kbd> pour une nouvelle section.",
+ "apihelp-edit-param-sectiontitle": "Le titre pour une nouvelle section.",
+ "apihelp-edit-param-text": "Contenu de la page.",
+ "apihelp-edit-param-summary": "Modifier le résumé. Également le titre de la section quand $1section=new et $1sectiontitle n’est pas défini.",
+ "apihelp-edit-param-tags": "Modifier les balises à appliquer à la version.",
+ "apihelp-edit-param-minor": "Modification mineure.",
+ "apihelp-edit-param-notminor": "Modification non mineure.",
+ "apihelp-edit-param-bot": "Marquer cette modification comme effectuée par un robot.",
+ "apihelp-edit-param-basetimestamp": "Horodatage de la révision de base, utilisé pour détecter les conflits de modification. Peut être obtenu via [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "L'horodatage, lorsque le processus d'édition est démarré, est utilisé pour détecter les conflits de modification. Une valeur appropriée peut être obtenue en utilisant <var>[[Special:ApiHelp/main|curtimestamp]]</var> lors du démarrage du processus d'édition (par ex. en chargeant le contenu de la page à modifier).",
+ "apihelp-edit-param-recreate": "Ignorer toutes les erreurs concernant la page \nqui a été supprimée entre-temps.",
+ "apihelp-edit-param-createonly": "Ne pas modifier la page si elle existe déjà.",
+ "apihelp-edit-param-nocreate": "Lever une erreur si la page n’existe pas.",
+ "apihelp-edit-param-watch": "Ajouter la page à la liste de suivi de l'utilisateur actuel.",
+ "apihelp-edit-param-unwatch": "Supprimer la page de la liste de suivi de l'utilisateur actuel.",
+ "apihelp-edit-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas changer le suivi.",
+ "apihelp-edit-param-md5": "Le hachage MD5 du paramètre $1text, ou les paramètres $1prependtext et $1appendtext concaténés. Si défini, la modification ne sera pas effectuée sauf si le hachage est correct.",
+ "apihelp-edit-param-prependtext": "Ajouter ce texte au début de la page. Écrase $1text.",
+ "apihelp-edit-param-appendtext": "Ajouter ce texte à la fin de la page. Écrase $1text.\n\nUtiliser $1section=new pour ajouter une nouvelle section, plutôt que ce paramètre.",
+ "apihelp-edit-param-undo": "Annuler cette révision. Écrase $1text, $1prependtext et $1appendtext.",
+ "apihelp-edit-param-undoafter": "Annuler toutes les révisions depuis $1undo jusqu’à celle-ci. Si non défini, annuler uniquement une révision.",
+ "apihelp-edit-param-redirect": "Résoudre automatiquement les redirections.",
+ "apihelp-edit-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée.",
+ "apihelp-edit-param-contentmodel": "Modèle de contenu du nouveau contenu.",
+ "apihelp-edit-param-token": "Le jeton doit toujours être envoyé en tant que dernier paramètre, ou au moins après le paramètre $1text.",
+ "apihelp-edit-example-edit": "Modifier une page",
+ "apihelp-edit-example-prepend": "Préfixer une page par <kbd>_&#95;NOTOC_&#95;</kbd>.",
+ "apihelp-edit-example-undo": "Annuler les révisions 13579 à 13585 avec résumé automatique.",
+ "apihelp-emailuser-summary": "Envoyer un courriel à un utilisateur.",
+ "apihelp-emailuser-param-target": "Utilisateur à qui envoyer le courriel.",
+ "apihelp-emailuser-param-subject": "Entête du sujet.",
+ "apihelp-emailuser-param-text": "Corps du courriel.",
+ "apihelp-emailuser-param-ccme": "M’envoyer une copie de ce courriel.",
+ "apihelp-emailuser-example-email": "Envoyer un courriel à l’utilisateur <kbd>WikiSysop</kbd> avec le texte <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Développe tous les modèles avec du wikitexte.",
+ "apihelp-expandtemplates-param-title": "Titre de la page.",
+ "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
+ "apihelp-expandtemplates-param-revid": "ID de révision, pour <code><nowiki>{{REVISIONID}}</nowiki></code> et les variables semblables.",
+ "apihelp-expandtemplates-param-prop": "Quelles informations récupérer.\n\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format désuet.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Le wikitexte développé",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans la sortie du wikitexte.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Propriétés de la page définies par le développement des mots magiques dans le wikitexte.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Le délai maximum après lequel la mise en cache de ce résultat doit être invalidée.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Tous les modules ResourceLoader que les fonctions d’analyse ont demandé d’ajouter à la sortie. Soit <kbd>jsconfigvars</kbd> soit <kbd>encodedjsconfigvars</kbd> doit être demandé avec <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Donne les variables de configuration JavaScript spécifiques à la page.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Donne les variables de configuration JavaScript spécifiques à la page sous la forme d'une chaîne JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "L’arbre d’analyse XML de l’entrée.",
+ "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.",
+ "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Développe le wikitexte <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Renvoie le fil des contributions d’un utilisateur.",
+ "apihelp-feedcontributions-param-feedformat": "Le format du flux.",
+ "apihelp-feedcontributions-param-user": "Pour quels utilisateurs récupérer les contributions.",
+ "apihelp-feedcontributions-param-namespace": "Par quels espaces de nom filtrer les contributions.",
+ "apihelp-feedcontributions-param-year": "De l’année (et antérieur).",
+ "apihelp-feedcontributions-param-month": "Depuis le mois (et plus récent).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrer les contributions qui ont ces balises.",
+ "apihelp-feedcontributions-param-deletedonly": "Afficher uniquement les contributions supprimées.",
+ "apihelp-feedcontributions-param-toponly": "Afficher uniquement les modifications qui sont les dernières révisions.",
+ "apihelp-feedcontributions-param-newonly": "Afficher uniquement les modifications qui sont des créations de page.",
+ "apihelp-feedcontributions-param-hideminor": "Masquer les modifications mineures.",
+ "apihelp-feedcontributions-param-showsizediff": "Afficher la différence de taille entre les révisions.",
+ "apihelp-feedcontributions-example-simple": "Renvoyer les contributions de l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Renvoie un fil de modifications récentes.",
+ "apihelp-feedrecentchanges-param-feedformat": "Le format du flux.",
+ "apihelp-feedrecentchanges-param-namespace": "Espace de noms auquel limiter les résultats.",
+ "apihelp-feedrecentchanges-param-invert": "Tous les espaces de noms sauf celui sélectionné.",
+ "apihelp-feedrecentchanges-param-associated": "Inclure l’espace de noms associé (discussion ou principal).",
+ "apihelp-feedrecentchanges-param-days": "Jours auxquels limiter le résultat.",
+ "apihelp-feedrecentchanges-param-limit": "Nombre maximal de résultats à renvoyer.",
+ "apihelp-feedrecentchanges-param-from": "Afficher les modifications depuis lors.",
+ "apihelp-feedrecentchanges-param-hideminor": "Masquer les modifications mineures.",
+ "apihelp-feedrecentchanges-param-hidebots": "Masquer les modifications faites par des robots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Masquer les modifications faites par les utilisateurs anonymes.",
+ "apihelp-feedrecentchanges-param-hideliu": "Masquer les modifications faites par les utilisateurs enregistrés.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Masquer les modifications contrôlées.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Masquer les modifications faites par l'utilisateur actuel.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Masquer les changements de la catégorie d'appartenance.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrer par balise.",
+ "apihelp-feedrecentchanges-param-target": "Afficher uniquement les modifications sur les pages liées depuis cette page.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Afficher les modifications plutôt sur les pages liées vers la page sélectionnée.",
+ "apihelp-feedrecentchanges-example-simple": "Afficher les modifications récentes",
+ "apihelp-feedrecentchanges-example-30days": "Afficher les modifications récentes sur 30 jours",
+ "apihelp-feedwatchlist-summary": "Renvoie un flux de liste de suivi.",
+ "apihelp-feedwatchlist-param-feedformat": "Le format du flux.",
+ "apihelp-feedwatchlist-param-hours": "Lister les pages modifiées lors de ce nombre d’heures depuis maintenant.",
+ "apihelp-feedwatchlist-param-linktosections": "Lier directement vers les sections modifées si possible.",
+ "apihelp-feedwatchlist-example-default": "Afficher le flux de la liste de suivi",
+ "apihelp-feedwatchlist-example-all6hrs": "Afficher toutes les modifications sur les pages suivies dans les dernières 6 heures",
+ "apihelp-filerevert-summary": "Rétablir un fichier dans une ancienne version.",
+ "apihelp-filerevert-param-filename": "Nom de fichier cible, sans le préfixe File:.",
+ "apihelp-filerevert-param-comment": "Téléverser le commentaire.",
+ "apihelp-filerevert-param-archivename": "Nom d’archive de la révision à rétablir.",
+ "apihelp-filerevert-example-revert": "Rétablir <kbd>Wiki.png</kbd> dans la version du <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Afficher l’aide pour les modules spécifiés.",
+ "apihelp-help-param-modules": "Modules pour lesquels afficher l’aide (valeurs des paramètres <var>action</var> et <var>format</var>, ou <kbd>main</kbd>). Les sous-modules peuvent être spécifiés avec un <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Inclure l’aide pour les sous-modules du module nommé.",
+ "apihelp-help-param-recursivesubmodules": "Inclure l’aide pour les sous-modules de façon récursive.",
+ "apihelp-help-param-helpformat": "Format de sortie de l’aide.",
+ "apihelp-help-param-wrap": "Inclut la sortie dans une structure standard de réponse API.",
+ "apihelp-help-param-toc": "Inclure une table des matières dans la sortie HTML.",
+ "apihelp-help-example-main": "Aide pour le module principal",
+ "apihelp-help-example-submodules": "Aide pour <kbd>action=query</kbd> et tous ses sous-modules.",
+ "apihelp-help-example-recursive": "Toute l’aide sur une page.",
+ "apihelp-help-example-help": "Aide pour le module d’aide lui-même.",
+ "apihelp-help-example-query": "Aide pour deux sous-modules de recherche.",
+ "apihelp-imagerotate-summary": "Faire pivoter une ou plusieurs images.",
+ "apihelp-imagerotate-param-rotation": "Degrés de rotation de l’image dans le sens des aiguilles d’une montre.",
+ "apihelp-imagerotate-param-tags": "Balises à appliquer à l’entrée dans le journal de téléversement.",
+ "apihelp-imagerotate-example-simple": "Faire pivoter <kbd>File:Example.png</kbd> de <kbd>90</kbd> degrés.",
+ "apihelp-imagerotate-example-generator": "Faire pivoter toutes les images de <kbd>Category:Flip</kbd> de <kbd>180</kbd> degrés.",
+ "apihelp-import-summary": "Importer une page depuis un autre wiki, ou depuis un fichier XML.",
+ "apihelp-import-extended-description": "Noter que le POST HTTP doit être effectué comme un import de fichier (c’est-à-dire en utilisant multipart/form-data) lors de l’envoi d’un fichier pour le paramètre <var>xml</var>.",
+ "apihelp-import-param-summary": "Résumé de l’importation de l’entrée de journal.",
+ "apihelp-import-param-xml": "Fichier XML téléversé.",
+ "apihelp-import-param-interwikiprefix": "Pour les importations téléchargées : le préfixe interwiki à appliquer aux noms d’utilisateur inconnus (et aux utilisateurs connus si <var>$1assignknownusers</var> est positionné).",
+ "apihelp-import-param-assignknownusers": "Affecter les modifications aux utilisateurs locaux quand l’utilisateur nommé existe localement.",
+ "apihelp-import-param-interwikisource": "Pour les importations interwiki : wiki depuis lequel importer.",
+ "apihelp-import-param-interwikipage": "Pour les importations interwiki : page à importer.",
+ "apihelp-import-param-fullhistory": "Pour les importations interwiki : importer tout l’historique, et pas seulement la version courante.",
+ "apihelp-import-param-templates": "Pour les importations interwiki : importer aussi tous les modèles inclus.",
+ "apihelp-import-param-namespace": "Importer vers cet espace de noms. Impossible à utiliser avec <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page. Impossible à utiliser avec <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Modifier les balises à appliquer à l'entrée du journal d'importation et à la version zéro des pages importées.",
+ "apihelp-import-example-import": "Importer [[meta:Help:ParserFunctions]] vers l’espace de noms 100 avec tout l’historique.",
+ "apihelp-linkaccount-summary": "Lier un compte d’un fournisseur tiers à l’utilisateur actuel.",
+ "apihelp-linkaccount-example-link": "Commencer le processus de liaison d’un compte depuis <kbd>Exemple</kbd>.",
+ "apihelp-login-summary": "Reconnecte et récupère les témoins (cookies) d'authentification.",
+ "apihelp-login-extended-description": "Cette action ne devrait être utilisée qu’en lien avec [[Special:BotPasswords]] ; l’utiliser pour la connexion du compte principal est désuet et peut échouer sans avertissement. Pour se connecter sans problème au compte principal, utiliser <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Cette action est désuète et peut échouer sans prévenir. Pour se connecter sans problème, utiliser <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Nom d’utilisateur.",
+ "apihelp-login-param-password": "Mot de passe.",
+ "apihelp-login-param-domain": "Domaine (facultatif).",
+ "apihelp-login-param-token": "Jeton de connexion obtenu à la première requête.",
+ "apihelp-login-example-gettoken": "Récupérer un jeton de connexion",
+ "apihelp-login-example-login": "Se connecter",
+ "apihelp-logout-summary": "Se déconnecter et effacer les données de session.",
+ "apihelp-logout-example-logout": "Déconnecter l’utilisateur actuel.",
+ "apihelp-managetags-summary": "Effectuer des tâches de gestion relatives à la modification des balises.",
+ "apihelp-managetags-param-operation": "Quelle opération effectuer :\n;create:Créer une nouvelle balise de modification pour un usage manuel.\n;delete:Supprimer une balise de modification de la base de données, y compris la suppression de la marque de toutes les révisions, entrées de modification récente et entrées de journal dans lesquelles elle serait utilisée.\n;activate:Activer une balise de modification, permettant aux utilisateurs de l’appliquer manuellement.\n;deactivate:Désactiver une balise de modification, empêchant les utilisateurs de l’appliquer manuellement.",
+ "apihelp-managetags-param-tag": "Balise à créer, supprimer, activer ou désactiver. Pour la création de balise, elle ne doit pas exister. Pour la suppression de balise, elle doit exister. Pour l’activation de balise, elle doit exister et ne pas être utilisée par une extension. Pour la désactivation de balise, elle doit être actuellement active et définie manuellement.",
+ "apihelp-managetags-param-reason": "Un motif facultatif pour créer, supprimer, activer ou désactiver la balise.",
+ "apihelp-managetags-param-ignorewarnings": "S’il faut ignorer tout avertissement qui surviendrait au cours de l’opération.",
+ "apihelp-managetags-param-tags": "Modifier les balises à appliquer à l’entrée du journal de gestion des balises.",
+ "apihelp-managetags-example-create": "Créer une balise nommée <kbd>spam</kbd> avec le motif <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Supprimer la balise <kbd>vandlaism</kbd> avec le motif <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Activer une balise nommée <kbd>spam</kbd> avec le motif <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Désactiver une balise nommée <kbd>spam</kbd> avec le motif <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Fusionner les historiques des pages.",
+ "apihelp-mergehistory-param-from": "Titre de la page depuis laquelle l’historique sera fusionné. Impossible à utiliser avec <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "ID de la page depuis laquelle l’historique sera fusionné. Impossible à utiliser avec <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Titre de la page vers laquelle l’historique sera fusionné. Impossible à utiliser avec <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "ID de la page vers laquelle l’historique sera fusionné. Impossible à utiliser avec <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Horodatage jusqu’auquel les révisions seront déplacées de l’historique de la page source vers l’historique de la page de destination. S’il est omis, tout l’historique de la page source sera fusionné avec celui de la page de destination.",
+ "apihelp-mergehistory-param-reason": "Raison pour fusionner l’historique.",
+ "apihelp-mergehistory-example-merge": "Fusionner l’historique complet de <kbd>AnciennePage</kbd> dans <kbd>NouvellePage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Fusionner les révisions de la page <kbd>AnciennePage</kbd> jusqu’au <kbd>2015-12-31T04:37:41Z</kbd> dans <kbd>NouvellePage</kbd>.",
+ "apihelp-move-summary": "Déplacer une page.",
+ "apihelp-move-param-from": "Titre de la page à renommer. Impossible de l’utiliser avec <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "ID de la page à renommer. Impossible à utiliser avec <var>$1from</var>.",
+ "apihelp-move-param-to": "Nouveau titre de la page.",
+ "apihelp-move-param-reason": "Motif du renommage.",
+ "apihelp-move-param-movetalk": "Renommer la page de discussion, si elle existe.",
+ "apihelp-move-param-movesubpages": "Renommer les sous-pages, le cas échéant.",
+ "apihelp-move-param-noredirect": "Ne pas créer une redirection.",
+ "apihelp-move-param-watch": "Ajouter la page et la redirection, à la liste de suivi de l'utilisateur actuel.",
+ "apihelp-move-param-unwatch": "Supprimer la page et la redirection de la liste de suivi de l'utilisateur actuel.",
+ "apihelp-move-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
+ "apihelp-move-param-ignorewarnings": "Ignorer tous les avertissements.",
+ "apihelp-move-param-tags": "Modifier les balises à appliquer à l'entrée du journal des renommages et à la version zéro de la page de destination.",
+ "apihelp-move-example-move": "Renommer <kbd>Badtitle</kbd> en <kbd>Goodtitle</kbd> sans garder de redirection.",
+ "apihelp-opensearch-summary": "Rechercher dans le wiki en utilisant le protocole OpenSearch.",
+ "apihelp-opensearch-param-search": "Chaîne de caractères cherchée.",
+ "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+ "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher. Ignoré if <var>$1search</var> commence avec le préfixe d'un espace de noms valide.",
+ "apihelp-opensearch-param-suggest": "Ne rien faire si <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vaut faux.",
+ "apihelp-opensearch-param-redirects": "Comment gérer les redirections :\n;return:Renvoie la redirection elle-même.\n;resolve:Renvoie la page cible. Peut renvoyer moins de $1limit résultats.\nPour des raisons historiques, la valeur par défaut est « return » pour $1format=json et « resolve » pour les autres formats.",
+ "apihelp-opensearch-param-format": "Le format de sortie.",
+ "apihelp-opensearch-param-warningsaserror": "Si des avertissements apparaissent avec <kbd>format=json</kbd>, renvoyer une erreur d’API au lieu de les ignorer.",
+ "apihelp-opensearch-example-te": "Trouver les pages commençant par <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Modifier les préférences de l'utilisateur courant.",
+ "apihelp-options-extended-description": "Seules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec des clés préfixées par <code>userjs-</code> (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
+ "apihelp-options-param-reset": "Réinitialise les préférences avec les valeurs par défaut du site.",
+ "apihelp-options-param-resetkinds": "Liste des types d’option à réinitialiser quand l’option <var>$1reset</var> est définie.",
+ "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut. Pour toute valeur passée contenant une barre verticale (<kbd>|</kbd>), utiliser le [[Special:ApiHelp/main#main/datatypes|séparateur alternatif de valeur multiple]] pour que l'opération soit correcte.",
+ "apihelp-options-param-optionname": "Nom de l’option qui doit être définie avec la valeur fournie par <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "La valeur de l'option spécifiée par <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Réinitialiser toutes les préférences",
+ "apihelp-options-example-change": "Modifier les préférences <kbd>skin</kbd> et <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Réinitialiser toutes les préférences, puis définir <kbd>skin</kbd> et <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Obtenir des informations sur les modules de l’API.",
+ "apihelp-paraminfo-param-modules": "Liste des noms de module (valeurs des paramètres <var>action</var> et <var>format</var>, ou <kbd>main</kbd>). Peut spécifier des sous-modules avec un <kbd>+</kbd>, ou tous les sous-modules avec <kbd>+*</kbd>, ou tous les sous-modules récursivement avec <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Format des chaînes d’aide.",
+ "apihelp-paraminfo-param-querymodules": "Liste des noms des modules de requête (valeur des paramètres <var>prop</var>, <var>meta</var> ou <var>list</var>). Utiliser <kbd>$1modules=query+foo</kbd> au lieu de <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Obtenir aussi des informations sur le module principal (niveau supérieur). Utiliser plutôt <kbd>$1modules=main</kbd>.",
+ "apihelp-paraminfo-param-pagesetmodule": "Obtenir aussi des informations sur le module pageset (en fournissant titles= et ses amis).",
+ "apihelp-paraminfo-param-formatmodules": "Liste des noms de module de mise en forme (valeur du paramètre <var>format</var>). Utiliser plutôt <var>$1modules</var>.",
+ "apihelp-paraminfo-example-1": "Afficher les informations pour <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> et <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Afficher les informations pour tous les sous-modules de <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "Analyse le contenu et renvoie le résultat de l’analyseur.",
+ "apihelp-parse-extended-description": "Voyez les différents modules prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> pour avoir de l’information sur la version actuelle d’une page.\n\nIl y a plusieurs moyens de spécifier le texte à analyser :\n# Spécifier une page ou une révision, en utilisant <var>$1page</var>, <var>$1pageid</var> ou <var>$1oldid</var>.\n# Spécifier explicitement un contenu, en utilisant <var>$1text</var>, <var>$1title</var> et <var>$1contentmodel</var>.\n# Spécifier uniquement un résumé à analyser. <var>$1prop</var> doit recevoir une valeur vide.",
+ "apihelp-parse-param-title": "Titre de la page à laquelle appartient le texte. Si omis, <var>$1contentmodel</var> doit être spécifié, et [[API]] sera utilisé comme titre.",
+ "apihelp-parse-param-text": "Texte à analyser. utiliser <var>$1title</var> ou <var>$1contentmodel</var> pour contrôler le modèle de contenu.",
+ "apihelp-parse-param-revid": "ID de révision, pour <code><nowiki>{{REVISIONID}}</nowiki></code> et autres variables semblables.",
+ "apihelp-parse-param-summary": "Résumé à analyser.",
+ "apihelp-parse-param-page": "Analyser le contenu de cette page. Impossible à utiliser avec <var>$1text</var> et <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Analyser le contenu de cette page. Écrase <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Si le paramètre <var>$1page</var> ou <var>$1pageid</var> est positionné sur une redirection, la résoudre.",
+ "apihelp-parse-param-oldid": "Analyser le contenu de cette révision. Écrase <var>$1page</var> et <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Quelles informations obtenir :",
+ "apihelp-parse-paramvalue-prop-text": "Fournit le texte analysé du wikitexte.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Fournit les liens de langue du wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-categories": "Fournit les catégories dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Fournit la version HTML des catégories.",
+ "apihelp-parse-paramvalue-prop-links": "Fournit les liens internes dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-templates": "Fournit les modèles dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-images": "Fournit les images dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Fournit les liens externes dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-sections": "Fournit les sections dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-revid": "Ajoute l’ID de révision de la page analysée.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Ajoute le titre du wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-headitems": "Fournit les éléments à mettre dans le <code>&lt;head&gt;</code> de la page.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Fournit le <code>&lt;head&gt;</code> analysé de la page.",
+ "apihelp-parse-paramvalue-prop-modules": "Fournit les modules ResourceLoader utilisés sur la page. Pour les charger, utiliser <code>mw.loader.using()</code>. Soit <kbd>jsconfigvars</kbd> soit <kbd>encodedjsconfigvars</kbd> doit être demandé avec <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Fournit les variables de configuration JavaScript spécifiques à la page. Pour les appliquer, utiliser <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Fournit les variables de configuration JavaScript spécifiques à la page comme chaîne JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "Fournit le HTML des indicateurs d’état de page utilisés sur la page.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Fournit les liens interwikis dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Fournit le wikitexte d’origine qui a été analysé.",
+ "apihelp-parse-paramvalue-prop-properties": "Fournit les diverses propriétés définies dans le wikitexte analysé.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Fournit le rapport de limite d’une manière structurée. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
+ "apihelp-parse-paramvalue-prop-parsetree": "L’arbre d’analyse XML du contenu de la révision (nécessite le modèle de contenu <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Fournit les messages d'avertissement qui sont apparus lors de l'analyse de contenu.",
+ "apihelp-parse-param-wrapoutputclass": "classe CSS à utiliser pour formater la sortie de l'analyseur.",
+ "apihelp-parse-param-pst": "Faire une transformation avant enregistrement de l’entrée avant de l’analyser. Valide uniquement quand utilisé avec du texte.",
+ "apihelp-parse-param-onlypst": "Faire une transformation avant enregistrement (PST) de l’entrée, mais ne pas l’analyser. Renvoie le même wikitexte, après que la PST a été appliquée. Valide uniquement quand utilisé avec <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Traiter uniquement le contenu de la section ayant ce numéro.\n\nQuand la valeur est <kbd>new</kbd>, traite <var>$1text</var> et <var>$1sectiontitle</var> comme s’ils correspondaient à une nouvelle section de la page.\n\nLa valeur <kbd>new</kbd> n’est autorisée que si <var>text</var> est défini.",
+ "apihelp-parse-param-sectiontitle": "Nouveau titre de section quand <var>section</var> vaut <kbd>nouveau</kbd>.\n\nÀ la différence de la modification de page, cela ne revient pas à <var>summary</var> quand il est omis ou vide.",
+ "apihelp-parse-param-disablelimitreport": "Omettre le rapport de limite (« rapport de limite du nouveau PP ») de la sortie de l’analyseur.",
+ "apihelp-parse-param-disablepp": "Utiliser <var>$1disablelimitreport</var> à la place.",
+ "apihelp-parse-param-disableeditsection": "Omettre les liens de modification de section de la sortie de l’analyseur.",
+ "apihelp-parse-param-disabletidy": "Ne pas exécuter de nettoyage du code HTML (par exemple, réagencer) sur la sortie de l'analyseur.",
+ "apihelp-parse-param-disablestylededuplication": "Ne pas dupliquer les feuilles de style incluses, dans la sortie de l'analyseur.",
+ "apihelp-parse-param-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu <code>$1</code> ; remplacé par <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Analyser en mode aperçu.",
+ "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).",
+ "apihelp-parse-param-disabletoc": "Omettre la table des matières dans la sortie.",
+ "apihelp-parse-param-useskin": "Appliquer l’habillage sélectionné sur la sortie de l’analyseur. Cela peut affecter les propriétés suivantes : <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée. Valide uniquement si utilisé avec $1text.",
+ "apihelp-parse-param-contentmodel": "Modèle de contenu du texte d’entrée. Si omis, $1title doit être spécifié, et la valeur par défaut sera le modèle du titre spécifié. Valide uniquement quand utilisé avec $1text.",
+ "apihelp-parse-example-page": "Analyser une page.",
+ "apihelp-parse-example-text": "Analyser le wikitexte.",
+ "apihelp-parse-example-texttitle": "Analyser du wikitexte, en spécifiant le titre de la page.",
+ "apihelp-parse-example-summary": "Analyser un résumé.",
+ "apihelp-patrol-summary": "Patrouiller une page ou une révision.",
+ "apihelp-patrol-param-rcid": "ID de modification récente à patrouiller.",
+ "apihelp-patrol-param-revid": "ID de révision à patrouiller.",
+ "apihelp-patrol-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de surveillance.",
+ "apihelp-patrol-example-rcid": "Patrouiller une modification récente",
+ "apihelp-patrol-example-revid": "Patrouiller une révision",
+ "apihelp-protect-summary": "Modifier le niveau de protection d’une page.",
+ "apihelp-protect-param-title": "Titre de la page à (dé)protéger. Impossible à utiliser avec $1pageid.",
+ "apihelp-protect-param-pageid": "ID de la page à (dé)protéger. Impossible à utiliser avec $1title.",
+ "apihelp-protect-param-protections": "Liste des niveaux de protection, au format <kbd>action=niveau</kbd> (par exemple <kbd>edit=sysop</kbd>). Un niveau de <kbd>tout</kbd>, indique que tout le monde est autorisé à faire l'action, c'est à dire aucune restriction.\n\n<strong>NOTE :<strong> Toutes les actions non listées auront leur restrictions supprimées.",
+ "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd> pour une protection sans expiration.",
+ "apihelp-protect-param-reason": "Motif de (dé)protection.",
+ "apihelp-protect-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de protection.",
+ "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les modèles transclus et les images utilisés dans cette page). Ignoré si aucun des niveaux de protection fournis ne prend en charge la mise en cascade.",
+ "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à la liste de suivi de l'utilisateur actuel.",
+ "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas modifier le suivi.",
+ "apihelp-protect-example-protect": "Protéger une page",
+ "apihelp-protect-example-unprotect": "Enlever la protection d’une page en mettant les restrictions à <kbd>all</kbd> (c'est à dire tout le monde est autorisé à faire l'action).",
+ "apihelp-protect-example-unprotect2": "Enlever la protection de la page en ne mettant aucune restriction",
+ "apihelp-purge-summary": "Vider le cache des titres fournis.",
+ "apihelp-purge-param-forcelinkupdate": "Mettre à jour les tables de liens.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Mettre à jour la table des liens, et mettre à jour les tables de liens pour toute page qui utilise cette page comme modèle",
+ "apihelp-purge-example-simple": "Purger les pages <kbd>Main Page</kbd> et <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Purger les 10 premières pages de l’espace de noms principal",
+ "apihelp-query-summary": "Extraire des données de et sur MediaWiki.",
+ "apihelp-query-extended-description": "Toutes les modifications de données devront d’abord utiliser une requête pour obtenir un jeton, afin d’éviter les abus de la part de sites malveillants.",
+ "apihelp-query-param-prop": "Quelles propriétés obtenir pour les pages demandées.",
+ "apihelp-query-param-list": "Quelles listes obtenir.",
+ "apihelp-query-param-meta": "Quelles métadonnées obtenir.",
+ "apihelp-query-param-indexpageids": "Inclure une section pageids supplémentaire listant tous les IDs de page renvoyés.",
+ "apihelp-query-param-export": "Exporter les révisions actuelles de toutes les pages fournies ou générées.",
+ "apihelp-query-param-exportnowrap": "Renvoyer le XML exporté sans l’inclure dans un résultat XML (même format que [[Special:Export]]). Utilisable uniquement avec $1export.",
+ "apihelp-query-param-iwurl": "S’il faut obtenir l’URL complète si le titre est un lien interwiki.",
+ "apihelp-query-param-rawcontinue": "Renvoyer les données <samp>query-continue</samp> brutes pour continuer.",
+ "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Récupérer les révisions des pages commençant par <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "Énumérer toutes les catégories.",
+ "apihelp-query+allcategories-param-from": "La catégorie depuis laquelle démarrer l’énumération.",
+ "apihelp-query+allcategories-param-to": "La catégorie à laquelle terminer l’énumération.",
+ "apihelp-query+allcategories-param-prefix": "Rechercher tous les titres de catégorie qui commencent avec cette valeur.",
+ "apihelp-query+allcategories-param-dir": "Ordre dans lequel trier.",
+ "apihelp-query+allcategories-param-min": "Renvoyer uniquement les catégories avec au moins ce nombre de membres.",
+ "apihelp-query+allcategories-param-max": "Renvoyer uniquement les catégories avec au plus ce nombre de membres.",
+ "apihelp-query+allcategories-param-limit": "Combien de catégories renvoyer.",
+ "apihelp-query+allcategories-param-prop": "Quelles propriétés récupérer :",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Ajoute le nombre de pages dans la catégorie.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Marque les catégories qui sont masquées avec <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Lister les catégories avec l’information sur le nombre de pages dans chacune",
+ "apihelp-query+allcategories-example-generator": "Récupérer l’information sur la page de catégorie elle-même pour les catégories commençant par <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "Lister toutes les révisions supprimées par un utilisateur ou dans un espace de noms.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Utilisable uniquement avec <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Impossible à utiliser avec <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+alldeletedrevisions-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+alldeletedrevisions-param-from": "Démarrer la liste à ce titre.",
+ "apihelp-query+alldeletedrevisions-param-to": "Arrêter la liste à ce titre.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Rechercher tous les titres de page commençant par cette valeur.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+ "apihelp-query+alldeletedrevisions-param-user": "Lister uniquement les révisions par cet utilisateur.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Ne pas lister les révisions par cet utilisateur.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>REMARQUE :</strong> du fait du [[mw:Special:MyLanguage/Manual:$wgMiserMode|mode minimal]], utiliser <var>$1user</var> et <var>$1namespace</var> ensemble peut aboutir à avoir moins de résultats renvoyés que <var>$1limit</var> avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Utilisé comme générateur, générer des titres plutôt que des IDs de révision.",
+ "apihelp-query+alldeletedrevisions-example-user": "Lister les 50 dernières contributions supprimées par l'utilisateur <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal.",
+ "apihelp-query+allfileusages-summary": "Lister toutes les utilisations de fichiers, y compris ceux n’existant pas.",
+ "apihelp-query+allfileusages-param-from": "Le titre du fichier depuis lequel commencer l’énumération.",
+ "apihelp-query+allfileusages-param-to": "Le titre du fichier auquel arrêter l’énumération.",
+ "apihelp-query+allfileusages-param-prefix": "Rechercher tous les fichiers dont le titre commence par cette valeur.",
+ "apihelp-query+allfileusages-param-unique": "Afficher uniquement les titres de fichiers distincts. Impossible à utiliser avec $1prop=ids.\nQuand il est utilisé comme générateur, il produit les pages cible au lieu des pages source.",
+ "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Ajoute l'ID des pages qui l’utilisent (incompatible avec $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Ajoute le titre du fichier.",
+ "apihelp-query+allfileusages-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+allfileusages-param-dir": "L'ordre dans lequel lister.",
+ "apihelp-query+allfileusages-example-B": "Lister les titres des fichiers, y compris ceux manquants, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Lister les titres de fichier uniques.",
+ "apihelp-query+allfileusages-example-unique-generator": "Obtient tous les titres de fichier, en marquant les manquants.",
+ "apihelp-query+allfileusages-example-generator": "Obtient les pages contenant les fichiers.",
+ "apihelp-query+allimages-summary": "Énumérer toutes les images séquentiellement.",
+ "apihelp-query+allimages-param-sort": "Propriété par laquelle trier.",
+ "apihelp-query+allimages-param-dir": "L'ordre dans laquel lister.",
+ "apihelp-query+allimages-param-from": "Le titre de l’image depuis laquelle démarrer l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+ "apihelp-query+allimages-param-to": "Le titre de l’image auquel arrêter l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+ "apihelp-query+allimages-param-start": "L’horodatage depuis lequel énumérer. Ne peut être utilisé qu’avec $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "L’horodatage de la fin d’énumération. Ne peut être utilisé qu’avec $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Rechercher toutes les images dont le titre commence par cette valeur. Utilisable uniquement avec $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Restreindre aux images avec au moins ce nombre d’octets.",
+ "apihelp-query+allimages-param-maxsize": "Restreindre aux images avec au plus ce nombre d’octets.",
+ "apihelp-query+allimages-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MediaWiki).",
+ "apihelp-query+allimages-param-user": "Renvoyer seulement les fichiers téléversés par cet utilisateur. Utilisable uniquement avec $1sort=timestamp. Impossible à utiliser avec $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Comment filtrer les fichiers téléversés par des robots. Peut être utilisé uniquement avec $1sort=timestamp. Impossible à utiliser avec $1user.",
+ "apihelp-query+allimages-param-mime": "Quels types MIME rechercher, par ex. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Combien d’images renvoyer au total.",
+ "apihelp-query+allimages-example-B": "Afficher une liste des fichiers commençant par la lettre <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Afficher une liste de fichiers récemment téléversés, semblable à [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Afficher une liste de fichiers avec le type MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Afficher l’information sur 4 fichiers commençant par la lettre <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Énumérer tous les liens pointant vers un espace de noms donné.",
+ "apihelp-query+alllinks-param-from": "Le titre du lien auquel démarrer l’énumération.",
+ "apihelp-query+alllinks-param-to": "Le titre du lien auquel arrêter l’énumération.",
+ "apihelp-query+alllinks-param-prefix": "Rechercher tous les titres liés commençant par cette valeur.",
+ "apihelp-query+alllinks-param-unique": "Afficher uniquement les titres liés distincts. Impossible à utiliser avec <kbd>$1prop=ids</kbd>.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+ "apihelp-query+alllinks-param-prop": "Quelles informations inclure :",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Ajoute l’ID de la page avec le lien (impossible à utiliser avec <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Ajoute le titre du lien.",
+ "apihelp-query+alllinks-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+alllinks-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+alllinks-param-dir": "L'ordre dans lequel lister.",
+ "apihelp-query+alllinks-example-B": "Lister les titres liés, y compris ceux manquants, avec les IDs des pages d’où ils proviennent, en démarrant à <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Lister les titres liés uniques",
+ "apihelp-query+alllinks-example-unique-generator": "Obtient tous les titres liés, en marquant les manquants",
+ "apihelp-query+alllinks-example-generator": "Obtient les pages contenant les liens",
+ "apihelp-query+allmessages-summary": "Renvoyer les messages depuis ce site.",
+ "apihelp-query+allmessages-param-messages": "Quels messages sortir. <kbd>*</kbd> (par défaut) signifie tous les messages.",
+ "apihelp-query+allmessages-param-prop": "Quelles propriétés obtenir.",
+ "apihelp-query+allmessages-param-enableparser": "Positionner pour activer l’analyseur, traitera en avance le wikitexte du message (substitution des mots magiques, gestion des modèles, etc.).",
+ "apihelp-query+allmessages-param-nocontent": "Si positionné, ne pas inclure le contenu des messages dans la sortie.",
+ "apihelp-query+allmessages-param-includelocal": "Inclure aussi les messages locaux, c’est-à-dire les messages qui n’existent pas dans le logiciel mais dans l’espace de noms {{ns:MediaWiki}}.\nCela liste toutes les pages de l’espace de noms {{ns:MediaWiki}}, donc aussi celles qui ne sont pas vraiment des messages, telles que [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Arguments à substituer dans le message.",
+ "apihelp-query+allmessages-param-filter": "Renvoyer uniquement les messages avec des noms contenant cette chaîne.",
+ "apihelp-query+allmessages-param-customised": "Renvoyer uniquement les messages dans cet état de personnalisation.",
+ "apihelp-query+allmessages-param-lang": "Renvoyer les messages dans cette langue.",
+ "apihelp-query+allmessages-param-from": "Renvoyer les messages commençant à ce message.",
+ "apihelp-query+allmessages-param-to": "Renvoyer les messages en terminant à ce message.",
+ "apihelp-query+allmessages-param-title": "Nom de page à utiliser comme contexte en analysant le message (pour l’option $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Renvoyer les messages avec ce préfixe.",
+ "apihelp-query+allmessages-example-ipb": "Afficher les messages commençant par <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Afficher les messages <kbd>august</kbd> et <kbd>mainpage</kbd> en allemand.",
+ "apihelp-query+allpages-summary": "Énumérer toutes les pages séquentiellement dans un espace de noms donné.",
+ "apihelp-query+allpages-param-from": "Le titre de la page depuis lequel commencer l’énumération.",
+ "apihelp-query+allpages-param-to": "Le titre de la page auquel stopper l’énumération.",
+ "apihelp-query+allpages-param-prefix": "Rechercher tous les titres de page qui commencent par cette valeur.",
+ "apihelp-query+allpages-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+allpages-param-filterredir": "Quelles pages lister.",
+ "apihelp-query+allpages-param-minsize": "Limiter aux pages avec au moins ce nombre d’octets.",
+ "apihelp-query+allpages-param-maxsize": "Limiter aux pages avec au plus ce nombre d’octets.",
+ "apihelp-query+allpages-param-prtype": "Limiter aux pages protégées uniquement.",
+ "apihelp-query+allpages-param-prlevel": "Filtrer les protections basées sur le niveau de protection (doit être utilisé avec le paramètre $1prtype=).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filtrer les protections d’après leur cascade (ignoré si $1prtype n’est pas positionné).",
+ "apihelp-query+allpages-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+allpages-param-dir": "L'ordre dans lequel lister.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filtrer si une page a des liens de langue. Noter que cela ne prend pas en compte les liens de langue ajoutés par des extensions.",
+ "apihelp-query+allpages-param-prexpiry": "Quelle expiration de protection sur laquelle filtrer la page :\n;indefinite:N’obtenir que les pages avec une expiration de protection infinie.\n;definite:N’obtenir que les pages avec une expiration de protection définie (spécifique).\n;all:Obtenir toutes les pages avec une expiration de protection.",
+ "apihelp-query+allpages-example-B": "Afficher une liste des pages commençant par la lettre <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Afficher l’information sur 4 pages commençant par la lettre <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Afficher le contenu des 2 premières pages hors redirections commençant par <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Lister toutes les redirections vers un espace de noms.",
+ "apihelp-query+allredirects-param-from": "Le titre de la redirection auquel démarrer l’énumération.",
+ "apihelp-query+allredirects-param-to": "Le titre de la redirection auquel arrêter l’énumération.",
+ "apihelp-query+allredirects-param-prefix": "Rechercher toutes les pages cible commençant par cette valeur.",
+ "apihelp-query+allredirects-param-unique": "Afficher uniquement les pages cibles distinctes. Impossible à utiliser avec $1prop=ids|fragment|interwiki.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+ "apihelp-query+allredirects-param-prop": "Quelles informations inclure :",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Ajoute l’ID de la page de redirection (impossible à utiliser avec <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Ajoute le titre de la redirection.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Ajoute le fragment de la redirection, s’il existe (impossible à utiliser avec <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Ajoute le préfixe interwiki de la redirection, s’il existe (impossible à utiliser avec <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+allredirects-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+allredirects-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+allredirects-example-B": "Lister les pages cible, y compris celles manquantes, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Lister les pages cible unique",
+ "apihelp-query+allredirects-example-unique-generator": "Obtient toutes les pages cible, en marquant les manquantes",
+ "apihelp-query+allredirects-example-generator": "Obtient les pages contenant les redirections",
+ "apihelp-query+allrevisions-summary": "Lister toutes les révisions.",
+ "apihelp-query+allrevisions-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+allrevisions-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+allrevisions-param-user": "Lister uniquement les révisions faites par cet utilisateur.",
+ "apihelp-query+allrevisions-param-excludeuser": "Ne pas lister les révisions faites par cet utilisateur.",
+ "apihelp-query+allrevisions-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
+ "apihelp-query+allrevisions-param-generatetitles": "Utilisé comme générateur, génère des titres plutôt que des IDs de révision.",
+ "apihelp-query+allrevisions-example-user": "Lister les 50 dernières contributions de l’utilisateur <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Lister les 50 premières révisions dans l’espace de noms principal.",
+ "apihelp-query+mystashedfiles-summary": "Obtenir une liste des fichiers du cache de téléversement de l’utilisateur actuel.",
+ "apihelp-query+mystashedfiles-param-prop": "Quelles propriétés récupérer pour les fichiers.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Récupérer la taille du fichier et les dimensions de l’image.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Récupérer le type MIME du fichier et son type de média.",
+ "apihelp-query+mystashedfiles-param-limit": "Combien de fichiers obtenir.",
+ "apihelp-query+mystashedfiles-example-simple": "Obtenir la clé du fichier, sa taille, et la taille en pixels des fichiers du cache de téléversement de l’utilisateur actuel.",
+ "apihelp-query+alltransclusions-summary": "Lister toutes les transclusions (pages intégrées en utilisant &#123;&#123;x&#125;&#125;), y compris les inexistantes.",
+ "apihelp-query+alltransclusions-param-from": "Le titre de la transclusion depuis lequel commencer l’énumération.",
+ "apihelp-query+alltransclusions-param-to": "Le titre de la transclusion auquel arrêter l’énumération.",
+ "apihelp-query+alltransclusions-param-prefix": "Rechercher tous les titres inclus qui commencent par cette valeur.",
+ "apihelp-query+alltransclusions-param-unique": "Afficher uniquement les titres inclus. Impossible à utiliser avec $1prop=ids.\nUtilisé avec un générateur, produit les pages cible plutôt que les pages source.",
+ "apihelp-query+alltransclusions-param-prop": "Quelles informations inclure :",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Ajout l’ID de la page de transclusion (impossible à utiliser avec $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Ajoute le titre de la transclusion.",
+ "apihelp-query+alltransclusions-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+alltransclusions-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+alltransclusions-param-dir": "L'ordre dans lequel lister.",
+ "apihelp-query+alltransclusions-example-B": "Lister les titres inclus, y compris les manquants, avec les IDs des pages d’où ils viennent, en commençant à <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Lister les titres inclus uniques",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtient tous les titres inclus, en marquant les manquants.",
+ "apihelp-query+alltransclusions-example-generator": "Obtient les pages contenant les transclusions.",
+ "apihelp-query+allusers-summary": "Énumérer tous les utilisateurs enregistrés.",
+ "apihelp-query+allusers-param-from": "Le nom d’utilisateur auquel démarrer l’énumération.",
+ "apihelp-query+allusers-param-to": "Le nom d’utilisateur auquel stopper l’énumération.",
+ "apihelp-query+allusers-param-prefix": "Rechercher tous les utilisateurs commençant par cette valeur.",
+ "apihelp-query+allusers-param-dir": "Direction du tri.",
+ "apihelp-query+allusers-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés.",
+ "apihelp-query+allusers-param-excludegroup": "Exclure les utilisateurs dans les groupes donnés.",
+ "apihelp-query+allusers-param-rights": "Inclure uniquement les utilisateurs avec les droits indiqués. Ne comprend pas les droits accordés par des groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+allusers-param-prop": "Quelles informations inclure :",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Ajoute l’information sur le bloc actuel d’un utilisateur.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Liste des groupes auxquels appartient l’utilisateur. Cela utilise beaucoup de ressources du serveur et peut renvoyer moins de résultats que la limite.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Liste tous les groupes auxquels l’utilisateur est affecté automatiquement.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Liste les droits qu’a l’utilisateur.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Ajoute l’horodatage de l’inscription de l’utilisateur, s’il est disponible (peut être vide).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Ajoute les IDs centraux et l’état d’attachement de l’utilisateur.",
+ "apihelp-query+allusers-param-limit": "Combien de noms d’utilisateur renvoyer au total.",
+ "apihelp-query+allusers-param-witheditsonly": "Ne lister que les utilisateurs qui ont fait des modifications.",
+ "apihelp-query+allusers-param-activeusers": "Lister uniquement les utilisateurs actifs durant {{PLURAL:$1|le dernier jour|les $1 derniers jours}}.",
+ "apihelp-query+allusers-param-attachedwiki": "Avec <kbd>$1prop=centralids</kbd>, indiquer aussi si l’utilisateur est attaché avec le wiki identifié par cet ID.",
+ "apihelp-query+allusers-example-Y": "Lister les utilisateurs en commençant à <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Récupérer les informations concernant l’état d’authentification actuel.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Tester si l’état d’authentification actuel de l’utilisateur est suffisant pour l’opération spécifiée comme sensible du point de vue sécurité.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Récupérer les informations sur les requêtes d’authentification nécessaires pour l’action d’authentification spécifiée.",
+ "apihelp-query+authmanagerinfo-example-login": "Récupérer les requêtes qui peuvent être utilisées en commençant une connexion.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Récupérer les requêtes qui peuvent être utilisées au début de la connexion, avec les champs de formulaire intégrés.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Tester si l’authentification est suffisante pour l’action <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Trouver toutes les pages qui ont un lien vers la page donnée.",
+ "apihelp-query+backlinks-param-title": "Titre à rechercher. Impossible à utiliser avec <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "ID de la page à chercher. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+backlinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+backlinks-param-filterredir": "Comment filtrer les redirections. Si positionné à <kbd>nonredirects</kbd> quand <var>$1redirect</var> est activé, cela ne s’applique qu’au second niveau.",
+ "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si <var>$1redirect</var> est activé, la limite s’applique à chaque niveau séparément (ce qui signifie jusqu’à 2 * <var>$1limit</var> résultats pouvant être retournés).",
+ "apihelp-query+backlinks-param-redirect": "Si le lien vers une page est une redirection, trouver également toutes les pages qui ont un lien vers cette redirection. La limite maximale est divisée par deux.",
+ "apihelp-query+backlinks-example-simple": "Afficher les liens vers <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Lister tous les utilisateurs et les adresses IP bloqués.",
+ "apihelp-query+blocks-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+blocks-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+blocks-param-ids": "Liste des IDs de bloc à lister (facultatif).",
+ "apihelp-query+blocks-param-users": "Liste des utilisateurs à rechercher (facultatif).",
+ "apihelp-query+blocks-param-ip": "Obtenir tous les blocs s’appliquant à cette adresse IP ou à cette plage CIDR, y compris les blocs de plage.\nImpossible à utiliser avec <var>$3users</var>. Les plages CIDR plus larges que IPv4/$1 ou IPv6/$2 ne sont pas acceptées.",
+ "apihelp-query+blocks-param-limit": "Le nombre maximal de blocs à lister.",
+ "apihelp-query+blocks-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+blocks-paramvalue-prop-id": "Ajoute l’ID du blocage.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Ajoute le nom de l’utilisateur bloqué.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur bloqué.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Ajoute le nom de l’utilisateur ayant bloqué.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Ajoute l’ID de l’utilisateur ayant bloqué.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Ajoute l’horodatage du blocage.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Ajoute l’horodatage d’expiration du blocage.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Ajoute le motif du blocage.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Ajoute la plage d’adresses IP affectée par le blocage.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Marque le bannissement avec (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Afficher uniquement les éléments correspondant à ces critères.\nPar exemple, pour voir uniquement les blocages infinis sur les adresses IP, mettre <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Lister les blocages",
+ "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs <kbd>Alice</kbd> et <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Lister toutes les catégories auxquelles les pages appartiennent.",
+ "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’ajout de la catégorie.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Marque les catégories cachées avec <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Quelle sorte de catégories afficher.",
+ "apihelp-query+categories-param-limit": "Combien de catégories renvoyer.",
+ "apihelp-query+categories-param-categories": "Lister uniquement ces catégories. Utile pour vérifier si une certaine page est dans une catégorie donnée.",
+ "apihelp-query+categories-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+categories-example-simple": "Obtenir une liste des catégories auxquelles appartient la page <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categories-example-generator": "Obtenir des informations sur toutes les catégories utilisées dans la page <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Renvoie les informations sur les catégories données.",
+ "apihelp-query+categoryinfo-example-simple": "Obtenir des informations sur <kbd>Category:Foo</kbd> et <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Lister toutes les pages d’une catégorie donnée.",
+ "apihelp-query+categorymembers-param-title": "Quelle catégorie énumérer (obligatoire). Doit comprendre le préfixe <kbd>{{ns:category}}:</kbd>. Impossible à utiliser avec <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID de la page de la catégorie à énumérer. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Quelles informations inclure :",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Ajoute l’ID de la page.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Ajoute la clé de tri utilisée pour trier dans la catégorie (chaîne hexadécimale).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Ajoute le préfixe de la clé de tri utilisé pour trier dans la catégorie (partie lisible de la clé de tri).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Ajoute le type dans lequel a été catégorisée la page (<samp>page</samp>, <samp>subcat</samp> ou <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’inclusion de la page.",
+ "apihelp-query+categorymembers-param-namespace": "Inclure uniquement les pages dans ces espaces de nom. Remarquez que <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> peuvent être utilisés à la place de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Quel type de membres de la catégorie inclure. Ignoré quand <kbd>$1sort=timestamp</kbd> est positionné.",
+ "apihelp-query+categorymembers-param-limit": "Le nombre maximal de pages à renvoyer.",
+ "apihelp-query+categorymembers-param-sort": "Propriété par laquelle trier.",
+ "apihelp-query+categorymembers-param-dir": "Dans quelle direction trier.",
+ "apihelp-query+categorymembers-param-start": "Horodatage auquel démarrer la liste. Peut être utilisé uniquement avec <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Horodatage auquel terminer la liste. Peut être utilisé uniquement avec <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Clé de tri à laquelle démarrer le listage, telle que renvoyée par <kbd>$1prop=sortkey</kbd>. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Clé de tri à laquelle arrêter le listage, telle que renvoyée par <kbd>$1prop=sortkey</kbd>. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Préfixe de la clé de tri à laquelle démarrer le listage. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>. Écrase <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Préfixe de la clé de tri <strong>avant</strong> laquelle se termine le listage (et non pas <strong>à</strong> ; si cette valeur existe elle ne sera pas incluse !). Utilisable uniquement avec $1sort=sortkey. Écrase $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Utiliser plutôt $1starthexsortkey.",
+ "apihelp-query+categorymembers-param-endsortkey": "Utiliser plutôt $1endhexsortkey.",
+ "apihelp-query+categorymembers-example-simple": "Obtenir les 10 premières pages de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Obtenir l’information sur les 10 premières pages de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Obtenir la liste des contributeurs connectés et le nombre de contributeurs anonymes d’une page.",
+ "apihelp-query+contributors-param-group": "Inclut uniquement les utilisateurs dans les groupes donnés. N'inclut pas les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-excludegroup": "Exclure les utilisateurs des groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-rights": "Inclure uniquement les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-excluderights": "Exclure les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-limit": "Combien de contributeurs renvoyer.",
+ "apihelp-query+contributors-example-simple": "Afficher les contributeurs dans la <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Obtenir des informations sur la révision supprimée.",
+ "apihelp-query+deletedrevisions-extended-description": "Peut être utilisé de différentes manières :\n# Obtenir les révisions supprimées pour un ensemble de pages, en donnant les titres ou les ids de page. Ordonné par titre et horodatage.\n# Obtenir des données sur un ensemble de révisions supprimées en donnant leurs IDs et leurs ids de révision. Ordonné par ID de révision.",
+ "apihelp-query+deletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.",
+ "apihelp-query+deletedrevisions-param-end": "L’horodatage auquel arrêter l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.",
+ "apihelp-query+deletedrevisions-param-tag": "Lister uniquement les révisions marquées par cette balise.",
+ "apihelp-query+deletedrevisions-param-user": "Lister uniquement les révisions faites par cet utilisateur.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Ne pas lister les révisions faites par cet utilisateur.",
+ "apihelp-query+deletedrevisions-example-titles": "Lister les révisions supprimées des pages <kbd>Main Page</kbd> et <kbd>Talk:Main Page</kbd>, avec leur contenu.",
+ "apihelp-query+deletedrevisions-example-revids": "Lister les informations pour la révision supprimée <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Afficher les versions supprimées.",
+ "apihelp-query+deletedrevs-extended-description": "Opère selon trois modes :\n# Lister les révisions supprimées pour les titres donnés, triées par horodatage.\n# Lister les contributions supprimées pour l’utilisateur donné, triées par horodatage (pas de titres spécifiés).\n# Lister toutes les révisions supprimées dans l’espace de noms donné, triées par titre et horodatage (aucun titre spécifié, $1user non positionné).\n\nCertains paramètres ne s’appliquent qu’à certains modes et sont ignorés dans les autres.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}} : $2",
+ "apihelp-query+deletedrevs-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+deletedrevs-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+deletedrevs-param-from": "Démarrer la liste à ce titre.",
+ "apihelp-query+deletedrevs-param-to": "Arrêter la liste à ce titre.",
+ "apihelp-query+deletedrevs-param-prefix": "Rechercher tous les titres de page commençant par cette valeur.",
+ "apihelp-query+deletedrevs-param-unique": "Lister uniquement une révision pour chaque page.",
+ "apihelp-query+deletedrevs-param-tag": "Lister uniquement les révisions marquées par cette balise.",
+ "apihelp-query+deletedrevs-param-user": "Lister uniquement les révisions par cet utilisateur.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Ne pas lister les révisions par cet utilisateur.",
+ "apihelp-query+deletedrevs-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
+ "apihelp-query+deletedrevs-param-limit": "Le nombre maximal de révisions à lister.",
+ "apihelp-query+deletedrevs-param-prop": "Quelles propriétés obtenir :\n;revid : Ajoute l’ID de la révision supprimée.\n;parentid : Ajoute l’ID de la révision précédente de la page.\n;user : Ajoute l’utilisateur ayant fait la révision.\n;userid : Ajoute l’ID de l’utilisateur qui a fait la révision.\n;comment : Ajoute le commentaire de la révision.\n;parsedcomment : Ajoute le commentaire analysé de la révision.\n;minor : Marque si la révision est mineure.\n;len : Ajoute la longueur (en octets) de la révision.\n;sha1 : Ajoute le SHA-1 (base 16) de la révision.\n;content : Ajoute le contenu de la révision.\n;token : <span class=\"apihelp-deprecated\">Désuet.</span> Fournit le jeton de modification.\n;tags : Balises pour la révision.",
+ "apihelp-query+deletedrevs-example-mode1": "Lister les dernières révisions supprimées des pages <kbd>Main Page</kbd> et <kbd>Talk:Main Page</kbd>, avec le contenu (mode 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Lister les 50 dernières contributions de <kbd>Bob</kbd> supprimées (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal (mode 3)",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Lister les 50 premières pages supprimées dans l’espace de noms {{ns:talk}} (mode 3).",
+ "apihelp-query+disabled-summary": "Ce module de requête a été désactivé.",
+ "apihelp-query+duplicatefiles-summary": "Lister d’après leurs valeurs de hachage, tous les fichiers qui sont des doublons de fichiers donnés.",
+ "apihelp-query+duplicatefiles-param-limit": "Combien de fichiers dupliqués à renvoyer.",
+ "apihelp-query+duplicatefiles-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+duplicatefiles-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
+ "apihelp-query+duplicatefiles-example-simple": "Rechercher les doublons de [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Rechercher les doublons de tous les fichiers",
+ "apihelp-query+embeddedin-summary": "Trouver toutes les pages qui incluent (par transclusion) le titre donné.",
+ "apihelp-query+embeddedin-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.",
+ "apihelp-query+embeddedin-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+embeddedin-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+embeddedin-param-filterredir": "Comment filtrer les redirections.",
+ "apihelp-query+embeddedin-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+embeddedin-example-simple": "Afficher les pages incluant <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Obtenir des informations sur les pages incluant <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "Renvoyer toutes les URLs externes (non interwikis) des pages données.",
+ "apihelp-query+extlinks-param-limit": "Combien de liens renvoyer.",
+ "apihelp-query+extlinks-param-protocol": "Protocole de l’URL. Si vide et <var>$1query</var> est positionné, le protocole est <kbd>http</kbd>. Laisser à la fois ceci et <var>$1query</var> vides pour lister tous les liens externes.",
+ "apihelp-query+extlinks-param-query": "Rechercher une chaîne sans protocole. Utile pour vérifier si une certaine page contient une certaine URL externe.",
+ "apihelp-query+extlinks-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
+ "apihelp-query+extlinks-example-simple": "Obtenir une liste des liens externes de <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "Énumérer les pages contenant une URL donnée.",
+ "apihelp-query+exturlusage-param-prop": "Quelles informations inclure :",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Ajoute l’ID de la page.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Ajoute l’URL utilisée dans la page.",
+ "apihelp-query+exturlusage-param-protocol": "Protocole de l’URL. Si vide et que <var>$1query</var> est rempli, le protocole est <kbd>http</kbd>. Le laisser avec <var>$1query</var> vide pour lister tous les liens externes.",
+ "apihelp-query+exturlusage-param-query": "Rechercher une chaîne sans protocole. Voyez [[Special:LinkSearch]]. Le laisser vide pour lister tous les liens externes.",
+ "apihelp-query+exturlusage-param-namespace": "Les espaces de nom à énumérer.",
+ "apihelp-query+exturlusage-param-limit": "Combien de pages renvoyer.",
+ "apihelp-query+exturlusage-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
+ "apihelp-query+exturlusage-example-simple": "Afficher les pages avec un lien vers <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "Énumérer séquentiellement tous les fichiers supprimés.",
+ "apihelp-query+filearchive-param-from": "Le titre de l’image auquel démarrer l’énumération.",
+ "apihelp-query+filearchive-param-to": "Le titre de l’image auquel arrêter l’énumération.",
+ "apihelp-query+filearchive-param-prefix": "Rechercher tous les titres d’image qui commencent par cette valeur.",
+ "apihelp-query+filearchive-param-limit": "Combien d’images renvoyer au total.",
+ "apihelp-query+filearchive-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+filearchive-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MédiaWiki).",
+ "apihelp-query+filearchive-param-prop": "Quelle information obtenir sur l’image :",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Ajoute le hachage SHA-1 pour l’image.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Ajoute l’horodatage à la version téléversée.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Ajoute l’utilisateur qui a téléversé la version de l’image.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Ajoute la taille de l’image en octets et la hauteur, la largeur et le nombre de page (si c’est applicable).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias pour la taille.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Ajoute la description de la version de l’image.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analyser la description de la version.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Ajoute le MIME de l’image.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Ajoute le type de média de l’image.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Liste les métadonnées Exif pour la version de l’image.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Ajoute la profondeur de bits de la version.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
+ "apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés",
+ "apihelp-query+filerepoinfo-summary": "Renvoyer les méta-informations sur les référentiels d’images configurés dans le wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans les valeurs de retour de <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> et [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.",
+ "apihelp-query+filerepoinfo-example-simple": "Obtenir des informations sur les référentiels de fichier.",
+ "apihelp-query+fileusage-summary": "Trouver toutes les pages qui utilisent les fichiers donnés.",
+ "apihelp-query+fileusage-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "ID de chaque page.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Titre de chaque page.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Marque si la page est une redirection.",
+ "apihelp-query+fileusage-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+ "apihelp-query+fileusage-param-limit": "Combien renvoyer.",
+ "apihelp-query+fileusage-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
+ "apihelp-query+fileusage-example-simple": "Obtenir une liste des pages utilisant [[:File:Example.jpg]]",
+ "apihelp-query+fileusage-example-generator": "Obtenir l’information sur les pages utilisant [[:File:Example.jpg]]",
+ "apihelp-query+imageinfo-summary": "Renvoie l’information de fichier et l’historique de téléversement.",
+ "apihelp-query+imageinfo-param-prop": "Quelle information obtenir du fichier :",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Ajoute l’horodatage à la version téléversée.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Ajoute l’utilisateur qui a téléversé chaque version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Ajouter l’ID de l’utilisateur qui a téléversé chaque version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Commentaire sur la version.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analyser le commentaire de la version.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Ajoute le titre canonique du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Fournit l’URL du fichier et de la page de description.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Ajoute la taille du fichier en octets et sa hauteur, sa largeur et le compteur de page (le cas échéant).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias pour la taille.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Ajoute le hachage SH1-1 du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Ajoute le type MIME du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Ajoute le type MIME de la vignette de l’image (nécessite l’URL et le paramètre $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Ajoute le type de média du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Liste les métadonnées Exif de la version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Liste les métadonnées génériques du format du fichier pour la version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Liste les métadonnées mises en forme combinées depuis diverses sources. Les résultats sont au format HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Ajoute la profondeur de bits de la version.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Utilisé par la page Special:Upload pour obtenir de l’information sur un fichier existant. Non prévu pour être utilisé en dehors du cœur de MédiaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Ajoute l'indication que le fichier est sur [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "Combien de révisions de fichier renvoyer par fichier.",
+ "apihelp-query+imageinfo-param-start": "Horodatage auquel démarrer la liste.",
+ "apihelp-query+imageinfo-param-end": "Horodatage auquel arrêter la liste.",
+ "apihelp-query+imageinfo-param-urlwidth": "Si $2prop=url est défini, une URL vers une image à l’échelle de cette largeur sera renvoyée.\nPour des raisons de performance si cette option est utilisée, pas plus de $1 images mises à l’échelle seront renvoyées.",
+ "apihelp-query+imageinfo-param-urlheight": "Similaire à $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Version de métadonnées à utiliser. Si <kbd>latest</kbd> est spécifié, utiliser la dernière version. Par défaut à <kbd>1</kbd> pour la compatibilité ascendante.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Quelle langue pour analyser extmetadata. Cela affecte à la fois quelle traduction analyser, s’il y en a plusieurs, et comment les choses comme les nombres et d’autres valeurs sont mises en forme.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Si des traductions pour la propriété extmetadata sont disponibles, les analyser toutes.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Si spécifié et non vide, seules ces clés seront renvoyées pour $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Une chaîne de paramètres spécifique à l’analyseur. Par exemple, les PDFs peuvent utiliser <kbd>page15-100px</kbd>. <var>$1urlwidth</var> doit être utilisé et être cohérent avec <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Si <kbd>$2prop=badfile</kbd> est positionné, il s'agit du titre de la page utilisé pour évaluer la [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
+ "apihelp-query+imageinfo-example-simple": "Analyser les informations sur la version actuelle de [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Analyser les informations sur les versions de [[:File:Test.jpg]] depuis 2008.",
+ "apihelp-query+images-summary": "Renvoie tous les fichiers contenus dans les pages fournies.",
+ "apihelp-query+images-param-limit": "Combien de fichiers renvoyer.",
+ "apihelp-query+images-param-images": "Lister uniquement ces fichiers. Utile pour vérifier si une page donnée contient un fichier donné.",
+ "apihelp-query+images-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+images-example-simple": "Obtenir une liste des fichiers utilisés dans [[Main Page]]",
+ "apihelp-query+images-example-generator": "Obtenir des informations sur tous les fichiers utilisés dans [[Main Page]]",
+ "apihelp-query+imageusage-summary": "Trouver toutes les pages qui utilisent le titre de l’image donné.",
+ "apihelp-query+imageusage-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.",
+ "apihelp-query+imageusage-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+imageusage-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+imageusage-param-filterredir": "Comment filtrer les redirections. Si mis à nonredirects quand $1redirect est activé, cela ne s’appliquera qu’au second niveau.",
+ "apihelp-query+imageusage-param-limit": "Combien de pages renvoyer au total. Si <var>$1redirect</var> est activé, la limite s’applique à chaque niveau séparément (ce qui veut dire que jusqu’à 2 * <var>$1limit</var> résultats peuvent être renvoyés).",
+ "apihelp-query+imageusage-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont aussi un lien vers cette redirection. La limite maximale est divisée par deux.",
+ "apihelp-query+imageusage-example-simple": "Afficher les pages utilisant [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+imageusage-example-generator": "Obtenir des informations sur les pages utilisant [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+info-summary": "Obtenir les informations de base sur la page.",
+ "apihelp-query+info-param-prop": "Quelles propriétés supplémentaires récupérer :",
+ "apihelp-query+info-paramvalue-prop-protection": "Lister le niveau de protection de chaque page.",
+ "apihelp-query+info-paramvalue-prop-talkid": "L’ID de la page de discussion de chaque page qui n’est pas de discussion.",
+ "apihelp-query+info-paramvalue-prop-watched": "Lister l’état de suivi de chaque page.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Le nombre d’observateurs, si c’est autorisé.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "Le nombre de personnes suivant chaque page qui ont regardé les modifications récentes de cette page, si c’est autorisé.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "L’horodatage de notification de la liste de suivi de chaque page.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "L’ID de page de la page parent de chaque page de discussion.",
+ "apihelp-query+info-paramvalue-prop-url": "Fournit une URL complète, une URL de modification, et l’URL canonique de chaque page.",
+ "apihelp-query+info-paramvalue-prop-readable": "Si l’utilisateur peut lire cette page.",
+ "apihelp-query+info-paramvalue-prop-preload": "Fournit le texte renvoyé par EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Fournit la manière dont le titre de la page est réellement affiché.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "Donne le titre affiché dans toutes les variantes de la langue de contenu du site.",
+ "apihelp-query+info-param-testactions": "Tester si l’utilisateur actuel peut effectuer certaines actions sur la page.",
+ "apihelp-query+info-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-query+info-example-simple": "Obtenir des informations sur la page <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Obtenir des informations générales et de protection sur la page <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "Trouver toutes les pages qui ont un lien vers le lien interwiki indiqué.",
+ "apihelp-query+iwbacklinks-extended-description": "Peut être utilisé pour trouver tous les liens avec un préfixe, ou tous les liens vers un titre (avec un préfixe donné). Sans paramètre, équivaut à « tous les liens interwiki ».",
+ "apihelp-query+iwbacklinks-param-prefix": "Préfixe pour l’interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Combien de pages renvoyer.",
+ "apihelp-query+iwbacklinks-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Ajoute le préfixe de l’interwiki.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Ajoute le titre de l’interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+iwbacklinks-example-simple": "Obtenir les pages qui ont un lien vers [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Obtenir des informations sur les pages qui ont un lien vers [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Renvoie tous les liens interwiki des pages indiquées.",
+ "apihelp-query+iwlinks-param-url": "S'il faut obtenir l’URL complète (impossible à utiliser avec $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Ajoute l’URL complète.",
+ "apihelp-query+iwlinks-param-limit": "Combien de liens interwiki renvoyer.",
+ "apihelp-query+iwlinks-param-prefix": "Renvoyer uniquement les liens interwiki avec ce préfixe.",
+ "apihelp-query+iwlinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+iwlinks-example-simple": "Obtenir les liens interwiki de la page <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Trouver toutes les pages qui ont un lien vers le lien de langue indiqué.",
+ "apihelp-query+langbacklinks-extended-description": "Peut être utilisé pour trouver tous les liens avec un code de langue, ou tous les liens vers un titre (avec une langue donnée). Sans paramètre équivaut à « tous les liens de langue ».\n\nNotez que cela peut ne pas prendre en compte les liens de langue ajoutés par les extensions.",
+ "apihelp-query+langbacklinks-param-lang": "Langue pour le lien de langue.",
+ "apihelp-query+langbacklinks-param-title": "Lien interlangue à rechercher. Doit être utilisé avec $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+langbacklinks-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Ajoute le code de langue du lien de langue.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Ajoute le titre du lien de langue.",
+ "apihelp-query+langbacklinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+langbacklinks-example-simple": "Obtenir les pages ayant un lien vers [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Renvoie tous les liens interlangue des pages fournies.",
+ "apihelp-query+langlinks-param-limit": "Combien de liens interlangue renvoyer.",
+ "apihelp-query+langlinks-param-url": "S’il faut récupérer l’URL complète (impossible à utiliser avec <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Ajoute l’URL complète.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Ajoute le nom localisé de la langue (au mieux). Utiliser <var>$1inlanguagecode</var> pour contrôler la langue.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Ajoute le nom natif de la langue.",
+ "apihelp-query+langlinks-param-lang": "Renvoyer uniquement les liens interlangue avec ce code de langue.",
+ "apihelp-query+langlinks-param-title": "Lien à rechercher. Doit être utilisé avec <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Code de langue pour les noms de langue localisés.",
+ "apihelp-query+langlinks-example-simple": "Obtenir les liens interlangue de la page <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Renvoie tous les liens des pages fournies.",
+ "apihelp-query+links-param-namespace": "Afficher les liens uniquement dans ces espaces de noms.",
+ "apihelp-query+links-param-limit": "Combien de liens renvoyer.",
+ "apihelp-query+links-param-titles": "Lister uniquement les liens vers ces titres. Utile pour vérifier si une certaine page a un lien vers un titre donné.",
+ "apihelp-query+links-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+links-example-simple": "Obtenir les liens de la page <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Obtenir des informations sur tous les liens de page dans <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Obtenir les liens de la page <kbd>Main Page</kbd> dans les espaces de nom {{ns:user}} et {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Trouver toutes les pages ayant un lien vers les pages données.",
+ "apihelp-query+linkshere-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "ID de chaque page.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Titre de chaque page.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Indique si la page est une redirection.",
+ "apihelp-query+linkshere-param-namespace": "Inclure uniquement les pages dans ces espaces de noms.",
+ "apihelp-query+linkshere-param-limit": "Combien de résultats renvoyer.",
+ "apihelp-query+linkshere-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
+ "apihelp-query+linkshere-example-simple": "Obtenir une liste des pages liées à [[Main Page]]",
+ "apihelp-query+linkshere-example-generator": "Obtenir des informations sur les pages liées à [[Main Page]]",
+ "apihelp-query+logevents-summary": "Récupère les événements à partir des journaux.",
+ "apihelp-query+logevents-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Ajoute l’ID de l’événement.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Ajoute le titre de la page pour l’événement enregistré.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Ajoute le type de l’événement enregistré.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Ajoute l’utilisateur responsable de l’événement.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur responsable de l’événement.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’événement.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Ajoute le commentaire de l’événement.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de l’événement.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Liste les détails supplémentaires sur l’événement.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Liste les balises de l’événement.",
+ "apihelp-query+logevents-param-type": "Filtrer les entrées du journal sur ce seul type.",
+ "apihelp-query+logevents-param-action": "Filtrer les actions du journal sur cette seule action. Écrase <var>$1type</var>. Dans la liste des valeurs possibles, les valeurs suivies d'un astérisque, comme <kbd>action/*</kbd>, peuvent avoir différentes chaînes après le slash.",
+ "apihelp-query+logevents-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+logevents-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+logevents-param-user": "Restreindre aux entrées générées par l’utilisateur spécifié.",
+ "apihelp-query+logevents-param-title": "Restreindre aux entrées associées à une page donnée.",
+ "apihelp-query+logevents-param-namespace": "Restreindre aux entrées dans l’espace de noms spécifié.",
+ "apihelp-query+logevents-param-prefix": "Restreindre aux entrées commençant par ce préfixe.",
+ "apihelp-query+logevents-param-tag": "Lister seulement les entrées ayant cette balise.",
+ "apihelp-query+logevents-param-limit": "Combien d'entrées renvoyer au total.",
+ "apihelp-query+logevents-example-simple": "Liste les entrées de journal récentes.",
+ "apihelp-query+pagepropnames-summary": "Lister les noms de toutes les propriétés de page utilisées sur le wiki.",
+ "apihelp-query+pagepropnames-param-limit": "Le nombre maximal de noms à renvoyer.",
+ "apihelp-query+pagepropnames-example-simple": "Obtenir les 10 premiers noms de propriété.",
+ "apihelp-query+pageprops-summary": "Obtenir diverses propriétés de page définies dans le contenu de la page.",
+ "apihelp-query+pageprops-param-prop": "Lister uniquement ces propriétés de page (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> renvoie les noms de propriété de page utilisés). Utile pour vérifier si des pages utilisent une certaine propriété de page.",
+ "apihelp-query+pageprops-example-simple": "Obtenir les propriétés des pages <kbd>Main Page</kbd> et <kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "Lister toutes les pages utilisant une propriété de page donnée.",
+ "apihelp-query+pageswithprop-param-propname": "Propriété de page pour laquelle énumérer les pages (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> renvoie les noms de propriété de page utilisés).",
+ "apihelp-query+pageswithprop-param-prop": "Quelles informations inclure :",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Ajoute l’ID de la page.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Ajoute la valeur de la propriété de page.",
+ "apihelp-query+pageswithprop-param-limit": "Le nombre maximal de pages à renvoyer.",
+ "apihelp-query+pageswithprop-param-dir": "Dans quelle direction trier.",
+ "apihelp-query+pageswithprop-example-simple": "Lister les 10 premières pages en utilisant <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Obtenir des informations supplémentaires sur les 10 premières pages utilisant <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Effectuer une recherche de préfixe sur les titres de page.",
+ "apihelp-query+prefixsearch-extended-description": "Malgré les similarités dans le nom, ce module n’est pas destiné à être l’équivalent de [[Special:PrefixIndex]] ; pour cela, voyez <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> avec le paramètre <kbd>apprefix</kbd>. Le but de ce module est similaire à <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd> : prendre l’entrée utilisateur et fournir les meilleurs titres s’en approchant. Selon le serveur du moteur de recherche, cela peut inclure corriger des fautes de frappe, éviter des redirections, ou d’autres heuristiques.",
+ "apihelp-query+prefixsearch-param-search": "Chaîne de recherche.",
+ "apihelp-query+prefixsearch-param-namespace": "Espaces de noms à rechercher. Ignoré if <var>$1search</var> commence avec le préfixe d'un espace de noms valide.",
+ "apihelp-query+prefixsearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+ "apihelp-query+prefixsearch-param-offset": "Nombre de résultats à sauter.",
+ "apihelp-query+prefixsearch-example-simple": "Rechercher les titres de page commençant par <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Rechercher le profil à utiliser.",
+ "apihelp-query+protectedtitles-summary": "Lister tous les titres protégés en création.",
+ "apihelp-query+protectedtitles-param-namespace": "Lister uniquement les titres dans ces espaces de nom.",
+ "apihelp-query+protectedtitles-param-level": "Lister uniquement les titres avec ces niveaux de protection.",
+ "apihelp-query+protectedtitles-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+protectedtitles-param-start": "Démarrer la liste à cet horodatage de protection.",
+ "apihelp-query+protectedtitles-param-end": "Arrêter la liste à cet horodatage de protection.",
+ "apihelp-query+protectedtitles-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’ajout de la protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Ajoute l’utilisateur ayant ajouté la protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur ayant ajouté la protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Ajoute le commentaire pour la protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de la protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Ajoute l’horodatage de levée de la protection.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Ajoute le niveau de protection.",
+ "apihelp-query+protectedtitles-example-simple": "Lister les titres protégés",
+ "apihelp-query+protectedtitles-example-generator": "Trouver les liens vers les titres protégés dans l’espace de noms principal.",
+ "apihelp-query+querypage-summary": "Obtenir une liste fournie par une page spéciale basée sur QueryPage.",
+ "apihelp-query+querypage-param-page": "Le nom de la page spéciale. Notez que ce nom est sensible à la casse.",
+ "apihelp-query+querypage-param-limit": "Nombre de résultats à renvoyer.",
+ "apihelp-query+querypage-example-ancientpages": "Renvoyer les résultats de [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Récupèrer un ensemble de pages au hasard.",
+ "apihelp-query+random-extended-description": "Les pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page dans la liste est <samp>Accueil</samp>, la seconde sera <em>toujours</em> <samp>Liste des singes de fiction</samp>, la troisième <samp>Liste de personnes figurant sur les timbres de Vanuatu</samp>, etc.",
+ "apihelp-query+random-param-namespace": "Renvoyer seulement des pages de ces espaces de noms.",
+ "apihelp-query+random-param-limit": "Limiter le nombre de pages aléatoires renvoyées.",
+ "apihelp-query+random-param-redirect": "Utilisez <kbd>$1filterredir=redirects</kbd> au lieu de ce paramètre.",
+ "apihelp-query+random-param-filterredir": "Comment filtrer les redirections.",
+ "apihelp-query+random-example-simple": "Obtenir deux pages aléatoires de l’espace de noms principal.",
+ "apihelp-query+random-example-generator": "Renvoyer les informations de la page sur deux pages au hasard de l’espace de noms principal.",
+ "apihelp-query+recentchanges-summary": "Énumérer les modifications récentes.",
+ "apihelp-query+recentchanges-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+recentchanges-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+recentchanges-param-namespace": "Filtrer les modifications uniquement sur ces espaces de noms.",
+ "apihelp-query+recentchanges-param-user": "Lister uniquement les modifications faites par cet utilisateur.",
+ "apihelp-query+recentchanges-param-excludeuser": "Ne pas lister les modifications faites par cet utilisateur.",
+ "apihelp-query+recentchanges-param-tag": "Lister uniquement les modifications marquées avec cette balise.",
+ "apihelp-query+recentchanges-param-prop": "Inclure des informations supplémentaires :",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Ajoute l’utilisateur responsable de la modification et marque s'il s'agit d'une adresse IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur responsable de la modification.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Ajoute le commentaire de la modification.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé pour la modification.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Ajoute les balises de la modification.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Ajoute l’horodatage de la modification.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Ajoute le titre de la page modifiée.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Ajoute l’ID de la page, l’ID des modifications récentes et l’ID de l’ancienne et de la nouvelle révision.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Ajoute l’ancienne et la nouvelle taille de la page en octets.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Marque la modification si la page est une redirection.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Marque les modifications à relire comme relues ou pas.",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "Marque les modifications patrouillables comme patrouillée automatiquement ou non.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Ajoute les informations du journal (Id du journal, type de trace, etc.) aux entrées du journal.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Liste les balises de l’entrée.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Ajoute la somme de contrôle du contenu pour les entrées associées à une révision.",
+ "apihelp-query+recentchanges-param-token": "Utiliser plutôt <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+recentchanges-param-show": "Afficher uniquement les éléments correspondant à ces critères. Par exemple, pour voir uniquement les modifications mineures par des utilisateurs connectés, mettre $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Combien de modifications renvoyer au total.",
+ "apihelp-query+recentchanges-param-type": "Quels types de modification afficher.",
+ "apihelp-query+recentchanges-param-toponly": "Lister uniquement les modifications qui sont de la dernière révision.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Utilisé comme générateur, générer des IDs de révision plutôt que des titres.\nLes entrées de modification récentes sans IDs de révision associé (par ex. la plupart des entrées de journaux) ne généreront rien.",
+ "apihelp-query+recentchanges-example-simple": "Lister les modifications récentes",
+ "apihelp-query+recentchanges-example-generator": "Obtenir l’information de page sur les modifications récentes non relues.",
+ "apihelp-query+redirects-summary": "Renvoie toutes les redirections vers les pages données.",
+ "apihelp-query+redirects-param-prop": "Quelles propriétés récupérer :",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "ID de page de chaque redirection.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Titre de chaque redirection.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Fragment de chaque redirection, s’il y en a un.",
+ "apihelp-query+redirects-param-namespace": "Inclure uniquement les pages dans ces espaces de noms.",
+ "apihelp-query+redirects-param-limit": "Combien de redirections renvoyer.",
+ "apihelp-query+redirects-param-show": "Afficher uniquement les éléments correspondant à ces critères :\n;fragment:Afficher uniquement les redirections avec un fragment.\n;!fragment:Afficher uniquement les redirections sans fragment.",
+ "apihelp-query+redirects-example-simple": "Obtenir une liste des redirections vers [[Main Page]]",
+ "apihelp-query+redirects-example-generator": "Obtenir des informations sur toutes les redirections vers [[Main Page]]",
+ "apihelp-query+revisions-summary": "Récupèrer les informations de relecture.",
+ "apihelp-query+revisions-extended-description": "Peut être utilisé de différentes manières :\n# Obtenir des données sur un ensemble de pages (dernière révision), en mettant les titres ou les ids de page.\n# Obtenir les révisions d’une page donnée, en utilisant les titres ou les ids de page avec rvstart, rvend ou rvlimit.\n# Obtenir des données sur un ensemble de révisions en donnant leurs IDs avec revids.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Utilisable uniquement avec une seule page (mode #2).",
+ "apihelp-query+revisions-param-startid": "Commencer l'énumération à partir de la date de cette revue. La revue doit exister, mais ne concerne pas forcément cette page.",
+ "apihelp-query+revisions-param-endid": "Arrêter l’énumération à la date de cette revue. La revue doit exister mais ne concerne pas forcément cette page.",
+ "apihelp-query+revisions-param-start": "À quel horodatage de révision démarrer l’énumération.",
+ "apihelp-query+revisions-param-end": "Énumérer jusqu’à cet horodatage.",
+ "apihelp-query+revisions-param-user": "Inclure uniquement les révisions faites par l’utilisateur.",
+ "apihelp-query+revisions-param-excludeuser": "Exclure les révisions faites par l’utilisateur.",
+ "apihelp-query+revisions-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+ "apihelp-query+revisions-param-token": "Quels jetons obtenir pour chaque révision.",
+ "apihelp-query+revisions-example-content": "Obtenir des données avec le contenu pour la dernière révision des titres <kbd>API</kbd> et <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Obtenir les 5 dernières révisions de la <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> faites après le 01/05/2006.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> qui n’ont pas été faites par l’utilisateur anonyme <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> qui ont été faites par l’utilisateur <kbd>MédiaWiki par défaut</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Quelles propriétés obtenir pour chaque révision :",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "L’ID de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Marques de la révision (mineure).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "L’horodatage de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "L’utilisateur qui a fait la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "L’ID de l’utilisateur créateur de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Longueur (en octets) de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "Hachage SHA-1 (base 16) de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "ID du modèle de contenu de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Commentaire de l’utilisateur sur la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Commentaire analysé de l’utilisateur sur la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Texte de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Balises de la révision.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Deprecated.</span> Utiliser <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> à la place. L’arbre d’analyse XML du contenu de la révision (nécessite le modèle de contenu <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Limiter le nombre de révisions retournées.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Utiliser <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> à la place. Développer les modèles dans le contenu de la révision (nécessite $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Utiliser <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> à la place. Générer l’arbre d’analyse XML pour le contenu de la révision (nécessite $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Utiliser <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> à la place. Analyser le contenu de la révision (nécessite $1prop=content). Pour des raisons de performance, si cette option est utilisée, $1limit est forcé à 1.",
+ "apihelp-query+revisions+base-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
+ "apihelp-query+revisions+base-param-diffto": "Utiliser <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> à la place. ID de révision à prendre pour comparer chaque révision. Utiliser <kbd>prev</kbd>, <kbd>next</kbd> et <kbd>cur</kbd> pour la version précédente, suivante et actuelle respectivement.",
+ "apihelp-query+revisions+base-param-difftotext": "Utiliser <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> à la place. Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase <var>$1diffto</var>. Si <var>$1section</var> est positionné, seule cette section sera comparée avec ce texte.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Utiliser <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> à la place. Effectuer une transformation avant enregistrement sur le texte avant de le comparer. Valide uniquement quand utilisé avec <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "Format de sérialisation utilisé pour <var>$1difftotext</var> et attendu pour la sortie du contenu.",
+ "apihelp-query+search-summary": "Effectuer une recherche en texte intégral.",
+ "apihelp-query+search-param-search": "Rechercher les titres de page ou le contenu correspondant à cette valeur. Vous pouvez utiliser la chaîne de recherche pour invoquer des fonctionnalités de recherche spéciales, selon ce que le serveur de recherche du wiki implémente.",
+ "apihelp-query+search-param-namespace": "Rechercher uniquement dans ces espaces de noms.",
+ "apihelp-query+search-param-what": "Quel type de recherche effectuer.",
+ "apihelp-query+search-param-info": "Quelles métadonnées renvoyer.",
+ "apihelp-query+search-param-prop": "Quelles propriétés renvoyer :",
+ "apihelp-query+search-param-qiprofile": "Profil indépendant des requêtes à utiliser (affecte algorithme de classement).",
+ "apihelp-query+search-paramvalue-prop-size": "Ajoute la taille de la page en octets.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Ajoute le nombre de mots de la page.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Ajoute l’horodatage de la dernière modification de la page.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Ajoute un extrait analysé de la page.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Ajoute un extrait analysé du titre de la page.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Ajoute un extrait analysé du titre de la redirection.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Ajoute le titre de la redirection correspondante.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Ajoute un extrait analysé du titre de la section correspondante.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Ajoute le titre de la section correspondante.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Ajoute un extrait analysé de la catégorie correspondante.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Ajoute un booléen indiquant si la recherche correspond au contenu du fichier.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Va ajouter des données générées supplémentaires par extension.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignoré.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignoré.",
+ "apihelp-query+search-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+search-param-interwiki": "Inclure les résultats interwiki dans la recherche, s’ils sont disponibles.",
+ "apihelp-query+search-param-backend": "Quel serveur de recherche utiliser, si ce n’est pas celui par défaut.",
+ "apihelp-query+search-param-enablerewrites": "Activer la réécriture interne de la requête. Les serveurs de recherche peuvent réécrire la requête en une autre qui est censée donner de meilleurs résultats, par exemple en corrigeant les erreurs d’orthographe.",
+ "apihelp-query+search-example-simple": "Rechercher <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Rechercher des textes pour <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Renvoyer les informations générales sur le site.",
+ "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Information globale du système.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Liste des espaces de noms déclarés avec leur nom canonique.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Liste des alias des espaces de noms déclarés.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Liste des alias des pages spéciales.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Liste des mots magiques et leurs alias.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Renvoie les statistiques du site.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Renvoie la correspondance interwiki (éventuellement filtrée, éventuellement localisée en utilisant <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Renvoie le serveur de base de données ayant la plus grande latence de réplication.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Renvoie les groupes utilisateur et les droits associés.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Renvoie les bibliothèques installées sur le wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Renvoie les extensions installées sur le wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Renvoie la liste des extensions de fichier (types de fichier) autorisées au téléversement.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Renvoie l’information sur les types de restriction disponibles (protection).",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Renvoie une liste des langues que MédiaWiki prend en charge (éventuellement localisée en utilisant <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Renvoie une liste de codes de langue pour lesquels [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] est activé, et les variantes prises en charge pour chacun.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant <var>$1inlanguagecode</var>, sinon dans la langue du contenu).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Renvoie une liste des balises d’extension de l’analyseur.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Renvoie une liste des accroches de fonction de l’analyseur.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Renvoie une liste d'IDs de variable.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Renvoie une liste de protocoles autorisés dans les liens externes.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Renvoie les valeurs par défaut pour les préférences utilisateur.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Renvoie la configuration du dialogue de téléversement.",
+ "apihelp-query+siteinfo-param-filteriw": "Renvoyer uniquement les entrées locales ou uniquement les non locales de la correspondance interwiki.",
+ "apihelp-query+siteinfo-param-showalldb": "Lister tous les serveurs de base de données, pas seulement celui avec la plus grande latence.",
+ "apihelp-query+siteinfo-param-numberingroup": "Liste le nombre d’utilisateurs dans les groupes.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Code de langue pour les noms de langue localisés (du mieux possible) et les noms d’habillage.",
+ "apihelp-query+siteinfo-example-simple": "Extraire les informations du site.",
+ "apihelp-query+siteinfo-example-interwiki": "Extraire une liste des préfixes interwiki locaux.",
+ "apihelp-query+siteinfo-example-replag": "Vérifier la latence de réplication actuelle.",
+ "apihelp-query+stashimageinfo-summary": "Renvoie les informations de fichier des fichiers mis en réserve.",
+ "apihelp-query+stashimageinfo-param-filekey": "Clé qui identifie un téléversement précédent qui a été temporairement mis en réserve.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité ascendante.",
+ "apihelp-query+stashimageinfo-example-simple": "Renvoie les informations sur un fichier mis en réserve.",
+ "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis de côté.",
+ "apihelp-query+tags-summary": "Lister les balises de modification.",
+ "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
+ "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :",
+ "apihelp-query+tags-paramvalue-prop-name": "Ajoute le nom de la balise.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Ajoute le message système pour la balise.",
+ "apihelp-query+tags-paramvalue-prop-description": "Ajoute la description de la balise.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Ajoute le nombre de révisions et d’entrées du journal qui ont cette balise.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Indique si la balise est définie.",
+ "apihelp-query+tags-paramvalue-prop-source": "Retourne les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.",
+ "apihelp-query+tags-paramvalue-prop-active": "Si la balise est encore appliquée.",
+ "apihelp-query+tags-example-simple": "Lister les balises disponibles.",
+ "apihelp-query+templates-summary": "Renvoie toutes les pages incluses dans les pages fournies.",
+ "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de noms.",
+ "apihelp-query+templates-param-limit": "Combien de modèles renvoyer.",
+ "apihelp-query+templates-param-templates": "Lister uniquement ces modèles. Utile pour vérifier si une certaine page utilise un modèle donné.",
+ "apihelp-query+templates-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+templates-example-simple": "Obtenir les modèles utilisés sur la page <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Obtenir des informations sur les pages modèle utilisé sur <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Obtenir les pages des espaces de noms {{ns:user}} et {{ns:template}} qui sont inclues dans la page <kdb>Main Page<kdb>.",
+ "apihelp-query+tokens-summary": "Récupère les jetons pour les actions de modification de données.",
+ "apihelp-query+tokens-param-type": "Types de jeton à demander.",
+ "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut).",
+ "apihelp-query+tokens-example-types": "Récupérer un jeton de suivi et un de patrouille.",
+ "apihelp-query+transcludedin-summary": "Trouver toutes les pages qui incluent les pages données.",
+ "apihelp-query+transcludedin-param-prop": "Quelles propriétés obtenir :",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID de page de chaque page.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Titre de chaque page.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Marque si cette page est une redirection.",
+ "apihelp-query+transcludedin-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+ "apihelp-query+transcludedin-param-limit": "Combien en renvoyer.",
+ "apihelp-query+transcludedin-param-show": "Afficher uniquement les éléments qui correspondent à ces critères:\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
+ "apihelp-query+transcludedin-example-simple": "Obtenir une liste des pages incluant <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Obtenir des informations sur les pages incluant <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "Obtenir toutes les modifications d'un utilisateur.",
+ "apihelp-query+usercontribs-param-limit": "Le nombre maximal de contributions à renvoyer.",
+ "apihelp-query+usercontribs-param-start": "L’horodatage auquel démarrer le retour.",
+ "apihelp-query+usercontribs-param-end": "L’horodatage auquel arrêter le retour.",
+ "apihelp-query+usercontribs-param-user": "Utilisateurs pour lesquels il faut récupérer les contributions. Ne peut pas être utilisé avec <var>$1userid</var> ou <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Récupérer les contributions pour tous les utilisateurs dont les noms commencent par cette valeur. Ne peut pas être utilisé avec <var>$1user</var> ou <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "Utilisateurs pour lesquels il faut récupérer les contributions. Ne peut pas être utilisé avec <var>$1user</var> ou <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Lister uniquement les contributions dans ces espaces de noms.",
+ "apihelp-query+usercontribs-param-prop": "Inclure des informations supplémentaires:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Ajoute l’ID de page et l’ID de révision.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Ajoute le titre et l’ID d’espace de noms de la page.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Ajoute l’horodatage de la modification.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Ajoute le commentaire de la modification.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de la modification.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Ajoute la nouvelle taille de la modification.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Ajoute le delta de taille de la modification par rapport à son parent.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Ajoute les marques de la modification.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Marque les modifications relues.",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "Marque les modifications patrouillées automatiquement.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Liste les balises de la modification.",
+ "apihelp-query+usercontribs-param-show": "Afficher uniquement les éléments correspondant à ces critères, par ex. les modifications non mineures uniquement : <kbd>$2show=!minor</kbd>.\n\nSi <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> est positionné, les révisions plus anciennes que <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|seconde|secondes}}) ne seront pas affichées.",
+ "apihelp-query+usercontribs-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+ "apihelp-query+usercontribs-param-toponly": "Lister uniquement les modifications de la dernière révision.",
+ "apihelp-query+usercontribs-example-user": "Afficher les contributions de l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Afficher les contributions de toutes les adresses IP avec le préfixe <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-summary": "Obtenir des informations sur l’utilisateur courant.",
+ "apihelp-query+userinfo-param-prop": "Quelles informations inclure :",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Marque si l’utilisateur actuel est bloqué, par qui, et pour quelle raison.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Ajoute une balise <samp>messages</samp> si l’utilisateur actuel a des messages en cours.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Liste tous les groupes auxquels appartient l’utilisateur actuel.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Liste les groupes auxquels l’utilisateur actuel a été explicitement affecté, avec la date d’expiration de chaque appartenance au groupe.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Liste tous les groupes dont l’utilisateur actuel est automatiquement membre.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Liste tous les droits qu’a l’utilisateur actuel.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Liste les groupes pour lesquels l’utilisateur actuel peut ajouter ou supprimer.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Liste toutes les préférences qu’a définies l’utilisateur actuel.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Obtenir un jeton pour modifier les préférences de l’utilisateur actuel.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur actuel.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Liste toutes les limites de débit s’appliquant à l’utilisateur actuel.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Ajoute le vrai nom de l’utilisateur actuel.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Ajoute l’adresse de courriel de l’utilisateur et sa date d’authentification.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Renvoie en écho l’entête <code>Accept-Language</code> envoyé par le client dans un format structuré.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Ajoute la date d’inscription de l’utilisateur.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Ajoute le compteur de pages non lues de la liste de suivi de l’utilisateur (au maximum $1 ; renvoie <samp>$2</samp> s’il y en a plus).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "Ajoute les IDs centraux et l’état d’attachement de l’utilisateur.",
+ "apihelp-query+userinfo-param-attachedwiki": "Avec <kbd>$1prop=centralids</kbd>, indiquer si l’utilisateur est attaché au wiki identifié par cet ID.",
+ "apihelp-query+userinfo-example-simple": "Obtenir des informations sur l’utilisateur actuel.",
+ "apihelp-query+userinfo-example-data": "Obtenir des informations supplémentaires sur l’utilisateur actuel.",
+ "apihelp-query+users-summary": "Obtenir des informations sur une liste d’utilisateurs.",
+ "apihelp-query+users-param-prop": "Quelles informations inclure :",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.",
+ "apihelp-query+users-paramvalue-prop-groups": "Liste tous les groupes auxquels appartient chaque utilisateur.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "Liste les groupes auxquels chaque utilisateur a été explicitement affecté, avec la date d’expiration de l’appartenance à chaque groupe.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Liste tous les groupes dont un utilisateur est automatiquement membre.",
+ "apihelp-query+users-paramvalue-prop-rights": "Liste tous les droits qu’a un utilisateur.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur.",
+ "apihelp-query+users-paramvalue-prop-registration": "Ajoute l’horodatage d’inscription de l’utilisateur.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Marque si l’utilisateur peut et veut recevoir des courriels via [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Marque le sexe de l’utilisateur. Renvoie « male », « female », ou « unknown ».",
+ "apihelp-query+users-paramvalue-prop-centralids": "Ajoute les IDs centraux et l’état d’attachement de l’utilisateur.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Indique si un compte peut être créé pour les noms d’utilisateurs valides mais non enregistrés.",
+ "apihelp-query+users-param-attachedwiki": "Avec <kbd>$1prop=centralids</kbd>, indiquer si l’utilisateur est attaché au wiki identifié par cet ID.",
+ "apihelp-query+users-param-users": "Une liste d'utilisateurs pour lesquels obtenir des l’informations.",
+ "apihelp-query+users-param-userids": "Une liste d’ID utilisateur pour lesquels obtenir des informations.",
+ "apihelp-query+users-param-token": "Utiliser <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> à la place.",
+ "apihelp-query+users-example-simple": "Renvoyer des informations pour l'utilisateur <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "Obtenir les modifications récentes des pages de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlist-param-allrev": "Inclure les multiples révisions de la même page dans l’intervalle de temps fourni.",
+ "apihelp-query+watchlist-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+watchlist-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+watchlist-param-namespace": "Filtrer les modifications aux seuls espaces de nom fournis.",
+ "apihelp-query+watchlist-param-user": "Lister uniquement les modifications par cet utilisateur.",
+ "apihelp-query+watchlist-param-excludeuser": "Ne pas lister les modifications faites par cet utilisateur.",
+ "apihelp-query+watchlist-param-limit": "Combien de résultats au total renvoyer par demande.",
+ "apihelp-query+watchlist-param-prop": "Quelles propriétés supplémentaires obtenir :",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Ajoute les IDs de révision et de page.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Ajoute le titre de la page.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Ajoute les marqueurs de la modification.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Ajoute l’utilisateur ayant fait la modification.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur ayant fait la modification.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Ajoute le commentaire de la modification.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de la modification.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Ajoute l’horodatage de la modification.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Marque les modifications relues.",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "Marque les modifications qui sont patrouillées automatiquement.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Ajoute les tailles ancienne et nouvelle de la page.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Ajoute l’horodatage de la dernière notification de la modification à l’utilisateur.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Ajoute l’information de trace le cas échéant.",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "Liste les balises associées à l'entrée.",
+ "apihelp-query+watchlist-param-show": "Afficher uniquement les éléments qui correspondent à ces critères. Par exemple, pour voir uniquement les modifications mineures faites par des utilisateurs connectés, mettre $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Quels types de modification afficher :",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Modifications normales de page.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Modifications externes.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Créations de pages.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Entrées du journal.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Modifications d’appartenance aux catégories.",
+ "apihelp-query+watchlist-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
+ "apihelp-query+watchlist-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilsateur) pour autoriser l’accès à la liste de suivi d'un autre utilisateur.",
+ "apihelp-query+watchlist-example-simple": "Lister la révision de tête des pages récemment modifiées dans la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlist-example-props": "Chercher des informations supplémentaires sur la révision de tête des pages récemment modifiées de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlist-example-allrev": "Chercher les informations sur toutes les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlist-example-generator": "Chercher l’information de la page sur les pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlist-example-wlowner": "Lister la révision de tête des pages récemment modifiées de la liste de suivi de l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-query+watchlistraw-summary": "Obtenir toutes les pages de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de noms fournis.",
+ "apihelp-query+watchlistraw-param-limit": "Combien de résultats renvoyer au total par requête.",
+ "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Ajoute l’horodatage de la dernière notification de l’utilisateur à propos de la modification.",
+ "apihelp-query+watchlistraw-param-show": "Lister uniquement les éléments correspondant à ces critères.",
+ "apihelp-query+watchlistraw-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
+ "apihelp-query+watchlistraw-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilisateur) pour permettre l’accès à la liste de suivi d’un autre utilisateur.",
+ "apihelp-query+watchlistraw-param-dir": "Le sens dans lequel lister.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Démarrer l'énumération avec ce Titre (inclure le préfixe d'espace de noms) :",
+ "apihelp-query+watchlistraw-param-totitle": "Terminer l'énumération avec ce Titre (inclure le préfixe d'espace de noms) :",
+ "apihelp-query+watchlistraw-example-simple": "Lister les pages dans la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlistraw-example-generator": "Chercher l’information sur les pages de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-removeauthenticationdata-summary": "Supprimer les données d’authentification pour l’utilisateur actuel.",
+ "apihelp-removeauthenticationdata-example-simple": "Tentative de suppression des données de l’utilisateur pour <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Envoyer un courriel de réinitialisation du mot de passe à un utilisateur.",
+ "apihelp-resetpassword-extended-description-noroutes": "Aucun chemin pour réinitialiser le mot de passe n’est disponible.\n\nActiver les chemins dans <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> pour utiliser ce module.",
+ "apihelp-resetpassword-param-user": "Utilisateur ayant été réinitialisé.",
+ "apihelp-resetpassword-param-email": "Adresse courriel de l’utilisateur ayant été réinitialisé.",
+ "apihelp-resetpassword-example-user": "Envoyer un courriel de réinitialisation du mot de passe à l’utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-resetpassword-example-email": "Envoyer un courriel pour la réinitialisation de mot de passe à tous les utilisateurs avec l’adresse <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Supprimer et rétablir des révisions.",
+ "apihelp-revisiondelete-param-type": "Type de suppression de révision en cours de traitement.",
+ "apihelp-revisiondelete-param-target": "Titre de page pour la suppression de révision, s’il est nécessaire pour le type.",
+ "apihelp-revisiondelete-param-ids": "Identifiants pour les révisions à supprimer.",
+ "apihelp-revisiondelete-param-hide": "Quoi masquer pour chaque révision.",
+ "apihelp-revisiondelete-param-show": "Quoi démasquer pour chaque révision",
+ "apihelp-revisiondelete-param-suppress": "S’il faut supprimer les données aux administrateurs comme aux autres.",
+ "apihelp-revisiondelete-param-reason": "Motif de suppression ou d’annulation de suppression.",
+ "apihelp-revisiondelete-param-tags": "Balises à appliquer à l’entrée dans le journal de suppression.",
+ "apihelp-revisiondelete-example-revision": "Masquer le contenu de la révision <kbd>12345</kbd> de la page <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Masquer toutes les données de l’entrée de journal <kbd>67890</kbd> avec le motif <kbd>Violation de Biographie de Personne Vivante</kbd>.",
+ "apihelp-rollback-summary": "Annuler les dernières modifications de la page.",
+ "apihelp-rollback-extended-description": "Si le dernier utilisateur à avoir modifié la page a fait plusieurs modifications sur une ligne, elles seront toutes annulées.",
+ "apihelp-rollback-param-title": "Titre de la page à restaurer. Impossible à utiliser avec <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "ID de la page à restaurer. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Balises à appliquer à la révocation.",
+ "apihelp-rollback-param-user": "Nom de l’utilisateur dont les modifications doivent être annulées.",
+ "apihelp-rollback-param-summary": "Personnaliser le résumé de la modification. S’il est vide, le résumé par défaut sera utilisé.",
+ "apihelp-rollback-param-markbot": "Marquer les modifications annulées et les modifications annulées comme robot.",
+ "apihelp-rollback-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
+ "apihelp-rollback-example-simple": "Annuler les dernières modifications à <kbd>Main Page</kbd> par l’utilisateur <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Annuler les dernières modifications de la page <kbd>Main Page</kbd> par l’utilisateur à l’adresse IP <kbd>192.0.2.5</kbd> avec le résumé <kbd>Annulation de vandalisme<kbd>, et marquer ces modifications et l’annulation comme modifications de robots.",
+ "apihelp-rsd-summary": "Exporter un schéma RSD (Découverte Très Simple).",
+ "apihelp-rsd-example-simple": "Exporter le schéma RSD",
+ "apihelp-setnotificationtimestamp-summary": "Mettre à jour l’horodatage de notification pour les pages suivies.",
+ "apihelp-setnotificationtimestamp-extended-description": "Cela affecte la mise en évidence des pages modifiées dans la liste de suivi et l’historique, et l’envoi de courriel quand la préférence « {{int:tog-enotifwatchlistpages}} » est activée.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Travailler sur toutes les pages suivies.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Horodatage auquel dater la notification.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Révision pour laquelle fixer l’horodatage de notification (une page uniquement).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Révision pour fixer l’horodatage de notification plus récent (une page uniquement).",
+ "apihelp-setnotificationtimestamp-example-all": "Réinitialiser l’état de notification pour toute la liste de suivi.",
+ "apihelp-setnotificationtimestamp-example-page": "Réinitialiser l’état de notification pour la <kbd>Page principale<kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixer l’horodatage de notification pour <kbd>Page principale</kbd> afin que toutes les modifications depuis le 1 janvier 2012 soient non vues.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Réinitialiser l’état de notification sur les pages dans l’espace de noms <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "Modifier la langue d’une page.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Il n’est pas possible de modifier la langue d’une page sur ce wiki.\n\nActiver <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> pour utiliser cette action.",
+ "apihelp-setpagelanguage-param-title": "Titre de la page dont vous souhaitez modifier la langue. Ne peut pas être utilisé avec <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "Identifiant (ID) de la page dont vous souhaitez modifier la langue. Ne peut être utilisé avec <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Code de langue vers lequel la page doit être changée. Utiliser <kbd>defaut</kbd> pour réinitialiser la page sur la langue par défaut du contenu du wiki.",
+ "apihelp-setpagelanguage-param-reason": "Motif de la modification.",
+ "apihelp-setpagelanguage-param-tags": "Modifier les balises à appliquer à l'entrée du journal résultant de cette action.",
+ "apihelp-setpagelanguage-example-language": "Changer la langue de la <kbd>page principale</kbd> en basque.",
+ "apihelp-setpagelanguage-example-default": "Remplacer la langue de la page ayant l'ID 123 par la langue par défaut du contenu du wiki.",
+ "apihelp-stashedit-summary": "Préparer des modifications dans le cache partagé.",
+ "apihelp-stashedit-extended-description": "Ceci a pour but d’être utilisé via AJAX depuis le formulaire d’édition pour améliorer la performance de la sauvegarde de la page.",
+ "apihelp-stashedit-param-title": "Titre de la page en cours de modification.",
+ "apihelp-stashedit-param-section": "Numéro de section. <kbd>0</kbd> pour la section du haut, <kbd>new</kbd> pour une nouvelle section.",
+ "apihelp-stashedit-param-sectiontitle": "Le titre pour une nouvelle section.",
+ "apihelp-stashedit-param-text": "Contenu de la page.",
+ "apihelp-stashedit-param-stashedtexthash": "Empreinte du contenu de la page venant d’une réserve préalable à utiliser à la place.",
+ "apihelp-stashedit-param-contentmodel": "Modèle de contenu du nouveau contenu.",
+ "apihelp-stashedit-param-contentformat": "Format de sérialisation de contenu utilisé pour le texte saisi.",
+ "apihelp-stashedit-param-baserevid": "ID de révision de la révision de base.",
+ "apihelp-stashedit-param-summary": "Résumé du changement",
+ "apihelp-tag-summary": "Ajouter ou enlever des balises de modification aux révisions ou aux entrées de journal individuelles.",
+ "apihelp-tag-param-rcid": "Un ou plusieurs IDs de modification récente à partir desquels ajouter ou supprimer la balise.",
+ "apihelp-tag-param-revid": "Un ou plusieurs IDs de révision à partir desquels ajouter ou supprimer la balise.",
+ "apihelp-tag-param-logid": "Un ou plusieurs IDs d’entrée de journal à partir desquels ajouter ou supprimer la balise.",
+ "apihelp-tag-param-add": "Balises à ajouter. Seules les balises définies manuellement peuvent être ajoutées.",
+ "apihelp-tag-param-remove": "Balises à supprimer. Seules les balises qui sont soit définies manuellement soit pas du tout définies peuvent être supprimées.",
+ "apihelp-tag-param-reason": "Motif de la modification.",
+ "apihelp-tag-param-tags": "Balises à appliquer à l’entrée de journal qui sera créée en résultat de cette action.",
+ "apihelp-tag-example-rev": "Ajoute la balise <kbd>vandalism</kbd> à partir de l’ID de révision 123 sans indiquer de motif",
+ "apihelp-tag-example-log": "Supprimer la balise <kbd>spam</kbd> à partir de l’ID d’entrée de journal 123 avec le motif <kbd>Wrongly applied</kbd>",
+ "apihelp-tokens-summary": "Obtenir des jetons pour des actions de modification des données.",
+ "apihelp-tokens-extended-description": "Ce module est désuet, remplacé par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Types de jeton à demander.",
+ "apihelp-tokens-example-edit": "Récupérer un jeton de modification (par défaut).",
+ "apihelp-tokens-example-emailmove": "Récupérer un jeton de courriel et un jeton de déplacement.",
+ "apihelp-unblock-summary": "Débloquer un utilisateur.",
+ "apihelp-unblock-param-id": "ID du blocage à lever (obtenu via <kbd>list=blocks</kbd>). Impossible à utiliser avec <var>$1user</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresses IP à débloquer. Impossible à utiliser en même temps que <var>$1id</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "ID de l'utilisateur à débloquer. Ne peut être utilisé avec <var>$1id</var> ou <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Motif de déblocage.",
+ "apihelp-unblock-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de blocage.",
+ "apihelp-unblock-example-id": "Lever le blocage d’ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Débloquer l’utilisateur <kbd>Bob</kbd> avec le motif <kbd>Désolé Bob</kbd>.",
+ "apihelp-undelete-summary": "Restituer les versions d'une page supprimée.",
+ "apihelp-undelete-extended-description": "Une liste des révisions supprimées (avec les horodatages) peut être récupérée via [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], et une liste d’IDs de fichier supprimé peut être récupérée via [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Titre de la page à restaurer.",
+ "apihelp-undelete-param-reason": "Motif de restauration.",
+ "apihelp-undelete-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de suppression.",
+ "apihelp-undelete-param-timestamps": "Horodatages des révisions à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
+ "apihelp-undelete-param-fileids": "IDs des révisions de fichier à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
+ "apihelp-undelete-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
+ "apihelp-undelete-example-page": "Annuler la suppression de la page <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Annuler la suppression de deux révisions de la page <kbd>Main Page</kbd>.",
+ "apihelp-unlinkaccount-summary": "Supprimer un compte tiers lié de l’utilisateur actuel.",
+ "apihelp-unlinkaccount-example-simple": "Essayer de supprimer le lien de l’utilisateur actuel pour le fournisseur associé avec <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-summary": "Téléverser un fichier, ou obtenir l’état des téléversements en cours.",
+ "apihelp-upload-extended-description": "Plusieurs méthodes sont disponibles :\n* Téléverser directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Téléverser le fichier par morceaux, en utilisant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.\n* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utilisez le paramètre <var>$1url</var>.\n* Terminer un téléversement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléversement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
+ "apihelp-upload-param-filename": "Nom de fichier cible.",
+ "apihelp-upload-param-comment": "Téléverser le commentaire. Utilisé aussi comme texte de la page initiale pour les nouveaux fichiers si <var>$1text</var> n’est pas spécifié.",
+ "apihelp-upload-param-tags": "Modifier les balises à appliquer à l’entrée du journal de téléversement et à la révision de la page du fichier.",
+ "apihelp-upload-param-text": "Texte de page initiale pour les nouveaux fichiers.",
+ "apihelp-upload-param-watch": "Suivre la page.",
+ "apihelp-upload-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l’utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
+ "apihelp-upload-param-ignorewarnings": "Ignorer tous les avertissements.",
+ "apihelp-upload-param-file": "Contenu du fichier.",
+ "apihelp-upload-param-url": "URL où chercher le fichier.",
+ "apihelp-upload-param-filekey": "Clé identifiant un téléversement précédent temporairement mis en attente.",
+ "apihelp-upload-param-sessionkey": "Comme $1filekey, conservé pour des raisons de compatibilité descendante.",
+ "apihelp-upload-param-stash": "Si positionné, le serveur conservera temporairement le fichier au lieu de l’ajouter au dépôt.",
+ "apihelp-upload-param-filesize": "Taille du téléversement entier.",
+ "apihelp-upload-param-offset": "Décalage du bloc en octets.",
+ "apihelp-upload-param-chunk": "Partie du contenu.",
+ "apihelp-upload-param-async": "Faire les grosses opérations de fichiers de façon asynchrone quand c’est possible.",
+ "apihelp-upload-param-checkstatus": "Récupérer uniquement l’état de téléversement pour la clé de fichier donnée.",
+ "apihelp-upload-example-url": "Téléverser depuis une URL",
+ "apihelp-upload-example-filekey": "Terminer un téléversement qui a échoué à cause d’avertissements",
+ "apihelp-userrights-summary": "Modifier l’appartenance d’un utilisateur à un groupe.",
+ "apihelp-userrights-param-user": "Nom d’utilisateur.",
+ "apihelp-userrights-param-userid": "ID de l’utilisateur.",
+ "apihelp-userrights-param-add": "Ajouter l’utilisateur à ces groupes, ou s’ils sont déjà membres, mettre à jour la date d’expiration de leur appartenance à ce groupe.",
+ "apihelp-userrights-param-expiry": "Horodatages d’expiration. Peuvent être relatifs (par ex. <kbd>5 mois</kbd> ou <kbd>2 semaines</kbd>) ou absolus (par ex. <kbd>2014-09-18T12:34:56Z</kbd>). Si uniquement un horodatage est fixé, il sera utilisé pour tous les groupes passés au paramètre <var>$1add</var>. Utiliser <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd> pour une lien utilisateur-groupe qui n’expire jamais.",
+ "apihelp-userrights-param-remove": "Supprimer l’utilisateur de ces groupes.",
+ "apihelp-userrights-param-reason": "Motif pour la modification.",
+ "apihelp-userrights-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal des droits utilisateur.",
+ "apihelp-userrights-example-user": "Ajouter l’utilisateur <kbd>FooBot</kbd> au groupe <kbd>bot</kbd><!-- {{int:group-bot}} ? -->, et le supprimer des groupes <kbd>sysop</kbd> et <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Ajouter l’utilisateur d’ID <kbd>123</kbd> au groupe <kbd>robot</kbd>, et le supprimer des groupes <kbd>sysop</kbd> et <kbd>bureaucrate</kbd>.",
+ "apihelp-userrights-example-expiry": "Ajouter l'utilisateur <kbd>SometimeSysop</kbd> au groupe <kbd>sysop</kbd> pour 1 mois.",
+ "apihelp-validatepassword-summary": "Valider un mot de passe conformément aux règles concernant les mots de passe du wiki.",
+ "apihelp-validatepassword-extended-description": "La validation est <samp>Good</samp> si le mot de passe est acceptable, <samp>Change</samp> s'il peut être utilisé pour se connecter et doit être changé, ou <samp>Invalid</samp> s'il n'est pas utilisable.",
+ "apihelp-validatepassword-param-password": "Mot de passe à valider.",
+ "apihelp-validatepassword-param-user": "Nom de l'utilisateur, pour tester la création de compte. L'utilisateur ne doit pas déja exister.",
+ "apihelp-validatepassword-param-email": "Adresse courriel, pour tester la création de compte.",
+ "apihelp-validatepassword-param-realname": "Vrai nom, pour tester la création de compte.",
+ "apihelp-validatepassword-example-1": "Valider le mot de passe <kbd>foobar</kbd> pour l'utilisateur actuel.",
+ "apihelp-validatepassword-example-2": "Valider le mot de passe <kbd>qwerty</kbd> pour la création de l'utilisateur <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "Ajouter ou supprimer des pages de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-watch-param-title": "La page à (ne plus) suivre. Utiliser plutôt <var>$1titles</var>.",
+ "apihelp-watch-param-unwatch": "Si défini, la page ne sera plus suivie plutôt que suivie.",
+ "apihelp-watch-example-watch": "Suivre la page <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Ne plus suivre la page <kbd>Page principale</kbd>.",
+ "apihelp-watch-example-generator": "Suivre les quelques premières pages de l’espace de nom principal",
+ "apihelp-format-example-generic": "Renvoyer le résultat de la requête dans le format $1.",
+ "apihelp-format-param-wrappedhtml": "Renvoyer le HTML avec une jolie mise en forme et les modules ResourceLoader associés comme un objet JSON.",
+ "apihelp-json-summary": "Extraire les données au format JSON.",
+ "apihelp-json-param-callback": "Si spécifié, inclut la sortie dans l’appel d’une fonction fournie. Pour plus de sûreté, toutes les données spécifiques à l’utilisateur seront restreintes.",
+ "apihelp-json-param-utf8": "Si spécifié, encode la plupart (mais pas tous) des caractères non ASCII en URF-8 au lieu de les remplacer par leur séquence d’échappement hexadécimale. Valeur par défaut quand <var>formatversion</var> ne vaut pas <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Si spécifié, encode toutes ses séquences d’échappement non ASCII utilisant l’hexadécimal. Valeur par défaut quand <var>formatversion</var> vaut <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Mise en forme de sortie :\n;1:Format rétro-compatible (booléens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
+ "apihelp-jsonfm-summary": "Extraire les données au format JSON (affiché proprement en HTML).",
+ "apihelp-none-summary": "Ne rien extraire.",
+ "apihelp-php-summary": "Extraire les données au format sérialisé de PHP.",
+ "apihelp-php-param-formatversion": "Mise en forme de la sortie :\n;1:Format rétro-compatible (bool&ens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
+ "apihelp-phpfm-summary": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).",
+ "apihelp-rawfm-summary": "Extraire les données, y compris les éléments de débogage, au format JSON (affiché proprement en HTML).",
+ "apihelp-xml-summary": "Extraire les données au format XML.",
+ "apihelp-xml-param-xslt": "Si spécifié, ajoute la page nommée comme une feuille de style XSL. La valeur doit être un titre dans l’espace de noms {{ns:MediaWiki}} se terminant par <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Si spécifié, ajoute un espace de noms XML.",
+ "apihelp-xmlfm-summary": "Extraire les données au format XML (affiché proprement en HTML).",
+ "api-format-title": "Résultat de l’API de MediaWiki",
+ "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez <kbd>format=$2</kbd>.\n\nVoyez la [[mw:Special:MyLanguage/API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+ "api-format-prettyprint-header-only-html": "Ceci est une représentation HTML à des fins de débogage, et n’est pas approprié pour une utilisation applicative.\n\nVoir la [[mw:Special:MyLanguage/API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+ "api-format-prettyprint-header-hyperlinked": "Voici la représentation HTML du format $1. HTML est bien pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez [$3 <kbd>format=$2</kbd>].\n\nVoir la [[mw:API|documentation complète]], ou l’ [[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+ "api-format-prettyprint-status": "Cette réponse serait retournée avec l'état HTTP $1 $2.",
+ "api-login-fail-aborted": "L’authentification nécessite une interaction avec l’utilisateur, qui n’est pas prise en charge par <kbd>action=login</kbd>. Pour pouvoir se connecter avec <kbd>action=login</kbd>, voyez [[Special:BotPasswords]]. Pour continuer à utiliser la connexion du compte principal, voyez <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-aborted-nobotpw": "L’authentification nécessite une interaction avec l’utilisateur, qui n’est pas prise en charge par <kbd>action=login</kbd>. Pour se connecter, voyez <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-badsessionprovider": "Impossible de se connecter en utilisant $1.",
+ "api-login-fail-sameorigin": "Impossible de se connecter quand la politique de même origine n’est pas appliquée.",
+ "api-pageset-param-titles": "Une liste des titres sur lesquels travailler.",
+ "api-pageset-param-pageids": "Une liste des IDs de page sur lesquelles travailler.",
+ "api-pageset-param-revids": "Une liste des IDs de révision sur lesquelles travailler.",
+ "api-pageset-param-generator": "Obtenir la liste des pages sur lesquelles travailler en exécutant le module de recherche spécifié.\n\n<strong>NOTE :<strong> les noms de paramètre du générateur doivent être préfixés avec un « g », voir les exemples.",
+ "api-pageset-param-redirects-generator": "Résoudre automatiquement les redirections dans <var>$1titles</var>, <var>$1pageids</var> et <var>$1revids</var>, et dans les pages renvoyées par <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Résoudre automatiquement les redirections dans <var>$1titles</var>, <var>$1pageids</var> et <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Convertir les titres dans d’autres variantes si nécessaire. Fonctionne uniquement si la langue de contenu du wiki prend en charge la conversion en variantes. Les langues qui prennent en charge la conversion en variante incluent $1.",
+ "api-help-title": "Aide de l’API de MediaWiki",
+ "api-help-lead": "Ceci est une page d’aide de l’API de MediaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Module principal",
+ "api-help-undocumented-module": "Aucune documentation pour le module $1.",
+ "api-help-flag-deprecated": "Ce module est désuet.",
+ "api-help-flag-internal": "<strong>Ce module est interne ou instable.</strong> Son fonctionnement peut être modifié sans préavis.",
+ "api-help-flag-readrights": "Ce module nécessite des droits de lecture.",
+ "api-help-flag-writerights": "Ce module nécessite des droits d’écriture.",
+ "api-help-flag-mustbeposted": "Ce module n’accepte que les requêtes POST.",
+ "api-help-flag-generator": "Ce module peut être utilisé comme générateur.",
+ "api-help-source": "Source : $1",
+ "api-help-source-unknown": "Source : <span class=\"apihelp-unknown\">inconnue</span>",
+ "api-help-license": "Licence : [[$1|$2]]",
+ "api-help-license-noname": "Licence : [[$1|Voir le lien]]",
+ "api-help-license-unknown": "Licence : <span class=\"apihelp-unknown\">inconnue</span>",
+ "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
+ "api-help-param-deprecated": "Désuet.",
+ "api-help-param-required": "Ce paramètre est obligatoire.",
+ "api-help-datatypes-header": "Type de données",
+ "api-help-datatypes": "Les entrées dans MédiaWiki doivent être en UTF-8 à la norme NFC. MédiaWiki peut tenter de convertir d’autres types d’entrée, mais cela peut faire échouer certaines opérations (comme les [[Special:ApiHelp/edit|modifications]] avec contrôles MD5) to fail.\n\nCertains types de paramètre dans les requêtes de l’API nécessitent plus d’explication :\n;boolean\n:Les paramètres booléens fonctionnent comme des cases à cocher HTML : si le paramètre est spécifié, quelle que soit sa valeur, il est considéré comme vrai. Pour une valeur fausse, enlever complètement le paramètre.\n;timestamp\n:Les horodatages peuvent être spécifiés sous différentes formes. Date et heure ISO 8601 est recommandé. Toutes les heures sont en UTC, tout fuseau horaire inclus est ignoré.\n:* Date et heure ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (la ponctuation et <kbd>Z</kbd> sont facultatifs)\n:* Date et heure ISO 8601 avec fractions de seconde (ignorées), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (tirets, deux-points et <kbd>Z</kbd> sont facultatifs)\n:* Format MédiaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Format numérique générique, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuseau horaire facultatif en <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, ou <kbd>-<var>##</var></kbd> sont ignorés)\n:* Format EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Format RFC 2822 (le fuseau horaire est facultatif), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Format RFC 850 (le fuseau horaire est facultatif), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Format ctime C, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Secondes depuis 1970-01-01T00:00:00Z sous forme d’entier de 1 à 13 chiffres (sans <kbd>0</kbd>)\n:* La chaîne <kbd>now</kbd>",
+ "api-help-param-type-limit": "Type : entier ou <kbd>max</kbd>",
+ "api-help-param-type-integer": "Type : {{PLURAL:$1|1=entier|2=liste d’entiers}}",
+ "api-help-param-type-boolean": "Type : booléen ([[Special:ApiHelp/main#main/datatypes|détails]])",
+ "api-help-param-type-timestamp": "Type : {{PLURAL:$1|1=horodatage|2=liste d’horodatages}} ([[Special:ApiHelp/main#main/datatypes|formats autorisés]])",
+ "api-help-param-type-user": "Type : {{PLURAL:$1|1=nom d’utilisateur|2=liste de noms d’utilisateur}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Une des valeurs suivantes|2=Valeurs (séparées par <kbd>{{!}}</kbd> ou [[Special:ApiHelp/main#main/datatypes|autre]])}} : $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Doit être vide|Peut être vide, ou $2}}",
+ "api-help-param-limit": "Pas plus de $1 autorisé.",
+ "api-help-param-limit2": "Pas plus de $1 autorisé ($2 pour les robots).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=La valeur ne doit pas être inférieure|2=Les valeurs ne doivent pas être inférieures}} à $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=La valeur ne doit pas être supérieure|2=Les valeurs ne doivent pas être supérieures}} à $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=La valeur doit|2=Les valeurs doivent}} être entre $2 et $3.",
+ "api-help-param-upload": "Doit être envoyé comme un fichier importé utilisant multipart/form-data.",
+ "api-help-param-multi-separate": "Valeurs séparées par <kbd>|</kbd> ou [[Special:ApiHelp/main#main/datatypes|autre]].",
+ "api-help-param-multi-max": "Le nombre maximal de valeurs est {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} pour les robots).",
+ "api-help-param-multi-max-simple": "Le nombre maximum de valeurs est {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Pour spécifier toutes les valeurs, utiliser <kbd>$1</kbd>.",
+ "api-help-param-default": "Par défaut : $1",
+ "api-help-param-default-empty": "Par défaut : <span class=\"apihelp-empty\">(vide)</span>",
+ "api-help-param-token": "Un jeton « $1 » récupéré par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Pour rester compatible, le jeton utilisé dans l’IHM web est aussi accepté.",
+ "api-help-param-disabled-in-miser-mode": "Désactivé à cause du [[mw:Special:MyLanguage/Manual:$wgMiserMode|mode minimal]].",
+ "api-help-param-limited-in-miser-mode": "<strong>NOTE :</strong> Du fait du [[mw:Special:MyLanguage/Manual:$wgMiserMode|mode minimal]], utiliser cela peut aboutir à moins de résultats que <var>$1limit</var> renvoyés avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
+ "api-help-param-direction": "Dans quelle direction énumérer :\n;newer:Lister les plus anciens en premier. Note : $1start doit être avant $1end.\n;older:Lister les nouveaux en premier (par défaut). Note : $1start doit être postérieur à $1end.",
+ "api-help-param-continue": "Quand plus de résultats sont disponibles, utiliser cela pour continuer.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(aucune description)</span>",
+ "api-help-param-maxbytes": "Ne peut excéder $1 octet{{PLURAL:$1||s}}.",
+ "api-help-param-maxchars": "Ne peut excéder $1 caractères{{PLURAL:$1||s}}.",
+ "api-help-examples": "{{PLURAL:$1|Exemple|Exemples}} :",
+ "api-help-permissions": "{{PLURAL:$1|Droit|Droits}} :",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Accordé à}} : $2",
+ "api-help-right-apihighlimits": "Utiliser des valeurs plus hautes dans les requêtes de l’API (requêtes lentes : $1 ; requêtes rapides : $2). Les limites pour les requêtes lentes s’appliquent aussi aux paramètres multivalués.",
+ "api-help-open-in-apisandbox": "<small>[ouvrir dans le bac à sable]</small>",
+ "api-help-authmanager-general-usage": "La procédure générale pour utiliser ce module est la suivante :\n# Récupérer les champs disponibles avec <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> avec <kbd>amirequestsfor=$4</kbd>, et un jeton <kbd>$5</kbd> avec <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Présenter les champs à l’utilisateur, et les lui faire soumettre.\n# Faire un envoi à ce module, en fournissant <var>$1returnurl</var> et les champs appropriés.\n# Vérifier le <samp>status</samp> dans la réponse.\n#* Si vous avez reçu <samp>PASS</samp> ou <samp>FAIL</samp>, c’est terminé. L’opération a soit réussi, soit échoué.\n#* Si vous avez reçu <samp>UI</samp>, affichez les nouveaux champs à l’utilisateur et faites-les-lui soumettre. Puis envoyez-les à ce module avec <var>$1continue</var> et l’ensemble des champs appropriés, et recommencez l’étape 4.\n#* Si vous avez reçu <samp>REDIRECT</samp>, envoyez l’utilisateur vers la cible <samp>redirecttarget</samp> et attendez le retour vers <var>$1returnurl</var>. Puis envoyez à ce module avec <var>$1continue</var> et tous les champs passés à l’URL de retour, puis répétez l’étape 4.\n#* Si vous avez reçu <samp>RESTART</samp>, cela veut dire que l’authentification a fonctionné, mais nous n’avons pas de compte utilisateur lié. Vous pouvez traiter cela comme un <samp>UI</samp> ou un <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "Utiliser uniquement ces requêtes d’authentification, avec l’<samp>id</samp> renvoyé par <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> avec <kbd>amirequestsfor=$1</kbd> ou depuis une réponse précédente de ce module.",
+ "api-help-authmanagerhelper-request": "Utiliser cette requête d’authentification, avec l’<samp>id</samp> renvoyé par <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> avec <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "Format à utiliser pour retourner les messages.",
+ "api-help-authmanagerhelper-mergerequestfields": "Fusionner dans un tableau le champ information de toutes les demandes d'authentification.",
+ "api-help-authmanagerhelper-preservestate": "Conserver l'état d'une précédente tentative de connexion qui a échoué, si possible.",
+ "api-help-authmanagerhelper-returnurl": "Renvoyer l’URL pour les flux d’authentification tiers, qui doit être absolue. Cela ou <var>$1continue</var> est obligatoire.\n\nDès réception d’une réponse <samp>REDIRECT</samp>, vous ouvrirez typiquement un navigateur ou un affichage web vers l’URL <samp>redirecttarget</samp> spécifiée pour un flux d’authentification tiers. Une fois ceci terminé, le tiers renverra le navigateur ou l’affichage web vers cette URL. Vous devez extraire toute requête ou paramètre POST de l’URL et les passer comme une requête <var>$1continue</var> à ce module de l’API.",
+ "api-help-authmanagerhelper-continue": "Cette requête est une continuation après une précédente réponse <samp>UI</samp> ou <samp>REDIRECT</samp>. Cela ou <var>$1returnurl</var> est obligatoire.",
+ "api-help-authmanagerhelper-additional-params": "Ce module accepte des paramètres supplémentaires selon les requêtes d’authentification disponibles. Utiliser <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> avec <kbd>amirequestsfor=$1</kbd> (ou une réponse précédente de ce module, le cas échéant) pour déterminer les requêtes disponibles et les champs qu’elles utilisent.",
+ "apierror-allimages-redirect": "Utiliser <kbd>gaifilterredir=nonredirects</kbd> au lieu de <var>redirects</var> quand <kbd>allimages</kbd> est utilisé comme générateur.",
+ "apierror-allpages-generator-redirects": "Utiliser <kbd>gapfilterredir=nonredirects</kbd> au lieu de <var>redirects</var> quand <kbd>allpages</kbd> est utilisé comme un générateur.",
+ "apierror-appendnotsupported": "Impossible d’ajouter aux pages utilisant le modèle de contenu $1.",
+ "apierror-articleexists": "L’article que vous essayez de créer l’a déjà été.",
+ "apierror-assertbotfailed": "La vérification que l’utilisateur a le droit <code>bot</code> a échoué.",
+ "apierror-assertnameduserfailed": "La vérification que l’utilisateur est « $1 » a échoué.",
+ "apierror-assertuserfailed": "La vérification que l’utilisateur est connecté a échoué.",
+ "apierror-autoblocked": "Votre adresse IP a été bloquée automatiquement, parce qu’elle a été utilisée par un utilisateur bloqué.",
+ "apierror-badconfig-resulttoosmall": "La valeur de <code>$wgAPIMaxResultSize</code> sur ce wiki est trop petite pour contenir des informations de résultat basiques.",
+ "apierror-badcontinue": "Paramètre de continuation non valide. Vous devez passer la valeur d’origine renvoyée par la requête précédente.",
+ "apierror-baddiff": "La différence ne peut être récupérée. Une ou les deux révisions n’existent pas ou vous n’avez pas le droit de les voir.",
+ "apierror-baddiffto": "<var>$1diffto</var> doit être fixé à un nombre positif ou nul, <kbd>prev</kbd>, <kbd>next</kbd> ou <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "Le format demandé $1 n’est pas pris en charge pour le modèle de contenu $2.",
+ "apierror-badformat": "Le format demandé $1 n’est pas pris en charge pour le modèle de contenu $2 utilisé par $3.",
+ "apierror-badgenerator-notgenerator": "Le module <kbd>$1</kbd> ne peut pas être utilisé comme générateur.",
+ "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> inconnu.",
+ "apierror-badip": "Paramètre IP non valide.",
+ "apierror-badmd5": "Le hachage MD5 fourni n’était pas correct.",
+ "apierror-badmodule-badsubmodule": "Le module <kbd>$1</kbd> n’a pas de sous-module « $2 ».",
+ "apierror-badmodule-nosubmodules": "Le module <kbd>$1</kbd> n’a pas de sous-modules.",
+ "apierror-badparameter": "Valeur non valide pour le paramètre <var>$1</var>.",
+ "apierror-badquery": "Requête invalide.",
+ "apierror-badtimestamp": "Valeur non valide « $2 » pour le paramètre de référence horaire <var>$1</var>.",
+ "apierror-badtoken": "Jeton CSRF non valide.",
+ "apierror-badupload": "Le paramètre de téléversement de fichier <var>$1</var> n’est pas un téléversement de fichier ; assurez-vous d’utiliser <code>multipart/form-data</code> pour votre POST et d’inclure un nom de fichier dans l’entête <code>Content-Disposition</code>.",
+ "apierror-badurl": "Valeur « $2 » non valide pour le paramètre d’URL <var>$1</var>.",
+ "apierror-baduser": "Valeur « $2 » non valide pour le paramètre utilisateur <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "La séparation multi-valeur U+001F ne peut être utilisée que pour des paramètres multi-valeurs.",
+ "apierror-bad-watchlist-token": "Jeton de liste de suivi fourni non valide. Veuillez mettre un jeton valide dans [[Special:Preferences]].",
+ "apierror-blockedfrommail": "Vous avez été bloqué pour l’envoi de courriel.",
+ "apierror-blocked": "Vous avez été bloqué pour modifier.",
+ "apierror-botsnotsupported": "Cette interface n’est pas prise en charge pour les robots.",
+ "apierror-cannot-async-upload-file": "Les paramètres <var>async</var> et <var>file</var> ne peuvent pas être combinés. Si vous voulez un traitement asynchrone de votre fichier téléversé, importez-le d’abord dans la réserve (en utilisant le paramètre <var>stash</var>) puis publiez le fichier importé de façon asynchrone (en utilisant <var>filekey</var> et <var>async</var>).",
+ "apierror-cannotreauthenticate": "Cette action n’est pas disponible car votre identité ne peut pas être vérifiée.",
+ "apierror-cannotviewtitle": "Vous n’êtes pas autorisé à voir $1.",
+ "apierror-cantblock-email": "Vous n’avez pas le droit de bloquer des utilisateurs pour envoyer des courriels via ce wiki.",
+ "apierror-cantblock": "Vous n’avez pas le droit de bloquer des utilisateurs.",
+ "apierror-cantchangecontentmodel": "Vous n’avez pas le droit de modifier le modèle de contenu d’une page.",
+ "apierror-canthide": "Vous n’avez pas le droit de masquer les noms d’utilisateur du journal de blocages.",
+ "apierror-cantimport-upload": "Vous n’avez pas le droit d’importer des pages téléversées.",
+ "apierror-cantimport": "Vous n’avez pas le droit d’importer des pages.",
+ "apierror-cantoverwrite-sharedfile": "Le fichier cible existe dans un dépôt partagé et vous n’avez pas le droit de l’écraser.",
+ "apierror-cantsend": "Vous n’êtes pas connecté, vous n’avez pas d’adresse de courriel confirmée, ou vous n’êtes pas autorisé à envoyer des courriels aux autres utilisateurs, donc vous ne pouvez envoyer de courriel.",
+ "apierror-cantundelete": "Impossible d’annuler : les révisions demandées peuvent ne plus exister, ou avoir déjà été annulées.",
+ "apierror-changeauth-norequest": "Échec à la création de la requête de modification.",
+ "apierror-chunk-too-small": "La taille minimale d’un segment est de $1 {{PLURAL:$1|octet|octets}} pour les segments hors le dernier.",
+ "apierror-cidrtoobroad": "Les plages CIDR $1 plus large que /$2 ne sont pas acceptées.",
+ "apierror-compare-no-title": "Impossible de faire une transformation avant enregistrement sans titre. Essayez de spécifier <var>fromtitle</var> ou <var>totitle</var>.",
+ "apierror-compare-nosuchfromsection": "Il n'y a pas de section $1 dans le contenu 'from'.",
+ "apierror-compare-nosuchtosection": "Il n'y a pas de section $1 dans le contenu 'to'.",
+ "apierror-compare-relative-to-nothing": "Pas de révision 'depuis' pour <var>torelative</var> à laquelle se rapporter.",
+ "apierror-contentserializationexception": "Échec de sérialisation du contenu : $1",
+ "apierror-contenttoobig": "Le contenu que vous avez fourni dépasse la limite de taille d’un article, qui est de $1 {{PLURAL:$1|kilooctet|kilooctets}}.",
+ "apierror-copyuploadbaddomain": "Les téléversements par URL ne sont pas autorisés pour ce domaine.",
+ "apierror-copyuploadbadurl": "Les téléversements ne sont pas autorisés depuis cette URL.",
+ "apierror-create-titleexists": "Les titres existants ne peuvent pas être protégés avec <kbd>create</kbd>.",
+ "apierror-csp-report": "Erreur lors du traitement du rapport CSP: $1.",
+ "apierror-databaseerror": "[$1] erreur de requête de base de données.",
+ "apierror-deletedrevs-param-not-1-2": "Le paramètre <var>$1</var> ne peut pas être utilisé dans les modes 1 ou 2.",
+ "apierror-deletedrevs-param-not-3": "Le paramètre <var>$1</var> ne peut pas être utilisé dans le mode 3.",
+ "apierror-emptynewsection": "Il n'est pas possible de créer de nouvelles sections vides.",
+ "apierror-emptypage": "Il n'est pas possible de créer de nouvelles pages vides.",
+ "apierror-exceptioncaught": "[$1] Exception interceptée: $2",
+ "apierror-filedoesnotexist": "Le fichier n’existe pas.",
+ "apierror-fileexists-sharedrepo-perm": "Le fichier cible existe dans un dépôt partagé. Utilisr le paramètre <var>ignorewarnings</var> pour l’écraser.",
+ "apierror-filenopath": "Il n'est pas possible de récupérer le chemin du fichier local.",
+ "apierror-filetypecannotberotated": "Le type du fichier ne peut pas être tourné.",
+ "apierror-formatphp": "Cette réponse ne peut pas être représentée en utilisant <kbd>format=php</kbd>. Voir https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "Le titre pour <kbd>$1</kbd> doit être un fichier.",
+ "apierror-import-unknownerror": "Erreur inconnue lors de l'importation: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> ne peut pas dépasser $2 (fixé à $3) pour les robots ou les opérateurs système.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> ne peut pas dépasser $2 (fixé à $3) pour les utilisateurs.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> ne peut pas être inférieur à $2 (fixé à $3).",
+ "apierror-invalidcategory": "Le nom de la catégorie que vous avez entré n'est pas valide.",
+ "apierror-invalid-chunk": "Le déplacement plus le segment actuel dépassent la taille demandée du fichier.",
+ "apierror-invalidexpiry": "Heure d'expiration invalide \"$1\".",
+ "apierror-invalid-file-key": "Ne correspond pas à une clé valide de fichier.",
+ "apierror-invalidlang": "Code de langue non valide pour le paramètre <var>$1</var>.",
+ "apierror-invalidoldimage": "Le paramètre <var>oldimage</var> a un format non valide.",
+ "apierror-invalidparammix-cannotusewith": "Le paramètre <kbd>$1</kbd> ne peut pas être utilisé avec <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "Le paramètre <kbd>$1</kbd> ne peut être utilisé qu’avec <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> ne peut pas être combiné avec le paramètre <var>oldid</var>, <var>pageid</var> ou <var>page</var>. Veuillez utiliser <var>title</var> et <var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Les paramètres}} $1 ne peuvent pas être utilisés ensemble.",
+ "apierror-invalidsection": "Le paramètre <var>section</var> doit être un ID de section valide ou <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "Le hachage SHA1Base36 fourni n’est pas valide.",
+ "apierror-invalidsha1hash": "Le hachage SHA1 fourni n’est pas valide.",
+ "apierror-invalidtitle": "Mauvais titre « $1 ».",
+ "apierror-invalidurlparam": "Valeur non valide pour <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Nom d'utilisateur invalide \"$1\".",
+ "apierror-invaliduserid": "L'ID d'utilisateur <var>$1</var> n'est pas valide.",
+ "apierror-maxbytes": "Le paramètre <var>$1</var> ne peut excéder $2 octets{{PLURAL:$2||s}}",
+ "apierror-maxchars": "Le paramètre <var>$1</var> ne peut excéder $2 catactères{{PLURAL:$2||s}}",
+ "apierror-maxlag-generic": "Attente d’un serveur de base de données : $1 {{PLURAL:$1|seconde|secondes}} de délai.",
+ "apierror-maxlag": "Attente de $2 : $1 {{PLURAL:$1|seconed|secondes}} de délai.",
+ "apierror-mimesearchdisabled": "La recherche MIME est désactivée en mode Misère.",
+ "apierror-missingcontent-pageid": "Contenu manquant pour la page d’ID $1.",
+ "apierror-missingcontent-revid": "Contenu de la révision d’ID $1 manquant.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|Le paramètre|Au moins un des paramètres}} $1 est obligatoire.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|Le paramètre|Un des paramètres}} $1 est obligatoire.",
+ "apierror-missingparam": "Le paramètre <var>$1</var> doit être défini.",
+ "apierror-missingrev-pageid": "Aucune révision actuelle de la page d’ID $1.",
+ "apierror-missingrev-title": "Aucune révision actuelle de titre $1.",
+ "apierror-missingtitle-createonly": "Les titres manquants ne peuvent être protégés qu’avec <kbd>create</kbd>.",
+ "apierror-missingtitle": "La page que vous avez spécifié n’existe pas.",
+ "apierror-missingtitle-byname": "La page $1 n’existe pas.",
+ "apierror-moduledisabled": "Le module <kbd>$1</kbd> a été désactivé.",
+ "apierror-multival-only-one-of": "{{PLURAL:$3|Seul|Seul un des}} $2 est autorisé pour le paramètre <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> ne peut être utilisé qu’avec une seule page.",
+ "apierror-mustbeloggedin-changeauth": "Vous devez être connecté pour modifier les données d’authentification.",
+ "apierror-mustbeloggedin-generic": "Vous devez être connecté.",
+ "apierror-mustbeloggedin-linkaccounts": "Vous devez être connecté pour lier des comptes.",
+ "apierror-mustbeloggedin-removeauth": "Vous devez être connecté pour supprimer les données d’authentification.",
+ "apierror-mustbeloggedin-uploadstash": "La réserve de téléversement n’est disponible que pour les utilisateurs connectés.",
+ "apierror-mustbeloggedin": "Vous devez être connecté pour $1.",
+ "apierror-mustbeposted": "Le module <kbd>$1</kbd> nécessite une requête POST.",
+ "apierror-mustpostparams": "{{PLURAL:$2|Le paramètre suivant a été trouvé|Les paramètres suivants ont été trouvés}} dans la chaîne de requête, mais doit être dans le corps du POST : $1.",
+ "apierror-noapiwrite": "La modification de ce wiki via l’API est désactivée. Assurez-vous que la déclaration <code>$wgEnableWriteAPI=true;</code> st inclue dans le fichier <code>LocalSettings.php</code> du wiki.",
+ "apierror-nochanges": "Aucun changement n’a été demandé.",
+ "apierror-nodeleteablefile": "Pas de telle ancienne version du fichier.",
+ "apierror-no-direct-editing": "La modification directe via l’API n’est pas prise en charge pour le modèle de contenu $1 utilisé par $2.",
+ "apierror-noedit-anon": "Les utilisateurs anonymes ne peuvent pas modifier les pages.",
+ "apierror-noedit": "Vous n’avez pas le droit de modifier les pages.",
+ "apierror-noimageredirect-anon": "Les utilisateurs anonymes ne peut pas créer des redirections d’image.",
+ "apierror-noimageredirect": "Vous n’avez pas le droit de créer des redirections d’image.",
+ "apierror-nosuchlogid": "Il n’y a pas d’entrée du journal avec l’ID $1.",
+ "apierror-nosuchpageid": "Il n’y a pas de page avec l’ID $1.",
+ "apierror-nosuchrcid": "Il n’y a pas de modification récente avec l’ID $1.",
+ "apierror-nosuchrevid": "Il n’y a pas de révision d’ID $1.",
+ "apierror-nosuchsection": "Il n’y a pas de section $1.",
+ "apierror-nosuchsection-what": "Il ’y a pas de section $1 dans $2.",
+ "apierror-nosuchuserid": "Il n'y a pas d'utilisateur ayant l'ID $1.",
+ "apierror-notarget": "Vous n’avez pas spécifié une cible valide pour cette action.",
+ "apierror-notpatrollable": "La révision r$1 ne peut pas être patrouillée car elle est trop ancienne.",
+ "apierror-nouploadmodule": "Aucun module de téléversement défini.",
+ "apierror-offline": "Impossible de continuer du fait de problèmes de connexion au réseau. Assurez-vous d’avoir une connexion internet opérationnelle et réessayez.",
+ "apierror-opensearch-json-warnings": "Les avertissements ne peuvent pas être représentés dans le format JSON OpenSearch.",
+ "apierror-pagecannotexist": "L’espace de noms ne permet pas de pages réelles.",
+ "apierror-pagedeleted": "La page a été supprimée depuis que vous avez récupéré son horodatage.",
+ "apierror-pagelang-disabled": "Il n'est pas possible de modifier la langue d'une page sur ce wiki.",
+ "apierror-paramempty": "Le paramètre <var>$1</var> ne peut pas être vide.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> n’est pris en charge que pour le contenu wikitexte.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> n’est pris en charge que pour le contenu wikitexte. $1 utilise le modèle de contenu $2.",
+ "apierror-pastexpiry": "Le temps d’expiration « $1 » est dans le passé.",
+ "apierror-permissiondenied": "Vous n’avez pas le droit de $1.",
+ "apierror-permissiondenied-generic": "Autorisation refusée.",
+ "apierror-permissiondenied-patrolflag": "Vous avez besoin du droit <code>patrol</code> ou <code>patrolmarks</code> pour demander le drapeau patrouillé.",
+ "apierror-permissiondenied-unblock": "Vous n’avez pas le droit de débloquer les utilisateurs.",
+ "apierror-prefixsearchdisabled": "La recherche de préfixe est désactivée en mode misérable.",
+ "apierror-promised-nonwrite-api": "L’entête HTTP <code>Promise-Non-Write-API-Action</code> ne peut pas être envoyé aux modules de l’API en mode écriture.",
+ "apierror-protect-invalidaction": "Type de protection non valide « $1 ».",
+ "apierror-protect-invalidlevel": "Niveau de protection non valide « $1 ».",
+ "apierror-ratelimited": "Vous avez dépassé votre limite de débit. Veuillez attendre un peu et réessayer.",
+ "apierror-readapidenied": "Vous avez besoin du droit de lecture pour utiliser ce module.",
+ "apierror-readonly": "Ce wiki est actuellement en mode lecture seule.",
+ "apierror-reauthenticate": "Vous n’avez pas authentifié récemment cette session ; veuillez vous authentifier de nouveau.",
+ "apierror-redirect-appendonly": "Vous avez essayé de modifier en utilisant le mode de suivi de redirection, qui doit être utilisé en lien avec <kbd>section=new</kbd>, <var>prependtext</var>, ou <var>appendtext</var>.",
+ "apierror-revdel-mutuallyexclusive": "Le même champ ne peut pas être utilisé à la fois en <var>hide</var> et <var>show</var>.",
+ "apierror-revdel-needtarget": "Un titre cible est nécessaire pour ce type RevDel.",
+ "apierror-revdel-paramneeded": "Au moins une valeur est nécessaire pour <var>hide</var> ou <var>show</var>.",
+ "apierror-revisions-badid": "Pas de correction trouvée pour le paramètre <var>$1</var>.",
+ "apierror-revisions-norevids": "Le paramètre <var>revids</var> ne peut pas être utilisé avec les options de liste (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var>, et <var>$1end</var>).",
+ "apierror-revisions-singlepage": "<var>titles</var>, <var>pageids</var> ou un générateur a été utilisé pour fournir plusieurs pages, mais les paramètres <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> et <var>$1end</var> ne peuvent être utilisés que sur une seule page.",
+ "apierror-revwrongpage": "r$1 n'est pas une révision de $2.",
+ "apierror-searchdisabled": "La recherche <var>$1</var> est désactivée.",
+ "apierror-sectionreplacefailed": "Impossible de fusionner la section mise à jour.",
+ "apierror-sectionsnotsupported": "Les sections ne sont pas prises en charge pour le modèle de contenu $1.",
+ "apierror-sectionsnotsupported-what": "Les sections ne sont pas prises en charge par $1.",
+ "apierror-show": "Paramètre incorrect - des valeurs mutuellement exclusives ne peuvent pas être fournies.",
+ "apierror-siteinfo-includealldenied": "Impossible d’afficher toutes les informatiosn du serveur, sauf si <var>$wgShowHostNames</var> vaut vrai.",
+ "apierror-sizediffdisabled": "La différence de taille est désactivée dans le mode Miser.",
+ "apierror-spamdetected": "Votre modification a été refusée parce qu’elle contenait un fragment de pourriel : <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "Vous n'avez pas l'autorisation d'afficher les résultats de cette page spéciale.",
+ "apierror-stashedfilenotfound": "Impossible de trouver le fichier dans la réserve: $1.",
+ "apierror-stashedit-missingtext": "Pas de texte en réserve associé à la donnée de hachage.",
+ "apierror-stashfailed-complete": "Un téléversement par morceaux est déjà achevé, vérifiez l’état pour plus de détails.",
+ "apierror-stashfailed-nosession": "Aucune session de téléversement par morceaux avec cette clé.",
+ "apierror-stashfilestorage": "Impossible de mettre le téléversement en réserve: $1",
+ "apierror-stashinvalidfile": "Fichier de réserve invalide.",
+ "apierror-stashnosuchfilekey": "Filekey inconnue: $1.",
+ "apierror-stashpathinvalid": "La clé du fichier n'a pas le bon format ou est invalide: $1 .",
+ "apierror-stashwrongowner": "Erreur de propriétaire: $1",
+ "apierror-stashzerolength": "Fichier est de longueur nulle, et n'a pas pu être mis dans la réserve: $1.",
+ "apierror-systemblocked": "Vous avez été bloqué automatiquement par MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "Le développement du modèle n'est effectif que sur un contenu wikitext. $1 utilise le modèle de contenu $2.",
+ "apierror-timeout": "Le serveur n’a pas répondu dans le délai imparti.",
+ "apierror-toofewexpiries": "$1 {{PLURAL:$1|horodatage d’expiration a été fourni|horodatages d’expiration ont été fournis}} alors que $2 {{PLURAL:$2|était attendu|étaient attendus}}.",
+ "apierror-unknownaction": "L'action spécifiée, <kbd>$1</kbd>, n'est pas reconnue.",
+ "apierror-unknownerror-editpage": "Erreur inconnue EditPage: $1.",
+ "apierror-unknownerror-nocode": "Erreur inconnue.",
+ "apierror-unknownerror": "Erreur inconnue : « $1 ».",
+ "apierror-unknownformat": "Format inconnu \"$1\".",
+ "apierror-unrecognizedparams": "Paramètre{{PLURAL:$2||s}} non reconnu{{PLURAL:$2||s}} : $1.",
+ "apierror-unrecognizedvalue": "Valeur non reconnue du paramètre <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "Le dépôt local des fichiers ne prend pas en charge la recherche de toutes les images.",
+ "apierror-upload-filekeyneeded": "Un <var>filekey</var> est nécessaire si le <var>décalage</var> est non nul.",
+ "apierror-upload-filekeynotallowed": "Pas possible de fournir une <var>filekey</var> si <var>offset</var> vaut 0.",
+ "apierror-upload-inprogress": "Le téléversement à partir de la réserve est déjà en cours.",
+ "apierror-upload-missingresult": "Pas de résultat dans les données d'état.",
+ "apierror-urlparamnormal": "Impossible de normaliser les paramètres de l'image pour $1.",
+ "apierror-writeapidenied": "Vous n'êtes pas autorisé à modifier ce wiki au travers de l'API.",
+ "apiwarn-alldeletedrevisions-performance": "Pour de meilleures performances lors de la génération des titres, mettre <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Impossible d'analyser <var>$1urlparam</var> pour $2. En utilisant seulement la largeur et la hauteur.",
+ "apiwarn-badutf8": "La valeur passée pour <var>$1</var> contient des données non valides ou non normalisées. Les données textuelles doivent être de l’Unicode valide normalisé en NFC sans caractères de contrôle c0 autres que HT (\\t), LF (\\n) et CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "Vérifier que les symboles tels que \"+\" dans le jeton sont correctement codés avec des pourcents dans l'URL.",
+ "apiwarn-compare-nocontentmodel": "Aucun modèle de contenu n’a pu être déterminé, $1 est supposé.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> est devenu désuet. Veuillez utiliser <kbd>prop=deletedrevisions</kbd> ou <kbd>list=alldeletedrevisions</kbd> à la place.",
+ "apiwarn-deprecation-expandtemplates-prop": "Comme aucune valeur n’a été spécifiée pour le paramètre <var>prop</var>, un format patrimonial a été utilisé pour la sortie. Ce format est désuet et, dans le futur, une valeur par défaut sera fixée pour le paramètre <var>prop</var>, provoquant ainsi l’utilisation systématique du nouveau format.",
+ "apiwarn-deprecation-httpsexpected": "HTTP est utilisé alors que HTTPS est attendu.",
+ "apiwarn-deprecation-login-botpw": "La connexion au compte principal via <kbd>action=login</kbd> est désuète et peut cesser de fonctionner sans avertissement. Pour continuer à vous connecter avec <kbd>action=login</kbd>, voyez [[Special:BotPasswords]]. Pour continuer à utiliser la connexion au compte principal en toute sécurité, voyez <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "La connexion au compte principal via <kbd>action=login</kbd> est désuète et peut cesser de fonctionner sans avertissement. Pour vous connecter en toute sécurité, voyez <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "La récupération d’un jeton via <kbd>action=login</kbd> est désuète. Utilisez <kbd>action=query&meta=tokens&type=login</kbd> à la place.",
+ "apiwarn-deprecation-parameter": "Le paramètre <var>$1</var> est désuet.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> est désuet depuis MédiaWiki 1.28. Utilisez <kbd>prop=headhtml</kbd> lors de la création de nouveaux documents HTML, ou <kbd>prop=modules|jsconfigvars</kbd> lors de la mise à jour d’un document côté client.",
+ "apiwarn-deprecation-purge-get": "L’utilisation de <kbd>action=purge</kbd> via un GET est désuète. Utiliser POST à la place.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> est désuet. Veuillez utiliser <kbd>$2</kbd> à la place.",
+ "apiwarn-difftohidden": "Impossible de faire un diff avec r$1 : le contenu est masqué.",
+ "apiwarn-errorprinterfailed": "Erreur échec imprimante. Nouvel essai sans paramètres.",
+ "apiwarn-errorprinterfailed-ex": "Erreur d’échec de l’impression (réessayera sans paramètres) : $1",
+ "apiwarn-invalidcategory": "« $1 » n'est pas une catégorie.",
+ "apiwarn-invalidtitle": "« $1 » n’est pas un titre valide.",
+ "apiwarn-invalidxmlstylesheetext": "Une feuille de style doit avoir une extension <code>.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "Feuille de style spécifiée non valide ou inexistante.",
+ "apiwarn-invalidxmlstylesheetns": "La feuille de style devrait être dans l’espace de noms {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "La propriété <kbd>modules</kbd> a été définie mais pas <kbd>jsconfigvars</kbd> ni <kbd>encodedjsconfigvars</kbd>. Les variables de configuration sont nécessaires pour une utilisation correcte du module.",
+ "apiwarn-notfile": "« $1 » n'est pas un fichier.",
+ "apiwarn-nothumb-noimagehandler": "Impossible de créer la vignette car $1 n’a pas de gestionnaire d’image associé.",
+ "apiwarn-parse-nocontentmodel": "Ni <var>title</var> ni <var>contentmodel</var> n’ont été fournis, $1 est supposé.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var> utilisé sans <var>text</var>, et les propriétés de la page analysée ont été demandées. Vouliez-vous utiliser <var>oldid</var> au lieu de <var>revid</var> ?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> utilisé sans <var>text</var>, et les propriétés de page analysées sont nécessaires. Voulez-vous dire que vous voulez utiliser <var>page</var> à la place de <var>title</var> ?",
+ "apiwarn-redirectsandrevids": "La résolution de la redirection ne peut pas être utilisée avec le paramètre <var>revids</var>. Toutes les redirections vers lesquelles pointent <var>revids</var> n’ont pas été résolues.",
+ "apiwarn-tokennotallowed": "L'action « $1 » n'est pas autorisée pour l'utilisateur actuel.",
+ "apiwarn-tokens-origin": "Les jetons ne peuvent pas être obtenus quand la politique de même origine n’est pas appliquée.",
+ "apiwarn-toomanyvalues": "Trop de valeurs fournies pour le paramètre <var>$1</var>. La limite est $2.",
+ "apiwarn-truncatedresult": "Ce résultat a été tronqué parce que sinon, il dépasserait la limite de $1 octets.",
+ "apiwarn-unclearnowtimestamp": "Passer « $2 » comme paramètre d’horodatage <var>$1</var> a été rendu désuet. Si, pour une raison quelconque, vous avez besoin de spécifier explicitement l’heure courante sans la recalculer du côté client, utilisez <kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valeur non reconnue|Valeurs non reconnues}} pour le paramètre <var>$1</var> : $2.",
+ "apiwarn-unsupportedarray": "Le paramètre <var>$1</var> utilise une syntaxe PHP de tableau non prise en charge.",
+ "apiwarn-urlparamwidth": "Valeur de la largeur définie dans <var>$1urlparam</var> ($2) ignorée en faveur de la largeur calculée à partir de <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
+ "apiwarn-validationfailed-badchars": "caractères non valides dans la clé (<code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>et <code>-</code> sont les seuls autorisés).",
+ "apiwarn-validationfailed-badpref": "pas une préférence valide.",
+ "apiwarn-validationfailed-cannotset": "ne peut pas être initialisé par ce module.",
+ "apiwarn-validationfailed-keytoolong": "clé trop longue (au plus $1 octets).",
+ "apiwarn-validationfailed": "Erreur de validation pour <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Avertissement de sécurité</strong>: <var>$wgDebugAPI</var> est activé.",
+ "api-feed-error-title": "Erreur ($1)",
+ "api-usage-docref": "Voir $1 concernant l'utilisation de l'API.",
+ "api-usage-mailinglist-ref": "S’abonner à la liste de diffusion mediawiki-api-announce sur &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; pour les signalisations d’obsolescence de l’API ou de modifications en rupture.",
+ "api-exception-trace": "$1 à $2($3)\n$4",
+ "api-credits-header": "Remerciements",
+ "api-credits": "Développeurs de l’API :\n* Roan Kattouw (développeur en chef Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (créateur, développeur en chef Sept. 2006–Sept. 2007)\n* Brad Jorsch (développeur en chef depuis 2013)\n\nVeuillez envoyer vos commentaires, suggestions et questions à mediawiki-api@lists.wikimedia.org\nou remplir un rapport de bogue sur https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/frc.json b/www/wiki/includes/api/i18n/frc.json
new file mode 100644
index 00000000..e8d706c1
--- /dev/null
+++ b/www/wiki/includes/api/i18n/frc.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hangmanwa7id",
+ "Macofe"
+ ]
+ },
+ "apihelp-block-summary": "Bloquer un useur.",
+ "apihelp-createaccount-param-name": "Nom d'useur.",
+ "apihelp-createaccount-param-password": "Mot de passe (ignoré si <var>$1mailpassword</var> est défini).",
+ "apihelp-createaccount-param-domain": "Domaine pour l’authentification externe (optional).",
+ "apihelp-delete-summary": "Effacer une page.",
+ "apihelp-delete-param-title": "Titre de la page que tu veux effacer. Impossible de l’user avec $1pageid.",
+ "apihelp-delete-example-simple": "Effacer <kbd>Main Page</kbd>.",
+ "apihelp-emailuser-summary": "Emailer un useur.",
+ "apihelp-expandtemplates-param-title": "Titre de la page.",
+ "apihelp-login-param-name": "Nom d’useur.",
+ "apihelp-login-param-password": "Mot de passe.",
+ "apihelp-login-param-domain": "Domaine (optional)."
+}
diff --git a/www/wiki/includes/api/i18n/fy.json b/www/wiki/includes/api/i18n/fy.json
new file mode 100644
index 00000000..05482cfe
--- /dev/null
+++ b/www/wiki/includes/api/i18n/fy.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin0van0der0vliet"
+ ]
+ },
+ "apihelp-createaccount-param-name": "Brûkersnamme.",
+ "apihelp-login-param-name": "Brûkersnamme.",
+ "apihelp-login-param-password": "Wachtwurd.",
+ "apihelp-userrights-param-user": "Brûkersnamme.",
+ "api-help-param-default": "Standert: $1",
+ "api-help-param-default-empty": "Standert: <span class=\"apihelp-empty\">(leech)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(gjin beskriuwing)</span>",
+ "api-help-examples": "{{PLURAL:$1|Foarbyld|Foarbylden}}:"
+}
diff --git a/www/wiki/includes/api/i18n/gl.json b/www/wiki/includes/api/i18n/gl.json
new file mode 100644
index 00000000..1f2b028b
--- /dev/null
+++ b/www/wiki/includes/api/i18n/gl.json
@@ -0,0 +1,1712 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elisardojm",
+ "Agremon",
+ "Chairego apc",
+ "VaiPolaSombra",
+ "Banjo",
+ "Fisterraeomar",
+ "Toliño",
+ "Amire80",
+ "Macofe",
+ "Hamilton Abreu",
+ "Umherirrender",
+ "Fitoschido",
+ "Athena in Wonderland"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentación]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionando, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Erros e avisos]].\n\n<strong>Test:</strong> Para facilitar as probas das peticións da API, consulte [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Que acción se realizará.",
+ "apihelp-main-param-format": "O formato de saída.",
+ "apihelp-main-param-maxlag": "O retardo máximo pode usarse cando MediaWiki está instalada nun cluster de base de datos replicadas. Para gardar accións que causen calquera retardo máis de replicación do sitio, este parámetro pode facer que o cliente espere ata que o retardo de replicación sexa menor que o valor especificado. No caso de retardo excesivo, é devolto o código de erro <samp>maxlag</samp> cunha mensaxe como <samp>esperando por $host: $lag segundos de retardo</samp>.<br />Para máis información, ver [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]].",
+ "apihelp-main-param-smaxage": "Fixar a cabeceira HTTP de control de caché <code>s-maxage</code> a esos segundos. Os erros nunca se gardan na caché.",
+ "apihelp-main-param-maxage": "Fixar a cabeceira HTTP de control de caché <code>max-age</code> a esos segundos. Os erros nunca se gardan na caché.",
+ "apihelp-main-param-assert": "Verificar se o usuario está conectado como <kbd>usuario</kbd> ou ten a marca de <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Verificar que o usuario actual é o usuario nomeado.",
+ "apihelp-main-param-requestid": "Calquera valor dado aquí será incluído na resposta. Pode usarse para distingir peticións.",
+ "apihelp-main-param-servedby": "Inclúa o nome do servidor que servía a solicitude nos resultados.",
+ "apihelp-main-param-curtimestamp": "Incluir a marca de tempo actual no resultado.",
+ "apihelp-main-param-responselanginfo": "Incluír no resultado as linguas usada para <var>uselang</var> e <var>errorlang</var>.",
+ "apihelp-main-param-origin": "Cando se accede á API usando unha petición AJAX entre-dominios (CORS), inicializar o parámetro co dominio orixe. Isto debe incluírse en calquera petición pre-flight, e polo tanto debe ser parte da petición URI (non do corpo POST). Para peticións autenticadas, isto debe coincidir exactamente cunha das orixes na cabeceira <code>Origin</code>, polo que ten que ser fixado a algo como <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parámetro non coincide coa cabeceira <code>Origin</code>, devolverase unha resposta 403. Se este parámetro coincide coa cabeceira <code>Origin</code> e a orixe está na lista branca, as cabeceiras <code>Access-Control-Allow-Origin</code> e <code>Access-Control-Allow-Credentials</code> serán fixadas.\n\nPara peticións non autenticadas, especifique o valor <kbd>*</kbd>. Isto fará que se fixe a cabeceira <code>Access-Control-Allow-Origin</code>, pero <code>Access-Control-Allow-Credentials</code> será <code>false</code> e todos os datos específicos do usuario serán ocultados.",
+ "apihelp-main-param-uselang": "Linga a usar para a tradución de mensaxes. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> con <kbd>siprop=languages</kbd> devolve unha lista de códigos de lingua, ou especificando <kbd>user</kbd> coa preferencia de lingua do usuario actual, ou especificando <kbd>content</kbd> para usar a lingua do contido desta wiki.",
+ "apihelp-main-param-errorformat": "Formato a usar para a saída do texto de aviso e de erroː\n; plaintext: texto wiki sen as etiquetas HTML e coas entidades substituídas.\n; wikitext: texto wiki sen analizar.\n; html: HTML.\n; raw: Clave de mensaxe e parámetros.\n; none: Sen saída de texto, só os códigos de erro.\n; bc: Formato utilizado antes de MediaWiki 1.29. <var>errorlang</var> e <var>errorsuselocal</var> non se teñen en conta.",
+ "apihelp-main-param-errorlang": "Lingua usada para advertencias e erros. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> con <kbd>siprop=languages</kbd> devolve unha lista de códigos de lingua. Pode especificar <kbd>content</kbd> para utilizar a lingua do contido deste wiki ou <kbd>uselang</kbd> para utilizar o mesmo valor que o do parámetro <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "Se se indica, os textos de erro empregarán mensaxes adaptadas á lingua do espazo de nomes {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "Bloquear un usuario.",
+ "apihelp-block-param-user": "Nome de usuario, dirección ou rango de IPs que quere bloquear. Non pode usarse xunto con <var>$1userid</var>",
+ "apihelp-block-param-userid": "Identificador de usuario a bloquear. Non pode usarse xunto con <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Tempo de caducidade. Pode ser relativo (p. ex.<kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absoluto (p. ex. 2014-09-18T12:34:56Z</kbd>). Se se pon kbd>infinite</kbd>, <kbd>indefinite</kbd>, ou <kbd>never</kbd>, o bloqueo nunca caducará.",
+ "apihelp-block-param-reason": "Motivo para o bloqueo.",
+ "apihelp-block-param-anononly": "Bloquear só usuarios anónimos (é dicir, desactivar edicións anónimas desta dirección IP).",
+ "apihelp-block-param-nocreate": "Previr a creación de contas.",
+ "apihelp-block-param-autoblock": "Bloquear automaticamente o último enderezo IP utilizado, e calquera outro enderezo desde o que intente conectarse.",
+ "apihelp-block-param-noemail": "Impide que o usuario envíe correos electrónicos a través da wiki. (Require o permiso <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Ocultar o nome de usuario do rexistro de bloqueos. (Precisa do permiso <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Permitir que o usuario edite a súa propia páxina de conversa (depende de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Se o usuario xa está bloqueado, sobreescribir o bloqueo existente.",
+ "apihelp-block-param-watchuser": "Vixiar a páxina de usuario ou direccións IP e a de conversa deste usuario",
+ "apihelp-block-param-tags": "Cambiar as etiquetas a aplicar á entrada no rexistro de bloqueos.",
+ "apihelp-block-example-ip-simple": "Bloquear dirección IP <kbd>192.0.2.5</kbd> durante tres días coa razón <kbd>Primeiro aviso</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquear indefinidamente ó usuario <kbd>Vandal</kbd> coa razón <kbd>Vandalism</kbd>, e impedir a creación de novas contas e envío de correos electrónicos.",
+ "apihelp-changeauthenticationdata-summary": "Cambiar os datos de autenticación do usuario actual.",
+ "apihelp-changeauthenticationdata-example-password": "Intento de cambiar o contrasinal do usuario actua a <kbd>ExemploContrasinal</kbd>.",
+ "apihelp-checktoken-summary": "Verificar a validez dun identificador de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo de identificador a probar.",
+ "apihelp-checktoken-param-token": "Símbolo a testar",
+ "apihelp-checktoken-param-maxtokenage": "Tempo máximo autorizado para o identificador, en segundos.",
+ "apihelp-checktoken-example-simple": "Verificar a validez de un identificador <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
+ "apihelp-clearhasmsg-example-1": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
+ "apihelp-clientlogin-summary": "Conectarse á wiki usando o fluxo interactivo.",
+ "apihelp-clientlogin-example-login": "Comezar o proceso de conexión á wiki como o usuario <kbd>Exemplo</kbd> con contrasinal <kbd>ExemploContrasinal</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continuar a conexión despois dunha resposta de <samp>UI</samp> para unha autenticación de dous factores, proporcionando un <var>OATHToken</var> con valor <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Obter as diferencias entre dúas páxinas.",
+ "apihelp-compare-extended-description": "Debe indicar un número de revisión, un título de páxina, ou un ID de páxina tanto para \"from\" como para \"to\".",
+ "apihelp-compare-param-fromtitle": "Primeiro título para comparar.",
+ "apihelp-compare-param-fromid": "Identificador da primeira páxina a comparar.",
+ "apihelp-compare-param-fromrev": "Primeira revisión a comparar.",
+ "apihelp-compare-param-fromtext": "Uso este texto en vez do contido da revisión especificada por <var>fromtitle</var>, <var>fromid</var> ou <var>fromrev</var>.",
+ "apihelp-compare-param-totitle": "Segundo título para comparar.",
+ "apihelp-compare-param-toid": "Identificador da segunda páxina a comparar.",
+ "apihelp-compare-param-torev": "Segunda revisión a comparar.",
+ "apihelp-compare-param-prop": "Que información obter.",
+ "apihelp-compare-paramvalue-prop-diff": "O diff HTML.",
+ "apihelp-compare-paramvalue-prop-diffsize": "O tamaño do diff HTML, en bytes.",
+ "apihelp-compare-paramvalue-prop-size": "Tamaño das revisións 'desde' e 'a'.",
+ "apihelp-compare-example-1": "Mostrar diferencias entre a revisión 1 e a 2",
+ "apihelp-createaccount-summary": "Crear unha nova conta de usuario.",
+ "apihelp-createaccount-param-preservestate": "SE <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> devolve o valor \"certo\" para <samp>hasprimarypreservedstate</samp>, as consultas marcadas como <samp>primary-required</samp> deben ser omitidas. Se devolve un valor non baleiro para <samp>preservedusername</samp>, ese nome de usuario debe usarse para o parámetro <var>username</var>.",
+ "apihelp-createaccount-example-create": "Comezar o proceso de crear un usuario <kbd>Exemplo</kbd> con contrasinal <kbd>ExemploContrasinal</kbd>.",
+ "apihelp-createaccount-param-name": "Nome de usuario.",
+ "apihelp-createaccount-param-password": "Contrasinal (ignorado se <var>$1mailpassword</var> está activo)",
+ "apihelp-createaccount-param-domain": "Dominio para autenticación externa (opcional)",
+ "apihelp-createaccount-param-token": "Símbolo de creación de conta obtido á primeira.",
+ "apihelp-createaccount-param-email": "Enderezo de correo eletrónico do usuario (opcional).",
+ "apihelp-createaccount-param-realname": "Nome real do usuario (opcional).",
+ "apihelp-createaccount-param-mailpassword": "Se se establece calquera valor, enviarase un contrasinal aleatorio ao usuario.",
+ "apihelp-createaccount-param-reason": "Razón opcional de creación da conta para gardar nos rexistros.",
+ "apihelp-createaccount-param-language": "Código de lingua para usar como defecto polo usuario (de xeito opcional, usarase a lingua por defecto)",
+ "apihelp-createaccount-example-pass": "Crear usuario <kbd>testuser</kbd> con contrasinal <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Crear usuario <kbd>testmailuser</kbd>\"testmailuser\" e enviar por correo electrónico un contrasinal xenerado de forma aleatoria.",
+ "apihelp-cspreport-summary": "Usado polos navegadores para informar de violacións da política de confidencialidade de contido. Este módulo non debe se usado nunca, excepto cando é usado automaticamente por un navegador web compatible con CSP.",
+ "apihelp-cspreport-param-reportonly": "Marcar un informe dunha política de vixiancia e non unha política esixida",
+ "apihelp-cspreport-param-source": "Que xerou a cabeceira CSP que lanzou este informe",
+ "apihelp-delete-summary": "Borrar a páxina.",
+ "apihelp-delete-param-title": "Título da páxina a eliminar. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Identificador da páxina a eliminar. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Razón para o borrado. Se non se indica, usarase unha razón xenerada automaticamente.",
+ "apihelp-delete-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de borrado.",
+ "apihelp-delete-param-watch": "Engadir esta páxina á lista de vixilancia do usuario actual.",
+ "apihelp-delete-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-delete-param-unwatch": "Eliminar esta páxina da lista de vixilancia do usuario actual.",
+ "apihelp-delete-param-oldimage": "Nome da imaxe antiga a borrar como se proporciona en [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Borrar <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> coa razón <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Este módulo foi desactivado.",
+ "apihelp-edit-summary": "Crear e editar páxinas.",
+ "apihelp-edit-param-title": "Título da páxina que quere editar. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Identificador da páxina que quere editar. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-edit-param-section": "Número de selección. O <kbd>0</kbd> é para a sección superior, <kbd>new</kbd> para unha sección nova.",
+ "apihelp-edit-param-sectiontitle": "Título para unha nova sección.",
+ "apihelp-edit-param-text": "Contido da páxina.",
+ "apihelp-edit-param-summary": "Resumo de edición. Tamén título de sección cando $1section=new e $1sectiontitle non está definido.",
+ "apihelp-edit-param-tags": "Cambio de etiquetas a aplicar á revisión.",
+ "apihelp-edit-param-minor": "Edición pequena.",
+ "apihelp-edit-param-notminor": "Edición non pequena.",
+ "apihelp-edit-param-bot": "Marcar esta edición como de bot.",
+ "apihelp-edit-param-basetimestamp": "Selo de tempo da revisión de base, usado para detectar conflitos de edición. Pode obterse con [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Selo de tempo do comezo do proceso de edición, usado para detectar conflitos de edición. Pode obterse un valor axeitado usando <var>[[Special:ApiHelp/main|curtimestamp]]</var> cando se comeza o proceso de edición (p.ex. cando se carga o contido da páxina a editar).",
+ "apihelp-edit-param-recreate": "Ignorar todos os erros da páxina mentres está a ser borrada.",
+ "apihelp-edit-param-createonly": "Non editar a páxina se xa existe.",
+ "apihelp-edit-param-nocreate": "Amosar un mensaxe de erro se a páxina non existe",
+ "apihelp-edit-param-watch": "Engadir esta páxina á lista de vixilancia do usuario actual.",
+ "apihelp-edit-param-unwatch": "Eliminar esta páxina da lista de vixilancia do usuario actual.",
+ "apihelp-edit-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-edit-param-md5": "A función hash MD5 do parámetro $1text, ou dos parámetros $1prependtext e $1appendtext concatenados. Se está definida, non se fará a edición ata que a función hash sexa correcta.",
+ "apihelp-edit-param-prependtext": "Engadir este texto ao comezo da páxina. Sobreescribirase $1text.",
+ "apihelp-edit-param-appendtext": "Engadir este texto no final da páxina. Ignorar $1text.\n\nUse $1section=new para engadir unha nova sección, máis que este parámetro.",
+ "apihelp-edit-param-undo": "Desfacer esta revisión. Ignorar $1text, $1prependtext e $1appendtext.",
+ "apihelp-edit-param-undoafter": "Desfacer tódalas revisións dende $1undo ata esta. Se non está definido, só desfacer unha revisión.",
+ "apihelp-edit-param-redirect": "Resolver redireccións automaticamente",
+ "apihelp-edit-param-contentformat": "Formato de serialización de contido utilizado para o texto de entrada.",
+ "apihelp-edit-param-contentmodel": "Modelo de contido para o novo contido.",
+ "apihelp-edit-param-token": "O identificador debería enviarse empre como o último parámetro, ou polo menos despois do parámetro $1text.",
+ "apihelp-edit-example-edit": "Editar a páxina",
+ "apihelp-edit-example-prepend": "Antepor <kbd>_&#95;NOTOC_&#95;</kbd> a unha páxina.",
+ "apihelp-edit-example-undo": "Desfacer revisións 13579 a 13585 con resumo automático.",
+ "apihelp-emailuser-summary": "Enviar un correo electrónico a un usuario.",
+ "apihelp-emailuser-param-target": "Usuario ó que lle mandar correo electrónico.",
+ "apihelp-emailuser-param-subject": "Asunto.",
+ "apihelp-emailuser-param-text": "Corpo do correo.",
+ "apihelp-emailuser-param-ccme": "Enviarme unha copia deste correo.",
+ "apihelp-emailuser-example-email": "Enviar un correo electrónico ó usuario <kbd>WikiSysop</kbd> co texto <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Expandir tódolos modelos dentro do wikitexto.",
+ "apihelp-expandtemplates-param-title": "Título da páxina.",
+ "apihelp-expandtemplates-param-text": "Sintaxis wiki a converter.",
+ "apihelp-expandtemplates-param-revid": "ID de revisión, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variables similares.",
+ "apihelp-expandtemplates-param-prop": "Pezas de información a retornar.\n\nTeña en conta que se non se selecciona ningún valor o resultado conterá o texto wiki, pero a saída estará nun formato obsoleto.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "O wikitexto expandido.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Calquera categoría presente na entrada que non estea representada na saída do texto wiki.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Propiedades da páxina definidas por palabras máxicas expandidas no texto wiki.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Definir se a saída é volátil e se non debe usarse noutra parte da páxina.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Tempo máximo a partir do cal os cachés do resultado deben invalidarse.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Calquera módulo ResourceLoader que as funcións de análise teñan solicitado engadir á saída. <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> deben ser solicitadas xunto con <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina como unha cadea de texto JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "A árbore de análise XML da entrada.",
+ "apihelp-expandtemplates-param-includecomments": "Cando queria incluír comentarios HTML na saída.",
+ "apihelp-expandtemplates-param-generatexml": "Xenerar árbore de análise XML (reemprazado por $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expandir o wikitexto <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Devolve a lista de contribucións dun usuario.",
+ "apihelp-feedcontributions-param-feedformat": "O formato de alimentación.",
+ "apihelp-feedcontributions-param-user": "Para que usuarios recuperar as contribucións.",
+ "apihelp-feedcontributions-param-namespace": "Que espazo de nomes filtrar polas contribucións.",
+ "apihelp-feedcontributions-param-year": "Desde o ano (e anteriores).",
+ "apihelp-feedcontributions-param-month": "Desde o mes de (e anteriores).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrar as contribucións que teñan estas etiquetas.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostrar só as contribuciones eliminadas.",
+ "apihelp-feedcontributions-param-toponly": "Mostrar só as edicións que que son as ultimas revisións.",
+ "apihelp-feedcontributions-param-newonly": "Mostrar só as edicións que crearon páxinas.",
+ "apihelp-feedcontributions-param-hideminor": "Ocultar edicións menores.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostrar diferenza de tamaño entre edicións.",
+ "apihelp-feedcontributions-example-simple": "Mostrar as contribucións do usuario <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Devolve un ficheiro de cambios recentes.",
+ "apihelp-feedrecentchanges-param-feedformat": "O formato da saída.",
+ "apihelp-feedrecentchanges-param-namespace": "Espazo de nomes ó que limitar os resultados.",
+ "apihelp-feedrecentchanges-param-invert": "Tódolos nomes de espazos agás o seleccionado",
+ "apihelp-feedrecentchanges-param-associated": "Incluir o espazo de nomes asociado (conversa ou principal).",
+ "apihelp-feedrecentchanges-param-days": "Días a limitar os resultados",
+ "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados a visualizar.",
+ "apihelp-feedrecentchanges-param-from": "Mostrar modificacións desde entón.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ocultar cambios feitos por bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ocultar os cambios realizados por usuarios anónimos.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ocultar os cambios realizados por usuarios rexistrados.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar os cambios patrullados.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar os cambios realizados polo usuario actual.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Agochar os cambios de pertenza á categoría.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiqueta.",
+ "apihelp-feedrecentchanges-param-target": "Mostrar só os cambios nas páxinas ligadas a esta.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Mostrar os cambios nas páxinas ligadas coa páxina seleccionada.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar os cambios recentes",
+ "apihelp-feedrecentchanges-example-30days": "Mostrar os cambios recentes limitados a 30 días",
+ "apihelp-feedwatchlist-summary": "Devolve o fluxo dunha lista de vixiancia.",
+ "apihelp-feedwatchlist-param-feedformat": "O formato da saída.",
+ "apihelp-feedwatchlist-param-hours": "Lista as páxinas modificadas desde estas horas ata agora.",
+ "apihelp-feedwatchlist-param-linktosections": "Ligar directamente ás seccións modificadas se é posible.",
+ "apihelp-feedwatchlist-example-default": "Mostar o fluxo da lista de vixiancia.",
+ "apihelp-feedwatchlist-example-all6hrs": "Amosar tódolos cambios feitos ás páxinas vixiadas nas últimas 6 horas.",
+ "apihelp-filerevert-summary": "Revertir o ficheiro a unha versión anterior.",
+ "apihelp-filerevert-param-filename": "Nome de ficheiro final, sen o prefixo Ficheiro:",
+ "apihelp-filerevert-param-comment": "Comentario de carga.",
+ "apihelp-filerevert-param-archivename": "Nome de ficheiro da revisión á que reverter.",
+ "apihelp-filerevert-example-revert": "Reverter <kbd>Wiki.png</kbd> á versión do <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Mostrar axuda para os módulos indicados.",
+ "apihelp-help-param-modules": "Módulos para mostar axuda (valores dos parámetros <var>acción</var> e <var>formato</var>, ou <kbd>principal</kbd>). Pode especificar submódulos con un <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Incluír axuda para os submódulos do módulo nomeado.",
+ "apihelp-help-param-recursivesubmodules": "Incluír axuda para os submódulos de forma recursiva.",
+ "apihelp-help-param-helpformat": "Formato de saída da axuda.",
+ "apihelp-help-param-wrap": "Incluír a saída nunha estrutura de resposta API estándar.",
+ "apihelp-help-param-toc": "Incluír unha táboa de contidos na saída por HTML",
+ "apihelp-help-example-main": "Axuda para o módulo principal",
+ "apihelp-help-example-submodules": "Axuda para <kbd>action=query</kbd> e todos os seus submódulos.",
+ "apihelp-help-example-recursive": "Toda a axuda nunha páxina",
+ "apihelp-help-example-help": "Axuda do módulo de axuda en si",
+ "apihelp-help-example-query": "Axuda para dous submódulos de consulta.",
+ "apihelp-imagerotate-summary": "Xirar unha ou máis imaxes.",
+ "apihelp-imagerotate-param-rotation": "Graos a rotar a imaxe no sentido do reloxio.",
+ "apihelp-imagerotate-param-tags": "Etiquetas aplicar á entrada no rexistro de subas.",
+ "apihelp-imagerotate-example-simple": "Rotar <kbd>File:Example.png</kbd> <kbd>90</kbd> graos.",
+ "apihelp-imagerotate-example-generator": "Rotar tódalas imaxes en <kbd>Category:Flip</kbd> <kbd>180</kbd> graos",
+ "apihelp-import-summary": "Importar unha páxina doutra wiki, ou dun ficheiro XML.",
+ "apihelp-import-extended-description": "Decátese de que o POST HTTP debe facerse como unha carga de ficheiro (p. ex. usando multipart/form-data) cando se envíe un ficheiro para o parámetro <var>xml</var>.",
+ "apihelp-import-param-summary": "Resume de importación de entrada no rexistro.",
+ "apihelp-import-param-xml": "Subido ficheiro XML.",
+ "apihelp-import-param-interwikisource": "Para importacións interwiki: wiki da que importar.",
+ "apihelp-import-param-interwikipage": "Para importacións interwiki: páxina a importar.",
+ "apihelp-import-param-fullhistory": "Para importacións interwiki: importar o historial completo, non só a versión actual.",
+ "apihelp-import-param-templates": "Para importacións interwiki: importar tódolos modelos incluídos.",
+ "apihelp-import-param-namespace": "Importar a este espazo de nomes. Non se pode usar de forma conxunta con <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importar como subpáxina desta páxina. Non se pode usar de forma conxunta con <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Cambiar as etiquetas a aplicar á entrada no rexistro de importacións e á revisión nula das páxinas importadas.",
+ "apihelp-import-example-import": "Importar [[meta:Help:ParserFunctions]] ó espazo de nomes 100 con todo o historial.",
+ "apihelp-linkaccount-summary": "Vincular unha conta dun provedor externo ó usuario actual.",
+ "apihelp-linkaccount-example-link": "Comezar o proceso de vincular a unha conta de <kbd>Exemplo</kbd>.",
+ "apihelp-login-summary": "Iniciar sesión e obter as cookies de autenticación.",
+ "apihelp-login-extended-description": "Esta acción só debe utilizarse en combinación con [[Special:BotPasswords]]; para a cuenta de inicio de sesión non se utiliza e pode fallar sen previo aviso. Para iniciar a sesión de forma segura na conta principal, utilice <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Esta acción está obsoleta e pode fallar sen avisar. Para conectarse sen problema use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Nome de usuario.",
+ "apihelp-login-param-password": "Contrasinal",
+ "apihelp-login-param-domain": "Dominio (opcional).",
+ "apihelp-login-param-token": "Identificador de conexión obtido na primeira petición.",
+ "apihelp-login-example-gettoken": "Recuperar un identificador de conexión.",
+ "apihelp-login-example-login": "Identificarse",
+ "apihelp-logout-summary": "Terminar e limpar datos de sesión.",
+ "apihelp-logout-example-logout": "Cerrar a sesión do usuario actual",
+ "apihelp-managetags-summary": "Realizar tarefas de xestión relacionadas coa modificación de etiquetas.",
+ "apihelp-managetags-param-operation": "Que operación realizar:\n;create:Crear unha nova etiqueta de modificación para uso manual.\n;delete:Borar unha etiqueta de modificación da base de datos, incluíndo o borrado da etiqueta de todas as revisións, entradas de cambios recentes e entradas de rexistro onde estea a usarse.\n;activate:Activar unha etiqueta de modificación, permitindo que os usuarios a usen manualmente.\n;deactivate:Desactivar unha etiqueta de modificación, impedindo que os usuarios a usen manualmente.",
+ "apihelp-managetags-param-tag": "Etiqueta para crear, borrar, activar ou desactivar. Para a creación da etiqueta, a etiqueta non pode existir previamente. Para o borrado da etiqueta, a etiqueta debe existir. Para a activación da etiqueta, a etiqueta debe existir e non pode ser usada por unha extensión. Para desactivar unha etiqueta, a etiqueta debe estar activa e definida manualmente.",
+ "apihelp-managetags-param-reason": "Un motivo opcional para crear, borrar, activar ou desactivar a etiqueta.",
+ "apihelp-managetags-param-ignorewarnings": "Ignorar calquera aviso que apareza durante a operación.",
+ "apihelp-managetags-param-tags": "Cambiar as etiquetas a aplicar á entrada no rexistro de xestión das etiquetas.",
+ "apihelp-managetags-example-create": "Crear unha etiqueta chamada <kbd>spam</kbd> coa razón <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Borrar a etiqueta <kbd>vandalismo</kbd> coa razón <kbd>Erros ortográficos</kbd>",
+ "apihelp-managetags-example-activate": "Activar a etiqueta chamada <kbd>spam</kbd> coa razón <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Desactivar a etiqueta chamada <kbd>spam</kbd> coa razón <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Fusionar os historiais das páxinas.",
+ "apihelp-mergehistory-param-from": "Título da páxina desde a que se fusionará o historial. Non pode usarse xunto con <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "Identificador da páxina desde a que se fusionará o historial. Non pode usarse xunto con <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Título da páxina á que se fusionará o historial. Non pode usarse xunto con <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "Identificador da páxina á que se fusionará o historial. Non pode usarse xunto con <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Selo de tempo dende o que se moverán as modificacións desde o historial da páxina fonte ó historial da páxina destino. Se non se indica, todo o historial da páxina fonte fusionarase co da páxina destino.",
+ "apihelp-mergehistory-param-reason": "Razón para a fusión de historiais.",
+ "apihelp-mergehistory-example-merge": "Fusionar o historial enteiro de <kbd>PáxinaVella</kbd> en <kbd>PáxinaNova</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Fusionar as revisións da páxina <kbd>PáxinaVella</kbd> con data <kbd>2015-12-31T04:37:41Z</kbd> en <kbd>PáxinaNova</kbd>.",
+ "apihelp-move-summary": "Mover unha páxina.",
+ "apihelp-move-param-from": "Título da páxina que quere renomear. Non pode usarse xunto con <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Identificador da páxina que quere renomear. Non pode usarse xunto con <var>$1from</var>.",
+ "apihelp-move-param-to": "Título ó que renomear a páxina.",
+ "apihelp-move-param-reason": "Motivo para o renomeamento.",
+ "apihelp-move-param-movetalk": "Renomear a páxina de conversa, se existe.",
+ "apihelp-move-param-movesubpages": "Renomear as subpáxinas, se é aplicable.",
+ "apihelp-move-param-noredirect": "Non crear unha redirección.",
+ "apihelp-move-param-watch": "Engadir a páxina e a redirección á páxina de vixiancia do usuario actual.",
+ "apihelp-move-param-unwatch": "Eliminar a páxina e a redirección da páxina de vixiancia do usuario actual.",
+ "apihelp-move-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-move-param-ignorewarnings": "Ignorar as advertencias.",
+ "apihelp-move-param-tags": "Cambiar as etiquetas a aplicar á entrada do rexistro de traslados e na revisión nula da páxina de destino.",
+ "apihelp-move-example-move": "Mover <kbd>Badtitle</kbd> a <kbd>Goodtitle</kbd> sen deixar unha redirección.",
+ "apihelp-opensearch-summary": "Buscar no wiki mediante o protocolo OpenSearch.",
+ "apihelp-opensearch-param-search": "Buscar texto.",
+ "apihelp-opensearch-param-limit": "Número máximo de resultados a visualizar.",
+ "apihelp-opensearch-param-namespace": "Espazo de nomes no que buscar.",
+ "apihelp-opensearch-param-suggest": "Non facer nada se <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> é falso.",
+ "apihelp-opensearch-param-redirects": "Como xestionar as redireccións:\n;return:Devolve a mesma redirección.\n;resolve:Devolve a páxina á que apunta. Pode devolver menos de $1limit resultados.\nPor razóns históricas, o valor por defecto para $1format=json é \"return\" e \"resolve\" para outros formatos.",
+ "apihelp-opensearch-param-format": "O formato de saída.",
+ "apihelp-opensearch-param-warningsaserror": "Se os avisos son recibidos con <kbd>format=json</kbd>, devolver un erro de API no canto de ignoralos.",
+ "apihelp-opensearch-example-te": "Atopar páxinas que comezan por <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Cambiar as preferencias do usuario actual.",
+ "apihelp-options-extended-description": "Só se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou aquelas opcións con claves prefixadas con <code>userjs-</code> (previstas para ser usadas por escrituras de usuario).",
+ "apihelp-options-param-reset": "Reinicia as preferencias ás iniciais do sitio.",
+ "apihelp-options-param-resetkinds": "Lista de tipos de opcións a reinicializar cando a opción <var>$1reset</var> está definida.",
+ "apihelp-options-param-change": "Lista de cambios, con formato nome=valor (p. ex. skin=vector). Se non se da un valor (sen un símbolo de igual), p.ex. optionname|otheroption|..., a opción pasará ó valor por defecto. Para calquera valor que conteña o carácter (<kbd>|</kbd>), use o [[Special:ApiHelp/main#main/datatypes|separador alternativo para valores múltiples]] para unha operación correcta.",
+ "apihelp-options-param-optionname": "O nome da opción que debe fixarse no valor dado por <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "O valor para a opción especificada por <var>$1optionname</var>, pode conter barras verticais.",
+ "apihelp-options-example-reset": "Restablecer todas as preferencias.",
+ "apihelp-options-example-change": "Cambiar as preferencias <kbd>skin</kbd> and <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Restaurar todas as preferencias, logo fixar <kbd>skin</kbd> e <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Obter información sobre módulos API.",
+ "apihelp-paraminfo-param-modules": "Lista de nomes de módulos (valores dos parámetros <var>acción</var e <var>formato</var>, ou <kbd>principal</kbd>). Pode especificar submódulos con <kbd>+</kbd>, ou tódolos submódulos con <kbd>+*</kbd>, ou tódolos submódulos recursivamente con <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Formato das cadeas de axuda.",
+ "apihelp-paraminfo-param-querymodules": "Lista dos nomes de módulos de consulta (valores dos parámetros <var>prop</var>, <var>meta</var> ou <var>list</var>). Use <kbd>$1modules=query+foo</kbd> no canto de <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Obter información sobre o módulo principal (nivel superior). No canto use <kbd>$1modules=main</kbd>.",
+ "apihelp-paraminfo-param-pagesetmodule": "Obter información sobre o módulo pageset (proporcionando títulos= e amigos).",
+ "apihelp-paraminfo-param-formatmodules": "Lista dos nomes de módulo de formato (valores do parámetro <var>formato</var>). No canto use <var>$1modules</var>.",
+ "apihelp-paraminfo-example-1": "Amosar información para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, e <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Mostrar a información para tódolos submódulos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "Fai a análise sintáctica do contido e devolve o resultado da análise.",
+ "apihelp-parse-extended-description": "Vexa varios módulos propostos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obter información sobre a versión actual dunha páxina.\n\nHai varias formas de especificar o texto a analizar:\n# Especificar unha páxina ou revisión, usando <var>$1page</var>, <var>$1pageid</var>, ou <var>$1oldid</var>.\n# Especificando contido explícitamente, usando <var>$1text</var>, <var>$1title</var>, and <var>$1contentmodel</var>.\n# Especificando só un resumo a analizar. <var>$1prop</var> debe ter un valor baleiro.",
+ "apihelp-parse-param-title": "Título da páxina á que pertence o texto. Se non se indica, debe especificarse <var>$1contentmodel</var>, e [[API]] usarase como o título.",
+ "apihelp-parse-param-text": "Texto a analizar. Use <var>$1title</var> ou <var>$1contentmodel</var> para controlar o modelo de contido.",
+ "apihelp-parse-param-summary": "Resumo a analizar.",
+ "apihelp-parse-param-page": "Analizar o contido desta páxina. Non pode usarse de forma conxunta con <var>$1text</var> e <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Analizar o contido desta páxina. Ignora <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Se <var>$1page</var> ou <var>$1pageid</var> apuntar a unha redirección, resólvea.",
+ "apihelp-parse-param-oldid": "Analizar o contido desta revisión. Ignora <var>$1page</var> e <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Que información obter:",
+ "apihelp-parse-paramvalue-prop-text": "Devolve o texto analizado do texto wiki.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Devolve as interwikis do texto analizado.",
+ "apihelp-parse-paramvalue-prop-categories": "Devolve as categoría do texto analizado.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Devolve a versión HTML das categorías.",
+ "apihelp-parse-paramvalue-prop-links": "Devolve as ligazóns internas do texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-templates": "Devolve os modelos do texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-images": "Devolve as imaxes do texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Devolve as ligazóns externas no texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-sections": "Devolve as seccións do texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-revid": "Engade o identificador de edición do texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Engade o título do texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-headitems": "Devolve os elementos a poñer na <code>&lt;cabeceira&gt;</code> da páxina.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Devolve <code>&lt;cabeceira&gt;</code> analizada da páxina.",
+ "apihelp-parse-paramvalue-prop-modules": "Devolve os módulos ResourceLoader usados na páxina. Para cargar, use <code>mw.loader.using()</code>. <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> deben ser solicitados xunto con <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina. Para aplicalo, use <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina como unha cadea de texto JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "Devolve o HTML dos indicadores de estado de páxina usados na páxina.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Devolve as ligazóns interwiki do texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Devolve o texto wiki orixinal que foi analizado.",
+ "apihelp-parse-paramvalue-prop-properties": "Obter varias propiedades definidas no texto wiki analizado.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Devolve o informe de límite de forma estruturada. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Devolve a versión HTML do informe de límite. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
+ "apihelp-parse-paramvalue-prop-parsetree": "Árbores de análise XML do contido da revisión (precisa o modelo de contido <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Devolve os avisos que ocorreron ó analizar o contido.",
+ "apihelp-parse-param-wrapoutputclass": "Clase CSS a usar para formatar a saída do analizador sintáctico.",
+ "apihelp-parse-param-pst": "Fai unha transformación antes de gardar a entrada antes de analizala. Válida unicamente para usar con texto.",
+ "apihelp-parse-param-onlypst": "Facer unha transformación antes de gardar (PST) a entrada, pero sen analizala. Devolve o mesmo wikitexto, despois de que a PST foi aplicada. Só válida cando se usa con <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Inclúe ligazóns de idioma proporcionadas polas extensións (para usar con <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Analizar unicamente o contido deste número de sección.\n\nCando <kbd>nova</kbd>, analiza <var>$1text</var> e <var>$1sectiontitle</var> como se fose a engadir unha nova sección da páxina.\n\n<kbd>novo</kbd> só se permite cando especifica <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "Novo título de sección cando <var>section</var> é <kbd>new</kbd>.\n\nA diferenza da edición de páxinas, non se oculta no <var>summary</var> cando se omite ou está baleiro.",
+ "apihelp-parse-param-disablelimitreport": "Omitir o informe de límite (\"Informe de límite NewPP\") da saída do analizador.",
+ "apihelp-parse-param-disablepp": "Use <var>$1disablelimitreport</var> no seu lugar.",
+ "apihelp-parse-param-disableeditsection": "Omitir as ligazóns de edición de sección da saída do analizador.",
+ "apihelp-parse-param-disabletidy": "Non executar limpeza de HTML no retorno da análise.",
+ "apihelp-parse-param-generatexml": "Xenerar unha árbore de análise XML (necesita o modelo de contido <code>$1</code>; substituído por <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Analizar en modo vista previa.",
+ "apihelp-parse-param-sectionpreview": "Analizar en modo vista previa de sección (activa tamén o modo de vista previa).",
+ "apihelp-parse-param-disabletoc": "Omitir o índice na saída.",
+ "apihelp-parse-param-useskin": "Aplicar o tema seleccionado á saída do analizador. Pode afectar ás seguintes propiedades: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>módulos</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicadores</kbd>.",
+ "apihelp-parse-param-contentformat": "Formato de serialización do contido usado para o texto de entrada. Só válido cando se usa con $1text.",
+ "apihelp-parse-param-contentmodel": "Modelo de contido do texto de entrada. Se se omite, debe especificarse $1title, e o valor por defecto será o modelo do título especificado. Só válido cando se usa con $1text.",
+ "apihelp-parse-example-page": "Analizar unha páxina.",
+ "apihelp-parse-example-text": "Analizar un wikitexto.",
+ "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando o título da páxina.",
+ "apihelp-parse-example-summary": "Analizar un resumo.",
+ "apihelp-patrol-summary": "Patrullar unha páxina ou edición.",
+ "apihelp-patrol-param-rcid": "ID de modificación recente a vixiar.",
+ "apihelp-patrol-param-revid": "ID de revisión a vixiar.",
+ "apihelp-patrol-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de patrullas.",
+ "apihelp-patrol-example-rcid": "Patrullar un cambio recente",
+ "apihelp-patrol-example-revid": "Patrullar unha revisión",
+ "apihelp-protect-summary": "Cambiar o nivel de protección dunha páxina.",
+ "apihelp-protect-param-title": "Título da páxina que quere (des)protexer. Non pode usarse xunto con $1pageid.",
+ "apihelp-protect-param-pageid": "Identificador da páxina que quere (des)protexer. Non pode usarse xunto con $1title.",
+ "apihelp-protect-param-protections": "Lista dos niveis de protección, con formato <kbd>action=level</kbd> (p.ex. <kbd>edit=sysop</kbd>). Un nivel de <kbd>all</kbd> quere dicir que todo o mundo ten permiso para realizar a acción, sen restricións.\n\n<strong>Nota:</strong> Todas as accións que non estean listadas terán restriccións para ser eliminadas.",
+ "apihelp-protect-param-expiry": "Selos de tempo de caducidade. Se só se indica un selo de tempo, usarase para todas as proteccións. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd>, para unha protección sen caducidade.",
+ "apihelp-protect-param-reason": "Razón para (des)protexer.",
+ "apihelp-protect-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de protección.",
+ "apihelp-protect-param-cascade": "Activar a protección en cascada (por exemplo, protexer os modelos transcluídos e as imaxes usadas nesta páxina). Ignórase se ningún dos niveis de protección soporta a protección en cascada.",
+ "apihelp-protect-param-watch": "Se se define este parámetro, engadir a páxina que se (des)protexe á lista de vixilancia do usuario actual.",
+ "apihelp-protect-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-protect-example-protect": "Protexer unha páxina",
+ "apihelp-protect-example-unprotect": "Desprotexer unha páxina poñendo as restricións a <kbd>all</kbd>. (isto quere dicir que todo o mundo pode realizar a acción).",
+ "apihelp-protect-example-unprotect2": "Desprotexer unha páxina quitando as restricións.",
+ "apihelp-purge-summary": "Borrar a caché para os títulos indicados.",
+ "apihelp-purge-param-forcelinkupdate": "Actualizar as táboas de ligazóns.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Actualizar a táboa de ligazóns, e actualizar as táboas de ligazóns para calquera páxina que use esta páxina como modelo.",
+ "apihelp-purge-example-simple": "Purgar a <kbd>Main Page</kbd> e páxina da <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Purgar as primeiras 10 páxinas no espazo de nomes principal.",
+ "apihelp-query-summary": "Consultar datos de e sobre MediaWiki.",
+ "apihelp-query-extended-description": "Todas as modificacións de datos primeiro teñen que facer unha busca para obter un identificador para evitar abusos de sitios maliciosos.",
+ "apihelp-query-param-prop": "Que propiedades obter para as páxinas buscadas.",
+ "apihelp-query-param-list": "Que lista obter.",
+ "apihelp-query-param-meta": "Que metadatos obter.",
+ "apihelp-query-param-indexpageids": "Incluir una sección adicional de identificadores de páxina listando todos os IDs das páxinas devoltas.",
+ "apihelp-query-param-export": "Exportar as revisións actuais de todas as páxinas dadas ou xeneradas.",
+ "apihelp-query-param-exportnowrap": "Devolver o XML exportado sen incluílo nun resultado XML (mesmo formato que [[Special:Export]]). Só pode usarse con $1export.",
+ "apihelp-query-param-iwurl": "Se fai falta obter a URL completa se o título é unha ligazón interwiki.",
+ "apihelp-query-param-rawcontinue": "Devolver os datos en bruto de <samp>query-continue</samp> para continuar.",
+ "apihelp-query-example-revisions": "Consultar [[Special:ApiHelp/query+siteinfo|información do sitio]] e [[Special:ApiHelp/query+revisions|as revisións]] da <kbd>Páxina Principal</kbd>.",
+ "apihelp-query-example-allpages": "Buscar revisións de páxinas que comecen por <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "Numerar tódalas categorías",
+ "apihelp-query+allcategories-param-from": "Categoría pola que comezar a enumeración.",
+ "apihelp-query+allcategories-param-to": "Categoría pola que rematar a enumeración.",
+ "apihelp-query+allcategories-param-prefix": "Buscar todos os títulos de categoría que comezan con este valor.",
+ "apihelp-query+allcategories-param-dir": "Dirección na que ordenar.",
+ "apihelp-query+allcategories-param-min": "Devolver só categorías con polo menos este número de membros.",
+ "apihelp-query+allcategories-param-max": "Devolver só categorías con como moito este número de membros.",
+ "apihelp-query+allcategories-param-limit": "Cantas categorías devolver.",
+ "apihelp-query+allcategories-param-prop": "Que propiedades recuperar:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Engade o número de páxinas na categoría.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Marca as categorías que están ocultas con <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Listar categorías con información do número de páxinas en cada unha.",
+ "apihelp-query+allcategories-example-generator": "Obter información sobre a páxina de categoría para categorías que comezan por <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "Listar todas as revisións borradas por un usuario ou nun espazo de nomes.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Só pode usarse con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Non pode usarse con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "Selo de tempo para comezar a enumeración.",
+ "apihelp-query+alldeletedrevisions-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+alldeletedrevisions-param-from": "Comezar listado neste título.",
+ "apihelp-query+alldeletedrevisions-param-to": "Parar listado neste título.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Buscar tódolos títulos de páxinas que comezan con este valor.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+alldeletedrevisions-param-user": "Só listar revisións deste usuario.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Non listar revisións deste usuario.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Só listar páxinas neste espazo de nomes.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Debido ó [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo minimal]], ó usar á vez <var>$1user</var> e <var>$1namespace</var> pode devolver menos resultados de <var>$1limit</var> antes de continuar, en casos extremos, pode que non devolva resultados.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Usado como xenerador, xenera títulos no canto de IDs de revisión.",
+ "apihelp-query+alldeletedrevisions-example-user": "Listar as últimas 50 contribucións borradas do usuario <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Listar as 50 primeiras revisións borradas no espazo de nomes principal.",
+ "apihelp-query+allfileusages-summary": "Lista todos os usos de ficheiro, incluído os que non existen.",
+ "apihelp-query+allfileusages-param-from": "Título do ficheiro no que comezar a enumerar.",
+ "apihelp-query+allfileusages-param-to": "Título do ficheiro no que rematar de enumerar.",
+ "apihelp-query+allfileusages-param-prefix": "Buscar tódolos títulos de ficheiro que comezan con este valor.",
+ "apihelp-query+allfileusages-param-unique": "Mostrar só nomes de ficheiro distintos. Non pode usarse con $1prop=ids.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+allfileusages-param-prop": "Que partes de información incluír:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Engade os IDs das páxinas usadas (non pode usarse con $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Engade o nome do ficheiro.",
+ "apihelp-query+allfileusages-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+allfileusages-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allfileusages-example-B": "Lista títulos de ficheiro, incluíndo os eliminados, cos IDs de páxina dos que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Listar títulos únicos de ficheiros.",
+ "apihelp-query+allfileusages-example-unique-generator": "Obter todos os títulos de ficheiro, marcando os que faltan.",
+ "apihelp-query+allfileusages-example-generator": "Obtén as páxinas que conteñen os ficheiros.",
+ "apihelp-query+allimages-summary": "Enumerar tódalas imaxes secuencialmente.",
+ "apihelp-query+allimages-param-sort": "Propiedade pola que ordenar.",
+ "apihelp-query+allimages-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allimages-param-from": "Título da imaxe no que comezar a enumerar. Só pode usarse con $1sort=name.",
+ "apihelp-query+allimages-param-to": "Título da imaxe no que rematar a enumerar. Só pode usarse con $1sort=name.",
+ "apihelp-query+allimages-param-start": "Título do selo de tempo no que comezar a enumerar. Só pode usarse con $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "Título do selo de tempo no que rematar a enumerar. Só pode usarse con $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Buscar todas as imaxes cuxo título comeza por este valor. Só pode usarse con $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Limitar a imaxes con polo menos este número de bytes.",
+ "apihelp-query+allimages-param-maxsize": "Limitar a imaxes con como máximo este número de bytes.",
+ "apihelp-query+allimages-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usada en MediaWiki).",
+ "apihelp-query+allimages-param-user": "Mostrar só ficheiros subidos por este usuario. Só pode usarse con $1sort=timestamp. Non se pode usar xunto a $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Como filtrar ficheiros subidos por bots. Só pode usarse con $1sort=timestamp. Non pode usarse xunto con $1user.",
+ "apihelp-query+allimages-param-mime": "Que tipos MIME buscar, por exemplo <kbd>imaxe/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Cantas imaxes mostar en total.",
+ "apihelp-query+allimages-example-B": "Mostrar unha lista de ficheiros que comezan por <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Mostrar unha lista de ficheiros subidos recentemente, similares a [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Mostrar unha lista de ficheiros con tipo MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Mostar información sobre catro ficheiros que comecen pola letra <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Numerar tódalas ligazóns que apuntan a un nome de espazos determinado.",
+ "apihelp-query+alllinks-param-from": "Título da ligazón na que comezar a enumerar.",
+ "apihelp-query+alllinks-param-to": "Título da ligazón na que rematar de enumerar.",
+ "apihelp-query+alllinks-param-prefix": "Buscar tódolos títulos ligados que comezan con este valor.",
+ "apihelp-query+alllinks-param-unique": "Mostrar só títulos ligados distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+alllinks-param-prop": "Que partes de información incluír:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Engade o ID da páxina da ligazón (non pode usarse con <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Engade o título da ligazón.",
+ "apihelp-query+alllinks-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+alllinks-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+alllinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+alllinks-example-B": "Lista os títulos ligados, incluíndo os eliminados, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Listar títulos ligados únicos",
+ "apihelp-query+alllinks-example-unique-generator": "Obtén tódolos títulos ligados, marcando os eliminados.",
+ "apihelp-query+alllinks-example-generator": "Obtén as páxinas que conteñen as ligazóns.",
+ "apihelp-query+allmessages-summary": "Devolver mensaxes deste sitio.",
+ "apihelp-query+allmessages-param-messages": "Que mensaxes devolver. <kbd>*</kbd> (por defecto) significa todas as mensaxes",
+ "apihelp-query+allmessages-param-prop": "Que propiedades obter.",
+ "apihelp-query+allmessages-param-enableparser": "Marcar para activar o analizador, isto preprocesará o texto wiki da mensaxe (substituir palabras máxicas, xestionar modelo, etc.)",
+ "apihelp-query+allmessages-param-nocontent": "Se se marca, non inclúe o contido das mensaxes na saída.",
+ "apihelp-query+allmessages-param-includelocal": "Tamén inclúe mensaxes locais, p.ex. mensaxes que non existen no software pero existen como no espazo de nomes {{ns:MediaWiki}}. \nIsto lista todas as páxinas do espazo de nomes {{ns:MediaWiki}}, polo que tamén listará as que non son realmente mensaxes como [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Argumentos a substituír na mensaxe.",
+ "apihelp-query+allmessages-param-filter": "Retornar só mensaxes con nomes que conteñan esta cadea.",
+ "apihelp-query+allmessages-param-customised": "Devolver só mensaxes neste estado de personalización.",
+ "apihelp-query+allmessages-param-lang": "Retornar mensaxes nesta lingua.",
+ "apihelp-query+allmessages-param-from": "Retornar mensaxes que comezan nesta mensaxe.",
+ "apihelp-query+allmessages-param-to": "Retornar mensaxes que rematan nesta mensaxe.",
+ "apihelp-query+allmessages-param-title": "Nome de páxina a usar como contexto cando se analice a mensaxe (para a opción $1enableparser)",
+ "apihelp-query+allmessages-param-prefix": "Devolver mensaxes con este prefixo.",
+ "apihelp-query+allmessages-example-ipb": "Mostar mensaxes que comecen por <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Mostrar mensaxes <kbd>august</kbd> e <kbd>mainpage</kbd> en Alemán.",
+ "apihelp-query+allpages-summary": "Numerar tódalas páxinas secuencialmente nun espazo de nomes determinado.",
+ "apihelp-query+allpages-param-from": "Título da páxina na que comezar a enumerar.",
+ "apihelp-query+allpages-param-to": "Título da páxina na que rematar de enumerar.",
+ "apihelp-query+allpages-param-prefix": "Buscar tódolos títulos de páxinas que comezan con este valor.",
+ "apihelp-query+allpages-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+allpages-param-filterredir": "Que páxinas listar.",
+ "apihelp-query+allpages-param-minsize": "Limitar a páxinas con polo menos este número de bytes.",
+ "apihelp-query+allpages-param-maxsize": "Limitar a páxinas con como máximo este número de bytes.",
+ "apihelp-query+allpages-param-prtype": "Limitar a só protección de páxinas.",
+ "apihelp-query+allpages-param-prlevel": "Filtrar proteccións baseándose no nivel de protección (debe empregarse có parámetro $1prtype= ).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filtrar proteccións baseadas en cascada (ignoradas se $1prtype non ten valor).",
+ "apihelp-query+allpages-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+allpages-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filtro baseado en si unha páxina ten ligazóns de lingua. Decátese de que esto pode non considerar as ligazóns de lingua engadidas polas extensións.",
+ "apihelp-query+allpages-param-prexpiry": "Que finalización de protección pola que filtrar a páxina:\n;indefinida: Só obter páxinas coa finalización de protección indefinida.\n;definite: Só obter páxinas cunha finalización de protección definida.\n;all: Obter páxinas con calquera finalización de protección.",
+ "apihelp-query+allpages-example-B": "Mostrar unha lista de páxinas que comezan pola letra <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Mostrar inforfmación sobre 4 páxinas que comecen pola letra <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Motrar o contido das dúas primeiras páxinas que non sexan redirección que comecen por <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Lista tódalas redireccións a un espazo de nomes.",
+ "apihelp-query+allredirects-param-from": "Título da redirección na que comezar a enumerar.",
+ "apihelp-query+allredirects-param-to": "Título da redirección na que rematar de enumerar.",
+ "apihelp-query+allredirects-param-prefix": "Buscar todas as páxinas que comecen con este valor.",
+ "apihelp-query+allredirects-param-unique": "Só mostrar páxinas obxectivo distintas. Non pode usarse con $1prop=ids|fragment|interwiki.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+allredirects-param-prop": "Que información incluír:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Engade o ID da páxina da redirección (non pode usarse con <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Engade o título da redirección.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Engade o fragmento da redirección, se o hai (non pode usarse con <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Engade o prefixo interwiki da redirección, se o hai (non pode usarse con <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+allredirects-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+allredirects-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allredirects-example-B": "Lista as páxinas obxectivo, incluíndo as eliminadas, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Lista páxinas obxectivo únicas.",
+ "apihelp-query+allredirects-example-unique-generator": "Obtén tódalas páxinas obxectivo, marcando as eliminadas.",
+ "apihelp-query+allredirects-example-generator": "Obtén as páxinas que conteñen as redireccións.",
+ "apihelp-query+allrevisions-summary": "Listar todas as revisións.",
+ "apihelp-query+allrevisions-param-start": "Selo de tempo no que comezar a enumeración.",
+ "apihelp-query+allrevisions-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+allrevisions-param-user": "Só listar revisións deste usuario.",
+ "apihelp-query+allrevisions-param-excludeuser": "Non listar revisións deste usuario.",
+ "apihelp-query+allrevisions-param-namespace": "Só listar páxinas neste espazo de nomes.",
+ "apihelp-query+allrevisions-param-generatetitles": "Usado como xenerador, xenera títulos no canto de IDs de revisión.",
+ "apihelp-query+allrevisions-example-user": "Listar as últimas 50 contribucións do usuario <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Listar as 50 primeiras revisións do espazo de nomes principal.",
+ "apihelp-query+mystashedfiles-summary": "Obter unha lista dos ficheiros da caché de carga do usuario actual.",
+ "apihelp-query+mystashedfiles-param-prop": "Que propiedades obter para os ficheiros.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Consultar o tamaño de ficheiro e as dimensións da imaxe.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Consultar o tipo MIME do ficheiro e tipo multimedia.",
+ "apihelp-query+mystashedfiles-param-limit": "Cantos ficheiros devolver.",
+ "apihelp-query+mystashedfiles-example-simple": "Obter a clave de ficheiro, tamaño de ficheiro, e tamaño en pixels dos ficheiros na caché de carga do usuario actual.",
+ "apihelp-query+alltransclusions-summary": "Listar todas as transclusións (páxinas integradas usando &#123;&#123;x&#125;&#125;), incluíndo as eliminadas.",
+ "apihelp-query+alltransclusions-param-from": "Título da transclusión na que comezar a enumerar.",
+ "apihelp-query+alltransclusions-param-to": "Título da transclusión na que rematar de enumerar.",
+ "apihelp-query+alltransclusions-param-prefix": "Buscar todos os títulos transcluídos que comezan con este valor.",
+ "apihelp-query+alltransclusions-param-unique": "Mostrar só títulos transcluídos distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+alltransclusions-param-prop": "Que partes de información incluír:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Engade o ID da páxina da páxina transcluída (non pode usarse con $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Engade o título da transclusión.",
+ "apihelp-query+alltransclusions-param-namespace": "Nome de espazos a numerar.",
+ "apihelp-query+alltransclusions-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+alltransclusions-param-dir": "Dirección na cal listar.",
+ "apihelp-query+alltransclusions-example-B": "Lista os títulos transcluídos, incluíndo os eliminados, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Lista os títulos transcluídos únicos.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtén tódolos títulos transcluídos, marcando os eliminados.",
+ "apihelp-query+alltransclusions-example-generator": "Obtén as páxinas que conteñen as transclusións.",
+ "apihelp-query+allusers-summary": "Enumerar tódolos usuarios rexistrados.",
+ "apihelp-query+allusers-param-from": "Nome de usuario para comezar a enumeración",
+ "apihelp-query+allusers-param-to": "Nome de usuario para rematar a enumeración.",
+ "apihelp-query+allusers-param-prefix": "Buscar tódolos nomes de usuario que comezan con este valor.",
+ "apihelp-query+allusers-param-dir": "Dirección na que ordenar.",
+ "apihelp-query+allusers-param-group": "Só incluír os usuarios nos grupos dados.",
+ "apihelp-query+allusers-param-excludegroup": "Excluír usuarios nos grupos dados.",
+ "apihelp-query+allusers-param-rights": "Incluír só ós usuarios cos dereitos dados. Non se inclúen grupo implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+allusers-param-prop": "Que información incluír:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Engade información sobre o bloque actual do usuario.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Lista de grupos nos que está o usuario. Isto usa máis recursos no servidor e pode devolver menos resultados que o límite.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lista todos os grupos ós que usuario pertence de forma automática.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Lista os dereitos que ten o usuario.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Engade o número de edicións do usuario.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Engade o selo de tempo do momento no que se rexistrou o usuario, se está dispoñible (pode ser branco).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Engade os identificadores centrais e o estado de acoplamento do usuario.",
+ "apihelp-query+allusers-param-limit": "Número total de nomes de usuario a devolver.",
+ "apihelp-query+allusers-param-witheditsonly": "Só listar usuarios que teñan feito edicións.",
+ "apihelp-query+allusers-param-activeusers": "Só listar usuarios activos {{PLURAL:$1|no último día|nos $1 últimos días}}.",
+ "apihelp-query+allusers-param-attachedwiki": "Con <kbd>$1prop=centralids</kbd>, \ntamén indica se o usuario está acoplado á wiki identificada por este identificador.",
+ "apihelp-query+allusers-example-Y": "Listar usuarios que comecen por <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Recuperar información sobre o estado de autenticación actual.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Comprobar se o estado de autenticación actual do usuario é abondo para a operación especificada como sensible dende o punto de vista da seguridade.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Recuperar a información sobre as peticións de autenticación necesarias para a acción de autenticación especificada.",
+ "apihelp-query+authmanagerinfo-example-login": "Recuperar as peticións que poden ser usadas ó comezo dunha conexión.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Recuperar as peticións que poden ser usadas ó comezo dunha conexión, xunto cos campos de formulario integrados.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Probar se a autenticación é abondo para a acción <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Atopar todas as páxinas que ligan coa páxina dada.",
+ "apihelp-query+backlinks-param-title": "Título a buscar. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "Identificador de páxina a buscar. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+backlinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+backlinks-param-filterredir": "Como filtrar as redireccións. Se o valor é <kbd>nonredirects</kbd> cando <var>$1redirect</var> está activa, só se aplica ó segundo nivel.",
+ "apihelp-query+backlinks-param-limit": "Cantas páxinas devolver. Se <var>$1redirect</var> está activa, aplícase o límite a cada nivel de forma separada (isto significa que poden devolverse ata 2 * <var>$1limit</var> resultados).",
+ "apihelp-query+backlinks-param-redirect": "Se a ligazón sobre unha páxina é unha redirección, atopa tamén todas as páxinas que ligan con esa redirección. O límite máximo divídese á metade.",
+ "apihelp-query+backlinks-example-simple": "Mostrar ligazóns á <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Obter a información das páxinas que ligan á <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Listar todos os usuarios e direccións IP bloqueados.",
+ "apihelp-query+blocks-param-start": "Selo de tempo para comezar a enumeración.",
+ "apihelp-query+blocks-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+blocks-param-ids": "Lista de IDs de bloque a listar (opcional).",
+ "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
+ "apihelp-query+blocks-param-ip": "Obter todos os bloques aplicables a esta IPs ou a este rango CIDR, incluíndo bloques de rangos.\nNon pode usarse xunto con <var>$3users</var>. Os rangos CIDR maiores que IPv4/$1 ou IPv6/$2 non se aceptan.",
+ "apihelp-query+blocks-param-limit": "Número máximo de bloques a listar.",
+ "apihelp-query+blocks-param-prop": "Que propiedades obter:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Engade o identificador do bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Engade o nome de usario do usuario bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Engade o identificador de usuario do usuario bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Engade o nome de usuario do usuario que fixo o bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Engade o identificador do usuario que fixo o bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Engade o selo de tempo de cando se realizou o bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Engade o selo de tempo de cando remata o bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Engade a razón dada para o bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Engade o rango de direccións IP afectadas polo bloqueo.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Etiqueta o bloqueo con (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Só mostrar elementos correspondentes a eses criterios.\nPor exemplo, para ver só bloques indefinidos en direccións IP, ponga <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Listar bloques.",
+ "apihelp-query+blocks-example-users": "Lista de bloques de usuarios <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Listar todas as categorías ás que pertencen as páxinas.",
+ "apihelp-query+categories-param-prop": "Que propiedades adicionais obter para cada categoría:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Engade a clave de ordenación (cadea hexadecimal) e o prefixo da clave de ordenación (parte lexible) da categoría.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Engade o selo de tempo de cando se engadíu a categoría.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Pon unha marca nas categorías que están ocultas con <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Tipo de categorías a amosar.",
+ "apihelp-query+categories-param-limit": "Cantas categorías devolver.",
+ "apihelp-query+categories-param-categories": "Listar só esas categorías. Útil para verificar se unha páxina concreta está nunha categoría determinada.",
+ "apihelp-query+categories-param-dir": "Dirección na cal listar.",
+ "apihelp-query+categories-example-simple": "Obter a lista de categorías ás que pertence a páxina <kbd>Albert Einstein</kbd>",
+ "apihelp-query+categories-example-generator": "Obter a información de todas as categorías usadas na páxina <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Devolver información sobre as categorías dadas.",
+ "apihelp-query+categoryinfo-example-simple": "Obter información sobre <kbd>Category:Foo</kbd> e <kbd>Category:Bar</kbd>",
+ "apihelp-query+categorymembers-summary": "Listar tódalas páxinas nunha categoría determinada.",
+ "apihelp-query+categorymembers-param-title": "Que categoría enumerar (obrigatorio). Debe incluír o prefixo <kbd>{{ns:category}}:</kbd>. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID de páxina da categoría a enumerar. Non se pode usar xunto con <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Que información incluír:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Engade o ID da páxina.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Engade o título e o ID do espazo de nomes da páxina.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Engade a clave de ordenación usada para ordenala na categoría (cadea hexadecimal).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Engade o prefixo da clave de ordenación usado para ordenala na categoría (parte lexible da clave de ordenación).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Engade o tipo no que foi categorizado a páxina (<samp>page</samp>, <samp>subcat</samp> ou <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Engade o selo de tempo no que foi incluída a páxina.",
+ "apihelp-query+categorymembers-param-namespace": "Só incluír páxinas nestes espazos de nomes. Decátese de que poden usarse <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> no canto de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Que tipo de membros da categoría incluír. Ignorado cando está activo <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "Máximo número de páxinas a retornar.",
+ "apihelp-query+categorymembers-param-sort": "Propiedade pola que ordenar.",
+ "apihelp-query+categorymembers-param-dir": "En que dirección ordenar.",
+ "apihelp-query+categorymembers-param-start": "Selo de tempo para comezar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Selo de tempo co que rematar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Clave de ordenación coa que comezar a lista, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Clave de ordenación na que rematar a lista, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo da clave de ordenación co que comezar a lista. Pode usarse só con <kbd>$1sort=sortkey</kbd>. Sobrescríbese <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefixo da clave de ordenación no que rematar a lista <strong>antes</strong> (e non <strong>en</strong>; se existe este valor entón non será incluído!). Pode usarse só con $1sort=sortkey. Sobrescríbese $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Usar $1starthexsortkey no seu lugar.",
+ "apihelp-query+categorymembers-param-endsortkey": "Usar $1endhexsortkey no seu lugar.",
+ "apihelp-query+categorymembers-example-simple": "Obter as dez primeiras páxinas de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Obter a información das primeiras dez páxinas de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Obter a lista de contribuidores conectados e o número de contribuidores anónimos dunha páxina.",
+ "apihelp-query+contributors-param-group": "Incluír só ós usuarios dos grupos dados. Non se inclúen grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-excludegroup": "Excluír usuarios nos grupos dados. Non se inclúen grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-rights": "Incluír só ós usuarios cos dereitos dados. Non se inclúen os dereitos dados a grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-excluderights": "Excluír usuarios cos dereitos dados. Non se inclúen os dereitos dados a grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-limit": "Número total de contribuidores a devolver.",
+ "apihelp-query+contributors-example-simple": "Mostrar os contribuidores á páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Obter información sobre as revisións eliminadas.",
+ "apihelp-query+deletedrevisions-extended-description": "Pode usarse de varias formas:\n#Obter as revisións borradas dun conxunto de páxinas, indicando os títulos ou os IDs das páxinas. Ordenado por título e selo de tempo.\n#Obter datos sobre un conxunto de revisións borradas, indicando os seus IDs e os seus IDs de revisión. Ordenado por ID de revisión.",
+ "apihelp-query+deletedrevisions-param-start": "Selo de tempo no que comezar a enumeración. Ignorado cando se está procesando unha lista de IDs de revisións.",
+ "apihelp-query+deletedrevisions-param-end": "Selo de tempo no que rematar a enumeración. Ignorado cando se está procesando unha lista de IDs de revisións.",
+ "apihelp-query+deletedrevisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+deletedrevisions-param-user": "Só listar revisións deste usuario.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Non listar revisións deste usuario.",
+ "apihelp-query+deletedrevisions-example-titles": "Listar as revisións borradas das páxinas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con contido.",
+ "apihelp-query+deletedrevisions-example-revids": "Listar a información para a revisión borrada <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Listar as revisións eliminadas.",
+ "apihelp-query+deletedrevs-extended-description": "Opera según tres modos:\n#Lista as modificacións borradas dos títulos indicados, ordenados por selo de tempo.\n#Lista as contribucións borradas do usuario indicado, ordenadas por selo de tempo (sen indicar títulos).\n#Lista todas as modificacións borradas no espazo de nomes indicado, ordenadas por título e selo de tempo (sen indicar títulos, sen fixar $1user).\n\nCertos parámetros só se aplican a algúns modos e son ignorados noutros.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+ "apihelp-query+deletedrevs-param-start": "Selo de tempo no que comezar a enumeración.",
+ "apihelp-query+deletedrevs-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+deletedrevs-param-from": "Comezar listado neste título.",
+ "apihelp-query+deletedrevs-param-to": "Rematar listado neste título.",
+ "apihelp-query+deletedrevs-param-prefix": "Buscar tódolos títulos de páxina que comezan con este valor.",
+ "apihelp-query+deletedrevs-param-unique": "Só listar unha revisión por cada páxina.",
+ "apihelp-query+deletedrevs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+deletedrevs-param-user": "Só listar revisións deste usuario.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Non listar revisións deste usuario.",
+ "apihelp-query+deletedrevs-param-namespace": "Só listar páxinas neste espazo de nomes.",
+ "apihelp-query+deletedrevs-param-limit": "Máximo número de revisións a listar.",
+ "apihelp-query+deletedrevs-param-prop": "Que propiedades devolver:\n;revid:Engade o identificador de modificación da modificación borrada.\n;parentid:Engade o identificador de modificación da versión anterior da páxina.\n;user:Engade o usuario que fixo esa modificación.\n;userid:Engade o identificador de usuario que fixo esa modificación.\n;comment:Engade o comentario da modificación.\n;parsedcomment:Engade o comentario analizado da modificación.\n;minor:Indica se a modificación é menor.\n;len:Engade a lonxitude (bytes) da modificación.\n;sha1:Engade o SHA-1 (base 16) da modificación.\n;content:Engade o contido da modificación.\n;token:<span class=\"apihelp-deprecated\">Obsoleto.</span> Devolve o identificador da modificación.\n;tags:Etiquetas da modificación.",
+ "apihelp-query+deletedrevs-example-mode1": "Listar as últimas revisións borradas das páxinas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con contido (modo 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Listar as últimas 50 contribucións borradas de <kbd>Bob</kbd> (modo 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Listar as primeiras 50 revisións borradas no espazo de nomes principal (modo 3)",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Listar as primeiras 50 páxinas no espazo de nomes {{ns:talk}} (modo 3).",
+ "apihelp-query+disabled-summary": "Este módulo de consulta foi desactivado.",
+ "apihelp-query+duplicatefiles-summary": "Listar todos os ficheiros que son duplicados dos fichieros dados baseado nos valores da función hash.",
+ "apihelp-query+duplicatefiles-param-limit": "Cantos ficheiros duplicados devolver.",
+ "apihelp-query+duplicatefiles-param-dir": "Dirección na cal listar.",
+ "apihelp-query+duplicatefiles-param-localonly": "Só buscar por ficheiros no repositorio local.",
+ "apihelp-query+duplicatefiles-example-simple": "Buscar duplicados de [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados de tódolos ficheiros",
+ "apihelp-query+embeddedin-summary": "Atopar todas as páxinas que inclúen (por transclusión) o título dado.",
+ "apihelp-query+embeddedin-param-title": "Título a buscar. Non pode usarse xunto con $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "Identificador de páxina a buscar. Non pode usarse xunto con $1title.",
+ "apihelp-query+embeddedin-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+embeddedin-param-dir": "Dirección na cal listar.",
+ "apihelp-query+embeddedin-param-filterredir": "Como filtrar para redireccións.",
+ "apihelp-query+embeddedin-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+embeddedin-example-simple": "Mostrar as páxinas que inclúan <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Obter información sobre as páxinas que inclúen <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "Devolve todas as URLs externas (sen ser interwikis) das páxinas dadas.",
+ "apihelp-query+extlinks-param-limit": "Cantas ligazóns devolver.",
+ "apihelp-query+extlinks-param-protocol": "Protocolo da URL. Se está baleiro e está activo <var>$1query</var>, o protocolo é <kbd>http</kbd>. Deixar esa variable e a <var>$1query</var> baleiras para listar todas as ligazóns externas.",
+ "apihelp-query+extlinks-param-query": "Buscar cadea sen protocolo. Útil para verificar se unha páxina determinada contén unha URL externa determinada.",
+ "apihelp-query+extlinks-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
+ "apihelp-query+extlinks-example-simple": "Obter unha de ligazóns externas á <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "Enumerar páxinas que conteñen unha dirección URL dada.",
+ "apihelp-query+exturlusage-param-prop": "Que información incluír:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Engade o ID da páxina.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Engade o título e o ID do espazo de nomes da páxina.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Engade a URL usada na páxina.",
+ "apihelp-query+exturlusage-param-protocol": "Protocolo da URL. Se está baleiro e está activo <var>$1query</var>, o protocolo é <kbd>http</kbd>. Deixar esa variable e a <var>$1query</var> baleiras para listar todas as ligazóns externas.",
+ "apihelp-query+exturlusage-param-query": "Buscar unha cadea sen protocolo. Ver [[Special:LinkSearch]]. Deixar baleira para listar todas as ligazóns externas.",
+ "apihelp-query+exturlusage-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+exturlusage-param-limit": "Cantas páxinas devolver.",
+ "apihelp-query+exturlusage-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
+ "apihelp-query+exturlusage-example-simple": "Amosar páxinas que ligan con <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "Enumerar secuencialmente todos os ficheiros borrados.",
+ "apihelp-query+filearchive-param-from": "Título da imaxe coa que comezar a enumeración.",
+ "apihelp-query+filearchive-param-to": "Título da imaxe coa que rematar a enumeración.",
+ "apihelp-query+filearchive-param-prefix": "Buscar tódolos títulos de imaxes que comezan con este valor.",
+ "apihelp-query+filearchive-param-limit": "Cantas imaxes devolver en total.",
+ "apihelp-query+filearchive-param-dir": "Dirección na cal listar.",
+ "apihelp-query+filearchive-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usado en MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "Que información de imaxe devolver:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Engade a función hash SHA-1 da imaxe.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Engade o selo de tempo da versión subida.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Engade o usuario que subiu a versión da imaxe.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Engade o tamaño da imaxe en bytes e a altura, anchura e contador de páxina (se é aplicable).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias para o tamaño.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Engade a descrición da versión da imaxe.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analiza a descrición na versión.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Engade o tipo MIME da imaxe.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Engade o tipo multimedia da imaxe.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Lista os metadatos Exif da versión da imaxe.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Engade a profundidade de bit da versión.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Engade o nome do ficheiro da versión do ficheiro para as versións que non son a última.",
+ "apihelp-query+filearchive-example-simple": "Mostrar unha lista de tódolos fichieiros eliminados.",
+ "apihelp-query+filerepoinfo-summary": "Devolver a meta información sobre os repositorios de imaxes configurados na wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Que propiedades do repositorio mostrar (pode haber máis dispoñible nalgunhas wikis):\n;apiurl:URL ó API do repositorio - útil para obter información das imaxes no host.\n;name:A clave do repositorio - usada p. ex. nas variables de retorno de <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]]\n;displayname:O nome lexible do wiki repositorio.\n;rooturl:URL raíz dos camiños de imaxe.\n;local:Se o repositorio é o repositorio local ou non.",
+ "apihelp-query+filerepoinfo-example-simple": "Obter infomación sobre os repositorios de ficheiros",
+ "apihelp-query+fileusage-summary": "Atopar tódalas páxinas que usan os ficheiros dados.",
+ "apihelp-query+fileusage-param-prop": "Que propiedades obter:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "ID de cada páxina.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Título de cada páxina.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Marca de se a páxina é unha redirección.",
+ "apihelp-query+fileusage-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
+ "apihelp-query+fileusage-param-limit": "Cantos mostrar.",
+ "apihelp-query+fileusage-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+ "apihelp-query+fileusage-example-simple": "Obter unha lista de páxinas usando [[:File:Example.jpg]]",
+ "apihelp-query+fileusage-example-generator": "Obter infomación sobre páxinas que usan [[:File:Example.jpg]]",
+ "apihelp-query+imageinfo-summary": "Devolve información de ficheiros e historial de subidas.",
+ "apihelp-query+imageinfo-param-prop": "Que información do ficheiro obter:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Engade selo de tempo á versión subida.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Engade o usuario que subiu cada versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Engade o ID de usuario que subiu cada versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Comentario da versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analizar o comentario da versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Engade o título canónico do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Devolve a URL ó ficheiro e á páxina de descrición.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Engade o tamaño do ficheiro en bytes e a altura, a anchura e o contador de páxina (se é aplicable).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias para o tamaño.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Engade a función hash SHA-1 do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Engade o tipo MIME do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Engade o tipo MIME da miniatura da imaxe (precisa a url e o parámetro $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Engade o tipo do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Lista os metadatos Exif da versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Lista os metadatos xenéricos do formato do ficheiro para a versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Lista os metadatos combinados formateados de múltiples fontes. Os resultados están en formato HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Engade o nome de ficheiro da versión do ficheiro para versións anteriores ás últimas.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Engade a profundidade de bits da versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Usado pola páxina Special:Upload para obter información sobre un ficheiro existente. Non previsto para usar fóra do núcleo MediaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Engadido cando o ficheiro está na [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "Cantas revisións de ficheiro a devolver por ficheiro.",
+ "apihelp-query+imageinfo-param-start": "Selo de tempo dende o que comezar a lista.",
+ "apihelp-query+imageinfo-param-end": "Selo de tempo no que rematar a lista.",
+ "apihelp-query+imageinfo-param-urlwidth": "Se $2prop=url está definido, será devolta unha URL a unha imaxe escalada a este ancho.\nPor razóns de rendimento se se usa esta opción, non se devolverán máis de $1 imaxes.",
+ "apihelp-query+imageinfo-param-urlheight": "Similar a $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Versión de metadata a usar. Se <kbd>latest</kbd> está especificado, usa a última versión. Por defecto <kbd>1</kbd> para compatibilidade con versións anteriores.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Que lingua buscar en extmetadata. Isto afecta tanto á tradución a buscar, se hai varias dispoñibles, como a como se formatean cousas como os números e outros valores.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Se as traducións para a propiedade extmetadata están dispoñibles, búscaas todas.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Se está especificado e non baleiro, só se devolverán esas claves para $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Unha cadea de parámetro específico no analizador. Por exemplo, os PDFs poden usar <kbd>page15-100px</kbd>. Debe usarse <var>$1urlwidth</var> que debe ser coherente con <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Se <kbd>$2prop=badfile</kbd> está definido, este é o título da páxina usado para avaliar a [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "Só buscar ficheiros no repositorio local.",
+ "apihelp-query+imageinfo-example-simple": "Busca a información sobre a versión actual de [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Busca información sobre as versións de [[:File:Test.jpg]] posteriores a 2008.",
+ "apihelp-query+images-summary": "Devolve todos os ficheiros contidos nas páxinas dadas.",
+ "apihelp-query+images-param-limit": "Cantos ficheiros devolver.",
+ "apihelp-query+images-param-images": "Listar só eses ficheiros. Útil para verificar se unha páxina concreta ten un ficheiro determinado.",
+ "apihelp-query+images-param-dir": "Dirección na cal listar.",
+ "apihelp-query+images-example-simple": "Obter unha lista de arquivos empregados na [[Main Page]].",
+ "apihelp-query+images-example-generator": "Obter información sobre todos os ficheiros usados na [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Atopar tódalas páxinas que usan o título da imaxe dada.",
+ "apihelp-query+imageusage-param-title": "Título a buscar. Non pode usarse xunto con $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "ID de páxina a buscar. Non pode usarse xunto con $1title.",
+ "apihelp-query+imageusage-param-namespace": "Nome de espazos a numerar.",
+ "apihelp-query+imageusage-param-dir": "Dirección na cal listar.",
+ "apihelp-query+imageusage-param-filterredir": "Como filtrar redireccións. Se se fixa a non redirección cando está activo $1redirect, isto só se aplica ó segundo nivel.",
+ "apihelp-query+imageusage-param-limit": "Cantas páxinas devolver. Se <var>$1redirect</var> está activa, aplícase o límite a cada nivel de forma separada (isto significa que poden devolverse ata 2 * <var>$1limit</var> resultados).",
+ "apihelp-query+imageusage-param-redirect": "Se a ligazón sobre unha páxina é unha redirección, atopa tamén todas as páxinas que ligan con esa redirección. O límite máximo divídese á metade.",
+ "apihelp-query+imageusage-example-simple": "Mostrar as páxinas que usan [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Obter información sobre as páxinas que usan [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Obter información básica da páxina.",
+ "apihelp-query+info-param-prop": "Que propiedades adicionais obter:",
+ "apihelp-query+info-paramvalue-prop-protection": "Listar o nivel de protección de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-talkid": "O ID de páxina da páxina de conversa para cada páxina que non é páxina de conversa.",
+ "apihelp-query+info-paramvalue-prop-watched": "Listar o estado de vixiancia de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-watchers": "O número de vixiantes, se está permitido.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "O nome dos usuarios que vixían cada páxina e que teñen visitado os cambios recentes a esta páxina, se está autorizado.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "O selo de tempo de notificación da lista de vixiancia de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "O ID de páxina da páxina pai para cada páxina de conversa.",
+ "apihelp-query+info-paramvalue-prop-url": "Devolve unha URL completa, unha URL de modificación, e a URL canónica de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-readable": "Se o usuario pode ler esta páxina.",
+ "apihelp-query+info-paramvalue-prop-preload": "Devolve o texto devolto por EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Devolve a forma na que se visualiza actualmente o título da páxina.",
+ "apihelp-query+info-param-testactions": "Proba se o usuario actual pode realizar certas accións na páxina.",
+ "apihelp-query+info-param-token": "Usar [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] no canto diso.",
+ "apihelp-query+info-example-simple": "Obter información sobre a páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Obter información xeral e de protección sobre a páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "Atopar todas as páxina que ligan á ligazón interwiki indicada.",
+ "apihelp-query+iwbacklinks-extended-description": "Pode usarse para atopar todas as ligazóns cun prefixo, ou todas as ligazóns a un título (co prefixo indicado). Se non se usa ningún parámetro funciona como \"todas as ligazóns interwiki\".",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefixo para a interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+iwbacklinks-param-prop": "Que propiedades obter:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Engade o prefixo da interwiki.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Engade o título da interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+iwbacklinks-example-simple": "Obter as páxinas ligadas a [[wikibooks:Test]]",
+ "apihelp-query+iwbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
+ "apihelp-query+iwlinks-param-url": "Se obter a URL completa (non pode usarse con $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interwiki:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Engade a URL completa.",
+ "apihelp-query+iwlinks-param-limit": "Cantas ligazóns interwiki devolver.",
+ "apihelp-query+iwlinks-param-prefix": "Só devolver ligazóns interwiki con este prefixo.",
+ "apihelp-query+iwlinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+iwlinks-example-simple": "Obter as ligazóns interwiki da páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Atopar todas as páxinas que ligan coa ligazón de lingua dada.",
+ "apihelp-query+langbacklinks-extended-description": "Pode usarse para atopar todas as ligazóns cun código de lingua, ou todas as ligazón a un título (cunha lingua dada). Non usar cun parámetro que sexa \"todas as ligazóns de lingua\".\n\nDecátese que isto pode non considerar as ligazóns de idioma engadidas polas extensións.",
+ "apihelp-query+langbacklinks-param-lang": "Lingua para a ligazón de lingua.",
+ "apihelp-query+langbacklinks-param-title": "Ligazón de lingua a buscar. Debe usarse con $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+langbacklinks-param-prop": "Que propiedades obter:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Engade o código de lingua á ligazón de páxina.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Engade o título da ligazón de lingua.",
+ "apihelp-query+langbacklinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+langbacklinks-example-simple": "Obter as páxinas ligadas a [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
+ "apihelp-query+langlinks-param-limit": "Cantas ligazóns de lingua devolver.",
+ "apihelp-query+langlinks-param-url": "Se obter a URL completa (non pode usarse con <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interlingüística:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Engade a URL completa.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Engade o nome localizado da lingua (o mellor intento). Use <var>$1inlanguagecode</var> para controlar a lingua.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Engade o nome nativo da lingua.",
+ "apihelp-query+langlinks-param-lang": "Devolver só ligazóns de lingua con este código de lingua.",
+ "apihelp-query+langlinks-param-title": "Ligazón a buscar. Debe usarse con <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Código de lingua para nomes de lingua localizados.",
+ "apihelp-query+langlinks-example-simple": "Obter ligazóns interlingua da páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Devolve todas as ligazóns das páxinas indicadas.",
+ "apihelp-query+links-param-namespace": "Mostra ligazóns só neste espazo de nomes.",
+ "apihelp-query+links-param-limit": "Cantas ligazóns devolver.",
+ "apihelp-query+links-param-titles": "Listar só as ligazóns a eses títulos. Útil para verificar se unha páxina concreta liga a un título determinado.",
+ "apihelp-query+links-param-dir": "Dirección na cal listar.",
+ "apihelp-query+links-example-simple": "Obter as ligazóns da páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-generator": "Obter información sobre as ligazóns de páxina da <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Obter as ligazóns á páxina <kbd>Main Page</kbd> nos espazos de nome {{ns:user}} e {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Atopar todas as páxinas que ligan coas páxinas dadas.",
+ "apihelp-query+linkshere-param-prop": "Que propiedades obter:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "ID de cada páxina.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Título de cada páxina.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Marca de se a páxina é unha redirección.",
+ "apihelp-query+linkshere-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
+ "apihelp-query+linkshere-param-limit": "Cantos mostrar.",
+ "apihelp-query+linkshere-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+ "apihelp-query+linkshere-example-simple": "Obter unha lista que ligan á [[Main Page]]",
+ "apihelp-query+linkshere-example-generator": "Obter a información das páxinas que ligan á [[Main Page]].",
+ "apihelp-query+logevents-summary": "Obter os eventos dos rexistros.",
+ "apihelp-query+logevents-param-prop": "Que propiedades obter:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Engade o identificador do evento.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Engade o título da páxina para o evento.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Engade o tipo de evento.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Engade o usuario responsable do evento.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Engade o identificador do usuario responsable do evento.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Engade o selo de tempo do evento.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Engade o comentario do evento.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Engade o comentario analizado do evento.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Lista detalles adicionais do evento.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Lista as etiquetas do evento.",
+ "apihelp-query+logevents-param-type": "Filtrar as entradas do rexistro para mostrar só as deste tipo.",
+ "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Na lista de posibles valores, valores coa máscara asterisco como <kbd>action/*</kbd> poden ter diferentes cadeas despois da barra (/).",
+ "apihelp-query+logevents-param-start": "Selo de tempo no que comezar a enumeración.",
+ "apihelp-query+logevents-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+logevents-param-user": "Filtrar entradas ás feitas polo usuario indicado.",
+ "apihelp-query+logevents-param-title": "Filtrar entradas ás asociadas á páxina indicada.",
+ "apihelp-query+logevents-param-namespace": "Filtrar entradas ás do espazo de nomes indicado.",
+ "apihelp-query+logevents-param-prefix": "Filtrar entradas ás que comezan por este prefixo.",
+ "apihelp-query+logevents-param-tag": "Só listar entradas de evento marcadas con esta etiqueta.",
+ "apihelp-query+logevents-param-limit": "Número total de entradas de evento a devolver.",
+ "apihelp-query+logevents-example-simple": "Lista de eventos recentes do rexistro.",
+ "apihelp-query+pagepropnames-summary": "Listar os nomes de todas as propiedades de páxina usados na wiki.",
+ "apihelp-query+pagepropnames-param-limit": "Máximo número de nomes a retornar.",
+ "apihelp-query+pagepropnames-example-simple": "Obter os dez primeiros nomes de propiedade.",
+ "apihelp-query+pageprops-summary": "Obter varias propiedades de páxina definidas no contido da páxina.",
+ "apihelp-query+pageprops-param-prop": "Listar só estas propiedades de páxina (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> devolve os nomes das propiedades de páxina usados). Útil para verificar se as páxinas usan unha determinada propiedade de páxina.",
+ "apihelp-query+pageprops-example-simple": "Obter as propiedades para as páxinas <kbd>Main Page</kbd> e <kbd>MediaWiki</kbd>",
+ "apihelp-query+pageswithprop-summary": "Mostrar a lista de páxinas que empregan unha propiedade determinada.",
+ "apihelp-query+pageswithprop-param-propname": "Propiedade de páxina para a que enumerar as páxinas (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> devolve os nomes das propiedades de páxina en uso).",
+ "apihelp-query+pageswithprop-param-prop": "Que información incluír:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Engade o ID da páxina.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Engade o título e o ID do espazo de nomes da páxina.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Engade o valor da propiedade de páxina.",
+ "apihelp-query+pageswithprop-param-limit": "Máximo número de páxinas a retornar.",
+ "apihelp-query+pageswithprop-param-dir": "En que dirección ordenar.",
+ "apihelp-query+pageswithprop-example-simple": "Lista as dez primeiras páxinas que usan <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Obter información adicional das dez primeiras páxinas que usan <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Facer unha busca de prefixo nos títulos das páxinas.",
+ "apihelp-query+prefixsearch-extended-description": "A pesar das semellanzas nos nomes, este módulo non pretende ser equivalente a [[Special:PrefixIndex]]; para iso consulte <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> co parámetro <kbd>apprefix</kbd>. O propósito deste módulo é semellante ó de <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: para coller a entrada do usuario e proporcionar mellores os títulos que mellor se lle adapten. Dependendo do motor de buscas do servidor, isto pode incluír corrección de erros, evitar as redireccións, ou outras heurísticas.",
+ "apihelp-query+prefixsearch-param-search": "Buscar texto.",
+ "apihelp-query+prefixsearch-param-namespace": "Espazo de nomes no que buscar.",
+ "apihelp-query+prefixsearch-param-limit": "Número máximo de resultados a visualizar.",
+ "apihelp-query+prefixsearch-param-offset": "Número de resultados a saltar.",
+ "apihelp-query+prefixsearch-example-simple": "Buscar títulos de páxina que comecen con <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Buscar o perfil a usar.",
+ "apihelp-query+protectedtitles-summary": "Listar todos os títulos protexidos en creación.",
+ "apihelp-query+protectedtitles-param-namespace": "Só listar títulos nestes espazos de nomes.",
+ "apihelp-query+protectedtitles-param-level": "Só listar títulos con estos niveis de protección.",
+ "apihelp-query+protectedtitles-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+protectedtitles-param-start": "Comezar a listar neste selo de tempo de protección.",
+ "apihelp-query+protectedtitles-param-end": "Rematar de listar neste selo de tempo de protección.",
+ "apihelp-query+protectedtitles-param-prop": "Que propiedades obter:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Engade o selo de tempo de cando se fixo a protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Engade o usuario que fixo a protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Engade o ID do usuario que fixo a protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Engade o comentario da protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Engade o comentario analizado da protección.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Engade o selo de tempo no que rematará a protección",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Engade o nivel de protección.",
+ "apihelp-query+protectedtitles-example-simple": "Listar títulos protexidos",
+ "apihelp-query+protectedtitles-example-generator": "Atopar ligazóns ós títulos protexidos no espazo de nomes principal",
+ "apihelp-query+querypage-summary": "Obtén unha lista proporcionada por unha páxina especial basada en QueryPage.",
+ "apihelp-query+querypage-param-page": "Nome da páxina especial. Teña en conta que diferencia entre maiúsculas e minúsculas.",
+ "apihelp-query+querypage-param-limit": "Número de resultados a visualizar.",
+ "apihelp-query+querypage-example-ancientpages": "Resultados devoltos de [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Obter un conxunto de páxinas aleatorias.",
+ "apihelp-query+random-extended-description": "As páxinas están listadas nunha secuencia fixa, só o punto de comezo é aleatorio. Isto significa que se, por exemplo, a <samp>Main Page</samp> é a primeira páxina aleatoria da lista, a <samp>Lista de monos ficticios</samp> será <em>sempre</em> a segunda, <samp>Lista de xente en selos de Vanuatu</samp> será a terceira, etc.",
+ "apihelp-query+random-param-namespace": "Devolver páxinas só neste espazo de nomes.",
+ "apihelp-query+random-param-limit": "Limitar cantas páxinas aleatorias se van devolver.",
+ "apihelp-query+random-param-redirect": "No canto use <kbd>$1filterredir=redirects</kbd>.",
+ "apihelp-query+random-param-filterredir": "Como filtrar para redireccións.",
+ "apihelp-query+random-example-simple": "Obter dúas páxinas aleatorias do espazo de nomes principal.",
+ "apihelp-query+random-example-generator": "Obter a información da páxina de dúas páxinas aleatorias do espazo de nomes principal.",
+ "apihelp-query+recentchanges-summary": "Enumerar cambios recentes.",
+ "apihelp-query+recentchanges-param-start": "Selo de tempo para comezar a enumeración.",
+ "apihelp-query+recentchanges-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+recentchanges-param-namespace": "Filtrar os cambios a só eses espazos de nomes.",
+ "apihelp-query+recentchanges-param-user": "Só listar cambios deste usuario.",
+ "apihelp-query+recentchanges-param-excludeuser": "Non listar cambios deste usuario.",
+ "apihelp-query+recentchanges-param-tag": "Só listar cambios marcados con esta etiqueta.",
+ "apihelp-query+recentchanges-param-prop": "Inclúe información adicional:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Engade o usuario responsable da modificación e marca se é unha dirección IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Engade o identificador do usuario responsable da edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Engade o comentario da edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Engade o comentario analizado da edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Engade os indicadores da edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Engade o selo de tempo da edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Engade o título da páxina da edición.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Engade o identificador da páxina, o identificador dos cambios recentes e o identificador da versión nova e da vella.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Engade a lonxitude nova e vella da páxina en bytes.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Pon unha marca se a páxina é unha redirección.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Marca as edicións vixiables como vixiadas ou non vixiadas.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Engade información do rexistro (identificador de rexistro, tipo de rexistro, etc) nas entradas do rexistro.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Lista as etiquetas da entrada.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Engade o control de contido para as entradas asociadas a unha revisión.",
+ "apihelp-query+recentchanges-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
+ "apihelp-query+recentchanges-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+recentchanges-param-type": "Que tipos de cambios mostrar.",
+ "apihelp-query+recentchanges-param-toponly": "Listar só cambios que son a última revisión.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Cando é usado como xerador, xera identificadore de revisión no canto de títulos. As entradas de modificacións recentes sen identificadores de revisión asociados (p. ex. a maioría das entradas de rexistro) non xerarán nada.",
+ "apihelp-query+recentchanges-example-simple": "Listar cambios recentes.",
+ "apihelp-query+recentchanges-example-generator": "Obter a información de páxina sobre cambios recentes sen vixiancia.",
+ "apihelp-query+redirects-summary": "Devolve todas as redireccións das páxinas indicadas.",
+ "apihelp-query+redirects-param-prop": "Que propiedades recuperar:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "ID de páxina de cada redirección.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Título de cada redirección.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Fragmento de cada redirección, se hai algún.",
+ "apihelp-query+redirects-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
+ "apihelp-query+redirects-param-limit": "Cantos redireccións devolver.",
+ "apihelp-query+redirects-param-show": "Só mostrar elementos que cumpran estos criterios:\n;fragment:Só mostrar redireccións que teñan un fragmento.\n;!fragment:Só mostrar redireccións que non teñan un fragmento.",
+ "apihelp-query+redirects-example-simple": "Obter unha lista de redireccións á [[Main Page]]",
+ "apihelp-query+redirects-example-generator": "Obter información sobre tódalas redireccións á [[Main Page]]",
+ "apihelp-query+revisions-summary": "Obter información da revisión.",
+ "apihelp-query+revisions-extended-description": "Pode usarse de varias formas:\n#Obter datos sobre un conxunto de páxinas (última modificación), fixando os títulos ou os IDs das páxinas.\n#Obter as modificacións da páxina indicada, usando os títulos ou os IDs de páxinas con comezar, rematar ou límite.\n#Obter os datos sobre un conxunto de modificacións fixando os seus IDs cos seus IDs de modificación.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Só pode usarse cunha única páxina (mode #2).",
+ "apihelp-query+revisions-param-startid": "Desde que ID de revisión comezar a enumeración.",
+ "apihelp-query+revisions-param-endid": "Rematar a enumeración de revisión na data e hora desta revisión. A revisión ten que existir, pero non precisa pertencer a esta páxina.",
+ "apihelp-query+revisions-param-start": "Desde que selo de tempo comezar a enumeración.",
+ "apihelp-query+revisions-param-end": "Enumerar desde este selo de tempo.",
+ "apihelp-query+revisions-param-user": "Só incluir revisión feitas polo usuario.",
+ "apihelp-query+revisions-param-excludeuser": "Excluír revisións feitas polo usuario.",
+ "apihelp-query+revisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+revisions-param-token": "Que identificadores obter para cada revisión.",
+ "apihelp-query+revisions-example-content": "Obter datos con contido da última revisión dos títulos <kbd>API</kbd> e <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Mostrar as cinco últimas revisión da <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+revisions-example-first5": "Mostar as cinco primeiras revisións da <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> feitas despois de 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> que non foron feitas polo usuario anónimo <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Mostrar as cinco primeiras revisión da <kbd>Páxina Principal</kbd> feitas polo usuario <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Que propiedades mostrar para cada modificación:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "O identificador da modificación.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Marcas de modificación (menor).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "O selo de tempo da modificación.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Usuario que fixo a revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "Identificador de usuario do creador da modificación.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Lonxitude (en bytes) da revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) da modificación.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Identificador do modelo de contido da modificación.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Comentario do usuario para a modificación.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Comentario analizado do usuario para a modificación.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Texto da revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Etiquetas para a revisión.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Obsoleto.</span> En substitución, use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Árbore de análise XML do contido da modificación (precisa o modelo de contido <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Limitar cantas revisións se van devolver.",
+ "apihelp-query+revisions+base-param-expandtemplates": "En substitución, use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>. Expandir os modelos no contido da revisión (require $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "En substitución, use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Xenerar a árbore de análise XML para o contido da revisión (require $1prop=content; substituído por <kbd>$1prop=parsetree</kbd>).",
+ "apihelp-query+revisions+base-param-parse": "En substitución, use <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Analizar o contido da revisión (require $1prop=content). Por razóns de rendemento, se se usa esta opción, $1limit cámbiase a 1.",
+ "apihelp-query+revisions+base-param-section": "Recuperar unicamente o contido deste número de sección.",
+ "apihelp-query+revisions+base-param-diffto": "En substitución, use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. ID de revisión a comparar con cada revisión. Use <kbd>prev</kbd>, <kbd>next</kbd> e <kbd>cur</kbd> para a versión precedente, seguinte e actual respectivamente.",
+ "apihelp-query+revisions+base-param-difftotext": "En substitución, use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Texto co que comparar cada revisión. Só compara un número limitado de revisións. Ignora <var>$1diffto</var>. Se <var>$1section</var> ten valor, só se comparará co texto esa sección.",
+ "apihelp-query+revisions+base-param-difftotextpst": "En substitución, use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Facer unha transformación sobre o texto antes do gardado e antes de comparalo. Só válidoo cando se usa con <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "Formato de serialización usado por <var>$1difftotext</var> e esperado para a saída do contido.",
+ "apihelp-query+search-summary": "Facer unha busca por texto completo.",
+ "apihelp-query+search-param-search": "Buscar os títulos de páxina ou contido que coincidan con este valor. Pode usar a cadea de busca para invocar funcións especiais de busca, dependendo do motor de busca que teña a wiki.",
+ "apihelp-query+search-param-namespace": "Buscar só nestes espazos de nomes.",
+ "apihelp-query+search-param-what": "Que tipo de busca lanzar.",
+ "apihelp-query+search-param-info": "Que metadatos devolver.",
+ "apihelp-query+search-param-prop": "Que propiedades devolver:",
+ "apihelp-query+search-param-qiprofile": "Perfil independente das consultas a usar (afecta ó algoritmo de clasificación).",
+ "apihelp-query+search-paramvalue-prop-size": "Engade o tamaño da páxina en bytes.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Engade o número de palabras da páxina.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Engade o selo de tempo da última vez que foi editada a páxina.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Engade o fragmento analizado da páxina.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Engade un fragmento analizado do título da páxina.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Engade un fragmento analizado do título da redirección.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Engade o título da redirección asociada.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Engade un fragmento analizado do título de sección asociado.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Engade o título da sección asociada.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Engade un fragmento analizado da categoría asociada.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Engade unha marca indicando se o resultado da busca é un ficheiro.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignorado.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignorado.",
+ "apihelp-query+search-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+search-param-interwiki": "Incluir na busca resultados de interwikis, se é posible.",
+ "apihelp-query+search-param-backend": "Que servidor de busca usar, se non se indica usa o que hai por defecto.",
+ "apihelp-query+search-param-enablerewrites": "Habilitar reescritura da consulta interna. Algúns motores de busca poden reescribir a consulta a outra que consideran que dará mellores resultados, por exemplo, corrixindo erros de ortografía.",
+ "apihelp-query+search-example-simple": "Buscar <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Buscar texto por <kbd>significado</kbd>.",
+ "apihelp-query+search-example-generator": "Obter información da páxina sobre as páxinas devoltas por unha busca por <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Devolver información xeral sobre o sitio.",
+ "apihelp-query+siteinfo-param-prop": "Que información obter:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Información xeral do sistema.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista dos espazos de nomes rexistrados e os seus nomes canónicos.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista de alias de espazos de nomes rexistrados .",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista de alias de páxinas especiais.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista de palabras máxicas e os seus alias.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devolve as estatísticas do sitio.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Devolve o mapa interwiki (opcionalmente filtrado, opcionalmente localizado usando <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devolve o servidor de base de datos con maior retardo de replicación.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Devolve os grupos de usuarios e os permisos que teñen asociados.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Devolve as bibliotecas de funcións software instaladas na wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Devolve as extensións instaladas na wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Devolve a lista de extenxións de ficheiro (tipos de ficheiro) permitidas para subir ficheiros.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devolve a información dos dereitos (licenza) da wiki se está dispoñible.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devolve información dos tipos de restricións (protección) dispoñibles.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Devolve unha lista dos idiomas que soporta Mediawiki (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Devolve unha lista de códigos de lingua para os que [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] está activo, e as variantes soportadas para cada un.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Devolve unha lista de todas as aparencias dispoñibles (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>, noutro caso no idioma do contido).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Devolve unha lista de etiquetas de extensión de analizador.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Devolve unha lista de ganchos de función de analizador.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve unha lista de todos os ganchos subscritos (contido de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Devolve unha lista de identificadores de variable.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devolve unha lista de protocolos que están permitidos nas ligazóns externas.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devolve os valores por defecto das preferencias de usuario.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Devolve a configuración do diálogo de subas.",
+ "apihelp-query+siteinfo-param-filteriw": "Só devolver entradas locais ou só non locais da correspondencia interwiki.",
+ "apihelp-query+siteinfo-param-showalldb": "Listar todos os servidores de base de datos, non só o que teña máis retardo.",
+ "apihelp-query+siteinfo-param-numberingroup": "Listar o número de usuarios nos grupos de usuarios.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Código de lingua para os nomes de lingua localizados (a mellor forma posible) e nomes de presentación.",
+ "apihelp-query+siteinfo-example-simple": "Obter información do sitio.",
+ "apihelp-query+siteinfo-example-interwiki": "Obter unha lista de prefixos interwiki locais.",
+ "apihelp-query+siteinfo-example-replag": "Revisar o retardo de replicación actual.",
+ "apihelp-query+stashimageinfo-summary": "Devolve a información dos ficheiros almacenados.",
+ "apihelp-query+stashimageinfo-param-filekey": "Clave que identifica unha subida precedente e que foi almacenada temporalmente.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias para $1filekey, para compatibilidade con versións antigas.",
+ "apihelp-query+stashimageinfo-example-simple": "Devolve a información dun ficheiro almacenado.",
+ "apihelp-query+stashimageinfo-example-params": "Devolve as miniaturas de dous ficheiros almacenados.",
+ "apihelp-query+tags-summary": "Lista de marcas de cambios.",
+ "apihelp-query+tags-param-limit": "Máximo número de etiquetas a listar.",
+ "apihelp-query+tags-param-prop": "Que propiedades recuperar:",
+ "apihelp-query+tags-paramvalue-prop-name": "Engade o nome da etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Engade a mensaxe do sistema para a etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-description": "Engade a descrición da etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Engade o número de modificacións e de entradas do rexistro que teñen esta etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Indica se a etiqueta está definida.",
+ "apihelp-query+tags-paramvalue-prop-source": "Obtén as fontes da etiqueta, que poden incluír <samp>extension</samp> para etiquetas definidas en extensión e <samp>manual</samp> para etiquetas que poden ser aplicadas manualmente polos usuarios.",
+ "apihelp-query+tags-paramvalue-prop-active": "Se a etiqueta aínda está a ser usada.",
+ "apihelp-query+tags-example-simple": "Listar as marcas dispoñibles",
+ "apihelp-query+templates-summary": "Devolve todas as páxinas incluídas na páxina indicada.",
+ "apihelp-query+templates-param-namespace": "Mostrar os modelos só nestes espazos de nomes.",
+ "apihelp-query+templates-param-limit": "Número de modelos a devolver.",
+ "apihelp-query+templates-param-templates": "Listar só eses modelos. Útil para verificar se unha páxina concreta ten un modelo determinado.",
+ "apihelp-query+templates-param-dir": "Dirección na cal listar.",
+ "apihelp-query+templates-example-simple": "Coller os modelos usado na <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+templates-example-generator": "Obter información sobre os modelos usados na <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Obter páxinas nos espazos de nomes {{ns:user}} e {{ns:template}} que se transclúen na <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+tokens-summary": "Recupera os identificadores das accións de modificación de datos.",
+ "apihelp-query+tokens-param-type": "Tipos de identificadores a consultar.",
+ "apihelp-query+tokens-example-simple": "Recuperar un identificador csrf (por defecto).",
+ "apihelp-query+tokens-example-types": "Recuperar un identificador vixiancia e un de patrulla.",
+ "apihelp-query+transcludedin-summary": "Atopar todas as páxinas que inclúen ás páxinas indicadas.",
+ "apihelp-query+transcludedin-param-prop": "Que propiedades obter:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID de páxina de cada páxina.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Título de cada páxina.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Marca si a páxina é unha redirección.",
+ "apihelp-query+transcludedin-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
+ "apihelp-query+transcludedin-param-limit": "Cantos mostrar.",
+ "apihelp-query+transcludedin-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+ "apihelp-query+transcludedin-example-simple": "Obter unha lista de páxinas que inclúen a <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Obter información sobre as páxinas que inclúen <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "Mostrar tódalas edicións dun usuario.",
+ "apihelp-query+usercontribs-param-limit": "Máximo número de contribucións a mostar.",
+ "apihelp-query+usercontribs-param-start": "Selo de tempo de comezo ó que volver.",
+ "apihelp-query+usercontribs-param-end": "Selo de tempo de fin ó que volver.",
+ "apihelp-query+usercontribs-param-user": "Usuarios para os que recuperar as contribucións. Non pode ser usado con <var>$1userids</var> ou <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Recuperar as contribucións de todos os usuarios cuxo nome comece por este valor. Non pode usarse con <var>$1user</var> nin con <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "IDs de usuarios para os que recuperar as contribucións. Non pode ser usado con <var>$1user</var> nin con <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Só listar contribucións nestes espazos de nomes.",
+ "apihelp-query+usercontribs-param-prop": "Engade información adicional:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Engade os identificadores de páxina e modificación.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Engade o título e o identificador do espazo de nomes da páxina.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Engade o selo de tempo da modificación.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Engade o comentario da modificación.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Engade o comentario analizado da modificación.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Engade o novo tamaño da modificación.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Engade o delta do tamaño da modificación comparada coa anterior.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Engade os indicadores da modificación.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Marca as modificacións vixiadas.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista as etiquetas da modificación.",
+ "apihelp-query+usercontribs-param-show": "Só mostrar elementos que cumpran estos criterios, p.ex. só edicións menores: <kbd>$2show=!minor</kbd>.\n\nSe está fixado <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd>, as modificacións máis antigas que <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) non se mostrarán.",
+ "apihelp-query+usercontribs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+usercontribs-param-toponly": "Listar só cambios que son a última revisión.",
+ "apihelp-query+usercontribs-example-user": "Mostrar as contribucións do usuario <kbd>Exemplo</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Mostrar contribucións de tódalas direccións IP que comezan por <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-summary": "Obter información sobre o usuario actual.",
+ "apihelp-query+userinfo-param-prop": "Que pezas de información incluír:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Marca se o usuario actual está bloqueado, por que, e por que razón.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Engade unha etiqueta <samp>messages</samp> (mensaxe) se o usuario actual ten mensaxes pendentes.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos os grupos ós que pertence o usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Lista os grupos ós que o usuario actual foi asignado explicitamente, incluíndo a data de caducidade de afiliación a cada grupo.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lista todos so grupos dos que o usuario actual é membro automaticamente.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todos os dereitos que ten o usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lista os grupos ós que o usuario pode engadir ou eliminar a outros usuarios.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas as preferencias que ten seleccionadas o usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Obtén un identificador para cambiar as preferencias do usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Engade o contador de edicións do usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todos o límites de rango aplicados ó usuario actual.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Engade o nome real do usuario.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Engade a dirección de correo electrónico do usuario e a data de autenticación desa dirección.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Reenvía a cabeceira <code>Accept-Language</code> enviada polo cliente nun formato estruturado.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Engade a data de rexistro do usuario.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Engade o número de páxinas sen ler da lista de vixiancia do usuario (máximo $1; devolve <samp>$2</samp> se son máis).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "Engade os identificadores centrais e o estado de acoplamento do usuario.",
+ "apihelp-query+userinfo-param-attachedwiki": "Con <kbd>$1prop=centralids</kbd>, \nindica que o usuario está acoplado á wiki identificada por este identificador.",
+ "apihelp-query+userinfo-example-simple": "Obter información sobre o usuario actual.",
+ "apihelp-query+userinfo-example-data": "Obter información adicional sobre o usuario actual.",
+ "apihelp-query+users-summary": "Obter información sobre unha lista de usuarios.",
+ "apihelp-query+users-param-prop": "Que información incluír:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Etiquetas se o usuario está bloqueado, por quen, e por que razón.",
+ "apihelp-query+users-paramvalue-prop-groups": "Lista todos os grupos ós que pertence cada usuario.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "Lista os grupos ós que foi asignado explicitamente cada usuario, incluíndo a data de caducidade de afiliación a cada grupo.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Lista os grupos dos que un usuario é membro de forma automatica.",
+ "apihelp-query+users-paramvalue-prop-rights": "Lista todos os dereitos que ten cada usuario.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Engade o contador de edicións do usuario.",
+ "apihelp-query+users-paramvalue-prop-registration": "Engade o selo de tempo do rexistro do usuario.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Marca se o usuario pode e quere recibir correos usando [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Marca o xénero do usuario. Devolve \"home\", \"muller\" ou \"descoñecido\".",
+ "apihelp-query+users-paramvalue-prop-centralids": "Engade os identificadores centrais e o estado de acoplamento do usuario.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Indica se unha conta pode ser creada para nomes de usuario válidos pero non rexistrados.",
+ "apihelp-query+users-param-attachedwiki": "Con <kbd>$1prop=centralids</kbd>, \nindica que o usuario está acoplado á wiki identificada por este identificador.",
+ "apihelp-query+users-param-users": "Lista de usuarios para os que obter información.",
+ "apihelp-query+users-param-userids": "Unha lista de identificadores de usuarios dos que obter información.",
+ "apihelp-query+users-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
+ "apihelp-query+users-example-simple": "Mostar información para o usuario <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "Ver os cambios recentes das páxinas na lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-param-allrev": "Incluír múltiples revisións da mesma páxina dentro do intervalo de tempo indicado.",
+ "apihelp-query+watchlist-param-start": "Selo de tempo para comezar a enumeración",
+ "apihelp-query+watchlist-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+watchlist-param-namespace": "Filtrar os cambios a só os espazos de nomes indicados.",
+ "apihelp-query+watchlist-param-user": "Só listar cambios deste usuario.",
+ "apihelp-query+watchlist-param-excludeuser": "Non listar cambios deste usuario.",
+ "apihelp-query+watchlist-param-limit": "Cantos resultados totais mostrar por petición.",
+ "apihelp-query+watchlist-param-prop": "Que propiedades adicionais obter:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Engade os identificadores das revisións e os identificadores das páxinas.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Engade o título da páxina.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Engade etiquetas para a edición.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Engade o usuario que fixo a edición.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Engade o identificador do usuario que fixo a edición.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Engade o comentario da edición.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Engade o comentario analizado da edición.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Engade o selo de tempo da edición.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Marca edicións que están vixiadas.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Engade o tamaño antigo e novo da páxina.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Engade o selo de tempo da última vez en que o usuario foi avisado da modificación.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Engade información do rexistro cando sexa axeitado.",
+ "apihelp-query+watchlist-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Que tipos de cambios mostrar:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Edicións comúns a páxinas.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Cambios externos.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Creacións de páxinas.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Entradas do rexistro",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Modificacións de pertenza á categoría.",
+ "apihelp-query+watchlist-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
+ "apihelp-query+watchlist-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
+ "apihelp-query+watchlist-example-simple": "Listar a última revisión das páxinas recentemente modificadas da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-props": "Buscar información adicional sobre a última revisión das páxinas modificadas recentemente da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-allrev": "Buscar a información sobre todos os cambios recentes das páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-generator": "Buscar a información de páxina das páxinas cambiadas recentemente da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-generator-rev": "Buscar a información da revisión dos cambios recentes de páxinas na lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-wlowner": "Listar a última revisión das páxinas cambiadas recentemente da lista de vixiancia do usuario <kbd>Example</kbd>.",
+ "apihelp-query+watchlistraw-summary": "Obter todas as páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlistraw-param-namespace": "Só listar páxinas nestes espazos de nomes.",
+ "apihelp-query+watchlistraw-param-limit": "Cantos resultados totais mostrar por petición.",
+ "apihelp-query+watchlistraw-param-prop": "Que propiedades adicionais obter:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Engade o selo de tempo da última notificación ó usuario dunha modificación.",
+ "apihelp-query+watchlistraw-param-show": "Só listar os elementos que cumplen estos criterios.",
+ "apihelp-query+watchlistraw-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
+ "apihelp-query+watchlistraw-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
+ "apihelp-query+watchlistraw-param-dir": "Dirección na cal listar.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Título (co prefixo de espazo de nomes) dende o que comezar a enumerar.",
+ "apihelp-query+watchlistraw-param-totitle": "Título (co prefixo de espazo de nomes) no que rematar de enumerar.",
+ "apihelp-query+watchlistraw-example-simple": "Listar páxinas na lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlistraw-example-generator": "Buscar a información de páxina das páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-removeauthenticationdata-summary": "Elimina os datos de autenticación do usuario actual.",
+ "apihelp-removeauthenticationdata-example-simple": "Intenta eliminar os datos de usuario actual para <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Envía un correo de inicialización de contrasinal a un usuario.",
+ "apihelp-resetpassword-extended-description-noroutes": "Non están dispoñibles as rutas de reinicio de contrasinal \n\nActive as rutas en <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> para usar este módulo.",
+ "apihelp-resetpassword-param-user": "Usuario sendo reinicializado.",
+ "apihelp-resetpassword-param-email": "Está reinicializándose o enderezo de correo electrónico do usuario.",
+ "apihelp-resetpassword-example-user": "Enviar un correo de reinicialización de contrasinal ó usuario <kbd>Exemplo</kbd>.",
+ "apihelp-resetpassword-example-email": "Enviar un correo de reinicialización de contrasinal a todos os usuarios con enderezo de correo electrónico <kbd>usario@exemplo.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Borrar e restaurar revisións.",
+ "apihelp-revisiondelete-param-type": "Tipo de borrado de revisión a ser tratada.",
+ "apihelp-revisiondelete-param-target": "Título de páxina para o borrado da revisión, se requerido para o tipo.",
+ "apihelp-revisiondelete-param-ids": "Identificadores para as revisións a ser borradas.",
+ "apihelp-revisiondelete-param-hide": "Que ocultar para cada revisión.",
+ "apihelp-revisiondelete-param-show": "Que mostrar para cada revisión.",
+ "apihelp-revisiondelete-param-suppress": "Eliminar os datos dos administradores así coma dos doutros.",
+ "apihelp-revisiondelete-param-reason": "Razón para o borrado ou restaurado.",
+ "apihelp-revisiondelete-param-tags": "Etiquetas a aplicar á entrada no rexistro de borrados.",
+ "apihelp-revisiondelete-example-revision": "Ocultar contido para revisión <kbd>12345</kbd> na <kbd>Páxina Principal</kbd>.",
+ "apihelp-revisiondelete-example-log": "Ocultar todos os datos da entrada de rexistro <kbd>67890</kbd> coa razón <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "Desfacer a última edición da páxina.",
+ "apihelp-rollback-extended-description": "Se o último usuario que editou a páxina fixo varias edicións consecutivas, serán revertidas todas.",
+ "apihelp-rollback-param-title": "Título da páxina a desfacer. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "ID da páxina a desfacer. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Etiquetas a aplicar á reversión.",
+ "apihelp-rollback-param-user": "Nome do usuario cuxas modificacións van a desfacerse.",
+ "apihelp-rollback-param-summary": "Personalizar o resumo de edición. Se está baleiro, usarase o resumo por defecto.",
+ "apihelp-rollback-param-markbot": "Marcar as edicións revertidas e a reversión como edicións de bot.",
+ "apihelp-rollback-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-rollback-example-simple": "Desfacer as últimas edicións á <kbd>Páxina Principal</kbd> do usuario <kbd>Exemplo</kbd>.",
+ "apihelp-rollback-example-summary": "Desfacer as últimas edicións á páxina <kbd>Main Page</kbd> polo usuario da dirección IP <kbd>192.0.2.5</kbd> co resumo de edición <kbd>Revertindo vandalismo</kbd>, marcar esas edicións e a reversión como edicións de bot.",
+ "apihelp-rsd-summary": "Exportar un esquema RSD (Really Simple Discovery, Descubrimento Moi Simple).",
+ "apihelp-rsd-example-simple": "Exportar o esquema RSD.",
+ "apihelp-setnotificationtimestamp-summary": "Actualizar a data e hora de notificación das páxinas vixiadas.",
+ "apihelp-setnotificationtimestamp-extended-description": "Isto afecta ao realce das páxinas modificadas na lista de vixiancia e no historial, e ao envío de correos cando a preferencia \"{{int:tog-enotifwatchlistpages}}\" está activada.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Traballar en tódalas páxinas vixiadas.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Selo de tempo ó que fixar a notificación.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Modificación á que fixar o selo de tempo de modificación (só unha páxina).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Modificación na que fixar o selo de tempo de modificación máis recente (só unha páxina).",
+ "apihelp-setnotificationtimestamp-example-all": "Restaurar o estado de notificación para toda a páxina de vixiancia",
+ "apihelp-setnotificationtimestamp-example-page": "Restaurar o estado de notificación para a <kbd>Páxina Principal</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixar o selo de tempo de notificación para a <kbd>Main page</kbd> de forma que todas as edicións dende o 1 se xaneiro de 2012 queden sen revisar.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Restaurar o estado de notificación para as páxinas no espazo de nomes de <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "Cambiar a lingua dunha páxina.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Neste wiki non se permite modificar a lingua das páxinas.\n\nActive <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> para utilizar esta acción.",
+ "apihelp-setpagelanguage-param-title": "Título da páxina cuxa lingua quere cambiar. Non se pode usar xunto con <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "Identificador da páxina cuxa lingua quere cambiar. Non se pode usar xunto con <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Código da lingua á que se quere cambiar a páxina. Use <kbd>default</kbd> para restablecer a páxina á lingua por defecto do contido da wiki.",
+ "apihelp-setpagelanguage-param-reason": "Motivo do cambio.",
+ "apihelp-setpagelanguage-param-tags": "Cambiar as etiquetas a aplicar á entrada de rexistro resultante desta acción.",
+ "apihelp-setpagelanguage-example-language": "Cambiar a lingua de <kbd>Main Page</kbd> ó éuscaro.",
+ "apihelp-setpagelanguage-example-default": "Cambiar a lingua da páxina con identificador 123 á lingua predeterminada para o contido da wiki.",
+ "apihelp-stashedit-summary": "Preparar unha edición na caché compartida.",
+ "apihelp-stashedit-extended-description": "Está previsto que sexa usado vía AJAX dende o formulario de edición para mellorar o rendemento de gardado da páxina.",
+ "apihelp-stashedit-param-title": "Título da páxina que se está a editar.",
+ "apihelp-stashedit-param-section": "Número de selección. O <kbd>0</kbd> é para a sección superior, <kbd>novo</kbd> para unha sección nova.",
+ "apihelp-stashedit-param-sectiontitle": "Título para unha nova sección.",
+ "apihelp-stashedit-param-text": "Contido da páxina.",
+ "apihelp-stashedit-param-stashedtexthash": "Función hash do contido da páxina dunha reserva anterior para ser usada.",
+ "apihelp-stashedit-param-contentmodel": "Modelo de contido para o novo contido.",
+ "apihelp-stashedit-param-contentformat": "Formato de serialización de contido utilizado para o texto de entrada.",
+ "apihelp-stashedit-param-baserevid": "Identificador da revisión da revisión de base.",
+ "apihelp-stashedit-param-summary": "Resumo do cambio.",
+ "apihelp-tag-summary": "Engadir ou eliminar etiquetas de cambio de revisións individuais ou entradas de rexistro.",
+ "apihelp-tag-param-rcid": "Identificadores de un ou máis cambios recentes nos que engadir ou eliminar a etiqueta.",
+ "apihelp-tag-param-revid": "Identificadores de unha ou máis revisións nas que engadir ou eliminar a etiqueta.",
+ "apihelp-tag-param-logid": "Identificadores de unha ou máis entradas do rexistro nas que engadir ou eliminar a etiqueta.",
+ "apihelp-tag-param-add": "Etiquetas a engadir. Só poden engadirse etiquetas definidas manualmente.",
+ "apihelp-tag-param-remove": "Etiquetas a eliminar. Só se poden eliminar as etiquetas definidas manualmente ou que non teñen ningunha definición.",
+ "apihelp-tag-param-reason": "Razón para o cambio.",
+ "apihelp-tag-param-tags": "Etiquetas a aplicar á entrada de rexistro que será creada como resultado desta acción.",
+ "apihelp-tag-example-rev": "Engadir a etiqueta <kbd>vandalismo</kbd> á revisión con identificador 123 sen indicar un motivo",
+ "apihelp-tag-example-log": "Eliminar a etiqueta <kbd>publicidade</kbd> da entrada do rexistro con identificador 123 co motivo <kbd>aplicada incorrectamente</kbd>",
+ "apihelp-tokens-summary": "Obter os identificadores para accións de modificación de datos.",
+ "apihelp-tokens-extended-description": "Este módulo está obsoleto e foi substituído por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Tipos de identificadores a consultar.",
+ "apihelp-tokens-example-edit": "Recuperar un identificador de modificación (por defecto).",
+ "apihelp-tokens-example-emailmove": "Recuperar un identificador de correo e un identificador de movemento.",
+ "apihelp-unblock-summary": "Desbloquear un usuario.",
+ "apihelp-unblock-param-id": "ID do bloque a desbloquear (obtido de <kbd>list=blocks</kbd>). Non pode usarse xunto con <var>$1user</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Nome de usuario, enderezo IP ou rango de enderezos IP a desbloquear. Non pode usarse xunto con <var>$1id</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "ID de usuario a desbloquear. Non pode usarse xunto con <var>$1id</var> ou <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Razón para desbloquear.",
+ "apihelp-unblock-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de bloqueo.",
+ "apihelp-unblock-example-id": "Desbloquear bloqueo ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Desbloquear usuario <kbd>Bob</kbd> con razón <kbd>Síntoo Bob</kbd>.",
+ "apihelp-undelete-summary": "Restaurar modificacións dunha páxina borrada.",
+ "apihelp-undelete-extended-description": "Unha lista de modificacións borradas (incluíndo os seus selos de tempo) pode consultarse a través de [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], e unha lista de IDs de ficheiros borrados pode consultarse a través de [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Título da páxina a restaurar.",
+ "apihelp-undelete-param-reason": "Razón para restaurar.",
+ "apihelp-undelete-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de borrado.",
+ "apihelp-undelete-param-timestamps": "Selos de tempo das modificacións a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, restaurarase todo.",
+ "apihelp-undelete-param-fileids": "IDs das modificacións de ficheiro a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, serán restauradas todas.",
+ "apihelp-undelete-param-watchlist": "Engadir ou eliminar a páxina da lista de vixiancia do usuario actual sen condicións, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-undelete-example-page": "Restaurar a <kbd>Páxina Principal</kbd>.",
+ "apihelp-undelete-example-revisions": "Restaurar dúas revisións de <kbd>Main Page</kbd>.",
+ "apihelp-unlinkaccount-summary": "Elimina unha conta vinculada do usuario actual.",
+ "apihelp-unlinkaccount-example-simple": "Tentar eliminar a ligazón do usuario actual co provedor asociado con <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-summary": "Subir un ficheiro, ou obter o estado das subas pendentes.",
+ "apihelp-upload-extended-description": "Hai varios métodos dispoñibles:\n*Subir o contido do ficheiro directamente, usando o parámetro <var>$1file</var>.\n*Subir o ficheiro por partes, usando os parámetros <var>$1filesize</var>, <var>$1chunk</var>, e <var>$1offset</var>.\n*Mandar ó servidor MediaWiki que colla un ficheiro dunha URL, usando o parámetro <var>$1url</var>.\n*Completar unha suba anterior que fallou a causa dos avisos, usando o parámetro <var>$1filekey</var>. \nTeña en conta que o HTTP POST debe facerse como suba de ficheiro (p.ex. usando <code>multipart/form-data</code>)cando se envie o <var>$1file</var>.",
+ "apihelp-upload-param-filename": "Nome de ficheiro obxectivo.",
+ "apihelp-upload-param-comment": "Subir comentario. Tamén usado como texto da páxina inicial para ficheiros novos se non se especifica <var>$1text</var>.",
+ "apihelp-upload-param-tags": "Cambiar etiquetas a aplicar á entrada do rexistro de subas e á revisión de páxina de ficheiro.",
+ "apihelp-upload-param-text": "Texto da páxina inicial para novos ficheiros.",
+ "apihelp-upload-param-watch": "Vixiar a páxina.",
+ "apihelp-upload-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-upload-param-ignorewarnings": "Ignorar as advertencias.",
+ "apihelp-upload-param-file": "Contido do ficheiro.",
+ "apihelp-upload-param-url": "URL onde buscar o ficheiro.",
+ "apihelp-upload-param-filekey": "Clave que identifica unha subida precedente e que foi almacenada temporalmente.",
+ "apihelp-upload-param-sessionkey": "Igual a $1filekey, mantido por razóns de compatibilidade con procesos antigos.",
+ "apihelp-upload-param-stash": "Se está indicado, o servidor almacenará o ficheiro temporalmente no canto de engadilo ó repositorio.",
+ "apihelp-upload-param-filesize": "Tamaño de ficheiro completo da carga.",
+ "apihelp-upload-param-offset": "Desaxuste do bloque en bytes.",
+ "apihelp-upload-param-chunk": "Contido do bloque.",
+ "apihelp-upload-param-async": "Facer de forma asíncrona as operacións de ficheiro potencialmente grandes cando sexa posible.",
+ "apihelp-upload-param-checkstatus": "Só buscar o estado da subida da clave de ficheiro indicada.",
+ "apihelp-upload-example-url": "Carga dunha URL",
+ "apihelp-upload-example-filekey": "Completar carga que fallou debido a avisos",
+ "apihelp-userrights-summary": "Cambiar a pertencia dun usuario a un grupo.",
+ "apihelp-userrights-param-user": "Nome de usuario.",
+ "apihelp-userrights-param-userid": "ID de usuario.",
+ "apihelp-userrights-param-add": "Engadir o usuario a estes grupos, ou se xa é membro, actualizar a caducidade da súa afiliación.",
+ "apihelp-userrights-param-expiry": "Marcas de tempo de caducidade. Poden ser relativas (por exemplo, <kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absolutas (por exemplo, <kbd>2014-09-18T12:34:56Z</kbd>). Se só se fixa unha marca de tempo, utilizarase para tódolos grupos que se pasen ó parámetro <var>$1add</var>. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd> para que a pertenza ó grupo non teña data de caducidade.",
+ "apihelp-userrights-param-remove": "Eliminar o usuario destes grupos.",
+ "apihelp-userrights-param-reason": "Motivo para o cambio.",
+ "apihelp-userrights-param-tags": "Cambia as etiquetas a aplicar á entrada do rexistro de dereitos de usuario.",
+ "apihelp-userrights-example-user": "Engadir o usuario <kbd>FooBot</kbd> ó grupo <kbd>bot</kbd>, e eliminar dos grupos <kbd>sysop</kbd> e <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Engadir ó usuario con ID <kbd>123</kbd> ó grupo <kbd>bot</kbd>, e borralo dos grupos <kbd>sysop</kbd> e <kbd>burócrata</kbd>.",
+ "apihelp-userrights-example-expiry": "Engadir o usuario <kbd>SometimeSysop</kbd> ó grupo <kbd>sysop</kbd> por 1 mes.",
+ "apihelp-validatepassword-summary": "Valida un contrasinal contra as políticas de contrasinais da wiki.",
+ "apihelp-validatepassword-extended-description": "A validez é <samp>Good</samp> se o contrasinal é aceptable, <samp>Change</samp> se o contrasinal pode usarse para iniciar sesión pero debe cambiarse ou <samp>Invalid</samp> se o contrasinal non se pode usar.",
+ "apihelp-validatepassword-param-password": "Contrasinal a validar.",
+ "apihelp-validatepassword-param-user": "Nome de usuario, para probas de creación de contas. O usuario nomeado non debe existir.",
+ "apihelp-validatepassword-param-email": "Enderezo de correo electrónico, para probas de creación de contas.",
+ "apihelp-validatepassword-param-realname": "Nome real, para probas de creación de contas.",
+ "apihelp-validatepassword-example-1": "Validar o contrasinal <kbd>foobar</kbd> para o usuario actual.",
+ "apihelp-validatepassword-example-2": "Validar o contrasinal <kbd>qwerty</kbd> para a creación do usuario <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "Engadir ou borrar páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-watch-param-title": "Páxina a vixiar/deixar de vixiar. Usar no canto <var>$1titles</var>.",
+ "apihelp-watch-param-unwatch": "Se está definido, a páxina deixará de estar vixiada en vez de vixiada.",
+ "apihelp-watch-example-watch": "Vixiar a páxina <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Deixar de vixiar a páxina <kbd>Páxina Principal</kbd>.",
+ "apihelp-watch-example-generator": "Vixiar as primeiras páxinas no espazo de nomes principal",
+ "apihelp-format-example-generic": "Devolver o resultado da consulta no formato $1.",
+ "apihelp-format-param-wrappedhtml": "Devolver o HTML formatado e os módulos ResourceLoader asociados como un obxecto JSON.",
+ "apihelp-json-summary": "Datos de saída en formato JSON.",
+ "apihelp-json-param-callback": "Se está especificado, inclúe a saída na chamada da función indicada. Para maior seguridade, todos os datos específicos do usuario serán restrinxidos.",
+ "apihelp-json-param-utf8": "Se está especificado, codifica a maioría (pero non todos) dos caracteres ASCII como UTF-8 no canto de reemprazalos con secuencias de escape hexadecimais. Por defecto cando <var>formatversion</var> non é <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Se está indicado, codifica todos os caracteres que non sexan ASCII usando secuencias de escape hexadecimais. Por defecto cando <var>formatversion</var> é <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Formato de saída:\n;1:Formato compatible con versións anteriores(booleanos estilo XML,claves <samp>*</samp> para nodos, etc.).\n;2:Formato moderno experimental. Os detalles poden cambiar!\n;latest:Usa o último formato (actualmente kbd>2</kbd>), pode cambiar sen aviso previo.",
+ "apihelp-jsonfm-summary": "Datos de saída en formato JSON(impresión en HTML).",
+ "apihelp-none-summary": "Ningunha saída.",
+ "apihelp-php-summary": "Datos de saída en formato serializado de PHP.",
+ "apihelp-php-param-formatversion": "Formato de saída:\n;1:Formato compatible con versións anteriores(booleanos estilo XML,claves <samp>*</samp> para nodos, etc.).\n;2:Formato moderno experimental. Os detalles poden cambiar!\n;latest:Usa o último formato (actualmente kbd>2</kbd>), pode cambiar sen aviso previo.",
+ "apihelp-phpfm-summary": "Datos de saída en formato serializado de PHP(impresión en HTML).",
+ "apihelp-rawfm-summary": "Datos de saída, incluíndo os elementos de depuración, en formato JSON (impresión en HTML).",
+ "apihelp-xml-summary": "Datos de saída en formato XML.",
+ "apihelp-xml-param-xslt": "Se está indicado, engade o nome da páxina como unha folla de estilo XSL. O valor debe ser un título no espazo de nomes {{ns:MediaWiki}} rematando con <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Se está indicado, engade un espazo de nomes XML.",
+ "apihelp-xmlfm-summary": "Datos de saída en formato XML(impresión en HTML).",
+ "api-format-title": "Resultado de API de MediaWiki",
+ "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:Special:MyLanguage/API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
+ "api-format-prettyprint-header-only-html": "Esta é unha representación HTML empregada para a depuración de erros, e non é axeitada para o uso de aplicacións.\n\nVexa a [[mw:Special:MyLanguage/API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para máis información.",
+ "api-format-prettyprint-status": "Esta resposta será devolta co estado de HTTP $1 $2.",
+ "api-login-fail-badsessionprovider": "Non é posible conectarse usando $1.",
+ "api-pageset-param-titles": "Lista de títulos nos que traballar.",
+ "api-pageset-param-pageids": "Lista de identificadores de páxina nos que traballar.",
+ "api-pageset-param-revids": "Unha lista de IDs de modificacións sobre as que traballar.",
+ "api-pageset-param-generator": "Obter a lista de páxinas sobre as que traballar executando o módulo de consulta especificado.\n\n<strong>Nota:</strong>Os nomes de parámetro do xerador deben comezar cunha \"g\", vexa os exemplos.",
+ "api-pageset-param-redirects-generator": "Resolver automaticamente as redireccións en <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>, e nas páxinas devoltas por <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Resolver automaticamente as redireccións en <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Converter títulos a outras variantes se é preciso. Só funciona se a lingua de contido da wiki soporta a conversión en variantes. As linguas que soportan conversión en variante inclúen $1.",
+ "api-help-title": "Axuda da API de MediaWiki",
+ "api-help-lead": "Esta é unha páxina de documentación da API de MediaWiki xerada automaticamente.\n\nDocumentación e exemplos:\nhttps://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Módulo principal",
+ "api-help-undocumented-module": "Non existe documentación para o móduloː $1",
+ "api-help-flag-deprecated": "Este módulo está obsoleto.",
+ "api-help-flag-internal": "<strong>Este módulo é interno ou inestable. </strong> O seu funcionamento pode cambiar sen aviso previo.",
+ "api-help-flag-readrights": "Este módulo precisa permisos de lectura.",
+ "api-help-flag-writerights": "Este módulo precisa permisos de escritura.",
+ "api-help-flag-mustbeposted": "Este módulo só acepta peticións POST.",
+ "api-help-flag-generator": "Este módulo pode usarse como xenerador.",
+ "api-help-source": "Fonte: $1",
+ "api-help-source-unknown": "Fonte: <span class=\"apihelp-unknown\">descoñecida</span>",
+ "api-help-license": "Licenza: [[$1|$2]]",
+ "api-help-license-noname": "Licenza: [[$1|Ver ligazón]]",
+ "api-help-license-unknown": "Licenza: <span class=\"apihelp-unknown\">descoñecida</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parámetro|Parámetros}}:",
+ "api-help-param-deprecated": "Obsoleto.",
+ "api-help-param-required": "Este parámetro é obrigatorio.",
+ "api-help-datatypes-header": "Tipos de datos",
+ "api-help-datatypes": "A entrada a MediaWiki debe ser normalizada NFC UTF-8. MediaWiki puede intentar converter outras entradas, pero isto pode provocar que algunhas operacións (como as [[Special:ApiHelp/edit|edición]] con comprobación MD5) fallen.\n\nAlgúns tipos de parámetros nas solicitudes de API necesitan máis explicación:\n;boolean\n:Os parámetros booleanos traballan como caixas de verificación HTML: se o parámetro se especifica, independentemente do seu valor, considérase verdadeiro. Para un valor falso, omíta o parámetro completo.\n;timestamp\n:Os selos de tempo poden especificarse en varios formatos. Recoméndase o ISO 8601 coa data e a hora. Todas as horas están en UTC, a inclusión da zona horaria é ignorada.\n:* ISO 8601 con data e hora, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (signos de puntuación e <kbd>Z</kbd> son opcionais)\n:* ISO 8601 data e hora (omítense) fraccións de segundo, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (guións, dous puntos e, <kbd>Z</kbd> son opcionais)\n:* Formato MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato numérico xenérico, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (opcional na zona horaria <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, o <kbd>-<var>##</var></kbd> omítese)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (a zona horaria pódese omitir), <kbd><var>Mon</var>, <var>15</var> <var>Xan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (a zona horaria pódese omitir), <kbd><var>luns</var>, <var>15</var>-<var>xaneiro</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato C ctime, <kbd><var>luns</var> <var>xaneiro</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>de 2001</var></kbd>\n:* Segundos desde 1970-01-01T00:00:00Z como de 1 a 13, díxitos enteiros (excluíndo o <kbd>0</kbd>)\n:* O texto <kbd>now</kbd> (agora)",
+ "api-help-param-type-limit": "Tipo: enteiro ou <kbd>max</kbd>",
+ "api-help-param-type-integer": "Tipo: {{PLURAL:$1|1=enteiro|2=lista de enteiros}}",
+ "api-help-param-type-boolean": "Tipo: booleano ([[Special:ApiHelp/main#main/datatypes|detalles]])",
+ "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=selo de tempo|2=lista de selos de tempo}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
+ "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de usuario|2=lista de nomes de usuarios}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Un valor dos seguintes valores|2=Valores (separados con <kbd>{{!}}</kbd> ou [[Special:ApiHelp/main#main/datatypes|outros]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe ser baleiro|Pode ser baleiro, ou $2}}",
+ "api-help-param-limit": "Non se permiten máis de $1.",
+ "api-help-param-limit2": "Non se permiten máis de $1 ($2 para bots).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=O valor debe ser maior |2=Os valores deben ser maiores}} que $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=O valor debe ser menor |2=Os valores deben ser menores}} que $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=O valor debe estar entre $2 e $3 |2=Os valores deben estar entre $2 e $3}}.",
+ "api-help-param-upload": "Debe ser enviado como un ficheiro importado usando multipart/form-data.",
+ "api-help-param-multi-separate": "Separe os valores con <kbd>|</kbd> ou [[Special:ApiHelp/main#main/datatypes|outros]].",
+ "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para os bots).",
+ "api-help-param-multi-max-simple": "O número máximo de valores é {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Para especificar tódolos valores use <kbd>$1</kbd>.",
+ "api-help-param-default": "Por defecto: $1",
+ "api-help-param-default-empty": "Por defecto: <span class=\"apihelp-empty\">(baleiro)</span>",
+ "api-help-param-token": "Un identificador \"$1\" recuperado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Por compatibilidade, o identificador usado na web UI tamén é aceptado.",
+ "api-help-param-disabled-in-miser-mode": "Desactivado debido ó [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo minimal]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Nota:</strong> Debido ó [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo minimal]], usar isto pode devolver menos de <var>$1limit</var> resultados antes de seguir, en casos extremos, pode que non se devolvan resultados.",
+ "api-help-param-direction": "En que dirección enumerar:\n;newer:Lista os máis antigos primeiro. Nota: $1start ten que estar antes que $1end.\n;older:Lista os máis novos primeiro (por defecto). Nota: $1start ten que estar despois que $1end.",
+ "api-help-param-continue": "Cando estean dispoñibles máis resultados, use isto para continuar.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(sen descrición)</span>",
+ "api-help-param-maxbytes": "Non pode ser máis longo que $1 {{PLURAL:$1|byte|bytes}}.",
+ "api-help-param-maxchars": "Non pode ser máis longo que $1 {{PLURAL:$1|carácter|caracteres}}.",
+ "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
+ "api-help-right-apihighlimits": "Usar os valores superiores das consultas da API (consultas lentas: $1; consultas rápidas: $2). Os límites para as consultas lentas tamén se aplican ós parámetros multivaluados.",
+ "api-help-open-in-apisandbox": "<small>[abrir en zona de probas]</small>",
+ "api-help-authmanager-general-usage": "O procedemento xeral para usar este módulo é:\n# Buscar os campos dispoñibles dende <kbd>[[Special:ApiHelp/query+authmanagerinfo|\n\naction=query&meta=authmanagerinfo]]</kbd> con <kbd>amirequestsfor=$4</kbd>, e un identificador <kbd>$5</kbd> de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Presentar os campos ó usuario, e obter o seu envío.\n# Enviar a este módulo, proporcionando <var>$1returnurl</var> e calquera campo relevante.\n# Comprobar o <samp>status</samp> na resposta.\n#* Se vostede recibe <samp>PASS</samp> ou <samp>FAIL</samp>, a acción rematou. A operación foi correcta ou non se fixo.\n#* Se vostede recibe <samp>UI</samp>, presenta os novos campos ó usuario e obtén o seu envío. Logo son enviados a este módulo con <var>$1continue</var> e o conxunto de campos relevantes, e repite o paso 4.\n#* Se vostede recibe <samp>REDIRECT</samp>, dirixe ó usuario a <samp>redirecttarget</samp> e espera pola resposta a <var>$1returnurl</var>. Logo envíaa a este módulo con <var>$1continue</var> e calquera campo pasado á URL de volta, e repite o paso 4.\n#* Se recibe <samp>RESTART</samp>, isto significa que a autenticación funcionou pero que non temos unha conta de usuario ligada. Debe tratar isto igual que <samp>UI</samp> ou como <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "Só usar estas peticións de autenticación, co <samp>id</samp> devolto por <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> con <kbd>amirequestsfor=$1</kbd> ou dunha resposta previa deste módulo.",
+ "api-help-authmanagerhelper-request": "Usar esta petición de autenticación, co <samp>id</samp> devolto por <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> con <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "Formato a usar para devolver as mensaxes.",
+ "api-help-authmanagerhelper-mergerequestfields": "Fusionar os campos de información para todas as peticións de autenticación nunha táboa.",
+ "api-help-authmanagerhelper-preservestate": "Conservar o estado dun intento previo de conexión fallida, se é posible.",
+ "api-help-authmanagerhelper-returnurl": "Devolve o URL para os fluxos de autenticación de terceiros, que debe ser absoluto. Este ou <var>$1continue</var> é obrigatorio.\n\nLogo da recepción dunha resposta <samp>REDIRECT</samp>, vostede normalmente abrirá un navegador web ou un visor web para ver a URL <samp>redirecttarget</samp> especificada para un fluxo de autenticación de terceiros. Cando isto se complete, a aplicación de terceiros enviará ó navegador web ou visor web a esta URL. Vostede debe eliminar calquera consulta ou parámetros POST da URL e pasalos como unha consulta <var>$1continue</var> a este módulo API.",
+ "api-help-authmanagerhelper-continue": "Esta petición é unha continucación despois dun resposta precedente <samp>UI</samp> ou <samp>REDIRECT</samp>. Esta ou <var>$1returnurl</var> é requirida.",
+ "api-help-authmanagerhelper-additional-params": "Este módulo acepta parámetros adicionais dependendo das consultas de autenticación dispoñibles. Use <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> con <kbd>amirequestsfor=$1</kbd> (ou unha resposta previa deste módulo, se aplicable) para determinar as consultas dispoñibles e os campos que usan.",
+ "apierror-allimages-redirect": "Usar <kbd>gaifilterredir=nonredirects</kbd> no canto de <var>redirects</var> cando <kbd>allimages</kbd> é usado como xerador.",
+ "apierror-allpages-generator-redirects": "Usar <kbd>gapfilterredir=nonredirects</kbd> no canto de <var>redirects</var> cando <kbd>allpages</kbd> é usado como xerador.",
+ "apierror-appendnotsupported": "Non pode anexarse a páxinas que usan o modelo de contido $1.",
+ "apierror-articleexists": "O artigo que intentou crear xa existe.",
+ "apierror-assertbotfailed": "A verificación de que o usuario ten o dereito de <code>bot</code> fallou.",
+ "apierror-assertnameduserfailed": "A verificación de que o usuario é «$1» fallou.",
+ "apierror-assertuserfailed": "A verificación de que o usuario está conectado fallou.",
+ "apierror-autoblocked": "O seu enderezo IP foi bloqueado automaticamente porque foi utilizado por un usuario bloqueado.",
+ "apierror-badconfig-resulttoosmall": "O valor de <code>$wgAPIMaxResultSize</code> neste wiki é demasiado pequeno como para conter información de resultados básicos.",
+ "apierror-badcontinue": "Parámetro de continuación non válido. Debe pasar o valor orixinal devolto pola consulta precedente.",
+ "apierror-baddiff": "A comparación non pode recuperarse. Unha ou ambas revisións non existen ou non ten permiso para velas.",
+ "apierror-baddiffto": "<var>$1diffto</var> debe fixarse cun número non negativo, <kbd>prev</kbd>, <kbd>next</kbd> ou <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "O formato solicitado $1 non está soportado polo modelo de contido $2.",
+ "apierror-badformat": "O formato solicitado $1 non está soportado polo modelo de contido $2 utilizado por $3.",
+ "apierror-badgenerator-notgenerator": "O módulo <kbd>$1</kbd> non pode utilizarse como xerador.",
+ "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> descoñecido.",
+ "apierror-badip": "O parámetro IP non é válido.",
+ "apierror-badmd5": "O código hash MD5 non era incorrecto.",
+ "apierror-badmodule-badsubmodule": "O módulo <kbd>$1</kbd> non ten un submódulo \"$2\".",
+ "apierror-badmodule-nosubmodules": "O módulo <kbd>$1</kbd> non ten submódulos.",
+ "apierror-badparameter": "Valor non válido para o parámetro <var>$1</var>.",
+ "apierror-badquery": "A consulta non é válida.",
+ "apierror-badtimestamp": "Valor \"$2\" non válido para o parámetro de data e hora <var>$1</var>.",
+ "apierror-badtoken": "Identificador CSRF non válido.",
+ "apierror-badupload": "O parámetro de suba de ficheiro <var>$1</var> non é unha suba de ficheiro, asegúrese de usar <code>multipart/form-data</code> para o seu POST e de incluír un nome de ficheiro na cabeceira <code>Content-Disposition</code>.",
+ "apierror-badurl": "Valor \"$2\" non válido para o parámetro de URL <var>$1</var>.",
+ "apierror-baduser": "Valor \"$2\" non válido para o parámetro de usuario <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "O separador multivalor U+001F só pode utilizarse en parámetros multivalorados.",
+ "apierror-bad-watchlist-token": "Identificador de lista de vixilancia proporcionado incorrecto. Por favor, obteña un identificador correcto en [[Special:Preferences]].",
+ "apierror-blockedfrommail": "Foi bloqueado para o envío de correos electrónicos.",
+ "apierror-blocked": "Foi bloqueado fronte á edición.",
+ "apierror-botsnotsupported": "Esta interface non está dispoñible para bots.",
+ "apierror-cannotreauthenticate": "Esta acción non está dispoñible xa que súa identidade non se pode verificar.",
+ "apierror-cannotviewtitle": "Non está autorizado para ver $1.",
+ "apierror-cantblock-email": "Non ten permiso para bloquear ós usuarios o envío de correo electrónico a través da wiki.",
+ "apierror-cantblock": "Non ten permisos para bloquear usuarios.",
+ "apierror-cantchangecontentmodel": "Non ten permiso para cambiar o modelo de contido dunha páxina.",
+ "apierror-canthide": "Non ten permiso para ocultar nomes de usuario do rexistro de bloqueos.",
+ "apierror-cantimport-upload": "Non ten permiso para importar páxinas subidas.",
+ "apierror-cantimport": "Non ten permisos para importar páxinas.",
+ "apierror-cantoverwrite-sharedfile": "O ficheiro obxectivo existe nun repositorio compartido e non ten permiso para substituílo.",
+ "apierror-cantsend": "Non está conectado na súa conta, non ten un enderezo de correo electrónico confirmado, ou non ten permiso para enviar correos electrónicos a outros usuarios, polo que non pode enviar correo electrónico.",
+ "apierror-cantundelete": "Non se puido restaurarː pode que as revisións solicitadas non existan, ou pode que xa se restauraran.",
+ "apierror-changeauth-norequest": "Erro ó crear a petición de modificación.",
+ "apierror-chunk-too-small": "O tamaño mínimo dun segmento é de $1 {{PLURAL:$1|byte|bytes}} para os segmentos non finais.",
+ "apierror-cidrtoobroad": "Os rangos CIDR $1 maiores que /$2 non son aceptados.",
+ "apierror-contentserializationexception": "Erro de serialización do contidoː $1",
+ "apierror-contenttoobig": "O contido que achegou excede o límite de tamaño dun artigo, que é de {{PLURAL:$1|kilobyte|kilobytes}}.",
+ "apierror-copyuploadbaddomain": "As subas por URL non están permitidas para este dominio.",
+ "apierror-copyuploadbadurl": "As subas non están permitidas para esta URL.",
+ "apierror-create-titleexists": "Os títulos existentes non poden ser protexidos con <kbd>create</kbd>.",
+ "apierror-csp-report": "Erro procesando o informe CSPː $1.",
+ "apierror-databaseerror": "[$1] erro de consulta da base de datos.",
+ "apierror-deletedrevs-param-not-1-2": "O parámetro <var>$1</var> non pode usarse nos modos 1 e 2.",
+ "apierror-deletedrevs-param-not-3": "O parámetro <var>$1</var> non pode usarse no modo 3.",
+ "apierror-emptynewsection": "Non é posible crear novas seccións baleiras.",
+ "apierror-emptypage": "Non é posible crear novas páxinas baleiras.",
+ "apierror-exceptioncaught": "[$1] Excepción capturada: $2",
+ "apierror-filedoesnotexist": "O ficheiro non existe.",
+ "apierror-fileexists-sharedrepo-perm": "O ficheiro obxectivo existe nun servidor compartido. Use o parámetro <var>ignorewarnings</var> para ignoralo.",
+ "apierror-filenopath": "Non é posible obter o camiño do ficheiro local.",
+ "apierror-filetypecannotberotated": "O tipo de ficheiro non permite que sexa rotado.",
+ "apierror-formatphp": "Esta resposta non pode ser representada usando kbd>format=php</kbd>. Consulte https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "O título para <kbd>$1</kbd> debe ser un ficheiro.",
+ "apierror-import-unknownerror": "Erro descoñecido ó importarː $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> non pode pasar de $2 (fixado a $3) para bots ou administradores do sistema.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> non pode pasar de $2 (fixado a $3) para os usuarios.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> non pode ser menor de $2 (fixado a $3).",
+ "apierror-invalidcategory": "O nome da categoría que indicou non é válido.",
+ "apierror-invalid-chunk": "O desplazamento máis o segmento actual é maior que o tamaño solicitado do ficheiro.",
+ "apierror-invalidexpiry": "Hora de caducidade incorrecta \"$1\".",
+ "apierror-invalid-file-key": "Non se corresponde cunha clave válida de ficheiro.",
+ "apierror-invalidlang": "Código de lingua incorrecto para o parámetro <var>$1</var>.",
+ "apierror-invalidoldimage": "O parámetro <var>oldimage</var> ten un formato incorrecto.",
+ "apierror-invalidparammix-cannotusewith": "O parámetro <kbd>$1</kbd> non pode usarse xunto con <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "O parámetro <kbd>$1</kbd> só pode usarse xunto con <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> non se pode combinar cos parámetros <var>oldid</var>, <var>pageid</var> e <var>page</var>. Por favor, utilice <var>title</var> e <var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Os parámetros}} $1 non poden usarse xuntos.",
+ "apierror-invalidsection": "O parámetro <var>section</var> debe ser un ID de sección válido ou <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "O código hash SHA1Base36 proporcionado non é correcto.",
+ "apierror-invalidsha1hash": "O código hash SHA1 proporcionado non é correcto.",
+ "apierror-invalidtitle": "Título incorrecto \"$1\".",
+ "apierror-invalidurlparam": "Valor non válido para <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Nome de usuario incorrecto \"$1\".",
+ "apierror-invaliduserid": "O identificador de usuario <var>$1</var> non é válido.",
+ "apierror-maxlag-generic": "Esparando por un servidor de base de datosː $1 {{PLURAL:$1|segundo|segundos}} de atraso.",
+ "apierror-maxlag": "Esperando por $2: $1 {{PLURAL:$1|segundo|segundos}} de atraso.",
+ "apierror-mimesearchdisabled": "A busca MIME está desactivada no modo Miser (avaro).",
+ "apierror-missingcontent-pageid": "Falta contido para a páxina con identificador $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|O parámetro|Polo menos un dos parámetros}} $1 é necesario.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|O parámetro|Un dos parámetros}} $1 é necesario.",
+ "apierror-missingparam": "O parámetro <var>$1</var> debe estar definido.",
+ "apierror-missingrev-pageid": "Non hai ningunha revisión actual da páxina con ID $1.",
+ "apierror-missingtitle-createonly": "Os títulos faltantes só se poden protexer con <kbd>create</kbd>.",
+ "apierror-missingtitle": "A páxina que especificou non existe.",
+ "apierror-missingtitle-byname": "A páxina $1 non existe.",
+ "apierror-moduledisabled": "O módulo <kbd>$1</kbd> foi deshabilitado.",
+ "apierror-multival-only-one-of": "Só {{PLURAL:$3|se permite o valor|se permiten os valores}} $2 para o parámetro <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> non se pode utilizar máis que con unha soa páxina.",
+ "apierror-mustbeloggedin-changeauth": "Debe estar conectado para poder cambiar os datos de autentificación.",
+ "apierror-mustbeloggedin-generic": "Debe estar conectado.",
+ "apierror-mustbeloggedin-linkaccounts": "Debe estar conectado para ligar contas.",
+ "apierror-mustbeloggedin-removeauth": "Debe estar conectado para borrar datos de autentificación.",
+ "apierror-mustbeloggedin": "Debe estar conectado para $1.",
+ "apierror-mustbeposted": "O módulo <kbd>$1</kbd> require unha petición POST.",
+ "apierror-mustpostparams": "{{PLURAL:$2|Atopouse o seguinte parámetro|Atopáronse os seguintes parámetros}} na cadea da consulta, pero deben estar no corpo do POST: $1.",
+ "apierror-noapiwrite": "A edición deste wiki a través da API está deshabilitada. Asegúrese de que a declaración <code>$wgEnableWriteAPI=true;</code> está incluída no ficheiro <code>LocalSettings.php</code> da wiki.",
+ "apierror-nochanges": "Non se solicitou ningún cambio.",
+ "apierror-nodeleteablefile": "Non existe esa versión antiga do ficheiro.",
+ "apierror-no-direct-editing": "A edición directa a través da API non é compatible co modelo de contido $1 utilizado por $2.",
+ "apierror-noedit-anon": "Os usuarios anónimos non poden editar páxinas.",
+ "apierror-noedit": "Non ten permisos para editar páxinas.",
+ "apierror-noimageredirect-anon": "Os usuarios anónimos non poden crear redireccións de imaxes.",
+ "apierror-noimageredirect": "Non ten permiso para crear redireccións de imaxes.",
+ "apierror-nosuchlogid": "Non hai ningunha entrada de rexistro con identificador $1.",
+ "apierror-nosuchpageid": "Non hai ningunha páxina con identificador $1.",
+ "apierror-nosuchrcid": "Non hai ningún cambio recente con identificador $1.",
+ "apierror-nosuchrevid": "Non hai ningunha revisión con identificador $1.",
+ "apierror-nosuchsection": "Non hai ningunha sección $1.",
+ "apierror-nosuchsection-what": "Non hai ningunha sección $1 en $2.",
+ "apierror-nosuchuserid": "Non hai ningún usuario con identificador $1.",
+ "apierror-notarget": "Non indicou un destino válido para esta acción.",
+ "apierror-notpatrollable": "A revisión r$1 non pode patrullarse por ser demasiado antiga.",
+ "apierror-nouploadmodule": "Non se definiu un módulo de carga.",
+ "apierror-offline": "Non se pode continuar debido a problemas de conectividade da rede. Asegúrese de que ten unha conexión activa a internet e inténteo de novo.",
+ "apierror-opensearch-json-warnings": "Non se poden representar os avisos en formato JSON de OpenSearch.",
+ "apierror-pagecannotexist": "O espazo de nomes non permite as páxinas actuais.",
+ "apierror-pagedeleted": "A páxina foi borrada dende que obtivo o selo de tempo.",
+ "apierror-pagelang-disabled": "Neste wiki non se pode cambiar a lingua dunha páxina.",
+ "apierror-paramempty": "O parámetro <var>$1</var> non pode estar baleiro.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> só está soportado para o contido wikitexto.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> só está soportado para o contido wikitexto. $1 usa o modelo de contido $2.",
+ "apierror-pastexpiry": "A tempo de caducidade \"$1\" está no pasado.",
+ "apierror-permissiondenied": "Non ten permiso para $1.",
+ "apierror-permissiondenied-generic": "Permisos rexeitados.",
+ "apierror-permissiondenied-patrolflag": "Necesita o permiso <code>patrol</code> ou <code>patrolmarks</code> para solicitar a marca de patrullado.",
+ "apierror-permissiondenied-unblock": "Non ten permiso para desbloquear usuarios.",
+ "apierror-prefixsearchdisabled": "A busca de prefixo está desactivada no modo Miser (avaro).",
+ "apierror-promised-nonwrite-api": "A cabeceira HTTP <code>Promise-Non-Write-API-Action</code> non se pode enviar a módulos da API en modo escritura.",
+ "apierror-protect-invalidaction": "Tipo de protección \"$1\" non válido.",
+ "apierror-protect-invalidlevel": "Nivel de protección \"$1\" non válido.",
+ "apierror-ratelimited": "Superou o seu límite de rango. Agarde uns minutos e inténteo de novo",
+ "apierror-readapidenied": "Necesita permiso de lectura para utilizar ese módulo.",
+ "apierror-readonly": "A wiki está actualmente en modo de só lectura.",
+ "apierror-reauthenticate": "Non se autentificou recentemente nesta sesión. Por favor, volva a autentificarse.",
+ "apierror-revdel-mutuallyexclusive": "Non se pode usar o mesmo campo en <var>hide</var> e <var>show</var>.",
+ "apierror-revdel-needtarget": "É necesario un título obxectivo para este tipo RevDel.",
+ "apierror-revdel-paramneeded": "Requírese polo menos un valor para <var>hide</var> e/ou <var>show</var>.",
+ "apierror-revisions-badid": "Non se atoparon modificacións para o parámetro <var>$1</var>.",
+ "apierror-revisions-norevids": "O parámetro <var>revids</var> non se pode utilizar xunto coas opción de lista (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> e <var>$1end</var>).",
+ "apierror-revisions-singlepage": "Utilizouse <var>titles</var>, <var>pageids</var> ou un xerador para proporcionar múltiples páxinas, pero os parámetros <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> e <var>$1end</var> só poden utilizarse nunha soa páxina.",
+ "apierror-revwrongpage": "r$1 non é unha revisión de $2.",
+ "apierror-searchdisabled": "A busca <var>$1</var> está desactivada.",
+ "apierror-sectionreplacefailed": "Non se puido combinar a sección actualizada.",
+ "apierror-sectionsnotsupported": "As seccións non son compatibles co modelo de contido $1.",
+ "apierror-sectionsnotsupported-what": "As seccións non son compatibles con $1.",
+ "apierror-show": "Parámetro incorrecto - non se poden proporcionar valores mutuamente excluíntes.",
+ "apierror-siteinfo-includealldenied": "Non se pode ver a información de tódolos servidores a menos que <var>$wgShowHostNames</var> teña valor verdadeiro.",
+ "apierror-sizediffdisabled": "A diferenza de tamaño está deshabilitada no modo Miser.",
+ "apierror-spamdetected": "A súa edición foi rexeitada por conter un fragmento de publicidade: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "Non ten permiso para ver os resultados desta páxina especial.",
+ "apierror-stashedfilenotfound": "Non se puido atopar o ficheiro na reserva: $1.",
+ "apierror-stashfailed-complete": "A suba por partes completouse, revise o estado para obter máis detalles.",
+ "apierror-stashfailed-nosession": "Non hai sesión de suba por partes con esa clave.",
+ "apierror-stashfilestorage": "Non se puido almacenar a suba na reservaː $1",
+ "apierror-stashinvalidfile": "Ficheiro de reserva incorrecto.",
+ "apierror-stashnosuchfilekey": "A chave de ficheiro non existe: $1.",
+ "apierror-stashpathinvalid": "Clave de ficheiro con formato incorrecto ou non válidaː $1.",
+ "apierror-stashwrongowner": "Erro de propietarioː $1",
+ "apierror-stashzerolength": "Ficheiro de lonxitude cero, non pode ser almacenado na reservaː $1.",
+ "apierror-systemblocked": "Foi bloqueado automaticamente polo software MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "A expansión de modelos só é compatible co contido en wikitexto. $1 usa o modelo de contido $2.",
+ "apierror-timeout": "O servidor non respondeu no tempo esperado.",
+ "apierror-unknownaction": "A acción especificada, <kbd>$1</kbd>, non está recoñecida.",
+ "apierror-unknownerror-editpage": "Erro descoñecido EditPageː $1.",
+ "apierror-unknownerror-nocode": "Erro descoñecido.",
+ "apierror-unknownerror": "Erro descoñecido: \"$1\".",
+ "apierror-unknownformat": "Formato descoñecido \"$1\".",
+ "apierror-unrecognizedparams": "{{PLURAL:$2|Parámetro non recoñecido|Parámetros non recoñecidos}}: $1.",
+ "apierror-unrecognizedvalue": "Valor non recoñecido para o parámetro <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "O repositorio local de ficheiros non permite consultar tódalas imaxes.",
+ "apierror-upload-filekeyneeded": "Debe proporcionar un <var>filekey</var> cando <var>offset</var> é distinto de cero.",
+ "apierror-upload-filekeynotallowed": "Non pode proporcionar <var>filekey</var> cando <var>offset</var> é 0.",
+ "apierror-upload-inprogress": "A suba dende a reserva está en progreso.",
+ "apierror-upload-missingresult": "Non hai resultado nos datos de estado.",
+ "apierror-urlparamnormal": "Non se puideron normalizar os parámetros de imaxe de $1.",
+ "apierror-writeapidenied": "Non ten permiso para editar este wiki a través da API.",
+ "apiwarn-alldeletedrevisions-performance": "Para ter un mellor rendemento á hora de xerar títulos, estableza <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Non se puido analizar <var>$1urlparam</var> para $2. Só se usará a anchura e a altura.",
+ "apiwarn-badutf8": "O valor pasado para <var>$1</var> contén datos non válidos ou non normalizados. Os datos de texto deberían estar en formato Unicode válido, normalizado en NFC e sen caracteres de control C0 distintos de HT (\\t), LF (\\n) e CR (\\r).",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> quedou obsoleto. No seu lugar, utilice <kbd>prop=deletedrevisions</kbd> ou <kbd>list=alldeletedrevisions</kbd>.",
+ "apiwarn-deprecation-expandtemplates-prop": "Como non se especificou ningún valor para o parámetro <var>prop</var>, utilizouse un formato herdado para a saída. Este formato está en desuso e, no futuro, o parámetro <var>prop</var> terá un valor predeterminado, de forma que sempre se utilizará o formato novo.",
+ "apiwarn-deprecation-httpsexpected": "Utilizouse HTTP cando esperábase HTTPS.",
+ "apiwarn-deprecation-login-botpw": "O inicio de sesión coa conta principal mediante <kbd>action=login</kbd> está en desuso e pode deixar de funcionar sen aviso previo. Para proseguir o inicio de sesión mediante <kbd>action=login</kbd>, consulte [[Special:BotPasswords]]. Para proseguir o inicio de sesión coa conta principal de forma segura, consulte <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "O inicio de sesión coa conta principal mediante <kbd>action=login</kbd> está en desuso e pode deixar de funcionar sen aviso previo. Para iniciar sesión de forma segura, consulte <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-parameter": "O parámetro <var>$1</var> está obsoleto.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> está en desuso desde MediaWiki 1.28. Use <kbd>prop=headhtml</kbd> cando cree novos documentos HTML, ou <kbd>prop=módulos|jsconfigvars</kbd> cando actualice un documento no lado do cliente.",
+ "apiwarn-deprecation-purge-get": "O uso de <kbd>action=purge</kbd> mediante GET está obsoleto. Use POST no seu lugar.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> está obsoleto. No seu lugar, utilice <kbd>$2</kbd>.",
+ "apiwarn-difftohidden": "Imposible facer un diff con r$1: o contido está oculto.",
+ "apiwarn-invalidcategory": "\"$1\" non é unha categoría.",
+ "apiwarn-invalidtitle": "\"$1\" non é un título válido.",
+ "apiwarn-invalidxmlstylesheetext": "As follas de estilo deben ter a extensión <code>.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "A folla de estilos especificada non é válida ou non existe.",
+ "apiwarn-invalidxmlstylesheetns": "A folla de estilos debería estar no espazo de nomes {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "A propiedade <kbd>modules</kbd> está definida, pero non o está <kbd>jsconfigvars</kbd> nin <kbd>encodedjsconfigvars</kbd>. As variables de configuración son necesarias para o correcto uso do módulo.",
+ "apiwarn-notfile": "\"$1\" non é un ficheiro.",
+ "apiwarn-parse-nocontentmodel": "Non se proporcionou <var>title</var> nin <var>contentmodel</var>, asúmese $1.",
+ "apiwarn-tokennotallowed": "A acción \"$1\" non está permitida para o usuario actual.",
+ "apiwarn-toomanyvalues": "Demasiados valores para o parámetro <var>$1</var>. O límite é $2.",
+ "apiwarn-truncatedresult": "Truncouse este resultado porque doutra maneira sobrepasaría o límite de $1 bytes.",
+ "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor non recoñecido|Valores non recoñecidos}} para o parámetro <var>$1</var>: $2.",
+ "apiwarn-unsupportedarray": "O parámetro <var>$1</var> usa unha sintaxe PHP de matriz que non está soportada.",
+ "apiwarn-validationfailed-badchars": "caracteres non válidos na clave (só se admiten os caracteres <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> e <code>-</code>).",
+ "apiwarn-validationfailed-badpref": "non é unha preferencia válida.",
+ "apiwarn-validationfailed-cannotset": "non pode ser establecido por este módulo.",
+ "apiwarn-validationfailed-keytoolong": "clave demasiado longa (non pode ter máis de $1 bytes).",
+ "apiwarn-validationfailed": "Erro de validación de <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Aviso de seguridade</strong>: <var>$wgDebugAPI</var> está habilitado.",
+ "api-feed-error-title": "Erro ($1)",
+ "api-usage-docref": "Consulte $1 para ver o uso da API.",
+ "api-usage-mailinglist-ref": "Subscribirse á lista de correo mediawiki-api-announce en &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; para obter avisos de obsolescencia da API ou de modificacións importantes.",
+ "api-exception-trace": "$1 en $2($3)\n$4",
+ "api-credits-header": "Créditos",
+ "api-credits": "Desenvolvedores da API:\n* Roan Kattouw (desenvolvedor principal, set. 2007-2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creador e desenvolvedor principal, set. 2006-sep. 2007)\n* Brad Jorsch (desenvolvedor principal, 2013-actualidade)\n\nEnvía comentarios, suxerencias e preguntas a mediawiki-api@lists.wikimedia.org\nou informa dun erro en https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/he.json b/www/wiki/includes/api/i18n/he.json
new file mode 100644
index 00000000..aaa6aed0
--- /dev/null
+++ b/www/wiki/includes/api/i18n/he.json
@@ -0,0 +1,1757 @@
+{
+ "@metadata": {
+ "authors": [
+ "Guycn2",
+ "Amire80",
+ "Inkbug",
+ "Danny-w",
+ "YaronSh",
+ "ערן",
+ "LaG roiL",
+ "Elyashiv",
+ "Macofe",
+ "MojoMann",
+ "Mikey641",
+ "Esh77",
+ "שמזן",
+ "Or",
+ "Umherirrender"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|תיעוד]]\n* [[mw:Special:MyLanguage/API:FAQ|שו\"ת]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api רשימת דיוור]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce הודעות על API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R באגים ובקשות]\n</div>\n<strong>מצב:</strong> כל האפשרויות שמוצגות בדף הזה אמורות לעבוד, אבל ה־API עדיין בפיתוח פעיל, ויכול להשתנות בכל זמן. עשו מינוי ל[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ רשימת הדיוור mediawiki-api-announce] להודעות על עדכונים.\n\n<strong>בקשות שגויות:</strong> כשבקשות שגויות נשלחות ל־API, תישלח כותרת HTTP עם המפתח \"MediaWiki-API-Error\" ואז גם הערך של הכותרת וגם קוד השגיאה יוגדרו לאותו ערך. למידע נוסף ר' [[mw:Special:MyLanguage/API:Errors_and_warnings|API: שגיאות ואזהרות]].\n\n<strong>בדיקה:</strong> לבדיקה קלה יותר של בקשות ר' [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "איזו פעולה לבצע.",
+ "apihelp-main-param-format": "תסדיר הפלט.",
+ "apihelp-main-param-maxlag": "שיהוי מרבי יכול לשמש כשמדיה־ויקי מותקנת בצביר עם מסד נתונים משוכפל. כדי לחסוך בפעולות שגורמות יותר שיהוי בשכפול אתר, הפרמטר הזה יכול לגרום ללקוח להמתין עד ששיהוי השכפול יורד מתחת לערך שצוין. במקרה של שיהוי מוגזם, קוד השגיאה <samp>maxlag</samp> מוחזר עם הודעה כמו <samp>Waiting for $host: $lag seconds lagged</samp>.<br />ר' [[mw:Special:MyLanguage/Manual:Maxlag_parameter|מדריך למשתמש: פרמטר maxlag]] למידע נוסף.",
+ "apihelp-main-param-smaxage": "הגדרת כותרת בקרת מטמון HTTP‏ <code>s-maxage</code> למספר כזה של שניות.",
+ "apihelp-main-param-maxage": "הגדרת כותרת בקרת מטמון HTTP‏ <code>max-age</code> למספר כזה של שניות.",
+ "apihelp-main-param-assert": "לוודא שהמשתמש נכנס אם זה מוגדר ל־<kbd>user</kbd>, או שיש לו הרשאת בוט אם זה <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "לוודא שהמשתמש הנוכחי הוא המשתמש ששמו ניתן.",
+ "apihelp-main-param-requestid": "כל ערך שיינתן כאן ייכלל בתשובה. אפשר להשתמש בזה כדי להבדיל בין בקשות.",
+ "apihelp-main-param-servedby": "לכלול את שם המארח ששירת את הבקשה בתוצאות.",
+ "apihelp-main-param-curtimestamp": "הכללת חותם־הזמן הנוכחי בתוצאה.",
+ "apihelp-main-param-responselanginfo": "לכלול את השפות שמשמשות ל־<var>uselang</var> ול־<var>errorlang</var> בתוצאה.",
+ "apihelp-main-param-origin": "בעת גישה ל־API עם בקשת AJAX חוצה מתחמים (CORS), יש להציב כאן את המתחם שהבקשה יוצאת ממנו. זה היה להיות כלול בכל בקשה מקדימה, ולכן הוא חייב להיות חלק מה־URI של הבקשה (לא גוף ה־POST).\n\nעבור בקשות מאומתות, זה חייב להיות תואם במדויק לאחד המקורות בכותרת <code>Origin</code>, כך שזה צריך להיות מוגדר למשהו כמו <kbd>https://en.wikipedia.org</kbd> או <kbd>https://meta.wikimedia.org</kbd>. אם הפרמטר הזה אינו תואם לכותרת <code>Origin</code>, תוחזר תשובת 403. אם הפרמטר הזה תורם לכותרת <code>Origin</code> והמקור נמצא ברשימה הלבנה, תוגדרנה הכותרות <code>Access-Control-Allow-Origin</code> ו־<code>Access-Control-Allow-Credentials</code>.\n\nעבור בקשות בלתי־מאומתות, יש לציין את הערך <kbd>*</kbd>. זה יגרום לכותרת להיות <code>Access-Control-Allow-Origin</code>, אבל <code>Access-Control-Allow-Credentials</code> תהיה <code>false</code> וכל הנתונים הייחודיים למשתמש יהיו מוגבלים.",
+ "apihelp-main-param-uselang": "באיזו שפה להשתמש לתרגומי הודעות. הקריאה <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> עם <kbd>siprop=languages</kbd> מחזירה רשימת קודים. ציון <kbd>user</kbd> כדי להשתמש בהעדפת השפה של המשתמש הנוכחי, וציון <kbd>content</kbd> להשתמש בקוד השפה של הוויקי הזה.",
+ "apihelp-main-param-errorformat": "תסדיר לשימוש בפלט טקסט אזהרות ושגיאות.\n; plaintext: קוד ויקי ללא תגי HTML ועם ישויות מוחלפות.\n; wikitext: קוד ויקי לא מפוענח.\n; html: קוד HTML.\n; raw: מפתח הודעה ופרמטרים.\n; none: ללא פלט טקסט, רק הודעות השגיאה.\n; bc: התסדיר ששימש לפני מדיה־ויקי 1.29. התעלמות מ־<var>errorlang</var> ו־ <var>errorsuselocal</var>.",
+ "apihelp-main-param-errorlang": "השפה שתשמש לאזהרות לשגיאות <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> עם <kbd>siprop=languages</kbd> תחזיר רשימת קודי שפה, ואפשר גם לציין <kbd>content</kbd> כדי להשתמש בשפת התוכן של הוויקי הזה, או לציין <kbd>uselang</kbd> עם אותו הערך הפרמטר <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "אם ניתן, הטקסטים של השגיאות ישתמשו בהודעות מותאמות מקומית ממרחב השם {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "חסימת משתמש.",
+ "apihelp-block-param-user": "שם משתמש, כתובת IP, או טווח כתובות IP שברצונך לחסום. אי־אפשר להשתמש בזה יחד עם <var>$1userid</var>",
+ "apihelp-block-param-userid": "מזהה המשתמש לחסימה. לא יכול לשמש יחד עם <var>$1user</var>.",
+ "apihelp-block-param-expiry": "זמן תפוגה. יכול להיות יחסי (למשל <kbd>5 months</kbd> או <kbd>2 weeks</kbd>) או מוחלט (למשל <kbd>2014-09-18T12:34:56Z</kbd>). אם זה מוגדר ל־<kbd>infinite</kbd>‏, <kbd>indefinite</kbd>, או <kbd>never</kbd>, החסימה לא תפוג לעולם.",
+ "apihelp-block-param-reason": "סיבה לחסימה.",
+ "apihelp-block-param-anononly": "לחסום משתמשים אלמוניים בלבד (דהיינו, השבתת עריכות אלמוניות מכתובת ה־IP הזאת)",
+ "apihelp-block-param-nocreate": "מניעת יצירת חשבונות",
+ "apihelp-block-param-autoblock": "חסימה אוטומטית גם של כתובת ה־IP האחרונה שהשתמש בה ושל כל כתובת IP שינסה להשתמש בה בעתיד.",
+ "apihelp-block-param-noemail": "למנוע ממשתמש לשלוח דואר אלקטרוני דרך הוויקי. (דורש את ההרשאה <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "הסרת השם מיומן החסימות. (דורש את ההרשאה <code>hideuser</code>.)",
+ "apihelp-block-param-allowusertalk": "לאפשר למשתמש לערוך את דף השיחה שלו או שלה (תלוי ב־<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "אם המשתמש כבר חסום, לדרוס את החסימה הנוכחית.",
+ "apihelp-block-param-watchuser": "לעקוב אחרי דף המשתמש ודף השיחה של המשתמש או של כתובת ה־IP.",
+ "apihelp-block-param-tags": "תגי שינוי שיחולו על העיול ביומן החסימה.",
+ "apihelp-block-example-ip-simple": "חסימת כתובת ה־IP‏ <kbd>192.0.2.5</kbd> לשלושה ימים עם הסיבה <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "חסימת המשתמש <kbd>Vandal</kbd> ללא הגבלת זמן עם הסיבה <kbd>Vandalism</kbd>, ומניעת יצירת חשבונות חדשים ושליחת דוא\"ל.",
+ "apihelp-changeauthenticationdata-summary": "שינוי נתוני אימות עבור המשתמש הנוכחי.",
+ "apihelp-changeauthenticationdata-example-password": "ניסיון לשנות את הססמה של המשתמש הנוכחי ל־<kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "בדיקת התקינות של האסימון מ־<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "סוג האסימון שבבדיקה.",
+ "apihelp-checktoken-param-token": "איזה אסימון לבדוק.",
+ "apihelp-checktoken-param-maxtokenage": "הגיל המרבי המותר של האסימון, בשניות.",
+ "apihelp-checktoken-example-simple": "בדיקת התקינות של אסימון <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "מנקה את דגל <code>hasmsg</code> עבור המשתמש הנוכחי.",
+ "apihelp-clearhasmsg-example-1": "לנקות את דגל <code>hasmsg</code> עבור המשתמש הנוכחי.",
+ "apihelp-clientlogin-summary": "כניסה לוויקי באמצעות זרימה הידודית.",
+ "apihelp-clientlogin-example-login": "תחילת תהליך כניסה לוויקי בתור משתמש <kbd>Example</kbd> עם הססמה <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "המשך כניסה אחרי תשובת <samp>UI</samp> לאימות דו־גורמי, עם <var>OATHToken</var> של <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "קבלת ההבדל בין 2 דפים.",
+ "apihelp-compare-extended-description": "יש להעביר מספר גרסה, כותרת דף או מזהה דף גם ל־\"from\" וגם ל־\"to\".",
+ "apihelp-compare-param-fromtitle": "כותרת ראשונה להשוואה.",
+ "apihelp-compare-param-fromid": "מס׳ זיהוי של הדף הראשון להשוואה.",
+ "apihelp-compare-param-fromrev": "גרסה ראשונה להשוואה.",
+ "apihelp-compare-param-fromtext": "להשתמש בטקסט הזה במקום תוכן הגרסה שהוגדרה על־ידי <var dir=\"ltr\">fromtitle</var>, <var dir=\"ltr\">fromid</var> או <var dir=\"ltr\">fromrev</var>.",
+ "apihelp-compare-param-frompst": "לעשות התמרה לפני שמירה ב־<var>fromtext</var>.",
+ "apihelp-compare-param-fromcontentmodel": "מודל התוכן של <var>fromtext</var>. אם זה לא סופק, ייעשה ניחוש על סמך פרמטרים אחרים.",
+ "apihelp-compare-param-fromcontentformat": "תסדיר הסדרת תוכן של <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "כותרת שנייה להשוואה.",
+ "apihelp-compare-param-toid": "מס׳ מזהה של הדף השני להשוואה.",
+ "apihelp-compare-param-torev": "גרסה שנייה להשוואה.",
+ "apihelp-compare-param-torelative": "להשתמש בגרסה יחסית לגרסה שהוסקה מ<var dir=\"ltr\">fromtitle</var>, <var dir=\"ltr\">fromid</var> או <var dir=\"ltr\">fromrev</var>. לכל אפשריות ה־\"to\" האחרות לא תהיה השפעה.",
+ "apihelp-compare-param-totext": "להשתמש בטקסט הזה במקום התוכן של הגרסה שהוגדר ב־<var dir=\"ltr\">totitle</var>, <var dir=\"ltr\">toid</var> or <var dir=\"ltr\">torev</var>.",
+ "apihelp-compare-param-topst": "לעשות התמרה לפני שמירה ב־<var>totext</var>.",
+ "apihelp-compare-param-tocontentmodel": "מודל התוכן של <var>totext</var>. אם זה לא סופק, ייעשה ניחוש על סמך פרמטרים אחרים.",
+ "apihelp-compare-param-tocontentformat": "תסדיר הסדרת תוכן של <var>fromtext</var>.",
+ "apihelp-compare-param-prop": "אילו פריטי מידע לקבל.",
+ "apihelp-compare-paramvalue-prop-diff": "ה־HTML של ההשוואה.",
+ "apihelp-compare-paramvalue-prop-diffsize": "גודל ה־HTML של ההשוואה, בבתים.",
+ "apihelp-compare-paramvalue-prop-rel": "מזהי הגרסאות של הגרסאות לפני \"from\" ואחרי \"to\", אם יש כאלה.",
+ "apihelp-compare-paramvalue-prop-ids": "מזהי הדף והגרסה של גרסאות ה־\"from\" וה־\"to\".",
+ "apihelp-compare-paramvalue-prop-title": "כותרות הדפים של גרסאות ה־\"from\" וה־\"to\".",
+ "apihelp-compare-paramvalue-prop-user": "השם והמזהה של המשתמש של גרסאות ה־\"from\" וה־\"to\".",
+ "apihelp-compare-paramvalue-prop-comment": "התקציר על גרסאות ה־\"from\" וה־\"to\".",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "התקציר המפוענח על גרסאות ה־\"from\" וה־\"to\".",
+ "apihelp-compare-paramvalue-prop-size": "הגודל של גרסאות ה־\"from\" וה־\"to\".",
+ "apihelp-compare-example-1": "יצירת תיעוד שינוי בין גרסה 1 ל־2.",
+ "apihelp-createaccount-summary": "יצירת חשבון משתמש חדש.",
+ "apihelp-createaccount-param-preservestate": "אם <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> החזיר true עבור <samp>hasprimarypreservedstate</samp>, בקשות שמסומנות בתור <samp>primary-required</samp> אמורות להיות מושמטות. אם מוחזר ערך לא ריק ל־<samp>preservedusername</samp>, שם המשתמש הזה ישמש לפרמטר <var>username</var>.",
+ "apihelp-createaccount-example-create": "תחילת תהליך יצירת המשתמש <kbd>Example</kbd> עם הססמה <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "שם משתמש.",
+ "apihelp-createaccount-param-password": "ססמה (לא ישפיע אם הוגדר <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "שם מתחם לאימות חיצוני (רשות).",
+ "apihelp-createaccount-param-token": "אסימון יצירת חשבון הושג בבקשה הראשונה.",
+ "apihelp-createaccount-param-email": "כתובת הדוא״ל של המשתמש (רשות).",
+ "apihelp-createaccount-param-realname": "השם האמתי של המשתמש (רשות).",
+ "apihelp-createaccount-param-mailpassword": "אם הוגדר ערך כלשהו, תישלח ססמה אקראית אל המשתמש.",
+ "apihelp-createaccount-param-reason": "הסיבה כרשות ליצירת החשבון כפי שתופיע ברישומים.",
+ "apihelp-createaccount-param-language": "קוד השפה שיוגדר כבררת המחדל למשתמש (רשות, בררת המחדל היא שפת התוכן).",
+ "apihelp-createaccount-example-pass": "יצירת המשתמש <kbd>testuser</kbd> עם הססמה <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "יצירת המשתמש <kbd>testmailuser</kbd> ושליחת ססמה שיוצרה אקראית בדוא״ל.",
+ "apihelp-cspreport-summary": "משמש דפדפנים לדיווח הפרות של מדיניות אבטחת תוכן. המודול הזה לעולם לא ישמש אלא אם הוא משמש עם דפדפן תומך CSP.",
+ "apihelp-cspreport-param-reportonly": "לסמן בתור דיווח ממדיניות מנטרת, לא מדיניות כפויה",
+ "apihelp-cspreport-param-source": "מה ייצר את כותרת ה־CSP שייצרה את הדו״ח הזה",
+ "apihelp-delete-summary": "מחיקת דף.",
+ "apihelp-delete-param-title": "כותרת הדף למחיקה. לא ניתן להשתמש בשילוב עם <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "מס׳ הזיהוי של הדף למחיקה. לא ניתן להשתמש בשילוב עם <var>$1title</var>.",
+ "apihelp-delete-param-reason": "סיבת המחיקה. אם לא הוגדרה, תתווסף סיבה שנוצרה אוטומטית.",
+ "apihelp-delete-param-tags": "תגי שינוי שיחולו על העיול ביומן המחיקה.",
+ "apihelp-delete-param-watch": "הוספת הדף לרשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-delete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+ "apihelp-delete-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
+ "apihelp-delete-param-oldimage": "שם התמונה הישנה למחיקה כפי שסופק ל־[[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "מחיקת <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "מחיקת <kbd>Main Page</kbd>. סיבה: <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "היחידה הזאת כובתה.",
+ "apihelp-edit-summary": "יצירה ועריכה של דפים.",
+ "apihelp-edit-param-title": "שם הדף לעריכה. לא לשימוש עם <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "מזהה הדף לעריכה. לא לשימוש עם <var>$1title</var>.",
+ "apihelp-edit-param-section": "מספר הפסקה <kbd>0</kbd> לפסקה העליונה, <kbd>new</kbd> לפסקה חדשה.",
+ "apihelp-edit-param-sectiontitle": "הכותרת לפסקה החדשה.",
+ "apihelp-edit-param-text": "תוכן הדף.",
+ "apihelp-edit-param-summary": "תקציר עריכה. גם כותרת פסקה כש־$1section=new ו־$1sectiontitle אינו מוגדר.",
+ "apihelp-edit-param-tags": "אילו תגי שינוי להחיל על הגרסה.",
+ "apihelp-edit-param-minor": "עריכה משנית.",
+ "apihelp-edit-param-notminor": "שינוי לא משני.",
+ "apihelp-edit-param-bot": "סימון עריכה זו כעריכת בוט.",
+ "apihelp-edit-param-basetimestamp": "חותם־זמן של גרסת הבסיס, משמש לזיהוי התנגשויות עריכה. אפשר לקבל אותו באמצעות [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "חותם־הזמן של תחילת תהליך העריכה, משמש לזיהוי התנגשויות. אפשר לקבל ערך מתאים באמצעות <var>[[Special:ApiHelp/main|curtimestamp]]</var> בעת תחילת תהליך העריכה (למשל בזמן טעינת תוכן הדף לעריכה).",
+ "apihelp-edit-param-recreate": "לעקוב את כל הטעויות על כך שהדף נמחק בינתיים.",
+ "apihelp-edit-param-createonly": "לא לערוך את הדף אם הוא כבר קיים.",
+ "apihelp-edit-param-nocreate": "לזרוק שגיאה אם הדף אינו קיים.",
+ "apihelp-edit-param-watch": "הוספת הדף לרשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-edit-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
+ "apihelp-edit-param-watchlist": "להוסיף את הדף לרשימת המעקב של המשתמש הנוכחי או להסיר אותו משם, להשתמש בהעדפות, או לא לשנות את מצב המעקב.",
+ "apihelp-edit-param-md5": "גיבוב MD5 של הפרמטר $1text או צירוף של הפטמטרים $1prependtext ו־$1appendtext. אם זה מוגדר, העריכה לא תיעשה אלא אם כן הגיבוב נכון.",
+ "apihelp-edit-param-prependtext": "הוספת הטקסט הזה לתחילת הדף. דורס את $1text.",
+ "apihelp-edit-param-appendtext": "הוספת הטקסט הזה לסוף הדף. דורס את $1text.\n\nיש להשתמש ב־$1section=new כדי להוסיף פסקה חדשה, ולא בפרמטר הזה.",
+ "apihelp-edit-param-undo": "לבטל את הגרסה הזאת. דורס את $1text‏, $1prependtext ו־$1appendtext.",
+ "apihelp-edit-param-undoafter": "ביטול כל הגרסאות מ־$1undo עד כאן. אם זה לא מוגדר, לבטל רק גרסה אחת.",
+ "apihelp-edit-param-redirect": "לפתור הפניות אוטומטית.",
+ "apihelp-edit-param-contentformat": "תסדיר להסדרת תוכן שמשמש את טקסט הקלט.",
+ "apihelp-edit-param-contentmodel": "מודל התוכן של התוכן החדש.",
+ "apihelp-edit-param-token": "האסימון תמיד צריך להישלח בתור הפרמטר האחרון, או לפחות אחרי הפרמטר $1text parameter.",
+ "apihelp-edit-example-edit": "עריכת דף",
+ "apihelp-edit-example-prepend": "הוספת <kbd>_&#95;NOTOC_&#95;</kbd> לתחילת הדף.",
+ "apihelp-edit-example-undo": "ביטול גרסאות מ־13579 עד 13585 עם תקציר אוטומטי.",
+ "apihelp-emailuser-summary": "שליחת דוא\"ל למשתמש.",
+ "apihelp-emailuser-param-target": "לאיזה משתמש לשלוח דוא\"ל.",
+ "apihelp-emailuser-param-subject": "כותרת נושא.",
+ "apihelp-emailuser-param-text": "גוף הדואר.",
+ "apihelp-emailuser-param-ccme": "שליחת עותק של הדואר הזה אליי.",
+ "apihelp-emailuser-example-email": "שליחת דוא\"ל למשתמש <kbd>WikiSysop</kbd> עם הטקסט <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "הרחבת כל התבניות בתוך קוד הוויקי.",
+ "apihelp-expandtemplates-param-title": "כותרת הדף.",
+ "apihelp-expandtemplates-param-text": "איזה קוד ויקי להמיר.",
+ "apihelp-expandtemplates-param-revid": "מזהה גרסה, עבור <code><nowiki>{{REVISIONID}}</nowiki></code> ומשתנים דומים.",
+ "apihelp-expandtemplates-param-prop": "אילו חלקי מידע לקבל.\n\nיש לשים לכך שאם לא נבחרו ערכים, התוצאה תכיל את קוד הוויקי, אבל הפלט יהיה בתסדיר מיושן.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "קוד הוויקי המורחב.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "קטגוריות כלשהן שקיימות בקלט ואינן מיוצגות בפלט הוויקיטקסט.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "מאפייני דף המוגדרים במילות קסם מורחבות בקוד ויקי.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "האם הפלט הוא נדיף ולא מיועד לשימוש במקום אחר בדף.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "הזמן המרבי שאחריו המטמונים של התוצאה צריכים לפוג.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "כל יחידות ה־ResourceLoader שפונקציות מפענח ביקשו לוסיף לפלט. יש לבקש את <kbd>jsconfigvars</kbd> או את <kbd>encodedjsconfigvars</kbd> יחד עם <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה בתור מחרוזת JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "עץ פענוח XML של הקלט.",
+ "apihelp-expandtemplates-param-includecomments": "האם לכלול הערות HTML בפלט.",
+ "apihelp-expandtemplates-param-generatexml": "יצירת עץ פענוח XML (מוחלף ב־$1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "להרחיב את קוד הוויקי <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "להחזיר הזנת תרומות משתמש.",
+ "apihelp-feedcontributions-param-feedformat": "תסדיר ההזנה.",
+ "apihelp-feedcontributions-param-user": "לקבל תרומות של אילו משמשים.",
+ "apihelp-feedcontributions-param-namespace": "לפי איזה מרחב שם לסנן את התרומות.",
+ "apihelp-feedcontributions-param-year": "החל משנה (ולפני כן).",
+ "apihelp-feedcontributions-param-month": "החל מחודש (ולפני כן).",
+ "apihelp-feedcontributions-param-tagfilter": "סינון תרומות בעלות התגיות הבאות.",
+ "apihelp-feedcontributions-param-deletedonly": "הצגת תרומות שנמחקו בלבד.",
+ "apihelp-feedcontributions-param-toponly": "הצגת עריכות שהן הגרסה העדכנית ביותר בלבד.",
+ "apihelp-feedcontributions-param-newonly": "להציג רק עריכות שהן יצירות דפים.",
+ "apihelp-feedcontributions-param-hideminor": "להסתיר עריכות משניות.",
+ "apihelp-feedcontributions-param-showsizediff": "להציג את ההבדל בגודל בין גרסאות.",
+ "apihelp-feedcontributions-example-simple": "החזרת תרומות עבור המשתמש <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "להחזיר הזנת שינויים אחרונים.",
+ "apihelp-feedrecentchanges-param-feedformat": "תסדיר ההזנה.",
+ "apihelp-feedrecentchanges-param-namespace": "לאיזה מרחב שם להגביל את התוצאות.",
+ "apihelp-feedrecentchanges-param-invert": "כל מרחבי השם למעט זה שנבחר.",
+ "apihelp-feedrecentchanges-param-associated": "לכלול מרחב שם משויך (שיחה או ראשי).",
+ "apihelp-feedrecentchanges-param-days": "לכמה ימים להגביל את התוצאות.",
+ "apihelp-feedrecentchanges-param-limit": "המספר המרבי של התוצאות להחזיר.",
+ "apihelp-feedrecentchanges-param-from": "להציג תוצאות מאז.",
+ "apihelp-feedrecentchanges-param-hideminor": "הסתרת שינוים משניים.",
+ "apihelp-feedrecentchanges-param-hidebots": "הסתרת שינויים שנעשו על ידי בוטים.",
+ "apihelp-feedrecentchanges-param-hideanons": "הסתרת שינויים שנעשו על ידי אנונימים.",
+ "apihelp-feedrecentchanges-param-hideliu": "הסתרת שינויים שנעשו על ידי משתמשים רשומים.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "הסתרת שינויים שנבדקו.",
+ "apihelp-feedrecentchanges-param-hidemyself": "הסתרת שינוים שנעשו על ידי המשתמש הנוכחי.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "להסתיר שינויים בחברות בקטגוריה.",
+ "apihelp-feedrecentchanges-param-tagfilter": "סינון לפי תגית.",
+ "apihelp-feedrecentchanges-param-target": "הצגת שינויים שנעשו בדפים המקושרים לדף זה בלבד.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "להציג את השינויים בדפים שמקושרים לדף שנבחר במקום זה.",
+ "apihelp-feedrecentchanges-example-simple": "הצגת שינויים אחרונים.",
+ "apihelp-feedrecentchanges-example-30days": "הצגת שינויים אחרונים עבור 30 ימים.",
+ "apihelp-feedwatchlist-summary": "החזרת הזנת רשימת מעקב.",
+ "apihelp-feedwatchlist-param-feedformat": "תסדיר ההזנה.",
+ "apihelp-feedwatchlist-param-hours": "רשימת דפים ששונו בתוך מספר כזה של שעות מעכשיו.",
+ "apihelp-feedwatchlist-param-linktosections": "לקשר ישר לפסקאות ששונו אם אפשר.",
+ "apihelp-feedwatchlist-example-default": "הצגת הזנת רשימת מעקב.",
+ "apihelp-feedwatchlist-example-all6hrs": "להציג את כל השינויים בדפים שבמעקב ב־6 השעות האחרונות.",
+ "apihelp-filerevert-summary": "לשחזר את הקובץ לגרסה ישנה יותר.",
+ "apihelp-filerevert-param-filename": "שם קובץ היעד, ללא התחילית File:.",
+ "apihelp-filerevert-param-comment": "הערת העלאה.",
+ "apihelp-filerevert-param-archivename": "שם הארכיון של הגרסה שאליה ישוחזר הקובץ.",
+ "apihelp-filerevert-example-revert": "לשחזר את <kbd>Wiki.png</kbd> לגרסה מ־<kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "הצגת עזרה עבור היחידות שצוינו.",
+ "apihelp-help-param-modules": "עזרה של אילו יחידות להציג (ערכים של הפרמטרים <var>action</var> ו־<var>format</var>, או <kbd>main</kbd>). אפשר להגדיר תת־יחידות עם <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "לכלול עזרה לתת־יחידות ליחידה שצוינה.",
+ "apihelp-help-param-recursivesubmodules": "לכלול עזרה לתת־יחידות באופן רקורסיבי.",
+ "apihelp-help-param-helpformat": "תסדיר פלט העזרה.",
+ "apihelp-help-param-wrap": "לעטוף את הפלט במבנה תשובת API תקני.",
+ "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
+ "apihelp-help-example-main": "עזרה ליחידה הראשית.",
+ "apihelp-help-example-submodules": "עזרה עבור <kbd>action=query</kbd> וכל התת־מודולים שלו.",
+ "apihelp-help-example-recursive": "כל העזרה בדף אחד.",
+ "apihelp-help-example-help": "עזרה ליחידת העזרה עצמה.",
+ "apihelp-help-example-query": "עזרה לשתי תת־יחידות של שאילתה.",
+ "apihelp-imagerotate-summary": "סיבוב של תמונה אחת או יותר.",
+ "apihelp-imagerotate-param-rotation": "בכמה מעלות לסובב בכיוון השעון.",
+ "apihelp-imagerotate-param-tags": "אילו תגים להחיל על העיול ביומן ההעלאות.",
+ "apihelp-imagerotate-example-simple": "לסובב את <kbd>File:Example.png</kbd> ב־<kbd>90</kbd> מעלות.",
+ "apihelp-imagerotate-example-generator": "לסובב את כל התמונות ב־<kbd>Category:Flip</kbd> ב־<kbd>180</kbd> מעלות.",
+ "apihelp-import-summary": "לייבא דף מוויקי אחר או מקובץ XML.",
+ "apihelp-import-extended-description": "יש לשים לב לכך שפעולת HTTP POST צריכה להיעשות בתור העלאת קובץ (כלומר, עם multipart/form-data) בזמן שליחת קובץ לפרמטר <var>xml</var>.",
+ "apihelp-import-param-summary": "תקציר ייבוא עיולי יומן.",
+ "apihelp-import-param-xml": "קובץ XML שהועלה.",
+ "apihelp-import-param-interwikisource": "ליבוא בין אתרי ויקי: מאיזה ויקי לייבא.",
+ "apihelp-import-param-interwikipage": "ליבוא בין אתרי ויקי: איזה דף לייבא.",
+ "apihelp-import-param-fullhistory": "ליבוא בין אתרי ויקי: לייבר את ההיסטוריה המלאה, לא רק את הגרסה הנוכחית.",
+ "apihelp-import-param-templates": "ליבוא בין אתרי ויקי: לייבא גם את כל התבניות המוכללות.",
+ "apihelp-import-param-namespace": "לייבא למרחב השם הזה. לא ניתן להשתמש בזה יחד עם <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "לייבא בתור תת־משנה של הדף הזה. לא ניתן להשתמש בזה יחד עם <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "תגי שינוי שיחולו על העיול ביומן הייבוא ולגרסה הריקה בדפים המיובאים.",
+ "apihelp-import-example-import": "לייבא את [[meta:Help:ParserFunctions]] למרחב השם 100 עם היסטוריה מלאה.",
+ "apihelp-linkaccount-summary": "קישור חשבון של ספק צד־שלישי למשתמש הנוכחי.",
+ "apihelp-linkaccount-example-link": "תחילת תהליך הקישור לחשבון מ־<kbd>Example</kbd>.",
+ "apihelp-login-summary": "להיכנס ולקבל עוגיות אימות.",
+ "apihelp-login-extended-description": "הפעולה הזאת צריכה לשמש רק בשילוב [[Special:BotPasswords]]; שימוש לכניסה לחשבון ראשי מיושן ועשוי להיכשל ללא אזהרה. כדי להיכנס בבטחה לחשבון הראשי, יש להשתמש ב־<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "הפעולה הזאת מיושנת ועשויה להיכשל ללא אזהרה. כדי להיכנס בבטחה, יש להשתמש ב־<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "שם משתמש.",
+ "apihelp-login-param-password": "ססמה.",
+ "apihelp-login-param-domain": "שם מתחם (רשות).",
+ "apihelp-login-param-token": "אסימון כניסה התקבל בבקשה הראשונה.",
+ "apihelp-login-example-gettoken": "קבלת אסימון כניסה.",
+ "apihelp-login-example-login": "כניסה.",
+ "apihelp-logout-summary": "יציאה וניקוי של נתוני הפעילות.",
+ "apihelp-logout-example-logout": "הוצאת המשתמש הנוכחי.",
+ "apihelp-managetags-summary": "ביצוע פעולות ניהוליות הקשורות בשינוי תגיות.",
+ "apihelp-managetags-param-operation": "איזו פעולה לבצע:\n;create:יצירת תג שינוי חדש לשימוש ידני.\n;delete:הסרת תג שינוי ממסד הנתונים, כולל הסרת התג מכל הגרסאות, עיולי שינויים אחרונים ועיולי יומן שהוא משמש בהן.\n;activate:הפעלת תג שינוי, ואפשור למשתמש להחיל אותו ידנית.\n;deactivate:כיבוי תג שינוי, ומניעה ממשתמשים להחיל אותו ידנית.",
+ "apihelp-managetags-param-tag": "תג ליצירה, מחיקה, הפעלה או כיבוי. ליצירת תג, התג לא צריך להיות קיים. למחיקת תג, התג צריך להיות קיים. להפעלת תג, התג צריך להתקיים ולא להיות בשימוש של הרחבה. לכיבוי תג, התג צריך להיות קיים ומוגדר ידנית.",
+ "apihelp-managetags-param-reason": "סיבה אופציונלית ליצירה, מחיקה, הפעלה או כיבוי של תג.",
+ "apihelp-managetags-param-ignorewarnings": "האם להתעלם מכל האזהרות שמופיעות תוך כדי הפעולה.",
+ "apihelp-managetags-param-tags": "תגי השינוי שיחולו על העיול ביומן ניהול התגים.",
+ "apihelp-managetags-example-create": "יצירת תג בשם <kbd>spam</kbd> עם הסיבה <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "מחיקת התג <kbd>vandlaism</kbd> עם הסיבה <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "הפעלת התג <kbd>spam</kbd> עם הסיבה <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "כיבוי התג <kbd>spam</kbd> עם הסיבה <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "מיזוג גרסאות של דפים.",
+ "apihelp-mergehistory-param-from": "כותרת הדף שההיסטוריה שלו תמוזג. לא ניתן להשתמש בזה יחד עם <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "מזהה הדף שממנו תמוזג ההיסטוריה. לא ניתן להשתמש בזה יחד עם <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "כותרת הדף שההיסטוריה תמוזג אליו. לא ניתן להשתמש בזה יחד עם <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "מזהה הדף שההיסטוריה תמוזג אליו. לא ניתן להשתמש בזה יחד עם <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "חותם־הזמן שהגרסאות עד אליו יועברו מההיסטוריה של דף המקור על ההיסטוריה של דף היעד. אם מושמט, כל ההיסטוריה של דף המקור תמוזג עם דף היעד.",
+ "apihelp-mergehistory-param-reason": "סיבה למיזוג ההיסטוריה.",
+ "apihelp-mergehistory-example-merge": "מיזוג כל ההיסטוריה של <kbd>Oldpage</kbd> אל <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "מיזוג גרסאות הדפים של <kbd>Oldpage</kbd> עד <kbd dir=\"ltr\">2015-12-31T04:37:41Z</kbd> אל <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "העברת עמוד.",
+ "apihelp-move-param-from": "שם הדף ששמו ישונה. לא יכול לשמש יחד עם <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "מזהה הדף של הדף שצריך לשנות את שמו. לא יכול לשמש עם <var>$1from</var>.",
+ "apihelp-move-param-to": "לאיזו כותרת לשנות את שם הדף.",
+ "apihelp-move-param-reason": "הסיבה לשינוי השם.",
+ "apihelp-move-param-movetalk": "שינוי שם דף השיחה, אם הוא קיים.",
+ "apihelp-move-param-movesubpages": "שינוי השמות של דפי־המשנה, אם זה שייך.",
+ "apihelp-move-param-noredirect": "לא ליצור הפניה.",
+ "apihelp-move-param-watch": "הוספת הדף וההפניה לרשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-move-param-unwatch": "הסרת הדף וההפניה מרשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-move-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+ "apihelp-move-param-ignorewarnings": "להתעלם מכל האזהרות.",
+ "apihelp-move-param-tags": "תגי שינוי שיחולו על העיול ביומן ההעברות ולגרסה הריקה בדף היעד.",
+ "apihelp-move-example-move": "העברת <kbd>Badtitle</kbd> ל־<kbd>Goodtitle</kbd> בלי להשאיר הפניה.",
+ "apihelp-opensearch-summary": "חיפוש בוויקי בפרוטוקול OpenSearch.",
+ "apihelp-opensearch-param-search": "מחרוזת לחיפוש.",
+ "apihelp-opensearch-param-limit": "המספר המרבי של התוצאות שתוחזרנה.",
+ "apihelp-opensearch-param-namespace": "שמות מתחם לחיפוש.",
+ "apihelp-opensearch-param-suggest": "לא לעשות דבר אם <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> הוא false.",
+ "apihelp-opensearch-param-redirects": "איך לטפל בהפניות:\n;return:להחזיר את ההפניה עצמה.\n;resolve:להחזיר את דף היעד. יכול להחזיר פחות מ־$1limit תוצאות.\nמסיבות היסטוריות, בררת המחדל היא \"return\" עבור $1format=json ו־\"resolve\" עבור תסדירים אחרים.",
+ "apihelp-opensearch-param-format": "תסדיר הפלט.",
+ "apihelp-opensearch-param-warningsaserror": "אם אזהרות מוּעלות עם <kbd>format=json</kbd>, להחזיר שגיאת API במקום להתעלם מהן.",
+ "apihelp-opensearch-example-te": "חיפוש דפים שמתחילים ב־<kbd>Te</kbd>.",
+ "apihelp-options-summary": "שינוי העדפות של המשתמש הנוכחי.",
+ "apihelp-options-extended-description": "רק אפשרויות שמוגדרות בליבה או באחת מההרחבות המותקנות, או אפשרויות עם מפתחות עם התחילית \"<code dir=\"ltr\">userjs-</code>\" (שמיועדות לשימוש תסריטי משתמשים) יכולות להיות מוגדרות.",
+ "apihelp-options-param-reset": "אתחול ההעדפות לבררות המחדל של האתר.",
+ "apihelp-options-param-resetkinds": "רשימת סוגי אפשרויות לאתחל כאשר מוגדרת האפשרות <var>$1reset</var>.",
+ "apihelp-options-param-change": "רשימת שינויים, בתסדיר name=value (למשל skin=vector). אם לא ניתן ערך, אפילו לא סימן שווה, למשל optionname|otheroption|...‎, האפשרות תאופס לערך בררת המחדל שלה. אם ערך מועבר כלשהו מכיל את תו המקל (<kbd>|</kbd>), יש להשתמש ב[[Special:ApiHelp/main#main/datatypes|מפריד ערכים מרובים חלופי]] בשביל פעולה נכונה.",
+ "apihelp-options-param-optionname": "שם האפשרות שצריך להגדיר לערך שניתן ב־<var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "ערך האפשרות שצוין ב־<var>$1optionname</var>.",
+ "apihelp-options-example-reset": "אתחול כל ההעדפות.",
+ "apihelp-options-example-change": "לשנות את ההעדפות <kbd>skin</kbd> ו־<kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "לאתחל את כל ההעדפות ואז להגדיר את <kbd>skin</kbd> ואת <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "קבלת מידע על יחידות של API.",
+ "apihelp-paraminfo-param-modules": "רשימה של שמות יחידות (ערכים של הפרמטרים <var>action</var> ו־<var>format</var>, או <kbd>main</kbd>). אפשר להגדיר תת־יחידות עם <kbd>+</kbd>, או כל התת־מודולים עם <kbd dir=\"ltr\">+*</kbd>, או כל התת־מודולים באופן רקורסיבי עם <kbd dir=\"ltr\">+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "תסדיר מחרוזות העזרה.",
+ "apihelp-paraminfo-param-querymodules": "רשימת שמות יחידות query (ערך של הפרמטר <var>prop</var>‏, <var>meta</var> או <var>list</var>). יש להשתמש ב־<kbd>$1modules=query+foo</kbd> במקום <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "קבלת מידע עם היחידה הראשית (העליונה). יש להשתמש ב־<kbd>$1modules=main</kbd> במקום זה.",
+ "apihelp-paraminfo-param-pagesetmodule": "קבלת מידע גם על יחידת pageset (שמספק את titles=‎ וידידיו).",
+ "apihelp-paraminfo-param-formatmodules": "רשימת שמות תסדירים (ערכים של הפרמטר <var>format</var>). יש להשתמש ב־<var>$1modules</var> במקום זה.",
+ "apihelp-paraminfo-example-1": "הצגת מידע עבור <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>‏, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>‏, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>‏, ו־<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "הצגת מידע עבור כל התת־מודולים של <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "מפענח את התוכן ומחזיר פלט מפענח.",
+ "apihelp-parse-extended-description": "ר' את יחידת ה־prop השונות של <kbd>[[Special:ApiHelp/query|action=query]]</kbd> כדי לקבל מידע על הגרסה הנוכחית של הדף.\n\nיש מספר דרכים לציין טקסט לפענוח:\n# ציון דף או גרסה באמצעות <var>$1page</var>‏, <var>$1pageid</var>, או <var>$1oldid</var>.\n# ציון התוכן במפורש, באמצעות <var>$1text</var>‏, <var>$1title</var>, ו־<var>$1contentmodel</var>.\n# ציון רק של התקציר לפענוח. ל־<var>$1prop</var> צריך לתת ערך ריק.",
+ "apihelp-parse-param-title": "שם הדף שהטקסט שייך אליו. אם זה מושמט, יש לציין את <var>$1contentmodel</var>, ו־[[API]] ישמש ככותרת.",
+ "apihelp-parse-param-text": "הטקסט לפענוח. יש להשתמש ב־<var>$1title</var> או ב־<var>$1contentmodel</var>.",
+ "apihelp-parse-param-revid": "מזהה גרסה, עבור <code><nowiki>{{REVISIONID}}</nowiki></code> ומשתנים דומים.",
+ "apihelp-parse-param-summary": "התקציר שצריך לפענח.",
+ "apihelp-parse-param-page": "פענוח תוכן הדף הזה. לא יכול לשמש יחד עם <var>$1text</var> ו־<var>$1title</var>.",
+ "apihelp-parse-param-pageid": "לפענח את התוכן של הדף הזה. דורס את <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "אם <var>$1page</var> או <var>$1pageid</var> מוגדרים להפניה, לפתור אותה.",
+ "apihelp-parse-param-oldid": "לפענח את התוכן של הגרסה הזאת. דורס את <var>$1page</var> ואת <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "אילו פריטי מידע לקבל:",
+ "apihelp-parse-paramvalue-prop-text": "נותן טקסט מפוענח של קוד הוויקי.",
+ "apihelp-parse-paramvalue-prop-langlinks": "נותן קישורי שפה בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-categories": "נותן קטגוריות בקוד ויקי מפוענח.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "נותן את גרסת ה־HTML של הקטגוריות.",
+ "apihelp-parse-paramvalue-prop-links": "נותן קישורים פנימיים בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-templates": "נותן תבניות בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-images": "נותן תמונות בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-externallinks": "מתן קישורים חיצוניים בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-sections": "מתן הפסקאות בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-revid": "הוספת מזהה הגרסה של הדף המפוענח.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "הוספת הכותרת של קוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-headitems": "נותן פריטים לשים ב־<code>&lt;head&gt;</code> של הדף.",
+ "apihelp-parse-paramvalue-prop-headhtml": "נותן את ה־<code>&lt;head&gt;</code> המפוענח של הדף.",
+ "apihelp-parse-paramvalue-prop-modules": "מתן יחידות ResourceLoader שמשמשות בדף. כדי לטעון, יש להשתמש ב<code dir=\"ltr\">mw.loader.using()</code>. יש לבקש את <kbd>jsconfigvars</kbd> או את <kbd>encodedjsconfigvars</kbd> יחד עם <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה. כדי להחיל, יש להשתמש ב<code dir=\"ltr\">mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה בתור מחרוזת JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "נותן את ה־HTML של מחווני מצב דף שמשמשים בדף.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "מתן קישורי בינוויקי בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-wikitext": "מתן קוד הוויקי המקורי שפוענח.",
+ "apihelp-parse-paramvalue-prop-properties": "נותן מאפיינים שונים שמוגדרים בקוד הוויקי המפוענח.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "נותן דו\"ח הגבלות בדרך מובנית. לא נותן שום נתונים כאשר מוגדר <var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "נותן את גרסת ה־HTML של דו\"ח ההגבלות. לא נותן שום נתונים כאשר מוגדר <var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-parsetree": "עץ פענוח XML של תוכן הגרסה (דורש מודל תוכן <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "נותן אזהרות שאירעו בזמן פענוח התוכן.",
+ "apihelp-parse-param-wrapoutputclass": "מחלקה של CSS שתשמש לעטיפת פלט המפענח.",
+ "apihelp-parse-param-pst": "לעשות התמרה לפני שמירה על הקלט לפני פענוחו. תקין רק בשימוש עם טקסט.",
+ "apihelp-parse-param-onlypst": "לעשות התמרה לפני שמירה (pre-save transform‏, PST) על הקלט, אבל לא לפענח אותו. מחזיר את אותו קוד הוויקי אחרי החלת PST. תקף רק בשימוש עם <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "כולל קישור שפה שמספקות הרחבות (לשימוש עם <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "לפענח רק את התוכן של הפסקה שזה מספרה.\n\nכשצוין <kbd>new</kbd>, לפענח את <var>$1text</var> ואת <var>$1sectiontitle</var> כאילו נוספת פסקה חדשה לדף.\n\nמותר להשתמש ב־<kbd>new</kbd> רק בעת שימוש ב־<var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "כותרת פסקה חדשה כאשר <var>section</var> הוא <kbd>new</kbd>.\n\nבניגוד לעריכת דף, זה לא מתגבה ל־<var>summary</var> כשזה מושמט אם ריק.",
+ "apihelp-parse-param-disablelimitreport": "להשמיט את דו\"ח הקדם־מעבד (\"NewPP limit report\") מפלט המפענח.",
+ "apihelp-parse-param-disablepp": "יש להשתמש ב־<var>$1disablelimitreport</var> במקום.",
+ "apihelp-parse-param-disableeditsection": "להשמיט את קישורי עריכת הפסקאות מפלט המפענח.",
+ "apihelp-parse-param-disabletidy": "לא להריץ ניקוי HTML (למשל tidy) על פלט המפענח.",
+ "apihelp-parse-param-generatexml": "יצירת עץ פענוח של XML (נדרש מודל תוכן <code>$1</code>; מוחלף ב־<kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "לפענח במצב תצוגה מקדימה.",
+ "apihelp-parse-param-sectionpreview": "לפענח במצב תצוגה מקדימה של פסקה (מדליק גם את מצב תצוגה מקדימה).",
+ "apihelp-parse-param-disabletoc": "להשמיט את תוכן העניינים בפלט.",
+ "apihelp-parse-param-useskin": "להחיל את העיצוב שנבחר לפלט המפענח. יכול להשפיע על המאפיינים הבאים: <kbd dir=\"ltr\">langlinks</kbd>, <kbd dir=\"ltr\">headitems</kbd>, <kbd dir=\"ltr\">modules</kbd>, <kbd dir=\"ltr\">jsconfigvars</kbd>, <kbd dir=\"ltr\">indicators</kbd>.",
+ "apihelp-parse-param-contentformat": "תסדיר הסדרת תוכן שישמש לטקסט הקלט. תקף רק עם $1text.",
+ "apihelp-parse-param-contentmodel": "מודל התוכן של טקסט הקלט. אם זה מושמט, יש לציין את $1title והערך ההתחלתי יהיה המודל של הכותרת שצוינה. תקין רק כאשר משמש עם $1text.",
+ "apihelp-parse-example-page": "לפענח דף.",
+ "apihelp-parse-example-text": "לפענח קוד ויקי.",
+ "apihelp-parse-example-texttitle": "לפענח קוד, עם ציון כותרת דף.",
+ "apihelp-parse-example-summary": "לפענח תקציר.",
+ "apihelp-patrol-summary": "לנטר דף או גרסה.",
+ "apihelp-patrol-param-rcid": "מזהה שינויים אחרונים לניטור.",
+ "apihelp-patrol-param-revid": "מזהה גרסה לניטור.",
+ "apihelp-patrol-param-tags": "תגי שינוי שיחולו על העיול ביומן הניטור.",
+ "apihelp-patrol-example-rcid": "לנטר רשומה משינויים אחרונים.",
+ "apihelp-patrol-example-revid": "לנטר גרסה.",
+ "apihelp-protect-summary": "לשנות את רמת ההגנה של דף.",
+ "apihelp-protect-param-title": "כותרת הדף להגנה או הסרת הגנה. לא ניתן להשתמש בזה יחד עם $1pageid.",
+ "apihelp-protect-param-pageid": "מזהה הדף להגנה או הסרת הגנה. לא ניתן להשתמש בזה יחד עם $1title.",
+ "apihelp-protect-param-protections": "רשימת רמות הגנה, בתסדיר <kbd>action=level</kbd> (למשל <kbd>edit=sysop</kbd>). רמת <kbd>all</kbd> פירושה שכולם מורשים לבצע את הפעולה, כלומר אין הגנה.\n\n<strong>הערה:</strong> ההגבלות יוסרו מכל הפעולות שלא כתובות ברשימה.",
+ "apihelp-protect-param-expiry": "חותמי־זמן של תפוגה. אם הוגדר רק חותם־זמן אחד, הוא ישמש לכל ההגנות. יש להשתמש ב־<kbd>infinite</kbd>‏, <kbd>indefinite</kbd>‏, <kbd>infinity</kbd>, או <kbd>never</kbd> להגנה שלא פגה לעולם.",
+ "apihelp-protect-param-reason": "סיבה להגנה או הסרת הגנה.",
+ "apihelp-protect-param-tags": "תגי שינוי שיחולו על העיול ביומן ההגנה.",
+ "apihelp-protect-param-cascade": "הפעלת הגנה מדורגת (כלומר, להגן על דפים שמוכללים בדף הזה ועל תמונות שמשמות בו). אין לזה השפעה אם אף אחת מרמות ההגנה שניתנו אינה תומכת בדירוג.",
+ "apihelp-protect-param-watch": "אם זה מוגדר, הוספת הדף שהגנה נוספת אליו או מוסרת ממנו לרשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-protect-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+ "apihelp-protect-example-protect": "הגנה על דף.",
+ "apihelp-protect-example-unprotect": "להסיר את ההגנה מהדף על־ידי הגדרת מגבלות על <kbd>all</kbd> (למשל: כולם מורשים לבצע את הפעולה).",
+ "apihelp-protect-example-unprotect2": "הסרת הגנה מדף על־ידי הגדרה של אפס הגבלות.",
+ "apihelp-purge-summary": "ניקוי המטמון לכותרות שניתנו.",
+ "apihelp-purge-param-forcelinkupdate": "עדכון טבלאות הקישורים.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "עדכון טבלת הקישורים ועדכון טבלאות הקישורים עבור כל דף שמשתמש בדף הזה בתור תבנית.",
+ "apihelp-purge-example-simple": "ניקוי המטמון של הדפים <kbd>Main Page</kbd> ו־<kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "ניקוי 10 הדפים הראשונים במרחב הראשי.",
+ "apihelp-query-summary": "אחזור נתונים ממדיה־ויקי ועליה.",
+ "apihelp-query-extended-description": "כל שינויי הנתונים יצטרכו תחילה להשתמש ב־query כדי לקבל אסימון למניעת שימוש לרעה מאתרים זדוניים.",
+ "apihelp-query-param-prop": "אילו מאפיינים לקבל על הדפים בשאילתה.",
+ "apihelp-query-param-list": "אילו רשימות לקבל.",
+ "apihelp-query-param-meta": "אילו מטא־נתונים לקבל.",
+ "apihelp-query-param-indexpageids": "לכלול פסקת pageids נוספת עם רשימת כל מזהי הדף שהוחזרו.",
+ "apihelp-query-param-export": "יצוא הגרסאות הנוכחיות של כל הדפים הנתונים המחוללים.",
+ "apihelp-query-param-exportnowrap": "להחזיר את ה־XML של היצוא בלי לעטוף אותו בתוצאת XML (אותו תסדיר כמו [[Special:Export]]). אפשר להשתמש בזה רק עם $1export.",
+ "apihelp-query-param-iwurl": "האם לקבל את ה־URL המלא אם הכותרת היא קישור בינוויקי.",
+ "apihelp-query-param-rawcontinue": "להחזיר נתוני <samp>query-continue</samp> גולמיים להמשך.",
+ "apihelp-query-example-revisions": "אחזור [[Special:ApiHelp/query+siteinfo|site info]] ו־[[Special:ApiHelp/query+revisions|revisions]] של <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "אחזור גרסאת של דפים שמתחילים ב־<kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "למנות את כל הקטגוריות.",
+ "apihelp-query+allcategories-param-from": "מאיזו קטגוריה להתחיל למנות.",
+ "apihelp-query+allcategories-param-to": "באיזו קטגוריה להפסיק למנות.",
+ "apihelp-query+allcategories-param-prefix": "חיפוש כל כותרות הקטגוריות שמתחילות בערך הזה.",
+ "apihelp-query+allcategories-param-dir": "באיזה כיוון למיין.",
+ "apihelp-query+allcategories-param-min": "להחזיר רק קטגוריות עם מספר כזה לפחות של חברים.",
+ "apihelp-query+allcategories-param-max": "להחזיר רק קטגוריות עם מספר כזה לכל היותר של חברים.",
+ "apihelp-query+allcategories-param-limit": "כמה קטגוריות להחזיר.",
+ "apihelp-query+allcategories-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "הוספת מספר הדפים בקטגוריה.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "מתייג קטגוריות מוסתרות עם <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "רשימת קטגוריות עם מידע על מספר הדפים בכל אחת מהן.",
+ "apihelp-query+allcategories-example-generator": "אחזור מידע על דף הקטגוריה עצמו עבור קטגוריות שמתחילות ב־<kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "רשימת כל הגרסאות המחוקות על־ידי משתמש או במרחב.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "יכול לשמש רק <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "לא יכול לשמש עם <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "מאיזה חותם־זמן להתחיל למנות.",
+ "apihelp-query+alldeletedrevisions-param-end": "באיזה חותם־זמן להפסיק למנות.",
+ "apihelp-query+alldeletedrevisions-param-from": "להתחיל את הרשימה בשם הזה.",
+ "apihelp-query+alldeletedrevisions-param-to": "להפסיק את הרשימה בכותרת הזאת.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "חיפוש כל שמות הדפים שמתחילים בערך הזה.",
+ "apihelp-query+alldeletedrevisions-param-tag": "לרשום רק גרסאות עם התג הזה.",
+ "apihelp-query+alldeletedrevisions-param-user": "לרשום רק גרסאות מאת המשתמש הזה.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "לרשום רק דפים במרחב השם הזה.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>לתשומת לבך:</strong> בשל [[mw:Special:MyLanguage/Manual:$wgMiserMode|מצב חיסכון]], שימוש ב־<var>$1user</var> וב־<var>$1namespace</var> ביחד עלול להניב החזרה של פחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים יכולות להיות מוחזרות אפס תוצאות.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "בעת שימוש בתור מחולל, לחולל כותרת במקום מזהי גרסה.",
+ "apihelp-query+alldeletedrevisions-example-user": "לרשום את 50 התרומות המחוקות האחרונות של משתמש <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "רשימת 50 הגרסאות המחוקות הראשונות במרחב הראשי.",
+ "apihelp-query+allfileusages-summary": "לרשום את כל שימושי הקובץ, כולל בלתי־קיימים.",
+ "apihelp-query+allfileusages-param-from": "מאיזה שם קובץ להתחיל למנות.",
+ "apihelp-query+allfileusages-param-to": "שם הקובץ שהמנייה תסתיים בו.",
+ "apihelp-query+allfileusages-param-prefix": "חיפוש כל שמות הקבצים שמתחילים עם הערך הזה.",
+ "apihelp-query+allfileusages-param-unique": "להציג רק שמות קבצים ייחודיים. לא יכול לשמש עם $1prop=ids.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+ "apihelp-query+allfileusages-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "הוספת מזהי הדף של הדפים המשתמשים (לא יכול לשמש עם $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "הוספת שם הקובץ.",
+ "apihelp-query+allfileusages-param-limit": "כמה פריטים להחזיר בסך הכול.",
+ "apihelp-query+allfileusages-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+allfileusages-example-B": "רשימת שמות קבצים, כולל חסרים, עם מזהי הדפים שהם מופיעים בהם, החל מ־<kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "רשימת שמות קבצים ייחודיים.",
+ "apihelp-query+allfileusages-example-unique-generator": "קבלת כל שמות הקבצים, כולל חסרים.",
+ "apihelp-query+allfileusages-example-generator": "קבלת דפים שמכילים את הקבצים.",
+ "apihelp-query+allimages-summary": "למנות את כל התמונות לפי הסדר.",
+ "apihelp-query+allimages-param-sort": "לפי איזה מאפיין למיין.",
+ "apihelp-query+allimages-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+allimages-param-from": "מאיזה שם תמונה להתחיל למנות. יכול לשמש רק עם $1sort=name.",
+ "apihelp-query+allimages-param-to": "כותרת תמונה שבה תסתיים המניי. יכול לשמש רק עם $1sort=name.",
+ "apihelp-query+allimages-param-start": "מאיזה חותם־זמן להתחיל למנות. יכול לשמש רק עם $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "באיזה חותם זמן להפסיק לרשום. אפשר להשתמש בזה רק עם $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "חיפוש כל שמות התמונות שמתחילים בערך הזה. יכול לשמש רק עם $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "להגביל לתמונות עם מספר כזה של בייטים לפחות.",
+ "apihelp-query+allimages-param-maxsize": "להגביל לתמונות עם מספר כזה לכל היותר של בייטים.",
+ "apihelp-query+allimages-param-sha1": "גיבוב SHA1 של תמונה. דריסת $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "גיבוב SHA1 של התמונה בבסיס 36 (הבסיס בו נעשה שימוש במדיה־ויקי).",
+ "apihelp-query+allimages-param-user": "להחזיר רק קבצים שהועלו על־ידי המשתמש הזה. יכול לשמש רק עם $1sort=timestamp. לא יכול לשמש יחד עם $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "איך לסנן קבצים שמעלים בוטים. יכול לשמש רק עם $1sort=timestamp. לא יכול לשמש יחד עם $1user.",
+ "apihelp-query+allimages-param-mime": "אילו סוגי MIME לחבפש, למשל <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "כמה תמונות להחזיר בסך הכול.",
+ "apihelp-query+allimages-example-B": "הצגת רשימה של קבצים שמתחילים באות <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "הצגת רשימת קבצים שהועלו לאחרונה, דומה ל־[[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "להציג רשימה של קבצות שסוג ה־MIME שלהם הוא <kbd>image/png</kbd> או <kbd>image/gif</kbd>.",
+ "apihelp-query+allimages-example-generator": "הצגת מידע על 4 קבצים המתחילים באות <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "למנות את כל הקישורים שמצביעים למרחב שם נתון.",
+ "apihelp-query+alllinks-param-from": "מאיזה שם קישור להתחיל למנות.",
+ "apihelp-query+alllinks-param-to": "כותרת הקישור שהמנייה תסתיים בו.",
+ "apihelp-query+alllinks-param-prefix": "חיפוש כל הכותרות המקושרות שמתחילות בערך הזה.",
+ "apihelp-query+alllinks-param-unique": "להציג רק שמות מקושרים ייחודיים. לא יכול לשמש עם <kbd>$1prop=ids</kbd>.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+ "apihelp-query+alllinks-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "הוספת מזהי הדף של הדף המקשר (לא יכול לשמש עם <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "הוספת שם הקישור.",
+ "apihelp-query+alllinks-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+alllinks-param-limit": "כמה פריטים להחזיר בסך הכול.",
+ "apihelp-query+alllinks-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+alllinks-example-B": "רשימת כותרות מקושרות, כולל חסרות, עם מזהי הדפים שהן מופיעות בהם, החל מ־<kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "רשימת כותרות מקושרים ייחודיות.",
+ "apihelp-query+alllinks-example-unique-generator": "קבלת כל הכותרות המקושרות, וסימון החסרות.",
+ "apihelp-query+alllinks-example-generator": "קבלת דפים שמכילים את הקישורים.",
+ "apihelp-query+allmessages-summary": "החזרת הודעות מהאתר הזה.",
+ "apihelp-query+allmessages-param-messages": "אילו הודעות לפלוט. כתיבת <kbd>*</kbd> (בררת מחדל) תפלוט את כל ההודעות.",
+ "apihelp-query+allmessages-param-prop": "אלו מאפיינים לקבל.",
+ "apihelp-query+allmessages-param-enableparser": "יש להגדיר כדי להפעיל את המפענח, יעשה קדם־עיבוד לקוד ויקי של ההודעה (יחליף מילות קסם, יטפל בתבניות, וכו').",
+ "apihelp-query+allmessages-param-nocontent": "אם זה מוגדר, לא לכלול את תוכן ההודעות בפלט.",
+ "apihelp-query+allmessages-param-includelocal": "לכלול גם הודעות מקומיות, כלומר הודעות שאינן קיימות בתכנה, אבל כן קיימות במרחב {{ns:MediaWiki}}.\nזה רושם את כל הדפים במרחב {{ns:MediaWiki}}, כך שזה ירשום גם דפים שאינם באמת הודעות, כגון [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "ארגומנטים שיוחלפו לתוך ההודעה.",
+ "apihelp-query+allmessages-param-filter": "החזרה רק של הודעות עם שמות שמכילים את המחרוזת הזאת.",
+ "apihelp-query+allmessages-param-customised": "להחזיר רק הודעות במצב ההתאמה הזה.",
+ "apihelp-query+allmessages-param-lang": "החזרת הודעת בשפה הזאת.",
+ "apihelp-query+allmessages-param-from": "החזרת הודעת החל מההודעה הזאת.",
+ "apihelp-query+allmessages-param-to": "החזרת הודעות עד ההודעה הזאת.",
+ "apihelp-query+allmessages-param-title": "שם דף לשימוש בתור הֶקשר בעת ענוח הודעה (עבור האפשרות $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "החזרת הודעת עם התחילית הזאת.",
+ "apihelp-query+allmessages-example-ipb": "להציג הודעות שמתחילות ב־<kbd dir=\"ltr\">ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "להציג את ההודעות <kbd>august</kbd> ו־<kbd>mainpage</kbd> בגרמנית.",
+ "apihelp-query+allpages-summary": "למנות את כל הדפים לפי הסדר במרחב שם נתון.",
+ "apihelp-query+allpages-param-from": "מאיזה שם דף להתחיל למנות.",
+ "apihelp-query+allpages-param-to": "כותרת הדף שהמנייה תסתיים בו.",
+ "apihelp-query+allpages-param-prefix": "חיפוש כל שמות הדפים שמתחילים בערך הזה.",
+ "apihelp-query+allpages-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+allpages-param-filterredir": "אילו דפים לרשום.",
+ "apihelp-query+allpages-param-minsize": "להגביל לדפים עם מספר כזה לפחות של בייטים.",
+ "apihelp-query+allpages-param-maxsize": "להגביל לדפים שיש בהם לכל היותר מספר כזה של בייטים.",
+ "apihelp-query+allpages-param-prtype": "להגביל רק לדפים מוגנים.",
+ "apihelp-query+allpages-param-prlevel": "לסנו הגנות לפי רמת ההגנה (חייב לשמש עם $1prtype= parameter).",
+ "apihelp-query+allpages-param-prfiltercascade": "לסנן הגנות לפי דירוגיות (לא תקף כאשר $1prtype אינו מוגדר).",
+ "apihelp-query+allpages-param-limit": "כמה דפים להחזיר בסך הכול.",
+ "apihelp-query+allpages-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+allpages-param-filterlanglinks": "סינון על סמך קיום קישורים לשוניים בדף. יש לשים לב לכך שזה אולי לא יתייחס לקישורים לשוניים שנוספו על־ידי הרחבות.",
+ "apihelp-query+allpages-param-prexpiry": "לפי איזו תפוגת הגנה לסנן את הדף הזה:\n;indefinite:לקבל רק דפים מוגנית לצמיתות.\n;definite:לקבל רק דפים עם תפוגת הגנה מוגדרת.\n;all:לקבל דפים עם תפוגת הגנה כלשהי.",
+ "apihelp-query+allpages-example-B": "להציג רשימה של דפים במתחילים באות <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "להציג מידע על 4 דפים שמתחילים באות <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "להציג את תוכן של 2 הדפים הראשונים שמתחילים ב־<kbd>Re</kbd> ושאינם דפי הפניה.",
+ "apihelp-query+allredirects-summary": "רשימה של כל ההפניות למרחב שם.",
+ "apihelp-query+allredirects-param-from": "מאיזו כותרת הפניה להתחיל את מנייה.",
+ "apihelp-query+allredirects-param-to": "כותרת ההפניה שהמנייה תיפסק בה.",
+ "apihelp-query+allredirects-param-prefix": "חיפוש על דפי היעד שמתחילים בערך הזה.",
+ "apihelp-query+allredirects-param-unique": "להציג רק דפים ייחודיים. לא יכול לשמש עם $1prop=ids|fragment|interwiki.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+ "apihelp-query+allredirects-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "הוספת מזהה הדף של הדף המפנה (לא יכול לשמש עם <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "הוספת כותרת ההפניה.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "הוספת המובאה מההפניה, אם יש (לא יכול לשמש עם <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "הוספת תחילית הבינוויקי מההפניה, אם יש (לא יכול לשמש עם <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+allredirects-param-limit": "כמה פריטים להחזיר בסך הכול.",
+ "apihelp-query+allredirects-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+allredirects-example-B": "רשימת דפי יעד, כולל חסרים, עם מזהי הדפים שהם מופיעים בהם, החל מ־<kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "רשימת דפי יעד ייחודיים.",
+ "apihelp-query+allredirects-example-unique-generator": "קבלת על דפי היעד, תוך כדי סימון החסרים.",
+ "apihelp-query+allredirects-example-generator": "קבלת דפים שמכילים את ההפניות.",
+ "apihelp-query+allrevisions-summary": "רשימת כל הגרסאות.",
+ "apihelp-query+allrevisions-param-start": "מאיזה חותם־זמן להתחיל למנות.",
+ "apihelp-query+allrevisions-param-end": "באיזה חותם־זמן להפסיק למנות.",
+ "apihelp-query+allrevisions-param-user": "לרשום רק גרסאות מאת המשתמש הזה.",
+ "apihelp-query+allrevisions-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
+ "apihelp-query+allrevisions-param-namespace": "לרשום רק דפים במרחב השם הזה.",
+ "apihelp-query+allrevisions-param-generatetitles": "בעת שימוש בתור מחולל, לחולל כותרת במקום מזהי גרסה.",
+ "apihelp-query+allrevisions-example-user": "לרשום את 50 התרומות האחרונות של משתמש <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "רשימת 50 הגרסאות הראשונות במרחב הראשי.",
+ "apihelp-query+mystashedfiles-summary": "קבלת רשימת קבצים בסליק ההעלאה של המשתמש הנוכחי.",
+ "apihelp-query+mystashedfiles-param-prop": "אילו מאפיינים לאחזר עבור הקבצים.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "אחזור גודל הקובץ וממדי התמונה.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "אחזור סוג ה־MIME של הקובץ וסוג המדיה.",
+ "apihelp-query+mystashedfiles-param-limit": "כמה קבצים לקבל.",
+ "apihelp-query+mystashedfiles-example-simple": "לקבל מפתח קובץ, גודל קובץ וגודל בפיקסלים של קבצים בסליק ההעלאה של המשתמש הנוכחי.",
+ "apihelp-query+alltransclusions-summary": "רשימת כל ההכללות (דפים שמוטבעים באמצעות &#123;&#123;x&#125;&#125;), כולל כאלה שאינם קיימים.",
+ "apihelp-query+alltransclusions-param-from": "מאיזו כותרת ההכללה להתחיל למנות.",
+ "apihelp-query+alltransclusions-param-to": "כותרת ההכללה שהמנייה תיפסק בה.",
+ "apihelp-query+alltransclusions-param-prefix": "חיפוש כל הכותרות המוכללות שמתחילות הערך הזה.",
+ "apihelp-query+alltransclusions-param-unique": "להציג רק שמות מוכללים ייחודיים. לא יכול לשמש עם $1prop=ids.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+ "apihelp-query+alltransclusions-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "הוספת מזהי הדף של הדפים המכלילים (לא יכול לשמש עם $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "הוספת כותרת ההכללה.",
+ "apihelp-query+alltransclusions-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+alltransclusions-param-limit": "כמה פריטים להחזיר בסך הכול.",
+ "apihelp-query+alltransclusions-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+alltransclusions-example-B": "רשימת כותרות מוכללות, כולל חסרות, עם מזהי הדפים שהן מופיעות בהם, החל מ־<kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "רשימת כותרת מוכללות ייחודיות.",
+ "apihelp-query+alltransclusions-example-unique-generator": "קבלת כל כל הכותרות המוכללות, תוך כדי סימון החסרות.",
+ "apihelp-query+alltransclusions-example-generator": "קבלת דפים שמכילים את ההכללות.",
+ "apihelp-query+allusers-summary": "למנות את כל המשתמשים הרשומים.",
+ "apihelp-query+allusers-param-from": "מאיזה שם משתמש להתחיל למנות.",
+ "apihelp-query+allusers-param-to": "באיזה שם משתמש להפסיק למנות.",
+ "apihelp-query+allusers-param-prefix": "חיפוש כל המשתמשים שמתחילים בערך הזה.",
+ "apihelp-query+allusers-param-dir": "באיזה כיוון למיין.",
+ "apihelp-query+allusers-param-group": "לכלול רק משתמשים בקבוצות הנתונות.",
+ "apihelp-query+allusers-param-excludegroup": "לא לכלול משתמשים בקבוצות הנתונות.",
+ "apihelp-query+allusers-param-rights": "לכלול רק משתמשים עם ההרשאות הנתונות. לא כולל הרשאות שניתנו בקבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+ "apihelp-query+allusers-param-prop": "אילו פרטי מידע לכלול:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "הוספת מידע עם החסימה הנוכחית של משתמש.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "הוספת קבוצות שמשתמש חבר בהן. זה משתמש ביותר משאבי דפדפן ויכול להחזיר פחות תוצאות מהמגבלה.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "לרשום את כל הקבוצות שהמשתמש חבר בהן אוטומטית.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "רשימת הההרשאות שיש למשתמש.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "הוספת מונה העריכות של המשתמש.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "הוספת חותם־הזמן של זמן הרישום של המשתמש (יכול להיות ריק).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "הוספת המזהה המרכזי ומצב השיוך למשתמש.",
+ "apihelp-query+allusers-param-limit": "כמה שמות משתמש בסך הכול לשנות.",
+ "apihelp-query+allusers-param-witheditsonly": "לרשום רק משתמשים שעשו עריכות.",
+ "apihelp-query+allusers-param-activeusers": "לרשום רק משתמשים שהיו פעילים {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}.",
+ "apihelp-query+allusers-param-attachedwiki": "עם <kbd>$1prop=centralids</kbd>, לציין גם האם המשתמש משויך לוויקי עם המזהה הזה.",
+ "apihelp-query+allusers-example-Y": "לרשום משתמשים שמתחילים ב־<kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "אחזור מידע אודות מצב האימות הנוכחי.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "בדיקה האם מצב האימות הנוכחי של המשתמש מספיק בשביל הפעולה הרגישה מבחינת אבטחה שצוינה.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "אחזור מידע על בקשות האימות הדרושות לפעולת האימות המבוקשת.",
+ "apihelp-query+authmanagerinfo-example-login": "אחזור הבקשות שיכולות לשמש לתחילת הכניסה.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "אחזור הבקשות שיכולות לשמש לתחילת הכניסה, עם שדות טופס ממוזגים.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "בדיקה האם האימות מספיק בשביל הפעולה <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "מציאת כל הדפים שמקשרים לדף הנתון.",
+ "apihelp-query+backlinks-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "מזהה דף לחיפוש. לא ניתן להשתמש בזה יחד עם <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+backlinks-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+backlinks-param-filterredir": "איך לסנן הפניות. אם זה מוגדר ל־<kbd>nonredirects</kbd> כש־<var>$1redirect</var> מופעל, זה חל רק על הרמה השנייה.",
+ "apihelp-query+backlinks-param-limit": "כמה דפים להחזיר בסך הכול. אם <var>$1redirect</var> מופעל, ההגבלה חלה על כל רמה בנפרד (כלומר יכולות להיות מוחזרות עד <span dir=\"ltr\">2 * <var>$1limit</var></span> תוצאות).",
+ "apihelp-query+backlinks-param-redirect": "אם הדף המקשר הוא הפניה, למצוא גם את כל הדפים שמקשרים לאותה ההפניה. ההגבלה המרבית מוקטנת בחצי.",
+ "apihelp-query+backlinks-example-simple": "הצגת קישורים ל־<kbd>Main Page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "קבל מידע על דפים שמקשרים ל־<kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "לרשום את כל המשתמשים וכתובות ה־IP שנחסמו.",
+ "apihelp-query+blocks-param-start": "מאיזה חותם‏־זמן להתחיל למנות.",
+ "apihelp-query+blocks-param-end": "באיזה חותם זמן להפסיק למנות.",
+ "apihelp-query+blocks-param-ids": "רשימת מזהי חסימות לרשום (לא חובה).",
+ "apihelp-query+blocks-param-users": "רשימת משתמשים לחיפוש (לא חובה).",
+ "apihelp-query+blocks-param-ip": "קבלת כל החסימות שחלות על טווח ה־IP או ה־CIDR הזה, כולל חסימות טווח.\nלא יכול לשמש יחד עם <var>$3users</var>. טווחי CIDR רחבים מ־IPv4/$1 או IPv6/$2 אינם מתקבלים.",
+ "apihelp-query+blocks-param-limit": "המספר המרבי של חסימות לרשום.",
+ "apihelp-query+blocks-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+blocks-paramvalue-prop-id": "הוספת מזהה החסימה.",
+ "apihelp-query+blocks-paramvalue-prop-user": "הוספת שם המשתמש שנחסם.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "הוספת המזהה של המשמש שנחסם.",
+ "apihelp-query+blocks-paramvalue-prop-by": "הוספת שם המשתמש שחסם.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "הוספת מזהה המשתמש שחסם.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "הוספת חותם־הזמן של החסימה.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "הוספת חותם־הזמן של תפוגת החסימה.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "הוספת הסיבה שניתנה לחסימה.",
+ "apihelp-query+blocks-paramvalue-prop-range": "הוספת טווח כתובות ה־IP שהחסימה משפיעה עליהן.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "מתייג את ההחרמה (autoblock‏, anononly, וכו'.).",
+ "apihelp-query+blocks-param-show": "להציג רק פריטים שמתאימים לאמות המידה האלו.\nלמשל, כדי לראות רק חסימות ללא לצמיתות על כתובות IP יש להגדיר <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "רשימת חסימות.",
+ "apihelp-query+blocks-example-users": "רשימת חסימות של המשתמשים <kbd>Alice</kbd> ו־<kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "לרשום את כל הקטגוריות שהדף שייך אליהן.",
+ "apihelp-query+categories-param-prop": "אילו מאפיינים נוספים לקבל עבור כל קטגוריה:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "הוספת מפתח מיון (מחרוזת הקסדצימלית) ותחילית מפתח מיון (החלק הקריא) עבור קטגוריה.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "הוספת חותם־הזמן של יצירת הקטגוריה.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "תיוג קטגוריות שהוסתרו באמצעות <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "איזה סוג של קטגוריות להציג.",
+ "apihelp-query+categories-param-limit": "כמה קטגוריות להחזיר.",
+ "apihelp-query+categories-param-categories": "לרשום רק את הקטגוריות האלו. שימושי לבדיקה עם דף מסוים נמצא בקטגוריה מסוימת.",
+ "apihelp-query+categories-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+categories-example-simple": "קבלת רשימת קטגוריות שהם <kbd>Albert Einstein</kbd> שייך אליהן.",
+ "apihelp-query+categories-example-generator": "קבלת מידע על כל הקטגוריות שמשמשות בדף <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "החזרת מידע על הקטגוריות הנתונות.",
+ "apihelp-query+categoryinfo-example-simple": "קבחצ מידע על <kbd>Category:Foo</kbd> ועל <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "רשימת כל הדפים בקטגוריה נתונה.",
+ "apihelp-query+categorymembers-param-title": "איזו קטגוריה למנות (נדרש). חייב לכלול את התחילית <kbd>{{ns:category}}:</kbd>. לא יכול לשמש יחד עם <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "מזהה הדף של הקטגוריה שצריך למנות. לא יכול לשמש יחד עם <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "הוספת מזהה הדף.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "הוספת מפתח המיון שמשמש למיון בקטגוריה (מחרזות הקסדצימלית).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "הוספת מפתח המיון שמשמש למיון בקטגוריה (מחרוזת הקסדצימלית).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "הוספת הסוג שהדף מוין אליו (<samp>page</samp>‏, <samp>subcat</samp> או <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "הוספת חותם־הזמן שבו הדף נכלל.",
+ "apihelp-query+categorymembers-param-namespace": "לכלול רק דפים במרחבי השם האלה. יש לשים לב לכך ש־<kbd>$1type=subcat</kbd> או <kbd>$1type=file</kbd> יכולים לשמש במקום <kbd>$1namespace=14</kbd> או <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "איזה סוג של חברי קטגוריה לכלול. לא תקף כאשר מוגדר <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "מספר הדפים המרבי שיוחזר.",
+ "apihelp-query+categorymembers-param-sort": "לפי איזה מאפיין למיין.",
+ "apihelp-query+categorymembers-param-dir": "באיזה כיוון למיין.",
+ "apihelp-query+categorymembers-param-start": "מאיזה חותם־זמן להתחיל לרשום. יכול לשמש רק עם <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "באיזה חותם־זמן לסיים לרשום. יכול לשמש רק עם <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "מפתח מיון להתחיל לרשום ממנו, כפי שמוחזר על־ידי <kbd>$1prop=sortkey</kbd. יכול לשמש רק עם <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "מפתח מיון לסיים לרשום ממנו, כפי שמוחזר על־ידי <kbd>$1prop=sortkey</kbd>. יכול לשמש רק עם <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "תחילית מפתח מיון להתחיל לרשום ממנה. יכול לשמש רק עם <kbd>$1sort=sortkey</kbd>. דורס את <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "תחילית מפתח מיון שהרשימה תסתיים <strong>לפניה</strong> (לא <strong>בה</strong>, אם הערך הזה מוגדר, הוא לא ייכלל!). יכול לשמש רק עם $1sort=sortkey. דורס את $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "כדאי להשתמש ב־$1starthexsortkey במקום.",
+ "apihelp-query+categorymembers-param-endsortkey": "כדאי להשתמש ב־$1endhexsortkey במקום.",
+ "apihelp-query+categorymembers-example-simple": "קבלת עשרת העמודים הראשונים שתחת <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "קבל מידע על הדף עבור 10 הדפים הראשונים ב־<kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "קבלת רשימה של תורמים שנכנסו לחשבון ומניין של תורמים אלמוניים לדף.",
+ "apihelp-query+contributors-param-group": "לכלול רק משתמשים בקבוצות הנתונות. לא כולל קבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+ "apihelp-query+contributors-param-excludegroup": "לא לכלול משתמשים בקבוצות הנתונות. לא כולל קבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+ "apihelp-query+contributors-param-rights": "לכלול רק משתמשים עם ההרשאות הנתונות. לא כולל הרשאות שניתנו בקבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+ "apihelp-query+contributors-param-excluderights": "לא לכלול משתמשים עם ההרשאות הנתונות. לא כולל הרשאות שניתנו בקבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+ "apihelp-query+contributors-param-limit": "כמה תורמים להחזיר.",
+ "apihelp-query+contributors-example-simple": "הצגת תורמים לדף <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "קבלת מידע על גרסה מחוקה.",
+ "apihelp-query+deletedrevisions-extended-description": "יכול לשמש במספר דרכים:\n# קבלת גרסאות מחוקות עבור ערכת דפים, על־ידי הגדרת שמות או מזהי דף. ממוין לפי שם וחותם־זמן.\n# קבלת מידע על ערכת גרסאות מחוקות באמצעות הגדרת המזהים שלהם עם revid־ים. ממוין לפי מזהה גרסה.",
+ "apihelp-query+deletedrevisions-param-start": "מאיזה חותם־זמן להתחיל למנות. לא תקף בעיבוד רשימת מזהי גרסה.",
+ "apihelp-query+deletedrevisions-param-end": "באיזה חותם־זמן להפסיק למנות. לא תקף בעת עיבוד רשימת מזהי גרסה.",
+ "apihelp-query+deletedrevisions-param-tag": "לרשום רק גרסאות עם התג הזה.",
+ "apihelp-query+deletedrevisions-param-user": "לרשום רק גרסאות מאת המשתמש הזה.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
+ "apihelp-query+deletedrevisions-example-titles": "רשימת גרסאות מחוקות של הדפים <kbd>Main Page</kbd> ו־<kbd>Talk:Main Page</kbd>, עם תוכן.",
+ "apihelp-query+deletedrevisions-example-revids": "קבלת מידע לגרסה המחוקה <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "רשימת גרסאות מחוקות.",
+ "apihelp-query+deletedrevs-extended-description": "פועל בשלושה אופנים:\n# רשימת גרסאות מחוקות לשמות שניתנו, ממוינות לפי חותם־זמן.\n# רשימת תרומות מחוקות של המשתמש שניתן, ממוינות לפי חותם־זמן (בלי לציין שמות).\n# רשימת כל הגרסאות המחוקות במרחב השם שניתן, ממוינות לפי שם וחותם־זמן (בלי לציין שמות, בלי להגדיר $1user).\n\nפרמטרים מסוימים חלים רק על חלק מהאופנים ולא תקפים באחרים.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|מצב|מצבים}}: $2",
+ "apihelp-query+deletedrevs-param-start": "באיזה חותם־זמן להתחיל למנות.",
+ "apihelp-query+deletedrevs-param-end": "באיזה חותם־זמן להפסיק למנות.",
+ "apihelp-query+deletedrevs-param-from": "להתחיל את הרשימה בשם הזה.",
+ "apihelp-query+deletedrevs-param-to": "להפסיק את הרשימה בכותרת הזאת.",
+ "apihelp-query+deletedrevs-param-prefix": "חיפוש כל שמות הדפים שמתחילים בערך הזה.",
+ "apihelp-query+deletedrevs-param-unique": "לרשום רק גרסה אחת עבור כל דף.",
+ "apihelp-query+deletedrevs-param-tag": "לרשום רק גרסאות עם התג הזה.",
+ "apihelp-query+deletedrevs-param-user": "לרשום רק גרסאות מאת המשתמש הזה.",
+ "apihelp-query+deletedrevs-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
+ "apihelp-query+deletedrevs-param-namespace": "לרשום רק דפים במרחב השם הזה.",
+ "apihelp-query+deletedrevs-param-limit": "המספר המרבי של הגרסאות שיירשם.",
+ "apihelp-query+deletedrevs-param-prop": "אילו מאפיינים לקבל:\n;revid:הוספת מזהה הגרסה של הגרסה המחוקה.\n;parentid:הוספת מזהה הגרסה של הגרסה הקודמת של הדף.\n;user:הוספת המשתמש שעשה את הגרסה.\n;userid:הוספת מזהה המשתמש שעשה את הגרסה.\n;comment:הוספת ההערה על הגרסה.\n;parsedcomment:הוספת ההערה המפוענחת על הגרסה.\n;minor:מתייג אם הגרסה משנית.\n;len:מוסיף את האורך (בבייטים) של הגרסה.\n;sha1:הוספת ה־SHA-1 (בסיס 16) של הגרסה.\n;content:הוספת התוכן של הגרסה.\n;token:<span class=\"apihelp-deprecated\">מיושן.</span> נותן אסימון עריכה.\n;tags:תגים עבור הגרסה.",
+ "apihelp-query+deletedrevs-example-mode1": "רשימת כל הגרסאות המחוקות של הדפים <kbd>Main Page</kbd> ו־<kbd>Talk:Main Page</kbd>, עם תוכן (mode 1).",
+ "apihelp-query+deletedrevs-example-mode2": "רשימת 50 העריכות המחוקות האחרונות של <kbd>Bob</kbd>‏ (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "רשימת 50 הגרסאות המחוקות הראשונות במרחב הראשי (mode 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "רשימת 50 הדפים המחוקים הראשונים במרחב השם {{ns:talk}}‏ (mode 3).",
+ "apihelp-query+disabled-summary": "יחידת ה־query הזאת כובתה.",
+ "apihelp-query+duplicatefiles-summary": "רשימת כל הקבצים שהם כפולים של קבצים נתונים לפי ערכי הגיבוב.",
+ "apihelp-query+duplicatefiles-param-limit": "כמה קבצים כפולים להחזיר.",
+ "apihelp-query+duplicatefiles-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+duplicatefiles-param-localonly": "חיפוש אחר קבצים במאגר המקומי בלבד.",
+ "apihelp-query+duplicatefiles-example-simple": "חיפוש אחר כפילויות של [[:קובץ:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "חיפוש אחר כפילויות בין כל הקבצים.",
+ "apihelp-query+embeddedin-summary": "חיפוש כל הדפים שמטמיעים (מכלילים) את הכותרת הנתונה.",
+ "apihelp-query+embeddedin-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "מזהה דף לחיפוש. לא יכול לשמש יחד עם $1title.",
+ "apihelp-query+embeddedin-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+embeddedin-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+embeddedin-param-filterredir": "איך לסנן עבור הפניות.",
+ "apihelp-query+embeddedin-param-limit": "כמה דפים להחזיר בסך הכול.",
+ "apihelp-query+embeddedin-example-simple": "הצגת דפים שמכלילים את <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "קבלת מידע על דפים שמכלילים את <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "החזרת כל ה־URL־ים החיצוניים (לא בינוויקי) מהדפים הנתונים.",
+ "apihelp-query+extlinks-param-limit": "כמה קישורים להחזיר.",
+ "apihelp-query+extlinks-param-protocol": "הפרוטוקול של ה־URL. אם זה ריק, ו־<var>$1query</var> מוגדר, הפרוטוקול הוא <kbd>http</kbd>. יש להשאיר את זה ואת <var>$1query</var> ריק כדי לרשום את כל הקישורים החיצוניים.",
+ "apihelp-query+extlinks-param-query": "מחרוזת חיפוש ללא פרוטוקול. שימושי לבדיקה האם דף מסוים מכיל url חיצוני מסוים.",
+ "apihelp-query+extlinks-param-expandurl": "הרחבת URL־ים בעלי פרוטוקול יחסי בפרוטוקול קנוני.",
+ "apihelp-query+extlinks-example-simple": "קבלת רשימת קישורים חיצוניים ב־<kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "למנות דפים שמכילים URL נתון.",
+ "apihelp-query+exturlusage-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "הוספת מזהה הדף.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "הוספת ה־URL שמשמש בדף.",
+ "apihelp-query+exturlusage-param-protocol": "הפרוטוקול של ה־URL. אם זה ריק, ו־<var>$1query</var> מוגדר, הפרוטוקול הוא <kbd>http</kbd>. יש להשאיר את זה ואת <var>$1query</var> ריק כדי לרשום את כל הקישורים החיצוניים.",
+ "apihelp-query+exturlusage-param-query": "מחרוזת חיפוש ללא פרוטוקל. ר' [[Special:LinkSearch]]. יש להשאיר את זה ריק כדי לרשום את כל הקישורים החיצוניים.",
+ "apihelp-query+exturlusage-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+exturlusage-param-limit": "כמה דפים להחזיר.",
+ "apihelp-query+exturlusage-param-expandurl": "הרחבת URL־ים בעלי פרוטוקול יחסי בפרוטוקול קנוני.",
+ "apihelp-query+exturlusage-example-simple": "הצגת דפים שמקשרים ל־<kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "למנות את כל הקבצים המחוקים לפי הסדר.",
+ "apihelp-query+filearchive-param-from": "מאיזו כותרת תמונה להתחיל למנות.",
+ "apihelp-query+filearchive-param-to": "באיזו כותרת תמונה להפסיק למנות.",
+ "apihelp-query+filearchive-param-prefix": "חיפוש כל שמות התמונות שמתחילים בערך הזה.",
+ "apihelp-query+filearchive-param-limit": "כמה תמונות להחזיר בסך הכול.",
+ "apihelp-query+filearchive-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+filearchive-param-sha1": "גיבוב SHA1 של תמונה. דורס את $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "גיבוב SHA1 של תמונה בבסיס 36 (משמש במדיה־ויקי).",
+ "apihelp-query+filearchive-param-prop": "איזה מידע על תמונה לקבל:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "הוספת גיבוב SHA-1 עבור התמונה.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "הוספת חותם־זמן לגרסה המועלית.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "הוספת המשתמש שהעלה על גרסת התמונה.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "הוספת הגודל של התמונה בבייטים והגובה, הרוחב ומניין הדפים (אם מתאים).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "כינוי ל־size.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "הוספת תיאור לגרסת התמונה.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "פענוח התיאור של הגרסה.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "הוספת ה־MIME של התמונה.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "הוספת סוג המדיה של התמונה.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "רשימת מטא־נתוני Exif עבור גרסת הקובץ.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "הוספת עומק הביטים של הגרסה.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "הוספת שם הקובץ של גרסה מאורכבת עבור גרסאות שאינן האחרונה.",
+ "apihelp-query+filearchive-example-simple": "הצגת רשימת כל הקבצים המחוקים.",
+ "apihelp-query+filerepoinfo-summary": "החזרת מידע מטא על מאגרי תמונות שמוגדרים בוויקי.",
+ "apihelp-query+filerepoinfo-param-prop": "אילו מאפייני מאגר לקבל (יכולים להיות יותר מזה באתרי ויקי אחדים):\n;apiurl:URL ל־API של המאגר – מועיל לקבלת מידע על התמונה מהמארח.\n;name:המפתח של המאגר – משמש למשל בערכים המוחזרים מ־<var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> ומ־[[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:שם קריא של אתר הוויקי של המאגר.\n;rooturl:URL שורש לנתיבי תמונות.\n;local:האם המאגר הוא מקומי או לא.",
+ "apihelp-query+filerepoinfo-example-simple": "קבלת מידע על מאגרי קבצים.",
+ "apihelp-query+fileusage-summary": "מציאת כל הדפים שמשתמשים בקבצים הנתונים.",
+ "apihelp-query+fileusage-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "מזהה הדף של כל דף.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "השם של כל דף.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "דגל אם הדף הוא הפניה.",
+ "apihelp-query+fileusage-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
+ "apihelp-query+fileusage-param-limit": "כמה להחזיר.",
+ "apihelp-query+fileusage-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;redirect:להציג רק הפניות.\n;!redirect:לא להציג הפניות.",
+ "apihelp-query+fileusage-example-simple": "קבלת רשימת דפים שמשתמשים ב־[[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "קבלת מידע על דפים שמשתמשים ב־[[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "החזרת מידע על קובץ והיסטורייה העלאה.",
+ "apihelp-query+imageinfo-param-prop": "איזה מידע על הקובץ לקבל:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "הוספת חותם־זמן לגרסה שהועלתה.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "הוספה המשתמש שהעלה כל גרסה של קובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "הוספת מזהה המשתמש שהעלה כל גרסה של קובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "תגובה על הגרסה.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "פענוח ההערה על גרסה.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "הוספת הכותרת הקנונית של הקובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "מתן URL לקובץ ולדף התיאור.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "הוספת הגודל של הקובץ בבייטים והגובה, הרוחב ומניין הדפים (אם זה מתאים).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "כינוי ל־size.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "הוספת גיבוב SHA-1 עבור הקובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "הוספת סוג ה־MIME של הקובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "הוספת סוג ה־MIME של התמונה הממוזערת (נדרש url והפרמטר $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "הוספת סוג המדיה של הקובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "טעינת מטא־נתונים של Exif עבור גרסת הקובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "רשימת מטא־נתונים כלליים על תסדיר הקובץ עבור גרסת הקובץ.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "רשימת מטא־נתונים מעוצבים משולבים ממספר מקורות. התוצאה מעוצבת ב־HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "הוספת שם הקובץ של גרסת הארכיון עבור הגרסאות שאינן האחרונה.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "הוספת עומק הביטים של הגרסה.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "משמש את Special:Upload כדי לקבל מידע על קובץ קיים. לא נועד לשימוש מחוץ לליבת MediaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "מוסיף האם הקובץ נמצא ב־[[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "כמה גרסאות של קובץ לכל קובץ.",
+ "apihelp-query+imageinfo-param-start": "מאיז חותם־זמן להתחיל רשימה.",
+ "apihelp-query+imageinfo-param-end": "באיזה חותם־זמן לסיים את הרשימה.",
+ "apihelp-query+imageinfo-param-urlwidth": "אם מוגדר $2prop=url, יוחזר URL לתמונה שגודלה הותאם לרוחב הזה.\nמסיבות של ביצועים, אם האפשרות הזאת משמשת, לא יוחזרו יותר מ־$1 תמונות.",
+ "apihelp-query+imageinfo-param-urlheight": "דומה ל־$1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "גרסת המטא־נתונים לשימוש. אם מוגדר <kbd>latest</kbd>, להשתמש בגרסה החדשה ביותר. בררת המחדל היא <kbd>1</kbd> לצורך תאימות אחורה.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "באיזו שפה לאחזר את המטא־נתונים. זה משפיע על אילו תרגומים לאחזר, האם יש כמה, וגם איך דברים כמו מספרים וערכים שונים מעוצבים.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "אם תרגומים של המאפיין extmetadata זמינים, לאחזר את כולם.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "אם זה מוגדר ולא ריק, רק המפתחות האלה יוחזרו עבור $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "מחרוזת פרמטר ייחודית למטפל. למשל, PDF־ים יכולים להשתמש ב־<kbd>page15-100px</kbd>.‏ <var>$1urlwidth</var> צריך לשמש ולהיות עקבי עם <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "אם <kbd>$2prop=badfile</kbd> מוגדר, זאת כותרת הדף שתשמש בזמן שערוך ה־[[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "חיפוש אחר קבצים במאגר המקומי בלבד.",
+ "apihelp-query+imageinfo-example-simple": "קבלת מידע על הגרסה הנוכחית של [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "אחזור מידע על גרסאות של [[:File:Test.jpg]] מ־2008 ואחרי‏־כן.",
+ "apihelp-query+images-summary": "להחזיר את כל הקבצים שמכילים הדפים הנתונים.",
+ "apihelp-query+images-param-limit": "כמה קבצים להחזיר.",
+ "apihelp-query+images-param-images": "לרשום רק את הקבצים האלה. שימוש לבדיקת האם לדף מסוים יש קובץ מסוים.",
+ "apihelp-query+images-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+images-example-simple": "קבלת רשימת קבצים שמשמשים ב־[[Main Page]].",
+ "apihelp-query+images-example-generator": "קבלת מידע על כל הקבצים שמשמשים ב־[[Main Page]].",
+ "apihelp-query+imageusage-summary": "מציאת כל הדפים שמתמשים בשם התמונה הנתונה.",
+ "apihelp-query+imageusage-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "מזהה דף לחיפוש. לא יכול לשמש יחד עם $1title.",
+ "apihelp-query+imageusage-param-namespace": "איזה מרחב שם למנות.",
+ "apihelp-query+imageusage-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+imageusage-param-filterredir": "איך לסנן הפניות. אם זה מוגדר ל־nonredirects כש־$1redirect מופעל, זה חל רק על הרמה השנייה.",
+ "apihelp-query+imageusage-param-limit": "כמה דפים להחזיר בסך הכול. אם <var>$1redirect</var> מופעל, ההגבלה חלה על כל רמה בנפרד (כלומר יכולות להיות מוחזרות עד <span dir=\"ltr\">2 * <var>$1limit</var></span> תוצאות).",
+ "apihelp-query+imageusage-param-redirect": "אם הדף המקשר הוא הפניה, למצוא גם את כל הדפים שמקשרים לאותה ההפניה. ההגבלה המרבית מוקטנת בחצי.",
+ "apihelp-query+imageusage-example-simple": "הצגת דפים שמשתמשים ב־[[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "קבלת פרטים על דפים שמשתמשים ב־[[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "קבלת מידע בסיסי על הדף.",
+ "apihelp-query+info-param-prop": "אילו מאפיינים נוספים לקבל:",
+ "apihelp-query+info-paramvalue-prop-protection": "לרשום את רמת ההגנה של כל דף.",
+ "apihelp-query+info-paramvalue-prop-talkid": "מזהה הדף של דף השיחה עבור כל דף שאינו דף שיחה.",
+ "apihelp-query+info-paramvalue-prop-watched": "לרשום את מצב המעקב של כל דף.",
+ "apihelp-query+info-paramvalue-prop-watchers": "מספר העוקבים, אם קיבלת הרשאה.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "מספר העוקבים אחרי כל דף שביקרו עריכות אחרונות לאותו הדף, אם זה מותר.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "חותם־זמן של הודעת רשימת מעקב של כל דף.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "מזהה הדף של הדף העיקרי של כל דף שיחה.",
+ "apihelp-query+info-paramvalue-prop-url": "נותן URL מלא, URL לעריכה ו־URL קנוני לכל דף.",
+ "apihelp-query+info-paramvalue-prop-readable": "האם המשתמש יכול להציג דף זה.",
+ "apihelp-query+info-paramvalue-prop-preload": "נותן את הטקסט שמוחזר על־ידי EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "נותן את האופן שבה שם הדף באמת מוצג.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "כותרת התצוגה בכל הגרסאות של שפת התוכן של האתר.",
+ "apihelp-query+info-param-testactions": "בדיקה האם המשתמש הנוכחי יכול לבצע פעולות מסוימות על הדף.",
+ "apihelp-query+info-param-token": "להשתמש ב־[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] במקום.",
+ "apihelp-query+info-example-simple": "קבלת מידע על הדף <kbd>Main Page</kbd>",
+ "apihelp-query+info-example-protection": "קבלת מידע כללי ומידע על הגנה של הדף <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "מציאות כל הדפים שמקשרים לקישור הבינוויקי הנתון.",
+ "apihelp-query+iwbacklinks-extended-description": "יכול לשמש למציאת כל הקישורים עם התחילית, או כל הקישורים לכותרת (עם תחילית נתונה). אי־שימוש בשום פרמטר אומר \"כל קישורי בינוויקי\".",
+ "apihelp-query+iwbacklinks-param-prefix": "תחילית לבינוויקי.",
+ "apihelp-query+iwbacklinks-param-title": "איזה קישור בינוויקי לחפש. צריך להשתמש בזה יחד עם <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "כמה דפים להחזיר בסך הכול.",
+ "apihelp-query+iwbacklinks-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "הוספת התחילית של הבינוויקי.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "הוספת הכותרת של הבינוויקי.",
+ "apihelp-query+iwbacklinks-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+iwbacklinks-example-simple": "קבלת דפים שמקשרים ל־[[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "קבלת מידע על דפים שמקשרים ל־[[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "החזרת כל קישורי הבינוויקי מהדפים הנתונים.",
+ "apihelp-query+iwlinks-param-url": "האם לקבל את ה־URL המלא (לא יכול לשמש עם $1prop).",
+ "apihelp-query+iwlinks-param-prop": "אילו מאפיינים נוספים לקבל עבור כל קישור בין־לשוני:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "הוספת ה־URL המלא.",
+ "apihelp-query+iwlinks-param-limit": "כמה קישורי בינוויקי להחזיר.",
+ "apihelp-query+iwlinks-param-prefix": "להחזיר רק קישורי בינוויקי עם התחילית הזאת.",
+ "apihelp-query+iwlinks-param-title": "איזה קישור בינוויקי לחפש. צריך להשתמש בזה יחד עם <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+iwlinks-example-simple": "קבלת קישורי בינוויקי מהדף <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "מציאת כל הדפים שמקשרים לקישור השפה הנתון.",
+ "apihelp-query+langbacklinks-extended-description": "יכול לשמש למציאת כל הקישורים עם קוד שפה, או כל הקישורים לכותרת (עם שפה נתונה). אי־שימוש בשום פרמטר פירושו \"כל קישורי שפה\".\n\nנא לשים לב לכך שזה עשוי לא להתייחס לקישורי שפה שמוסיפות הרחבות.",
+ "apihelp-query+langbacklinks-param-lang": "שפה עבור קישור שפה.",
+ "apihelp-query+langbacklinks-param-title": "איזה קישור שפה לחפש. חייב לשמש עם $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "כמה דפים להחזיר בסך הכול.",
+ "apihelp-query+langbacklinks-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "הוספת קוד השפה של קישור השפה.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "הוספת הכותרת של קישור השפה.",
+ "apihelp-query+langbacklinks-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+langbacklinks-example-simple": "קבלת דפים שמקשרים ל־[[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "קבלת מידע על דפים שמקשרים ל־[[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "החזרת כל הקישורים הבין־לשוניים מהדפים הנתונים.",
+ "apihelp-query+langlinks-param-limit": "כמה קישורי שפה להחזיר.",
+ "apihelp-query+langlinks-param-url": "האם לקבל את ה־URL המלא (לא יכול לשמש עם <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "אילו מאפיינים נוספים לקבל עבור כל קישור בין־לשוני:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "הוספת ה־URL המלא.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "הוספת שם השפה המתורגם (עם המאמץ הטוב ביותר). יש להשתמש ב־<var>$1inlanguagecode</var> כדי לשלוט בשפה.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "הוספת השם הילידי של השפה.",
+ "apihelp-query+langlinks-param-lang": "להחזיר רק קישורי שפה עם קוד השפה הזה.",
+ "apihelp-query+langlinks-param-title": "קישור לחיפוש. חובה להשתמש עם <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+langlinks-param-inlanguagecode": "קוד שפה בשביל שמות שפות מתורגמות.",
+ "apihelp-query+langlinks-example-simple": "קבלת קישורים בין־לשוניים מהדף <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "החזרת כל הקישורים מהדפים שצוינו.",
+ "apihelp-query+links-param-namespace": "להציג קישורים רק במרחבי השם האלה.",
+ "apihelp-query+links-param-limit": "כמה קישורים להחזיר.",
+ "apihelp-query+links-param-titles": "לרשום רק קישורים לכותרות האלו. שימושי לבדיקה האם דף מסוים מקשר לכותרת מסוימת.",
+ "apihelp-query+links-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+links-example-simple": "קבלת קישורים מהדף <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "קבלת מידע על דפי הקישור בדף <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "קבלת קישורים מהדף <kbd>Main Page</kbd> במרחבי השם {{ns:user}} ו־{{ns:template}}.",
+ "apihelp-query+linkshere-summary": "מציאת כל הדפים שמקשרים לדפים הנתונים.",
+ "apihelp-query+linkshere-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "מזהה הדף של כל דף.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "השם של כל דף.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "דגל אם הדף הוא הפניה.",
+ "apihelp-query+linkshere-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
+ "apihelp-query+linkshere-param-limit": "כמה להחזיר.",
+ "apihelp-query+linkshere-param-show": "הצגת פריטים שתואמים את הדרישות הללו בלבד:\n;redirect:הצגת הפניות בלבד.\n;!redirect:הצגת קישורים שאינם הפניות בלבד.",
+ "apihelp-query+linkshere-example-simple": "קבלת רשימת דפים שמקשרים ל־[[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "קבל מידע על דפים שמקשרים ל־[[Main Page]].",
+ "apihelp-query+logevents-summary": "קבלת אירועים מהרישומים.",
+ "apihelp-query+logevents-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "הוספת המזהה של אירוע היומן.",
+ "apihelp-query+logevents-paramvalue-prop-title": "הוספת שם הדף של אירוע היומן.",
+ "apihelp-query+logevents-paramvalue-prop-type": "הוספת הסוג של אירוע היומן.",
+ "apihelp-query+logevents-paramvalue-prop-user": "הוספת המשתמש האחראי על אירוע היומן.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "הוספת מזהה המשתמש האחראי על אירוע היומן.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "הוספת חותם־הזמן עבור האירוע.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "הוספת ההערה של האירוע.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת של האירוע.",
+ "apihelp-query+logevents-paramvalue-prop-details": "הוספת פרטים נוספים על האירוע.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "רשימת התגים של האירוע.",
+ "apihelp-query+logevents-param-type": "סינון עיולי יומן רק לסוג הזה.",
+ "apihelp-query+logevents-param-action": "סינון פעולות יומן רק לפעולה הזאת. דורס את <var>$1type</var>. ברשימת הערכים האפשריים, ערכים עם תו־כל כוכבית כגון <kbd>action/*</kbd> יכולים להיות מחרוזות שונות אחרי הקו הנטוי (/).",
+ "apihelp-query+logevents-param-start": "מאיזה חותם־זמן להתחיל למנות.",
+ "apihelp-query+logevents-param-end": "באיזה חותם זמן להפסיק לרשום.",
+ "apihelp-query+logevents-param-user": "לסנן את העיולים שעשה המשתמש הנתון.",
+ "apihelp-query+logevents-param-title": "סינון עיולים רק לכאלה שמתייחסים לדף.",
+ "apihelp-query+logevents-param-namespace": "סינון עיולים רק לכאלה במרחב השם הנתון.",
+ "apihelp-query+logevents-param-prefix": "סינון עיולים לכאלה שמתחילים עם התחילית הזאת.",
+ "apihelp-query+logevents-param-tag": "לרשום רק אירועים שמתויגם בתג הזה.",
+ "apihelp-query+logevents-param-limit": "כמה עיולי אירועים להחזיר בסך הכול.",
+ "apihelp-query+logevents-example-simple": "רשימת אירועי יומן אחרונים.",
+ "apihelp-query+pagepropnames-summary": "רשימת כל שמות המאפיינים שמשמשים בוויקי.",
+ "apihelp-query+pagepropnames-param-limit": "המספר המרבי של השמות להחזיר.",
+ "apihelp-query+pagepropnames-example-simple": "לתת את 10 שמות המאפיינים הראשונים.",
+ "apihelp-query+pageprops-summary": "קבלת מאפייני דף שונים שמוגדרים בתוכן הדף.",
+ "apihelp-query+pageprops-param-prop": "לרשום רק את המאפיינים האלה (שימוש ב־<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> מחזיר רשימת שמות מאפייני דף בשימוש). זה שימושי לבדיקה האם דפים משתמשים במאפיין דף מסוים.",
+ "apihelp-query+pageprops-example-simple": "קבלת מאפיינים עבור הדפים <kbd>Main Page</kbd> ו־<kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "לרשום את כל הדפים שמשתמשים במאפיין דף נתון.",
+ "apihelp-query+pageswithprop-param-propname": "מאפיין דף שעבורו למנות דפים (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> מחזיר רשימת שמות מאפייני דף בשימוש).",
+ "apihelp-query+pageswithprop-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "הוספת מזהה הדף.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "הוספת הערך של מאפיין הדף.",
+ "apihelp-query+pageswithprop-param-limit": "מספר הדפים המרבי שיוחזר.",
+ "apihelp-query+pageswithprop-param-dir": "באיזה כיוון לסדר.",
+ "apihelp-query+pageswithprop-example-simple": "הצגת עשרת הדפים הראשונים שעושים שימוש ב־<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "קבלת מידע נוסף על עשרת הדפים הראשונים המשתמשים ב־<code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "ביצוע חיפוש תחילית של כותרות דפים.",
+ "apihelp-query+prefixsearch-extended-description": "למרות הדמיון בשם, המודול הזה אינו אמור להיות שווה ל־[[Special:PrefixIndex]] (\"מיוחד:דפים המתחילים ב\"); לדבר כזה, ר' <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> עם הפרמטר <kbd>apprefix</kbd>. מטרת המודול הזה דומה ל־<kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: לקבל קלט ממשתמש ולספק את הכותרות המתאימות ביותר. בהתאם לשרת מנוע החיפוש, זה יכול לכלול תיקון שגיאות כתיב, הימנעות מדפי הפניה והירסטיקות אחרות.",
+ "apihelp-query+prefixsearch-param-search": "מחרוזת לחיפוש.",
+ "apihelp-query+prefixsearch-param-namespace": "שמות מתחם לחיפוש.",
+ "apihelp-query+prefixsearch-param-limit": "מספר התוצאות המרבי להחזרה.",
+ "apihelp-query+prefixsearch-param-offset": "מספר תוצאות לדילוג.",
+ "apihelp-query+prefixsearch-example-simple": "חיפוש שםות דפים שמתחילים ב־<kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "באיזה פרופיל חיפוש להשתמש.",
+ "apihelp-query+protectedtitles-summary": "לרשום את כל הכותרות שמוגנות מפני יצירה.",
+ "apihelp-query+protectedtitles-param-namespace": "לרשום רק כותרות במרחבי השם האלה.",
+ "apihelp-query+protectedtitles-param-level": "לרשום רק שמות עם רמת ההגנה הזאת.",
+ "apihelp-query+protectedtitles-param-limit": "כמה דפים להחזיר בסך הכול.",
+ "apihelp-query+protectedtitles-param-start": "להתחיל לרשום בחותם־זמן ההגנה הזה.",
+ "apihelp-query+protectedtitles-param-end": "באיזה חותם־זמן הגנה לסיים את הרשימה.",
+ "apihelp-query+protectedtitles-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "הוספת חותם־הזמן של הוספת ההגנה.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "הוספת המשתמש שהוסיף את ההגנה.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "הוספת מזהה המשתמש שהוסיף את ההגנה.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "הוספת ההערה עבור ההגנה.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת עבור ההגנה.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "הוספת חותם־הזמן של הסרת ההגנה.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "הוספת רמת ההגנה.",
+ "apihelp-query+protectedtitles-example-simple": "רשימת כותרות מוגנות.",
+ "apihelp-query+protectedtitles-example-generator": "חיפוש קישורים לכותרות מוגנות במרחב הראשי.",
+ "apihelp-query+querypage-summary": "קבלת רשימה שמסופקת על־ידי דף מיוחד מבוסס־QueryPage.",
+ "apihelp-query+querypage-param-page": "שם הדף המיוחד. לתשומת לבך, זה תלוי־רישיות.",
+ "apihelp-query+querypage-param-limit": "מספר תוצאות להחזרה.",
+ "apihelp-query+querypage-example-ancientpages": "מחזיר תוצאות מ־[[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "קבלת ערכת דפים אקראיים.",
+ "apihelp-query+random-extended-description": "הדפים רשומים בסדר קבוע, ורק נקודת ההתחלה אקראית. זה אומר שאם, למשל, <samp>Main Page</samp> הוא הדף האקראי הראשון הרשימה, <samp>List of fictional monkeys</samp> יהיה <em>תמיד</em> השני, <samp>List of people on stamps of Vanuatu</samp> שלישי, וכו'.",
+ "apihelp-query+random-param-namespace": "מחזיר דפים רק במרחבי השם האלה.",
+ "apihelp-query+random-param-limit": "להגביל את מספר הדפים האקראיים שיוחזרו.",
+ "apihelp-query+random-param-redirect": "נא להשתמש ב־<kbd>$1filterredir=redirects</kbd> במקום.",
+ "apihelp-query+random-param-filterredir": "איך לסנן הפניות.",
+ "apihelp-query+random-example-simple": "להחזיר שני דפים אקראיים מהמרחב הראשי.",
+ "apihelp-query+random-example-generator": "החזרת מידע על הדף על שני דפים אקראיים מהמרחב הראשי.",
+ "apihelp-query+recentchanges-summary": "למנות שינויים אחרונים.",
+ "apihelp-query+recentchanges-param-start": "מאיזה חותם־זמן להתחיל למנות.",
+ "apihelp-query+recentchanges-param-end": "באיזה חותם זמן להפסיק לרשום.",
+ "apihelp-query+recentchanges-param-namespace": "לסנן את השינויים רק למרחבי השם האלה.",
+ "apihelp-query+recentchanges-param-user": "לרשום רק שינויים של המשתמש הזה.",
+ "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user",
+ "apihelp-query+recentchanges-param-tag": "לרשום רק שינויים שמתויגים עם התג הזה.",
+ "apihelp-query+recentchanges-param-prop": "לכלול פריטי מידע נוספים:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "הוספת המשתמש האחראי על העריכה ותיוג אם זאת כתובת IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "הוספת המשתמש האחראי על העריכה.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "הוספת ההערה על העריכה.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת על העריכה.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "הוספת דגלים לעריכה.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "הוספת חותם־זמן של העריכה.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "הוספת שם הדף של העריכה.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "הוספת מזהה הדף, מזהה שינויים אחרונים, והמזהה הגרסה החדשה והישנה.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "הוספת אורך הדף החדש והישן בבייטים.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "מתייג שהדף הוא הפניה.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "מתייג עריכה בת־בדיקה בתור בדוקה או בלתי־בדוקה.",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "ציון האם עריכות הניתנות לבדיקה נבדקו אוטומטית או לא.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "הוספת מידע יומן (זהה יומן, סוג יומן וכו') לעיולי יומן.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "רשימת תגים עבור העיול.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "הוספת סיכום־ביקורת תוכן לעיולים שמשויכים לגרסה.",
+ "apihelp-query+recentchanges-param-token": "יש להשתמש ב־<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> במקום.",
+ "apihelp-query+recentchanges-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלו. למשל, כדי לראות רק עריכות משניות שעשו משתמשים שנכנסו לחשבון, יש להגדיר $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "כמה שינויים להחזיר בסך הכול.",
+ "apihelp-query+recentchanges-param-type": "אילו סוגים של שינויים להציג.",
+ "apihelp-query+recentchanges-param-toponly": "לרשום רק שינויים שהם הגרסה האחרונה.",
+ "apihelp-query+recentchanges-param-generaterevisions": "בעת שימוש בתור מחולל, לחולל מזהי גרסה במקום כותרות. עיולי שינויים אחרונים ללא מזהה גרסה משויך (למשל רוב עיולי היומן) לא יחוללו דבר.",
+ "apihelp-query+recentchanges-example-simple": "הצגת השינויים האחרונים.",
+ "apihelp-query+recentchanges-example-generator": "קבלת מידע על הדף על שינויים אחרונים שלא נבדקו.",
+ "apihelp-query+redirects-summary": "מחזיר את כל ההפניות לדפים הנתונים.",
+ "apihelp-query+redirects-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "מזהה הדף של כל הפניה.",
+ "apihelp-query+redirects-paramvalue-prop-title": "השם של כל הפניה.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "מובאה מכל הפניה, אם יש.",
+ "apihelp-query+redirects-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
+ "apihelp-query+redirects-param-limit": "כמה הפניות להחזיר.",
+ "apihelp-query+redirects-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;fragment:להציג רק הפניות עם מקטע.\n;!fragment:להציג רק הפניות ללא מקטע.",
+ "apihelp-query+redirects-example-simple": "קבלת רשימת הפניות ל־[[Main Page]]",
+ "apihelp-query+redirects-example-generator": "קבלת מידע על כל ההפניות ל־[[Main Page]].",
+ "apihelp-query+revisions-summary": "קבלת מידע על גרסה.",
+ "apihelp-query+revisions-extended-description": "יכול לשמש במספר דרכים:\n# קבלת נתונים על ערכת דפים (גרסה אחרונה), באמצעות כותרות או מזהי דף.\n# קבלת גרסאות עבור דף נתון אחד, באמצעות שימוש בכותרות או במזהי דף עם start‏, end או limit.\n# קבלת נתונים על ערכת גרסאות באמצעות הגדרת המזהים שלהם עם revid־ים.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "יכול לשמש רק עם דף בודד (mode #2).",
+ "apihelp-query+revisions-param-startid": "להתחיל למנות מחותם הזמן של הגרסה הזאת. הגרסה צריכה להיות קיימת, אבל לא חייבת להיות שייכת לדף הזה.",
+ "apihelp-query+revisions-param-endid": "להפסיק למנות מחותם הזמן של הגרסה הזאת. הגרסה צריכה להיות קיימת, אבל לא חייבת להיות שייכת לדף הזה.",
+ "apihelp-query+revisions-param-start": "מאיזה חותם־זמן של גרסה להתחיל למנות.",
+ "apihelp-query+revisions-param-end": "למנות עד חותם־הזמן הזה.",
+ "apihelp-query+revisions-param-user": "לכלול רק גרסאות מאת משתמש.",
+ "apihelp-query+revisions-param-excludeuser": "לא לכלול שינויים מאת משתמש.",
+ "apihelp-query+revisions-param-tag": "לרשום רק גרסאות עם התג הזה.",
+ "apihelp-query+revisions-param-token": "אילו אסימונים לקבל עבור כל גרסה.",
+ "apihelp-query+revisions-example-content": "קבל נתונים על תוכן עבור הגרסאות האחרונות של הכותרות <kbd>API</kbd> ו־<kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "קבלת 5 הגרסאות האחרונות של <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "קבלת 5 הגרסאות הראשונות של <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "קבלת 5 הגרסאות הראשונות של <kbd>Main Page</kbd> שנעשו אחרי 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "קבלת 5 הגרבאות הראשונות של <kbd>Main Page</kbd> שלא נעשו על־ידי המשתמש האלמוני <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "קבלת 5 הגרסאות הראשונות של <kbd>Main Page</kbd> שנעשו על־ידי המשתמש <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "אילו מאפיינים לקבל עבור כל גרסה:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "מזהה הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "דגלי גרסה (משני).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "חותם־הזמן של הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "המשתמש שעשה את הגרסה",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "מזהה המשתמש של יוצר הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "אורך (בבייטים) של הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (בבסיס 16) של הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "מזהה מודל התוכן של הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "הערה מאת המשתמש על הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "הערה מפוענחת מאת המשתמש על הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "הטקסט של הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "התגים עבור הגרסה.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">מיושן.</span> יש להשתמש ב־ <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> או ב־ <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> במקום בזה.\n\nעץ פענוח XML של תוכן הגרסה (דורש מודל תוכן <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "הגבלת מספר הגרסאות שיוחזרו.",
+ "apihelp-query+revisions+base-param-expandtemplates": "יש להשתמש ב־<kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> במקום בזה. להרחיב תבניות בתוכן הגרסה (דורש $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "יש להשתמש ב־<kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> או ב־<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> במקום בזה. יצירת עץ פענוח XML עבור תוכן הגרסה (דורש את $1prop=content; מוחלף ב־<kbd>$1prop=parsetree</kbd>).",
+ "apihelp-query+revisions+base-param-parse": "יש להשתמש ב־<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> במקום בזה. פענוח תוכן הגרסה (דורש $1prop=content). מסיבות של ביצועים, אם האפשרות הזאת משמשת, $1limit נכפה לערך 1.",
+ "apihelp-query+revisions+base-param-section": "לאחזר רק את התוכן של הפִסקה עם המספר הזה.",
+ "apihelp-query+revisions+base-param-diffto": "יש להשתמש ב־<kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> במקום בזה. מזהה הגרסה שכל גרסה תושווה אליה. יש להשתמש ב־<kbd dir=\"ltr\">prev</kbd>‏, <kbd dir=\"ltr\">next</kbd> ו־<kbd dir=\"ltr\">cur</kbd> עבור הגרסה הקודמת, הבא והנוכחית, בהתאמה.",
+ "apihelp-query+revisions+base-param-difftotext": "יש להשתמש ב־<kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> במקום בזה. הטקסט שכל גרסה גרסה תושווה אליו. מבצע השוואה רק של מספר מוגבל של גרסאות. דורס את <var>$1diffto</var>. אם מוגדר <var>$1section</var>, רק הפסקה הזאת תושווה אל מול הטקסט הזה.",
+ "apihelp-query+revisions+base-param-difftotextpst": "יש להשתמש ב־<kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> במקום בזה. ביצוע התמרה לפני שמירה על הטקסט לפני הרצת השוואה. תקף רק כשמשמש עם <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "תסדיר ההסדרה שמשמש את <var>$1difftotext</var> וצפוי לפלט של תוכן.",
+ "apihelp-query+search-summary": "ביצוע חיפוש בכל הטקסט.",
+ "apihelp-query+search-param-search": "חיפוש שמות דפים או תוכן שמתאים לערך הזה. אפשר להשתמש בחיפוש מחרוזת כדי לקרוא לאפשרויות חיפוש מתקדמות, בהתאם למה שממומש בשרת החיפוש של הוויקי.",
+ "apihelp-query+search-param-namespace": "חיפוש רק במרחבי השם האלה.",
+ "apihelp-query+search-param-what": "איזה סוג חיפוש לבצע.",
+ "apihelp-query+search-param-info": "אילו מטא־נתונים להחזיר.",
+ "apihelp-query+search-param-prop": "אילו מאפיינים להחזיר:",
+ "apihelp-query+search-param-qiprofile": "באיזה פרופיל בלתי־תלוי בשאילתה להשתמש (משפיע על אלגוריתם הדירוג).",
+ "apihelp-query+search-paramvalue-prop-size": "הוספת גודל הדף בבייטים.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "הוספת מניין המילים של הדף.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "הוספת חותם־הזמן של העריכה האחרונה של הדף.",
+ "apihelp-query+search-paramvalue-prop-snippet": "הוספת קטע קצר מפוענח מהדף.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "הוספת קטע קצר מפוענח משם הדף.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "הוספת קטע קצר מפוענח משם ההפניה.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "הוספת שם ההפניה התואמת.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "הוספת קטע קצר מפוענח של שם הפסקה התואמת.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "הוספת שם הפסקה התואמת.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "הוספת קטע קצר מפוענח של הקטגוריה התואמת.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "הוספת בוליאני שמציין אם החיפוש תאם לתוכן של קובץ.",
+ "apihelp-query+search-paramvalue-prop-score": "חסר־השפעה.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "חסר־השפעה.",
+ "apihelp-query+search-param-limit": "כמה דפים להחזיר בסך הכול.",
+ "apihelp-query+search-param-interwiki": "לכלול תוצאות בינוויקי בחיפוש, אם זמין.",
+ "apihelp-query+search-param-backend": "באיזה שרת חיפוש להשתמש אם לא בבררת המחדל.",
+ "apihelp-query+search-param-enablerewrites": "הפעלת שכתוב שאילתות פנימי. שרתי חיפוש אחדים יכולים לשכתב את השאילתה לצורה אחרת שנחשבת לכזאת שמספקת תוצאות טובות יותר, למשל באמצעות תיקון שגיאות כתיב.",
+ "apihelp-query+search-example-simple": "חיפוש <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "חיפוש טקסטים עבור <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "קבלת מידע על הדף עבור שמוחזרים מחיפוש אחרי <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "החזרת מידע כללי על האתר.",
+ "apihelp-query+siteinfo-param-prop": "איזה מיד לקבל:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "מידע מערכת כללי.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "רשימת מרחבי שם רשומים והשמות הקנוניים שלהם.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "רשימת כינויי מרחבי שם רשומים.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "רשימת כינויים דפים מיוחדים.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "רשימות מילות קסם וכינוייהן.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "החזרזת סטטיסטיקות אתר.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "החזרת מפת בינוויקי (אפשר שתהיה מסוננת, אפשר שתהיה מותאמת מקומית באמצעות <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "החזרת שרת מסד־נתונים עם שיהוי השכפול הגבוה ביותר.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "החזרת קבוצות משתמשים וההרשאות המשויכות.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "החזרת הספריות המותקנות בוויקי.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "החזרת ההרחבות המותקנות בוויקי.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "החזרת רשימת סיומות קבצים (סוגי קבצים) שאפשר להעלות.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "החזרת הזכויות (הרישיון) של הוויקי, אם זמין.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "החזרת מידע על ההגבלות (ההגנות) הזמינות.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "החזרת השפות שמדיה־ויקי תומכת בהן (זה יכול להיות מותאם מקומים עם <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "מחזיר רשימת קודי שפה שמופעל עבורם ממיר שפה ([[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]]), וההגוונים הנתמכים עבור כל אחת מהן.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "החזרת רשימת כל העיצובים הזמינים (זה יכול להיות מותאם מקומית באמצעות <var>$1inlanguagecode</var>, אחרת זה יהיה בשפת התוכן).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "החזרת רשימת תגי הרחבת מפענח.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "החזרת hook־ים של הרחבות מפענח.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "החזרת כל ה־hook־ים המנויים (תוכן של <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "החזרת מזהי משתנים.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "החזרת רשימת הפרוטוקולים המותרים בקישורים חיצוניים.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "החזרת הערכים ההתחלתיים של העדפות משתמש.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "החזרת הגדרות תיבת ההעלאה.",
+ "apihelp-query+siteinfo-param-filteriw": "החזרה רק של עיולים מקומיים או רק של עיולים לא מקומיים ממפת הבינוויקי.",
+ "apihelp-query+siteinfo-param-showalldb": "רשימת כל שרתי מסד הנתונים, לא רק אלה שהכי מתעכבים.",
+ "apihelp-query+siteinfo-param-numberingroup": "רשימת מספרי משתמשים בקבוצות משתמשים.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "קוד שפה בשביל שמות שפות מתורגמות (מאמץ טוב ביותר) ושמות עיצובים.",
+ "apihelp-query+siteinfo-example-simple": "איזור מידע על האתר.",
+ "apihelp-query+siteinfo-example-interwiki": "אחזור תחיליות בינוויקי מקומיות.",
+ "apihelp-query+siteinfo-example-replag": "בדיקת שיהוי השכפול הנוכחי.",
+ "apihelp-query+stashimageinfo-summary": "החזרת מידע על הקובץ עבור הקבצים המוסלקים.",
+ "apihelp-query+stashimageinfo-param-filekey": "מפתח שמזהה העלאה קודמת שהוסלקה באופן זמני.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "כינוי ל־$1filekey, לתאימות אחורה.",
+ "apihelp-query+stashimageinfo-example-simple": "החזרת מידע על קובץ מוסלק.",
+ "apihelp-query+stashimageinfo-example-params": "החזרת תמונות ממוזערות עבור שני קבצים מוסלקים.",
+ "apihelp-query+tags-summary": "רשימת תגי שינוי.",
+ "apihelp-query+tags-param-limit": "המספר המרבי של תגים לרשום.",
+ "apihelp-query+tags-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+tags-paramvalue-prop-name": "הוספת שם התג.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "הוספת הודעת המערכת עבור התג.",
+ "apihelp-query+tags-paramvalue-prop-description": "הוספת תיאור התג.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "הוספת מספר הגרסאות ועיולי היומן עם התג הזה.",
+ "apihelp-query+tags-paramvalue-prop-defined": "ציון האם התג מוגדר.",
+ "apihelp-query+tags-paramvalue-prop-source": "קבלת מקורות התג, שיכולים להיות <samp>extension</samp> עבור תגים שמגדירות הרחבות ו־<samp>manual</samp> עבור תגים שמשתמשים יכולים להחיל ידנית.",
+ "apihelp-query+tags-paramvalue-prop-active": "האם התג עדיין מוּחל.",
+ "apihelp-query+tags-example-simple": "רשימת תגים זמינים.",
+ "apihelp-query+templates-summary": "החזרת כל הדפים המוכללים בדפים הנתונים.",
+ "apihelp-query+templates-param-namespace": "הצגת תבניות רק במרחב השם הזה.",
+ "apihelp-query+templates-param-limit": "כמה תבניות להחזיר.",
+ "apihelp-query+templates-param-templates": "לרשום רק את התבניות האלו. שימושי לבדיקה האם דף מסוים משתמש בתבנית מסוימת.",
+ "apihelp-query+templates-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+templates-example-simple": "קבלת התבניות המשמשות בדף <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "קבלת מידע על דפי התבנית שמשמשים ב־<kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "קבלת מידע במרחבי השם {{ns:user}} ו־{{ns:template}} שמוכללים בדף <kbd>Main Page</kbd>.",
+ "apihelp-query+tokens-summary": "קבלת אסימונים לפעולות שמשנות נתונים.",
+ "apihelp-query+tokens-param-type": "סוגי האסימונים לבקש.",
+ "apihelp-query+tokens-example-simple": "אחזור אסימון csrf (בררת המחדל).",
+ "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
+ "apihelp-query+transcludedin-summary": "מציאת כל הדפים שמכלילים את הדפים הנתונים.",
+ "apihelp-query+transcludedin-param-prop": "אילו מאפיינים לקבל:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "מזהה הדף של כל דף.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "השם של כל דף.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "דגל אם הדף הוא הפניה.",
+ "apihelp-query+transcludedin-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
+ "apihelp-query+transcludedin-param-limit": "כמה להחזיר.",
+ "apihelp-query+transcludedin-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;redirect:להציג רק הפניות.\n;!redirect:לא להציג הפניות.",
+ "apihelp-query+transcludedin-example-simple": "קבלת רשימה של דפים שמכלילים את <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "קבלת מידע על הדפים שמכלילים את <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "קבלת כל העריכות של המשתמש.",
+ "apihelp-query+usercontribs-param-limit": "המספר המרבי של התרומות להחזיר.",
+ "apihelp-query+usercontribs-param-start": "באיזה חותם־הזמן להתחיל.",
+ "apihelp-query+usercontribs-param-end": "באיזה חותם־הזמן לסיים",
+ "apihelp-query+usercontribs-param-user": "עבור אילו משתמשים לאחזר תרומות. לא יכול לשמש עם <var>$1userids</var> או <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "אחזור תרומות עבור כל המשתמשים שהשמות שלהם מתחילים בערך הזה. לא יכול לשמש עם <var>$1user</var> או <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "מזהי המשתמשים לאחזור תרומות. לא יכול לשמש עם <var>$1user</var> או <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "לרשום רק תרומות במרחבי השם האלה.",
+ "apihelp-query+usercontribs-param-prop": "לכלול פריטי מידע נוספים:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "הוספת מזהה הדף ומזהה הגרסה.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "הוספת חותם־הזמן של העריכה.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "הוספת ההערה על העריכה.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת של העריכה.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "הוספת הגודל החדש של העריכה.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "הוספת ההפרש של העריכה אל מול ההורה שלה.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "הוספת הדגלים של העריכה.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "מתייג עריכות בדוקות.",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "תיוג עריכות שנבדקו אוטומטית.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "רשימת תגים עבור עריכות.",
+ "apihelp-query+usercontribs-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלה, למשל רק עריכות לא־משניות.\n\nאם מוגדר <kbd>$2show=patrolled</kbd> או <kbd>$2show=!patrolled</kbd>, גרסאות ישנות מ־<var dir=\"ltr\">[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>‏ ({{PLURAL:$1|שנייה אחת|$1 שניות}}) לא תוצגנה.",
+ "apihelp-query+usercontribs-param-tag": "לרשום רק גרסאות עם התג הזה.",
+ "apihelp-query+usercontribs-param-toponly": "לרשום רק שינויים שהם הגרסה האחרונה.",
+ "apihelp-query+usercontribs-example-user": "הצגת התרומות של המשתמש <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "הצגת תרומות מכל כתובות ה־IP שמתחילות ב־<kbd dir=\"ltr\">192.0.2.</kbd>.",
+ "apihelp-query+userinfo-summary": "קבלת מידע על המשתמש הנוכחי.",
+ "apihelp-query+userinfo-param-prop": "אילו חלקי מידע לכלול:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "מתייג אם המשתמש הנוכחי נחסם, על־ידי מי ומאיזו סיבה.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "הוספת התג <samp>messages</samp> אם למשתמש הנוכחי יש הודעות ממתינות.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "רשימת כל הקבוצות שהמשתמש שייך אליהן.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "לרשום קבוצות שהמשתמש הנוכחי משויך אליהן במפורש, כולל תאריך תפוגה לחברות בכל קבוצה.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "רשימת כל הקבוצות שהמשתמש שייך אליהן באופן אוטומטי.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "רשימת כל ההרשאות שיש למשתמש הזה.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "רשימת הקבוצות שהמשתמש הנוכחי יכול להוסיף אליהן ולגרוע מהן.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "רשימת כל ההעדפות שהמשתמש הנוכחי הגדיר.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "קבלת אסימון לשינוי ההעדפות של המשתמש הנוכחי.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "הוספת מניין העריכות של המשתמש הנוכחי.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "רשימת כל מגבלות הקצב שחלות על המשתמש הנוכחי.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "הוספת השם האמתי של המשתמש.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "הוספת כתובת הדוא\"ל ותאריך אימות כתובת הדוא\"ל.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "מדפיס את כותרת <code>Accept-Language</code> ששלח הלקוח בתסדיר מובנה.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "הוספת תאריך הרישום של המשתמש.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "הוספת מניין הדפים שלא נקראו ברשימת המעקב של המשתמש (לכל היותר $1; מחזיר <samp>$2</samp> אם יש יותר).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "הוספת המזהה המרכזי ומצב השיוך למשתמש.",
+ "apihelp-query+userinfo-param-attachedwiki": "עם <kbd>$1prop=centralids</kbd>, לציין האם המשתמש משויך לוויקי עם המזהה הזה.",
+ "apihelp-query+userinfo-example-simple": "קבלת מידע על המשתמש הנוכחי.",
+ "apihelp-query+userinfo-example-data": "קבלת מידע נוסף על המשתמש הנוכחי.",
+ "apihelp-query+users-summary": "קבלת מידע על רשימת משתמשים.",
+ "apihelp-query+users-param-prop": "אילו חלקי מידע לקבל:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "מתייג אם המשתמש חסום, על־ידי מי, ומאיזו סיבה.",
+ "apihelp-query+users-paramvalue-prop-groups": "רשימת כל הקבוצות שהמשתמש שייך אליהן.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "לרשום קבוצות שכל משתמש משויך אליהן במפורש, כולל תאריך תפוגה לחברות בכל קבוצה.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "רשימת כל הקבוצות שהמשתמש חבר בהן אוטומטית.",
+ "apihelp-query+users-paramvalue-prop-rights": "רשימת כל ההרשאות שיש למשתמש.",
+ "apihelp-query+users-paramvalue-prop-editcount": "הוספת מניין העריכות של המשתמש.",
+ "apihelp-query+users-paramvalue-prop-registration": "הוספת חותם־הזמן של רישום המשתמש.",
+ "apihelp-query+users-paramvalue-prop-emailable": "מתייג אם המשתמש יכול ורוצה לקבל דואר אלקטרוני דרך [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "מתייג את המגדר של המשתמש. מחזיר \"male\"‏, \"female\" או \"unknown\".",
+ "apihelp-query+users-paramvalue-prop-centralids": "הוספת המזהה המרכזי ומצב השיוך למשתמש.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "ציון האם אפשר ליצור חשבון עבור שמות משתמש תקינים, אבל לא רשומים.",
+ "apihelp-query+users-param-attachedwiki": "עם <kbd>$1prop=centralids</kbd>, לציין האם המשתמש משויך לוויקי עם המזהה הזה.",
+ "apihelp-query+users-param-users": "רשימת משתמשים שעליהם צריך לקבל מידע.",
+ "apihelp-query+users-param-userids": "רשימת מזהי משתמש שעבורם יתקבל המידע.",
+ "apihelp-query+users-param-token": "יש להשתמש ב־<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> במקום.",
+ "apihelp-query+users-example-simple": "החזרת מידע עבור המשתמש <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "קבלת שינויים אחרונים לדפים ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlist-param-allrev": "לכלול גרסאות מרובות של אותו הדף בתוך מסגרת הזמן הנתונה.",
+ "apihelp-query+watchlist-param-start": "מאיזה חותם־זמן להתחיל למנות.",
+ "apihelp-query+watchlist-param-end": "באיזה חותם זמן להפסיק לרשום.",
+ "apihelp-query+watchlist-param-namespace": "סינון שינויים רק למרחבי השם שניתנו.",
+ "apihelp-query+watchlist-param-user": "לרשום רק שינויים של המשתמש הזה.",
+ "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user",
+ "apihelp-query+watchlist-param-limit": "כמה תוצאות סך הכול להחזיר בכל בקשה.",
+ "apihelp-query+watchlist-param-prop": "אילו מאפיינים נוספים לקבל:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "הוספת מזהי גסה ומזהי דף.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "הוספת שם הדף.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "הוספת דגלים לעריכה.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "הוספת המשתמש שעשה את העריכה.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "הוספת מזהה המשתמש של מי שעשה את העריכה.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "הוספת ההערה של העריכה.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "הוספת ההערכה המפוענחת של העריכה.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "הוספת חותם־זמן של העריכה.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "תיוג עריכות שנבדקו.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "הוספת האורך החדש והישן של הדף.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "הוספת חותם־זמן של ההודעה האחרונה למשתמש על העריכה.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "הוספת מידע מהיומן איפה שמתאים.",
+ "apihelp-query+watchlist-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלו. למשל, כדי לראות רק עריכות משניות שעשו משתמשים שנכנסו לחשבון, יש להגדיר $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "אולי סוגי שינויים להציג:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "עריכות דף רגילות.",
+ "apihelp-query+watchlist-paramvalue-type-external": "שינויים חיצוניים.",
+ "apihelp-query+watchlist-paramvalue-type-new": "יצירות דף.",
+ "apihelp-query+watchlist-paramvalue-type-log": "עיולי יומן.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "שינויים בהשתייכות לקטגוריה.",
+ "apihelp-query+watchlist-param-owner": "משמש יחד עם $1token לגישה לרשימת מעקב של משתמש אחר.",
+ "apihelp-query+watchlist-param-token": "אסימון אבטחה (זמין ב־[[Special:Preferences#mw-prefsection-watchlist|העדפות]]) שמאפשר לגשת לרשימת מעקב של משתמש אחר.",
+ "apihelp-query+watchlist-example-simple": "לרשום את הגרסה האחרונה עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlist-example-props": "אחזור מידע נוסף על הגרסה האחרונה עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlist-example-allrev": "אחזור מידע על כל השינויים האחרונים לדפים ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlist-example-generator": "אחזור מידע על הדף עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlist-example-generator-rev": "אחזור מידע על הגרסה עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlist-example-wlowner": "לרשום את הגרסה האחרונה עבור דפים שהשתנו לאחרונה ברשימת המעקב של משתמש <kbd>Example</kbd>.",
+ "apihelp-query+watchlistraw-summary": "קבלת כל הדפים ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlistraw-param-namespace": "לרשום רק דפים במרחב השם הנתון.",
+ "apihelp-query+watchlistraw-param-limit": "כמה תוצאות סך הכול להחזיר בכל בקשה.",
+ "apihelp-query+watchlistraw-param-prop": "אילו מאפיינים נוספים לקבל:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "הוספת חותם־הזמן של ההודעה האחרונה למשתמש על העריכה.",
+ "apihelp-query+watchlistraw-param-show": "לרשום רק פריטים שעונים על אמות המידה האלו.",
+ "apihelp-query+watchlistraw-param-owner": "משמש יחד עם $1token לגישה לרשימת מעקב של משתמש אחר.",
+ "apihelp-query+watchlistraw-param-token": "אסימון אבטחה (זמין ב־[[Special:Preferences#mw-prefsection-watchlist|העדפות]]) שמאפשר לגשת לרשימת מעקב של משתמש אחר.",
+ "apihelp-query+watchlistraw-param-dir": "באיזה כיוון לרשום.",
+ "apihelp-query+watchlistraw-param-fromtitle": "מאיזו כותרת (עם תחילית מרחב שם) להתחיל למנות.",
+ "apihelp-query+watchlistraw-param-totitle": "באיזו כותרת (עם תחילית מרחב שם) להפסיק למנות.",
+ "apihelp-query+watchlistraw-example-simple": "לרשום דפים ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-query+watchlistraw-example-generator": "אחזור מידע על הדפים עבור דפים ברשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-removeauthenticationdata-summary": "הסרת נתוני אימות עבור המשתמש הנוכחי.",
+ "apihelp-removeauthenticationdata-example-simple": "לנסות להסיר את נתוני המשתמש הנוכחי בשביל <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "שליחת דוא\"ל איפוס סיסמה למשתמש.",
+ "apihelp-resetpassword-extended-description-noroutes": "אין מסלולים לאיפוס ססמה.\n\nכדי להשתמש במודול הזה, יש להפעיל מסלולים ב־<var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.",
+ "apihelp-resetpassword-param-user": "המשתמש שמאופס.",
+ "apihelp-resetpassword-param-email": "כתובת הדוא\"ל של המשתמש שהסיסמה שלו מאופסת.",
+ "apihelp-resetpassword-example-user": "שליחת מכתב איפוס ססמה למשתמש <kbd>Example</kbd>.",
+ "apihelp-resetpassword-example-email": "שליחת מכתב איפוס ססמה לכל המשתמשים שהכתובת שלהם היא <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "מחיקה ושחזור ממחיקה של גרסאות.",
+ "apihelp-revisiondelete-param-type": "סוג מחיקת הגרסה שמתבצע.",
+ "apihelp-revisiondelete-param-target": "שם הדף למחיקת גרסה, אם זה נחוץ לסוג.",
+ "apihelp-revisiondelete-param-ids": "מזהים של הגרסה שתימחק.",
+ "apihelp-revisiondelete-param-hide": "מה להסתיר עבור כל גרסה.",
+ "apihelp-revisiondelete-param-show": "הסתרה של מה לבטל עבור כל גרסה.",
+ "apihelp-revisiondelete-param-suppress": "האם להעלים נתונים ממפעילים ומאחרים.",
+ "apihelp-revisiondelete-param-reason": "סיבה למחיקה או לשחזור ממחיקה.",
+ "apihelp-revisiondelete-param-tags": "אילו תגים להחיל על העיול ביומן המחיקה.",
+ "apihelp-revisiondelete-example-revision": "הסתרת התוכן של הגרסה <kbd>12345</kbd> בדף <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "הסתרת כל הנתונים על רשומת היומן <kbd>67890</kbd> עם הסיבה <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "ביטול העריכה האחרונה לדף.",
+ "apihelp-rollback-extended-description": "אם המשמש האחרון שערך את הדף עשה מספר עריכות זו אחר זו, הן תשוחזרנה.",
+ "apihelp-rollback-param-title": "שם הדף לשחזור. לא יכול לשמש יחד עם <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "מזהה הדף לשחזור. לא יכול לשמש יחד עם <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "אילו תגים להחיל על השחזור.",
+ "apihelp-rollback-param-user": "שם המשתמשים שהעריכות שלו תשוחזרנה.",
+ "apihelp-rollback-param-summary": "תקציר עריכה מותאם. אם ריק, ישמש תקציר לפי בררת מחדל.",
+ "apihelp-rollback-param-markbot": "לסמן את העריכות ששוחזרו ואת השחזור בתור עריכות בוט.",
+ "apihelp-rollback-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+ "apihelp-rollback-example-simple": "שחזור העריכות האחרונות לדף <kbd>Main Page</kbd> על־ידי המשתמש <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "שחזור העריכות האחרונות לדף <kbd>Main Page</kbd> מאת משתמש ה־IP‏ <kbd>192.0.2.5</kbd> עם התקציר <kbd>Reverting vandalism</kbd> וסימון של העריכות האלה ושל השחזור בתור עריכות בוט.",
+ "apihelp-rsd-summary": "יצוא סכמת RSD‏ (Really Simple Discovery).",
+ "apihelp-rsd-example-simple": "יצוא סכמת ה־RSD.",
+ "apihelp-setnotificationtimestamp-summary": "עדכון חותם־הזמן של ההודעה עבור דפים במעקב.",
+ "apihelp-setnotificationtimestamp-extended-description": "זה משפיע על הדגשת הדפים שהשתנו ברשימת המעקב ובהיסטוריה, ושליחת דואר אלקטרוני כאשר ההעדפה \"{{int:tog-enotifwatchlistpages}}\" מופעלת.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "לעבוד על כל הדפים שבמעקב.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "חותם־הזמן להגדרת חותם־זמן של הודעה.",
+ "apihelp-setnotificationtimestamp-param-torevid": "לאיזו גרסה להגדיר את חותם הזמן (רק דף אחד).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "הגרסה שחותם־הזמן של ההודעה יוגדר בתור חדש ממנה (רק דף אחד).",
+ "apihelp-setnotificationtimestamp-example-all": "אתחול מצב ההודעה עבור כל רשימת המעקב.",
+ "apihelp-setnotificationtimestamp-example-page": "אתחול מצב ההודעה עבור <kbd>Main Page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "הגדרת חותם־הזמן להודעה ל־<kbd>Main page</kbd> כך שכל העריכות מאז 1 בינואר 2012 מוגדרות בתור כאלה שלא נצפו.",
+ "apihelp-setnotificationtimestamp-example-allpages": "אתחול מצב ההודעה עבור דפים במרחב השם <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "שנה את השפה של דף",
+ "apihelp-setpagelanguage-extended-description-disabled": "שינוי השפה של דף לא מורשה בוויקי זה.\n\nהפעל את <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> על מנת להשתמש בפעולה זו",
+ "apihelp-setpagelanguage-param-title": "כותרת הדף שאת שפתו ברצונך לשנות. לא אפשרי להשתמש באפשרות עם <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "מזהה הדף שאת שפתו ברצונך לשנות. לא אפשרי להשתמש באפשרות עם <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "קוד השפה של השפה שאליה צריך לשנות את הדף. יש להשתמש ב־<kbd>default</kbd> כדי לאתחל את הדף לשפת בררת המחדל של הוויקי.",
+ "apihelp-setpagelanguage-param-reason": "הסיבה לשינוי.",
+ "apihelp-setpagelanguage-param-tags": "אילו תגי שינוי להחיל על העיול ביומן שמתבצע כתוצאה מהפעולה הזאת.",
+ "apihelp-setpagelanguage-example-language": "שינוי השפה של <kbd>Main Page</kbd> לבסקית.",
+ "apihelp-setpagelanguage-example-default": "שינוי השפה של הדף בעל המזהה 123 לשפה הרגילה של הוויקי.",
+ "apihelp-stashedit-summary": "הכנת עריכה במטמון משותף.",
+ "apihelp-stashedit-extended-description": "זה מיועד לשימוש דרך AJAX מתוך ערך כדי לשפר את הביצועים של שמירת הדף.",
+ "apihelp-stashedit-param-title": "כותרת הדף הנערך.",
+ "apihelp-stashedit-param-section": "מספר הפסקה. <kbd>0</kbd> עבור הפסקה הראשונה, <kbd>new</kbd> עבור פסקה חדשה.",
+ "apihelp-stashedit-param-sectiontitle": "כותרת הפסקה החדשה.",
+ "apihelp-stashedit-param-text": "תוכן הדף.",
+ "apihelp-stashedit-param-stashedtexthash": "גיבוב של תוכן דף מסליק קודם שישמש במקום זה.",
+ "apihelp-stashedit-param-contentmodel": "מודל התוכן של התוכן החדש.",
+ "apihelp-stashedit-param-contentformat": "תסדיר הסדרת תוכן עבור טקסט הקלט.",
+ "apihelp-stashedit-param-baserevid": "מזהה גסה של גרסת הבסיס.",
+ "apihelp-stashedit-param-summary": "לשנות תקציר.",
+ "apihelp-tag-summary": "הוספת או הסרה של תגים מגרסאות בודדות או עיולי יומן בודדים.",
+ "apihelp-tag-param-rcid": "מזהה שינוי אחרון אחד או יותר שתג יתווסף אליו או יוסר ממנו.",
+ "apihelp-tag-param-revid": "מזהה גרסה אחד או יותר שתג יתווסף אליה או יוסר ממנה.",
+ "apihelp-tag-param-logid": "מזהה רשומת יומן אחת או יותר שתג יתווסף אליה או יוסר ממנה.",
+ "apihelp-tag-param-add": "התגים להוספה. אפשר להוסיף רק תגים קיימים.",
+ "apihelp-tag-param-remove": "תגים להסרה. רק תגים שהוגדרו ידנית או שאינם מוגדרים כלל יכולים להיות מוסרים.",
+ "apihelp-tag-param-reason": "סיבה לשינוי.",
+ "apihelp-tag-param-tags": "אילו תגים להחיל על רשומת היומן שתיווצר כתוצאה מהפעולה הזאת.",
+ "apihelp-tag-example-rev": "הוספת התג <kbd>vandalism</kbd> לגרסה עם המזהה 123 בלי לציין סיבה",
+ "apihelp-tag-example-log": "הסרת התג <kbd>spam</kbd> מעיול עם המזהה 123 עם הסיבה <kbd>Wrongly applied</kbd>",
+ "apihelp-tokens-summary": "קבלת אסימונים לפעולות שמשנות נתונים.",
+ "apihelp-tokens-extended-description": "היחידה הזאת הוכרזה בתור מיושנת לטובת [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "סוגי האסימונים לבקש.",
+ "apihelp-tokens-example-edit": "אחזור אסימון עריכה (בררת המחדל).",
+ "apihelp-tokens-example-emailmove": "אחזור אסימון דוא\"ל ואסימון העברה.",
+ "apihelp-unblock-summary": "שחרור משתמש מחסימה.",
+ "apihelp-unblock-param-id": "מזהה החסימה לשחרור (מתקבל דרך <kbd>list=blocks</kbd>). לא יכול לשמש יחד עם <var>$1user</var> או <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "שם משתמש, כתובת IP או טווח כתובות IP לחסימה. לא יכול לשמש יחד עם <var>$1id</var> או <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "מזהה המשתמש שישוחרר מחסימה. לא יכול לשמש יחד עם <var>$1id</var> או <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "סיבה להסרת חסימה.",
+ "apihelp-unblock-param-tags": "תגי שינוי שיחולו על העיול ביומן החסימה.",
+ "apihelp-unblock-example-id": "לשחרר את החסימה עם מזהה #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "לשחרר את החסימה של המשתמש <kbd>Bob</kbd> עם הסיבה <kbd>Sorry Bob</kbd>.",
+ "apihelp-undelete-summary": "שחזור גרסאות של דף מחוק.",
+ "apihelp-undelete-extended-description": "אפשר לאחזר רשימת גרסאות מחוקות (כולל חותמי־זמן) דרך [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], ואפשר לאחזר רשימת מזהי קבצים מחוקים דרך [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "שם הדף לשחזור ממחיקה.",
+ "apihelp-undelete-param-reason": "סיבה לשחזור.",
+ "apihelp-undelete-param-tags": "תגי שינוי שיחולו על העיול ביומן המחיקה.",
+ "apihelp-undelete-param-timestamps": "חותמי־זמן של הגרסה לשחזור. אם גם <var>$1timestamps</var> וגם <var>$1fileids</var> ריקים, הכול ישוחזר.",
+ "apihelp-undelete-param-fileids": "מזהי גרסאות הקובץ לשחזור. אם גם <var>$1timestamps</var> וגם <var>$1fileids</var> ריקים, הכול ישוחזר.",
+ "apihelp-undelete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+ "apihelp-undelete-example-page": "שחזור ממחיקה של הדף <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "שחזור שתי גרסאות של הדף <kbd>Main Page</kbd>.",
+ "apihelp-unlinkaccount-summary": "ביטול קישור של חשבון צד־שלישי מהמשתמש הנוכחי.",
+ "apihelp-unlinkaccount-example-simple": "לנסות להסיר את הקישור של המשתמש הנוכחי לספק המשויך עם <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-summary": "העלאת קובץ, או קבלת מצב ההעלאות הממתינות.",
+ "apihelp-upload-extended-description": "יש מספר שיטות:\n* להעלות את הקובץ ישירות, באמצעות הפרמטר <var>$1file</var>.\n* להעלות את הקובץ בחלקים, באמצעות הפרמטרים <var>$1filesize</var>‏, <var>$1chunk</var> ו־<var>$1offset</var>.\n* לגרום לשרת מדיה־ויקי לאחזר את הקובץ מ־URL באמצעות הפרמטר <var>$1url</var>.\n* להשלים העלאה קודמת שנכשלה בשל אזהרות באמצעות הפרמטר <var>$1filekey</var>.\nלתשומך לבך, יש לעשות את HTTP POST בתור העלאת קובץ (כלומר באמצעות <code>multipart/form-data</code>) בעת שליחת ה־<var>$1file</var>.",
+ "apihelp-upload-param-filename": "שם קובץ היעד.",
+ "apihelp-upload-param-comment": "הערת העלאה. משמש גם בתור טקסט הדף ההתחלתי עבור קבצים חדשים אם <var>$1text</var> אינו מצוין.",
+ "apihelp-upload-param-tags": "שינוי תגים להחלה לרשומות ההעלאה ולגרסאות דף הקובץ.",
+ "apihelp-upload-param-text": "טקסט הדף ההתחלתי לקבצים חדשים.",
+ "apihelp-upload-param-watch": "לעקוב אחרי הדף.",
+ "apihelp-upload-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+ "apihelp-upload-param-ignorewarnings": "להתעלם מכל האזהרות.",
+ "apihelp-upload-param-file": "תוכן הקובץ.",
+ "apihelp-upload-param-url": "URL לאחזור הקובץ.",
+ "apihelp-upload-param-filekey": "מפתח שמזהה העלאה קודמת שהוסלקה באופן זמני.",
+ "apihelp-upload-param-sessionkey": "אותו דבר כמו $1filekey, מושאר לצור תאימות אחורה.",
+ "apihelp-upload-param-stash": "אם זה מוגדר, השרת יסליק זמנית את הקובץ במקום להוסיף אותו למאגר.",
+ "apihelp-upload-param-filesize": "גודל הקובץ של כל ההעלאה.",
+ "apihelp-upload-param-offset": "היסט הפלח בבתים.",
+ "apihelp-upload-param-chunk": "תוכן החתיכה.",
+ "apihelp-upload-param-async": "להפוך פעולות קבצים גדולות לאסינכרוניות כשאפשר.",
+ "apihelp-upload-param-checkstatus": "לאחזר רק מצב העלאה עבור מפתח הקובץ שניתן.",
+ "apihelp-upload-example-url": "להעלות מ־URL.",
+ "apihelp-upload-example-filekey": "להשלים העלאה שנכשלה בשל אזהרות.",
+ "apihelp-userrights-summary": "שינוי חברות בקבוצות של המשתמש.",
+ "apihelp-userrights-param-user": "שם משתמש.",
+ "apihelp-userrights-param-userid": "מזהה משתמש.",
+ "apihelp-userrights-param-add": "הוספת המשתמש לקבוצות האלו, ואם הוא כבר חבר, עדכון זמן התפוגה של החברות בקבוצה הזאת.",
+ "apihelp-userrights-param-expiry": "חותמי־זמן תפוגה. יכולים להיות יחסיים (למשל <kbd>5 months</kbd> או <kbd>2 weeks</kbd>) או מוחלטים (למשל <kbd>2014-09-18T12:34:56Z</kbd>). אם מוגדר רק חותם־זמן אחד, הוא ישמש לכל הקבוצות שהועברו לפרמטר <var>$1add</var>. יש להשתמש ב־<kbd>infinite</kbd>‏, <kbd>indefinite</kbd>‏, <kbd>infinity</kbd>, או <kbd>never</kbd> בשביל קבוצת משתמשים שאינה פגה לעולם.",
+ "apihelp-userrights-param-remove": "הסרת משתמש מהקבוצות האלו.",
+ "apihelp-userrights-param-reason": "סיבה לשינוי.",
+ "apihelp-userrights-param-tags": "לשנות את התגים שיוחלו על העיול ביומן הרשאות המשתמש.",
+ "apihelp-userrights-example-user": "הוספת המשתמש <kbd>FooBot</kbd> לקבוצה <kbd>bot</kbd> והסרתו מהקבוצות <kbd>sysop</kbd> ו־<kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "הוספת המשתמש עם המזהה <kbd>123</kbd> לקבוצה <kbd>bot</kbd> והסרתו מהקבוצות <kbd>sysop</kbd> ו־<kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "להוסיף את <kbd>SometimeSysop</kbd> לקבוצה <kbd>sysop</kbd> לחודש אחד.",
+ "apihelp-validatepassword-summary": "לבדוק תקינות ססמה אל מול מדיניות הססמאות של הוויקי.",
+ "apihelp-validatepassword-extended-description": "התקינות מדווחת כ־<samp>Good</samp> אם הססמה קבילה, <samp>Change</samp> אם הססמה יכולה לשמש לכניסה, אבל צריכה להשתנות, או <samp>Invalid</samp> אם הססמה אינה שמישה.",
+ "apihelp-validatepassword-param-password": "ססמה שתקינותה תיבדק.",
+ "apihelp-validatepassword-param-user": "שם משתמש, לשימוש בעת בדיקת יצירת חשבון. המשתמש ששמו ניתן צריך לא להיות קיים.",
+ "apihelp-validatepassword-param-email": "כתובת הדוא\"ל, לשימוש בעת בדיקת יצירת חשבון.",
+ "apihelp-validatepassword-param-realname": "שם אמתי, לשימוש בעת בדיקת יצירת חשבון.",
+ "apihelp-validatepassword-example-1": "לבדוק את תקינות הססמה <kbd>foobar</kbd> עבור המשתמש הנוכחי.",
+ "apihelp-validatepassword-example-2": "לבדוק את תקינות הססמה <kbd>qwerty</kbd> ליצירת החשבון <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "להוסיף דפים לרשימת המעקב של המשתמש הנוכחי או הסרתם ממנה.",
+ "apihelp-watch-param-title": "הדף להוסיף לרשימת המעקב או להסיר ממנה. יש להשתמש במקום זאת ב־<var>$1titles</var>.",
+ "apihelp-watch-param-unwatch": "אם זה מוגדר, הדף יהיה לא במעקב במקום להיות במעקב.",
+ "apihelp-watch-example-watch": "לעקוב אחרי הדף <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "להפסיק את המעקב אחרי הדף <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "לעקוב אחרי הדפים הראשונים במרחב הראשי.",
+ "apihelp-format-example-generic": "להחזיר את תוצאות השאילתה בתסדיר $1.",
+ "apihelp-format-param-wrappedhtml": "החזרת HTML מעוצב ומודולי ResourceLoader משויכים בתור עצם JSON.",
+ "apihelp-json-summary": "לפלוט נתונים בתסדיר JSON.",
+ "apihelp-json-param-callback": "אם זה צוין, עוטף את הפלט לתוך קריאת פונקציה נתונה. למען הבטיחות, כל הנתונים הייחודיים למשתמש יוגבלו.",
+ "apihelp-json-param-utf8": "אם זה צוין, רוב התווים שאינם ASCII (אבל לא כולם) יקודדו בתור UTF-8 במקום להתחלף בסדרות חילוף הקסדצימליות. זאת בררת המחדל אם הערך של <var>formatversion</var> הוא לא <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "אם זה צוין, לקודד את כל מה שאינו ASCII בסדרות חילוף הקסדצימליות. זאת בררת המחדל כש־<var>formatversion</var> היא <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "תסדיר הפלט:\n;1:תסדיר עם תאימות אחורה (ערכים בוליאניים בסגנון XML, מפתחות <samp>*</samp> לצומתי תוכן, וכו').\n;2:תסדיר מודרני ניסיוני. הפרטים יכולים להשתנות!\n;latest:להשתמש בתסדיר החדש ביותר (כרגע <kbd>2</kbd>), יכול להשתנות ללא התראה.",
+ "apihelp-jsonfm-summary": "לפלוט נתונים בתסדיר JSON (עם הדפסה יפה ב־HTML).",
+ "apihelp-none-summary": "לא לפלוט שום דבר.",
+ "apihelp-php-summary": "לפלוט נתונים בתסדיר PHP מוסדר.",
+ "apihelp-php-param-formatversion": "תסדיר הפלט:\n;1:תסדיר עם תאימות אחורה (ערכים בוליאניים בסגנון XML, מפתחות <samp>*</samp> לצומתי תוכן, וכו').\n;2:תסדיר מודרני ניסיוני. הפרטים יכולים להשתנות!\n;latest:להשתמש בתסדיר החדש ביותר (כרגע <kbd>2</kbd>), יכול להשתנות ללא התראה.",
+ "apihelp-phpfm-summary": "לפלוט נתונים בתסדיר PHP מוסדר (עם הדפסה יפה ב־HTML).",
+ "apihelp-rawfm-summary": "לפלוט את הנתונים, כולל אלמנטים לניפוי שגיאות, בתסדיר JSON (עם הדפסה יפה ב־HTML).",
+ "apihelp-xml-summary": "לפלוט נתונים בתסדיר XML.",
+ "apihelp-xml-param-xslt": "אם צוין, יש להוסיף את שם הדף כגיליון עיצוב XSL. על הערך להיות כותרת ב {{ns:MediaWiki}} במרחב שם המשתמש, המסתיים ב- <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "אם זה צוין, מוסיף מרחב שם של XML.",
+ "apihelp-xmlfm-summary": "לפלוט נתונים בתסדיר XML (עם הדפסה יפה ב־HTML).",
+ "api-format-title": "תוצאה של API של מדיה־ויקי",
+ "api-format-prettyprint-header": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר <var>format</var> כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום <kbd>format=$2</kbd>.\n\nר' את [[mw:Special:MyLanguage/API|התיעוד המלא]], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
+ "api-format-prettyprint-header-only-html": "זה ייצוג HTML שמיועד לניפוי שגיאות ואינו מתאים לשימוש ביישומים.\n\nר' את [[mw:Special:MyLanguage/API|התיעוד המלא]] או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
+ "api-format-prettyprint-header-hyperlinked": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר <var>format</var> כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש להגדיר [$3 <kbd>format=$2</kbd>].\n\nר' את [[mw:API|התיעוד המלא]], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
+ "api-format-prettyprint-status": "התשובה הזאת הייתה מוחזרת עם סטטוס ה־HTTP מס' $1 עם הטקסט $2.",
+ "api-login-fail-aborted": "אימות דורש הידוד עם המשתמש, שאינו נתמך ב־<kbd>action=login</kbd>. כדי שיהיה אפשר להיכנס לחשבון עם <kbd>action=login</kbd>, נא לראות את [[Special:BotPasswords]]. כדי להמשיך להשתמש בכניסה עם חשבון ראשי, ר' <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-aborted-nobotpw": "אימות דורש הידוד עם המשתמש, שאינו נתמך ב־<kbd>action=login</kbd>. כדי להיכנס לחשבון, ר' <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-badsessionprovider": "לא ניתן להיכנס לחשבון באמצעות $1.",
+ "api-login-fail-sameorigin": "לא ניתן להיכנס לחשבון כאשר מדיניות מקור זהה אינה חלה.",
+ "api-pageset-param-titles": "רשימת כותרות.",
+ "api-pageset-param-pageids": "רשימת מזהי דף לעבוד עליהם.",
+ "api-pageset-param-revids": "רשימת מזהי גרסה לעבוד עליהם.",
+ "api-pageset-param-generator": "קבלת רשימת דפים לעבוד עליהם על־ידי הרצת יחידת ה־query שצוינה.\n\n<strong>לתשומת לבך:</strong> לשמות בפרמטר generator צריכה להיות התחילית \"g\", ר' דוגמאות.",
+ "api-pageset-param-redirects-generator": "פתרון אוטומטי של הפניות ב־<var>$1titles</var>, ב־<var>$1pageids</var>, וב־<var>$1revids</var>, ובדפים שמחזיר <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "פתרון אוטומטי של הפניות ב־<var>$1titles</var>, ב־<var>$1pageids</var> וב־<var>$1pageids</var>.",
+ "api-pageset-param-converttitles": "המרת כותרות לסוגי כתב אחרים אם זה נחוץ. זה עובד רק אם שפת הכותרת של הוויקי תומכת בהמרת סוגי כתב. השפות שתומכות בהמרת סוגי כתב הן $1.",
+ "api-help-title": "עזרה של MediaWiki API",
+ "api-help-lead": "זהו דף תיעוד של API שנוצר באופן אוטומטי.\n\nתיעוד ודוגמאות: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "יחידה ראשית",
+ "api-help-undocumented-module": "אין תיעוד למודול $1.",
+ "api-help-flag-deprecated": "יחידה זו אינה מומלצת לשימוש.",
+ "api-help-flag-internal": "<strong>היחידה הזאת היא פנימית או בלתי־יציבה.</strong> הפעולה שלה יכולה להשתנות ללא הודעה מוקדמת.",
+ "api-help-flag-readrights": "יחידה זו דורשת הרשאות קריאה.",
+ "api-help-flag-writerights": "היחידה הזאת דורשת הרשאות כתיבה.",
+ "api-help-flag-mustbeposted": "יחידה זו מקבלת רק בקשות POST.",
+ "api-help-flag-generator": "אפשר להשתמש ביחידה הזאת בתור מחולל.",
+ "api-help-source": "מקור: $1",
+ "api-help-source-unknown": "מקור: <span class=\"apihelp-unknown\">לא ידוע</span>",
+ "api-help-license": "רישיון: <span dir=\"auto\">[[$1|$2]]</span>",
+ "api-help-license-noname": "רישיון: [[$1|ראו קישור]]",
+ "api-help-license-unknown": "רישיון: <span class=\"apihelp-unknown\">לא ידוע</span>",
+ "api-help-parameters": "{{PLURAL:$1|פרמטר|פרמטרים}}:",
+ "api-help-param-deprecated": "מיושן.",
+ "api-help-param-required": "פרמטר זה נדרש.",
+ "api-help-datatypes-header": "סוגי נתונים",
+ "api-help-datatypes": "קלט למדיה־ויקי צריך להיות בקידוד UTF-8 מנורמל ב־NFC. מדיה־ויקי יכולה לנסות להמיר קלט אחר, אבל זה עלול לגרום לפעולות מסוימות (כגון [[Special:ApiHelp/edit|עריכות]] עם בדיקות MD5) להיכשל.\n\nחלק מסוגי הפרמטרים בבקשות API דורשים הסבר נוסף:\n;בוליאני (boolean)\n:פרמטרים בוליאניים עובדים כמו תיבות סימון של HTML: אם הפרמטר צוין, בלי קשר לערך שלו, הוא אמת (true). בשביל ערך שקר (false), יש להשמיט את הפרמטר לגמרי.\n;חותם־זמן (timestamp)\n:אפשר לכתוב חותמי־זמן במספר תסדירים. תאריך ושעה לפי ISO 8601 הוא הדבר המומלת. כל הזמנים מצוינים ב־ UTC, לא תהיה השפעה לשום אזור זמן שיצוין.\n:* תאריך ושעה לפי ISO 8601‏, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (לא חובה לכתוב פיסוק ו־<kbd>Z</kbd>)\n:* תאריך ושעה לפי ISO 8601 עם חלקי שנייה (שלא תהיה להם שום השפעה), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (לא חובה לכתוב קווים מפרידים, נקודתיים ו־<kbd>Z</kbd>)\n:* תסדיר MediaWiki‏, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* תסדיר מספרי כללי, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (לאזור זמן אופציונלי של <kbd>GMT</kbd>‏, <kbd dir=\"ltr\">+<var>##</var></kbd>, או <kbd dir=\"ltr\">-<var>##</var></kbd> אין השפעה)\n:* תסדיר EXIF‏, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר RFC 2822 (אפשר להשמיט את אזור הזמן), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר RFC 850 (אפשר להשמיט את אזור הזמן), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר C ctime‏, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* שניות מאז 1970-01-01T00:00:00Z בתור מספר שלך בין 1 ל־13 (לא כולל <kbd>0</kbd>)\n:* המחרוזת <kbd>now</kbd>\n;מפריד ערכים מרובים חלופי\n:פרמטרים שלוקחים ערכים מרובים בדרך־כלל נשלחים עם הערכים מופרדים באמצעות תו מקל, למשל <kbd>param=value1|value2</kbd> או <kbd>param=value1%7Cvalue2</kbd>. אם הערך צריך להכיל את תו המקל, יש להשתמש ב־U+001F (מפריד יחידות) בתור המפריד ''וגם'' להוסיף לתחילת הערך U+001F, למשל <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+ "api-help-param-type-limit": "סוג: מספר שלם או <kbd>max</kbd>",
+ "api-help-param-type-integer": "סוג: {{PLURAL:$1|1=מספר שלם|2=רשימת מספרים שלמים}}",
+ "api-help-param-type-boolean": "סוג: בוליאני ([[Special:ApiHelp/main#main/datatypes|פרטים]])",
+ "api-help-param-type-timestamp": "סוג: {{PLURAL:$1|חותם־זמן|רשימת חותמי־זמן}} ([[Special:ApiHelp/main#main/datatypes|תסדירים מורשים]])",
+ "api-help-param-type-user": "סוג: {{PLURAL:$1|1=שם משתמש|2=רשימת שמות משתמשים}}",
+ "api-help-param-list": "{{PLURAL:$1|1=אחד מהערכים הבאים|2=ערכים (מופרדים באמצעות \"<kbd>{{!}}</kbd>\" או or [[Special:ApiHelp/main#main/datatypes|תו חלופי]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=חייב להיות ריק|יכול להיות ריק או $2}}",
+ "api-help-param-limit": "מספר הפרמטרים לא יכול להיות גדול מ־$1.",
+ "api-help-param-limit2": "המספר המרבי המותר הוא $1 (עבור בוטים – $2).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=הערך לא יכול להיות קטן|2=הערכים לא יכולים להיות קטנים}} מ־$2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=הערך לא יכול להיות גדול|2=הערכים לא יכולים להיות גדולים}} מ־$3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=הערך חייב|2=הערכים חייבים}} להיות בין $2 ל־$3.",
+ "api-help-param-upload": "חייב להישלח (posted) בתור העלאת קובץ באמצעות multipart/form-data.",
+ "api-help-param-multi-separate": "הפרדה בין ערכים נעשית באמצעות <kbd>|</kbd> או [[Special:ApiHelp/main#main/datatypes|תו חלופי]].",
+ "api-help-param-multi-max": "מספר הערכים המרבי הוא {{PLURAL:$1|$1}} (עבור בוטים – {{PLURAL:$2|$2}}).",
+ "api-help-param-multi-max-simple": "המספר המרבי של הערכים הוא {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "כדי לתת את כל הערכים, יש להשתמש ב־<kbd>$1</kbd>.",
+ "api-help-param-default": "ברירת מחדל: $1",
+ "api-help-param-default-empty": "ברירת מחדל: <span class=\"apihelp-empty\">(ריק)</span>",
+ "api-help-param-token": "אסימון \"$1\" שאוחזר מ־[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "לשם תאימות, גם האסימון שמשמש בממשק דפדפן מתקבל.",
+ "api-help-param-disabled-in-miser-mode": "כבוי בשל [[mw:Special:MyLanguage/Manual:$wgMiserMode|מצב חיסכון]].",
+ "api-help-param-limited-in-miser-mode": "<strong>לתשומת לבך:</strong> בשל [[mw:Special:MyLanguage/Manual:$wgMiserMode|מצב חיסכון]], שימוש בזה יכול להוביל לפחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים ייתכן שיחזרו אפס תוצאות.",
+ "api-help-param-direction": "באיזה כיוון למנות:\n;newer:לרשום את הישנים ביותר בהתחלה. לתשומת לבך: $1start חייב להיות לפני $1end.\n;older:לרשום את החדשים ביותר בהתחלה (בררת מחדל). לתשומת לבך: $1start חייב להיות אחרי $1end.",
+ "api-help-param-continue": "כשיש עוד תוצאות, להשתמש בזה בשביל להמשיך.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(ללא תיאור)</span>",
+ "api-help-param-maxbytes": "לא יכול להיות ארוך {{PLURAL:$1|מבית אחד|מ־$1 בתים}}.",
+ "api-help-param-maxchars": "לא יכול להיות ארוך {{PLURAL:$1|מתו אחד|מ־$1 תווים}}.",
+ "api-help-examples": "{{PLURAL:$1|דוגמה|דוגמאות}}:",
+ "api-help-permissions": "{{PLURAL:$1|הרשאה|הרשאות}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|הוענק ל|הוענקו ל}}: $2",
+ "api-help-right-apihighlimits": "להשתמש במגבלות גבוהות יותר בשאילתות API (שאילתות אטיות: $1; שאילתות מהירות: $2). המגבלות לשאילתות אטיות חלות גם על פרמטרים מרובי־ערכים.",
+ "api-help-open-in-apisandbox": "<small>[פתיחה בארגז חול]</small>",
+ "api-help-authmanager-general-usage": "הנוהל הכללי לשימוש במודול הזה הוא:\n# אחזור השדות הזמינים מ־<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> עם <kbd>amirequestsfor=$4</kbd> ואסימון <kbd>$5</kbd> מתוך <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# הצגת השדות למשתמש וקבלת אישור ממנו.\n# שליחה (Post) למודול הזה עם <var>$1returnurl</var> וכל השדות הרלוונטיים.\n# בדיקת ה־<samp>status</samp> בתשובה.\n#* אם קיבלת <samp>PASS</samp> או <samp>FAIL</samp>, זה הסיום. הפעולה שלך הצליחה או נכשלה.\n#* אם קיבלת <samp>UI</samp>, יש להציג את השדות החדשים למשתמש ולקבל את מה שהוא ישלח. אחר־כך יש לשלוח (post) למודול הזה עם <var>$1continue</var> ועם הגדרות של השדות הרלוונטיים ולחזור על צעד 4.\n#* אם קיבלת <samp>REDIRECT</samp>, יש להפנות את המשתמש ל־<samp>redirecttarget</samp> ולחכות לחזרה אל <var>$1returnurl</var>. אחר־כך לשלוח (post) למודול הזה עם <var>$1continue</var> ועם כל השדות שהועברו ל־URL שחוזרים אליו ולחזור על צעד 4.\n#* אם קיבלת <samp>RESTART</samp>, זה אומר שהאימות עבד אבל אין חשבון משתמש מקושר. באפשרותך לטפל בזה כמו ב־<samp>UI</samp> או ב־<samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "להשתמש רק בבקשות האימות האלו, מאת <samp>id</samp> שהוחזר מ־<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> עם <kbd>amirequestsfor=$1</kbd> או מתשובה קודמת למודול הזה.",
+ "api-help-authmanagerhelper-request": "להשתמש בבקשת האימות הזאת, מאת <samp>id</samp> שהוחזר מ־<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> עם <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "תסדיר לשימוש בהחזרת הודעות.",
+ "api-help-authmanagerhelper-mergerequestfields": "מיזוג מידע של שדות עבור כל בקשות האימות למערך אחד.",
+ "api-help-authmanagerhelper-preservestate": "שימור מצב מניסיון כניסה קודם, אם אפשר.",
+ "api-help-authmanagerhelper-returnurl": "כתובת URL לחזרה עם זרימות אימות צד־שלישי, חייב להיות מוחלט. נדרש או זה או <var>$1continue</var>.\n\nעם קבלת תשובת <samp>REDIRECT</samp>, בדרך־כלל תפתח דפדפן או תצוגת וב בכתובת ה־<samp>redirecttarget</samp> שצוינה בשביל זרימת אימות צד־שלישי. כשזה יושלם, הצד השלישי ישלח את הדפדפן או את תצוגת הווב לכתובת הזאת. יש לחלץ את כל הפרמטרים של שאילתה או בקשת POST מה־URL ולהעביר אותם בתור בקשת <var>$1continue</var> למודול ה־API הזה.",
+ "api-help-authmanagerhelper-continue": "הבקשה הזאת היא המשך אחרי תשובת <samp>UI</samp> או <samp>REDIRECT</samp> קודמת. נדרש זה או <var>$1returnurl</var>.",
+ "api-help-authmanagerhelper-additional-params": "המודול הזה מקבל פרמטרים נוספים בהתאם לבקשות אימות זמינות. יש להשתמש ב־<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> עם <kbd>amirequestsfor=$1</kbd> (או תגובה קודמת מהמודול הזה, אם זה זמין) כדי להבין מה הבקשות הזמינות ובאילו שדות הן משתמשות.",
+ "apierror-allimages-redirect": "יש להשתמש ב־<kbd>gaifilterredir=nonredirects</kbd> במקום ב־<var>redirects</var> בעת שימוש ב־<kbd>allimages</kbd> בתור מחולל.",
+ "apierror-allpages-generator-redirects": "יש להשתמש ב־<kbd>gaifilterredir=nonredirects</kbd> במקום ב־<var>redirects</var> בעת שימוש ב־<kbd>allpages</kbd> בתור מחולל.",
+ "apierror-appendnotsupported": "אי־אפשר להוסיף את זה לדפים שמשתמשים בדגם תוכן $1.",
+ "apierror-articleexists": "הערך שניסית ליצור כבר נוצר.",
+ "apierror-assertbotfailed": "הבדיקה שלמשתמש יש הרשאת <code>bot</code> נכשלה.",
+ "apierror-assertnameduserfailed": "הבדיקה שהמשתמש הוא \"$1\" נכשלה.",
+ "apierror-assertuserfailed": "הבדיקה שהמשתמש נכנס לחשבון נכשלה.",
+ "apierror-autoblocked": "כתובת ה־IP שלך נחסמה אוטומטית, כי היא שימשה משתמש חסום.",
+ "apierror-badconfig-resulttoosmall": "הערך של <code dir=\"ltr\">$wgAPIMaxResultSize</code> בוויקי הזה קטן מלהחזיק מידע בסיסי על תוצאה.",
+ "apierror-badcontinue": "פרמטר continue בלתי־תקין. יש להעביר את הערך המקורי שהחזירה השאילתה הקודמת.",
+ "apierror-baddiff": "לא ניתן לאחזר את ההשוואה. גרסה אחת לא קיימת או ששתיהן לא קיימות, או שאין לך הרשאה להציג אותן.",
+ "apierror-baddiffto": "יש להגדיר את <var>$1diffto</var> למספר שאינו שלילי, <kbd dir=\"ltr\">prev</kbd>, <kbd dir=\"ltr\">next</kbd> או <kbd dir=\"ltr\">cur</kbd>",
+ "apierror-badformat-generic": "התסדיר המבוקש $1 אינו נתמך במודל התוכן $2.",
+ "apierror-badformat": "התסדיר המבוקש $1 אינו נתמך במודל התוכן $2 שמשמש ב־$3.",
+ "apierror-badgenerator-notgenerator": "המודול <kbd>$1</kbd> אינו יכול לשמש כמחולל.",
+ "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> בלתי־ידוע.",
+ "apierror-badip": "הפרמטר IP אינו תקין.",
+ "apierror-badmd5": "גיבוב MD5 היה שגוי.",
+ "apierror-badmodule-badsubmodule": "למודול <kbd>$1</kbd> אין תת־מודול \"$2\".",
+ "apierror-badmodule-nosubmodules": "למודול <kbd>$1</kbd> אין תת־מודולים.",
+ "apierror-badparameter": "ערך בלתי־תקין לפרמטר <var>$1</var>.",
+ "apierror-badquery": "שאילתה בלתי־תקינה.",
+ "apierror-badtimestamp": "ערך בלתי־תקין \"$2\" לפרמטר חותם זמן <var>$1</var>.",
+ "apierror-badtoken": "אסימון CSRF בלתי־תקין.",
+ "apierror-badupload": "פרמטר העלאת הקובץ <var>$1</var> הוא לא העלאת קובץ; יש להקפיד להשתמש ב־<code>multipart/form-data</code> בשביל בקשת ה־POST שלך ולכלול שם קובץ בכותר <code>Content-Disposition</code>.",
+ "apierror-badurl": "ערך בלתי־תקין \"$2\" לפרמטר URL בשם <var>$1</var>.",
+ "apierror-baduser": "ערך בלתי־תקין \"$2\" לפרמטר משתמש בשם <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "הפרדת ערכים מרובים ב־U+001F אפשרית רק בפרמטרים מרובי־פרמטרים.",
+ "apierror-bad-watchlist-token": "סופק אסימון רשימת מעקב בלתי־תקין. נא להשתמש באסימון תקין ב־[[Special:Preferences]].",
+ "apierror-blockedfrommail": "נחסמת משליחת דוא״ל.",
+ "apierror-blocked": "נחסמת מעריכה.",
+ "apierror-botsnotsupported": "הממשק הזה לא נתמך עבור בוטים.",
+ "apierror-cannot-async-upload-file": "הפרמטרים <var>async</var> ו־<var>file</var> אינם יכולים להיות משולבים. אם ברצונך לבצע עיבוד אסינכרוני של הקובץ המועלה שלך, יש להעלות אותו תחילה לסליק (באמצעות הפרמטר <var>stash</var>) ואז לפרסם את הקובץ המוסלק באופן אסינכרוני (באמצעות <var>filekey</var> ו־<var>async</var>).",
+ "apierror-cannotreauthenticate": "הפעולה הזאת אינה זמינה, כי הזהות שלך לא יכולה להיות מאומתת.",
+ "apierror-cannotviewtitle": "אין לך הרשאה להציג את $1.",
+ "apierror-cantblock-email": "אין לך הרשאה לחסום משתמשים משליחת דואר אלקטרוני דרך הוויקי.",
+ "apierror-cantblock": "אין לך הרשאה לחסום משתמשים.",
+ "apierror-cantchangecontentmodel": "אין לך הרשאה לשנות את דגם התוכן של דף.",
+ "apierror-canthide": "אין לך הרשאה להסתיר שמות משתמשים ביומן החסימה.",
+ "apierror-cantimport-upload": "אין לך הרשאה לייבא דפים מוּעלים.",
+ "apierror-cantimport": "אין לך הרשאה לייבא דפים.",
+ "apierror-cantoverwrite-sharedfile": "קובץ היעד קיים במאגר משותף ואין לך הרשאה לעקוף אותו.",
+ "apierror-cantsend": "לא נכנסת לחשבון, אין לך חשבון דואר אלקטרוני מאושר, או שאסור לך לשלוח דואר אלקטרוני למשתמשים אחרים, אז אינך לך אפשרות לשלוח דואר אלקטרוני.",
+ "apierror-cantundelete": "לא היה אפשר לשחזר ממחיקה: אולי הגרסאות המבוקשות אינן קיימות, ואולי הן כבר נמחקו.",
+ "apierror-changeauth-norequest": "יצירת בקשת השינוי נכשלה.",
+ "apierror-chunk-too-small": "גודל הפלח המזערי הוא {{PLURAL:$1|בית אחד|$1 בתים}} בשביל פלחים לא סופיים.",
+ "apierror-cidrtoobroad": "טווחי CIDR של $1 שרחבים יותר מ־/$2 אינם קבילים.",
+ "apierror-compare-no-title": "לא ניתן לעשות התמרה לפני שמירה ללא כותרת. נא לנסות לציין <var>fromtitle</var> או <var>totitle</var>.",
+ "apierror-compare-relative-to-nothing": "אין גרסת \"from\" עבור <var>torelative</var> שתהיה יחסית.",
+ "apierror-contentserializationexception": "הסדרת התוכן נכשלה: $1",
+ "apierror-contenttoobig": "התוכן שסיפקת חורג מגודל הערך המרבי של {{PLURAL:$1|קילובייט אחד|$1 קילובייטים}}.",
+ "apierror-copyuploadbaddomain": "העלאות לפי URL אינם מורשות מהמתחם הזה.",
+ "apierror-copyuploadbadurl": "העלאה אינה מותרת מה־URL הזה.",
+ "apierror-create-titleexists": "כותרות קיימות אינם יכולות מוגנות עם <kbd>create</kbd>.",
+ "apierror-csp-report": "בעיבוד דו\"ח CSP אירעה שגיאה: $1",
+ "apierror-databaseerror": "[$1] שגיאת שאילתת מסד נתונים.",
+ "apierror-deletedrevs-param-not-1-2": "הפרמטר <var>$1</var> אינו יכול לשמש במצבים 1 או 2.",
+ "apierror-deletedrevs-param-not-3": "הפרמטר <var>$1</var> אינו יכול במצב 3.",
+ "apierror-emptynewsection": "יצירת פסקאות חדשות ריקות בלתי־אפשרי.",
+ "apierror-emptypage": "יצירת דפים חדשים ריקים אינו מותר.",
+ "apierror-exceptioncaught": "[$1] נתפס חריג: $2",
+ "apierror-filedoesnotexist": "הקובץ אינו קיים.",
+ "apierror-fileexists-sharedrepo-perm": "קובץ היעד קיים במאגר משותף. יש להשתמש בפרמטר <var>ignorewarnings</var> כדי לעקוף אותו.",
+ "apierror-filenopath": "לא ניתן לקבל נתיב לקובץ מקומי.",
+ "apierror-filetypecannotberotated": "לא ניתן לסובב את סוג הקובץ הזה.",
+ "apierror-formatphp": "התשובה הזאת לא יכולה להיות מיוצגת עם <kbd>format=php</kbd>. ר' https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "הכותרת בשביל <kbd>$1</kbd> צריכה להיות קובץ.",
+ "apierror-import-unknownerror": "שגיאה בלתי־ידועה בייצוא: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> אינו יכול להיות גדול מ־$2 (עכשיו מוגדר $3) עבור בוטים או מפעילים.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> אינו יכול להיות גדול מ־$2 (עכשיו מוגדר $3) עבור משתמשים.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> אינו יכול להיות גדול מ־$2 (עכשיו מוגדר $3).",
+ "apierror-invalidcategory": "שם הקטגוריה שהזנת אינו תקין.",
+ "apierror-invalid-chunk": "ההיסט בתוספת הפלח הנוכחי גדולים מגודל הקובץ כפי שנטען.",
+ "apierror-invalidexpiry": "זמן תפוגה בלתי־תקין \"$1\".",
+ "apierror-invalid-file-key": "לא מפתח קובץ תקין.",
+ "apierror-invalidlang": "קוד שפה בלתי־תקין לפרמטר <var>$1</var>.",
+ "apierror-invalidoldimage": "הפרמטר <var>oldimage</var> נשלח בתסדיר בלתי־תקין.",
+ "apierror-invalidparammix-cannotusewith": "הפרמטר <kbd>$1</kbd> אינו יכול לשמש עם <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "הפרמטר <kbd>$1</kbd> יכול לשמש רק עם <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "לא ניתן לשלב את <kbd>section=new</kbd> עם הפרמטרים <var>oldid</var>‏, <var>pageid</var> או <var>page</var>. נא להשתמש ב־<var>title</var> ו־<var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|הפרמטרים}} $1 אינם יכולים לשמש יחדיו.",
+ "apierror-invalidsection": "הפרמטר <var>section</var> להיות מזהה מקטע תקין או <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "גיבוב ה־SHA1Base36 שסופק אינו תקין.",
+ "apierror-invalidsha1hash": "גיבוב ה־SHA1 שסופק אינו תקין.",
+ "apierror-invalidtitle": "כותרת רעה \"$1\".",
+ "apierror-invalidurlparam": "ערך בלתי־תקין עבור <var>$1urlparam</var> (ערך: <kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "שם משתמש בלתי־תקין \"$1\".",
+ "apierror-invaliduserid": "מזהה המשתמש <var>$1</var> אינו תקין.",
+ "apierror-maxlag-generic": "ממתין לשרת מסד נתונים: עיכוב של {{PLURAL:$1|שנייה אחת|$1 שניות}}.",
+ "apierror-maxlag": "ממתין ל־$2: שיהוי של {{PLURAL:$1|שנייה אחת|$1 שניות}}.",
+ "apierror-mimesearchdisabled": "חיפוש MIME כבוי במצב קמצן.",
+ "apierror-missingcontent-pageid": "תוכן חסר עבור מזהה הדף $1.",
+ "apierror-missingcontent-revid": "תוכן חסר עבור מזהה הגרסה $1.",
+ "apierror-missingparam-at-least-one-of": "דרוש {{PLURAL:$2|הפרמטר|לפחות אחד מהפרמטרים}} $1.",
+ "apierror-missingparam-one-of": "דרוש {{PLURAL:$2|הפרמטר|אחד מהפרמטרים}} $1.",
+ "apierror-missingparam": "הפרמטר <var>$1</var> צריך להיות מוגדר.",
+ "apierror-missingrev-pageid": "אין גרסה נוכחית של דף עם המזהה $1.",
+ "apierror-missingrev-title": "אין גרסה נוכחית לכותרת $1.",
+ "apierror-missingtitle-createonly": "כותרות חסרות יכולות להיות מוגנות עם <kbd>create</kbd>.",
+ "apierror-missingtitle": "הדף שנתת אינו קיים.",
+ "apierror-missingtitle-byname": "הדף $1 אינו קיים.",
+ "apierror-moduledisabled": "המודול <kbd>$1</kbd> כובה.",
+ "apierror-multival-only-one-of": "{{PLURAL:$3|רק הערך|רק אחד מתוך הערכים}} $2 מותר עבור הפרמטר <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> יכול לשמש רק בדף בודד.",
+ "apierror-mustbeloggedin-changeauth": "יש להיכנס לחשבון כדי לשנות נתוני אימות.",
+ "apierror-mustbeloggedin-generic": "חובה להיכנס.",
+ "apierror-mustbeloggedin-linkaccounts": "חובה להיכנס לחשבון כדי לקשר חשבונות.",
+ "apierror-mustbeloggedin-removeauth": "חובה להיכנס לחשבון כדי להסיר מידע אימות.",
+ "apierror-mustbeloggedin-uploadstash": "סליק ההעלאה זמין רק למשתמשים שנכנסו לחשבון.",
+ "apierror-mustbeloggedin": "חובה להיכנס לחשבון כדי $1.",
+ "apierror-mustbeposted": "המודול <kbd>$1</kbd> דורש בקשת POST.",
+ "apierror-mustpostparams": "{{PLURAL:$2|הפרמטר הבא|הפרמטרים הבאים}} נמצאו במחרוזת השאילתה, אבל חייבים להיות ב־POST בגוף: $1.",
+ "apierror-noapiwrite": "עריכת הוויקי הזה דרך ה־API כובתה. נא לוודא שהמשפט <code dir=\"ltr\">$wgEnableWriteAPI=true;</code> כלול בקובץ <code>LocalSettings.php</code> של הוויקי.",
+ "apierror-nochanges": "לא התבקשו שינויים.",
+ "apierror-nodeleteablefile": "אין גרסה ישנה כזאת של הקובץ.",
+ "apierror-no-direct-editing": "עריכה ישירה דרך ה־API אינה נתמכת עבור דגם התוכן $1 שמשמש ב{{GRAMMAR:תחילית|$2}}.",
+ "apierror-noedit-anon": "משתמשים אלמוניים אינם יכולים לערוך דפים.",
+ "apierror-noedit": "אין לך הרשאה לערוך דפים.",
+ "apierror-noimageredirect-anon": "משתמשים אלמוניים אינם יכולים ליצור הפניות לתמונות.",
+ "apierror-noimageredirect": "אין לך הרשאה ליצור הפניות לתמונות.",
+ "apierror-nosuchlogid": "אין רשומה ביומן עם המזהה $1.",
+ "apierror-nosuchpageid": "אין דף עם המזהה $1.",
+ "apierror-nosuchrcid": "לא נעשה לאחרונה שינוי עם המזהה $1.",
+ "apierror-nosuchrevid": "אין גרסה עם המזהה $1.",
+ "apierror-nosuchsection": "לא קיים מקטע $1.",
+ "apierror-nosuchsection-what": "אין מקטע $1 ב{{GRAMMAR:תחילית|$2}}.",
+ "apierror-nosuchuserid": "אין משתמש עם המזהה $1.",
+ "apierror-notarget": "לא נתת יעד תקין לפעולה הזאת.",
+ "apierror-notpatrollable": "לא ניתן לנטר את הגרסה $1 כי היא ישנה מדי.",
+ "apierror-nouploadmodule": "לא הוגדר מודול העלאה.",
+ "apierror-offline": "לא היה אפשר להמשיך בשל בעיות חיבור רשת. נא לוודא שיש לך חיבור אינטרנט פועל ולנסות שוב.",
+ "apierror-opensearch-json-warnings": "לא ניתן לייצג את האזהרות בתסדיר JSON של OpenSearch.",
+ "apierror-pagecannotexist": "מרחב השם אינו מתיר דפים אמתיים.",
+ "apierror-pagedeleted": "הדף הזה נמחק מאז שאחזרת את חותם הזמן שלו.",
+ "apierror-pagelang-disabled": "שינוי שפת הדף אסור בוויקי הזה.",
+ "apierror-paramempty": "הפרמטר <var>$1</var> אינו יכול להיות ריק.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> נתמך רק בתוכן קוד ויקי (wikitext).",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> נתמך רק בתוכן קוד ויקי (wikitext). $1 משתמש במודל התוכן $2.",
+ "apierror-pastexpiry": "זמן התפוגה \"$1\" בעבר.",
+ "apierror-permissiondenied": "אין לך הרשאה $1.",
+ "apierror-permissiondenied-generic": "ההרשאה נדחתה.",
+ "apierror-permissiondenied-patrolflag": "עליך להחזיק בהרשאות <code>patrol</code> או <code>patrolmarks</code> כדי לבקש דגל מנוטר.",
+ "apierror-permissiondenied-unblock": "אין לך הרשאה לשחרר חסימה של משתמשים.",
+ "apierror-prefixsearchdisabled": "חיפוש תחילית כבוי במצב קמצן.",
+ "apierror-promised-nonwrite-api": "כותר <code>Promise-Non-Write-API-Action</code> של HTTP אינו יכול להישלח למודולי API שפועלים במצב כתיבה.",
+ "apierror-protect-invalidaction": "סוג הגנה בלתי־תקין \"$1\".",
+ "apierror-protect-invalidlevel": "קמת הגנה בלתי־תקינה \"$1\".",
+ "apierror-ratelimited": "עברת את מכסת הקצב שלך. נא להמתין זמן־מה ונסות שוב.",
+ "apierror-readapidenied": "יש צורך בהרשאת קריאה כדי להשתמש במודול הזה.",
+ "apierror-readonly": "הוויקי הזה במצב לקריאה בלבד עכשיו.",
+ "apierror-reauthenticate": "לא עברת אימות לאחרונה בשיחה הזאת, נא להתאמת מחדש.",
+ "apierror-redirect-appendonly": "ניסית לערוך במצב מעבר־אחר־הפניות (redirect-following), שצריך לשמש יחד עם <kbd>section=new</kbd>‏, <var>prependtext</var>, או <var>appendtext</var>.",
+ "apierror-revdel-mutuallyexclusive": "אותו השדה אינו יכול לשמש עם <var>hide</var> ועם <var>show</var>.",
+ "apierror-revdel-needtarget": "כותרת יעד נחוצה בשביל סוג ה־RevDel הזה.",
+ "apierror-revdel-paramneeded": "לפחות ערך אחד נחוץ בשביל <var>hide</var> או <var>show</var>.",
+ "apierror-revisions-badid": "לא נמצאה גרסה לפרמטר <var>$1</var>.",
+ "apierror-revisions-norevids": "הפרמטר <var>revids</var> אינו יכול לשמש עם אפשרויות הרשימה (<var>$1limit</var>‏, <var>$1startid</var>‏, <var>$1endid</var>‏, <kbd>$1dir=newer</kbd>‏, <var>$1user</var>‏, <var>$1excludeuser</var>‏, <var>$1start</var>, ו־<var>$1end</var>).",
+ "apierror-revisions-singlepage": "<var>titles</var>‏, <var>pageids</var> או מחולל שימשו לאספקת דפים מרובים, אבל הפרמטרים <var>$1limit</var>‏, <var>$1startid</var>‏, <var>$1endid</var>‏, <kbd>$1dir=newer</kbd>‏, <var>$1user</var>‏, <var>$1excludeuser</var>‏, <var>$1start</var>, ו־<var>$1end</var> יכולים לשמש רק בדף בודד.",
+ "apierror-revwrongpage": "הגרסה $1 אינה גרסה של $2.",
+ "apierror-searchdisabled": "חיפוש <var>$1</var> כבוי.",
+ "apierror-sectionreplacefailed": "לא היה אפשר למזג את המקטע המעודכן.",
+ "apierror-sectionsnotsupported": "מקטעים אינם נתמכים במודל התוכן $1.",
+ "apierror-sectionsnotsupported-what": "מקטעים אינם נתמכים ב־$1.",
+ "apierror-show": "פרמטר לא נכון – אי־אפשר לספק ערכים שמבטלים זה את זה.",
+ "apierror-siteinfo-includealldenied": "לא ניתן להציג את המידע של כל השרתים אלא אם <var dir=\"ltr\">$wgShowHostNames</var> מוגדר להיות true.",
+ "apierror-sizediffdisabled": "ההבדל בגודל כבוי במצב קמצן.",
+ "apierror-spamdetected": "העריכה שלך סורבה כי הכילה חלק ספאם: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "אין לך הרשאה להציג את התוצאות של הדף המיוחד הזה.",
+ "apierror-stashedfilenotfound": "לא היה אפשר למצור את הקובץ בסליק: $1.",
+ "apierror-stashedit-missingtext": "לא נמצא טקסט מוסלק עם הגיבוב שניתן.",
+ "apierror-stashfailed-complete": "העלאה מפולחת הושלמה, יש לבדוק את המצב בשביל לראות פרטים.",
+ "apierror-stashfailed-nosession": "אין שיחת העלאה מפולחת עם המפתח הזה.",
+ "apierror-stashfilestorage": "לא היה אפשר לאחסן את ההעלאה בסליק: $1",
+ "apierror-stashinvalidfile": "קובץ מוסלק בלתי־תקין.",
+ "apierror-stashnosuchfilekey": "אין מפתח קובץ כזה: $1.",
+ "apierror-stashpathinvalid": "מפתח קובץ מתסדיר בלתי־הולם או בלתי־תקין באופן אחר: $1.",
+ "apierror-stashwrongowner": "בעלים בלתי־תקין: $1",
+ "apierror-stashzerolength": "קובץ באורך אפס, ואל יכול משוחזר בסליק: $1.",
+ "apierror-systemblocked": "נחסמת אוטומטית על־ידי מדיה־ויקי.",
+ "apierror-templateexpansion-notwikitext": "הרחבת תבניות נתמכת רק בתוכן קוד ויקי (wikitext). $1 משתמש במודל התוכן $2.",
+ "apierror-timeout": "השרת לא השיב בזמן המצופה.",
+ "apierror-toofewexpiries": "{{PLURAL:$1|ניתן חותם זמן תפוגה אחד|ניתנו $1 חותמי זמן תפוגה}} כאשר {{PLURAL:$2|היה נחוץ אחד|היו נחוצים $1}}.",
+ "apierror-unknownaction": "הפעולה שניתנה, <kbd>$1</kbd>, אינה מוכרת.",
+ "apierror-unknownerror-editpage": "שגיאת EditPage בלתי־ידועה: $1.",
+ "apierror-unknownerror-nocode": "שגיאה בלתי־ידועה.",
+ "apierror-unknownerror": "שגיאה בלתי ידועה: \"$1\".",
+ "apierror-unknownformat": "תסדיר בלתי־ידוע \"$1\".",
+ "apierror-unrecognizedparams": "{{PLURAL:$2|פרמטר בלתי־מוכר|פרמטרים בלתי־מוכרים}}: $1.",
+ "apierror-unrecognizedvalue": "לפרמטר <var>$1</var> יש ערך בלתי־מוכר: $2.",
+ "apierror-unsupportedrepo": "מאגר קבצים מקומי אינו תומך בשאילתה לכל התמונות.",
+ "apierror-upload-filekeyneeded": "חובה לספק <var>filekey</var> כאשר <var>offset</var> אינו אפס.",
+ "apierror-upload-filekeynotallowed": "לא ניתן לספק <var>filekey</var> כאשר <var>offset</var> הוא 0.",
+ "apierror-upload-inprogress": "העלאה מתוך סליק כבר התחילה.",
+ "apierror-upload-missingresult": "אין תוצאות בנתוני מצב.",
+ "apierror-urlparamnormal": "לא היה אפשר לנרמל את פרמטרי התמונה עבור $1.",
+ "apierror-writeapidenied": "אין לך הרשאה לערוך את הוויקי הזה דרך ה־API.",
+ "apiwarn-alldeletedrevisions-performance": "לביצועים טובים יותר בעת יצירת כותרת, יש להשתמש ב־<kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "לא היה אפשר לפענח את <var>$1urlparam</var> עבור $2. משתמשים רק ב־width ו־height.",
+ "apiwarn-badutf8": "הערך הערך שהועבר ל־<var>$1</var> מכיל נתונים בלתי־תקינים או בלתי־מנורמלים. נתונים טקסט אמורים להיות תקינים, מנורמלי NFC ללא תווי בקרה C0 למעט HT (\\t)‏, LF (\\n), ו־CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "נא לבדוק שסימנים כמו \"+\" באסימון מקודדים עם אחוזים בצורה נכונה ב־URL.",
+ "apiwarn-compare-nocontentmodel": "לא היה אפשר לקבוע את מודל התוכן, נניח שזה $1.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> הוצהר בתור מיושן. נא להשתמש ב־ <kbd>prop=deletedrevisions</kbd> או ב־<kbd>list=alldeletedrevisions</kbd> במקום זה.",
+ "apiwarn-deprecation-expandtemplates-prop": "מכיוון שלא ניתנו ערכים לפרמטר <var>prop</var>, תסדיר מיושן ישמש לפלט. התסדיר הזה מיושן, ובעתיד יינתן ערך בררת מחדל לפרמטר <var>prop</var>, כך שתמיד ישמש התסדיר החדש.",
+ "apiwarn-deprecation-httpsexpected": "משמש HTTP כשהיה צפוי HTTPS.",
+ "apiwarn-deprecation-login-botpw": "כניסה לחשבון עיקרי (main-account) דרך <kbd>action=login</kbd> מיושנת ועלולה להפסיק לעבוד ללא אזהרה נוספת. כדי להמשיך להיכנס עם <kbd>action=login</kbd>, ר' [[Special:BotPasswords]]. כדי להמשיך באופן מאובטח באמצעות חשבון עיקרי, ר' <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "כניסה בחשבון ראשי עם <kbd>action=login</kbd> מיושנת ויכולה להפסיק לעבוד ללא אזהרה. כדי להיכנס באופן מאובטח, ר' <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "אחזור אסימון דרך <kbd>action=login</kbd> מיושן. נא להשתמש ב־<kbd>action=query&meta=tokens&type=login</kbd> במקום זה.",
+ "apiwarn-deprecation-parameter": "הפרמטר <var>$1</var> מיושן.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> מיושן מאז מדיה־ויקי 1.28. יש להשתמש ב־<kbd>prop=headhtml</kbd> בעת יצירת מסמכי HTML חדשים, או ב־<kbd>prop=modules|jsconfigvars</kbd> בעת עדכון מסמך בצד הלקוח.",
+ "apiwarn-deprecation-purge-get": "שימוש ב־<kbd>action=purge</kbd> דרך GET מיושן. יש להשתמש ב־POST במקום זה.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> מיושן. יש להשתמש ב־<kbd>$2</kbd> במקום זה.",
+ "apiwarn-difftohidden": "לא היה אפשר לעשות השוואה עם גרסה $1: התוכן מוסתר.",
+ "apiwarn-errorprinterfailed": "מדפיס השגיאות לא עבד. ינסה שוב ללא פרמטרים.",
+ "apiwarn-errorprinterfailed-ex": "מדפיס השגיאות לא עבד (ינסה שוב ללא פרמטרים): $1",
+ "apiwarn-invalidcategory": "\"$1\" אינה קטגוריה.",
+ "apiwarn-invalidtitle": "\"$1\" אינה כותרת תקינה.",
+ "apiwarn-invalidxmlstylesheetext": "לגיליון הסגנונות אמור להיות הסיומת <code dir=\"ltr\">.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "ניתן גיליון סגנונות שאינו תקין או אינו קיים.",
+ "apiwarn-invalidxmlstylesheetns": "גיליון הסגנונות אמור להיות במרחב השם {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "המאפיין <kbd>modules</kbd> לא הוגדר, אבל לא <kbd>jsconfigvars</kbd> או <kbd>encodedjsconfigvars</kbd>. משתני הגדרות נחוצים בשביל שימוש נכון במודולים.",
+ "apiwarn-notfile": "\"$1\" אינו קובץ.",
+ "apiwarn-nothumb-noimagehandler": "לא היה אפשר ליצור תמונה ממוזערת כי לקובץ $1 לא משויך מטפל תמונה.",
+ "apiwarn-parse-nocontentmodel": "לא ניתן <var>title</var> או <var>contentmodel</var>, נניח שזה $1.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var> משמש ללא <var>text</var>, והתבקשו מאפייני דף. האם התכוונת להשתמש ב־<var>oldid</var> במקום <var>revid</var>?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> שימש ללא <var>text</var>, והתבקשו מאפייני דף מפוענח. האם התכוונת להשתמש ב־<var>page</var> במקום <var>title</var>?",
+ "apiwarn-redirectsandrevids": "פתרון הפניות לא יכול לשמש יחד עם הפרמטר <var>revids</var>. הפניות ש־<var>revids</var> מצביע אליהן לא נפתרו.",
+ "apiwarn-tokennotallowed": "הפעולה \"$1\" אינה מותרת למשתמש הנוכחי.",
+ "apiwarn-tokens-origin": "לא ניתן לקבל אסימונים כשמדיניות המקור הזהה אינה חלה.",
+ "apiwarn-toomanyvalues": "יותר מדי ערכים סופקו לפרמטר <var>$1</var>. המגבלה היא $2.",
+ "apiwarn-truncatedresult": "התוצאה נחתכה כי אחרת היא הייתה ארוכה מהמגבלה של $1 בתים.",
+ "apiwarn-unclearnowtimestamp": "העברת \"$2\" בתור פרמטר חותם־זמן <var>$1</var> הוצהרה בתור מיושנת. אם מסיבה כלשהי אתם צריכים להגדיר במפורש את הזמן הנוכחי ללא חישובו בצד הלקוח, יש להשתמש ב־<kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "לפרמטר <var>$1</var> היתנ ג{{PLURAL:$3|ניתן ערך בלתי־ידוע|ניתנו ערכים בלתי־ידועים}}: $2.",
+ "apiwarn-unsupportedarray": "הפרמטר <var>$1</var> משתמש בתחביר מערכים שאינו נתמך ב־PHP.",
+ "apiwarn-urlparamwidth": "התעלמות מרוחב (width) שהוגדר ב־<var>$1urlparam</var> (ערך: $2) לטובת רוחב שנגזר מ־<var>$1urlwidth</var>/<var>$1urlheight</var> (ערך: $3).",
+ "apiwarn-validationfailed-badchars": "תווים בלתי־תקינים במפתח (מותרים רק <code>a-z</code>‏, <code>A-Z</code>‏, <code>0-9</code>‏, <code>_</code>, ו־<code>-</code>).",
+ "apiwarn-validationfailed-badpref": "לא העדפה תקינה.",
+ "apiwarn-validationfailed-cannotset": "לא יכולה להיות מוגדרת על־ידי המודול הזה.",
+ "apiwarn-validationfailed-keytoolong": "המפתח ארוך מדי (מותר לכתוב לא יותר מ־$1 בתים).",
+ "apiwarn-validationfailed": "שגיאה בבדיקת תקינות עבור <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>אזהרת אבטחה</strong>: <var dir=\"ltr\">$wgDebugAPI</var> מופעל.",
+ "api-feed-error-title": "שגיאה ($1)",
+ "api-usage-docref": "ר' $1 לשימוש ב־API.",
+ "api-usage-mailinglist-ref": "עשו מינוי לרשימת התפוצה mediawiki-api-announce בכתובת &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; בשביל הודעות על התיישנות API ושינויים שוברים.",
+ "api-exception-trace": "$1 בקובץ $2 (שורה $3)\n$4",
+ "api-credits-header": "קרדיטים",
+ "api-credits": "מפתחי ה־API:\n* רואן קטאו (מפתח מוביל 2007–2009)\n* ויקטור וסילייב\n* בריאן טונג מין\n* סאם ריד\n* יורי אסטרחן (יוצר, מפתח מוביל מספטמבר 2006 עד ספטמבר 2007)\n* בראד יורש (מפתח מוביל מאז 2013)\n\nאנא שלחו הערות, הצעות ושאלות לכתובת mediawiki-api@lists.wikimedia.org או כתבו דיווח באג באתר https://phabricator.wikimedia.org."
+}
diff --git a/www/wiki/includes/api/i18n/hr.json b/www/wiki/includes/api/i18n/hr.json
new file mode 100644
index 00000000..2273ee9d
--- /dev/null
+++ b/www/wiki/includes/api/i18n/hr.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ex13"
+ ]
+ },
+ "apihelp-block-summary": "Blokiraj suradnika.",
+ "apihelp-block-param-user": "Suradničko ime, IP adresa ili opseg koje želite blokirati."
+}
diff --git a/www/wiki/includes/api/i18n/hsb.json b/www/wiki/includes/api/i18n/hsb.json
new file mode 100644
index 00000000..b25ae9b2
--- /dev/null
+++ b/www/wiki/includes/api/i18n/hsb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "J budissin"
+ ]
+ },
+ "apihelp-main-param-format": "Wudawanski format"
+}
diff --git a/www/wiki/includes/api/i18n/hsn.json b/www/wiki/includes/api/i18n/hsn.json
new file mode 100644
index 00000000..a646923a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/hsn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "SolidBlock"
+ ]
+ },
+ "apihelp-main-param-action": "要搞得操作。",
+ "apihelp-main-param-format": "出的格式。"
+}
diff --git a/www/wiki/includes/api/i18n/ht.json b/www/wiki/includes/api/i18n/ht.json
new file mode 100644
index 00000000..dee39e13
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ht.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bfpage"
+ ]
+ },
+ "apihelp-query-param-rawcontinue": "Bay tounen done anvan tout koreksyon <samp>query-continue</samp> pou kontinyasyon"
+}
diff --git a/www/wiki/includes/api/i18n/hu.json b/www/wiki/includes/api/i18n/hu.json
new file mode 100644
index 00000000..4451f194
--- /dev/null
+++ b/www/wiki/includes/api/i18n/hu.json
@@ -0,0 +1,1167 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csega",
+ "Dorgan",
+ "Tacsipacsi",
+ "ViDam",
+ "Macofe",
+ "Wolf Rex",
+ "Dj"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentáció]]\n* [[mw:Special:MyLanguage/API:FAQ|GYIK]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Levelezőlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-bejelentések]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Hibabejelentések és kérések]\n</div>\n<strong>Státusz:</strong> Minden ezen a lapon látható funkciónak működnie kell, de az API jelenleg is aktív fejlesztés alatt áll, és bármikor változhat. Iratkozz fel a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce levelezőlistára] a frissítések követéséhez.\n\n<strong>Hibás kérések:</strong> Ha az API hibás kérést kap, egy HTTP-fejlécet küld vissza „MediaWiki-API-Error” kulccsal, és a fejléc értéke és a visszaküldött hibakód ugyanarra az értékre lesz állítva. További információért lásd: [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Hibák és figyelmeztetések]].\n\n<p class=\"mw-apisandbox-link\"><strong>Tesztelés:</strong> Az API-kérések könnyebb teszteléséhez használható az [[Special:ApiSandbox|API-homokozó]].</p>",
+ "apihelp-main-param-action": "Milyen műveletet hajtson végre.",
+ "apihelp-main-param-format": "A kimenet formátuma.",
+ "apihelp-main-param-smaxage": "Az <code>s-maxage</code> gyorsítótár-vezérlő HTTP-fejléc beállítása ennyi másodpercre. A hibák soha nincsenek gyorsítótárazva.",
+ "apihelp-main-param-maxage": "Az <code>maxage</code> gyorsítótár-vezérlő HTTP-fejléc beállítása ennyi másodpercre. A hibák soha nincsenek gyorsítótárazva.",
+ "apihelp-main-param-assert": "Annak ellenőrzése, hogy a felhasználó be van-e jelentkezve <kbd>user</kbd> érték esetén, vagy botjog ellenőrzése <kbd>bot</kbd> érték esetén.",
+ "apihelp-main-param-assertuser": "Annak ellenőrzése, hogy a jelenlegi felhasználó a megadott-e.",
+ "apihelp-main-param-requestid": "Az itt megadott bármilyen érték szerepelni fog a válaszban. Több kérés megkülönböztetésére használható.",
+ "apihelp-main-param-servedby": "Tartalmazza a válasz kérést kiszolgáló gép nevét.",
+ "apihelp-main-param-curtimestamp": "Tartalmazza a válasz az aktuális időbélyeget.",
+ "apihelp-main-param-responselanginfo": "A válasz tartalmazza <var>uselang</var> és <var>errorlang</var> paraméterekben használt nyelveket.",
+ "apihelp-main-param-uselang": "Az üzenetfordításokhoz használandó nyelv. A <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> a <kbd>siprop=languages</kbd> paraméterrel visszaadja a lehetséges nyelvkódok listáját, vagy <kbd>user</kbd> az aktuális felhasználó, illetve <kbd>content</kbd> a wiki nyelvbeállításához.",
+ "apihelp-main-param-errorformat": "A figyelmeztetések és hibaüzenetek formátuma.\n; plaintext: Wikiszöveg eltávolított HTML-címkékkel és a HTML-entitások (pl. &amp;amp;) kicserélésével.\n; wikitext: Feldolgozatlan wikiszöveg.\n; html: HTML.\n; raw: Az üzenet azonosítója és paraméterei.\n; none: Szöveges kimenet mellőzése, csak hibakódok.\n; bc: A MediaWiki 1.29 előtti formátum. A <var>errorlang</var> és <var> erroruselocal</var> paraméterek figyelmen kívül lesznek hagyva.",
+ "apihelp-main-param-errorlang": "A figyelmeztetésekhez és hibaüzenetekhez használandó nyelv. A <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> a <kbd>siprop=languages</kbd> paraméterrel visszaadja a lehetséges nyelvkódok listáját, vagy <kbd>content</kbd> a wiki nyelvbeállításához, illetve <kbd>uselang</kbd> a <var>uselang</var> paraméter értékéhez.",
+ "apihelp-main-param-errorsuselocal": "Ha meg van adva, a hibaüzenetek a helyileg testreszabott üzeneteket fogják használni a {{ns:MediaWiki}} névtérből.",
+ "apihelp-block-summary": "Szerkesztő blokkolása",
+ "apihelp-block-param-user": "Blokkolandó felhasználónév, IP-cím vagy IP-címtartomány. Nem használható együtt a <var>$1userid</var> paraméterrel.",
+ "apihelp-block-param-userid": "A blokkolandó felhasználó numerikus azonosítója. Nem használható a <var>$1user</var> paraméterrel együtt.",
+ "apihelp-block-param-expiry": "Lejárat ideje. Lehet relatív (pl. <kbd>5 months</kbd>, <kbd>2 weeks</kbd>) vagy abszolút (pl. <kbd>2014-09-18T12:34:56Z</kbd>). Ha <kbd>infinite</kbd>-re, <kbd>indefinite</kbd>-re vagy <kbd>never</kbd>-re állítod, a blokk soha nem fog lejárni.",
+ "apihelp-block-param-reason": "Blokkolás oka.",
+ "apihelp-block-param-anononly": "Csak anonim felhasználók blokkolása (anonim szerkesztések megakadályozása erről az IP-címről).",
+ "apihelp-block-param-nocreate": "Új regisztráció megakadályozása",
+ "apihelp-block-param-autoblock": "Az utoljára használt IP-cím blokkolása, valamint bármilyen további IP-cím, amiről a felhasználó megpróbál bejelentkezni.",
+ "apihelp-block-param-noemail": "A wiki e-mail-küldő rendszerének letiltása a felhasználó számára (<code>blockemail</code> jogosultság szükséges hozzá).",
+ "apihelp-block-param-hidename": "A felhasználónév elrejtése a blokknaplóból (<code>hideuser</code> jog szükséges hozzá).",
+ "apihelp-block-param-allowusertalk": "A felhasználó szerkeszthesse a saját vitalapját (a <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> beállítástól függ).",
+ "apihelp-block-param-reblock": "Jelenlegi blokk felülírása, ha a felhasználó már blokkolva van.",
+ "apihelp-block-param-watchuser": "A szerkesztő vagy IP-cím szerkesztői- és vitalapjának figyelése.",
+ "apihelp-block-example-ip-simple": "A <kbd>192.0.2.5</kbd> IP-cím blokkolása három napra <kbd>First strike</kbd> indoklással.",
+ "apihelp-block-example-user-complex": "<kbd>Vandal</kbd> blokkolása határozatlan időre <kbd>Vandalism</kbd> indoklással, új fiók létrehozásának és e-mail küldésének megakadályozása.",
+ "apihelp-checktoken-summary": "Egy <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> kéréssel szerzett token érvényességének vizsgálata.",
+ "apihelp-checktoken-param-type": "A tesztelendő token típusa.",
+ "apihelp-checktoken-param-token": "A tesztelendő token.",
+ "apihelp-checktoken-param-maxtokenage": "A token megengedett legnagyobb kora másodpercekben.",
+ "apihelp-checktoken-example-simple": "Egy <kbd>csrf</kbd> token érvényességének vizsgálata.",
+ "apihelp-clearhasmsg-summary": "A <code>hasmsg</code> jelzés törlése az aktuális felhasználónak.",
+ "apihelp-clearhasmsg-example-1": "A <code>hasmsg</code> jelzés törlése az aktuális felhasználónak.",
+ "apihelp-clientlogin-example-login": "A bejelentkezési folyamat elkezdése <kbd>Example</kbd> felhasználónévvel és <kbd>ExamplePassword</kbd> jelszóval.",
+ "apihelp-clientlogin-example-login2": "A bejelentkezés folytatása <samp>UI</samp> válasz után a kétlépcsős azonosításra, az <var>OATHToken</var> paraméternek <kbd>987654</kbd> értéket megadva.",
+ "apihelp-compare-summary": "Két lap közötti különbség kiszámítása.",
+ "apihelp-compare-extended-description": "Mindkét laphoz kötelező megadni egy lapváltozat-azonosítót, címet vagy lapazonosítót.",
+ "apihelp-compare-param-fromtitle": "Az első összehasonlítandó lap címe.",
+ "apihelp-compare-param-fromid": "Az első összehasonlítandó lap lapazonosítója.",
+ "apihelp-compare-param-fromrev": "Az első összehasonlítandó lapváltozat azonosítója.",
+ "apihelp-compare-param-totitle": "A második összehasonlítandó lap címe.",
+ "apihelp-compare-param-toid": "A második összehasonlítandó lap lapazonosítója.",
+ "apihelp-compare-param-torev": "A második összehasonlítandó lapváltozat azonosítója.",
+ "apihelp-compare-example-1": "Az 1-es és 2-es lapváltozat összehasonlítása.",
+ "apihelp-createaccount-summary": "Új felhasználói fiók létrehozása.",
+ "apihelp-createaccount-example-create": "<kbd>Example</kbd> felhasználói fiók létrehozásának elkezdése <kbd>ExamplePassword</kbd> jelszóval.",
+ "apihelp-createaccount-param-name": "Felhasználónév.",
+ "apihelp-createaccount-param-password": "Jelszó (figyelmen kívül hagyva, ha a <var>$1mailpassword</var> be van állítva).",
+ "apihelp-createaccount-param-domain": "Tartomány külső hitelesítéshez (opcionális).",
+ "apihelp-createaccount-param-token": "Felhasználólétrehozási token az első kérésből",
+ "apihelp-createaccount-param-email": "A szerkesztő e-mail-címe (nem kötelező).",
+ "apihelp-createaccount-param-realname": "A szerkesztő valódi neve (nem kötelező).",
+ "apihelp-createaccount-param-mailpassword": "Ha bármilyen értéket kap, egy véletlenszerű jelszót kap a felhasználó e-mailben.",
+ "apihelp-createaccount-param-reason": "Opcionális indoklás a fióklétrehozáshoz a naplókba.",
+ "apihelp-createaccount-param-language": "A felhasználó alapértelmezett nyelvkódja (opcionális, alapértelmezetten a tartalom nyelve).",
+ "apihelp-createaccount-example-pass": "<kbd>testuser</kbd> felhasználó létrehozása <kbd>test123</kbd> jelszóval.",
+ "apihelp-createaccount-example-mail": "<kbd>testmailuser</kbd> felhasználó létrehozása, véletlenszerű jelszó elküldése e-mailben.",
+ "apihelp-delete-summary": "Lap törlése.",
+ "apihelp-delete-param-title": "A törlendő lap címe. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+ "apihelp-delete-param-pageid": "A törlendő lap lapazonosítója. Nem használható együtt a <var>$1title</var> paraméterrel.",
+ "apihelp-delete-param-reason": "A törlés indoka. Ha nincs beállítva, automatikusan generált indoklás helyettesíti.",
+ "apihelp-delete-param-watch": "A lap hozzáadása a felhasználó figyelőlistájához.",
+ "apihelp-delete-param-watchlist": "A lap hozzáadása a figyelőlistához vagy eltávolítása onnan feltétel nélkül, a beállítások használata vagy a figyelőlista érintetlenül hagyása.",
+ "apihelp-delete-param-unwatch": "A lap törlése a szerkesztő figyelőlistájáról.",
+ "apihelp-delete-param-oldimage": "A törlendő régi kép neve az [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] által adott formátumban.",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd> törlése.",
+ "apihelp-delete-example-reason": "<kbd>Main Page</kbd> törlése <kbd>Preparing for move</kbd> indoklással.",
+ "apihelp-disabled-summary": "Ez a modul le lett tiltva.",
+ "apihelp-edit-summary": "Lapok létrehozása és szerkesztése.",
+ "apihelp-edit-param-title": "A szerkesztendő lap címe. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+ "apihelp-edit-param-pageid": "A szerkesztendő lap lapazonosítója. Nem használható együtt a <var>$1title</var> paraméterrel.",
+ "apihelp-edit-param-section": "A szerkesztendő szakasz száma. <kbd>0</kbd> a bevezetőhöz, <kbd>new</kbd> új szakaszhoz.",
+ "apihelp-edit-param-sectiontitle": "Az új szakasz címe.",
+ "apihelp-edit-param-text": "A lap tartalma.",
+ "apihelp-edit-param-summary": "Szerkesztési összefoglaló. A szakasz címe is, ha $1section=new és a $1sectiontitle paraméter nincs beállítva.",
+ "apihelp-edit-param-minor": "Apró változtatás.",
+ "apihelp-edit-param-notminor": "Nem apró változtatás.",
+ "apihelp-edit-param-bot": "Szerkesztés megjelölése botszerkesztésként.",
+ "apihelp-edit-param-basetimestamp": "Az alapváltozat időbélyege, a szerkesztési ütközések felismerésére szolgál. Az [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]] kéréssel szerezhető meg.",
+ "apihelp-edit-param-starttimestamp": "A szerkesztési folyamat kezdetének időbélyege, a szerkesztési ütközések felismerésére szolgál. Egy megfelelő érték lekérhető a <var>[[Special:ApiHelp/main|curtimestamp]]</var> paraméterrel a folyamat kezdetén (pl. a szerkesztendő lap tartalmának letöltésekor).",
+ "apihelp-edit-param-recreate": "Bármilyen hiba felülírása arról, hogy a lapot a szerkesztés közben törölték.",
+ "apihelp-edit-param-createonly": "Ne szerkeszd a lapot, ha már létezik.",
+ "apihelp-edit-param-watch": "A lap hozzáadása a felhasználó figyelőlistájához.",
+ "apihelp-edit-param-unwatch": "A lap törlése a szerkesztő figyelőlistájáról.",
+ "apihelp-edit-param-watchlist": "A lap hozzáadása a figyelőlistához vagy eltávolítása onnan feltétel nélkül, a beállítások használata vagy a figyelőlista érintetlenül hagyása.",
+ "apihelp-edit-param-prependtext": "Ezen szöveg hozzáadása a lap elejére. Felülírja a <var>$1text</var> paramétert.",
+ "apihelp-edit-param-appendtext": "Ezen szöveg hozzáadása a lap végére. Felülírja a <var>$1text</var> paramétert.\n\nHasználd a <kbd>$1section=new</kbd> paramétert új szakasz hozzáadásához ezen paraméter helyett.",
+ "apihelp-edit-param-undo": "Ezen változat visszavonása. Felülírja a <var>$1text</var>, <var>$1prependtext</var> és <var>$1appendtext</var> paramétereket.",
+ "apihelp-edit-param-undoafter": "Minden változtatás visszavonása az <var>$1undo</var> paraméterben szereplőtől eddig. Ha nincs megadva, csak egy változtatás visszavonása.",
+ "apihelp-edit-param-redirect": "Átirányítások automatikus feloldása.",
+ "apihelp-edit-param-contentmodel": "Az új tartalom tartalommodellje.",
+ "apihelp-edit-param-token": "A tokennek mindig az utolsó paraméternek, vagy legalább a <var>$1text</var> után kell lennie.",
+ "apihelp-edit-example-edit": "Lap szerkesztése",
+ "apihelp-edit-example-prepend": "<kbd>_&#95;NOTOC_&#95;</kbd> hozzáadása a lap elejére.",
+ "apihelp-edit-example-undo": "Az 13579–13585. változatok visszavonása automatikus szerkesztési összefoglalóval.",
+ "apihelp-emailuser-summary": "E-mail küldése",
+ "apihelp-emailuser-param-target": "Az e-mail címzettje.",
+ "apihelp-emailuser-param-subject": "A levél tárgya.",
+ "apihelp-emailuser-param-text": "Szövegtörzs.",
+ "apihelp-emailuser-param-ccme": "Másolat küldése magamnak.",
+ "apihelp-emailuser-example-email": "E-mail küldése <kbd>WikiSysop</kbd> felhasználónak <kbd>Content</kbd> szöveggel.",
+ "apihelp-expandtemplates-summary": "Minden sablon kibontása a wikiszövegben.",
+ "apihelp-expandtemplates-param-title": "Lap címe.",
+ "apihelp-expandtemplates-param-text": "Az átalakítandó wikiszöveg.",
+ "apihelp-expandtemplates-param-revid": "Változatazonosító a <code><nowiki>{{REVISIONID}}</nowiki></code> és hasonló változók kibontásához.",
+ "apihelp-expandtemplates-param-prop": "A lekérendő információk.\n\nHa nincs megadva érték, a válasz tartalmazni fogja a wikiszöveget, de a kimenet elavult formátumú lesz.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "A kibontott wikiszöveg.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Bármilyen, a bemenetben szereplő kategória, ami nem jelenik meg a wikiszöveges kimenetben.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "A wikiszövegben kibontott varázsszavak által meghatározott laptulajdonságok.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Maximális idő, ami után az eredmény gyorsítótárazása érvénytelenítendő.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "A lapra vonatkozó JavaScript-változók.",
+ "apihelp-expandtemplates-param-includecomments": "A HTML-megjegyzések szerepeljenek-e a kimenetben.",
+ "apihelp-expandtemplates-example-simple": "A <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd> wikiszöveg kibontása.",
+ "apihelp-feedcontributions-summary": "Egy felhasználó közreműködéseinek lekérése hírcsatornaként.",
+ "apihelp-feedcontributions-param-feedformat": "A hírcsatorna formátuma.",
+ "apihelp-feedcontributions-param-user": "A lekérendő felhasználók.",
+ "apihelp-feedcontributions-param-namespace": "A közreműködések szűrése ezen névtérre.",
+ "apihelp-feedcontributions-param-year": "Közreműködések lekérése eddig az évig.",
+ "apihelp-feedcontributions-param-month": "Közreműködések lekérése ennek a hónapnak a végéig.",
+ "apihelp-feedcontributions-param-tagfilter": "A közreműködések szűrése az ezen címkével ellátottakra.",
+ "apihelp-feedcontributions-param-deletedonly": "Csak a törölt szerkesztések lekérése.",
+ "apihelp-feedcontributions-param-toponly": "Csak a jelenleg utolsónak számító változtatások lekérése.",
+ "apihelp-feedcontributions-param-newonly": "Csak az új oldalt létrehozó szerkesztések lekérése.",
+ "apihelp-feedcontributions-param-hideminor": "Apró szerkesztések kihagyása.",
+ "apihelp-feedcontributions-param-showsizediff": "A változatok közötti méretkülönbség lekérése.",
+ "apihelp-feedcontributions-example-simple": "<kbd>Example</kbd> felhasználó közreműködéseinek lekérése.",
+ "apihelp-feedrecentchanges-summary": "A friss változtatások lekérése hírcsatornaként.",
+ "apihelp-feedrecentchanges-param-feedformat": "A hírcsatorna formátuma.",
+ "apihelp-feedrecentchanges-param-namespace": "Az eredmények szűrése erre a névtérre.",
+ "apihelp-feedrecentchanges-param-invert": "Minden névtér a kiválasztott kivételével.",
+ "apihelp-feedrecentchanges-param-associated": "A kapcsolódó (vita- vagy tartalmi) névtér befoglalása.",
+ "apihelp-feedrecentchanges-param-days": "Az eredmények szűrése az elmúlt ennyi napra.",
+ "apihelp-feedrecentchanges-param-limit": "Találatok maximális száma.",
+ "apihelp-feedrecentchanges-param-from": "Szerkesztések megjelenítése ekkortól.",
+ "apihelp-feedrecentchanges-param-hideminor": "Apró változtatások elrejtése.",
+ "apihelp-feedrecentchanges-param-hidebots": "Botszerkesztések elrejtése.",
+ "apihelp-feedrecentchanges-param-hideanons": "Anonim felhasználók szerkesztéseinek elrejtése.",
+ "apihelp-feedrecentchanges-param-hideliu": "Bejelentkezett felhasználók szerkesztéseinek elrejtése.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ellenőrzött változtatások elrejtése.",
+ "apihelp-feedrecentchanges-param-hidemyself": "A jelenlegi felhasználó szerkesztéseinek elrejtése.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Kategóriaváltoztatások elrejtése.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Szűrés címke szerint.",
+ "apihelp-feedrecentchanges-param-target": "Csak a megadott lapról hivatkozott lapok szerkesztéseinek megjelenítése.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Inkább a megadott lap''ra'' hivatkozó lapok szerkesztéseinek megjelenítése.",
+ "apihelp-feedrecentchanges-example-simple": "Friss változtatások megjelenítése.",
+ "apihelp-feedrecentchanges-example-30days": "Az elmúlt 30 nap friss változtatásainak megjelenítése.",
+ "apihelp-feedwatchlist-summary": "A figyelőlista lekérése hírcsatornaként.",
+ "apihelp-feedwatchlist-param-feedformat": "A hírcsatorna formátuma.",
+ "apihelp-feedwatchlist-param-hours": "Az utóbbi ennyi órában szerkesztett lapok listázása.",
+ "apihelp-feedwatchlist-param-linktosections": "Hivatkozás közvetlenül a módosított szakaszra, ha lehetséges.",
+ "apihelp-feedwatchlist-example-default": "A figyelőlista-hírcsatorna megjelenítése.",
+ "apihelp-feedwatchlist-example-all6hrs": "A figyelt lapok összes változtatásának megjelenítése az elmúlt 6 órában.",
+ "apihelp-filerevert-summary": "Egy fájl visszaállítása egy régebbi verzióra.",
+ "apihelp-filerevert-param-filename": "Célfájlnév, {{ns:6}}: (File:) előtag nélkül",
+ "apihelp-filerevert-param-comment": "Feltöltési összefoglaló.",
+ "apihelp-filerevert-param-archivename": "A visszaállítandó változat archív neve.",
+ "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd> visszaállítása a <kbd>2011-03-05T15:27:40Z</kbd>-kori változatra.",
+ "apihelp-help-summary": "Súgó megjelenítése a megadott modulokhoz.",
+ "apihelp-help-param-submodules": "Súgó megjelenítése a megadott modul almoduljaihoz is.",
+ "apihelp-help-param-recursivesubmodules": "Súgó megjelenítése az almodulokhoz rekurzívan.",
+ "apihelp-help-param-helpformat": "A súgó kimeneti formátuma.",
+ "apihelp-help-param-wrap": "Az eredmény visszaadása a szabványos API-válaszstruktúrában.",
+ "apihelp-help-param-toc": "A HTML-kimenet tartalmazzon egy tartalomjegyzéket.",
+ "apihelp-help-example-main": "Súgó megjelenítése a fő modulhoz.",
+ "apihelp-help-example-submodules": "Súgó az <kbd>action=query</kbd> modulhoz és összes almoduljához.",
+ "apihelp-help-example-recursive": "Minden súgó egy lapon.",
+ "apihelp-help-example-help": "Súgó magához a súgó modulhoz.",
+ "apihelp-help-example-query": "Súgó két lekérdező almodulhoz.",
+ "apihelp-imagerotate-summary": "Egy vagy több kép elforgatása.",
+ "apihelp-imagerotate-param-rotation": "A kép forgatása ennyi fokkal az óramutató járásával megegyező irányban.",
+ "apihelp-imagerotate-example-simple": "<kbd>Example.png</kbd> elforgatása <kbd>90</kbd> fokkal.",
+ "apihelp-imagerotate-example-generator": "Az összes kép elforgatása a <kbd>Category:Flip</kbd> kategóriában <kbd>180</kbd> fokkal.",
+ "apihelp-import-summary": "Egy lap importálása egy másik wikiből vagy XML-fájlból.",
+ "apihelp-import-extended-description": "A HTTP POST-kérést fájlfeltöltésként kell elküldeni (multipart/form-data használatával) a <var>xml</var> paraméter használatakor.",
+ "apihelp-import-param-xml": "Feltöltött XML-fájl.",
+ "apihelp-import-param-interwikisource": "Wikiközi importálásnál: forráswiki.",
+ "apihelp-import-param-interwikipage": "Wikiközi importálásnál: az importálandó lap.",
+ "apihelp-import-param-fullhistory": "Wikiközi importálásnál: teljes laptörténet importálása, nem csak az aktuális változat.",
+ "apihelp-import-param-templates": "Wikiközi importálásnál: importálás a lapon használt sablonokkal együtt.",
+ "apihelp-import-param-namespace": "Importálás ebbe a névtérbe. Nem használható együtt a <var>$1rootpage</var> paraméterrel.",
+ "apihelp-import-param-rootpage": "Importálás ennek a lapnak az allapjaként. Nem használható együtt a <var>$1namespace</var> paraméterrel.",
+ "apihelp-import-example-import": "[[meta:Help:ParserFunctions]] importálása a 100-as névtérbe teljes laptörténettel.",
+ "apihelp-linkaccount-summary": "Egy harmadik fél szolgáltató fiókjának kapcsolása a jelenlegi felhasználóhoz.",
+ "apihelp-linkaccount-example-link": "Összekapcsolás elkezdése <kbd>Example</kbd> szolgáltató fiókjával.",
+ "apihelp-login-summary": "Bejelentkezés és hitelesítő sütik lekérése.",
+ "apihelp-login-extended-description": "Ez a művelet csak [[Special:BotPasswords|botjelszavakkal]] használandó; a fő fiókkal való használat elavult és figyelmeztetés nélkül sikertelen lehet. A fő fiókkal való biztonságos bejelentkezéshez használd az <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd> paramétert.",
+ "apihelp-login-extended-description-nobotpasswords": "Ez a művelet elavult és figyelmeztetés nélkül sikertelen lehet. A biztonságos bejelentkezéshez használd az <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd> paramétert.",
+ "apihelp-login-param-name": "Szerkesztőnév.",
+ "apihelp-login-param-password": "Jelszó.",
+ "apihelp-login-param-domain": "Tartomány (opcionális)",
+ "apihelp-login-param-token": "Az első kérésben megszerzett bejelentkezési token.",
+ "apihelp-login-example-gettoken": "Egy bejelentkezés token lekérése.",
+ "apihelp-login-example-login": "Bejelentkezés.",
+ "apihelp-logout-summary": "Kijelentkezés és munkamenetadatok törlése.",
+ "apihelp-logout-example-logout": "Aktuális felhasználó kijelentkeztetése.",
+ "apihelp-managetags-summary": "A változtatáscímkék kezelése.",
+ "apihelp-managetags-param-operation": "A végrehajtandó feladat:\n;create: Új változtatáscímke létrehozása kézi használatra.\n;delete: Egy változtatáscímke eltávolítása az adatbázisból, beleértve az eltávolítását minden lapváltozatról, frissváltoztatások-bejegyzésről és naplóbejegyzésről, ahol használatban van.\n;activate: Egy változtatáscímke aktiválása, lehetővé téve a felhasználóknak a kézi használatát.\n;deactivate: Egy változtatáscímke deaktiválása, a felhasználók megakadályozása a kézi használatban.",
+ "apihelp-managetags-param-tag": "A létrehozandó, törlendő, aktiválandó vagy deaktiválandó címke. Létrehozás esetén adott nevű címke nem létezhet. Törlés esetén a címkének léteznie kell. Aktiválás esetén a címkének léteznie kell, és nem használhatja más kiterjesztés. Deaktiválás esetén a címkének aktívnak és kézzel definiáltnak kell lennie.",
+ "apihelp-managetags-param-reason": "Opcionális indoklás a címke létrehozásához, törléséhez, aktiválásához vagy deaktiválásához.",
+ "apihelp-managetags-param-ignorewarnings": "Figyelmeztetések figyelmen kívül hagyása a művelet közben.",
+ "apihelp-managetags-example-create": "<kbd>spam</kbd> címke létrehozása <kbd>For use in edit patrolling</kbd> indoklással",
+ "apihelp-managetags-example-delete": "<kbd>vandlaism</kbd> címke törlése <kbd>Misspelt</kbd> indoklással",
+ "apihelp-managetags-example-activate": "<kbd>spam</kbd> címke aktiválása <kbd>For use in edit patrolling</kbd> indoklással",
+ "apihelp-managetags-example-deactivate": "<kbd>spam</kbd> címke deaktiválása <kbd>No longer required</kbd> indoklással",
+ "apihelp-mergehistory-summary": "Laptörténetek egyesítése",
+ "apihelp-mergehistory-param-reason": "Laptörténet egyesítésének oka.",
+ "apihelp-move-summary": "Egy lap átnevezése.",
+ "apihelp-move-param-from": "Az átnevezendő lap címe. Nem használható együtt a <var>$1fromid</var> paraméterrel.",
+ "apihelp-move-param-fromid": "Az átnevezendő lap lapazonosítója. Nem használható együtt a <var>$1from</var> paraméterrel.",
+ "apihelp-move-param-to": "A lap új címe.",
+ "apihelp-move-param-reason": "Az átnevezés oka.",
+ "apihelp-move-param-movetalk": "Nevezd át a vitalapot is, ha létezik.",
+ "apihelp-move-param-movesubpages": "Nevezd át az allapokat is, ha lehetséges.",
+ "apihelp-move-param-noredirect": "Ne készíts átirányítást.",
+ "apihelp-move-param-watch": "A lap és az átirányítás hozzáadása a jelenlegi felhasználó figyelőlistájához.",
+ "apihelp-move-param-unwatch": "A lap és az átirányítás eltávolítása a jelenlegi felhasználó figyelőlistájáról.",
+ "apihelp-move-param-watchlist": "A lap hozzáadása a figyelőlistához vagy eltávolítása onnan feltétel nélkül, a beállítások használata vagy a figyelőlista érintetlenül hagyása.",
+ "apihelp-move-param-ignorewarnings": "Figyelmeztetések figyelmen kívül hagyása.",
+ "apihelp-move-example-move": "<kbd>Badtitle</kbd> átnevezése <kbd>Goodtitle</kbd> címre átirányítás készítése nélkül.",
+ "apihelp-opensearch-summary": "Keresés a wikin az OpenSearch protokoll segítségével.",
+ "apihelp-opensearch-param-search": "A keresőkifejezés.",
+ "apihelp-opensearch-param-limit": "Találatok maximális száma.",
+ "apihelp-opensearch-param-namespace": "A keresendő névterek.",
+ "apihelp-opensearch-param-suggest": "Ne csináljon semmit, ha a <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> hamis.",
+ "apihelp-opensearch-param-redirects": "Hogyan kezelje az átirányításokat:\n;return: Magának az átirányításnak a visszaadása.\n;resolve: A céllap visszaadása. Lehet, hogy kevesebb mint <var>$1limit</var> találatot ad vissza.\nTörténeti okokból az alapértelmezés „return” <kbd>$1format=json</kbd> esetén és „resolve” más formátumoknál.",
+ "apihelp-opensearch-param-format": "A kimenet formátuma.",
+ "apihelp-opensearch-example-te": "<kbd>Te</kbd>-vel kezdődő lapok keresése.",
+ "apihelp-options-summary": "A jelenlegi felhasználó beállításainak módosítása.",
+ "apihelp-options-extended-description": "Csak a MediaWiki vagy kiterjesztései által kínált, valamint a <code>userjs-</code> előtagú (felhasználói parancsfájloknak szánt) beállítások állíthatók be.",
+ "apihelp-options-param-reset": "Beállítások visszaállítása a wiki alapértelmezéseire.",
+ "apihelp-options-param-resetkinds": "A visszaállítandó beállítások típusa(i) a <var>$1reset</var> paraméter használatakor.",
+ "apihelp-options-param-change": "Változtatások listája név=érték formátumban (pl. <kbd>skin=vector</kbd>). Ha nincs érték megadva (egyenlőségjel sem szerepel – pl. <kbd>beállítás|másik|…</kbd>), a beállítások visszaállnak az alapértelmezett értékre. Ha bármilyen érték tartalmaz függőleges vonal karaktert (<kbd>|</kbd>), használd az [[Special:ApiHelp/main#main/datatypes|alternatív elválasztókaraktert]] a megfelelő működéshez.",
+ "apihelp-options-param-optionname": "Az <var>$1optionvalue</var> értékre állítandó beállítás neve.",
+ "apihelp-options-param-optionvalue": "Az <var>$1optionname</var> beállítás értéke.",
+ "apihelp-options-example-reset": "Minden beállítás visszaállítása",
+ "apihelp-options-example-change": "A <kbd>skin</kbd> és a <kbd>hideminor</kbd> beállítások módosítása.",
+ "apihelp-options-example-complex": "Minden beállítás visszaállítása, majd a <kbd>skin</kbd> és a <kbd>nickname</kbd> beállítása.",
+ "apihelp-paraminfo-summary": "Információk lekérése API-modulokról.",
+ "apihelp-paraminfo-param-modules": "Modulnevek (az <var>action</var> és <var>format</var> paraméterek értékei vagy <kbd>main</kbd>). Megadhatók almodulok <kbd>+</kbd> elválasztással vagy minden almodul <kbd>+*</kbd>, illetve rekurzívan minden almodul <kbd>+**</kbd> végződéssel.",
+ "apihelp-paraminfo-param-helpformat": "A súgószövegek formátuma.",
+ "apihelp-paraminfo-param-querymodules": "Lekérdező modul(ok) neve (a <var>prop</var>, <var>meta</var> vagy <var>list</var> paraméter értéke). Használd a <kbd>$1modules=query+foo</kbd> formát a <kbd>$1querymodules=foo</kbd> helyett.",
+ "apihelp-paraminfo-param-mainmodule": "Információk lekérése a fő (legfelső szintű) modulról is. Használd a <kbd>$1modules=main</kbd> paramétert helyette.",
+ "apihelp-paraminfo-param-pagesetmodule": "Információk lekérése a pageset modulról is (ez szolgáltatja a <var>titles</var> paramétert és társait).",
+ "apihelp-paraminfo-param-formatmodules": "Formázómodul(ok) neve (a <var>format</var> paraméter értéke). Használd a <var>$1modules</var> paramétert helyette.",
+ "apihelp-paraminfo-example-1": "Információk megjelenítése az <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> és <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> lekérdezésekhez.",
+ "apihelp-paraminfo-example-2": "Információk megjelenítése az <kbd>[[Special:ApiHelp/query|action=query]]</kbd> összes almoduljához.",
+ "apihelp-parse-summary": "Tartalom feldolgozása.",
+ "apihelp-parse-extended-description": "Lásd az <kbd>[[Special:ApiHelp/query|action=query]]</kbd> számos prop-modulját a információk lekérésére a lap aktuális változatáról.\n\nTöbbféle módon megadható a feldolgozandó szöveg:\n# Egy lap vagy lapváltozat megadásával, a <var>$1page</var>, <var>$1pageid</var> vagy <var>$1oldid</var> paraméterrel.\n# Magának a tartalomnak a megadásával, a <var>$1text</var>, <var>$1title</var>, <var>$1revid</var> és <var>$1contentmodel</var> paraméterrel.\n# Csak egy összefoglaló feldolgozása. A <var>$1prop</var> paraméternek üresnek kell lennie.",
+ "apihelp-parse-param-title": "A lapnak a címe, amihez a szöveg tartozik. Ha nincs megadva, a <var>$1contentmodel</var> paraméter kötelező, és a cím [[API]] lesz.",
+ "apihelp-parse-param-text": "A feldolgozandó szöveg. Használd a <var>$1title</var> vagy <var>$1contentmodel</var> paramétert a tartalommodell megadásához.",
+ "apihelp-parse-param-summary": "Feldolgozandó szerkesztési összefoglaló.",
+ "apihelp-parse-param-page": "Ezen lap tartalmának feldolgozása. Nem használható együtt a <var>$1text</var> és <var>$1title</var> paraméterrel.",
+ "apihelp-parse-param-pageid": "Ezen lap tartalmának feldolgozása. Felülírja a <var>$1page</var> paramétert.",
+ "apihelp-parse-param-redirects": "Ha a <var>$1page</var> vagy <var>$1pageid</var> átirányítás, annak feloldása.",
+ "apihelp-parse-param-oldid": "Ezen lapváltozat feldolgozása. Felülírja a <var>$1page</var> és <var>$1pageid</var> paramétert.",
+ "apihelp-parse-param-prop": "A lekérendő információk:",
+ "apihelp-parse-paramvalue-prop-text": "A feldolgozott wikiszöveg.",
+ "apihelp-parse-paramvalue-prop-langlinks": "A feldolgozott wikiszövegben talált nyelvközi hivatkozások.",
+ "apihelp-parse-paramvalue-prop-categories": "A feldolgozott wikiszövegben talált kategóriák.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "A kategóriák HTML-verziója.",
+ "apihelp-parse-paramvalue-prop-links": "A feldolgozott wikiszövegben talált belső linkek.",
+ "apihelp-parse-paramvalue-prop-templates": "A feldolgozott wikiszövegben használt sablonok.",
+ "apihelp-parse-paramvalue-prop-images": "A feldolgozott wikiszövegben használt képek.",
+ "apihelp-parse-paramvalue-prop-externallinks": "A feldolgozott wikiszövegben talált külső linkek.",
+ "apihelp-parse-paramvalue-prop-sections": "A feldolgozott wikiszövegben talált szakaszok.",
+ "apihelp-parse-paramvalue-prop-revid": "A feldolgozott lap lapváltozat-azonosítója.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "A feldolgozott wikiszöveghez tartozó cím.",
+ "apihelp-parse-paramvalue-prop-headitems": "A <code>&lt;head&gt;</code> HTML-címkébe kerülő elemek.",
+ "apihelp-parse-paramvalue-prop-headhtml": "A lap feldolgozott <code>&lt;head&gt;</code> HTML-címkéje.",
+ "apihelp-parse-paramvalue-prop-modules": "A lapon használt ResourceLoader-modulok. A betöltésükhöz használd a <code>mw.loader.using()</code> függvényt. Vagy a <kbd>jsconfigvars</kbd>, vagy az <kbd>encodedjsconfigvars</kbd> paramétert kötelező együtt használni ezzel a paraméterrel.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "A lapra jellemző JavaScript-változók. A használatukhoz állítsd be őket az <code>mw.config.set()</code> függvénnyel.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "A lapra jellemző JavaScript-változók JSON-szövegként.",
+ "apihelp-parse-paramvalue-prop-indicators": "A lap státuszindikátorainak HTML-kódja.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "A feldolgozott wikiszövegben talált interwikihivatkozások.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Az eredeti wikiszöveg.",
+ "apihelp-parse-paramvalue-prop-properties": "A feldolgozott wikiszövegben definiált különböző tulajdonságok.",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "A tartalom feldolgozása közben előforduló hibák visszaadása.",
+ "apihelp-parse-param-wrapoutputclass": "Az értelmező kimenetének körülvétele ezzel a CSS-osztállyal.",
+ "apihelp-parse-param-pst": "Mentés előtti átalakítások elvégzése a bemeneten a feldolgozás előtt. Csak szöveggel használva érvényes.",
+ "apihelp-parse-param-onlypst": "Mentés előtti átalakítások (pre-save transform, PST) végrehajtása a bemeneten, de a feldolgozás mellőzése. Csak a <var>$1text</var> paraméterrel használva érvényes.",
+ "apihelp-parse-param-section": "Csak a megadott sorszámú szakasz feldolgozása.\n\nHa <kbd>new</kbd>, a <var>$1text</var> és <var>$1sectiontitle</var> feldolgozása úgy, mintha egy új szakaszt adnál a laphoz.\n\nA <kbd>new</kbd> csak a <var>text</var> paraméter megadásakor engedélyezett.",
+ "apihelp-parse-param-sectiontitle": "Az új szakasz címe, ha a <var>section</var> paraméter <kbd>new</kbd>.\n\nA szerkesztéssel ellentétben itt nem a <var>summary</var> tartalma az alapértelmezett értéke.",
+ "apihelp-parse-param-disablepp": "Használd a <var>$1disablelimitreport</var> paramétert helyette.",
+ "apihelp-parse-param-disableeditsection": "A szakaszok szerkesztőlinkjeinek elhagyása a kimenetből.",
+ "apihelp-parse-param-preview": "Feldolgozás előnézetmódban.",
+ "apihelp-parse-param-sectionpreview": "Feldolgozás szakaszelőnézet-módban (az előnézetmódot is engedélyezi).",
+ "apihelp-parse-param-disabletoc": "Tartalomjegyzék elhagyása a kimenetből.",
+ "apihelp-parse-param-contentmodel": "A bemeneti szöveg tartalommodellje. Ha nincs megadva, a $1title paraméter kötelező, és az alapértelmezés a megadott cím tartalommodellje lesz. Csak a $1text paraméterrel együtt használva érvényes.",
+ "apihelp-parse-example-page": "Egy lap feldolgozása.",
+ "apihelp-parse-example-text": "Wikiszöveg feldolgozása.",
+ "apihelp-parse-example-texttitle": "Wikiszöveg feldolgozása a lapcím megadásával.",
+ "apihelp-parse-example-summary": "Egy szerkesztési összefoglaló feldolgozása.",
+ "apihelp-patrol-summary": "Egy lap vagy lapváltozat ellenőrzöttnek jelölése (patrol).",
+ "apihelp-patrol-param-rcid": "Az ellenőrzendő frissváltoztatások-azonosító.",
+ "apihelp-patrol-param-revid": "Az ellenőrzendő lapváltozat azonosítója (oldid).",
+ "apihelp-patrol-example-rcid": "Egy friss változtatás ellenőrzöttnek jelölése.",
+ "apihelp-patrol-example-revid": "Egy lapváltozat ellenőrzöttnek jelölése.",
+ "apihelp-protect-summary": "Egy lap védelmi szintjének változtatása.",
+ "apihelp-protect-param-title": "A levédendő/feloldandó lap címe. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+ "apihelp-protect-param-pageid": "A levédendő/feloldandó lap lapazonosítója. Nem használható együtt a <var>$1title</var> paraméterrel.",
+ "apihelp-protect-param-protections": "Védelmi szintek, <kbd>típus=szint</kbd> formátumban (pl. <kbd>edit=sysop</kbd>). Az <kbd>all</kbd> szint azt jelenti, hogy mindenki végrehajthatja az adott műveletet, vagyis nincs korlátozás.\n\n<strong>Megjegyzés:</strong> Minden nem listázott művelet védelme el lesz távolítva.",
+ "apihelp-protect-param-expiry": "A lejáratok időbélyege. Ha csak egy időbélyeg van megadva, az vonatkozik minden védelemre. Használj <kbd>infinite</kbd> (végtelen), <kbd>indefinite</kbd> (határozatlan), <kbd>infinity</kbd> (végtelen) vagy <kbd>never</kbd> (soha) értéket le nem járó védelemhez.",
+ "apihelp-protect-param-reason": "A levédés/feloldás oka.",
+ "apihelp-protect-param-cascade": "Kaszkádolt védelem engedélyezése (a lapon használt sablonok és képek védelme). Nincs hatása, ha egyetlen megadott védelmi szint sem támogatja a kaszkádolt védelmet.",
+ "apihelp-protect-param-watch": "A levédett/feloldott lap címe hozzáadása az aktuális felhasználó figyelőlistájához.",
+ "apihelp-protect-param-watchlist": "A lap hozzáadása a figyelőlistához vagy eltávolítása onnan feltétel nélkül, a beállítások használata vagy a figyelőlista érintetlenül hagyása.",
+ "apihelp-protect-example-protect": "Lap levédése.",
+ "apihelp-protect-example-unprotect": "Egy lap védelmének feloldása a korlátozások <kbd>all</kbd>-ra állításával (vagyis mindenki végrehajthatja a műveleteket).",
+ "apihelp-protect-example-unprotect2": "Egy lap védelmének feloldása semmilyen védelem beállításával.",
+ "apihelp-purge-summary": "A gyorsítótár ürítése a megadott lapoknál.",
+ "apihelp-purge-param-forcelinkupdate": "A linktáblák frissítése.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "A linktábla frissítése a megadott lapokra és minden olyan lapra, ami a megadott lapokat beilleszti sablonként.",
+ "apihelp-purge-example-simple": "A gyorsítótár ürítése a <kbd>Main Page</kbd> és <kbd>API</kbd> lapoknál.",
+ "apihelp-purge-example-generator": "A gyorsítótár ürítése az első 10 fő névtérbeli lapnál.",
+ "apihelp-query-summary": "Adatok lekérése a MediaWikiből és a MediaWikiről.",
+ "apihelp-query-extended-description": "Minden adatmódosításhoz először a <kbd>query</kbd> segítségével szereznie kell egy tokent a rosszindulatú oldalak visszaéléseinek elhárítására.",
+ "apihelp-query-param-prop": "A lapokról lekérendő tulajdonságok.",
+ "apihelp-query-param-list": "Lekérendő listák.",
+ "apihelp-query-param-meta": "Lekérendő metaadatok.",
+ "apihelp-query-param-indexpageids": "Egy <samp>pageids</samp> szakasz hozzáadása a kimenethez az összes visszaadott lapazonosítóval.",
+ "apihelp-query-param-export": "Az összes megadott vagy generált lap aktuális változatának exportálása.",
+ "apihelp-query-param-exportnowrap": "Az exportált XML visszaadása normál eredményszerkezetbe (JSON, XML stb.) burkolás nélkül (a [[Special:Export]] kimenetével megegyező formátum). Csak az <var>$1export</var> paraméterrel együtt használható.",
+ "apihelp-query-param-iwurl": "A teljes URL visszaadása, ha a cím egy interwikilink.",
+ "apihelp-query-param-rawcontinue": "Nyers <samp>query-continue</samp> adatok visszaadása a folytatáshoz.",
+ "apihelp-query-example-revisions": "[[Special:ApiHelp/query+siteinfo|Wikiinformációk]] és a <kbd>Main Page</kbd> [[Special:ApiHelp/query+revisions|laptörténetének]] lekérése.",
+ "apihelp-query-example-allpages": "Az <kbd>API/</kbd> kezdetű lapok laptörténetének lekérése.",
+ "apihelp-query+allcategories-summary": "Az összes kategória visszaadása.",
+ "apihelp-query+allcategories-param-from": "A kategóriák listázása ettől a címtől.",
+ "apihelp-query+allcategories-param-to": "A kategóriák listázása eddig a címig.",
+ "apihelp-query+allcategories-param-prefix": "Ezzel kezdődő című kategóriák keresése.",
+ "apihelp-query+allcategories-param-dir": "A rendezés iránya.",
+ "apihelp-query+allcategories-param-min": "Csak legalább ennyi taggal rendelkező kategóriák visszaadása.",
+ "apihelp-query+allcategories-param-max": "Csak legfeljebb ennyi taggal rendelkező kategóriák visszaadása.",
+ "apihelp-query+allcategories-param-limit": "A visszaadandó kategóriák száma.",
+ "apihelp-query+allcategories-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "A kategóriában lévő lapok száma.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Rejtett-e a kategória a <code>_&#95;HIDDENCAT_&#95;</code> kapcsolóval.",
+ "apihelp-query+allcategories-example-size": "Kategóriák listázása a bennük lévő lapok számával.",
+ "apihelp-query+allcategories-example-generator": "Információk lekérése magukról a kategórialapokról, amiknek a címe <kbd>List</kbd> kezdetű.",
+ "apihelp-query+alldeletedrevisions-summary": "Egy felhasználó vagy egy névtér összes törölt szerkesztésének listázása.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Csak az <var>$3user</var> paraméterrel együtt használható.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Nem használható együtt az <var>$3user</var> paraméterrel.",
+ "apihelp-query+alldeletedrevisions-param-start": "A listázás kezdő időbélyege.",
+ "apihelp-query+alldeletedrevisions-param-end": "A lista végét jelentő időbélyeg.",
+ "apihelp-query+alldeletedrevisions-param-from": "Listázás ettől a címtől.",
+ "apihelp-query+alldeletedrevisions-param-to": "Listázás eddig a címig.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Ezzel kezdődő című lapok keresése.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Csak ezzel a címkével ellátott változatok listázása.",
+ "apihelp-query+alldeletedrevisions-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Lapok listázása csak ebben a névtérben.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Generátorként használva címek visszaadása lapváltozat-azonosítók helyett.",
+ "apihelp-query+alldeletedrevisions-example-user": "<kbd>Example</kbd> 50 legutóbbi törölt szerkesztésének listázása.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "A fő névtér első 50 törölt szerkesztésének listázása.",
+ "apihelp-query+allfileusages-summary": "Az összes fájlhasználat listázása, beleértve a nem létező fájlokét is.",
+ "apihelp-query+allfileusages-param-from": "Listázás ettől a címtől vagy fájltól.",
+ "apihelp-query+allfileusages-param-to": "Listázás eddig a címig vagy fájlig.",
+ "apihelp-query+allfileusages-param-prefix": "Ezzel kezdődő nevű fájlok keresése.",
+ "apihelp-query+allfileusages-param-unique": "Csak különböző fájlnevek listázása. Nem használható együtt az <kbd>$1prop=id</kbd> paraméterrel.",
+ "apihelp-query+allfileusages-param-prop": "Visszaadandó információk:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "A képeket használó lapok lapazonosítói (nem használható együtt az <var>$1unique</var> paraméterrel).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "A fájl neve.",
+ "apihelp-query+allfileusages-param-limit": "A visszaadandó elemek maximális száma.",
+ "apihelp-query+allfileusages-param-dir": "A listázás iránya.",
+ "apihelp-query+allfileusages-example-B": "Fájlnevek listázása, a hiányzókat is beleértve, a forráslapok lapazonosítójával, <kbd>B</kbd>-től kezdve.",
+ "apihelp-query+allfileusages-example-unique": "Különböző fájlnevek listázása.",
+ "apihelp-query+allfileusages-example-unique-generator": "Az összes fájlnév lekérése, hiányzók megjelölése.",
+ "apihelp-query+allfileusages-example-generator": "A fájlokat használó lapok lekérése.",
+ "apihelp-query+allimages-summary": "Az összes kép visszaadása.",
+ "apihelp-query+allimages-param-sort": "Rendezési szempont.",
+ "apihelp-query+allimages-param-dir": "A listázás iránya.",
+ "apihelp-query+allimages-param-from": "Listázás ettől a fájlnévtől. Csak az <kbd>$1sort=name</kbd> paraméterrel együtt használható.",
+ "apihelp-query+allimages-param-to": "Listázás eddig a fájlnévig. Csak az <kbd>$1sort=name</kbd> paraméterrel együtt használható.",
+ "apihelp-query+allimages-param-start": "Listázás ettől az időbélyegtől. Csak az <kbd>$1sort=timestamp</kbd> paraméterrel együtt használható.",
+ "apihelp-query+allimages-param-end": "Listázás eddig az időbélyegig. Csak az <kbd>$1sort=timestamp</kbd> paraméterrel együtt használható.",
+ "apihelp-query+allimages-param-prefix": "Ezzel kezdődő nevű fájlok keresése. Csak az <kbd>$1sort=name</kbd> paraméterrel együtt használható.",
+ "apihelp-query+allimages-param-minsize": "A fájlok minimális fájlmérete bájtban.",
+ "apihelp-query+allimages-param-maxsize": "A fájlok maximális fájlmérete bájtban.",
+ "apihelp-query+allimages-param-user": "Ezen felhasználó által feltöltött fájlok visszaadása. Csak az <kbd>$1sort=timestamp</kbd> paraméterrel együtt használható. Nem használható együtt az <var>$1filterbots</var> paraméterrel.",
+ "apihelp-query+allimages-param-filterbots": "Botok által feltöltött fájlok szűrése. Csak az <kbd>$1sort=timestamp</kbd> paraméterrel együtt használható. Nem használható együtt az <var>$1user</var> paraméterrel.",
+ "apihelp-query+allimages-param-mime": "Szűrés MIME-típus alapján, pl. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "A visszaadandó képek száma.",
+ "apihelp-query+allimages-example-B": "Fájlok listázása <kbd>B</kbd>-től kezdve.",
+ "apihelp-query+allimages-example-recent": "A legutóbb feltöltött fájlok listázása, hasonló a [[Special:NewFiles]] laphoz.",
+ "apihelp-query+allimages-example-mimetypes": "<kbd>image/png</kbd> vagy <kbd>image/gif</kbd> MIME-típusú fájlok listázása",
+ "apihelp-query+allimages-example-generator": "Információk 4 fájlról <kbd>T</kbd>-től kezdve.",
+ "apihelp-query+alllinks-summary": "Egy adott névtérbe mutató összes hivatkozás visszaadása.",
+ "apihelp-query+alllinks-param-from": "Listázás ettől a hivatkozástól.",
+ "apihelp-query+alllinks-param-to": "Listázás eddig a hivatkozásig.",
+ "apihelp-query+alllinks-param-prefix": "Ezzel kezdődő című hivatkozott lapok keresése.",
+ "apihelp-query+alllinks-param-unique": "Csak különböző címek listázása. Nem használható együtt az <kbd>$1prop=ids</kbd> paraméterrel.\nGenerátorként használva a céllapokat adja vissza a forráslapok helyett.",
+ "apihelp-query+alllinks-param-prop": "Visszaadandó információk:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "A hivatkozó lapok lapazonosítói (nem használható együtt az <var>$1unique</var> paraméterrel).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "A hivatkozott lap címe.",
+ "apihelp-query+alllinks-param-namespace": "A listázandó névtér.",
+ "apihelp-query+alllinks-param-limit": "A visszaadandó elemek maximális száma.",
+ "apihelp-query+alllinks-param-dir": "A listázás iránya.",
+ "apihelp-query+alllinks-example-B": "Hivatkozott lapok listázása, a hiányzókat is beleértve, a forráslapok lapazonosítójával, <kbd>B</kbd>-től kezdve.",
+ "apihelp-query+alllinks-example-unique": "Különböző hivatkozott lapok listázása.",
+ "apihelp-query+alllinks-example-unique-generator": "Az összes hivatkozott lap lekérése, hiányzók megjelölése.",
+ "apihelp-query+alllinks-example-generator": "A hivatkozásokat tartalmazó lapok lekérése.",
+ "apihelp-query+allmessages-summary": "A wiki felületüzeneteinek lekérése.",
+ "apihelp-query+allmessages-param-messages": "A visszaadandó üzenetek. A <kbd>*</kbd> (alapértelmezés) az összes üzenetet jelenti.",
+ "apihelp-query+allmessages-param-prop": "A lekérendő tulajdonságok.",
+ "apihelp-query+allmessages-param-nocontent": "Ne tartalmazza a kimenet az üzenetek tartalmát.",
+ "apihelp-query+allmessages-param-includelocal": "Helyi üzenetek befoglalása (a szoftverben nem, de a {{ns:MediaWiki}} névtérben létező üzenetek).\nEz az összes lapot listázza a {{ns:MediaWiki}} névtérben, így a nem valódi üzeneteket is, mint a [[MediaWiki:Common.js|Common.js]] fájl.",
+ "apihelp-query+allmessages-param-args": "Az üzenetben behelyettesítendő paraméterek.",
+ "apihelp-query+allmessages-param-filter": "Csak az ezen szöveget tartalmazó nevű üzenetek visszaadása.",
+ "apihelp-query+allmessages-param-customised": "Az üzenetek szűrése módosítási állapot alapján.",
+ "apihelp-query+allmessages-param-lang": "A visszaadott üzenetek nyelve.",
+ "apihelp-query+allmessages-param-from": "Listázás ettől az üzenettől.",
+ "apihelp-query+allmessages-param-to": "Listázás eddig az üzenetig.",
+ "apihelp-query+allmessages-param-prefix": "Ezzel kezdődő nevű üzenetek visszaadása.",
+ "apihelp-query+allmessages-example-ipb": "<kbd>ipb-</kbd> előtagú üzenetek lekérése.",
+ "apihelp-query+allmessages-example-de": "Az <kbd>august</kbd> és <kbd>mainpage</kbd> üzenetek lekérése német nyelven.",
+ "apihelp-query+allpages-summary": "Egy adott névtér összes lapjának visszaadása.",
+ "apihelp-query+allpages-param-from": "A lapok listázása ettől a címtől.",
+ "apihelp-query+allpages-param-to": "A lapok listázása eddig a címig.",
+ "apihelp-query+allpages-param-prefix": "Ezzel kezdődő című lapok keresése.",
+ "apihelp-query+allpages-param-namespace": "A listázandó névtér.",
+ "apihelp-query+allpages-param-filterredir": "A listázandó lapok.",
+ "apihelp-query+allpages-param-minsize": "A lapok minimális hossza bájtban.",
+ "apihelp-query+allpages-param-maxsize": "A lapok maximális hossza bájtban.",
+ "apihelp-query+allpages-param-prtype": "Csak védett lapok listázása.",
+ "apihelp-query+allpages-param-prlevel": "A védelmek szűrése a védelmi szint alapján (csak az <var>$1prtype=</var> paraméterrel együtt használható).",
+ "apihelp-query+allpages-param-limit": "A visszaadandó lapok maximális száma.",
+ "apihelp-query+allpages-param-dir": "A listázás iránya.",
+ "apihelp-query+allpages-param-filterlanglinks": "Szűrés az alapján, hogy vannak-e nyelvközi hivatkozások a lapon. Nem biztos, hogy figyelembe veszi a kiterjesztések által hozzáadott nyelvközi hivatkozásokat.",
+ "apihelp-query+allpages-param-prexpiry": "Szűrés a védelem lejárata alapján:\n;indefinite: Csak meghatározatlan idejű védelemmel ellátott lapok.\n;definite: Csak meghatározott idejű (konkrét lejáratú) védelemmel ellátott lapok.\n;all: Bármilyen lejáratú védelemmel ellátott lapok.",
+ "apihelp-query+allpages-example-B": "Lapok listázása <kbd>B</kbd>-től kezdve.",
+ "apihelp-query+allpages-example-generator": "Információk 4 lapról <kbd>T</kbd>-től kezdve.",
+ "apihelp-query+allpages-example-generator-revisions": "Az első két nem átirányító lap tartalmának megjelenítése <kbd>Re</kbd>-től kezdve.",
+ "apihelp-query+allredirects-summary": "Egy adott névtérbe mutató összes átirányítás listázása.",
+ "apihelp-query+allredirects-param-from": "Listázás ettől az átirányításcímtől.",
+ "apihelp-query+allredirects-param-to": "Listázás eddig az átirányításcímig.",
+ "apihelp-query+allredirects-param-prefix": "Ezzel kezdődő című céllapok keresése.",
+ "apihelp-query+allredirects-param-unique": "Csak különböző céllapok listázása. Nem használható együtt az <kbd>$1prop=ids|fragment|interwiki</kbd> paraméterrel.\nGenerátorként használva a céllapokat adja vissza a forráslapok helyett.",
+ "apihelp-query+allredirects-param-prop": "Visszaadandó információk:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Az átirányító lapok lapazonosítói (nem használható együtt az <var>$1unique</var> paraméterrel).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Az átirányítás címe.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Az átirányítás célszakasza, ha van (nem használható együtt az <var>$1unique</var> paraméterrel).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Az átirányítás céljának interwiki-előtagja, ha van (nem használható együtt az <var>$1unique</var> paraméterrel).",
+ "apihelp-query+allredirects-param-namespace": "A listázandó névtér.",
+ "apihelp-query+allredirects-param-limit": "A visszaadandó elemek maximális száma.",
+ "apihelp-query+allredirects-param-dir": "A listázás iránya.",
+ "apihelp-query+allredirects-example-B": "Céllapok listázása, a hiányzókat is beleértve, a forráslapok lapazonosítójával, <kbd>B</kbd>-től kezdve.",
+ "apihelp-query+allredirects-example-unique": "Különböző céllapok listázása.",
+ "apihelp-query+allredirects-example-unique-generator": "Az összes céllap lekérése, hiányzók megjelölése.",
+ "apihelp-query+allredirects-example-generator": "Az átirányításokat tartalmazó lapok lekérése.",
+ "apihelp-query+allrevisions-summary": "Az összes lapváltozat listázása.",
+ "apihelp-query+allrevisions-param-start": "A listázás kezdő időbélyege.",
+ "apihelp-query+allrevisions-param-end": "A lista végét jelentő időbélyeg.",
+ "apihelp-query+allrevisions-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+ "apihelp-query+allrevisions-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+ "apihelp-query+allrevisions-param-namespace": "Lapok listázása csak ebben a névtérben.",
+ "apihelp-query+allrevisions-param-generatetitles": "Generátorként használva címek visszaadása lapváltozat-azonosítók helyett.",
+ "apihelp-query+allrevisions-example-user": "<kbd>Example</kbd> 50 legutóbbi szerkesztésének listázása.",
+ "apihelp-query+allrevisions-example-ns-main": "A fő névtér első 50 szerkesztésének listázása.",
+ "apihelp-query+mystashedfiles-param-prop": "A fájlok lekérendő tulajdonságai.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "A fájlméret és a kép dimenziói (szélessége és magassága).",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "A fájl MIME-típusa és médiatípusa.",
+ "apihelp-query+mystashedfiles-param-limit": "A lekérendő fájlok száma.",
+ "apihelp-query+alltransclusions-summary": "Az összes beillesztés listázása (&#123;&#123;x&#125;&#125; kóddal beillesztett lapok), beleértve a nem létező lapokét is.",
+ "apihelp-query+alltransclusions-param-from": "Listázás ettől a beillesztett laptól.",
+ "apihelp-query+alltransclusions-param-to": "Listázás eddig a beillesztett lapig.",
+ "apihelp-query+alltransclusions-param-prefix": "Ezzel kezdődő című beillesztett lapok keresése.",
+ "apihelp-query+alltransclusions-param-unique": "Csak különböző beillesztett címek listázása. Nem használható együtt az <kbd>$1prop=ids</kbd> paraméterrel.\nGenerátorként használva a céllapokat adja vissza a forráslapok helyett.",
+ "apihelp-query+alltransclusions-param-prop": "Visszaadandó információk:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "A lapokat beillesztő lapok lapazonosítói (nem használható együtt az <var>$1unique</var> paraméterrel).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "A beillesztés címe.",
+ "apihelp-query+alltransclusions-param-namespace": "A listázandó névtér.",
+ "apihelp-query+alltransclusions-param-limit": "A visszaadandó elemek maximális száma.",
+ "apihelp-query+alltransclusions-param-dir": "A listázás iránya.",
+ "apihelp-query+alltransclusions-example-B": "Beillesztett lapok listázása, a hiányzókat is beleértve, a forráslapok lapazonosítójával, <kbd>B</kbd>-től kezdve.",
+ "apihelp-query+alltransclusions-example-unique": "Különböző beillesztett címek listázása.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Az összes beillesztett lap lekérése, hiányzók megjelölése.",
+ "apihelp-query+alltransclusions-example-generator": "A beillesztéseket tartalmazó lapok lekérése.",
+ "apihelp-query+allusers-summary": "Az összes regisztrált felhasználó visszaadása.",
+ "apihelp-query+allusers-param-from": "A felhasználók listázása ettől a névtől.",
+ "apihelp-query+allusers-param-to": "A felhasználók listázása eddig a névig.",
+ "apihelp-query+allusers-param-prefix": "Ezzel kezdődő nevű felhasználók keresése.",
+ "apihelp-query+allusers-param-dir": "A rendezés iránya.",
+ "apihelp-query+allusers-param-group": "Csak megadott csoportokba tartozó felhasználók visszaadása.",
+ "apihelp-query+allusers-param-excludegroup": "Csak a megadott csoportokba <em>nem</em> tartozó felhasználók visszaadása.",
+ "apihelp-query+allusers-param-rights": "Csak a megadott jogosultságokkal rendelkező felhasználók visszaadása. Ez nem tartalmazza azokat a jogosultságokat, amiket implicit vagy automatikusan hozzáadott csoportok adnak meg, mint a *, a user vagy az autoconfirmed.",
+ "apihelp-query+allusers-param-prop": "Visszaadandó információk:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Információk a felhasználó jelenleg érvényes blokkjáról.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "A felhasználó csoportjai. Ez több szervererőforrást használ, és lehet, hogy a limitnél kevesebb eredményt ad vissza.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "A felhasználó automatikus csoportjai.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "A felhasználó jogosultságai.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "A felhasználó szerkesztésszáma.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "A felhasználó regisztrációjának időbélyege, ha elérhető (lehet üres).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "A felhasználó központi azonosítói és az összekapcsolási státusza.",
+ "apihelp-query+allusers-param-limit": "A visszaadandó felhasználónevek maximális száma.",
+ "apihelp-query+allusers-param-witheditsonly": "Csak szerkesztéssel rendelkező felhasználók listázása.",
+ "apihelp-query+allusers-param-activeusers": "Csak az elmúlt $1 napban aktív felhasználók listázása.",
+ "apihelp-query+allusers-param-attachedwiki": "Az <kbd>$1prop=centralids</kbd> paraméter mellett annak jelzése, hogy a felhasználó össze van-e kapcsolva a megadott wikivel.",
+ "apihelp-query+allusers-example-Y": "A felhasználók listázása <kbd>Y</kbd>-tól kezdve.",
+ "apihelp-query+authmanagerinfo-summary": "Információk lekérése az aktuális azonosítási státuszról.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Annak ellenőrzése, hogy a felhasználó jelenlegi azonosítási státusza megfelelő-e a megadott biztonságkritikus művelethez.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Információk lekérése a megadott azonosítási művelethez szükséges azonosítási kérésekről.",
+ "apihelp-query+authmanagerinfo-example-login": "Egy bejelentkezés elkezdéséhez használható kérések lekérése.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Egy bejelentkezés elkezdéséhez használható kérések lekérése, az űrlapmezők összevonásával.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Annak ellenőrzése, hogy a hitelesítés megfelelő-e a <kbd>foo</kbd> művelethez.",
+ "apihelp-query+backlinks-summary": "Egy adott lapra hivatkozó más lapok megkeresése.",
+ "apihelp-query+backlinks-param-title": "A keresendő cím. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+ "apihelp-query+backlinks-param-pageid": "A keresendő lapazonosító. Nem használható együtt a <var>$1title</var> paraméterrel.",
+ "apihelp-query+backlinks-param-namespace": "A listázandó névtér.",
+ "apihelp-query+backlinks-param-dir": "A listázás iránya.",
+ "apihelp-query+backlinks-param-filterredir": "Az átirányítások szűrése. Ha <kbd>nonredirects</kbd>, és a <var>$1redirect</var> paraméter engedélyezett, csak a második szintre érvényes.",
+ "apihelp-query+backlinks-param-limit": "A visszaadandó lapok maximális száma. Ha a <var>$1redirect</var> engedélyezve van, ez a limit minden szintre külön érvényes (vagyis összesen 2 × <var>$1limit</var> eredmény lehet a válaszban).",
+ "apihelp-query+backlinks-param-redirect": "Ha a hivatkozó lap átirányítás, az arra hivatkozó lapok keresése szintén. A maximális limit feleződik.",
+ "apihelp-query+backlinks-example-simple": "A <kbd>Main Page</kbd> lapra mutató hivatkozások keresése.",
+ "apihelp-query+backlinks-example-generator": "Információk lekérése a <kbd>Main Page</kbd>-re hivatkozó lapokról.",
+ "apihelp-query+blocks-summary": "Az összes blokkolt felhasználó és IP-cím listázása.",
+ "apihelp-query+blocks-param-start": "A listázás kezdő időbélyege.",
+ "apihelp-query+blocks-param-end": "A lista végét jelentő időbélyeg.",
+ "apihelp-query+blocks-param-ids": "A listázandó blokkok blokkazonosítói (opcionális).",
+ "apihelp-query+blocks-param-users": "A keresendő felhasználók (opcionális).",
+ "apihelp-query+blocks-param-ip": "Minden erre az IP-címre vagy CIDR tartományra vonatkozó blokk listázása, a tartományblokkokat is beleértve. Nem használható együtt a <var>$3users</var> paraméterrel. A CIDR tartományok maximális szélessége IPv4 esetén /$1, IPv6 esetén /$2.",
+ "apihelp-query+blocks-param-limit": "A listázandó blokkok maximális száma.",
+ "apihelp-query+blocks-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+blocks-paramvalue-prop-id": "A blokk azonosítója.",
+ "apihelp-query+blocks-paramvalue-prop-user": "A blokkolt felhasználó felhasználóneve.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "A blokkolt felhasználó felhasználóazonosítója.",
+ "apihelp-query+blocks-paramvalue-prop-by": "A blokkoló felhasználó felhasználóneve.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "A blokkoló felhasználó felhasználóazonosítója.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "A blokkolás időbélyege.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "A blokk lejáratának időbélyege.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "A blokk indoklása.",
+ "apihelp-query+blocks-paramvalue-prop-range": "A blokk által érintett IP-címek tartománya.",
+ "apihelp-query+blocks-param-show": "Csak a megadott feltételeknek megfelelő elemek megjelenítése.\nPéldául csak IP-címek végtelen blokkjainak megjelenítéséhez állítsd <kbd>$1show=ip|!temp</kbd> értékre.",
+ "apihelp-query+blocks-example-simple": "Blokkok listázása.",
+ "apihelp-query+blocks-example-users": "<kbd>Alice</kbd> és <kbd>Bob</kbd> blokkjainak listázása.",
+ "apihelp-query+categories-summary": "A lapok összes kategóriájának listázása.",
+ "apihelp-query+categories-param-prop": "A kategóriákhoz lekérendő további tulajdonságok:",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "A kategória hozzáadásának időbélyege.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "A <code>_&#95;HIDDENCAT_&#95;</code> kapcsolóval elrejtett kategóriák megjelölése.",
+ "apihelp-query+categories-param-show": "A megjelenítendő kategóriatípusok.",
+ "apihelp-query+categories-param-limit": "A visszaadandó kategóriák száma.",
+ "apihelp-query+categories-param-categories": "Csak ezen kategóriák listázása. Annak ellenőrzésére alkalmas, hogy egy lap benne van-e egy adott kategóriában.",
+ "apihelp-query+categories-param-dir": "A listázás iránya.",
+ "apihelp-query+categories-example-simple": "Az <kbd>Albert Einstein</kbd> lap kategóriáinak lekérése.",
+ "apihelp-query+categories-example-generator": "Információk lekérése az <kbd>Albert Einstein</kbd> lap kategóriáiról.",
+ "apihelp-query+categoryinfo-summary": "Információk lekérése a megadott kategóriákról.",
+ "apihelp-query+categoryinfo-example-simple": "Információk lekérése a <kbd>Category:Foo</kbd> és a <kbd>Category:Bar</kbd> kategóriáról.",
+ "apihelp-query+categorymembers-summary": "Egy kategória összes tagjának listázása.",
+ "apihelp-query+categorymembers-param-title": "A listázandó kategória (kötelező). Tartalmaznia kell a <kbd>{{ns:category}}:</kbd> előtagot. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+ "apihelp-query+categorymembers-param-pageid": "A listázandó kategória lapazonosítója. Nem használható együtt a <var>$1title</var> paraméterrel.",
+ "apihelp-query+categorymembers-param-prop": "Visszaadandó információk:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "A lap lapazonosítója.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "A lap címe és névterének azonosítója.",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "A lap kategorizálási típusa (<samp>page</samp>, <samp>subcat</samp> vagy <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "A lap bekategorizálásának időbélyege.",
+ "apihelp-query+categorymembers-param-namespace": "Csak ezen névterekben található lapok visszaadása. A <kbd>$1namespace=14</kbd> és <kbd>$1namespace=6</kbd> helyett használható <kbd>$1type=subcat</kbd>, illetve <kbd>$1type=file</kbd>.",
+ "apihelp-query+categorymembers-param-type": "A megadott kategorizálási típusú lapok visszaadása. Nincs hatása, ha a <var>$1sort</var> paraméter értéke <kbd>timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "A lekérdezendő lapok maximális száma.",
+ "apihelp-query+categorymembers-param-sort": "Rendezési szempont.",
+ "apihelp-query+categorymembers-param-dir": "A rendezés iránya.",
+ "apihelp-query+categorymembers-param-start": "A listázás kezdő időbélyege. Csak <kbd>$1sort=timestamp</kbd> paraméterrel együtt használható.",
+ "apihelp-query+categorymembers-param-end": "A lista végét jelentő időbélyeg. Csak <kbd>$1sort=timestamp</kbd> paraméterrel együtt használható.",
+ "apihelp-query+categorymembers-param-startsortkey": "Használd a <var>$1starthexsortkey</var> paramétert helyette.",
+ "apihelp-query+categorymembers-param-endsortkey": "Használd a <var>$1endhexsortkey</var> paramétert helyette.",
+ "apihelp-query+categorymembers-example-simple": "A <kbd>Category:Physics</kbd> első 10 tagjának lekérése.",
+ "apihelp-query+categorymembers-example-generator": "Információk lekérése a <kbd>Category:Physics</kbd> első 10 tagjáról.",
+ "apihelp-query+contributors-summary": "Egy lap bejelentkezett közreműködői listájának, valamint az anonim közreműködők számának lekérése.",
+ "apihelp-query+contributors-param-group": "Csak a megadott felhasználócsoportok tagjainak visszaadása. Ez nem tartalmazza az implicit vagy automatikusan hozzáadott csoportokat, mint a *, a user vagy az autoconfirmed.",
+ "apihelp-query+contributors-param-excludegroup": "A megadott felhasználócsoportok tagjainak kihagyása. Ez nem tartalmazza az implicit vagy automatikusan hozzáadott csoportokat, mint a *, a user vagy az autoconfirmed.",
+ "apihelp-query+contributors-param-rights": "Csak a megadott jogosultságokkal rendelkező felhasználók visszaadása. Ez nem tartalmazza azokat a jogosultságokat, amiket implicit vagy automatikusan hozzáadott csoportok adnak meg, mint a *, a user vagy az autoconfirmed.",
+ "apihelp-query+contributors-param-excluderights": "A megadott jogosultságokkal rendelkező felhasználók kizárása. Ez nem tartalmazza azokat a jogosultságokat, amiket implicit vagy automatikusan hozzáadott csoportok adnak meg, mint a *, a user vagy az autoconfirmed.",
+ "apihelp-query+contributors-param-limit": "A visszaadandó közreműködők maximális száma.",
+ "apihelp-query+contributors-example-simple": "A <kbd>Main Page</kbd> lap közreműködőinek lekérése.",
+ "apihelp-query+deletedrevisions-param-start": "Listázás ettől az időbélyegtől. Nincs hatása, ha lapváltozat-azonosítók vannak megadva.",
+ "apihelp-query+deletedrevisions-param-end": "A lista végét jelentő időbélyeg. Nincs hatása, ha lapváltozat-azonosítók vannak megadva.",
+ "apihelp-query+deletedrevisions-param-tag": "Csak ezzel a címkével ellátott változatok listázása.",
+ "apihelp-query+deletedrevisions-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+ "apihelp-query+deletedrevisions-example-titles": "A <kbd>Main Page</kbd> és <kbd>Talk:Main Page</kbd> lapok törölt lapváltozatainak listázása tartalommal.",
+ "apihelp-query+deletedrevisions-example-revids": "Információk listázása az <kbd>123456</kbd> törölt lapváltozatról.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mód|Módok}}: $2",
+ "apihelp-query+deletedrevs-param-start": "A listázás kezdő időbélyege.",
+ "apihelp-query+deletedrevs-param-end": "A lista végét jelentő időbélyeg.",
+ "apihelp-query+deletedrevs-param-from": "Listázás ettől a címtől.",
+ "apihelp-query+deletedrevs-param-to": "Listázás eddig a címig.",
+ "apihelp-query+deletedrevs-param-prefix": "Ezzel kezdődő című lapok keresése.",
+ "apihelp-query+deletedrevs-param-unique": "Egyetlen lapváltozat listázása minden laphoz.",
+ "apihelp-query+deletedrevs-param-tag": "Csak ezzel a címkével ellátott változatok listázása.",
+ "apihelp-query+deletedrevs-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+ "apihelp-query+deletedrevs-param-namespace": "Lapok listázása csak ebben a névtérben.",
+ "apihelp-query+deletedrevs-param-limit": "A listázandó lapváltozatok maximális száma.",
+ "apihelp-query+deletedrevs-example-mode1": "<kbd>Main Page</kbd> és <kbd>Talk:Main Page</kbd> utolsó törölt lapváltozatainak listázása tartalommal (1. mód).",
+ "apihelp-query+deletedrevs-example-mode2": "<kbd>Bob</kbd> felhasználó utolsó 50 törölt szerkesztésének listázása (2. mód).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Az első 50 törölt lapváltozat listázása a fő névtérben (3. mód).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Az első 50 törölt lapváltozat listázása a {{ns:talk}} névtérben (3. mód).",
+ "apihelp-query+disabled-summary": "Ez a lekérdezőmodul le lett tiltva.",
+ "apihelp-query+duplicatefiles-param-limit": "A visszaadandó duplikátumok száma.",
+ "apihelp-query+duplicatefiles-param-dir": "A listázás iránya.",
+ "apihelp-query+duplicatefiles-param-localonly": "Csak helyi fájlok keresése.",
+ "apihelp-query+duplicatefiles-example-simple": "[[:File:Albert Einstein Head.jpg]] duplikátumainak keresése.",
+ "apihelp-query+duplicatefiles-example-generated": "Az összes fájl duplikátumainak keresése.",
+ "apihelp-query+embeddedin-summary": "A megadott lapot beillesztő összes lap lekérése.",
+ "apihelp-query+embeddedin-param-title": "A keresendő lap címe. Nem használható együtt az <var>$1pageid</var> paraméterrel.",
+ "apihelp-query+embeddedin-param-pageid": "A keresendő lap lapazonosítója. Nem használható együtt az <var>$1title</var> paraméterrel.",
+ "apihelp-query+embeddedin-param-namespace": "A listázandó névtér.",
+ "apihelp-query+embeddedin-param-dir": "A listázás iránya.",
+ "apihelp-query+embeddedin-param-filterredir": "Szűrés átirányítások alapján.",
+ "apihelp-query+embeddedin-param-limit": "A visszaadandó lapok maximális száma.",
+ "apihelp-query+embeddedin-example-simple": "A <kbd>Template:Stub</kbd> lapot beillesztő lapok megjelenítése.",
+ "apihelp-query+embeddedin-example-generator": "Információk lekérése a <kbd>Template:Stub</kbd> lapot beillesztő lapokról.",
+ "apihelp-query+extlinks-summary": "A megadott lapokon található összes külső (nem interwiki) link visszaadása.",
+ "apihelp-query+extlinks-param-limit": "A visszaadandó linkek száma.",
+ "apihelp-query+extlinks-param-protocol": "Az URL protokollja. Ha üres és az <var>$1query</var> paraméter meg van adva, a protokoll <kbd>http</kbd>. Hagyd ezt és az <var>$1query</var> paramétert is üresen az összes külső link listázásához.",
+ "apihelp-query+extlinks-example-simple": "A <kbd>Main Page</kbd> lapon található összes külső hivatkozás listájának lekérése.",
+ "apihelp-query+exturlusage-summary": "Egy megadott URL-t tartalmazó lapok visszaadása.",
+ "apihelp-query+exturlusage-param-prop": "Visszaadandó információk:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "A lap lapazonosítója.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "A lap címe és névterének azonosítója.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "A lapon használt URL.",
+ "apihelp-query+exturlusage-param-protocol": "Az URL protokollja. Ha üres és az <var>$1query</var> paraméter meg van adva, a protokoll <kbd>http</kbd>. Hagyd ezt és az <var>$1query</var> paramétert is üresen az összes külső link listázásához.",
+ "apihelp-query+exturlusage-param-namespace": "A listázandó névtér.",
+ "apihelp-query+exturlusage-param-limit": "A visszaadandó lapok száma.",
+ "apihelp-query+exturlusage-example-simple": "A <kbd>https://www.mediawiki.org</kbd> URL-re hivatkozó lapok megjelenítése.",
+ "apihelp-query+filearchive-summary": "Az összes törölt fájl visszaadása.",
+ "apihelp-query+filearchive-param-from": "A fájlok listázása ettől a címtől.",
+ "apihelp-query+filearchive-param-to": "A fájlok listázása eddig a címig.",
+ "apihelp-query+filearchive-param-prefix": "Ezzel kezdődő című fájlok keresése.",
+ "apihelp-query+filearchive-param-limit": "A visszaadandó fájlok száma.",
+ "apihelp-query+filearchive-param-dir": "A listázás iránya.",
+ "apihelp-query+filearchive-param-prop": "A lekérendő információk:",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "A feltöltött verzió időbélyege.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "A fájlverzió feltöltője.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "A fájl mérete bájtban, magassága, szélessége és oldalszáma (ha értelmezhető).",
+ "apihelp-query+filearchive-paramvalue-prop-description": "A fájlverzió leírása.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "A fájl MIME-típusa.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "A fájl médiatípusa.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "A fájlverzió EXIF-metaadatai.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "A verzió bitmélysége.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Az archivált verzió fájlneve a nem legújabb verziók esetén.",
+ "apihelp-query+filearchive-example-simple": "Az összes törölt fájl listázása.",
+ "apihelp-query+filerepoinfo-summary": "Metainformációk visszaadása a wikin beállított fájltárolókról.",
+ "apihelp-query+filerepoinfo-example-simple": "Információk lekérése a fájltárolókról.",
+ "apihelp-query+fileusage-summary": "A megadott fájlokat használó lapok lekérése.",
+ "apihelp-query+fileusage-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "A lapok lapazonosítói.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "A lapok címei.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Az átirányítások megjelölése.",
+ "apihelp-query+fileusage-param-namespace": "Lapok listázása ezekben a névterekben.",
+ "apihelp-query+fileusage-param-limit": "A visszaadandó lapok száma.",
+ "apihelp-query+fileusage-param-show": "Szűrés az átirányítások alapján:\n;redirect: Csak átirányítások visszaadása.\n;!redirect: Átirányítások elrejtése.",
+ "apihelp-query+fileusage-example-simple": "A [[:File:Example.jpg]] képet használó lapok listázása.",
+ "apihelp-query+fileusage-example-generator": "Információk lekérése a [[:File:Example.jpg]] képet használó lapokról.",
+ "apihelp-query+imageinfo-summary": "Fájlinformációk és fájltörténet lekérése.",
+ "apihelp-query+imageinfo-param-prop": "A lekérendő fájlinformációk:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "A feltöltött verzió időbélyege.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Az egyes fájlverziók feltöltői.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Az egyes fájlverziók feltöltőinek felhasználóazonosítói.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "A verzió feltöltési összefoglalója.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "A fájlra és a leírólapra mutató URL.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "A fájl mérete bájtban, magassága, szélessége és oldalszáma (ha értelmezhető).",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "SHA-1 hash hozzáadása a fájlhoz.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "MIME-típus hozzáadása a fájlhoz.",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "A fájl médiatípusa.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "A fájlverzió EXIF-metaadatai.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "A formázott metaadatok több forrásból kombinálva. A kimenet HTML-formázott.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Az archivált verzió fájlneve a nem legújabb verziók esetén.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "A verzió bitmélysége.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "A Speciális:Feltöltés lap használja egy létező fájl információinak lekéréséhez. Nem készült a MediaWiki magján kívüli használatra.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "A fájl szerepel-e a [[MediaWiki:Bad image list]] listán.",
+ "apihelp-query+imageinfo-param-limit": "A fájlonként visszaadandó verziók száma.",
+ "apihelp-query+imageinfo-param-start": "A listázás kezdő időbélyege.",
+ "apihelp-query+imageinfo-param-end": "A lista végét jelentő időbélyeg.",
+ "apihelp-query+imageinfo-param-urlwidth": "Ha az <kbd>$2prop=url</kbd> meg van adva, erre a szélességre méretezett kép URL-jét adja vissza.\nTeljesítményi okokból ezen opció használatakor legfeljebb $1 átméretezett képet ad vissza.",
+ "apihelp-query+imageinfo-param-urlheight": "Az <var>$1urlwidth</var> paraméterhez hasonló.",
+ "apihelp-query+imageinfo-param-metadataversion": "A használandó metaadat-verzió. Ha <kbd>latest</kbd>, a legfrissebb verzió használata. Alapértelmezetten <kbd>1</kbd> a visszamenőleges kompatibilitás érdekében.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Ha elérhetők fordítások az <var>extmetadata</var> tulajdonsághoz, az összes lekérése.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Ha meg van adva és nem üres, csak ezeket a tulajdonságokat adja vissza az <kbd>$1prop=extmetadata</kbd> paraméter esetén.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Ha a <kbd>$2prop=badfile</kbd> meg van adva, ezen cím használata a [[MediaWiki:Bad image list]] kiértékeléskor.",
+ "apihelp-query+imageinfo-param-localonly": "Csak helyi fájlok keresése.",
+ "apihelp-query+imageinfo-example-simple": "Információk lekérése a [[:File:Albert Einstein Head.jpg]] aktuális verziójáról.",
+ "apihelp-query+imageinfo-example-dated": "Információk lekérése a [[:File:Test.jpg]] 2008-as és korábbi verzióiról.",
+ "apihelp-query+images-summary": "A megadott lapokon használt összes fájl visszaadása.",
+ "apihelp-query+images-param-limit": "A visszaadandó fájlok száma.",
+ "apihelp-query+images-param-images": "Csak ezen fájlok listázása. Annak ellenőrzésére alkalmas, hogy egy lap használ-e egy adott fájlt.",
+ "apihelp-query+images-param-dir": "A listázás iránya.",
+ "apihelp-query+images-example-simple": "A [[Main Page]] lapon használt fájlok listázása.",
+ "apihelp-query+images-example-generator": "Információk lekérése a [[Main Page]] lapon használt fájlokról.",
+ "apihelp-query+imageusage-summary": "A megadott képcímet használó lapok lekérése.",
+ "apihelp-query+imageusage-param-title": "A keresendő cím. Nem használható együtt az <var>$1pageid</var> paraméterrel.",
+ "apihelp-query+imageusage-param-pageid": "A keresendő lapazonosító. Nem használható együtt az <var>$1title</var> paraméterrel.",
+ "apihelp-query+imageusage-param-namespace": "A listázandó névtér.",
+ "apihelp-query+imageusage-param-dir": "A listázás iránya.",
+ "apihelp-query+imageusage-param-filterredir": "Az átirányítások szűrése. Ha <kbd>nonredirects</kbd>, és az <var>$1redirect</var> paraméter engedélyezett, csak a második szintre érvényes.",
+ "apihelp-query+imageusage-param-limit": "A visszaadandó lapok maximális száma. Ha az <var>$1redirect</var> engedélyezve van, ez a limit minden szintre külön érvényes (vagyis összesen 2 × <var>$1limit</var> eredmény lehet a válaszban).",
+ "apihelp-query+imageusage-param-redirect": "Ha a hivatkozó lap átirányítás, az arra hivatkozó lapok keresése szintén. A maximális limit feleződik.",
+ "apihelp-query+imageusage-example-simple": "A [[:File:Albert Einstein Head.jpg]] képet használó lapok megjelenítése.",
+ "apihelp-query+imageusage-example-generator": "Információk lekérése a [[:File:Albert Einstein Head.jpg]] képet használó lapokról.",
+ "apihelp-query+info-summary": "Alapvető lapinformációk lekérése.",
+ "apihelp-query+info-param-prop": "További lekérendő tulajdonságok:",
+ "apihelp-query+info-paramvalue-prop-protection": "A lapok védelmi szintjeinek listázása.",
+ "apihelp-query+info-paramvalue-prop-talkid": "A vitalap lapazonosítója a nem-vitalapoknál.",
+ "apihelp-query+info-paramvalue-prop-watched": "A lapok figyelési státusza.",
+ "apihelp-query+info-paramvalue-prop-watchers": "A lapot figyelők száma, ha lehetséges.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "A figyelők száma, akik látták a lap friss változtatásait, ha engedélyezett.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "A figyelőlista értesítési időbélyege.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "A tartalmi lap lapazonosítója a vitalapoknál.",
+ "apihelp-query+info-paramvalue-prop-readable": "A felhasználó olvashatja-e a lapot.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "A lap ténylegesen megjelenített címe.",
+ "apihelp-query+info-param-testactions": "Annak ellenőrzése, hogy a felhasználó végrehajthat-e bizonyos műveleteket a lapon.",
+ "apihelp-query+info-param-token": "Használd a <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> lekérdezést helyette.",
+ "apihelp-query+info-example-simple": "Információk lekérése a <kbd>Main Page</kbd> lapról.",
+ "apihelp-query+info-example-protection": "Alapvető és lapvédelmi információk lekérése a <kbd>Main Page</kbd> lapról.",
+ "apihelp-query+iwbacklinks-summary": "Egy adott interwikilinkre hivatkozó lapok lekérése.",
+ "apihelp-query+iwbacklinks-extended-description": "Használható adott előtagú vagy egy adott címre mutató (megadott előtagú) linkek keresésére. Mindkét paraméter elhagyásával az összes interwikilinket visszaadja.",
+ "apihelp-query+iwbacklinks-param-prefix": "Az interwiki előtagja.",
+ "apihelp-query+iwbacklinks-param-title": "A keresendő interwikilink. Az <var>$1blprefix</var> paraméterrel együtt használandó.",
+ "apihelp-query+iwbacklinks-param-limit": "A visszaadandó lapok maximális száma.",
+ "apihelp-query+iwbacklinks-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Az interwiki előtagja.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Az interwiki címe.",
+ "apihelp-query+iwbacklinks-param-dir": "A listázás iránya.",
+ "apihelp-query+iwbacklinks-example-simple": "A [[wikibooks:Test]] könyvre hivatkozó lapok lekérése.",
+ "apihelp-query+iwbacklinks-example-generator": "Információk lekérése a [[wikibooks:Test]] könyvre hivatkozó lapokról.",
+ "apihelp-query+iwlinks-summary": "A megadott lapokon található összes interwikilink lekérése.",
+ "apihelp-query+iwlinks-param-prop": "A nyelvközi hivatkozásokhoz lekérendő további tulajdonságok:",
+ "apihelp-query+iwlinks-param-limit": "A visszaadandó interwikilinkek száma.",
+ "apihelp-query+iwlinks-param-prefix": "Csak a megadott előtagú interwikilinkek visszaadása.",
+ "apihelp-query+iwlinks-param-title": "A keresendő interwikilink. Az <var>$1prefix</var> paraméterrel együtt használandó.",
+ "apihelp-query+iwlinks-param-dir": "A listázás iránya.",
+ "apihelp-query+iwlinks-example-simple": "A <kbd>Main Page</kbd> lapon található interwikilinkek lekérése.",
+ "apihelp-query+langbacklinks-summary": "A megadott nyelvközi hivatkozásra hivatkozó lapok lekérése.",
+ "apihelp-query+langbacklinks-extended-description": "Használható adott előtagú vagy egy adott címre mutató (megadott előtagú) linkek keresésére. Mindkét paraméter elhagyásával az összes nyelvközi hivatkozást visszaadja.\n\nEz a lekérdezés nem feltétlenül veszi figyelembe a kiterjesztések által hozzáadott nyelvközi hivatkozásokat.",
+ "apihelp-query+langbacklinks-param-lang": "A nyelvközi hivatkozás nyelve.",
+ "apihelp-query+langbacklinks-param-title": "A keresendő nyelvközi hivatkozás. Az <var>$1lang</var> paraméterrel együtt használandó.",
+ "apihelp-query+langbacklinks-param-limit": "A visszaadandó lapok maximális száma.",
+ "apihelp-query+langbacklinks-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "A nyelvközi hivatkozás nyelvkódja.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "A nyelvközi hivatkozás címe.",
+ "apihelp-query+langbacklinks-param-dir": "A listázás iránya.",
+ "apihelp-query+langbacklinks-example-simple": "A [[:fr:Test]] lapra hivatkozó lapok lekérése.",
+ "apihelp-query+langbacklinks-example-generator": "Információk lekérése a [[:fr:Test]] lapra hivatkozó lapokról.",
+ "apihelp-query+langlinks-summary": "A megadott lapokon található összes nyelvközi hivatkozás lekérése.",
+ "apihelp-query+langlinks-param-limit": "A visszaadandó nyelvközi hivatkozások száma.",
+ "apihelp-query+langlinks-param-prop": "A nyelvközi hivatkozásokhoz lekérendő további tulajdonságok:",
+ "apihelp-query+langlinks-param-lang": "Csak ezen nyelvű nyelvközi hivatkozások visszaadása.",
+ "apihelp-query+langlinks-param-title": "A keresendő hivatkozás. Az <var>$1prefix</var> paraméterrel együtt használandó.",
+ "apihelp-query+langlinks-param-dir": "A listázás iránya.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Nyelvkód a lefordított nyelvneveknek.",
+ "apihelp-query+langlinks-example-simple": "A <kbd>Main Page</kbd> lapon található nyelvközi hivatkozások lekérése.",
+ "apihelp-query+links-summary": "A megadott lapokon található összes hivatkozás lekérése.",
+ "apihelp-query+links-param-namespace": "Csak az ezen névterekbe mutató hivatkozások visszaadása.",
+ "apihelp-query+links-param-limit": "A visszaadandó hivatkozások száma.",
+ "apihelp-query+links-param-titles": "Csak ezen címekre mutató hivatkozások listázása. Annak ellenőrzésére alkalmas, hogy egy lap hivatkozik-e egy adott lapra.",
+ "apihelp-query+links-param-dir": "A listázás iránya.",
+ "apihelp-query+links-example-simple": "A <kbd>Main Page</kbd> lapon található hivatkozások lekérése.",
+ "apihelp-query+links-example-generator": "Információk lekérése a <kbd>Main Page</kbd> lapon lévő hivatkozások céllapjairól.",
+ "apihelp-query+links-example-namespaces": "A <kbd>Main Page</kbd> lapon található, {{ns:user}} és {{ns:template}} névterekbe mutató hivatkozások lekérése.",
+ "apihelp-query+linkshere-summary": "A megadott lapra hivatkozó lapok lekérése.",
+ "apihelp-query+linkshere-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "A lapok lapazonosítói.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "A lapok címei.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Az átirányítások megjelölése.",
+ "apihelp-query+linkshere-param-namespace": "Lapok listázása ezekben a névterekben.",
+ "apihelp-query+linkshere-param-limit": "A visszaadandó lapok száma.",
+ "apihelp-query+linkshere-param-show": "Szűrés az átirányítások alapján:\n;redirect: Csak átirányítások visszaadása.\n;!redirect: Átirányítások elrejtése.",
+ "apihelp-query+linkshere-example-simple": "A [[Main Page]] lapra hivatkozó lapok listázása.",
+ "apihelp-query+linkshere-example-generator": "Információk lekérése a [[Main Page]] lapra hivatkozó lapokról.",
+ "apihelp-query+logevents-summary": "Naplóbejegyzések lekérése.",
+ "apihelp-query+logevents-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "A naplóbejegyzés azonosítója.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Az eseményben érintett lap címe.",
+ "apihelp-query+logevents-paramvalue-prop-type": "A naplóbejegyzés típusa.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Az eseményért felelős felhasználó.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Az eseményért felelős felhasználó azonosítója.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "A naplóbejegyzés időbélyege.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "A naplóbejegyzéshez tartozó megjegyzés.",
+ "apihelp-query+logevents-paramvalue-prop-details": "További részletek a naplóbejegyzésről.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "A naplóbejegyzés címkéi.",
+ "apihelp-query+logevents-param-type": "Csak ezen típusú naplóbejegyzések visszaadása.",
+ "apihelp-query+logevents-param-start": "A listázás kezdő időbélyege.",
+ "apihelp-query+logevents-param-end": "A lista végét jelentő időbélyeg.",
+ "apihelp-query+logevents-param-user": "A bejegyzések szűrése az ezen felhasználó által végrehajtottakra.",
+ "apihelp-query+logevents-param-title": "A bejegyzések szűrése az ezen laphoz kapcsolódóakra.",
+ "apihelp-query+logevents-param-namespace": "A bejegyzések szűrése névtér alapján.",
+ "apihelp-query+logevents-param-prefix": "A bejegyzések szűrése az ezzel az előtaggal kezdődőekre.",
+ "apihelp-query+logevents-param-tag": "Csak ezzel a címkével ellátott bejegyzések listázása.",
+ "apihelp-query+logevents-param-limit": "A visszaadandó bejegyzések száma.",
+ "apihelp-query+logevents-example-simple": "A legutóbbi naplóbejegyzések listázása.",
+ "apihelp-query+pagepropnames-summary": "A wikin elérhető laptulajdonságnevek listázása.",
+ "apihelp-query+pagepropnames-param-limit": "A visszaadandó nevek maximális száma.",
+ "apihelp-query+pagepropnames-example-simple": "Az első 10 tulajdonságnév lekérése.",
+ "apihelp-query+pageprops-summary": "A lap tartalmában meghatározott különböző laptulajdonságok lekérése.",
+ "apihelp-query+pageprops-param-prop": "Csak ezen laptulajdonságok listázása (az [[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]] visszaadja a használatban lévő laptulajdonságokat). Annak ellenőrzésére alkalmas, hogy egy lap benne használ-e egy adott laptulajdonságot.",
+ "apihelp-query+pageprops-example-simple": "A <kbd>Main Page</kbd> és <kbd>MediaWiki</kbd> lap tulajdonságainak lekérése.",
+ "apihelp-query+pageswithprop-summary": "Egy adott laptulajdonságot használó lapok listázása.",
+ "apihelp-query+pageswithprop-param-propname": "A listázandó laptulajdonság (az [[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]] visszaadja a használatban lévő laptulajdonságokat).",
+ "apihelp-query+pageswithprop-param-prop": "Visszaadandó információk:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "A lap lapazonosítója.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "A lap címe és névterének azonosítója.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "A laptulajdonság értéke.",
+ "apihelp-query+pageswithprop-param-limit": "A lekérdezendő lapok maximális száma.",
+ "apihelp-query+pageswithprop-param-dir": "A rendezés iránya.",
+ "apihelp-query+pageswithprop-example-simple": "Az első 10 <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>-t használó lap listázása.",
+ "apihelp-query+pageswithprop-example-generator": "További információk lekérése az első 10 <code>_&#95;NOTOC_&#95;</code> kapcsolót használó lapról.",
+ "apihelp-query+prefixsearch-param-search": "A keresőkifejezés.",
+ "apihelp-query+prefixsearch-param-namespace": "A keresendő névterek.",
+ "apihelp-query+prefixsearch-param-limit": "Találatok maximális száma.",
+ "apihelp-query+prefixsearch-param-offset": "Kihagyandó találatok száma.",
+ "apihelp-query+prefixsearch-example-simple": "<kbd>meaning</kbd> kezdetű lapcímek keresése.",
+ "apihelp-query+prefixsearch-param-profile": "Használandó keresőprofil.",
+ "apihelp-query+protectedtitles-summary": "Létrehozás ellen védett lapok listázása.",
+ "apihelp-query+protectedtitles-param-namespace": "Címek listázása csak ezekben a névterekben.",
+ "apihelp-query+protectedtitles-param-level": "Csak ilyen védelmi szintű címek listázása.",
+ "apihelp-query+protectedtitles-param-limit": "A visszaadandó lapok maximális száma.",
+ "apihelp-query+protectedtitles-param-start": "Listázás ettől a védelem-időbélyegtől.",
+ "apihelp-query+protectedtitles-param-end": "Listázás eddig a védelem-időbélyegig.",
+ "apihelp-query+protectedtitles-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "A levédés időbélyege.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "A levédő felhasználó.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "A levédő felhasználó azonosítója.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "A védelem indoka.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "A védelem lejáratának időbélyege.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Védelmi szint.",
+ "apihelp-query+protectedtitles-example-simple": "A védett címek listázása.",
+ "apihelp-query+protectedtitles-example-generator": "A fő névtérben lévő védett címekre mutató hivatkozások lekérése.",
+ "apihelp-query+querypage-summary": "Egy QueryPage-alapú speciális lap listájának lekérése.",
+ "apihelp-query+querypage-param-limit": "Megjelenítendő találatok száma.",
+ "apihelp-query+querypage-example-ancientpages": "A [[Special:Ancientpages]] eredményeinek lekérése.",
+ "apihelp-query+random-param-namespace": "Lapok visszaadása csak ezekből a névterekből.",
+ "apihelp-query+random-param-limit": "A visszaadandó véletlenszerű lapok száma.",
+ "apihelp-query+random-param-redirect": "Használd a <kbd>$1filterredir=redirects</kbd> paramétert helyette.",
+ "apihelp-query+random-param-filterredir": "Szűrés átirányítások alapján.",
+ "apihelp-query+random-example-simple": "Két lap visszaadása találomra a fő névtérből.",
+ "apihelp-query+random-example-generator": "Lapinformációk lekérése két véletlenszerűen kiválasztott fő névtérbeli lapról.",
+ "apihelp-query+recentchanges-summary": "A friss változtatások listázása.",
+ "apihelp-query+recentchanges-param-start": "Listázás ettől az időbélyegtől.",
+ "apihelp-query+recentchanges-param-end": "Listázás eddig az időbélyegig.",
+ "apihelp-query+recentchanges-param-namespace": "A változtatások szűrése ezekre a névterekre.",
+ "apihelp-query+recentchanges-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+ "apihelp-query+recentchanges-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+ "apihelp-query+recentchanges-param-tag": "Csak ezzel a címkével ellátott szerkesztések listázása.",
+ "apihelp-query+recentchanges-param-prop": "További információk visszaadása:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "A szerkesztést végrehajtó felhasználó, és hogy anonim-e.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "A szerkesztést végrehajtó felhasználó azonosítója.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "A szerkesztési összefoglaló.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "A szerkesztés időbélyege.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "A szerkesztett lap címe.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "A lapazonosító, frissváltoztatások-azonosító, valamint a régi és az új lapváltozat-azonosító.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "A lap régi és új hossza bájtban.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "A lap átirányítás-e.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Az ellenőrizhető (patrol) szerkesztések megjelölése ellenőrzöttként vagy ellenőrizetlenként.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Naplóinformációk (naplóazonosító, naplótípus stb.) a naplóbejegyzésekhez.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "A változtatás címkéi.",
+ "apihelp-query+recentchanges-param-token": "Használd a <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> lekérdezést helyette.",
+ "apihelp-query+recentchanges-param-show": "Csak a kritériumoknak megfelelő elemek visszaadása. Például csak bejelentkezett felhasználók apró változtatásainak megtekintéséhez használd az <kbd>$1show=minor|!anon</kbd> értéket.",
+ "apihelp-query+recentchanges-param-limit": "A visszaadandó változások maximális száma.",
+ "apihelp-query+recentchanges-param-type": "A visszaadandó változások típusai.",
+ "apihelp-query+recentchanges-param-toponly": "Csak a lapok legfrissebb változtatásának visszaadása.",
+ "apihelp-query+recentchanges-example-simple": "Friss változtatások listázása.",
+ "apihelp-query+recentchanges-example-generator": "Lapinformációk lekérése az ellenőrizetlen változtatásokról (patrol).",
+ "apihelp-query+redirects-summary": "A megadott lapokra mutató átirányítások lekérése.",
+ "apihelp-query+redirects-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "Az átirányítások lapazonosítói.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Az átirányítások címei.",
+ "apihelp-query+redirects-param-namespace": "Lapok listázása csak ezekben a névterekben.",
+ "apihelp-query+redirects-param-limit": "A visszaadandó átirányítások száma.",
+ "apihelp-query+redirects-example-simple": "A [[Main Page]] lapra mutató átirányítások listázása.",
+ "apihelp-query+redirects-example-generator": "Információk lekérése a [[Main Page]] lapra mutató átirányításokról.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Csak egyetlen lappal használható (2. mód).",
+ "apihelp-query+revisions-param-startid": "Listázás ennek a lapváltozatnak az időbélyegétől. A lapváltozatnak léteznie kell, de nem szükséges ehhez a laphoz tartoznia.",
+ "apihelp-query+revisions-param-endid": "Listázás ennek a lapváltozatnak az időbélyegéig. A lapváltozatnak léteznie kell, de nem szükséges ehhez a laphoz tartoznia.",
+ "apihelp-query+revisions-param-start": "Listázás ettől az időbélyegtől.",
+ "apihelp-query+revisions-param-end": "Listázás eddig az időbélyegig.",
+ "apihelp-query+revisions-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+ "apihelp-query+revisions-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+ "apihelp-query+revisions-param-tag": "Csak ezzel a címkével ellátott változatok listázása.",
+ "apihelp-query+revisions-param-token": "Az egyes lapváltozatokhoz lekérendő tokenek.",
+ "apihelp-query+revisions-example-content": "Adatok lekérése tartalommal az <kbd>API</kbd> és <kbd>Main Page</kbd> lapok legfrissebb változatáról.",
+ "apihelp-query+revisions-example-last5": "A <kbd>Main Page</kbd> 5 legfrissebb változatának lekérése.",
+ "apihelp-query+revisions-example-first5": "A <kbd>Main Page</kbd> első 5 változatának lekérése.",
+ "apihelp-query+revisions-example-first5-after": "A <kbd>Main Page</kbd> 2006. május 1-jét követő első 5 változatának lekérése.",
+ "apihelp-query+revisions-example-first5-not-localhost": "A <kbd>Main Page</kbd> első 5 változatának lekérése, amit nem <kbd>127.0.0.1</kbd> anonim felhasználó készített.",
+ "apihelp-query+revisions-example-first5-user": "A <kbd>Main Page</kbd> első 5 változatának lekérése, amit a <kbd>MediaWiki default</kbd> felhasználó készített.",
+ "apihelp-query+revisions+base-param-prop": "Az egyes lapváltozatokhoz lekérendő tulajdonságok:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "A változat azonosítója.",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "A változat időbélyege.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "A változatot létrehozó felhasználó.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "A változatot létrehozó felhasználó azonosítója.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "A változat hossza bájtban.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "A változat tartalommodell-azonosítója.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "A szerkesztési összefoglaló.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "A változat szövege.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "A változat címkéi.",
+ "apihelp-query+revisions+base-param-limit": "A visszaadandó változatok maximális száma.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Használd a <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> lekérdezést helyette. A sablonok kibontása a változat tartalmában (az <kbd>$1prop=content</kbd> paraméterrel együtt használandó).",
+ "apihelp-query+revisions+base-param-section": "Csak ezen szakasz tartalmának lekérése.",
+ "apihelp-query+search-summary": "Teljes szöveges keresés végrehajtása.",
+ "apihelp-query+search-param-search": "Erre az értékre illeszkedő lapcímek és tartalom keresése. Használható lehet speciális keresési funkciók meghívására a wiki keresőmotorjától függően.",
+ "apihelp-query+search-param-namespace": "Keresés csak ezekben a névterekben.",
+ "apihelp-query+search-param-what": "A végrehajtandó keresési típus.",
+ "apihelp-query+search-param-info": "A visszaadandó metaadatok.",
+ "apihelp-query+search-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+search-paramvalue-prop-size": "A lap mérete bájtban.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "A lap szószáma.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "A lap utolsó szerkesztésének időbélyege.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Az illeszkedő átirányítás címe.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Az illeszkedő szakaszcím.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "A fájl tartalma illeszkedik-e.",
+ "apihelp-query+search-paramvalue-prop-score": "Figyelmen kívül hagyva.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Figyelmen kívül hagyva.",
+ "apihelp-query+search-param-limit": "A visszaadandó lapok maximális száma.",
+ "apihelp-query+search-param-interwiki": "Interwiki-találatok befoglalása az eredménybe, ha elérhetők.",
+ "apihelp-query+search-param-backend": "A használandó keresőmotor, ha nem az alapértelmezett.",
+ "apihelp-query+search-param-enablerewrites": "A keresőkifejezés átírásának engedélyezése. Bizonyos keresőmotorok át tudják írni a keresőkifejezést egy jobb találatokat adónak ítéltre, például elgépelések javításával.",
+ "apihelp-query+search-example-simple": "Keresés a <kbd>meaning</kbd> szóra.",
+ "apihelp-query+search-example-text": "Keresés a <kbd>meaning</kbd> szóra a lapok szövegében.",
+ "apihelp-query+search-example-generator": "Lapinformációk lekérése a <kbd>meaning</kbd> szóra kapott találatokról.",
+ "apihelp-query+siteinfo-summary": "Általános információk lekérése a wikiről.",
+ "apihelp-query+siteinfo-param-prop": "A lekérendő információk:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Általános rendszerinformációk.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Wikistatisztikák.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Felhasználócsoportok és jogaik.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "A wikin telepített függvénykönyvtárak.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "A wikin telepített kiterjesztések.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "A feltölthető fájlkiterjesztések (fájltípusok) listája.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "A wiki szerzői jogi (licenc-) információi, ha elérhetők.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Információk az elérhető korlátozási (lapvédelmi) típusokról.",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Az elérhető változónevek listája.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "A külső hivatkozásokban engedélyezett protokollok listája.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "A felhasználói beállítások alapértelmezett értékei.",
+ "apihelp-query+siteinfo-param-filteriw": "Csak helyi vagy csak nem helyi interwikik visszaadása az interwikitérképben.",
+ "apihelp-query+siteinfo-param-numberingroup": "A egyes felhasználócsoportokba tartozó felhasználók számának listázása.",
+ "apihelp-query+siteinfo-example-simple": "Wikiinformációk lekérése.",
+ "apihelp-query+siteinfo-example-interwiki": "A helyi interwiki-előtagok listájának lekérése.",
+ "apihelp-query+tags-summary": "Változtatáscímkék listázása.",
+ "apihelp-query+tags-param-limit": "A listázandó címkék maximális száma.",
+ "apihelp-query+tags-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+tags-paramvalue-prop-name": "A címke neve.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "A címke rendszerüzenete.",
+ "apihelp-query+tags-paramvalue-prop-description": "A címke leírása.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "A címkével rendelkező lapváltozatok és naplóbejegyzések száma.",
+ "apihelp-query+tags-paramvalue-prop-defined": "A címke definiálva van-e.",
+ "apihelp-query+tags-example-simple": "Az elérhető címkék listázása.",
+ "apihelp-query+templates-summary": "A megadott lapokra beillesztett összes lap visszaadása.",
+ "apihelp-query+templates-param-namespace": "Csak ezekben a névterekben található sablonok visszaadása.",
+ "apihelp-query+templates-param-limit": "A visszaadandó sablonok száma.",
+ "apihelp-query+templates-param-templates": "Csak ezen sablonok listázása. Annak ellenőrzésére alkalmas, hogy egy lap beilleszt-e egy adott sablont.",
+ "apihelp-query+templates-param-dir": "A listázás iránya.",
+ "apihelp-query+templates-example-simple": "A <kbd>Main Page</kbd> lapon használt sablonok lekérése.",
+ "apihelp-query+templates-example-generator": "Információk lekérése a <kbd>Main Page</kbd> lapon használt sablonlapokról.",
+ "apihelp-query+templates-example-namespaces": "A <kbd>Main Page</kbd> lapon használt {{ns:user}} és {{ns:template}} névtérbeli sablonok lekérése.",
+ "apihelp-query+tokens-summary": "Tokenek lekérése adatmódosító műveletekhez.",
+ "apihelp-query+tokens-param-type": "Lekérendő tokentípusok.",
+ "apihelp-query+tokens-example-simple": "Egy csrf token lekérése (alapértelmezett).",
+ "apihelp-query+tokens-example-types": "Egy watch és egy patrol token lekérése.",
+ "apihelp-query+transcludedin-summary": "A megadott lapokat beillesztő lapok lekérése.",
+ "apihelp-query+transcludedin-param-prop": "Lekérendő tulajdonságok:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "A lapok lapazonosítói.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "A lapok címei.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Az átirányítások megjelölése.",
+ "apihelp-query+transcludedin-param-namespace": "Lapok listázása csak ezekben a névterekben.",
+ "apihelp-query+transcludedin-param-limit": "A visszaadandó lapok száma.",
+ "apihelp-query+transcludedin-param-show": "Szűrés az átirányítások alapján:\n;redirect: Csak átirányítások visszaadása.\n;!redirect: Átirányítások elrejtése.",
+ "apihelp-query+transcludedin-example-simple": "A <kbd>Main Page</kbd> lapot beillesztő lapok listájának lekérése.",
+ "apihelp-query+transcludedin-example-generator": "Információk lekérése a <kbd>Main Page</kbd> lapot beillesztő lapokról.",
+ "apihelp-query+usercontribs-summary": "Egy felhasználó összes szerkesztésének lekérése.",
+ "apihelp-query+usercontribs-param-limit": "A visszaadott szerkesztések maximális száma.",
+ "apihelp-query+usercontribs-param-start": "Visszaadás ettől az időbélyegtől.",
+ "apihelp-query+usercontribs-param-end": "Visszaadás eddig az időbélyegig.",
+ "apihelp-query+usercontribs-param-namespace": "Szerkesztések listázása csak ezekben a névterekben.",
+ "apihelp-query+usercontribs-param-prop": "További információk visszaadása:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "A lap- és lapváltozat-azonosító.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "A lap címe és névterének azonosítója.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "A szerkesztés időbélyege.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "A szerkesztési összefoglaló.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "A szerkesztett lap új mérete.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Az ellenőrzött szerkesztések megjelölése (patrol).",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "A szerkesztés címkéi.",
+ "apihelp-query+usercontribs-param-show": "Csak a kritériumoknak megfelelő szerkesztések mutatása, pl. csak nem apró szerkesztések: <kbd>$2show=!minor</kbd>.\n\nHa az <kbd>$2show=patrolled</kbd> vagy <kbd>$2show=!patrolled</kbd> meg van adva, a <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>-nél ($1 másodperc) régebbi szerkesztések nem jelennek meg.",
+ "apihelp-query+usercontribs-param-tag": "Csak ezzel a címkével ellátott változatok listázása.",
+ "apihelp-query+usercontribs-param-toponly": "Csak a legfrissebbnek számító szerkesztések visszaadása.",
+ "apihelp-query+usercontribs-example-user": "<kbd>Example</kbd> szerkesztéseinek megjelenítése.",
+ "apihelp-query+usercontribs-example-ipprefix": "<kbd>192.0.2.</kbd> kezdetű IP-címek szerkesztéseinek megjelenítése.",
+ "apihelp-query+userinfo-summary": "Információk lekérése az aktuális felhasználóról.",
+ "apihelp-query+userinfo-param-prop": "Visszaadandó információk:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Blokkolva van-e az aktuális felhasználó, és ha igen, akkor ki és miért blokkolta.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "A jelenlegi felhasználó összes csoportjának listája.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "A jelenlegi felhasználó explicit csoportjainak listája, az egyes csoporttagságok lejárati idejével.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Azoknak a csoportoknak a listája, amiknek a jelenlegi felhasználó automatikusan tagja.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "A jelenlegi felhasználó jogosultságainak listája.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "A jelenlegi felhasználó által hozzáadható és eltávolítható csoportok listája.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "A jelenlegi felhasználó beállításai.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "A jelenlegi felhasználó beállításainak megváltoztatásához szükséges token lekérése.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "A jelenlegi felhasználó szerkesztésszáma.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "A jelenlegi felhasználóra érvényes sebességkorlátozások.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "A felhasználó valódi neve.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "A felhasználó e-mail-címe és megerősítésének dátuma.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "A felhasználó regisztrációjának dátuma.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "A felhasználó figyelőlistáján levő olvasatlan lapok száma (legfeljebb $1; <samp>$2</samp> értéket ad vissza, ha több).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "A felhasználó központi azonosítói és az összekapcsolási státusza.",
+ "apihelp-query+userinfo-param-attachedwiki": "A felhasználó össze van-e kapcsolva az ezen azonosítójú wikivel, az <kbd>$1prop=centralids</kbd> paraméterrel együtt használandó.",
+ "apihelp-query+userinfo-example-simple": "Információk lekérése az aktuális felhasználóról.",
+ "apihelp-query+userinfo-example-data": "További információk lekérése az aktuális felhasználóról.",
+ "apihelp-query+users-summary": "Információk lekérése felhasználók listájáról.",
+ "apihelp-query+users-param-prop": "Visszaadandó információk:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Blokkolva van-e a felhasználó, és ha igen, akkor ki és miért blokkolta.",
+ "apihelp-query+users-paramvalue-prop-groups": "A felhasználó összes csoportjának listája.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "A felhasználó explicit csoportjainak listája, az egyes csoporttagságok lejárati idejével.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Azoknak a csoportoknak a listája, amiknek a felhasználó automatikusan tagja.",
+ "apihelp-query+users-paramvalue-prop-rights": "A felhasználó jogosultságainak listája.",
+ "apihelp-query+users-paramvalue-prop-editcount": "A felhasználó szerkesztésszáma.",
+ "apihelp-query+users-paramvalue-prop-registration": "A felhasználó regisztrációjának időbélyege.",
+ "apihelp-query+users-paramvalue-prop-emailable": "A felhasználó szeretne-e e-mailt fogadni a [[Special:Emailuser]] lapon keresztül.",
+ "apihelp-query+users-paramvalue-prop-gender": "A felhasználó neme („male”, „female” vagy „unknown”).",
+ "apihelp-query+users-paramvalue-prop-centralids": "A felhasználó központi azonosítói és az összekapcsolási státusza.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Létrehozható-e fiók az érvényes, de nem regisztrált felhasználóneveken.",
+ "apihelp-query+users-param-attachedwiki": "A felhasználó össze van-e kapcsolva az ezen azonosítójú wikivel, az <kbd>$1prop=centralids</kbd> paraméterrel együtt használandó.",
+ "apihelp-query+users-param-users": "A lekérendő felhasználók listája.",
+ "apihelp-query+users-param-userids": "A lekérendő felhasználók azonosítóinak listája.",
+ "apihelp-query+users-param-token": "Használd a <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> lekérdezést helyette.",
+ "apihelp-query+users-example-simple": "Információk lekérése <kbd>Example</kbd> felhasználóról.",
+ "apihelp-query+watchlist-summary": "A felhasználó figyelőlistáján szereplő lapok friss változtatásainak lekérése.",
+ "apihelp-query+watchlist-param-allrev": "Egy lap összes változtatásának lekérése a megadott időszakból.",
+ "apihelp-query+watchlist-param-start": "Listázás ettől az időbélyegtől.",
+ "apihelp-query+watchlist-param-end": "Listázás eddig az időbélyegig.",
+ "apihelp-query+watchlist-param-namespace": "A változtatások szűrése ezekre a névterekre.",
+ "apihelp-query+watchlist-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+ "apihelp-query+watchlist-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+ "apihelp-query+watchlist-param-limit": "A kérésenként visszaadandó eredmények száma.",
+ "apihelp-query+watchlist-param-prop": "További lekérendő tulajdonságok:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Lapváltozat- és lapazonosítók.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "A lap címe.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "A szerkesztést végrehajtó felhasználó.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "A szerkesztést végrehajtó felhasználó azonosítója.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "A szerkesztési összefoglaló.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "A szerkesztés időbélyege.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Az ellenőrzött szerkesztések megjelölése (patrol).",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "A lap régi és új hossza.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Annak időbélyege, amikor a felhasználó utoljára értesítést kapott a szerkesztésről.",
+ "apihelp-query+watchlist-param-show": "Csak a kritériumoknak megfelelő elemek visszaadása. Például csak bejelentkezett felhasználók apró változtatásainak megtekintéséhez használd az <kbd>$1show=minor|!anon</kbd> értéket.",
+ "apihelp-query+watchlist-param-type": "A megjelenítendő változtatások típusai:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Normál lapszerkesztések.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Külső változtatások.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Laplétrehozások.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Naplóbejegyzések.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Kategóriaváltoztatások.",
+ "apihelp-query+watchlist-param-owner": "A <var>$1token</var> paraméterrel együtt használandó egy másik felhasználó figyelőlistájának elérésére.",
+ "apihelp-query+watchlist-param-token": "Egy biztonsági token (elérhető a felhasználó [[Special:Preferences#mw-prefsection-watchlist|beállításaiban]]) egy másik felhasználó figyelőlistájának eléréséhez.",
+ "apihelp-query+watchlist-example-simple": "A jelenlegi felhasználó figyelőlistáján szereplő nemrég módosított lapok legfrissebb változatának listázása.",
+ "apihelp-query+watchlist-example-props": "További információk lekérése a jelenlegi felhasználó figyelőlistáján szereplő nemrég módosított lapok legfrissebb változatáról.",
+ "apihelp-query+watchlist-example-allrev": "További információk lekérése a jelenlegi felhasználó figyelőlistáján szereplő összes friss változtatásról.",
+ "apihelp-query+watchlist-example-generator": "Lapinformációk lekérése a jelenlegi felhasználó figyelőlistáján szereplő nemrég módosított lapokról.",
+ "apihelp-query+watchlist-example-generator-rev": "Lapváltozat-információk lekérése a jelenlegi felhasználó figyelőlistáján szereplő friss változtatásokról.",
+ "apihelp-query+watchlist-example-wlowner": "<kbd>Exapmle</kbd> felhasználó figyelőlistáján szereplő nemrég módosított lapok legfrissebb változatának listázása.",
+ "apihelp-query+watchlistraw-summary": "A jelenlegi felhasználó figyelőlistáján szereplő összes lap lekérése.",
+ "apihelp-query+watchlistraw-param-namespace": "Lapok listázása csak ezekben a névterekben.",
+ "apihelp-query+watchlistraw-param-limit": "A kérésenként visszaadandó eredmények száma.",
+ "apihelp-query+watchlistraw-param-prop": "További lekérendő tulajdonságok:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Annak időbélyege, amikor a felhasználó utoljára értesítést kapott a szerkesztésről.",
+ "apihelp-query+watchlistraw-param-show": "Csak a kritériumoknak megfelelő elemek listázása.",
+ "apihelp-query+watchlistraw-param-owner": "A <var>$1token</var> paraméterrel együtt használandó egy másik felhasználó figyelőlistájának elérésére.",
+ "apihelp-query+watchlistraw-param-token": "Egy biztonsági token (elérhető a felhasználó [[Special:Preferences#mw-prefsection-watchlist|beállításaiban]]) egy másik felhasználó figyelőlistájának eléréséhez.",
+ "apihelp-query+watchlistraw-param-dir": "A listázás iránya.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Listázás ettől a címtől (névtérelőtaggal).",
+ "apihelp-query+watchlistraw-param-totitle": "Listázás eddig a címig (névtérelőtaggal).",
+ "apihelp-query+watchlistraw-example-simple": "A jelenlegi felhasználó figyelőlistáján szereplő lapok lekérése.",
+ "apihelp-query+watchlistraw-example-generator": "Lapinformációk lekérése a jelenlegi felhasználó figyelőlistáján szereplő lapokról.",
+ "apihelp-removeauthenticationdata-summary": "A jelenlegi felhasználó hitelesítési adatainak eltávolítása.",
+ "apihelp-removeauthenticationdata-example-simple": "Kísérlet a jelenlegi felhasználó <kbd>FooAuthenticationRequest</kbd> kéréshez kapcsolódó adatainak eltávolítására.",
+ "apihelp-resetpassword-summary": "Jelszó-visszaállító e-mail küldése a felhasználónak.",
+ "apihelp-resetpassword-extended-description-noroutes": "Nem érhetők el jelszó-visszaállítási módok.\n\nEngedélyezz néhány módot a <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> PHP-változóval a modul használatához.",
+ "apihelp-resetpassword-param-user": "A visszaállítandó felhasználó.",
+ "apihelp-resetpassword-param-email": "A visszaállítandó felhasználó e-mail-címe.",
+ "apihelp-resetpassword-example-user": "Jelszó-visszaállító e-mail küldése <kbd>Example</kbd> felhasználónak.",
+ "apihelp-resetpassword-example-email": "Jelszó-visszaállító e-mail küldése az összes <kbd>user@example.com</kbd> e-mail-című felhasználónak.",
+ "apihelp-revisiondelete-summary": "Változatok törlése és helyreállítása.",
+ "apihelp-revisiondelete-param-ids": "A törlendő lapváltozatok azonosítói.",
+ "apihelp-revisiondelete-param-reason": "A törlés vagy helyreállítás indoklása.",
+ "apihelp-revisiondelete-example-revision": "A <kbd>12345</kbd> lapváltozat tartalmának elrejtése a <kbd>Main Page</kbd> lapon.",
+ "apihelp-revisiondelete-example-log": "A <kbd>67890</kbd> naplóbejegyzés összes adatának elrejtése <kbd>BLP violation</kbd> indoklással.",
+ "apihelp-rollback-summary": "A lap legutóbbi változtatásának visszavonása.",
+ "apihelp-rollback-extended-description": "Ha a lap utolsó szerkesztője egymás után több szerkesztést végzett, az összes visszavonása.",
+ "apihelp-rollback-param-title": "A visszaállítandó lap címe. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+ "apihelp-rollback-param-pageid": "A visszaállítandó lap lapazonosítója. Nem használható együtt a <var>$1title</var> paraméterrel.",
+ "apihelp-rollback-param-summary": "Egyéni szerkesztési összefoglaló. Ha üres, az alapértelmezett összefoglaló lesz használatban.",
+ "apihelp-rollback-param-markbot": "A visszavont és a visszavonó szerkesztések botszerkesztésnek jelölése.",
+ "apihelp-rollback-param-watchlist": "A lap hozzáadása a figyelőlistához vagy eltávolítása onnan feltétel nélkül, a beállítások használata vagy a figyelőlista érintetlenül hagyása.",
+ "apihelp-rsd-summary": "Egy RSD-séma (Really Simple Discovery) exportálása.",
+ "apihelp-rsd-example-simple": "Az RSD-séma exportálása.",
+ "apihelp-setnotificationtimestamp-summary": "A figyelt lapok értesítési időbélyegének frissítése.",
+ "apihelp-setnotificationtimestamp-extended-description": "Ez érinti a módosított lapok kiemelését a figyelőlistán és a laptörténetekben, valamint az e-mail-küldést a „{{int:tog-enotifwatchlistpages}}” beállítás engedélyezése esetén.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Dolgozás az összes figyelt lapon.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Az értesítési időbélyeg állítása erre az időbélyegre.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Az értesítési időbélyeg állítása erre a lapváltozatra (csak egy lap esetén).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Az értesítési időbélyeg állítása ennél a lapváltozatnál újabbra (csak egy lap esetén).",
+ "apihelp-setnotificationtimestamp-example-all": "Az értesítési állapot visszaállítása a teljes figyelőlistára.",
+ "apihelp-setnotificationtimestamp-example-page": "A <kbd>Main page</kbd> értesítési állapotának visszaállítása.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "A <kbd>Main page</kbd> értesítési időbélyegének módosítása, hogy a 2012. január 1-jét követő szerkesztések nem megtekintettek legyenek.",
+ "apihelp-setnotificationtimestamp-example-allpages": "A <kbd>{{ns:user}}</kbd> névtérbeli lapok értesítési állapotának visszaállítása.",
+ "apihelp-setpagelanguage-summary": "Egy lap nyelvének módosítása.",
+ "apihelp-setpagelanguage-extended-description-disabled": "A lapnyelv módosítása nem engedélyezett ezen a wikin.\n\nEngedélyezd a <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> PHP-változót ezen művelet használatához.",
+ "apihelp-setpagelanguage-param-title": "A módosítandó lap címe. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+ "apihelp-setpagelanguage-param-pageid": "A módosítandó lap azonosítója. Nem használható együtt a <var>$1title</var> paraméterrel.",
+ "apihelp-setpagelanguage-param-lang": "A lap nyelvének módosítása erre a nyelvkódra. Használd a <kbd>default</kbd> értéket a wiki alapértelmezett tartalomnyelvére való visszaállításhoz.",
+ "apihelp-setpagelanguage-param-reason": "A módosítás oka.",
+ "apihelp-setpagelanguage-example-language": "A <kbd>Main Page</kbd> nyelvének módosítása baszkra.",
+ "apihelp-setpagelanguage-example-default": "A 123 azonosítójú lap nyelvének módosítása a wiki alapértelmezett tartalomnyelvére.",
+ "apihelp-stashedit-summary": "Egy szerkesztés előkészítése a megosztott gyorsítótárban.",
+ "apihelp-stashedit-extended-description": "Ez a modul AJAX segítségével, a szerkesztőűrlapról történő használatra készült a lapmentés teljesítményének javítására.",
+ "apihelp-stashedit-param-title": "A szerkesztett lap címe.",
+ "apihelp-stashedit-param-section": "A szerkesztett szakasz száma. <kbd>0</kbd> a bevezetőhöz, <kbd>new</kbd> új szakaszhoz.",
+ "apihelp-stashedit-param-sectiontitle": "Az új szakasz címe.",
+ "apihelp-stashedit-param-text": "A lap tartalma.",
+ "apihelp-stashedit-param-contentmodel": "Az új tartalom tartalommodellje.",
+ "apihelp-stashedit-param-baserevid": "Az alapváltozat változatazonosítója.",
+ "apihelp-stashedit-param-summary": "Szerkesztési összefoglaló.",
+ "apihelp-userrights-param-userid": "Felhasználói azonosító.",
+ "api-help-title": "MediaWiki API súgó",
+ "api-help-lead": "Ez egy automatikusan generált MediaWiki API-dokumentációs lap.\n\nDokumentáció és példák: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Fő modul",
+ "api-help-flag-deprecated": "Ez a modul elavult.",
+ "api-help-flag-internal": "<strong>Ez a modul belső használatú vagy nem stabil.</strong> A működése értesítés nélkül változhat.",
+ "api-help-flag-readrights": "Ez a modul olvasási jogot igényel.",
+ "api-help-flag-writerights": "Ez a modul írási jogot igényel.",
+ "api-help-flag-mustbeposted": "Ez a modul csak POST kéréseket fogad el.",
+ "api-help-flag-generator": "Ez a modul használható generátorként.",
+ "api-help-source": "Forrás: $1",
+ "api-help-source-unknown": "Forrás: <span class=\"apihelp-unknown\">ismeretlen</span>",
+ "api-help-license": "Licenc: [[$1|$2]]",
+ "api-help-license-noname": "Licenc: [[$1|Lásd a linken]]",
+ "api-help-license-unknown": "Licenc: <span class=\"apihelp-unknown\">ismeretlen</span>",
+ "api-help-parameters": "{{PLURAL:$1|Paraméter|Paraméterek}}:",
+ "api-help-param-deprecated": "Elavult.",
+ "api-help-param-required": "Ez a paraméter kötelező.",
+ "api-help-datatypes-header": "Adattípusok",
+ "api-help-param-type-limit": "Típus: egész vagy <kbd>max</kbd>",
+ "api-help-param-type-integer": "Típus: {{PLURAL:$1|1=egész|2=egészek listája}}",
+ "api-help-param-type-boolean": "Típus: logikai ([[Special:ApiHelp/main#main/datatypes|részletek]])",
+ "api-help-param-type-timestamp": "Típus: {{PLURAL:$1|1=időbélyeg|2=időbélyegek listája}} ([[Special:ApiHelp/main#main/datatypes|engedélyezett formátumok]])",
+ "api-help-param-type-user": "Típus: {{PLURAL:$1|1=felhasználónév|2=felhasználónevek listája}}",
+ "api-help-param-list": "{{PLURAL:$1|1=A következő értékek egyike|2=Értékek (elválasztó: <kbd>{{!}}</kbd> vagy [[Special:ApiHelp/main#main/datatypes|más]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Üresnek kell lennie|Lehet üres vagy $2}}",
+ "api-help-param-limit": "Nem engedélyezett több mint $1.",
+ "api-help-param-limit2": "Nem engedélyezett több mint $1 (botoknak $2).",
+ "api-help-param-integer-min": "Az {{PLURAL:$1|1=érték nem lehet kisebb|2=értékek nem lehetnek kisebbek}} mint $2.",
+ "api-help-param-integer-max": "Az {{PLURAL:$1|1=érték nem lehet nagyobb|2=értékek nem lehetnek nagyobbak}} mint $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Az értéknek $2 és $3 között kell lennie.|2=Az értékeknek $2 és $3 között kell lenniük.}}",
+ "api-help-param-default": "Alapértelmezett: $1",
+ "api-help-examples": "{{PLURAL:$1|Példa|Példák}}:",
+ "apierror-timeout": "A kiszolgáló nem adott választ a várt időn belül."
+}
diff --git a/www/wiki/includes/api/i18n/ia.json b/www/wiki/includes/api/i18n/ia.json
new file mode 100644
index 00000000..462726ae
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ia.json
@@ -0,0 +1,63 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie",
+ "Rafaneta"
+ ]
+ },
+ "apihelp-main-summary": "",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Listas de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annuncios sur le API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & demandas]\n</div>\n<strong>Stato:</strong> Tote le functiones monstrate in iste pagina deberea functionar, sed le API es ancora in disveloppamento active e pote cambiar a omne momento. Subscribe te al [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de diffusion mediawiki-api-announce] pro esser informate de actualisationes.\n\n<strong>Requestas erronee:</strong> Quando requestas erronee se invia al API, un capite HTTP essera inviate con le clave \"MediaWiki-API-Error\". Le valor de iste capite e le codice de error reinviate essera identic. Pro plus information vide [[mw:API:Errors_and_warnings|API: Errores e avisos]].\n\n<strong>Tests:</strong> Pro facilitar le test de requestas API, vide [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Qual action exequer.",
+ "apihelp-main-param-format": "Le formato del resultato.",
+ "apihelp-main-param-maxlag": "Le latentia maximal pote esser usate quando MediaWiki es installate in un cluster de base de datos replicate. Pro evitar actiones que causa additional latentia de replication de sito, iste parametro pote facer le cliente attender usque le latentia de replication es minus que le valor specificate. In caso de latentia excessive, le codice de error <samp>maxlag</samp> es retornate con un message como <samp>Attende $host: $lag secundas de latentia</samp>.<br />Vide [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]] pro plus information.",
+ "apihelp-main-param-smaxage": "Fixar le capite de controlo de cache HTTP <code>s-maxage</code> a iste numero de secundas. Errores nunquam es mittite in cache.",
+ "apihelp-main-param-maxage": "Fixar le capite de controlo de cache HTTP <code>max-age</code> a iste numero de secundas. Errores nunquam es mittite in cache.",
+ "apihelp-main-param-assert": "Verificar si le usator ha aperite session si mittite a <kbd>user</kbd>, o si ha le derecto de usator robot si <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Verificar que le usator currente es le usator nominate.",
+ "apihelp-main-param-requestid": "Omne valor fornite hic essera includite in le responsa. Pote esser usate pro distinguer requestas.",
+ "apihelp-main-param-servedby": "Includer in le resultato le nomine del host que ha servite le requesta.",
+ "apihelp-main-param-curtimestamp": "Includer le data e hora actual in le resultato.",
+ "apihelp-main-param-responselanginfo": "Includer le linguas usate pro <var>uselang</var> e <var>errorlang</var> in le resultato.",
+ "apihelp-main-param-origin": "Quando se accede al API usante un requesta AJAX inter-dominios (CORS), mitte le dominio de origine in iste parametro. Illo debe esser includite in omne requesta pre-flight, e dunque debe facer parte del URI del requesta (e non del corpore POST).\n\nPro requestas authenticate, isto debe corresponder exactemente a un del origines in le capite <code>Origin</code>, dunque debe esser mittite a qualcosa como <kbd>http://ia.wikipedia.org</kbd> o <kbd>https://meta.wikimedia.org</kbd>. Si iste parametro non corresponde al capite <code>Origin</code>, un responsa 403 essera retornate. Si iste parametro corresponde al capite <code>Origin</code> e le origine es in le lista blanc, le capites <code>Access-Control-Allow-Origin</code> e <code>Access-Control-Allow-Credentials</code> essera inserite.\n\nPro requestas non authenticate, specifica le valor <kbd>*</kbd>. Isto causara le insertion del capite <code>Access-Control-Allow-Origin</code>, ma <code>Access-Control-Allow-Credentials</code> essera mittite a <code>false</code> e tote le datos specific al usator essera restringite.",
+ "apihelp-main-param-uselang": "Lingua a usar pro traductiones de messages <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> con <kbd>siprop=languages</kbd> retorna un lista de codices de lingua, o specifica <kbd>user</kbd> pro usar le preferentia de lingua del usator actual, o specifica <kbd>content</kbd> pro usar le lingua de contento de iste wiki.",
+ "apihelp-block-summary": "Blocar un usator.",
+ "apihelp-block-param-user": "Nomine de usator, adresse IP o intervallo de adresses IP a blocar. Non pote esser usate insimul a <var>$1userid</var>",
+ "apihelp-block-param-expiry": "Tempore de expiration. Pote esser relative (p.ex. <kbd>5 months</kbd> o <kbd>2 weeks<.kbd>) o absolute (p.ex. <kbd>2014-09-18T12:34:56Z</kbd>). Si es mittite a <kbd>infinite</kbd>, <kbd>indefinite</kbd> o <kbd>never</kbd>, le blocada nunquam expirara.",
+ "apihelp-block-param-reason": "Motivo del blocada.",
+ "apihelp-block-param-anononly": "Blocar solmente usatores anonyme (i.e. disactivar modificationes anonyme pro iste adresse IP).",
+ "apihelp-block-param-nocreate": "Impedir le creation de contos.",
+ "apihelp-block-param-autoblock": "Blocar automaticamente le adresse IP usate le plus recentemente, e omne IPs successive desde le quales ille/-a tenta facer modificationes.",
+ "apihelp-block-param-noemail": "Impedir que le usator invia e-mail per le wiki. (Require le derecto <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Celar le nomine de usator in le registro de blocadas. (Require le derecto <code>hideuser</code>.)",
+ "apihelp-block-param-allowusertalk": "Permitter que le usator modifica su proprie pagina de discussion (depende de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Si le usator es jam blocate, superscriber le blocada existente.",
+ "apihelp-block-param-watchuser": "Observar le paginas de usator e discussion del usator o del adresse IP.",
+ "apihelp-block-example-ip-simple": "Blocar le adresse IP <kbd>192.0.2.5</kbd> pro tres dies con le motivo <kbd>Prime advertimento</kbd>.",
+ "apihelp-block-example-user-complex": "Blocar le usator <kbd>Vandalo</kbd> pro tempore indeterminate con le motivo <kbd>Vandalismo</kbd>, e impedir le creation de nove contos e le invio de e-mail.",
+ "apihelp-changeauthenticationdata-summary": "Cambiar le datos de authentication pro le usator actual.",
+ "apihelp-changeauthenticationdata-example-password": "Tentar de cambiar le contrasigno del usator actual a <kbd>ExemploDeContrasigno</kbd>.",
+ "apihelp-checktoken-summary": "Verificar le validitate de un indicio ab <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Typo de indicio a testar.",
+ "apihelp-checktoken-param-token": "Indicio a testar.",
+ "apihelp-checktoken-param-maxtokenage": "Etate maxime permittite pro le indicio, in secundas.",
+ "apihelp-checktoken-example-simple": "Testar le validitate de un indicio <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Cancella le signal <code>hasmsg</code> pro le usator actual.",
+ "apihelp-clearhasmsg-example-1": "Cancellar le signal <code>hasmsg</code> pro le usator actual.",
+ "apihelp-clientlogin-summary": "Aperir session in le wiki usante le fluxo interactive.",
+ "apihelp-clientlogin-example-login": "Comenciar le processo de aperir session in le wiki como le usator <kbd>Exemplo</kbd> con le contrasigno <kbd>ExemploDeContrasigno</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continuar a aperir session post un responsa <samp>UI</samp> pro authentication bifactorial, forniente un <var>OATHToken</var> de <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Obtener le differentia inter duo paginas.",
+ "apihelp-compare-extended-description": "Es necessari indicar un numero de version, un titulo de pagina o un ID de pagina, e pro \"from\" e pro \"to\".",
+ "apihelp-compare-param-fromtitle": "Prime titulo a comparar.",
+ "apihelp-compare-param-fromid": "Prime ID de pagina comparar.",
+ "apihelp-compare-param-fromrev": "Prime version a comparar.",
+ "apihelp-compare-param-totitle": "Secunde titulo a comparar.",
+ "apihelp-compare-param-toid": "Secunde ID de pagina a comparar.",
+ "apihelp-compare-param-torev": "Secunde version a comparar.",
+ "apihelp-compare-example-1": "Crear un diff inter version 1 e 2.",
+ "apihelp-createaccount-summary": "Crear un nove conto de usator.",
+ "apihelp-createaccount-param-name": "Nomine de usator.",
+ "apihelp-query+prefixsearch-param-profile": "Le profilo de recerca a usar.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Obtener le prime 5 versiones del <kbd>Pagina principal</kbd> que non ha essite facite per le usator anonyme <kbd>127.0.0.1</kbd>",
+ "api-credits": "Programmatores del API:\n* Roan Kattouw (programmator dirigente Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creator, programmator dirigente Sept. 2006–Sept. 2007)\n* Brad Jorsch (programmator dirigente 2013–presente)\n\nInvia tu commentos, suggestiones e questiones a mediawiki-api@lists.wikimedia.org\no insere un reportage de bug a https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/id.json b/www/wiki/includes/api/i18n/id.json
new file mode 100644
index 00000000..b1d2f286
--- /dev/null
+++ b/www/wiki/includes/api/i18n/id.json
@@ -0,0 +1,105 @@
+{
+ "@metadata": {
+ "authors": [
+ "WongKentir",
+ "Beeyan",
+ "Rachmat.Wahidi",
+ "Kenrick95",
+ "Presidenvolksraad"
+ ]
+ },
+ "apihelp-main-param-action": "Tindakan manakah yang akan dilakukan.",
+ "apihelp-main-param-format": "Format keluaran.",
+ "apihelp-block-summary": "Blokir pengguna.",
+ "apihelp-block-param-user": "Nama pengguna, alamat IP, atau rentang alamat IP untuk diblokir.",
+ "apihelp-block-param-expiry": "Waktu kedaluwarsa. Dapat berupa waktu relatif (seperti <kbd>5 bulan</kbd> atau <kbd>2 minggu</kbd>) atau waktu absolut (seperti <kbd>2014-09-18T12:34:56Z</kbd>). Jika diatur ke <kbd>selamanya</kbd>, <kbd>tak terbatas</kbd>, atau <kbd>tidak pernah</kbd>, pemblokiran itu tidak akan berakhir.",
+ "apihelp-block-param-reason": "Alasan pemblokiran.",
+ "apihelp-block-param-anononly": "Blokir hanya pengguna anonim (seperti menonaktifkan suntingan anonim untuk alamat IP ini).",
+ "apihelp-block-param-nocreate": "Cegah pembuatan akun.",
+ "apihelp-block-param-autoblock": "Blokir alamat IP terakhir yang digunakan pengguna ini, dan semua alamat IP berikutnya yang mereka coba gunakan untuk menyunting.",
+ "apihelp-block-param-noemail": "Cegah pengguna mengirimkan surel melalui wiki. (Membutuhkan hak <code>blockemail</code>).",
+ "apihelp-block-param-reblock": "Jika pengguna tersebut sudah diblokir, atur ulang setelah pemblokirannya.",
+ "apihelp-block-example-ip-simple": "Blokir alamat IP <kbd>192.0.2.5</kbd> selama tiga hari dengan alasan <kbd>Serangan pertama</kbd>.",
+ "apihelp-compare-param-fromtitle": "Judul pertama untuk dibandingkan.",
+ "apihelp-compare-param-fromid": "ID halaman pertama untuk dibandingkan.",
+ "apihelp-compare-param-fromrev": "Revisi pertama untuk dibandingkan.",
+ "apihelp-compare-param-toid": "ID halaman kedua untuk dibandingkan.",
+ "apihelp-compare-param-torev": "Revisi kedua untuk dibandingkan.",
+ "apihelp-compare-example-1": "Buat perbedaan antara revisi 1 dan 2.",
+ "apihelp-createaccount-summary": "Buat akun pengguna baru.",
+ "apihelp-createaccount-example-create": "Mulai proses pembuatan pengguna <kbd>Contoh</kbd> dengan kata sandi <kbd>ContohKataSandi</kbd>.",
+ "apihelp-createaccount-param-name": "Nama pengguna",
+ "apihelp-createaccount-param-password": "Kata sandi (diabaikan jika <var>$1mailpassword</var> diatur).",
+ "apihelp-createaccount-param-domain": "Domain untuk otentikasi eksternal (opsional).",
+ "apihelp-createaccount-param-token": "Token pembuatan akun yang diperoleh pada permintaan pertama.",
+ "apihelp-createaccount-param-email": "Alamat surel pengguna (opsional).",
+ "apihelp-createaccount-param-realname": "Nama asli pengguna (opsional).",
+ "apihelp-createaccount-param-mailpassword": "Jika diberikan nilai, kata sandi acak akan dikirimkan melalui surel kepada pengguna.",
+ "apihelp-createaccount-param-reason": "Alasan tambahan untuk membuat akun yang akan dicatat dalam log.",
+ "apihelp-createaccount-param-language": "Kode bahasa untuk diatur sebagai baku kepada pengguna (opsional, nilai bakunya adalah bahasa isi).",
+ "apihelp-createaccount-example-pass": "Buat pengguna <kbd>testuser</kbd> dengan kata sandi <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Buat pengguna <kbd>testmailuser</kbd> dan kirim surel berisi kata sandi acak.",
+ "apihelp-delete-summary": "Hapus halaman",
+ "apihelp-delete-param-title": "Judul halaman untuk dihapus. Tidak dapat digunakan bersama dengan <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID halaman dari halaman yang akan dihapus. Tidak dapat digunakan bersama dengan <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Alasan penghapusan. Jika tidak diberikan, alasan yang dihasilkan secara otomatis akan digunakan.",
+ "apihelp-delete-param-tags": "Ganti tag untuk diterapkan ke entri di log penghapusan.",
+ "apihelp-delete-param-watch": "Tambahkan halaman ke daftar pantauan pengguna saat ini.",
+ "apihelp-delete-param-watchlist": "Buat atau hapus halaman tanpa syarat dari daftar pantauan pengguna saat ini, gunakan preferensi atau jangan ganti pantauan.",
+ "apihelp-delete-param-unwatch": "Hapus halaman dari daftar pantauan pengguna saat ini.",
+ "apihelp-delete-param-oldimage": "Nama gambar lama untuk dihapus seperti yang disebutkan oleh [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Hapus <kbd>Halaman Utama</kbd>.",
+ "apihelp-delete-example-reason": "Hapus <kbd>Halaman Utama</kbd> dengan alasan <kbd>Persiapan untuk dialihkan</kbd>.",
+ "apihelp-disabled-summary": "Modul ini telah dimatikan.",
+ "apihelp-edit-summary": "Buat dan sunting halaman.",
+ "apihelp-edit-param-title": "Judul halaman untuk dibuat. Tidak dapat digunakan bersama dengan <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID halaman dari halaman yang akan disunting. Tidak dapat digunakan bersama dengan <var>$1title</var>.",
+ "apihelp-edit-param-section": "Nomor bagian. <kbd>0</kbd> untuk bagian atas, <kbd>baru</kbd> untuk bagian baru.",
+ "apihelp-edit-param-sectiontitle": "Judul untuk bagian baru.",
+ "apihelp-edit-param-text": "Isi halaman.",
+ "apihelp-edit-param-summary": "Ringkasan suntingan. Juga tajuk bagian ketika $1section=new dan $1sectiontitle tidak diatur.",
+ "apihelp-edit-param-tags": "Ganti tag untuk menerapkan ke revisi.",
+ "apihelp-edit-param-minor": "Suntingan kecil.",
+ "apihelp-edit-param-notminor": "Bukan suntingan kecil.",
+ "apihelp-edit-param-bot": "Tandai suntingan ini sebagai suntingan bot.",
+ "apihelp-edit-param-basetimestamp": "Stempel waktu dari revisi asal, digunakan untuk mendeteksi konflik penyuntingan. Dapat ditemukan di [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Stempel waktu ketika proses penyuntingan dimulai, digunakan untuk mendeteksi konflik penyuntingan. Nilai yang cocok dapat ditemukan dengan menggunakan <var>[[Special:ApiHelp/main|curtimestamp]]</var> ketika memulai proses penyuntingan (seperti ketika memuat isi konten yang akan disunting).",
+ "apihelp-edit-param-recreate": "Batalkan galat yang terjadi tentang halaman yang sudah dihapus pada saat itu.",
+ "apihelp-edit-param-createonly": "Jangan sunting halaman itu jika sudah ada.",
+ "apihelp-edit-param-nocreate": "Berikan galat jika halaman belum ada.",
+ "apihelp-edit-param-watch": "Tambahkan halaman ke daftar pantauan pengguna saat ini.",
+ "apihelp-edit-param-unwatch": "Hapus halaman dari daftar pantauan pengguna saat ini.",
+ "apihelp-edit-param-watchlist": "Buat atau hapus halaman tanpa syarat dari daftar pantauan pengguna saat ini, gunakan preferensi atau jangan ganti pantauan.",
+ "apihelp-edit-param-md5": "Hash MD5 dari parameter $1text, atau parameter $1prependtext dan $1appendtext digabungkan. Jika diatur, suntingan itu tidak akan dilakukan kecuali hash tidak benar.",
+ "apihelp-edit-param-prependtext": "Tambahkan teks berikut ke bagian awal halaman. Abaikan $1text.",
+ "apihelp-edit-param-appendtext": "Tambahkan teks berikut ke bagian akhir halaman. Abaikan $1text.\n\nGunakan $1section=new untuk menambahkan sebuah bagian baru, daripada parameter ini.",
+ "apihelp-edit-param-undo": "Batalkan revisi ini. Abaikan $1text, $1prependtext dan $1appendtext.",
+ "apihelp-edit-param-undoafter": "Batalkan semua revisi dari $1undo ke revisi ini. Jika tidak diatur, batalkan satu revisi saja.",
+ "apihelp-edit-param-redirect": "Selesaikan pengalihan secara otomatis.",
+ "apihelp-edit-param-contentformat": "Format serialisasi isi digunakan untuk teks masukan.",
+ "apihelp-edit-param-contentmodel": "Model konten dari konten baru.",
+ "apihelp-edit-param-token": "Token harus selalu dikirim sebagai parameter terakhir, atau setidaknya sesudah parameter $1text.",
+ "apihelp-edit-example-edit": "Sunting halaman.",
+ "apihelp-edit-example-prepend": "Tambahkan <kbd>_&#95;NOTOC_&#95;</kbd> ke halaman.",
+ "apihelp-edit-example-undo": "Batalkan revisi 13579 melalui 13585 dengan ringkasan otomatis.",
+ "apihelp-emailuser-summary": "Kirim surel ke pengguna ini.",
+ "apihelp-emailuser-param-target": "Pengguna yang akan dikirimi surel.",
+ "apihelp-emailuser-param-subject": "Tajuk subjek.",
+ "apihelp-emailuser-param-text": "Badan pesan.",
+ "apihelp-emailuser-param-ccme": "Kirimkan salinan pesan ini kepada saya.",
+ "apihelp-expandtemplates-summary": "Longgarkan semua templat dalam teks wiki.",
+ "apihelp-expandtemplates-param-title": "Judul halaman.",
+ "apihelp-expandtemplates-param-text": "Teks wiki yang akan diubah.",
+ "apihelp-expandtemplates-param-revid": "ID revisi, untuk <nowiki>{{REVISIONID}}</nowiki> dan variabel serupa.",
+ "apihelp-expandtemplates-param-prop": "Bagian informasi manakah yang ingin didapatkan.\n\nPerhatikan bahwa jika tidak ada nilai yang dipilih, hasilnya akan mengandung teks wiki, namun keluaran akan berupa format usang.",
+ "apihelp-feedcontributions-param-deletedonly": "Tampilkan hanya kontribusi terhapus.",
+ "apihelp-login-example-login": "Masuk log.",
+ "apihelp-move-param-noredirect": "Jangan buat pengalihan.",
+ "apihelp-move-param-unwatch": "Hapus halaman dan pengalihan dari daftar pantauan pengguna ini.",
+ "apihelp-move-example-move": "Pindahkan <kbd>Judul buruk</kbd> ke <kbd>Judul benar</kbd> tanpa membuat pengalihan.",
+ "apihelp-opensearch-param-redirects": "Bagaimana menangani pengalihan:\n;return:Kembali ke pengalihan itu.\n;resolve:Kembali ke halaman tujuan. Mungkin hasil kembali kurang dari $1limit.\nUntuk alasan riwayat, nilai baku adalah \"kembali\" untuk $1format=json dan \"resolve\" untuk format lain.",
+ "apihelp-query+prefixsearch-param-profile": "Cari profil untuk digunakan.",
+ "apihelp-query+search-param-qiprofile": "Meminta profil independen untuk digunakan (berefek pada algoritma peringkat).",
+ "apihelp-revisiondelete-param-ids": "Penanda untuk perubahan yang akan dihapus",
+ "api-format-prettyprint-status": "Tanggapan ini akan dikembalikan dengan status $1 $2 HTTP."
+}
diff --git a/www/wiki/includes/api/i18n/is.json b/www/wiki/includes/api/i18n/is.json
new file mode 100644
index 00000000..956ace83
--- /dev/null
+++ b/www/wiki/includes/api/i18n/is.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sveinn í Felli"
+ ]
+ },
+ "api-help-license": "Notkunarleyfi: [[$1|$2]]",
+ "api-help-license-noname": "Notkunarleyfi: [[$1|Sjá tengil]]",
+ "api-help-license-unknown": "Notkunarleyfi: <span class=\"apihelp-unknown\">óþekkt</span>"
+}
diff --git a/www/wiki/includes/api/i18n/it.json b/www/wiki/includes/api/i18n/it.json
new file mode 100644
index 00000000..38d29015
--- /dev/null
+++ b/www/wiki/includes/api/i18n/it.json
@@ -0,0 +1,695 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "Nivit",
+ "Toadino2",
+ "Gianfranco",
+ "Alexmar983",
+ "Ricordisamoa",
+ "Valepert",
+ "Sannita",
+ "Macofe",
+ "Nemo bis",
+ "JackLantern",
+ "Urielejh",
+ "Matteocng",
+ "Einreiher",
+ "Mpiva",
+ "Margherita.mignanelli"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentazione]] (in inglese)\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]] (in inglese)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> l'API MediaWiki è un'interfaccia matura e stabile che è attivamente supportata e migliorata. Anche se cerchiamo di evitarlo, potremmo dover fare delle modifiche che causano malfunzionamenti; iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mailing list sugli annunci delle API MediaWiki] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite alle API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e, sia il valore dell'intestazione, sia il codice d'errore, verranno impostati con lo stesso valore. Per maggiori informazioni leggi [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Errori ed avvertimenti]] (in inglese).\n\n<p class=\"mw-apisandbox-link\"><strong>Test:</strong> per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].</p>",
+ "apihelp-main-param-action": "Azione da compiere.",
+ "apihelp-main-param-format": "Formato dell'output.",
+ "apihelp-main-param-assert": "Verifica che l'utente abbia effettuato l'accesso se si è impostato <kbd>user</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
+ "apihelp-main-param-servedby": "Includi nel risultato il nome dell'host che ha servito la richiesta.",
+ "apihelp-main-param-curtimestamp": "Includi nel risultato il timestamp attuale.",
+ "apihelp-block-summary": "Blocca un utente.",
+ "apihelp-block-param-user": "Nome utente, indirizzo IP o range di IP da bloccare. Non può essere usato insieme a <var>$1userid</var>",
+ "apihelp-block-param-expiry": "Tempo di scadenza. Può essere relativo (ad esempio, <kbd>5 months</kbd> o <kbd>2 weeks</kbd>) o assoluto (ad esempio <kbd>2014-09-18T12:34:56Z</kbd>). Se impostato a <kbd>infinite</kbd>, <kbd>indefinite</kbd> o <kbd>never</kbd>, il blocco non scadrà mai.",
+ "apihelp-block-param-reason": "Motivo del blocco.",
+ "apihelp-block-param-anononly": "Blocca solo gli utenti non registrati (cioè disattiva i contributi anonimi da questo indirizzo IP).",
+ "apihelp-block-param-nocreate": "Impedisci creazione di utenze.",
+ "apihelp-block-param-autoblock": "Blocca automaticamente l'ultimo indirizzo IP usato dall'utente e i successivi con cui viene tentato l'accesso.",
+ "apihelp-block-param-hidename": "Nascondi il nome utente dal registro dei blocchi (Richiede i permessi di <code>hideuser</code>).",
+ "apihelp-block-param-reblock": "Se l'utente è già bloccato, sovrascrivere il blocco esistente.",
+ "apihelp-block-param-watchuser": "Segui la pagina utente e le pagine di discussione utente dell'utente o dell'indirizzo IP.",
+ "apihelp-block-example-ip-simple": "Blocca l'indirizzo IP <kbd>192.0.2.5</kbd> per tre giorni con motivazione <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Blocca l'utente <kbd>Vandal</kbd> a tempo indeterminato con motivazione <kbd>Vandalism</kbd>, e impediscigli la creazione di nuovi account e l'invio di e-mail.",
+ "apihelp-changeauthenticationdata-summary": "Modificare i dati di autenticazione per l'utente corrente.",
+ "apihelp-changeauthenticationdata-example-password": "Tentativo di modificare la password dell'utente corrente a <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Verifica la validità di un token da <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo di token in corso di test.",
+ "apihelp-checktoken-param-token": "Token da testare.",
+ "apihelp-checktoken-param-maxtokenage": "Massima età consentita per il token, in secondi.",
+ "apihelp-checktoken-example-simple": "Verifica la validità di un token <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Cancella il flag <code>hasmsg</code> per l'utente corrente.",
+ "apihelp-clearhasmsg-example-1": "Cancella il flag <code>hasmsg</code> per l'utente corrente.",
+ "apihelp-clientlogin-summary": "Accedi al wiki utilizzando il flusso interattivo.",
+ "apihelp-clientlogin-example-login": "Avvia il processo di accesso alla wiki come utente <kbd>Example</kbd> con password <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continua l'accesso dopo una risposta dell'<samp>UI</samp> per l'autenticazione a due fattori, fornendo un <var>OATHToken</var> di <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Ottieni le differenze tra 2 pagine.",
+ "apihelp-compare-extended-description": "Un numero di revisione, il titolo di una pagina, o un ID di pagina deve essere indicato sia per il \"da\" che per lo \"a\".",
+ "apihelp-compare-param-fromtitle": "Primo titolo da confrontare.",
+ "apihelp-compare-param-fromid": "Primo ID di pagina da confrontare.",
+ "apihelp-compare-param-fromrev": "Prima revisione da confrontare.",
+ "apihelp-compare-param-totitle": "Primo titolo da confrontare.",
+ "apihelp-compare-param-toid": "Secondo ID di pagina da confrontare.",
+ "apihelp-compare-param-torev": "Seconda revisione da confrontare.",
+ "apihelp-compare-example-1": "Crea un diff tra revisione 1 e revisione 2.",
+ "apihelp-createaccount-summary": "Crea un nuovo account utente.",
+ "apihelp-createaccount-param-preservestate": "Se <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> ha restituito true per <samp>hasprimarypreservedstate</samp>, le richieste contrassegnate come <samp>primary-required</samp> dovrebbero essere omesse. Se invece ha restituito un valore non vuoto per <samp>preservedusername</samp>, quel nome utente deve essere utilizzato per il parametro <var>username</var>.",
+ "apihelp-createaccount-example-create": "Avvia il processo di creazione utente <kbd>Example</kbd> con password <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Nome utente.",
+ "apihelp-createaccount-param-password": "Password (verrà ignorata se è impostato <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Dominio per l'autenticazione esterna (opzionale).",
+ "apihelp-createaccount-param-email": "Indirizzo Email dell'utente (opzionale).",
+ "apihelp-createaccount-param-realname": "Nome reale dell'utente (opzionale).",
+ "apihelp-createaccount-param-mailpassword": "Se impostato su un qualsiasi valore, una password random (casuale) verrà inviata all'utente.",
+ "apihelp-createaccount-param-reason": "Ragione, facoltativa, della creazione dell'account da inserire nei registri.",
+ "apihelp-createaccount-param-language": "Codice di lingua da impostare come predefinita per l'utente (opzionale, di default è la lingua del contenuto).",
+ "apihelp-createaccount-example-pass": "Crea l'utente <kbd>testuser</kbd> con password <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Crea l'utente <kbd>testmailuser</kbd> e mandagli via e-mail una password generata casualmente.",
+ "apihelp-delete-summary": "Cancella una pagina.",
+ "apihelp-delete-param-title": "Titolo della pagina che si desidera eliminare. Non può essere usato insieme a <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID di pagina della pagina da cancellare. Non può essere usato insieme con <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Motivo della cancellazione. Se non indicato, verrà usata una motivazione generata automaticamente.",
+ "apihelp-delete-param-watch": "Aggiunge la pagina agli osservati speciali dell'utente attuale.",
+ "apihelp-delete-param-unwatch": "Rimuove la pagina dagli osservati speciali dell'utente attuale.",
+ "apihelp-delete-param-oldimage": "Il nome della vecchia immagine da cancellare, come fornita da [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Cancella <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Cancella la <kbd>Main Page</kbd> con motivazione <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Questo modulo è stato disabilitato.",
+ "apihelp-edit-summary": "Crea e modifica pagine.",
+ "apihelp-edit-param-title": "Titolo della pagina da modificare. Non può essere usato insieme a <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID di pagina della pagina da modificare. Non può essere usato insieme con <var>$1title</var>.",
+ "apihelp-edit-param-section": "Numero di sezione. <kbd>0</kbd> per la sezione iniziale, <kbd>new</kbd> per una nuova sezione.",
+ "apihelp-edit-param-sectiontitle": "Il titolo per una nuova sezione.",
+ "apihelp-edit-param-text": "Contenuto della pagina.",
+ "apihelp-edit-param-summary": "Oggetto della modifica. Anche titolo della sezione se $1sezione=new e $1sectiontitle non è impostato.",
+ "apihelp-edit-param-tags": "Cambia i tag da applicare alla revisione.",
+ "apihelp-edit-param-minor": "Modifica minore.",
+ "apihelp-edit-param-notminor": "Modifica non minore.",
+ "apihelp-edit-param-bot": "Contrassegna questa modifica come eseguita da un bot.",
+ "apihelp-edit-param-createonly": "Non modificare la pagina se già esiste.",
+ "apihelp-edit-param-nocreate": "Genera un errore se la pagina non esiste.",
+ "apihelp-edit-param-watch": "Aggiunge la pagina agli osservati speciali dell'utente attuale.",
+ "apihelp-edit-param-unwatch": "Rimuove la pagina dagli osservati speciali dell'utente attuale.",
+ "apihelp-edit-param-redirect": "Risolvi automaticamente redirect.",
+ "apihelp-edit-param-contentmodel": "Modello di contenuto dei nuovi contenuti.",
+ "apihelp-edit-param-token": "Il token deve sempre essere inviato come ultimo parametro, o almeno dopo il parametro $1text.",
+ "apihelp-edit-example-edit": "Modifica una pagina.",
+ "apihelp-edit-example-prepend": "Anteponi <kbd>_&#95;NOTOC_&#95;</kbd> a una pagina.",
+ "apihelp-emailuser-summary": "Manda un'e-mail ad un utente.",
+ "apihelp-emailuser-param-target": "Utente a cui inviare l'e-mail.",
+ "apihelp-emailuser-param-subject": "Oggetto dell'e-mail.",
+ "apihelp-emailuser-param-text": "Testo dell'e-mail.",
+ "apihelp-emailuser-param-ccme": "Mandami una copia di questa mail.",
+ "apihelp-emailuser-example-email": "Manda una e-mail all'utente <kbd>WikiSysop</kbd> con il testo <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Espande tutti i template all'interno del wikitesto.",
+ "apihelp-expandtemplates-param-title": "Titolo della pagina.",
+ "apihelp-expandtemplates-param-text": "Wikitesto da convertire.",
+ "apihelp-expandtemplates-param-prop": "Quale informazione ottenere.\n\nNota che se non è selezionato alcun valore, il risultato conterrà il codice wiki, ma l'output sarà in un formato obsoleto.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Il wikitext espanso.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Proprietà della pagina definite dalle parole magiche estese nel wikitesto.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Se l'output sia volatile e non debba essere riutilizzato altrove all'interno della pagina.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Il tempo massimo dopo il quale le memorizzazioni temporanee (cache) del risultato dovrebbero essere invalidate.",
+ "apihelp-feedcontributions-param-feedformat": "Il formato del feed.",
+ "apihelp-feedcontributions-param-year": "Dall'anno (e precedenti).",
+ "apihelp-feedcontributions-param-month": "Dal mese (e precedenti).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtra contributi che hanno queste etichette.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostra solo i contribuiti cancellati.",
+ "apihelp-feedcontributions-param-toponly": "Mostra solo i contributi che sono le ultime versioni per la pagina.",
+ "apihelp-feedcontributions-param-newonly": "Visualizza solo le modifiche che sono creazioni di pagina.",
+ "apihelp-feedcontributions-param-hideminor": "Nascondi le modifiche minori.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostra la differenza di dimensioni tra le versioni.",
+ "apihelp-feedcontributions-example-simple": "Restituisce contributi per l'utente <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-param-feedformat": "Il formato del feed.",
+ "apihelp-feedrecentchanges-param-namespace": "Namespace a cui limitare i risultati.",
+ "apihelp-feedrecentchanges-param-associated": "Includi namespace associato (discussione o principale)",
+ "apihelp-feedrecentchanges-param-days": "Intervallo di giorni per i quali limitare i risultati.",
+ "apihelp-feedrecentchanges-param-limit": "Numero massimo di risultati da restituire.",
+ "apihelp-feedrecentchanges-param-from": "Mostra i cambiamenti da allora.",
+ "apihelp-feedrecentchanges-param-hideminor": "Nascondi le modifiche minori.",
+ "apihelp-feedrecentchanges-param-hidebots": "Nascondi le modifiche apportate da bot.",
+ "apihelp-feedrecentchanges-param-hideanons": "Nascondi le modifiche fatte da utenti anonimi.",
+ "apihelp-feedrecentchanges-param-hideliu": "Nascondi le modifiche apportate dagli utenti registrati.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Nascondi modifiche verificate.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Nasconde le modifiche effettuate dall'utente attuale.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Nascondi le variazioni di appartenenza alle categorie.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtra per etichetta.",
+ "apihelp-feedrecentchanges-param-target": "Mostra solo le modifiche alle pagine collegate da questa pagina.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Mostra solo le modifiche alle pagine collegate a quella specificata.",
+ "apihelp-feedrecentchanges-example-simple": "Mostra le ultime modifiche.",
+ "apihelp-feedrecentchanges-example-30days": "Mostra le modifiche degli ultimi 30 giorni.",
+ "apihelp-feedwatchlist-param-feedformat": "Il formato del feed.",
+ "apihelp-feedwatchlist-param-hours": "Elenca le pagine modificate entro queste ultime ore.",
+ "apihelp-feedwatchlist-param-linktosections": "Collega direttamente alla sezione modificata, se possibile.",
+ "apihelp-feedwatchlist-example-all6hrs": "Mostra tutte le modifiche alle pagine osservate nelle ultime 6 ore.",
+ "apihelp-filerevert-summary": "Ripristina un file ad una versione precedente.",
+ "apihelp-filerevert-param-filename": "Nome del file di destinazione, senza il prefisso 'File:'.",
+ "apihelp-filerevert-param-comment": "Commento sul caricamento.",
+ "apihelp-filerevert-param-archivename": "Nome dell'archivio della versione da ripristinare.",
+ "apihelp-filerevert-example-revert": "Ripristina <kbd>Wiki.png</kbd> alla versione del <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Mostra la guida per i moduli specificati.",
+ "apihelp-help-param-toc": "Includi un indice nell'output HTML.",
+ "apihelp-help-example-main": "Aiuto per il modulo principale.",
+ "apihelp-help-example-submodules": "Aiuto per <kbd>action=query</kbd> e tutti i suoi sotto-moduli.",
+ "apihelp-help-example-recursive": "Tutti gli aiuti in una pagina.",
+ "apihelp-help-example-help": "Aiuto per lo stesso modulo di aiuto.",
+ "apihelp-imagerotate-summary": "Ruota una o più immagini.",
+ "apihelp-imagerotate-param-rotation": "Gradi di rotazione dell'immagine in senso orario.",
+ "apihelp-imagerotate-example-simple": "Ruota <kbd>File:Example.png</kbd> di <kbd>90</kbd> gradi.",
+ "apihelp-imagerotate-example-generator": "Ruota tutte le immagini in <kbd>Category:Flip</kbd> di <kbd>180</kbd> gradi.",
+ "apihelp-import-param-summary": "Oggetto nel registro di importazione.",
+ "apihelp-import-param-xml": "File XML caricato.",
+ "apihelp-import-param-interwikisource": "Per importazioni interwiki: wiki da cui importare.",
+ "apihelp-import-param-interwikipage": "Per importazioni interwiki: pagina da importare.",
+ "apihelp-import-param-fullhistory": "Per importazioni interwiki: importa l'intera cronologia, non solo la versione attuale.",
+ "apihelp-import-param-templates": "Per importazioni interwiki: importa anche tutti i template inclusi.",
+ "apihelp-import-param-namespace": "Importa in questo namespace. Non può essere usato insieme a <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importa come sottopagina di questa pagina. Non può essere usato insieme a <var>$1namespace</var>.",
+ "apihelp-import-example-import": "Importa [[meta:Help:ParserFunctions]] nel namespace 100 con cronologia completa.",
+ "apihelp-linkaccount-summary": "Collegamento di un'utenza di un provider di terze parti all'utente corrente.",
+ "apihelp-linkaccount-example-link": "Avvia il processo di collegamento ad un'utenza da <kbd>Example</kbd>.",
+ "apihelp-login-summary": "Accedi e ottieni i cookie di autenticazione.",
+ "apihelp-login-extended-description": "Questa azione deve essere usata esclusivamente in combinazione con [[Special:BotPasswords]]; utilizzarla per l'accesso all'account principale è deprecato e può fallire senza preavviso. Per accedere in modo sicuro all'utenza principale, usa <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Questa azione è deprecata e può fallire senza preavviso. Per accedere in modo sicuro, usa [[Special:ApiHelp/clientlogin|action=clientlogin]].",
+ "apihelp-login-param-name": "Nome utente.",
+ "apihelp-login-param-password": "Password.",
+ "apihelp-login-param-domain": "Dominio (opzionale).",
+ "apihelp-login-example-gettoken": "Recupera un token di login.",
+ "apihelp-login-example-login": "Entra.",
+ "apihelp-logout-summary": "Esci e cancella i dati della sessione.",
+ "apihelp-logout-example-logout": "Disconnetti l'utente attuale.",
+ "apihelp-mergehistory-summary": "Unisce cronologie pagine.",
+ "apihelp-mergehistory-param-from": "Il titolo della pagina da cui cronologia sarà unita. Non può essere usato insieme a <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "L'ID della pagina da cui cronologia sarà unita. Non può essere usato insieme a <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Il titolo della pagina in cui cronologia sarà unita. Non può essere usato insieme a <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "L'ID della pagina in cui cronologia sarà unita. Non può essere usato insieme a <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Il timestamp fino a cui le versioni saranno spostate dalla cronologia della pagina di origine a quella della pagina di destinazione. Se omesso, l'intera cronologia della pagina di origine sarà unita nella pagina di destinazione.",
+ "apihelp-mergehistory-param-reason": "Motivo per l'unione della cronologia.",
+ "apihelp-mergehistory-example-merge": "Unisci l'intera cronologia di <kbd>Oldpage</kbd> in <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Unisci le versioni della pagina <kbd>Oldpage</kbd> fino a <kbd>2015-12-31T04:37:41Z</kbd> in <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Sposta una pagina.",
+ "apihelp-move-param-to": "Titolo a cui spostare la pagina.",
+ "apihelp-move-param-reason": "Motivo della rinomina.",
+ "apihelp-move-param-movetalk": "Rinomina la pagina di discussione, se esiste.",
+ "apihelp-move-param-movesubpages": "Rinomina sottopagine, se applicabile.",
+ "apihelp-move-param-noredirect": "Non creare un rinvio.",
+ "apihelp-move-param-watch": "Aggiunge la pagina e il redirect agli osservati speciali dell'utente attuale.",
+ "apihelp-move-param-unwatch": "Rimuovi la pagina e il redirect dagli osservati speciali dell'utente attuale.",
+ "apihelp-move-param-ignorewarnings": "Ignora i messaggi di avvertimento del sistema.",
+ "apihelp-move-example-move": "Sposta <kbd>Badtitle</kbd> a <kbd>Goodtitle</kbd> senza lasciare redirect.",
+ "apihelp-opensearch-param-search": "Stringa di ricerca.",
+ "apihelp-opensearch-param-limit": "Numero massimo di risultati da restituire.",
+ "apihelp-opensearch-param-suggest": "Non fare nulla se <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> è falso.",
+ "apihelp-opensearch-param-format": "Il formato dell'output.",
+ "apihelp-opensearch-example-te": "Trova le pagine che iniziano con <kbd>Te</kbd>.",
+ "apihelp-options-param-optionvalue": "Il valore per l'opzione specificata da <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Reimposta tutte le preferenze.",
+ "apihelp-paraminfo-summary": "Ottieni informazioni sui moduli API.",
+ "apihelp-paraminfo-param-helpformat": "Formato delle stringhe di aiuto.",
+ "apihelp-parse-param-summary": "Oggetto da analizzare.",
+ "apihelp-parse-param-redirects": "Se <var>$1page</var> o <var>$1pageid</var> è impostato come reindirizzamento, lo risolve.",
+ "apihelp-parse-param-prop": "Quali pezzi di informazioni ottenere:",
+ "apihelp-parse-example-text": "Analizza wikitext.",
+ "apihelp-parse-example-texttitle": "Analizza wikitext, specificando il titolo della pagina.",
+ "apihelp-parse-example-summary": "Analizza un oggetto.",
+ "apihelp-patrol-summary": "Verifica una pagina o versione.",
+ "apihelp-patrol-param-rcid": "ID della modifica recente da verificare.",
+ "apihelp-patrol-param-revid": "ID versione da verificare.",
+ "apihelp-patrol-param-tags": "Modifica etichette da applicare all'elemento del registro delle verifiche.",
+ "apihelp-patrol-example-rcid": "Verifica una modifica recente.",
+ "apihelp-patrol-example-revid": "Verifica una versione.",
+ "apihelp-protect-summary": "Modifica il livello di protezione di una pagina.",
+ "apihelp-protect-param-title": "Titolo della pagina da (s)proteggere. Non può essere usato insieme a <var>$1pageid</var>.",
+ "apihelp-protect-param-pageid": "ID della pagina da (s)proteggere. Non può essere usato insieme con $1title.",
+ "apihelp-protect-param-tags": "Modifica etichette da applicare all'elemento del registro delle protezioni.",
+ "apihelp-protect-example-protect": "Proteggi una pagina.",
+ "apihelp-protect-example-unprotect": "Sproteggi una pagina impostando restrizione su <kbd>all</kbd> (cioè a tutti è consentito intraprendere l'azione).",
+ "apihelp-protect-example-unprotect2": "Sproteggi una pagina impostando nessuna restrizione.",
+ "apihelp-purge-summary": "Pulisce la cache per i titoli indicati.",
+ "apihelp-purge-param-forcelinkupdate": "Aggiorna la tabella dei collegamenti.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Aggiorna la tabella dei collegamenti per questa pagina, e per ogni pagina che usa questa pagina come template.",
+ "apihelp-query-param-list": "Quali elenchi ottenere.",
+ "apihelp-query-param-meta": "Quali metadati ottenere.",
+ "apihelp-query-param-export": "Esporta la versione attuale di tutte le pagine ottenute o generate.",
+ "apihelp-query+allcategories-summary": "Enumera tutte le categorie.",
+ "apihelp-query+allcategories-param-from": "La categoria da cui iniziare l'elenco.",
+ "apihelp-query+allcategories-param-to": "La categoria al quale interrompere l'elenco.",
+ "apihelp-query+allcategories-param-prefix": "Ricerca per tutti i titoli delle categorie che iniziano con questo valore.",
+ "apihelp-query+allcategories-param-dir": "Direzione dell'ordinamento.",
+ "apihelp-query+allcategories-param-limit": "Quante categorie restituire.",
+ "apihelp-query+allcategories-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Aggiungi il numero di pagine nella categoria.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Etichetta categorie che sono nascoste con <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Elenca categorie con informazioni sul numero di pagine in ognuna.",
+ "apihelp-query+alldeletedrevisions-summary": "Elenca tutte le versioni cancellate da un utente o in un namespace.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Può essere utilizzato solo con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Non può essere utilizzato con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+alldeletedrevisions-param-end": "Il timestamp al quale interrompere l'elenco.",
+ "apihelp-query+alldeletedrevisions-param-from": "Inizia elenco a questo titolo.",
+ "apihelp-query+alldeletedrevisions-param-to": "Interrompi elenco a questo titolo.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Ricerca per tutti i titoli delle pagine che iniziano con questo valore.",
+ "apihelp-query+alldeletedrevisions-param-user": "Elenca solo le versioni di questo utente.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Non elencare le versioni di questo utente.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Elenca solo le pagine in questo namespace.",
+ "apihelp-query+alldeletedrevisions-example-user": "Elenca gli ultimi 50 contributi cancellati dell'utente <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Elenca le prime 50 versioni cancellate nel namespace principale.",
+ "apihelp-query+allfileusages-param-from": "Il titolo del file da cui iniziare l'elenco.",
+ "apihelp-query+allfileusages-param-to": "Il titolo del file al quale interrompere l'elenco.",
+ "apihelp-query+allfileusages-param-prefix": "Ricerca per tutti i titoli dei file che iniziano con questo valore.",
+ "apihelp-query+allfileusages-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Aggiunge il titolo del file.",
+ "apihelp-query+allfileusages-param-limit": "Quanti elementi totali restituire.",
+ "apihelp-query+allfileusages-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+allfileusages-example-generator": "Ottieni le pagine contenenti i file.",
+ "apihelp-query+allimages-param-sort": "Proprietà di ordinamento.",
+ "apihelp-query+allimages-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+allimages-param-from": "Il titolo dell'immagine da cui iniziare l'elenco. Può essere utilizzato solo con $1sort=name.",
+ "apihelp-query+allimages-param-start": "Il timestamp da cui iniziare l'elenco. Può essere utilizzato solo con $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "Il timestamp al quale interrompere l'elenco. Può essere utilizzato solo con $1sort=timestamp.",
+ "apihelp-query+allimages-param-limit": "Quante immagini in totale restituire.",
+ "apihelp-query+allimages-example-B": "Mostra un elenco di file a partire dalla lettera <kbd>B</kbd>.",
+ "apihelp-query+alllinks-summary": "Elenca tutti i collegamenti che puntano ad un namespace indicato.",
+ "apihelp-query+alllinks-param-from": "Il titolo del collegamento da cui iniziare l'elenco.",
+ "apihelp-query+alllinks-param-to": "Il titolo del collegamento al quale interrompere l'elenco.",
+ "apihelp-query+alllinks-param-prefix": "Ricerca per tutti i titoli dei collegamenti che iniziano con questo valore.",
+ "apihelp-query+alllinks-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Aggiunge l'ID pagina della pagina collegata (non può essere usato con <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Aggiunge il titolo del collegamento.",
+ "apihelp-query+alllinks-param-namespace": "Il namespace da elencare.",
+ "apihelp-query+alllinks-param-limit": "Quanti elementi totali restituire.",
+ "apihelp-query+alllinks-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+alllinks-example-generator": "Ottieni le pagine contenenti i collegamenti.",
+ "apihelp-query+allmessages-summary": "Restituisce messaggi da questo sito.",
+ "apihelp-query+allmessages-param-prop": "Quali proprietà ottenere.",
+ "apihelp-query+allmessages-param-lang": "Restituisci messaggi in questa lingua.",
+ "apihelp-query+allmessages-param-prefix": "Restituisci messaggi con questo prefisso.",
+ "apihelp-query+allpages-param-from": "Il titolo di pagina da cui iniziare l'elenco.",
+ "apihelp-query+allpages-param-to": "Il titolo di pagina al quale interrompere l'elenco.",
+ "apihelp-query+allpages-param-prefix": "Ricerca per tutti i titoli delle pagine che iniziano con questo valore.",
+ "apihelp-query+allpages-param-namespace": "Il namespace da elencare.",
+ "apihelp-query+allpages-param-filterredir": "Quali pagine elencare.",
+ "apihelp-query+allpages-param-prtype": "Limita alle sole pagine protette.",
+ "apihelp-query+allpages-param-limit": "Quante pagine totali restituire.",
+ "apihelp-query+allpages-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+allredirects-param-from": "Il titolo del reindirizzamento da cui iniziare l'elenco.",
+ "apihelp-query+allredirects-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Aggiunge il titolo del redirect.",
+ "apihelp-query+allredirects-param-namespace": "Il namespace da elencare.",
+ "apihelp-query+allredirects-param-limit": "Quanti elementi totali restituire.",
+ "apihelp-query+allredirects-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+allredirects-example-generator": "Ottieni le pagine contenenti i reindirizzamenti.",
+ "apihelp-query+allrevisions-summary": "Elenco di tutte le versioni.",
+ "apihelp-query+allrevisions-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+allrevisions-param-end": "Il timestamp al quale interrompere l'elenco.",
+ "apihelp-query+allrevisions-param-user": "Elenca solo le versioni di questo utente.",
+ "apihelp-query+allrevisions-param-excludeuser": "Non elencare le versioni di questo utente.",
+ "apihelp-query+allrevisions-param-namespace": "Elenca solo le pagine in questo namespace.",
+ "apihelp-query+allrevisions-example-user": "Elenca gli ultimi 50 contributi dell'utente <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Elenca solo le prime 50 versioni nel namespace principale.",
+ "apihelp-query+mystashedfiles-param-prop": "Quali proprietà recuperare per il file.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Recupera la dimensione del file e le dimensioni dell'immagine.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Recupera il tipo MIME del file e il tipo media.",
+ "apihelp-query+mystashedfiles-param-limit": "Quanti file restituire.",
+ "apihelp-query+alltransclusions-summary": "Elenca tutte le inclusioni (pagine incorporate utilizzando &#123;&#123;x&#125;&#125;), comprese le non esistenti.",
+ "apihelp-query+alltransclusions-param-from": "Il titolo dell'inclusione da cui iniziare l'elenco.",
+ "apihelp-query+alltransclusions-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Aggiunge il titolo dell'inclusione.",
+ "apihelp-query+alltransclusions-param-namespace": "Il namespace da elencare.",
+ "apihelp-query+alltransclusions-param-limit": "Quanti elementi totali restituire.",
+ "apihelp-query+alltransclusions-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+alltransclusions-example-generator": "Ottieni pagine contenenti le inclusioni.",
+ "apihelp-query+allusers-param-from": "Il nome utente da cui iniziare l'elenco.",
+ "apihelp-query+allusers-param-to": "Il nome utente al quale interrompere l'elenco.",
+ "apihelp-query+allusers-param-prefix": "Ricerca per tutti gli utenti che iniziano con questo valore.",
+ "apihelp-query+allusers-param-dir": "Direzione dell'ordinamento.",
+ "apihelp-query+allusers-param-group": "Includi solo gli utenti nei gruppi indicati.",
+ "apihelp-query+allusers-param-excludegroup": "Escludi gli utenti nei gruppi indicati.",
+ "apihelp-query+allusers-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+allusers-param-limit": "Quanti nomi utente totali restituire.",
+ "apihelp-query+authmanagerinfo-summary": "Recupera informazioni circa l'attuale stato di autenticazione.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Verifica se lo stato di autenticazione dell'utente attuale è sufficiente per la specifica operazione sensibile alla sicurezza.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Recupera informazioni circa le richieste di autenticazione necessarie per la specifica azione di autenticazione.",
+ "apihelp-query+authmanagerinfo-example-login": "Recupera le richieste che possono essere utilizzate quando si inizia l'accesso.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Recupera le richieste che possono essere utilizzate quando si inizia l'accesso, con i campi del modulo uniti.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Verificare se l'autenticazione è sufficiente per l'azione <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Trova tutte le pagine che puntano a quella specificata.",
+ "apihelp-query+backlinks-param-namespace": "Il namespace da elencare.",
+ "apihelp-query+backlinks-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+backlinks-param-redirect": "Se la pagina collegata è un redirect, trova tutte le pagine che puntano al redirect. Il limite massimo è dimezzato.",
+ "apihelp-query+backlinks-example-simple": "Mostra collegamenti a <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+blocks-param-end": "Il timestamp al quale interrompere l'elenco.",
+ "apihelp-query+blocks-param-limit": "Il numero massimo di blocchi da elencare.",
+ "apihelp-query+blocks-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Aggiunge l'ID del blocco.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Aggiunge il nome utente dell'utente bloccato.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Aggiunge l'ID utente dell'utente bloccato.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Aggiunge il nome utente dell'utente che ha effettuato il blocco.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Aggiunge l'ID utente dell'utente che ha effettuato il blocco.",
+ "apihelp-query+blocks-example-simple": "Elenca i blocchi.",
+ "apihelp-query+categories-summary": "Elenca tutte le categorie a cui appartengono le pagine.",
+ "apihelp-query+categories-param-prop": "Quali proprietà aggiuntive ottenere per ogni categoria.",
+ "apihelp-query+categories-param-show": "Quale tipo di categorie mostrare.",
+ "apihelp-query+categories-param-limit": "Quante categorie restituire.",
+ "apihelp-query+categories-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+categoryinfo-summary": "Restituisce informazioni su una categoria indicata.",
+ "apihelp-query+categoryinfo-example-simple": "Ottieni informazioni su <kbd>Category:Foo</kbd> e <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Elenca tutte le pagine in una categoria indicata.",
+ "apihelp-query+categorymembers-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Aggiunge l'ID pagina.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Aggiunge il titolo e l'ID namespace della pagina.",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Aggiunge il tipo di come la pagina è stata categorizzata (<samp>page</samp>, <samp>subcat</samp> o <samp>file</samp>).",
+ "apihelp-query+categorymembers-param-namespace": "Includi solo le pagine in questi namespace. Nota che può essere usato <kbd>$1type=subcat</kbd> o <kbd>$1type=file</kbd> anziché <kbd>$1namespace=14</kbd> o <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "Il numero massimo di pagine da restituire.",
+ "apihelp-query+categorymembers-param-sort": "Proprietà di ordinamento.",
+ "apihelp-query+categorymembers-param-dir": "In quale direzione ordinare.",
+ "apihelp-query+categorymembers-param-start": "Il timestamp da cui iniziare l'elenco. Può essere utilizzato solo con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Il timestamp al quale interrompere l'elenco. Può essere utilizzato solo con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkey": "Usa $1starthexsortkey invece.",
+ "apihelp-query+categorymembers-param-endsortkey": "Usa $1endhexsortkey invece.",
+ "apihelp-query+categorymembers-example-simple": "Ottieni le prime 10 pagine in <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Ottieni informazioni sulle prime 10 pagine in <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-param-limit": "Quanti contributi restituire.",
+ "apihelp-query+deletedrevisions-param-start": "Il timestamp da cui iniziare l'elenco. Ignorato quando si elabora un elenco di ID versioni.",
+ "apihelp-query+deletedrevisions-param-end": "Il timestamp al quale interrompere l'elenco. Ignorato quando si elabora un elenco di ID versioni.",
+ "apihelp-query+deletedrevisions-param-tag": "Elenca solo le versioni etichettate con questa etichetta.",
+ "apihelp-query+deletedrevisions-param-user": "Elenca solo le versioni di questo utente.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Non elencare le versioni di questo utente.",
+ "apihelp-query+deletedrevisions-example-titles": "Elenca le versioni cancellate delle pagine <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con il contenuto.",
+ "apihelp-query+deletedrevisions-example-revids": "Elenca le informazioni per la versione cancellata <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+deletedrevs-param-end": "Il timestamp al quale interrompere l'elenco.",
+ "apihelp-query+deletedrevs-param-from": "Inizia elenco a questo titolo.",
+ "apihelp-query+deletedrevs-param-to": "Interrompi elenco a questo titolo.",
+ "apihelp-query+deletedrevs-param-prefix": "Ricerca per tutti i titoli delle pagine che iniziano con questo valore.",
+ "apihelp-query+deletedrevs-param-unique": "Elenca solo una versione per ogni pagina.",
+ "apihelp-query+deletedrevs-param-tag": "Elenca solo le versioni etichettate con questa etichetta.",
+ "apihelp-query+deletedrevs-param-user": "Elenca solo le versioni di questo utente.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Non elencare le versioni di questo utente.",
+ "apihelp-query+deletedrevs-param-namespace": "Elenca solo le pagine in questo namespace.",
+ "apihelp-query+deletedrevs-param-limit": "Il numero massimo di versioni da elencare.",
+ "apihelp-query+disabled-summary": "Questo modulo query è stato disabilitato.",
+ "apihelp-query+duplicatefiles-param-limit": "Quanti file duplicati restituire.",
+ "apihelp-query+duplicatefiles-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+duplicatefiles-example-simple": "Cerca i duplicati di [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Cerca i duplicati di tutti i file.",
+ "apihelp-query+embeddedin-summary": "Trova tutte le pagine che incorporano (transclusione) il titolo specificato.",
+ "apihelp-query+embeddedin-param-namespace": "Il namespace da elencare.",
+ "apihelp-query+embeddedin-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+embeddedin-param-limit": "Quante pagine totali restituire.",
+ "apihelp-query+extlinks-param-limit": "Quanti collegamenti restituire.",
+ "apihelp-query+exturlusage-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Aggiunge l'ID della pagina.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Aggiunge il titolo e l'ID namespace della pagina.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Aggiunge l'URL utilizzato nella pagina.",
+ "apihelp-query+exturlusage-param-namespace": "I namespace da elencare.",
+ "apihelp-query+exturlusage-param-limit": "Quante pagine restituire.",
+ "apihelp-query+filearchive-param-from": "Il titolo dell'immagine da cui iniziare l'elenco.",
+ "apihelp-query+filearchive-param-limit": "Quante immagini restituire in totale.",
+ "apihelp-query+filearchive-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Aggiunge MIME dell'immagine.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Aggiunge la profondità di bit della versione.",
+ "apihelp-query+filearchive-example-simple": "Mostra un elenco di tutti i file cancellati.",
+ "apihelp-query+fileusage-summary": "Trova tutte le pagine che utilizzano il file specificato.",
+ "apihelp-query+fileusage-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "ID pagina di ogni pagina.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Titolo di ogni pagina.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Indica se la pagina è un redirect.",
+ "apihelp-query+fileusage-param-namespace": "Includi solo le pagine in questi namespace.",
+ "apihelp-query+fileusage-param-show": "Mostra solo gli elementi che soddisfano questi criteri:\n;redirect:mostra solo i redirect.\n;!redirect:mostra solo i non redirect.",
+ "apihelp-query+fileusage-example-simple": "Ottieni un elenco di pagine che usano [[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "Restituisce informazione sul file sulla cronologia di caricamento.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Aggiunge il tipo MIME del file.",
+ "apihelp-query+imageinfo-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+imageinfo-param-urlheight": "Simile a $1urlwidth.",
+ "apihelp-query+images-param-limit": "Quanti file restituire.",
+ "apihelp-query+images-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+images-example-simple": "Ottieni un elenco di file usati in [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Trova tutte le pagine che utilizzano il titolo dell'immagine specificato.",
+ "apihelp-query+imageusage-param-namespace": "Il namespace da elencare.",
+ "apihelp-query+imageusage-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+imageusage-param-redirect": "Se la pagina collegata è un redirect, trova tutte le pagine che puntano al redirect. Il limite massimo è dimezzato.",
+ "apihelp-query+info-summary": "Ottieni informazioni base sulla pagina.",
+ "apihelp-query+info-param-prop": "Quali proprietà aggiuntive ottenere:",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "Il numero di osservatori di ogni pagina che hanno visitato le ultime modifiche alla pagina, se consentito.",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefisso per l'interwiki.",
+ "apihelp-query+iwbacklinks-param-limit": "Quante pagine totali restituire.",
+ "apihelp-query+iwbacklinks-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Aggiunge il prefisso dell'interwiki.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Aggiunge il titolo dell'interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+iwlinks-summary": "Restituisce tutti i collegamenti interwiki dalle pagine indicate.",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Aggiunge l'URL completo.",
+ "apihelp-query+iwlinks-param-limit": "Quanti collegamenti interwiki restituire.",
+ "apihelp-query+iwlinks-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+langbacklinks-param-limit": "Quante pagine totali restituire.",
+ "apihelp-query+langbacklinks-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Aggiunge il titolo del collegamento linguistico.",
+ "apihelp-query+langbacklinks-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Aggiunge l'URL completo.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Aggiunge il nome nativo della lingua.",
+ "apihelp-query+langlinks-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+links-param-namespace": "Mostra collegamenti solo in questi namespace.",
+ "apihelp-query+links-param-limit": "Quanti collegamenti restituire.",
+ "apihelp-query+links-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+linkshere-summary": "Trova tutte le pagine che puntano a quelle specificate.",
+ "apihelp-query+linkshere-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "ID pagina di ogni pagina.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Titolo di ogni pagina.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Indica se la pagina è un redirect.",
+ "apihelp-query+linkshere-param-namespace": "Includi solo le pagine in questi namespace.",
+ "apihelp-query+linkshere-param-show": "Mostra solo gli elementi che soddisfano questi criteri:\n;redirect:mostra solo i redirect.\n;!redirect:mostra solo i non redirect.",
+ "apihelp-query+linkshere-example-simple": "Ottieni un elenco di pagine che puntano a [[Main Page]].",
+ "apihelp-query+logevents-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+logevents-paramvalue-prop-title": "Aggiunge il titolo della pagine per l'evento nel registro.",
+ "apihelp-query+logevents-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+logevents-param-end": "Il timestamp al quale interrompere l'elenco.",
+ "apihelp-query+pageswithprop-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Aggiunge l'ID pagina.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Aggiunge il titolo e l'ID namespace della pagina.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Aggiunge il valore della proprietà di pagina.",
+ "apihelp-query+pageswithprop-param-limit": "Il numero massimo di pagine da restituire.",
+ "apihelp-query+pageswithprop-param-dir": "In quale direzione ordinare.",
+ "apihelp-query+prefixsearch-param-search": "Stringa di ricerca.",
+ "apihelp-query+prefixsearch-param-limit": "Numero massimo di risultati da restituire.",
+ "apihelp-query+prefixsearch-param-offset": "Numero di risultati da saltare",
+ "apihelp-query+prefixsearch-param-profile": "Profilo di ricerca da utilizzare.",
+ "apihelp-query+protectedtitles-summary": "Elenca tutti i titoli protetti dalla creazione.",
+ "apihelp-query+protectedtitles-param-namespace": "Elenca solo i titoli in questi namespace.",
+ "apihelp-query+protectedtitles-param-level": "Elenca solo i titoli con questi livelli di protezione.",
+ "apihelp-query+protectedtitles-param-limit": "Quante pagine totali restituire.",
+ "apihelp-query+protectedtitles-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Aggiunge l'utente che ha aggiunto la protezione.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Aggiunge l'ID utente che ha aggiunto la protezione.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Aggiunge il commento per la protezione.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Aggiunge il livello di protezione.",
+ "apihelp-query+protectedtitles-example-generator": "Trova collegamenti a titoli protetti nel namespace principale.",
+ "apihelp-query+querypage-param-limit": "Numero di risultati da restituire.",
+ "apihelp-query+querypage-example-ancientpages": "Restituisce risultati da [[Special:Ancientpages|Speciale:PagineMenoRecenti]].",
+ "apihelp-query+random-param-namespace": "Restituisci le pagine solo in questi namespace.",
+ "apihelp-query+random-param-redirect": "Usa <kbd>$1filterredir=redirects</kbd> invece.",
+ "apihelp-query+random-example-simple": "Restituisce due pagine casuali dal namespace principale.",
+ "apihelp-query+recentchanges-summary": "Elenca le modifiche recenti.",
+ "apihelp-query+recentchanges-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+recentchanges-param-end": "Il timestamp al quale interrompere l'elenco.",
+ "apihelp-query+recentchanges-example-simple": "Elenco modifiche recenti.",
+ "apihelp-query+redirects-summary": "Restituisce tutti i reindirizzamenti alla data indicata.",
+ "apihelp-query+redirects-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "ID pagina di ogni redirect.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Titolo di ogni redirect.",
+ "apihelp-query+redirects-param-namespace": "Includi solo le pagine in questi namespace.",
+ "apihelp-query+redirects-param-limit": "Quanti reindirizzamenti restituire.",
+ "apihelp-query+redirects-example-simple": "Ottieni un elenco di redirect a [[Main Page]].",
+ "apihelp-query+revisions-param-startid": "Inizia l'elenco dal timestamp di questa versione. La versione deve esistere, ma non necessariamente deve appartenere a questa pagina.",
+ "apihelp-query+revisions-param-start": "Il timestamp della versione da cui iniziare l'elenco.",
+ "apihelp-query+revisions-param-tag": "Elenca solo le versioni etichettate con questa etichetta.",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "L'ID della versione.",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Il timestamp della versione.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Utente che ha effettuato la versione.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "ID utente dell'autore della versione.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Testo della versione.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Etichette della versione.",
+ "apihelp-query+search-summary": "Eseguire una ricerca di testo completa.",
+ "apihelp-query+search-param-what": "Quale tipo di ricerca effettuare.",
+ "apihelp-query+search-param-info": "Quali metadati restituire.",
+ "apihelp-query+search-param-prop": "Quali proprietà restituire.",
+ "apihelp-query+search-paramvalue-prop-size": "Aggiungi la dimensione della pagina in byte.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Aggiungi il conteggio delle parole nella pagina.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Aggiungi il timestamp di quando la pagina è stata modificata l'ultima volta.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Aggiunge il titolo del redirect corrispondente.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Aggiunge il titolo della sezione corrispondente.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignorato.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignorato.",
+ "apihelp-query+search-param-limit": "Quante pagine totali restituire.",
+ "apihelp-query+siteinfo-param-prop": "Quali informazioni ottenere:",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Restituisce le statistiche del sito.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Restituisci librerie installate sul wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Restituisci estensioni installate sul wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Restituisce informazioni sui tipi di restrizione (protezione) disponibili.",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Restituisce un'elenco di codici lingua per cui [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] è attivo, e le varianti supportate per ognuno di essi.",
+ "apihelp-query+siteinfo-example-simple": "Recupera informazioni sul sito.",
+ "apihelp-query+tags-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+templates-param-limit": "Quanti template restituire.",
+ "apihelp-query+templates-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+tokens-param-type": "Tipi di token da richiedere.",
+ "apihelp-query+tokens-example-simple": "Recupera un token csrf (il predefinito).",
+ "apihelp-query+transcludedin-summary": "Trova tutte le pagine che incorporano quella specificata.",
+ "apihelp-query+transcludedin-param-prop": "Quali proprietà ottenere:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID pagina di ogni pagina.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Titolo di ogni pagina.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Indica se la pagina è un redirect.",
+ "apihelp-query+transcludedin-param-namespace": "Includi solo le pagine in questi namespace.",
+ "apihelp-query+transcludedin-param-show": "Mostra solo gli elementi che soddisfano questi criteri:\n;redirect:mostra solo i redirect.\n;!redirect:mostra solo i non redirect.",
+ "apihelp-query+transcludedin-example-simple": "Ottieni un elenco di pagine che includono <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-param-namespace": "Elenca solo i contributi in questi namespace.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Aggiunge il titolo e l'ID namespace della pagina.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etichetta modifiche verificate",
+ "apihelp-query+userinfo-summary": "Ottieni informazioni sull'utente attuale.",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Etichetta se l'utente attuale è bloccato, da chi e per quale motivo.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Aggiunge un'etichetta <samp>messages</samp> se l'utente attuale ha messaggi in attesa.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Elenca tutti i gruppi di cui l'utente attuale è automaticamente membro.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Elenca tutti i gruppi di cui l'utente attuale può essere aggiunto o rimosso.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Ottieni un token per modificare le preferenze dell'utente attuale.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Aggiungi il nome reale dell'utente.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Aggiungi la data di registrazione dell'utente.",
+ "apihelp-query+userinfo-example-simple": "Ottieni informazioni sull'utente attuale.",
+ "apihelp-query+users-summary": "Ottieni informazioni su un elenco di utenti.",
+ "apihelp-query+users-param-prop": "Quali pezzi di informazioni includere:",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Indica se può essere creata un'utenza per nomi utente validi ma non registrati.",
+ "apihelp-query+users-param-users": "Un elenco di utenti di cui ottenere informazioni.",
+ "apihelp-query+watchlist-summary": "Ottieni le ultime modifiche alle pagine tra gli osservati speciali dell'utente attuale.",
+ "apihelp-query+watchlist-param-start": "Il timestamp da cui iniziare l'elenco.",
+ "apihelp-query+watchlist-param-end": "Il timestamp al quale interrompere l'elenco.",
+ "apihelp-query+watchlist-param-prop": "Quali proprietà aggiuntive ottenere:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Aggiunge l'ID versione e l'ID pagina.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Aggiungi il titolo della pagina.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Creazioni pagina.",
+ "apihelp-query+watchlistraw-param-namespace": "Elenca solo le pagine nei namespace indicati.",
+ "apihelp-query+watchlistraw-param-limit": "Numero totale di risultati da restituire per ogni richiesta.",
+ "apihelp-query+watchlistraw-param-prop": "Quali proprietà aggiuntive ottenere:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Aggiunge data e ora dell'ultima notifica all'utente riguardo la modifica.",
+ "apihelp-query+watchlistraw-param-dir": "La direzione in cui elencare.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Il titolo (con prefisso namespace) da cui iniziare l'elenco.",
+ "apihelp-query+watchlistraw-param-totitle": "Il titolo (con prefisso namespace) al quale interrompere l'elenco.",
+ "apihelp-query+watchlistraw-example-simple": "Elenca le pagine fra gli osservati speciali dell'utente attuale.",
+ "apihelp-query+watchlistraw-example-generator": "Recupera le informazioni sulle pagine fra gli osservati speciali dell'utente attuale.",
+ "apihelp-removeauthenticationdata-summary": "Rimuove i dati di autenticazione per l'utente corrente.",
+ "apihelp-removeauthenticationdata-example-simple": "Tentativo di rimuovere gli attuali dati utente per <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Invia una mail per reimpostare la password di un utente.",
+ "apihelp-resetpassword-extended-description-noroutes": "Non sono disponibili rotte per la reimpostazione della password.\n\nAbilita le rotte in <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> per usare questo modulo.",
+ "apihelp-resetpassword-param-user": "Utente in corso di ripristino.",
+ "apihelp-resetpassword-param-email": "Indirizzo di posta elettronica dell'utente in corso di ripristino.",
+ "apihelp-resetpassword-example-user": "Invia una mail per reimpostare la password all'utente <kbd>Example</kbd>.",
+ "apihelp-resetpassword-example-email": "Invia una mail per reimpostare la password a tutti gli utenti con indirizzo di posta elettronica <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Cancella e ripristina le versioni.",
+ "apihelp-revisiondelete-param-type": "Tipo di cancellazione della versione effettuata.",
+ "apihelp-revisiondelete-param-hide": "Cosa nascondere per ogni versione.",
+ "apihelp-revisiondelete-param-show": "Cosa mostrare per ogni versione.",
+ "apihelp-revisiondelete-param-reason": "Motivo per l'eliminazione o il ripristino.",
+ "apihelp-setpagelanguage-summary": "Cambia la lingua di una pagina.",
+ "apihelp-setpagelanguage-extended-description-disabled": "La modifica della lingua di una pagina non è consentita su questo wiki.\n\nAttiva <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> per usare questa azione.",
+ "apihelp-setpagelanguage-param-reason": "Motivo per la modifica.",
+ "apihelp-stashedit-param-title": "Titolo della pagina che si sta modificando.",
+ "apihelp-stashedit-param-sectiontitle": "Il titolo per una nuova sezione.",
+ "apihelp-stashedit-param-text": "Contenuto della pagina.",
+ "apihelp-stashedit-param-contentmodel": "Modello di contenuto dei nuovi contenuti.",
+ "apihelp-stashedit-param-summary": "Oggetto della modifica.",
+ "apihelp-tag-param-reason": "Motivo per la modifica.",
+ "apihelp-tokens-param-type": "Tipi di token da richiedere.",
+ "apihelp-tokens-example-edit": "Recupera un token di modifica (il predefinito).",
+ "apihelp-unblock-summary": "Sblocca un utente",
+ "apihelp-unblock-param-user": "Nome utente, indirizzo IP o range di IP da sbloccare. Non può essere usato insieme a <var>$1id</var> o <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "ID utente da sbloccare. Non può essere usato insieme a <var>$1id</var> o <var>$1userid</var>.",
+ "apihelp-unblock-param-reason": "Motivo dello sblocco.",
+ "apihelp-unblock-param-tags": "Modifica etichette da applicare all'elemento del registro dei blocchi.",
+ "apihelp-undelete-summary": "Ripristina versioni di una pagina cancellata.",
+ "apihelp-undelete-param-title": "Titolo della pagina da ripristinare.",
+ "apihelp-undelete-param-reason": "Motivo per il ripristino.",
+ "apihelp-undelete-param-tags": "Modifica etichette da applicare all'elemento del registro delle cancellazioni.",
+ "apihelp-unlinkaccount-summary": "Rimuove un'utenza di terze parti collegata all'utente corrente.",
+ "apihelp-unlinkaccount-example-simple": "Tentativo di rimuovere il collegamento dell'utente corrente per il provider associato con <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-param-watch": "Osserva la pagina.",
+ "apihelp-upload-param-file": "Contenuto del file.",
+ "apihelp-upload-example-url": "Carica da un URL.",
+ "apihelp-userrights-param-user": "Nome utente.",
+ "apihelp-userrights-param-userid": "ID utente.",
+ "apihelp-userrights-param-add": "Aggiungere l'utente a questi gruppi, o se sono già membri, aggiornare la scadenza della loro appartenenza a quel gruppo.",
+ "apihelp-userrights-param-remove": "Rimuovi l'utente da questi gruppi.",
+ "apihelp-userrights-param-reason": "Motivo del cambiamento.",
+ "apihelp-validatepassword-summary": "Convalida una password seguendo le politiche del wiki sulle password.",
+ "apihelp-validatepassword-extended-description": "La validità è riportata come <samp>Good</samp> se la password è accettabile, <samp>Change</samp> se la password può essere utilizzata per l'accesso ma deve essere modificata, o <samp>Invalid</samp> se la password non è utilizzabile.",
+ "apihelp-validatepassword-param-password": "Password da convalidare.",
+ "apihelp-validatepassword-example-1": "Convalidare la password <kbd>foobar</kbd> per l'attuale utente.",
+ "apihelp-validatepassword-example-2": "Convalida la password <kbd>qwerty</kbd> per la creazione dell'utente <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "Aggiunge o rimuove pagine dagli osservati speciali dell'utente attuale.",
+ "apihelp-format-param-wrappedhtml": "Restituisce l'HTML ben formattato e i moduli ResourceLoader associati come un oggetto JSON.",
+ "api-pageset-param-titles": "Un elenco di titoli su cui lavorare.",
+ "api-pageset-param-pageids": "Un elenco di ID pagina su cui lavorare.",
+ "api-pageset-param-revids": "Un elenco di ID versioni su cui lavorare.",
+ "api-pageset-param-redirects-generator": "Risolvi automaticamente redirect in <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>, e nelle pagine restituite da <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Risolve automaticamente i reindirizzamenti in <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Converte i titoli in altre varianti, se necessario. Funziona solo se la lingua del contenuto del wiki supporta la conversione in varianti. Le lingue che supportano la conversione in varianti includono $1",
+ "api-help-main-header": "Modulo principale",
+ "api-help-undocumented-module": "Nessuna documentazione per il modulo $1.",
+ "api-help-flag-deprecated": "Questo modulo è deprecato.",
+ "api-help-flag-internal": "<strong>Questo modulo è interno o instabile.</strong> Il suo funzionamento potrebbe variare senza preavviso.",
+ "api-help-flag-readrights": "Questo modulo richiede i diritti di lettura.",
+ "api-help-flag-writerights": "Questo modulo richiede i diritti di scrittura.",
+ "api-help-flag-mustbeposted": "Questo modulo accetta solo richieste POST.",
+ "api-help-flag-generator": "Questo modulo può essere utilizzato come generatore.",
+ "api-help-source": "Fonte: $1",
+ "api-help-source-unknown": "Fonte: <span class=\"apihelp-unknown\">sconosciuta</span>",
+ "api-help-license": "Licenza: [[$1|$2]]",
+ "api-help-license-noname": "Licenza: [[$1|Vedi collegamento]]",
+ "api-help-license-unknown": "Licenza: <span class=\"apihelp-unknown\">sconosciuta</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parametro|Parametri}}:",
+ "api-help-param-deprecated": "Deprecato.",
+ "api-help-param-required": "Questo parametro è obbligatorio.",
+ "api-help-datatypes-header": "Tipi di dato",
+ "api-help-param-type-limit": "Tipo: intero o <kbd>max</kbd>",
+ "api-help-param-type-integer": "Tipo: {{PLURAL:$1|1=intero|2=elenco di interi}}",
+ "api-help-param-type-boolean": "Tipo: booleano ([[Special:ApiHelp/main#main/datatypes|dettagli]])",
+ "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=timestamp|2=elenco di timestamp}} ([[Special:ApiHelp/main#main/datatypes|formati consentiti]])",
+ "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome utente|2=elenco di nomi utente}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Uno dei seguenti valori|2=Valori (separati da <kbd>{{!}}</kbd> o [[Special:ApiHelp/main#main/datatypes|alternativa]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Deve essere vuoto|Può essere vuoto, o $2}}",
+ "api-help-param-limit": "Non più di $1 consentito.",
+ "api-help-param-limit2": "Non più di $1 ($2 per bot) consentito.",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Il valore non deve essere inferiore|2=I valori non devono essere inferiori}} a $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Il valore non deve essere superiore|2=I valori non devono essere superiori}} a $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Il valore deve essere compreso|2=I valori devono essere compresi}} tra $2 e $3.",
+ "api-help-param-multi-separate": "Separa i valori con <kbd>|</kbd> o [[Special:ApiHelp/main#main/datatypes|alternativa]].",
+ "api-help-param-multi-max": "Il numero massimo di valori è {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} per i bot).",
+ "api-help-param-multi-max-simple": "Il numero massimo di valori è {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Per specificare tutti i valori, utilizza <kbd>$1</kbd>.",
+ "api-help-param-default": "Predefinito: $1",
+ "api-help-param-default-empty": "Predefinito: <span class=\"apihelp-empty\">(vuoto)</span>",
+ "api-help-param-token": "Un token \"$1\" recuperato da [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-continue": "Quando più risultati sono disponibili, usa questo per continuare.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(nessuna descrizione)</span>",
+ "api-help-param-maxbytes": "Non può essere più lungo di $1 {{PLURAL:$1|byte}}.",
+ "api-help-param-maxchars": "Non può essere più lungo di $1 {{PLURAL:$1|carattere|caratteri}}.",
+ "api-help-examples": "{{PLURAL:$1|Esempio|Esempi}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permesso|Permessi}}:",
+ "api-help-open-in-apisandbox": "<small>[apri in una sandbox]</small>",
+ "api-help-authmanager-general-usage": "La procedura generale per usare questo modulo è:\n# Ottenere i campi disponibili da <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> con <kbd>amirequestsfor=$4</kbd>, e un token <kbd>$5</kbd> da <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Mostra i campi all'utente e ottieni i dati che invia.\n# Esegui un post a questo modulo, fornendo <var>$1returnurl</var> e ogni campo rilevante.\n# Controlla <samp>status</samp> nella response.\n#* Se hai ricevuto <samp>PASS</samp> o <samp>FAIL</samp>, hai finito. L'operazione nel primo caso è andata a buon fine, nel secondo no.\n#* Se hai ricevuto <samp>UI</samp>, mostra i nuovi campi all'utente e ottieni i dati che invia. Esegui un post a questo modulo con <var>$1continue</var> e i campi rilevanti settati, quindi ripeti il punto 4.\n#* Se hai ricevuto <samp>REDIRECT</samp>, dirigi l'utente a <samp>redirecttarget</samp> e aspetta che ritorni a <var>$1returnurl</var>. A quel punto esegui un post a questo modulo con <var>$1continue</var> e ogni campo passato all'URL di ritorno, e ripeti il punto 4.\n#* Se hai ricevuto <samp>RESTART</samp>, vuol dire che l'autenticazione ha funzionato ma non abbiamo un account collegato. Potresti considerare questo caso come <samp>UI</samp> o come <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-messageformat": "Formato da utilizzare per per la restituzione dei messaggi.",
+ "api-help-authmanagerhelper-preservestate": "Conserva lo stato da un precedente tentativo di accesso non riuscito, se possibile.",
+ "api-help-authmanagerhelper-returnurl": "URL di ritorno per i flussi di autenticazione di terze parti, deve essere assoluto. E' necessario fornirlo, oppure va fornito <var>$1continue</var>.\n\nAlla ricezione di una risposta <samp>REDIRECT</samp>, in genere si apre un browser o una vista web all'URL specificato <samp>redirecttarget</samp> per un flusso di autenticazione di terze parti. Quando questo è completato, la terza parte invierà il browser o la vista web a questo URL. Dovresti estrarre qualsiasi parametro POST o della richiesta dall'URL e passarli come un request <var>$1continue</var> a questo modulo API.",
+ "api-help-authmanagerhelper-continue": "Questa richiesta è una continuazione dopo una precedente risposta <samp>UI</samp> o <samp>REDIRECT</samp>. È necessario fornirlo, oppure fornire <var>$1returnurl</var>.",
+ "api-help-authmanagerhelper-additional-params": "Questo modulo accetta parametri aggiuntivi a seconda delle richieste di autenticazione disponibili. Utilizza <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> con <kbd>amirequestsfor=$1</kbd> (o una precedente risposta da questo modulo, se applicabile) per determinare le richieste disponibili e i campi usati da queste.",
+ "apierror-invalidoldimage": "Il parametro <var>oldimage</var> ha un formato non valido.",
+ "apierror-invaliduserid": "L'ID utente <var>$1</var> non è valido.",
+ "apierror-maxbytes": "Il parametro <var>$1</var> non può essere più lungo di $2 {{PLURAL:$2|byte}}",
+ "apierror-maxchars": "Il parametro <var>$1</var> non può essere più lungo di $2 {{PLURAL:$2|carattere|caratteri}}",
+ "apierror-nosuchuserid": "Non c'è alcun utente con ID $1.",
+ "apierror-timeout": "Il server non ha risposto entro il tempo previsto.",
+ "api-credits-header": "Crediti"
+}
diff --git a/www/wiki/includes/api/i18n/ja.json b/www/wiki/includes/api/i18n/ja.json
new file mode 100644
index 00000000..6a14bb59
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ja.json
@@ -0,0 +1,977 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shirayuki",
+ "2nd-player",
+ "Los688",
+ "Whym",
+ "Mfuji",
+ "Otokoume",
+ "Sujiniku",
+ "Macofe",
+ "Suchichi02",
+ "Kkairri",
+ "ネイ",
+ "Omotecho",
+ "Yusuke1109"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|説明文書]]\n* [[mw:Special:MyLanguage/API:FAQ|よくある質問]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api メーリングリスト]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグの報告とリクエスト]\n</div>\n<strong>状態:</strong> MediaWiki APIは、積極的にサポートされ、改善された成熟した安定したインターフェースです。避けようとはしていますが、時には壊れた変更が加えられるかもしれません。アップデートの通知を受け取るには、[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n<strong>誤ったリクエスト:</strong> 誤ったリクエストが API に送られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]] を参照してください。\n\n<p class=\"mw-apisandbox-link\"><strong>テスト:</strong> API のリクエストのテストは、[[Special:ApiSandbox]]で簡単に行えます。</p>",
+ "apihelp-main-param-action": "実行する操作です。",
+ "apihelp-main-param-format": "出力する形式です。",
+ "apihelp-main-param-smaxage": "<code>s-maxage</code> HTTP キャッシュ コントロール ヘッダー に、この秒数を設定します。エラーがキャッシュされることはありません。",
+ "apihelp-main-param-maxage": "<code>max-age</code> HTTP キャッシュ コントロール ヘッダー に、この秒数を設定します。エラーがキャッシュされることはありません。",
+ "apihelp-main-param-assert": "<kbd>user</kbd> を設定した場合は利用者がログイン済みかどうかを、<kbd>bot</kbd> を指定した場合はボット権限があるかどうかを、それぞれ検証します。",
+ "apihelp-main-param-assertuser": "現在のユーザーが指定されたユーザーであることを確認します。",
+ "apihelp-main-param-requestid": "任意の値を指定でき、その値が結果に含められます。リクエストを識別するために使用できます。",
+ "apihelp-main-param-servedby": "リクエストを処理したホスト名を結果に含めます。",
+ "apihelp-main-param-curtimestamp": "現在のタイムスタンプを結果に含めます。",
+ "apihelp-main-param-responselanginfo": "結果に<var>uselang</var>と<var>errorlang</var>に使用される言語を含めます。",
+ "apihelp-main-param-uselang": "メッセージの翻訳に使用する言語です。<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> は <kbd>siprop=languages</kbd> を付けると言語コードの一覧を返します。<kbd>user</kbd> を指定することで現在の利用者の個人設定の言語を、<kbd>content</kbd> を指定することでこのウィキの本文の言語を使用することもできます。",
+ "apihelp-main-param-errorsuselocal": "指定された場合、エラーテキストは{{ns:MediaWiki}}名前空間からローカルにカスタマイズされたメッセージを使用します。",
+ "apihelp-block-summary": "利用者をブロックします。",
+ "apihelp-block-param-user": "ブロックを解除する利用者名、IPアドレスまたはIPレンジ。<var>$1userid</var>とは同時に使用できません。",
+ "apihelp-block-param-userid": "ブロックする利用者のID。<var>$1user</var>とは同時に使用できません。",
+ "apihelp-block-param-expiry": "有効期限。相対的 (例: <kbd>5 months</kbd> または <kbd>2 weeks</kbd>) または絶対的 (e.g. <kbd>2014-09-18T12:34:56Z</kbd>) どちらでも構いません。<kbd>infinite</kbd>, <kbd>indefinite</kbd>, もしくは <kbd>never</kbd> と設定した場合, 無期限ブロックとなります。",
+ "apihelp-block-param-reason": "ブロックの理由。",
+ "apihelp-block-param-anononly": "匿名利用者のみブロックします(つまり、このIPアドレスからの匿名での編集を不可能にします)。",
+ "apihelp-block-param-nocreate": "アカウントの作成を禁止します。",
+ "apihelp-block-param-autoblock": "その利用者が最後に使用したIPアドレスと、ブロック後に編集を試みた際のIPアドレスを自動的にブロックします。",
+ "apihelp-block-param-noemail": "Wikiを通して電子メールを送信することを禁止します。(<code>blockemail</code> 権限が必要です)",
+ "apihelp-block-param-hidename": "ブロック記録から利用者名を秘匿します。(<code>hideuser</code> 権限が必要です)",
+ "apihelp-block-param-allowusertalk": "自身のトークページの編集を許可する (<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> に依存)。",
+ "apihelp-block-param-reblock": "その利用者がすでにブロックされている場合、ブロックを上書きします。",
+ "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。",
+ "apihelp-block-param-tags": "ブロック記録の項目に適用する変更タグ。",
+ "apihelp-block-example-ip-simple": "IPアドレス <kbd>192.0.2.5</kbd> を <kbd>First strike<kbd> という理由で3日ブロックする",
+ "apihelp-block-example-user-complex": "利用者 <kbd>Vandal</kbd> を <kbd>Vandalism</kbd> という理由で無期限ブロックし、新たなアカウント作成とメールの送信を禁止する。",
+ "apihelp-changeauthenticationdata-example-password": "現在の利用者のパスワードを <kbd>ExamplePassword</kbd> に変更する。",
+ "apihelp-checktoken-summary": "<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> のトークンの妥当性を確認します。",
+ "apihelp-checktoken-param-type": "調べるトークンの種類。",
+ "apihelp-checktoken-param-token": "調べるトークン。",
+ "apihelp-checktoken-param-maxtokenage": "トークンの最大有効期限 (秒)。",
+ "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> トークンの妥当性を調べる。",
+ "apihelp-clearhasmsg-summary": "現在の利用者の <code>hasmsg</code> フラグを消去します。",
+ "apihelp-clearhasmsg-example-1": "現在の利用者の <code>hasmsg</code> フラグを消去する。",
+ "apihelp-clientlogin-example-login": "利用者 <kbd>Example</kbd> としてのログイン処理をパスワード <kbd>ExamplePassword</kbd> で開始する",
+ "apihelp-compare-summary": "2つの版間の差分を取得します。",
+ "apihelp-compare-extended-description": "\"from\" と \"to\" の両方の版番号、ページ名、もしくはページIDを渡す必要があります。",
+ "apihelp-compare-param-fromtitle": "比較する1つ目のページ名。",
+ "apihelp-compare-param-fromid": "比較する1つ目のページID。",
+ "apihelp-compare-param-fromrev": "比較する1つ目の版。",
+ "apihelp-compare-param-totitle": "比較する2つ目のページ名。",
+ "apihelp-compare-param-toid": "比較する2つ目のページID。",
+ "apihelp-compare-param-torev": "比較する2つ目の版。",
+ "apihelp-compare-example-1": "版1と2の差分を生成する。",
+ "apihelp-createaccount-summary": "新しい利用者アカウントを作成します。",
+ "apihelp-createaccount-param-name": "利用者名。",
+ "apihelp-createaccount-param-password": "パスワード (<var>$1mailpassword</var> が設定されると無視されます)。",
+ "apihelp-createaccount-param-domain": "外部認証のドメイン (省略可能)。",
+ "apihelp-createaccount-param-token": "最初のリクエストで得られたアカウント作成用トークンです。",
+ "apihelp-createaccount-param-email": "利用者の電子メールアドレス (任意)。",
+ "apihelp-createaccount-param-realname": "利用者の本名 (省略可能)。",
+ "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、無作為なパスワードがその利用者に電子メールで送られます。",
+ "apihelp-createaccount-param-reason": "ログに記録されるアカウント作成の理由 (任意)。",
+ "apihelp-createaccount-param-language": "利用者の言語コードの既定値 (省略可能, 既定ではコンテンツ言語)。",
+ "apihelp-createaccount-example-pass": "利用者 <kbd>testuser</kbd> をパスワード <kbd>test123</kbd> として作成する。",
+ "apihelp-createaccount-example-mail": "利用者 <kbd>testmailuser</kbd>を作成し、無作為に生成されたパスワードをメールで送る。",
+ "apihelp-delete-summary": "ページを削除します。",
+ "apihelp-delete-param-title": "削除するページ名です。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-delete-param-pageid": "削除するページIDです。<var>$1title</var> とは同時に使用できません。",
+ "apihelp-delete-param-reason": "削除の理由です。入力しない場合、自動的に生成された理由が使用されます。",
+ "apihelp-delete-param-tags": "タグを変更し、削除記録の項目に適用します。",
+ "apihelp-delete-param-watch": "そのページを現在の利用者のウォッチリストに追加します。",
+ "apihelp-delete-param-unwatch": "そのページを現在の利用者のウォッチリストから除去します。",
+ "apihelp-delete-param-oldimage": "削除する古い画像の[[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] で取得できるような名前。",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd> を削除する",
+ "apihelp-delete-example-reason": "<kbd>Preparing for move</kbd> という理由で <kbd>Main Page</kbd> を削除する",
+ "apihelp-disabled-summary": "このモジュールは無効化されています。",
+ "apihelp-edit-summary": "ページを作成、編集します。",
+ "apihelp-edit-param-title": "編集するページ名です。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-edit-param-pageid": "編集するページIDです。<var>$1title</var> とは同時に使用できません。",
+ "apihelp-edit-param-section": "節番号です。先頭の節の場合は <kbd>0</kbd>、新しい節の場合は <kbd>new</kbd>を指定します。",
+ "apihelp-edit-param-sectiontitle": "新しい節の名前です。",
+ "apihelp-edit-param-text": "ページの本文。",
+ "apihelp-edit-param-summary": "編集の要約。$1section=new で $1sectiontitle が設定されていない場合は節名としても利用されます。",
+ "apihelp-edit-param-tags": "この版に適用する変更タグ。",
+ "apihelp-edit-param-minor": "細部の編集",
+ "apihelp-edit-param-notminor": "細部の編集ではない。",
+ "apihelp-edit-param-bot": "この編集をボットの編集としてマークする。",
+ "apihelp-edit-param-basetimestamp": "編集前の版のタイムスタンプ。編集競合を検出するために使用されます。\n[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]] で取得できます。",
+ "apihelp-edit-param-starttimestamp": "編集作業を開始したときのタイムスタンプ。編集競合を検出するために使用されます。適切な値は <var>[[Special:ApiHelp/main|curtimestamp]]</var> を使用して編集作業を開始するとき (たとえば、編集するページの本文を読み込んだとき) に取得できます。",
+ "apihelp-edit-param-createonly": "すでにそのページが存在する場合は編集を行いません。",
+ "apihelp-edit-param-nocreate": "そのページが存在しない場合にエラーを返します。",
+ "apihelp-edit-param-watch": "そのページを現在の利用者のウォッチリストに追加します。",
+ "apihelp-edit-param-unwatch": "そのページを現在の利用者のウォッチリストから除去します。",
+ "apihelp-edit-param-prependtext": "このテキストをページの先頭に追加します。$1text をオーバーライドします。",
+ "apihelp-edit-param-appendtext": "このテキストをページの末尾に追加する。$1textを上書きします。\n\n新しい節を追加するにはこのパラメータではなく $1section=newを使用してください。",
+ "apihelp-edit-param-undo": "この版を取り消します。$1text, $1prependtext および $1appendtext をオーバーライドします。",
+ "apihelp-edit-param-undoafter": "$1undo からこの版までのすべての版を取り消します。設定しない場合、ひとつの版のみ取り消されます。",
+ "apihelp-edit-param-redirect": "自動的に転送を解決します。",
+ "apihelp-edit-param-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
+ "apihelp-edit-example-edit": "ページを編集",
+ "apihelp-edit-example-prepend": "<kbd>_&#95;NOTOC_&#95;</kbd> をページの先頭に挿入する。",
+ "apihelp-edit-example-undo": "版 13579 から 13585 まで要約を自動入力して取り消す。",
+ "apihelp-emailuser-summary": "利用者に電子メールを送信します。",
+ "apihelp-emailuser-param-target": "送信先の利用者名。",
+ "apihelp-emailuser-param-subject": "題名。",
+ "apihelp-emailuser-param-text": "電子メールの本文。",
+ "apihelp-emailuser-param-ccme": "電子メールの複製を自分にも送信します。",
+ "apihelp-emailuser-example-email": "利用者 <kbd>WikiSysop</kbd> に <kbd>Content</kbd> という本文の電子メールを送信。",
+ "apihelp-expandtemplates-summary": "ウィキテキストに含まれるすべてのテンプレートを展開します。",
+ "apihelp-expandtemplates-param-title": "ページの名前です。",
+ "apihelp-expandtemplates-param-text": "変換するウィキテキストです。",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "展開されたウィキテキスト。",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "入力のXML構文解析ツリー。",
+ "apihelp-expandtemplates-param-includecomments": "HTMLコメントを出力に含めるかどうか。",
+ "apihelp-expandtemplates-param-generatexml": "XMLの構文解析ツリーを生成します (replaced by $1prop=parsetree)",
+ "apihelp-expandtemplates-example-simple": "ウィキテキスト <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd> を展開する。",
+ "apihelp-feedcontributions-summary": "利用者の投稿記録フィードを返します。",
+ "apihelp-feedcontributions-param-feedformat": "フィードの形式。",
+ "apihelp-feedcontributions-param-user": "投稿記録を取得する利用者。",
+ "apihelp-feedcontributions-param-namespace": "この名前空間への投稿記録に絞り込む。",
+ "apihelp-feedcontributions-param-year": "この年以前。",
+ "apihelp-feedcontributions-param-month": "この月以前。",
+ "apihelp-feedcontributions-param-tagfilter": "このタグが付与された投稿記録に絞り込む。",
+ "apihelp-feedcontributions-param-deletedonly": "削除された投稿記録のみ表示します。",
+ "apihelp-feedcontributions-param-toponly": "最新版の編集のみ表示します。",
+ "apihelp-feedcontributions-param-newonly": "ページ作成を伴う編集のみを表示します。",
+ "apihelp-feedcontributions-param-hideminor": "細部の編集を非表示",
+ "apihelp-feedcontributions-param-showsizediff": "版間のサイズの増減を表示する。",
+ "apihelp-feedcontributions-example-simple": "利用者 <kbd>Example</kbd> の投稿記録を取得する。",
+ "apihelp-feedrecentchanges-summary": "最近の更新フィードを返します。",
+ "apihelp-feedrecentchanges-param-feedformat": "フィードの形式。",
+ "apihelp-feedrecentchanges-param-namespace": "この名前空間の結果のみに絞り込む。",
+ "apihelp-feedrecentchanges-param-invert": "選択されたものを除く、すべての名前空間。",
+ "apihelp-feedrecentchanges-param-associated": "関連する(トークまたはメイン)名前空間を含めます。",
+ "apihelp-feedrecentchanges-param-limit": "返す結果の最大数。",
+ "apihelp-feedrecentchanges-param-from": "これ以降の編集を表示する。",
+ "apihelp-feedrecentchanges-param-hideminor": "細部の変更を隠す。",
+ "apihelp-feedrecentchanges-param-hidebots": "ボットによる変更を隠す。",
+ "apihelp-feedrecentchanges-param-hideanons": "未登録利用者による変更を隠す。",
+ "apihelp-feedrecentchanges-param-hideliu": "登録利用者による変更を隠す。",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "巡回済みの変更を隠す。",
+ "apihelp-feedrecentchanges-param-hidemyself": "現在の利用者による編集を非表示にする。",
+ "apihelp-feedrecentchanges-param-tagfilter": "タグにより絞り込む。",
+ "apihelp-feedrecentchanges-param-target": "このページからリンクされているページの変更のみを表示する。",
+ "apihelp-feedrecentchanges-example-simple": "最近の更新を表示する。",
+ "apihelp-feedrecentchanges-example-30days": "最近30日間の変更を表示する。",
+ "apihelp-feedwatchlist-summary": "ウォッチリストのフィードを返します。",
+ "apihelp-feedwatchlist-param-feedformat": "フィードの形式。",
+ "apihelp-feedwatchlist-param-linktosections": "可能であれば、変更された節に直接リンクする。",
+ "apihelp-feedwatchlist-example-default": "ウォッチリストのフィードを表示する。",
+ "apihelp-feedwatchlist-example-all6hrs": "ウォッチ中のページに対する過去6時間の更新をすべて表示する。",
+ "apihelp-filerevert-summary": "ファイルを古い版に差し戻します。",
+ "apihelp-filerevert-param-filename": "対象のファイル名 (File: 接頭辞を含めない)。",
+ "apihelp-filerevert-param-comment": "アップロードのコメント。",
+ "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd> を <kbd>2011-03-05T15:27:40Z</kbd> の版に差し戻す。",
+ "apihelp-help-summary": "指定したモジュールのヘルプを表示します。",
+ "apihelp-help-param-modules": "ヘルプを表示するモジュールです (<var>action</var> パラメーターおよび <var>format</var> パラメーターの値、または <kbd>main</kbd>)。<kbd>+</kbd> を使用して下位モジュールを指定できます。",
+ "apihelp-help-param-submodules": "指定したモジュールの下位モジュールのヘルプを含めます。",
+ "apihelp-help-param-recursivesubmodules": "下位モジュールのヘルプを再帰的に含めます。",
+ "apihelp-help-param-helpformat": "ヘルプの出力形式です。",
+ "apihelp-help-param-toc": "HTML 出力に目次を含めます。",
+ "apihelp-help-example-main": "メイン モジュールのヘルプ",
+ "apihelp-help-example-submodules": "<kbd>action=query</kbd> とそのすべての下位モジュールに関するヘルプ。",
+ "apihelp-help-example-recursive": "すべてのヘルプを1つのページに",
+ "apihelp-help-example-help": "ヘルプ モジュール自身のヘルプ",
+ "apihelp-help-example-query": "2つの下位モジュールのヘルプ",
+ "apihelp-imagerotate-summary": "1つ以上の画像を回転させます。",
+ "apihelp-imagerotate-param-rotation": "画像を回転させる時計回りの角度。",
+ "apihelp-imagerotate-example-simple": "<kbd>File:Example.png</kbd> を <kbd>90</kbd> 度回転させる。",
+ "apihelp-imagerotate-example-generator": "<kbd>Category:Flip</kbd> 内のすべての画像を <kbd>180</kbd> 度回転させる。",
+ "apihelp-import-summary": "他のWikiまたはXMLファイルからページを取り込む。",
+ "apihelp-import-extended-description": "<var>xml</var> パラメーターでファイルを送信する場合、ファイルのアップロードとしてHTTP POSTされなければならない (例えば、multipart/form-dataを使用する) 点に注意してください。",
+ "apihelp-import-param-summary": "記録されるページ取り込みの要約。",
+ "apihelp-import-param-xml": "XMLファイルをアップロード",
+ "apihelp-import-param-interwikisource": "ウィキ間の取り込みの場合: 取り込み元のウィキ。",
+ "apihelp-import-param-interwikipage": "ウィキ間の取り込みの場合: 取り込むページ。",
+ "apihelp-import-param-fullhistory": "ウィキ間の取り込みの場合: 現在の版のみではなく完全な履歴を取り込む。",
+ "apihelp-import-param-templates": "ウィキ間の取り込みの場合: 読み込まれているテンプレートも取り込む。",
+ "apihelp-import-param-namespace": "この名前空間に取り込む。<var>$1rootpage</var>パラメータとは同時に使用できません。",
+ "apihelp-import-param-rootpage": "このページの下位ページとして取り込む。<var>$1namespace</var> パラメータとは同時に使用できません。",
+ "apihelp-import-example-import": "[[meta:Help:ParserFunctions]] をすべての履歴とともに名前空間100に取り込む。",
+ "apihelp-login-summary": "ログインして認証クッキーを取得します。",
+ "apihelp-login-extended-description": "ログインが成功した場合、必要なクッキーは HTTP 応答ヘッダに含まれます。ログインに失敗した場合、自動化のパスワード推定攻撃を制限するために、追加の試行は速度制限されることがあります。",
+ "apihelp-login-param-name": "利用者名。",
+ "apihelp-login-param-password": "パスワード。",
+ "apihelp-login-param-domain": "ドメイン (省略可能)",
+ "apihelp-login-param-token": "最初のリクエストで取得したログイントークンです。",
+ "apihelp-login-example-gettoken": "ログイントークンを取得する。",
+ "apihelp-login-example-login": "ログイン",
+ "apihelp-logout-summary": "ログアウトしてセッションデータを消去します。",
+ "apihelp-logout-example-logout": "現在の利用者をログアウトする。",
+ "apihelp-managetags-param-operation": "実行する操作:\n;create: 手動適用のための新たな変更タグを作成します。\n;delete: 変更タグをデータベースから削除し、そのタグが使用されているすべての版、最近の更新項目、記録項目からそれを除去します。\n;activate: 変更タグを有効化し、利用者がそのタグを手動で適用できるようにします。\n;deactivate: 変更タグを無効化し、利用者がそのタグを手動で適用することができないようにします。",
+ "apihelp-managetags-param-tag": "作成、削除、有効化、または無効化するタグ。タグの作成の場合、そのタグは存在しないものでなければなりません。タグの削除の場合、そのタグが存在しなければなりません。タグの有効化の場合、そのタグが存在し、かつ拡張機能によって使用されていないものでなければなりません。タグの無効化の場合、そのタグが現在有効であって手動で定義されたものでなければなりません。",
+ "apihelp-managetags-param-reason": "タグを作成、削除、有効化、または無効化する追加の理由。",
+ "apihelp-managetags-param-ignorewarnings": "操作中に発生したすべての警告を無視するかどうか。",
+ "apihelp-managetags-example-create": "<kbd>spam</kbd> という名前のタグを <kbd>For use in edit patrolling</kbd> という理由で作成する",
+ "apihelp-managetags-example-delete": "<kbd>vandlaism</kbd> タグを <kbd>Misspelt</kbd> という理由で削除する",
+ "apihelp-managetags-example-activate": "<kbd>spam</kbd> という名前のタグを <kbd>For use in edit patrolling</kbd> という理由で有効化する",
+ "apihelp-managetags-example-deactivate": "<kbd>No longer required</kbd> という理由でタグ <kbd>spam</kbd> を無効化する",
+ "apihelp-mergehistory-summary": "ページの履歴を統合する。",
+ "apihelp-mergehistory-param-from": "履歴統合元のページ名。<var>$1fromid</var> とは同時に使用できません。",
+ "apihelp-mergehistory-param-fromid": "履歴統合元のページ。<var>$1from</var> とは同時に使用できません。",
+ "apihelp-mergehistory-param-to": "履歴統合先のページ名。<var>$1toid</var> とは同時に使用できません。",
+ "apihelp-mergehistory-param-toid": "履歴統合先のページID。<var>$1to</var> とは同時に使用できません。",
+ "apihelp-mergehistory-param-reason": "履歴の統合の理由。",
+ "apihelp-mergehistory-example-merge": "<kbd>Oldpage</kbd> のすべての履歴を <kbd>Newpage</kbd> に統合する。",
+ "apihelp-move-summary": "ページを移動します。",
+ "apihelp-move-param-from": "移動するページのページ名です。<var>$1fromid</var> とは同時に使用できません。",
+ "apihelp-move-param-fromid": "移動するページのページIDです。<var>$1from</var> とは同時に使用できません。",
+ "apihelp-move-param-to": "移動後のページ名。",
+ "apihelp-move-param-reason": "改名の理由。",
+ "apihelp-move-param-movetalk": "存在する場合、トークページも名前を変更します。",
+ "apihelp-move-param-movesubpages": "可能であれば、下位ページも名前を変更します。",
+ "apihelp-move-param-noredirect": "転送ページを作成しません。",
+ "apihelp-move-param-watch": "そのページと転送ページを現在の利用者のウォッチリストに追加します。",
+ "apihelp-move-param-unwatch": "そのページと転送ページを現在の利用者のウォッチリストから除去します。",
+ "apihelp-move-param-ignorewarnings": "あらゆる警告を無視",
+ "apihelp-move-example-move": "<kbd>Badtitle</kbd> を <kbd>Goodtitle</kbd> に転送ページを残さず移動",
+ "apihelp-opensearch-summary": "OpenSearch プロトコルを使用してWiki内を検索します。",
+ "apihelp-opensearch-param-search": "検索文字列。",
+ "apihelp-opensearch-param-limit": "返す結果の最大数。",
+ "apihelp-opensearch-param-namespace": "検索する名前空間。<var>$1search</var>が有効な名前空間接頭辞で始まる場合は無視されます。",
+ "apihelp-opensearch-param-suggest": "<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> が false の場合、何もしません。",
+ "apihelp-opensearch-param-redirects": "転送を処理する方法:\n;return: 転送ページそのものを返します。\n;resolve: 転送先のページを返します。$1limit より返される結果が少なくなるかもしれません。\n歴史的な理由により、$1format=json では \"return\" が、他の形式では \"resolve\" が既定です。",
+ "apihelp-opensearch-param-format": "出力する形式。",
+ "apihelp-opensearch-example-te": "<kbd>Te</kbd> から始まるページを検索する。",
+ "apihelp-options-param-reset": "個人設定をサイトの既定値にリセットする。",
+ "apihelp-options-param-resetkinds": "<var>$1reset</var> が設定されている場合、リセットする設定項目の種類のリスト。",
+ "apihelp-options-param-change": "名前=値 の形式 (例えば skin=vector) で整形された変更のリスト。optionname|otheroption|... のように値が与えられなかった (イコール記号すら無い) 場合、設定は既定値にリセットされます。与えられた値がパイプ(<kbd>|</kbd>)を含む場合、[[Special:ApiHelp/main#main/datatypes|ほかのセパレーター]]をお使いください。",
+ "apihelp-options-example-reset": "すべて初期設定に戻す。",
+ "apihelp-options-example-change": "<kbd>skin</kbd> および <kbd>hideminor</kbd> の個人設定を変更する。",
+ "apihelp-options-example-complex": "すべての個人設定を初期化し、<kbd>skin</kbd> および <kbd> nickname </kbd> を設定する。",
+ "apihelp-paraminfo-summary": "API モジュールに関する情報を取得します。",
+ "apihelp-paraminfo-param-modules": "モジュールの名前のリスト (<var>action</var> および <var>format</var> パラメーターの値, または <kbd>main</kbd>). <kbd>+</kbd> を使用して下位モジュールを指定できます。",
+ "apihelp-paraminfo-param-helpformat": "ヘルプ文字列の形式。",
+ "apihelp-paraminfo-param-querymodules": "クエリモジュール名のリスト (<var>prop</var>, <var>meta</var> or <var>list</var> パラメータの値)。<kbd>$1querymodules=foo</kbd> の代わりに <kbd>$1modules=query+foo</kbd> を使用してください。",
+ "apihelp-paraminfo-example-1": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> に関する情報を表示する。",
+ "apihelp-parse-param-title": "文字列が属するページのページ名。これを省略する場合、必ず <var>$1contentmodel</var> を指定しなければなりません。また、その場合 [[API]] がページ名として使用されます。",
+ "apihelp-parse-param-text": "構文解析する文字列。コンテンツ・モデルを制御するためには<var>$1title</var> または <var>$1contentmodel</var> を使用してください。",
+ "apihelp-parse-param-summary": "構文解析する要約",
+ "apihelp-parse-param-page": "このページの内容を構文解析します。<var>$1text</var> および <var>$1title</var> とは同時に使用できません。",
+ "apihelp-parse-param-pageid": "このページの内容を構文解析する。<var>$1page</var> をオーバーライドします。",
+ "apihelp-parse-param-redirects": "もし <var>$1page</var> や <var>$1pageid</var> に転送ページが指定された場合、それを解決する。",
+ "apihelp-parse-param-oldid": "この版の内容を構文解析する。<var>$1page</var> および <var>$1pageid</var> をオーバーライドします。",
+ "apihelp-parse-param-prop": "どの情報を取得するか:",
+ "apihelp-parse-paramvalue-prop-text": "ウィキテキストの解析されたテキストを提供します。",
+ "apihelp-parse-paramvalue-prop-langlinks": "解析されたウィキテキストにおける言語リンクを提供します。",
+ "apihelp-parse-paramvalue-prop-categories": "構文解析されたウィキテキストのカテゴリを提供します。",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "カテゴリのHTMLバージョンを提供します。",
+ "apihelp-parse-paramvalue-prop-links": "構文解析されたウィキテキスト内で内部リンクを提供します。",
+ "apihelp-parse-paramvalue-prop-templates": "構文解析されたウィキテキストでテンプレートを提供します。",
+ "apihelp-parse-paramvalue-prop-images": "構文解析されたウィキテキストの画像を提供します。",
+ "apihelp-parse-paramvalue-prop-externallinks": "構文解析されたウィキテキスト内で外部リンクを提供します。",
+ "apihelp-parse-paramvalue-prop-sections": "構文解析されたウィキテキスト内のセクションを提供します。",
+ "apihelp-parse-paramvalue-prop-revid": "構文解析されたページの版IDを追加します。",
+ "apihelp-parse-paramvalue-prop-displaytitle": "構文解析されたウィキテキストのタイトルを追加します。",
+ "apihelp-parse-paramvalue-prop-headitems": "ページの <code>&lt;head&gt;</code> の中に入れてアイテムを提供します。",
+ "apihelp-parse-paramvalue-prop-headhtml": "ページの解析された <code>&lt;head&gt;</code> を与える。",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "ページに固有のJavaScriptの設定変数を提供します。適用するには、<code>mw.config.set()</code>を使用します。",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "JSON文字列としてページに固有のJavaScriptの設定変数を提供します。",
+ "apihelp-parse-paramvalue-prop-indicators": "ページ上で使用されるページのステータスインジケータのHTMLを提供します。",
+ "apihelp-parse-paramvalue-prop-iwlinks": "構文解析されたウィキテキスト内でウィキ間リンクを提供します。",
+ "apihelp-parse-paramvalue-prop-wikitext": "構文解析されたオリジナルのwikiテキストを提供します。",
+ "apihelp-parse-paramvalue-prop-properties": "構文解析されたウィキテキスト内で定義されたさまざまなプロパティを提供します。",
+ "apihelp-parse-paramvalue-prop-parsetree": "版内容のXML構文解析ツリー (requires content model <code>$1</code>)",
+ "apihelp-parse-param-pst": "それを構文解析する前に、入力の上で事前保存の変換を実行してください。テキストで使用した場合のみ有効です。",
+ "apihelp-parse-param-effectivelanglinks": "エクステンションによって供給された言語リンクが含まれています (for use with <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "この節番号の内容のみを構文解析します。\n\n<kbd>new</kbd> のとき、ページに新しい節を追加するかのように <var>$1text</var> と<var>$1sectiontitle</var> を解析します。\n\n<kbd>new</kbd> は <var>text</var> を指定したときのみ許可されます。",
+ "apihelp-parse-param-sectiontitle": "<var>section</var> が <kbd>new</kbd> のときの、新しい節の節名。\n\nページ編集とは異なり、これは <var>summary</var> が省略または空のときにはフォールバックしません。",
+ "apihelp-parse-param-disablelimitreport": "構文解析の出力で制限レポート (New PP limit report) を省略する。",
+ "apihelp-parse-param-disablepp": "<var>$1disablelimitreport</var> を代わりに使用してください。",
+ "apihelp-parse-param-disableeditsection": "構文解析の出力で節リンクを省略する。",
+ "apihelp-parse-param-disabletidy": "構文解析の出力にHTMLのクリーンアップ (例えば整頓) を適用しない。",
+ "apihelp-parse-param-preview": "プレビューモードでのパース",
+ "apihelp-parse-example-page": "ページをパース",
+ "apihelp-parse-example-text": "ウィキテキストをパース",
+ "apihelp-parse-example-summary": "要約を構文解析します。",
+ "apihelp-patrol-summary": "ページまたは版を巡回済みにする。",
+ "apihelp-patrol-param-rcid": "巡回済みにする最近の更新ID。",
+ "apihelp-patrol-param-revid": "巡回済みにする版ID。",
+ "apihelp-patrol-param-tags": "巡回記録の項目に適用する変更タグ。",
+ "apihelp-patrol-example-rcid": "最近の更新を巡回",
+ "apihelp-patrol-example-revid": "版を巡回済みにする。",
+ "apihelp-protect-summary": "ページの保護レベルを変更します。",
+ "apihelp-protect-param-title": "保護(解除)するページ名です。$1pageid とは同時に使用できません。",
+ "apihelp-protect-param-pageid": "保護(解除)するページIDです。$1title とは同時に使用できません。",
+ "apihelp-protect-param-protections": "<kbd>action=level</kbd> の形式 (例えば、<kbd>edit=sysop</kbd>) で整形された、保護レベルの一覧。レベル <kbd>all</kbd> は誰もが操作できる、言い換えると制限が掛かっていないことを意味します。\n\n<strong>注意: </strong> ここに列挙されなかった操作の制限は解除されます。",
+ "apihelp-protect-param-expiry": "有効期限です。タイムスタンプがひとつだけ指定された場合は、それがすべての保護に適用されます。無期限の保護を行う場合は<kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, または <kbd>never</kbd> を指定します。",
+ "apihelp-protect-param-reason": "保護(解除)の理由。",
+ "apihelp-protect-param-tags": "保護記録の項目に適用する変更タグ。",
+ "apihelp-protect-param-watch": "指定されると、保護(解除)するページが現在の利用者のウォッチリストに追加されます。",
+ "apihelp-protect-example-protect": "ページを保護する。",
+ "apihelp-protect-example-unprotect": "制限値を <kbd>all</kbd> にしてページの保護を解除する(つまり、誰もが操作できるようになる)\n。",
+ "apihelp-protect-example-unprotect2": "制限を設定されたページ保護を解除します。",
+ "apihelp-purge-summary": "指定されたページのキャッシュを破棄します。",
+ "apihelp-purge-param-forcelinkupdate": "リンクテーブルを更新します。",
+ "apihelp-purge-example-simple": "ページ <kbd>Main Page</kbd> および <kbd>API</kbd> をパージする。",
+ "apihelp-purge-example-generator": "標準名前空間にある最初の10ページをパージする。",
+ "apihelp-query-param-prop": "照会ページ用に、どのプロパティを取得するか。",
+ "apihelp-query-param-list": "どの一覧を取得するか。",
+ "apihelp-query-param-meta": "どのメタデータを取得するか。",
+ "apihelp-query-param-export": "指定されたまたは生成されたすべてのページの、現在の版を書き出します。",
+ "apihelp-query-param-iwurl": "タイトルがウィキ間リンクである場合に、完全なURLを取得するかどうか。",
+ "apihelp-query-example-revisions": "[[Special:ApiHelp/query+siteinfo|サイト情報]]と<kbd>Main Page</kbd>の[[Special:ApiHelp/query+revisions|版]]を取得する。",
+ "apihelp-query-example-allpages": "<kbd>API/</kbd> で始まるページの版を取得する。",
+ "apihelp-query+allcategories-summary": "すべてのカテゴリを一覧表示します。",
+ "apihelp-query+allcategories-param-from": "列挙を開始するカテゴリ。",
+ "apihelp-query+allcategories-param-to": "列挙を終了するカテゴリ。",
+ "apihelp-query+allcategories-param-prefix": "この値で始まるページ名のカテゴリを検索します。",
+ "apihelp-query+allcategories-param-dir": "並べ替えの方向。",
+ "apihelp-query+allcategories-param-limit": "返すカテゴリの数。",
+ "apihelp-query+allcategories-param-prop": "取得するプロパティ:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "カテゴリ内のページ数を追加します。",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "<code>_&#95;HIDDENCAT_&#95;</code>に隠されているタグカテゴリ。",
+ "apihelp-query+allcategories-example-size": "カテゴリを、内包するページ数の情報と共に、一覧表示する。",
+ "apihelp-query+allcategories-example-generator": "<kbd>List</kbd> で始まるカテゴリページに関する情報を取得する。",
+ "apihelp-query+alldeletedrevisions-summary": "利用者によって削除された、または名前空間内の削除されたすべての版を一覧表示する。",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "<var>$3user</var> と同時に使用します。",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var> と同時に使用できません。",
+ "apihelp-query+alldeletedrevisions-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+alldeletedrevisions-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+alldeletedrevisions-param-from": "列挙の始点となるページ名。",
+ "apihelp-query+alldeletedrevisions-param-to": "列挙の終点となるページ名。",
+ "apihelp-query+alldeletedrevisions-param-prefix": "この値で始まるすべてのページ名を検索する。",
+ "apihelp-query+alldeletedrevisions-param-tag": "このタグが付与された版のみを一覧表示する。",
+ "apihelp-query+alldeletedrevisions-param-user": "この利用者による版のみを一覧表示する。",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
+ "apihelp-query+alldeletedrevisions-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>注意:</strong> [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]] により、<var>$1user</var> と <var>$1namespace</var> を同時に使用すると継続する前に <var>$1limit</var> より返される結果が少なくなることがあります; 極端な場合では、ゼロ件の結果が返ることもあります。",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "ジェネレーターとして使用する場合、版IDではなくページ名を生成します。",
+ "apihelp-query+alldeletedrevisions-example-user": "利用者 <kbd>Example</kbd> による削除された直近の50版を一覧表示する。",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "標準名前空間にある削除された最初の50版を一覧表示する。",
+ "apihelp-query+allfileusages-summary": "存在しないものを含め、すべてのファイルの使用状況を一覧表示する。",
+ "apihelp-query+allfileusages-param-from": "列挙を開始するファイルのページ名。",
+ "apihelp-query+allfileusages-param-to": "列挙を終了するファイルのページ名。",
+ "apihelp-query+allfileusages-param-prefix": "この値で始まるページ名のすべてのファイルを検索する。",
+ "apihelp-query+allfileusages-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "使用しているページのページIDを追加します ($1unique とは同時に使用できません)。",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "ファイルのページ名を追加します。",
+ "apihelp-query+allfileusages-param-limit": "返す項目の総数。",
+ "apihelp-query+allfileusages-param-dir": "一覧表示する方向。",
+ "apihelp-query+allfileusages-example-unique": "ユニークなファイルを一覧表示する。",
+ "apihelp-query+allfileusages-example-unique-generator": "ファイル名を、存在しないものに印をつけて、すべて取得する。",
+ "apihelp-query+allfileusages-example-generator": "ファイルを含むページを取得します。",
+ "apihelp-query+allimages-summary": "順次すべての画像を列挙します。",
+ "apihelp-query+allimages-param-sort": "並べ替えに使用するプロパティ。",
+ "apihelp-query+allimages-param-dir": "一覧表示する方向。",
+ "apihelp-query+allimages-param-from": "列挙の始点となる画像タイトル。$1sort=name を指定した場合のみ使用できます。",
+ "apihelp-query+allimages-param-to": "列挙の終点となる画像のページ名。$1sort=name を指定した場合のみ使用できます。",
+ "apihelp-query+allimages-param-start": "列挙の始点となるタイムスタンプ。$1sort=timestamp を指定した場合のみ使用できます。",
+ "apihelp-query+allimages-param-end": "列挙の終点となるタイムスタンプ。$1sort=timestamp を指定した場合のみ使用できます。",
+ "apihelp-query+allimages-param-prefix": "この値で始まるすべての画像タイトルを検索する。$1sort=name を指定した場合のみ使用できます。",
+ "apihelp-query+allimages-param-minsize": "画像の最小バイト数を制限する。",
+ "apihelp-query+allimages-param-maxsize": "画像の最大バイト数を制限する。",
+ "apihelp-query+allimages-param-sha1": "画像の SHA1 ハッシュ値。$1sha1base36 をオーバーライドします。",
+ "apihelp-query+allimages-param-user": "この利用者によりアップロードされたファイルのみを返す。$1sort=timestamp を指定した場合のみ使用できます。 $1filterbots とは同時に使用できません。",
+ "apihelp-query+allimages-param-filterbots": "ボットによりアップロードされたファイルを絞り込む方法。$1sort=timestamp を指定した場合のみ使用できます。$1user とは同時に使用できません。",
+ "apihelp-query+allimages-param-mime": "検索対象のMIMEタイプ、たとえば <kbd>image/jpeg</kbd>。",
+ "apihelp-query+allimages-param-limit": "返す画像の総数。",
+ "apihelp-query+allimages-example-B": "<kbd>B</kbd> で始まるファイルの一覧を表示する。",
+ "apihelp-query+allimages-example-recent": "[[Special:NewFiles]] のように、最近アップロードされたファイルの一覧を表示する。",
+ "apihelp-query+allimages-example-mimetypes": "MIMEタイプが <kbd>image/png</kbd> または <kbd>image/gif</kbd> であるファイルの一覧を表示する",
+ "apihelp-query+allimages-example-generator": "<kbd>T</kbd> で始まる4つのファイルに関する情報を表示する。",
+ "apihelp-query+alllinks-summary": "与えられた名前空間へのすべてのリンクを一覧表示します。",
+ "apihelp-query+alllinks-param-from": "列挙を開始するリンクのページ名。",
+ "apihelp-query+alllinks-param-to": "列挙を終了するリンクのページ名。",
+ "apihelp-query+alllinks-param-prefix": "この値で始まるすべてのリンクされたページを検索する。",
+ "apihelp-query+alllinks-param-unique": "リンクされたページ名を一度だけ表示します。<kbd>$1prop=ids</kbd> とは同時に使用できません。ジェネレーターとして使用される場合、リンク元ではなくリンク先のページを生成します。",
+ "apihelp-query+alllinks-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "リンクしているページのページIDを追加します ($1unique とは同時に使用できません)。",
+ "apihelp-query+alllinks-paramvalue-prop-title": "リンクのページ名を追加します。",
+ "apihelp-query+alllinks-param-namespace": "列挙する名前空間。",
+ "apihelp-query+alllinks-param-limit": "返す項目の総数。",
+ "apihelp-query+alllinks-param-dir": "一覧表示する方向。",
+ "apihelp-query+alllinks-example-B": "<kbd>B</kbd> で始まるリンクされたページ (存在しないページも含む)を、リンク元のページIDとともに表示する。",
+ "apihelp-query+alllinks-example-unique": "ユニークなリンクのタイトルを一覧。",
+ "apihelp-query+alllinks-example-unique-generator": "リンクされているページを、存在しないものに印をつけて、すべて取得する。",
+ "apihelp-query+alllinks-example-generator": "リンクを含むページを取得します。",
+ "apihelp-query+allmessages-param-messages": "出力のためのメッセージ。 <kbd>*</kbd>(デフォルト)は、すべてのメッセージを意味します。",
+ "apihelp-query+allmessages-param-prop": "取得するプロパティ:",
+ "apihelp-query+allmessages-param-nocontent": "設定した場合、出力内のメッセージの内容が含まれていません。",
+ "apihelp-query+allmessages-param-args": "メッセージ中に展開される引数。",
+ "apihelp-query+allmessages-param-filter": "この文字列を含んだ名前のメッセージのみを返す。",
+ "apihelp-query+allmessages-param-customised": "変更された状態のメッセージのみを返す。",
+ "apihelp-query+allmessages-param-lang": "返すメッセージの言語。",
+ "apihelp-query+allmessages-param-prefix": "この接頭辞を持つメッセージを返す。",
+ "apihelp-query+allmessages-example-ipb": "<kbd>ipb-</kbd> で始まるメッセージを表示する。",
+ "apihelp-query+allmessages-example-de": "ドイツ語のメッセージ <kbd>august</kbd> および <kbd>mainpage</kbd> を表示する。",
+ "apihelp-query+allpages-param-from": "列挙を開始するページ名。",
+ "apihelp-query+allpages-param-to": "列挙を終了するページ名。",
+ "apihelp-query+allpages-param-prefix": "この値で始まるすべてのページ名を検索します。",
+ "apihelp-query+allpages-param-namespace": "列挙する名前空間。",
+ "apihelp-query+allpages-param-minsize": "ページの最低バイト数を制限する。",
+ "apihelp-query+allpages-param-maxsize": "ページの最大バイト数を制限する。",
+ "apihelp-query+allpages-param-prtype": "保護されているページに絞り込む。",
+ "apihelp-query+allpages-param-prlevel": "保護レベルで絞り込む ($1type= パラメーターと同時に使用しなければなりません)。",
+ "apihelp-query+allpages-param-limit": "返すページの総数。",
+ "apihelp-query+allpages-param-dir": "一覧表示する方向。",
+ "apihelp-query+allpages-example-B": "<kbd>B</kbd> で始まるページの一覧を表示する。",
+ "apihelp-query+allpages-example-generator": "<kbd>T</kbd> で始まる4つのページに関する情報を表示する。",
+ "apihelp-query+allpages-example-generator-revisions": "<kbd>Re</kbd> で始まる最初の非リダイレクトの2ページの内容を表示する。",
+ "apihelp-query+allredirects-summary": "ある名前空間へのすべての転送を一覧表示する。",
+ "apihelp-query+allredirects-param-from": "列挙を開始するリダイレクトのページ名。",
+ "apihelp-query+allredirects-param-to": "列挙を終了するリダイレクトのページ名。",
+ "apihelp-query+allredirects-param-prefix": "この値で始まるすべてのページを検索する。",
+ "apihelp-query+allredirects-param-unique": "転送先ページ名を一度だけ表示します。<kbd>$1prop=ids|fragment|interwiki</kbd> とは同時に使用できません。ジェネレーターとして使用される場合、転送元ではなく転送先のページを生成します。",
+ "apihelp-query+allredirects-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+allredirects-paramvalue-prop-title": "転送ページのページ名を追加します。",
+ "apihelp-query+allredirects-param-namespace": "列挙する名前空間。",
+ "apihelp-query+allredirects-param-limit": "返す項目の総数。",
+ "apihelp-query+allredirects-param-dir": "一覧表示する方向。",
+ "apihelp-query+allredirects-example-B": "<kbd>B</kbd> で始まる転送先ページ (存在しないページも含む)を、転送元のページIDとともに表示する。",
+ "apihelp-query+allrevisions-summary": "すべての版を一覧表示する。",
+ "apihelp-query+allrevisions-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+allrevisions-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+allrevisions-param-user": "この利用者による版のみを一覧表示する。",
+ "apihelp-query+allrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
+ "apihelp-query+allrevisions-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+ "apihelp-query+allrevisions-param-generatetitles": "ジェネレーターとして使用する場合、版IDではなくページ名を生成します。",
+ "apihelp-query+allrevisions-example-user": "利用者 <kbd>Example</kbd> による直近の50版を一覧表示する。",
+ "apihelp-query+allrevisions-example-ns-main": "標準名前空間にある最初の50版を一覧表示する。",
+ "apihelp-query+mystashedfiles-param-prop": "ファイルのどのプロパティを取得するか。",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "ファイルサイズと画像の大きさを取得します。",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "ファイルの MIME タイプとメディアタイプを取得します。",
+ "apihelp-query+mystashedfiles-param-limit": "取得するファイルの数。",
+ "apihelp-query+alltransclusions-summary": "存在しないものも含めて、すべての参照読み込み (&#123;&#123;x&#125;&#125; で埋め込まれたページ) を一覧表示します。",
+ "apihelp-query+alltransclusions-param-from": "列挙を開始する参照読み込みのページ名。",
+ "apihelp-query+alltransclusions-param-to": "列挙を終了する参照読み込みのページ名。",
+ "apihelp-query+alltransclusions-param-prefix": "この値で始まるすべての参照読み込みされているページを検索する。",
+ "apihelp-query+alltransclusions-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "参照元のページIDを追加します ($1unique とは同時に使用できません)。",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "参照読み込みのページ名を追加します。",
+ "apihelp-query+alltransclusions-param-namespace": "列挙する名前空間。",
+ "apihelp-query+alltransclusions-param-limit": "返す項目の総数。",
+ "apihelp-query+alltransclusions-param-dir": "一覧表示する方向。",
+ "apihelp-query+alltransclusions-example-B": "参照読み込みされているページ (存在しないページも含む) を、参照元のページIDとともに、<kbd>B</kbd> で始まるものから一覧表示する。",
+ "apihelp-query+alltransclusions-example-unique-generator": "参照読み込みされたページを、存在しないものに印をつけて、すべて取得する。",
+ "apihelp-query+alltransclusions-example-generator": "参照読み込みを含んでいるページを取得する。",
+ "apihelp-query+allusers-summary": "すべての登録利用者を一覧表示します。",
+ "apihelp-query+allusers-param-from": "列挙を開始する利用者名。",
+ "apihelp-query+allusers-param-to": "列挙を終了する利用者名。",
+ "apihelp-query+allusers-param-prefix": "この値で始まるすべての利用者を検索する。",
+ "apihelp-query+allusers-param-dir": "並べ替えの方向。",
+ "apihelp-query+allusers-param-group": "このグループに所属する利用者のみを結果に含める。",
+ "apihelp-query+allusers-param-excludegroup": "このグループに所属する利用者を結果から除外する。",
+ "apihelp-query+allusers-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "利用者に対する現在のブロックに関する情報を追加します。",
+ "apihelp-query+allusers-paramvalue-prop-groups": "利用者が所属する利用者グループを一覧表示します。これはサーバー資源を多めに使用するので、返る結果が制限値より少なくなります。",
+ "apihelp-query+allusers-paramvalue-prop-rights": "利用者が持っている権限を一覧表示します。",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "利用者の編集回数を追加します。",
+ "apihelp-query+allusers-paramvalue-prop-registration": "可能な場合、利用者の登録日時のタイムスタンプを追加します (空白になるかもしれません)。",
+ "apihelp-query+allusers-param-limit": "返す利用者名の総数。",
+ "apihelp-query+allusers-param-witheditsonly": "編集履歴のある利用者のみ一覧表示する。",
+ "apihelp-query+allusers-param-activeusers": "最近 $1 {{PLURAL:$1|日間}}のアクティブな利用者のみを一覧表示する。",
+ "apihelp-query+allusers-example-Y": "<kbd>Y</kbd> で始まる利用者を一覧表示する。",
+ "apihelp-query+backlinks-summary": "与えられたページにリンクしているすべてのページを検索します。",
+ "apihelp-query+backlinks-param-title": "検索するページ名。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-query+backlinks-param-pageid": "検索するページID。<var>$1title</var>とは同時に使用できません。",
+ "apihelp-query+backlinks-param-namespace": "列挙する名前空間。",
+ "apihelp-query+backlinks-param-dir": "一覧表示する方向。",
+ "apihelp-query+backlinks-param-limit": "返すページの総数。<var>$1redirect</var> を有効化した場合は、各レベルに対し個別にlimitが適用されます (つまり、最大で 2 * <var>$1limit</var> 件の結果が返されます)。",
+ "apihelp-query+backlinks-example-simple": "<kbd>Main page</kbd> へのリンクを表示する。",
+ "apihelp-query+backlinks-example-generator": "<kbd>Main page</kbd> にリンクしているページの情報を取得する。",
+ "apihelp-query+blocks-summary": "ブロックされた利用者とIPアドレスを一覧表示します。",
+ "apihelp-query+blocks-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+blocks-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+blocks-param-ids": "一覧表示するブロックIDのリスト (任意)。",
+ "apihelp-query+blocks-param-users": "検索対象の利用者のリスト (任意)。",
+ "apihelp-query+blocks-param-limit": "一覧表示するブロックの最大数。",
+ "apihelp-query+blocks-param-prop": "取得するプロパティ:",
+ "apihelp-query+blocks-paramvalue-prop-id": "ブロックのIDを追加します。",
+ "apihelp-query+blocks-paramvalue-prop-user": "ブロックされた利用者の利用者名を追加します。",
+ "apihelp-query+blocks-paramvalue-prop-userid": "ブロックされた利用者の利用者IDを追加します。",
+ "apihelp-query+blocks-paramvalue-prop-by": "ブロック実行者の利用者名を追加します。",
+ "apihelp-query+blocks-paramvalue-prop-byid": "ブロック実行者の利用者IDを追加します。",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "ブロックが与えられたときのタイムスタンプを追加します。",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "ブロックの有効期限が切れたときのタイムスタンプを追加します。",
+ "apihelp-query+blocks-paramvalue-prop-reason": "ブロックに指定された理由を追加します。",
+ "apihelp-query+blocks-paramvalue-prop-range": "ブロックの影響を受けたIPアドレスの範囲を追加します。",
+ "apihelp-query+blocks-paramvalue-prop-flags": "(autoblock, anononly, などとの) ban をタグ付けします。",
+ "apihelp-query+blocks-param-show": "これらの基準を満たす項目のみを表示します。\nたとえば、IPアドレスの無期限ブロックのみを表示するには、<kbd>$1show=ip|!temp</kbd> を設定します。",
+ "apihelp-query+blocks-example-simple": "ブロックを一覧表示する。",
+ "apihelp-query+blocks-example-users": "利用者<kbd>Alice</kbd> および <kbd>Bob</kbd> のブロックを一覧表示する。",
+ "apihelp-query+categories-summary": "ページが属するすべてのカテゴリを一覧表示します。",
+ "apihelp-query+categories-param-prop": "各カテゴリについて取得する追加のプロパティ:",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "カテゴリが追加されたときのタイムスタンプを追加します。",
+ "apihelp-query+categories-paramvalue-prop-hidden": "<code>_&#95;HIDDENCAT_&#95;</code>で隠されているカテゴリに印を付ける。",
+ "apihelp-query+categories-param-show": "どの種類のカテゴリを表示するか。",
+ "apihelp-query+categories-param-limit": "返すカテゴリの数。",
+ "apihelp-query+categories-example-simple": "ページ <kbd>Albert Einstein</kbd> が属しているカテゴリの一覧を取得する。",
+ "apihelp-query+categories-example-generator": "ページ <kbd>Albert Einstein</kbd> で使われているすべてのカテゴリに関する情報を取得する。",
+ "apihelp-query+categoryinfo-summary": "与えられたカテゴリに関する情報を返します。",
+ "apihelp-query+categoryinfo-example-simple": "<kbd>Category:Foo</kbd> および <kbd>Category:Bar</kbd> に関する情報を取得する。",
+ "apihelp-query+categorymembers-summary": "与えられたカテゴリ内のすべてのページを一覧表示します。",
+ "apihelp-query+categorymembers-param-title": "一覧表示するカテゴリ (必須)。<kbd>{{ns:category}}:</kbd> 接頭辞を含まなければなりません。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-query+categorymembers-param-pageid": "一覧表示するカテゴリのページID. <var>$1title</var> とは同時に使用できません。",
+ "apihelp-query+categorymembers-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "ページIDを追加します。",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "ページ名と名前空間IDを追加します。",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "カテゴリでのソートに使用するソートキーを追加します(16進数文字列)。",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "ページが含まれていたときのタイムスタンプを追加します。",
+ "apihelp-query+categorymembers-param-limit": "返すページの最大数。",
+ "apihelp-query+categorymembers-param-sort": "並べ替えに使用するプロパティ。",
+ "apihelp-query+categorymembers-param-start": "列挙の始点となるタイムスタンプ。<kbd>$1sort=timestamp</kbd>を指定した場合のみ使用できます。",
+ "apihelp-query+categorymembers-param-end": "列挙の終点となるタイムスタンプ。<kbd>$1sort=timestamp</kbd>を指定した場合のみ使用できます。",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "列挙の始点となるソートキーの接頭辞。<kbd>$1sort=sortkey</kbd>を指定した場合のみ使用できます。<var>$1starthexsortkey</var>をオーバーライドします。",
+ "apihelp-query+categorymembers-param-startsortkey": "代わりに $1starthexsortkey を使用してください。",
+ "apihelp-query+categorymembers-param-endsortkey": "代わりに $1endhexsortkey を使用してください。",
+ "apihelp-query+categorymembers-example-simple": "<kbd>Category:Physics</kbd> に含まれる最初の10ページを取得する。",
+ "apihelp-query+categorymembers-example-generator": "<kbd>Category:Physics</kbd> に含まれる最初の10ページのページ情報を取得する。",
+ "apihelp-query+contributors-summary": "ページへのログインした投稿者の一覧と匿名投稿者の数を取得します。",
+ "apihelp-query+contributors-param-limit": "返す投稿者の数。",
+ "apihelp-query+contributors-example-simple": "<kbd>Main Page</kbd> への投稿者を表示する。",
+ "apihelp-query+deletedrevisions-param-start": "列挙の始点となるタイムスタンプ。版IDの一覧を処理するときには無視されます。",
+ "apihelp-query+deletedrevisions-param-end": "列挙の終点となるタイムスタンプ。版IDの一覧を処理するときには無視されます。",
+ "apihelp-query+deletedrevisions-param-tag": "このタグが付与された版のみ表示します。",
+ "apihelp-query+deletedrevisions-param-user": "この利用者による版のみを一覧表示。",
+ "apihelp-query+deletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
+ "apihelp-query+deletedrevisions-example-titles": "ページ <kbd>Main Page</kbd> および <kbd>Talk:Main Page</kbd> の削除された版とその内容を一覧表示する。",
+ "apihelp-query+deletedrevisions-example-revids": "削除された版 <kbd>123456</kbd> に関する情報を一覧表示する。",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|モード}}: $2",
+ "apihelp-query+deletedrevs-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+deletedrevs-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+deletedrevs-param-from": "列挙の始点となるページ名。",
+ "apihelp-query+deletedrevs-param-to": "列挙の終点となるページ名。",
+ "apihelp-query+deletedrevs-param-tag": "このタグが付与された版のみを一覧表示する。",
+ "apihelp-query+deletedrevs-param-user": "この利用者による版のみを一覧表示する。",
+ "apihelp-query+deletedrevs-param-excludeuser": "この利用者による版を一覧表示しない。",
+ "apihelp-query+deletedrevs-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+ "apihelp-query+deletedrevs-param-limit": "一覧表示する版の最大量。",
+ "apihelp-query+deletedrevs-param-prop": "どの情報を取得するか:\n;revid:削除された版の版IDを追加します。\n;parentid:ページの前の版の版IDを追加します。\n;user:版を作成した利用者を追加します。\n;userid:版を作成した利用者のIDを追加します。\n;comment:版のコメントを追加します。\n;parsedcomment:版のコメントを構文解析して追加します。\n;minor:版が細部の編集かどうか印をつけます。\n;len:版の長さ (バイト) を追加します。\n;sha1:版のSHA-1 (base 16) を追加します。\n;content:版の内容を追加します。\n;token:<span class=\"apihelp-deprecated\">廃止予定です。</span>編集トークンを返します。\n;tags:版のタグです。",
+ "apihelp-query+deletedrevs-example-mode1": "ページ <kbd>Main Page</kbd> および <kbd>Talk:Main Page</kbd> の最後に削除された版を内容と共に一覧表示する(モード 1)。",
+ "apihelp-query+deletedrevs-example-mode2": "<kbd>Bob</kbd> による、削除された最後の50投稿を一覧表示する(モード 2)。",
+ "apihelp-query+deletedrevs-example-mode3-main": "標準名前空間にある削除された最初の50版を一覧表示する(モード 3)。",
+ "apihelp-query+deletedrevs-example-mode3-talk": "{{ns:talk}}名前空間にある削除された最初の50版を一覧表示する(モード 3)。",
+ "apihelp-query+disabled-summary": "このクエリモジュールは無効化されています。",
+ "apihelp-query+embeddedin-param-title": "検索するページ名。$1pageid とは同時に使用できません。",
+ "apihelp-query+embeddedin-param-pageid": "検索するページID. $1titleとは同時に使用できません。",
+ "apihelp-query+embeddedin-param-namespace": "列挙する名前空間。",
+ "apihelp-query+embeddedin-param-filterredir": "転送ページを絞り込む方法。",
+ "apihelp-query+embeddedin-param-limit": "返すページの総数。",
+ "apihelp-query+embeddedin-example-simple": "<kbd>Template:Stub</kbd> を参照読み込みしているページを表示する。",
+ "apihelp-query+embeddedin-example-generator": "<kbd>Template:Stub</kbd> をトランスクルードしているページに関する情報を取得する。",
+ "apihelp-query+extlinks-summary": "与えられたページにあるすべての外部URL (インターウィキを除く) を返します。",
+ "apihelp-query+extlinks-param-limit": "返すリンクの数。",
+ "apihelp-query+extlinks-param-protocol": "URLのプロトコル。このパラメータが空であり、かつ<var>$1query</var> が設定されている場合, protocol は <kbd>http</kbd> となります。すべての外部リンクを一覧表示するためにはこのパラメータと <var>$1query</var> の両方を空にしてください。",
+ "apihelp-query+extlinks-example-simple": "<kbd>Main Page</kbd> の外部リンクの一覧を取得する。",
+ "apihelp-query+exturlusage-summary": "与えられたURLを含むページを一覧表示します。",
+ "apihelp-query+exturlusage-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "ページのIDを追加します。",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "ページ名と名前空間IDを追加します。",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "ページ内で使用されているURLを追加します。",
+ "apihelp-query+exturlusage-param-protocol": "URLのプロトコル。このパラメータが空であり、かつ<var>$1query</var> が設定されている場合, protocol は <kbd>http</kbd> となります。すべての外部リンクを一覧表示するためにはこのパラメータと <var>$1query</var> の両方を空にしてください。",
+ "apihelp-query+exturlusage-param-query": "プロトコルを除いた検索文字列。[[Special:LinkSearch]] も参照してください。すべての外部リンクを一覧表示するには空欄にしてください。",
+ "apihelp-query+exturlusage-param-namespace": "列挙するページ名前空間。",
+ "apihelp-query+exturlusage-param-limit": "返すページの数。",
+ "apihelp-query+exturlusage-example-simple": "<kbd>https://www.mediawiki.org</kbd> にリンクしているページを一覧表示する。",
+ "apihelp-query+filearchive-summary": "削除されたファイルをすべて順に列挙します。",
+ "apihelp-query+filearchive-param-from": "列挙の始点となる画像のページ名。",
+ "apihelp-query+filearchive-param-to": "列挙の終点となる画像のページ名。",
+ "apihelp-query+filearchive-param-dir": "一覧表示する方向。",
+ "apihelp-query+filearchive-param-sha1": "画像の SHA1 ハッシュ値。$1sha1base36 をオーバーライドします。",
+ "apihelp-query+filearchive-param-prop": "どの画像情報を取得するか:",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "バージョンがアップロードされたタイムスタンプを追加します。",
+ "apihelp-query+filearchive-paramvalue-prop-user": "画像のバージョンをアップロードした利用者を追加します。",
+ "apihelp-query+filearchive-paramvalue-prop-size": "バイト単位での画像や高さ、幅、ページ数のサイズを追加します(該当する場合)。",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "画像の MIME を追加します。",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "画像のメディア・タイプを追加します。",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "画像のバージョンの Exif メタデータを一覧表示します。",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "バージョンのビット深度を追加します。",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "非最新バージョンのアーカイブバージョンのファイル名を追加します。",
+ "apihelp-query+filearchive-example-simple": "削除されたファイルの一覧を表示する。",
+ "apihelp-query+filerepoinfo-example-simple": "ファイルリポジトリについての情報を取得します。",
+ "apihelp-query+fileusage-param-prop": "取得するプロパティ:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "各ページのページID。",
+ "apihelp-query+fileusage-paramvalue-prop-title": "各ページのページ名。",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "ページがリダイレクトである場合マークします。",
+ "apihelp-query+fileusage-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+ "apihelp-query+fileusage-example-simple": "[[:File:Example.jpg]] を使用しているページの一覧を取得する。",
+ "apihelp-query+fileusage-example-generator": "[[:File:Example.jpg]] を使用しているページの情報を取得する。",
+ "apihelp-query+imageinfo-param-prop": "取得するファイル情報:",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "ファイルと説明ページへのURLを提供します。",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "バイト単位でファイルや高さ、幅、ページ数のサイズを追加します(該当する場合)。",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "ファイルのMIMEタイプを追加します。",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "画像サムネイルのMIMEタイプを追加します(url と $1urlwidth パラメータが必須です)。",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "ファイルのメディアタイプを追加します。",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "ファイルのバージョンの Exif メタデータを一覧表示します。",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "非最新バージョンのアーカイブバージョンのファイル名を追加します。",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "バージョンのビット深度を追加します。",
+ "apihelp-query+imageinfo-param-start": "一覧表示の始点となるタイムスタンプ。",
+ "apihelp-query+imageinfo-param-end": "一覧表示の終点となるタイムスタンプ。",
+ "apihelp-query+imageinfo-example-simple": "[[:File:Albert Einstein Head.jpg]] の現在のバージョンに関する情報を取得する。",
+ "apihelp-query+images-summary": "与えられたページに含まれるすべてのファイルを返します。",
+ "apihelp-query+images-param-limit": "返す画像の数。",
+ "apihelp-query+images-example-simple": "[[Main Page]] で使用されているファイルの一覧を取得する。",
+ "apihelp-query+images-example-generator": "[[Main Page]] で使用されているファイルに関する情報を取得する。",
+ "apihelp-query+imageusage-param-title": "検索するページ名。$1pageid とは同時に使用できません。",
+ "apihelp-query+imageusage-param-pageid": "検索するページID. $1titleとは同時に使用できません。",
+ "apihelp-query+imageusage-param-namespace": "列挙する名前空間。",
+ "apihelp-query+imageusage-example-simple": "[[:File:Albert Einstein Head.jpg]] を使用しているページを表示する。",
+ "apihelp-query+imageusage-example-generator": "[[:File:Albert Einstein Head.jpg]] を使用しているページに関する情報を取得する。",
+ "apihelp-query+info-summary": "ページの基本的な情報を取得します。",
+ "apihelp-query+info-param-prop": "追加で取得するプロパティ:",
+ "apihelp-query+info-paramvalue-prop-protection": "それぞれのページの保護レベルを一覧表示する。",
+ "apihelp-query+info-param-token": "代わりに [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] を使用してください。",
+ "apihelp-query+info-example-simple": "<kbd>Main Page</kbd> に関する情報を取得する。",
+ "apihelp-query+iwbacklinks-param-prefix": "インターウィキ接頭辞。",
+ "apihelp-query+iwbacklinks-param-title": "検索するウィキ間リンク。<var>$1blprefix</var>と同時に使用しなければなりません。",
+ "apihelp-query+iwbacklinks-param-limit": "返すページの総数。",
+ "apihelp-query+iwbacklinks-param-prop": "取得するプロパティ:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "インターウィキ接頭辞を追加します。",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "ウィキ間リンクのページ名を追加します。",
+ "apihelp-query+iwbacklinks-param-dir": "一覧表示する方向。",
+ "apihelp-query+iwbacklinks-example-simple": "[[wikibooks:Test]] へリンクしているページを取得する。",
+ "apihelp-query+iwbacklinks-example-generator": "[[wikibooks:Test]] へリンクしているページの情報を取得する。",
+ "apihelp-query+iwlinks-summary": "ページからのすべてのウィキ間リンクを返します。",
+ "apihelp-query+iwlinks-param-url": "完全なURLを取得するかどうか (<var>$1prop</var>とは同時に使用できません).",
+ "apihelp-query+iwlinks-param-prop": "各言語間リンクについて取得する追加のプロパティ:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "完全なURLを追加します。",
+ "apihelp-query+iwlinks-param-limit": "返すウィキ間リンクの数。",
+ "apihelp-query+iwlinks-param-prefix": "この接頭辞のウィキ間リンクのみを返す。",
+ "apihelp-query+iwlinks-param-title": "検索するウィキ間リンク。<var>$1</var> と同時に使用しなければなりません。",
+ "apihelp-query+iwlinks-param-dir": "一覧表示する方向。",
+ "apihelp-query+iwlinks-example-simple": "<kbd>Main Page</kbd> にあるウィキ間リンクを取得する。",
+ "apihelp-query+langbacklinks-param-lang": "言語間リンクの言語。",
+ "apihelp-query+langbacklinks-param-title": "検索する言語間リンク。$1lang と同時に使用しなければなりません。",
+ "apihelp-query+langbacklinks-param-limit": "返すページの総数。",
+ "apihelp-query+langbacklinks-param-prop": "取得するプロパティ:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "言語間リンクの言語コードを追加します。",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "言語間リンクのページ名を追加します。",
+ "apihelp-query+langbacklinks-param-dir": "一覧表示する方向。",
+ "apihelp-query+langbacklinks-example-simple": "[[:fr:Test]] へリンクしているページを取得する。",
+ "apihelp-query+langbacklinks-example-generator": "[[:fr:Test]] へリンクしているページの情報を取得する。",
+ "apihelp-query+langlinks-summary": "ページからのすべての言語間リンクを返します。",
+ "apihelp-query+langlinks-param-limit": "返す言語間リンクの数。",
+ "apihelp-query+langlinks-param-url": "完全なURLを取得するかどうか (<var>$1prop</var>とは同時に使用できません).",
+ "apihelp-query+langlinks-param-prop": "各言語間リンクについて取得する追加のプロパティ:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "完全なURLを追加します。",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "ネイティブ言語名を追加します。",
+ "apihelp-query+langlinks-param-lang": "この言語コードの言語間リンクのみを返す。",
+ "apihelp-query+langlinks-param-title": "検索するリンク。<var>$1lang</var>と同時に使用しなければなりません。",
+ "apihelp-query+langlinks-param-dir": "一覧表示する方向。",
+ "apihelp-query+langlinks-example-simple": "<kbd>Main Page</kbd> にある言語間リンクを取得する。",
+ "apihelp-query+links-summary": "ページからのすべてのリンクを返します。",
+ "apihelp-query+links-param-namespace": "この名前空間へのリンクのみ表示する。",
+ "apihelp-query+links-param-limit": "返すリンクの数。",
+ "apihelp-query+links-example-simple": "<kbd>Main Page</kbd> からのリンクを取得する。",
+ "apihelp-query+links-example-generator": "<kbd>Main Page</kbd> からリンクされているページに関する情報を取得する。",
+ "apihelp-query+links-example-namespaces": "<kbd>Main Page</kbd> からの {{ns:user}} および {{ns:template}} 名前空間へのリンクを取得する。",
+ "apihelp-query+linkshere-param-prop": "取得するプロパティ:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "各ページのページID。",
+ "apihelp-query+linkshere-paramvalue-prop-title": "各ページのページ名。",
+ "apihelp-query+linkshere-example-simple": "[[Main Page]] にリンクしているページの一覧を取得する。",
+ "apihelp-query+linkshere-example-generator": "<kbd>[[Main Page]]<kbd> にリンクしているページの情報を取得する。",
+ "apihelp-query+logevents-param-prop": "取得するプロパティ:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "記録イベントのIDを追加します。",
+ "apihelp-query+logevents-paramvalue-prop-title": "記録イベントにページ名を追加します。",
+ "apihelp-query+logevents-paramvalue-prop-type": "記録イベントのタイプを追加します。",
+ "apihelp-query+logevents-paramvalue-prop-comment": "記録イベントのコメントを追加します。",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "記録イベントの構文解析されたコメントを追加します。",
+ "apihelp-query+logevents-paramvalue-prop-details": "記録イベントに関する追加の詳細を一覧表示します。",
+ "apihelp-query+logevents-paramvalue-prop-tags": "記録イベントのタグを一覧表示します。",
+ "apihelp-query+logevents-param-type": "このタイプの記録項目のみに絞り込む。",
+ "apihelp-query+logevents-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+logevents-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+logevents-param-user": "与えられた利用者による記録項目に絞り込む。",
+ "apihelp-query+logevents-param-title": "そのページに関連する記録項目に絞り込む。",
+ "apihelp-query+logevents-param-namespace": "与えられた名前空間内の記録項目に絞り込む。",
+ "apihelp-query+logevents-param-prefix": "この接頭辞ではじまる記録項目に絞り込む。",
+ "apihelp-query+logevents-param-tag": "このタグが付与された記録項目のみ表示する。",
+ "apihelp-query+logevents-param-limit": "返す記録項目の総数。",
+ "apihelp-query+logevents-example-simple": "最近の記録項目を一覧表示する。",
+ "apihelp-query+pagepropnames-summary": "Wiki内で使用されているすべてのページプロパティ名を一覧表示します。",
+ "apihelp-query+pagepropnames-param-limit": "返す名前の最大数。",
+ "apihelp-query+pagepropnames-example-simple": "最初の10個のプロパティ名を取得する。",
+ "apihelp-query+pageprops-summary": "ページコンテンツで定義されている様々なページのプロパティを取得。",
+ "apihelp-query+pageprops-example-simple": "ページ <kbd>Main Page</kbd> および <kbd>MeiaWiki</kbd> のプロパティを取得する。",
+ "apihelp-query+pageswithprop-summary": "与えられたページプロパティが使用されているすべてのページを一覧表示します。",
+ "apihelp-query+pageswithprop-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "ページIDを追加します。",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "ページ名と名前空間IDを追加します。",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "ページプロパティの値を追加。",
+ "apihelp-query+pageswithprop-param-limit": "返すページの最大数。",
+ "apihelp-query+pageswithprop-example-simple": "<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code> を使用している最初の10ページを一覧表示する。",
+ "apihelp-query+pageswithprop-example-generator": "<code>_&#95;NOTOC_&#95;</code> を使用している最初の10ページについての追加情報を取得する。",
+ "apihelp-query+prefixsearch-summary": "ページ名の先頭一致検索を行います。",
+ "apihelp-query+prefixsearch-extended-description": "名前が似ていますが、このモジュールは[[Special:PrefixIndex]]と等価であることを意図しません。そのような目的では<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> を <kbd>apprefix</kbd> パラメーターと共に使用してください。このモジュールの目的は <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd> と似ています: 利用者から入力を受け取り、最も適合するページ名を提供するというものです。検索エンジンのバックエンドによっては、誤入力の訂正や、転送の回避、その他のヒューリスティクスが適用されることがあります。",
+ "apihelp-query+prefixsearch-param-search": "検索文字列。",
+ "apihelp-query+prefixsearch-param-namespace": "検索する名前空間。<var>$1search</var>が有効な名前空間接頭辞で始まる場合は無視されます。",
+ "apihelp-query+prefixsearch-param-limit": "返す結果の最大数。",
+ "apihelp-query+prefixsearch-example-simple": "<kbd>meaning</kbd> で始まるページ名を検索する。",
+ "apihelp-query+protectedtitles-summary": "作成保護が掛けられているページを一覧表示します。",
+ "apihelp-query+protectedtitles-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+ "apihelp-query+protectedtitles-param-level": "この保護レベルのページのみを一覧表示します。",
+ "apihelp-query+protectedtitles-param-limit": "返すページの総数。",
+ "apihelp-query+protectedtitles-param-start": "一覧表示の始点となる保護タイムスタンプ。",
+ "apihelp-query+protectedtitles-param-end": "一覧表示の終点となる保護タイムスタンプ。",
+ "apihelp-query+protectedtitles-param-prop": "取得するプロパティ:",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "保護レベルを追加します。",
+ "apihelp-query+protectedtitles-example-simple": "保護されているページを一覧表示する。",
+ "apihelp-query+protectedtitles-example-generator": "標準名前空間にある保護されたページへのリンクを検索する。",
+ "apihelp-query+querypage-param-page": "特別ページの名前です。これは大文字小文字を区別することに注意。",
+ "apihelp-query+querypage-param-limit": "返す結果の数。",
+ "apihelp-query+querypage-example-ancientpages": "[[Special:Ancientpages]] の結果を返す。",
+ "apihelp-query+random-param-namespace": "この名前空間にあるページのみを返します。",
+ "apihelp-query+random-param-limit": "返す無作為なページの数を制限する。",
+ "apihelp-query+random-param-redirect": "代わりに <kbd>$1filterredir=redirects</kbd> を使用してください。",
+ "apihelp-query+random-param-filterredir": "転送ページを絞り込む方法。",
+ "apihelp-query+random-example-simple": "標準名前空間から2つのページを無作為に返す。",
+ "apihelp-query+random-example-generator": "標準名前空間から無作為に選ばれた2つのページのページ情報を返す。",
+ "apihelp-query+recentchanges-summary": "最近の更新を一覧表示します。",
+ "apihelp-query+recentchanges-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+recentchanges-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+recentchanges-param-namespace": "この名前空間の変更のみに絞り込む。",
+ "apihelp-query+recentchanges-param-user": "この利用者による変更のみを一覧表示する。",
+ "apihelp-query+recentchanges-param-excludeuser": "この利用者による変更を一覧表示しない。",
+ "apihelp-query+recentchanges-param-tag": "このタグが付与された版のみ一覧表示する。",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "構文解析された編集コメントを追加します。",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "編集のフラグを追加します。",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "編集のタイムスタンプを追加します。",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "編集のページ名を追加します。",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "ページID、最近の更新IDと新旧の版IDを追加します。",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "バイト単位の新旧のページの長さを追加します。",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "編集されたページが転送ページである場合、印を付けます。",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "巡回可能な編集について、巡回済みかどうか印を付けます。",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "記録項目に記録の情報 (記録ID, 記録タイプなど) を追加します。",
+ "apihelp-query+recentchanges-param-token": "代わりに <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> を使用してください。",
+ "apihelp-query+recentchanges-param-limit": "返す変更の総数。",
+ "apihelp-query+recentchanges-param-toponly": "最新の版である変更のみを一覧表示する。",
+ "apihelp-query+recentchanges-param-generaterevisions": "ジェネレータとして使用される場合、版IDではなくページ名を生成します。関連する版IDのない最近の変更の項目 (例えば、ほとんどの記録項目) は何も生成しません。",
+ "apihelp-query+recentchanges-example-simple": "最近の更新を一覧表示する。",
+ "apihelp-query+redirects-summary": "ページへのすべての転送を返します。",
+ "apihelp-query+redirects-param-prop": "取得するプロパティ:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "各リダイレクトのページID。",
+ "apihelp-query+redirects-paramvalue-prop-title": "各リダイレクトのページ名。",
+ "apihelp-query+redirects-param-limit": "返す転送の数。",
+ "apihelp-query+redirects-example-simple": "[[Main Page]] への転送の一覧を取得する。",
+ "apihelp-query+redirects-example-generator": "[[Main Page]] へのすべての転送ページに関する情報を取得する。",
+ "apihelp-query+revisions-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+revisions-param-user": "この利用者による版のみを結果に含める。",
+ "apihelp-query+revisions-param-excludeuser": "この利用者による版を結果に含めない。",
+ "apihelp-query+revisions-param-tag": "このタグが付与された版のみを一覧表示する。",
+ "apihelp-query+revisions-example-content": "ページ<kbd>API</kbd> および <kbd>Main Page</kbd> の最新の版のデータと本文を取得する。",
+ "apihelp-query+revisions-example-last5": "<kbd>Main Page</kbd> の直近の5版を取得する。",
+ "apihelp-query+revisions-example-first5": "<kbd>Main Page</kbd> の最初の5版を取得する。",
+ "apihelp-query+revisions-example-first5-after": "<kbd>Main Page</kbd> の 2006-05-01 以降の最初の5版を取得する。",
+ "apihelp-query+revisions-example-first5-not-localhost": "<kbd>Main Page</kbd> の匿名利用者 <kbd>127.0.0.1</kbd> 以外による最初の5版を取得する。",
+ "apihelp-query+revisions-example-first5-user": "<kbd>Main Page</kbd> の <kbd>MediaWiki default</kbd> による最初の5版を取得する。",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "版のID。",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "版のタイムスタンプ。",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "その版を作成した利用者。",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "その版の作成者の利用者ID。",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "その版の長さ (バイト) 。",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "その版の利用者によるコメント。",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "その版の利用者による、構文解析されたコメント。",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "その版のテキスト。",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "その版のタグ。",
+ "apihelp-query+revisions+base-param-limit": "返す版の数を制限する。",
+ "apihelp-query+search-summary": "全文検索を行います。",
+ "apihelp-query+search-param-search": "この値を含むページ名または本文を検索します。Wikiの検索バックエンド実装に応じて、あなたは特別な検索機能を呼び出すための文字列を検索することができます。",
+ "apihelp-query+search-param-namespace": "この名前空間内のみを検索します。",
+ "apihelp-query+search-param-what": "実行する検索の種類です。",
+ "apihelp-query+search-param-prop": "返すプロパティ:",
+ "apihelp-query+search-paramvalue-prop-size": "バイト単位のページのサイズを追加します。",
+ "apihelp-query+search-paramvalue-prop-wordcount": "ページのワード数を追加します。",
+ "apihelp-query+search-paramvalue-prop-timestamp": "ページが最後に編集されたときのタイムスタンプを追加します。",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "合致するタイトルを追加します。",
+ "apihelp-query+search-param-limit": "返すページの総数です。",
+ "apihelp-query+search-example-simple": "<kbd>meaning</kbd> を検索する。",
+ "apihelp-query+search-example-generator": "<kbd>meaning</kbd> の検索で返されたページのページ情報を取得する。",
+ "apihelp-query+siteinfo-param-prop": "どの情報を取得するか:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "システム全体の情報。",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "特別ページの別名の一覧。",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "マジックワードとこれらの別名の一覧。",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "アップロードが許可されているファイル拡張子の一覧を返します。",
+ "apihelp-query+siteinfo-param-numberingroup": "利用者グループに属する利用者の数を一覧表示します。",
+ "apihelp-query+siteinfo-example-simple": "サイト情報を取得する。",
+ "apihelp-query+tags-summary": "変更タグを一覧表示します。",
+ "apihelp-query+tags-param-limit": "一覧表示するタグの最大数。",
+ "apihelp-query+tags-param-prop": "取得するプロパティ:",
+ "apihelp-query+tags-paramvalue-prop-name": "タグの名前を追加。",
+ "apihelp-query+tags-paramvalue-prop-displayname": "タグのためのシステムメッセージを追加します。",
+ "apihelp-query+tags-paramvalue-prop-description": "タグの説明を追加します。",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "版の記録項目の数と、このタグを持っている記録項目の数を、追加します。",
+ "apihelp-query+tags-example-simple": "利用可能なタグを一覧表示する。",
+ "apihelp-query+templates-summary": "与えられたページでトランスクルードされているすべてのページを返します。",
+ "apihelp-query+templates-param-namespace": "この名前空間のテンプレートのみ表示する。",
+ "apihelp-query+templates-param-limit": "返すテンプレートの数。",
+ "apihelp-query+templates-example-simple": "<kbd>Main Page</kbd> で使用されているテンプレートを取得する。",
+ "apihelp-query+templates-example-generator": "<kbd>Main Page</kbd> で使用されているテンプレートに関する情報を取得する。",
+ "apihelp-query+templates-example-namespaces": "<kbd>Main Page</kbd> でトランスクルードされている {{ns:user}} および {{ns:template}} 名前空間のページを取得する。",
+ "apihelp-query+tokens-summary": "データ変更操作用のトークンを取得します。",
+ "apihelp-query+tokens-param-type": "リクエストするトークンの種類。",
+ "apihelp-query+tokens-example-simple": "csrfトークンを取得する (既定)。",
+ "apihelp-query+tokens-example-types": "ウォッチトークンおよび巡回トークンを取得する。",
+ "apihelp-query+transcludedin-summary": "与えられたページをトランスクルードしているすべてのページを検索します。",
+ "apihelp-query+transcludedin-param-prop": "取得するプロパティ:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "各ページのページID。",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "各ページのページ名。",
+ "apihelp-query+transcludedin-example-simple": "<kbd>Main Page</kbd> をトランスクルードしているページの一覧を取得する。",
+ "apihelp-query+transcludedin-example-generator": "<kbd>Main Page</kbd> をトランスクルードしているページに関する情報を取得する。",
+ "apihelp-query+usercontribs-summary": "利用者によるすべての編集を取得します。",
+ "apihelp-query+usercontribs-param-limit": "返す投稿記録の最大数。",
+ "apihelp-query+usercontribs-param-user": "投稿記録を取得する利用者。<var>$1userids</var> または <var>$1userprefix</var> とは同時に使用できません。",
+ "apihelp-query+usercontribs-param-userprefix": "この値で始まる名前のすべての利用者の投稿記録を取得します。<var>$1user</var> または <var>$1userids</var> とは同時に使用できません。",
+ "apihelp-query+usercontribs-param-userids": "投稿記録を取得する利用者のID。<var>$1user</var> または <var>$1userprefix</var> とは同時に使用できません。",
+ "apihelp-query+usercontribs-param-namespace": "この名前空間への投稿記録のみを一覧表示する。",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "ページIDと版IDを追加します。",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "ページ名と名前空間IDを追加します。",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "編集のタイムスタンプを追加します。",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "編集のコメントを追加します。",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "構文解析された編集コメントを追加します。",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "編集の新しいサイズを追加します。",
+ "apihelp-query+usercontribs-param-tag": "このタグが付与された版のみを一覧表示する。",
+ "apihelp-query+usercontribs-param-toponly": "最新の版である変更のみを一覧表示する。",
+ "apihelp-query+usercontribs-example-user": "利用者 <kbd>Example</kbd> の投稿記録を表示する。",
+ "apihelp-query+usercontribs-example-ipprefix": "<kbd>192.0.2.</kbd> から始まるすべてのIPアドレスからの投稿記録を表示する。",
+ "apihelp-query+userinfo-summary": "現在の利用者に関する情報を取得します。",
+ "apihelp-query+userinfo-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "利用者の本名を追加します。",
+ "apihelp-query+userinfo-example-simple": "現在の利用者に関する情報を取得します。",
+ "apihelp-query+userinfo-example-data": "現在の利用者に関する追加情報を取得します。",
+ "apihelp-query+users-summary": "利用者のリストについての情報を取得します。",
+ "apihelp-query+users-param-prop": "どの情報を結果に含めるか:",
+ "apihelp-query+users-param-token": "代わりに <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> を使用してください。",
+ "apihelp-query+users-example-simple": "利用者 <kbd>Example</kbd> の情報を返す。",
+ "apihelp-query+watchlist-summary": "現在の利用者のウォッチリストにあるページへの最近の更新を取得します。",
+ "apihelp-query+watchlist-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+watchlist-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+watchlist-param-namespace": "この名前空間の変更のみに絞り込む。",
+ "apihelp-query+watchlist-param-user": "この利用者による変更のみを一覧表示する。",
+ "apihelp-query+watchlist-param-excludeuser": "この利用者による変更を一覧表示しない。",
+ "apihelp-query+watchlist-param-prop": "追加で取得するプロパティ:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "版IDとページIDを追加します。",
+ "apihelp-query+watchlist-paramvalue-prop-title": "ページ名を追加します。",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "編集のフラグを追加します。",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "編集のコメントを追加します。",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "編集の構文解析されたコメントを追加します。",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "編集のタイムスタンプを追加します。",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "適切な場合にログ情報を追加します。",
+ "apihelp-query+watchlist-example-simple": "現在の利用者のウォッチリストにある最近変更されたページの最新版を一覧表示します。",
+ "apihelp-query+watchlist-example-generator": "現在の利用者のウォッチリスト上の最近更新されたページに関する情報を取得する。",
+ "apihelp-query+watchlistraw-summary": "現在の利用者のウォッチリストにあるすべてのページを取得します。",
+ "apihelp-query+watchlistraw-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+ "apihelp-query+watchlistraw-param-prop": "追加で取得するプロパティ:",
+ "apihelp-query+watchlistraw-param-dir": "一覧表示する方向。",
+ "apihelp-query+watchlistraw-example-generator": "現在の利用者のウォッチリスト上のページに関する情報を取得する。",
+ "apihelp-resetpassword-example-user": "利用者 <kbd>Example</kbd> にパスワード再設定の電子メールを送信する。",
+ "apihelp-revisiondelete-summary": "版の削除および復元を行います。",
+ "apihelp-revisiondelete-param-reason": "削除または復元の理由。",
+ "apihelp-revisiondelete-example-revision": "<kbd>Main Page</kbd> の版 <kbd>12345</kbd> の本文を隠す。",
+ "apihelp-rollback-param-title": "巻き戻すページ名です。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-rollback-param-pageid": "巻き戻すページのページIDです。<var>$1title</var> とは同時に使用できません。",
+ "apihelp-rollback-param-tags": "巻き戻しに適用するタグ。",
+ "apihelp-rollback-param-user": "巻き戻し対象の編集を行った利用者名。",
+ "apihelp-rollback-param-markbot": "巻き戻された編集と巻き戻しをボットの編集としてマークする。",
+ "apihelp-rollback-example-simple": "利用者 <kbd>Example</kbd> による <kbd>Main Page</kbd> への最後の一連の編集を巻き戻す。",
+ "apihelp-rollback-example-summary": "IP利用者 <kbd>192.0.2.5</kbd> による <kbd>Main Page</kbd> への最後の一連の編集を <kbd>Reverting vandalism</kbd> という理由で、それらの編集とその差し戻しをボットの編集としてマークして差し戻す。",
+ "apihelp-setpagelanguage-summary": "ページの言語を変更します。",
+ "apihelp-setpagelanguage-extended-description-disabled": "ページ言語の変更はこのwikiでは許可されていません。\n\nこの操作を利用するには、<var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> を設定してください。",
+ "apihelp-setpagelanguage-param-title": "言語を変更したいページのページ名。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-setpagelanguage-param-pageid": "言語を変更したいページのページID。<var>$1title</var> とは同時に使用できません。",
+ "apihelp-setpagelanguage-param-reason": "変更の理由。",
+ "apihelp-stashedit-param-title": "編集されているページのページ名。",
+ "apihelp-stashedit-param-section": "節番号です。先頭の節の場合は <kbd>0</kbd>、新しい節の場合は <kbd>new</kbd>を指定します。",
+ "apihelp-stashedit-param-sectiontitle": "新しい節の名前です。",
+ "apihelp-stashedit-param-text": "ページの本文。",
+ "apihelp-stashedit-param-contentmodel": "新しいコンテンツのコンテンツ・モデル。",
+ "apihelp-tag-summary": "個々の版または記録項目に対しタグの追加または削除を行います。",
+ "apihelp-tag-param-add": "追加するタグ。手動で定義されたタグのみ追加可能です。",
+ "apihelp-tag-param-reason": "変更の理由。",
+ "apihelp-tag-example-rev": "版ID 123に <kbd>vandalism</kbd> タグを理由を指定せずに追加する",
+ "apihelp-tag-example-log": "<kbd>Wrongly applied</kbd> という理由で <kbd>spam</kbd> タグを 記録項目ID 123 から取り除く",
+ "apihelp-tokens-param-type": "リクエストするトークンの種類。",
+ "apihelp-tokens-example-edit": "編集トークンを取得する (既定)。",
+ "apihelp-unblock-summary": "利用者のブロックを解除します。",
+ "apihelp-unblock-param-id": "解除するブロックのID (<kbd>list=blocks</kbd>で取得できます)。<var>$1user</var> または <var>$1userid</var> とは同時に使用できません。",
+ "apihelp-unblock-param-user": "ブロックを解除する利用者名、IPアドレスまたはIPレンジ。<var>$1id</var>とは同時に使用できません。",
+ "apihelp-unblock-param-reason": "ブロック解除の理由。",
+ "apihelp-unblock-param-tags": "ブロック記録の項目に適用する変更タグ。",
+ "apihelp-unblock-example-id": "ブロックID #<kbd>105</kbd> を解除する。",
+ "apihelp-unblock-example-user": "<kbd>Sorry Bob</kbd> という理由で利用者 <kbd>Bob</kbd> のブロックを解除する。",
+ "apihelp-undelete-summary": "削除されたページの版を復元します。",
+ "apihelp-undelete-extended-description": "削除された版の一覧 (タイムスタンプを含む) は[[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]]に、また削除されたファイルのID一覧は[[Special:ApiHelp/query+filearchive|list=filearchive]]で見つけることができます。",
+ "apihelp-undelete-param-title": "復元するページ名。",
+ "apihelp-undelete-param-reason": "復元の理由。",
+ "apihelp-undelete-param-tags": "削除記録の項目に適用する変更タグ。",
+ "apihelp-undelete-param-timestamps": "復元する版のタイムスタンプ。<var>$1timestamps</var> と <var>$1fileids</var> の両方が空の場合、すべての版が復元されます。",
+ "apihelp-undelete-example-page": "<kbd>Main Page</kbd> を復元する。",
+ "apihelp-undelete-example-revisions": "<kbd>Main Page</kbd> の2つの版を復元する。",
+ "apihelp-upload-param-watch": "このページをウォッチする。",
+ "apihelp-upload-param-ignorewarnings": "あらゆる警告を無視する。",
+ "apihelp-upload-param-url": "ファイル取得元のURL.",
+ "apihelp-userrights-summary": "利用者の所属グループを変更します。",
+ "apihelp-userrights-param-user": "利用者名。",
+ "apihelp-userrights-param-userid": "利用者ID。",
+ "apihelp-userrights-param-add": "利用者をこのグループに追加するか、既にメンバーの場合は、そのグループのメンバーシップの有効期限を更新します。",
+ "apihelp-userrights-param-reason": "変更の理由。",
+ "apihelp-userrights-example-expiry": "利用者 <kbd>SometimeSysop</kbd> を 1ヶ月間 <kbd>sysop</kbd> グループに追加する。",
+ "apihelp-watch-summary": "現在の利用者のウォッチリストにページを追加/除去します。",
+ "apihelp-watch-example-watch": "<kbd>Main Page</kbd> をウォッチする。",
+ "apihelp-watch-example-unwatch": "<kbd>Main Page</kbd> のウォッチを解除する。",
+ "apihelp-format-example-generic": "クエリの結果を $1 形式で返します。",
+ "apihelp-json-summary": "データを JSON 形式で出力します。",
+ "apihelp-json-param-callback": "指定すると、指定した関数呼び出しで出力をラップします。安全のため、利用者固有のデータはすべて制限されます。",
+ "apihelp-json-param-utf8": "指定すると、大部分の非 ASCII 文字 (すべてではありません) を、16 進のエスケープ シーケンスに置換する代わりに UTF-8 として符号化します。<var>formatversion</var> が <kbd>1</kbd> でない場合は既定です。",
+ "apihelp-json-param-ascii": "指定すると、すべての非ASCII文字を16進エスケープにエンコードします。<var>formatversion</var> が <kbd>1</kbd> の場合既定です。",
+ "apihelp-jsonfm-summary": "データを JSON 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-none-summary": "何も出力しません。",
+ "apihelp-php-summary": "データを PHP のシリアル化した形式で出力します。",
+ "apihelp-phpfm-summary": "データを PHP のシリアル化した形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-rawfm-summary": "データをデバッグ要素付きで JSON 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-xml-summary": "データを XML 形式で出力します。",
+ "apihelp-xml-param-xslt": "指定すると、XSLスタイルシートとして名付けられたページを追加します。値は、必ず、{{ns:MediaWiki}} 名前空間の、ページ名の末尾が <code>.xsl</code> でのタイトルである必要があります。",
+ "apihelp-xml-param-includexmlnamespace": "指定すると、XML 名前空間を追加します。",
+ "apihelp-xmlfm-summary": "データを XML 形式 (HTML に埋め込んだ形式) で出力します。",
+ "api-format-title": "MediaWiki API の結果",
+ "api-format-prettyprint-header": "このページは $1 形式を HTML で表現したものです。HTML はデバッグに役立ちますが、アプリケーションでの使用には適していません。\n\n<var>format</var> パラメーターを指定すると出力形式を変更できます 。$1 形式の非 HTML 版を閲覧するには、format=$2 を設定してください。\n\n詳細情報については [[mw:Special:MyLanguage/API|完全な説明文書]]または [[Special:ApiHelp/main|API のヘルプ]]を参照してください。",
+ "api-pageset-param-titles": "対象のページ名のリスト。",
+ "api-pageset-param-pageids": "対象のページIDのリスト。",
+ "api-pageset-param-revids": "対象の版IDのリスト。",
+ "api-pageset-param-generator": "クエリモジュールを実行することにより対象のページの一覧を取得する。\n\n<strong>注意</strong> Generator パラメーターの名前は \"g\" で始まります。例を参照してください。",
+ "api-pageset-param-redirects-generator": "<var>$1titles</var>, <var>$1pageids</var>, および <var>$1revids</var>, および <var>$1generator</var> によって返されたページの転送を自動的に解決する。",
+ "api-pageset-param-redirects-nogenerator": "<var>$1titles</var>, <var>$1pageids</var>, および <var>$1revids</var> の転送を自動的に解決する。",
+ "api-help-title": "MediaWiki API ヘルプ",
+ "api-help-lead": "このページは自動生成された MediaWiki API の説明文書ページです。\n\n説明文書と例: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "メイン モジュール",
+ "api-help-flag-deprecated": "このモジュールは廃止予定です。",
+ "api-help-flag-internal": "<strong>このモジュールは内部的または不安定です。</strong>動作が予告なく変更される場合があります。",
+ "api-help-flag-readrights": "このモジュールは読み取りの権限を必要とします。",
+ "api-help-flag-writerights": "このモジュールは書き込みの権限を必要とします。",
+ "api-help-flag-mustbeposted": "このモジュールは POST リクエストのみを受け付けます。",
+ "api-help-flag-generator": "このモジュールはジェネレーターとして使用できます。",
+ "api-help-parameters": "{{PLURAL:$1|パラメーター}}:",
+ "api-help-param-deprecated": "廃止予定です。",
+ "api-help-param-required": "このパラメーターは必須です。",
+ "api-help-datatypes-header": "データ型",
+ "api-help-param-list": "{{PLURAL:$1|1=値 (次の値のいずれか1つ)|2=値 (<kbd>{{!}}</kbd>もしくは[[Special:ApiHelp/main#main/datatypes|別の文字列]]で区切る)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=空欄にしてください|空欄にするか、または $2}}",
+ "api-help-param-integer-min": "{{PLURAL:$1|値}}は $2 以上にしてください。",
+ "api-help-param-integer-max": "{{PLURAL:$1|値}}は $3 以下にしてください。",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|値}}は $2 以上 $3 以下にしてください。",
+ "api-help-param-upload": "multipart/form-data 形式でファイルをアップロードしてください。",
+ "api-help-param-multi-separate": "複数の値は <kbd>|</kbd> もしくは[[Special:ApiHelp/main#main/datatypes|代わりの文字]]で区切ってください。",
+ "api-help-param-multi-max": "値の最大値は {{PLURAL:$1|$1}} (ボットの場合は {{PLURAL:$2|$2}}) です。",
+ "api-help-param-default": "既定値: $1",
+ "api-help-param-default-empty": "既定値: <span class=\"apihelp-empty\">(空)</span>",
+ "api-help-param-token": "[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] から取得した「$1」トークン",
+ "api-help-param-token-webui": "互換性のために、ウェブUIで使用されるトークンも受理されます。",
+ "api-help-param-limited-in-miser-mode": "<strong>注意:</strong> [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]] により、これを使用すると継続する前に <var>$1limit</var> より返される結果が少なくなることがあります; 極端な場合では、ゼロ件の結果が返ることもあります。",
+ "api-help-param-direction": "列挙の方向:\n;newer:古いものを先に表示します。注意: $1start は $1end 以前でなければなりません。\n;older:新しいものを先に表示します (既定)。注意: $1start は $1end 以降でなければなりません。",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(説明なし)</span>",
+ "api-help-param-maxbytes": "$1 {{PLURAL:$1|byte|バイト}}以下で入力してください。",
+ "api-help-param-maxchars": "$1 {{PLURAL:$1|character|文字}}以下で入力してください。",
+ "api-help-examples": "{{PLURAL:$1|例}}:",
+ "api-help-permissions": "{{PLURAL:$1|権限}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|権限を持つグループ}}: $2",
+ "api-help-open-in-apisandbox": "<small>[サンドボックスで開く]</small>",
+ "apierror-missingparam": "パラメーター <var>$1</var> を設定してください。",
+ "apierror-timeout": "サーバーが決められた時間内に応答しませんでした。",
+ "apiwarn-invalidcategory": "「$1」はカテゴリではありません。",
+ "apiwarn-notfile": "「$1」はファイルではありません。",
+ "api-credits-header": "クレジット",
+ "api-credits": "API の開発者:\n* Roan Kattouw (2007年9月-2009年の主任開発者)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (作成者、2006年9月-2007年9月の主任開発者)\n* Brad Jorsch (2013年-現在の主任開発者)\n\nコメント、提案、質問は mediawiki-api@lists.wikimedia.org にお送りください。\nバグはこちらへご報告ください: https://phabricator.wikimedia.org/"
+}
diff --git a/www/wiki/includes/api/i18n/jam.json b/www/wiki/includes/api/i18n/jam.json
new file mode 100644
index 00000000..3c44fd2a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/jam.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chabi1"
+ ]
+ },
+ "api-help-main-header": "Mien madyuul"
+}
diff --git a/www/wiki/includes/api/i18n/jv.json b/www/wiki/includes/api/i18n/jv.json
new file mode 100644
index 00000000..a250db01
--- /dev/null
+++ b/www/wiki/includes/api/i18n/jv.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "NoiX180"
+ ]
+ },
+ "apihelp-delete-example-simple": "Busak <kbd>Tepas</kbd>.",
+ "apihelp-query+backlinks-example-simple": "Tuduhaké pranala menyang <kbd>Kaca utama</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Deleng pratélan bab kaca-kaca sing nggayut <kbd>Kaca utama</kbd>.",
+ "apihelp-query+contributors-example-simple": "Tuduhaké para nyumbang <kbd>Kaca Utama</kbd>."
+}
diff --git a/www/wiki/includes/api/i18n/ka.json b/www/wiki/includes/api/i18n/ka.json
new file mode 100644
index 00000000..a9bc6860
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ka.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Irus"
+ ]
+ },
+ "apihelp-login-param-name": "მომხმარებლის სახელი",
+ "apihelp-login-param-password": "პაროლი",
+ "apihelp-login-param-domain": "ელ-ფოსტა (არასავალდებულო)",
+ "apihelp-login-example-login": "შესვლა"
+}
diff --git a/www/wiki/includes/api/i18n/kn.json b/www/wiki/includes/api/i18n/kn.json
new file mode 100644
index 00000000..705512eb
--- /dev/null
+++ b/www/wiki/includes/api/i18n/kn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kamalaksha"
+ ]
+ },
+ "apihelp-query+watchlist-paramvalue-type-external": "ಬಾಹ್ಯ ಬದಲಾವಣೆಗಳು"
+}
diff --git a/www/wiki/includes/api/i18n/ko.json b/www/wiki/includes/api/i18n/ko.json
new file mode 100644
index 00000000..354e75cf
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ko.json
@@ -0,0 +1,891 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kwj2772",
+ "Twotwo2019",
+ "아라",
+ "LiteHell",
+ "Ysjbserver",
+ "Alex00728",
+ "Hwangjy9",
+ "Kurousagi",
+ "Revi",
+ "Yearning",
+ "Priviet",
+ "Ykhwong",
+ "Jonghaya",
+ "Jerrykim306",
+ "코코아",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|설명문서]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 알림 사항]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청]\n</div>\n<strong>상태:</strong> 이 페이지에 보이는 모든 기능은 정상적으로 작동하지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 변경될 수 있습니다. 업데이트 공지를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 \"MediaWiki-API-Error\" 키가 포함된 HTTP 헤더가 전송되며 반환되는 헤더와 오류 코드의 값은 모두 동일한 값으로 설정됩니다. 자세한 정보에 대해서는 [[mw:Special:MyLanguage/API:Errors and warnings/ko|API:오류와 경고]]를 참조하십시오.\n\n<strong>테스트하기:</strong> API 요청 테스트를 용이하게 하려면, [[Special:ApiSandbox]]를 보십시오.",
+ "apihelp-main-param-action": "수행할 동작",
+ "apihelp-main-param-format": "출력값의 형식.",
+ "apihelp-main-param-maxlag": "최대 랙은 미디어위키가 데이터베이스 복제된 클러스터에 설치되었을 때 사용될 수 있습니다. 특정한 행동이 사이트 복제 랙을 유발할 때, 이 변수는 클라이언트가 복제 랙이 설정된 숫자 아래로 내려갈 때까지 기다리도록 지시합니다. 과도한 랙의 경우, <samp>maxlag</samp> 오류 코드와 <samp>$host 대기 중: $lag초 지연되었습니다</samp> 메시지가 제공됩니다.<br />[[mw:Special:MyLanguage/Manual:Maxlag_parameter|매뉴얼: Maxlag 변수]]에서 더 많은 정보를 얻을 수 있습니다.",
+ "apihelp-main-param-smaxage": "<code>s-maxage</code> HTTP 캐시 컨트롤 헤더를 설정합니다. 오류는 캐시되지 않습니다.",
+ "apihelp-main-param-maxage": "<code>max-age</code> HTTP 캐시 컨트롤 헤더를 설정합니다. 오류는 캐시되지 않습니다.",
+ "apihelp-main-param-assert": "<kbd>user</kbd> 플래그가 설정되어 있다면 로그인 여부를 체크하며, <kbd>bot</kbd> 플래그가 설정되어 있다면 봇 사용자 권한이 설정되어 있는지 확인합니다.",
+ "apihelp-main-param-assertuser": "현재 사용자가 지명된 사용자인지 확인합니다.",
+ "apihelp-main-param-requestid": "주어진 요청 값은 응답에 포함됩니다. 요청을 구분하기 위해 사용될 수 있습니다.",
+ "apihelp-main-param-servedby": "결과에 요청을 처리한 호스트네임을 포함합니다.",
+ "apihelp-main-param-curtimestamp": "결과의 타임스탬프를 포함합니다.",
+ "apihelp-main-param-responselanginfo": "<var>uselang</var> 및 <var>errorlang</var>에 사용되는 언어를 결과에 포함합니다.",
+ "apihelp-main-param-origin": "크로스 도메인 AJAX 요청 (CORS)을 사용하여 API에 접근할 때, 이것을 발신 도메인으로 설정하십시오. 모든 pre-flight 요청에 포함되어야 하며, 이에 따라 (POST 본문이 아닌) 요청 URI의 일부여야 합니다.\n\n인증된 요청의 경우, <code>Origin</code> 헤더의 발신지들 중 하나와 정확히 일치해야 하므로 <kbd>https://en.wikipedia.org</kbd> 또는 <kbd>https://meta.wikimedia.org</kbd>와 같이 설정되어야 합니다. 이 변수가 <code>Origin</code> 헤더와 일치하지 않으면 403 응답이 반환됩니다. 이 변수가 <code>Origin</code> 헤더와 일치하고 발신지가 화이트리스트에 있을 경우 <code>Access-Control-Allow-Origin</code>과 <code>Access-Control-Allow-Credentials</code> 헤더가 설정됩니다.\n\n인증되지 않은 요청의 경우, <kbd>*</kbd> 값을 지정하십시오. 이를 통해 <code>Access-Control-Allow-Origin</code> 헤더가 설정되지만 <code>Access-Control-Allow-Credentials</code>는 <code>false</code>로 설정되어 모든 사용자 지정 데이터가 제한을 받게 됩니다.",
+ "apihelp-main-param-uselang": "메시지 번역을 위한 언어입니다. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>에 <kbd>siprop=languages</kbd>를 함께 사용하면 언어 코드의 목록을 반환하고, <kbd>user</kbd>를 지정하면 현재 사용자의 언어 환경 설정을 사용하며, <kbd>content</kbd>를 지정하면 이 위키의 콘텐츠 언어를 사용합니다.",
+ "apihelp-main-param-errorformat": "경고 및 오류 텍스트 출력을 위해 사용할 형식입니다.\n; plaintext: HTML 태그가 제거되고 엔티티가 치환된 위키텍스트입니다.\n; wikitext: 구문 분석되지 않은 위키텍스트입니다.\n; html: HTML입니다.\n; raw: 메시지 키와 변수입니다.\n; none: 텍스트 없이 오류 코드만 출력합니다.\n; bc: 미디어위키 1.29 이전에 사용된 형식입니다. <var>errorlang</var> 및 <var>errorsuselocal</var>은 무시됩니다.",
+ "apihelp-main-param-errorlang": "경고와 오류를 위해 사용할 언어입니다. <kbd>siprop=languages</kbd>가 포함된 <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>는 언어 코드의 목록을 반환하고, <kbd>content</kbd>를 지정하면 이 위키의 내용 상의 언어를 사용하며, <kbd>uselang</kbd>을 지정하면 <var>uselang</var> 변수와 동일한 값을 사용합니다.",
+ "apihelp-main-param-errorsuselocal": "지정하면 오류 텍스트가 {{ns:MediaWiki}} 이름공간에서 지역적으로 정의된 메시지를 사용합니다.",
+ "apihelp-block-summary": "사용자를 차단합니다.",
+ "apihelp-block-param-user": "차단할 사용자 이름, IP 주소, 또는 IP 주소 대역입니다. <var>$1userid</var>와(과) 함께 사용할 수 없습니다.",
+ "apihelp-block-param-userid": "차단할 사용자 ID입니다. <var>$1user</var>와(과) 함께 사용할 수 없습니다.",
+ "apihelp-block-param-expiry": "기한. 상대값(예시: <kbd>5 months</kbd> 또는 </kbd>2 weeks</kbd>) 또는 절대값(예시: <kbd>2014-09-18T12:34:56Z</kbd>)이 될 수 있습니다. <kbd>infinite</kbd>, <kbd>indefinite</kbd> 또는 <kbd>never</kbd>로 설정하면 무기한으로 설정됩니다.",
+ "apihelp-block-param-reason": "차단 이유.",
+ "apihelp-block-param-anononly": "익명 사용자만 차단합니다. (즉, 이 IP의 익명 편집을 막음)",
+ "apihelp-block-param-nocreate": "계정 생성을 막습니다.",
+ "apihelp-block-param-autoblock": "최근 사용한 IP 주소나 로그인을 시도한 이후에 사용한 모든 IP 주소를 자동으로 차단합니다.",
+ "apihelp-block-param-noemail": "위키를 통해 이메일을 보내지 못하도록 막습니다. (<code>blockemail</code> 권한 필요)",
+ "apihelp-block-param-hidename": "차단 기록에서 사용자 이름을 숨깁니다. (<code>hideuser</code> 권한 필요)",
+ "apihelp-block-param-allowusertalk": "사용자가 자신의 토론 문서를 편집할 수 있도록 허용합니다 (<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>에 따라 다름)",
+ "apihelp-block-param-reblock": "사용자가 이미 차단된 경우, 기존 차단 설정을 바꿉니다.",
+ "apihelp-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.",
+ "apihelp-block-param-tags": "차단 기록의 항목에 적용할 태그를 변경합니다.",
+ "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd>에 대해 <kbd>First strike</kbd>라는 이유로 3일 간 차단하기",
+ "apihelp-block-example-user-complex": "사용자 <kbd>Vandal</kbd>을 <kbd>Vandalism</kbd>이라는 이유로 무기한 차단하며 계정 생성 및 이메일 발송을 막기",
+ "apihelp-changeauthenticationdata-summary": "현재 사용자의 인증 데이터를 변경합니다.",
+ "apihelp-changeauthenticationdata-example-password": "현재 사용자의 비밀번호를 <kbd>ExamplePassword</kbd>로 바꾸는 것을 시도합니다.",
+ "apihelp-checktoken-summary": "<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>의 토큰의 유효성을 확인합니다.",
+ "apihelp-checktoken-param-type": "테스트되는 토큰의 종류.",
+ "apihelp-checktoken-param-token": "테스트할 토큰",
+ "apihelp-checktoken-param-maxtokenage": "초로 계산된 토큰의 최대 나이.",
+ "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> 토큰의 유효성을 테스트합니다.",
+ "apihelp-clearhasmsg-summary": "현재 사용자의 <code>hasmsg</code> 플래그를 비웁니다.",
+ "apihelp-clearhasmsg-example-1": "현재 계정의 <code>hasmsg</code> 플래그를 삭제합니다.",
+ "apihelp-clientlogin-summary": "상호작용 플로우를 이용하여 위키에 로그인합니다.",
+ "apihelp-clientlogin-example-login": "사용자 <kbd>Example</kbd>, 비밀번호 <kbd>ExamplePassword</kbd>로 위키 로그인 과정을 시작합니다.",
+ "apihelp-clientlogin-example-login2": "<kbd>987654</kbd>의 <var>OATHToken</var>을 지정하여 2요소 인증을 위한 <samp>UI</samp> 응답 이후에 로그인을 계속합니다.",
+ "apihelp-compare-summary": "두 문서 간의 차이를 가져옵니다.",
+ "apihelp-compare-extended-description": "대상이 되는 두 문서의 판 번호나 문서 제목 또는 문서 ID를 지정해야 합니다.",
+ "apihelp-compare-param-fromtitle": "비교할 첫 이름.",
+ "apihelp-compare-param-fromid": "비교할 첫 문서 ID.",
+ "apihelp-compare-param-fromrev": "비교할 첫 판.",
+ "apihelp-compare-param-fromtext": "<var>fromtitle</var>, <var>fromid</var> 또는 <var>fromrev</var>로 지정된 판의 내용 대신 이 텍스트를 사용합니다.",
+ "apihelp-compare-param-fromsection": "지정된 'from' 내용의 지정된 문단만 사용합니다.",
+ "apihelp-compare-param-frompst": "<var>fromtext</var>에 사전 저장 변환을 수행합니다.",
+ "apihelp-compare-param-fromcontentmodel": "<var>fromtext</var>의 콘텐츠 모델입니다. 지정하지 않으면 다른 변수를 참고하여 추정합니다.",
+ "apihelp-compare-param-fromcontentformat": "<var>fromtext</var>의 콘텐츠 직렬화 포맷입니다.",
+ "apihelp-compare-param-totitle": "비교할 두 번째 제목.",
+ "apihelp-compare-param-toid": "비교할 두 번째 문서 ID.",
+ "apihelp-compare-param-torev": "비교할 두 번째 판.",
+ "apihelp-compare-param-torelative": "<var>fromtitle</var>, <var>fromid</var> 또는 <var>fromrev</var>에서 결정된 판과 상대적인 판을 사용합니다. 다른 'to' 옵션들은 모두 무시됩니다.",
+ "apihelp-compare-param-totext": "<var>totitle</var>, <var>toid</var> 또는 <var>torev</var>로 지정된 판의 내용 대신 이 텍스트를 사용합니다.",
+ "apihelp-compare-param-tosection": "지정된 'to' 내용의 지정된 문단만 사용합니다.",
+ "apihelp-compare-param-topst": "<var>totext</var>에 사전 저장 변환을 수행합니다.",
+ "apihelp-compare-param-tocontentmodel": "<var>totext</var>의 콘텐츠 모델입니다. 지정하지 않으면 다른 변수를 참고하여 추정합니다.",
+ "apihelp-compare-param-tocontentformat": "<var>totext</var>의 콘텐츠 직렬화 포맷입니다.",
+ "apihelp-compare-param-prop": "가져올 정보입니다.",
+ "apihelp-compare-paramvalue-prop-diff": "HTML의 차이입니다.",
+ "apihelp-compare-paramvalue-prop-diffsize": "HTML 차이의 크기(바이트 단위)입니다.",
+ "apihelp-compare-paramvalue-prop-rel": "해당하는 경우 'from' 이전과 'to' 이후 판의 판 ID입니다.",
+ "apihelp-compare-paramvalue-prop-ids": "'from'과 'to' 판의 문서와 판 ID입니다.",
+ "apihelp-compare-paramvalue-prop-title": "'from'과 'to' 판의 문서 제목입니다.",
+ "apihelp-compare-paramvalue-prop-user": "'from'과 'to' 판의 사용자 이름과 ID입니다.",
+ "apihelp-compare-paramvalue-prop-comment": "'from'과 'to' 판의 설명입니다.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "'from'과 to' 판의 구문 분석된 설명입니다.",
+ "apihelp-compare-paramvalue-prop-size": "'from'과 'to' 판의 크기입니다.",
+ "apihelp-compare-example-1": "판 1과 2의 차이를 생성합니다.",
+ "apihelp-createaccount-summary": "새 사용자 계정을 만듭니다.",
+ "apihelp-createaccount-param-preservestate": "<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>가 <samp>hasprimarypreservedstate</samp>에 대해 참을 반환하면 <samp>primary-required</samp>로 표시된 요청은 생략됩니다. <samp>preservedusername</samp>에 대해 비어있지 않은 값이 반환되면 해당 사용자 이름은 <var>username</var> 변수를 위해 사용됩니다.",
+ "apihelp-createaccount-example-create": "비밀번호 <kbd>ExamplePassword</kbd>로 된 사용자 <kbd>Example</kbd>의 생성 과정을 시작합니다.",
+ "apihelp-createaccount-param-name": "사용자 이름",
+ "apihelp-createaccount-param-password": "비밀번호입니다. (<var>$1mailpassword</var>가 설정되어 있으면 무시됩니다)",
+ "apihelp-createaccount-param-domain": "외부 인증의 도메인 (선택적)",
+ "apihelp-createaccount-param-token": "첫 요청에서 획득한 계정 생성 토큰.",
+ "apihelp-createaccount-param-email": "사용자 이메일 주소 (선택).",
+ "apihelp-createaccount-param-realname": "사용자 실명 (선택).",
+ "apihelp-createaccount-param-mailpassword": "아무 값이든 존재한다면, 랜덤 비밀번호가 이메일로 전송됩니다.",
+ "apihelp-createaccount-param-reason": "선택적인, 기록에 남을 계정을 만드는 이유",
+ "apihelp-createaccount-param-language": "사용자에게 기본으로 설정할 언어 코드. (선택 사항, 기본값으로는 본문의 언어입니다)",
+ "apihelp-createaccount-example-pass": "사용자 <kbd>testuser</kbd>를 만들고 비밀번호를 <kbd>test123</kbd>으로 설정합니다.",
+ "apihelp-createaccount-example-mail": "사용자 <kbd>testmailuser</kbd>를 만들고 자동 생성된 비밀번호를 이메일로 보냅니다.",
+ "apihelp-cspreport-summary": "브라우저가 콘텐츠 보안 정책의 위반을 보고하기 위해 사용합니다. 이 모듈은 SCP를 준수하는 웹 브라우저에 의해 자동으로 사용될 때를 제외하고는 사용해서는 안 됩니다.",
+ "apihelp-cspreport-param-reportonly": "강제적 정책이 아닌, 모니터링 정책에서 나온 보고서인 것으로 표시합니다",
+ "apihelp-cspreport-param-source": "이 보고서를 작동시킨 CSP 헤더를 생성한 원본입니다",
+ "apihelp-delete-summary": "문서를 삭제합니다.",
+ "apihelp-delete-param-title": "삭제할 문서의 제목. <var>$1pageid</var>과 함께 사용할 수 없습니다.",
+ "apihelp-delete-param-pageid": "삭제할 문서의 ID. <var>$1title</var>과 함께 사용할 수 없습니다.",
+ "apihelp-delete-param-reason": "삭제의 이유. 설정하지 않으면 자동 생성되는 이유를 사용합니다.",
+ "apihelp-delete-param-tags": "삭제 기록의 항목에 적용할 변경 태그입니다.",
+ "apihelp-delete-param-watch": "문서를 현재 사용자의 주시문서 목록에 추가합니다.",
+ "apihelp-delete-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
+ "apihelp-delete-param-unwatch": "문서를 현재 사용자의 주시문서 목록에서 제거합니다.",
+ "apihelp-delete-param-oldimage": "[[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]]에 지정된 바대로 삭제할 오래된 그림의 이름입니다.",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd>를 삭제합니다.",
+ "apihelp-delete-example-reason": "<kbd>Preparing for move</kbd> 라는 이유로 <kbd>Main Page</kbd>를 삭제하기.",
+ "apihelp-disabled-summary": "이 모듈은 해제되었습니다.",
+ "apihelp-edit-summary": "문서를 만들고 편집합니다.",
+ "apihelp-edit-param-title": "편집할 문서의 제목. <var>$1pageid</var>과 같이 사용할 수 없습니다.",
+ "apihelp-edit-param-pageid": "편집할 문서의 문서 ID입니다. <var>$1title</var>과 함께 사용할 수 없습니다.",
+ "apihelp-edit-param-section": "문단 번호입니다. <kbd>0</kbd>은 최상위 문단, <kbd>new</kbd>는 새 문단입니다.",
+ "apihelp-edit-param-sectiontitle": "새 문단을 위한 제목.",
+ "apihelp-edit-param-text": "문서 내용.",
+ "apihelp-edit-param-summary": "편집 요약. 또한 $1section=new 및 $1sectiontitle이 설정되어 있지 않을 때 문단 제목.",
+ "apihelp-edit-param-tags": "이 판에 적용할 태그를 변경합니다.",
+ "apihelp-edit-param-minor": "사소한 편집.",
+ "apihelp-edit-param-notminor": "사소하지 않은 편집.",
+ "apihelp-edit-param-bot": "이 편집을 봇 편집으로 표시.",
+ "apihelp-edit-param-basetimestamp": "기본 판의 타임스탬프이며, 편집 충돌을 발견하기 위해 사용됩니다. [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]를 통해 가져올 수 있습니다.",
+ "apihelp-edit-param-starttimestamp": "편집 과정을 시작할 때의 타임스탬프이며 편집 충돌을 발견하기 위해 사용됩니다. 편집 과정을 시작할 때(예: 문서 내용을 편집으로 불러올 때) <var>[[Special:ApiHelp/main|curtimestamp]]</var>를 사용하여 적절한 값을 가져올 수 있습니다.",
+ "apihelp-edit-param-recreate": "중간에 삭제되는 문서에 관한 오류를 모두 무시합니다.",
+ "apihelp-edit-param-createonly": "이 페이지가 이미 존재하면 편집하지 않습니다.",
+ "apihelp-edit-param-nocreate": "페이지가 존재하지 않으면 오류를 출력합니다.",
+ "apihelp-edit-param-watch": "문서를 현재 사용자의 주시문서 목록에 추가합니다.",
+ "apihelp-edit-param-unwatch": "문서를 현재 사용자의 주시문서 목록에서 제거합니다.",
+ "apihelp-edit-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
+ "apihelp-edit-param-redirect": "자동으로 넘겨주기 처리하기.",
+ "apihelp-edit-param-contentmodel": "새 콘텐츠의 콘텐츠 모델.",
+ "apihelp-edit-example-edit": "문서 편집",
+ "apihelp-edit-example-undo": "자동 편집요약으로 13579판에서 13585판까지 되돌리기.",
+ "apihelp-emailuser-summary": "사용자에게 이메일을 보냅니다.",
+ "apihelp-emailuser-param-target": "이메일을 받을 사용자.",
+ "apihelp-emailuser-param-subject": "제목 헤더.",
+ "apihelp-emailuser-param-text": "메일 본문.",
+ "apihelp-emailuser-param-ccme": "자신에게 메일의 복사본을 보냅니다.",
+ "apihelp-emailuser-example-email": "<kbd>WikiSysop</kbd> 사용자에게 텍스트 <kbd>Content</kbd>로 이메일을 보냅니다.",
+ "apihelp-expandtemplates-summary": "위키텍스트 안에 모든 틀을 확장합니다.",
+ "apihelp-expandtemplates-param-title": "문서 제목",
+ "apihelp-expandtemplates-param-text": "변환할 위키텍스트.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "확장된 위키텍스트.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "입력값의 XML 파서 트리.",
+ "apihelp-expandtemplates-param-includecomments": "출력에 HTML 주석을 포함할 것인지의 여부.",
+ "apihelp-expandtemplates-param-generatexml": "XML 구문 분석 트리를 생성합니다. ($1prop=parsetree로 대체함)",
+ "apihelp-expandtemplates-example-simple": "위키텍스트 <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>를 확장합니다.",
+ "apihelp-feedcontributions-summary": "사용자 기여 피드를 반환합니다.",
+ "apihelp-feedcontributions-param-feedformat": "피드 포맷.",
+ "apihelp-feedcontributions-param-user": "기여를 읽을 사용자 이름.",
+ "apihelp-feedcontributions-param-namespace": "기여를 분류할 이름공간",
+ "apihelp-feedcontributions-param-year": "년부터 (혹은 그 이전).",
+ "apihelp-feedcontributions-param-month": "달부터 (혹은 그 이전).",
+ "apihelp-feedcontributions-param-deletedonly": "삭제된 기여만 봅니다.",
+ "apihelp-feedcontributions-param-toponly": "최신 판인 편집만 봅니다.",
+ "apihelp-feedcontributions-param-newonly": "새 글인 편집만 봅니다.",
+ "apihelp-feedcontributions-param-hideminor": "사소한 편집을 숨깁니다.",
+ "apihelp-feedcontributions-param-showsizediff": "판 사이의 크기 차이를 보여줍니다.",
+ "apihelp-feedrecentchanges-summary": "최근 바뀜 피드를 반환합니다.",
+ "apihelp-feedrecentchanges-param-feedformat": "피드 포맷.",
+ "apihelp-feedrecentchanges-param-namespace": "결과를 제한할 이름공간.",
+ "apihelp-feedrecentchanges-param-invert": "선택한 항목을 제외한 모든 이름공간.",
+ "apihelp-feedrecentchanges-param-associated": "관련 (토론 또는 일반) 이름공간을 포함합니다.",
+ "apihelp-feedrecentchanges-param-limit": "반환할 결과의 최대 수.",
+ "apihelp-feedrecentchanges-param-from": "이후의 변경사항을 보여줍니다.",
+ "apihelp-feedrecentchanges-param-hideminor": "사소한 편집을 숨깁니다.",
+ "apihelp-feedrecentchanges-param-hidebots": "봇의 편집을 숨깁니다.",
+ "apihelp-feedrecentchanges-param-hideanons": "익명 사용자의 편집을 숨깁니다.",
+ "apihelp-feedrecentchanges-param-hideliu": "등록된 사용자의 편집을 숨깁니다.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "검토된 편집을 숨깁니다.",
+ "apihelp-feedrecentchanges-param-hidemyself": "현재 사용자가 변경한 사항을 숨깁니다.",
+ "apihelp-feedrecentchanges-param-tagfilter": "태그로 분류",
+ "apihelp-feedrecentchanges-example-simple": "최근 바뀜을 봅니다.",
+ "apihelp-feedrecentchanges-example-30days": "30일간의 최근 바뀜을 봅니다.",
+ "apihelp-feedwatchlist-summary": "주시문서 목록 피드를 반환합니다.",
+ "apihelp-feedwatchlist-param-feedformat": "피드 포맷.",
+ "apihelp-feedwatchlist-example-default": "주시문서 목록 피드를 보여줍니다.",
+ "apihelp-filerevert-summary": "파일을 이전 판으로 되돌립니다.",
+ "apihelp-filerevert-param-filename": "파일: 접두어가 없는 대상 파일 이름.",
+ "apihelp-filerevert-param-comment": "업로드 댓글입니다.",
+ "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd>를 <kbd>2011-03-05T15:27:40Z</kbd> 판으로 되돌립니다.",
+ "apihelp-help-summary": "지정된 모듈의 도움말을 표시합니다.",
+ "apihelp-help-param-modules": "(<var>action</var>, <var>format</var> 변수의 값 또는 <kbd>main</kbd>)에 대한 도움말을 표시하는 모듈입니다. <kbd>+</kbd>로 하위 모듈을 지정할 수 있습니다.",
+ "apihelp-help-param-submodules": "명명된 모듈의 하위 모듈의 도움말을 포함합니다.",
+ "apihelp-help-param-recursivesubmodules": "하위 모듈의 도움말을 반복하여 포함합니다.",
+ "apihelp-help-param-helpformat": "도움말 출력 포맷.",
+ "apihelp-help-param-wrap": "표준 API 응답 구조로 출력을 감쌉니다.",
+ "apihelp-help-param-toc": "HTML 출력에 목차를 포함합니다.",
+ "apihelp-help-example-main": "메인 모듈의 도움말입니다.",
+ "apihelp-help-example-recursive": "모든 도움말을 한 페이지로 모읍니다.",
+ "apihelp-help-example-help": "도움말 모듈 자체에 대한 도움말입니다.",
+ "apihelp-help-example-query": "2개의 쿼리 하위 모듈의 도움말입니다.",
+ "apihelp-imagerotate-summary": "하나 이상의 그림을 회전합니다.",
+ "apihelp-imagerotate-param-rotation": "시계 방향으로 회전할 그림의 각도.",
+ "apihelp-import-summary": "다른 위키나 XML 파일로부터 문서를 가져옵니다.",
+ "apihelp-import-param-xml": "업로드한 XML 파일.",
+ "apihelp-linkaccount-summary": "서드파티 제공자의 계정을 현재 사용자와 연결합니다.",
+ "apihelp-login-summary": "로그인한 다음 인증 쿠키를 가져옵니다.",
+ "apihelp-login-extended-description": "이 동작은 [[Special:BotPasswords|특수:BotPasswords]]와 함께 사용해야만 합니다. 주 계정 로그인을 위해 사용하는 것은 권장되지 않으며 경고 없이 실패할 수 있습니다. 주 계정에 안전하게 로그인하려면 <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>을 사용하십시오.",
+ "apihelp-login-param-name": "사용자 이름.",
+ "apihelp-login-param-password": "비밀번호.",
+ "apihelp-login-param-domain": "도메인 (선택).",
+ "apihelp-login-param-token": "처음 요청에서 로그인 토큰을 취득했습니다.",
+ "apihelp-login-example-gettoken": "로그인 토큰을 검색합니다.",
+ "apihelp-login-example-login": "로그인.",
+ "apihelp-logout-summary": "로그아웃하고 세션 데이터를 지웁니다.",
+ "apihelp-logout-example-logout": "현재 사용자를 로그아웃합니다.",
+ "apihelp-managetags-summary": "변경 태그에 관한 관리 작업을 수행합니다.",
+ "apihelp-mergehistory-summary": "문서 역사를 합칩니다.",
+ "apihelp-mergehistory-param-reason": "문서 병합 이유.",
+ "apihelp-move-summary": "문서 이동하기.",
+ "apihelp-move-param-reason": "제목을 변경하는 이유",
+ "apihelp-move-param-movetalk": "토론 문서가 존재한다면, 토론 문서도 이름을 변경해주세요.",
+ "apihelp-move-param-movesubpages": "하위 문서가 있다면, 하위 문서도 이름을 변경해주세요.",
+ "apihelp-move-param-noredirect": "넘겨주기 문서 만들지 않기",
+ "apihelp-move-param-watch": "현재 사용자의 주시 문서에 이 문서와 넘겨주기 문서를 추가하기",
+ "apihelp-move-param-unwatch": "현재 사용자의 주시 문서에 이 문서와 넘겨주기 문서를 제거하기",
+ "apihelp-move-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
+ "apihelp-move-param-ignorewarnings": "모든 경고 무시하기",
+ "apihelp-move-example-move": "<kbd>기존 제목</kbd>에서 <kbd>대상 제목</kbd>으로 넘겨주기를 만들지 않고 이동하기.",
+ "apihelp-opensearch-summary": "OpenSearch 프로토콜을 이용하여 위키를 검색합니다.",
+ "apihelp-opensearch-param-search": "문자열 검색",
+ "apihelp-opensearch-param-limit": "반환할 결과의 최대 수",
+ "apihelp-opensearch-param-namespace": "검색할 이름공간입니다. <var>$1search</var>이 유효한 이름공간 접두사로 시작하면 무시합니다.",
+ "apihelp-opensearch-param-suggest": "<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>이 거짓인 경우 아무 것도 하지 않습니다.",
+ "apihelp-opensearch-param-redirects": "넘겨주기 관리 방법:\n;return:넘겨주기 자체를 반환합니다.\n;resolve:대상 문서를 반환합니다. $1제한 미만의 결과를 반환할 수 있습니다.\n역사적인 이유로 기본값은 $1format=json의 경우 \"return\"이며, 그 밖의 포맷의 경우 \"resolve\"입니다.",
+ "apihelp-opensearch-param-format": "출력 포맷.",
+ "apihelp-opensearch-param-warningsaserror": "<kbd>format=json</kbd>을 사용 시 경고가 발생할 경우, 이를 무시하지 않고 API 오류를 반환합니다.",
+ "apihelp-opensearch-example-te": "<kbd>Te</kbd>로 시작하는 문서를 찾기.",
+ "apihelp-options-summary": "현재 사용자의 환경 설정을 변경합니다.",
+ "apihelp-options-extended-description": "핵심 확장 기능 기능이나 설치된 확장 기능 중 하나에 등록된 옵션 또는 <code>userjs-</code>(사용자 스크립트에 의해 사용됨)로 시작하는 키를 가진 옵션만 설정할 수 있습니다.",
+ "apihelp-options-param-reset": "사이트 기본값으로 환경 설정을 초기화합니다.",
+ "apihelp-options-param-resetkinds": "<var>$1reset</var> 옵션을 설정할 때 초기화할 옵션의 유형 목록입니다.",
+ "apihelp-options-param-optionname": "<var>$1optionvalue</var>에 의해 지정된 값으로 설정할 옵션의 이름입니다.",
+ "apihelp-options-param-optionvalue": "<var>$1optionname</var>에 의해 지정된 옵션의 값입니다.",
+ "apihelp-options-example-reset": "모든 환경 설정을 초기화합니다.",
+ "apihelp-options-example-change": "<kbd>skin</kbd>과 <kbd>hideminor</kbd> 환경 설정을 변경합니다.",
+ "apihelp-options-example-complex": "모든 환경 설정을 초기화하고 <kbd>skin</kbd>과 <kbd>nickname</kbd>을 설정합니다.",
+ "apihelp-paraminfo-summary": "API 모듈의 정보를 가져옵니다.",
+ "apihelp-paraminfo-param-helpformat": "도움말 문자열 포맷.",
+ "apihelp-parse-summary": "내용의 구문을 분석하고 파서 출력을 반환합니다.",
+ "apihelp-parse-param-summary": "구문 분석할 요약입니다.",
+ "apihelp-parse-paramvalue-prop-text": "위키텍스트의 구문 분석된 텍스트를 제공합니다.",
+ "apihelp-parse-paramvalue-prop-langlinks": "구문 분석된 위키텍스트의 언어 링크를 제공합니다.",
+ "apihelp-parse-paramvalue-prop-categories": "구문 분석된 위키텍스트의 분류를 제공합니다.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "분류의 HTML 버전을 제공합니다.",
+ "apihelp-parse-paramvalue-prop-links": "구문 분석된 위키텍스트의 내부 링크를 제공합니다.",
+ "apihelp-parse-paramvalue-prop-templates": "구문 분석된 위키텍스트의 틀을 제공합니다.",
+ "apihelp-parse-paramvalue-prop-images": "구문 분석된 위키텍스트의 그림을 제공합니다.",
+ "apihelp-parse-paramvalue-prop-externallinks": "구문 분석된 위키텍스트의 외부 링크를 제공합니다.",
+ "apihelp-parse-paramvalue-prop-sections": "구문 분석된 위키텍스트의 문단을 제공합니다.",
+ "apihelp-parse-paramvalue-prop-revid": "구문 분석된 페이지의 판 ID를 추가합니다.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "구문 분석된 위키텍스트의 제목을 추가합니다.",
+ "apihelp-parse-paramvalue-prop-headitems": "문서의 <code>&lt;head&gt;</code> 안에 넣을 항목을 제공합니다.",
+ "apihelp-parse-paramvalue-prop-headhtml": "문서의 구문 분석된 <code>&lt;head&gt;</code>를 제공합니다.",
+ "apihelp-parse-paramvalue-prop-modules": "문서에 사용되는 ResourceLoader 모듈을 제공합니다. 불러오려면, <code>mw.loader.using()</code>을 사용하세요. <kbd>jsconfigvars</kbd> 또는 <kbd>encodedjsconfigvars</kbd>는 <kbd>modules</kbd>와 함께 요청해야 합니다.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "문서에 특화된 자바스크립트 구성 변수를 제공합니다. 적용하려면 <code>mw.config.set()</code>을 사용하세요.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "구문 분석된 위키텍스트의 인터위키 링크를 제공합니다.",
+ "apihelp-parse-paramvalue-prop-wikitext": "구문 분석된 위키텍스트 원문을 제공합니다.",
+ "apihelp-parse-paramvalue-prop-properties": "구문 분석된 위키텍스트에 정의된 다양한 속성을 제공합니다.",
+ "apihelp-parse-param-pst": "구문 분석 이전에 입력에 대한 사전 저장 변환을 수행합니다. 텍스트로 사용할 때에만 유효합니다.",
+ "apihelp-parse-param-disablelimitreport": "파서 출력에서 제한 보고서(\"NewPP limit report\")를 제외합니다.",
+ "apihelp-parse-param-disablepp": "<var>$1disablelimitreport</var>를 대신 사용합니다.",
+ "apihelp-parse-param-disableeditsection": "파서 출력에서 문단 편집 링크를 제외합니다.",
+ "apihelp-parse-param-disabletidy": "파서 출력에서 HTML 정리(예: tidy)를 수행하지 않습니다.",
+ "apihelp-parse-param-preview": "미리 보기 모드에서 구문 분석을 합니다.",
+ "apihelp-parse-param-sectionpreview": "문단 미리 보기 모드에서 구문 분석을 합니다. (미리 보기 모드도 활성화함)",
+ "apihelp-parse-param-disabletoc": "출력에서 목차를 제외합니다.",
+ "apihelp-parse-param-useskin": "선택한 스킨을 파서 출력에 적용합니다. 다음의 속성에 영향을 줄 수 있습니다: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-example-page": "페이지의 구문을 분석합니다.",
+ "apihelp-parse-example-text": "위키텍스트의 구문을 분석합니다.",
+ "apihelp-parse-example-summary": "요약을 구문 분석합니다.",
+ "apihelp-patrol-summary": "문서나 판을 점검하기.",
+ "apihelp-patrol-param-rcid": "점검할 최근 바뀜 ID입니다.",
+ "apihelp-patrol-param-revid": "점검할 판 ID입니다.",
+ "apihelp-patrol-example-rcid": "최근의 변경사항을 점검합니다.",
+ "apihelp-patrol-example-revid": "판을 점검합니다.",
+ "apihelp-protect-summary": "문서의 보호 수준을 변경합니다.",
+ "apihelp-protect-param-reason": "보호 또는 보호 해제의 이유.",
+ "apihelp-protect-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
+ "apihelp-protect-example-protect": "문서 보호",
+ "apihelp-purge-summary": "주어진 제목을 위한 캐시를 새로 고침.",
+ "apihelp-purge-param-forcelinkupdate": "링크 테이블을 업데이트합니다.",
+ "apihelp-purge-example-simple": "<kbd>Main Page</kbd>와 <kbd>API</kbd> 문서를 새로 고침.",
+ "apihelp-query-summary": "미디어위키의 데이터 및 정보를 가져옵니다.",
+ "apihelp-query-param-prop": "조회된 페이지에 대해 가져올 속성입니다.",
+ "apihelp-query-param-list": "가져올 목록입니다.",
+ "apihelp-query-param-meta": "가져올 메타데이터입니다.",
+ "apihelp-query-param-indexpageids": "반환된 모든 페이지 ID를 나열하는 부가적인 페이지 ID 섹션을 포함합니다.",
+ "apihelp-query-param-export": "기존의 페이지나 생성된 페이지들 전체의 현재 판들을 내보냅니다.",
+ "apihelp-query-param-exportnowrap": "XML 결과물로 래핑하지 않고 엑스포트 XML을 반환합니다. $1export와만 같이 사용할 수 있습니다.",
+ "apihelp-query-param-iwurl": "제목이 인터위키 링크인 경우 전체 URL을 가져올지의 여부입니다.",
+ "apihelp-query-param-rawcontinue": "계속하기 위해 순수 <samp>query-continue</samp> 데이터를 반환합니다.",
+ "apihelp-query+allcategories-summary": "모든 분류를 열거합니다.",
+ "apihelp-query+allcategories-param-prefix": "이 값으로 시작하는 모든 분류 제목을 검색합니다.",
+ "apihelp-query+allcategories-param-dir": "정렬 방향.",
+ "apihelp-query+allcategories-param-limit": "반환할 분류의 갯수입니다.",
+ "apihelp-query+allcategories-param-prop": "얻고자 하는 속성:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "페이지 수를 분류에 추가합니다.",
+ "apihelp-query+alldeletedrevisions-summary": "사용자에 의해서나 이름공간 안에서 삭제된 모든 판을 나열합니다.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var>와 함께 사용할 수 없습니다.",
+ "apihelp-query+alldeletedrevisions-param-from": "이 제목부터 목록을 보이기.",
+ "apihelp-query+alldeletedrevisions-param-to": "이 제목까지 목록을 보이기.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "이 값으로 시작하는 모든 문서 제목을 검색합니다.",
+ "apihelp-query+alldeletedrevisions-param-tag": "이 태그로 태그된 판만을 나열합니다.",
+ "apihelp-query+alldeletedrevisions-param-user": "이 사용자에 대한 판만 나열합니다.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "이 사용자에 대한 판을 나열하지 않습니다.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "이 이름공간의 문서만 나열합니다.",
+ "apihelp-query+alldeletedrevisions-example-user": "<kbd>Example</kbd>님의 최근 50개의 삭제된 기여를 나열합니다.",
+ "apihelp-query+allfileusages-summary": "존재하지 않는 것을 포함하여 파일을 사용하는 모든 문서를 나열합니다.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "파일의 제목을 추가합니다.",
+ "apihelp-query+allfileusages-param-limit": "반환할 총 항목 수입니다.",
+ "apihelp-query+allfileusages-example-unique": "고유한 파일 제목을 나열합니다.",
+ "apihelp-query+allfileusages-example-unique-generator": "모든 파일 제목을 가져오되, 존재하지 않는 항목을 표시합니다.",
+ "apihelp-query+allfileusages-example-generator": "파일을 포함하는 문서를 가져옵니다.",
+ "apihelp-query+allimages-summary": "모든 그림을 순차적으로 열거합니다.",
+ "apihelp-query+allimages-example-recent": "최근 업로드된 파일을 보여줍니다. [[Special:NewFiles]]와 유사합니다.",
+ "apihelp-query+alllinks-summary": "제시된 이름공간을 가리키는 모든 링크를 열거합니다.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "링크의 제목을 추가합니다.",
+ "apihelp-query+alllinks-param-namespace": "열거할 이름공간.",
+ "apihelp-query+alllinks-param-limit": "반환할 총 항목 수입니다.",
+ "apihelp-query+allmessages-summary": "이 사이트에서 반환할 메시지.",
+ "apihelp-query+allmessages-example-ipb": "<kbd>ipb-</kbd>로 시작하는 메시지를 보입니다.",
+ "apihelp-query+allpages-summary": "제시된 이름공간의 모든 문서를 순서대로 열거합니다.",
+ "apihelp-query+allpages-param-namespace": "열거할 이름공간.",
+ "apihelp-query+allredirects-summary": "이름공간의 모든 넘겨주기를 나열합니다.",
+ "apihelp-query+allredirects-paramvalue-prop-title": "넘겨주기의 제목을 추가합니다.",
+ "apihelp-query+allredirects-param-namespace": "열거할 이름공간.",
+ "apihelp-query+allredirects-param-limit": "반환할 총 항목 수입니다.",
+ "apihelp-query+allrevisions-summary": "모든 판 표시.",
+ "apihelp-query+mystashedfiles-param-limit": "가져올 파일의 갯수.",
+ "apihelp-query+alltransclusions-summary": "존재하지 않는 문서를 포함하여 끼워넣은 모든 문서(&#123;&#123;x&#125;&#125;를 사용하여 끼워넣은 문서)를 나열합니다.",
+ "apihelp-query+alltransclusions-param-prop": "포함할 정보:",
+ "apihelp-query+alltransclusions-param-namespace": "열거할 이름공간.",
+ "apihelp-query+alltransclusions-param-limit": "반환할 총 항목 수입니다.",
+ "apihelp-query+allusers-summary": "등록된 모든 사용자를 열거합니다.",
+ "apihelp-query+allusers-param-dir": "정렬 방향.",
+ "apihelp-query+allusers-param-prop": "포함할 정보:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "현재 차단된 사용자의 정보를 추가함.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "사용자의 편집 수를 추가합니다.",
+ "apihelp-query+allusers-param-witheditsonly": "편집을 한 사용자만 나열합니다.",
+ "apihelp-query+allusers-example-Y": "<kbd>Y</kbd>로 시작하는 사용자를 나열합니다.",
+ "apihelp-query+authmanagerinfo-summary": "현재의 인증 상태에 대한 정보를 검색합니다.",
+ "apihelp-query+backlinks-summary": "제시된 문서에 연결된 모든 문서를 찾습니다.",
+ "apihelp-query+backlinks-param-namespace": "열거할 이름공간.",
+ "apihelp-query+backlinks-example-simple": "<kbd>Main Page</kbd>를 가리키는 링크를 보이기.",
+ "apihelp-query+backlinks-example-generator": "<kbd>Main Page</kbd>를 가리키는 문서의 정보를 보기.",
+ "apihelp-query+blocks-summary": "차단된 모든 사용자와 IP 주소를 나열합니다.",
+ "apihelp-query+blocks-param-start": "나열을 시작할 타임스탬프",
+ "apihelp-query+blocks-param-end": "나열을 끝낼 타임스탬프",
+ "apihelp-query+blocks-param-ids": "나열할 차단 ID 목록 (선택 사항).",
+ "apihelp-query+blocks-param-users": "검색할 사용자 목록 (선택 사항).",
+ "apihelp-query+blocks-param-prop": "얻고자 하는 속성:",
+ "apihelp-query+blocks-paramvalue-prop-id": "블록의 ID를 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-user": "차단된 사용자의 사용자 이름을 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "차단된 사용자의 사용자 ID를 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-by": "차단을 수행하는 사용자의 사용자 이름을 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "차단을 수행하는 사용자의 사용자 ID를 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "차단된 시점의 타임스탬프를 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "차단 만료 시점의 타임스탬프를 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "차단 이유를 추가합니다.",
+ "apihelp-query+blocks-paramvalue-prop-range": "차단에 영향을 받는 IP 주소 대역을 추가합니다.",
+ "apihelp-query+categories-summary": "문서가 속하는 모든 분류를 나열합니다.",
+ "apihelp-query+categories-param-limit": "반환할 분류의 갯수입니다.",
+ "apihelp-query+categoryinfo-summary": "제시된 분류의 정보를 반환합니다.",
+ "apihelp-query+categorymembers-summary": "제시된 분류의 모든 문서를 나열합니다.",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "페이지 ID를 추가합니다.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "문서의 제목과 이름공간 ID를 추가합니다.",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "문서가 포함된 시기의 타임스탬프를 추가합니다.",
+ "apihelp-query+categorymembers-param-limit": "반환할 문서의 최대 수입니다.",
+ "apihelp-query+categorymembers-param-startsortkey": "$1starthexsortkey를 대신 사용해 주십시오.",
+ "apihelp-query+categorymembers-param-endsortkey": "$1endhexsortkey를 대신 사용해 주십시오.",
+ "apihelp-query+contributors-summary": "문서에 대해 로그인한 기여자의 목록과 익명 기여자의 수를 가져옵니다.",
+ "apihelp-query+deletedrevisions-summary": "삭제된 판 정보를 가져옵니다.",
+ "apihelp-query+deletedrevs-summary": "삭제된 판을 나열합니다.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|모드|모드}}: $2",
+ "apihelp-query+deletedrevs-param-start": "나열을 시작할 타임스탬프",
+ "apihelp-query+deletedrevs-param-end": "나열을 끝낼 타임스탬프",
+ "apihelp-query+deletedrevs-param-limit": "나열할 판의 최대 양.",
+ "apihelp-query+disabled-summary": "이 쿼리 모듈은 비활성화되었습니다.",
+ "apihelp-query+duplicatefiles-summary": "해시 값 기반으로 주어진 파일들 중 중복된 모든 파일을 나열합니다.",
+ "apihelp-query+duplicatefiles-param-limit": "반환할 중복 파일의 수.",
+ "apihelp-query+embeddedin-summary": "제시된 문서를 끼워넣은 모든 문서를 찾습니다.",
+ "apihelp-query+embeddedin-param-namespace": "열거할 이름공간.",
+ "apihelp-query+extlinks-summary": "제시된 문서의 모든 외부 URL(인터위키 아님)을 반환합니다.",
+ "apihelp-query+extlinks-param-limit": "반환할 링크의 수.",
+ "apihelp-query+exturlusage-summary": "제시된 URL을 포함하는 문서를 열거합니다.",
+ "apihelp-query+exturlusage-param-prop": "포함할 정보:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "문서의 ID를 추가합니다.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "문서의 제목과 이름공간 ID를 추가합니다.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "문서에 사용된 URL을 추가합니다.",
+ "apihelp-query+exturlusage-param-namespace": "열거할 문서 이름공간.",
+ "apihelp-query+exturlusage-param-limit": "반환할 문서 수.",
+ "apihelp-query+exturlusage-example-simple": "<kbd>https://www.mediawiki.org</kbd>를 가리키는 문서를 표시합니다.",
+ "apihelp-query+filearchive-summary": "삭제된 모든 파일을 순서대로 열거합니다.",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "그림에 대한 SHA-1 해시를 추가합니다.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "그림 판을 올린 사용자를 추가합니다.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "그림 판의 설명을 추가합니다.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "그림의 MIME를 추가합니다.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "그림의 미디어 유형을 추가합니다.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "그림의 버전에 대한 Exif 메타데이터를 나열합니다.",
+ "apihelp-query+filearchive-example-simple": "삭제된 모든 파일의 목록을 표시합니다.",
+ "apihelp-query+filerepoinfo-summary": "위키에 구성된 그림 저장소에 대한 메타 정보를 반환합니다.",
+ "apihelp-query+filerepoinfo-example-simple": "파일 저장소의 정보를 가져옵니다.",
+ "apihelp-query+fileusage-summary": "제시된 파일을 사용하는 모든 문서를 찾습니다.",
+ "apihelp-query+fileusage-param-prop": "얻고자 하는 속성:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "각 문서의 페이지 ID.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "각 문서의 제목.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "문서가 넘겨주기이면 표시합니다.",
+ "apihelp-query+fileusage-param-namespace": "이 이름공간의 문서만 포함합니다.",
+ "apihelp-query+fileusage-param-limit": "반환할 항목 수.",
+ "apihelp-query+fileusage-param-show": "이 기준을 충족하는 항목만 표시합니다:\n;redirect:넘겨주기만 표시합니다.\n;!redirect:넘겨주기가 아닌 항목만 표시합니다.",
+ "apihelp-query+imageinfo-summary": "파일 정보와 업로드 역사를 반환합니다.",
+ "apihelp-query+imageinfo-param-prop": "가져올 파일 정보입니다:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "업로드된 판에 대한 타임스탬프를 추가합니다.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "판의 설명을 구문 분석합니다.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "파일에 대한 SHA-1 해시를 추가합니다.",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "파일의 미디어 유형을 추가합니다.",
+ "apihelp-query+imageinfo-param-urlheight": "$1urlwidth와 유사합니다.",
+ "apihelp-query+imageinfo-example-simple": "[[:File:Albert Einstein Head.jpg]]의 현재 판에 대한 정보를 가져옵니다.",
+ "apihelp-query+imageinfo-example-dated": "2008년 및 그 이후의 [[:File:Test.jpg]]의 판에 대한 정보를 가져옵니다.",
+ "apihelp-query+images-summary": "제시된 문서에 포함된 모든 파일을 반환합니다.",
+ "apihelp-query+images-param-limit": "반환할 파일 수.",
+ "apihelp-query+images-example-simple": "[[Main Page|대문]]에 사용된 파일 목록을 가져옵니다.",
+ "apihelp-query+images-example-generator": "[[Main Page|대문]]에 사용된 모든 파일에 관한 정보를 가져옵니다.",
+ "apihelp-query+imageusage-summary": "제시된 그림 제목을 사용하는 모든 문서를 찾습니다.",
+ "apihelp-query+imageusage-param-namespace": "열거할 이름공간.",
+ "apihelp-query+imageusage-example-generator": "[[:File:Albert Einstein Head.jpg]]를 이용하여 페이지의 정보를 가져옵니다.",
+ "apihelp-query+info-summary": "기본 페이지 정보를 가져옵니다.",
+ "apihelp-query+info-param-prop": "얻고자 하는 추가 속성:",
+ "apihelp-query+info-paramvalue-prop-protection": "각 문서의 보호 수준을 나열합니다.",
+ "apihelp-query+info-paramvalue-prop-readable": "사용자가 이 문서를 읽을 수 있는지의 여부.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "모든 종류의 사이트 내용 언어의 표시 제목을 지정합니다.",
+ "apihelp-query+iwbacklinks-summary": "제시된 인터위키 링크에 연결된 모든 문서를 찾습니다.",
+ "apihelp-query+iwbacklinks-param-prefix": "인터위키의 접두사.",
+ "apihelp-query+iwbacklinks-param-title": "검색할 인터위키 링크. <var>$1blprefix</var>와 함께 사용해야 합니다.",
+ "apihelp-query+iwbacklinks-param-limit": "반활한 총 문서 수.",
+ "apihelp-query+iwbacklinks-param-prop": "얻고자 하는 속성:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "인터위키의 접두사를 추가합니다.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "인터위키의 제목을 추가합니다.",
+ "apihelp-query+iwlinks-summary": "제시된 문서의 모든 인터위키 링크를 반환합니다.",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "전체 URL을 추가합니다.",
+ "apihelp-query+langbacklinks-summary": "제시된 언어 링크에 연결된 모든 문서를 찾습니다.",
+ "apihelp-query+langbacklinks-param-lang": "언어 링크의 언어.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "언어 링크의 언어 코드를 추가합니다.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "언어 링크의 제목을 추가합니다.",
+ "apihelp-query+langlinks-summary": "제시된 문서의 모든 언어 간 링크를 반환합니다.",
+ "apihelp-query+langlinks-paramvalue-prop-url": "전체 URL을 추가합니다.",
+ "apihelp-query+langlinks-param-lang": "이 언어 코드의 언어 링크만 반환합니다.",
+ "apihelp-query+links-summary": "제시된 문서의 모든 링크를 반환합니다.",
+ "apihelp-query+linkshere-summary": "제시된 문서에 연결된 모든 문서를 찾습니다.",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "각 문서의 페이지 ID.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "각 문서의 제목.",
+ "apihelp-query+linkshere-param-namespace": "이 이름공간의 문서만 포함합니다.",
+ "apihelp-query+linkshere-param-limit": "반환할 항목 수.",
+ "apihelp-query+linkshere-param-show": "이 기준을 충족하는 항목만 표시합니다:\n;redirect:넘겨주기만 표시합니다.\n;!redirect:넘겨주기가 아닌 항목만 표시합니다.",
+ "apihelp-query+logevents-summary": "기록에서 이벤트를 가져옵니다.",
+ "apihelp-query+logevents-paramvalue-prop-ids": "로그 이벤트의 ID를 추가합니다.",
+ "apihelp-query+logevents-paramvalue-prop-type": "로그 이벤트의 유형을 추가합니다.",
+ "apihelp-query+pagepropnames-summary": "위키에서 사용 중인 모든 문서 속성 이름을 나열합니다.",
+ "apihelp-query+pagepropnames-param-limit": "반환할 이름의 최대 수.",
+ "apihelp-query+pageprops-summary": "문서 내용에 정의된 다양한 문서 속성을 가져옵니다.",
+ "apihelp-query+pageswithprop-summary": "제시된 문서 속성을 사용하는 모든 문서를 나열합니다.",
+ "apihelp-query+pageswithprop-param-prop": "포함할 정보:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "페이지 ID를 추가합니다.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "문서의 제목과 이름공간 ID를 추가합니다.",
+ "apihelp-query+pageswithprop-param-limit": "나타낼 문서의 최대 수입니다.",
+ "apihelp-query+pageswithprop-param-dir": "정렬 순서",
+ "apihelp-query+prefixsearch-summary": "문서 제목에 대해 두문자 검색을 수행합니다.",
+ "apihelp-query+prefixsearch-param-search": "문자열 검색",
+ "apihelp-query+prefixsearch-param-namespace": "검색할 이름공간입니다. <var>$1search</var>이 유효한 이름공간 접두사로 시작하면 무시합니다.",
+ "apihelp-query+prefixsearch-param-limit": "반환할 결과의 최대 수",
+ "apihelp-query+prefixsearch-param-profile": "검색 프로파일 사용",
+ "apihelp-query+protectedtitles-summary": "작성이 보호된 모든 제목을 나열합니다.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "보호 수준을 추가합니다.",
+ "apihelp-query+querypage-summary": "QueryPage 기반 특수 문서가 제공하는 목록을 가져옵니다.",
+ "apihelp-query+querypage-example-ancientpages": "[[Special:Ancientpages|특수:오래된문서]]에서 결과를 반환합니다.",
+ "apihelp-query+random-summary": "임의 문서 집합을 가져옵니다.",
+ "apihelp-query+recentchanges-summary": "최근 바뀜을 열거합니다.",
+ "apihelp-query+recentchanges-param-prop": "추가 정보를 포함합니다:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "편집에 임할 사용자를 추가하고 IP인 경우 태그합니다.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "편집에 임할 사용자를 추가합니다.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "편집에 대한 플래그를 추가합니다.",
+ "apihelp-query+redirects-summary": "제시된 문서의 모든 넘겨주기를 반환합니다.",
+ "apihelp-query+revisions-summary": "판 정보를 가져옵니다.",
+ "apihelp-query+revisions-param-startid": "이 판의 타임스탬프에서 열거를 시작합니다. 이 판은 존재해야 하지만 이 문서에 속할 필요는 없습니다.",
+ "apihelp-query+revisions-param-endid": "이 판의 타임스탬프에서 열거를 중단합니다. 이 판은 존재해야 하지만 이 문서에 속할 필요는 없습니다.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "판의 길이. (바이트)",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "판의 SHA-1 (base 16).",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "판의 콘텐츠 모델 ID.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "판의 텍스트.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "판의 태그.",
+ "apihelp-query+revisions+base-param-parse": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>를 대신 사용합니다. 판 내용의 구문을 분석합니다. ($1prop=content 필요) 성능 상의 이유로 이 옵션을 사용할 경우 $1limit은 1로 강제됩니다.",
+ "apihelp-query+search-summary": "전문 검색을 수행합니다.",
+ "apihelp-query+search-param-qiprofile": "쿼리 독립적인 프로파일 사용(순위 알고리즘에 영향있음)",
+ "apihelp-query+search-paramvalue-prop-size": "바이트 단위로 문서의 크기를 추가합니다.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "문서의 낱말 수를 추가합니다.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "문서가 마지막으로 편집된 시기의 타임스탬프를 추가합니다.",
+ "apihelp-query+search-paramvalue-prop-score": "무시됨.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "무시됨.",
+ "apihelp-query+search-example-simple": "<kbd>meaning</kbd>을 검색합니다.",
+ "apihelp-query+search-example-text": "<kbd>meaning</kbd>의 텍스트를 검색합니다.",
+ "apihelp-query+siteinfo-summary": "사이트의 전반적인 정보를 반환합니다.",
+ "apihelp-query+siteinfo-param-prop": "가져올 정보:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "전반적인 시스템 정보입니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "등록된 이름공간 및 기본 이름의 목록입니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "등록된 이름공간 별칭의 목록입니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "특수 문서의 별칭 목록입니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "매직 워드와 별칭의 목록입니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "사이트 통계를 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "인터위키 맵을 반환합니다. (<var>$1inlanguagecode</var>를 사용하여 필터링 및 지역화 선택 가능)",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "반복 지연이 가장 높은 데이터베이스 서버를 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "사용자 그룹 및 관련 권한을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "위키에 설치된 라이브러리를 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "위키에 설치된 확장 기능을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "업로드가 허용된 파일 확장자(파일 종류)의 목록을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "이용 가능한 경우 위키 권한 (라이선스) 정보를 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "이용 가능한 제한 (보호) 종류의 정보를 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "미디어위키가 지원하는 언어 목록을 반환합니다. (<var>$1inlanguagecode</var>를 사용하여 지역화 선택 가능)",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "사용 중인 모든 스킨의 목록을 반환합니다. (<var>$1inlanguagecode</var>를 사용하여 지역화 선택이 가능하며, 이를 사용하지 않으면 본문의 언어를 사용함)",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "파서 확장 태그의 목록을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "파서 함수 훅의 목록을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "예약된 모든 훅(<var>[[mw:Manual:$wgHooks|$wgHooks]]</var>의 내용)의 목록을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "변수 ID의 목록을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "외부 링크에 허용된 프로토콜의 목록을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "사용자 환경 설정의 기본값을 반환합니다.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "업로드 대화 상자 구성을 반환합니다.",
+ "apihelp-query+siteinfo-param-filteriw": "인터위키 맵의 로컬 또는 로컬이 아닌 항목만 반환합니다.",
+ "apihelp-query+siteinfo-param-showalldb": "가장 지연이 심한 서버뿐 아니라, 모든 데이터베이스 서버를 나열합니다.",
+ "apihelp-query+siteinfo-param-numberingroup": "사용자 그룹의 사용자 수를 나열합니다.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "지역화된 언어 이름 (가능한 경우) 및 스킨 이름의 언어 코드입니다.",
+ "apihelp-query+siteinfo-example-simple": "사이트 정보를 가져옵니다.",
+ "apihelp-query+siteinfo-example-interwiki": "로컬 인터위키 접두사 목록을 가져옵니다.",
+ "apihelp-query+siteinfo-example-replag": "현재의 반복 지연을 검사합니다.",
+ "apihelp-query+tags-param-limit": "나열할 태그의 최대 수.",
+ "apihelp-query+tags-paramvalue-prop-name": "태그의 이름을 추가합니다.",
+ "apihelp-query+tags-paramvalue-prop-description": "태그의 설명을 추가합니다.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "판의 수와 이 판을 가진 로그 엔트리를 추가합니다.",
+ "apihelp-query+templates-summary": "제시된 문서에 끼워넣은 모든 문서를 반환합니다.",
+ "apihelp-query+templates-param-namespace": "이 이름공간에 속한 틀만 표시합니다.",
+ "apihelp-query+templates-param-limit": "반환할 틀 수.",
+ "apihelp-query+tokens-param-type": "요청할 토큰의 종류.",
+ "apihelp-query+tokens-example-simple": "csrf 토큰을 가져옵니다. (기본값)",
+ "apihelp-query+transcludedin-summary": "제시된 문서를 끼워넣은 모든 문서를 찾습니다.",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "각 문서의 페이지 ID.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "각 문서의 제목.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "문서가 넘겨주기이면 표시합니다.",
+ "apihelp-query+transcludedin-param-namespace": "이 이름공간의 문서만 포함합니다.",
+ "apihelp-query+transcludedin-param-limit": "반환할 항목 수.",
+ "apihelp-query+transcludedin-param-show": "이 기준을 충족하는 항목만 표시합니다:\n;redirect:넘겨주기만 표시합니다.\n;!redirect:넘겨주기가 아닌 항목만 표시합니다.",
+ "apihelp-query+usercontribs-summary": "한 사용자의 모든 편집을 가져옵니다.",
+ "apihelp-query+usercontribs-param-limit": "반환할 기여의 최대 수.",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "페이지 ID와 판 ID를 추가합니다.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "문서의 제목과 이름공간 ID를 추가합니다.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "편집의 타임스탬프를 추가합니다.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "편집의 새로운 크기를 추가합니다.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "편집의 플래그를 추가합니다.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "점검한 편집을 태그합니다.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "편집의 태그를 나열합니다.",
+ "apihelp-query+usercontribs-param-tag": "이 태그로 태그된 판만을 나열합니다.",
+ "apihelp-query+usercontribs-param-toponly": "최신 판인 변경 사항만 나열합니다.",
+ "apihelp-query+usercontribs-example-user": "사용자 <kbd>Example</kbd>의 기여를 표시합니다.",
+ "apihelp-query+usercontribs-example-ipprefix": "<kbd>192.0.2.</kbd>로 시작하는 모든 IP 주소의 기여를 표시합니다.",
+ "apihelp-query+userinfo-summary": "현재 사용자의 정보를 가져옵니다.",
+ "apihelp-query+userinfo-param-prop": "포함할 정보:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "현재 사용자가 차단되면 누구에 의해 무슨 이유로 차단되었는지 태그합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "현재 사용자가 대기 중인 메시지가 있다면 <samp>messages</samp> 태그를 추가합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "현재 사용자가 소속된 모든 그룹을 나열합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "현재 사용자가 자동으로 소속된 모든 그룹을 나열합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "현재 사용자가 가진 모든 권한을 나열합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "현재 사용자가 추가 및 제거할 수 있는 그룹을 나열합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "현재 사용자가 설정한 모든 설정을 나열합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "현재의 사용자 환경 설정을 변경하기 위한 토큰을 가져옵니다.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "현재 사용자의 편집 수를 추가합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "사용자의 실명을 추가합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "사용자의 이메일 주소와 이메일 인증 날짜를 추가합니다.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "사용자의 등록 날짜를 추가합니다.",
+ "apihelp-query+userinfo-example-simple": "현재 사용자의 정보를 가져옵니다.",
+ "apihelp-query+userinfo-example-data": "현재 사용자의 추가 정보를 가져옵니다.",
+ "apihelp-query+users-summary": "사용자 목록에 대한 정보를 가져옵니다.",
+ "apihelp-query+users-param-prop": "포함할 정보:",
+ "apihelp-query+users-paramvalue-prop-editcount": "사용자의 편집 수를 추가합니다.",
+ "apihelp-query+users-paramvalue-prop-registration": "사용자의 등록 타임스탬프를 추가합니다.",
+ "apihelp-query+users-param-userids": "정보를 가져올 사용자 ID의 목록입니다.",
+ "apihelp-query+users-param-token": "<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>을 대신 사용하십시오.",
+ "apihelp-query+users-example-simple": "사용자 <kbd>Example</kbd>의 정보를 반환합니다.",
+ "apihelp-query+watchlist-summary": "현재 사용자의 주시목록의 문서의 최근 바뀜을 가져옵니다.",
+ "apihelp-query+watchlist-param-user": "이 사용자의 변경 사항만 나열합니다.",
+ "apihelp-query+watchlist-param-excludeuser": "이 사용자의 변경사항을 나열하지 않습니다.",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "판 ID와 페이지 ID를 추가합니다.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "문서의 제목을 추가합니다.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "편집에 대한 플래그를 추가합니다.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "적절한 곳에 로그 정보를 추가합니다.",
+ "apihelp-query+watchlistraw-summary": "현재 사용자의 주시문서 목록의 모든 문서를 가져옵니다.",
+ "apihelp-removeauthenticationdata-summary": "현재 사용자의 인증 데이터를 제거합니다.",
+ "apihelp-resetpassword-summary": "비밀번호 재설정 이메일을 사용자에게 보냅니다.",
+ "apihelp-resetpassword-param-user": "재설정할 사용자입니다.",
+ "apihelp-resetpassword-param-email": "재설정할 사용자의 이메일 주소입니다.",
+ "apihelp-resetpassword-example-user": "사용자 <kbd>Example</kbd>에게 비밀번호 재설정 이메일을 보냅니다.",
+ "apihelp-resetpassword-example-email": "<kbd>user@example.com</kbd> 이메일 주소를 가진 모든 사용자에 대해 비밀번호 재설정 이메일을 보냅니다.",
+ "apihelp-revisiondelete-summary": "판을 삭제하거나 되살립니다.",
+ "apihelp-revisiondelete-param-reason": "삭제 또는 복구 이유.",
+ "apihelp-rollback-summary": "문서의 마지막 편집을 취소합니다.",
+ "apihelp-rollback-param-tags": "되돌리기를 적용하기 위해 태그합니다.",
+ "apihelp-rollback-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
+ "apihelp-rollback-example-simple": "<kbd>Project:대문</kbd> 문서의 <kbd>예시</kbd>의 마지막 판을 되돌리기",
+ "apihelp-rsd-summary": "RSD (Really Simple Discovery) 스키마를 내보냅니다.",
+ "apihelp-setnotificationtimestamp-summary": "주시 중인 문서의 알림 타임스탬프를 업데이트합니다.",
+ "apihelp-setpagelanguage-summary": "문서의 언어를 변경합니다.",
+ "apihelp-setpagelanguage-extended-description-disabled": "이 위키에서 문서의 언어 변경은 허용되지 않습니다.\n\n이 동작을 사용하려면 <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>을 활성화하십시오.",
+ "apihelp-setpagelanguage-param-title": "언어를 변경하려는 문서의 제목입니다. <var>$1pageid</var>와 함께 사용할 수 없습니다.",
+ "apihelp-setpagelanguage-param-pageid": "언어를 변경하려는 문서의 ID입니다. <var>$1title</var>과 함께 사용할 수 없습니다.",
+ "apihelp-setpagelanguage-param-lang": "문서를 변경할 언어의 언어 코드입니다. 문서를 위키의 기본 콘텐츠 언어로 재설정하려면 <kbd>default</kbd>를 사용하십시오.",
+ "apihelp-setpagelanguage-param-reason": "변경 이유.",
+ "apihelp-setpagelanguage-example-language": "<kbd>Main Page</kbd>의 언어를 바스크어로 변경합니다.",
+ "apihelp-stashedit-summary": "공유된 캐시에서 편집을 준비합니다.",
+ "apihelp-stashedit-param-sectiontitle": "새 문단을 위한 제목.",
+ "apihelp-stashedit-param-text": "문서 내용.",
+ "apihelp-stashedit-param-contentmodel": "새 콘텐츠의 콘텐츠 모델.",
+ "apihelp-tag-summary": "개별 판이나 기록 항목에서 변경 태그를 추가하거나 제거합니다.",
+ "apihelp-tag-param-rcid": "태그를 변경하거나 추가할 하나 이상의 최근 바뀜 ID입니다.",
+ "apihelp-tag-param-revid": "태그를 추가하거나 제거할 하나 이상의 판 ID입니다.",
+ "apihelp-tag-param-logid": "태그를 추가하거나 제거할 하나 이상의 기록 항목 ID입니다.",
+ "apihelp-tag-param-add": "추가할 태그입니다. 수동으로 지정한 태그만 추가할 수 있습니다.",
+ "apihelp-tag-param-remove": "제거할 태그입니다. 수동으로 지정하거나 완전히 정의되지 않은 태그만 제거할 수 있습니다.",
+ "apihelp-tag-param-reason": "변경 이유.",
+ "apihelp-tag-param-tags": "이 동작의 결과로 생성되는 기록 항목에 적용할 태그입니다.",
+ "apihelp-tag-example-rev": "이유를 지정하지 않고 <kbd>vandalism</kbd> 태그를 판 ID 123에 추가합니다",
+ "apihelp-tag-example-log": "이유를 <kbd>Wrongly applied</kbd>로 지정하고 기록 항목 ID 123에서 <kbd>spam</kbd> 태그를 제거합니다",
+ "apihelp-tokens-summary": "데이터 수정 작업을 위해 토큰을 가져옵니다.",
+ "apihelp-tokens-extended-description": "이 모듈은 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]의 선호에 따라 사용이 권장되지 않습니다.",
+ "apihelp-tokens-param-type": "요청할 토큰의 종류.",
+ "apihelp-tokens-example-edit": "편집 토큰을 검색합니다. (기본값)",
+ "apihelp-tokens-example-emailmove": "편집 토큰과 이동 토큰을 검색합니다.",
+ "apihelp-unblock-summary": "사용자를 차단 해제합니다.",
+ "apihelp-unblock-param-id": "차단을 해제할 차단 ID입니다. (<kbd>list=blocks</kbd>를 통해 가져옴) <var>$1user</var> 또는 <var>$1userid</var>와 함께 사용할 수 없습니다.",
+ "apihelp-unblock-param-user": "차단을 해제할 사용자 이름, IP 주소, IP 주소 대역입니다. <var>$1id</var> 또는 <var>$1userid</var>와(과) 함께 사용할 수 없습니다.",
+ "apihelp-unblock-param-userid": "차단을 해제할 사용자 ID입니다. <var>$1id</var> 또는 <var>$1user</var>와(과) 함께 사용할 수 없습니다.",
+ "apihelp-unblock-param-reason": "차단 해제 이유.",
+ "apihelp-unblock-param-tags": "차단 기록의 항목에 적용할 태그를 변경합니다.",
+ "apihelp-unblock-example-id": "차단 ID #<kbd>105</kbd>의 차단을 해제합니다.",
+ "apihelp-unblock-example-user": "<kbd>Sorry Bob</kbd>이 이유인 <kbd>Bob</kbd> 사용자의 차단을 해제합니다.",
+ "apihelp-undelete-summary": "삭제된 문서의 판을 복구합니다.",
+ "apihelp-undelete-extended-description": "삭제된 판의 목록(타임스탬프 포함)은 [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]]을 통해 검색할 수 있으며 삭제된 파일 ID의 목록은 [[Special:ApiHelp/query+filearchive|list=filearchive]]을 통해 검색할 수 있습니다.",
+ "apihelp-undelete-param-title": "복구할 문서의 제목입니다.",
+ "apihelp-undelete-param-reason": "복구할 이유입니다.",
+ "apihelp-undelete-param-tags": "삭제 기록의 항목에 적용할 변경 태그입니다.",
+ "apihelp-undelete-param-timestamps": "복구할 판의 타임스탬프입니다. <var>$1timestamps</var>와 <var>$1fileids</var>가 둘 다 비어있으면 모든 판이 복구됩니다.",
+ "apihelp-undelete-param-fileids": "복구할 파일 판의 ID입니다. <var>$1timestamps</var>와 <var>$1fileids</var>가 둘 다 비어있으면 모든 판이 복구됩니다.",
+ "apihelp-undelete-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
+ "apihelp-undelete-example-page": "<kbd>대문</kbd> 문서를 복구합니다.",
+ "apihelp-undelete-example-revisions": "<kbd>대문</kbd> 문서의 두 판을 복구합니다.",
+ "apihelp-unlinkaccount-summary": "현재 사용자에 연결된 타사 계정을 제거합니다.",
+ "apihelp-unlinkaccount-example-simple": "<kbd>FooAuthenticationRequest</kbd>와 연결된 제공자에 대한 현재 사용자의 토론 링크 제거를 시도합니다.",
+ "apihelp-upload-summary": "파일을 업로드하거나 대기 중인 업로드의 상태를 가져옵니다.",
+ "apihelp-upload-extended-description": "몇 가지 방식을 사용할 수 있습니다:\n* <var>$1file</var> 변수를 사용하여 파일의 내용을 직접 업로드합니다.\n* <var>$1filesize</var>, <var>$1chunk</var>, <var>$1offset</var> 변수를 사용하여 파일을 부분적으로 업로드합니다.\n* <var>$1url</var> 변수를 사용하여 미디어위키 서버가 URL로부터 파일을 가져오게 합니다.\n* <var>$1filekey</var> 변수를 사용하여 경고로 실패한 과거의 업로드를 완료합니다.\n<var>$1file</var>을(를) 보낼 때 HTTP POST는 파일 업로드로 끝나야 합니다. (예: <code>multipart/form-data</code>를 사용하여)",
+ "apihelp-upload-param-filename": "대상 파일 이름.",
+ "apihelp-upload-param-comment": "업로드 주석입니다. 또, <var>$1text</var>가 지정되지 않은 경우 새로운 파일들의 초기 페이지 텍스트로 사용됩니다.",
+ "apihelp-upload-param-tags": "업로드 기록 항목과 파일 문서 판에 적용할 태그를 변경합니다.",
+ "apihelp-upload-param-text": "새로운 파일들에 대한 초기 문서 텍스트.",
+ "apihelp-upload-param-watch": "문서를 주시합니다.",
+ "apihelp-upload-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
+ "apihelp-upload-param-ignorewarnings": "모든 경고를 무시합니다.",
+ "apihelp-upload-param-file": "파일의 내용입니다.",
+ "apihelp-upload-param-url": "파일을 가져올 URL입니다.",
+ "apihelp-upload-param-filekey": "임시로 보관한 이전의 업로드를 식별하는 키입니다.",
+ "apihelp-upload-param-sessionkey": "$1filekey와 동일하며, 하위 호환성을 위해 유지됩니다.",
+ "apihelp-upload-param-stash": "설정하면 서버는 저장소에 파일을 추가하는 대신 임시로 파일을 보관합니다.",
+ "apihelp-upload-param-filesize": "전체 업로드의 파일 크기입니다.",
+ "apihelp-upload-param-offset": "바이트 단위의 청크 오프셋.",
+ "apihelp-upload-param-chunk": "청크의 내용입니다.",
+ "apihelp-upload-param-async": "가능하면 잠재적으로 큰 파일 작업을 비동기로 처리합니다.",
+ "apihelp-upload-param-checkstatus": "제공된 파일 키의 업로드 상태만 가져옵니다.",
+ "apihelp-upload-example-url": "URL에서 업로드합니다.",
+ "apihelp-upload-example-filekey": "경고로 인해 실패한 업로드를 마칩니다.",
+ "apihelp-userrights-summary": "사용자의 그룹 권한을 변경합니다.",
+ "apihelp-userrights-param-user": "사용자 이름.",
+ "apihelp-userrights-param-userid": "사용자 ID.",
+ "apihelp-userrights-param-add": "이 그룹에 사용자를 추가하지만, 이미 회원이라면 해당 그룹의 회원 만료 날짜를 업데이트합니다.",
+ "apihelp-userrights-param-expiry": "만료 타임스탬프입니다. 상대값(예: <kbd>5 months</kbd> 또는 <kbd>2 weeks</kbd>)이거나 절대값(예: <kbd>2014-09-18T12:34:56Z</kbd>)이다. 타임스탬프만 설정할 경우, <var>$1add</var> 변수에 전달되는 모든 그룹에 사용됩니다. 만료되지 않는 사용자 그룹으로 지정하려면 <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, 또는 <kbd>never</kbd>를 사용하십시오.",
+ "apihelp-userrights-param-remove": "이 그룹에서 사용자를 제거합니다.",
+ "apihelp-userrights-param-reason": "변경 이유입니다.",
+ "apihelp-userrights-param-tags": "사용자 권한 기록의 항목에 적용할 태그를 변경합니다.",
+ "apihelp-userrights-example-user": "<kbd>FooBot</kbd> 사용자를 <kbd>bot</kbd> 그룹에 추가하며 <kbd>sysop</kbd>과 <kbd>bureaucrat</kbd> 그룹에서 제거합니다.",
+ "apihelp-userrights-example-userid": "ID가 <kbd>123</kbd>인 사용자를 <kbd>bot</kbd> 그룹에 추가하며, <kbd>sysop</kbd>과 <kbd>bureaucrat</kbd> 그룹에서 제거합니다.",
+ "apihelp-userrights-example-expiry": "사용자 <kbd>SometimeSysop</kbd>을 <kbd>sysop</kbd> 그룹에 1개월 간 추가합니다.",
+ "apihelp-validatepassword-summary": "위키의 비밀번호 정책에 근간하여 비밀번호를 확인합니다.",
+ "apihelp-validatepassword-extended-description": "비밀번호를 수용할 수 있으면 <samp>Good</samp>으로, 로그인 시 비밀번호를 사용할 수 있지만 변경이 필요한 경우 <samp>Change</samp>로, 비밀번호를 사용할 수 없으면 <samp>Invalid</samp>로 보고됩니다.",
+ "apihelp-validatepassword-param-password": "확인할 비밀번호.",
+ "apihelp-validatepassword-param-user": "계정 생성을 테스트할 때 사용할 사용자 이름입니다. 명명된 사용자는 존재하지 않습니다.",
+ "apihelp-validatepassword-param-email": "계정 생성을 테스트할 때 사용할 이메일 주소입니다.",
+ "apihelp-validatepassword-param-realname": "계정 생성을 테스트할 때 사용할 실명입니다.",
+ "apihelp-validatepassword-example-1": "현재 사용자에 대해 비밀번호 <kbd>foobar</kbd>를 확인합니다.",
+ "apihelp-validatepassword-example-2": "사용자 <kbd>Example</kbd>를 만들기 위해 비밀번호 <kbd>qwerty</kbd>를 확인합니다.",
+ "apihelp-watch-summary": "현재 사용자의 주시목록에서 문서를 추가하거나 제거합니다.",
+ "apihelp-watch-param-title": "주시하거나 주시를 해제할 문서입니다. <var>$1titles</var>를 대신 사용하세요.",
+ "apihelp-watch-param-unwatch": "설정하면 문서의 주시는 해제됩니다.",
+ "apihelp-watch-example-watch": "<kbd>대문</kbd> 문서를 주시합니다.",
+ "apihelp-watch-example-unwatch": "<kbd>대문</kbd> 문서의 주시를 해제합니다.",
+ "apihelp-watch-example-generator": "일반 이름공간의 일부 첫 문서들을 주시합니다.",
+ "apihelp-format-example-generic": "쿼리 결과를 $1 포맷으로 반환합니다.",
+ "apihelp-json-summary": "데이터를 JSON 형식으로 출력합니다.",
+ "apihelp-json-param-formatversion": "출력 형식:\n;1:하위 호환 포맷 (XML 스타일 불린, 콘텐츠 노드를 위한 <samp>*</samp> 키 등).\n;2:실험적인 모던 포맷. 상세 내용은 바뀔 수 있습니다!\n;latest:최신 포맷(현재 <kbd>2</kbd>)을 이용하지만 경고 없이 바뀔 수 있습니다.",
+ "apihelp-jsonfm-summary": "데이터를 JSON 포맷으로 출력합니다. (HTML의 가독성 증가)",
+ "apihelp-none-summary": "아무 것도 출력하지 않습니다.",
+ "apihelp-php-summary": "데이터를 직렬화된 PHP 포맷으로 출력합니다.",
+ "apihelp-phpfm-summary": "데이터를 PHP 포맷(HTML의 가독성 증가)으로 출력합니다.",
+ "apihelp-rawfm-summary": "디버깅 요소를 포함하여 데이터를 JSON 형식으로 출력합니다. (HTML의 가독성 증가)",
+ "apihelp-xml-summary": "데이터를 XML 형식으로 출력합니다.",
+ "apihelp-xml-param-includexmlnamespace": "지정하면 XML 이름공간을 추가합니다.",
+ "apihelp-xmlfm-summary": "데이터를 XML 포맷(가독성 높은 HTML 방식)으로 출력합니다.",
+ "api-format-title": "미디어위키 API 결과",
+ "api-login-fail-aborted": "인증은 사용자의 상호작용이 필요하지만, <kbd>action=login</kbd>에 의해 지원되지 않습니다. <kbd>action=login</kbd>으로 로그인할 수 있게 하려면 [[Special:BotPasswords]]를 참조하십시오. 주 계정 로그인의 사용을 계속하려면 <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>을 참조하십시오.",
+ "api-login-fail-aborted-nobotpw": "인증은 사용자의 상호작용이 필요하지만, <kbd>action=login</kbd>에 의해 지원되지 않습니다. 로그인하려면 <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>을 참조하십시오.",
+ "api-login-fail-badsessionprovider": "$1을(를) 사용할 경우 로그인할 수 없습니다.",
+ "api-login-fail-sameorigin": "기원이 동일한 정책이 적용되지 않으면 로그인할 수 없습니다.",
+ "api-pageset-param-titles": "작업할 제목의 목록입니다.",
+ "api-pageset-param-pageids": "작업할 페이지 ID의 목록입니다.",
+ "api-pageset-param-revids": "작업할 판 ID의 목록입니다.",
+ "api-pageset-param-generator": "특정 쿼리 모듈을 실행함으로써 작업할 페이지의 목록입니다.\n\n<strong>참고:</strong> 발생기 변수명은 \"g\"로 시작해야 합니다. 예시를 참고하십시오.",
+ "api-pageset-param-redirects-generator": "<var>$1titles</var>, <var>$1pageids</var>, <var>$1revids</var> 및 <var>$1generator</var>가 반환한 문서들의 넘겨주기를 자동으로 결정합니다.",
+ "api-pageset-param-redirects-nogenerator": "<var>$1titles</var>, <var>$1pageids</var>, <var>$1revids</var>의 넘겨주기를 자동으로 결정합니다.",
+ "api-pageset-param-converttitles": "필요하면 제목을 다른 형태로 변환합니다. 위키의 내용 언어가 형태 변환을 지원하는 경우에만 동작합니다. 형태 변환을 지원하는 언어는 $1을(를) 포함합니다.",
+ "api-help-title": "미디어위키 API 도움말",
+ "api-help-lead": "이 페이지는 자동으로 생성된 미디어위키 API 도움말 문서입니다.\n\n설명 문서 및 예시: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "메인 모듈",
+ "api-help-undocumented-module": "$1 모듈에 대한 설명문이 없습니다.",
+ "api-help-flag-deprecated": "이 모듈은 구식입니다.",
+ "api-help-flag-internal": "<strong>이 모듈은 내부용이거나 불안정합니다.</strong> 동작은 예고 없이 변경될 수 있습니다.",
+ "api-help-flag-readrights": "이 모듈은 read 권한을 요구합니다.",
+ "api-help-flag-writerights": "이 모듈은 write 권한을 요구합니다.",
+ "api-help-flag-mustbeposted": "이 모듈은 POST 요청만을 허용합니다.",
+ "api-help-flag-generator": "이 모듈은 생성기로 사용할 수 있습니다.",
+ "api-help-source": "출처: $1",
+ "api-help-source-unknown": "소스: <span class=\"apihelp-unknown\">알 수 없음</span>",
+ "api-help-license": "라이선스: [[$1|$2]]",
+ "api-help-license-noname": "라이선스: [[$1|링크 참조]]",
+ "api-help-license-unknown": "라이선스: <span class=\"apihelp-unknown\">알 수 없음</span>",
+ "api-help-parameters": "{{PLURAL:$1|변수}}:",
+ "api-help-param-deprecated": "구식입니다.",
+ "api-help-param-required": "이 변수는 필수 입력 사항입니다.",
+ "api-help-datatypes-header": "데이터 유형",
+ "api-help-datatypes": "API 요청 내 몇몇 매개변수형에 대해 더 자세히 설명해보겠습니다:\n;boolean\n:Boolean 매개변수들은 HTML 체크박스처럼 동작합니다: 만약 매개변수가 지정되었다면, 값에 상관없이 참의 값으로 여겨집니다. 거짓값은 매개변수 전체를 생략하세요.\n;timestamp\n:타임스탬프들은 여러 형식으로 표현될 수 있으나 ISO 8601 날짜와 시간이 추천됩니다. 모든 시간은 UTC이어야 하며, 포함된 시간대는 모두 무시됩니다.\n:* ISO 8601 날짜와 시간, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (구두점과 <kbd>Z</kbd>는 선택입니다.)\n:* ISO 8601 날짜와 시간과 (무시되는) 소수 초, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (대시, 콜론과 <kbd>Z</kbd>는 선택입니다.)\n:* 미디어위키 형식, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* 일반적인 수 형식 <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (<kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, 또는 <kbd>-<var>##</var></kbd>와 같은 선택적 시간대는 무시됩니다)\n:*RFC 2822 형식 (시간대는 생략될 수 있음), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850 형식 (시간대는 생략될 수 있음), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime 형식, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* 1부터 13자리까지의 숫자로 표현된 1970-01-01T00:00:00Z부터 흐른 시간(초) (<kbd>0</kbd>을 제외)\n:* 문자열 <kbd>now</kbd>",
+ "api-help-param-type-limit": "유형: 정수 또는 <kbd>max</kbd>",
+ "api-help-param-type-integer": "유형: {{PLURAL:$1|1=정수|2=정수 목록}}",
+ "api-help-param-type-boolean": "유형: 불리언 ([[Special:ApiHelp/main#main/datatypes|자세한 정보]])",
+ "api-help-param-type-timestamp": "유형: {{PLURAL:$1|1=타임스탬프|2=타임스탬프 목록}} ([[Special:ApiHelp/main#main/datatypes|허용되는 포맷]])",
+ "api-help-param-type-user": "유형: {{PLURAL:$1|1=사용자 이름|2=사용자 이름 목록}}",
+ "api-help-param-list": "{{PLURAL:$1|1=다음 값 중 하나|2=값 (<kbd>{{!}}</kbd>로 구분)}}: $2 또는 [[Special:ApiHelp/main#main/datatypes|alternative]]: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=비어 있어야 함|비어 있을 수 있거나 $2}}",
+ "api-help-param-limit": "$1 초과는 허용되지 않습니다.",
+ "api-help-param-limit2": "$1 초과는 허용되지 않습니다. (봇의 경우 $2)",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=값|2=값들}}은 $2 이상이어야 합니다.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=값|2=값들}}은 $3 이하여야 합니다.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=값|2=값들}}은 $2와 $3 사이여야 합니다.",
+ "api-help-param-upload": "여러 부분/폼 데이터를 사용한 파일 업로드로 게시되어야 합니다.",
+ "api-help-param-multi-separate": "<kbd>|</kbd> 또는 [[Special:ApiHelp/main#main/datatypes|대안]]으로 값을 구분합니다.",
+ "api-help-param-multi-max": "값들의 최대 수는 {{PLURAL:$1|$1}}입니다. (봇의 경우 {{PLURAL:$2|$2}})",
+ "api-help-param-multi-max-simple": "값의 최대 수는 {{PLURAL:$1|$1}}입니다.",
+ "api-help-param-multi-all": "모든 값을 지정하려면, <kbd>$1</kbd>를 사용하십시오.",
+ "api-help-param-default": "기본값: $1",
+ "api-help-param-default-empty": "기본값: <span class=\"apihelp-empty\">(비어 있음)</span>",
+ "api-help-param-token": "\"$1\" 토큰은 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]에서 가져옵니다",
+ "api-help-param-token-webui": "호환성을 위해, 웹 UI에 사용된 토큰도 허용합니다.",
+ "api-help-param-continue": "더 많은 결과를 이용할 수 있을 때, 계속하려면 이것을 사용하십시오.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(설명 없음)</span>",
+ "api-help-param-maxbytes": "$1{{PLURAL:$1|바이트}}를 초과할 수 없습니다.",
+ "api-help-param-maxchars": "$1{{PLURAL:$1|자}}를 초과할 수 없습니다.",
+ "api-help-examples": "{{PLURAL:$1|예시}}:",
+ "api-help-permissions": "{{PLURAL:$1|권한}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|다음 그룹에 부여됨}}: $2",
+ "api-help-right-apihighlimits": "API 쿼리에서 더 높은 제한 사용 (느린 쿼리: $1, 빠른 쿼리: $2) 느린 쿼리에 대한 제한은 다중값 매개변수에도 적용됩니다.",
+ "api-help-open-in-apisandbox": "<small>[연습장에서 열기]</small>",
+ "api-help-authmanager-general-usage": "이 모듈을 사용하는 일반적인 절차는 다음과 같습니다:\n# <kbd>amirequestsfor=$4</kbd>와 함께 <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>에서 사용할 수 있는 필드와 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>의 토큰을 가져옵니다.\n# 사용자에게 필드를 제시하고 사용자의 제출 사항을 취득합니다.\n# <var>$1returnurl</var> 및 관련된 모든 필드를 제공, 이 모듈에 전달합니다.\n# 응답 시 <samp>status</samp>를 확인합니다.\n#* <samp>PASS</samp> 또는 <samp>FAIL</samp>을 수신한 경우 작업은 끝난 것입니다. 동작은 성공하였거나 그렇지 않은 경우입니다.\n#* <samp>UI</samp>를 수신한 경우 사용자에게 새로운 필드를 제시하고 사용자의 제출 사항을 취득합니다. 그 뒤 <var>$1continue</var> 및 관련된 모든 필드 집합과 함께 이 모듈에 전달하고 단계 4를 반복합니다.\n#* <samp>REDIRECT</samp>를 수신한 경우, 사용자를 <samp>redirecttarget</samp>으로 넘겨준 다음 <var>$1returnurl</var>로 반환될 때까지 기다립니다. 그 뒤 <var>$1continue</var> 및 반환 URL에 전달되는, 모든 관련 필드와 함께 이 모듈에 전달하고 단계 4를 반복합니다.\n#* <samp>RESTART</samp>를 수실한 경우 인증은 동작했으나 연결된 사용자 계정이 없다는 것을 의미합니다. <samp>UI</samp>나 <samp>FAIL</samp>로 간주할 수 있습니다.",
+ "api-help-authmanagerhelper-requests": "<kbd>amirequestsfor=$1</kbd>와(과) 함께 <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>에서 반환된 <samp>id</samp>를 통해, 또는 이 모듈의 과거 응답으로부터 이 인증 요청만을 사용합니다.",
+ "api-help-authmanagerhelper-request": "<kbd>amirequestsfor=$1</kbd>을(를) 지정하여 <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>가 반환한 <samp>id</samp>를 통해 이 인증 요청을 사용합니다.",
+ "api-help-authmanagerhelper-messageformat": "반환 메시지에 사용할 형식.",
+ "api-help-authmanagerhelper-mergerequestfields": "모든 인증 요청에 대한 필드 정보를 하나의 배열로 합칩니다.",
+ "api-help-authmanagerhelper-preservestate": "가능하면 과거에 실패한 로그인 시도의 상태를 보존합니다.",
+ "api-help-authmanagerhelper-returnurl": "서드파티 인증 플로의 URL을 반환하며, 절대 주소여야 합니다. 이것 또는 <var>$1continue</var>는 필수입니다.\n\n<samp>REDIRECT</samp> 응답을 받으면 일반적으로 서드파티 인증 플로를 위해 지정한 <samp>redirecttarget</samp> URL에 대해 브라우저나 웹 뷰를 열게 됩니다. 이 작업이 끝나면 서드파티는 브라우저나 웹 뷰를 이 URL로 보냅니다. URL로부터 쿼리나 POST 변수를 추출한 다음 이것들을 <var>$1continue</var> 요청으로서 이 API 모듈로 전달하는 것이 좋습니다.",
+ "api-help-authmanagerhelper-continue": "이 요청은 초기 <samp>UI</samp> 또는 <samp>REDIRECT</samp> 응답 이후에 계속됩니다. 이것 또는 <var>$1returnurl</var> 중 하나가 필요합니다.",
+ "api-help-authmanagerhelper-additional-params": "이 모듈은 사용 가능한 인증 요청에 따라 추가 변수를 허용합니다. 사용 가능한 요청 및 사용되는 필드를 결정하려면 <kbd>amirequestsfor=$1</kbd>(또는 해당되는 경우 이 모듈의 과거 응답)과 함께 <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>을(를) 사용하십시오.",
+ "apierror-articleexists": "작성하려는 문서가 이미 만들어져 있습니다.",
+ "apierror-assertbotfailed": "사용자의 <code>bot</code> 권한 보유 표명이 실패했습니다.",
+ "apierror-assertnameduserfailed": "사용자의 \"$1\" 지정 표명이 실패했습니다.",
+ "apierror-assertuserfailed": "사용자의 로그인 표명이 실패했습니다.",
+ "apierror-autoblocked": "사용자의 IP 주소는 차단된 사용자에 의해 사용되었으므로 자동으로 차단된 상태입니다.",
+ "apierror-badgenerator-unknown": "알 수 없는 <kbd>generator=$1</kbd>.",
+ "apierror-badip": "IP 변수가 유효하지 않습니다.",
+ "apierror-badmd5": "제공된 MD5 해시가 잘못되었습니다.",
+ "apierror-badmodule-badsubmodule": "<kbd>$1</kbd> 모듈에 \"$2\" 하위 모듈이 없습니다.",
+ "apierror-badmodule-nosubmodules": "<kbd>$1</kbd> 모듈은 하위 모듈이 없습니다.",
+ "apierror-badquery": "유효하지 않은 쿼리입니다.",
+ "apierror-badtoken": "잘못된 CSRF 토큰.",
+ "apierror-blockedfrommail": "이메일 보내기에서 차단되어 있습니다.",
+ "apierror-blocked": "편집에서 차단되어 있습니다.",
+ "apierror-botsnotsupported": "이 인터페이스는 봇을 위해 지원되지 않습니다.",
+ "apierror-cannotviewtitle": "$1을(를) 볼 권한이 없습니다.",
+ "apierror-cantblock": "사용자를 차단할 권한이 없습니다.",
+ "apierror-canthide": "차단 기록에서 사용자 이름을 숨길 권한이 없습니다.",
+ "apierror-cantimport-upload": "업로드된 페이지를 가져올 권한이 없습니다.",
+ "apierror-cantimport": "페이지를 가져올 권한이 없습니다.",
+ "apierror-cantsend": "로그인하지 않았거나 인증된 이메일 주소가 없거나 다른 사용자로 이메일을 보낼 권한이 없기 때문에 이메일을 보낼 수 없습니다.",
+ "apierror-databaseerror": "[$1] 데이터베이스 쿼리 오류.",
+ "apierror-emptynewsection": "비어있는 새 문단을 만들 수 없습니다.",
+ "apierror-emptypage": "새 문서로 빈 문서를 만들 수 없습니다.",
+ "apierror-exceptioncaught": "[$1] 예외가 발생했습니다: $2",
+ "apierror-filedoesnotexist": "파일이 존재하지 않습니다.",
+ "apierror-filenopath": "로컬 파일 경로를 가져올 수 없습니다.",
+ "apierror-import-unknownerror": "알 수 없는 가져오기 오류: $1.",
+ "apierror-invalidcategory": "입력한 분류 이름이 올바르지 않습니다.",
+ "apierror-invalidexpiry": "잘못된 만료 기한 \"$1\".",
+ "apierror-invalid-file-key": "유효한 파일 키가 아닙니다.",
+ "apierror-invalidoldimage": "<var>oldimage</var> 변수에 유효하지 않은 형식이 있습니다.",
+ "apierror-invalidparammix-cannotusewith": "<kbd>$1</kbd> 변수는 <kbd>$2</kbd>와(과) 함께 사용할 수 없습니다.",
+ "apierror-invalidsection": "<var>section</var> 변수는 유효한 섹션 ID 또는 <kbd>new</kbd>이어야 합니다.",
+ "apierror-invalidsha1base36hash": "제공된 SHA1Base36 해시가 유효하지 않습니다.",
+ "apierror-invalidsha1hash": "제공된 SHA1 해시가 유효하지 않습니다.",
+ "apierror-invalidtitle": "잘못된 제목 \"$1\".",
+ "apierror-invaliduser": "잘못된 사용자 이름 \"$1\".",
+ "apierror-invaliduserid": "<var>$1</var> 사용자 ID는 유효하지 않습니다.",
+ "apierror-maxbytes": "<var>$1</var> 변수는 $2{{PLURAL:$2|바이트}}를 초과할 수 없습니다",
+ "apierror-maxchars": "<var>$1</var> 변수는 $2{{PLURAL:$2|자}}를 초과할 수 없습니다",
+ "apierror-maxlag-generic": "데이터베이스 서버 대기 중: $1 {{PLURAL:$1|초}} 지연되었습니다.",
+ "apierror-maxlag": "$2 대기 중: $1 {{PLURAL:$1|초}} 지연되었습니다.",
+ "apierror-missingcontent-revid": "ID $1 판에 해당하는 내용이 없습니다.",
+ "apierror-missingparam": "<var>$1</var> 변수는 설정해야 합니다.",
+ "apierror-missingtitle": "지정한 페이지가 존재하지 않습니다.",
+ "apierror-missingtitle-byname": "$1 문서가 존재하지 않습니다.",
+ "apierror-moduledisabled": "<kbd>$1</kbd> 모듈은 비활성화되었습니다.",
+ "apierror-mustbeloggedin-generic": "로그인해야 합니다.",
+ "apierror-mustbeloggedin-linkaccounts": "계정을 연결하려면 로그인해야 합니다.",
+ "apierror-mustbeloggedin": "$1에 로그인해야 합니다.",
+ "apierror-mustbeposted": "<kbd>$1</kbd> 모듈은 POST 요청이 필요합니다.",
+ "apierror-noedit-anon": "익명 사용자는 문서를 편집할 수 없습니다.",
+ "apierror-noedit": "문서를 편집할 권한이 없습니다.",
+ "apierror-noimageredirect": "그림 넘겨주기를 만들 권한이 없습니다.",
+ "apierror-nosuchrevid": "ID $1에 해당하는 판이 없습니다.",
+ "apierror-nosuchuserid": "ID $1에 해당하는 사용자가 없습니다.",
+ "apierror-notarget": "이 작업을 위한 유효한 대상을 지정하지 않았습니다.",
+ "apierror-pagecannotexist": "이름공간은 실제 페이지를 허용하지 않습니다.",
+ "apierror-pagelang-disabled": "이 위키에서 문서의 언어 변경은 허용되지 않습니다.",
+ "apierror-permissiondenied": "$1에 대한 권한이 없습니다.",
+ "apierror-permissiondenied-generic": "권한이 없습니다.",
+ "apierror-permissiondenied-unblock": "사용자의 차단을 해제할 권한이 없습니다.",
+ "apierror-protect-invalidaction": "잘못된 보호 유형 \"$1\".",
+ "apierror-protect-invalidlevel": "잘못된 보호 수준 \"$1\".",
+ "apierror-ratelimited": "속도 제한을 초과했습니다. 잠시 기다렸다가 다시 시도하십시오.",
+ "apierror-readapidenied": "이 모듈을 사용하려면 읽기 권한이 필요합니다.",
+ "apierror-readonly": "위키는 현재 읽기 전용 모드입니다.",
+ "apierror-revisions-badid": "<var>$1</var> 변수에 대한 판을 발견하지 못했습니다.",
+ "apierror-revwrongpage": "r$1은(는) $2의 판이 아닙니다.",
+ "apierror-specialpage-cantexecute": "특수 문서의 결과를 볼 권한이 없습니다.",
+ "apierror-stashwrongowner": "잘못된 소유자: $1",
+ "apierror-systemblocked": "당신은 미디어위키에 의해서 자동으로 차단되었습니다.",
+ "apierror-timeout": "서버가 예측된 시간 내에 응답하지 않았습니다.",
+ "apierror-unknownerror-editpage": "알 수 없는 EditPage 오류: $1.",
+ "apierror-unknownerror-nocode": "알 수 없는 오류.",
+ "apierror-unknownerror": "알 수 없는 오류: \"$1\"",
+ "apierror-unknownformat": "인식되지 않는 형식 \"$1\".",
+ "apierror-unsupportedrepo": "로컬 파일 저장소는 모든 그림의 조회를 지원하지 않습니다.",
+ "apierror-upload-missingresult": "상태 데이터에 결과가 없습니다.",
+ "apierror-writeapidenied": "API를 통해 이 위키를 편집할 권한이 없습니다.",
+ "apiwarn-deprecation-httpsexpected": "HTTPS를 예측하였으나 HTTP가 사용되었습니다.",
+ "apiwarn-difftohidden": "r$1에 대한 차이를 만들 수 없습니다: 내용이 숨겨져 있습니다.",
+ "apiwarn-invalidcategory": "\"$1\"은(는) 분류가 아닙니다.",
+ "apiwarn-invalidtitle": "\"$1\"은(는) 올바른 제목이 아닙니다.",
+ "apiwarn-invalidxmlstylesheetns": "스타일시트는 {{ns:MediaWiki}} 이름공간에 있어야 합니다.",
+ "apiwarn-notfile": "\"$1\"은(는) 파일이 아닙니다.",
+ "apiwarn-unsupportedarray": "<var>$1</var> 변수는 지원되지 않는 PHP 배열 문법을 사용합니다.",
+ "apiwarn-validationfailed-keytoolong": "키가 너무 깁니다. ($1 바이트 이상 허용하지 않습니다)",
+ "api-feed-error-title": "오류 ($1)",
+ "api-usage-docref": "API 사용법을 보려면 $1을(를) 참고하십시오.",
+ "api-credits-header": "크레딧",
+ "api-credits": "API 개발자:\n* Yuri Astrakhan (만든이, 선임 개발자 2006년 9월~2007년 9월)\n* Roan Kattouw (선임 개발자, 2007년 9월–2009년)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (선임 개발자 2013년–현재)\n\n당신의 의견이나 제안, 질문은 mediawiki-api@lists.wikimedia.org 로 보내주시고,\n버그 보고는 https://phabricator.wikimedia.org/ 에 해주시기 바랍니다."
+}
diff --git a/www/wiki/includes/api/i18n/ksh.json b/www/wiki/includes/api/i18n/ksh.json
new file mode 100644
index 00000000..b0231df9
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ksh.json
@@ -0,0 +1,1046 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokemäntazjohn]]\n* [[mw:API:FAQ/de|Öff jefrohch]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mäileng_Leß]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Aanköndejonge zom <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Jemäldte Fähler un Wönsch]\n</div>\n<strong>Status:</strong> Alle op heh dä Sigg aanjzeischte Ußwahle sullte donn, ävver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> weed jrahd noch äntwekeld un et kann sesch alle Nahslangs jädd ändere. Holl Der de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Mäileng_Leß med Aanköndejonge], öm automattesch övver Neujeschkeite enfommehrt ze wähde.\n\n<strong>Kapodde Aanfrohre:</strong> Wam_mer kapodde Aanfroheaan et API <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> schek, kritt mer ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i>-Kopp ußjejovve met däm Täx „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki-API-Error</code>“ dren, dä mer als ene Schlößel bedraachte kann. Mih dohzoh fengk met op dä Sigg [[mw:API:Errors_and_warnings|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>: Fähler un Warnonge]].",
+ "apihelp-main-param-action": "Wat för en Aufjahb.",
+ "apihelp-main-param-format": "Et Fommaht för ußzejävve.",
+ "apihelp-main-param-maxlag": "Der hühste zohjelohße Verzoch kann jenumme wähde, wann MehdijaWikki obb enem Knubbel Rääschner medd ene replezehrte (dadd es, lebänndesch koppehrte) Dahtebangk enschtallehrt weed. Öm kein Opdräschd aan de Dahtebangk ze scheke, di dat noch schlemmer maache dähte, kam_mer övver heh dä Parramehter et Projramm affwahde lohße, bes dat dä Verzoch vum Replezehre onger däm aanjejovve Wäät lit. Wann dä Verzoch övvermähßesch jruhs es, kritt mer dä Fähler <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">maxlag</samp> jemälldt med ene Nohreesch esu wi <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Mer wahde op dä ẞööver $Maschihn un di es $Verzoch Sekonde hengerher</samp>.<br />Op dä [[mw:Manual:Maxlag_parameter|Hanndbohchsigg zom \n<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Maxlag</code>-Parramehter]] kam_mer noch mih zerdoh lässe.",
+ "apihelp-main-param-smaxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> en dä Kopp_Reihj <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">HTTP cache control</code> obb esu vill Sekonde. Fähler wähde nimmohls faßjehallde.",
+ "apihelp-main-param-maxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> en dä Kopp_Reihj <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">HTTP cache control</code> obb esu vill Sekonde. Fähler wähde nimmohls faßjehallde.",
+ "apihelp-main-param-assert": "Ställ sescher, dat dä Metmaacher enjelogg es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> en), udder ene Bot es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">bot</kbd> en).",
+ "apihelp-main-param-requestid": "Jehde Aanjahb vun heh weed widder med ußjejovve. Esuh kam_mer einzel Affrohre ussenein hallde.",
+ "apihelp-main-param-servedby": "Donn däm ẞööver, dä et jedonn hät, singe Nahme med ußjävve.",
+ "apihelp-main-param-curtimestamp": "Donn de aktoälle Zigg un et Dattum med ußjävve.",
+ "apihelp-main-param-uselang": "De Schprohch för et Övversäzze vun Täxte un Nohreeschte. <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> holle, met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">siprop=languages</kbd> jidd en Leß met de Köözelle för Schprohche uß, udder jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> aan, öm dem aktoälle Metmaacher sing eetzde Schprohch ze krijje, udder nemm <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">content</kbd> öm heh dämm Wikki singe Ennhald sing Schprohch ze krijje.",
+ "apihelp-block-summary": "Ene Metmaacher schpärre.",
+ "apihelp-block-param-user": "Däm Nahme vun däm Metmaacher, de <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß udder dä Berätt, dä De Schpärre wells.",
+ "apihelp-block-param-expiry": "De Zigg bes zom Ußloufe. Kam_mer als en Door aanjävve, esu wi „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">5 months</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2 weeks</kbd>“ un kam_mer als ene Zigg_Pongk aanjävve, esu wi „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2014-09-18T12:34:56Z</kbd>“, un wam_mer „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">infinite</kbd>“, „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">indefinite</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">never</kbd>“ aanjitt, dohrt di Schpärr för iiwesch.",
+ "apihelp-block-param-reason": "Der Schpärrjrond.",
+ "apihelp-block-param-anononly": "Bloß de nahmelohse Metmaaacher spärre, alsu donn et nahmelohse Beärbeide vun dä <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß uß verhendere.",
+ "apihelp-block-param-nocreate": "Et Neu-Aanmelde verbeede",
+ "apihelp-block-param-autoblock": "Dun automattesch de läzde <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß schpärre, di dä Metmaacher jehatt hät, un och all di <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräße, vun wo dä versöhk, jet ze ändere.",
+ "apihelp-block-param-noemail": "Sorresch derför, dat dä Metmaacher \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> övver et Wiki verscheck. Bruch et Rääsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">blockemail</code>“.",
+ "apihelp-block-param-hidename": "Donn däm Metmaacher singe Nahme em Logbohch vum Metmaacher Schpärre verschteische. Bruch et Rääsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hideuser</code>“.",
+ "apihelp-block-param-allowusertalk": "Lohß dä Metmaacher sing eije Klaafsigg verändere. Dat hängk aan „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>“.",
+ "apihelp-block-param-reblock": "Wann dä Metmaacher als jeschpächd es, donn dat övverschrihve.",
+ "apihelp-block-param-watchuser": "Donn de Metmaachersigg un de Klaafsigg dohzoh op mig Oppaßleß säze.",
+ "apihelp-block-example-ip-simple": "Donn de <i lang=\"en\" xmL:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß <kbd>192.0.2.5</kbd> för drei ääsch schpärre mem Jrond: <kbd>Eestschlaach</kbd>.",
+ "apihelp-block-example-user-complex": "Donn dä Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Vandal</kbd>“ för iiwesch schpärre, mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Vandalism</kbd>“, un donn_em neu Zohjäng aanzelähje un <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> ze verscheke verbehde.",
+ "apihelp-checktoken-summary": "Donn de Jölteschkeid vun enem Makkehrongsschlößel vun „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>“ pröhve.",
+ "apihelp-checktoken-param-type": "De Zoot Makkehrongsschlößel zom Pröhfe.",
+ "apihelp-checktoken-param-token": "Der Makkehrongsschlößel zom Pröhve.",
+ "apihelp-checktoken-param-maxtokenage": "Et jrühßte zojelohße Allder fun däm Makkehrongsschlößel en Sekonde.",
+ "apihelp-checktoken-example-simple": "Pröhf de Jölteschkeid vun däm Makkehrongsschlößel „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">csrf</kbd>“.",
+ "apihelp-clearhasmsg-summary": "Nemmp de Makkehrong „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hasmsg</code>“ fott vum aktoälle Metmaacher.",
+ "apihelp-clearhasmsg-example-1": "Nemm de Makkehrong „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hasmsg</code>“ fott vum aktoälle Metmaacher.",
+ "apihelp-compare-summary": "Donn de Ongerscheide zwesche zwai Sigge beschtemme.",
+ "apihelp-compare-extended-description": "Do moß derför jeweils en Väsjohn, en Övverschreff för di Sigg, odder ener Sigg iehr Kännong aanjävve, för de beide Sigge.",
+ "apihelp-compare-param-fromtitle": "De Övverschreff vun dä eezte Sigg zom verjlihsche.",
+ "apihelp-compare-param-fromid": "De Kännong vun dä eezte Sigg zom verjlihsche.",
+ "apihelp-compare-param-fromrev": "De Väsjohn vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-param-totitle": "De Övverschreff vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-param-toid": "De Kännong vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-param-torev": "De Väsjohn vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-example-1": "Fengk de Ongerscheide zwesche dä Väsjohne 1 un 2",
+ "apihelp-createaccount-summary": "Ene neue Zohjang för ene Metmaacher aanlähje.",
+ "apihelp-createaccount-param-name": "Der Nahme för dä Metmaacher.",
+ "apihelp-createaccount-param-password": "Et Paßwoot (Weed ävver it jebruc un övverjange, wann <code lang=\"en\" xml:lang=\"en\"><var>$1mailpassword</var></code> jesaz es)",
+ "apihelp-createaccount-param-domain": "De Domäijn för de Zohjangsdaht vun ußerhallef beschtähtech ze krijje. Kam_mer fott_lohße.",
+ "apihelp-createaccount-param-token": "Der Makkehrongsschlößel för ene Zohjang aanzelähje, dä mer bei de eezde Aanfrohch krääje hät.",
+ "apihelp-createaccount-param-email": "Däm Metmaacher sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i>, kann och fott bliive.",
+ "apihelp-createaccount-param-realname": "Dämm Metmaacher singe reeschtejje Nahme - kann fott blihve.",
+ "apihelp-createaccount-param-mailpassword": "Wann heh jädd aanjejovve es, kritt dä Metmaacher e zohfällesch ußjesöhk neu Paßwood aan sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> jescheck.",
+ "apihelp-createaccount-param-reason": "Ene Jrond för dä Zojang aanzelähje, dä en de Logböhscher kütt.",
+ "apihelp-createaccount-param-language": "Dat Schprohcheköözel, wadd als der Schtandatt för dä Metmaacher jesaz wähde sull. Kann läddesch blihve, dann es et di Schprohch vum Wikki.",
+ "apihelp-createaccount-example-pass": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testuser</kbd> aan, mem Paßwood <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testmailuser</kbd> aan med emem zohfällesch ußjewörfelte Paßwoot un schegg_em dat övver de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>.",
+ "apihelp-delete-summary": "Schmieß en Sigg fott.",
+ "apihelp-delete-param-title": "De Övverschreff vun dä Sigg zom fottschmiiße. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+ "apihelp-delete-param-pageid": "De Kännong vun dä Sigg zom fottschmiiße. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+ "apihelp-delete-param-reason": "Der Jrond för et Fottschmiiße. Wann dä nit aanjejovve es, weed ene automattesch usjräschnete Jrond jenumme.",
+ "apihelp-delete-param-tags": "Donn de Makehronge änndere, di för dä Enndraach em Logbohch jesaz wähde sulle.",
+ "apihelp-delete-param-watch": "Donn di Sigg en däm aktoälle Metmaacher sing Oppaßleß opnämme.",
+ "apihelp-delete-param-watchlist": "Donn di Sigg op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
+ "apihelp-delete-param-unwatch": "Schmihß di Sigg us däm aktoälle Metmaacher singe Oppaßless erus.",
+ "apihelp-delete-param-oldimage": "Der Nahme vom ahle Beld zom fottschmiiße, wi hä vun [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] kütt.",
+ "apihelp-delete-example-simple": "Schmiiß de Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ fott.",
+ "apihelp-delete-example-reason": "Schmiiß de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ fott mem Jrond: <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Dat Moduhl wohd affjeschalldt.",
+ "apihelp-edit-summary": "Sigge aanlähje un verändere.",
+ "apihelp-edit-param-title": "De Övverschreff vun dä Sigg zom Ändere. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+ "apihelp-edit-param-pageid": "De Känong vun dä Sigg zom Ändere. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+ "apihelp-edit-param-section": "De Nommer vum Affschnedd. Nemm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">0</kbd>“ för wat vör der eezde Övverschreff schteihd. Ene neue Affscnedd määt mer met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</var>“.",
+ "apihelp-edit-param-sectiontitle": "De Övverschreff för ene neue Affschnett.",
+ "apihelp-edit-param-text": "Dä Sigg ehre Ennhalld.",
+ "apihelp-edit-param-summary": "Dat Fäld för „{{int:summary}}“. Och en Öveschreff för ene Affschnedd wann „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1section=new</code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sectiontitle</code>“ nit jesaz es.",
+ "apihelp-edit-param-tags": "De Mekhonge för op heh di väsjohn aanzewännde.",
+ "apihelp-edit-param-minor": "En klein Änderong.",
+ "apihelp-edit-param-notminor": "Kein klein Änderong.",
+ "apihelp-edit-param-bot": "Makeer heh di Änderog als vun enem Bot jemaat.",
+ "apihelp-edit-param-basetimestamp": "Dattom un Zigg för de Ußjangs_Väsjohn, di jenumme weed, öm dubbel Beärbeijdonge bemärke ze künne. Di kam_mer övver di Sigg <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\"[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]</code> eruß fenge.",
+ "apihelp-edit-param-starttimestamp": "Dattom un Zigg för wann et Beärbeijde loßß jing, di jenumme weed, öm dubbel Beärbeijdonge bemärke ze künne. Di kam_mer övver di Sigg <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\"[[Special:ApiHelp/main|curtimestamp]]</code> eruß fenge em Momang, woh mem Beärbeijde bejenne deihjt.",
+ "apihelp-edit-param-recreate": "Övverjangk alle Fähler övver di Sigg, di en der Zweschezigg fott jeschneße wohd.",
+ "apihelp-edit-param-createonly": "Donn di Sigg nit ändere, wann se ald doh es.",
+ "apihelp-edit-param-nocreate": "Mäld ene Fähler, wann di Sigg nit doh es.",
+ "apihelp-edit-param-watch": "Donn di Sigg op dem aktälle Metmaacher sing Oppaßleß.",
+ "apihelp-edit-param-unwatch": "schmiiß di Sigg uß heh däm Metmaacher singe oppaßleß.",
+ "apihelp-edit-param-watchlist": "Donn en Sigg en däm aktoälle Metmaacher sing Opaßleß enndrahre udder ußdrahre udder donn däm sing Vörenschtällonge nämme udder jaa nix ändere.",
+ "apihelp-edit-param-md5": "De <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Message-Digest Algorithm 5\">MD5</i>-Prööfsomm vum Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</var>“ udder de Parramehtere „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prependtext</var>“ un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1appendtext</var>“ wähde annenannderjehange. Wann se jesaz sin, weed di Ännderong nit jeamaat, wann di Prööfsomm nit schtemmp.",
+ "apihelp-edit-param-prependtext": "Donn dä Täx aam Aanfng vun dä Sigg enndrahre. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“.",
+ "apihelp-edit-param-appendtext": "Donn dä Täx aam Ängk vun dä Sigg aanhange. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“.\n\nNemm „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$section=new</code>“ ömm ene neuje Affschnedd aanzehange, anschtatt vun heh dämm Parramehter.",
+ "apihelp-edit-param-undo": "Donn heh di Väsjohn widder retuhr nämme. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“, „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prependtext </code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1appendtext</code>“.",
+ "apihelp-edit-param-undoafter": "Donn alle Väsjohne vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1undo </code>“ bes zeläz heh di Väsjohn widder retuhr nämme. Wann nix ennjedrahre es, nämm blohß ein Väsjohn retuhr nämme.",
+ "apihelp-edit-param-redirect": "Verfollsch de Ömleidonge automattesch.",
+ "apihelp-edit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
+ "apihelp-edit-param-token": "Dä Makkehrongsschlößel suld emmer als der läzde Parramehter jeschek wähde udder winneschsdens noh däm Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</var>“.",
+ "apihelp-edit-example-edit": "Veränder en Sigg.",
+ "apihelp-edit-example-prepend": "Donn <kbd>_&#95;NOTOC_&#95;</kbd> för en Sigg säze.",
+ "apihelp-edit-example-undo": "Donn alle Väsjohne vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">13579</code>“ bes zeläz „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">13585</code>“ widder retuhr nämme u en autmatesche Zersamfaßong derför enndrahre.",
+ "apihelp-emailuser-summary": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher schecke.",
+ "apihelp-emailuser-param-target": "D ä Metmaacher, dä di <i lang=\"en\" xml:lang=\"en\">e-mail</i> krijje sull.",
+ "apihelp-emailuser-param-subject": "Koppeih mem Beträff.",
+ "apihelp-emailuser-param-text": "Dä Täx en dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>.",
+ "apihelp-emailuser-param-ccme": "scheck mer en Koppih vun heh dä <i lang=\"en\" xml:lang=\"en\">e-mail</i>.",
+ "apihelp-emailuser-example-email": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher „<kbd lang=\"en\" xml:lang=\"en\">WikiSysop</kbd>“ schecke mem Täx „<kbd lang=\"en\" xml:lang=\"en\">Content</kbd>“ dren.",
+ "apihelp-expandtemplates-summary": "Deiht alle Schablohne en Wikkitäx ömsäze.",
+ "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg.",
+ "apihelp-expandtemplates-param-text": "Dä Wikkitäx zom ömwandelle.",
+ "apihelp-expandtemplates-param-revid": "De Kännong vun dä Väsjohn, för \n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\"><nowiki>{{REVISIONID}}</nowiki></code>“ un verwandte Wääte.",
+ "apihelp-expandtemplates-param-prop": "Wat för en Aanjahbe ze holle?\n\nOpjepaß: wann jaa kei Wääte ußjewähld sinn, kütt der Wikkitäx eruß, ävver de ßjahbe kumme en enem Fommaht, wat mer nit hann welle.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Alle Saachjroppe en dä Quällesigg, di em Wikkitäx vun de ußjejovve Sigg nit vorkumme.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "De Sigge_Eijeschaffte, di vun de Zauberwööter em Wikkitäx faßjelaat wähde.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "De längste Zigg noh dä de zweschejescheijscherte jevonge Dahte nmmieh jöltesch sin sulle.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Alle Moduhle vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Delivery system in MediaWiki for the optimized run-time loading and managing of modules\">ResourceLoader</i>, di noh de Paaserfonksjuhne en de Ußjahbe vörkumme sulle. Äntwehder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">jsconfigvars</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">encodedjsconfigvars</kbd>“ moß mer met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">modules</kbd>“ zesamme aanforrdere.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Jitt de Varrejahble fun de Einschtällonge vun heh Sigg, di nur för di Sigg johd sin.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Jitt de Varrejahble fun de Einschtällonge vun heh Sigg, di nur för di Sigg johd sin, em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommahd als en Reih vun Zeijsche.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "Dä Ennjahv iere Paaser_Boum em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>_Fommaht.",
+ "apihelp-expandtemplates-param-includecomments": "Ov Aanmärkonge em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fommaht med ußjejovve wähde sulle.",
+ "apihelp-expandtemplates-param-generatexml": "Donn ene Boum vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Paaser opboue. Es dorsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=parsetree</code>“ ässäz.",
+ "apihelp-expandtemplates-example-simple": "Donn dä Wikkitäx <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\"><nowiki>{{Project:Sandbox}}</nowiki></kbd> en Täx wandelle.",
+ "apihelp-feedcontributions-summary": "Jidd ene Kannahl met de Beijdrähsch vun enem Metmaacher uß.",
+ "apihelp-feedcontributions-param-feedformat": "Däm Kannahl sing Fommaht.",
+ "apihelp-feedcontributions-param-user": "De Beijdrähsch för wat för en Metmaacher holle.",
+ "apihelp-feedcontributions-param-namespace": "Wat för ene Appachtemang för de Beijdrähsch ußjeschloße wähde sull.",
+ "apihelp-feedcontributions-param-year": "Vum johr un fröhjer.",
+ "apihelp-feedcontributions-param-month": "Vun däm Mohnd un derför",
+ "apihelp-feedcontributions-param-tagfilter": "Op wat för en Makkehronge de Beijdrähsch bschrängk wähde sulle.",
+ "apihelp-feedcontributions-param-deletedonly": "zeijsch blohß de fottjeschmeße Beijdrähsch.",
+ "apihelp-feedcontributions-param-toponly": "Zeich blohß de Änderonge, di och de neußte sin.",
+ "apihelp-feedcontributions-param-newonly": "Zeich blohß de Änderonge, woh Sigge neu aanjelaat woode sin.",
+ "apihelp-feedcontributions-param-hideminor": "Donn kein Minni-Ännderonge ennblände.",
+ "apihelp-feedcontributions-param-showsizediff": "Zeijsch de Ongerscheijd en de Jrühße zwesche de Väsjohne.",
+ "apihelp-feedcontributions-example-simple": "Zeijsch de Änderonge vum Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Donn ene Kannahl för de neuste Änderonge ußjävve.",
+ "apihelp-feedrecentchanges-param-feedformat": "Däm Kannahl sing Fommaht.",
+ "apihelp-feedrecentchanges-param-namespace": "Op wat för ene Appachtemang de Beijdrähsch beschrängk wähde sulle.",
+ "apihelp-feedrecentchanges-param-invert": "Alle Appachtemangs ußer däm ußjesöhkte.",
+ "apihelp-feedrecentchanges-param-associated": "Donn et drop betroke Appachtemang — Klaafsigge udder Atikelle — med enschlehße.",
+ "apihelp-feedrecentchanges-param-days": "Wadd eruß küdd op di Dähsch enschrängke.",
+ "apihelp-feedrecentchanges-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-feedrecentchanges-param-from": "Zeijsch de Änderonge zigg dämm.",
+ "apihelp-feedrecentchanges-param-hideminor": "De kleine Minni_Ännderonge verschteijsche.",
+ "apihelp-feedrecentchanges-param-hidebots": "Änderonge ußschlehße, di vun Bots jemaht wohde.",
+ "apihelp-feedrecentchanges-param-hideanons": "Änderonge ußschlehße, di vun nahmelohse Metmaacher jemaht wohde.",
+ "apihelp-feedrecentchanges-param-hideliu": "Änderonge ußschlehße, di vun aanjemälldete Metmaacher jemaht wohde.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Nohjelohrte Änderonge övverjonn.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Änderonge vun heh dämm Metmaacher övverjonn.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Donn Änderonge aan de Zohjehüreshkeit zoh Saachjroppe veschteijsche.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Noh Makkehronge beschängke.",
+ "apihelp-feedrecentchanges-param-target": "Zeijsch Änderonge aan Sigge, op di vun heh dä Sigg ene Lengk jeihd.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Zeijsch Änderonge aan Sigge, op di vun dä ußjesöhk Sigg ene Lengk jeihd.",
+ "apihelp-feedrecentchanges-example-simple": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}}",
+ "apihelp-feedrecentchanges-example-30days": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}} vun de läzde 30 Dähsch.",
+ "apihelp-feedwatchlist-summary": "Donn ene Kannahl met dä Oppaßleß zerökjävve.",
+ "apihelp-feedwatchlist-param-feedformat": "Däm Kannahl sing Fommaht.",
+ "apihelp-feedwatchlist-param-hours": "Zeijsch de Sigge, di en de läzde su un esu vill Schtonde vun jäz aan veränder wohde sin.",
+ "apihelp-feedwatchlist-param-linktosections": "Lengk tirägg od der veränderte Affschnedd, woh müjjelesch.",
+ "apihelp-feedwatchlist-example-default": "Zeijsch ene Kannahl met dä Oppaßleß.",
+ "apihelp-feedwatchlist-example-all6hrs": "Zeijsch alle Änderonge aan Sgge obb Oppaßleßte us de läzde 6 Schtunde.",
+ "apihelp-filerevert-summary": "Säz en Dattei obb en ahle Väsohn zerök.",
+ "apihelp-filerevert-param-filename": "De Zih_Dattei, der ohne „{{ne:file}}“ derför.",
+ "apihelp-filerevert-param-comment": "Aanmärkong huh lahde.",
+ "apihelp-filerevert-param-archivename": "Dä nahme vum Aschihv vun dä Väsjohn för wider drop zerök ze jon.",
+ "apihelp-filerevert-example-revert": "Donn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Wiki.png</kbd> op di Väsohn vum <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2011-03-05T15:27:40Z</kbd> zerök säze.",
+ "apihelp-help-summary": "zeisch Hölp för de aanjejovve Moduhle.",
+ "apihelp-help-param-modules": "Moduhle, öm Hölp för de Wääte vun de „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">action</var>“ un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format</var>“ Parramehtere, udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">main</kbd>“. aanzezeije. Mer kann Ongermoduhle met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">+</kbd>“ aanjävve.",
+ "apihelp-help-param-submodules": "Donn Hölp för de Ongermoduhle vun dämm aanjejovve Moduhl enschschlehße.",
+ "apihelp-help-param-recursivesubmodules": "Donn Hölp för de Ongermoduhle allesammp enschschlehße, esu deef, wi et jeiht.",
+ "apihelp-help-param-helpformat": "Et Fommaht vun de Ußjahbe för de Hölp.",
+ "apihelp-help-param-wrap": "Donn de Ußjahbe en dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> sing schtandattmähßejje Schtruktuhr vun de Antwood enschlehße.",
+ "apihelp-help-param-toc": "Donn en Enhhaldserzeijschensß en de Ußjahbe vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ennschlehße.",
+ "apihelp-help-example-main": "Hölp för et Houpmoduhl.",
+ "apihelp-help-example-submodules": "Hölp för „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">action=query</kbd>“ un alle Ongermoduhle.",
+ "apihelp-help-example-recursive": "Alle Hölp en eine Sigg.",
+ "apihelp-help-example-help": "Alle Hölp övver de Hölp säälver.",
+ "apihelp-help-example-query": "Hölp för zwei Ongermoduhle för Frohre.",
+ "apihelp-imagerotate-summary": "Ein udder mih Bellder driehje.",
+ "apihelp-imagerotate-param-rotation": "Öm wi vill Jrahd sulle de Bellder noh de Uhr drieh wääde?",
+ "apihelp-imagerotate-example-simple": "Drieh de <kbd>Dattei:Beijschpell.png</kbd> öm <kbd>90</kbd> Jrahd.",
+ "apihelp-imagerotate-example-generator": "Drieh alle Bellder en dä <kbd>Saachjropp:Ömdriehje</kbd> öm <kbd>180</kbd> Jrahd.",
+ "apihelp-import-param-summary": "Zersammefaßong för der Empohrt för et Logbohch.",
+ "apihelp-import-param-xml": "Donn en Dattei em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommaht huhjahde.",
+ "apihelp-import-param-interwikisource": "För et Empottehre us enem andere Wikki: Dat Wikki vun woh der Empohrt kumme sull.",
+ "apihelp-import-param-interwikipage": "För et Empottehre us enem andere Wikki: De Sigg zom Empottehre.",
+ "apihelp-import-param-fullhistory": "För et Empottehre us enem andere Wikki: Donn de jannze Verjangeheid empottehre, nit blohß de aktoälle Väsjohn.",
+ "apihelp-import-param-templates": "För et Empottehre us enem andere Wikki: Donn all de nühdejje Schablohne met empottehre.",
+ "apihelp-import-param-namespace": "En heh dat Appachtemang emmpotehre. Kam_mer nit mem Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1rootpage</var>“ zersamme bruche.",
+ "apihelp-import-param-rootpage": "Als Ongersigg vun heh dä Sigg empottehre. Km_mer nit zosamme met däm Parramehter „<varlang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1namespace</var>“ bruche.",
+ "apihelp-import-example-import": "Donn di Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[meta:Help:ParserFunctions]]</code>“ en et Appachtemang <code>100</code>empottehre, met alle älldere Väsjohne ennjeschloßße.",
+ "apihelp-linkaccount-example-link": "Fang dä Vörjang vum Verlengk obb ene Zohjang aan vun <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd> aan.",
+ "apihelp-login-param-name": "Metmaacher_Nahme.",
+ "apihelp-login-param-password": "Paßwoot.",
+ "apihelp-login-param-domain": "De Domaijn (kann fott bliehve)",
+ "apihelp-login-example-login": "Enlogge.",
+ "apihelp-logout-summary": "Donn ußlogge un maach de Dahte övver de Sezong fott.",
+ "apihelp-logout-example-logout": "Donn dä aktoälle Metmaacher ußlogge.",
+ "apihelp-managetags-summary": "Verwalldongsaufjahbe em Zersammehang met Makkehronge vun Änderonge donn.",
+ "apihelp-managetags-param-reason": "Ene Jrond för et Aanlähje, Fottschmiiße, Aanschallde un Ußschallde vun dä Makkehrong, dä mer ävver nit aanjävve moß.",
+ "apihelp-managetags-param-ignorewarnings": "Ov alle Warnonge övverjange wähde sulle, di bei dämm Opdracht opkumme.",
+ "apihelp-managetags-example-create": "Donn en Makkehrong aanlähje mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
+ "apihelp-managetags-example-delete": "Schmiiß de Makkehrong mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandlaism</kbd>“ fott mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Misspelt</kbd>“.",
+ "apihelp-managetags-example-activate": "Donn en Makkehrong aktevehre mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
+ "apihelp-managetags-example-deactivate": "Donn en Makkehrong mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ nit mieh aktihv maache, mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
+ "apihelp-mergehistory-summary": "Väsjohne fun Sigge zosamme lähje.",
+ "apihelp-mergehistory-param-from": "De Övverschreff vun dä Sigg, vun däh de verjange Väsjohne zesamme jelaat wähde sulle. Kam_mer nit zesamme met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1fromid</var> bruche.",
+ "apihelp-mergehistory-param-fromid": "De Kännong vun dä Sigg, vun däh de verjange Väsjohne zesamme jelaat wähde sulle. Kam_mer nit zesamme met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1fromid</var> bruche.",
+ "apihelp-mergehistory-param-to": "De Övverschreff vun dä Sigg, wohen de verjange Väsjohne zesamme jelaat wähde sulle. Kam_mer nit zesamme met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1toid</var> bruche.",
+ "apihelp-mergehistory-param-toid": "De Kännong vun dä Sigg, wohen de verjange Väsjohne zesamme jelaat wähde sulle. Kam_mer nit zesamme met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1toid</var> bruche.",
+ "apihelp-mergehistory-param-reason": "Der Jrond för et Zesammelähje vun dä älldere Väsjohne.",
+ "apihelp-mergehistory-example-merge": "Donn de jannze älldere Väsjohne vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Oldpage</kbd>“ met dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Newpage</kbd>“ zesammelähje.",
+ "apihelp-mergehistory-example-merge-timestamp": "Donn de älldere Väsjohne vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Oldpage</kbd>“ bes zom <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2015-12-31T04:37:41Z</kbd> met dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Newpage</kbd>“ zesammelähje.",
+ "apihelp-move-summary": "Donn en Sigg ömbenänne",
+ "apihelp-move-param-from": "De Övverschreff vun dä Sigg zom Ömbenänne. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1fromid</var>“ bruche.",
+ "apihelp-move-param-fromid": "De ännong vun dä Sigg zom Ömbenänne. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1from</var>“ bruche.",
+ "apihelp-move-param-to": "De neue Övverschreff för di Sigg drop ömzebenänne.",
+ "apihelp-move-param-reason": "Der jrond för di Sigg ömzebenänne.",
+ "apihelp-move-param-movetalk": "Donn de Klaafsigg ömbenänne, wann et se jitt.",
+ "apihelp-move-param-movesubpages": "Donn de Ongersigge ömbenänne, wann müjjelesch.",
+ "apihelp-move-param-noredirect": "Donn kein Ömleidong aanlähje.",
+ "apihelp-move-param-watch": "Donn de Sigg un de Ömleijdong op dem aktoälle Metmaacher sing Oppaßleß.",
+ "apihelp-move-param-unwatch": "Donn de Sigg un de Ömleijdong uß dem aktoälle Metmaacher sing Oppaßleß eruß nämme.",
+ "apihelp-move-param-watchlist": "Donn di Sigg en dem aktoälle Metmaacher sing Oppaßleß udder nemm se eruß, donn de Enschtällonge nämme udder donn de Oppaßleß nid ändere.",
+ "apihelp-move-param-ignorewarnings": "Donn alle Warnonge övverjonn",
+ "apihelp-move-example-move": "Donn di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Badtitle</kbd>“ noh „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Goodtitle</kbd>“ önnänne, der ohne en Ömleijdong aanzelähje.",
+ "apihelp-opensearch-summary": "Em Wikki söhke mem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„Offe Söhke“\">OpenSearch</i>",
+ "apihelp-opensearch-param-search": "Noh wat söhke?",
+ "apihelp-opensearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-opensearch-param-namespace": "En wällschem Appachtemang söhke.",
+ "apihelp-opensearch-param-suggest": "Don nix wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>“ op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">false</code>“ jesaz es.",
+ "apihelp-opensearch-param-redirects": "Wi met Ömleidonge ömjonn?\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">return</code>:Jivv de Ömleidonge sällver uß.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">resolve</code>:Jiff de Sigg uß, woh de Ömleidong hen jeiht. Dat künnt winnijer wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</code>“ Sigge ußjävve.\nTradizonäll es dä Schtandatt „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">return</code>“ för „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1format=json</code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">resolve</code>“ för alle anndere.",
+ "apihelp-opensearch-param-format": "Et Fommaht zom Ußjävve.",
+ "apihelp-opensearch-param-warningsaserror": "Wann Warnonge opkumme met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format=json</kbd>“, dann donn ene Fähler vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ußjävve anschtat se ze övverjonn.",
+ "apihelp-opensearch-example-te": "Fengk Sigge, di met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Te</kbd> aanfange.",
+ "apihelp-options-param-reset": "Säz de Enschtällonge op dem Wikki singe Standatt.",
+ "apihelp-options-param-optionname": "Dä Nahme vun ene Enschtällong, di op dä Wäät jesaz wähde sulle, dä „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1optionvalue</var>“ aanjitt.",
+ "apihelp-options-param-optionvalue": "Dä Wäät vun dä Enschtällong, di vun „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1optionname</var>“ aanjejovve weed. Kann Sänkrääschte Schresche („|“) ännthallde.",
+ "apihelp-options-example-reset": "Alle Enschtälloonge retuhr schtälle.",
+ "apihelp-options-example-change": "Donn de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skin</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hideminor</kbd>“ Enschtällonge ändere.",
+ "apihelp-options-example-complex": "Donn alle Enschtällonge op der Schtandatt säze, dann säz „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skin</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">nickname</kbd>“.",
+ "apihelp-paraminfo-summary": "Holl Aanjahbe övver dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Moduhle.",
+ "apihelp-paraminfo-param-helpformat": "Et Fommaht vun de Täxe för Hölp.",
+ "apihelp-paraminfo-param-formatmodules": "Leß met de Nahme vun de Moduhle zom Fommatehre (Wäät vum „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format</var>“-Parramehter). Nemm schtatt dämm „<varlang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1modules</var>“.",
+ "apihelp-paraminfo-example-1": "Zisch Aanjahbe övver <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, un <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-parse-param-summary": "De Zersammefaßong för ze pahse.",
+ "apihelp-parse-param-redirects": "Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1page</var>“ udder „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ obb_en Ömleijdong jesaz es, donn dä follje.",
+ "apihelp-parse-param-prop": "Wat för en Schtöker aan Ennfommazjuhne holle:",
+ "apihelp-parse-paramvalue-prop-text": "Jitt dä jepahßde Täx vum Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Jitt de Schprohche-Lengks em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-categories": "Jitt de Saachjroppe em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Jitt de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fazung vun de Saachjroppe us.",
+ "apihelp-parse-paramvalue-prop-links": "Jitt de entärne Lengks em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-templates": "Jitt de Schablohne em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-images": "Jitt de Belder em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Jitt de Lengks, di noh ußerhallev vum Wikki jonn, em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-sections": "Jitt de Affschnedde em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-revid": "Deiht de Kännong vun de Väsjohn vun dä jepahßde Sigg derbei.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Deiht de Övverschreff vum jepahßde Wikkitäx derbei.",
+ "apihelp-parse-paramvalue-prop-headitems": "Jitt de Saacher för enn der <code>&lt;head&gt;</code> vun dä Sigg ze donn.",
+ "apihelp-parse-paramvalue-prop-modules": "Jitt dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Delivery system in MediaWiki for the optimized run-time loading and managing of modules\">ResourceLoader</i> sing Moduhle uß, di en dä Sigg jebruch wähde. Äntwehder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">jsconfigvars</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">encodedjsconfigvars</kbd>“ moß mer met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">modules</kbd>“ zesamme aanforrdere.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Livvert de Varrejahble vun dä Ennschtällonge vum JavaSkrep, di äxtra för heh di Sigg enjeschtallt sin.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Livvert de Varrejahble vun dä Ennschtällonge vum JavaSkrep, di äxtra för heh di Sigg enjeschtallt sin als ene Täx em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommaht.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Jitt de Engewikkilengks em jepahßde Wikkitäx uß.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Jitt de der ojinahl Wikkitäx us, dä jepahß woode es.",
+ "apihelp-parse-paramvalue-prop-properties": "Jitt devärse Eijeschafte uß, di em jepahßde Wikkitäx faßjelaat woode sen.",
+ "apihelp-parse-param-section": "Donn blohß der Ennhalld vun däm Affschnett met dä Nommer paase.\n\nWann „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd>“ enjejovve es, donn dä Täx <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</var> un de Övverschreff <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sectiontitle</var> paase, wi wänn_enne neuje Affschnett en dä Sigg derbei köhm.\n\nDä Parramehter „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd>“ es blohß zohjelohße, wann och <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">text</var> aanjejovve es.",
+ "apihelp-parse-param-sectiontitle": "De Övverschreff för dä neuje Afschnet, wann <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">section</var> = <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd> es.\n\nAnders wi beim Beärbeide vun dä Sigg weed dä Parramehter nit dorsch de <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">summary</var> ußjetuusch, wann hä fottjelohße udder läddesch es.",
+ "apihelp-parse-param-disablelimitreport": "Jiff keine Bereesch vum Vüürbereijde zom Paase (der „<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">NewPP limit report</i>“) mem Paaser singe Dahte zosamme uß.",
+ "apihelp-parse-param-disablepp": "Nämm <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1disablelimitreport</var> schtatt dämm.",
+ "apihelp-parse-param-disableeditsection": "Donn de Lenks för Affschnedde ze änndere en de Ußjahbe vum Paaser eruß lohße.",
+ "apihelp-parse-param-disabletidy": "Donn et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> vun dä Ußjahbe nit oprühme, för e Beijschpell met <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"correct and cleans up HTML and XML documents fixing markup errors and upgrading legacy code\">tidy</i>.",
+ "apihelp-parse-param-disabletoc": "Donn et Ennhaldsverzeijscheneß en de Ußjahbe vottlohße.",
+ "apihelp-parse-example-page": "Donn en Sigg pahse.",
+ "apihelp-parse-example-text": "Donn Wikkitäx pahse.",
+ "apihelp-parse-example-texttitle": "Donn Wikkitäx pahse, un jiff derför en Övverschreff för en Sigg aan.",
+ "apihelp-parse-example-summary": "Donn Zersammefaßong pahse.",
+ "apihelp-patrol-summary": "Donn en Sigg udder Väsjohn nohkike.",
+ "apihelp-patrol-param-rcid": "De Kännong in de läzde Änderonge zum Nohkike.",
+ "apihelp-patrol-param-revid": "De Kännong vun dä Väsjohn zum Nohkike.",
+ "apihelp-patrol-example-rcid": "Donn en läzde Änderonge nohkike.",
+ "apihelp-patrol-example-revid": "Donn en Väsjohn nohkike.",
+ "apihelp-protect-summary": "Änder der Siggeschoz för en Sigg.",
+ "apihelp-protect-param-title": "De Övverschreff vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
+ "apihelp-protect-param-pageid": "De Kännong vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
+ "apihelp-protect-param-reason": "Der Jrond för et Schöze udder Freijävve.",
+ "apihelp-protect-param-tags": "Donn de Makehronge aanpaße, dat se för dä Enndraach em Logbohch vum Sigge Schöze jehühre.",
+ "apihelp-protect-param-cascade": "Donn en Schotz-Kaskahd zohlohße, alsu ene Schoz för ennjeföhschte Schablohne un upjerohfe Bellder vun dä Sigg. Deiht nix, wann keine von dä aanjejovve Zoote Schoz en Kaskahd zohlöht.",
+ "apihelp-protect-param-watchlist": "Donn di Sigg ohne Bedengonge op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
+ "apihelp-protect-example-protect": "Donn en Sigg schöze.",
+ "apihelp-protect-example-unprotect": "Donn en Sigg nit mih schöze un doh för saz de Beschrängkonge op <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">all</kbd>“. <!-- https://phabricator.wikimedia.org/T141367 -->",
+ "apihelp-protect-example-unprotect2": "Donn dä Schoz för en Sigg ophävve, un doh för kein Beschrängkonge säze.",
+ "apihelp-purge-param-forcelinkupdate": "Bräng de Tabälle met de lengks obb ene neue Schtand.",
+ "apihelp-purge-example-simple": "Donn fö de Sigge „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">API</kbd>“ de zweschejeschpeijscherte Väsjohn fottschmiiße.",
+ "apihelp-purge-example-generator": "Donn fö de eezte zehn Sigge em Schtanndadd_Appachtemang de zweschejeschpeijscherte Väsjohn fottschmiiße.",
+ "apihelp-query-param-prop": "Wat för en Eijeschaffte holle för de affjerohchte Sigge.",
+ "apihelp-query-param-list": "Wat för en Leßte holle.",
+ "apihelp-query-param-meta": "Wat för en Metta_Dahte ze holle.",
+ "apihelp-query-param-rawcontinue": "Jivv Rühdahte „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">query-continue</var>“ för et Wigger Maache us.",
+ "apihelp-query-example-allpages": "Holl Väsjohne vun Sigge, di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">API</kbd>“ bejenne.",
+ "apihelp-query+allcategories-summary": "Alle Saachjroppe opzälle.",
+ "apihelp-query+allcategories-param-from": "De Saachjropp, vun woh aan opzälle.",
+ "apihelp-query+allcategories-param-to": "De Saachjropp, bes woh hen opzälle.",
+ "apihelp-query+allcategories-param-prefix": "Söhk noh Saachjroppe, woh de Övverschrevv esu aanfängk.",
+ "apihelp-query+allcategories-param-dir": "De Reijefollsch zum Zotehre.",
+ "apihelp-query+allcategories-param-min": "Jiff blohß Saachjroppe us, di winneschsdens esu vill Metjlehder han.",
+ "apihelp-query+allcategories-param-max": "Jiff blohß Saachjroppe us, di et mihts esu vill Metjlehder han.",
+ "apihelp-query+allcategories-param-limit": "Wi vell Saachjroppe ußjävve?",
+ "apihelp-query+allcategories-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Deiht de Aanzahl Sigge en dä Saachjropp derbei.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
+ "apihelp-query+allcategories-example-generator": "Holl Ennfommazjuhne övver di Saaachjroppe_Sigg för Saachjroppe, di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">List</kbd>“ bejenne.",
+ "apihelp-query+alldeletedrevisions-summary": "Donn alle fottjeschmeße Väsjohne vun enem Metmaacher udder en enem Appachemang opleßte.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kam_mer blohß met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kam_mer nit met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
+ "apihelp-query+alldeletedrevisions-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+alldeletedrevisions-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+ "apihelp-query+alldeletedrevisions-param-from": "Bejenn de Leß bei heh dä Överschreff.",
+ "apihelp-query+alldeletedrevisions-param-to": "Hühr de Leß bei heh dä Överschreff oop.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Söhk noh Sigge, woh de Övverschrevv esu aanfängk.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
+ "apihelp-query+alldeletedrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Wann als ene Jenerahtor enjesaz, brängk dat Övverschreffte un kein Kännonge vun Väsjohne.",
+ "apihelp-query+alldeletedrevisions-example-user": "Donn de läzde fuffzisch fottjeschmeße Beijdrähsch vum Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>“ opleste.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Donn de läzde fuffzisch fottjeschmeße Väsjohne em Houp-Appachemang opleste.",
+ "apihelp-query+allfileusages-summary": "Donn alle Dattei_Oprohfe opleste, och vun Datteije, di (noch) nit doh sin.",
+ "apihelp-query+allfileusages-param-from": "De Övverschreff vun dä Dattei, woh de Leß medd aanfange sull.",
+ "apihelp-query+allfileusages-param-to": "De Övverschreff vun dä Dattei, woh de Leß medd ophühre sull.",
+ "apihelp-query+allfileusages-param-prefix": "Söhk noh alle Övverschreffte, di met heh däm Täx aanfange.",
+ "apihelp-query+allfileusages-param-unique": "Donn blohß ongerscheidlijje Övverschreffte vun Datteije aanzeije. Kammer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids<code>“ bruche.\nWann als ene Jenerahtor ennjesaz, brängk et Zihlsigge, un kein Kwällesigge.",
+ "apihelp-query+allfileusages-param-prop": "Wat för en Aanjahbe ennschlehße:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Deiht de Kännonge vun dä Sigge derbei, di dat bruche. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Deiht dä Dattei ehr Övverschreff derbei.",
+ "apihelp-query+allfileusages-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+ "apihelp-query+allfileusages-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allfileusages-example-B": "Donn Övverschreffte vun Datteije aanzeije, och vun Datteije, di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Donn ongerscheidlejje Övverschreffte vun Datteije opleßte.",
+ "apihelp-query+allfileusages-example-unique-generator": "Hollt alle Övverschreffte vun Datteije, un makehr di (noch) nit doh sin.",
+ "apihelp-query+allfileusages-example-generator": "Holl Sigge, woh Datteieje dren vorkumme.",
+ "apihelp-query+allimages-summary": "Donn alle Bellder der Reih noh opzälle.",
+ "apihelp-query+allimages-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
+ "apihelp-query+allimages-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allimages-param-minsize": "Bejränz op Sigge met winneschßdens esu vill Bytes dren.",
+ "apihelp-query+allimages-param-maxsize": "Bejränz op Sigge met hüüschßdens esu vill Bytes dren.",
+ "apihelp-query+allimages-param-sha1": "Dam Bld sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sha1base36</code>“.",
+ "apihelp-query+allimages-param-sha1base36": "Däm Beld sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm op dä bahses 36. Weed em Mehdiajwikki jebruch.",
+ "apihelp-query+allimages-param-user": "Jiv blohß de Datteije uß, di vun heh däm Metmaacher huh jelahde wohde sin. Kam_mer blohß met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=timestamp</code>“ bruche. Kam_mer nit met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filterbots</code>“ zersamme bruche.",
+ "apihelp-query+allimages-param-filterbots": "Wi mer blohß de Datteije ußjitt, di vun Bots huh jelahde wohde sin. Kam_mer blohß met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=timestamp</code>“ bruche. Kam_mer nit met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1user</code>“ zersamme bruche.",
+ "apihelp-query+allimages-param-mime": "Wat för ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot ze Söhke, för e Beijschpell „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">image/jpeg</kbd>“.",
+ "apihelp-query+allimages-param-limit": "Wi vell Bellder ennsjesamp ußjävve.",
+ "apihelp-query+allimages-example-B": "Zeisch en Leß met Sigge un bejenn mem Bohchschtabe <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Zeijsch en Leß met de köözlesch huhjelahde Datteije, ähnlesch wi en [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Zeijsch en Leß met dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoote „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">image/png</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">image/gif</kbd>“.",
+ "apihelp-query+allimages-example-generator": "Zeisch Aanjahbe övver veer Bellder un bejenn mem Bohchschtabe <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Donn alle Lengk opzälle, di en e beschtemmpt Appachtemang jonn.",
+ "apihelp-query+alllinks-param-from": "De Övverschreff vun däm Lengk, woh de Leß medd aanfange sull.",
+ "apihelp-query+alllinks-param-to": "De Övverschreff vun dä Dattei, woh et Zälle ophühre sull.",
+ "apihelp-query+alllinks-param-prefix": "Söhk noh alle verlengk Övverschreffte, di met heh däm Täx aanfange.",
+ "apihelp-query+alllinks-param-unique": "Zeijsch blohß de ongerscheidlijje verlengk Sigge ier Övverschreffte. Kam_mer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids</code>“ bruche. Wam_mer et als ene Jenerahtor bruche deiht, kritt mer Zihlsiggge anschtatt vun Quällesigge.",
+ "apihelp-query+alllinks-param-prop": "Wat för en Aanjahbe ennschlehße:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Deiht de Kännonge vun dä Sigge met däm Lengk derbei. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Deiht däm lengk sing Övverschreff derbei.",
+ "apihelp-query+alllinks-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+alllinks-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+ "apihelp-query+alllinks-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+alllinks-example-B": "Donn Övverschreffte aanzeije, woh Lengks drop jonnn, och di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Leß ongerscheidlejje verlengk Övverschreffte.",
+ "apihelp-query+alllinks-example-unique-generator": "Hollt alle Övverschreffte, woh Lengks drop jonnn un makehr di (noch) nit doh sin.",
+ "apihelp-query+alllinks-example-generator": "Holl Sigge, di Lengks änthallde.",
+ "apihelp-query+allmessages-summary": "Donn em Wikki sing Täxte un Nohreescht ußjävve.",
+ "apihelp-query+allmessages-param-messages": "Wat för en Täxte un Nohreeschte usjävve. Der Schtandatt „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">*</kbd>“ bedügg alle Täxte un Nohreeschte.",
+ "apihelp-query+allmessages-param-prop": "Wat för en Eijeschaffte holle.",
+ "apihelp-query+allmessages-param-nocontent": "Wann dat ennjeschalld es, donn dä ennhalt vun de Täxte un Nohreeschte nit medd ußjävve.",
+ "apihelp-query+allmessages-param-args": "De Parramehtere för en dä Täx udder en di Nohreesch enzeföhje.",
+ "apihelp-query+allmessages-param-filter": "Jiv blohß de Täxte un Nohreesche uß, woh heh dat Täxschtöck dren änthallde es.",
+ "apihelp-query+allmessages-param-customised": "Jiv bloß de Täxte un Nohreesche en heh däm jewönschte Aanpaßongs_Zohschtand uß.",
+ "apihelp-query+allmessages-param-lang": "Jiv de Täxte un Nohreesche en heh dä Schprohch uß.",
+ "apihelp-query+allmessages-param-from": "Jiv de Täxte un Nohreesche vun heh aan uß.",
+ "apihelp-query+allmessages-param-to": "Jiv de Täxte un Nohreesche bes heh uß.",
+ "apihelp-query+allmessages-param-prefix": "Jiv de Täxte un Nohreesche met heh däm Aanfang uß.",
+ "apihelp-query+allmessages-example-ipb": "Zeijsch Täxde udder Nohreeschte di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">ipb</kbd>“ aanfange.",
+ "apihelp-query+allmessages-example-de": "Zeijsch de Täxde udder Nohreeschte „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">august</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">mainpage</kbd>“ en Deutsch aan.",
+ "apihelp-query+allpages-summary": "Donn alle Sigge der Reih noh en enem jejovve Appachtemang aan.",
+ "apihelp-query+allpages-param-from": "De Övverschreff vun dä Sigg, woh de Leß medd aanfange sull.",
+ "apihelp-query+allpages-param-to": "De Kännong vun dä Sigg, bes woh hen opzälle.",
+ "apihelp-query+allpages-param-prefix": "Söhk noh alle Övverschreffte vun Sigge, di met heh dämm Wäät bejenne.",
+ "apihelp-query+allpages-param-namespace": "De Saachjropp zom opzälle.",
+ "apihelp-query+allpages-param-filterredir": "Wat för en Sigg zem opleßte.",
+ "apihelp-query+allpages-param-minsize": "Bejränz op Sigge met winneschßdens esu vill Bytes dren.",
+ "apihelp-query+allpages-param-maxsize": "Bejränz op Sigge met hüüschßdens esu vill Bytes dren.",
+ "apihelp-query+allpages-param-prtype": "Bejränz op jeschöz Sigge.",
+ "apihelp-query+allpages-param-limit": "Wi vill Sigge zem aanzeihje?",
+ "apihelp-query+allpages-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allpages-param-filterlanglinks": "Blohß Sigge met Schprohchelengks opleßte. Opjepaß: Dat künnt Schprohchelengks övverjonn, di vun Zohsazprojramme beijschtührt wohde sin.",
+ "apihelp-query+allpages-example-B": "Zeisch en Leß met Sigge un bejenn mem Bohchschtabe <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Zeisch Aanjahbe övver veer Bellder un bejenn mem Bohchschtabe <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Zeisch der Enhalld vu de eetsde zwai Sigg un bejenn bei <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Alle Ömleidonge op e beschtemmp Appachtemang opleßte.",
+ "apihelp-query+allredirects-param-from": "De Övverschreff vun dä Ömleidong, woh de Leß medd ophühre sull.",
+ "apihelp-query+allredirects-param-to": "De Övverschreff vun dä Sigg, woh et Zälle ophühre sull.",
+ "apihelp-query+allredirects-param-prefix": "Söhk not Sigge, di esu aanfange.",
+ "apihelp-query+allredirects-param-unique": "Zeijsch blohß de ongerscheidlijje Zihl_Sigg. Kam_mer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids|fragment|interwiki</code>“ bruche. Wam_mer et als ene Jenerahtor bruche deiht, kritt mer Zihlsiggge anschtatt vun Quällesigge.",
+ "apihelp-query+allredirects-param-prop": "Wat för en Aanjahbe ennschlehße:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Deiht de Kännonge vun dä Ömleijdongssigg derbei. Kam_mer nit zersamme met „< var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</var>“ bruche.",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Deiht dä Ömleijdong ehr Övverschreff derbei.",
+ "apihelp-query+allredirects-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+allredirects-param-limit": "Wi vill sulle överhoup aanjezeisch wääde?",
+ "apihelp-query+allredirects-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allredirects-example-B": "Zeisch Zihlsigge, och di et (noch) nit jitt, met dä Kännonge, wo se her sin, un bejenn mem Bohchschtabe <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Ongerscheidlijje Sigge opleste.",
+ "apihelp-query+allredirects-example-unique-generator": "Hollt alle Zihlsigge un makkehr di (noch) nit doh sin.",
+ "apihelp-query+allredirects-example-generator": "Holl de Sigge met de Ömleidonge.",
+ "apihelp-query+allrevisions-summary": "Donn alle Väsjohne opleßte.",
+ "apihelp-query+allrevisions-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+allrevisions-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+ "apihelp-query+allrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+allrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+allrevisions-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
+ "apihelp-query+allrevisions-param-generatetitles": "Wann als ene Jenerahtor enjesaz, brängk dat Övverschreffte un kein Kännonge vun Väsjohne.",
+ "apihelp-query+allrevisions-example-user": "Donn de läzde fuffzisch Beijdrähsch vum Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>“ opleßte.",
+ "apihelp-query+allrevisions-example-ns-main": "Donn de eezde fuffzisch Väsjohne em Houp-Appachemang opleßte.",
+ "apihelp-query+mystashedfiles-summary": "Holl en Leß vun dem aktoälle Metmaacher singe upload stash.",
+ "apihelp-query+mystashedfiles-param-prop": "Wat för en Aanjahbe holle för di Datteije.",
+ "apihelp-query+mystashedfiles-param-limit": "Wi vill Datteije holle?",
+ "apihelp-query+alltransclusions-param-from": "De Övverschreff vun dä ennjeföhschte Sigg, woh de Leß medd aanfange sull.",
+ "apihelp-query+alltransclusions-param-to": "De Övverschreff vun dä ennjeföhschte Sigg, woh et Zälle ophühre sull.",
+ "apihelp-query+alltransclusions-param-prefix": "Söhk noh alle dä ennjeföhschte Sigge ier Övverschreffte, di met heh däm Täx aanfange.",
+ "apihelp-query+alltransclusions-param-unique": "Zeijsch blohß de ongerscheidlijje ennjeföhschte Sigge ier Övverschreffte. Kam_mer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids</code>“ bruche. Wam_mer et als ene Jenerahtor bruche deiht, kritt mer Zihlsiggge anschtatt vun Quällesigge.!FUZZY!!",
+ "apihelp-query+alltransclusions-param-prop": "Wat för en Aanjahbe ennschlehße:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Deiht de Kännonge vun dä Sigg derbei, di dat bruch. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Deiht de Övverschreff vun dä jebruchte Sigg derbei.",
+ "apihelp-query+alltransclusions-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+alltransclusions-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+ "apihelp-query+alltransclusions-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+alltransclusions-example-B": "Donn Övverschreffte aanzeije, och vun Sigge, di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Donn de Övverschreffte vun ennjeföhschte Sigge opleßte, ävver jehde blohß eijmohl.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Hollt alle Övverschreffte vun ennjeföhschte Sigge, un makehr di (noch) nit doh sin.",
+ "apihelp-query+alltransclusions-example-generator": "Holl Sigge, di Ennföhjonge änthallde.",
+ "apihelp-query+allusers-summary": "Donn alle aanjemälldte Metmaacher opzälle.",
+ "apihelp-query+allusers-param-from": "Dä Metmaacher_Nahme vun woh aan opzälle.",
+ "apihelp-query+allusers-param-to": "Dä Metmaacher_Nahme bes woh hen opzälle.",
+ "apihelp-query+allusers-param-prefix": "Söhk noh alle Metmaacher_Nahme, di mit heh däm Wäät bejenne.",
+ "apihelp-query+allusers-param-dir": "De Reijefollsch zum Zotehre.",
+ "apihelp-query+allusers-param-group": "Donn blohß Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+ "apihelp-query+allusers-param-excludegroup": "Donn keine Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+ "apihelp-query+allusers-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Donn alle Jroppe opleste, woh dä Metmaacher automattesch dren es.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "De Rääschde vn däm Memaacher.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Donn de Aanzahl Änderonge derbei, di dä Metmaacher em Wikki jemaat hät.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Wann aanjejovve, deihd dat heh et Dattom un de Zigg derbei, wann dä Metmaacher sesch aanjemälld hät, wann müjjelech. Dat kann läddesch blihve.",
+ "apihelp-query+allusers-param-limit": "Wi vill Nahme Metmaacher sulle mer krijje?",
+ "apihelp-query+allusers-param-witheditsonly": "Blohß Metmahcher, di och ens jät verändert han.",
+ "apihelp-query+allusers-param-activeusers": "Donn blohß Metmaacher opleßte, di {{PLURAL:$1|der läzde Daach|en de läzde $1 Dääsch|keine läzde Daach}} aktihf wohre.",
+ "apihelp-query+allusers-example-Y": "Monn metmaacher opleßte, woh de Nahme vun met <kbd>Y</kbd> aanfange.",
+ "apihelp-query+backlinks-summary": "Fengk alle Sigge, di op de aanjejovve Sigg lengke.",
+ "apihelp-query+backlinks-param-title": "De Övverschreff för noh ze Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+ "apihelp-query+backlinks-param-pageid": "De Känong vun dä Sigg zom Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+ "apihelp-query+backlinks-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+backlinks-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+backlinks-param-limit": "Wi vill Sigge ensjesamp ußjävve. Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1redirect</var>“ ennjeschalld es, weed di Beschrängkong op jehden Nivoh äxtra aanjwandt, wat bedügg, dat bes op 2 * „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> ußjejovve wähde künne.",
+ "apihelp-query+backlinks-param-redirect": "Wann de Sigg met dämm Lengk dren en Ömleijdong änthält, fengk derzoh och alle Sigge, di doh drop lengke. De Bovverjränz för de Aanzahl Sigge för opzeleßte weed hallbehrt.",
+ "apihelp-query+backlinks-example-simple": "Zeijsch Lengks op de Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main page</kbd>“.",
+ "apihelp-query+backlinks-example-generator": "Holl Ennfommazjuhne övver Sigge, di op de Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ lengke donn.",
+ "apihelp-query+blocks-summary": "Donn alle jeschpächte Metmaacher un <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße opleßte.",
+ "apihelp-query+blocks-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+blocks-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+ "apihelp-query+blocks-param-ids": "Leß vun dä Kännonge vun Schpärre för dernoh ze söhke. Kann fott blihve.",
+ "apihelp-query+blocks-param-users": "Leß vun dä Metmaacher för dernoh ze söhke. Kann fott blihve.",
+ "apihelp-query+blocks-param-ip": "Holl alle Schpärre för heh di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß udder heh dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Classless Inter-Domain Routing\">CIDR</i>-Berätt, och Schpärre vun Berätte. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3users</var>“ bruche. <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Classless Inter-Domain Routing\">CIDR</i>-Berätte vun mieh wi <code dir=\"ltr\">IPv4/$1</code> udder <code dir=\"ltr\">IPv6/$2</code> wähde nit aanjenumme.",
+ "apihelp-query+blocks-param-limit": "De hühßde Aanzahl Spärre zom opleste.",
+ "apihelp-query+blocks-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Deiht dä Spärr iehr Kännonge derbei.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Deiht dä Nahme vom jeschpächte Metmaacher derbei.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Deiht de Kännong vum jeschpächte Metmaacher derbei.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Deiht dä Nahme vun däm Metmaacher derbei, dä jeschpächt hät.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Deiht de Kännong vun däm Metmaacher derbei, dä jeschpächt hät.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Deihd et Dattum un de Uhrzigg derbei, wann jeschpächt wood.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Deihd et Dattum un de Uhrzigg derbei, wann di Schparr eröm es.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Deiht der Jrond för di Schparr derbei.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Deiht dä Berätt vun <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße för di Schparr derbei.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "makkehrt di Spärr met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">autoblock</code>“, „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">anononly</code>“, un esu.",
+ "apihelp-query+blocks-example-simple": "Schpärre opleßte.",
+ "apihelp-query+blocks-example-users": "Donn de Schpärre vun dä Metmaacher <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Alice</kbd> un <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Bob</kbd> opleßte.",
+ "apihelp-query+categories-summary": "Donn alle Saachjroppe epleßte, woh di Sigge dren sin.",
+ "apihelp-query+categories-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle för jehde Saachjropp:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Deiht dä Schlößel zom Zottehre vun dä Saachjropp derbei, en lange häxadezimahle Zahl, un der Schlößelvörsaz, woh ene Minsch jät med aanfange kann.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Deihd en Dattom un en Zigg derbei, wann di Sachjrobb aanjelaat woode es.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
+ "apihelp-query+categories-param-show": "Wat för en Zoot Saachjroppe zeije.",
+ "apihelp-query+categories-param-limit": "Wi vell Saachjroppe ußjävve?",
+ "apihelp-query+categories-param-categories": "Donn blohß heh di Saachjroppe opleßte. Dadd es johd, öm eruß ze fenge ovv en beschtemmpte Sigg en en beschtemmpte Saachjropp dren es.",
+ "apihelp-query+categories-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+categories-example-simple": "Holl en Leß med alle Saachjroppe, woh di Sigg <kbd>Albert Einstein</kbd> dren es.",
+ "apihelp-query+categories-example-generator": "Holl Aanjahbe övver alle Saachjroppe, di en dä Sigg <kbd>Albert Einstein</kbd> jebruch wähde.",
+ "apihelp-query+categoryinfo-summary": "Holl Aanjahbe övver de aanjejovve Saachjroppe.",
+ "apihelp-query+categoryinfo-example-simple": "Holl Enfomazjuhne övver „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Foo</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Bar</kbd>“.",
+ "apihelp-query+categorymembers-summary": "Donn alle Sigge en ener aanjejove saachjrobb opleste.",
+ "apihelp-query+categorymembers-param-title": "Wat för en Sachjropp opzälle. Moß aanjejovve sin. Moß der Vörsaz „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">{{ns:category}}:</kbd>“ änthallde. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+ "apihelp-query+categorymembers-param-pageid": "De Kännong vun dä Sigg zom opzälle. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+ "apihelp-query+categorymembers-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Deiht de Kännong vun de Sigge derbei.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Deihd et Dattum un de Uhrzigg derbei, wann di Sigg opjenumme wohd.",
+ "apihelp-query+categorymembers-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
+ "apihelp-query+categorymembers-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
+ "apihelp-query+categorymembers-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Der Zoteerschlößel för de Leß opzehühre, wi mer en met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=sortkey</kbd>“ kritt. Kann blohß met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</kbd>“ jebruch wähde.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Der Zoteerschlößel för de Leß opzehühre, wi mer en met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=sortkey</kbd>“ kritt. Kann blohß met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</kbd>“ jebruch wähde.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Der Aanfang vun däm Zoteerschlößel för de Leß opzehühre. Opühre deiht se <strong>för</strong>, un nit <strong>met</strong> däm. Wann dä Wäät opdouch, weed hä nit med ußjejovve. Kann blohß met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</code>“ jebruch wähde un överjeihd „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1endhexsortkey</code>“.",
+ "apihelp-query+categorymembers-param-startsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1starthexsortkey</code>“ schtatt dämm.",
+ "apihelp-query+categorymembers-param-endsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1endhexsortkey </code>“ schtatt dämm.",
+ "apihelp-query+categorymembers-example-simple": "Holl de eezde zehn Sigge de dä <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Holl anjahbe övver de eezde zehn Sigge de dä <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Holl de Leß met de ennjelogg Schrihver un de Aanzahl nahmelohse Metschrihver aan ene Sigg.",
+ "apihelp-query+contributors-param-limit": "Wi vill Metschrihver ze livvere?",
+ "apihelp-query+contributors-example-simple": "Donn de Metschrihver aan dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">KMain PageBD</kbd>“ aanzeije.",
+ "apihelp-query+deletedrevisions-param-start": "Et Dattom un de Uhrzigg, von woh aan opzälle. Weed nit jebruch, wam_mer en Leß met Kännonge vun Väsjohne aam beärbeijde sin.",
+ "apihelp-query+deletedrevisions-param-end": "Et Dattom un de Uhrzigg, bes woh hen opzälle. Weed nit jebruch, wam_mer en Leß met Kännonge vun Väsjohne aam beärbeijde sin.",
+ "apihelp-query+deletedrevisions-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
+ "apihelp-query+deletedrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+deletedrevisions-example-revids": "Donn de Aanjahbe för de fottjeschmeße Väsjohn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">123456</kbd> holle.",
+ "apihelp-query+deletedrevs-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+deletedrevs-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+ "apihelp-query+deletedrevs-param-from": "Bejenn de Leß bei heh dä Överschreff.",
+ "apihelp-query+deletedrevs-param-to": "Hühr de Leß bei heh dä Överschreff oop.",
+ "apihelp-query+deletedrevs-param-prefix": "Söhk noh Sigge, woh de Övverschrevv esu aanfängk.",
+ "apihelp-query+deletedrevs-param-unique": "Donn blohß ein Väsjohn för jehde Sigg opleßte.",
+ "apihelp-query+deletedrevs-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
+ "apihelp-query+deletedrevs-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+deletedrevs-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
+ "apihelp-query+deletedrevs-param-limit": "De hühßde Aanzahl Väsjohne för opzeleßte.",
+ "apihelp-query+deletedrevs-param-prop": "Wat för en Eijeschaffte holle:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">revid</code>:Deiht de Kännong vun dä fottjeschmeße Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">parentid</code>:Deiht de Kännong vun dä vörijje Väsjohn vun dä Sigg derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</code>:Deiht dä Metmaacher derbei, dä di Väsjohn jemaat hät.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">userid</code>:Deiht de Kännong vun däm Metmaacher derbei, dä di Väsjohn jemaat hät.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">comment</code>:Deiht de koote Zesammefaßong vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">parsedcomment</code>:Adds dä de jepaaste koote Zesammefaßong vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">minor</code>:Tags, wann di Väsjohn en kleine Minni-Änderong wohr.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">len</code>:Deiht de Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">sha1</code>:Deiht dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1 (base 16)</i> vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">content</code>:Deiht dä Täx_Ennhalt vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">token</code>:<span class=\"apihelp-deprecated\">Nit mih jewönsch.</span> Livvert de Makehrong vun dä Änderong.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">tags</code>:Makehronge vun dä Väsjohn.",
+ "apihelp-query+disabled-summary": "Dat Moduhl för Frohre ze schtälle wohd affjeschalldt.",
+ "apihelp-query+duplicatefiles-summary": "Donn alle Datteije opleßte, di desällve Prööfsomm han wi de aanjejovve Datteije.",
+ "apihelp-query+duplicatefiles-param-limit": "Wi vell datteije ußjävve.",
+ "apihelp-query+duplicatefiles-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+duplicatefiles-param-localonly": "Lohr blohß noh Datteije heh em Wikki.",
+ "apihelp-query+duplicatefiles-example-simple": "Lohr noh Datteije, di dubbelte vun dä Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ sin.",
+ "apihelp-query+duplicatefiles-example-generated": "Lohr noh Dubbelte vun alle Datteije.",
+ "apihelp-query+embeddedin-summary": "Fengk alle Sigge, di di aanjejovve Dattei enneschlehße.",
+ "apihelp-query+embeddedin-param-title": "De Övverschreff för noh ze Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+ "apihelp-query+embeddedin-param-pageid": "De Känong vun dä Sigg zom noh Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+ "apihelp-query+embeddedin-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+embeddedin-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+embeddedin-param-filterredir": "Wi de Ömleijdonge ußzottehre?",
+ "apihelp-query+embeddedin-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
+ "apihelp-query+embeddedin-example-simple": "Zeisch de Sigge, di di Schablohn „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Template:Stub</kbd>“ oprohfe.",
+ "apihelp-query+embeddedin-example-generator": "Holl Aanjahbe övve de Sigge, di di Schablohn „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Template:Stub</kbd>“ oprohfe.",
+ "apihelp-query+extlinks-summary": "Jitt alle <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URLs</i> vun Lengks noh ußerhallef vum Wikki, ävver kein Engewiki_Lenks, vundä aanjejovve Sigge uß.",
+ "apihelp-query+extlinks-param-limit": "Wi vill Lengks ußjävve?",
+ "apihelp-query+extlinks-example-simple": "Holl en Leß met Lengks noh ußerhallef vum Wikki uß dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
+ "apihelp-query+exturlusage-summary": "Donn alle Sigge upzälle med däm aanjejovve<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> dren.",
+ "apihelp-query+exturlusage-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Donn dä Sigg ier Kännong derbei.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Donn dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> derbei, dä en dä Sigg jebruch weed.",
+ "apihelp-query+exturlusage-param-protocol": "Dat Schehma uß däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>. Wann et läddesch jelohße es un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1query</var>“ aanjejogge es, es dat Schehma „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">http</kbd>“. Lohß beeds dat un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">1query</var>“ läddesch, öm alle Lengks noh ußerhallef opzeleßte.",
+ "apihelp-query+exturlusage-param-namespace": "Dat appachtemang met dä Sigge zom opzälle.",
+ "apihelp-query+exturlusage-param-limit": "Wi vill Sigge zem ußjävve?",
+ "apihelp-query+filearchive-summary": "Donn alle fottjeschmeße Datteije der Reih noh opzälle.",
+ "apihelp-query+filearchive-param-from": "De Övverschreff vun däm Beld, woh de Leß medd aanfange sull.",
+ "apihelp-query+filearchive-param-to": "De Övverschreff vun däm Beld, woh de Leß medd ophühre sull.",
+ "apihelp-query+filearchive-param-prefix": "Söhk noh alle Övverschreffte vun Bellder, di met heh dämm Wäät bejenne.",
+ "apihelp-query+filearchive-param-limit": "Wi vell Bellder ensjesamp zeröckjävve.",
+ "apihelp-query+filearchive-param-dir": "En wälsche Reijefollsch opleßte.",
+ "apihelp-query+filearchive-param-sha1": "Däm Beld singe <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sha1base36</code>“.",
+ "apihelp-query+filearchive-param-sha1base36": "Däm Beld singe <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm em 36-jer Zahlesüßtehm. Weed em Mehdiajwikki jebruch.",
+ "apihelp-query+filearchive-param-prop": "Wat för en Aanjahbe zom Beld holle:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Deiht dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1 (base 16)</i> vun dä Väsjohn vn däm Beld derbei.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä di Väsjohn huhjelahde hät.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Deiht de Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> vun dä Dattei derbei, un, wann bikannt, de Hühde, de Wiggde, un de Aanzahl Sigge.",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Et sällve, wi <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">size</code>.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Adds description för di Väsjohn vun däm Beld.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Parse the description för di Väsjohn vun däm Beld.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Adds MIME vun däm Beld.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Adds the media type vun däm Beld.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Exchangeable image file format\">EXIF</i>-Mettadahte för di Väsjohn vun däm Beld opleßte.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "deiht de bit depth för di Väsjohn derbei.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Deiht dä Nahme vun dä Dattei vun dä Aschihf_Väsjohn för alle Väsjohne, bes op de läzde, derbei.",
+ "apihelp-query+filearchive-example-simple": "Zeijsch en leß met alle fottjeschmeße Datteije.",
+ "apihelp-query+filerepoinfo-example-simple": "Holl ennfommazjuhne övver de Reppossetohreje met Datteije.",
+ "apihelp-query+fileusage-summary": "Fengk alle Sigge, di de aanjejovve Datteije bruche.",
+ "apihelp-query+fileusage-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "De Kännong för jehde Sigg.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "De Övverschreff för jehde Sigg.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Zeijsch aan, wann di Sigg en Ömleijdong es.",
+ "apihelp-query+fileusage-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
+ "apihelp-query+fileusage-param-limit": "Wi vill holle?",
+ "apihelp-query+fileusage-example-simple": "Holl Aanjahbe övver Sigge, di de Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Example.jpg]].</code>“ bruche.",
+ "apihelp-query+fileusage-example-generator": "Holl Aanjahbe övver Sigge, di de Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Example.jpg]].</code>“ bruche",
+ "apihelp-query+imageinfo-summary": "Jidd Enfommazjuhne övver Datteije un de Verjangeheid vum Huhlahde aan.",
+ "apihelp-query+imageinfo-param-prop": "Wat för en Schtöker aan Ennfommazjuhne holle:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Deihd en dattom un en Zigg aan de huhjelahde Väsjohn.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä jehde Väsjohn vun dä Dattei huhjelahde hät.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Deiht de Kännong vun jehdem Metmaacher derbei, dä en Väsohn vun dä Dattei huh jelaahde hät.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Aanmärkonge bei dä Väsjohn.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Donn di Aanmärkonge bei dä Väsjohn paase.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Deiht de kannohnesche, schtandattmähßejje, Överschreff vun dä Dattei derbei.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Jitt dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för di Dattei un de Sigg met däh iere Äkliehrong uß.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Deiht de Jrühße vun dä Dattei en \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>, de Hühde, de Breide, un, woh et se jitt, de Aanzahl Sigge derbei.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Et sällve, wi de Jrühße.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm för di Dattei derbei.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot fun dä Dattei derbei.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot fun däm Minnibelldsche vun dä Dattei derbei. Bruch en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> un dä Parramehter „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1urlwidth</code>“.",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Deiht de Mehdijje_Zoot vun dä Dattei derbei.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Exchangeable image file format\">EXIF</i>-Mettadahte för di Väsjohn vun dä Dattei oplesßte.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Deiht de Mettadahte för heh di Väsjohn vun dä Dattei oplesßte, di alld schtandattmähßesch en däm Datteifommaht änthallde sin.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Deiht dä Nahme vun dä Dattei vun dä Aschihf_Väsjohn för alle Väsjohne, bes op de läzde, derbei.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "deiht de bit depth för di Väsjohn derbei.",
+ "apihelp-query+imageinfo-param-limit": "Wi vill Väsjohne för jehde Dattei ußjävve.",
+ "apihelp-query+imageinfo-param-start": "Et Dattom un de Zigg, vun woh aan opleßte.",
+ "apihelp-query+imageinfo-param-end": "Et Dattom un de Zigg, vun woh aan opleßte.",
+ "apihelp-query+imageinfo-param-urlheight": "Ähnlesch wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1urlwidth</code>“.",
+ "apihelp-query+imageinfo-param-localonly": "Belohr blohß de Datteije em eije Wikki singe Sammlong.",
+ "apihelp-query+imageinfo-example-simple": "Holl Enformazjuhne övver de aktoälle Väsjohn fun dä Dattei „<code lang=\"mul\" xml:lang=\"mul\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“",
+ "apihelp-query+imageinfo-example-dated": "Holl Enformazjuhne övver de Väsjohne fun dä Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Test.jpg]]</code>“ vum Johr 2008 un schpääder.",
+ "apihelp-query+images-summary": "Jidd alle Datteije uß, di en dä aanjejovve Sigge sin.",
+ "apihelp-query+images-param-limit": "Wi vill Datteije holle?",
+ "apihelp-query+images-param-images": "Donn blohß heh di Datteije opleßte. Dadd es johd, öm eruß ze fenge ovv en en beschtemmpte Sigg beschtemmpte Datteije dren sin.",
+ "apihelp-query+images-param-dir": "En wälsche Reijefollsch opleßte.",
+ "apihelp-query+images-example-simple": "Holl en Leß vun Datteije, di en de „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“.",
+ "apihelp-query+images-example-generator": "Holl Ennfommazjuhne övver alle Datteije, di en de „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“ jebruch wähde.",
+ "apihelp-query+imageusage-summary": "Fengk alle Sigge, di en Beld medd ene bschtemmpte Övverschreff bruche.",
+ "apihelp-query+imageusage-param-title": "De Övverschreff för noh ze Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+ "apihelp-query+imageusage-param-pageid": "De Känong vun dä Sigg zom noh Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+ "apihelp-query+imageusage-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+imageusage-param-dir": "En wälsche Reijefollsch opleßte.",
+ "apihelp-query+imageusage-param-limit": "Wi vill Sigge ensjesamp ußjävve. Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1redirect</var>“ ennjeschalld es, weed di Beschrängkong op jehden Nivoh äxtra aanjwandt, wat bedügg, dat bes op 2 * „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> ußjejovve wähde künne.",
+ "apihelp-query+imageusage-param-redirect": "Wann de Sigg met dämm Lengk dren en Ömleijdong änthält, fengk derzoh och alle Sigge, di doh drop lengke. De Bovverjränz för de Aanzahl Sigge för opzeleßte weed hallbehrt.",
+ "apihelp-query+imageusage-example-simple": "Zeijsch Sigge, di di Dattei „<code lang=\"mul\" xml:lang=\"mul\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ bruche.",
+ "apihelp-query+imageusage-example-generator": "Holl Enformazjuhne övver de Sigge, di di Dattei „<code lang=\"mul\" xml:lang=\"mul\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ bruche.",
+ "apihelp-query+info-summary": "Holl jrondlähje Ennfommazjuhne övver di Sigg.",
+ "apihelp-query+info-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle:",
+ "apihelp-query+info-paramvalue-prop-protection": "Donn der Siggeschoz för jehde Sigg opleßte.",
+ "apihelp-query+info-paramvalue-prop-talkid": "De Kännong för de Klaafsigg för jehde Nit-Klaafsigg.",
+ "apihelp-query+info-paramvalue-prop-watched": "Donn der Zohschtand vum Oppaße för jehde Sigg opleßte.",
+ "apihelp-query+info-paramvalue-prop-watchers": "De Aanzahl Oppaßer, wann zohjelohße.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "De Aanzahl Oppaßer pro Sigg, di woh zohjelohße, de neußte Änderonge aan dä Sigg belohrt hann.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "De Kännong för de övverje'odente Sigg för jehde Klaafsigg.",
+ "apihelp-query+info-paramvalue-prop-url": "Jidd en kumplätte <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>, en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för et Beärbeide, un en kannohnesche <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för jehde Sigg uß.",
+ "apihelp-query+info-paramvalue-prop-readable": "Ov dä Metmaacher heh di Sigg lässe kann.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Zeijsch de Maier, wi en Övverschreff vun en Sigg verhaftesch aanjezeijsch weed.",
+ "apihelp-query+iwbacklinks-param-prefix": "De Engerwikki_Vörsaz.",
+ "apihelp-query+iwbacklinks-param-title": "Der Engerwikki_Lengk för noh ze söhke. Moß met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1blprefix</var>“ zersamme jebruch wähde.",
+ "apihelp-query+iwbacklinks-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
+ "apihelp-query+iwbacklinks-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Deiht dä Engerwikki_Vörsaz derbei.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Deiht de Engerwikki_Övverschreff derbei.",
+ "apihelp-query+iwbacklinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+iwbacklinks-example-simple": "Holl Sigge, di op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[wikibooks:Test]]</code>“ verlengke.",
+ "apihelp-query+iwbacklinks-example-generator": "Holl Ennfommazjuhne övver Sigge, di op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[wikibooks:Test]]</code>“ verlengke.",
+ "apihelp-query+iwlinks-summary": "Jiff alle Engerwikki_Lengks vun de aanjejovve Sigge uß.",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Deiht dä kumplätte <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> derbei.",
+ "apihelp-query+iwlinks-param-limit": "Wi vill Engerwikki_Lengks zem ußjävve?",
+ "apihelp-query+iwlinks-param-prefix": "Jiff blohß de Engerwikki_Lengks uß, di dermet aanfange.",
+ "apihelp-query+iwlinks-param-title": "Dä Engerwiki Lengk för dernoh ze söhke. Moß met <var>$1prefix</var> zesamme jebruch wähde.",
+ "apihelp-query+iwlinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+langbacklinks-param-lang": "Schprohch för dä Schprohche_Lengk.",
+ "apihelp-query+langbacklinks-param-title": "Der Schprohche_Lengk för noh ze söhke. Moß zersamme met <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1lang</code> jebruch wähde.",
+ "apihelp-query+langbacklinks-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
+ "apihelp-query+langbacklinks-param-prop": "Wat för en Prijoretähte holle:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Deiht de Kännong för de Schprohch för dä Schprohchelengk derbei.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Deiht de Övverschreff för dä Schprohchelengk derbei.",
+ "apihelp-query+langbacklinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+langbacklinks-example-simple": "Holl Sigge, di op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:fr:Test]]</code>“ verlengke.",
+ "apihelp-query+langbacklinks-example-generator": "Holl Ennfommazjuhne övver Sigge, di op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:fr:Test]]</code>“ verlengke.",
+ "apihelp-query+langlinks-summary": "Jiff alle Schprohche_Lengks vun de aanjejovve Sigge uß.",
+ "apihelp-query+langlinks-param-limit": "Wi vill Schprohche_Lengks holle?",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Deiht dä kumplätte <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> derbei.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Deiht dä Nahme vun de Moterschprohch derbei.",
+ "apihelp-query+langlinks-param-lang": "Donn blohß de Schprohche_Lengks met däm aanjejovve Schprohche_Köözel.",
+ "apihelp-query+langlinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+links-summary": "Jiff alle Lengks vun de aanjejovve Sigge uß.",
+ "apihelp-query+links-param-namespace": "Zeijsch blohß de Lengks en dä Appachtemangs.",
+ "apihelp-query+links-param-limit": "Wi vill Lengks ußjävve?",
+ "apihelp-query+links-param-titles": "Donn blohß e Lengks of heh di Övverschreffte opleßte. Dadd es johd, öm eruß ze fenge ovv en en beschtemmpte Sigg op ene beschtemmpte Övverschreff verlengk es.",
+ "apihelp-query+links-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+links-example-simple": "Holl de Lengks vun dä Sigg <kbd>Main Page</kbd>",
+ "apihelp-query+linkshere-summary": "Fengk alle Sigge, di op de aanjejovve Sigge lengke.",
+ "apihelp-query+linkshere-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "Page ID of each page.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Title of each page.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Flag if the page is a redirect.",
+ "apihelp-query+linkshere-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
+ "apihelp-query+linkshere-param-limit": "Wi vill holle?",
+ "apihelp-query+linkshere-example-simple": "Holl en Leß vun Sigge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“ lengke donn.",
+ "apihelp-query+linkshere-example-generator": "Holl Ennfommazjuhne övver Sigge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“ lengke.",
+ "apihelp-query+logevents-summary": "Holl Enndrähsch us de Logböhscher.",
+ "apihelp-query+logevents-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+logevents-param-type": "Söhk blohß heh di Zood Enndrähsch us de Logböhscher.",
+ "apihelp-query+logevents-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+logevents-param-end": "Dattum un Uhrzigg, bes wann opzälle.",
+ "apihelp-query+logevents-param-user": "Donn de Enndrähsch beschrängke ob di vun enem bechtemmpte Metmaacher.",
+ "apihelp-query+logevents-param-title": "Donn de Enndrähsch beschrängke ob di sesch obb_en beschtemmpte Sigg beträcke.",
+ "apihelp-query+logevents-param-namespace": "Donn de Enndrähsch beschrängke obb e besschtemmp Appachtemang.",
+ "apihelp-query+logevents-param-prefix": "Donn de Enndrähsch beschrängke ob di medd enem beschtemmpte Bejenn.",
+ "apihelp-query+logevents-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
+ "apihelp-query+logevents-param-limit": "Wi vill Enndrähsch enjesammp ußjävve?",
+ "apihelp-query+logevents-example-simple": "Donn de neußte Enndrähsch uß de Logböhscher opleßte.",
+ "apihelp-query+pagepropnames-summary": "Donn alle Nahme vun Eijeschaffte vun Sigge heh em Wikki opleßte.",
+ "apihelp-query+pagepropnames-param-limit": "De jrüüßte Zahl Nahme för ußzejävve.",
+ "apihelp-query+pagepropnames-example-simple": "Holl de eezde zehn Nahme vun Eijeschaffte.",
+ "apihelp-query+pageprops-summary": "Jitt devärse Eijeschafte uß, di em Ennhald vun dä Sigg faßjelaat wohde sen.",
+ "apihelp-query+pageprops-example-simple": "Holl de Eijeschaffte för di Sigge „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki</kbd>“.",
+ "apihelp-query+pageswithprop-summary": "Donn alle Sigge met bechtemmpte Sigge_Eijeschaff opleßte.",
+ "apihelp-query+pageswithprop-param-prop": "Wat för en Aanjahbe ennschlehße:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Deiht de Kännong vun de Sigge derbei.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för di Sigg derbei.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Deiht der Wäät för de Eijeschaff vun dä Sigg derbei.",
+ "apihelp-query+pageswithprop-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
+ "apihelp-query+pageswithprop-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+pageswithprop-example-generator": "Holl zohsäzlejje Aanjahbe övver de eezde zehn Sigge, woh <code>_&#95;NOTOC_&#95;</code> dren vörkütt.",
+ "apihelp-query+prefixsearch-summary": "Söhk nohm Aanfang vun dä Övverschreffte vun de Sigge.",
+ "apihelp-query+prefixsearch-param-search": "Noh wat söhke?",
+ "apihelp-query+prefixsearch-param-namespace": "En wällschem Appachtemang söhke.",
+ "apihelp-query+prefixsearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-query+prefixsearch-param-offset": "De Aanzahl vun Äjeebnesse för ze övverjonn.",
+ "apihelp-query+prefixsearch-example-simple": "Söhk noh Övverschreffte vun Sigge, di met \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">meaning</kbd>“ bejenne.",
+ "apihelp-query+protectedtitles-summary": "Donn alle Överschreffte vun Sigge opleßte, di verbodde sin, aanzelähje.",
+ "apihelp-query+protectedtitles-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs opleßte.",
+ "apihelp-query+protectedtitles-param-level": "Donn blohß de Övverschreffte vun Sigge met heh dämm Nivoh vum Sigge_Schoz opeleßte.",
+ "apihelp-query+protectedtitles-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
+ "apihelp-query+protectedtitles-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+protectedtitles-example-simple": "Donn jeschöz Övverschreffte opleßte.",
+ "apihelp-query+protectedtitles-example-generator": "Fengk Lengks op jeschözde Övverschreffte em Houp_Appachemang.",
+ "apihelp-query+querypage-param-page": "Dä {{int:specialpage}} iere Name. Opjepaß: De Jruhs- un Kleinschreff schpelld en Roll.",
+ "apihelp-query+querypage-param-limit": "De Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-query+querypage-example-ancientpages": "Donn de Äjehbneße vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:Ancientpages]]</code>“ ußjävve.",
+ "apihelp-query+random-param-namespace": "Jiff blohß sigge en heh dä Appachtemangs uß.",
+ "apihelp-query+random-param-limit": "Wi vill zohfälleje Sigge sulle ußjejovve wähde?",
+ "apihelp-query+random-param-redirect": "Nemm <kbd>$1filterredir=redirects</kbd> schtatt dämm.",
+ "apihelp-query+random-param-filterredir": "Wi de Ömleijdonge ußzottehre?",
+ "apihelp-query+random-example-simple": "Donn zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
+ "apihelp-query+random-example-generator": "Donn Ennfommazjuhne övver zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
+ "apihelp-query+recentchanges-summary": "Donn de neußte Änderonge opleßte.",
+ "apihelp-query+recentchanges-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+recentchanges-param-end": "Dattum un Uhrzigg, bes wann opzälle.",
+ "apihelp-query+recentchanges-param-namespace": "Donn de Änderonge blohß us de aanjejovve Appachtemans nämme.",
+ "apihelp-query+recentchanges-param-user": "Donn blohß Änderonge vun heh däm Metmaacher opleßte.",
+ "apihelp-query+recentchanges-param-excludeuser": "Donn kein Änderonge vun heh däm Metmaacher opleßte.",
+ "apihelp-query+recentchanges-param-tag": "Donn blohß Änderonge met heh dä Makkehrong opleßte.",
+ "apihelp-query+recentchanges-param-prop": "Donn zohsäzlejje Aanjahbe ennschlehße:",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Deihd de Makkehronge vun dä Änderong derbei.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Deihd et Dattom un de Uhrzigg vun dä Änderong derbei.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Deihd de neuje Övverschreff noh dä Änderong derbei.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Donn de Makkehronge för dä Enndraach opleßte.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Donn de Pröhvsom för di Enndrähsch oplesßte, di met enne Väsjohn zesamme hange.",
+ "apihelp-query+recentchanges-param-token": "Nemm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>“ schtatt dämm.",
+ "apihelp-query+recentchanges-param-limit": "Wi vill Änderonge ensjesammp zem aanzeije?",
+ "apihelp-query+recentchanges-param-type": "Wat för en Zoot Änneronge aanzeije?",
+ "apihelp-query+recentchanges-param-toponly": "Bloß Änderonge aanzeije, woh de neußte Väsjohn beij eruß kohm.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Wann als ene Jenerahtor enjesaz, brängk dat Kännonge vun Väsjohne un kein Övverschreffte. Enndrähsch en de neußte Änderonge der ohne en Väsjohnskännong, alsu de miehste Logbohchenndrähsch, bränge jaa nix.",
+ "apihelp-query+recentchanges-example-simple": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}}",
+ "apihelp-query+redirects-summary": "Jiff alle Ömleijdonge noh dä aanjejovve Sigge uß.",
+ "apihelp-query+redirects-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "De Sigge_Kännong för jehde Ömleijdong.",
+ "apihelp-query+redirects-paramvalue-prop-title": "De Övverschreff för jehde Ömleijdong.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Der Fragmännd_Aandeijl för jehde Ömleijdong, wann eine doh es.",
+ "apihelp-query+redirects-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
+ "apihelp-query+redirects-param-limit": "Wi vell Ömeijdonge ußjävve?",
+ "apihelp-query+redirects-param-show": "Zeijsch blohß de Ömleijdonge:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">fragment</code>:med enem Fragmännd_Aandeijl.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">!fragment</code>:der ohne ene Fragmännd_Aandeijl.",
+ "apihelp-query+redirects-example-simple": "Holl en Leß met Ömleijdonge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“ jonn.",
+ "apihelp-query+redirects-example-generator": "Holl Ennfommazjuhne övver alle Ömleijdonge op di Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Kam_mer blohß med en einzel Sigg bruche (mode #2)",
+ "apihelp-query+revisions-param-startid": "De Kännong vun dä Väsjohn vun woh aff opjezallt wähde sull.",
+ "apihelp-query+revisions-param-endid": "De Kännong vun dä Väsjohn bes woh hen opjezallt wähde sull.",
+ "apihelp-query+revisions-param-start": "Et Dattom un de Zigg vun dä Väsjohn vun woh aff opjezallt wähde sull.",
+ "apihelp-query+revisions-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+ "apihelp-query+revisions-param-user": "Väsjohne vun däm Metmaache ennschlehße.",
+ "apihelp-query+revisions-param-excludeuser": "Väsjohne vun däm Metmaache ußschlehße.",
+ "apihelp-query+revisions-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
+ "apihelp-query+revisions-param-token": "Wat för en Makkehronge för jehde Väsjohn holle.",
+ "apihelp-query+revisions-example-content": "Holl Dahte med Ennhalld för de läzde Väsjohn vun Övverschreffte \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">API</kbd>“ un \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
+ "apihelp-query+revisions-example-last5": "Holl de läzde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
+ "apihelp-query+revisions-example-first5": "Holl de eezde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
+ "apihelp-query+revisions-example-first5-after": "Holl de eezde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“, di noh em eezde Mai em Johr 2006 änschtannde sin.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Holl de ehzde Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ di nit vun dämm nahmelohse Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">127.0.0.1</kbd>“ jemaht wohde.",
+ "apihelp-query+revisions-example-first5-user": "Holl de eezde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“, di vum Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki default</kbd>“ aanjelahd wohde.",
+ "apihelp-query+revisions+base-param-prop": "Wat för en Eijeschaffte vun dä Väsjohn holle.",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "Dw Kännong vu dä Väsjohn.",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Dattom un Zigg vun dä Väsjohn.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Dä Metmaacher, dä di Väsjohn jemaat hät.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "Däm Metmaacher sing Kännong, dä di Väsjohn aanjelaat hät.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Der Ömvang en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> vun dä Väsjohn.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "De <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1 (base 16)</i> Prööfsomm vun dä Väsjohn.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "De Aanmärkong vum Metmaacher för di Väsjohn.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "De jepaaste Aanmärkong vum Metmaacher för di Väsjohn.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Der Täx vun dä Väsjohn.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Makkehronge vun dä Väsjohn.",
+ "apihelp-query+revisions+base-param-limit": "Wi vill Väsjohne sulle ußjejovve wähde?",
+ "apihelp-query+revisions+base-param-section": "Holl blohß der Ennhald vun däm Affschnett met heh dä Nommer.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Donn dä Täx ömsäze wi vör em Affseschere, ih de Ongerscheijde erus jefonge wähde. Jeihd blohß mem Parramehter <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1difftotext</var> zesamme.",
+ "apihelp-query+search-summary": "Söhk em jannze Täx.",
+ "apihelp-query+search-param-search": "Söhk noh alle Övverschreffte vun Sigge udder Ennhallde, woh dä Wäät drop paß. Mer kann heh met besönder Aufjahbe beim Söhke schtälle, jeh nohdämm wadd_em Wikki sing Projramm för et Söhke esu alles kann.",
+ "apihelp-query+search-param-namespace": "Söhk blohß en heh dä Appachtemangs.",
+ "apihelp-query+search-param-what": "Wat för en Aat ze Söhke?",
+ "apihelp-query+search-param-info": "Wat för en Metta_Dahte ußzejävve.",
+ "apihelp-query+search-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Deiht de Aanzahl Wööter en dä Sigg derbeij.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Deihd et Dattum un de Uhrzigg derbei, wann di Sigg et läz veränndert wohd.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Deiht dä zopaß Ömleijdong ehr Övverschreff derbei.",
+ "apihelp-query+search-param-limit": "Wi vill Sigge ensjesamp ußjävve?",
+ "apihelp-query+search-param-interwiki": "Donn de Engerwiki Lengks met ußjävve beim Söhke, wann_er doh sin.",
+ "apihelp-query+search-example-simple": "Söhk noh „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">meaning</kbd>“.",
+ "apihelp-query+search-example-text": "Söhk en Täxte noh „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">meaning</kbd>“.",
+ "apihelp-query+search-example-generator": "Holl anjahbe övver di Sigge, di jefonge wähde beim söhke noh \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">meaning</kbd>“",
+ "apihelp-query+siteinfo-summary": "Jiff alljemeine Ennfommazjuhne övver heh di ẞaid_uß.",
+ "apihelp-query+siteinfo-param-prop": "Wat för en Ennfommazjuhne holle:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Alljemeine Aanjabe zom Süßtehm.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Jivv Schtatistike vum Wikki uß.",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Jid en Leß med de verföhschbahre Kännonge us.",
+ "apihelp-query+siteinfo-param-filteriw": "Donn blohß de Enndrähsch för heh et Wikki udder blohß de Enndrähsch för ußerhallef en di Leß.",
+ "apihelp-query+siteinfo-param-showalldb": "Donn alle ẞööver för de Dahtebangke opleßte, nit blohß di am mihßte hengerher sin.",
+ "apihelp-query+siteinfo-param-numberingroup": "Donn de Aanzahl Metmaacher en de Jroppe vun Metmaacher opleßte.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Schprohche_Köözelle för de Namhme vun Schprohche en heh dä Schprohch — der bäßte Träffer zällt - un de Namhe vun de Bedehnbovverfläsche.",
+ "apihelp-query+siteinfo-example-simple": "Holl Ennfommazjuhe övver heh di ẞait.",
+ "apihelp-query+siteinfo-example-interwiki": "Holl en Leß met de Vörsäz för de Engerwiki_Lenks em eije Wikki.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Es et sällve wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</code>“ un kütt vun fröjere Väsjohne.",
+ "apihelp-query+tags-summary": "Leß de Makehronge vun Änderonge.",
+ "apihelp-query+tags-param-limit": "De hühßde Zahl Makkehronge zom Opleste.",
+ "apihelp-query+tags-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+tags-paramvalue-prop-name": "Deiht dä Nahme vun dä Makkehrong derbei.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Deiht der Täx vum Wikki för de Makkehrong derbei.",
+ "apihelp-query+tags-paramvalue-prop-description": "Deiht dä Beschrievongstäx vun dä Makkehrong derbei.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Deiht de Aanzahl vun Väsjohne un Enndrähsch em Logbohch derbei, di di Makkehrong han.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Jivv aan, ov di Makkehrong övverhoup doh es.",
+ "apihelp-query+tags-paramvalue-prop-source": "Hollt de Kwälle vun de Makkehrong, dat kann ömfaße: „<samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">extension</samp>“ för Makkehronge, di vun Zohsazprojramme faßjelaat wähde, un „<samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">manual</samp>“ för Makkehronge, di vun de Metmaacher vun Hand verjovve wohde.",
+ "apihelp-query+tags-paramvalue-prop-active": "Ov de Makkehrong emmer noch aktihv es.",
+ "apihelp-query+tags-example-simple": "Leß de verföhschbahre Makkehronge op.",
+ "apihelp-query+templates-summary": "Jidd alle Datteije uß, di en dä aanjejovve Sigge enjebonge sin.",
+ "apihelp-query+templates-param-namespace": "Zeijsch blohß de Schablohne en heh däm Appachtemang.",
+ "apihelp-query+templates-param-limit": "Wi vill Schablohne sulle ußjejovve wähde?",
+ "apihelp-query+templates-param-templates": "Donn blohß heh die Schablohne opleßte. Johd ze bruche zom Pröhve, ov en beschtemmpte Sigg en beschtemmpte Schlohn bruche deiht.",
+ "apihelp-query+templates-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+templates-example-simple": "Holl di Schablohne, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ jebruch wähde.",
+ "apihelp-query+templates-example-generator": "Holl Ennfommazjuhneövver di Sigge met di Schablohne, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ jebruch wähde.",
+ "apihelp-query+templates-example-namespaces": "Holl Sigge uß de {{ns:user}} un {{ns:template}} Appachtemangs, di en di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ enjeschloße wähde.",
+ "apihelp-query+transcludedin-summary": "Fengk alle Sigge, di di aanjejovve Sigge enneschlehße.",
+ "apihelp-query+transcludedin-param-prop": "Wat för en Eijeschaffte holle:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "De Kännong för jehde Sigg.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "De Övverschreff för jehde Sigg.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Zeijsch aan, wann di Sigg en Ömleijdong es.",
+ "apihelp-query+transcludedin-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs ennschlehße.",
+ "apihelp-query+transcludedin-param-limit": "Wi vill ußjävve.",
+ "apihelp-query+transcludedin-example-simple": "Holl en Leß met Sigge, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ ennjeschloße wähde.",
+ "apihelp-query+transcludedin-example-generator": "Holl Ennfommazjuhne övver Sigge, di vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ ohjerohfe wähde.",
+ "apihelp-query+usercontribs-summary": "Holl alle Änderonge vun enem Metmaacher.",
+ "apihelp-query+usercontribs-param-limit": "De hühßte Aanzahl vun Meddeilonge för zeröck ze jävve",
+ "apihelp-query+usercontribs-param-start": "Dattom un Zigg vun woh aan ußjävve.",
+ "apihelp-query+usercontribs-param-end": "Dattom un Zigg bes woh hen ußjävve.",
+ "apihelp-query+usercontribs-param-user": "De Metmaacher för di mer Beijdrähsch holle welle.",
+ "apihelp-query+usercontribs-param-userprefix": "Holl beijdrähsch för alle Metmaacher, dänne ier Nahme met heh däm Wääd aanfange. Övverschriehv „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1user</code>“.",
+ "apihelp-query+usercontribs-param-namespace": "Donn blohß Beijdrähsch en heh dä Appachtemangs opleßte.",
+ "apihelp-query+usercontribs-param-prop": "Donn zohsäzlejje Aanjahbe ennschlehße:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Donn de Kännong för jehde Sigg un jehe Väsjohn derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Deihd et Dattom un de Uhrzigg vun dä Änderong derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Deihd de Zosammefaßong vun dä Änderong derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Deihd de jepaaste Zosammefaßong vun dä Änderong derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Deihd de neuje Jrühße noh dä Änderong derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Deihd de Änderong vun dä Jrühße vun dä Änderong derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Deihd de Makkehronge vun dä Änderong derbei.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Nohjelohrte Änderonge makkehre.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Donn de Makkehronge vun dä Änderong opleßte.",
+ "apihelp-query+usercontribs-param-tag": "Donn blohß Väsjohne met heh dä Makehrong opleßte.",
+ "apihelp-query+usercontribs-param-toponly": "Bloß Änderonge aanzeije, woh de neußte Väsjohn beij eruß kohm.",
+ "apihelp-query+usercontribs-example-user": "Zeijsch dem Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>“ sing Beijdrähsch.",
+ "apihelp-query+usercontribs-example-ipprefix": "Zeijsch de Beijdrähsch vun alle <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße, di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">192.0.2.</kbd>“ bejenne.",
+ "apihelp-query+userinfo-summary": "Holl Aanjahbe övver dä aktoälle Metmaacher.",
+ "apihelp-query+userinfo-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Donn alle Jroppe opleßte, woh dä heh Metmaacher dren es.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Donn alle Jroppe opleßte, woh dä heh Metmaacher aotomattesch dren es.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Donn alle Rääschte opleßte, di dä Metmaacher hät.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Donn alle Jroppe opleßte, woh dä heh Metmaacher eine bei donn udder eruß nämme kann.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Donn alle Enschtällonge opleßte, di dä heh Metmaacher jesaz hät.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Donn heh däm Metmaacher sing Aanzahl Ännderonge derbeij.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Donn alle Mängebeschrängkonge opleßte, di heh dä Metmaacer hät.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Deiht däm Metmaacher singe reeschtejje Nahme derbei.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Donn de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß vun heh däm Metmaacer opleßte, un et Dattom, wann di et läz beschtähtesch woode es.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Donn et Dattom vun dämm Metmaacher singe eetze Aanmäldong derbei.",
+ "apihelp-query+userinfo-example-simple": "Holl Aanjahbe övver dä aktoälle Metmaacher.",
+ "apihelp-query+userinfo-example-data": "Holl zohsäzlejje Aanjahbe övver dä aktoälle Metmaacher.",
+ "apihelp-query+users-summary": "Holl Aanjahbe övver en Leß vun Metmaacher.",
+ "apihelp-query+users-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+ "apihelp-query+users-paramvalue-prop-groups": "Donn alle Jroppe opleßte, woh all de Metmaacher dren sin.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Donn alle Jroppe opleßte, woh ene Metmaacher aotomattesch dren es.",
+ "apihelp-query+users-paramvalue-prop-rights": "Donn alle Rääschte opleßte, di alle Metmaacher han.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Donn däm Metmaacher sing Aanzahl Ännderonge derbeij.",
+ "apihelp-query+users-paramvalue-prop-registration": "Donn et Dattom vun dämm Metmaacher singe eetze Aanmäldong derbei.",
+ "apihelp-query+users-param-users": "En Leß vun Metmaacher för Aanjahbe drövver ze holle.",
+ "apihelp-query+users-param-token": "Nemm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>“ schtatt dämm.",
+ "apihelp-query+users-example-simple": "Holl Aanjahbe för dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>.",
+ "apihelp-query+watchlist-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+watchlist-param-end": "Et Dattum un Uhrzigg, bes wann opzälle.",
+ "apihelp-query+watchlist-param-namespace": "Donn de Änderonge blohß us de aanjejovve Appachtemans nämme.",
+ "apihelp-query+watchlist-param-user": "Donn blohß Änderonge vun heh däm Metmaacher opleßte.",
+ "apihelp-query+watchlist-param-excludeuser": "Donn kein Änderonge vun heh däm Metmaacher opleßte.",
+ "apihelp-query+watchlist-param-limit": "Wi vell Äjehbneße ennsjesammp pro Oprohv ußjejovve wähde sulle.",
+ "apihelp-query+watchlist-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Donn de Kännong vun de Väsohne un de Sigge derbei,",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Mähd en Övverschhreff övver di Sigg.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Deihd de Makkehronge vun dä Änderong derbei.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä di Änderong jemaat hät.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Deiht de kännong vn äm Metmaacher derbei, dä di Änderong jemaat hät.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Deihd de Zosammefaßong vun dä Änderong derbei.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Deihd de jepaaste Zosammefaßong vun dä Änderong derbei.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Deihd et Dattom un de Uhrzigg vun dä Änderong derbei.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Makkehrt de nohjelohrte Ännderonge.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Deiht de vörrijje un de neuje Läng vun dä Sigg derbei.",
+ "apihelp-query+watchlist-param-type": "Wat för en Änderonge aanzeije:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Jewöhnlejje Ännderonge aan Sigge.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Änderonge vun Ußerhallef.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Neu aanjelaate Sigge.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Enndrähsch em Logbohch",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Änderonge aan de Zohjehüreshkeit zoh Saachjroppe.",
+ "apihelp-query+watchlistraw-summary": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß holle.",
+ "apihelp-query+watchlistraw-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
+ "apihelp-query+watchlistraw-param-limit": "Wi vell Äjehbneße ennsjesammp pro Oprohv ußjejovve wähde sulle.",
+ "apihelp-query+watchlistraw-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle:",
+ "apihelp-query+watchlistraw-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+watchlistraw-example-simple": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß opleßte.",
+ "apihelp-removeauthenticationdata-example-simple": "Versöhk dem aktoäle Metmaacher sing Dahte för <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">FooAuthenticationRequest</kbd> fott ze nämme.",
+ "apihelp-resetpassword-example-email": "Schegg en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> mem Passwod neu säze aan alle Matmaacher met dä Addräß <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Versione fottschmieße un widder zeröck holle.",
+ "apihelp-revisiondelete-param-hide": "Wat för jehde Väsjohn ze veschteijsche.",
+ "apihelp-revisiondelete-param-show": "Wat för jehde Väsjohn zerökzeholle.",
+ "apihelp-revisiondelete-param-suppress": "Ov dat och för de Wiki-Köbesse verschtoche wähde sull, wie för jede Andere.",
+ "apihelp-rollback-param-title": "De Övverschreff vun dä Sigg för di_j_en vörrejje Väsjohn zeröckzeholle es. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+ "apihelp-rollback-param-pageid": "De Kännong vun dä Sigg för di_j_en vörrejje Väsjohn zeröckzeholle es. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+ "apihelp-rollback-param-watchlist": "Donn di Sigg op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Donn alle Sigge beärbeide, di en Oppaßleßte dren sin.",
+ "apihelp-stashedit-param-title": "De Övverschreff vu dä Sigg för zom Änndere.",
+ "apihelp-stashedit-param-section": "Däm Affschnett sing Nommer. „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr>0</kbd>“ brängk der eezde Affschnett, dä keijn Övverschreff hät, „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr>new</kbd>“ brängg_ene neuje Affschnett.",
+ "apihelp-stashedit-param-sectiontitle": "De Övverschreff för ene neuje Afschnett",
+ "apihelp-stashedit-param-text": "Dä Sigg ehre Ennhalld.",
+ "apihelp-stashedit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
+ "apihelp-stashedit-param-summary": "Zosammefaßong änndere",
+ "apihelp-tag-summary": "Donn Makkehronge vun einzel Väsjohne udder Enndraähsch em Logbohch fott nämme udder se verjävve.",
+ "apihelp-tag-param-rcid": "Ein udder mih Kännonge uß de neuste Ännderonge, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
+ "apihelp-tag-param-revid": "Ein Kännong udder mih, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
+ "apihelp-tag-param-logid": "Ein Kännong udder mih uß de neuste Änderonge, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
+ "apihelp-tag-param-add": "De Makkehrong zom Zohföhje. Bloß de vun Hand aanjelaat Makkehronge künne heh zohjeföhsch wähde.",
+ "apihelp-tag-param-remove": "Makkehronge zom fott nämme. Blohß vun Hand jesaz un kumplätt onjesaz Makkehronge künne fott jenumme wähde.",
+ "apihelp-tag-param-reason": "Dä Jrond för di Änderong.",
+ "apihelp-tag-example-rev": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandalism</kbd>“ vun dä Väsjohn met dä Kännong „<kbd>123</kbd>“ fott nämme, der ohne ene Jrond ze nänne.",
+ "apihelp-tag-example-log": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ vun dämm Enndrahch met dä Kännong „<kbd>123</kbd>“ em Logbohch fott nämme un als Jrond draaach „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Wrongly applied</kbd>“ enn.",
+ "apihelp-unblock-summary": "Don en Schpärr för ene Metmaacher ophävve.",
+ "apihelp-unblock-param-reason": "Der Jrond för de Schpärr opzehävve.",
+ "apihelp-unblock-param-tags": "Donn de Makehronge änndere, di för dä Enndraach em Logbohch vum Schpärre jesaz wähde sulle.",
+ "apihelp-undelete-param-title": "De Övverschreff vun dä Sigg zom zerök holle.",
+ "apihelp-undelete-param-reason": "Der Jrond för et Zerök holle.",
+ "apihelp-undelete-param-tags": "Donn de Makehronge aanpaße, dat se för dä Enndraach em Logbohch vum Sigge fott Schmihße jehühre.",
+ "apihelp-undelete-param-watchlist": "Donn di Sigg ohne Bedengonge op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
+ "apihelp-undelete-example-page": "Schmiiß de Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ fott.",
+ "apihelp-undelete-example-revisions": "Holl zwai Väsjohne vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ zerök.",
+ "apihelp-upload-summary": "Donn en Dattei huh lahde, udder holl der Zohschtand vun de onfähdesch huhjelahde Datteije .",
+ "apihelp-upload-extended-description": "Et jitt ongerscheidlejje Metohde:\n* Donn de Ennhallde vun de Datteije tiräk huhlahde, övver der Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“.\n* Donn de Datteije en en Aanzahl Rötsche huhlahde, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filesize</var>“, „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1chunk</var>“, un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1offset</var>“.\n* Lohß der ẞööver vum Wikki en Dattei vun enem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> holle, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1url</var>“.\n* Lohß en Dattei fähdesch huhlahde, di zeläz nit fähdesch wohd, un met Warnonge schtonn jeblevve es övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</var>“.\nOpjepaß: dä „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">POST</code>“-Befähl vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i> moß als e Dattei-Huhlahde aanjeschtüßße wähde, allsu met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">multipart/form-data</code>“, wam_mer dä Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“ scheck.",
+ "apihelp-upload-param-filename": "Zihl-Dateiname.",
+ "apihelp-upload-param-text": "Der aanfänglesche Täx op Sigge för neu aanjelahte Datteije.",
+ "apihelp-upload-param-watch": "Op di Sigg heh oppaßße.",
+ "apihelp-upload-param-watchlist": "Donn di Sigg op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
+ "apihelp-upload-param-ignorewarnings": "Donn alle Warnonge övverjonn.",
+ "apihelp-upload-param-file": "Dä Dattei ier Enhallde.",
+ "apihelp-upload-param-url": "Der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>, öm di Dattei dervun ze holle.",
+ "apihelp-upload-param-sessionkey": "Et sälve wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</code>“, wat mer emmer noch noch bruche kann, weil mer et fröhjer alld ens esu hatte.",
+ "apihelp-upload-param-filesize": "De Datteijrühße vum jannze Huhlahde.",
+ "apihelp-upload-example-url": "Vun enem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> huhlahde.",
+ "apihelp-upload-example-filekey": "Don et Huhlahde fähdesch maace, wat wähje Warnonge nit johd jejange wohr.",
+ "apihelp-userrights-param-user": "Metmaacher_Nahme.",
+ "apihelp-userrights-param-userid": "Enem Metmaacher sing Kännong.",
+ "apihelp-userrights-param-add": "Donn dä Metmaacher en heh di Jroppe eren.",
+ "apihelp-userrights-param-remove": "Donn dä Metmaacher us heh dä Jroppe eruß nämme.",
+ "apihelp-userrights-param-reason": "Dä Jrond för di Änderong.",
+ "apihelp-watch-summary": "Donn di Sigg en däm aktoälle Metmaacher singe Oppaßless eren udder schmihß se erus.",
+ "apihelp-watch-example-watch": "Don di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ en de Oppaßleß.",
+ "apihelp-watch-example-unwatch": "Schmiiß di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ uß dä Oppaßleß erus.",
+ "apihelp-watch-example-generator": "Donn op de eezte paa Sigge em Schtanndadd_Appachtemang oppaße.",
+ "apihelp-format-example-generic": "Jiff wadd_erus kohm em Fommaht $1 us.",
+ "apihelp-json-summary": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommahd ußjävve.",
+ "apihelp-json-param-ascii": "Wann aanjejovve, deiht alle nit-<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"American Standard Code for Information Interchange\">ASCII</i>-Zeijsche met hexadezimahle !escape-Sequänze koddehre. Dadd es der Schtandatt, wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">formatversion</var>“ <kbd>1</kbd> es.",
+ "apihelp-jsonfm-summary": "Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommaht ußjävve un för schöhn en et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> wandele.",
+ "apihelp-none-summary": "Donn nix ußjävve.",
+ "apihelp-php-summary": "Dahte em hengernader jeschrevve <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i>-Fommaht ußjävve.",
+ "apihelp-phpfm-summary": "Dahte em hengernannder jeschrevve <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i>-Fommaht ußjävve un för schöhn en et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> wandele.",
+ "apihelp-rawfm-summary": "Dahte, met de Aandeijle för et Fählersöhke, em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommaht ußjävve un för schöhn en et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> wandele.",
+ "apihelp-xml-summary": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommahd ußjävve.",
+ "apihelp-xml-param-includexmlnamespace": "Wann aanjejovve, deihd en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Appachtemand derbei.",
+ "apihelp-xmlfm-summary": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommahd schöhn jemaht met <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ußjävve.",
+ "api-format-title": "Wat et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ußjohv.",
+ "api-format-prettyprint-header-only-html": "Dat heh es en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>_Daaschtällong un för et Fähersöhke jedaach. Dadd is för Aanwändongsprojramme nit ze bruche.\n\nEn de [[mw:Special:MyLanguage/API|complete Dokkemäntazjohn]] un de [[Special:ApiHelp/main|API Hölp_Sigg]] kam_mer doh mih drövver lässe.",
+ "api-pageset-param-titles": "En Leß vun Övverschreffte för ze beärbeide.",
+ "api-pageset-param-pageids": "En Leß vun Kännonge vun Sigge för ze beärbeide.",
+ "api-pageset-param-revids": "En Leß vun Kännonge vun Väsjohne för ze beärbeide.",
+ "api-help-title": "Hölp för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> vum MehdijaWikki.",
+ "api-help-main-header": "Houp_Moduhl",
+ "api-help-flag-deprecated": "Dat Moduhl es nimmih johd jeligge.",
+ "api-help-flag-readrights": "Heh da Modhul bruch et Rääsch zum Lässe.",
+ "api-help-flag-writerights": "Heh da Modhul bruch et Rääsch zom Schriive.",
+ "api-help-flag-mustbeposted": "Heh dat Modhul nemmp blohß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">POST</code>-Opdrähschd aan.",
+ "api-help-flag-generator": "Heh dat Modhul kam_mer als ene Jenerahtor ennsäze.",
+ "api-help-source": "Quäll: $1",
+ "api-help-source-unknown": "Quäll: <span class=\"apihelp-unknown\">onbikannt</span>",
+ "api-help-license": "Lezänz: [[$1|$2]]",
+ "api-help-license-noname": "Lezänz: [[$1|Loor noh dämm Lengk]]",
+ "api-help-license-unknown": "Lezänz: <span class=\"apihelp-unknown\">onbikannt</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parramehter|Parramehtere|Parramehter}}:",
+ "api-help-param-deprecated": "Meßjevällesch.",
+ "api-help-param-required": "Heh dä Parramehter es nühdesch.",
+ "api-help-datatypes-header": "Zoote Dahte",
+ "api-help-param-type-limit": "Zoot: en jannze Zahl udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max</kbd>“",
+ "api-help-param-type-integer": "Zoot: {{PLURAL:$1|1=en jannze Zahl|2=en Leß met jannze Zahle}}",
+ "api-help-param-type-boolean": "Zoot: Boolsch ([[Special:ApiHelp/main#main/datatypes|Einjzelheijte]])",
+ "api-help-param-type-timestamp": "Zoot: {{PLURAL:$1|1=en Dattomm un en Zigg|2=en Leß met Aanjahbe us Dattom un Zigg}} (de [[Special:ApiHelp/main#main/datatypes|zohjelohße Fommahte]])",
+ "api-help-param-type-user": "Zoot: {{PLURAL:$1|1=ene Metmaacher_Nahme|2=en Leß met Metmaacher_Nahme}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Eijne Wäät|2=Wääte met <kbd>{{!}}</kbd> derzwesche}} vun dänne heh: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Moß läddesch sin|Kann läddesch sin, udder $2}}",
+ "api-help-param-limit": "Nit mih wi $1 sin zohjelohße.",
+ "api-help-param-limit2": "Nit mih wi $1 sin zohjelohße, ävver $2 för de Bots.",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Dä Wäät darref|2=De Wääte dörrve}} nit kleijener wi $2 sin.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Dä Wäät darref|2=De Wääte dörrve}} nit jrühßer wi $3 sin.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Dä Wäät moß|2=De Wääte möße}} nit zwesche $2 un $3 lijje.",
+ "api-help-param-upload": "Moß als Datteij huhjelahde wähde met dä Eijeschaff „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">multipart/form-data</code>“.",
+ "api-help-param-multi-separate": "Donn de Wääte met <kbd>|</kbd> derzwesche tränne.",
+ "api-help-param-multi-max": "De jrühßte müjjelesche Zahl es {{PLURAL:$1|$1}}, un {{PLURAL:$2|$2}} för Botprojramme.",
+ "api-help-param-default": "Schtandatt: $1",
+ "api-help-param-default-empty": "Schtandatt: <span class=\"apihelp-empty\">(läddesch)</span>",
+ "api-help-param-disabled-in-miser-mode": "Dadd es wäje em [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]] affjeschalldt.",
+ "api-help-param-limited-in-miser-mode": "<strong>Opjepaß:</strong> Weil der [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]] enjeschalld es, künne heh winnijer wi <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> Äjehpneße ußjejejovve wähde, vör em Wigger_Mache. En Jränzfäll künne et Noll sin.",
+ "api-help-param-direction": "En wälsche Reihjefollsch opleßte:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">newer</code>:De Ählsde et eez. Opjepaß: „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1start</code>“ moß fröhjer sin wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1end</code>“.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">older</code>:De Neuste et eez, der Schtanndatt. Opjepaß: „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1start</code>“ moß schpääder sin wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1end</code>“.",
+ "api-help-param-continue": "Wann mih ze holle es, nemm dat för wigger ze maache.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(nix drövver bikannt)</span>",
+ "api-help-examples": "{{PLURAL:$1|Beijschpell|Beijschpelle|Beijschpell}}:",
+ "api-help-permissions": "{{PLURAL:$1|Rääsch|Rääschde|Rääsch}}:",
+ "api-help-permissions-granted-to": "Jejovve aan: $2{{PLURAL:$1|}}",
+ "api-help-right-apihighlimits": "Donn de Beschängkonge vun Opdrähscht aan de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> kleiner maache (langsamme Opdrähscht: $1; flöcke Opdrähscht: $2). De Beschränkonge för lahme Opdrähscht jällde och för Parramehtere met vill Wähte.",
+ "api-help-open-in-apisandbox": "<small>[en de Sandkeß opmaache]</small>",
+ "apierror-timeout": "Dä ẞööver hät en dä jewennde Zick nit jeantwoot.",
+ "api-credits-header": "Aanäkännong för Beijdrähsch",
+ "api-credits": "Dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Äntweklere:\n* Roan Kattouw (Aanföhrer zigg em Säptämber 2007 bes 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Bejenner un Aanföhrer vum Säptämber 2006 bes Säptämber 2007)\n* Brad Jorsch (Aanföhrer vun 2013 bes hük)\n\nDoht Ühr Aanmärkonge, Vörschlähsch un Frohre aan de Meijlengleß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">mediawiki-api@lists.wikimedia.org</code> scheke, Ühr Vörschlähsch un Fählermälldong doht op <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">https://phabricator.wikimedia.org/</code> ennjävve."
+}
diff --git a/www/wiki/includes/api/i18n/ku-latn.json b/www/wiki/includes/api/i18n/ku-latn.json
new file mode 100644
index 00000000..3b477384
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ku-latn.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal",
+ "Macofe",
+ "Ghybu"
+ ]
+ },
+ "apihelp-block-summary": "Bikarhênerekî asteng bike.",
+ "apihelp-block-param-reason": "Sedemê bo astengkirinê.",
+ "apihelp-createaccount-param-name": "Navê bikarhêner.",
+ "apihelp-delete-summary": "Rûpelekê jê bibe.",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd>ê jê bibe.",
+ "apihelp-edit-summary": "Rûpelan çêke û biguherîne.",
+ "apihelp-edit-param-sectiontitle": "Sernavê bo beşeke nû.",
+ "apihelp-edit-param-text": "Naveroka rûpelê.",
+ "apihelp-edit-param-minor": "Guhertina biçûk.",
+ "apihelp-edit-param-createonly": "Heke ku rûpel hebe wê neguherîne.",
+ "apihelp-edit-example-edit": "Rûpelekê biguherîne.",
+ "apihelp-emailuser-summary": "Ji bikarhêner re e-nameyekê bişîne.",
+ "apihelp-emailuser-param-target": "Bikarhênerê ku e-name jê rê bê şandin.",
+ "apihelp-expandtemplates-param-title": "Sernavê rûpelê.",
+ "apihelp-feedcontributions-param-deletedonly": "Tenê beşdariyên jêbirî nîşan bide.",
+ "apihelp-feedcontributions-param-hideminor": "Guherandinên biçûk veşêre.",
+ "apihelp-feedrecentchanges-param-hideminor": "Guherandinên biçûk veşêre.",
+ "apihelp-feedrecentchanges-param-hidebots": "Guherandinên botan veşêre.",
+ "apihelp-feedrecentchanges-example-simple": "Guherandinên dawî nîşan bide.",
+ "apihelp-feedrecentchanges-example-30days": "Guherandinên dawî yên 30 rojan nîşan bide",
+ "apihelp-filerevert-param-comment": "Şîroveyê bar bike.",
+ "apihelp-help-example-recursive": "Hemû alîkarî di rûpelekê de.",
+ "apihelp-login-param-name": "Navê bikarhêner.",
+ "apihelp-login-param-password": "Şîfre.",
+ "apihelp-login-example-login": "Têkeve.",
+ "apihelp-move-param-reason": "Sedemê bo guherandina nav.",
+ "apihelp-move-param-ignorewarnings": "Guh nede hişyariyan.",
+ "apihelp-opensearch-example-te": "Rûpelên ku bi <kbd>Te</kbd> dest pê dikin bibîne.",
+ "apihelp-parse-example-page": "Rûpelekê analîz bike.",
+ "apihelp-parse-example-summary": "Kurteyekê analîz bike",
+ "apihelp-protect-summary": "Asta parastinê ya rûpelekê biguherîne.",
+ "apihelp-protect-example-protect": "Rûpelekê biparêze.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Sernavê girêdanê lê zêde dike.",
+ "apihelp-tag-param-reason": "Sedemê bo guherandinê.",
+ "api-help-parameters": "{{PLURAL:$1|Parametre}}:"
+}
diff --git a/www/wiki/includes/api/i18n/ky.json b/www/wiki/includes/api/i18n/ky.json
new file mode 100644
index 00000000..2f837aa9
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ky.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Janatkg",
+ "Macofe"
+ ]
+ },
+ "apihelp-block-summary": "Колдонуучуну бөгөттөө",
+ "apihelp-block-param-reason": "Бөгөттөө себеби.",
+ "apihelp-block-example-ip-simple": " <kbd>192.0.2.5</kbd> IP дарегин үч күнгө <kbd>First strike</kbd> себеби менен бөгөттөө.",
+ "apihelp-checktoken-param-token": "Текшерүү белгиси.",
+ "apihelp-createaccount-param-name": "Колдонуучунун аты:",
+ "apihelp-createaccount-param-email": "Колдонуучунун email дареги (милдеттүү эмес)",
+ "apihelp-createaccount-param-realname": "Колдонуучунун чыныгы аты (милдеттүү эмес)",
+ "apihelp-delete-summary": "Баракты өчүрүү",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd> өчүрүү.",
+ "apihelp-edit-summary": "Барактарды түзүү жана оңдоо.",
+ "apihelp-edit-param-text": "Барактын мазмуну.",
+ "apihelp-edit-param-minor": "Майда оңдоо."
+}
diff --git a/www/wiki/includes/api/i18n/lb.json b/www/wiki/includes/api/i18n/lb.json
new file mode 100644
index 00000000..f68bd699
--- /dev/null
+++ b/www/wiki/includes/api/i18n/lb.json
@@ -0,0 +1,254 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby",
+ "Macofe",
+ "Les Meloures"
+ ]
+ },
+ "apihelp-main-param-assertuser": "Iwwerpréifen ob den aktuelle Benotzer de Benotzer mat deem Numm ass.",
+ "apihelp-main-param-curtimestamp": "Den aktuellen Zäitstempel an d'Resultat integréieren.",
+ "apihelp-block-summary": "E Benotzer spären.",
+ "apihelp-block-param-user": "Benotzernumm, IP-Adress oder IP-Beräich fir ze spären. Kann net zesumme mat <var>$1userid</var> benotzt ginn.",
+ "apihelp-block-param-reason": "Grond fir ze spären.",
+ "apihelp-block-param-anononly": "Nëmmen anonym Benotzer spären (z. Bsp. anonym Ännerunge vun dëser IP-Adress ausschalten)",
+ "apihelp-block-param-nocreate": "Opmaache vun engem Benotzerkont verhënneren.",
+ "apihelp-block-param-reblock": "Wann de Benotzer scho gespaart ass, déi aktuell Spär iwwerschreiwen.",
+ "apihelp-block-param-watchuser": "Dem Benotzer oder der IP-Adress hier Benotzer- an Diskussiouns-Säiten iwwerwaachen.",
+ "apihelp-compare-param-fromtitle": "Éischten Titel fir ze vergläichen.",
+ "apihelp-compare-param-fromrev": "Éischt Versioun fir ze vergläichen.",
+ "apihelp-compare-param-totitle": "Zweeten Titel fir ze vergläichen.",
+ "apihelp-compare-param-torev": "Zweet Versioun fir ze vergläichen.",
+ "apihelp-createaccount-summary": "En neie Benotzerkont uleeën.",
+ "apihelp-createaccount-param-name": "Benotzernumm.",
+ "apihelp-createaccount-param-email": "E-Mail-Adress vum Benotzer (fakultativ).",
+ "apihelp-createaccount-param-realname": "Richtegen Numm vum Benotzer (fakultativ).",
+ "apihelp-delete-summary": "Eng Säit läschen.",
+ "apihelp-delete-param-watch": "D'Säit op dem aktuelle Benotzer seng Iwwerwaachungslëscht dobäisetzen.",
+ "apihelp-delete-param-unwatch": "D'Säit vun der Iwwerwaachungslëscht vum aktuelle Benotzer erofhuelen.",
+ "apihelp-delete-example-simple": "D'<kbd>Main Page</kbd> läschen.",
+ "apihelp-disabled-summary": "Dëse Modul gouf ausgeschalt.",
+ "apihelp-edit-summary": "Säiten uleeën an änneren.",
+ "apihelp-edit-param-sectiontitle": "Den Titel fir en neien Abschnitt.",
+ "apihelp-edit-param-text": "Säiteninhalt.",
+ "apihelp-edit-param-minor": "Kleng Ännerung.",
+ "apihelp-edit-param-notminor": "Keng kleng Ännerung",
+ "apihelp-edit-param-bot": "Dës Ännerung als eng Bot-Ännerung markéieren.",
+ "apihelp-edit-param-createonly": "D'Säit net ännere wann et se scho gëtt.",
+ "apihelp-edit-param-watch": "D'Säit op dem aktuelle Benotzer seng Iwwerwaachungslëscht dobäisetzen.",
+ "apihelp-edit-example-edit": "Eng Säit änneren",
+ "apihelp-emailuser-summary": "Engem Benotzer eng E-Mail schécken.",
+ "apihelp-emailuser-example-email": "Dem Benotzer <kbd>WikiSysop</kbd> eng E-Mail mam Text <kbd>Content</kbd> schécken.",
+ "apihelp-expandtemplates-param-title": "Titel vun der Säit.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "D'Maximalzäit no där den Tëschespäicher vum Resultat net méi valabel si soll.",
+ "apihelp-feedcontributions-param-year": "Vum Joer (a virdrun).",
+ "apihelp-feedcontributions-param-month": "Vum Mount (a virdrun).",
+ "apihelp-feedcontributions-param-deletedonly": "Nëmme geläscht Kontributioune weisen.",
+ "apihelp-feedcontributions-param-toponly": "Nëmmen Ännerunge weisen déi déi lescht Versioun sinn.",
+ "apihelp-feedcontributions-param-hideminor": "Kleng Ännerunge verstoppen.",
+ "apihelp-feedrecentchanges-param-days": "Deeg, op déi d'Resultater limitéiert gi sollen",
+ "apihelp-feedrecentchanges-param-hideminor": "Kleng Ännerunge verstoppen.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ännerunge vu Botte verstoppen.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ännerunge vun anonyme Benotzer verstoppen.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ännerunge vu registréierte Benotzer verstoppen.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ännerunge vum aktuelle Benotzer verstoppen.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Ännerunge vun der Memberschaft a Kategorie verstoppen.",
+ "apihelp-feedrecentchanges-example-simple": "Rezent Ännerunge weisen",
+ "apihelp-filerevert-param-comment": "Bemierkung eroplueden.",
+ "apihelp-help-example-main": "Hëllef fir den Haaptmodul.",
+ "apihelp-help-example-recursive": "All Hëllef op enger Säit",
+ "apihelp-imagerotate-summary": "Eent oder méi Biller dréinen.",
+ "apihelp-imagerotate-example-generator": "All Biller an der <kbd>Category:Flip]]<kbd> ëm <kbd>180<kbd> Grad dréinen.",
+ "apihelp-import-param-summary": "Resumé vum importéiere vum Logbuch.",
+ "apihelp-import-param-xml": "Eropgeluedenen XML-Fichier.",
+ "apihelp-import-param-rootpage": "Als Ënnersäit vun dëser Säit importéieren. Kann net zesumme mam <var>$1namespace</var> benotzt ginn.",
+ "apihelp-login-param-name": "Benotzernumm.",
+ "apihelp-login-param-password": "Passwuert.",
+ "apihelp-login-example-login": "Aloggen.",
+ "apihelp-logout-example-logout": "Den aktuelle Benotzer ausloggen.",
+ "apihelp-mergehistory-summary": "Historique vun de Säite fusionéieren.",
+ "apihelp-move-summary": "Eng Säit réckelen.",
+ "apihelp-move-param-reason": "Grond fir d'Ëmbenennen.",
+ "apihelp-move-param-movetalk": "D'Diskussiounssäit ëmbenennen, wann et se gëtt.",
+ "apihelp-move-param-noredirect": "Keng Viruleedung uleeën.",
+ "apihelp-move-param-ignorewarnings": "All Warnungen ignoréieren.",
+ "apihelp-opensearch-param-suggest": "Näischt maache wa(nn) <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> falsch ass.",
+ "apihelp-options-summary": "Astellunge vum aktuelle Benotzer änneren.",
+ "apihelp-options-extended-description": "Nëmmen Optiounen aus dem Haaptdeel (core) oder aus enger vun den installéierten Erweiderunge, oder Optioune mat Schlësselen déi viragestallt si mat <code>userjs-</code> (geduecht fir mat Benotzer-Scripte benotzt ze ginn), kënnen agestallt ginn.",
+ "apihelp-options-param-optionname": "Den Numm vun der Optioun deen op de Wäert vun <var>$1optionvalue</var> gesat gi muss",
+ "apihelp-options-example-reset": "All Astellungen zrécksetzen",
+ "apihelp-parse-param-disablepp": "Benotzt an där Plaz <var>$1disablelimitreport</var>.",
+ "apihelp-patrol-example-rcid": "Eng rezent Ännerung nokucken.",
+ "apihelp-patrol-example-revid": "Eng Versioun nokucken.",
+ "apihelp-protect-example-protect": "Eng Säit spären",
+ "apihelp-query+allcategories-summary": "All Kategorien opzielen.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kann nëmme mam <var>$3user</var> benotzt ginn.",
+ "apihelp-query+alldeletedrevisions-param-user": "Nëmme Versioune vun dësem Benotzer opzielen.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Setzt den Titel vum Fichier dobäi.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Setzt den Titel vum Link dobäi.",
+ "apihelp-query+allrevisions-summary": "Lëscht vun alle Versiounen.",
+ "apihelp-query+allrevisions-param-user": "Nëmme Versioune vun dësem Benotzer opzielen.",
+ "apihelp-query+allrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+ "apihelp-query+allrevisions-param-namespace": "Nëmmen Säiten aus dësem Nummraum opzielen.",
+ "apihelp-query+allusers-summary": "All registréiert Benotzer opzielen.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lëscht vun alle Gruppen an deenen de Benotzer automatesch dran ass.",
+ "apihelp-query+allusers-param-activeusers": "Nëmme Benotzer opzielen déi an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.",
+ "apihelp-query+backlinks-example-simple": "Linken op d'<kbd>Main page</kbd> weisen.",
+ "apihelp-query+blocks-summary": "Lëscht vun de gespaarte Benotzer an IP-Adressen.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Setzt de Beräich vun den IP-Adressen dobäi déi vun der Spär betraff sinn.",
+ "apihelp-query+blocks-example-simple": "Lëscht vun de Spären",
+ "apihelp-query+categories-summary": "All Kategorien opzielen zu deenen dës Säit gehéiert.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun dem Ament dobäi wou d'Kategorie dobäigesat gouf.",
+ "apihelp-query+categories-example-generator": "Informatioun iwwer all Kategorien, déi an der Säit <kbd>Albert Einstein</kbd> benotzt ginn, kréien.",
+ "apihelp-query+categorymembers-summary": "All Säiten aus enger bestëmmter Kategorie opzielen.",
+ "apihelp-query+categorymembers-example-simple": "Déi éischt 10 Säiten aus der <kbd>Category:Physics</kbd> kréien.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+ "apihelp-query+deletedrevs-summary": "Geläscht Versiounen oplëschten.",
+ "apihelp-query+deletedrevs-param-unique": "Nëmmen eng Versioun fir all Säit weisen.",
+ "apihelp-query+embeddedin-param-filterredir": "Wéi Viruleedungen gefiltert gi sollen.",
+ "apihelp-query+exturlusage-example-simple": "Säiten. déi op <kbd>https://www.mediawiki.org</kbd> linken, weisen.",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias fir Gréisst.",
+ "apihelp-query+filearchive-example-simple": "Eng Lëscht vun alle geläschte Fichiere weisen",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Titel vun all Säit.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Setzt fir all Versioun vum Fichier de Benotzer dobäi deen en eropgelueden huet.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Bemierkung iwwert d'Versioun.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias fir Gréisst.",
+ "apihelp-query+imageinfo-param-urlheight": "Ähnlech wéi $1urlwidth.",
+ "apihelp-query+images-example-simple": "Eng Lëscht vun de Fichiere kréien déi op der [[Main Page|Haaptsäit]] benotzt ginn",
+ "apihelp-query+imageusage-example-simple": "Säite weisen déi [[:File:Albert Einstein Head.jpg]] benotzen",
+ "apihelp-query+info-paramvalue-prop-readable": "Ob de Benotzer dës Säit liese kann.",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Setzt déi komplett URL dobäi.",
+ "apihelp-query+langlinks-param-lang": "Nëmme Sproochlinke mat dësem Sproochcode zréckginn.",
+ "apihelp-query+links-param-namespace": "Nëmme Linken an dësen Nummräim weisen.",
+ "apihelp-query+linkshere-summary": "All Säite fannen déi op déi Säit linken déi ugi gouf.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Titel vun all Säit.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Markéiere wann d'Säit eng Viruleedung ass.",
+ "apihelp-query+pageswithprop-example-generator": "Zousätzlech Informatiounen iwwer déi 10 éischt Säite kréie mat <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+protectedtitles-param-namespace": "Nëmmen Titelen aus dësen Nummraim opzielen.",
+ "apihelp-query+random-param-redirect": "Benotzt dofir <kbd>$1filterredir=Viruleedungen</kbd>.",
+ "apihelp-query+recentchanges-summary": "Rezent Ännerungen opzielen.",
+ "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung dobäi.",
+ "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
+ "apihelp-query+redirects-paramvalue-prop-title": "Titel vun all Viruleedung.",
+ "apihelp-query+revisions-example-last5": "Déi lescht 5 Versioune vun der <kbd>Haaptsäit</kbd> kréien.",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "D'Nummer vun der Versioun.",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Den Zäitstempel vun der Versioun.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Benotzer deen d'Versioun gemaach huet.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Längt (Bytes) vun der Versioun.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) vun der Versioun.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Bemierkung vum Benotzer fir dës Versioun.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Text vun der Versioun.",
+ "apihelp-query+search-param-namespace": "Nëmmen an dësen Nummräim sichen.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Setzt d'Zuel vun de Wierder vun der Säit dobäi.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der leschter Ännerung vun der Säit dobäi.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignoréiert.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignoréiert.",
+ "apihelp-query+templates-param-namespace": "Schablounen nëmmen an dësen Nummräim weisen.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Titel vun all Säit.",
+ "apihelp-query+usercontribs-summary": "All Ännerunge vun engem Benotzer kréien.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der Ännerung dobäi.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung dobäi.",
+ "apihelp-query+userinfo-param-prop": "Informatioune fir dranzesetzen:",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Lëscht vun allen Astellungen déi den aktuelle Benotzer gemaach huet.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Setzt d'Gesamtzuel vun den Ännerunge vum aktuelle Benotzer dobäi.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Setzt dem Benotzer säi richtegen Numm dobäi.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Setzt de Registréierungsdatum vum Benotzer dobäi.",
+ "apihelp-query+users-paramvalue-prop-rights": "Weist all Rechter déi all Benotzer huet.",
+ "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+ "apihelp-query+watchlist-param-excludeuser": "Ännerunge vun dësem Benotzer net opzielen.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Setzt den Titel vun der Säit dobäi.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Setzt de Benotzer dobäi deen d'Ännerung gemaach huet.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung dobäi.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der Ännerung dobäi.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Extern Ännerungen.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Ugeluecht Säiten.",
+ "apihelp-query+watchlistraw-param-show": "Nëmmen Elementer opzielen déi dëse Critèren entspriechen.",
+ "apihelp-query+watchlistraw-example-simple": "Säite vum aktuelle Benotzer senger Iwwerwaachungslëscht opzielen",
+ "apihelp-revisiondelete-summary": "Versioune läschen a restauréieren.",
+ "apihelp-revisiondelete-param-reason": "Grond fir ze Läschen oder ze Restauréieren.",
+ "apihelp-rollback-summary": "Déi lescht Ännerung vun der Säit zrécksetzen.",
+ "apihelp-rsd-example-simple": "Den RSD-Schema exportéieren",
+ "apihelp-setpagelanguage-summary": "D'Sprooch vun enger Säit änneren",
+ "apihelp-setpagelanguage-extended-description-disabled": "Aschalten\n<var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> fir dëse Aktioun ze benotzen",
+ "apihelp-setpagelanguage-param-reason": "Grond fir d'Ännerung.",
+ "apihelp-setpagelanguage-example-language": "Ännert d'Sprooch vun der <kbd>Main Page</kbd> op baskesch.",
+ "apihelp-stashedit-param-title": "Titel vun der Säit déi geännert gëtt.",
+ "apihelp-stashedit-param-sectiontitle": "Den Titel fir en neien Abschnitt.",
+ "apihelp-stashedit-param-text": "Inhalt vun der Säit",
+ "apihelp-stashedit-param-summary": "Resumé änneren",
+ "apihelp-tag-param-reason": "Grond fir d'Ännerung.",
+ "apihelp-unblock-summary": "D'Spär vun engem Benotzer ophiewen.",
+ "apihelp-unblock-param-reason": "Grond fir d'Spär opzehiewen",
+ "apihelp-undelete-param-reason": "Grond fir ze restauréieren.",
+ "apihelp-undelete-example-page": "<kbd>Main Page</kbd> restauréieren.",
+ "apihelp-upload-param-watch": "D'Säit iwwerwaachen.",
+ "apihelp-upload-example-url": "Vun enger URL eroplueden.",
+ "apihelp-userrights-param-user": "Benotzernumm.",
+ "apihelp-userrights-param-userid": "Benotzer Id.",
+ "apihelp-userrights-param-reason": "Grond fir d'Ännerung.",
+ "apihelp-validatepassword-param-password": "Passwuert fir ze validéieren.",
+ "apihelp-validatepassword-example-1": "Validéiert d'Passwuert <kbd>foobar</kbd> fir den aktuelle Benotzer.",
+ "apihelp-watch-example-watch": "D'Säit <kbd>Main Page</kbd> iwwerwaachen.",
+ "api-login-fail-badsessionprovider": "Net méiglech sech anzelogge mat $1.",
+ "api-help-undocumented-module": "Keng Dokumentatioun fir de Modul $1.",
+ "api-help-source": "Quell: $1",
+ "api-help-source-unknown": "Quell: <span class=\"apihelp-unknown\">onbekannt</span>",
+ "api-help-license": "Lizenz: [[$1|$2]]",
+ "api-help-license-noname": "LiZenz: [[$1|Kuckt de Link]]",
+ "api-help-license-unknown": "Lizenz: <span class=\"apihelp-unknown\">onbekannt</span>",
+ "api-help-param-deprecated": "Vereelst.",
+ "api-help-param-required": "Dëse Parameter ass obligatoresch.",
+ "api-help-datatypes-header": "Datentypen",
+ "api-help-param-type-user": "Typ: {{PLURAL:$1|1=Benotzernumm|2=Lëscht vu Benotzernimm}}",
+ "api-help-param-multi-max-simple": "Maximal Zuel vun de Wäerter ass {{PLURAL:$1|$1}}.",
+ "api-help-param-maxbytes": "Däerf net méi laang si wéi {{PLURAL:$1|ee Byte|$1 Byten}}.",
+ "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:",
+ "api-help-permissions": "{{PLURAL:$1|Autorisatioun|Autorisatiounen}}:",
+ "api-help-open-in-apisandbox": "<small>[an der Sandkëscht opmaachen]</small>",
+ "apierror-articleexists": "Den Artikel deen dir probéiert hutt unzeleeë gouf schonn ugeluecht.",
+ "apierror-autoblocked": "Är IP-Adress gouf automatesch gespaart well se vun engem gespaarte Benotzer benotzt gouf.",
+ "apierror-badip": "IP-Parameter ass net valabel.",
+ "apierror-cantblock": "Dir hutt net d'Recht fir Benotzer ze spären.",
+ "apierror-cantimport": "Dir hutt net déi néideg Rechter fir Säiten z'importéieren.",
+ "apierror-copyuploadbadurl": "D'Eroplueden ass vun dëser URL net erlaabt.",
+ "apierror-filetypecannotberotated": "Den Typ vu Fichier kann net rotéiert ginn.",
+ "apierror-import-unknownerror": "Onbekannte Feeler beim Import: $1\nf",
+ "apierror-invalidcategory": "Den Numm vun der Kategorie deen Dir aginn hutt ass net valabel.",
+ "apierror-invalidtitle": "Schlechten Titel \"$1\".",
+ "apierror-invaliduserid": "Benotzer ID <var>$1</var> ass net valabel.",
+ "apierror-missingrev-title": "Keng aktuell Versioun vum Titel $1.",
+ "apierror-missingtitle": "D'Säit déi Dir spezifizéiert hutt gëtt et net.",
+ "apierror-missingtitle-byname": "D'Säit $1 gëtt et net.",
+ "apierror-moduledisabled": "De(n) <kbd>$1</kbd> Modul gouf ausgeschalt.",
+ "apierror-mustbeloggedin-generic": "Dir musst ageloggt sinn.",
+ "apierror-nochanges": "Et goufe keng Ännerungen ugefrot.",
+ "apierror-nodeleteablefile": "Et gëtt keng esou al Versioun vum Fichier.",
+ "apierror-noedit": "Dir hutt net déi néideg Rechter fir Säiten z'änneren.",
+ "apierror-nosuchuserid": "Et gëtt kee Benotzer mat der ID $1.",
+ "apierror-notarget": "Dir hutt kee valabelt Zil fir dës Aktioun spezifizéiert.",
+ "apierror-notpatrollable": "D'Versioun r$1 kann net nogekuckt gi well se ze al ass.",
+ "apierror-pagecannotexist": "Nummraum erlaabt keng aktuell Säiten.",
+ "apierror-pagelang-disabled": "D'Ännere vun der Sprooch vun enger Säit ass op dëser Wiki net erlaabt.",
+ "apierror-permissiondenied-generic": "Autorisatioun refuséiert.",
+ "apierror-permissiondenied-unblock": "Dir hutt net d'Recht fir d'Spär vu Benotzer opzehiewen.",
+ "apierror-readonly": "D'Wiki ka fir den Ament nëmme gelies ginn.",
+ "apierror-revisions-badid": "Fir de Parameter <var>$1</var> gouf keng Versioun fonnt.",
+ "apierror-revwrongpage": "r$1 ass keng Versioun vu(n) $2.",
+ "apierror-stashwrongowner": "Falsche Besëtzer: $1",
+ "apierror-systemblocked": "Dir gouft automatesch vu MediaWiki gespaart.",
+ "apierror-timeout": "De Server huet net bannen där Zäit geäntwert déi virgesinn ass.",
+ "apierror-unknownerror-editpage": "Onbekannten EditPage-Feeler: $1",
+ "apierror-unknownerror-nocode": "Onbekannte Feeler.",
+ "apierror-unknownerror": "Onbekannte Feeler: \"$1\".",
+ "apierror-unknownformat": "Net-erkannte Format \"$1\".",
+ "apierror-unrecognizedparams": "Net {{PLURAL:$2|erkannte Parameter|erkannt Parameteren}}: $1",
+ "apierror-writeapidenied": "Dir däerft dës Wiki net iwwer den API ännneren.",
+ "apiwarn-invalidcategory": "\"$1\" ass keng Kategorie.",
+ "apiwarn-invalidtitle": "\"$1\" ass kee valabelen Titel",
+ "apiwarn-notfile": "\"$1\" ass kee Fichier.",
+ "apiwarn-tokennotallowed": "Aktioun \"$1\" ass net erlaabt fir den aktuelle Benotzer.",
+ "apiwarn-validationfailed-badpref": "keng valabel Astellung",
+ "api-feed-error-title": "Feeler ($1)"
+}
diff --git a/www/wiki/includes/api/i18n/lij.json b/www/wiki/includes/api/i18n/lij.json
new file mode 100644
index 00000000..cb902b33
--- /dev/null
+++ b/www/wiki/includes/api/i18n/lij.json
@@ -0,0 +1,221 @@
+{
+ "@metadata": {
+ "authors": [
+ "Giromin Cangiaxo"
+ ]
+ },
+ "apihelp-main-param-action": "Açion da compî.",
+ "apihelp-main-param-format": "Formato de l'output.",
+ "apihelp-main-param-assert": "Veifica che l'utente o l'agge effetoòu l'accesso se s'è impostou <kbd>user</kbd>, ò ch'o l'agge i permissi di bot se s'è impostou <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Tutti i valoî fornii saian incruxi inta risposta. Porieivan ese doeuviæ pe distingue e receste.",
+ "apihelp-main-param-servedby": "Inciodi into risultou o nomme de l'host ch'o l'ha servio a recesta.",
+ "apihelp-main-param-curtimestamp": "Inciodi into risultou o timestamp attoâ.",
+ "apihelp-block-summary": "Blocca un utente.",
+ "apihelp-block-param-user": "Nomme utente, adresso IP o range di IP da bloccâ.",
+ "apihelp-block-param-expiry": "Tempo de scadença. O poeu ese relativo (presempio, <kbd>5 months</kbd> o <kbd>2 weeks</kbd>) ò assoluo (presempio <kbd>2014-09-18T12:34:56Z</kbd>). Se impostou a <kbd>infinite</kbd>, <kbd>indefinite</kbd> ò <kbd>never</kbd>, o blòcco o no descaziâ mai.",
+ "apihelp-block-param-reason": "Raxon do blòcco.",
+ "apihelp-block-param-anononly": "Blocca solo che i utenti non registræ (saiv'a dî disattiva i contributi anonnimi da questo adresso IP).",
+ "apihelp-block-param-nocreate": "Impedisci a creaçion de utençe.",
+ "apihelp-block-param-autoblock": "Blocca aotomaticamente l'urtimo adreçço IP doeuviou da l'utente e i succescivi co-i quæ tentan l'accesso",
+ "apihelp-block-param-hidename": "Ascondi o nomme utente da-o registro di blocchi (Ghe voeu i permissi de <code>hideuser</code>).",
+ "apihelp-block-param-reblock": "Se l'utente o l'è za bloccou, sorvescrive o blocco existente.",
+ "apihelp-block-param-watchuser": "Oserva a paggina utente e e paggine de discuscion utente de l'utente ò de l'adresso IP.",
+ "apihelp-block-example-ip-simple": "Blocca l'adresso IP <kbd>192.0.2.5</kbd> pe trei giorni con motivaçion <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Blocca l'utente <kbd>Vandal</kbd> a tempo indeterminou con motivaçion <kbd>Vandalism</kbd>, e impediscighe a creaçion de noeuve utençe e l'invio de e-mail.",
+ "apihelp-changeauthenticationdata-summary": "Modificâ i dæti d'aotenticaçion pe l'utente corente.",
+ "apihelp-changeauthenticationdata-example-password": "Tentativo de modificâ a password de l'utente corente a <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Veifica a validitæ de 'n token da <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo de token in corso de test.",
+ "apihelp-checktoken-param-token": "Token da testâ.",
+ "apihelp-checktoken-param-maxtokenage": "Mascima etæ consentia pe-o token, in segondi.",
+ "apihelp-checktoken-example-simple": "Veifica a validitæ de 'n token <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Scassa o flag <code>hasmsg</code> pe l'utente corente.",
+ "apihelp-clearhasmsg-example-1": "Scassa o flag <code>hasmsg</code> pe l'utente corente.",
+ "apihelp-clientlogin-summary": "Accedi a-o wiki doeuviando o flusso interattivo.",
+ "apihelp-clientlogin-example-login": "Avvia o processo d'accesso a-a wiki comme utente <kbd>Example</kbd> con password <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continnoa l'accesso doppo una risposta de l'<samp>UI</samp> pe l'aotenticaçion a doî fattoî, fornindo un <var>OATHToken</var> de <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Otegni e differençe tra 2 paggine.",
+ "apihelp-compare-extended-description": "Un nummero de revixon, o tittolo de 'na paggina, ò un ID de paggina o dev'ese indicou segge pe-o \"da\" che pe-o \"a\".",
+ "apihelp-compare-param-fromtitle": "Primmo tittolo da confrontâ.",
+ "apihelp-compare-param-fromid": "Primo ID de paggina da confrontâ.",
+ "apihelp-compare-param-fromrev": "Primma revixon da confrontâ.",
+ "apihelp-compare-param-totitle": "Segondo tittolo da confrontâ.",
+ "apihelp-compare-param-toid": "Segondo ID de paggina da confrontâ.",
+ "apihelp-compare-param-torev": "Segonda revixon da confrontâ.",
+ "apihelp-compare-example-1": "Crea un diff tra revixon 1 e revixon 2.",
+ "apihelp-createaccount-summary": "Crea una noeuva utença.",
+ "apihelp-createaccount-param-preservestate": "Se <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> o l'ha restituto true pe <samp>hasprimarypreservedstate</samp>, e receste contrssegnæ comme <samp>primary-required</samp> dovieivan ese omisse. Se invece o l'ha restituio un valô non voeuo pe <samp>preservedusername</samp>, quello nomme utente o dev'ese doeuviou pe-o parammetro <var>username</var>.",
+ "apihelp-createaccount-example-create": "Avvia o processo de creaçion d'utente <kbd>Example</kbd> con password <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Nomme utente",
+ "apihelp-createaccount-param-password": "Password (a saiâ ignorâ se l'è impostou <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Dominnio pe l'aotenticaçion esterna (opçionâ).",
+ "apihelp-createaccount-param-email": "Adresso Email de l'utente (opçionâ).",
+ "apihelp-createaccount-param-realname": "Nomme veo de l'utente (opçionâ).",
+ "apihelp-createaccount-param-mailpassword": "Se impostou insce 'n qualonque valô, una password random (caxoâ) a saiâ inviâ a l'utente.",
+ "apihelp-createaccount-param-reason": "Raxon facortativa da creaçion de l'utença da insei inti registri.",
+ "apihelp-createaccount-param-language": "Codiçe de lengua da impostâ comme predefinia pe l'utente (opçionâ, pe difetto a l'è a lengua do contegnuo).",
+ "apihelp-createaccount-example-pass": "Crea l'utente <kbd>testuser</kbd> con password <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Crea l'utente <kbd>testmailuser</kbd> e mandighe via e-mail una password generâ abrettio.",
+ "apihelp-delete-summary": "Scassa 'na paggina",
+ "apihelp-delete-param-title": "Tittolo da paggina che se dexîa eliminâ. O no poeu vese doeuviou insemme a <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID de paggina da paggina da scassâ. O no poeu vese doeuviou insemme con <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Raxon da scassatua. S'a no saiâ indicâ, saiâ doeuviou 'na raxon generâ aotomaticamente.",
+ "apihelp-delete-param-watch": "O l'azonze a paggina a-a lista di oservæ speciali de l'utente corente.",
+ "apihelp-delete-param-unwatch": "O rimoeuve a pagina da-a lista di oservæ speciali de l'utente corente.",
+ "apihelp-delete-param-oldimage": "O nomme da vegia inmaggine da scassâ, comme fornia da [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Scassa <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Scassa a <kbd>Main Page</kbd> con motivaçion <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Questo modulo o l'è stæto disabilitou.",
+ "apihelp-edit-summary": "Crea e modifica paggine.",
+ "apihelp-edit-param-title": "Tittolo da paggina da modificâ. O no poeu vese doeuviou insemme a <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID de paggina da paggina da modificâ. O no poeu ese doeuviou insemme a <var>$1title</var>.",
+ "apihelp-edit-param-section": "Nummero de seçion. <kbd>0</kbd> pe-a seçion de d'ato, <kbd>new</kbd> pe 'na noeuva seçion.",
+ "apihelp-edit-param-sectiontitle": "O tittolo pe 'na noeuva seçion.",
+ "apihelp-edit-param-text": "Contegnuo da paggina.",
+ "apihelp-edit-param-summary": "Ogetto da modiffica. E ascì tittolo da seçion se $1sezione=new e $1sectiontitle o no l'è impostou.",
+ "apihelp-edit-param-tags": "Cangia i tag da apricâ a-a revixon.",
+ "apihelp-edit-param-minor": "Cangiamento menô.",
+ "apihelp-edit-param-notminor": "Cangiamento non-menô.",
+ "apihelp-edit-param-bot": "Marca sta modiffica comme bot.",
+ "apihelp-edit-param-createonly": "No modificâ a paggina s'a l'existe za.",
+ "apihelp-edit-param-nocreate": "O genera un errô se a paggina a no l'existe.",
+ "apihelp-edit-param-watch": "O l'azonze a paggina a-a lista di oservæ speciali de l'utente corente.",
+ "apihelp-edit-param-unwatch": "O rimoeuve a pagina da-a lista di oservæ speciali de l'utente corente.",
+ "apihelp-edit-param-redirect": "Resciorvi aotomaticamente i rimandi.",
+ "apihelp-edit-param-contentmodel": "Modello de contegnuo di noeuvi contegnui.",
+ "apihelp-edit-param-token": "O token o dev'ese delongo inviou comme urtimo parammetro, ò aomeno doppo o parametro $1text.",
+ "apihelp-edit-example-edit": "Modiffica 'na paggina.",
+ "apihelp-edit-example-prepend": "Antepon-i <kbd>_&#95;NOTOC_&#95;</kbd> a 'na paggina.",
+ "apihelp-emailuser-summary": "Manda 'n'e-mail a 'n utente.",
+ "apihelp-emailuser-param-target": "Utente a chi inviâ l'e-mail.",
+ "apihelp-emailuser-param-subject": "Ogetto de l'e-mail.",
+ "apihelp-emailuser-param-text": "Testo de l'e-mail.",
+ "apihelp-emailuser-param-ccme": "Mandime una copia de questa mail.",
+ "apihelp-emailuser-example-email": "Manda un'e-mail a l'utente <kbd>WikiSysop</kbd> co-o testo <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Espandi tutti i template into wikitesto.",
+ "apihelp-expandtemplates-param-title": "Tittolo da paggina.",
+ "apihelp-expandtemplates-param-text": "Wikitesto da convertî.",
+ "apihelp-expandtemplates-param-prop": "Quæ informaçion otegnî.\n\nNotta che se no l'è seleçionou arcun valô, o risultou o contegniâ o codiçe wiki, ma l'output o saiâ inte 'n formato obsoleto.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "O wikitext espanso.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Propietæ da paggina definie da-e paole magiche esteise into wikitesto.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Se l'output o segge volatile e o no 'agge da ese riadoeuviou atr'onde a l'interno da paggina.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "O tempo mascimo doppo o quæ e memoizaçioin tempoannie (cache) do risultou dovieivan ese invalidæ.",
+ "apihelp-feedcontributions-param-feedformat": "O formato do feed.",
+ "apihelp-feedrecentchanges-param-feedformat": "O formato do feed.",
+ "apihelp-feedrecentchanges-param-namespace": "Namespace a-o quæ limitâ i risultæ.",
+ "apihelp-feedrecentchanges-param-associated": "Inciodi namespace associou (discuscion ò prinçipâ)",
+ "apihelp-feedrecentchanges-param-days": "Intervallo de giorni pe-i quæ limitâ i risultæ.",
+ "apihelp-feedrecentchanges-param-limit": "Nummero mascimo di risultæ da restituî.",
+ "apihelp-feedrecentchanges-param-from": "Mostra i cangiamenti da alloa.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ascondi e modiffiche menoî.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ascondi e modiffiche fæte da di bot.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ascondi e modiffiche fæte da di utenti anonnimi.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ascondi e modiffiche fæte da-i utenti registræ.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ascondi e modiffiche veificæ.",
+ "apihelp-feedrecentchanges-param-hidemyself": "O l'asconde e modiffiche fæte da l'utente attoale.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Ascondi e variaçioin d'apartegninça a-e categorie.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtra pe etichetta.",
+ "apihelp-feedrecentchanges-param-target": "Mostra solo e modifiche a-e paggine collegæ da questa paggina.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Fanni védde sôlo i cangiaménti a-e pàggine conligæ a-a quella speçificâ",
+ "apihelp-feedrecentchanges-param-categories": "Mostra solo e variaçioin in sce-e paggine de tutte queste categorie.",
+ "apihelp-feedrecentchanges-param-categories_any": "Mostra invece solo e variaçioin in sce-e paggine inte 'na qualonque categoria.",
+ "apihelp-feedrecentchanges-example-simple": "Mostra i urtime modiffiche.",
+ "apihelp-feedrecentchanges-example-30days": "Mostra e modifiche di urtimi 30 giorni.",
+ "apihelp-feedwatchlist-param-feedformat": "O formato do feed.",
+ "apihelp-feedwatchlist-param-hours": "Elenca e paggine modificæ inte quest'urtime oe.",
+ "apihelp-feedwatchlist-param-linktosections": "Collega direttamente a-e seçioin modificæ, se poscibbile.",
+ "apihelp-feedwatchlist-example-all6hrs": "Mostra tutte e modiffiche a-e pagine oservæ inti urtime 6 oe.",
+ "apihelp-filerevert-summary": "Ripristina un file a 'na verscion precedente.",
+ "apihelp-filerevert-param-filename": "Nomme do file de destinaçion, sença o prefisso 'File:'.",
+ "apihelp-filerevert-param-comment": "Commento in sciô caregamento.",
+ "apihelp-filerevert-param-archivename": "Nomme de l'archivvio da verscion da ripristinâ.",
+ "apihelp-filerevert-example-revert": "Ripristina <kbd>Wiki.png</kbd> a-a verscion do <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Mostra a guidda pe-i modduli speçificæ.",
+ "apihelp-help-param-toc": "Inciodi un endexo inte l'output HTML.",
+ "apihelp-help-example-main": "Agiutto pe-o moddulo prinçipâ.",
+ "apihelp-help-example-submodules": "Agiutto pe <kbd>action=query</kbd> e tutti i so sotto-modduli.",
+ "apihelp-help-example-recursive": "Tutti i agiutti inte 'na paggina.",
+ "apihelp-help-example-help": "Agiutto pe-o moddulo d'agiutto mæximo.",
+ "apihelp-imagerotate-summary": "Roeua un-a o ciù inmaggine.",
+ "apihelp-imagerotate-param-rotation": "Graddi de rotaçion de l'inmaggine in senso oaio.",
+ "apihelp-imagerotate-example-simple": "Roeua <kbd>File:Example.png</kbd> de <kbd>90</kbd> graddi.",
+ "apihelp-imagerotate-example-generator": "Roeua tutte e inmaggine in <kbd>Category:Flip</kbd> de <kbd>180</kbd> graddi.",
+ "apihelp-import-param-summary": "Ogetto into registro d'importaçion.",
+ "apihelp-import-param-xml": "File XML caregou.",
+ "apihelp-import-param-interwikisource": "Pe-e importaçioin interwiki: wiki da-e quæ importâ.",
+ "apihelp-import-param-interwikipage": "Pe-e importaçioin interwiki: paggina da importâ.",
+ "apihelp-import-param-fullhistory": "Pe-e importaçioin interwiki: importa l'intrega cronologia, non solo a verscion attoale.",
+ "apihelp-import-param-templates": "Pe-e importaçioin interwiki: importa tutti i template incioxi ascì.",
+ "apihelp-import-param-namespace": "Importa inte questo namespace. O no poeu ese doeuviou insemme a <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importa comme sottopaggina de questa paggina. O no poeu ese doeuviou insemme a <var>$1namespace</var>.",
+ "apihelp-import-example-import": "Importa [[meta:Help:ParserFunctions]] into namespace 100 con cronologia completa.",
+ "apihelp-linkaccount-summary": "Conligamento de 'n'utença de 'n provider de terçe parte a l'utente corente.",
+ "apihelp-linkaccount-example-link": "Avvia o processo de collegamento a 'n'utença da <kbd>Example</kbd>.",
+ "apihelp-login-summary": "Accedi e otegni i cookie d'aotenticaçion.",
+ "apihelp-login-extended-description": "Quest'açion dev'ese doeuviâ escluxivamente in combinaçion con [[Special:BotPasswords]]; doeuviâla pe l'accesso a l'account prinçipâ o l'è deprecou e o poeu fallî sença preaviso. Pe acedere in moddo seguo a l'utença prinçipâ, doeuvia <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Quest'açion a l'è deprecâ e a poeu fallî sença preaviso. Pe acede in moddo seguo, doeuvia [[Special:ApiHelp/clientlogin|action=clientlogin]].",
+ "apihelp-login-param-name": "Nomme utente.",
+ "apihelp-login-param-password": "Password.",
+ "apihelp-login-param-domain": "Dominnio (opçionâ).",
+ "apihelp-login-example-gettoken": "Recuppera un token de login.",
+ "apihelp-login-example-login": "Intra",
+ "apihelp-logout-summary": "Sciorti e scassa i dæti da sescion.",
+ "apihelp-logout-example-logout": "Disconnetti l'utente attoale.",
+ "apihelp-mergehistory-summary": "O l'unisce e cronologie de paggine.",
+ "apihelp-mergehistory-param-from": "O tittolo da paggina da-a quæ a cronologia a saiâ unia. O no poeu ese doeuviou insemme a <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "L'ID da paggina da-a quæ a cronologia a saiâ unia. O no poeu ese doeuviou insemme a <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "O tittolo da paggina inta quæ a cronologia a saiâ unia. O no poeu ese doeuviou insemme a <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "L'ID da paggina inta quæ a cronologia a saiâ unia. O no poeu ese doeuviou insemme a <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-timestamp": "O timestamp scin a-o quæle verscioin saian mesciæ da-a cronologia da paggina d'origine a quella da paggina de destinaçion. Se omisso, l'intrega cronologia da paggina d'origine a saiâ unia inta paggina de destinaçion.",
+ "apihelp-mergehistory-param-reason": "Raxon pe l'union da cronologia.",
+ "apihelp-mergehistory-example-merge": "Unisci l'intrega cronologia de <kbd>Oldpage</kbd> inte <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Unisci e verscioin da paggina <kbd>Oldpage</kbd> scin a <kbd>2015-12-31T04:37:41Z</kbd> inte <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Mescia 'na paggina",
+ "apihelp-move-param-from": "Tittolo da paggina da rinominâ. O no poeu vese doeuviou insemme a <var>$1pageid</var>.",
+ "apihelp-move-param-fromid": "ID de paggina da paggina da rinominâ. O no poeu ese doeuviou insemme a <var>$1title</var>.",
+ "apihelp-move-param-to": "Tittolo a-o quæ mesciâ a paggina.",
+ "apihelp-move-param-reason": "Raxon da rinommina.",
+ "apihelp-move-param-movetalk": "Rinommina a paggina de discuscion, s'a l'existe.",
+ "apihelp-move-param-movesubpages": "Rinommina e sottopaggine, se applicabile.",
+ "apihelp-move-param-noredirect": "No creâ un rinvio.",
+ "apihelp-move-param-watch": "Azonze a paggina e o redirect a-i oservæ speciali de l'utente attoale.",
+ "apihelp-move-param-unwatch": "Rimoeuvi a paggina e o redirect da-i oservæ speciali de l'utente attoale.",
+ "apihelp-move-param-ignorewarnings": "Ignora i messaggi d'avvertimento do scistema",
+ "apihelp-move-example-move": "Mescia <kbd>Badtitle</kbd> a <kbd>Goodtitle</kbd> sença lasciâ de redirect.",
+ "apihelp-opensearch-param-search": "Stringa de çerchia.",
+ "apihelp-opensearch-param-limit": "Nummero mascimo di risultæ da restituî.",
+ "apihelp-opensearch-param-suggest": "No stanni a fâ ninte se <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> o l'è faso.",
+ "apihelp-opensearch-param-format": "O formato de l'output.",
+ "apihelp-opensearch-example-te": "Troeuva e paggine che començan con <kbd>Te</kbd>.",
+ "apihelp-options-example-reset": "Reimposta tutte e preferençe.",
+ "apihelp-paraminfo-summary": "Otegni de informaçioin in scî modduli API.",
+ "apihelp-paraminfo-param-helpformat": "Formato de stringhe d'agiutto.",
+ "apihelp-parse-param-summary": "Ogetto da analizâ.",
+ "apihelp-query+allcategories-param-prop": "Quæ propietæ otegnî:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Azonzi o nummero de paggine inta categoria.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Etichetta e categorie che son ascose con <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Elenca e categorie con de informaçioin in sciô numero de paggine in ciascun-a.",
+ "apihelp-query+alldeletedrevisions-summary": "Elenca tutte e verscioin scassæ da 'n utente ò inte 'n namespace.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "O poeu ese doeuviou solo con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "O no poeu ese doeuviou con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "O timestamp da-o quæ començâ l'elenco.",
+ "apihelp-query+alldeletedrevisions-param-end": "O timestamp a-o quæ interrompî l'elenco.",
+ "apihelp-query+alldeletedrevisions-param-from": "Comença l'elenco a questo tittolo.",
+ "apihelp-query+alldeletedrevisions-param-to": "Interrompi l'elenco a questo titolo.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Riçerca pe tutti i titoli de pagine che començan con questo valô.",
+ "apihelp-query+alldeletedrevisions-param-user": "Elenca solo e verscioin de questo utente.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "No elencâ e verscioin de questo utente.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Elenca solo e paggine inte questo namespace.",
+ "apihelp-query+alldeletedrevisions-example-user": "Elenca i urtimi 50 contributi scassæ de l'utente <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Elenca e primme 50 verscioin scassæ into namespace prinçipâ.",
+ "apihelp-query+allfileusages-param-from": "O titolo do file da-o quæ començâ l'elenco.",
+ "apihelp-query+allfileusages-param-to": "O tittolo do file a-o quæ interrompî l'elenco.",
+ "apihelp-query+allfileusages-param-prefix": "Riçerca pe tutti i titoli di file che començan con questo valô.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "O l'azonze o tittolo do file.",
+ "apihelp-query+allfileusages-param-limit": "Quanti elementi totali restitoî.",
+ "apihelp-query+allfileusages-param-dir": "A direçion inta quæ elencâ.",
+ "apihelp-query+allfileusages-example-generator": "Otegni e paggine contegninte i file.",
+ "apihelp-query+allimages-param-sort": "Propietæ d'amerçamento.",
+ "apihelp-query+allimages-param-dir": "A direçion inta quæ elencâ.",
+ "apihelp-query+allimages-param-from": "O titolo de l'inmagine da-a quæ començâ l'elenco. O poeu ese doeuviou solo con $1sort=name."
+}
diff --git a/www/wiki/includes/api/i18n/lki.json b/www/wiki/includes/api/i18n/lki.json
new file mode 100644
index 00000000..f16f76f0
--- /dev/null
+++ b/www/wiki/includes/api/i18n/lki.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hosseinblue",
+ "Arash71",
+ "Lakzon"
+ ]
+ },
+ "apihelp-main-param-action": "کام عملیات انجؤم بِ.",
+ "apihelp-main-param-format": "فرمت خروجی",
+ "apihelp-block-summary": "بستن کاربر.",
+ "apihelp-createaccount-param-name": "نۆم کاربەری:",
+ "apihelp-delete-summary": "حةذف وةڵگة",
+ "apihelp-delete-example-simple": "حذف <kbd>Main Page</kbd>.",
+ "apihelp-disabled-summary": "اێ پودمانە إکار کەتێە(غیرفعال بیە).",
+ "apihelp-edit-summary": "دؤرس کردن و دۀسکاری وۀلگۀ",
+ "apihelp-edit-param-sectiontitle": "نام سۀر وۀلگ تازۀ",
+ "apihelp-edit-example-edit": ".دةسکاری وةڵگة",
+ "apihelp-emailuser-param-subject": "موضوع سةر وةڵگ",
+ "apihelp-emailuser-param-text": "متن رایانه.",
+ "apihelp-help-example-main": "راهنما برای پودمان اصلی",
+ "apihelp-login-param-name": "نام کاربری",
+ "apihelp-login-param-password": ".رمز",
+ "apihelp-login-example-login": "إنۆم هەتِن.",
+ "apihelp-logout-summary": "دۀرچئن و پاک کردن داده متن",
+ "apihelp-logout-example-logout": "خروج کاربر فعلی",
+ "apihelp-options-example-reset": "بازنشانی همه تنظیمات."
+}
diff --git a/www/wiki/includes/api/i18n/ln.json b/www/wiki/includes/api/i18n/ln.json
new file mode 100644
index 00000000..cd117465
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ln.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Moyogo"
+ ]
+ },
+ "apihelp-edit-example-edit": "Kobɔngisa lokásá lɔ̌kɔ́."
+}
diff --git a/www/wiki/includes/api/i18n/lt.json b/www/wiki/includes/api/i18n/lt.json
new file mode 100644
index 00000000..f470a722
--- /dev/null
+++ b/www/wiki/includes/api/i18n/lt.json
@@ -0,0 +1,422 @@
+{
+ "@metadata": {
+ "authors": [
+ "Zygimantus",
+ "Eitvys200",
+ "Hugo.arg"
+ ]
+ },
+ "apihelp-main-param-action": "Kurį veiksmą atlikti.",
+ "apihelp-main-param-curtimestamp": "Prie rezultato pridėti dabartinę laiko žymę.",
+ "apihelp-block-summary": "Blokuoti vartotoją.",
+ "apihelp-block-param-reason": "Blokavimo priežastis.",
+ "apihelp-block-param-nocreate": "Neleisti kurti paskyrų.",
+ "apihelp-compare-param-fromtitle": "Pirmas pavadinimas palyginimui.",
+ "apihelp-compare-param-fromid": "Pirmojo lyginamo puslapio ID.",
+ "apihelp-compare-param-totitle": "Antrasis pavadinimas palyginimui.",
+ "apihelp-compare-param-toid": "Antrojo lyginamo puslapio ID.",
+ "apihelp-compare-param-prop": "Kokią informaciją gauti.",
+ "apihelp-createaccount-summary": "Kurti naują vartotojo paskyrą.",
+ "apihelp-createaccount-param-name": "Naudotojo vardas.",
+ "apihelp-createaccount-param-email": "Vartotojo el. pašto adresas (nebūtina).",
+ "apihelp-createaccount-param-realname": "Vardas (nebūtina).",
+ "apihelp-delete-summary": "Ištrinti puslapį.",
+ "apihelp-delete-param-watch": "Pridėti puslapį prie dabartinio vartotojo stebimųjų sąrašo.",
+ "apihelp-delete-param-unwatch": "Pašalinti puslapį iš dabartinio vartotojo stebimųjų sąrašo.",
+ "apihelp-delete-example-simple": "Ištrinti <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Ištrinti <kbd>Main Page</kbd> su priežastimi <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Šis modulis buvo išjungtas.",
+ "apihelp-edit-summary": "Kurti ir redaguoti puslapius.",
+ "apihelp-edit-param-title": "Redaguotino puslapio pavadinimas. Negali būti naudojamas kartu su <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Redaguotino puslapio ID. Negali būti naudojamas kartu su <var>$1title</var>.",
+ "apihelp-edit-param-section": "Sekcijos numeris. <kbd>0</kbd> - viršutinei sekcijai, <kbd>new</kbd> - naujai sekcijai.",
+ "apihelp-edit-param-sectiontitle": "Naujo skyriaus pavadinimas.",
+ "apihelp-edit-param-text": "Puslapio turinys.",
+ "apihelp-edit-param-summary": "Keitimo santrauka. Taip pat sekcijos pavadinimas, kai $1section=new ir $1sectiontitle yra nenustatytas.",
+ "apihelp-edit-param-minor": "Smulkus pakeitimas.",
+ "apihelp-edit-param-notminor": "Nesmulkus pakeitimas.",
+ "apihelp-edit-param-bot": "Pažymėti šį pakeitimą kaip roboto pakeitimą.",
+ "apihelp-edit-param-createonly": "Neredaguoti puslapio jei jis jau egzistuoja.",
+ "apihelp-edit-param-nocreate": "Parodyti klaidą, jei puslapis neegzistuoja.",
+ "apihelp-edit-param-watch": "Pridėti puslapį į dabartinio vartotojo stebimųjų sąrašą.",
+ "apihelp-edit-param-unwatch": "Pašalinti puslapį iš dabartinio vartotojo stebimųjų sąrašo.",
+ "apihelp-edit-param-redirect": "Automatiškai išspręsti peradresavimus.",
+ "apihelp-edit-param-contentmodel": "Naujam turiniui taikomas turinio modelis.",
+ "apihelp-edit-example-edit": "Redaguoti puslapį.",
+ "apihelp-emailuser-summary": "Siųsti el. laišką naudotojui.",
+ "apihelp-emailuser-param-target": "El. laiško gavėjas.",
+ "apihelp-emailuser-param-subject": "Temos antraštė.",
+ "apihelp-emailuser-param-ccme": "Siųsti šio laiško kopiją man.",
+ "apihelp-emailuser-example-email": "Siųsti el. pašto vartotojui <kbd>WikiSysop</kbd> su tekstu <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-param-title": "Puslapio pavadinimas.",
+ "apihelp-feedcontributions-summary": "Gražina vartotojo įnašų srautą.",
+ "apihelp-feedcontributions-param-feedformat": "Srauto formatas.",
+ "apihelp-feedcontributions-param-year": "Nuo metų (ir anksčiau).",
+ "apihelp-feedcontributions-param-month": "Nuo mėnesio (ir anksčiau).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtruoti įnašus, kurie turi šias žymes.",
+ "apihelp-feedcontributions-param-deletedonly": "Rodyti tik ištrintus įnašus.",
+ "apihelp-feedcontributions-param-toponly": "Rodyti tik keitimus, kurie yra paskutiniai pakeitimai.",
+ "apihelp-feedcontributions-param-newonly": "Rodyti tik keitimus, kurie yra puslapio sukūrimai.",
+ "apihelp-feedcontributions-param-hideminor": "Slėpti nedidelius pakeitimus.",
+ "apihelp-feedcontributions-param-showsizediff": "Rodyti dydžio skirtumą tarp keitimų.",
+ "apihelp-feedcontributions-example-simple": "Gražinti įnašus vartotojui <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Gražina naujausių pakeitimų srautą.",
+ "apihelp-feedrecentchanges-param-feedformat": "Srauto formatas.",
+ "apihelp-feedrecentchanges-param-limit": "Maksimalus grąžinamų rezultatų skaičius.",
+ "apihelp-feedrecentchanges-param-from": "Rodyti pakeitimus nuo tada.",
+ "apihelp-feedrecentchanges-param-hideminor": "Slėpti smulkius pakeitimus.",
+ "apihelp-feedrecentchanges-param-hidebots": "Slėpti robotų pakeitimus.",
+ "apihelp-feedrecentchanges-param-hideanons": "Slėpti vartotojų anonimų pakeitimus.",
+ "apihelp-feedrecentchanges-param-hideliu": "Slėpti užsiregistravusių vartotojų pakeitimus.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Slėpti pakeitimus, atliktus dabartinio vartotojo.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Slėpti kategorijos narystės pakeitimus.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtruoti pagal žymę.",
+ "apihelp-feedrecentchanges-param-target": "Rodyti tik keitimus puslapiuose, pasiekiamuose iš šio puslapio.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Vietoj to, rodyti pakeitimus puslapyje, susietame su pasirinktu puslapiu.",
+ "apihelp-feedrecentchanges-example-simple": "Parodyti naujausius keitimus.",
+ "apihelp-feedrecentchanges-example-30days": "Rodyti naujausius pakeitimus per 30 dienų.",
+ "apihelp-feedwatchlist-summary": "Gražina stebimųjų sąrašo srautą.",
+ "apihelp-feedwatchlist-param-feedformat": "Srauto formatas.",
+ "apihelp-feedwatchlist-example-default": "Rodyti stebimųjų sąrašo srautą.",
+ "apihelp-feedwatchlist-example-all6hrs": "Rodyti visus pakeitimus stebimuose puslapiuose per paskutines 6 valandas.",
+ "apihelp-filerevert-param-comment": "Įkėlimo pastabos.",
+ "apihelp-help-summary": "Rodyti pagalbą pasirinktiems moduliams.",
+ "apihelp-help-example-main": "Pagalba pagrindiniam moduliui.",
+ "apihelp-help-example-recursive": "Visa pagalba viename puslapyje.",
+ "apihelp-help-example-help": "Pačio pagalbos modulio pagalba.",
+ "apihelp-imagerotate-summary": "Pasukti viena ar daugiau paveikslėlių.",
+ "apihelp-imagerotate-param-rotation": "Kiek laipsnių pasukti paveikslėlį pagal laikrodžio rodyklę.",
+ "apihelp-imagerotate-example-simple": "Pasukti <kbd>File:Example.png</kbd> <kbd>90</kbd> laipsnių.",
+ "apihelp-imagerotate-example-generator": "Pasukti visus paveikslėlius <kbd>Category:Flip</kbd> <kbd>180</kbd> laipsnių.",
+ "apihelp-import-param-xml": "XML failas įkeltas.",
+ "apihelp-login-param-name": "Vartotojo vardas.",
+ "apihelp-login-param-password": "Slaptažodis.",
+ "apihelp-login-param-domain": "Domenas (neprivaloma).",
+ "apihelp-login-example-login": "Prisijungti.",
+ "apihelp-logout-summary": "Atsijungti ir išvalyti sesijos duomenis.",
+ "apihelp-logout-example-logout": "Atjungti dabartinė vartotoją.",
+ "apihelp-managetags-example-delete": "Ištrinti <kbd>vandlaism</kbd> žymę su priežastimi <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Aktyvuoti žymę pavadinimu <kbd>spam</kbd> su priežastimi <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Išjungti žymę pavadinimu <kbd>spam</kbd> su priežastimi <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Sujungti puslapio istorijas.",
+ "apihelp-mergehistory-param-reason": "Istorijos sujungimo priežastis.",
+ "apihelp-mergehistory-example-merge": "Sujungti visą <kbd>Oldpage</kbd> istoriją į <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Perkelti puslapį.",
+ "apihelp-move-param-to": "Pavadinimas, į kuri pervadinamas puslapis.",
+ "apihelp-move-param-reason": "Pervadinimo priežastis.",
+ "apihelp-move-param-movetalk": "Pervadinti aptarimo puslapį, jei jis egzistuoja.",
+ "apihelp-move-param-noredirect": "Nekurti nukreipimo.",
+ "apihelp-move-param-watch": "Pridėti puslapį ir nukreipimą į dabartinio vartotojo stebimųjų sąrašą.",
+ "apihelp-move-param-unwatch": "Pašalinti puslapį ir nukreipimą iš dabartinio vartotojo stebimųjų sąrašo.",
+ "apihelp-move-param-ignorewarnings": "Ignuoruoti bet kokius įspėjimus.",
+ "apihelp-move-example-move": "Perkelti <kbd>Badtitle</kbd> į <kbd>Goodtitle</kbd> nepaliekant nukreipimo.",
+ "apihelp-opensearch-summary": "Ieškoti viki naudojant OpenSearch protokolą.",
+ "apihelp-opensearch-param-limit": "Maksimalus grąžinamas rezultatų skaičius.",
+ "apihelp-opensearch-example-te": "Rasti puslapius prasidedančius su <kbd>Te</kbd>.",
+ "apihelp-options-example-reset": "Nustatyti visus pageidavimus iš naujo.",
+ "apihelp-options-example-change": "Keisti <kbd>skin</kbd> ir <kbd>hideminor</kbd> pageidavimus.",
+ "apihelp-options-example-complex": "Nustatyti visus pageidavimus iš naujo, tada nustatyti <kbd>skin</kbd> ir <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Gauti informaciją apie API modulius.",
+ "apihelp-protect-example-protect": "Apsaugoti puslapį.",
+ "apihelp-query-param-list": "Kurios sąrašus gauti.",
+ "apihelp-query-param-meta": "Kokius metaduomenis gauti.",
+ "apihelp-query+allcategories-param-dir": "Rūšiavimo kryptis.",
+ "apihelp-query+allcategories-param-min": "Gražinti tik kategorijas, kuriuose yra bent tiek narių.",
+ "apihelp-query+allcategories-param-max": "Gražinti tik kategorijas, kuriuose yra iki tiek narių.",
+ "apihelp-query+allcategories-param-limit": "Kiek kategorijų gražinti.",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Prideda puslapių kategorijoje skaičių.",
+ "apihelp-query+alldeletedrevisions-param-from": "Pradėti sąrašą šiuo pavadinimu.",
+ "apihelp-query+alldeletedrevisions-param-to": "Sustabdyti sąrašą ties šiuo pavadinimu.",
+ "apihelp-query+alldeletedrevisions-example-user": "Sąrašas paskutinių 50 ištrintų indėlių pagal vartotoją\n<kbd>Pavyzdys</kbd>.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Prideda failo pavadinimą.",
+ "apihelp-query+allfileusages-param-limit": "Kiek iš viso gražinti objektų.",
+ "apihelp-query+allfileusages-example-unique": "Pateikti unikalius failų pavadinimus.",
+ "apihelp-query+allfileusages-example-unique-generator": "Gauna visus failų pavadinimus, paženklinant trūkstamus.",
+ "apihelp-query+allfileusages-example-generator": "Gauti puslapius, kuriuose yra failai.",
+ "apihelp-query+allimages-param-sort": "Pagal ką rūšiuoti.",
+ "apihelp-query+allimages-param-limit": "Kiek iš viso gražinti paveikslėlių.",
+ "apihelp-query+allimages-example-B": "Rodyti failų sąrašą, pradedant raide <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Rodyti neseniai įkeltų failų sąrašą, panašu į [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Rodyti sąrašą failų su MIME tipu <kbd>image/png</kbd> arba <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Rodyti informaciją apie 4 failus, pradedant raide <kbd>T</kbd>.",
+ "apihelp-query+alllinks-param-prop": "Kokią informaciją įtraukti:",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Prideda nuorodos pavadinimą.",
+ "apihelp-query+alllinks-param-limit": "Kiek objektų iš viso gražinti.",
+ "apihelp-query+allmessages-param-lang": "Gražinti pranešimus šia kalba.",
+ "apihelp-query+allmessages-param-from": "Gražinti pranešimus, pradedant šiuo pranešimu.",
+ "apihelp-query+allmessages-param-to": "Gražinti pranešimus, baigiant šiuo pranešimu.",
+ "apihelp-query+allrevisions-param-namespace": "Rodyti puslapius tik šioje vardų srityje.",
+ "apihelp-query+mystashedfiles-param-limit": "Kiek gauti failų.",
+ "apihelp-query+allusers-param-prop": "Kokią informaciją įtraukti:",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Nurodo visas grupes, kuriuose vartotojas yra automatiškai.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Nurodo teises, kurias turi vartotojas.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Prideda vartotojo pakeitimų skaičių.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Prideda laiko žymą, nurodančia kada vartotojas prisiregistravo, jei prieinama (gali būti tuščias).",
+ "apihelp-query+allusers-param-limit": "Kiek viso gražinti vartotojų vardų.",
+ "apihelp-query+allusers-param-witheditsonly": "Nurodyti tik vartotojus, kurie atliko keitimus.",
+ "apihelp-query+allusers-param-activeusers": "Nurodyti tik vartotojus, kurie buvo aktyvus per {{PLURAL:$1|paskutinę dieną|paskutines $1 dienas}}.",
+ "apihelp-query+allusers-example-Y": "Nurodyti vartotojus, pradedant nuo <kbd>Y</kbd>.",
+ "apihelp-query+backlinks-summary": "Rasti visus puslapius, kurie nukreipia į pateiktą puslapį.",
+ "apihelp-query+backlinks-example-simple": "Rodyti nuorodas <kbd>Pagrindinis puslapis</kbd>.",
+ "apihelp-query+blocks-summary": "Nurodyti visus užblokuotus vartotojus ir IP adresus.",
+ "apihelp-query+blocks-param-limit": "Maksimalus nurodomų blokavimų skaičius.",
+ "apihelp-query+blocks-paramvalue-prop-id": "Prideda bloko ID.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Prideda užblokuoto vartotojo vardą.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Prideda užblokuoto vartotojo ID.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Prideda užblokuoto vartotojo vardą.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Prideda užblokuoto vartotojo ID.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Prideda blokavimo laiko žymę.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Prideda blokavimo pabaigos laiko žymes.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Prideda blokavimo priežastį.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Prideda blokavimo paveiktų IP adresų diapazoną.",
+ "apihelp-query+blocks-example-simple": "Nurodyti blokavimus.",
+ "apihelp-query+blocks-example-users": "Nurodo vartotojų <kbd>Alice</kbd> ir <kbd>Bob</kbd> blokavimus.",
+ "apihelp-query+categories-summary": "Nurodo visas kategorijas, kurioms priklauso puslapiai.",
+ "apihelp-query+categories-param-show": "Kokias kategorijas rodyti.",
+ "apihelp-query+categories-param-limit": "Kiek kategorijų gražinti.",
+ "apihelp-query+categories-param-categories": "Nurodyti tik šias kategorijas. Naudinga, kai norima patikrinti ar tam tikras puslapis yra tam tikroje kategorijoje.",
+ "apihelp-query+categories-example-simple": "Gauti sąrašą kategorijų, kurioms priklauso puslapis <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categories-example-generator": "Gauti informaciją apie visas kategorijas, panaudotas <kbd>Albert Einstein</kbd> puslapyje.",
+ "apihelp-query+categoryinfo-summary": "Gražina informaciją apie pateiktas kategorijas.",
+ "apihelp-query+categoryinfo-example-simple": "Gauti informaciją apie <kbd>Category:Foo</kbd> ir <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Nurodyti visus puslapius pateiktoje kategorijoje.",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Prideda puslapio ID.",
+ "apihelp-query+categorymembers-param-limit": "Maksimalus grąžinamų puslapių skaičius.",
+ "apihelp-query+categorymembers-param-startsortkey": "Vietoj to, naudoti $1starthexsortkey",
+ "apihelp-query+categorymembers-param-endsortkey": "Vietoj to, naudoti $1endhexsortkey",
+ "apihelp-query+categorymembers-example-simple": "Gauti pirmus 10 puslapiu iš <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Gauti puslapių informaciją apie pirmus 10 puslapių iš <kbd>Category:Physics</kbd>.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Režimas|Režimai}}: $2",
+ "apihelp-query+duplicatefiles-param-limit": "Kiek pasikartojančių failų gražinti.",
+ "apihelp-query+duplicatefiles-example-simple": "Ieškoti [[:File:Albert Einstein Head.jpg]] dublikatų.",
+ "apihelp-query+duplicatefiles-example-generated": "Ieškoti pasikartojančių visuose failuose.",
+ "apihelp-query+embeddedin-param-title": "Pavadinimas paieškai. Negali būti naudojamas kartu su $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "Puslapio ID paieškai. Negali būti naudojamas kartu su $1title.",
+ "apihelp-query+embeddedin-param-limit": "Kiek puslapių iš viso gražinti.",
+ "apihelp-query+extlinks-param-limit": "Kiek nuorodų grąžinti.",
+ "apihelp-query+extlinks-example-simple": "Gauti sąrašą <kbd>Main Page</kbd> išorinių nuorodų.",
+ "apihelp-query+exturlusage-param-prop": "Kokią informaciją įtraukti:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Prideda puslapio ID.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Prideda URL, panaudota puslapyje.",
+ "apihelp-query+exturlusage-param-limit": "Kiek puslapių gražinti.",
+ "apihelp-query+exturlusage-example-simple": "Rodyti puslapius, nurodančius į <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-param-prop": "Kokią paveikslėlio informaciją gauti:",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Prideda laiko žymę įkeltai versijai.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Prideda vartotoją, kuris įkėlė paveikslėlio versiją.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Prideda paveikslėlio dydžio informaciją baitais ir aukštį, plotį ir puslapių skaičių (jei taikoma).",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Prideda paveikslėlio MIME.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Prideda paveikslėlio medijos tipą.",
+ "apihelp-query+filearchive-example-simple": "Rodyti visų ištrintų failų sąrašą.",
+ "apihelp-query+fileusage-param-prop": "Kurias savybes gauti:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "Kiekvieno puslapio ID.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Kiekvieno puslapio pavadinimas.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Pažymėti jei puslapis yra peradresavimas.",
+ "apihelp-query+fileusage-param-limit": "Kiek gražinti.",
+ "apihelp-query+fileusage-example-simple": "Gauti sąrašą puslapių, kurie naudoja [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Gauti informaciją apie puslapius, kurie naudoja [[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "Gražina failo informaciją ir įkėlimų istoriją.",
+ "apihelp-query+imageinfo-param-prop": "Kurią failo informaciją gauti:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Prideda laiko žymę įkeltai versijai.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Prideda vartotoją, kuris įkėlę kiekvieną failo versiją.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Prideda vartotojo ID, kuris įkėlė kiekvieną failo versiją.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Versijos komentaras.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Prideda MIME failo tipą.",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Prideda failo medijos tipą.",
+ "apihelp-query+imageinfo-param-urlheight": "Panašu į $1urlwidth.",
+ "apihelp-query+images-param-limit": "Kiek failų gražinti.",
+ "apihelp-query+images-param-images": "Nurodyti tik šiuos failus. Naudinga, kai norima patikrinti ar tam tikras puslapis turi tam tikrą failą.",
+ "apihelp-query+images-example-simple": "Gauti sąrašą failų, kurie naudojami [[Main Page]].",
+ "apihelp-query+images-example-generator": "Gauti informaciją apie failus, kurie yra naudojami [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Rasti visus puslapius, kurie naudoja duotą paveikslėlio pavadinimą.",
+ "apihelp-query+info-summary": "Gauti pagrindinę puslapio informaciją.",
+ "apihelp-query+info-param-prop": "Kokias papildomas savybes gauti:",
+ "apihelp-query+info-paramvalue-prop-protection": "Nurodyti kiekvieno puslapio apsaugos lygį.",
+ "apihelp-query+info-paramvalue-prop-watched": "Kiekvieno puslapio stebėjimo būsena.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Stebėtojų skaičius, jei leidžiama.",
+ "apihelp-query+info-paramvalue-prop-readable": "Ar vartotojas gali skaityti šį puslapį.",
+ "apihelp-query+info-paramvalue-prop-preload": "Pateikia tekstą, gražinta EditFormPreloadText.",
+ "apihelp-query+info-example-simple": "Gauti informaciją apie puslapį <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Gauti bendrą ir apsaugos informaciją apie <kbd>Main Page</kbd> puslapį.",
+ "apihelp-query+iwbacklinks-param-prop": "Kurias savybes gauti:",
+ "apihelp-query+iwbacklinks-example-simple": "Gauti puslapius, nurodančius į [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Gauti informaciją apie puslapius, nurodančius į [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Prideda visą URL.",
+ "apihelp-query+langbacklinks-param-lang": "Kalbos nuorodos kalba.",
+ "apihelp-query+langbacklinks-param-limit": "Kiek puslapių iš viso gražinti.",
+ "apihelp-query+langbacklinks-param-prop": "Kurias savybes gauti:",
+ "apihelp-query+langbacklinks-example-simple": "Gauti puslapius, nurodančius į [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Gauti informaciją apie puslapius, nurodančius į [[:fr:Test]].",
+ "apihelp-query+langlinks-param-url": "Ar gauti visą URL (negali būti naudojamas su <var>$1prop</var>).",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Prideda visą URL.",
+ "apihelp-query+links-param-limit": "Kiek nuorodų grąžinti.",
+ "apihelp-query+links-example-simple": "Gauti nuorodas iš puslapio <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Gauti informaciją apie puslapių nuorodas puslapyje <kbd>Main Page</kbd>.",
+ "apihelp-query+linkshere-summary": "Rasti visus puslapius, kurie nurodo į pateiktus puslapius.",
+ "apihelp-query+linkshere-param-prop": "Kurias savybes gauti:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "Kiekvieno puslapio ID.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Kiekvieno puslapio pavadinimas.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Pažymėti jei puslapis yra peradresavimas.",
+ "apihelp-query+linkshere-param-limit": "Kiek gražinti.",
+ "apihelp-query+linkshere-param-show": "Rodyti tik elementus, atitinkančius šiuos kriterijus:\n;redirect:Rodyti tik nukreipimus.\n;!redirect:Rodyti tik ne nukreipimus.",
+ "apihelp-query+linkshere-example-simple": "Gauti sąrašą puslapių, kurie nurodo į [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Gauti informaciją apie puslapius, kurie nurodo į [[Main Page]].",
+ "apihelp-query+logevents-summary": "Gauti įvykius iš žurnalų.",
+ "apihelp-query+logevents-param-prop": "Kurias savybes gauti:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Prideda žurnalo įvykio ID.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Prideda žurnalo įvykio tipą.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Prideda papildomus duomenis, sugeneruotus plėtinių.",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "Kiekvieno puslapio ID.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Kiekvieno puslapio pavadinimas.",
+ "apihelp-query+transcludedin-param-limit": "Kiek gražinti.",
+ "apihelp-query+usercontribs-summary": "Gauti visus vartotojo keitimus.",
+ "apihelp-query+usercontribs-param-limit": "Maksimalus gražinamų įnašų skaičius.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Prideda keitimo komentarą.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Prideda naują keitimo dydį.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Prideda vartotojo tikrą vardą.",
+ "apihelp-query+userinfo-example-simple": "Gauti informacijos apie dabartinį vartotoją.",
+ "apihelp-query+userinfo-example-data": "Gauti papildomos informacijos apie dabartinį vartotoją.",
+ "apihelp-query+users-summary": "Gauti informacijos apie vartotojų sąrašą.",
+ "apihelp-query+users-param-prop": "Kokią informaciją įtraukti:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Pažymi ar vartotojas užblokuotas, kas tai padarė ir dėl kokios priežasties.",
+ "apihelp-query+users-paramvalue-prop-groups": "Nurodo grupes, kurioms priklauso kiekvienas vartotojas.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Nurodo visas grupes, kuriuose vartotojas yra automatiškai kaip narys.",
+ "apihelp-query+users-paramvalue-prop-rights": "Nurodo visas teises, kurias turi kiekvienas vartotojas.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Prideda vartotojo keitimų skaičių.",
+ "apihelp-query+users-paramvalue-prop-registration": "Prideda vartotojo registracijos laiko žymę.",
+ "apihelp-query+users-param-users": "Sąrašas vartotojų, kurių informaciją gauti.",
+ "apihelp-query+users-param-userids": "Vartotojų ID sąrašas, kurių informaciją gauti:",
+ "apihelp-query+users-param-token": "Vietoj to naudoti <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+users-example-simple": "Gražinti informaciją apie vartotoją <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-param-user": "Nurodyti tik pakeitimus, atliktus šio vartotojo.",
+ "apihelp-query+watchlist-param-excludeuser": "Nenurodyti pakeitimų, kuriuos atliko šis vartotojas.",
+ "apihelp-query+watchlist-param-limit": "Kiek viso rezultatų gražinti vienai užklausai.",
+ "apihelp-query+watchlist-param-prop": "Kokias papildomas savybes gauti:",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Prideda puslapio pavadinimą.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Prideda naują vartotoją, kuris atliko pakeitimą.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Prideda vartotojo ID, kuris atliko pakeitimą.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Prideda keitimo komentarą.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Prideda keitimo laiko žymę.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Prideda naują ir seną puslapio ilgius.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Prideda laiko žymę, kada vartotojui buvo pranešta apie pakeitimą.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Prideda žurnalo informaciją, kai reikia.",
+ "apihelp-query+watchlist-param-type": "Kokios keitimų tipus rodyti:",
+ "apihelp-query+watchlist-paramvalue-type-external": "Išoriniai keitimai.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Puslapio sukūrimai.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Žurnalo įrašai.",
+ "apihelp-resetpassword-param-user": "Iš naujo nustatomas vartotojas.",
+ "apihelp-resetpassword-param-email": "Iš naujo nustatomo vartotojo el. pašto adresas.",
+ "apihelp-setpagelanguage-summary": "Keisti puslapio kalbą.",
+ "apihelp-setpagelanguage-param-reason": "Keitimo priežastis.",
+ "apihelp-stashedit-param-title": "Puslapio pavadinimas buvo redaguotas.",
+ "apihelp-stashedit-param-sectiontitle": "Naujo skyriaus pavadinimas.",
+ "apihelp-stashedit-param-text": "Puslapio turinys.",
+ "apihelp-stashedit-param-summary": "Keisti santrauką.",
+ "apihelp-tag-param-reason": "Keitimo priežastis.",
+ "apihelp-unblock-summary": "Atblokuoti naudotoją.",
+ "apihelp-unblock-param-reason": "Atblokavimo priežastis.",
+ "apihelp-unblock-example-id": "Atblokuoti blokavimo ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Atblokuoti vartoją <kbd>Bob</kbd> su priežastimi <kbd>Sorry Bob</kbd>.",
+ "apihelp-undelete-param-title": "Atkuriamo puslapio pavadinimas.",
+ "apihelp-undelete-param-reason": "Atkūrimo priežastis.",
+ "apihelp-undelete-example-page": "Atkurti puslapį <kbd>Main Page</kbd>.",
+ "apihelp-upload-param-watch": "Stebėti šį puslapį.",
+ "apihelp-upload-param-ignorewarnings": "Ignuoruoti bet kokius įspėjimus.",
+ "apihelp-upload-param-file": "Failo turinys.",
+ "apihelp-upload-param-url": "URL, iš kurio gauti failą.",
+ "apihelp-upload-example-url": "Įkelti iš URL.",
+ "apihelp-upload-example-filekey": "Baigti įkėlimą, kuris nepavyko dėl įspėjimų.",
+ "apihelp-userrights-summary": "Keisti vartotoju grupės narystę.",
+ "apihelp-userrights-param-user": "Vartotojo vardas.",
+ "apihelp-userrights-param-userid": "Vartotojo ID.",
+ "apihelp-userrights-param-add": "Pridėti vartotoją į šias grupes.",
+ "apihelp-userrights-param-remove": "Pašalinti vartotoją iš šių grupių.",
+ "apihelp-userrights-param-reason": "Keitimo priežastis.",
+ "apihelp-watch-summary": "Pridėti ar pašalinti puslapius iš dabartinio vartotojo stebimųjų sąrašo.",
+ "apihelp-watch-example-watch": "Stebėti puslapį <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Nebestebėti puslapio <kbd>Main Page</kbd>.",
+ "api-format-title": "MedijaViki API rezultatas",
+ "api-format-prettyprint-status": "Šis atsakymas būtų gražintas su HTTP statusu $1 $2.",
+ "api-help-title": "MedijaViki API pagalba",
+ "api-help-main-header": "Pagrindinis modulis",
+ "api-help-source": "Šaltinis: $1",
+ "api-help-source-unknown": "Šaltinis: <span class=\"apihelp-unknown\">nežinomas</span>",
+ "api-help-license": "Licencija: [[$1|$2]]",
+ "api-help-license-noname": "Licencija: [[$1|Žiūrėti nuorodą]]",
+ "api-help-license-unknown": "Licencija: <span class=\"apihelp-unknown\">nežinoma</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parametras|Parametrai}}:",
+ "api-help-param-required": "Šis parametras yra reikalingas.",
+ "api-help-datatypes-header": "Duomenų tipai",
+ "api-help-param-limit": "Leidžiama ne daugiau nei $1.",
+ "api-help-param-limit2": "Leidžiama ne daugiau nei $1 ($2 robotams).",
+ "api-help-param-default": "Numatytasis: $1",
+ "api-help-param-default-empty": "Numatytasis: <span class=\"apihelp-empty\">(tuščia)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(nėra aprašymo)</span>",
+ "api-help-examples": "{{PLURAL:$1|Pavyzdys|Pavyzdžiai}}:",
+ "api-help-permissions": "{{PLURAL:$1|Leidimas|Leidimai}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Suteikta}}: $2",
+ "apierror-articleexists": "Straipsnis, kurį bandėte sukurti, jau yra sukurtas.",
+ "apierror-autoblocked": "Jūsų IP adresas buvo automatiškai užblokuotas, nes jis buvo naudojamas užblokuoto vartotojo.",
+ "apierror-badgenerator-unknown": "Nežinomas <kbd>generator=$1</kbd>.",
+ "apierror-badip": "IP parametras negalimas.",
+ "apierror-badquery": "Negalima užklausa.",
+ "apierror-badurl": "Negalima reikšmė „$2“ URL parametrui <var>$1</var>.",
+ "apierror-blockedfrommail": "Jus buvote užblokuotas nuo el. laiško siuntimo.",
+ "apierror-blocked": "Jus buvote užblokuotas nuo redagavimo.",
+ "apierror-botsnotsupported": "Ši sąsaja negali būti palaikoma robotams.",
+ "apierror-cannotreauthenticate": "Veiksmas negalimas, nes jūsų tapatybė negali būti patvirtinta.",
+ "apierror-cannotviewtitle": "Jūs negalite peržiūrėti $1.",
+ "apierror-cantblock": "Neturite teisės blokuoti vartotojus.",
+ "apierror-cantchangecontentmodel": "Neturite teisės pakeisti puslapio turinio modelį.",
+ "apierror-cantimport-upload": "Neturite teisės importuoti įkeltų puslapių.",
+ "apierror-cantimport": "Neturite teisės importuoti puslapių.",
+ "apierror-copyuploadbadurl": "Įkėlimas neleidžiamas iš šio URL.",
+ "apierror-databaseerror": "[$1] Duomenų bazės užklausos klaida.",
+ "apierror-emptynewsection": "Neįmanoma kurti naujų tuščių skyrių.",
+ "apierror-filedoesnotexist": "Failas neegzistuoja.",
+ "apierror-filetypecannotberotated": "Failo tipas negali būti pasuktas.",
+ "apierror-import-unknownerror": "Nežinoma klaida importuojant: $1.",
+ "apierror-invalidcategory": "Kategorijos pavadinimas, kurį įvedėte, yra negalimas.",
+ "apierror-invalidparammix": "{{PLURAL:$2|parametrai}} $1 negali būti naudojami kartu.",
+ "apierror-invalidtitle": "Blogas pavadinimas „$1“.",
+ "apierror-invaliduser": "Negalimas vartotojo vardas „$1“.",
+ "apierror-invaliduserid": "Vartotojo ID <var>$1</var> nėra galimas.",
+ "apierror-missingtitle": "Puslapis, kurį nurodėte, neegzistuoja.",
+ "apierror-missingtitle-byname": "Puslapis $1 neegzistuoja",
+ "apierror-multpages": "<var>$1</var> gali būti naudojamas tik su vienu puslapiu.",
+ "apierror-mustbeloggedin-generic": "Turite būti prisijungęs.",
+ "apierror-mustbeloggedin-linkaccounts": "Turite būti prisijungęs, kad galėtumėte susieti paskyras.",
+ "apierror-mustbeloggedin": "Turite būti prisijungęs, kad $1.",
+ "apierror-nochanges": "Neprašyta jokių keitimų.",
+ "apierror-noedit-anon": "Anoniminiai vartotojai negali redaguoti puslapių.",
+ "apierror-noedit": "Neturite teisės redaguoti puslapius.",
+ "apierror-nosuchlogid": "Nėra žurnalo įrašo su ID $1.",
+ "apierror-nosuchpageid": "Nėra puslapio su ID $1.",
+ "apierror-nosuchsection": "Nėra skyriaus $1.",
+ "apierror-nosuchsection-what": "$2 nėra sekcijos $1.",
+ "apierror-nosuchuserid": "Nėra vartotojo su ID $1.",
+ "apierror-pagelang-disabled": "Puslapio kalbos keitimas nėra leidžiamas šioje viki.",
+ "apierror-paramempty": "Parametras <var>$1</var> negali būti tusčiau.",
+ "apierror-permissiondenied": "Neturite leidimo $1.",
+ "apierror-permissiondenied-generic": "Teisė nesuteikta.",
+ "apierror-protect-invalidaction": "Negalimas apsaugos tipas „$1“.",
+ "apierror-protect-invalidlevel": "Negalimas apsaugos lygis „$1“.",
+ "apierror-readonly": "Viki šiuo metu yra skaitymo režime.",
+ "apierror-sectionreplacefailed": "Nepavyko sujungti atnaujinto skyriaus.",
+ "apierror-specialpage-cantexecute": "Neturite teisės peržiūrėti šio specialaus puslapio rezultatus.",
+ "apierror-stashwrongowner": "Neteisingas savininkas: $1",
+ "apierror-timeout": "Serveris neatsakė per numatytą laiką.",
+ "apierror-unknownerror-nocode": "Nežinoma klaida.",
+ "apierror-unknownerror": "Nežinoma klaida: „$1“.",
+ "apierror-unknownformat": "Neatpažintas formatas „$1“.",
+ "apierror-unrecognizedparams": "{{PLURAL:$2|Neatpažintas parametras|Neatpažinti parametrai}}: $1.",
+ "apierror-writeapidenied": "Negalite redaguoti šios viki per API.",
+ "apiwarn-deprecation-httpsexpected": "panaudotas HTTP, kai buvo tikėtasi HTTPS.",
+ "apiwarn-invalidcategory": "„$1“ nėra kategorija.",
+ "apiwarn-invalidtitle": "„$1“ nėra galimas pavadinimas.",
+ "apiwarn-notfile": "„$1“ nėra failas.",
+ "apiwarn-tokennotallowed": "Veiksmas „$1“ nėra leidžiamas dabartiniam vartotojui.",
+ "apiwarn-validationfailed-badpref": "negalimas nustatymas.",
+ "apiwarn-validationfailed": "Patvirtinimo klaida skirta <kbd>$1</kbd>: $2",
+ "api-feed-error-title": "Klaida ($1)",
+ "api-credits-header": "Kreditai"
+}
diff --git a/www/wiki/includes/api/i18n/lv.json b/www/wiki/includes/api/i18n/lv.json
new file mode 100644
index 00000000..270025ce
--- /dev/null
+++ b/www/wiki/includes/api/i18n/lv.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass",
+ "Silraks"
+ ]
+ },
+ "apihelp-block-summary": "Bloķēt lietotāju",
+ "apihelp-block-param-reason": "Bloķēšanas iemesls:",
+ "apihelp-delete-summary": "Dzēst lapas",
+ "apihelp-emailuser-summary": "Sūtīt e-pastu lietotājam",
+ "apihelp-userrights-param-userid": "Lietotāja ID:",
+ "apierror-nosuchuserid": "Nav lietotāja ar ID $1."
+}
diff --git a/www/wiki/includes/api/i18n/lzh.json b/www/wiki/includes/api/i18n/lzh.json
new file mode 100644
index 00000000..970bea94
--- /dev/null
+++ b/www/wiki/includes/api/i18n/lzh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "RalfX"
+ ]
+ },
+ "apihelp-feedcontributions-param-toponly": "僅示至新審之纂"
+}
diff --git a/www/wiki/includes/api/i18n/mg.json b/www/wiki/includes/api/i18n/mg.json
new file mode 100644
index 00000000..58d50788
--- /dev/null
+++ b/www/wiki/includes/api/i18n/mg.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "apihelp-main-summary": "",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Torohevitra be kokoa]\n* [https://www.mediawiki.org/wiki/API:FAQ Fanontaniana miverina matetika]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lisitry ny mailaka manaraka]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Filazana API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Baogy & hataka]\n</div>\n<strong>Status:</strong> \nTokony mandeha avokoa ny fitaovana aseho eto amin'ity pehy ity, na dia izany aza mbola am-panamboarana ny API ary mety hiova na oviana na oviana. Araho amin'ny alalan'ny fisoratana ny mailakao ao amin'ny [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce lisitra fampielezana] ny fiovana.\n\n<strong>Hataka diso:</strong> \nRehefa alefa ao amin'i API ny hata, ho alefa miaraka amin'ny lakile \"MediaWiki-API-Error\" ny header HTTP ary samy homen-tsanda mitovy ny header ary ny kaodin-kadisoana. Ho an'ny torohay fanampiny dia jereo https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+ "apihelp-main-param-action": "Inona ny zavatra ho atao.",
+ "apihelp-main-param-format": "Format mivoaka",
+ "apihelp-block-param-user": "Anaram-pikambana, adiresy IP na valan' IP hosakanana.",
+ "apihelp-block-param-expiry": "Fitaom-pisasarana. Mety miovaova(e.g. <kbd>5 volana</kbd> na <kbd>herinandro 2</kbd>) na voafaritra (e.g. <kbd>2014-09-18T12:34:56Z</kbd>). Raha atao <kbd>tsiefa</kbd>, <kbd>tsy fantatra</kbd>, na <kbd>mandrakizay</kbd>, dia tsy hitsahatra mihitsy ilay sakana.",
+ "apihelp-block-param-reason": "Antom-panakanana",
+ "apihelp-block-param-anononly": "Mpikambana tsy nisoratra anarana ihany no sakanana (izany hoe aza mamela fiovan'olona tsy nisoratra anarana avy amin'ity adiresy IP ity).",
+ "apihelp-block-param-nocreate": "Hanakana famoronan-kaonty.",
+ "apihelp-block-param-autoblock": "Manakana ny adiresy IP farany nampiasaina, ary izay adiresy IP mety hidirany.",
+ "apihelp-block-param-noemail": "Hanakana ny mpikambana tsy handefa mailaka amin'ny alalan'ny wiki (Mila ny zo <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Hanafina ny anaram-pikambana amin'ny laogim-panakanana (mila ny zo <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Hamela ny mpikambana hanova ny pejin-dresany (miankina amin'ny <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>)",
+ "apihelp-block-param-reblock": "Raha efa nosakanana ilay mpikambana, itsahina ilay sakana efa misy.",
+ "apihelp-block-param-watchuser": "Hijery ny adiresy IP ary ny pejin-dresak'ilay mpikambana.",
+ "apihelp-block-example-ip-simple": "Hanakana ny adiresy IP <kbd>192.0.2.5</kbd> mandritry ny telo andro miaraka amin'ny antony <kbd>Filazana voalohany</kbd>.",
+ "apihelp-compare-param-fromtitle": "Lohateny voalohany ampitahaina.",
+ "apihelp-compare-param-fromid": "ID pejy voalohany ampitahaina.",
+ "apihelp-compare-param-fromrev": "Versions voalohany ampitahaina.",
+ "apihelp-compare-param-totitle": "Lohateny faharoa ampitahaina.",
+ "apihelp-compare-param-toid": "ID pejy faharoa ampitahaina.",
+ "apihelp-compare-param-torev": "Versiona faharoa ampitahaina.",
+ "apihelp-compare-example-1": "Hamorona raki-pahasamihafan'ny versiona 1 sy 2.",
+ "apihelp-createaccount-summary": "Hamorona kaontim-pikambana vaovao.",
+ "apihelp-createaccount-param-name": "Anaram-pikambana.",
+ "apihelp-createaccount-param-password": "Tenimiafina (tsy raharahiana raha voafaritra i <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Vala ho an'ilay famantarana avy any ivelany (azo tsy fenoina).",
+ "apihelp-createaccount-param-token": "Famantarana famoronan-kaonty azo tamin'ny hataka voalohany.",
+ "apihelp-createaccount-param-email": "Adiresy imailaky ny mpikambana (azo tsy fenoina).",
+ "apihelp-createaccount-param-realname": "Tena anaran'ilay mpikambana (azo tsy fenoina)."
+}
diff --git a/www/wiki/includes/api/i18n/mk.json b/www/wiki/includes/api/i18n/mk.json
new file mode 100644
index 00000000..3cec5d49
--- /dev/null
+++ b/www/wiki/includes/api/i18n/mk.json
@@ -0,0 +1,431 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документација]]\n* [[mw:API:FAQ|ЧПП]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Поштенски список]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Соопштенија за Извршникот]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Грешки и барања]\n</div>\n<strong>Статус:</strong> Сите ставки на страницава би требало да работат, но Извршникот сепак е во активна разработка, што значи дека може да се смени во секое време. Објавите за измени можете да ги дознавате ако се пријавите на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ поштенскиот список „the mediawiki-api-announce“].\n\n<strong>Погрешни барања:</strong> Кога Извршникот ќе добие погрешни барања, ќе се испрати HTTP-заглавие со клучот „MediaWiki-API-Error“ и потоа на вредностите на заглавието и шифрата на грешката што ќе се појават ќе им биде зададена истата вредност. ПОвеќе информации ќе најдете на [[mw:API:Errors_and_warnings|Извршник: Грешки и предупредувања]].",
+ "apihelp-main-param-action": "Кое дејство да се изврши.",
+ "apihelp-main-param-format": "Формат на изводот.",
+ "apihelp-main-param-maxlag": "Најголемиот допуштен заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код <samp>maxlag</samp> со порака од обликот <samp>Го чекам $host: има заостаток од $lag секунди</samp>.<br />Погл. [[mw:Manual:Maxlag_parameter|Прирачник: Параметар Maxlag]]",
+ "apihelp-main-param-smaxage": "Задајте му олку секунди на заглавието за контрола HTTP-меѓускладот <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
+ "apihelp-main-param-maxage": "Задајте му олку секунди на заглавието за контрола HTTP-меѓускладот <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
+ "apihelp-main-param-assert": "Провери дали корисникот е најавен ако е зададено <kbd>user</kbd> или дали го има корисничкото право на бот, ако е зададено <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Тука внесената вредност ќе биде вклучена во извештајот. Може да се користи за разликување на барањата.",
+ "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во исходот.",
+ "apihelp-main-param-curtimestamp": "Вклучи тековно време и време и датум во исходот.",
+ "apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како <kbd>https://mk.wikipedia.org</kbd> or <kbd>https://meta.wikimedia.org</kbd>. Ако овој параметар не се совпаѓа со заглавието <code>Origin</code>:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе заглавието <code>Access-Control-Allow-Origin</code>.",
+ "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> со <kbd>siprop=languages</kbd> или укажете <kbd>user</kbd> за да го користите тековно зададениот јазик корисникот, или пак укажете <kbd>content</kbd> за да го користите јазикот на содржината на ова вики.",
+ "apihelp-block-summary": "Блокирај корисник.",
+ "apihelp-block-param-user": "Корисничко име, IP-адреса или IP-опсег ако сакате да блокирате.",
+ "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. <kbd>5 months</kbd> или „2 недели“) или пак апсолутно (на пр. <kbd>2014-09-18T12:34:56Z</kbd>). Ако го зададете <kbd>infinite</kbd>, <kbd>indefinite</kbd> или <kbd>never</kbd>, блокот ќе трае засекогаш.",
+ "apihelp-block-param-reason": "Причина за блокирање.",
+ "apihelp-block-param-anononly": "Блокирај само анонимни корисници (т.е. оневозможи анонимно уредување од оваа IP-адреса).",
+ "apihelp-block-param-nocreate": "Оневозможи создавање кориснички сметки.",
+ "apihelp-block-param-autoblock": "Автоматски блокирај ја последно употребената IP-адреса и сите понатамошни IP-адреси од кои лицето ќе се обиде да се најави.",
+ "apihelp-block-param-noemail": "Оневозможи му на корисникот да испаќа е-пошта преку викито. (Го бара правото code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Скриј го корисничкото име од дневникот на блокирања. (Го бара правото <code>hideuser</code>)",
+ "apihelp-block-param-allowusertalk": "Овозможи му на корисникот да ја уредува неговата разговорна страница (зависи од <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Ако корисникот е веќе блокиран, наметни врз постоечкиот блок.",
+ "apihelp-block-param-watchuser": "Набљудувај ја корисничката страница и разговорна страница на овој корисник или IP-адреса",
+ "apihelp-block-example-ip-simple": "Блокирај ја IP-адресата <kbd>192.0.2.5</kbd> три дена со причината <kbd>Прва опомена</kbd>.",
+ "apihelp-block-example-user-complex": "Блокирај го корисникот <kbd>Vandal</kbd> (Вандал) бесконечно со причината <kbd>Vandal</kbd> (Вандализам) и оневозможи создавање на нови сметки и праќање е-пошта.",
+ "apihelp-checktoken-summary": "Проверка на полноважноста на шифрата од <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Тип на шифра што се испробува.",
+ "apihelp-checktoken-param-token": "Шифра што се испробува.",
+ "apihelp-checktoken-param-maxtokenage": "Најголема допуштена старост на шифрата, во секунди.",
+ "apihelp-checktoken-example-simple": "Испробај ја полноважноста на <kbd>csrf</kbd>-шифрата.",
+ "apihelp-clearhasmsg-summary": "Ја отстранува ознаката „<code>hasmsg</code>“ од тековниот корисник.",
+ "apihelp-clearhasmsg-example-1": "Отстрани ја ознаката „<code>hasmsg</code>“ од тековниот корисник",
+ "apihelp-compare-summary": "Добивање на разлика помеѓу две страници.",
+ "apihelp-compare-extended-description": "Мора да се даде бројот на преработката, насловот на страницата или пак нејзина назнака за „од“ и за „на“.",
+ "apihelp-compare-param-fromtitle": "Прв наслов за споредба.",
+ "apihelp-compare-param-fromid": "Прва назнака на страница за споредба.",
+ "apihelp-compare-param-fromrev": "Прва преработка за споредба.",
+ "apihelp-compare-param-totitle": "Втор наслов за споредба.",
+ "apihelp-compare-param-toid": "Втора назнака на страница за споредба.",
+ "apihelp-compare-param-torev": "Бтора преработка за споредба.",
+ "apihelp-compare-example-1": "Дај разлика помеѓу преработките 1 и 2",
+ "apihelp-createaccount-summary": "Создај нова корисничка сметка.",
+ "apihelp-createaccount-param-name": "Корисничко име.",
+ "apihelp-createaccount-param-password": "Лозинка (се занемарува ако е зададено <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Домен за надворешна заверка (незадолжително).",
+ "apihelp-createaccount-param-token": "Шифра за создавање сметка добиена во првото барање.",
+ "apihelp-createaccount-param-email": "Е-пошта на корисникот (незадолжително).",
+ "apihelp-createaccount-param-realname": "Вистинско име на корисникот (незадолжително).",
+ "apihelp-createaccount-param-mailpassword": "Ако му се зададе било каква вредност, тогаш на корисникот ќе му биде испратена случајна лозинка.",
+ "apihelp-createaccount-param-reason": "Незадолжителна прочина за создавање на сметката која ќе стои во дневниците.",
+ "apihelp-createaccount-param-language": "Јазичен код кој ќе биде стандарден за корисникот (незадолжително, по основно: јазикот на самото вики).",
+ "apihelp-createaccount-example-pass": "Создај го корисникот <kbd>testuser</kbd> со лозинката <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Создај го корисникот <kbd>testmailuser</kbd> и испрати случајно-создадена лозинка по е-пошта.",
+ "apihelp-delete-summary": "Избриши страница.",
+ "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Причина за бришење. Ако не се зададе, ќе се наведе автоматска причина.",
+ "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните на тековниот корисник.",
+ "apihelp-delete-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
+ "apihelp-delete-param-unwatch": "Отстрани ја страницата од набљудуваните на тековниот корисник.",
+ "apihelp-delete-param-oldimage": "Името на страта слика за бришење според добиеното од [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Избриши ја <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Избриши ја <kbd>Main Page</kbd> со причината <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Модулот е деактивиран.",
+ "apihelp-edit-summary": "Создај или уреди страници.",
+ "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со <var>$1title</var>.",
+ "apihelp-edit-param-section": "Број на поднасловот. <kbd>0</kbd> за првиот, <kbd>new</kbd> за нов.",
+ "apihelp-edit-param-sectiontitle": "Назив на новиот поднаслов",
+ "apihelp-edit-param-text": "Содржина на страницата.",
+ "apihelp-edit-param-summary": "Опис на уредувањето. Ова е и назив на поднасловот кога не се зададени $1section=new и $1sectiontitle.",
+ "apihelp-edit-param-tags": "Ознаки за измена што се однесуваат на преработката.",
+ "apihelp-edit-param-minor": "Ситно уредување.",
+ "apihelp-edit-param-notminor": "Неситно уредување.",
+ "apihelp-edit-param-bot": "Означи го уредувањево како ботовско.",
+ "apihelp-edit-param-basetimestamp": "Датум и време на преработката на базата, кои се користат за утврдување на спротиставености во уредувањето. Може да се добие преку [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Датум и време кога сте почнало уредувањето, кои се користат за утврдување на спротиставености во уредувањата. Соодветната вредност се добива користејќи <var>[[Special:ApiHelp/main|curtimestamp]]</var> кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
+ "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со страницата што е избришана во меѓувреме.",
+ "apihelp-edit-param-createonly": "Не ја уредувај страницата ако веќе постои.",
+ "apihelp-edit-param-nocreate": "Дај грешка ако страницата не постои.",
+ "apihelp-edit-param-watch": "Додај ја страницата во набљудуваните на тековниот корисник.",
+ "apihelp-edit-param-unwatch": "Отстрани ја страницата од набљудуваните на тековниот корисник.",
+ "apihelp-edit-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
+ "apihelp-edit-param-md5": "MD5-тарабата на параметарот $1text, или параметрите $1prependtext и $1appendtext поврзани. Ако е зададено, уредувањето нема да се изврши без тарабата да биде исправна.",
+ "apihelp-edit-param-prependtext": "Ставете го текстов на почетокот од страницата. Го заменува $1text.",
+ "apihelp-edit-param-appendtext": "Ставете го текстов на крајот од страницата. Го заменува $1text.\n\nКористете $1section=new наместо овој параметар за да приложите кон новиот поднаслов.",
+ "apihelp-edit-param-undo": "Отповикај ја преработкава. Ги заменува $1text, $1prependtext и $1appendtext.",
+ "apihelp-edit-param-undoafter": "Отповикај ги преработките од $1undo до оваа. Ако не е зададено, отповикај само една.",
+ "apihelp-edit-param-redirect": "Автоматски решавај пренасочувања.",
+ "apihelp-edit-param-contentformat": "Форматот за серијализација на содржината што се користи во вносниот текст.",
+ "apihelp-edit-param-contentmodel": "Содржински модел на новата содржина.",
+ "apihelp-edit-param-token": "Шифрата треба секогаш да се испраќа како последниот параметар, или барем по параметарот $1text.",
+ "apihelp-edit-example-edit": "Уреди страница",
+ "apihelp-edit-example-prepend": "Стави <kbd>_&#95;NOTOC_&#95;</kbd> пред страницата",
+ "apihelp-edit-example-undo": "Отповикај ги преработките од 13579 до 13585 со автоматски опис",
+ "apihelp-emailuser-summary": "Испрати е-пошта на корисник.",
+ "apihelp-emailuser-param-target": "На кој корисник да му се испрати е-поштата.",
+ "apihelp-emailuser-param-subject": "Наслов.",
+ "apihelp-emailuser-param-text": "Содржина.",
+ "apihelp-emailuser-param-ccme": "Прати ми примерок и мене.",
+ "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот <kbd>WikiSysop</kbd> со текстот <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Ги проширува сите шаблони во викитекст.",
+ "apihelp-expandtemplates-param-title": "Наслов на страница.",
+ "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
+ "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <code><nowiki>{{REVISIONID}}</nowiki></code> и слични променливи.",
+ "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n\nИмајте на ум дека ако не изберете никаква вредност, исходот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Проширениот викитекст.",
+ "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
+ "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Прошири го викитекстот <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Дава тековник со придонеси на корисник.",
+ "apihelp-feedcontributions-param-feedformat": "Формат на тековникот.",
+ "apihelp-feedcontributions-param-user": "За кои корисници да се прикажуваат придонесите.",
+ "apihelp-feedcontributions-param-namespace": "По кој именски простор да се филтрираат придонесите:",
+ "apihelp-feedcontributions-param-year": "Од година (и порано):",
+ "apihelp-feedcontributions-param-month": "Од месец (и порано):",
+ "apihelp-feedcontributions-param-tagfilter": "Филтрирај придонеси што имаат ознаки.",
+ "apihelp-feedcontributions-param-deletedonly": "Прикажувај само избришани придонеси.",
+ "apihelp-feedcontributions-param-toponly": "Само последни преработки.",
+ "apihelp-feedcontributions-param-newonly": "Само новосоздадени страници",
+ "apihelp-feedcontributions-param-hideminor": "Сокриј ситни уредувања.",
+ "apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
+ "apihelp-feedcontributions-example-simple": "Покажувај придонеси на <kbd>Пример</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Дава тековник со скорешни промени.",
+ "apihelp-feedrecentchanges-param-feedformat": "Форматот на тековникот.",
+ "apihelp-feedrecentchanges-param-namespace": "На кој именски простор да се ограничи исходот.",
+ "apihelp-feedrecentchanges-param-invert": "Сите именски простори освен избраниот.",
+ "apihelp-feedrecentchanges-param-associated": "Вклучи придружни именски простори (разговор или главен).",
+ "apihelp-feedrecentchanges-param-days": "На кои денови да се ограничат ставките.",
+ "apihelp-feedrecentchanges-param-limit": "Највеќе ставки во исходот за прикажување.",
+ "apihelp-feedrecentchanges-param-from": "Прикажи ги промените оттогаш.",
+ "apihelp-feedrecentchanges-param-hideminor": "Скриј ги ситните промени.",
+ "apihelp-feedrecentchanges-param-hidebots": "Скриј ги промените напарвени од ботови.",
+ "apihelp-feedrecentchanges-param-hideanons": "Скриј ги промените направени од анонимни корисници.",
+ "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Скриј ги промените на тековниот корисник.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Сокриј префрлања во други категории.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
+ "apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
+ "apihelp-feedrecentchanges-example-simple": "Прикажи скорешни промени",
+ "apihelp-feedrecentchanges-example-30days": "Прикажувај скорешни промени 30 дена",
+ "apihelp-feedwatchlist-summary": "Дава тековник со набљудуваните.",
+ "apihelp-feedwatchlist-param-feedformat": "Форматот на тековникот.",
+ "apihelp-feedwatchlist-param-hours": "Испиши страници изменети во рок од олку часови отсега.",
+ "apihelp-feedwatchlist-param-linktosections": "Давај ме право на изменетите делови, ако е можно.",
+ "apihelp-feedwatchlist-example-default": "Прикажи го тековникот на набљудуваните.",
+ "apihelp-feedwatchlist-example-all6hrs": "Прикажи ги сите промени во набљудуваните во последните 6 часа",
+ "apihelp-filerevert-summary": "Врати податотека на претходна верзија.",
+ "apihelp-filerevert-param-filename": "Име на целната податотека, без претставката „Податотека:“.",
+ "apihelp-filerevert-param-comment": "Коментар за подигањето.",
+ "apihelp-filerevert-param-archivename": "Архивски назив на преработката што ја повраќате.",
+ "apihelp-filerevert-example-revert": "Врати ја <kbd>Wiki.png</kbd> на верзијата од <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Прикажувај помош за укажаните модули.",
+ "apihelp-help-param-modules": "Модули за приказ на помош за (вредности на параметрите <var>action</var> и <var>format</var>, или пак <kbd>main</kbd>). Може да се укажат подмодули со <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Прикажувај и помош за подмодули на именуваниот модул.",
+ "apihelp-help-param-recursivesubmodules": "Прикажувај и помош за подмодули рекурзивно.",
+ "apihelp-help-param-helpformat": "Формат на изводот на помошта.",
+ "apihelp-help-param-wrap": "Обвиткај го изводот како станрадна одѕивна структура од прилотот.",
+ "apihelp-help-param-toc": "Вклучи табела со содржина во HTML-изводот.",
+ "apihelp-help-example-main": "Помош за главниот модул",
+ "apihelp-help-example-submodules": "Помош за <kbd>action=query</kbd> и сите негови подмодули.",
+ "apihelp-help-example-recursive": "Сета помош на една страница",
+ "apihelp-help-example-help": "Помош за самиот помошен модул",
+ "apihelp-help-example-query": "Помош за два подмодула за барања",
+ "apihelp-imagerotate-summary": "Сврти една или повеќе слики.",
+ "apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
+ "apihelp-imagerotate-param-tags": "Ознаки за примена врз ставката во дневникот на подигања.",
+ "apihelp-imagerotate-example-simple": "Сврти ја <kbd>Податотека:Пример.png</kbd> за <kbd>90</kbd> степени.",
+ "apihelp-imagerotate-example-generator": "Сврти ги сите слики во <kbd>Категорија:Некоја</kbd> за <kbd>180</kbd> степени.",
+ "apihelp-import-summary": "Увези страница од друго вики или од XML-податотека.",
+ "apihelp-import-extended-description": "Имајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот <var>xml</var>.",
+ "apihelp-import-param-summary": "Опис на увозот на дневнички запис.",
+ "apihelp-import-param-xml": "Подигната XML-податотека.",
+ "apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
+ "apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
+ "apihelp-import-param-fullhistory": "За меѓујазични увози:: увези ја целата историја, а не само тековната верзија.",
+ "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
+ "apihelp-import-param-namespace": "Увези во овој именски простор. Не може да се користи заедно со <kbd>$1rootpage</kbd>.",
+ "apihelp-import-param-rootpage": "Увези како потстраница на страницава. Не може да се користи заедно со <kbd>$1namespace</kbd>.",
+ "apihelp-import-example-import": "Увези [[meta:Help:ParserFunctions]] во именскиот простор 100 со целата историја.",
+ "apihelp-login-summary": "Најавете се и добијте колачиња за заверка.",
+ "apihelp-login-extended-description": "Во случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
+ "apihelp-login-param-name": "Корисничко име.",
+ "apihelp-login-param-password": "Лозинка.",
+ "apihelp-login-param-domain": "Домен (незадолжително).",
+ "apihelp-login-param-token": "Најавна шифра добиена со првото барање.",
+ "apihelp-login-example-gettoken": "Набави најавна шифра.",
+ "apihelp-login-example-login": "Најава",
+ "apihelp-logout-summary": "Одјави се и исчисти ги податоците на седницата.",
+ "apihelp-logout-example-logout": "Одјави го тековниот корисник",
+ "apihelp-move-summary": "Премести страница.",
+ "apihelp-move-param-from": "Наслов на страницата што треба да се премести. Не може да се користи заедно со <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Назнака на страницата што треба да се премести. Не може да се користи заедно со <var>$1from</var>.",
+ "apihelp-move-param-to": "Како да гласи новата страница.",
+ "apihelp-move-param-reason": "Причина за преименувањето.",
+ "apihelp-move-param-movetalk": "Преименувај ја и разговорната страница, ако ја има.",
+ "apihelp-move-param-movesubpages": "Преименувај потстраници, ако има.",
+ "apihelp-move-param-noredirect": "Не прави пренасочување.",
+ "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните на тековниот корисник.",
+ "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните на тековниот корисник.",
+ "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
+ "apihelp-move-param-ignorewarnings": "Занемари предупредувања.",
+ "apihelp-move-example-move": "Премести го <kbd>Badtitle</kbd> на <kbd>Goodtitle</kbd>, неоставајќи пренасочување",
+ "apihelp-opensearch-summary": "Пребарување на викито со протоколот OpenSearch.",
+ "apihelp-opensearch-param-search": "Низа за пребарување.",
+ "apihelp-opensearch-param-limit": "Највеќе ставки за прикажување.",
+ "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
+ "apihelp-opensearch-param-suggest": "Не прави ништо ако <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> е неточно.",
+ "apihelp-opensearch-param-redirects": "Како да се работи со пренасочувања:\n;return: Дај го самото пренасочување.\n;resolve: Дај ја целната страница. Може да даде помалку од $1limit ставки.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
+ "apihelp-opensearch-param-format": "Формат на изводот.",
+ "apihelp-opensearch-example-te": "Најди страници што почнуваат со <kbd>Те</kbd>.",
+ "apihelp-options-summary": "Смени ги нагодувањата на тековниот корисник.",
+ "apihelp-options-extended-description": "Можат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката <code>userjs-</code> (предвиден за употреба од кориснички скрипти).",
+ "apihelp-options-param-reset": "Ги враќа поставките по основно.",
+ "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста <var>$1reset</var>.",
+ "apihelp-options-param-change": "Список на промени во форматот name=value (на пр. skin=vector). Вредностите не треба да содржат исправени црти. Ако не зададете вредност (дури ни знак за равенство), на пр., можност|другаможност|..., ќе биде зададена вредноста на можноста по основно.",
+ "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од <var>$1optionname</var>. Може да содржи исправени црти.",
+ "apihelp-options-example-reset": "Врати ги сите поставки по основно",
+ "apihelp-options-example-change": "Смени ги поставките <kbd>skin</kbd и <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги <kbd>skin</kbd> и <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Набави информации за извршнички (API) модули.",
+ "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите <var>action</var> и <var>format</var>, или пак <kbd>main</kbd>). Може да се укажат подмодули со <kbd>+</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
+ "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот <var>prop</var>, <var>meta</var> или <var>list</var>). Користете го <kbd>$1modules=query+foo</kbd> наместо <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го <kbd>$1modules=main</kbd> наместо тоа.",
+ "apihelp-paraminfo-param-pagesetmodule": "Дај ги сите информации и за модулот на збирот страници (укажувајќи titles= и сродни).",
+ "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот <var>format</var>). Наместо тоа, користете го <var>$1modules</var>.",
+ "apihelp-parse-param-summary": "Опис за расчленување.",
+ "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
+ "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
+ "apihelp-parse-param-disabletoc": "Изземи го преглед на содржината во изводот.",
+ "apihelp-parse-param-contentformat": "Формат на серијализацијата на содржината во вносниот текст. Важи само кога се користи со $1text.",
+ "apihelp-parse-example-page": "Расчлени страница.",
+ "apihelp-parse-example-text": "Расчлени викитекст.",
+ "apihelp-parse-example-texttitle": "Расчлени страница, укажувајќи го насловот на страницата.",
+ "apihelp-parse-example-summary": "Расчлени опис.",
+ "apihelp-patrol-summary": "Испатролирај страница или преработка.",
+ "apihelp-patrol-param-rcid": "Назнака на спорешните промени за патролирање.",
+ "apihelp-patrol-param-revid": "Назнака на преработката за патролирање.",
+ "apihelp-patrol-example-rcid": "Испатролирај скорешна промена",
+ "apihelp-patrol-example-revid": "Патролирај праработка",
+ "apihelp-protect-summary": "Смени го степенот на заштита на страница.",
+ "apihelp-protect-param-title": "Наслов на страница што се (од)заштитува. Не може да се користи заедно со $1pageid.",
+ "apihelp-protect-param-pageid": "Назнака на страница што се (од)заштитува. Не може да се користи заедно со $1title.",
+ "apihelp-protect-param-reason": "Причиина за (од)заштитување",
+ "apihelp-protect-example-protect": "Заштити страница",
+ "apihelp-purge-param-forcelinkupdate": "Поднови ги табелите со врски.",
+ "apihelp-purge-example-simple": "Превчитај ги <kbd>Main Page</kbd> и <kbd>API</kbd>.",
+ "apihelp-query-param-list": "Кои списоци да се набават.",
+ "apihelp-query-param-meta": "Кои метаподатоци да се набават.",
+ "apihelp-query+allcategories-summary": "Наброј ги сите категории.",
+ "apihelp-query+allcategories-param-from": "Од која категорија да почне набројувањето.",
+ "apihelp-query+allcategories-param-to": "На која категорија да запре набројувањето.",
+ "apihelp-query+allcategories-param-dir": "Насока на подредувањето.",
+ "apihelp-query+alldeletedrevisions-param-from": "Почни го исписот од овој наслов.",
+ "apihelp-query+alldeletedrevisions-param-to": "Запри го исписот на овој наслов.",
+ "apihelp-query+alldeletedrevisions-example-user": "Список на последните 50 избришани придонеси на корисникот <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Список на последните 50 избришани преработки во главниот именски простор.",
+ "apihelp-query+allimages-example-B": "Прикажи список на податотеки што почнуваат со буквата <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Прикажи список на неодамна подигнати податотеки сличен на [[Special:NewFiles]]",
+ "apihelp-query+allimages-example-generator": "Прикажи информации за околу 4 податотеки што почнуваат со буквата <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Наброј ги сите врски што водат кон даден именски простор.",
+ "apihelp-query+alllinks-param-from": "Наслов на врската од која ќе почне набројувањето.",
+ "apihelp-query+alllinks-param-to": "Наслов на врската на која ќе запре набројувањето.",
+ "apihelp-query+alllinks-param-prefix": "Пребарај ги сите сврзани наслови што почнуваат со оваа вредност.",
+ "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со <kbd>$1prop=ids</kbd>.\nКога се користи како создавач, дава целни страници наместо изворни.",
+ "apihelp-query+alllinks-param-prop": "Кои информации да се вклучат:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Ја додава назнаката на страницата на која е врската (не може да се користи со <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Го додава насловот на врската.",
+ "apihelp-query+alllinks-param-namespace": "Именскиот простор што се набројува.",
+ "apihelp-query+alllinks-param-limit": "Колку вкупно ставки да се дадат.",
+ "apihelp-query+alllinks-param-dir": "Насока на исписот.",
+ "apihelp-query+alllinks-example-B": "Списока на наслови со врски, вклучувајќи ги отсутните, со назнаки на нивните страници, почнувајќи од <kbd>Б</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Испиши единствени наслови со врски",
+ "apihelp-query+alllinks-example-unique-generator": "Ги дава сите наслови со врски, означувајќи ги отсутните",
+ "apihelp-query+alllinks-example-generator": "Дава страници што ги содржат врските",
+ "apihelp-query+allmessages-summary": "Дава пораки од ова мрежно место.",
+ "apihelp-query+allmessages-param-prop": "Кои својства да се дадат.",
+ "apihelp-query+allmessages-param-filter": "Дај само пораки со називи што ја содржат оваа низа.",
+ "apihelp-query+allmessages-param-customised": "Дај само пораки во оваа состојба на прилагоденост.",
+ "apihelp-query+allmessages-param-lang": "Дај само пораки на овој јазик.",
+ "apihelp-query+allmessages-param-from": "Дај ги пораките што почнуваат од оваа порака.",
+ "apihelp-query+allmessages-param-to": "Дај пораки што завршуваат со оваа порака.",
+ "apihelp-query+allmessages-param-title": "Назив на страницата што ќе се користи во контекст кога се расчленува порака (за можноста $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Дај пораки со оваа претставка.",
+ "apihelp-query+allmessages-example-ipb": "Прикажи ги пораките што започнуваат со <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Прикажи ги пораките <kbd>august</kbd> and <kbd>mainpage</kbd> на германски.",
+ "apihelp-query+allpages-summary": "Наброј ги сите страници последователно во даден именски простор.",
+ "apihelp-query+allpages-param-from": "Наслов на страницата од која ќе почне набројувањето.",
+ "apihelp-query+allpages-param-to": "Наслов на страницата на која ќе запре набројувањето.",
+ "apihelp-query+allpages-param-prefix": "Пребарај ги сите наслови на страници што почнуваат со оваа вредност.",
+ "apihelp-query+allpages-param-namespace": "Именскиот простор што се набројува.",
+ "apihelp-query+allpages-param-filterredir": "Кои страници да се испишат.",
+ "apihelp-query+allpages-param-minsize": "Ограничи на страници со барем олку бајти.",
+ "apihelp-query+allpages-param-maxsize": "Ограничи на страници со највеќе олку бајти.",
+ "apihelp-query+allpages-param-prtype": "Ограничи на само заштитени страници.",
+ "apihelp-query+backlinks-example-simple": "Прикажи врски до <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Дава информации за страниците што водат до <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Список на сите блокирани корисници и IP-адреси",
+ "apihelp-query+blocks-param-start": "Од кој датум и време да почне набројувањето.",
+ "apihelp-query+blocks-param-end": "На кој датум и време да запре набројувањето.",
+ "apihelp-query+blocks-param-ids": "Список на назнаки на блоковите за испис (незадолжително)",
+ "apihelp-query+blocks-param-users": "Список на корисници што ќе се пребаруваат (незадолжително)",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Режим|Режими}}: $2",
+ "apihelp-query+imageinfo-param-urlheight": "Слично на $1urlwidth.",
+ "apihelp-query+revisions-example-last5": "Дај ги последните 5 преработки на <kbd>Главна страница</kbd>.",
+ "apihelp-query+revisions-example-first5": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd> направени по 2006-05-01 (1 мај 2006 г.)",
+ "apihelp-query+revisions-example-first5-not-localhost": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd> кои не се направени од анонимниот корисник „127.0.0.1“",
+ "apihelp-query+revisions-example-first5-user": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd> кои се направени од корисникот „зададен од МедијаВики“ (<kbd>MediaWiki default</kbd>)",
+ "apihelp-query+search-example-simple": "Побарај <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Побарај го <kbd>meaning</kbd> по текстовите.",
+ "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во исходот од пребарувањето на <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Дај општи информации за мрежното место.",
+ "apihelp-upload-param-filename": "Целно име на податотеката.",
+ "apihelp-upload-param-comment": "Коментар при подигање. Се користи и како првичен текст на страницата за нови податотеки ако не е укажано <var>$1text</var>.",
+ "apihelp-upload-param-text": "Првичен текст на страницата за нови податотеки.",
+ "apihelp-upload-param-watch": "Набљудувај ја страницата.",
+ "apihelp-upload-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник; користете ги нагодувањата или не ги менувајте набљудуваните.",
+ "apihelp-upload-param-ignorewarnings": "Занемари предупредувања.",
+ "apihelp-upload-param-file": "Содржина на податотеката.",
+ "apihelp-upload-param-url": "Од која URL-адреса да се преземе податотеката.",
+ "apihelp-upload-param-filekey": "Клуч на претходното подигање кое е привремено складирано.",
+ "apihelp-upload-param-sessionkey": "Исто што и $1filekey. Се одржува за назадна складност.",
+ "apihelp-upload-param-stash": "Ако е зададено, опслужувачот ќе ја стави податотеката на привремено чување наместо да го додаде во складиштето.",
+ "apihelp-upload-param-filesize": "Големина на целото подигање.",
+ "apihelp-upload-param-offset": "Зафатнина на делот во бајти.",
+ "apihelp-upload-param-chunk": "Содржина на делот.",
+ "apihelp-upload-param-async": "Направи ги работите со потенцијално големи податотеки неусогласени, кога е можно.",
+ "apihelp-upload-param-checkstatus": "Дај ја состојбата на подигнатост само за дадениот податотечен клуч.",
+ "apihelp-upload-example-url": "Подигни од URL",
+ "apihelp-userrights-param-user": "Корисничко име.",
+ "apihelp-userrights-param-userid": "Корисничка назнака.",
+ "apihelp-userrights-param-add": "Стави го корисникот во следниве групи.",
+ "apihelp-userrights-param-remove": "Отстрани го корисникот од следниве групи.",
+ "apihelp-userrights-param-reason": "Причина за промената.",
+ "apihelp-userrights-example-user": "Додај го корисникот <kbd>FooBot</kbd> во групата <kbd>bot</kbd> и отстрани го од групите <kbd>sysop</kbd> и <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Додај го корисникот со назнака <kbd>123</kbd> во групата <kbd>bot</kbd> и отстрани го од групите <kbd>sysop</kbd> и <kbd>bureaucrat</kbd>.",
+ "apihelp-watch-summary": "Додај или отстрани страници од набљудуваните на тековниот корисник.",
+ "apihelp-watch-param-title": "Страницата што се става во или отстранува од набљудуваните. Наместо ова, користете <var>$1titles</var>.",
+ "apihelp-watch-param-unwatch": "Ако е зададено, страницата ќе биде отстранета од наместо ставена во набљуваните.",
+ "apihelp-watch-example-watch": "Набљудувај ја страницата <kbd>Главна страница</kbd>.",
+ "apihelp-watch-example-unwatch": "Отстрани ја страницата <kbd>Главна страница</kbd> од набљудуваните.",
+ "apihelp-watch-example-generator": "Набљудувај ги првите неколку страници во главниот именски простор",
+ "apihelp-format-example-generic": "Дај го исходот од барањето во $1-формат.",
+ "apihelp-json-summary": "Давај го изводот во JSON-формат.",
+ "apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
+ "apihelp-json-param-utf8": "Ако е укажано, ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> не е <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Ако е укажано, ги шифрира сите не-ASCII знаци како хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> is <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат. Поединостите може да се изменат!\n;најнов:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
+ "apihelp-jsonfm-summary": "Давај го изводот во JSON-формат (подобрен испис во HTML).",
+ "apihelp-none-summary": "Де давај извод.",
+ "apihelp-php-summary": "Давај го изводот во серијализиран PHP-формат.",
+ "apihelp-php-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат. Поединостите може да се изменат!\n;најнов:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
+ "apihelp-phpfm-summary": "Давај го изводот во серијализиран PHP-формат (подобрен испис во HTML).",
+ "apihelp-rawfm-summary": "Давај го изводот со елементи за отстранување грешки во JSON-формат (подобрен испис во HTML).",
+ "apihelp-xml-summary": "Давај го изводот во XML-формат.",
+ "apihelp-xml-param-xslt": "Ако е укажано, ја додава именуваната страница како XSL-стилска страница. Вредноста мора да биде наслов во именскиот простор „{{ns:MediaWiki}}“ што ќе завршува со <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
+ "apihelp-xmlfm-summary": "Давај го изводот во XML-формат (подобрен испис во HTML).",
+ "api-format-title": "Исход од Извршникот на МедијаВики",
+ "api-format-prettyprint-header": "Ова е HTML-претстава на форматот $1. HTML е добар за отстранување на грешки, но не е погоден за употреба во извршник.\n\nУкажете го параметарот <var>format</var> за да го смените изводниот формат. За да ги видите претставите на форматот $1 вон HTML, задајте <kbd>format=$2</kbd>.\n\nПовеќе информации ќе најдете на [[mw:Special:MyLanguage/API|целосната документација]], или пак [[Special:ApiHelp/main|помош со извршникот]].",
+ "api-pageset-param-titles": "Список на наслови на кои ќе се работи",
+ "api-pageset-param-pageids": "Список на назнаки за страници на кои ќе се работи",
+ "api-pageset-param-revids": "Список на назнаки на преработки на кои ќе се работи",
+ "api-pageset-param-generator": "Дај го списокот на страници на кои ќе се работи исполнувајќи го укажаниот модул за барање.\n\n<strong>Напомена:</strong> називите на создавачките параметри мора да ја имаат претставката „g“. Погледајте ги примерите.",
+ "api-pageset-param-redirects-generator": "Автоматски решавај пренасочувања во <var>$1titles</var>, <var>$1pageids</var> и <var>$1revids</var>, како и во страниците што ги дава <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Автоамтски решавај пренасочувања во <var>$1titles</var>, <var>$1pageids</var> и <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Ако е потребно, претворај ги насловите во други варијанти. Работи само ако јазикот на викито поддржува претворање на варијанти. Такви се $1.",
+ "api-help-title": "Помош со Извршникот на МедијаВики",
+ "api-help-lead": "Ова е самосоздадена документациска страница за извршникот на МедијаВики.\n\nДокументација и примери: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Главен модул",
+ "api-help-flag-deprecated": "Овој модул е застарен.",
+ "api-help-flag-internal": "<strong>Овој модул е внатрешен или нестабилен.</strong> Работењето може да му се промени без предупредување.",
+ "api-help-flag-readrights": "За овој модул се потребни права на читање.",
+ "api-help-flag-writerights": "За овој модул се потребни права на пишување.",
+ "api-help-flag-mustbeposted": "Овој модул прифаќа само POST-барања.",
+ "api-help-flag-generator": "Овој модул може да се користи како создавач.",
+ "api-help-source": "Извор: $1",
+ "api-help-source-unknown": "Извор: <span class=\"apihelp-unknown\">непознат</span>",
+ "api-help-license": "Лиценца: [[$1|$2]]",
+ "api-help-license-noname": "Лиценца: [[$1|Погл. врската]]",
+ "api-help-license-unknown": "Лиценца: <span class=\"apihelp-unknown\">непозната</span>",
+ "api-help-parameters": "{{PLURAL:$1|Параметар|Параметри}}:",
+ "api-help-param-deprecated": "Застарен.",
+ "api-help-param-required": "Овој параметар е задолжителен.",
+ "api-help-datatypes-header": "Типови на податоци",
+ "api-help-param-type-limit": "Тип: цел број или <kbd>max</kbd>",
+ "api-help-param-type-integer": "Тип: {{PLURAL:$1|1=цел број|2=список на цели броеви}}",
+ "api-help-param-type-boolean": "Тип: булов ([[Special:ApiHelp/main#main/datatypes|подробно]])",
+ "api-help-param-type-timestamp": "Тип: {{PLURAL:$1|1=време и датум|2=список на времиња и датуми}} ([[Special:ApiHelp/main#main/datatypes|допуштени формати]])",
+ "api-help-param-type-user": "Тип: {{PLURAL:$1|1=корисничко име|2=список на кориснички имиња}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Една вредност|2=Вредности (одделете ги со <kbd>{{!}}</kbd>)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Мора да биде празно|Може да биде празно или $2}}",
+ "api-help-param-limit": "Не се допушта повеќе од $1.",
+ "api-help-param-limit2": "Не се допушта повеќе од $1 ($2 за ботови).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Вредноста не може да изнесува|2=Вредностите не може да изнесуваат}} помалку од $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Вредноста не може да изнесува|2=Вредностите е може да изнесуваат}} повеќе од $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Вредноста мора да изнесува|2=Вредностите мораат да изнесуваат}} помеѓу $2 и $3.",
+ "api-help-param-upload": "Мора да биде објавено како податотечно подигање користејќи податоци кои се повеќеделни или од образец.",
+ "api-help-param-multi-separate": "Одделувајте ги вредностите со <kbd>|</kbd>.",
+ "api-help-param-multi-max": "Највеќе допуштени вредности: {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} за ботови).",
+ "api-help-param-default": "По основно: $1",
+ "api-help-param-default-empty": "По основно: <span class=\"apihelp-empty\">(празно)</span>",
+ "api-help-param-token": "Шифра „$1“ добиена од [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "За складност, се прифаќа и шифрата што се користи за обичниот кориснички посредник.",
+ "api-help-param-disabled-in-miser-mode": "Исклучено поради [[mw:Special:MyLanguage/Manual:$wgMiserMode|скржавиот режим]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Напомена:</strong> Бидејќи сте во [[mw:Special:MyLanguage/Manual:$wgMiserMode|скржав режим]], користејќи го ова може да добиете помалку од <var>$1limit</var> исходни ставки пред да продолжите; во крајни случаи може да не добиете ниедна ставка.",
+ "api-help-param-direction": "Во која насока да се набројува:\n;понови:Прво најстарите. Напомена: $1start мора да биде пред $1end.\n;постари:Прво најновите (по основно). Напомена: $1start мора да биде подоцна од $1end.",
+ "api-help-param-continue": "Употребете го ова за да продолжите кога има повеќе расположиви ставки.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(нема опис)</span>",
+ "api-help-examples": "{{PLURAL:$1|Пример|Примери}}:",
+ "api-help-permissions": "{{PLURAL:$1|Дозвола|Дозволи}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Доделена на}: $2",
+ "api-help-right-apihighlimits": "Уоптреба на повисоки ограничувања за приложни барања (бавни барања: $1; брзи барања: $2). Ограничувањата за бавни барања важат и за повеќевредносни параметри.",
+ "apierror-offline": "Не можев да продолжам поради проблем при поврзувањето со мрежата. Проверете дали сте поврзани со семрежјето и обидете се повторно.",
+ "apierror-timeout": "Опслужувачот не одговори во очекуваното време.",
+ "api-credits-header": "Признанија",
+ "api-credits": "Разработувачи на Извршникот:\n* Роан Катау (главен резработувач од септември 2007 до 2009 г.)\n* Виктор Василев\n* Брајан Тонг Мињ\n* Сем Рид\n* Јуриј Астрахан (создавач, главен разработувач од септември 2006 до септември 2007 г.)\n* Brad Jorsch (главен разработувач од 2013 г. до денес)\n\nВашите коментари, предлози и прашања испраќајте ги на mediawiki-api@lists.wikimedia.org\nа грешките пријавувајте ги на https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/mr.json b/www/wiki/includes/api/i18n/mr.json
new file mode 100644
index 00000000..8d4dac46
--- /dev/null
+++ b/www/wiki/includes/api/i18n/mr.json
@@ -0,0 +1,107 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rahuldeshmukh101",
+ "V.narsikar"
+ ]
+ },
+ "apihelp-main-param-action": "कोणती कार्यवाही करावयाची.",
+ "apihelp-main-param-curtimestamp": "निकालात सद्य वेळठश्याचा अंतर्भाव करा.",
+ "apihelp-block-summary": "सदस्यास प्रतिबंधित करा.",
+ "apihelp-block-param-user": "सदस्याचे नाव, अंक-पत्त्ता, किंवा प्रतिबंध करण्यासाठीचा आयपीचा आवाका.",
+ "apihelp-delete-summary": "पान वगळा",
+ "apihelp-edit-param-minor": "छोटे संपादन",
+ "apihelp-edit-param-notminor": "छोटे नसलेले संपादन",
+ "apihelp-edit-param-bot": "या संपादनावर सांगकाम्याचे संपादन म्हणून खूण करा.",
+ "apihelp-edit-example-edit": "पान संपादा",
+ "apihelp-expandtemplates-summary": "विकिमजकूरात सर्व साच्यांचा विस्तार करा.",
+ "apihelp-feedcontributions-param-toponly": "केवळ नवीनतम आवर्तने असलेलीच संपादने दाखवा.",
+ "apihelp-feedrecentchanges-param-categories": "या सर्व वर्गात असलेल्या पानांमधील बदलच फक्त दाखवा.",
+ "apihelp-feedrecentchanges-param-categories_any": "त्यापेक्षा,या कोणत्याही वर्गांमधील,पानांना झालेले बदलच फक्त दाखवा.",
+ "apihelp-login-param-name": "सदस्य नाव.",
+ "apihelp-login-param-password": "परवलीचा शब्द.",
+ "apihelp-login-example-login": "सनोंद-प्रवेश करा.",
+ "apihelp-move-summary": "पृष्ठाचे स्थानांतरण करा.",
+ "apihelp-move-param-ignorewarnings": "सर्व सूचनांकडे दुर्लक्ष करा.",
+ "apihelp-options-example-reset": "पसंतीक्रमाची पुनर्स्थापना",
+ "apihelp-patrol-summary": "पानावर किंवा आवृत्तीवर पहारा द्या.",
+ "apihelp-patrol-example-rcid": "अलीकडील बदलावर पहारा द्या.",
+ "apihelp-patrol-example-revid": "आवृत्तीवर पहारा द्या.",
+ "apihelp-protect-summary": "पानाची सुरक्षापातळी बदला.",
+ "apihelp-protect-example-protect": "पानास सुरक्षित करा.",
+ "apihelp-query-param-list": "कोणती यादी मागवायची.",
+ "apihelp-query-param-meta": "कोणता मेटाडाटा हवा.",
+ "apihelp-query+allpages-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+allredirects-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+allrevisions-summary": "सर्व आवृत्त्यांची यादी",
+ "apihelp-query+allrevisions-param-user": "फक्त या सदस्याच्याच आवृत्त्यांची यादी करा",
+ "apihelp-query+allrevisions-param-excludeuser": "या सदस्याच्या आवृत्त्यांची यादी करु नका.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "सदस्यास असलेल्या अधिकारांची यादी करते.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "सदस्याची संपादन मोजणी जोडते.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "जर उपलब्ध असेल तर,सदस्याने केंव्हा नोंदणी केली त्याचा वेळठसा(रिक्त असू शकतो)",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "सदस्याची केंद्रीय ओळखण्या व जुळल्याची स्थिती जोडते.",
+ "apihelp-query+allusers-param-witheditsonly": "फक्त संपादन केलेल्या सदस्यांचीच यादी करा.",
+ "apihelp-query+allusers-param-activeusers": "मागील $1 {{PLURAL:$1|दिवसात}} सक्रिय सदस्यांचीच यादी करा.",
+ "apihelp-query+allusers-param-attachedwiki": "<kbd>$1prop=centralids</kbd> याद्वारे असेही दर्शविण्यात येते कि सदस्य हा या विकिशी जुळलेला असून तो या ओळखणीद्वारे ओळखल्या जातो.",
+ "apihelp-query+allusers-example-Y": "<kbd>य</kbd> पासून सदस्यनाव सुरु होणाऱ्या सदस्यांचीच यादी करा.",
+ "apihelp-query+backlinks-summary": "दिलेल्या पानास दुवे असणारी सर्व पाने शोधा.",
+ "apihelp-query+backlinks-param-title": "शोधावयाचे शीर्षक.<var>$1pageid</var>यासमवेत वापरु शकत नाही.",
+ "apihelp-query+backlinks-param-pageid": "शोधावयाची पान ओळखण.<var>$1title</var>यासमवेत वापरु शकत नाही.",
+ "apihelp-query+backlinks-param-namespace": "प्रगणन करावयाचे नामविश्व.",
+ "apihelp-query+backlinks-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+backlinks-param-filterredir": "पुनर्निर्देशनांची कशी गाळणी करावयाची. जर <var>$1redirect</var>सक्षम करुन <kbd>nonredirects</kbd>ला स्थापले तर, ते केवळ दुसऱ्या स्तरासच लागू होते.",
+ "apihelp-query+backlinks-param-redirect": "जर दुवा जोडणारे पान एक पुनर्निर्देशन असेल तर,त्या पुनर्निर्देशनास दुवे असलेली पानेही शोधा. महत्तम मर्यादा अर्धी केल्या जाते.",
+ "apihelp-query+backlinks-example-simple": "<kbd>मुखपृष्ठास</kbd> असणारे दुवे दाखवा.",
+ "apihelp-query+backlinks-example-generator": "<kbd>मुखपृष्ठास</kbd> दुवे असणाऱ्या पानांची माहिती घ्या.",
+ "apihelp-query+blocks-summary": "सर्व प्रतिबंधित सदस्यांची व अंकपत्त्यांची यादी करा.",
+ "apihelp-query+blocks-param-start": "च्यापासून प्रगणना सुरु करावयाची त्याचा वेळठसा.",
+ "apihelp-query+blocks-param-end": "कुठपर्यंत प्रगणना संपवायची त्याचा वेळठसा.",
+ "apihelp-query+blocks-paramvalue-prop-user": "प्रतिबंधित सदस्याचे सदस्यनाव जोडते.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "प्रतिबंधित सदस्याची सदस्यओळखण जोडते.",
+ "apihelp-query+blocks-paramvalue-prop-by": "प्रतिबंधन करणाऱ्या सदस्याचे सदस्यनाव जोडते.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "प्रतिबंधन करणाऱ्या सदस्याची सदस्यओळखण जोडते.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "प्रतिबंधन केंव्हा केले त्याचा वेळठसा जोडते.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "प्रतिबंधनाची मुदत केंव्हा संपते त्याचा वेळठसा.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "प्रतिबंधनाची दिलेली कारणे जोडते.",
+ "apihelp-query+blocks-paramvalue-prop-range": "प्रतिबंधनाने बाधित अंकपत्त्यांचा आवाका जोडते.",
+ "apihelp-query+blocks-example-simple": "प्रतिबंधनाची यादी करा.",
+ "apihelp-query+blocks-example-users": "सदस्य<kbd>अलिस</kbd> व <kbd>बॉब</kbd> या सदस्यांचे प्रतिबंधनाची यादी करा.",
+ "apihelp-query+categories-summary": "ही पाने कोणकोणत्या वर्गात आहेत त्याची यादी करा.",
+ "apihelp-query+categories-param-show": "कोणत्या प्रकारचे वर्ग दाखवायचेत.",
+ "apihelp-query+categories-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+categories-example-simple": "<kbd>अल्बर्ट आईन्स्टाईन</kbd>हे पान कोणकोणत्या वर्गात आहे त्याची यादी करा.",
+ "apihelp-query+categories-example-generator": "<kbd>अल्बर्ट आईन्स्टाईन</kbd>या पानात वापरलेल्या सर्व वर्गांची माहिती द्या.",
+ "apihelp-query+categorymembers-summary": "दिलेल्या वर्गात असलेल्या सर्व पानांची यादी करते.",
+ "apihelp-query+deletedrevs-param-end": "कुठपर्यंत प्रगणना संपवायची त्याचा वेळठसा.",
+ "apihelp-query+deletedrevs-param-from": "या शीर्षकापासून यादी करणे सुरु करा.",
+ "apihelp-query+deletedrevs-param-to": "या शीर्षकास यादी करणे थांबवा.",
+ "apihelp-query+deletedrevs-param-unique": "प्रत्येक पानाच्या फक्त एकाच आवृत्तीची यादी करा.",
+ "apihelp-query+deletedrevs-param-user": "या सदस्याच्या आवृत्तीचीच यादी करा.",
+ "apihelp-query+deletedrevs-param-excludeuser": "या सदस्याच्या आवृत्तीची यादी करु नका.",
+ "apihelp-query+deletedrevs-param-namespace": "या नामविश्वात असलेल्या पानांचीच यादी करा.",
+ "apihelp-query+deletedrevs-param-limit": "यादी करावयाच्या आवृत्त्यांचे महत्तम प्रमाण.",
+ "apihelp-query+duplicatefiles-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+embeddedin-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+filearchive-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+images-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+imageusage-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+iwlinks-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+langbacklinks-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+langlinks-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+links-param-dir": "कोणत्या दिशेस यादी करावयाची.",
+ "apihelp-query+recentchanges-param-end": "कुठपर्यंत प्रगणना संपवायची त्याचा वेळठसा.",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "सदस्याची केंद्रीय ओळखण्या व जुळल्याची स्थिती जोडते.",
+ "apihelp-query+userinfo-param-attachedwiki": "<kbd>$1prop=centralids</kbd> याद्वारे असे दर्शविण्यात येते कि सदस्य हा या विकिशी जुळलेला असून तो या ओळखणीद्वारे ओळखल्या जातो.",
+ "apihelp-query+users-paramvalue-prop-centralids": "सदस्याची केंद्रीय ओळखण्या व जुळल्याची स्थिती जोडते.",
+ "apihelp-query+users-param-attachedwiki": "<kbd>$1prop=centralids</kbd> याद्वारे असे दर्शविण्यात येते कि सदस्य हा या विकिशी जुळलेला असून तो या ओळखणीद्वारे ओळखल्या जातो.",
+ "apihelp-query+watchlist-param-type": "कोणत्या प्रकारचे बदल दाखवायचे:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "नित्याची पान संपादने.",
+ "apihelp-query+watchlist-paramvalue-type-external": "बाह्य बदल.",
+ "apihelp-query+watchlist-paramvalue-type-new": "पान तयार करणे.",
+ "apihelp-query+watchlist-paramvalue-type-log": "नोंद प्रविष्ट्या",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "वर्ग सदस्यता बदलते.",
+ "apihelp-stashedit-param-title": "पानाच्या मथळ्याचे संपादन होत आहे.",
+ "apihelp-stashedit-param-sectiontitle": "नविन विभागाचा मथळा",
+ "apihelp-stashedit-param-summary": "सारांश बदला.",
+ "api-help-examples": "{{PLURAL:$1|उदाहरण|उदाहरणे}}:"
+}
diff --git a/www/wiki/includes/api/i18n/ms.json b/www/wiki/includes/api/i18n/ms.json
new file mode 100644
index 00000000..0224a8ac
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ms.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-param-action": "Tindakan mana untuk dilakukan.",
+ "apihelp-main-param-format": "Format output.",
+ "apihelp-main-param-uselang": "Bahasa yang hendak digunakan untuk penterjemahan mesej. Senarai kod boleh diperoleh dari [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], ataupun menyatakan \"user\" untuk menggunakan bahasa kegemaran pengguna semasa.",
+ "apihelp-expandtemplates-example-simple": "Perluaskan <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd> wikiteks.",
+ "apihelp-help-param-helpformat": "Format output bantuan.",
+ "apihelp-help-example-main": "Bantuan untuk modul utama",
+ "apihelp-help-example-recursive": "Segala bantuan dalam satu halaman",
+ "apihelp-help-example-help": "Bantuan untuk modul bantuan",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Menambahkan jenis MIME thumbnail imej (memerlukan url dan param $1urlwidth).",
+ "apihelp-query+prefixsearch-param-offset": "Bilangan hasil untuk dilangkau.",
+ "apihelp-query+usercontribs-param-show": "Hanya paparkan item-item yang mematuhi kriteria ini, cth. suntingan selain yang kecil sahaja: $2show=!minor.\n\nJika ditetapkannya $2show=patrolled atau $2show=!patrolled, maka semakan-semakan yang lebih lama daripada [https://www.mediawiki.org/wiki/Manual:$wgRCMaxAge $wgRCMaxAge] ($1 saat) tidak akan dipaparkan.",
+ "apihelp-userrights-param-userid": "ID pengguna.",
+ "apihelp-dbgfm-summary": "Data output dalam format var_export() PHP (''pretty-print'' dalam HTML).",
+ "apihelp-json-summary": "Data output dalam format JSON.",
+ "apihelp-json-param-utf8": "Jika dinyatakan, mengekodkan kenanyakan (tetapi bukan semua) aksara bukan ASCII sebagai UTF-8 daripada menggantikannya dengan jujukan lepasan perenambelasan.",
+ "apihelp-jsonfm-summary": "Output data dalam format JSON (''pretty-print'' dalam HTML).",
+ "apihelp-php-summary": "Data output dalam format PHP bersiri.",
+ "apihelp-txt-summary": "Data output dalam format print_r() PHP.",
+ "apihelp-txtfm-summary": "Data output dalam format print_r() PHP (''pretty-print'' dalam HTML).",
+ "apihelp-xml-summary": "Data output dalam format XML.",
+ "apihelp-xmlfm-summary": "Data output dalam format XML (''pretty-print'' dalam HTML).",
+ "apihelp-yaml-summary": "Data output dalam format YAML.",
+ "apihelp-yamlfm-summary": "Output data dalam format YAML (''pretty-print'' dalam HTML).",
+ "api-format-title": "Hasil API MediaWiki",
+ "api-format-prettyprint-header": "Anda sedang menyaksikan representasi format $1 dalam bentuk HTML. HTML bagus untuk menyah pepijat, tetapi tidak sesuai untuk kegunaan aplikasi.\n\nNyatakan parameter format untuk mengubah format outputnya. Untuk melihat representasi format $1 yang bukan HTML, tetapkan format=$2.\n\nSila rujuk [https://www.mediawiki.org/wiki/API dokumentasi lengkapnya] ataupun [[Special:ApiHelp/main|bantuan API]] untuk keterangan lanjut.",
+ "api-help-title": "Bantuan API MediaWiki",
+ "api-help-lead": "Ini merupakan laman dokumentasi MediaWiki API yang dihasilkan secara automatik.\n\nDokumentasi dan contoh-contoh: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Modul utama",
+ "api-help-flag-deprecated": "Modul ini sudah lapuk.",
+ "api-help-flag-internal": "<strong>Modul ini dalaman atau tidak stabil.</strong> Operasinya boleh berubah tanpa amaran.",
+ "api-help-flag-readrights": "Modul ini memerlukan hak membaca.",
+ "api-help-flag-writerights": "Modul ini memerlukan hak menulis.",
+ "api-help-flag-mustbeposted": "Modul ini menerima permohonan POST sahaja.",
+ "api-help-flag-generator": "Modul ini boleh digunakan sebagai penjana.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+ "api-help-param-deprecated": "Lapuk.",
+ "api-help-param-required": "Parameter ini diwajibkan.",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Mestilah kosong|Bolehlah kosong atau $2}}",
+ "api-help-param-limit2": "Dibenarkannya tidak lebih daripada $1 ($2 untuk bot).",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mesti tidak melebihi $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mestilah antara $2 hingga $3.",
+ "api-help-param-multi-separate": "Asingkan nilai-nilai dengan \"|\".",
+ "api-help-param-multi-max": "Bilangan nilai maksimum adalah {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} untuk bot).",
+ "api-help-param-default": "Asal: $1",
+ "api-help-param-default-empty": "Asal: <span class=\"apihelp-empty\">(kosong)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(tiada keterangan)</span>",
+ "api-help-examples": "{{PLURAL:$1|Contoh|Contoh-contoh}}:",
+ "api-help-permissions": "{{PLURAL:$1|Keizinan}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Diberikan kepada}}: $2",
+ "api-credits-header": "Kredit"
+}
diff --git a/www/wiki/includes/api/i18n/my.json b/www/wiki/includes/api/i18n/my.json
new file mode 100644
index 00000000..63d9df67
--- /dev/null
+++ b/www/wiki/includes/api/i18n/my.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "9.sinistra",
+ "Ninjastrikers"
+ ]
+ },
+ "apihelp-feedrecentchanges-param-hideanons": "အမည်မသိ အသုံးပြုသူများ ပြုလုပ်သည့် ပြောင်းလဲချက်များကို ဝှက်ရန်",
+ "apihelp-feedrecentchanges-param-hideliu": "မှတ်ပုံတင်ထားသော အသုံးပြုသူများ ပြုလုပ်ထားခဲ့သည့် ပြောင်းလဲမှုများကို ဝှက်ရန်"
+}
diff --git a/www/wiki/includes/api/i18n/nap.json b/www/wiki/includes/api/i18n/nap.json
new file mode 100644
index 00000000..1a6c3ba5
--- /dev/null
+++ b/www/wiki/includes/api/i18n/nap.json
@@ -0,0 +1,148 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chelin",
+ "C.R."
+ ]
+ },
+ "apihelp-main-summary": "",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentaziona]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista 'e mmasciate]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunziaziune 'e ll'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug e richieste]\n</div>\n<strong>Stato:</strong> Tuttuquante 'e funziune 'e sta paggena avesser'a funziunà, ma ll'API è ancora a se sviluppà, picciò chesto putesse cagnà a nu certo mumento. Iscriviteve ccà ncoppa: [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 'a lista 'e mmasciate] pe' n'avé cocche notifica 'e ll'agghiurnamente.\n\n<strong>Richieste sbagliate:</strong> Si se mannasse na richiesta sbagliata a ll'API, nu cap' 'e HTTP sarrà mannata c' 'a chiave 'e mmasciata \"MediaWiki-API-Error\" e po' tuttuquante 'e valure d' 'a cap' 'e mmasciata e codece 'errore se mannassero arreto e se mpustassero a 'o stesso valore. Pe n'avé cchiù nfurmaziune vedite [[mw:API:Errors_and_warnings|API: Errure e Avvise]].\n\n<strong>Test:</strong> Pe' ve ffà cchiù semprice 'e test 'e richieste API, vedite [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Quale aziona d'avess'a fà.",
+ "apihelp-main-param-format": "Qualu furmato avess'ascì d'output.",
+ "apihelp-main-param-maxlag": "'O massimo lag ca se putess'ausà quanno MediaWiki s'installasse ncopp'a nu cluster replicato 'e database. Pe' puté sarvà aziune ca causassero cchiù lag 'e replicato, stu parammetro putesse fà 'o cliente aspettà nfin'a quanno 'o tiempo 'e replicaziona fosse meno ca nu valore specificato. Si nce stesse cchiù assaje tiempo 'e lag, nu codece 'errore <samp>maxlag</samp> se turnasse comm'a na mmasciata tipo <samp>Aspettanno 'o $host: nu $lag secunde 'e lag</samp>.<br />Vedite [[mw:Manual:Maxlag_parameter|Manuale: Parammetro Maxlag]] pe' n'avé cchiù nfurmaziune.",
+ "apihelp-main-param-smaxage": "Mpustate 'a cap' 'e cuntrollo 'e cache HTTP <code>s-maxage</code> a sta quantità 'e secondi. Ll'errure nun s'acchiappassero maje.",
+ "apihelp-main-param-maxage": "Mpustate 'a cap' 'e cuntrollo 'e cache HTTP <code>max-age</code> a sta quantità 'e secondi. Ll'errure nun s'acchiappassero maje.",
+ "apihelp-main-param-assert": "Cuntrullate si l'utente è trasuto si sta mpustato comm' <kbd>user</kbd>, o pure ca téne o deritto 'e bot si <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Qualunque valore dato ccà se mpizzasse dint'a risposta. Se putess'ausà pe' puté distinguere richieste.",
+ "apihelp-main-param-servedby": "Include 'o risultato 'e nomme d' 'o host ca servette 'a richiesta.",
+ "apihelp-main-param-curtimestamp": "Include dint' 'o risultato 'o timestamp 'e mò.",
+ "apihelp-main-param-origin": "Quanno se trasesse a ll'API ausanno richieste 'e cross-dominio AJAX (CORS), mpustate chesto a 'o dominio origgenale. Chesto s'avess'azzeccà dint'a qualsiasi richiesta 'e pre-volo, e picciò avess'a ffà parte d' 'a richiesta d'URI (nun fosse 'o cuorpo POST). Chesto s'avess'azzeccà a uno 'e ll'origgene dint' 'o cap' 'e paggena <code>Origin</code> pricisamente, picciò s'avessa mpustà coccosa tipo <kbd>https://en.wikipedia.org</kbd> o <kbd>https://meta.wikimedia.org</kbd>. Si stu parammetro nun s'azzeccasse c' 'o cap' 'e paggena <code>Origin</code>, allora na risposta 403 se turnasse. Si stu parammetro s'azzeccasse c' 'o cap' 'e paggena <code>Origin</code> e ll'origgene fosse dint' 'a lista janca, allora nu cap' 'e paggena <code>Access-Control-Allow-Origin</code> fosse mpustato.",
+ "apihelp-block-summary": "Blocca n'utente.",
+ "apihelp-block-param-user": "Nomme utente, indirizzo IP o range IP 'a bluccà.",
+ "apihelp-block-param-reason": "Mutive p' 'o blocco.",
+ "apihelp-block-param-anononly": "Blocca surtanto ll'utente anonime (e.g. stuta 'a possibilità 'e ffà cuntribbute 'a st'indirizzo IP).",
+ "apihelp-block-param-nocreate": "Nun premmmettere 'a criazione 'e cunte",
+ "apihelp-block-param-autoblock": "Automaticamende blocca l'urdeme indirizze IP ausate, e tuttuquante ll'indirizze IP addò tentasse 'e trasì.",
+ "apihelp-block-param-noemail": "Scanza st'utente 'e mannà mmasciate pe' bbìa d' 'o wiki. (Servisse 'o <code>blockemail</code> buono).",
+ "apihelp-block-param-hidename": "Annascunne 'o nomme utente d' 'o riggistro 'e blocche (Addimanna 'e premmesse 'e <code>hideuser</code>).",
+ "apihelp-block-param-reblock": "Si l'utente è già bluccato, sovrascrive 'o blocco esistente.",
+ "apihelp-block-param-watchuser": "Vide 'a paggena utente o ll'indirizzo IP 'e ll'utente e paggene 'e chiacchiera.",
+ "apihelp-block-example-ip-simple": "Blocca l'indirizzo IP <kbd>192.0.2.5</kbd> pe' tre gghiuorne p' 'o mutivo <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Blocca l'utente <kbd>Vandal</kbd> a tiempo indeterminato c' 'o mutivo <kbd>Vandalism</kbd>, nun 'o ffà crià cunte nuove nè mannà mmasciate e-mail.",
+ "apihelp-checktoken-summary": "Cuntrolla 'a validità 'e nu token 'a <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo 'e token ncurzo 'e test.",
+ "apihelp-checktoken-param-token": "Token 'a testà.",
+ "apihelp-checktoken-param-maxtokenage": "Massima ammaturità cunzentuta p' 'o token, 'n secunde.",
+ "apihelp-checktoken-example-simple": "Verifica 'a validità 'e nu token <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Scancella 'o flag <code>hasmsg</code> pe ll'utente currente.",
+ "apihelp-clearhasmsg-example-1": "Scancella 'o flag <code>hasmsg</code> pe' l'utente currente.",
+ "apihelp-compare-summary": "Piglia 'e differenze nfra 2 paggene.",
+ "apihelp-compare-extended-description": "Nu nummero 'e verziune, 'o titolo 'e na paggena, o ll'IDE 'e paggena adda essere nnicato fosse p' 'o \"'a\" ca pe' ll' \"a\".",
+ "apihelp-compare-param-fromtitle": "Primmo titolo 'a cunfruntà.",
+ "apihelp-compare-param-fromid": "Primmo ID 'e paggena a cunfruntà.",
+ "apihelp-compare-param-fromrev": "Primma verziona a cunfruntà.",
+ "apihelp-compare-param-totitle": "Seconno titolo a cunfruntà.",
+ "apihelp-compare-param-toid": "Secondo ID 'e paggena a cunfruntà.",
+ "apihelp-compare-param-torev": "Seconda verziona a cunfruntà.",
+ "apihelp-compare-example-1": "Crèa nu diff tra 'a verziona 1 e 'a verziona 2.",
+ "apihelp-createaccount-summary": "Crèa cunto nnòvo.",
+ "apihelp-createaccount-param-name": "Nomme utente.",
+ "apihelp-createaccount-param-password": "Password (sarrà gnurata se mpustato nu <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Dumminio pe' ffà autenticaziona 'a fore (opzionale).",
+ "apihelp-createaccount-param-token": "'A criazione 'e token p' 'o cunto se ngarraje dint'a primma richiesta.",
+ "apihelp-createaccount-param-email": "Indirizzo Email 'e ll'utente (opzionale).",
+ "apihelp-createaccount-param-realname": "Nomme overo 'e ll'utente (opzionale).",
+ "apihelp-createaccount-param-mailpassword": "Si mpustato a qualunque valore, na password casuale sarrà mannat'a ll'utente.",
+ "apihelp-createaccount-param-reason": "Raggiona, a facoltativa, d' 'a criaziona 'e nu cunto a mpizzà int' 'e reggistre.",
+ "apihelp-createaccount-param-language": "Codece 'e llengua a mpustà comme predefinita pe' n'utente (opzionale, 'e default fosse 'a lengue d' 'e cuntenute).",
+ "apihelp-createaccount-example-pass": "Crèa utente <kbd>testuser</kbd> c' 'a password <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Crea utente <kbd>testmailuser</kbd> e manna na mail cu na password criat' 'a ccaso.",
+ "apihelp-delete-summary": "Scancella 'na paggena.",
+ "apihelp-delete-param-title": "Titolo d' 'a paggena a scancellà. Nun se pò ausà nziem'a <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID d' 'a paggena a scancellà. Nun se pò ausà nziem'a <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Raggione p' 'o scancellà. Si nun s'è mpustato, na raggione generata automaticamente s'add'ausà.",
+ "apihelp-delete-param-tags": "Càgna 'e tag pe' puté apprecà l'entrata dint' 'o riggistro 'e scancellazione.",
+ "apihelp-delete-param-watch": "Azzecc' 'a paggena â lista 'e paggene cuntrullate.",
+ "apihelp-delete-param-watchlist": "Senza condizione, azzeccà o luvà 'a paggena 'a l'elenco 'e paggene cuntrullate 'e ll'utente, ausà mpustaziune o nun 'o cagnà l'elenco.",
+ "apihelp-delete-param-unwatch": "Liev' 'a paggena â lista 'e paggene cuntrullate.",
+ "apihelp-delete-param-oldimage": "'O nomm' 'e ll'immaggene viecchia a se scancellà comme sta scritto ccà: [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Scancella <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Scancella 'a <kbd>Main Page</kbd> c' 'o mutivo <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Stu modulo è stato stutato.",
+ "apihelp-edit-summary": "Crèa e cagna paggene.",
+ "apihelp-edit-param-title": "Titolo d' 'a paggena a cagnà. Nun se pò ausà nziem'a <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID d' 'a paggena a cagnà. Nun se pò ausà nziem'a <var>$1title</var>.",
+ "apihelp-edit-param-section": "Nummero 'e sezione. <kbd>0</kbd> p' 'a sezione ncoppa, <kbd>new</kbd> pe' na seziona nova.",
+ "apihelp-edit-param-sectiontitle": "'O titolo pe' na seziona nova.",
+ "apihelp-edit-param-text": "Cuntenuto 'e paggena.",
+ "apihelp-edit-param-summary": "Oggetto d' 'a modifica. Pure 'o titolo ra sezione quanno $1sezione=new e $1sectiontitle nun è mpustato.",
+ "apihelp-edit-param-tags": "Cagna 'e tag ca s'avesser'applicà 'a verziona.",
+ "apihelp-edit-param-minor": "Cagnamiento piccerillo.",
+ "apihelp-edit-param-notminor": "Cagnamiento nun-piccerillo.",
+ "apihelp-edit-param-bot": "Nzegna stu cagnamiento comm' 'e bot.",
+ "apihelp-edit-param-basetimestamp": "Nzegna 'o tiempo d' 'a verzione bbase, ausato pe' puté ffà scummiglià cunflitte 'edizione. Se putesse piglià pe' bbìa 'e [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Nzegna 'o tiempo d' 'a verzione bbase, ausato pe' puté ffà scummiglià cunflitte 'edizione. Nu valore buono se putess'arrepiglià pe' bbìa 'e <var>[[Special:ApiHelp/main|curtimestamp]]</var> quann'accummencia 'o prucess' 'edizione (e.g. quanno se stà a carrecà 'o contenuto 'e na paggena p' 'a cagnà).",
+ "apihelp-edit-param-recreate": "Scrive ncopp'a cocch'errore ncopp'a paggena avenno scancellato chesto a nu certo punto.",
+ "apihelp-edit-param-createonly": "Nun cagnà 'a paggena si esiste già.",
+ "apihelp-edit-param-nocreate": "Ietta 'errore si 'a paggena nun esiste.",
+ "apihelp-edit-param-watch": "Azzecc' 'a paggena â lista 'e paggene cuntrullate.",
+ "apihelp-edit-param-unwatch": "Liev' 'a paggena â lista 'e paggene cuntrullate.",
+ "apihelp-edit-param-watchlist": "Senza condizione, azzeccà o luvà 'a paggena 'a l'elenco 'e paggene cuntrullate 'e ll'utente, ausà mpustaziune o nun 'o cagnà l'elenco.",
+ "apihelp-edit-param-md5": "'O hash MD5 d' 'o parammetro 'e $1text, o chill' 'e $1prependtext e $1appendtext concatenate. Si mpustato, 'o cagnamiento nun fosse fatto... 'o cuntrario succeresse si 'o hash fosse curretto.",
+ "apihelp-edit-param-prependtext": "Azzecca stu testo addò 'o cap' 'e paggena. Se mettesse ncuoll'a $1text.",
+ "apihelp-edit-param-appendtext": "Azzecca stu testo addò 'o cap' 'e paggena. Se mettesse ncuoll'a $1text.\n\nAusate $1section=new pe' ne puté appennere na seziona nova, ato che ausà stu parammetro.",
+ "apihelp-edit-param-undo": "Torna arrèto sta verziona. Miette ncuollo 'o $1text, $1prependtext e $1appendtext.",
+ "apihelp-edit-param-undoafter": "Torna arreto tuttuquante verziune 'e $1undo a cchesta. Si chesto nun fosse mpustato, avit'a ffà surtanto turnà arreto na verziona.",
+ "apihelp-edit-param-redirect": "Risolve automaticamente 'e redirect.",
+ "apihelp-edit-param-contentformat": "Serializaziona 'e furmatt' 'e cuntenute ausata p' 'o testo trasuto.",
+ "apihelp-edit-param-contentmodel": "Mudell' 'e cuntenute d' 'e cuntenute nuove nuove.",
+ "apihelp-edit-param-token": "'O token s'avess'a mannà sempe comm'a ll'urdemo parammetro, o minimo minimo aropp'a 'o parammetro 'e $1text.",
+ "apihelp-edit-example-edit": "Cagna paggena.",
+ "apihelp-edit-example-prepend": "Pre-appenne <kbd>_&#95;NOTOC_&#95;</kbd> a na paggena.",
+ "apihelp-edit-example-undo": "Torna arreto 'e verziune 13579 nfin'a 13585 cu n'autosommario.",
+ "apihelp-emailuser-summary": "E-mail a n'utente.",
+ "apihelp-emailuser-param-target": "Utente a 'e quale s'avess'a mannà na mmasciata mail.",
+ "apihelp-emailuser-param-subject": "Oggetto d' 'a mail.",
+ "apihelp-emailuser-param-text": "Testo d' 'a mail.",
+ "apihelp-emailuser-param-ccme": "Manna na copia 'e sta mail a mme.",
+ "apihelp-emailuser-example-email": "Manna na e-mail a ll'utente <kbd>WikiSysop</kbd> c' 'o testo <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Spannere tuttuquante 'e template dint' 'o wikitesto.",
+ "apihelp-expandtemplates-param-title": "Titolo d' 'a paggena.",
+ "apihelp-expandtemplates-param-text": "Wikitesto 'a scagnà/convertire.",
+ "apihelp-expandtemplates-param-revid": "ID 'e cagnamento, pe' <nowiki>{{REVISIONID}}</nowiki> e variabbele ca s'assummigliassero.",
+ "apihelp-expandtemplates-param-prop": "Quale nfurmaziune s'avess'a piglià.\n\nTenite a mmente ca nun s'è scigliuto valore nisciuno, 'o risultato cuntenesse 'o codice wiki, ma l'output sarrà fatto comm'a nu furmato obsoleto.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "'O wikitext spannuto.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Ogne categurìa prisente int'a 'o valore 'e trasuta nun fosse rappresentato comm'asciuta 'e wikitesto.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "'E pruprietà 'e pagena definite p' 'e parole magiche spannute dint' 'o wikitesto.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Si l'output fosse volatile e nun s'avess'ausà n'atavota addò servesse dint' 'a paggena.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "'O tiempo massimo aropp' 'o quale 'e caches d' 'o risultato s'avessero a nzegnà invalide.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Ogne modulo ResourceLoader ch' 'e funzione parser addimannajero a s'azzeccà a ll'output. Fosse <kbd>jsconfigvars</kbd> o pure <kbd>encodedjsconfigvars</kbd> s'avesser'addimannà tutte 'nzieme pe' bbìa d' 'e <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Dà nfurmaziune 'e variabbele 'e mpustaziona JavaScript specifiche 'a paggena.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Dà 'e variabbele 'e mpustaziona 'e JavaScript specifiche 'a na paggena comm'a na stringa JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "L'albero 'e parse XML 'a ll'input.",
+ "apihelp-expandtemplates-param-includecomments": "Si s'avess'azzeccà cocche cummento HTML dint'a ll'output.",
+ "apihelp-expandtemplates-param-generatexml": "Generà ll'albero XML (scagnato 'a $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Spanne 'o wikitesto <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Tuorna nu feed 'e cuntribbute 'utente.",
+ "apihelp-feedcontributions-param-feedformat": "'O furmato d' 'o feed.",
+ "apihelp-feedcontributions-param-user": "'A quale 'utente nc'avimm'a piglià cuntribbute.",
+ "apihelp-feedcontributions-param-namespace": "'A qualu namespace s'avesser'a filtrà 'e cuntribbute.",
+ "apihelp-feedcontributions-param-year": "'E ll'anno (e primma).",
+ "apihelp-feedcontributions-param-month": "D' 'o mese (e pure cchiù primma).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrà cuntribbute ca teneno sti ttag.",
+ "apihelp-feedcontributions-param-deletedonly": "Mmusta surtant' 'e cuntribbute scancellate.",
+ "apihelp-feedcontributions-param-toponly": "Fà vedé sulamente 'e contribbute 'e l'urdeme verziune.",
+ "apihelp-feedcontributions-param-newonly": "Fà vedé sulamente 'e contribbute ca songo criazione 'e paggene.",
+ "apihelp-feedcontributions-param-showsizediff": "Fà vedé 'a differenza nfra verziune.",
+ "apihelp-feedcontributions-example-simple": "Tuòrna cuntribbute 'a ll'utente <kbd>Esempio</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Tuorna 'o blocco 'e nutizie 'e ll'urdeme cagnamiente.",
+ "apihelp-feedrecentchanges-param-feedformat": "'O furmato d' 'o feed.",
+ "apihelp-feedwatchlist-param-feedformat": "'O furmato d' 'o feed.",
+ "apihelp-filerevert-param-comment": "Carreca commento.",
+ "apihelp-help-summary": "Fà veré l'aiuto p' 'e module specificate",
+ "apihelp-help-param-submodules": "Azzecca n'aiuto p' 'e submodule 'e nu modulo ca téne nome.",
+ "apihelp-login-example-login": "Tràse.",
+ "apihelp-move-summary": "Mòve paggena.",
+ "apihelp-opensearch-param-search": "Ascìa stringa.",
+ "apihelp-opensearch-param-format": "'O furmato 'e ll'output."
+}
diff --git a/www/wiki/includes/api/i18n/nb.json b/www/wiki/includes/api/i18n/nb.json
new file mode 100644
index 00000000..a1c92389
--- /dev/null
+++ b/www/wiki/includes/api/i18n/nb.json
@@ -0,0 +1,712 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jeblad",
+ "Chameleon222",
+ "Macofe",
+ "Jon Harald Søby",
+ "Event",
+ "Kingu"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentasjon]]\n* [[mw:Special:MyLanguage/API:FAQ|Ofte stilte spørsmål]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-post-liste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-kunngjøringer]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Feil & forespørsler]\n</div>\n<strong>Status:</strong> Alle funksjonene som vises på denne siden skal virke, men API-en er fortsatt i aktiv utvikling, og kan bli endret når som helst. Abonner på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki sin API-kunnkjøringsepostliste] for nyheter om oppdateringer.\n\n<strong>Feile kall:</strong> Hvis det blir sendt feile kall til API-et, blir det sendt en HTTP-header med nøkkelen \"MediaWiki-API-Error\" og da blir både header-verdien og feilkoden sendt tilbake med samme verdi. For mer informasjon se [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Feil og advarsler]].\n\n<strong>Testing:</strong> For enkelt å teste API-kall, se [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Hvilken handling skal utføres",
+ "apihelp-main-param-format": "Resultatets format.",
+ "apihelp-main-param-maxlag": "Maksimal forsinkelse kan brukes når MediaWiki er installert på et database-replikert cluster. For å unngå operasjoner som forårsaker replikasjonsforsinkelser, kan denne parameteren få klienten til å vente til replikasjonsforinkelsen er mindre enn angitt verdi. I tilfelle ytterliggående forsinkelser, blir feilkoden <samp>maxlag</samp> returnert med en melding som <samp>Venter på $host: $lag sekunders forsinkelse</samp>.<br />Se [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] for mer informasjon.",
+ "apihelp-main-param-smaxage": "Sett <code>s-maxage</code> HTTP cache control header til dette antall sekunder. Feil blir aldri mellomlagret.",
+ "apihelp-main-param-maxage": "Set <code>max-age</code> HTTP cache control header til dette antall sekunder. Feil blir aldri mellomlagret.",
+ "apihelp-main-param-assert": "Verifiser at brukeren er logget inn om satt til <kbd>user</kbd>, eller har botrettighet om satt til <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Verifiser at den gjeldende brukeren er den navngitte brukeren.",
+ "apihelp-main-param-requestid": "En gitt verdi her vil inkluderes i responsen. Kan brukes til å skille forespørsler fra hverandre.",
+ "apihelp-main-param-servedby": "Inkluder navnet på tjeneren som utførte forespørselen i resultatene.",
+ "apihelp-main-param-curtimestamp": "Inkluder det nåværende tidsmerket i resultatet.",
+ "apihelp-main-param-responselanginfo": "Inkluder språkene brukt for <var>uselang</var> og <var>errorlang</var> i resultatet.",
+ "apihelp-main-param-origin": "Når man aksesserer API-en som bruker en domene-kryssende AJAX-forespørsel (CORS), sett denne til det opprinnelige domenet. Denne må tas med i alle pre-flight-forespørsler, og derfor være en del av spørre-URI-en (ikke POST-kroppen).\n\nFor autentiserte forespørsler må denne stemme helt med en av de opprinnelige i <code>Origin</code>-headeren, slik at den må settes til noe a la <kbd>https://en.wikipedia.org</kbd> eller <kbd>https://meta.wikimedia.org</kbd>. Hvis denne parameteren ikke stemmer med <code>Origin</code>-headeren, returneres et 403-svar. Hvis denne parameteren stemmer med <code>Origin</code>-headeren og originalen er hvitlistet, vil <code>Access-Control-Allow-Origin</code> og <code>Access-Control-Allow-Credentials</code>-headere bli satt.\n\nFor ikke-autentiserte forepørsler, spesifiser <kbd>*</kbd>. Denne vil gjøre at <code>Access-Control-Allow-Origin</code>-headeren blir satt, men <code>Access-Control-Allow-Credentials</code> blir <code>false</code> og alle bruerspesifikke data blir begrenset.",
+ "apihelp-main-param-uselang": "Språk å bruke for meldingsoversettelser. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages</kbd> returnerer en liste over språkkoder, eller spesifiser <kbd>user</kbd> for å bruke den nåværende brukerens språkpreferanser, eller spesifiser <kbd>content</kbd> for å bruke denne wikiens innholdsspråk.",
+ "apihelp-main-param-errorformat": "Formater som kan brukes for advarsels- og feiltekster.\n; plaintext: Wikitext der HTML-tagger er fjernet og elementer byttet ut.\n; wikitext: Ubehandlet wikitext.\n; html: HTML.\n; raw: Meldingsnøkler og -parametre.\n; none: Ingen tekst, bare feilkoder.\n; bc: Format brukt før MediaWiki 1.29. <var>errorlang</var> og <var>errorsuselocal</var> ses bort fra.",
+ "apihelp-main-param-errorlang": "Språk som skal brukes for advarsler og feil. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages/<kbd> returnerer ei liste over språkkoder, eller angi <kbd>content</kbd> for å bruke wikiens innholdsspråk, eller angi <kbd>uselang</kbd> for å bruke samme verdi som <var>uselang</var>-parameteren.",
+ "apihelp-main-param-errorsuselocal": "Hvis gitt, vil feiltekster bruke lokalt tilpassede meldinger fra {{ns:MediaWiki}}-navnerommet.",
+ "apihelp-block-summary": "Blokker en bruker.",
+ "apihelp-block-param-user": "Brukernavn, IP-adresse eller IP-intervall som skal blokkeres. Kan ikke brukes sammen med <var>$1userid</var>",
+ "apihelp-block-param-userid": "Bruker-ID som skal blokkeres. Kan ikke brukes sammen med <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Utløpstid. Kan være relativ (f.eks. <kbd>5 months</kbd> eller <kbd>2 weeks</kbd>) eller absolutt (f.eks. <kbd>2014-09-18T12:34:56Z</kbd>). Om den er satt til <kbd>infinite</kbd>, <kbd>indefinite</kbd> eller <kbd>never</kbd> vil blokkeringen ikke ha noen utløpsdato.",
+ "apihelp-block-param-reason": "Årsak for blokkering.",
+ "apihelp-block-param-anononly": "Blokker bare anonyme brukere (dvs. hindre anonyme redigeringer fra denne IP-adressen).",
+ "apihelp-block-param-nocreate": "Hindre kontoopprettelse.",
+ "apihelp-block-param-autoblock": "Blokker automatisk sist brukte IP-adresse og alle etterfølgende IP-adresser de prøver å logge inn fra.",
+ "apihelp-block-param-noemail": "Hindre brukeren å sende e-post via wikien. (Krever rettigheten <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Skjul brukernavnet fra blokkeringsloggen. (Krever rettigheten <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "La brukeren redigere sin egen diskusjonsside (avhenger av <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Overstyr den gamle blokkeringen om brukeren allerede er blokkert.",
+ "apihelp-block-param-watchuser": "Overvåk brukerens eller IP-adressas bruker- og brukerdiskusjonssider.",
+ "apihelp-block-param-tags": "Endre taggene slik at de brukes på elementet i blokk-loggen.",
+ "apihelp-block-example-ip-simple": "Blokker adressa <kbd>192.0.2.5</kbd> i tre dager med årsak <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Blokker brukeren <kbd>Vandal</kbd> på ubestemnt tid med årsak <kbd>Vandalism</kbd>, og forhindre ny kontooppretting og sending av epost.",
+ "apihelp-changeauthenticationdata-summary": "Endre autentiseringsdata for den nåværende brukeren.",
+ "apihelp-changeauthenticationdata-example-password": "Forsøk å endre den gjeldende brukerens passord til <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Sjekk gyldigheten til et tegn fra <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Type tegn som testes.",
+ "apihelp-checktoken-param-token": "Tegn å teste.",
+ "apihelp-checktoken-param-maxtokenage": "Maksimalt tillatt alder på tegnet, i sekunder.",
+ "apihelp-checktoken-example-simple": "Test gyldigheten til et <kbd>csrf</kbd>-tegn.",
+ "apihelp-clearhasmsg-summary": "Fjerner <code>hasmsg</code>-flagget for den aktuelle brukeren.",
+ "apihelp-clearhasmsg-example-1": "Fjern <code>hasmsg</code>-flagget for aktuell bruker.",
+ "apihelp-clientlogin-summary": "Logg inn på wikien med den interaktive flyten.",
+ "apihelp-clientlogin-example-login": "Start prosessen med å logge inn til wikien som bruker <kbd>Example</kbd> med passord <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Fortsett å logge inn etter en <samp>UI</samp>-respons for tofaktor-autentisering, ved å oppgi en <var>OATHToken</var> på <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Hent forskjellen mellom to sider.",
+ "apihelp-compare-extended-description": "Et revisjonsnummer, en sidetittel eller en side-ID for både «fra» og «til» må sendes.",
+ "apihelp-compare-param-fromtitle": "Første tittel å sammenligne.",
+ "apihelp-compare-param-fromid": "Første side-ID å sammenligne.",
+ "apihelp-compare-param-fromrev": "Første revisjon å sammenligne.",
+ "apihelp-compare-param-fromtext": "Bruk denne teksten i stedet for innholdet i revisjonen som angis med <var>fromtitle</var>, <var>fromid</var> eller <var>fromrev</var>.",
+ "apihelp-compare-param-frompst": "Gjør en transformering av <var>fromtext</var> før lagring.",
+ "apihelp-compare-param-fromcontentmodel": "Innholdsmodell for <var>fromtext</var>. Om den ikke angis vil den gjettes basert på de andre parameterne.",
+ "apihelp-compare-param-fromcontentformat": "Innholdsserialiseringsformat for <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Andre tittel å sammenligne.",
+ "apihelp-compare-param-toid": "Andre side-ID å sammenligne.",
+ "apihelp-compare-param-torev": "Andre revisjon å sammenligne.",
+ "apihelp-compare-param-torelative": "Bruk en revisjon som er relativ til revisjonen som hentes fra <var>fromtitle</var>, <var>fromid</var> eller <var>fromrev</var>. Alle de andre «to»-alternativene vil ignoreres.",
+ "apihelp-compare-param-totext": "Bruk denne teksten i stedet for innholdet i revisjonen spesifisert av <var>totitle</var>, <var>toid</var> eller <var>torev</var>.",
+ "apihelp-compare-param-topst": "Gjør en transformering av <var>totext</var> før lagring.",
+ "apihelp-compare-param-tocontentmodel": "Innholdsmodellen til <var>totext</var>. Om denne ikke angis vil den bli gjettet ut fra andre parametere.",
+ "apihelp-compare-param-tocontentformat": "Innholdsserialiseringsformat for <var>totext</var>.",
+ "apihelp-compare-param-prop": "Hvilke informasjonsdeler som skal hentes.",
+ "apihelp-compare-paramvalue-prop-diff": "Diffens HTML.",
+ "apihelp-compare-paramvalue-prop-diffsize": "Størrelsen på diffens HTML i byte.",
+ "apihelp-compare-paramvalue-prop-rel": "Revisjons-ID-en for revisjonene foran «from» og etter «to», om de finnes.",
+ "apihelp-compare-paramvalue-prop-ids": "Side- og revisjons-ID-ene til «from»- og «to»-revisjonene.",
+ "apihelp-compare-paramvalue-prop-title": "Sidetitlene for «from»- og «to»-revisjonene.",
+ "apihelp-compare-paramvalue-prop-user": "Brukernavnet og ID-en til «from»- og «to»-revisjonene.",
+ "apihelp-compare-paramvalue-prop-comment": "Kommentaren til «from»- og «to»-revisjonene.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "Den parsede kommentaren til «from»- og «to»-revisjonene.",
+ "apihelp-compare-paramvalue-prop-size": "Størrelsen til «from»- og «to»-revisjonene.",
+ "apihelp-compare-example-1": "Lag en diff mellom revisjon 1 og 2.",
+ "apihelp-createaccount-summary": "Opprett en ny brukerkonto.",
+ "apihelp-createaccount-param-preservestate": "Om <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> returnerte true for <samp>hashprimarypreservedstate</samp> bør forespørsler merket som <samp>primary-required</samp> omgås. Om den returnerte en ikke-tom verdi for <samp>preservedusername</samp> kan det brukernavnet brukes for <var>username</var>-parameteren.",
+ "apihelp-createaccount-example-create": "Start prosessen med å opprette brukeren <kbd>Example</kbd> med passordet <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Brukernavn.",
+ "apihelp-createaccount-param-password": "Passord (ignorert dersom <var>$1mailpassword</var> er satt).",
+ "apihelp-createaccount-param-domain": "Domene for ekstern autentisering (valgfritt).",
+ "apihelp-createaccount-param-token": "Kontoopprettingstegn som hentet i den første forespørselen.",
+ "apihelp-createaccount-param-email": "Brukerens e-postadresse (valgfritt).",
+ "apihelp-createaccount-param-realname": "Brukerens virkelige navn (valgfritt).",
+ "apihelp-createaccount-param-mailpassword": "Dersom satt til en verdi vil et tilfeldig passord bli sendt med e-post til brukeren.",
+ "apihelp-createaccount-param-reason": "Valgfri grunn for å opprette kontoen for å legges i loggene.",
+ "apihelp-createaccount-param-language": "Språkkode å bruke som standard for brukeren (valgfritt, standardverdien er innholdsspråket).",
+ "apihelp-createaccount-example-pass": "Opprett bruker <kbd>testuser</kbd> med passordet <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Opprett bruker <kbd>testmailuser</kbd> og send et tilfeldig generert passord med e-post.",
+ "apihelp-cspreport-summary": "Brukes av nettlesere for å rapportere brudd på Content Security Policy. Denne modulen bør aldri brukes utenom av en CSP-mottakelig nettleser.",
+ "apihelp-cspreport-param-source": "Hva som genererte CSP-headeren som utløste denne rapporten",
+ "apihelp-delete-summary": "Slett en side.",
+ "apihelp-delete-param-title": "Tittel til siden som skal slettes. Kan ikke brukes sammen med <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Side-ID til siden som skal slettes. Kan ikke brukes sammen med <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Årsak for slettingen. Dersom ikke satt vil en automatisk generert årsak bli brukt.",
+ "apihelp-delete-param-tags": "Endringstagger å legge til oppslaget i slettingsloggen.",
+ "apihelp-delete-param-watch": "Legg til siden til aktuell brukers overvåkningsliste.",
+ "apihelp-delete-param-unwatch": "Fjern siden fra aktuell brukers overvåkningsliste.",
+ "apihelp-delete-param-oldimage": "Navnet på det gamle bildet som skal slettes som oppgitt av [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Slett <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Slett <kbd>Main Page</kbd> med grunnen <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Denne modulen har blitt deaktivert",
+ "apihelp-edit-summary": "Opprett og rediger sider.",
+ "apihelp-edit-param-title": "Tittelen til siden som skal redigeres. Kan ikke brukes sammen med <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Side-ID til siden som skal redigeres. Kan ikke brukes sammen med <var>$1title</var>.",
+ "apihelp-edit-param-section": "Avsnittsnummer. <kbd>0</kbd> for det øverste avsnittet, <kbd>new</kbd> for et nytt avsnitt.",
+ "apihelp-edit-param-sectiontitle": "Tittelen for et nytt avsnitt.",
+ "apihelp-edit-param-text": "Sideinnhold.",
+ "apihelp-edit-param-summary": "Redigeringssammendrag. Også seksjonstittel når $1section=new og $1sectiontitle ikke er satt.",
+ "apihelp-edit-param-tags": "Endringstagger som skal brukes på revisjonen.",
+ "apihelp-edit-param-minor": "Mindre redigering.",
+ "apihelp-edit-param-notminor": "Ikke mindre redigering.",
+ "apihelp-edit-param-bot": "Merk denne redigeringen som en botendring.",
+ "apihelp-edit-param-basetimestamp": "Tidsstempel for grunnrevisjonen, brukes for å oppdage redigeringskonflikter. Kan hentes via [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Tidsstempel for når redigeringsprosessen begynte, brukes for å oppdage redigeringskonflikter. En gyldig verdi kan hentes med <var>[[Special:ApiHelp/main|curtimestamp]]</var> når man begynner en redigeringsprosess (f.eks. når man laster sideinnholdet som redigeres).",
+ "apihelp-edit-param-recreate": "Overstyr feil om at siden har blitt slettet i mellomtiden.",
+ "apihelp-edit-param-createonly": "Ikke rediger siden dersom den finnes allerede.",
+ "apihelp-edit-param-nocreate": "Gi en feilmelding dersom dersom siden ikke finnes.",
+ "apihelp-edit-param-watch": "Legg til siden til aktuell brukers overvåkningsliste.",
+ "apihelp-edit-param-unwatch": "Fjern siden fra aktuell brukers overvåkningsliste.",
+ "apihelp-edit-param-prependtext": "Legg til denne teksten til starten av siden. Overstyrer $1text.",
+ "apihelp-edit-param-undo": "Fjern (gjør om) denne revisjonen. Overstyrer $1text, $1prependtext og $1appendtext.",
+ "apihelp-edit-param-undoafter": "Fjern alle revisjoner fra $1undo til denne. Om den ikke er satt, fjern kun én revisjon.",
+ "apihelp-edit-param-redirect": "Bestem omdirigeringer automatisk.",
+ "apihelp-edit-param-contentformat": "Innholdsserialiseringsformat brukt for inndatateksten.",
+ "apihelp-edit-param-contentmodel": "Det nye innholdets innholdsmodell.",
+ "apihelp-edit-param-token": "Nøkkelen bør alltid sendes som siste parameter, eller i det minste etter parameteren $1text.",
+ "apihelp-edit-example-edit": "Rediger en side.",
+ "apihelp-edit-example-prepend": "Legg til <kbd>_&#95;NOTOC_&#95;</kbd> i begynnelsen av en side.",
+ "apihelp-edit-example-undo": "Fjerner revisjon 13579–13585 med automatisk redigeringsforklaring.",
+ "apihelp-emailuser-summary": "Send e-post til en bruker.",
+ "apihelp-emailuser-param-target": "Bruker som det skal sendes e-post til.",
+ "apihelp-emailuser-param-subject": "Emne.",
+ "apihelp-emailuser-param-text": "E-post innhold.",
+ "apihelp-emailuser-param-ccme": "Send en kopi av denne e-posten til meg.",
+ "apihelp-emailuser-example-email": "Send en epost til brukeren <kbd>WikiSysop</kbd> med teksten <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Ekspanderer alle maler i wikitekst.",
+ "apihelp-expandtemplates-param-title": "Sidetittel.",
+ "apihelp-expandtemplates-param-text": "Wikitekst som skal konverteres.",
+ "apihelp-expandtemplates-param-revid": "Revisjons-ID, for <code><nowiki>{{REVISIONID}}</nowiki></code> og lignende variabler.",
+ "apihelp-expandtemplates-param-prop": "Hvilken informasjon som skal hentes.\n\nMerk at om ingen verdier velges vil resultatet inneholde wikiteksten, men utdataene vil komme i et utdatert format.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Den utvidede wikiteksten.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Kategorier som er tilstede i innputt som ikke representeres i utputt.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Sideegenskaper definert av utvidede magiske ord i wikiteksten.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Hvorvidt utdataene er ustabile og ikke burde gjenbrukes andre steder på siden.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Maksimal tid som skal ha gått før mellomlagrede resultater skal ugyldiggjøres.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Gir JavaScript-konfigurasjonsvariabler som er spesifikke for siden.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Gir JavaScript-konfigurasjonsvariabler som er spesifikke for siden som en JSON-streng.",
+ "apihelp-expandtemplates-param-includecomments": "Hvorvidt HTML-kommentarer skal inkluderes i utdataene.",
+ "apihelp-expandtemplates-example-simple": "Utvid wikiteksten <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Returnerer en mating med brukerbidrag.",
+ "apihelp-feedcontributions-param-feedformat": "Matingens format.",
+ "apihelp-feedcontributions-param-user": "Hvilke brukere det skal hentes bidrag av.",
+ "apihelp-feedcontributions-param-namespace": "Hvilke navnerom bidragene skal filtreres med.",
+ "apihelp-feedcontributions-param-year": "Fra år (og tidligere).",
+ "apihelp-feedcontributions-param-month": "Fra måned (og tidligere).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrer bidrag som har disse merkene.",
+ "apihelp-feedcontributions-param-deletedonly": "Vis bare slettede bidrag.",
+ "apihelp-feedcontributions-param-toponly": "Vis kun redigeringer som er gjeldende revisjoner.",
+ "apihelp-feedcontributions-param-newonly": "Bare vis bidrag som er sideopprettinger.",
+ "apihelp-feedcontributions-param-hideminor": "Skjul mindre endringer.",
+ "apihelp-feedcontributions-param-showsizediff": "Vis størrelsesforskjellen mellom revisjoner.",
+ "apihelp-feedcontributions-example-simple": "Returner bidrag for brukeren <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Returnerer en mating med siste endringer.",
+ "apihelp-feedrecentchanges-param-feedformat": "Matingens format.",
+ "apihelp-feedrecentchanges-param-namespace": "Navnerom resultater skal begrenses til.",
+ "apihelp-feedrecentchanges-param-invert": "Alle navnerom utenom det valgte.",
+ "apihelp-feedrecentchanges-param-associated": "Inkluder tilknyttede navnerom (diskusjons- eller hovednavnerom).",
+ "apihelp-feedrecentchanges-param-days": "Dager resultatene skal begrenses til.",
+ "apihelp-feedrecentchanges-param-limit": "Maksimalt antall resultater som skal returneres",
+ "apihelp-feedrecentchanges-param-from": "Vis endringer siden da.",
+ "apihelp-feedrecentchanges-param-hideminor": "Skjul mindre endringer.",
+ "apihelp-feedrecentchanges-param-hidebots": "Skjul botendringer.",
+ "apihelp-feedrecentchanges-param-hideanons": "Skjul endringer gjort av anonyme brukere.",
+ "apihelp-feedrecentchanges-param-hideliu": "Skjul endringer gjort av registrerte brukere.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Skjul patruljerte endringer.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Skjul endringer gjort av den aktuelle brukeren.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Skjul endringer i kategorimedlemsskap.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrer etter tagger.",
+ "apihelp-feedrecentchanges-param-target": "Vis bare endringer på sider som lenkes fra denne siden.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Vis endringer på sider som lenker til den valgte siden i stedet.",
+ "apihelp-feedrecentchanges-example-simple": "Vis siste endringer.",
+ "apihelp-feedrecentchanges-example-30days": "Vis siste endringer for 30 døgn.",
+ "apihelp-feedwatchlist-summary": "Returnerer en overvåkningslistemating.",
+ "apihelp-feedwatchlist-param-feedformat": "Matingens format.",
+ "apihelp-feedwatchlist-param-linktosections": "Lenk direkte til endrede seksjoner om mulig.",
+ "apihelp-feedwatchlist-example-default": "Vis matingen til overvåkningslisten.",
+ "apihelp-feedwatchlist-example-all6hrs": "Vis alle endringer på overvåkede sider de siste 6 timene.",
+ "apihelp-filerevert-summary": "Tilbakestill en fil til en gammel versjon.",
+ "apihelp-filerevert-param-filename": "Målfilnavn, uten prefikset File:.",
+ "apihelp-filerevert-param-comment": "Opplastingskommentar.",
+ "apihelp-filerevert-example-revert": "Tilbakestiller <kbd>Wiki.png</kbd> til versjonen fra <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Vis hjelp for de gitte modulene.",
+ "apihelp-help-param-modules": "Moduler det skal vises hjelp for (verdiene til <var>action</var>- og <var>format</var>-parameterne, eller <kbd>main</kbd>). Kan angi undermoduler med en <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Inkluder hjelp for undermoduler av den navngitte modulen.",
+ "apihelp-help-param-recursivesubmodules": "Inkluder hjelp for undermoduler rekursivt.",
+ "apihelp-help-param-helpformat": "Format for hjelperesultatet.",
+ "apihelp-help-param-wrap": "Omgi resultatet i en standard API-responsstruktur.",
+ "apihelp-help-param-toc": "Inkluder en innholdsfortegnelse i HTML-utdataen.",
+ "apihelp-help-example-main": "Hjelp for hovedmodulen.",
+ "apihelp-help-example-submodules": "Hjelp for <kbd>action=query</kbd> og alle dens undermoduler.",
+ "apihelp-help-example-recursive": "All hjelp på en side.",
+ "apihelp-help-example-help": "Hjelp for selve hjelpemodulen.",
+ "apihelp-help-example-query": "Hjelp for to utspørringsundermoduler.",
+ "apihelp-imagerotate-summary": "Roter ett eller flere bilder.",
+ "apihelp-imagerotate-param-rotation": "Grader bildet skal roteres med klokka.",
+ "apihelp-imagerotate-param-tags": "Tagger som skal legges til oppslaget i opplastingsloggen.",
+ "apihelp-imagerotate-example-simple": "Roter <kbd>File:Example.png</kbd> <kbd>90</kbd> grader.",
+ "apihelp-imagerotate-example-generator": "Roter alle bilder i <kbd>Category:Flip</kbd> <kbd>180</kbd> grader.",
+ "apihelp-import-summary": "Importer en side fra en annen wiki eller fra en XML-fil.",
+ "apihelp-import-extended-description": "Merk at HTTP POST må gjøres som filopplasting (altså med bruk av multipart/form-data) når man sender en fil for parameteren <var>xml</var>.",
+ "apihelp-import-param-summary": "Sammendrag for importering av loggelement.",
+ "apihelp-import-param-xml": "Opplastet XML-fil.",
+ "apihelp-import-param-assignknownusers": "Tildel redigeringer til lokale brukere der den navngitte brukeren finnes lokalt.",
+ "apihelp-import-param-interwikisource": "For interwikiimport: wiki det skal importeres fra.",
+ "apihelp-import-param-interwikipage": "For interwikiimport: side som skal importeres.",
+ "apihelp-import-param-fullhistory": "For interwikiimport: importer hele historikken, ikke bare den nåværende versjonen.",
+ "apihelp-import-param-templates": "For interwikiimport: importer alle inkluderte maler i tillegg.",
+ "apihelp-import-param-namespace": "Importer til dette navnerommet: Kan ikke brukes sammen med <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importer som underside av denne siden. Kan ikke brukes sammen med <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Endringstagger som skal klistres på oppføringen i importloggen og nullrevisjonen til de importerte sidene.",
+ "apihelp-import-example-import": "Importer [[meta:Help:ParserFunctions]] til navnerom 100 med full historikk.",
+ "apihelp-linkaccount-summary": "Lenk en konto fra en tredjepartsleverandør til den gjeldende brukeren.",
+ "apihelp-linkaccount-example-link": "Start prosessen med å lenke til en konto fra <kbd>Example</kbd>.",
+ "apihelp-login-summary": "Logg inn og få autentiseringsinformasjonskapsler.",
+ "apihelp-login-param-name": "Brukernavn.",
+ "apihelp-login-param-password": "Passord.",
+ "apihelp-login-param-domain": "Domene (valgfritt).",
+ "apihelp-login-example-gettoken": "Henter innloggingstegn.",
+ "apihelp-login-example-login": "Logg inn.",
+ "apihelp-logout-summary": "Logg ut og fjern sesjonsdata.",
+ "apihelp-logout-example-logout": "Logg ut den aktuelle brukeren.",
+ "apihelp-managetags-example-delete": "Slett taggen <kbd>vandlaism</kbd> med årsaken <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Aktiver taggen <kbd>spam</kbd> med årsak <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Deaktiver taggen med navn <kbd>spam</kbd> med årsak <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Flett sidehistorikker.",
+ "apihelp-mergehistory-param-from": "Tittelen på siden historikken skal flettes fra. Kan ikke brukes sammen med <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "Side-ID-en til siden historikken skal flettes fra. Kan ikke brukes sammen med <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Tittelen på siden historikken skal flettes til. Kan ikke brukes sammen med <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "Side-ID-en til siden historikken skal flettes til. Kan ikke brukes sammen med <var>$1to</var>.",
+ "apihelp-mergehistory-param-reason": "Årsak for fletting av historikk.",
+ "apihelp-mergehistory-example-merge": "Flett hele historikken til <kbd>Oldpage</kbd> inn i <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Flett siderevisjonene av <kbd>Oldpage</kbd> til og med <kbd>2015-12-31T04:37:41Z</kbd> inn i <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Flytt en side.",
+ "apihelp-move-param-from": "Tittelen på siden det skal endres navn på. Kan ikke brukes sammen med <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Side-ID til siden det skal endres navn på. Kan ikke brukes sammen med <var>$1from</var>.",
+ "apihelp-move-param-to": "Tittelen siden skal endre navn til.",
+ "apihelp-move-param-reason": "Årsak for navneendring.",
+ "apihelp-move-param-movetalk": "Bytt navn på diskusjonssiden om den finnes.",
+ "apihelp-move-param-movesubpages": "Bytt navn på undersider, om mulig.",
+ "apihelp-move-param-noredirect": "Ikke opprett en omdirigering.",
+ "apihelp-move-param-watch": "Legg til siden og omdirigeringen i den gjeldende brukerens overvåkningsliste.",
+ "apihelp-move-param-unwatch": "Fjern siden og omdirigeringen fra den gjeldende brukerens overvåkningsliste.",
+ "apihelp-opensearch-param-search": "Søkestreng.",
+ "apihelp-opensearch-param-limit": "Maksimalt antall resultater som skal returneres.",
+ "apihelp-opensearch-param-namespace": "Navnerom det skal søkes i.",
+ "apihelp-opensearch-param-suggest": "Gjør ingenting om <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> er falsk.",
+ "apihelp-opensearch-param-format": "Resultatets format.",
+ "apihelp-opensearch-example-te": "Finn sider som begynner på <kbd>Te</kbd>.",
+ "apihelp-options-param-reset": "Tilbakestiller innstillingene til sidestandarden.",
+ "apihelp-options-example-reset": "Tilbakestill alle innstillinger.",
+ "apihelp-options-example-change": "Endre innstillinger for <kbd>skin</kbd> og <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Tilbakestill alle innstillinger, og sett så <kbd>skin</kbd> og <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Hent informasjon om API-moduler.",
+ "apihelp-paraminfo-param-helpformat": "Format for hjelpestrenger.",
+ "apihelp-parse-param-prop": "Hvilke informasjonsdeler som skal hentes:",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Gir HTML-versjonen av kategoriene.",
+ "apihelp-parse-paramvalue-prop-headitems": "Gir elementer som skal puttes i <code>&lt;head&gt;</code>-taggen til siden.",
+ "apihelp-patrol-summary": "Patruljer en side eller revisjon.",
+ "apihelp-query+allfileusages-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Legger til filens tittel.",
+ "apihelp-query+allfileusages-param-limit": "Hvor mange elementer som skal returneres totalt.",
+ "apihelp-query+allfileusages-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+allfileusages-example-unique": "List opp unike filtitler.",
+ "apihelp-query+allfileusages-example-unique-generator": "Hent alle filtitler og marker de som mangler.",
+ "apihelp-query+allfileusages-example-generator": "Hent sider som inneholder filene.",
+ "apihelp-query+allimages-param-sort": "Egenskap det skal sorteres etter.",
+ "apihelp-query+allimages-param-dir": "Retningen det skal sorteres i.",
+ "apihelp-query+allimages-param-minsize": "Begrens til bilder med minst dette antallet byte.",
+ "apihelp-query+allimages-param-maxsize": "Begrens til bilder med minst dette antallet byte.",
+ "apihelp-query+allimages-param-sha1": "SHA1-hash for bildet. Setter til side $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1-hash av bildet i base 36 (brukes i MediaWiki).",
+ "apihelp-query+allimages-param-user": "Returner bare filer lastet opp av denne brukeren. Kan kun brukes med $1sort=timestamp. Kan ikke brukes med $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Hvordan opplastinger av roboter skal filtreres. Kan kun brukes med $1sort=timestamp. Kan ikke brukes sammen med $1user.",
+ "apihelp-query+allimages-param-mime": "Hvilke MIME-typer det skal søkes etter, f.eks. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Hvor mange bilder som skal returneres totalt.",
+ "apihelp-query+allimages-example-B": "Viser en liste over filer som begynner med bokstaven <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Viser en liste over nylig opplastede filer på samme måte som [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Viser en liste over filer med MIME-typen <kbd>image/png</kbd> eller <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Viser informasjon om 4 filer fra og med bokstaven <kbd>T</kbd>.",
+ "apihelp-query+alllinks-param-prefix": "Søk etter alle lenkede titler som begynner med denne verdien.",
+ "apihelp-query+alllinks-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Legger til tittelen til lenka.",
+ "apihelp-query+alllinks-param-limit": "Hvor mange elementer som skal returneres totalt.",
+ "apihelp-query+alllinks-param-dir": "Retningen det skal listes i.",
+ "apihelp-query+alllinks-example-unique": "List opp unike lenkede titler.",
+ "apihelp-query+alllinks-example-unique-generator": "Henter alle lenkede titler og markerer de som mangler.",
+ "apihelp-query+alllinks-example-generator": "Hent sider som inneholder lenkene.",
+ "apihelp-query+allmessages-summary": "Returnerer meldinger fra denne siden.",
+ "apihelp-query+allmessages-param-prop": "Hvilke egenskaper som skal hentes.",
+ "apihelp-query+allmessages-param-filter": "Returner kun meldinger med navn som inneholder denne strengen.",
+ "apihelp-query+allmessages-param-lang": "Returner meldinger på dette språket.",
+ "apihelp-query+allmessages-param-title": "Sidenavn å bruke som kontekst når meldingen tolkes (for alternativet $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Returner meldinger med dette prefikset.",
+ "apihelp-query+allmessages-example-ipb": "Vis meldinger som starter med <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Vis meldingene <kbd>august</kbd> og <kbd>mainpage</kbd> på tysk.",
+ "apihelp-query+allpages-param-filterredir": "Hvilke sider som skal listes opp.",
+ "apihelp-query+allpages-param-minsize": "Begrens til sider med dette antallet byte.",
+ "apihelp-query+allpages-param-maxsize": "Begrens til sider med maksimalt dette antallet byte.",
+ "apihelp-query+allpages-param-prtype": "Begrens til beskyttede sider.",
+ "apihelp-query+allpages-param-limit": "Hvor mange sider som skal returneres totalt.",
+ "apihelp-query+allpages-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+allpages-example-generator-revisions": "Vis innholdet til de to første ikke-omdirigeringssidene som begynner med <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Lister opp alle omdirigeringer til et navnerom.",
+ "apihelp-query+allredirects-param-prefix": "Søk etter alle målsider som begynner med denne verdien.",
+ "apihelp-query+allredirects-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Legger til side-ID-en til den omdirigerende siden (kan ikke brukes med <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Legger til tittelen til omdirigeringen.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Legger til fragmentet fra omdirigeringen, om det er et (kan ikke brukes med <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Legger til interwikiprefikset fra omdirigeringen, om det er et (kan ikke brukes med <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-limit": "Hvor mange elementer som skal returneres totalt.",
+ "apihelp-query+allredirects-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+allredirects-example-B": "List opp målsider, inkludert de som mangler, med side-ID-ene de kommer fra, begynner på <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "List opp unike målsider.",
+ "apihelp-query+allredirects-example-unique-generator": "Henter alle målsider, markerer de som mangler.",
+ "apihelp-query+allredirects-example-generator": "Henter sider som inneholder omdirigeringene.",
+ "apihelp-query+allrevisions-summary": "List opp alle revisjoner.",
+ "apihelp-query+allrevisions-param-user": "List bare opp revisjoner av denne brukeren.",
+ "apihelp-query+allrevisions-param-excludeuser": "Ikke list opp revisjoner av denne brukeren.",
+ "apihelp-query+allrevisions-param-namespace": "List kun opp sider i dette navnerommet.",
+ "apihelp-query+allrevisions-param-generatetitles": "Når denne brukes som generator, generer titler i stedet for revisjons-ID-er.",
+ "apihelp-query+allrevisions-example-user": "List opp de siste 50 bidragene fra brukeren <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "List opp de første 50 revisjonene i hovednavnerommet.",
+ "apihelp-query+mystashedfiles-param-prop": "Hvilke egenskaper som skal hentes for filene.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Hent filstørrelse og bildedimensjoner.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Hent filas MIME-type og medietype.",
+ "apihelp-query+mystashedfiles-param-limit": "Hvor mange filer som skal hentes.",
+ "apihelp-query+alltransclusions-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Legger til tittelen på transklusjonen.",
+ "apihelp-query+allusers-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Legger til informasjon om en gjeldende blokkering av brukeren.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Lister opp grupper brukeren er i. Dette bruker flere tjenerressurser og kan returnere færre resultater enn grensa.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lister opp alle grupper brukeren automatisk er med i.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Lister opp rettigheter brukeren har.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Legger til redigeringstelleren til brukeren.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Legger til tidsstempelet for når brukeren ble registrert, om tilgjengelig (kan være blank).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Legger til sentrale ID-er og tilkoblingsstatus for brukeren.",
+ "apihelp-query+allusers-param-limit": "Hvor mange brukernavn som skal returneres.",
+ "apihelp-query+allusers-param-witheditsonly": "List bare opp brukere som har gjort redigeringer.",
+ "apihelp-query+allusers-param-activeusers": "List bare opp brukere som har vært aktiv {{PLURAL:$1|den siste dagene|de siste $1 dagene}}.",
+ "apihelp-query+allusers-param-attachedwiki": "Med <kbd>$1prop</kbd>, indiker også hvorvidt brukeren er tilkoblet med wikien som identifiseres av denne ID-en.",
+ "apihelp-query+allusers-example-Y": "List opp brukere fra og med <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Hent informasjon om den gjeldende autentiseringsstatusen.",
+ "apihelp-query+backlinks-summary": "Finn alle sider som lenker til den gitte siden.",
+ "apihelp-query+backlinks-param-title": "Tittel det skal søkes etter. Kan ikke brukes sammen med <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "Side-ID det skal søkes etter. Kan ikke brukes sammen med <var>$1title</var>.",
+ "apihelp-query+backlinks-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+categorymembers-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modus|Moduser}}: $2",
+ "apihelp-query+exturlusage-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+iwbacklinks-param-limit": "Hvor mange sider som skal returneres totalt.",
+ "apihelp-query+iwbacklinks-param-prop": "Hvilke egenskaper som skal hentes:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Legger til prefikset til interwikien.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Legger til tittelen til interwikien.",
+ "apihelp-query+iwbacklinks-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+iwbacklinks-example-simple": "Hent sider som lenker til [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Hent informasjon om sider som lenker til [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Returnerer alle interwikilenker fra de gitte sidene.",
+ "apihelp-query+iwlinks-param-url": "Hvorvidt den fulle URL-en skal hentes (kan ikke brukes med $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Hvilke ekstra egenskaper som skal hentes for hver språklenke:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Legger til den fulle URL-en.",
+ "apihelp-query+iwlinks-param-limit": "Hvor mange interikilenker som skal returneres.",
+ "apihelp-query+iwlinks-param-prefix": "Returner bare interwikilenker med dette prefikset.",
+ "apihelp-query+iwlinks-param-title": "Interwikilenker det skal søkes etter. Må brukes med <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+iwlinks-example-simple": "Hent interwikilenker fra sida <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Finn alle sider som lenker til den gitte språklenka.",
+ "apihelp-query+langbacklinks-param-lang": "Språket for språklenka.",
+ "apihelp-query+langbacklinks-param-title": "Språklenke det skal søkes etter. Må brukes med $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Hvor mange sider som skal returneres totalt.",
+ "apihelp-query+langbacklinks-param-prop": "Hvilke egenskaper som skal hentes:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Legger til språkkoden til språklenka.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Legger til tittelen til språklenka.",
+ "apihelp-query+langbacklinks-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+langbacklinks-example-simple": "Hent sider som lenker til [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Hent informasjon om sider som lenker til [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Returnerer alle språklenker fra de gitte sidene.",
+ "apihelp-query+langlinks-param-limit": "Hvor mange språklenker som skal returneres.",
+ "apihelp-query+langlinks-param-url": "Hvorvidt den fulle URL-en skal hentes (kan ikke brukes med <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Hvilke ekstra egenskaper som skal hentes for hver språklenke:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Legger til den fulle URL-en.",
+ "apihelp-query+langlinks-param-lang": "Returner bare språklenker med denne språkkoden.",
+ "apihelp-query+langlinks-param-title": "Lenke det skal søkes etter. Må brukes med <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Språkkode for oversatte språknavn.",
+ "apihelp-query+langlinks-example-simple": "Hent språklenker fra siden <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Returnerer alle lenker fra de gitte sidene.",
+ "apihelp-query+links-param-namespace": "Viser lenker kun i disse navnerommene.",
+ "apihelp-query+links-param-limit": "Hvor mange lenker som skal returneres.",
+ "apihelp-query+links-param-titles": "List bare opp lenker til disse titlene. Nyttig for å sjekke om en viss side lenker til en annen viss side.",
+ "apihelp-query+links-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+links-example-simple": "Hent lenker fra sida <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Hent informasjon om lenkesidene på sida <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Hent lenker fra sida <kbd>Main Page</kbd> i navnerommene {{ns:user}} og {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Finn alle sider som lenker til de gitte sidene.",
+ "apihelp-query+linkshere-param-prop": "Hvilke egenskaper som skal hentes:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "Side-ID for hver side.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Tittelen til hver side.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Marker om siden er omdirigering.",
+ "apihelp-query+linkshere-param-namespace": "Inkluder bare sider i disse navnerommene.",
+ "apihelp-query+linkshere-param-limit": "Hvor mange som skal returneres.",
+ "apihelp-query+linkshere-param-show": "Vis bare elementer som møter disse kriteriene:\n;redirect:Vis bare omdirigeringer.\n;!redirect:Vis bare ikke-omdirigeringer.",
+ "apihelp-query+linkshere-example-simple": "Hent ei liste over sider som lenker til [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Hent informasjon om sider som lenker til [[Main Page]].",
+ "apihelp-query+logevents-summary": "Hent oppføringer fra logger.",
+ "apihelp-query+logevents-param-prop": "Hvilke egenskaper som skal hentes:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Legger til ID-en til loggoppføringen.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Legger til tittelen på siden i loggoppføringen.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Legger til typen loggoppføring.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Legger til brukeren som er ansvarlig for loggoppføringen.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Legger til bruker-ID-en som var ansvarlig for loggoppføringen.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Legger til tidsstempelet for loggoppføringen.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Legger til kommentaren til loggoppføringen.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Legger til den parsede kommentaren til loggoppføringen.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Lister opp ekstra detaljer om loggoppføringen.",
+ "apihelp-query+logevents-param-type": "Filtrer loggoppføringer til kun denne typen.",
+ "apihelp-query+logevents-param-action": "Filtrer logghandlinger til kun denne handlingen. Overstyrer <var>$1type</var>. I listen over mulige verdier kan verdier med jokertegnet stjerne, som <kbd>action/*</kbd> ha forskjellige strenger etter skråstreken.",
+ "apihelp-query+logevents-param-user": "Filtrer oppføringer til de som er gjort av den gitte brukeren.",
+ "apihelp-query+logevents-param-title": "Filtrer oppføringer til de som er relatert til ei side.",
+ "apihelp-query+logevents-param-namespace": "Filtrer oppføringer til de i det gitte navnerommet.",
+ "apihelp-query+logevents-param-prefix": "Filtrer oppføringer som starter med dette prefikset.",
+ "apihelp-query+logevents-param-tag": "List bare opp oppføringer som er tagget med denne taggen.",
+ "apihelp-query+logevents-param-limit": "Hvor mange oppføringer som skal returneres.",
+ "apihelp-query+logevents-example-simple": "List opp nylige loggoppføringer.",
+ "apihelp-query+pagepropnames-summary": "List opp alle sideegenskapsnavn i bruk på wikien.",
+ "apihelp-query+pagepropnames-param-limit": "Maksimalt antall navn som skal returneres.",
+ "apihelp-query+pagepropnames-example-simple": "Hent de 10 første egenskapsnavnene.",
+ "apihelp-query+pageprops-summary": "Hent diverse sideegenskaper definert i sideinnholdet.",
+ "apihelp-query+pageprops-param-prop": "List kun opp disse sideegenskapene (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> returnerer sideegenskapsnavn i bruk). Nyttig for å sjekke om sider bruker en viss sideegenskap.",
+ "apihelp-query+pageprops-example-simple": "Hent egenskaper for sidene <kbd>Main Page</kbd> og <kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "Lister opp alle sider med en gitt sideegenskap.",
+ "apihelp-query+pageswithprop-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Legger til side-ID-en.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Legger til tittel- og navneroms-ID-en til sida.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Legger til verdien til sideegenskapen.",
+ "apihelp-query+pageswithprop-param-limit": "Maksimalt antall sider som skal returneres.",
+ "apihelp-query+pageswithprop-param-dir": "Hvilken retning det skal sorteres i.",
+ "apihelp-query+pageswithprop-example-simple": "List opp de første 10 sidene som bruker <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Hent ekstra informasjon om de 10 første sidene som bruker <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Utfør et prefikssøk for sidetitler.",
+ "apihelp-query+prefixsearch-param-search": "Søkestreng.",
+ "apihelp-query+prefixsearch-param-namespace": "Navnerom det skal søkes i.",
+ "apihelp-query+prefixsearch-param-limit": "Maksimalt antall resultater som skal returneres.",
+ "apihelp-query+prefixsearch-param-offset": "Antall resultater som skal hoppes over.",
+ "apihelp-query+prefixsearch-example-simple": "Søk etter sidetitler som begynner med <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Søkeprofil som skal brukes.",
+ "apihelp-query+protectedtitles-summary": "List opp alle titler som er beskyttet fra opprettelse.",
+ "apihelp-query+protectedtitles-param-namespace": "List kun opp titler i disse navnerommene.",
+ "apihelp-query+protectedtitles-param-level": "List kun opp titler med disse beskyttelsesnivåene.",
+ "apihelp-query+protectedtitles-param-limit": "Hvor mange sider som skal returneres totalt.",
+ "apihelp-query+protectedtitles-param-prop": "Hvilke egenskaper som skal hentes:",
+ "apihelp-query+querypage-param-limit": "Antall resultater som skal returneres.",
+ "apihelp-query+querypage-example-ancientpages": "Returner resultater fra [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Hent et sett av tilfeldige sider.",
+ "apihelp-query+userinfo-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+users-param-prop": "Hvilken informasjon som skal inkluderes:",
+ "apihelp-query+watchlist-param-type": "Hvilke typer endringer som skal vises:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Vanlige sideredigeringer.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Eksterne endringer.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Sideopprettelser",
+ "apihelp-query+watchlist-paramvalue-type-log": "Loggoppføringer.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Endringer i kategorimedlemskap.",
+ "apihelp-query+watchlist-param-owner": "Brukes sammen med $1token for å få tilgang til en annen brukers overvåkningsliste.",
+ "apihelp-query+watchlist-param-token": "En sikkerhetsnøkkel (tilgjengelig i brukerens [[Special:Preferences#mw-prefsection-watchlist|innstillinger]]) for å tillate tilgang til en annen brukers overvåkningsliste.",
+ "apihelp-query+watchlistraw-param-namespace": "List kun opp sider i de gitte navnerommene.",
+ "apihelp-query+watchlistraw-param-limit": "Hvor mange resultater som skal returneres totalt per forespørsel.",
+ "apihelp-query+watchlistraw-param-prop": "Hvilke ekstra egenskaper som skal hentes:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Legger til tidsstempel for når brukeren sist ble varslet om redigeringen.",
+ "apihelp-query+watchlistraw-param-show": "List kun opp elementer som tilfredsstiller disse kriteriene.",
+ "apihelp-query+watchlistraw-param-owner": "Brukes sammen med $1token for å få tilgang til en annen brukers overvåkningsliste.",
+ "apihelp-query+watchlistraw-param-token": "En sikkerhetsnøkkel (tilgjengelig i brukerens [[Special:Preferences#mw-prefsection-watchlist|innstillinger]]) for å tillate tilgang til en annen brukers overvåkningsliste.",
+ "apihelp-query+watchlistraw-param-dir": "Retningen det skal listes opp i.",
+ "apihelp-query+watchlistraw-example-simple": "List opp sider på den gjeldende brukerens overvåkningsliste.",
+ "apihelp-query+watchlistraw-example-generator": "Hent sideinfo for sider på den gjeldende brukerens overvåkningsliste.",
+ "apihelp-removeauthenticationdata-summary": "Fjern autentiseringsdata for den gjeldende brukeren.",
+ "apihelp-removeauthenticationdata-example-simple": "Forsøk å fjerne den gjeldende brukerens data for <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Send en epost for nullstilling av passord til en bruker.",
+ "apihelp-revisiondelete-summary": "Slett og gjenopprett revisjoner.",
+ "apihelp-revisiondelete-param-type": "Type revisjonssletting som utføres.",
+ "apihelp-revisiondelete-param-target": "Sidetittelen for revisjonssletting, om det kreves for typen.",
+ "apihelp-revisiondelete-param-ids": "Identifikatorer for revisjonene som skal slettes.",
+ "apihelp-revisiondelete-param-hide": "Hva som skal skjules for hver revisjon.",
+ "apihelp-revisiondelete-param-show": "Hva som skal vises for hver revisjon.",
+ "apihelp-revisiondelete-param-suppress": "Hvorvidt data skal skjules for administratorer i tillegg til andre.",
+ "apihelp-revisiondelete-param-reason": "Årsak for slettingen eller gjenopprettingen.",
+ "apihelp-revisiondelete-param-tags": "Tagger som skal brukes på oppføringen i sletteloggen.",
+ "apihelp-revisiondelete-example-revision": "Skjul innhold for revisjon <kbd>12345</kbd> på siden <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Skjul alle data om loggoppføringen <kbd>67890</kbd> med årsak <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "Omgjør den siste redigeringen på siden.",
+ "apihelp-rollback-extended-description": "Om den siste brukeren som redigerte siden gjorde flere redigeringer på rad, vil alle disse redigeringene fjernes.",
+ "apihelp-rollback-param-title": "Tittelen på siden som skal tilbakestilles. Kan ikke brukes sammen med <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "Side-ID for siden som skal tilbakestilles. Kan ikke brukes sammen med <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Tagger som skal påføres tilbakestillingen.",
+ "apihelp-rollback-param-user": "Navnet til brukeren hvis redigeringer skal tilbakestilles.",
+ "apihelp-rollback-param-summary": "Egendefinert redigeringssammendrag. Om denne er tom vil standardsammendraget brukes.",
+ "apihelp-rollback-param-markbot": "Merk de tilbakestilte redigeringene og tilbakestillingen som botredigeringer.",
+ "apihelp-rollback-example-simple": "Tilbakestill de siste redigeringene på siden <kbd>Main Page</kbd> av brukeren <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Tilbakestill de siste redigeringene på siden <kbd>Main Page</kbd> av IP-adressen <kbd>192.0.2.5</kbd> med sammendraget <kbd>Reverting vandalism</kbd>, og merk disse redigeringene samt tilbakestillingen som botredigeringer.",
+ "apihelp-setnotificationtimestamp-summary": "Oppdater varselstidsstempelet for overvåkede sider.",
+ "apihelp-setpagelanguage-summary": "Endre språket til en side.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Endring av språket til en side tillates ikke på denne wikien.\n\nSlå på <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> for å bruke denne handlingen.",
+ "apihelp-setpagelanguage-param-title": "Tittelen på siden som skal endre språk. Kan ikke brukes sammen med <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "Side-ID til siden du ønsker å endre språk på. Kan ikke brukes sammen med <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Språkkoden for språket du ønsker å endre siden til. Bruk <kbd>default</kbd> for å tilbakestille siden til wikiens standardspråk.",
+ "apihelp-setpagelanguage-param-reason": "Årsak for endringen.",
+ "apihelp-setpagelanguage-param-tags": "Endringstagger som skal påføres loggoppføringen som oppstår på grunn av denne handlingen.",
+ "apihelp-setpagelanguage-example-language": "Endre språket til <kbd>Main Page</kbd> til baskisk.",
+ "apihelp-setpagelanguage-example-default": "Endre språket til siden med ID 123 til wikiens standardspråk.",
+ "apihelp-stashedit-param-title": "Tittelen på siden som redigeres.",
+ "apihelp-stashedit-param-section": "Seksjonsnummer. <kbd>0</kbd> for toppseksjonen, <kbd>new</kbd> for en ny seksjon.",
+ "apihelp-stashedit-param-sectiontitle": "Tittelen til en ny seksjon.",
+ "apihelp-stashedit-param-text": "Sideinnhold.",
+ "apihelp-stashedit-param-contentmodel": "Innholdsmodellen til det nye innholdet.",
+ "apihelp-stashedit-param-baserevid": "Revisjons-ID-en til grunnrevisjonen.",
+ "apihelp-stashedit-param-summary": "Endringssammendrag.",
+ "apihelp-tag-summary": "Legg til eller fjern endringstagger fra individuelle revisjoner eller loggoppføringer.",
+ "apihelp-tag-param-revid": "Én eller flere revisjons-ID-er taggen skal legges til på eller fjernes fra.",
+ "apihelp-tag-param-logid": "Én eller flere loggoppførings-ID-er taggen skal legges til på eller fjernes fra.",
+ "apihelp-tag-param-add": "Tagger som skal legges til. Kun manuelt definerte tagger kan legges til.",
+ "apihelp-tag-param-remove": "Tagger som skal fjernes. Kun tagger som er enten manuelt definert eller helt udefinerte kan fjernes.",
+ "apihelp-tag-param-reason": "Årsak for endringen.",
+ "apihelp-tag-param-tags": "Tagger som skal påføres loggoppføringen som vil oppstå på grunn av denne handlingen.",
+ "apihelp-tag-example-rev": "Legg til taggen <kbd>vandalism</kbd> til revisjons-ID-en 123 uten å oppgi årsak",
+ "apihelp-tag-example-log": "Fjern taggen <kbd>spam</kbd> fra loggoppførings-ID-en 123 med årsaken <kbd>Wrongly applied</kbd>",
+ "apihelp-tokens-extended-description": "Denne modulen er foreldet til fordel for [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-example-edit": "Hent en redigeringsnøkkel (standard).",
+ "apihelp-tokens-example-emailmove": "Hent en epostnøkkel og en flyttingsnøkkel.",
+ "apihelp-unblock-summary": "Avblokker en bruker.",
+ "apihelp-userrights-param-user": "Brukernavn.",
+ "apihelp-userrights-param-userid": "Bruker-ID.",
+ "apihelp-userrights-param-remove": "Fjern brukeren fra disse gruppene.",
+ "apihelp-userrights-param-reason": "Årsak for endringen.",
+ "apihelp-userrights-param-tags": "Endringstagger som skal påføres oppføringen i brukerettighetsloggen.",
+ "apihelp-userrights-example-user": "Legg til brukeren <kbd>FooBot</kbd> i gruppa <kbd>bot</kbd>, og fjern den fra gruppene <kbd>sysop</kbd> og <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Legg til brukeren med ID <kbd>123</kbd> til gruppa <kbd>bot</kbd>, og fjern den fra gruppene <kbd>sysop</kbd> og <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "Legg til brukeren <kbd>SometimeSysop</kbd> til gruppa <kbd>sysop</kbd> midlertidig i én måned.",
+ "apihelp-validatepassword-summary": "Valider et passord mot wikiens passordkrav.",
+ "apihelp-validatepassword-param-password": "Passord som skal valideres.",
+ "apihelp-watch-example-watch": "Overvåk siden <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Avslutt overvåking av siden <kbd>Main Page</kbd>.",
+ "apihelp-format-example-generic": "Returner spørringsresultatet i formatet $1.",
+ "apihelp-json-summary": "Resultatdata i JSON-format.",
+ "apihelp-none-summary": "Ingen resultat.",
+ "api-help-main-header": "Hovedmodul",
+ "api-help-undocumented-module": "Ingen dokumentasjon for modulen $1.",
+ "api-help-flag-deprecated": "Modulen er foreldet.",
+ "api-help-flag-internal": "<strong>Denne modulen er intern eller ustabel.</strong> Hvordan den fungerer kan forandre seg uten forvarsel.",
+ "api-help-flag-readrights": "Denne modulen krever lesetilgang.",
+ "api-help-flag-writerights": "Denne modulen krever skrivetilgang.",
+ "api-help-flag-mustbeposted": "Denne modulen aksepterer bare POST forespørsler.",
+ "api-help-flag-generator": "Denne modulen kan brukes som en generator.",
+ "api-help-source": "Kilde: $1",
+ "api-help-source-unknown": "Kilde: <span class=\"apihelp-unknown\">ukjent</span>",
+ "api-help-license": "Lisens: [[$1|$2]]",
+ "api-help-license-noname": "Lisens: [[$1|Se lenke]]",
+ "api-help-license-unknown": "Lisens: <span class=\"apihelp-unknown\">ukjent</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parametre}}:",
+ "api-help-param-deprecated": "Utgått.",
+ "api-help-param-required": "Denne parameteren er påkrevd.",
+ "api-help-datatypes-header": "Datatyper",
+ "api-help-param-type-limit": "Type: heltall eller <kbd>max</kbd>",
+ "api-help-param-type-integer": "Type: {{PLURAL:$1|1=heltall|2=liste over heltall}}",
+ "api-help-param-type-boolean": "Type: boolsk verdi ([[Special:ApiHelp/main#main/datatypes|detaljer]])",
+ "api-help-param-type-timestamp": "Type: {{PLURAL:$1|1=tidsstempel|2=liste over tidsstempler}} ([[Special:ApiHelp/main#main/datatypes|tillatte formater]])",
+ "api-help-param-type-user": "Type: {{PLURAL:$1|1=brukernavn|2=liste over brukernavn}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Én av følgende verdier|2=Verdier (separer med <kbd>{{!}}</kbd> eller [[Special:ApiHelp/main#main/datatypes|alternativ]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Må være tom|Kan være tom, eller $2}}",
+ "api-help-param-limit": "Ikke mer enn $1 er tillatt.",
+ "api-help-param-limit2": "Ikke mer enn $1 ($2 for botter) er tillatt.",
+ "api-help-param-integer-min": "{{PLURAL:$1|Verdien|Verdiene}} må ikke være mindre enn $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|Verdien|Verdiene}} må ikke være større enn $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|Verdien|Verdiene}} må være mellom $2 og $3.",
+ "api-help-param-multi-separate": "Separer verdier med <kbd>|</kbd> eller [[Special:ApiHelp/main#main/datatypes|alternativ]].",
+ "api-help-param-multi-max": "Maksimalt antall verdier er {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} for botter)",
+ "api-help-param-multi-max-simple": "Maksimalt antall verdier er {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "For å angi alle verdier, bruk <kbd>$1</kbd>.",
+ "api-help-param-default": "Standard: $1",
+ "api-help-param-default-empty": "Standard: <span class=\"apihelp-empty\">(tom)</span>",
+ "api-help-param-continue": "Når flere resultater er tilgjengelige, bruk denne for å fortsette.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(ingen beskrivelse)</span>",
+ "api-help-param-maxbytes": "Kan ikke være lengre enn $1 {{PLURAL:$1|byte}}.",
+ "api-help-param-maxchars": "Kan ikke være lengre enn $1 {{PLURAL:$1|tegn}}.",
+ "api-help-examples": "{{PLURAL:$1|Eksempel|Eksempler}}:",
+ "api-help-permissions": "{{PLURAL:$1|Tillatelse|Tillatelser}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Gitt til}}: $2",
+ "api-help-open-in-apisandbox": "<small>[åpne i sandkasse]</small>",
+ "apierror-changeauth-norequest": "Kunne ikke opprette endringsforespørsel.",
+ "apierror-contentserializationexception": "Innholdsserialisering feliet: $1",
+ "apierror-contenttoobig": "Innholdet du oppga overskrider artikkelstørrelsesgrensen på $1 {{PLURAL:$1|kilobyte}}.",
+ "apierror-copyuploadbaddomain": "Opplasting via URL tillates ikke fra dette domenet.",
+ "apierror-copyuploadbadurl": "Opplasting tillates ikke fra denne URL-en.",
+ "apierror-create-titleexists": "Eksisterende titler kan ikke beskyttes med <kbd>create</kbd>.",
+ "apierror-csp-report": "Feil under prosessering av CSP-rapport: $1.",
+ "apierror-databaseerror": "[$1] Databasespørringsfeil.",
+ "apierror-deletedrevs-param-not-1-2": "Parameteren <var>$1</var> kan ikke brukes i modus 1 eller 2.",
+ "apierror-deletedrevs-param-not-3": "Parameteren <var>$1</var> kan ikke brukes i modus 3.",
+ "apierror-emptynewsection": "Oppretting av tomme nye seksjoner er ikke mulig.",
+ "apierror-emptypage": "Oppretting av nye, tomme sider tillates ikke.",
+ "apierror-exceptioncaught": "[$1] Unntak fanget: $2",
+ "apierror-filedoesnotexist": "Fila fins ikke.",
+ "apierror-fileexists-sharedrepo-perm": "Målfila fins på et delt fillager. Bruk parameteren <var>ignorewarnings</var> for å overstyre den.",
+ "apierror-filenopath": "Kan ikke hente lokal filsti.",
+ "apierror-filetypecannotberotated": "Filtypen kan ikke roteres.",
+ "apierror-formatphp": "Denne responsen kan ikke representeres med <kbd>format=php</kbd>. Se https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "Tittelen for <kbd>$1</kbd> må være ei fil.",
+ "apierror-import-unknownerror": "Ukjent feil under importering: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> kan ikke være over $2 (satt til $3) for botter eller administratorer.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> kan ikke være over $2 (satt til $3) for brukere.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> kan ikke være mindre enn $2 (satt til $3).",
+ "apierror-invalidcategory": "Kategorinavnet du skrev inn er ikke gyldig.",
+ "apierror-invalidexpiry": "Ugyldig utløpstid «$1».",
+ "apierror-invalid-file-key": "Ikke en gyldig filnøkkel.",
+ "apierror-invalidlang": "Ugyldig språkkode for parameteren <var>$1</var>.",
+ "apierror-invalidoldimage": "Parameteren <var>oldimage</var> har et ugyldig format.",
+ "apierror-invalidparammix-cannotusewith": "Parameteren <kbd>$1</kbd> kan ikke brukes med <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "Parameteren <kbd>$1</kbd> kan ikke brukes med <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> kan ikke kombineres med parameterne <var>oldid</var>, <var>pageid</var> eller <var>page</var>. Bruk <var>title</var> og <var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Parameterne}} $1 kan ikke brukes sammen.",
+ "apierror-invalidsection": "Parameteren <var>section</var> må være en gyldig seksjons-ID eller <kbd>new</kbd>.",
+ "apierror-invalidtitle": "Ugyldig tittel «$1».",
+ "apierror-invalidurlparam": "Ugyldig verdi for <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Ugyldig brukernavn «$1».",
+ "apierror-invaliduserid": "Bruker-ID-en <var>$1</var> er ikke gyldig.",
+ "apierror-maxbytes": "Parameteren <var>$1</var> kan ikke være lengre enn $2 {{PLURAL:$2|byte}}",
+ "apierror-maxchars": "Parameteren <var>$1</var> kan ikke være lengre enn $2 {{PLURAL:$2|tegn}}",
+ "apierror-maxlag-generic": "Venter på en databasetjener: Henger etter med {{PLURAL:$1|ett sekund|$1 sekunder}}.",
+ "apierror-maxlag": "Venter på $2: Henger etter med {{PLURAL:$1|ett sekund|$1 sekunder}}.",
+ "apierror-mimesearchdisabled": "MIME-søk er slått av i Miser-modus.",
+ "apierror-missingcontent-pageid": "Manglende innhold for side-ID $1.",
+ "apierror-missingcontent-revid": "Manglende innhold for revisjons-ID $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$1|Parameteren|Minst én av parameterne}} $1 er påkrevd.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|Parameteren|Én av parameterne}} $1 er påkrevd.",
+ "apierror-missingparam": "Parameteren <var>$1</var> må være satt.",
+ "apierror-missingrev-pageid": "Ingen gjeldende revisjon av side-ID $1.",
+ "apierror-missingrev-title": "Ingen gjeldende revisjon av tittelen $1.",
+ "apierror-missingtitle-createonly": "Manglende titler kan bare beskyttes med <kbd>create</kbd>.",
+ "apierror-missingtitle": "Siden du oppga fins ikke.",
+ "apierror-missingtitle-byname": "Siden $1 fins ikke.",
+ "apierror-moduledisabled": "Modulen <kbd>$1</kbd> har blitt slått av.",
+ "apierror-multival-only-one-of": "{{PLURAL:$3|Kun|Kun én av} $2 tillates for parameteren <var>$3</var>.",
+ "apierror-multpages": "<var>$1</var> kan kun brukes med én enkel side.",
+ "apierror-mustbeloggedin-changeauth": "Du må være logget inn for å endre autentiseringsdata.",
+ "apierror-mustbeloggedin-generic": "Du må være logget inn.",
+ "apierror-mustbeloggedin-linkaccounts": "Du må være logget inn for å lenke kontoer.",
+ "apierror-mustbeloggedin-removeauth": "Du må være logget inn for å fjerne autentiseringsdata.",
+ "apierror-mustbeloggedin": "Du må være logget inn for å $1.",
+ "apierror-mustbeposted": "Modulen <kbd>$1</kbd> krever en POST-forespørsel.",
+ "apierror-mustpostparams": "Følgende {{PLURAL:$2|parameter|parametre}} ble funnet i spørringsstrengen, men må være i POST-innholdet: $1.",
+ "apierror-noapiwrite": "Redigering av denne wikien via API er slått av. Sjekk at utsagnet <code>$wgEnableWriteAPI=true;</code> inkluderes i wikiens <code>LocalSettings.php</code>-fil.",
+ "apierror-nochanges": "Ingen endringer ble forespurt.",
+ "apierror-no-direct-editing": "Direkte redigering via API-et støttes ikke for innholdsmodellen $1 som brukes av $2.",
+ "apierror-noedit-anon": "Anonyme brukere kan ikke redigere sider.",
+ "apierror-noedit": "Du har ikke tillatelse til å redigere sider.",
+ "apierror-noimageredirect-anon": "Anonyme brukere kan ikke opprette bildeomdirigeringer.",
+ "apierror-noimageredirect": "Du har ikke tillatelse til å opprette bildeomdirigeringer.",
+ "apierror-nosuchlogid": "Det er ingen loggoppføring med ID $1.",
+ "apierror-nosuchpageid": "Det er ingen side med ID $1.",
+ "apierror-nosuchrcid": "Det er ingen nylig endring med ID $1.",
+ "apierror-nosuchrevid": "Det er ingen revisjon med ID $1.",
+ "apierror-nosuchsection": "Det er ingen seksjon $1.",
+ "apierror-nosuchsection-what": "Det er ingen seksjon $1 i $2.",
+ "apierror-nosuchuserid": "Det er ingen bruker med ID $1.",
+ "apierror-notarget": "Du har ikke angitt et gyldig mål for denne handlingen.",
+ "apierror-notpatrollable": "Revisjonen r$1 kan ikke patruljeres fordi den er for gammel.",
+ "apierror-nouploadmodule": "Ingen opplastingsmodul satt.",
+ "apierror-offline": "Kunne ikke fortsette på grunn av tilkoblingsproblemer. Sjekk at internettforbindelsen din virker og prøv igjen.",
+ "apierror-opensearch-json-warnings": "Advarsel kan ikke representeres OpenSearch JSON-format.",
+ "apierror-pagecannotexist": "Navnerommet tillater ikke faktiske sider.",
+ "apierror-pagedeleted": "Siden har blitt slettet siden du hentet tidsstempelet dens.",
+ "apierror-pagelang-disabled": "Endring av sidespråk tillates ikke på denne wikien.",
+ "apierror-paramempty": "Parameteren <var>$1</var> kan ikke være tom.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> støttes kut for wikitekstinnhold.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> støttes kun for wikitekstinnhold. $1 bruker innholdsmodellen $2.",
+ "apierror-pastexpiry": "Utløpstiden «$1» er i fortiden.",
+ "apierror-permissiondenied": "Du har ikke tillatelse til å $1.",
+ "apierror-permissiondenied-generic": "Tilgang nektet.",
+ "apierror-permissiondenied-patrolflag": "Du trenger rettigheten <code>patrol</code> eller <code>patrolmarks</code> for å be om patruljert-flagget.",
+ "apierror-permissiondenied-unblock": "Du har ikke tillatelse til å avblokkere brukere.",
+ "apierror-prefixsearchdisabled": "Prefikssøk er slått av i Miser-modus.",
+ "apierror-protect-invalidaction": "Ugyldig beskyttelsestype «$1».",
+ "apierror-protect-invalidlevel": "Ugyldig beskyttelsesnivå «$1».",
+ "apierror-readapidenied": "Du må ha lesetilgang for å bruke denne modulen.",
+ "apierror-readonly": "Wikien er for tiden skrivebeskyttet.",
+ "apierror-revwrongpage": "r$1 er ikke en revisjon av $2.",
+ "apierror-searchdisabled": "<var>$1</var>-søk er slått av.",
+ "apierror-sectionreplacefailed": "Kunne ikke flette oppdatert seksjon.",
+ "apierror-sectionsnotsupported": "Seksjoner støttes ikke for innholdsmodellen $1.",
+ "apierror-sectionsnotsupported-what": "Seksjoner støttes ikke av $1.",
+ "apierror-siteinfo-includealldenied": "Kan ikke vise alle tjenernes info med mindre </var>$wgShowHostNames</var> er sann.",
+ "apierror-sizediffdisabled": "Størrelsesforskjell er slått av i Miser-modus.",
+ "apierror-timeout": "Tjeneren svarte ikke innenfor forventet tid.",
+ "apiwarn-validationfailed": "Bekreftelsesfeil <kbd>$1</kbd>: $2"
+}
diff --git a/www/wiki/includes/api/i18n/nds.json b/www/wiki/includes/api/i18n/nds.json
new file mode 100644
index 00000000..3f7cb12e
--- /dev/null
+++ b/www/wiki/includes/api/i18n/nds.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "apihelp-login-param-password": "Passwoort."
+}
diff --git a/www/wiki/includes/api/i18n/ne.json b/www/wiki/includes/api/i18n/ne.json
new file mode 100644
index 00000000..1a122c65
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ne.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nirjal stha",
+ "सरोज कुमार ढकाल"
+ ]
+ },
+ "apihelp-createaccount-param-name": "प्रयोगकर्ता नाम।",
+ "apihelp-edit-param-minor": "सामान्य सम्पादन।",
+ "apihelp-edit-example-edit": "पृष्ठ सम्पादन गर्नुहोस्।",
+ "apihelp-emailuser-summary": "प्रयोगकर्तालाई इमेल गर्नुहोस्।",
+ "apihelp-parse-param-prop": "जानकारीको कुन भाग लिनेः"
+}
diff --git a/www/wiki/includes/api/i18n/nl.json b/www/wiki/includes/api/i18n/nl.json
new file mode 100644
index 00000000..d0148feb
--- /dev/null
+++ b/www/wiki/includes/api/i18n/nl.json
@@ -0,0 +1,394 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siebrand",
+ "Sjoerddebruin",
+ "Robin0van0der0vliet",
+ "Mar(c)",
+ "Valhallasw",
+ "Sikjes",
+ "Macofe",
+ "SPQRobin",
+ "HanV",
+ "Rangekill",
+ "Robin van der Vliet",
+ "Edoderoo",
+ "Lemondoge",
+ "Hex",
+ "Mainframe98",
+ "Southparkfan"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentatie]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> De MediaWiki API is een stabiele interface die actief ondersteund en verbeterd wordt. Hoewel we het proberen te voorkomen, is het mogelijk dat er soms wijzigingen worden aangebracht die bepaalde API-verzoek kunnen verhinderen; abonneer u op de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over wijzigingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Foutmeldingen en waarschuwingen]] voor meer informatie.\n\n<p class=\"mw-apisandbox-link\"><strong>Testen:</strong> u kunt [[Special:ApiSandbox|eenvoudig API-verzoeken testen]].</p>",
+ "apihelp-main-param-action": "Welke handeling uit te voeren.",
+ "apihelp-main-param-format": "De opmaak van de uitvoer.",
+ "apihelp-main-param-maxlag": "De maximale vertraging kan gebruikt worden als MediaWiki is geïnstalleerd op een databasecluster die gebruik maakt van replicatie. Om te voorkomen dat handelingen nog meer databasereplicatievertraging veroorzaken, kan deze parameter ervoor zorgen dat de client wacht totdat de replicatievertraging lager is dan de aangegeven waarde. In geval van buitensporige vertraging wordt de foutcode <samp>maxlag</samp> teruggegeven met een bericht als <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Zie [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Handleiding:Maxlag parameter]] voor meer informatie.",
+ "apihelp-main-param-smaxage": "Stelt de <code>s-maxage</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+ "apihelp-main-param-maxage": "Stelt de <code>max-age</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+ "apihelp-main-param-assert": "Controleer of de gebruiker is aangemeld indien <kbd>assert=user</kbd>, of het botgebruikersrecht heeft indien <kbd>assert=bot</kbd>.",
+ "apihelp-main-param-assertuser": "Controleer of de huidige gebruiker de genoemde gebruiker is.",
+ "apihelp-main-param-requestid": "Elke waarde die hier gegeven wordt, wordt aan het antwoord toegevoegd. Dit kan gebruikt worden om verzoeken te onderscheiden.",
+ "apihelp-main-param-servedby": "De hostnaam van de server die de aanvraag heeft afgehandeld aan de resultaten toevoegen.",
+ "apihelp-main-param-curtimestamp": "Huidige tijd aan de resultaten toevoegen.",
+ "apihelp-main-param-responselanginfo": "De voor <var>uselang</var> en <var>errorlang</var> gebruikte talen aan de resultaten toevoegen.",
+ "apihelp-main-param-errorlang": "De voor waarschuwingen en fouten te gebruiken taal. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> met <kbd>siprop=languages</kbd> geeft een lijst van taalcodes, of stel <kbd>content</kbd> in om de taal van de inhoud van deze wiki te gebruiken, of stel <kbd>uselang</kbd> in om dezelfde waarde als de parameter <var>uselang</var> te gebruiken.",
+ "apihelp-main-param-errorsuselocal": "Indien ingesteld maken foutmeldingen gebruik van lokaal-aangepaste berichten in de {{ns:MediaWiki}}-naamruimte.",
+ "apihelp-block-summary": "Gebruiker blokkeren.",
+ "apihelp-block-param-user": "Te blokkeren gebruikersnaam, IP-adres of IP-range. Kan niet in combinatie met <var>$1userid</var> gebruikt worden.",
+ "apihelp-block-param-userid": "Te blokkeren gebruikers-ID. Kan niet in combinatie met <var>$1user</var> gebruikt worden.",
+ "apihelp-block-param-expiry": "Vervaldatum. Kan relatief zijn (bijv. <kbd>5 months</kbd> of <kbd>2 weeks</kbd>) of absoluut (bijv. <kbd>2014-09-18T12:34:56Z</kbd>). Indien ingesteld op <kbd>infinite</kbd>, <kbd>indefinite</kbd> of <kbd>never</kbd> zal de blokkade nooit verlopen.",
+ "apihelp-block-param-reason": "Reden voor blokkade.",
+ "apihelp-block-param-anononly": "Alleen anonieme gebruikers blokkeren (d.w.z. anonieme bewerkingen via dit IP-adres uitschakelen).",
+ "apihelp-block-param-nocreate": "Het aanmaken van accounts verhinderen.",
+ "apihelp-block-param-autoblock": "Automatisch het laatst gebruikte IP-adres blokkeren, en tevens ieder volgend IP-adres waarvanaf de gebruiker probeert aan te melden.",
+ "apihelp-block-param-noemail": "Het sturen van e-mail via wiki verhinderen. (Vereist het <code>blockemail</code>-recht.)",
+ "apihelp-block-param-hidename": "De gebruikersnaam in het blokkeerlogboek verbergen. (Vereist het <code>hideuser</code>-recht.)",
+ "apihelp-block-param-allowusertalk": "De gebruiker toestaan om de eigen overlegpagina te bewerken (afhankelijk van <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "De huidige blokkade overschrijven indien de gebruiker al geblokkeerd is.",
+ "apihelp-block-param-watchuser": "De gebruikers- en overlegpagina's van de gebruiker of het IP-adres volgen.",
+ "apihelp-block-param-tags": "De labels voor de regel in het blokkeerlogboek wijzigen.",
+ "apihelp-block-example-ip-simple": "IP-adres <kbd>192.0.2.5</kbd> voor drie dagen blokkeren met als reden <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Gebruiker <kbd>Vandal</kbd> voor onbepaalde tijd blokkeren met als reden <kbd>Vandalism</kbd>, en verhinder het aanmaken van nieuwe accounts en het versturen van e-mail.",
+ "apihelp-changeauthenticationdata-example-password": "Poging om het wachtwoord van de huidige gebruiker te veranderen in <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "De geldigheid van een token van <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> controleren.",
+ "apihelp-checktoken-param-type": "Het type token dat getest wordt.",
+ "apihelp-checktoken-param-token": "Te testen token.",
+ "apihelp-checktoken-param-maxtokenage": "Maximale levensduur van de token, in seconden.",
+ "apihelp-checktoken-example-simple": "Test de geldigheid van een <kbd>csrf</kbd>-token.",
+ "apihelp-clearhasmsg-summary": "Wist de <code>hasmsg</code>-vlag voor de huidige gebruiker.",
+ "apihelp-clearhasmsg-example-1": "De <code>hasmsg</code>-vlag voor de huidige gebruiker wissen.",
+ "apihelp-clientlogin-summary": "Bij de wiki aanmelden met behulp van de interactieve flow.",
+ "apihelp-clientlogin-example-login": "Start het aanmeldproces als gebruiker <kbd>Example</kbd> met wachtwoord <kbd>ExamplePassword</kbd>.",
+ "apihelp-compare-summary": "Het verschil tussen twee pagina's ophalen.",
+ "apihelp-compare-extended-description": "Voor zowel \"from\" als \"to\" moet een revisienummer, paginatitel, pagina-ID, tekst of relatieve referentie ingegeven worden.",
+ "apihelp-compare-param-fromtitle": "Eerste te vergelijken paginanaam.",
+ "apihelp-compare-param-fromid": "Eerste te vergelijken pagina-ID.",
+ "apihelp-compare-param-fromrev": "Eerste te vergelijken revisie.",
+ "apihelp-compare-param-totitle": "Tweede te vergelijken paginanaam.",
+ "apihelp-compare-param-toid": "Tweede te vergelijken pagina-ID.",
+ "apihelp-compare-param-torev": "Tweede te vergelijken revisie.",
+ "apihelp-createaccount-summary": "Een nieuw gebruikersaccount aanmaken.",
+ "apihelp-createaccount-example-create": "Start het proces voor het aanmaken van account <kbd>Example</kbd> met wachtwoord <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Gebruikersnaam.",
+ "apihelp-createaccount-param-password": "Wachtwoord (genegeerd als <var>$1mailpassword</var> is ingesteld).",
+ "apihelp-createaccount-param-domain": "Domein voor externe authentificatie (optioneel).",
+ "apihelp-createaccount-param-email": "E-mailadres van de gebruiker (optioneel).",
+ "apihelp-createaccount-param-realname": "Echte naam van de gebruiker (optioneel).",
+ "apihelp-createaccount-param-reason": "Optionele reden voor het aanmaken van het account, om in de logboeken te zetten.",
+ "apihelp-createaccount-param-language": "Taalcode om als standaard voor de gebruiker in te stellen (optioneel, standaard ingesteld op de inhoudstaal).",
+ "apihelp-createaccount-example-pass": "Account <kbd>testuser</kbd> met wachtwoord <kbd>test123</kbd> aanmaken.",
+ "apihelp-createaccount-example-mail": "Account <kbd>testmailuser</kbd> aanmaken en een willekeurig gegenereerd wachtwoord e-mailen.",
+ "apihelp-delete-summary": "Een pagina verwijderen.",
+ "apihelp-delete-param-title": "Titel van de te verwijderen pagina. Kan niet in combinatie met <var>$1pageid</var> gebruikt worden.",
+ "apihelp-delete-param-pageid": "Pagina-ID van de te verwijderen pagina. Kan niet in combinatie met <var>$1title</var> gebruikt worden.",
+ "apihelp-delete-param-reason": "Reden voor de verwijdering. Indien niet opgegeven, zal er een automatisch gegenereerde reden gebruikt worden.",
+ "apihelp-delete-param-tags": "De labels voor de regel in het verwijderlogboek wijzigen.",
+ "apihelp-delete-param-watch": "De pagina aan de volglijst van de huidige gebruiker toevoegen.",
+ "apihelp-delete-param-unwatch": "De pagina van de volglijst van de huidige gebruiker verwijderen.",
+ "apihelp-delete-example-simple": "Verwijder <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Verwijder <kbd>Main Page</kbd> met als reden <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Deze module is uitgeschakeld.",
+ "apihelp-edit-summary": "Pagina's aanmaken en bewerken.",
+ "apihelp-edit-param-title": "Naam van de te bewerken pagina. Kan niet in combinatie met <var>$1pageid</var> gebruikt worden.",
+ "apihelp-edit-param-pageid": "Pagina-ID van de te bewerken pagina. Kan niet in combinatie met <var>$1title</var> gebruikt worden.",
+ "apihelp-edit-param-sectiontitle": "De naam van een nieuwe sectie.",
+ "apihelp-edit-param-text": "Pagina-inhoud.",
+ "apihelp-edit-param-tags": "De labels voor de revisie wijzigen.",
+ "apihelp-edit-param-minor": "Kleine bewerking.",
+ "apihelp-edit-param-notminor": "Niet-kleine bewerking.",
+ "apihelp-edit-param-bot": "Deze bewerking markeren als een botbewerking.",
+ "apihelp-edit-param-createonly": "De pagina niet bewerken als die al bestaat.",
+ "apihelp-edit-param-nocreate": "Een foutmelding geven als de pagina niet bestaat.",
+ "apihelp-edit-param-watch": "Voeg de pagina toe aan de volglijst van de huidige gebruiker.",
+ "apihelp-edit-param-unwatch": "Verwijder de pagina van de volglijst van de huidige gebruiker.",
+ "apihelp-edit-param-md5": "De MD5-hash van de $1text parameter, of de $1prependtext en $1appendtext parameters samengevoegd. Indien ingesteld, wordt de bewerking niet gemaakt tenzij de hash juist is.",
+ "apihelp-edit-param-prependtext": "Voeg deze tekst toe aan het begin van de pagina. Overschrijft $1text.",
+ "apihelp-edit-param-appendtext": "Voeg deze tekst toe aan het eind van de pagina. Overschrijft $1text.\n\nGebruik $1section=new om een nieuwe sectie toe te voegen, in plaats van deze parameter.",
+ "apihelp-edit-param-undo": "Maak deze revisie ongedaan. Overschrijft $1text, $1prependtext en $1appendtext.",
+ "apihelp-edit-param-undoafter": "Maak alle revisies vanaf $1undo tot deze ongedaan. Indien niet ingesteld wordt slechts één revisie ongedaan gemaakt.",
+ "apihelp-edit-param-redirect": "Doorverwijzingen automatisch oplossen.",
+ "apihelp-edit-param-contentmodel": "Inhoudsmodel van de nieuwe inhoud.",
+ "apihelp-edit-param-token": "De token moet altijd als de laatste parameter worden verzonden, of in ieder geval na de $1text parameter.",
+ "apihelp-edit-example-edit": "Een pagina bewerken.",
+ "apihelp-edit-example-prepend": "Voeg <kbd>_&#95;NOTOC_&#95;</kbd> toe aan het begin van een pagina.",
+ "apihelp-edit-example-undo": "Revisies 13579 tot 13585 ongedaan maken met automatische beschrijving.",
+ "apihelp-emailuser-summary": "Gebruiker e-mailen.",
+ "apihelp-emailuser-param-target": "Gebruiker naar wie de e-mail moet worden gestuurd.",
+ "apihelp-emailuser-param-subject": "Onderwerpkoptekst.",
+ "apihelp-emailuser-param-text": "E-mailtekst.",
+ "apihelp-emailuser-param-ccme": "Mij een kopie van deze e-mail sturen.",
+ "apihelp-emailuser-example-email": "Stuur een e-mail naar gebruiker <kbd>WikiSysop</kbd> met de tekst <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-param-title": "Paginanaam.",
+ "apihelp-expandtemplates-param-text": "Om te zetten wikitekst.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "De uitgewerkte wikitekst.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "De maximale tijdsduur waarna de cache van het resultaat moet worden weggegooid.",
+ "apihelp-feedcontributions-summary": "Retourneert een feed van gebruikersbijdragen.",
+ "apihelp-feedcontributions-param-feedformat": "De indeling van de feed.",
+ "apihelp-feedcontributions-param-user": "De gebruikers voor wie de bijdragen verkregen moeten worden.",
+ "apihelp-feedcontributions-param-year": "Van jaar (en eerder).",
+ "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
+ "apihelp-feedcontributions-param-deletedonly": "Alleen verwijderde bijdragen weergeven.",
+ "apihelp-feedcontributions-param-toponly": "Alleen bewerkingen weergeven die de nieuwste revisies zijn.",
+ "apihelp-feedcontributions-param-newonly": "Alleen bewerkingen weergeven die nieuwe pagina's hebben gestart.",
+ "apihelp-feedcontributions-param-hideminor": "Verberg kleine bewerkingen.",
+ "apihelp-feedcontributions-param-showsizediff": "Toon het verschil in grootte tussen revisies.",
+ "apihelp-feedcontributions-example-simple": "Toon bijdragen voor gebruiker <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-param-feedformat": "De indeling van de feed.",
+ "apihelp-feedrecentchanges-param-namespace": "Naamruimte om de resultaten tot te beperken.",
+ "apihelp-feedrecentchanges-param-invert": "Alle naamruimten behalve de geselecteerde.",
+ "apihelp-feedrecentchanges-param-days": "Aantal dagen om de resultaten tot te beperken.",
+ "apihelp-feedrecentchanges-param-limit": "Het maximale aantal weer te geven resultaten.",
+ "apihelp-feedrecentchanges-param-hideminor": "Kleine wijzigingen verbergen.",
+ "apihelp-feedrecentchanges-param-hidebots": "Wijzigingen gedaan door bots verbergen.",
+ "apihelp-feedrecentchanges-param-hideanons": "Wijzigingen gedaan door anonieme gebruikers verbergen.",
+ "apihelp-feedrecentchanges-param-hideliu": "Wijzigingen gedaan door geregistreerde gebruikers verbergen.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Wijzigingen gemarkeerd als gecontroleerd verbergen.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Wijzigingen door de huidige gebruiker verbergen.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Wijzigingen in categorielidmaatschap verbergen.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filteren op label.",
+ "apihelp-feedrecentchanges-example-simple": "Recente wijzigingen weergeven.",
+ "apihelp-feedrecentchanges-example-30days": "Wijzigingen van de afgelopen 30 dagen weergeven.",
+ "apihelp-feedwatchlist-param-feedformat": "De indeling van de feed.",
+ "apihelp-filerevert-summary": "Een oude versie van een bestand terugplaatsen.",
+ "apihelp-filerevert-param-filename": "Bestandsnaam, zonder het Bestand: voorvoegsel.",
+ "apihelp-filerevert-param-comment": "Opmerking voor het uploaden.",
+ "apihelp-filerevert-example-revert": "Zet <kbd>Wiki.png</kbd> terug naar de versie van <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Toon hulp voor de opgegeven modules.",
+ "apihelp-help-param-helpformat": "Indeling van de hulpuitvoer.",
+ "apihelp-help-example-main": "Hulp voor de hoofdmodule.",
+ "apihelp-help-example-submodules": "Hulp voor <kbd>action=query</kbd> en alle submodules.",
+ "apihelp-help-example-recursive": "Alle hulp op één pagina.",
+ "apihelp-help-example-help": "Hulp voor de hulpmodule zelf.",
+ "apihelp-imagerotate-summary": "Een of meerdere afbeeldingen draaien.",
+ "apihelp-imagerotate-param-rotation": "Aantal graden om de afbeelding met de klok mee te draaien.",
+ "apihelp-imagerotate-param-tags": "Labels voor de regel in het uploadlogboek.",
+ "apihelp-imagerotate-example-simple": "Roteer <kbd>File:Example.png</kbd> met <kbd>90</kbd> graden.",
+ "apihelp-imagerotate-example-generator": "Roteer alle afbeeldingen in <kbd>Category:Flip</kbd> met <kbd>180</kbd> graden.",
+ "apihelp-import-summary": "Importeer een pagina van een andere wiki, of van een XML-bestand.",
+ "apihelp-import-extended-description": "Merk op dat de HTTP POST moet worden uitgevoerd als bestandsupload (d.w.z. door middel van multipart/form-data) wanneer een bestand wordt verstuurd voor de <var>xml</var> parameter.",
+ "apihelp-import-param-summary": "Importeersamenvatting voor het logboek.",
+ "apihelp-import-param-xml": "Geüpload XML-bestand.",
+ "apihelp-import-param-interwikisource": "Voor interwiki-imports: wiki om van te importeren.",
+ "apihelp-import-param-namespace": "Naar deze naamruimte importeren. Kan niet in combinatie met <var>$1rootpage</var> gebruikt worden.",
+ "apihelp-import-param-rootpage": "Als subpagina van deze pagina importeren. Kan niet in combinatie met <var>$1namespace</var> gebruikt worden.",
+ "apihelp-import-example-import": "Importeer [[meta:Help:ParserFunctions]] in naamruimte 100 met de volledige geschiedenis.",
+ "apihelp-login-param-name": "Gebruikersnaam.",
+ "apihelp-login-param-password": "Wachtwoord.",
+ "apihelp-login-param-domain": "Domein (optioneel).",
+ "apihelp-login-example-login": "Aanmelden.",
+ "apihelp-logout-summary": "Afmelden en sessiegegevens wissen.",
+ "apihelp-logout-example-logout": "Meld de huidige gebruiker af.",
+ "apihelp-managetags-param-tag": "Aan te maken, te verwijderen, te activeren of te deactiveren label. Voor het aanmaken mag het label nog niet bestaan. Voor het verwijderen moet het label bestaan. Voor het activeren moet het label bestaan en mag het niet door een uitbreiding gebruikt worden. Voor het deactiveren moet het label gebruikt worden en handmatig gedefinieerd zijn.",
+ "apihelp-managetags-example-create": "Maak een label met de naam <kbd>spam</kbd> aan met als reden <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Verwijder het label <kbd>vandlaism</kbd> met als reden <kbd>Misspelt</kbd>",
+ "apihelp-mergehistory-summary": "Geschiedenissen van pagina's samenvoegen.",
+ "apihelp-mergehistory-param-reason": "Reden voor de samenvoeging van de geschiedenissen.",
+ "apihelp-mergehistory-example-merge": "Voeg de hele geschiedenis van <kbd>Oldpage</kbd> samen in <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Pagina hernoemen.",
+ "apihelp-move-param-to": "Nieuwe paginanaam.",
+ "apihelp-move-param-reason": "Reden voor de naamswijziging.",
+ "apihelp-move-param-movetalk": "Hernoem de overlegpagina, indien deze bestaat.",
+ "apihelp-move-param-noredirect": "Geen doorverwijzing achterlaten.",
+ "apihelp-move-param-watch": "Voeg de pagina en de doorverwijzing toe aan de volglijst van de huidige gebruiker.",
+ "apihelp-move-param-unwatch": "Verwijder de pagina en de doorverwijzing van de volglijst van de huidige gebruiker.",
+ "apihelp-move-param-watchlist": "De pagina onvoorwaardelijk toevoegen aan of verwijderen van de volglijst van de huidige gebruiker, gebruik voorkeuren of wijzig het volgen niet.",
+ "apihelp-move-param-ignorewarnings": "Eventuele waarschuwingen negeren.",
+ "apihelp-move-example-move": "Hernoem <kbd>Badtitle</kbd> naar <kbd>Goodtitle</kbd> zonder een doorverwijzing achter te laten.",
+ "apihelp-opensearch-summary": "In de wiki zoeken met behulp het OpenSearchprotocol.",
+ "apihelp-opensearch-param-search": "Zoektekst.",
+ "apihelp-opensearch-param-limit": "Het maximale aantal weer te geven resultaten.",
+ "apihelp-opensearch-param-namespace": "Te doorzoeken naamruimten.",
+ "apihelp-opensearch-param-suggest": "Niets doen als <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> onwaar is.",
+ "apihelp-opensearch-param-redirects": "Hoe om te gaan met doorverwijzingen:\n;return:Retourneer de doorverwijzing.\n;resolve:Retourneer de doelpagina. Retourneert mogelijk minder dan $1limit resultaten.\nOm historische redenen is \"return\" de standaardinstelling voor <code>$1format=json</code>, en \"resolve\" voor andere formaten.",
+ "apihelp-opensearch-param-format": "Het uitvoerformaat.",
+ "apihelp-opensearch-param-warningsaserror": "Als er waarschuwingen zijn met <kbd>format=json</kbd>, geef dan een API-fout terug in plaats van deze te negeren.",
+ "apihelp-opensearch-example-te": "Vind pagina's die beginnen met <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Voorkeuren van de huidige gebruiker wijzigen.",
+ "apihelp-options-extended-description": "Alleen opties die zijn geregistreerd in core of in een van de geïnstalleerde uitbreidingen, of opties met sleutels die beginnen met <code>userjs-</code> (bedoeld om door gebruikersscripts gebruikt te worden), kunnen worden ingesteld.",
+ "apihelp-options-param-reset": "Reset voorkeuren naar de standaard van de website.",
+ "apihelp-options-param-resetkinds": "Lijst van types van te resetten opties wanneer de optie <var>$1reset</var> is ingesteld.",
+ "apihelp-options-param-change": "Lijst van wijzigingen, opgemaakt als <kbd>naam=waarde</kbd> (bijv. <kbd>skin=vector</kbd>). Als er geen waarde wordt opgegeven (zelfs niet een isgelijkteken), bijvoorbeeld <kbd>optienaam|andereoptie|...</kbd>, dan wordt de optie ingesteld op de standaardwaarde. Als een opgegeven waarde een sluisteken bevat (<kbd>|</kbd>), gebruik dan het [[Special:ApiHelp/main#main/datatypes|alternatieve scheidingsteken tussen meerdere waardes]] voor een juiste werking.",
+ "apihelp-options-param-optionname": "De naam van de optie die moet worden ingesteld op de waarde gegeven door <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "De waarde voor de optie opgegeven door <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Reset alle voorkeuren.",
+ "apihelp-options-example-change": "Wijzig <kbd>skin</kbd> en <kbd>hideminor</kbd> voorkeuren.",
+ "apihelp-paraminfo-summary": "Verkrijg informatie over API-modules.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Geeft de HTML-versie van de categorieën.",
+ "apihelp-parse-example-page": "Een pagina verwerken.",
+ "apihelp-parse-example-text": "Wikitekst verwerken.",
+ "apihelp-parse-example-texttitle": "Wikitekst verwerken, waarbij de paginatitel opgeven is.",
+ "apihelp-parse-example-summary": "Een samenvatting verwerken.",
+ "apihelp-patrol-summary": "Een pagina of revisie als gecontroleerd markeren.",
+ "apihelp-patrol-example-rcid": "Een recente wijziging als gecontroleerd markeren.",
+ "apihelp-patrol-example-revid": "Een revisie als gecontroleerd markeren.",
+ "apihelp-protect-param-reason": "Reden voor instellen of opheffen van de beveiliging.",
+ "apihelp-protect-example-protect": "Een pagina beveiligen.",
+ "apihelp-purge-param-forcelinkupdate": "Werk de koppelingstabellen bij.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Werk de koppelingentabel bij, en werk de koppelingstabellen bij voor alle pagina's die deze pagina als sjabloon gebruiken.",
+ "apihelp-query+allcategories-param-dir": "Richting om in te sorteren.",
+ "apihelp-query+allcategories-param-limit": "Hoeveel categorieën te tonen.",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Voegt het aantal pagina's in de categorie toe.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Markeert categorieën die verborgen zijn met <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Alleen versies met dit label weergeven.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Geen revisies door deze gebruiker weergeven.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Alleen pagina's in deze naamruimte weergeven.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Voegt de titel van het bestand toe.",
+ "apihelp-query+allfileusages-param-limit": "Hoeveel items er in totaal moeten worden getoond.",
+ "apihelp-query+allimages-example-recent": "Toon een lijst van recentelijk geüploade bestanden, vergelijkbaar met [[Special:NewFiles]].",
+ "apihelp-query+alllinks-param-namespace": "De door te lopen naamruimte.",
+ "apihelp-query+alllinks-param-limit": "Hoeveel items er in totaal moeten worden getoond.",
+ "apihelp-query+allmessages-param-enableparser": "Stel in om de parser in te schakelen, zorgt voor het voorverwerken van de wikitekst van een bericht (vervangen van magische woorden, afhandelen van sjablonen, enz.).",
+ "apihelp-query+allmessages-param-lang": "Toon berichten in deze taal.",
+ "apihelp-query+allmessages-param-from": "Toon berichten vanaf dit bericht.",
+ "apihelp-query+allmessages-param-to": "Toon berichten tot aan dit bericht.",
+ "apihelp-query+allredirects-summary": "Toon alle doorverwijzingen naar een naamruimte.",
+ "apihelp-query+allrevisions-example-user": "Toon de laatste 50 bijdragen van gebruiker <kbd>Example</kbd>.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Vraag het MIME- en mediatype van het bestand op.",
+ "apihelp-query+mystashedfiles-param-limit": "Hoeveel bestanden te tonen.",
+ "apihelp-query+allusers-param-excludegroup": "Sluit gebruikers in de gegeven groepen uit.",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Voegt informatie over een actuele blokkade van de gebruiker toe.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Toont de groepen waar de gebruiker in zit. Dit gebruikt meer serverbronnen en retourneert mogelijk minder resultaten dan de opgegeven limiet.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Toont alle groepen waar de gebruiker automatisch in zit.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Toont de rechten die de gebruiker heeft.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Voegt het aantal bewerkingen van de gebruiker toe.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Voegt de registratiedatum van de gebruiker toe, indien beschikbaar (kan leeg zijn).",
+ "apihelp-query+allusers-param-witheditsonly": "Toon alleen gebruikers die bewerkingen hebben gemaakt.",
+ "apihelp-query+allusers-param-activeusers": "Toon alleen gebruikers die actief zijn geweest in de laatste {{PLURAL:$1|dag|$1 dagen}}.",
+ "apihelp-query+allusers-example-Y": "Toon gebruikers vanaf <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Haal informatie op over de huidige authentificatiestatus.",
+ "apihelp-query+backlinks-summary": "Vind alle pagina's die verwijzen naar de gegeven pagina.",
+ "apihelp-query+backlinks-param-title": "Te onderzoeken titel. Kan niet in combinatie met <var>$1pageid</var> gebruikt worden.",
+ "apihelp-query+backlinks-param-pageid": "Te onderzoeken pagina-ID. Kan niet in combinatie met <var>$1title</var> gebruikt worden.",
+ "apihelp-query+backlinks-param-namespace": "De door te lopen naamruimte.",
+ "apihelp-query+backlinks-example-simple": "Toon verwijzingen naar <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Toon alle geblokkeerde gebruikers en IP-adressen.",
+ "apihelp-query+blocks-param-limit": "Het maximale aantal te tonen blokkades.",
+ "apihelp-query+blocks-paramvalue-prop-id": "Voegt de blokkade-ID toe.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Voegt de gebruikersnaam van de geblokkeerde gebruiker toe.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Voegt de gebruikers-ID van de geblokkeerde gebruiker toe.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Labelt de blokkade met (automatische blokkade, alleen anoniem, enzovoort).",
+ "apihelp-query+blocks-example-simple": "Toon blokkades.",
+ "apihelp-query+blocks-example-users": "Toon blokkades van gebruikers <kbd>Alice</kbd> en <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Toon alle categorieën waar de pagina's in zitten.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Markeert categorieën die verborgen zijn met <code>_&#95;HIDDENCAT_&#95;</code>",
+ "apihelp-query+categories-param-show": "Welke soort categorieën te tonen.",
+ "apihelp-query+categories-param-limit": "Hoeveel categorieën te tonen.",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Voegt de pagina-ID toe.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Voegt de titel en de naamruimte-ID van de pagina toe.",
+ "apihelp-query+categorymembers-param-dir": "Richting om in te sorteren.",
+ "apihelp-query+deletedrevisions-param-tag": "Alleen revisies met dit label weergeven.",
+ "apihelp-query+deletedrevs-param-tag": "Alleen revisies met dit label weergeven.",
+ "apihelp-query+embeddedin-param-namespace": "De door te lopen naamruimte.",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "Pagina-ID van elke pagina.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Titel van elke pagina.",
+ "apihelp-query+imageusage-param-namespace": "De door te lopen naamruimte.",
+ "apihelp-query+imageusage-example-simple": "Toon pagina's die [[:File:Albert Einstein Head.jpg]] gebruiken.",
+ "apihelp-query+imageusage-example-generator": "Toon informatie over pagina's die [[:File:Albert Einstein Head.jpg]] gebruiken.",
+ "apihelp-query+iwbacklinks-param-prefix": "Voorvoegsel voor de interwiki.",
+ "apihelp-query+logevents-param-type": "Logboekregels alleen voor dit type filteren.",
+ "apihelp-query+logevents-param-tag": "Alleen logboekregels met dit label weergeven.",
+ "apihelp-query+logevents-example-simple": "Recente logboekregels weergeven.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Voegt het beveiligingsniveau toe.",
+ "apihelp-query+protectedtitles-example-simple": "Toon beveiligde titels.",
+ "apihelp-query+querypage-param-limit": "Aantal te tonen resultaten.",
+ "apihelp-query+querypage-example-ancientpages": "Toon resultaten van [[Special:Ancientpages]].",
+ "apihelp-query+random-param-namespace": "Toon alleen pagina's in deze naamruimten.",
+ "apihelp-query+random-param-limit": "Beperk hoeveel willekeurige pagina's worden getoond.",
+ "apihelp-query+random-example-simple": "Toon twee willekeurige pagina's uit de hoofdnaamruimte.",
+ "apihelp-query+random-example-generator": "Toon pagina-informatie over twee willekeurige pagina's uit de hoofdnaamruimte.",
+ "apihelp-query+recentchanges-param-user": "Toon alleen wijzigingen door deze gebruiker.",
+ "apihelp-query+recentchanges-param-excludeuser": "Toon geen wijzigingen door deze gebruiker.",
+ "apihelp-query+recentchanges-param-tag": "Toon alleen wijzigingen met dit label.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Voegt de bewerkingssamenvatting voor de bewerking toe.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Voegt logboekgegevens (logboek-ID, logboektype, enz.) aan logboekregels toe.",
+ "apihelp-query+recentchanges-example-simple": "Toon recente wijzigingen.",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "Pagina-ID van elke doorverwijzing.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Titel van elke doorverwijzing.",
+ "apihelp-query+redirects-param-namespace": "Toon alleen pagina's in deze naamruimten.",
+ "apihelp-query+redirects-param-limit": "Hoeveel doorverwijzingen te tonen.",
+ "apihelp-query+redirects-example-simple": "Een lijst van doorverwijzingen naar [[Main Page]] ophalen.",
+ "apihelp-query+redirects-example-generator": "Informatie over alle doorverwijzingen naar [[Main Page]] ophalen.",
+ "apihelp-query+revisions-param-tag": "Alleen revisies met dit label weergeven.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Tekst van de revisie.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Labels voor de versie.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Gebruik in plaats hiervan [[Special:ApiHelp/compare|action=compare]]. Een \"pre-save\"-transformatie uitvoeren op de tekst alvorens de verschillen te bepalen. Alleen geldig indien gebruikt met <var>$1difftotext</var>.",
+ "apihelp-query+search-summary": "Voer een zoekopdracht in de volledige tekst uit.",
+ "apihelp-query+search-param-limit": "Hoeveel pagina's te tonen.",
+ "apihelp-query+search-example-simple": "Zoeken naar <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lijst van geregistreerde naamruimte-aliassen.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lijst van aliassen voor speciale pagina's.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lijst van magische woorden en hun aliassen.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Site-statistieken.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Bibliotheken die op de wiki zijn geïnstalleerd.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Uitbreidingen die op de wiki zijn geïnstalleerd.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Lijst van bestandsextensies (bestandstypen) die geüpload mogen worden.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Informatie over wikirechten (licentie-informatie) indien beschikbaar.",
+ "apihelp-query+tags-summary": "Wijzigingslabels weergeven.",
+ "apihelp-query+tags-paramvalue-prop-name": "Voegt de naam van het label toe.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Voegt het systeembericht voor het label toe.",
+ "apihelp-query+tags-paramvalue-prop-description": "Voegt de beschrijving van het label toe.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Geeft aan of het label is gedefinieerd.",
+ "apihelp-query+tags-paramvalue-prop-active": "Of het label nog steeds wordt toegepast.",
+ "apihelp-query+tags-example-simple": "Toon beschikbare labels.",
+ "apihelp-query+templates-summary": "Retourneert alle pagina's die ingesloten zijn op de gegeven pagina's.",
+ "apihelp-query+templates-param-limit": "Hoeveel sjablonen te retourneren.",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "Pagina-ID van elke pagina.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Titel van elke pagina.",
+ "apihelp-query+usercontribs-summary": "Alle bewerkingen door een gebruiker opvragen.",
+ "apihelp-query+usercontribs-param-limit": "Het maximale aantal te tonen bijdragen.",
+ "apihelp-query+usercontribs-param-namespace": "Alleen bijdragen in deze naamruimten weergeven.",
+ "apihelp-query+usercontribs-param-tag": "Alleen revisies met dit label weergeven.",
+ "apihelp-query+usercontribs-example-ipprefix": "Bijdragen van alle IP-adressen met het voorvoegsel <kbd>192.0.2.</kbd> weergeven.",
+ "apihelp-query+userinfo-summary": "Informatie over de huidige gebruiker opvragen.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Voegt de echte naam van de gebruiker toe.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Voegt logboekgegevens toe waar van toepassing.",
+ "apihelp-query+watchlist-param-type": "Welke typen wijzigingen weer te geven:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Gewone paginabewerkingen.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Externe wijzigingen.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Nieuwe pagina's.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Logboekregels.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Wijzigingen in categorielidmaatschap.",
+ "apihelp-stashedit-param-text": "Pagina-inhoud.",
+ "apihelp-unblock-param-user": "Te deblokkeren gebruikersnaam, IP-adres of IP-range. Kan niet in combinatie met <var>$1id</var> of <var>$1userid</var> gebruikt worden.",
+ "apihelp-unblock-param-userid": "Te deblokkeren gebruikers-ID. Kan niet in combinatie met <var>$1id</var> of <var>$1user</var> gebruikt worden.",
+ "apihelp-json-param-formatversion": "Uitvoeropmaak:\n;1:Achterwaarts-compatibele opmaak (booleans in XML-stijl, <samp>*</samp>-sleutels voor contentnodes, enz.).\n;2:Experimentele moderne opmaak. Details kunnen wijzigen!\n;latest:Gebruik de meest recente opmaak (op het moment <kbd>2</kbd>), kan zonder waarschuwing wijzigen.",
+ "apihelp-php-param-formatversion": "Uitvoeropmaak:\n;1:Achterwaarts-compatibele opmaak (booleans in XML-stijl, <samp>*</samp>-sleutels voor contentnodes, enz.).\n;2:Experimentele moderne opmaak. Details kunnen wijzigen!\n;latest:Gebruik de meest recente opmaak (op het moment <kbd>2</kbd>), kan zonder waarschuwing wijzigen.",
+ "apihelp-rawfm-summary": "Gegevens, inclusief debugelementen, in JSON-formaat (nette opmaak in HTML) uitvoeren.",
+ "api-help-flag-readrights": "Voor deze module zijn leesrechten nodig.",
+ "api-help-flag-writerights": "Voor deze module zijn schrijfrechten nodig.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
+ "api-help-param-deprecated": "Verouderd.",
+ "api-help-datatypes-header": "Gegevenstypen",
+ "api-help-param-default": "Standaard: $1",
+ "api-help-examples": "{{PLURAL:$1|Voorbeeld|Voorbeelden}}:",
+ "apierror-autoblocked": "Uw IP-adres is automatisch geblokkeerd, omdat het gebruikt werd door een geblokkeerde gebruiker.",
+ "apierror-badmodule-nosubmodules": "De module <kbd>$1</kbd> heeft geen submodules.",
+ "apierror-blockedfrommail": "Het versturen van e-mail is voor u geblokkeerd.",
+ "apierror-blocked": "Het bewerken is voor u geblokkeerd.",
+ "apierror-filedoesnotexist": "Bestand bestaat niet.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> mag niet minder zijn dan $2 (ingesteld op $3).",
+ "apierror-invalidcategory": "De opgegeven categorienaam is niet geldig.",
+ "apierror-invaliduser": "Ongeldige gebruikersnaam \"$1\".",
+ "apierror-maxlag-generic": "Wachten op een databaseserver: $1 {{PLURAL:$1|seconde|seconden}} vertraging.",
+ "apierror-maxlag": "Wachten op $2: $1 {{PLURAL:$1|seconde|seconden}} vertraging.",
+ "apierror-missingtitle": "De opgegeven pagina bestaat niet.",
+ "apierror-missingtitle-byname": "De pagina $1 bestaat niet.",
+ "apierror-mustbeloggedin-generic": "U moet ingelogd zijn.",
+ "apierror-nosuchuserid": "Er is geen gebruiker met ID $1.",
+ "apierror-permissiondenied": "U hebt geen toestemming om $1.",
+ "apierror-permissiondenied-generic": "Toegang geweigerd.",
+ "apierror-readonly": "De wiki is momenteel in alleen-lezen modus.",
+ "apierror-systemblocked": "U bent automatisch geblokkeerd door MediaWiki.",
+ "apierror-timeout": "De server heeft niet binnen de verwachte tijd geantwoord.",
+ "apierror-unknownerror-nocode": "Onbekende fout.",
+ "apierror-unknownerror": "Onbekende fout: \"$1\".",
+ "apierror-unrecognizedparams": "Niet-herkende {{PLURAL:$2|parameter|parameters}}: $1.",
+ "apiwarn-invalidcategory": "\"$1\" is geen categorie.",
+ "apiwarn-invalidtitle": "\"$1\" is geen geldige titel.",
+ "apiwarn-notfile": "\"$1\" is geen bestand.",
+ "apiwarn-validationfailed-badpref": "geen geldige voorkeur.",
+ "api-feed-error-title": "Fout ($1)",
+ "api-usage-docref": "Zie $1 voor API-gebruik.",
+ "api-credits-header": "Vermeldingen",
+ "api-credits": "API-ontwikkelaars:\n* Yuri Astrakhan (oorspronkelijke ontwikkelaar, hoofdontwikkelaar september 2006 – september 2007)\n* Roan Kattouw (hoofdontwikkelaar september 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (hoofdontwikkelaar 2013–heden)\n\nStuur uw opmerkingen, suggesties en vragen naar mediawiki-api@lists.wikimedia.org\nof maak een bugrapport aan op https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/nso.json b/www/wiki/includes/api/i18n/nso.json
new file mode 100644
index 00000000..42b30bb7
--- /dev/null
+++ b/www/wiki/includes/api/i18n/nso.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mohau"
+ ]
+ },
+ "apihelp-createaccount-param-name": "Leina la mošomši.",
+ "apihelp-login-example-login": "Tsena."
+}
diff --git a/www/wiki/includes/api/i18n/oc.json b/www/wiki/includes/api/i18n/oc.json
new file mode 100644
index 00000000..514646f5
--- /dev/null
+++ b/www/wiki/includes/api/i18n/oc.json
@@ -0,0 +1,135 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31",
+ "Macofe",
+ "Nicolas Eynaud"
+ ]
+ },
+ "apihelp-main-param-action": "Quina accion cal efectuar.",
+ "apihelp-main-param-format": "Lo format de sortida.",
+ "apihelp-block-summary": "Blocar un utilizaire.",
+ "apihelp-block-param-reason": "Motiu del blocatge.",
+ "apihelp-block-param-nocreate": "Empachar la creacion de compte.",
+ "apihelp-checktoken-param-token": "Geton de testar.",
+ "apihelp-compare-param-fromtitle": "Primièr títol de comparar.",
+ "apihelp-compare-param-fromid": "ID de la primièra pagina de comparar.",
+ "apihelp-compare-param-fromrev": "Primièra revision de comparar.",
+ "apihelp-compare-param-totitle": "Segond títol de comparar.",
+ "apihelp-compare-param-toid": "ID de la segonda pagina de comparar.",
+ "apihelp-compare-param-torev": "Segonda revision de comparar.",
+ "apihelp-compare-example-1": "Crear un diff entre lei revisions 1 e 2",
+ "apihelp-createaccount-summary": "Creatz un novèl compte d'utilizaire.",
+ "apihelp-createaccount-param-name": "Nom d'utilizaire.",
+ "apihelp-createaccount-param-password": "Senhal (ignorat se <var>$1mailpassword</var> es definit).",
+ "apihelp-createaccount-param-realname": "Nom vertadièr de l’utilizaire (facultatiu).",
+ "apihelp-delete-summary": "Suprimir una pagina.",
+ "apihelp-delete-example-simple": "Suprimir la <kbd>Main Page</kbd>.",
+ "apihelp-disabled-summary": "Aqueste modul es estat desactivat.",
+ "apihelp-edit-summary": "Crear e modificar las paginas.",
+ "apihelp-edit-param-text": "Contengut de la pagina.",
+ "apihelp-edit-param-minor": "Modificacion menora.",
+ "apihelp-edit-param-notminor": "Modificacion pas menora.",
+ "apihelp-edit-param-bot": "Marcar aquesta modificacion coma efectuada per un robòt.",
+ "apihelp-edit-example-edit": "Modificar una pagina",
+ "apihelp-edit-example-prepend": "Prefixar una pagina per <kbd>_&#95;NOTOC_&#95;</kbd>",
+ "apihelp-emailuser-summary": "Mandar un corrièr electronic un l’utilizaire.",
+ "apihelp-emailuser-param-subject": "Entèsta del subjècte.",
+ "apihelp-emailuser-param-text": "Còs del corrièr electronic.",
+ "apihelp-emailuser-param-ccme": "Me mandar una còpia d'aqueste corrièr electronic.",
+ "apihelp-expandtemplates-param-title": "Títol de la pagina.",
+ "apihelp-expandtemplates-param-text": "Wikitèxte de convertir.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Lo wikitèxte desvolopat.",
+ "apihelp-feedcontributions-summary": "Renvia lo fial de las contribucions d’un utilizaire.",
+ "apihelp-feedcontributions-param-feedformat": "Lo format del flux.",
+ "apihelp-feedcontributions-param-year": "A partir de l’annada (e mai recent) :",
+ "apihelp-feedcontributions-param-month": "A partir del mes (e mai recent) :",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrar las contribucions qu'an aquestas balisas.",
+ "apihelp-feedcontributions-param-deletedonly": "Afichar solament las contribucions suprimidas.",
+ "apihelp-feedcontributions-param-hideminor": "Amagar los cambiaments mendres.",
+ "apihelp-feedcontributions-param-showsizediff": "Afichar la diferéncia de talha entre las revisions.",
+ "apihelp-feedrecentchanges-param-feedformat": "Lo format del flux.",
+ "apihelp-feedrecentchanges-param-hideminor": "Amagar las modificacions menoras.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrar per balisa.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar lei darriers cambiaments.",
+ "apihelp-filerevert-param-comment": "Telecargar lo comentari.",
+ "apihelp-filerevert-param-archivename": "Nom d’archiu de la revision de restablir.",
+ "apihelp-import-param-summary": "Resumit de l’importacion de l’entrada de jornal.",
+ "apihelp-import-param-xml": "Fichièr XML telecargat.",
+ "apihelp-login-param-name": "Nom d'utilizaire.",
+ "apihelp-login-param-password": "Senhal.",
+ "apihelp-login-param-domain": "Domeni (facultatiu).",
+ "apihelp-login-example-login": "Se connectar.",
+ "apihelp-managetags-summary": "Efectuar de prètzfaits de gestion relatius a la modificacion de las balisas.",
+ "apihelp-mergehistory-summary": "Fusionar leis istorics de pagina",
+ "apihelp-move-summary": "Desplaçar una pagina.",
+ "apihelp-opensearch-param-search": "Cadena de recèrca.",
+ "apihelp-parse-example-page": "Analisar una pagina.",
+ "apihelp-parse-example-text": "Analisar lo wikitèxte.",
+ "apihelp-parse-example-summary": "Analisar un resumit.",
+ "apihelp-patrol-summary": "Patrolhar una pagina o una revision.",
+ "apihelp-protect-example-protect": "Protegir una pagina",
+ "apihelp-query-param-list": "Quinas listas obténer.",
+ "apihelp-query-param-meta": "Quinas metadonadas obténer.",
+ "apihelp-query+allcategories-summary": "Enumerar totas las categorias.",
+ "apihelp-query+alldeletedrevisions-param-from": "Aviar la lista a aqueste títol.",
+ "apihelp-query+allimages-param-sort": "Proprietat per la quala cal triar.",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Ajustatz lo títol de la redireccion.",
+ "apihelp-query+blocks-example-simple": "Listar los blocatges",
+ "apihelp-query+blocks-example-users": "Listar los blocatges dels utilizaires <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
+ "apihelp-query+imageinfo-param-urlheight": "Similar a $1urlwidth.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Tèxte de la revision.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Balisas de la revision.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Cambiaments extèrnes",
+ "apihelp-query+watchlist-paramvalue-type-new": "Creacions de pagina",
+ "apihelp-resetpassword-summary": "Mandar un corrier electronic de reïnicializacion de son senhau a l'utilizaire.",
+ "apihelp-stashedit-param-text": "Contengut de la pagina",
+ "apihelp-tag-param-reason": "Motiu de la modificacion.",
+ "apihelp-unblock-summary": "Desblocar un utilizaire.",
+ "apihelp-unblock-param-reason": "Motiu del desblocatge.",
+ "apihelp-unblock-example-id": "Levar lo blocatge d’ID #<kbd>105</kbd>.",
+ "apihelp-undelete-param-reason": "Motiu de restauracion.",
+ "apihelp-userrights-param-user": "Nom d'utilizaire.",
+ "apihelp-userrights-param-userid": "ID de l'utilizaire.",
+ "apihelp-validatepassword-param-password": "Senhau de validar.",
+ "api-help-main-header": "Modul principal",
+ "api-help-flag-deprecated": "Lo module es desaprovat.",
+ "api-help-source": "Font : $1",
+ "api-help-source-unknown": "Font : <span class=\"apihelp-unknown\">desconeguda</span>",
+ "api-help-license": "Licéncia : [[$1|$2]]",
+ "api-help-license-noname": "Licéncia : [[$1|Veire lo ligam]]",
+ "api-help-license-unknown": "Licéncia : <span class=\"apihelp-unknown\">desconeguda</span>",
+ "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
+ "api-help-param-deprecated": "Obsolèt.",
+ "api-help-param-required": "Aqueste paramètre es obligatòri.",
+ "api-help-datatypes-header": "Tipe de donadas",
+ "api-help-param-default": "Per defaut : $1",
+ "apierror-badquery": "Requista invalida.",
+ "apierror-cannotviewtitle": "Siatz autorizat a veire $1.",
+ "apierror-cantblock-email": "Sus aqueu wiki, avètz pas lei drechs necessaris per empedir leis utilizats de mandar de corriers electronics.",
+ "apierror-cantblock": "Avètz pas lei drechs necessaris per blocar d'utilizaires.",
+ "apierror-canthide": "Avètz pas lei drechs necessaris per escondre lo nom d'un utilizaire dins lo jornau dei blocatges.",
+ "apierror-cantimport-upload": "Avètz pas lei drechs necessaris per importar de paginas telecargadas.",
+ "apierror-cantimport": "Avètz pas lei drechs necesaris per importar de paginas.",
+ "apierror-copyuploadbadurl": "Telecargament pas autorizat a partir d'aquel URL.",
+ "apierror-create-titleexists": "Lei títols existents pòdon pas èsser protegits amb <kbd>create</kbd>.",
+ "apierror-emptynewsection": "La creacion de seccions vuejas novèlas es pas possibla.",
+ "apierror-filedoesnotexist": "Lo fichier existís pas.",
+ "apierror-noedit": "Avètz pas lei drechs necessaris per editar de paginas.",
+ "apierror-noimageredirect-anon": "Leis utilizaires anonims pòdon pas crear de redireccions d'imatge.",
+ "apierror-noimageredirect": "Avètz pas lei drechs necessaris per crear de redireccions d'imatge.",
+ "apierror-nosuchsection": "I a ges seccion $1",
+ "apierror-nosuchsection-what": "I a pas de seccion $1 dins $2.",
+ "apierror-permissiondenied-generic": "Autorizacion refusada.",
+ "apierror-unknownerror-nocode": "Error desconeguda.",
+ "apierror-unknownerror": "Error desconeguda : $1",
+ "apierror-unknownformat": "Format $1 non reconegut",
+ "apierror-unrecognizedvalue": "Valor pas reconeguda per lo paramètre <var>$1</var>: $2.",
+ "apiwarn-invalidcategory": "\"$1\" es pas una categoria.",
+ "apiwarn-invalidtitle": "\"$1\" es pas un títol valide.",
+ "apiwarn-notfile": "$1 es pas un fichier.",
+ "apiwarn-tokennotallowed": "L'accion $1 es pas autorizada per l'utilizaire actuau.",
+ "apiwarn-validationfailed-badpref": "Pas una preferéncia valida.",
+ "api-feed-error-title": "Error ($1)",
+ "api-credits-header": "Mercejaments"
+}
diff --git a/www/wiki/includes/api/i18n/olo.json b/www/wiki/includes/api/i18n/olo.json
new file mode 100644
index 00000000..47c36ddb
--- /dev/null
+++ b/www/wiki/includes/api/i18n/olo.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mashoi7",
+ "Ilja.mos"
+ ]
+ },
+ "apihelp-createaccount-param-name": "Käyttäitunnus.",
+ "apihelp-delete-summary": "Ota sivu iäre.",
+ "apihelp-login-param-name": "Käyttäitunnus.",
+ "apihelp-login-param-password": "Salasana.",
+ "apihelp-login-example-login": "Kirjuttai."
+}
diff --git a/www/wiki/includes/api/i18n/or.json b/www/wiki/includes/api/i18n/or.json
new file mode 100644
index 00000000..b008f02d
--- /dev/null
+++ b/www/wiki/includes/api/i18n/or.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "ଶିତିକଣ୍ଠ ଦାଶ"
+ ]
+ },
+ "apihelp-main-param-action": "କେଉଁ କାମ କରାଯିବ ।",
+ "apihelp-main-param-format": "ଆଉଟପୁଟ୍‌ର ଫର୍ମାଟ ।",
+ "apihelp-block-summary": "ଜଣେ ବ୍ୟବହାରକାରୀଙ୍କୁ ବ୍ଲକ କରନ୍ତୁ ।",
+ "apihelp-block-param-reason": "ବ୍ଲକ କରିବାର କାରଣ ।",
+ "apihelp-block-param-nocreate": "ଆକାଉଣ୍ଟ ତିଆରି ହେବାକୁ ପ୍ରତିରୋଧ କରନ୍ତୁ ।",
+ "apihelp-createaccount-param-name": "ବ୍ୟବହାରକାରୀଙ୍କ ନାମ",
+ "apihelp-delete-summary": "ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ"
+}
diff --git a/www/wiki/includes/api/i18n/pa.json b/www/wiki/includes/api/i18n/pa.json
new file mode 100644
index 00000000..96c86941
--- /dev/null
+++ b/www/wiki/includes/api/i18n/pa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia"
+ ]
+ },
+ "apihelp-help-example-recursive": "ਇੱਕੋ ਸਫ਼ੇ 'ਤੇ ਸਾਰੀ ਮਦਦ"
+}
diff --git a/www/wiki/includes/api/i18n/pam.json b/www/wiki/includes/api/i18n/pam.json
new file mode 100644
index 00000000..c02fe057
--- /dev/null
+++ b/www/wiki/includes/api/i18n/pam.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leeheonjin",
+ "Macofe"
+ ]
+ },
+ "apihelp-delete-example-simple": "Buran ya ing <kbd>Main Page</kbd>.",
+ "apihelp-edit-example-edit": "Alilan ya ing bulung.",
+ "apihelp-feedrecentchanges-example-simple": "Pakit deng bayung mengayalili.",
+ "apihelp-help-example-main": "Saup para king pun modyul.",
+ "apihelp-help-example-recursive": "Deng eganaganang saup king metung a bulung.",
+ "apihelp-login-example-login": "Magpatala (login)",
+ "apihelp-patrol-example-rcid": "Magbante king bayung mengayalili.",
+ "apihelp-patrol-example-revid": "Banten ing meyalili.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "E malyaring gamitan a yating <var>$3user</var>.",
+ "apihelp-query+allpages-example-B": "Ipakit ing talaan da reng bulung a mangumpisa king titik <kbd>B</kbd>.",
+ "apihelp-query+categoryinfo-example-simple": "Kumuwa ning impormasyun tungkul king <kbd>Kategorya:Foo</kbd> at <kbd>Kategorya:Bar</kbd>.",
+ "apihelp-query+deletedrevs-example-mode2": "Ilista la reng 50 binurang kontribusyun nang <kbd>Bob</kbd> (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Ilista mu la reng minunang 50 meburang bulung king {{ns:talk}} lagyu-espasyu (mode 3)",
+ "apihelp-query+duplicatefiles-example-generated": "Mayintun para kareng duplika da reng egana-ganang simpan (file).",
+ "apihelp-query+extlinks-example-simple": "Kumuwa ning lista da reng suglung paluwal king <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-example-simple": "Pakit la reng bulung a makasuglung king <kbd>http://www.mediawiki.org</kbd>.",
+ "apihelp-query+imageusage-example-simple": "Ipakit la reng bulung a gagamit ning [[:Simpan:Albert Einstein Head.jpg]].",
+ "apihelp-query+langbacklinks-example-simple": "Kunan deng bulung a maka-suglung king [[:fr:Test]].",
+ "apihelp-query+protectedtitles-example-generator": "Pantunan deng suglung king maka-protektang titulu king pun lagyu-espasyu.",
+ "apihelp-query+recentchanges-example-simple": "Talaan da reng bayung mengayalili.",
+ "apihelp-query+search-example-text": "Pantunan mo la reng tekstu para king <kbd>kabaldugan</kbd>",
+ "apihelp-query+siteinfo-example-simple": "Kung ing impormasyun ning sityu.",
+ "apihelp-upload-example-url": "Maglulan (upload) ibat king URL.",
+ "apihelp-watch-example-unwatch": "E banten ing bulung <kbd>Pun Bulung</kbd>"
+}
diff --git a/www/wiki/includes/api/i18n/pl.json b/www/wiki/includes/api/i18n/pl.json
new file mode 100644
index 00000000..8591ebae
--- /dev/null
+++ b/www/wiki/includes/api/i18n/pl.json
@@ -0,0 +1,725 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps",
+ "Py64",
+ "Pan Cube",
+ "Alan ffm",
+ "Devwebtel",
+ "Macofe",
+ "Pio387",
+ "Peter Bowman",
+ "Darellur",
+ "The Polish",
+ "Matma Rex",
+ "Sethakill",
+ "Woytecr",
+ "InternerowyGołąb"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentacja]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista dyskusyjna]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Ogłoszenia dotyczące API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Błędy i propozycje]\n</div>\n<strong>Stan:</strong> Wszystkie funkcje opisane na tej stronie powinny działać, ale API nadal jest aktywnie rozwijane i mogą się zmienić w dowolnym czasie. Subskrybuj [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ listę dyskusyjną mediawiki-api-announce], aby móc na bieżąco dowiadywać się o aktualizacjach.\n\n<strong>Błędne żądania:</strong> Gdy zostanie wysłane błędne żądanie do API, zostanie wysłany w odpowiedzi nagłówek HTTP z kluczem \"MediaWiki-API-Error\" i zarówno jego wartość jak i wartość kodu błędu wysłanego w odpowiedzi będą miały taką samą wartość. Aby uzyskać więcej informacji, zobacz [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Błędy i ostrzeżenia]].\n\n<strong>Testowanie:</strong> Aby łatwo testować żądania API, zobacz [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Wybierz akcję do wykonania.",
+ "apihelp-main-param-format": "Format danych wyjściowych.",
+ "apihelp-main-param-maxlag": "Maksymalne opóźnienie mogą być używane kiedy MediaWiki jest zainstalowana w klastrze zreplikowanej bazy danych. By zapisać działania powodujące większe opóźnienie replikacji, ten parametr może wymusić czekanie u klienta, dopóki opóźnienie replikacji jest mniejsze niż określona wartość. W przypadku nadmiernego opóźnienia, kod błędu <samp>maxlag</samp> jest zwracany z wiadomością jak <samp>Oczekiwanie na $host: $lag sekund opóźnienia</samp>.<br />Zobacz [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Podręcznik:Parametr Maxlag]] by uzyskać więcej informacji.",
+ "apihelp-main-param-smaxage": "Ustaw nagłówek HTTP kontrolujący pamięć podręczną <code>s-maxage</code> na taką ilość sekund. Błędy nie będą nigdy przechowywane w pamięci podręcznej.",
+ "apihelp-main-param-maxage": "Ustaw nagłówek HTTP kontrolujący pamięć podręczną <code>maxage</code> na taką ilość sekund. Błędy nie będą nigdy przechowywane w pamięci podręcznej.",
+ "apihelp-main-param-assert": "Zweryfikuj, czy użytkownik jest zalogowany, jeżeli wybrano <kbd>user</kbd>, lub czy ma uprawnienia bota, jeżeli wybrano <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Sprawdź, czy bieżący użytkownik posiada nazwę.",
+ "apihelp-main-param-requestid": "Każda wartość tu podana będzie dołączana do odpowiedzi. Może być użyta do rozróżniania żądań.",
+ "apihelp-main-param-servedby": "Dołącz do odpowiedzi nazwę hosta, który obsłużył żądanie.",
+ "apihelp-main-param-curtimestamp": "Dołącz obecny znacznik czasu do wyniku.",
+ "apihelp-main-param-uselang": "Język, w którym mają być pokazywane tłumaczenia wiadomości. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> z <kbd>siprop=languages</kbd> zwróci listę języków lub ustaw jako <kbd>user</kbd>, aby pobrać z preferencji zalogowanego użytkownika lub <kbd>content</kbd>, aby wykorzystać język zawartości tej wiki.",
+ "apihelp-block-summary": "Zablokuj użytkownika.",
+ "apihelp-block-param-user": "Nazwa użytkownika, adres IP albo zakres adresów IP, które chcesz zablokować. Nie można używać razem z <var>$1userid</var>.",
+ "apihelp-block-param-expiry": "Czas trwania. Może być względny (np. <kbd>5 months</kbd> or <kbd>2 weeks</kbd>) lub konkretny (np. <kbd>2014-09-18T12:34:56Z</kbd>). Jeśli jest ustawiony na <kbd>infinite</kbd>, <kbd>indefinite</kbd>, lub <kbd>never</kbd>, blokada nigdy nie wygaśnie.",
+ "apihelp-block-param-reason": "Powód blokady.",
+ "apihelp-block-param-anononly": "Blokuj tylko anonimowych użytkowników (blokuje anonimowe edycje z tego adresu IP).",
+ "apihelp-block-param-nocreate": "Zapobiegnij utworzeniu konta.",
+ "apihelp-block-param-autoblock": "Zablokuj ostatni adres IP tego użytkownika i automatycznie wszystkie kolejne, z których będzie się logował.",
+ "apihelp-block-param-noemail": "Uniemożliwia użytkownikowi wysyłanie wiadomości e-mail za pośrednictwem interfejsu wiki. (Wymagane uprawnienie <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Ukryj nazwę użytkownika z rejestru blokad. (Wymagane uprawnienie <code>hideuser</code>)",
+ "apihelp-block-param-allowusertalk": "Pozwala użytkownikowi edytować własną stronę dyskusji (zależy od <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Jeżeli ten użytkownik jest już zablokowany, nadpisz blokadę.",
+ "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika lub IP oraz ich strony dyskusji.",
+ "apihelp-block-param-tags": "Zmieniaj tagi by potwierdzić wejście do bloku logów.",
+ "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni z powodem <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Zablokuj użytkownika <kbd>Vandal</kbd> na zawsze z powodem <kbd>Vandalism</kbd> i uniemożliw utworzenie nowego konta oraz wysyłanie emaili.",
+ "apihelp-changeauthenticationdata-summary": "Zmień dane logowania bieżącego użytkownika.",
+ "apihelp-changeauthenticationdata-example-password": "Spróbuj zmienić hasło bieżącego użytkownika na <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Sprawdź poprawność tokenu z <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Typ tokenu do przetestowania.",
+ "apihelp-checktoken-param-token": "Token do przetestowania.",
+ "apihelp-checktoken-param-maxtokenage": "Maksymalny wiek tokenu, w sekundach.",
+ "apihelp-checktoken-example-simple": "Sprawdź poprawność tokenu <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Czyści flagę <code>hasmsg</code> dla bieżącego użytkownika.",
+ "apihelp-clearhasmsg-example-1": "Wyczyść flagę <code>hasmsg</code> dla bieżącego użytkownika.",
+ "apihelp-compare-summary": "Zauważ różnicę między dwoma stronami",
+ "apihelp-compare-param-fromtitle": "Pierwszy tytuł do porównania.",
+ "apihelp-compare-param-fromid": "ID pierwszej strony do porównania.",
+ "apihelp-compare-param-fromrev": "Pierwsza wersja do porównania.",
+ "apihelp-compare-param-frompst": "Dokonaj zapisu wersji roboczej transformacji przeprowadzonej na <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Drugi tytuł do porównania.",
+ "apihelp-compare-param-toid": "Numer drugiej strony do porównania.",
+ "apihelp-compare-param-torev": "Druga wersja do porównania.",
+ "apihelp-createaccount-summary": "Utwórz nowe konto.",
+ "apihelp-createaccount-param-name": "Nazwa użytkownika",
+ "apihelp-createaccount-param-password": "Hasło (ignorowane jeśli ustawiono <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Domena uwierzytelniania zewnętrznego (opcjonalnie).",
+ "apihelp-createaccount-param-token": "Token tworzenia konta uzyskany w pierwszym zapytaniu.",
+ "apihelp-createaccount-param-email": "Adres email użytkownika (opcjonalne).",
+ "apihelp-createaccount-param-realname": "Prawdziwe imię i nazwisko użytkownika (opcjonalne).",
+ "apihelp-createaccount-param-reason": "Opcjonalny powód tworzenia konta, który zostanie umieszczony w rejestrze.",
+ "apihelp-createaccount-example-pass": "Utwórz użytkownika <kbd>testuser</kbd> z hasłem <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Utwórz użytkownika <kbd>testmailuser</kbd> i wyślij losowo wygenerowane hasło na emaila.",
+ "apihelp-delete-summary": "Usuń stronę.",
+ "apihelp-delete-param-reason": "Powód usuwania. Jeśli pozostawisz to pole puste, zostanie użyty powód wygenerowany automatycznie.",
+ "apihelp-delete-param-watch": "Dodaj stronę do obecnej listy obserwowanych.",
+ "apihelp-delete-param-unwatch": "Usuń stronę z obecnej listy obserwowanych.",
+ "apihelp-delete-example-simple": "Usuń <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Usuń <kbd>Main Page</kbd> z powodem <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Ten moduł został wyłączony.",
+ "apihelp-edit-summary": "Twórz i edytuj strony.",
+ "apihelp-edit-param-title": "Tytuł strony do edycji. Nie może być użyty równocześnie z <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID strony do edycji. Nie może być używany równocześnie z <var>$1title</var>.",
+ "apihelp-edit-param-section": "Numer sekcji. <kbd>0</kbd> dla górnej sekcji, <kbd>new</kbd> dla nowej sekcji.",
+ "apihelp-edit-param-sectiontitle": "Tytuł nowej sekcji.",
+ "apihelp-edit-param-text": "Zawartość strony.",
+ "apihelp-edit-param-summary": "Opis edycji. Także tytuł sekcji gdy użyto $1section=new, a nie ustawiono $1sectiontitle.",
+ "apihelp-edit-param-tags": "Znaczniki zmian do zastosowania w tej edycji.",
+ "apihelp-edit-param-minor": "Drobna zmiana.",
+ "apihelp-edit-param-notminor": "Nie oznaczaj tej zmiany jako drobną.",
+ "apihelp-edit-param-bot": "Oznacz tę edycję jako edycję bota.",
+ "apihelp-edit-param-basetimestamp": "Czas wersji, która jest edytowana. Służy do wykrywania konfliktów edycji. Można pobrać poprzez [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Czas rozpoczęcia procesu edycji. Służy do wykrywania konfliktów edycji. Odpowiednia wartość może być pobrana za pomocą <var>[[Special:ApiHelp/main|curtimestamp]]</var> podczas rozpoczynania procesu edycji (np. podczas ładowania zawartości strony do edycji).",
+ "apihelp-edit-param-recreate": "Ignoruj błędy o usunięciu strony w międzyczasie.",
+ "apihelp-edit-param-createonly": "Nie edytuj strony, jeśli już istnieje.",
+ "apihelp-edit-param-nocreate": "Zwróć błąd, jeśli strona nie istnieje.",
+ "apihelp-edit-param-watch": "Dodaj stronę do listy obserwowanych bieżącego użytkownika.",
+ "apihelp-edit-param-unwatch": "Usuń stronę z listy obserwowanych bieżącego użytkownika.",
+ "apihelp-edit-param-md5": "Hash MD5 parametru $1text lub złączonych parametrów $1prependtext i $1appendtext. Jeżeli ustawiony, edycja nie zostanie zapisana dopóki hash nie będzie się zgadzać.",
+ "apihelp-edit-param-prependtext": "Tekst do dodania na początku strony. Zastępuje $1text.",
+ "apihelp-edit-param-appendtext": "Tekst do dodania na końcu strony. Zastępuje $1text.\n\nUżyj $1section=new zamiast tego parametru aby dodać nową sekcję.",
+ "apihelp-edit-param-undo": "Wycofaj tę wersję. Zastępuje $1text, $1prependtext i $1appendtext.",
+ "apihelp-edit-param-undoafter": "Wycofaj wszystkie wersje od $1undo do tej. Jeżeli nie ustawiono, wycofaj tylko jedną wersję.",
+ "apihelp-edit-param-redirect": "Automatycznie rozwiązuj przekierowania.",
+ "apihelp-edit-param-contentformat": "Format serializacji zawartości wprowadzonego tekstu.",
+ "apihelp-edit-param-contentmodel": "Model zawartości nowego tekstu.",
+ "apihelp-edit-param-token": "Token powinien być wysyłany jako ostatni parametr albo przynajmniej po parametrze $1text.",
+ "apihelp-edit-example-edit": "Edytuj stronę.",
+ "apihelp-edit-example-prepend": "Dopisz <kbd>_&#95;NOTOC_&#95;</kbd> na początku strony.",
+ "apihelp-emailuser-summary": "Wyślij e‐mail do użytkownika.",
+ "apihelp-emailuser-param-target": "Użytkownik, do którego wysłać e-mail.",
+ "apihelp-emailuser-param-subject": "Nagłówek tematu.",
+ "apihelp-emailuser-param-text": "Treść emaila.",
+ "apihelp-emailuser-param-ccme": "Wyślij kopię wiadomości do mnie.",
+ "apihelp-emailuser-example-email": "Wyślij e-mail do użytkownika <kbd>WikiSysop</kbd> z tekstem <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Rozwija wszystkie szablony zawarte w wikitekście.",
+ "apihelp-expandtemplates-param-title": "Tytuł strony.",
+ "apihelp-expandtemplates-param-text": "Wikitext do przekonwertowania.",
+ "apihelp-expandtemplates-param-revid": "ID wersji, dla <code><nowiki>{{REVISIONID}}</nowiki></code> i podobnych zmiennych.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Rozwinięty wikitekst.",
+ "apihelp-feedcontributions-summary": "Zwraca kanał wkładu użytkownika.",
+ "apihelp-feedcontributions-param-feedformat": "Format danych wyjściowych.",
+ "apihelp-feedcontributions-param-user": "Jakich użytkowników pobrać wkład.",
+ "apihelp-feedcontributions-param-namespace": "Z jakiej przestrzeni nazw wyświetlać wkład użytkownika.",
+ "apihelp-feedcontributions-param-year": "Od roku (i wcześniej).",
+ "apihelp-feedcontributions-param-month": "Od miesiąca (i wcześniej).",
+ "apihelp-feedcontributions-param-tagfilter": "Pokaż tylko wkład z tymi znacznikami.",
+ "apihelp-feedcontributions-param-deletedonly": "Pokazuj tylko usunięty wkład.",
+ "apihelp-feedcontributions-param-toponly": "Pokazuj tylko edycje będące ostatnią zmianą strony.",
+ "apihelp-feedcontributions-param-newonly": "Pokazuj tylko edycje tworzące stronę.",
+ "apihelp-feedcontributions-param-hideminor": "Ukryj drobne zmiany.",
+ "apihelp-feedcontributions-param-showsizediff": "Pokaż różnicę rozmiaru między wersjami.",
+ "apihelp-feedcontributions-example-simple": "Zwróć liste edycji dokonanych przez użytkownika <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Zwraca kanał ostatnich zmian.",
+ "apihelp-feedrecentchanges-param-feedformat": "Format danych wyjściowych.",
+ "apihelp-feedrecentchanges-param-namespace": "Przestrzeń nazw, do której ograniczone są wyniki.",
+ "apihelp-feedrecentchanges-param-invert": "Wszystkie przestrzenie nazw oprócz wybranej.",
+ "apihelp-feedrecentchanges-param-associated": "Uwzględnij powiązaną przestrzeń nazw (dyskusja lub treść).",
+ "apihelp-feedrecentchanges-param-days": "Dni, do których ograniczone są wyniki.",
+ "apihelp-feedrecentchanges-param-limit": "Maksymalna liczba zwracanych wyników.",
+ "apihelp-feedrecentchanges-param-from": "Pokaż zmiany od tamtej chwili.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ukryj drobne zmiany.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ukryj zmiany zrobione przez boty.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ukryj zmiany zrobione przez anonimowych użytkowników.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ukryj zmiany zrobione przez zarejestrowanych użytkowników.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ukryj sprawdzone zmiany.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ukryj zmiany zrobione przez obecnego użytkownika.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Ukryj zmiany w kategoryzacji.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtruj po znacznikach.",
+ "apihelp-feedrecentchanges-param-target": "Pokaż tylko zmiany na stronach linkowanych z tej strony.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Pokaż zmiany na stronach linkujących do wybranej strony.",
+ "apihelp-feedrecentchanges-example-simple": "Pokaż ostatnie zmiany.",
+ "apihelp-feedrecentchanges-example-30days": "Pokaż ostatnie zmiany z 30 dni.",
+ "apihelp-feedwatchlist-summary": "Zwraca kanał listy obserwowanych.",
+ "apihelp-feedwatchlist-param-feedformat": "Format kanału.",
+ "apihelp-feedwatchlist-param-hours": "Wymień strony zmienione w ciągu tylu godzin licząc od teraz.",
+ "apihelp-feedwatchlist-param-linktosections": "Linkuj bezpośrednio do zmienionych sekcji jeżeli to możliwe.",
+ "apihelp-feedwatchlist-example-default": "Pokaż kanał listy obserwowanych.",
+ "apihelp-feedwatchlist-example-all6hrs": "Pokaż wszystkie zmiany na obserwowanych stronach dokonane w ciągu ostatnich 6 godzin.",
+ "apihelp-filerevert-summary": "Przywróć plik do starej wersji.",
+ "apihelp-filerevert-param-filename": "Docelowa nazwa pliku bez prefiksu Plik:",
+ "apihelp-filerevert-param-comment": "Prześlij komentarz.",
+ "apihelp-filerevert-example-revert": "Przywróć <kbd>Wiki.png</kbd> do wersji z <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Wyświetl pomoc dla określonych modułów.",
+ "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości <var>action</var> i <var>format</var> parametry, lub <kbd>main</kbd>). Może określić podmoduły z <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Dołącz pomoc podmodułów nazwanego modułu.",
+ "apihelp-help-param-recursivesubmodules": "Zawiera pomoc dla podmodułów rekursywnie.",
+ "apihelp-help-param-helpformat": "Format wyjściowy pomocy.",
+ "apihelp-help-param-toc": "Dołącz spis treści do wyjściowego HTML.",
+ "apihelp-help-example-main": "Pomoc dla modułu głównego",
+ "apihelp-help-example-submodules": "Pomoc dla <kbd>action=query</kbd> i wszystkich jej podmodułów.",
+ "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
+ "apihelp-help-example-help": "Pomoc dla modułu pomocy",
+ "apihelp-help-example-query": "Pomoc dla dwóch podmodułów zapytań.",
+ "apihelp-imagerotate-summary": "Obróć jeden lub wiecej obrazków.",
+ "apihelp-imagerotate-param-rotation": "Stopni w prawo, aby obrócić zdjęcie.",
+ "apihelp-imagerotate-example-simple": "Obróć <kbd>Plik:Przykład.png</kbd> o <kbd>90</kbd> stopni.",
+ "apihelp-imagerotate-example-generator": "Obróć wszystkie obrazki w <kbd>Kategorii:Flip</kbd> o <kbd>180</kbd> stopni.",
+ "apihelp-import-summary": "Zaimportuj stronę z innej wiki, lub sformułuj plik XML.",
+ "apihelp-import-param-summary": "Podsumowanie importu rekordów dziennika.",
+ "apihelp-import-param-xml": "Przesłany plik XML.",
+ "apihelp-import-param-interwikisource": "Dla importów interwiki: wiki, z której importować.",
+ "apihelp-import-param-interwikipage": "Dla importów interwiki: strona do importu.",
+ "apihelp-import-param-fullhistory": "Dla importów interwiki: importuj całą historię, a nie tylko obecną wersję.",
+ "apihelp-import-param-templates": "Dla importów interwiki: importuj też wszystkie użyte szablony.",
+ "apihelp-import-param-namespace": "Importuj do tej przestrzeni nazw. Nie może być użyte razem z <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importuj jako podstronę tej strony. Nie może być użyte razem z <var>$1namespace</var>.",
+ "apihelp-login-param-name": "Nazwa użytkownika.",
+ "apihelp-login-param-password": "Hasło.",
+ "apihelp-login-param-domain": "Domena (opcjonalnie).",
+ "apihelp-login-param-token": "Token logowania zdobyty w pierwszym zapytaniu.",
+ "apihelp-login-example-gettoken": "Zdobądź token logowania.",
+ "apihelp-login-example-login": "Zaloguj się",
+ "apihelp-logout-summary": "Wyloguj i wyczyść dane sesji.",
+ "apihelp-logout-example-logout": "Wyloguj obecnego użytkownika.",
+ "apihelp-managetags-summary": "Wykonywanie zadań związanych z zarządzaniem znacznikami zmian.",
+ "apihelp-managetags-param-operation": "Jakiej operacji dokonać:\n;create:Stworzenie nowego znacznika zmian do ręcznego użycia.\n;delete:Usunięcie znacznika zmian z bazy danych, włącznie z usunięciem danego znacznika z wszystkich oznaczonych nim zmian i wpisów rejestru i ostatnich zmian.\n;activate:Aktywuj znacznik zmian, użytkownicy będą mogli go ręcznie przypisywać.\n;deactivate:Dezaktywuj znacznik zmian, użytkownicy nie będą mogli przypisywać go ręcznie.",
+ "apihelp-managetags-param-tag": "Znacznik do utworzenia, usunięcia, aktywacji lub dezaktywacji. Do utworzenia znacznika, nazwa nie misi istnieć. Do usunięcia znacznika, musi on istnieć. Do aktywacji znacznika, musi on istnieć i nie może być w użyciu przez żadne rozszerzenie. Do dezaktywowania znacznika, musi on być do tej pory aktywowany i ręcznie zdefiniowany.",
+ "apihelp-managetags-param-reason": "Opcjonalny powód utworzenia, usunięcia, włączenia lub wyłączenia znacznika.",
+ "apihelp-managetags-param-ignorewarnings": "Czy zignorować ostrzeżenia, które pojawiają się w trakcie operacji.",
+ "apihelp-managetags-example-create": "Stworzenie znacznika o nazwie <kbd>spam</kbd> z powodem <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Usunięcie znacznika <kbd>vandlaism</kbd> z powodu <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Aktywacja znacznika o nazwie <kbd>spam</kbd> z powodem <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Dezaktywacja znacznika o nazwie <kbd>spam</kbd> z powodu <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Łączenie historii edycji.",
+ "apihelp-mergehistory-param-from": "Tytuł strony, z której historia ma zostać połączona. Nie może być używane z <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "ID strony, z której historia ma zostać połączona. Nie może być używane z <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Tytuł strony, z którą połączyć historię. Nie może być używane z <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "ID strony, z którą połączyć historię. Nie może być używane z <var>$1to</var>.",
+ "apihelp-mergehistory-param-reason": "Powód łączenia historii.",
+ "apihelp-mergehistory-example-merge": "Połącz całą historię strony <kbd>Oldpage</kbd> ze stroną <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Przenieś stronę.",
+ "apihelp-move-param-from": "Tytuł strony do zmiany nazwy. Nie można używać razem z <var>$1fromid</var>.",
+ "apihelp-move-param-to": "Tytuł na jaki zmienić nazwę strony.",
+ "apihelp-move-param-reason": "Powód zmiany nazwy.",
+ "apihelp-move-param-movetalk": "Zmień nazwę strony dyskusji, jeśli istnieje.",
+ "apihelp-move-param-movesubpages": "Zmień nazwy podstron, jeśli możliwe.",
+ "apihelp-move-param-noredirect": "Nie twórz przekierowania.",
+ "apihelp-move-param-watch": "Dodaj stronę i przekierowanie do listy obserwowanych bieżącego użytkownika.",
+ "apihelp-move-param-unwatch": "Usuń stronę i przekierowanie z listy obserwowanych bieżącego użytkownika.",
+ "apihelp-move-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
+ "apihelp-move-example-move": "Przenieś <kbd>Badtitle</kbd> na <kbd>Goodtitle</kbd> bez pozostawienia przekierowania.",
+ "apihelp-opensearch-summary": "Przeszukaj wiki przy użyciu protokołu OpenSearch.",
+ "apihelp-opensearch-param-search": "Wyszukaj tekst.",
+ "apihelp-opensearch-param-limit": "Maksymalna liczba zwracanych wyników.",
+ "apihelp-opensearch-param-namespace": "Przestrzenie nazw do przeszukania.",
+ "apihelp-opensearch-param-suggest": "Nic nie robi, jeżeli <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> ustawiono na false.",
+ "apihelp-opensearch-param-redirects": "Jak obsługiwać przekierowania:\n;return:Zwróć samo przekierowanie.\n;resolve:Zwróć stronę docelową. Może zwrócić mniej niż wyników określonych w $1limit.\nZ powodów historycznych, domyślnie jest to \"return\" dla $1format=json, a \"resolve\" dla innych formatów.",
+ "apihelp-opensearch-param-format": "Format danych wyjściowych.",
+ "apihelp-opensearch-param-warningsaserror": "Jeżeli pojawią się ostrzeżenia związane z <kbd>format=json</kbd>, zwróć błąd API zamiast ignorowania ich.",
+ "apihelp-opensearch-example-te": "Znajdź strony zaczynające się od <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Zmienia preferencje bieżącego użytkownika.",
+ "apihelp-options-extended-description": "Można ustawiać tylko opcje zarejestrowane w rdzeniu, w zainstalowanych rozszerzeniach lub z kluczami o prefiksie <code>userjs-</code> (do wykorzystywania przez skrypty użytkowników).",
+ "apihelp-options-param-reset": "Resetuj preferencje do domyślnych.",
+ "apihelp-options-param-resetkinds": "Lista typów opcji do zresetowania, jeżeli ustawiono opcję <var>$1reset</var>.",
+ "apihelp-options-param-change": "Lista zmian, w formacie nazwa=wartość (np. skin=vector). Jeżeli nie zostanie podana wartość (nawet znak równości), np., optionname|otheroption|..., to opcja zostanie zresetowana do jej wartości domyślnej. Jeżeli jakakolwiek podawana wartość zawiera znak pionowej kreski (<kbd>|</kbd>), użyj [[Special:ApiHelp/main#main/datatypes|alternatywnego separatora wielu wartości]] aby operacja się powiodła.",
+ "apihelp-options-param-optionname": "Nazwa opcji, która powinna być ustawiona na wartość <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "Wartość opcji, określona w <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Resetuj wszystkie preferencje.",
+ "apihelp-options-example-change": "Zmień preferencje <kbd>skin</kbd> (skórka) i <kbd>hideminor</kbd> (ukryj drobne edycje).",
+ "apihelp-options-example-complex": "Zresetuj wszystkie preferencje, a następnie ustaw <kbd>skin</kbd> i <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Zdobądź informacje o modułach API.",
+ "apihelp-paraminfo-param-modules": "Lista nazw modułów (wartości parametrów <var>action</var> i <var>format</var> lub <kbd>main</kbd>). Można określić podmoduły za pomocą <kbd>+</kbd> lub wszystkie podmoduły, wpisując <kbd>+*</kbd>, lub wszystkie podmoduły rekursywnie <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Format tekstów pomocy.",
+ "apihelp-paraminfo-param-querymodules": "Lista nazw modułów zapytań (wartość parametrów <var>prop</var>, <var>meta</var> lub <var>list</var>). Użyj <kbd>$1modules=query+foo</kbd> zamiast <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-parse-param-summary": "Powód do sparsowania.",
+ "apihelp-parse-param-prop": "Jakie porcje informacji otrzymać:",
+ "apihelp-parse-paramvalue-prop-text": "Przetworzony tekst z wikitekstu.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Linki językowe z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-categories": "Kategorie z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Wersja HTML listy kategorii.",
+ "apihelp-parse-paramvalue-prop-links": "Linki wewnętrzne z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-templates": "Szablony z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-images": "Zdjęcia z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Linki zewnętrzne z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-sections": "Sekcje z przetworzonego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Dodaje tytuł parsowanego wikitekstu.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Zwróć oryginalny wikitekst, który został sparsowany.",
+ "apihelp-parse-param-preview": "Parsuj w trybie podglądu.",
+ "apihelp-parse-param-disabletoc": "Pomiń spis treści na wyjściu.",
+ "apihelp-parse-example-page": "Przeanalizuj stronę.",
+ "apihelp-parse-example-text": "Parsuj wikitekst.",
+ "apihelp-parse-example-summary": "Parsuj powód.",
+ "apihelp-patrol-summary": "Sprawdź stronę lub edycję.",
+ "apihelp-patrol-param-rcid": "ID z ostatnich zmian do oznaczenia jako sprawdzone.",
+ "apihelp-patrol-param-revid": "Numer edycji do sprawdzenia.",
+ "apihelp-patrol-example-rcid": "Sprawdź ostatnią zmianę.",
+ "apihelp-patrol-example-revid": "Sprawdź edycje.",
+ "apihelp-protect-summary": "Zmień poziom zabezpieczenia strony.",
+ "apihelp-protect-param-reason": "Powód zabezpieczania/odbezpieczania.",
+ "apihelp-protect-param-cascade": "Włącz ochronę kaskadową (chronione są wszystkie osadzone szablony i obrazki na tej stronie). Ignorowane, jeśli żaden z danych poziomów ochrony nie wspiera kaskadowania.",
+ "apihelp-protect-example-protect": "Zabezpiecz stronę",
+ "apihelp-protect-example-unprotect": "Odbezpiecz stronę ustawiając ograniczenia na <kbd>all</kbd> (czyli każdy może wykonać działanie).",
+ "apihelp-protect-example-unprotect2": "Odbezpiecz stronę ustawiając brak ograniczeń.",
+ "apihelp-purge-summary": "Wyczyść pamięć podręczną dla stron o podanych tytułach.",
+ "apihelp-purge-param-forcelinkupdate": "Uaktualnij tabele linków.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Uaktualnij tabele linków włącznie z linkami dotyczącymi każdej strony wykorzystywanej jako szablon na tej stronie.",
+ "apihelp-purge-example-simple": "Wyczyść strony <kbd>Main Page</kbd> i <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Przeczyść pierwsze 10 stron w przestrzeni głównej.",
+ "apihelp-query+allcategories-summary": "Wymień wszystkie kategorie.",
+ "apihelp-query+allcategories-param-from": "Kategoria, od której rozpocząć wyliczanie.",
+ "apihelp-query+allcategories-param-to": "Kategoria, na której zakończyć wyliczanie.",
+ "apihelp-query+allcategories-param-dir": "Kierunek sortowania.",
+ "apihelp-query+allcategories-param-limit": "Liczba kategorii do zwrócenia.",
+ "apihelp-query+allcategories-param-prop": "Jakie właściwości otrzymać:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Dodaje liczbę stron w kategorii.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Oznacza kategorie ukryte za pomocą <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Wymień kategorie z informacjami o liczbie stron w każdej z nich.",
+ "apihelp-query+alldeletedrevisions-summary": "Wymień wszystkie usunięte wersje użytkownika lub z przestrzeni nazw.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Może być użyte tylko z <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Nie może być używane z <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "Znacznik czasu, od którego rozpocząć wyliczanie.",
+ "apihelp-query+alldeletedrevisions-param-end": "Znacznik czasu, na którym zakończyć wyliczanie.",
+ "apihelp-query+alldeletedrevisions-param-from": "Zacznij listowanie na tym tytule.",
+ "apihelp-query+alldeletedrevisions-param-to": "Skończ listowanie na tym tytule.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Szukaj tytułów stron zaczynających się na tę wartość.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym znacznikiem.",
+ "apihelp-query+alldeletedrevisions-param-user": "Pokazuj tylko zmiany dokonane przez tego użytkownika.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Nie pokazuj zmian dokonanych przez tego użytkownika.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Listuj tylko strony z tej przestrzeni nazw.",
+ "apihelp-query+alldeletedrevisions-example-user": "Wymień ostatnie 50 usuniętych edycji przez użytkownika <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Wymień ostatnie 50 usuniętych edycji z przestrzeni głównej.",
+ "apihelp-query+allfileusages-summary": "Lista wykorzystania pliku, także dla nieistniejących.",
+ "apihelp-query+allfileusages-param-from": "Nazwa pliku, od którego rozpocząć wyliczanie.",
+ "apihelp-query+allfileusages-param-to": "Nazwa pliku, na którym zakończyć wyliczanie.",
+ "apihelp-query+allfileusages-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Dodaje tytuł pliku.",
+ "apihelp-query+allfileusages-param-limit": "Łączna liczba obiektów do zwrócenia.",
+ "apihelp-query+allfileusages-example-unique": "Lista unikatowych tytułów plików.",
+ "apihelp-query+allimages-param-sort": "Sortowanie według właściwości.",
+ "apihelp-query+allimages-param-minsize": "Ogranicz do obrazków, mających co najmniej taką liczbę bajtów.",
+ "apihelp-query+allimages-param-maxsize": "Ogranicz do obrazków, mających co najwyżej taką liczbę bajtów.",
+ "apihelp-query+allimages-example-B": "Pokaz listę plików rozpoczynających się na literę <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Pokaż listę ostatnio przesłanych plików, podobnie do [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Pokaż listę plików z typem MIME <kbd>image/png</kbd> lub <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Pokaż informacje o 4 plikach rozpoczynających się na literę <kbd>T</kbd>.",
+ "apihelp-query+alllinks-param-from": "Nazwa linku, od którego rozpocząć wyliczanie.",
+ "apihelp-query+alllinks-param-to": "Nazwa linku, na którym zakończyć wyliczanie.",
+ "apihelp-query+alllinks-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Dodaje tytuł linku.",
+ "apihelp-query+alllinks-param-namespace": "Przestrzeń nazw, z której wymieniać.",
+ "apihelp-query+alllinks-param-limit": "Łączna liczba obiektów do zwrócenia.",
+ "apihelp-query+alllinks-example-unique": "Lista unikatowych tytułów plików.",
+ "apihelp-query+allmessages-param-prop": "Właściwości do odczytu.",
+ "apihelp-query+allmessages-param-prefix": "Zwróć wiadomości z tym prefixem.",
+ "apihelp-query+allmessages-example-ipb": "Pokaż wiadomości rozpoczynające się od <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Pokaż wiadomości <kbd>august</kbd> i <kbd>mainpage</kbd> w języku niemieckim.",
+ "apihelp-query+allpages-param-from": "Tytuł strony, od której rozpocząć wyliczanie.",
+ "apihelp-query+allpages-param-to": "Tytuł strony, na której zakończyć wyliczanie.",
+ "apihelp-query+allpages-param-minsize": "Ogranicz do stron, mających co najmniej taką liczbę bajtów.",
+ "apihelp-query+allpages-param-maxsize": "Ogranicz do stron, mających co najwyżej taką liczbę bajtów.",
+ "apihelp-query+allpages-param-prtype": "Ogranicz tylko do zabezpieczonych stron.",
+ "apihelp-query+allpages-param-limit": "Liczba stron do zwrócenia.",
+ "apihelp-query+allpages-example-B": "Pokaż listę stron rozpoczynających się na literę <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Pokaż informacje o 4 stronach rozpoczynających się na literę <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Pokaż zawartość pierwszych dwóch nieprzekierowujących stron, zaczynających się na <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Lista wszystkich przekierowań do przestrzeni nazw.",
+ "apihelp-query+allredirects-param-from": "Nazwa przekierowania, od którego rozpocząć wyliczanie.",
+ "apihelp-query+allredirects-param-to": "Nazwa przekierowania, na którym zakończyć wyliczanie.",
+ "apihelp-query+allredirects-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Dodaje tytuł przekierowania.",
+ "apihelp-query+allredirects-param-namespace": "Przestrzeń nazw, z której wymieniać.",
+ "apihelp-query+allredirects-param-limit": "Łączna liczba obiektów do zwrócenia.",
+ "apihelp-query+allrevisions-summary": "Wyświetl wszystkie wersje.",
+ "apihelp-query+allrevisions-param-start": "Znacznik czasu, od którego rozpocząć wyliczanie.",
+ "apihelp-query+allrevisions-param-end": "Znacznik czasu, na którym zakończyć wyliczanie.",
+ "apihelp-query+allrevisions-param-user": "Wyświetl wersje tylko tego użytkownika.",
+ "apihelp-query+allrevisions-param-excludeuser": "Nie wyświetlaj wersji tego użytkownika.",
+ "apihelp-query+allrevisions-param-namespace": "Wyświetl tylko strony w przestrzeni głównej.",
+ "apihelp-query+allrevisions-example-ns-main": "Wyświetl pierwsze 50 wersji w przestrzeni głównej.",
+ "apihelp-query+mystashedfiles-param-limit": "Liczba plików do pobrania.",
+ "apihelp-query+alltransclusions-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Dodaje tytuł osadzenia.",
+ "apihelp-query+alltransclusions-param-namespace": "Przestrzeń nazw, z której wymieniać.",
+ "apihelp-query+alltransclusions-param-limit": "Łączna liczba elementów do zwrócenia.",
+ "apihelp-query+allusers-param-from": "Nazwa użytkownika, od którego rozpocząć wyliczanie.",
+ "apihelp-query+allusers-param-to": "Nazwa użytkownika, na którym zakończyć wyliczanie.",
+ "apihelp-query+allusers-param-prefix": "Wyszukaj wszystkich użytkowników, których nazwy zaczynają się od tej wartości.",
+ "apihelp-query+allusers-param-dir": "Kierunek sortowania.",
+ "apihelp-query+allusers-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Wyświetla uprawnienia, które posiada użytkownik.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Dodaje liczbę edycji użytkownika.",
+ "apihelp-query+allusers-param-limit": "Łączna liczba nazw użytkowników do zwrócenia.",
+ "apihelp-query+allusers-param-witheditsonly": "Tylko użytkownicy, którzy edytowali.",
+ "apihelp-query+allusers-param-activeusers": "Wyświetl tylko użytkowników, aktywnych w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}.",
+ "apihelp-query+allusers-example-Y": "Wyświetl użytkowników zaczynających się na <kbd>Y</kbd>.",
+ "apihelp-query+backlinks-summary": "Znajdź wszystkie strony, które linkują do danej strony.",
+ "apihelp-query+backlinks-param-title": "Tytuł strony do wyszukania. Nie może być użyty równocześnie z <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-namespace": "Przestrzeń nazw, z której wymieniać.",
+ "apihelp-query+backlinks-example-simple": "Pokazuj linki do <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Lista wszystkich zablokowanych użytkowników i adresów IP.",
+ "apihelp-query+blocks-param-start": "Znacznik czasu, od którego rozpocząć wyliczanie.",
+ "apihelp-query+blocks-param-end": "Znacznik czasu, na którym zakończyć wyliczanie.",
+ "apihelp-query+blocks-param-ids": "Lista zablokowanych ID do wylistowania (opcjonalne).",
+ "apihelp-query+blocks-param-users": "Lista użytkowników do wyszukania (opcjonalne).",
+ "apihelp-query+blocks-param-limit": "Maksymalna liczba blokad do wylistowania.",
+ "apihelp-query+blocks-paramvalue-prop-id": "Dodaje identyfikator blokady.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Dodaje nazwę zablokowanego użytkownika.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Dodaje identyfikator zablokowanego użytkownika.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Dodaje znacznik czasu założenia blokady.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Dodaje znacznik czasu wygaśnięcia blokady.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Dodaje powód zablokowania.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Dodaje zakres adresów IP, na który zastosowano blokadę.",
+ "apihelp-query+blocks-example-simple": "Listuj blokady.",
+ "apihelp-query+categories-summary": "Lista kategorii, do których należą strony",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Dodaje znacznik czasu dodania kategorii.",
+ "apihelp-query+categories-param-limit": "Liczba kategorii do zwrócenia.",
+ "apihelp-query+categoryinfo-summary": "Zwraca informacje o danych kategoriach.",
+ "apihelp-query+categorymembers-summary": "Wszystkie strony w danej kategorii.",
+ "apihelp-query+categorymembers-param-title": "Kategoria, której zawartość wymienić (wymagane). Musi zawierać prefiks <kbd>{{ns:category}}:</kbd>. Nie może być używany równocześnie z <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID strony kategorii, z której wymienić strony. Nie może być użyty równocześnie z <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Doda ID strony.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Doda tytuł i identyfikator przestrzeni nazw strony.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Doda klucz sortowania obowiązujący w danej kategorii (ciąg szesnastkowy).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Doda klucz sortowania obowiązujący w danej kategorii (czytelna przez człowieka część klucza sortowania).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Doda informacje o typie strony w kategorii (<samp>page</samp> (strona), <samp>subcat</samp> (podkategoria) lub <samp>file</samp> (plik)).",
+ "apihelp-query+categorymembers-param-limit": "Maksymalna liczba zwracanych wyników.",
+ "apihelp-query+categorymembers-param-sort": "Sortowanie według właściwości.",
+ "apihelp-query+categorymembers-param-dir": "W jakim kierunku sortować.",
+ "apihelp-query+deletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym znacznikiem.",
+ "apihelp-query+deletedrevisions-param-user": "Pokazuj tylko zmiany dokonane przez tego użytkownika.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Nie pokazuj zmian dokonanych przez tego użytkownika.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Tryb|Tryby}}: $2",
+ "apihelp-query+deletedrevs-param-start": "Znacznik czasu, od którego rozpocząć wyliczanie.",
+ "apihelp-query+deletedrevs-param-end": "Znacznik czasu, na którym zakończyć wyliczanie.",
+ "apihelp-query+deletedrevs-param-unique": "Listuj tylko jedną edycję dla każdej strony.",
+ "apihelp-query+deletedrevs-param-tag": "Pokazuj tylko zmiany oznaczone tym znacznikiem.",
+ "apihelp-query+deletedrevs-param-user": "Listuj tylko zmiany dokonane przez tego użytkownika.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Nie listuj zmian dokonanych przez tego użytkownika.",
+ "apihelp-query+deletedrevs-param-namespace": "Listuj tylko strony z tej przestrzeni nazw.",
+ "apihelp-query+deletedrevs-param-limit": "Maksymalna liczba zmian do wylistowania.",
+ "apihelp-query+disabled-summary": "Ten moduł zapytań został wyłączony.",
+ "apihelp-query+duplicatefiles-summary": "Lista wszystkich plików które są duplikatami danych plików bazujących na wartościach z hashem.",
+ "apihelp-query+duplicatefiles-example-generated": "Szukaj duplikatów wśród wszystkich plików.",
+ "apihelp-query+embeddedin-param-filterredir": "Jak filtrować przekierowania.",
+ "apihelp-query+embeddedin-param-limit": "Łączna liczba stron do zwrócenia.",
+ "apihelp-query+extlinks-param-limit": "Liczba linków do zwrócenia.",
+ "apihelp-query+exturlusage-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Dodaje ID strony.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Dodaje tytuł i identyfikator przestrzeni nazw strony.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Dodaje adres URL, używany na stronie.",
+ "apihelp-query+exturlusage-param-limit": "Liczba stron do zwrócenia.",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias rozmiaru.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Dodaje opis wersji obrazka.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Dodaje typ MIME obrazka.",
+ "apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
+ "apihelp-query+filerepoinfo-example-simple": "Uzyskaj informacje na temat repozytoriów plików.",
+ "apihelp-query+fileusage-summary": "Znajdź wszystkie strony, które używają danych plików.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Nazwa każdej strony.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Oznacz, jeśli strona jest przekierowaniem.",
+ "apihelp-query+fileusage-param-limit": "Ilość do zwrócenia.",
+ "apihelp-query+imageinfo-summary": "Zwraca informacje o pliku i historię przesyłania.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Dodaje kanoniczny tytuł pliku.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias rozmiaru.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Dołączy sumę kontrolną SHA-1 dla tego pliku.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Dodaje typ MIME pliku.",
+ "apihelp-query+imageinfo-param-urlheight": "Podobne do $1urlwidth.",
+ "apihelp-query+images-param-limit": "Liczba plików do zwrócenia.",
+ "apihelp-query+imageusage-example-simple": "Pokaż strony, które korzystają z [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Pokaż podstawowe informacje o stronie.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Liczba obserwujących, jeśli jest to dozwolone.",
+ "apihelp-query+info-paramvalue-prop-readable": "Czy użytkownik może przeczytać tę stronę.",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefix interwiki.",
+ "apihelp-query+iwbacklinks-param-limit": "Łączna liczba stron do zwrócenia.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Dodaje prefiks interwiki.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Dodaje tytuł interwiki.",
+ "apihelp-query+iwlinks-summary": "Wyświetla wszystkie liki interwiki z danych stron.",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Dodaje pełny adres URL.",
+ "apihelp-query+iwlinks-param-limit": "Łączna liczba linków interwiki do zwrócenia.",
+ "apihelp-query+langbacklinks-param-limit": "Łączna liczba stron do zwrócenia.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Dodaje kod języka linku językowego.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Dodaje tytuł linku językowego.",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Dodaje pełny adres URL.",
+ "apihelp-query+links-summary": "Zwraca wszystkie linki z danych stron.",
+ "apihelp-query+links-param-namespace": "Pokaż linki tylko w tych przestrzeniach nazw.",
+ "apihelp-query+links-param-limit": "Liczba linków do zwrócenia.",
+ "apihelp-query+linkshere-summary": "Znajdź wszystkie strony, które linkują do danych stron.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Nazwa każdej strony.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Oznacz, jeśli strona jest przekierowaniem.",
+ "apihelp-query+linkshere-param-limit": "Liczba do zwrócenia.",
+ "apihelp-query+logevents-summary": "Pobierz zdarzenia z rejestru.",
+ "apihelp-query+logevents-example-simple": "Lista ostatnich zarejestrowanych zdarzeń.",
+ "apihelp-query+pagepropnames-param-limit": "Maksymalna liczba zwracanych nazw.",
+ "apihelp-query+pageswithprop-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Doda ID strony.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Dodaje wartość właściwości strony.",
+ "apihelp-query+pageswithprop-param-limit": "Maksymalna liczba zwracanych stron.",
+ "apihelp-query+pageswithprop-param-dir": "W jakim kierunku sortować.",
+ "apihelp-query+pageswithprop-example-simple": "Lista pierwszych 10 stron za pomocą <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Pobierz dodatkowe informacje o pierwszych 10 stronach wykorzystując <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-param-search": "Wyszukaj tekst.",
+ "apihelp-query+prefixsearch-param-namespace": "Przestrzenie nazw do przeszukania.",
+ "apihelp-query+prefixsearch-param-limit": "Maksymalna liczba zwracanych wyników.",
+ "apihelp-query+prefixsearch-param-offset": "Liczba wyników do pominięcia.",
+ "apihelp-query+protectedtitles-summary": "Lista wszystkich tytułów zabezpieczonych przed tworzeniem.",
+ "apihelp-query+protectedtitles-param-namespace": "Listuj tylko strony z tych przestrzeni nazw.",
+ "apihelp-query+protectedtitles-param-limit": "Łączna liczba stron do zwrócenia.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Dodaje poziom zabezpieczeń.",
+ "apihelp-query+protectedtitles-example-simple": "Wymień zabezpieczone tytuły.",
+ "apihelp-query+querypage-param-page": "Nazwa strony specjalnej. Należy pamiętać o wielkości liter.",
+ "apihelp-query+querypage-param-limit": "Liczba zwracanych wyników.",
+ "apihelp-query+random-param-namespace": "Zwraca strony tylko w tych przestrzeniach nazw.",
+ "apihelp-query+random-param-filterredir": "Jaki filtrować przekierowania.",
+ "apihelp-query+random-example-simple": "Zwraca dwie losowe strony z głównej przestrzeni nazw.",
+ "apihelp-query+recentchanges-param-user": "Listuj tylko zmiany dokonane przez tego użytkownika.",
+ "apihelp-query+recentchanges-param-excludeuser": "Nie listuj zmian dokonanych przez tego użytkownika.",
+ "apihelp-query+recentchanges-param-tag": "Pokazuj tylko zmiany oznaczone tym znacznikiem.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Dodaje komentarz do edycji.",
+ "apihelp-query+recentchanges-example-simple": "Lista ostatnich zmian.",
+ "apihelp-query+redirects-summary": "Zwraca wszystkie przekierowania do danej strony.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Nazwa każdego przekierowania.",
+ "apihelp-query+redirects-param-limit": "Ile przekierowań zwrócić.",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "Identyfikator wersji.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Znaczniki wersji (drobne).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Znacznik czasu wersji.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Użytkownik, który utworzył wersję.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Długość wersji (w bajtach).",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) wersji.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Tekst wersji.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Znaczniki wersji.",
+ "apihelp-query+revisions+base-param-limit": "Ograniczenie na liczbę wersji, które będą zwrócone.",
+ "apihelp-query+search-summary": "Wykonaj wyszukiwanie pełnotekstowe.",
+ "apihelp-query+search-param-namespace": "Szukaj tylko w tych przestrzeniach nazw.",
+ "apihelp-query+search-param-info": "Które metadane zwrócić.",
+ "apihelp-query+search-paramvalue-prop-size": "Dodaje rozmiar strony w bajtach.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Dodaje liczbę słów na stronie.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Dodaje tytuł pasującego przekierowania.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Dodaje tytuł pasującej sekcji.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Dodaje dodatkowe dane generowane przez rozszerzenia.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Zignorowano",
+ "apihelp-query+search-param-limit": "Łączna liczba stron do zwrócenia.",
+ "apihelp-query+search-param-interwiki": "Dołączaj wyniki wyszukiwań interwiki w wyszukiwarce, jeśli możliwe.",
+ "apihelp-query+search-example-simple": "Szukaj <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Ogólne informacje o systemie.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista zarejestrowanych przestrzeni nazw i ich nazwy kanoniczne.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista zarejestrowanych aliasów przestrzeni nazw.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista aliasów stron specjalnych.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista słów magicznych i ich aliasów.",
+ "apihelp-query+siteinfo-param-numberingroup": "Wyświetla liczbę użytkowników w grupach użytkowników.",
+ "apihelp-query+siteinfo-example-simple": "Pobierz informacje o stronie.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias dla $1filekey, dla kompatybilności wstecznej.",
+ "apihelp-query+stashimageinfo-example-simple": "Zwraca informacje o ukrytym pliku.",
+ "apihelp-query+tags-summary": "Lista znaczników zmian.",
+ "apihelp-query+tags-param-limit": "Maksymalna liczba znaczników do wyświetlenia.",
+ "apihelp-query+tags-paramvalue-prop-name": "Dodaje nazwę znacznika.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Dodaje komunikat systemowy dla znacznika.",
+ "apihelp-query+tags-paramvalue-prop-description": "Dodaje opis znacznika.",
+ "apihelp-query+tags-paramvalue-prop-active": "Czy znacznik jest nadal stosowany.",
+ "apihelp-query+tags-example-simple": "Wymień dostępne znaczniki.",
+ "apihelp-query+templates-summary": "Zwraca wszystkie strony osadzone w danych stronach.",
+ "apihelp-query+templates-param-namespace": "Pokaż szablony tylko w tych przestrzeniach nazw.",
+ "apihelp-query+templates-param-limit": "Ile szablonów zwrócić?",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Nazwa każdej strony.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Oznacz, jeśli strona jest przekierowaniem.",
+ "apihelp-query+transcludedin-param-limit": "Ile zwrócić.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Dodaje komentarz edycji.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Dodaje sparsowany komentarz edycji.",
+ "apihelp-query+userinfo-summary": "Pobierz informacje o aktualnym użytkowniku.",
+ "apihelp-query+userinfo-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Wyświetla wszystkie grupy, do których należy bieżący użytkownik.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Wyświetla wszystkie uprawnienia, które ma bieżący użytkownik.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Zdobądź token, by zmienić bieżące preferencje użytkownika.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Dodaje liczbę edycji bieżącego użytkownika.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Dodaje adres e-mail użytkownika i datę jego potwierdzenia.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Dodaje datę rejestracji użytkownika.",
+ "apihelp-query+userinfo-example-simple": "Pobierz informacje o aktualnym użytkowniku.",
+ "apihelp-query+userinfo-example-data": "Pobierz dodatkowe informacje o aktualnym użytkowniku.",
+ "apihelp-query+users-summary": "Pobierz informacje o liście użytkowników.",
+ "apihelp-query+users-param-prop": "Jakie informacje dołączyć:",
+ "apihelp-query+users-paramvalue-prop-groups": "Wyświetla wszystkie grupy, do których należy każdy z użytkowników.",
+ "apihelp-query+users-paramvalue-prop-rights": "Wyświetla wszystkie uprawnienia, które ma każdy z użytkowników.",
+ "apihelp-query+users-param-users": "Lista użytkowników, o których chcesz pobrać informacje.",
+ "apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Dodaje tytuł strony.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Dodaje użytkownika, który wykonał edycję.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Dodaje komentarz do edycji.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Dodaje znacznik czasu edycji.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Dodaje starą i nową długość strony.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Zmiany zewnętrzne.",
+ "apihelp-resetpassword-summary": "Wyślij użytkownikowi e-mail do resetowania hasła.",
+ "apihelp-resetpassword-example-email": "Wyślij e-mail do resetowania hasła do wszystkich użytkowników posiadających adres <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-param-ids": "Identyfikatory wersji do usunięcia.",
+ "apihelp-revisiondelete-param-hide": "Co ukryć w każdej z wersji.",
+ "apihelp-revisiondelete-param-show": "Co pokazać w każdej z wersji.",
+ "apihelp-revisiondelete-param-reason": "Powód usunięcia lub przywrócenia.",
+ "apihelp-setpagelanguage-summary": "Zmień język strony.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Zmiana języka strony nie jest dozwolona na tej wiki.\n\nWłącz <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> by użyć tej akcji.",
+ "apihelp-setpagelanguage-param-reason": "Powód zmiany.",
+ "apihelp-stashedit-param-title": "Tytuł edytowanej strony.",
+ "apihelp-stashedit-param-sectiontitle": "Tytuł nowej sekcji.",
+ "apihelp-stashedit-param-text": "Zawartość strony.",
+ "apihelp-stashedit-param-summary": "Opis zmian.",
+ "apihelp-tag-param-reason": "Powód zmiany.",
+ "apihelp-unblock-summary": "Odblokuj użytkownika.",
+ "apihelp-unblock-param-user": "Nazwa użytkownika, adres IP albo zakres adresów IP, które chcesz odblokować. Nie można używać jednocześnie z <var>$1id</var> lub <var>$1userid</var>.",
+ "apihelp-unblock-param-reason": "Powód odblokowania.",
+ "apihelp-undelete-param-title": "Tytuł strony do przywrócenia.",
+ "apihelp-undelete-param-reason": "Powód przywracania.",
+ "apihelp-upload-param-filename": "Nazwa pliku docelowego.",
+ "apihelp-upload-param-watch": "Obserwuj stronę.",
+ "apihelp-upload-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
+ "apihelp-upload-param-file": "Zawartość pliku.",
+ "apihelp-userrights-param-user": "Nazwa użytkownika.",
+ "apihelp-userrights-param-userid": "Identyfikator użytkownika.",
+ "apihelp-userrights-param-add": "Dodaj użytkownika do tych grup, lub, jeżeli jest już ich członkiem, zmień czas wygaśnięcia członkostwa w tych grupach.",
+ "apihelp-userrights-param-remove": "Usuń użytkownika z tych grup.",
+ "apihelp-userrights-param-reason": "Powód zmiany.",
+ "apihelp-validatepassword-param-password": "Hasło do walidacji.",
+ "apihelp-json-summary": "Dane wyjściowe w formacie JSON.",
+ "apihelp-jsonfm-summary": "Dane wyjściowe w formacie JSON (prawidłowo wyświetlane w HTML).",
+ "apihelp-php-summary": "Dane wyjściowe w serializowany formacie PHP.",
+ "apihelp-phpfm-summary": "Dane wyjściowe w serializowanym formacie PHP (prawidłowo wyświetlane w HTML).",
+ "apihelp-xml-summary": "Dane wyjściowe w formacie XML.",
+ "apihelp-xml-param-xslt": "Jeśli określony, dodaje podaną stronę jako arkusz styli XSL. Powinna to być strona wiki w przestrzeni nazw MediaWiki, której nazwa kończy się na <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Jeśli zaznaczono, dodaje przestrzeń nazw XML.",
+ "apihelp-xmlfm-summary": "Dane wyjściowe w formacie XML (prawidłowo wyświetlane w HTML).",
+ "api-format-title": "Wynik MediaWiki API",
+ "api-pageset-param-titles": "Lista tytułów, z którymi pracować.",
+ "api-pageset-param-pageids": "Lista identyfikatorów stron, z którymi pracować.",
+ "api-pageset-param-revids": "Lista identyfikatorów wersji, z którymi pracować.",
+ "api-pageset-param-generator": "Pobierz listę stron, z którymi pracować poprzez wykonanie określonego modułu zapytań.\n\n<strong>Uwaga:</strong> Nazwy parametrów generatora musi poprzedzać prefiks „g”. Zobacz przykłady.",
+ "api-pageset-param-redirects-generator": "Automatycznie rozwiązuj przekierowania ze stron podanych w <var>$1titles</var>, <var>$1pageids</var>, oraz <var>$1revids</var>, a także ze stron zwróconych przez <var>$1generator</var>.",
+ "api-pageset-param-converttitles": "Konwertuj tytuły do innych wariantów, jeżeli trzeba. Będzie działać tylko wtedy, gdy język zawartości wiki będzie wspierał konwersje wariantów. Języki, które wspierają konwersję wariantów to m.in. $1.",
+ "api-help-title": "Pomoc MediaWiki API",
+ "api-help-lead": "To jest automatycznie wygenerowana strona dokumentacji MediaWiki API.\nDokumentacja i przykłady: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Moduł główny",
+ "api-help-undocumented-module": "Brak dokumentacji dla modułu $1.",
+ "api-help-flag-deprecated": "Ten moduł jest przestarzały.",
+ "api-help-flag-internal": "<strong>Ten moduł jest wewnętrzny lub niestabilny.</strong> Jego działanie może się zmienić bez uprzedzenia.",
+ "api-help-flag-readrights": "Ten moduł wymaga praw odczytu.",
+ "api-help-flag-writerights": "Ten moduł wymaga praw zapisu.",
+ "api-help-flag-mustbeposted": "Ten moduł akceptuje tylko żądania POST.",
+ "api-help-flag-generator": "Ten moduł może być użyty jako generator.",
+ "api-help-source": "Źródło: $1",
+ "api-help-source-unknown": "Źródło: <span class=\"apihelp-unknown\">nieznane</span>",
+ "api-help-license": "Licencja: [[$1|$2]]",
+ "api-help-license-noname": "Licencja: [[$1|Zobacz link]]",
+ "api-help-license-unknown": "Licencja: <span class=\"apihelp-unknown\">nieznana</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+ "api-help-param-deprecated": "Przestarzałe.",
+ "api-help-param-required": "Ten parametr jest wymagany.",
+ "api-help-datatypes-header": "Typy danych",
+ "api-help-param-type-integer": "Typ: {{PLURAL:$1|1=liczba całkowita|2=lista liczb całkowitych}}",
+ "api-help-param-type-boolean": "Typ: wartość logiczna ([[Special:ApiHelp/main#main/datatypes|szczegóły]])",
+ "api-help-param-type-timestamp": "Typ: {{PLURAL:$1|1=znacznik czasu|2=lista znaczników czasu}} ([[Special:ApiHelp/main#main/datatypes|dozwolone formaty]])",
+ "api-help-param-type-user": "Typ: {{PLURAL:$1|1=nazwa użytkownika|2=lista nazw uzytkowników}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Jedna z następujących wartości|2=Wartości (oddziel za pomocą <kbd>{{!}}</kbd> lub [[Special:ApiHelp/main#main/datatypes|alternatywy]])}}: $2",
+ "api-help-param-limit": "Nie więcej niż $1 dozwolone.",
+ "api-help-param-limit2": "Nie więcej niż $1 ($2 dla botów) dozwolone.",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość musi być nie mniejsza|2=Wartości muszą być nie mniejsze}} niż $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi być nie większa|2=Wartości muszą być nie większe}} niż $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
+ "api-help-param-multi-separate": "Oddziel wartości za pomocą <kbd>|</kbd> lub [[Special:ApiHelp/main#main/datatypes|alternatywy]].",
+ "api-help-param-multi-max": "Maksymalna liczba wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
+ "api-help-param-multi-all": "Aby wskazać wszystkie wartości, użyj <kbd>$1</kbd>.",
+ "api-help-param-default": "Domyślnie: $1",
+ "api-help-param-default-empty": "Domyślnie: <span class=\"apihelp-empty\">(puste)</span>",
+ "api-help-param-token": "Token \"$1\" zdobyty z [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-continue": "Gdy będzie dostępnych więcej wyników, użyj tego do kontynuowania.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez opisu)</span>",
+ "api-help-examples": "{{PLURAL:$1|Przykład|Przykłady}}:",
+ "api-help-permissions": "{{PLURAL:$2|Uprawnienie|Uprawnienia}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Przydzielone dla}}: $2",
+ "api-help-right-apihighlimits": "Użyj wyższych limitów w zapytaniach API (dla zapytań powolnych: $1; dla zapytań szbkich: $2). Limity zapytań powolnych są także stosowane dla parametrów z podanymi wieloma wartościami.",
+ "api-help-open-in-apisandbox": "<small>[otwórz w brudnopisie]</small>",
+ "apierror-articleexists": "Artykuł, który próbowałeś utworzyć, już został utworzony.",
+ "apierror-baddiff": "Różnicy wersji nie można odtworzyć. Jedna lub obie wersje nie istnieją, lub nie masz uprawnień do ich wyświetlenia.",
+ "apierror-badgenerator-unknown": "Nieznany <kbd>generator=$1</kbd>.",
+ "apierror-badip": "Parametr IP nie jest prawidłowy.",
+ "apierror-badparameter": "Nieprawidłowa wartość parametru <var>$1</var>.",
+ "apierror-badquery": "Nieprawidłowe zapytanie.",
+ "apierror-badtoken": "Nieprawidłowy token CSRF.",
+ "apierror-blockedfrommail": "Została Ci zablokowana możliwość wysyłania e-maili.",
+ "apierror-blocked": "Została Ci zablokowana możliwość edycji.",
+ "apierror-botsnotsupported": "Interfejs nie jest obsługiwany dla botów.",
+ "apierror-cannotviewtitle": "Nie masz uprawnień do oglądania $1.",
+ "apierror-cantblock": "Nie masz uprawnień do blokowania użytkowników.",
+ "apierror-cantimport-upload": "Nie masz uprawnień do importowania przesłanych stron.",
+ "apierror-cantimport": "Nie masz uprawnień do importowania stron.",
+ "apierror-cantsend": "Nie jesteś zalogowany, nie masz potwierdzonego adresu e-mail, albo nie masz prawa wysyłać e-maili do innych użytkowników, więc nie możesz wysłać wiadomości e-mail.",
+ "apierror-cantundelete": "Nie można przywrócić: dana wersja nie istnieje albo została już przywrócona.",
+ "apierror-databaseerror": "[$1] Błąd zapytania do bazy danych.",
+ "apierror-exceptioncaught": "[$1] Stwierdzono wyjątek: $2",
+ "apierror-filedoesnotexist": "Plik nie istnieje.",
+ "apierror-import-unknownerror": "Nieznany błąd podczas importowania: $1.",
+ "apierror-integeroutofrange-abovebotmax": "Wartość <var>$1</var> dla botów i administratorów nie może przekraczać $2 (ustawiono $3).",
+ "apierror-integeroutofrange-abovemax": "Wartość <var>$1</var> dla użytkowników nie może przekraczać $2 (ustawiono $3).",
+ "apierror-integeroutofrange-belowminimum": "Wartość <var>$1</var> nie może być mniejsza niż $2 (ustawiono $3).",
+ "apierror-invalidcategory": "Wprowadzona nazwa kategorii jest nieprawidłowa.",
+ "apierror-invalidexpiry": "Nieprawidłowy czas wygaśnięcia „$1”.",
+ "apierror-invalid-file-key": "Nieprawidłowy klucz pliku.",
+ "apierror-invalidlang": "Nieprawidłowy kod języka dla parametru <var>$1</var>.",
+ "apierror-invalidoldimage": "Parametr <var>oldimage</var> ma nieprawidłowy format.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Parametry}} $1 nie mogą być używane razem.",
+ "apierror-invalidtitle": "Zły tytuł „$1”.",
+ "apierror-invalidurlparam": "Nieprawidłowa wartość <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Niepoprawna nazwa użytkownika „$1”.",
+ "apierror-invaliduserid": "Identyfikator użytkownika <var>$1</var> jest nieprawidłowy.",
+ "apierror-maxlag-generic": "Oczekiwania na serwer bazy danych: opóźnienie $1 {{PLURAL:$1|sekunda|sekundy|sekund}}.",
+ "apierror-missingparam": "Parametr <var>$1</var> musi być podany.",
+ "apierror-missingrev-title": "Brak aktualnej wersji tytułu $1.",
+ "apierror-missingtitle": "Wybrana przez ciebie strona nie istnieje.",
+ "apierror-missingtitle-byname": "Strona $1 nie istnieje.",
+ "apierror-moduledisabled": "Moduł <kbd>$1</kbd> został wyłączony.",
+ "apierror-mustbeloggedin-generic": "Musisz być zalogowany.",
+ "apierror-mustbeloggedin-removeauth": "Aby usunąć dane uwierzytelniające, musisz się zalogować.",
+ "apierror-mustbeloggedin": "Musisz się zalogować, aby mieć możliwość $1.",
+ "apierror-nochanges": "Nie zażądano żadnych zmian.",
+ "apierror-nodeleteablefile": "Nie ma takiej starej wersji pliku.",
+ "apierror-noedit-anon": "Niezarejestrowani użytkownicy nie mogą edytować stron.",
+ "apierror-noedit": "Nie masz uprawnień do edytowania stron.",
+ "apierror-noimageredirect-anon": "Anonimowi użytkownicy nie mogą tworzyć przekierowań plików.",
+ "apierror-noimageredirect": "Nie masz uprawnień do tworzenia przekierowań plików.",
+ "apierror-nosuchpageid": "Nie ma strony z identyfikatorem $1.",
+ "apierror-nosuchrevid": "Nie ma wersji z identyfikatorem $1.",
+ "apierror-nosuchsection": "Nie ma sekcji $1.",
+ "apierror-permissiondenied": "Nie masz uprawnień do $1.",
+ "apierror-permissiondenied-generic": "Brak dostępu.",
+ "apierror-permissiondenied-unblock": "Nie masz uprawnień do odblokowania użytkowników.",
+ "apierror-protect-invalidaction": "Nieprawidłowy rodzaj zabezpieczenia „$1”.",
+ "apierror-protect-invalidlevel": "Nieprawidłowy poziom zabezpieczeń „$1”.",
+ "apierror-readonly": "Wiki jest teraz w trybie tylko do odczytu.",
+ "apierror-revwrongpage": "r$1 nie jest wersją strony $2.",
+ "apierror-sectionsnotsupported-what": "Sekcje nie są obsługiwane przez $1.",
+ "apierror-specialpage-cantexecute": "Nie masz uprawnień, aby zobaczyć wyniki tej strony specjalnej.",
+ "apierror-stashwrongowner": "Nieprawidłowy właściciel: $1",
+ "apierror-timeout": "Serwer nie odpowiedział w spodziewanym czasie.",
+ "apierror-unknownerror-nocode": "Nieznany błąd.",
+ "apierror-unknownerror": "Nieznany błąd: „$1”.",
+ "apierror-unknownformat": "Nierozpoznany format „$1”.",
+ "apierror-unrecognizedvalue": "Nierozpoznana wartość parametru <var>$1</var>: $2.",
+ "apiwarn-invalidcategory": "„$1” nie jest kategorią.",
+ "apiwarn-invalidtitle": "„$1” nie jest poprawnym tytułem.",
+ "apiwarn-notfile": "„$1” nie jest plikiem.",
+ "apiwarn-tokennotallowed": "Działanie „$1” jest niedozwolone dla bieżącego użytkownika.",
+ "apiwarn-toomanyvalues": "Podano zbyt wiele wartości dla parametru <var>$1</var>. Ograniczenie do $2.",
+ "apiwarn-validationfailed-keytoolong": "klucz zbyt długi (dozwolone nie więcej niż $1 bajtów).",
+ "apiwarn-validationfailed": "Błąd walidacji dla <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Ostrzeżenie o zabezpieczeniach</strong>: włączone jest <var>$wgDebugAPI</var>.",
+ "api-feed-error-title": "Błąd ($1)",
+ "api-exception-trace": "$1 w $2($3)\n$4",
+ "api-credits-header": "Twórcy",
+ "api-credits": "Deweloperzy API:\n* Roan Kattouw (główny programista wrzesień 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (twórca, główny programista wrzesień 2006–wrzesień 2007)\n* Brad Jorsch (główny programista 2013–obecnie)\n\nProsimy wysyłać komentarze, sugestie i pytania do mediawiki-api@lists.wikimedia.org\nlub zgłoś błąd na https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/ps.json b/www/wiki/includes/api/i18n/ps.json
new file mode 100644
index 00000000..d3d3b7aa
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ps.json
@@ -0,0 +1,73 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-param-action": "کومه کړنه ترسره کړم.",
+ "apihelp-block-summary": "په يو کارن بنديز لگول.",
+ "apihelp-block-param-user": "کارن-نوم، IP پته، يا IP سيمې باندې بنديز لگول.",
+ "apihelp-block-param-reason": "د بنديز سبب.",
+ "apihelp-block-param-nocreate": "د گڼون جوړولو مخ نيول.",
+ "apihelp-createaccount-param-name": "کارن-نوم.",
+ "apihelp-delete-summary": "يو مخ ړنگول.",
+ "apihelp-delete-example-simple": "<kbd>لومړی مخ</kbd> ړنگول.",
+ "apihelp-edit-summary": "مخونه جوړول او سمول.",
+ "apihelp-edit-param-sectiontitle": "د يوې نوې برخې سرليک.",
+ "apihelp-edit-param-text": "مخ مېنځپانگه.",
+ "apihelp-edit-param-minor": "وړوکی سمون.",
+ "apihelp-edit-param-bot": "دا سمون د روباټ په توگه په نښه کول.",
+ "apihelp-edit-example-edit": "يو مخ سمول.",
+ "apihelp-emailuser-summary": "کارن ته برېښليک لېږل.",
+ "apihelp-emailuser-param-target": "هغه کارن چې برېښليک ورلېږې.",
+ "apihelp-emailuser-param-subject": "د سکالو سرليک.",
+ "apihelp-emailuser-param-text": "د برېښليک جوسه.",
+ "apihelp-emailuser-param-ccme": "د دې برېښليک يوه لمېسه ماته هم راولېږه.",
+ "apihelp-expandtemplates-param-title": "د مخ سرليک.",
+ "apihelp-feedrecentchanges-param-hideminor": "وړوکي بدلونونه پټول.",
+ "apihelp-feedrecentchanges-param-hidebots": "د روباټونو لخوا ترسره شوي بدلونونه پټول.",
+ "apihelp-feedrecentchanges-param-hideanons": "د ورکنومو کارنانو لخوا ترسره شوي بدلونونه پټول.",
+ "apihelp-feedrecentchanges-param-hideliu": "د ثبت شويو کارنانو لخوا ترسره شوي بدلونونه پټول.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "څارل شوي بدلونونه پټول.",
+ "apihelp-feedrecentchanges-param-hidemyself": "د اوسني کارن لخوا ترسره شوي بدلونونه پټول.",
+ "apihelp-feedrecentchanges-param-tagfilter": "د نښلن له مخې چاڼول.",
+ "apihelp-feedrecentchanges-example-simple": "وروستي بدلونونه ښکاره کول.",
+ "apihelp-login-param-name": "کارن نوم.",
+ "apihelp-login-param-password": "پټنوم.",
+ "apihelp-login-param-domain": "شپول (اختياري).",
+ "apihelp-login-example-login": "ننوتل.",
+ "apihelp-move-summary": "يو مخ لېږدول.",
+ "apihelp-protect-example-protect": "يو مخ ژغورل.",
+ "apihelp-query+allpages-param-filterredir": "کوم مخونه چې لړليک کې راشي.",
+ "apihelp-query+search-example-simple": "د <kbd>meaning</kbd> پلټل.",
+ "apihelp-query+search-example-text": "د <kbd>مانا</kbd> لپاره متنونه پلټل.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "د يو مخ سرليک ورگډوي.",
+ "apihelp-query+watchlist-paramvalue-type-new": "مخ جوړونې.",
+ "apihelp-stashedit-param-sectiontitle": "د يوې نوې برخې سرليک.",
+ "apihelp-stashedit-param-summary": "د بدلون لنډيز.",
+ "apihelp-tag-param-reason": "د بدلون سبب.",
+ "apihelp-unblock-param-reason": "د بنديز ليرې کولو سبب.",
+ "apihelp-undelete-param-reason": "د بيازېرملو سبب.",
+ "apihelp-upload-param-watch": "مخ کتل.",
+ "apihelp-upload-param-file": "د دوتنې مېنځپانگه.",
+ "apihelp-userrights-param-user": "کارن نوم.",
+ "apihelp-userrights-param-userid": "کارن پېژند.",
+ "apihelp-userrights-param-reason": "د بدلون سبب.",
+ "api-format-title": "د مېډياويکي API پايله",
+ "api-help-title": "د مېډياويکي API لارښود",
+ "api-help-main-header": "آر ماډيول",
+ "api-help-source": "سرچينه: $1",
+ "api-help-source-unknown": "سرچينه: <span class=\"apihelp-unknown\">ناجوت</span>",
+ "api-help-license": "منښتليک: [[$1|$2]]",
+ "api-help-license-noname": "منښتليک: [[$1|تړنه وڅارئ]]",
+ "api-help-license-unknown": "منښتليک: <span class=\"apihelp-unknown\">ناجوت</span>",
+ "api-help-parameters": "{{PLURAL:$1|پاراميټر|پاراميټرونه}}:",
+ "api-help-param-required": "دې پاراميټر ته اړتيا ده.",
+ "api-help-datatypes-header": "اومتوگ ډولونه",
+ "api-help-param-default": "تلواليز: $1",
+ "api-help-param-default-empty": "تلواليز: <span class=\"apihelp-empty\">(تش)</span>",
+ "api-help-examples": "{{PLURAL:$1|بېلگه|بېلگې}}:",
+ "api-help-permissions": "{{PLURAL:$1|پرېښه|پرېښې}}:",
+ "api-credits-header": "کرېډټونه"
+}
diff --git a/www/wiki/includes/api/i18n/pt-br.json b/www/wiki/includes/api/i18n/pt-br.json
new file mode 100644
index 00000000..9330ca73
--- /dev/null
+++ b/www/wiki/includes/api/i18n/pt-br.json
@@ -0,0 +1,1759 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fasouzafreitas",
+ "Dianakc",
+ "Cainamarques",
+ "Rhcastilhos",
+ "Macofe",
+ "Almondega",
+ "Raphaelras",
+ "Caçador de Palavras",
+ "LucyDiniz",
+ "Eduardo Addad de Oliveira",
+ "Warley Felipe C.",
+ "TheEduGobi",
+ "Felipe L. Ewald",
+ "Hamilton Abreu"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentação]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e pedidos]\n</div>\n<strong>Estado:</strong> A API MediaWiki é uma interface madura e estável que é ativamente suportada e aprimorada. Enquanto tentamos evitá-lo, talvez ocortamente precisemos fazer mudanças de ruptura; se inscrever [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, será devolvido um cabeçalho HTTP com a chave \"MediaWiki-API-Error\" e depois tanto o valor desse cabeçalho como o código de erro devolvido serão definidos com o mesmo valor. Para mais informação, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Erros e avisos]].\n\n<p class=\"mw-apisandbox-link\">\n<strong>Testes:</strong> Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].\n</p>",
+ "apihelp-main-param-action": "Qual ação executar.",
+ "apihelp-main-param-format": "O formato da saída.",
+ "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki está instalado em um cluster replicado no banco de dados. Para salvar as ações que causam mais atraso na replicação do site, esse parâmetro pode fazer o cliente aguardar até que o atraso da replicação seja menor do que o valor especificado. Em caso de atraso excessivo, o código de erro <samp>maxlag</samp> é retornado com uma mensagem como <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Veja [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] para mais informações.",
+ "apihelp-main-param-smaxage": "Define o cabeçalho HTTP de controle de cache <code>s-maxage</code> para esta quantidade de segundos. Erros não são armazenados em cache.",
+ "apihelp-main-param-maxage": "Define o cabeçalho HTTP de controle de cache <code>max-age</code> para esta quantidade de segundos. Erros não são armazenados em cache.",
+ "apihelp-main-param-assert": "Verifique se o usuário está logado se configurado para <kbd>user</kbd> ou tem o direito do usuário do bot se <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Verificar que o usuário atual é o utilizador nomeado.",
+ "apihelp-main-param-requestid": "Qualquer valor dado aqui será incluído na resposta. Pode ser usado para distinguir requisições.",
+ "apihelp-main-param-servedby": "Incluir nos resultados o nome do servidor que serviu o pedido.",
+ "apihelp-main-param-curtimestamp": "Inclui o timestamp atual no resultado.",
+ "apihelp-main-param-responselanginfo": "Inclua os idiomas usados para <var>uselang</var> e <var>errorlang</var> no resultado.",
+ "apihelp-main-param-origin": "Ao acessar a API usando uma solicitação AJAX por domínio cruzado (CORS), defina isto como o domínio de origem. Isto deve estar incluso em toda solicitação ''pre-flight'', sendo portanto parte do URI da solicitação (ao invés do corpo do POST).\n\nPara solicitações autenticadas, isto deve corresponder a uma das origens no cabeçalho <code>Origin</code>, para que seja algo como <kbd>https://pt.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parâmetro não corresponder ao cabeçalho <code>Origin</code>, uma resposta 403 será retornada. Se este parâmetro corresponder ao cabeçalho <code>Origin</code> e a origem for permitida (''whitelisted''), os cabeçalhos <code>Access-Control-Allow-Origin</code> e <code>Access-Control-Allow-Credentials</code> serão definidos.\n\nPara solicitações não autenticadas, especifique o valor <kbd>*</kbd>. Isto fará com que o cabeçalho <code>Access-Control-Allow-Origin</code> seja definido, porém o <code>Access-Control-Allow-Credentials</code> será <code>false</code> e todos os dados específicos para usuários tornar-se-ão restritos.",
+ "apihelp-main-param-uselang": "Linguagem a ser usada para traduções de mensagens. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> com <kbd>siprop=languages</kbd> retorna uma lista de códigos de idioma ou especifique <kbd>user</kbd> para usar a preferência de idioma do usuário atual ou especifique <kbd>content</kbd> para usar o idioma de conteúdo desta wiki.",
+ "apihelp-main-param-errorformat": "Formato a ser usado aviso e saída de texto de erro.\n; Texto simples: Texto wiki com tags HTML removidas e entidades substituídas.\n; Wikitext: Unparsed wikitext. \n; html: HTML.\n; Bruto: chave e parâmetros da mensagem.\n; Nenhum: sem saída de texto, apenas os códigos de erro.\n; Bc: Formato usado antes do MediaWiki 1.29. <var>errorlang</var> e <var>errorsuselocal</var> são ignorados.",
+ "apihelp-main-param-errorlang": "Linguagem a utilizar para avisos e erros. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> com <kbd>siprop=languages</kbd> retorna uma lista de códigos de idioma ou especifique <kbd>content</kbd> para usar o idioma do conteúdo desta wiki ou especifique <kbd>uselang</kbd> para usar o mesmo valor que o parâmetro <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "Se for dado, os textos de erro usarão mensagens customizadas localmente a partir do espaço nominal {{ns: MediaWiki}}.",
+ "apihelp-block-summary": "Bloquear um usuário.",
+ "apihelp-block-param-user": "Nome de usuário, endereço IP ou faixa de IP para bloquear. Não pode ser usado junto com <var>$1userid</var>",
+ "apihelp-block-param-userid": "ID de usuário para bloquear. Não pode ser usado em conjunto com <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Tempo de expiração. Pode ser relativo (por exemplo <kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absoluto (por exemplo <kbd>2014-09-18T12:34:56Z</kbd>). Se definido para <kbd>infinite</kbd>, <kbd>indefinite</kbd> ou <kbd>never</kbd>, o bloqueio nunca irá expirar.",
+ "apihelp-block-param-reason": "Razão do bloqueio.",
+ "apihelp-block-param-anononly": "Bloqueia apenas usuários anônimos (ou seja. desativa edições anônimas para este endereço IP).",
+ "apihelp-block-param-nocreate": "Prevenir a criação de conta.",
+ "apihelp-block-param-autoblock": "Bloquear automaticamente o endereço IP usado e quaisquer endereços IPs subsequentes que tentarem acessar a partir deles.",
+ "apihelp-block-param-noemail": "Impedir que o usuário envie e-mails através da wiki. (Requer o direito <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Oculta o nome do usuário do ''log'' de bloqueio. (Requer o direito <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Permitir que o usuário edite sua própria página de discussão (depende de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Se o usuário já estiver bloqueado, sobrescrever o bloqueio existente.",
+ "apihelp-block-param-watchuser": "Vigiar as páginas de usuário e de discussão, do usuário ou do endereço IP.",
+ "apihelp-block-param-tags": "Alterar as tags para se inscrever na entrada no registro de bloqueio.",
+ "apihelp-block-example-ip-simple": "Bloquear endereço IP <kbd>192.0.2.5</kbd> por três dias com razão <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquear usuário <kbd>Vandal</kbd> indefinidamente com razão <kbd>Vandalism</kbd> e o impedir de criar nova conta e de enviar e-mails.",
+ "apihelp-changeauthenticationdata-summary": "Alterar os dados de autenticação para o usuário atual.",
+ "apihelp-changeauthenticationdata-example-password": "Tenta alterar a senha do usuário atual para <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Verificar a validade de um token de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo de token que está sendo testado.",
+ "apihelp-checktoken-param-token": "Token para testar.",
+ "apihelp-checktoken-param-maxtokenage": "Idade máxima permitida do token, em segundos.",
+ "apihelp-checktoken-example-simple": "Testa a validade de um token <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Limpa a etiqueta <code>hasmsg</code> do usuário atual.",
+ "apihelp-clearhasmsg-example-1": "Limpa a etiqueta <code>hasmsg</code> do usuário atual.",
+ "apihelp-clientlogin-summary": "Faça o login no wiki usando o fluxo interativo.",
+ "apihelp-clientlogin-example-login": "Comeca o processo de logar na wiki como usuário <kbd>Exemple</kbd> com a senha <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continuar efetuando login após uma resposta <samp>UI</samp> para autenticação de dois fatores, fornecendo um <var>OATHToken</var> de <kbd>987654</ kbd>.",
+ "apihelp-compare-summary": "Obter a diferença entre duas páginas.",
+ "apihelp-compare-extended-description": "Um número de revisão, um título de página, um ID de página, um texto ou uma referência relativa para \"de\" e \"para\" devem ser fornecidos.",
+ "apihelp-compare-param-fromtitle": "Primeiro título para comparar.",
+ "apihelp-compare-param-fromid": "Primeiro ID de página para comparar.",
+ "apihelp-compare-param-fromrev": "Primeira revisão para comparar.",
+ "apihelp-compare-param-fromtext": "Use este texto em vez do conteúdo da revisão especificada por <var>fromtitle</var>, <var>fromid</var> ou <var>fromrev</var>.",
+ "apihelp-compare-param-fromsection": "Utilizar apenas a secção especificada do conteúdo 'from' especificado.",
+ "apihelp-compare-param-frompst": "Faz uma transformação pré-salvar em <var>fromtext</var>.",
+ "apihelp-compare-param-fromcontentmodel": "Modelo de conteúdo de <var>fromtext</var>. Se não for fornecido, será adivinhado com base nos outros parâmetros.",
+ "apihelp-compare-param-fromcontentformat": "Formato de serialização de conteúdo de <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Segundo título para comparar.",
+ "apihelp-compare-param-toid": "Segundo ID de página para comparar.",
+ "apihelp-compare-param-torev": "Segunda revisão para comparar.",
+ "apihelp-compare-param-torelative": "Use uma revisão relativa à revisão determinada de <var>fromtitle</var>, <var>fromid</var> ou <var>fromrev</var>. Todas as outras opções 'to' serão ignoradas.",
+ "apihelp-compare-param-totext": "Use este texto em vez do conteúdo da revisão especificada por <var>totitle</var>, <var>toid</var> ou <var>torev</var>.",
+ "apihelp-compare-param-topst": "Faz uma transformação pré-salvar em <var>totext</var>.",
+ "apihelp-compare-param-tocontentmodel": "Modelo de conteúdo de <var>totext</var>. Se não for fornecido, será adivinhado com base nos outros parâmetros.",
+ "apihelp-compare-param-tocontentformat": "Formato de serialização de conteúdo de <var>totext</var>.",
+ "apihelp-compare-param-prop": "Quais peças de informação incluir.",
+ "apihelp-compare-paramvalue-prop-diff": "O dif do HTML.",
+ "apihelp-compare-paramvalue-prop-diffsize": "O tamanho do diff HTML, em bytes.",
+ "apihelp-compare-paramvalue-prop-rel": "Os IDs de revisão da revisão anteriores a 'from' e depois 'to', se houver.",
+ "apihelp-compare-paramvalue-prop-ids": "Os Ids da página e de revisão das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-title": "O título das páginas 'from' e 'to' das revisões.",
+ "apihelp-compare-paramvalue-prop-user": "O nome de usuário e o ID das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-comment": "O comentário das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "O comentário analisado sobre as revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-size": "O tamanho das revisões 'from' e 'to'.",
+ "apihelp-compare-example-1": "Criar um diff entre a revisão 1 e 2.",
+ "apihelp-createaccount-summary": "Criar uma nova conta de usuário.",
+ "apihelp-createaccount-param-preservestate": "Se <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> retornar true para <samp>hasprimarypreservedstate</samp>, pedidos marcados como <samp>hasprimarypreservedstate</samp> devem ser omitidos. Se retornou um valor não vazio para <samp>preservedusername</samp>, esse nome de usuário deve ser usado pelo parâmetro <var>username</var>.",
+ "apihelp-createaccount-example-create": "Inicie o processo de criação do usuário <kbd>Example</kbd> com a senha <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Nome de usuário.",
+ "apihelp-createaccount-param-password": "Senha (ignorada se <var>$1mailpassword</var> está definida).",
+ "apihelp-createaccount-param-domain": "Domínio para autenticação externa (opcional).",
+ "apihelp-createaccount-param-token": "Token de criação de conta obtido no primeiro pedido.",
+ "apihelp-createaccount-param-email": "Endereço de e-mail para o usuário (opcional).",
+ "apihelp-createaccount-param-realname": "Nome real do usuário (opcional).",
+ "apihelp-createaccount-param-mailpassword": "Se configurado para qualquer valor, uma senha aleatória será enviada por e-mail ao usuário.",
+ "apihelp-createaccount-param-reason": "Razão opcional para criar a conta a ser colocada nos logs.",
+ "apihelp-createaccount-param-language": "Código de idioma para definir como padrão para o usuário (opcional, padrão para o idioma do conteúdo).",
+ "apihelp-createaccount-example-pass": "Criar usuário <kbd>testuser</kbd> com senha <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Criar usuário <kbd>testmailuser</kbd> e enviar um e-mail com uma senha gerada aleatoriamente.",
+ "apihelp-cspreport-summary": "Usado por navegadores para denunciar violações da Política de Segurança de Conteúdo. Este módulo nunca deve ser usado, exceto quando usado automaticamente por um navegador web compatível com CSP.",
+ "apihelp-cspreport-param-reportonly": "Marque como sendo um relatório de uma política de monitoramento, não uma política forçada",
+ "apihelp-cspreport-param-source": "O que gerou o cabeçalho CSP que desencadeou este relatório",
+ "apihelp-delete-summary": "Excluir uma página.",
+ "apihelp-delete-param-title": "Título da página para excluir. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID da página para excluir. Não pode ser usada em conjunto com <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Razão para a exclusão. Se não for definido, um motivo gerado automaticamente será usado.",
+ "apihelp-delete-param-tags": "Alterar as tags para se inscrever na entrada no registro de exclusão.",
+ "apihelp-delete-param-watch": "Adiciona a página para a lista de páginas vigiadas do usuário atual.",
+ "apihelp-delete-param-watchlist": "Adicione ou remova incondicionalmente a página da lista de páginas vigiadas do usuário atual, use preferências ou não mude a vigilância.",
+ "apihelp-delete-param-unwatch": "Remove a página da lista de páginas vigiadas do usuário atual.",
+ "apihelp-delete-param-oldimage": "O nome da imagem antiga para excluir, conforme fornecido por [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Excluir <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Excluir <kbd>Main Page</kbd> com o motivo <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Este módulo foi desativado.",
+ "apihelp-edit-summary": "Criar e editar páginas.",
+ "apihelp-edit-param-title": "Título da página para editar. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID da página para editar. Não pode ser usada em conjunto com <var>$1title</var>.",
+ "apihelp-edit-param-section": "Número da seção. <kbd>0</kbd> para a seção superior, <kbd>new</kbd> para uma nova seção.",
+ "apihelp-edit-param-sectiontitle": "O título para uma nova seção.",
+ "apihelp-edit-param-text": "Conteúdo da página.",
+ "apihelp-edit-param-summary": "Edit o resumo. Também o título da seção quando $1section=new e $1sectiontitle não está definido.",
+ "apihelp-edit-param-tags": "Alterar as tags para aplicar à revisão.",
+ "apihelp-edit-param-minor": "Edição menor.",
+ "apihelp-edit-param-notminor": "Edição não-menor.",
+ "apihelp-edit-param-bot": "Marcar esta edição como uma edição de bot.",
+ "apihelp-edit-param-basetimestamp": "Timestamp da revisão base, usada para detectar conflitos de edição. Pode ser obtido através de [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Timestamp quando o processo de edição começou, usado para detectar conflitos de edição. Um valor apropriado pode ser obtido usando <var>[[Special:ApiHelp/main|curtimestamp]]</var> ao iniciar o processo de edição (por exemplo, ao carregar o conteúdo da página a editar).",
+ "apihelp-edit-param-recreate": "Substitua quaisquer erros sobre a página que foram eliminados enquanto isso.",
+ "apihelp-edit-param-createonly": "Não editar a página se ela já existir.",
+ "apihelp-edit-param-nocreate": "Mostra um erro se a página não existir.",
+ "apihelp-edit-param-watch": "Adiciona a página para a lista de páginas vigiadas do usuário atual.",
+ "apihelp-edit-param-unwatch": "Remove a página da lista de páginas vigiadas do usuário atual.",
+ "apihelp-edit-param-watchlist": "Adicione ou remova incondicionalmente a página da lista de páginas vigiadas do usuário atual, use preferências ou não mude a vigilância.",
+ "apihelp-edit-param-md5": "O hash MD5 do parâmetro $1text ou os parâmetros $1prependtext e $1appendtext concatenados. Se configurado, a edição não será feita a menos que o hash esteja correto.",
+ "apihelp-edit-param-prependtext": "Adiciona este texto ao início da página. Substitui $1text.",
+ "apihelp-edit-param-appendtext": "Adiciona este texto ao fim da página. Substitui $1text.\n\nUse $1section=new para anexar uma nova seção, em vez deste parâmetro.",
+ "apihelp-edit-param-undo": "Desfazer esta revisão. Substitui $1text, $1prependtext e $1appendtext.",
+ "apihelp-edit-param-undoafter": "Desfazer todas as revisões de $1undo para este. Se não estiver configurado, desfaz uma revisão.",
+ "apihelp-edit-param-redirect": "Resolve redirecionamento automaticamente.",
+ "apihelp-edit-param-contentformat": "Formato de serialização de conteúdo usado para o texto de entrada.",
+ "apihelp-edit-param-contentmodel": "Modelo de conteúdo do novo conteúdo.",
+ "apihelp-edit-param-token": "O token sempre deve ser enviado como o último parâmetro, ou pelo menos após o parâmetro $1text.",
+ "apihelp-edit-example-edit": "Edita uma página.",
+ "apihelp-edit-example-prepend": "Antecende <kbd>_&#95;NOTOC_&#95;</kbd> a página.",
+ "apihelp-edit-example-undo": "Desfazer as revisões 13579 até 13585 com sumário automático.",
+ "apihelp-emailuser-summary": "Envia e-mail para o usuário.",
+ "apihelp-emailuser-param-target": "Usuário a se enviar o e-mail.",
+ "apihelp-emailuser-param-subject": "Cabeçalho do assunto.",
+ "apihelp-emailuser-param-text": "Corpo do e-mail.",
+ "apihelp-emailuser-param-ccme": "Envie uma cópia deste e-mail para mim.",
+ "apihelp-emailuser-example-email": "Enviar um e-mail ao usuário <kbd>WikiSysop</kbd> com o texto <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Expande todas a predefinições em texto wiki.",
+ "apihelp-expandtemplates-param-title": "Título da página.",
+ "apihelp-expandtemplates-param-text": "Texto wiki para converter.",
+ "apihelp-expandtemplates-param-revid": "ID da revisão, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variáveis semelhantes.",
+ "apihelp-expandtemplates-param-prop": "Quais peças de informação obter.\n\nNote que se nenhum valor for selecionado, o resultado conterá o texto wiki, mas o resultado será em um formato obsoleto.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "O texto wiki expandido.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Quaisquer categorias presentes na entrada que não estão representadas na saída wikitext.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Propriedades da página definidas por palavras mágicas expandidas no texto wiki.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Se a saída é volátil e não deve ser reutilizada em outro lugar dentro da página.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "O tempo máximo após o qual os caches do resultado devem ser invalidados.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Quaisquer módulos ResourceLoader que as funções do analisador solicitaram foram adicionados à saída. Contudo, <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> devem ser solicitados em conjunto com <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página como uma string JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "A árvore de analise XML da entrada.",
+ "apihelp-expandtemplates-param-includecomments": "Se devem ser incluídos comentários HTML na saída.",
+ "apihelp-expandtemplates-param-generatexml": "Gerar XML parse tree (substituído por $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expandir o texto wiki <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Retorna o feed de contribuições de um usuário.",
+ "apihelp-feedcontributions-param-feedformat": "O formato do feed.",
+ "apihelp-feedcontributions-param-user": "De quais usuários receber as contribuições.",
+ "apihelp-feedcontributions-param-namespace": "A partir de qual espaço nominal filtrar contribuições.",
+ "apihelp-feedcontributions-param-year": "Do ano (inclusive anteriores).",
+ "apihelp-feedcontributions-param-month": "Do mês (inclusive anteriores).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrar contribuições que têm essas tags.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostrar apenas contribuições excluídas.",
+ "apihelp-feedcontributions-param-toponly": "Mostrar somente as edições que sejam a última revisão.",
+ "apihelp-feedcontributions-param-newonly": "Mostrar somente as edições que são criação de páginas.",
+ "apihelp-feedcontributions-param-hideminor": "Ocultar edições menores.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostrar a diferença de tamanho entre as revisões.",
+ "apihelp-feedcontributions-example-simple": "Retornar contribuições do usuário <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Retorna um ''feed'' de mudanças recentes.",
+ "apihelp-feedrecentchanges-param-feedformat": "O formato do feed.",
+ "apihelp-feedrecentchanges-param-namespace": "Espaço nominal a partir do qual limitar resultados.",
+ "apihelp-feedrecentchanges-param-invert": "Todos os espaços nominais, exceto o selecionado.",
+ "apihelp-feedrecentchanges-param-associated": "Inclua espaço nominal associado (discussão ou principal).",
+ "apihelp-feedrecentchanges-param-days": "Dias para limitar os resultados.",
+ "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados.",
+ "apihelp-feedrecentchanges-param-from": "Mostra modificações desde então.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ocultar modificações menores.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ocultar modificações feitas por bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ocultar alterações feitas por usuários anônimos.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ocultar alterações feitas por usuários registrados.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar mudanças patrulhadas.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo usuário atual.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Ocultar alterações de associação de categoria.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por tag.",
+ "apihelp-feedrecentchanges-param-target": "Mostrar apenas as alterações nas páginas vinculadas por esta página.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Mostra as alterações nas páginas vigiadas à página selecionada.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar as mudanças recentes.",
+ "apihelp-feedrecentchanges-example-30days": "Mostrar as mudanças recentes por 30 dias.",
+ "apihelp-feedwatchlist-summary": "Retornar um feed da lista de páginas vigiadas.",
+ "apihelp-feedwatchlist-param-feedformat": "O formato do feed.",
+ "apihelp-feedwatchlist-param-hours": "Lista páginas modificadas dentro dessa quantia de horas a partir de agora.",
+ "apihelp-feedwatchlist-param-linktosections": "Cria link diretamente para seções alteradas, se possível.",
+ "apihelp-feedwatchlist-example-default": "Mostra o feed de páginas vigiadas.",
+ "apihelp-feedwatchlist-example-all6hrs": "Mostre todas as alterações nas páginas vigiadas nas últimas 6 horas.",
+ "apihelp-filerevert-summary": "Reverte um arquivo para uma versão antiga.",
+ "apihelp-filerevert-param-filename": "Nome do arquivo de destino, sem o prefixo File:.",
+ "apihelp-filerevert-param-comment": "Enviar comentário.",
+ "apihelp-filerevert-param-archivename": "Nome do arquivo da revisão para qual reverter.",
+ "apihelp-filerevert-example-revert": "Reverter <kbd>Wiki.png</kbd> para a versão de <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Mostra a ajuda para os módulos especificados.",
+ "apihelp-help-param-modules": "Módulos para exibir ajuda para (valores do parâmetro <var>action</var> e <var>format</var> ou <kbd>main</kbd>). Pode-se especificar submódulos com um <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Inclui a ajuda para submódulos do módulo nomeado.",
+ "apihelp-help-param-recursivesubmodules": "Inclui a ajuda para submódulos de forma recursiva.",
+ "apihelp-help-param-helpformat": "Formato da saída da ajuda.",
+ "apihelp-help-param-wrap": "Encapsula a saída em uma estrutura de resposta da API padrão.",
+ "apihelp-help-param-toc": "Inclui uma tabela de conteúdos na saída HTML.",
+ "apihelp-help-example-main": "Ajuda para o módulo principal.",
+ "apihelp-help-example-submodules": "Ajuda para <kbd>action=query</kbd> e todos os seus submódulos.",
+ "apihelp-help-example-recursive": "Toda a ajuda em uma página.",
+ "apihelp-help-example-help": "Ajuda para o próprio módulo de ajuda.",
+ "apihelp-help-example-query": "Ajuda para dois submódulos de consulta.",
+ "apihelp-imagerotate-summary": "Gira uma ou mais imagens.",
+ "apihelp-imagerotate-param-rotation": "Graus para girar imagem no sentido horário.",
+ "apihelp-imagerotate-param-tags": "Tags para se inscrever na entrada no registro de upload.",
+ "apihelp-imagerotate-example-simple": "Girar <kbd>File:Example.png</kbd> em <kbd>90</kbd> graus.",
+ "apihelp-imagerotate-example-generator": "Girar todas as imagens em <kbd>Category:Flip</kbd> em <kbd>180</kbd> graus.",
+ "apihelp-import-summary": "Importar uma página de outra wiki ou de um arquivo XML.",
+ "apihelp-import-extended-description": "Observe que o POST HTTP deve ser feito como um upload de arquivos (ou seja, usar multipart/form-data) ao enviar um arquivo para o parâmetro <var>xml</var>.",
+ "apihelp-import-param-summary": "Resumo de importação do log de entrada.",
+ "apihelp-import-param-xml": "Enviar arquivo XML.",
+ "apihelp-import-param-interwikisource": "Para importações de interwiki: wiki para importar de.",
+ "apihelp-import-param-interwikipage": "Para importações de interwiki: página para importar.",
+ "apihelp-import-param-fullhistory": "Para importações de interwiki: importa o histórico completo, não apenas a versão atual.",
+ "apihelp-import-param-templates": "Para importações de interwiki: importa também todas as predefinições incluídas.",
+ "apihelp-import-param-namespace": "Importar para este espaço nominal. Não pode ser usado em conjunto com <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importar como subpágina para esta página. Não pode ser usada em conjunto com <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Alterar as tags para aplicar à entrada no registro de importação e à revisão nula nas páginas importadas.",
+ "apihelp-import-example-import": "Importar [[meta:Help:ParserFunctions]] para espaço nominal 100 com histórico completo.",
+ "apihelp-linkaccount-summary": "Vincule uma conta de um provedor de terceiros ao usuário atual.",
+ "apihelp-linkaccount-example-link": "Inicie o processo de vincular uma conta de <kbd>Example</kbd>.",
+ "apihelp-login-summary": "Faça login e obtenha cookies de autenticação.",
+ "apihelp-login-extended-description": "Esta ação só deve ser usada em combinação com[[Special:BotPasswords]]; O uso para login da conta principal está obsoleto e pode falhar sem aviso prévio. Para fazer login com segurança na conta principal, use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Esta ação está depreciada e pode falhar sem aviso prévio. Para efetuar login com segurança, use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Nome de usuário.",
+ "apihelp-login-param-password": "Senha.",
+ "apihelp-login-param-domain": "Domínio (opcional).",
+ "apihelp-login-param-token": "Token de login obtido no primeiro pedido.",
+ "apihelp-login-example-gettoken": "Recupere um token de login.",
+ "apihelp-login-example-login": "Entrar.",
+ "apihelp-logout-summary": "Faça o logout e limpe os dados da sessão.",
+ "apihelp-logout-example-logout": "Finaliza a sessão do usuário atual.",
+ "apihelp-managetags-summary": "Execute tarefas de gerenciamento relacionadas às tags de alteração.",
+ "apihelp-managetags-param-operation": "Qual operação para executar:\n;create: Crie uma nova tag de mudança para uso manual.\n;delete: Remove uma tag de mudança do banco de dados, incluindo a remoção da tag de todas as revisões, entradas recentes de alterações e entradas de log em que é usada.\n;active: Ativar uma tag de alteração, permitindo aos usuários aplicá-la manualmente.\n; deactivate: Desative uma tag de alteração, impedindo que usuários a apliquem manualmente.",
+ "apihelp-managetags-param-tag": "Tag para criar, excluir, ativar ou desativar. Para a criação de tags, a tag não deve existir. Para exclusão de tags, a tag deve existir. Para a ativação da tag, a tag deve existir e não ser usada por uma extensão. Para a desativação da tag, a tag deve estar atualmente ativa e definida manualmente.",
+ "apihelp-managetags-param-reason": "Uma razão opcional para criar, excluir, ativar ou desativar a tag.",
+ "apihelp-managetags-param-ignorewarnings": "Se deseja ignorar quaisquer avisos emitidos durante a operação.",
+ "apihelp-managetags-param-tags": "Alterar as tags para se inscrever na entrada no registro de gerenciamento de tags.",
+ "apihelp-managetags-example-create": "Criar uma tag chamada <kbd>spam</ kbd> com o motivo <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Excluir a tag <kbd>vandlaism</kbd> com o motivo <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Ativar uma tag nomeada <kbd>spam</kbd> com a razão <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Desative uma tag chamada <kbd> spam </ kbd> com o motivo <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Fundir históricos das páginas.",
+ "apihelp-mergehistory-param-from": "Título da página a partir da qual o histórico será mesclado. Não pode ser usado em conjunto com <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "ID da página da qual o histórico será mesclado. Não pode ser usado em conjunto com <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Título da página ao qual o histórico será mesclado. Não pode ser usado em conjunto com <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "ID da página em que o histórico será mesclado. Não pode ser usado em conjunto com <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Timestamp até as revisões que serão movidas do histórico da página de origem para o histórico da página de destino. Se omitido, todo o histórico da página de origem será incorporado na página de destino.",
+ "apihelp-mergehistory-param-reason": "Razão para a fusão de histórico.",
+ "apihelp-mergehistory-example-merge": "Junte todo o histórico de <kbd>Oldpage</kbd> em <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Junte as revisões da página de <kbd>Oldpage</kbd> datando até <kbd>2015-12-31T04:37:41Z</kbd> em <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Mover uma página.",
+ "apihelp-move-param-from": "Título da página para renomear. Não pode ser usado em conjunto com <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "ID da página a se renomear. Não pode ser usado em conjunto com <var>$1from</var>.",
+ "apihelp-move-param-to": "Título para o qual renomear a página.",
+ "apihelp-move-param-reason": "Motivo para a alteração do nome.",
+ "apihelp-move-param-movetalk": "Renomear a página de discussão, se existir.",
+ "apihelp-move-param-movesubpages": "Renomeia subpáginas, se aplicável.",
+ "apihelp-move-param-noredirect": "Não cria um redirecionamento.",
+ "apihelp-move-param-watch": "Adiciona a página e o redirecionamento para a lista de páginas vigiadas do usuário atual.",
+ "apihelp-move-param-unwatch": "Remove a página e o redirecionamento para a lista de paginas vigiadas do usuário atual.",
+ "apihelp-move-param-watchlist": "Adicione ou remova incondicionalmente a página da lista de páginas vigiadas do usuário atual, use preferências ou não mude a vigilância.",
+ "apihelp-move-param-ignorewarnings": "Ignorar quaisquer avisos.",
+ "apihelp-move-param-tags": "Alterar as tags para aplicar à entrada no log de movimento e à revisão nula na página de destino.",
+ "apihelp-move-example-move": "Mover <kbd>Badtitle</kbd> para <kbd>Goodtitle</kbd> sem deixar um redirecionamento.",
+ "apihelp-opensearch-summary": "Procure na wiki usando o protocolo OpenSearch.",
+ "apihelp-opensearch-param-search": "Pesquisar string.",
+ "apihelp-opensearch-param-limit": "Número máximo de resultados.",
+ "apihelp-opensearch-param-namespace": "Espaços nominais a pesquisar. Ignorados se <var>$1search</var> começar com um prefixo de espaço nominal válido.",
+ "apihelp-opensearch-param-suggest": "Não fazer nada se <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> é false.",
+ "apihelp-opensearch-param-redirects": "Como lidar com os redirecionamentos:\n;return: Retornar o redirecionamento em si.\n;resolve: Retornar a página de destino. Pode retornar menos de $1 resultados.\nPor razões históricas, o padrão é \"return\" para $1format=json e \"resolve\" para outros formatos.",
+ "apihelp-opensearch-param-format": "O formato da saída.",
+ "apihelp-opensearch-param-warningsaserror": "Se os avisos forem gerados com <kbd>format=json</kbd>, devolva um erro de API em vez de ignorá-los.",
+ "apihelp-opensearch-example-te": "Encontra páginas começando com <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Alterar as preferências do usuário atual.",
+ "apihelp-options-extended-description": "Somente as opções que estão registradas no núcleo ou em uma das extensões instaladas, ou as opções com as chaves com prefixo com <code>userjs-</code> (que podem ser usadas pelos scripts do usuário) podem ser definidas.",
+ "apihelp-options-param-reset": "Redefinir preferências para os padrões do site.",
+ "apihelp-options-param-resetkinds": "Lista de tipos de opções para redefinir quando a opção <var>$1reset</var> está definida.",
+ "apihelp-options-param-change": "Lista de alterações, nome formatado = valor (por exemplo, skin=vector). Se nenhum valor for dado (nem mesmo um sinal de igual), por exemplo, optionname|otheroption|..., a opção será redefinida para seu valor padrão. Se algum valor passado contém o caractere de pipe (<kbd>|</kbd>), use o [[Special:ApiHelp/main#main/datatypes|separador de múltiplo valor alternativo]] para a operação correta.",
+ "apihelp-options-param-optionname": "O nome da opção que deve ser configurado para o valor dado por <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "O valor da opção especificada por <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Resetar todas as preferências.",
+ "apihelp-options-example-change": "Mudar preferências <kbd>skin</kbd> e <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Redefine todas as preferências, então define <kbd>skin</kbd> e <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Obter informações sobre módulos da API.",
+ "apihelp-paraminfo-param-modules": "Lista de nomes de módulos (valores do parâmetro <var>action</var> e <var>format</var> ou <kbd>main</kbd>). Pode-se especificar submódulos com um <kbd>+</kbd>, todos os submódulos com <kbd>+*</kbd> ou todos os submódulos recursivamente com <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Formato das strings de ajuda.",
+ "apihelp-paraminfo-param-querymodules": "Lista de nomes de módulos de consulta (valor de parâmetro <var>prop</var>, <var>meta</var> ou <var>list</var>). Use <kbd>$1modules=query+foo</kbd> em vez de <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Obter também informações sobre o módulo principal (de nível superior). Use <kbd>$1modules=main</kbd> em vez disso.",
+ "apihelp-paraminfo-param-pagesetmodule": "Obter informações sobre o módulo do conjunto de páginas (fornecendo titles= and friends) também.",
+ "apihelp-paraminfo-param-formatmodules": "Lista de nomes de módulos de formato (valor do parâmetro <var>format</var>). Use <var>$1modules</var> em vez disso.",
+ "apihelp-paraminfo-example-1": "Mostrar informações para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> e <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Mostrar informações para todos os submódulos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "Analisa o conteúdo e retorna a saída do analisador.",
+ "apihelp-parse-extended-description": "Veja os vários módulos de suporte de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obter informações da versão atual de uma página.\n\nHá várias maneiras de especificar o texto para analisar:\n# Especifique uma página ou revisão, usando <var>$1page</var>, <var>$1pageid</var>, ou <var>$1oldid</var>.\n# Especifica o conteúdo explicitamente, usando <var>$1text</var>, <var>$1title</var>, <var>$1revid</var> e <var>$1contentmodel</var>.\n# Especifique apenas um resumo a analisar. <Var>$1prop</var> deve ter um valor vazio.",
+ "apihelp-parse-param-title": "Título da página ao qual o texto pertence. Se omitido, <var>$1contentmodel</var> deve ser especificado e [[API]] será usado como título.",
+ "apihelp-parse-param-text": "Texto para analisar. Use <var>$1title</var> ou <var>$1contentmodel</var> para controlar o modelo de conteúdo.",
+ "apihelp-parse-param-revid": "ID da revisão, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variáveis similares.",
+ "apihelp-parse-param-summary": "Sumário para analisar.",
+ "apihelp-parse-param-page": "Analisa o conteúdo desta página. Não pode ser usado em conjunto com <var>$1text</var> e <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Analisa o conteúdo desta página. Sobrepõe <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Se<var>$1page</var> ou <var>$1pageid</var> é definido com um redirecionamento, resolva-o.",
+ "apihelp-parse-param-oldid": "Analise o conteúdo desta revisão. Substitui <var>$1page</var> e <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Qual pedaço de informação obter:",
+ "apihelp-parse-paramvalue-prop-text": "Fornece o texto analisado do texto wiki.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Fornece os links de idiomas do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-categories": "Fornece as categorias no texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Fornece a versão HTML das categorias.",
+ "apihelp-parse-paramvalue-prop-links": "Fornece os links internos do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-templates": "Fornece a predefinição no texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-images": "Fornece as imagens no texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Fornece os links externos no texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-sections": "Fornece as seções no texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-revid": "Adiciona o ID da revisão da página analisada.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Adiciona o título do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-headitems": "Fornece itens para colocar no <code>&lt;head&gt;</code> da página.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Fornece <code>&lt;head&gt;</code> analisado da página.",
+ "apihelp-parse-paramvalue-prop-modules": "Fornece os módulos do ResourceLoader usados na página. Para carregar, use <code>mw.loader.using()</code>. Contudo, <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> deve ser solicitado conjuntamente com <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página. Para aplicar, use <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página como uma string JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "Fornece o HTML de indicadores de ''status'' de página utilizados na página.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Fornece links interwiki no texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Fornece o texto wiki original que foi analisado.",
+ "apihelp-parse-paramvalue-prop-properties": "Fornece várias propriedades definidas no texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Fornece o relatório limite de uma forma estruturada. Não informa dado, quando<var>$1disablelimitreport</var> está definido.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Retorna a versão HTML do relatório de limite. Não retorna dados quando <var>$1disablelimitreport</var> está definido.",
+ "apihelp-parse-paramvalue-prop-parsetree": "A árvore de análise XML do conteúdo da revisão (requer modelo de conteúdo <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Fornece os avisos que ocorreram ao analisar o conteúdo.",
+ "apihelp-parse-param-wrapoutputclass": "Classe CSS usada para envolver a saída do analisador.",
+ "apihelp-parse-param-pst": "Faz uma transformação pré-salvar na entrada antes de analisá-la. Apenas válido quando usado com texto.",
+ "apihelp-parse-param-onlypst": "Faz uma transformação pré-salvar (PST) na entrada, mas não analisa. Retorna o mesmo texto wiki, depois que um PST foi aplicado. Apenas válido quando usado com <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Inclui links de idiomas fornecidos por extensões (para uso com <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Apenas analise o conteúdo deste número de seção.\n\nQuando <kbd>new</kbd>, analise <var>$1text</var> e <var>$1sectiontitle</var> como se adicionasse uma nova seção a página.\n\n<kbd>new</kbd> é permitido somente ao especificar <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "Novo título de seção quando <var>section</var> é <kbd>new</kbd>.\n\nAo contrário da edição de páginas Isso não recai sobre <var>summary</var> quando omitido ou vazio.",
+ "apihelp-parse-param-disablelimitreport": "Omita o relatório de limite (\"Relatório de limite NewPP\") da saída do analisador.",
+ "apihelp-parse-param-disablepp": "Use <var>$1disablelimitreport</var> em vez.",
+ "apihelp-parse-param-disableeditsection": "Omita os links da seção de edição da saída do analisador.",
+ "apihelp-parse-param-disabletidy": "Não executa a limpeza HTML (por exemplo, tidy) na saída do analisador.",
+ "apihelp-parse-param-disablestylededuplication": "Não desduplica as folhas de estilo inline na saída do analisador.",
+ "apihelp-parse-param-generatexml": "Gerar XML parse tree (requer modelo de conteúdo <code>$1</code>, substituído por <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Analisar no mode de visualização.",
+ "apihelp-parse-param-sectionpreview": "Analise no modo de visualização de seção (também permite o modo de visualização).",
+ "apihelp-parse-param-disabletoc": "Omitir tabela de conteúdos na saída.",
+ "apihelp-parse-param-useskin": "Aplique a skin selecionada na saída do analisador. Pode afetar as seguintes propriedades: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-param-contentformat": "Formato de serialização de conteúdo usado para o texto de entrada. Válido apenas quando usado com $1text.",
+ "apihelp-parse-param-contentmodel": "Modelo de conteúdo do texto de entrada. Se omitido, $1title deve ser especificado e o padrão será o modelo do título especificado. Válido apenas quando usado com $1text.",
+ "apihelp-parse-example-page": "Analisa uma página.",
+ "apihelp-parse-example-text": "Analisa texto wiki.",
+ "apihelp-parse-example-texttitle": "Analisa texto wiki, especificando o título da página.",
+ "apihelp-parse-example-summary": "Analisa uma sumário.",
+ "apihelp-patrol-summary": "Patrulha uma página ou revisão.",
+ "apihelp-patrol-param-rcid": "ID de Mudanças recentes para patrulhar.",
+ "apihelp-patrol-param-revid": "ID de revisão para patrulhar.",
+ "apihelp-patrol-param-tags": "Alterar as tags para se inscrever na entrada no registro de patrulha.",
+ "apihelp-patrol-example-rcid": "Patrulha uma modificação recente.",
+ "apihelp-patrol-example-revid": "Patrulha uma revisão.",
+ "apihelp-protect-summary": "Modifica o nível de proteção de uma página.",
+ "apihelp-protect-param-title": "Título da página para (des)proteger. Não pode ser usado em conjunto com $1pageid.",
+ "apihelp-protect-param-pageid": "ID da página a se (des)proteger. Não pode ser usado em conjunto com $1title.",
+ "apihelp-protect-param-protections": "Lista de níveis de proteção, formatados <kbd>action=level</kbd> (por exemplo, <kbd>edit=sysop</kbd>). Um nível com <kbd>all</kbd> significa que todos podem tomar a ação, ou seja, sem restrição.\n\n<strong> Nota:</strong> Qualquer ação não listada terá restrições removidas.",
+ "apihelp-protect-param-expiry": "Expiração de timestamps. Se apenas um timestamp for configurado, ele sera usado para todas as proteções. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd>, para uma protecção que nunca expirar.",
+ "apihelp-protect-param-reason": "Motivo para (des)proteger.",
+ "apihelp-protect-param-tags": "Alterar as tags para se inscrever na entrada no registro de proteção.",
+ "apihelp-protect-param-cascade": "Ativa a proteção em cascata (ou seja, proteja as predefinições transcluídas e imagens utilizados nesta página). Ignorado se nenhum dos níveis de proteção fornecidos suporte cascata.",
+ "apihelp-protect-param-watch": "Se configurado, adicione a página sendo (des)protegida para a lista de páginas vigiadas do usuário atual.",
+ "apihelp-protect-param-watchlist": "Adicione ou remova incondicionalmente a página da lista de páginas vigiadas do usuário atual, use preferências ou não mude a vigilância.",
+ "apihelp-protect-example-protect": "Protege uma página.",
+ "apihelp-protect-example-unprotect": "Desprotege uma página definindo restrições para <kbd>all</kbd> (isto é, todos são autorizados a tomar a ação).",
+ "apihelp-protect-example-unprotect2": "Desprotege uma página ao não definir restrições.",
+ "apihelp-purge-summary": "Limpe o cache para os títulos especificados.",
+ "apihelp-purge-param-forcelinkupdate": "Atualiza as tabelas de links.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Atualiza a tabela de links e atualiza as tabelas de links para qualquer página que usa essa página como uma predefinição.",
+ "apihelp-purge-example-simple": "Purga as páginas <kbd>Main Page</kbd> e <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Purga as primeiras 10 páginas no espaço nominal principal.",
+ "apihelp-query-summary": "Obtenha dados de e sobre o MediaWiki.",
+ "apihelp-query-extended-description": "Todas as modificações de dados terão que usar a consulta para adquirir um token para evitar abusos de sites maliciosos.",
+ "apihelp-query-param-prop": "Quais propriedades obter para as páginas consultadas.",
+ "apihelp-query-param-list": "Quais listas obter.",
+ "apihelp-query-param-meta": "Quais metadados obter.",
+ "apihelp-query-param-indexpageids": "Inclua uma seção adicional de pageids listando todas as IDs de página retornadas.",
+ "apihelp-query-param-export": "Exporte as revisões atuais de todas as páginas dadas ou geradas.",
+ "apihelp-query-param-exportnowrap": "Retorna o XML de exportação sem envolvê-lo em um resultado XML (mesmo formato que [[Special:Export]]). Só pode ser usado com $1export.",
+ "apihelp-query-param-iwurl": "Obter o URL completo se o título for um link interwiki.",
+ "apihelp-query-param-rawcontinue": "Retorne os dados de <samp>query-continue</samp> para continuar.",
+ "apihelp-query-example-revisions": "Obter [[Special:ApiHelp/query+siteinfo|site info]] e [[Special:ApiHelp/query+revisions|revisions]] da <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Obter revisões de páginas começando com <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "Enumera todas as categorias.",
+ "apihelp-query+allcategories-param-from": "A categoria da qual começar a enumeração.",
+ "apihelp-query+allcategories-param-to": "A categoria na qual parar a enumeração.",
+ "apihelp-query+allcategories-param-prefix": "Pesquisa por todo os título de categoria que começam com este valor.",
+ "apihelp-query+allcategories-param-dir": "Direção para ordenar.",
+ "apihelp-query+allcategories-param-min": "Retorna apenas as categorias com pelo menos esta quantidade de membros.",
+ "apihelp-query+allcategories-param-max": "Retorna apenas as categorias com no máximo esta quantidade de membros.",
+ "apihelp-query+allcategories-param-limit": "Quantas categorias retornar.",
+ "apihelp-query+allcategories-param-prop": "Quais propriedades obter:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Adiciona o número de páginas na categoria.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Tags categorias que estão ocultas com <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Lista categorias com a informação sobre o número de páginas em cada uma.",
+ "apihelp-query+allcategories-example-generator": "Recupera informações sobre a página da categoria em si para as categorias que começam <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "Lista todas as revisões excluídas por um usuário ou em um espaço nominal.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Só pode ser usada com <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Não pode ser usada com <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "A data a partir da qual começar a enumeração.",
+ "apihelp-query+alldeletedrevisions-param-end": "A data onde parar a enumeração.",
+ "apihelp-query+alldeletedrevisions-param-from": "Começar listando desse título.",
+ "apihelp-query+alldeletedrevisions-param-to": "Parar a listagem neste título.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Pesquisa por todo os título que começam com este valor.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Lista apenas as revisões com esta tag.",
+ "apihelp-query+alldeletedrevisions-param-user": "Lista apenas revisões desse usuário.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Não lista as revisões deste usuário.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Lista apenas páginas neste espaço nominal.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Devido ao [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]], usar <var>$1user</var> e <var>$1namespace</var> juntos pode resultar em menos de <var>$1limit</var> resultados antes de continuar; em casos extremos, nenhum resultado pode ser retornado.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Quando usado como gerador, gera títulos em vez de IDs de revisão.",
+ "apihelp-query+alldeletedrevisions-example-user": "Lista as últimas 50 contribuições excluídas pelo usuário <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Lista as primeiras 50 edições excluídas no espaço nominal principal.",
+ "apihelp-query+allfileusages-summary": "Lista todas as utilizações de arquivo, incluindo os não-existentes.",
+ "apihelp-query+allfileusages-param-from": "O título do arquivo a partir do qual começar a enumerar.",
+ "apihelp-query+allfileusages-param-to": "O título do arquivo onde parar de enumerar.",
+ "apihelp-query+allfileusages-param-prefix": "Procure todos os títulos de arquivos que começam com esse valor.",
+ "apihelp-query+allfileusages-param-unique": "Somente mostra títulos de arquivos distintos. Não pode ser usado com $1prop=ids.\nQuando usado como gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+allfileusages-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Adiciona o ID das páginas em uso (não pode ser usado com $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Adiciona o título do arquivo.",
+ "apihelp-query+allfileusages-param-limit": "Quantos itens retornar.",
+ "apihelp-query+allfileusages-param-dir": "A direção na qual listar.",
+ "apihelp-query+allfileusages-example-B": "Listar títulos de arquivos, incluindo os que faltam, com IDs de página de que são, começando em <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Listar títulos únicos de arquivos.",
+ "apihelp-query+allfileusages-example-unique-generator": "Obtém todos os títulos de arquivo, marcando os que faltam.",
+ "apihelp-query+allfileusages-example-generator": "Obter as páginas contendo os arquivos.",
+ "apihelp-query+allimages-summary": "Enumera todas as imagens sequencialmente.",
+ "apihelp-query+allimages-param-sort": "Propriedade pela qual ordenar.",
+ "apihelp-query+allimages-param-dir": "A direção na qual listar.",
+ "apihelp-query+allimages-param-from": "O título da imagem do qual começar a enumeração. Só pode ser usado com $1sort=name.",
+ "apihelp-query+allimages-param-to": "O título da imagem no qual parar a enumeração. Só pode ser usado com $1sort=nome.",
+ "apihelp-query+allimages-param-start": "O timestamp do qual começar a enumeração. Só pode ser usado com $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "O timestamp no qual parar a enumeração. Só pode ser usado com $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Procure todos os títulos de imagens que começam com esse valor. Só pode ser usado com $1sort=nome.",
+ "apihelp-query+allimages-param-minsize": "Limite à imagens com, pelo menos, esses bytes.",
+ "apihelp-query+allimages-param-maxsize": "Limite as imagens com, no máximo, esses bytes.",
+ "apihelp-query+allimages-param-sha1": "SHA1 de imagem. Substitui $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1 de imagem na base 36 (usado em MediaWiki).",
+ "apihelp-query+allimages-param-user": "Retorna apenas os arquivos enviados por este usuário. Só pode ser usado com $1sort=timestamp. Não pode ser usado em conjunto com $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Como filtrar arquivos enviados por bots. Só pode ser usado com $1sort=timestamp. Não pode ser usado em conjunto com $1user.",
+ "apihelp-query+allimages-param-mime": "Quais tipos MIME pesquisar, por exemplo: <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Quantas imagens retornar.",
+ "apihelp-query+allimages-example-B": "Mostra uma lista de arquivos começando com a letra <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Mostra uma lista de arquivos recentemente enviados, semelhante a [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Mostra uma lista de arquivos com o tipo MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Mostra informações sobre 4 arquivos começando com a letra <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Enumerar todos os links que apontam para um determinado espaço nominal.",
+ "apihelp-query+alllinks-param-from": "O título do link a partir do qual começar a enumerar.",
+ "apihelp-query+alllinks-param-to": "O título do link onde parar de enumerar.",
+ "apihelp-query+alllinks-param-prefix": "Pesquisa por todos os títulos com link que começam com este valor.",
+ "apihelp-query+alllinks-param-unique": "Somente mostra títulos vinculados diferenciados. Não pode ser usado com <kbd>$1prop=ids</kbd>.\nQuando usado como um gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+alllinks-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Adiciona o ID da página da página de ligação (não pode ser usada com <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Adiciona o título do link.",
+ "apihelp-query+alllinks-param-namespace": "O espaço nominal a se enumerar.",
+ "apihelp-query+alllinks-param-limit": "Quantos itens retornar.",
+ "apihelp-query+alllinks-param-dir": "A direção na qual listar.",
+ "apihelp-query+alllinks-example-B": "Listar títulos vinculados, incluindo os que faltam, com IDs de página de que são, começando em <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Lista de títulos vinculados exclusivos.",
+ "apihelp-query+alllinks-example-unique-generator": "Obtém todos os títulos vinculados, marcando as que faltam.",
+ "apihelp-query+alllinks-example-generator": "Obter páginas contendo os links.",
+ "apihelp-query+allmessages-summary": "Devolver as mensagens deste site.",
+ "apihelp-query+allmessages-param-messages": "Quais mensagens para retornar. <kbd>*</kbd> (padrão) indica todas as mensagens.",
+ "apihelp-query+allmessages-param-prop": "Quais propriedades obter.",
+ "apihelp-query+allmessages-param-enableparser": "Defina para ativar o analisador, irá processar o texto wiki da mensagem (substituir palavras mágicas, predefinições manipuladoras, etc.).",
+ "apihelp-query+allmessages-param-nocontent": "Se configurado, não inclua o conteúdo das mensagens na saída.",
+ "apihelp-query+allmessages-param-includelocal": "Inclua também mensagens locais, ou seja, mensagens que não existem no software, mas existem como no {{ns:MediaWiki}} namespace.\nIsso lista todas as páginas de espaço nominal-{{ns: MediaWiki}}, então também irá listar aqueles que não são realmente mensagens, como [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Argumentos para serem substituídos pela mensagem.",
+ "apihelp-query+allmessages-param-filter": "Retornar apenas mensagens com nomes que contêm essa string.",
+ "apihelp-query+allmessages-param-customised": "Retornar apenas mensagens neste estado de personalização.",
+ "apihelp-query+allmessages-param-lang": "Retornar mensagens neste idioma.",
+ "apihelp-query+allmessages-param-from": "Retornar mensagens começando com esta mensagem.",
+ "apihelp-query+allmessages-param-to": "Retornar mensagens terminando com esta mensagem.",
+ "apihelp-query+allmessages-param-title": "Nome da página para usar como contexto ao analisar a mensagem (para a opção $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Retornar apenas mensagens com este prefixo.",
+ "apihelp-query+allmessages-example-ipb": "Mostrar mensagens começando com <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Mostrar mensagens <kbd>august</kbd> e <kbd>mainpage</kbd> em alemão.",
+ "apihelp-query+allpages-summary": "Enumerar todas as páginas sequencialmente em um determinado espaço nominal.",
+ "apihelp-query+allpages-param-from": "O título da página da qual começar a enumeração.",
+ "apihelp-query+allpages-param-to": "O título da página no qual parar de enumerar.",
+ "apihelp-query+allpages-param-prefix": "Pesquisa por todo os título que começam com este valor.",
+ "apihelp-query+allpages-param-namespace": "O espaço nominal a se enumerar.",
+ "apihelp-query+allpages-param-filterredir": "Quais páginas listar.",
+ "apihelp-query+allpages-param-minsize": "Limitar a páginas com pelo menos essa quantidade de bytes.",
+ "apihelp-query+allpages-param-maxsize": "Limitar a páginas com no máximo essa quantidade de bytes.",
+ "apihelp-query+allpages-param-prtype": "Limite apenas às páginas protegidas.",
+ "apihelp-query+allpages-param-prlevel": "Proteções de filtro com base no nível de proteção (deve ser usado com $1prtype= parameter).",
+ "apihelp-query+allpages-param-prfiltercascade": "Proteções de filtro baseadas em cascata (ignoradas quando o valor de $1 não está definido).",
+ "apihelp-query+allpages-param-limit": "Quantas páginas retornar.",
+ "apihelp-query+allpages-param-dir": "A direção na qual listar.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filtrar com base em se uma página tem lingulinks. Observe que isso pode não considerar os langlinks adicionados por extensões.",
+ "apihelp-query+allpages-param-prexpiry": "Qual proteção expira para filtrar a página em:\n;indefinite: Obtém apenas páginas com expiração de proteção indefinida.\n;definite: Obtém apenas páginas com uma expiração de proteção definida (específica).\n;all: Obtém páginas com qualquer validade de proteção.",
+ "apihelp-query+allpages-example-B": "Mostrar uma lista de páginas a partir da letra <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Mostre informações sobre 4 páginas começando na letra <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Mostre o conteúdo das primeiras 2 páginas não redirecionadas que começam em <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Lista todos os redirecionamentos para um espaço nominal.",
+ "apihelp-query+allredirects-param-from": "O título do redirecionamento a partir do qual começar a enumerar.",
+ "apihelp-query+allredirects-param-to": "O título do redirecionamento onde parar de enumerar.",
+ "apihelp-query+allredirects-param-prefix": "Procure todas as páginas de destino que começam com esse valor.",
+ "apihelp-query+allredirects-param-unique": "Somente mostra páginas de destino distintas. Não pode ser usado com $1prop=ids|fragment|interwiki.\nQuando usado como gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+allredirects-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Adiciona o ID da página da página de redirecionamento (não pode ser usada com <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Adiciona o título do redirecionamento.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Adiciona o fragmento do redirecionamento, se houver (não pode ser usado com <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Adiciona o prefixo interwiki do redirecionamento, se houver (não pode ser usado com <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "O espaço nominal a se enumerar.",
+ "apihelp-query+allredirects-param-limit": "Quantos itens retornar.",
+ "apihelp-query+allredirects-param-dir": "A direção na qual listar.",
+ "apihelp-query+allredirects-example-B": "Lista de páginas de destino, incluindo as que faltam, com IDs de página de que são, começando em <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Listar páginas de destino únicas.",
+ "apihelp-query+allredirects-example-unique-generator": "Obtém todas as páginas alvo, marcando as que faltam.",
+ "apihelp-query+allredirects-example-generator": "Obtém páginas contendo os redirecionamentos.",
+ "apihelp-query+allrevisions-summary": "Listar todas as revisões.",
+ "apihelp-query+allrevisions-param-start": "A data a partir da qual começar a enumeração.",
+ "apihelp-query+allrevisions-param-end": "A data onde parar a enumeração.",
+ "apihelp-query+allrevisions-param-user": "Lista apenas revisões desse usuário.",
+ "apihelp-query+allrevisions-param-excludeuser": "Não lista as revisões deste usuário.",
+ "apihelp-query+allrevisions-param-namespace": "Lista apenas páginas neste espaço nominal.",
+ "apihelp-query+allrevisions-param-generatetitles": "Quando usado como gerador, gera títulos em vez de IDs de revisão.",
+ "apihelp-query+allrevisions-example-user": "Lista as últimas 50 contribuições por usuário <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Lista as primeiras 50 revisões no espaço nominal principal.",
+ "apihelp-query+mystashedfiles-summary": "Obter uma lista de arquivos no stash de dados do usuário atual.",
+ "apihelp-query+mystashedfiles-param-prop": "Quais propriedades buscar para os arquivos.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Obtenha o tamanho do arquivo e as dimensões da imagem.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Obtenha o tipo MIME e o tipo de mídia do arquivo.",
+ "apihelp-query+mystashedfiles-param-limit": "Quantos arquivos a serem retornados.",
+ "apihelp-query+mystashedfiles-example-simple": "Obter a chave de arquivo, o tamanho do arquivo e o tamanho de pixels dos arquivos no stash de dados do usuário atual.",
+ "apihelp-query+alltransclusions-summary": "Liste todas as transclusões (páginas incorporadas usando &#123;&#123;x&#125;&#125;), incluindo não-existentes.",
+ "apihelp-query+alltransclusions-param-from": "O título da transclusão do qual começar a enumeração.",
+ "apihelp-query+alltransclusions-param-to": "O título da transclusão na qual parar a enumeração.",
+ "apihelp-query+alltransclusions-param-prefix": "Procure todos os títulos transcluídos que começam com esse valor.",
+ "apihelp-query+alltransclusions-param-unique": "Somente mostra páginas transcluídas distintas. Não pode ser usado com $1prop=ids. Quando usado como gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+alltransclusions-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Adiciona o ID da página da página de transclusão (não pode ser usado com $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Adiciona o título da transclusão.",
+ "apihelp-query+alltransclusions-param-namespace": "O espaço nominal a se enumerar.",
+ "apihelp-query+alltransclusions-param-limit": "Quantos itens retornar.",
+ "apihelp-query+alltransclusions-param-dir": "A direção na qual listar.",
+ "apihelp-query+alltransclusions-example-B": "Lista de títulos transcluídos, incluindo os que faltam, com IDs de página de onde são, começando em <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Listar títulos translúcidos exclusivos.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtém todas as páginas transcluídas, marcando as que faltam.",
+ "apihelp-query+alltransclusions-example-generator": "Obtém páginas contendo as transclusões.",
+ "apihelp-query+allusers-summary": "Enumerar todos os usuários registrados.",
+ "apihelp-query+allusers-param-from": "O nome do usuário do qual começar a enumeração.",
+ "apihelp-query+allusers-param-to": "O nome do usuário para parar de enumerar em.",
+ "apihelp-query+allusers-param-prefix": "Procurar por todos os usuários que começam com esse valor.",
+ "apihelp-query+allusers-param-dir": "Direção para ordenar.",
+ "apihelp-query+allusers-param-group": "Somente inclua usuários nos grupos fornecidos.",
+ "apihelp-query+allusers-param-excludegroup": "Excluir os usuários nos grupos fornecidos.",
+ "apihelp-query+allusers-param-rights": "Somente inclui usuários com os direitos dados. Não inclui direitos concedidos por grupos implícitos ou auto-promovidos como *, usuário ou autoconfirmados.",
+ "apihelp-query+allusers-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Adiciona a informação sobre um bloco atual no usuário.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Lista grupos em que o usuário está. Isso usa mais recursos do servidor e pode retornar menos resultados do que o limite.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lista todos os grupos em que o usuário está automaticamente.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Lista os direitos que o usuário possui.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Adiciona a contagem de edições do usuário.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Adiciona o timestamp de quando o usuário se registrou se disponível (pode estar em branco).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Adiciona os IDs centrais e o status do anexo do usuário.",
+ "apihelp-query+allusers-param-limit": "Quantos nomes de usuário a serem retornados.",
+ "apihelp-query+allusers-param-witheditsonly": "Apenas lista os usuários que fizeram edições.",
+ "apihelp-query+allusers-param-activeusers": "Apenas lista os usuários ativos no último $1 {{PLURAL:$1|dia|dias}}.",
+ "apihelp-query+allusers-param-attachedwiki": "Com <kbd>$1prop=centralids</kbd>, também indica se o usuário está conectado com a wiki identificado por este ID.",
+ "apihelp-query+allusers-example-Y": "Listar usuários começando em <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Recupere informações sobre o status de autenticação atual.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Teste se o status de autenticação atual do usuário é suficiente para a operação específica de segurança especificada.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Obtenha informações sobre os pedidos de autenticação necessários para a ação de autenticação especificada.",
+ "apihelp-query+authmanagerinfo-example-login": "Obtenha os pedidos que podem ser usados ao iniciar um login.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Obtenha os pedidos que podem ser usados ao iniciar um login, com campos de formulário mesclados.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Teste se a autenticação é suficiente para ação <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Encontre todas as páginas que apontam para a página dada.",
+ "apihelp-query+backlinks-param-title": "Título a se pesquisar. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "ID da página a se pesquisar. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "O espaço nominal a se enumerar.",
+ "apihelp-query+backlinks-param-dir": "A direção na qual listar.",
+ "apihelp-query+backlinks-param-filterredir": "Como filtrar para redirecionamentos. Se configurado para <kbd>nonredirects</kbd> quando <var>$1redirect</var> estiver ativado, isso só é aplicado ao segundo nível.",
+ "apihelp-query+backlinks-param-limit": "Quantas páginas retornar. Se <var>$1redirect</var> estiver ativado, o limite se aplica a cada nível separadamente (o que significa até 2 * <var>$1limit</var> resultados podem ser retornados).",
+ "apihelp-query+backlinks-param-redirect": "Se a página de link for um redirecionamento, encontre todas as páginas que se liguem a esse redirecionamento também. O limite máximo é reduzido para metade.",
+ "apihelp-query+backlinks-example-simple": "Mostrar links para <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Obter informações sobre páginas que ligam para <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Liste todos os usuários e endereços IP bloqueados.",
+ "apihelp-query+blocks-param-start": "A data a partir da qual começar a enumeração.",
+ "apihelp-query+blocks-param-end": "A data onde parar a enumeração.",
+ "apihelp-query+blocks-param-ids": "Lista de IDs de bloco para listar (opcional).",
+ "apihelp-query+blocks-param-users": "Lista de usuários para procurar (opcional).",
+ "apihelp-query+blocks-param-ip": "Obter todos os blocos aplicando a este IP ou intervalos CIDR, incluindo intervalos de blocos.\nNão pode ser usado em conjunto com <var>$3users</var>. Intervalos CIDR mais largos do que IPv4/$1 ou IPv6/$2 não são aceitos.",
+ "apihelp-query+blocks-param-limit": "O número máximo de blocos para listar.",
+ "apihelp-query+blocks-param-prop": "Quais propriedades obter:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Adiciona o ID do bloco.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Adiciona o nome de usuário do usuário bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Adiciona o ID do usuário bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Adiciona o nome de usuário do usuário bloqueador.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Adiciona o ID do usuário bloqueador.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Adiciona o timestamp de quando o bloqueio foi criado.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Adiciona o timestamp de quando o bloqueio expira.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Adiciona a razão dada para o bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Adiciona o intervalo de endereços IP afetados pelo bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Etiqueta a proibição com (autobloqueio, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Mostre apenas itens que atendam a esses critérios. Por exemplo, para ver apenas blocos indefinidos nos endereços IP, defina <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Listar bloqueios.",
+ "apihelp-query+blocks-example-users": "Liste os bloqueios dos usuários <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Liste todas as categorias às quais as páginas pertencem.",
+ "apihelp-query+categories-param-prop": "Quais propriedades adicionais obter para cada categoria:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Adiciona a sortkey (string hexadecimal) e o prefixo da sortkey (parte legível para humanos) para a categoria.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Adiciona o timestamp de quando a categoria foi adicionada.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Tags categorias que estão ocultas com <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Quais tipos de categorias mostrar.",
+ "apihelp-query+categories-param-limit": "Quantas categorias retornar.",
+ "apihelp-query+categories-param-categories": "Apenas liste essas categorias. Útil para verificar se uma determinada página está em uma determinada categoria.",
+ "apihelp-query+categories-param-dir": "A direção na qual listar.",
+ "apihelp-query+categories-example-simple": "Obter uma lista de categorias para as quais a página <kbd> Albert Einstein </ kbd> pertence.",
+ "apihelp-query+categories-example-generator": "Obter informações sobre todas as categorias usadas na página <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Retorna informações sobre as categorias dadas.",
+ "apihelp-query+categoryinfo-example-simple": "Obter informações sobre <kbd>Category:Foo</kbd> e <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Lista todas as páginas numa categoria específica.",
+ "apihelp-query+categorymembers-param-title": "Qual categoria enumerar (obrigatório). Deve incluir o prefixo <kbd>{{ns:category}}:</kbd>. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID da página da categoria para enumerar. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Adiciona o ID da página.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Adiciona o título e o ID do espaço nominal da página.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Adiciona a sortkey usada para classificar na categoria (string hexadecimal).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Adiciona o prefixo da sortkey usado para classificar na categoria (parte da sortkey legível para humanos).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Adiciona o tipo em que a página foi categorizada como (<samp>page</samp>, <samp>subcat</samp> ou <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Adiciona o timestamp de quando a página foi incluida.",
+ "apihelp-query+categorymembers-param-namespace": "Somente inclua páginas nesses espaços de nomes. Observe que <kbd>$1type=subcat</kbd> OU <kbd>$1type=file</kbd> pode ser usado aon invéz de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Quais tipos de membros da categoria incluir. Ignorado quando <kbd>$1sort=timestamp</kbd> está ativado.",
+ "apihelp-query+categorymembers-param-limit": "O número máximo de páginas para retornar.",
+ "apihelp-query+categorymembers-param-sort": "Propriedade pela qual ordenar.",
+ "apihelp-query+categorymembers-param-dir": "Em qual sentido ordenar.",
+ "apihelp-query+categorymembers-param-start": "O timestamp do qual começar a lista. Só pode ser usado com <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Timestamp para encerrar a lista em. Só pode ser usado com <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Sortkey para iniciar a listagem como retornado por <kbd>$1prop=sortkey</kbd>. Só pode ser usado com <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey para terminar a listagem, como retornado por <kbd>$1prop=sortkey</kbd>. Só pode ser usado com <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo Sortkey para começar a listagem. Só pode ser usado com <kbd>$1sort=sortkey</kbd>. Substitui <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix para terminar a lista <strong>before</strong> (não <strong>at</strong>; se esse valor ocorrer, não será incluído!). Só pode ser usado com $1sort=sortkey. Substitui $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Use $1starthexsortkey em vez.",
+ "apihelp-query+categorymembers-param-endsortkey": "Use $1endhexsortkey em vez.",
+ "apihelp-query+categorymembers-example-simple": "Obter as 10 primeiras páginas em <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Obter informações da página sobre as primeiras 10 páginas em <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Obter a lista de contribuidores logados e a contagem de contribuidores anônimos para uma página.",
+ "apihelp-query+contributors-param-group": "Somente inclui usuários nos grupos dados. Não inclui grupos implícitos ou auto-promovidos como *, usuário ou autoconfirmados.",
+ "apihelp-query+contributors-param-excludegroup": "Excluir os usuários nos grupos fornecidos. Não inclui grupos implícitos ou auto-promovidos como *, usuário ou autoconfirmados.",
+ "apihelp-query+contributors-param-rights": "Somente inclui usuários com os direitos dados. Não inclui direitos concedidos por grupos implícitos ou auto-promovidos como *, usuário ou autoconfirmados.",
+ "apihelp-query+contributors-param-excluderights": "Excluir usuários com os direitos dados. Não inclui direitos concedidos por grupos implícitos ou auto-promovidos como *, usuário ou autoconfirmados.",
+ "apihelp-query+contributors-param-limit": "Quantas contribuições retornar.",
+ "apihelp-query+contributors-example-simple": "Mostrar contribuidores para a página <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Obtem informações de revisão excluídas.",
+ "apihelp-query+deletedrevisions-extended-description": "Pode ser usado de várias maneiras:\n# Obtenha revisões excluídas para um conjunto de páginas, definindo títulos ou pageids. Ordenado por título e timestamp.\n# Obter dados sobre um conjunto de revisões excluídas, definindo seus IDs com revids. Ordenado por ID de revisão.",
+ "apihelp-query+deletedrevisions-param-start": "O timestamp no qual começar a enumerar. Ignorado ao processar uma lista de IDs de revisão.",
+ "apihelp-query+deletedrevisions-param-end": "O timestamp no qual parar de enumerar. Ignorado ao processar uma lista de IDs de revisão.",
+ "apihelp-query+deletedrevisions-param-tag": "Lista apenas as revisões com esta tag.",
+ "apihelp-query+deletedrevisions-param-user": "Lista apenas revisões desse usuário.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Não lista as revisões deste usuário.",
+ "apihelp-query+deletedrevisions-example-titles": "Lista as revisões excluídas das páginas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, com conteúdo.",
+ "apihelp-query+deletedrevisions-example-revids": "Lista as informações para a revisão excluída <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Listar revisões excluídas.",
+ "apihelp-query+deletedrevs-extended-description": "Opera em três modos:\n# Lista revisões excluídas para os títulos fornecidos, ordenados por timestamp.\n# Lista contribuições eliminadas para o usuário fornecido, ordenadas por timestamp (sem títulos especificados).\n# Liste todas as revisões excluídas no espaço nominal dado, classificado por título e timestamp (sem títulos especificados, $1user não definido).\n \nCertos parâmetros aplicam-se apenas a alguns modos e são ignorados em outros.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+ "apihelp-query+deletedrevs-param-start": "A data a partir da qual começar a enumeração.",
+ "apihelp-query+deletedrevs-param-end": "A data onde parar a enumeração.",
+ "apihelp-query+deletedrevs-param-from": "Começar listando desse título.",
+ "apihelp-query+deletedrevs-param-to": "Parar a listagem neste título.",
+ "apihelp-query+deletedrevs-param-prefix": "Pesquisa por todo os título que começam com este valor.",
+ "apihelp-query+deletedrevs-param-unique": "Liste apenas uma revisão para cada página.",
+ "apihelp-query+deletedrevs-param-tag": "Lista apenas as revisões com esta tag.",
+ "apihelp-query+deletedrevs-param-user": "Lista apenas revisões desse usuário.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Não lista as revisões deste usuário.",
+ "apihelp-query+deletedrevs-param-namespace": "Lista apenas páginas neste espaço nominal.",
+ "apihelp-query+deletedrevs-param-limit": "A quantidade máxima de revisões para listar.",
+ "apihelp-query+deletedrevs-param-prop": "Quais as propriedades a serem obtidas: \n; revid: Adiciona a ID da revisão da revisão excluída.\n; parentid: Adiciona a ID da revisão da revisão anterior à página.\n;user: Adiciona o usuário que fez a revisão.\n; userid: Adiciona o ID do usuário que fez a revisão. \n; comment: Adiciona o comentário da revisão.\n; parsedcomment: Adiciona o comentário analisado da revisão.\n; minor: Etiqueta se a revisão for menor.\n; len: Adiciona o comprimento (bytes) da revisão.\n; sha1: Adiciona o SHA-1 (base 16) da revisão.\n; content: Adiciona o conteúdo da revisão.\n; token: <span class=\"apihelp-deprecated\">Depreciado.</span> Dá o token de edição.\n; tags: Tags para a revisão.",
+ "apihelp-query+deletedrevs-example-mode1": "Lista as últimas revisões excluídas das páginas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, com conteúdo (modo 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Lista as últimas 50 contribuições excluídas por <kbd>Bob</kbd> (modo 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Lista as primeiras 50 revisões excluídas no espaço nominal principal (modo 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Lista as primeiras 50 páginas excluídas no espaço nominal {{ns:talk}} (modo 3).",
+ "apihelp-query+disabled-summary": "Este módulo de consulta foi desativado.",
+ "apihelp-query+duplicatefiles-summary": "Liste todos os arquivos que são duplicatas dos arquivos fornecidos com base em valores de hash.",
+ "apihelp-query+duplicatefiles-param-limit": "Quantos arquivos duplicados retornar.",
+ "apihelp-query+duplicatefiles-param-dir": "A direção na qual listar.",
+ "apihelp-query+duplicatefiles-param-localonly": "Procure apenas arquivos no repositório local.",
+ "apihelp-query+duplicatefiles-example-simple": "Procurar por duplicatas de [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Procure duplicatas de todos os arquivos.",
+ "apihelp-query+embeddedin-summary": "Encontre todas as páginas que incorporam (transcluam) o título dado.",
+ "apihelp-query+embeddedin-param-title": "Título a se pesquisar. Não pode ser usado em conjunto com $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "ID da página para pesquisar. Não pode ser usado em conjunto com $1title.",
+ "apihelp-query+embeddedin-param-namespace": "O espaço nominal a se enumerar.",
+ "apihelp-query+embeddedin-param-dir": "A direção na qual listar.",
+ "apihelp-query+embeddedin-param-filterredir": "Como filtrar por redirecionamentos.",
+ "apihelp-query+embeddedin-param-limit": "Quantas páginas retornar.",
+ "apihelp-query+embeddedin-example-simple": "Mostrar páginas transcluíndo <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Obter informação sobre páginas transcluindo <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "Retorna todos os URLs externas (não interwikis) a partir das páginas dadas.",
+ "apihelp-query+extlinks-param-limit": "Quantos links retornar.",
+ "apihelp-query+extlinks-param-protocol": "Protocolo do URL. Se estiver vazio e <var>$1query</var> estiver definido, o protocolo é <kbd>http</kbd>. Deixe o anterior e <var>$1query </var> vazios para listar todos os links externos.",
+ "apihelp-query+extlinks-param-query": "Pesquisar string sem protocolo. Útil para verificar se uma determinada página contém uma determinada URL externa.",
+ "apihelp-query+extlinks-param-expandurl": "Expandir URLs relativos ao protocolo com o protocolo canônico.",
+ "apihelp-query+extlinks-example-simple": "Obter uma lista de links externos em <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "Enumere páginas que contenham um determinado URL.",
+ "apihelp-query+exturlusage-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Adiciona o ID da página.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Adiciona o título e o ID do espaço nominal da página.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Adiciona o URL usado na página.",
+ "apihelp-query+exturlusage-param-protocol": "Protocolo do URL. Se estiver vazio e <var>$1query</var> estiver definido, o protocolo é <kbd>http</kbd>. Deixe o anterior e <var>$1query </var> vazios para listar todos os links externos.",
+ "apihelp-query+exturlusage-param-query": "Sequência de pesquisa sem protocolo. Veja [[Special:LinkSearch]]. Deixe vazio para listar todos os links externos.",
+ "apihelp-query+exturlusage-param-namespace": "O espaço nominal das páginas para enumerar.",
+ "apihelp-query+exturlusage-param-limit": "Quantas páginas retornar.",
+ "apihelp-query+exturlusage-param-expandurl": "Expandir URLs relativos ao protocolo com o protocolo canônico.",
+ "apihelp-query+exturlusage-example-simple": "Mostra páginas vigiadas à <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "Enumerar todos os arquivos excluídos sequencialmente.",
+ "apihelp-query+filearchive-param-from": "O título da imagem do qual começar a enumeração.",
+ "apihelp-query+filearchive-param-to": "O título da imagem no qual parar a enumeração.",
+ "apihelp-query+filearchive-param-prefix": "Procure todos os títulos de imagens que começam com esse valor.",
+ "apihelp-query+filearchive-param-limit": "Quantas imagens retornar.",
+ "apihelp-query+filearchive-param-dir": "A direção na qual listar.",
+ "apihelp-query+filearchive-param-sha1": "SHA1 de imagem. Substitui $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "SHA1 de imagem na base 36 (usado em MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "Quais informação de imagem obter:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Adiciona o SHA-1 da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Adiciona o timestamp para a versão carregada.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Adiciona o usuário que carregou a versão da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Adiciona o tamanho da imagem em bytes e a altura, largura e contagem de páginas (se aplicável).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Apelido para tamanho.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Adiciona descrição da versão da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analise a descrição da versão.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Adiciona o tipo MIME da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Adiciona o tipo de mídia da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Lista metadados Exif para a versão da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Adiciona a profundidade de bits da versão.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Adiciona o nome do arquivo da versão arquivada para as versões não-mais recentes.",
+ "apihelp-query+filearchive-example-simple": "Mostrar uma lista de todos os arquivos excluídos.",
+ "apihelp-query+filerepoinfo-summary": "Retorna informações meta sobre repositórios de imagens configurados na wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Quais propriedades do repositório obter (pode haver mais disponível em algumas wikis):\n;apiurl: URL para a API do repositório - útil para obter informações de imagem do host.\n;name: A chave do repositório - usado em por exemplo, <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]] valores de retorno.\n;displayname: O legível para humanos do repositório wiki.\n;rooturl: URL raiz para caminhos de imagem.\n; local: Se esse repositório é o local ou não.",
+ "apihelp-query+filerepoinfo-example-simple": "Obter informações sobre repositórios de arquivos.",
+ "apihelp-query+fileusage-summary": "Encontre todas as páginas que usam os arquivos dados.",
+ "apihelp-query+fileusage-param-prop": "Quais propriedades obter:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "ID de cada página.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "O título de cada página.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Sinalizar se a página é um redirecionamento.",
+ "apihelp-query+fileusage-param-namespace": "Listar apenas páginas neste espaço nominal.",
+ "apihelp-query+fileusage-param-limit": "Quantos retornar.",
+ "apihelp-query+fileusage-param-show": "Mostre apenas itens que atendam a esses critérios.\n;redirect:Apenas mostra redirecionamentos.\n;!redirect:Não mostra redirecionamentos.",
+ "apihelp-query+fileusage-example-simple": "Obter uma lista de páginas usando [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Obter informação sobre páginas usando [[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "Retorna a informação do arquivo e o histórico de upload.",
+ "apihelp-query+imageinfo-param-prop": "Quais informações de arquivo para obter:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Adiciona o timestamp para a versão carregada.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Adiciona o usuário que carregou cada versão do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Adiciona a identificação do usuário que carregou cada versão do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Comente sobre a versão.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analise o comentário na versão.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Adiciona o título canônico do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Fornece o URL para o arquivo e a página de descrição.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Adiciona o tamanho do arquivo em bytes e a altura, largura e contagem de páginas (se aplicável).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Apelido para tamanho.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Adiciona o SHA-1 do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Adiciona o tipo MIME do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Adiciona o tipo MIME da miniatura da imagem (requer url e param $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Adiciona o tipo de mídia do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Lista metadados Exif para a versão do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Lista os metadados genéricos do formato de arquivo para a versão do arquivo.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Lista metadados formatados combinados de várias fontes. Os resultados são formatados em HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Adiciona o nome do arquivo da versão arquivada para as versões não-mais recentes.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Adiciona a profundidade de bits da versão.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Usado pela página Special:Upload para obter informações sobre um arquivo existente. Não está destinado a ser usado fora do núcleo do MediaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Adiciona se o arquivo está no [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "Quantas revisões de arquivos retornar por arquivo.",
+ "apihelp-query+imageinfo-param-start": "O timestamp do qual começar a enumeração.",
+ "apihelp-query+imageinfo-param-end": "Data e hora para a listagem.",
+ "apihelp-query+imageinfo-param-urlwidth": "Se $2prop=url estiver definido, um URL para uma imagem dimensionada para essa largura será retornado.\nPor motivos de desempenho, se essa opção for usada, não serão retornadas mais de $1 imagens dimensionadas.",
+ "apihelp-query+imageinfo-param-urlheight": "Semelhante a $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Versão dos metadados para usar. Se <kbd>latest</kbd> for especificado, use a versão mais recente. Por padrão, <kbd>1</kbd> para compatibilidade com versões anteriores.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Em qual idioma procurar por extmetadata. Isso afeta tanto a tradução a ser buscada, quanto várias estão disponíveis, bem como a forma como as coisas como números e vários valores são formatados.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Se as traduções para a propriedade extmetadata estiverem disponíveis, procure todas elas.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Se especificado e não vazio, apenas essas chaves serão retornadas para $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Uma sequência de parâmetro específico do manipulador. Por exemplo, PDFs podem usar <kbd>page15-100px</kbd>. <var>$1urlwidth</var> deve ser usado e ser consistente com <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Se <kbd>$2prop=badfile</kbd> estiver definido, este é o título da página usado ao avaliar a [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "Procure apenas arquivos no repositório local.",
+ "apihelp-query+imageinfo-example-simple": "Obtenha informações sobre a versão atual do [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Obtenha informações sobre versões do [[:File:Test.jpg]] a partir de 2008 e posterior.",
+ "apihelp-query+images-summary": "Retorna todos os arquivos contidos nas páginas fornecidas.",
+ "apihelp-query+images-param-limit": "Quantos arquivos retornar.",
+ "apihelp-query+images-param-images": "Apenas liste esses arquivos. Útil para verificar se uma determinada página possui um determinado arquivo.",
+ "apihelp-query+images-param-dir": "A direção na qual listar.",
+ "apihelp-query+images-example-simple": "Obter uma lista de arquivos usados na [[Main Page]].",
+ "apihelp-query+images-example-generator": "Obter informações sobre todos os arquivos usados na [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Encontre todas as páginas que usam o título da imagem dada.",
+ "apihelp-query+imageusage-param-title": "Título a se pesquisar. Não pode ser usado em conjunto com $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "ID da página para pesquisar. Não pode ser usado em conjunto com $1title.",
+ "apihelp-query+imageusage-param-namespace": "O espaço nominal a se enumerar.",
+ "apihelp-query+imageusage-param-dir": "A direção na qual listar.",
+ "apihelp-query+imageusage-param-filterredir": "Como filtrar para redirecionamentos. Se configurado para não-redirecionamentos quando $1redirect estiver habilitado, isso só é aplicado ao segundo nível.",
+ "apihelp-query+imageusage-param-limit": "Quantas páginas retornar. Se <var>$1redirect</var> estiver ativado, o limite se aplica a cada nível separadamente (o que significa até 2 * <var>$1limit</var> resultados podem ser retornados).",
+ "apihelp-query+imageusage-param-redirect": "Se a página de link for um redirecionamento, encontre todas as páginas que se liguem a esse redirecionamento também. O limite máximo é reduzido para metade.",
+ "apihelp-query+imageusage-example-simple": "Mostrar páginas usando [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Obter informação sobre páginas usando [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Obter informações básicas sobre a página.",
+ "apihelp-query+info-param-prop": "Quais propriedades adicionais obter:",
+ "apihelp-query+info-paramvalue-prop-protection": "Liste o nível de proteção de cada página.",
+ "apihelp-query+info-paramvalue-prop-talkid": "O ID da página de discussão para cada página de não-discussão.",
+ "apihelp-query+info-paramvalue-prop-watched": "Liste o estado de vigilância de cada página.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Número de observadores, se permitido.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "O número de observadores de cada página que visitou edições recentes para essa página, se permitido.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "O timestamp da notificação da lista de páginas vigiadas de cada página.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "O ID da página principal para cada página de discussão.",
+ "apihelp-query+info-paramvalue-prop-url": "Retorna um URL completo, de edição e o canônico para cada página.",
+ "apihelp-query+info-paramvalue-prop-readable": "Se o usuário pode ler esta página.",
+ "apihelp-query+info-paramvalue-prop-preload": "Fornece o texto retornado por EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece o modo como o título da página é exibido.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "Fornece o título de apresentação em todas as variantes da língua de conteúdo da wiki.",
+ "apihelp-query+info-param-testactions": "Testa se o usuário atual pode executar determinadas ações na página.",
+ "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] em vez.",
+ "apihelp-query+info-example-simple": "Obter informações sobre a página <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Obter informações gerais e de proteção sobre a página <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "Encontra todas as páginas que apontam para o link interwiki dado.",
+ "apihelp-query+iwbacklinks-extended-description": "Pode ser usado para encontrar todos os links com um prefixo, ou todos os links para um título (com um determinado prefixo). Usar nenhum parâmetro é efetivamente \"todos os links interwiki\".",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefixo para o interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Link interwiki para pesquisar. Deve ser usado com <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Quantas páginas retornar.",
+ "apihelp-query+iwbacklinks-param-prop": "Quais propriedades obter:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Adiciona o prefixo do interwiki.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Adiciona o título do interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "A direção na qual listar.",
+ "apihelp-query+iwbacklinks-example-simple": "Obter páginas apontando para [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Obter informações sobre páginas que ligam para [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Retorna todos os links interwiki das páginas fornecidas.",
+ "apihelp-query+iwlinks-param-url": "Obter o URL completo (não pode ser usado com $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Quais propriedades adicionais obter para cada link interlanguage:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Adiciona o URL completo.",
+ "apihelp-query+iwlinks-param-limit": "Quantos interwiki links a serem retornados.",
+ "apihelp-query+iwlinks-param-prefix": "Retornar apenas links interwiki com este prefixo.",
+ "apihelp-query+iwlinks-param-title": "Link interwiki para pesquisar por. Deve ser usado com <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "A direção na qual listar.",
+ "apihelp-query+iwlinks-example-simple": "Obtenha links interwiki da página <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Encontre todas as páginas que apontam para o link de idioma dado.",
+ "apihelp-query+langbacklinks-extended-description": "Pode ser usado para encontrar todos os links com um código de idioma ou todos os links para um título (com um determinado idioma). Usar nenhum dos parâmetros é efetivamente \"todos os links de linguagem\". \n\nNote que isso pode não considerar os links de idiomas adicionados por extensões.",
+ "apihelp-query+langbacklinks-param-lang": "Idioma para o link de idioma.",
+ "apihelp-query+langbacklinks-param-title": "Link de idioma para procurar. Deve ser usado com $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Quantas páginas retornar.",
+ "apihelp-query+langbacklinks-param-prop": "Quais propriedades obter:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Adiciona o código de idioma do link de idioma.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Adiciona o título do link de idioma.",
+ "apihelp-query+langbacklinks-param-dir": "A direção na qual listar.",
+ "apihelp-query+langbacklinks-example-simple": "Obter páginas apontando para [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Obter informações sobre páginas que ligam para [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Retorna todos os links interlanguage das páginas fornecidas.",
+ "apihelp-query+langlinks-param-limit": "Quantos links de idioma retornar.",
+ "apihelp-query+langlinks-param-url": "Obter o URL completo (não pode ser usado com <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Quais propriedades adicionais obter para cada link interlanguage:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Adiciona o URL completo.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Adiciona o nome do idioma localizado (melhor esforço). Use <var>$1inlanguagecode</var> para controlar o idioma.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Adiciona o nome do idioma nativo.",
+ "apihelp-query+langlinks-param-lang": "Retornar apenas os links de idioma com este código de idioma.",
+ "apihelp-query+langlinks-param-title": "Link para pesquisar. Deve ser usado com <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "A direção na qual listar.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Código de idioma para nomes de idiomas localizados.",
+ "apihelp-query+langlinks-example-simple": "Obter links de interligação da página <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Retorna todos os links das páginas fornecidas.",
+ "apihelp-query+links-param-namespace": "Mostre apenas links nesses espaços de nominais.",
+ "apihelp-query+links-param-limit": "Quantos links retornar.",
+ "apihelp-query+links-param-titles": "Apenas lista links para esses títulos. Útil para verificar se uma determinada página liga a um certo título.",
+ "apihelp-query+links-param-dir": "A direção na qual listar.",
+ "apihelp-query+links-example-simple": "Obter links da página <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Obter informações sobre os links de páginas na página <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Obter links da página <kbd>Main Page</kbd> nos espaços nominais {{ns:user}} e {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Encontre todas as páginas que apontam para as páginas dadas.",
+ "apihelp-query+linkshere-param-prop": "Quais propriedades obter:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "ID de cada página.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "O título de cada página.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Sinalizar se a página é um redirecionamento.",
+ "apihelp-query+linkshere-param-namespace": "Listar apenas páginas neste espaço nominal.",
+ "apihelp-query+linkshere-param-limit": "Quantos retornar.",
+ "apihelp-query+linkshere-param-show": "Mostre apenas itens que atendam a esses critérios.\n;redirect:Apenas mostra redirecionamentos.\n;!redirect:Não mostra redirecionamentos.",
+ "apihelp-query+linkshere-example-simple": "Obter uma lista de páginas que ligam para a [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Obter informações sobre páginas que ligam para [[Main Page]].",
+ "apihelp-query+logevents-summary": "Recuperar eventos dos logs.",
+ "apihelp-query+logevents-param-prop": "Quais propriedades obter:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Adiciona o ID do log de eventos.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Adiciona o título da página para o log de eventos.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Adiciona o tipo do log de eventos.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Adiciona o usuário responsável pelo evento de log.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Adiciona o ID do usuário responsável pelo evento de log.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Adiciona o timestamp para o log de eventos.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Adiciona o comentário do evento de log.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Adiciona o comentário analisado do log de eventos.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Lista detalhes adicionais sobre o evento de log.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Lista as tags para o evento de log.",
+ "apihelp-query+logevents-param-type": "Filtre as entradas de log para apenas esse tipo.",
+ "apihelp-query+logevents-param-action": "Filtre as ações de log para apenas essa ação. Substitui <var>$1type</var>. Na lista de valores possíveis, os valores com asterisco, como <kbd>action/*</kbd>, podem ter strings diferentes após a barra (/).",
+ "apihelp-query+logevents-param-start": "A data a partir da qual começar a enumeração.",
+ "apihelp-query+logevents-param-end": "O timestamp para terminar de enumerar.",
+ "apihelp-query+logevents-param-user": "Filtrar entradas para aquelas feitas pelo usuário fornecido.",
+ "apihelp-query+logevents-param-title": "Filtre as entradas para aquelas relacionadas a uma página.",
+ "apihelp-query+logevents-param-namespace": "Filtrar as entradas para aqueles no espaço nominal fornecido.",
+ "apihelp-query+logevents-param-prefix": "Filtrar as entradas que começam com este prefixo.",
+ "apihelp-query+logevents-param-tag": "Apenas lista as entradas de eventos marcadas com esta etiqueta.",
+ "apihelp-query+logevents-param-limit": "Quantas entradas de eventos a serem retornadas.",
+ "apihelp-query+logevents-example-simple": "Listar os eventos recentes do registo.",
+ "apihelp-query+pagepropnames-summary": "Liste todos os nomes de propriedade da página em uso na wiki.",
+ "apihelp-query+pagepropnames-param-limit": "O número máximo de nomes a retornar.",
+ "apihelp-query+pagepropnames-example-simple": "Obtenha os primeiros 10 nomes de propriedade.",
+ "apihelp-query+pageprops-summary": "Obter várias propriedades da página definidas no conteúdo da página.",
+ "apihelp-query+pageprops-param-prop": "Apenas liste as propriedades desta página (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> retorna nomes de propriedade da página em uso). Útil para verificar se as páginas usam uma determinada propriedade da página.",
+ "apihelp-query+pageprops-example-simple": "Obter propriedades para as páginas <kbd>Main Page</kbd> e <kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "Liste todas as páginas usando uma propriedade de página determinada.",
+ "apihelp-query+pageswithprop-param-propname": "Propriedade da página para a qual enumeram páginas (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> retorna nomes de propriedade da página em uso).",
+ "apihelp-query+pageswithprop-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Adiciona o ID da página.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Adiciona o título e o ID do espaço nominal da página.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Adiciona o valor da propriedade da página.",
+ "apihelp-query+pageswithprop-param-limit": "O número máximo de páginas para retornar.",
+ "apihelp-query+pageswithprop-param-dir": "Em qual sentido ordenar.",
+ "apihelp-query+pageswithprop-example-simple": "Lista as primeiras 10 páginas usando <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Obter informações adicionais sobre as primeiras 10 páginas usando <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Execute uma pesquisa de prefixo para títulos de página.",
+ "apihelp-query+prefixsearch-extended-description": "Apesar da semelhança nos nomes, este módulo não se destina a ser equivalente a[[Special:PrefixIndex]]; para isso, veja <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> com o parâmetro <kbd>apprefix</kbd>.O propósito deste módulo é semelhante a <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: para inserir o usuário e fornecer os títulos de melhor correspondência. Dependendo do backend do mecanismo de pesquisa, isso pode incluir correção de digitação, evasão de redirecionamento ou outras heurísticas.",
+ "apihelp-query+prefixsearch-param-search": "Pesquisar string.",
+ "apihelp-query+prefixsearch-param-namespace": "Os espaços nominais onde realizar a pesquisa. Ignorados se <var>$1search</var> começar com um prefixo de espaço nominal válido.",
+ "apihelp-query+prefixsearch-param-limit": "Número máximo de resultados.",
+ "apihelp-query+prefixsearch-param-offset": "Número de resultados a ignorar.",
+ "apihelp-query+prefixsearch-example-simple": "Procure títulos de páginas começando com <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Pesquisar perfil para usar.",
+ "apihelp-query+protectedtitles-summary": "Liste todos os títulos protegidos contra criação.",
+ "apihelp-query+protectedtitles-param-namespace": "Somente lista títulos nesses espaços de nominais.",
+ "apihelp-query+protectedtitles-param-level": "Lista apenas os títulos com esses níveis de proteção.",
+ "apihelp-query+protectedtitles-param-limit": "Quantas páginas retornar.",
+ "apihelp-query+protectedtitles-param-start": "Iniciar a listar neste timestamp de proteção.",
+ "apihelp-query+protectedtitles-param-end": "Pare de listar neste timestamp de proteção.",
+ "apihelp-query+protectedtitles-param-prop": "Quais propriedades obter:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Adiciona o timestamp de quando a proteção foi adicionada.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Adiciona o usuário que adicionou a proteção.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Adiciona a ID do usuário que adicionou a proteção.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Adiciona o comentário para a proteção.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Adiciona o comentário analisado para a proteção.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Adiciona o timestamp de quando a proteção será encerrada.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Adicionar o nível de proteção.",
+ "apihelp-query+protectedtitles-example-simple": "Listar títulos protegidos.",
+ "apihelp-query+protectedtitles-example-generator": "Encontre links para títulos protegidos no espaço nominal principal.",
+ "apihelp-query+querypage-summary": "Obter uma lista fornecida por uma página especial baseada em QueryPage.",
+ "apihelp-query+querypage-param-page": "O nome da página especial. Note, isso diferencia maiúsculas de minúsculas.",
+ "apihelp-query+querypage-param-limit": "Número de resultados a se retornado.",
+ "apihelp-query+querypage-example-ancientpages": "Retorna resultados de [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Obter um conjunto de páginas aleatórias.",
+ "apihelp-query+random-extended-description": "As páginas são listadas em uma sequência fixa, apenas o ponto de partida é aleatório. Isso significa que, se, por exemplo, <samp>Main Page</samp> é a primeira página aleatória da lista, <samp>List of fictional monkeys</samp> será <em>sempre</em> a segunda, <samp>List of people on stamps of Vanuatu</samp> terceiro, etc.",
+ "apihelp-query+random-param-namespace": "Retorne páginas apenas nesses espaços nominais.",
+ "apihelp-query+random-param-limit": "Limita quantas páginas aleatórias serão retornadas.",
+ "apihelp-query+random-param-redirect": "Use <kbd>$1filterredir=redirects</kbd> em vez.",
+ "apihelp-query+random-param-filterredir": "Como filtrar por redirecionamentos.",
+ "apihelp-query+random-example-simple": "Retorna duas páginas aleatórias do espaço nominal principal.",
+ "apihelp-query+random-example-generator": "Retorna informações da página sobre duas páginas aleatórias do espaço nominal principal.",
+ "apihelp-query+recentchanges-summary": "Enumere as mudanças recentes.",
+ "apihelp-query+recentchanges-param-start": "A data a partir da qual começar a enumeração.",
+ "apihelp-query+recentchanges-param-end": "O timestamp para terminar de enumerar.",
+ "apihelp-query+recentchanges-param-namespace": "Filtrar apenas as mudanças destes espaços nominais.",
+ "apihelp-query+recentchanges-param-user": "Listar apenas alterações deste usuário.",
+ "apihelp-query+recentchanges-param-excludeuser": "Não listar as alterações deste usuário.",
+ "apihelp-query+recentchanges-param-tag": "Listar apenas as alterações marcadas com esta etiqueta.",
+ "apihelp-query+recentchanges-param-prop": "Incluir elementos de informação adicional:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Adiciona o usuário responsável pela edição e marca se ele é um IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Adiciona o ID do usuário responsável pela edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Adiciona o comentário para a edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Adiciona o comentário analisado para a edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Adiciona etiquetas para a edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Adiciona o timestamp da edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Adiciona o título da página da edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Adiciona o ID da página, das alterações recentes e dA revisão nova e antiga.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Adiciona o comprimento novo e antigo da página em bytes.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Etiqueta a edição se a página é um redirecionamento.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiquete edições patrulháveis como sendo patrulhadas ou não-patrulhadas.",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "Etiqueta as edições que podem ser patrulhadas, marcando-as como autopatrulhadas ou não.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Adiciona informações de registro (ID de registro, tipo de registro, etc.) às entradas do log.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Listar as etiquetas para a entrada.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Adiciona o checksum do conteúdo para entradas associadas a uma revisão.",
+ "apihelp-query+recentchanges-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> em vez.",
+ "apihelp-query+recentchanges-param-show": "Mostre apenas itens que atendam a esses critérios. Por exemplo, para ver apenas edições menores feitas por usuários conectados, set $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Quantas alterações a serem retornadas.",
+ "apihelp-query+recentchanges-param-type": "Quais tipos de mudanças mostrar.",
+ "apihelp-query+recentchanges-param-toponly": "Somente lista as alterações que são as últimas revisões.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Quando usado como gerador, gere IDs de revisão em vez de títulos. As entradas de alterações recentes sem IDs de revisão associadas (por exemplo, a maioria das entradas de log) não gerarão nada.",
+ "apihelp-query+recentchanges-example-simple": "Listar mudanças recentes.",
+ "apihelp-query+recentchanges-example-generator": "Obter informações da página sobre as mudanças recentes não patrulhadas.",
+ "apihelp-query+redirects-summary": "Retorna todos os redirecionamentos para as páginas indicadas.",
+ "apihelp-query+redirects-param-prop": "Quais propriedades obter:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "ID de cada redirecionamento.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Título de cada redirecionamento.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Fragmento de cada redirecionamento, se há algum.",
+ "apihelp-query+redirects-param-namespace": "Listar apenas páginas neste espaço nominal.",
+ "apihelp-query+redirects-param-limit": "Quantos redirecionamentos a serem retornados.",
+ "apihelp-query+redirects-param-show": "Mostrar apenas itens que atendam a esses critérios:\n; fragment: mostra apenas redirecionamentos com um fragmento.\n;!fragment: mostra apenas redirecionamentos sem um fragmento.",
+ "apihelp-query+redirects-example-simple": "Obter uma lista de redirecionamento para [[Main Page]].",
+ "apihelp-query+redirects-example-generator": "Obter informações sobre todos os redirecionamentos para a [[Main Page]].",
+ "apihelp-query+revisions-summary": "Obter informações de revisão.",
+ "apihelp-query+revisions-extended-description": "Pode ser usado de várias maneiras:\n#Obter dados sobre um conjunto de páginas (última revisão), definindo títulos ou pageids.\n# Obter revisões para uma página determinada, usando títulos ou pageids com início, fim ou limite.\n# Obter dados sobre um conjunto de revisões, definindo seus IDs com revids.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Só pode ser usado com uma única página (modo #2).",
+ "apihelp-query+revisions-param-startid": "Comece a enumeração do timestamp desta revisão. A revisão deve existir, mas não precisa pertencer a esta página.",
+ "apihelp-query+revisions-param-endid": "Pare a enumeração no timestamp desta revisão. A revisão deve existir, mas não precisa pertencer a esta página.",
+ "apihelp-query+revisions-param-start": "De qual timestamp de revisão iniciar a enumeração.",
+ "apihelp-query+revisions-param-end": "Enumerar até este timestamp.",
+ "apihelp-query+revisions-param-user": "Somente incluir revisões feitas pelo usuário.",
+ "apihelp-query+revisions-param-excludeuser": "Excluir revisões feitas pelo usuário.",
+ "apihelp-query+revisions-param-tag": "Lista apenas as revisões com esta tag.",
+ "apihelp-query+revisions-param-token": "Que tokens obter para cada revisão.",
+ "apihelp-query+revisions-example-content": "Obter dados com conteúdo para a última revisão de títulos <kbd>API</kbd> e <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Mostrar as 5 últimas revisões da <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Mostrar as 5 primeiras revisões da <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Mostrar as 5 primeiras revisões da <kbd>Main Page</kbd> feitas depois de 05/01/2006.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Mostrar as 5 primeiras revisões da <kbd>Main Page</kbd> que não foram feitas pelo usuário anônimo <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Mostrar as 5 primeiras revisões da <kbd>Main Page</kbd> que foram feitas pelo usuário <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Quais propriedades mostrar para cada modificação:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "O ID da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Etiqueta de revisão (menor).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "O timestamp da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Usuário que fez a revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "ID de usuário do criador da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Comprimento (bytes) da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "ID do modelo de conteúdo da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Comentário do usuário para a revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Analisar comentário do usuário para a revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Texto da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Etiquetas para a revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Obsoleto.</span> Use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> em vez. A árvore de análise XML de conteúdo da revisão (requer o modelo de conteúdo <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Limita quantas revisões serão retornadas.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> em vez disso. Expande predefinições no conteúdo de revisão (requer $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> em vez disso. Gerar árvore de analise XML para o conteúdo de revisão (requer $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Use <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> em vez disso. Analisa o conteúdo da revisão (requer $1prop=content). Por motivos de desempenho, se esta opção for usada, $1limit é definindo para 1.",
+ "apihelp-query+revisions+base-param-section": "Apenas recuperar o conteúdo deste número de seção.",
+ "apihelp-query+revisions+base-param-diffto": "Use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> em vez disso. ID de revisão para diff cada revisão. Use <kbd>prev</kbd>, <kbd>next</kbd> e <kbd>cur</kbd> para a revisão anterior, próxima e atual, respectivamente.",
+ "apihelp-query+revisions+base-param-difftotext": "Use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> em vez disso. Texto para diff cada revisão. Apenas diff um número limitado de revisões. Substitui <var>$1diffto</var>. Se <var>$1section</var> estiver definido, apenas essa seção será diferente desse texto.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> em vez disso. Executa uma transformação pré-salvar no texto antes de o difundir. Apenas válido quando usado com <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "Formato de serialização usado para <var>$1difftotext</var> e esperado para saída de conteúdo.",
+ "apihelp-query+search-summary": "Fazer uma buscar completa de texto.",
+ "apihelp-query+search-param-search": "Procura por títulos de páginas ou conteúdo que corresponda a este valor. Você pode usar a sequência de pesquisa para invocar recursos de pesquisa especiais, dependendo do que implementa o backend de pesquisa da wiki.",
+ "apihelp-query+search-param-namespace": "Procure apenas nesses espaços de nominais.",
+ "apihelp-query+search-param-what": "Qual tipo de pesquisa realizada.",
+ "apihelp-query+search-param-info": "Quais metadados retornar.",
+ "apihelp-query+search-param-prop": "Que propriedades retornar:",
+ "apihelp-query+search-param-qiprofile": "Perfil independente da consulta para usar (afeta o algoritmo de classificação).",
+ "apihelp-query+search-paramvalue-prop-size": "Adiciona o tamanho da página em bytes.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Adiciona a contagem de palavras da página.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Adiciona a marcação de data (timestamp) de quando a página foi editada pela última vez.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Adiciona um fragmento analisado da página.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Adiciona um fragmento analisado do título da página.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Adiciona um fragmento analisado do redirecionamento do título.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Adiciona o título do redirecionamento correspondente.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Adiciona um parsed snippet do título da seção correspondente.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Adiciona o título da seção correspondente.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Adiciona um parsed snippet da categoria correspondente.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Adiciona um booleano que indica se a pesquisa corresponde ao conteúdo do arquivo.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignorado.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignorado.",
+ "apihelp-query+search-param-limit": "Quantas páginas retornar.",
+ "apihelp-query+search-param-interwiki": "Inclua resultados de interwiki na pesquisa, se disponível.",
+ "apihelp-query+search-param-backend": "Qual o backend de pesquisa a ser usado, se não for o padrão.",
+ "apihelp-query+search-param-enablerewrites": "Habilita a reescrita de consulta interna. Alguns backends de pesquisa podem reescrever a consulta em outro que é pensado para fornecer melhores resultados, por exemplo, corrigindo erros de ortografia.",
+ "apihelp-query+search-example-simple": "Procurar por <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Procurar textos para <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Obter informações da página sobre as páginas retornadas para uma pesquisa por <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Retorna informações gerais sobre o site.",
+ "apihelp-query+siteinfo-param-prop": "Quais informação obter:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Informação geral do sistema.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista de espaços nominais registrados e seus nomes canônicos.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista de aliases dos espaços nominais registrados.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista de alias de página especiais.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista de palavras mágicas e seus alias.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Voltar às estatísticas do site.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Retorna o mapa interwiki (opcionalmente filtrado, opcionalmente localizado usando <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Retorna o servidor de banco de dados com o atraso de replicação mais alto.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Retorna os grupos de usuários e as permissões associadas.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Retorna as bibliotecas instaladas na wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Retorna as extensões instaladas na wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Retorna um lista de extensões de arquivo (tipos de arquivo) permitidos para serem carregados.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Retorna a informação sobre os direitos wiki (licença), se disponível.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Retorna informações sobre os tipos de restrição (proteção) disponíveis.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Retorna uma lista de idiomas suportada pelo MediaWiki (opcionalmente localizada usando <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Retorna uma lista de códigos de idioma para os quais [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] está ativado e as variantes suportadas para cada um.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Retorna uma lista de todas as skins protegidas (opcionalmente localizadas usando <var>$1inlanguagecode</var>, caso contrário no idioma do conteúdo).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Retorna uma lista de tags de extensão do analisador.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Retorna uma lista de ganchos de função do analisador.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Retorna uma lista de todos os ganchos subscritos (conteúdo de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Retorna uma lista de IDs variáveis.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Retorna uma lista de protocolos que são permitidos em links externos.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Retorna os valores padrão para as preferências do usuário.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Retorna a configuração da caixa de diálogo de upload.",
+ "apihelp-query+siteinfo-param-filteriw": "Retorna apenas entradas locais ou únicas não locais do mapa interwiki.",
+ "apihelp-query+siteinfo-param-showalldb": "Liste todos os servidores de banco de dados, e não apenas o que está atrasando.",
+ "apihelp-query+siteinfo-param-numberingroup": "Listar o número de usuários nos grupos de usuário.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Código de idioma para nomes de idiomas localizados (melhor esforço) e nomes de skin.",
+ "apihelp-query+siteinfo-example-simple": "Obter informação do site.",
+ "apihelp-query+siteinfo-example-interwiki": "Obtenha uma lista de prefixos interwiki locais.",
+ "apihelp-query+siteinfo-example-replag": "Verificar o atraso de replicação atual.",
+ "apihelp-query+stashimageinfo-summary": "Retorna a informação do arquivo para arquivos stashed.",
+ "apihelp-query+stashimageinfo-param-filekey": "Chave que identifica um upload anterior que foi temporariamente armazenado.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Apelido para $1filekey, para compatibilidade com versões anteriores.",
+ "apihelp-query+stashimageinfo-example-simple": "Retorna informações de um arquivo stashed.",
+ "apihelp-query+stashimageinfo-example-params": "Retorna as miniaturas para dois arquivos stashed.",
+ "apihelp-query+tags-summary": "Lista etiquetas da modificação.",
+ "apihelp-query+tags-param-limit": "O número máximo de tags a serem listadas.",
+ "apihelp-query+tags-param-prop": "Quais propriedades obter:",
+ "apihelp-query+tags-paramvalue-prop-name": "Adiciona o nome da tag.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Adiciona mensagem do sistema para a tag.",
+ "apihelp-query+tags-paramvalue-prop-description": "Adiciona descrição da tag.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Adiciona o número de revisões e entradas do log que tem esta tag.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Indique se a etiqueta está definida.",
+ "apihelp-query+tags-paramvalue-prop-source": "Obtém as fontes da etiqueta, que podem incluir <samp>extension</samp> para tags definidas em extensão e <samp>extension</samp> para tags que podem ser aplicadas manualmente pelos usuários.",
+ "apihelp-query+tags-paramvalue-prop-active": "Se a tag ainda está sendo aplicada.",
+ "apihelp-query+tags-example-simple": "Listar as tags disponíveis.",
+ "apihelp-query+templates-summary": "Mostrar apenas as alterações nas páginas associadas desta página.",
+ "apihelp-query+templates-param-namespace": "Mostra as predefinições neste espaços nominais apenas.",
+ "apihelp-query+templates-param-limit": "Quantas predefinições retornar.",
+ "apihelp-query+templates-param-templates": "Apenas liste essas predefinições. Útil para verificar se uma determinada página usa uma determinada predefinição.",
+ "apihelp-query+templates-param-dir": "A direção na qual listar.",
+ "apihelp-query+templates-example-simple": "Obter predefinições usadas na página <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Obter informações sobre as páginas de predefinições usada na <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Obter páginas nos espaços nominais {{ns: user}} e {{ns: template}} que são transcluídos na página <kbd>Main Page</kbd>.",
+ "apihelp-query+tokens-summary": "Obtém tokens para ações de modificação de dados.",
+ "apihelp-query+tokens-param-type": "Tipos de token para solicitar.",
+ "apihelp-query+tokens-example-simple": "Recupere um token csrf (o padrão).",
+ "apihelp-query+tokens-example-types": "Recupere um token de vigilância e um token de patrulha.",
+ "apihelp-query+transcludedin-summary": "Encontre todas as páginas que transcluam as páginas dadas.",
+ "apihelp-query+transcludedin-param-prop": "Quais propriedades obter:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID de cada página.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "O título de cada página.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Sinalizar se a página é um redirecionamento.",
+ "apihelp-query+transcludedin-param-namespace": "Listar apenas páginas neste espaço nominal.",
+ "apihelp-query+transcludedin-param-limit": "Quantos retornar.",
+ "apihelp-query+transcludedin-param-show": "Mostre apenas itens que atendam a esses critérios.\n;redirect:Apenas mostra redirecionamentos.\n;!redirect:Não mostra redirecionamentos.",
+ "apihelp-query+transcludedin-example-simple": "Obter uma lista de páginas que transcluem <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Obter informações sobre páginas que transcluem <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "Obtêm todas as edições de um usuário.",
+ "apihelp-query+usercontribs-param-limit": "O número máximo de contribuições para retornar.",
+ "apihelp-query+usercontribs-param-start": "O timestamp de início para retornar.",
+ "apihelp-query+usercontribs-param-end": "O timestamp final para retornar.",
+ "apihelp-query+usercontribs-param-user": "Os usuários dos quais recuperar contribuições. Não pode ser usado com <var>$1userids</var> ou <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Recupera contribuições para todos os usuários cujos nomes começam com esse valor. Não pode ser usado com <var>$1user</var> ou <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "As IDs de usuário das quais recuperar as contribuições. Não pode ser usado com<var>$1user</var> ou <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Apenas lista as contribuições nesses espaços nominais.",
+ "apihelp-query+usercontribs-param-prop": "Incluir elementos de informação adicional:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Adiciona o ID da página e revisão.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Adiciona o título e o ID do espaço nominal da página.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Adiciona o timestamp da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Adiciona o comentário da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Adiciona o comentário analisado da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Adiciona o novo tamanho da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Adiciona o tamanho delta da edição contra o seu pai.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Adiciona etiqueta da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiquetas de edições patrulhadas.",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "Etiqueta as edições autopatrulhadas.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista as tags para editar.",
+ "apihelp-query+usercontribs-param-show": "Mostre apenas itens que atendam a esses critérios, por exemplo, apenas edições não-menores: <kbd>$2show=!minor</kbd>.\n\nSe <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> estiver definido, revisões mais antigas do que <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) não serão exibidas.",
+ "apihelp-query+usercontribs-param-tag": "Lista apenas as revisões com esta tag.",
+ "apihelp-query+usercontribs-param-toponly": "Somente lista as alterações que são as últimas revisões.",
+ "apihelp-query+usercontribs-example-user": "Mostra as contribuições do usuário <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Mostrar contribuições de todos os endereços IP com o prefixo <kbd>192.0.2.</Kbd>.",
+ "apihelp-query+userinfo-summary": "Ober informações sobre o usuário atual.",
+ "apihelp-query+userinfo-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Etiqueta se o usuário atual está bloqueado, por quem e por que motivo.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Adiciona a tag <samp>messages</samp> se o usuário atual tiver mensagens pendentes.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos os grupos aos quais o usuário atual pertence.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Lista grupos aos quais o usuário atual foi explicitamente designado, incluindo a data de expiração de cada associação de grupo.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lista todos os grupos aos quais o usuário atual é automaticamente membro.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todos os direitos que o usuário atual possui.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lista os grupos aos quais o usuário atual pode adicionar e remover.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas as preferências que o usuário atual estabeleceu.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Obter um token para alterar as preferências do usuário atual.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Adiciona a contagem de edições do usuário atual.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todos os limites de taxa aplicáveis ao usuário atual.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Adiciona o nome real do usuário.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Adiciona o endereço de e-mail e a data de autenticação do e-mail.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Ecoa o cabeçalho <code>Accept-Language</code> enviado pelo cliente em um formato estruturado.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Adiciona a data de registro do usuário.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Adiciona a contagem de páginas não lidas na lista de páginas vigiadas do usuário (máximo $1; retorna <samp>$2</samp> se mais).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "Adiciona os IDs centrais e o status do anexo do usuário.",
+ "apihelp-query+userinfo-param-attachedwiki": "Com <kbd>$1prop=centralids</kbd>, indique se o usuário está conectado com a wiki identificada por este ID.",
+ "apihelp-query+userinfo-example-simple": "Ober informações sobre o usuário atual.",
+ "apihelp-query+userinfo-example-data": "Obter informações adicionais sobre o usuário atual.",
+ "apihelp-query+users-summary": "Obter informação sobre uma lista de usuários.",
+ "apihelp-query+users-param-prop": "Quais peças de informação incluir:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Etiqueta se o usuário estiver bloqueado, por quem e por que motivo.",
+ "apihelp-query+users-paramvalue-prop-groups": "Lista todos os grupos aos quais cada usuário pertence.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "Lista grupos aos quais cada usuário foi explicitamente designado, incluindo a data de expiração de cada associação de grupo.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Lista todos os grupos aos quais um usuário é automaticamente membro.",
+ "apihelp-query+users-paramvalue-prop-rights": "Lista todos os direitos que cada usuário possui.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Adiciona a contagem de edição do usuário.",
+ "apihelp-query+users-paramvalue-prop-registration": "Adiciona o timestamp de registro do usuário.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Etiquetar se o usuário pode e deseja receber e-mails através de [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Etiqueta o gênero do usuário. Retorna \"male\", \"female\" ou \"unknown\".",
+ "apihelp-query+users-paramvalue-prop-centralids": "Adiciona os IDs centrais e o status do anexo do usuário.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Indica se uma conta para nomes de usuário válidos mas não registrados pode ser criada.",
+ "apihelp-query+users-param-attachedwiki": "Com <kbd>$1prop=centralids</kbd>, indique se o usuário está conectado com a wiki identificada por este ID.",
+ "apihelp-query+users-param-users": "Uma lista de usuários dos quais obter informações.",
+ "apihelp-query+users-param-userids": "Uma lista de IDs de usuários dos quais obter informações.",
+ "apihelp-query+users-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> em vez.",
+ "apihelp-query+users-example-simple": "Retornar informações para o usuário <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "Obter alterações recentes nas páginas da lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlist-param-allrev": "Inclua várias revisões da mesma página dentro de um prazo determinado.",
+ "apihelp-query+watchlist-param-start": "A data a partir da qual começar a enumeração.",
+ "apihelp-query+watchlist-param-end": "O timestamp para terminar de enumerar.",
+ "apihelp-query+watchlist-param-namespace": "Filtrar apenas as mudanças dos espaços nominais dados.",
+ "apihelp-query+watchlist-param-user": "Listar apenas alterações deste usuário.",
+ "apihelp-query+watchlist-param-excludeuser": "Não listar as alterações deste usuário.",
+ "apihelp-query+watchlist-param-limit": "Quantos resultados retornar por solicitação.",
+ "apihelp-query+watchlist-param-prop": "Quais propriedades adicionais obter:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Adiciona o ID de revisão e de página.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Adiciona o título da página.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Adiciona etiquetas para a edição.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Adiciona o usuário que fez a edição.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Adiciona o ID de usuário de quem fez a edição.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Adicionar comentário à edição.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Adiciona o comentário analisado da edição.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Adiciona o timestamp da edição.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Edições de tags que são patrulhadas.",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "Etiqueta que indica as edições que são autopatrulhadas.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Adiciona os velhos e novos comprimentos da página.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Adiciona o timestamp de quando o usuário foi notificado pela última vez sobre a edição.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Adiciona informações de log, quando apropriado.",
+ "apihelp-query+watchlist-param-show": "Mostre apenas itens que atendam a esses critérios. Por exemplo, para ver apenas edições menores feitas por usuários conectados, set $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Quais tipos de mudanças mostrar:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Edições comuns nas páginas.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Alterações externas.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Criação de páginas.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Registro de entradas.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Alterações de membros pertencentes à uma categoria.",
+ "apihelp-query+watchlist-param-owner": "Usado juntamente com $1 para acessar a lista de páginas vigiadas de um usuário diferente.",
+ "apihelp-query+watchlist-param-token": "Um token seguro (disponível nas [[Special:Preferences#mw-prefsection-watchlist|preferências]] do usuário) para permitir o acesso à lista de páginas vigiadas de outro usuário.",
+ "apihelp-query+watchlist-example-simple": "Liste a revisão superior para páginas recentemente alteradas na lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlist-example-props": "Obtenha informações adicionais sobre a revisão superior das páginas alteradas recentemente na lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlist-example-allrev": "Obtenha informações sobre todas as mudanças recentes nas páginas da lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlist-example-generator": "Obtenha informações de página para páginas recentemente alteradas na lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlist-example-generator-rev": "Obtenha informações de revisão para as mudanças recentes nas páginas da lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlist-example-wlowner": "Listar a revisão superior para páginas alteradas recentemente na lista de páginas vigiadas do usuário <kbd>Exemplo</ kbd>.",
+ "apihelp-query+watchlistraw-summary": "Obtenha todas as páginas da lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlistraw-param-namespace": "Listar apenas páginas dos espaços nominais dados.",
+ "apihelp-query+watchlistraw-param-limit": "Quantos resultados retornar por solicitação.",
+ "apihelp-query+watchlistraw-param-prop": "Quais propriedades adicionais obter:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Adiciona o timestamp de quando o usuário foi notificado pela última vez sobre a edição.",
+ "apihelp-query+watchlistraw-param-show": "Listar apenas itens que atendam a esses critérios.",
+ "apihelp-query+watchlistraw-param-owner": "Usado juntamente com $1 para acessar a lista de páginas vigiadas de um usuário diferente.",
+ "apihelp-query+watchlistraw-param-token": "Um token seguro (disponível nas [[Special:Preferences#mw-prefsection-watchlist|preferências]] do usuário) para permitir o acesso à lista de páginas vigiadas de outro usuário.",
+ "apihelp-query+watchlistraw-param-dir": "A direção na qual listar.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Título (com prefixo do espaço nominal) do qual começar a enumerar.",
+ "apihelp-query+watchlistraw-param-totitle": "Título (com prefixo do espaço nominal) do qual parar de enumerar.",
+ "apihelp-query+watchlistraw-example-simple": "Listar páginas da lista de páginas vigiadas do usuário atual.",
+ "apihelp-query+watchlistraw-example-generator": "Obtenha informações de página para páginas na lista de páginas vigiadas do usuário atual.",
+ "apihelp-removeauthenticationdata-summary": "Remova os dados de autenticação para o usuário atual.",
+ "apihelp-removeauthenticationdata-example-simple": "Tente remover os dados do usuário atual para <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Envia um e-mail de redefinição de senha para o usuário atual.",
+ "apihelp-resetpassword-extended-description-noroutes": "Não há rotas de redefinição de senha disponíveis.\n\nAtive rotas em <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> para usar este módulo.",
+ "apihelp-resetpassword-param-user": "Usuário sendo reiniciado.",
+ "apihelp-resetpassword-param-email": "Endereço de e-mail do usuário sendo redefinido.",
+ "apihelp-resetpassword-example-user": "Envia um e-mail de redefinição de senha para o usuário <kbd>Example</kbd>.",
+ "apihelp-resetpassword-example-email": "Envia um e-mail de redefinição de senha para todos os usuários com e-mail <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Excluir e recuperar revisões.",
+ "apihelp-revisiondelete-param-type": "Tipo de exclusão de revisão em execução.",
+ "apihelp-revisiondelete-param-target": "Título da página para a eliminação da revisão, se necessário para o tipo.",
+ "apihelp-revisiondelete-param-ids": "Identificadores para as revisões a serem excluídas.",
+ "apihelp-revisiondelete-param-hide": "O que ocultar para cada revisão.",
+ "apihelp-revisiondelete-param-show": "O que exibir para cada revisão.",
+ "apihelp-revisiondelete-param-suppress": "Seja para suprimir dados de administradores, bem como de outros.",
+ "apihelp-revisiondelete-param-reason": "Razão para a exclusão ou recuperação.",
+ "apihelp-revisiondelete-param-tags": "Etiquetas para se inscrever na entrada no registo de eliminação.",
+ "apihelp-revisiondelete-example-revision": "Ocultar conteúdo da revisão <kbd>12345</kbd> na página <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Ocultar todos os dados na entrada de log <kbd>67890</kbd> com razão <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "Desfazer a última edição para a página.",
+ "apihelp-rollback-extended-description": "Se o último usuário que editou a página efetuou várias edições consecutivas, todas serão revertidas.",
+ "apihelp-rollback-param-title": "Título da página para reverter. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "ID da página para reverter. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Tags para aplicar ao rollback.",
+ "apihelp-rollback-param-user": "Nome do usuário cujas edições devem ser revertidas.",
+ "apihelp-rollback-param-summary": "Resumo de edição personalizado. Se estiver vazio, o resumo padrão será usado.",
+ "apihelp-rollback-param-markbot": "Marca as edições revertidas e a reversão como edições de bot.",
+ "apihelp-rollback-param-watchlist": "Adicione ou remova incondicionalmente a página da lista de páginas vigiadas do usuário atual, use preferências ou não mude a vigilância.",
+ "apihelp-rollback-example-simple": "Reverter as últimas edições de página <kbd>Main Page</kbd> pelo usuário <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Reverter as últimas edições de página <kbd>Main Page</kbd> pelo IP <kbd>192.0.2.5</kbd> com resumo <kbd>Reverting vandalism</kbd> e marque essas edições e reversões como edições de bot.",
+ "apihelp-rsd-summary": "Exportar um esquema RSD (Really Simple Discovery).",
+ "apihelp-rsd-example-simple": "Exportar o esquema RSD.",
+ "apihelp-setnotificationtimestamp-summary": "Atualize o timestamp de notificação para páginas vigiadas.",
+ "apihelp-setnotificationtimestamp-extended-description": "Isso afeta o destaque das páginas alteradas na lista de exibição e no histórico e o envio de e-mail quando a preferência \"{{int:tog-enotifwatchlistpages}}\" estiver habilitada.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Trabalhar em todas as páginas vigiadas.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Timestamp para o qual definir o timestamp de notificação.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Revisão para definir o timestamp de notificação para (apenas uma página).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revisão para definir o timestamp de notificação mais recente do que (apenas uma página).",
+ "apihelp-setnotificationtimestamp-example-all": "Redefinir o status da notificação para toda a lista de páginas vigiadas.",
+ "apihelp-setnotificationtimestamp-example-page": "Redefinir o status de notificação para a <kbd>Main page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Define o timestamp da notificação para <kbd>Main page</kbd> para que todas as edições a partir de 1 de janeiro de 2012 não sejam visualizadas.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Restaura o status de notificação para páginas no espaço nominal <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "Mudar o idioma de uma página.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Mudar o idioma de uma página não é permitido nesta wiki.\n\nAtive <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> para usar esta ação.",
+ "apihelp-setpagelanguage-param-title": "Título da página cujo idioma você deseja alterar. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "ID da página cujo idioma você deseja alterar. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Código de idioma do idioma para mudar a página para. Usar <kbd>default</kbd> para redefinir a página para o idioma de conteúdo padrão da wiki.",
+ "apihelp-setpagelanguage-param-reason": "Motivo para a mudança.",
+ "apihelp-setpagelanguage-param-tags": "Alterar as tags para aplicar à entrada de log resultante dessa ação.",
+ "apihelp-setpagelanguage-example-language": "Mudar o idioma da <kbd>Main Page</kbd> para Basque.",
+ "apihelp-setpagelanguage-example-default": "Mudar o idioma da página com ID 123 para o idioma padrão da wiki.",
+ "apihelp-stashedit-summary": "Prepare uma edição no cache compartilhado.",
+ "apihelp-stashedit-extended-description": "Isto é destinado a ser usado via AJAX a partir do formulário de edição para melhorar o desempenho da página salvar.",
+ "apihelp-stashedit-param-title": "Título da página que está sendo editada.",
+ "apihelp-stashedit-param-section": "Número da seção. <kbd>0</kbd> para a seção superior, <kbd>new</kbd> para uma nova seção.",
+ "apihelp-stashedit-param-sectiontitle": "O título para uma nova seção.",
+ "apihelp-stashedit-param-text": "Conteúdo da página.",
+ "apihelp-stashedit-param-stashedtexthash": "Hash do conteúdo da página de um stash anterior para usar em vez disso.",
+ "apihelp-stashedit-param-contentmodel": "Modelo de conteúdo do novo conteúdo.",
+ "apihelp-stashedit-param-contentformat": "Formato de serialização de conteúdo usado para o texto de entrada.",
+ "apihelp-stashedit-param-baserevid": "ID de revisão da revisão base.",
+ "apihelp-stashedit-param-summary": "Mudar resumo.",
+ "apihelp-tag-summary": "Adicionar ou remover tags de alteração de revisões individuais ou entradas de log.",
+ "apihelp-tag-param-rcid": "Uma ou mais IDs de alterações recentes a partir das quais adicionar ou remover a etiqueta.",
+ "apihelp-tag-param-revid": "Uma ou mais IDs de revisão a partir das quais adicionar ou remover a etiqueta.",
+ "apihelp-tag-param-logid": "Uma ou mais IDs de entrada de log a partir das quais adicionar ou remover a etiqueta.",
+ "apihelp-tag-param-add": "Tags para adicionar. Apenas as tags manualmente definidas podem ser adicionadas.",
+ "apihelp-tag-param-remove": "Tags para remover. Somente as tags que são definidas manualmente ou completamente indefinidas podem ser removidas.",
+ "apihelp-tag-param-reason": "Motivo para a mudança.",
+ "apihelp-tag-param-tags": "Etiquetas para aplicar à entrada de log que será criada como resultado dessa ação.",
+ "apihelp-tag-example-rev": "Adicionar a tag <kbd>vandalism</kbd> a ID de revisão 123 sem especificar uma razão",
+ "apihelp-tag-example-log": "Remova a tag <kbd>spam</kbd> da ID de entrada de registro 123 com o motivo <kbd>Wrongly applied</kbd>",
+ "apihelp-tokens-summary": "Obter tokens para ações de modificação de dados.",
+ "apihelp-tokens-extended-description": "Este módulo está depreciado em favor de [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Tipos de token para solicitar.",
+ "apihelp-tokens-example-edit": "Recupera um token de edição (o padrão).",
+ "apihelp-tokens-example-emailmove": "Recupere um token de e-mail e um token de movimento.",
+ "apihelp-unblock-summary": "Desbloquear usuário.",
+ "apihelp-unblock-param-id": "ID do bloco para desbloquear (obtido através de <kbd>list=blocks</kbd>). Não pode ser usado em conjunto com <var>$1user</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Nome de usuário, endereço IP ou intervalo de IP para desbloquear. Não pode ser usado em conjunto com <var>$1id</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "ID do usuário para desbloquear. Não pode ser usado em conjunto com <var>$1id</var> ou <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Motivo para o desbloqueio.",
+ "apihelp-unblock-param-tags": "Alterar as tags para se inscrever na entrada no registro de bloqueio.",
+ "apihelp-unblock-example-id": "Desbloquear bloqueio ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Desbloquear o usuário <kbd>Bob</kbd> com o motivo <kbd>Sorry Bob</kbd>.",
+ "apihelp-undelete-summary": "Restaure as revisões de uma página excluída.",
+ "apihelp-undelete-extended-description": "Uma lista de revisões excluídas (incluindo timestamps) pode ser recuperada através de [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]] e uma lista de IDs de arquivo excluídos pode ser recuperada através de [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Título da página a ser restaurada.",
+ "apihelp-undelete-param-reason": "Razão para restaurar.",
+ "apihelp-undelete-param-tags": "Alterar as tags para se inscrever na entrada no registro de exclusão.",
+ "apihelp-undelete-param-timestamps": "Timestamps das revisões para restaurar. Se ambos <var>$1timestamps</var> e <var>$1fileids</var> estiverem vazios, tudo será restaurado.",
+ "apihelp-undelete-param-fileids": "IDs das revisões de arquivos para restaurar. Se ambos, <var>$1timestamps</var> e <var>$1fileids</var> estiverem, vazios, tudo será restaurado.",
+ "apihelp-undelete-param-watchlist": "Adicione ou remova incondicionalmente a página da lista de páginas vigiadas do usuário atual, use preferências ou não mude a vigilância.",
+ "apihelp-undelete-example-page": "Restaurar página <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Recupere duas revisões da página <kbd>Main Page</kbd>.",
+ "apihelp-unlinkaccount-summary": "Remova uma conta de terceiros vinculada ao usuário atual.",
+ "apihelp-unlinkaccount-example-simple": "Tente remover o link do usuário atual para o provedor associado com <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-summary": "Carregue um arquivo ou obtenha o status dos carregamentos pendentes.",
+ "apihelp-upload-extended-description": "Vários métodos estão disponíveis:\n* Carrega o conteúdo do arquivo diretamente, usando o parâmetro <var>$1file</var>.\n* Carrega o arquivo em pedaços, usando os parâmetros <var>$1filesize</var>, <var>$1chunk</var> e <var>$1offset</var>.\n* Tenha o servidor MediaWiki buscando um arquivo de um URL, usando o parâmetro <var>$1url</var>.\n* Complete um carregamento anterior que falhou devido a avisos, usando o parâmetro <var>$1filekey</var>.\nNote que o HTTP POST deve ser feito como um upload de arquivo (ou seja, usando <code>multipart/form-data</code>) ao enviar o <var>$1file</var>.",
+ "apihelp-upload-param-filename": "Nome do arquivo de destino.",
+ "apihelp-upload-param-comment": "Faça o upload do comentário. Também usado como o texto da página inicial para novos arquivos, se <var>$1text</var> não for especificado.",
+ "apihelp-upload-param-tags": "Alterar as tags para aplicar à entrada do log de upload e à revisão da página do arquivo.",
+ "apihelp-upload-param-text": "Texto inicial da página para novos arquivos.",
+ "apihelp-upload-param-watch": "Vigiar esta página.",
+ "apihelp-upload-param-watchlist": "Adicione ou remova incondicionalmente a página da lista de páginas vigiadas do usuário atual, use preferências ou não mude a vigilância.",
+ "apihelp-upload-param-ignorewarnings": "Ignorar quaisquer avisos.",
+ "apihelp-upload-param-file": "Conteúdo do arquivo.",
+ "apihelp-upload-param-url": "URL do qual para buscar o arquivo.",
+ "apihelp-upload-param-filekey": "Chave que identifica um upload anterior que foi temporariamente armazenado.",
+ "apihelp-upload-param-sessionkey": "Igual a $1filekey, mantido para compatibilidade com versões anteriores.",
+ "apihelp-upload-param-stash": "Se configurado, o servidor armazenará o arquivo temporariamente em vez de adicioná-lo ao repositório.",
+ "apihelp-upload-param-filesize": "Tamanho completo do upload.",
+ "apihelp-upload-param-offset": "Deslocamento de pedaços em bytes.",
+ "apihelp-upload-param-chunk": "Conteúdo do pedaço.",
+ "apihelp-upload-param-async": "Tornar as operações de arquivo potencialmente grandes assíncronas quando possível.",
+ "apihelp-upload-param-checkstatus": "Apenas obtenha o status de upload para a chave de arquivo fornecida.",
+ "apihelp-upload-example-url": "Enviar a partir de um URL.",
+ "apihelp-upload-example-filekey": "Complete um upload que falhou devido a avisos.",
+ "apihelp-userrights-summary": "Alterar a associação de um grupo de usuários.",
+ "apihelp-userrights-param-user": "Nome de usuário.",
+ "apihelp-userrights-param-userid": "ID de usuário.",
+ "apihelp-userrights-param-add": "Adiciona o usuário a esses grupos ou, se ele já for membro, atualiza a expiração de sua associação nesse grupo.",
+ "apihelp-userrights-param-expiry": "Expiração de timestamps. Pode ser relativo (por exemplo <kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absoluto (por exemplo <kbd>2014-09-18T12:34:56Z</kbd>). Se apenas um timestamp for configurado, ele sera usado para todos os grupos passados pelo parâmetro <var>$1add</var>. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd>, para um grupo de usuários que nunca expiram.",
+ "apihelp-userrights-param-remove": "Remover o usuário destes grupos.",
+ "apihelp-userrights-param-reason": "Motivo para a mudança.",
+ "apihelp-userrights-param-tags": "Alterar as tags para se inscrever na entrada no registro de direitos do usuário.",
+ "apihelp-userrights-example-user": "Adicionar o usuário <kbd>FooBot</kbd> ao grupo <kbd>bot</kbd> e remover dos grupos <kbd>sysop</kbd> e <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Adicionar o usuário com a ID <kbd>123</kbd> ao grupo global <kbd>bot</kbd> e remover dos grupos <kbd>sysop</kbd> e <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "Adicionar o usuário <kbd>SometimeSysop</kbd> ao grupo <kbd>sysop</kbd> por 1 mês.",
+ "apihelp-validatepassword-summary": "Valide uma senha de acordo as políticas de senha da wiki.",
+ "apihelp-validatepassword-extended-description": "A validade é relatada como <samp>Good</samp> se a senha for aceitável, <samp>Change</samp> se a senha for usada para entrar, mas deve ser alterada, ou <samp>Invalid</samp> se a senha não é utilizável.",
+ "apihelp-validatepassword-param-password": "Senha para validar.",
+ "apihelp-validatepassword-param-user": "Nome do usuário, para uso ao testar a criação da conta. O usuário nomeado não deve existir.",
+ "apihelp-validatepassword-param-email": "Endereço de e-mail, para uso ao testar a criação de conta.",
+ "apihelp-validatepassword-param-realname": "Nome real, para uso ao testar a criação de conta.",
+ "apihelp-validatepassword-example-1": "Valide a senha <kbd>foobar</kbd> para o usuário atual.",
+ "apihelp-validatepassword-example-2": "Valide a senha <kbd>qwerty</kbd> para o usuário <kbd>Example</kbd> criado.",
+ "apihelp-watch-summary": "Adicionar ou remover páginas da lista de páginas vigiadas do usuário atual.",
+ "apihelp-watch-param-title": "A página para (não)vigiar. Use <var>$1titles</var> em vez disso.",
+ "apihelp-watch-param-unwatch": "Se configurado, a página deixara de ser vigiada ao invés de vigiada.",
+ "apihelp-watch-example-watch": "Vigiar a página <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Deixar de vigiar a página <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "Vigiar as primeiras páginas no espaço nominal principal.",
+ "apihelp-format-example-generic": "Retornar o resultado da consulta no formato $1.",
+ "apihelp-format-param-wrappedhtml": "Retorna o HTML pretty-printed e módulos ResourceLoader associados como um objeto JSON.",
+ "apihelp-json-summary": "Dados de saída em formato JSON.",
+ "apihelp-json-param-callback": "Se especificado, envolve a saída para uma determinada chamada de função. Por segurança, todos os dados específicos do usuário serão restritos.",
+ "apihelp-json-param-utf8": "Se especificado, codifica a maioria (mas não todos) caracteres não-ASCII como UTF-8 em vez de substituí-los por sequências de escape hexadecimais. Padrão quando <var>formatversion</var> não é <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Se especificado, codifica todos os não-ASCII usando sequências de escape hexadecimais. Padrão quando <var>formatversion</var> é <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Formatação de saída:\n;1:formato compatível com versões anteriores (XML-style booleans, <samp>*</samp> chaves para nós de conteúdo, etc.).\n;2: formato moderno experimental. Detalhes podem ser alterados!\n;mais recente: use o formato mais recente (atualmente <kbd>2</kbd>), pode mudar sem aviso prévio.",
+ "apihelp-jsonfm-summary": "Dados de saída no formato JSON (pretty-print em HTML).",
+ "apihelp-none-summary": "Nenhuma saída.",
+ "apihelp-php-summary": "Dados de saída no formato PHP serializado.",
+ "apihelp-php-param-formatversion": "Formatação de saída:\n;1:formato compatível com versões anteriores (XML-style booleans, <samp>*</samp> chaves para nós de conteúdo, etc.).\n;2: formato moderno experimental. Detalhes podem ser alterados!\n;mais recente: use o formato mais recente (atualmente <kbd>2</kbd>), pode mudar sem aviso prévio.",
+ "apihelp-phpfm-summary": "Dados de saída em formato serializado em PHP (pretty-print em HTML).",
+ "apihelp-rawfm-summary": "Dados de saída, incluindo elementos de depuração, no formato JSON (pretty-print em HTML).",
+ "apihelp-xml-summary": "Dados de saída em formato XML.",
+ "apihelp-xml-param-xslt": "Se especificado, adiciona a página nomeada como uma folha de estilo XSL. O valor deve ser um título no espaço nominal {{ns: MediaWiki}} que termina em <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Se especificado, adiciona um espaço nominal XML.",
+ "apihelp-xmlfm-summary": "Dados de saída em formato XML (impressão bonita em HTML).",
+ "api-format-title": "Resultado da API MediaWiki",
+ "api-format-prettyprint-header": "Esta é a representação HTML do formato $1. O HTML é bom para depuração, mas não é adequado para o uso da aplicação.\n\nEspecifique o parâmetro <var>format</var> para alterar o formato de saída. Para ver a representação não-HTML do formato $1, defina <kbd>format=$2</kbd>.\n\nVeja a [[mw:Special:MyLanguage/API|documentação completa]] ou a [[Special:ApiHelp/main|ajuda da API]] para obter mais informações.",
+ "api-format-prettyprint-header-only-html": "Esta é uma representação HTML destinada a depuração e não é apropriada para o uso da aplicação.\n\nVeja a documentação completa [[mw:Special:MyLanguage/API|complete documentation]] ou a ajuda [[Special:ApiHelp/main|API help]] para maiores informações.",
+ "api-format-prettyprint-header-hyperlinked": "Esta é a representação HTML do formato $1. O HTML é bom para depuração, mas não é adequado para o uso da aplicação.\n\nEspecifique o parâmetro <var>format</var> para alterar o formato de saída. Para ver a representação não-HTML do formato $1, defina [$3 <kbd>format=$2</kbd>].\n\nVeja a [[mw:API|documentação completa]] ou a [[Special:ApiHelp/main|ajuda da API]] para obter mais informações.",
+ "api-format-prettyprint-status": "Essa resposta seria retornada com o status HTTP $1 $2.",
+ "api-login-fail-aborted": "A autenticação requer interação do usuário, que não é suportada por <kbd>action=login</kbd>. Para poder fazer login com <kbd>action=login</kbd>, veja [[Special:BotPasswords]]. Para continuar usando main-account loign, veja <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-aborted-nobotpw": "A autenticação requer interação do usuário, que não é suportada por <kbd>action=login</kbd>. Para fazer loging veja <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-badsessionprovider": "Não é possível fazer o login ao usar $1.",
+ "api-login-fail-sameorigin": "Não é possível iniciar sessão quando a mesma política de origem não é aplicada.",
+ "api-pageset-param-titles": "Uma lista de IDs de título para trabalhar.",
+ "api-pageset-param-pageids": "Uma lista de IDs de página para trabalhar.",
+ "api-pageset-param-revids": "Uma lista de IDs de revisão para trabalhar.",
+ "api-pageset-param-generator": "Obter a lista de páginas para trabalhar executando o módulo de consulta especificado.\n\n<strong>Nota:</strong>Os nomes dos parâmetros do gerador devem ser prefixados com um \"g\", veja exemplos.",
+ "api-pageset-param-redirects-generator": "Resolve automaticamente redirecionamentos em <var>$1titles</var>, <var>$1pageids</var> e <var>$1revids</var> e em páginas retornadas por <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Resolve automaticamente redirecionamentos em <var>$1titles</var>, <var>$1pageids</var> e <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Converte títulos para outras variantes, se necessário. Só funciona se o idioma do conteúdo do wiki suportar a conversão variante. Os idiomas que suportam a conversão variante incluem $1.",
+ "api-help-title": "Ajuda da API MediaWiki",
+ "api-help-lead": "Esta é uma página de documentação da API MediaWiki gerada automaticamente.\n\nDocumentação e exemplos: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Módulo principal",
+ "api-help-undocumented-module": "Nenhuma documentação para o módulo $1.",
+ "api-help-flag-deprecated": "Este módulo é obsoleto.",
+ "api-help-flag-internal": "<strong>Este módulo é interno ou instável.</strong> Sua operação pode mudar sem aviso prévio.",
+ "api-help-flag-readrights": "Este módulo requer direitos de leitura.",
+ "api-help-flag-writerights": "Este módulo requer direitos de gravação.",
+ "api-help-flag-mustbeposted": "Este módulo aceita apenas pedidos POST.",
+ "api-help-flag-generator": "Este módulo pode ser usado como um gerador.",
+ "api-help-source": "Fonte: $1",
+ "api-help-source-unknown": "Fonte: <span class=\"apihelp-unknown\">desconhecida</span>",
+ "api-help-license": "Licença: [[$1|$2]]",
+ "api-help-license-noname": "Licença: [[$1|Ver ligação]]",
+ "api-help-license-unknown": "Licensa: <span class=\"apihelp-unknown\">desconhecida</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parâmetro|Parâmetros}}:",
+ "api-help-param-deprecated": "Obsoleto.",
+ "api-help-param-required": "Este parâmetro é obrigatório.",
+ "api-help-datatypes-header": "Tipos de dados",
+ "api-help-datatypes": "A entrada para MediaWiki deve ser UTF-8 normalizada pelo NFC. O MediaWiki pode tentar converter outra entrada, mas isso pode causar a falha de algumas operações (como [[Special:ApiHelp/edit|editar]] com verificações MD5).\n\nAlguns tipos de parâmetros em solicitações de API precisam de uma explicação adicional:\n;boolean\n:Os parâmetros booleanos funcionam como caixas de seleção HTML: se o parâmetro for especificado, independentemente do valor, é considerado verdadeiro. Para um valor falso, omita o parâmetro inteiramente.\n;timestamp\n: As marcas de tempo podem ser especificadas em vários formatos. É recomendada a data e a hora ISO 8601. Todos os horários estão em UTC, qualquer fuso horário incluído é ignorado.\n:* Data e hora ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (pontuação e <kbd>Z</kbd> são opcionais)\n:* ISO 8601 data e hora com segundos fracionados (ignorados), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (traços, dois pontos e <kbd>Z</kbd> são opcionais)\n:* Formato MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato numérico genérico, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuso horário opcional de <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> ou <kbd>-<var>##</var></kbd> é ignorado)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 2822 (o fuso horário pode ser omitido), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (fuso horário Pode ser omitido), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime format, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Segundos desde 1970-01-01T00:00:00Z como um inteiro de 1 a 13 dígitos (excluindo <kbd>0</kbd>)\n:* A string <kbd>now</kbd>\n; valor múltiplo alternativo separador\n: Os parâmetros que levam vários valores são normalmente enviados com os valores separados usando o caractere do pipe, por exemplo <kbd>param=value1|value2</kbd> ou <kbd>param=value1%7Cvalue2</kbd>. Se um valor deve conter o caractere de pipe, use U+001F (separador de unidade) como o separador ''and'' prefixa o valor com U+001F, por exemplo, <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+ "api-help-param-type-limit": "Tipo: inteiro ou <kbd>max</kbd>",
+ "api-help-param-type-integer": "Tipo: {{PLURAL:$1|1=inteiro|2=lista de inteiros}}",
+ "api-help-param-type-boolean": "Tipo: boleano ([[Special:ApiHelp/main#main/datatypes|details]])",
+ "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=timestamp|2=lista de timestamps}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
+ "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de usuário|2=lista de nomes de usuários}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Um dos seguintes valores|2=Valores (separados com <kbd>{{!}}</kbd> ou [[Special:ApiHelp/main#main/datatypes|alternativos]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Deve estar vazio|Pode estar vazio, ou $2}}",
+ "api-help-param-limit": "Não mais do que $1 permitido.",
+ "api-help-param-limit2": "Não são permitidos mais de $1 ($2 por bots).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=O valor não pode ser inferior a|2=Os valores não podem ser inferiores a}} $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=O valor deve ser maior que|2=Os valores devem ser maiores que}} $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=O valor deve estar entre|2=Os valores devem estar entre}} $2 e $3.",
+ "api-help-param-upload": "Deve ser postado como um upload de arquivo usando multipart/form-data.",
+ "api-help-param-multi-separate": "Valores separados com <kbd>|</kbd> ou [[Special:ApiHelp/main#main/datatypes|alternativas]].",
+ "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para bots).",
+ "api-help-param-multi-max-simple": "O número máximo de valores é {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Para especificar todos os valores, use <kbd>$1</kbd>.",
+ "api-help-param-default": "Padrão: $1",
+ "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
+ "api-help-param-token": "Um token \"$1\" token recuperado de [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Para compatibilidade, o token usado na interface web também é aceito.",
+ "api-help-param-disabled-in-miser-mode": "Desabilitado devido a [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Nota:</strong> Devido ao [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]], usar isso pode resultar em menos de <var>$1limit</var> resultados antes de continuar; em casos extremos, nenhum resultado pode ser retornado.",
+ "api-help-param-direction": "Em qual direção enumerar:\n;newer: Lista primeiro mais antigo. Nota: $1start deve ser anterior a $1end.\n;older: Lista mais recente primeiro (padrão). Nota: $1start deve ser posterior a $1end.",
+ "api-help-param-continue": "Quando houver mais resultados disponíveis, use isso para continuar.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
+ "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permissão|Permissões}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Concedido a|Concedidos a}}: $2",
+ "api-help-right-apihighlimits": "Use limites mais altos nas consultas da API (consultas lentas: $1; consultas rápidas: $2). Os limites para consultas lentas também se aplicam a parâmetros multivalores.",
+ "api-help-open-in-apisandbox": "<small>[abrir na página de testes]</small>",
+ "api-help-authmanager-general-usage": "O procedimento geral para usar este módulo é:\n# Procure os campos disponíveis de <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$4</kbd> e um token <kbd>$5</kbd> de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Apresentar os campos para o usuário e obtenha a sua submissão.\n# Poste em este módulo, fornecendo <var>$1returnurl</var> e quaisquer campos relevantes.\n# Verifique o <samp>status</samp> na resposta.\n#* Se você recebeu <samp>PASS</samp> ou <samp>FAIL</samp>, você terminou. A operação foi bem sucedida ou não.\n#* Se você recebeu <samp>UI</samp>, apresente os novos campos ao usuário e obtenha seu envio. Em seguida, publique neste módulo com <var>$1continue</var> e os campos relevantes sejam definidos e repita a etapa 4.\n#* Se você recebeu <samp>REDIRECT</samp>, direcione o usuário para o <samp>redirecttarget</samp> e aguarde o retorno para <var>$1returnurl</var>. Em seguida, publique neste módulo com <var>$1continue</var> e quaisquer campos passados para o URL de retorno e repita a etapa 4.\n#* Se você recebeu <samp>RESTART</samp>, isso significa que a autenticação funcionou mas não temos uma conta de usuário vinculada. Você pode tratar isso como <samp>UI</samp> ou como <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "Utilize apenas estes pedidos de autenticação, pelo <samp>id</samp> retornado de <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd> ou de uma resposta anterior deste módulo.",
+ "api-help-authmanagerhelper-request": "Use este pedido de autenticação, pelo <samp>id</ samp> retornado de <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "Formato a ser usado para retornar mensagens.",
+ "api-help-authmanagerhelper-mergerequestfields": "Fundir informações de campo para todos os pedidos de autenticação em uma matriz.",
+ "api-help-authmanagerhelper-preservestate": "Preserva o estado de uma tentativa de login anterior com falha, se possível.",
+ "api-help-authmanagerhelper-returnurl": "O URL de retorno para fluxos de autenticação de terceiros deve ser absoluto. Isso ou <var>$1continue</var> é necessário.\n\nQuando receber uma resposta <samp>REDIRECT</samp>, você normalmente abrirá um navegador ou uma visão da web para o <samp>redirecttarget</samp> URL para um fluxo de autenticação de terceiros. Quando isso for concluído, o terceiro enviará ao navegador ou a web para este URL. Você deve extrair qualquer consulta ou parâmetros POST do URL e passá-los como uma solicitação <var>$1continue</var> para este módulo de API.",
+ "api-help-authmanagerhelper-continue": "Esse pedido é uma continuação após uma resposta <samp>UI</samp> ou <samp>REDIRECT</samp> anterior. Ou <var>$1returnurl</var> é requerido.",
+ "api-help-authmanagerhelper-additional-params": "Este módulo aceita parâmetros adicionais dependendo dos pedidos de autenticação disponíveis. Use <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd> (ou uma resposta anterior deste módulo, se aplicável) para determinar as solicitações disponíveis e os campos que eles usam.",
+ "apierror-allimages-redirect": "Use <kbd>gapfilterredir=nonredirects</kbd> em vez de <var>redirects</var> ao usar <kbd>allimages</kbd> como um gerador.",
+ "apierror-allpages-generator-redirects": "Use <kbd>gapfilterredir=nonredirects</kbd> em vez de <var>redirects</var> ao usar <kbd>allpages</kbd> como um gerador.",
+ "apierror-appendnotsupported": "Não é possível anexar páginas usando o modelo de conteúdo $1.",
+ "apierror-articleexists": "O artigo que você tentou criar já foi criado.",
+ "apierror-assertbotfailed": "Afirmação de que o usuário tem o direito <code>bot</code> falhou.",
+ "apierror-assertnameduserfailed": "Afirmação de que o usuário é \"$1\" falhou.",
+ "apierror-assertuserfailed": "Afirmação de que o usuário está logado falhou.",
+ "apierror-autoblocked": "O seu endereço de IP foi bloqueado automaticamente, porque ele foi usado por um usuário bloqueado.",
+ "apierror-badconfig-resulttoosmall": "O valor de <code>$wgAPIMaxResultSize</code> nesta wiki é muito pequeno para manter a informação básica de resultados.",
+ "apierror-badcontinue": "Parâmetro continue inválido. Você deve passar o valor original retornado pela consulta anterior.",
+ "apierror-baddiff": "O diff não pode ser recuperado. Uma ou ambas as revisões não existem ou você não tem permissão para visualizá-las.",
+ "apierror-baddiffto": "<var>$1diffto</var> deve ser configurado para um número não negativo, <kbd>prev</kbd>, <kbd>next</kbd> ou <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "O formato solicitado $1 não é suportado para o modelo de conteúdo $2.",
+ "apierror-badformat": "O formato solicitado $1 não é suportado para o modelo de conteúdo $2 usado por $3.",
+ "apierror-badgenerator-notgenerator": "O módulo <kbd>$1</kbd> não pode ser usado como um gerador.",
+ "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> desconhecido.",
+ "apierror-badip": "O parâmetro IP não é válido.",
+ "apierror-badmd5": "O hash MD5 fornecido estava incorreto.",
+ "apierror-badmodule-badsubmodule": "O módulo <kbd>$1</kbd> não possui um submódulo \"$2\".",
+ "apierror-badmodule-nosubmodules": "O módulo <kbd>$1</kbd> não tem submódulos.",
+ "apierror-badparameter": "Valor inválido para o parâmetro <var>$1</var>.",
+ "apierror-badquery": "Consulta inválida.",
+ "apierror-badtimestamp": "Valor \"$2\" inválido para o parâmetro timestamp <var>$1</var>.",
+ "apierror-badtoken": "Token de CSRF inválido.",
+ "apierror-badupload": "O parâmetro de upload do arquivo <var>$1</var> não é um upload de arquivo; Certifique-se de usar <code>multipart/form-data</code> para o seu POST e incluir um nome de arquivo no cabeçalho <code> Content-Disposition</code>.",
+ "apierror-badurl": "Valor \"$2\" não é válido para o parâmetro <var>$1</var> da URL.",
+ "apierror-baduser": "Valor \"$2\" inválido para o parâmetro de usuário <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "U+001F separação de múltiplos valores só pode ser usada para parâmetros de vários valores.",
+ "apierror-bad-watchlist-token": "Foi fornecido um token da lista de páginas vigiadas incorreto. Defina um token correto em [[Special:Preferences]].",
+ "apierror-blockedfrommail": "Você foi bloqueado de enviar e-mail.",
+ "apierror-blocked": "Você foi bloqueado de editar.",
+ "apierror-botsnotsupported": "Esta interface não é suportada por bots.",
+ "apierror-cannot-async-upload-file": "Os parâmetros <var>async</var> e <var>file</var> não podem ser combinados. Se você deseja o processamento assíncrono do seu arquivo carregado, primeiro faça o upload para armazenar (usando o parâmetro <var>stash</var>) e depois publique o arquivo armazenado de forma assíncrona (usando <var>filekey</var> e <var>async</var>).",
+ "apierror-cannotreauthenticate": "Esta ação não está disponível porque sua identidade não pode ser verificada.",
+ "apierror-cannotviewtitle": "Você não tem permissão para ver $1.",
+ "apierror-cantblock-email": "Você não tem permissão para impedir que os usuários enviem e-mails através da wiki.",
+ "apierror-cantblock": "Você não tem permissão para bloquear usuários.",
+ "apierror-cantchangecontentmodel": "Você não tem permissão para mudar o modelo de conteúdo de uma página.",
+ "apierror-canthide": "Você não tem permissão para ocultar nomes de usuários do registro de bloqueios.",
+ "apierror-cantimport-upload": "Você não tem permissão para importar páginas enviadas.",
+ "apierror-cantimport": "Você não tem permissão para importar páginas.",
+ "apierror-cantoverwrite-sharedfile": "O arquivo de destino existe em um repositório compartilhado e você não tem permissão para substituí-lo.",
+ "apierror-cantsend": "Você não está logado, não possui um endereço de e-mail confirmado ou não tem permissão para enviar e-mails para outros usuários, por isso não pode enviar e-mails.",
+ "apierror-cantundelete": "Não foi possível recuperar arquivos: as revisões solicitadas podem não existir ou talvez já tenham sido eliminadas.",
+ "apierror-changeauth-norequest": "Falha ao criar pedido de mudança.",
+ "apierror-chunk-too-small": "O tamanho mínimo do bloco é $1 {{PLURAL:$1|byte|bytes}} para os pedaços não finais.",
+ "apierror-cidrtoobroad": "Os intervalos CIDR $1 maiores que /$2 não são aceitos.",
+ "apierror-compare-no-title": "Não é possível pré-salvar a transformação sem um título. Tente especificar <var>fromtitle</var> ou <var>totitle</var>.",
+ "apierror-compare-nosuchfromsection": "Não há nenhuma secção $1 no conteúdo 'from'.",
+ "apierror-compare-nosuchtosection": "Não há nenhuma seção $1 no conteúdo 'to'.",
+ "apierror-compare-relative-to-nothing": "Nenhuma revisão 'from' para <var>torelative</var> para ser relativa à.",
+ "apierror-contentserializationexception": "Falha na serialização de conteúdo: $1",
+ "apierror-contenttoobig": "O conteúdo fornecido excede o limite de tamanho do artigo de $1 {{PLURAL: $1|kilobyte|kilobytes}}.",
+ "apierror-copyuploadbaddomain": "Os uploads por URL não são permitidos deste domínio.",
+ "apierror-copyuploadbadurl": "Envio não permitido a partir deste URL.",
+ "apierror-create-titleexists": "Os títulos existentes não podem ser protegidos com <kbd>create</kbd>.",
+ "apierror-csp-report": "Erro ao processar o relatório CSP: $1.",
+ "apierror-databaseerror": "[$1] Houve um erro na consulta ao banco de dados.",
+ "apierror-deletedrevs-param-not-1-2": "O parâmetro <var>$1</var> não pode ser usado nos modos 1 ou 2.",
+ "apierror-deletedrevs-param-not-3": "O parâmetro <var>$1</var> não pode ser usado no modo 3.",
+ "apierror-emptynewsection": "A criação de novas seções vazias não é possível.",
+ "apierror-emptypage": "Não é permitido criar páginas novas e vazias.",
+ "apierror-exceptioncaught": "[$1] Exceção detectada: $2",
+ "apierror-filedoesnotexist": "Arquivo não existe.",
+ "apierror-fileexists-sharedrepo-perm": "O arquivo de destino existe em um repositório compartilhado. Use o parâmetro <var>ignorewarnings</var> para substituí-lo.",
+ "apierror-filenopath": "Não é possível obter o caminho do arquivo local.",
+ "apierror-filetypecannotberotated": "O tipo de arquivo não pode ser girado.",
+ "apierror-formatphp": "Esta resposta não pode ser representada usando o formato <kbd>format=php</kbd>. Consulte https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "O título para <kbd>$1</kbd> deve ser um arquivo.",
+ "apierror-import-unknownerror": "Erro desconhecido na importação: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> não pode ser maior que $2 (definido para $3) para bots ou sysops.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> não pode ser maior que $2 (definido para $3) para usuários.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> não pode ser menor que $2 (definido para $3).",
+ "apierror-invalidcategory": "O nome da categoria que você inseriu não é válido.",
+ "apierror-invalid-chunk": "O deslocamento mais o pedaço atual é maior que o tamanho do arquivo reivindicado.",
+ "apierror-invalidexpiry": "Tempo de expiração \"$1\" não válido.",
+ "apierror-invalid-file-key": "Não é uma chave de arquivo válida.",
+ "apierror-invalidlang": "Código de idioma inválido para o parâmetro <var>$1</var>.",
+ "apierror-invalidoldimage": "O parâmetro <var>oldimage</var> possui um formato inválido.",
+ "apierror-invalidparammix-cannotusewith": "O parâmetro <kbd>$1</kbd> não pode ser usado com <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "O parâmetro <kbd>$1</kbd> só pode ser usado com <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> não pode ser combinado com os parâmetros <var>oldid</var>, <var>pageid</var> ou <var>page</var>. Por favor, use <var>title</var> e <var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Os parâmetros }} $1 não podem ser usado em conjunto.",
+ "apierror-invalidsection": "O parâmetro <var>section</var> deve ser um ID de seção válida ou <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "O hash SHA1Base36 fornecido não é válido.",
+ "apierror-invalidsha1hash": "O hash SHA1 informado não é válido.",
+ "apierror-invalidtitle": "Título incorreto \"$1\".",
+ "apierror-invalidurlparam": "Valor inválido para <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Nome de usuário \"$1\" é inválido.",
+ "apierror-invaliduserid": "O ID de usuário <var>$1</var> não é permitido.",
+ "apierror-maxlag-generic": "Aguardando um servidor de banco de dados: $1 {{PLURAL:$1|segundo|segundos}} atraso.",
+ "apierror-maxlag": "Esperando $2: $1 {{PLURAL: $1|segundo|segundos}} atrasado.",
+ "apierror-mimesearchdisabled": "A pesquisa MIME está desativada no Miser Mode.",
+ "apierror-missingcontent-pageid": "Falta conteúdo para a ID da página $1.",
+ "apierror-missingcontent-revid": "Falta conteúdo para a ID de revisão $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|O parâmetro|Ao menos um dos parâmetros}} $1 é necessário.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|O parâmetro|Um dos parâmetros}} $1 é necessário.",
+ "apierror-missingparam": "O parâmetro <var>$1</var> precisa ser definido.",
+ "apierror-missingrev-pageid": "Nenhuma revisão atual da página com ID $1.",
+ "apierror-missingrev-title": "Nenhuma revisão atual do título $1.",
+ "apierror-missingtitle-createonly": "Os títulos em falta só podem ser protegidos com <kbd>create</kbd>.",
+ "apierror-missingtitle": "A página que você especificou não existe.",
+ "apierror-missingtitle-byname": "A página $1 não existe.",
+ "apierror-moduledisabled": "O módulo <kbd>$1</kbd> foi desativado.",
+ "apierror-multival-only-one-of": "{{PLURAL:$3|Somente|Somente um de}} $2 é permitido para parâmetro <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> só pode ser usada com uma única página.",
+ "apierror-mustbeloggedin-changeauth": "Você precisa estar autenticado para alterar dados de autenticação.",
+ "apierror-mustbeloggedin-generic": "Você deve estar logado.",
+ "apierror-mustbeloggedin-linkaccounts": "Você precisa estar autenticado para vincular contas.",
+ "apierror-mustbeloggedin-removeauth": "Você precisa estar autenticado para remover dados de autenticação.",
+ "apierror-mustbeloggedin-uploadstash": "O upload do stash só está disponível para usuários registrados.",
+ "apierror-mustbeloggedin": "Você precisa estar logado para $1.",
+ "apierror-mustbeposted": "O módulo <kbd>$1</kbd> requer uma solicitação POST.",
+ "apierror-mustpostparams": "{{PLURAL:$2|O seguinte parâmetro foi encontrado|Os seguintes parâmetros foram encontrados}} na string de consulta, mas deve estar no corpo POST: $1.",
+ "apierror-noapiwrite": "A edição deste wiki através da API está desabilitada. Certifique-se de que a declaração <code>$wgEnableWriteAPI=true;</code> está incluída no arquivo <code>LocalSettings.php</code>.",
+ "apierror-nochanges": "Nenhuma alteração foi solicitada.",
+ "apierror-nodeleteablefile": "Nenhuma versão antiga do arquivo.",
+ "apierror-no-direct-editing": "A edição direta via API não é suportada para o modelo de conteúdo $1 usado por $2.",
+ "apierror-noedit-anon": "Os usuários anônimos não podem editar páginas.",
+ "apierror-noedit": "Você não tem permissão para editar páginas.",
+ "apierror-noimageredirect-anon": "Os usuários anônimos não podem criar redirecionamentos de imagem.",
+ "apierror-noimageredirect": "Você não tem permissão para criar redirecionamentos de imagens.",
+ "apierror-nosuchlogid": "Não há entrada de log com ID $1.",
+ "apierror-nosuchpageid": "Não há página com ID $1.",
+ "apierror-nosuchrcid": "Não há mudança recente com ID $1.",
+ "apierror-nosuchrevid": "Não há revisão com ID $1.",
+ "apierror-nosuchsection": "Não há seção $1.",
+ "apierror-nosuchsection-what": "Não há seção $1 em $2.",
+ "apierror-nosuchuserid": "Não há usuário com ID $1.",
+ "apierror-notarget": "Você não especificou um alvo válido para esta ação.",
+ "apierror-notpatrollable": "A revisão r$1 não pode ser patrulhada, já que é muito antiga.",
+ "apierror-nouploadmodule": "Módulo de upload não definido.",
+ "apierror-offline": "Não foi possível prosseguir devido a problemas de conectividade de rede. Certifique-se de ter uma conexão à internet e tente novamente.",
+ "apierror-opensearch-json-warnings": "Os avisos não podem ser representados no formato JSON do OpenSearch.",
+ "apierror-pagecannotexist": "O espaço nominal não permite as páginas atuais.",
+ "apierror-pagedeleted": "A página foi excluída desde que você obteve seu timestamp.",
+ "apierror-pagelang-disabled": "Mudar o idioma de uma página não é permitido nesta wiki.",
+ "apierror-paramempty": "O parâmetro <var>$1</var> pode não estar vazio.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> só é suportado por conteúdo wikitext.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> só é suportado por conteúdo texto wiki, $1 usa conteúdo do modelo $2.",
+ "apierror-pastexpiry": "Tempo de expiração \"$1\" está no passado.",
+ "apierror-permissiondenied": "Você não tem permissão para $1.",
+ "apierror-permissiondenied-generic": "Permissão negada.",
+ "apierror-permissiondenied-patrolflag": "Você precisa do direito <code>patrol</code> ou <code>patrolmarks</code> para requisitar a etiqueta \"patrulhado\".",
+ "apierror-permissiondenied-unblock": "Você não tem permissão para desbloquear usuários.",
+ "apierror-prefixsearchdisabled": "A pesquisa de prefixos está desativada no Miser Mode.",
+ "apierror-promised-nonwrite-api": "O cabeçalho HTTP <code>Promise-Non-Write-API-Action</code> não pode ser enviado para módulos de API em modo de gravação.",
+ "apierror-protect-invalidaction": "Tipo de proteção \"$1\" inválida.",
+ "apierror-protect-invalidlevel": "Nível de proteção inválido \"$1\".",
+ "apierror-ratelimited": "Você excedeu o limite. Por favor, aguarde algum tempo e tente novamente.",
+ "apierror-readapidenied": "Você precisa da permissão de leitura para usar este módulo.",
+ "apierror-readonly": "Esta wiki está atualmente em modo somente leitura.",
+ "apierror-reauthenticate": "Você não se autenticou recentemente nesta sessão, por favor, se autentique.",
+ "apierror-redirect-appendonly": "Você tentou editar usando o modo de redirecionamento, que deve ser usado em conjunto com <kbd>section=new</kbd>, <var>prependtext</var> ou <var>appendtext</var>.",
+ "apierror-revdel-mutuallyexclusive": "O mesmo campo não pode ser usado em ambos <var>hide</var> e <var>show</var>.",
+ "apierror-revdel-needtarget": "Um título de destino é necessário para este tipo RevDel.",
+ "apierror-revdel-paramneeded": "Pelo menos um valor é necessário para <var>hide</var> e/ou <var>show</var>.",
+ "apierror-revisions-badid": "Nenhuma revisão foi encontrada para o parâmetro <var>$1</var>.",
+ "apierror-revisions-norevids": "O parâmetro <var>revids</var> não pode ser usado com as opções da lista (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> e <var>$1end</var>).",
+ "apierror-revisions-singlepage": "<var>titles</var>, <var>pageids</var> ou um gerador foi usado para fornecer várias páginas, mas os parâmetros <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> e <var>$1end</var> só podem ser usados em uma única página.",
+ "apierror-revwrongpage": "r$1 não é uma revisão de $2.",
+ "apierror-searchdisabled": "<var>$1</var> pesquisa está desativada.",
+ "apierror-sectionreplacefailed": "Não foi possível mesclar a seção atualizada.",
+ "apierror-sectionsnotsupported": "As seções não são suportadas para o modelo de conteúdo $1.",
+ "apierror-sectionsnotsupported-what": "As seções não são suportadas por $1.",
+ "apierror-show": "Parâmetro incorreto - valores mutuamente exclusivos podem não ser fornecidos.",
+ "apierror-siteinfo-includealldenied": "Não é possível visualizar a informação de todos os servidores, a menos que <var>$wgShowHostNames</var> seja true.",
+ "apierror-sizediffdisabled": "A diferença de tamanho está desativada no Miser Mode.",
+ "apierror-spamdetected": "Sua edição foi bloqueada porque contem um fragmento de spam: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "Você não tem permissão para ver os resultados desta página especial.",
+ "apierror-stashedfilenotfound": "Não foi possível encontrar o arquivo no stash: $1.",
+ "apierror-stashedit-missingtext": "Nenhum texto stashed foi encontrado com o hash informado.",
+ "apierror-stashfailed-complete": "O carregamento fragmentado já está concluído, verifique o status para obter detalhes.",
+ "apierror-stashfailed-nosession": "Nenhuma sessão de upload fragmentada com esta chave.",
+ "apierror-stashfilestorage": "Não foi possível armazenar o upload no stash: $1",
+ "apierror-stashinvalidfile": "Arquivo stashed inválido.",
+ "apierror-stashnosuchfilekey": "Nenhuma dessas chaves de arquivo: $1.",
+ "apierror-stashpathinvalid": "Chave de arquivo de formato impróprio ou inválido: $1.",
+ "apierror-stashwrongowner": "Dono incorreto: $1",
+ "apierror-stashzerolength": "O arquivo é de comprimento zero e não pode ser armazenado no stash: $1.",
+ "apierror-systemblocked": "Você foi bloqueado automaticamente pelo MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "A expansão da predefinição só é suportada pelo conteúdo do texto wiki. $1 usa o modelo de conteúdo $2.",
+ "apierror-timeout": "O servidor não respondeu dentro do tempo esperado.",
+ "apierror-toofewexpiries": "{{PLURAL:$1|Foi fornecida $1 data e hora|Foram fornecidas $1 datas e horas}} de expiração quando {{PLURAL:$2|era necessária|eram necessárias}} $2.",
+ "apierror-unknownaction": "A ação especificada, <kbd>$1</kbd>, não é reconhecida.",
+ "apierror-unknownerror-editpage": "Erro EditPage desconhecido: $1.",
+ "apierror-unknownerror-nocode": "Erro desconhecido.",
+ "apierror-unknownerror": "Erro desconhecido: \"$1\".",
+ "apierror-unknownformat": "Formato desconhecido \"$1\".",
+ "apierror-unrecognizedparams": "{{PLURAL: $2|Parâmetro não reconhecido|Parâmetros não reconhecidos}}: $1.",
+ "apierror-unrecognizedvalue": "Valor não reconhecido para o parâmetro <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "O repositório de arquivos locais não suporta a consulta de todas as imagens.",
+ "apierror-upload-filekeyneeded": "Deve fornecer uma <var>filekey</var> quando <var>offset</var> for diferente de zero.",
+ "apierror-upload-filekeynotallowed": "Não é possível fornecer uma <var>filekey</var> quando <var>offset</var> é 0.",
+ "apierror-upload-inprogress": "Carregar do stash já em andamento.",
+ "apierror-upload-missingresult": "Nenhum resultado em dados de status.",
+ "apierror-urlparamnormal": "Não foi possível normalizar parâmetros de imagem para $1.",
+ "apierror-writeapidenied": "Você não está autorizado a editar esta wiki através da API.",
+ "apiwarn-alldeletedrevisions-performance": "Para um melhor desempenho ao gerar títulos, defina <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Não foi possível analisar <var>$1urlparam</var> por $2. Usando apenas largura e altura.",
+ "apiwarn-badutf8": "O valor passado para <var>$1</var> contém dados inválidos ou não normalizados. Os dados textuais devem ser válidos, NFC-normalizado Unicode sem caracteres de controle C0 diferentes de HT (\\t), LF (\\n) e CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "Verificar se os símbolos, como \"+\" no token, estão codificados corretamente na URL.",
+ "apiwarn-compare-nocontentmodel": "Nenhum modelo de conteúdo pode ser determinado, assumindo $1.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> foi depreciado. Por favor, use <kbd>prop=deletedrevisions</kbd> ou <kbd>list=alldeletedrevisions</kbd> em vez.",
+ "apiwarn-deprecation-expandtemplates-prop": "Como nenhum valor foi especificado para o parâmetro <var>prop</var>, um formato herdado foi usado para a saída. Este formato está obsoleto e no futuro um valor padrão será definido para o parâmetro <var>prop</var>, fazendo com que o novo formato sempre seja usado.",
+ "apiwarn-deprecation-httpsexpected": "HTTP usado quando o HTTPS era esperado.",
+ "apiwarn-deprecation-login-botpw": "O login da conta principal via <kbd>action=login</kbd> está obsoleto e pode parar de funcionar sem aviso prévio. Para continuar com o login com <kbd>action=login</ kbd>, consulte [[Special:BotPasswords]]. Para continuar com segurança usando o login da conta principal, veja <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "O login da conta principal via <kbd>action=login</kbd> está obsoleto e pode parar de funcionar sem aviso prévio. Para fazer login com segurança, veja <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "Obter um token via <kbd>action=login</kbd> está obsoleto. Use <kbd>action=query&meta=tokens&type=login</kbd> em vez.",
+ "apiwarn-deprecation-parameter": "O parâmetro <var>$1</var> é obsoleto.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> está depreciado desde o MediaWiki 1.28. Use <kbd>prop=headhtml</kbd> quando for criar novos documentos HTML, ou <kbd>prop=modules|jsconfigvars</kbd> quando for atualizar um documento no lado do cliente.",
+ "apiwarn-deprecation-purge-get": "O uso de <kbd>action=purge</kbd> via GET está obsoleto. Use o POST em vez disso.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> está obsoleto. Por favor, use <kbd>$2</kbd> em vez.",
+ "apiwarn-difftohidden": "Não foi possível diferenciar r$1: o conteúdo está oculto.",
+ "apiwarn-errorprinterfailed": "Falha na impressora de erro. Repetirá sem parâmetros.",
+ "apiwarn-errorprinterfailed-ex": "Falha na impressora de erro (repetirá sem parâmetros): $1",
+ "apiwarn-invalidcategory": "\"$1\" não é uma categoria.",
+ "apiwarn-invalidtitle": "\"$1\" não é um título válido.",
+ "apiwarn-invalidxmlstylesheetext": "Stylesheet deve ter extensão <code>.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "Especificada folha de estilos inválida ou inexistente.",
+ "apiwarn-invalidxmlstylesheetns": "Stylesheet deve estar no espaço nominal {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "A propriedade <kbd>modules</kbd> foi definida, mas não <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd>. As variáveis de configuração são necessárias para o uso adequado do módulo.",
+ "apiwarn-notfile": "\"$1\" não é um arquivo.",
+ "apiwarn-nothumb-noimagehandler": "Não foi possível criar uma miniatura porque $1 não possui um manipulador de imagem associado.",
+ "apiwarn-parse-nocontentmodel": "Não foi dado <var>title</var> ou <var>contentmodel</var>, assumindo $1.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var> use sem <var>text</var> e as propriedades da página analisada são necessárias. Você quis usar <var>oldid</var> ao invés de <var>revid</var>?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> usado sem <var>text</var>, e as propriedades da página analisada foram solicitadas. Você quis usar <var>page</var> ao invés de <var>title</var>?",
+ "apiwarn-redirectsandrevids": "A resolução de redirecionamento não pode ser usada em conjunto com o parâmetro <var>revids</var>. Qualquer redirecionamento <var>revids</var> apontando para não foi resolvido.",
+ "apiwarn-tokennotallowed": "A ação \"$1\" não é permitida para o usuário atual.",
+ "apiwarn-tokens-origin": "Os tokens não podem ser obtidos quando a política de origem não é aplicada.",
+ "apiwarn-toomanyvalues": "Muitos valores são fornecidos para o parâmetro <var>$1</var>. O limite é de $2.",
+ "apiwarn-truncatedresult": "Esse resultado foi truncado porque, de outra forma, seria maior do que o limite de $1 bytes.",
+ "apiwarn-unclearnowtimestamp": "Passar \"$2\" para o parâmetro timestamp <var>$1</var> está obsoleto. Se, por algum motivo, você precisa especificar explicitamente o tempo atual sem calcular o lado do cliente, use <kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor não reconhecido para o parâmetro|Valores não reconhecidos para o parâmetro}} <var>$1</var>: $2.",
+ "apiwarn-unsupportedarray": "Parâmetro <var>$1</var> usa sintaxe de array PHP não suportada.",
+ "apiwarn-urlparamwidth": "Ignorando o valor de largura definido em <var>$1urlparam</var> ($2) em favor do valor da largura derivado de <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
+ "apiwarn-validationfailed-badchars": "caracteres inválidos na chave (apenas <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> e <code>-</code> é permitido).",
+ "apiwarn-validationfailed-badpref": "não é uma preferência válida.",
+ "apiwarn-validationfailed-cannotset": "não pode ser configurado por este módulo.",
+ "apiwarn-validationfailed-keytoolong": "chave muito longa (não é permitido mais de $1 bytes).",
+ "apiwarn-validationfailed": "Erro de validação para <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Aviso de Segurança</strong>: <var>$wgDebugAPI</var> está ativado.",
+ "api-feed-error-title": "Erro ($1)",
+ "api-usage-docref": "Veja $1 para uso da API.",
+ "api-usage-mailinglist-ref": "Inscreva-se na lista de discussão mediawiki-api-announce em &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; Para aviso de depreciações de API e alterações.",
+ "api-exception-trace": "$1 em $2($3)\n$4",
+ "api-credits-header": "Créditos",
+ "api-credits": "Desenvolvedores da API:\n* Yuri Astrakhan (criador, desenvolvedor-chefe Set 2006–Set 2007)\n* Roan Kattouw (desenvolvedor-chefe Set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (desenvolvedor-chefe 2013–presente)\n\nPor favor, envie seus comentários, sugestões e perguntas para mediawiki-api@lists.wikimedia.org\nou apresente um relatório de erro em https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/pt.json b/www/wiki/includes/api/i18n/pt.json
new file mode 100644
index 00000000..2a81d29d
--- /dev/null
+++ b/www/wiki/includes/api/i18n/pt.json
@@ -0,0 +1,1763 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vitorvicentevalente",
+ "Fúlvio",
+ "Macofe",
+ "Jkb8",
+ "Hamilton Abreu",
+ "Mansil",
+ "Felipe L. Ewald",
+ "Athena in Wonderland",
+ "Waldir"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentação]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de divulgação]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Defeitos e pedidos]\n</div>\n<strong>Estado:</strong> A API do MediaWiki é uma interface consolidada e estável que é constantemente suportada e melhorada. Embora tentemos evitá-lo, podemos ocasionalmente realizar alterações disruptivas. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de distribuição mediawiki-api-announce] para receber notificações das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, será devolvido um cabeçalho HTTP com a chave \"MediaWiki-API-Error\" e depois tanto o valor desse cabeçalho como o código de erro devolvido serão definidos com o mesmo valor. Para mais informação, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Erros e avisos]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testes:</strong> Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].</p>",
+ "apihelp-main-param-action": "A operação a ser realizada.",
+ "apihelp-main-param-format": "O formato do resultado.",
+ "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki é instalado num ''cluster'' de bases de dados replicadas. Para impedir que as operações causem ainda mais atrasos de replicação do sítio, este parâmetro pode fazer o cliente aguardar até que o atraso de replicação seja inferior ao valor especificado. Caso o atraso atual exceda esse valor, o código de erro <samp>maxlag</samp> é devolvido com uma mensagem como <samp>À espera do servidor $host: $lag segundos de atraso</samp>.<br />Consulte [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Parâmetro maxlag]] para mais informações.",
+ "apihelp-main-param-smaxage": "Definir no cabeçalho HTTP <code>s-maxage</code> de controlo da cache este número de segundos. Os erros nunca são armazenados na cache.",
+ "apihelp-main-param-maxage": "Definir no cabeçalho HTTP <code>max-age</code> de controlo da cache este número de segundos. Os erros nunca são armazenados na cache.",
+ "apihelp-main-param-assert": "Se definido com o valor <kbd>user</kbd>, verificar que o utilizador está autenticado. Se definido com o valor <kbd>bot</kbd>, verificar que o utilizador tem o privilégio de conta robô.",
+ "apihelp-main-param-assertuser": "Verificar que o utilizador atual é o utilizador nomeado.",
+ "apihelp-main-param-requestid": "Qualquer valor fornecido aqui será incluído na resposta. Pode ser usado para distinguir pedidos.",
+ "apihelp-main-param-servedby": "Incluir nos resultados o nome do servidor que serviu o pedido.",
+ "apihelp-main-param-curtimestamp": "Incluir a data e hora atuais no resultado.",
+ "apihelp-main-param-responselanginfo": "Incluir as línguas usadas para <var>uselang</var> e <var>errorlang</var> no resultado.",
+ "apihelp-main-param-origin": "Ao aceder à API usando um pedido AJAX entre domínios (CORS), coloque aqui o domínio de origem. Isto tem de ser incluído em todas as verificações prévias e, portanto, tem de fazer parte do URI do pedido (e não do conteúdo do POST).\n\nPara pedidos autenticados, este valor tem de corresponder de forma exata a um dos cabeçalhos <code>Origin</code>, portanto, tem de ser algo como <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parâmetro não for igual ao cabeçalho <code>Origin</code>, será devolvida a resposta 403. Se este parâmetro for igual ao cabeçalho <code>Origin</code> e a origem for permitida (''white-listed'') os cabeçalhos <code>Access-Control-Allow-Origin</code> e <code>Access-Control-Allow-Credentials</code> serão preenchidos.\n\nPara pedidos não autenticados, especifique o valor <kbd>*</kbd>. Isto fará com que o cabeçalho <code>Access-Control-Allow-Origin</code>\nseja preenchido, mas <code>Access-Control-Allow-Credentials</code> terá o valor <code>false</code> e o acesso a todos os dados específicos do utilizador está restringido.",
+ "apihelp-main-param-uselang": "A língua a ser usada nas traduções de mensagens. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> com <kbd>siprop=languages</kbd> devolve uma lista de códigos de língua, ou especifique <kbd>user</kbd> para usar a língua nas preferências do utilizador atual, ou especifique <kbd>content</kbd> para usar a língua de conteúdo desta wiki.",
+ "apihelp-main-param-errorformat": "O formato a ser usado no texto de avisos e erros.\n; plaintext: Texto wiki com os elementos HTML removidos e as entidades substituídas.\n; wikitext: Texto wiki sem análise sintática.\n; html: HTML.\n; raw: Chave e parâmetros da mensagem.\n; none: Sem saída de texto, só os códigos de erro.\n; bc: Formato usado antes do MediaWiki 1.29. <var>errorlang</var> e <var>errorsuselocal</var> são ignorados.",
+ "apihelp-main-param-errorlang": "A língua a ser usada para avisos e erros. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> com <kbd>siprop=languages</kbd> devolve uma lista de códigos de língua, ou especifique <kbd>content</kbd> para usar a língua de conteúdo desta wiki, ou especifique <kbd>uselang</kbd> para usar o mesmo valor que o parâmetro <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "Se fornecido, os textos de erro utilizarão mensagens personalizadas localmente do espaço nominal {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "Bloquear um utilizador.",
+ "apihelp-block-param-user": "O nome de utilizador, endereço IP ou gama de endereços IP a serem bloqueados. Não pode ser usado em conjunto com <var>$1userid</var>",
+ "apihelp-block-param-userid": "O identificador do utilizador a ser bloqueado. Não pode ser usado em conjunto com <var>$1user</var>.",
+ "apihelp-block-param-expiry": "O período de expiração. Pode ser relativo (p. ex. <kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absoluto (p. ex. <kbd>2014-09-18T12:34:56Z</kbd>). Se definido como <kbd>infinite</kbd>, <kbd>indefinite</kbd> ou <kbd>never</kbd>, o bloqueio nunca expirará.",
+ "apihelp-block-param-reason": "O motivo do bloqueio.",
+ "apihelp-block-param-anononly": "Bloquear só utilizadores anónimos (isto é, impedir edições anónimas a partir deste endereço IP)",
+ "apihelp-block-param-nocreate": "Impedir a criação de contas.",
+ "apihelp-block-param-autoblock": "Bloquear automaticamente o último endereço IP usado e quaisquer outros endereços IP subsequentes a partir do quais o utilizador tente iniciar uma sessão.",
+ "apihelp-block-param-noemail": "Impedir o utilizador de enviar correio eletrónico através da wiki. (Requer o privilégio <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Ocultar o nome do utilizador do registo de bloqueios. (Requer o privilégio <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Permitir que o utilizador edite a sua própria página de discussão (depende de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Se o utilizador já está bloqueado, sobrescrever o bloco existente.",
+ "apihelp-block-param-watchuser": "Vigiar as páginas de utilizador e de discussão, do utilizador ou do endereço IP.",
+ "apihelp-block-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de bloqueios.",
+ "apihelp-block-example-ip-simple": "Bloquear o endereço IP <kbd>192.0.2.5</kbd> por três dias com o motivo <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquear o utilizador <kbd>Vandal</kbd> indefinidamente com o motivo <kbd>Vandalism</kbd>, e impedir a criação de nova conta e o envio de correio eletrónico.",
+ "apihelp-changeauthenticationdata-summary": "Alterar os dados de autenticação do utilizador atual.",
+ "apihelp-changeauthenticationdata-example-password": "Tentar alterar a palavra-passe do utilizador atual para <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Verificar a validade de uma chave a partir de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo de chave que está a ser testado.",
+ "apihelp-checktoken-param-token": "Chave a testar.",
+ "apihelp-checktoken-param-maxtokenage": "Validade máxima da chave, em segundos.",
+ "apihelp-checktoken-example-simple": "Testar a validade de uma chave <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Limpa a indicação <code>hasmsg</code> do utilizador atual.",
+ "apihelp-clearhasmsg-example-1": "Limpar a indicação <code>hasmsg</code> do utilizador atual.",
+ "apihelp-clientlogin-summary": "Entrar na wiki usando o processo interativo.",
+ "apihelp-clientlogin-example-login": "Inicia o processo de entrada na wiki com o utilizador <kbd>Example</kbd> e a palavra-passe <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Continuar o processo de autenticação após uma resposta <samp>UI</samp> para autenticação de dois fatores, fornecendo uma <var>OATHToken</var> de <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Obter a diferença entre duas páginas.",
+ "apihelp-compare-extended-description": "Tem de ser passado um número de revisão, ou um título de página, ou um identificador de página, ou uma referência relativa para \"from\" e \"to\".",
+ "apihelp-compare-param-fromtitle": "Primeiro título a comparar.",
+ "apihelp-compare-param-fromid": "Primeiro identificador de página a comparar.",
+ "apihelp-compare-param-fromrev": "Primeira revisão a comparar.",
+ "apihelp-compare-param-fromtext": "Usar este texto em vez do conteúdo da revisão especificada por <var>fromtitle</var>, <var>fromid</var> ou <var>fromrev</var>.",
+ "apihelp-compare-param-fromsection": "Utilizar apenas a secção especificada do conteúdo 'from' especificado.",
+ "apihelp-compare-param-frompst": "Fazer uma transformação anterior à gravação, de <var>fromtext</var>.",
+ "apihelp-compare-param-fromcontentmodel": "Modelo de conteúdo de <var>fromtext</var>. Se não for fornecido, ele será deduzido a partir dos outros parâmetros.",
+ "apihelp-compare-param-fromcontentformat": "Formato de seriação do conteúdo de <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Segundo título a comparar.",
+ "apihelp-compare-param-toid": "Segundo identificador de página a comparar.",
+ "apihelp-compare-param-torev": "Segunda revisão a comparar.",
+ "apihelp-compare-param-torelative": "Usar uma revisão relativa à revisão determinada a partir de <var>fromtitle</var>, <var>fromid</var> ou <var>fromrev</var>. Todas as outras opções 'to' serão ignoradas.",
+ "apihelp-compare-param-totext": "Usar este texto em vez do conteúdo da revisão especificada por <var>totitle</var>, <var>toid</var> ou <var>torev</var>.",
+ "apihelp-compare-param-tosection": "Utilizar apenas a secção especificada do conteúdo 'to' especificado.",
+ "apihelp-compare-param-topst": "Fazer uma transformação anterior à gravação, de <var>totext</var>.",
+ "apihelp-compare-param-tocontentmodel": "Modelo de conteúdo de <var>totext</var>. Se não for fornecido, ele será deduzido a partir dos outros parâmetros.",
+ "apihelp-compare-param-tocontentformat": "Formato de seriação do conteúdo de <var>totext</var>.",
+ "apihelp-compare-param-prop": "As informações que devem ser obtidas.",
+ "apihelp-compare-paramvalue-prop-diff": "O HTML da lista de diferenças.",
+ "apihelp-compare-paramvalue-prop-diffsize": "O tamanho do HTML da lista de diferenças, em bytes.",
+ "apihelp-compare-paramvalue-prop-rel": "Os identificadores da revisão anterior a 'from' e da posterior a 'to', se existirem.",
+ "apihelp-compare-paramvalue-prop-ids": "Os identificadores de página e de revisão das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-title": "Os títulos de página das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-user": "O nome e o identificador de utilizador das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-comment": "O comentário das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "O comentário após análise sintática, das revisões 'from' e 'to'.",
+ "apihelp-compare-paramvalue-prop-size": "O tamanho das revisões 'from' e 'to'.",
+ "apihelp-compare-example-1": "Criar uma lista de diferenças entre as revisões 1 e 2.",
+ "apihelp-createaccount-summary": "Criar uma conta de utilizador nova.",
+ "apihelp-createaccount-param-preservestate": "Se <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> devolveu o valor verdadeiro para <samp>hasprimarypreservedstate</samp>, pedidos marcados como <samp>primary-required</samp> devem ser omitidos. Se devolveu um valor não vazio em <samp>preservedusername</samp>, esse nome de utilizador tem de ser usado no parâmetro <var>username</var>.",
+ "apihelp-createaccount-example-create": "Iniciar o processo de criação do utilizador <kbd>Example</kbd> com a palavra-passe <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Nome de utilizador.",
+ "apihelp-createaccount-param-password": "Palavra-passe (ignorada se <var>$1mailpassword</var> está definida).",
+ "apihelp-createaccount-param-domain": "Domínio para autenticação externa (opcional).",
+ "apihelp-createaccount-param-token": "Chave de criação da conta, obtida no primeiro pedido.",
+ "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
+ "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
+ "apihelp-createaccount-param-mailpassword": "Se qualquer valor estiver definido, uma palavra-passe aleatória será enviada por correio eletrónico ao utilizador.",
+ "apihelp-createaccount-param-reason": "Motivo opcional de criação da conta, para ser colocado nos registos.",
+ "apihelp-createaccount-param-language": "Código da língua a definir como padrão para o utilizador (opcional, por omissão é a língua de conteúdo).",
+ "apihelp-createaccount-example-pass": "Criar o utilizador <kbd>testuser</kbd> com a palavra-passe <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Criar o utilizador <kbd>testmailuser</kbd> e enviar por correio eletrónico uma palavra-passe gerada aleatoriamente.",
+ "apihelp-cspreport-summary": "Usado por '' browsers'' para reportar violações da norma \"Content Security Policy\". Este módulo nunca deve ser usado, exceto quando utilizado automaticamente por um ''browser'' compatível com a CSP.",
+ "apihelp-cspreport-param-reportonly": "Marcar como sendo um relatório vindo de uma norma de monitorização e não de uma norma exigida.",
+ "apihelp-cspreport-param-source": "Aquilo que gerou o cabeçalho CSP que desencadeou este relatório.",
+ "apihelp-delete-summary": "Eliminar uma página.",
+ "apihelp-delete-param-title": "Título da página a eliminar. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Identificador da página a eliminar. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Motivo para a eliminação. Se não for definido, será usado um motivo gerado automaticamente.",
+ "apihelp-delete-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de eliminações.",
+ "apihelp-delete-param-watch": "Adicionar a página às páginas vigiadas do utilizador atual.",
+ "apihelp-delete-param-watchlist": "Adicionar ou remover incondicionalmente a página da lista de páginas vigiadas do utilizador atual, usar as preferências ou não alterar o estado de vigilância.",
+ "apihelp-delete-param-unwatch": "Remover a página das páginas vigiadas do utilizador atual.",
+ "apihelp-delete-param-oldimage": "O nome da imagem antiga a ser eliminada, tal como fornecido por [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Eliminar a página <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> com o motivo <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Este módulo foi desativado.",
+ "apihelp-edit-summary": "Criar e editar páginas.",
+ "apihelp-edit-param-title": "Título da página a ser editada. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Identificador da página a ser editada. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-edit-param-section": "Número da secção. <kbd>0</kbd> para a secção de topo, <kbd>new</kbd> para uma secção nova.",
+ "apihelp-edit-param-sectiontitle": "Título para uma nova secção.",
+ "apihelp-edit-param-text": "Conteúdo da página.",
+ "apihelp-edit-param-summary": "Resumo da edição. Também é o título da secção quando $1section=new e $1sectiontitle não está definido.",
+ "apihelp-edit-param-tags": "Etiquetas de modificação a aplicar à revisão.",
+ "apihelp-edit-param-minor": "Edição menor.",
+ "apihelp-edit-param-notminor": "Edição não menor.",
+ "apihelp-edit-param-bot": "Marcar esta edição como edição de robô.",
+ "apihelp-edit-param-basetimestamp": "Data e hora da revisão de base, usada para detetar conflitos de edição. Pode ser obtida usando [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Data e hora de início do processo de edição, usada para detetar conflitos de edição. Pode-se obter um valor apropriado usando <var>[[Special:ApiHelp/main|curtimestamp]]</var> ao iniciar o processo de edição (por exemplo, ao carregar o conteúdo da página para edição).",
+ "apihelp-edit-param-recreate": "Ignorar todos os erros acerca da página ter sido eliminada entretanto.",
+ "apihelp-edit-param-createonly": "Não editar a página se ela já existe.",
+ "apihelp-edit-param-nocreate": "Gerar um erro se a página não existe.",
+ "apihelp-edit-param-watch": "Adicionar a página às páginas vigiadas do utilizador atual.",
+ "apihelp-edit-param-unwatch": "Remover a página da lista de páginas vigiadas do utilizador atual.",
+ "apihelp-edit-param-watchlist": "Adicionar ou remover incondicionalmente a página da lista de páginas vigiadas do utilizador atual, usar as preferências ou não alterar o estado de vigilância.",
+ "apihelp-edit-param-md5": "A chave MD5 do parâmetro $1text, ou os parâmetros $1prependtext e $1appendtext concatenados. Se estiver definido, a edição não será realizada a menos que a chave seja correta.",
+ "apihelp-edit-param-prependtext": "Adicionar este texto ao início da página. Tem precedência sobre $1text.",
+ "apihelp-edit-param-appendtext": "Adicionar este texto ao fim da página. Tem precedência sobre $1text.\n\nPara acrescentar uma nova secção no fim da página, usar $1section=new em vez deste parâmetro.",
+ "apihelp-edit-param-undo": "Desfazer esta revisão. Tem precedência sobre $1text, $1prependtext e $1appendtext.",
+ "apihelp-edit-param-undoafter": "Desfazer todas as revisões desde $1undo até esta. Se não for definido, desfazer só uma revisão.",
+ "apihelp-edit-param-redirect": "Resolver automaticamente redirecionamentos.",
+ "apihelp-edit-param-contentformat": "Formato para seriação do conteúdo, usado para o texto de entrada.",
+ "apihelp-edit-param-contentmodel": "Modelo de conteúdo do novo conteúdo.",
+ "apihelp-edit-param-token": "A chave deve ser sempre enviada como último parâmetro, ou pelo menos após o parâmetro $1text.",
+ "apihelp-edit-example-edit": "Editar uma página.",
+ "apihelp-edit-example-prepend": "Acrescentar <kbd>_&#95;NOTOC_&#95;</kbd> ao início de uma página.",
+ "apihelp-edit-example-undo": "Desfazer desde a revisão 13579 até à 13585 com resumo automático.",
+ "apihelp-emailuser-summary": "Enviar correio eletrónico a um utilizador.",
+ "apihelp-emailuser-param-target": "Utilizador a quem enviar correio eletrónico.",
+ "apihelp-emailuser-param-subject": "Assunto.",
+ "apihelp-emailuser-param-text": "Texto.",
+ "apihelp-emailuser-param-ccme": "Enviar-me uma cópia desta mensagem.",
+ "apihelp-emailuser-example-email": "Enviar uma mensagem de correio ao utilizador <kbd>WikiSysop</kbd> com o texto <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Expande todas as predefinições existentes num texto wiki.",
+ "apihelp-expandtemplates-param-title": "Título da página.",
+ "apihelp-expandtemplates-param-text": "Texto wiki a converter.",
+ "apihelp-expandtemplates-param-revid": "Identificador da revisão, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variáveis semelhantes.",
+ "apihelp-expandtemplates-param-prop": "As informações que devem ser obtidas:\n\nNote que, se não for selecionado nenhum valor, o resultado irá conter o texto wiki mas a saída estará num formato obsoleto.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "O texto wiki expandido.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Quaisquer categorias existentes na entrada que não estão representadas no texto wiki de saída.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Propriedades da página, definidas por palavras mágicas expandidas, no texto wiki.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Indica se o resultado é volátil e não deve ser reutilizado noutra parte da página.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "O período máximo a partir do qual os armazenamentos do resultado na cache devem ser invalidados.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Quaisquer módulos ResourceLoader que as funções do analisador sintático solicitaram que fossem adicionados ao resultado de saída. Um dos valores <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> tem de ser solicitado em conjunto com o valor <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Devolve as variáveis de configuração JavaScript específicas desta página.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Devolve as variáveis de configuração JavaScript específicas da página, no formato de uma ''string'' JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "A árvore de análise sintática em XML do texto de entrada.",
+ "apihelp-expandtemplates-param-includecomments": "Indica se devem ser incluídos comentários HTML no resultado.",
+ "apihelp-expandtemplates-param-generatexml": "Gerar a árvore de análise sintática em XML (substituído por $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expandir o texto wiki <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Devolve um ''feed'' das contribuições do utilizador.",
+ "apihelp-feedcontributions-param-feedformat": "O formato do ''feed''.",
+ "apihelp-feedcontributions-param-user": "Os utilizadores dos quais serão obtidas as contribuições.",
+ "apihelp-feedcontributions-param-namespace": "O espaço nominal pelo qual as contribuições serão filtradas.",
+ "apihelp-feedcontributions-param-year": "Desde o ano.",
+ "apihelp-feedcontributions-param-month": "Desde o mês.",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrar as contribuições para produzir as que têm estas etiquetas.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostrar apenas as contribuições eliminadas.",
+ "apihelp-feedcontributions-param-toponly": "Mostrar apenas as edições mais recentes.",
+ "apihelp-feedcontributions-param-newonly": "Mostrar apenas as edições que são criações de páginas.",
+ "apihelp-feedcontributions-param-hideminor": "Ocultar edições menores.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostrar diferença de tamanho entre edições.",
+ "apihelp-feedcontributions-example-simple": "Devolver as contribuições do utilizador <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Devolve um ''feed'' das mudanças recentes.",
+ "apihelp-feedrecentchanges-param-feedformat": "O formato do ''feed''.",
+ "apihelp-feedrecentchanges-param-namespace": "O espaço nominal ao qual os resultados serão limitados.",
+ "apihelp-feedrecentchanges-param-invert": "Todos os espaços nominais exceto o selecionado.",
+ "apihelp-feedrecentchanges-param-associated": "Incluir o espaço nominal associado (de discussão ou principal).",
+ "apihelp-feedrecentchanges-param-days": "Dias aos quais limitar os resultados.",
+ "apihelp-feedrecentchanges-param-limit": "O número máximo de resultados a serem devolvidos.",
+ "apihelp-feedrecentchanges-param-from": "Mostrar alterações desde então.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ocultar mudanças feitas por robôs.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ocultar mudanças feitas por utilizadores anónimos.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ocultar mudanças feitas por utilizadores registados.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar mudanças patrulhadas.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar mudanças feitas pelo utilizador atual.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Ocultar mudanças de pertença a categorias.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiqueta.",
+ "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Mostrar mudanças em páginas com hiperligações para a página selecionada.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes.",
+ "apihelp-feedrecentchanges-example-30days": "Mostrar as mudanças recentes de 30 dias.",
+ "apihelp-feedwatchlist-summary": "Devolve um ''feed'' das páginas vigiadas.",
+ "apihelp-feedwatchlist-param-feedformat": "O formato do ''feed''.",
+ "apihelp-feedwatchlist-param-hours": "Mostrar as mudanças recentes desde há este número de horas.",
+ "apihelp-feedwatchlist-param-linktosections": "Ligar diretamente às secções alteradas, se possível.",
+ "apihelp-feedwatchlist-example-default": "Mostrar o ''feed'' das páginas vigiadas.",
+ "apihelp-feedwatchlist-example-all6hrs": "Mostrar todas as mudanças às páginas vigiadas nas últimas 6 horas.",
+ "apihelp-filerevert-summary": "Reverter um ficheiro para uma versão antiga.",
+ "apihelp-filerevert-param-filename": "Nome do ficheiro de destino, sem o prefixo File:.",
+ "apihelp-filerevert-param-comment": "Comentário do carregamento.",
+ "apihelp-filerevert-param-archivename": "Nome de arquivo da revisão para a qual o ficheiro será revertido.",
+ "apihelp-filerevert-example-revert": "Reverter <kbd>Wiki.png</kbd> para a revisão de <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Apresentar ajuda para os módulos especificados.",
+ "apihelp-help-param-modules": "Módulos para os quais apresentar ajuda (valores dos parâmetros <var>action</var> e <var>format</var>, ou <kbd>main</kbd>). Pode-se especificar submódulos com um <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Incluir ajuda para submódulos do módulo nomeado.",
+ "apihelp-help-param-recursivesubmodules": "Incluir ajuda para os submódulos de forma recursiva.",
+ "apihelp-help-param-helpformat": "Formato de saída da ajuda.",
+ "apihelp-help-param-wrap": "Envolver a saída numa estrutura padrão de resposta da API.",
+ "apihelp-help-param-toc": "Incluir uma tabela de conteúdo na saída HTML.",
+ "apihelp-help-example-main": "Ajuda para o módulo principal.",
+ "apihelp-help-example-submodules": "Ajuda para <kbd>action=query</kbd> e todos os respetivos submódulos.",
+ "apihelp-help-example-recursive": "Toda a ajuda numa página.",
+ "apihelp-help-example-help": "Ajuda para o próprio módulo de ajuda.",
+ "apihelp-help-example-query": "Ajuda para dois submódulos de consulta.",
+ "apihelp-imagerotate-summary": "Rodar uma ou mais imagens.",
+ "apihelp-imagerotate-param-rotation": "Graus de rotação da imagem no sentido horário.",
+ "apihelp-imagerotate-param-tags": "Etiquetas a aplicar à entrada no registo de carregamentos.",
+ "apihelp-imagerotate-example-simple": "Rodar <kbd>File:Example.png</kbd> <kbd>90</kbd> graus.",
+ "apihelp-imagerotate-example-generator": "Rodar todas as imagens na categoria <kbd>Category:Flip</kbd> em <kbd>180</kbd> graus.",
+ "apihelp-import-summary": "Importar uma página de outra wiki ou de um ficheiro XML.",
+ "apihelp-import-extended-description": "Note que o pedido POST de HTTP tem de ser feito como um carregamento de ficheiro (isto é, usando \"multipart/form-data\") ao enviar um ficheiro para o parâmetro <var>xml</var>.",
+ "apihelp-import-param-summary": "Resumo da importação para a entrada do registo.",
+ "apihelp-import-param-xml": "Ficheiro XML carregado.",
+ "apihelp-import-param-interwikiprefix": "Para importações carregadas: o prefixo interwikis a ser aplicado aos nomes de utilizador desconhecidos (e aos conhecidos se <var>$1assignknownusers</var> estiver definido).",
+ "apihelp-import-param-assignknownusers": "Atribuir as edições aos utilizadores locais se o utilizador nomeado existir localmente.",
+ "apihelp-import-param-interwikisource": "Para importações interwikis: a wiki de onde importar.",
+ "apihelp-import-param-interwikipage": "Para importações interwikis: a página a importar.",
+ "apihelp-import-param-fullhistory": "Para importações interwikis: importar o historial completo, não apenas a versão atual.",
+ "apihelp-import-param-templates": "Para importações interwikis: importar também todas as predefinições incluídas.",
+ "apihelp-import-param-namespace": "Importar para este espaço nominal. Não pode ser usado em conjunto com <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importar como subpágina desta página. Não pode ser usado em conjunto com <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de importações e à revisão nula nas páginas importadas.",
+ "apihelp-import-example-import": "Importar [[meta:Help:ParserFunctions]] para o espaço nominal 100 com o historial completo.",
+ "apihelp-linkaccount-summary": "Ligar uma conta de um fornecedor terceiro ao utilizador atual.",
+ "apihelp-linkaccount-example-link": "Iniciar o processo de ligação a uma conta do fornecedor <kbd>Example</kbd>.",
+ "apihelp-login-summary": "Iniciar uma sessão e obter cookies de autenticação.",
+ "apihelp-login-extended-description": "Esta operação só deve ser usada em combinação com [[Special:BotPasswords]]; a sua utilização para entrar com a conta principal é obsoleta e poderá falhar sem aviso. Para entrar com a conta principal de forma segura, use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Esta operação foi descontinuada e poderá falhar sem aviso. Para entrar de forma segura, use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Nome de utilizador.",
+ "apihelp-login-param-password": "Palavra-passe.",
+ "apihelp-login-param-domain": "Domínio (opcional).",
+ "apihelp-login-param-token": "Chave de início de sessão obtida no primeiro pedido.",
+ "apihelp-login-example-gettoken": "Obter uma chave de início de sessão.",
+ "apihelp-login-example-login": "Entrar.",
+ "apihelp-logout-summary": "Terminar a sessão e limpar os dados da sessão.",
+ "apihelp-logout-example-logout": "Terminar a sessão do utilizador atual.",
+ "apihelp-managetags-summary": "Executar tarefas de gestão relacionadas com etiquetas de modificação.",
+ "apihelp-managetags-param-operation": "A operação que será realizada:\n;create:Criar uma nova etiqueta de modificação para uso manual.\n;delete:Remover da base de dados uma etiqueta de modificação, incluindo remover a etiqueta de todas as revisões, entradas nas mudanças recentes e entradas do registo onde ela é utilizada.\n;activate:Ativar uma etiqueta de modificação, permitindo que os utilizadores a apliquem manualmente.\n;deactivate:Desativar uma etiqueta de modificação, impedindo que os utilizadores a apliquem manualmente.",
+ "apihelp-managetags-param-tag": "Etiqueta a ser criada, eliminada, ativada ou desativada. Para criar uma etiqueta ela não pode existir. Para eliminar uma etiqueta, ela tem de existir. Para ativar uma etiqueta, ela tem de existir e não estar a ser utilizada por nenhuma extensão. Para desativar uma etiqueta, ela tem de estar ativa e definida manualmente.",
+ "apihelp-managetags-param-reason": "Um motivo, opcional, para a criação, eliminação, ativação ou desativação da etiqueta.",
+ "apihelp-managetags-param-ignorewarnings": "Indica se devem ser ignorados todos os avisos gerados durante a operação.",
+ "apihelp-managetags-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de gestão de etiquetas.",
+ "apihelp-managetags-example-create": "Criar uma etiqueta com o nome <kbd>spam</kbd> e o motivo <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Eliminar a etiqueta <kbd>vandlaism</kbd> com o motivo <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Ativar uma etiqueta com o nome <kbd>spam</kbd> e o motivo <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Desativar uma etiqueta com o nome <kbd>spam</kbd> e o motivo <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Fundir o historial de páginas.",
+ "apihelp-mergehistory-param-from": "Título da página cujo historial será fundido. Não pode ser usado em conjunto com <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "Identificador da página cujo historial será fundido. Não pode ser usado em conjunto com <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Título da página à qual o historial será fundido. Não pode ser usado em conjunto com <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "Identificador da página à qual o historial será fundido. Não pode ser usado em conjunto com <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Data e hora até a qual as revisões serão movidas do historial da página de origem para o historial das páginas de destino. Se omitido, todo o historial da página de origem será fundido com a página de destino.",
+ "apihelp-mergehistory-param-reason": "Motivo para fundir o historial.",
+ "apihelp-mergehistory-example-merge": "Fundir todo o historial da página <kbd>Oldpage</kbd> com o da página <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Fundir as revisões de <kbd>Oldpage</kbd> até à data e hora <kbd>2015-12-31T04:37:41Z</kbd> com <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Mover uma página.",
+ "apihelp-move-param-from": "Título da página cujo nome será alterado. Não pode ser usado em conjunto com <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Identificador da página cujo nome será alterado. Não pode ser usado em conjunto com <var>$1from</var>.",
+ "apihelp-move-param-to": "Novo título da página.",
+ "apihelp-move-param-reason": "Motivo para a alteração do nome.",
+ "apihelp-move-param-movetalk": "Alterar o nome da página de discussão, se esta existir.",
+ "apihelp-move-param-movesubpages": "Alterar o nome das subpáginas, se estas existirem.",
+ "apihelp-move-param-noredirect": "Não criar um redirecionamento.",
+ "apihelp-move-param-watch": "Adicionar a página e o redirecionamento às páginas vigiadas do utilizador atual.",
+ "apihelp-move-param-unwatch": "Remover a página e o redirecionamento das páginas vigiadas do utilizador atual.",
+ "apihelp-move-param-watchlist": "Adicionar ou remover incondicionalmente a página da lista de páginas vigiadas do utilizador atual, usar as preferências ou não alterar o estado de vigilância.",
+ "apihelp-move-param-ignorewarnings": "Ignorar quaisquer avisos.",
+ "apihelp-move-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de movimentações e à revisão nula na página de destino.",
+ "apihelp-move-example-move": "Mover <kbd>Badtitle</kbd> para <kbd>Goodtitle</kbd> sem deixar um redirecionamento.",
+ "apihelp-opensearch-summary": "Pesquisar a wiki usando o protocolo OpenSearch.",
+ "apihelp-opensearch-param-search": "Texto a pesquisar.",
+ "apihelp-opensearch-param-limit": "O número máximo de resultados a serem devolvidos.",
+ "apihelp-opensearch-param-namespace": "Espaços nominais a pesquisar. Ignorados se <var>$1search</var> começar com um prefixo de espaço nominal válido.",
+ "apihelp-opensearch-param-suggest": "Não fazer nada se <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> for falso.",
+ "apihelp-opensearch-param-redirects": "Como tratar redirecionamentos:\n;return:Devolver o próprio redirecionamento.\n;resolve:Devolver a página de destino. Pode devolver menos de $1limit resultados.\nPor razões históricas, o valor por omissão é \"return\" para o formato $1format=json e \"resolve\" para outros formatos.",
+ "apihelp-opensearch-param-format": "O formato do resultado.",
+ "apihelp-opensearch-param-warningsaserror": "Se forem gerados avisos com <kbd>format=json</kbd>, devolver um erro da API em vez de ignorá-los.",
+ "apihelp-opensearch-example-te": "Encontrar as páginas que começam por <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Alterar as preferências do utilizador atual.",
+ "apihelp-options-extended-description": "Só podem ser definidas as opções que estão registadas no núcleo do MediaWiki ou numa das extensões instaladas, ou opções cuja chave tem o prefixo <code>userjs-</code> (que são supostas ser usadas por ''scripts'' de utilizador).",
+ "apihelp-options-param-reset": "Reiniciar preferências para os valores por omissão do sítio.",
+ "apihelp-options-param-resetkinds": "Lista dos tipos de opções a reiniciar quando a opção <var>$1reset</var> está definida.",
+ "apihelp-options-param-change": "Listas das alterações, na forma nome=valor (isto é, skin=vector). Se não for fornecido nenhum valor (nem sequer um sinal de igualdade), por exemplo, nomedaopção|outraopção|..., a opção será reiniciada para o seu valor por omissão. Se qualquer dos valores passados contém uma barra vertical (<kbd>|</kbd>), use um [[Special:ApiHelp/main#main/datatypes|separador alternativo para valores múltiplos]] de forma a obter o comportamento correto.",
+ "apihelp-options-param-optionname": "O nome da opção que deve ser configurada com o valor dado por <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "O valor para a opção especificada por <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Reiniciar todas as preferências.",
+ "apihelp-options-example-change": "Alterar as preferências <kbd>skin</kbd> e <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Reiniciar todas as preferências e depois definir <kbd>skin</kbd> e <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Obter informação sobre os módulos da API.",
+ "apihelp-paraminfo-param-modules": "Lista dos nomes dos módulos (valores dos parâmetros <var>action</var> e <var>format</var>, ou <kbd>main</kbd>). Podem ser especificados submódulos com <kbd>+</kbd>, ou todos os submódulos com <kbd>+*</kbd>, ou todos os submódulos de forma recursiva com <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Formato dos textos de ajuda.",
+ "apihelp-paraminfo-param-querymodules": "Lista de nomes dos módulos a consultar (valores dos parâmetros <var>prop</var>, <var>meta</var> ou <var>list</var>). Usar <kbd>$1modules=query+foo</kbd> em vez de <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Obter também informação sobre o módulo principal (do nível de topo). Em vez de usá-lo, usar <kbd>$1modules=main</kbd>.",
+ "apihelp-paraminfo-param-pagesetmodule": "Obter também informação sobre o módulo pageset (fornecendo titles= e restantes).",
+ "apihelp-paraminfo-param-formatmodules": "Lista de nomes de módulos de formato (valor do parâmetro <var>format</var>). Em vez de usá-lo, use <var>$1modules</var>.",
+ "apihelp-paraminfo-example-1": "Mostrar informação para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> e <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Mostrar informação de todos os módulos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "Faz a análise sintática do conteúdo e devolve o resultado da análise.",
+ "apihelp-parse-extended-description": "Consulte os vários módulos disponíveis no parâmetro prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obter informação da versão atual de uma página.\n\nHá várias formas de especificar o texto a analisar:\n# Especificar uma página ou revisão, usando <var>$1page</var>, <var>$1pageid</var> ou <var>$1oldid</var>.\n# Especificar o conteúdo de forma explícita, usando <var>$1text</var>, <var>$1title</var>, <var>$1revid</var> e <var>$1contentmodel</var>.\n# Especificar só um resumo a analisar. <var>$1prop</var> deve receber o valor vazio.",
+ "apihelp-parse-param-title": "Título da página à qual o texto pertence. Se omitido, é preciso especificar <var>$1contentmodel</var> e deve usar [[API]] como título.",
+ "apihelp-parse-param-text": "Texto a analisar. Usar <var>$1title</var> ou <var>$1contentmodel</var> para controlar o modelo de conteúdo.",
+ "apihelp-parse-param-revid": "Identificador da revisão, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variáveis semelhantes.",
+ "apihelp-parse-param-summary": "Resumo a analisar.",
+ "apihelp-parse-param-page": "Analisar o conteúdo desta página. Não pode ser usado em conjunto com <var>$1text</var> e <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Analisar o conteúdo desta página. Tem precedência sobre <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Se <var>$1page</var> ou <var>$1pageid</var> estiverem definidos para um redirecionamento, resolvê-lo.",
+ "apihelp-parse-param-oldid": "Analisar o conteúdo desta revisão. Tem precedência sobre <var>$1page</var> e <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "As informações que devem ser obtidas:",
+ "apihelp-parse-paramvalue-prop-text": "Fornece o texto analisado resultante do texto wiki.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Fornece as hiperligações interlínguas do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-categories": "Fornece as categorias do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Fornece a versão HTML das categorias.",
+ "apihelp-parse-paramvalue-prop-links": "Fornece as hiperligações internas do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-templates": "Fornece as predefinições do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-images": "Fornece as imagens do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Fornece as hiperligações externas do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-sections": "Fornece as secções do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-revid": "Adiciona o identificador de revisão da página analisada.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Adiciona o título do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-headitems": "Fornece os elementos a colocar no <code>&lt;head&gt;</code> da página.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Fornece o <code>&lt;head&gt;</code> analisado da página.",
+ "apihelp-parse-paramvalue-prop-modules": "Fornece os módulos ResourceLoader usados na página. Para carregá-los, usar <code>mw.loader.using()</code>. Uma das variáveis <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> tem de ser pedida em conjunto com <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página. Para aplicá-las, usar <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página, no formato de uma ''string'' JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "Fornece o HTML dos indicadores de estado de página que são usados na página.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Fornece as hiperligações interwikis do texto wiki analisado.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Fornece o texto wiki original que foi analisado.",
+ "apihelp-parse-paramvalue-prop-properties": "Fornece várias propriedades definidas no texto analisado.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Fornece o relatório de limites de forma estruturada. Não fornece dados quando <var>$1disablelimitreport</var> está definido.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Fornece a versão HTML do relatório de limites. Não fornece dados quando <var>$1disablelimitreport</var> está definido.",
+ "apihelp-parse-paramvalue-prop-parsetree": "A árvore de análise XML do conteúdo da revisão (requer o modelo de conteúdo <code>$1</code>).",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Fornece os avisos gerados durante a análise sintática do conteúdo.",
+ "apihelp-parse-param-wrapoutputclass": "A classe CSS a utilizar para envolver o resultado do analisador sintático.",
+ "apihelp-parse-param-pst": "Fazer uma transformação anterior à gravação do texto de entrada, antes de analisá-lo. Só é válido quando usado com texto.",
+ "apihelp-parse-param-onlypst": "Fazer uma transformação anterior à gravação (PST, ''pre-save transform'') do texto de entrada, mas não o analisar. Devolve o mesmo texto após aplicação da PST. Só é válido quando usado com <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Inclui hiperligações interlínguas fornecidas por extensões (para ser usado com <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Analisar apenas o conteúdo desta secção.\n\nQuando tiver o valor <kbd>new</kbd>, analisar <var>$1text</var> e <var>$1sectiontitle</var> como se fosse adicionar uma nova secção à página.\n\n<kbd>new</kbd> só é permitido quando se especifica <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "O novo título da secção quando <var>section</var> tem o valor <kbd>new</kbd>.\n\nAo contrário da edição de páginas, este não toma o valor de <var>summary</var> se for omitido ou estiver vazio.",
+ "apihelp-parse-param-disablelimitreport": "Omitir o relatório de limites (\"NewPP limit report\") do resultado de saída do analisador sintático.",
+ "apihelp-parse-param-disablepp": "Em vez deste, usar <var>$1disablelimitreport</var>.",
+ "apihelp-parse-param-disableeditsection": "Omitir as hiperligações para edição da secção no resultado da análise sintática.",
+ "apihelp-parse-param-disabletidy": "Não fazer a limpeza do HTML (isto é, o ''tidy'') no resultado da análise sintática.",
+ "apihelp-parse-param-disablestylededuplication": "Não desduplicar as folhas de estilo internas (etiquetas <nowiki><style></nowiki>) na saída do analisador sintático.",
+ "apihelp-parse-param-generatexml": "Gerar a árvore de análise XML (requer o modelo de conteúdo <code>$1</code>; substituído por <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Executar a análise em modo de antevisão.",
+ "apihelp-parse-param-sectionpreview": "Executar a análise em modo de antevisão (também ativa o modo de antevisão).",
+ "apihelp-parse-param-disabletoc": "Omitir a tabela de conteúdo no resultado.",
+ "apihelp-parse-param-useskin": "Aplicar o tema selecionado ao resultado do analisador sintático. Pode afetar as seguintes propriedades: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-param-contentformat": "O formato da seriação de conteúdo, usado para o texto de entrada. Só é válido quando usado com $1text.",
+ "apihelp-parse-param-contentmodel": "Modelo de conteúdo do texto de entrada. Se omitido, $1title tem de ser especificado e o valor por omissão será o modelo do título especificado. Só é válido quando usado com $1text.",
+ "apihelp-parse-example-page": "Fazer a análise sintática de uma página.",
+ "apihelp-parse-example-text": "Fazer a análise sintática do texto wiki.",
+ "apihelp-parse-example-texttitle": "Fazer a análise sintática do texto wiki, especificando o título da página.",
+ "apihelp-parse-example-summary": "Fazer a análise sintática de um resumo.",
+ "apihelp-patrol-summary": "Patrulhar uma página ou revisão.",
+ "apihelp-patrol-param-rcid": "Identificador da mudança recente a patrulhar.",
+ "apihelp-patrol-param-revid": "Identificador da revisão a patrulhar.",
+ "apihelp-patrol-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de edições patrulhadas.",
+ "apihelp-patrol-example-rcid": "Patrulhar uma mudança recente.",
+ "apihelp-patrol-example-revid": "Patrulhar uma revisão.",
+ "apihelp-protect-summary": "Alterar o nível de proteção de uma página.",
+ "apihelp-protect-param-title": "Título da página a proteger ou desproteger. Não pode ser usado em conjunto com $1pageid.",
+ "apihelp-protect-param-pageid": "Identificador da página a proteger ou desproteger. Não pode ser usado em conjunto com $1title.",
+ "apihelp-protect-param-protections": "Lista de níveis de proteção, na forma <kbd>action=level</kbd> (por exemplo, <kbd>edit=sysop</kbd>). O nível <kbd>all</kbd> significada que todos podem executar a operação, isto é, sem restrição.\n\n<strong>Nota:</strong> Serão removidas as restrições de quaisquer operações não listadas.",
+ "apihelp-protect-param-expiry": "Datas e horas de expiração. Se só uma data e hora for definida, será usada para todas as proteções. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd>, para proteção sem expiração.",
+ "apihelp-protect-param-reason": "Motivo da proteção ou desproteção.",
+ "apihelp-protect-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de proteções.",
+ "apihelp-protect-param-cascade": "Ativar a proteção em cascata (isto é, proteger as predefinições transcluídas e as imagens usadas nesta página). Ignorado se nenhum dos níveis de proteção dados suportam a proteção em cascata.",
+ "apihelp-protect-param-watch": "Se definido, adicionar a página que está a ser protegida ou desprotegida às páginas vigiadas do utilizador atual.",
+ "apihelp-protect-param-watchlist": "Adicionar ou remover incondicionalmente a página da lista de páginas vigiadas do utilizador atual, usar as preferências ou não alterar o estado de vigilância.",
+ "apihelp-protect-example-protect": "Proteger uma página.",
+ "apihelp-protect-example-unprotect": "Desproteger uma página definindo a restrição <kbd>all</kbd> (isto é, todos podem executar a operação).",
+ "apihelp-protect-example-unprotect2": "Desproteger uma página definindo que não há restrições.",
+ "apihelp-purge-summary": "Limpar a cache para os títulos especificados.",
+ "apihelp-purge-param-forcelinkupdate": "Atualizar as tabelas de hiperligações.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Atualizar a tabela de hiperligações, e atualizar as tabelas de hiperligações de qualquer página que usa esta página como modelo.",
+ "apihelp-purge-example-simple": "Purgar as páginas <kbd>Main Page</kbd> e <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Purgar as primeiras 10 páginas no espaço nominal principal.",
+ "apihelp-query-summary": "Obter dados de, e sobre, o MediaWiki.",
+ "apihelp-query-extended-description": "Todas as modificações de dados terão primeiro que usar uma consulta para adquirir uma chave, o que visa impedir abusos de sítios maliciosos.",
+ "apihelp-query-param-prop": "As propriedades a serem obtidas para as páginas consultadas.",
+ "apihelp-query-param-list": "As listas a serem obtidas.",
+ "apihelp-query-param-meta": "Os metadados a serem obtidos.",
+ "apihelp-query-param-indexpageids": "Incluir uma secção adicional de identificadores de página que lista todos os identificadores de página devolvidos.",
+ "apihelp-query-param-export": "Exportar as revisões atuais de todas as páginas fornecidas ou geradas.",
+ "apihelp-query-param-exportnowrap": "Devolver o XML de exportação sem envolvê-lo num resultado XML (o mesmo formato que [[Special:Export]]). Só pode ser usado com $1export.",
+ "apihelp-query-param-iwurl": "Indica se deve ser obtido o URL completo quando o título é uma hiperligação interwikis.",
+ "apihelp-query-param-rawcontinue": "Devolver os dados em bruto de <samp>query-continue</samp> para continuar.",
+ "apihelp-query-example-revisions": "Obter [[Special:ApiHelp/query+siteinfo|informação do sítio]] e as [[Special:ApiHelp/query+revisions|revisões]] da página <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Obter as revisões das páginas que começam por <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "Enumerar todas as categorias.",
+ "apihelp-query+allcategories-param-from": "A categoria a partir da qual será começada a enumeração.",
+ "apihelp-query+allcategories-param-to": "A categoria na qual será terminada a enumeração.",
+ "apihelp-query+allcategories-param-prefix": "Procurar todos os títulos de categorias que começam por este valor.",
+ "apihelp-query+allcategories-param-dir": "A direção da ordenação.",
+ "apihelp-query+allcategories-param-min": "Só devolver as categorias que tenham no mínimo este número de membros.",
+ "apihelp-query+allcategories-param-max": "Só devolver as categorias que tenham no máximo este número de membros.",
+ "apihelp-query+allcategories-param-limit": "O número de categorias a serem devolvidas.",
+ "apihelp-query+allcategories-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Adiciona o número de páginas na categoria.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Etiqueta as categorias ocultadas com <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Lista as categorias com informação sobre o número de páginas em cada uma delas.",
+ "apihelp-query+allcategories-example-generator": "Obter informação sobre a própria página de categoria, para as categorias que começam por <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "Listar todas as revisões eliminadas por um utilizador ou de um espaço nominal.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Só pode ser usado com <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Não pode ser usado com <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "A data e hora da revisão a partir da qual será começada a enumeração.",
+ "apihelp-query+alldeletedrevisions-param-end": "A data e hora na qual será terminada a enumeração.",
+ "apihelp-query+alldeletedrevisions-param-from": "Começar a listagem neste título.",
+ "apihelp-query+alldeletedrevisions-param-to": "Terminar a listagem neste título.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Procurar todos os títulos de página que começam por este valor.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Listar só as revisões marcadas com esta etiqueta.",
+ "apihelp-query+alldeletedrevisions-param-user": "Listar só as revisões feitas por este utilizador.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Não listar as revisões feitas por este utilizador.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Listar só as páginas neste espaço nominal.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Devido ao [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo avarento]], o uso de <var>$1user</var> e <var>$1namespace</var> em conjunto pode resultar na devolução de menos de <var>$1limit</var> resultados antes de continuar; em casos extremos pode não ser devolvido qualquer resultado.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Ao ser usado como gerador, gerar títulos em vez de identificadores de revisões.",
+ "apihelp-query+alldeletedrevisions-example-user": "Listar as últimas 50 contribuições eliminadas do utilizador <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Listar as primeiras 50 revisões eliminadas no espaço nominal principal.",
+ "apihelp-query+allfileusages-summary": "Listar todas as utilizações de ficheiros, incluindo ficheiros que não existam.",
+ "apihelp-query+allfileusages-param-from": "O título do ficheiro a partir do qual será começada a enumeração.",
+ "apihelp-query+allfileusages-param-to": "O título do ficheiro no qual será terminada a enumeração.",
+ "apihelp-query+allfileusages-param-prefix": "Procurar todos os títulos de ficheiro que começam por este valor.",
+ "apihelp-query+allfileusages-param-unique": "Mostrar só nomes de ficheiro únicos. Não pode ser usado com <kbd>$1prop=ids</kbd>.\nAo ser usado como gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+allfileusages-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Adiciona os identificadores das páginas que utilizam (não pode ser usado com <var>$1unique</var>).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Adiciona o título do ficheiro.",
+ "apihelp-query+allfileusages-param-limit": "O número total de elementos a serem devolvidos.",
+ "apihelp-query+allfileusages-param-dir": "A direção de listagem.",
+ "apihelp-query+allfileusages-example-B": "Listar os títulos de ficheiros, incluindo aqueles em falta, com os identificadores das páginas de onde provêm, começando no <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Listar os títulos de ficheiro únicos.",
+ "apihelp-query+allfileusages-example-unique-generator": "Obtém todos os títulos de ficheiros, marcando aqueles em falta.",
+ "apihelp-query+allfileusages-example-generator": "Obtém as páginas que contêm os ficheiros.",
+ "apihelp-query+allimages-summary": "Enumerar todas as imagens sequencialmente.",
+ "apihelp-query+allimages-param-sort": "Propriedade pela qual fazer a ordenação.",
+ "apihelp-query+allimages-param-dir": "A direção de listagem.",
+ "apihelp-query+allimages-param-from": "O título da imagem a partir do qual será começada a enumeração. Só pode ser usado com $1sort=name.",
+ "apihelp-query+allimages-param-to": "O título da imagem no qual será terminada a enumeração. Só pode ser usado com $1sort=name.",
+ "apihelp-query+allimages-param-start": "A data e hora da imagem a partir da qual será começada a enumeração. Só pode ser usado com $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "A data e hora da imagem na qual será terminada a enumeração. Só pode ser usado com $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Procurar todos os títulos de imagem que começam por este valor. Só pode ser usado com $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Limitar só às imagens com este número mínimo de bytes.",
+ "apihelp-query+allimages-param-maxsize": "Limitar só às imagens com este número máximo de bytes.",
+ "apihelp-query+allimages-param-sha1": "Resumo criptográfico SHA1 da imagem. Tem precedência sobre $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "Resumo criptográfico SHA1 da imagem em base 36 (usado no MediaWiki).",
+ "apihelp-query+allimages-param-user": "Devolver só os ficheiros carregados por este utilizador. Só pode ser usado com $1sort=timestamp. Não pode ser usado em conjunto com $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Como filtrar os ficheiros carregados por robôs. Só pode ser usado com $1sort=timestamp. Não pode ser usado em conjunto com $1user.",
+ "apihelp-query+allimages-param-mime": "Tipos MIME a procurar; por exemplo, <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "O número total de imagens a serem devolvidas.",
+ "apihelp-query+allimages-example-B": "Mostrar uma lista dos ficheiros que começam com a letra <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Mostrar uma lista dos ficheiros carregados recentemente, semelhante a [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Mostrar uma lista dos ficheiros com os tipos MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>.",
+ "apihelp-query+allimages-example-generator": "Mostrar informação sobre 4 ficheiros, começando pela letra <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Enumerar todas as hiperligações que apontam para um determinado espaço nominal.",
+ "apihelp-query+alllinks-param-from": "O título da hiperligação a partir da qual será começada a enumeração.",
+ "apihelp-query+alllinks-param-to": "O título da hiperligação na qual será terminada a enumeração.",
+ "apihelp-query+alllinks-param-prefix": "Procurar todos os títulos ligados que começam por este valor.",
+ "apihelp-query+alllinks-param-unique": "Mostrar só títulos ligados únicos. Não pode ser usado com <kbd>$1prop=ids</kbd>.\nAo ser usado como gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+alllinks-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Adiciona o identificador da página que contém a hiperligação (não pode ser usado com <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Adiciona o título da hiperligação.",
+ "apihelp-query+alllinks-param-namespace": "O espaço nominal a ser enumerado.",
+ "apihelp-query+alllinks-param-limit": "O número total de entradas a serem devolvidas.",
+ "apihelp-query+alllinks-param-dir": "A direção de listagem.",
+ "apihelp-query+alllinks-example-B": "Listar os títulos para os quais existem ligações, incluindo títulos em falta, com os identificadores das páginas que contêm as respetivas ligações, começando pela letra <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Listar os títulos únicos para os quais existem hiperligações.",
+ "apihelp-query+alllinks-example-unique-generator": "Obtém todos os títulos para os quais existem hiperligações, marcando aqueles em falta.",
+ "apihelp-query+alllinks-example-generator": "Obtém as páginas que contêm as hiperligações.",
+ "apihelp-query+allmessages-summary": "Devolver as mensagens deste sítio.",
+ "apihelp-query+allmessages-param-messages": "Mensagens a serem produzidas no resultado. <kbd>*</kbd> (o valor por omissão) significa todas as mensagens.",
+ "apihelp-query+allmessages-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+allmessages-param-enableparser": "Definir para ativar o analisador sintático; irá pré-processar o texto wiki da mensagem (substituir palavras mágicas, processar predefinições, etc.).",
+ "apihelp-query+allmessages-param-nocontent": "Se definido, não incluir o conteúdo das mensagens no resultado de saída.",
+ "apihelp-query+allmessages-param-includelocal": "Incluir também as mensagens locais, isto é, mensagens que não existem no software mas existem como uma página no espaço nominal {{ns:MediaWiki}}.\nIsto lista todas as páginas do espaço nominal {{ns:MediaWiki}}, portanto, também irá listar aquelas que não são verdadeiramente mensagens, como [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Os argumentos a serem substituídos na mensagem.",
+ "apihelp-query+allmessages-param-filter": "Devolver só as mensagens cujos nomes contêm este texto.",
+ "apihelp-query+allmessages-param-customised": "Devolver só as mensagens neste estado de personalização.",
+ "apihelp-query+allmessages-param-lang": "Devolver as mensagens nesta língua.",
+ "apihelp-query+allmessages-param-from": "Devolver as mensagens, a partir desta mensagem.",
+ "apihelp-query+allmessages-param-to": "Devolver as mensagens, até esta mensagem.",
+ "apihelp-query+allmessages-param-title": "Nome da página a utilizar como contexto ao fazer a análise sintática da mensagem (para a opção $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Devolver as mensagens com este prefixo.",
+ "apihelp-query+allmessages-example-ipb": "Mostrar mensagens que começam por <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Mostrar as mensagens <kbd>august</kbd> e <kbd>mainpage</kbd> em Alemão.",
+ "apihelp-query+allpages-summary": "Enumerar sequencialmente todas as páginas de um determinado espaço nominal.",
+ "apihelp-query+allpages-param-from": "O título de página a partir do qual será começada a enumeração.",
+ "apihelp-query+allpages-param-to": "O título de página no qual será terminada a enumeração.",
+ "apihelp-query+allpages-param-prefix": "Procurar todos os títulos de páginas que comecem com este valor.",
+ "apihelp-query+allpages-param-namespace": "O espaço nominal a ser enumerado.",
+ "apihelp-query+allpages-param-filterredir": "As páginas a serem listadas.",
+ "apihelp-query+allpages-param-minsize": "Limitar só às páginas com este número mínimo de bytes.",
+ "apihelp-query+allpages-param-maxsize": "Limitar só às páginas com este número máximo de bytes.",
+ "apihelp-query+allpages-param-prtype": "Limitar só às páginas protegidas.",
+ "apihelp-query+allpages-param-prlevel": "Filtrar as proteções com base no nível de proteção (tem de ser usado com o parâmetro $1prtype=).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filtrar as proteções com base na proteção em cascata (ignorado se $1prtype não estiver presente).",
+ "apihelp-query+allpages-param-limit": "O número total de páginas a serem devolvidas.",
+ "apihelp-query+allpages-param-dir": "A direção de listagem.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filtrar dependo de uma página conter hiperligações interlínguas. Note que isto pode não ter em consideração hiperligações interlínguas adicionadas por extensões.",
+ "apihelp-query+allpages-param-prexpiry": "O tipo de expiração pelo qual as páginas serão filtradas:\n;indefinite:Obter só páginas com um período de expiração indefinido.\n;definite:Obter só páginas com um período de expiração definido (específico).\n;all:Obter páginas com qualquer período de expiração.",
+ "apihelp-query+allpages-example-B": "Mostrar uma lista de páginas, começando na letra <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Mostrar informação sobre 4 páginas, começando na letra <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Mostrar o conteúdo das primeiras 2 páginas que não sejam redirecionamentos, começando na página <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Listar todos os redirecionamentos para um espaço nominal.",
+ "apihelp-query+allredirects-param-from": "O título do redirecionamento a partir do qual será começada a enumeração.",
+ "apihelp-query+allredirects-param-to": "O título do redirecionamento no qual será terminada a enumeração.",
+ "apihelp-query+allredirects-param-prefix": "Procurar todas as páginas de destino que começam por este valor.",
+ "apihelp-query+allredirects-param-unique": "Mostrar só páginas de destino únicas. Não pode ser usado com <kbd>$1prop=ids|fragment|interwiki</kbd>.\nAo ser usado como gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+allredirects-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Adiciona o identificador da página que contém o redirecionamento (não pode ser usado com <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Adiciona o título do redirecionamento.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Adiciona o fragmento do redirecionamento, se existir (não pode ser usado com <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Adiciona o prefixo interwikis do redirecionamento, se existir (não pode ser usado em conjunto com <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "O espaço nominal a ser enumerado.",
+ "apihelp-query+allredirects-param-limit": "O número total de elementos a serem devolvidos.",
+ "apihelp-query+allredirects-param-dir": "A direção de listagem.",
+ "apihelp-query+allredirects-example-B": "Listar as páginas de destino, incluindo aquelas em falta, com os identificadores da página de origem, começando na <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Listar as páginas de destino únicas.",
+ "apihelp-query+allredirects-example-unique-generator": "Obtém todas as páginas de destino, marcando aquelas em falta.",
+ "apihelp-query+allredirects-example-generator": "Obtém as páginas que contêm os redirecionamentos.",
+ "apihelp-query+allrevisions-summary": "Listar todas as revisões.",
+ "apihelp-query+allrevisions-param-start": "A data e hora a partir da qual será começada a enumeração.",
+ "apihelp-query+allrevisions-param-end": "A data e hora na qual será terminada a enumeração.",
+ "apihelp-query+allrevisions-param-user": "Listar só as revisões deste utilizador.",
+ "apihelp-query+allrevisions-param-excludeuser": "Não listar as revisões deste utilizador.",
+ "apihelp-query+allrevisions-param-namespace": "Listar só as páginas neste espaço nominal.",
+ "apihelp-query+allrevisions-param-generatetitles": "Ao ser usado como gerador, gerar títulos em vez de identificadores de revisões.",
+ "apihelp-query+allrevisions-example-user": "Listar as últimas 50 contribuições do utilizador <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Listar as primeiras 50 revisões no espaço nominal principal.",
+ "apihelp-query+mystashedfiles-summary": "Obter uma lista dos ficheiros que estão na área de ficheiros escondidos do utilizador atual.",
+ "apihelp-query+mystashedfiles-param-prop": "As propriedades a serem obtidas para os ficheiros.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Obter o tamanho do ficheiro e as dimensões da imagem.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Obter o tipo MIME e o tipo de multimédia do ficheiro.",
+ "apihelp-query+mystashedfiles-param-limit": "Quantos ficheiros a serem obtidos.",
+ "apihelp-query+mystashedfiles-example-simple": "Obter a chave, o tamanho e as dimensões em píxeis dos ficheiros na área de ficheiros escondidos do utilizador.",
+ "apihelp-query+alltransclusions-summary": "Listar todas as transclusões (páginas incorporadas utilizando &#123;&#123;x&#125;&#125;), incluindo as que estejam em falta.",
+ "apihelp-query+alltransclusions-param-from": "O título da transclusão a partir do qual será começada a enumeração.",
+ "apihelp-query+alltransclusions-param-to": "O título da transclusão no qual será terminada a enumeração.",
+ "apihelp-query+alltransclusions-param-prefix": "Procurar todos os títulos transcluídos que começam por este valor.",
+ "apihelp-query+alltransclusions-param-unique": "Mostrar só títulos transcluídos únicos. Não pode ser usado com <kbd>$1prop=ids</kbd>.\nAo ser usado como gerador, produz páginas de destino em vez de páginas de origem.",
+ "apihelp-query+alltransclusions-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Adiciona o identificador da página onde é feita a transclusão (não pode ser usado com <var>$1unique</var>).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Adiciona o título da transclusão.",
+ "apihelp-query+alltransclusions-param-namespace": "O espaço nominal a enumerar.",
+ "apihelp-query+alltransclusions-param-limit": "O número total de elementos a serem devolvidos.",
+ "apihelp-query+alltransclusions-param-dir": "A direção de listagem.",
+ "apihelp-query+alltransclusions-example-B": "Listar os títulos transcluídos, incluindo aqueles em falta, com os identificadores das páginas de origem, começando no <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Listar os títulos transcluídos únicos.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtém todos os títulos transcluídos, marcando aqueles em falta.",
+ "apihelp-query+alltransclusions-example-generator": "Obtém as páginas que contêm as transclusões.",
+ "apihelp-query+allusers-summary": "Enumerar todos os utilizadores registados.",
+ "apihelp-query+allusers-param-from": "O nome de utilizador a partir do qual será começada a enumeração.",
+ "apihelp-query+allusers-param-to": "O nome de utilizador no qual será terminada a enumeração.",
+ "apihelp-query+allusers-param-prefix": "Procurar todos os nomes de utilizador que começam por este valor.",
+ "apihelp-query+allusers-param-dir": "A direção da ordenação.",
+ "apihelp-query+allusers-param-group": "Incluir só os utilizadores nos grupos indicados.",
+ "apihelp-query+allusers-param-excludegroup": "Excluir os utilizadores nos grupos indicados.",
+ "apihelp-query+allusers-param-rights": "Incluir só os utilizadores com as permissões indicadas. Não inclui as permissões atribuídas por grupos implícitos ou de promoção automática como *, utilizador, ou autoconfirmado.",
+ "apihelp-query+allusers-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Adiciona a informação sobre um bloqueio atual do utilizador.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Lista os grupos a que o utilizador pertence. Isto usa mais recursos do servidor e pode devolver menos resultados do que o limite.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lista todos os grupos a que o utilizador pertence de forma automática.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Lista as permissões que o utilizador tem.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Adiciona a contagem de edições do utilizador.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Adiciona a data e hora de registo do utilizador, se estiver disponível (pode estar vazia).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Adiciona os identificadores centrais e o estado de ligação central (''attachment'') do utilizador.",
+ "apihelp-query+allusers-param-limit": "O número total de nomes de utilizador a serem devolvidos.",
+ "apihelp-query+allusers-param-witheditsonly": "Listar só os utilizadores que realizaram edições.",
+ "apihelp-query+allusers-param-activeusers": "Listar só os utilizadores ativos {{PLURAL:$1|no último dia|nos últimos $1 dias}}.",
+ "apihelp-query+allusers-param-attachedwiki": "Com <kbd>$1prop=centralids</kbd>, indicar também se o utilizador tem ligação com a wiki designada por este identificador.",
+ "apihelp-query+allusers-example-Y": "Listar utilizadores, começando pelo <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Obter informação sobre o atual estado de autenticação.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Testar se o estado atual de autenticação do utilizador é suficiente para a operação especificada, que exige condições seguras.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Obter informação sobre os pedidos de autenticação que são necessários para a operação de autenticação especificada.",
+ "apihelp-query+authmanagerinfo-example-login": "Obter os pedidos que podem ser usados ao iniciar uma sessão.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Obter os pedidos que podem ser usados ao iniciar uma sessão, com os campos combinados.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Testar se a autenticação é suficiente para a operação <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Encontrar todas as páginas que contêm hiperligações para a página indicada.",
+ "apihelp-query+backlinks-param-title": "O título a ser procurado. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "O identificador do título a ser procurado. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "O espaço nominal a ser enumerado.",
+ "apihelp-query+backlinks-param-dir": "A direção de listagem.",
+ "apihelp-query+backlinks-param-filterredir": "Como filtrar os redirecionamentos. Se definido como <kbd>nonredirects</kbd> quando <var>$1redirect</var> está ativado, isto só é aplicado ao segundo nível.",
+ "apihelp-query+backlinks-param-limit": "O número total de páginas a serem devolvidas. Se <var>$1redirect</var> estiver ativado, o limite aplica-se a cada nível em separado (o que significa que até 2 * <var>$1limit</var> resultados podem ser devolvidos).",
+ "apihelp-query+backlinks-param-redirect": "Se a página que contém a hiperligação é um redirecionamento, procurar também todas as páginas que contêm hiperligações para esse redirecionamento. O limite máximo é reduzido para metade.",
+ "apihelp-query+backlinks-example-simple": "Mostrar as hiperligações para <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Obter informações sobre as páginas com hiperligações para <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Listar todos os utilizadores e endereços IP bloqueados.",
+ "apihelp-query+blocks-param-start": "A data e hora a partir da qual será começada a enumeração.",
+ "apihelp-query+blocks-param-end": "A data e hora na qual será terminada a enumeração.",
+ "apihelp-query+blocks-param-ids": "Lista dos identificadores de bloqueios a serem listados (opcional).",
+ "apihelp-query+blocks-param-users": "Lista dos utilizadores a serem procurados (opcional).",
+ "apihelp-query+blocks-param-ip": "Obter todos os bloqueios aplicáveis a este endereço IP ou intervalo CIDR, incluindo bloqueios de intervalos. Não pode ser usado em conjunto com <var>$3users</var>. Não são aceites intervalos CIDR maiores que IPv4/$1 ou IPv6/$2.",
+ "apihelp-query+blocks-param-limit": "O número máximo de bloqueios a listar.",
+ "apihelp-query+blocks-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Adiciona o identificador do bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Adiciona o nome do utilizador bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Adiciona o identificador do utilizador bloqueado.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Adiciona o nome do utilizador que fez o bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Adiciona o identificador do utilizador que fez o bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Adiciona a data e hora de realização do bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Adiciona a data e hora de expiração do bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Adiciona o motivo apresentado para o bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Adiciona o intervalo de endereços IP afetado pelo bloqueio.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Etiqueta o bloqueio com (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Mostrar só os bloqueios que preenchem estes critérios.\nPor exemplo, para ver só bloqueios indefinidos de endereços IP, defina <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Listar bloqueios.",
+ "apihelp-query+blocks-example-users": "Listar os bloqueios dos utilizadores <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Listar todas as categorias às quais as páginas pertencem.",
+ "apihelp-query+categories-param-prop": "As propriedades adicionais que devem ser obtidas para cada categoria:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Adiciona a chave de ordenação (''string'' hexadecimal) e o prefixo da chave de ordenação (parte legível) da categoria.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Adiciona a data e hora a que a categoria foi adicionada.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Etiqueta as categorias que estão ocultadas com <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Os tipos de categorias que serão mostrados.",
+ "apihelp-query+categories-param-limit": "O número de categorias a serem devolvidas.",
+ "apihelp-query+categories-param-categories": "Listar só estas categorias. Útil para verificar se uma determinada página está numa determinada categoria.",
+ "apihelp-query+categories-param-dir": "A direção de listagem.",
+ "apihelp-query+categories-example-simple": "Obter uma lista das categorias às quais pertence a página <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categories-example-generator": "Obter informação sobre todas as categorias usadas na página <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Devolve informação sobre as categorias indicadas.",
+ "apihelp-query+categoryinfo-example-simple": "Obter informações sobre <kbd>Category:Foo</kbd> e <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Listar todas as páginas numa categoria específica.",
+ "apihelp-query+categorymembers-param-title": "A categoria que será enumerada (obrigatório). Tem de incluir o prefixo <kbd>{{ns:category}}:</kbd>. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "Identificador da categoria a ser enumerada. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Adiciona o identificador da página.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Adiciona o título e o identificador do espaço nominal da página.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Adiciona a chave usada para a ordenação da categoria (''string'' hexadecimal).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Adiciona o prefixo da chave usada para a ordenação da categoria (parte legível da chave de ordenação).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Adiciona o tipo com que a página foi categorizada (<samp>page</samp>, <samp>subcat</samp> ou <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Adiciona a data e hora de inclusão da página.",
+ "apihelp-query+categorymembers-param-namespace": "Incluir só as páginas destes espaços nominais. Note que pode usar <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> em vez de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "O tipo de membros de categoria que devem ser incluídos. Ignorado se <kbd>$1sort=timestamp</kbd> estiver definido.",
+ "apihelp-query+categorymembers-param-limit": "O número máximo de páginas a serem devolvidas.",
+ "apihelp-query+categorymembers-param-sort": "Propriedade pela qual fazer a ordenação.",
+ "apihelp-query+categorymembers-param-dir": "A direção da ordenação.",
+ "apihelp-query+categorymembers-param-start": "A data e hora da página a partir da qual será começada a listagem. Só pode ser usado em conjunto com <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "A data e hora da página na qual será terminada a listagem. Só pode ser usado em conjunto com <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "A chave de ordenação a partir da qual a listagem será começada, como devolvida por <kbd>$1prop=sortkey</kbd>. Só pode ser usado com <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "A chave de ordenação na qual a listagem será terminada, como devolvida por <kbd>$1prop=sortkey</kbd>. só pode ser usado com <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "O prefixo da chave de ordenação a partir do qual a listagem será começada. Só pode ser usado com <kbd>$1sort=sortkey</kbd>. Tem precedência sobre <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "O prefixo da chave de ordenação <strong>antes</strong> do qual a listagem será terminada (não <strong>no</strong> qual; se este valor ocorrer não será incluído!). Só pode ser usado com <kbd>$1sort=sortkey</kbd>. Tem precedência sobre <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-startsortkey": "Em vez dele, usar $1starthexsortkey.",
+ "apihelp-query+categorymembers-param-endsortkey": "Em vez dele, usar $1endhexsortkey.",
+ "apihelp-query+categorymembers-example-simple": "Obter as primeiras 10 páginas na categoria <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Obter informações sobre as primeiras 10 páginas na categoria <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Obter a lista do contribuidores autenticados e a contagem dos contribuidores anónimos de uma página.",
+ "apihelp-query+contributors-param-group": "Incluir só os utilizadores nos grupos indicados. Não inclui os grupos implícitos ou de promoção automática como *, utilizador, ou autoconfirmado.",
+ "apihelp-query+contributors-param-excludegroup": "Excluir os utilizadores nos grupos indicados. Não inclui os grupos implícitos ou de promoção automática como *, utilizador, ou autoconfirmado.",
+ "apihelp-query+contributors-param-rights": "Incluir só os utilizadores com as permissões indicadas. Não inclui as permissões atribuídas por grupos implícitos ou de promoção automática como *, utilizador, ou autoconfirmado.",
+ "apihelp-query+contributors-param-excluderights": "Excluir os utilizadores com as permissões indicadas. Não inclui as permissões atribuídas por grupos implícitos ou de promoção automática como *, utilizador, ou autoconfirmado.",
+ "apihelp-query+contributors-param-limit": "O número de contribuidores a serem devolvidos.",
+ "apihelp-query+contributors-example-simple": "Mostrar os contribuidores da página <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Obter informações sobre as revisões eliminadas.",
+ "apihelp-query+deletedrevisions-extended-description": "Pode ser usado de várias maneiras:\n# Obter as revisões eliminadas para um conjunto de páginas, definindo títulos ou identificadores de página. Ordenados por título e data e hora.\n# Obter dados sobre um conjunto de revisões eliminadas definindo os respetivos ids: com identificadores de revisão. Ordenados pelo identificador de revisão.",
+ "apihelp-query+deletedrevisions-param-start": "A data e hora da revisão a partir da qual será começada a enumeração. Ignorado ao processar uma lista de identificadores de revisão.",
+ "apihelp-query+deletedrevisions-param-end": "A data e hora da revisão na qual será terminada a enumeração. Ignorado ao processar uma lista de identificadores de revisão.",
+ "apihelp-query+deletedrevisions-param-tag": "Listar só as revisões marcadas com esta etiqueta.",
+ "apihelp-query+deletedrevisions-param-user": "Listar só as revisões deste utilizador.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Não listar as revisões deste utilizador.",
+ "apihelp-query+deletedrevisions-example-titles": "Listar as revisões eliminadas das páginas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, com o conteúdo.",
+ "apihelp-query+deletedrevisions-example-revids": "Listar a informação da revisão eliminada <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Listar as revisões eliminadas.",
+ "apihelp-query+deletedrevs-extended-description": "Opera em três modos:\n# Listar as revisões eliminadas dos títulos indicados, ordenadas por data e hora.\n# Listar as contribuições eliminadas do utilizador indicado, ordenadas por data e hora (sem especificar títulos).\n# Listar todas as revisões eliminadas no espaço nominal indicado, ordenadas por título e por data e hora (sem especificar títulos, sem definir $1user).\n\nAlguns parâmetros só se aplicam a alguns modos e são ignorados noutros.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+ "apihelp-query+deletedrevs-param-start": "A data e hora da revisão a partir da qual será começada a enumeração.",
+ "apihelp-query+deletedrevs-param-end": "A data e hora da revisão na qual será terminada a enumeração.",
+ "apihelp-query+deletedrevs-param-from": "Começar a listagem neste título.",
+ "apihelp-query+deletedrevs-param-to": "Terminar a listagem neste título.",
+ "apihelp-query+deletedrevs-param-prefix": "Procurar todos os títulos de página que começam por este valor.",
+ "apihelp-query+deletedrevs-param-unique": "Listar só uma revisão para cada página.",
+ "apihelp-query+deletedrevs-param-tag": "Listar só as revisões marcadas com esta etiqueta.",
+ "apihelp-query+deletedrevs-param-user": "Listar só as revisões deste utilizador.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Não listar edições deste utilizador.",
+ "apihelp-query+deletedrevs-param-namespace": "Listar só as páginas neste domínio.",
+ "apihelp-query+deletedrevs-param-limit": "O número máximo de revisões a serem listadas.",
+ "apihelp-query+deletedrevs-param-prop": "As propriedades a serem obtidas:\n;revid:Adiciona o identificador da revisão eliminada.\n;parentid:Adiciona o identificador da revisão anterior da página.\n;user:Adiciona o utilizador que fez a revisão.\n;userid:Adiciona o identificador do utilizador que fez a revisão.\n;comment:Adiciona o comentário da revisão.\n;parsedcomment:Adiciona o comentário da revisão após passagem pelo analisador sintático.\n;minor:Etiqueta a revisão como uma revisão menor.\n;len:Adiciona o comprimento (em bytes) da revisão.\n;sha1:Adiciona o SHA-1 da revisão (na base 16).\n;content:Adiciona o conteúdo da revisão.\n;token:<span class=\"apihelp-deprecated\">Obsoleto.</span> Fornece a chave da edição.\n;tags:Etiquetas da revisão.",
+ "apihelp-query+deletedrevs-example-mode1": "Listar só as últimas revisões eliminadas das páginas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, com o conteúdo (modo 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Listar as últimas 50 contribuições eliminadas do utilizador <kbd>Bob</kbd> (modo 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Listar as primeiras 50 revisões eliminadas no espaço nominal principal (modo 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Listar as primeiras 50 páginas eliminadas no espaço nominal {{ns:talk}} (modo 3).",
+ "apihelp-query+disabled-summary": "Este módulo de consulta foi desativado.",
+ "apihelp-query+duplicatefiles-summary": "Listar todos os ficheiros que são duplicados dos ficheiros indicados com base no seu resumo criptográfico.",
+ "apihelp-query+duplicatefiles-param-limit": "O número de ficheiros duplicados a serem devolvidos.",
+ "apihelp-query+duplicatefiles-param-dir": "A direção de listagem.",
+ "apihelp-query+duplicatefiles-param-localonly": "Procurar ficheiros só no repositório local.",
+ "apihelp-query+duplicatefiles-example-simple": "Procurar os ficheiros duplicados de [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Procurar duplicados de todos os ficheiros.",
+ "apihelp-query+embeddedin-summary": "Encontrar todas as páginas que incorporam (transcluem) o título indicado.",
+ "apihelp-query+embeddedin-param-title": "O título a procurar. Não pode ser usado em conjunto com $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "O identificador da página a procurar. Não pode ser usado em conjunto com $1title.",
+ "apihelp-query+embeddedin-param-namespace": "O espaço nominal a ser enumerado.",
+ "apihelp-query+embeddedin-param-dir": "A direção de listagem.",
+ "apihelp-query+embeddedin-param-filterredir": "Como filtrar os redirecionamentos.",
+ "apihelp-query+embeddedin-param-limit": "O número total de páginas a serem devolvidas.",
+ "apihelp-query+embeddedin-example-simple": "Mostrar as páginas que transcluem <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Obter informação sobre as páginas que transcluem <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "Devolve todos os URL externos (que não sejam interwikis) das páginas especificadas.",
+ "apihelp-query+extlinks-param-limit": "O número de hiperligações a serem devolvidas.",
+ "apihelp-query+extlinks-param-protocol": "Protocolo do URL. Se vazio e <var>$1query</var> está definido, o protocolo é <kbd>http</kbd>. Deixe este parâmetro e <var>$1query</var> vazios para listar todas as hiperligações externas.",
+ "apihelp-query+extlinks-param-query": "Texto de pesquisa sem protocolo. Útil para verificar se uma determinada página contém um determinado URL externo.",
+ "apihelp-query+extlinks-param-expandurl": "Expandir os URL relativos a protocolo com o protocolo canónico.",
+ "apihelp-query+extlinks-example-simple": "Obter uma lista das hiperligações externas da <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "Enumerar as páginas que contêm um determinado URL.",
+ "apihelp-query+exturlusage-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Adiciona o identificador da página.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Adiciona o título e o identificador do espaço nominal da página.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Adiciona o URL usado na página.",
+ "apihelp-query+exturlusage-param-protocol": "Protocolo do URL. Se vazio e <var>$1query</var> está definido, o protocolo é <kbd>http</kbd>. Deixe este parâmetro e <var>$1query</var> vazios para listar todas as hiperligações externas.",
+ "apihelp-query+exturlusage-param-query": "Texto da pesquisa sem um protocolo. Ver [[Special:LinkSearch]]. Deixar vazio para listar todas as hiperligações externas.",
+ "apihelp-query+exturlusage-param-namespace": "Os espaços nominais a serem enumerados.",
+ "apihelp-query+exturlusage-param-limit": "O número de páginas a serem devolvidas.",
+ "apihelp-query+exturlusage-param-expandurl": "Expandir os URL relativos a protocolo com o protocolo canónico.",
+ "apihelp-query+exturlusage-example-simple": "Mostrar as páginas com hiperligações para <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "Enumerar todos os ficheiros eliminados sequencialmente.",
+ "apihelp-query+filearchive-param-from": "O título da imagem a partir do qual será começada a enumeração.",
+ "apihelp-query+filearchive-param-to": "O título da imagem no qual será terminada a enumeração.",
+ "apihelp-query+filearchive-param-prefix": "Procurar todos os títulos de imagem que começam por este valor.",
+ "apihelp-query+filearchive-param-limit": "O número total de imagens a devolver.",
+ "apihelp-query+filearchive-param-dir": "A direção de listagem.",
+ "apihelp-query+filearchive-param-sha1": "O resumo criptográfico SHA-1 da imagem. Tem precedência sobre $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "O resumo criptográfico da imagem na base 36 (usado no MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "As informações da imagem que devem ser obtidas:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Adiciona o resumo criptográfico SHA-1 da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Adiciona a data e hora da versão carregada.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Adiciona o utilizador que carregou a versão da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Adiciona o tamanho da imagem em ''bytes'' e a altura, largura e contagem de páginas (se aplicável).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Nome alternativo para ''size''.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Adiciona a descrição da versão da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Fazer a análise sintática da descrição da versão.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Adiciona o tipo MIME da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Adiciona o tipo de multimédia da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Lista os metadados Exif para a versão da imagem.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Adiciona a profundidade em ''bits'' da versão.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Adiciona o nome de ficheiro da versão arquivada das versões anteriores à última.",
+ "apihelp-query+filearchive-example-simple": "Mostrar uma lista de todos os ficheiros eliminados.",
+ "apihelp-query+filerepoinfo-summary": "Devolver meta informação sobre os repositórios de imagens configurados na wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "As propriedades do repositório que devem ser obtidas (em algumas wikis poderão haver mais disponíveis):\n;apiurl:URL para a API do repositório - útil para obter informação de imagens do servidor.\n;name:A chave para o repositório - usada, por exemplo, em <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e nos valores de retorno de [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:O nome legível da wiki repositório.\n;rooturl:URL de raiz para endereços de imagens.\n;local:Se o repositório é o local ou não.",
+ "apihelp-query+filerepoinfo-example-simple": "Obter informações sobre os repositórios de ficheiros.",
+ "apihelp-query+fileusage-summary": "Encontrar todas as páginas que usam os ficheiros indicados.",
+ "apihelp-query+fileusage-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "O identificador de cada página.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "O título de cada página.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Indicar se a página é um redirecionamento.",
+ "apihelp-query+fileusage-param-namespace": "Incluir só as páginas destes espaços nominais.",
+ "apihelp-query+fileusage-param-limit": "O número de elementos a serem devolvidos.",
+ "apihelp-query+fileusage-param-show": "Mostrar só as páginas que correspondem a estes critérios:\n;redirect:Mostrar só os redirecionamentos.\n;!redirect:Mostrar só os não redirecionamentos.",
+ "apihelp-query+fileusage-example-simple": "Obter uma lista das páginas que usam [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Obter informação sobre as páginas que usam [[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "Devolve informação do ficheiro e o historial de carregamentos.",
+ "apihelp-query+imageinfo-param-prop": "As informações do ficheiro que devem ser obtidas:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Adiciona a data e hora da versão carregada.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Adiciona o utilizador que carregou cada versão de ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Adiciona o identificador do utilizador que carregou cada versão de ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "O comentário da versão.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Fazer a análise sintática do comentário da versão.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Adiciona o título canónico do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Devolve URL para o ficheiro e página de descrição.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Adiciona o tamanho do ficheiro em ''bytes'' e a altura, largura e contagem de páginas (se aplicável).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Nome alternativo para ''size''.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Adiciona o resumo criptográfico SHA-1 do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Adiciona o tipo MIME do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Adiciona o tipo MIME da miniatura (requer URL e o parâmetro $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Adiciona o tipo de multimédia do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Lista os metadados Exif para a versão do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Lista os metadados genéricos do formato de ficheiro para a versão do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Lista os metadados formatados, combinados de várias fontes. Os resultados estão no formato HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Adiciona o nome de ficheiro da versão arquivada das versões anteriores à última.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Adiciona a profundidade em ''bits'' da versão.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Usado pela página Special:Upload para obter informação sobre um ficheiro existente. Não se destina a ser usado fora do núcleo central do MediaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Indica se o ficheiro está na lista [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "O número de revisões a serem devolvidas por ficheiro.",
+ "apihelp-query+imageinfo-param-start": "Data e hora a partir da qual será começada a listagem.",
+ "apihelp-query+imageinfo-param-end": "Data e hora na qual será terminada a listagem.",
+ "apihelp-query+imageinfo-param-urlwidth": "Se $2prop=url está definido, será devolvido um URL para uma imagem redimensionada com este comprimento.\nPor razões de desempenho, se esta opção for usada não serão devolvidas mais de $1 imagens redimensionadas.",
+ "apihelp-query+imageinfo-param-urlheight": "Semelhante a $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Versão de metadados a ser usada. Se for especificado o valor <kbd>latest</kbd>, usar a versão mais recente. Por omissão tem o valor <kbd>1</kbd> para compatibilidade com versões anteriores.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Em que língua obter extmetadata. Isto afeta tanto a tradução que será obtida, caso existam várias, como a formatação de números e vários outros valores.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Se estiverem disponíveis traduções para a propriedade extmetadata, obtê-las todas.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Se for especificado e não estiver vazio, só serão devolvidas estas chaves para $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Um parâmetro de texto específico do objeto. Por exemplo, ficheiros PDF podem usar <kbd>page15-100px</kbd>. <var>$1urlwidth</var> tem de ser usado e ser consistente com <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Se <kbd>$2prop=badfile</kbd> estiver definido, este é o título da página usado ao calcular a [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "Procurar ficheiros só no repositório local.",
+ "apihelp-query+imageinfo-example-simple": "Obter informação sobre a versão atual do ficheiro [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Obter informação sobre as versões de [[:File:Test.jpg]] a partir de 2008.",
+ "apihelp-query+images-summary": "Devolve todos os ficheiros contidos nas páginas indicadas.",
+ "apihelp-query+images-param-limit": "O número de ficheiros a serem devolvidos.",
+ "apihelp-query+images-param-images": "Listar só estes ficheiros. Útil para verificar se uma determinada página tem um determinado ficheiro.",
+ "apihelp-query+images-param-dir": "A direção de listagem.",
+ "apihelp-query+images-example-simple": "Obter uma lista dos ficheiros usados na página [[Main Page]].",
+ "apihelp-query+images-example-generator": "Obter informação sobre todos os ficheiros usados na página [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Encontrar todas as páginas que utilizam o título da imagem indicada.",
+ "apihelp-query+imageusage-param-title": "O título a procurar. Não pode ser usado em conjunto com $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "O identificador da página a procurar. Não pode ser usado em conjunto com $1title.",
+ "apihelp-query+imageusage-param-namespace": "O espaço nominal a ser enumerado.",
+ "apihelp-query+imageusage-param-dir": "A direção de listagem.",
+ "apihelp-query+imageusage-param-filterredir": "Como filtrar redirecionamentos. Se definido como <kbd>nonredirects</kbd> quando <var>$1redirect</var> está ativado, isto só é aplicado ao segundo nível.",
+ "apihelp-query+imageusage-param-limit": "O número total de páginas a serem devolvidas. Se <var>$1redirect</var> estiver ativado, o nível aplica-se a cada nível em separado (o que significa que até 2 * <var>$1limit</var> resultados podem ser devolvidos).",
+ "apihelp-query+imageusage-param-redirect": "Se a página que contém a hiperligação é um redirecionamento, procurar também todas as páginas que contêm hiperligações para esse redirecionamento. O limite máximo é reduzido para metade.",
+ "apihelp-query+imageusage-example-simple": "Mostrar as páginas que usam [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Obter informações sobre as páginas que usam o ficheiro [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Obter a informação básica da página.",
+ "apihelp-query+info-param-prop": "As propriedades adicionais que devem ser obtidas:",
+ "apihelp-query+info-paramvalue-prop-protection": "Listar o nível de proteção de cada página.",
+ "apihelp-query+info-paramvalue-prop-talkid": "O identificador da página de discussão de cada página que não seja de discussão.",
+ "apihelp-query+info-paramvalue-prop-watched": "Listar o estado de vigilância de cada página.",
+ "apihelp-query+info-paramvalue-prop-watchers": "O número de vigilantes, se for permitido.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "O número de vigilantes de cada página que visitaram edições recentes dessa página, se permitido.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "A data e hora das notificações de alterações de cada página vigiada.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "O identificador da página progenitora de cada página de discussão.",
+ "apihelp-query+info-paramvalue-prop-url": "Fornece um URL completo, um URL de edição e o URL canónico, para cada página.",
+ "apihelp-query+info-paramvalue-prop-readable": "Indica se o utilizador pode ler esta página.",
+ "apihelp-query+info-paramvalue-prop-preload": "Fornece o texto devolvido por EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece a forma como o título da página é apresentado.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "Fornece o título de apresentação em todas as variantes da língua de conteúdo da wiki.",
+ "apihelp-query+info-param-testactions": "Testar se o utilizador pode realizar certas operações na página.",
+ "apihelp-query+info-param-token": "Em substituição, usar [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-query+info-example-simple": "Obter informações sobre a página <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Obter informação geral e de proteção sobre a página <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "Encontrar todas as páginas que contêm hiperligações para as páginas indicadas.",
+ "apihelp-query+iwbacklinks-extended-description": "Pode ser usado para encontrar todas as hiperligações com um prefixo, ou todas as hiperligações para um título (com um prefixo especificado). Se nenhum dos parâmetros for usado, isso efetivamente significa \"todas as hiperligações interwikis\".",
+ "apihelp-query+iwbacklinks-param-prefix": "O prefixo interwikis.",
+ "apihelp-query+iwbacklinks-param-title": "A hiperligação interwikis a ser procurada. Tem de ser usado em conjunto com <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "O número total de páginas a serem devolvidas.",
+ "apihelp-query+iwbacklinks-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Adiciona o prefixo da hiperligação interwikis.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Adiciona o título da hiperligação interwikis.",
+ "apihelp-query+iwbacklinks-param-dir": "A direção de listagem.",
+ "apihelp-query+iwbacklinks-example-simple": "Obter as páginas que contêm hiperligações para [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Obter informação sobre as páginas que contêm hiperligações para [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Devolve todas as hiperligações interwikis das páginas indicadas.",
+ "apihelp-query+iwlinks-param-url": "Indica se deve ser obtido o URL completo (não pode ser usado com $1prop).",
+ "apihelp-query+iwlinks-param-prop": "As propriedades adicionais que devem ser obtidas para cada hiperligação interlínguas:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Adiciona o URL completo.",
+ "apihelp-query+iwlinks-param-limit": "O número de hiperligações interwikis a serem devolvidas.",
+ "apihelp-query+iwlinks-param-prefix": "Devolver só as hiperligações interwikis com este prefixo.",
+ "apihelp-query+iwlinks-param-title": "Hiperligação interwikis a ser procurada. Tem de ser usado em conjunto com <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "A direção de listagem.",
+ "apihelp-query+iwlinks-example-simple": "Obter as hiperligações interwikis da página <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Encontrar todas as páginas que contêm hiperligações para a hiperligação interlínguas indicada.",
+ "apihelp-query+langbacklinks-extended-description": "Pode ser usado para encontrar todas as hiperligações para um determinado código de língua, ou todas as hiperligações para um determinado título (de uma língua). Se nenhum dos parâmetros for usado, isso efetivamente significa \"todas as hiperligações interlínguas\".\n\nNote que as hiperligações interlínguas adicionadas por extensões podem não ser consideradas.",
+ "apihelp-query+langbacklinks-param-lang": "A língua da hiperligação da língua.",
+ "apihelp-query+langbacklinks-param-title": "Hiperligação interlínguas a ser procurada. Tem de ser usado com $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "O número total de páginas a serem devolvidas.",
+ "apihelp-query+langbacklinks-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Adiciona o código de língua da hiperligação interlínguas.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Adiciona o título da hiperligação interlínguas.",
+ "apihelp-query+langbacklinks-param-dir": "A direção de listagem.",
+ "apihelp-query+langbacklinks-example-simple": "Obter as páginas que contêm hiperligações para [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Obter informações sobre as páginas que contêm hiperligações para [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Devolve todas as hiperligações interlínguas das páginas indicadas.",
+ "apihelp-query+langlinks-param-limit": "O número de hiperligações interlínguas a serem devolvidas.",
+ "apihelp-query+langlinks-param-url": "Indica se deve ser obtido o URL completo (não pode ser usado com $1prop).",
+ "apihelp-query+langlinks-param-prop": "As propriedades adicionais que devem ser obtidas para cada hiperligação interlínguas:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Adiciona o URL completo.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Adiciona o nome da língua localizado (melhor esforço). Usar <var>$1inlanguagecode</var> para controlar a língua.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Adiciona o nome nativo da língua.",
+ "apihelp-query+langlinks-param-lang": "Devolver só as hiperligações interlínguas com este código de língua.",
+ "apihelp-query+langlinks-param-title": "A hiperligação a ser procurada. Tem de ser usado com <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "A direção de listagem.",
+ "apihelp-query+langlinks-param-inlanguagecode": "O código de língua para os nomes de língua localizados.",
+ "apihelp-query+langlinks-example-simple": "Obter as hiperligações interlínguas da página <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Devolve todas as hiperligações das páginas indicadas.",
+ "apihelp-query+links-param-namespace": "Mostrar apenas as hiperligações destes espaços nominais.",
+ "apihelp-query+links-param-limit": "O número de hiperligações a serem devolvidas.",
+ "apihelp-query+links-param-titles": "Listar só as hiperligações para estes títulos. Útil para verificar se uma determinada página contém hiperligações para um determinado título.",
+ "apihelp-query+links-param-dir": "A direção de listagem.",
+ "apihelp-query+links-example-simple": "Obter as hiperligações da página <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-generator": "Obter informação sobre as páginas ligadas na página <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Obter as hiperligações da página <kbd>Main Page</kbd> nos espaços nominais {{ns:user}} e {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Encontrar todas as páginas que contêm hiperligações para as páginas indicadas.",
+ "apihelp-query+linkshere-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "O identificador de cada página.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "O título de cada página.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Indicar se a página é um redirecionamento.",
+ "apihelp-query+linkshere-param-namespace": "Incluir só as páginas nestes espaços nominais.",
+ "apihelp-query+linkshere-param-limit": "O número de páginas a serem devolvidas.",
+ "apihelp-query+linkshere-param-show": "Mostrar só as páginas que correspondem a estes critérios:\n;redirect:Mostrar só os redirecionamentos.\n;!redirect:Mostrar só os não redirecionamentos.",
+ "apihelp-query+linkshere-example-simple": "Obter uma lista das páginas com hiperligações para a página [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Obter informação sobre as páginas com hiperligações para a página [[Main Page]].",
+ "apihelp-query+logevents-summary": "Obter eventos dos registos.",
+ "apihelp-query+logevents-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Adiciona o identificador do evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Adiciona o título da página do evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Adiciona o tipo do evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Adiciona o utilizador responsável pelo evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Adiciona o identificador do utilizador responsável pelo evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Adiciona a data e hora do evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Adiciona o comentário do evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Adiciona o comentário do evento do registo, após análise sintática.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Lista detalhes adicionais sobre o evento do registo.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Lista as etiquetas do evento do registo.",
+ "apihelp-query+logevents-param-type": "Filtrar as entradas do registo para produzir só as deste tipo.",
+ "apihelp-query+logevents-param-action": "Filtrar as entradas do registo para produzir só as desta operação. Tem precedência sobre <var>$1type</var>. Na lista dos valores possíveis, os valores com o carácter de substituição asterisco <kbd>action/*</kbd> podem conter outros valores após a barra (/).",
+ "apihelp-query+logevents-param-start": "A data e hora a partir da qual será começada a enumeração.",
+ "apihelp-query+logevents-param-end": "A data e hora na qual será terminada a enumeração.",
+ "apihelp-query+logevents-param-user": "Filtrar as entradas para produzir só as criadas pelo utilizador indicado.",
+ "apihelp-query+logevents-param-title": "Filtrar as entradas para produzir só as relacionadas com uma página.",
+ "apihelp-query+logevents-param-namespace": "Filtrar as entradas para produzir só as que estão no espaço nominal indicado.",
+ "apihelp-query+logevents-param-prefix": "Filtrar as entradas para produzir só as que começam por este prefixo.",
+ "apihelp-query+logevents-param-tag": "Listar só as entradas de eventos marcadas com esta etiqueta.",
+ "apihelp-query+logevents-param-limit": "O número total de entradas de eventos a serem devolvidas.",
+ "apihelp-query+logevents-example-simple": "Listar os eventos recentes do registo.",
+ "apihelp-query+pagepropnames-summary": "Listar todos os nomes de propriedades de páginas em uso nesta wiki.",
+ "apihelp-query+pagepropnames-param-limit": "O número máximo de nomes a serem devolvidos.",
+ "apihelp-query+pagepropnames-example-simple": "Obter os primeiros 10 nomes de propriedades.",
+ "apihelp-query+pageprops-summary": "Obter várias propriedades de página definidas no conteúdo da página.",
+ "apihelp-query+pageprops-param-prop": "Listar só estas propriedades de página (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> devolve os nomes das propriedades de página em uso). Útil para verificar se as páginas usam uma determinada propriedade de página.",
+ "apihelp-query+pageprops-example-simple": "Obter as propriedades das páginas <kbd>Main Page</kbd> e <kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "Listar todas as páginas que usam uma determinada propriedade.",
+ "apihelp-query+pageswithprop-param-propname": "A propriedade de página a partir da qual as páginas serão enumeradas (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> devolve os nomes das propriedades de página que estão a ser usadas).",
+ "apihelp-query+pageswithprop-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Adiciona o identificador da página.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Adiciona o título e o identificador do espaço nominal da página.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Adiciona o valor da propriedade da página.",
+ "apihelp-query+pageswithprop-param-limit": "O número máximo de páginas a serem devolvidas.",
+ "apihelp-query+pageswithprop-param-dir": "A direção da ordenação.",
+ "apihelp-query+pageswithprop-example-simple": "Listar as primeiras 10 páginas que usam a propriedade <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Obter informação adicional sobre as primeiras 10 páginas que usam <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Realizar uma procura de prefixo nos títulos de página.",
+ "apihelp-query+prefixsearch-extended-description": "Apesar da semelhança de nomes, este módulo não pretende ser equivalente a [[Special:PrefixIndex]]; para este, consulte <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> com o parâmetro <kbd>apprefix</kbd>. O propósito deste módulo é semelhante a <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: receber dados introduzidos pelo utilizador e devolver os títulos com melhor correspondência. Dependendo do motor de busca do servidor, isto pode incluir correções de erros ortográficos, evitar redirecionamentos, e outras heurísticas.",
+ "apihelp-query+prefixsearch-param-search": "O texto a ser pesquisado.",
+ "apihelp-query+prefixsearch-param-namespace": "Os espaços nominais onde realizar a pesquisa. Ignorados se <var>$1search</var> começar com um prefixo de espaço nominal válido.",
+ "apihelp-query+prefixsearch-param-limit": "O número máximo de resultados a serem devolvidos.",
+ "apihelp-query+prefixsearch-param-offset": "O número de resultados a serem omitidos.",
+ "apihelp-query+prefixsearch-example-simple": "Procurar os títulos de página que começam por <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "O perfil de pesquisa a ser utilizado.",
+ "apihelp-query+protectedtitles-summary": "Listar todos os títulos cuja criação está impedida.",
+ "apihelp-query+protectedtitles-param-namespace": "Listar só os títulos nestes espaços nominais.",
+ "apihelp-query+protectedtitles-param-level": "Listar só os títulos com estes níveis de proteção.",
+ "apihelp-query+protectedtitles-param-limit": "O número total de páginas a serem devolvidas.",
+ "apihelp-query+protectedtitles-param-start": "Começar a listagem pelo título que tem esta data e hora de proteção.",
+ "apihelp-query+protectedtitles-param-end": "Terminar a listagem no título que tem esta data e hora de proteção.",
+ "apihelp-query+protectedtitles-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Adiciona a data e hora a que a proteção foi adicionada.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Adiciona o utilizador que fez a proteção.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Adiciona o identificador do utilizador que fez a proteção.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Adiciona o comentário da proteção.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Adiciona o comentário da proteção após a análise sintática.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Adiciona a data e hora a que a proteção será removida.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Adiciona o nível de proteção.",
+ "apihelp-query+protectedtitles-example-simple": "Lista os títulos protegidos.",
+ "apihelp-query+protectedtitles-example-generator": "Encontrar as hiperligações para os títulos protegidos que pertencem ao espaço nominal principal.",
+ "apihelp-query+querypage-summary": "Obter uma lista fornecida por uma página especial baseada em consultas (''QueryPage'').",
+ "apihelp-query+querypage-param-page": "O nome da página especial. Note que este é sensível a maiúsculas e minúsculas.",
+ "apihelp-query+querypage-param-limit": "O número de resultados a serem devolvidos.",
+ "apihelp-query+querypage-example-ancientpages": "Devolver os resultados da página [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Obter um conjunto de páginas aleatórias.",
+ "apihelp-query+random-extended-description": "As páginas são listadas em sequência fixa, só o ponto de início da listagem é aleatório. Isto significa, por exemplo, que se a primeira página aleatória na lista é <samp>Main Page</samp>, a página <samp>List of fictional monkeys</samp> será <em>sempre</em> a segunda, a página <samp>List of people on stamps of Vanuatu</samp> a terceira, etc.",
+ "apihelp-query+random-param-namespace": "Devolver só as páginas que estão nestes espaços nominais.",
+ "apihelp-query+random-param-limit": "Limitar o número de páginas aleatórias que serão devolvidas.",
+ "apihelp-query+random-param-redirect": "Em vez dele, usar <kbd>$1filterredir=redirects</kbd>.",
+ "apihelp-query+random-param-filterredir": "Como filtrar redirecionamentos.",
+ "apihelp-query+random-example-simple": "Devolver duas páginas aleatórias do espaço nominal principal.",
+ "apihelp-query+random-example-generator": "Devolver informação de página sobre duas páginas aleatórias do espaço nominal principal.",
+ "apihelp-query+recentchanges-summary": "Enumerar as mudanças recentes.",
+ "apihelp-query+recentchanges-param-start": "A data e hora a partir da qual será começada a enumeração.",
+ "apihelp-query+recentchanges-param-end": "A data e hora na qual será terminada a enumeração.",
+ "apihelp-query+recentchanges-param-namespace": "Filtrar as mudanças para produzir só as destes espaços nominais.",
+ "apihelp-query+recentchanges-param-user": "Listar só as mudanças feitas por este utilizador.",
+ "apihelp-query+recentchanges-param-excludeuser": "Não listar as mudanças feitas por este utilizador.",
+ "apihelp-query+recentchanges-param-tag": "Listar só as mudanças marcadas com esta etiqueta.",
+ "apihelp-query+recentchanges-param-prop": "Incluir informações adicionais:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Adiciona o utilizador responsável pela edição e marca se o utilizador é um endereço IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Adiciona o identificador do utilizador responsável pela edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Adiciona o comentário da edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Adiciona o comentário da edição, após análise sintática.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Adiciona as etiquetas da edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Adiciona a data e hora da edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Adiciona o título de página da edição.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Adiciona o identificadores da página, das mudanças recentes, e das revisões nova e antiga.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Adiciona os tamanhos antigo e novo da página em ''bytes''.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Etiqueta a página se esta for um redirecionamento.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta as edições que podem ser patrulhadas, marcando-as como patrulhadas ou não patrulhadas.",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "Etiqueta as edições que podem ser patrulhadas, marcando-as como autopatrulhadas ou não.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Adiciona informação de registo (identificador do registo, tipo de entrada, etc.) às entradas do registo.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Lista as etiquetas da entrada.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Adiciona a soma de controlo do conteúdo para as entradas associadas com uma revisão.",
+ "apihelp-query+recentchanges-param-token": "Em substituição, usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+recentchanges-param-show": "Mostrar só as entradas que correspondem a estes critérios. Por exemplo, para ver só as edições menores feitas por utilizadores autenticados, defina $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "O número total de mudanças a serem devolvidas.",
+ "apihelp-query+recentchanges-param-type": "Os tipos de mudanças a serem mostradas.",
+ "apihelp-query+recentchanges-param-toponly": "Listar só as alterações que são a revisão mais recente.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Ao ser usado como gerador, gerar identificadores de revisões em vez de títulos. As entradas das mudanças recentes que não tenham identificadores de revisão associados (por exemplo, a maioria das entradas do registo) não geram nada.",
+ "apihelp-query+recentchanges-example-simple": "Listar as mudanças recentes.",
+ "apihelp-query+recentchanges-example-generator": "Obter informação de página acerca das mudanças recentes não patrulhadas.",
+ "apihelp-query+redirects-summary": "Devolve todos os redirecionamentos para as páginas indicadas.",
+ "apihelp-query+redirects-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "O identificador de página de cada redirecionamento.",
+ "apihelp-query+redirects-paramvalue-prop-title": "O título de cada redirecionamento.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "O fragmento de cada redirecionamento, se existir.",
+ "apihelp-query+redirects-param-namespace": "Incluir só as páginas destes espaços nominais.",
+ "apihelp-query+redirects-param-limit": "O número de redirecionamentos a serem devolvidos.",
+ "apihelp-query+redirects-param-show": "Mostrar só as páginas que correspondem a estes critérios:\n;fragment:Mostrar só os redirecionamentos com um fragmento.\n;!fragment:Mostrar só os redirecionamentos sem um fragmento.",
+ "apihelp-query+redirects-example-simple": "Obter uma lista dos redirecionamentos para a página [[Main Page]].",
+ "apihelp-query+redirects-example-generator": "Obter informação sobre todos os redirecionamentos para a página [[Main Page]].",
+ "apihelp-query+revisions-summary": "Obter informação da revisão.",
+ "apihelp-query+revisions-extended-description": "Pode ser usado de várias maneiras:\n# Obter dados sobre um conjunto de páginas (última revisão), definindo títulos ou identificadores de páginas.\n# Obter as revisões de uma página indicada, usando títulos ou identificadores de páginas, com start, end ou limit.\n# Obter dados sobre um conjunto de revisões definindo os respetivos identificadores de revisões.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Só pode ser usado com uma única página (modo #2)",
+ "apihelp-query+revisions-param-startid": "Iniciar a enumeração a partir da data e hora desta revisão. A revisão tem de existir, mas não precisa de pertencer a esta página.",
+ "apihelp-query+revisions-param-endid": "Terminar a enumeração na data e hora desta revisão. A revisão tem de existir, mas não precisa de pertencer a esta página.",
+ "apihelp-query+revisions-param-start": "A data e hora da revisão a partir da qual será começada a enumeração.",
+ "apihelp-query+revisions-param-end": "A data e hora da revisão na qual será terminada a enumeração.",
+ "apihelp-query+revisions-param-user": "Incluir só as revisões deste utilizador.",
+ "apihelp-query+revisions-param-excludeuser": "Excluir as revisões deste utilizador.",
+ "apihelp-query+revisions-param-tag": "Listar só as revisões marcadas com esta etiqueta.",
+ "apihelp-query+revisions-param-token": "Que chaves obter para cada revisão.",
+ "apihelp-query+revisions-example-content": "Obter dados com o conteúdo da última revisão dos títulos <kbd>API</kbd> e <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Obter as últimas 5 revisões da página <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Obter as primeiras 5 revisões da página <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Obter as primeiras 5 revisões da página <kbd>Main Page</kbd> feitas após 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Obter as primeiras 5 revisões da página <kbd>Main Page</kbd> que não foram feitas pelo utilizador anónimo <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Obter as primeiras 5 revisões da página <kbd>Main Page</kbd> feitas pelo utilizador <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "As propriedades a serem obtidas para cada revisão:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "O identificador da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "As etiquetas da revisão (menor).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "A data e hora da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "O utilizador que fez a revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "O identificador de utilizador do criador da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "O tamanho (em bytes) da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "O resumo criptográfico SHA-1 (na base 16) da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "O identificador do modelo de conteúdo da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "O comentário do utilizador para a revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "O comentário do utilizador para a revisão, após a análise sintática.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "O texto da revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "As etiquetas para a revisão.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Descontinuado.</span> Em substituição, use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. A árvore de análise XML do conteúdo da revisão (requer o modelo de conteúdo <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Limitar o número de revisões que serão devolvidas.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Em substituição, use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>. Expandir predefinições no conteúdo da revisão (requer $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Em substituição, use <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> ou <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Gerar a árvore de análise sintática em XML do conteúdo da revisão (requer $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Em substituição, use <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Fazer a análise sintática do conteúdo da revisão (requer $1prop=content). Por motivos de desempenho, se esta opção for usada $1limit é forçado a ser 1.",
+ "apihelp-query+revisions+base-param-section": "Obter apenas o conteúdo da secção que tem este número.",
+ "apihelp-query+revisions+base-param-diffto": "Em substituição, use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. O identificador da revisão contra a qual será tirada uma lista de diferenças de cada revisão. Usar <kbd>prev</kbd> (anterior), <kbd>next</kbd> (seguinte) e <kbd>cur</kbd> (atual).",
+ "apihelp-query+revisions+base-param-difftotext": "Em substituição, use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. O texto contra o qual será tirada uma lista de diferenças de cada revisão. Só produz as diferenças para um número limitado de revisões. Tem precedência sobre <var>$1diffto</var>. Se <var>$1section</var> estiver definido, só o conteúdo dessa secção será comparado contra o texto.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Em substituição, use <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Fazer uma transformação anterior à gravação do texto, antes de calcular as diferenças. Só é válido quando usado com <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "O formato de seriação usado para <var>$1difftotext</var> e esperado para o conteúdo produzido.",
+ "apihelp-query+search-summary": "Efetuar uma pesquisa do texto integral.",
+ "apihelp-query+search-param-search": "Procurar os títulos de página ou o conteúdo que corresponda a este valor. Pode usar o texto da pesquisa para invocar funcionalidades de pesquisa especiais, dependendo dos meios de pesquisa do servidor da wiki.",
+ "apihelp-query+search-param-namespace": "Pesquisar só nestes espaços nominais.",
+ "apihelp-query+search-param-what": "O tipo de pesquisa a executar.",
+ "apihelp-query+search-param-info": "Quais os metadados a serem devolvidos.",
+ "apihelp-query+search-param-prop": "As propriedades a serem devolvidas:",
+ "apihelp-query+search-param-qiprofile": "O perfil independente das pesquisas a ser usado (afeta o algoritmo de classificação).",
+ "apihelp-query+search-paramvalue-prop-size": "Adiciona o tamanho da página em ''bytes''.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Adiciona o número de palavras da página.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Adiciona a data e hora a que a página foi editada pela última vez.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Adiciona um fragmento de código com a página, após análise sintática.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Adiciona um fragmento de código com o título da página, após análise sintática.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Adiciona um fragmento de código com o título redirecionado, após análise sintática.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Adiciona o título do redirecionamento correspondente.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Adiciona um fragmento de código com o título da secção correspondente, após análise sintática.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Adiciona o título da secção correspondente.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Adiciona um fragmento de código com a categoria correspondente, após análise sintática.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Adiciona um valor booleano que indica se a pesquisa encontrou correspondência no conteúdo de ficheiros.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Acrescenta dados adicionais gerados por extensões.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignorado.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignorado.",
+ "apihelp-query+search-param-limit": "O número total de páginas a serem devolvidas.",
+ "apihelp-query+search-param-interwiki": "Incluir resultados interwikis na pesquisa, se disponíveis.",
+ "apihelp-query+search-param-backend": "O servidor de pesquisas a ser usado, se diferente do servidor padrão.",
+ "apihelp-query+search-param-enablerewrites": "Ativar a reescrita da pesquisa interna. Alguns motores de pesquisa podem reescrever a pesquisa substituindo-a por outra que consideram que dará melhores resultados, por exemplo, por corrigir erros de ortografia.",
+ "apihelp-query+search-example-simple": "Pesquisar <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Pesquisar <kbd>meaning</kbd> nos textos.",
+ "apihelp-query+search-example-generator": "Obter informação sobre as páginas devolvidas por uma pesquisa do termo <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Devolver informação geral sobre o sítio.",
+ "apihelp-query+siteinfo-param-prop": "A informação a ser obtida:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Informação global do sistema.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Uma lista dos espaços nominais registados e dos seus nomes canónicos.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Uma lista dos nomes alternativos dos espaços nominais registados.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Uma lista dos nomes alternativos das páginas especiais.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Uma lista das palavras mágicas e dos seus nomes alternativos.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devolve as estatísticas do sítio.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Devolve o mapa de interwikis (opcionalmente filtrado, opcionalmente localizado usando <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devolve o servidor da base de dados com o maior atraso de replicação.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Devolve os grupos de utilizadores e as permissões associadas.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Devolve as bibliotecas instaladas na wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Devolve as extensões instaladas na wiki.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Devolve uma lista das extensões (tipos) dos ficheiros que podem ser carregados.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devolve informação sobre os direitos (a licença) da wiki, se disponível.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devolve informação sobre os tipos de restrição (proteção) disponíveis.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Devolve uma lista das línguas que o MediaWiki suporta (opcionalmente localizada, usando <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Devolve uma lista dos códigos de língua para os quais o [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] está ativado, e as variantes suportadas para cada código.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Devolve uma lista de todos os temas ativados (opcionalmente localizada, usando <var>$1inlanguagecode</var>, ou então na língua do conteúdo).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Devolve uma lista dos elementos de extensões do analisador sintático.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Devolve uma lista dos ''hooks'' de funções do analisador sintático.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve uma lista de todos os ''hooks'' subscritos (conteúdo de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Devolve uma lista de identificadores de variáveis.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devolve uma lista dos protocolos permitidos nas hiperligações externas.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devolve os valores padrão para as preferências dos utilizadores.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Devolve a configuração do diálogo de carregamento.",
+ "apihelp-query+siteinfo-param-filteriw": "Devolver só as entradas locais, ou só as não locais, do mapa de interwikis.",
+ "apihelp-query+siteinfo-param-showalldb": "Listar todos os servidores da base de dados, não só aquele que tem maior atraso.",
+ "apihelp-query+siteinfo-param-numberingroup": "Lista o número de utilizadores nos grupos de utilizadores.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "O código de língua dos nomes localizados (o melhor possível) das línguas e dos temas.",
+ "apihelp-query+siteinfo-example-simple": "Obter as informações do sítio.",
+ "apihelp-query+siteinfo-example-interwiki": "Obter uma lista dos prefixos interwikis locais.",
+ "apihelp-query+siteinfo-example-replag": "Verificar o atraso de replicação atual.",
+ "apihelp-query+stashimageinfo-summary": "Devolve informações dos ficheiros escondidos.",
+ "apihelp-query+stashimageinfo-param-filekey": "Chave que identifica um carregamento anterior que foi escondido temporariamente.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Nome alternativo de $1filekey, para compatibilidade com versões anteriores.",
+ "apihelp-query+stashimageinfo-example-simple": "Devolve informação sobre um ficheiro escondido.",
+ "apihelp-query+stashimageinfo-example-params": "Devolve as miniaturas de dois ficheiros escondidos.",
+ "apihelp-query+tags-summary": "Listar as etiquetas de modificação.",
+ "apihelp-query+tags-param-limit": "O número máximo de etiquetas a serem listadas.",
+ "apihelp-query+tags-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+tags-paramvalue-prop-name": "Adiciona o nome da etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Adiciona a mensagem de sistema para a etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-description": "Adiciona a descrição da etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Adiciona o número de revisões e de entradas no registo que têm esta etiqueta.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Indicar se a etiqueta está definida.",
+ "apihelp-query+tags-paramvalue-prop-source": "Obter as fontes da etiqueta, que podem incluir <samp>extension</samp> para etiquetas definidas por extensões e <samp>manual</samp> para etiquetas que podem ser manualmente aplicadas pelos utilizadores.",
+ "apihelp-query+tags-paramvalue-prop-active": "Indica se a etiqueta ainda está a ser aplicada.",
+ "apihelp-query+tags-example-simple": "Listar as etiquetas disponíveis.",
+ "apihelp-query+templates-summary": "Devolve todas as páginas que são transcluídas nas páginas indicadas.",
+ "apihelp-query+templates-param-namespace": "Mostrar só as predefinições nestes espaços nominais.",
+ "apihelp-query+templates-param-limit": "O número de predefinições a serem devolvidas.",
+ "apihelp-query+templates-param-templates": "Listar só estas predefinições. Útil para verificar se uma determinada página contém uma determinada predefinição.",
+ "apihelp-query+templates-param-dir": "A direção de listagem.",
+ "apihelp-query+templates-example-simple": "Obter as predefinições usadas na página <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Obter informação sobre as páginas das predefinições usadas na página <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Obter as páginas dos espaços nominais {{ns:user}} e {{ns:template}} que são transcluídas na página <kbd>Main Page</kbd>.",
+ "apihelp-query+tokens-summary": "Obtém chaves para operações de modificação de dados.",
+ "apihelp-query+tokens-param-type": "Tipos de chave a pedir.",
+ "apihelp-query+tokens-example-simple": "Obter uma chave csfr (padrão).",
+ "apihelp-query+tokens-example-types": "Obter uma chave de vigilância e uma chave de patrulha.",
+ "apihelp-query+transcludedin-summary": "Obter todas as páginas que transcluem as páginas indicadas.",
+ "apihelp-query+transcludedin-param-prop": "As propriedades a serem obtidas:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "O identificador de cada página.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "O título de cada página.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Indicar se a página é um redirecionamento.",
+ "apihelp-query+transcludedin-param-namespace": "Incluir só as páginas nestes espaços nominais.",
+ "apihelp-query+transcludedin-param-limit": "O número de entradas a serem devolvidas.",
+ "apihelp-query+transcludedin-param-show": "Mostrar só as entradas que correspondem a estes critérios:\n;redirect:Mostrar só os redirecionamentos.\n;!redirect:Mostrar só as que não são redirecionamentos.",
+ "apihelp-query+transcludedin-example-simple": "Obter uma lista das páginas que transcluem <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Obter informação sobre as páginas que transcluem <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "Obter todas as edições de um utilizador.",
+ "apihelp-query+usercontribs-param-limit": "O número máximo de contribuições a serem devolvidas.",
+ "apihelp-query+usercontribs-param-start": "A data e hora da contribuição pela qual será começada a devolução de resultados.",
+ "apihelp-query+usercontribs-param-end": "A data e hora da contribuição na qual será terminada a devolução de resultados.",
+ "apihelp-query+usercontribs-param-user": "Os utilizadores cujas contribuições serão obtidas. Não pode ser usado em conjunto com <var>$1userids</var> ou <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Obter as contribuições de todos os utilizadores cujos nomes começam por este valor. Não pode ser usado em conjunto com <var>$1user</var> ou <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "Os identificadores dos utilizadores cujas contribuições serão obtidas. Não pode ser usado em conjunto com <var>$1user</var> ou <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Listar só as contribuições nestes espaços nominais.",
+ "apihelp-query+usercontribs-param-prop": "Incluir informações adicionais:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Adiciona os identificadores da página e da revisão.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Adiciona o título e o identificador do espaço nominal da página.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Adiciona a data e hora da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Adiciona o comentário da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Adiciona o comentário da edição, após análise sintática.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Adiciona o novo tamanho da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Adiciona a diferença de tamanho entre a edição e a sua progenitora.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Adiciona as etiquetas da edição.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta as edições patrulhadas.",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "Etiqueta as edições autopatrulhadas.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista as etiquetas da edição.",
+ "apihelp-query+usercontribs-param-show": "Mostrar só as contribuições que correspondem a estes critérios; por exemplo, só as edições não menores: <kbd>$2show=!minor</kbd>.\n\nSe um dos valores <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> estiver definido, as revisões feitas há mais de <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) não serão mostradas.",
+ "apihelp-query+usercontribs-param-tag": "Listar só as revisões marcadas com esta etiqueta.",
+ "apihelp-query+usercontribs-param-toponly": "Listar só as alterações que são a revisão mais recente.",
+ "apihelp-query+usercontribs-example-user": "Mostrar as contribuições do utilizador <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Mostrar as contribuições de todos os endereços IP com o prefixo <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-summary": "Obter informações sobre o utilizador atual.",
+ "apihelp-query+userinfo-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Etiquetas que indicam se o utilizador atual está bloqueado, por quem, e qual o motivo.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Adiciona uma etiqueta <samp>messages</samp> se o utilizador atual tem mensagens pendentes.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos os grupos aos quais o utilizador atual pertence.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Lista os grupos aos quais o utilizador atual foi explicitamente atribuído, incluindo a data de expiração da sua pertença a cada grupo.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lista todos os grupos aos quais o utilizador atual pertence automaticamente.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todas as permissões que o utilizador atual tem.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lista os grupos aos quais o utilizador atual pode ser adicionado ou de onde pode ser removido.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas as preferências que o utilizador atual definiu.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Obter uma chave para alterar as preferências do utilizador atual.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Adiciona a contagem de edições do utilizador atual.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todas as frequências limite do utilizador atual.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Adiciona o nome real do utilizador.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Adicionar o correio eletrónico do utilizador e a data de autenticação do correio eletrónico.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Faz eco do cabeçalho <code>Accept-Language</code> enviado pelo cliente num formato estruturado.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Adiciona a data de registo do utilizador.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Adiciona a contagem de páginas não lidas da lista de páginas vigiadas do utilizador (máximo $1; devolve <samp>$2</samp> se forem mais).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "Adiciona os identificadores centrais e o estado de ligação central (''attachment'') do utilizador.",
+ "apihelp-query+userinfo-param-attachedwiki": "Com <kbd>$1prop=centralids</kbd>, indicar se o utilizador tem ligação com a wiki designada por este identificador.",
+ "apihelp-query+userinfo-example-simple": "Obter informações sobre o utilizador atual.",
+ "apihelp-query+userinfo-example-data": "Obter informações adicionais sobre o utilizador atual.",
+ "apihelp-query+users-summary": "Obter informações sobre uma lista de utilizadores.",
+ "apihelp-query+users-param-prop": "As informações que devem ser incluídas:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Etiquetas que indicam se o utilizador está bloqueado, por quem, e qual o motivo.",
+ "apihelp-query+users-paramvalue-prop-groups": "Lista todos os grupos aos quais cada utilizador pertence.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "Lista os grupos aos quais cada utilizador foi explicitamente atribuído, incluindo a data de expiração da sua pertença a cada grupo.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Lista todos os grupos aos quais um utilizador pertence automaticamente.",
+ "apihelp-query+users-paramvalue-prop-rights": "Lista todas as permissões que cada utilizador tem.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Adiciona a contagem de edições do utilizador.",
+ "apihelp-query+users-paramvalue-prop-registration": "Adiciona a data e hora de registo do utilizador.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Etiqueta que indica se o utilizador pode e quer receber correio eletrónico através de [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Etiqueta que indica o género do utilizador. Devolve \"male\" (masculino), \"female\" (feminino) ou \"unknown\" (desconhecido).",
+ "apihelp-query+users-paramvalue-prop-centralids": "Adiciona os identificadores centrais e o estado de ligação central (''attachment'') do utilizador.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Indica se pode ser criada uma conta para os nomes de utilizador não registados, mas válidos.",
+ "apihelp-query+users-param-attachedwiki": "Com <kbd>$1prop=centralids</kbd>, indicar se o utilizador tem ligação com a wiki designada por este identificador.",
+ "apihelp-query+users-param-users": "Uma lista de utilizadores dos quais serão obtidas informações.",
+ "apihelp-query+users-param-userids": "Uma lista de identificadores dos utilizadores de que serão obtidas informações.",
+ "apihelp-query+users-param-token": "Em substituição, usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+users-example-simple": "Devolver informações sobre o utilizador <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "Obter mudanças recentes das páginas vigiadas do utilizador atual.",
+ "apihelp-query+watchlist-param-allrev": "Incluir revisões múltiplas da mesma página dentro do intervalo de tempo indicado.",
+ "apihelp-query+watchlist-param-start": "A data e hora da mudança recente a partir da qual será começada a enumeração.",
+ "apihelp-query+watchlist-param-end": "A data e hora da mudança recente na qual será terminada a enumeração.",
+ "apihelp-query+watchlist-param-namespace": "Filtrar as mudanças para produzir só as dos espaços nominais indicados.",
+ "apihelp-query+watchlist-param-user": "Listar só as mudanças deste utilizador.",
+ "apihelp-query+watchlist-param-excludeuser": "Não listar as mudanças deste utilizador.",
+ "apihelp-query+watchlist-param-limit": "O número total de resultados a serem devolvidos por pedido.",
+ "apihelp-query+watchlist-param-prop": "As propriedades adicionais que devem ser obtidas:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Adiciona identificadores de revisões e de páginas.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Adiciona o título da página.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Adiciona etiquetas para a edição.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Adiciona o utilizador que fez a edição.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Adiciona o identificador do utilizador que realizou a edição.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Adiciona o comentário da edição.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Adiciona o comentário da edição, após análise sintática.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Adiciona a data e hora da edição.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta que indica as edições que são patrulhadas.",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "Etiqueta que indica as edições que são autopatrulhadas.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Adiciona o tamanho novo e antigo da página.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Adiciona a data e hora da última vez em que o utilizador foi notificado da edição.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Adiciona informação do registo quando apropriado.",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "Lista as etiquetas da entrada.",
+ "apihelp-query+watchlist-param-show": "Mostrar só as entradas que correspondem a estes critérios. Por exemplo, para ver só as edições menores feitas por utilizadores autenticados, definir $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Os tipos de alterações a serem mostradas:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Edições normais.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Mudanças externas.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Criações de páginas.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Entradas do registo.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Alterações de pertença a categorias.",
+ "apihelp-query+watchlist-param-owner": "Usado com $1token para aceder à lista de páginas vigiadas de outro utilizador.",
+ "apihelp-query+watchlist-param-token": "Uma chave de segurança (disponível nas [[Special:Preferences#mw-prefsection-watchlist|preferências]] do utilizador) para permitir acesso à lista de páginas vigiadas de outro utilizador.",
+ "apihelp-query+watchlist-example-simple": "Listar a revisão mais recente das páginas com mudanças recentes na lista de páginas vigiadas do utilizador atual.",
+ "apihelp-query+watchlist-example-props": "Obter informação adicional sobre a revisão mais recente das páginas vigiadas do utilizador atual que tenham sido alteradas.",
+ "apihelp-query+watchlist-example-allrev": "Obter informações sobre todas as mudanças recentes às páginas vigiadas do utilizador atual.",
+ "apihelp-query+watchlist-example-generator": "Obter informações das páginas na lista de páginas vigiadas do utilizador atual que tenham sido recentemente alteradas.",
+ "apihelp-query+watchlist-example-generator-rev": "Obter informações de revisão para as mudanças recentes às páginas vigiadas do utilizador atual.",
+ "apihelp-query+watchlist-example-wlowner": "Listar a revisão mais recente das páginas na lista de páginas vigiadas do utilizador <kbd>Example</kbd> que tenham sido recentemente alteradas.",
+ "apihelp-query+watchlistraw-summary": "Obter todas as páginas na lista de páginas vigiadas do utilizador atual.",
+ "apihelp-query+watchlistraw-param-namespace": "Listar só as páginas nos espaços nominais indicados.",
+ "apihelp-query+watchlistraw-param-limit": "O número total de resultados a serem devolvidos por pedido.",
+ "apihelp-query+watchlistraw-param-prop": "As propriedades adicionais que devem ser obtidas:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Adiciona a data e hora da última vez em que o utilizador foi notificado da edição.",
+ "apihelp-query+watchlistraw-param-show": "Listar só os elementos que preenchem estes critérios.",
+ "apihelp-query+watchlistraw-param-owner": "Usado em conjunto com o parâmetro $1token para aceder à lista de páginas vigiadas de outro utilizador.",
+ "apihelp-query+watchlistraw-param-token": "Uma chave de segurança (disponível nas [[Special:Preferences#mw-prefsection-watchlist|preferências]] do utilizador) para permitir acesso à lista de páginas vigiadas de outro utilizador.",
+ "apihelp-query+watchlistraw-param-dir": "A direção de listagem.",
+ "apihelp-query+watchlistraw-param-fromtitle": "O título (com o prefixo do espaço nominal) a partir do qual será começada a enumeração.",
+ "apihelp-query+watchlistraw-param-totitle": "O título (com o prefixo do espaço nominal) no qual será terminada a enumeração.",
+ "apihelp-query+watchlistraw-example-simple": "Listar as páginas na lista de páginas vigiadas do utilizador atual.",
+ "apihelp-query+watchlistraw-example-generator": "Obter informações das páginas na lista de páginas vigiadas do utilizador atual.",
+ "apihelp-removeauthenticationdata-summary": "Remover os dados de autenticação do utilizador atual.",
+ "apihelp-removeauthenticationdata-example-simple": "Tentar remover os dados do utilizador atual para o pedido de autenticação <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Enviar a um utilizador uma mensagem eletrónica de reinício da palavra-passe.",
+ "apihelp-resetpassword-extended-description-noroutes": "Não estão disponíveis rotas de reinício da palavra-passe.\n\nPara usar este módulo, ative uma rota em <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.",
+ "apihelp-resetpassword-param-user": "O utilizar cuja palavra-passe será reiniciada.",
+ "apihelp-resetpassword-param-email": "O correio eletrónico do utilizador cuja palavra-passe será reiniciada.",
+ "apihelp-resetpassword-example-user": "Enviar uma mensagem eletrónica para reinício da palavra-passe ao utilizador <kbd>Example</kbd>.",
+ "apihelp-resetpassword-example-email": "Enviar uma mensagem eletrónica para reinício da palavra-passe a todos os utilizadores com o correio eletrónico <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Eliminar e restaurar revisões.",
+ "apihelp-revisiondelete-param-type": "O tipo de eliminação de revisão que está a ser feito.",
+ "apihelp-revisiondelete-param-target": "O título de página para a eliminação da revisão, se for necessário para o tipo de eliminação.",
+ "apihelp-revisiondelete-param-ids": "Os identificadores das revisões a serem eliminadas.",
+ "apihelp-revisiondelete-param-hide": "O que deve ser ocultado para cada revisão.",
+ "apihelp-revisiondelete-param-show": "O que deve ser mostrado para cada revisão.",
+ "apihelp-revisiondelete-param-suppress": "Indica se devem ser suprimidos os dados aos administradores como a todos os restantes utilizadores.",
+ "apihelp-revisiondelete-param-reason": "O motivo da eliminação ou restauro.",
+ "apihelp-revisiondelete-param-tags": "Etiquetas a aplicar à entrada no registo de eliminações.",
+ "apihelp-revisiondelete-example-revision": "Ocultar o conteúdo da revisão <kbd>12345</kbd> na página <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Ocultar todos os dados na entrada <kbd>67890</kbd> do registo com o motivo <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "Desfazer a última edição da página.",
+ "apihelp-rollback-extended-description": "Se o último utilizador que editou a página tiver realizado várias edições consecutivas, elas serão todas revertidas.",
+ "apihelp-rollback-param-title": "O título da página a reverter. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "O identificador da página a reverter. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "As etiquetas a aplicar à reversão.",
+ "apihelp-rollback-param-user": "O nome do utilizador cujas edições vão ser revertidas.",
+ "apihelp-rollback-param-summary": "Resumo personalizado da edição. Se estiver vazio, será utilizado o resumo por omissão.",
+ "apihelp-rollback-param-markbot": "Marcar as edições revertidas e a reversão como edições de robôs.",
+ "apihelp-rollback-param-watchlist": "Adicionar ou remover incondicionalmente a página da lista de páginas vigiadas do utilizador atual, usar as preferências ou não alterar o estado de vigilância.",
+ "apihelp-rollback-example-simple": "Reverter as últimas edições da página <kbd>Main Page</kbd> pelo utilizador <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Reverter as últimas edições da página <kbd>Main Page</kbd> pelo utilizador IP <kbd>192.0.2.5</kbd> com o resumo <kbd>Reverting vandalism</kbd>, e marcar essas edições e a reversão como edições de robôs.",
+ "apihelp-rsd-summary": "Exportar um esquema (''schema'') RSD (Really Simple Discovery).",
+ "apihelp-rsd-example-simple": "Exportar o esquema RSD.",
+ "apihelp-setnotificationtimestamp-summary": "Atualizar a data e hora de notificação de alterações às páginas vigiadas.",
+ "apihelp-setnotificationtimestamp-extended-description": "Isto afeta o realce das páginas alteradas, na lista de páginas vigiadas e no histórico, e o envio de mensagens de correio quando a preferência \"{{int:tog-enotifwatchlistpages}}\" está ativada.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Trabalhar em todas as páginas vigiadas.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "A data e hora a definir como data e hora da notificação.",
+ "apihelp-setnotificationtimestamp-param-torevid": "A revisão para a qual definir a data e hora de notificação (só uma página).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "A revisão da qual definir que a data e hora de notificação é mais recente (só uma página).",
+ "apihelp-setnotificationtimestamp-example-all": "Reiniciar o estado de notificação de todas as páginas vigiadas.",
+ "apihelp-setnotificationtimestamp-example-page": "Reiniciar o estado de notificação da página <kbd>Main page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Definir a data e hora de notificação para a página <kbd>Main page</kbd> de forma a que todas as edições desde 1 de janeiro de 2012 passem a ser consideradas não vistas",
+ "apihelp-setnotificationtimestamp-example-allpages": "Reiniciar o estado de notificação das páginas no espaço nominal <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "Alterar a língua de uma página.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Não é permitido alterar a língua de uma página nesta wiki.\n\nAtivar <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> para usar esta operação.",
+ "apihelp-setpagelanguage-param-title": "O título da página cuja língua pretende alterar. Não pode ser usado em conjunto com <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "O identificador da página cuja língua pretende alterar. Não pode ser usado em conjunto com <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "O código de língua, da língua para a qual a página será alterada. Usar <kbd>default</kbd> para redefinir a língua da página para a língua padrão de conteúdo da wiki.",
+ "apihelp-setpagelanguage-param-reason": "Motivo da alteração.",
+ "apihelp-setpagelanguage-param-tags": "As etiquetas de modificação a aplicar à entrada no registo que resultar desta operação.",
+ "apihelp-setpagelanguage-example-language": "Alterar a língua da página <kbd>Main Page</kbd> para basco.",
+ "apihelp-setpagelanguage-example-default": "Alterar a língua da página com o identificador 123 para a língua padrão de conteúdo da wiki.",
+ "apihelp-stashedit-summary": "Preparar uma edição na cache partilhada.",
+ "apihelp-stashedit-extended-description": "É pretendido que isto seja usado através de AJAX a partir do formulário de edição, para melhorar o desempenho da gravação da página.",
+ "apihelp-stashedit-param-title": "Título da página que está a ser editada.",
+ "apihelp-stashedit-param-section": "Número da secção. <kbd>0</kbd> para a secção do topo, <kbd>new</kbd> para uma secção nova.",
+ "apihelp-stashedit-param-sectiontitle": "O título para uma secção nova.",
+ "apihelp-stashedit-param-text": "O conteúdo da página.",
+ "apihelp-stashedit-param-stashedtexthash": "O resumo criptográfico do conteúdo da página, resultante de uma colocação anterior na área de ficheiros escondidos, a ser usado em vez de outro.",
+ "apihelp-stashedit-param-contentmodel": "O modelo de conteúdo do novo conteúdo.",
+ "apihelp-stashedit-param-contentformat": "O formato de seriação do conteúdo usado para o texto de entrada.",
+ "apihelp-stashedit-param-baserevid": "O identificador de revisão da revisão de base.",
+ "apihelp-stashedit-param-summary": "O resumo da mudança.",
+ "apihelp-tag-summary": "Adicionar ou remover as etiquetas de modificação aplicadas a revisões individuais ou a entradas do registo.",
+ "apihelp-tag-param-rcid": "Um ou mais identificadores de mudanças recentes às quais adicionar ou remover a etiqueta.",
+ "apihelp-tag-param-revid": "Um ou mais identificadores de revisões às quais adicionar ou remover a etiqueta.",
+ "apihelp-tag-param-logid": "Um ou mais identificadores de entradas do registo às quais adicionar ou remover a etiqueta.",
+ "apihelp-tag-param-add": "As etiquetas a serem adicionadas. Só podem ser adicionadas as etiquetas definidas manualmente.",
+ "apihelp-tag-param-remove": "As etiquetas a serem removidas. Só podem ser removidas as etiquetas definidas manualmente ou completamente indefinidas.",
+ "apihelp-tag-param-reason": "O motivo da alteração.",
+ "apihelp-tag-param-tags": "As etiquetas de modificação a aplicar à entrada no registo que será criada em resultado desta operação.",
+ "apihelp-tag-example-rev": "Adicionar a etiqueta <kbd>vandalism</kbd> à revisão com o identificador 123, sem especificar um motivo.",
+ "apihelp-tag-example-log": "Remover a etiqueta <kbd>spam</kbd> da entrada do registo com o identificador 123, com o motivo <kbd>Wrongly applied</kbd>.",
+ "apihelp-tokens-summary": "Obter chaves para operações de modificação de dados.",
+ "apihelp-tokens-extended-description": "Este módulo foi descontinuado e substituído por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Tipos de chave a pedir.",
+ "apihelp-tokens-example-edit": "Obter uma chave de edição (padrão).",
+ "apihelp-tokens-example-emailmove": "Obter uma chave de correio eletrónico e uma chave de movimentação.",
+ "apihelp-unblock-summary": "Desbloquear um utilizador.",
+ "apihelp-unblock-param-id": "Identificador do bloqueio a desfazer (obtido com <kbd>list=blocks</kbd>). Não pode ser usado em conjunto com <var>$1user</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "O nome de utilizador, endereço IP ou gama de endereços IP a ser desbloqueado. Não pode ser usado em conjunto com <var>$1id</var> ou <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "O identificador do utilizador a ser desbloqueado. Não pode ser usado em conjunto com <var>$1id</var> ou <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Motivo para o desbloqueio.",
+ "apihelp-unblock-param-tags": "As etiquetas de modificação a aplicar à entrada no registo de bloqueios.",
+ "apihelp-unblock-example-id": "Desfazer o bloqueio com o identificador #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Desbloquear o utilizador <kbd>Bob</kbd> com o motivo <kbd>Sorry Bob</kbd>.",
+ "apihelp-undelete-summary": "Restaurar revisões de uma página eliminada.",
+ "apihelp-undelete-extended-description": "Pode obter-se uma lista de revisões eliminadas (incluindo as datas e horas de eliminação) com [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]] e uma lista de identificadores de ficheiros eliminados com [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Título da página a restaurar.",
+ "apihelp-undelete-param-reason": "Motivo para restaurar a página.",
+ "apihelp-undelete-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de eliminações.",
+ "apihelp-undelete-param-timestamps": "As datas e horas das revisões a serem restauradas. Se ambos os parâmetros <var>$1timestamps</var> e <var>$1fileids</var> estiverem vazios, serão restauradas todas as revisões.",
+ "apihelp-undelete-param-fileids": "Os identificadores das revisões a serem restauradas. Se ambos os parâmetros <var>$1timestamps</var> e <var>$1fileids</var> estiverem vazios, serão restauradas todas as revisões.",
+ "apihelp-undelete-param-watchlist": "Adicionar ou remover incondicionalmente a página da lista de páginas vigiadas do utilizador atual, usar as preferências ou não alterar o estado de vigilância.",
+ "apihelp-undelete-example-page": "Restaurar a página <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Restaurar duas revisões da página <kbd>Main Page</kbd>.",
+ "apihelp-unlinkaccount-summary": "Remover do utilizador atual uma conta ligada de uma wiki terceira.",
+ "apihelp-unlinkaccount-example-simple": "Tentar remover a ligação do utilizador atual ao fornecedor associado com <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-summary": "Carregar um ficheiro, ou obter o estado dos carregamentos pendentes.",
+ "apihelp-upload-extended-description": "Estão disponíveis vários métodos:\n* Carregar diretamente o conteúdo do ficheiro, usando o parâmetro <var>$1file</var>.\n* Carregar o ficheiro por segmentos, usando os parâmetros <var>$1filesize</var>, <var>$1chunk</var> e <var>$1offset</var>.\n* Instruir o servidor do MediaWiki para obter o ficheiro a partir de um URL, usando o parâmetro <var>$1url</var>.\n* Terminar um carregamento anterior que falhou devido a avisos, usando o parâmetro <var>$1filekey</var>.\nNote que o POST do HTTP tem de ser feito como um carregamento de ficheiro (isto é, usando <code>multipart/form-data</code>) ao enviar o <var>$1file</var>.",
+ "apihelp-upload-param-filename": "O nome de destino do ficheiro.",
+ "apihelp-upload-param-comment": "O comentário do carregamento. Também é usado como texto da página inicial para ficheiros novos se <var>$1text</var> não for especificado.",
+ "apihelp-upload-param-tags": "Etiquetas de modificação a aplicar à entrada do carregamento no registo e à revisão da página de ficheiro.",
+ "apihelp-upload-param-text": "Texto inicial da página para ficheiros novos.",
+ "apihelp-upload-param-watch": "Vigiar a página.",
+ "apihelp-upload-param-watchlist": "Adicionar ou remover incondicionalmente a página da lista de páginas vigiadas do utilizador atual, usar as preferências ou não alterar o estado de vigilância.",
+ "apihelp-upload-param-ignorewarnings": "Ignorar todos os avisos.",
+ "apihelp-upload-param-file": "O conteúdo do ficheiro.",
+ "apihelp-upload-param-url": "O URL de onde obter o ficheiro.",
+ "apihelp-upload-param-filekey": "Chave que identifica um carregamento prévio que está temporariamente na área de ficheiros escondidos.",
+ "apihelp-upload-param-sessionkey": "O mesmo que $1filekey, mantido para compatibilidade com versões anteriores.",
+ "apihelp-upload-param-stash": "Se definido, o servidor irá colocar temporariamente o ficheiro na área de ficheiros escondidos em vez de o adicionar ao repositório.",
+ "apihelp-upload-param-filesize": "O tamanho do carregamento completo.",
+ "apihelp-upload-param-offset": "Posição do segmento em ''bytes''.",
+ "apihelp-upload-param-chunk": "O conteúdo do segmento.",
+ "apihelp-upload-param-async": "Tornar assíncronas as operações sobre ficheiros possivelmente grandes, quando possível.",
+ "apihelp-upload-param-checkstatus": "Obter só o estado de carregamento para a chave de ficheiro indicada.",
+ "apihelp-upload-example-url": "Carregar de um URL.",
+ "apihelp-upload-example-filekey": "Prosseguir um carregamento que falhou devido a avisos.",
+ "apihelp-userrights-summary": "Alterar os grupos a que um utilizador pertence.",
+ "apihelp-userrights-param-user": "O nome de utilizador.",
+ "apihelp-userrights-param-userid": "O identificador de utilizador.",
+ "apihelp-userrights-param-add": "Adicionar o utilizador a estes grupos ou, se já for membro de um grupo, atualizar a data de expiração da sua pertença a esse grupo.",
+ "apihelp-userrights-param-expiry": "Datas e horas de expiração. Podem ser relativas (por exemplo, <kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absolutas (p. ex., <kbd>2014-09-18T12:34:56Z</kbd>). Se só estiver definida uma data e hora, ela será usada para todos os grupos passados ao parâmetro <var>$1add</var>. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd> quando a pertença a um grupo não tem expiração.",
+ "apihelp-userrights-param-remove": "Remover o utilizador destes grupos.",
+ "apihelp-userrights-param-reason": "O motivo da alteração.",
+ "apihelp-userrights-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de privilégios de utilizadores.",
+ "apihelp-userrights-example-user": "Adicionar o utilizador <kbd>FooBot</kbd> ao grupo <kbd>bot</kbd> e removê-lo dos grupos <kbd>sysop</kbd> e <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Adicionar o utilizador com o identificador <kbd>123</kbd> ao grupo <kbd>bot</kbd> e removê-lo dos grupos <kbd>sysop</kbd> e <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "Adicionar o utilizador <kbd>SometimeSysop</kbd> ao grupo <kbd>sysop</kbd> por 1 mês.",
+ "apihelp-validatepassword-summary": "Validar uma palavra-passe face às regras para palavras-passe da wiki.",
+ "apihelp-validatepassword-extended-description": "A validade é reportada <samp>Good</samp> (Boa) se a palavra-passe é aceitável, <samp>Change</samp> (Alterar) se a palavra-passe pode ser usada para iniciar uma sessão mas terá de ser alterada, ou <samp>Invalid</samp> (Inválida) se a palavra-passe não é utilizável.",
+ "apihelp-validatepassword-param-password": "A palavra-passe a ser validada.",
+ "apihelp-validatepassword-param-user": "O nome de utilizador, para ser usado ao testar a criação de conta. O nome de utilizador não pode existir.",
+ "apihelp-validatepassword-param-email": "O endereço de correio eletrónico, para ser usado ao testar a criação de conta.",
+ "apihelp-validatepassword-param-realname": "O nome verdadeiro, para ser usado ao testar a criação de conta.",
+ "apihelp-validatepassword-example-1": "Validar a palavra-passe <kbd>foobar</kbd> para o utilizador atual.",
+ "apihelp-validatepassword-example-2": "Validar a palavra-passe <kbd>qwerty</kbd> para a criação do utilizador <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "Adicionar ou remover páginas da lista de páginas vigiadas do utilizador atual.",
+ "apihelp-watch-param-title": "A página a vigiar ou deixar de ser vigiada. Em vez disto, usar <var>$1titles</var>.",
+ "apihelp-watch-param-unwatch": "Se definido, a página deixará de ser vigiada, em vez de o ser.",
+ "apihelp-watch-example-watch": "Vigiar a página <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Deixar de vigiar a página <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "Vigiar as primeiras páginas do espaço nominal principal.",
+ "apihelp-format-example-generic": "Devolver o resultado da consulta no formato $1.",
+ "apihelp-format-param-wrappedhtml": "Devolver o HTML com realce sintático e os módulos ResourceLoader associados, na forma de um objeto JSON.",
+ "apihelp-json-summary": "Produzir os dados de saída no formato JSON.",
+ "apihelp-json-param-callback": "Se especificado, envolve o resultado de saída na forma de uma chamada para uma função. Por segurança, todos os dados específicos do utilizador estarão restringidos.",
+ "apihelp-json-param-utf8": "Se especificado, codifica a maioria dos caracteres não ASCII (mas não todos) em UTF-8, em vez de substitui-los por sequências de escape hexadecimais. É o comportamento padrão quando <var>formatversion</var> não tem o valor <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Se especificado, codifica todos caracteres não ASCII usando sequências de escape hexadecimais. É o comportamento padrão quando <var>formatversion</var> tem o valor <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (booleanos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
+ "apihelp-jsonfm-summary": "Produzir os dados de saída em formato JSON (realce sintático em HTML).",
+ "apihelp-none-summary": "Não produzir nada.",
+ "apihelp-php-summary": "Produzir os dados de saída em formato PHP seriado.",
+ "apihelp-php-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (booleanos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
+ "apihelp-phpfm-summary": "Produzir os dados de saída em formato PHP seriado (realce sintático em HTML).",
+ "apihelp-rawfm-summary": "Produzir os dados de saída, incluindo elementos para despiste de erros, em formato JSON (realce sintático em HTML).",
+ "apihelp-xml-summary": "Produzir os dados de saída em formato XML.",
+ "apihelp-xml-param-xslt": "Se especificado, adiciona a página nomeada como uma folha de estilo XSL. O valor tem de ser um título no espaço nominal {{ns:MediaWiki}} e acabar em <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Se especificado, adiciona um espaço nominal XML.",
+ "apihelp-xmlfm-summary": "Produzir os dados de saída em formato XML (realce sintático em HTML).",
+ "api-format-title": "Resultado da API do MediaWiki.",
+ "api-format-prettyprint-header": "Esta é a representação em HTML do formato $1. O HTML é bom para o despiste de erros, mas inadequado para uso na aplicação.\n\nEspecifique o parâmetro <var>format</var> para alterar o formato de saída. Para ver a representação que não é em HTML do formato $1, defina <kbd>format=$2</kbd>.\n\nConsulte a [[mw:Special:MyLanguage/API|documentação completa]], ou a [[Special:ApiHelp/main|ajuda da API]] para mais informação.",
+ "api-format-prettyprint-header-only-html": "Esta é uma representação em HTML para ser usada no despiste de erros, mas inadequada para uso na aplicação.\n\nConsulte a [[mw:Special:MyLanguage/API|documentação completa]], ou a [[Special:ApiHelp/main|ajuda da API]] para mais informação.",
+ "api-format-prettyprint-header-hyperlinked": "Esta é a representação em HTML do formato $1. O HTML é bom para o despiste de erros, mas inadequado para uso na aplicação.\n\nEspecifique o parâmetro <var>format</var> para alterar o formato de saída. Para ver a representação que não é em HTML do formato $1, defina [$3 <kbd>format=$2</kbd>].\n\nConsulte a [[mw:API|documentação completa]], ou a [[Special:ApiHelp/main|ajuda da API]] para mais informação.",
+ "api-format-prettyprint-status": "Esta resposta seria devolvida com o estado de HTTP: $1 $2.",
+ "api-login-fail-aborted": "A autenticação requer interação com o utilizador, que não é suportada por <kbd>action=login</kbd>. Para poder entrar com <kbd>action=login</kbd>, consulte [[Special:BotPasswords]]. Para continuar a usar a autenticação da conta principal, consulte <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-aborted-nobotpw": "A autenticação requer interação com o utilizador, que não é suportada por <kbd>action=login</kbd>. Para entrar, consulte <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-badsessionprovider": "Não é possível entrar usando $1.",
+ "api-login-fail-sameorigin": "Não é possível entrar quando a norma da mesma origem não é aplicada.",
+ "api-pageset-param-titles": "Uma lista dos títulos a serem trabalhados.",
+ "api-pageset-param-pageids": "Uma lista dos identificadores de página a serem trabalhados.",
+ "api-pageset-param-revids": "Uma lista dos identificadores de revisões a serem trabalhados.",
+ "api-pageset-param-generator": "Obter a lista de páginas nas quais trabalhar, executando o módulo de consulta especificado.\n\n<strong>Nota:</strong> Os nomes dos parâmetros de geradores têm de ser prefixados com um \"g\", veja os exemplos.",
+ "api-pageset-param-redirects-generator": "Resolver automaticamente os redirecionamentos listados nos parâmetros <var>$1titles</var>, <var>$1pageids</var> e <var>$1revids</var>, e nas páginas devolvidas por <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Resolver automaticamente os redirecionamentos listados nos parâmetros <var>$1titles</var>, <var>$1pageids</var> e <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Converter os títulos noutras variantes de língua, se necessário. Só funciona se a língua de conteúdo da wiki suporta a conversão entre variantes. As línguas que suportam conversão entre variantes incluem $1.",
+ "api-help-title": "Ajuda da API do MediaWiki",
+ "api-help-lead": "Esta é uma página de documentação da API do MediaWiki gerada automaticamente.\n\nDocumentação e exemplos: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Módulo principal",
+ "api-help-undocumented-module": "Não existe documentação para o módulo $1.",
+ "api-help-flag-deprecated": "Este módulo foi descontinuado.",
+ "api-help-flag-internal": "<strong>Este módulo é interno ou instável.</strong> O seu funcionamento pode ser alterado sem aviso prévio.",
+ "api-help-flag-readrights": "Este módulo requer direitos de leitura.",
+ "api-help-flag-writerights": "Este módulo requer direitos de escrita.",
+ "api-help-flag-mustbeposted": "Este módulo só aceita pedidos POST.",
+ "api-help-flag-generator": "Este módulo pode ser usado como gerador.",
+ "api-help-source": "Fonte: $1",
+ "api-help-source-unknown": "Fonte: <span class=\"apihelp-unknown\">desconhecida</span>",
+ "api-help-license": "Licença: [[$1|$2]]",
+ "api-help-license-noname": "Licença: [[$1|Ver hiperligação]]",
+ "api-help-license-unknown": "Licença: <span class=\"apihelp-unknown\">desconhecida</span>",
+ "api-help-parameters": "{{PLURAL:$1|Parâmetro|Parâmetros}}:",
+ "api-help-param-deprecated": "Obsoleto.",
+ "api-help-param-required": "Este parâmetro é obrigatório.",
+ "api-help-datatypes-header": "Tipo de dados",
+ "api-help-datatypes": "O formato de entrada para o MediaWiki deve ser UTF-8, normalizado de acordo com a norma NFC. O MediaWiki pode converter outros tipos de entrada, mas esta conversão pode originar a falha de algumas operações (tais como as [[Special:ApiHelp/edit|edições]] com verificações MD5).\n\nAlguns tipos de parâmetros nos pedidos à API necessitam de mais explicações:\n;boolean\n:Os parâmetros booleanos funcionam como as caixas de seleção HTML: se o parâmetro for especificado, independentemente do seu valor, é considerado verdadeiro. Para um valor falso, omitir o parâmetro completo.\n;timestamp\n:As datas e horas podem ser especificadas em vários formatos. É recomendado o formato ISO 8601. Todas as horas estão em UTC, qualquer inclusão do fuso horário é ignorada.\n:* Data e hora ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (pontuação e <kbd>Z</kbd> são opcionais)\n:* Data e hora ISO 8601 com segundos fracionários (estes são ignorados), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (traços, dois pontos e <kbd>Z</kbd> são opcionais)\n:* Formato do MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato numérico genérico, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuso horário opcional <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, ou <kbd>-<var>##</var></kbd> são ignorados)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (o fuso horário pode ser omitido), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (o fuso horário pode ser omitido), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Segundos desde 1970-01-01T00:00:00Z como um inteiro de 1 a 13 algarismos (excluindo <kbd>0</kbd>)\n:* O texto <kbd>now</kbd>\n;separador alternativo de valores múltiplos\n:Os parâmetros que aceitam vários valores são normalmente fornecidos com os valores separados por uma barra vertical (''pipe''), por exemplo <kbd>parâmetro=valor1|valor2</kbd> ou <kbd>parâmetro=valor1%7Cvalor2</kbd>. Se um valor contém a barra vertical, use como separador o U+001F (Separador de Unidades) ''e'' prefixe o valor com U+001F, isto é, <kbd>parâmetro=%1Fvalor1%1Fvalor2</kbd>.",
+ "api-help-param-type-limit": "Tipo: inteiro ou <kbd>max</kbd>",
+ "api-help-param-type-integer": "Tipo: {{PLURAL:$1|1=inteiro|2=lista de números inteiros}}",
+ "api-help-param-type-boolean": "Tipo: booleano ([[Special:ApiHelp/main#main/datatypes|detalhes]])",
+ "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=data e hora|2=lista de datas e horas}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
+ "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de utilizador|2=lista de nomes de utilizadores}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Um dos seguintes valores|2=Valores (separados com <kbd>{{!}}</kbd> ou [[Special:ApiHelp/main#main/datatypes|alternativas]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Tem de estar vazio|Pode estar vazio, ou ser $2}}",
+ "api-help-param-limit": "Não são permitidos mais do que: $1",
+ "api-help-param-limit2": "Não são permitidos mais do que $1 ($2 para robôs).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=O valor não pode ser inferior a|2=Os valores não podem ser inferiores a}} $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=O valor não pode ser superior a|2=Os valores não podem ser superiores a}} $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=O valor tem de estar compreendido|2=Os valores têm de estar compreendidos}} entre $2 e $3.",
+ "api-help-param-upload": "Tem ser enviado (''posted'') como um carregamento de ficheiro usando multipart/form-data.",
+ "api-help-param-multi-separate": "Separar os valores com <kbd>|</kbd> ou [[Special:ApiHelp/main#main/datatypes|alternativas]].",
+ "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para robôs).",
+ "api-help-param-multi-max-simple": "O número máximo de valores é {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Para especificar todos os valores, use <kbd>$1</kbd>.",
+ "api-help-param-default": "Valor por omissão: $1",
+ "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
+ "api-help-param-token": "Uma chave \"$1\" obtida de [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Para efeitos de compatibilidade, a chave usada na interface ''web'' também é aceite.",
+ "api-help-param-disabled-in-miser-mode": "Desativado devido ao [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo avarento]] (''miser mode'').",
+ "api-help-param-limited-in-miser-mode": "<strong>Nota:</strong> devido ao [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo avarento]] (''miser mode''), usar isto pode resultar na devolução de menos de <var>$1limit</var> resultados antes de continuar; em casos extremos pode não ser devolvido qualquer resultado.",
+ "api-help-param-direction": "A direção da enumeração:\n;newer:Listar o mais antigo primeiro. Nota: $1start tem de estar antes de $1end.\n;older:Listar o mais recente primeiro (padrão). Nota: $1start tem de estar depois de $1end.",
+ "api-help-param-continue": "Quando houver mais resultados disponíveis, usar isto para continuar",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
+ "api-help-param-maxbytes": "Não pode exceder $1 {{PLURAL:$1|byte|bytes}}.",
+ "api-help-param-maxchars": "Não pode exceder $1 {{PLURAL:$1|carácter|caracteres}}.",
+ "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permissão|Permissões}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
+ "api-help-right-apihighlimits": "Usar limites mais altos em consultas da API (consultas lentas: $1; consultas rápidas: $2). Os limites para consultas lentas também se aplicam a parâmetros com vários valores.",
+ "api-help-open-in-apisandbox": "<small>[abrir na página de testes]</small>",
+ "api-help-authmanager-general-usage": "O procedimento geral para usar este módulo é:\n# Obtenha os campos disponíveis usando <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$4</kbd> e uma chave <kbd>$5</kbd> obtida de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Apresente os campos ao utilizador e obtenha os dados fornecidos por este.\n# Publique-os para este módulo, fornecendo <var>$1returnurl</var> e quaisquer campos relevantes.\n# Verifique o valor de <samp>status</samp> na resposta.\n#* Se recebeu <samp>PASS</samp> ou <samp>FAIL</samp>, terminou. A operação terá tido sucesso ou falhado.\n#* Se recebeu <samp>UI</samp>, apresente os novos campos ao utilizador e obtenha os dados fornecidos por este. Depois publique-os para este módulo com <var>$1continue</var> e os campos relevantes preenchidos, e repita o passo 4.\n#* Se recebeu <samp>REDIRECT</samp>, encaminhe o utilizador para <samp>redirecttarget</samp> e aguarde o retorno para o URL <var>$1returnurl</var>. Depois publique para este módulo com <var>$1continue</var> quaisquer campos que tenham sido passados ao URL de retorno, e repita o passo 4.\n#* Se recebeu <samp>RESTART</samp>, isto significa que a autenticação funcionou mas não temos uma conta de utilizador associada. Pode dar-lhe o tratamento de <samp>UI</samp> ou <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "Usar só estes pedidos de autenticação, com o <samp>id</samp> devolvido por <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd> ou por uma resposta anterior deste módulo.",
+ "api-help-authmanagerhelper-request": "Usar este pedido de autenticação, com o <samp>id</samp> devolvido por <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "Formato a usar nas mensagens de saída.",
+ "api-help-authmanagerhelper-mergerequestfields": "Combinar a informação de todos os pedidos de autenticação numa única matriz.",
+ "api-help-authmanagerhelper-preservestate": "Preservar o estado de uma tentativa de autenticação anterior falhada, se possível.",
+ "api-help-authmanagerhelper-returnurl": "O URL de retorno para processos de autenticação por terceiros tem de ser absoluto. É obrigatório fornecer este URL ou <var>$1continue</var>.\n\nTipicamente, após receber uma resposta <samp>REDIRECT</samp>, abrirá um ''browser'' ou uma ''web view'' para o URL <samp>redirecttarget</samp> especificado, para dar lugar ao processo de autenticação por terceiros. Quando esse processo terminar, a terceira entidade encaminhará o ''browser'' ou a ''web view'' para este URL. Deve extrair do URL quaisquer parâmetros de consulta ou de POST, e passá-los como um pedido <var>$1continue</var> a este módulo da API.",
+ "api-help-authmanagerhelper-continue": "Este pedido é uma continuação após uma resposta anterior com o valor <samp>UI</samp> ou <samp>REDIRECT</samp>. É obrigatório fornecer este parâmetro ou o parâmetro <var>$1returnurl</var>.",
+ "api-help-authmanagerhelper-additional-params": "Este módulo aceita parâmetros adicionais, dependendo dos pedidos de autenticação disponíveis. Use <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd> (ou uma resposta anterior deste módulo, se aplicável) para determinar os pedidos disponíveis e os campos que estes utilizam.",
+ "apierror-allimages-redirect": "Usar <kbd>gaifilterredir=nonredirects</kbd> em vez de <var>redirects</var> ao utilizar <kbd>allimages</kbd> como gerador.",
+ "apierror-allpages-generator-redirects": "Usar <kbd>gapfilterredir=nonredirects</kbd> em vez de <var>redirects</var> ao utilizar <kbd>allpages</kbd> como gerador.",
+ "apierror-appendnotsupported": "Não é possível acrescentar conteúdo a páginas que usam o modelo de conteúdo $1.",
+ "apierror-articleexists": "O artigo que tentou criar já existe.",
+ "apierror-assertbotfailed": "A asserção de que o utilizador tem o privilégio <code>bot</code> falhou.",
+ "apierror-assertnameduserfailed": "A asserção de que o utilizador é \"$1\" falhou.",
+ "apierror-assertuserfailed": "A asserção de que o utilizador está autenticado falhou.",
+ "apierror-autoblocked": "O seu endereço IP foi bloqueado automaticamente, porque foi usado por um utilizador bloqueado.",
+ "apierror-badconfig-resulttoosmall": "O valor de <code>$wgAPIMaxResultSize</code> nesta wiki é demasiado pequeno para conter informação básica de resultados.",
+ "apierror-badcontinue": "Parâmetro de continuação inválido. Deve passar o valor original devolvido pela consulta anterior.",
+ "apierror-baddiff": "Não foi possível obter a lista de diferenças. Uma das revisões, ou ambas, não existem, ou não tem permissão para vê-las.",
+ "apierror-baddiffto": "<var>$1diffto</var> tem de ser um número não negativo, <kbd>prev</kbd>, <kbd>next</kbd> ou <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "O formato solicitado $1 não é suportado pelo modelo de conteúdo $2.",
+ "apierror-badformat": "O formato solicitado $1 não é suportado pelo modelo de conteúdo $2 usado por $3.",
+ "apierror-badgenerator-notgenerator": "O módulo <kbd>$1</kbd> não pode ser usado como gerador.",
+ "apierror-badgenerator-unknown": "<kbd>generator=$1</kbd> desconhecido.",
+ "apierror-badip": "O parâmetro IP não é válido.",
+ "apierror-badmd5": "A chave MD5 fornecida estava incorreta.",
+ "apierror-badmodule-badsubmodule": "O módulo <kbd>$1</kbd> não tem um submódulo \"$2\".",
+ "apierror-badmodule-nosubmodules": "O módulo <kbd>$1</kbd> não tem submódulos.",
+ "apierror-badparameter": "Valor inválido para o parâmetro <var>$1</var>.",
+ "apierror-badquery": "Consulta inválida.",
+ "apierror-badtimestamp": "Valor inválido \"$2\" para o parâmetro de data e hora <var>$1</var>.",
+ "apierror-badtoken": "Chave CSRF inválida.",
+ "apierror-badupload": "O parâmetro para carregamento de ficheiros <var>$1</var> não é um carregamento de ficheiro; verifique que usou <code>multipart/form-data</code> no seu POST e inclua um nome de ficheiro no cabeçalho <code>Content-Disposition</code>.",
+ "apierror-badurl": "Valor inválido \"$2\" para o parâmetro <var>$1</var> do URL.",
+ "apierror-baduser": "Valor inválido \"$2\" para o parâmetro de utilizador <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "O separador de valores múltiplos U+001F só pode ser usado em parâmetros de valores múltiplos.",
+ "apierror-bad-watchlist-token": "A chave secreta da lista de páginas vigiadas que foi fornecida está incorreta. Configure uma chave correta em [[Special:Preferences]], por favor.",
+ "apierror-blockedfrommail": "Foi-lhe bloqueada a capacidade de enviar correio eletrónico.",
+ "apierror-blocked": "Foi-lhe bloqueada a capacidade de editar.",
+ "apierror-botsnotsupported": "Esta interface não é suportada para robôs.",
+ "apierror-cannot-async-upload-file": "Os parâmetros <var>async</var> e <var>file</var> não podem ser combinados. Se pretende o processamento assíncrono do seu ficheiro carregado, carregue-o primeiro na área de ficheiros escondidos (usando o parâmetro <var>stash</var>) e depois publique de forma assíncrona este ficheiro escondido (usando <var>filekey</var> e <var>async</var>).",
+ "apierror-cannotreauthenticate": "Esta operação não está disponível porque não é possível verificar a sua identidade.",
+ "apierror-cannotviewtitle": "Não tem permissão para ver $1.",
+ "apierror-cantblock-email": "Não tem permissão para bloquear a capacidade dos utilizadores enviarem correio eletrónico através da wiki.",
+ "apierror-cantblock": "Não tem permissão para bloquear utilizadores.",
+ "apierror-cantchangecontentmodel": "Não tem permissão para alterar o modelo de conteúdo de uma página.",
+ "apierror-canthide": "Não tem permissão para ocultar nomes de utilizadores no registo de bloqueios.",
+ "apierror-cantimport-upload": "Não tem permissão para importar páginas carregadas.",
+ "apierror-cantimport": "Não tem permissão para importar páginas.",
+ "apierror-cantoverwrite-sharedfile": "O ficheiro alvo existe num repositório partilhado e você não tem permissão para o substituir.",
+ "apierror-cantsend": "Não está autenticado, não tem um endereço de correio eletrónico confirmado, ou não lhe é permitido enviar correio a outros utilizadores, por isso não pode enviar correios eletrónicos.",
+ "apierror-cantundelete": "Não foi possível restaurar: as revisões solicitadas podem não existir ou podem já ter sido restauradas.",
+ "apierror-changeauth-norequest": "A criação do pedido de modificação falhou.",
+ "apierror-chunk-too-small": "O tamanho de segmento mínimo é $1 {{PLURAL:$1|byte|bytes}} para segmentos que não sejam segmentos finais.",
+ "apierror-cidrtoobroad": "Não são aceites intervalos CIDR $1 maiores do que /$2.",
+ "apierror-compare-no-title": "Não é possível transformar antes da gravação, sem um título. Tente especificar <var>fromtitle</var> ou <var>totitle</var>.",
+ "apierror-compare-nosuchfromsection": "Não há nenhuma secção $1 no conteúdo 'from'.",
+ "apierror-compare-nosuchtosection": "Não há nenhuma secção $1 no conteúdo 'to'.",
+ "apierror-compare-relative-to-nothing": "Não existe uma revisão 'from' em relação à qual <var>torelative</var> possa ser relativo.",
+ "apierror-contentserializationexception": "A seriação do conteúdo falhou: $1",
+ "apierror-contenttoobig": "O conteúdo que forneceu excede o tamanho máximo dos artigos que é $1 {{PLURAL:$1|kilobyte|kilobytes}}.",
+ "apierror-copyuploadbaddomain": "Não são permitidos carregamentos por URL a partir deste domínio.",
+ "apierror-copyuploadbadurl": "Não são permitidos carregamentos a partir deste URL.",
+ "apierror-create-titleexists": "Os títulos existentes não podem ser protegidos com <kbd>create</kbd>.",
+ "apierror-csp-report": "Ocorreu um erro no processamento do relatório CSP: $1.",
+ "apierror-databaseerror": "[$1] Erro na consulta da base de dados.",
+ "apierror-deletedrevs-param-not-1-2": "O parâmetro <var>$1</var> não pode ser usado nos modos 1 e 2.",
+ "apierror-deletedrevs-param-not-3": "O parâmetro <var>$1</var> não pode ser usado no modo 3.",
+ "apierror-emptynewsection": "Não é possível criar secções novas vazias.",
+ "apierror-emptypage": "Não é permitido criar páginas novas vazias.",
+ "apierror-exceptioncaught": "[$1] Exceção intercetada: $2",
+ "apierror-filedoesnotexist": "O ficheiro não existe.",
+ "apierror-fileexists-sharedrepo-perm": "O ficheiro de destino já existe num repositório partilhado. Use o parâmetro <var>ignorewarnings</var> para substituí-lo.",
+ "apierror-filenopath": "Não é possível obter o caminho local do ficheiro.",
+ "apierror-filetypecannotberotated": "O tipo do ficheiro não pode ser rodado.",
+ "apierror-formatphp": "Esta resposta não pode ser representada com <kbd>format=php</kbd>. Consulte https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "O título para <kbd>$1</kbd> tem de ser um ficheiro.",
+ "apierror-import-unknownerror": "Ocorreu um erro desconhecido na importação: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> não pode ultrapassar $2 (definido como $3) para robôs e administradores.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> não pode ultrapassar $2 (definido como $3) para utilizadores.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> não pode ser inferior a $2 (definido como $3).",
+ "apierror-invalidcategory": "O nome de categoria que introduziu não é válido.",
+ "apierror-invalid-chunk": "A posição mais o segmento atual ultrapassam o tamanho do ficheiro.",
+ "apierror-invalidexpiry": "A hora de expiração \"$1\" é inválida.",
+ "apierror-invalid-file-key": "Não é uma chave de ficheiro válida.",
+ "apierror-invalidlang": "Código de língua inválido para o parâmetro <var>$1</var>.",
+ "apierror-invalidoldimage": "O parâmetro <var>oldimage</var> tem um formato inválido.",
+ "apierror-invalidparammix-cannotusewith": "O parâmetro <kbd>$1</kbd> não pode ser usado com <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "O parâmetro <kbd>$1</kbd> só pode ser usado com <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> não pode ser combinado com os parâmetros <var>oldid</var>, <var>pageid</var> e <var>page</var>. Use <var>title</var> e <var>text</var>, por favor.",
+ "apierror-invalidparammix": "{{PLURAL:$2||Os parâmetros}} $1 não podem ser usados em conjunto.",
+ "apierror-invalidsection": "O parâmetro <var>section</var> tem de ser um identificador de secção válido ou <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "O resumo criptográfico SHA1Base36 fornecido não é válido.",
+ "apierror-invalidsha1hash": "O resumo criptográfico SHA1 fornecido não é válido.",
+ "apierror-invalidtitle": "Título inválido \"$1\".",
+ "apierror-invalidurlparam": "Valor inválido para <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Nome de utilizador inválido \"$1\".",
+ "apierror-invaliduserid": "O identificador de utilizador <var>$1</var> não é válido.",
+ "apierror-maxbytes": "O parâmetro <var>$1</var> não pode exceder $2 {{PLURAL:$2|byte|bytes}}",
+ "apierror-maxchars": "O parâmetro <var>$1</var> não pode exceder $2 {{PLURAL:$2|carácter|caracteres}}",
+ "apierror-maxlag-generic": "À espera de um servidor de base de dados: $1 {{PLURAL:$1|segundo|segundos}} de atraso.",
+ "apierror-maxlag": "À espera de $2: $1 {{PLURAL:$1|segundo|segundos}} de atraso.",
+ "apierror-mimesearchdisabled": "A pesquisa MIME é desativada no modo avarento.",
+ "apierror-missingcontent-pageid": "Conteúdo em falta para a página com o identificador $1.",
+ "apierror-missingcontent-revid": "Conteúdo em falta para a revisão com o identificador $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|O parâmetro|Pelo menos um dos parâmetros}} $1 é obrigatório.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|O parâmetro|Um dos parâmetros}} $1 é obrigatório.",
+ "apierror-missingparam": "O parâmetro <var>$1</var> tem de ser definido.",
+ "apierror-missingrev-pageid": "Não há nenhuma revisão atual da página com o identificador $1.",
+ "apierror-missingrev-title": "Não há nenhuma revisão atual do título $1.",
+ "apierror-missingtitle-createonly": "Os títulos em falta só podem ser protegidos com <kbd>create</kbd>.",
+ "apierror-missingtitle": "A página que especificou não existe.",
+ "apierror-missingtitle-byname": "A página $1 não existe.",
+ "apierror-moduledisabled": "O módulo <kbd>$1</kbd> foi desativado.",
+ "apierror-multival-only-one-of": "Só é permitido {{PLURAL:$3|o valor|um dos valores}} $2 para o parâmetro <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> só pode ser usado com uma única página.",
+ "apierror-mustbeloggedin-changeauth": "Tem de estar autenticado para alterar dados de autenticação.",
+ "apierror-mustbeloggedin-generic": "Tem de estar autenticado.",
+ "apierror-mustbeloggedin-linkaccounts": "Tem de estar autenticado para ligar contas.",
+ "apierror-mustbeloggedin-removeauth": "Tem de estar autenticado para remover dados de autenticação.",
+ "apierror-mustbeloggedin-uploadstash": "A área dos ficheiros escondidos só está disponível para utilizadores autenticados.",
+ "apierror-mustbeloggedin": "Tem de ter uma sessão iniciada para $1.",
+ "apierror-mustbeposted": "O módulo <kbd>$1</kbd> requer um pedido POST.",
+ "apierror-mustpostparams": "{{PLURAL:$2|O seguinte parâmetro foi encontrado|Os seguintes parâmetros foram encontrados}} no texto da pesquisa, mas têm de estar no corpo do POST: $1.",
+ "apierror-noapiwrite": "A edição desta wiki através da API foi impossibilitada. Certifique-se de que a declaração <code>$wgEnableWriteAPI=true;</code> está incluída no ficheiro <code>LocalSettings.php</code> da wiki.",
+ "apierror-nochanges": "Não foi pedida nenhuma mudança.",
+ "apierror-nodeleteablefile": "Essa versão antiga do ficheiro não existe.",
+ "apierror-no-direct-editing": "A edição direta através da API não é suportada para o modelo de conteúdo $1 usado por $2.",
+ "apierror-noedit-anon": "Os utilizadores anónimos não podem editar páginas.",
+ "apierror-noedit": "Não tem permissão para editar páginas.",
+ "apierror-noimageredirect-anon": "Os utilizadores anónimos não podem criar redirecionamentos de imagens.",
+ "apierror-noimageredirect": "Não tem permissão para criar redirecionamentos de imagens.",
+ "apierror-nosuchlogid": "Não existe nenhuma entrada de registo com o identificador $1.",
+ "apierror-nosuchpageid": "Não existe nenhuma página com o identificador $1.",
+ "apierror-nosuchrcid": "Não existe nenhuma mudança recente com o identificador $1.",
+ "apierror-nosuchrevid": "Não existe nenhuma revisão com o identificador $1.",
+ "apierror-nosuchsection": "Não existe nenhuma secção $1.",
+ "apierror-nosuchsection-what": "Não existe nenhuma secção $1 em $2.",
+ "apierror-nosuchuserid": "Não existe nenhum utilizador com o identificador $1.",
+ "apierror-notarget": "Não especificou um destino válido para esta operação.",
+ "apierror-notpatrollable": "A revisão r$1 não pode ser patrulhada porque é demasiado antiga.",
+ "apierror-nouploadmodule": "Não foi definido nenhum módulo de carregamento.",
+ "apierror-offline": "Não foi possível continuar devido a problemas de conectividade da rede. Certifique-se de que tem ligação à Internet e tente novamente.",
+ "apierror-opensearch-json-warnings": "Os avisos não podem ser representados no formato OpenSearch JSON.",
+ "apierror-pagecannotexist": "O espaço nominal não permite páginas reais.",
+ "apierror-pagedeleted": "A página foi eliminada depois de obter a data e hora da mesma.",
+ "apierror-pagelang-disabled": "Nesta wiki não é permitido alterar a língua de uma página.",
+ "apierror-paramempty": "O parâmetro <var>$1</var> não pode estar vazio.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> só é suportado para conteúdo em texto wiki.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> só é suportado para conteúdo em texto wiki. A página $1 usa o modelo de conteúdo $2.",
+ "apierror-pastexpiry": "A data de expiração \"$1\" é uma data passada.",
+ "apierror-permissiondenied": "Não tem permissão para $1.",
+ "apierror-permissiondenied-generic": "Permissão negada.",
+ "apierror-permissiondenied-patrolflag": "Necessita ter a permissão <code>patrol</code> ou <code>patrolmarks</code> para solicitar a marca de patrulhado.",
+ "apierror-permissiondenied-unblock": "Não tem permissão para desbloquear utilizadores.",
+ "apierror-prefixsearchdisabled": "A pesquisa por prefixo está desativada no modo avarento.",
+ "apierror-promised-nonwrite-api": "O cabeçalho HTTP <code>Promise-Non-Write-API-Action</code> não pode ser enviado a módulos da API em modo de escrita.",
+ "apierror-protect-invalidaction": "O tipo de proteção \"$1\" é inválido.",
+ "apierror-protect-invalidlevel": "O nível de proteção \"$1\" é inválido.",
+ "apierror-ratelimited": "Excedeu a sua frequência limite de edições. Aguarde um pouco e tente novamente, por favor.",
+ "apierror-readapidenied": "Precisa de ter permissão de leitura para usar este módulo.",
+ "apierror-readonly": "A wiki está em modo exclusivo de leitura.",
+ "apierror-reauthenticate": "Não se autenticou recentemente nesta sessão. Volte a autenticar-se, por favor.",
+ "apierror-redirect-appendonly": "Tentou editar usando o modo de seguimento de redirecionamentos, que só pode ser usado em conjunto com <kbd>section=new</kbd>, <var>prependtext</var>, ou <var>appendtext</var>.",
+ "apierror-revdel-mutuallyexclusive": "Não pode usar o mesmo campo em <var>hide</var> e em <var>show</var>.",
+ "apierror-revdel-needtarget": "É necessário um título de destino para este tipo RevDel.",
+ "apierror-revdel-paramneeded": "É necessário pelo menos um valor para <var>hide</var> ou <var>show</var>.",
+ "apierror-revisions-badid": "Não foi encontrada nenhuma revisão para o parâmetro <var>$1</var>.",
+ "apierror-revisions-norevids": "O parâmetro <var>revids</var> não pode ser usado com as opções de listagem (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> e <var>$1end</var>).",
+ "apierror-revisions-singlepage": "Foi usado <var>titles</var>, <var>pageids</var> ou um gerador para fornecer diversas páginas, mas os parâmetros <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> e <var>$1end</var> só podem ser usados sobre uma única página.",
+ "apierror-revwrongpage": "r$1 não é uma revisão de $2.",
+ "apierror-searchdisabled": "A pesquisa <var>$1</var> está desativada.",
+ "apierror-sectionreplacefailed": "Não foi possível combinar a secção atualizada.",
+ "apierror-sectionsnotsupported": "Secções não são suportadas pelo modelo de conteúdo $1.",
+ "apierror-sectionsnotsupported-what": "Secções não são suportadas por $1.",
+ "apierror-show": "Parâmetro incorreto - não podem ser fornecidos valores mutuamente exclusivos.",
+ "apierror-siteinfo-includealldenied": "Não é possível ver a informação de todos os servidores, a menos que <var>$wgShowHostNames</var> tenha o valor \"true\".",
+ "apierror-sizediffdisabled": "A diferença de tamanho está desativada no modo avarento.",
+ "apierror-spamdetected": "A sua edição foi recusada porque continha um fragmento de spam: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "Não tem permissão para ver os resultados desta página especial.",
+ "apierror-stashedfilenotfound": "O ficheiro não foi encontrado na área de ficheiros escondidos: $1.",
+ "apierror-stashedit-missingtext": "Não foi encontrado nenhum texto na área de ficheiros escondidos com a chave criptográfica fornecida.",
+ "apierror-stashfailed-complete": "O carregamento por segmentos já terminou. Para mais detalhes, verifique o estado.",
+ "apierror-stashfailed-nosession": "Não há nenhuma sessão de carregamento por segmentos com esta chave.",
+ "apierror-stashfilestorage": "Não foi possível armazenar na área de ficheiros escondidos o ficheiro enviado: $1.",
+ "apierror-stashinvalidfile": "Ficheiro escondido inválido.",
+ "apierror-stashnosuchfilekey": "A chave de ficheiro não existe: $1.",
+ "apierror-stashpathinvalid": "A chave de ficheiro tem um formato incorreto ou é inválida: $1.",
+ "apierror-stashwrongowner": "Proprietário incorreto: $1",
+ "apierror-stashzerolength": "O ficheiro tem comprimento zero e não foi possível armazená-lo na área de ficheiros escondidos: $1.",
+ "apierror-systemblocked": "Foi automaticamente bloqueado pelo MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "A expansão de predefinições só é suportada para conteúdo em texto wiki. A página $1 usa o modelo de conteúdo $2.",
+ "apierror-timeout": "O servidor não respondeu no prazo esperado.",
+ "apierror-toofewexpiries": "{{PLURAL:$1|Foi fornecida $1 data e hora|Foram fornecidas $1 datas e horas}} de expiração quando {{PLURAL:$2|era necessária|eram necessárias}} $2.",
+ "apierror-unknownaction": "A operação especificada, <kbd>$1</kbd>, não é reconhecida.",
+ "apierror-unknownerror-editpage": "Erro EditPage desconhecido: $1.",
+ "apierror-unknownerror-nocode": "Erro desconhecido.",
+ "apierror-unknownerror": "Erro desconhecido: \"$1\".",
+ "apierror-unknownformat": "Formato não reconhecido \"$1\".",
+ "apierror-unrecognizedparams": "{{PLURAL:$2|Parâmetro não reconhecido|Parâmetros não reconhecidos}}: $1.",
+ "apierror-unrecognizedvalue": "Valor não reconhecido para o parâmetro <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "O repositório de ficheiros local não suporta consultas sobre todas as imagens.",
+ "apierror-upload-filekeyneeded": "Tem de ser fornecida uma <var>filekey</var> quando o <var>offset</var> é diferente de zero.",
+ "apierror-upload-filekeynotallowed": "Não pode ser fornecida uma <var>filekey</var> quando o <var>offset</var> é 0.",
+ "apierror-upload-inprogress": "O carregamento a partir da área de ficheiros escondidos já está em progresso.",
+ "apierror-upload-missingresult": "Não há nenhum resultado nos dados de estado.",
+ "apierror-urlparamnormal": "Não foi possível normalizar os parâmetros de imagem para $1.",
+ "apierror-writeapidenied": "Não lhe é permitido editar esta wiki através da API.",
+ "apiwarn-alldeletedrevisions-performance": "Para obter um desempenho melhor ao gerar títulos, defina <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Não foi possível analisar <var>$1urlparam</var> para $2. Serão utilizadas somente a largura e a altura.",
+ "apiwarn-badutf8": "O valor passado para <var>$1</var> contém dados inválidos ou não normalizados. Os dados textuais devem estar em formato Unicode válido, normalizado em NFC, sem caracteres de controlo C0 exceto HT (\\t), LF (\\n) e CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "Verifique que símbolos como \"+\" na chave estão devidamente codificados com percentagem no URL.",
+ "apiwarn-compare-nocontentmodel": "Não foi possível determinar nenhum modelo de conteúdo; será assumido $1.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> foi descontinuado. Em substituição, use <kbd>prop=deletedrevisions</kbd> ou <kbd>list=alldeletedrevisions</kbd>, por favor.",
+ "apiwarn-deprecation-expandtemplates-prop": "Dado que não foi especificado nenhum valor para o parâmetro <var>prop</var> foi usado um formato antigo para o resultado. Esse formato está descontinuado e, de futuro, será definido um valor por omissão para o parâmetro <var>prop</var>, de forma que seja sempre usado um formato novo.",
+ "apiwarn-deprecation-httpsexpected": "Foi usado HTTP quando era esperado HTTPS.",
+ "apiwarn-deprecation-login-botpw": "O início de sessões com uma conta principal através de <kbd>action=login</kbd> foi descontinuado e poderá deixar de funcionar sem aviso prévio. Para continuar a iniciar sessões com <kbd>action=login</kbd>, consulte [[Special:BotPasswords]]. Para continuar a iniciar sessões com a conta principal de forma segura, consulte <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "O início de sessões com uma conta principal através de <kbd>action=login</kbd> foi descontinuado e poderá deixar de funcionar sem aviso prévio. Para iniciar uma sessão de forma segura, consulte <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "A obtenção de uma chave através de <kbd>action=login</kbd> foi descontinuada. Em substituição, use <kbd>action=query&meta=tokens&type=login</kbd>.",
+ "apiwarn-deprecation-parameter": "O parâmetro <var>$1</var> foi descontinuado.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> está obsoleto desde o MediaWiki 1.28. Use <kbd>prop=headhtml</kbd> ao criar novos documentos de HTML, ou <kbd>prop=modules|jsconfigvars</kbd> ao atualizar um documento no lado do cliente.",
+ "apiwarn-deprecation-purge-get": "O uso de <kbd>action=purge</kbd> através de um GET foi descontinuado. Em substituição, use um POST.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> foi descontinuado. Em substituição, use <kbd>$2</kbd>, por favor.",
+ "apiwarn-difftohidden": "Não foi possível criar uma lista das diferenças em relação à r$1: o conteúdo está ocultado.",
+ "apiwarn-errorprinterfailed": "A impressora de erros falhou. Será feita nova tentativa sem parâmetros.",
+ "apiwarn-errorprinterfailed-ex": "A impressora de erros falhou (será feita nova tentativa sem parâmetros): $1",
+ "apiwarn-invalidcategory": "\"$1\" não é uma categoria.",
+ "apiwarn-invalidtitle": "\"$1\" não é um título válido.",
+ "apiwarn-invalidxmlstylesheetext": "Uma folha de estilos deve ter a extensão <code>.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "Foi especificada uma folha de estilos inválida ou inexistente.",
+ "apiwarn-invalidxmlstylesheetns": "A folha de estilos deveria estar no espaço nominal {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "A propriedade <kbd>modules</kbd> foi definida mas <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> não o foram. Variáveis de configuração são necessárias para utilização correta de módulos.",
+ "apiwarn-notfile": "\"$1\" não é um ficheiro.",
+ "apiwarn-nothumb-noimagehandler": "Não foi possível criar a miniatura porque $1 não tem uma rotina associada de tratamento de imagens.",
+ "apiwarn-parse-nocontentmodel": "Não foi fornecido um <var>title</var> ou <var>contentmodel</var>, será assumido $1.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var> foi usado sem <var>text</var>, e foram pedidas as propriedades da página analisada. Pretendia usar <var>oldid</var> em vez de <var>revid</var>?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> foi usado sem <var>text</var>, e foram pedidas as propriedades da página analisada. Pretendia usar <var>page</var> em vez de <var>title</var>?",
+ "apiwarn-redirectsandrevids": "Resolução de redirecionamentos não pode ser usada em conjunto com o parâmetro <var>revids</var>. Quaisquer redirecionamentos para os quais <var>revids</var> aponta não foram resolvidos.",
+ "apiwarn-tokennotallowed": "A operação \"$1\" não é permitida para o utilizador atual.",
+ "apiwarn-tokens-origin": "Não é possível obter chaves quando a norma da mesma origem não é aplicada.",
+ "apiwarn-toomanyvalues": "Foram fornecidos demasiados valores para o parâmetro <var>$1</var>. O limite é $2.",
+ "apiwarn-truncatedresult": "Este resultado foi truncado porque ultrapassaria o limite de $1 bytes.",
+ "apiwarn-unclearnowtimestamp": "A passagem de \"$2\" no parâmetro de data e hora <var>$1</var> foi tornada obsoleta. Se, por qualquer razão, precisa de especificar de forma explícita a hora atual sem a calcular no lado do cliente, use <kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor não reconhecido|Valores não reconhecidos}} para o parâmetro <var>$1</var>: $2.",
+ "apiwarn-unsupportedarray": "O parâmetro <var>$1</var> usa sintaxe PHP de matrizes não suportada.",
+ "apiwarn-urlparamwidth": "O valor da largura definido em <var>$1urlparam</var> ($2) foi ignorado em favor da largura obtida a partir de <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
+ "apiwarn-validationfailed-badchars": "caracteres inválidos na chave (só são permitidos <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, e <code>-</code>).",
+ "apiwarn-validationfailed-badpref": "não é uma preferência válida.",
+ "apiwarn-validationfailed-cannotset": "não pode ser definido por este módulo.",
+ "apiwarn-validationfailed-keytoolong": "chave demasiado longa (não pode ter mais de $1 bytes).",
+ "apiwarn-validationfailed": "Erro de validação de <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Aviso de segurança</strong>: <var>$wgDebugAPI</var> está ativado.",
+ "api-feed-error-title": "Erro ($1)",
+ "api-usage-docref": "Consulte $1 para a utilização da API.",
+ "api-usage-mailinglist-ref": "Subscreva a lista de distribuição mediawiki-api-announce em &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; para receber anúncios de descontinuação e de alterações disruptivas da API.",
+ "api-exception-trace": "$1 em $2($3)\n$4",
+ "api-credits-header": "Créditos",
+ "api-credits": "Programadores da API:\n* Yuri Astrakhan (criador, programador principal, set 2006–set 2007)\n* Roan Kattouw (programador principal, set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (programador principal, 2013–presente)\n\nPode enviar os seus comentários, sugestões e perguntas para o endereço mediawiki-api@lists.wikimedia.org, ou reportar quaisquer defeitos que encontre em https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/qqq.json b/www/wiki/includes/api/i18n/qqq.json
new file mode 100644
index 00000000..594bf8e6
--- /dev/null
+++ b/www/wiki/includes/api/i18n/qqq.json
@@ -0,0 +1,1776 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226",
+ "Robby",
+ "Shirayuki",
+ "Umherirrender",
+ "McDutchie",
+ "Raymond",
+ "Anomie",
+ "Nemo bis",
+ "Amire80",
+ "Siebrand",
+ "Purodha",
+ "Tacsipacsi",
+ "D41D8CD98F"
+ ]
+ },
+ "apihelp-main-summary": "{{doc-apihelp-summary|main}}",
+ "apihelp-main-extended-description": "{{doc-apihelp-extended-description|main}}",
+ "apihelp-main-param-action": "{{doc-apihelp-param|main|action}}",
+ "apihelp-main-param-format": "{{doc-apihelp-param|main|format}}",
+ "apihelp-main-param-maxlag": "{{doc-apihelp-param|main|maxlag}}",
+ "apihelp-main-param-smaxage": "{{doc-apihelp-param|main|smaxage}}",
+ "apihelp-main-param-maxage": "{{doc-apihelp-param|main|maxage}}",
+ "apihelp-main-param-assert": "{{doc-apihelp-param|main|assert}}",
+ "apihelp-main-param-assertuser": "{{doc-apihelp-param|main|assertuser}}",
+ "apihelp-main-param-requestid": "{{doc-apihelp-param|main|requestid}}",
+ "apihelp-main-param-servedby": "{{doc-apihelp-param|main|servedby}}",
+ "apihelp-main-param-curtimestamp": "{{doc-apihelp-param|main|curtimestamp}}",
+ "apihelp-main-param-responselanginfo": "{{doc-apihelp-param|main|responselanginfo}}",
+ "apihelp-main-param-origin": "{{doc-apihelp-param|main|origin}}",
+ "apihelp-main-param-uselang": "{{doc-apihelp-param|main|uselang}}",
+ "apihelp-main-param-errorformat": "{{doc-apihelp-param|main|errorformat}}",
+ "apihelp-main-param-errorlang": "{{doc-apihelp-param|main|errorlang}}",
+ "apihelp-main-param-errorsuselocal": "{{doc-apihelp-param|main|errorsuselocal}}",
+ "apihelp-block-summary": "{{doc-apihelp-summary|block}}",
+ "apihelp-block-param-user": "{{doc-apihelp-param|block|user}}",
+ "apihelp-block-param-userid": "{{doc-apihelp-param|block|userid}}",
+ "apihelp-block-param-expiry": "{{doc-apihelp-param|block|expiry}}\n{{doc-important|Do not translate \"5 months\", \"2 weeks\", \"infinite\", \"indefinite\" or \"never\"!}}",
+ "apihelp-block-param-reason": "{{doc-apihelp-param|block|reason}}",
+ "apihelp-block-param-anononly": "{{doc-apihelp-param|block|anononly}}\n* See also {{msg-mw|ipb-hardblock}}",
+ "apihelp-block-param-nocreate": "{{doc-apihelp-param|block|nocreate}}\n* See also {{msg-mw|ipbcreateaccount}}",
+ "apihelp-block-param-autoblock": "{{doc-singularthey}}\n{{doc-apihelp-param|block|autoblock}}\n* See also {{msg-mw|ipbenableautoblock}}",
+ "apihelp-block-param-noemail": "{{doc-apihelp-param|block|noemail}}\n* See also {{msg-mw|ipbemailban}}",
+ "apihelp-block-param-hidename": "{{doc-apihelp-param|block|hidename}}",
+ "apihelp-block-param-allowusertalk": "{{doc-apihelp-param|block|allowusertalk}}\n* See also {{msg-mw|ipb-disableusertalk}}",
+ "apihelp-block-param-reblock": "{{doc-apihelp-param|block|reblock}}",
+ "apihelp-block-param-watchuser": "{{doc-apihelp-param|block|watchuser}}",
+ "apihelp-block-param-tags": "{{doc-apihelp-param|block|tags}}",
+ "apihelp-block-example-ip-simple": "{{doc-apihelp-example|block}}",
+ "apihelp-block-example-user-complex": "{{doc-apihelp-example|block}}",
+ "apihelp-changeauthenticationdata-summary": "{{doc-apihelp-summary|changeauthenticationdata}}",
+ "apihelp-changeauthenticationdata-example-password": "{{doc-apihelp-example|changeauthenticationdata}}",
+ "apihelp-checktoken-summary": "{{doc-apihelp-summary|checktoken}}",
+ "apihelp-checktoken-param-type": "{{doc-apihelp-param|checktoken|type}}",
+ "apihelp-checktoken-param-token": "{{doc-apihelp-param|checktoken|token}}",
+ "apihelp-checktoken-param-maxtokenage": "{{doc-apihelp-param|checktoken|maxtokenage}}",
+ "apihelp-checktoken-example-simple": "{{doc-apihelp-example|checktoken}}",
+ "apihelp-clearhasmsg-summary": "{{doc-apihelp-summary|clearhasmsg}}",
+ "apihelp-clearhasmsg-example-1": "{{doc-apihelp-example|clearhasmsg}}",
+ "apihelp-clientlogin-summary": "{{doc-apihelp-summary|clientlogin}}",
+ "apihelp-clientlogin-example-login": "{{doc-apihelp-example|clientlogin}}",
+ "apihelp-clientlogin-example-login2": "{{doc-apihelp-example|clientlogin}}",
+ "apihelp-compare-summary": "{{doc-apihelp-summary|compare}}",
+ "apihelp-compare-extended-description": "{{doc-apihelp-extended-description|compare}}",
+ "apihelp-compare-param-fromtitle": "{{doc-apihelp-param|compare|fromtitle}}",
+ "apihelp-compare-param-fromid": "{{doc-apihelp-param|compare|fromid}}",
+ "apihelp-compare-param-fromrev": "{{doc-apihelp-param|compare|fromrev}}",
+ "apihelp-compare-param-fromtext": "{{doc-apihelp-param|compare|fromtext}}",
+ "apihelp-compare-param-fromsection": "{{doc-apihelp-param|compare|fromsection}}",
+ "apihelp-compare-param-frompst": "{{doc-apihelp-param|compare|frompst}}",
+ "apihelp-compare-param-fromcontentmodel": "{{doc-apihelp-param|compare|fromcontentmodel}}",
+ "apihelp-compare-param-fromcontentformat": "{{doc-apihelp-param|compare|fromcontentformat}}",
+ "apihelp-compare-param-totitle": "{{doc-apihelp-param|compare|totitle}}",
+ "apihelp-compare-param-toid": "{{doc-apihelp-param|compare|toid}}",
+ "apihelp-compare-param-torev": "{{doc-apihelp-param|compare|torev}}",
+ "apihelp-compare-param-torelative": "{{doc-apihelp-param|compare|torelative}}",
+ "apihelp-compare-param-totext": "{{doc-apihelp-param|compare|totext}}",
+ "apihelp-compare-param-tosection": "{{doc-apihelp-param|compare|tosection}}",
+ "apihelp-compare-param-topst": "{{doc-apihelp-param|compare|topst}}",
+ "apihelp-compare-param-tocontentmodel": "{{doc-apihelp-param|compare|tocontentmodel}}",
+ "apihelp-compare-param-tocontentformat": "{{doc-apihelp-param|compare|tocontentformat}}",
+ "apihelp-compare-param-prop": "{{doc-apihelp-param|compare|prop}}",
+ "apihelp-compare-paramvalue-prop-diff": "{{doc-apihelp-paramvalue|compare|prop|diff}}",
+ "apihelp-compare-paramvalue-prop-diffsize": "{{doc-apihelp-paramvalue|compare|prop|diffsize}}",
+ "apihelp-compare-paramvalue-prop-rel": "{{doc-apihelp-paramvalue|compare|prop|rel}}",
+ "apihelp-compare-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|compare|prop|ids}}",
+ "apihelp-compare-paramvalue-prop-title": "{{doc-apihelp-paramvalue|compare|prop|title}}",
+ "apihelp-compare-paramvalue-prop-user": "{{doc-apihelp-paramvalue|compare|prop|user}}",
+ "apihelp-compare-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|compare|prop|comment}}",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|compare|prop|parsedcomment}}",
+ "apihelp-compare-paramvalue-prop-size": "{{doc-apihelp-paramvalue|compare|prop|size}}",
+ "apihelp-compare-example-1": "{{doc-apihelp-example|compare}}",
+ "apihelp-createaccount-summary": "{{doc-apihelp-summary|createaccount}}",
+ "apihelp-createaccount-param-preservestate": "{{doc-apihelp-param|createaccount|preservestate|info=This message is displayed in addition to {{msg-mw|api-help-authmanagerhelper-preservestate}}.}}",
+ "apihelp-createaccount-example-create": "{{doc-apihelp-example|createaccount}}",
+ "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}\n{{Identical|Username}}",
+ "apihelp-createaccount-param-password": "{{doc-apihelp-param|createaccount|password}}",
+ "apihelp-createaccount-param-domain": "{{doc-apihelp-param|createaccount|domain}}",
+ "apihelp-createaccount-param-token": "{{doc-apihelp-param|createaccount|token}}",
+ "apihelp-createaccount-param-email": "{{doc-apihelp-param|createaccount|email}}",
+ "apihelp-createaccount-param-realname": "{{doc-apihelp-param|createaccount|realname}}",
+ "apihelp-createaccount-param-mailpassword": "{{doc-apihelp-param|createaccount|mailpassword}}",
+ "apihelp-createaccount-param-reason": "{{doc-apihelp-param|createaccount|reason}}",
+ "apihelp-createaccount-param-language": "{{doc-apihelp-param|createaccount|language}}",
+ "apihelp-createaccount-example-pass": "{{doc-apihelp-example|createaccount}}",
+ "apihelp-createaccount-example-mail": "{{doc-apihelp-example|createaccount}}",
+ "apihelp-cspreport-summary": "{{doc-apihelp-summary|cspreport}}",
+ "apihelp-cspreport-param-reportonly": "{{doc-apihelp-param|cspreport|reportonly}}",
+ "apihelp-cspreport-param-source": "{{doc-apihelp-param|cspreport|source}}",
+ "apihelp-delete-summary": "{{doc-apihelp-summary|delete}}",
+ "apihelp-delete-param-title": "{{doc-apihelp-param|delete|title}}",
+ "apihelp-delete-param-pageid": "{{doc-apihelp-param|delete|pageid}}",
+ "apihelp-delete-param-reason": "{{doc-apihelp-param|delete|reason}}",
+ "apihelp-delete-param-tags": "{{doc-apihelp-param|delete|tags}}",
+ "apihelp-delete-param-watch": "{{doc-apihelp-param|delete|watch}}",
+ "apihelp-delete-param-watchlist": "{{doc-apihelp-param|delete|watchlist}}",
+ "apihelp-delete-param-unwatch": "{{doc-apihelp-param|delete|unwatch}}",
+ "apihelp-delete-param-oldimage": "{{doc-apihelp-param|delete|oldimage}}",
+ "apihelp-delete-example-simple": "{{doc-apihelp-example|delete}}",
+ "apihelp-delete-example-reason": "{{doc-apihelp-example|delete}}",
+ "apihelp-disabled-summary": "{{doc-apihelp-summary|disabled}}",
+ "apihelp-edit-summary": "{{doc-apihelp-summary|edit}}",
+ "apihelp-edit-param-title": "{{doc-apihelp-param|edit|title}}",
+ "apihelp-edit-param-pageid": "{{doc-apihelp-param|edit|pageid}}",
+ "apihelp-edit-param-section": "{{doc-apihelp-param|edit|section}}",
+ "apihelp-edit-param-sectiontitle": "{{doc-apihelp-param|edit|sectiontitle}}",
+ "apihelp-edit-param-text": "{{doc-apihelp-param|edit|text}}",
+ "apihelp-edit-param-summary": "{{doc-apihelp-param|edit|summary}}",
+ "apihelp-edit-param-tags": "{{doc-apihelp-param|edit|tags}}",
+ "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}\n{{Identical|Minor edit}}",
+ "apihelp-edit-param-notminor": "{{doc-apihelp-param|edit|notminor}}",
+ "apihelp-edit-param-bot": "{{doc-apihelp-param|edit|bot}}",
+ "apihelp-edit-param-basetimestamp": "{{doc-apihelp-param|edit|basetimestamp}}",
+ "apihelp-edit-param-starttimestamp": "{{doc-apihelp-param|edit|starttimestamp}}",
+ "apihelp-edit-param-recreate": "{{doc-apihelp-param|edit|recreate}}",
+ "apihelp-edit-param-createonly": "{{doc-apihelp-param|edit|createonly}}",
+ "apihelp-edit-param-nocreate": "{{doc-apihelp-param|edit|nocreate}}",
+ "apihelp-edit-param-watch": "{{doc-apihelp-param|edit|watch}}",
+ "apihelp-edit-param-unwatch": "{{doc-apihelp-param|edit|unwatch}}",
+ "apihelp-edit-param-watchlist": "{{doc-apihelp-param|edit|watchlist}}",
+ "apihelp-edit-param-md5": "{{doc-apihelp-param|edit|md5}}",
+ "apihelp-edit-param-prependtext": "{{doc-apihelp-param|edit|prependtext}}",
+ "apihelp-edit-param-appendtext": "{{doc-apihelp-param|edit|appendtext}}",
+ "apihelp-edit-param-undo": "{{doc-apihelp-param|edit|undo}}",
+ "apihelp-edit-param-undoafter": "{{doc-apihelp-param|edit|undoafter}}",
+ "apihelp-edit-param-redirect": "{{doc-apihelp-param|edit|redirect}}",
+ "apihelp-edit-param-contentformat": "{{doc-apihelp-param|edit|contentformat}}",
+ "apihelp-edit-param-contentmodel": "{{doc-apihelp-param|edit|contentmodel}}",
+ "apihelp-edit-param-token": "{{doc-apihelp-param|edit|token}}",
+ "apihelp-edit-example-edit": "{{doc-apihelp-example|edit}}",
+ "apihelp-edit-example-prepend": "{{doc-apihelp-example|edit}}",
+ "apihelp-edit-example-undo": "{{doc-apihelp-example|edit}}",
+ "apihelp-emailuser-summary": "{{doc-apihelp-summary|emailuser}}",
+ "apihelp-emailuser-param-target": "{{doc-apihelp-param|emailuser|target}}",
+ "apihelp-emailuser-param-subject": "{{doc-apihelp-param|emailuser|subject}}",
+ "apihelp-emailuser-param-text": "{{doc-apihelp-param|emailuser|text}}",
+ "apihelp-emailuser-param-ccme": "{{doc-apihelp-param|emailuser|ccme}}",
+ "apihelp-emailuser-example-email": "{{doc-apihelp-example|emailuser}}",
+ "apihelp-expandtemplates-summary": "{{doc-apihelp-summary|expandtemplates}}",
+ "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
+ "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
+ "apihelp-expandtemplates-param-revid": "{{doc-apihelp-param|expandtemplates|revid}}",
+ "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop|paramvalues=1}}",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "{{doc-apihelp-paramvalue|expandtemplates|prop|wikitext}}",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "{{doc-apihelp-paramvalue|expandtemplates|prop|categories}}",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "{{doc-apihelp-paramvalue|expandtemplates|prop|properties}}",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "{{doc-apihelp-paramvalue|expandtemplates|prop|volatile}}",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "{{doc-apihelp-paramvalue|expandtemplates|prop|ttl}}",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "{{doc-apihelp-paramvalue|expandtemplates|prop|modules}}",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "{{doc-apihelp-paramvalue|expandtemplates|prop|jsconfigvars}}",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "{{doc-apihelp-paramvalue|expandtemplates|prop|encodedjsconfigvars}}",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|expandtemplates|prop|parsetree}}",
+ "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
+ "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
+ "apihelp-expandtemplates-example-simple": "{{doc-apihelp-example|expandtemplates}}",
+ "apihelp-feedcontributions-summary": "{{doc-apihelp-summary|feedcontributions}}",
+ "apihelp-feedcontributions-param-feedformat": "{{doc-apihelp-param|feedcontributions|feedformat}}",
+ "apihelp-feedcontributions-param-user": "{{doc-apihelp-param|feedcontributions|user}}",
+ "apihelp-feedcontributions-param-namespace": "{{doc-apihelp-param|feedcontributions|namespace}}",
+ "apihelp-feedcontributions-param-year": "{{doc-apihelp-param|feedcontributions|year}}",
+ "apihelp-feedcontributions-param-month": "{{doc-apihelp-param|feedcontributions|month}}",
+ "apihelp-feedcontributions-param-tagfilter": "{{doc-apihelp-param|feedcontributions|tagfilter}}",
+ "apihelp-feedcontributions-param-deletedonly": "{{doc-apihelp-param|feedcontributions|deletedonly}}",
+ "apihelp-feedcontributions-param-toponly": "{{doc-apihelp-param|feedcontributions|toponly}}",
+ "apihelp-feedcontributions-param-newonly": "{{doc-apihelp-param|feedcontributions|newonly}}",
+ "apihelp-feedcontributions-param-hideminor": "{{doc-apihelp-param|feedcontributions|hideminor}}",
+ "apihelp-feedcontributions-param-showsizediff": "{{doc-apihelp-param|feedcontributions|showsizediff}}",
+ "apihelp-feedcontributions-example-simple": "{{doc-apihelp-example|feedcontributions}}",
+ "apihelp-feedrecentchanges-summary": "{{doc-apihelp-summary|feedrecentchanges}}",
+ "apihelp-feedrecentchanges-param-feedformat": "{{doc-apihelp-param|feedrecentchanges|feedformat}}",
+ "apihelp-feedrecentchanges-param-namespace": "{{doc-apihelp-param|feedrecentchanges|namespace}}",
+ "apihelp-feedrecentchanges-param-invert": "{{doc-apihelp-param|feedrecentchanges|invert}}",
+ "apihelp-feedrecentchanges-param-associated": "{{doc-apihelp-param|feedrecentchanges|associated}}",
+ "apihelp-feedrecentchanges-param-days": "{{doc-apihelp-param|feedrecentchanges|days}}",
+ "apihelp-feedrecentchanges-param-limit": "{{doc-apihelp-param|feedrecentchanges|limit}}",
+ "apihelp-feedrecentchanges-param-from": "{{doc-apihelp-param|feedrecentchanges|from}}",
+ "apihelp-feedrecentchanges-param-hideminor": "{{doc-apihelp-param|feedrecentchanges|hideminor}}",
+ "apihelp-feedrecentchanges-param-hidebots": "{{doc-apihelp-param|feedrecentchanges|hidebots}}",
+ "apihelp-feedrecentchanges-param-hideanons": "{{doc-apihelp-param|feedrecentchanges|hideanons}}",
+ "apihelp-feedrecentchanges-param-hideliu": "{{doc-apihelp-param|feedrecentchanges|hideliu}}",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "{{doc-apihelp-param|feedrecentchanges|hidepatrolled}}",
+ "apihelp-feedrecentchanges-param-hidemyself": "{{doc-apihelp-param|feedrecentchanges|hidemyself}}",
+ "apihelp-feedrecentchanges-param-hidecategorization": "{{doc-apihelp-param|feedrecentchanges|hidecategorization}}",
+ "apihelp-feedrecentchanges-param-tagfilter": "{{doc-apihelp-param|feedrecentchanges|tagfilter}}",
+ "apihelp-feedrecentchanges-param-target": "{{doc-apihelp-param|feedrecentchanges|target}}",
+ "apihelp-feedrecentchanges-param-showlinkedto": "{{doc-apihelp-param|feedrecentchanges|showlinkedto}}",
+ "apihelp-feedrecentchanges-example-simple": "{{doc-apihelp-example|feedrecentchanges}}",
+ "apihelp-feedrecentchanges-example-30days": "{{doc-apihelp-example|feedrecentchanges}}",
+ "apihelp-feedwatchlist-summary": "{{doc-apihelp-summary|feedwatchlist}}",
+ "apihelp-feedwatchlist-param-feedformat": "{{doc-apihelp-param|feedwatchlist|feedformat}}",
+ "apihelp-feedwatchlist-param-hours": "{{doc-apihelp-param|feedwatchlist|hours}}",
+ "apihelp-feedwatchlist-param-linktosections": "{{doc-apihelp-param|feedwatchlist|linktosections}}",
+ "apihelp-feedwatchlist-example-default": "{{doc-apihelp-example|feedwatchlist}}",
+ "apihelp-feedwatchlist-example-all6hrs": "{{doc-apihelp-example|feedwatchlist}}",
+ "apihelp-filerevert-summary": "{{doc-apihelp-summary|filerevert}}",
+ "apihelp-filerevert-param-filename": "{{doc-apihelp-param|filerevert|filename}}",
+ "apihelp-filerevert-param-comment": "Translate as \"a comment about the upload\".\n\n{{doc-apihelp-param|filerevert|comment}}",
+ "apihelp-filerevert-param-archivename": "{{doc-apihelp-param|filerevert|archivename}}",
+ "apihelp-filerevert-example-revert": "{{doc-apihelp-example|filerevert}}",
+ "apihelp-help-summary": "{{doc-apihelp-summary|help}}",
+ "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
+ "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
+ "apihelp-help-param-recursivesubmodules": "{{doc-apihelp-param|help|recursivesubmodules}}",
+ "apihelp-help-param-helpformat": "{{doc-apihelp-param|help|helpformat}}",
+ "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
+ "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
+ "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
+ "apihelp-help-example-submodules": "{{doc-apihelp-example|help}}",
+ "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
+ "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
+ "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
+ "apihelp-imagerotate-summary": "{{doc-apihelp-summary|imagerotate}}",
+ "apihelp-imagerotate-param-rotation": "{{doc-apihelp-param|imagerotate|rotation}}",
+ "apihelp-imagerotate-param-tags": "{{doc-apihelp-param|imagerotate|tags}}",
+ "apihelp-imagerotate-example-simple": "{{doc-apihelp-example|imagerotate}}",
+ "apihelp-imagerotate-example-generator": "{{doc-apihelp-example|imagerotate}}",
+ "apihelp-import-summary": "{{doc-apihelp-summary|import}}",
+ "apihelp-import-extended-description": "{{doc-apihelp-extended-description|import}}",
+ "apihelp-import-param-summary": "{{doc-apihelp-param|import|summary|info=The parameter being documented here provides the summary used on the log messages about the import. The phrase \"Import summary\" here is grammatically equivalent to a phrase such as \"science book\", not \"eat food\".}}",
+ "apihelp-import-param-xml": "{{doc-apihelp-param|import|xml}}",
+ "apihelp-import-param-interwikiprefix": "{{doc-apihelp-param|import|interwikiprefix}}",
+ "apihelp-import-param-assignknownusers": "{{doc-apihelp-param|import|assignknownusers}}",
+ "apihelp-import-param-interwikisource": "{{doc-apihelp-param|import|interwikisource}}",
+ "apihelp-import-param-interwikipage": "{{doc-apihelp-param|import|interwikipage}}",
+ "apihelp-import-param-fullhistory": "{{doc-apihelp-param|import|fullhistory}}",
+ "apihelp-import-param-templates": "{{doc-apihelp-param|import|templates}}",
+ "apihelp-import-param-namespace": "{{doc-apihelp-param|import|namespace}}",
+ "apihelp-import-param-rootpage": "{{doc-apihelp-param|import|rootpage}}",
+ "apihelp-import-param-tags": "{{doc-apihelp-param|import|tags}}",
+ "apihelp-import-example-import": "{{doc-apihelp-example|import}}",
+ "apihelp-linkaccount-summary": "{{doc-apihelp-summary|linkaccount}}",
+ "apihelp-linkaccount-example-link": "{{doc-apihelp-example|linkaccount}}",
+ "apihelp-login-summary": "{{doc-apihelp-summary|login}}",
+ "apihelp-login-extended-description": "{{doc-apihelp-extended-description|login|info=This message is used when <code>$wgEnableBotPasswords</code> is true.|seealso=* {{msg-mw|apihelp-login-extended-description-nobotpasswords}}}}",
+ "apihelp-login-extended-description-nobotpasswords": "{{doc-apihelp-extended-description|login|info=This message is used when <code>$wgEnableBotPasswords</code> is false.|seealso=* {{msg-mw|apihelp-login-extended-description}}}}",
+ "apihelp-login-param-name": "{{doc-apihelp-param|login|name}}\n{{Identical|Username}}",
+ "apihelp-login-param-password": "{{doc-apihelp-param|login|password}}\n{{Identical|Password}}",
+ "apihelp-login-param-domain": "{{doc-apihelp-param|login|domain}}",
+ "apihelp-login-param-token": "{{doc-apihelp-param|login|token}}",
+ "apihelp-login-example-gettoken": "{{doc-apihelp-example|login}}",
+ "apihelp-login-example-login": "{{doc-apihelp-example|login}}\n{{Identical|Log in}}",
+ "apihelp-logout-summary": "{{doc-apihelp-summary|logout}}",
+ "apihelp-logout-example-logout": "{{doc-apihelp-example|logout}}",
+ "apihelp-managetags-summary": "{{doc-apihelp-summary|managetags}}",
+ "apihelp-managetags-param-operation": "{{doc-apihelp-param|managetags|operation}}",
+ "apihelp-managetags-param-tag": "{{doc-apihelp-param|managetags|tag}}",
+ "apihelp-managetags-param-reason": "{{doc-apihelp-param|managetags|reason}}",
+ "apihelp-managetags-param-ignorewarnings": "{{doc-apihelp-param|managetags|ignorewarnings}}",
+ "apihelp-managetags-param-tags": "{{doc-apihelp-param|managetags|tags}}",
+ "apihelp-managetags-example-create": "{{doc-apihelp-example|managetags}}",
+ "apihelp-managetags-example-delete": "{{doc-apihelp-example|managetags|info={{doc-important|The text \"vandlaism\" in this message is intentionally misspelled; the example being documented by this message is the deletion of a misspelled tag.}}}}",
+ "apihelp-managetags-example-activate": "{{doc-apihelp-example|managetags}}",
+ "apihelp-managetags-example-deactivate": "{{doc-apihelp-example|managetags}}",
+ "apihelp-mergehistory-summary": "{{doc-apihelp-summary|mergehistory}}",
+ "apihelp-mergehistory-param-from": "{{doc-apihelp-param|mergehistory|from}}",
+ "apihelp-mergehistory-param-fromid": "{{doc-apihelp-param|mergehistory|fromid}}",
+ "apihelp-mergehistory-param-to": "{{doc-apihelp-param|mergehistory|to}}",
+ "apihelp-mergehistory-param-toid": "{{doc-apihelp-param|mergehistory|toid}}",
+ "apihelp-mergehistory-param-timestamp": "{{doc-apihelp-param|mergehistory|timestamp}}",
+ "apihelp-mergehistory-param-reason": "{{doc-apihelp-param|mergehistory|reason}}",
+ "apihelp-mergehistory-example-merge": "{{doc-apihelp-example|mergehistory}}",
+ "apihelp-mergehistory-example-merge-timestamp": "{{doc-apihelp-example|mergehistory}}",
+ "apihelp-move-summary": "{{doc-apihelp-summary|move}}",
+ "apihelp-move-param-from": "{{doc-apihelp-param|move|from}}",
+ "apihelp-move-param-fromid": "{{doc-apihelp-param|move|fromid}}",
+ "apihelp-move-param-to": "{{doc-apihelp-param|move|to}}",
+ "apihelp-move-param-reason": "{{doc-apihelp-param|move|reason}}",
+ "apihelp-move-param-movetalk": "{{doc-apihelp-param|move|movetalk}}",
+ "apihelp-move-param-movesubpages": "{{doc-apihelp-param|move|movesubpages}}",
+ "apihelp-move-param-noredirect": "{{doc-apihelp-param|move|noredirect}}",
+ "apihelp-move-param-watch": "{{doc-apihelp-param|move|watch}}",
+ "apihelp-move-param-unwatch": "{{doc-apihelp-param|move|unwatch}}",
+ "apihelp-move-param-watchlist": "{{doc-apihelp-param|move|watchlist}}",
+ "apihelp-move-param-ignorewarnings": "{{doc-apihelp-param|move|ignorewarnings}}",
+ "apihelp-move-param-tags": "{{doc-apihelp-param|move|tags}}",
+ "apihelp-move-example-move": "{{doc-apihelp-example|move}}",
+ "apihelp-opensearch-summary": "{{doc-apihelp-summary|opensearch}}",
+ "apihelp-opensearch-param-search": "{{doc-apihelp-param|opensearch|search}}",
+ "apihelp-opensearch-param-limit": "{{doc-apihelp-param|opensearch|limit}}",
+ "apihelp-opensearch-param-namespace": "{{doc-apihelp-param|opensearch|namespace}}",
+ "apihelp-opensearch-param-suggest": "{{doc-apihelp-param|opensearch|suggest}}",
+ "apihelp-opensearch-param-redirects": "{{doc-apihelp-param|opensearch|redirects}}",
+ "apihelp-opensearch-param-format": "{{doc-apihelp-param|opensearch|format}}",
+ "apihelp-opensearch-param-warningsaserror": "{{doc-apihelp-param|opensearch|warningsaserror}}",
+ "apihelp-opensearch-example-te": "{{doc-apihelp-example|opensearch}}",
+ "apihelp-options-summary": "{{doc-apihelp-summary|options}}",
+ "apihelp-options-extended-description": "{{doc-apihelp-extended-description|options}}",
+ "apihelp-options-param-reset": "{{doc-apihelp-param|options|reset}}",
+ "apihelp-options-param-resetkinds": "{{doc-apihelp-param|options|resetkinds}}",
+ "apihelp-options-param-change": "{{doc-apihelp-param|options|change}}",
+ "apihelp-options-param-optionname": "{{doc-apihelp-param|options|optionname}}",
+ "apihelp-options-param-optionvalue": "{{doc-apihelp-param|options|optionvalue}}",
+ "apihelp-options-example-reset": "{{doc-apihelp-example|options}}",
+ "apihelp-options-example-change": "{{doc-apihelp-example|options}}",
+ "apihelp-options-example-complex": "{{doc-apihelp-example|options}}",
+ "apihelp-paraminfo-summary": "{{doc-apihelp-summary|paraminfo}}",
+ "apihelp-paraminfo-param-modules": "{{doc-apihelp-param|paraminfo|modules}}",
+ "apihelp-paraminfo-param-helpformat": "{{doc-apihelp-param|paraminfo|helpformat}}",
+ "apihelp-paraminfo-param-querymodules": "{{doc-apihelp-param|paraminfo|querymodules}}",
+ "apihelp-paraminfo-param-mainmodule": "{{doc-apihelp-param|paraminfo|mainmodule}}",
+ "apihelp-paraminfo-param-pagesetmodule": "{{doc-apihelp-param|paraminfo|pagesetmodule}}",
+ "apihelp-paraminfo-param-formatmodules": "{{doc-apihelp-param|paraminfo|formatmodules}}",
+ "apihelp-paraminfo-example-1": "{{doc-apihelp-example|paraminfo}}",
+ "apihelp-paraminfo-example-2": "{{doc-apihelp-example|paraminfo}}",
+ "apihelp-parse-summary": "{{doc-apihelp-summary|parse}}",
+ "apihelp-parse-extended-description": "{{doc-apihelp-extended-description|parse}}",
+ "apihelp-parse-param-title": "{{doc-apihelp-param|parse|title}}",
+ "apihelp-parse-param-text": "{{doc-apihelp-param|parse|text}}",
+ "apihelp-parse-param-revid": "{{doc-apihelp-param|parse|revid}}",
+ "apihelp-parse-param-summary": "{{doc-apihelp-param|parse|summary}}",
+ "apihelp-parse-param-page": "{{doc-apihelp-param|parse|page}}",
+ "apihelp-parse-param-pageid": "{{doc-apihelp-param|parse|pageid}}",
+ "apihelp-parse-param-redirects": "{{doc-apihelp-param|parse|redirects}}",
+ "apihelp-parse-param-oldid": "{{doc-apihelp-param|parse|oldid}}",
+ "apihelp-parse-param-prop": "{{doc-apihelp-param|parse|prop|paramvalues=1}}",
+ "apihelp-parse-paramvalue-prop-text": "{{doc-apihelp-paramvalue|parse|prop|text}}",
+ "apihelp-parse-paramvalue-prop-langlinks": "{{doc-apihelp-paramvalue|parse|prop|langlinks}}",
+ "apihelp-parse-paramvalue-prop-categories": "{{doc-apihelp-paramvalue|parse|prop|categories}}",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "{{doc-apihelp-paramvalue|parse|prop|categorieshtml}}",
+ "apihelp-parse-paramvalue-prop-links": "{{doc-apihelp-paramvalue|parse|prop|links}}",
+ "apihelp-parse-paramvalue-prop-templates": "{{doc-apihelp-paramvalue|parse|prop|templates}}",
+ "apihelp-parse-paramvalue-prop-images": "{{doc-apihelp-paramvalue|parse|prop|images}}",
+ "apihelp-parse-paramvalue-prop-externallinks": "{{doc-apihelp-paramvalue|parse|prop|externallinks}}",
+ "apihelp-parse-paramvalue-prop-sections": "{{doc-apihelp-paramvalue|parse|prop|sections}}",
+ "apihelp-parse-paramvalue-prop-revid": "{{doc-apihelp-paramvalue|parse|prop|revid}}",
+ "apihelp-parse-paramvalue-prop-displaytitle": "{{doc-apihelp-paramvalue|parse|prop|displaytitle}}",
+ "apihelp-parse-paramvalue-prop-headitems": "{{doc-apihelp-paramvalue|parse|prop|headitems}}",
+ "apihelp-parse-paramvalue-prop-headhtml": "{{doc-apihelp-paramvalue|parse|prop|headhtml}}",
+ "apihelp-parse-paramvalue-prop-modules": "{{doc-apihelp-paramvalue|parse|prop|modules}}",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "{{doc-apihelp-paramvalue|parse|prop|jsconfigvars}}",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "{{doc-apihelp-paramvalue|parse|prop|encodedjsconfigvars}}",
+ "apihelp-parse-paramvalue-prop-indicators": "{{doc-apihelp-paramvalue|parse|prop|indicators}}",
+ "apihelp-parse-paramvalue-prop-iwlinks": "{{doc-apihelp-paramvalue|parse|prop|iwlinks}}",
+ "apihelp-parse-paramvalue-prop-wikitext": "{{doc-apihelp-paramvalue|parse|prop|wikitext}}",
+ "apihelp-parse-paramvalue-prop-properties": "{{doc-apihelp-paramvalue|parse|prop|properties}}",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "{{doc-apihelp-paramvalue|parse|prop|limitreportdata}}",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "{{doc-apihelp-paramvalue|parse|prop|limitreporthtml}}",
+ "apihelp-parse-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|parse|prop|parsetree|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "{{doc-apihelp-paramvalue|parse|prop|parsewarnings}}",
+ "apihelp-parse-param-wrapoutputclass": "{{doc-apihelp-param|parse|wrapoutputclass}}",
+ "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
+ "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
+ "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
+ "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
+ "apihelp-parse-param-sectiontitle": "{{doc-apihelp-param|parse|sectiontitle}}",
+ "apihelp-parse-param-disablelimitreport": "{{doc-apihelp-param|parse|disablelimitreport}}",
+ "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}",
+ "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}",
+ "apihelp-parse-param-disabletidy": "{{doc-apihelp-param|parse|disabletidy}}",
+ "apihelp-parse-param-disablestylededuplication": "{{doc-apihelp-param|parse|disablestylededuplication}}",
+ "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+ "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
+ "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
+ "apihelp-parse-param-disabletoc": "{{doc-apihelp-param|parse|disabletoc}}",
+ "apihelp-parse-param-useskin": "{{doc-apihelp-param|parse|useskin}}",
+ "apihelp-parse-param-contentformat": "{{doc-apihelp-param|parse|contentformat}}",
+ "apihelp-parse-param-contentmodel": "{{doc-apihelp-param|parse|contentmodel}}",
+ "apihelp-parse-example-page": "{{doc-apihelp-example|parse}}",
+ "apihelp-parse-example-text": "{{doc-apihelp-example|parse}}",
+ "apihelp-parse-example-texttitle": "{{doc-apihelp-example|parse}}",
+ "apihelp-parse-example-summary": "{{doc-apihelp-example|parse}}",
+ "apihelp-patrol-summary": "{{doc-apihelp-summary|patrol}}",
+ "apihelp-patrol-param-rcid": "{{doc-apihelp-param|patrol|rcid}}",
+ "apihelp-patrol-param-revid": "{{doc-apihelp-param|patrol|revid}}",
+ "apihelp-patrol-param-tags": "{{doc-apihelp-param|patrol|tags}}",
+ "apihelp-patrol-example-rcid": "{{doc-apihelp-example|patrol}}",
+ "apihelp-patrol-example-revid": "{{doc-apihelp-example|patrol}}",
+ "apihelp-protect-summary": "{{doc-apihelp-summary|protect}}",
+ "apihelp-protect-param-title": "{{doc-apihelp-param|protect|title}}",
+ "apihelp-protect-param-pageid": "{{doc-apihelp-param|protect|pageid}}",
+ "apihelp-protect-param-protections": "{{doc-apihelp-param|protect|protections}}",
+ "apihelp-protect-param-expiry": "{{doc-apihelp-param|protect|expiry}}",
+ "apihelp-protect-param-reason": "{{doc-apihelp-param|protect|reason}}",
+ "apihelp-protect-param-tags": "{{doc-apihelp-param|protect|tags}}",
+ "apihelp-protect-param-cascade": "{{doc-apihelp-param|protect|cascade}}",
+ "apihelp-protect-param-watch": "{{doc-apihelp-param|protect|watch}}",
+ "apihelp-protect-param-watchlist": "{{doc-apihelp-param|protect|watchlist}}",
+ "apihelp-protect-example-protect": "{{doc-apihelp-example|protect}}",
+ "apihelp-protect-example-unprotect": "{{doc-apihelp-example|protect}}",
+ "apihelp-protect-example-unprotect2": "{{doc-apihelp-example|protect}}",
+ "apihelp-purge-summary": "{{doc-apihelp-summary|purge}}",
+ "apihelp-purge-param-forcelinkupdate": "{{doc-apihelp-param|purge|forcelinkupdate}}",
+ "apihelp-purge-param-forcerecursivelinkupdate": "{{doc-apihelp-param|purge|forcerecursivelinkupdate}}",
+ "apihelp-purge-example-simple": "{{doc-apihelp-example|purge}}",
+ "apihelp-purge-example-generator": "{{doc-apihelp-example|purge}}",
+ "apihelp-query-summary": "{{doc-apihelp-summary|query}}",
+ "apihelp-query-extended-description": "{{doc-apihelp-extended-description|query}}",
+ "apihelp-query-param-prop": "{{doc-apihelp-param|query|prop}}",
+ "apihelp-query-param-list": "{{doc-apihelp-param|query|list}}",
+ "apihelp-query-param-meta": "{{doc-apihelp-param|query|meta}}",
+ "apihelp-query-param-indexpageids": "{{doc-apihelp-param|query|indexpageids}}",
+ "apihelp-query-param-export": "{{doc-apihelp-param|query|export}}",
+ "apihelp-query-param-exportnowrap": "{{doc-apihelp-param|query|exportnowrap}}",
+ "apihelp-query-param-iwurl": "{{doc-apihelp-param|query|iwurl}}",
+ "apihelp-query-param-rawcontinue": "{{doc-apihelp-param|query|rawcontinue}}",
+ "apihelp-query-example-revisions": "{{doc-apihelp-example|query}}",
+ "apihelp-query-example-allpages": "{{doc-apihelp-example|query}}",
+ "apihelp-query+allcategories-summary": "{{doc-apihelp-summary|query+allcategories}}",
+ "apihelp-query+allcategories-param-from": "{{doc-apihelp-param|query+allcategories|from}}",
+ "apihelp-query+allcategories-param-to": "{{doc-apihelp-param|query+allcategories|to}}",
+ "apihelp-query+allcategories-param-prefix": "{{doc-apihelp-param|query+allcategories|prefix}}",
+ "apihelp-query+allcategories-param-dir": "{{doc-apihelp-param|query+allcategories|dir}}",
+ "apihelp-query+allcategories-param-min": "{{doc-apihelp-param|query+allcategories|min}}",
+ "apihelp-query+allcategories-param-max": "{{doc-apihelp-param|query+allcategories|max}}",
+ "apihelp-query+allcategories-param-limit": "{{doc-apihelp-param|query+allcategories|limit}}",
+ "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop|paramvalues=1}}",
+ "apihelp-query+allcategories-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+allcategories|prop|size}}",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "{{doc-apihelp-paramvalue|query+allcategories|prop|hidden}}",
+ "apihelp-query+allcategories-example-size": "{{doc-apihelp-example|query+allcategories}}",
+ "apihelp-query+allcategories-example-generator": "{{doc-apihelp-example|query+allcategories}}",
+ "apihelp-query+alldeletedrevisions-summary": "{{doc-apihelp-summary|query+alldeletedrevisions}}",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "{{doc-apihelp-paraminfo|query+alldeletedrevisions|useronly}}",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "{{doc-apihelp-paraminfo|query+alldeletedrevisions|nonuseronly}}",
+ "apihelp-query+alldeletedrevisions-param-start": "{{doc-apihelp-param|query+alldeletedrevisions|start}}",
+ "apihelp-query+alldeletedrevisions-param-end": "{{doc-apihelp-param|query+alldeletedrevisions|end}}",
+ "apihelp-query+alldeletedrevisions-param-from": "{{doc-apihelp-param|query+alldeletedrevisions|from}}",
+ "apihelp-query+alldeletedrevisions-param-to": "{{doc-apihelp-param|query+alldeletedrevisions|to}}",
+ "apihelp-query+alldeletedrevisions-param-prefix": "{{doc-apihelp-param|query+alldeletedrevisions|prefix}}",
+ "apihelp-query+alldeletedrevisions-param-tag": "{{doc-apihelp-param|query+alldeletedrevisions|tag}}",
+ "apihelp-query+alldeletedrevisions-param-user": "{{doc-apihelp-param|query+alldeletedrevisions|user}}",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "{{doc-apihelp-param|query+alldeletedrevisions|excludeuser}}",
+ "apihelp-query+alldeletedrevisions-param-namespace": "{{doc-apihelp-param|query+alldeletedrevisions|namespace}}",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "{{doc-apihelp-param|query+alldeletedrevisions|miser-user-namespace}}",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "{{doc-apihelp-param|query+alldeletedrevisions|generatetitles}}",
+ "apihelp-query+alldeletedrevisions-example-user": "{{doc-apihelp-example|query+alldeletedrevisions}}",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "{{doc-apihelp-example|query+alldeletedrevisions}}",
+ "apihelp-query+allfileusages-summary": "{{doc-apihelp-summary|query+allfileusages}}",
+ "apihelp-query+allfileusages-param-from": "{{doc-apihelp-param|query+allfileusages|from}}",
+ "apihelp-query+allfileusages-param-to": "{{doc-apihelp-param|query+allfileusages|to}}",
+ "apihelp-query+allfileusages-param-prefix": "{{doc-apihelp-param|query+allfileusages|prefix}}",
+ "apihelp-query+allfileusages-param-unique": "{{doc-apihelp-param|query+allfileusages|unique}}",
+ "apihelp-query+allfileusages-param-prop": "{{doc-apihelp-param|query+allfileusages|prop|paramvalues=1}}",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+allfileusages|prop|ids}}",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+allfileusages|prop|title}}",
+ "apihelp-query+allfileusages-param-limit": "{{doc-apihelp-param|query+allfileusages|limit}}",
+ "apihelp-query+allfileusages-param-dir": "{{doc-apihelp-param|query+allfileusages|dir}}",
+ "apihelp-query+allfileusages-example-B": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allfileusages-example-unique": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allfileusages-example-unique-generator": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allfileusages-example-generator": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allimages-summary": "{{doc-apihelp-summary|query+allimages}}",
+ "apihelp-query+allimages-param-sort": "{{doc-apihelp-param|query+allimages|sort}}",
+ "apihelp-query+allimages-param-dir": "{{doc-apihelp-param|query+allimages|dir}}",
+ "apihelp-query+allimages-param-from": "{{doc-apihelp-param|query+allimages|from}}",
+ "apihelp-query+allimages-param-to": "{{doc-apihelp-param|query+allimages|to}}",
+ "apihelp-query+allimages-param-start": "{{doc-apihelp-param|query+allimages|start}}",
+ "apihelp-query+allimages-param-end": "{{doc-apihelp-param|query+allimages|end}}",
+ "apihelp-query+allimages-param-prefix": "{{doc-apihelp-param|query+allimages|prefix}}",
+ "apihelp-query+allimages-param-minsize": "{{doc-apihelp-param|query+allimages|minsize}}",
+ "apihelp-query+allimages-param-maxsize": "{{doc-apihelp-param|query+allimages|maxsize}}",
+ "apihelp-query+allimages-param-sha1": "{{doc-apihelp-param|query+allimages|sha1}}",
+ "apihelp-query+allimages-param-sha1base36": "{{doc-apihelp-param|query+allimages|sha1base36}}",
+ "apihelp-query+allimages-param-user": "{{doc-apihelp-param|query+allimages|user}}",
+ "apihelp-query+allimages-param-filterbots": "{{doc-apihelp-param|query+allimages|filterbots}}",
+ "apihelp-query+allimages-param-mime": "{{doc-apihelp-param|query+allimages|mime}}",
+ "apihelp-query+allimages-param-limit": "{{doc-apihelp-param|query+allimages|limit}}",
+ "apihelp-query+allimages-example-B": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+allimages-example-recent": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+allimages-example-mimetypes": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+allimages-example-generator": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+alllinks-summary": "{{doc-apihelp-summary|query+alllinks}}",
+ "apihelp-query+alllinks-param-from": "{{doc-apihelp-param|query+alllinks|from}}",
+ "apihelp-query+alllinks-param-to": "{{doc-apihelp-param|query+alllinks|to}}",
+ "apihelp-query+alllinks-param-prefix": "{{doc-apihelp-param|query+alllinks|prefix}}",
+ "apihelp-query+alllinks-param-unique": "{{doc-apihelp-param|query+alllinks|unique}}",
+ "apihelp-query+alllinks-param-prop": "{{doc-apihelp-param|query+alllinks|prop|paramvalues=1}}",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+alllinks|prop|ids}}",
+ "apihelp-query+alllinks-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+alllinks|prop|title}}",
+ "apihelp-query+alllinks-param-namespace": "{{doc-apihelp-param|query+alllinks|namespace}}",
+ "apihelp-query+alllinks-param-limit": "{{doc-apihelp-param|query+alllinks|limit}}",
+ "apihelp-query+alllinks-param-dir": "{{doc-apihelp-param|query+alllinks|dir}}",
+ "apihelp-query+alllinks-example-B": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+alllinks-example-unique": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+alllinks-example-unique-generator": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+alllinks-example-generator": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+allmessages-summary": "{{doc-apihelp-summary|query+allmessages}}",
+ "apihelp-query+allmessages-param-messages": "{{doc-apihelp-param|query+allmessages|messages}}",
+ "apihelp-query+allmessages-param-prop": "{{doc-apihelp-param|query+allmessages|prop}}",
+ "apihelp-query+allmessages-param-enableparser": "{{doc-apihelp-param|query+allmessages|enableparser}}",
+ "apihelp-query+allmessages-param-nocontent": "{{doc-apihelp-param|query+allmessages|nocontent}}",
+ "apihelp-query+allmessages-param-includelocal": "{{doc-apihelp-param|query+allmessages|includelocal}}",
+ "apihelp-query+allmessages-param-args": "{{doc-apihelp-param|query+allmessages|args}}",
+ "apihelp-query+allmessages-param-filter": "{{doc-apihelp-param|query+allmessages|filter}}",
+ "apihelp-query+allmessages-param-customised": "\"Customisation state\" means the choice made by the user to only list locally customised system messages or not.\n----\n{{doc-apihelp-param|query+allmessages|customised}}",
+ "apihelp-query+allmessages-param-lang": "{{doc-apihelp-param|query+allmessages|lang}}",
+ "apihelp-query+allmessages-param-from": "{{doc-apihelp-param|query+allmessages|from}}",
+ "apihelp-query+allmessages-param-to": "{{doc-apihelp-param|query+allmessages|to}}",
+ "apihelp-query+allmessages-param-title": "{{doc-apihelp-param|query+allmessages|title}}",
+ "apihelp-query+allmessages-param-prefix": "{{doc-apihelp-param|query+allmessages|prefix}}",
+ "apihelp-query+allmessages-example-ipb": "{{doc-apihelp-example|query+allmessages}}",
+ "apihelp-query+allmessages-example-de": "{{doc-apihelp-example|query+allmessages}}",
+ "apihelp-query+allpages-summary": "{{doc-apihelp-summary|query+allpages}}",
+ "apihelp-query+allpages-param-from": "{{doc-apihelp-param|query+allpages|from}}",
+ "apihelp-query+allpages-param-to": "{{doc-apihelp-param|query+allpages|to}}",
+ "apihelp-query+allpages-param-prefix": "{{doc-apihelp-param|query+allpages|prefix}}",
+ "apihelp-query+allpages-param-namespace": "{{doc-apihelp-param|query+allpages|namespace}}",
+ "apihelp-query+allpages-param-filterredir": "{{doc-apihelp-param|query+allpages|filterredir}}",
+ "apihelp-query+allpages-param-minsize": "{{doc-apihelp-param|query+allpages|minsize}}",
+ "apihelp-query+allpages-param-maxsize": "{{doc-apihelp-param|query+allpages|maxsize}}",
+ "apihelp-query+allpages-param-prtype": "{{doc-apihelp-param|query+allpages|prtype}}",
+ "apihelp-query+allpages-param-prlevel": "{{doc-apihelp-param|query+allpages|prlevel}}",
+ "apihelp-query+allpages-param-prfiltercascade": "{{doc-apihelp-param|query+allpages|prfiltercascade}}",
+ "apihelp-query+allpages-param-limit": "{{doc-apihelp-param|query+allpages|limit}}",
+ "apihelp-query+allpages-param-dir": "{{doc-apihelp-param|query+allpages|dir}}",
+ "apihelp-query+allpages-param-filterlanglinks": "{{doc-apihelp-param|query+allpages|filterlanglinks}}",
+ "apihelp-query+allpages-param-prexpiry": "{{doc-apihelp-param|query+allpages|prexpiry}}",
+ "apihelp-query+allpages-example-B": "{{doc-apihelp-example|query+allpages}}",
+ "apihelp-query+allpages-example-generator": "{{doc-apihelp-example|query+allpages}}",
+ "apihelp-query+allpages-example-generator-revisions": "{{doc-apihelp-example|query+allpages}}",
+ "apihelp-query+allredirects-summary": "{{doc-apihelp-summary|query+allredirects}}",
+ "apihelp-query+allredirects-param-from": "{{doc-apihelp-param|query+allredirects|from}}",
+ "apihelp-query+allredirects-param-to": "{{doc-apihelp-param|query+allredirects|to}}",
+ "apihelp-query+allredirects-param-prefix": "{{doc-apihelp-param|query+allredirects|prefix}}",
+ "apihelp-query+allredirects-param-unique": "{{doc-apihelp-param|query+allredirects|unique}}",
+ "apihelp-query+allredirects-param-prop": "{{doc-apihelp-param|query+allredirects|prop|paramvalues=1}}",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+allredirects|prop|ids}}",
+ "apihelp-query+allredirects-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+allredirects|prop|title}}",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "{{doc-apihelp-paramvalue|query+allredirects|prop|fragment}}",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "{{doc-apihelp-paramvalue|query+allredirects|prop|interwiki}}",
+ "apihelp-query+allredirects-param-namespace": "{{doc-apihelp-param|query+allredirects|namespace}}",
+ "apihelp-query+allredirects-param-limit": "{{doc-apihelp-param|query+allredirects|limit}}",
+ "apihelp-query+allredirects-param-dir": "{{doc-apihelp-param|query+allredirects|dir}}",
+ "apihelp-query+allredirects-example-B": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+allredirects-example-unique": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+allredirects-example-unique-generator": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+allredirects-example-generator": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+allrevisions-summary": "{{doc-apihelp-summary|query+allrevisions}}",
+ "apihelp-query+allrevisions-param-start": "{{doc-apihelp-param|query+allrevisions|start}}",
+ "apihelp-query+allrevisions-param-end": "{{doc-apihelp-param|query+allrevisions|end}}",
+ "apihelp-query+allrevisions-param-user": "{{doc-apihelp-param|query+allrevisions|user}}",
+ "apihelp-query+allrevisions-param-excludeuser": "{{doc-apihelp-param|query+allrevisions|excludeuser}}",
+ "apihelp-query+allrevisions-param-namespace": "{{doc-apihelp-param|query+allrevisions|namespace}}",
+ "apihelp-query+allrevisions-param-generatetitles": "{{doc-apihelp-param|query+allrevisions|generatetitles}}",
+ "apihelp-query+allrevisions-example-user": "{{doc-apihelp-example|query+allrevisions}}",
+ "apihelp-query+allrevisions-example-ns-main": "{{doc-apihelp-example|query+allrevisions}}",
+ "apihelp-query+mystashedfiles-summary": "{{doc-apihelp-summary|query+mystashedfiles}}",
+ "apihelp-query+mystashedfiles-param-prop": "{{doc-apihelp-param|query+mystashedfiles|prop|paramvalues=1}}",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+mystashedfiles|prop|size}}",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "{{doc-apihelp-paramvalue|query+mystashedfiles|prop|type}}",
+ "apihelp-query+mystashedfiles-param-limit": "{{doc-apihelp-param|query+mystashedfiles|limit}}",
+ "apihelp-query+mystashedfiles-example-simple": "{{doc-apihelp-example|query+mystashedfiles}}",
+ "apihelp-query+alltransclusions-summary": "{{doc-apihelp-summary|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-param-from": "{{doc-apihelp-param|query+alltransclusions|from}}",
+ "apihelp-query+alltransclusions-param-to": "{{doc-apihelp-param|query+alltransclusions|to}}",
+ "apihelp-query+alltransclusions-param-prefix": "{{doc-apihelp-param|query+alltransclusions|prefix}}",
+ "apihelp-query+alltransclusions-param-unique": "{{doc-apihelp-param|query+alltransclusions|unique}}",
+ "apihelp-query+alltransclusions-param-prop": "{{doc-apihelp-param|query+alltransclusions|prop|paramvalues=1}}",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+alltransclusions|prop|ids}}",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+alltransclusions|prop|title}}",
+ "apihelp-query+alltransclusions-param-namespace": "{{doc-apihelp-param|query+alltransclusions|namespace}}",
+ "apihelp-query+alltransclusions-param-limit": "{{doc-apihelp-param|query+alltransclusions|limit}}",
+ "apihelp-query+alltransclusions-param-dir": "{{doc-apihelp-param|query+alltransclusions|dir}}",
+ "apihelp-query+alltransclusions-example-B": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-example-unique": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-example-unique-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-example-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+allusers-summary": "{{doc-apihelp-summary|query+allusers}}",
+ "apihelp-query+allusers-param-from": "{{doc-apihelp-param|query+allusers|from}}",
+ "apihelp-query+allusers-param-to": "{{doc-apihelp-param|query+allusers|to}}",
+ "apihelp-query+allusers-param-prefix": "{{doc-apihelp-param|query+allusers|prefix}}",
+ "apihelp-query+allusers-param-dir": "{{doc-apihelp-param|query+allusers|dir}}",
+ "apihelp-query+allusers-param-group": "{{doc-apihelp-param|query+allusers|group}}",
+ "apihelp-query+allusers-param-excludegroup": "{{doc-apihelp-param|query+allusers|excludegroup}}",
+ "apihelp-query+allusers-param-rights": "{{doc-apihelp-param|query+allusers|rights}}",
+ "apihelp-query+allusers-param-prop": "{{doc-apihelp-param|query+allusers|prop|paramvalues=1}}",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+allusers|prop|blockinfo}}",
+ "apihelp-query+allusers-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+allusers|prop|groups}}",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+allusers|prop|implicitgroups}}",
+ "apihelp-query+allusers-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+allusers|prop|rights}}",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+allusers|prop|editcount}}",
+ "apihelp-query+allusers-paramvalue-prop-registration": "{{doc-apihelp-paramvalue|query+allusers|prop|registration}}",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "{{doc-apihelp-paramvalue|query+allusers|prop|centralids}}",
+ "apihelp-query+allusers-param-limit": "{{doc-apihelp-param|query+allusers|limit}}",
+ "apihelp-query+allusers-param-witheditsonly": "{{doc-apihelp-param|query+allusers|witheditsonly}}",
+ "apihelp-query+allusers-param-activeusers": "{{doc-apihelp-param|query+allusers|activeusers|params=* $1 - Value of [[mw:Manual:$wgActiveUserDays]]|paramstart=2}}",
+ "apihelp-query+allusers-param-attachedwiki": "{{doc-apihelp-param|query+allusers|attachedwiki}}",
+ "apihelp-query+allusers-example-Y": "{{doc-apihelp-example|query+allusers}}",
+ "apihelp-query+authmanagerinfo-summary": "{{doc-apihelp-summary|query+authmanagerinfo}}",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "{{doc-apihelp-param|query+authmanagerinfo|securitysensitiveoperation}}",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "{{doc-apihelp-param|query+authmanagerinfo|requestsfor}}",
+ "apihelp-query+authmanagerinfo-example-login": "{{doc-apihelp-example|query+authmanagerinfo}}",
+ "apihelp-query+authmanagerinfo-example-login-merged": "{{doc-apihelp-example|query+authmanagerinfo}}",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "{{doc-apihelp-example|query+authmanagerinfo}}",
+ "apihelp-query+backlinks-summary": "{{doc-apihelp-summary|query+backlinks}}",
+ "apihelp-query+backlinks-param-title": "{{doc-apihelp-param|query+backlinks|title}}",
+ "apihelp-query+backlinks-param-pageid": "{{doc-apihelp-param|query+backlinks|pageid}}",
+ "apihelp-query+backlinks-param-namespace": "{{doc-apihelp-param|query+backlinks|namespace}}",
+ "apihelp-query+backlinks-param-dir": "{{doc-apihelp-param|query+backlinks|dir}}",
+ "apihelp-query+backlinks-param-filterredir": "{{doc-apihelp-param|query+backlinks|filterredir}}",
+ "apihelp-query+backlinks-param-limit": "{{doc-apihelp-param|query+backlinks|limit}}",
+ "apihelp-query+backlinks-param-redirect": "\"Is halved\" means that the limits are half of the usual ones.\n----\n{{doc-apihelp-param|query+backlinks|redirect}}",
+ "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
+ "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
+ "apihelp-query+blocks-summary": "{{doc-apihelp-summary|query+blocks}}",
+ "apihelp-query+blocks-param-start": "{{doc-apihelp-param|query+blocks|start}}",
+ "apihelp-query+blocks-param-end": "{{doc-apihelp-param|query+blocks|end}}",
+ "apihelp-query+blocks-param-ids": "{{doc-apihelp-param|query+blocks|ids}}",
+ "apihelp-query+blocks-param-users": "{{doc-apihelp-param|query+blocks|users}}",
+ "apihelp-query+blocks-param-ip": "{{doc-apihelp-param|query+blocks|ip|params=* $1 - Minimum CIDR prefix for IPv4\n* $2 - Minimum CIDR prefix for IPv6|paramstart=3}}",
+ "apihelp-query+blocks-param-limit": "{{doc-apihelp-param|query+blocks|limit}}",
+ "apihelp-query+blocks-param-prop": "{{doc-apihelp-param|query+blocks|prop|paramvalues=1}}",
+ "apihelp-query+blocks-paramvalue-prop-id": "{{doc-apihelp-paramvalue|query+blocks|prop|id}}",
+ "apihelp-query+blocks-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+blocks|prop|user}}",
+ "apihelp-query+blocks-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+blocks|prop|userid}}",
+ "apihelp-query+blocks-paramvalue-prop-by": "{{doc-apihelp-paramvalue|query+blocks|prop|by}}",
+ "apihelp-query+blocks-paramvalue-prop-byid": "{{doc-apihelp-paramvalue|query+blocks|prop|byid}}",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+blocks|prop|timestamp}}",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "{{doc-apihelp-paramvalue|query+blocks|prop|expiry}}",
+ "apihelp-query+blocks-paramvalue-prop-reason": "{{doc-apihelp-paramvalue|query+blocks|prop|reason}}",
+ "apihelp-query+blocks-paramvalue-prop-range": "{{doc-apihelp-paramvalue|query+blocks|prop|range}}",
+ "apihelp-query+blocks-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+blocks|prop|flags}}",
+ "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
+ "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
+ "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
+ "apihelp-query+categories-summary": "{{doc-apihelp-summary|query+categories}}",
+ "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop|paramvalues=1}}",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "{{doc-apihelp-paramvalue|query+categories|prop|sortkey}}",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+categories|prop|timestamp}}",
+ "apihelp-query+categories-paramvalue-prop-hidden": "{{doc-apihelp-paramvalue|query+categories|prop|hidden}}",
+ "apihelp-query+categories-param-show": "{{doc-apihelp-param|query+categories|show}}",
+ "apihelp-query+categories-param-limit": "{{doc-apihelp-param|query+categories|limit}}",
+ "apihelp-query+categories-param-categories": "{{doc-apihelp-param|query+categories|categories}}",
+ "apihelp-query+categories-param-dir": "{{doc-apihelp-param|query+categories|dir}}",
+ "apihelp-query+categories-example-simple": "{{doc-apihelp-example|query+categories}}",
+ "apihelp-query+categories-example-generator": "{{doc-apihelp-example|query+categories}}",
+ "apihelp-query+categoryinfo-summary": "{{doc-apihelp-summary|query+categoryinfo}}",
+ "apihelp-query+categoryinfo-example-simple": "{{doc-apihelp-example|query+categoryinfo}}",
+ "apihelp-query+categorymembers-summary": "{{doc-apihelp-summary|query+categorymembers}}",
+ "apihelp-query+categorymembers-param-title": "{{doc-apihelp-param|query+categorymembers|title}}",
+ "apihelp-query+categorymembers-param-pageid": "{{doc-apihelp-param|query+categorymembers|pageid}}",
+ "apihelp-query+categorymembers-param-prop": "{{doc-apihelp-param|query+categorymembers|prop|paramvalues=1}}",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+categorymembers|prop|ids}}",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+categorymembers|prop|title}}",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "{{doc-apihelp-paramvalue|query+categorymembers|prop|sortkey}}",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "{{doc-apihelp-paramvalue|query+categorymembers|prop|sortkeyprefix}}",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "{{doc-apihelp-paramvalue|query+categorymembers|prop|type}}",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+categorymembers|prop|timestamp}}",
+ "apihelp-query+categorymembers-param-namespace": "{{doc-apihelp-param|query+categorymembers|namespace}}",
+ "apihelp-query+categorymembers-param-type": "{{doc-apihelp-param|query+categorymembers|type}}",
+ "apihelp-query+categorymembers-param-limit": "{{doc-apihelp-param|query+categorymembers|limit}}",
+ "apihelp-query+categorymembers-param-sort": "{{doc-apihelp-param|query+categorymembers|sort}}",
+ "apihelp-query+categorymembers-param-dir": "{{doc-apihelp-param|query+categorymembers|dir}}",
+ "apihelp-query+categorymembers-param-start": "{{doc-apihelp-param|query+categorymembers|start}}",
+ "apihelp-query+categorymembers-param-end": "{{doc-apihelp-param|query+categorymembers|end}}",
+ "apihelp-query+categorymembers-param-starthexsortkey": "{{doc-apihelp-param|query+categorymembers|starthexsortkey}}",
+ "apihelp-query+categorymembers-param-endhexsortkey": "{{doc-apihelp-param|query+categorymembers|endhexsortkey}}",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|startsortkeyprefix}}",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|endsortkeyprefix}}",
+ "apihelp-query+categorymembers-param-startsortkey": "{{doc-apihelp-param|query+categorymembers|startsortkey}}",
+ "apihelp-query+categorymembers-param-endsortkey": "{{doc-apihelp-param|query+categorymembers|endsortkey}}",
+ "apihelp-query+categorymembers-example-simple": "{{doc-apihelp-example|query+categorymembers}}",
+ "apihelp-query+categorymembers-example-generator": "{{doc-apihelp-example|query+categorymembers}}",
+ "apihelp-query+contributors-summary": "{{doc-apihelp-summary|query+contributors}}",
+ "apihelp-query+contributors-param-group": "{{doc-apihelp-param|query+contributors|group}}",
+ "apihelp-query+contributors-param-excludegroup": "{{doc-apihelp-param|query+contributors|excludegroup}}",
+ "apihelp-query+contributors-param-rights": "{{doc-apihelp-param|query+contributors|rights}}",
+ "apihelp-query+contributors-param-excluderights": "{{doc-apihelp-param|query+contributors|excluderights}}",
+ "apihelp-query+contributors-param-limit": "{{doc-apihelp-param|query+contributors|limit}}",
+ "apihelp-query+contributors-example-simple": "{{doc-apihelp-example|query+contributors}}",
+ "apihelp-query+deletedrevisions-summary": "{{doc-apihelp-summary|query+deletedrevisions}}",
+ "apihelp-query+deletedrevisions-extended-description": "{{doc-apihelp-extended-description|query+deletedrevisions}}",
+ "apihelp-query+deletedrevisions-param-start": "{{doc-apihelp-param|query+deletedrevisions|start}}",
+ "apihelp-query+deletedrevisions-param-end": "{{doc-apihelp-param|query+deletedrevisions|end}}",
+ "apihelp-query+deletedrevisions-param-tag": "{{doc-apihelp-param|query+deletedrevisions|tag}}",
+ "apihelp-query+deletedrevisions-param-user": "{{doc-apihelp-param|query+deletedrevisions|user}}",
+ "apihelp-query+deletedrevisions-param-excludeuser": "{{doc-apihelp-param|query+deletedrevisions|excludeuser}}",
+ "apihelp-query+deletedrevisions-example-titles": "{{doc-apihelp-example|query+deletedrevisions}}",
+ "apihelp-query+deletedrevisions-example-revids": "{{doc-apihelp-example|query+deletedrevisions}}",
+ "apihelp-query+deletedrevs-summary": "{{doc-apihelp-summary|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-extended-description": "{{doc-apihelp-extended-description|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{doc-apihelp-paraminfo|query+deletedrevs|modes}}\n{{Identical|Mode}}",
+ "apihelp-query+deletedrevs-param-start": "{{doc-apihelp-param|query+deletedrevs|start}}",
+ "apihelp-query+deletedrevs-param-end": "{{doc-apihelp-param|query+deletedrevs|end}}",
+ "apihelp-query+deletedrevs-param-from": "{{doc-apihelp-param|query+deletedrevs|from}}",
+ "apihelp-query+deletedrevs-param-to": "{{doc-apihelp-param|query+deletedrevs|to}}",
+ "apihelp-query+deletedrevs-param-prefix": "{{doc-apihelp-param|query+deletedrevs|prefix}}",
+ "apihelp-query+deletedrevs-param-unique": "{{doc-apihelp-param|query+deletedrevs|unique}}",
+ "apihelp-query+deletedrevs-param-tag": "{{doc-apihelp-param|query+deletedrevs|tag}}",
+ "apihelp-query+deletedrevs-param-user": "{{doc-apihelp-param|query+deletedrevs|user}}",
+ "apihelp-query+deletedrevs-param-excludeuser": "{{doc-apihelp-param|query+deletedrevs|excludeuser}}",
+ "apihelp-query+deletedrevs-param-namespace": "{{doc-apihelp-param|query+deletedrevs|namespace}}",
+ "apihelp-query+deletedrevs-param-limit": "{{doc-apihelp-param|query+deletedrevs|limit}}",
+ "apihelp-query+deletedrevs-param-prop": "{{doc-apihelp-param|query+deletedrevs|prop}}\n{{doc-important|You can translate the word \"Deprecated\", but please do not alter the <code><nowiki>class=\"apihelp-deprecated\"</nowiki></code> attribute}}",
+ "apihelp-query+deletedrevs-example-mode1": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-example-mode2": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-example-mode3-main": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-example-mode3-talk": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+disabled-summary": "{{doc-apihelp-summary|query+disabled}}",
+ "apihelp-query+duplicatefiles-summary": "{{doc-apihelp-summary|query+duplicatefiles}}",
+ "apihelp-query+duplicatefiles-param-limit": "{{doc-apihelp-param|query+duplicatefiles|limit}}",
+ "apihelp-query+duplicatefiles-param-dir": "{{doc-apihelp-param|query+duplicatefiles|dir}}",
+ "apihelp-query+duplicatefiles-param-localonly": "{{doc-apihelp-param|query+duplicatefiles|localonly}}",
+ "apihelp-query+duplicatefiles-example-simple": "{{doc-apihelp-example|query+duplicatefiles}}",
+ "apihelp-query+duplicatefiles-example-generated": "{{doc-apihelp-example|query+duplicatefiles}}",
+ "apihelp-query+embeddedin-summary": "{{doc-apihelp-summary|query+embeddedin}}",
+ "apihelp-query+embeddedin-param-title": "{{doc-apihelp-param|query+embeddedin|title}}",
+ "apihelp-query+embeddedin-param-pageid": "{{doc-apihelp-param|query+embeddedin|pageid}}",
+ "apihelp-query+embeddedin-param-namespace": "{{doc-apihelp-param|query+embeddedin|namespace}}",
+ "apihelp-query+embeddedin-param-dir": "{{doc-apihelp-param|query+embeddedin|dir}}",
+ "apihelp-query+embeddedin-param-filterredir": "{{doc-apihelp-param|query+embeddedin|filterredir}}",
+ "apihelp-query+embeddedin-param-limit": "{{doc-apihelp-param|query+embeddedin|limit}}",
+ "apihelp-query+embeddedin-example-simple": "{{doc-apihelp-example|query+embeddedin}}",
+ "apihelp-query+embeddedin-example-generator": "{{doc-apihelp-example|query+embeddedin}}",
+ "apihelp-query+extlinks-summary": "{{doc-apihelp-summary|query+extlinks}}",
+ "apihelp-query+extlinks-param-limit": "{{doc-apihelp-param|query+extlinks|limit}}",
+ "apihelp-query+extlinks-param-protocol": "{{doc-apihelp-param|query+extlinks|protocol}}",
+ "apihelp-query+extlinks-param-query": "{{doc-apihelp-param|query+extlinks|query}}",
+ "apihelp-query+extlinks-param-expandurl": "{{doc-apihelp-param|query+extlinks|expandurl}}",
+ "apihelp-query+extlinks-example-simple": "{{doc-apihelp-example|query+extlinks}}",
+ "apihelp-query+exturlusage-summary": "{{doc-apihelp-summary|query+exturlusage}}",
+ "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop|paramvalues=1}}",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+exturlusage|prop|ids}}",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+exturlusage|prop|title}}",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+exturlusage|prop|url}}",
+ "apihelp-query+exturlusage-param-protocol": "{{doc-apihelp-param|query+exturlusage|protocol}}",
+ "apihelp-query+exturlusage-param-query": "{{doc-apihelp-param|query+exturlusage|query}}",
+ "apihelp-query+exturlusage-param-namespace": "{{doc-apihelp-param|query+exturlusage|namespace}}",
+ "apihelp-query+exturlusage-param-limit": "{{doc-apihelp-param|query+exturlusage|limit}}",
+ "apihelp-query+exturlusage-param-expandurl": "{{doc-apihelp-param|query+exturlusage|expandurl}}",
+ "apihelp-query+exturlusage-example-simple": "{{doc-apihelp-example|query+exturlusage}}",
+ "apihelp-query+filearchive-summary": "{{doc-apihelp-summary|query+filearchive}}",
+ "apihelp-query+filearchive-param-from": "{{doc-apihelp-param|query+filearchive|from}}",
+ "apihelp-query+filearchive-param-to": "{{doc-apihelp-param|query+filearchive|to}}",
+ "apihelp-query+filearchive-param-prefix": "{{doc-apihelp-param|query+filearchive|prefix}}",
+ "apihelp-query+filearchive-param-limit": "{{doc-apihelp-param|query+filearchive|limit}}",
+ "apihelp-query+filearchive-param-dir": "{{doc-apihelp-param|query+filearchive|dir}}",
+ "apihelp-query+filearchive-param-sha1": "{{doc-apihelp-param|query+filearchive|sha1}}",
+ "apihelp-query+filearchive-param-sha1base36": "{{doc-apihelp-param|query+filearchive|sha1base36}}",
+ "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop|paramvalues=1}}",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+filearchive|prop|sha1}}",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+filearchive|prop|timestamp}}",
+ "apihelp-query+filearchive-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+filearchive|prop|user}}",
+ "apihelp-query+filearchive-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+filearchive|prop|size}}",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "{{doc-apihelp-paramvalue|query+filearchive|prop|dimensions}}",
+ "apihelp-query+filearchive-paramvalue-prop-description": "{{doc-apihelp-paramvalue|query+filearchive|prop|description}}",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "{{doc-apihelp-paramvalue|query+filearchive|prop|parseddescription}}",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "{{doc-apihelp-paramvalue|query+filearchive|prop|mime}}",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "{{doc-apihelp-paramvalue|query+filearchive|prop|mediatype}}",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "{{doc-apihelp-paramvalue|query+filearchive|prop|metadata}}",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "{{doc-apihelp-paramvalue|query+filearchive|prop|bitdepth}}",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "{{doc-apihelp-paramvalue|query+filearchive|prop|archivename}}",
+ "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
+ "apihelp-query+filerepoinfo-summary": "{{doc-apihelp-summary|query+filerepoinfo}}",
+ "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
+ "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
+ "apihelp-query+fileusage-summary": "{{doc-apihelp-summary|query+fileusage}}",
+ "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop|paramvalues=1}}",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+fileusage|prop|pageid}}",
+ "apihelp-query+fileusage-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+fileusage|prop|title}}",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+fileusage|prop|redirect}}",
+ "apihelp-query+fileusage-param-namespace": "{{doc-apihelp-param|query+fileusage|namespace}}",
+ "apihelp-query+fileusage-param-limit": "{{doc-apihelp-param|query+fileusage|limit}}",
+ "apihelp-query+fileusage-param-show": "{{doc-apihelp-param|query+fileusage|show}}",
+ "apihelp-query+fileusage-example-simple": "{{doc-apihelp-example|query+fileusage}}",
+ "apihelp-query+fileusage-example-generator": "{{doc-apihelp-example|query+fileusage}}",
+ "apihelp-query+imageinfo-summary": "{{doc-apihelp-summary|query+imageinfo}}",
+ "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop|paramvalues=1}}",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+imageinfo|prop|timestamp}}",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+imageinfo|prop|user}}",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Imageinfo returns information about file revisions (normally the last revision since <code>iilimit</code> defaults to 1). <code>userid</code> includes the ID of the user who made the (re)upload which created that revision. So there will be one user ID per imageinfo item; if you set the limit high enough, you will get all revisions of all files as separate imageinfo items.\n\n{{doc-apihelp-paramvalue|query+imageinfo|prop|userid}}",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|comment}}",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|parsedcomment}}",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "A canonocal title is aa title formatted in the same way you would see it on the top of the page (localized namespace name, first letters capitalized, spaces instead of underscores). \n{{doc-apihelp-paramvalue|query+imageinfo|prop|canonicaltitle}}",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+imageinfo|prop|url}}",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+imageinfo|prop|size}}",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "{{doc-apihelp-paramvalue|query+imageinfo|prop|dimensions}}",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+imageinfo|prop|sha1}}",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "{{doc-apihelp-paramvalue|query+imageinfo|prop|mime}}",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "{{doc-apihelp-paramvalue|query+imageinfo|prop|thumbmime}}",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "{{doc-apihelp-paramvalue|query+imageinfo|prop|mediatype}}",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "{{doc-apihelp-paramvalue|query+imageinfo|prop|metadata}}",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "{{doc-apihelp-paramvalue|query+imageinfo|prop|commonmetadata}}",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "{{doc-apihelp-paramvalue|query+imageinfo|prop|extmetadata}}",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "{{doc-apihelp-paramvalue|query+imageinfo|prop|archivename}}",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "{{doc-apihelp-paramvalue|query+imageinfo|prop|bitdepth}}",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "{{doc-apihelp-paramvalue|query+imageinfo|prop|uploadwarning}}",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "{{doc-apihelp-paramvalue|query+imageinfo|prop|badfile}}",
+ "apihelp-query+imageinfo-param-limit": "{{doc-apihelp-param|query+imageinfo|limit}}",
+ "apihelp-query+imageinfo-param-start": "{{doc-apihelp-param|query+imageinfo|start}}",
+ "apihelp-query+imageinfo-param-end": "{{doc-apihelp-param|query+imageinfo|end}}",
+ "apihelp-query+imageinfo-param-urlwidth": "{{doc-apihelp-param|query+imageinfo|urlwidth|params=* $1 - Maximum number of thumbnails per query|paramstart=2}}",
+ "apihelp-query+imageinfo-param-urlheight": "{{doc-apihelp-param|query+imageinfo|urlheight}}",
+ "apihelp-query+imageinfo-param-metadataversion": "{{doc-apihelp-param|query+imageinfo|metadataversion}}",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "{{doc-apihelp-param|query+imageinfo|extmetadatalanguage}}",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "{{doc-apihelp-param|query+imageinfo|extmetadatamultilang}}",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "{{doc-apihelp-param|query+imageinfo|extmetadatafilter}}",
+ "apihelp-query+imageinfo-param-urlparam": "{{doc-apihelp-param|query+imageinfo|urlparam}}",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "{{doc-apihelp-param|query+imageinfo|badfilecontexttitle}}",
+ "apihelp-query+imageinfo-param-localonly": "{{doc-apihelp-param|query+imageinfo|localonly}}",
+ "apihelp-query+imageinfo-example-simple": "{{doc-apihelp-example|query+imageinfo}}",
+ "apihelp-query+imageinfo-example-dated": "{{doc-apihelp-example|query+imageinfo}}",
+ "apihelp-query+images-summary": "{{doc-apihelp-summary|query+images}}",
+ "apihelp-query+images-param-limit": "{{doc-apihelp-param|query+images|limit}}",
+ "apihelp-query+images-param-images": "{{doc-apihelp-param|query+images|images}}",
+ "apihelp-query+images-param-dir": "{{doc-apihelp-param|query+images|dir}}",
+ "apihelp-query+images-example-simple": "{{doc-apihelp-example|query+images}}",
+ "apihelp-query+images-example-generator": "{{doc-apihelp-example|query+images}}",
+ "apihelp-query+imageusage-summary": "{{doc-apihelp-summary|query+imageusage}}",
+ "apihelp-query+imageusage-param-title": "{{doc-apihelp-param|query+imageusage|title}}",
+ "apihelp-query+imageusage-param-pageid": "{{doc-apihelp-param|query+imageusage|pageid}}",
+ "apihelp-query+imageusage-param-namespace": "{{doc-apihelp-param|query+imageusage|namespace}}",
+ "apihelp-query+imageusage-param-dir": "{{doc-apihelp-param|query+imageusage|dir}}",
+ "apihelp-query+imageusage-param-filterredir": "{{doc-apihelp-param|query+imageusage|filterredir}}",
+ "apihelp-query+imageusage-param-limit": "{{doc-apihelp-param|query+imageusage|limit}}",
+ "apihelp-query+imageusage-param-redirect": "{{doc-apihelp-param|query+imageusage|redirect}}",
+ "apihelp-query+imageusage-example-simple": "{{doc-apihelp-example|query+imageusage}}",
+ "apihelp-query+imageusage-example-generator": "{{doc-apihelp-example|query+imageusage}}",
+ "apihelp-query+info-summary": "{{doc-apihelp-summary|query+info}}",
+ "apihelp-query+info-param-prop": "{{doc-apihelp-param|query+info|prop|paramvalues=1}}",
+ "apihelp-query+info-paramvalue-prop-protection": "{{doc-apihelp-paramvalue|query+info|prop|protection}}",
+ "apihelp-query+info-paramvalue-prop-talkid": "{{doc-apihelp-paramvalue|query+info|prop|talkid}}",
+ "apihelp-query+info-paramvalue-prop-watched": "{{doc-apihelp-paramvalue|query+info|prop|watched}}",
+ "apihelp-query+info-paramvalue-prop-watchers": "{{doc-apihelp-paramvalue|query+info|prop|watchers}}",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "{{doc-apihelp-paramvalue|query+info|prop|visitingwatchers}}",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "{{doc-apihelp-paramvalue|query+info|prop|notificationtimestamp}}",
+ "apihelp-query+info-paramvalue-prop-subjectid": "{{doc-apihelp-paramvalue|query+info|prop|subjectid}}",
+ "apihelp-query+info-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+info|prop|url}}",
+ "apihelp-query+info-paramvalue-prop-readable": "{{doc-apihelp-paramvalue|query+info|prop|readable}}",
+ "apihelp-query+info-paramvalue-prop-preload": "{{doc-apihelp-paramvalue|query+info|prop|preload}}",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "{{doc-apihelp-paramvalue|query+info|prop|displaytitle}}",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "{{doc-apihelp-paramvalue|query+info|prop|varianttitles}}",
+ "apihelp-query+info-param-testactions": "{{doc-apihelp-param|query+info|testactions}}",
+ "apihelp-query+info-param-token": "{{doc-apihelp-param|query+info|token}}",
+ "apihelp-query+info-example-simple": "{{doc-apihelp-example|query+info}}",
+ "apihelp-query+info-example-protection": "{{doc-apihelp-example|query+info}}",
+ "apihelp-query+iwbacklinks-summary": "{{doc-apihelp-summary|query+iwbacklinks}}",
+ "apihelp-query+iwbacklinks-extended-description": "{{doc-apihelp-extended-description|query+iwbacklinks}}",
+ "apihelp-query+iwbacklinks-param-prefix": "{{doc-apihelp-param|query+iwbacklinks|prefix}}",
+ "apihelp-query+iwbacklinks-param-title": "{{doc-apihelp-param|query+iwbacklinks|title}}",
+ "apihelp-query+iwbacklinks-param-limit": "{{doc-apihelp-param|query+iwbacklinks|limit}}",
+ "apihelp-query+iwbacklinks-param-prop": "{{doc-apihelp-param|query+iwbacklinks|prop|paramvalues=1}}",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "{{doc-apihelp-paramvalue|query+iwbacklinks|prop|iwprefix}}",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "{{doc-apihelp-paramvalue|query+iwbacklinks|prop|iwtitle}}",
+ "apihelp-query+iwbacklinks-param-dir": "{{doc-apihelp-param|query+iwbacklinks|dir}}",
+ "apihelp-query+iwbacklinks-example-simple": "{{doc-apihelp-example|query+iwbacklinks}}",
+ "apihelp-query+iwbacklinks-example-generator": "{{doc-apihelp-example|query+iwbacklinks}}",
+ "apihelp-query+iwlinks-summary": "{{doc-apihelp-summary|query+iwlinks}}",
+ "apihelp-query+iwlinks-param-url": "{{doc-apihelp-param|query+iwlinks|url}}",
+ "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop|paramvalues=1}}",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+iwlinks|prop|url}}",
+ "apihelp-query+iwlinks-param-limit": "{{doc-apihelp-param|query+iwlinks|limit}}",
+ "apihelp-query+iwlinks-param-prefix": "{{doc-apihelp-param|query+iwlinks|prefix}}",
+ "apihelp-query+iwlinks-param-title": "{{doc-apihelp-param|query+iwlinks|title}}",
+ "apihelp-query+iwlinks-param-dir": "{{doc-apihelp-param|query+iwlinks|dir}}",
+ "apihelp-query+iwlinks-example-simple": "{{doc-apihelp-example|query+iwlinks}}",
+ "apihelp-query+langbacklinks-summary": "{{doc-apihelp-summary|query+langbacklinks}}",
+ "apihelp-query+langbacklinks-extended-description": "{{doc-apihelp-extended-description|query+langbacklinks}}",
+ "apihelp-query+langbacklinks-param-lang": "{{doc-apihelp-param|query+langbacklinks|lang}}",
+ "apihelp-query+langbacklinks-param-title": "{{doc-apihelp-param|query+langbacklinks|title}}",
+ "apihelp-query+langbacklinks-param-limit": "{{doc-apihelp-param|query+langbacklinks|limit}}",
+ "apihelp-query+langbacklinks-param-prop": "{{doc-apihelp-param|query+langbacklinks|prop|paramvalues=1}}",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "{{doc-apihelp-paramvalue|query+langbacklinks|prop|lllang}}",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "{{doc-apihelp-paramvalue|query+langbacklinks|prop|lltitle}}",
+ "apihelp-query+langbacklinks-param-dir": "{{doc-apihelp-param|query+langbacklinks|dir}}",
+ "apihelp-query+langbacklinks-example-simple": "{{doc-apihelp-example|query+langbacklinks}}",
+ "apihelp-query+langbacklinks-example-generator": "{{doc-apihelp-example|query+langbacklinks}}",
+ "apihelp-query+langlinks-summary": "{{doc-apihelp-summary|query+langlinks}}",
+ "apihelp-query+langlinks-param-limit": "{{doc-apihelp-param|query+langlinks|limit}}",
+ "apihelp-query+langlinks-param-url": "{{doc-apihelp-param|query+langlinks|url}}",
+ "apihelp-query+langlinks-param-prop": "{{doc-apihelp-param|query+langlinks|prop|paramvalues=1}}",
+ "apihelp-query+langlinks-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+langlinks|prop|url}}",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "{{doc-apihelp-paramvalue|query+langlinks|prop|langname}}",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "{{doc-apihelp-paramvalue|query+langlinks|prop|autonym}}",
+ "apihelp-query+langlinks-param-lang": "{{doc-apihelp-param|query+langlinks|lang}}",
+ "apihelp-query+langlinks-param-title": "{{doc-apihelp-param|query+langlinks|title}}",
+ "apihelp-query+langlinks-param-dir": "{{doc-apihelp-param|query+langlinks|dir}}",
+ "apihelp-query+langlinks-param-inlanguagecode": "{{doc-apihelp-param|query+langlinks|inlanguagecode}}",
+ "apihelp-query+langlinks-example-simple": "{{doc-apihelp-example|query+langlinks}}",
+ "apihelp-query+links-summary": "{{doc-apihelp-summary|query+links}}",
+ "apihelp-query+links-param-namespace": "{{doc-apihelp-param|query+links|namespace}}",
+ "apihelp-query+links-param-limit": "{{doc-apihelp-param|query+links|limit}}",
+ "apihelp-query+links-param-titles": "{{doc-apihelp-param|query+links|titles}}",
+ "apihelp-query+links-param-dir": "{{doc-apihelp-param|query+links|dir}}",
+ "apihelp-query+links-example-simple": "{{doc-apihelp-example|query+links}}",
+ "apihelp-query+links-example-generator": "{{doc-apihelp-example|query+links}}",
+ "apihelp-query+links-example-namespaces": "{{doc-apihelp-example|query+links}}",
+ "apihelp-query+linkshere-summary": "{{doc-apihelp-summary|query+linkshere}}",
+ "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop|paramvalues=1}}",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+linkshere|prop|pageid}}",
+ "apihelp-query+linkshere-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+linkshere|prop|title}}",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+linkshere|prop|redirect}}",
+ "apihelp-query+linkshere-param-namespace": "{{doc-apihelp-param|query+linkshere|namespace}}",
+ "apihelp-query+linkshere-param-limit": "{{doc-apihelp-param|query+linkshere|limit}}",
+ "apihelp-query+linkshere-param-show": "{{doc-apihelp-param|query+linkshere|show}}",
+ "apihelp-query+linkshere-example-simple": "{{doc-apihelp-example|query+linkshere}}",
+ "apihelp-query+linkshere-example-generator": "{{doc-apihelp-example|query+linkshere}}",
+ "apihelp-query+logevents-summary": "{{doc-apihelp-summary|query+logevents}}",
+ "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop|paramvalues=1}}",
+ "apihelp-query+logevents-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+logevents|prop|ids}}",
+ "apihelp-query+logevents-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+logevents|prop|title}}",
+ "apihelp-query+logevents-paramvalue-prop-type": "{{doc-apihelp-paramvalue|query+logevents|prop|type}}",
+ "apihelp-query+logevents-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+logevents|prop|user}}",
+ "apihelp-query+logevents-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+logevents|prop|userid}}",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+logevents|prop|timestamp}}",
+ "apihelp-query+logevents-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+logevents|prop|comment}}",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+logevents|prop|parsedcomment}}",
+ "apihelp-query+logevents-paramvalue-prop-details": "{{doc-apihelp-paramvalue|query+logevents|prop|details}}",
+ "apihelp-query+logevents-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+logevents|prop|tags}}",
+ "apihelp-query+logevents-param-type": "{{doc-apihelp-param|query+logevents|type}}",
+ "apihelp-query+logevents-param-action": "{{doc-apihelp-param|query+logevents|action}}",
+ "apihelp-query+logevents-param-start": "{{doc-apihelp-param|query+logevents|start}}",
+ "apihelp-query+logevents-param-end": "{{doc-apihelp-param|query+logevents|end}}",
+ "apihelp-query+logevents-param-user": "{{doc-apihelp-param|query+logevents|user}}",
+ "apihelp-query+logevents-param-title": "{{doc-apihelp-param|query+logevents|title}}",
+ "apihelp-query+logevents-param-namespace": "{{doc-apihelp-param|query+logevents|namespace}}",
+ "apihelp-query+logevents-param-prefix": "{{doc-apihelp-param|query+logevents|prefix}}",
+ "apihelp-query+logevents-param-tag": "{{doc-apihelp-param|query+logevents|tag}}",
+ "apihelp-query+logevents-param-limit": "{{doc-apihelp-param|query+logevents|limit}}",
+ "apihelp-query+logevents-example-simple": "{{doc-apihelp-example|query+logevents}}",
+ "apihelp-query+pagepropnames-summary": "{{doc-apihelp-summary|query+pagepropnames}}",
+ "apihelp-query+pagepropnames-param-limit": "{{doc-apihelp-param|query+pagepropnames|limit}}",
+ "apihelp-query+pagepropnames-example-simple": "{{doc-apihelp-example|query+pagepropnames}}",
+ "apihelp-query+pageprops-summary": "{{doc-apihelp-summary|query+pageprops}}",
+ "apihelp-query+pageprops-param-prop": "{{doc-apihelp-param|query+pageprops|prop}}",
+ "apihelp-query+pageprops-example-simple": "{{doc-apihelp-example|query+pageprops}}",
+ "apihelp-query+pageswithprop-summary": "{{doc-apihelp-summary|query+pageswithprop}}",
+ "apihelp-query+pageswithprop-param-propname": "{{doc-apihelp-param|query+pageswithprop|propname}}",
+ "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop|paramvalues=1}}",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+pageswithprop|prop|ids}}",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+pageswithprop|prop|title}}",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "{{doc-apihelp-paramvalue|query+pageswithprop|prop|value}}",
+ "apihelp-query+pageswithprop-param-limit": "{{doc-apihelp-param|query+pageswithprop|limit}}",
+ "apihelp-query+pageswithprop-param-dir": "{{doc-apihelp-param|query+pageswithprop|dir}}",
+ "apihelp-query+pageswithprop-example-simple": "{{doc-apihelp-example|query+pageswithprop}}",
+ "apihelp-query+pageswithprop-example-generator": "{{doc-apihelp-example|query+pageswithprop}}",
+ "apihelp-query+prefixsearch-summary": "{{doc-apihelp-summary|query+prefixsearch}}",
+ "apihelp-query+prefixsearch-extended-description": "{{doc-apihelp-extended-description|query+prefixsearch}}",
+ "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
+ "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
+ "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
+ "apihelp-query+prefixsearch-param-offset": "{{doc-apihelp-param|query+prefixsearch|offset}}",
+ "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
+ "apihelp-query+prefixsearch-param-profile": "{{doc-apihelp-param|query+prefixsearch|profile|paramvalues=1}}",
+ "apihelp-query+protectedtitles-summary": "{{doc-apihelp-summary|query+protectedtitles}}",
+ "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
+ "apihelp-query+protectedtitles-param-level": "{{doc-apihelp-param|query+protectedtitles|level}}",
+ "apihelp-query+protectedtitles-param-limit": "{{doc-apihelp-param|query+protectedtitles|limit}}",
+ "apihelp-query+protectedtitles-param-start": "{{doc-apihelp-param|query+protectedtitles|start}}",
+ "apihelp-query+protectedtitles-param-end": "{{doc-apihelp-param|query+protectedtitles|end}}",
+ "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop|paramvalues=1}}",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|timestamp}}",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|user}}",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|userid}}",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|comment}}",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|parsedcomment}}",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|expiry}}",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|level}}",
+ "apihelp-query+protectedtitles-example-simple": "{{doc-apihelp-example|query+protectedtitles}}",
+ "apihelp-query+protectedtitles-example-generator": "{{doc-apihelp-example|query+protectedtitles}}",
+ "apihelp-query+querypage-summary": "{{doc-apihelp-summary|query+querypage}}",
+ "apihelp-query+querypage-param-page": "{{doc-apihelp-param|query+querypage|page}}",
+ "apihelp-query+querypage-param-limit": "{{doc-apihelp-param|query+querypage|limit}}",
+ "apihelp-query+querypage-example-ancientpages": "{{doc-apihelp-example|query+querypage}}",
+ "apihelp-query+random-summary": "{{doc-apihelp-summary|query+random}}",
+ "apihelp-query+random-extended-description": "{{doc-apihelp-extended-description|query+random}}",
+ "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
+ "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
+ "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
+ "apihelp-query+random-param-filterredir": "{{doc-apihelp-param|query+random|filterredir}}",
+ "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
+ "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
+ "apihelp-query+recentchanges-summary": "{{doc-apihelp-summary|query+recentchanges}}",
+ "apihelp-query+recentchanges-param-start": "{{doc-apihelp-param|query+recentchanges|start}}",
+ "apihelp-query+recentchanges-param-end": "{{doc-apihelp-param|query+recentchanges|end}}",
+ "apihelp-query+recentchanges-param-namespace": "{{doc-apihelp-param|query+recentchanges|namespace}}",
+ "apihelp-query+recentchanges-param-user": "{{doc-apihelp-param|query+recentchanges|user}}",
+ "apihelp-query+recentchanges-param-excludeuser": "{{doc-apihelp-param|query+recentchanges|excludeuser}}",
+ "apihelp-query+recentchanges-param-tag": "{{doc-apihelp-param|query+recentchanges|tag}}",
+ "apihelp-query+recentchanges-param-prop": "{{doc-apihelp-param|query+recentchanges|prop|paramvalues=1}}",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+recentchanges|prop|user}}",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+recentchanges|prop|userid}}",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+recentchanges|prop|comment}}",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+recentchanges|prop|parsedcomment}}",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+recentchanges|prop|flags}}",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+recentchanges|prop|timestamp}}",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+recentchanges|prop|title}}",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+recentchanges|prop|ids}}",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "{{doc-apihelp-paramvalue|query+recentchanges|prop|sizes}}",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+recentchanges|prop|redirect}}",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "{{doc-apihelp-paramvalue|query+recentchanges|prop|patrolled}}",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "{{doc-apihelp-paramvalue|query+recentchanges|prop|autopatrolled}}",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "{{doc-apihelp-paramvalue|query+recentchanges|prop|loginfo}}",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+recentchanges|prop|tags}}",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+recentchanges|prop|sha1}}",
+ "apihelp-query+recentchanges-param-token": "{{doc-apihelp-param|query+recentchanges|token}}",
+ "apihelp-query+recentchanges-param-show": "{{doc-apihelp-param|query+recentchanges|show}}",
+ "apihelp-query+recentchanges-param-limit": "{{doc-apihelp-param|query+recentchanges|limit}}",
+ "apihelp-query+recentchanges-param-type": "{{doc-apihelp-param|query+recentchanges|type}}",
+ "apihelp-query+recentchanges-param-toponly": "{{doc-apihelp-param|query+recentchanges|toponly}}",
+ "apihelp-query+recentchanges-param-generaterevisions": "{{doc-apihelp-param|query+recentchanges|generaterevisions}}",
+ "apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
+ "apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
+ "apihelp-query+redirects-summary": "{{doc-apihelp-summary|query+redirects}}",
+ "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop|paramvalues=1}}",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+redirects|prop|pageid}}",
+ "apihelp-query+redirects-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+redirects|prop|title}}",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "{{doc-apihelp-paramvalue|query+redirects|prop|fragment}}",
+ "apihelp-query+redirects-param-namespace": "{{doc-apihelp-param|query+redirects|namespace}}",
+ "apihelp-query+redirects-param-limit": "{{doc-apihelp-param|query+redirects|limit}}",
+ "apihelp-query+redirects-param-show": "{{doc-apihelp-param|query+redirects|show}}",
+ "apihelp-query+redirects-example-simple": "{{doc-apihelp-example|query+redirects}}",
+ "apihelp-query+redirects-example-generator": "{{doc-apihelp-example|query+redirects}}",
+ "apihelp-query+revisions-summary": "{{doc-apihelp-summary|query+revisions}}",
+ "apihelp-query+revisions-extended-description": "{{doc-apihelp-extended-description|query+revisions}}",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "{{doc-apihelp-paraminfo|query+revisions|singlepageonly}}",
+ "apihelp-query+revisions-param-startid": "{{doc-apihelp-param|query+revisions|startid}}",
+ "apihelp-query+revisions-param-endid": "{{doc-apihelp-param|query+revisions|endid}}",
+ "apihelp-query+revisions-param-start": "{{doc-apihelp-param|query+revisions|start}}",
+ "apihelp-query+revisions-param-end": "{{doc-apihelp-param|query+revisions|end}}",
+ "apihelp-query+revisions-param-user": "{{doc-apihelp-param|query+revisions|user}}",
+ "apihelp-query+revisions-param-excludeuser": "{{doc-apihelp-param|query+revisions|excludeuser}}",
+ "apihelp-query+revisions-param-tag": "{{doc-apihelp-param|query+revisions|tag}}",
+ "apihelp-query+revisions-param-token": "{{doc-apihelp-param|query+revisions|token}}",
+ "apihelp-query+revisions-example-content": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-last5": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5-after": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5-not-localhost": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5-user": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions+base-param-prop": "{{doc-apihelp-param|query+revisions+base|prop|description=the \"prop\" parameter to revision querying modules|noseealso=1|paramvalues=1}}",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+revisions+base|prop|ids}}",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+revisions+base|prop|flags}}",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+revisions+base|prop|timestamp}}",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+revisions+base|prop|user}}",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+revisions+base|prop|userid}}",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+revisions+base|prop|size}}",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+revisions+base|prop|sha1}}",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "{{doc-apihelp-paramvalue|query+revisions+base|prop|contentmodel}}",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+revisions+base|prop|comment}}",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+revisions+base|prop|parsedcomment}}",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "{{doc-apihelp-paramvalue|query+revisions+base|prop|content}}",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+revisions+base|prop|tags}}",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|query+revisions+base|prop|parsetree|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+ "apihelp-query+revisions+base-param-limit": "{{doc-apihelp-param|query+revisions+base|limit|description=the \"limit\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-expandtemplates": "{{doc-apihelp-param|query+revisions+base|expandtemplates|description=the \"expandtemplates\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-generatexml": "{{doc-apihelp-param|query+revisions+base|generatexml|description=the \"generatexml\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-parse": "{{doc-apihelp-param|query+revisions+base|parse|description=the \"parse\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-section": "{{doc-apihelp-param|query+revisions+base|section|description=the \"section\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-diffto": "{{doc-apihelp-param|query+revisions+base|diffto|description=the \"diffto\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-difftotext": "{{doc-apihelp-param|query+revisions+base|difftotext|description=the \"difftotext\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-difftotextpst": "{{doc-apihelp-param|query+revisions+base|difftotextpst|description=the \"difftotextpst\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-contentformat": "{{doc-apihelp-param|query+revisions+base|contentformat|description=the \"contentformat\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+search-summary": "{{doc-apihelp-summary|query+search}}",
+ "apihelp-query+search-param-search": "{{doc-apihelp-param|query+search|search}}",
+ "apihelp-query+search-param-namespace": "{{doc-apihelp-param|query+search|namespace}}",
+ "apihelp-query+search-param-what": "{{doc-apihelp-param|query+search|what}}",
+ "apihelp-query+search-param-info": "{{doc-apihelp-param|query+search|info}}",
+ "apihelp-query+search-param-prop": "{{doc-apihelp-param|query+search|prop|paramvalues=1}}",
+ "apihelp-query+search-param-qiprofile": "{{doc-apihelp-param|query+search|qiprofile|paramvalues=1}}",
+ "apihelp-query+search-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+search|prop|size}}",
+ "apihelp-query+search-paramvalue-prop-wordcount": "{{doc-apihelp-paramvalue|query+search|prop|wordcount}}",
+ "apihelp-query+search-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+search|prop|timestamp}}",
+ "apihelp-query+search-paramvalue-prop-snippet": "{{doc-apihelp-paramvalue|query+search|prop|snippet}}",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "{{doc-apihelp-paramvalue|query+search|prop|titlesnippet}}",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "{{doc-apihelp-paramvalue|query+search|prop|redirectsnippet}}",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "{{doc-apihelp-paramvalue|query+search|prop|redirecttitle}}",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "{{doc-apihelp-paramvalue|query+search|prop|sectionsnippet}}",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "{{doc-apihelp-paramvalue|query+search|prop|sectiontitle}}",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "{{doc-apihelp-paramvalue|query+search|prop|categorysnippet}}",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "{{doc-apihelp-paramvalue|query+search|prop|isfilematch}}",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "{{doc-apihelp-paramvalue|query+search|prop|extensiondata}}",
+ "apihelp-query+search-paramvalue-prop-score": "{{doc-apihelp-paramvalue|query+search|prop|score}}\n{{Identical|Ignored}}",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "{{doc-apihelp-paramvalue|query+search|prop|hasrelated}}\n{{Identical|Ignored}}",
+ "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}",
+ "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}",
+ "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}",
+ "apihelp-query+search-param-enablerewrites": "{{doc-apihelp-param|query+search|enablerewrites}}",
+ "apihelp-query+search-example-simple": "{{doc-apihelp-example|query+search}}",
+ "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
+ "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
+ "apihelp-query+siteinfo-summary": "{{doc-apihelp-summary|query+siteinfo}}",
+ "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop|paramvalues=1}}",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "{{doc-apihelp-paramvalue|query+siteinfo|prop|general}}",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "{{doc-apihelp-paramvalue|query+siteinfo|prop|namespaces}}",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "{{doc-apihelp-paramvalue|query+siteinfo|prop|namespacealiases}}",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "{{doc-apihelp-paramvalue|query+siteinfo|prop|specialpagealiases}}",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "{{doc-apihelp-paramvalue|query+siteinfo|prop|magicwords}}",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "{{doc-apihelp-paramvalue|query+siteinfo|prop|statistics}}",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "{{doc-apihelp-paramvalue|query+siteinfo|prop|interwikimap}}",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "{{doc-apihelp-paramvalue|query+siteinfo|prop|dbrepllag}}",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "{{doc-apihelp-paramvalue|query+siteinfo|prop|usergroups}}",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "{{doc-apihelp-paramvalue|query+siteinfo|prop|libraries}}",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|extensions}}",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|fileextensions}}",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "{{doc-apihelp-paramvalue|query+siteinfo|prop|rightsinfo}}",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|restrictions}}",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "{{doc-apihelp-paramvalue|query+siteinfo|prop|languages}}",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "{{doc-apihelp-paramvalue|query+siteinfo|prop|languagevariants}}",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "{{doc-apihelp-paramvalue|query+siteinfo|prop|skins}}",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "{{doc-apihelp-paramvalue|query+siteinfo|prop|extensiontags}}",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "{{doc-apihelp-paramvalue|query+siteinfo|prop|functionhooks}}",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "{{doc-apihelp-paramvalue|query+siteinfo|prop|showhooks}}",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "{{doc-apihelp-paramvalue|query+siteinfo|prop|variables}}",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "{{doc-apihelp-paramvalue|query+siteinfo|prop|protocols}}",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|defaultoptions}}",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "{{doc-apihelp-paramvalue|query+siteinfo|prop|uploaddialog}}",
+ "apihelp-query+siteinfo-param-filteriw": "{{doc-apihelp-param|query+siteinfo|filteriw}}",
+ "apihelp-query+siteinfo-param-showalldb": "{{doc-apihelp-param|query+siteinfo|showalldb}}",
+ "apihelp-query+siteinfo-param-numberingroup": "{{doc-apihelp-param|query+siteinfo|numberingroup}}",
+ "apihelp-query+siteinfo-param-inlanguagecode": "{{doc-apihelp-param|query+siteinfo|inlanguagecode}}",
+ "apihelp-query+siteinfo-example-simple": "{{doc-apihelp-example|query+siteinfo}}",
+ "apihelp-query+siteinfo-example-interwiki": "{{doc-apihelp-example|query+siteinfo}}",
+ "apihelp-query+siteinfo-example-replag": "{{doc-apihelp-example|query+siteinfo}}",
+ "apihelp-query+stashimageinfo-summary": "{{doc-apihelp-summary|query+stashimageinfo}}",
+ "apihelp-query+stashimageinfo-param-filekey": "{{doc-apihelp-param|query+stashimageinfo|filekey}}",
+ "apihelp-query+stashimageinfo-param-sessionkey": "{{doc-apihelp-param|query+stashimageinfo|sessionkey}}",
+ "apihelp-query+stashimageinfo-example-simple": "{{doc-apihelp-example|query+stashimageinfo}}",
+ "apihelp-query+stashimageinfo-example-params": "{{doc-apihelp-example|query+stashimageinfo}}",
+ "apihelp-query+tags-summary": "{{doc-apihelp-summary|query+tags}}",
+ "apihelp-query+tags-param-limit": "{{doc-apihelp-param|query+tags|limit}}",
+ "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop|paramvalues=1}}",
+ "apihelp-query+tags-paramvalue-prop-name": "{{doc-apihelp-paramvalue|query+tags|prop|name}}",
+ "apihelp-query+tags-paramvalue-prop-displayname": "{{doc-apihelp-paramvalue|query+tags|prop|displayname}}",
+ "apihelp-query+tags-paramvalue-prop-description": "{{doc-apihelp-paramvalue|query+tags|prop|description}}",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "{{doc-apihelp-paramvalue|query+tags|prop|hitcount}}",
+ "apihelp-query+tags-paramvalue-prop-defined": "{{doc-apihelp-paramvalue|query+tags|prop|defined}}",
+ "apihelp-query+tags-paramvalue-prop-source": "{{doc-apihelp-paramvalue|query+tags|prop|source}}",
+ "apihelp-query+tags-paramvalue-prop-active": "{{doc-apihelp-paramvalue|query+tags|prop|active}}",
+ "apihelp-query+tags-example-simple": "{{doc-apihelp-example|query+tags}}",
+ "apihelp-query+templates-summary": "{{doc-apihelp-summary|query+templates}}",
+ "apihelp-query+templates-param-namespace": "{{doc-apihelp-param|query+templates|namespace}}",
+ "apihelp-query+templates-param-limit": "{{doc-apihelp-param|query+templates|limit}}",
+ "apihelp-query+templates-param-templates": "{{doc-apihelp-param|query+templates|templates}}",
+ "apihelp-query+templates-param-dir": "{{doc-apihelp-param|query+templates|dir}}",
+ "apihelp-query+templates-example-simple": "{{doc-apihelp-example|query+templates}}",
+ "apihelp-query+templates-example-generator": "{{doc-apihelp-example|query+templates}}",
+ "apihelp-query+templates-example-namespaces": "{{doc-apihelp-example|query+templates}}",
+ "apihelp-query+tokens-summary": "{{doc-apihelp-summary|query+tokens}}",
+ "apihelp-query+tokens-param-type": "{{doc-apihelp-param|query+tokens|type}}",
+ "apihelp-query+tokens-example-simple": "{{doc-apihelp-example|query+tokens}}",
+ "apihelp-query+tokens-example-types": "{{doc-apihelp-example|query+tokens}}",
+ "apihelp-query+transcludedin-summary": "{{doc-apihelp-summary|query+transcludedin}}",
+ "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop|paramvalues=1}}",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+transcludedin|prop|pageid}}",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+transcludedin|prop|title}}",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+transcludedin|prop|redirect}}",
+ "apihelp-query+transcludedin-param-namespace": "{{doc-apihelp-param|query+transcludedin|namespace}}",
+ "apihelp-query+transcludedin-param-limit": "{{doc-apihelp-param|query+transcludedin|limit}}",
+ "apihelp-query+transcludedin-param-show": "{{doc-apihelp-param|query+transcludedin|show}}",
+ "apihelp-query+transcludedin-example-simple": "{{doc-apihelp-example|query+transcludedin}}",
+ "apihelp-query+transcludedin-example-generator": "{{doc-apihelp-example|query+transcludedin}}",
+ "apihelp-query+usercontribs-summary": "{{doc-apihelp-summary|query+usercontribs}}",
+ "apihelp-query+usercontribs-param-limit": "{{doc-apihelp-param|query+usercontribs|limit}}",
+ "apihelp-query+usercontribs-param-start": "{{doc-apihelp-param|query+usercontribs|start}}",
+ "apihelp-query+usercontribs-param-end": "{{doc-apihelp-param|query+usercontribs|end}}",
+ "apihelp-query+usercontribs-param-user": "{{doc-apihelp-param|query+usercontribs|user}}",
+ "apihelp-query+usercontribs-param-userprefix": "{{doc-apihelp-param|query+usercontribs|userprefix}}",
+ "apihelp-query+usercontribs-param-userids": "{{doc-apihelp-param|query+usercontribs|userids}}",
+ "apihelp-query+usercontribs-param-namespace": "{{doc-apihelp-param|query+usercontribs|namespace}}",
+ "apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop|paramvalues=1}}",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+usercontribs|prop|ids}}",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+usercontribs|prop|title}}",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+usercontribs|prop|timestamp}}",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+usercontribs|prop|comment}}",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+usercontribs|prop|parsedcomment}}",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+usercontribs|prop|size}}",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "{{doc-apihelp-paramvalue|query+usercontribs|prop|sizediff}}",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+usercontribs|prop|flags}}",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "{{doc-apihelp-paramvalue|query+usercontribs|prop|patrolled}}",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "{{doc-apihelp-paramvalue|query+usercontribs|prop|autopatrolled}}",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+usercontribs|prop|tags}}",
+ "apihelp-query+usercontribs-param-show": "{{doc-apihelp-param|query+usercontribs|show|params=* $1 - Value of [[mw:Manual:$RCMaxAge|$RCMaxAge]]|paramstart=2}}",
+ "apihelp-query+usercontribs-param-tag": "{{doc-apihelp-param|query+usercontribs|tag}}",
+ "apihelp-query+usercontribs-param-toponly": "{{doc-apihelp-param|query+usercontribs|toponly}}",
+ "apihelp-query+usercontribs-example-user": "{{doc-apihelp-example|query+usercontribs}}",
+ "apihelp-query+usercontribs-example-ipprefix": "{{doc-apihelp-example|query+usercontribs}}",
+ "apihelp-query+userinfo-summary": "{{doc-apihelp-summary|query+userinfo}}",
+ "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|paramvalues=1}}",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+userinfo|prop|blockinfo}}",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "{{doc-apihelp-paramvalue|query+userinfo|prop|hasmsg}}",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+userinfo|prop|groups}}",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "{{doc-apihelp-paramvalue|query+userinfo|prop|groupmemberships}}",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+userinfo|prop|implicitgroups}}",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+userinfo|prop|rights}}",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "{{doc-apihelp-paramvalue|query+userinfo|prop|changeablegroups}}",
+ "apihelp-query+userinfo-paramvalue-prop-options": "{{doc-apihelp-paramvalue|query+userinfo|prop|options}}",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "{{doc-apihelp-paramvalue|query+userinfo|prop|preferencestoken}}\n{{doc-important|You can translate the word \"Deprecated\", but please do not alter the <code><nowiki>class=\"apihelp-deprecated\"</nowiki></code> attribute}}",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+userinfo|prop|editcount}}",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "{{doc-apihelp-paramvalue|query+userinfo|prop|ratelimits}}",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "{{doc-apihelp-paramvalue|query+userinfo|prop|realname}}",
+ "apihelp-query+userinfo-paramvalue-prop-email": "{{doc-apihelp-paramvalue|query+userinfo|prop|email}}",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "{{doc-apihelp-paramvalue|query+userinfo|prop|acceptlang}}",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "{{doc-apihelp-paramvalue|query+userinfo|prop|registrationdate}}",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "{{doc-apihelp-paramvalue|query+userinfo|prop|unreadcount|params=* $1 - Maximum value for the \"unreadcount\" property.\n* $2 - Return value when there are more unread pages.|paramstart=3}}",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "{{doc-apihelp-paramvalue|query+userinfo|prop|centralids}}",
+ "apihelp-query+userinfo-param-attachedwiki": "{{doc-apihelp-param|query+userinfo|attachedwiki}}",
+ "apihelp-query+userinfo-example-simple": "{{doc-apihelp-example|query+userinfo}}",
+ "apihelp-query+userinfo-example-data": "{{doc-apihelp-example|query+userinfo}}",
+ "apihelp-query+users-summary": "{{doc-apihelp-summary|query+users}}",
+ "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop|paramvalues=1}}",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+users|prop|blockinfo}}",
+ "apihelp-query+users-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+users|prop|groups}}",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "{{doc-apihelp-paramvalue|query+users|prop|groupmemberships}}",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+users|prop|implicitgroups}}",
+ "apihelp-query+users-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+users|prop|rights}}",
+ "apihelp-query+users-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+users|prop|editcount}}",
+ "apihelp-query+users-paramvalue-prop-registration": "{{doc-apihelp-paramvalue|query+users|prop|registration}}",
+ "apihelp-query+users-paramvalue-prop-emailable": "{{doc-apihelp-paramvalue|query+users|prop|emailable}}",
+ "apihelp-query+users-paramvalue-prop-gender": "{{doc-apihelp-paramvalue|query+users|prop|gender}}",
+ "apihelp-query+users-paramvalue-prop-centralids": "{{doc-apihelp-paramvalue|query+users|prop|centralids}}",
+ "apihelp-query+users-paramvalue-prop-cancreate": "{{doc-apihelp-paramvalue|query+users|prop|cancreate}}",
+ "apihelp-query+users-param-attachedwiki": "{{doc-apihelp-param|query+users|attachedwiki}}",
+ "apihelp-query+users-param-users": "{{doc-apihelp-param|query+users|users}}",
+ "apihelp-query+users-param-userids": "{{doc-apihelp-param|query+users|userids}}",
+ "apihelp-query+users-param-token": "{{doc-apihelp-param|query+users|token}}",
+ "apihelp-query+users-example-simple": "{{doc-apihelp-example|query+users}}",
+ "apihelp-query+watchlist-summary": "{{doc-apihelp-summary|query+watchlist}}",
+ "apihelp-query+watchlist-param-allrev": "{{doc-apihelp-param|query+watchlist|allrev}}",
+ "apihelp-query+watchlist-param-start": "{{doc-apihelp-param|query+watchlist|start}}",
+ "apihelp-query+watchlist-param-end": "{{doc-apihelp-param|query+watchlist|end}}",
+ "apihelp-query+watchlist-param-namespace": "{{doc-apihelp-param|query+watchlist|namespace}}",
+ "apihelp-query+watchlist-param-user": "{{doc-apihelp-param|query+watchlist|user}}",
+ "apihelp-query+watchlist-param-excludeuser": "{{doc-apihelp-param|query+watchlist|excludeuser}}",
+ "apihelp-query+watchlist-param-limit": "{{doc-apihelp-param|query+watchlist|limit}}",
+ "apihelp-query+watchlist-param-prop": "{{doc-apihelp-param|query+watchlist|prop|paramvalues=1}}",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+watchlist|prop|ids}}",
+ "apihelp-query+watchlist-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+watchlist|prop|title}}",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+watchlist|prop|flags}}",
+ "apihelp-query+watchlist-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+watchlist|prop|user}}",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+watchlist|prop|userid}}",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+watchlist|prop|comment}}",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+watchlist|prop|parsedcomment}}",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+watchlist|prop|timestamp}}",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "{{doc-apihelp-paramvalue|query+watchlist|prop|patrol}}",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "{{doc-apihelp-paramvalue|query+watchlist|prop|autopatrol}}",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "{{doc-apihelp-paramvalue|query+watchlist|prop|sizes}}",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "{{doc-apihelp-paramvalue|query+watchlist|prop|notificationtimestamp}}",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "{{doc-apihelp-paramvalue|query+watchlist|prop|loginfo}}",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+watchlist|prop|tags}}",
+ "apihelp-query+watchlist-param-show": "{{doc-apihelp-param|query+watchlist|show}}",
+ "apihelp-query+watchlist-param-type": "{{doc-apihelp-param|query+watchlist|type}}",
+ "apihelp-query+watchlist-paramvalue-type-edit": "{{doc-apihelp-paramvalue|query+watchlist|type|edit}}",
+ "apihelp-query+watchlist-paramvalue-type-external": "{{doc-apihelp-paramvalue|query+watchlist|type|external}}",
+ "apihelp-query+watchlist-paramvalue-type-new": "{{doc-apihelp-paramvalue|query+watchlist|type|new}}",
+ "apihelp-query+watchlist-paramvalue-type-log": "{{doc-apihelp-paramvalue|query+watchlist|type|log}}",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "{{doc-apihelp-paramvalue|query+watchlist|type|categorize}}",
+ "apihelp-query+watchlist-param-owner": "{{doc-apihelp-param|query+watchlist|owner}}",
+ "apihelp-query+watchlist-param-token": "{{doc-apihelp-param|query+watchlist|token}}",
+ "apihelp-query+watchlist-example-simple": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-props": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-allrev": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-generator": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-generator-rev": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-wlowner": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlistraw-summary": "{{doc-apihelp-summary|query+watchlistraw}}",
+ "apihelp-query+watchlistraw-param-namespace": "{{doc-apihelp-param|query+watchlistraw|namespace}}",
+ "apihelp-query+watchlistraw-param-limit": "{{doc-apihelp-param|query+watchlistraw|limit}}",
+ "apihelp-query+watchlistraw-param-prop": "{{doc-apihelp-param|query+watchlistraw|prop|paramvalues=1}}",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "{{doc-apihelp-paramvalue|query+watchlistraw|prop|changed}}",
+ "apihelp-query+watchlistraw-param-show": "{{doc-apihelp-param|query+watchlistraw|show}}",
+ "apihelp-query+watchlistraw-param-owner": "{{doc-apihelp-param|query+watchlistraw|owner}}",
+ "apihelp-query+watchlistraw-param-token": "{{doc-apihelp-param|query+watchlistraw|token}}",
+ "apihelp-query+watchlistraw-param-dir": "{{doc-apihelp-param|query+watchlistraw|dir}}",
+ "apihelp-query+watchlistraw-param-fromtitle": "{{doc-apihelp-param|query+watchlistraw|fromtitle}}",
+ "apihelp-query+watchlistraw-param-totitle": "{{doc-apihelp-param|query+watchlistraw|totitle}}",
+ "apihelp-query+watchlistraw-example-simple": "{{doc-apihelp-example|query+watchlistraw}}",
+ "apihelp-query+watchlistraw-example-generator": "{{doc-apihelp-example|query+watchlistraw}}",
+ "apihelp-removeauthenticationdata-summary": "{{doc-apihelp-summary|removeauthenticationdata}}",
+ "apihelp-removeauthenticationdata-example-simple": "{{doc-apihelp-example|removeauthenticationdata}}",
+ "apihelp-resetpassword-summary": "{{doc-apihelp-summary|resetpassword}}",
+ "apihelp-resetpassword-extended-description-noroutes": "{{doc-apihelp-extended-description|resetpassword|info=This message is used when no known routes are enabled in <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.|seealso={{msg-mw|apihelp-resetpassword-extended-description}}}}",
+ "apihelp-resetpassword-param-user": "{{doc-apihelp-param|resetpassword|user}}",
+ "apihelp-resetpassword-param-email": "{{doc-apihelp-param|resetpassword|email}}",
+ "apihelp-resetpassword-example-user": "{{doc-apihelp-example|resetpassword}}",
+ "apihelp-resetpassword-example-email": "{{doc-apihelp-example|resetpassword}}",
+ "apihelp-revisiondelete-summary": "{{doc-apihelp-summary|revisiondelete}}",
+ "apihelp-revisiondelete-param-type": "{{doc-apihelp-param|revisiondelete|type}}",
+ "apihelp-revisiondelete-param-target": "{{doc-apihelp-param|revisiondelete|target}}",
+ "apihelp-revisiondelete-param-ids": "{{doc-apihelp-param|revisiondelete|ids}}",
+ "apihelp-revisiondelete-param-hide": "{{doc-apihelp-param|revisiondelete|hide}}",
+ "apihelp-revisiondelete-param-show": "{{doc-apihelp-param|revisiondelete|show}}",
+ "apihelp-revisiondelete-param-suppress": "{{doc-apihelp-param|revisiondelete|suppress}}",
+ "apihelp-revisiondelete-param-reason": "{{doc-apihelp-param|revisiondelete|reason}}",
+ "apihelp-revisiondelete-param-tags": "{{doc-apihelp-param|revisiondelete|tags}}",
+ "apihelp-revisiondelete-example-revision": "{{doc-apihelp-example|revisiondelete}}",
+ "apihelp-revisiondelete-example-log": "{{doc-apihelp-example|revisiondelete}}",
+ "apihelp-rollback-summary": "{{doc-apihelp-summary|rollback}}",
+ "apihelp-rollback-extended-description": "{{doc-apihelp-extended-description|rollback}}",
+ "apihelp-rollback-param-title": "{{doc-apihelp-param|rollback|title}}",
+ "apihelp-rollback-param-pageid": "{{doc-apihelp-param|rollback|pageid}}",
+ "apihelp-rollback-param-tags": "{{doc-apihelp-param|rollback|tags}}",
+ "apihelp-rollback-param-user": "{{doc-apihelp-param|rollback|user}}",
+ "apihelp-rollback-param-summary": "{{doc-apihelp-param|rollback|summary}}",
+ "apihelp-rollback-param-markbot": "{{doc-apihelp-param|rollback|markbot}}",
+ "apihelp-rollback-param-watchlist": "{{doc-apihelp-param|rollback|watchlist}}",
+ "apihelp-rollback-example-simple": "{{doc-apihelp-example|rollback}}",
+ "apihelp-rollback-example-summary": "{{doc-apihelp-example|rollback}}",
+ "apihelp-rsd-summary": "{{doc-apihelp-summary|rsd}}",
+ "apihelp-rsd-example-simple": "{{doc-apihelp-example|rsd}}",
+ "apihelp-setnotificationtimestamp-summary": "{{doc-apihelp-summary|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-extended-description": "{{doc-apihelp-extended-description|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "{{doc-apihelp-param|setnotificationtimestamp|entirewatchlist}}",
+ "apihelp-setnotificationtimestamp-param-timestamp": "{{doc-apihelp-param|setnotificationtimestamp|timestamp}}",
+ "apihelp-setnotificationtimestamp-param-torevid": "{{doc-apihelp-param|setnotificationtimestamp|torevid}}",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "{{doc-apihelp-param|setnotificationtimestamp|newerthanrevid}}",
+ "apihelp-setnotificationtimestamp-example-all": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-setpagelanguage-summary": "{{doc-apihelp-summary|setpagelanguage}}",
+ "apihelp-setpagelanguage-extended-description-disabled": "{{doc-apihelp-extended-description|setpagelanguage|info=This message is used when changing the language of a page is not allowed on the wiki because <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> is not enabled.|seealso={{msg-mw|apihelp-setpagelanguage-extended-description}}}}",
+ "apihelp-setpagelanguage-param-title": "{{doc-apihelp-param|setpagelanguage|title}}",
+ "apihelp-setpagelanguage-param-pageid": "{{doc-apihelp-param|setpagelanguage|pageid}}",
+ "apihelp-setpagelanguage-param-lang": "{{doc-apihelp-param|setpagelanguage|lang}}",
+ "apihelp-setpagelanguage-param-reason": "{{doc-apihelp-param|setpagelanguage|reason}}",
+ "apihelp-setpagelanguage-param-tags": "{{doc-apihelp-param|setpagelanguage|tags}}",
+ "apihelp-setpagelanguage-example-language": "{{doc-apihelp-example|setpagelanguage}}",
+ "apihelp-setpagelanguage-example-default": "{{doc-apihelp-example|setpagelanguage}}",
+ "apihelp-stashedit-summary": "{{doc-apihelp-summary|stashedit}}",
+ "apihelp-stashedit-extended-description": "{{doc-apihelp-extended-description|stashedit}}",
+ "apihelp-stashedit-param-title": "{{doc-apihelp-param|stashedit|title}}",
+ "apihelp-stashedit-param-section": "{{doc-apihelp-param|stashedit|section}}",
+ "apihelp-stashedit-param-sectiontitle": "{{doc-apihelp-param|stashedit|sectiontitle}}",
+ "apihelp-stashedit-param-text": "{{doc-apihelp-param|stashedit|text}}",
+ "apihelp-stashedit-param-stashedtexthash": "{{doc-apihelp-param|stashedit|stashedtexthash}}",
+ "apihelp-stashedit-param-contentmodel": "{{doc-apihelp-param|stashedit|contentmodel}}",
+ "apihelp-stashedit-param-contentformat": "{{doc-apihelp-param|stashedit|contentformat}}",
+ "apihelp-stashedit-param-baserevid": "{{doc-apihelp-param|stashedit|baserevid}}",
+ "apihelp-stashedit-param-summary": "{{doc-apihelp-param|stashedit|summary}}",
+ "apihelp-tag-summary": "{{doc-apihelp-summary|tag}}",
+ "apihelp-tag-param-rcid": "{{doc-apihelp-param|tag|rcid}}",
+ "apihelp-tag-param-revid": "{{doc-apihelp-param|tag|revid}}",
+ "apihelp-tag-param-logid": "{{doc-apihelp-param|tag|logid}}",
+ "apihelp-tag-param-add": "{{doc-apihelp-param|tag|add}}",
+ "apihelp-tag-param-remove": "{{doc-apihelp-param|tag|remove}}",
+ "apihelp-tag-param-reason": "{{doc-apihelp-param|tag|reason}}",
+ "apihelp-tag-param-tags": "{{doc-apihelp-param|tag|tags}}",
+ "apihelp-tag-example-rev": "{{doc-apihelp-example|tag}}",
+ "apihelp-tag-example-log": "{{doc-apihelp-example|tag}}",
+ "apihelp-tokens-summary": "{{doc-apihelp-summary|tokens}}",
+ "apihelp-tokens-extended-description": "{{doc-apihelp-extended-description|tokens}}",
+ "apihelp-tokens-param-type": "{{doc-apihelp-param|tokens|type}}",
+ "apihelp-tokens-example-edit": "{{doc-apihelp-example|tokens}}",
+ "apihelp-tokens-example-emailmove": "{{doc-apihelp-example|tokens}}",
+ "apihelp-unblock-summary": "{{doc-apihelp-summary|unblock}}",
+ "apihelp-unblock-param-id": "{{doc-apihelp-param|unblock|id}}",
+ "apihelp-unblock-param-user": "{{doc-apihelp-param|unblock|user}}",
+ "apihelp-unblock-param-userid": "{{doc-apihelp-param|unblock|userid}}",
+ "apihelp-unblock-param-reason": "{{doc-apihelp-param|unblock|reason}}",
+ "apihelp-unblock-param-tags": "{{doc-apihelp-param|unblock|tags}}",
+ "apihelp-unblock-example-id": "{{doc-apihelp-example|unblock}}",
+ "apihelp-unblock-example-user": "{{doc-apihelp-example|unblock}}",
+ "apihelp-undelete-summary": "{{doc-apihelp-summary|undelete}}",
+ "apihelp-undelete-extended-description": "{{doc-apihelp-extended-description|undelete}}",
+ "apihelp-undelete-param-title": "{{doc-apihelp-param|undelete|title}}",
+ "apihelp-undelete-param-reason": "{{doc-apihelp-param|undelete|reason}}",
+ "apihelp-undelete-param-tags": "{{doc-apihelp-param|undelete|tags}}",
+ "apihelp-undelete-param-timestamps": "{{doc-apihelp-param|undelete|timestamps}}",
+ "apihelp-undelete-param-fileids": "{{doc-apihelp-param|undelete|fileids}}",
+ "apihelp-undelete-param-watchlist": "{{doc-apihelp-param|undelete|watchlist}}",
+ "apihelp-undelete-example-page": "{{doc-apihelp-example|undelete}}",
+ "apihelp-undelete-example-revisions": "{{doc-apihelp-example|undelete}}",
+ "apihelp-unlinkaccount-summary": "{{doc-apihelp-summary|unlinkaccount}}",
+ "apihelp-unlinkaccount-example-simple": "{{doc-apihelp-example|unlinkaccount}}",
+ "apihelp-upload-summary": "{{doc-apihelp-summary|upload}}",
+ "apihelp-upload-extended-description": "{{doc-apihelp-extended-description|upload}}",
+ "apihelp-upload-param-filename": "{{doc-apihelp-param|upload|filename}}",
+ "apihelp-upload-param-comment": "{{doc-apihelp-param|upload|comment}}",
+ "apihelp-upload-param-tags": "{{doc-apihelp-param|upload|tags}}",
+ "apihelp-upload-param-text": "{{doc-apihelp-param|upload|text}}",
+ "apihelp-upload-param-watch": "{{doc-apihelp-param|upload|watch}}",
+ "apihelp-upload-param-watchlist": "{{doc-apihelp-param|upload|watchlist}}",
+ "apihelp-upload-param-ignorewarnings": "{{doc-apihelp-param|upload|ignorewarnings}}",
+ "apihelp-upload-param-file": "{{doc-apihelp-param|upload|file}}",
+ "apihelp-upload-param-url": "{{doc-apihelp-param|upload|url}}",
+ "apihelp-upload-param-filekey": "{{doc-apihelp-param|upload|filekey}}",
+ "apihelp-upload-param-sessionkey": "{{doc-apihelp-param|upload|sessionkey}}",
+ "apihelp-upload-param-stash": "{{doc-apihelp-param|upload|stash}}",
+ "apihelp-upload-param-filesize": "{{doc-apihelp-param|upload|filesize}}",
+ "apihelp-upload-param-offset": "{{doc-apihelp-param|upload|offset}}",
+ "apihelp-upload-param-chunk": "{{doc-apihelp-param|upload|chunk}}",
+ "apihelp-upload-param-async": "{{doc-apihelp-param|upload|async}}",
+ "apihelp-upload-param-checkstatus": "{{doc-apihelp-param|upload|checkstatus}}",
+ "apihelp-upload-example-url": "{{doc-apihelp-example|upload}}",
+ "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
+ "apihelp-userrights-summary": "{{doc-apihelp-summary|userrights}}",
+ "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}\n{{Identical|Username}}",
+ "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}\n{{Identical|User ID}}",
+ "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
+ "apihelp-userrights-param-expiry": "{{doc-apihelp-param|userrights|expiry}}",
+ "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
+ "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
+ "apihelp-userrights-param-tags": "{{doc-apihelp-param|userrights|tags}}",
+ "apihelp-userrights-example-user": "{{doc-apihelp-example|userrights}}",
+ "apihelp-userrights-example-userid": "{{doc-apihelp-example|userrights}}",
+ "apihelp-userrights-example-expiry": "{{doc-apihelp-example|userrights}}",
+ "apihelp-validatepassword-summary": "{{doc-apihelp-summary|validatepassword}}",
+ "apihelp-validatepassword-extended-description": "{{doc-apihelp-extended-description|validatepassword}}",
+ "apihelp-validatepassword-param-password": "{{doc-apihelp-param|validatepassword|password}}",
+ "apihelp-validatepassword-param-user": "{{doc-apihelp-param|validatepassword|user}}",
+ "apihelp-validatepassword-param-email": "{{doc-apihelp-param|validatepassword|email}}",
+ "apihelp-validatepassword-param-realname": "{{doc-apihelp-param|validatepassword|realname}}",
+ "apihelp-validatepassword-example-1": "{{doc-apihelp-example|validatepassword}}",
+ "apihelp-validatepassword-example-2": "{{doc-apihelp-example|validatepassword}}",
+ "apihelp-watch-summary": "{{doc-apihelp-summary|watch}}",
+ "apihelp-watch-param-title": "{{doc-apihelp-param|watch|title}}",
+ "apihelp-watch-param-unwatch": "{{doc-apihelp-param|watch|unwatch}}",
+ "apihelp-watch-example-watch": "{{doc-apihelp-example|watch}}",
+ "apihelp-watch-example-unwatch": "{{doc-apihelp-example|watch}}",
+ "apihelp-watch-example-generator": "{{doc-apihelp-example|watch}}",
+ "apihelp-format-example-generic": "{{doc-apihelp-example|format|params=* $1 - Format name|paramstart=2|noseealso=1}}",
+ "apihelp-format-param-wrappedhtml": "{{doc-apihelp-param|format|wrappedhtml|description=the \"wrappedhtml\" parameter in pretty-printing format modules}}",
+ "apihelp-json-summary": "{{doc-apihelp-summary|json|seealso=* {{msg-mw|apihelp-jsonfm-summary}}}}",
+ "apihelp-json-param-callback": "{{doc-apihelp-param|json|callback}}",
+ "apihelp-json-param-utf8": "{{doc-apihelp-param|json|utf8}}",
+ "apihelp-json-param-ascii": "{{doc-apihelp-param|json|ascii}}",
+ "apihelp-json-param-formatversion": "{{doc-apihelp-param|json|formatversion}}",
+ "apihelp-jsonfm-summary": "{{doc-apihelp-summary|jsonfm|seealso=* {{msg-mw|apihelp-json-summary}}}}",
+ "apihelp-none-summary": "{{doc-apihelp-summary|none}}",
+ "apihelp-php-summary": "{{doc-apihelp-summary|php|seealso=* {{msg-mw|apihelp-phpfm-summary}}}}",
+ "apihelp-php-param-formatversion": "{{doc-apihelp-param|php|formatversion}}",
+ "apihelp-phpfm-summary": "{{doc-apihelp-summary|phpfm|seealso=* {{msg-mw|apihelp-php-summary}}}}",
+ "apihelp-rawfm-summary": "{{doc-apihelp-summary|rawfm|seealso=* {{msg-mw|apihelp-raw-summary}}}}",
+ "apihelp-xml-summary": "{{doc-apihelp-summary|xml|seealso=* {{msg-mw|apihelp-xmlfm-summary}}}}",
+ "apihelp-xml-param-xslt": "{{doc-apihelp-param|xml|xslt}}",
+ "apihelp-xml-param-includexmlnamespace": "{{doc-apihelp-param|xml|includexmlnamespace}}",
+ "apihelp-xmlfm-summary": "{{doc-apihelp-summary|xmlfm|seealso=* {{msg-mw|apihelp-xml-summary}}}}",
+ "api-format-title": "{{technical}}\nPage title when API output is pretty-printed in HTML.",
+ "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML, but a post request is received.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
+ "api-format-prettyprint-header-only-html": "{{technical}} Displayed as a header when API output is pretty-printed in HTML, but there is no non-html module.\n\nParameters:\n* $1 - Format name",
+ "api-format-prettyprint-header-hyperlinked": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name\n* $3 - URL to Non-pretty-printing module",
+ "api-format-prettyprint-status": "{{technical}} Displayed as a header when API pretty-printed output is used for a response that uses an unusual HTTP status code.\n\nParameters:\n* $1 - HTTP status code (integer)\n* $2 - Standard English text for the status code.",
+ "api-login-fail-aborted": "{{technical}} Displayed as an error when API login fails due to AuthManager requiring user interaction.\n\nSee also:\n* {{msg-mw|api-login-fail-aborted-nobotpw}}",
+ "api-login-fail-aborted-nobotpw": "{{technical}} Displayed as an error when API login fails due to AuthManager requiring user interaction. Used when BotPasswords is disabled.\n\nSee also:\n* {{msg-mw|api-login-fail-aborted}}",
+ "api-login-fail-badsessionprovider": "{{technical}} Displayed as an error when API login is not possible due to a session provider that doesn't support login.\n\nParameters:\n* $1 - Session type in use that makes it not possible to log in, from a message like {{msg-mw|sessionprovider-mediawiki-session-cookiesessionprovider}}.",
+ "api-login-fail-sameorigin": "{{technical}} Displayed as an error when API login is not possible because the request does not enforce the Same-Origin policy.",
+ "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
+ "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
+ "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
+ "api-pageset-param-generator": "{{doc-apihelp-param|pageset|generator|description=the \"generator\" parameter in pageset-using modules}}",
+ "api-pageset-param-redirects-generator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is also available}}",
+ "api-pageset-param-redirects-nogenerator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is not available}}",
+ "api-pageset-param-converttitles": "{{doc-apihelp-param|pageset|converttitles|description=the \"converttitles\" parameter in pageset-using modules|params=* $1 - List of languages with variants|paramstart=2}}",
+ "api-help-title": "Page title for the auto-generated help output",
+ "api-help-lead": "Text displayed at the top of the API help page",
+ "api-help-main-header": "Text for the header of the main module",
+ "api-help-undocumented-module": "Text displayed for the summary of a submodule parameter when the module can't be loaded.\n\nParameters:\n* $1 - The module path.",
+ "api-help-fallback-description": "{{notranslate}}",
+ "api-help-fallback-parameter": "{{notranslate}}",
+ "api-help-fallback-example": "{{notranslate}}",
+ "api-help-flags": "{{ignored}} Label for the API help flags box\n\nParameters:\n* $1 - Number of flags to be displayed",
+ "api-help-flag-deprecated": "Flag displayed for an API module that is deprecated",
+ "api-help-flag-internal": "Flag displayed for an API module that is considered internal or unstable",
+ "api-help-flag-readrights": "Flag displayed for an API module that requires read rights",
+ "api-help-flag-writerights": "Flag displayed for an API module that requires write rights",
+ "api-help-flag-mustbeposted": "Flag displayed for an API module that only accepts POST requests",
+ "api-help-flag-generator": "Flag displayed for an API module that can be used as a generator",
+ "api-help-source": "Displayed in the flags box to indicate the source of an API module.\n\nParameters:\n* $1 - Possibly-localised extension name, or \"MediaWiki\" if it's a core module\n* $2 - Non-localised extension name.\n\nSee also:\n* {{msg-mw|api-help-source-unknown}}",
+ "api-help-source-unknown": "Displayed in the flags box to indicate that the source of an API module is not known.\n\nSee also:\n* {{msg-mw|api-help-source}}",
+ "api-help-license": "Displayed in the flags box to indicate the license of an API module.\n\nParameters:\n* $1 - Page to link to display the full license text\n* $2 - Display text for the link\n\nSee also:\n* {{msg-mw|api-help-license-noname}}\n* {{msg-mw|api-help-license-unknown}}",
+ "api-help-license-noname": "Displayed in the flags box to indicate the license of an API module, when the tag for the license is not known.\n\nParameters:\n* $1 - Page to link to display the full license text\n\nSee also:\n* {{msg-mw|api-help-license}}\n* {{msg-mw|api-help-license-unknown}}",
+ "api-help-license-unknown": "Displayed in the flags box to indicate that the license of the API module is not known.\n\nSee also:\n* {{msg-mw|api-help-license}}\n* {{msg-mw|api-help-license-noname}}",
+ "api-help-help-urls": "{{ignored}} Label for the API help urls section\n\nParameters:\n* $1 - Number of urls to be displayed",
+ "api-help-parameters": "Label for the API help parameters section\n\nParameters:\n* $1 - Number of parameters to be displayed\n{{Identical|Parameter}}",
+ "api-help-param-deprecated": "Displayed in the API help for any deprecated parameter\n{{Identical|Deprecated}}",
+ "api-help-param-required": "Displayed in the API help for any required parameter",
+ "api-help-datatypes-header": "Header for the data type section in the API help output",
+ "api-help-datatypes": "{{technical}} {{doc-important|Do not translate or reformat dates inside <nowiki><kbd></kbd></nowiki> or <nowiki><var></var></nowiki> tags}} Documentation of certain API data types\nSee also:\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+ "api-help-param-type-limit": "{{technical}} {{doc-important|Do not translate text inside &lt;kbd&gt; tags}} Used to indicate that a parameter is a \"limit\" type. Parameters:\n* $1 - Always 1.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+ "api-help-param-type-integer": "{{technical}} Used to indicate that a parameter is an integer or list of integers. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+ "api-help-param-type-boolean": "{{technical}} {{doc-important|Do not translate <code>Special:ApiHelp</code> in this message.}} Used to indicate that a parameter is a boolean. Parameters:\n* $1 - Always 1.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+ "api-help-param-type-password": "{{ignored}}{{technical}} Used to indicate that a parameter is a password or list of passwords. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+ "api-help-param-type-timestamp": "{{technical}} {{doc-important|Do not translate <code>Special:ApiHelp</code> in this message.}} Used to indicate that a parameter is a timestamp or list of timestamps. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+ "api-help-param-type-user": "{{technical}} Used to indicate that a parameter is a username or list of usernames. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+ "api-help-param-list": "Used to display the possible values for a parameter taking a list of values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Comma-separated list of values, possibly formatted using {{msg-mw|api-help-param-list-can-be-empty}}\n{{Identical|Value}}",
+ "api-help-param-list-can-be-empty": "Used to indicate that one of the possible values in the list is the empty string.\n\nParameters:\n* $1 - Number of items in the rest of the list; may be 0\n* $2 - Remainder of the list as a comma-separated string",
+ "api-help-param-limit": "Used to display the maximum value of a limit parameter\n\nParameters:\n* $1 - Maximum value",
+ "api-help-param-limit2": "Used to display the maximum values of a limit parameter\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
+ "api-help-param-integer-min": "Used to display an integer parameter with a minimum but no maximum value\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - unused\n\nSee also:\n* {{msg-mw|api-help-param-integer-max}}\n* {{msg-mw|api-help-param-integer-minmax}}",
+ "api-help-param-integer-max": "Used to display an integer parameter with a maximum but no minimum value.\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - (Unused)\n* $3 - Maximum value\nSee also:\n* {{msg-mw|Api-help-param-integer-min}}\n* {{msg-mw|Api-help-param-integer-minmax}}",
+ "api-help-param-integer-minmax": "Used to display an integer parameter with a maximum and minimum values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - Maximum value\n\nSee also:\n* {{msg-mw|api-help-param-integer-min}}\n* {{msg-mw|api-help-param-integer-max}}",
+ "api-help-param-upload": "{{technical}} Used to indicate that an 'upload'-type parameter must be posted as a file upload using multipart/form-data",
+ "api-help-param-multi-separate": "Used to indicate how to separate multiple values. Not used with {{msg-mw|api-help-param-list}}.",
+ "api-help-param-multi-max": "Used to indicate the maximum number of values accepted for a multi-valued parameter when that value is influenced by the user having apihighlimits right (otherwise {{msg-mw|api-help-param-multi-max-simple}} is used).\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
+ "api-help-param-multi-max-simple": "Used to indicate the maximum number of values accepted for a multi-valued parameter when that value is not influenced by the user having apihighlimits right (otherwise {{msg-mw|api-help-param-multi-max}} is used).\n\nParameters:\n* $1 - Maximum value",
+ "api-help-param-multi-all": "Used to indicate what string can be used to specify all possible values of a multi-valued parameter. \n\nParameters:\n* $1 - String to specify all possible values of the parameter",
+ "api-help-param-default": "Used to display the default value for an API parameter\n\nParameters:\n* $1 - Default value\n\nSee also:\n* {{msg-mw|api-help-param-default-empty}}\n{{Identical|Default}}",
+ "api-help-param-default-empty": "Used to display the default value for an API parameter when that default is an empty value\n\nSee also:\n* {{msg-mw|api-help-param-default}}",
+ "api-help-param-token": "{{doc-apihelp-param|description=any 'token' parameter|paramstart=2|params=\n* $1 - Token type|noseealso=1}}",
+ "api-help-param-token-webui": "{{doc-apihelp-param|description=additional text for any \"token\" parameter, explaining that web UI tokens are also accepted|noseealso=1}}",
+ "api-help-param-disabled-in-miser-mode": "{{doc-apihelp-param|description=any parameter that is disabled when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+ "api-help-param-limited-in-miser-mode": "{{doc-apihelp-param|description=additional text for any parameter that may cause the module to return few results when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+ "api-help-param-direction": "{{doc-apihelp-param|description=any standard \"dir\" parameter|noseealso=1}}",
+ "api-help-param-continue": "{{doc-apihelp-param|description=any standard \"continue\" parameter, or other parameter with the same semantics|noseealso=1}}",
+ "api-help-param-no-description": "Displayed on API parameters that lack any description",
+ "api-help-param-maxbytes": "Used to display the maximum allowed length of a parameter, in bytes.",
+ "api-help-param-maxchars": "Used to display the maximum allowed length of a parameter, in characters.",
+ "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed\n{{Identical|Example}}",
+ "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed\n{{Identical|Permission}}",
+ "api-help-permissions-granted-to": "Used to introduce the list of groups each permission is assigned to.\n\nParameters:\n* $1 - Number of groups\n* $2 - List of group names, comma-separated",
+ "api-help-right-apihighlimits": "{{technical}}{{doc-right|apihighlimits|prefix=api-help}}\nThis message is used instead of {{msg-mw|right-apihighlimits}} in the API help to display the actual limits.\n\nParameters:\n* $1 - Limit for slow queries\n* $2 - Limit for fast queries",
+ "api-help-open-in-apisandbox": "Text for the link to open an API example in [[Special:ApiSandbox]].",
+ "api-help-no-extended-description": "{{notranslate}} Message used when no extended description is provided. Should be empty.",
+ "api-help-authmanager-general-usage": "{{doc-important|Do not translate text that either quoted, or inside <nowiki><var></var></nowiki>, <nowiki><kbd></kbd></nowiki>, <nowiki><samp></samp></nowiki>, or <nowiki><code></code></nowiki> in this message.}}\nText giving a brief overview of how to use an AuthManager-using API module. Parameters:\n* $1 - Module parameter prefix, e.g. \"login\"\n* $2 - Module name, e.g. \"clientlogin\"\n* $3 - Module path, e.g. \"clientlogin\"\n* $4 - AuthManager action to use with this module.\n* $5 - Token type needed by the module.",
+ "api-help-authmanagerhelper-requests": "{{doc-apihelp-param|description=the \"requests\" parameter for AuthManager-using API modules|params=* $1 - AuthManager action used by this module|paramstart=2|noseealso=1}}",
+ "api-help-authmanagerhelper-request": "{{doc-apihelp-param|description=the \"request\" parameter for AuthManager-using API modules|params=* $1 - AuthManager action used by this module|paramstart=2|noseealso=1}}",
+ "api-help-authmanagerhelper-messageformat": "{{doc-apihelp-param|description=the \"messageformat\" parameter for AuthManager-using API modules|noseealso=1}}",
+ "api-help-authmanagerhelper-mergerequestfields": "{{doc-apihelp-param|description=the \"mergerequestfields\" parameter for AuthManager-using API modules|noseealso=1}}",
+ "api-help-authmanagerhelper-preservestate": "{{doc-apihelp-param|description=the \"preservestate\" parameter for AuthManager-using API modules|noseealso=1}}",
+ "api-help-authmanagerhelper-returnurl": "{{doc-apihelp-param|description=the \"returnurl\" parameter for AuthManager-using API modules|noseealso=1}}",
+ "api-help-authmanagerhelper-continue": "{{doc-apihelp-param|description=the \"continue\" parameter for AuthManager-using API modules|noseealso=1}}",
+ "api-help-authmanagerhelper-additional-params": "Message to display for AuthManager modules that take additional parameters to populate AuthenticationRequests. Parameters:\n* $1 - AuthManager action used by this module\n* $2 - Module parameter prefix, e.g. \"login\"\n* $3 - Module name, e.g. \"clientlogin\"\n* $4 - Module path, e.g. \"clientlogin\"",
+ "apierror-allimages-redirect": "{{doc-apierror}}",
+ "apierror-allpages-generator-redirects": "{{doc-apierror}}",
+ "apierror-appendnotsupported": "{{doc-apierror}}\n\nParameters:\n* $1 - Content model",
+ "apierror-articleexists": "{{doc-apierror}}",
+ "apierror-assertbotfailed": "{{doc-apierror}}",
+ "apierror-assertnameduserfailed": "{{doc-apierror}}\n\nParameters:\n* $1 - User name passed in.",
+ "apierror-assertuserfailed": "{{doc-apierror}}",
+ "apierror-autoblocked": "{{doc-apierror}}",
+ "apierror-badconfig-resulttoosmall": "{{doc-apierror}}",
+ "apierror-badcontinue": "{{doc-apierror}}",
+ "apierror-baddiff": "{{doc-apierror}}",
+ "apierror-baddiffto": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".",
+ "apierror-badformat-generic": "{{doc-apierror}}\n\nParameters:\n* $1 - Content format.\n* $2 - Content model.",
+ "apierror-badformat": "{{doc-apierror}}\n\nParameters:\n* $1 - Content format.\n* $2 - Content model.\n* $3 - Title using the model.",
+ "apierror-badgenerator-notgenerator": "{{doc-apierror}}\n\nParameters:\n* $1 - Generator module name.",
+ "apierror-badgenerator-unknown": "{{doc-apierror}}\n\nParameters:\n* $1 - Generator module name.",
+ "apierror-badip": "{{doc-apierror}}",
+ "apierror-badmd5": "{{doc-apierror}}",
+ "apierror-badmodule-badsubmodule": "{{doc-apierror}}\n\nParameters:\n* $1 - Module path.\n* $2 - Submodule name.",
+ "apierror-badmodule-nosubmodules": "{{doc-apierror}}\n\nParameters:\n* $1 - Module path.",
+ "apierror-badparameter": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+ "apierror-badquery": "{{doc-apierror}}",
+ "apierror-badtimestamp": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Value of the parameter.",
+ "apierror-badtoken": "{{doc-apierror}}",
+ "apierror-badupload": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+ "apierror-badurl": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Value of the parameter.",
+ "apierror-baduser": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Value of the parameter.",
+ "apierror-badvalue-notmultivalue": "{{doc-apierror}}",
+ "apierror-bad-watchlist-token": "{{doc-apierror}}",
+ "apierror-blockedfrommail": "{{doc-apierror}}",
+ "apierror-blocked": "{{doc-apierror}}",
+ "apierror-botsnotsupported": "{{doc-apierror}}",
+ "apierror-cannot-async-upload-file": "{{doc-apierror}}",
+ "apierror-cannotreauthenticate": "{{doc-apierror}}",
+ "apierror-cannotviewtitle": "{{doc-apierror}}\n\nParameters:\n* $1 - Title.",
+ "apierror-cantblock-email": "{{doc-apierror}}",
+ "apierror-cantblock": "{{doc-apierror}}",
+ "apierror-cantchangecontentmodel": "{{doc-apierror}}",
+ "apierror-canthide": "{{doc-apierror}}",
+ "apierror-cantimport-upload": "{{doc-apierror}}",
+ "apierror-cantimport": "{{doc-apierror}}",
+ "apierror-cantoverwrite-sharedfile": "{{doc-apierror}}",
+ "apierror-cantsend": "{{doc-apierror}}",
+ "apierror-cantundelete": "{{doc-apierror}}",
+ "apierror-changeauth-norequest": "{{doc-apierror}}",
+ "apierror-chunk-too-small": "{{doc-apierror}}\n\nParameters:\n* $1 - Minimum size in bytes.",
+ "apierror-cidrtoobroad": "{{doc-apierror}}\n\nParameters:\n* $1 - \"IPv4\" or \"IPv6\"\n* $2 - Minimum CIDR mask length.",
+ "apierror-compare-no-title": "{{doc-apierror}}",
+ "apierror-compare-nosuchfromsection": "{{doc-apierror}}\n\nParameters:\n* $1 - Section identifier. Probably a number or \"T-\" followed by a number.",
+ "apierror-compare-nosuchtosection": "{{doc-apierror}}\n\nParameters:\n* $1 - Section identifier. Probably a number or \"T-\" followed by a number.",
+ "apierror-compare-relative-to-nothing": "{{doc-apierror}}",
+ "apierror-contentserializationexception": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text, may end with punctuation. Currently this is probably English, hopefully we'll fix that in the future.",
+ "apierror-contenttoobig": "{{doc-apierror}}\n\nParameters:\n* $1 - Maximum article size in kilobytes.",
+ "apierror-copyuploadbaddomain": "{{doc-apierror}}",
+ "apierror-copyuploadbadurl": "{{doc-apierror}}",
+ "apierror-create-titleexists": "{{doc-apierror}}",
+ "apierror-csp-report": "{{doc-apierror}}\n\nParameters:\n* $1 - Error code, e.g. \"toobig\".",
+ "apierror-databaseerror": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception log ID code. This is meaningless to the end user, but can be used by people with access to the logs to easily find the logged error.",
+ "apierror-deletedrevs-param-not-1-2": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n\nSee also:\n* {{msg-mw|apihelp-query+deletedrevs-extended-description}}",
+ "apierror-deletedrevs-param-not-3": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n\nSee also:\n* {{msg-mw|apihelp-query+deletedrevs-extended-description}}",
+ "apierror-emptynewsection": "{{doc-apierror}}",
+ "apierror-emptypage": "{{doc-apierror}}",
+ "apierror-exceptioncaught": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception log ID code. This is meaningless to the end user, but can be used by people with access to the logs to easily find the logged error.\n* $2 - Exception message, which may end with punctuation. Probably in English.",
+ "apierror-filedoesnotexist": "{{doc-apierror}}",
+ "apierror-fileexists-sharedrepo-perm": "{{doc-apierror}}",
+ "apierror-filenopath": "{{doc-apierror}}",
+ "apierror-filetypecannotberotated": "{{doc-apierror}}",
+ "apierror-formatphp": "{{doc-apierror}}",
+ "apierror-imageusage-badtitle": "{{doc-apierror}}\n\nParameters:\n* $1 - Module name.",
+ "apierror-import-unknownerror": "{{doc-apierror}}\n\nParameters:\n* $1 - Error message returned by the import, probably in English.",
+ "apierror-integeroutofrange-abovebotmax": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name\n* $2 - Maximum allowed value\n* $3 - Supplied value",
+ "apierror-integeroutofrange-abovemax": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name\n* $2 - Maximum allowed value\n* $3 - Supplied value",
+ "apierror-integeroutofrange-belowminimum": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name\n* $2 - Minimum allowed value\n* $3 - Supplied value",
+ "apierror-invalidcategory": "{{doc-apierror}}",
+ "apierror-invalid-chunk": "{{doc-apierror}}",
+ "apierror-invalidexpiry": "{{doc-apierror}}\n\nParameters:\n* $1 - Value provided.",
+ "apierror-invalid-file-key": "{{doc-apierror}}",
+ "apierror-invalidlang": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+ "apierror-invalidoldimage": "{{doc-apierror}}",
+ "apierror-invalidparammix-cannotusewith": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name or \"parameter=value\" text.\n* $2 - Parameter name or \"parameter=value\" text.",
+ "apierror-invalidparammix-mustusewith": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name or \"parameter=value\" text.\n* $2 - Parameter name or \"parameter=value\" text.",
+ "apierror-invalidparammix-parse-new-section": "{{doc-apierror}}",
+ "apierror-invalidparammix": "{{doc-apierror}}\n\nParameters:\n* $1 - List of parameter names or \"parameter=value\" text.\n* $2 - Number of parameters.",
+ "apierror-invalidsection": "{{doc-apierror}}",
+ "apierror-invalidsha1base36hash": "{{doc-apierror}}",
+ "apierror-invalidsha1hash": "{{doc-apierror}}",
+ "apierror-invalidtitle": "{{doc-apierror}}\n\nParameters:\n* $1 - Title that is invalid",
+ "apierror-invalidurlparam": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".\n* $2 - Key\n* $3 - Value.",
+ "apierror-invaliduser": "{{doc-apierror}}\n\nParameters:\n* $1 - User name that is invalid.",
+ "apierror-invaliduserid": "{{doc-apierror}}",
+ "apierror-maxbytes": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Maximum allowed bytes.",
+ "apierror-maxchars": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Maximum allowed characters.",
+ "apierror-maxlag-generic": "{{doc-apierror}}\n\nParameters:\n* $1 - Database is lag in seconds.",
+ "apierror-maxlag": "{{doc-apierror}}\n\nParameters:\n* $1 - Database lag in seconds.\n* $2 - Database server that is lagged.",
+ "apierror-mimesearchdisabled": "{{doc-apierror}}",
+ "apierror-missingcontent-pageid": "{{doc-apierror}}\n\nParameters:\n* $1 - Page ID number.",
+ "apierror-missingcontent-revid": "{{doc-apierror}}\n\nParameters:\n* $1 - Revision ID number",
+ "apierror-missingparam-at-least-one-of": "{{doc-apierror}}\n\nParameters:\n* $1 - List of parameter names.\n* $2 - Number of parameters.",
+ "apierror-missingparam-one-of": "{{doc-apierror}}\n\nParameters:\n* $1 - List of parameter names.\n* $2 - Number of parameters.",
+ "apierror-missingparam": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+ "apierror-missingrev-pageid": "{{doc-apierror}}\n\nParameters:\n* $1 - Page ID number.",
+ "apierror-missingrev-title": "{{doc-apierror}}\n\nParameters:\n* $1 - Page title.",
+ "apierror-missingtitle-createonly": "{{doc-apierror}}",
+ "apierror-missingtitle": "{{doc-apierror}}",
+ "apierror-missingtitle-byname": "{{doc-apierror}}",
+ "apierror-moduledisabled": "{{doc-apierror}}\n\nParameters:\n* $1 - Name of the module.",
+ "apierror-multival-only-one-of": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Possible values for the parameter.\n* $3 - Number of values.",
+ "apierror-multpages": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name",
+ "apierror-mustbeloggedin-changeauth": "{{doc-apierror}}",
+ "apierror-mustbeloggedin-generic": "{{doc-apierror}}",
+ "apierror-mustbeloggedin-linkaccounts": "{{doc-apierror}}",
+ "apierror-mustbeloggedin-removeauth": "{{doc-apierror}}",
+ "apierror-mustbeloggedin-uploadstash": "{{doc-apierror}}",
+ "apierror-mustbeloggedin": "{{doc-apierror}}\n\nParameters:\n* $1 - One of the action-* messages (for example {{msg-mw|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation\n\nPlease report at [[Support]] if you are unable to properly translate this message. Also see [[phab:T16246]] (now closed) for background.\n\nSee also:\n* {{msg-mw|apierror-permissiondenied}}\n* {{msg-mw|permissionserrorstext-withaction}}",
+ "apierror-mustbeposted": "{{doc-apierror}}\n\nParameters:\n* $1 - Module name.",
+ "apierror-mustpostparams": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter names.\n* $2 - Number of parameters.",
+ "apierror-noapiwrite": "{{doc-apierror}}",
+ "apierror-nochanges": "{{doc-apierror}}",
+ "apierror-nodeleteablefile": "{{doc-apierror}}",
+ "apierror-no-direct-editing": "{{doc-apierror}}\n\nParameters:\n* $1 - Content model.\n* $2 - Title using the model.",
+ "apierror-noedit-anon": "{{doc-apierror}}",
+ "apierror-noedit": "{{doc-apierror}}",
+ "apierror-noimageredirect-anon": "{{doc-apierror}}",
+ "apierror-noimageredirect": "{{doc-apierror}}",
+ "apierror-nosuchlogid": "{{doc-apierror}}\n\nParameters:\n* $1 - Log ID number.",
+ "apierror-nosuchpageid": "{{doc-apierror}}\n\nParameters:\n* $1 - Page ID number.",
+ "apierror-nosuchrcid": "{{doc-apierror}}\n\nParameters:\n* $1 - RecentChanges ID number.",
+ "apierror-nosuchrevid": "{{doc-apierror}}\n\nParameters:\n* $1 - Revision ID number.",
+ "apierror-nosuchsection": "{{doc-apierror}}\n\nParameters:\n* $1 - Section identifier. Probably a number or \"T-\" followed by a number.",
+ "apierror-nosuchsection-what": "{{doc-apierror}}\n\nParameters:\n* $1 - Section identifier. Probably a number or \"T-\" followed by a number.\n* $2 - Page title, revision ID formatted with {{msg-mw|revid}}, or page ID formatted with {{msg-mw|pageid}}.",
+ "apierror-nosuchuserid": "{{doc-apierror}}",
+ "apierror-notarget": "{{doc-apierror}}",
+ "apierror-notpatrollable": "{{doc-apierror}}\n\nParameters:\n* $1 - Revision ID number.",
+ "apierror-nouploadmodule": "{{doc-apierror}}",
+ "apierror-offline": "{{doc-apierror}}\nError message for when files could not be uploaded as a result of bad/lost internet connection.",
+ "apierror-opensearch-json-warnings": "{{doc-apierror}}",
+ "apierror-pagecannotexist": "{{doc-apierror}}",
+ "apierror-pagedeleted": "{{doc-apierror}}",
+ "apierror-pagelang-disabled": "{{doc-apierror}}",
+ "apierror-paramempty": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+ "apierror-parsetree-notwikitext": "{{doc-apierror}}",
+ "apierror-parsetree-notwikitext-title": "{{doc-apierror}}\n\nParameters:\n* $1 - Page title.\n* $2 - Content model.",
+ "apierror-pastexpiry": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied expiry time.",
+ "apierror-permissiondenied": "{{doc-apierror}}\n\nParameters:\n* $1 - One of the action-* messages (for example {{msg-mw|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation\n\nPlease report at [[Support]] if you are unable to properly translate this message. Also see [[phab:T16246]] (now closed) for background.\n\nSee also:\n* {{msg-mw|permissionserrorstext-withaction}}",
+ "apierror-permissiondenied-generic": "{{doc-apierror}}",
+ "apierror-permissiondenied-patrolflag": "{{doc-apierror}}\n\nSee also:\n* {{msg-mw|apierror-permissiondenied}}",
+ "apierror-permissiondenied-unblock": "{{doc-apierror}}\n\nSee also:\n* {{msg-mw|apierror-permissiondenied}}",
+ "apierror-prefixsearchdisabled": "{{doc-apierror}}",
+ "apierror-promised-nonwrite-api": "{{doc-apierror}}",
+ "apierror-protect-invalidaction": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied protection type.",
+ "apierror-protect-invalidlevel": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied protection level.",
+ "apierror-ratelimited": "{{doc-apierror}}",
+ "apierror-readapidenied": "{{doc-apierror}}",
+ "apierror-readonly": "{{doc-apierror}}",
+ "apierror-reauthenticate": "{{doc-apierror}}",
+ "apierror-redirect-appendonly": "{{doc-apierror}}",
+ "apierror-revdel-mutuallyexclusive": "{{doc-apierror}}",
+ "apierror-revdel-needtarget": "{{doc-apierror}}",
+ "apierror-revdel-paramneeded": "{{doc-apierror}}",
+ "apierror-revisions-badid": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter in question, e.g. \"rvstartid\".",
+ "apierror-revisions-norevids": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".",
+ "apierror-revisions-singlepage": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".",
+ "apierror-revwrongpage": "{{doc-apierror}}\n\nParameters:\n* $1 - Revision ID number.\n* $2 - Page title.",
+ "apierror-searchdisabled": "{{doc-apierror}}\n\nParameters:\n* $1 - Search parameter that is disabled.",
+ "apierror-sectionreplacefailed": "{{doc-apierror}}",
+ "apierror-sectionsnotsupported": "{{doc-apierror}}\n\nParameters:\n* $1 - Content model that doesn't support sections.",
+ "apierror-sectionsnotsupported-what": "{{doc-apierror}}\n\nParameters:\n* $1 - Page title, revision ID formatted with {{msg-mw|revid}}, or page ID formatted with {{msg-mw|pageid}}.",
+ "apierror-show": "{{doc-apierror}}",
+ "apierror-siteinfo-includealldenied": "{{doc-apierror}}",
+ "apierror-sizediffdisabled": "{{doc-apierror}}",
+ "apierror-spamdetected": "{{doc-apierror}}\n\nParameters:\n* $1 - Matching \"spam filter\".\n\nSee also:\n* {{msg-mw|spamprotectionmatch}}",
+ "apierror-specialpage-cantexecute": "{{doc-apierror}}",
+ "apierror-stashedfilenotfound": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text. Currently this is probably English, hopefully we'll fix that in the future.",
+ "apierror-stashedit-missingtext": "{{doc-apierror}}",
+ "apierror-stashexception": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text. May be English or localized, may or may not end in punctuation.",
+ "apierror-stashfailed-complete": "{{doc-apierror}}",
+ "apierror-stashfailed-nosession": "{{doc-apierror}}",
+ "apierror-stashfilestorage": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text, which may already end with punctuation. Currently this is probably English, hopefully we'll fix that in the future.",
+ "apierror-stashinvalidfile": "{{doc-apierror}}",
+ "apierror-stashnosuchfilekey": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text. Currently this is probably English, hopefully we'll fix that in the future.",
+ "apierror-stashpathinvalid": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text. Currently this is probably English, hopefully we'll fix that in the future.",
+ "apierror-stashwrongowner": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text, which should already end with punctuation. Currently this is probably English, hopefully we'll fix that in the future.",
+ "apierror-stashzerolength": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text. Currently this is probably English, hopefully we'll fix that in the future.",
+ "apierror-systemblocked": "{{doc-apierror}}",
+ "apierror-templateexpansion-notwikitext": "{{doc-apierror}}\n\nParameters:\n* $1 - Page title.\n* $2 - Content model.",
+ "apierror-timeout": "{{doc-apierror}}\nAPI error message that can be used for client side localisation of API errors.",
+ "apierror-toofewexpiries": "{{doc-apierror}}\n\nParameters:\n* $1 - Number provided.\n* $2 - Number needed.",
+ "apierror-unknownaction": "{{doc-apierror}}\n\nParameters:\n* $1 - Action provided.",
+ "apierror-unknownerror-editpage": "{{doc-apierror}}\n\nParameters:\n* $1 - Error code (an integer).",
+ "apierror-unknownerror-nocode": "{{doc-apierror}}",
+ "apierror-unknownerror": "{{doc-apierror}}\n\nParameters:\n* $1 - Error code (possibly a message key) not handled by ApiBase::parseMsg().",
+ "apierror-unknownformat": "{{doc-apierror}}\n\nParameters:\n* $1 - Format provided.",
+ "apierror-unrecognizedparams": "{{doc-apierror}}\n\nParameters:\n* $1 - List of parameters.\n* $2 - Number of parameters.",
+ "apierror-unrecognizedvalue": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Parameter value.",
+ "apierror-unsupportedrepo": "{{doc-apierror}}",
+ "apierror-upload-filekeyneeded": "{{doc-apierror}}",
+ "apierror-upload-filekeynotallowed": "{{doc-apierror}}",
+ "apierror-upload-inprogress": "{{doc-apierror}}",
+ "apierror-upload-missingresult": "{{doc-apierror}}",
+ "apierror-urlparamnormal": "{{doc-apierror}}\n\nParameters:\n* $1 - Image title.",
+ "apierror-writeapidenied": "{{doc-apierror}}",
+ "apiwarn-alldeletedrevisions-performance": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".",
+ "apiwarn-badurlparam": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".\n* $2 - Image title.",
+ "apiwarn-badutf8": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n{{doc-important|Do not translate \"\\t\", \"\\n\", and \"\\r\"}}",
+ "apiwarn-checktoken-percentencoding": "{{doc-apierror}}",
+ "apiwarn-compare-nocontentmodel": "{{doc-apierror}}\n\nParameters:\n* $1 - Content model being assumed.",
+ "apiwarn-deprecation-deletedrevs": "{{doc-apierror}}",
+ "apiwarn-deprecation-expandtemplates-prop": "{{doc-apierror}}",
+ "apiwarn-deprecation-httpsexpected": "{{doc-apierror}}",
+ "apiwarn-deprecation-login-botpw": "{{doc-apierror}}",
+ "apiwarn-deprecation-login-nobotpw": "{{doc-apierror}}",
+ "apiwarn-deprecation-login-token": "{{doc-apierror}}",
+ "apiwarn-deprecation-parameter": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+ "apiwarn-deprecation-parse-headitems": "{{doc-apierror}}",
+ "apiwarn-deprecation-purge-get": "{{doc-apierror}}",
+ "apiwarn-deprecation-withreplacement": "{{doc-apierror}}\n\nParameters:\n* $1 - Query string fragment that is deprecated, e.g. \"action=tokens\".\n* $2 - Query string fragment to use instead, e.g. \"action=tokens\".",
+ "apiwarn-difftohidden": "{{doc-apierror}}\n\nParameters:\n* $1 - Revision ID number.\n\n\"r\" is short for \"revision\". You may translate it.",
+ "apiwarn-errorprinterfailed": "{{doc-apierror}}",
+ "apiwarn-errorprinterfailed-ex": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception message, which may already end in punctuation. Probably in English.",
+ "apiwarn-invalidcategory": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied category name.",
+ "apiwarn-invalidtitle": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied title.",
+ "apiwarn-invalidxmlstylesheetext": "{{doc-apierror}}",
+ "apiwarn-invalidxmlstylesheet": "{{doc-apierror}}",
+ "apiwarn-invalidxmlstylesheetns": "{{doc-apierror}}",
+ "apiwarn-moduleswithoutvars": "{{doc-apierror}}",
+ "apiwarn-notfile": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied file name.",
+ "apiwarn-nothumb-noimagehandler": "{{doc-apierror}}\n\nParameters:\n* $1 - File name.",
+ "apiwarn-parse-nocontentmodel": "{{doc-apierror}}\n\nParameters:\n* $1 - Content model being assumed.",
+ "apiwarn-parse-revidwithouttext": "{{doc-apierror}}",
+ "apiwarn-parse-titlewithouttext": "{{doc-apierror}}",
+ "apiwarn-redirectsandrevids": "{{doc-apierror}}",
+ "apiwarn-tokennotallowed": "{{doc-apierror}}\n\nParameters:\n* $1 - Token type being requested, typically named after the action requiring the token.",
+ "apiwarn-tokens-origin": "{{doc-apierror}}",
+ "apiwarn-toomanyvalues": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Maximum number of values allowed.",
+ "apiwarn-truncatedresult": "{{doc-apierror}}\n\nParameters:\n* $1 - Size limit in bytes.",
+ "apiwarn-unclearnowtimestamp": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Supplied value.",
+ "apiwarn-unrecognizedvalues": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - List of unknown values supplied.\n* $3 - Number of unknown values.",
+ "apiwarn-unsupportedarray": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+ "apiwarn-urlparamwidth": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".\n* $2 - Width being ignored.\n* $3 - Width being used.",
+ "apiwarn-validationfailed-badchars": "{{doc-apierror}}\n\nUsed with {{msg-mw|apiwarn-validationfailed}}.",
+ "apiwarn-validationfailed-badpref": "{{doc-apierror}}\n\nUsed with {{msg-mw|apiwarn-validationfailed}}.",
+ "apiwarn-validationfailed-cannotset": "{{doc-apierror}}\n\nUsed with {{msg-mw|apiwarn-validationfailed}}.",
+ "apiwarn-validationfailed-keytoolong": "{{doc-apierror}}\n\nUsed with {{msg-mw|apiwarn-validationfailed}}.\n\nParameters:\n* $1 - Maximum allowed key length in bytes.",
+ "apiwarn-validationfailed": "{{doc-apierror}}\n\nParameters:\n* $1 - User preference name.\n* $2 - Failure message, such as {{msg-mw|apiwarn-validationfailed-badpref}}. Probably already ends with punctuation",
+ "apiwarn-wgDebugAPI": "{{doc-apierror}}",
+ "api-feed-error-title": "Used as a feed item title when an error occurs in <kbd>action=feedwatchlist</kbd>.\n\nParameters:\n* $1 - API error code\n{{Identical|Error}}",
+ "api-usage-docref": "\n\nParameters:\n* $1 - URL of the API auto-generated documentation.",
+ "api-usage-mailinglist-ref": "{{doc-apierror}} Also used in the error response.",
+ "api-exception-trace": "\n\nParameters:\n* $1 - Exception class.\n* $2 - File from which the exception was thrown.\n* $3 - Line number from which the exception was thrown.\n* $4 - Exception backtrace.",
+ "api-credits-header": "Header for the API credits section in the API help output\n{{Identical|Credit}}",
+ "api-credits": "API credits text, displayed in the API help output"
+}
diff --git a/www/wiki/includes/api/i18n/ro.json b/www/wiki/includes/api/i18n/ro.json
new file mode 100644
index 00000000..30f4bdae
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ro.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "ANDROBETA"
+ ]
+ },
+ "apihelp-createaccount-param-email": "Adresa de e-mail a utilizatorului (opțional).",
+ "apihelp-createaccount-param-realname": "Numele real al utilizatorului (opțional).",
+ "apihelp-createaccount-param-mailpassword": "Dacă este setat la orice valoare, o parolă aleatoare va fi trimisă utilizatorului prin e-mail.",
+ "apihelp-delete-summary": "Șterge o pagină.",
+ "apihelp-delete-param-title": "Titlul paginii de șters. Nu poate fi folosit împreună cu <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID-ul paginii de șters. Nu poate fi folosit împreună cu <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Motivul ștergerii. Dacă nu e specificat, va fi folosit un motiv generat automat.",
+ "apihelp-disabled-summary": "Acest modul a fost dezactivat.",
+ "apihelp-edit-summary": "Creează și modifică pagini.",
+ "apihelp-edit-example-edit": "Modifică o pagină.",
+ "apihelp-expandtemplates-param-title": "Titlul paginii.",
+ "apihelp-expandtemplates-param-text": "Wikitext de convertit."
+}
diff --git a/www/wiki/includes/api/i18n/roa-tara.json b/www/wiki/includes/api/i18n/roa-tara.json
new file mode 100644
index 00000000..07064122
--- /dev/null
+++ b/www/wiki/includes/api/i18n/roa-tara.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "apihelp-block-param-reason": "Mutive pu blocche.",
+ "apihelp-createaccount-param-name": "Nome de l'utende.",
+ "apihelp-edit-param-text": "Vôsce.",
+ "apihelp-edit-example-edit": "Cange 'na pàgene"
+}
diff --git a/www/wiki/includes/api/i18n/ru.json b/www/wiki/includes/api/i18n/ru.json
new file mode 100644
index 00000000..7c8c1694
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ru.json
@@ -0,0 +1,1783 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mahairod",
+ "Okras",
+ "Eakarpov",
+ "Kaganer",
+ "Mariya",
+ "Дмитрий",
+ "WindEwriX",
+ "Ochilov",
+ "Nzeemin",
+ "INS Pirat",
+ "Macofe",
+ "Краснорядцева Елена",
+ "Iniquity",
+ "Лилиә",
+ "Айсар",
+ "Гизатуллина",
+ "MaxSem",
+ "Irus",
+ "MaxBioHazard",
+ "Kareyac",
+ "Mailman",
+ "Ping08",
+ "Ivan-r",
+ "Redredsonia",
+ "Alexey zakharenkov",
+ "Facenapalm",
+ "Jack who built the house",
+ "Mouse21",
+ "Happy13241",
+ "Ole Yves"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документация]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> MediaWiki API — зрелый и стабильный интерфейс, активно поддерживаемый и улучшаемый. Мы стараемся избегать ломающих изменений, однако изредка они могут быть необходимы. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<p class=\"mw-apisandbox-link\"><strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].</p>",
+ "apihelp-main-param-action": "Действие, которое следует выполнить.",
+ "apihelp-main-param-format": "Формат вывода.",
+ "apihelp-main-param-maxlag": "Значение максимального отставания может использоваться, когда MediaWiki установлена на кластер из реплицируемых баз данных. Чтобы избежать ухудшения ситуации с отставанием репликации сайта, этот параметр может заставить клиента ждать, когда задержка репликации станет ниже указанного значения. В случае чрезмерной задержки возвращается код ошибки «<samp>maxlag</samp>» с сообщением «<samp>Waiting for $host: $lag seconds lagged</samp>».<br>См. подробнее на странице с описанием [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: параметра Maxlag]].",
+ "apihelp-main-param-smaxage": "Установить значение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+ "apihelp-main-param-maxage": "Установить значение HTTP-заголовка Cache-Control <code>max-age</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+ "apihelp-main-param-assert": "Проверить, что участник авторизован, если задано <kbd>user</kbd>, или что он имеет права бота, если задано <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Проверить, что ник текущего участника совпадает с заданным.",
+ "apihelp-main-param-requestid": "Любое заданное здесь значение будет включено в ответ. Может быть использовано для различения запросов.",
+ "apihelp-main-param-servedby": "Включить в результаты имя хоста, обработавшего запрос.",
+ "apihelp-main-param-curtimestamp": "Включить в результат временную метку.",
+ "apihelp-main-param-responselanginfo": "Включить языки, использованные для <var>uselang</var> и <var>errorlang</var>, в результат.",
+ "apihelp-main-param-origin": "При обращении к API с использованием кросс-доменного AJAX-запроса (CORS), задайте параметру значение исходного домена. Он должен быть включён в любой предварительный запрос и таким образом должен быть частью URI-запроса (не тела POST).\n\nДля аутентифицированных запросов он должен точно соответствовать одному из источников в заголовке <code>Origin</code>, так что он должен быть задан наподобие <kbd>https://ru.wikipedia.org</kbd> или <kbd>https://meta.wikimedia.org</kbd>. Если параметр не соответствует заголовку <code>Origin</code>, будет возвращён ответ с кодом ошибки 403. Если параметр соответствует заголовку <code>Origin</code>, и источник находится в белом списке, будут установлены заголовки <code>Access-Control-Allow-Origin</code> и <code>Access-Control-Allow-Credentials</code>.\n\nДля неаутентифицированных запросов укажите значение <kbd>*</kbd>. В результате заголовок <code>Access-Control-Allow-Origin</code> будет установлен, но <code>Access-Control-Allow-Credentials</code> примет значение <code>false</code> и все пользовательские данные будут ограничены.",
+ "apihelp-main-param-uselang": "Язык, используемый для перевода сообщений. Запрос <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> с <kbd>siprop=languages</kbd> возвращает список кодов языков; укажите <kbd>user</kbd>, чтобы использовать текущие языковые настройки участника, или <kbd>content</kbd> для использования основного языка этой вики.",
+ "apihelp-main-param-errorformat": "Формат, используемый для вывода текста предупреждений и ошибок.\n; plaintext: Вики-текст с удалёнными HTML-тегами и замещёнными мнемониками.\n; wikitext: Нераспарсенный вики-текст.\n; html: HTML.\n; raw: Ключ сообщения и параметры.\n; none: Без текстового вывода, только коды ошибок.\n; bc: Формат, используемый до MediaWiki 1.29. <var>errorlang</var> и <var>errorsuselocal</var> игнорируются.",
+ "apihelp-main-param-errorlang": "Язык, используемый для вывода предупреждений и сообщений об ошибках. Запрос <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> с <kbd>siprop=languages</kbd> возвращает список кодов языков; укажите <kbd>content</kbd> для использования основного языка этой вики, или <kbd>uselang</kbd> для использования того же значения, что и в параметре <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "Если задан, тексты ошибок будут использовать локально модифицированные сообщения из пространства имён {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "Блокировка участника.",
+ "apihelp-block-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите заблокировать. Нельзя использовать вместе с <var>$1userid</var>",
+ "apihelp-block-param-userid": "Идентификатор блокируемого участника. Нельзя использовать одновременно с <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Время истечения срока действия. Может быть относительными (например, <kbd>5 months</kbd> или <kbd>2 weeks</kbd>) или абсолютными (например, <kbd>2014-09-18T12:34:56Z</kbd>). Если задано <kbd>infinite</kbd>, <kbd>indefinite</kbd>, или <kbd>never</kbd>, блок никогда не истечёт.",
+ "apihelp-block-param-reason": "Причина блокировки.",
+ "apihelp-block-param-anononly": "Заблокировать только анонимных участников (т. е. запретить анонимные правки для этого IP-адреса).",
+ "apihelp-block-param-nocreate": "Запретить создание учётных записей.",
+ "apihelp-block-param-autoblock": "Автоматически блокировать последний использованный IP-адрес и все последующие, с которых будут совершаться попытки авторизации.",
+ "apihelp-block-param-noemail": "Запретить участнику отправлять электронную почту через интерфейс вики. (Требуется право <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Скрыть имя участника из журнала блокировок. (Требуется право <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Позволяет участникам редактировать их собственные страницы обсуждения (зависит от <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Если участник уже заблокирован, перезаписать существующую блокировку.",
+ "apihelp-block-param-watchuser": "Следить за страницей участника или IP-участника и страницей обсуждения.",
+ "apihelp-block-param-tags": "Изменить метки записи в журнале блокировок.",
+ "apihelp-block-example-ip-simple": "Заблокировать IP-адрес <kbd>192.0.2.5</kbd> на три дня с причиной <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Бессрочно заблокировать участника <kbd>Vandal</kbd> по причине <kbd>Vandalism</kbd> и предотвратить создание новых аккаунтов и отправку электронной почты.",
+ "apihelp-changeauthenticationdata-summary": "Смена параметров аутентификации для текущего участника.",
+ "apihelp-changeauthenticationdata-example-password": "Попытаться изменить текущий пароль участника на <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Проверить корректность токена из <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=token]]</kbd>.",
+ "apihelp-checktoken-param-type": "Тип проверяемого токена.",
+ "apihelp-checktoken-param-token": "Проверяемый токен.",
+ "apihelp-checktoken-param-maxtokenage": "Максимально допустимый возраст токена (в секундах).",
+ "apihelp-checktoken-example-simple": "Проверить корректность <kbd>csrf</kbd>-токена.",
+ "apihelp-clearhasmsg-summary": "Очистить флаг <code>hasmsg</code> для текущего участника.",
+ "apihelp-clearhasmsg-example-1": "Очистить флаг <code>hasmsg</code> для текущего участника.",
+ "apihelp-clientlogin-summary": "Вход в вики с помощью интерактивного потока.",
+ "apihelp-clientlogin-example-login": "Начать вход в вики в качестве участника <kbd>Example</kbd> с паролем <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Продолжить вход после ответа <samp>UI</samp> для двухфакторной авторизации, предоставив <kbd>987654</kbd> в качестве токена <var>OATHToken</var>.",
+ "apihelp-compare-summary": "Получение разницы между двумя страницами.",
+ "apihelp-compare-extended-description": "Номер версии, заголовок страницы, её идентификатор, текст, или относительная сноска должна быть задана как для «from», так и для «to».",
+ "apihelp-compare-param-fromtitle": "Заголовок первой сравниваемой страницы.",
+ "apihelp-compare-param-fromid": "Идентификатор первой сравниваемой страницы.",
+ "apihelp-compare-param-fromrev": "Первая сравниваемая версия.",
+ "apihelp-compare-param-fromtext": "Используйте этот текст вместо содержимого версии, заданной <var>fromtitle</var>, <var>fromid</var> или <var>fromrev</var>.",
+ "apihelp-compare-param-fromsection": "Использовать только указанную секцию из содержимого 'from'.",
+ "apihelp-compare-param-frompst": "Выполнить преобразование перед записью правки (PST) над <var>fromtext</var>.",
+ "apihelp-compare-param-fromcontentmodel": "Модель содержимого <var>fromtext</var>. Если не задана, будет угадана по другим параметрам.",
+ "apihelp-compare-param-fromcontentformat": "Формат сериализации содержимого <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Заголовок второй сравниваемой страницы.",
+ "apihelp-compare-param-toid": "Идентификатор второй сравниваемой страницы.",
+ "apihelp-compare-param-torev": "Вторая сравниваемая версия.",
+ "apihelp-compare-param-torelative": "Использовать версию, относящуюся к определённой<var>fromtitle</var>, <var>fromid</var> или <var>fromrev</var> Все другие опции 'to' будут проигнорированы.",
+ "apihelp-compare-param-totext": "Используйте этот текст вместо содержимого версии, заданной <var>totitle</var>, <var>toid</var> или <var>torev</var>.",
+ "apihelp-compare-param-tosection": "Использовать только указанную секцию из содержимого 'to'.",
+ "apihelp-compare-param-topst": "Выполнить преобразование перед записью правки (PST) над <var>totext</var>.",
+ "apihelp-compare-param-tocontentmodel": "Модель содержимого <var>totext</var>. Если не задана, будет угадана по другим параметрам.",
+ "apihelp-compare-param-tocontentformat": "Формат сериализации содержимого <var>totext</var>.",
+ "apihelp-compare-param-prop": "Какую информацию получить.",
+ "apihelp-compare-paramvalue-prop-diff": "HTML разницы.",
+ "apihelp-compare-paramvalue-prop-diffsize": "Размер HTML разницы в байтах.",
+ "apihelp-compare-paramvalue-prop-rel": "Идентификаторы предыдущей к 'from' и следующей за 'to' версий.",
+ "apihelp-compare-paramvalue-prop-ids": "Идентификаторы страниц и версий 'from' и 'to'.",
+ "apihelp-compare-paramvalue-prop-title": "Названия страниц для версий 'from' и 'to'.",
+ "apihelp-compare-paramvalue-prop-user": "Имя и идентификатор участника для версий 'from' и 'to'.",
+ "apihelp-compare-paramvalue-prop-comment": "Описания правок для версий 'from' и 'to'.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "Распарсенные описания правок для версий 'from' и 'to'.",
+ "apihelp-compare-paramvalue-prop-size": "Размер версий 'from' и 'to'.",
+ "apihelp-compare-example-1": "Создать разницу между версиями 1 и 2.",
+ "apihelp-createaccount-summary": "Создание новой учётной записи.",
+ "apihelp-createaccount-param-preservestate": "Если запрос <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> возвращает true для <samp>hasprimarypreservedstate</samp>, то запросы, отмеченные как <samp>primary-required</samp>, должны быть пропущены. Если запрос возвращает непустое значение поля <samp>preservedusername</samp>, то это значение должно быть использовано в параметре <samp>username</var>.",
+ "apihelp-createaccount-example-create": "Начать создание участника <kbd>Example</kbd> с паролем <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Имя участника.",
+ "apihelp-createaccount-param-password": "Пароль (будет проигнорирован, если задан параметр <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Домен для внешней аутентификации (необязательно).",
+ "apihelp-createaccount-param-token": "Токен создания учётной записи, полученный в первом запросе.",
+ "apihelp-createaccount-param-email": "Адрес электронной почты участника (необязательно).",
+ "apihelp-createaccount-param-realname": "Настоящее имя участника (необязательно).",
+ "apihelp-createaccount-param-mailpassword": "При установке любого значения, случайный пароль будет выслан участнику по электронной почте.",
+ "apihelp-createaccount-param-reason": "Причина создания учетной записи для записи в журнал (необязательно).",
+ "apihelp-createaccount-param-language": "Языковой код, который будет установлен в качестве основного языка участника (необязательно, по умолчанию используется основной язык вики).",
+ "apihelp-createaccount-example-pass": "Создать участника <kbd>testuser</kbd> с паролем <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Создать участника <kbd>testmailuser</kbd> и прислать на электронную почту случайно сгенерированный пароль.",
+ "apihelp-cspreport-summary": "Используется браузерами, чтобы сообщать о нарушениях политики безопасности (CSP). Этот модуль никогда не должен использоваться, за исключением случаев автоматического использования совместимыми с CSP браузерами.",
+ "apihelp-cspreport-param-reportonly": "Отметить как доклад от политики мониторинга, не от принудительной политики",
+ "apihelp-cspreport-param-source": "Что сгенерировало заголовок SCP, вызвавший этот доклад",
+ "apihelp-delete-summary": "Удаление страницы.",
+ "apihelp-delete-param-title": "Заголовок удаляемой страницы. Нельзя использовать одновременно с <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Идентификатор удаляемой страницы. Нельзя использовать одновременно с <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Причина удаления. Если не задана, будет использована автоматически сгенерированная причина.",
+ "apihelp-delete-param-tags": "Изменить метки записи в журнале удалений.",
+ "apihelp-delete-param-watch": "Добавить страницу в список наблюдения текущего участника.",
+ "apihelp-delete-param-watchlist": "Безусловно добавить или удалить страницу из списка наблюдения текущего участника, использовать настройки или не менять наблюдение.",
+ "apihelp-delete-param-unwatch": "Удалить страницу из списка наблюдения текущего участника.",
+ "apihelp-delete-param-oldimage": "Название старого удаляемого изображения, предоставляемое [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Удалить <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Удалить <kbd>Main Page</kbd> с причиной <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Этот модуль был отключен.",
+ "apihelp-edit-summary": "Создание и редактирование страниц.",
+ "apihelp-edit-param-title": "Название редактируемой страницы. Нельзя использовать одновременно с <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Идентификатор редактируемой страницы. Нельзя использовать одновременно с <var>$1title</var>.",
+ "apihelp-edit-param-section": "Номер раздела. <kbd>0</kbd> для верхнего раздела, <kbd>new</kbd> для нового раздела.",
+ "apihelp-edit-param-sectiontitle": "Заголовок нового раздела.",
+ "apihelp-edit-param-text": "Содержимое страницы.",
+ "apihelp-edit-param-summary": "Описание изменений. Также является заголовком раздела, когда используется $1section=new, а $1sectiontitle не задано.",
+ "apihelp-edit-param-tags": "Изменить метки записи в истории изменений.",
+ "apihelp-edit-param-minor": "Малая правка.",
+ "apihelp-edit-param-notminor": "Не малая правка.",
+ "apihelp-edit-param-bot": "Пометить правку как сделанную ботом.",
+ "apihelp-edit-param-basetimestamp": "Временная метка редактируемой версии, используется для обнаружения конфликтов редактирования. Может быть получена посредством [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Метка времени начала редактирования, используется для обнаружения конфликтов редактирования. Необходимое значение может быть получено с помощью <var>[[Special:ApiHelp/main|curtimestamp]]</var> в начале редактирования (то есть, после загрузки содержимого редактируемой страницы).",
+ "apihelp-edit-param-recreate": "Игнорировать предупреждение о том, что страница была удалена во время редактирования.",
+ "apihelp-edit-param-createonly": "Не редактировать страницу, если она уже существует.",
+ "apihelp-edit-param-nocreate": "Выбрасывать ошибку, если страницы не существует.",
+ "apihelp-edit-param-watch": "Добавить страницу в список наблюдения текущего участника.",
+ "apihelp-edit-param-unwatch": "Удалить страницу из списка наблюдения текущего участника.",
+ "apihelp-edit-param-watchlist": "Безусловно добавить или удалить страницу из списка наблюдения текущего участника, использовать настройки или не менять наблюдение.",
+ "apihelp-edit-param-md5": "MD5-хеш параметра $1text, или конкатенации параметров $1prependtext и $1apendtext. Если задан, правка не будет выполнена, если хеш некорректен.",
+ "apihelp-edit-param-prependtext": "Добавить этот текст в начало страницы. Переопределяет $1text.",
+ "apihelp-edit-param-appendtext": "Добавить этот текст в конец страницы. Переопределяет $text.\n\nДля создания нового раздела, используйте $1section=new, а не этот параметр.",
+ "apihelp-edit-param-undo": "Отменить это изменение. Переопределяет $text, $1prependtext и $1appendtext.",
+ "apihelp-edit-param-undoafter": "Отменить все изменения от $1undo до данного. Если не задано, просто отменить одно изменение.",
+ "apihelp-edit-param-redirect": "Автоматически разрешать перенаправления.",
+ "apihelp-edit-param-contentformat": "Формат сериализации содержимого, используемый для введённого текста.",
+ "apihelp-edit-param-contentmodel": "Модель нового содержимого.",
+ "apihelp-edit-param-token": "Токен всегда должен быть послан в качестве последнего параметра, или, по крайней мере, после параметра $1text.",
+ "apihelp-edit-example-edit": "Редактировать страницу.",
+ "apihelp-edit-example-prepend": "Добавить магическое слово <kbd>_&#95;NOTOC_&#95;</kbd> в начало страницы.",
+ "apihelp-edit-example-undo": "Отменить изменения с 13579 по 13585 с автоматическим описанием правки.",
+ "apihelp-emailuser-summary": "Написание электронных писем участнику.",
+ "apihelp-emailuser-param-target": "Адресат электронного письма.",
+ "apihelp-emailuser-param-subject": "Заголовок темы.",
+ "apihelp-emailuser-param-text": "Содержание письма.",
+ "apihelp-emailuser-param-ccme": "Отправить копию этого сообщения мне.",
+ "apihelp-emailuser-example-email": "Отправить письмо участнику <kbd>WikiSysop</kbd> с текстом <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Разворачивание всех шаблонов в вики-текст.",
+ "apihelp-expandtemplates-param-title": "Заголовок страницы.",
+ "apihelp-expandtemplates-param-text": "Конвертируемый вики-текст.",
+ "apihelp-expandtemplates-param-revid": "Номер версии, для <code><nowiki>{{REVISIONID}}</nowiki></code> и аналогичных переменных.",
+ "apihelp-expandtemplates-param-prop": "Какую информацию включить.\n\nОбратите внимание, что если ни одно из значений не выбрано, результат будет содержать вики-текст, но вывод будет в устаревшем формате.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Расширенный вики-текст.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Любые категории, присутствующие во входных данных, но не попавшие в вики-текстовый результат.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Свойства страницы, определённые раскрытыми магическими словами в вики-тексте.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Является ли вывод нестабильным и следует ли отказаться от его повторного использования где-либо на странице.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Максимальное время, по прошествии которого кэш результата должен быть признан недействительным.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Любые модули ResourceLoader, запрашиваемые функциями парсера на добавление в результат. Одновременно с <kbd>modules</kbd> должен быть запрошен либо <kbd>jsconfigvars</kbd>, либо <kbd>encodedjsconfigvars</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы в виде JSON-строки.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "Дерево парсинга XML входных данных.",
+ "apihelp-expandtemplates-param-includecomments": "Нужно ли включать комментарии HTML в результат.",
+ "apihelp-expandtemplates-param-generatexml": "Создать дерево парсинга XML (заменено $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Развернуть вики-текст <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Возвращает ленту с вкладом участников.",
+ "apihelp-feedcontributions-param-feedformat": "Формат ленты.",
+ "apihelp-feedcontributions-param-user": "Вклад каких участников получить.",
+ "apihelp-feedcontributions-param-namespace": "Вклад в каком пространстве имён показать.",
+ "apihelp-feedcontributions-param-year": "От года (и ранее).",
+ "apihelp-feedcontributions-param-month": "От месяца (и ранее).",
+ "apihelp-feedcontributions-param-tagfilter": "Показать вклад, содержащий данные метки.",
+ "apihelp-feedcontributions-param-deletedonly": "Показать только удалённые правки.",
+ "apihelp-feedcontributions-param-toponly": "Показать только правки, являющиеся последними версиями.",
+ "apihelp-feedcontributions-param-newonly": "Показать только правки, являющиеся созданием страниц.",
+ "apihelp-feedcontributions-param-hideminor": "Скрыть малые правки.",
+ "apihelp-feedcontributions-param-showsizediff": "Показать объём изменений между версиями.",
+ "apihelp-feedcontributions-example-simple": "Показать вклад участника <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Возвращает ленту последних изменений.",
+ "apihelp-feedrecentchanges-param-feedformat": "Формат ленты.",
+ "apihelp-feedrecentchanges-param-namespace": "Пространство имён, которым ограничить результат.",
+ "apihelp-feedrecentchanges-param-invert": "Все пространства имён, кроме выбранного.",
+ "apihelp-feedrecentchanges-param-associated": "Включить связанное (обсуждения или основное) пространство имён.",
+ "apihelp-feedrecentchanges-param-days": "Сколькими днями ограничить результат.",
+ "apihelp-feedrecentchanges-param-limit": "Максимальное число возвращаемых результатов.",
+ "apihelp-feedrecentchanges-param-from": "Показать изменения с тех пор.",
+ "apihelp-feedrecentchanges-param-hideminor": "Скрыть малые правки.",
+ "apihelp-feedrecentchanges-param-hidebots": "Скрыть правки ботов.",
+ "apihelp-feedrecentchanges-param-hideanons": "Скрыть правки анонимных участников.",
+ "apihelp-feedrecentchanges-param-hideliu": "Скрыть правки зарегистрированных участников.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Скрыть отпатрулированные правки.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Скрыть правки текущего участника.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Скрыть категоризацию страниц.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Фильтр по меткам.",
+ "apihelp-feedrecentchanges-param-target": "Показать только правки на страницах, на которые ссылается данная.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Показать правки на страницах, ссылающихся на данную.",
+ "apihelp-feedrecentchanges-example-simple": "Список последних изменений.",
+ "apihelp-feedrecentchanges-example-30days": "Список последних изменений за 30 дней.",
+ "apihelp-feedwatchlist-summary": "Возвращает ленту списка наблюдения.",
+ "apihelp-feedwatchlist-param-feedformat": "Формат ленты.",
+ "apihelp-feedwatchlist-param-hours": "Список страниц, отредактированных столько часов назад.",
+ "apihelp-feedwatchlist-param-linktosections": "Ссылаться прямо на разделы с изменениями, если возможно.",
+ "apihelp-feedwatchlist-example-default": "Показать ленту списка наблюдения.",
+ "apihelp-feedwatchlist-example-all6hrs": "Показать все изменения на наблюдаемых страницах за последние 6 часов.",
+ "apihelp-filerevert-summary": "Возвращение файла к старой версии.",
+ "apihelp-filerevert-param-filename": "Целевое имя файла без префикса «Файл:».",
+ "apihelp-filerevert-param-comment": "Комментарий загрузки.",
+ "apihelp-filerevert-param-archivename": "Архивное название возвращаемой версии.",
+ "apihelp-filerevert-example-revert": "Откат <kbd>Wiki.png</kbd> к версии от <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Отображение справки указанных модулей.",
+ "apihelp-help-param-modules": "Модули, справку которых необходимо отобразить (значения параметров <var>action</var> и <var>format</var>, или <kbd>main</kbd>). Можно указывать подмодули с помощью <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Включить справку подмодулей заданного модуля.",
+ "apihelp-help-param-recursivesubmodules": "Включить справку подмодулей рекурсивно.",
+ "apihelp-help-param-helpformat": "Формат вывода справки.",
+ "apihelp-help-param-wrap": "Обернуть вывод в стандартную структуру API-ответа.",
+ "apihelp-help-param-toc": "Включить содержание в вывод HTML.",
+ "apihelp-help-example-main": "Помощь по главному модулю.",
+ "apihelp-help-example-submodules": "Помощь по модулю <kbd>action=query</kbd> и его подмодулям.",
+ "apihelp-help-example-recursive": "Вся справка на одной странице.",
+ "apihelp-help-example-help": "Справка по самому модулю справки.",
+ "apihelp-help-example-query": "Справка по двум подмодулям query.",
+ "apihelp-imagerotate-summary": "Поворот одного или нескольких изображений.",
+ "apihelp-imagerotate-param-rotation": "На сколько градусов по часовой стрелке повернуть изображение.",
+ "apihelp-imagerotate-param-tags": "Изменить метки записи в журнале загрузок.",
+ "apihelp-imagerotate-example-simple": "Повернуть <kbd>File:Example.png</kbd> на <kbd>90</kbd> градусов.",
+ "apihelp-imagerotate-example-generator": "Повернуть все изображения в <kbd>Category:Flip</kbd> на <kbd>180</kbd> градусов.",
+ "apihelp-import-summary": "Импорт страницы из другой вики или XML-файла.",
+ "apihelp-import-extended-description": "Обратите внимание, что HTTP POST-запрос должен быть осуществлён как загрузка файла (то есть, с использованием многотомных данных) при отправки файла через параметр <var>xml</var>.",
+ "apihelp-import-param-summary": "Описание записи журнала импорта.",
+ "apihelp-import-param-xml": "Загруженный XML-файл.",
+ "apihelp-import-param-interwikiprefix": "Для загруженных импортов: префикс интервики для неизвестных имён участников (а также известных, если задан <var>$1assignknownusers</var>).",
+ "apihelp-import-param-assignknownusers": "Связать правки с локальными участниками, когда участники с такими именами существуют.",
+ "apihelp-import-param-interwikisource": "Для импорта из других вики: импортируемая вики.",
+ "apihelp-import-param-interwikipage": "Для импорта из других вики: импортируемая страница.",
+ "apihelp-import-param-fullhistory": "Для импорта из других вики: импортировать полную историю, а не только текущую страницу.",
+ "apihelp-import-param-templates": "Для импорта из других вики: также импортировать все включённые шаблоны.",
+ "apihelp-import-param-namespace": "Импортировать в это пространство имён. Не может быть использовано одновременно с <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Импортировать в качестве подстраницы данной страницы. Не может быть использовано одновременно с <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Изменить метки записи в журнале импорта и нулевой правки в импортируемых страницах.",
+ "apihelp-import-example-import": "Импортировать [[meta:Help:ParserFunctions]] с полной историей правок в пространство имён 100.",
+ "apihelp-linkaccount-summary": "Связать аккаунт третьей стороны с текущим участником.",
+ "apihelp-linkaccount-example-link": "Начать связывание аккаунта с <kbd>Example</kdb>.",
+ "apihelp-login-summary": "Вход и получение аутентификационных cookie.",
+ "apihelp-login-extended-description": "Это действие должно быть использовано только в комбинации со [[Special:BotPasswords]]; использование этого модуля для входа в основной аккаунт устарело и может сбиться без предупреждения. Для безопасного входа в основной аккаунт, используйте <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Это действие не поддерживается и может сбиться без предупреждения. Для безопасного входа, используйте <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Имя участника.",
+ "apihelp-login-param-password": "Пароль.",
+ "apihelp-login-param-domain": "Домен (необязательно).",
+ "apihelp-login-param-token": "Токен входа, полученный при первом запросе.",
+ "apihelp-login-example-gettoken": "Получить токен входа.",
+ "apihelp-login-example-login": "Войти",
+ "apihelp-logout-summary": "Выйти и очистить данные сессии.",
+ "apihelp-logout-example-logout": "Выйти из текущего участника.",
+ "apihelp-managetags-summary": "Осуществление задач, связанных с изменением меток.",
+ "apihelp-managetags-param-operation": "Какую операцию выполнить:\n;create: Создать новую метку для ручного использования.\n;delete: Удалить метку из базы данных, что включает в себя удаление метки со всех версий и записей журналов, где она использовалось.\n;activate: Активировать изменение метки, позволив участникам устанавливать её вручную.\n;deactivate: Деактивировать изменение метки, запретив участникам устанавливать её вручную.",
+ "apihelp-managetags-param-tag": "Создаваемая, удаляемая, активируемая или деактивируемая метка. Создаваемая метка должна не существовать. Удаляемая метка должна существовать. Активируемая метка должна существовать и не быть использованной в каком-либо расширении. Деактивируемая метка должна существовать и быть заданной вручную.",
+ "apihelp-managetags-param-reason": "Причина создания, удаления, активирования или деактивирования метки (необязательно).",
+ "apihelp-managetags-param-ignorewarnings": "Игнорировать ли все предупреждения, возникающие во время операции.",
+ "apihelp-managetags-param-tags": "Изменить метки записи в журнале управления метками.",
+ "apihelp-managetags-example-create": "Создать метку с названием <kbd>spam</kbd> с причиной <kbd>For use in edit patrolling</kbd>.",
+ "apihelp-managetags-example-delete": "Удалить метку <kbd>vandlaism</kbd> с причиной <kbd>Misspelt</kbd>.",
+ "apihelp-managetags-example-activate": "Активировать метку <kbd>spam</kbd> с причиной <kbd>For use in edit patrolling</kbd>.",
+ "apihelp-managetags-example-deactivate": "Деактивировать метку <kbd>spam</kbd> с причиной <kbd>No longer required</kbd>.",
+ "apihelp-mergehistory-summary": "Объединение историй правок.",
+ "apihelp-mergehistory-param-from": "Название страницы, история из которой будет объединяться. Не может быть использовано одновременно с <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "Идентификатор страницы, история из которой будет объединяться. Не может быть использовано одновременно с <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Название страницы, в историю которой будет добавлено объединяемое. Не может быть использовано одновременно с <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "Идентификатор страницы, в историю которой будет добавлено объединяемое. Не может быть использовано одновременно с <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Временная метка, до которой версии будут перемещены из истории страницы-источника в историю целевой страницы. Если опущено, в целевую страницу будет перемещена вся история правок страницы-источника.",
+ "apihelp-mergehistory-param-reason": "Причина для объединения истории.",
+ "apihelp-mergehistory-example-merge": "Переместить всю историю правок страницы <kbd>Oldpage</kbd> на страницу <kbd>Newpage</kdb>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Переместить историю правок из <kbd>Oldpage</kbd>, совершённых до <kbd>2015-12-31T04:37:41Z</kbd>, на страницу <kbd>Newpage</kdb>.",
+ "apihelp-move-summary": "Переименование страницы.",
+ "apihelp-move-param-from": "Название переименовываемой страницы. Нельзя использовать одновременно с <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Идентификатор переименовываемой страницы. Нельзя использовать одновременно с <var>$1from</var>.",
+ "apihelp-move-param-to": "Новое название страницы.",
+ "apihelp-move-param-reason": "Причина переименования.",
+ "apihelp-move-param-movetalk": "Переименовать страницу обсуждения, если она есть.",
+ "apihelp-move-param-movesubpages": "Переименовать подстраницы, если это применимо.",
+ "apihelp-move-param-noredirect": "Не создавать перенаправление.",
+ "apihelp-move-param-watch": "Добавить страницу и перенаправление в список наблюдения текущего участника.",
+ "apihelp-move-param-unwatch": "Удалить страницу и перенаправление из списка наблюдения текущего участника.",
+ "apihelp-move-param-watchlist": "Безусловно добавить или удалить страницу из списка наблюдения текущего участника, использовать настройки или не менять наблюдение.",
+ "apihelp-move-param-ignorewarnings": "Игнорировать все предупреждения.",
+ "apihelp-move-param-tags": "Изменить метки записи в журнале переименований и нулевой правки на переименованной странице.",
+ "apihelp-move-example-move": "Переименовать <kbd>Badtitle</kbd> в <kbd>Goodtitle</kbd> без оставления перенаправления.",
+ "apihelp-opensearch-summary": "Поиск по вики с использованием протокола OpenSearch.",
+ "apihelp-opensearch-param-search": "Строка поиска.",
+ "apihelp-opensearch-param-limit": "Максимальное число возвращаемых результатов.",
+ "apihelp-opensearch-param-namespace": "Пространства имён для поиска. Игнорируется, если <var>$1search</var> начинается с корректного префикса пространства имён.",
+ "apihelp-opensearch-param-suggest": "Ничего не делать, если <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> ложно.",
+ "apihelp-opensearch-param-redirects": "Как обрабатывать перенаправления:\n;return: Вернуть само перенаправление.\n;resolve: Вернуть целевую страницу. Может вернуть меньше $1limit результатов.\nПо историческим причинам значением по умолчанию является «return» для $1format=json и «resolve» для остальных форматов.",
+ "apihelp-opensearch-param-format": "Формат вывода.",
+ "apihelp-opensearch-param-warningsaserror": "Если предупреждения возникают при <kbd>format=json</kbd>, вернуть ошибку API вместо того, чтобы игнорировать их.",
+ "apihelp-opensearch-example-te": "Найти страницы, начинающиеся с <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Смена настроек текущего участника.",
+ "apihelp-options-extended-description": "Менять можно только настройки, зарегистрированные в ядре или в одном из установленных расширений, а также настройки, чьи ключи начинаются с <code>userjs-</code> (предназначенные для использования в пользовательских скриптах).",
+ "apihelp-options-param-reset": "Сбрасывает настройки на установленные по умолчанию.",
+ "apihelp-options-param-resetkinds": "Список типов сбрасываемых настроек, если задана опция <var>$1reset</var>.",
+ "apihelp-options-param-change": "Список изменений в формате название=значение (например, skin=vector). Если значения не даётся (нет даже знака равенства), например, названиенастройки|другаянастройка|, настройка будет возвращена в своё значение по умолчанию. Если какое-либо значение должно содержать знак пайпа (<kbd>|</kbd>), используйте [[Special:ApiHelp/main#main/datatypes|альтернативный разделитель значений]] для корректного проведения операции.",
+ "apihelp-options-param-optionname": "Название настройки, которая должна быть установлена в значение, переданное через <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "Значение настройки, заданной <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Сбросить все настройки.",
+ "apihelp-options-example-change": "Изменить настройки <kbd>skin</kbd> и <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Сбросить все настройки, а затем изменить <kbd>skin</kbd> и <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Получение информации о модулях API.",
+ "apihelp-paraminfo-param-modules": "Список названий модулей (значения параметров <var>action</var> и <var>format</var>, или <kbd>main</kbd>). Можно указать подмодули с помощью <kbd>+</kbd>, все подмодули с помощью <kbd>+*</kbd>, или все подмодули рекурсивно с помощью <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Формат строк справки.",
+ "apihelp-paraminfo-param-querymodules": "Список модулей query (значения параметров <var>prop</var>, <var>meta</var> или <var>list</var>). Используйте <kbd>$1modules=query+foo</kbd> вместо <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Также получить информацию о главном модуле. Вместо этого используйте <kbd>$1modules=main</kbd>.",
+ "apihelp-paraminfo-param-pagesetmodule": "Также получить информацию о модуле pageset (предоставляющем titles= и синонимы).",
+ "apihelp-paraminfo-param-formatmodules": "Список названий форматных модулей (значения параметра <var>format</var>). Вместо этого используйте <var>$1modules</var>.",
+ "apihelp-paraminfo-example-1": "Показать информацию для <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, и <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Показать информацию для всех подмодулей <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "Парсит содержимое и возвращает результат парсинга.",
+ "apihelp-parse-extended-description": "См. различные prop-модули <kbd>[[Special:ApiHelp/query|action=query]]</kbd> для получения информации о текущей версии страницы.\n\nЕсть несколько способов указать текст для парсинга:\n# Указать страницу или версию, используя <var>$1page</var>, <var>$1pageid</var> или <var>$1oldid</var>.\n# Явно указать содержимое, используя <var>$1text</var>, <var>$1title</var> и <var>$1contentmodel</var>.\n# Указать описание правки. Параметру <var>$1prop</var> должно быть присвоено пустое значение.",
+ "apihelp-parse-param-title": "Название страницы, которой принадлежит текст. Если опущено, должен быть указан параметр <var>$1contentmodel</var>, и в качестве заголовка будет использовано [[API]].",
+ "apihelp-parse-param-text": "Распарсиваемый текст. Используйте <var>$1title</var> или <var>$1contentmodel</var> для управления моделью содержимого.",
+ "apihelp-parse-param-revid": "Номер версии, для <code><nowiki>{{REVISIONID}}</nowiki></code> и аналогичных переменных.",
+ "apihelp-parse-param-summary": "Анализируемое описание правки.",
+ "apihelp-parse-param-page": "Распарсить содержимое этой страницы. Не может быть использовано совместно с <var>$1text</var> и <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Анализировать содержимое этой страницы. Переопределяет <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Если значением <var>$1page</var> или <var>$1pageid</var> указано перенаправление, разрешить его.",
+ "apihelp-parse-param-oldid": "Распарсить содержимое этой версии. Переопределяет <var>$1page</var> и <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Какую информацию включить:",
+ "apihelp-parse-paramvalue-prop-text": "Возвращает текст распарсенного вики-текста.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Возвращает языковые ссылки из распарсенного вики-текста.",
+ "apihelp-parse-paramvalue-prop-categories": "Возвращает категории из проанализированного вики-текста.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Возвращает HTML-версию категорий.",
+ "apihelp-parse-paramvalue-prop-links": "Возвращает внутренние ссылки из распарсенного вики-текста.",
+ "apihelp-parse-paramvalue-prop-templates": "Возвращает шаблоны из проанализированного вики-текста.",
+ "apihelp-parse-paramvalue-prop-images": "Возвращает изображения из распарсенного вики-текста.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Возвращает внешние ссылки из распарсенного вики-текста.",
+ "apihelp-parse-paramvalue-prop-sections": "Возвращает разделы из проанализированного вики-текста.",
+ "apihelp-parse-paramvalue-prop-revid": "Добавляет идентификатор версии распарсенной страницы.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Добавляет название проанализированного вики-текста.",
+ "apihelp-parse-paramvalue-prop-headitems": "Возвращает элементы, которые следует поместить в <code>&lt;head&gt;</code> страницы.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Возвращает распарсенный <code>&lt;head&gt;</code> страницы.",
+ "apihelp-parse-paramvalue-prop-modules": "Возвращает использованные на странице модули ResourceLoader. Для загрузки, используйте <code>mw.loader.using()</code>. Одновременно с <kbd>modules</kbd> должно быть запрошено либо <kbd>jsconfigvars</kbd>, либо <kbd>encodedjsconfigvars</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы. Для их применения используйте <code>mw.condig.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы в виде JSON-строки.",
+ "apihelp-parse-paramvalue-prop-indicators": "Возвращает HTML-код индикаторов, использованных на данной странице.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Возвращает интервики-ссылки из распарсенного вики-текста.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Возвращает исходный распарсиваемый вики-текст.",
+ "apihelp-parse-paramvalue-prop-properties": "Возвращает различные свойства, объявленные в проанализированном вики-тексте.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Возвращает структурированный отчёт о лимите. Не возвращает данных, если задан <var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Возвращает HTML-версию отчёта о лимите. Не возвращает данных, если задан <var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-parsetree": "Дерево парсинга XML содержимого версии (требуется модель содержимого <code>$1</code>).",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Возвращает предупреждения, возникшие во время анализа.",
+ "apihelp-parse-param-wrapoutputclass": "CSS-класс, используемый для оборачивания вывода парсера.",
+ "apihelp-parse-param-pst": "Выполнить преобразование перед записью правки (PST) до того, как начать анализировать текст. Доступно только когда используется с текстом.",
+ "apihelp-parse-param-onlypst": "Выполнить преобразование перед записью правки (PST) входных данных, но не парсить их. Возвращает тот же вики-текст после применения PST. Доступно только при применении с <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Включает языковые ссылки, обеспечиваемые расширениями (для использования с <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Распарсить содержимое только секции с заданным номером.\n\nЕсли задан <kbd>new</kbd>, распарсить <var>$1text</var> и <var>$1sectiontitle</var> так, как будто добавлена новая секция на страницу.\n\n<kbd>new</kbd> доступен только при заданном <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "Название новой секции, когда <var>section</var> имеет значение <kbd>new</kbd>.\n\nВ отличие от редактирования страницы, оно не примет значение параметра <var>summary</var>, если опустить его или оставить пустым.",
+ "apihelp-parse-param-disablelimitreport": "Опустить отчёт о лимите («NewPP limit report») из результата парсинга.",
+ "apihelp-parse-param-disablepp": "Вместо этого используйте <var>$1disablelimitreport</var>.",
+ "apihelp-parse-param-disableeditsection": "Опустить ссылки на редактирование разделов из результата парсинга.",
+ "apihelp-parse-param-disabletidy": "Не проводить очистку HTML (например, с помощью tidy) результатов парсинга.",
+ "apihelp-parse-param-disablestylededuplication": "Не дедуплицируйте встроенные таблицы стилей в выходе парсера.",
+ "apihelp-parse-param-generatexml": "Сгенерировать дерево парсинга XML (требуется модель содержимого <code>$1</code>, замещено <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Проанализировать в режиме препросмотра.",
+ "apihelp-parse-param-sectionpreview": "Распарсить в режиме предпросмотра раздела (также активирует режим предпросмотра).",
+ "apihelp-parse-param-disabletoc": "Не включать в вывод содержание.",
+ "apihelp-parse-param-useskin": "Применить выбранную тему оформления к результату работы парсера. Может затронуть следующие свойства: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-param-contentformat": "Формат сериализации содержимого, использующийся во входном тексте. Доступен только при использовании с $1text.",
+ "apihelp-parse-param-contentmodel": "Модель содержимого входного текста. Если пропущена, должен быть задан $1title, и значение по умолчанию будет взято в зависимости от указанного названия. Доступно только при использовании с $1text.",
+ "apihelp-parse-example-page": "Парсинг страницы.",
+ "apihelp-parse-example-text": "Анализ вики-текста.",
+ "apihelp-parse-example-texttitle": "Парсинг вики-текста с заданным заголовком страницы.",
+ "apihelp-parse-example-summary": "Анализ описания правки.",
+ "apihelp-patrol-summary": "Патрулирование страницы или версии.",
+ "apihelp-patrol-param-rcid": "Идентификатор патрулируемой последней правки.",
+ "apihelp-patrol-param-revid": "Идентификатор патрулируемой версии.",
+ "apihelp-patrol-param-tags": "Изменить метки записи в журнале патрулирования.",
+ "apihelp-patrol-example-rcid": "Патрулировать недавние изменения.",
+ "apihelp-patrol-example-revid": "Отпатрулировать версию.",
+ "apihelp-protect-summary": "Изменение уровня защиты страницы.",
+ "apihelp-protect-param-title": "Название (раз)защищаемой страницы. Не может использоваться одновременно с $1pageid.",
+ "apihelp-protect-param-pageid": "Идентификатор (раз)защищаемой страницы. Не может использоваться одновременно с $1title.",
+ "apihelp-protect-param-protections": "Список уровней защиты в формате <kbd>действие=уровень</kbd> (например, <kbd>edit=sysop</kbd>). Уровень <kbd>all</kbd> означает, что кто угодно может осуществлять действие, то есть, нет ограничений.\n\n<strong>Примечания:</strong> Все неперечисленные действия потеряют уровни защиты.",
+ "apihelp-protect-param-expiry": "Временная метка истечения защиты. Если задана только одна метка, она будет использована для всех защит. Используйте <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> или <kbd>never</kbd> для бессрочных защит.",
+ "apihelp-protect-param-reason": "Причина (раз)защиты.",
+ "apihelp-protect-param-tags": "Изменить метки записи в журнале защиты.",
+ "apihelp-protect-param-cascade": "Активировать каскадную защиту (то есть, защитить включённые шаблоны и использованные изображения). Игнорируется, если ни один из заданных уровней не поддерживает каскадную защиту.",
+ "apihelp-protect-param-watch": "Если задан, добавить (раз)защищаемую страницу в список наблюдения текущего участника.",
+ "apihelp-protect-param-watchlist": "Безусловно добавить или удалить страницу из списка наблюдения текущего участника, использовать настройки или не менять наблюдение.",
+ "apihelp-protect-example-protect": "Защитить страницу.",
+ "apihelp-protect-example-unprotect": "Снять защиту страницы, установив ограничения <kbd>all</kbd> (то есть, позволив всем проводить действия над страницей).",
+ "apihelp-protect-example-unprotect2": "Снять защиту страницу, не указав ограничений.",
+ "apihelp-purge-summary": "Очистка кэша заданных страниц.",
+ "apihelp-purge-param-forcelinkupdate": "Обновить таблицы ссылок.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Обновить таблицу ссылок для данной страницы, а также всех страниц, использующих данную как шаблон.",
+ "apihelp-purge-example-simple": "Очистить кэш для страниц <kbd>Main Page</kbd> и <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Очистить кэш первых 10 страниц в основном пространстве имен.",
+ "apihelp-query-summary": "Запросить данные с и о MediaWiki.",
+ "apihelp-query-extended-description": "Все модификации данных сначала должны запросить соответствующий токен для предотвращения злоупотреблений с вредоносных сайтов.",
+ "apihelp-query-param-prop": "Какие использовать свойства для запрашиваемых страниц.",
+ "apihelp-query-param-list": "Какие списки использовать.",
+ "apihelp-query-param-meta": "Какие метаданные использовать.",
+ "apihelp-query-param-indexpageids": "Включить дополнительную секцию pageids, содержащую список идентификаторов всех возвращённых страниц.",
+ "apihelp-query-param-export": "Экспортировать текущую версию для всех данных или сгенерированных страниц.",
+ "apihelp-query-param-exportnowrap": "Вернуть экспортируемый XML без оборачивания его в XML-результат (тот же формат, что и в [[Special:Export]]). Можно использовать только одновременно с $1export.",
+ "apihelp-query-param-iwurl": "Возвращать ли полную ссылку, если названием является интервики-ссылка.",
+ "apihelp-query-param-rawcontinue": "Вернуть сырые данные в <samp>query-continue</samp> для продолжения.",
+ "apihelp-query-example-revisions": "Получить [[Special:ApiHelp/query+siteinfo|site info]] и [[Special:ApiHelp/query+revisions|последнее изменение]] для <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Получить последнее изменение для страниц, начиная с <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "Перечисление всех категорий.",
+ "apihelp-query+allcategories-param-from": "Категория, с которой начать перечисление.",
+ "apihelp-query+allcategories-param-to": "Категория, на которой закончить перечисление.",
+ "apihelp-query+allcategories-param-prefix": "Найти все названия категорий, начинающиеся с этого значения.",
+ "apihelp-query+allcategories-param-dir": "Порядок сортировки.",
+ "apihelp-query+allcategories-param-min": "Вернуть только категории, в которых не меньше заданного числа страниц.",
+ "apihelp-query+allcategories-param-max": "Вернуть только категории, в которых не больше заданного числа страниц.",
+ "apihelp-query+allcategories-param-limit": "Сколько категорий вернуть.",
+ "apihelp-query+allcategories-param-prop": "Какие свойства получить:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Добавляет количество страниц в категории.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Отмечает категории, скрытые магическим словом <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Составить список категорий с информацией о числе страниц в каждой из них.",
+ "apihelp-query+allcategories-example-generator": "Получить информацию о самой странице категории для категорий, начинающихся с <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "Перечисление всех удалённых версий указанного участника или в указанном пространстве имён.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Может быть использовано только одновременно с <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Не может быть использовано одновременно с <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+alldeletedrevisions-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+alldeletedrevisions-param-from": "Начать перечисление на этом заголовке.",
+ "apihelp-query+alldeletedrevisions-param-to": "Закончить перечисление на этом заголовке.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Найти все названия страниц, начинающиеся с этого значения.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Только правки с заданной меткой.",
+ "apihelp-query+alldeletedrevisions-param-user": "Только правки данного участника.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Не перечислять правки данного участника.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Перечислять только страницы этого пространства имён.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Примечание:</strong> Из-за [[mw:Special:MyLanguage/Manual:$wgMiserMode|жадного режима]] одновременное использование <var>$1user</var> и <var>$1namespace</var> может привести к меньшему, чем <var>$1limit</var>, числу результатов перед продолжением; в крайнем случае, может вернуться и ноль результатов.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "При использовании в качестве генератора, генерирует названия страниц вместо идентификаторов версий.",
+ "apihelp-query+alldeletedrevisions-example-user": "Перечислить последние 50 удалённых правок участника <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Перечислить первые 50 удалённых правок в основном пространстве.",
+ "apihelp-query+allfileusages-summary": "Перечисление всех использований файлов, в том числе несуществующих.",
+ "apihelp-query+allfileusages-param-from": "Название файла, с которого начать перечисление.",
+ "apihelp-query+allfileusages-param-to": "Название файла, на котором закончить перечисление.",
+ "apihelp-query+allfileusages-param-prefix": "Найти все названия файлов, начинающиеся с этого значения.",
+ "apihelp-query+allfileusages-param-unique": "Показывать только уникальные названия файлов. Не может быть использовано одновременно с $1prop=ids.\nПри использовании в качестве генератора, перечисляет целевые страницы вместо исходных.",
+ "apihelp-query+allfileusages-param-prop": "Какую информацию включить:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Добавляет идентификаторы страниц, использующих файл (не может быть использовано одновременно с $1unique).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Добавляет название файла.",
+ "apihelp-query+allfileusages-param-limit": "Сколько элементов вернуть.",
+ "apihelp-query+allfileusages-param-dir": "Порядок перечисления.",
+ "apihelp-query+allfileusages-example-B": "Список названий файлов, включая несуществующих, с идентификаторами использующих их страниц, начиная с <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Список уникальных названий файлов.",
+ "apihelp-query+allfileusages-example-unique-generator": "Список всех названий файлов с отметкой несуществующих.",
+ "apihelp-query+allfileusages-example-generator": "Список страниц, содержащих файлы.",
+ "apihelp-query+allimages-summary": "Перечисление всех файлов.",
+ "apihelp-query+allimages-param-sort": "Свойство для сортировки.",
+ "apihelp-query+allimages-param-dir": "Порядок перечисления.",
+ "apihelp-query+allimages-param-from": "Название изображения, с которого начать перечисление. Можно использовать только одновременно с $1sort=name.",
+ "apihelp-query+allimages-param-to": "Название изображения, на котором закончить перечисление. Можно использовать только одновременно с $1sort=name.",
+ "apihelp-query+allimages-param-start": "Временная метка, с которой начать перечисление. Можно использовать только одновременно с $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "Временная метка, на которой закончить перечисление. Можно использовать только одновременно с $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Найти все названия файлов, начинающиеся с этого значения. Можно использовать только одновременно с $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Ограничить изображения этим числом байтов снизу.",
+ "apihelp-query+allimages-param-maxsize": "Ограничить изображения этим числом байтов сверху.",
+ "apihelp-query+allimages-param-sha1": "SHA1-хэш этого изображения. Переопределяет $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1-хэш этого изображения в base 36 (используется в MediaWiki).",
+ "apihelp-query+allimages-param-user": "Вернуть только файлы, загруженные этим участником. Может быть использовано только одновременно с $1sort=timestamp и не может одновременно с $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Как отфильтровывать файлы, загруженные ботами. Может быть использовано только одновременно с $1sort=timestamp и не может одновременно с $1user.",
+ "apihelp-query+allimages-param-mime": "Какие типы MIME искать, например, <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Сколько изображений вернуть.",
+ "apihelp-query+allimages-example-B": "Показать список файлов, начиная с буквы <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Показать список недавно загруженных файлов, аналогично [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Показать список файлов с MIME-типом <kbd>image/png</kbd> или <kbd>image/gif</kbd>.",
+ "apihelp-query+allimages-example-generator": "Показать информацию о 4 файлах, начиная с буквы <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Перечисление всех ссылок, указывающих на заданное пространство имён.",
+ "apihelp-query+alllinks-param-from": "Название ссылки, с которой начать перечисление.",
+ "apihelp-query+alllinks-param-to": "Название ссылки, на которой закончить перечисление.",
+ "apihelp-query+alllinks-param-prefix": "Найти все названия ссылаемых страниц, начинающиеся с этого значения.",
+ "apihelp-query+alllinks-param-unique": "Показывать только уникальные названия ссылаемых страниц. Не может быть использовано одновременно с $1prop=ids.\nПри использовании в качестве генератора, перечисляет целевые страницы вместо исходных.",
+ "apihelp-query+alllinks-param-prop": "Какую информацию включить:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Добавляет идентификатор ссылаемой страницы (не может быть использовано одновременно с <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Добавляет название ссылки.",
+ "apihelp-query+alllinks-param-namespace": "Пространство имён для перечисления.",
+ "apihelp-query+alllinks-param-limit": "Сколько элементов вернуть.",
+ "apihelp-query+alllinks-param-dir": "Порядок перечисления.",
+ "apihelp-query+alllinks-example-B": "Список заголовков ссылаемых страниц, включая несуществующих, с идентификаторами страниц, ссылающихся на них, начиная с <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Список уникальных названий ссылаемых страниц.",
+ "apihelp-query+alllinks-example-unique-generator": "Список всех ссылаемых страниц с отметкой несуществующих.",
+ "apihelp-query+alllinks-example-generator": "Список страниц, содержащих ссылки.",
+ "apihelp-query+allmessages-summary": "Возвращает сообщения с этого сайта.",
+ "apihelp-query+allmessages-param-messages": "Какие сообщения выводить. <kbd>*</kbd> (по умолчанию) означает «все сообщения».",
+ "apihelp-query+allmessages-param-prop": "Какие свойства получить:",
+ "apihelp-query+allmessages-param-enableparser": "Установите, чтобы активировать парсер, который будет обрабатывать вики-текст сообщений (подставлять магические слова, обрабатывать шаблоны, и так далее).",
+ "apihelp-query+allmessages-param-nocontent": "Если установлен, ничего не делать с содержимым сообщений перед выводом.",
+ "apihelp-query+allmessages-param-includelocal": "Также включить локальные сообщения, то есть, сообщения, не существующие в программе, но существующие в пространстве имён {{ns:MediaWiki}}. Это перечислит все страницы из пространства {{ns:MediaWiki}}, поэтому в результат также могут попасть страницы, не являющимися сообщениями — например, [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Аргументы, подставляемые в сообщение.",
+ "apihelp-query+allmessages-param-filter": "Вернуть только сообщения, чьи названия содержат эту подстроку.",
+ "apihelp-query+allmessages-param-customised": "Вернуть только сообщения в этом состоянии кастомизации.",
+ "apihelp-query+allmessages-param-lang": "Вернуть сообщения на этом языке.",
+ "apihelp-query+allmessages-param-from": "Вернуть сообщения, начиная с данного.",
+ "apihelp-query+allmessages-param-to": "Вернуть сообщения, заканчивая на данном.",
+ "apihelp-query+allmessages-param-title": "Название страницы, используемой для контекста при анализе сообщения (для опции $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Вернуть сообщения с заданным префиксом.",
+ "apihelp-query+allmessages-example-ipb": "Показать сообщения, начинающиеся с <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Показать сообщения <kbd>august</kbd> и <kbd>mainpage</kbd> на немецком языке.",
+ "apihelp-query+allpages-summary": "Перечисление всех страниц в данном пространстве имён.",
+ "apihelp-query+allpages-param-from": "Название страницы, с которой начать перечисление.",
+ "apihelp-query+allpages-param-to": "Название страницы, на которой закончить перечисление.",
+ "apihelp-query+allpages-param-prefix": "Найти все названия страниц, начинающиеся с этого значения.",
+ "apihelp-query+allpages-param-namespace": "Пространство имён для перечисления.",
+ "apihelp-query+allpages-param-filterredir": "Какие страницы перечислять.",
+ "apihelp-query+allpages-param-minsize": "Ограничить страницы этим числом байтов снизу.",
+ "apihelp-query+allpages-param-maxsize": "Ограничить страницы этим числом байтов сверху.",
+ "apihelp-query+allpages-param-prtype": "Перечислить только защищённые страницы.",
+ "apihelp-query+allpages-param-prlevel": "Отфильтровывать страницы, основываясь на уровне защиты (должно быть использовано одновременно с параметром $1prtype=).",
+ "apihelp-query+allpages-param-prfiltercascade": "Отфильтровывать страницы, основываясь на каскадности (игнорируется, если $1prtype не задан).",
+ "apihelp-query+allpages-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+allpages-param-dir": "Порядок перечисления.",
+ "apihelp-query+allpages-param-filterlanglinks": "Отфильтровывать страницы, основываясь на наличие на странице языковых ссылок. Обратите внимание: языковые ссылки, добавленные расширениями, могут не учитываться.",
+ "apihelp-query+allpages-param-prexpiry": "Отфильтровывать страницы, основываясь на длительности защиты:\n;indefinite: Получить только страницы с неограниченной защитой.\n;definite: Получить только страницы с заданной длительностью защиты.\n;all: Получить страницы с любой длительностью защиты.",
+ "apihelp-query+allpages-example-B": "Показать список страниц, начиная с буквы <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Получить информацию о четырёх страницах, начиная с буквы <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Показать содержимое первых двух страниц, не являющихся перенаправлениями, начиная с <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Перечисление всех перенаправлений на заданное пространство имён.",
+ "apihelp-query+allredirects-param-from": "Название перенаправления, с которого начать перечисление.",
+ "apihelp-query+allredirects-param-to": "Название перенаправления, на котором закончить перечисление.",
+ "apihelp-query+allredirects-param-prefix": "Найти все названия целевых страниц, начинающихся с этого значения.",
+ "apihelp-query+allredirects-param-unique": "Показывать только уникальные целевые страницы. Не может быть использовано одновременно с $1prop=ids|fragment|interwiki. При использовании в качестве генератора, перечисляет целевые страницы вместо исходных.",
+ "apihelp-query+allredirects-param-prop": "Какую информацию включить:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Добавляет идентификатор перенаправляемой страницы (не может быть использовано одновременно с <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Добавляет название перенаправления.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Добавляет фрагмент из перенаправления при наличии (не может быть использовано одновременно с <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Добавляет префикс интервики к редиректу при наличии (не может быть использовано одновременно с <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "Пространство имён для перечисления.",
+ "apihelp-query+allredirects-param-limit": "Сколько элементов вернуть.",
+ "apihelp-query+allredirects-param-dir": "Порядок перечисления.",
+ "apihelp-query+allredirects-example-B": "Список целевых страниц, в включая несуществующих, с идентификаторами перенаправлений, начиная с буквы <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Список уникальных целевых страниц.",
+ "apihelp-query+allredirects-example-unique-generator": "Список всех целевых страниц с отметкой несуществующих.",
+ "apihelp-query+allredirects-example-generator": "Список страниц, содержащих перенаправления.",
+ "apihelp-query+allrevisions-summary": "Перечисление всех версий.",
+ "apihelp-query+allrevisions-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+allrevisions-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+allrevisions-param-user": "Только правки данного участника.",
+ "apihelp-query+allrevisions-param-excludeuser": "Не перечислять правки данного участника.",
+ "apihelp-query+allrevisions-param-namespace": "Перечислять только страницы этого пространства имён.",
+ "apihelp-query+allrevisions-param-generatetitles": "При использовании в качестве генератора, генерирует названия страниц вместо идентификаторов версий.",
+ "apihelp-query+allrevisions-example-user": "Перечислить последние 50 правок участника <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Перечислить первые 50 правок в основном пространстве.",
+ "apihelp-query+mystashedfiles-summary": "Получить список файлов во временном хранилище текущего участника.",
+ "apihelp-query+mystashedfiles-param-prop": "Какие свойства файлов запрашивать.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Запросить размер и разрешение изображения.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Запросить MIME- и медиа-тип файла.",
+ "apihelp-query+mystashedfiles-param-limit": "Сколько файлов получить.",
+ "apihelp-query+mystashedfiles-example-simple": "Получить ключ, размер и разрешение файлов во временном хранилище текущего участника.",
+ "apihelp-query+alltransclusions-summary": "Перечисление всех включений (страниц, вставленных с помощью &#123;&#123;x&#125;&#125;), включая несуществующие.",
+ "apihelp-query+alltransclusions-param-from": "Название включения, с которого начать перечисление.",
+ "apihelp-query+alltransclusions-param-to": "Название включения, на котором закончить перечисление.",
+ "apihelp-query+alltransclusions-param-prefix": "Найти все названия включений, начинающиеся с этого значения.",
+ "apihelp-query+alltransclusions-param-unique": "Показывать только уникальные названия включений. Не может быть использовано одновременно с $1prop=ids.\nПри использовании в качестве генератора, перечисляет целевые страницы вместо исходных.",
+ "apihelp-query+alltransclusions-param-prop": "Какую информацию включить:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Добавляет идентификаторы включающих страниц (не может быть использовано одновременно с $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Добавляет название включения.",
+ "apihelp-query+alltransclusions-param-namespace": "Пространство имён для перечисления.",
+ "apihelp-query+alltransclusions-param-limit": "Сколько элементов вернуть.",
+ "apihelp-query+alltransclusions-param-dir": "Порядок перечисления.",
+ "apihelp-query+alltransclusions-example-B": "Списки заголовков включаемых страниц, в том числе несуществующих, с идентификаторами включающих их страниц, начиная с буквы <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Список уникальных включаемых названий.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Список всех включаемых страниц с отметкой несуществующих.",
+ "apihelp-query+alltransclusions-example-generator": "Список страниц, содержащих включения.",
+ "apihelp-query+allusers-summary": "Перечисление всех зарегистрированных участников.",
+ "apihelp-query+allusers-param-from": "Ник, с которого начать перечисление.",
+ "apihelp-query+allusers-param-to": "Ник, на котором закончить перечисление.",
+ "apihelp-query+allusers-param-prefix": "Найти все ники, начинающиеся с этого значения.",
+ "apihelp-query+allusers-param-dir": "Порядок сортировки.",
+ "apihelp-query+allusers-param-group": "Включать участников только из данных групп.",
+ "apihelp-query+allusers-param-excludegroup": "Исключать участников из данных групп.",
+ "apihelp-query+allusers-param-rights": "Включать только участников с данными правами. Участники с правами, предоставляемыми автоматически присваиваемыми группами — такими, как *, user или autoconfirmed, — не включаются.",
+ "apihelp-query+allusers-param-prop": "Какую информацию включить:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Добавляет информацию о текущих блокировках участника.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Перечисляет группы, в которые входит участник. Это значительно нагружает сервера, что может привести к возвращению меньшего числа результатов, чем указанный лимит.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Перечисляет группы, в которые участник был включён автоматически.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Перечисляет права, которые есть у участника.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Добавляет счётчик правок участника.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Добавляет метку времени, когда участник был зарегистрирован, если она доступна (может быть пустым).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Добавляет центральный идентификатор и статус прикрепления участника.",
+ "apihelp-query+allusers-param-limit": "Сколько ников вернуть.",
+ "apihelp-query+allusers-param-witheditsonly": "Перечислять только участников, совершавших правки.",
+ "apihelp-query+allusers-param-activeusers": "Перечислять только участников, которые были активны в последние $1 {{PLURAL:$1|день|дня|дней}}.",
+ "apihelp-query+allusers-param-attachedwiki": "С <kbd>$1prop=centralids</kbd>, также отображает, прикреплён ли к вики участник с этим идентификатором.",
+ "apihelp-query+allusers-example-Y": "Список участников, начиная с <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Получение информации о текущем статусе аутентификации.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Проверить, достаточен ли текущий статус для осуществления чувствительных к безопасности операций.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Получить информацию о аутентификационных запросах, необходимых для указанного действия аутентификации.",
+ "apihelp-query+authmanagerinfo-example-login": "Получить запросы, которые могут быть использованы на момент начала входа.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Получить запросы, которые могут быть использованы в момент начала авторизации с объединёнными полями формы.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Проверить, необходима ли аутентификация для действия <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Получение списка страниц, ссылающихся на данную страницу.",
+ "apihelp-query+backlinks-param-title": "Заголовок для поиска. Не может быть использован одновременно с <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "Идентификатор страницы для поиска. Не может быть использован одновременно с <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "Пространство имён для перечисления.",
+ "apihelp-query+backlinks-param-dir": "Порядок перечисления.",
+ "apihelp-query+backlinks-param-filterredir": "Как обрабатывать перенаправления. Если присвоено значение <kbd>nonredirects</kbd> при заданном <var>$1redirect</var>, это применяется только ко второму уровню.",
+ "apihelp-query+backlinks-param-limit": "Сколько страниц вернуть. Если задан <var>$1redirect</var>, лимит применяется к каждому уровню по отдельности (что означает, что всего может вернуться до 2 * <var>$1limit</var> результатов).",
+ "apihelp-query+backlinks-param-redirect": "Если ссылающаяся страница является перенаправлением, найти также все страницы, которые ссылаются на это перенаправление. Максимальный лимит становится в два раза меньше.",
+ "apihelp-query+backlinks-example-simple": "Показать ссылки на <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Получить информацию о страницах, ссылающихся на <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Перечисление всех заблокированных участников и IP-адресов.",
+ "apihelp-query+blocks-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+blocks-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+blocks-param-ids": "Список идентификаторов блокировки (необязательно).",
+ "apihelp-query+blocks-param-users": "Список искомых участников (необязательно).",
+ "apihelp-query+blocks-param-ip": "Получить все блокировки, применённые к этому IP-адресу или диапазону CIDR, включая блокировки диапазонов.\nНе может быть использовано одновременно с <var>$3users</var>. Диапазоны CIDR шире IPv4/$1 или IPv6/$2 не поддерживаются.",
+ "apihelp-query+blocks-param-limit": "Максимальное число блокировок в списке.",
+ "apihelp-query+blocks-param-prop": "Какие свойства получить:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Добавляет идентификатор блокировки.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Добавляет ник заблокированного участника.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Добавляет идентификатор заблокированного участника.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Добавляет ник заблокировавшего участника.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Добавляет идентификатор заблокировавшего участника.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Добавляет метку времени, когда была дана блокировка.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Добавляет метку времени, когда блокировка истечёт.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Добавляет причину блокировки.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Добавляет диапазон IP-адресов, затронутых блокировкой.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Добавляет бану метку (autoblock, anonoly, и так далее).",
+ "apihelp-query+blocks-param-show": "Показать только элементы, удовлетворяющие этим критериям.\nНапример, чтобы отобразить только бессрочные блокировки IP-адресов, установите <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Список блокировок.",
+ "apihelp-query+blocks-example-users": "Список блокировок участников <kbd>Alice</kbd> и <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Перечисление всех категорий, которым принадлежит страница.",
+ "apihelp-query+categories-param-prop": "Какие дополнительные свойства получить для каждой категории:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Добавляет ключ сортировки (шестнадцатеричная строка) и префикс ключа сортировки (человеко-читаемая часть) для категории.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Добавляет метку времени, когда категория была добавлена.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Отмечает категории, скрытые магическим словом <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Какие типы категорий показать.",
+ "apihelp-query+categories-param-limit": "Сколько категорий вернуть.",
+ "apihelp-query+categories-param-categories": "Перечислять только данные категории. Полезно для проверки, включена ли конкретная страница в конкретную категорию.",
+ "apihelp-query+categories-param-dir": "Порядок перечисления.",
+ "apihelp-query+categories-example-simple": "Получить список категорий, в которые включена страница <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categories-example-generator": "Получить информацию о всех категориях, использованных на странице <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Возвращение информации о конкретных категориях.",
+ "apihelp-query+categoryinfo-example-simple": "Получить информацию о <kbd>Category:Foo</kbd> и <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Перечисление всех страниц в данной категории.",
+ "apihelp-query+categorymembers-param-title": "Страницы какой категории перечислять (обязательно). Префикс <kbd>{{ns:category}}:</kbd> должен быть включён. Не может быть использовано одновременно с <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "Идентификатор перечисляемой категории. Не может быть использовано одновременно с <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Какую информацию включить:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Добавляет идентификатор страницы.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Добавляет заголовок и идентификатор пространства имён страницы.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Добавляет ключ, используемый для сортировки внутри категории (шестнадцатеричная строка).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Добавляет префикс ключа, используемого для сортировки внутри категории (человеко-читаемая часть ключа).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Добавляет тип категоризованной страницы (<samp>page</samp>, <samp>subcat</samp> или <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Добавляет метку времени, когда страница была включена.",
+ "apihelp-query+categorymembers-param-namespace": "Включать только страница из этих пространств имён. Обратите внимание, что вместо <kbd>$1namespace=14</kbd> или <kbd>6</kbd> могут быть использованы <kbd>$1type=subcat</kbd> или <kbd>$1type=file</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Какие типы страниц включать. Игнорируется при <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "Максимальное число возвращаемых страниц.",
+ "apihelp-query+categorymembers-param-sort": "Свойство для сортировки.",
+ "apihelp-query+categorymembers-param-dir": "Порядок сортировки.",
+ "apihelp-query+categorymembers-param-start": "Временная метка, с которой начать перечисление. Может быть использовано только одновременно с <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Временная метка, на которой закончить перечисление. Может быть использовано только одновременно с <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Ключ сортировки, с которого начать перечисление, возвращённый <kbd>$1prop=sortkey</kbd>. Может быть использовано только одновременно с <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Ключ сортировки, на котором закончить перечисление, возвращённый <kbd>$1prop=sortkey</kbd>. Может быть использовано только одновременно с <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Префикс ключа сортировки, с которого начать перечисление. Может быть использовано только с <kbd>$1sort=sortkey</kbd>. Переопределяет <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Префикс ключа сортировки, <strong>перед</strong> которым закончить перечисление (не <strong>на<strong> котором; если это значение существует, оно не будет включено!). Может быть использовано только одновременно с $1sort=sortkey. Переопределяет $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Используйте вместо этого $1starthexsortkey.",
+ "apihelp-query+categorymembers-param-endsortkey": "Используйте вместо этого $1endhexsortkey.",
+ "apihelp-query+categorymembers-example-simple": "Получить первые 10 страниц в <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Получить информацию о первых 10 страницах в <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Получение списка зарегистрированных и количества анонимных редакторов страницы.",
+ "apihelp-query+contributors-param-group": "Включать только участников из данных групп. Неявные или автоматически присваиваемые группы, вроде *, user или autoconfirmed, не считаются.",
+ "apihelp-query+contributors-param-excludegroup": "Исключать участников из заданных групп. Неявные или автоматически присваиваемые группы, вроде *, user или autoconfirmed, не считаются.",
+ "apihelp-query+contributors-param-rights": "Включать только участников с данными правами. Участники с правами, предоставляемыми неявными или автоматически присваиваемыми группами — такими, как *, user или autoconfirmed, — не считаются.",
+ "apihelp-query+contributors-param-excluderights": "Исключать участников с данными правами. Участники с правами, предоставляемыми неявными или автоматически присваиваемыми группами — такими, как *, user или autoconfirmed, — не считаются.",
+ "apihelp-query+contributors-param-limit": "Сколько редакторов вернуть.",
+ "apihelp-query+contributors-example-simple": "Показать редакторов страницы <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Получение информации об удалённых правках.",
+ "apihelp-query+deletedrevisions-extended-description": "Может быть использовано несколькими способами:\n# Получение удалённых правок для набора страниц, заданного с помощью названий или идентификаторов. Сортируется по названиям и временным меткам.\n# Получение данных о наборе удалённых правок, заданных с помощью их revid. Сортируется по идентификаторам версий.",
+ "apihelp-query+deletedrevisions-param-start": "Временная метка, с которой начать перечисление. Игнорируется при обработке списка идентификаторов версий.",
+ "apihelp-query+deletedrevisions-param-end": "Временная метка, на которой закончить перечисление. Игнорируется при обработке списка идентификаторов версий.",
+ "apihelp-query+deletedrevisions-param-tag": "Только правки с заданной меткой.",
+ "apihelp-query+deletedrevisions-param-user": "Только правки данного участника.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Не перечислять правки данного участника.",
+ "apihelp-query+deletedrevisions-example-titles": "Список удалённых правок страниц <kbd>Main Page</kbd> и <kbd>Talk:Main Page</kbd> с содержимым.",
+ "apihelp-query+deletedrevisions-example-revids": "Список информации для удалённой правки <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Перечисление удалённых правок.",
+ "apihelp-query+deletedrevs-extended-description": "Работает в трёх режимах:\n# Перечисление удалённых правок для заданных названий страниц, сортируется по временным меткам.\n# Перечисление удалённого вклада заданного участника, сортируется по временным меткам (названия страниц не указываются).\n# Перечисление удалённых правок в заданном пространстве имён, сортируется по названиям страниц и временным меткам (названия страниц и $1user не указываются).\n\nОпределённые параметры применяются только к некоторым режимам и игнорируются в других.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Мод|Моды}}: $2",
+ "apihelp-query+deletedrevs-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+deletedrevs-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+deletedrevs-param-from": "Начать перечисление на этом заголовке.",
+ "apihelp-query+deletedrevs-param-to": "Закончить перечисление на этом заголовке.",
+ "apihelp-query+deletedrevs-param-prefix": "Найти все названия страниц, начинающиеся с этого значения.",
+ "apihelp-query+deletedrevs-param-unique": "Перечислять только одну правку на каждую страницу.",
+ "apihelp-query+deletedrevs-param-tag": "Только правки с заданной меткой.",
+ "apihelp-query+deletedrevs-param-user": "Только правки данного участника.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Не перечислять правки данного участника.",
+ "apihelp-query+deletedrevs-param-namespace": "Перечислять только страницы этого пространства имён.",
+ "apihelp-query+deletedrevs-param-limit": "Максимальное количество правок в списке.",
+ "apihelp-query+deletedrevs-param-prop": "Какие свойства возвращать:\n;revid: Добавляет идентификатор удалённой правки.\n;parentid: Добавляет идентификатор предыдущей версии страницы.\n;user: Добавляет ник участника, сделавшего правку.\n;userid: Добавляет идентификатор участника, сделавшего правку.\n;comment: Добавляет описание правки.\n;parsedcomment: Добавляет распарсенное описание правки.\n;minor: Отмечает, была ли правка малым.\n;len: Добавляет длину (в байтах) правки.\n;sha1: Добавляет хэш SHA-1 (base 16) правки.\n;content: Добавляет содержимое правки.\n;token: <span class=\"apihelp-deprecated\">Устарело.</span> Возвращает токен редактирования.\n;tags: Метки правки.",
+ "apihelp-query+deletedrevs-example-mode1": "Список последних удалённых правок страниц <kbd>Main Page</kbd> и <kbd>Talk:Main Page</kbd> с содержимым (режим 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Список последних 50 удалённых правок участника <kbd>Bob</kbd> (режим 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Список последних 50 удалённых правок в основном пространстве имён (режим 3)",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Список последних 50 удалённых страниц в пространстве имён {{ns:talk}} (режим 3).",
+ "apihelp-query+disabled-summary": "Этот запрос-модуль был отключён.",
+ "apihelp-query+duplicatefiles-summary": "Перечисление всех файлов, являющихся дубликатами данных, основываясь на сравнении хэш-сумм.",
+ "apihelp-query+duplicatefiles-param-limit": "Сколько дубликатов вернуть.",
+ "apihelp-query+duplicatefiles-param-dir": "Порядок перечисления.",
+ "apihelp-query+duplicatefiles-param-localonly": "Искать только файлы в локальном репозитории.",
+ "apihelp-query+duplicatefiles-example-simple": "Поиск дубликатов [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Поиск дубликатов всех файлов.",
+ "apihelp-query+embeddedin-summary": "Поиск всех страниц, встраивающих (включающих) данное название.",
+ "apihelp-query+embeddedin-param-title": "Искомое название. Не может использоваться вместе с $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "Искомый идентификатор страницы. Не может быть использован одновременно с $1title.",
+ "apihelp-query+embeddedin-param-namespace": "Пространство имён для перечисления.",
+ "apihelp-query+embeddedin-param-dir": "Порядок перечисления.",
+ "apihelp-query+embeddedin-param-filterredir": "Как фильтровать перенаправления.",
+ "apihelp-query+embeddedin-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+embeddedin-example-simple": "Показать включения <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Получить информацию о страницах, включающих <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "Получение всех внешних ссылок (не интервик) для данной страницы.",
+ "apihelp-query+extlinks-param-limit": "Сколько ссылок вернуть.",
+ "apihelp-query+extlinks-param-protocol": "Протокол ссылки. Если оставлено пустым, а <var>$1query</var> задано, будут найдены ссылки с протоколом <kbd>http</kbd>. Оставьте пустым и <var>$1query</var>, и данный параметр, чтобы получить список всех внешних ссылок.",
+ "apihelp-query+extlinks-param-query": "Поисковый запрос без протокола. Полезно для проверки, содержит ли определённая страница определённую внешнюю ссылку.",
+ "apihelp-query+extlinks-param-expandurl": "Раскрыть зависимые от протокола ссылки с какноничным протоколом.",
+ "apihelp-query+extlinks-example-simple": "Получить внешние ссылки на странице <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "Перечислить страницы, содержащие данную ссылку.",
+ "apihelp-query+exturlusage-param-prop": "Какую информацию включить:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Добавляет идентификатор страницы.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Добавляет заголовок и идентификатор пространства имён страницы.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Добавляет ссылку, использованную на этой странице.",
+ "apihelp-query+exturlusage-param-protocol": "Протокол ссылки. Если оставлено пустым, а <var>$1query</var> задано, будут найдены ссылки с протоколом <kbd>http</kbd>. Оставьте пустым и <var>$1query</var>, и данный параметр, чтобы получить список всех внешних ссылок.",
+ "apihelp-query+exturlusage-param-query": "Поисковый запрос без протокола. См. [[Special:LinkSearch]]. Оставьте пустым для получение списка всех внешних ссылок.",
+ "apihelp-query+exturlusage-param-namespace": "Пространства имён для перечисления.",
+ "apihelp-query+exturlusage-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+exturlusage-param-expandurl": "Раскрыть зависимые от протокола ссылки с какноничным протоколом.",
+ "apihelp-query+exturlusage-example-simple": "Показать страницы, ссылающиеся на <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "Перечисление всех удалённых файлов.",
+ "apihelp-query+filearchive-param-from": "Название изображения, с которого начать перечисление.",
+ "apihelp-query+filearchive-param-to": "Название изображения, на котором закончить перечисление.",
+ "apihelp-query+filearchive-param-prefix": "Найти все названия файлов, начинающиеся с этого значения.",
+ "apihelp-query+filearchive-param-limit": "Сколько всего изображений вернуть.",
+ "apihelp-query+filearchive-param-dir": "Порядок перечисления.",
+ "apihelp-query+filearchive-param-sha1": "SHA1-хэш этого изображения. Переопределяет $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "SHA1-хэш этого изображения в base 36 (используется в MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "Какую информацию получить:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Добавляет SHA1-хэш изображения.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Добавляет метку времени загрузки файловой версии.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Добавляет участника, загрузившего изображение.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Добавляет размер изображения в байтах, высоту, ширину и количество использующих страниц (если применимо).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Синоним для size.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Добавляет описание файловой версии.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Распарсить описание файловой версии.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Добавляет MIME-тип изображения.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Добавляет медиа-тип изображения.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Перечисляет метаданные Exif для файловой версии.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Добавляет глубину цвета файловой версии.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Добавляет имя архивной версии файла.",
+ "apihelp-query+filearchive-example-simple": "Список всех удалённых файлов.",
+ "apihelp-query+filerepoinfo-summary": "Возвращает мета-информацию о файловых репозиториях, настроенных в вики.",
+ "apihelp-query+filerepoinfo-param-prop": "Какие свойства хранилища получить (на некоторых вики может быть доступно больше):\n;apiutl: Ссылка на API хранилища — полезно для получения информации об изображении с хоста.\n;name: Ключ хранилища — используется, например, <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> и возвращаемых [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname: Человеко-читаемое название хранилища.\n;rooturl: Корневая ссылка для путей к файлам.\n;local: Определяет, является ли хранилище локальным, или нет.",
+ "apihelp-query+filerepoinfo-example-simple": "Получить информацию о файловых репозиториях.",
+ "apihelp-query+fileusage-summary": "Поиск всех страниц, использующих данный файл.",
+ "apihelp-query+fileusage-param-prop": "Какие свойства получить:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "Идентификатор каждой страницы.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Заголовок каждой страницы.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Метка, является ли страница перенаправлением.",
+ "apihelp-query+fileusage-param-namespace": "Включить страницы только из данных пространств имён.",
+ "apihelp-query+fileusage-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+fileusage-param-show": "Показать только элементы, соответствующие этим критериям:\n;redirect: Показать только перенаправления.\n;!redirect: Показать только не перенаправления.",
+ "apihelp-query+fileusage-example-simple": "Получить список страниц, использующих [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Получить информацию о страницах, использующих [[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "Возвращает информацию о файле и историю загрузок.",
+ "apihelp-query+imageinfo-param-prop": "Какую информацию о файле получить:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Добавляет метку времени загрузки файловой версии.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Добавляет участников, загрузивших каждую файловую версию.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Добавляет идентификаторы участников, загрузивших каждую файловую версию.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Комментарий к версии.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Распарсенный комментарий к версии.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Добавляет каноничное название файла.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Возвращает ссылку на файл и страницу описания.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Добавляет размер файла в байтах, высоту, ширину и количество использующих страниц (если применимо).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Синоним для size.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Добавляет SHA1-хэш файла.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Добавляет MIME-тип файла.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Добавляет MIME-тип миниатюры файла (требуется url и параметр $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Добавляет медиа-тип файла.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Перечисляет метаданные Exif для файловой версии.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Перечисляет общие для данного формата метаданные для файловой версии.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Перечисляет структурированные метаданные, собранные из нескольких источников. Результат отдаётся в формате HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Добавляет имя архивной версии файла.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Добавляет глубину цвета файловой версии.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Используется страницей Special:Upload для получения информации о существовании файла. Не предназначено для использования за пределами ядра MediaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Добавляет указание на то, находится ли файл в списке [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-limit": "Сколько версий каждого файла вернуть.",
+ "apihelp-query+imageinfo-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+imageinfo-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+imageinfo-param-urlwidth": "Если задан $2prop=url, будет возвращена ссылка на изображение, масштабированное до указанной ширины. Из соображений производительности, при использовании этой опции будет возвращено не более $1 файлов.",
+ "apihelp-query+imageinfo-param-urlheight": "Аналогично $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Какую версию метаданных использовать. Если указано <kbd>latest</kbd>, будет использована последняя версия. Для обратной совместимости, значение по умолчанию — <kbd>1</kbd>.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "На каком языке запрашивать расширенные метаданные. Это затрагивает как переводы, если их доступно несколько, так и способ форматирования чисел и других значений.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Если для свойства расширенных метаданных доступны переводы, запросить их все.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Если задано и непустое, только эти ключи будут возвращены для $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Строковой параметр, зависящий от обработчика. Например, для PDF можно использовать <kbd>page15-100px</kbd>. Должен быть использован <var>$1urlwidth</var>, не противоречащий с <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Если задан <kbd>$2prop=badfile</kbd>, этот заголовок страницы будет использован для анализа [[MediaWiki:Bad image list]].",
+ "apihelp-query+imageinfo-param-localonly": "Искать только файлы в локальном репозитории.",
+ "apihelp-query+imageinfo-example-simple": "Заросить информацию о текущей версии [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Запросить информацию о версиях [[:File:Test.jpg]] с 2008 года и позже.",
+ "apihelp-query+images-summary": "Возвращает все файлы, содержащиеся на данных страницах.",
+ "apihelp-query+images-param-limit": "Сколько файлов вернуть.",
+ "apihelp-query+images-param-images": "Перечислять только данные файлы. Полезно для проверки, включает ли конкретная страница конкретный файл.",
+ "apihelp-query+images-param-dir": "Порядок перечисления.",
+ "apihelp-query+images-example-simple": "Получить список файлов, использованных на [[Main Page]].",
+ "apihelp-query+images-example-generator": "Получить информацию о всех файлах, использованных на [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Поиск всех страниц, использующих данный файл.",
+ "apihelp-query+imageusage-param-title": "Искомое название. Не может использоваться вместе с $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "Искомый идентификатор страницы. Не может быть использован одновременно с $1title.",
+ "apihelp-query+imageusage-param-namespace": "Пространство имён для перечисления.",
+ "apihelp-query+imageusage-param-dir": "Порядок перечисления.",
+ "apihelp-query+imageusage-param-filterredir": "Как обрабатывать перенаправления. Если присвоено значение nonredirects при заданном $1redirect, это применяется только ко второму уровню.",
+ "apihelp-query+imageusage-param-limit": "Сколько страниц вернуть. Если задан <var>$1redirect</var>, лимит применяется к каждому уровню по отдельности (что означает, что всего может вернуться до 2 * <var>$1limit</var> результатов).",
+ "apihelp-query+imageusage-param-redirect": "Если ссылающаяся страница является перенаправлением, найти также все страницы, которые ссылаются на это перенаправление. Максимальный лимит становится в два раза меньше.",
+ "apihelp-query+imageusage-example-simple": "Показать страницы, использующие [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Получить информацию о страницах, использующих [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Получение основной информации о страницах.",
+ "apihelp-query+info-param-prop": "Какие дополнительные свойства получить:",
+ "apihelp-query+info-paramvalue-prop-protection": "Перечисление уровней защиты каждой страницы.",
+ "apihelp-query+info-paramvalue-prop-talkid": "Идентификатор страницы обсуждения для каждой страницы не-обсуждения.",
+ "apihelp-query+info-paramvalue-prop-watched": "Перечислить статус наблюдения за каждой страницей.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Количество наблюдающих, если разрешено.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "Количество наблюдающих за каждой страницей, просмотревших последние правки, если разрешено.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "Временная метка уведомления для списка наблюдения для каждой страницы.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "Идентификатор родительской страницы для каждой страницы обсуждения.",
+ "apihelp-query+info-paramvalue-prop-url": "Возвращает полную ссылку, ссылку на редактирование и каноничную ссылку для каждой страницы.",
+ "apihelp-query+info-paramvalue-prop-readable": "Может ли участник просматривать эту страницу.",
+ "apihelp-query+info-paramvalue-prop-preload": "Текст, возвращённый EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Возвращает стиль отображения заголовка страницы.",
+ "apihelp-query+info-param-testactions": "Проверить, может ли текущий участник провести указанные действия над страницей.",
+ "apihelp-query+info-param-token": "Вместо этого используйте [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-query+info-example-simple": "Получить информацию о странице <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Получить основную информацию и информацию о защите страницы <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "Поиск всех страниц, ссылающихся на заданную интервики ссылку.",
+ "apihelp-query+iwbacklinks-extended-description": "Может быть использована для поиска всех ссылок с префиксом, или всех ссылок на название (с заданным префиксом). Неиспользование никакого параметра фактически означает «все интервики-ссылки».",
+ "apihelp-query+iwbacklinks-param-prefix": "Префикс интервики.",
+ "apihelp-query+iwbacklinks-param-title": "Искомая интервики-ссылка. Должна быть использована вместе с <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+iwbacklinks-param-prop": "Какие свойства получить:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Добавляет префикс интервики.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Добавляет название интервики.",
+ "apihelp-query+iwbacklinks-param-dir": "Порядок перечисления.",
+ "apihelp-query+iwbacklinks-example-simple": "Получить список страниц, ссылающихся на [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Получить информацию о страницах, ссылающихся на [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Возвращает все интервики-ссылки с данных страниц.",
+ "apihelp-query+iwlinks-param-url": "Следует ли возвращать полный URL (не может быть использовано одновременно с $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Какие дополнительные свойства получить для каждой межъязыковой ссылки:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Добавляет полный URL.",
+ "apihelp-query+iwlinks-param-limit": "Сколько интервики-ссылок вернуть.",
+ "apihelp-query+iwlinks-param-prefix": "Вернуть только интервики с этим префиксом.",
+ "apihelp-query+iwlinks-param-title": "Искомая интервики-ссылка. Должна быть использована вместе с <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "Порядок перечисления.",
+ "apihelp-query+iwlinks-example-simple": "Получить интервики-ссылки со страницы <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Поиск всех страниц, ссылающихся на заданную языковую ссылку.",
+ "apihelp-query+langbacklinks-extended-description": "Может быть использовано для поиска всех ссылок с языковым кодом, или всех ссылок на страницу с заданным языком. Неиспользование этого параметра фактически вернёт все языковые ссылки.\n\nОбратите внимания, что ссылки, добавляемые расширениями, могут не рассматриваться.",
+ "apihelp-query+langbacklinks-param-lang": "Язык ссылки.",
+ "apihelp-query+langbacklinks-param-title": "Искомая языковая ссылка. Должно быть использовано с $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+langbacklinks-param-prop": "Какие свойства получить:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Добавляет языковой код ссылки.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Добавляет название ссылки.",
+ "apihelp-query+langbacklinks-param-dir": "Порядок перечисления.",
+ "apihelp-query+langbacklinks-example-simple": "Получить список страниц, ссылающихся на [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Получить информацию о страницах, ссылающихся на [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Возвращает все межъязыковые ссылки с данных страниц.",
+ "apihelp-query+langlinks-param-limit": "Сколько ссылок вернуть.",
+ "apihelp-query+langlinks-param-url": "Следует ли вернуть полный URL (не может быть использовано одновременно с <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Какие дополнительные свойства получить для каждой межъязыковой ссылки:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Добавляет полный URL.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Добавляет локализованное название языка (лучший вариант). Используйте <var>$1inlanguagecode</var> для указания языка.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Добавляет самоназвание языка.",
+ "apihelp-query+langlinks-param-lang": "Возвращает только ссылки с данным языковым кодом.",
+ "apihelp-query+langlinks-param-title": "Искомая ссылка. Должна быть использована вместе с <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "Порядок перечисления.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Языковой код для локализованных названий языков.",
+ "apihelp-query+langlinks-example-simple": "Получить межъязыковые ссылки со страницы <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Возвращает все ссылки с данных страниц.",
+ "apihelp-query+links-param-namespace": "Показывать ссылки только на данные пространства имён.",
+ "apihelp-query+links-param-limit": "Сколько ссылок вернуть.",
+ "apihelp-query+links-param-titles": "Перечислять только данные ссылки. Полезно для проверки, содержит ли конкретная страница конкретную ссылку.",
+ "apihelp-query+links-param-dir": "Порядок перечисления.",
+ "apihelp-query+links-example-simple": "Получить ссылки со страницы <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-generator": "Получить информацию о страницах, на которые ссылается <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Получить ссылки с <kbd>Main Page</kbd> на пространства имён {{ns:user}} и {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Поиск всех страниц, ссылающихся на данную.",
+ "apihelp-query+linkshere-param-prop": "Какие свойства получить:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "Идентификатор каждой страницы.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Заголовок каждой страницы.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Метка, является ли страница перенаправлением.",
+ "apihelp-query+linkshere-param-namespace": "Включить страницы только из данных пространств имён.",
+ "apihelp-query+linkshere-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+linkshere-param-show": "Показать только элементы, соответствующие этим критериям:\n;redirect: Показать только перенаправления.\n;!redirect: Показать только не перенаправления.",
+ "apihelp-query+linkshere-example-simple": "Получить список страниц, ссылающихся на [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Получить информацию о страницах, ссылающихся на [[Main Page]].",
+ "apihelp-query+logevents-summary": "Получение записей журналов.",
+ "apihelp-query+logevents-param-prop": "Какие свойства получить:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Добавляет идентификатор записи журнала.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Добавляет заголовок страницы, связанной с записью журнала.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Добавляет тип записи журнала.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Добавляет участника, ответственного за запись журнала.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Добавляет идентификатор участника, ответственного за запись журнала.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Добавляет временную метку записи журнала.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Добавляет комментарий записи журнала.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Добавляет распарсенный комментарий записи журнала.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Перечисляет дополнительные сведения о записи в журнале.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Перечисляет метки записи журнала.",
+ "apihelp-query+logevents-param-type": "Вернуть только записи этого типа.",
+ "apihelp-query+logevents-param-action": "Вернуть только указанные действия журнала. Переопределяет <var>$1type</var>. В списке возможных значений можно использовать звёздочку, например, <kbd>action/*</kbd> найдёт различные подстроки после слэша (/).",
+ "apihelp-query+logevents-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+logevents-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+logevents-param-user": "Вернуть записи, созданные указанным участником.",
+ "apihelp-query+logevents-param-title": "Вернуть записи, связанные с указанными страницами.",
+ "apihelp-query+logevents-param-namespace": "Вернуть записи, связанные с указанными пространствами имён.",
+ "apihelp-query+logevents-param-prefix": "Вернуть записи, начинающиеся с заданного префикса.",
+ "apihelp-query+logevents-param-tag": "Только записи с заданной меткой.",
+ "apihelp-query+logevents-param-limit": "Сколько записей вернуть.",
+ "apihelp-query+logevents-example-simple": "Список последних записей.",
+ "apihelp-query+pagepropnames-summary": "Перечисление всех названий свойств, использованных в вики.",
+ "apihelp-query+pagepropnames-param-limit": "Максимальное число возвращаемых названий.",
+ "apihelp-query+pagepropnames-example-simple": "Получить первые 10 названий свойств.",
+ "apihelp-query+pageprops-summary": "Получение различных свойств страниц, определённых в содержании страницы.",
+ "apihelp-query+pageprops-param-prop": "Перечислить только эти свойства страницы (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> возвращает список используемых названий свойств). Полезно для проверки, используют ли страницы конкретные свойства.",
+ "apihelp-query+pageprops-example-simple": "Получить свойства страниц <kbd>Main Page</kbd> и <kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "Перечисление всех страниц, использующих заданное свойство.",
+ "apihelp-query+pageswithprop-param-propname": "Искомое свойство (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> возвращает список используемых названий свойств).",
+ "apihelp-query+pageswithprop-param-prop": "Какую информацию включить:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Добавляет идентификатор страницы.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Добавляет заголовок и идентификатор пространства имён страницы.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Добавляет значение свойства страницы.",
+ "apihelp-query+pageswithprop-param-limit": "Максимальное число возвращаемых страниц.",
+ "apihelp-query+pageswithprop-param-dir": "Порядок сортировки.",
+ "apihelp-query+pageswithprop-example-simple": "Список первых 10 страниц, использующих <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Получение дополнительной информации о первых десяти страницах, использующих <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Осуществление поиска по префиксу названий страниц.",
+ "apihelp-query+prefixsearch-extended-description": "Не смотря на похожесть названий, этот модуль не является эквивалентом [[Special:PrefixIndex]]; если вы ищете его, см. <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> с параметром <kbd>apprefix</kbd>. Задача этого модуля близка к <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: получение пользовательского ввода и представление наиболее подходящих заголовков. В зависимости от поискового движка, используемого на сервере, сюда может включаться исправление опечаток, избегание перенаправлений и другие эвристики.",
+ "apihelp-query+prefixsearch-param-search": "Поисковый запрос.",
+ "apihelp-query+prefixsearch-param-namespace": "Пространства имён для поиска. Игнорируется, если <var>$1search</var> начинается с корректного префикса пространства имён.",
+ "apihelp-query+prefixsearch-param-limit": "Максимальное число возвращаемых результатов.",
+ "apihelp-query+prefixsearch-param-offset": "Количество пропускаемых результатов.",
+ "apihelp-query+prefixsearch-example-simple": "Поиск названий страниц, начинающихся с <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Используемый поисковый профиль.",
+ "apihelp-query+protectedtitles-summary": "Перечисление всех названий, защищённых от создания.",
+ "apihelp-query+protectedtitles-param-namespace": "Перечислять только страницы этих пространств имён.",
+ "apihelp-query+protectedtitles-param-level": "Перечислять только названия с этим уровнем защиты.",
+ "apihelp-query+protectedtitles-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+protectedtitles-param-start": "Начать перечисление с этой метки времени защиты.",
+ "apihelp-query+protectedtitles-param-end": "Закончить перечисление на этой метке времени защиты.",
+ "apihelp-query+protectedtitles-param-prop": "Какие свойства получить:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Добавляет метку времени установки защиты.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Добавляет участника, установившего защиту.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Добавляет идентификатор участника, установившего защиту.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Добавляет описание защиты.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Добавляет распарсенное описание защиты.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Добавляет метку времени снятия защиты.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Добавляет уровень защиты.",
+ "apihelp-query+protectedtitles-example-simple": "Список защищенных заголовков",
+ "apihelp-query+protectedtitles-example-generator": "Поиск ссылок на защищённые заголовки в основном пространстве имён.",
+ "apihelp-query+querypage-summary": "Получение списка, предоставляемого служебной страницей, основанной на QueryPage.",
+ "apihelp-query+querypage-param-page": "Название служебной страницы. Обратите внимание: чувствительно к регистру.",
+ "apihelp-query+querypage-param-limit": "Количество возвращаемых результатов.",
+ "apihelp-query+querypage-example-ancientpages": "Вернуть результаты [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Получение набора случайных страниц.",
+ "apihelp-query+random-extended-description": "Страницы перечисляются в строгой последовательности, случайна только входная точка. Это означает, что если, например, <samp>Main Page</samp> — первая страница в списке, то <samp>List of fictional monkeys</samp> <em>всегда</em> будет второй, <samp>List of people on stamps of Vanuatu</samp> — третьей, и так далее.",
+ "apihelp-query+random-param-namespace": "Вернуть только страницы этих пространств имён.",
+ "apihelp-query+random-param-limit": "Ограничение на количество возвращаемых страниц.",
+ "apihelp-query+random-param-redirect": "Вместо этого, используйте <kbd>$1filterredir=redirects</kbd>.",
+ "apihelp-query+random-param-filterredir": "Как фильтровать перенаправления.",
+ "apihelp-query+random-example-simple": "Вернуть две случайные страницы из основного пространства имён.",
+ "apihelp-query+random-example-generator": "Вернуть информацию о двух случайных страницах из основного пространства имён.",
+ "apihelp-query+recentchanges-summary": "Перечисление последних правок.",
+ "apihelp-query+recentchanges-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+recentchanges-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+recentchanges-param-namespace": "Только правки в этих пространствах имён.",
+ "apihelp-query+recentchanges-param-user": "Только правки данного участника.",
+ "apihelp-query+recentchanges-param-excludeuser": "Не перечислять правки данного участника.",
+ "apihelp-query+recentchanges-param-tag": "Только правки с заданной меткой.",
+ "apihelp-query+recentchanges-param-prop": "Включить дополнительную информацию:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Добавить анонимных участников, ответственных за правку или метку.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Добавить идентификатор ответственного за правку участника.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Добавляет описание правки.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Добавляет распарсенное описание правки.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Добавляет метки правки.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Добавляет временную метку правки.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Добавляет заголовок отредактированной страницы.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Добавляет идентификаторы страницы, правки, старой и новой версии.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Добавляет старую и новую длину страницы в байтах.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Отмечает правку, если страница является перенаправлением.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Отмечает патрулируемые правки как отпатрулированные или неотпатрулированные.",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "Отмечает патрулируемые правки как отпатрулированные или неотпатрулированные.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Добавляет информацию о записи журнала (идентификатор записи, её тип, и так далее).",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Перечисляет метки записи.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Добавляет значение контрольных сумм для записей, связанных с версией.",
+ "apihelp-query+recentchanges-param-token": "Вместо этого используйте <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+recentchanges-param-show": "Показать только элементы, удовлетворяющие данным критериям. Например, чтобы отобразить только малые правки, сделанные зарегистрированными участниками, установите $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Сколько правок вернуть.",
+ "apihelp-query+recentchanges-param-type": "Какие типы правок показать.",
+ "apihelp-query+recentchanges-param-toponly": "Перечислять только последние правки страниц.",
+ "apihelp-query+recentchanges-param-generaterevisions": "При использовании в качестве генератора, генерировать идентификаторы версий вместо их названий. Записи последних изменений без привязанного идентификатора версии (например, большинство записей журналов) не сгенерируют ничего.",
+ "apihelp-query+recentchanges-example-simple": "Список последних изменений.",
+ "apihelp-query+recentchanges-example-generator": "Получить информацию о последних страницах с неотпатрулированными изменениями.",
+ "apihelp-query+redirects-summary": "Возвращает все перенаправления на данную страницу.",
+ "apihelp-query+redirects-param-prop": "Какие свойства получить:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "Идентификатор каждого перенаправления.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Название каждого перенаправления.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Фрагемнт каждого перенаправления, если доступен.",
+ "apihelp-query+redirects-param-namespace": "Включить страницы только из данных пространств имён.",
+ "apihelp-query+redirects-param-limit": "Сколько перенаправлений вернуть.",
+ "apihelp-query+redirects-param-show": "Показывать только элементы, удовлетворяющие данным критериям:\n;fragment: Показывать только перенаправления с фрагментами.\n;!fragment: Показывать только перенаправления без фрагментов.",
+ "apihelp-query+redirects-example-simple": "Получить список перенаправлений на [[Main Page]].",
+ "apihelp-query+redirects-example-generator": "Получить информацию о всех перенаправлениях на [[Main Page]].",
+ "apihelp-query+revisions-summary": "Получение информации о версии страницы.",
+ "apihelp-query+revisions-extended-description": "Может использоваться в трёх режимах:\n# Получение данных о наборе страниц (последних версий) с помощью передачи названий или идентификаторов страниц.\n# Получение версий одной данной страницы, используя названия или идентификаторы с началом, концом или лимитом.\n# Получение данных о наборе версий, передаваемых с помощью их идентификаторов.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Может быть использовано только с одной страницей (режим №2).",
+ "apihelp-query+revisions-param-startid": "Начать перечисление с этой временной метки версии. Версия обязана существовать, но не обязана принадлежать этой странице.",
+ "apihelp-query+revisions-param-endid": "Закончить перечисление на этой временной метке версии. Версия обязана существовать, но не обязана принадлежать этой странице.",
+ "apihelp-query+revisions-param-start": "С какой временной метки начать перечисление.",
+ "apihelp-query+revisions-param-end": "Перечислять до данной временной метки.",
+ "apihelp-query+revisions-param-user": "Только версии данного участника.",
+ "apihelp-query+revisions-param-excludeuser": "Исключить версии данного участника.",
+ "apihelp-query+revisions-param-tag": "Только версии с заданной меткой.",
+ "apihelp-query+revisions-param-token": "Какие токены получить для каждой версии.",
+ "apihelp-query+revisions-example-content": "Получить данные с содержимым для последних версий страниц <kbd>API</kbd> и <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Получить последние 5 версий <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Получить первые 5 версий <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Получить первые 5 версий <kbd>Main Page</kbd> созданных после 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Получить первые 5 версий <kbd>Main Page</kbd>, сделанных не анонимным участником <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Получить первые 5 версий <kbd>Main Page</kbd>, сделанных участником <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Какие свойства каждой версии получить:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "Идентификатор версии.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Флаги версии (малая правка).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Временная метка версии.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Участник, создавший версию.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "Идентификатор создателя версии.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Длина версии (в байтах).",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1-хэш (base 16) версии.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Идентификатор модели содержимого версии.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Описание правки.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Распарсенное описание правки.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Текст версии.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Метки версии.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Устарело.</span> Вместо этого используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> или <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Дерево парсинга XML содержимого версии (требуется модель содержимого <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Сколько версий вернуть.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Вместо этого используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>. Раскрыть шаблоны в содержимом версии (требуется $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Вместо этого используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> или <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Сгенерировать дерево парсинга XML содержимого версии (требуется $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Вместо этого используйте <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Распарсить содержимое версии (требуется $1prop=content). Из соображений производительности, при использовании этой опции, в качестве $1limit принудительно устанавливается 1.",
+ "apihelp-query+revisions+base-param-section": "Вернуть содержимое только секции с заданным номером.",
+ "apihelp-query+revisions+base-param-diffto": "Вместо этого используйте <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Идентификатор версии, с которым сравнивать каждую версию. Используйте <kbd>prev</kbd>, <kbd>next</kbd> и <kbd>cur</kbd> для предыдущей, следующей и текущей версии соответственно.",
+ "apihelp-query+revisions+base-param-difftotext": "Вместо этого используйте <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Текст, с которым сравнивать каждую версию. Сравнивает ограниченное число версий. Переопределяет <var>$1diffto</var>. Если задано <var>$1section</var>, сравнение будет произведено только с этой секцией.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Вместо этого используйте <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Выполнить преобразование перед записью правки до сравнения. Доступно только при использовании с <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "Формат серилиализации, использованный в <var>$1difftotext</var> и ожидаемый в результате.",
+ "apihelp-query+search-summary": "Проведение полнотекстового поиска.",
+ "apihelp-query+search-param-search": "Искать страницы, названия или тексты которых содержат это значение. Вы можете использовать в поисковом запросе служебные функции в зависимости от того, какой поисковый движок используется на сервере.",
+ "apihelp-query+search-param-namespace": "Искать только в этих пространствах имён.",
+ "apihelp-query+search-param-what": "Какой тип поиска осуществить.",
+ "apihelp-query+search-param-info": "Какие метаданные вернуть.",
+ "apihelp-query+search-param-prop": "Какие свойства вернуть:",
+ "apihelp-query+search-param-qiprofile": "Используемый запросонезависимый профиль (затрагивает оценивающий алгоритм).",
+ "apihelp-query+search-paramvalue-prop-size": "Добавляет размер страницы в байтах.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Добавляет количество слов на странице.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Добавляет метку времени последнего редактирования страницы.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Добавляет распарсенный фрагмент страницы.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Добавляет распарсенный фрагмент названия страницы.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Добавляет распарсенный фрагмент названия перенаправления.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Добавляет название найденного перенаправления.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Добавляет распарсенный фрагмент заголовка найденного раздела.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Добавляет заголовок найденного раздела.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Добавляет распарсенный фрагмент найденной категории.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Добавляет логическое значение, обозначающее, удовлетворяет ли поисковому запросу содержимое файла.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Добавляет дополнительные данные, сгенерированные расширениями.",
+ "apihelp-query+search-paramvalue-prop-score": "Игнорируется.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Игнорируется.",
+ "apihelp-query+search-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+search-param-interwiki": "Включить результаты из других вики, если доступны.",
+ "apihelp-query+search-param-backend": "Какой поисковый движок использовать, если не стандартный.",
+ "apihelp-query+search-param-enablerewrites": "Разрешить редактирование запроса. Некоторые поисковые движки могут отредактировать запрос, например, исправив опечатку, если посчитают, что это приведёт к лучшим результатам.",
+ "apihelp-query+search-example-simple": "Найти <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Найти тексты, содержащие <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Получить информацию о страницах, возвращённых по поисковому запросу <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Получение основной информации о сайте.",
+ "apihelp-query+siteinfo-param-prop": "Какую информацию получить:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Общую системную информацию.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Список зарегистрированных пространств имён и их каноничные имена.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Список зарегистрированных синонимов пространств имён.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Список синонимов служебных страниц.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Список магических слов и их синонимы.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Статистика сайта.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Карта интервик (может быть отфильтрована, или локализована с помощью <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Возвращает сервер базы данных с наибольшим отставанием репликации.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Список групп участников и связанных прав.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Библиотеки, установленные в вики.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Расширения, установленные в вики.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Список файловых расширений, разрешённых к загрузке.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Возвращает правовую информацию (лицензию), если доступно.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Возвращает информацию о доступных типах защиты страниц.",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Возвращает список языков, поддерживаемых MediaWiki (опционально локализованных с помощью <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Возвращает список языковых кодов, для которых включён [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]], а также варианты, поддерживаемые для каждого языка.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Возвращает список доступных скинов (опционально локализованных с помощью <var>$1inlanguagecode</var>, в противном случае — на языке вики).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Возвращает список меток рашсирений парсера.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Возвращает список перехватчиков функций парсера.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Возвращает список всех подписанных перехватчиков (содержимое <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Возвращает список идентификаторов переменных.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Возвращает список протоколов, разрешённых во внешних ссылках.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Возвращает значения по умолчанию настроек участников.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Возвращает конфигурацию диалога загрузки.",
+ "apihelp-query+siteinfo-param-filteriw": "Вернуть только локальные или только нелокальные записи карты интервик.",
+ "apihelp-query+siteinfo-param-showalldb": "Перечисляет все сервера баз данных, а не только самый отстающий.",
+ "apihelp-query+siteinfo-param-numberingroup": "Перечисляет количество участников в группах.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Языковой код для перевода названий языков и скинов.",
+ "apihelp-query+siteinfo-example-simple": "Запросить информацию о сайте.",
+ "apihelp-query+siteinfo-example-interwiki": "Запросить список локальных префиксов интервик.",
+ "apihelp-query+siteinfo-example-replag": "Проверить текущее отставание репликации.",
+ "apihelp-query+stashimageinfo-summary": "Возвращает информацию о файлах во временном хранилище.",
+ "apihelp-query+stashimageinfo-param-filekey": "Ключ, идентифицирующий предыдущую временную загрузку.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Синоним $1filekey для обратной совместимости.",
+ "apihelp-query+stashimageinfo-example-simple": "Вернуть информацию о файле во временном хранилище.",
+ "apihelp-query+stashimageinfo-example-params": "Вернуть эскизы двух файлов в тайнике.",
+ "apihelp-query+tags-summary": "Список меток правок.",
+ "apihelp-query+tags-param-limit": "Максимальное количество меток в списке.",
+ "apihelp-query+tags-param-prop": "Какие свойства получить:",
+ "apihelp-query+tags-paramvalue-prop-name": "Добавляет название метки.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Добавляет системное сообщение метки.",
+ "apihelp-query+tags-paramvalue-prop-description": "Добавляет описание метки.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Добавляет количество правок и записей в журналах, использующих эту метку.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Показывает, определена ли метка.",
+ "apihelp-query+tags-paramvalue-prop-source": "Получить источники меток, которыми могут быть <samp>extension</samp> для меток, определённых расширениями, и <samp>manual</samp> для меток, определённых участниками вручную.",
+ "apihelp-query+tags-paramvalue-prop-active": "Применима ли метка до сих пор.",
+ "apihelp-query+tags-example-simple": "Список доступных меток.",
+ "apihelp-query+templates-summary": "Возвращает все страницы, включённые в данную.",
+ "apihelp-query+templates-param-namespace": "Показать шаблоны только данного пространства имён.",
+ "apihelp-query+templates-param-limit": "Сколько шаблонов вернуть.",
+ "apihelp-query+templates-param-templates": "Перечислять только эти шаблоны. Полезно для проверки, включает ли конкретная страница конкретный шаблон.",
+ "apihelp-query+templates-param-dir": "Порядок перечисления.",
+ "apihelp-query+templates-example-simple": "Получить список шаблонов, использующихся на <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Получить информацию о шаблонах, использующихся на <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Получить страницы из пространств имён {{ns:user}} и {{ns:template}}, включённые в <kbd>Main Page</kbd>.",
+ "apihelp-query+tokens-summary": "Получение токенов для действий, связанных с редактированием данных.",
+ "apihelp-query+tokens-param-type": "Типы запрашиваемых токенов.",
+ "apihelp-query+tokens-example-simple": "Получить csrf-токен (по умолчанию).",
+ "apihelp-query+tokens-example-types": "Получить токен наблюдения и токен патрулирования.",
+ "apihelp-query+transcludedin-summary": "Поиск всех страниц, включающих данные страницы.",
+ "apihelp-query+transcludedin-param-prop": "Какие свойства получить:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "Идентификатор каждой страницы.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Заголовок каждой страницы.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Метка, является ли страница перенаправлением.",
+ "apihelp-query+transcludedin-param-namespace": "Включить страницы только из данных пространств имён.",
+ "apihelp-query+transcludedin-param-limit": "Сколько страниц вернуть.",
+ "apihelp-query+transcludedin-param-show": "Показать только элементы, соответствующие этим критериям:\n;redirect: Показать только перенаправления.\n;!redirect: Показать только не перенаправления.",
+ "apihelp-query+transcludedin-example-simple": "Получить список страниц, включающих <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Получить информацию о страницах, включающих <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "Получение всех правок участника.",
+ "apihelp-query+usercontribs-param-limit": "Максимальное количество возвращаемых правок.",
+ "apihelp-query+usercontribs-param-start": "Временная метка, с которой начать возврат.",
+ "apihelp-query+usercontribs-param-end": "Временная метка, на которой закончить возврат.",
+ "apihelp-query+usercontribs-param-user": "Участники, чей вклад необходимо получить. Не может быть использовано с <var>$1userids</var> или <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Получить вклад всех участников, имена которых начинаются с этого значения. Не может быть использовано с <var>$1user</var> или <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "Идентификаторы участников, чей вклад необходимо получить. Не может быть использовано с <var>$1user</var> или <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Перечислять только правки в этих пространствах имён.",
+ "apihelp-query+usercontribs-param-prop": "Включить дополнительную информацию:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Добавляет идентификатор страницы и версии.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Добавляет заголовок и идентификатор пространства имён страницы.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Добавляет временную метку правки.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Добавляет описание правки.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Добавляет распарсенное описание правки.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Добавляет новый размер страницы.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Добавляет разницу между размерами страницы до и после правки.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Добавляет флаги правки.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Отмечает отпатрулированные правки.",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "Отмечает автоматически отпатрулированные правки.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Перечисляет метки правки.",
+ "apihelp-query+usercontribs-param-show": "Показать только элементы, удовлетворяющие данным критериям, например, только не малые правки: <kbd>$2show=!minor</kbd>.\n\nЕсли установлено <kbd>$2show=patrolled</kbd> или <kbd>$2show=!patrolled</kbd>, правки старее <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|секунды|секунд}}) не будут показаны.",
+ "apihelp-query+usercontribs-param-tag": "Только правки с заданной меткой.",
+ "apihelp-query+usercontribs-param-toponly": "Перечислять только последние правки страниц.",
+ "apihelp-query+usercontribs-example-user": "Показать вклад участника <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Показать вклад со всех IP-адресов, начинающихся на <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-summary": "Получение информации о текущем участнике.",
+ "apihelp-query+userinfo-param-prop": "Какую информацию включить:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Определяет, заблокирован ли текущий участник, кем и по какой причине.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Добавляет метку <samp>messages</samp>, если у текущего участника есть непрочитанные сообщения.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Перечисляет все группы, в которые входит участник.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Возвращает группы, в которые участник был явно включён, включая дату окончания членства для каждой группы.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Перечисляет все группы, в которые участник был включён автоматически.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Перечисляет все права текущего участника.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Перечисляет группы, в которые или из которых участник может добавить или удалить других участников.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Перечисляет все настройки, установленные текущим участником.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Возвращает токен для смены настроек текущего участника.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Добавляет счётчик правок текущего участника.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Добавляет все скоростные лимиты, применимые к текущему участнику.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Добавляет настоящее имя участника.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Добавляет электронный адрес участника и дату проверки его подлинности.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Возвращает назад заголовок <code>Accept-Language</code>, отосланный клиентом, в структурированном формате.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Добавляет дату регистрации участника.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Добавляет число непрочитанных страниц в странице наблюдения участника (максимум $1; возвращает <samp>$2</samp>, если их больше).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "Добавляет центральный идентификатор и статус прикрепления участника.",
+ "apihelp-query+userinfo-param-attachedwiki": "Вместе с <kbd>$1prop=centralids</kbd> отображает, прикреплён ли к вики участник с этим идентификатором.",
+ "apihelp-query+userinfo-example-simple": "Получение информации о текущем участнике.",
+ "apihelp-query+userinfo-example-data": "Получение дополнительной информации о текущем участнике.",
+ "apihelp-query+users-summary": "Получение информации о списке участников.",
+ "apihelp-query+users-param-prop": "Какую информацию включить:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Определяет, заблокирован ли участник, кем и по какой причине.",
+ "apihelp-query+users-paramvalue-prop-groups": "Перечисляет все группы, в которые входит каждый участник.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "Возвращает группы, в которые каждый участник был явно включён, включая дату окончания членства для каждой группы.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Перечисляет группы, в которые участник был включён автоматически.",
+ "apihelp-query+users-paramvalue-prop-rights": "Перечисляет все права каждого участника.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Добавляет счётчики правок участников.",
+ "apihelp-query+users-paramvalue-prop-registration": "Добавляет даты регистрации участников.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Отмечает, может ли и хочет ли участник получать электронную почту посредством [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Отмечает пол текущего участника. Возвращает «male», «female» или «unknown».",
+ "apihelp-query+users-paramvalue-prop-centralids": "Добавляет центральный идентификатор и статус прикрепления участника.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Определяет, могут ли быть созданы аккаунты с корректными, но незарегистрированными именами.",
+ "apihelp-query+users-param-attachedwiki": "Вместе с <kbd>$1prop=centralids</kbd> отображает, прикреплён ли к вики участник с этим идентификатором.",
+ "apihelp-query+users-param-users": "Список участников, для которых получить информацию.",
+ "apihelp-query+users-param-userids": "Список идентификаторов участников, для которых получить информацию.",
+ "apihelp-query+users-param-token": "Вместо этого используйте <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+users-example-simple": "Вернуть информацию о участнике <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "Получение последних правок страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlist-param-allrev": "Включить несколько правок одной страницы из заданного временного промежутка.",
+ "apihelp-query+watchlist-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+watchlist-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+watchlist-param-namespace": "Только правки в этих пространствах имён.",
+ "apihelp-query+watchlist-param-user": "Только правки данного участника.",
+ "apihelp-query+watchlist-param-excludeuser": "Не перечислять правки данного участника.",
+ "apihelp-query+watchlist-param-limit": "Сколько результатов возвращать за один запрос.",
+ "apihelp-query+watchlist-param-prop": "Какие дополнительные свойства получить:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Добавляет идентификаторы страницы и версии.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Добавляет заголовок страницы.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Добавляет флаги правки.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Добавляет участника, сделавшего правку.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Добавляет идентификатор участника, сделавшего правку.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Добавляет описание правки.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Добавляет распарсенное описание правки.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Добавляет временную метку правки.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Определяет, была ли правка отпатрулирована.",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "Отмечает автоматически отпатрулированные правки.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Добавляет старую и новую длину страницы.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Добавляет метку времени, когда участник был уведомлён о правке.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Добавляет информацию о журнале, где уместно.",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "Перечисляет метки записи.",
+ "apihelp-query+watchlist-param-show": "Показать только элементы, удовлетворяющие данным критериям. Например, чтобы отобразить только малые правки, сделанные зарегистрированными участниками, установите $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Какие типы правок показать:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Обычные правки страниц.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Внешние правки.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Создания страниц.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Записи журнала.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Правки категоризации.",
+ "apihelp-query+watchlist-param-owner": "Используется вместе с $1token для получения списка наблюдения другого участника.",
+ "apihelp-query+watchlist-param-token": "Токен безопасности (доступен в [[Special:Preferences#mw-prefsection-watchlist|настройках]] участника), предоставляющий доступ к списку наблюдения другого участника.",
+ "apihelp-query+watchlist-example-simple": "Список последних правок недавно отредактированных страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlist-example-props": "Запросить дополнительную информацию о последних правках недавно отредактированных страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlist-example-allrev": "Запросить информацию о всех недавних правках страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlist-example-generator": "Запросить информацию о страницах для недавно отредактированных страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlist-example-generator-rev": "Запросить информацию о версиях для последних правок страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlist-example-wlowner": "Список последних правок недавно отредактированных страниц из списка наблюдения участника <kbd>Example</kbd>.",
+ "apihelp-query+watchlistraw-summary": "Получение всех страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlistraw-param-namespace": "Перечислять только страницы этих пространств имён.",
+ "apihelp-query+watchlistraw-param-limit": "Сколько результатов возвращать за один запрос.",
+ "apihelp-query+watchlistraw-param-prop": "Какие дополнительные свойства получить:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Добавляет метку времени, когда участник был уведомлён о правке.",
+ "apihelp-query+watchlistraw-param-show": "Перечислять только элементы, соответствующие этим критериям.",
+ "apihelp-query+watchlistraw-param-owner": "Используется вместе с $1token для получения списка наблюдения другого участника.",
+ "apihelp-query+watchlistraw-param-token": "Токен безопасности (доступен в [[Special:Preferences#mw-prefsection-watchlist|настройках]] участника), предоставляющий доступ к списку наблюдения другого участника.",
+ "apihelp-query+watchlistraw-param-dir": "Порядок перечисления.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Название (с префиксом пространства имён), с которого начать перечисление.",
+ "apihelp-query+watchlistraw-param-totitle": "Название (с префиксом пространства имён), на котором закончить перечисление.",
+ "apihelp-query+watchlistraw-example-simple": "Получение страниц из списка наблюдения текущего участника.",
+ "apihelp-query+watchlistraw-example-generator": "Запросить информацию о страницах из списка наблюдения текущего участника.",
+ "apihelp-removeauthenticationdata-summary": "Удаление аутентификационных данных для текущего участника.",
+ "apihelp-removeauthenticationdata-example-simple": "Попытка удалить данные текущего участника для <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Отправить участнику письмо для сброса пароля.",
+ "apihelp-resetpassword-extended-description-noroutes": "Маршруты смены пароля не доступны.\n\nВключите маршруты в <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> для использования этого модуля.",
+ "apihelp-resetpassword-param-user": "Сбрасываемый участник.",
+ "apihelp-resetpassword-param-email": "Электронный адрес сбрасываемого участника.",
+ "apihelp-resetpassword-example-user": "Послать письмо для сброса пароля участнику <kbd>Example</kbd>.",
+ "apihelp-resetpassword-example-email": "Послать письмо для сброса пароля всем участникам с электронным адресом <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Удаление и восстановление версий страниц.",
+ "apihelp-revisiondelete-param-type": "Тип осуществляемого удаления версии.",
+ "apihelp-revisiondelete-param-target": "Название страницы удаляемой версии, если это требуется для выбранного типа.",
+ "apihelp-revisiondelete-param-ids": "Идентификаторы удаляемых версий.",
+ "apihelp-revisiondelete-param-hide": "Что скрыть для каждой версии.",
+ "apihelp-revisiondelete-param-show": "Что показать для каждой версии.",
+ "apihelp-revisiondelete-param-suppress": "Следует ли скрыть данные от администраторов так же, как и от остальных участников.",
+ "apihelp-revisiondelete-param-reason": "Причина удаления или восстановления.",
+ "apihelp-revisiondelete-param-tags": "Изменить метки записи в журнале удалений.",
+ "apihelp-revisiondelete-example-revision": "Скрыть содержимое версии <kbd>12345</kbd> страницы <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Скрыть все данные записи <kbd>67890</kbd> в журнале с причиной <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "Отмена последней правки на странице.",
+ "apihelp-rollback-extended-description": "Если последний редактировавший страницу участник сделал несколько правок подряд, все они будут откачены.",
+ "apihelp-rollback-param-title": "Заголовок откатываемой страницы. Не может быть использовано одновременно с <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "Идентификатор откатываемой страницы. Не может быть использовано одновременно с <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Метки, применяемые к откату.",
+ "apihelp-rollback-param-user": "Имя участника, чьи правки следует откатить.",
+ "apihelp-rollback-param-summary": "Пользовательское описание правки. При пустом значении будет использовано стандартное описание.",
+ "apihelp-rollback-param-markbot": "Отметить откатываемые правки и откат как правки бота.",
+ "apihelp-rollback-param-watchlist": "Безусловно добавить или удалить страницу из списка наблюдения текущего участника, использовать настройки или не менять наблюдение.",
+ "apihelp-rollback-example-simple": "Откатить последние изменения страницы <kbd>Main Page</kbd> участника <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Откатить последние правки страницы <kbd>Main Page</kbd> анонимного участника <kbd>192.0.2.5</kbd> с описанием <kbd>Reverting vandalism</kbd>, и отметить эти правки и их откат как правки ботов.",
+ "apihelp-rsd-summary": "Экспорт схемы RSD (Really Simple Discovery).",
+ "apihelp-rsd-example-simple": "Экспортировать схему RSD.",
+ "apihelp-setnotificationtimestamp-summary": "Обновление временной метки уведомления для отслеживаемых страниц.",
+ "apihelp-setnotificationtimestamp-extended-description": "Это затрагивает подсвечивание изменённых страниц в списке наблюдения и истории, и отправляет письмо, если включена настройка «{{int:tog-enotifwatchlistpages}}».",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Работать над всеми отслеживаемыми страницами.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Новая временная метка уведомления.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Версия, к временной метке которой приравнять временную метку уведомления (только для одной страницы).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Версия, новее которой сделать временную метку уведомления (только для одной страницы).",
+ "apihelp-setnotificationtimestamp-example-all": "Сбросить статус уведомления для всего списка наблюдения.",
+ "apihelp-setnotificationtimestamp-example-page": "Сбросить статус уведомления для <kbd>Main page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Установить временную метку уведомления для страницы <kbd>Main page</kbd> таким образом, чтобы сделать все правки с 1 января 2012 года непросмотренными.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Сбросить статус уведомления для страниц из пространства имён <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "Изменить язык страницы.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Изменение языка страницы не разрешено в этой вики.\n\nАктивируйте <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> для использования этого действия.",
+ "apihelp-setpagelanguage-param-title": "Название страницы, язык которой вы желаете поменять. Не может быть использовано одновременно с <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "Идентификатор страницы, язык которой вы желаете поменять. Не может быть использовано одновременно с <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Код нового языка. Используйте <kbd>default</kbd> для смены на язык содержимого по умолчанию для этой вики.",
+ "apihelp-setpagelanguage-param-reason": "Причина изменения.",
+ "apihelp-setpagelanguage-param-tags": "Изменить метки записей в журнале, возникающих в результате этого действия.",
+ "apihelp-setpagelanguage-example-language": "Изменить язык <kbd>Main Page</kbd> на баскский.",
+ "apihelp-setpagelanguage-example-default": "Изменить язык страницы с идентификатором 123 на язык по умолчанию.",
+ "apihelp-stashedit-summary": "Подготовка правки в общем кэше.",
+ "apihelp-stashedit-extended-description": "Предназначено для использования через AJAX из формы редактирования для увеличения производительности сохранения страницы.",
+ "apihelp-stashedit-param-title": "Заголовок редактируемой страницы.",
+ "apihelp-stashedit-param-section": "Номер раздела. <kbd>0</kbd> для верхнего раздела, <kbd>new</kbd> для нового раздела.",
+ "apihelp-stashedit-param-sectiontitle": "Заголовок нового раздела.",
+ "apihelp-stashedit-param-text": "Содержимое страницы.",
+ "apihelp-stashedit-param-stashedtexthash": "Хэш содержимого страницы в кэше.",
+ "apihelp-stashedit-param-contentmodel": "Модель нового содержимого.",
+ "apihelp-stashedit-param-contentformat": "Формат сериализации содержимого, используемый для введённого текста.",
+ "apihelp-stashedit-param-baserevid": "Идентификатор предыдущей версии.",
+ "apihelp-stashedit-param-summary": "Описание правки.",
+ "apihelp-tag-summary": "Добавление или удаление меток отдельных правок или записей журналов.",
+ "apihelp-tag-param-rcid": "Один или более идентификаторов правок, метки которых нужно добавить или удалить.",
+ "apihelp-tag-param-revid": "Один или более идентификаторов версий, метки которых нужно добавить или удалить.",
+ "apihelp-tag-param-logid": "Один или более идентификаторов записей журналов, метки которых нужно добавить или удалить.",
+ "apihelp-tag-param-add": "Добавляемые метки. Добавлять можно только метки, заданные вручную.",
+ "apihelp-tag-param-remove": "Удаляемые метки. Удалять можно только метки, заданные вручную или не заданные.",
+ "apihelp-tag-param-reason": "Причина изменения.",
+ "apihelp-tag-param-tags": "Метки, применяемые к записи в журнале, создаваемой в результате этого действия.",
+ "apihelp-tag-example-rev": "Добавить метку <kbd>vandalism</kbd> к версии с идентификатором 123 без указания причины.",
+ "apihelp-tag-example-log": "Удаление метки <kbd>spam</kbd> из записи журнала с идентификатором 123 с причиной <kbd>Wrongly applied</kbd>.",
+ "apihelp-tokens-summary": "Получение токенов для действий, связанных с редактированием данных.",
+ "apihelp-tokens-extended-description": "Этот модуль устарел в пользу [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Типы запрашиваемых токенов.",
+ "apihelp-tokens-example-edit": "Получить токен редактирования (по умолчанию).",
+ "apihelp-tokens-example-emailmove": "Получить токен электронной почты и переименования.",
+ "apihelp-unblock-summary": "Разблокировка участника.",
+ "apihelp-unblock-param-id": "Идентификатор снимаемой блокировки (получается с помощью <kbd>list=blocks</kbd>). Не может быть использовано одновременно с <var>$1user</var> или <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите разблокировать. Нельзя использовать одновременно с <var>$1userid</var>",
+ "apihelp-unblock-param-userid": "Идентификатор участника, которого вы хотите разблокировать. Нельзя использовать одновременно с <var>$1id</var> или <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Причина разблокировки.",
+ "apihelp-unblock-param-tags": "Изменить метки записи в журнале блокировок.",
+ "apihelp-unblock-example-id": "Снять блокировку с идентификатором #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Разблокировать участника <kbd>Bob</kbd> по причине <kbd>Sorry Bob</kbd>.",
+ "apihelp-undelete-summary": "Восстановление версий удалённой страницы.",
+ "apihelp-undelete-extended-description": "Список удалённых версий с временными метками может быть получен с помощью [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], а список идентификаторов удалённых файлов может быть получен с помощью [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Заголовок восстанавливаемой страницы.",
+ "apihelp-undelete-param-reason": "Причина восстановления.",
+ "apihelp-undelete-param-tags": "Изменить метки записи в журнале удалений.",
+ "apihelp-undelete-param-timestamps": "Временные метки восстанавливаемых версий. Если и <var>$1timestamps</var>, и <var>$1fileids</var> пустые, все версии будут восстановлены.",
+ "apihelp-undelete-param-fileids": "Идентификаторы восстанавливаемых файловых версий. Если и <var>$1timestamps</var>, и <var>$1fileids</var> пустые, все версии будут восстановлены.",
+ "apihelp-undelete-param-watchlist": "Безусловно добавить или удалить страницу из списка наблюдения текущего участника, использовать настройки или не менять наблюдение.",
+ "apihelp-undelete-example-page": "Восстановить страницу <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Восстановить две версии страницы <kbd>Main Page</kbd>.",
+ "apihelp-unlinkaccount-summary": "Удаление связанного стороннего аккаунта с текущим участником.",
+ "apihelp-unlinkaccount-example-simple": "Попытаться удалить связь между текущим участником и <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-summary": "Загрузка файла или получение статуса незавершённых загрузок.",
+ "apihelp-upload-extended-description": "Доступно несколько режимов:\n* Прямо загрузить содержимое файла, используя параметр <var>$1file</var>.\n* Загрузить файл по кусочком, используя параметры <var>$1filesize</var>, <var>$1chunk</var> и <var>$1offset</var>.\n* Заставить сервер MediaWiki запросить файл по ссылке, используя параметр <var>$1url</var>.\n* Завершить старую загрузку, провалившуюся из-за предупреждений, используя параметр <var>$1filekey</var>.\nОбратите внимание, что запрос HTTP POST должен быть выполнен как загрузка файла (то есть, с использованием <code>multipart/form-data</code>) при отправке <var>$1file</var>.",
+ "apihelp-upload-param-filename": "Целевое название файла.",
+ "apihelp-upload-param-comment": "Описание загрузки. Также используется как начальный текст страницы при загрузке нового файла, если параметр <var>$1text</var> не задан.",
+ "apihelp-upload-param-tags": "Изменить метки записи в журнале загрузок и версии файловой страницы.",
+ "apihelp-upload-param-text": "Начальный текст страницы для новых файлов.",
+ "apihelp-upload-param-watch": "Наблюдать за этой страницей",
+ "apihelp-upload-param-watchlist": "Безусловно добавить или удалить страницу из списка наблюдения текущего участника, использовать настройки или не менять наблюдение.",
+ "apihelp-upload-param-ignorewarnings": "Игнорировать все предупреждения.",
+ "apihelp-upload-param-file": "Содержимое файла.",
+ "apihelp-upload-param-url": "Ссылка на запрашиваемый файл.",
+ "apihelp-upload-param-filekey": "Ключ, идентифицирующий предыдущую временную загрузку.",
+ "apihelp-upload-param-sessionkey": "Синоним $1filekey, обслуживаемый для обратной совместимости.",
+ "apihelp-upload-param-stash": "Если задано, сервер поместит файл во временное хранилище, не добавив в постоянное.",
+ "apihelp-upload-param-filesize": "Полны размер файла.",
+ "apihelp-upload-param-offset": "Смещение блока в байтах.",
+ "apihelp-upload-param-chunk": "Содержимое кусочка.",
+ "apihelp-upload-param-async": "Сделать операции над потенциально большими файлами асинхронными, когда это возможно.",
+ "apihelp-upload-param-checkstatus": "Только запросить статус загрузки для данного файлового ключа.",
+ "apihelp-upload-example-url": "Загрузка через URL.",
+ "apihelp-upload-example-filekey": "Завершение загрузки, провалившейся из-за предупреждений.",
+ "apihelp-userrights-summary": "Изменение групп участника.",
+ "apihelp-userrights-param-user": "Имя участника.",
+ "apihelp-userrights-param-userid": "Идентификатор участника.",
+ "apihelp-userrights-param-add": "Добавить участника в эти группы, или, если они уже являются её членами, обновить дату истечения членства в этих группах.",
+ "apihelp-userrights-param-expiry": "Временная метка истечения. Может быть относительной (например, <kbd>5 months</kbd> или <kbd>2 weeks</kbd>) или абсолютной (например, <kbd>2014-09-18T12:34:56Z</kbd>). Если задана только одна временная метка, она будет использована для всех групп, переданных в параметре <var>$1add</var>. Используйте <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> или <kbd>never</kbd> для неистекаемой группы.",
+ "apihelp-userrights-param-remove": "Удалить участника из этих групп.",
+ "apihelp-userrights-param-reason": "Причина изменения.",
+ "apihelp-userrights-param-tags": "Изменить метки записи в журнале прав.",
+ "apihelp-userrights-example-user": "Добавить участника <kbd>FooBot</kbd> в группу <kbd>bot</kbd> и удалить его из групп <kbd>sysop</kbd> и <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Добавить участника с идентификатором <kbd>123</kbd> в группу <kbd>bot</kbd> и удалить его из групп <kbd>sysop</kbd> и <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "Добавить участника <kbd>SometimeSysop</kbd> в группу <kbd>sysop</kbd> на один месяц.",
+ "apihelp-validatepassword-summary": "Проверка пароля на удовлетворение политики вики.",
+ "apihelp-validatepassword-extended-description": "Результатом проверки является <samp>Good</samp>, если пароль приемлемый, <samp>Change</samp>, если пароль может быть использован для входа, но должен быть сменён, и <samp>Invalid</samp>, если пароль не может быть использован.",
+ "apihelp-validatepassword-param-password": "Проверяемый пароль.",
+ "apihelp-validatepassword-param-user": "Имя участника, при использовании во время создания аккаунта. Такого участника не должно существовать.",
+ "apihelp-validatepassword-param-email": "Электронная почта, при использовании во время создания аккаунта.",
+ "apihelp-validatepassword-param-realname": "Настоящее имя, при использовании во время создания аккаунта.",
+ "apihelp-validatepassword-example-1": "Проверка пароля <kbd>foobar</kbd> для текущего участника.",
+ "apihelp-validatepassword-example-2": "Проверка пароля <kbd>querty</kbd> для создаваемого участника <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "Добавление или удаление страниц из списка наблюдения текущего участника.",
+ "apihelp-watch-param-title": "Название страницы. Используйте <var>$1titles</var> вместо этого.",
+ "apihelp-watch-param-unwatch": "Если установлено, страницы будут удалены из списка наблюдения, а не добавлены в него.",
+ "apihelp-watch-example-watch": "Следить за страницей <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Не следить за страницей <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "Следить за первым несколькими страницами основного пространства имён.",
+ "apihelp-format-example-generic": "Вернуть результат запроса в формате $1.",
+ "apihelp-format-param-wrappedhtml": "Вернуть хорошо читаемый HTML со связанными модулями ResourceLoader в виде объекта JSON.",
+ "apihelp-json-summary": "Выводить данные в формате JSON.",
+ "apihelp-json-param-callback": "Если задано, оборачивает вывод в вызов данной функции. Из соображении безопасности, вся пользовательская информация будет удалена.",
+ "apihelp-json-param-utf8": "Если задано, кодирует большинство (но не все) не-ASCII символов в UTF-8 вместо замены их на шестнадцатеричные коды. Применяется по умолчанию, когда <var>formatversion</var> не равно <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Если задано, заменяет все не-ASCII-символы на шестнадцатеричные коды. Применяется по умолчанию, когда <var>formatversion</var> равно <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Формат вывода:\n;1: Обратно совместимый формат (логические значения в стиле XML, ключи <samp>*</samp> для узлов данных, и так далее).\n;2: Экспериментальный современный формат. Детали могут меняться!\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
+ "apihelp-jsonfm-summary": "Выводить данные в формате JSON (отформатированном в HTML).",
+ "apihelp-none-summary": "Ничего не выводить.",
+ "apihelp-php-summary": "Выводить данные в сериализованном формате PHP.",
+ "apihelp-php-param-formatversion": "Формат вывода:\n;1: Обратно совместимый формат (логические значения в стиле XML, ключи <samp>*</samp> для узлов данных, и так далее).\n;2: Экспериментальный современный формат. Детали могут меняться!\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
+ "apihelp-phpfm-summary": "Выводить данные в сериализованном формате PHP (отформатированном в HTML).",
+ "apihelp-rawfm-summary": "Выводить данные, включая элементы отладки, в формате JSON (отформатированном в HTML).",
+ "apihelp-xml-summary": "Выводить данные в формате XML.",
+ "apihelp-xml-param-xslt": "Если задано, добавляет названную страницу в качестве листа XSL. Значением должно быть название в пространстве имён {{ns:MediaWiki}}, заканчивающееся на <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Если задано, добавляет пространство имён XML.",
+ "apihelp-xmlfm-summary": "Выводить данные в формате XML (отформатированном в HTML).",
+ "api-format-title": "Результат MediaWiki API",
+ "api-format-prettyprint-header": "Это HTML-представление формата $1. HTML хорош для отладки, но неудобен для практического применения.\n\nУкажите параметр <var>format</var> для изменения формата вывода. Для отображения не-HTML-представления формата $1, присвойте <kbd>format=$2</kbd>.\n\nСм. [[mw:Special:MyLanguage/API|полную документацию]] или [[Special:ApiHelp/main|справку API]] для получения дополнительной информации.",
+ "api-format-prettyprint-header-only-html": "Это HTML-представление для отладки, не рассчитанное на практическое применение.\n\nСм. [[mw:Special:MyLanguage/API|полную документацию]] или [[Special:ApiHelp/main|справку API]] для получения дополнительной информации.",
+ "api-format-prettyprint-header-hyperlinked": "Это HTML-представление формата $1. HTML хорош для отладки, но неудобен для практического применения.\n\nУкажите параметр <var>format</var> для изменения формата вывода. Для отображения не-HTML-представления формата $1, присвойте [$3 <kbd>format=$2</kbd>].\n\nСм. [[mw:API|полную документацию]] или [[Special:ApiHelp/main|справку API]] для получения дополнительной информации.",
+ "api-format-prettyprint-status": "Этот ответ будет возвращён HTTP статусом $1 $2.",
+ "api-login-fail-aborted": "Аутентификация требует взаимодействия с пользователем, что не поддерживается <kbd>action=login</kbd>. Чтобы авторизовываться через <kbd>action=login</kbd>, см. [[Special:BotPasswords]]. Для продолжения использования авторизации основного аккаунта см. <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-aborted-nobotpw": "Аутентификация требует взаимодействия с пользователем, что не поддерживается <kbd>action=login</kbd>. Для авторизации см. <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-badsessionprovider": "Авторизация при использовании $1 невозможна.",
+ "api-login-fail-sameorigin": "Авторизация при использовании правила ограничения домена невозможна.",
+ "api-pageset-param-titles": "Список заголовков для работы.",
+ "api-pageset-param-pageids": "Список идентификаторов страниц для работы.",
+ "api-pageset-param-revids": "Список идентификаторов версий для работы.",
+ "api-pageset-param-generator": "Получить список страниц для работы, запустив указанный запрос-модуль.\n\n<strong>Примечание:</strong> названия параметров генераторов должны начинаться с «g», см. примеры.",
+ "api-pageset-param-redirects-generator": "Автоматически разрешать перенаправления в <var>$1titles</var>, <var>$1pageids</var> и <var>$1revids</var>, а также на страницах, возвращённых <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Автоматически разрешать перенаправления в <var>$1titles</var>, <var>$1pageids</var> и <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Преобразовать заголовки в другой вариант, если это необходимо. Работает только если язык содержимого вики поддерживает преобразование вариантов. Языки, поддерживающие преобразование, включают в себя $1.",
+ "api-help-title": "Справка MediaWiki API",
+ "api-help-lead": "Это автоматически сгенерированная страница документации MediaWiki API.\n\nДокументация и примеры: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Главный модуль",
+ "api-help-undocumented-module": "Нет документации для модуля $1.",
+ "api-help-flag-deprecated": "Этот модуль устарел.",
+ "api-help-flag-internal": "<strong>Этот модуль внутренний или нестабильный.</strong> Его операции могут измениться без предупреждения.",
+ "api-help-flag-readrights": "Этот модуль требует прав на чтение.",
+ "api-help-flag-writerights": "Этот модуль требует прав на запись.",
+ "api-help-flag-mustbeposted": "Этот модуль принимает только POST-запросы.",
+ "api-help-flag-generator": "Этот модуль может быть использован в качестве генератора.",
+ "api-help-source": "Источник: $1",
+ "api-help-source-unknown": "Источник: <span class=\"apihelp-unknown\">unknown</span>",
+ "api-help-license": "Лицензия: [[$1|$2]]",
+ "api-help-license-noname": "Лицензия: [[$1|см. ссылку]]",
+ "api-help-license-unknown": "Лицензия: <span class=\"apihelp-unknown\">unknown</span>",
+ "api-help-parameters": "Параметр{{PLURAL:$1||ы}}:",
+ "api-help-param-deprecated": "Устарело.",
+ "api-help-param-required": "Это обязательный параметр.",
+ "api-help-datatypes-header": "Типы данных",
+ "api-help-datatypes": "Ввод в MediaWiki должен быть NFC-нормализованным UTF-8. MediaWiki может попытаться преобразовать другой ввод, но это приведёт к провалу некоторых операций (таких, как [[Special:ApiHelp/edit|редактирование]] со сверкой MD5).\n\nНекоторые типы параметров в запросах API требуют дополнительных пояснений:\n;логический\n:Логические параметры работают как флажки (checkboxes) в HTML: если параметр задан, независимо от его значения, он воспринимается за истину. Для передачи ложного значения просто опустите параметр.\n;временные метки\n:Временные метки могут быть заданы в нескольких форматах. Рекомендуемым является дата и время ISO 8601. Всё время считается в UTC, любые включённые часовые пояса игнорируются.\n:* Дата и время ISO 8601: <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (знаки препинания и <kbd>Z</kbd> необязательны)\n:* Дата и время ISO 8601 с (игнорируемой) дробной частью секунд: <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (дефисы, двоеточия и <kbd>Z</kbd> необязательны)\n:* Формат MediaWiki: <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Общий числовой формат: <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (необязательный часовой пояс <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> или <kbd>-<var>##</var></kbd> игнорируется)\n:* Формат EXIF: <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 2822 (часовой пояс может быть опущен): <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 850 (часовой пояс может быть опущен): <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат ctime языка программирования C: <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Количество секунд, прошедших с 1970-01-01T00:00:00Z, в виде челого числа с от 1 до 13 знаками (исключая <kbd>0</kbd>)\n:* Строка <kbd>now</kbd>\n;альтернативный разделитель значений\n:Параметры, принимающие несколько значений, обычно отправляются со значениями, разделёнными с помощью символа пайпа, например, <kbd>param=value1|value2</kbd> или <kbd>param=value1%7Cvalue2</kbd>. Если значение должно содержать символ пайпа, используйте U+001F (Unit Separator) в качестве разделителя ''и'' добавьте в начало значения U+001F, например, <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+ "api-help-param-type-limit": "Тип: целое число или <kbd>max</kbd>",
+ "api-help-param-type-integer": "Тип: {{PLURAL:$1|1=целое число|2=список целых чисел}}",
+ "api-help-param-type-boolean": "Тип: логический ([[Special:ApiHelp/main#main/datatypes|подробнее]])",
+ "api-help-param-type-timestamp": "Тип: {{PLURAL:$1|1=временная метка|2=список временных меток}} ([[Special:ApiHelp/main#main/datatypes|разрешённые форматы]])",
+ "api-help-param-type-user": "Тип: {{PLURAL:$1|1=имя участника|2=список имён участников}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Одно из следующих значений|2=Значения (разделённые с помощью <kbd>{{!}}</kbd> или [[Special:ApiHelp/main#main/datatypes|альтернативного разделителя]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Должен быть пустым|Может быть пустым или $2}}",
+ "api-help-param-limit": "Разрешено не более $1.",
+ "api-help-param-limit2": "Разрешено не более $1 ($2 для ботов).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Значение должно|2=Значения должны}} быть не меньше $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Значение должно|2=Значения должны}} быть не больше $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Значение должно|2=Значения должны}} быть между $2 и $3.",
+ "api-help-param-upload": "Должно быть отправлено как файл с использованием multipart/form-data.",
+ "api-help-param-multi-separate": "Разделяйте значения с помощью <kbd>|</kbd> или [[Special:ApiHelp/main#main/datatypes|альтернативного разделителя]].",
+ "api-help-param-multi-max": "Максимально разрешённое количество значений — {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} для ботов).",
+ "api-help-param-multi-max-simple": "Максимальное количество значений — {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Для указания всех значений, используйте <kbd>$1</kbd>.",
+ "api-help-param-default": "По умолчанию: $1",
+ "api-help-param-default-empty": "По умолчанию: <span class=\"apihelp-empty\">(пусто)</span>",
+ "api-help-param-token": "Токен «$1», полученный из [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Для обратной совместимости, токен, используемый в веб-интерфейсе, также применим.",
+ "api-help-param-disabled-in-miser-mode": "Отключено из-за [[mw:Special:MyLanguage/Manual:$wgMiserMode|жадного режима]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Примечание:</strong> Из-за [[mw:Special:MyLanguage/Manual:$wgMiserMode|жадного режима]], использование этого может привести к меньшему, чем <var>$1limit</var>, числу результатов перед продолжением; в крайнем случае, может вернуться и ноль результатов.",
+ "api-help-param-direction": "В каком порядке перечислять:\n;newer: Начать с самых старых. Обратите внимание: $1start должно быть раньше $1end.\n;older: Начать с самых новых (по умолчанию). Обратите внимание: $1start должно быть позже $1end.",
+ "api-help-param-continue": "Когда доступно больше результатов, используйте это для продолжения.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(описание отсутствует)</span>",
+ "api-help-param-maxbytes": "Не может быть длиннее $1 {{PLURAL:$1|байта|байтов}}.",
+ "api-help-param-maxchars": "Не может быть длиннее $1 {{PLURAL:$1|символа|символов}}.",
+ "api-help-examples": "Пример{{PLURAL:$1||ы}}:",
+ "api-help-permissions": "{{PLURAL:$1|Разрешение|Разрешения}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Гарантируется}}: $2",
+ "api-help-right-apihighlimits": "Использовать высокие лимиты в запросах API (медленные запросы: $1, быстрые запросы: $2). Лимиты для медленных запросов также применимы к параметрам со множеством значений.",
+ "api-help-open-in-apisandbox": "<small>[открыть в песочнице]</small>",
+ "api-help-authmanager-general-usage": "Стандартная процедура использования этого модуля такова:\n# Запрос полей, доступных из <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> с <kbd>amirequestsfor=$4</kbd>, и токена <kbd>$5</kbd> из <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Предоставление полей пользователю и получение его данных.\n# Запрос к этому модулю, содержащий <var>$1returnurl</var> или аналогичное поле.\n# Проверка поля <samp>status</samp> ответа.\n#* Если вы получили <samp>PASS</samp> или <samp>FAIL</samp>, вы закончили. Операция либо завершилась успехом, либо нет.\n#* Если вы получили <samp>UI</samp>, предоставьте новые поля польззователю и получите новые данные. Затем совершите новый запрос с параметром <var>$1continue</var> и новыми полями, после чего повторите пункт 4.\n#* Если вы получили <samp>REDIRECT</samp>, отправьте пользователя на <samp>redirecttarget</samp> и подождите возвращения на <var>$1returnurl</var>. Затем совершите запрос к этому модулю с параметром <var>$1continue</var> и всеми полями, содержащимися в возвращённой ссылке, и повторите пункт 4.\n#* Если вы получили <samp>RESTART</samp>, это означает, что аутентификация работает, но мы не привязали пользовательский аккаунт. Вы можете рассматривать это как <samp>UI</samp> или <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "Использовать только эти аутентификационные запросы, с <samp>id</samp>, возвращённом из <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> с <kbd>amirequestsfor=$1</kbd>, или из предыдущего ответа этого модуля.",
+ "api-help-authmanagerhelper-request": "Использовать этот аутентификационный запрос, с <samp>id</samp>, возвращённом из <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> с <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "Формат, используемый для возвращаемых сообщений.",
+ "api-help-authmanagerhelper-mergerequestfields": "Слить поля информации со всех аутентификационных запросов в один массив.",
+ "api-help-authmanagerhelper-preservestate": "Сохранить состояние с предыдущей провалившейся попытки авторизации, если возможно.",
+ "api-help-authmanagerhelper-returnurl": "Вернуть ссылку для стороннего процесса аутентификации, должна быть абсолютной. Либо этот параметр, либо <var>$1continue</var>, обязателен.\n\nПосле получения ответа <samp>REDIRECT</samp>, вы, как правило, должны открыть в браузере или вэб-просмотрщике указанную в <samp>redirecttarget</samp> ссылку для продолжения стороннего процесса аутентификации. По завершению, сторонний сервис отошлёт браузеру или веб-просмотрщику эту ссылку. Вы должны извлечь все параметры из ссылки и отослать их в параметр <var>$1continue</var> запроса к этому модулю.",
+ "api-help-authmanagerhelper-continue": "Этот запрос — продолжение после предшествующего ответа <samp>UI</samp> или <samp>REDIRECT</samp>. Либо этот параметр, либо <var>$1returnurl</var>, обязателен.",
+ "api-help-authmanagerhelper-additional-params": "Этот модуль принимает дополнительные параметры в зависимости от доступных аутентификационных запросов. Используйте <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> с <kbd>amirequestsfor=$1</kbd> (или предыдущий ответ этого модуля, если доступен) для определения, какие запросы доступны и какие поля они используют.",
+ "apierror-allimages-redirect": "Используйте <kbd>gaifilterredir=nonredirects</kbd> вместо <var>redirects</var> при использовании <kbd>allimages</kbd> в качестве генератора.",
+ "apierror-allpages-generator-redirects": "Используйте <kbd>gaifilterredir=nonredirects</kbd> вместо <var>redirects</var> при использовании <kbd>allpages</kbd> в качестве генератора.",
+ "apierror-appendnotsupported": "Невозможно дописать страницы, использующие модель содержимого $1.",
+ "apierror-articleexists": "Статья, которую вы пытаетесь создать, уже создана.",
+ "apierror-assertbotfailed": "Проверка того, что у участника есть право <code>bot</code>, провалилась.",
+ "apierror-assertnameduserfailed": "Проверка того, что участник — «$1», провалилась.",
+ "apierror-assertuserfailed": "Проверка того, что участник авторизован, провалилась.",
+ "apierror-autoblocked": "Ваш IP-адрес был автоматически заблокирован, потому что он был использован заблокированным участником.",
+ "apierror-badconfig-resulttoosmall": "Значение <code>$wgAPIMaxResultSize</code> этой вики слишком мало, чтобы вместить базовую информацию о результате.",
+ "apierror-badcontinue": "Некорректный параметр continue. Вы должны передать значение, возвращённое предыдущим запросом.",
+ "apierror-baddiff": "Сравнение версий не может быть проведено. Одна или обе версии не существуют или у вас не достаточно прав чтобы просматривать их.",
+ "apierror-baddiffto": "<var>$1diffto</var> должно быть неотрицательным числом, <kbd>prev</kbd>, <kbd>next</kbd> или <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "Запрашиваемый формат $1 не поддерживается моделью содержимого $2.",
+ "apierror-badformat": "Запрашиваемый формат $1 не поддерживается моделью содержимого $2, используемой $3.",
+ "apierror-badgenerator-notgenerator": "Модуль <kbd>$1</kbd> не может быть использован в качестве генератора.",
+ "apierror-badgenerator-unknown": "Неизвестный <kbd>generator=$1</kbd>.",
+ "apierror-badip": "Параметр IP некорректен.",
+ "apierror-badmd5": "Предоставленный хэш MD5 был некорректным.",
+ "apierror-badmodule-badsubmodule": "У модуля <kbd>$1</kbd> нет подмодуля «$2».",
+ "apierror-badmodule-nosubmodules": "У модуля <kbd>$1</kbd> нет подмодулей.",
+ "apierror-badparameter": "Некорректное значение параметра <var>$1</var>.",
+ "apierror-badquery": "Некорректный запрос.",
+ "apierror-badtimestamp": "Некорректное значение «$2» параметра временной метки <var>$1</var>.",
+ "apierror-badtoken": "Некорректный токен CSRF.",
+ "apierror-badupload": "Параметр загрузки файла <var>$1</var> не является загрузкой файла; убедитесь, что вы используете <code>multipart/form-data</code> в вашем POST запросе и включаете название файла в заголовок <code>Content-Disposition</code>.",
+ "apierror-badurl": "Некорректное значения «$2» параметра ссылки <var>$1</var>.",
+ "apierror-baduser": "Некорректное значение «$2» параметра участника <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "Разделение значений с помощью U+001F может быть использовано только в параметрах, принимающих несколько значений.",
+ "apierror-bad-watchlist-token": "Предоставлен некорректный токен списка наблюдения. Пожалуйста, установите корректный токен в [[Special:Preferences]].",
+ "apierror-blockedfrommail": "Отправка электронной почты была для вас заблокирована.",
+ "apierror-blocked": "Редактирование было для вас заблокировано.",
+ "apierror-botsnotsupported": "Этот интерфейс не поддерживается для ботов.",
+ "apierror-cannot-async-upload-file": "Параметры <var>async</var> и <var>file</var> не могут применяться вместе. Если вы хотите ассинхронно обработать загруженный файл, сначала загрузите его во временное хранилище (используя параметр <var>stash</var>), а затем опубликуйте этот файл ассинхронно (используя параметры <var>filekey</var> и <var>async</var>).",
+ "apierror-cannotreauthenticate": "Это действие недоступно, так как ваша личность не может быть подтверждена.",
+ "apierror-cannotviewtitle": "У вас нет прав на просмотр $1.",
+ "apierror-cantblock-email": "У вас нет прав блокировать участникам отправку электронной почты через интерфейс вики.",
+ "apierror-cantblock": "У вас нет прав блокировать участников.",
+ "apierror-cantchangecontentmodel": "У вас нет прав изменять модель содержимого страницы.",
+ "apierror-canthide": "У вас нет прав скрывать имена участников из журнала блокировок.",
+ "apierror-cantimport-upload": "У вас нет прав импортировать загруженные страницы.",
+ "apierror-cantimport": "У вас нет прав импортировать страницы.",
+ "apierror-cantoverwrite-sharedfile": "Целевой файл существует в общем репозитории и у вас нет прав перезаписать его.",
+ "apierror-cantsend": "Вы не авторизованы, ваш электронный адрес не подтверждён или у вас нет прав на отправку электронной почты другим участникам, поэтому вы не можете отправить электронное письмо.",
+ "apierror-cantundelete": "Невозможно восстановить: возможно, запрашиваемые версии не существуют или уже были восстановлены.",
+ "apierror-changeauth-norequest": "Попытка создать запрос правки провалилась.",
+ "apierror-chunk-too-small": "Минимальный размер кусочка — $1 {{PLURAL:$1|байт|байта|байт}}, если кусочек не является последним.",
+ "apierror-cidrtoobroad": "Диапазоны $1 CIDR, шире /$2, не разрешены.",
+ "apierror-compare-no-title": "Невозможно выполнить преобразование перед записью правки без заголовка. Попробуйте задать <var>fromtitle</var> или <var>totitle</var>.",
+ "apierror-compare-nosuchfromsection": "Нет секции $1 в содержимом 'from'.",
+ "apierror-compare-nosuchtosection": "Нет секции $1 в содержимом 'to'.",
+ "apierror-compare-relative-to-nothing": "Нет версии 'from', к которой относится <var>torelative</var>.",
+ "apierror-contentserializationexception": "Сериализация содержимого провалилась: $1",
+ "apierror-contenttoobig": "Предоставленное вами содержимое превышает максимальный размер страницы в $1 {{PLURAL:$1|килобайт|килобайта|килобайтов}}.",
+ "apierror-copyuploadbaddomain": "Загрузка по ссылке недоступна с этого домена.",
+ "apierror-copyuploadbadurl": "Загрузка по этой ссылке недоступна.",
+ "apierror-create-titleexists": "Существующие названия не могут быть защищены с помощью <kbd>create</kbd>.",
+ "apierror-csp-report": "Ошибка при обработке отчёта CSP: $1.",
+ "apierror-databaseerror": "[$1] Ошибка запроса к базе данных.",
+ "apierror-deletedrevs-param-not-1-2": "Параметр <var>$1</var> не может быть использован в режимах 1 и 2.",
+ "apierror-deletedrevs-param-not-3": "Параметр <var>$1</var> не может быть использован в третьем режиме.",
+ "apierror-emptynewsection": "Создание пустых секций невозможно.",
+ "apierror-emptypage": "Создание новых пустых страниц не разрешено.",
+ "apierror-exceptioncaught": "[$1] Поймано исключение: $2",
+ "apierror-filedoesnotexist": "Файл не существует.",
+ "apierror-fileexists-sharedrepo-perm": "Целевой файл существует в общем репозитории. Используйте параметр <var>ignorewarnings</var>, чтобы перезаписать его.",
+ "apierror-filenopath": "Невозможно получить локальный путь к файлу.",
+ "apierror-filetypecannotberotated": "Этот тип файлов не может быть повёрнут.",
+ "apierror-formatphp": "Этот ответ не может быть представлен с использованием <kbd>format=php</kbd>. См. https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "Название для модуля <kbd>$1</kbd> должно быть файлом.",
+ "apierror-import-unknownerror": "Неизвестная ошибка при импорте: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> не может быть больше $2 (присвоено $3) для ботов и администраторов.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> не может быть больше $2 (присвоено $3) для участников.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> не может быть меньше $2 (присвоено $3).",
+ "apierror-invalidcategory": "Введённое вами название категории некорректно.",
+ "apierror-invalid-chunk": "Сумма смещения и размера текущего кусочка превышает заявленный размер файла.",
+ "apierror-invalidexpiry": "Некорректное время истечения «$1».",
+ "apierror-invalid-file-key": "Некорректный ключ файла.",
+ "apierror-invalidlang": "Некорректный код языка для параметра <var>$1</var>.",
+ "apierror-invalidoldimage": "Параметр <var>oldimage</var> имеет недопустимый формат.",
+ "apierror-invalidparammix-cannotusewith": "Параметр <kbd>$1</kbd> не может быть использован одновременно с <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "Параметр <kbd>$1</kbd> может быть использован только одновременно с <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> не может быть совмещено с параметрами <var>oldid</var>, <var>pageid</var> или <var>page</var>. Пожалуйста, используйте <var>title</var> и <var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Параметры}} $1 не могут быть использованы одновременно.",
+ "apierror-invalidsection": "Параметр <var>section</var> должен быть корректным идентификатором секции или <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "Предоставленный хэш SHA1Base36 некорректен.",
+ "apierror-invalidsha1hash": "Предоставленный хэш SHA1 некорректен.",
+ "apierror-invalidtitle": "Плохой заголовок «$1».",
+ "apierror-invalidurlparam": "Некорректное значение <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Некорректное имя участника «$1».",
+ "apierror-invaliduserid": "Некорректный идентификатор участника <var>$1</var>.",
+ "apierror-maxbytes": "Параметр <var>$1</var> не может быть длиннее $2 {{PLURAL:$2|байта|байтов}}",
+ "apierror-maxchars": "Параметр <var>$1</var> не может быть длиннее $2 {{PLURAL:$2|символа|символов}}",
+ "apierror-maxlag-generic": "Ожидание сервера базы данных: $1 {{PLURAL:$1|секунда|секунды|секунд}} задержки.",
+ "apierror-maxlag": "Ожидание $2: $1 {{PLURAL:$1|секунда|секунды|секунд}} задержки.",
+ "apierror-mimesearchdisabled": "Поиск по MIME отключен в жадном режиме.",
+ "apierror-missingcontent-pageid": "Отсутствует содержимое страницы с идентификатором $1.",
+ "apierror-missingcontent-revid": "Отсутствует содержимое версии с идентификатором $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|Параметр|Как минимум один из параметров}} $1 обязателен.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|Параметр|Один из параметров}} $1 обязателен.",
+ "apierror-missingparam": "Параметр <var>$1</var> должен быть задан.",
+ "apierror-missingrev-pageid": "Нет текущей версии страницы с идентификатором $1.",
+ "apierror-missingrev-title": "Нет текущей версии для заголовка $1.",
+ "apierror-missingtitle-createonly": "Несуществующие названия страниц могут быть защищены только с помощью <kbd>create</kbd>.",
+ "apierror-missingtitle": "Указанная вами страница не существует.",
+ "apierror-missingtitle-byname": "Страница $1 не существует.",
+ "apierror-moduledisabled": "Модуль <kbd>$1</kbd> был отключён.",
+ "apierror-multival-only-one-of": "Параметру <var>$1</var> может быть присвоено только {{PLURAL:$3|значение|одно из значений}} $2.",
+ "apierror-multpages": "Параметр <var>$1</var> может быть применён только к одной странице.",
+ "apierror-mustbeloggedin-changeauth": "Вы должны быть авторизованы для смены аутентификационных данных.",
+ "apierror-mustbeloggedin-generic": "Вы должны быть авторизованы.",
+ "apierror-mustbeloggedin-linkaccounts": "Вы должны быть авторизованы для привязывания аккаунтов.",
+ "apierror-mustbeloggedin-removeauth": "Вы должны быть авторизованы для удаления аутентификационных данных.",
+ "apierror-mustbeloggedin-uploadstash": "Временное хранилище доступно только для авторизованных участников.",
+ "apierror-mustbeloggedin": "Вы должны быть авторизованы в $1.",
+ "apierror-mustbeposted": "Модуль <kbd>$1</kbd> требует запроса POST.",
+ "apierror-mustpostparams": "{{PLURAL:$2|Следующий параметр был найден|Следующие параметры были найдены}} в строке запроса, но {{PLURAL:$2|должен|должны}} находиться в теле POST: $1.",
+ "apierror-noapiwrite": "Редактирование этой вики посредством API отключено. Убедитесь, что инструкция <code>$wgEnableWriteAPI=true;</code> включена в файл <code>LocalSettings.php</code> вики.",
+ "apierror-nochanges": "Никаких правок запрошено не было.",
+ "apierror-nodeleteablefile": "Нет такой старой версии файла.",
+ "apierror-no-direct-editing": "Прямое редактирование посредством API не поддерживается моделью содержимого $1, используемой $2.",
+ "apierror-noedit-anon": "Анонимные участники не могут редактировать страницы.",
+ "apierror-noedit": "У вас нет прав на редактирование страниц.",
+ "apierror-noimageredirect-anon": "Анонимные участники не могут создавать перенаправления на изображения.",
+ "apierror-noimageredirect": "У вас нет прав на создание перенаправлений на изображения.",
+ "apierror-nosuchlogid": "Нет записей журналов с идентификатором $1.",
+ "apierror-nosuchpageid": "Нет страницы с идентификатором $1.",
+ "apierror-nosuchrcid": "Нет недавней правки с идентификатором $1.",
+ "apierror-nosuchrevid": "Нет версии с идентификатором $1.",
+ "apierror-nosuchsection": "Нет секции $1.",
+ "apierror-nosuchsection-what": "Нет секции $1 в $2.",
+ "apierror-nosuchuserid": "Нет участника с идентификатором $1.",
+ "apierror-notarget": "Вы не указали корректной цели этого действия.",
+ "apierror-notpatrollable": "Версия r$1 не может быть отпатрулирована, так как она слишком стара.",
+ "apierror-nouploadmodule": "Модуль загрузки не задан.",
+ "apierror-offline": "Невозможно продолжить из-за проблем с сетевым подключением. Убедитесь, что у вас есть подключение к Интернету и повторите попытку.",
+ "apierror-opensearch-json-warnings": "Предупреждения не могут быть представлены в формате OpenSearch JSON.",
+ "apierror-pagecannotexist": "Данное пространство имён не может содержать эти страницы.",
+ "apierror-pagedeleted": "Страница была удалена с тех пор, как вы запросили её временную метку.",
+ "apierror-pagelang-disabled": "Смена языка страницы не разрешена в этой вики.",
+ "apierror-paramempty": "Параметр <var>$1</var> не может быть пустым.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> разрешён только для вики-текстового содержимого.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> разрешён только для вики-текстового содержимого. $1 использует модель содержимого $2.",
+ "apierror-pastexpiry": "Время окончания «$1» находится в прошлом.",
+ "apierror-permissiondenied": "У вас нет прав на $1.",
+ "apierror-permissiondenied-generic": "Доступ запрещён.",
+ "apierror-permissiondenied-patrolflag": "Вам нужно право <code>patrol</code> или <code>patrolmarks</code> для запроса статуса патрулирования.",
+ "apierror-permissiondenied-unblock": "У вас нет прав снимать блокировку с участников.",
+ "apierror-prefixsearchdisabled": "Поиск по префиксу отключен в жадном режиме.",
+ "apierror-promised-nonwrite-api": "Заголовок HTTP <code>Promise-Non-Write-API-Action</code> не может быть передан в записывающие модули API.",
+ "apierror-protect-invalidaction": "Недопустимый тип защиты «$1».",
+ "apierror-protect-invalidlevel": "Недопустимый уровень защиты «$1».",
+ "apierror-ratelimited": "Вы превысили ваше ограничение скорости. Пожалуйста, подождите некоторое время и попробуйте снова.",
+ "apierror-readapidenied": "Вам нужны права на чтение для использования этого модуля.",
+ "apierror-readonly": "Эта вики находится в режиме «только для чтения».",
+ "apierror-reauthenticate": "Вы ещё не авторизовывались в этой сессии, пожалуйста, переавторизуйтесь.",
+ "apierror-redirect-appendonly": "Вы попытались отредактировать страницу в режиме следования по перенаправлениям, который должен быть использован в связке с <kbd>section=new</kbd>, <var>prependtext</var> или <var>appendtext</var>.",
+ "apierror-revdel-mutuallyexclusive": "Одно и то же поле не может быть использовано и в <var>hide</var>, и в <var>show</var>.",
+ "apierror-revdel-needtarget": "Для этого типа RevDel требуется указание целевого названия страницы.",
+ "apierror-revdel-paramneeded": "Как минимум одно значение требуется в <var>hide</var> и/или <var>show</var>.",
+ "apierror-revisions-badid": "Не было найдено версий по параметру <var>$1</var>.",
+ "apierror-revisions-norevids": "Параметр <var>revids</var> не может быть использован с настройками списка (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> и <var>$1end</var>).",
+ "apierror-revisions-singlepage": "Параметры <var>titles</var> и <var>pageids</var> и генераторы используются для обработки множества страниц, но параметры <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var> и <var>$1end</var> могут быть применены только к одной странице.",
+ "apierror-revwrongpage": "r$1 не является версией $2.",
+ "apierror-searchdisabled": "Поисковый параметр <var>$1</var> отключён.",
+ "apierror-sectionreplacefailed": "Невозможно слить обновлённую секцию.",
+ "apierror-sectionsnotsupported": "Разбиение на секции не поддерживается моделью содержимого $1.",
+ "apierror-sectionsnotsupported-what": "Разбиение на секции не поддерживается $1.",
+ "apierror-show": "Некорректный параметр — вручную исключённые значения не могут быть обработаны.",
+ "apierror-siteinfo-includealldenied": "Невозможно отобразить информацию о всех серверах, если <var>$wgShowHostNames</var> не истинно.",
+ "apierror-sizediffdisabled": "Подсчёт разницы размеров отключён в жадном режиме.",
+ "apierror-spamdetected": "Ваша правка была отклонена, так как содержит спам: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "У вас нет прав, чтобы просматривать результаты этой служебной страницы.",
+ "apierror-stashedfilenotfound": "Невозможно найти файл во временном хранилище: $1.",
+ "apierror-stashedit-missingtext": "Не найдено содержимого тайника для данного хэша.",
+ "apierror-stashfailed-complete": "Загрузка по кусочкам уже завершена, проверьте статус для получения подробной информации.",
+ "apierror-stashfailed-nosession": "Не найдено сессии загрузки по кусочкам с заданным ключом.",
+ "apierror-stashfilestorage": "Невозможно сохранить файл во временном хранилище: $1",
+ "apierror-stashinvalidfile": "Некорректный файл в тайнике.",
+ "apierror-stashnosuchfilekey": "Нет такого ключа файла: $1.",
+ "apierror-stashpathinvalid": "Ключ файла относится к некорректному формату или сам некорректен: $1.",
+ "apierror-stashwrongowner": "Некорректный владелец: $1",
+ "apierror-stashzerolength": "Файл имеет нулевую длину и не может быть сохранён во временное хранилище: $1",
+ "apierror-systemblocked": "Вы были заблокированы автоматически MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "Раскрытие шаблонов разрешено только для вики-текстового содержимого. $1 использует модель содержимого $2.",
+ "apierror-timeout": "Сервер не ответил за ожидаемое время.",
+ "apierror-toofewexpiries": "Задано $1 {{PLURAL:$1|временная метка|временные метки|временных меток}} истечения, необходимо $2.",
+ "apierror-unknownaction": "Заданное действие, <kbd>$1</kbd>, не распознано.",
+ "apierror-unknownerror-editpage": "Неизвестная ошибка EditPage: $1.",
+ "apierror-unknownerror-nocode": "Неизвестная ошибка.",
+ "apierror-unknownerror": "Неизвестная ошибка: «$1».",
+ "apierror-unknownformat": "Нераспознанный формат «$1».",
+ "apierror-unrecognizedparams": "{{PLURAL:$2|Нераспознанный параметр|Нераспознанные параметры}}: $1",
+ "apierror-unrecognizedvalue": "Нераспознанное значение параметра <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "Локальное хранилище файлов не поддерживает запрос всех изображений.",
+ "apierror-upload-filekeyneeded": "Необходимо задать <var>filekey</var>, если <var>offset</var> не ноль.",
+ "apierror-upload-filekeynotallowed": "Невозможно обработать <var>filekey</var>, если <var>offset</var> равен 0.",
+ "apierror-upload-inprogress": "Процесс загрузки из временного хранилища уже запущен.",
+ "apierror-upload-missingresult": "Нет результатов данных статуса.",
+ "apierror-urlparamnormal": "Невозможно нормализовать параметры изображения для $1.",
+ "apierror-writeapidenied": "У вас нет прав на редактирование этой вики через API.",
+ "apiwarn-alldeletedrevisions-performance": "Для повышения производительности, при генерировании заголовков установите <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Невозможно распарсить $2 из <var>$1urlparam</var>. Используется только ширина и высота.",
+ "apiwarn-badutf8": "Значение, переданное <var>$1</var>, содержит некорректные или ненормализованные данные. Текстовые данные должны быть корректным NFC-нормализованным Юникодом без символов управления C0, кроме HT (\\t), LF (\\n) и CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "Проверьте, что символы вроде «+» в токене корректно закодированы %-последовательностями в ссылке.",
+ "apiwarn-compare-nocontentmodel": "Модель содержимого не может быть определена, предполагается $1.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> устарел. Пожалуйста, вместо него используйте <kbd>prop=deletedrevisions</kbd> или <kbd>list=alldeletedrevisions</kbd>.",
+ "apiwarn-deprecation-expandtemplates-prop": "Поскольку никакие значения не были указаны в параметре <var>prop</var>, был использован наследованный формат. Этот формат является устаревшим, и в будущем параметру <var>prop</var> будет присвоено значение по умолчанию, что приведёт к повсеместному использованию нового формата.",
+ "apiwarn-deprecation-httpsexpected": "Использован HTTP, где ожидался HTTPS.",
+ "apiwarn-deprecation-login-botpw": "Вход в основной аккаунт через <kbd>action=login</kbd> устарел и может быть отключен без предупреждения. Для продолжения авторизации с <kbd>action=login</kbd>, см.\n[[Special:BotPasswords]]. Для безопасного продолжения использования входа в основной аккаунт, см. <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "Вход в основной аккаунт через <kbd>action=login</kbd> не поддерживается и может быть отключен без предупреждения. Для безопасной авторизации, см. <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "Запрос токена через <kbd>action=login</kbd> устарел. Используйте <kbd>action=query&meta=tokens&type=login</kbd>.",
+ "apiwarn-deprecation-parameter": "Параметр <var>$1</var> не поддерживается.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> устарело с MediaWiki 1.28. Используйте <kbd>prop=headhtml</kbd> при создании новых HTML документов или <kbd>prop=modules|jsconfigvars</kbd> при обновлении документов на стороне клиента.",
+ "apiwarn-deprecation-purge-get": "Использование <kbd>action=purge</kbd> посредством GET устарело. Используйте POST.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> не поддерживается. Пожалуйста, используйте <kbd>$2</kbd>.",
+ "apiwarn-difftohidden": "Невозможно сравнить с r$1: содержимое скрыто.",
+ "apiwarn-errorprinterfailed": "Сборщик ошибок упал. Будет совершена повторная попытка без параметров.",
+ "apiwarn-errorprinterfailed-ex": "Сборщик ошибок упал (будет совершена повторная попытка без параметров): $1",
+ "apiwarn-invalidcategory": "«$1» не является категорией.",
+ "apiwarn-invalidtitle": "«$1» не является некорректным заголовком.",
+ "apiwarn-invalidxmlstylesheetext": "Таблицы стилей должны иметь расширение <code>.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "Задана некорректная или несуществующая таблица стилей.",
+ "apiwarn-invalidxmlstylesheetns": "Таблица стилей должна находиться в пространстве имён {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "Было задано свойство kbd>modules</kbd>, но не были —<kbd>jsconfigvars</kbd> или <kbd>encodedjsconfigvars</kbd>. Конфигурационные переменные обязательны для корректного использования модуля.",
+ "apiwarn-notfile": "«$1» не является файлом.",
+ "apiwarn-nothumb-noimagehandler": "Невозможно создать эскиз, поскольку у $1 нет связанного обработчика изображений.",
+ "apiwarn-parse-nocontentmodel": "Параметры <var>title</var> или <var>contentmodel</var> не заданы, предполагается $1.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var> использован без <var>text</var>, при этом запрошены распарсенные свойства страницы. Возможно, вы хотели использовать <var>oldid</var> вместо <var>revid</var>?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> использован без <var>text</var>, при этом запрошены распарсенные свойства страницы. Возможно, вы хотели использовать <var>page</var> вместо <var>title</var>?",
+ "apiwarn-redirectsandrevids": "Раскрытие перенаправлений не может быть использовано вместе с параметром <var>revids</var>. Все перенаправления на точку <var>revids</var> не должны быть раскрыты.",
+ "apiwarn-tokennotallowed": "Действие «$1» не разрешено для текущего участника.",
+ "apiwarn-tokens-origin": "Токены не могут быть получены, пока не применено правило ограничения домена.",
+ "apiwarn-toomanyvalues": "Слишком много значений передано параметру <var>$1</var>. Максимальное число — $2.",
+ "apiwarn-truncatedresult": "Результат был усечён, поскольку в противном случае он был бы больше лимита в $1 {{PLURAL:$1|байт|байта|байт}}.",
+ "apiwarn-unclearnowtimestamp": "Передача «$2» в качестве параметра временной метки <var>$1</var> устарело. Если по какой-то причине вы хотите прямо указать текущее время без вычисления его на стороне клиента, используйте <kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Нераспознанное значение|Нераспознанные значения}} параметра <var>$1</var>: $2.",
+ "apiwarn-unsupportedarray": "Параметр <var>$1</var> использует неподдерживаемый синтаксис массивов PHP.",
+ "apiwarn-urlparamwidth": "Значение ширины ($2), переданное в <var>$1urlparam</var>, было проигнорировано в пользу значения ($3), полученного из параметров <var>$1urlwidth</var>/<var>$1urlheight</var>.",
+ "apiwarn-validationfailed-badchars": "некорректные символы в ключе (разрешены только <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> и <code>-</code>).",
+ "apiwarn-validationfailed-badpref": "некорректная настройка.",
+ "apiwarn-validationfailed-cannotset": "не может быть задано этим модулем.",
+ "apiwarn-validationfailed-keytoolong": "ключ слишком длинен (разрешено не более $1 {{PLURAL:$1|байт|байта|байт}}).",
+ "apiwarn-validationfailed": "Ошибка проверки для <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Предупреждение безопасности</strong>: активирован <var>$wgDebugAPI</var>.",
+ "api-feed-error-title": "Ошибка ($1)",
+ "api-usage-docref": "См. $1 для использования API.",
+ "api-usage-mailinglist-ref": "Подпишитесь на электронную рассылку MediaWiki API на &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt;, чтобы получать информацию о неподдерживаемых функциях и ломающих изменениях.",
+ "api-exception-trace": "$1 в $2($3)\n$4",
+ "api-credits-header": "Создатели",
+ "api-credits": "Разработчики API:\n* Yuri Astrakhan (создатель, ведущий разработчик с сентября 2006 по сентябрь 2007)\n* Roan Kattouw (ведущий разработчик 2007—2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (ведущий разработчик с 2013)\n\nПожалуйста, присылайте ваши комментарии, предложения и вопросы на адрес mediawiki-api@lists.wikimedia.org\nили присылайте отчёты об ошибках на https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/sah.json b/www/wiki/includes/api/i18n/sah.json
new file mode 100644
index 00000000..89e17f46
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sah.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "София",
+ "HalanTul"
+ ]
+ },
+ "apihelp-stashedit-param-summary": "Түмүгү уларыт."
+}
diff --git a/www/wiki/includes/api/i18n/sd.json b/www/wiki/includes/api/i18n/sd.json
new file mode 100644
index 00000000..589fb649
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sd.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mehtab ahmed",
+ "Aursani"
+ ]
+ },
+ "apihelp-query+allrevisions-summary": "سمورن ڀيرن جي فهرست پيش ڪريو.",
+ "apihelp-query+watchlist-param-type": "ڪهڙن قسمن جون تبديليون ڏيکارجن:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "قاعديوار صفحاتي ترميمون.",
+ "apihelp-query+watchlist-paramvalue-type-external": "خارجي تبديليون.",
+ "apihelp-query+watchlist-paramvalue-type-new": "صفحن جون تخليقون.",
+ "apihelp-query+watchlist-paramvalue-type-log": "لاگ داخلائون.",
+ "apihelp-stashedit-param-summary": "تَتُ تبديل ڪريو."
+}
diff --git a/www/wiki/includes/api/i18n/sh.json b/www/wiki/includes/api/i18n/sh.json
new file mode 100644
index 00000000..19d31d42
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Conquistador"
+ ]
+ },
+ "apihelp-login-param-password": "Lozinka."
+}
diff --git a/www/wiki/includes/api/i18n/shn.json b/www/wiki/includes/api/i18n/shn.json
new file mode 100644
index 00000000..a5804f6c
--- /dev/null
+++ b/www/wiki/includes/api/i18n/shn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saosukham"
+ ]
+ },
+ "apihelp-feedrecentchanges-param-hidecategorization": "သိူင်ႇပၢႆး ၽူႈၶဝ်ႈၸုမ်းလႅၵ်ႈလၢႆႈ"
+}
diff --git a/www/wiki/includes/api/i18n/si.json b/www/wiki/includes/api/i18n/si.json
new file mode 100644
index 00000000..a73785ac
--- /dev/null
+++ b/www/wiki/includes/api/i18n/si.json
@@ -0,0 +1,65 @@
+{
+ "@metadata": {
+ "authors": [
+ "Susith Chandira Gts",
+ "SusithCM"
+ ]
+ },
+ "apihelp-main-param-action": "ඉටු කිරීමට ඇත්තේ කුමන ක්‍රියාවද.",
+ "apihelp-main-param-format": "ප්‍රතිදානයේ ආකෘතිය.",
+ "apihelp-main-param-requestid": "මෙහි ඇති සියලුම වටිනාකම් ප්‍රතිචාරයන්හි අන්තර්ගතකොට ඇත. ඇතැම් විට පැහැදිලිව වටහාගත් ඉල්ලීම් සදහා භාවිතා වේ.",
+ "apihelp-main-param-servedby": "ප්‍රතිපලයන්හි ඉල්ලීම් ඉටුකළ ධාරකනාමය ඇතුලත් කරන්න.",
+ "apihelp-main-param-curtimestamp": "ප්‍රථිපලයන්හි කාල මුද්‍රාව ඇතුලත් කරන්න.",
+ "apihelp-help-summary": "නිරූපිත ඒකක සදහා උදවු පෙන්වන්න.",
+ "apihelp-help-param-submodules": "නම් කරන ලද ඒකකයේ, අනුඒකක සදහා උදවු ඇතුලත් කරන්න.",
+ "apihelp-help-param-helpformat": "උදවු ප්‍රතිදානයේ ආකෘතිය.",
+ "apihelp-help-param-wrap": "ප්‍රතිදානය නියමිත API අනුකූලතා ආකෘතියකට හරවන්න.",
+ "apihelp-help-param-toc": "HTML ප්‍රතිදනයන්ගේ පටුනේ ලැයිස්තුවක් ඇතුලත් කරන්න.",
+ "apihelp-help-example-main": "ප්‍රධාන ඒකකය සදහා උදවු කරන්න",
+ "apihelp-help-example-recursive": "සියලුම උදවු එක පිටුවක් තුල",
+ "apihelp-help-example-query": "සැකසහිත අනුඒකක සදහා උදවු කරන්න",
+ "apihelp-login-param-name": "පරිශීලක නාමය.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "මෙම පිටුව සඳහා වූ JavaScript වින්‍යාස විචල්‍යයන් ලබා දෙයි.",
+ "apihelp-userrights-param-user": "පරිශීලක නාමය.",
+ "apihelp-userrights-param-userid": "පරිශීලක අනන්‍යාංකය.",
+ "apihelp-format-example-generic": "$1 ආකෘතියේ ඇති සැක සහිත ප්‍රථිපල පරිවර්තනය කරන්න",
+ "apihelp-json-summary": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී.",
+ "apihelp-jsonfm-summary": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-none-summary": "ප්‍රතිදානයේ කිසිවක් නොමැත.",
+ "apihelp-php-summary": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී.",
+ "apihelp-phpfm-summary": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-xml-summary": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී.",
+ "apihelp-xml-param-includexmlnamespace": "නිරූපණය කළා නම්, XML නාමාවකාශයක් එකතු කරන්න.",
+ "apihelp-xmlfm-summary": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "api-format-title": "මාධ්‍යවිකි API ප්‍රථිපල",
+ "api-help-title": "මාධ්‍යවිකි API උදවු",
+ "api-help-lead": "මෙය ස්වයං-ජනිත මාධ්‍යවිකි API \tප්‍රලේඛන පිටුවකි.\n\nප්‍රලේඛනය සහ උදාහරණ:\nhttps://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "ප්‍රධාන ආකෘතිය",
+ "api-help-flag-deprecated": "මෙම ආකෘතිය විරුද්ධත්වය ප්‍රකාශ කරන ලදී.",
+ "api-help-flag-internal": "<strong>මෙම ඒකකය අභ්‍යන්තර හෝ අස්ථායි.\n</strong> එහි ක්‍රියාකාරිත්වය දැනුම් දීමකින් තොරව වෙනස් වියහැක.",
+ "api-help-flag-readrights": "මෙම ඒකකය සදහා හිමිකම් කියවීම අවශ්‍ය වේ.",
+ "api-help-flag-writerights": "මෙම ඒකකය සදහා හිමිකම් ලිවීම අවශ්‍ය වේ.",
+ "api-help-flag-mustbeposted": "මෙම ඒකකය POST ඉල්ලීම් පමණක් බාරගනී.",
+ "api-help-flag-generator": "මෙම ආකෘතිය \tඋත්පාදකයක් ලෙස භාවිතා කල හැක.",
+ "api-help-parameters": "{{PLURAL:$1|පරාමිතිය|පරාමිතීන්}}:",
+ "api-help-param-deprecated": "විරුද්ධත්වය ප්‍රකාශ කර ඇත.",
+ "api-help-param-required": "මෙම පරාමිතිය අවශ්‍යයි.",
+ "api-help-param-list": "{{PLURAL:$1|1=එක් වටිනාකමක්|2=වටිනාකම් (\"{{!}}\" සමග වෙන් කරන්න)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=හිස් කල යුතුයි|හිස් කල හැකියි, හෝ $2}}",
+ "api-help-param-limit": "$1 ට වඩා අනුමත නොකරයි.",
+ "api-help-param-limit2": "$1 කට වැඩ අනුමත කරන්නේ නැත ($2 බොට්ස් සදහාය).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=අගය|2=අගයන්}} $2 ට වඩා අඩු නොවිය යුතුය.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=වටිනාකම|2=වටිනාකම්}} $3 ට ව වැඩි නොවිය යුතුය.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=අගය|2=අගයන්}} $2 සහ $3 අතර පැවතිය යුතුය.",
+ "api-help-param-multi-separate": "වටිනාකම් \"|\" සමග වෙන් කරන්න.",
+ "api-help-param-multi-max": "අංක සදහා උපරිම වටිනාකම {{PLURAL:$1|$1}}\n({{PLURAL:$2|$2}} බොට්ස් සදහා)",
+ "api-help-param-default": "Default: $1",
+ "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(හිස්)</span>",
+ "api-help-param-token": "[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] මගින් \"$1\" \tසංඥාව සොයාගන්නා ලදී",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(විස්තරයක් නැත)</span>",
+ "api-help-examples": "{{PLURAL:$1|උදාහරණය|උදාහරණ}}:",
+ "api-help-permissions": "{{PLURAL:$1|අවසරය|අවසරයන්}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|\tප්‍රදානලාභියාට}}: $2",
+ "api-credits-header": "ස්තුතිය",
+ "api-credits": "API වැඩිදියුණු කරන්නන්:\n* Roan Kattouw (ප්‍රධානියා 2007 සැප්. –2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (නිර්මාපකයා, ප්‍රධානියා 2006 සැප්. – 2007 සැප්.)\n* Brad Jorsch (ප්‍රධානියා 2013–මේ දක්වා)\n\nඔබගේ අදහස්, යෝජනා හා ගැටළු mediawiki-api@lists.wikimedia.org වෙත යොමු කරන්න, පින්තූර හෝ ගොනු හරහා ගැටළු ඉදිරිපත් කිරීමට https://phabricator.wikimedia.org/ වෙත පිවිසෙන්න."
+}
diff --git a/www/wiki/includes/api/i18n/sk.json b/www/wiki/includes/api/i18n/sk.json
new file mode 100644
index 00000000..823e29fe
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Teslaton"
+ ]
+ },
+ "apihelp-main-param-format": "Formát výstupu."
+}
diff --git a/www/wiki/includes/api/i18n/sq.json b/www/wiki/includes/api/i18n/sq.json
new file mode 100644
index 00000000..a685096f
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sq.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ammartivari",
+ "Kosovastar"
+ ]
+ },
+ "apihelp-block-param-reason": "Arsyeja për bllokim.",
+ "apihelp-move-param-reason": "Arsyeja për riemërtim.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Kthehet në faqen e statistikave.",
+ "apihelp-tag-param-reason": "Arsyeja për ndërrimin.",
+ "apihelp-unblock-summary": "Zhblloko një përdorues.",
+ "apihelp-upload-param-file": "Përmbajtja e skedave.",
+ "apihelp-userrights-summary": "Ndërro anëtarësinë e grupit të një përdoruesit."
+}
diff --git a/www/wiki/includes/api/i18n/sr-ec.json b/www/wiki/includes/api/i18n/sr-ec.json
new file mode 100644
index 00000000..6eba3155
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sr-ec.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "Aktron",
+ "Сербијана"
+ ]
+ },
+ "apihelp-block-summary": "Блокирај корисника.",
+ "apihelp-block-param-reason": "Разлог за блокирање.",
+ "apihelp-createaccount-param-name": "Корисничко име.",
+ "apihelp-delete-summary": "Обриши страницу.",
+ "apihelp-edit-param-text": "Страница са садржајем.",
+ "apihelp-edit-param-minor": "Мања измена.",
+ "apihelp-edit-example-edit": "Уређивање странице.",
+ "apihelp-emailuser-summary": "Слање имејла кориснику.",
+ "apihelp-emailuser-param-target": "Корисник је послао имејл.",
+ "apihelp-feedcontributions-param-year": "Од године (и раније).",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Сакриј патролиране измене.",
+ "apihelp-filerevert-summary": "Вратити датотеку у ранију верзију.",
+ "apihelp-help-example-recursive": "Сва помоћ у једној страници.",
+ "apihelp-login-param-name": "Корисничко име.",
+ "apihelp-login-param-password": "Лозинка.",
+ "apihelp-login-example-login": "Пријавa.",
+ "apihelp-move-summary": "Премештање странице.",
+ "apihelp-query+allrevisions-param-namespace": "Само списак страница у овом именском простору.",
+ "apihelp-stashedit-param-text": "Страница са садржајем."
+}
diff --git a/www/wiki/includes/api/i18n/sr-el.json b/www/wiki/includes/api/i18n/sr-el.json
new file mode 100644
index 00000000..15154263
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sr-el.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01"
+ ]
+ },
+ "apihelp-block-summary": "Blokiraj korisnika.",
+ "apihelp-block-param-reason": "Razlog za blokiranje.",
+ "apihelp-delete-summary": "Obriši stranicu.",
+ "apihelp-edit-param-minor": "Manja izmena.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Sakrij patrolirane izmene."
+}
diff --git a/www/wiki/includes/api/i18n/sv.json b/www/wiki/includes/api/i18n/sv.json
new file mode 100644
index 00000000..5c0a12ee
--- /dev/null
+++ b/www/wiki/includes/api/i18n/sv.json
@@ -0,0 +1,557 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jopparn",
+ "Lokal Profil",
+ "WikiPhoenix",
+ "Victorsa",
+ "Albinomamba",
+ "Peki01",
+ "Stens51",
+ "Boom",
+ "Jenniesarina",
+ "Marfuas",
+ "VickyC",
+ "Josve05a",
+ "Rockyfelle",
+ "Macofe",
+ "Magol",
+ "Bengtsson96"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Vanliga frågor]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Sändlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-nyheter]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Buggar och begäran]\n</div>\n<strong>Status:</strong> Alla funktioner som visas på denna sida bör fungera, men API:et är fortfarande under utveckling och kan ändras när som helst. Prenumerera på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ sändlistan mediawiki-api-announce] för uppdateringsaviseringar.\n\n<strong>Felaktiga begäran:</strong> När felaktiga begäran skickas till API:et kommer en HTTP-header skickas med nyckeln \"MediaWiki-API-Error\" och sedan kommer både värdet i headern och felkoden som skickades tillbaka anges som samma värde. För mer information se [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fel och varningar]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testning:</strong> För enkelt testning av API-begäran, se [[Special:ApiSandbox]].</p>",
+ "apihelp-main-param-action": "Vilken åtgärd som ska utföras.",
+ "apihelp-main-param-format": "Formatet för utdata.",
+ "apihelp-main-param-smaxage": "Ange headervärdet <code>s-maxage</code> till så här många sekunder. Fel cachelagras aldrig.",
+ "apihelp-main-param-maxage": "Ange headervärdet <code>max-age</code> till så här många sekunder. Fel cachelagras aldrig.",
+ "apihelp-main-param-assert": "Bekräfta att användaren är inloggad om satt till <kbd>user</kbd>, eller har bot-användarrättigheter om satt till <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Verifiera att den nuvarande användaren är den namngivne användaren.",
+ "apihelp-main-param-requestid": "Alla värde som anges här kommer att inkluderas i svaret. Kan användas för att särskilja förfrågningar.",
+ "apihelp-main-param-servedby": "Inkludera det värdnamn som besvarade förfrågan i resultatet.",
+ "apihelp-main-param-curtimestamp": "Inkludera den aktuella tidsstämpeln i resultatet.",
+ "apihelp-main-param-responselanginfo": "Inkluderar de språk som används för <var>uselang</var> och <var>errorlang</var> i resultatet.",
+ "apihelp-main-param-origin": "När API:et används genom en cross-domain AJAX-begäran (CORS), ange detta till den ursprungliga domänen. Detta måste inkluderas i alla pre-flight-begäran, och mpste därför vara en del av den begärda URI:n (inte i POST-datat). Detta måste överensstämma med en av källorna i headern <code>Origin</code> exakt, så den måste sättas till något i stil med <kbd>http://en.wikipedia.org</kbd> eller <kbd>https://meta.wikimedia.org</kbd>. Om denna parameter inte överensstämmer med headern <code>Origin</code>, returneras ett 403-svar. Om denna parameter överensstämmer med headern <code>Origin</code> och källan är vitlistad, sätts en <code>Access-Control-Allow-Origin</code>-header.",
+ "apihelp-main-param-uselang": "Språk som ska användas för meddelandeöversättningar. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages</kbd> returnerar en lista med språkkoder, eller ange <kbd>user</kbd> för att använda den aktuella användarens språkpreferenser, eller ange <kbd>content</kbd> för att använda innehållsspråket.",
+ "apihelp-main-param-errorlang": "Språk att använda för varningar och fel. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages</kbd> returnerar en lista över språkkoder eller specifikt <kbd>content</kbd> för att använda innehållsspråket på denna wiki, eller specifikt <kbd>uselang</kbd> för att använda samma värde som parametern <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "Om angivet kommer feltexter att använda lokalt anpassade meddelande från namnrymden {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "Blockera en användare.",
+ "apihelp-block-param-user": "Användare, IP-adress eller IP-intervall att blockera. Kan inte användas tillsammans med <var>$1userid</var>",
+ "apihelp-block-param-userid": "Användar-ID att blocker. Kan inte användas tillsammans med <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Förfallotid. Kan vara Kan vara relativt (t.ex. <kbd>5 months</kbd> eller <kbd>2 weeks</kbd>) eller absolut (t.ex. <kbd>2014-09-18T12:34:56Z</kbd>). Om satt till <kbd>infinite</kbd>, <kbd>indefinite</kbd> eller <kbd>never</kbd>, kommer blockeringen aldrig att löpa ut.",
+ "apihelp-block-param-reason": "Orsak till blockering.",
+ "apihelp-block-param-anononly": "Blockera endast anonyma användare (t.ex. inaktivera anonyma redigeringar för denna IP-adress).",
+ "apihelp-block-param-nocreate": "Förhindra registrering av användarkonton.",
+ "apihelp-block-param-autoblock": "Blockera automatiskt den senast använda IP-adressen, och alla efterföljande IP-adresser de försöker logga in från.",
+ "apihelp-block-param-noemail": "Hindra användaren från att skicka e-post via wikin. (Kräver rättigheten <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Döljer användarnamnet från blockeringsloggen. (Kräver rättigheten <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Låt användaren redigera sin egen diskussionssida (beror på <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Skriv över befintlig blockering om användaren redan är blockerad.",
+ "apihelp-block-param-watchuser": "Bevaka användarens eller IP-adressens användarsida och diskussionssida",
+ "apihelp-block-param-tags": "Ändra märken att tillämpa i blockloggens post.",
+ "apihelp-block-example-ip-simple": "Blockera IP-adressen <kbd>192.0.2.5</kbd> i tre dagar med motivationen <kbd>First strike</kbd>",
+ "apihelp-block-example-user-complex": "Blockera användare <kbd>Vandal</kbd> på obegränsad tid med motivationen <kbd>Vandalism</kbd>, och förhindra kontoskapande och e-post.",
+ "apihelp-changeauthenticationdata-summary": "Ändra autentiseringsdata för aktuell användare.",
+ "apihelp-changeauthenticationdata-example-password": "Försök att ändra aktuell användares lösenord till <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Kontrollera giltigheten av en nyckel från <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Typ av token som testas.",
+ "apihelp-checktoken-param-token": "Token att testa.",
+ "apihelp-checktoken-param-maxtokenage": "Högsta tillåtna åldern för token, i sekunder.",
+ "apihelp-checktoken-example-simple": "Testa giltigheten av en <kbd>csrf</kbd>-token.",
+ "apihelp-clearhasmsg-summary": "Rensa <code>hasmsg</code>-flaggan för den aktuella användaren.",
+ "apihelp-clearhasmsg-example-1": "Rensa <code>hasmsg</code>-flaggan för den aktuella användaren",
+ "apihelp-clientlogin-summary": "Logga till på wikin med det interaktiva flödet.",
+ "apihelp-clientlogin-example-login": "Börja att logga in wikin som användaren <kbd>Example</kbd> med lösenordet <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Fortsätt logga in efter ett svar av typen <samp>UI</samp> för en tvåstegsverifiering, som uppger en <var>OATHToken</var> med värdet <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Hämta skillnaden mellan två sidor.",
+ "apihelp-compare-extended-description": "Ett versionsnummer, en sidtitel, ett sid-ID, text eller en relativ referens för både \"from\" och \"to\" måste godkännas.",
+ "apihelp-compare-param-fromtitle": "Första titeln att jämföra.",
+ "apihelp-compare-param-fromid": "Första sid-ID att jämföra.",
+ "apihelp-compare-param-fromrev": "Första version att jämföra.",
+ "apihelp-compare-param-fromtext": "Använd denna text istället för innehållet i sidversionen som anges i <var>fromtitle</var>, <var>fromid</var> eller <var>fromrev</var>.",
+ "apihelp-compare-param-fromcontentmodel": "Innehållsmodell för <var>fromtext</var>. Om det inte anges kommer den gissas fram baserat på de andra parametrarna.",
+ "apihelp-compare-param-totitle": "Andra titeln att jämföra.",
+ "apihelp-compare-param-toid": "Andra sid-ID att jämföra.",
+ "apihelp-compare-param-torev": "Andra version att jämföra.",
+ "apihelp-compare-example-1": "Skapa en diff mellan version 1 och 2",
+ "apihelp-createaccount-summary": "Skapa ett nytt användarkonto.",
+ "apihelp-createaccount-param-name": "Användarnamn.",
+ "apihelp-createaccount-param-password": "Lösenord (ignoreras om <var>$1mailpassword</var> angetts).",
+ "apihelp-createaccount-param-domain": "Domän för extern autentisering (frivillig).",
+ "apihelp-createaccount-param-token": "Nyckel för kontoskapande erhölls i första begäran.",
+ "apihelp-createaccount-param-email": "Användarens e-postadress (valfritt).",
+ "apihelp-createaccount-param-realname": "Användarens riktiga namn (valfritt).",
+ "apihelp-createaccount-param-mailpassword": "Om satt till ett värde, skickas ett slumpmässigt lösenord till användaren via e-post.",
+ "apihelp-createaccount-param-reason": "Valfri anledning för att skapa kontot för att läggas till i loggarna.",
+ "apihelp-createaccount-param-language": "Språkkod att använda som standard för användaren (valfri, standardvärdet är innehållsspråket).",
+ "apihelp-createaccount-example-pass": "Skapa användaren <kbd>testuser</kbd> med lösenordet <kbd>test123</kbd>",
+ "apihelp-createaccount-example-mail": "Skapa användaren <kbd>testmailuser</kbd> och skicka ett slumpgenererat lösenord via e-post",
+ "apihelp-delete-summary": "Radera en sida.",
+ "apihelp-delete-param-title": "Titel på sidan du vill radera. Kan inte användas tillsammans med <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Sid-ID för sidan att radera. Kan inte användas tillsammans med <var>$1titel</var>.",
+ "apihelp-delete-param-reason": "Orsak till radering. Om orsak inte ges kommer en orsak att automatiskt genereras och användas.",
+ "apihelp-delete-param-watch": "Lägg till sidan i aktuell användares bevakningslista.",
+ "apihelp-delete-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
+ "apihelp-delete-param-unwatch": "Ta bort sidan från aktuell användares bevakningslista.",
+ "apihelp-delete-param-oldimage": "Namnet på den gamla bilden att radera som tillhandahålls av [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Radera <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Raderar <kbd>Main Page</kbd> med orsaken <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Denna modul har inaktiverats.",
+ "apihelp-edit-summary": "Skapa och redigera sidor.",
+ "apihelp-edit-param-title": "Titel på sidan du vill redigera. Kan inte användas tillsammans med <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Sid-ID för sidan du vill redigera. Kan inte användas tillsammans med <var>$1titel</var>.",
+ "apihelp-edit-param-section": "Avsnittsnummer. <kbd>0</kbd> för det översta avsnittet, <kbd>new</kbd> för ett nytt avsnitt.",
+ "apihelp-edit-param-sectiontitle": "Rubriken för ett nytt avsnitt.",
+ "apihelp-edit-param-text": "Sidans innehåll.",
+ "apihelp-edit-param-summary": "Redigeringssammanfattning. Även avsnittets rubrik när $1section=new och $1sectiontitle inte anges.",
+ "apihelp-edit-param-tags": "Ändra taggar till att gälla för revideringen.",
+ "apihelp-edit-param-minor": "Mindre redigering.",
+ "apihelp-edit-param-notminor": "Icke-mindre redigering.",
+ "apihelp-edit-param-bot": "Markera denna redigering som en robotredigering.",
+ "apihelp-edit-param-basetimestamp": "Tidsstämpel för grundversionen, används för att upptäcka redigeringskonflikter. Kan erhållas genom [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Tidsstämpel för när redigeringsprocessen började, används för att upptäcka redigeringskonflikter. Ett lämpligt värde kan erhållas via <var>[[Special:ApiHelp/main|curtimestamp]]</var> när redigeringsprocessen startas (t.ex. när sidans innehåll laddas för redigering).",
+ "apihelp-edit-param-recreate": "Ignorera felmeddelande om sidan har blivit raderad under tiden.",
+ "apihelp-edit-param-createonly": "Redigera inte sidan om den redan finns.",
+ "apihelp-edit-param-nocreate": "Kasta ett fel om sidan inte finns.",
+ "apihelp-edit-param-watch": "Lägg till sidan i den aktuella användarens bevakningslista.",
+ "apihelp-edit-param-unwatch": "Ta bort sidan från aktuell användares bevakningslista.",
+ "apihelp-edit-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
+ "apihelp-edit-param-md5": "MD5-hash för $1text-parametern, eller $1prependtext- och $1appendtext-parametrarna sammanfogade.",
+ "apihelp-edit-param-prependtext": "Lägg till denna text i början på sidan. Ersätter $1text.",
+ "apihelp-edit-param-appendtext": "Lägg till denna text i slutet på sidan. Ersätter $1text.\n\nAnvänd $1section=new för att lägga till en ny sektion, hellre än denna parameter.",
+ "apihelp-edit-param-undo": "Ångra denna sidversion. Skriver över $1text, $1prependtext och $1appendtext.",
+ "apihelp-edit-param-undoafter": "Ångra alla sidversioner från $1undo till denna. Om inte, ångra endast en sidversion.",
+ "apihelp-edit-param-redirect": "Åtgärda automatiskt omdirigeringar.",
+ "apihelp-edit-param-contentformat": "Det serialiseringsformat som används för indatatexten.",
+ "apihelp-edit-param-contentmodel": "Det nya innehållets innehållsmodell.",
+ "apihelp-edit-param-token": "Token ska alltid skickas som sista parameter, eller åtminstone efter $1text-parametern",
+ "apihelp-edit-example-edit": "Redigera en sida",
+ "apihelp-edit-example-prepend": "Lägg till <kbd>_&#95;NOTOC_&#95;</kbd> i början på en sida.",
+ "apihelp-edit-example-undo": "Ångra sidversioner 13579 till 13585 med automatisk sammanfattning.",
+ "apihelp-emailuser-summary": "Skicka e-post till en användare.",
+ "apihelp-emailuser-param-target": "Användare att skicka e-post till.",
+ "apihelp-emailuser-param-subject": "Ämnesrubrik.",
+ "apihelp-emailuser-param-text": "E-postmeddelandets innehåll.",
+ "apihelp-emailuser-param-ccme": "Skicka en kopia av detta e-postmeddelande till mig.",
+ "apihelp-emailuser-example-email": "Skicka ett e-postmeddelande till användaren <kbd>WikiSysop</kbd> med texten <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Expanderar alla mallar inom wikitext.",
+ "apihelp-expandtemplates-param-title": "Sidans rubrik.",
+ "apihelp-expandtemplates-param-text": "Wikitext att konvertera.",
+ "apihelp-expandtemplates-param-revid": "Revisions-ID, för <code><nowiki>{{REVISIONID}}</nowiki></code> och liknande variabler.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Den expanderade wikitexten.",
+ "apihelp-expandtemplates-param-includecomments": "Om HTML-kommentarer skall inkluderas i utdata.",
+ "apihelp-expandtemplates-param-generatexml": "Generera ett XML tolknings träd (ersatt av $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expandera wikitexten <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Returnerar en användares bidragsflöde.",
+ "apihelp-feedcontributions-param-feedformat": "Flödets format.",
+ "apihelp-feedcontributions-param-user": "De användare vars bidrag ska hämtas.",
+ "apihelp-feedcontributions-param-namespace": "Vilken namnrymd att filtrera bidrag med.",
+ "apihelp-feedcontributions-param-year": "Från år (och tidigare).",
+ "apihelp-feedcontributions-param-month": "Från månad (och tidigare).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrera bidrag som har dessa taggar.",
+ "apihelp-feedcontributions-param-deletedonly": "Visa bara borttagna bidrag.",
+ "apihelp-feedcontributions-param-toponly": "Visa endast ändringar som är senaste revideringen.",
+ "apihelp-feedcontributions-param-newonly": "Visa endast redigeringar där sidor skapas.",
+ "apihelp-feedcontributions-param-hideminor": "Göm mindre ändringar.",
+ "apihelp-feedcontributions-param-showsizediff": "Visa skillnaden i storlek mellan revisioner.",
+ "apihelp-feedcontributions-example-simple": "Returnera bidrag för <kbd>Exempel</kbd>",
+ "apihelp-feedrecentchanges-summary": "Returnerar ett flöde med senaste ändringar.",
+ "apihelp-feedrecentchanges-param-feedformat": "Flödets format.",
+ "apihelp-feedrecentchanges-param-namespace": "Namnrymder att begränsa resultaten till.",
+ "apihelp-feedrecentchanges-param-invert": "Alla namnrymder utom den valda.",
+ "apihelp-feedrecentchanges-param-days": "Dagar att begränsa resultaten till.",
+ "apihelp-feedrecentchanges-param-limit": "Maximalt antal resultat att returnera.",
+ "apihelp-feedrecentchanges-param-from": "Visa förändringar sedan dess.",
+ "apihelp-feedrecentchanges-param-hideminor": "Dölj mindre ändringar.",
+ "apihelp-feedrecentchanges-param-hidebots": "Dölj robotändringar.",
+ "apihelp-feedrecentchanges-param-hideanons": "Dölj ändringar av oinloggade användare.",
+ "apihelp-feedrecentchanges-param-hideliu": "Dölj ändringar av inloggade användare.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Dölj patrullerade ändringar.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Dölj ändringar av aktuell användare.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrera efter tagg.",
+ "apihelp-feedrecentchanges-param-target": "Visa endast ändringarna av sidor som den här sidan länkar till.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Visa ändringarna på sidor som är länkade till den valda sidan i stället.",
+ "apihelp-feedrecentchanges-example-simple": "Visa senaste ändringar",
+ "apihelp-feedrecentchanges-example-30days": "Visa senaste ändringar för 30 dygn",
+ "apihelp-feedwatchlist-summary": "Returnerar ett flöde från bevakningslistan.",
+ "apihelp-feedwatchlist-param-feedformat": "Flödets format.",
+ "apihelp-feedwatchlist-param-hours": "Lista sidor ändrade inom så här många timmar från nu.",
+ "apihelp-feedwatchlist-param-linktosections": "Länka direkt till ändrade avsnitt om möjligt.",
+ "apihelp-feedwatchlist-example-default": "Visa flödet från bevakningslistan.",
+ "apihelp-feedwatchlist-example-all6hrs": "Visa alla ändringar på besökta sidor under de senaste sex timmarna.",
+ "apihelp-filerevert-summary": "Återställ en fil till en äldre version.",
+ "apihelp-filerevert-param-filename": "Målfilens namn, utan prefixet Fil:.",
+ "apihelp-filerevert-param-comment": "Ladda upp kommentar.",
+ "apihelp-filerevert-param-archivename": "Arkiv-namn för revisionen att gå tillbaka till.",
+ "apihelp-filerevert-example-revert": "Återställ <kbd>Wiki.png</kbd> till versionen från <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Visa hjälp för de angivna modulerna.",
+ "apihelp-help-param-modules": "Vilka moduler som hjälpen ska visas för (värdena på parametrarna <var>action</var> och <var>format</var>, eller <kbd>main</kbd>). Undermoduler kan anges med ett plustecken (<kbd>+</kbd>).",
+ "apihelp-help-param-submodules": "Inkludera hjälp för undermoduler av den namngivna modulen.",
+ "apihelp-help-param-recursivesubmodules": "Inkludera hjälp för undermoduler rekursivt.",
+ "apihelp-help-param-helpformat": "Formatet för hjälp-utdata.",
+ "apihelp-help-param-wrap": "Omge utdatan i en standard API respons struktur.",
+ "apihelp-help-param-toc": "Inkludera en innehållsförteckning i HTML-utdata.",
+ "apihelp-help-example-main": "Hjälp för huvudmodul",
+ "apihelp-help-example-submodules": "Hjälp för <kbd>action=query</kbd> och alla dess undermoduler.",
+ "apihelp-help-example-recursive": "All hjälp på en sida",
+ "apihelp-help-example-help": "Hjälp för själva hjälpmodulen",
+ "apihelp-help-example-query": "Hjälp för två frågeundermoduler.",
+ "apihelp-imagerotate-summary": "Rotera en eller flera bilder.",
+ "apihelp-imagerotate-param-rotation": "Grader att rotera bild medurs.",
+ "apihelp-imagerotate-param-tags": "Märken att tillämpa i uppladdningsloggens post.",
+ "apihelp-imagerotate-example-simple": "Rotera <kbd>File:Example.png</kbd> med <kbd>90</kbd> grader",
+ "apihelp-imagerotate-example-generator": "Rotera alla bilder i <kbd>Category:Flip</kbd> med <kbd>180</kbd> grader.",
+ "apihelp-import-summary": "Importer en sida från en annan wiki eller från en XML-fil.",
+ "apihelp-import-extended-description": "Notera att HTTP POST måste bli gjord som en fil uppladdning (d.v.s med multipart/form-data) när man skickar en fil för <var>xml</var> parametern.",
+ "apihelp-import-param-summary": "Sammanfattning för importering av loggpost.",
+ "apihelp-import-param-xml": "Uppladdad XML-fil.",
+ "apihelp-import-param-interwikisource": "För interwiki-importer: wiki som du vill importera från.",
+ "apihelp-import-param-interwikipage": "För interwiki-importer: sidan som du vill importera.",
+ "apihelp-import-param-fullhistory": "För interwiki-importer: importera hela historiken, inte bara den aktuella versionen.",
+ "apihelp-import-param-templates": "För interwiki-importer: importera även alla mallar som ingår.",
+ "apihelp-import-param-namespace": "Importera till denna namnrymd. Kan inte användas tillsammans med <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Importera som undersida till denna sida. Kan inte användas tillsammans med <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Ändringsmärken att tillämpa i importeringsloggens post och i nullsidversionen på de importerade sidorna.",
+ "apihelp-import-example-import": "Importera [[meta:Help:ParserFunctions]] till namnrymd 100 med full historik.",
+ "apihelp-linkaccount-summary": "Länka ett konto från en tredjepartsleverantör till nuvarande användare.",
+ "apihelp-linkaccount-example-link": "Börja länka till ett konto från <kbd>Example</kbd>.",
+ "apihelp-login-summary": "Logga in och hämta autentiseringskakor.",
+ "apihelp-login-extended-description": "Om inloggningen lyckas, finns de cookies som krävs med i HTTP-svarshuvuden. Om inloggningen misslyckas kan ytterligare försök per tidsenhet begränsas, som ett sätt att försöka minska risken för automatiserade lösenordsgissningar.",
+ "apihelp-login-param-name": "Användarnamn.",
+ "apihelp-login-param-password": "Lösenord.",
+ "apihelp-login-param-domain": "Domän (valfritt).",
+ "apihelp-login-param-token": "Login nyckel erhållen i första begäran.",
+ "apihelp-login-example-gettoken": "Hämta en login nyckel.",
+ "apihelp-login-example-login": "Logga in",
+ "apihelp-logout-summary": "Logga ut och rensa sessionsdata.",
+ "apihelp-logout-example-logout": "Logga ut den aktuella användaren",
+ "apihelp-managetags-summary": "Utför hanterings uppgifter relaterade till förändrings taggar.",
+ "apihelp-managetags-param-tag": "Tagg för att skapa, radera, aktivera eller inaktivera. Vid skapande av tagg kan taggen inte existera. Vid raderande av tagg måste taggen existera. För aktiverande av tagg måste taggen existera och inte användas i ett tillägg. För inaktivering av tagg måste taggen användas just nu och vara manuellt definierad.",
+ "apihelp-managetags-param-reason": "En icke-obligatorisk orsak för att skapa, radera, aktivera, eller inaktivera taggen.",
+ "apihelp-managetags-param-ignorewarnings": "Om du vill ignorera varningar som utfärdas under operationen.",
+ "apihelp-managetags-example-create": "Skapa en tagg vid namn <kbd>spam</kbd> med anledningen: <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Radera <kbd>vandalims</kbd> taggen med andledningen: <kbd>Felstavat</kbd>",
+ "apihelp-managetags-example-activate": "Aktivera en tagg med namn <kbd>spam</kbd> med anledningen: <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Inaktivera en tagg vid namn <kbd>spam</kbd> med anledningen: <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Sammanfoga sidhistoriker.",
+ "apihelp-mergehistory-param-reason": "Orsaken till sammanfogning av historik.",
+ "apihelp-mergehistory-example-merge": "Sammanfoga hela historiken för <kbd>Oldpage</kbd> i <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Sammanfoga den sidversion av <kbd>Oldpage</kbd> daterad fram till <kbd>2015-12-31T04:37:41Z</kbd> till <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Flytta en sida.",
+ "apihelp-move-param-from": "Titeln på sidan du vill flytta. Kan inte användas tillsammans med <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Sid-ID för sidan att byta namn. Kan inte användas tillsammans med <var>$1from</var>.",
+ "apihelp-move-param-to": "Titel att byta namn på sidan till.",
+ "apihelp-move-param-reason": "Orsak till namnbytet.",
+ "apihelp-move-param-movetalk": "Byt namn på diskussionssidan, om den finns.",
+ "apihelp-move-param-movesubpages": "Byt namn på undersidor, om tillämpligt.",
+ "apihelp-move-param-noredirect": "Skapa inte en omdirigering.",
+ "apihelp-move-param-watch": "Lägg till sidan och omdirigeringen till den aktuella användarens bevakningslista.",
+ "apihelp-move-param-unwatch": "Ta bort sidan och omdirigeringen från den aktuella användarens bevakningslista.",
+ "apihelp-move-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
+ "apihelp-move-param-ignorewarnings": "Ignorera alla varningar.",
+ "apihelp-move-example-move": "Flytta <kbd>Badtitle</kbd> till <kbd>Goodtitle</kbd> utan att lämna en omdirigering.",
+ "apihelp-opensearch-summary": "Sök wikin med protokollet OpenSearch.",
+ "apihelp-opensearch-param-search": "Söksträng.",
+ "apihelp-opensearch-param-limit": "Maximalt antal resultat att returnera.",
+ "apihelp-opensearch-param-namespace": "Namnrymder att genomsöka. Ignoreras om <var>$1search</var> börjar med ett giltigt namnrymdsprefix.",
+ "apihelp-opensearch-param-suggest": "Gör ingenting om <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> är falskt.",
+ "apihelp-opensearch-param-format": "Formatet för utdata.",
+ "apihelp-opensearch-example-te": "Hitta sidor som börjar med <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Ändra inställningar för nuvarande användare.",
+ "apihelp-options-param-reset": "Återställer inställningarna till sidans standardvärden.",
+ "apihelp-options-example-reset": "Återställ alla inställningar",
+ "apihelp-options-example-complex": "Återställ alla inställningar, ställ sedan in <kbd>skin</kbd> och <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Få information om API moduler.",
+ "apihelp-paraminfo-param-helpformat": "Format för hjälpsträngar.",
+ "apihelp-paraminfo-param-mainmodule": "Få information om huvud-modulen (top-level) också. Använd <kbd>$1modules=main</kbd> istället.",
+ "apihelp-parse-param-summary": "Sammanfattning att tolka.",
+ "apihelp-parse-param-page": "Tolka innehållet av denna sida. Kan inte användas tillsammans med <var>$1text</var> och <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Tolka innehållet på denna sida. Åsidosätter <var>$1sidan</var>.",
+ "apihelp-parse-param-prop": "Vilka bitar av information att få:",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Ger HTML-version av kategorierna.",
+ "apihelp-parse-param-disablepp": "Använd <var>$1disablelimitreport</var> istället.",
+ "apihelp-parse-param-preview": "Tolka i preview-läget.",
+ "apihelp-parse-example-page": "Tolka en sida.",
+ "apihelp-parse-example-text": "Tolka wikitext.",
+ "apihelp-parse-example-texttitle": "Tolka wikitext, specificera sid-titeln.",
+ "apihelp-parse-example-summary": "Tolka en sammanfattning.",
+ "apihelp-patrol-summary": "Patrullera en sida eller en version.",
+ "apihelp-patrol-param-revid": "Versions ID att patrullera.",
+ "apihelp-patrol-example-rcid": "Patrullera en nykommen ändring.",
+ "apihelp-patrol-example-revid": "Patrullera en sidversion",
+ "apihelp-protect-summary": "Ändra skyddsnivån för en sida.",
+ "apihelp-protect-example-protect": "Skydda en sida",
+ "apihelp-purge-summary": "Rensa cachen för angivna titlar.",
+ "apihelp-purge-param-forcelinkupdate": "Uppdatera länktabellerna.",
+ "apihelp-query-param-list": "Vilka listor att hämta.",
+ "apihelp-query-param-meta": "Vilka metadata att hämta.",
+ "apihelp-query-example-allpages": "Hämta sidversioner av sidor som börjar med <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-param-prefix": "Sök efter alla kategorititlar som börjar med detta värde.",
+ "apihelp-query+allcategories-param-dir": "Riktning att sortera mot.",
+ "apihelp-query+allcategories-param-min": "Returnera endast kategorier med minst så här många medlemmar.",
+ "apihelp-query+allcategories-param-max": "Returnera endast kategorier med som mest så här många medlemmar.",
+ "apihelp-query+allcategories-param-limit": "Hur många kategorier att returnera.",
+ "apihelp-query+allcategories-param-prop": "Vilka egenskaper att hämta:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Lägger till antal sidor i kategorin.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Märker kategorier som är dolda med <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+alldeletedrevisions-summary": "Lista alla raderade revisioner av en användare or inom en namnrymd.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kan endast användas med <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kan inte användas med <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-from": "Börja lista vid denna titel.",
+ "apihelp-query+alldeletedrevisions-param-to": "Sluta lista vid denna titel.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Sök alla sid-titlar som börjar med detta värde.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Lista bara revideringar taggade med denna tagg.",
+ "apihelp-query+alldeletedrevisions-param-user": "Lista bara revideringar av denna användaren.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Lista inte revideringar av denna användaren.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Lista bara sidor i denna namnrymd.",
+ "apihelp-query+alldeletedrevisions-example-user": "List de senaste 50 raderade bidragen av användaren <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Lista dem första 50 revideringarna i huvud-namnrymden",
+ "apihelp-query+allfileusages-summary": "Lista all fil användningsområden, inklusive icke-existerande.",
+ "apihelp-query+allfileusages-param-prefix": "Sök för all fil-titlar som börjar med detta värde.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Lägger till filens titel.",
+ "apihelp-query+allfileusages-param-limit": "Hur många saker att returnera totalt.",
+ "apihelp-query+allfileusages-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allfileusages-example-unique": "Lista unika filtitlar",
+ "apihelp-query+allfileusages-example-unique-generator": "Hämtar alla fil titlar, markerar dem saknade.",
+ "apihelp-query+allfileusages-example-generator": "Hämtar sidor som innehåller filerna.",
+ "apihelp-query+allimages-param-sort": "Egenskap att sortera efter.",
+ "apihelp-query+allimages-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allimages-param-prefix": "Sök för alla bild titlar som börjar med detta värde. Kan endast användas med $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Begränsning på bilder med åtminstone så här många bytes.",
+ "apihelp-query+allimages-param-maxsize": "Begränsning på bilder med som mest så här många bytes.",
+ "apihelp-query+allimages-param-sha1": "SHA1 hash av bild. Åsidosätter $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1 hash av bild i bas 36 (används i MediaWiki).",
+ "apihelp-query+allimages-param-user": "Returnera enbart filer uppladdade av denna användare. Kan enbart användas med $1sort=timestamp. Kan inte användas tillsammans med $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Hur man filtrerar filer uppladdade av bots. Kan enbart användas med $1sort=timestamp. Kan inte användas tillsammans med $1user.",
+ "apihelp-query+allimages-param-mime": "Vilka MIME-typer du vill söka efter, t.ex. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Hur många bilder att returnera totalt.",
+ "apihelp-query+allimages-example-B": "Visa en lista över filer som börjar på bokstaven <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Visa en lista över nyligen överförda filer, ungefär som [[Special:Nya_filer]].",
+ "apihelp-query+allimages-example-mimetypes": "Visa en lista över filer med MIME-typen <kbd>image/png</kbd> eller <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Visa info om 4 filer som börjar med bokstaven <kbd>T</kbd>.",
+ "apihelp-query+alllinks-param-prefix": "Sök alla länkade titlar som börjar med detta värde.",
+ "apihelp-query+alllinks-param-limit": "Hur många saker att returnera totalt.",
+ "apihelp-query+alllinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+alllinks-example-B": "Lista länkade titlar, inkluderade saknade, med dem sid-IDs dem är från, med början vid <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Lista unika länkade titlar.",
+ "apihelp-query+alllinks-example-unique-generator": "Hämtar alla länkade titlar, markera de saknade.",
+ "apihelp-query+alllinks-example-generator": "Hämtar sidor som innehåller länkarna.",
+ "apihelp-query+allmessages-summary": "Returnera meddelande från denna sida.",
+ "apihelp-query+allmessages-param-messages": "Vilka meddelande att ge som utdata. <kbd>*</kbd> (standard) betyder alla meddelande .",
+ "apihelp-query+allmessages-param-prop": "Vilka egenskaper att hämta.",
+ "apihelp-query+allmessages-param-args": "Argument som ska substitueras i meddelandet.",
+ "apihelp-query+allmessages-param-filter": "Returnera enbart meddelande med namn som innehåller denna sträng.",
+ "apihelp-query+allmessages-param-customised": "Returnera endast meddelanden i detta anpassningstillstånd.",
+ "apihelp-query+allmessages-param-lang": "Returnera meddelanden på detta språk.",
+ "apihelp-query+allmessages-param-from": "Returnera meddelanden med början på detta meddelande.",
+ "apihelp-query+allmessages-param-to": "Returnera meddelanden fram till och med detta meddelande.",
+ "apihelp-query+allmessages-param-title": "Sidnamn som ska användas som kontext vid parsning av meddelande (för alternativet $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Returnera meddelanden med detta prefix.",
+ "apihelp-query+allmessages-example-ipb": "Visa meddelanden som börjar med <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Visa meddelanden <kbd>august</kbd> och <kbd>mainpage</kbd> på tyska.",
+ "apihelp-query+allpages-param-prefix": "Sök efter alla sidtitlar som börjar med detta värde.",
+ "apihelp-query+allpages-param-filterredir": "Vilka sidor att lista.",
+ "apihelp-query+allpages-param-minsize": "Begränsa till sidor med detta antal byte eller fler.",
+ "apihelp-query+allpages-param-maxsize": "Begränsa till sidor med högst så här många byte.",
+ "apihelp-query+allpages-param-prtype": "Begränsa till endast skyddade sidor.",
+ "apihelp-query+allpages-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+allpages-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allpages-example-B": "Visa en lista över sidor som börjar på bokstaven <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Visa information om fyra sidor som börjar på bokstaven <kbd>T</kbd>.",
+ "apihelp-query+allredirects-summary": "Lista alla omdirigeringar till en namnrymd.",
+ "apihelp-query+allredirects-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allredirects-example-unique-generator": "Hämtar alla målsidor, markerar de som saknas.",
+ "apihelp-query+allrevisions-summary": "Lista alla sidversioner.",
+ "apihelp-query+alltransclusions-summary": "Lista alla mallinkluderingar (sidor inbäddade med &#123;&#123;x&#125;&#125;), inklusive icke-befintliga.",
+ "apihelp-query+alltransclusions-param-limit": "Hur många objekt att returnera.",
+ "apihelp-query+alltransclusions-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+alltransclusions-example-unique": "Lista unika mallinkluderade titlar.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Hämtar alla mallinkluderade titlar, markerar de som saknas.",
+ "apihelp-query+allusers-param-prefix": "Sök för alla användare som börjar med detta värde.",
+ "apihelp-query+allusers-param-dir": "Riktning att sortera i.",
+ "apihelp-query+allusers-param-group": "Inkludera bara användare i de givna grupperna.",
+ "apihelp-query+allusers-param-excludegroup": "Exkludera användare i de givna grupperna.",
+ "apihelp-query+allusers-param-rights": "Inkludera bara användare med de givna rättigheterna. Inkluderar inte rättigheter givna med implicita eller automatiskt promotade grupper som *, användare, eller auto-konfirmerad.",
+ "apihelp-query+allusers-param-limit": "Hur många användarnamn att returnera totalt.",
+ "apihelp-query+allusers-param-witheditsonly": "Lista bara användare som har gjort redigeringar.",
+ "apihelp-query+allusers-param-activeusers": "Lista bara användare aktiva i dem sista $1{{PLURAL:$1|dagen|dagarna}}.",
+ "apihelp-query+allusers-example-Y": "Lista användare som börjar på <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Hämta information om aktuell autentiseringsstatus.",
+ "apihelp-query+backlinks-summary": "Hitta alla sidor som länkar till den givna sidan.",
+ "apihelp-query+backlinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+backlinks-example-simple": "Visa länkar till <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Lista alla blockerade användare och IP-adresser.",
+ "apihelp-query+blocks-param-prop": "Vilka egenskaper att hämta.",
+ "apihelp-query+blocks-paramvalue-prop-id": "Lägger till ID på blocket.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Lägger till användarnamn för den blockerade användaren.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Lägger till användar-ID för den blockerade användaren.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Lägger till en tidsstämpel för när blockeringen gavs.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Lägger till en tidsstämpel för när blockeringen går ut.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Lägger till de skäl som angetts för blockeringen.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Lägger till intervallet av IP-adresser som berörs av blockeringen.",
+ "apihelp-query+blocks-example-simple": "Lista blockeringar.",
+ "apihelp-query+blocks-example-users": "Lista blockeringar av användarna <kbd>Alice</kbd> och <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Lista alla kategorier sidorna tillhör.",
+ "apihelp-query+categories-param-show": "Vilka sorters kategorier att visa.",
+ "apihelp-query+categories-param-limit": "Hur många kategorier att returnera.",
+ "apihelp-query+categories-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+categories-example-simple": "Hämta en lista över kategorier som sidan <kbd>Albert Einstein</kbd> tillhör.",
+ "apihelp-query+categories-example-generator": "Hämta information om alla kategorier som används på sidan <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Returnerar information om angivna kategorier.",
+ "apihelp-query+categoryinfo-example-simple": "Hämta information om <kbd>Category:Foo</kbd> och <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Lista alla sidor i en angiven kategori.",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Lägger till sid-ID.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Lägger till titeln och namnrymds-ID för sidan.",
+ "apihelp-query+categorymembers-param-sort": "Egenskap att sortera efter.",
+ "apihelp-query+categorymembers-param-dir": "I vilken riktning att sortera.",
+ "apihelp-query+categorymembers-param-startsortkey": "Använd $1starthexsortkey istället.",
+ "apihelp-query+categorymembers-param-endsortkey": "Använd $1endhexsortkey istället.",
+ "apihelp-query+categorymembers-example-simple": "Hämta de tio första sidorna i <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Hämta sidinformation om de tio första sidorna i <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Hämta listan över inloggade bidragsgivare och antalet anonyma bidragsgivare för en sida.",
+ "apihelp-query+contributors-param-limit": "Hur många bidragsgivare att returnera.",
+ "apihelp-query+deletedrevisions-summary": "Hämta information om raderad sidversion.",
+ "apihelp-query+deletedrevisions-param-user": "Lista endast sidversioner av denna användare.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Lista inte sidversioner av denna användare.",
+ "apihelp-query+deletedrevs-summary": "Lista raderade sidversioner.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Läge|Lägen}}: $2",
+ "apihelp-query+deletedrevs-param-from": "Börja lista vid denna titel.",
+ "apihelp-query+deletedrevs-param-to": "Sluta lista vid denna titel.",
+ "apihelp-query+disabled-summary": "Denna frågemodul har inaktiverats.",
+ "apihelp-query+duplicatefiles-summary": "Lista alla filer som är dubbletter av angivna filer baserat på hashvärden.",
+ "apihelp-query+duplicatefiles-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+duplicatefiles-example-generated": "Leta efter kopior av alla filer.",
+ "apihelp-query+embeddedin-summary": "Hitta alla sidor som bäddar in (inkluderar) angiven titel.",
+ "apihelp-query+embeddedin-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+embeddedin-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+extlinks-param-limit": "Hur många länkar som ska returneras.",
+ "apihelp-query+extlinks-example-simple": "Hämta en lista över externa länkar på <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-param-limit": "Hur många sidor att returnera.",
+ "apihelp-query+exturlusage-example-simple": "Visa sidor som länkar till <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-param-limit": "Hur många bilder att returnera totalt.",
+ "apihelp-query+filearchive-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Lägger till tidsstämpel för den uppladdade versionen.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Lägger till användaren som laddade upp bildversionen.",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias för storlek.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Lägger till beskrivning till bildversionen.",
+ "apihelp-query+filearchive-example-simple": "Visa en lista över alla borttagna filer.",
+ "apihelp-query+filerepoinfo-summary": "Returnera metainformation om bildegenskaper som konfigureras på wikin.",
+ "apihelp-query+fileusage-summary": "Hitta alla sidor som använder angivna filer.",
+ "apihelp-query+fileusage-param-prop": "Vilka egenskaper att hämta:",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Titel för varje sida.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Flagga om sidan är en omdirigering.",
+ "apihelp-query+imageinfo-summary": "Returnerar filinformation och uppladdningshistorik.",
+ "apihelp-query+imageinfo-param-prop": "Vilka filinformation att hämta:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Lägger till tidsstämpel för den uppladdade versionen.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Lägg till det användar-ID som laddade upp varje filversion.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias för storlek.",
+ "apihelp-query+images-param-limit": "Hur många filer att returnera.",
+ "apihelp-query+images-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+images-example-simple": "Hämta en lista över filer som används på [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Hitta alla sidor som användare angiven bildtitel.",
+ "apihelp-query+imageusage-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+imageusage-example-simple": "Visa sidor med hjälp av [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Hämta information om sidor med hjälp av [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Få grundläggande sidinformation.",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "Ger visningstiteln i alla variationer på webbplatsens innehållsspråk.",
+ "apihelp-query+iwbacklinks-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+iwbacklinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+iwlinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+langbacklinks-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+langbacklinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+langbacklinks-example-simple": "Hämta sidor som länkar till [[:fr:Test]].",
+ "apihelp-query+langlinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+links-summary": "Returnerar alla länkar från angivna sidor.",
+ "apihelp-query+links-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+linkshere-summary": "Hitta alla sidor som länkar till angivna sidor.",
+ "apihelp-query+logevents-summary": "Hämta händelser från loggar.",
+ "apihelp-query+pageswithprop-summary": "Lista alla sidor som använder en angiven sidegenskap.",
+ "apihelp-query+prefixsearch-param-namespace": "Namnrymder att söka efter. Ignoreras om <var>$1search</var> börjar med ett giltigt namnrymdsprefix.",
+ "apihelp-query+prefixsearch-param-profile": "Sök profil att använda.",
+ "apihelp-query+protectedtitles-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+protectedtitles-example-simple": "Lista skyddade titlar.",
+ "apihelp-query+random-summary": "Hämta en uppsättning slumpsidor.",
+ "apihelp-query+recentchanges-example-simple": "Lista de senaste ändringarna.",
+ "apihelp-query+redirects-summary": "Returnerar alla omdirigeringar till angivna sidor.",
+ "apihelp-query+revisions-summary": "Hämta information om sidversion.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Hämta första 5 revideringarna av <kbd>huvudsidan</kbd> och som inte gjorts av anonym användare <kbd>127.0.0.1</kbd>",
+ "apihelp-query+search-summary": "Utför en heltextsökning.",
+ "apihelp-query+search-paramvalue-prop-score": "Ignorerad.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ignorerad.",
+ "apihelp-query+siteinfo-summary": "Returnera allmän information om webbplatsen.",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Returnerar en lista över språkkoder som [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] har aktiverat och de varianter som varje stöder.",
+ "apihelp-query+siteinfo-example-simple": "Hämta information om webbplatsen.",
+ "apihelp-query+stashimageinfo-summary": "Returnerar filinformation för temporära filer.",
+ "apihelp-query+stashimageinfo-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.",
+ "apihelp-query+stashimageinfo-example-simple": "Returnerar information för en temporär fil",
+ "apihelp-query+tags-summary": "Lista ändringsmärken.",
+ "apihelp-query+tags-example-simple": "Lista tillgängliga taggar.",
+ "apihelp-query+templates-summary": "Returnerar alla sidinkluderingar på angivna sidor.",
+ "apihelp-query+templates-param-namespace": "Visa mallar i endast denna namnrymd.",
+ "apihelp-query+transcludedin-summary": "Hitta alla sidor som inkluderar angivna sidor.",
+ "apihelp-query+usercontribs-summary": "Hämta alla redigeringar av en användare.",
+ "apihelp-query+userinfo-summary": "Få information om den aktuella användaren.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Hämta en nyckel för att ändra aktuell användares inställningar.",
+ "apihelp-query+userinfo-example-simple": "Få information om den aktuella användaren.",
+ "apihelp-query+userinfo-example-data": "Få ytterligare information om den aktuella användaren.",
+ "apihelp-query+users-summary": "Hämta information om en lista över användare.",
+ "apihelp-query+watchlist-summary": "Hämta de senaste ändringarna på sidor i den nuvarande användarens bevakningslista.",
+ "apihelp-query+watchlist-example-allrev": "Hämta information om de senaste ändringarna på sidor på den aktuella användarens bevakningslista.",
+ "apihelp-query+watchlist-example-generator": "Hämta sidinformation för nyligen uppdaterade sidor på nuvarande användares bevakningslista.",
+ "apihelp-query+watchlist-example-generator-rev": "Hämta ändringsinformation för nyligen uppdaterade sidor på nuvarande användares bevakningslista.",
+ "apihelp-query+watchlistraw-summary": "Hämta alla sidor på den aktuella användarens bevakningslista.",
+ "apihelp-query+watchlistraw-example-simple": "Lista sidor på den aktuella användarens bevakningslista.",
+ "apihelp-revisiondelete-summary": "Radera och återställ sidversioner.",
+ "apihelp-rollback-summary": "Ångra den senaste redigeringen på sidan.",
+ "apihelp-rollback-extended-description": "Om den senaste användaren som redigerade sidan gjorde flera redigeringar i rad kommer alla rullas tillbaka.",
+ "apihelp-setnotificationtimestamp-example-all": "Återställ meddelandestatus för hela bevakningslistan.",
+ "apihelp-setpagelanguage-summary": "Ändra språket på en sida.",
+ "apihelp-stashedit-param-summary": "Ändra sammanfattning.",
+ "apihelp-tag-summary": "Lägg till eller ta bort ändringsmärken från individuella sidversioner eller loggposter.",
+ "apihelp-tokens-summary": "Hämta nycklar för datamodifierande handlingar.",
+ "apihelp-unblock-summary": "Upphäv en användares blockering.",
+ "apihelp-unblock-param-id": "ID för blockeringen att häva (hämtas genom <kbd>list=blocks</kbd>). Kan inte användas tillsammans med <var>$1user</var> eller <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Användarnamn, IP-adresser eller IP-adressintervall att häva blockering för. Kan inte användas tillsammans med <var>$1id</var> eller <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "Användar-ID att häva blockering för. Kan inte användas tillsammans med <var>$1id</var> eller <var>$1user</var>.",
+ "apihelp-undelete-summary": "Återställ sidversioner för en raderad sida.",
+ "apihelp-unlinkaccount-summary": "Ta bort ett länkat tredjepartskonto från aktuell användare.",
+ "apihelp-upload-summary": "Ladda upp en fil eller hämta status för väntande uppladdningar.",
+ "apihelp-upload-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.",
+ "apihelp-upload-param-stash": "Om angiven, kommer servern att temporärt lagra filen istället för att lägga till den i centralförvaret.",
+ "apihelp-upload-example-url": "Ladda upp från URL.",
+ "apihelp-upload-example-filekey": "Slutför en uppladdning som misslyckades på grund av varningar.",
+ "apihelp-userrights-summary": "Ändra en användares gruppmedlemskap.",
+ "apihelp-watch-summary": "Lägg till eller ta bort sidor från aktuell användares bevakningslista.",
+ "api-login-fail-badsessionprovider": "Kan inte logga in med $1.",
+ "api-help-main-header": "Huvudmodul",
+ "api-help-undocumented-module": "Ingen dokumentation för modulen $1.",
+ "api-help-flag-deprecated": "Denna modul är föråldrad.",
+ "api-help-flag-internal": "<strong>Denna modul är intern eller instabil.</strong> Dess funktion kan ändras utan föregående meddelande.",
+ "api-help-flag-readrights": "Denna modul kräver läsrättigheter.",
+ "api-help-flag-writerights": "Denna modul kräver skrivrättigheter.",
+ "api-help-flag-mustbeposted": "Denna modul accepterar endast POST-begäranden.",
+ "api-help-flag-generator": "Denna modul kan användas som en generator.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parametrar}}:",
+ "api-help-param-deprecated": "Föråldrad.",
+ "api-help-param-required": "Denna parameter är obligatorisk.",
+ "api-help-param-list": "{{PLURAL:$1|1=Ett av följande värden|2=Värden (separerade med <kbd>{{!}}</kbd> eller [[Special:ApiHelp/main#main/datatypes|alternativ]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Måste vara tom|Kan vara tom, eller $2}}",
+ "api-help-param-limit": "Inte mer än $1 tillåts.",
+ "api-help-param-limit2": "Inte mer än $1 ($2 för robotar) tillåts.",
+ "api-help-param-multi-separate": "Separera värden med <kbd>|</kbd> eller [[Special:ApiHelp/main#main/datatypes|alternativ]].",
+ "api-help-param-maxbytes": "Kan inte vara längre än $1 {{PLURAL:$1|byte}}.",
+ "api-help-param-maxchars": "Kan inte vara längre än $1 {{PLURAL:$1|tecken}}.",
+ "apierror-articleexists": "Artikeln du försökte skapa har redan skapats.",
+ "apierror-baddiff": "Diff kan inte hämtas. En eller båda sidversioner finns inte eller du har inte behörighet för att visa dem.",
+ "apierror-invalidoldimage": "Parametern <var>oldimage</var> har ett ogiltigt format.",
+ "apierror-invalidsection": "Parametern <var>section</var> måste vara ett giltigt avsnitts-ID eller <kbd>new</kbd>.",
+ "apierror-maxbytes": "Parametern <var>$1</var> kan inte var längre än $2 {{PLURAL:$2|byte}}",
+ "apierror-maxchars": "Parametern <var>$1</var> kan inte vara längre än $2 {{PLURAL:$2|tecken}}",
+ "apierror-nosuchuserid": "Det finns ingen användare med ID $1.",
+ "apierror-offline": "Kunde inte fortsätta p.g.a. problem med nätverksanslutningen. Se till att du har en fungerande Internetanslutning och försök igen.",
+ "apierror-protect-invalidaction": "Ogiltig skyddstyp \"$1\".",
+ "apierror-revisions-badid": "Ingen revision hittades för parametern <var>$1</var>.",
+ "apierror-systemblocked": "Du har blockerats automatiskt av MediaWiki.",
+ "apierror-timeout": "Servern svarade inte inom förväntad tid.",
+ "apierror-unknownformat": "Okänt format \"$1\".",
+ "api-feed-error-title": "Fel ($1)"
+}
diff --git a/www/wiki/includes/api/i18n/ta.json b/www/wiki/includes/api/i18n/ta.json
new file mode 100644
index 00000000..6efd3f4b
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ta.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "AntanO",
+ "கலைவாணன்",
+ "Info-farmer",
+ "ElangoRamanujam"
+ ]
+ },
+ "apihelp-main-param-action": "எச்செயலை செயற்படுத்த",
+ "apihelp-main-param-format": "பெற விரும்பும் கோப்பு வடிவம்",
+ "apihelp-main-param-requestid": "இங்கு கொடுக்கப்படும் மதிப்பானது, விளைவில் இணையும். கோரிக்கைகளை வேறுபடுத்தப் பயன்படலாம்.",
+ "apihelp-import-param-namespace": "இதனைப் பெயர்வெளிக்கு இறக்குமதி செய்யவும். <kbd>$1rootpage</kbd> அளவுருவை மீறச்செய்யும்.",
+ "apihelp-import-param-rootpage": "இப்பக்கத்தின் துணைப்பக்கமாக இறக்குமதி செய்யவும். <kbd>$1namespace</kbd> அளவுரு வழங்கப்பட்டிருந்தால் இது புறக்கணிக்கப்படும்.",
+ "api-help-source": "மூலம்: $1",
+ "api-help-license": "அனுமதி: [[$1|$2]]",
+ "api-help-license-noname": "அனுமதி: [[$1|இணைப்பைப் பார்]]",
+ "apierror-invalidtitle": "தவறான தலைப்பு ”$1”",
+ "apierror-mustbeloggedin-generic": "தாங்கள் புகுபதிந்திருக்கவேண்டும்.",
+ "apierror-mustbeloggedin": "தாங்கள் $1-ல் புகுபதிந்திருக்கவேண்டும்.",
+ "apierror-nochanges": "மாற்றங்களேதும் கோரப்படவில்லை.",
+ "apierror-permissiondenied-generic": "அனுமதி மறுக்கப்பட்டது.",
+ "apierror-unknownerror-nocode": "இனம்புரியாப் பிழை.",
+ "apierror-unknownerror": "இனமறியாப் பிழை:\"$1\".",
+ "apiwarn-invalidtitle": "\"$1\" என்பது செல்லும் தலைப்பல்ல.",
+ "apiwarn-notfile": "”$1” ஒரு கோப்பல்ல.",
+ "api-feed-error-title": "பிழை ($1)"
+}
diff --git a/www/wiki/includes/api/i18n/tcy.json b/www/wiki/includes/api/i18n/tcy.json
new file mode 100644
index 00000000..4951ba0f
--- /dev/null
+++ b/www/wiki/includes/api/i18n/tcy.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bharathesha Alasandemajalu",
+ "Vishwanatha Badikana",
+ "VASANTH S.N."
+ ]
+ },
+ "apihelp-createaccount-param-name": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
+ "apihelp-delete-summary": "ಪುಟೊಕುಲೆನ್ ಮಾಜಾಲೆ",
+ "apihelp-edit-param-minor": "ಎಲ್ಯೆಲ್ಯ ಬದಲಾವಣೆಲು",
+ "apihelp-edit-example-edit": "ಪುಟೊನ್ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ",
+ "apihelp-feedcontributions-param-year": "ಈ ಒರ್ಸೊರ್ದು(ಬೊಕ್ಕ ದುಂಬುದ):",
+ "apihelp-feedcontributions-param-month": "ಈ ತಿಂಗೊಲುರ್ದ್ (ಬೊಕ್ಕ ದುಂಬುದ):",
+ "apihelp-feedrecentchanges-example-simple": "ಇಂಚಿಪದ ಬದಲಾವಣೆಲೆನ್ ತೋಜಾಲೆ.",
+ "apihelp-login-param-name": "ಸದಸ್ಯೆರೆನ ಪುದರ್",
+ "apihelp-login-param-password": "ಪ್ರವೇಶ ಪದೊ",
+ "apihelp-login-example-login": "ಲಾಗಿನ್ ಆಲೆ",
+ "apihelp-query+watchlist-param-type": "ವಾ ನಮೂನೆದ ಬದಲಾವಣೆ ತೊಜವೋಡು",
+ "apihelp-query+watchlist-paramvalue-type-external": "ಪಿದಯೀದ ಬದಲಾವಣೇ",
+ "apihelp-query+watchlist-paramvalue-type-new": "ಪುಟೊ ಉಂಡುಮಾನ್ಪುನಾ"
+}
diff --git a/www/wiki/includes/api/i18n/te.json b/www/wiki/includes/api/i18n/te.json
new file mode 100644
index 00000000..fc1f0a34
--- /dev/null
+++ b/www/wiki/includes/api/i18n/te.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Veeven",
+ "HAUSANRIK",
+ "Ravichandra",
+ "Jedimaster26"
+ ]
+ },
+ "apihelp-block-summary": "ఓ వాడుకరిని నిరోధించండి.",
+ "apihelp-block-param-reason": "నిరోధానికి కారణం.",
+ "apihelp-block-param-nocreate": "ఖాతా సృష్టింపుని నివారించు",
+ "apihelp-createaccount-param-name": "వాడుకరి పేరు:",
+ "apihelp-delete-summary": "ఓ పేజీని తొలగించు.",
+ "apihelp-edit-param-minor": "చిన్న మార్పు",
+ "apihelp-edit-example-edit": "ఓ పేజీని మార్చు.",
+ "apihelp-emailuser-summary": "వాడుకరికి ఈమెయిలు పంపించండి.",
+ "apihelp-feedrecentchanges-example-simple": "ఇటీవలి మార్పులను చూడండి",
+ "apihelp-query+users-param-userids": "వివరములు సేకరించవలసిన ఉపయోగదారుల పేర్లు",
+ "apihelp-rawfm-summary": "బయటకు వచ్చిన సమాచారo, డీబగ్గింగ్ అంశముతో కలిపి, JSON పద్ధతిలో (HTMLలో అందంగా-ముద్రించు)"
+}
diff --git a/www/wiki/includes/api/i18n/th.json b/www/wiki/includes/api/i18n/th.json
new file mode 100644
index 00000000..db8fabd5
--- /dev/null
+++ b/www/wiki/includes/api/i18n/th.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622"
+ ]
+ },
+ "apihelp-imagerotate-summary": "หมุนรูปภาพอย่างน้อยหนึ่งรูป",
+ "api-help-param-continue": "เมื่อมีผลลัพธ์เพิ่มเติมพร้อมใช้งาน ใช้ตัวเลือกนี้เพื่อดำเนินการต่อ"
+}
diff --git a/www/wiki/includes/api/i18n/tl.json b/www/wiki/includes/api/i18n/tl.json
new file mode 100644
index 00000000..d8c5cfb6
--- /dev/null
+++ b/www/wiki/includes/api/i18n/tl.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leeheonjin",
+ "Macofe"
+ ]
+ },
+ "apihelp-feedrecentchanges-param-categories": "Ipakita lamang ang mga pagbababgo sa mga pahina sa lahat ng mga kategoriyang ito.",
+ "apihelp-feedrecentchanges-param-categories_any": "Ipakita na lang ang mga pagbabago sa mga pahina sa kahit na anong mga kategoriya.",
+ "apihelp-feedrecentchanges-example-simple": "Ipakit ang mga kamakailangang pagbabago.",
+ "apihelp-feedrecentchanges-example-30days": "Ipakita ang mga huling pagbabago sa loob para sa 30 araw.",
+ "apihelp-help-example-main": "Tulong para sa pangunahing modulo.",
+ "apihelp-help-example-recursive": "Lahat ng tulong sa iisang pahina.",
+ "apihelp-login-example-login": "Lumagda (Mag-log in).",
+ "apihelp-move-example-move": "I-urong ang <kbd>Badtitle</kbd> sa <kbd>Goodtitle</kbd> nang hindi nag-iiwan ng redirekta.",
+ "apihelp-options-example-reset": "Ibalik sa dati ang lahat ng mga kanaisan.",
+ "apihelp-patrol-example-rcid": "Bantayan ang kasalukuyang pagbabago.",
+ "apihelp-query+allimages-example-B": "Ipakita ang talaan ng mga talakasang nagsisimula sa titik <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-generator": "Kinukuha ang mga pahinang naglalaman ng mga kawing.",
+ "apihelp-query+allpages-example-B": "Ipakita ang talaan ng mga pahinang nagsisimula sa titik <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-generator": "Kinukuha ang mga pahinang naglalaman ng mga transklusyon.",
+ "apihelp-query+backlinks-example-simple": "Ipakita ang mga kawing sa <kbd>Main page</kbd>.",
+ "apihelp-query+categoryinfo-example-simple": "Kumuha ng impormasyon tungkol sa <kbd>Kategorya:Foo</kbd> at <kbd>Kategorya:Bar</kbd>.",
+ "apihelp-query+duplicatefiles-example-simple": "Maghanap para sa mga duplika ng [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Hanapin ang mga duplika ng lahat ng talakasan.",
+ "apihelp-query+images-example-simple": "Kumuha ng talaan ng mga talakasang ginagamit sa [[Unang Pahina]].",
+ "apihelp-query+imageusage-example-simple": "Ipakita ang mga pahina gamit ang [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+iwbacklinks-example-simple": "Kumuha ng mga pahinang nakarugtong sa [[wikibooks:Test]].",
+ "apihelp-query+linkshere-example-generator": "Kumuha ng kabatiran tungkol sa mga pahina na kumakawing sa [[Unang Pahina]].",
+ "apihelp-query+recentchanges-example-simple": "Talaan ng mga kamakailang pagbabago.",
+ "apihelp-query+search-example-text": "Hanapin ang mga teksto para sa <kbd>kahulugan</kbd>.",
+ "apihelp-query+siteinfo-example-simple": "Kunin ang impormasyon ng sityo.",
+ "apihelp-query+templates-example-simple": "Kumuha ng mga suleras o padron na ginamit sa pahinang <kbd>Unang Pahina</kbd>.",
+ "apihelp-query+watchlist-example-simple": "Itala ang mga punong pagbabago ng mga kasalukuyang binagong pahina sa kasalukuyang listahan ng binabantayan ng tagagamit.",
+ "apihelp-revisiondelete-example-revision": "Itago ang nilalaman para sa pagbabago ng <kbd>12345</kbd> sa pahinang <kbd>Unang Pahina</kbd>.",
+ "apihelp-upload-example-url": "Mag-karga mula sa URL.",
+ "apihelp-watch-example-watch": "Bantayan ang pahinang <kbd>Main Page</kbd>."
+}
diff --git a/www/wiki/includes/api/i18n/tr.json b/www/wiki/includes/api/i18n/tr.json
new file mode 100644
index 00000000..0a2fad0a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/tr.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sayginer",
+ "Sadrettin",
+ "Uğurkent",
+ "Gorizon",
+ "HakanIST",
+ "Imabadplayer",
+ "İnternion"
+ ]
+ },
+ "apihelp-block-summary": "Bir kullanıcıyı engelle.",
+ "apihelp-block-param-reason": "Engelleme sebebi.",
+ "apihelp-createaccount-summary": "Yeni bir kullanıcı hesabı oluşturun.",
+ "apihelp-createaccount-param-name": "Kullanıcı adı.",
+ "apihelp-createaccount-param-password": "Parola (ignored if <var>$1mailpassword</var> is set).",
+ "apihelp-createaccount-param-email": "Kullanıcının e-posta adresi (isteğe bağlı).",
+ "apihelp-createaccount-param-realname": "Kullanıcının gerçek adı (isteğe bağlı).",
+ "apihelp-delete-summary": "Sayfayı sil.",
+ "apihelp-edit-summary": "Sayfa oluştur ve düzenle.",
+ "apihelp-edit-param-text": "Sayfa içeriği.",
+ "apihelp-edit-param-minor": "Küçük değişiklik.",
+ "apihelp-edit-param-nocreate": "Sayfa mevcut değilse hata oluştur.",
+ "apihelp-edit-param-watch": "Sayfayı izleme listenize ekleyin.",
+ "apihelp-edit-param-unwatch": "Sayfayı izleme listenizden çıkarın.",
+ "apihelp-edit-param-redirect": "Yönlendirmeleri otomatik olarak çöz.",
+ "apihelp-emailuser-summary": "Bir kullanıcıya e-posta gönder.",
+ "apihelp-emailuser-param-target": "E-posta gönderilecek kullanıcı.",
+ "apihelp-emailuser-param-subject": "Konu başlığı.",
+ "apihelp-emailuser-param-text": "E-posta metni.",
+ "apihelp-emailuser-param-ccme": "Bu e-postanın bir kopyasını bana gönder.",
+ "apihelp-feedcontributions-param-toponly": "Yalnızca son revizyon olan değişiklikleri göster.",
+ "apihelp-feedcontributions-param-newonly": "Yalnızca yeni sayfa oluşturan değişiklikleri göster.",
+ "apihelp-feedcontributions-param-showsizediff": "Sürümler arasındaki boyut farkını göster.",
+ "apihelp-feedrecentchanges-param-limit": "Verilecek azami sonuç sayısı.",
+ "apihelp-feedrecentchanges-param-hideminor": "Küçük değişiklikleri gizle.",
+ "apihelp-feedrecentchanges-param-hidebots": "Bot değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-param-hideanons": "Anonim kullanıcı değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-param-hideliu": "Kayıtlı kullanıcı değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Kendi değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-example-simple": "Son değişiklikleri göster",
+ "apihelp-feedrecentchanges-example-30days": "Son 30 gündeki değişiklikleri göster",
+ "apihelp-filerevert-summary": "Bir dosyayı eski bir sürümüne geri döndür.",
+ "apihelp-login-param-name": "Kullanıcı adı.",
+ "apihelp-login-param-password": "Parola.",
+ "apihelp-move-summary": "Bir sayfayı taşı.",
+ "apihelp-move-param-from": "Taşımak istediğiniz sayfanın başlığı. $1fromid ile birlikte kullanılamaz.",
+ "apihelp-move-param-noredirect": "Yönlendirme oluşturmayın.",
+ "apihelp-opensearch-param-limit": "Verilecek azami sonuç sayısı.",
+ "apihelp-options-example-reset": "Tüm tercihleri sıfırla",
+ "apihelp-query+mystashedfiles-param-limit": "Alınacak kaç dosya var",
+ "api-help-title": "MediaWiki API yardımı",
+ "api-help-parameters": "{{PLURAL:$1|Parametre|Parametre}}:",
+ "api-help-param-limit": "$1 taneden fazla olamaz.",
+ "api-help-param-limit2": "$1 taneden fazla (botlar için $2) olamaz.",
+ "api-help-param-default": "Varsayılan: $1"
+}
diff --git a/www/wiki/includes/api/i18n/tt-cyrl.json b/www/wiki/includes/api/i18n/tt-cyrl.json
new file mode 100644
index 00000000..54c534cf
--- /dev/null
+++ b/www/wiki/includes/api/i18n/tt-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ильнар"
+ ]
+ },
+ "apihelp-feedcontributions-param-newonly": "Битләр ясау үзгәртмәләрен генә күрсәтү."
+}
diff --git a/www/wiki/includes/api/i18n/udm.json b/www/wiki/includes/api/i18n/udm.json
new file mode 100644
index 00000000..420612cf
--- /dev/null
+++ b/www/wiki/includes/api/i18n/udm.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaganer",
+ "Mouse21"
+ ]
+ },
+ "apihelp-block-summary": "Блокировка пыриськисьёс.",
+ "apihelp-edit-example-edit": "Бамез тупатъяно.",
+ "apihelp-login-example-login": "Пырыны."
+}
diff --git a/www/wiki/includes/api/i18n/uk.json b/www/wiki/includes/api/i18n/uk.json
new file mode 100644
index 00000000..bc0b365b
--- /dev/null
+++ b/www/wiki/includes/api/i18n/uk.json
@@ -0,0 +1,1750 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ата",
+ "A1",
+ "Ahonc",
+ "Base",
+ "Dars",
+ "Macofe",
+ "Mix Gerder",
+ "Piramidion",
+ "Andriykopanytsia",
+ "Максим Підліснюк",
+ "AS",
+ "Umherirrender",
+ "Choomaq"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документація]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаПи]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Тестування:</strong> Для зручності тестування запитів API, див. [[Special:ApiSandbox]].",
+ "apihelp-main-param-action": "Яку дію виконати.",
+ "apihelp-main-param-format": "Формат виводу.",
+ "apihelp-main-param-maxlag": "Максимальна затримка може використовуватися, коли MediaWiki інстальовано на реплікований кластер бази даних. Щоб зберегти дії, які спричиняють більшу затримку реплікації, цей параметр може змусити клієнт почекати, поки затримка реплікації не буде меншою за вказане значення. У випадку непомірної затримки, видається код помилки <samp>maxlag</samp> з повідомленням на зразок <samp>Очікування на $host: $lag секунд(и) затримки</samp>.<br />Див. [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] для детальнішої інформації.",
+ "apihelp-main-param-smaxage": "Встановити <code>s-maxage</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
+ "apihelp-main-param-maxage": "Встановити <code>max-age</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
+ "apihelp-main-param-assert": "Перевірити, що користувач увійшов у систему, якщо задано <kbd>user</kbd>, або має права бота, якщо задано <kbd>bot</kbd>.",
+ "apihelp-main-param-assertuser": "Перевірити, чи поточний користувач є найменованим користувачем.",
+ "apihelp-main-param-requestid": "Будь-яке значення, вказане тут, буде включене у відповідь. Може використовуватися, щоб відрізняти запити.",
+ "apihelp-main-param-servedby": "Включити в результати ім'я хоста, який обробив запит.",
+ "apihelp-main-param-curtimestamp": "Включити в результат поточну мітку часу.",
+ "apihelp-main-param-responselanginfo": "Включати мови, які були використані для <var>uselang</var> і <var>errorlang</var>, у результат.",
+ "apihelp-main-param-origin": "При доступі до API з використанням крос-доменного AJAX-запиту (CORS), задайте параметру значення вихідного домена. Він має бути включений у будь-який попередній запит і таким чином мусить бути частиною запиту URI (не тіла POST). \n\nДля автентифікованих запитів він повинен точно співпадати з одним з виходів у заголовку <code>Origin</code>, тобто бути заданим чимось на зразок <kbd>https://uk.wikipedia.org</kbd> або <kbd>https://meta.wikimedia.org</kbd>. Якщо цей параметр не співпадає з заголовком <code>Origin</code>, повернеться помилка 403. Якщо цей параметр співпадає з заголовком <code>Origin</code> і вихід знаходиться у білому списку, буде встановлено заголовки <code>Access-Control-Allow-Origin</code> і <code>Access-Control-Allow-Credentials</code>.\n\nДля неавтентифікованих запитів укажіть значення <kbd>*</kbd>. Це дасть встановлення заголовка <code>Access-Control-Allow-Origin</code>, але <code>Access-Control-Allow-Credentials</code> буде <code>false</code> і всі дані про користувача будуть заборонені.",
+ "apihelp-main-param-uselang": "Мова, що використовується для перекладу повідомлень. Список кодів можна видати на <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> з <kbd>siprop=languages</kbd> або вказати <kbd>user</kbd> на використання поточного налаштування мови користувача, або вказати <kbd>content</kbd> на використання мови вмісту цієї вікі.",
+ "apihelp-main-param-errorformat": "Формат попереджень і тексту помилок.\n; plaintext: вікітекст із прираними HTML-тегами і заміненими HTML-мнемоніками.\n; wikitext: неопрацьований вікітекст.\n; html: HTML.\n; raw: лише ключ і параметри повідомлення.\n; none: без тексту, тільки коди помилок.\n; bc: формат, який використовувався до MediaWiki 1.29. <var>errorlang</var> і <var>errorsuselocal</var> ігноруються.",
+ "apihelp-main-param-errorlang": "Мова, яку використовувати для попереджень і помилок. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> із <kbd>siprop=languages</kbd> повертає список кодів мов, або ж вкажіть <kbd>content</kbd>, щоб використати мову вмісту поточної вікі, або вкажіть <kbd>uselang</kbd>, щоб використовувати те ж значення, що й параметр <var>uselang</var>.",
+ "apihelp-main-param-errorsuselocal": "Якщо задано, тексти помилок використовуватимуть локальні повідомлення з простору назв {{ns:MediaWiki}}.",
+ "apihelp-block-summary": "Заблокувати користувача.",
+ "apihelp-block-param-user": "Ім'я користувача, IP-адреса або діапазон IP-адрес для блокування. Не може бути використано разом із <var>$1userid</var>",
+ "apihelp-block-param-userid": "Ідентифікатор користувача, який заблокувати. Не може бути використано разом із <var>$1user</var>.",
+ "apihelp-block-param-expiry": "Закінчення часу. Може бути відносним (напр., <kbd>5 місяців</kbd> або <kbd>2 тижні</kbd>) чи абсолютним (напр., <kbd>2014-09-18T12:34:56Z</kbd>). Якщо вказано <kbd>infinite</kbd>, <kbd>indefinite</kbd> або <kbd>never</kbd>, блокування не закінчиться ніколи.",
+ "apihelp-block-param-reason": "Причина блокування.",
+ "apihelp-block-param-anononly": "Блокувати тільки анонімних користувачів (тобто відключити можливість анонімних редагувань з цієї IP-адреси).",
+ "apihelp-block-param-nocreate": "Заборонити створення облікових записів.",
+ "apihelp-block-param-autoblock": "Автоматично блокувати IP-адреси, які цей користувач використовував останніми, та будь-які наступні адреси, з яких він спробує зайти в систему.",
+ "apihelp-block-param-noemail": "Заборонити користувачеві надсилати електронні листи через вікі. (Вимагає права <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Приховати ім'я користувача з журналу блокувань. (Вимагає права <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Дозволити користувачу редагувати власну сторінку обговорення (залежить від <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Якщо користувач уже заблокований, переписати наявне блокування.",
+ "apihelp-block-param-watchuser": "Спостерігати за сторінкою користувача чи IP-адреси і сторінкою обговорення.",
+ "apihelp-block-param-tags": "Змінити теги для застосування їх до запису в журналі блокувань.",
+ "apihelp-block-example-ip-simple": "Блокувати IP-адресу <kbd>192.0.2.5</kbd> на три дні з причиною <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Блокувати користувача<kbd>Vandal</kbd> на невизначений термін з причиною <kbd>Vandalism</kbd> і заборонити створення нових облікових записів та надсилання електронної пошти.",
+ "apihelp-changeauthenticationdata-summary": "Зміна параметрів аутентифікації для поточного користувача.",
+ "apihelp-changeauthenticationdata-example-password": "Спроба змінити поточний пароль користувача на <kbd>ExamplePassword</kbd>.",
+ "apihelp-checktoken-summary": "Перевірити коректність токена з <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Тип токена, який тестується.",
+ "apihelp-checktoken-param-token": "Токен для тесту.",
+ "apihelp-checktoken-param-maxtokenage": "Максимально допустимий вік токена (у секундах).",
+ "apihelp-checktoken-example-simple": "Перевірити дійсність токена <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-summary": "Очищає прапорець <code>hasmsg</code> для поточного користувача.",
+ "apihelp-clearhasmsg-example-1": "Очистити прапорець <code>hasmsg</code> для поточного користувача.",
+ "apihelp-clientlogin-summary": "Увійдіть у вікі з допомогою інтерактивного потоку.",
+ "apihelp-clientlogin-example-login": "Почати процес входу у вікі як користувач <kbd>Example</kbd> з паролем <kbd>ExamplePassword</kbd>.",
+ "apihelp-clientlogin-example-login2": "Продовжити вхід в систему після відповіді <samp>UI</samp> для двофакторної автентифікації, надаючи <var>OATHToken</var> як <kbd>987654</kbd>.",
+ "apihelp-compare-summary": "Отримати порівняння двох сторінок.",
+ "apihelp-compare-extended-description": "Повинні бути номер версії, назва сторінки або ID сторінки для «від» і «до».",
+ "apihelp-compare-param-fromtitle": "Перший заголовок для порівняння.",
+ "apihelp-compare-param-fromid": "Перший ID сторінки для порівняння.",
+ "apihelp-compare-param-fromrev": "Перша версія для порівняння.",
+ "apihelp-compare-param-fromtext": "Використати цей текст замість контенту версії, вказаної через <var>fromtitle</var>, <var>fromid</var> або <var>fromrev</var>.",
+ "apihelp-compare-param-frompst": "Зробити трансформацію перед збереженням на <var>fromtext</var>.",
+ "apihelp-compare-param-fromcontentmodel": "Контентна модель <var>fromtext</var>. Якщо не вказано, буде використано припущення на основі інших параметрів.",
+ "apihelp-compare-param-fromcontentformat": "Формат серіалізації контенту <var>fromtext</var>.",
+ "apihelp-compare-param-totitle": "Другий заголовок для порівняння.",
+ "apihelp-compare-param-toid": "Другий ID сторінки для порівняння.",
+ "apihelp-compare-param-torev": "Друга версія для порівняння.",
+ "apihelp-compare-param-torelative": "Використати версію, яка стосується версії, визначеної через <var>fromtitle</var>, <var>fromid</var> або <var>fromrev</var>. Усі інші опції 'to' буде проігноровано.",
+ "apihelp-compare-param-totext": "Використати цей текст замість контенту версії, вказаної через <var>totitle</var>, <var>toid</var> або <var>torev</var>.",
+ "apihelp-compare-param-topst": "Виконати трансформацію перед збереженням на <var>totext</var>.",
+ "apihelp-compare-param-tocontentmodel": "Контентна модель <var>totext</var>. Якщо не вказано, буде використано припущення на основі інших параметрів.",
+ "apihelp-compare-param-tocontentformat": "Формат серіалізації контенту <var>totext</var>.",
+ "apihelp-compare-param-prop": "Які уривки інформації отримати.",
+ "apihelp-compare-paramvalue-prop-diff": "HTML різниці версій.",
+ "apihelp-compare-paramvalue-prop-diffsize": "Розмір HTML різниці версій, у байтах.",
+ "apihelp-compare-paramvalue-prop-rel": "Іддентифікатори версій, які передують 'from' і йдуть після 'to', якщо такі взагалі існують.",
+ "apihelp-compare-paramvalue-prop-ids": "Ідентифікатори сторінки й версій 'from' і 'to'.",
+ "apihelp-compare-paramvalue-prop-title": "Назви сторінок версій 'from' і 'to'.",
+ "apihelp-compare-paramvalue-prop-user": "Ім'я користувача й ідентифікатор версій 'from' і 'to'.",
+ "apihelp-compare-paramvalue-prop-comment": "Опис редагування версій 'from' і 'to'.",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "Опрацьований опис редагування версій 'from' і 'to'.",
+ "apihelp-compare-paramvalue-prop-size": "Розмір версій 'from' і 'to'.",
+ "apihelp-compare-example-1": "Створити порівняння версій 1 і 2.",
+ "apihelp-createaccount-summary": "Створити новий обліковий запис користувача.",
+ "apihelp-createaccount-param-preservestate": "Якщо запит <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> повернув істину для <samp>hasprimarypreservedstate</samp>, запити позначені як <samp>primary-required</samp> повинні бути пропущені. Якщо він повернув не порожнє значення для <samp>preservedusername</samp>, це ім'я користувача повинно бути використано для параметру <var>username</var>.",
+ "apihelp-createaccount-example-create": "Почати процес створення користувача <kbd>Example</kbd> з паролем <kbd>ExamplePassword</kbd>.",
+ "apihelp-createaccount-param-name": "Ім'я користувача.",
+ "apihelp-createaccount-param-password": "Пароль (ігнорується, якщо встановлено <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Домен для зовнішньої аутентифікації (опціонально).",
+ "apihelp-createaccount-param-token": "Токен створення облікового запису отримано у першому запиті.",
+ "apihelp-createaccount-param-email": "Адреса електронної пошти користувача (необов'язково).",
+ "apihelp-createaccount-param-realname": "Справжнє ім'я користувача (необов'язково).",
+ "apihelp-createaccount-param-mailpassword": "Якщо встановлено будь-яке значення, користувачеві буде надіслано випадковий пароль.",
+ "apihelp-createaccount-param-reason": "Необов'язкова причина для створення облікового запису, яка буде записана в журнал.",
+ "apihelp-createaccount-param-language": "Код мови для встановлення за замовчуванням для користувача (необов'язково, за замовчуванням — мова вмісту).",
+ "apihelp-createaccount-example-pass": "Створити користувача <kbd>testuser</kbd> з паролем <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Створити користувача <kbd>testmailuser</kbd> і надіслати на електронну пошту випадково-згенерований пароль.",
+ "apihelp-cspreport-summary": "Використовується браузерами для повідомлення порушень Правил безпеки контенту (Content Security Policy). Цей модуль не повинен використовуватися, окрім випадків автоматичного використання веб-браузером для CSP-скарги.",
+ "apihelp-cspreport-param-reportonly": "Позначити як доповідь із моніторингової політики, не примусової політики",
+ "apihelp-cspreport-param-source": "Що згенерувало CSP-заголовок, який запустив цю доповідь",
+ "apihelp-delete-summary": "Вилучити сторінку.",
+ "apihelp-delete-param-title": "Назва сторінки для вилучення. Не можна використати разом з <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID-сторінки на вилучення. Не можна використати разом з <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Причина вилучення. Якщо не вказана, буде використано автоматично-згенеровану.",
+ "apihelp-delete-param-tags": "Змінити теґи, які буде застосовано до запису в журналі вилучень.",
+ "apihelp-delete-param-watch": "Додати сторінку у список спостереження поточного користувача.",
+ "apihelp-delete-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
+ "apihelp-delete-param-unwatch": "Вилучити сторінку зі списку спостереження поточного користувача.",
+ "apihelp-delete-param-oldimage": "Назва старого зображення на вилучення, як вказано у [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Вилучити <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Вилучити <kbd>Main Page</kbd> з причиною <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Цей модуль було вимкнено.",
+ "apihelp-edit-summary": "Створювати і редагувати сторінки.",
+ "apihelp-edit-param-title": "Назва сторінки для редагування. Не можна використати разом з <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID-сторінки для редагування. Не можна використати разом з <var>$1title</var>.",
+ "apihelp-edit-param-section": "Номер розділу. <kbd>0</kbd> для вступного розділу, <kbd>new</kbd> для нового розділу.",
+ "apihelp-edit-param-sectiontitle": "Назва нового розділу.",
+ "apihelp-edit-param-text": "Вміст сторінки.",
+ "apihelp-edit-param-summary": "Опис редагування. Також заголовок розділу, коли $1section=new і коли $1sectiontitle не вказано.",
+ "apihelp-edit-param-tags": "Змінити теги для версії.",
+ "apihelp-edit-param-minor": "Незначне редагування.",
+ "apihelp-edit-param-notminor": "Не «незначне» редагування.",
+ "apihelp-edit-param-bot": "Позначити редагування як зроблене ботом.",
+ "apihelp-edit-param-basetimestamp": "Мітка часу для основної версії, використовується для виявлення конфлікту редагувань. Може бути отримана через [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Мітка часу, з якого почався процес редагування, використовується для виявлення конфліктів редагувань. Відповідне значення можна отримати з допомогою <var>[[Special:ApiHelp/main|curtimestamp]]</var> на початку процесу редагування (напр., коли завантажується вміст сторінки для редагування).",
+ "apihelp-edit-param-recreate": "Відкинути будь-які помилки щодо цієї сторінки, вилучені нещодавно.",
+ "apihelp-edit-param-createonly": "Не редагувати сторінку, якщо вона вже існує.",
+ "apihelp-edit-param-nocreate": "Видати помилку, якщо сторінка не існує.",
+ "apihelp-edit-param-watch": "Додати сторінку у список спостереження поточного користувача.",
+ "apihelp-edit-param-unwatch": "Вилучити сторінку зі списку спостереження поточного користувача.",
+ "apihelp-edit-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
+ "apihelp-edit-param-md5": "MD5-хеш у параметрі $1text або параметрах $1prependtext і $1appendtext разом. Якщо вказано, редагування буде зроблене, лише якщо хеш правильний.",
+ "apihelp-edit-param-prependtext": "Додати цей текст на початок сторінки. Замінює $1text.",
+ "apihelp-edit-param-appendtext": "Додати цей текст у кінець сторінки. Замінює $1text.\n\nЩоб додати новий розділ, замість цього параметра використайте $1section=new.",
+ "apihelp-edit-param-undo": "Скасувати цю версію. Замінює $1text, $1prependtext та $1appendtext.",
+ "apihelp-edit-param-undoafter": "Скасувати усі версії від $1undo до цієї. Якщо не вказано, просто скасувати одну версію.",
+ "apihelp-edit-param-redirect": "Автоматично виправляти перенаправлення.",
+ "apihelp-edit-param-contentformat": "Формат серіалізації вмісту, використовуваний для введеного тексту.",
+ "apihelp-edit-param-contentmodel": "Модель вмісту нового вмісту.",
+ "apihelp-edit-param-token": "Токен завжди має надсилатися як останній параметр або хоча б після параметра $1text.",
+ "apihelp-edit-example-edit": "Редагувати сторінку",
+ "apihelp-edit-example-prepend": "Додати зміст на початок сторінки",
+ "apihelp-edit-example-undo": "Скасувати версії з 13579 по 13585 з автоматичним описом змін",
+ "apihelp-emailuser-summary": "Надіслати електронного листа користувачеві",
+ "apihelp-emailuser-param-target": "Користувач, якому відправляється електронний лист.",
+ "apihelp-emailuser-param-subject": "Заголовок теми.",
+ "apihelp-emailuser-param-text": "Тіло листа.",
+ "apihelp-emailuser-param-ccme": "Надіслати копію цього повідомлення мені.",
+ "apihelp-emailuser-example-email": "Відправити листа користувачу <kbd>WikiSysop</kbd> з текстом <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Розгортає усі шаблони в межах вікірозмітки.",
+ "apihelp-expandtemplates-param-title": "Заголовок сторінки.",
+ "apihelp-expandtemplates-param-text": "Вікітекст для перетворення.",
+ "apihelp-expandtemplates-param-revid": "ID версії, для <code><nowiki>{{REVISIONID}}</nowiki></code> і подібних змінних.",
+ "apihelp-expandtemplates-param-prop": "Яку інформацію отримувати.\n\nЗважте, що якщо не вибрано значень, результат міститиме вікітекст, але буде в застарілому форматі.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Розгорнений вікітекст.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Будь-які категорії, наявні у джерелі, але не виведені у вікітексті результату.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Властивості сторінки, визначені розгорненими магічними словами у вікітексті.",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "Чи результат тривкий і не повинен повторно використовуватись десь іще на сторінці.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Максимальний час, після якого кеш результату стане недійсним.",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "Будь-які модулі ResourceLoader, які парсерні функції запитують на додання у результат. Або <kbd>jsconfigvars</kbd>, або <kbd>encodedjsconfigvars</kbd> має бути запитано разом з <kbd>modules</kbd>.",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Дає конфігурації JavaScript змінні, притаманні для сторінки.",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Дає конфігурації JavaScript змінні, притаманні для сторінки, як рядок JSON.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "Дерево парсу XML вхідних даних.",
+ "apihelp-expandtemplates-param-includecomments": "Чи включати HTML-коментарі у результат.",
+ "apihelp-expandtemplates-param-generatexml": "Дерево парсу XML вхідних даних (замінене на $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Розгорнути вікітекст <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-summary": "Повертає стрічку внеску користувача.",
+ "apihelp-feedcontributions-param-feedformat": "Формат стрічки.",
+ "apihelp-feedcontributions-param-user": "Для яких користувачів отримати внесок.",
+ "apihelp-feedcontributions-param-namespace": "За яким простором назв фільтрувати внески.",
+ "apihelp-feedcontributions-param-year": "Від року (і раніше).",
+ "apihelp-feedcontributions-param-month": "До місяця (і раніше).",
+ "apihelp-feedcontributions-param-tagfilter": "Відфільтрувати внесок, у якого є ці теґи.",
+ "apihelp-feedcontributions-param-deletedonly": "Показати лише вилучений внесок.",
+ "apihelp-feedcontributions-param-toponly": "Показати лише редагування, які є останніми версіями.",
+ "apihelp-feedcontributions-param-newonly": "Показати лише редагування, які є створеннями сторінок.",
+ "apihelp-feedcontributions-param-hideminor": "Приховати незначні редагування.",
+ "apihelp-feedcontributions-param-showsizediff": "Показати різницю розміру між версіями.",
+ "apihelp-feedcontributions-example-simple": "Вивести внесок для користувача <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Видає стрічку нових редагувань.",
+ "apihelp-feedrecentchanges-param-feedformat": "Формат стрічки.",
+ "apihelp-feedrecentchanges-param-namespace": "Простір назв, до якого обмежити результати.",
+ "apihelp-feedrecentchanges-param-invert": "Усі простори назв, крім вибраного.",
+ "apihelp-feedrecentchanges-param-associated": "Включно з пов'язаним (обговорення чи головним) простором назв.",
+ "apihelp-feedrecentchanges-param-days": "Дні, до яких обмежити результати.",
+ "apihelp-feedrecentchanges-param-limit": "Максимальна кількість результатів для виведення.",
+ "apihelp-feedrecentchanges-param-from": "Показати зміни відтоді.",
+ "apihelp-feedrecentchanges-param-hideminor": "Приховати незначні редагування.",
+ "apihelp-feedrecentchanges-param-hidebots": "Приховати редагування ботів.",
+ "apihelp-feedrecentchanges-param-hideanons": "Приховати редагування анонімних користувачів.",
+ "apihelp-feedrecentchanges-param-hideliu": "Приховати редагування зареєстрованих користувачів.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Приховати відпатрульовані редагування.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Приховати редагування поточного користувача.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Приховати зміни в членстві в категорії.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Фільтрувати за теґом.",
+ "apihelp-feedrecentchanges-param-target": "Показати лише зміни на сторінках, на які посилається ця сторінка.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Показати натомість лише зміни на сторінках, які посилаються на цю сторінку.",
+ "apihelp-feedrecentchanges-example-simple": "Показати нещодавні зміни.",
+ "apihelp-feedrecentchanges-example-30days": "Показати нещодавні зміни за 30 днів.",
+ "apihelp-feedwatchlist-summary": "Видає стрічку списку спостереження.",
+ "apihelp-feedwatchlist-param-feedformat": "Формат стрічки.",
+ "apihelp-feedwatchlist-param-hours": "Список сторінок, змінених за цю кількість годин від зараз.",
+ "apihelp-feedwatchlist-param-linktosections": "За можливості, посилатися безпосередньо на змінені розділи.",
+ "apihelp-feedwatchlist-example-default": "Показати стрічку списку спостереження.",
+ "apihelp-feedwatchlist-example-all6hrs": "Показати всі зміни до спостережуваних сторінок за останні 6 годин.",
+ "apihelp-filerevert-summary": "Повернути файл до старої версії.",
+ "apihelp-filerevert-param-filename": "Цільова назва файлу, без префіксу File:.",
+ "apihelp-filerevert-param-comment": "Завантажити коментар.",
+ "apihelp-filerevert-param-archivename": "Архівна назва версії, до якої повернути.",
+ "apihelp-filerevert-example-revert": "Повернути <kbd>Wiki.png</kbd> до версії <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Відображати довідку для зазначених модулів.",
+ "apihelp-help-param-modules": "Модулі, для яких відображати довідку (значення параметрів <var>action</var> і <var>format</var> або <kbd>main</kbd>). Можна вказати підмодулі через <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Включити довідку для підмодулів вказаного модуля.",
+ "apihelp-help-param-recursivesubmodules": "Включити довідку для підмодулів рекурсивно.",
+ "apihelp-help-param-helpformat": "Формат результату довідки.",
+ "apihelp-help-param-wrap": "Помістити результат у стандартну структуру API-відповіді.",
+ "apihelp-help-param-toc": "Включити зміст у HTML-результат.",
+ "apihelp-help-example-main": "Довідка для головного модуля.",
+ "apihelp-help-example-submodules": "Довідка для <kbd>action=query</kbd> та усіх її підмодулів.",
+ "apihelp-help-example-recursive": "Уся довідка на одній сторінці.",
+ "apihelp-help-example-help": "Довідка для самого модуля довідки.",
+ "apihelp-help-example-query": "Довідка для двох підмодулів запитів.",
+ "apihelp-imagerotate-summary": "Поворот одного або декількох зображень.",
+ "apihelp-imagerotate-param-rotation": "Градуси для повороту зображення за годинниковою стрілкою.",
+ "apihelp-imagerotate-param-tags": "Теги для застосування до запису в журналі завантажень.",
+ "apihelp-imagerotate-example-simple": "Повернути <kbd>File:Example.png</kbd> на <kbd>90</kbd> градусів.",
+ "apihelp-imagerotate-example-generator": "Повернути усі зображення у <kbd>Category:Flip</kbd> на <kbd>180</kbd> градусів.",
+ "apihelp-import-summary": "Імпортувати сторінку з іншої вікі або з XML-файлу.",
+ "apihelp-import-extended-description": "Зважте, що HTTP POST має бути виконано як завантаження файлу (тобто з використанням даних різних частин/форм) під час надсилання файлу для параметра <var>xml</var>.",
+ "apihelp-import-param-summary": "Підсумок імпорту записів журналу.",
+ "apihelp-import-param-xml": "Завантажено XML-файл.",
+ "apihelp-import-param-interwikisource": "Для інтервікі-імпорту: вікі, з якої імпортувати.",
+ "apihelp-import-param-interwikipage": "Для інтервікі-імпорту: сторінки для імпорту.",
+ "apihelp-import-param-fullhistory": "Для інтервікі-імпорту: імпортувати повну історію, не лише поточну версію.",
+ "apihelp-import-param-templates": "Для інтервікі-імпорту: імпортувати також усі включені шаблони.",
+ "apihelp-import-param-namespace": "Імпортувати у цей простір назв. Не можна використати разом з <var>$1rootpage</var>.",
+ "apihelp-import-param-rootpage": "Імпортувати як підсторінку цієї сторінки. Не можна використати разом з <var>$1namespace</var>.",
+ "apihelp-import-param-tags": "Змінити теги для застосування до запису в журналі імпорту і до нульової версії імпортованих сторінок.",
+ "apihelp-import-example-import": "Імпортувати [[meta:Help:ParserFunctions]] у простір назв 100 з повною історією.",
+ "apihelp-linkaccount-summary": "Пов'язати обліковий запис третьої сторони з поточним користувачем.",
+ "apihelp-linkaccount-example-link": "Почати процес пов'язування з обліковм записом з <kbd>Example</kbd>.",
+ "apihelp-login-summary": "Увійти в систему й отримати куки автентифікації.",
+ "apihelp-login-extended-description": "Цю дію треба використовувати лише в комбінації з [[Special:BotPasswords]]; використання для входу в основний обліковий запис застаріле і може ламатися без попередження. Щоб безпечно увійти в основний обліковий запис, використовуйте <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-extended-description-nobotpasswords": "Ця дія застаріла і може ламатися без попередження. Щоб безпечно входити в систему, використовуйте <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "apihelp-login-param-name": "Ім'я користувача.",
+ "apihelp-login-param-password": "Пароль.",
+ "apihelp-login-param-domain": "Домен (необов'язково).",
+ "apihelp-login-param-token": "Токен входу в систему, отриманий у першому запиті.",
+ "apihelp-login-example-gettoken": "Отримати токен входу в систему.",
+ "apihelp-login-example-login": "Увійти в систему.",
+ "apihelp-logout-summary": "Вийти й очистити дані сесії.",
+ "apihelp-logout-example-logout": "Вийти з поточного облікового запису.",
+ "apihelp-managetags-summary": "Виконати керівні завдання щодо зміни теґів.",
+ "apihelp-managetags-param-operation": "Яку операцію виконати:\n;create:Створити нову мітку редагування для використання вручну.\n;delete:Вилучити мітку редагування з бази даних, включно з вилученням її з усіх версій, записів нових редагувань та записів журналів, де вона використана.\n;activate:Активувати мітку редагування, дозволивши користувачам застосовувати її вручну.\n;deactivate:Деактивувати мітку редагування, заборонивши користувачам застосовувати її вручну.",
+ "apihelp-managetags-param-tag": "Мітка для створення, вилучення, активування чи деактивування. Для створення мітки, вона повинна не існувати. Для вилучення мітки, вона повинна існувати. Для активування мітки, вона повинна існувати і не використовуватися жодним розширенням. Для деактивування мітки, вона має бути жива і визначена вручну.",
+ "apihelp-managetags-param-reason": "Необов'язкова причина створення, вилучення, активування чи деактивування мітки.",
+ "apihelp-managetags-param-ignorewarnings": "Чи ігнорувати усі попередження, що з'являються під час операції.",
+ "apihelp-managetags-param-tags": "Змінити теги для застосування до запису в журналі керування тегами.",
+ "apihelp-managetags-example-create": "Створити мітку з назвою <kbd>spam</kbd> з причиною <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Вилучити мітку <kbd>vandlaism</kbd> з причиною <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Активувати мітку з назвою <kbd>spam</kbd> з причиною <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Деактивувати мітку з назвою <kbd>spam</kbd> з причиною <kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "Об'єднання історій редагувань.",
+ "apihelp-mergehistory-param-from": "Назва сторінки, з якої буде приєднана історія редагувань. Не можна використовувати разом із <var>$1fromid</var>.",
+ "apihelp-mergehistory-param-fromid": "ID сторінки, з якої буде приєднана історія редагувань. Не можна використовувати разом із <var>$1from</var>.",
+ "apihelp-mergehistory-param-to": "Назва сторінки, до якої буде приєднана історія редагувань. Не можна використовувати разом із <var>$1toid</var>.",
+ "apihelp-mergehistory-param-toid": "ID сторінки, до якої буде приєднана історія редагувань. Не можна використовувати разом із <var>$1to</var>.",
+ "apihelp-mergehistory-param-timestamp": "Мітка часу, всі версії до якої будуть перенесені з історії редагувань вихідної сторінки до історії редагувань цільової сторінки. Якщо цей параметр пропущено, вся історія редагувань вихідної сторінки буде приєднана до цільової.",
+ "apihelp-mergehistory-param-reason": "Причина об'єднання історій.",
+ "apihelp-mergehistory-example-merge": "Приєднання всієї історії редагувань сторінки <kbd>Oldpage</kbd> до <kbd>Newpage</kbd>.",
+ "apihelp-mergehistory-example-merge-timestamp": "Приєднання версій до <kbd>2015-12-31T04:37:41Z</kbd> із <kbd>Oldpage</kbd> до <kbd>Newpage</kbd>.",
+ "apihelp-move-summary": "Перейменувати сторінку.",
+ "apihelp-move-param-from": "Назва сторінки для перейменування. Не можна використати разом з <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "ID сторінки для перейменування. Не можна використати разом з <var>$1from</var>.",
+ "apihelp-move-param-to": "Назва сторінки, на яку перейменувати.",
+ "apihelp-move-param-reason": "Причина перейменування.",
+ "apihelp-move-param-movetalk": "Перейменувати сторінку обговорення, якщо вона існує.",
+ "apihelp-move-param-movesubpages": "Перейменувати підсторінки, якщо можливо.",
+ "apihelp-move-param-noredirect": "Не створювати перенаправлення.",
+ "apihelp-move-param-watch": "Додати сторінку й перенаправлення у список спостереження поточного користувача.",
+ "apihelp-move-param-unwatch": "Вилучити сторінку й перенаправлення зі списку спостереження поточного користувача.",
+ "apihelp-move-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
+ "apihelp-move-param-ignorewarnings": "Ігнорувати всі попередження",
+ "apihelp-move-param-tags": "Змінити теги для застосування до запису в журналі перейменувань і до нульової версії цільової сторінки.",
+ "apihelp-move-example-move": "Перейменувати <kbd>Badtitle</kbd> на <kbd>Goodtitle</kbd> без збереження перенаправлення.",
+ "apihelp-opensearch-summary": "Шукати у вікі з використанням протоколу OpenSearch.",
+ "apihelp-opensearch-param-search": "Рядок пошуку.",
+ "apihelp-opensearch-param-limit": "Максимальна кількість результатів для виведення.",
+ "apihelp-opensearch-param-namespace": "Простори назв, у яких шукати.",
+ "apihelp-opensearch-param-suggest": "Нічого не робити, якщо <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> хибний.",
+ "apihelp-opensearch-param-redirects": "Як обробляти перенаправлення:\n;return:Видати саме перенаправлення.\n;resolve:Видати цільову сторінку. Може видати менше, ніж $1limit результат{{PLURAL:$1limit||и|ів}}.\nЗ історичних причин, за замовчуванням стоїть «return» для $1format=json і «resolve» — для інших форматів.",
+ "apihelp-opensearch-param-format": "Формат виводу.",
+ "apihelp-opensearch-param-warningsaserror": "Якщо при <kbd>format=json</kbd> з'являються попередження, видати помилку API замість того, щоб їх ігнорувати.",
+ "apihelp-opensearch-example-te": "Знайти сторінки, що починаються з <kbd>Te</kbd>.",
+ "apihelp-options-summary": "Змінити налаштування поточного користувача.",
+ "apihelp-options-extended-description": "Можна встановити лише опції, які зареєстровані у ядрі або в одному з інстальованих розширень, або опції з префіксом ключів <code>userjs-</code> (призначені для використання користувацькими скриптами).",
+ "apihelp-options-param-reset": "Встановлює налаштування сайту за замовчуванням.",
+ "apihelp-options-param-resetkinds": "Список типів опцій для перевстановлення, коли вказана опція <var>$1reset</var>.",
+ "apihelp-options-param-change": "Список змін, відформатованих як назва=значення (напр., skin=vector). Якщо значення не вказане (навіть немає знака рівності) , напр., optionname|otheroption|…, опцію буде перевстановлено до її значення за замовчуванням. Якщо будь-яке зі значень містить символ вертикальної риски (<kbd>|</kbd>), використайте [[Special:ApiHelp/main#main/datatypes|альтернативний розділювач значень]] для коректного виконання операції.",
+ "apihelp-options-param-optionname": "Назва опції, якій має бути присвоєне значення <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "Значення опції, вказане в <var>$1optionname</var>.",
+ "apihelp-options-example-reset": "Скинути всі налаштування.",
+ "apihelp-options-example-change": "Змінити налаштування <kbd>skin</kbd> та <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Скинути всі налаштування, потім встановити <kbd>skin</kbd> та <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-summary": "Отримати інформацію про модулі API.",
+ "apihelp-paraminfo-param-modules": "Список назв модулів (значення параметрів <var>action</var> і <var>format</var> або <kbd>main</kbd>). Можна вказати підмодулі через <kbd>+</kbd>, усі підмодулі через <kbd>+*</kbd> або усі підмодулі рекурсивно через <kbd>+**</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Формат рядків довідки.",
+ "apihelp-paraminfo-param-querymodules": "Список назв модулів запитів (значення параметра <var>prop</var>, <var>meta</var> або <var>list</var>). Використати <kbd>$1modules=query+foo</kbd> замість <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Отримати інформацію також про основний модуль (топ-рівень). Використати натомість <kbd>$1modules=main</kbd>.",
+ "apihelp-paraminfo-param-pagesetmodule": "Отримати також інформацію про модуль pageset (з вказанням titles= і рідних).",
+ "apihelp-paraminfo-param-formatmodules": "Список назв модулів форматування (значення параметра <var>format</var>). Використати натомість <var>$1modules</var>.",
+ "apihelp-paraminfo-example-1": "Показати інформацію для <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> та <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-paraminfo-example-2": "Показати інформацію про всі підмодулі <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
+ "apihelp-parse-summary": "Аналізує вміст і видає парсер виходу.",
+ "apihelp-parse-extended-description": "Див. різні prop-модулі <kbd>[[Special:ApiHelp/query|action=query]]</kbd>, щоб отримати інформацію з поточної версії сторінки.\n\nЄ декілька способів вказати текст для аналізу:\n# Вказати сторінку або версію, використавши <var>$1page</var>, <var>$1pageid</var> або <var>$1oldid</var>.\n# Вказати безпосередньо, використавши <var>$1text</var>, <var>$1title</var> і <var>$1contentmodel</var>.\n# Вказати лише підсумок аналізу. <var>$1prop</var> повинен мати порожнє значення.",
+ "apihelp-parse-param-title": "Назва сторінки, якій належить текст. Якщо пропущена, має бути вказано <var>$1contentmodel</var>, а як назву буде вжито [[API]].",
+ "apihelp-parse-param-text": "Текст для аналізу. Використати <var>$1title</var> або <var>$1contentmodel</var> для контролю моделі вмісту.",
+ "apihelp-parse-param-revid": "Ідентифікатор версії, для <code><nowiki>{{REVISIONID}}</nowiki></code> та подібних змінних.",
+ "apihelp-parse-param-summary": "Підсумок для аналізу.",
+ "apihelp-parse-param-page": "Аналізувати вміст цієї сторінки. Не можна використати разом з <var>$1text</var> і <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Аналізувати вміст цієї сторінки. Перевизначає <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Якщо <var>$1page</var> або <var>$1pageid</var> вказані як перенаправлення, виправити це.",
+ "apihelp-parse-param-oldid": "Аналізувати вміст цієї версії. Перевизначає <var>$1page</var> та <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Яку інформацію отримати?",
+ "apihelp-parse-paramvalue-prop-text": "Дає текст-аналіз вікітексту.",
+ "apihelp-parse-paramvalue-prop-langlinks": "Дає мовні посилання в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-categories": "Дає категорії в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "Дає HTML-версію категорій.",
+ "apihelp-parse-paramvalue-prop-links": "Дає зовнішні посилання в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-templates": "Дає шаблони в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-images": "Дає зображення в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-externallinks": "Дає зовнішні посилання в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-sections": "Дає розділи в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-revid": "Додає ідентифікатор версії аналізованої сторінки.",
+ "apihelp-parse-paramvalue-prop-displaytitle": "Додає заголовок аналізованого вікітексту.",
+ "apihelp-parse-paramvalue-prop-headitems": "Дає елементи для вставки в <code>&lt;head&gt;</code> сторінки.",
+ "apihelp-parse-paramvalue-prop-headhtml": "Дає проаналізований <code>&lt;head&gt;</code> сторінки.",
+ "apihelp-parse-paramvalue-prop-modules": "Дає модулі ResourceLoader, використані на сторінці. Щоб завантажити, використовуйте <code>mw.loader.using()</code>. Чи <kbd>jsconfigvars</kbd>, чи <kbd>encodedjsconfigvars</kbd> має бути запитано разом з <kbd>modules</kbd>.",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "Дає змінні конфігурації JavaScript, притаманні для сторінки. Щоб застосувати, використайте <code>mw.config.set()</code>.",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Дає змінні конфігурації JavaScript, притаманні для сторінки, як рядок JSON.",
+ "apihelp-parse-paramvalue-prop-indicators": "Дає HTML індикаторів стану сторінки, використаних на сторінці.",
+ "apihelp-parse-paramvalue-prop-iwlinks": "Дає інтервікі-посилання в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-wikitext": "Дає вихідний вікітекст, який було аналізовано.",
+ "apihelp-parse-paramvalue-prop-properties": "Дає різні властивості, визначені в аналізованому вікітексті.",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "Дає звіт по обмеженнях у структурованому вигляді. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "Дає HTML-версію звіту по обмеженнях. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
+ "apihelp-parse-paramvalue-prop-parsetree": "Синтаксичне дерево XML вмісту версії (передбачає модель вмісту <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Виводить попередження, які з'явилися при обробці контенту.",
+ "apihelp-parse-param-wrapoutputclass": "CSS-клас для загортання в нього виводу парсера.",
+ "apihelp-parse-param-pst": "Зробіть трансформацію вхідних даних перед збереженням і аналізом. Дійсне лише при використанні з текстом.",
+ "apihelp-parse-param-onlypst": "Зробіть трансформацію вхідних даних перед збереженням (PST), але не аналізуйте. Видає той самий вікітекст, після застосування PST. Дійсне лише у разі використання з <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Включає мовні посилання, додані розширеннями (для використання з <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Розібрати вміст лише розділу з цим номером .\n\nЯкщо <kbd>new</kbd>, розібрати <var>$1text</var> та <var>$1sectiontitle</var>, як ніби новий розділ додається на сторінку.\n\n<kbd>new</kbd> дозволяється лише про вказаному <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "Заголовок нового розділу, коли <var>section</var> має значення <kbd>new</kbd>.\n\nНа відміну від редагування сторінки, це не повертається до <var>summary</var>, якщо пропустити чи лишити порожнім.",
+ "apihelp-parse-param-disablelimitreport": "Пропустити звіт про ліміти («NewPP limit report») на виході аналізу.",
+ "apihelp-parse-param-disablepp": "Використати натомість <var>$1disablelimitreport</var>.",
+ "apihelp-parse-param-disableeditsection": "Пропустити посилання на редагування розділів на виході аналізу.",
+ "apihelp-parse-param-disabletidy": "Не запускайте очищення HTML (e.g. tidy) на виході аналізу.",
+ "apihelp-parse-param-generatexml": "Генерувати синтаксичне дерево XML (передбачає модель вмісту <code>$1</code>; замінено на <kbd>$2prop=parsetree</kbd>).",
+ "apihelp-parse-param-preview": "Аналізувати у режимі попереднього перегляду.",
+ "apihelp-parse-param-sectionpreview": "Аналізувати у режимі попереднього перегляду розділу (також вмикає попередній перегляд).",
+ "apihelp-parse-param-disabletoc": "Пропустити зміст на виході.",
+ "apihelp-parse-param-useskin": "Застосувати вибрану тему оформлення до виводу парсера. Може вплинути на такі властивості: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+ "apihelp-parse-param-contentformat": "Формат серіалізації вмісту, використаний у вхідному тексті. Дійсний лише при використанні разом з $1text.",
+ "apihelp-parse-param-contentmodel": "Модель вмісту вхідного тексту. Якщо пропущено, має бути вказано $1title, і за замовчуванням буде модель вказаного заголовка. Дійсне лише при використанні з $1text.",
+ "apihelp-parse-example-page": "Аналізувати сторінку.",
+ "apihelp-parse-example-text": "Аналізувати вікітекст.",
+ "apihelp-parse-example-texttitle": "Аналізувати вікітекст, вказуючи назву сторінки.",
+ "apihelp-parse-example-summary": "Аналізувати опис.",
+ "apihelp-patrol-summary": "Відпатрулювати сторінку чи версію.",
+ "apihelp-patrol-param-rcid": "ID нещодавніх змін для патрулювання.",
+ "apihelp-patrol-param-revid": "Ідентифікатор версії для патрулювання.",
+ "apihelp-patrol-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі патрулювання.",
+ "apihelp-patrol-example-rcid": "Відпатрулювати останню зміну.",
+ "apihelp-patrol-example-revid": "Відпатрулювати версію.",
+ "apihelp-protect-summary": "Змінити рівень захисту сторінки.",
+ "apihelp-protect-param-title": "Заголовок сторінки для (зняття) захисту. Не може використовуватися разом із $1pageid.",
+ "apihelp-protect-param-pageid": "ID сторінки для (зняття) захисту. Не може використовуватися разом з $1title.",
+ "apihelp-protect-param-protections": "Список рівнів захисту у форматі <kbd>action=level</kbd> (напр., <kbd>edit=sysop</kbd>). Рівень <kbd>all</kbd> означає, що будь-хто може робити дію, тобто обмежень немає.\n\n<strong>Примітка:</strong> Обмеження на дії, яких нема в списку, буде знято.",
+ "apihelp-protect-param-expiry": "Часові мітки закінчення. Якщо встановлена лише одна мітка, її буде використано для усіх захистів. Для безстрокового захисту використовуйте <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> або <kbd>never</kbd>.",
+ "apihelp-protect-param-reason": "Причина для (зняття) захисту.",
+ "apihelp-protect-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі захисту.",
+ "apihelp-protect-param-cascade": "Увімкнути каскадний захист (тобто захистити включені шаблоні і зображення, використані на цій сторінці). Ігнорується, якщо жоден з вказаних рівнів захисту не підтримує каскадність.",
+ "apihelp-protect-param-watch": "Якщо вказано, додати сторінку, де додається/знімається захист, до списку спостереження поточного користувача.",
+ "apihelp-protect-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
+ "apihelp-protect-example-protect": "Захистити сторінку.",
+ "apihelp-protect-example-unprotect": "Зняти захист зі сторінки, встановивши обмеження для <kbd>all</kbd> (тобто будь-хто зможе робити дії).",
+ "apihelp-protect-example-unprotect2": "Зняти захист з сторінки, встановивши відсутність обмежень.",
+ "apihelp-purge-summary": "Очистити кеш для вказаних заголовків.",
+ "apihelp-purge-param-forcelinkupdate": "Оновити таблиці посилань.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Оновити таблицю посилань, і оновити таблиці посилань для кожної сторінки, що використовує цю сторінку як шаблон.",
+ "apihelp-purge-example-simple": "Очистити кеш <kbd>Main Page</kbd> і сторінки <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Очистити кеш перших десяти сторінок у головному просторі назв.",
+ "apihelp-query-summary": "Вибірка даних з і про MediaWiki.",
+ "apihelp-query-extended-description": "Усі зміни даних у першу чергу мають використовувати запит на отримання токена, щоб запобігти зловживанням зі шкідливих сайтів.",
+ "apihelp-query-param-prop": "Властивості, які потрібно отримати для запитуваних сторінок.",
+ "apihelp-query-param-list": "Які списки отримати.",
+ "apihelp-query-param-meta": "Які метадані отримати.",
+ "apihelp-query-param-indexpageids": "Включити додатковий розділ pageids зі списком усіх виданих ідентифікаторів сторінки.",
+ "apihelp-query-param-export": "Експортувати поточні версії усіх заданих або створюваних сторінок.",
+ "apihelp-query-param-exportnowrap": "Видати експорт XML без огортання його в XML-результат (той же формат, що й [[Special:Export]]). Може використовуватися лише з $1export.",
+ "apihelp-query-param-iwurl": "Чи отримувати повний URL, якщо назва є інтервікі-посиланням.",
+ "apihelp-query-param-rawcontinue": "Видати сирі дані <samp>query-continue</samp> для продовження.",
+ "apihelp-query-example-revisions": "Вибірка [[Special:ApiHelp/query+siteinfo|інформації про сайт]] та [[Special:ApiHelp/query+revisions|версій]] <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Вибрати версії сторінок, які починаються з <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-summary": "Перерахувати всі категорії.",
+ "apihelp-query+allcategories-param-from": "Категорія, з якої почати перелічувати.",
+ "apihelp-query+allcategories-param-to": "Категорія, на якій закінчити перелічувати.",
+ "apihelp-query+allcategories-param-prefix": "Шукати усі назви категорій, які починаються з цього значення.",
+ "apihelp-query+allcategories-param-dir": "Напрямок сортування.",
+ "apihelp-query+allcategories-param-min": "Видати лише категорії, які мають щонайменше стільки елементів.",
+ "apihelp-query+allcategories-param-max": "Видати лише категорії, які мають максимум стільки елементів.",
+ "apihelp-query+allcategories-param-limit": "Скільки категорій видати.",
+ "apihelp-query+allcategories-param-prop": "Які властивості отримати:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "Додає номер сторінок у категорії.",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "Теґує категорії, приховані з <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+allcategories-example-size": "Перерахувати категорії з інформацією про кількість сторінок у кожній.",
+ "apihelp-query+allcategories-example-generator": "Отримати інформацію про саму сторінку категорії для категорій, що починаються з <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-summary": "Перерахувати усі вилучені версії за користувачем або у просторі назв.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Може використовуватися лише з <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Не може використовуватися з <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "Часова мітка початку переліку.",
+ "apihelp-query+alldeletedrevisions-param-end": "Часова мітка закінчення переліку.",
+ "apihelp-query+alldeletedrevisions-param-from": "Почати перелік з цієї назви.",
+ "apihelp-query+alldeletedrevisions-param-to": "Закінчити перелік цією назвою.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Шукати усі назви сторінок, які починаються з цього значення.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+ "apihelp-query+alldeletedrevisions-param-user": "Перерахувати лише версії цього користувача.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Не перераховувати версії цього користувача.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Перерахувати сторінки лише в цьому просторі назв.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Примітка:</strong> через [[mw:Special:MyLanguage/Manual:$wgMiserMode|«скупий режим»]], використання <var>$1user</var> і <var>$1namespace</var> одночасно можуть вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Коли використовується як генератор, генерувати заголовки замість ідентифікаторів версій.",
+ "apihelp-query+alldeletedrevisions-example-user": "Перерахувати останні 50 вилучених редагувань користувача <kbd>Example</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Перерахувати останні 50 вилучених версій у головному просторі назв.",
+ "apihelp-query+allfileusages-summary": "Перерахувати усі використання файлів, включно з тими, що не існують.",
+ "apihelp-query+allfileusages-param-from": "Назва файлу, з якої почати перераховувати.",
+ "apihelp-query+allfileusages-param-to": "Назва файлу, якою закінчувати перераховувати.",
+ "apihelp-query+allfileusages-param-prefix": "Шукати усі назви файлів, які починаються з цього значення.",
+ "apihelp-query+allfileusages-param-unique": "Показувати лише окремі назви файлів. Не може використовуватися разом з $1prop=ids.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+ "apihelp-query+allfileusages-param-prop": "Які відомості включати:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "Додає ідентифікатори із використаних сторінок (не буде використовуватися, при єдиній $1).",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Додає назву файлу.",
+ "apihelp-query+allfileusages-param-limit": "Скільки всього елементів виводити.",
+ "apihelp-query+allfileusages-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+allfileusages-example-B": "Перерахувати назви файлів, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Перерахувати унікальні назви файлів.",
+ "apihelp-query+allfileusages-example-unique-generator": "Отримує всі назви файлів, позначаючи відсутні.",
+ "apihelp-query+allfileusages-example-generator": "Отримує сторінки, на яких є файли.",
+ "apihelp-query+allimages-summary": "Перерахувати усі зображення послідовно.",
+ "apihelp-query+allimages-param-sort": "Властивість, за якою сортувати.",
+ "apihelp-query+allimages-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+allimages-param-from": "Назва зображення, з якої почати перерахунок. Можна використати лише з $1sort=name.",
+ "apihelp-query+allimages-param-to": "Назва зображення, якою закінчити перерахунок. Можна використати лише з $1sort=name.",
+ "apihelp-query+allimages-param-start": "Часова мітка, з якої почати перерахунок. Можна використати лише з $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "Часова мітка, якою закінчити перерахунок. Можна використати лише з $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Шукати усі назви зображень, що починаються цим значенням. Можна використати лише разом з $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Обмежити до зображень, які мають щонайменше стільки байтів.",
+ "apihelp-query+allimages-param-maxsize": "Обмежити до зображень, які мають максимум стільки байтів.",
+ "apihelp-query+allimages-param-sha1": "SHA1-хеш зображення. Перевизначає $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1-хеш зображення у base 36 (використано в MediaWiki).",
+ "apihelp-query+allimages-param-user": "Видати лише файли, завантажені цим користувачем. Можна використати лише з $1sort=timestamp. Не можна використати разом з $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Як фільтрувати файли, завантажені ботами. Можна використати лише з $1sort=timestamp. Не можна використати разом з $1user.",
+ "apihelp-query+allimages-param-mime": "Які MIME-типи шукати, напр., <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Скільки всього зображень видати.",
+ "apihelp-query+allimages-example-B": "Показати список файлів, які починаються на літеру <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Показати список нещодавно завантажених файлів, подібно до [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Показати список файлів з MIME-типом <kbd>image/png</kbd> або <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Показати інформацію про 4 файли, що починаються на літеру <kbd>T</kbd>.",
+ "apihelp-query+alllinks-summary": "Перераховувати всі посилання, які вказують на заданий простір назв.",
+ "apihelp-query+alllinks-param-from": "Назва посилання, з якої почати перераховувати.",
+ "apihelp-query+alllinks-param-to": "Назва посилання, якою закінчити перераховувати.",
+ "apihelp-query+alllinks-param-prefix": "Шукати усі пов'язані назви, які починаються з цього значення.",
+ "apihelp-query+alllinks-param-unique": "Показувати лише окремі пов'язані назви. Не може використовуватися з <kbd>$1prop=ids</kbd>.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+ "apihelp-query+alllinks-param-prop": "Які відомості включати:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "Додає ідентифікатори сторінок, що має посилання (не можна використати разом з <var>$1unique</var>).",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Додає назву посилання.",
+ "apihelp-query+alllinks-param-namespace": "Простір назв для переліку.",
+ "apihelp-query+alllinks-param-limit": "Скільки всього елементів виводити.",
+ "apihelp-query+alllinks-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+alllinks-example-B": "Перерахувати пов'язані назви, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Перерахувати унікальні назви з посиланнями.",
+ "apihelp-query+alllinks-example-unique-generator": "Отримує всі назви з посиланнями, позначаючи відсутні.",
+ "apihelp-query+alllinks-example-generator": "Отримує сторінки, на яких є посилання.",
+ "apihelp-query+allmessages-summary": "Видати повідомлення від цього сайту.",
+ "apihelp-query+allmessages-param-messages": "Які повідомлення виводити. <kbd>*</kbd> (за замовчуванням) означає усі повідомлення.",
+ "apihelp-query+allmessages-param-prop": "Які властивості отримати.",
+ "apihelp-query+allmessages-param-enableparser": "Встановити увімкнення парсеру, це попередньо обробить вікітекст повідомлення (підставити магічні слова, розкрити шаблони тощо).",
+ "apihelp-query+allmessages-param-nocontent": "Якщо вказано, не включати повідомлення вміст повідомлення у результат.",
+ "apihelp-query+allmessages-param-includelocal": "Також включити локальні повідомлення, тобто повідомлення, що не існують у програмному забезпеченні, але існують як сторінка в просторі назв {{ns:MediaWiki}}.\nЦе видає список усіх сторінок простору {{ns:MediaWiki}}, так що у ньому також будуть сторінки, які насправді не є повідомленнями, як-то [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Аргументи будуть підставлятися в повідомлення.",
+ "apihelp-query+allmessages-param-filter": "Видати лише повідомлення з назвами, що місять цей рядок.",
+ "apihelp-query+allmessages-param-customised": "Видати лише повідомлення у цьому стані налаштувань.",
+ "apihelp-query+allmessages-param-lang": "Видає повідомлення цією мовою.",
+ "apihelp-query+allmessages-param-from": "Видає повідомлення, починаючи з цього повідомлення.",
+ "apihelp-query+allmessages-param-to": "Видає повідомлення, закінчуючи цим повідомленням.",
+ "apihelp-query+allmessages-param-title": "Назва сторінки для використання як контекст при аналізі повідомлення (для опції $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Видати повідомлення з цим префіксом.",
+ "apihelp-query+allmessages-example-ipb": "Показати повідомлення, які починаються на <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Показати повідомлення <kbd>august</kbd> і <kbd>mainpage</kbd> німецькою.",
+ "apihelp-query+allpages-summary": "Перераховувати всі сторінки послідовно в заданому просторі назв.",
+ "apihelp-query+allpages-param-from": "Заголовок сторінки, з якого почати перелічувати.",
+ "apihelp-query+allpages-param-to": "Заголовок сторінки, яким закінчувати перелічувати.",
+ "apihelp-query+allpages-param-prefix": "Шукати усі назви сторінок, які починаються з цього значення.",
+ "apihelp-query+allpages-param-namespace": "Простір назв для переліку.",
+ "apihelp-query+allpages-param-filterredir": "Які сторінки перерахувати.",
+ "apihelp-query+allpages-param-minsize": "Обмежити до сторінок, які мають щонайменше стільки байтів.",
+ "apihelp-query+allpages-param-maxsize": "Обмежити до сторінок, які мають максимум стільки байтів.",
+ "apihelp-query+allpages-param-prtype": "Обмежити до захищених сторінок.",
+ "apihelp-query+allpages-param-prlevel": "Фільтрувати захисти залежно від рівня (мусить використовуватися з $1prtype= parameter).",
+ "apihelp-query+allpages-param-prfiltercascade": "Фільтрувати захисти залежно від каскадності (ігнорується, коли $1prtype не вказано).",
+ "apihelp-query+allpages-param-limit": "Скільки всього сторінок виводити.",
+ "apihelp-query+allpages-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+allpages-param-filterlanglinks": "Фільтрувати залежно від наявності у сторінки мовних посилань. Зауважте, що це може не врахувати мовні посилання, додані розширеннями.",
+ "apihelp-query+allpages-param-prexpiry": "За якою тривалістю захисту фільтрувати сторінку:\n;indefinite:Отримати лише сторінки з нескінченним захистом.\n;definite:Отримати лише сторінки з визначеним терміном захисту.\n;all:Отримати сторінки з будь-яким терміном захисту.",
+ "apihelp-query+allpages-example-B": "Показати список сторінок, які починаються на літеру <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Показати інформацію про 4 сторінки, що починаються на літеру <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Показати вміст перших двох сторінок, що не є перенаправленнями і починаються на <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-summary": "Перерахувати усі перенаправлення на простір назв.",
+ "apihelp-query+allredirects-param-from": "Назва перенаправлення, з якої почати перераховувати.",
+ "apihelp-query+allredirects-param-to": "Назва перенаправлення, якою закінчувати перераховувати.",
+ "apihelp-query+allredirects-param-prefix": "Шукати усі цільові сторінки, які починаються з цього значення.",
+ "apihelp-query+allredirects-param-unique": "Показувати лише окремі цільові сторінки. Не може використовуватися разом з $1prop=ids|fragment|interwiki.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+ "apihelp-query+allredirects-param-prop": "Які відомості включити:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "Додає ID сторінки-перенаправлення (не можна використати разом з <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-title": "Додає заголовок перенаправлення.",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "Додає фрагмент з перенаправлення, якщо він є (не можна використати разом з <var>$1unique</var>).",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "Додає інтервікі-префікс з перенаправлення, якщо він є (не можна використати разом з <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "Простір назв для переліку.",
+ "apihelp-query+allredirects-param-limit": "Скільки всього елементів виводити.",
+ "apihelp-query+allredirects-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+allredirects-example-B": "Перерахувати цільові сторінки, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Перерахувати унікальні цільові сторінки.",
+ "apihelp-query+allredirects-example-unique-generator": "Отримує всі цільові сторінки, позначаючи відсутні.",
+ "apihelp-query+allredirects-example-generator": "Отримує сторінки, які містять перенаправлення.",
+ "apihelp-query+allrevisions-summary": "Список усіх версій.",
+ "apihelp-query+allrevisions-param-start": "Часова мітка, з якої почати перелік.",
+ "apihelp-query+allrevisions-param-end": "Часова мітка закінчення переліку.",
+ "apihelp-query+allrevisions-param-user": "Перерахувати лише версії цього користувача.",
+ "apihelp-query+allrevisions-param-excludeuser": "Не перераховувати версії цього користувача.",
+ "apihelp-query+allrevisions-param-namespace": "Перерахувати сторінки лише в цьому просторі назв.",
+ "apihelp-query+allrevisions-param-generatetitles": "Коли використовується як генератор, генерувати заголовки замість ідентифікаторів версій.",
+ "apihelp-query+allrevisions-example-user": "Перерахувати останні 50 редагувань користувача <kbd>Example</kbd>.",
+ "apihelp-query+allrevisions-example-ns-main": "Перерахувати перші 50 версій у головному просторі назв.",
+ "apihelp-query+mystashedfiles-summary": "Отримати список файлів у сховку завантажень поточного користувача.",
+ "apihelp-query+mystashedfiles-param-prop": "Які властивості файлів отримати.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "Отримати розмір файлу та виміри зображення.",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "Отримати MIME-тип та тип даних файлу.",
+ "apihelp-query+mystashedfiles-param-limit": "Скільки файлів виводити.",
+ "apihelp-query+mystashedfiles-example-simple": "Отримати ключі файлів (filekey), розміри файлів та піксельні виміри файлів у сховку завантажень поточного користувача.",
+ "apihelp-query+alltransclusions-summary": "Список усіх включень (сторінки, вставлені з використанням &#123;&#123;x&#125;&#125;), включно з неіснуючими.",
+ "apihelp-query+alltransclusions-param-from": "Назва включення, з якої почати перераховувати.",
+ "apihelp-query+alltransclusions-param-to": "Назва включення, якою закінчити перераховувати.",
+ "apihelp-query+alltransclusions-param-prefix": "Шукати усі включені назви, які починаються з цього значення.",
+ "apihelp-query+alltransclusions-param-unique": "Показувати лише окремі включені назви. Не може використовуватися разом з $1prop=ids.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+ "apihelp-query+alltransclusions-param-prop": "Які відомості включати:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "Додає ідентифікатор сторінки включення (не можна використати разом з $1unique).",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "Додає назву включення.",
+ "apihelp-query+alltransclusions-param-namespace": "Простір назв для переліку.",
+ "apihelp-query+alltransclusions-param-limit": "Скільки всього елементів виводити.",
+ "apihelp-query+alltransclusions-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+alltransclusions-example-B": "Перерахувати включені назви, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Перерахувати унікальні включені назв.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Отримує всі включені назви, позначаючи відсутні.",
+ "apihelp-query+alltransclusions-example-generator": "Отримує сторінки, на яких є включення.",
+ "apihelp-query+allusers-summary": "Перерахувати усіх зареєстрованих користувачів.",
+ "apihelp-query+allusers-param-from": "Ім'я користувача, з якого почати перелічувати.",
+ "apihelp-query+allusers-param-to": "Ім'я користувача, на якому закінчити перелічувати.",
+ "apihelp-query+allusers-param-prefix": "Шукати усіх користувачів, які починаються з цього значення.",
+ "apihelp-query+allusers-param-dir": "Напрямок сортування.",
+ "apihelp-query+allusers-param-group": "Включати лише користувачів з даних груп.",
+ "apihelp-query+allusers-param-excludegroup": "Виключити користувачів у даних групах.",
+ "apihelp-query+allusers-param-rights": "Включати лише користувачів з даними правами. Не включає права, надані безумовними або автоматичними групами на зразок *, користувач або автопідтверджені.",
+ "apihelp-query+allusers-param-prop": "Які саме відомості включати:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "Додає інформацію про поточне блокування користувача.",
+ "apihelp-query+allusers-paramvalue-prop-groups": "Перераховує групи, до яких користувач належить. Це використовує більше ресурсів сервера і може видати менше результатів, ніж ліміт.",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Перераховує усіх групи, до яких користувач належить автоматично.",
+ "apihelp-query+allusers-paramvalue-prop-rights": "Перераховує права, які користувач має.",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "Додає кількість редагувань користувача.",
+ "apihelp-query+allusers-paramvalue-prop-registration": "Додає часову мітку, коли користувач зареєструвався, якщо доступно (може бути пустою).",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "Додає центральні ідентифікатори і стан приєднання для користувача.",
+ "apihelp-query+allusers-param-limit": "Скільки всього виводити імен користувачів.",
+ "apihelp-query+allusers-param-witheditsonly": "Перерахувати лише користувачів, що зробили редагування.",
+ "apihelp-query+allusers-param-activeusers": "Перерахувати лише користувачів, що були активні $1 {{PLURAL:$1|останній день|останні дні|останніх днів}}.",
+ "apihelp-query+allusers-param-attachedwiki": "Із <kbd>$1prop=centralids</kbd>, також вказати, чи користувач має приєднану вікі, визначену цим ідентифікатором.",
+ "apihelp-query+allusers-example-Y": "Перерахувати користувачів, починаючи з <kbd>Y</kbd>.",
+ "apihelp-query+authmanagerinfo-summary": "Отримати інформацію про поточний стан автентифікації.",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Перевірити, чи поточний стан автентифікації користувача є достатнім для даної конфіденційної операції.",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "Отримати інформацію про запити автентифікації, потрібні для даної дії автентифікації.",
+ "apihelp-query+authmanagerinfo-example-login": "Вибірка запитів, що можуть бути використані при початку входу.",
+ "apihelp-query+authmanagerinfo-example-login-merged": "Отримати запити, які можуть бути використані при початку входу, з об'єднаними полями форми.",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Перевірити чи автентифікація є достатньою для дії <kbd>foo</kbd>.",
+ "apihelp-query+backlinks-summary": "Знайти усі сторінки, що посилаються на подану сторінку.",
+ "apihelp-query+backlinks-param-title": "Назва для пошуку. Не можна використати разом з <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "ID сторінки для пошуку. Не можна використати разом з <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "Простір назв для переліку.",
+ "apihelp-query+backlinks-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+backlinks-param-filterredir": "Як відфільтрувати перенаправлення. Якщо встановлено <kbd>nonredirects</kbd> при увімкненому <var>$1redirect</var>, це застосовується лише до другого рівня.",
+ "apihelp-query+backlinks-param-limit": "Скільки всього виводити сторінок. Якщо увімкнено <var>$1redirect</var>, ліміт застосовується до кожного рівня окремо (це означає, що може бути видано до 2 * <var>$1limit</var> результатів).",
+ "apihelp-query+backlinks-param-redirect": "Якщо сторінка, яка посилається, є перенаправленням, знайти всі сторінки, які посилаються на це перенаправлення, теж. Максимальний ліміт зменшується наполовину.",
+ "apihelp-query+backlinks-example-simple": "Показати посилання на <kbd>Main page</kbd>.",
+ "apihelp-query+backlinks-example-generator": "Отримати інформацію про сторінки, що посилаються на <kbd>Main page</kbd>.",
+ "apihelp-query+blocks-summary": "Перерахувати усіх заблокованих користувачів і IP-адреси.",
+ "apihelp-query+blocks-param-start": "Часова мітка, з якої почати перелік.",
+ "apihelp-query+blocks-param-end": "Часова мітка закінчення переліку.",
+ "apihelp-query+blocks-param-ids": "Вивести список заблокованих ID (необов'язково).",
+ "apihelp-query+blocks-param-users": "Список користувачів для пошуку (необов'язково).",
+ "apihelp-query+blocks-param-ip": "Отримати всі блокування, що стосуються цієї IP-адреси або CIDR-діапазону, включно з блокуваннями діапазонів. Не може бути використано разом з <var>$3users</var>. CIDR-діапазони, ширші, ніж IPv4/$1 чи IPv6/$2, не приймаються.",
+ "apihelp-query+blocks-param-limit": "Максимальна кількість блокувань у списку.",
+ "apihelp-query+blocks-param-prop": "Які властивості отримати:",
+ "apihelp-query+blocks-paramvalue-prop-id": "Додає ID блокування.",
+ "apihelp-query+blocks-paramvalue-prop-user": "Додає ім'я заблокованого користувача.",
+ "apihelp-query+blocks-paramvalue-prop-userid": "Додає ID заблокованого користувача.",
+ "apihelp-query+blocks-paramvalue-prop-by": "Додає ім'я користувача, який заблокував.",
+ "apihelp-query+blocks-paramvalue-prop-byid": "Додає ID користувача, який заблокував.",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "Додає часову мітку здійснення блокування.",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "Додає часову мітку закінчення терміну блокування.",
+ "apihelp-query+blocks-paramvalue-prop-reason": "Додає причину, вказану при блокуванні.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Додає діапазон IP-адрес, на які поширюється блокування.",
+ "apihelp-query+blocks-paramvalue-prop-flags": "Мітки бану (автоблокування, лише анонім тощо).",
+ "apihelp-query+blocks-param-show": "Показувати лише елементи, які відповідають цим критеріям.\nНаприклад, щоб побачити лише незалежні блокування IP-адрес, встановіть <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Вивести список блокувань.",
+ "apihelp-query+blocks-example-users": "Вивести список блокувань користувачів <kbd>Alice</kbd> та <kbd>Bob</kbd>.",
+ "apihelp-query+categories-summary": "Перерахувати категорії, до яких сторінки належать.",
+ "apihelp-query+categories-param-prop": "Які додаткові властивості отримати для кожної категорії:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "Додає ключ сортування (шістнадцятковий рядок) і префікс ключа сортування (людиночитна частина) для категорії.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Додає мітку часу, коли категорію було додано.",
+ "apihelp-query+categories-paramvalue-prop-hidden": "Тегує приховані категорії з допомогою <code>_&#95;HIDDENCAT_&#95;</code>.",
+ "apihelp-query+categories-param-show": "Який тип категорій показувати.",
+ "apihelp-query+categories-param-limit": "Скільки категорій видати.",
+ "apihelp-query+categories-param-categories": "Перерахувати лише ці категорії. Корисно для перевірки, чи певна сторінка є в певній категорії.",
+ "apihelp-query+categories-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+categories-example-simple": "Отримати список категорій, до яких належить сторінка <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categories-example-generator": "Отримати інформацію про усі категорії, використані на сторінці <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-summary": "Видає інформацію про подані категорії.",
+ "apihelp-query+categoryinfo-example-simple": "Отримати інформацію про <kbd>Category:Foo</kbd> і <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-summary": "Перерахувати усі сторінки у поданій категорії.",
+ "apihelp-query+categorymembers-param-title": "Яку категорію вивести (обов'язково). Мусить включати префікс <kbd>{{ns:category}}:</kbd>. Не можна використати разом з <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID сторінки категорії для виведення. Не можна використати разом з <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Які відомості включати:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "Додає ID сторінки.",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "Додає назву й ID простору назв сторінки.",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Додає ключ сортування, використаний для сортування у категорії (шістнадцятковий рядок).",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Додає ключ сортування, використаний для сортування у категорії (людиночитна частина).",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "Додає тип, за яким категоризується сторінка (<samp>page</samp>, <samp>subcat</samp> або <samp>file</samp>).",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Додає мітку часу, коли сторінка була включена.",
+ "apihelp-query+categorymembers-param-namespace": "Включати лише сторінки у цих просторах назв. Зверніть увагу, що <kbd>$1type=subcat</kbd> чи <kbd>$1type=file</kbd> можна використовувати замість <kbd>$1namespace=14</kbd> чи <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Який тип елементів категорії включати. Ігнорується, коли вказано <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "Максимальна кількість сторінок для виведення.",
+ "apihelp-query+categorymembers-param-sort": "Властивість, за якою сортувати.",
+ "apihelp-query+categorymembers-param-dir": "У якому напрямку сортувати.",
+ "apihelp-query+categorymembers-param-start": "Часова мітка, з якої почати список. Можна використати лише разом з <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Часова мітка, якою закінчити список. Можна використати лише разом з <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Ключ сортування, з якого почати список, як видає <kbd>$1prop=sortkey</kbd>. Можна використати лише разом з <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Ключ сортування, з якого почати список, як видає <kbd>$1prop=sortkey</kbd>. Можна використати лише разом з <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Префікс ключа сортування, з якого почати список. Можна використати лише разом з <kbd>$1sort=sortkey</kbd>. Перевизначає <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Префікс ключа сортування, <strong>перед</strong> яким закінчити список (не <strong>на</strong>; якщо це значення зустрінеться, його не буде включено!). Можна використати лише разом з $1sort=sortkey. Перевизначає $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Використати натомість $1starthexsortkey.",
+ "apihelp-query+categorymembers-param-endsortkey": "Використати натомість $1endhexsortkey.",
+ "apihelp-query+categorymembers-example-simple": "Отримати перші 10 сторінок у <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Отримати інформацію про перші 10 сторінок у <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-summary": "Отримати список залогінених дописувачів і кількість анонімних дописувачів до сторінки.",
+ "apihelp-query+contributors-param-group": "Включати лише користувачів з даних груп. Не включає безумовні або автоматичні групи на зразок *, користувач або автопідтверджені.",
+ "apihelp-query+contributors-param-excludegroup": "Виключати користувачів з даних груп. Не включає безумовні або автоматичні групи на зразок *, користувач або автопідтверджені.",
+ "apihelp-query+contributors-param-rights": "Включати лише користувачів з даними правами. Не включає права, надані безумовними або автоматичними групами на зразок *, користувач або автопідтверджені.",
+ "apihelp-query+contributors-param-excluderights": "Виключати користувачів з даними правами. Не включає права, надані безумовними або автоматичними групами на зразок *, користувач або автопідтверджені.",
+ "apihelp-query+contributors-param-limit": "Скільки дописувачів виводити.",
+ "apihelp-query+contributors-example-simple": "Показати дописувачів до сторінки <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-summary": "Отримати інформацію про вилучену версію.",
+ "apihelp-query+deletedrevisions-extended-description": "Можна використати кількома способами:\n# Отримати вилучені версії набору сторінок, вказавши заголовки або ідентифікатори сторінок. Сортується за назвою і часовою міткою.\n# Отримати дані про набір вилучених версій, вказавши їх ID з ідентифікаторами версій. Сортується за ID версії.",
+ "apihelp-query+deletedrevisions-param-start": "Мітка часу, з якої почати перелік. Ігнорується, якщо обробляється список ідентифікаторів версій.",
+ "apihelp-query+deletedrevisions-param-end": "Мітка часу, якою закінчити перелік. Ігнорується, якщо обробляється список ідентифікаторів версій.",
+ "apihelp-query+deletedrevisions-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+ "apihelp-query+deletedrevisions-param-user": "Перерахувати лише версії цього користувача.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Не перераховувати версії цього користувача.",
+ "apihelp-query+deletedrevisions-example-titles": "Перерахувати вилучені версії сторінок <kbd>Main Page</kbd> і <kbd>Talk:Main Page</kbd>, з вмістом.",
+ "apihelp-query+deletedrevisions-example-revids": "Вивести інформацію вилученої версії <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-summary": "Перелічити вилучені версії.",
+ "apihelp-query+deletedrevs-extended-description": "Працює у трьох режимах:\n# Перелічити вилучені версії поданих назв, відсортованих за часовою міткою.\n# Перелічити вилучений внесок поданого користувача, відсортований за часовою міткою (без вказання заголовків).\n# Перелічити усі вилучені версії у поданому просторі назв, відсортовані за назвою та часовою міткою (без вказання заголовків, $1user не вказаний).\n\nОкремі параметри можуть застосовуватися в одному режимі й ігноруватися в іншому.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Режим|Режими}}: $2",
+ "apihelp-query+deletedrevs-param-start": "Часова мітка початку переліку.",
+ "apihelp-query+deletedrevs-param-end": "Часова мітка закінчення переліку.",
+ "apihelp-query+deletedrevs-param-from": "Почати перелік з цієї назви.",
+ "apihelp-query+deletedrevs-param-to": "Закінчити перелік цією назвою.",
+ "apihelp-query+deletedrevs-param-prefix": "Шукати усі назви сторінок, які починаються з цього значення.",
+ "apihelp-query+deletedrevs-param-unique": "Вивести лише одну версію кожної сторінки.",
+ "apihelp-query+deletedrevs-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+ "apihelp-query+deletedrevs-param-user": "Перерахувати лише версії цього користувача.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Не перераховувати версії цього користувача.",
+ "apihelp-query+deletedrevs-param-namespace": "Перерахувати сторінки лише в цьому просторі назв.",
+ "apihelp-query+deletedrevs-param-limit": "Максимальна кількість версій для переліку.",
+ "apihelp-query+deletedrevs-param-prop": "Які властивості отримати:\n;revid:Додає ID вилученої версії.\n;parentid:Додає ID попередньої версії сторінки.\n;user:Додає користувача, який створив версію.\n;userid:Додає ID користувача, який створив версію.\n;comment:Додає коментар до версії.\n;parsedcomment:Додає проаналізований коментар до версії.\n;minor:Позначає, якщо версія створена незначним редагуванням.\n;len:Додає довжину (байти) версії.\n;sha1:Додає SHA-1 (base 16) версії.\n;content:Додає вміст версії.\n;token:<span class=\"apihelp-deprecated\">Застаріло.</span> Дає токен редагування.\n;tags:Теґи версії.",
+ "apihelp-query+deletedrevs-example-mode1": "Перерахувати останні вилучені версії сторінок <kbd>Main Page</kbd> і <kbd>Talk:Main Page</kbd>, з вмістом (режим 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Перерахувати останні 50 вилучених редагувань <kbd>Bob</kbd> (режим 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Перерахувати перші 50 вилучених версій у головному просторі назв (режим 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Перерахувати перші 50 вилучених сторінок у просторі назв {{ns:talk}} (режим 3).",
+ "apihelp-query+disabled-summary": "Цей модуль запитів було вимкнено.",
+ "apihelp-query+duplicatefiles-summary": "Перерахувати усі файли, які є дублікатами поданих файлів з огляду на значення хешу.",
+ "apihelp-query+duplicatefiles-param-limit": "Скільки файлів-дублікатів виводити.",
+ "apihelp-query+duplicatefiles-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+duplicatefiles-param-localonly": "Шукати лише файли у локальному репозиторії.",
+ "apihelp-query+duplicatefiles-example-simple": "Шукати дублікати [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Шукати дублікати усіх файлів.",
+ "apihelp-query+embeddedin-summary": "Знайти всі сторінки, які вбудовують (включають) подану назву.",
+ "apihelp-query+embeddedin-param-title": "Назва для пошуку. Не можна використати разом з $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "ID сторінки для пошуку. Не можна використати разом з $1title.",
+ "apihelp-query+embeddedin-param-namespace": "Простір назв для переліку.",
+ "apihelp-query+embeddedin-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+embeddedin-param-filterredir": "Як фільтрувати перенаправлення.",
+ "apihelp-query+embeddedin-param-limit": "Скільки всього сторінок виводити.",
+ "apihelp-query+embeddedin-example-simple": "Показати сторінки, які включають <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Отримати інформацію про сторінки, які включають <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-summary": "Видати усі зовнішні URL (не інтервікі) з поданих сторінок.",
+ "apihelp-query+extlinks-param-limit": "Скільки посилань виводити.",
+ "apihelp-query+extlinks-param-protocol": "Протокол URL. Якщо пусто і вказано <var>$1query</var>, протокол <kbd>http</kbd>. Залиште пустими і це, і <var>$1query</var>, щоб перелічити усі зовнішні посилання.",
+ "apihelp-query+extlinks-param-query": "Шукати рядок без протоколу. Корисно для перевірки, чи містить певна сторінка певне зовнішнє посилання.",
+ "apihelp-query+extlinks-param-expandurl": "Розгорнути протокол-залежні URL за канонічним протоколом.",
+ "apihelp-query+extlinks-example-simple": "Отримати список зовнішніх посилань на <kbd>Main Page</kbd>.",
+ "apihelp-query+exturlusage-summary": "Перерахувати сторінки, які містять поданий URL.",
+ "apihelp-query+exturlusage-param-prop": "Які відомості включати:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "Додає ID сторінки.",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "Додає заголовок і ID простору назв сторінки.",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "Додає URL, використаний на сторінці.",
+ "apihelp-query+exturlusage-param-protocol": "Протокол URL. Якщо пусто і вказано <var>$1query</var>, протокол <kbd>http</kbd>. Залиште пустими і це, і <var>$1query</var>, щоб перелічити усі зовнішні посилання.",
+ "apihelp-query+exturlusage-param-query": "Шукати рядок без протоколу. Див. [[Special:LinkSearch]]. Залиште пустим, щоб вивести усі зовнішні посилання.",
+ "apihelp-query+exturlusage-param-namespace": "Простори назв для переліку.",
+ "apihelp-query+exturlusage-param-limit": "Скільки сторінок виводити.",
+ "apihelp-query+exturlusage-param-expandurl": "Розгорнути протокол-залежні URL за канонічним протоколом.",
+ "apihelp-query+exturlusage-example-simple": "Показати сторінки, які посилаються на <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-summary": "Перерахувати всі вилучені файли послідовно.",
+ "apihelp-query+filearchive-param-from": "Назва зображення, з якої почати перелічувати.",
+ "apihelp-query+filearchive-param-to": "Назва зображення, якою закінчити перелічувати.",
+ "apihelp-query+filearchive-param-prefix": "Шукати усі назви зображень, які починаються з цього значення.",
+ "apihelp-query+filearchive-param-limit": "Скільки всього зображень виводити.",
+ "apihelp-query+filearchive-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+filearchive-param-sha1": "SHA1-хеш зображення. Перевизначає $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "SHA1-хеш зображення у base 36 (використано в MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "Which image information to get:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "Додає хеш SHA-1 до зображення.",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "Додає часову мітку завантаженої версії.",
+ "apihelp-query+filearchive-paramvalue-prop-user": "Додає користувача, який завантажив версію зображення.",
+ "apihelp-query+filearchive-paramvalue-prop-size": "Додає розмір зображення у байтах, а також висоту, ширину і кількість сторінок (якщо є).",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "Аліас розміру.",
+ "apihelp-query+filearchive-paramvalue-prop-description": "Додає опис версії зображення.",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Аналіз опису зображення.",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "Додає MIME-тип зображення.",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "Додає медіатип зображення.",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "Вилає Exif-метадані версії зображення.",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Додає бітну глибину версії.",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "Додає до імені версію архіву для неостаточного варіанту файлу.",
+ "apihelp-query+filearchive-example-simple": "Показати список усіх вилучених файлів.",
+ "apihelp-query+filerepoinfo-summary": "Видати мета-інформацію про репозиторії зображень, налаштовані на вікі.",
+ "apihelp-query+filerepoinfo-param-prop": "Які властивості репозиторію отримати (на деяких вікі може бути більше):\n;apiurl:URL до репозиторію API — корисне для отримання інформації про зображення з хосту.\n;name:Ключ репозиторію — використано в e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> і значення [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Людиночита назва репозиторію вікі.\n;rooturl:Корінний URL для шляху зображення.\n;local:Чи репозиторій локальний, чи ні.",
+ "apihelp-query+filerepoinfo-example-simple": "Отримати інформацію про репозиторії файлів.",
+ "apihelp-query+fileusage-summary": "Знайти всі сторінки, що використовують дані файли.",
+ "apihelp-query+fileusage-param-prop": "Які властивості отримати:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "ID кожної сторінки.",
+ "apihelp-query+fileusage-paramvalue-prop-title": "Назва кожної сторінки.",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "Помітка, якщо сторінка є перенаправленням.",
+ "apihelp-query+fileusage-param-namespace": "Включати сторінки лише в цих просторах назв.",
+ "apihelp-query+fileusage-param-limit": "Скільки результатів виводити.",
+ "apihelp-query+fileusage-param-show": "Показати лише елементи, що відповідають цим критеріям:\n;redirect:Показати лише перенаправлення.\n;!redirect:Показати лише не перенаправлення.",
+ "apihelp-query+fileusage-example-simple": "Отримати список сторінок, які використовують [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Отримати інформацію про сторінки, які використовують [[:File:Example.jpg]].",
+ "apihelp-query+imageinfo-summary": "Видає інформацію про файл й історію завантаження.",
+ "apihelp-query+imageinfo-param-prop": "Яку інформацію отримати:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Додає мітку часу для завантаженої версії.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Додає користувача, який завантажив кожну версію файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Додати ідентифікатор користувача, який завантажив кожну версію файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Коментар до версії.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Аналізований коментар версії.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Додає канонічну назву файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Дає посилання на файл і сторінку опису.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Додає розмір файлу в байтах, а також висоту, ширину і кількість сторінок (якщо це можливо).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Псевдонім для розміру.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Додає SHA-1 хеш файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Додає MIME-тип файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Додає MIME-мініатюри зображення (передбачає url і параметр $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Додає медіатип файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Перелічує Exif-метадані версії файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Перелічує метадані формату версії файлу.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Перелічує форматовані метадані, поєднані з кількох джерел. Результати у форматі HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Додає назву файлу архівної версії для неостанніх версій.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Додає бітну глибину версії.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Використовується на Special:Upload page для отримання інформації про наявний файл. Не призначено для використання поза ядром MediaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "Додає інформацію про те, чи перебуває файл у [[MediaWiki:Bad image list|списку недозволених файлів]]",
+ "apihelp-query+imageinfo-param-limit": "Скільки виводити версій кожного файлу.",
+ "apihelp-query+imageinfo-param-start": "Часова мітка, з якої почати список.",
+ "apihelp-query+imageinfo-param-end": "Часова мітка, на якій закінчити список.",
+ "apihelp-query+imageinfo-param-urlwidth": "Якщо вказано $2prop=url, буде видано URL на масштабоване до цього розміру зображення.\nДля підвищення продуктивності, якщо використовується ця опція, не буде видано більше, ніж $1 {{PLURAL:$1|масштабоване зображення|масштабовані зображення|масштабованих зображень}}.",
+ "apihelp-query+imageinfo-param-urlheight": "Аналогічно до $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Версія метаданих, яку використати. Якщо вказано <kbd>latest</kbd>, використати останню версію. За замовчуванням — <kbd>1</kbd> для зворотної сумісності.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Якою мовою вибирати метадані. Це стосується і того, який переклад вибирати, якщо є різні, і як форматувати різні числа та значення.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Якщо переклади властивості extmetadata доступні, вибрати їх усі.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Якщо вказано і не порожньо, буде видано лише ці ключі для $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Рядок окремого параметра. Наприклад, PDF-ки можуть використовувати <kbd>page15-100px</kbd>. <var>$1urlwidth</var> повинно використовуватись і бути сумісним з <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "Якщо встановлено <kbd>$2prop=badfile</kbd>, це — назва сторінки, що буде використана при аналізі [[MediaWiki:Bad image list]]",
+ "apihelp-query+imageinfo-param-localonly": "Шукати лише файли у локальному репозиторії.",
+ "apihelp-query+imageinfo-example-simple": "Вибрати інформацію про поточну версію [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Вибрати інформацію про версії [[:File:Test.jpg]] від 2008 і раніше.",
+ "apihelp-query+images-summary": "Видає усі файли, які містяться на вказаних сторінках.",
+ "apihelp-query+images-param-limit": "Скільки файлів виводити.",
+ "apihelp-query+images-param-images": "Перерахувати лише ці файли. Корисно для перевірки, чи певна сторінка має певний файл.",
+ "apihelp-query+images-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+images-example-simple": "Отримати список файлів, використаних на [[Main Page]].",
+ "apihelp-query+images-example-generator": "Отримати інформацію про всі файли, використані на [[Main Page]].",
+ "apihelp-query+imageusage-summary": "Знайти всі сторінки, що використовують дану назву зображення.",
+ "apihelp-query+imageusage-param-title": "Назва для пошуку. Не можна використати разом з $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "ID сторінки для пошуку. Не можна використати разом з $1title.",
+ "apihelp-query+imageusage-param-namespace": "Простір назв для переліку.",
+ "apihelp-query+imageusage-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+imageusage-param-filterredir": "Як відфільтрувати перенаправлення. Якщо встановлено для неперенаправлень при увімкненому $1redirect, це застосовується лише до другого рівня.",
+ "apihelp-query+imageusage-param-limit": "Скільки всього виводити сторінок. Якщо увімкнено <var>$1redirect</var>, ліміт застосовується до кожного рівня окремо (це означає, що може бути видано до 2 * <var>$1limit</var> результатів).",
+ "apihelp-query+imageusage-param-redirect": "Якщо сторінка, яка посилається, є перенаправленням, знайти всі сторінки, які посилаються на це перенаправлення, теж. Максимальний ліміт зменшується наполовину.",
+ "apihelp-query+imageusage-example-simple": "Показати сторінки, які використовують [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Отримати інформацію про сторінки, які використовують [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-summary": "Отримати основні відомості про сторінку.",
+ "apihelp-query+info-param-prop": "Які додаткові властивості отримати:",
+ "apihelp-query+info-paramvalue-prop-protection": "Вивести рівень захисту кожної сторінки.",
+ "apihelp-query+info-paramvalue-prop-talkid": "Ідентифікатор сторінки обговорення для кожної сторінки, що не є обговоренням.",
+ "apihelp-query+info-paramvalue-prop-watched": "Вивести статус спостереженості кожної сторінки.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Кількість спостерігачів, якщо це дозволено.",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "Кількість спостерігачів для кожної сторінки, які відвідували останні редагування таких сторінок, якщо це дозволено.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "Часова мітка сповіщення списку спостереження кожної сторінки.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "Ідентифікатор батьківської сторінки для кожної сторінки обговорення.",
+ "apihelp-query+info-paramvalue-prop-url": "Дає повний URL, URL редагування та канонічний URL для кожної сторінки.",
+ "apihelp-query+info-paramvalue-prop-readable": "Чи користувач може редагувати цю сторінку.",
+ "apihelp-query+info-paramvalue-prop-preload": "Дає текст, виданий EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Дає спосіб, у який відображається назва сторінки.",
+ "apihelp-query+info-param-testactions": "Перевірити, чи поточний користувач може виконувати певні дії на сторінці.",
+ "apihelp-query+info-param-token": "Використати натомість [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-query+info-example-simple": "Отримати інформацію про сторінку <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Отримати загальну інформацію і дані про захист сторінки <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-summary": "Знайти всі сторінки, які посилаються на дане інтервікі-посилання.",
+ "apihelp-query+iwbacklinks-extended-description": "Може використовуватися, щоб знайти всі посилання з префіксом або всі посилання на назву (з даним префіксом). Без використання жодного параметра це, по суті, «всі інтервікі-посилання».",
+ "apihelp-query+iwbacklinks-param-prefix": "Префікс для інтервікі.",
+ "apihelp-query+iwbacklinks-param-title": "Інтервікі-посилання для пошуку. Повинно використовуватися з <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Скільки всього сторінок виводити.",
+ "apihelp-query+iwbacklinks-param-prop": "Які властивості отримати:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Додає префікс інтервікі.",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Додає назву інтервікі.",
+ "apihelp-query+iwbacklinks-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+iwbacklinks-example-simple": "Отримати сторінки, що посилаються на [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Отримати інформацію про сторінки, що посилаються на [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-summary": "Видає усі інтервікі-посилання із вказаних сторінок.",
+ "apihelp-query+iwlinks-param-url": "Чи отримувати повну URL-адресу (не може використовуватися з $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Які додаткові властивості отримати для кожного міжмовного посилання:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Додає повну URL-адресу.",
+ "apihelp-query+iwlinks-param-limit": "Скільки інтервікі-посилання виводити.",
+ "apihelp-query+iwlinks-param-prefix": "Видавати інтервікі-посилання лише з цим префіксом.",
+ "apihelp-query+iwlinks-param-title": "Інтервікі-посилання для пошуку. Повинно використовуватися з <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+iwlinks-example-simple": "Отримати інтервікі-посилання зі сторінки <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-summary": "Знайти всі сторінки, які посилаються на дане мовне посилання.",
+ "apihelp-query+langbacklinks-extended-description": "Може бути використано для пошуку всіх посилань з кодом мови або всіх посилань на назву (з урахуванням мови). \nБез жодного параметра це «усі мовні посилання».\n\nЗверніть увагу, що це може не розглядати мовні посилання, додані розширеннями.",
+ "apihelp-query+langbacklinks-param-lang": "Мова мовного посилання.",
+ "apihelp-query+langbacklinks-param-title": "Мовне посилання для пошуку. Мусить бути використане з $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Скільки всього сторінок виводити.",
+ "apihelp-query+langbacklinks-param-prop": "Які властивості для отримання:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Додає код мови мовного посилання.",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Додає назву мовного посилання.",
+ "apihelp-query+langbacklinks-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+langbacklinks-example-simple": "Отримати сторінки, що посилаються на [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Отримати інформацію про сторінки, що посилаються на [[:fr:Test]].",
+ "apihelp-query+langlinks-summary": "Видає усі міжмовні посилання із вказаних сторінок.",
+ "apihelp-query+langlinks-param-limit": "Скільки мовних посилань виводити.",
+ "apihelp-query+langlinks-param-url": "Чи отримувати повну URL-адресу (не може використовуватися з <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Які додаткові властивості для отримання кожного із міжмовного посилання:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "Додає повну URL-адресу.",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "Додає локалізовану назву мови (найкращий варіант). Використайте <var>$1inlanguagecode</var> для контролю мови.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Додає самоназву мови.",
+ "apihelp-query+langlinks-param-lang": "Видавати лише мовні посилання з кодом мови.",
+ "apihelp-query+langlinks-param-title": "Посилання для пошуку. Повинно використовуватися з <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Код мови для локалізованих назв мов.",
+ "apihelp-query+langlinks-example-simple": "Отримати міжмовні посилання зі сторінки <kbd>Main Page</kbd>.",
+ "apihelp-query+links-summary": "Видає усі посилання із вказаних сторінок.",
+ "apihelp-query+links-param-namespace": "Показати посилання лише у цих просторах назв.",
+ "apihelp-query+links-param-limit": "Скільки посилань виводити.",
+ "apihelp-query+links-param-titles": "Перерахувати лише посилання на ці назви. Корисно для перевірки, чи певна сторінка посилається на певну назву.",
+ "apihelp-query+links-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+links-example-simple": "Отримати посилання зі сторінки <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-generator": "Отримати інформацію про сторінки посилань на сторінці <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Отримати посилання зі сторінки <kbd>Main Page</kbd> у просторах назв {{ns:user}} і {{ns:template}}.",
+ "apihelp-query+linkshere-summary": "Знайти усі сторінки, що посилаються на подані сторінки.",
+ "apihelp-query+linkshere-param-prop": "Які властивості отримати:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "ID кожної сторінки.",
+ "apihelp-query+linkshere-paramvalue-prop-title": "Назва кожної сторінки.",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "Відзначити, якщо сторінка є перенаправленням.",
+ "apihelp-query+linkshere-param-namespace": "Включати сторінки лише в цих просторах назв.",
+ "apihelp-query+linkshere-param-limit": "Скільки результатів виводити.",
+ "apihelp-query+linkshere-param-show": "Показати лише елементи, що відповідають цим критеріям:\n;redirect:Показати лише перенаправлення.\n;!redirect:Показати лише не перенаправлення.",
+ "apihelp-query+linkshere-example-simple": "Отримати список сторінок, що посилаються на [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Отримати інформацію про сторінки, що посилаються на [[Main Page]].",
+ "apihelp-query+logevents-summary": "Отримати події з журналів.",
+ "apihelp-query+logevents-param-prop": "Які властивості отримати:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "Додає ID події в журналі.",
+ "apihelp-query+logevents-paramvalue-prop-title": "Додає назву сторінки події в журналі.",
+ "apihelp-query+logevents-paramvalue-prop-type": "Додає тип події в журналі.",
+ "apihelp-query+logevents-paramvalue-prop-user": "Додає користувача, відповідального за подію в журналі.",
+ "apihelp-query+logevents-paramvalue-prop-userid": "Додає ID користувача, відповідального за подію в журналі.",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "Додає часову мітку події.",
+ "apihelp-query+logevents-paramvalue-prop-comment": "Додає коментар події.",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Додає проаналізований коментар події.",
+ "apihelp-query+logevents-paramvalue-prop-details": "Виводить додаткові деталі щодо події.",
+ "apihelp-query+logevents-paramvalue-prop-tags": "Виводить мітки події.",
+ "apihelp-query+logevents-param-type": "Відфільтрувати записи журналу лише цього типу.",
+ "apihelp-query+logevents-param-action": "Відфільтрувати дії журналу до лише цієї дії. Перезаписує <var>$1type</var>. У списку можливих значень, значення з джокери з астеріском на зразок <kbd>action/*</kbd> можуть мати різне після косої риски (/).",
+ "apihelp-query+logevents-param-start": "Часова мітка початку переліку.",
+ "apihelp-query+logevents-param-end": "Часова мітка завершення переліку.",
+ "apihelp-query+logevents-param-user": "Відфільтрувати серед записів зроблені поданим користувачем.",
+ "apihelp-query+logevents-param-title": "Відфільтрувати серед записів пов'язані зі сторінкою.",
+ "apihelp-query+logevents-param-namespace": "Відфільтрувати до записів у поданому просторі назв.",
+ "apihelp-query+logevents-param-prefix": "Відфільтрувати до записів, що починаються з цього префікса.",
+ "apihelp-query+logevents-param-tag": "Перерахувати лише записи подій, помічені цим теґом.",
+ "apihelp-query+logevents-param-limit": "Скільки всього виводити записів подій.",
+ "apihelp-query+logevents-example-simple": "Перелічити останні подій в журналі.",
+ "apihelp-query+pagepropnames-summary": "Перелічити усі назви властивостей сторінки, що використовуються у вікі.",
+ "apihelp-query+pagepropnames-param-limit": "Максимальна кількість назв для виведення.",
+ "apihelp-query+pagepropnames-example-simple": "Отримати перші 10 назв властивостей.",
+ "apihelp-query+pageprops-summary": "Дає різні властивості сторінки, визначені у вмісті сторінки.",
+ "apihelp-query+pageprops-param-prop": "Перерахувати лише ці властивості сторінки. (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> видає назви властивостей сторінки, що використовуються). Корисно для перевірки, чи сторінка використовує певну властивість сторінки.",
+ "apihelp-query+pageprops-example-simple": "Отримати властивості для сторінок <kbd>Main Page</kbd> і <kbd>MediaWiki</kbd>.",
+ "apihelp-query+pageswithprop-summary": "Перелічити усі сторінки, що використовують подану властивість сторінки.",
+ "apihelp-query+pageswithprop-param-propname": "Властивість сторі́нки, для якої перелічити сторінки́ (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> видає назви властивостей сторінки, що використовуються).",
+ "apihelp-query+pageswithprop-param-prop": "Які відомості включати:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "Додає ID сторінки.",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "Додає заголовок і ID простору назв сторінки.",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "Додає значення властивості сторінки.",
+ "apihelp-query+pageswithprop-param-limit": "Максимальна кількість сторінок для виведення.",
+ "apihelp-query+pageswithprop-param-dir": "У якому напрямку сортувати.",
+ "apihelp-query+pageswithprop-example-simple": "Перелічити перші 10, що використовують <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Отримати додаткову інформацію про перші 10 сторінок, що використовують <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-summary": "Виконати пошук назв сторінок за префіксом.",
+ "apihelp-query+prefixsearch-extended-description": "Незважаючи на подібність назв, цей модуль не призначений для того, аби бути еквівалентом [[Special:PrefixIndex]]; щодо цього, перегляньте <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> із параметром <kbd>apprefix</kbd>. Мета цього модуля така ж, як і <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: взяти текст, введений користувачем, і вивести найбільш відповідні назви. Залежно від програмної підоснови пошукової системи, сюди можуть також входити виправлення орфографії, уникнення перенаправлень чи інша евристика.",
+ "apihelp-query+prefixsearch-param-search": "Рядок пошуку.",
+ "apihelp-query+prefixsearch-param-namespace": "Простори назв, у яких шукати.",
+ "apihelp-query+prefixsearch-param-limit": "Максимальна кількість результатів для виведення.",
+ "apihelp-query+prefixsearch-param-offset": "Кількість результатів, які пропустити.",
+ "apihelp-query+prefixsearch-example-simple": "Шукати назви сторінок, які починаються з <kbd>meaning</kbd>.",
+ "apihelp-query+prefixsearch-param-profile": "Профіль пошуку для використання.",
+ "apihelp-query+protectedtitles-summary": "Вивести список усіх назв, захищених від створення.",
+ "apihelp-query+protectedtitles-param-namespace": "Перерахувати назви лише в цих просторах назв.",
+ "apihelp-query+protectedtitles-param-level": "Перерахувати лише назви з цими рівням захисту.",
+ "apihelp-query+protectedtitles-param-limit": "Скільки всього сторінок виводити.",
+ "apihelp-query+protectedtitles-param-start": "Почати список з цієї часової мітки захисту.",
+ "apihelp-query+protectedtitles-param-end": "Закінчити список цією часовою міткою захисту.",
+ "apihelp-query+protectedtitles-param-prop": "Які властивості отримати:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Додає часову мітку встановлення захисту.",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "Додає користувача, який встановив захист.",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "Додає ID користувача, який встановив захист.",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "Додає коментар захисту.",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Додає проаналізований коментар захисту.",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Додає часову мітку закінчення захисту.",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "Додає рівень захисту.",
+ "apihelp-query+protectedtitles-example-simple": "Вивести список захищених назв.",
+ "apihelp-query+protectedtitles-example-generator": "Знайти посилання на захищені назви в основному просторі назв.",
+ "apihelp-query+querypage-summary": "Отримати список, кий дає спеціальна сторінка на базі QueryPage.",
+ "apihelp-query+querypage-param-page": "Назва спеціальної сторінки. Зважте, що чутлива до регістру.",
+ "apihelp-query+querypage-param-limit": "Кількість результатів, які виводити.",
+ "apihelp-query+querypage-example-ancientpages": "Видати результати з [[Special:Ancientpages]].",
+ "apihelp-query+random-summary": "Отримати набір випадкових сторінок.",
+ "apihelp-query+random-extended-description": "Сторінки перелічені у певній послідовності, лише початкова точка рандомна. Це означає, що якщо, наприклад, <samp>Main Page</samp> є першою випадковою сторінкою у списку, <samp>List of fictional monkeys</samp> <em>завжди</em> буде другою, <samp>List of people on stamps of Vanuatu</samp> — третьою, і т. д.",
+ "apihelp-query+random-param-namespace": "Вивести сторінки лише у цих просторах назв.",
+ "apihelp-query+random-param-limit": "Обмежити кількість випадкових сторінок, які буде видано.",
+ "apihelp-query+random-param-redirect": "Використати натомість <kbd>$1filterredir=redirects</kbd>.",
+ "apihelp-query+random-param-filterredir": "Як фільтрувати перенаправлення.",
+ "apihelp-query+random-example-simple": "Отримати дві випадкові сторінки з основного простору назв.",
+ "apihelp-query+random-example-generator": "Видати інформацію про дві випадкові сторінки з основного простору назв.",
+ "apihelp-query+recentchanges-summary": "Перерахувати нещодавні зміни.",
+ "apihelp-query+recentchanges-param-start": "Часова мітка початку переліку.",
+ "apihelp-query+recentchanges-param-end": "Часова мітка завершення переліку.",
+ "apihelp-query+recentchanges-param-namespace": "Відфільтрувати до змін лише у цих просторах назв.",
+ "apihelp-query+recentchanges-param-user": "Перерахувати лише зміни, зроблені цим користувачем.",
+ "apihelp-query+recentchanges-param-excludeuser": "Не перераховувати зміни, зроблені цим користувачем.",
+ "apihelp-query+recentchanges-param-tag": "Перерахувати лише зміни, помічені цим теґом.",
+ "apihelp-query+recentchanges-param-prop": "Включити додаткові відомості:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "Додає користувача, відповідального за редагування і мітки, якщо він IP.",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "Додає ID користувача, відповідального за редагування.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Додає коментар редагування.",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Додає проаналізований коментар редагування.",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "Додає прапорці редагування.",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Додає часову мітку редагування.",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "Додає назву сторінки, де було редагування.",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "Додає ID сторінки, ID нещодавніх змін, а також ID нової і старої версій.",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "Додає нову і стару довжину сторінки в байтах.",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "Помічає редагування, якщо сторінка є перенаправленням.",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Помічає редагування як відпатрульвані чи невідпатрульовані.",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Додає інформацію журналу (ID журналу, тип журналу тощо) до записів журналу.",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "Виводить мітки запису.",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "Додає контрольну суму вмісту для записів, пов'язаних з версією.",
+ "apihelp-query+recentchanges-param-token": "Використати натомість <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+recentchanges-param-show": "Показати лише елементи, що задовільняють ці критерії. Наприклад, для перегляду лише незначних змін, здійснених користувачами, що увійшли до системи, вкажіть $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Скільки всього змін виводити.",
+ "apihelp-query+recentchanges-param-type": "Які типи змін показувати.",
+ "apihelp-query+recentchanges-param-toponly": "Виводити лише зміни, які є останньою версією.",
+ "apihelp-query+recentchanges-param-generaterevisions": "Коли використовується як генератор, генерувати ідентифікатори версій замість заголовків. Записи нещодавніх редагувань без прив'язаних ID версій (наприклад, більшість записів журналів) не згенерують нічого.",
+ "apihelp-query+recentchanges-example-simple": "Вивести нещодавні зміни.",
+ "apihelp-query+recentchanges-example-generator": "Отримати інформацію про сторінки з недавніми невідпатрульованими змінами.",
+ "apihelp-query+redirects-summary": "Видає усі перенаправлення на дані сторінки.",
+ "apihelp-query+redirects-param-prop": "Які властивості отримати:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "Ідентифікатор сторінки кожного перенаправлення.",
+ "apihelp-query+redirects-paramvalue-prop-title": "Назва кожного перенаправлення.",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "Фрагмент кожного перенаправлення, якщо є.",
+ "apihelp-query+redirects-param-namespace": "Включати сторінки лише в цих просторах назв.",
+ "apihelp-query+redirects-param-limit": "Скільки перенаправлень виводити.",
+ "apihelp-query+redirects-param-show": "Показати лише елементи, які відповідають цим критеріям:\n;fragment:Показати лише перенаправлення з фрагментом.\n;!fragment:Показати лише перенаправлення без фрагмента.",
+ "apihelp-query+redirects-example-simple": "Отримати список перенаправлень на [[Main Page]].",
+ "apihelp-query+redirects-example-generator": "Отримати інформацію про всі перенаправлення на [[Main Page]].",
+ "apihelp-query+revisions-summary": "Отримати інформацію про версію.",
+ "apihelp-query+revisions-extended-description": "Може бути використано кількома способами:\n# Отримати дані про набір сторінок (останні версії), вказавши назви або ідентифікатори сторінок.\n# Отримати версії для однієї вказаної сторінки, використавши назви або ідентифікатори і початок, кінець чи ліміт.\n# Отримати дані про набір версій, встановивши їх ID й ідентифікатори версій.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Може використовуватися тільки з однією сторінкою (режим #2).",
+ "apihelp-query+revisions-param-startid": "Почати нумерацію з мітки часу цієї версії. Версія повинна існувати, але не обов'язково має належати до цієї сторінки.",
+ "apihelp-query+revisions-param-endid": "Зупинити нумерацію на мітці часу цієї версії. Ця версія повинна існувати, але не обов'язково мусить належати до цієї сторінки.",
+ "apihelp-query+revisions-param-start": "З якої часової мітки версії почати перелік.",
+ "apihelp-query+revisions-param-end": "Перелічувати до цієї часової мітки.",
+ "apihelp-query+revisions-param-user": "Включати лише версій, зроблені цим користувачем.",
+ "apihelp-query+revisions-param-excludeuser": "Виключити версії, зроблені цим користувачем.",
+ "apihelp-query+revisions-param-tag": "Перелічити лише версії, позначені цією міткою.",
+ "apihelp-query+revisions-param-token": "Які токени отримати для кожної версії.",
+ "apihelp-query+revisions-example-content": "Отримати дані з вмістом останньої версії для заголовків <kbd>API</kbd> та <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Отримати 5 останніх версії <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Отримати 5 перших версій <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Отримати 5 перших версій <kbd>Main Page</kbd>, зроблених після 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Отримати 5 перших версій <kbd>Main Page</kbd>, що не були зроблені анонімним користувачем <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Отримати 5 перших версій <kbd>Main Page</kbd>, що були зроблені користувачем <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Які властивості отримати для кожної версії:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "ID версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "Позначки версії (незначні).",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Часова мітка версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Користувач, який створив версію.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "ID користувача, який створив версію.",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "Довжина версії (в байтах).",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "ID моделі вмісту версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "Коментар користувача до версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Проаналізований коментар користувача до версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "Текст версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "Мітки версії.",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Deprecated.</span> Використовуйте натомість <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> або <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Синтаксичне дерево XML вмісту версії (передбачає модель вмісту <code>$1</code>).",
+ "apihelp-query+revisions+base-param-limit": "Обмежити кількість версій, які буде видано.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Використовуйте натомість <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>. Розгорнути шаблони у вмісті версії (передбачає $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Використовуйте натомість <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> або <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Генерувати синтаксичне дерево XML для вмісту версії (передбачає $1prop=content; замінено на <kbd>$1prop=parsetree</kbd>).",
+ "apihelp-query+revisions+base-param-parse": "Використовуйте натомість <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Аналізувати вміст версії (передбачає $1prop=content). З причин продуктивності, якщо використовується ця опція, $1limit встановлюється як 1.",
+ "apihelp-query+revisions+base-param-section": "Витягнути вміст лише розділу з цим номером.",
+ "apihelp-query+revisions+base-param-diffto": "Використовуйте натомість <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. ID версії, з якою порівняти кожну версію. Використайте <kbd>prev</kbd>, <kbd>next</kbd> і <kbd>cur</kbd> для попередньої, наступної та поточної версій відповідно.",
+ "apihelp-query+revisions+base-param-difftotext": "Використовуйте натомість <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Текст, з яким порівняти кожну версію. Порівнює лише обмежену кількість версій. Перевизначає <var>$1diffto</var>. Якщо вказано <var>$1section</var>, лише ця версія буде порівняна з цим текстом.",
+ "apihelp-query+revisions+base-param-difftotextpst": "Використовуйте натомість <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>. Виконати попередню трансформацію тексту перед виведенням дифу. Дійсне лише з використанням <var>$1difftotext</var>.",
+ "apihelp-query+revisions+base-param-contentformat": "Формат серіалізації, використаний для <var>$1difftotext</var> й очікуваний для контенту-результату.",
+ "apihelp-query+search-summary": "Виконати повнотекстовий пошук.",
+ "apihelp-query+search-param-search": "Шукати назви сторінок або вміст, що співпадає з цим значенням. Ви можете використати рядок пошуку для виклику спеціальних функцій пошуку, залежно від внутрішніх установок пошуку у вікі.",
+ "apihelp-query+search-param-namespace": "Шукати лише в межах цих просторів назв.",
+ "apihelp-query+search-param-what": "Який тип пошуку виконати.",
+ "apihelp-query+search-param-info": "Які метадані отримати.",
+ "apihelp-query+search-param-prop": "Які властивості для виведення:",
+ "apihelp-query+search-param-qiprofile": "Незалежний профіль запиту для використання (впливає на алгоритм ранжування).",
+ "apihelp-query+search-paramvalue-prop-size": "Додає розмір сторінки в байтах.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Додає кількість слів на сторінці.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Додає часову мітку останнього редагування сторінки.",
+ "apihelp-query+search-paramvalue-prop-snippet": "Додає проаналізований уривок сторінки.",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "Додає проаналізований уривок заголовка сторінки.",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "Додає проаналізований уривок перенаправлення.",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "Додає заголовок відповідного перенаправлення.",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "Додає проаналізований уривок заголовка відповідного розділу.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Додає заголовок відповідного розділу.",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "Додає проаналізований уривок відповідної категорії.",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "Додає перемикач, який показує, є пошук знайшов вміст файлу.",
+ "apihelp-query+search-paramvalue-prop-score": "Інгорується.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "Ігнорується.",
+ "apihelp-query+search-param-limit": "Скільки всього сторінок виводити.",
+ "apihelp-query+search-param-interwiki": "Включати інтервікі в результатах пошуку, якщо доступно.",
+ "apihelp-query+search-param-backend": "Який бекенд пошуку використовувати, якщо не за замовчуванням.",
+ "apihelp-query+search-param-enablerewrites": "Включити внутрішнє переписування запиту. Деякі пошукові бекенди можуть переписати запит так, щоб вони, теоретично, давали кращі результати, наприклад, виправивши орфографічні помилки.",
+ "apihelp-query+search-example-simple": "Шукати <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Шукати в текстах <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Отримати інформацію про сторінки, на яких знайдено <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-summary": "Видати загальну інформацію про сайт.",
+ "apihelp-query+siteinfo-param-prop": "Яку інформацію отримати:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "Загальна системна інформація.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Список зареєстрованих просторів назв та їхні канонічні назви.",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Список зареєстрованого простору прізвиськ.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Список аліасів спеціальної сторінки.",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Список магічних слів та їх аліасів.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Видає статистику сайту.",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Видає карту інтервікі (за бажанням, фільтровану, за бажанням локалізовану з використанням <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Видає сервер бази даних з найбільшою затримкою відповіді.",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Видає групи користувачів і пов'язані дозволи.",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "Видає бібліотеки, встановлені у вікі.",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "Видає розширення, встановлені у вікі.",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Видає список розширень файлів (типів файлів), які дозволено завантажувати.",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Видає інформацію щодо прав (ліцензії) вікі, якщо наявна.",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Видає інформацію про наявні типи обмежень (захисту).",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "Видає список мов, які підтримує MediaWiki (за бажанням локалізовані через <var>$1inlanguagecode</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Виводить список кодів мов, для яких увімкнено [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]], а також варіанти, підтримувані кожною з цих мов.",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "Видає список усіх доступних тем оформлення (опціонально локалізовані з використанням <var>$1inlanguagecode</var>, в іншому разі — мовою вмісту).",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Видає список теґів розширення парсеру.",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Видає список гуків парсерних функцій.",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Видає список усіх підписаних гуків (вміст <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "Видає список змінних ID.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Видає список протоколів, дозволених у зовнішніх посиланнях.",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Видає значення налаштувань користувача за замовчуванням.",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Повертає конфігурацію діалогу завантаження.",
+ "apihelp-query+siteinfo-param-filteriw": "Видати лише локальні або лише нелокальні елементи карти інтервікі.",
+ "apihelp-query+siteinfo-param-showalldb": "Перелічити усі сервери баз даних, а не лише той, який робить найбільшу затримку.",
+ "apihelp-query+siteinfo-param-numberingroup": "Перераховує кількість користувачів у групах користувачів.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Код мови для локалізованих назв мов (найкращий варіант) і назв тем оформлення.",
+ "apihelp-query+siteinfo-example-simple": "Вибрати інформацію про сайт.",
+ "apihelp-query+siteinfo-example-interwiki": "Отримати список локальних інтервікі-префіксів.",
+ "apihelp-query+siteinfo-example-replag": "Перевірити поточне відставання реплікації.",
+ "apihelp-query+stashimageinfo-summary": "Видає інформацію про приховані файли.",
+ "apihelp-query+stashimageinfo-param-filekey": "Ключ, який ідентифікує попереднє завантаження, що було тимчасово приховане.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Аліас для $1filekey, для зворотної сумісності.",
+ "apihelp-query+stashimageinfo-example-simple": "Видає інформацію про прихований файл.",
+ "apihelp-query+stashimageinfo-example-params": "Видає мініатюри для двох прихованих файлів.",
+ "apihelp-query+tags-summary": "Перелічити мітки змін.",
+ "apihelp-query+tags-param-limit": "Максимальна кількість міток у списку.",
+ "apihelp-query+tags-param-prop": "Які властивості отримати:",
+ "apihelp-query+tags-paramvalue-prop-name": "Додає назву мітки.",
+ "apihelp-query+tags-paramvalue-prop-displayname": "Додає системне повідомлення для мітки.",
+ "apihelp-query+tags-paramvalue-prop-description": "Додає опис мітки.",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "Додає кількість версій та записів журналу, які мають цю мітку.",
+ "apihelp-query+tags-paramvalue-prop-defined": "Показує, чи мітка визначена.",
+ "apihelp-query+tags-paramvalue-prop-source": "Отримує джерела мітки, що може включати <samp>extension</samp> для визначених розширеннями міток і <samp>manual</samp> для міток, які користувачі можуть застосовувати вручну.",
+ "apihelp-query+tags-paramvalue-prop-active": "І все ж позначка досі задіяна.",
+ "apihelp-query+tags-example-simple": "Перелічити доступні мітки.",
+ "apihelp-query+templates-summary": "Видає усі сторінки, які включені на вказаних сторінках.",
+ "apihelp-query+templates-param-namespace": "Показати шаблони лише у цьому просторі назв.",
+ "apihelp-query+templates-param-limit": "Скільки шаблонів виводити.",
+ "apihelp-query+templates-param-templates": "Перерахувати лише ці шаблони. Корисно для перевірки, чи певна сторінка використовує певний шаблон.",
+ "apihelp-query+templates-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+templates-example-simple": "Отримати шаблони, використані на сторінці <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Отримати інформацію про сторінки шаблонів, використаних на сторінці <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Отримати сторінки у просторах назв {{ns:user}} і {{ns:template}}, які включені на сторінці <kbd>Main Page</kbd>.",
+ "apihelp-query+tokens-summary": "Отримує токени для дій, що змінюють дані.",
+ "apihelp-query+tokens-param-type": "Типи токена для запиту.",
+ "apihelp-query+tokens-example-simple": "Отримати csrf-токен (за замовчуванням).",
+ "apihelp-query+tokens-example-types": "Отримати токен спостереження і токен патрулювання.",
+ "apihelp-query+transcludedin-summary": "Знайти усі сторінки, що включають подані сторінки.",
+ "apihelp-query+transcludedin-param-prop": "Які властивості отримати:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID кожної сторінки.",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "Назва кожної сторінки.",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "Помітка, якщо сторінка є перенаправленням.",
+ "apihelp-query+transcludedin-param-namespace": "Включати сторінки лише в цих просторах назв.",
+ "apihelp-query+transcludedin-param-limit": "Скільки результатів виводити.",
+ "apihelp-query+transcludedin-param-show": "Показати лише елементи, що відповідають цим критеріям:\n;redirect:Показати лише перенаправлення.\n;!redirect:Показати лише не перенаправлення.",
+ "apihelp-query+transcludedin-example-simple": "Отримати список сторінок, що включають <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Отримати інформацію про сторінки, які включають <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-summary": "Отримати всі редагування користувача.",
+ "apihelp-query+usercontribs-param-limit": "Максимальна кількість елементів внеску для виведення.",
+ "apihelp-query+usercontribs-param-start": "З якої часової мітки виводити.",
+ "apihelp-query+usercontribs-param-end": "До якої часової мітки виводити.",
+ "apihelp-query+usercontribs-param-user": "Користувачі, для яких отримати внесок. Не можна використовувати з <var>$1userids</var> чи <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Отримати внесок усіх користувачів, чиї імена починаються цим значенням. Не можна використовувати з <var>$1user</var> чи <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "Ідентифікатори користувачів, для яких отримати внесок. Не можна використовувати з <var>$1user</var> чи <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-namespace": "Перерахувати записи внеску лише в цих просторах назв.",
+ "apihelp-query+usercontribs-param-prop": "Включити додаткові відомомсті:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "Додає ID сторінки й ID версії.",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "Додає назву й ID простору назв сторінки.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Додає часову мітку редагування.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Додає коментар редагування.",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Додає проаналізований коментар редагування.",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "Додає новий розмір редагування.",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Додає зміну розміру порівняно з попереднім редагуванням.",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "Додає прапорці редагування.",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Відзначає патрульовані редагування.",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "Перелічує мітки редагування.",
+ "apihelp-query+usercontribs-param-show": "Показати лише елементи, що відповідають цим критеріям, наприклад, лише не незначні редагування: <kbd>$2show=!minor</kbd>.\n\nЯкщо вказано <kbd>$2show=patrolled</kbd> або <kbd>$2show=!patrolled</kbd>, версії, старіші ніж <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|секунда|секунди|секунд}}) не будуть показуватися.",
+ "apihelp-query+usercontribs-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+ "apihelp-query+usercontribs-param-toponly": "Виводити лише зміни, які є останньою версією.",
+ "apihelp-query+usercontribs-example-user": "Показати внесок користувача <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Показати внесок з усіх IP-адрес з префіксом <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-summary": "Отримати інформацію про поточного користувача.",
+ "apihelp-query+userinfo-param-prop": "Які саме відомості включати:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Позначає, чи поточний користувач заблокований, ким, з якої причини.",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Додає мітку <samp>messages</samp>, якщо у користувача є непроглянуті повідомлення.",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "Перелічує усі групи, до яких належить поточний користувач.",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Перелічити групи, в які поточний користувач безпосередньо входить, а також термін дії членств.",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Перелічує усі групи, до яких поточний користувач належить автоматично.",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "Перелічує усі права, які має поточний користувач.",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Перелічує групи, у які користувач може додавати і з яких вилучати.",
+ "apihelp-query+userinfo-paramvalue-prop-options": "Перелічує усі налаштування, які поточний користувач встановив.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Отримати токен для зміни налаштувань поточного користувача.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Додає кількість редагувань поточного користувача.",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Перелічує усі ліміти оцінок, застосовні до поточного користувача.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Додає справжнє ім'я користувача.",
+ "apihelp-query+userinfo-paramvalue-prop-email": "Додає електронну пошту користувача та дату її підтвердження.",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Дублює шапку <code>Accept-Language</code>, надіслану клієнтом у структурованому форматі.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "ДОдає дату реєстрації користувача.",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Додає кількість непрочитаних сторінок у списку спостереження користувача (максимально $1; видає «<samp>$2</samp>», якщо більше).",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "Додає центральні ідентифікатори і стан приєднання для користувача.",
+ "apihelp-query+userinfo-param-attachedwiki": "Із <kbd>$1prop=centralids</kbd>, вказати, чи користувач має приєднану вікі, визначену цим ідентифікатором.",
+ "apihelp-query+userinfo-example-simple": "Отримати інформацію про поточного користувача.",
+ "apihelp-query+userinfo-example-data": "Отримати додаткову інформацію про поточного користувача.",
+ "apihelp-query+users-summary": "Отримати інформацію про список користувачів.",
+ "apihelp-query+users-param-prop": "Яку інформацію включити:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "Мітки про те чи є користувач заблокованим, ким, і з якою причиною.",
+ "apihelp-query+users-paramvalue-prop-groups": "Перелічує всі групи, до яких належить кожен з користувачів.",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "Перелічити групи, в які користувачі безпосередньо входять, а також термін дії членств.",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "Перелічує всі групи, членом яких користувач є автоматично.",
+ "apihelp-query+users-paramvalue-prop-rights": "Перелічує всі права, які має кожен з користувачів.",
+ "apihelp-query+users-paramvalue-prop-editcount": "Додає лічильник редагувань користувача.",
+ "apihelp-query+users-paramvalue-prop-registration": "Додає часову мітку реєстрації користувача.",
+ "apihelp-query+users-paramvalue-prop-emailable": "Помічає чи хоче користувач отримувати електронну пошту через [[Special:Emailuser]].",
+ "apihelp-query+users-paramvalue-prop-gender": "Помічає стать користувача. Повертає \"male\", \"female\", або \"unknown\".",
+ "apihelp-query+users-paramvalue-prop-centralids": "Додає центральні ідентифікатори і стан приєднання для користувача.",
+ "apihelp-query+users-paramvalue-prop-cancreate": "Вказує, чи можна створити обліковий запис для допустимих, але незареєстрованих імен користувачів.",
+ "apihelp-query+users-param-attachedwiki": "Із <kbd>$1prop=centralids</kbd>, вказати, чи користувач має приєднану вікі, визначену цим ідентифікатором.",
+ "apihelp-query+users-param-users": "Список користувачів, для яких отримати інформацію.",
+ "apihelp-query+users-param-userids": "Список ідентифікаторів користувачів, щодо яких треба отримати інформацію.",
+ "apihelp-query+users-param-token": "Використати натомість <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+users-example-simple": "Вивести інформацію для користувача <kbd>Example</kbd>.",
+ "apihelp-query+watchlist-summary": "Отримати нещодавні зміни сторінок у списку спостереження поточного користувача.",
+ "apihelp-query+watchlist-param-allrev": "Включити декілька версій тієї з сторінки у поданому часовому діапазоні.",
+ "apihelp-query+watchlist-param-start": "Часова мітка, з якої почати перелік.",
+ "apihelp-query+watchlist-param-end": "Часова мітка завершення переліку.",
+ "apihelp-query+watchlist-param-namespace": "Відфільтрувати до змін лише у поданих просторах назв.",
+ "apihelp-query+watchlist-param-user": "Перерахувати лише зміни, зроблені цим користувачем.",
+ "apihelp-query+watchlist-param-excludeuser": "Не перераховувати зміни, зроблені цим користувачем.",
+ "apihelp-query+watchlist-param-limit": "Скільки всього видати результатів за один запит.",
+ "apihelp-query+watchlist-param-prop": "Які додаткові властивості отримати:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "Додає ID версій та ID сторінок.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Додає заголовок сторінки.",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "Додає прапорці редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Додає користувача, який зробив редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "Додає ідентифікатор користувача, який зробив редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Додає коментар редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Додає проаналізований коментар редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Додає часову мітку редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "Позначає відпатрульовані редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "Додає стару і нову довжину сторінки.",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Додає мітку часу, коли користувач був востаннє сповіщений про редагування.",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "Додає інформацію журналу, де це доречно.",
+ "apihelp-query+watchlist-param-show": "Показати лише елементи, що задовільняють ці критерії. Наприклад, для перегляду лише незначних змін, здійснених користувачами, що увійшли до системи, вкажіть $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Які типи змін показувати:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Регулярні сторінки правок.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Зовнішні зміни.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Сторінка створена.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Записи в журналі.",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "Зміни членства в категорії.",
+ "apihelp-query+watchlist-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
+ "apihelp-query+watchlist-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
+ "apihelp-query+watchlist-example-simple": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження поточного користувача.",
+ "apihelp-query+watchlist-example-props": "Вибрати додаткову інформацію про верхню версію нещодавно змінених сторінок у списку спостереження поточного користувача.",
+ "apihelp-query+watchlist-example-allrev": "Вибрати інформацію про усі нещодавні зміни на сторінках у списку спостереження поточного користувача.",
+ "apihelp-query+watchlist-example-generator": "Видати інформацію про сторінку для нещодавно змінених сторінок у списку спостереження поточного користувача.",
+ "apihelp-query+watchlist-example-generator-rev": "Вибрати інформацію про версію для усіх нещодавніх змін на сторінках у списку спостереження поточного користувача.",
+ "apihelp-query+watchlist-example-wlowner": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження користувача <kbd>Example</kbd>.",
+ "apihelp-query+watchlistraw-summary": "Отримати усі сторінки у списку спостереження поточного користувача.",
+ "apihelp-query+watchlistraw-param-namespace": "Перерахувати сторінки лише в поданих просторах назв.",
+ "apihelp-query+watchlistraw-param-limit": "Скільки всього видати результатів за один запит.",
+ "apihelp-query+watchlistraw-param-prop": "Які додаткові властивості отримати:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Додає мітку часу, коли користувач був востаннє сповіщений про редагування.",
+ "apihelp-query+watchlistraw-param-show": "Перелічити лише елементи, які відповідають цим критеріям.",
+ "apihelp-query+watchlistraw-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
+ "apihelp-query+watchlistraw-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
+ "apihelp-query+watchlistraw-param-dir": "Напрямок, у якому перелічити.",
+ "apihelp-query+watchlistraw-param-fromtitle": "Назва (з префіксом простору назв), з якої почати перерахування.",
+ "apihelp-query+watchlistraw-param-totitle": "Назва (з префіксом простору назв), якою закінчити перерахування.",
+ "apihelp-query+watchlistraw-example-simple": "Перелічити сторінки у списку спостереження поточного користувача.",
+ "apihelp-query+watchlistraw-example-generator": "Вибрати інформацію про сторінку для сторінок у списку спостереження поточного користувача.",
+ "apihelp-removeauthenticationdata-summary": "Вилучити параметри автентифікації для поточного користувача.",
+ "apihelp-removeauthenticationdata-example-simple": "Спроба вилучити дані поточного користувача для <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-resetpassword-summary": "Відправити користувачу лист для відновлення пароля.",
+ "apihelp-resetpassword-extended-description-noroutes": "Немає доступних способів відновити пароль.\n\nУвімкніть способи у <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>, щоб використовувати цей модуль.",
+ "apihelp-resetpassword-param-user": "Користувача відновлено.",
+ "apihelp-resetpassword-param-email": "Адреса електронної пошти користувача відновлено.",
+ "apihelp-resetpassword-example-user": "Надіслати лист для скидання пароля користувачу <kbd>Example</kbd>.",
+ "apihelp-resetpassword-example-email": "Надіслати лист для скидання пароля усім користувачам з адресою електронної пошти <kbd>user@example.com</kbd>.",
+ "apihelp-revisiondelete-summary": "Вилучити або відновити версії.",
+ "apihelp-revisiondelete-param-type": "Тип здійснюваного вилучення версії.",
+ "apihelp-revisiondelete-param-target": "Назва сторінки, версію якої вилучити, якщо вимагається для цього типу.",
+ "apihelp-revisiondelete-param-ids": "Ідентифікатори версій, які слід вилучити.",
+ "apihelp-revisiondelete-param-hide": "Що приховати у кожній з версій.",
+ "apihelp-revisiondelete-param-show": "Що показати у кожній з версії.",
+ "apihelp-revisiondelete-param-suppress": "Чи приховати дані від адміністраторів так само як від усіх інших.",
+ "apihelp-revisiondelete-param-reason": "Причина вилучення або відновлення.",
+ "apihelp-revisiondelete-param-tags": "Теги для застосування до запису в журналі вилучень",
+ "apihelp-revisiondelete-example-revision": "Приховати вміст версії <kbd>12345</kbd> сторінки <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Приховати всі дані у записі журналу <kbd>67890</kbd> з причиною <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-summary": "Скасувати останнє редагування цієї сторінки.",
+ "apihelp-rollback-extended-description": "Якщо користувач, який редагував сторінку, зробив декілька редагувань підряд, їх усі буде відкочено.",
+ "apihelp-rollback-param-title": "Назва сторінки, у якій здійснити відкіт. Не може використовуватись разом з <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "Ідентифікатор сторінки у якій здійснити відкіт. Не може використовуватись разом з <var>$1title</var>.",
+ "apihelp-rollback-param-tags": "Теги, які будуть застосовані до відкоту.",
+ "apihelp-rollback-param-user": "Ім'я користувача чиї редагування слід відкотити.",
+ "apihelp-rollback-param-summary": "Нестандартний опис редагування. Якщо порожній, буде використано опис редагування за замовчуванням.",
+ "apihelp-rollback-param-markbot": "Позначити відкинуті редагування та відкіт як редагування бота.",
+ "apihelp-rollback-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+ "apihelp-rollback-example-simple": "Відкинути останні редагування сторінки <kbd>Main Page</kbd> здійснені користувачем <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Відкинути останні редагування сторінки <kbd>Main Page</kbd> здійснені IP-користувачем <kbd>192.0.2.5</kbd> з причиною <kbd>Reverting vandalism</kbd>, та позначити ці редагування та відкіт як редагування бота.",
+ "apihelp-rsd-summary": "Експортувати як схему RSD (Really Simple Discovery).",
+ "apihelp-rsd-example-simple": "Експортувати RSD-схему.",
+ "apihelp-setnotificationtimestamp-summary": "Оновити часову мітку сповіщень для сторінок, що спостерігаються.",
+ "apihelp-setnotificationtimestamp-extended-description": "Це зачепить підсвічування змінених сторінок у списку спостереження та історії, а також надсилання електронного листа якщо опція налаштувань «{{int:tog-enotifwatchlistpages}}» увімкнена.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Опрацювати всі сторінки, що спостерігаються.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Часова мітка, яку вказати у якості часової мітки сповіщень.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Версія до якої вказати часову мітку сповіщень (лише одна сторінка).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Версія, до новішої від якої вказати часову мітку сповіщень (лише одна сторінка).",
+ "apihelp-setnotificationtimestamp-example-all": "Стерти статус сповіщень для всього списку спостереження.",
+ "apihelp-setnotificationtimestamp-example-page": "Стерти статус сповіщень для <kbd>Main page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Встановити часову мітку сповіщень для <kbd>Main page</kbd> так, що всі редагування після 1 січня 2012 будуть виглядати як не переглянуті.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Стерти статус сповіщень для сторінок у просторі назв <kbd>{{ns:user}}</kbd>.",
+ "apihelp-setpagelanguage-summary": "Змінити мову сторінки.",
+ "apihelp-setpagelanguage-extended-description-disabled": "Зміна мови сторінки заборонена в цій вікі. \n\nУвімкніть <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>, щоб використовувати цю дію.",
+ "apihelp-setpagelanguage-param-title": "Назва сторінки, мову якої Ви хочете змінити. Не можна використовувати разом з <var>$1pageid</var>.",
+ "apihelp-setpagelanguage-param-pageid": "Ідентифікатор сторінки, мову якої Ви хочете змінити. Не можна використовувати разом з <var>$1title</var>.",
+ "apihelp-setpagelanguage-param-lang": "Код мови, якою треба замінити поточну мову сторінки. Використовуйте <kbd>default</kbd>, щоб встановити стандартну мову вмісту цієї вікі як мову сторінки.",
+ "apihelp-setpagelanguage-param-reason": "Причина зміни.",
+ "apihelp-setpagelanguage-param-tags": "Змінити теги для застосування до запису в журналі, який буде результатом цієї дії.",
+ "apihelp-setpagelanguage-example-language": "Змінити мову сторінки <kbd>Main Page</kbd> на «баскська».",
+ "apihelp-setpagelanguage-example-default": "Змінити мову сторінки з ідентифікатором 123 на стандартну мову вмісту вікі.",
+ "apihelp-stashedit-summary": "Підготувати редагування в загальний кеш.",
+ "apihelp-stashedit-extended-description": "Це призначено для використання через AJAX з форми редагування, щоб поліпшити продуктивність збереження сторінки.",
+ "apihelp-stashedit-param-title": "Назва редагованої сторінки.",
+ "apihelp-stashedit-param-section": "Номер розділу. <kbd>0</kbd> для вступного розділу, <kbd>new</kbd> для нового розділу.",
+ "apihelp-stashedit-param-sectiontitle": "Назва нового розділу.",
+ "apihelp-stashedit-param-text": "Вміст сторінки.",
+ "apihelp-stashedit-param-stashedtexthash": "Хеш вмісту сторінки з попереднього сховку, який треба використати натомість.",
+ "apihelp-stashedit-param-contentmodel": "Модель вмісту нового вмісту.",
+ "apihelp-stashedit-param-contentformat": "Формат серіалізації вмісту, використовуваний для введеного тексту.",
+ "apihelp-stashedit-param-baserevid": "Ідентифікатор базової версії.",
+ "apihelp-stashedit-param-summary": "Змінити опис.",
+ "apihelp-tag-summary": "Додати або вилучити зміни міток з окремих версій або записів журналу.",
+ "apihelp-tag-param-rcid": "Один або більше ідентифікаторів останніх змін, до яких додати або вилучити мітки.",
+ "apihelp-tag-param-revid": "Один або більше ідентифікатор з якого додати або вилучити мітку.",
+ "apihelp-tag-param-logid": "Один або більше ідентифікатор запису журналу з якого вилучити або додати мітку.",
+ "apihelp-tag-param-add": "Мітки, які слід додати. Лише визначені вручну мітки може бути додано.",
+ "apihelp-tag-param-remove": "Мітки, які слід вилучити. Лише мітки, які було визначено вручну, або взагалі не визначено, можуть бути вилучені.",
+ "apihelp-tag-param-reason": "Причина зміни.",
+ "apihelp-tag-param-tags": "Теги для застосування до запису в журналі, що буде створений в результаті цієї дії.",
+ "apihelp-tag-example-rev": "Додати мітку <kbd>vandalism</kbd> до версії з ідентифікатором 123 без вказання причини",
+ "apihelp-tag-example-log": "Вилучити мітку <kbd>spam</kbd> з запису журналу з ідентифікатором 123 з причиною <kbd>Wrongly applied</kbd>",
+ "apihelp-tokens-summary": "Отримати жетони для дій пов'язаних зі зміною даних.",
+ "apihelp-tokens-extended-description": "Цей модуль застарів на користь [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Які типи жетонів запитати.",
+ "apihelp-tokens-example-edit": "Отримати токен редагування (за замовчуванням).",
+ "apihelp-tokens-example-emailmove": "Отримати токен електронної пошти та токен перейменування.",
+ "apihelp-unblock-summary": "Розблокувати користувача.",
+ "apihelp-unblock-param-id": "Ідентифікатор блоку чи розблокування (отриманий через <kbd>list=blocks</kbd>). Не може бути використано разом із <var>$1user</var> або <var>$1userid</var>.",
+ "apihelp-unblock-param-user": "Ім'я користувача, IP-адреса чи IP-діапазон до розблокування. Не може бути використано разом із <var>$1id</var> або <var>$1userid</var>.",
+ "apihelp-unblock-param-userid": "Ідентифікатор користувача до розблокування. Не може бути використано разом із <var>$1id</var> або <var>$1user</var>.",
+ "apihelp-unblock-param-reason": "Причина розблокування.",
+ "apihelp-unblock-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі блокувань.",
+ "apihelp-unblock-example-id": "Зняти блокування з ідентифікатором #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Розблокувати користувача <kbd>Bob</kbd> з причиною <kbd>Sorry Bob</kbd>.",
+ "apihelp-undelete-summary": "Відновити версії вилученої сторінки.",
+ "apihelp-undelete-extended-description": "Список вилучених версій (включено з часовими мітками) може бути отримано через [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], а список ідентифікаторів вилучених файлів може бути отримано через [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Назва сторінки, яку слід відновити.",
+ "apihelp-undelete-param-reason": "Причина відновлення.",
+ "apihelp-undelete-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі вилучень.",
+ "apihelp-undelete-param-timestamps": "Часові мітки версій, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
+ "apihelp-undelete-param-fileids": "Ідентифікатори версій файлів, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
+ "apihelp-undelete-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+ "apihelp-undelete-example-page": "Відновити сторінку <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Відновити дві версії сторінки <kbd>Main Page</kbd>.",
+ "apihelp-unlinkaccount-summary": "Вилучити пов'язаний обліковий запис третьої сторони з поточного користувача.",
+ "apihelp-unlinkaccount-example-simple": "Здійснити спробу вилучити посилання поточного користувача для провайдера, асоційованого з <kbd>FooAuthenticationRequest</kbd>.",
+ "apihelp-upload-summary": "Завантажити файл, або отримати статус завантажень у процесі.",
+ "apihelp-upload-extended-description": "Доступні декілька методів:\n* Завантажити вміст файлу напряму, використовуючи параметр <var>$1file</var>.\n* Завантажити файл шматками, використовуючи параметри <var>$1filesize</var>, <var>$1chunk</var>, та <var>$1offset</var>.\n* Змусити сервер Медіавікі отримати файл за URL, використовуючи параметр <var>$1url</var>.\n* Завершити раніше розпочате завантаження, яке не вдалось через попередження, використовуючи параметр <var>$1filekey</var>.\nЗауважте, що HTTP POST повинен бути здійснений як завантаження файлу (наприклад, використовуючи <code>multipart/form-data</code>)",
+ "apihelp-upload-param-filename": "Цільова назва файлу.",
+ "apihelp-upload-param-comment": "Коментар завантаження. Також використовується як початковий текст сторінок для нових файлів, якщо <var>$1text</var> не вказано.",
+ "apihelp-upload-param-tags": "Змінити теги, які будуть застосовані до запису журналу завантажень та відповідної версії в історії редагувань сторінки файлу.",
+ "apihelp-upload-param-text": "Початковий текст сторінок для нових файлів.",
+ "apihelp-upload-param-watch": "Спостерігати за сторінкою.",
+ "apihelp-upload-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+ "apihelp-upload-param-ignorewarnings": "Ігнорувати всі попередження.",
+ "apihelp-upload-param-file": "Вміст файлу.",
+ "apihelp-upload-param-url": "URL з якого отримати файл.",
+ "apihelp-upload-param-filekey": "Ключ, що ідентифікує попереднє завантаження яке було відкладено тимчасово",
+ "apihelp-upload-param-sessionkey": "Те ж саме, що $1filekey, підтримується для зворотної сумісності.",
+ "apihelp-upload-param-stash": "Якщо вказано, сервер тимчасово відкладе файл замість додати його до репозиторію.",
+ "apihelp-upload-param-filesize": "Розмір файлу цілого завантаження.",
+ "apihelp-upload-param-offset": "Зміщення шматка в байтах.",
+ "apihelp-upload-param-chunk": "Шматок вмісту.",
+ "apihelp-upload-param-async": "Зробити операції з потенційно великими файлами асинхронними коли можливо.",
+ "apihelp-upload-param-checkstatus": "Отримувати статус завантаження лише для даного ключа файлу.",
+ "apihelp-upload-example-url": "Завантаження з URL.",
+ "apihelp-upload-example-filekey": "Завершити завантаження, що не вдалось через попередження.",
+ "apihelp-userrights-summary": "Змінити членство користувача у групах.",
+ "apihelp-userrights-param-user": "Ім'я користувача.",
+ "apihelp-userrights-param-userid": "Ідентифікатор користувача.",
+ "apihelp-userrights-param-add": "Додати користувача до цих груп. Якщо він вже є членом групи, оновити термін дії членства.",
+ "apihelp-userrights-param-expiry": "Часові мітки, коли завершується членство. Можуть бути відносними (наприклад, <kbd>5 months</kbd> або <kbd>2 weeks</kbd>) або абсолютними (як <kbd>2014-09-18T12:34:56Z</kbd>). Якщо задано тільки оду часову мітку, вона буде стосуватися всіх груп, переданих параметром <var>$1add</var>. Використовуйте <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> або <kbd>never</kbd>, щоб задати безстрокове членство.",
+ "apihelp-userrights-param-remove": "Вилучити користувача із цих груп.",
+ "apihelp-userrights-param-reason": "Причина зміни.",
+ "apihelp-userrights-param-tags": "Змінити теги для застосування до запису в журналі зміни прав користувача.",
+ "apihelp-userrights-example-user": "Додати користувача <kbd>FooBot</kbd> до групи <kbd>bot</kbd> та вилучити із груп <kbd>sysop</kbd> та <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Додати користувача з ідентифікатором <kbd>123</kbd> до групи <kbd>bot</kbd> та вилучити із груп <kbd>sysop</kbd> та <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-expiry": "Додати користувача <kbd>SometimeSysop</kbd> в групу <kbd>sysop</kbd> на 1 місяць.",
+ "apihelp-validatepassword-summary": "Перевірити пароль на предмет відповідності політикам вікі щодо паролів.",
+ "apihelp-validatepassword-extended-description": "Результати перевірки вказуються як <samp>Good</samp> якщо пароль прийнятний, <samp>Change</samp> якщо пароль може використовуватись для входу, але його треба змінити, і <samp>Invalid</samp> — якщо пароль використовувати не можна.",
+ "apihelp-validatepassword-param-password": "Пароль до перевірки.",
+ "apihelp-validatepassword-param-user": "Ім'я користувача, для використання при тестуванні створення облікового запису. Вказаний користувач не повинен існувати.",
+ "apihelp-validatepassword-param-email": "Адреса електронної пошти, для використання при тестуванні створення облікового запису.",
+ "apihelp-validatepassword-param-realname": "Справжнє ім'я, для використання при тестуванні створення облікового запису.",
+ "apihelp-validatepassword-example-1": "Перевірити пароль <kbd>foobar</kbd> для поточного користувача.",
+ "apihelp-validatepassword-example-2": "Перевірити пароль <kbd>qwerty</kbd> для створення користувача <kbd>Example</kbd>.",
+ "apihelp-watch-summary": "Додати або вилучити сторінки з списку спостереження поточного користувача.",
+ "apihelp-watch-param-title": "Сторінки до додання/вилучення. Використовуйте <var>$1titles</var> натомість.",
+ "apihelp-watch-param-unwatch": "Якщо вказано, сторінку буде вилучено зі списку спостереження замість додання до нього.",
+ "apihelp-watch-example-watch": "Спостерігати за сторінкою <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Вилучити сторінку <kbd>Головна сторінка</kbd> зі списку спостереження.",
+ "apihelp-watch-example-generator": "Додати перші декілька сторінок основного простору назв до списку спостереження.",
+ "apihelp-format-example-generic": "Повернути результат запиту у форматі $1.",
+ "apihelp-format-param-wrappedhtml": "Повернути візуально пристосований HTML та пов'язані модулі ResourceLoader як об'єкт JSON.",
+ "apihelp-json-summary": "Вивести дані у форматі JSON.",
+ "apihelp-json-param-callback": "Якщо вказано, огортає вивід викликом даної функції. З міркувань безпеки, усі специфічні до користувача дані буде утримано.",
+ "apihelp-json-param-utf8": "Якщо вказано, кодує більшість (але не всі) не-ASCII символів як UTF-8, замість заміни їх шістнадцятковими екрануючими послідовностями. За замовчуванням коли <var>formatversion</var> не є <kbd>1</kbd>.",
+ "apihelp-json-param-ascii": "Якщо вказано, кодує всі не-ASCII використовуючи шістнадцяткові екрануючі послідовності. За замовчуванням коли <var>formatversion</var> є <kbd>1</kbd>.",
+ "apihelp-json-param-formatversion": "Форматування виводу:\n;1:Формат зворотної сумісності (булеви XML-стилю, <samp>*</samp> ключі для вузлів вмісту тощо).\n;2:Експериментальний сучасний формат. Деталі можуть змінюватись.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+ "apihelp-jsonfm-summary": "Вивести дані у форматі JSON (вивід відформатованого коду за допомогою HTML).",
+ "apihelp-none-summary": "Нічого не виводити.",
+ "apihelp-php-summary": "Виводити дані у форматі серіалізованого PHP.",
+ "apihelp-php-param-formatversion": "Форматування виводу:\n;1:Формат зворотної сумісності (булеви XML-стилю, <samp>*</samp> ключі для вузлів вмісту тощо).\n;2:Експериментальний сучасний формат. Деталі можуть змінюватись.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+ "apihelp-phpfm-summary": "Виводити дані у форматі серіалізованого PHP (вивід відформатованого коду за допомогою HTML).",
+ "apihelp-rawfm-summary": "Виводити дані, включно з елементами налагодження, у форматі JSON (вивід відформатованого коду за допомогою HTML).",
+ "apihelp-xml-summary": "Виводити дані у форматі XML.",
+ "apihelp-xml-param-xslt": "Якщо вказано, додає названу сторінку як таблицю стилів XSL. Це значення повинне бути назвою у просторі назв {{ns:MediaWiki}}, що закінчується на <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Якщо вказано, додає простір назв XML.",
+ "apihelp-xmlfm-summary": "Вивести дані у форматі XML (вивід відформатованого коду за допомогою HTML).",
+ "api-format-title": "Результат запиту до API MediaWiki",
+ "api-format-prettyprint-header": "Це HTML-представлення формату $1. HTML є гарним для налагодження, однак не придатний для прикладного використання.\n\nУкажіть значення для параметра <var>format</var>, для того щоб змінити формат. Для перегляду не-HTML-представлення формату, $1, вкажіть <kbd>format=$2</kbd>.\n\nДив. [[mw:Special:MyLanguage/API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+ "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:Special:MyLanguage/API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+ "api-format-prettyprint-header-hyperlinked": "Це — HTML-репрезентація формату $1. HTML добрий для виправлення помилок, але непридатний для використання додатків.\n\nВкажіть параметр <var>format</var>, щоб змінити формат виводу. Щоб побачити репрезентацію формату $1 не у формі HTML, вкажіть [$3 <kbd>format=$2</kbd>].\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку API]], щоб дізнатися більше.",
+ "api-format-prettyprint-status": "Відповідь повернеться із HTTP-статусом $1 $2.",
+ "api-login-fail-aborted": "Автентифікація вимагає взаємодії з користувачем, яка не підтримується <kbd>action=login</kbd>. Щоб мати змогу увійти в систему за допомогою <kbd>action=login</kbd>, див. [[Special:BotPasswords]]. Щоб продовжити використовувати вхід у систему через основний обліковий запис, див.<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-aborted-nobotpw": "Автентифікація вимагає взаємодії з користувачем, яка не підтримується <kbd>action=login</kbd>. Щоб увійти в систему, див. <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+ "api-login-fail-badsessionprovider": "Неможливо увійти в систему при використанні $1.",
+ "api-login-fail-sameorigin": "Неможливо увійти в систему, коли не застосовується ''політика того ж походження''.",
+ "api-pageset-param-titles": "Список назв над якими працювати.",
+ "api-pageset-param-pageids": "Список ідентифікаторів сторінок над якими працювати.",
+ "api-pageset-param-revids": "Список ідентифікаторів версій над якими працювати.",
+ "api-pageset-param-generator": "Отримати список сторінок над якими працювати шляхом виконання вказаного модуля запиту.\n\n<strong>Примітка:</strong> Назви параметрів генератора повинні мати префікс «g», див. приклади.",
+ "api-pageset-param-redirects-generator": "Автоматично вирішувати перенаправлення у <var>$1titles</var>, <var>$1pageids</var>, і <var>$1revids</var>, та у сторінках, повернених <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Автоматично вирішувати перенаправлення у <var>$1titles</var>, <var>$1pageids</var>, та <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Конвертувати назви в інші варіанти за необхідності. Працює лише для вікі, мова вмісту яких підтримує конвертування варіантів. Мовами, що підтримують конвертування варіантів є $1.",
+ "api-help-title": "Довідка API MediaWiki",
+ "api-help-lead": "Це автоматично генерована сторінка документації API MediaWiki.\n\nДокументація та приклади: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Головний модуль",
+ "api-help-undocumented-module": "Для модуля $1 відсутня документація.",
+ "api-help-flag-deprecated": "Цей модуль є застарілим.",
+ "api-help-flag-internal": "<strong>Цей модуль є внутрішнім або нестабільним.</strong> Його робота може бути змінена без сповіщення.",
+ "api-help-flag-readrights": "Цей модуль вимагає прав на читання.",
+ "api-help-flag-writerights": "Цей модуль вимагає прав на запис.",
+ "api-help-flag-mustbeposted": "Цей модуль приймає лише POST-запити.",
+ "api-help-flag-generator": "Цей модуль може бути використаний як генератор.",
+ "api-help-source": "Джерело: $1",
+ "api-help-source-unknown": "Джерело: <span class=\"apihelp-unknown\">невідоме</span>",
+ "api-help-license": "Ліцензія: [[$1|$2]]",
+ "api-help-license-noname": "Ліцензія: [[$1|див. посилання]]",
+ "api-help-license-unknown": "Ліцензія: <span class=\"apihelp-unknown\">невідома</span>",
+ "api-help-parameters": "{{PLURAL:$1|Параметр|Параметри}}:",
+ "api-help-param-deprecated": "Застарілий.",
+ "api-help-param-required": "Цей параметр є обов'язковим.",
+ "api-help-datatypes-header": "Типи даних",
+ "api-help-datatypes": "Вхідні дані у MediaWiki мають бути в NFC-нормалізованому UTF-8. MediaWiki може спробувати конвертувати вхідні дані іншого вигляду, але від цього можуть постраждати деякі операції (як [[Special:ApiHelp/edit|редагування]] з перевіркою MD5).\n\nДеякі типи параметрів у запитах API потребують ширшого пояснення:\n;boolean\n:Логічні параметри працюють як галочки HTML: якщо параметр вказано, не залежно від значення, він вважається істинним. Щоб значення було хибним, пропустіть параметр зовсім.\n;timestamp\n:Часові мітки можуть бути вказані у кількох форматах. Рекомендується час і дата в ISO 8601. Усі значення часу в UTC, будь-які часові пояси ігноруються.\n:* Дата і час ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (пунктуація і <kbd>Z</kbd> необов'язокві)\n:* Дата і час ISO 8601 з (ігнорованими) частками секунди, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (дефіси, двокрапки та <kbd>Z</kbd> необов'язкові)\n:* Формат MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Загальний числовий формат, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (необов'язковий часовий пояс <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> або <kbd>-<var>##</var></kbd> ігнорується)\n:* Формат EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 2822 (часовий пояс може бути опущений), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 850 (часовий пояс може бути опущений), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Секунди від 1970-01-01T00:00:00Z у вигляді цілого числа від 1 до 13 цифр (без <kbd>0</kbd>)\n:* Рядок <kbd>now</kbd>\n;альтернативний роздільник багатьох значень\n:Параметри, що приймають багато значень, зазвичай подаються зі значеннями, розділеними вертикальною рискою, наприклад, <kbd>param=value1|value2</kbd> або <kbd>param=value1%7Cvalue2</kbd>. Якщо значення повинне містити вертикальну риску, використовуйте як роздільник U+001F (роздільник одиниць) ''та'' поставте U+001F перед значенням, наприклад, <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+ "api-help-param-type-limit": "Тип: ціле число або <kbd>max</kbd>",
+ "api-help-param-type-integer": "Тип: {{PLURAL:$1|1=ціле число|2=список цілих чисел}}",
+ "api-help-param-type-boolean": "Тип: логічний ([[Special:ApiHelp/main#main/datatypes|деталі]])",
+ "api-help-param-type-timestamp": "Тип: {{PLURAL:$1|1=часова мітка|2=список часових міток}} ([[Special:ApiHelp/main#main/datatypes|дозволені формати]])",
+ "api-help-param-type-user": "Тип: {{PLURAL:$1|1=ім'я користувача|2=список імен користувачів}}",
+ "api-help-param-list": "{{PLURAL:$1|1=Одне з наступних значень|2=Значення (розділені через <kbd>{{!}}</kbd> або [[Special:ApiHelp/main#main/datatypes|альтернативу]])}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Повинно бути пустим|Може бути пустим або $2}}",
+ "api-help-param-limit": "Дозволено не більше $1.",
+ "api-help-param-limit2": "Дозволено не більше $1 ($2 для ботів).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} не менше $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} не більше $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} між $2 і $3.",
+ "api-help-param-upload": "Повинно бути надіслано у формі надсилання файлу використовуючи multipart/form-data.",
+ "api-help-param-multi-separate": "Розділіть значення з допомогою <kbd>|</kbd> або [[Special:ApiHelp/main#main/datatypes|альтернативу]].",
+ "api-help-param-multi-max": "Максимальна кількість значень — {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} для ботів).",
+ "api-help-param-multi-max-simple": "Максимальна кількість значень становить {{PLURAL:$1|$1}}.",
+ "api-help-param-multi-all": "Щоб зазначити всі значення, використовуйте <kbd>$1</kbd>.",
+ "api-help-param-default": "За замовчуванням: $1",
+ "api-help-param-default-empty": "За замовчуванням: <span class=\"apihelp-empty\">(пусто)</span>",
+ "api-help-param-token": "Токен «$1» отримано з [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Для сумісності, приймається також токен, використаний у користувацькому веб-інтерфейсі.",
+ "api-help-param-disabled-in-miser-mode": "Вимкнено через [[mw:Special:MyLanguage/Manual:$wgMiserMode|скупий режим]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Примітка:</strong> через [[mw:Special:MyLanguage/Manual:$wgMiserMode|«скупий режим»]], використання цього може вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
+ "api-help-param-direction": "У якому напрямку перелічувати:\n;newer:Спочатку найстарші. Примітка: $1start має бути перед $1end.\n;older:Спочатку найновіші (за замовчуванням). Примітка: $1start має бути перед $1end.",
+ "api-help-param-continue": "Коли доступно більше результатів, використовуйте це, щоб продовжити.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(без опису)</span>",
+ "api-help-examples": "{{PLURAL:$1|Приклад|Приклади}}:",
+ "api-help-permissions": "{{PLURAL:$1|Дозвіл|Дозволи}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Надано|Надані}}: $2",
+ "api-help-right-apihighlimits": "Використовувати вищі ліміти у запитах API (повільні запити: $1; швидкі запити: $2). Ліміти для повільних запитів також застосовуються до багатозначних параметрів.",
+ "api-help-open-in-apisandbox": "<small>[відкрити в пісочниці]</small>",
+ "api-help-authmanager-general-usage": "Загальна процедура використання цього модуля така:\n# Отримайте доступні поля зі <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> за допомогою <kbd>amirequestsfor=$4</kbd>, а також токен <kbd>$5</kbd> зі <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Передайте ці поля користувачеві, і отримайте інформацію, якою він їх заповнить.\n# Напишіть до цього модуля, заповнивши <var>$1returnurl</var> та всі релевантні поля.\n# Перевірте <samp>status</samp> у відповіді.\n#* Якщо Ви отримали <samp>PASS</samp> або <samp>FAIL</samp>, роботу завершено. Операція або була успішною, або провалилася.\n#* Якщо Ви отримали <samp>UI</samp>, надішліть нові поля користувачеві й отримайте інформацію, якою він їх заповнить. Далі напишіть до цього модуля із <var>$1continue</var> та заповніть всі реелевантні поля, після чого повторіть крок 4.\n#* Якщо Ви отримали <samp>REDIRECT</samp>, направте користувача до <samp>redirecttarget</samp> і дочекайтеся повернення до <var>$1returnurl</var>. Тоді напишіть до цього модуля із <var>$1continue</var>, та з усіма полями, що були передані до повернутої URL-адреси, після чого повторіть крок 4.\n#* Якщо Ви отримали <samp>RESTART</samp>, це означає, що автентифікація спрацювала, але ми не маємо пов'язаного облікового запису користувача. Ви можете розцінити це як <samp>UI</samp>, або як <samp>FAIL</samp>.",
+ "api-help-authmanagerhelper-requests": "Використовувати ці автентифікаційні запити через <samp>id</samp>, що повертається з <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> за допомогою <kbd>amirequestsfor=$1</kbd>, або з попередньої відповіді з цього модуля.",
+ "api-help-authmanagerhelper-request": "Використовувати цей автентифікаційний запит через <samp>id</samp>, що повертається з <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> за допомогою <kbd>amirequestsfor=$1</kbd>.",
+ "api-help-authmanagerhelper-messageformat": "Формат до використання для повернення повідомлень.",
+ "api-help-authmanagerhelper-mergerequestfields": "Об'єднати інформацію всіх автентифікаційних запитів у один масив.",
+ "api-help-authmanagerhelper-preservestate": "Зберегти статус з попередньої спроби входу, що не вдалась, якщо можливо.",
+ "api-help-authmanagerhelper-returnurl": "URL-адреса повернення для сторонніх автентифікаційних потоків повинна бути абсолютною. Обов'язковим є це, або <var>$1continue</var>. \n\nПри отриманні відповіді <samp>REDIRECT</samp>, найбільш звичною Вашою дією буде відкриття браузерного чи іншого веб-перегляду вказаного URL-посилання для стороннього потоку автентифікації. Коли ця операція буде завершена, стороння програма перенаправить веб-переглядач на цю URL-адресу. Ви повинні видобувати будь-які параметри запитів або POST-параметри із цієї URL-адреси, і передавати їх як запит <var>$1continue</var> до цього модуля API.",
+ "api-help-authmanagerhelper-continue": "Цей запит є продовженням після попередньої відповіді <samp>UI</samp> або <samp>REDIRECT</samp>. Або це, або <var>$1returnurl</var> є обов'язковим.",
+ "api-help-authmanagerhelper-additional-params": "Цей модуль приймає додаткові параметри, залежно від доступних автентифікаційних запитів. Використовуйте <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> за допомогою <kbd>amirequestsfor=$1</kbd> (або попередню відповідь від цього модуля, якщо це застосовно), аби визначити доступні запити та поля, які вони використовують.",
+ "apierror-allimages-redirect": "Використовуйте <kbd>gaifilterredir=nonredirects</kbd> замість <var>redirects</var> при використанні <kbd>allimages</kbd> як генератора.",
+ "apierror-allpages-generator-redirects": "Використовуйте <kbd>gapfilterredir=nonredirects</kbd> замість <var>redirects</var> при використанні <kbd>allpages</kbd> як генератора.",
+ "apierror-appendnotsupported": "Не вдається додавати до сторінок, що використовують контентну модель $1.",
+ "apierror-articleexists": "Статтю, яку Ви намагались створити, вже було створено.",
+ "apierror-assertbotfailed": "Твердження, що користувач має право <code>bot</code>, виявилося хибним.",
+ "apierror-assertnameduserfailed": "Твердження, що ім'я користувача — «$1», виявилося хибним.",
+ "apierror-assertuserfailed": "Твердження, що користувач перебуває в системі, виявилося хибним.",
+ "apierror-autoblocked": "Вашу IP-адресу було автоматично заблоковано, оскільки її використовував заблокований користувач.",
+ "apierror-badconfig-resulttoosmall": "Значення <code>$wgAPIMaxResultSize</code> у цій вікі є надто малим, щоб містити базову інформацію щодо результатів.",
+ "apierror-badcontinue": "Параметр продовження недійсний. Вам треба вказати початкове значення, отримане з попереднього запиту.",
+ "apierror-baddiff": "Цю різницю версій неможливо відтворити: одна або й обидві версії не існують, або Ви не маєте прав на їх перегляд.",
+ "apierror-baddiffto": "Для <var>$1diffto</var> треба задати невід'ємне число,<kbd>prev</kbd>, <kbd>next</kbd> або <kbd>cur</kbd>.",
+ "apierror-badformat-generic": "Запитуваний формат $1 не підтримується контентною моделлю$2.",
+ "apierror-badformat": "Запитуваний формат $1 не підтримується контентною моделлю $2, що використовується $3.",
+ "apierror-badgenerator-notgenerator": "Модуль <kbd>$1</kbd> не може бути використаний як генератор.",
+ "apierror-badgenerator-unknown": "Невідомий <kbd>generator=$1</kbd>.",
+ "apierror-badip": "Параметр IP є недійсним.",
+ "apierror-badmd5": "Вказаний хеш MD5 був неправильним.",
+ "apierror-badmodule-badsubmodule": "Модуль <kbd>$1</kbd> не має підмодуля «$2».",
+ "apierror-badmodule-nosubmodules": "Модуль <kbd>$1</kbd> не має підмодулів.",
+ "apierror-badparameter": "Недійсне значення для параметра <var>$1</var>.",
+ "apierror-badquery": "Неприпустимий запит.",
+ "apierror-badtimestamp": "Недійсне значення «$2» для параметра мітки часу <var>$1</var>.",
+ "apierror-badtoken": "Недійсний токен CSRF.",
+ "apierror-badupload": "Параметр завантаження файлу <var>$1</var> не є завантаженням файлу; не забудьте використати <code>multipart/form-data</code> для Вашого POST і додайте назву файлу в шапку <code>Content-Disposition</code>.",
+ "apierror-badurl": "Недійсне значення «$2» для URL-параметра <var>$1</var>.",
+ "apierror-baduser": "Недійсне значення «$2» для параметра користувача <var>$1</var>.",
+ "apierror-badvalue-notmultivalue": "Відокремлення значень через U+001F може використовуватись лише в тих параметрах, де використання двох і більше значень є прийнятним.",
+ "apierror-bad-watchlist-token": "Надано некоректний токен списку спостереження. Будь ласка, подайте коректний токен на сторінці [[Special:Preferences|Спеціальна:Налаштування]].",
+ "apierror-blockedfrommail": "Вам заблоковано можливість надсилання електронної пошти.",
+ "apierror-blocked": "Вам заблоковано можливість редагування.",
+ "apierror-botsnotsupported": "Інтерфейс не підтримується для ботів.",
+ "apierror-cannot-async-upload-file": "Параметри <var>async</var> та <var>file</var> не можна поєднувати. Якщо Ви хочете, щоб завантажений Вами файл був опрацьований асинхронно, спершу завантажте його у сховок (використавши параметр <var>stash</var>), а тоді опублікуйте цей підготовлений файл (використавши <var>filekey</var> та <var>async</var>).",
+ "apierror-cannotreauthenticate": "Ця діє недоступна, оскільки Вашу ідентичність неможливо перевірити.",
+ "apierror-cannotviewtitle": "Ви не маєте дозволу на перегляд $1.",
+ "apierror-cantblock-email": "Ви не маєте прав на блокування користувачам можливості надсилання електронної пошти через вікі.",
+ "apierror-cantblock": "Ви не маєте прав на блокування користувачів.",
+ "apierror-cantchangecontentmodel": "Ви не маєте прав на зміну контентної моделі сторінки.",
+ "apierror-canthide": "Ви не маєте прав на приховування імен користувачів у журналі блокувань.",
+ "apierror-cantimport-upload": "Ви не маєте прав на імпорт завантажених сторінок.",
+ "apierror-cantimport": "Ви не маєте прав на імпорт сторінок.",
+ "apierror-cantoverwrite-sharedfile": "Цільовий файл існує в загальному репозиторії, і Ви не маєте прав, щоб проігнорувати це.",
+ "apierror-cantsend": "Ви не увійшли в систему, не маєте підтвердженої електронної адреси, або не маєте дозволу на надсилання електронної пошти іншим користувачам, тож Ви не можете надсилати електронну пошту.",
+ "apierror-cantundelete": "Не вдалося відновити: запитувані версії або не існують, або їх вже було відновлено.",
+ "apierror-changeauth-norequest": "Не вдалося створити запит на зміну.",
+ "apierror-chunk-too-small": "Мінімальний розмір шматка становить $1 {{PLURAL:$1|байт|байти|байтів}} для некінцевих шматків.",
+ "apierror-cidrtoobroad": "$1 CIDR-діапазони, ширші ніж /$2, недозволені.",
+ "apierror-compare-no-title": "Неможливо попередньо зберегти трансформацію без назви. Спробуйте зазначити <var>fromtitle</var> або <var>totitle</var>.",
+ "apierror-compare-relative-to-nothing": "Відсутня версія 'from', якої б стосувалося <var>torelative</var>.",
+ "apierror-contentserializationexception": "Невдача серіалізації вмісту: $1",
+ "apierror-contenttoobig": "Наданий Вами вміст перевищує ліміт у $1 {{PLURAL:$1|кілобайт|кілобайти|кілобайтів}} розміру сторінки.",
+ "apierror-copyuploadbaddomain": "Завантаження за URL-адресою недозволені з цього домену.",
+ "apierror-copyuploadbadurl": "Завантаження з цієї URL-адреси недозволені.",
+ "apierror-create-titleexists": "Наявні назви не можна захистити за допомогою <kbd>create</kbd>.",
+ "apierror-csp-report": "Помилка при опрацюванні CSP-звіту: $1.",
+ "apierror-databaseerror": "[$1] Помилка запиту до бази даних.",
+ "apierror-deletedrevs-param-not-1-2": "Параметр <var>$1</var> не може використовуватись у режимах 1 або 2.",
+ "apierror-deletedrevs-param-not-3": "Параметр <var>$1</var> не може використовуватись у режимі 3.",
+ "apierror-emptynewsection": "Створення нових порожніх розділів неможливе.",
+ "apierror-emptypage": "Створення нових порожніх сторінок недозволене.",
+ "apierror-exceptioncaught": "[$1] Виявлено виняток: $2",
+ "apierror-filedoesnotexist": "Файл не існує.",
+ "apierror-fileexists-sharedrepo-perm": "Цільовий файл існує у загальному репозиторії. Використовуйте параметр <var>ignorewarnings</var>, щоб проігнорувати це.",
+ "apierror-filenopath": "Не вдалося отримати шлях до локального файлу.",
+ "apierror-filetypecannotberotated": "Тип файлу не можна повернути.",
+ "apierror-formatphp": "Цю відповідь не можна представити через <kbd>format=php</kbd>. Див. https://phabricator.wikimedia.org/T68776.",
+ "apierror-imageusage-badtitle": "Назва для <kbd>$1</kbd> має бути файлом.",
+ "apierror-import-unknownerror": "Невідома помилка при імпорті: $1.",
+ "apierror-integeroutofrange-abovebotmax": "<var>$1</var> не може мати значення понад $2 (встановлено як $3) для ботів чи адмінів.",
+ "apierror-integeroutofrange-abovemax": "<var>$1</var> не може мати значення понад $2 (встановлено як $3) для користувачів.",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var> не може мати значення менш як $2 (встановлено як $3).",
+ "apierror-invalidcategory": "Введена Вами назва категорії недійсна.",
+ "apierror-invalid-chunk": "Зміщення плюс поточний шматок мають більший розмір, аніж заявлений розмір файлу.",
+ "apierror-invalidexpiry": "Недійсний час завершення «$1».",
+ "apierror-invalid-file-key": "Недійсний ключ файлу.",
+ "apierror-invalidlang": "Недійсний код мови для параметра <var>$1</var>.",
+ "apierror-invalidoldimage": "Параметр <var>oldimage</var> має недійсний формат.",
+ "apierror-invalidparammix-cannotusewith": "Параметр <kbd>$1</kbd> не можна використовувати з <kbd>$2</kbd>.",
+ "apierror-invalidparammix-mustusewith": "Параметр <kbd>$1</kbd> можна використовувати тільки з <kbd>$2</kbd>.",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> не можна поєднувати з параметрами <var>oldid</var>, <var>pageid</var> чи <var>page</var>. Будь ласка, використовуйте <var>title</var> і <var>text</var>.",
+ "apierror-invalidparammix": "{{PLURAL:$2|Ці параметри}} $1 не можна використовувати водночас.",
+ "apierror-invalidsection": "Параметр <var>section</var> має бути дійсним ідентифікатором розділу або <kbd>new</kbd>.",
+ "apierror-invalidsha1base36hash": "Поданий хеш SHA1Base36 недійсний.",
+ "apierror-invalidsha1hash": "Поданий хеш SHA1 недійсний.",
+ "apierror-invalidtitle": "Погана назва «$1».",
+ "apierror-invalidurlparam": "Недійсне значення для <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
+ "apierror-invaliduser": "Недійсне ім'я користувача «$1».",
+ "apierror-invaliduserid": "Ідентифікатор <var>$1</var> недійсний.",
+ "apierror-maxlag-generic": "Очікування на сервер бази даних: затримка $1 {{PLURAL:$1|секунда|секунди|секунд}}.",
+ "apierror-maxlag": "Очікування на $2: затримка $1 {{PLURAL:$1|секунда|секунди|секунд}}.",
+ "apierror-mimesearchdisabled": "MIME-пошук вимкнений у скупому режимі.",
+ "apierror-missingcontent-pageid": "Відсутній вміст для сторінки з ідентифікатором $1.",
+ "apierror-missingcontent-revid": "Відсутній контент для ідентифікатора версії $1.",
+ "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|Параметр|Щонайменше один параметрів}} $1 є обов'язковим.",
+ "apierror-missingparam-one-of": "{{PLURAL:$2|Параметр|Один з параметрів}} $1 є обов'язковим.",
+ "apierror-missingparam": "Параметр <var>$1</var> має бути заповнений.",
+ "apierror-missingrev-pageid": "Немає поточної версії сторінки з ідентифікатором $1.",
+ "apierror-missingrev-title": "Для назви $1 відсутня поточна версія.",
+ "apierror-missingtitle-createonly": "Відсутні назви можна захистити тільки через <kbd>create</kbd>.",
+ "apierror-missingtitle": "Вказана Вами сторінка не існує.",
+ "apierror-missingtitle-byname": "Сторінка $1 не існує.",
+ "apierror-moduledisabled": "Модуль <kbd>$1</kbd> було вимкнено.",
+ "apierror-multival-only-one-of": "{{PLURAL:$3|Лише значення|Лише одне значення з}} $2 дозволене для параметра <var>$1</var>.",
+ "apierror-multpages": "<var>$1</var> може використовуватись тільки з однією сторінкою.",
+ "apierror-mustbeloggedin-changeauth": "Вам треба увійти в систему, щоб змінити автентифікаційні дані.",
+ "apierror-mustbeloggedin-generic": "Ви повинні перебувати в системі.",
+ "apierror-mustbeloggedin-linkaccounts": "Щоб зв'язувати облікові записи Вам треба увійти в систему.",
+ "apierror-mustbeloggedin-removeauth": "Щоб вилучати автентифікаційні дані Вам треба увійти в систему.",
+ "apierror-mustbeloggedin-uploadstash": "Сховок завантажень доступний тільки для зареєстрованих користувачів.",
+ "apierror-mustbeloggedin": "Для $1 Вам треба увійти в систему.",
+ "apierror-mustbeposted": "Модуль <kbd>$1</kbd> потребує запиту POST.",
+ "apierror-mustpostparams": "{{PLURAL:$2|Вказаний параметр було знайдено в рядку запиту, але має|Вказані параметри було знайдено в рядку запиту, але мають}} бути у тілі POST: $1.",
+ "apierror-noapiwrite": "Редагування цієї вікі через API вимкнено. Упевніться, що твердження <code>$wgEnableWriteAPI=true;</code> включено у файл <code>LocalSettings.php</code> цієї вікі.",
+ "apierror-nochanges": "На жодні зміни запиту не було.",
+ "apierror-nodeleteablefile": "Немає такої старої версії файлу.",
+ "apierror-no-direct-editing": "Пряме редагування через API не підтримується контентною моделлю $1, що використовується $2.",
+ "apierror-noedit-anon": "Анонімні користувачі не можуть редагувати сторінки.",
+ "apierror-noedit": "У Вас немає прав на редагування сторінок.",
+ "apierror-noimageredirect-anon": "Анонімні користувачі не можуть створювати перенаправлення на файли.",
+ "apierror-noimageredirect": "Ви не маєте прав на створення перенаправлень на файли.",
+ "apierror-nosuchlogid": "Немає журнального запису з ідентифікатором $1.",
+ "apierror-nosuchpageid": "Немає сторінки з ідентифікатором $1.",
+ "apierror-nosuchrcid": "Немає недавньої зміни з ідентифікатором $1.",
+ "apierror-nosuchrevid": "Немає версії з ідентифікатором $1.",
+ "apierror-nosuchsection": "Немає розділу $1.",
+ "apierror-nosuchsection-what": "Немає розділу $1 на сторінці $2.",
+ "apierror-nosuchuserid": "Немає користувача з ідентифікатором $1.",
+ "apierror-notarget": "Ви не вказали дійсної цілі для цієї дії.",
+ "apierror-notpatrollable": "Версія r$1 не може бути відпатрульована, оскільки вона надто стара.",
+ "apierror-nouploadmodule": "Не встановлено модуля завантаження.",
+ "apierror-offline": "Не вдалося продовжити через проблеми з підключенням до мережі. Перевірте підключення до інтернету й спробуйте ще раз.",
+ "apierror-opensearch-json-warnings": "Попередження не можуть бути представлені у форматі OpenSearch JSON.",
+ "apierror-pagecannotexist": "Простір назв не дозволяє фактичних сторінок.",
+ "apierror-pagedeleted": "Цю сторінку було вилучено після того, як Ви отримали її мітку часу.",
+ "apierror-pagelang-disabled": "Зміна мови сторінки заборонена в цій вікі.",
+ "apierror-paramempty": "Параметр <var>$1</var> не може бути порожнім.",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> підтримується лише для вмісту у форматі вікірозмітки.",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> підтримується лише для вмісту у форматі вікірозмітки. $1 використовує контентну модель $2.",
+ "apierror-pastexpiry": "Час закінчення «$1» — в минулому.",
+ "apierror-permissiondenied": "Ви не маєте прав на $1.",
+ "apierror-permissiondenied-generic": "Доступ заборонено.",
+ "apierror-permissiondenied-patrolflag": "Вам потрібне право <code>patrol</code> або <code>patrolmarks</code>, щоб подати запит на прапорець «відпатрульовано».",
+ "apierror-permissiondenied-unblock": "Ви не маєте прав на розблокування користувачів.",
+ "apierror-prefixsearchdisabled": "Пошук за префіксом вимкнено у скупому режимі.",
+ "apierror-promised-nonwrite-api": "HTTP-заголовок <code>Promise-Non-Write-API-Action</code> не можна надсилати до модулів API із режимом запису.",
+ "apierror-protect-invalidaction": "Недійсний тип захисту «$1».",
+ "apierror-protect-invalidlevel": "Недійсний рівень захисту «$1».",
+ "apierror-ratelimited": "Ви перевищили свій ліміт частоти. Будь ласка, почекайте деякий час і спробуйте знову.",
+ "apierror-readapidenied": "Вам потрібне право на читання, щоб використовувати цей модуль.",
+ "apierror-readonly": "Ця вікі наразі перебуває в режимі тільки для читання.",
+ "apierror-reauthenticate": "Ви останнім часом не проходили автентифікацію в цій сесії. Будь ласка, пройдіть автентифікацію ще раз.",
+ "apierror-redirect-appendonly": "Ви зробили спробу редагування з використанням режиму переходу за перенаправленням, який має використовуватись разом із <kbd>section=new</kbd>, <var>prependtext</var>, або <var>appendtext</var>.",
+ "apierror-revdel-mutuallyexclusive": "Одне й те ж поле не може використовуватись у <var>hide</var> і <var>show</var> водночас.",
+ "apierror-revdel-needtarget": "Для цього типу RevDel необхідна цільова назва.",
+ "apierror-revdel-paramneeded": "Щонайменше одне значення необхідне для <var>hide</var> та/або <var>show</var>.",
+ "apierror-revisions-badid": "Для параметра <var>$1</var> не знайдено жодної версії.",
+ "apierror-revisions-norevids": "Параметр <var>revids</var> не можна використовувати з опціями списку (<var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var>, і <var>$1end</var>).",
+ "apierror-revisions-singlepage": "Було використано <var>titles</var>, <var>pageids</var> або генератор для постачання декількох сторінок, але параметри <var>$1limit</var>, <var>$1startid</var>, <var>$1endid</var>, <kbd>$1dir=newer</kbd>, <var>$1user</var>, <var>$1excludeuser</var>, <var>$1start</var>, і <var>$1end</var> можуть використовуватися тільки на одній сторінці.",
+ "apierror-revwrongpage": "r$1 не є версією сторінки $2.",
+ "apierror-searchdisabled": "<var>$1</var> пошук вимкнено.",
+ "apierror-sectionreplacefailed": "Не вдалося об'єднати оновлений розділ.",
+ "apierror-sectionsnotsupported": "Розділи не підтримуються для контентної моделі $1.",
+ "apierror-sectionsnotsupported-what": "Розділи не підтримуються $1.",
+ "apierror-show": "Неправильний параметр — не можна надавати взаємовиключні значення.",
+ "apierror-siteinfo-includealldenied": "Не можна переглядати інформацію щодо всіх серверів, якщо тільки <var>$wgShowHostNames</var> не вказано як «true».",
+ "apierror-sizediffdisabled": "Різниця у розмірах вимкнена в скупому режимі.",
+ "apierror-spamdetected": "Ваше редагування було відхилено, оскільки воно містило фрагмент спаму: <code>$1</code>.",
+ "apierror-specialpage-cantexecute": "Ви не маєте прав на перегляд результатів цієї спеціальної сторінки.",
+ "apierror-stashedfilenotfound": "Не вдалося знайти файл у сховку: $1.",
+ "apierror-stashedit-missingtext": "У сховку не знайдено збереженого тексту із заданим хешем.",
+ "apierror-stashfailed-complete": "Завантаження по шматках вже завершилося, перегляньте статус, щоб дізнатися подробиці.",
+ "apierror-stashfailed-nosession": "Немає сесії завантажень по шматках із цим ключем.",
+ "apierror-stashfilestorage": "Не вдалося зберегти завантаження у сховку: $1",
+ "apierror-stashinvalidfile": "Недійсний файл у сховку.",
+ "apierror-stashnosuchfilekey": "Немає такого filekey: $1.",
+ "apierror-stashpathinvalid": "Ключ файлу має неправильний формат або є недійсним з іншої причини: $1.",
+ "apierror-stashwrongowner": "Неправильний власник: $1",
+ "apierror-stashzerolength": "Довжина файлу дорівнює нулю, і його не можна зберегти у сховку: $1.",
+ "apierror-systemblocked": "Вас автоматично заблоковано MediaWiki.",
+ "apierror-templateexpansion-notwikitext": "Розширення шаблонів підтримується лише для вмісту у форматі вікірозмітки. $1 використовує контентну модель $2.",
+ "apierror-timeout": "Сервер не відповів протягом відведеного на це часу.",
+ "apierror-toofewexpiries": "$1 {{PLURAL:$1|мітка часу завершення була надана|мітки часу завершення були надані|міток часу завершення було надано}}, тоді як {{PLURAL:$2|потрібна була $2 така мітка|потрібні були $2 таких мітки|потрібно було $2 таких міток}}.",
+ "apierror-unknownaction": "Вказана дія, <kbd>$1</kbd>, нерозпізнана.",
+ "apierror-unknownerror-editpage": "Невідома помилка EditPage: $1.",
+ "apierror-unknownerror-nocode": "Невідома помилка.",
+ "apierror-unknownerror": "Невідома помилка: «$1».",
+ "apierror-unknownformat": "Невідомий формат «$1».",
+ "apierror-unrecognizedparams": "{{PLURAL:$2|Нерозпізнаний параметр|Нерозпізнані параметри}}: $1.",
+ "apierror-unrecognizedvalue": "Нерозпізнане значення для параметра <var>$1</var>: $2.",
+ "apierror-unsupportedrepo": "Місцевий репозиторій файлів не підтримує запитів щодо всіх зображень.",
+ "apierror-upload-filekeyneeded": "Треба вказати <var>filekey</var>, коли <var>offset</var> є ненульовим.",
+ "apierror-upload-filekeynotallowed": "Не можна вказувати <var>filekey</var>, коли <var>offset</var> дорівнює 0.",
+ "apierror-upload-inprogress": "Завантаження зі сховку вже в процесі.",
+ "apierror-upload-missingresult": "Немає результатів у даних статусу.",
+ "apierror-urlparamnormal": "Не вдалося нормалізувати параметри зображення для $1.",
+ "apierror-writeapidenied": "Ви не маєте дозволу на редагування цієї вікі через API.",
+ "apiwarn-alldeletedrevisions-performance": "Для підвищення продуктивності при генеруванні назв, встановіть <kbd>$1dir=newer</kbd>.",
+ "apiwarn-badurlparam": "Не вдалося парсити <var>$1urlparam</var> для $2. Використовується лише ширина і висота.",
+ "apiwarn-badutf8": "Значення, вказане для <var>$1</var>, містить недійсні або ненормалізовані дані. Текстові дані мають бути дійсними, NFC-нормалізований Unicode без контрольних символів C0, окрім HT (\\t), LF (\\n), і CR (\\r).",
+ "apiwarn-checktoken-percentencoding": "Перевірте, чи символи, такі як «+» у токені, пройшли правильне процентне кодування в URL.",
+ "apiwarn-compare-nocontentmodel": "Не вдалося визначити контентну модель, припускаємо $1.",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> є застарілим. Будь ласка, використовуйте замість нього <kbd>prop=deletedrevisions</kbd> або <kbd>list=alldeletedrevisions</kbd>.",
+ "apiwarn-deprecation-expandtemplates-prop": "Оскільки не задано жодних значень для параметра <var>prop</var>, як вихідні дані було використано старий формат. Цей формат є застарілим, і в майбутньому параметру <var>prop</var> буде задано стандартне значення, наслідком чого стане те, що завжди використовуватиметься новий формат.",
+ "apiwarn-deprecation-httpsexpected": "Використано HTTP, тоді як очікувалося використання HTTPS.",
+ "apiwarn-deprecation-login-botpw": "Вхід в основний обліковий запис через <kbd>action=login</kbd> є застарілим, і може припинити працювати, без попередження. Щоб продовжити вхід у систему через <kbd>action=login</kbd>, див. [[Special:BotPasswords]]. Щоб безпечно продовжити, використовуючи вхід в основний обліковий запис, див. <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-nobotpw": "Вхід в основний обліковий запис через <kbd>action=login</kbd> є застарілим, і може припинити працювати, без попередження. Щоб безпечно увійти в систему, див. <kbd>action=clientlogin</kbd>.",
+ "apiwarn-deprecation-login-token": "Отримання токена через <kbd>action=login</kbd> є застарілим. Використовуйте натомість <kbd>action=query&meta=tokens&type=login</kbd>.",
+ "apiwarn-deprecation-parameter": "Параметр <var>$1</var> — застарілий.",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> є застарілим, починаючи з MediaWiki 1.28. Використовуйте <kbd>prop=headhtml</kbd> при створенні нових документів HTML, або <kbd>prop=modules|jsconfigvars</kbd> при оновленні документа з боку клієнта.",
+ "apiwarn-deprecation-purge-get": "Використання <kbd>action=purge</kbd> через GET є застарілим. Використовуйте POST замість цього.",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> є застарілим. Будь ласка, використовуйте натомість <kbd>$2</kbd>.",
+ "apiwarn-difftohidden": "Не вдалося відкрити версію r$1: вміст приховано.",
+ "apiwarn-errorprinterfailed": "Невдача через помилку принтера. Буде здійснено повторну спробу без параметрів.",
+ "apiwarn-errorprinterfailed-ex": "Невдача через помилку принтера (буде здійснено повторну спробу без параметрів): $1",
+ "apiwarn-invalidcategory": "«$1» не є категорією.",
+ "apiwarn-invalidtitle": "«$1» не є коректною назвою.",
+ "apiwarn-invalidxmlstylesheetext": "Таблиця стилів повинна мати розширення <code>.xsl</code>.",
+ "apiwarn-invalidxmlstylesheet": "Вказана таблиця стилів є недійсною або не існує.",
+ "apiwarn-invalidxmlstylesheetns": "Таблиця стилів має перебувати в просторі назв {{ns:MediaWiki}}.",
+ "apiwarn-moduleswithoutvars": "Задано властивість <kbd>modules</kbd>, але не задано <kbd>jsconfigvars</kbd> або <kbd>encodedjsconfigvars</kbd>. Змінні конфігурації необхідні для коректного використання модуля.",
+ "apiwarn-notfile": "«$1» не є файлом.",
+ "apiwarn-nothumb-noimagehandler": "Не вдалося створити мініатюру, оскільки $1 не має пов'язаного обробника зображень.",
+ "apiwarn-parse-nocontentmodel": "Не задано <var>title</var> або <var>contentmodel</var>, буде використано $1.",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var> використано без <var>text</var>, та запитано синтаксично проаналізовані властивості сторінки. Можливо, Ви хотіли використати <var>oldid</var> замість <var>revid</var>?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var> використано без <var>text</var>, і надіслано запит на оброблені властивості сторінки. Може \nВи хотіли використати <var>page</var> замість <var>title</var>?",
+ "apiwarn-redirectsandrevids": "Вирішення перенаправлень не може використовуватись разом з параметром <var>revids</var>. Усі перенаправлення, на які вказує <var>revids</var>, не було вирішено.",
+ "apiwarn-tokennotallowed": "Дія «$1» недозволена для поточного користувача.",
+ "apiwarn-tokens-origin": "Токени не можна отримати, поки не застосована політика одного походження.",
+ "apiwarn-toomanyvalues": "Надто багато значень задано для параметра <var>$1</var>. Ліміт становить $2.",
+ "apiwarn-truncatedresult": "Цей результат було скорочено, оскільки інакше він перевищив би ліміт у $1 байтів.",
+ "apiwarn-unclearnowtimestamp": "Вказування «$2» для параметра мітки часу <var>$1</var> є застарілим. Якщо з якоїсь причини Вам треба чітко вказати поточний час без вираховування його з боку клієнта, використайте <kbd>now</kbd>.",
+ "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Нерозпізнане|Нерозпізнані}} значення для параметра <var>$1</var>: $2.",
+ "apiwarn-unsupportedarray": "Параметр <var>$1</var> використовує непідтримуваний синтаксис PHP-масиву.",
+ "apiwarn-urlparamwidth": "Ігнорування значення ширини, встановленого в <var>$1urlparam</var> ($2) на користь значення ширини, запозиченого із <var>$1urlwidth</var>/<var>$1urlheight</var> ($3).",
+ "apiwarn-validationfailed-badchars": "недійсні символи у ключі (лише <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, і <code>-</code> дозволені).",
+ "apiwarn-validationfailed-badpref": "недійсне налаштування.",
+ "apiwarn-validationfailed-cannotset": "не може бути встановлено цим модулем.",
+ "apiwarn-validationfailed-keytoolong": "ключ надто довгий (дозволено не більш як $1 байтів).",
+ "apiwarn-validationfailed": "Помилка перевірки для <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Попередження щодо безпеки</strong>: увімкнено <var>$wgDebugAPI</var>.",
+ "api-feed-error-title": "Помилка ($1)",
+ "api-usage-docref": "Див. $1 щодо використання API.",
+ "api-usage-mailinglist-ref": "Щоб взнавати про заплановані і остаточні критичні зміни API, підпишіться на розсилку mediawiki-api-announce тут: &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt;.",
+ "api-exception-trace": "$1 у $2($3)\n$4",
+ "api-credits-header": "Автор(и)",
+ "api-credits": "Розробники API:\n* Roan Kattouw (головний розробник вер. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (творець, головний розробник вер. 2006 – вер. 2007)\n* Brad Jorsch (головний розробник 2013 – тепер)\n\nБудь ласка, надсилайте свої коментарі, пропозиції та запитання на mediawiki-api@lists.wikimedia.org\nабо зафайліть звіт про баґ на https://phabricator.wikimedia.org/."
+}
diff --git a/www/wiki/includes/api/i18n/ur.json b/www/wiki/includes/api/i18n/ur.json
new file mode 100644
index 00000000..c0f1bcfa
--- /dev/null
+++ b/www/wiki/includes/api/i18n/ur.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Obaid Raza"
+ ]
+ },
+ "apihelp-delete-example-simple": "حذف <kbd>صفحۂ اول</kbd>."
+}
diff --git a/www/wiki/includes/api/i18n/vi.json b/www/wiki/includes/api/i18n/vi.json
new file mode 100644
index 00000000..c3fd889a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/vi.json
@@ -0,0 +1,225 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Max20091",
+ "Dinhxuanduyet",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-param-action": "Tác vụ để thực hiện.",
+ "apihelp-main-param-format": "Định dạng của dữ liệu được cho ra.",
+ "apihelp-main-param-uselang": "Ngôn ngữ để sử dụng cho các bản dịch thông điệp. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> với <kbd>siprop=languages</kbd> trả về một danh sách các mã ngôn ngữ, hoặc định rõ <kbd>user</kbd> để sử dụng ngôn ngữ của người dùng hiện tại, hoặc định rõ <kbd>content</kbd> để sử dụng ngôn ngữ nội dung của wiki này.",
+ "apihelp-block-summary": "Cấm người dùng.",
+ "apihelp-block-param-user": "Tên truy nhập, địa chỉ IP hoặc dãi IP mà bạn muốn chặn.",
+ "apihelp-block-param-reason": "Lý do cấm.",
+ "apihelp-block-param-nocreate": "Cấm tạo tài khoản.",
+ "apihelp-block-param-reblock": "Nếu người dùng này đã bị cấm, ghi đè lên vụ cấm đã tồn tại.",
+ "apihelp-block-param-watchuser": "Xem người dùng hoặc địa chỉ IP của người dùng và trang thảo luận.",
+ "apihelp-block-example-ip-simple": "Khóa địa chỉ IP <kbd>192.0.2.5</kbd> trong ba ngày với lý do <kbd>khiển trách lần đầu</kbd>.",
+ "apihelp-checktoken-param-type": "Kiểu dấu hiệu được kiểm thử.",
+ "apihelp-checktoken-param-token": "Dấu hiệu để kiểm thử.",
+ "apihelp-checktoken-example-simple": "Kiểm thử dấu hiệu <kbd>csrf</kbd> có hợp lệ hay không.",
+ "apihelp-clearhasmsg-summary": "Xóa cờ <code>hasmsg</code> cho người dùng hiện tại.",
+ "apihelp-clearhasmsg-example-1": "Xóa cờ <code>hasmsg</code> cho người dùng hiện tại",
+ "apihelp-compare-param-fromtitle": "So sánh tiêu đề đầu tiên.",
+ "apihelp-compare-param-fromid": "So sánh ID trang đầu tiên.",
+ "apihelp-compare-param-fromrev": "So sánh sửa đổi đầu tiên.",
+ "apihelp-compare-param-totitle": "So sánh tiêu đề thứ hai.",
+ "apihelp-compare-param-toid": "So sánh ID tran thứ hai.",
+ "apihelp-compare-param-torev": "So sánh sửa đổi thứ hai.",
+ "apihelp-compare-example-1": "Tạo một so sánh giữa phiên bản 1 và 2.",
+ "apihelp-createaccount-summary": "Mở tài khoản mới.",
+ "apihelp-createaccount-param-name": "Tên người dùng.",
+ "apihelp-createaccount-param-password": "Mật khẩu (được bỏ qua nếu <var>$1mailpassword</var> được đặt).",
+ "apihelp-createaccount-param-domain": "Tên miền để xác thực bên ngoài (tùy chọn).",
+ "apihelp-createaccount-param-token": "Dấu hiệu mở tài khoản được lấy trong yêu cầu đầu tiên.",
+ "apihelp-createaccount-param-email": "Địa chỉ thư điện tử của thành viên (tùy chọn).",
+ "apihelp-createaccount-param-realname": "Tên thật của thành viên (tùy chọn).",
+ "apihelp-createaccount-param-mailpassword": "Nếu đặt bất kỳ giá trị nào, một mật khẩu ngẫu nhiên sẽ được gửi lại cho người dùng qua thư điện tử.",
+ "apihelp-createaccount-param-reason": "Lý do tùy chọn cho việc tạo tài khoản để đăng nhập.",
+ "apihelp-createaccount-param-language": "Mã ngôn ngữ để thiết lập mặc định cho người dùng (tùy chọn, mặc định là ngôn ngữ nội dung).",
+ "apihelp-createaccount-example-pass": "Tạo người dùng <kbd>người kiểm tra</kbd> với mật khẩu <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Tạo người dùng <kbd>người dùng thử gửi</kbd> và gửi một mật khẩu được tạo ra ngẫu nhiên qua thư điện tử.",
+ "apihelp-delete-summary": "Xóa trang.",
+ "apihelp-delete-param-title": "Xóa tiêu đề của trang. Không thể sử dụng cùng với <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Xóa ID của trang. Không thể sử dụng cùng với <var>$1title</var>.",
+ "apihelp-delete-param-watch": "Thêm trang vào danh sách theo dõi của người dùng hiện tại.",
+ "apihelp-delete-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của người dùng hiện tại.",
+ "apihelp-delete-example-simple": "Xóa <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Xóa <kbd>Main Page</kbd> với lý do <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-summary": "Mô đun này đã bị vô hiệu hóa.",
+ "apihelp-edit-summary": "Tạo và sửa trang.",
+ "apihelp-edit-param-section": "Số phần trang. <kbd>0</kbd> là phần đầu; <kbd>new</kbd> là phần mới.",
+ "apihelp-edit-param-sectiontitle": "Tên của phần mới.",
+ "apihelp-edit-param-text": "Nội dung trang.",
+ "apihelp-edit-param-summary": "Tóm lược sửa đổi. Cũng là tên phần khi $1section=new và $1sectiontitle không được đặt.",
+ "apihelp-edit-param-minor": "Sửa đổi nhỏ.",
+ "apihelp-edit-param-notminor": "Sửa đổi không nhỏ.",
+ "apihelp-edit-param-bot": "Đánh dấu sửa đổi này là do bot thực hiện.",
+ "apihelp-edit-param-createonly": "Không sửa đổi trang nếu nó đã tồn tại.",
+ "apihelp-edit-param-nocreate": "Gây lỗi nếu trang không tồn tại.",
+ "apihelp-edit-param-watch": "Thêm trang vào danh sách theo dõi của người dùng hiện tại.",
+ "apihelp-edit-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của người dùng hiện tại.",
+ "apihelp-edit-param-undo": "Hoàn tác sửa đổi này. Ghi đè $1text, $1prependtext và $ 1appendtext.",
+ "apihelp-edit-param-undoafter": "Hoàn tác tất cả các sửa đổi từ $1undo cho tới sửa đổi này. Nếu không được thiết lập, chỉ cần lùi lại một sửa đổi.",
+ "apihelp-edit-param-redirect": "Tự động giải quyết các chuyển hướng.",
+ "apihelp-edit-param-contentmodel": "Mô hình nội dung của nội dung mới.",
+ "apihelp-edit-example-edit": "Sửa đổi trang",
+ "apihelp-edit-example-prepend": "Đưa <kbd>_&#95;NOTOC_&#95;</kbd> vào đầu trang",
+ "apihelp-edit-example-undo": "Lùi sửa các thay đổi 13579–13585 và tự động tóm lược",
+ "apihelp-emailuser-summary": "Gửi thư cho người dùng.",
+ "apihelp-emailuser-param-target": "Người dùng để gửi thư điện tử cho.",
+ "apihelp-emailuser-param-subject": "Tiêu đề bức thư.",
+ "apihelp-emailuser-param-text": "Nội dung bức thư.",
+ "apihelp-emailuser-param-ccme": "Gửi bản sao của thư này cho tôi.",
+ "apihelp-emailuser-example-email": "Gửi thư điện tử cho thành viên <kbd>WikiSysop</kbd> với văn bản <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-summary": "Bung tất cả bản mẫu trong văn bản wiki.",
+ "apihelp-expandtemplates-param-title": "Tên trang.",
+ "apihelp-expandtemplates-param-text": "Văn bản wiki để bung.",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "Wikitext mở rộng.",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "Cây phân tích XML của đầu vào.",
+ "apihelp-feedcontributions-summary": "Trả về nguồn cấp đóng góp người dùng.",
+ "apihelp-feedcontributions-param-feedformat": "Định dạng nguồn cấp.",
+ "apihelp-feedcontributions-param-user": "Người dùng nhận được những đóng góp gì.",
+ "apihelp-feedcontributions-param-namespace": "Không gian tên để lọc các khoản đóng góp của.",
+ "apihelp-feedcontributions-param-year": "Từ năm (trở về trước).",
+ "apihelp-feedcontributions-param-month": "Từ tháng (trở về trước).",
+ "apihelp-feedcontributions-param-tagfilter": "Lọc đóng góp có những thẻ này.",
+ "apihelp-feedcontributions-param-deletedonly": "Chỉ hiện các đóng góp đã xóa.",
+ "apihelp-feedcontributions-param-toponly": "Chỉ hiện các phiên bản mới nhất.",
+ "apihelp-feedcontributions-param-newonly": "Chỉ hiện các sửa đổi tạo trang.",
+ "apihelp-feedcontributions-example-simple": "Trả về các đóng góp của người dùng <kbd>Ví dụ</kbd>.",
+ "apihelp-feedrecentchanges-summary": "Trả về nguồn cấp thay đổi gần đây.",
+ "apihelp-feedrecentchanges-param-feedformat": "Định dạng nguồn cấp.",
+ "apihelp-feedrecentchanges-param-days": "Ngày để giới hạn kết quả.",
+ "apihelp-feedrecentchanges-param-limit": "Số kết quả lớn nhất để cho ra.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ẩn thay đổi nhỏ.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ẩn thay đổi do bot thực hiện.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ẩn thay đổi do người dùng vô danh thực hiện.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ẩn thay đổi do người dùng đăng nhập thực hiện.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ẩn thay đổi đã tuần tra.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ẩn thay đổi do người dùng hiện tại thực hiện.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Lọc theo thẻ.",
+ "apihelp-feedrecentchanges-example-simple": "Xem thay đổi gần đây.",
+ "apihelp-feedrecentchanges-example-30days": "Hiển thị các thay đổi trong 30 ngày gần đây.",
+ "apihelp-feedwatchlist-summary": "Trả về nguồn cấp danh sách theo dõi.",
+ "apihelp-feedwatchlist-param-feedformat": "Định dạng nguồn cấp.",
+ "apihelp-feedwatchlist-example-default": "Xem nguồn cấp danh sách theo dõi.",
+ "apihelp-filerevert-summary": "Phục hồi một tập tin sang một phiên bản cũ.",
+ "apihelp-filerevert-param-comment": "Tải lên bình luận.",
+ "apihelp-filerevert-param-archivename": "Tên lưu trữ của bản sửa đổi để trở lại .",
+ "apihelp-filerevert-example-revert": "Hoàn nguyên <kbd>Wiki.png</kbd> veef phiên bản <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-summary": "Hiển thị trợ giúp cho các mô-đun xác định.",
+ "apihelp-help-param-helpformat": "Định dạng của văn bản trợ giúp được cho ra.",
+ "apihelp-help-example-main": "Trợ giúp cho các mô-đun chính.",
+ "apihelp-help-example-recursive": "Tất cả trợ giúp trong một trang",
+ "apihelp-help-example-help": "Trợ giúp cho chính bản thân module trợ giúp",
+ "apihelp-help-example-query": "Trợ giúp cho hai module con truy vấn",
+ "apihelp-imagerotate-summary": "Xoay một hoặc nhiều hình ảnh.",
+ "apihelp-imagerotate-param-rotation": "Độ xoay hình ảnh theo chiều kim đồng hồ.",
+ "apihelp-imagerotate-example-simple": "Xoay <kbd>Tập tin:Ví dụ.jpg</kbd> <kbd>90</kbd> độ.",
+ "apihelp-imagerotate-example-generator": "Xoay tất cả các hình ảnh trong <kbd>Thể loại:Búng</kbd> <kbd>180</kbd> độ.",
+ "apihelp-import-param-summary": "Nhập tóm lược.",
+ "apihelp-import-param-xml": "Tập tin XML đã được tải lên.",
+ "apihelp-import-param-interwikisource": "Dành cho các nhập khẩu interwiki: wiki để nhập từ.",
+ "apihelp-login-param-name": "Tên người dùng.",
+ "apihelp-login-param-password": "Mật khẩu.",
+ "apihelp-login-param-domain": "Tên miền (tùy chọn).",
+ "apihelp-login-param-token": "Dấu hiệu đăng nhập được lấy trong yêu cầu đầu tiên.",
+ "apihelp-login-example-gettoken": "Lấy dấu hiệu đăng nhập",
+ "apihelp-login-example-login": "Đăng nhập",
+ "apihelp-logout-summary": "Thoát ra và xóa dữ liệu phiên làm việc.",
+ "apihelp-logout-example-logout": "Đăng xuất người dùng hiện tại",
+ "apihelp-mergehistory-summary": "Hợp nhất lịch sử trang.",
+ "apihelp-mergehistory-param-reason": "Lý do hợp nhất lịch sử.",
+ "apihelp-move-summary": "Di chuyển trang.",
+ "apihelp-move-param-to": "Đặt tiêu đề để đổi tên trang.",
+ "apihelp-move-param-reason": "Lý do đổi tên.",
+ "apihelp-move-param-movetalk": "Đổi tên trang thảo luận, nếu nó tồn tại.",
+ "apihelp-move-param-movesubpages": "Đổi tên trang con, nếu có thể áp dụng.",
+ "apihelp-move-param-noredirect": "Không tạo trang đổi hướng.",
+ "apihelp-move-param-ignorewarnings": "Bỏ qua tất cả các cảnh báo.",
+ "apihelp-opensearch-summary": "Tìm kiếm trong wiki qua giao thức OpenSearch.",
+ "apihelp-opensearch-param-search": "Chuỗi tìm kiếm.",
+ "apihelp-opensearch-param-limit": "Đa số kết quả để cho ra.",
+ "apihelp-opensearch-param-namespace": "Không gian tên để tìm kiếm.",
+ "apihelp-opensearch-param-suggest": "Không làm gì nếu <var> [[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> sai/lỗi.",
+ "apihelp-opensearch-param-format": "Định dạng kết quả được cho ra.",
+ "apihelp-opensearch-example-te": "Tìm trang bắt đầu với <kbd>Te</kbd>.",
+ "apihelp-options-example-reset": "Mặc định lại các tùy chọn",
+ "apihelp-paraminfo-summary": "Lấy thông tin về các module API.",
+ "apihelp-paraminfo-param-helpformat": "Định dạng chuỗi trợ giúp.",
+ "apihelp-parse-param-summary": "Lời tóm lược để phân tích.",
+ "apihelp-parse-param-prop": "Những mẩu thông tin nào muốn có:",
+ "apihelp-parse-param-section": "Chỉ phân tích nội dung của số phần này.\n\nNếu có <kbd>new</kbd> thì phân tích <var>$1text</var> và <var>$1sectiontitle</var> như thể thêm phần mới vào trang.\n\nPhần <kbd>new</kbd> chỉ được chấp nhận khi định rõ <var>text</var>.",
+ "apihelp-parse-param-disablelimitreport": "Bỏ qua thông báo bộ tiền xử lý (“NewPP limit report”) khi cho ra kết quả bộ xử lý.",
+ "apihelp-parse-example-page": "Phân tích trang.",
+ "apihelp-parse-example-text": "Phân tích văn bản wiki.",
+ "apihelp-parse-example-texttitle": "Phân tích văn bản wiki theo tên trang.",
+ "apihelp-parse-example-summary": "Phân tích lời tóm lược.",
+ "apihelp-protect-example-protect": "Khóa trang.",
+ "apihelp-protect-example-unprotect": "Mở khóa trang bằng cách đặt hạn chế thành <kbd>all</kbd>.",
+ "apihelp-protect-example-unprotect2": "Mở khóa trang bằng cách không đặt hạn chế nào",
+ "apihelp-purge-param-forcelinkupdate": "Cập nhật các bảng liên kết.",
+ "apihelp-purge-example-generator": "Làm mới 10 trang đầu tiên trong không gian tên chính",
+ "apihelp-query-param-prop": "Các thuộc tính để lấy khi truy vấn các trang.",
+ "apihelp-query-param-list": "Các danh sách để lấy.",
+ "apihelp-query-param-meta": "Siêu dữ liệu để lấy.",
+ "apihelp-query+allcategories-summary": "Liệt kê tất cả các thể loại.",
+ "apihelp-query+allcategories-param-from": "Chọn thể loại để bắt đầu đếm.",
+ "apihelp-query+allcategories-param-to": "Chọn thể loại để dừng đếm.",
+ "apihelp-query+allcategories-param-dir": "Hướng xếp loại.",
+ "apihelp-query+allcategories-param-limit": "Có bao nhiêu thể loại được trả về.",
+ "apihelp-query+allfileusages-param-limit": "Có bao nhiêu số hạng mục được trả về.",
+ "apihelp-query+allimages-param-limit": "Có bao nhiêu hình ảnh trong tổng số được trả về.",
+ "apihelp-query+alllinks-param-limit": "Có bao nhiêu số hạng mục được trả về.",
+ "apihelp-query+allpages-param-limit": "Có bao nhiêu trang được trả về.",
+ "apihelp-query+allredirects-param-limit": "Có bao nhiêu số hạng mục được trả về.",
+ "apihelp-query+mystashedfiles-param-limit": "Có bao nhiêu tập tin nhận được.",
+ "apihelp-query+alltransclusions-param-limit": "Có bao nhiêu số hạng mục được trả về.",
+ "apihelp-query+allusers-param-limit": "Có bao nhiêu tên người dùng được trả về.",
+ "apihelp-query+backlinks-param-limit": "Tất cả có bao nhiêu trang trả về. Nếu <var>$1redirect</var> được kích hoạt, giới hạn áp dụng cho mỗi cấp độ riêng biệt (có nghĩa là lên đến 2*<var>$1limit</var> kết quả có thể được trả lại).",
+ "apihelp-query+categories-param-limit": "Có bao nhiêu thể loại được trả về.",
+ "apihelp-query+extlinks-param-limit": "Có bao nhiêu liên kết được trả về.",
+ "apihelp-query+exturlusage-param-limit": "Có bao nhiêu trang được trả về.",
+ "apihelp-query+filearchive-param-limit": "Tổng cộng có bao nhiêu hình ảnh được trả về.",
+ "apihelp-query+fileusage-param-limit": "Có bao nhiêu được trả về.",
+ "apihelp-query+images-param-limit": "Có bao nhiêu tập tin được trả về.",
+ "apihelp-query+langbacklinks-param-limit": "Tổng cộng có bao nhiêu trang được trả về.",
+ "apihelp-query+links-param-limit": "Có bao nhiêu liên kết được trả về.",
+ "apihelp-query+linkshere-param-limit": "Có bao nhiêu được trả về.",
+ "apihelp-query+logevents-param-limit": "Tổng cộng có bao nhiêu bài viết sự kiện được trả về.",
+ "apihelp-query+transcludedin-param-limit": "Có bao nhiêu được trả về.",
+ "apihelp-query+watchlist-param-limit": "Cả bao nhiêu kết quả được trả về trên mỗi yêu cầu.",
+ "apihelp-rollback-summary": "Lùi lại sửa đổi cuối cùng của trang này.",
+ "apihelp-rollback-extended-description": "Nếu người dùng cuối cùng đã sửa đổi trang này nhiều lần, tất cả chúng sẽ được lùi lại cùng một lúc.",
+ "apihelp-format-example-generic": "Cho ra kết quả truy vấn dưới dạng $1.",
+ "apihelp-json-summary": "Cho ra dữ liệu dưới dạng JSON.",
+ "apihelp-jsonfm-summary": "Cho ra dữ liệu dưới dạng JSON (định dạng bằng HTML).",
+ "apihelp-none-summary": "Không cho ra gì.",
+ "apihelp-rawfm-summary": "Cho ra dữ liệu bao gồm các phần tử gỡ lỗi dưới dạng JSON (định dạng bằng HTML).",
+ "apihelp-xml-summary": "Cho ra dữ liệu dưới dạng XML.",
+ "apihelp-xmlfm-summary": "Cho ra dữ liệu dưới dạng XML (định dạng bằng HTML).",
+ "api-format-title": "Kết quả API MediaWiki",
+ "api-help-title": "Trợ giúp về API MediaWiki",
+ "api-help-main-header": "Mô đun chính",
+ "api-help-flag-deprecated": "Mô đun này đã bị phản đối.",
+ "api-help-flag-readrights": "Mô đun này cần quyền đọc.",
+ "api-help-flag-writerights": "Mô đun này cần quyền ghi.",
+ "api-help-flag-mustbeposted": "Mô đun này chỉ có nhận các yêu cầu POST.",
+ "api-help-parameters": "{{PLURAL:$1|Tham số|Các tham số}}:",
+ "api-help-param-deprecated": "Bị phản đối.",
+ "api-help-param-required": "Tham số này là bắt buộc.",
+ "api-help-param-list": "{{PLURAL:$1|1=Một trong các giá trị|2=Các giá trị (phân tách bằng <kbd>{{!}}</kbd>)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Cần phải để trống|Cần phải để trống hoặc là $2}}",
+ "api-help-param-limit": "Không cho phép hơn $1.",
+ "api-help-param-limit2": "Không cho phép hơn $1 ($2 đối với các bot).",
+ "api-help-param-multi-separate": "Phân tách các giá trị bằng <kbd>|</kbd>.",
+ "api-help-param-default": "Mặc định: $1",
+ "api-help-param-default-empty": "Mặc định: <span class=\"apihelp-empty\">(trống)</span>",
+ "api-help-examples": "{{PLURAL:$1|Ví dụ|Các ví dụ}}:",
+ "api-help-permissions": "{{PLURAL:$1|Quyền hạn|Các quyền hạn}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1}}Cấp cho: $2",
+ "api-credits-header": "Ghi công"
+}
diff --git a/www/wiki/includes/api/i18n/wuu.json b/www/wiki/includes/api/i18n/wuu.json
new file mode 100644
index 00000000..7df8a48d
--- /dev/null
+++ b/www/wiki/includes/api/i18n/wuu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "反共复国"
+ ]
+ },
+ "apihelp-main-param-action": "要执行个操作。"
+}
diff --git a/www/wiki/includes/api/i18n/yi.json b/www/wiki/includes/api/i18n/yi.json
new file mode 100644
index 00000000..c2acd421
--- /dev/null
+++ b/www/wiki/includes/api/i18n/yi.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "apihelp-main-param-action": "וועלכע אקציע אויסצופירן.",
+ "apihelp-main-param-format": "פארמאט פונעם אויסגאב.",
+ "api-help-source": "מקור: $1"
+}
diff --git a/www/wiki/includes/api/i18n/zh-hans.json b/www/wiki/includes/api/i18n/zh-hans.json
new file mode 100644
index 00000000..fba891b6
--- /dev/null
+++ b/www/wiki/includes/api/i18n/zh-hans.json
@@ -0,0 +1,1777 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gaoxuewei",
+ "Linforest",
+ "Liuxinyu970226",
+ "Papapasan",
+ "LNDDYL",
+ "Shizhao",
+ "Yfdyh000",
+ "JuneAugsut",
+ "EagerLin",
+ "Simon xianyu",
+ "Kuailong",
+ "Zhxy 519",
+ "御坂美琴",
+ "RyRubyy",
+ "Apflu",
+ "Hzy980512",
+ "PhiLiP",
+ "Arthur2e5",
+ "損齋",
+ "Myy730",
+ "D41D8CD98F",
+ "Umherirrender",
+ "NeverBehave"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|文档]]\n* [[mw:Special:MyLanguage/API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>MediaWiki API是一个成熟稳定的,不断受到支持和改进的界面。尽管我们尽力避免,但偶尔也需要作出重大更新;请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:Special:MyLanguage/API:Errors_and_warnings|API:错误与警告]]。\n\n<p class=\"mw-apisandbox-link\"><strong>测试中:</strong>测试API请求的易用性,请参见[[Special:ApiSandbox]]。</p>",
+ "apihelp-main-param-action": "要执行的操作。",
+ "apihelp-main-param-format": "输出的格式。",
+ "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码<samp>maxlag</samp>会返回消息,例如<samp>等待$host中:延迟$lag秒</samp>。<br />参见[[mw:Special:MyLanguage/Manual:Maxlag_parameter|手册:Maxlag参数]]以获取更多信息。",
+ "apihelp-main-param-smaxage": "设置<code>s-maxage</code> HTTP缓存控制头至这些秒。错误不会缓存。",
+ "apihelp-main-param-maxage": "设置<code>max-age</code> HTTP缓存控制头至这些秒。错误不会缓存。",
+ "apihelp-main-param-assert": "如果设置为<kbd>user</kbd>就验证用户是否登录,或如果设置为<kbd>bot</kbd>就验证是否有机器人用户权限。",
+ "apihelp-main-param-assertuser": "验证当前用户是命名用户。",
+ "apihelp-main-param-requestid": "任何在此提供的值将包含在响应中。可以用以区别请求。",
+ "apihelp-main-param-servedby": "包含保存结果请求的主机名。",
+ "apihelp-main-param-curtimestamp": "在结果中包括当前时间戳。",
+ "apihelp-main-param-responselanginfo": "包含在结果中用于<var>uselang</var>和<var>errorlang</var>的语言。",
+ "apihelp-main-param-origin": "当通过跨域名AJAX请求(CORS)访问API时,设置此作为起始域名。这必须包括在任何pre-flight请求中,并因此必须是请求的URI的一部分(而不是POST正文)。\n\n对于已验证的请求,这必须正确匹配<code>Origin</code>标头中的原点之一,因此它已经设置为像<kbd>https://en.wikipedia.org</kbd>或<kbd>https://meta.wikimedia.org</kbd>的东西。如果此参数不匹配<code>Origin</code>页顶,就返回403错误响应。如果此参数匹配<code>Origin</code>页顶并且起点被白名单,将设置<code>Access-Control-Allow-Origin</code>和<code>Access-Control-Allow-Credentials</code>开头。\n\n对于未验证的请求,会指定值<kbd>*</kbd>。这将导致<code>Access-Control-Allow-Origin</code>标头被设置,但<code>Access-Control-Allow-Credentials</code>将为<code>false</code>,且所有用户特定数据将受限制。",
+ "apihelp-main-param-uselang": "用于消息翻译的语言。<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>与<kbd>siprop=languages</kbd>可返回语言代码列表,或指定<kbd>user</kbd>以使用当前用户的语言设置,或指定<kbd>content</kbd>以使用此wiki的内容语言。",
+ "apihelp-main-param-errorformat": "用于警告和错误文本输出的格式。\n; plaintext:已移除HTML标签,并被替换实体的Wiki文本。\n; wikitext:未解析的wiki文本。\n; html:HTML。\n; raw:消息关键词和参数。\n; none:无文本输出,仅包含错误代码。\n; bc:在MediaWiki 1.29以前版本使用的格式。<var>errorlang</var>和<var>errorsuselocal</var>会被忽略。",
+ "apihelp-main-param-errorlang": "用于警告和错误的语言。<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>带<kbd>siprop=languages</kbd>返回语言代码的列表,或指定<kbd>content</kbd>以使用此wiki的内容语言,或指定<kbd>uselang</kbd>以使用与<var>uselang</var>参数相同的值。",
+ "apihelp-main-param-errorsuselocal": "如果指定,错误文本将使用来自{{ns:MediaWiki}}名字空间的本地自定义消息。",
+ "apihelp-block-summary": "封禁一位用户。",
+ "apihelp-block-param-user": "要封禁的用户、IP地址或IP地址段。不能与<var>$1userid</var>一起使用",
+ "apihelp-block-param-userid": "要封禁的用户ID。不能与<var>$1user</var>一起使用。",
+ "apihelp-block-param-expiry": "到期时间。可以是相对时间(例如<kbd>5 months</kbd>或<kbd>2 weeks</kbd>)或绝对时间(例如<kbd>2014-09-18T12:34:56Z</kbd>)。如果设置为<kbd>infinite</kbd>、<kbd>indefinite</kbd>或<kbd>never</kbd>,封禁将无限期。",
+ "apihelp-block-param-reason": "封禁的原因。",
+ "apihelp-block-param-anononly": "只封禁匿名用户(也就是说禁止此 IP 地址的匿名编辑)。",
+ "apihelp-block-param-nocreate": "防止创建帐户。",
+ "apihelp-block-param-autoblock": "自动封禁最近使用的IP地址,以及以后他们尝试登陆使用的IP地址。",
+ "apihelp-block-param-noemail": "阻止用户通过wiki发送电子邮件。(需要<code>blockemail</code>权限)。",
+ "apihelp-block-param-hidename": "从封禁日志中隐藏用户名。(需要<code>hideuser</code>权限)。",
+ "apihelp-block-param-allowusertalk": "允许用户编辑自己的讨论页(取决于<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>)。",
+ "apihelp-block-param-reblock": "如果该用户已被封禁,则覆盖已有的封禁。",
+ "apihelp-block-param-watchuser": "监视用户或该 IP 的用户页和讨论页。",
+ "apihelp-block-param-tags": "要在封禁日志中应用到实体的更改标签。",
+ "apihelp-block-example-ip-simple": "封禁IP地址<kbd>192.0.2.5</kbd>三天,原因<kbd>First strike</kbd>。",
+ "apihelp-block-example-user-complex": "无限期封禁用户<kbd>Vandal</kbd>,原因<kbd>Vandalism</kbd>,并阻止新账户创建和电子邮件发送。",
+ "apihelp-changeauthenticationdata-summary": "更改当前用户的身份验证数据。",
+ "apihelp-changeauthenticationdata-example-password": "尝试更改当前用户的密码至<kbd>ExamplePassword</kbd>。",
+ "apihelp-checktoken-summary": "从<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>检查令牌有效性。",
+ "apihelp-checktoken-param-type": "已开始测试的令牌类型。",
+ "apihelp-checktoken-param-token": "要测试的令牌。",
+ "apihelp-checktoken-param-maxtokenage": "令牌的最大允许年龄,以秒计。",
+ "apihelp-checktoken-example-simple": "测试<kbd>csrf</kbd>令牌的有效性。",
+ "apihelp-clearhasmsg-summary": "清除当前用户的<code>hasmsg</code>标记。",
+ "apihelp-clearhasmsg-example-1": "清除当前用户的<code>hasmsg</code>标记。",
+ "apihelp-clientlogin-summary": "使用交互式流登录wiki。",
+ "apihelp-clientlogin-example-login": "开始作为用户<kbd>Example</kbd>和密码<kbd>ExamplePassword</kbd>登录至wiki的过程。",
+ "apihelp-clientlogin-example-login2": "在<samp>UI</samp>响应双因素验证后继续登录,补充<var>OATHToken</var> <kbd>987654</kbd>。",
+ "apihelp-compare-summary": "获取两页面之间的差异。",
+ "apihelp-compare-extended-description": "必须传递“from”和“to”之间的修订版本号、页面标题、页面ID、文本或相关参考资料。",
+ "apihelp-compare-param-fromtitle": "要比较的第一个标题。",
+ "apihelp-compare-param-fromid": "要比较的第一个页面 ID。",
+ "apihelp-compare-param-fromrev": "要比较的第一个修订版本。",
+ "apihelp-compare-param-fromtext": "使用该文本而不是由<var>fromtitle</var>、<var>fromid</var>或<var>fromrev</var>指定的修订版本内容。",
+ "apihelp-compare-param-fromsection": "只使用指定“from”内容的指定章节。",
+ "apihelp-compare-param-frompst": "在<var>fromtext</var>执行预保存转变。",
+ "apihelp-compare-param-fromcontentmodel": "<var>fromtext</var>的内容模型。如果未指定,这将基于其他参数猜想。",
+ "apihelp-compare-param-fromcontentformat": "<var>fromtext</var>的内容序列化格式。",
+ "apihelp-compare-param-totitle": "要比较的第二个标题。",
+ "apihelp-compare-param-toid": "要比较的第二个页面 ID。",
+ "apihelp-compare-param-torev": "要比较的第二个修订版本。",
+ "apihelp-compare-param-torelative": "使用与定义自<var>fromtitle</var>、<var>fromid</var>或<var>fromrev</var>的修订版本相关的修订版本。所有其他“to”的选项将被忽略。",
+ "apihelp-compare-param-totext": "使用该文本而不是由<var>totitle</var>、<var>toid</var>或<var>torev</var>指定的修订版本内容。",
+ "apihelp-compare-param-tosection": "只使用指定“to”内容的指定章节。",
+ "apihelp-compare-param-topst": "在<var>totext</var>执行预保存转换。",
+ "apihelp-compare-param-tocontentmodel": "<var>totext</var>的内容模型。如果未指定,这将基于其他参数猜想。",
+ "apihelp-compare-param-tocontentformat": "<var>totext</var>的内容序列化格式。",
+ "apihelp-compare-param-prop": "要获取的信息束。",
+ "apihelp-compare-paramvalue-prop-diff": "差异HTML。",
+ "apihelp-compare-paramvalue-prop-diffsize": "差异HTML的大小(字节)。",
+ "apihelp-compare-paramvalue-prop-rel": "“from”之前及“to”之后修订版本的修订ID,如果有。",
+ "apihelp-compare-paramvalue-prop-ids": "“from”和“to”修订版本的页面及修订ID。",
+ "apihelp-compare-paramvalue-prop-title": "“from”和“to”修订版本的页面标题。",
+ "apihelp-compare-paramvalue-prop-user": "“from”和“to”修订版本的用户名和ID。",
+ "apihelp-compare-paramvalue-prop-comment": "“from”和“to”修订版本的注释。",
+ "apihelp-compare-paramvalue-prop-parsedcomment": "“from”和“to”修订版本的已解析注释。",
+ "apihelp-compare-paramvalue-prop-size": "“from”和“to”修订版本的大小。",
+ "apihelp-compare-example-1": "在版本1和2中创建差异。",
+ "apihelp-createaccount-summary": "创建一个新用户账户。",
+ "apihelp-createaccount-param-preservestate": "如果<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>返回用于<samp>hasprimarypreservedstate</samp>的真值,标记为<samp>primary-required</samp>的请求应被忽略。如果它返回用于<samp>preservedusername</samp>的非空值,用户名必须用于<var>username</var>参数。",
+ "apihelp-createaccount-example-create": "开始创建用户<kbd>Example</kbd>和密码<kbd>ExamplePassword</kbd>的过程。",
+ "apihelp-createaccount-param-name": "用户名。",
+ "apihelp-createaccount-param-password": "密码(如果设置<var>$1mailpassword</var>则忽略)。",
+ "apihelp-createaccount-param-domain": "外部身份验证域 (可选)。",
+ "apihelp-createaccount-param-token": "在第一个请求中获得的帐户创建标记。",
+ "apihelp-createaccount-param-email": "用户的电子邮件地址(可选)。",
+ "apihelp-createaccount-param-realname": "用户的真实姓名(可选)。",
+ "apihelp-createaccount-param-mailpassword": "如果设置为任何值,将向用户发送一个随机密码。",
+ "apihelp-createaccount-param-reason": "将要放在日志中的,关于创建帐户的可选原因。",
+ "apihelp-createaccount-param-language": "要为用户设置为默认值的语言代码(可选,默认为内容语言)。",
+ "apihelp-createaccount-example-pass": "创建用户<kbd>testuser</kbd>和密码<kbd>test123</kbd>。",
+ "apihelp-createaccount-example-mail": "创建用户<kbd>testmailuser</kbd>并电邮发送一个随机生成的密码。",
+ "apihelp-cspreport-summary": "由浏览器使用以报告违反内容安全方针的内容。此模块应永不使用,除了在被CSP兼容的浏览器自动使用时。",
+ "apihelp-cspreport-param-reportonly": "标记作为来自监视方针的报告,而不是执行方针的报告",
+ "apihelp-cspreport-param-source": "生成引发此报告的CSP标头的事物",
+ "apihelp-delete-summary": "删除一个页面。",
+ "apihelp-delete-param-title": "要删除的页面标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-delete-param-pageid": "要删除的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-delete-param-reason": "删除原因。如果未设置,将使用一个自动生成的原因。",
+ "apihelp-delete-param-tags": "要在删除日志中应用到实体的更改标签。",
+ "apihelp-delete-param-watch": "将该页面加入当前用户的监视列表。",
+ "apihelp-delete-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-delete-param-unwatch": "将该页面从当前用户的监视列表删除。",
+ "apihelp-delete-param-oldimage": "由[[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]]提供的要删除的旧图片名称。",
+ "apihelp-delete-example-simple": "删除<kbd>Main Page</kbd>。",
+ "apihelp-delete-example-reason": "删除<kbd>Main Page</kbd>,原因<kbd>Preparing for move</kbd>。",
+ "apihelp-disabled-summary": "此模块已禁用。",
+ "apihelp-edit-summary": "创建和编辑页面。",
+ "apihelp-edit-param-title": "要编辑的页面标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-edit-param-pageid": "要编辑的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-edit-param-section": "段落数。<kbd>0</kbd>用于首段,<kbd>new</kbd>用于新的段落。",
+ "apihelp-edit-param-sectiontitle": "新段落的标题。",
+ "apihelp-edit-param-text": "页面内容。",
+ "apihelp-edit-param-summary": "编辑摘要。当$1section=new且未设置$1sectiontitle时,还包括小节标题。",
+ "apihelp-edit-param-tags": "应用到此修订的更改标签。",
+ "apihelp-edit-param-minor": "小编辑。",
+ "apihelp-edit-param-notminor": "不是小编辑。",
+ "apihelp-edit-param-bot": "标记此编辑为机器人编辑。",
+ "apihelp-edit-param-basetimestamp": "基础修订的时间戳,用于检测编辑冲突。可以通过[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]得到。",
+ "apihelp-edit-param-starttimestamp": "编辑过程开始的时间戳,用于检测编辑冲突。当开始编辑过程时(例如当加载要编辑的页面时)使用<var>[[Special:ApiHelp/main|curtimestamp]]</var>可能取得一个适当的值。",
+ "apihelp-edit-param-recreate": "覆盖有关该页面在此期间已被删除的任何错误。",
+ "apihelp-edit-param-createonly": "不要编辑页面,如果已经存在。",
+ "apihelp-edit-param-nocreate": "如果该页面不存在,则抛出一个错误。",
+ "apihelp-edit-param-watch": "将页面加入当前用户的监视列表。",
+ "apihelp-edit-param-unwatch": "将页面从当前用户的监视列表中移除。",
+ "apihelp-edit-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-edit-param-md5": "$1text参数或$1prependtext和$1appendtext级联参数的MD5哈希值。如果设置,除非哈希值正确否则编辑无法完成。",
+ "apihelp-edit-param-prependtext": "将该文本添加到该页面的开始。覆盖$1text。",
+ "apihelp-edit-param-appendtext": "将该文本添加到该页面的结尾。覆盖$1text。\n\n采用$1section=new来添加一个新的章节,而不是这个参数。",
+ "apihelp-edit-param-undo": "撤销此次修订。覆盖$1text、$1prependtext和$1appendtext。",
+ "apihelp-edit-param-undoafter": "撤销从$1undo至此的所有修订。如果不设置就撤销一次修订。",
+ "apihelp-edit-param-redirect": "自动解决重定向。",
+ "apihelp-edit-param-contentformat": "用于输入文本的内容序列化格式。",
+ "apihelp-edit-param-contentmodel": "新内容的内容模型。",
+ "apihelp-edit-param-token": "令牌应总是发送为最后参数,或至少在$1text参数之后。",
+ "apihelp-edit-example-edit": "编辑一个页面。",
+ "apihelp-edit-example-prepend": "页面中预置<kbd>_&#95;NOTOC_&#95;</kbd>。",
+ "apihelp-edit-example-undo": "撤销修订版本13579至13585并自动填写编辑摘要。",
+ "apihelp-emailuser-summary": "电子邮件联系一位用户。",
+ "apihelp-emailuser-param-target": "电子邮件的目标用户。",
+ "apihelp-emailuser-param-subject": "主题页眉。",
+ "apihelp-emailuser-param-text": "邮件正文。",
+ "apihelp-emailuser-param-ccme": "给我发送一份该邮件的副本。",
+ "apihelp-emailuser-example-email": "向用户<kbd>WikiSysop</kbd>发送邮件,带文字<kbd>Content</kbd>。",
+ "apihelp-expandtemplates-summary": "展开wiki文本中的所有模板。",
+ "apihelp-expandtemplates-param-title": "页面标题。",
+ "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
+ "apihelp-expandtemplates-param-revid": "修订版本ID,用于<code><nowiki>{{REVISIONID}}</nowiki></code>和类似变体。",
+ "apihelp-expandtemplates-param-prop": "要获取的那条信息。\n\n注意如果没有选定值,结果将包含wiki文本,但将以弃用的格式显示。",
+ "apihelp-expandtemplates-paramvalue-prop-wikitext": "展开后的wiki文本。",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "任何在输出中提供的,未在wiki文本输出中表现的分类。",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "由wiki文本中扩充的魔术字定义的页面属性。",
+ "apihelp-expandtemplates-paramvalue-prop-volatile": "输出是否常常变动,是否不应被在页面中其他任何位置重用。",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "结果缓存应无效化后的最长时间。",
+ "apihelp-expandtemplates-paramvalue-prop-modules": "任何解析器函数请求添加至输出的ResourceLoader模块。<kbd>jsconfigvars</kbd>和<kbd>encodedjsconfigvars</kbd>之一必须与<kbd>modules</kbd>共同被请求。",
+ "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "针对页面提供JavaScript配置变量。",
+ "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "针对页面提供JavaScript配置变量为一个JSON字符串。",
+ "apihelp-expandtemplates-paramvalue-prop-parsetree": "输入的XML分析树。",
+ "apihelp-expandtemplates-param-includecomments": "输出时是否包含HTML注释。",
+ "apihelp-expandtemplates-param-generatexml": "生成XML解析树(取代自$1prop=parsetree)。",
+ "apihelp-expandtemplates-example-simple": "展开wiki文本<kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>。",
+ "apihelp-feedcontributions-summary": "返回用户贡献纲要。",
+ "apihelp-feedcontributions-param-feedformat": "纲要的格式。",
+ "apihelp-feedcontributions-param-user": "获取哪些用户的贡献。",
+ "apihelp-feedcontributions-param-namespace": "过滤哪些名字空间的贡献。",
+ "apihelp-feedcontributions-param-year": "起始年份(及更早)。",
+ "apihelp-feedcontributions-param-month": "起始月份(及更早)。",
+ "apihelp-feedcontributions-param-tagfilter": "过滤有这些标签的贡献者。",
+ "apihelp-feedcontributions-param-deletedonly": "仅显示已删除的贡献。",
+ "apihelp-feedcontributions-param-toponly": "仅仅显示那些作为最新修订的编辑。",
+ "apihelp-feedcontributions-param-newonly": "仅仅显示那些作为页面创建的编辑。",
+ "apihelp-feedcontributions-param-hideminor": "隐藏小编辑。",
+ "apihelp-feedcontributions-param-showsizediff": "显示修订版本之间的大小差别。",
+ "apihelp-feedcontributions-example-simple": "返回用户<kbd>Example</kbd>的贡献。",
+ "apihelp-feedrecentchanges-summary": "返回最近更改的摘要。",
+ "apihelp-feedrecentchanges-param-feedformat": "纲要的格式。",
+ "apihelp-feedrecentchanges-param-namespace": "用于限制结果的名字空间。",
+ "apihelp-feedrecentchanges-param-invert": "除所选定者外的所有名字空间。",
+ "apihelp-feedrecentchanges-param-associated": "包括相关的名字空间(讨论页或主要)。",
+ "apihelp-feedrecentchanges-param-days": "用于限制结果的天数。",
+ "apihelp-feedrecentchanges-param-limit": "所要返回结果的最大数目。",
+ "apihelp-feedrecentchanges-param-from": "显示自那时以来的更改。",
+ "apihelp-feedrecentchanges-param-hideminor": "隐藏小更改。",
+ "apihelp-feedrecentchanges-param-hidebots": "隐藏机器人所做的更改。",
+ "apihelp-feedrecentchanges-param-hideanons": "隐藏匿名用户做出的更改。",
+ "apihelp-feedrecentchanges-param-hideliu": "隐藏注册用户做出的更改。",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "隐藏已巡查更改。",
+ "apihelp-feedrecentchanges-param-hidemyself": "隐藏当前用户做出的更改。",
+ "apihelp-feedrecentchanges-param-hidecategorization": "隐藏分类成员更改。",
+ "apihelp-feedrecentchanges-param-tagfilter": "按标签过滤。",
+ "apihelp-feedrecentchanges-param-target": "仅仅显示从该页面链出的那些页面的变更。",
+ "apihelp-feedrecentchanges-param-showlinkedto": "仅仅显示链入到该页面的那些页面的变更。",
+ "apihelp-feedrecentchanges-example-simple": "显示最近更改。",
+ "apihelp-feedrecentchanges-example-30days": "显示最近30天的更改。",
+ "apihelp-feedwatchlist-summary": "返回监视列表纲要。",
+ "apihelp-feedwatchlist-param-feedformat": "纲要的格式。",
+ "apihelp-feedwatchlist-param-hours": "列出从现在起数小时内修改的页面。",
+ "apihelp-feedwatchlist-param-linktosections": "如果可能的话,直接链接到已变更的小节。",
+ "apihelp-feedwatchlist-example-default": "显示监视列表订阅。",
+ "apihelp-feedwatchlist-example-all6hrs": "显示过去6小时内受监视页面的所有更改。",
+ "apihelp-filerevert-summary": "回退一个文件至某一旧版本。",
+ "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
+ "apihelp-filerevert-param-comment": "上传评论。",
+ "apihelp-filerevert-param-archivename": "恢复到修订版存档名称。",
+ "apihelp-filerevert-example-revert": "回退<kbd>Wiki.png</kbd>至<kbd>2011-03-05T15:27:40Z</kbd>的版本。",
+ "apihelp-help-summary": "显示指定模块的帮助。",
+ "apihelp-help-param-modules": "用于显示帮助的模块(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)。可通过<kbd>+</kbd>指定子模块。",
+ "apihelp-help-param-submodules": "包括给定名称模块的子模块的帮助。",
+ "apihelp-help-param-recursivesubmodules": "包括递归子模块的帮助。",
+ "apihelp-help-param-helpformat": "帮助的输出格式。",
+ "apihelp-help-param-wrap": "在一个标准API响应结构中包裹输出。",
+ "apihelp-help-param-toc": "在HTML输出中包括目录。",
+ "apihelp-help-example-main": "主模块帮助。",
+ "apihelp-help-example-submodules": "用于<kbd>action=query</kbd>及其所有子模块的帮助。",
+ "apihelp-help-example-recursive": "一个页面中的所有帮助。",
+ "apihelp-help-example-help": "帮助模块本身的帮助。",
+ "apihelp-help-example-query": "两个查询子模块的帮助。",
+ "apihelp-imagerotate-summary": "旋转一幅或多幅图像。",
+ "apihelp-imagerotate-param-rotation": "顺时针旋转图像的度数。",
+ "apihelp-imagerotate-param-tags": "要在上传日志中应用到实体的标签。",
+ "apihelp-imagerotate-example-simple": "<kbd>90</kbd>度旋转<kbd>File:Example.png</kbd>。",
+ "apihelp-imagerotate-example-generator": "将<kbd>Category:Flip</kbd>之中的所有图像旋转<kbd>180</kbd>度。",
+ "apihelp-import-summary": "从其他wiki,或从XML文件导入页面。",
+ "apihelp-import-extended-description": "注意当发送用于<var>xml</var>参数的文件时,HTTP POST必须作为文件上传完成(即使用multipart/form-data)",
+ "apihelp-import-param-summary": "日志记录导入摘要。",
+ "apihelp-import-param-xml": "上传的XML文件。",
+ "apihelp-import-param-interwikiprefix": "对于上传导入:要应用到位置用户名的跨wiki前缀(如果设置了<var>$1assignknownusers</var>的话,则也包含已知用户)。",
+ "apihelp-import-param-assignknownusers": "分配编辑至本地用户,只要命名用户存在于本地。",
+ "apihelp-import-param-interwikisource": "用于跨wiki导入:导入的来源wiki。",
+ "apihelp-import-param-interwikipage": "用于跨wiki导入:导入的页面。",
+ "apihelp-import-param-fullhistory": "用于跨wiki导入:完整导入历史,而不只是最新版本。",
+ "apihelp-import-param-templates": "用于跨wiki导入:连带导入所有包含的模板。",
+ "apihelp-import-param-namespace": "导入至此名字空间。不能与<var>$1rootpage</var>一起使用。",
+ "apihelp-import-param-rootpage": "作为此页面的子页面导入。不能与<var>$1namespace</var>一起使用。",
+ "apihelp-import-param-tags": "要在导入日志,以及在导入页面的空修订版本中应用到实体的更改标签。",
+ "apihelp-import-example-import": "将页面[[meta:Help:ParserFunctions]]连带完整历史导入至100名字空间。",
+ "apihelp-linkaccount-summary": "将来自第三方提供商的账户链接至当前用户。",
+ "apihelp-linkaccount-example-link": "开始从<kbd>Example</kbd>链接至账户的过程。",
+ "apihelp-login-summary": "登录并获取身份验证cookie。",
+ "apihelp-login-extended-description": "此操作只应与[[Special:BotPasswords]]一起使用;用于主账户登录的方式已弃用,并可能在没有警告的情况下失败。要安全登录主账户,请使用<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>。",
+ "apihelp-login-extended-description-nobotpasswords": "此操作已弃用,并可能在没有警告的情况下失败。要安全登录,请使用<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>。",
+ "apihelp-login-param-name": "用户名。",
+ "apihelp-login-param-password": "密码。",
+ "apihelp-login-param-domain": "域名(可选)。",
+ "apihelp-login-param-token": "在首个请求中获得的登录令牌。",
+ "apihelp-login-example-gettoken": "检索登录令牌。",
+ "apihelp-login-example-login": "登录。",
+ "apihelp-logout-summary": "退出并清除会话数据。",
+ "apihelp-logout-example-logout": "退出当前用户。",
+ "apihelp-managetags-summary": "执行有关更改标签的管理任务。",
+ "apihelp-managetags-param-operation": "要执行哪个操作:\n;create:创建一个新的更改标签供手动使用。\n;delete:从数据库中移除一个更改标签,包括移除已使用在所有修订版本、最近更改记录和日志记录上的该标签。\n;activate:激活一个更改标签,允许用户手动应用它。\n;deactivate:停用一个更改标签,阻止用户手动应用它。",
+ "apihelp-managetags-param-tag": "要创建、删除、激活或取消激活的标签。要创建标签,标签必须不存在。要删除标签,标签必须存在。要激活标签,标签必须存在,且不被任何扩展使用。要取消激活标签,标签必须当前处于激活状态,且被手动定义。",
+ "apihelp-managetags-param-reason": "一个创建、删除、激活或停用标签时的原因,可选。",
+ "apihelp-managetags-param-ignorewarnings": "是否忽略操作期间发生的任何警告。",
+ "apihelp-managetags-param-tags": "要在标签管理日志中应用到实体的更改标签。",
+ "apihelp-managetags-example-create": "创建一个名为<kbd>spam</kbd>的标签,原因<kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "删除<kbd>vandlaism</kbd>标签,原因<kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "激活一个名为<kbd>spam</kbd>的标签,原因<kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "停用一个名为<kbd>spam</kbd>的标签,原因<kbd>No longer required</kbd>",
+ "apihelp-mergehistory-summary": "合并页面历史。",
+ "apihelp-mergehistory-param-from": "将被合并历史的页面的标题。不能与<var>$1fromid</var>一起使用。",
+ "apihelp-mergehistory-param-fromid": "将被合并历史的页面的页面ID。不能与<var>$1from</var>一起使用。",
+ "apihelp-mergehistory-param-to": "将要合并历史的页面的标题。不能与<var>$1toid</var>一起使用。",
+ "apihelp-mergehistory-param-toid": "将要合并历史的页面的页面ID。不能与<var>$1to</var>一起使用。",
+ "apihelp-mergehistory-param-timestamp": "指定时间戳,决定源页面的哪些修订历史被移动到目标页面的历史中。如果省略,源页面的所有历史记录都将被合并到目标页面。",
+ "apihelp-mergehistory-param-reason": "历史合并的原因。",
+ "apihelp-mergehistory-example-merge": "将<kbd>Oldpage</kbd>的完整历史合并至<kbd>Newpage</kbd>。",
+ "apihelp-mergehistory-example-merge-timestamp": "将<kbd>Oldpage</kbd>直到<kbd>2015-12-31T04:37:41Z</kbd>的页面修订版本合并至<kbd>Newpage</kbd>。",
+ "apihelp-move-summary": "移动一个页面。",
+ "apihelp-move-param-from": "要重命名的页面标题。不能与<var>$1fromid</var>一起使用。",
+ "apihelp-move-param-fromid": "您希望移动的页面ID。不能与<var>$1from</var>一起使用。",
+ "apihelp-move-param-to": "页面重命名的目标标题。",
+ "apihelp-move-param-reason": "重命名的原因。",
+ "apihelp-move-param-movetalk": "重命名讨论页,如果存在。",
+ "apihelp-move-param-movesubpages": "重命名子页面,如果可以。",
+ "apihelp-move-param-noredirect": "不要创建重定向。",
+ "apihelp-move-param-watch": "将页面和重定向加入至当前用户的监视列表中。",
+ "apihelp-move-param-unwatch": "从当前用户的监视列表中移除页面及重定向。",
+ "apihelp-move-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-move-param-ignorewarnings": "忽略任何警告。",
+ "apihelp-move-param-tags": "要在移动日志,以及在目标页面的空修订版本中应用到实体的更改标签。",
+ "apihelp-move-example-move": "移动<kbd>Badtitle</kbd>到<kbd>Goodtitle</kbd>,不保留重定向。",
+ "apihelp-opensearch-summary": "使用开放搜索协议搜索wiki。",
+ "apihelp-opensearch-param-search": "搜索字符串。",
+ "apihelp-opensearch-param-limit": "要返回的结果最大数。",
+ "apihelp-opensearch-param-namespace": "搜索的名字空间。如果<var>$1search</var>以有效名字空间前缀开头则忽略。",
+ "apihelp-opensearch-param-suggest": "如果<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>设置为false则不做任何事情。",
+ "apihelp-opensearch-param-redirects": "如何处理重定向:\n;return:返回重定向本身。\n;resolve:返回目标页面。可能返回少于$1limit个结果。\n由于历史原因,$1format=json默认为\"return\",其他格式默认为\"resolve\"。",
+ "apihelp-opensearch-param-format": "输出格式。",
+ "apihelp-opensearch-param-warningsaserror": "如果警告通过<kbd>format=json</kbd>提升,返回一个API错误而不是忽略它们。",
+ "apihelp-opensearch-example-te": "查找以<kbd>Te</kbd>开头的页面。",
+ "apihelp-options-summary": "更改当前用户的参数设置。",
+ "apihelp-options-extended-description": "只有注册在核心或者已安装扩展中的选项,或者具有<code>userjs-</code>键值前缀(旨在被用户脚本使用)的选项可被设置。",
+ "apihelp-options-param-reset": "将参数设置重置为网站默认值。",
+ "apihelp-options-param-resetkinds": "当<var>$1reset</var>选项被设置时,要重置的选项类型列表。",
+ "apihelp-options-param-change": "更改列表,以name=value格式化(例如skin=vector)。如果没提供值(甚至没有等号),例如optionname|otheroption|...,选项将重置为默认值。如果任何传递的值包含管道字符(<kbd>|</kbd>),请改用[[Special:ApiHelp/main#main/datatypes|替代多值分隔符]]以正确操作。",
+ "apihelp-options-param-optionname": "应设置为由<var>$1optionvalue</var>提供值的选项名称。",
+ "apihelp-options-param-optionvalue": "用于由<var>$1optionname</var>指定的选项的值。",
+ "apihelp-options-example-reset": "重置所有用户设置。",
+ "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>设置。",
+ "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>skin</kbd>和<kbd>nickname</kbd>。",
+ "apihelp-paraminfo-summary": "获得关于API模块的信息。",
+ "apihelp-paraminfo-param-modules": "模块名称(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)的列表。可通过<kbd>+</kbd>指定子模块,或通过<kbd>+*</kbd>指定所有子模块,或通过<kbd>+**</kbd>指定所有递归子模块。",
+ "apihelp-paraminfo-param-helpformat": "帮助字符串的格式。",
+ "apihelp-paraminfo-param-querymodules": "查询模块名称(<var>prop</var>、<var>meta</var>或<var>list</var>参数值)的列表。使用<kbd>$1modules=query+foo</kbd>而不是<kbd>$1querymodules=foo</kbd>。",
+ "apihelp-paraminfo-param-mainmodule": "获取有关主要(最高级)模块的信息。也可使用<kbd>$1modules=main</kbd>。",
+ "apihelp-paraminfo-param-pagesetmodule": "获取有关页面设置模块(提供titles=和朋友)的信息。",
+ "apihelp-paraminfo-param-formatmodules": "格式模块名称(<var>format</var>参数的值)的列表。也可使用<var>$1modules</var>。",
+ "apihelp-paraminfo-example-1": "显示<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>、<kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>、<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>和<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>的信息。",
+ "apihelp-paraminfo-example-2": "显示<kbd>[[Special:ApiHelp/query|action=query]]</kbd>的所有子模块的信息。",
+ "apihelp-parse-summary": "解析内容并返回解析器输出。",
+ "apihelp-parse-extended-description": "参见<kbd>[[Special:ApiHelp/query|action=query]]</kbd>的各种prop-module以从页面的当前版本获得信息。\n\n这里有几种方法可以指定解析的文本:\n# 指定一个页面或修订,使用<var>$1page</var>、<var>$1pageid</var>或<var>$1oldid</var>。\n# 明确指定内容,使用<var>$1text</var>、<var>$1title</var>、<var>$1revid</var>和<var>$1contentmodel</var>。\n# 只指定一段摘要解析。<var>$1prop</var>应提供一个空值。",
+ "apihelp-parse-param-title": "文本属于的页面标题。如果省略,<var>$1contentmodel</var>就必须被指定,且[[API]]将作为标题使用。",
+ "apihelp-parse-param-text": "要解析的文本。使用<var>$1title</var>或<var>$1contentmodel</var>以控制内容模型。",
+ "apihelp-parse-param-revid": "修订版本ID,用于<code><nowiki>{{REVISIONID}}</nowiki></code>和类似变体。",
+ "apihelp-parse-param-summary": "要解析的摘要。",
+ "apihelp-parse-param-page": "解析此页的内容。不能与<var>$1text</var>和<var>$1title</var>一起使用。",
+ "apihelp-parse-param-pageid": "解析此页的内容。覆盖<var>$1page</var>。",
+ "apihelp-parse-param-redirects": "如果<var>$1page</var>或<var>$1pageid</var>被设置为一个重定向,则解析它。",
+ "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖<var>$1page</var>和<var>$1pageid</var>。",
+ "apihelp-parse-param-prop": "要获取的信息束:",
+ "apihelp-parse-paramvalue-prop-text": "提供wiki文本中的被解析文本。",
+ "apihelp-parse-paramvalue-prop-langlinks": "在被解析的wiki文本中提供语言链接。",
+ "apihelp-parse-paramvalue-prop-categories": "在被解析的wiki文本中提供分类。",
+ "apihelp-parse-paramvalue-prop-categorieshtml": "提供HTML版本分类。",
+ "apihelp-parse-paramvalue-prop-links": "在被解析的wiki文本中提供内部链接。",
+ "apihelp-parse-paramvalue-prop-templates": "在被解析的wiki文本中提供模板。",
+ "apihelp-parse-paramvalue-prop-images": "在被解析的wiki文本中提供图片。",
+ "apihelp-parse-paramvalue-prop-externallinks": "在被解析的wiki文本中提供外部链接。",
+ "apihelp-parse-paramvalue-prop-sections": "在被解析的wiki文本中提供段落。",
+ "apihelp-parse-paramvalue-prop-revid": "添加被解析页面的修订ID。",
+ "apihelp-parse-paramvalue-prop-displaytitle": "为被解析的wiki文本添加标题。",
+ "apihelp-parse-paramvalue-prop-headitems": "提供项目以插入至页面的<code>&lt;head&gt;</code>。",
+ "apihelp-parse-paramvalue-prop-headhtml": "提供页面的被解析<code>&lt;head&gt;</code>。",
+ "apihelp-parse-paramvalue-prop-modules": "提供在页面中使用的ResourceLoader模块。要加载,请使用<code>mw.loader.using()</code>。无论<kbd>jsconfigvars</kbd>还是<kbd>encodedjsconfigvars</kbd>都必须与<kbd>modules</kbd>共同被请求。",
+ "apihelp-parse-paramvalue-prop-jsconfigvars": "针对页面提供JavaScript配置变量。要应用,请使用<code>mw.config.set()</code>。",
+ "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "针对页面提供JavaScript配置变量为一个JSON字符串。",
+ "apihelp-parse-paramvalue-prop-indicators": "提供页面上使用的页面状态指示器的HTML。",
+ "apihelp-parse-paramvalue-prop-iwlinks": "在被解析的wiki文本中提供跨wiki链接。",
+ "apihelp-parse-paramvalue-prop-wikitext": "提供被解析的原始wiki文本。",
+ "apihelp-parse-paramvalue-prop-properties": "提供多种定义在被解析的wiki文本中的属性。",
+ "apihelp-parse-paramvalue-prop-limitreportdata": "以结构化的方式提供限制报告。如果<var>$1disablelimitreport</var>被设定则不提供数据。",
+ "apihelp-parse-paramvalue-prop-limitreporthtml": "提供限制报告的HTML版本。当<var>$1disablelimitreport</var>被设置时不会提供数据。",
+ "apihelp-parse-paramvalue-prop-parsetree": "修订内容的XML解析树(需要内容模型<code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "在解析内容时提供发生的警告",
+ "apihelp-parse-param-wrapoutputclass": "要用于包裹解析输出的CSS类。",
+ "apihelp-parse-param-pst": "在解析输入前,对输入做一次保存前变换处理。仅当使用文本时有效。",
+ "apihelp-parse-param-onlypst": "在输入内容中执行预保存转换(PST),但不解析它。在PST被应用后返回相同的wiki文本。只当与<var>$1text</var>一起使用时有效。",
+ "apihelp-parse-param-effectivelanglinks": "包含由扩展提供的语言链接(用于与<kbd>$1prop=langlinks</kbd>一起使用)。",
+ "apihelp-parse-param-section": "只解析此段数的内容。\n\n当<kbd>new</kbd>时,将<var>$1text</var>和<var>$1sectiontitle</var>解析为添加新段落至页面。\n\n<kbd>new</kbd>段落只当指定<var>text</var>时允许。",
+ "apihelp-parse-param-sectiontitle": "当<var>section</var>为<kbd>new</kbd>时新段落标题。\n\n不像页面编辑,当省略或为空时将不会备选为<var>summary</var>。",
+ "apihelp-parse-param-disablelimitreport": "从解析器输出中省略限制报告(“NewPP limit report”)。",
+ "apihelp-parse-param-disablepp": "请改用<var>$1disablelimitreport</var>。",
+ "apihelp-parse-param-disableeditsection": "从解析器输出中省略编辑段落链接。",
+ "apihelp-parse-param-disabletidy": "不要在解析器输出中运行HTML清理(例如tidy)。",
+ "apihelp-parse-param-disablestylededuplication": "不要在解析器输出中删除重复的行内样式表。",
+ "apihelp-parse-param-generatexml": "生成XML解析树(需要内容模型<code>$1</code>;被<kbd>$2prop=parsetree</kbd>所取代)。",
+ "apihelp-parse-param-preview": "在预览模式下解析。",
+ "apihelp-parse-param-sectionpreview": "在段落预览模式下解析(同时要启用预览模式)。",
+ "apihelp-parse-param-disabletoc": "在输出中省略目录。",
+ "apihelp-parse-param-useskin": "为解析器输出应用选择的皮肤。会影响以下属性:<kbd>langlinks</kbd>、<kbd>headitems</kbd>、<kbd>modules</kbd>、<kbd>jsconfigvars</kbd>和<kbd>indicators</kbd>。",
+ "apihelp-parse-param-contentformat": "用于输入文本的内容序列化格式。只当与$1text一起使用时有效。",
+ "apihelp-parse-param-contentmodel": "输入文本的内容模型。如果省略,$1title必须指定,并且默认将为指定标题的模型。只当与$1text一起使用时有效。",
+ "apihelp-parse-example-page": "解析一个页面。",
+ "apihelp-parse-example-text": "解析wiki文本。",
+ "apihelp-parse-example-texttitle": "解析wiki文本,指定页面标题。",
+ "apihelp-parse-example-summary": "解析一个摘要。",
+ "apihelp-patrol-summary": "巡查页面或修订版本。",
+ "apihelp-patrol-param-rcid": "要巡查的最近更改 ID。",
+ "apihelp-patrol-param-revid": "要巡查的修订版本ID。",
+ "apihelp-patrol-param-tags": "要在巡查日志中应用到实体的更改标签。",
+ "apihelp-patrol-example-rcid": "巡查一次最近更改。",
+ "apihelp-patrol-example-revid": "巡查一次修订。",
+ "apihelp-protect-summary": "更改页面的保护等级。",
+ "apihelp-protect-param-title": "要(解除)保护的页面标题。不能与$1pageid一起使用。",
+ "apihelp-protect-param-pageid": "要(解除)保护的页面ID。不能与$1title一起使用。",
+ "apihelp-protect-param-protections": "保护等级列表,格式:<kbd>action=level</kbd>(例如<kbd>edit=sysop</kbd>)。等级<kbd>all</kbd>意味着任何人都可以执行操作,也就是说没有限制。\n\n<strong>注意:</strong>未列出的操作将移除限制。",
+ "apihelp-protect-param-expiry": "到期时间戳。如果只有一个时间戳被设置,它将被用于所有保护。使用<kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd>或<kbd>never</kbd>用于永不过期的保护。",
+ "apihelp-protect-param-reason": "(解除)保护的原因。",
+ "apihelp-protect-param-tags": "要在保护日志中应用到实体的更改标签。",
+ "apihelp-protect-param-cascade": "启用连锁保护(也就是保护包含于此页面的页面)。如果所有提供的保护等级不支持连锁,就将其忽略。",
+ "apihelp-protect-param-watch": "如果设置,就加入已开始(解除)保护的页面至当前用户的监视列表。",
+ "apihelp-protect-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-protect-example-protect": "保护一个页面。",
+ "apihelp-protect-example-unprotect": "通过设置限制为<kbd>all</kbd>解除保护一个页面(就是说任何人都可以执行操作)。",
+ "apihelp-protect-example-unprotect2": "通过设置没有限制解除保护一个页面。",
+ "apihelp-purge-summary": "为指定标题刷新缓存。",
+ "apihelp-purge-param-forcelinkupdate": "更新链接表。",
+ "apihelp-purge-param-forcerecursivelinkupdate": "更新链接表中,并更新任何使用此页作为模板的页面的链接表。",
+ "apihelp-purge-example-simple": "刷新<kbd>Main Page</kbd>和<kbd>API</kbd>页面。",
+ "apihelp-purge-example-generator": "刷新主名字空间的前10个页面。",
+ "apihelp-query-summary": "取得来自并有关MediaWiki的数据。",
+ "apihelp-query-extended-description": "所有数据修改将首先不得不使用查询来获得令牌,以阻止来自恶意网站的滥用行为。",
+ "apihelp-query-param-prop": "要为已查询页面获取的属性。",
+ "apihelp-query-param-list": "要获取的列表。",
+ "apihelp-query-param-meta": "要获取的元数据。",
+ "apihelp-query-param-indexpageids": "包含一个额外的pageid段落,列举所有返回的页面ID。",
+ "apihelp-query-param-export": "导出所有指定或生成页面的当前修订。",
+ "apihelp-query-param-exportnowrap": "返回导出XML,不需要将其包裹在一个XML结果中(与[[Special:Export]]格式相同)。只能与$1export一起使用。",
+ "apihelp-query-param-iwurl": "如果标题是一个跨wiki链接的话,是否获取完整URL。",
+ "apihelp-query-param-rawcontinue": "为继续返回原始<samp>query-continue</samp>数据。",
+ "apihelp-query-example-revisions": "获取<kbd>Main Page</kbd>的[[Special:ApiHelp/query+siteinfo|网站信息]]和[[Special:ApiHelp/query+revisions|修订版本]]。",
+ "apihelp-query-example-allpages": "获取以<kbd>API/</kbd>开头的页面的修订版本。",
+ "apihelp-query+allcategories-summary": "列举所有分类。",
+ "apihelp-query+allcategories-param-from": "要作为枚举起始点的类别。",
+ "apihelp-query+allcategories-param-to": "要作为枚举终止点的类别。",
+ "apihelp-query+allcategories-param-prefix": "搜索所有以此值开头的分类标题。",
+ "apihelp-query+allcategories-param-dir": "排序方向。",
+ "apihelp-query+allcategories-param-min": "只返回至少带这么多成员的分类。",
+ "apihelp-query+allcategories-param-max": "只返回最多带这么多成员的分类。",
+ "apihelp-query+allcategories-param-limit": "要返回多少个类别。",
+ "apihelp-query+allcategories-param-prop": "要获取的属性:",
+ "apihelp-query+allcategories-paramvalue-prop-size": "在分类中添加页面数。",
+ "apihelp-query+allcategories-paramvalue-prop-hidden": "标记由<code>_&#95;HIDDENCAT_&#95;</code>隐藏的分类。",
+ "apihelp-query+allcategories-example-size": "列出分类及其含有多少页面的信息。",
+ "apihelp-query+allcategories-example-generator": "为以<kbd>List</kbd>的分类检索有关分类页面本身的信息。",
+ "apihelp-query+alldeletedrevisions-summary": "列举由一位用户或在一个名字空间中所有已删除的修订。",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "只可以与<var>$3user</var>一起使用。",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能与<var>$3user</var>一起使用。",
+ "apihelp-query+alldeletedrevisions-param-start": "枚举的起始时间戳。",
+ "apihelp-query+alldeletedrevisions-param-end": "枚举的结束时间戳。",
+ "apihelp-query+alldeletedrevisions-param-from": "从此标题开始列出。",
+ "apihelp-query+alldeletedrevisions-param-to": "列出至此标题为止。",
+ "apihelp-query+alldeletedrevisions-param-prefix": "搜索所有以此值开头的页面标题。",
+ "apihelp-query+alldeletedrevisions-param-tag": "只列出被此标签标记的修订。",
+ "apihelp-query+alldeletedrevisions-param-user": "只列出此用户做出的修订。",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
+ "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>注意:</strong>由于[[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模式]],同时使用<var>$1user</var>和<var>$1namespace</var>将导致继续前返回少于<var>$1limit</var>个结果,在极端条件下可能不返回任何结果。",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "当作为生成器使用时,生成标题而不是修订ID。",
+ "apihelp-query+alldeletedrevisions-example-user": "列出由<kbd>Example</kbd>作出的最近50次已删除贡献。",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "列出前50次已删除的主名字空间修订。",
+ "apihelp-query+allfileusages-summary": "列出所有文件用途,包括不存在的。",
+ "apihelp-query+allfileusages-param-from": "要列举的起始文件标题。",
+ "apihelp-query+allfileusages-param-to": "要列举的最终文件标题。",
+ "apihelp-query+allfileusages-param-prefix": "搜索所有以此值开头的文件标题。",
+ "apihelp-query+allfileusages-param-unique": "只显示明显的文件标题。不能与$1prop=ids一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
+ "apihelp-query+allfileusages-param-prop": "要包含的信息束:",
+ "apihelp-query+allfileusages-paramvalue-prop-ids": "添加使用中的页面的页面ID(不能与$1unique一起使用)。",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "添加文件的标题。",
+ "apihelp-query+allfileusages-param-limit": "要返回的总计项目。",
+ "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
+ "apihelp-query+allfileusages-example-B": "列举文件标题,包含丢失的文件、它们来自的页面ID,以<kbd>B</kbd>开头。",
+ "apihelp-query+allfileusages-example-unique": "列出唯一文件标题。",
+ "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者。",
+ "apihelp-query+allfileusages-example-generator": "获取包含这些文件的页面。",
+ "apihelp-query+allimages-summary": "按顺序枚举所有图像。",
+ "apihelp-query+allimages-param-sort": "要作为排序方式的属性。",
+ "apihelp-query+allimages-param-dir": "罗列所采用的方向。",
+ "apihelp-query+allimages-param-from": "要列举的起始图片标题。只能与$1sort=name一起使用。",
+ "apihelp-query+allimages-param-to": "要列举的最终图片标题。只能与$1sort=name一起使用。",
+ "apihelp-query+allimages-param-start": "要列举的起始时间戳。只能与$1sort=timestamp一起使用。",
+ "apihelp-query+allimages-param-end": "要列举的最终时间戳。只能与$1sort=timestamp一起使用。",
+ "apihelp-query+allimages-param-prefix": "搜索所有以此值开头的图像标题。只能与$1sort=name一起使用。",
+ "apihelp-query+allimages-param-minsize": "限于至少这么多字节的图像。",
+ "apihelp-query+allimages-param-maxsize": "限于顶多这么多字节的图像。",
+ "apihelp-query+allimages-param-sha1": "图像的 SHA1 哈希。覆盖$1sha1base36。",
+ "apihelp-query+allimages-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
+ "apihelp-query+allimages-param-user": "只返回此用户上传的文件。只能与$1sort=timestamp一起使用。不能与$1filterbots一起使用。",
+ "apihelp-query+allimages-param-filterbots": "如何过滤由机器人上传的文件。只能与$1sort=timestamp一起使用。不能与$1user一起使用。",
+ "apihelp-query+allimages-param-mime": "要搜索的MIME类型,例如<kbd>image/jpeg</kbd>。",
+ "apihelp-query+allimages-param-limit": "共计要返回多少图像。",
+ "apihelp-query+allimages-example-B": "显示以字母<kbd>B</kbd>开始的文件列表。",
+ "apihelp-query+allimages-example-recent": "显示一个最近上传文件的列表,类似[[Special:NewFiles]]。",
+ "apihelp-query+allimages-example-mimetypes": "显示带MIME类型<kbd>image/png</kbd>或<kbd>image/gif</kbd>的文件列表",
+ "apihelp-query+allimages-example-generator": "显示有关4个以<kbd>T</kbd>开头的文件的信息。",
+ "apihelp-query+alllinks-summary": "列举所有指向至指定名字空间的链接。",
+ "apihelp-query+alllinks-param-from": "要列举的起始标题链接。",
+ "apihelp-query+alllinks-param-to": "要列举的最终标题链接。",
+ "apihelp-query+alllinks-param-prefix": "搜索所有以此值开头的已链接标题。",
+ "apihelp-query+alllinks-param-unique": "只显示明显的链接标题。不能与<kbd>$1prop=ids</kbd>一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
+ "apihelp-query+alllinks-param-prop": "要包含的信息束:",
+ "apihelp-query+alllinks-paramvalue-prop-ids": "添加链接中的页面的页面ID(不能与<var>$1unique</var>一起使用)。",
+ "apihelp-query+alllinks-paramvalue-prop-title": "添加链接的标题。",
+ "apihelp-query+alllinks-param-namespace": "要列举的名字空间。",
+ "apihelp-query+alllinks-param-limit": "总共要返回多少个项目。",
+ "apihelp-query+alllinks-param-dir": "列出方向。",
+ "apihelp-query+alllinks-example-B": "列出链接的标题,包括丢失的,带它们来自的页面ID,以<kbd>B</kbd>开头。",
+ "apihelp-query+alllinks-example-unique": "列出唯一的链接标题。",
+ "apihelp-query+alllinks-example-unique-generator": "获取所有已链接的标题,标记缺少的。",
+ "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面。",
+ "apihelp-query+allmessages-summary": "返回来自该网站的消息。",
+ "apihelp-query+allmessages-param-messages": "要输出的消息。<kbd>*</kbd>(默认)表示所有消息。",
+ "apihelp-query+allmessages-param-prop": "要获取的属性。",
+ "apihelp-query+allmessages-param-enableparser": "设置以启用解析器,将处理消息的wiki文本(替代魔术字、处理模板等)。",
+ "apihelp-query+allmessages-param-nocontent": "如果设置,不要在输出中包含消息内容。",
+ "apihelp-query+allmessages-param-includelocal": "也包括本地消息,也就是不存在于软件但存在于{{ns:MediaWiki}}名字空间的消息。\n这会列举所有{{ns:MediaWiki}}名字空间页面,因此它也将列举那些不是真消息的消息,例如[[MediaWiki:Common.js|Common.js]]。",
+ "apihelp-query+allmessages-param-args": "要替代进消息的参数。",
+ "apihelp-query+allmessages-param-filter": "只返回名称包含此字符串的消息。",
+ "apihelp-query+allmessages-param-customised": "只返回在此定制情形下的消息。",
+ "apihelp-query+allmessages-param-lang": "返回这种语言的信息。",
+ "apihelp-query+allmessages-param-from": "从此消息开始返回消息。",
+ "apihelp-query+allmessages-param-to": "返回消息至此消息为止。",
+ "apihelp-query+allmessages-param-title": "当解析消息时,要用作环境的页面(用于$1enableparser选项)。",
+ "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
+ "apihelp-query+allmessages-example-ipb": "显示以<kbd>ipb-</kbd>开始的消息。",
+ "apihelp-query+allmessages-example-de": "显示德语版的<kbd>august</kbd>和<kbd>mainpage</kbd>消息。",
+ "apihelp-query+allpages-summary": "循序列举在指定名字空间中的所有页面。",
+ "apihelp-query+allpages-param-from": "枚举的起始页面标题。",
+ "apihelp-query+allpages-param-to": "枚举的结束页面标题。",
+ "apihelp-query+allpages-param-prefix": "搜索所有以此值开头的页面标题。",
+ "apihelp-query+allpages-param-namespace": "要列举的名字空间。",
+ "apihelp-query+allpages-param-filterredir": "要列出哪些页面。",
+ "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
+ "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
+ "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
+ "apihelp-query+allpages-param-prlevel": "过滤基于保护等级的保护(必须与$1prtype=参数一起使用)。",
+ "apihelp-query+allpages-param-prfiltercascade": "过滤基于cascadingness的保护(当$1prtype未设置时忽略)。",
+ "apihelp-query+allpages-param-limit": "返回的总计页面数。",
+ "apihelp-query+allpages-param-dir": "罗列所采用的方向。",
+ "apihelp-query+allpages-param-filterlanglinks": "过滤基于页面是否有语言链接。注意这可能不考虑由扩展添加的语言链接。",
+ "apihelp-query+allpages-param-prexpiry": "要在页面上过滤的保护期限:\n;indefinite:只获取带无限期保护的页面。\n;definite:只获取带指定保护期限的页面。\n;all:获取任意保护期限的页面。",
+ "apihelp-query+allpages-example-B": "显示以字母<kbd>B</kbd>开头的页面的列表。",
+ "apihelp-query+allpages-example-generator": "显示有关4个以字母<kbd>T</kbd>开头的页面的信息。",
+ "apihelp-query+allpages-example-generator-revisions": "显示前2个以<kbd>Re</kbd>开头的非重定向页面的内容。",
+ "apihelp-query+allredirects-summary": "列出至一个名字空间的重定向。",
+ "apihelp-query+allredirects-param-from": "要列举的起始重定向标题。",
+ "apihelp-query+allredirects-param-to": "要列举的最终重定向标题。",
+ "apihelp-query+allredirects-param-prefix": "搜索所有以此值开头的目标页面。",
+ "apihelp-query+allredirects-param-unique": "只显示明显的目标页面。不能与$1prop=ids|fragment|interwiki一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
+ "apihelp-query+allredirects-param-prop": "要包含的信息束:",
+ "apihelp-query+allredirects-paramvalue-prop-ids": "添加重定向页面的页面ID(不能与<var>$1unique</var>一起使用)。",
+ "apihelp-query+allredirects-paramvalue-prop-title": "添加重定向的标题。",
+ "apihelp-query+allredirects-paramvalue-prop-fragment": "添加来自重定向的碎片,如果有(不能与<var>$1unique</var>一起使用)。",
+ "apihelp-query+allredirects-paramvalue-prop-interwiki": "添加来自重定向的跨wiki前缀,如果有(不能与<var>$1unique</var>一起使用)。",
+ "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
+ "apihelp-query+allredirects-param-limit": "返回的总计项目数。",
+ "apihelp-query+allredirects-param-dir": "罗列所采用的方向。",
+ "apihelp-query+allredirects-example-B": "列举目标页面,包含丢失的页面、它们来自的页面ID,以<kbd>B</kbd>开头。",
+ "apihelp-query+allredirects-example-unique": "列出孤立目标页面。",
+ "apihelp-query+allredirects-example-unique-generator": "获取所有目标页面,标记丢失的。",
+ "apihelp-query+allredirects-example-generator": "获取包含重定向的页面。",
+ "apihelp-query+allrevisions-summary": "列举所有修订。",
+ "apihelp-query+allrevisions-param-start": "枚举的起始时间戳。",
+ "apihelp-query+allrevisions-param-end": "枚举的结束时间戳。",
+ "apihelp-query+allrevisions-param-user": "只列出此用户做出的修订。",
+ "apihelp-query+allrevisions-param-excludeuser": "不要列出此用户做出的修订。",
+ "apihelp-query+allrevisions-param-namespace": "只列出此名字空间的页面。",
+ "apihelp-query+allrevisions-param-generatetitles": "当作为生成器使用时,生成标题而不是修订ID。",
+ "apihelp-query+allrevisions-example-user": "列出由用户<kbd>Example</kbd>作出的最近50次贡献。",
+ "apihelp-query+allrevisions-example-ns-main": "列举主名字空间中的前50次修订。",
+ "apihelp-query+mystashedfiles-summary": "获取当前用户上传暂存库中的文件列表。",
+ "apihelp-query+mystashedfiles-param-prop": "要检索文件的属性。",
+ "apihelp-query+mystashedfiles-paramvalue-prop-size": "检索文件大小和图片尺寸。",
+ "apihelp-query+mystashedfiles-paramvalue-prop-type": "检索文件的MIME类型和媒体类型。",
+ "apihelp-query+mystashedfiles-param-limit": "要获取文件的数量。",
+ "apihelp-query+mystashedfiles-example-simple": "获取当前用户上传暂存库中的文件的filekey、大小和像素尺寸。",
+ "apihelp-query+alltransclusions-summary": "列出所有嵌入页面(使用&#123;&#123;x&#125;&#125;嵌入的页面),包括不存在的。",
+ "apihelp-query+alltransclusions-param-from": "要列举的起始嵌入标题。",
+ "apihelp-query+alltransclusions-param-to": "要列举的最终嵌入标题。",
+ "apihelp-query+alltransclusions-param-prefix": "搜索所有以此值开头的嵌入的标题。",
+ "apihelp-query+alltransclusions-param-unique": "只显示明显的被嵌入标题。不能与$1prop=ids一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
+ "apihelp-query+alltransclusions-param-prop": "要包含的信息束:",
+ "apihelp-query+alltransclusions-paramvalue-prop-ids": "添加嵌入中的页面的页面ID(不能与$1unique一起使用)。",
+ "apihelp-query+alltransclusions-paramvalue-prop-title": "添加嵌入的标题。",
+ "apihelp-query+alltransclusions-param-namespace": "要列举的名字空间。",
+ "apihelp-query+alltransclusions-param-limit": "要返回的总计项目。",
+ "apihelp-query+alltransclusions-param-dir": "罗列所采用的方向。",
+ "apihelp-query+alltransclusions-example-B": "列出嵌入的标题,包括丢失的,带有来自的页面ID,从<kbd>B</kbd>开始。",
+ "apihelp-query+alltransclusions-example-unique": "列出孤立嵌入标题",
+ "apihelp-query+alltransclusions-example-unique-generator": "获取所有嵌入的标题,并标记缺失的。",
+ "apihelp-query+alltransclusions-example-generator": "获得包含嵌入内容的页面。",
+ "apihelp-query+allusers-summary": "列举所有注册用户。",
+ "apihelp-query+allusers-param-from": "枚举的起始用户名。",
+ "apihelp-query+allusers-param-to": "枚举的结束用户名。",
+ "apihelp-query+allusers-param-prefix": "搜索所有以此值开头的用户。",
+ "apihelp-query+allusers-param-dir": "排序方向。",
+ "apihelp-query+allusers-param-group": "只包含指定组中的用户。",
+ "apihelp-query+allusers-param-excludegroup": "排除指定组中的用户。",
+ "apihelp-query+allusers-param-rights": "仅列出有所选权限的用户。不包括隐性的或自动加入的用户组别(如*、用户或自动确认用户)所授予的权限。",
+ "apihelp-query+allusers-param-prop": "要包含的信息束:",
+ "apihelp-query+allusers-paramvalue-prop-blockinfo": "添加有关用户当前封禁的信息。",
+ "apihelp-query+allusers-paramvalue-prop-groups": "列举用户所在的组。这使用更多服务器资源,并可能返回少于限制的结果。",
+ "apihelp-query+allusers-paramvalue-prop-implicitgroups": "列出用户自动属于的所有组。",
+ "apihelp-query+allusers-paramvalue-prop-rights": "用户拥有的权限列表。",
+ "apihelp-query+allusers-paramvalue-prop-editcount": "添加用户的编辑计数。",
+ "apihelp-query+allusers-paramvalue-prop-registration": "如果可能,添加用户注册时的时间戳(可能为空白)。",
+ "apihelp-query+allusers-paramvalue-prop-centralids": "添加中心ID并为用户附加状态。",
+ "apihelp-query+allusers-param-limit": "返回的总计用户数。",
+ "apihelp-query+allusers-param-witheditsonly": "只列出有编辑的用户。",
+ "apihelp-query+allusers-param-activeusers": "只列出最近$1{{PLURAL:$1|天}}内活跃的用户。",
+ "apihelp-query+allusers-param-attachedwiki": "与<kbd>$1prop=centralids</kbd>一起使用,也表明用户是否附加于此ID定义的wiki。",
+ "apihelp-query+allusers-example-Y": "列出以<kbd>Y</kbd>开头的用户。",
+ "apihelp-query+authmanagerinfo-summary": "检索有关当前身份验证状态的信息。",
+ "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "测试用户当前的身份验证状态是否足够用于指定的安全敏感操作。",
+ "apihelp-query+authmanagerinfo-param-requestsfor": "取得指定身份验证操作所需的有关身份验证请求的信息。",
+ "apihelp-query+authmanagerinfo-example-login": "检索当开始登录时可能使用的请求。",
+ "apihelp-query+authmanagerinfo-example-login-merged": "检索当开始登录时可能使用的请求,并合并表单字段。",
+ "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "测试身份验证对操作<kbd>foo</kbd>是否足够。",
+ "apihelp-query+backlinks-summary": "查找所有链接至指定页面的页面。",
+ "apihelp-query+backlinks-param-title": "要搜索的标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-query+backlinks-param-pageid": "要搜索的页面ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-query+backlinks-param-namespace": "要列举的名字空间。",
+ "apihelp-query+backlinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+backlinks-param-filterredir": "如何过滤重定向。当<var>$1redirect</var>被启用时如果设置为<kbd>nonredirects</kbd>,这只会应用到第二级。",
+ "apihelp-query+backlinks-param-limit": "返回总计页面数。如果<var>$1redirect</var>被启用,则限定分别适用于每一等级(这意味着将返回多达2 * <var>$1limit</var>个结果)。",
+ "apihelp-query+backlinks-param-redirect": "如果链入页面是一个重定向,则寻找所有链接至此重定向的页面。最大限制减半。",
+ "apihelp-query+backlinks-example-simple": "显示至<kbd>Main page</kbd>的链接。",
+ "apihelp-query+backlinks-example-generator": "获取关于链接至<kbd>Main page</kbd>的页面的信息。",
+ "apihelp-query+blocks-summary": "列出所有被封禁的用户和IP地址。",
+ "apihelp-query+blocks-param-start": "枚举的起始时间戳。",
+ "apihelp-query+blocks-param-end": "枚举的结束时间戳。",
+ "apihelp-query+blocks-param-ids": "要列出的封禁ID列表(可选)。",
+ "apihelp-query+blocks-param-users": "要搜索的用户列表(可选)。",
+ "apihelp-query+blocks-param-ip": "获取应用到此IP地址或者CIDR范围的所有封禁,包括范围封禁。不能与<var>$3users</var>一起使用。CIDR范围不允许比IPv4/$1或IPv6/$2更宽。",
+ "apihelp-query+blocks-param-limit": "封禁列表的最大数量。",
+ "apihelp-query+blocks-param-prop": "要获取的属性:",
+ "apihelp-query+blocks-paramvalue-prop-id": "添加封禁ID。",
+ "apihelp-query+blocks-paramvalue-prop-user": "添加被封禁用户的用户名。",
+ "apihelp-query+blocks-paramvalue-prop-userid": "添加被封禁用户的用户ID。",
+ "apihelp-query+blocks-paramvalue-prop-by": "添加执行封禁的用户的用户名。",
+ "apihelp-query+blocks-paramvalue-prop-byid": "添加执行封禁的用户的用户ID。",
+ "apihelp-query+blocks-paramvalue-prop-timestamp": "添加封禁生效时的时间戳。",
+ "apihelp-query+blocks-paramvalue-prop-expiry": "添加封禁截止时的时间戳。",
+ "apihelp-query+blocks-paramvalue-prop-reason": "添加封禁原因。",
+ "apihelp-query+blocks-paramvalue-prop-range": "添加受封禁影响的IP地址段。",
+ "apihelp-query+blocks-paramvalue-prop-flags": "标记编辑禁止(自动封禁、仅限匿名用户等)。",
+ "apihelp-query+blocks-param-show": "只显示符合这些标准的项目。\n例如,要只查看IP地址的无限期封禁,设置<kbd>$1show=ip|!temp</kbd>。",
+ "apihelp-query+blocks-example-simple": "封禁列表。",
+ "apihelp-query+blocks-example-users": "列出用户<kbd>Alice</kbd>和<kbd>Bob</kbd>的封禁。",
+ "apihelp-query+categories-summary": "页面属于的所有分类列表。",
+ "apihelp-query+categories-param-prop": "要为每个分类获取的额外属性:",
+ "apihelp-query+categories-paramvalue-prop-sortkey": "为每个分类添加关键词(十六进制字符串)和关键词前缀(人类可读部分)。",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "添加分类添加时的时间戳。",
+ "apihelp-query+categories-paramvalue-prop-hidden": "标记由<code>_&#95;HIDDENCAT_&#95;</code>隐藏的分类。",
+ "apihelp-query+categories-param-show": "显示何种分类。",
+ "apihelp-query+categories-param-limit": "返回多少分类。",
+ "apihelp-query+categories-param-categories": "只列出这些分类。对于检查某一页面使用某一分类很有用。",
+ "apihelp-query+categories-param-dir": "罗列所采用的方向。",
+ "apihelp-query+categories-example-simple": "获取属于<kbd>Albert Einstein</kbd>的分类列表。",
+ "apihelp-query+categories-example-generator": "获取有关用于<kbd>Albert Einstein</kbd>的分类的信息。",
+ "apihelp-query+categoryinfo-summary": "返回有关给定分类的信息。",
+ "apihelp-query+categoryinfo-example-simple": "获取有关<kbd>Category:Foo</kbd>和<kbd>Category:Bar</kbd>的信息。",
+ "apihelp-query+categorymembers-summary": "在指定的分类中列出所有页面。",
+ "apihelp-query+categorymembers-param-title": "要列举的分类(必需)。必须包括<kbd>{{ns:category}}:</kbd>前缀。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-query+categorymembers-param-pageid": "要枚举的分类的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-query+categorymembers-param-prop": "要包含的信息束:",
+ "apihelp-query+categorymembers-paramvalue-prop-ids": "添加页面ID。",
+ "apihelp-query+categorymembers-paramvalue-prop-title": "添加页面标题和名字空间ID。",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkey": "添加用于分类中排序的关键字(十六进制字符串)。",
+ "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "添加用于分类中排序的关键字前缀(关键字的人类可读部分)。",
+ "apihelp-query+categorymembers-paramvalue-prop-type": "添加页面被分类的类型(<samp>page</samp>、<samp>subcat</samp>或<samp>file</samp>)。",
+ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "添加页面被包括时的时间戳。",
+ "apihelp-query+categorymembers-param-namespace": "仅包含这些名字空间的页面。注意<kbd>$1type=subcat</kbd>或<kbd>$1type=file</kbd>可能被使用,而不是<kbd>$1namespace=14</kbd>或<kbd>6</kbd>。",
+ "apihelp-query+categorymembers-param-type": "包含的分类成员类型。当<kbd>$1sort=timestamp</kbd>被设置时会忽略。",
+ "apihelp-query+categorymembers-param-limit": "返回页面的最大数量。",
+ "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
+ "apihelp-query+categorymembers-param-dir": "排序的方向。",
+ "apihelp-query+categorymembers-param-start": "开始列举的时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-end": "列举的结尾时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-starthexsortkey": "开始列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-endhexsortkey": "结束列举的关键字,由<kbd>$1prop=sortkey</kbd>返回。只能与<kbd>$1sort=sortkey</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "要开始列举的排序关键词前缀。只能与<kbd>$1sort=sortkey</kbd>一起使用。覆盖<var>$1starthexsortkey</var>。",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "要结束列举<strong>before</strong>的关键字前缀(而不是<strong>at</strong>;如果此值出现,它将不被包括!)只能与$1sort=sortkey一起使用。覆盖$1endhexsortkey。",
+ "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
+ "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
+ "apihelp-query+categorymembers-example-simple": "获取<kbd>Category:Physics</kbd>中的前10个页面。",
+ "apihelp-query+categorymembers-example-generator": "获取有关<kbd>Category:Physics</kbd>中的前10个页面的页面信息。",
+ "apihelp-query+contributors-summary": "获取对一个页面的登录贡献者列表和匿名贡献数。",
+ "apihelp-query+contributors-param-group": "只包括指定用户组中的用户。不包括隐性的或自动提升的用户组,例如*、用户或自动确认用户。",
+ "apihelp-query+contributors-param-excludegroup": "排除指定用户组中的用户。不包括隐性的或自动提升的用户组,例如*、用户或自动确认用户。",
+ "apihelp-query+contributors-param-rights": "只包括拥有指定权限的用户。不包括隐性的或自动提升的用户组,例如*、用户或自动确认用户。",
+ "apihelp-query+contributors-param-excluderights": "排除拥有指定权限的用户。不包括隐性的或自动提升的用户组,例如*、用户或自动确认用户。",
+ "apihelp-query+contributors-param-limit": "返回的贡献数。",
+ "apihelp-query+contributors-example-simple": "显示<kbd>Main Page</kbd>的贡献。",
+ "apihelp-query+deletedrevisions-summary": "获取删除的修订版本信息。",
+ "apihelp-query+deletedrevisions-extended-description": "可在很多途径中使用:\n# 获得一组页面的已删除修订,通过设置标题或页面ID。以标题和时间戳排序。\n# 通过设置它们的ID与修订ID获得关于一组已删除修订。以修订ID排序。",
+ "apihelp-query+deletedrevisions-param-start": "要开始枚举的时间戳。当处理修订ID列表时会被忽略。",
+ "apihelp-query+deletedrevisions-param-end": "要停止枚举的时间戳。当处理修订ID列表时会被忽略。",
+ "apihelp-query+deletedrevisions-param-tag": "只列出被此标签标记的修订。",
+ "apihelp-query+deletedrevisions-param-user": "只列出此用户做出的修订。",
+ "apihelp-query+deletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
+ "apihelp-query+deletedrevisions-example-titles": "列出页面<kbd>Main Page</kbd>和<kbd>Talk:Main Page</kbd>的已删除修订,包含内容。",
+ "apihelp-query+deletedrevisions-example-revids": "列出已删除修订<kbd>123456</kbd>的信息。",
+ "apihelp-query+deletedrevs-summary": "列举删除的修订版本。",
+ "apihelp-query+deletedrevs-extended-description": "操作于三种模式中:\n# 为指定标题列举已删除修订,按时间戳排列。\n# 为指定用户列举已删除贡献,按时间戳排列(未指定标题)。\n# 在指定名字空间中列举所有已删除修订,按标题和时间戳排列(无指定标题,未设置$1user)。\n\n任一参数只应用于一些模式,并忽略其他参数。",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
+ "apihelp-query+deletedrevs-param-start": "枚举的起始时间戳。",
+ "apihelp-query+deletedrevs-param-end": "枚举的结束时间戳。",
+ "apihelp-query+deletedrevs-param-from": "从此标题开始列出。",
+ "apihelp-query+deletedrevs-param-to": "列出至此标题为止。",
+ "apihelp-query+deletedrevs-param-prefix": "搜索所有以此值开头的页面标题。",
+ "apihelp-query+deletedrevs-param-unique": "每个页面只列出一个修订。",
+ "apihelp-query+deletedrevs-param-tag": "只列出被此标签标记的修订。",
+ "apihelp-query+deletedrevs-param-user": "只列出此用户做出的修订。",
+ "apihelp-query+deletedrevs-param-excludeuser": "不要列出此用户做出的修订。",
+ "apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
+ "apihelp-query+deletedrevs-param-limit": "要列出的最大修订数量。",
+ "apihelp-query+deletedrevs-param-prop": "要获取的属性:\n;revid:添加被删除修订的修订ID。\n;parentid:添加上一修订的修订ID至页面。\n;user:添加做出修订的用户。\n;userid:添加做出修订的用户ID。\n;comment:添加修订摘要。\n;parsedcomment:添加解析过的修订摘要。\n;minor:如果修订是小编辑则加标签。\n;len:添加修订长度(字节)。\n;sha1:添加修订的SHA-1(base 16)。\n;content:添加修订内容。\n;token:<span class=\"apihelp-deprecated\">已弃用。</span>提供编辑令牌。\n;tags:修订标签。",
+ "apihelp-query+deletedrevs-example-mode1": "列出最近已删除的对页面<kbd>Main Page</kbd>和<kbd>Talk:Main Page</kbd>的贡献,带内容(模式1)。",
+ "apihelp-query+deletedrevs-example-mode2": "列出由<kbd>Bob</kbd>作出的最近50次已删除贡献(模式2)。",
+ "apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)。",
+ "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次{{ns:talk}}名字空间已删除页面(模式3)。",
+ "apihelp-query+disabled-summary": "此查询模块已被禁用。",
+ "apihelp-query+duplicatefiles-summary": "根据哈希值列出此给定文件的所有副本。",
+ "apihelp-query+duplicatefiles-param-limit": "返回多少重复文件。",
+ "apihelp-query+duplicatefiles-param-dir": "罗列所采用的方向。",
+ "apihelp-query+duplicatefiles-param-localonly": "只看本地存储库的文件。",
+ "apihelp-query+duplicatefiles-example-simple": "查找与[[:File:Albert Einstein Head.jpg]]重复的文件。",
+ "apihelp-query+duplicatefiles-example-generated": "查找所有文件的重复文件。",
+ "apihelp-query+embeddedin-summary": "查找所有嵌入指定标题的页面。",
+ "apihelp-query+embeddedin-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+ "apihelp-query+embeddedin-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+ "apihelp-query+embeddedin-param-namespace": "列举的名字空间。",
+ "apihelp-query+embeddedin-param-dir": "罗列所采用的方向。",
+ "apihelp-query+embeddedin-param-filterredir": "如何过滤重定向。",
+ "apihelp-query+embeddedin-param-limit": "返回的总计页面数。",
+ "apihelp-query+embeddedin-example-simple": "显示嵌入<kbd>Template:Stub</kbd>的页面。",
+ "apihelp-query+embeddedin-example-generator": "获取有关显示嵌入<kbd>Template:Stub</kbd>的页面的信息。",
+ "apihelp-query+extlinks-summary": "从指定页面返回所有外部URL(非跨wiki链接)。",
+ "apihelp-query+extlinks-param-limit": "返回多少链接。",
+ "apihelp-query+extlinks-param-protocol": "URL协议。如果为空并且<var>$1query</var>被设置,协议为<kbd>http</kbd>。将此和<var>$1query</var>都留空以列举所有外部链接。",
+ "apihelp-query+extlinks-param-query": "不使用协议搜索字符串。对于检查某一页面是否包含某一外部URL很有用。",
+ "apihelp-query+extlinks-param-expandurl": "扩展协议相对URL与规范协议。",
+ "apihelp-query+extlinks-example-simple": "获取<kbd>Main Page</kbd>的外部链接列表。",
+ "apihelp-query+exturlusage-summary": "列举包含一个指定URL的页面。",
+ "apihelp-query+exturlusage-param-prop": "要包含的信息束:",
+ "apihelp-query+exturlusage-paramvalue-prop-ids": "添加页面ID。",
+ "apihelp-query+exturlusage-paramvalue-prop-title": "添加页面的标题和名字空间ID。",
+ "apihelp-query+exturlusage-paramvalue-prop-url": "添加页面中使用的URL。",
+ "apihelp-query+exturlusage-param-protocol": "URL协议。如果为空并且<var>$1query</var>被设置,协议为<kbd>http</kbd>。将此和<var>$1query</var>都留空以列举所有外部链接。",
+ "apihelp-query+exturlusage-param-query": "不包括协议的搜索字符串。参见[[Special:LinkSearch]]。留空以列出所有外部链接。",
+ "apihelp-query+exturlusage-param-namespace": "要列举的页面名字空间。",
+ "apihelp-query+exturlusage-param-limit": "返回多少页面。",
+ "apihelp-query+exturlusage-param-expandurl": "用标准协议展开协议相关URL。",
+ "apihelp-query+exturlusage-example-simple": "显示链接至<kbd>https://www.mediawiki.org</kbd>的页面。",
+ "apihelp-query+filearchive-summary": "循序列举所有被删除的文件。",
+ "apihelp-query+filearchive-param-from": "枚举的起始图片标题。",
+ "apihelp-query+filearchive-param-to": "枚举的结束图片标题。",
+ "apihelp-query+filearchive-param-prefix": "搜索所有以此值开头的图像标题。",
+ "apihelp-query+filearchive-param-limit": "返回图像的总数。",
+ "apihelp-query+filearchive-param-dir": "罗列所采用的方向。",
+ "apihelp-query+filearchive-param-sha1": "图片的SHA1哈希值。覆盖$1sha1base36。",
+ "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
+ "apihelp-query+filearchive-param-prop": "要获取的图片信息:",
+ "apihelp-query+filearchive-paramvalue-prop-sha1": "为文件加入SHA-1哈希值。",
+ "apihelp-query+filearchive-paramvalue-prop-timestamp": "为已上传版本添加时间戳。",
+ "apihelp-query+filearchive-paramvalue-prop-user": "添加上传了图片版本的用户。",
+ "apihelp-query+filearchive-paramvalue-prop-size": "添加图片大小(字节)及其高度、宽度和页面计数(如果可以)。",
+ "apihelp-query+filearchive-paramvalue-prop-dimensions": "用于大小的别名。",
+ "apihelp-query+filearchive-paramvalue-prop-description": "添加图片版本的说明。",
+ "apihelp-query+filearchive-paramvalue-prop-parseddescription": "解析版本的描述。",
+ "apihelp-query+filearchive-paramvalue-prop-mime": "添加图片的MIME。",
+ "apihelp-query+filearchive-paramvalue-prop-mediatype": "添加图片的媒体类型。",
+ "apihelp-query+filearchive-paramvalue-prop-metadata": "为图片版本列出Exif元数据。",
+ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "添加版本的字节深度。",
+ "apihelp-query+filearchive-paramvalue-prop-archivename": "添加用于非最新版本的存档版本的文件名。",
+ "apihelp-query+filearchive-example-simple": "显示已删除文件列表。",
+ "apihelp-query+filerepoinfo-summary": "返回有关wiki配置的图片存储库的元信息。",
+ "apihelp-query+filerepoinfo-param-prop": "要获取的存储库属性(这在一些wiki上可能有更多可用选项):\n;apiurl:链接至API的URL - 对从主机获取图片信息有用。\n;name:存储库关键词 - 用于例如<var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var>,并且[[Special:ApiHelp/query+imageinfo|imageinfo]]会返回值。\n;displayname:人类可读的存储库wiki名称。\n;rooturl:图片路径的根URL。\n;local:存储库是否在本地。",
+ "apihelp-query+filerepoinfo-example-simple": "获得有关文件存储库的信息。",
+ "apihelp-query+fileusage-summary": "查找所有使用指定文件的页面。",
+ "apihelp-query+fileusage-param-prop": "要获取的属性:",
+ "apihelp-query+fileusage-paramvalue-prop-pageid": "每个页面的页面ID。",
+ "apihelp-query+fileusage-paramvalue-prop-title": "每个页面的标题。",
+ "apihelp-query+fileusage-paramvalue-prop-redirect": "标记作为重定向的页面。",
+ "apihelp-query+fileusage-param-namespace": "只包括这些名字空间的页面。",
+ "apihelp-query+fileusage-param-limit": "返回多少。",
+ "apihelp-query+fileusage-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
+ "apihelp-query+fileusage-example-simple": "获取使用[[:File:Example.jpg]]的页面列表。",
+ "apihelp-query+fileusage-example-generator": "获取有关使用[[:File:Example.jpg]]的页面的信息。",
+ "apihelp-query+imageinfo-summary": "返回文件信息和上传历史。",
+ "apihelp-query+imageinfo-param-prop": "要获取的文件信息:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "添加时间戳至上传的版本。",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "添加上传了每个文件版本的用户。",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "添加上传了每个文件版本的用户ID。",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "此版本的摘要。",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "解析版本上的注释。",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "添加文件的规范标题。",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "为文件及其描述页面提供URL。",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "添加文件大小(字节)及其高度、宽度和页面数(如果可以)。",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "用于大小的别名。",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "为文件加入SHA-1哈希值。",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "添加文件的MIME类型。",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "添加图片缩略图的MIME类型(需要url和参数$1urlwidth)。",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "添加文件媒体类型。",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "列出这个版本的文件的EXIF元数据。",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "为文件的修订版本列出文件格式相关元数据。",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "列出结合自多个来源的格式化的元数据。结果均依HTML格式化。",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "添加用于非最新修订的存档修订的文件名。",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "添加修订的字节深度。",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "由Special:Upload所使用,以获取关于现有文件的信息。不适用于MediaWiki核心以外代码。",
+ "apihelp-query+imageinfo-paramvalue-prop-badfile": "无论文件是否在[[MediaWiki:Bad image list]]都添加",
+ "apihelp-query+imageinfo-param-limit": "每个文件返回多少文件修订。",
+ "apihelp-query+imageinfo-param-start": "开始列举的时间戳。",
+ "apihelp-query+imageinfo-param-end": "列举的结束时间戳。",
+ "apihelp-query+imageinfo-param-urlwidth": "如果$2prop=url被设定,将返回至缩放到此宽度的一张图片的URL。\n由于性能原因,如果此消息被使用,将不会返回超过$1张被缩放的图片。",
+ "apihelp-query+imageinfo-param-urlheight": "与$1urlwidth类似。",
+ "apihelp-query+imageinfo-param-metadataversion": "要使用的元数据版本。如果<kbd>latest</kbd>被指定,则使用最新版本。默认为<kbd>1</kbd>以便向下兼容。",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "要取得extmetadata的语言。这会影响到抓取翻译的选择,如果有多个可用的话,还会影响到数字等数值的格式。",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "如果用于extmetadata属性的翻译可用,则全部取得。",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "如果指定且非空,则只为$1prop=extmetadata返回这些键。",
+ "apihelp-query+imageinfo-param-urlparam": "处理器特定的参数字符串。例如PDF可能使用<kbd>page15-100px</kbd>。<var>$1urlwidth</var>必须被使用,并与<var>$1urlparam</var>一致。",
+ "apihelp-query+imageinfo-param-badfilecontexttitle": "如果<kbd>$2prop=badfile</kbd>被设置,这会是在评估[[MediaWiki:Bad image list]]时使用的页面标题",
+ "apihelp-query+imageinfo-param-localonly": "只看本地存储库的文件。",
+ "apihelp-query+imageinfo-example-simple": "取得有关[[:File:Albert Einstein Head.jpg]]的当前版本的信息。",
+ "apihelp-query+imageinfo-example-dated": "取得有关[[:File:Test.jpg]]自2008年以来版本的信息。",
+ "apihelp-query+images-summary": "返回指定页面上包含的所有文件。",
+ "apihelp-query+images-param-limit": "返回多少文件。",
+ "apihelp-query+images-param-images": "只列出这些文件。对于检查某一页面是否使用某一文件很有用。",
+ "apihelp-query+images-param-dir": "罗列所采用的方向。",
+ "apihelp-query+images-example-simple": "获取[[Main Page]]使用的文件列表。",
+ "apihelp-query+images-example-generator": "获取有关[[Main Page]]使用的文件的信息。",
+ "apihelp-query+imageusage-summary": "查找所有使用指定图片标题的页面。",
+ "apihelp-query+imageusage-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+ "apihelp-query+imageusage-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+ "apihelp-query+imageusage-param-namespace": "要列举的名字空间。",
+ "apihelp-query+imageusage-param-dir": "罗列所采用的方向。",
+ "apihelp-query+imageusage-param-filterredir": "如何过滤重定向。当$1redirect被启用时如果设置为nonredirects,这只会应用到第二级。",
+ "apihelp-query+imageusage-param-limit": "返回总计页面数。如果<var>$1redirect</var>被启用,则限定分别适用于每一等级(这意味着将返回多达2 * <var>$1limit</var>个结果)。",
+ "apihelp-query+imageusage-param-redirect": "如果链接页面是重定向,则查找所有链接至该重定向的页面。最大限制减半。",
+ "apihelp-query+imageusage-example-simple": "显示使用[[:File:Albert Einstein Head.jpg]]的页面。",
+ "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息。",
+ "apihelp-query+info-summary": "获取基本页面信息。",
+ "apihelp-query+info-param-prop": "要获取的额外属性:",
+ "apihelp-query+info-paramvalue-prop-protection": "列出每个页面的保护等级。",
+ "apihelp-query+info-paramvalue-prop-talkid": "每个非讨论页面的讨论页的页面ID。",
+ "apihelp-query+info-paramvalue-prop-watched": "列出每个页面的被监视状态。",
+ "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
+ "apihelp-query+info-paramvalue-prop-visitingwatchers": "访问了每个页面的最近编辑的监视者数量,如果允许。",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "每个页面的监视列表通知时间戳。",
+ "apihelp-query+info-paramvalue-prop-subjectid": "每个讨论页的母页面的页面ID。",
+ "apihelp-query+info-paramvalue-prop-url": "为每个页面提供一个完整URL、一个编辑URL和规范URL。",
+ "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
+ "apihelp-query+info-paramvalue-prop-preload": "提供由EditFormPreloadText返回的文本。",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "在页面标题实际显示的地方提供方式。",
+ "apihelp-query+info-paramvalue-prop-varianttitles": "提供网站内容语言所有变体的显示标题。",
+ "apihelp-query+info-param-testactions": "测试当前用户是否可以在页面上执行某种操作。",
+ "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+ "apihelp-query+info-example-simple": "获取有关页面<kbd>Main Page</kbd>的信息。",
+ "apihelp-query+info-example-protection": "获取<kbd>Main Page</kbd>相关的常规和保护信息。",
+ "apihelp-query+iwbacklinks-summary": "查找所有链接至指定跨wiki链接的页面。",
+ "apihelp-query+iwbacklinks-extended-description": "可用于查找所有有前缀的链接,或是链至某一标题的所有链接(带指定前缀)。两参数均不使用实际上就是“all interwiki links”。",
+ "apihelp-query+iwbacklinks-param-prefix": "跨wiki前缀。",
+ "apihelp-query+iwbacklinks-param-title": "要搜索的跨wiki链接。必须与<var>$1blprefix</var>一起使用。",
+ "apihelp-query+iwbacklinks-param-limit": "返回的总计页面数。",
+ "apihelp-query+iwbacklinks-param-prop": "要获取的属性:",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "加入跨wiki前缀。",
+ "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "加入跨wiki标题。",
+ "apihelp-query+iwbacklinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+iwbacklinks-example-simple": "获取链接至[[wikibooks:Test]]的页面。",
+ "apihelp-query+iwbacklinks-example-generator": "获取有关链接至[[wikibooks:Test]]的页面的信息。",
+ "apihelp-query+iwlinks-summary": "从指定页面返回所有跨wiki链接。",
+ "apihelp-query+iwlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
+ "apihelp-query+iwlinks-param-prop": "要为每个跨语言链接获取的额外属性:",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "添加完整URL。",
+ "apihelp-query+iwlinks-param-limit": "返回多少跨wiki链接。",
+ "apihelp-query+iwlinks-param-prefix": "只返回此前缀的跨wiki链接。",
+ "apihelp-query+iwlinks-param-title": "用于搜索的跨wiki链接。必须与<var>$1prefix</var>一起使用。",
+ "apihelp-query+iwlinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+iwlinks-example-simple": "从页面<kbd>Main Page</kbd>获得跨wiki链接。",
+ "apihelp-query+langbacklinks-summary": "查找所有链接至指定语言链接的页面。",
+ "apihelp-query+langbacklinks-extended-description": "可被用于查找所有带某一语言代码的链接,或所有至某一标题的链接(带指定语言)。不使用任何参数就意味着“all language links”。\n\n注意这可能不考虑由扩展添加的语言链接。",
+ "apihelp-query+langbacklinks-param-lang": "用于语言链接的语言。",
+ "apihelp-query+langbacklinks-param-title": "要搜索的语言链接。必须与$1lang一起使用。",
+ "apihelp-query+langbacklinks-param-limit": "返回的总计页面数。",
+ "apihelp-query+langbacklinks-param-prop": "要获得的属性:",
+ "apihelp-query+langbacklinks-paramvalue-prop-lllang": "添加语言链接的语言代码。",
+ "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "添加语言链接的标题。",
+ "apihelp-query+langbacklinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面。",
+ "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息。",
+ "apihelp-query+langlinks-summary": "从指定页面返回所有跨语言链接。",
+ "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
+ "apihelp-query+langlinks-param-url": "是否获取完整URL(不能与<var>$1prop</var>一起使用)。",
+ "apihelp-query+langlinks-param-prop": "要为每个跨语言链接获取的额外属性:",
+ "apihelp-query+langlinks-paramvalue-prop-url": "添加完整URL。",
+ "apihelp-query+langlinks-paramvalue-prop-langname": "添加本地化语言名(尽可能)。使用<var>$1inlanguagecode</var>以控制语言。",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "添加本地语言名。",
+ "apihelp-query+langlinks-param-lang": "只返回带此语言代码的语言链接。",
+ "apihelp-query+langlinks-param-title": "要搜索的链接。必须与<var>$1lang</var>一起使用。",
+ "apihelp-query+langlinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+langlinks-param-inlanguagecode": "本地化语言名称的语言代码。",
+ "apihelp-query+langlinks-example-simple": "从页面<kbd>Main Page</kbd>获取跨语言链接。",
+ "apihelp-query+links-summary": "从指定页面返回所有链接。",
+ "apihelp-query+links-param-namespace": "只显示这些名字空间的链接。",
+ "apihelp-query+links-param-limit": "返回多少链接。",
+ "apihelp-query+links-param-titles": "只列出这些标题。对于检查某一页面是否使用某一标题很有用。",
+ "apihelp-query+links-param-dir": "罗列所采用的方向。",
+ "apihelp-query+links-example-simple": "从页面<kbd>Main Page</kbd>获取链接。",
+ "apihelp-query+links-example-generator": "获取有关在页面<kbd>Main Page</kbd>中连接的页面的信息。",
+ "apihelp-query+links-example-namespaces": "获取在{{ns:user}}和{{ns:template}}名字空间中来自页面<kbd>Main Page</kbd>的链接。",
+ "apihelp-query+linkshere-summary": "查找所有链接至指定页面的页面。",
+ "apihelp-query+linkshere-param-prop": "要获取的属性:",
+ "apihelp-query+linkshere-paramvalue-prop-pageid": "每个页面的页面ID。",
+ "apihelp-query+linkshere-paramvalue-prop-title": "每个页面的标题。",
+ "apihelp-query+linkshere-paramvalue-prop-redirect": "如果页面是一个重定向就标记。",
+ "apihelp-query+linkshere-param-namespace": "只包括这些名字空间的页面。",
+ "apihelp-query+linkshere-param-limit": "返回多少。",
+ "apihelp-query+linkshere-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
+ "apihelp-query+linkshere-example-simple": "获取链接至[[Main Page]]的页面列表。",
+ "apihelp-query+linkshere-example-generator": "获取有关链接至[[Main Page]]的页面的信息。",
+ "apihelp-query+logevents-summary": "从日志获取事件。",
+ "apihelp-query+logevents-param-prop": "要获取的属性:",
+ "apihelp-query+logevents-paramvalue-prop-ids": "添加日志活动的ID。",
+ "apihelp-query+logevents-paramvalue-prop-title": "为日志事件添加页面标题。",
+ "apihelp-query+logevents-paramvalue-prop-type": "添加日志活动的类型。",
+ "apihelp-query+logevents-paramvalue-prop-user": "添加对此日志事件负责的用户。",
+ "apihelp-query+logevents-paramvalue-prop-userid": "添加对此日志事件负责的用户的ID。",
+ "apihelp-query+logevents-paramvalue-prop-timestamp": "为日志活动添加时间戳。",
+ "apihelp-query+logevents-paramvalue-prop-comment": "添加日志活动的摘要。",
+ "apihelp-query+logevents-paramvalue-prop-parsedcomment": "添加被解析的日志活动的摘要。",
+ "apihelp-query+logevents-paramvalue-prop-details": "列举有关日志事件的额外详细信息。",
+ "apihelp-query+logevents-paramvalue-prop-tags": "列举用于日志活动的标签。",
+ "apihelp-query+logevents-param-type": "过滤日志记录至仅限此类型。",
+ "apihelp-query+logevents-param-action": "过滤日志操作为仅限此操作。覆盖<var>$1type</var>。在可用值列表中,带星号通配符的值例如<kbd>action/*</kbd>可在斜线(/)后拥有不同字符串。",
+ "apihelp-query+logevents-param-start": "枚举的起始时间戳。",
+ "apihelp-query+logevents-param-end": "枚举的结束时间戳。",
+ "apihelp-query+logevents-param-user": "过滤记录为这些由指定用户做出的。",
+ "apihelp-query+logevents-param-title": "过滤记录至这些与页面相关的。",
+ "apihelp-query+logevents-param-namespace": "过滤事件为在这些指定的名字空间中。",
+ "apihelp-query+logevents-param-prefix": "过滤以此前缀开头的记录。",
+ "apihelp-query+logevents-param-tag": "只列举带此标签的事件日志记录。",
+ "apihelp-query+logevents-param-limit": "返回的事件日志记录总数。",
+ "apihelp-query+logevents-example-simple": "列出最近日志事件。",
+ "apihelp-query+pagepropnames-summary": "列出wiki中所有使用中的页面属性名称。",
+ "apihelp-query+pagepropnames-param-limit": "返回名称的最大数量。",
+ "apihelp-query+pagepropnames-example-simple": "获取前10个属性名称。",
+ "apihelp-query+pageprops-summary": "获取页面内容中定义的各种页面属性。",
+ "apihelp-query+pageprops-param-prop": "只列出这些页面属性(<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd>返回使用中的页面属性名称)。在检查页面是否使用某一页面属性时有用。",
+ "apihelp-query+pageprops-example-simple": "获取用于页面<kbd>Main Page</kbd>和<kbd>MediaWiki</kbd>的属性。",
+ "apihelp-query+pageswithprop-summary": "列出所有使用指定页面属性的页面。",
+ "apihelp-query+pageswithprop-param-propname": "要用于列举页面的页面属性(<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd>返回正在使用中的页面属性名称)。",
+ "apihelp-query+pageswithprop-param-prop": "要包含的信息束:",
+ "apihelp-query+pageswithprop-paramvalue-prop-ids": "添加页面ID。",
+ "apihelp-query+pageswithprop-paramvalue-prop-title": "添加页面的标题和名字空间ID。",
+ "apihelp-query+pageswithprop-paramvalue-prop-value": "添加页面属性值。",
+ "apihelp-query+pageswithprop-param-limit": "返回页面的最大数量。",
+ "apihelp-query+pageswithprop-param-dir": "排序的方向。",
+ "apihelp-query+pageswithprop-example-simple": "列出前10个使用<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>的页面。",
+ "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用<code>_&#95;NOTOC_&#95;</code>的页面的额外信息。",
+ "apihelp-query+prefixsearch-summary": "为页面标题执行前缀搜索。",
+ "apihelp-query+prefixsearch-extended-description": "尽管名称类似,但此模块不等于[[Special:PrefixIndex]];详见<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>中的<kbd>apprefix</kbd>参数。此模块的目的类似<kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>:基于用户的输入提供最佳匹配的标题。取决于搜索引擎后端,这可能包括错拼纠正、避免重定向和其他启发性行为。",
+ "apihelp-query+prefixsearch-param-search": "搜索字符串。",
+ "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。如果<var>$1search</var>以有效名字空间前缀开头则忽略。",
+ "apihelp-query+prefixsearch-param-limit": "要返回的结果最大数。",
+ "apihelp-query+prefixsearch-param-offset": "跳过的结果数。",
+ "apihelp-query+prefixsearch-example-simple": "搜索以<kbd>meaning</kbd>开头的页面标题。",
+ "apihelp-query+prefixsearch-param-profile": "搜索要使用的配置文件。",
+ "apihelp-query+protectedtitles-summary": "列出所有被限制创建的标题。",
+ "apihelp-query+protectedtitles-param-namespace": "只列出这些名字空间的标题。",
+ "apihelp-query+protectedtitles-param-level": "只列出带这些保护级别的标题。",
+ "apihelp-query+protectedtitles-param-limit": "返回的总计页面数。",
+ "apihelp-query+protectedtitles-param-start": "从此保护时间戳开始列举。",
+ "apihelp-query+protectedtitles-param-end": "列举至此保护时间戳为止。",
+ "apihelp-query+protectedtitles-param-prop": "要获取的属性:",
+ "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "添加保护被添加时的时间戳。",
+ "apihelp-query+protectedtitles-paramvalue-prop-user": "添加对页面添加保护的用户。",
+ "apihelp-query+protectedtitles-paramvalue-prop-userid": "添加对页面添加保护的用户ID。",
+ "apihelp-query+protectedtitles-paramvalue-prop-comment": "为保护添加摘要。",
+ "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "为保护添加解析的摘要。",
+ "apihelp-query+protectedtitles-paramvalue-prop-expiry": "添加保护将被提升时的时间戳。",
+ "apihelp-query+protectedtitles-paramvalue-prop-level": "添加保护级别。",
+ "apihelp-query+protectedtitles-example-simple": "受保护标题列表。",
+ "apihelp-query+protectedtitles-example-generator": "找到主名字空间中已保护的标题的链接。",
+ "apihelp-query+querypage-summary": "获取由基于QueryPage的特殊页面提供的列表。",
+ "apihelp-query+querypage-param-page": "特殊页面的名称。注意其区分大小写。",
+ "apihelp-query+querypage-param-limit": "返回的结果数。",
+ "apihelp-query+querypage-example-ancientpages": "返回[[Special:Ancientpages]]的结果。",
+ "apihelp-query+random-summary": "获取随机页面集。",
+ "apihelp-query+random-extended-description": "页面列举在一个固定序列中,只有起始点是随机的。这意味着如果<samp>Main Page</samp>是列表中第一个随机页面的话,<samp>List of fictional monkeys</samp>将<em>总是</em>第二个,<samp>List of people on stamps of Vanuatu</samp>是第三个等。",
+ "apihelp-query+random-param-namespace": "只返回这些名字空间的页面。",
+ "apihelp-query+random-param-limit": "限制返回多少随机页面。",
+ "apihelp-query+random-param-redirect": "请改用<kbd>$1filterredir=redirects</kbd>。",
+ "apihelp-query+random-param-filterredir": "如何过滤重定向。",
+ "apihelp-query+random-example-simple": "从主名字空间返回两个随机页面。",
+ "apihelp-query+random-example-generator": "返回有关来自主名字空间的两个随机页面的页面信息。",
+ "apihelp-query+recentchanges-summary": "列举最近更改。",
+ "apihelp-query+recentchanges-param-start": "枚举的起始时间戳。",
+ "apihelp-query+recentchanges-param-end": "枚举的结束时间戳。",
+ "apihelp-query+recentchanges-param-namespace": "过滤更改为仅限这些名字空间。",
+ "apihelp-query+recentchanges-param-user": "只列出此用户的更改。",
+ "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
+ "apihelp-query+recentchanges-param-tag": "只列出带此标签的更改。",
+ "apihelp-query+recentchanges-param-prop": "包含的额外信息束:",
+ "apihelp-query+recentchanges-paramvalue-prop-user": "添加造成编辑的用户,并标出它们是否是IP。",
+ "apihelp-query+recentchanges-paramvalue-prop-userid": "为编辑添加用户ID责任。",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "为编辑添加摘要。",
+ "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "为编辑添加解析的摘要。",
+ "apihelp-query+recentchanges-paramvalue-prop-flags": "为编辑添加标记。",
+ "apihelp-query+recentchanges-paramvalue-prop-timestamp": "添加编辑的时间戳。",
+ "apihelp-query+recentchanges-paramvalue-prop-title": "添加编辑的页面标题。",
+ "apihelp-query+recentchanges-paramvalue-prop-ids": "添加页面ID、最近更改ID和新旧修订的ID。",
+ "apihelp-query+recentchanges-paramvalue-prop-sizes": "添加新旧页面长度(字节)。",
+ "apihelp-query+recentchanges-paramvalue-prop-redirect": "如果页面是重定向的话,标记编辑。",
+ "apihelp-query+recentchanges-paramvalue-prop-patrolled": "将可巡查编辑标记为已巡查或未巡查。",
+ "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "将可巡查编辑标记为自动巡查或未巡查。",
+ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "添加日志信息(日志ID、日志类型等)至日志记录。",
+ "apihelp-query+recentchanges-paramvalue-prop-tags": "列举条目的标签。",
+ "apihelp-query+recentchanges-paramvalue-prop-sha1": "为与某一修订版本有关的记录添加内容校验和。",
+ "apihelp-query+recentchanges-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
+ "apihelp-query+recentchanges-param-show": "只显示满足这些标准的项目。例如,要只查看由登录用户做出的小编辑,设置$1show=minor|!anon。",
+ "apihelp-query+recentchanges-param-limit": "返回总计更新数。",
+ "apihelp-query+recentchanges-param-type": "显示的更改类型。",
+ "apihelp-query+recentchanges-param-toponly": "只列举作为最新修订的更改。",
+ "apihelp-query+recentchanges-param-generaterevisions": "当作为生成器使用时,生成修订ID而不是标题。不带关联修订ID的最近更改记录(例如大多数日志记录)将不会生成任何东西。",
+ "apihelp-query+recentchanges-example-simple": "最近更改列表。",
+ "apihelp-query+recentchanges-example-generator": "获取有关最近未巡查更改的页面信息。",
+ "apihelp-query+redirects-summary": "返回至指定页面的所有重定向。",
+ "apihelp-query+redirects-param-prop": "要获取的属性:",
+ "apihelp-query+redirects-paramvalue-prop-pageid": "每个重定向的页面ID。",
+ "apihelp-query+redirects-paramvalue-prop-title": "每个重定向的标题。",
+ "apihelp-query+redirects-paramvalue-prop-fragment": "每个重定向的碎片,如果有。",
+ "apihelp-query+redirects-param-namespace": "只包含这些名字空间的页面。",
+ "apihelp-query+redirects-param-limit": "返回多少重定向。",
+ "apihelp-query+redirects-param-show": "只显示符合这些标准的项目:\n;fragment:只显示带碎片的重定向。\n;!fragment:只显示不带碎片的重定向。",
+ "apihelp-query+redirects-example-simple": "获取至[[Main Page]]的重定向列表。",
+ "apihelp-query+redirects-example-generator": "获取所有重定向至[[Main Page]]的信息。",
+ "apihelp-query+revisions-summary": "获取修订版本信息。",
+ "apihelp-query+revisions-extended-description": "可用于以下几个方面:\n# 通过设置标题或页面ID获取一批页面(最新修订)的数据。\n# 通过使用带start、end或limit的标题或页面ID获取给定页面的多个修订。\n# 通过revid设置一批修订的ID获取它们的数据。",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "可能只能与单一页面使用(模式#2)。",
+ "apihelp-query+revisions-param-startid": "从这个修订版本时间戳开始列举。修订版本必须存在,但未必与该页面相关。",
+ "apihelp-query+revisions-param-endid": "在这个修订版本时间戳停止列举。修订版本必须存在,但未必与该页面相关。",
+ "apihelp-query+revisions-param-start": "从哪个修订版本时间戳开始列举。",
+ "apihelp-query+revisions-param-end": "列举直至此时间戳。",
+ "apihelp-query+revisions-param-user": "只包含由用户做出的修订。",
+ "apihelp-query+revisions-param-excludeuser": "不包括由用户做出的修订。",
+ "apihelp-query+revisions-param-tag": "只列出被此标签标记的修订。",
+ "apihelp-query+revisions-param-token": "要为每个修订版本获得的令牌。",
+ "apihelp-query+revisions-example-content": "获取带内容的数据,用于标题<kbd>API</kbd>和<kbd>Main Page</kbd>的最近修订。",
+ "apihelp-query+revisions-example-last5": "获取<kbd>Main Page</kbd>的最近5次修订。",
+ "apihelp-query+revisions-example-first5": "获取<kbd>Main Page</kbd>的前5次修订。",
+ "apihelp-query+revisions-example-first5-after": "获取<kbd>Main Page</kbd>于2006年05月01日之后做出的前5次修订版本。",
+ "apihelp-query+revisions-example-first5-not-localhost": "获取<kbd>Main Page</kbd>的前5次不是由匿名用户<kbd>127.0.0.1</kbd>做出的修订。",
+ "apihelp-query+revisions-example-first5-user": "获取<kbd>Main Page</kbd>的前5次由用户<kbd>MediaWiki default</kbd>做出的修订。",
+ "apihelp-query+revisions+base-param-prop": "要为每个修订获取的属性:",
+ "apihelp-query+revisions+base-paramvalue-prop-ids": "修订版本的ID。",
+ "apihelp-query+revisions+base-paramvalue-prop-flags": "修订标记(小编辑)。",
+ "apihelp-query+revisions+base-paramvalue-prop-timestamp": "修订的时间戳。",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "做出修订的用户。",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "修订创建者的用户ID。",
+ "apihelp-query+revisions+base-paramvalue-prop-size": "修订的长度(字节)。",
+ "apihelp-query+revisions+base-paramvalue-prop-sha1": "修订的SHA-1(base 16)。",
+ "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "修订的内容模型ID。",
+ "apihelp-query+revisions+base-paramvalue-prop-comment": "由用户对修订做出的摘要。",
+ "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "由用户对修订做出的被解析的摘要。",
+ "apihelp-query+revisions+base-paramvalue-prop-content": "修订文本。",
+ "apihelp-query+revisions+base-paramvalue-prop-tags": "修订标签。",
+ "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">已弃用。</span>请改用<kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>或<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>。修订内容的XML解析树(需要内容模型<code>$1</code>)。",
+ "apihelp-query+revisions+base-param-limit": "限制返回多少修订。",
+ "apihelp-query+revisions+base-param-expandtemplates": "请改用<kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>。展开修订内容中的模板(需要$1prop=content)。",
+ "apihelp-query+revisions+base-param-generatexml": "请改用<kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>或<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>。生成用于修订内容的XML解析树(需要$1prop=content;被<kbd>$1prop=parsetree</kbd>所取代)。",
+ "apihelp-query+revisions+base-param-parse": "请改用<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>。解析修订内容(需要$1prop=content)。由于性能原因,如果此选项被使用,$1limit会被强制为1。",
+ "apihelp-query+revisions+base-param-section": "只检索此段落数的内容。",
+ "apihelp-query+revisions+base-param-diffto": "请改用<kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>。要比较修订差异的修订ID。使用<kbd>prev</kbd>、<kbd>next</kbd>和<kbd>cur</kbd>分别用于上个、下个和当前修订。",
+ "apihelp-query+revisions+base-param-difftotext": "请改用<kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>。要比较修订差异的文本。只有修订的有限数字内的差异。覆盖<var>$1diffto</var>。如果<var>$1section</var>被设置,只有那个段落将与此文本之间比较差异",
+ "apihelp-query+revisions+base-param-difftotextpst": "请改用<kbd>[[Special:ApiHelp/compare|action=compare]]</kbd>。在编辑文本前对其执行预保存转换。只当与<var>$1difftotext</var>一起使用时有效。",
+ "apihelp-query+revisions+base-param-contentformat": "序列化用于<var>$1difftotext</var>的格式并预估内容输出。",
+ "apihelp-query+search-summary": "执行一次全文本搜索。",
+ "apihelp-query+search-param-search": "搜索所有匹配此值的页面标题或内容。根据wiki的搜索后端工具,您可以使用搜索字符串以调用特殊搜索功能。",
+ "apihelp-query+search-param-namespace": "只在这些名字空间搜索。",
+ "apihelp-query+search-param-what": "要执行的搜索类型。",
+ "apihelp-query+search-param-info": "要返回的元数据。",
+ "apihelp-query+search-param-prop": "要返回的属性:",
+ "apihelp-query+search-param-qiprofile": "查询要使用的独立描述(影响排序算法)。",
+ "apihelp-query+search-paramvalue-prop-size": "添加页面大小,单位为字节。",
+ "apihelp-query+search-paramvalue-prop-wordcount": "添加页面的字数。",
+ "apihelp-query+search-paramvalue-prop-timestamp": "添加页面上次编辑时的时间戳。",
+ "apihelp-query+search-paramvalue-prop-snippet": "添加已解析的页面片段。",
+ "apihelp-query+search-paramvalue-prop-titlesnippet": "添加已解析的页面标题片段。",
+ "apihelp-query+search-paramvalue-prop-redirectsnippet": "添加被解析的重定向标题的片段。",
+ "apihelp-query+search-paramvalue-prop-redirecttitle": "添加匹配的重定向的标题。",
+ "apihelp-query+search-paramvalue-prop-sectionsnippet": "添加已解析的匹配章节标题片段。",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "添加匹配章节的标题。",
+ "apihelp-query+search-paramvalue-prop-categorysnippet": "添加已解析的匹配分类片段。",
+ "apihelp-query+search-paramvalue-prop-isfilematch": "添加布尔值,表明搜索是否匹配文件内容。",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "添加由扩展生成的额外数据。",
+ "apihelp-query+search-paramvalue-prop-score": "已忽略。",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "已忽略。",
+ "apihelp-query+search-param-limit": "返回的总计页面数。",
+ "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
+ "apihelp-query+search-param-backend": "要使用的搜索后端,如果没有则为默认。",
+ "apihelp-query+search-param-enablerewrites": "启用内部查询重写。一些搜索后端可以重写查询到另一个被认为能提供更好结果的位置,例如纠正拼写错误。",
+ "apihelp-query+search-example-simple": "搜索<kbd>meaning</kbd>。",
+ "apihelp-query+search-example-text": "搜索文本<kbd>meaning</kbd>。",
+ "apihelp-query+search-example-generator": "获取有关搜索<kbd>meaning</kbd>返回页面的页面信息。",
+ "apihelp-query+siteinfo-summary": "返回有关网站的一般信息。",
+ "apihelp-query+siteinfo-param-prop": "要获取的信息:",
+ "apihelp-query+siteinfo-paramvalue-prop-general": "全部系统信息。",
+ "apihelp-query+siteinfo-paramvalue-prop-namespaces": "注册的名字空间及其规范名称列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "注册的名字空间别名列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "特殊页面别名列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-magicwords": "魔术字及其别名列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "返回网站统计。",
+ "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "返回跨wiki映射(可选过滤,可选择使用<var>$1inlanguagecode</var>本地化)。",
+ "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "返回数据库服务器与最高反应延迟。",
+ "apihelp-query+siteinfo-paramvalue-prop-usergroups": "返回用户组及其相关权限。",
+ "apihelp-query+siteinfo-paramvalue-prop-libraries": "返回wiki上安装的库。",
+ "apihelp-query+siteinfo-paramvalue-prop-extensions": "返回wiki上安装的扩展。",
+ "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "返回允许上传的文件扩展名(文件类型)列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "当可用时返回wiki的版权(许可协议)信息。",
+ "apihelp-query+siteinfo-paramvalue-prop-restrictions": "返回可用的编辑限制(保护)类型信息。",
+ "apihelp-query+siteinfo-paramvalue-prop-languages": "返回MediaWiki支持的语言列表(可选择使用<var>$1inlanguagecode</var>本地化)。",
+ "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "当启用了[[mw:Special:MyLanguage/LanguageConverter|语言转换器]],并且每个语言变体都受支持时,返回语言代码列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-skins": "返回所有启用的皮肤列表(可选择使用<var>$1inlanguagecode</var>本地化,否则是内容语言)。",
+ "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "返回解析器扩展标签列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "返回解析器函数钩列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-showhooks": "返回所有订阅的钩列表(<var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>的内容)。",
+ "apihelp-query+siteinfo-paramvalue-prop-variables": "返回变量ID列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "返回外部链接中允许的协议列表。",
+ "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "返回用户设置的默认值。",
+ "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "返回上传对话框的配置。",
+ "apihelp-query+siteinfo-param-filteriw": "只返回跨wiki地图中的本地或非本地记录。",
+ "apihelp-query+siteinfo-param-showalldb": "列出所有数据库服务器,不只是最落后的那个。",
+ "apihelp-query+siteinfo-param-numberingroup": "列出用户组中的用户数。",
+ "apihelp-query+siteinfo-param-inlanguagecode": "用于本地化语言名称(尽可能)和皮肤名称的语言代码。",
+ "apihelp-query+siteinfo-example-simple": "取得网站信息。",
+ "apihelp-query+siteinfo-example-interwiki": "取得本地跨wiki前缀列表。",
+ "apihelp-query+siteinfo-example-replag": "检查当前的响应延迟。",
+ "apihelp-query+stashimageinfo-summary": "返回用于藏匿文件的文件信息。",
+ "apihelp-query+stashimageinfo-param-filekey": "用于识别一次临时藏匿的早前上传的关键字。",
+ "apihelp-query+stashimageinfo-param-sessionkey": "$1filekey的别名,用于向后兼容。",
+ "apihelp-query+stashimageinfo-example-simple": "返回藏匿文件的信息。",
+ "apihelp-query+stashimageinfo-example-params": "返回两个藏匿文件的缩略图。",
+ "apihelp-query+tags-summary": "列出更改标签。",
+ "apihelp-query+tags-param-limit": "列出标签的最大数量。",
+ "apihelp-query+tags-param-prop": "要获取的属性:",
+ "apihelp-query+tags-paramvalue-prop-name": "添加标签名称。",
+ "apihelp-query+tags-paramvalue-prop-displayname": "为标签添加系统消息。",
+ "apihelp-query+tags-paramvalue-prop-description": "为标签添加描述。",
+ "apihelp-query+tags-paramvalue-prop-hitcount": "已添加此标签的修订版本与日志数量。",
+ "apihelp-query+tags-paramvalue-prop-defined": "标识标签是否已定义。",
+ "apihelp-query+tags-paramvalue-prop-source": "获得标签来源,它可能包括用于扩展定义的标签的<samp>extension</samp>,以及用于可被用户手动应用的标签的<samp>manual</samp>。",
+ "apihelp-query+tags-paramvalue-prop-active": "标签是否仍可被应用。",
+ "apihelp-query+tags-example-simple": "可用标签列表。",
+ "apihelp-query+templates-summary": "返回指定页面上所有被嵌入的页面。",
+ "apihelp-query+templates-param-namespace": "只显示此名字空间的模板。",
+ "apihelp-query+templates-param-limit": "返回的模板数量。",
+ "apihelp-query+templates-param-templates": "只列出这些模板。对于检查某一页面使用某一模板很有用。",
+ "apihelp-query+templates-param-dir": "罗列所采用的方向。",
+ "apihelp-query+templates-example-simple": "获取在页面<kbd>Main Page</kbd>使用的模板。",
+ "apihelp-query+templates-example-generator": "获取有关<kbd>Main Page</kbd>中使用的模板页面的信息。",
+ "apihelp-query+templates-example-namespaces": "获取在{{ns:user}}和{{ns:template}}名字空间中,嵌入在<kbd>Main Page</kbd>页面的页面。",
+ "apihelp-query+tokens-summary": "获取可修改数据的操作的令牌。",
+ "apihelp-query+tokens-param-type": "要请求的令牌类型。",
+ "apihelp-query+tokens-example-simple": "检索一个csrf令牌(默认)。",
+ "apihelp-query+tokens-example-types": "检索一个监视令牌和一个巡查令牌。",
+ "apihelp-query+transcludedin-summary": "查找所有嵌入指定页面的页面。",
+ "apihelp-query+transcludedin-param-prop": "要获取的属性:",
+ "apihelp-query+transcludedin-paramvalue-prop-pageid": "每个页面的页面ID。",
+ "apihelp-query+transcludedin-paramvalue-prop-title": "每个页面的标题。",
+ "apihelp-query+transcludedin-paramvalue-prop-redirect": "标记作为重定向的页面。",
+ "apihelp-query+transcludedin-param-namespace": "至包含这些名字空间的页面。",
+ "apihelp-query+transcludedin-param-limit": "返回多少。",
+ "apihelp-query+transcludedin-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
+ "apihelp-query+transcludedin-example-simple": "获取嵌入<kbd>Main Page</kbd>的页面列表。",
+ "apihelp-query+transcludedin-example-generator": "获取有关嵌入<kbd>Main Page</kbd>的页面的信息。",
+ "apihelp-query+usercontribs-summary": "获取一位用户的所有编辑。",
+ "apihelp-query+usercontribs-param-limit": "返回贡献的最大数量。",
+ "apihelp-query+usercontribs-param-start": "返回的起始时间戳。",
+ "apihelp-query+usercontribs-param-end": "返回的最终时间戳。",
+ "apihelp-query+usercontribs-param-user": "要检索贡献的用户。不能与<var>$1userids</var>或<var>$1userprefix</var>一起使用。",
+ "apihelp-query+usercontribs-param-userprefix": "取得所有用户名以这个值开头的用户的贡献。不能与<var>$1user</var>或<var>$1userids</var>一起使用。",
+ "apihelp-query+usercontribs-param-userids": "要检索贡献的用户ID。不能与<var>$1user</var>或<var>$1userprefix</var>一起使用。",
+ "apihelp-query+usercontribs-param-namespace": "只列出这些名字空间的贡献。",
+ "apihelp-query+usercontribs-param-prop": "包含额外的信息束:",
+ "apihelp-query+usercontribs-paramvalue-prop-ids": "添加页面ID和修订ID。",
+ "apihelp-query+usercontribs-paramvalue-prop-title": "添加页面标题及其名字空间ID。",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "添加编辑的时间戳。",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "添加编辑摘要。",
+ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "添加被解析的编辑摘要。",
+ "apihelp-query+usercontribs-paramvalue-prop-size": "添加编辑的新大小。",
+ "apihelp-query+usercontribs-paramvalue-prop-sizediff": "添加与父编辑相比该编辑的大小变化。",
+ "apihelp-query+usercontribs-paramvalue-prop-flags": "添加编辑标记。",
+ "apihelp-query+usercontribs-paramvalue-prop-patrolled": "标记已巡查编辑。",
+ "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "编辑自动巡查编辑。",
+ "apihelp-query+usercontribs-paramvalue-prop-tags": "列举用于编辑的标签。",
+ "apihelp-query+usercontribs-param-show": "只显示符合这些标准的项目,例如只显示不是小编辑的编辑:<kbd>$2show=!minor</kbd>。\n\n如果<kbd>$2show=patrolled</kbd>或<kbd>$2show=!patrolled</kbd>被设定,早于<var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>($1秒)的修订不会被显示。",
+ "apihelp-query+usercontribs-param-tag": "只列出被此标签标记的修订。",
+ "apihelp-query+usercontribs-param-toponly": "只列举作为最新修订的更改。",
+ "apihelp-query+usercontribs-example-user": "显示用户<kbd>Example</kbd>的贡献。",
+ "apihelp-query+usercontribs-example-ipprefix": "显示来自<kbd>192.0.2.</kbd>前缀所有 IP 地址的贡献。",
+ "apihelp-query+userinfo-summary": "获取有关当前用户的信息。",
+ "apihelp-query+userinfo-param-prop": "要包含的信息束:",
+ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "如果当前用户被封禁就标记,并注明是谁封禁,以何种原因封禁的。",
+ "apihelp-query+userinfo-paramvalue-prop-hasmsg": "如果当前用户有等待中的消息的话,添加标签<samp>messages</samp>。",
+ "apihelp-query+userinfo-paramvalue-prop-groups": "列举当前用户隶属的所有群组。",
+ "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "列举明确分配给当前用户的用户组,包括每个用户组成员的过期时间。",
+ "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "列举当前用户的所有自动成为成员的用户组。",
+ "apihelp-query+userinfo-paramvalue-prop-rights": "列举当前用户拥有的所有权限。",
+ "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "列举当前用户可以添加并移除的用户组。",
+ "apihelp-query+userinfo-paramvalue-prop-options": "列举当前用户设置的所有参数设置。",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "获取令牌以更改当前用户的参数设置。",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "添加当前用户的编辑计数。",
+ "apihelp-query+userinfo-paramvalue-prop-ratelimits": "列举所有应用到当前用户的速率限制。",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "添加用户的真实姓名。",
+ "apihelp-query+userinfo-paramvalue-prop-email": "添加用户的电子邮件地址及电子邮件验证日期。",
+ "apihelp-query+userinfo-paramvalue-prop-acceptlang": "重复由客户端以结构化格式发送的<code>Accept-Language</code>标头。",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "添加用户的注册时间。",
+ "apihelp-query+userinfo-paramvalue-prop-unreadcount": "添加用户监视列表上的未独页面计数(最高$1;如果更多则返回<samp>$2</samp>)。",
+ "apihelp-query+userinfo-paramvalue-prop-centralids": "添加中心ID并为用户附加状态。",
+ "apihelp-query+userinfo-param-attachedwiki": "与<kbd>$1prop=centralids</kbd>一起使用,表明用户是否附加于此ID定义的wiki。",
+ "apihelp-query+userinfo-example-simple": "获取有关当前用户的信息。",
+ "apihelp-query+userinfo-example-data": "获取有关当前用户的额外信息。",
+ "apihelp-query+users-summary": "获取有关列出用户的信息。",
+ "apihelp-query+users-param-prop": "要包含的信息束:",
+ "apihelp-query+users-paramvalue-prop-blockinfo": "如果用户被封禁就标记,并注明是谁封禁,以何种原因封禁的。",
+ "apihelp-query+users-paramvalue-prop-groups": "列举每位用户属于的所有组。",
+ "apihelp-query+users-paramvalue-prop-groupmemberships": "列举明确分配给每位用户的用户组,包括每个用户组成员的过期时间。",
+ "apihelp-query+users-paramvalue-prop-implicitgroups": "列举用户自动作为成员之一的所有组。",
+ "apihelp-query+users-paramvalue-prop-rights": "列举每位用户拥有的所有权限。",
+ "apihelp-query+users-paramvalue-prop-editcount": "添加用户的编辑计数。",
+ "apihelp-query+users-paramvalue-prop-registration": "添加用户的注册时间戳。",
+ "apihelp-query+users-paramvalue-prop-emailable": "当用户可以并希望通过[[Special:Emailuser]]接收电子邮件时标记。",
+ "apihelp-query+users-paramvalue-prop-gender": "标记用户性别。返回“male”、“female”或“unknown”。",
+ "apihelp-query+users-paramvalue-prop-centralids": "添加中心ID并为用户附加状态。",
+ "apihelp-query+users-paramvalue-prop-cancreate": "表明是否可以为有效但尚未注册的用户名创建一个账户。",
+ "apihelp-query+users-param-attachedwiki": "与<kbd>$1prop=centralids</kbd>一起使用,表明用户是否附加于此ID定义的wiki。",
+ "apihelp-query+users-param-users": "要获取信息的用户列表。",
+ "apihelp-query+users-param-userids": "要获得信息的用户ID列表。",
+ "apihelp-query+users-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
+ "apihelp-query+users-example-simple": "返回用户<kbd>Example</kbd>的信息。",
+ "apihelp-query+watchlist-summary": "在当前用户的监视列表中获取对页面的最近更改。",
+ "apihelp-query+watchlist-param-allrev": "将同一页面的多个修订包含于指定的时间表内。",
+ "apihelp-query+watchlist-param-start": "枚举的起始时间戳。",
+ "apihelp-query+watchlist-param-end": "枚举的结束时间戳。",
+ "apihelp-query+watchlist-param-namespace": "过滤更改为仅限指定名字空间。",
+ "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
+ "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
+ "apihelp-query+watchlist-param-limit": "根据结果返回的结果总数。",
+ "apihelp-query+watchlist-param-prop": "要获取的额外属性:",
+ "apihelp-query+watchlist-paramvalue-prop-ids": "添加修订ID和页面ID。",
+ "apihelp-query+watchlist-paramvalue-prop-title": "添加页面标题。",
+ "apihelp-query+watchlist-paramvalue-prop-flags": "为编辑添加标记。",
+ "apihelp-query+watchlist-paramvalue-prop-user": "添加做出编辑的用户。",
+ "apihelp-query+watchlist-paramvalue-prop-userid": "添加做出编辑的用户的ID。",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "添加编辑摘要。",
+ "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "添加解析过的编辑摘要。",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "添加编辑时间戳。",
+ "apihelp-query+watchlist-paramvalue-prop-patrol": "将编辑标记为已巡查。",
+ "apihelp-query+watchlist-paramvalue-prop-autopatrol": "将编辑标记为自动巡查。",
+ "apihelp-query+watchlist-paramvalue-prop-sizes": "添加页面的旧有长度和新长度。",
+ "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "添加最近被通知有关编辑的用户的时间戳。",
+ "apihelp-query+watchlist-paramvalue-prop-loginfo": "在适当位置添加日志信息。",
+ "apihelp-query+watchlist-paramvalue-prop-tags": "列举条目的标签。",
+ "apihelp-query+watchlist-param-show": "只显示满足这些标准的项目。例如,要只查看由登录用户做出的小编辑,设置$1show=minor|!anon。",
+ "apihelp-query+watchlist-param-type": "要显示的更改类型:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "普通页面编辑。",
+ "apihelp-query+watchlist-paramvalue-type-external": "外部更改。",
+ "apihelp-query+watchlist-paramvalue-type-new": "页面创建。",
+ "apihelp-query+watchlist-paramvalue-type-log": "日志记录。",
+ "apihelp-query+watchlist-paramvalue-type-categorize": "分类成员组更改。",
+ "apihelp-query+watchlist-param-owner": "与$1token一起使用以访问不同用户的监视列表。",
+ "apihelp-query+watchlist-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
+ "apihelp-query+watchlist-example-simple": "在当前用户的监视列表中列出用于最近更改页面的最新修订。",
+ "apihelp-query+watchlist-example-props": "在当前用户的监视列表中检索有关用于最近更改页面的最新修订的额外信息。",
+ "apihelp-query+watchlist-example-allrev": "在当前用户的监视列表中检索有关所有最近对页面的更改的信息。",
+ "apihelp-query+watchlist-example-generator": "在当前用户的监视列表中检索用于最近更改页面的页面信息。",
+ "apihelp-query+watchlist-example-generator-rev": "在当前用户的监视列表中检索用于对页面最近更改的修订信息。",
+ "apihelp-query+watchlist-example-wlowner": "在用户<kbd>Example</kbd>的监视列表中列出用于最近更改页面的最新修订。",
+ "apihelp-query+watchlistraw-summary": "获得当前用户的监视列表上的所有页面。",
+ "apihelp-query+watchlistraw-param-namespace": "只列出指定名字空间的页面。",
+ "apihelp-query+watchlistraw-param-limit": "根据结果返回的结果总数。",
+ "apihelp-query+watchlistraw-param-prop": "要获取的额外属性:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "添加最近被通知有关编辑的用户的时间戳。",
+ "apihelp-query+watchlistraw-param-show": "只列出符合这些标准的项目。",
+ "apihelp-query+watchlistraw-param-owner": "与$1token一起使用以访问不同用户的监视列表。",
+ "apihelp-query+watchlistraw-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
+ "apihelp-query+watchlistraw-param-dir": "罗列所采用的方向。",
+ "apihelp-query+watchlistraw-param-fromtitle": "要列举的起始标题(带名字空间前缀)。",
+ "apihelp-query+watchlistraw-param-totitle": "要列举的最终标题(带名字空间前缀)。",
+ "apihelp-query+watchlistraw-example-simple": "列出当前用户的监视列表中的页面。",
+ "apihelp-query+watchlistraw-example-generator": "检索当前用户监视列表上的页面的页面信息。",
+ "apihelp-removeauthenticationdata-summary": "从当前用户移除身份验证数据。",
+ "apihelp-removeauthenticationdata-example-simple": "尝试移除当前用户的<kbd>FooAuthenticationRequest</kbd>数据。",
+ "apihelp-resetpassword-summary": "向用户发送密码重置邮件。",
+ "apihelp-resetpassword-extended-description-noroutes": "没有密码重置路由可用。\n\n在<var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>中启用路由以使用此模块。",
+ "apihelp-resetpassword-param-user": "正在重置的用户。",
+ "apihelp-resetpassword-param-email": "正在重置用户的电子邮件地址。",
+ "apihelp-resetpassword-example-user": "向用户<kbd>Example</kbd>发送密码重置邮件。",
+ "apihelp-resetpassword-example-email": "向所有电子邮件地址为<kbd>user@example.com</kbd>的用户发送密码重置邮件。",
+ "apihelp-revisiondelete-summary": "删除和恢复修订版本。",
+ "apihelp-revisiondelete-param-type": "正在执行的修订版本删除类型。",
+ "apihelp-revisiondelete-param-target": "要进行修订版本删除的页面标题,如果对某一类型需要。",
+ "apihelp-revisiondelete-param-ids": "用于将被删除的修订的标识符。",
+ "apihelp-revisiondelete-param-hide": "每次修订要隐藏的东西。",
+ "apihelp-revisiondelete-param-show": "每次修订要恢复显示的东西。",
+ "apihelp-revisiondelete-param-suppress": "是否对管理员及其他人禁止数据。",
+ "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
+ "apihelp-revisiondelete-param-tags": "要在删除日志中应用到实体的标签。",
+ "apihelp-revisiondelete-example-revision": "隐藏<kbd>首页</kbd>的修订版本<kbd>12345</kbd>的内容。",
+ "apihelp-revisiondelete-example-log": "隐藏日志记录<kbd>67890</kbd>上的所有数据,原因<kbd>BLP violation</kbd>。",
+ "apihelp-rollback-summary": "撤销对页面的最近编辑。",
+ "apihelp-rollback-extended-description": "如果上一对页面做出编辑的用户连续做出了多次编辑,它们将全数被回退。",
+ "apihelp-rollback-param-title": "要回退的页面标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-rollback-param-pageid": "要回退的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-rollback-param-tags": "要应用在回退上的标签。",
+ "apihelp-rollback-param-user": "做出要回退的编辑的用户名称。",
+ "apihelp-rollback-param-summary": "自定义编辑摘要。如果为空,将使用默认摘要。",
+ "apihelp-rollback-param-markbot": "将被回退的编辑和回退操作标记为机器人编辑。",
+ "apihelp-rollback-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-rollback-example-simple": "回退由用户<kbd>Example</kbd>对<kbd>Main Page</kbd>做出的最近编辑。",
+ "apihelp-rollback-example-summary": "回退由IP用户<kbd>192.0.2.5</kbd>对页面<kbd>Main Page</kbd>做出的最近编辑,带编辑摘要<kbd>Reverting vandalism</kbd>,并将这些编辑和回退标记为机器人编辑。",
+ "apihelp-rsd-summary": "导出一个RSD(Really Simple Discovery)架构。",
+ "apihelp-rsd-example-simple": "导出RSD架构。",
+ "apihelp-setnotificationtimestamp-summary": "更新监视页面的通知时间戳。",
+ "apihelp-setnotificationtimestamp-extended-description": "这会影响监视列表和历史中已更改页面的高亮度,并且如果“{{int:tog-enotifwatchlistpages}}”设置被启用的话,也会影响电子邮件的发送。",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "工作于所有已监视页面。",
+ "apihelp-setnotificationtimestamp-param-timestamp": "要设置通知时间戳的时间戳。",
+ "apihelp-setnotificationtimestamp-param-torevid": "要设置通知时间戳的修订(只限一个页面)。",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "要设置通知时间戳的较新修订(只限一个页面)。",
+ "apihelp-setnotificationtimestamp-example-all": "重置整个监视列表的通知状态。",
+ "apihelp-setnotificationtimestamp-example-page": "重置用于<kbd>Main page</kbd>的通知状态。",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "设置<kbd>Main page</kbd>的通知时间戳,这样所有从2012年1月1日起的编辑都会是未复核的。",
+ "apihelp-setnotificationtimestamp-example-allpages": "重置在<kbd>{{ns:user}}</kbd>名字空间中的页面的通知状态。",
+ "apihelp-setpagelanguage-summary": "更改页面的语言。",
+ "apihelp-setpagelanguage-extended-description-disabled": "此wiki不允许更改页面的语言。\n\n启用<var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>以使用此操作。",
+ "apihelp-setpagelanguage-param-title": "您希望更改语言的页面标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-setpagelanguage-param-pageid": "您希望更改语言的页面ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-setpagelanguage-param-lang": "更改页面的目标语言的语言代码。使用<kbd>default</kbd>以重置页面为wiki的默认内容语言。",
+ "apihelp-setpagelanguage-param-reason": "更改原因。",
+ "apihelp-setpagelanguage-param-tags": "要应用到此操作导致的日志记录的更改标签。",
+ "apihelp-setpagelanguage-example-language": "更改<kbd>Main Page</kbd>的语言为巴斯克语。",
+ "apihelp-setpagelanguage-example-default": "更改ID为123的页面的语言为wiki的默认内容语言。",
+ "apihelp-stashedit-summary": "在分享缓存中准备编辑。",
+ "apihelp-stashedit-extended-description": "这是打算通过使用来自编辑表单的AJAX以改进页面保存的性能。",
+ "apihelp-stashedit-param-title": "已开始编辑的页面标题。",
+ "apihelp-stashedit-param-section": "段落数。<kbd>0</kbd>用于首段,<kbd>new</kbd>用于新的段落。",
+ "apihelp-stashedit-param-sectiontitle": "新段落的标题。",
+ "apihelp-stashedit-param-text": "页面内容。",
+ "apihelp-stashedit-param-stashedtexthash": "要使用的来自先前暂存处的页面内容哈希。",
+ "apihelp-stashedit-param-contentmodel": "新内容的内容模型。",
+ "apihelp-stashedit-param-contentformat": "用于输入文本的内容序列化格式。",
+ "apihelp-stashedit-param-baserevid": "基础修订的修订ID。",
+ "apihelp-stashedit-param-summary": "更改摘要。",
+ "apihelp-tag-summary": "从个别修订或日志记录中添加或移除更改标签。",
+ "apihelp-tag-param-rcid": "要添加或移除标签的一个或更多的最近更改ID。",
+ "apihelp-tag-param-revid": "要添加或移除标签的一个或更多的修订ID。",
+ "apihelp-tag-param-logid": "要添加或移除标签的一个或更多的日志记录ID。",
+ "apihelp-tag-param-add": "要添加的标签。只有手动定义的标签可以添加。",
+ "apihelp-tag-param-remove": "要移除的标签。只有手动定义或完全不明确的标签可以被移除。",
+ "apihelp-tag-param-reason": "更改原因。",
+ "apihelp-tag-param-tags": "要应用到将被创建为此操作结果的日志实体的标签。",
+ "apihelp-tag-example-rev": "将<kbd>vandalism</kbd>标签添加至修订ID 123,而不指定原因",
+ "apihelp-tag-example-log": "从日志记录ID 123移除<kbd>spam</kbd>标签,原因为<kbd>Wrongly applied</kbd>",
+ "apihelp-tokens-summary": "获取数据修改操作的令牌。",
+ "apihelp-tokens-extended-description": "此模块已弃用,以便[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]使用。",
+ "apihelp-tokens-param-type": "要请求的令牌类型。",
+ "apihelp-tokens-example-edit": "检索一个编辑令牌(默认)。",
+ "apihelp-tokens-example-emailmove": "检索一个电子邮件令牌和一个移动令牌。",
+ "apihelp-unblock-summary": "解封一位用户。",
+ "apihelp-unblock-param-id": "解封时需要的封禁ID(通过<kbd>list=blocks</kbd>获得)。不能与<var>$1user</var>或<var>$1userid</var>一起使用。",
+ "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP地址段。不能与<var>$1id</var>或<var>$1userid</var>一起使用。",
+ "apihelp-unblock-param-userid": "要封禁的用户ID。不能与<var>$1id</var>或<var>$1user</var>一起使用。",
+ "apihelp-unblock-param-reason": "解封的原因。",
+ "apihelp-unblock-param-tags": "要在封禁日志中应用到实体的更改标签。",
+ "apihelp-unblock-example-id": "解封封禁ID #<kbd>105</kbd>。",
+ "apihelp-unblock-example-user": "解封用户<kbd>Bob</kbd>,原因<kbd>Sorry Bob</kbd>。",
+ "apihelp-undelete-summary": "恢复删除页面的修订版本。",
+ "apihelp-undelete-extended-description": "被删除修订的列表(包括时间戳)可通过[[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]]检索到,并且被删除的文件ID列表可通过[[Special:ApiHelp/query+filearchive|list=filearchive]]检索到。",
+ "apihelp-undelete-param-title": "要恢复的页面标题。",
+ "apihelp-undelete-param-reason": "恢复的原因。",
+ "apihelp-undelete-param-tags": "要在删除日志中应用到实体的更改标签。",
+ "apihelp-undelete-param-timestamps": "要回复的修订的时间戳。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
+ "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
+ "apihelp-undelete-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-undelete-example-page": "恢复页面<kbd>Main Page</kbd>。",
+ "apihelp-undelete-example-revisions": "恢复<kbd>Main Page</kbd>的两个修订。",
+ "apihelp-unlinkaccount-summary": "从当前用户移除已连接的第三方账户。",
+ "apihelp-unlinkaccount-example-simple": "尝试移除当前用户的,与<kbd>FooAuthenticationRequest</kbd>相关联提供方的链接。",
+ "apihelp-upload-summary": "上传文件,或获取正在等待中的上传的状态。",
+ "apihelp-upload-extended-description": "可以使用的几种方法:\n* 直接上传文件内容,使用<var>$1file</var>参数。\n* 成批上传文件,使用<var>$1filesize</var>、<var>$1chunk</var>和<var>$1offset</var>参数。\n* 有MediaWiki服务器从URL检索一个文件,使用<var>$1url</var>参数。\n* 完成一次由于警告而失败的早前上传,使用<var>$1filekey</var>参数。\n需要注意,当发送<var>$1file</var>时,HTTP POST必须做为一次文件上传(也就是使用<code>multipart/form-data</code>)完成。",
+ "apihelp-upload-param-filename": "目标文件名。",
+ "apihelp-upload-param-comment": "上传注释。如果没有指定<var>$1text</var>,那么它也被用于新文件的初始页面文本。",
+ "apihelp-upload-param-tags": "更改标签以应用于上传日志记录和文件页面修订中。",
+ "apihelp-upload-param-text": "用于新文件的初始页面文本。",
+ "apihelp-upload-param-watch": "监视页面。",
+ "apihelp-upload-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
+ "apihelp-upload-param-file": "文件内容。",
+ "apihelp-upload-param-url": "要检索文件来源的URL。",
+ "apihelp-upload-param-filekey": "用于识别一次临时藏匿的早前上传的关键字。",
+ "apihelp-upload-param-sessionkey": "与$1filekey相同,基于向后兼容而维护。",
+ "apihelp-upload-param-stash": "如果设置,服务器将临时藏匿文件而不是加入存储库。",
+ "apihelp-upload-param-filesize": "全部上传的文件大小。",
+ "apihelp-upload-param-offset": "数据块的偏移量(字节)。",
+ "apihelp-upload-param-chunk": "大块内容。",
+ "apihelp-upload-param-async": "在可能的情况下,使潜在的大文件操作异步进行。",
+ "apihelp-upload-param-checkstatus": "只检索指定文件密钥的上传状态。",
+ "apihelp-upload-example-url": "从URL上传。",
+ "apihelp-upload-example-filekey": "完成一次由于警告而失败的上传。",
+ "apihelp-userrights-summary": "更改一位用户的组成员。",
+ "apihelp-userrights-param-user": "用户名。",
+ "apihelp-userrights-param-userid": "用户ID。",
+ "apihelp-userrights-param-add": "将用户加入至这些组中,或如果其已作为成员,更新其所在用户组成员资格的终止时间。",
+ "apihelp-userrights-param-expiry": "到期时间戳。可以是相对值(例如<kbd>5 months</kbd>或<kbd>2 weeks</kbd>)或绝对值(例如<kbd>2014-09-18T12:34:56Z</kbd>)。如果只设置一个时间戳,它将被用于所有传递给<var>$1add</var>参数的组。对于永不过时的用户组,使用<kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd>或<kbd>never</kbd>。",
+ "apihelp-userrights-param-remove": "将用户从这些组中移除。",
+ "apihelp-userrights-param-reason": "更改原因。",
+ "apihelp-userrights-param-tags": "要在用户权限日志中应用到实体的更改标签。",
+ "apihelp-userrights-example-user": "将用户<kbd>FooBot</kbd>添加至<kbd>bot</kbd>用户组,并从<kbd>sysop</kbd>和<kbd>bureaucrat</kbd>组移除。",
+ "apihelp-userrights-example-userid": "将ID为<kbd>123</kbd>的用户加入至<kbd>机器人</kbd>组,并将其从<kbd>管理员</kbd>和<kbd>行政员</kbd>组移除。",
+ "apihelp-userrights-example-expiry": "添加用户<kbd>SometimeSysop</kbd>至用户组<kbd>sysop</kbd>,为期1个月。",
+ "apihelp-validatepassword-summary": "验证密码是否符合wiki的密码方针。",
+ "apihelp-validatepassword-extended-description": "如果密码可以接受,就报告有效性为<samp>Good</samp>,如果密码可用于登录但必须更改,则报告为<samp>Change</samp>,或如果密码不可使用,则报告为<samp>Invalid</samp>。",
+ "apihelp-validatepassword-param-password": "要验证的密码。",
+ "apihelp-validatepassword-param-user": "用户名,供测试账户创建时使用。命名的用户必须不存在。",
+ "apihelp-validatepassword-param-email": "电子邮件,供测试账户创建时使用。",
+ "apihelp-validatepassword-param-realname": "真实姓名,供测试账户创建时使用。",
+ "apihelp-validatepassword-example-1": "验证当前用户的密码<kbd>foobar</kbd>。",
+ "apihelp-validatepassword-example-2": "为创建用户<kbd>Example</kbd>验证密码<kbd>qwerty</kbd>。",
+ "apihelp-watch-summary": "从当前用户的监视列表中添加或移除页面。",
+ "apihelp-watch-param-title": "要(取消)监视的页面。也可使用<var>$1titles</var>。",
+ "apihelp-watch-param-unwatch": "如果设置页面将被取消监视而不是被监视。",
+ "apihelp-watch-example-watch": "监视页面<kbd>Main Page</kbd>。",
+ "apihelp-watch-example-unwatch": "取消监视页面<kbd>Main Page</kbd>。",
+ "apihelp-watch-example-generator": "监视主名字空间中的最少几个页面。",
+ "apihelp-format-example-generic": "返回查询结果为$1格式。",
+ "apihelp-format-param-wrappedhtml": "作为一个JSON对象返回优质打印的HTML和关联的ResouceLoader模块。",
+ "apihelp-json-summary": "输出数据为JSON格式。",
+ "apihelp-json-param-callback": "如果指定,将输出内容包裹在一个指定的函数调用中。出于安全考虑,所有用户相关的数据将被限制。",
+ "apihelp-json-param-utf8": "如果指定,使用十六进制转义序列将大多数(但不是全部)非ASCII的字符编码为UTF-8,而不是替换它们。默认当<var>formatversion</var>不是<kbd>1</kbd>时。",
+ "apihelp-json-param-ascii": "如果指定,使用十六进制转义序列将所有非ASCII编码。默认当<var>formatversion</var>为<kbd>1</kbd>时。",
+ "apihelp-json-param-formatversion": "输出格式:\n;1:向后兼容格式(XML样式布尔值、用于内容节点的<samp>*</samp>键等)。\n;2:实验现代格式。细节可能更改!\n;latest:使用最新格式(当前为<kbd>2</kbd>),格式可能在没有警告的情况下更改。",
+ "apihelp-jsonfm-summary": "输出数据为JSON格式(HTML优质打印效果)。",
+ "apihelp-none-summary": "不输出任何东西。",
+ "apihelp-php-summary": "输出数据为序列化PHP格式。",
+ "apihelp-php-param-formatversion": "输出格式:\n;1:向后兼容格式(XML样式布尔值、用于内容节点的<samp>*</samp>键等)。\n;2:实验现代格式。细节可能更改!\n;latest:使用最新格式(当前为<kbd>2</kbd>),格式可能在没有警告的情况下更改。",
+ "apihelp-phpfm-summary": "输出数据为序列化PHP格式(HTML优质打印效果)。",
+ "apihelp-rawfm-summary": "输出数据为JSON格式,包含调试元素(HTML优质打印效果)。",
+ "apihelp-xml-summary": "输出数据为XML格式。",
+ "apihelp-xml-param-xslt": "如果指定,加入已命名的页面作为一个XSL样式表。值必须是在{{ns:MediaWiki}}名字空间以<code>.xsl</code>为结尾的标题。",
+ "apihelp-xml-param-includexmlnamespace": "如果指定,添加一个XML名字空间。",
+ "apihelp-xmlfm-summary": "输出数据为XML格式(HTML优质打印效果)。",
+ "api-format-title": "MediaWiki API 结果",
+ "api-format-prettyprint-header": "这是$1格式的HTML实现。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML实现,设置<kbd>format=$2</kbd>。\n\n参见[[mw:Special:MyLanguage/API|完整文档]],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
+ "api-format-prettyprint-header-only-html": "这是用来调试的HTML实现,不适合实际使用。\n\n参见[[mw:Special:MyLanguage/API|完整文档]],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
+ "api-format-prettyprint-header-hyperlinked": "这是$1格式的HTML实现。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML实现,设置[$3 <kbd>format=$2</kbd>]。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
+ "api-format-prettyprint-status": "此响应将会返回HTTP状态$1 $2。",
+ "api-login-fail-aborted": "身份验证需要用户交互,而其不被<kbd>action=login</kbd>支持。要通过<kbd>action=login</kbd>登录,请参见[[Special:BotPasswords]]。要继续使用主账户登录,请参见<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>。",
+ "api-login-fail-aborted-nobotpw": "身份验证需要用户交互,而其不被<kbd>action=login</kbd>支持。要登录,请参见<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>。",
+ "api-login-fail-badsessionprovider": "当使用$1时不能登录。",
+ "api-login-fail-sameorigin": "当同源协议未应用时不能登录。",
+ "api-pageset-param-titles": "要工作的标题列表。",
+ "api-pageset-param-pageids": "要工作的页面ID列表。",
+ "api-pageset-param-revids": "要工作的修订ID列表。",
+ "api-pageset-param-generator": "通过执行指定查询模块获得页面列表以工作。\n\n<strong>注意:</strong>发生器参数名称必须以“g”开头,参见例子。",
+ "api-pageset-param-redirects-generator": "自动解决在<var>$1titles</var>、<var>$1pageids</var>和<var>$1revids</var>,以及在由<var>$1generator</var>返回的页面中的重定向。",
+ "api-pageset-param-redirects-nogenerator": "自动解决<var>$1titles</var>、<var>$1pageids</var>和<var>$1revids</var>中的重定向。",
+ "api-pageset-param-converttitles": "如有需要,将标题转换为其他变体。只有当wiki的内容语言支持变体转换时才能工作。支持变体转换的语言包括$1。",
+ "api-help-title": "MediaWiki API 帮助",
+ "api-help-lead": "这是自动生成的MediaWiki API文档页面。\n\n文档和例子:https://www.mediawiki.org/wiki/API:Main_page/zh",
+ "api-help-main-header": "主模块",
+ "api-help-undocumented-module": "没有用于模块$1的文档。",
+ "api-help-flag-deprecated": "此模块已弃用。",
+ "api-help-flag-internal": "<strong>此模块是内部或不稳定的。</strong>它的操作可以更改而不另行通知。",
+ "api-help-flag-readrights": "此模块需要读取权限。",
+ "api-help-flag-writerights": "此模块需要写入权限。",
+ "api-help-flag-mustbeposted": "此模块只允许POST请求。",
+ "api-help-flag-generator": "此模块可作为发生器使用。",
+ "api-help-source": "来源:$1",
+ "api-help-source-unknown": "来源:<span class=\"apihelp-unknown\">未知</span>",
+ "api-help-license": "许可协议:[[$1|$2]]",
+ "api-help-license-noname": "许可协议:[[$1|参见链接]]",
+ "api-help-license-unknown": "许可协议:<span class=\"apihelp-unknown\">未知</span>",
+ "api-help-parameters": "{{PLURAL:$1|参数}}:",
+ "api-help-param-deprecated": "已弃用。",
+ "api-help-param-required": "这个参数是必须的。",
+ "api-help-datatypes-header": "数据类型",
+ "api-help-datatypes": "至MediaWiki的输入应为NFC标准化的UTF-8。MediaWiki可以尝试转换其他输入,但这可能导致一些操作失败(例如带MD5校验[[Special:ApiHelp/edit|编辑]])。\n\n一些在API请求中的参数类型需要更进一步解释:\n;boolean\n:布尔参数就像HTML复选框一样工作:如果指定参数,无论何值都被认为是真。如果要假值,则可完全忽略参数。\n;timestamp\n:时间戳可被指定为很多格式。推荐使用ISO 8601日期和时间标准。所有时间为UTC时间,包含的任何时区会被忽略。\n:* ISO 8601日期和时间,<kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd>(标点和<kbd>Z</kbd>是可选项)\n:* 带小数秒(会被忽略)的ISO 8601日期和时间,<kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd>(破折号、冒号和<kbd>Z</kbd>是可选的)\n:* MediaWiki格式,<kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* 一般数字格式,<kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>(<kbd>GMT</kbd>、<kbd>+<var>##</var></kbd>或<kbd>-<var>##</var></kbd>的可选时区会被忽略)\n:* EXIF格式,<kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 2822格式(时区可省略),<kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850格式(时区可省略),<kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime格式,<kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* 从1970-01-01T00:00:00Z开始的秒数,作为1到13位数的整数(除了<kbd>0</kbd>)\n:* 字符串<kbd>now</kbd>\n;替代多值分隔符\n:使用多个值的参数通常会与管道符号分隔的值一起提交,例如<kbd>param=value1|value2</kbd>或<kbd>param=value1%7Cvalue2</kbd>。如果值必须包含管道符号,使用U+001F(单位分隔符)作为分隔符,''并''在值前加前缀U+001F,例如<kbd>param=%1Fvalue1%1Fvalue2</kbd>。",
+ "api-help-param-type-limit": "类型:整数或<kbd>max</kbd>",
+ "api-help-param-type-integer": "类型:{{PLURAL:$1|1=整数|2=整数列表}}",
+ "api-help-param-type-boolean": "类型:布尔值([[Special:ApiHelp/main#main/datatypes|详细信息]])",
+ "api-help-param-type-timestamp": "类型:{{PLURAL:$1|1=时间戳|2=时间戳列表}}([[Special:ApiHelp/main#main/datatypes|允许格式]])",
+ "api-help-param-type-user": "类型:{{PLURAL:$1|1=用户名|2=用户名列表}}",
+ "api-help-param-list": "{{PLURAL:$1|1=以下值中的一个|2=值(以<kbd>{{!}}</kbd>或[[Special:ApiHelp/main#main/datatypes|替代物]]分隔)}}:$2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必须为空|可以为空,或$2}}",
+ "api-help-param-limit": "不允许超过$1。",
+ "api-help-param-limit2": "不允许超过$1个(对于机器人则是$2个)。",
+ "api-help-param-integer-min": "{{PLURAL:$1|值}}必须不少于$2。",
+ "api-help-param-integer-max": "{{PLURAL:$1|值}}必须不大于$3。",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|值}}必须介于$2和$3之间。",
+ "api-help-param-upload": "必须被公布为使用multipart/form-data的一次文件上传。",
+ "api-help-param-multi-separate": "通过<kbd>|</kbd>或[[Special:ApiHelp/main#main/datatypes|替代物]]隔开各值。",
+ "api-help-param-multi-max": "值的最大数量是{{PLURAL:$1|$1}}(对于机器人则是{{PLURAL:$2|$2}})。",
+ "api-help-param-multi-max-simple": "值的最大数量为{{PLURAL:$1|$1}}。",
+ "api-help-param-multi-all": "要指定所有值,请使用<kbd>$1</kbd>。",
+ "api-help-param-default": "默认:$1",
+ "api-help-param-default-empty": "默认:<span class=\"apihelp-empty\">(空)</span>",
+ "api-help-param-token": "从[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]取回的“$1”令牌",
+ "api-help-param-token-webui": "出于兼容性考虑,web UI中使用的令牌也被接受。",
+ "api-help-param-disabled-in-miser-mode": "由于[[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模式]]而禁用。",
+ "api-help-param-limited-in-miser-mode": "<strong>注意:</strong>由于[[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模式]],使用这个可能导致继续前返回少于<var>$1limit</var>个结果;极端情况下可能不会返回任何结果。",
+ "api-help-param-direction": "列举的方向:\n;newer:最早的优先。注意:$1start应早于$1end。\n;older:最新的优先(默认)。注意:$1start应晚于$1end。",
+ "api-help-param-continue": "当更多结果可用时,使用这个继续。",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(没有说明)</span>",
+ "api-help-param-maxbytes": "不能超过$1{{PLURAL:$1|字节}}。",
+ "api-help-param-maxchars": "不能超过$1个{{PLURAL:$1|字符}}。",
+ "api-help-examples": "{{PLURAL:$1|例子}}:",
+ "api-help-permissions": "{{PLURAL:$1|权限}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|授予}}:$2",
+ "api-help-right-apihighlimits": "在API查询中使用更高的上限(慢查询:$1;快查询:$2)。慢查询的限制也适用于多值参数。",
+ "api-help-open-in-apisandbox": "<small>[在沙盒中打开]</small>",
+ "api-help-authmanager-general-usage": "使用此模块的一般程序是:\n# 通过<kbd>amirequestsfor=$4</kbd>取得来自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的可用字段,和来自<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>的<kbd>$5</kbd>令牌。\n# 向用户显示字段,并获得其提交的内容。\n# 发送(POST)至此模块,提供<var>$1returnurl</var>及任何相关字段。\n# 在响应中检查<samp>status</samp>。\n#* 如果您收到了<samp>PASS</samp>(成功)或<samp>FAIL</samp>(失败),则认为操作结束。成功与否如上句所示。\n#* 如果您收到了<samp>UI</samp>,向用户显示新字段,并再次获取其提交的内容。然后再次使用<var>$1continue</var>,向本模块提交相关字段,并重复第四步。\n#* 如果您收到了<samp>REDIRECT</samp>,将用户指向<samp>redirecttarget</samp>中的目标,等待其返回<var>$1returnurl</var>。然后再次使用<var>$1continue</var>,向本模块提交返回URL中提供的一切字段,并重复第四步。\n#* 如果您收到了<samp>RESTART</samp>,这意味着身份验证正常运作,但我们没有链接的用户账户。您可以将此看做<samp>UI</samp>或<samp>FAIL</samp>。",
+ "api-help-authmanagerhelper-requests": "只使用这些身份验证请求,通过返回自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的<samp>id</samp>与<kbd>amirequestsfor=$1</kbd>,或来自此模块之前的响应。",
+ "api-help-authmanagerhelper-request": "使用此身份验证请求,通过返回自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的<samp>id</samp>与<kbd>amirequestsfor=$1</kbd>。",
+ "api-help-authmanagerhelper-messageformat": "返回消息使用的格式。",
+ "api-help-authmanagerhelper-mergerequestfields": "合并用于所有身份验证请求的字段信息至一个数组中。",
+ "api-help-authmanagerhelper-preservestate": "从之前失败的登录尝试中保持状态,如果可能。",
+ "api-help-authmanagerhelper-returnurl": "为第三方身份验证流返回URL,必须为绝对值。需要此值或<var>$1continue</var>两者之一。\n\n在接收<samp>REDIRECT</samp>响应时,您将代表性的打开浏览器或web视图到特定用于第三方身份验证流的<samp>redirecttarget</samp> URL。当它完成时,第三方将发生浏览器或web视图至此URL。您应当提取任何来自URL的查询或POST参数,并作为<var>$1continue</var>请求传递至此API模块。",
+ "api-help-authmanagerhelper-continue": "此请求是在早先的<samp>UI</samp>或<samp>REDIRECT</samp>响应之后的附加请求。必需此值或<var>$1returnurl</var>。",
+ "api-help-authmanagerhelper-additional-params": "此模块允许额外参数,取决于可用的身份验证请求。使用<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>与<kbd>amirequestsfor=$1</kbd>(或之前来自此模块的相应,如果可以)以决定可用请求及其使用的字段。",
+ "apierror-allimages-redirect": "当使用<kbd>allimages</kbd>作为发生器时,请使用<kbd>gaifilterredir=nonredirects</kbd>而不是<var>redirects</var>。",
+ "apierror-allpages-generator-redirects": "当使用<kbd>allpages</kbd>作为发生器时,请使用<kbd>gapfilterredir=nonredirects</kbd>而不是<var>redirects</var>。",
+ "apierror-appendnotsupported": "不能使用内容模型$1附加在页面上。",
+ "apierror-articleexists": "您尝试创建的条目已刚刚被创建。",
+ "apierror-assertbotfailed": "主张用户有<code>bot</code>权限失败。",
+ "apierror-assertnameduserfailed": "主张用户为“$1”失败。",
+ "apierror-assertuserfailed": "主张用户已登录失败。",
+ "apierror-autoblocked": "您的IP地址已被自动封禁,因为它曾被一位已封禁用户使用。",
+ "apierror-badconfig-resulttoosmall": "此wiki上<code>$wgAPIMaxResultSize</code>的值太小,不能获得基础结果信息。",
+ "apierror-badcontinue": "无效继续参数。您应该传递由之前查询返回的原始值。",
+ "apierror-baddiff": "不能取得差异。一个或多个修订版本不存在,或您没有权限查看它们。",
+ "apierror-baddiffto": "<var>$1diffto</var>必须设置为非负数、<kbd>prev</kbd>、<kbd>next</kbd>或<kbd>cur</kbd>。",
+ "apierror-badformat-generic": "内容模型$2尚不支持请求的内容格式$1。",
+ "apierror-badformat": "由$3使用的内容模型$2尚不支持请求的内容格式$1。",
+ "apierror-badgenerator-notgenerator": "模块<kbd>$1</kbd>不能用作发生器。",
+ "apierror-badgenerator-unknown": "未知<kbd>generator=$1</kbd>。",
+ "apierror-badip": "IP参数无效。",
+ "apierror-badmd5": "提供的MD5哈希不正确。",
+ "apierror-badmodule-badsubmodule": "模块<kbd>$1</kbd>不包含子模块“$2”。",
+ "apierror-badmodule-nosubmodules": "模块<kbd>$1</kbd>没有子模块。",
+ "apierror-badparameter": "用于参数<var>$1</var>的值无效。",
+ "apierror-badquery": "无效的查询。",
+ "apierror-badtimestamp": "用于时间戳参数<var>$1</var>的值“$2”无效。",
+ "apierror-badtoken": "无效的CSRF令牌。",
+ "apierror-badupload": "文件上传参数<var>$1</var>不是文件上传;确保为您的POST使用<code>multipart/form-data</code>,并在<code>Content-Disposition</code>标头中包含文件名。",
+ "apierror-badurl": "用于URL参数<var>$1</var>的值“$2”无效。",
+ "apierror-baduser": "用于用户参数<var>$1</var>的值“$2”无效。",
+ "apierror-badvalue-notmultivalue": "U+001F多值分隔符只可以用于多值参数。",
+ "apierror-bad-watchlist-token": "提供了不正确的监视列表令牌。请在[[Special:Preferences]]设置正确的令牌。",
+ "apierror-blockedfrommail": "您已被封禁,不能发送电子邮件。",
+ "apierror-blocked": "您已被封禁,不能编辑。",
+ "apierror-botsnotsupported": "此界面不支持机器人。",
+ "apierror-cannot-async-upload-file": "参数<var>async</var>和<var>file</var>不能结合。如果您希望对您上传的文件进行不同处理,请将其首先上传至暂存处(使用<var>stash</var>参数),然后异步发布暂存文件(使用<var>filekey</var>和<var>async</var>)。",
+ "apierror-cannotreauthenticate": "由于您的身份不能被验证,此操作不可用。",
+ "apierror-cannotviewtitle": "您不被允许查看$1。",
+ "apierror-cantblock-email": "您没有权限封禁用户通过wiki发送电子邮件。",
+ "apierror-cantblock": "您没有权限封禁用户。",
+ "apierror-cantchangecontentmodel": "您没有权限更改页面的内容模型。",
+ "apierror-canthide": "您没有权限从封禁日志中隐藏用户名。",
+ "apierror-cantimport-upload": "您没有权限导入上传的页面。",
+ "apierror-cantimport": "您没有权限导入页面。",
+ "apierror-cantoverwrite-sharedfile": "目标文件存在于分享存储库,并且您没有权限覆盖它。",
+ "apierror-cantsend": "您没有登录,您没有已确认的电子邮件地址,或者您未被允许向其他用户发送电子邮件,所以您不能发送电子邮件。",
+ "apierror-cantundelete": "不能还原:请求的修订版本可能不存在,或可能已被还原。",
+ "apierror-changeauth-norequest": "创建更改请求失败。",
+ "apierror-chunk-too-small": "对于非最终块,最小块大小为$1{{PLURAL:$1|字节}}。",
+ "apierror-cidrtoobroad": "比/$2更宽的$1 CIDR地址段不被接受。",
+ "apierror-compare-no-title": "不能在没有标题的情况下预保存转换。尝试指定<var>fromtitle</var>或<var>totitle</var>。",
+ "apierror-compare-nosuchfromsection": "在“from”内容中没有章节$1。",
+ "apierror-compare-nosuchtosection": "在“to”内容中没有章节$1。",
+ "apierror-compare-relative-to-nothing": "没有与<var>torelative</var>的“from”修订版本相对的版本。",
+ "apierror-contentserializationexception": "内容序列化失败:$1",
+ "apierror-contenttoobig": "您提供的内容超过了$1{{PLURAL:$1|千字节}}的条目大小限制。",
+ "apierror-copyuploadbaddomain": "不允许从此域名通过URL上传。",
+ "apierror-copyuploadbadurl": "不允许从此URL上传。",
+ "apierror-create-titleexists": "现有标题不能通过<kbd>create</kbd>保护。",
+ "apierror-csp-report": "处理CSP报告时出错:$1。",
+ "apierror-databaseerror": "[$1]数据库查询错误。",
+ "apierror-deletedrevs-param-not-1-2": "<var>$1</var>参数不能用于模式1或2。",
+ "apierror-deletedrevs-param-not-3": "<var>$1</var>参数不能用于模式3。",
+ "apierror-emptynewsection": "无法创建空白新章节。",
+ "apierror-emptypage": "不允许创建新的,空白的页面。",
+ "apierror-exceptioncaught": "[$1]捕获异常:$2",
+ "apierror-filedoesnotexist": "文件不存在。",
+ "apierror-fileexists-sharedrepo-perm": "目标文件存在于共享存储库。使用<var>ignorewarnings</var>参数覆盖它。",
+ "apierror-filenopath": "不能获取本地文件路径。",
+ "apierror-filetypecannotberotated": "文件类型不能旋转。",
+ "apierror-formatphp": "此响应不能使用<kbd>format=php</kbd>代表。请参见https://phabricator.wikimedia.org/T68776。",
+ "apierror-imageusage-badtitle": "<kbd>$1</kbd>的标题必须是文件。",
+ "apierror-import-unknownerror": "导入时的未知错误:$1。",
+ "apierror-integeroutofrange-abovebotmax": "对于机器人和管理员,<var>$1</var>不能超过$2(设置为$3)。",
+ "apierror-integeroutofrange-abovemax": "对于用户,<var>$1</var>不能超过$2(设置为$3)。",
+ "apierror-integeroutofrange-belowminimum": "<var>$1</var>不能小于$2(设置为$3)。",
+ "apierror-invalidcategory": "您输入的分类名称无效。",
+ "apierror-invalid-chunk": "偏移值与当前数据块之和大于声称的文件大小。",
+ "apierror-invalidexpiry": "无效的过期时间“$1”。",
+ "apierror-invalid-file-key": "不是有效的文件关键词。",
+ "apierror-invalidlang": "用于参数<var>$1</var>的语言值无效。",
+ "apierror-invalidoldimage": "<var>oldimage</var>参数有无效格式。",
+ "apierror-invalidparammix-cannotusewith": "<kbd>$1</kbd>参数不能与<kbd>$2</kbd>一起使用。",
+ "apierror-invalidparammix-mustusewith": "<kbd>$1</kbd>参数只能与<kbd>$2</kbd>一起使用。",
+ "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd>不能连同<var>oldid</var>、<var>pageid</var>或<var>page</var>参数使用。请使用<var>title</var>和<var>text</var>。",
+ "apierror-invalidparammix": "{{PLURAL:$2|参数}}$1不能一起使用。",
+ "apierror-invalidsection": "<var>section</var>参数必须为有效的章节ID或<kbd>new</kbd>。",
+ "apierror-invalidsha1base36hash": "提供的SHA1Base36哈希无效。",
+ "apierror-invalidsha1hash": "提供的SHA1哈希无效。",
+ "apierror-invalidtitle": "错误标题“$1”。",
+ "apierror-invalidurlparam": "<var>$1urlparam</var>的值无效(<kbd>$2=$3</kbd>)。",
+ "apierror-invaliduser": "无效用户名“$1”。",
+ "apierror-invaliduserid": "用户ID<var>$1</var>无效。",
+ "apierror-maxbytes": "参数<var>$1</var>不能超过$2{{PLURAL:$2|字节}}",
+ "apierror-maxchars": "参数<var>$1</var>不能超过$2个{{PLURAL:$2|字符}}",
+ "apierror-maxlag-generic": "正在等待数据库服务器:已延迟$1{{PLURAL:$1|秒}}。",
+ "apierror-maxlag": "正在等待$2:已延迟$1{{PLURAL:$1|秒}}。",
+ "apierror-mimesearchdisabled": "MIME搜索在Miser模式中被禁用。",
+ "apierror-missingcontent-pageid": "丢失ID为$1的页面的内容。",
+ "apierror-missingcontent-revid": "丢失ID为$1的修订版本的内容。",
+ "apierror-missingparam-at-least-one-of": "需要{{PLURAL:$2|参数$1|$1中的至少一个参数}}。",
+ "apierror-missingparam-one-of": "需要{{PLURAL:$2|参数$1|$1中的一个参数}}。",
+ "apierror-missingparam": "<var>$1</var>参数必须被设置。",
+ "apierror-missingrev-pageid": "没有ID为$1的页面的当前修订版本。",
+ "apierror-missingrev-title": "没有标题$1的当前修订版本。",
+ "apierror-missingtitle-createonly": "丢失标题只可以通过<kbd>create</kbd>保护。",
+ "apierror-missingtitle": "您指定的页面不存在。",
+ "apierror-missingtitle-byname": "页面$1不存在。",
+ "apierror-moduledisabled": "<kbd>$1</kbd>模块已被禁用。",
+ "apierror-multival-only-one-of": "参数<var>$1</var>只允许$2{{PLURAL:$3||之一}}。",
+ "apierror-multpages": "<var>$1</var>只可以在单一页面使用。",
+ "apierror-mustbeloggedin-changeauth": "您必须登录以更改身份验证数据。",
+ "apierror-mustbeloggedin-generic": "您必须登录。",
+ "apierror-mustbeloggedin-linkaccounts": "您必须登录以链接账户。",
+ "apierror-mustbeloggedin-removeauth": "您必须登录以移除身份验证数据。",
+ "apierror-mustbeloggedin-uploadstash": "上传暂存功能只对已登录用户可用。",
+ "apierror-mustbeloggedin": "您必须登录至$1。",
+ "apierror-mustbeposted": "<kbd>$1</kbd>模块需要POST请求。",
+ "apierror-mustpostparams": "以下{{PLURAL:$2|参数}}在查询字符串中被找到,但必须在POST正文中:$1。",
+ "apierror-noapiwrite": "通过API编辑此wiki已禁用。请确保<code>$wgEnableWriteAPI=true;</code>声明包含在wiki的<code>LocalSettings.php</code>文件中。",
+ "apierror-nochanges": "没有请求的更改。",
+ "apierror-nodeleteablefile": "没有该文件的旧版本。",
+ "apierror-no-direct-editing": "$2使用的内容模型$1不支持通过API直接编辑。",
+ "apierror-noedit-anon": "匿名用户不能编辑页面。",
+ "apierror-noedit": "您没有权限编辑页面。",
+ "apierror-noimageredirect-anon": "匿名用户不能创建图片重定向。",
+ "apierror-noimageredirect": "您没有权限创建图片重定向。",
+ "apierror-nosuchlogid": "没有ID为$1的日志记录。",
+ "apierror-nosuchpageid": "没有ID为$1的页面。",
+ "apierror-nosuchrcid": "没有ID为$1的最近更改。",
+ "apierror-nosuchrevid": "没有ID为$1的修订版本。",
+ "apierror-nosuchsection": "没有章节$1。",
+ "apierror-nosuchsection-what": "在$2中没有章节$1。",
+ "apierror-nosuchuserid": "没有ID为$1的用户。",
+ "apierror-notarget": "您没有为此章节指定有效目标。",
+ "apierror-notpatrollable": "修订版本r$1不能巡查,因为它太旧了。",
+ "apierror-nouploadmodule": "未设置上传模块。",
+ "apierror-offline": "由于网络连接问题无法进行。请确保您的网络连接正常工作,并重试。",
+ "apierror-opensearch-json-warnings": "警告不能以OpenSearch JSON格式表示。",
+ "apierror-pagecannotexist": "名字空间不允许实际页面。",
+ "apierror-pagedeleted": "在您取得页面时间戳以来,页面已被删除。",
+ "apierror-pagelang-disabled": "此wiki不允许更改页面的语言。",
+ "apierror-paramempty": "参数<var>$1</var>不能为空。",
+ "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd>只支持wiki文本内容。",
+ "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd>只支持wiki文本内容。$1使用内容模型$2。",
+ "apierror-pastexpiry": "终止时间“$1”已过去。",
+ "apierror-permissiondenied": "您没有权限$1。",
+ "apierror-permissiondenied-generic": "权限被拒绝。",
+ "apierror-permissiondenied-patrolflag": "您需要<code>patrol</code>或<code>patrolmarks</code>权限来请求巡查标记。",
+ "apierror-permissiondenied-unblock": "您没有权限解封用户。",
+ "apierror-prefixsearchdisabled": "前缀搜索在Miser模式中被禁用。",
+ "apierror-promised-nonwrite-api": "<code>Promise-Non-Write-API-Action</code> HTTP标头不能发送至写模式API模块。",
+ "apierror-protect-invalidaction": "无效的保护类型“$1”。",
+ "apierror-protect-invalidlevel": "无效的保护级别“$1”。",
+ "apierror-ratelimited": "您已超过您的速率限制。请等待一段时间再试。",
+ "apierror-readapidenied": "您需要读取权限以使用此模块。",
+ "apierror-readonly": "此wiki目前为只读模式。",
+ "apierror-reauthenticate": "您在该会话中尚未经过验证,请重新验证。",
+ "apierror-redirect-appendonly": "您试图使用重定向跟随模式编辑,而这必须与<kbd>section=new</kbd>、<var>prependtext</var>或<var>appendtext</var>共同使用。",
+ "apierror-revdel-mutuallyexclusive": "同一字段不能同时用于<var>hide</var>和<var>show</var>。",
+ "apierror-revdel-needtarget": "此修订版本删除类型需要目标标题。",
+ "apierror-revdel-paramneeded": "需要<var>hide</var>和/或<var>show</var>的至少一个值。",
+ "apierror-revisions-badid": "未找到参数<var>$1</var>的修订版本。",
+ "apierror-revisions-norevids": "<var>revids</var>参数不能与列表选项(<var>$1limit</var>、<var>$1startid</var>、<var>$1endid</var>、<kbd>$1dir=newer</kbd>、<var>$1user</var>、<var>$1excludeuser</var>、<var>$1start</var>和<var>$1end</var>)一起使用",
+ "apierror-revisions-singlepage": "<var>titles</var>、<var>pageids</var>或发生器用于提供多个页面,但<var>$1limit</var>、<var>$1startid</var>、<var>$1endid</var>、<kbd>$1dir=newer</kbd>、<var>$1user</var>、<var>$1excludeuser</var>、<var>$1start</var>和<var>$1end</var>参数只能在一个页面上使用。",
+ "apierror-revwrongpage": "r$1不是$2的修订版本。",
+ "apierror-searchdisabled": "<var>$1</var>搜索已禁用。",
+ "apierror-sectionreplacefailed": "不能合并更新的章节。",
+ "apierror-sectionsnotsupported": "内容模型$1不支持章节。",
+ "apierror-sectionsnotsupported-what": "章节不被$1所支持。",
+ "apierror-show": "不正确的参数——不可提供互斥值。",
+ "apierror-siteinfo-includealldenied": "除非<var>$wgShowHostNames</var>为真,否则不能查看所有服务器的信息。",
+ "apierror-sizediffdisabled": "大小差异在Miser模式中被禁用。",
+ "apierror-spamdetected": "您的编辑被拒绝,因为它包含垃圾部分:<code>$1</code>。",
+ "apierror-specialpage-cantexecute": "您没有权限查看此特殊页面的结果。",
+ "apierror-stashedfilenotfound": "无法在暂存处找到文件:$1。",
+ "apierror-stashedit-missingtext": "提供的哈希中找不到暂存文本。",
+ "apierror-stashfailed-complete": "大块上传已经完成,检查状态以获取详情。",
+ "apierror-stashfailed-nosession": "没有带此关键词的大块上传会话。",
+ "apierror-stashfilestorage": "不能在暂存处存储上传:$1",
+ "apierror-stashinvalidfile": "无效暂存文件。",
+ "apierror-stashnosuchfilekey": "没有这个filekey:$1。",
+ "apierror-stashpathinvalid": "文件密钥的格式不正确,或属于其他无效格式:$1。",
+ "apierror-stashwrongowner": "错误所有者:$1",
+ "apierror-stashzerolength": "文件长度为0,并且不能在暂存库中储存:$1。",
+ "apierror-systemblocked": "您已被MediaWiki自动封禁。",
+ "apierror-templateexpansion-notwikitext": "模板展开只支持wiki文本内容。$1使用内容模型$2。",
+ "apierror-timeout": "服务器没有在预期时间内响应。",
+ "apierror-toofewexpiries": "提供了$1个逾期{{PLURAL:$1|时间戳}},实际则需要$2个。",
+ "apierror-unknownaction": "指定的操作<kbd>$1</kbd>不被承认。",
+ "apierror-unknownerror-editpage": "未知的编辑页面错误:$1。",
+ "apierror-unknownerror-nocode": "未知错误。",
+ "apierror-unknownerror": "未知错误:“$1”。",
+ "apierror-unknownformat": "无法识别的格式“$1”。",
+ "apierror-unrecognizedparams": "无法识别的{{PLURAL:$2|参数}}:$1。",
+ "apierror-unrecognizedvalue": "无法识别的参数<var>$1</var>的值:$2。",
+ "apierror-unsupportedrepo": "本地文件存储库不支持查询所有图片。",
+ "apierror-upload-filekeyneeded": "当<var>offset</var>不为0时,必须提供<var>filekey</var>。",
+ "apierror-upload-filekeynotallowed": "当<var>offset</var>为0时,不能提供<var>filekey</var>。",
+ "apierror-upload-inprogress": "从暂存处上传已在进行中。",
+ "apierror-upload-missingresult": "状态数据中没有结果。",
+ "apierror-urlparamnormal": "不能为$1标准化图片参数。",
+ "apierror-writeapidenied": "您不被允许通过API编辑此wiki。",
+ "apiwarn-alldeletedrevisions-performance": "当生成标题时,为获得更好性能,请设置<kbd>$1dir=newer</kbd>。",
+ "apiwarn-badurlparam": "不能为$2解析<var>$1urlparam</var>。请只使用宽和高。",
+ "apiwarn-badutf8": "<var>$1</var>通过的值包含无效或非标准化数据。正文数据应为有效的NFC标准化Unicode,没有除HT(\\t)、LF(\\n)和CR(\\r)以外的C0控制字符。",
+ "apiwarn-checktoken-percentencoding": "在令牌中检查例如“+”的符号会在URL中适当进行百分号编码。",
+ "apiwarn-compare-nocontentmodel": "没有可以定义的模型,假定为$1。",
+ "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd>已弃用。请改用<kbd>prop=deletedrevisions</kbd>或<kbd>list=alldeletedrevisions</kbd>。",
+ "apiwarn-deprecation-expandtemplates-prop": "因为没有为<var>prop</var>参数指定值,所以在输出上使用了遗留格式。这种格式已弃用,并且将来会为<var>prop</var>参数设置默认值,这会导致新格式总会被使用。",
+ "apiwarn-deprecation-httpsexpected": "当应为HTTPS时,HTTP被使用。",
+ "apiwarn-deprecation-login-botpw": "通过<kbd>action=login</kbd>的主账户登录已被弃用,并可能在未事先警告的情况下停止工作。要继续通过<kbd>action=login</kbd>登录,请参见[[Special:BotPasswords]]。要安全继续使用主账户登录,请参见<kbd>action=clientlogin</kbd>。",
+ "apiwarn-deprecation-login-nobotpw": "通过<kbd>action=login</kbd>的主账户登录已被弃用,并可能在未事先警告的情况下停止工作。要安全登录,请参见<kbd>action=clientlogin</kbd>。",
+ "apiwarn-deprecation-login-token": "通过<kbd>action=login</kbd>取得令牌已弃用。请改用<kbd>action=query&meta=tokens&type=login</kbd>。",
+ "apiwarn-deprecation-parameter": "参数<var>$1</var>已被弃用。",
+ "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd>从MediaWiki 1.28版开始已弃用。在创建新HTML文档时请使用<kbd>prop=headhtml</kbd>,或当更新文档客户端时请使用<kbd>prop=modules|jsconfigvars</kbd>。",
+ "apiwarn-deprecation-purge-get": "通过GET使用<kbd>action=purge</kbd>已弃用。请改用POST。",
+ "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd>已弃用。请改用<kbd>$2</kbd>。",
+ "apiwarn-difftohidden": "不能与r$1做差异比较:内容被隐藏。",
+ "apiwarn-errorprinterfailed": "错误打印失败。将在没有参数的前提下重试。",
+ "apiwarn-errorprinterfailed-ex": "错误打印失败(将在没有参数的前提下重试):$1",
+ "apiwarn-invalidcategory": "“$1”不是一个分类。",
+ "apiwarn-invalidtitle": "“$1”不是一个有效的标题。",
+ "apiwarn-invalidxmlstylesheetext": "样式表应拥有<code>.xsl</code>扩展名。",
+ "apiwarn-invalidxmlstylesheet": "指定了无效或不存在的样式表。",
+ "apiwarn-invalidxmlstylesheetns": "样式表应位于{{ns:MediaWiki}}名字空间。",
+ "apiwarn-moduleswithoutvars": "属性<kbd>modules</kbd>被设置,但不是<kbd>jsconfigvars</kbd>或<kbd>encodedjsconfigvars</kbd>。需要配置变量以获得适当的模块使用。",
+ "apiwarn-notfile": "“$1”不是文件。",
+ "apiwarn-nothumb-noimagehandler": "不能创建缩略图,因为$1没有关联的图片处理器。",
+ "apiwarn-parse-nocontentmodel": "<var>title</var>或<var>contentmodel</var>未提供,假设$1。",
+ "apiwarn-parse-revidwithouttext": "<var>revid</var>在没有<var>text</var>的情况下被使用,并且请求了已解析的页面属性。您是想用<var>oldid</var>而不是<var>revid</var>么?",
+ "apiwarn-parse-titlewithouttext": "<var>title</var>在没有<var>text</var>的情况下被使用,并且请求了已解析页面的属性。您是想用<var>page</var>而不是<var>title</var>么?",
+ "apiwarn-redirectsandrevids": "重定向解决方案不能与<var>revids</var>参数一起使用。任何<var>revids</var>所指向的重定向都未被解决。",
+ "apiwarn-tokennotallowed": "操作“$1”不允许当前用户使用。",
+ "apiwarn-tokens-origin": "在未应用同来源方针时,令牌可能无法获得。",
+ "apiwarn-toomanyvalues": "参数<var>$1</var>指定了太多的值。上限为$2。",
+ "apiwarn-truncatedresult": "此结果被缩短,否则其将大于$1字节的限制。",
+ "apiwarn-unclearnowtimestamp": "为时间戳参数<var>$1</var>传递“$2”已被弃用。如因某些原因您需要明确指定当前时间而不计算客户端,请使用<kbd>now</kbd>。",
+ "apiwarn-unrecognizedvalues": "参数<var>$1</var>有无法识别的{{PLURAL:$3|值}}:$2。",
+ "apiwarn-unsupportedarray": "参数<var>$1</var>使用未受支持的PHP数组语法。",
+ "apiwarn-urlparamwidth": "为了获得衍生自<var>$1urlwidth</var>/<var>$1urlheight</var>的宽度值($3),正在忽略<var>$1urlparam</var>的宽度值集($2)。",
+ "apiwarn-validationfailed-badchars": "关键词中的字符无效(只允许<code>a-z</code>、<code>A-Z</code>、<code>0-9</code>、<code>_</code>和<code>-</code>)。",
+ "apiwarn-validationfailed-badpref": "不是有效的偏好。",
+ "apiwarn-validationfailed-cannotset": "不能通过此模块设置。",
+ "apiwarn-validationfailed-keytoolong": "关键词太长(不允许超过$1字节)。",
+ "apiwarn-validationfailed": "<kbd>$1</kbd>的合法性错误:$2",
+ "apiwarn-wgDebugAPI": "<strong>安全警告</strong>:<var>$wgDebugAPI</var>已启用。",
+ "api-feed-error-title": "错误($1)",
+ "api-usage-docref": "参见$1以获取API用法。",
+ "api-usage-mailinglist-ref": "在&lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt;订阅mediawiki-api-announce列表以获取API弃用和重大更新的通知。",
+ "api-exception-trace": "$1在$2($3)\n$4",
+ "api-credits-header": "制作人员",
+ "api-credits": "API 开发人员:\n* Yuri Astrakhan(创建者,2006年9月~2007年9月的开发组领导)\n* Roan Kattouw(2007年9月~2009年的开发组领导)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch(2013年至今的开发组领导)\n\n请将您的评论、建议和问题发送至mediawiki-api@lists.wikimedia.org,或提交错误请求至https://phabricator.wikimedia.org/。"
+}
diff --git a/www/wiki/includes/api/i18n/zh-hant.json b/www/wiki/includes/api/i18n/zh-hant.json
new file mode 100644
index 00000000..b61d201b
--- /dev/null
+++ b/www/wiki/includes/api/i18n/zh-hant.json
@@ -0,0 +1,327 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cwlin0416",
+ "Liuxinyu970226",
+ "LNDDYL",
+ "EagerLin",
+ "Zhxy 519",
+ "Macofe",
+ "Jasonzhuocn",
+ "Winstonyin",
+ "Arthur2e5",
+ "烈羽",
+ "Corainn",
+ "A2093064",
+ "Wwycheuk",
+ "Wbxshiori",
+ "Sanmosa"
+ ]
+ },
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|說明文件]]\n* [[mw:Special:MyLanguage/API:FAQ|常見問題]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 郵遞清單]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 報告錯誤及請求功能]\n</div>\n<strong>狀態資訊:</strong>本頁所展示的所有功能都應正常運作,但API仍在開發,會隨時變化。請訂閱[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 郵遞清單]以便獲得更新通知。\n\n<strong>錯誤的請求:</strong>當API收到錯誤的請求,會發出以「MediaWiki-API-Error」為鍵的HTTP標頭欄位,隨後標頭欄位的值,以及傳回的錯誤碼會設為相同值。詳細資訊請參閱[[mw:Special:MyLanguage/API:Errors_and_warnings|API: 錯誤與警告]]。\n\n<strong>測試:</strong>要簡化API請求的測試過程,請見[[Special:ApiSandbox]]。",
+ "apihelp-main-param-action": "要執行的動作。",
+ "apihelp-main-param-format": "輸出的格式。",
+ "apihelp-main-param-smaxage": "將HTTP緩存控制頭欄位設為<code>s-maxage</code>秒。錯誤不會做緩存。",
+ "apihelp-main-param-maxage": "將HTTP緩存控制頭欄位設為<code>max-age</code>秒。錯誤不會做緩存。",
+ "apihelp-main-param-assert": "若設為<kbd>user</kbd>,會確認使用者是否已登入;若設為<kbd>bot</kbd>,會確認是否擁有機械人權限。",
+ "apihelp-main-param-assertuser": "確認目前使用者就是指定的使用者。",
+ "apihelp-main-param-requestid": "在此處提供的任何值都將包括在響應之中。可用於區分請求。",
+ "apihelp-main-param-servedby": "在結果中包括提出請求的主機名。",
+ "apihelp-main-param-curtimestamp": "在結果中包括目前的時間戳。",
+ "apihelp-main-param-responselanginfo": "在結果中包括<var>uselang</var>和<var>errorlang</var>所用的語言。",
+ "apihelp-block-summary": "封鎖用戶。",
+ "apihelp-block-param-user": "要封鎖的使用者名稱、IP 位址或 IP 範圍。不能與 <var>$1userid</var> 一起使用",
+ "apihelp-block-param-reason": "封鎖原因。",
+ "apihelp-block-param-anononly": "僅封鎖匿名使用者 (禁止這個 IP 位址的匿名使用者編輯)。",
+ "apihelp-block-param-nocreate": "禁止建立帳號。",
+ "apihelp-block-param-autoblock": "自動封鎖最後使用的 IP 位址,以及在這之後嘗試登入的 IP 位址。",
+ "apihelp-block-param-noemail": "禁止使用者透過 Wiki 寄送電子郵件。 (需要 <code>blockemail</code> 權限)。",
+ "apihelp-block-param-hidename": "隱藏封鎖日誌的使用者名稱。 (需要 <code>hideuser</code> 權限)。",
+ "apihelp-block-param-allowusertalk": "允許使用者編輯自己的對話頁面 (依據 <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> 的設定)。",
+ "apihelp-block-param-reblock": "若使用者已被封鎖,覆寫既有的封鎖設定值。",
+ "apihelp-block-param-watchuser": "監視使用者或 IP 位址的使用者頁面與對話頁面。",
+ "apihelp-block-example-ip-simple": "封鎖 IP 位址 <kbd>192.0.2.5</kbd> 三天,原因為 <kbd>First strike</kbd>。",
+ "apihelp-block-example-user-complex": "永久封鎖 IP 位址 <kbd>Vandal</kbd>,原因為 <kbd>Vandalism</kbd>。",
+ "apihelp-changeauthenticationdata-summary": "為目前使用者變更身分核對資料。",
+ "apihelp-checktoken-summary": "檢查來自 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> 的密鑰有效性。",
+ "apihelp-checktoken-param-type": "要測試的密鑰類型。",
+ "apihelp-checktoken-param-token": "要測試的密鑰。",
+ "apihelp-checktoken-param-maxtokenage": "密鑰的有效期間,以秒為單位。",
+ "apihelp-checktoken-example-simple": "測試 <kbd>csrf</kbd> 密鑰的有效性。",
+ "apihelp-clearhasmsg-summary": "清除目前使用者的 <code>hasmsg</code> 標記。",
+ "apihelp-clearhasmsg-example-1": "清除目前使用者的 <code>hasmsg</code> 標記。",
+ "apihelp-compare-summary": "比較 2 個頁面間的差異。",
+ "apihelp-compare-extended-description": "\"from\" 以及 \"to\" 的修訂編號,頁面標題或頁面 ID 為必填。",
+ "apihelp-compare-param-fromtitle": "要比對的第一個標題。",
+ "apihelp-compare-param-fromid": "要比對的第一個頁面 ID。",
+ "apihelp-compare-param-fromrev": "要比對的第一個修訂。",
+ "apihelp-compare-param-totitle": "要比對的第二個標題。",
+ "apihelp-compare-param-toid": "要比對的第二個頁面 ID。",
+ "apihelp-compare-param-torev": "要比對的第二個修訂。",
+ "apihelp-compare-example-1": "建立修訂 1 與 1 的差異檔",
+ "apihelp-createaccount-summary": "建立新使用者帳號。",
+ "apihelp-createaccount-param-name": "用戶名。",
+ "apihelp-createaccount-param-password": "密碼 (若有設定 <var>$1mailpassword</var> 則可略過)。",
+ "apihelp-createaccount-param-domain": "外部身分核對使用的網域 (可有可無)。",
+ "apihelp-createaccount-param-token": "在第一次請求時已取得的帳號建立金鑰。",
+ "apihelp-createaccount-param-email": "使用者的電子郵件地址 (可有可無) 。",
+ "apihelp-createaccount-param-realname": "使用者的真實姓名 (可有可無)。",
+ "apihelp-createaccount-param-mailpassword": "若設為其他值,將會以電子郵件寄送隨機密碼給使用者。",
+ "apihelp-createaccount-param-reason": "建立帳號時選填的原因,會被記錄到日誌當中。",
+ "apihelp-createaccount-param-language": "要設定的使用者預設語言代碼 (選填,預設依據內容語言)。",
+ "apihelp-createaccount-example-pass": "建立使用者 <kbd>testuser</kbd> 使用密碼 <kbd>test123</kbd>",
+ "apihelp-createaccount-example-mail": "建立使用者 <kbd>testmailuser</kbd> 並且電子郵件通知隨機產生的密碼。",
+ "apihelp-delete-summary": "刪除頁面。",
+ "apihelp-delete-param-title": "您欲刪除的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
+ "apihelp-delete-param-pageid": "您欲刪除頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
+ "apihelp-delete-param-reason": "刪除的原因。 若未設定,將會使用自動產生的原因。",
+ "apihelp-delete-param-watch": "加入目前頁面至您的監視清單。",
+ "apihelp-delete-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
+ "apihelp-delete-param-unwatch": "從您的監視清單中移除目前頁面。",
+ "apihelp-delete-param-oldimage": "由 [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] 所提供要刪除的舊圖片名稱。",
+ "apihelp-delete-example-simple": "刪除 <kbd>Main Page</kbd>。",
+ "apihelp-delete-example-reason": "刪除 <kbd>Main Page</kbd> 原因為 <kbd>Preparing for move</kbd>。",
+ "apihelp-disabled-summary": "已停用此模組。",
+ "apihelp-edit-summary": "建立與編輯頁面。",
+ "apihelp-edit-param-title": "您欲編輯的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
+ "apihelp-edit-param-pageid": "您欲編輯頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
+ "apihelp-edit-param-section": "章節編號。 <kbd>0</kbd> 代表最上層章節,<kbd>new</kbd> 代表新章節。",
+ "apihelp-edit-param-sectiontitle": "新章節的標題。",
+ "apihelp-edit-param-text": "頁面內容。",
+ "apihelp-edit-param-summary": "編輯摘要。 當未設定 $1section=new 與 $1sectiontitle 時也會當做章節標題。",
+ "apihelp-edit-param-minor": "小編輯。",
+ "apihelp-edit-param-notminor": "非小編輯。",
+ "apihelp-edit-param-bot": "標記此編輯為機器人編輯。",
+ "apihelp-edit-param-basetimestamp": "基於修訂的時間戳記,用來檢測編輯衝突。也许可以取得[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]認可。",
+ "apihelp-edit-param-createonly": "若頁面已存在,則不編輯頁面。",
+ "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
+ "apihelp-edit-param-watch": "加入目前頁面至您的監視清單。",
+ "apihelp-edit-param-unwatch": "從您的監視清單中移除目前頁面。",
+ "apihelp-edit-example-edit": "編輯頁面",
+ "apihelp-emailuser-summary": "寄送電子郵件給使用者。",
+ "apihelp-emailuser-param-target": "電子郵件的收件使用者。",
+ "apihelp-emailuser-param-subject": "郵件主旨。",
+ "apihelp-emailuser-param-text": "郵件內容。",
+ "apihelp-emailuser-param-ccme": "寄送一份此郵件的複本給我。",
+ "apihelp-emailuser-example-email": "寄送電子郵件給使用者 <kbd>WikiSysop</kbd> 使用內容 <kbd>Content</kbd>",
+ "apihelp-expandtemplates-summary": "展開所有於 wikitext 中模板。",
+ "apihelp-expandtemplates-param-title": "頁面標題。",
+ "apihelp-expandtemplates-param-text": "要轉換的 Wikitext。",
+ "apihelp-feedcontributions-summary": "回傳使用者貢獻 Feed。",
+ "apihelp-feedcontributions-param-feedformat": "Feed 的格式。",
+ "apihelp-feedcontributions-param-hideminor": "隱藏小修改。",
+ "apihelp-feedcontributions-param-showsizediff": "顯示修訂版本之間的差異大小。",
+ "apihelp-feedcontributions-example-simple": "返回使用者<kbd>Example</kbd>的貢獻。",
+ "apihelp-feedrecentchanges-summary": "返回最近變更摘要。",
+ "apihelp-feedrecentchanges-param-feedformat": "摘要格式。",
+ "apihelp-feedrecentchanges-param-namespace": "用於限制結果的命名空間。",
+ "apihelp-feedrecentchanges-param-invert": "除所選定者外的所有命名空間。",
+ "apihelp-feedrecentchanges-param-limit": "回傳的結果數量上限。",
+ "apihelp-feedrecentchanges-param-hideminor": "隱藏小編輯。",
+ "apihelp-feedrecentchanges-param-hidebots": "隱藏由機器人做的變更。",
+ "apihelp-feedrecentchanges-param-hideanons": "隱藏匿名使用者做的變更。",
+ "apihelp-feedrecentchanges-param-hideliu": "隱藏已註冊使用者做的變更。",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "隱藏已巡查的變更。",
+ "apihelp-feedrecentchanges-example-simple": "顯示近期變更。",
+ "apihelp-feedrecentchanges-example-30days": "顯示近期30天內的變動",
+ "apihelp-feedwatchlist-summary": "返回監視清單 feed。",
+ "apihelp-feedwatchlist-param-feedformat": "Feed 的格式。",
+ "apihelp-filerevert-param-comment": "上載意見。",
+ "apihelp-help-example-main": "主模組使用說明",
+ "apihelp-help-example-recursive": "一個頁面中的所有說明。",
+ "apihelp-help-example-help": "說明模組自身的說明。",
+ "apihelp-imagerotate-summary": "旋轉一張或多張圖片。",
+ "apihelp-import-param-summary": "匯入摘要。",
+ "apihelp-import-param-xml": "上載的 XML 檔。",
+ "apihelp-import-param-interwikisource": "用於跨 wiki 匯入:匯入的來源 wiki。",
+ "apihelp-import-param-interwikipage": "用於跨 wiki 匯入:匯入的頁面。",
+ "apihelp-import-param-fullhistory": "用於跨 wiki 匯入:完整匯入歷史,而不只是最新版本。",
+ "apihelp-import-param-templates": "用於跨 wiki 匯入:匯入一切包含的模板。",
+ "apihelp-import-param-namespace": "匯入至此命名空間。無法與 <var>$1rootpage</var> 一起使用。",
+ "apihelp-import-param-rootpage": "匯入作為此頁面的子頁面。無法與 <var>$1namespace</var> 一起使用。",
+ "apihelp-login-summary": "登入並取得身分核對 cookies",
+ "apihelp-login-param-name": "用戶名。",
+ "apihelp-login-param-password": "密碼。",
+ "apihelp-login-param-domain": "網域名稱(可有可無)。",
+ "apihelp-login-example-login": "登入",
+ "apihelp-logout-summary": "登出並清除 session 資料。",
+ "apihelp-logout-example-logout": "登出當前使用者",
+ "apihelp-mergehistory-summary": "合併頁面歷史",
+ "apihelp-mergehistory-param-reason": "合併歷史的原因。",
+ "apihelp-mergehistory-example-merge": "將<kbd>Oldpage</kbd>的整個歷史合併至<kbd>Newpage</kbd>。",
+ "apihelp-mergehistory-example-merge-timestamp": "將<kbd>Oldpage</kbd>直至<kbd>2015-12-31T04:37:41Z</kbd>的頁面修訂版本合併至<kbd>Newpage</kbd>。",
+ "apihelp-move-summary": "移動頁面。",
+ "apihelp-move-param-from": "重新命名本頁面的標題。不能與 <var>$1fromid</var> 一起出現。",
+ "apihelp-move-param-fromid": "重新命名本頁面的 ID 。不能與 <var>$1fromid</var> 一起出現。",
+ "apihelp-move-param-to": "將本頁面的標題重新命名為",
+ "apihelp-move-param-reason": "重新命名的原因。",
+ "apihelp-move-param-movetalk": "如果討論頁存在,變更討論頁名稱。",
+ "apihelp-move-param-movesubpages": "如果適用,則重新命名子頁面。",
+ "apihelp-move-param-noredirect": "不要建立重新導向。",
+ "apihelp-move-param-watch": "將頁面和重定向加入目前使用者的監視清單。",
+ "apihelp-move-param-unwatch": "從目前使用者的監視清單中移除頁面和重定向。",
+ "apihelp-move-param-watchlist": "在目前使用者的監視清單中無條件地加入或移除頁面,或使用設定,或不變更監視清單。",
+ "apihelp-move-param-ignorewarnings": "忽略所有警告。",
+ "apihelp-move-example-move": "將<kbd>Badtitle</kbd>移動至<kbd>Goodtitle</kbd>,不留下重定向。",
+ "apihelp-opensearch-summary": "使用 OpenSearch 協定搜尋本 wiki。",
+ "apihelp-opensearch-param-search": "搜尋字串。",
+ "apihelp-opensearch-param-limit": "回傳的結果數量上限。",
+ "apihelp-opensearch-param-namespace": "搜尋的命名空間。",
+ "apihelp-opensearch-param-suggest": "若<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>設定為false,則不做任何事。",
+ "apihelp-opensearch-param-redirects": "如何處理重定向:\n;return:傳回重定向本身。\n;resolve:傳回目標頁面,傳回的結果數目可能少於$1limit。\n由於歷史原因,$1format=json的預設值為「return」,其他格式則為「resolve」。",
+ "apihelp-opensearch-param-format": "輸出的格式。",
+ "apihelp-options-param-reset": "重設偏好設定為網站預設值。",
+ "apihelp-options-example-reset": "重設所有偏好設定",
+ "apihelp-parse-example-page": "解析頁面。",
+ "apihelp-parse-example-text": "解析 wikitext。",
+ "apihelp-parse-example-texttitle": "解析 wikitext,指定頁面標題。",
+ "apihelp-parse-example-summary": "解析摘要。",
+ "apihelp-patrol-summary": "巡查頁面或修訂。",
+ "apihelp-patrol-param-rcid": "要巡查的最近變更 ID。",
+ "apihelp-patrol-param-revid": "要巡查的修訂 ID。",
+ "apihelp-patrol-example-rcid": "巡查一次最近變更。",
+ "apihelp-patrol-example-revid": "巡查一個修訂。",
+ "apihelp-protect-summary": "變更頁面的保護層級。",
+ "apihelp-protect-param-title": "要(解除)保護頁面的標題。 不能與 $1pageid 一起使用。",
+ "apihelp-protect-param-pageid": "要(解除)保護頁面的 ID。 不能與 $1title 一起使用。",
+ "apihelp-protect-param-protections": "保護層級清單,格式為 <kbd>action=level</kbd> (例如 <kbd>edit=sysop</kbd>)。<kbd>all</kbd> 層級代表所有人都可以進行行動,亦即無限制。\n\n<strong>注意:</strong>未列入清單項目的限制皆會移除。",
+ "apihelp-protect-param-expiry": "期限時間戳記,若只設定一個時間戳記,該時間戳記將會套用至所有的保護層級。 使用 <kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd> 或 <kbd>never</kbd> 來設定保護層級期限為永遠。",
+ "apihelp-protect-param-reason": "(解除)保護的原因。",
+ "apihelp-protect-param-tags": "修改標籤以套用於保護日誌裡的項目。",
+ "apihelp-protect-param-cascade": "啟用連鎖保護(也就是保護包含於此頁面的頁面)。如果所有提供的保護等級不支援連鎖,就將其忽略。",
+ "apihelp-protect-param-watch": "如果被設定,就將被(解除)保護的頁面加至目前使用者的監視列表。",
+ "apihelp-protect-param-watchlist": "無條件地將該頁面加入至或移除自目前使用者的監視列表、使用偏好設定或不更改監視。",
+ "apihelp-protect-example-protect": "保護一個頁面。",
+ "apihelp-purge-summary": "為指定標題清除快取。",
+ "apihelp-purge-example-generator": "重新整理主要命名空間的前10個頁面。",
+ "apihelp-query-summary": "擷取來自及有關MediaWiki的數據。",
+ "apihelp-query+allcategories-param-limit": "要回傳的分類數量。",
+ "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
+ "apihelp-query+allimages-param-limit": "要回傳的圖片總數。",
+ "apihelp-query+alllinks-param-limit": "要回傳的項目總數。",
+ "apihelp-query+allmessages-summary": "返回來自該網站的訊息。",
+ "apihelp-query+allpages-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+allredirects-param-limit": "要回傳的項目總數。",
+ "apihelp-query+allrevisions-summary": "列出所有修訂版本。",
+ "apihelp-query+alltransclusions-param-limit": "要回傳的項目總數。",
+ "apihelp-query+authmanagerinfo-summary": "取得目前身分核對狀態的資訊。",
+ "apihelp-query+categories-param-limit": "要回傳的分類數量。",
+ "apihelp-query+categoryinfo-summary": "回傳有關指定分類的資訊。",
+ "apihelp-query+categorymembers-summary": "在指定的分類中列出所有頁面。",
+ "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。",
+ "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
+ "apihelp-query+duplicatefiles-param-limit": "要回傳的重複檔案數量。",
+ "apihelp-query+embeddedin-param-filterredir": "如何過濾重新導向。",
+ "apihelp-query+embeddedin-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+extlinks-summary": "回傳所有指定頁面的外部 URL (非 interwiki)。",
+ "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
+ "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
+ "apihelp-query+filearchive-param-limit": "要回傳的圖片總數。",
+ "apihelp-query+fileusage-param-limit": "要回傳的數量。",
+ "apihelp-query+imageinfo-summary": "回傳檔案資訊與上傳日誌。",
+ "apihelp-query+imageinfo-param-limit": "每個檔案要回傳的檔案修訂數量。",
+ "apihelp-query+images-summary": "回傳指定頁面中包含的所有檔案。",
+ "apihelp-query+images-param-limit": "要回傳的檔案數量。",
+ "apihelp-query+info-summary": "取得基本頁面訊息。",
+ "apihelp-query+iwlinks-summary": "回傳指定頁面的所有 interwiki 連結。",
+ "apihelp-query+iwlinks-param-limit": "要回傳的跨 Wiki 連結數量。",
+ "apihelp-query+langbacklinks-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+langlinks-summary": "回傳指定頁面的所有跨語言連結。",
+ "apihelp-query+langlinks-param-limit": "要回傳的 langlinks 數量。",
+ "apihelp-query+links-summary": "回傳指定頁面的所有連結。",
+ "apihelp-query+links-param-limit": "要回傳的連結數量。",
+ "apihelp-query+linkshere-param-limit": "要回傳的數量。",
+ "apihelp-query+logevents-summary": "從日誌中獲取事件。",
+ "apihelp-query+logevents-param-limit": "要回傳的事件項目總數。",
+ "apihelp-query+pagepropnames-param-limit": "回傳的名稱數量上限。",
+ "apihelp-query+pageswithprop-param-limit": "回傳的頁面數量上限。",
+ "apihelp-query+prefixsearch-param-limit": "回傳的結果數量上限。",
+ "apihelp-query+protectedtitles-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+querypage-param-limit": "回傳的結果數量。",
+ "apihelp-query+recentchanges-summary": "列舉出最近變更。",
+ "apihelp-query+recentchanges-param-limit": "要回傳變更總數。",
+ "apihelp-query+recentchanges-example-simple": "最近變更清單",
+ "apihelp-query+redirects-summary": "回傳連結至指定頁面的所有重新導向。",
+ "apihelp-query+redirects-param-limit": "要回傳的重新導向數量。",
+ "apihelp-query+search-paramvalue-prop-score": "已忽略",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "已忽略",
+ "apihelp-query+search-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+stashimageinfo-summary": "回傳多筆儲藏檔案的檔案資訊。",
+ "apihelp-query+stashimageinfo-example-simple": "回傳儲藏檔案的檔案資訊。",
+ "apihelp-query+tags-summary": "列出更改標籤。",
+ "apihelp-query+templates-summary": "回傳指定頁面中所有引用的頁面。",
+ "apihelp-query+templates-param-limit": "要回傳的模板數量。",
+ "apihelp-query+tokens-param-type": "要求的權杖類型。",
+ "apihelp-query+tokens-example-simple": "接收 csrf 密鑰 (預設)。",
+ "apihelp-query+tokens-example-types": "接收監視密鑰以及巡邏密鑰。",
+ "apihelp-query+transcludedin-param-limit": "回傳的數量。",
+ "apihelp-query+usercontribs-param-limit": "回傳的貢獻數量上限。",
+ "apihelp-query+watchlist-param-limit": "每個請求要回傳的結果總數。",
+ "apihelp-query+watchlistraw-param-limit": "每個請求要回傳的結果總數。",
+ "apihelp-removeauthenticationdata-summary": "為目前使用者移除身分核對資料。",
+ "apihelp-revisiondelete-summary": "刪除和取消刪除修訂。",
+ "apihelp-stashedit-param-title": "正在編輯此頁面的標題。",
+ "apihelp-stashedit-param-text": "頁面內容。",
+ "apihelp-tokens-summary": "取得資料修改動作的密鑰。",
+ "apihelp-tokens-extended-description": "此模組已因支援 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 而停用。",
+ "apihelp-unblock-summary": "解除封鎖一位使用者。",
+ "apihelp-unblock-param-reason": "解除封鎖的原因。",
+ "apihelp-unblock-example-id": "解除封銷 ID #<kbd>105</kbd>。",
+ "apihelp-undelete-param-reason": "還原的原因。",
+ "apihelp-userrights-summary": "更改一位使用者的群組成員。",
+ "apihelp-userrights-param-user": "用戶名。",
+ "apihelp-userrights-param-userid": "用戶ID。",
+ "apihelp-userrights-param-add": "加入使用者至這些群組;若已是成員,則更新失效時間。",
+ "apihelp-userrights-param-remove": "從這些群組移除使用者。",
+ "apihelp-userrights-param-reason": "變更的原因。",
+ "apihelp-format-example-generic": "以 $1 格式傳回查詢結果。",
+ "apihelp-json-summary": "使用 JSON 格式輸出資料。",
+ "apihelp-jsonfm-summary": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-none-summary": "不輸出。",
+ "apihelp-php-summary": "使用序列化 PHP 格式輸出資料。",
+ "apihelp-phpfm-summary": "使用序列化 PHP 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-rawfm-summary": "使用 JSON 格式的除錯元素輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-xml-summary": "使用 XML 格式輸出資料。",
+ "apihelp-xmlfm-summary": "使用 XML 格式輸出資料 (使用 HTML 格式顯示)。",
+ "api-format-title": "MediaWiki API 結果",
+ "api-format-prettyprint-header": "這是$1格式的HTML呈現。HTML適合用於除錯,但不適合應用程式使用。\n\n指定<var>format</var>參數以更改輸出格式。要檢視$1格式的非HTML呈現,設定<kbd>format=$2</kbd>。\n\n參考 [[mw:Special:MyLanguage/API|完整說明文件]] 或 [[Special:ApiHelp/main|API說明]] 以取得更多資訊。",
+ "api-pageset-param-titles": "要使用的標題清單。",
+ "api-pageset-param-pageids": "要使用的頁面 ID 清單。",
+ "api-pageset-param-revids": "要使用的修訂 ID 清單。",
+ "api-help-title": "MediaWiki API 說明",
+ "api-help-lead": "此頁為自動產生的 MediaWiki API 說明文件頁面。\n\n說明文件與範例:https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "主要模組",
+ "api-help-flag-deprecated": "此模組已停用。",
+ "api-help-flag-readrights": "此模組需要讀取權限。",
+ "api-help-flag-writerights": "此模組需要寫入權限。",
+ "api-help-flag-mustbeposted": "此模組僅接受 POST 請求。",
+ "api-help-parameters": "{{PLURAL:$1|參數}}:",
+ "api-help-param-deprecated": "已停用。",
+ "api-help-param-required": "此參數為必填。",
+ "api-help-param-list": "{{PLURAL:$1|1=單值|2=多值 (以 <kbd>{{!}}</kbd> 或 [[Special:ApiHelp/main#main/datatypes|alternative]] 分隔)}}:$2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必須空白|可以空白,或 $2}}",
+ "api-help-param-limit": "不允許超過 $1。",
+ "api-help-param-limit2": "不允許超過 $1 (機器人為 $2)。",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=數值|2=數值}}不可小於 $2。",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=數值|2=數值}}不可大於 $3。",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=數值|2=數值}}必須在 $2 與 $3 之間。",
+ "api-help-param-upload": "必須使用 multipart/form-data 以檔案上傳的方式傳送。",
+ "api-help-param-multi-separate": "將幾個值以 <kbd>|</kbd> 或 [[Special:ApiHelp/main#main/datatypes|alternative]] 分隔。",
+ "api-help-param-multi-max": "上限值為 {{PLURAL:$1|$1}} (機器人為 {{PLURAL:$2|$2}})。",
+ "api-help-param-default": "預設值:$1",
+ "api-help-param-default-empty": "預設值:<span class=\"apihelp-empty\">(空)</span>",
+ "api-help-param-token": "自 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 接收的 \"$1\" 密鑰。",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(無描述)</span>",
+ "api-help-examples": "{{PLURAL:$1|範例}}:",
+ "api-help-permissions": "{{PLURAL:$1|權限}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|已授權給}}: $2",
+ "api-help-authmanager-general-usage": "使用此模組的一般程式是:\n# 通過<kbd>amirequestsfor=$4</kbd>取得來自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的可用欄位,和來自<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>的<kbd>$5</kbd>令牌。\n# 向用戶顯示欄位,並獲得其提交的內容。\n# 提交(POST)至此模組,提供<var>$1returnurl</var>及任何相關欄位。\n# 在回应中檢查<samp>status</samp>。\n#* 如果您收到了<samp>PASS</samp>(成功)或<samp>FAIL</samp>(失敗),則認為操作結束。成功與否如上句所示。\n#* 如果您收到了<samp>UI</samp>,向用戶顯示新欄位,並再次獲取其提交的內容。然後再次使用<var>$1continue</var>,向本模組提交相關欄位,並重復第四步。\n#* 如果您收到了<samp>REDIRECT</samp>,將使用者指向<samp>redirecttarget</samp>中的目標,等待其返回<var>$1returnurl</var>。然後再次使用<var>$1continue</var>,向本模組提交返回URL中提供的一切欄位,並重復第四步。\n#* 如果您收到了<samp>RESTART</samp>,這意味著身份驗證正常運作,但我們沒有連結的使用者賬戶。您可以將此看做<samp>UI</samp>或<samp>FAIL</samp>。",
+ "apierror-mustbeloggedin-changeauth": "必須登入,才能變更身分核對資取。",
+ "apierror-mustbeloggedin-removeauth": "必須登入,才能移除身分核對資取。",
+ "apierror-permissiondenied": "您沒有權限$1。",
+ "apierror-reauthenticate": "於本工作階段還未核對身分,請重新核對。",
+ "apierror-timeout": "伺服器未有在預計的時間內回應。",
+ "api-feed-error-title": "錯誤($1)",
+ "api-credits-header": "製作群",
+ "api-credits": "API 開發人員:\n* Roan Kattouw (首席開發者 Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (創立者,首席開發者 Sep 2006–Sep 2007)\n* Brad Jorsch (首席開發者 2013–present)\n\n請傳送您的評論、建議以及問題至 mediawiki-api@lists.wikimedia.org\n或者回報問題至 https://phabricator.wikimedia.org/。"
+}
diff --git a/www/wiki/includes/api/i18n/zu.json b/www/wiki/includes/api/i18n/zu.json
new file mode 100644
index 00000000..6536d37a
--- /dev/null
+++ b/www/wiki/includes/api/i18n/zu.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Irus"
+ ]
+ },
+ "apihelp-block-summary": "Vimbela umsebenzisi",
+ "apihelp-block-param-user": "Igama lomsebenzisi, ikheli le-IP, noma ikheli le-IP uhla ukuvimba.",
+ "apihelp-block-param-reblock": "Uma umsebenzisi usevele ivinjiwe, isula block ekhona."
+}