From: jenkins-bot Date: Wed, 23 Nov 2016 02:23:14 +0000 (+0000) Subject: Merge "Remove JSON polyfill, deprecate 'json' module" X-Git-Tag: 1.31.0-rc.0~4784 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=4611176528ae0886d4ab0270d84c56a5b0793119;hp=fd5c3b5817167ef59342aaca17ac6bfe44e5a719 Merge "Remove JSON polyfill, deprecate 'json' module" --- diff --git a/Gruntfile.js b/Gruntfile.js index f35d3b2296..55b7932f00 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -22,14 +22,15 @@ module.exports = function ( grunt ) { '**/*.js', '!docs/**', '!tests/**', - '!extensions/**', '!node_modules/**', '!resources/lib/**', '!resources/src/jquery.tipsy/**', '!resources/src/jquery/jquery.farbtastic.js', '!resources/src/mediawiki.libs/**', - '!skins/**', '!vendor/**', + // Explicitly say "**/*.js" here in case of symlinks + '!extensions/**/*.js', + '!skins/**/*.js', // Skip functions aren't even parseable '!resources/src/dom-level2-skip.js', '!resources/src/es5-skip.js', diff --git a/RELEASE-NOTES-1.29 b/RELEASE-NOTES-1.29 index 3a7cde9a0a..23c34df6d7 100644 --- a/RELEASE-NOTES-1.29 +++ b/RELEASE-NOTES-1.29 @@ -12,6 +12,8 @@ production. determines whether to set a cookie when a user is autoblocked. Doing so means that a blocked user, even after logging out and moving to a new IP address, will still be blocked. +* The resetpassword right and associated password reset capture feature has + been removed. === New features in 1.29 === * (T5233) A cookie can now be set when a user is autoblocked, to track that user if @@ -32,6 +34,7 @@ production. action=createaccount, action=linkaccount, and action=changeauthenticationdata in the query string is now an error. They should be submitted in the POST body instead. +* The capture option for action=resetpassword has been removed === Action API internal changes in 1.29 === diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 32717f14f9..792b9bcc9f 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1586,7 +1586,7 @@ $wgEnableUserEmail = true; /** * Set to true to put the sending user's email in a Reply-To header - * instead of From. ($wgEmergencyContact will be used as From.) + * instead of From. ($wgPasswordSender will be used as From.) * * Some mailers (eg SMTP) set the SMTP envelope sender to the From value, * which can cause problems with SPF validation and leak recipient addresses diff --git a/includes/MimeMagic.php b/includes/MimeMagic.php index c03bce77f0..79218ab82b 100644 --- a/includes/MimeMagic.php +++ b/includes/MimeMagic.php @@ -27,7 +27,7 @@ class MimeMagic extends MimeAnalyzer { * @deprecated since 1.28 */ public static function singleton() { - return MediaWikiServices::getInstance()->getMIMEAnalyzer(); + return MediaWikiServices::getInstance()->getMimeAnalyzer(); } /** diff --git a/includes/api/ApiPageSet.php b/includes/api/ApiPageSet.php index 46c57b86b4..1a509c5c1e 100644 --- a/includes/api/ApiPageSet.php +++ b/includes/api/ApiPageSet.php @@ -23,6 +23,7 @@ * * @file */ +use MediaWiki\MediaWikiServices; /** * This class contains a list of pages that the client has requested. @@ -915,7 +916,7 @@ class ApiPageSet extends ApiBase { } // Get gender information - $genderCache = GenderCache::singleton(); + $genderCache = MediaWikiServices::getInstance()->getGenderCache(); $genderCache->doQuery( $usernames, __METHOD__ ); } @@ -1197,7 +1198,7 @@ class ApiPageSet extends ApiBase { } } // Get gender information - $genderCache = GenderCache::singleton(); + $genderCache = MediaWikiServices::getInstance()->getGenderCache(); $genderCache->doQuery( $usernames, __METHOD__ ); return $linkBatch; diff --git a/includes/api/ApiQueryAllPages.php b/includes/api/ApiQueryAllPages.php index 0ce1939b28..6a0f124faf 100644 --- a/includes/api/ApiQueryAllPages.php +++ b/includes/api/ApiQueryAllPages.php @@ -23,6 +23,7 @@ * * @file */ +use MediaWiki\MediaWikiServices; /** * Query module to enumerate all available pages. @@ -206,7 +207,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { foreach ( $res as $row ) { $users[] = $row->page_title; } - GenderCache::singleton()->doQuery( $users, __METHOD__ ); + MediaWikiServices::getInstance()->getGenderCache()->doQuery( $users, __METHOD__ ); $res->rewind(); // reset } diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php index 0bb7ff8ef1..19e0c939e9 100644 --- a/includes/api/ApiQuerySiteinfo.php +++ b/includes/api/ApiQuerySiteinfo.php @@ -253,6 +253,8 @@ class ApiQuerySiteinfo extends ApiQueryBase { $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' ); diff --git a/includes/api/ApiResetPassword.php b/includes/api/ApiResetPassword.php index 042ad69419..2d7f5dff23 100644 --- a/includes/api/ApiResetPassword.php +++ b/includes/api/ApiResetPassword.php @@ -65,13 +65,13 @@ class ApiResetPassword extends ApiBase { $passwordReset = new PasswordReset( $this->getConfig(), AuthManager::singleton() ); - $status = $passwordReset->isAllowed( $this->getUser(), $params['capture'] ); + $status = $passwordReset->isAllowed( $this->getUser() ); if ( !$status->isOK() ) { $this->dieStatus( Status::wrap( $status ) ); } $status = $passwordReset->execute( - $this->getUser(), $params['user'], $params['email'], $params['capture'] + $this->getUser(), $params['user'], $params['email'] ); if ( !$status->isOK() ) { $status->value = null; @@ -80,12 +80,6 @@ class ApiResetPassword extends ApiBase { $result = $this->getResult(); $result->addValue( [ 'resetpassword' ], 'status', 'success' ); - if ( $params['capture'] ) { - $passwords = $status->getValue() ?: []; - ApiResult::setArrayType( $passwords, 'kvp', 'user' ); - ApiResult::setIndexedTagName( $passwords, 'p' ); - $result->addValue( [ 'resetpassword' ], 'passwords', $passwords ); - } } public function isWriteMode() { @@ -111,7 +105,6 @@ class ApiResetPassword extends ApiBase { 'email' => [ ApiBase::PARAM_TYPE => 'string', ], - 'capture' => false, ]; $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' ); diff --git a/includes/api/i18n/en.json b/includes/api/i18n/en.json index 0f184d9f5d..05eb8cc041 100644 --- a/includes/api/i18n/en.json +++ b/includes/api/i18n/en.json @@ -1307,7 +1307,6 @@ "apihelp-resetpassword-description-noroutes": "No password reset routes are available.\n\nEnable routes in [[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]] to use this module.", "apihelp-resetpassword-param-user": "User being reset.", "apihelp-resetpassword-param-email": "Email address of the user being reset.", - "apihelp-resetpassword-param-capture": "Return the temporary passwords that were sent. Requires the passwordreset user right.", "apihelp-resetpassword-example-user": "Send a password reset email to user Example.", "apihelp-resetpassword-example-email": "Send a password reset email for all users with email address user@example.com.", diff --git a/includes/api/i18n/lij.json b/includes/api/i18n/lij.json index 5ea86134a7..45680f4ba3 100644 --- a/includes/api/i18n/lij.json +++ b/includes/api/i18n/lij.json @@ -115,7 +115,7 @@ "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 colegæ a-a quella speçificâ", + "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.", @@ -148,7 +148,7 @@ "apihelp-import-param-namespace": "Importa inte questo namespace. O no poeu ese doeuviou insemme a $1rootpage.", "apihelp-import-param-rootpage": "Importa comme sottopaggina de questa paggina. O no poeu ese doeuviou insemme a $1namespace.", "apihelp-import-example-import": "Importa [[meta:Help:ParserFunctions]] into namespace 100 con cronologia completa.", - "apihelp-linkaccount-description": "Colegamento de 'n'utença de 'n provider de terçe parte a l'utente corente.", + "apihelp-linkaccount-description": "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 Example.", "apihelp-login-description": "Accedi e otegni i cookie d'aotenticaçion.\n\nQuest'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 [[Special:ApiHelp/clientlogin|action=clientlogin]].", "apihelp-login-description-nobotpasswords": "Accedi e otegni i cookies d'aotenticaçion.\n\nQuest'açion a l'è deprecâ e a poeu fallî sença preaviso. Pe acede in moddo seguo, doeuvia [[Special:ApiHelp/clientlogin|action=clientlogin]].", diff --git a/includes/api/i18n/qqq.json b/includes/api/i18n/qqq.json index f7c750e373..929487bd6a 100644 --- a/includes/api/i18n/qqq.json +++ b/includes/api/i18n/qqq.json @@ -1220,7 +1220,6 @@ "apihelp-resetpassword-description-noroutes": "{{doc-apihelp-description|resetpassword|info=This message is used when no known routes are enabled in [[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]].|seealso={{msg-mw|apihelp-resetpassword-description}}}}", "apihelp-resetpassword-param-user": "{{doc-apihelp-param|resetpassword|user}}", "apihelp-resetpassword-param-email": "{{doc-apihelp-param|resetpassword|email}}", - "apihelp-resetpassword-param-capture": "{{doc-apihelp-param|resetpassword|capture}}", "apihelp-resetpassword-example-user": "{{doc-apihelp-example|resetpassword}}", "apihelp-resetpassword-example-email": "{{doc-apihelp-example|resetpassword}}", "apihelp-revisiondelete-description": "{{doc-apihelp-description|revisiondelete}}", diff --git a/includes/auth/TemporaryPasswordAuthenticationRequest.php b/includes/auth/TemporaryPasswordAuthenticationRequest.php index 42f0e70223..c8580520e3 100644 --- a/includes/auth/TemporaryPasswordAuthenticationRequest.php +++ b/includes/auth/TemporaryPasswordAuthenticationRequest.php @@ -33,12 +33,6 @@ class TemporaryPasswordAuthenticationRequest extends AuthenticationRequest { /** @var bool Email password to the user. */ public $mailpassword = false; - /** - * @var bool Do not fail certain operations if the password cannot be mailed, there is a - * backchannel present. - */ - public $hasBackchannel = false; - /** @var string Username or IP address of the caller */ public $caller; diff --git a/includes/auth/TemporaryPasswordPrimaryAuthenticationProvider.php b/includes/auth/TemporaryPasswordPrimaryAuthenticationProvider.php index 2e6f93c8f7..44c28241e2 100644 --- a/includes/auth/TemporaryPasswordPrimaryAuthenticationProvider.php +++ b/includes/auth/TemporaryPasswordPrimaryAuthenticationProvider.php @@ -246,7 +246,7 @@ class TemporaryPasswordPrimaryAuthenticationProvider $sv->merge( $this->checkPasswordValidity( $username, $req->password ) ); if ( $req->mailpassword ) { - if ( !$this->emailEnabled && !$req->hasBackchannel ) { + if ( !$this->emailEnabled ) { return \StatusValue::newFatal( 'passwordreset-emaildisabled' ); } @@ -336,7 +336,7 @@ class TemporaryPasswordPrimaryAuthenticationProvider $ret = \StatusValue::newGood(); if ( $req ) { - if ( $req->mailpassword && !$req->hasBackchannel ) { + if ( $req->mailpassword ) { if ( !$this->emailEnabled ) { $ret->merge( \StatusValue::newFatal( 'emaildisabled' ) ); } elseif ( !$user->getEmail() ) { diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index 1bcab41fdb..3f78d9a4c8 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -153,13 +153,9 @@ class MessageCache { * @param bool $useDB * @param int $expiry Lifetime for cache. @see $mExpiry. */ - function __construct( $memCached, $useDB, $expiry ) { + function __construct( BagOStuff $memCached, $useDB, $expiry ) { global $wgUseLocalMessageCache; - if ( !$memCached ) { - $memCached = wfGetCache( CACHE_NONE ); - } - $this->mMemc = $memCached; $this->mDisable = !$useDB; $this->mExpiry = $expiry; diff --git a/includes/installer/i18n/ar.json b/includes/installer/i18n/ar.json index 97d32cd8a6..6fb8927e5f 100644 --- a/includes/installer/i18n/ar.json +++ b/includes/installer/i18n/ar.json @@ -51,7 +51,6 @@ "config-restart": "نعم، إعادة التشغيل", "config-welcome": "=== التحقق من البيئة ===\nسوف يتم الآن التحقق من أن البيئة مناسبة لتنصيب ميديا ويكي.\nتذكر تضمين هذه المعلومات اذا اردت طلب المساعدة عن كيفية إكمال التنصيب.", "config-copyright": "=== حقوق النسخ والشروط ===\n\n$1\n\nهذا البرنامج هو برنامج حر؛ يمكنك إعادة توزيعه و/أو تعديله تحت شروط رخصة جنو العامة على أن هذا البرنامج قد نُشر من قِبل مؤسسة البرمجيات الحرة؛ إما النسخة 2 من الرخصة، أو أي نسخة أخرى بعدها (من إختيارك)\n\nتم توزيع هذا البرنامج على أمل ان يكون مفيدًا ولكن دون أية ضمانات؛ دون حتى أية ضمانات مفهومة ضمنيًا أو رواجات أو أية أسباب محددة.\nأنظر رخصة جنو العامة لمزيد من المعلومات.\n\nمن المفترض أنك إستملت نسخة عن رخصة جنو العامة مع هذا البرنامج؛ اذا لم تقعل إكتب رسالة إلى مؤسسة البرمجيات الحرة المحدودة، شارع 51 فرانكلين الطابق الخامس، بوسطن MA 02110-1301 الولايات المتخدة أو [http://www.gnu.org/copyleft/gpl.html read it online].", - "config-sidebar": "* [https://www.mediawiki.org MediaWiki home]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrator's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Read me\n* Release notes\n* Copying\n* Upgrading", "config-env-good": "جرى التحقق من البيئة. يمكنك تنصيب ميدياويكي.", "config-env-bad": "جرى التحقق من البيئة. لا يمكنك تنصيب ميدياويكي.", "config-env-php": "بي إتش بي $1 مثبت.", diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php index 01cce028a2..4c82dda402 100644 --- a/includes/parser/CoreParserFunctions.php +++ b/includes/parser/CoreParserFunctions.php @@ -20,6 +20,7 @@ * @file * @ingroup Parser */ +use MediaWiki\MediaWikiServices; /** * Various core parser functions, registered in Parser::firstCallInit() @@ -346,10 +347,11 @@ class CoreParserFunctions { // check parameter, or use the ParserOptions if in interface message $user = User::newFromName( $username ); + $genderCache = MediaWikiServices::getInstance()->getGenderCache(); if ( $user ) { - $gender = GenderCache::singleton()->getGenderOf( $user, __METHOD__ ); + $gender = $genderCache->getGenderOf( $user, __METHOD__ ); } elseif ( $username === '' && $parser->getOptions()->getInterfaceMessage() ) { - $gender = GenderCache::singleton()->getGenderOf( $parser->getOptions()->getUser(), __METHOD__ ); + $gender = $genderCache->getGenderOf( $parser->getOptions()->getUser(), __METHOD__ ); } $ret = $parser->getFunctionLang()->gender( $gender, $forms ); return $ret; diff --git a/includes/specials/SpecialPasswordReset.php b/includes/specials/SpecialPasswordReset.php index 5e5f2f18ff..a4f16bd7c9 100644 --- a/includes/specials/SpecialPasswordReset.php +++ b/includes/specials/SpecialPasswordReset.php @@ -100,14 +100,6 @@ class SpecialPasswordReset extends FormSpecialPage { ]; } - if ( $this->getUser()->isAllowed( 'passwordreset' ) ) { - $a['Capture'] = [ - 'type' => 'check', - 'label-message' => 'passwordreset-capture', - 'help-message' => 'passwordreset-capture-help', - ]; - } - return $a; } @@ -144,22 +136,12 @@ class SpecialPasswordReset extends FormSpecialPage { * @return Status */ public function onSubmit( array $data ) { - if ( isset( $data['Capture'] ) && !$this->getUser()->isAllowed( 'passwordreset' ) ) { - // The user knows they don't have the passwordreset permission, - // but they tried to spoof the form. That's naughty - throw new PermissionsError( 'passwordreset' ); - } - $username = isset( $data['Username'] ) ? $data['Username'] : null; $email = isset( $data['Email'] ) ? $data['Email'] : null; - $capture = !empty( $data['Capture'] ); $this->method = $username ? 'username' : 'email'; $this->result = Status::wrap( - $this->getPasswordReset()->execute( $this->getUser(), $username, $email, $capture ) ); - if ( $capture && $this->result->isOK() ) { - $this->passwords = $this->result->getValue(); - } + $this->getPasswordReset()->execute( $this->getUser(), $username, $email ) ); if ( $this->result->hasMessage( 'actionthrottledtext' ) ) { throw new ThrottledError; @@ -169,26 +151,6 @@ class SpecialPasswordReset extends FormSpecialPage { } public function onSuccess() { - if ( $this->getUser()->isAllowed( 'passwordreset' ) && $this->passwords ) { - if ( $this->result->isGood() ) { - $this->getOutput()->addWikiMsg( 'passwordreset-emailsent-capture2', - count( $this->passwords ) ); - } else { - $this->getOutput()->addWikiMsg( 'passwordreset-emailerror-capture2', - $this->result->getMessage(), key( $this->passwords ), count( $this->passwords ) ); - } - - $this->getOutput()->addHTML( Html::openElement( 'ul' ) ); - foreach ( $this->passwords as $username => $pwd ) { - $this->getOutput()->addHTML( Html::rawElement( 'li', [], - htmlspecialchars( $username, ENT_QUOTES ) - . $this->msg( 'colon-separator' )->text() - . htmlspecialchars( $pwd, ENT_QUOTES ) - ) ); - } - $this->getOutput()->addHTML( Html::closeElement( 'ul' ) ); - } - if ( $this->method === 'email' ) { $this->getOutput()->addWikiMsg( 'passwordreset-emailsentemail' ); } else { diff --git a/includes/user/PasswordReset.php b/includes/user/PasswordReset.php index 530580d469..c1aef22ba1 100644 --- a/includes/user/PasswordReset.php +++ b/includes/user/PasswordReset.php @@ -44,8 +44,8 @@ class PasswordReset implements LoggerAwareInterface { protected $logger; /** - * In-process cache for isAllowed lookups, by username. Contains pairs of StatusValue objects - * (for false and true value of $displayPassword, respectively). + * In-process cache for isAllowed lookups, by username. + * Contains a StatusValue object * @var HashBagOStuff */ private $permissionCache; @@ -72,13 +72,12 @@ class PasswordReset implements LoggerAwareInterface { * @param User $user * @param bool $displayPassword If set, also check whether the user is allowed to reset the * password of another user and see the temporary password. + * @since 1.29 Second argument for displayPassword removed. * @return StatusValue */ - public function isAllowed( User $user, $displayPassword = false ) { - $statuses = $this->permissionCache->get( $user->getName() ); - if ( $statuses ) { - list ( $status, $status2 ) = $statuses; - } else { + public function isAllowed( User $user ) { + $status = $this->permissionCache->get( $user->getName() ); + if ( !$status ) { $resetRoutes = $this->config->get( 'PasswordResetRoutes' ); $status = StatusValue::newGood(); @@ -107,19 +106,10 @@ class PasswordReset implements LoggerAwareInterface { $status = StatusValue::newFatal( 'blocked-mailpassword' ); } - $status2 = StatusValue::newGood(); - if ( !$user->isAllowed( 'passwordreset' ) ) { - $status2 = StatusValue::newFatal( 'badaccess' ); - } - - $this->permissionCache->set( $user->getName(), [ $status, $status2 ] ); + $this->permissionCache->set( $user->getName(), $status ); } - if ( !$displayPassword || !$status->isGood() ) { - return $status; - } else { - return $status2; - } + return $status; } /** @@ -128,22 +118,22 @@ class PasswordReset implements LoggerAwareInterface { * Process the form. At this point we know that the user passes all the criteria in * userCanExecute(), and if the data array contains 'Username', etc, then Username * resets are allowed. + * + * @since 1.29 Fourth argument for displayPassword removed. * @param User $performingUser The user that does the password reset * @param string $username The user whose password is reset * @param string $email Alternative way to specify the user - * @param bool $displayPassword Whether to display the password * @return StatusValue Will contain the passwords as a username => password array if the * $displayPassword flag was set * @throws LogicException When the user is not allowed to perform the action * @throws MWException On unexpected DB errors */ public function execute( - User $performingUser, $username = null, $email = null, $displayPassword = false + User $performingUser, $username = null, $email = null ) { - if ( !$this->isAllowed( $performingUser, $displayPassword )->isGood() ) { - $action = $this->isAllowed( $performingUser )->isGood() ? 'display' : 'reset'; + if ( !$this->isAllowed( $performingUser )->isGood() ) { throw new LogicException( 'User ' . $performingUser->getName() - . ' is not allowed to ' . $action . ' passwords' ); + . ' is not allowed to reset passwords' ); } $resetRoutes = $this->config->get( 'PasswordResetRoutes' ) @@ -169,7 +159,6 @@ class PasswordReset implements LoggerAwareInterface { $data = [ 'Username' => $username, 'Email' => $email, - 'Capture' => $displayPassword ? '1' : null, ]; if ( !Hooks::run( 'SpecialPasswordResetOnSubmit', [ &$users, $data, &$error ] ) ) { return StatusValue::newFatal( Message::newFromSpecifier( $error ) ); @@ -218,7 +207,6 @@ class PasswordReset implements LoggerAwareInterface { $req = TemporaryPasswordAuthenticationRequest::newRandom(); $req->username = $user->getName(); $req->mailpassword = true; - $req->hasBackchannel = $displayPassword; $req->caller = $performingUser->getName(); $status = $this->authManager->allowsAuthenticationDataChange( $req, true ); if ( $status->isGood() && $status->getValue() !== 'ignored' ) { @@ -239,7 +227,6 @@ class PasswordReset implements LoggerAwareInterface { 'targetUsername' => $username, 'targetEmail' => $email, 'actualUser' => $firstUser->getName(), - 'capture' => $displayPassword, ]; if ( !$result->isGood() ) { @@ -253,25 +240,12 @@ class PasswordReset implements LoggerAwareInterface { $passwords = []; foreach ( $reqs as $req ) { $this->authManager->changeAuthenticationData( $req ); - // TODO record mail sending errors - if ( $displayPassword ) { - $passwords[$req->username] = $req->password; - } } - if ( $displayPassword ) { - // The password capture thing is scary, so log - // at a higher warning level. - $this->logger->warning( - "{requestingUser} did password reset of {actualUser} with password capturing!", - $logContext - ); - } else { - $this->logger->info( - "{requestingUser} did password reset of {actualUser}", - $logContext - ); - } + $this->logger->info( + "{requestingUser} did password reset of {actualUser}", + $logContext + ); return StatusValue::newGood( $passwords ); } diff --git a/includes/user/User.php b/includes/user/User.php index b69b5bc44b..789c55c00e 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -166,7 +166,6 @@ class User implements IDBAccessObject { 'noratelimit', 'override-export-depth', 'pagelang', - 'passwordreset', 'patrol', 'patrolmarks', 'protect', diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 65ab9e59c2..12b3c53d09 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -684,7 +684,7 @@ "userinvalidcssjstitle": "Папярэджаньне: няма тэмы афармленьня «$1».\nПамятайце, што ўласныя старонкі .css і .js павінны мець назву, якая складаецца з малых літараў, напрыклад, {{ns:user}}:Хтосьці/vector.css, а не {{ns:user}}:Хтосьці/Vector.css.", "updated": "(Абноўлена)", "note": "Заўвага:", - "previewnote": "'''Гэта толькі папярэдні прагляд.'''\nВашыя зьмены яшчэ не былі захаваныя!", + "previewnote": "Гэта толькі папярэдні прагляд.\nВашыя зьмены яшчэ не былі захаваныя!", "continue-editing": "Перайсьці да рэдагаваньня", "previewconflict": "Гэта папярэдні прагляд тэксту зь верхняга вакна рэдагаваньня, так ён будзе выглядаць, калі Вы вырашыце яго захаваць.", "session_fail_preview": "Выбачайце! Мы не змаглі апрацаваць вашую праўку праз страту зьвестак сэсіі.\n\nМагчыма, вы выйшлі з сыстэмы. Калі ласка, праверце, што вы знаходзіцеся ў сыстэме і паспрабуйце яшчэ раз. Калі не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз, а таксама праверце, што ваш браўзэр дазваляе файлы-кукі з гэтага сайту.", @@ -1880,6 +1880,7 @@ "activeusers-count": "$1 {{PLURAL:$1|дзеяньне|дзеяньні|дзеяньняў}} за $3 {{PLURAL:$3|апошні дзень|апошнія дні|апошніх дзён}}", "activeusers-from": "Паказваць ўдзельнікаў, пачынаючы з:", "activeusers-groups": "Паказаць удзельнікаў, якія належаць да групаў:", + "activeusers-excludegroups": "Выключыць удзельнікаў, якія належаць да групаў:", "activeusers-noresult": "Удзельнікі ня знойдзеныя.", "activeusers-submit": "Паказаць актыўных удзельнікаў", "listgrouprights": "Правы групаў удзельнікаў", @@ -3324,7 +3325,7 @@ "tags-apply-not-allowed-one": "Метка «$1» ня можа быць прызначаная ўручную.", "tags-apply-not-allowed-multi": "{{PLURAL:$2|Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1", "tags-update-no-permission": "Вы ня маеце права на дадаваньне ці выдаленьне метак зьменаў для асобных вэрсіяў ці запісаў журналаў.", - "tags-update-blocked": "Пакуль Вы заблякаваныя, Вы ня можаце дадаваць і выдаляць меткі зьменаў.", + "tags-update-blocked": "Вы ня можаце дадаваць і выдаляць меткі зьменаў, пакуль {{GENDER:$1|вы}} заблякаваныя.", "tags-update-add-not-allowed-one": "Метка «$1» ня можа быць дададзеная ўручную.", "tags-update-add-not-allowed-multi": "{{PLURAL:$2|1=Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1", "tags-update-remove-not-allowed-one": "Метка «$1» ня можа быць выдаленая.", diff --git a/languages/i18n/bgn.json b/languages/i18n/bgn.json index db7980075a..55806551b9 100644 --- a/languages/i18n/bgn.json +++ b/languages/i18n/bgn.json @@ -1478,6 +1478,7 @@ "all-logs-page": "عمومین موچین سیاه چال هان", "logempty": "شمی منطبقین آیتم بی سیاه چالئ تا ودی نه بوت.", "log-title-wildcard": "آ تاکدیمیانی پدا بگرد که آوانی ئنوان که گۆ ای ئبارت ئا شرو ئه بیئت", + "checkbox-all": "موچ", "allpages": "موچین تاکدیمان", "nextpage": "بعدین تاکدیم ($1)", "prevpage": "دیمی تاکدیم ($1)", @@ -1616,7 +1617,7 @@ "actionfailed": "کار نه بوت", "deletedtext": "«$1» پاک بوت.\nپه آخیرین پاک بوتینین سابقه ئا بئ $2 ئی تا مراجعه بکنیت.", "dellogpage": "پاک بوته‌ئانی کورم", - "dellogpagetext": "جهلگین لڑلیستا که گیندیت په آخیرئین پاک بوته‌ئین فابلاني خاتیرا اینت.\nموچین نشان داته بوته‌ئین وخت گو (گرینویچ‌ئی وختا) مطابق انت.", + "dellogpagetext": "جهلگین لڑلیستا که گیندیت په آخیرئین پاک بوته‌ئین فایلاني خاتیرا اینت.\nموچین نشان داته بوته‌ئین وخت گو (گرینویچ‌ئی وختا) مطابق انت.", "deletionlog": "پاک بوته‌ئانی کورم", "reverted": "بی دیمتیرین نخسه ئا بیئرگردینته بوت", "deletecomment": "دلیل:", @@ -2895,5 +2896,7 @@ "special-characters-title-endash": "پاسیله خت", "special-characters-title-emdash": "تچکین پاسیله خت", "special-characters-title-minus": "منپی نشانگ", - "mw-widgets-titleinput-description-redirect": "گردینتین به $1 یی تا" + "mw-widgets-titleinput-description-redirect": "گردینتین به $1 یی تا", + "log-action-filter-delete": "پاک بوتین‌ئی رقم:", + "log-action-filter-all": "موچ" } diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index a89368253e..c987e38ad9 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -3081,7 +3081,7 @@ "table_pager_prev": "পূর্ববর্তী পাতা", "table_pager_first": "প্রথম পাতা", "table_pager_last": "শেষ পাতা", - "table_pager_limit": "প্রতি পাতায় $1 গুলো বিষয়বস্তু দেখাও", + "table_pager_limit": "প্রতি পাতায় $1টি উপাদান দেখাও", "table_pager_limit_label": "প্রতি পাতায় আইটেম সংখ্যা:", "table_pager_limit_submit": "চলো", "table_pager_empty": "ফলাফল শূন্য", diff --git a/languages/i18n/bqi.json b/languages/i18n/bqi.json index e18bf6c414..7fe1f34b29 100644 --- a/languages/i18n/bqi.json +++ b/languages/i18n/bqi.json @@ -165,6 +165,7 @@ "otherlanguages": "درزبانهای دیگر", "redirectedfrom": "(تصحیح مجدداز$1)", "redirectpagesub": "صفحه تصحیح وهدایت مجدد", + "redirectto": "ڤاگردۈنی سی:", "lastmodifiedat": "این صفحه اخیرا تغییر واصلاح شددر $1, در $2.", "viewcount": "این صفحه قابل دسترسی شده است {{PLURAL:$1|once|$1 times}}.", "protectedpage": "صفحه حمایت شده", @@ -297,7 +298,7 @@ "editing": "درحال اصلاح $1", "editingsection": "درحال اصلاح $1 (قسمت)", "copyrightwarning": "لطفاً دقت کنین که درنظر گریده ابوه که همه شراکتهای ایسا {{SITENAME}} تحت «$2» منتشر ابون ).\n\n\n(سی دیدن جزئیات بیشتر به $1 برین\n\nایر نه خوین نوشته‌هاتو بی‌رحمانه اصلاح بوه و به دلخواه ارسال بوه، ایچو نفرستن.
\nدرضمن ایسادارین به ایما قول ادین که خودتو یونه نوشتین یا هونه زه یک منبع آزاد با مالکیت عمومی یا مثل هو ورداشتین. '''کارهای دارای کارهای دارای حق کپی رایت را بی‌اجازه نفرستین!'''',", - "templatesused": "قالبهای استفاده شده من ای صفحه:", + "templatesused": "{{PLURAL:$1|چوٙأ|چوٙأیل}} ب کار گرهڌأ ڤابيڌإ مإن اي بألگأ:", "templatesusedpreview": "قالبها یا الگوهای استفاده وابیده در ای پیش نمایش:", "template-protected": "(تحت حمایت)", "template-semiprotected": "(نیمه حمایت وابیده)", @@ -306,7 +307,7 @@ "viewpagelogs": "نشودادن نمایه ها سی ای صفحه", "currentrev": "نسخه جاری", "revisionasof": "اصلاح $1", - "revision-info": "یه نسخه اصلاح شده درتاریخ $1 بوسیله $2", + "revision-info": "نوسقإ ڤانيأري ڤابيڌإ جۈر $1 ڤا $2", "previousrevision": "← اصلاح قبلی", "nextrevision": "نسخه بعدی →", "currentrevisionlink": "نسخه جاری", @@ -318,7 +319,7 @@ "histfirst": "کهنه ترین", "histlast": "تازه ترین", "history-feed-item-nocomment": "$1 در $2", - "history-title": "گزارش تاریخی نسخه زه \"$1\"", + "history-title": "دڤارتإ دیئن ڤيرگار $1", "lineno": "سطر $1:", "compareselectedversions": "مقایسه نسخه‌های انتخاب‌ وابیده", "editundo": "لغو اصلاح آخر", @@ -359,15 +360,19 @@ "rcnotefrom": "در زیر تغییرات زه تاریخ $2 آمده‌اند (تا $1 مورد نشو داده ابوه).", "rclistfrom": "نشودادن تغییرات تازه با شروع زه $3 $2", "rcshowhideminor": "اصلاحات کوچیک $1", + "rcshowhideminor-show": "نشون دائن", "rcshowhideminor-hide": "قام کردن", "rcshowhidebots": "$1 ربات‌ها یا بوتها", "rcshowhidebots-show": "نشون دائن", + "rcshowhidebots-hide": "قام کردن", "rcshowhideliu": "$1 کاریارا ثوت نام کرده", "rcshowhideliu-hide": "قام کئردئن", "rcshowhideanons": "$1 کاربران داخل نوابیده", + "rcshowhideanons-show": "نشون دائن", "rcshowhideanons-hide": "قام کئردئن", "rcshowhidepatr": "$1 اصلاحات پاسداری شده", "rcshowhidemine": "$1 اصلاحات مو", + "rcshowhidemine-show": "نشون دائن", "rcshowhidemine-hide": "قام کئردئن", "rclinks": "نشودادن آخرین $1 تغییر در $2 روز اخیر؛ $3", "diff": "تفاوت", @@ -444,7 +449,9 @@ "ancientpages": "کهنه ترین صفحات", "move": "جابجا کردن", "movethispage": "جابجایی ای صفحه", + "pager-older-n": "{{PLURAL:$1|گپسالتر 1|گپسالتر $1}}", "booksources": "منابع کتاب", + "booksources-search": "پی جۈري", "specialloguserlabel": "کاربر:", "speciallogtitlelabel": "عنوان:", "log": "نمایه ها", @@ -479,6 +486,7 @@ "deleteotherreason": "دیه/دلیل اضافی:", "deletereasonotherlist": "دلیل دیه", "rollbacklink": "عقب گرد", + "rollbacklinkcount": "چڤاسإ کردن $1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}", "protectlogpage": "نمایه حفاظت وحمایت", "prot_1movedto2": "[[$1]] جابجا وابید به[[$2]]", "protectcomment": "دلیل:", @@ -521,6 +529,7 @@ "nolinkshere": "هیچ صفحه ای پیوند نداردبه '''[[:$1]]'''.", "isredirect": "صفحه تغییر مسیر", "istemplate": "استفاده‌ وابیده داخل صفحه", + "isimage": "جانیا هوم پیوند", "whatlinkshere-prev": "{{PLURAL:$1|قبلی |مورد قبلی$1}}", "whatlinkshere-next": "{{PLURAL:$1|بعدی |مورد بعدی $1}}", "whatlinkshere-links": "← لینکها", @@ -625,7 +634,7 @@ "metadata-help": " ای فایل دارای اطلاعات اضافه‌ای است که احتمالاً با دوربین دیجیتالی‌ یا پویشگری که سی ایجاد یا دیجیتالی‌کردن آن به کار رهده اضاف وابیده . ایر فایل زه وضعیت اولیه اس تغییر داده وابیده بوه ممکنه همه توضیحات موجود اطلاعات عکس را منعکس نکنه", "metadata-expand": "نشودادن جزئیات تفصیلی", "metadata-collapse": "قایم کردن جزئیات تفصیلی", - "metadata-fields": "فراداده EXIF نشو داده وابیده در این پیام وقتی جدول فراداده‌های تصویر جمع وابیده بوه هم نمایش داده ابوه.\nبقیه موارد فقط وقتی نشوداده ابوه که جدول یادشده واز بوه.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude", + "metadata-fields": "رشنه یا یا گپ دونسمنیا که د ای پیغوم نومگه کاری بینه د ور گرته بلگه عسگ ن که گات وختی که جدول گپ دونسمنیا واز بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت", "exif-orientation": "سرچشمأ", "exif-xresolution": "گپ نما کردن اوفقي", "exif-yresolution": "گپ نما کردن ز وارو", @@ -648,5 +657,6 @@ "tag-filter": "[[Special:سرديسا|سرديس]] فيلتر:", "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|سرديس|سرديسا}}]]: $2)", "logentry-delete-delete": "$1 بألگأ {{GENDER:$2|پاکسا ڤابيأ}} $3", + "logentry-upload-upload": "$1 {{GENDER:$2|سوڤار کرده}} $3", "searchsuggest-search": "جستن {{SITENAME}}" } diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 28ccbf3d81..dc82677d25 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -600,8 +600,6 @@ "passwordreset-emaildisabled": "Email features have been disabled on this wiki.", "passwordreset-username": "Username:", "passwordreset-domain": "Domain:", - "passwordreset-capture": "View the resulting email?", - "passwordreset-capture-help": "If you check this box, the email (with the temporary password) will be shown to you as well as being sent to the user.", "passwordreset-email": "Email address:", "passwordreset-emailtitle": "Account details on {{SITENAME}}", "passwordreset-emailtext-ip": "Someone (probably you, from IP address $1) requested a reset of your\npassword for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}\nassociated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.", @@ -609,8 +607,6 @@ "passwordreset-emailelement": "Username:\n$1\n\nTemporary password:\n$2", "passwordreset-emailsentemail": "If this email address is associated with your account, then a password reset email will be sent.", "passwordreset-emailsentusername": "If there is an email address associated with this username, then a password reset email will be sent.", - "passwordreset-emailsent-capture2": "The password reset {{PLURAL:$1|email has|emails have}} been sent. The {{PLURAL:$1|username and password|list of usernames and passwords}} is shown here.", - "passwordreset-emailerror-capture2": "Emailing the {{GENDER:$2|user}} failed: $1 The {{PLURAL:$3|username and password|list of usernames and passwords}} is shown here.", "passwordreset-nocaller": "A caller must be provided", "passwordreset-nosuchcaller": "Caller does not exist: $1", "passwordreset-ignored": "The password reset was not handled. Maybe no provider was configured?", @@ -1248,7 +1244,6 @@ "right-siteadmin": "Lock and unlock the database", "right-override-export-depth": "Export pages including linked pages up to a depth of 5", "right-sendemail": "Send email to other users", - "right-passwordreset": "View password reset emails", "right-managechangetags": "Create and (de)activate [[Special:Tags|tags]]", "right-applychangetags": "Apply [[Special:Tags|tags]] along with one's changes", "right-changetags": "Add and remove arbitrary [[Special:Tags|tags]] on individual revisions and log entries", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 7aa39da397..26582fad63 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -2018,6 +2018,7 @@ "activeusers-count": "$1 {{PLURAL:$1|acción|acciones}} en {{PLURAL:$3|el último día|los últimos $3 días}}", "activeusers-from": "Mostrar los usuarios que empiezan por:", "activeusers-groups": "Mostrar los usuarios que pertenecen a los grupos:", + "activeusers-excludegroups": "Excluir a los usuarios que pertenezcan a los grupos:", "activeusers-noresult": "No se encontraron usuarios.", "activeusers-submit": "Mostrar usuarios activos", "listgrouprights": "Permisos de los grupos de usuarios", @@ -3433,7 +3434,7 @@ "tags-deactivate": "desactivar", "tags-hitcount": "$1 {{PLURAL:$1|cambio|cambios}}", "tags-manage-no-permission": "No tienes permiso para gestionar las etiquetas de cambios.", - "tags-manage-blocked": "No puedes dirigir etiquetas de cambio mientras {{GÉNERO:$1|tú}} estás bloqueado.", + "tags-manage-blocked": "No puedes gestionar etiquetas de cambio mientras estés {{GÉNERO:$1|bloqueado|bloqueada}}.", "tags-create-heading": "Crear una etiqueta", "tags-create-explanation": "De manera predeterminada, las etiquetas nuevas estarán disponibles para su uso por usuarios y bots.", "tags-create-tag-name": "Nombre de la etiqueta:", @@ -3469,7 +3470,7 @@ "tags-deactivate-not-allowed": "No es posible desactivar la etiqueta «$1».", "tags-deactivate-submit": "Desactivar", "tags-apply-no-permission": "No tienes permiso para aplicar etiquetas de cambios, junto con tus cambios.", - "tags-apply-blocked": "No puedes pedir cambio de etiquetas con tus cambios mientras estés {{GENDER:$1|bloqueado|bloqueada}}.", + "tags-apply-blocked": "No puedes aplicar etiquetas de cambio junto a tus cambios mientras estés {{GENDER:$1|bloqueado|bloqueada}}.", "tags-apply-not-allowed-one": "No se permite aplicar manualmente la etiqueta «$1».", "tags-apply-not-allowed-multi": "{{PLURAL:$2|La siguiente etiqueta no se puede|Las siguientes etiquetas no se pueden}} aplicar manualmente: $1", "tags-update-no-permission": "No tienes permiso para agregar o quitar etiquetas de cambio de las revisiones individuales o las entradas del registro.", diff --git a/languages/i18n/et.json b/languages/i18n/et.json index 3fbe8426c8..c0c2fa8b37 100644 --- a/languages/i18n/et.json +++ b/languages/i18n/et.json @@ -3178,7 +3178,7 @@ "tags-deactivate": "keela", "tags-hitcount": "$1 {{PLURAL:$1|muudatus|muudatust}}", "tags-manage-no-permission": "Sul pole õigust muudatusmärgiseid hallata.", - "tags-manage-blocked": "Muudatusmärgiseid ei saa hallata, kui oled blokeeritud.", + "tags-manage-blocked": "Muudatusmärgiseid ei saa hallata, kui {{GENDER:$1|oled}} blokeeritud.", "tags-create-heading": "Uue märgise koostamine", "tags-create-explanation": "Vaikimisi on vastkoostatud märgised kasutajate ja robotite jaoks kasutatavad.", "tags-create-tag-name": "Märgise nimi:", @@ -3213,11 +3213,11 @@ "tags-deactivate-not-allowed": "Märgist \"$1\" pole võimalik keelata.", "tags-deactivate-submit": "Keela", "tags-apply-no-permission": "Sul pole lubatud rakendada muudatusmärgiseid enda muudatuste suhtes.", - "tags-apply-blocked": "Muudatusmärgiseid ei saa enda muudatustele rakendada, kui oled blokeeritud.", + "tags-apply-blocked": "Muudatusmärgiseid ei saa enda muudatustele rakendada, kui {{GENDER:$1|oled}} blokeeritud.", "tags-apply-not-allowed-one": "Märgist \"$1\" pole lubatud käsitsi rakendada.", "tags-apply-not-allowed-multi": "{{PLURAL:$2|Järgmist märgist|Järgmiseid märgiseid}} pole lubatud käsitsi rakendada: $1", "tags-update-no-permission": "Sul pole lubatud üksikute redaktsioonide ega logisissekannete juures muudatusmärgiseid lisada ega eemaldada.", - "tags-update-blocked": "Muudatusmärgiseid ei saa lisada ega eemaldada, kui oled blokeeritud.", + "tags-update-blocked": "Muudatusmärgiseid ei saa lisada ega eemaldada, kui {{GENDER:$1|oled}} blokeeritud.", "tags-update-add-not-allowed-one": "Märgist \"$1\" pole lubatud käsitsi lisada.", "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Järgmist märgist|Järgmiseid märgiseid}} pole lubatud käsitsi lisada: $1", "tags-update-remove-not-allowed-one": "Märgist \"$1\" pole lubatud eemaldada.", @@ -3532,10 +3532,15 @@ "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\"", "randomrootpage": "Juhuslik juurlehekülg", "log-action-filter-block": "Blokeeringu tüüp:", + "log-action-filter-delete": "Kustutamise tüüp:", "log-action-filter-all": "Kõik", "log-action-filter-block-block": "Blokeerimine", "log-action-filter-block-reblock": "Blokeeringu muutmine", "log-action-filter-block-unblock": "Blokeeringu tühistamine", + "log-action-filter-delete-delete": "Lehekülje kustutamine", + "log-action-filter-delete-restore": "Lehekülje taastamine", + "log-action-filter-delete-event": "Logi kustutamine", + "log-action-filter-delete-revision": "Redaktsiooni kustutamine", "authmanager-provider-password": "Paroolipõhine autentimine", "authmanager-provider-password-domain": "Parooli- ja domeenipõhine autentimine", "authmanager-provider-temporarypassword": "Ajutine parool", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index ac1136b49b..110b40a920 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -1270,7 +1270,7 @@ "right-move-rootuserpages": "Renommer la page principale d'un utilisateur", "right-move-categorypages": "Renommer des pages de catégorie", "right-movefile": "Renommer des fichiers", - "right-suppressredirect": "Ne pas créer de redirection depuis le titre d'origine en renommant les pages", + "right-suppressredirect": "Ne pas créer de redirection depuis le titre d’origine en renommant les pages", "right-upload": "Importer des fichiers", "right-reupload": "Écraser un fichier existant", "right-reupload-own": "Écraser un fichier que l'on a soi-même importé", @@ -1536,7 +1536,7 @@ "emptyfile": "Le fichier que vous voulez importer semble vide.\nCeci peut être dû à une erreur dans le nom du fichier.\nVeuillez vérifier que vous désirez vraiment importer ce fichier.", "windows-nonascii-filename": "Ce wiki ne prend pas en charge les noms de fichiers avec des caractères spéciaux.", "fileexists": "Un fichier existe déjà sous ce nom.\nMerci de vérifier [[:$1]] si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le remplacer.\n[[$1|thumb]]", - "filepageexists": "La page de description pour ce fichier a déjà été créée ici [[:$1]], mais aucun fichier n'existe actuellement sous ce nom.\nLe résumé que vous allez spécifier n'apparaîtra pas sur la page de description.\nPour que ce soit le cas, vous devrez modifier manuellement la page. \n[[$1|thumb]]", + "filepageexists": "La page de description pour ce fichier a déjà été créée ici [[:$1]], mais aucun fichier n’existe actuellement sous ce nom.\nLe résumé que vous allez spécifier n’apparaîtra pas sur la page de description.\nPour que ce soit le cas, vous devrez modifier manuellement la page.\n[[$1|thumb]]", "fileexists-extension": "Un fichier existe avec un nom proche : [[$2|thumb]]\n* Nom du fichier à importer : [[:$1]]\n* Nom du fichier existant : [[:$2]]\nPeut-être voulez-vous utiliser un nom plus explicite ?", "fileexists-thumbnail-yes": "Le fichier semble être une image en taille réduite (vignette). \n[[$1|thumb]]\nVeuillez vérifier le fichier [[:$1]].\nSi le fichier vérifié est la même image avec la taille initiale, il n'y a pas besoin d'importer une version réduite.", "file-thumbnail-no": "Le nom du fichier commence par $1.\nIl est possible qu'il s'agisse d'une version réduite (vignette).\nSi vous disposez du fichier en haute résolution, importez-le, sinon veuillez modifier son nom.", @@ -2019,6 +2019,7 @@ "activeusers-count": "$1 {{PLURAL:$1|action|actions}} lors {{PLURAL:$3|du dernier jour|des $3 derniers jours}}", "activeusers-from": "Afficher les utilisateurs depuis :", "activeusers-groups": "Afficher les utilisateurs appartenant aux groupes :", + "activeusers-excludegroups": "Exclure les utilisateurs appartenant aux groupes :", "activeusers-noresult": "Aucun utilisateur trouvé.", "activeusers-submit": "Afficher les utilisateurs actifs", "listgrouprights": "Droits des groupes d'utilisateurs", @@ -2499,8 +2500,8 @@ "movepagebtn": "Renommer la page", "pagemovedsub": "Renommage réussi", "movepage-moved": "« $1 » a été renommée en « $2 »", - "movepage-moved-redirect": "Une redirection depuis l'ancien nom a été créée.", - "movepage-moved-noredirect": "La création d'une redirection depuis l'ancien nom a été annulée.", + "movepage-moved-redirect": "Une redirection depuis l’ancien nom a été créée.", + "movepage-moved-noredirect": "La création d’une redirection depuis l’ancien nom a été annulée.", "articleexists": "Il existe déjà une page portant ce titre, ou le titre que vous avez choisi n'est pas correct.\nVeuillez en choisir un autre.", "cantmove-titleprotected": "Vous ne pouvez pas déplacer une page vers cet emplacement car la création de page avec ce nouveau titre a été protégée.", "movetalk": "Renommer aussi la page de discussion associée", diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json index 58ea420c24..e255aae736 100644 --- a/languages/i18n/gl.json +++ b/languages/i18n/gl.json @@ -1889,6 +1889,7 @@ "activeusers-count": "$1 {{PLURAL:$1|acción|accións}} {{PLURAL:$3|no último día|nos últimos $3 días}}", "activeusers-from": "Mostrar os usuarios que comecen por:", "activeusers-groups": "Mostrar os usuarios que pertencen aos grupos:", + "activeusers-excludegroups": "Excluír ós usuarios que pertenzan ós grupos:", "activeusers-noresult": "Non se atopou ningún usuario.", "activeusers-submit": "Mostrar os usuarios activos", "listgrouprights": "Dereitos dun usuario segundo o seu grupo", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index 028f7b9cfd..76057caa15 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -1904,6 +1904,7 @@ "activeusers-count": "{{PLURAL:$1|פעולה אחת|$1 פעולות}} ב{{PLURAL:$3|יום האחרון|יומיים האחרונים|־$3 הימים האחרונים}}", "activeusers-from": "הצגת משתמשים החל מ:", "activeusers-groups": "הצגת משתמשים השייכים לקבוצות:", + "activeusers-excludegroups": "הסתרת משתמשים השייכים לקבוצות:", "activeusers-noresult": "לא נמצאו משתמשים.", "activeusers-submit": "הצגת משתמשים פעילים", "listgrouprights": "רשימת הרשאות לקבוצה", diff --git a/languages/i18n/hy.json b/languages/i18n/hy.json index 6a11148d96..ea3fd1e6f8 100644 --- a/languages/i18n/hy.json +++ b/languages/i18n/hy.json @@ -667,8 +667,10 @@ "defaultmessagetext": "Լռելյան տեքստը", "editwarning-warning": "Այս էջը լքելով դուք կարող եք կորցնել ձեր կատարած փոփոխությունները։\nԵթե դուք գրանցված եք համակարգում, կարող եք անջատել այս նախազգուշացումը ձեր նախընրությունների «{{int:prefs-editing}}» բաժնում։", "content-model-wikitext": "վիքիտեքստ", + "content-model-text": "պարզ տեքստ", "content-model-javascript": "ՋավաՍկրիպտ", "content-model-css": "ՍիԷսԷս", + "content-json-empty-object": "Դատարկ օբյեկտ", "duplicate-args-category": "Կաղապարներում կրկնվող արգումենտներով էջեր", "undo-success": "Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։", "undo-failure": "Խմբագրումը չի կարող հետ շրջվել միջանկյալ խմբագրումների ընդհարման պատճառով։", @@ -886,6 +888,7 @@ "prefs-timeoffset": "Ժամային տարբերություն", "prefs-advancedediting": "Ընդլայնված ընրանքներ", "prefs-editor": "Խմբագիր", + "prefs-preview": "Նախադիտել", "prefs-advancedrc": "Ընդլայնված ընրանքներ", "prefs-advancedrendering": "Ընդլայնված ընրանքներ", "prefs-advancedsearchoptions": "Ընդլայնված ընրանքներ", @@ -937,8 +940,10 @@ "right-writeapi": "API գրի օգտագործումը", "right-delete": "Էջերի ջնջում", "right-rollback": "Արագ հետ գլորել տվյալ էջը վերջին անգամ խմբագրած մասնակցի խմբագրումները", + "grant-group-email": "Ուղարկել էլ. նամակ", "grant-createaccount": "Ստեղծել հաշիվներ", "grant-createeditmovepage": "Ստեղծել․ խմբագրել և տեղափոխել էջեր", + "grant-basic": "Հիմնական իրավունքներ", "newuserlogpage": "Մասնակիցների գրանցման տեղեկամատյան", "newuserlogpagetext": "Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.", "rightslog": "Մասնակցի իրավունքների տեղեկամատյան", diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json index c8826a69bc..9d59a15237 100644 --- a/languages/i18n/ia.json +++ b/languages/i18n/ia.json @@ -1880,6 +1880,7 @@ "activeusers-count": "$1 {{PLURAL:$1|action|actiones}} in le ultime {{PLURAL:$3|die|$3 dies}}", "activeusers-from": "Presentar usatores a partir de:", "activeusers-groups": "Monstrar usatores pertinente a gruppos:", + "activeusers-excludegroups": "Excluder usatores pertinente a gruppos:", "activeusers-noresult": "Nulle usator trovate.", "activeusers-submit": "Monstrar usatores active", "listgrouprights": "Derectos del gruppos de usatores", @@ -3272,7 +3273,7 @@ "tags-deactivate": "disactivar", "tags-hitcount": "$1 {{PLURAL:$1|modification|modificationes}}", "tags-manage-no-permission": "Tu non ha le permission de gerer le etiquettas de modification.", - "tags-manage-blocked": "Tu non pote gerer etiquettas de cambiamento durante que tu es blocate.", + "tags-manage-blocked": "Tu non pote gerer etiquettas de cambiamento durante que {{GENDER:$1|tu}} es blocate.", "tags-create-heading": "Crear un nove etiquetta", "tags-create-explanation": "Per configuration predefinite, le etiquettas novemente create essera disponibile pro le uso per usatores e robots.", "tags-create-tag-name": "Nomine del etiquetta:", @@ -3308,11 +3309,11 @@ "tags-deactivate-not-allowed": "Non es possibile disactivar le etiquetta \"$1\".", "tags-deactivate-submit": "Disactivar", "tags-apply-no-permission": "Tu non ha le permission de adjunger etiquettas de cambiamento a tu cambiamentos.", - "tags-apply-blocked": "Tu non pote applicar etiquettas de cambiamento con tu cambiamentos durante que tu es blocate.", + "tags-apply-blocked": "Tu non pote applicar etiquettas de cambiamento con tu cambiamentos durante que {{GENDER:$1|tu}} es blocate.", "tags-apply-not-allowed-one": "Non es permittite applicar le etiquetta \"$1\" manualmente.", "tags-apply-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente applicate: $1", "tags-update-no-permission": "Tu non ha le permission de adder o remover etiquettas de cambiamento sur individual versiones o entratas de registro.", - "tags-update-blocked": "Tu non pote adder o remover etiquettas de cambiamento durante que tu es blocate.", + "tags-update-blocked": "Tu non pote adder o remover etiquettas de cambiamento durante que {{GENDER:$1|tu}} es blocate.", "tags-update-add-not-allowed-one": "Non es permittite adjunger le etiquetta \"$1\" manualmente.", "tags-update-add-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente adjungite: $1", "tags-update-remove-not-allowed-one": "Non es permittite remover le etiquetta \"$1\".", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index f183d6e722..015e6bf76f 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -1969,6 +1969,7 @@ "activeusers-count": "$1 {{PLURAL:$1|azione|azioni}} {{PLURAL:$3|nell'ultimo giorno|negli ultimi $3 giorni}}", "activeusers-from": "Mostra gli utenti a partire da:", "activeusers-groups": "Visualizza gli utenti appartenenti ai gruppi:", + "activeusers-excludegroups": "Escludi gli utenti appartenenti ai gruppi:", "activeusers-noresult": "Nessun utente risponde ai criteri impostati.", "activeusers-submit": "Mostra utenti attivi", "listgrouprights": "Diritti del gruppo utente", @@ -3388,7 +3389,7 @@ "tags-deactivate": "disattiva", "tags-hitcount": "$1 {{PLURAL:$1|modifica|modifiche}}", "tags-manage-no-permission": "Non si dispone dei permessi necessari per gestire le etichette di modifica.", - "tags-manage-blocked": "Non puoi gestire le etichette alle modifiche mentre {{GENDER:$1|sei}} bloccato.", + "tags-manage-blocked": "Non puoi gestire le etichette alle modifiche mentre sei {{GENDER:$1|bloccato|bloccata}}.", "tags-create-heading": "Crea un nuovo tag", "tags-create-explanation": "Per impostazione predefinita, i tag appena creati saranno disponibili per l'utilizzo di utenti e bot.", "tags-create-tag-name": "Nome del tag:", @@ -3424,11 +3425,11 @@ "tags-deactivate-not-allowed": "Non è possibile disattivare il tag \"$1\".", "tags-deactivate-submit": "Disattiva", "tags-apply-no-permission": "Non disponi dell'autorizzazione per applicare la modifica di tag insieme con le tue modifiche.", - "tags-apply-blocked": "Non puoi applicare le etichette alle modifiche mentre {{GENDER:$1|sei}} bloccato.", + "tags-apply-blocked": "Non puoi applicare le etichette alle modifiche mentre sei {{GENDER:$1|bloccato|bloccata}}.", "tags-apply-not-allowed-one": "L'etichetta \"$1\" non può essere applicata manualmente.", "tags-apply-not-allowed-multi": "{{PLURAL:$2|La seguente etichetta non può essere applicata|Le seguenti etichette non possono essere applicate}} manualmente: $1", "tags-update-no-permission": "Non si dispone dei permessi necessari per aggiungere o rimuovere le etichette di modifica dalle singole versioni o voci di registro.", - "tags-update-blocked": "Non puoi aggiungere o rimuovere le etichette alle modifiche mentre {{GENDER:$1|sei}} bloccato.", + "tags-update-blocked": "Non puoi aggiungere o rimuovere le etichette alle modifiche mentre sei {{GENDER:$1|bloccato|bloccata}}.", "tags-update-add-not-allowed-one": "Il tag \"$1\" non può essere aggiunto manualmente.", "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Il seguente tag non può essere aggiunto|I seguenti tag non possono essere aggiunti}} manualmente: $1", "tags-update-remove-not-allowed-one": "Il tag \"$1\" non può essere rimosso.", diff --git a/languages/i18n/kk-latn.json b/languages/i18n/kk-latn.json index de12302d05..c25c9aeea2 100644 --- a/languages/i18n/kk-latn.json +++ b/languages/i18n/kk-latn.json @@ -5,7 +5,8 @@ "GaiJin", "Kaztrans", "아라", - "Macofe" + "Macofe", + "Zpizza" ] }, "tog-underline": "Siltemeniñ astın sız:", @@ -920,6 +921,7 @@ "listusersfrom": "Mına qatıswşıdan bastap körsetw:", "listusers-submit": "Körset", "listusers-noresult": "Qatıswşı tabılğan joq.", + "activeusers-excludegroups": "Toptarğa jatatın paydalanwşılardı qospaw:", "listgrouprights": "Qatıswşı tobı quqıqtarı", "listgrouprights-summary": "Kelesi tizimde bul wïkïde tağaýındalğan qatıswşı quqıqtarı (baýlanıstı qatınaw quqıqtarımen birge) körsetiledi.\nJeke quqıqtar twralı köbirek aqparattı [[{{MediaWiki:Listgrouprights-helppage}}|mında]] taba alasız.", "listgrouprights-group": "Top", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index 7a417cb56f..a54620b0be 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -2716,7 +2716,7 @@ "log-show-hide-patrol": "점검 기록을 $1", "log-show-hide-tag": "태그 기록을 $1", "confirm-markpatrolled-button": "확인", - "confirm-markpatrolled-top": "$2의 판을 $3으로 점검된 것으로 표시", + "confirm-markpatrolled-top": "$2의 $3 판을 점검한 것으로 표시하시겠습니까?", "deletedrevision": "예전 $1 판이 삭제되었습니다.", "filedeleteerror-short": "파일 삭제 오류: $1", "filedeleteerror-long": "파일을 삭제하는 도중 오류가 발생했습니다:\n\n$1", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index 5fcbfd1413..64d01f328a 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -1756,6 +1756,7 @@ "apisandbox-alert-field": "De wäert vun dësem Feld ass net valabel.", "apisandbox-continue": "Virufueren", "apisandbox-continue-clear": "Eidel maachen", + "apisandbox-param-limit": "Gitt max fir déi maximal Limite ze benotzen.", "booksources": "Bicherreferenzen", "booksources-search-legend": "No Bicherreferenze sichen", "booksources-search": "Sichen", @@ -1818,6 +1819,7 @@ "activeusers-count": "$1 {{PLURAL:$1|Aktioun|Aktiounen}} {{PLURAL:$3|gëschter|an de leschten $3 Deeg}}", "activeusers-from": "Benotzer weisen, ugefaange bei:", "activeusers-groups": "Benotzer weisen déi zu de Gruppe gehéieren:", + "activeusers-excludegroups": "Benotzer ausschléissen déi zu de Gruppe gehéieren:", "activeusers-noresult": "Keng Benotzer fonnt.", "activeusers-submit": "Aktiv Benotzer weisen", "listgrouprights": "Rechter vun de Benotzergruppen", diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json index d781df8f2b..b0477e0440 100644 --- a/languages/i18n/lij.json +++ b/languages/i18n/lij.json @@ -307,7 +307,7 @@ "nstab-category": "Categorîa", "mainpage-nstab": "Paggina prinçipâ", "nosuchaction": "No se poeu", - "nosuchactiontext": "L'açion specificâ inta URL a no l'è vallida.\nO che t'hæ scrito mâ, o che donque l'ea sbaliou o colegamento.\nO magara gh'è 'na cammoa into software doeuviou da {{SITENAME}}.", + "nosuchactiontext": "L'açion specificâ inta URL a no l'è vallida.\nÒ che t'hæ scrito mâ, ò che donque l'ea sbaliou l'ingancio.\nÒ magara gh'è 'na cammoa into software dœuviou da {{SITENAME}}.", "nosuchspecialpage": "Sta paggina speciale a no gh'è", "nospecialpagetext": "A paggina speciale domandâ a no l'è stæta riconosciua.\n\nA lista de paggine speciale vallide a se treuva in [[Special:SpecialPages|Lista de paggine speciale]].", "error": "Errô", @@ -403,7 +403,7 @@ "yourpasswordagain": "Riscrivi a pòula segrétta:", "createacct-yourpasswordagain": "Conferma a password", "createacct-yourpasswordagain-ph": "Conferma a password un'atra votta", - "userlogin-remembermypassword": "Mantegnime collegou", + "userlogin-remembermypassword": "Mantegnime conligou", "userlogin-signwithsecure": "Adoeuvia una conescion segua", "cannotlogin-title": "Imposcibbile intrâ", "cannotlogin-text": "L'accesso o no l'è poscibbile.", @@ -682,7 +682,7 @@ "previewnote": "'''Questa chì a l'è solo 'n'anteprimma; i cangiamenti no son ancon stæti sarvæ!'''", "continue-editing": "Vanni a l'area de modiffica", "previewconflict": "L'anteprimma a mostra o scrito presente inta casella de modiffica de d'ato coscì comme o l'apaiâ se ti çerni de sarvalo òua.", - "session_fail_preview": "Spiaxenti. No è stæto poscibile elaboâ a modifica perché son andæti persci i dæti relativi a-a sescion.\n\nFoscia t'ê stæto disconnesso. Verifica d'ese ancon collegou e riproeuva.\nSe o problema o persciste, ti poeu provâ a [[Special:UserLogout|scollegate]] e effettuâ un nuoeuvo accesso, controllando che o to browser o l'açette i cookie da questo scito.", + "session_fail_preview": "Spiaxenti. No l'è stæto poscibile elaboâ a modiffica pe via da pèrdia di dæti relativi a-a sescion.\n\nFoscia t'ê stæto disconesso. Veifica d'ese ancon conligou e prœuva torna.\nSe o problema o persciste, ti pœu provâ a [[Special:UserLogout|scollegate]] e effetoâ un nœuvo accesso, controlando che o to navegatô o l'açette i cookie da questo scito.", "session_fail_preview_html": "Spiaxenti. No è stæto poscibbile elaboâ a modifica perché son anæti persci i dæti relativi a-a sescion.\n\nScicomme {{SITENAME}} o g'ha de l'HTML sgroeuzzo attivou e gh'è stæto una perdia di dæti da sescion, l'anteprimma a l'è ascosa comme precaoçion contra i attacchi JavaScript.\n\nSe se tratta de un normale tentativo d'anteprimma, riproeuva. \nSe o problema o persciste, ti poeu provâ a [[Special:UserLogout|scollegati]] e effettuâ un noeuvo accesso, controllando che o to browser o l'açette i cookie da questo scito.", "token_suffix_mismatch": "'''A modiffica a no l'è stæta sarvâ perché o to client o l'ha mostrou de gestî in moddo errou i carattei de puntezatua into token associou a-a mæxima. Pe evitâ una poscibile corruçion do testo da pagina, l'è stæto refuou l'intrega modiffica. Questa scituaçion a poeu veificase, de votte, quande s'adoeuvia di serviççi de proxy anonnimi via web che presentan di bug.'''", "edit_form_incomplete": "'''De parte do formulaio de modiffica n'han razonto o server; controlla che e modiffiche seggian intatte e ripreuva.'''", @@ -1194,7 +1194,7 @@ "grant-generic": "Pacchetto diritti \"$1\"", "grant-group-page-interaction": "Interagisce co-e paggine", "grant-group-file-interaction": "Interagisce co-i file murtimediali", - "grant-group-watchlist-interaction": "Interagisce con i to oservæ speçiali", + "grant-group-watchlist-interaction": "A l'interagisce co-i to oservæ speciali", "grant-group-email": "Invia email", "grant-group-high-volume": "Esegue açioin mascive", "grant-group-customization": "Personalizzaçion e preferençe", @@ -1334,9 +1334,9 @@ "recentchangeslinked-feed": "Cangiamenti correlæ", "recentchangeslinked-toolbox": "Cangiaménti corelæ", "recentchangeslinked-title": "Modiffiche correlæ a \"$1\"", - "recentchangeslinked-summary": "Sta pàgina a fa védde i cangiaménti ciù reçenti a-e pàgine colegæ a questa.\nE pàgine che t'æ in oservaçion inti [[Special:Watchlist|oservæ speciâli]] son in '''grascetto'''.", + "recentchangeslinked-summary": "Sta paggina a fa védde i cangiaménti ciù reçenti a-e pàggine conligæ a questa.\nE pàggine che t'hæ in oservaçion inti [[Special:Watchlist|oservæ speciâli]] son in '''grascetto'''.", "recentchangeslinked-page": "Nómme da pàgina:", - "recentchangeslinked-to": "Fanni védde sôlo i cangiaménti a-e pàgine colegæ a-a pàgina specificâ", + "recentchangeslinked-to": "Fanni védde sôlo i cangiaménti a-e pàggine conligæ a-a pàggina specificâ", "recentchanges-page-added-to-category": "[[:$1]] azonto a-a categoria", "recentchanges-page-added-to-category-bundled": "[[:$1]] azonta a-a categoria, [[Special:WhatLinksHere/$1|questa pagina a l'è inclusa a l'interno di atre pagine]]", "recentchanges-page-removed-from-category": "[[:$1]] rimosso da-a categoria", @@ -1415,7 +1415,7 @@ "uploaded-script-svg": "Trovou elemento de script \"$1\" into file caregou in formato SVG.", "uploaded-hostile-svg": "Trovou CSS no seguo inte l'elemento de stile do file in formato SVG caregou.", "uploaded-event-handler-on-svg": "Impostâ i attributi de gestion di eventi $1=\"$2\" no l'è consentio inti file SGV", - "uploaded-href-attribute-svg": "i attributi href inti file SVG poeuan collegâse solo verso e destinaçioin http:// o https://, trovou <$1 $2=\"$3\">.", + "uploaded-href-attribute-svg": "i attributi href inti file SVG pœuan ese inganciæ solo ch'a-e destinaçioin http:// o https://, trovou <$1 $2=\"$3\">.", "uploaded-href-unsafe-target-svg": "Trovou href a dæti non segui: destinaçion URI <$1 $2=\"$3\"> caregou into file SVG", "uploaded-animate-svg": "Trovou o tag \"animate\" ch'o poriæ cangiâ href, doeuviando l'attributo \"from\" <$1 $2=\"$3\"> into file SVG caregou.", "uploaded-setting-event-handler-svg": "A configuaçion di attributi pe-o gestô di eventi a l'è bloccâ, trovou <$1 $2=\"$3\"> into file SVG caregou.", @@ -1587,7 +1587,7 @@ "imagelinks": "Ûzo do file", "linkstoimage": "{{PLURAL:$1|A segoente pàgina a contegne|E segoenti $1 pàgine contegnan}} colegaménti a-o file:", "linkstoimage-more": "Ciù de $1 {{PLURAL:$1|pagina aponta|pagine apontan}} a questo file.\nA seguente lista a mostra {{PLURAL:$1|a primma paggina ch'a l'aponta|e primme $1 paggine ch'apontan}} a sto file.\nL'è disponibile un [[Special:WhatLinksHere/$2|elenco completo]].", - "nolinkstoimage": "No gh'è nisciûnn-a pàgina collegâ con 'sto file.", + "nolinkstoimage": "No gh'è nisciun-a paggina inganciâ a sto file.", "morelinkstoimage": "Vixualizza [[Special:WhatLinksHere/$1|di atri inganci]] a questo file.", "linkstoimage-redirect": "$1 (rendriççamento file) $2", "duplicatesoffile": "{{PLURAL:$1|O seguente file o l'è un dupricou|I seguenti $1 file son di dupricæ}} de questo file ([[Special:FileDuplicateSearch/$2|urteioî detaggi]]):", @@ -1632,7 +1632,7 @@ "mimetype": "Tipo MIME:", "download": "scarrega", "unwatchedpages": "Paggine non öservæ", - "listredirects": "Lista de rindirissamenti", + "listredirects": "Lista di rendriççi", "listduplicatedfiles": "Lista di file doggi", "listduplicatedfiles-summary": "Questo o l'è un elenco di file, donde a verscion ciù reçente de 'n file a l'è un dupricou da verscion ciù reçente de 'n atro file. Se piggia in conscideraçion solo che i file locali.", "listduplicatedfiles-entry": "[[:File:$1|$1]] o g'ha [[$3|{{PLURAL:$2|un duplicou|$2 duplicæ}}]].", @@ -1670,13 +1670,13 @@ "pageswithprop-submit": "Vanni", "pageswithprop-prophidden-long": "valô testoale longo da propietæ ascoso ($1)", "pageswithprop-prophidden-binary": "valô binaio da propietæ ascoso ($1)", - "doubleredirects": "Rindirissamenti doggi", + "doubleredirects": "Rendriççi doggi", "doubleredirectstext": "In questa pagina gh'è elencou e paggine che rendiriççan a di atre paggine de redirect.\nOgni riga a conten i collegamenti a-o primmo e a-o segondo redirect, oltre a-a primma riga de testo do segondo redirect che a l'uso o conten a paggina de destinaçion \"corretta\" a-a quæ doviæ puntâ o primmo redirect ascì.\nI redirect scassæ son stæti corretti.", "double-redirect-fixed-move": "[[$1]] o l'è stæto mesciou.\nO l'è stato aggiornou aotomaticamente e oua o l'è un redirect a [[$2]].", "double-redirect-fixed-maintenance": "Corretto aotomaticamente o redirect doggio da [[$1]] a [[$2]] into travaggio de manutençion.", "double-redirect-fixer": "Correttô di redirect", "brokenredirects": "Rindirissamenti sballiæ", - "brokenredirectstext": "I rendriççi chì de sotta colegan a de paggine inexistente:", + "brokenredirectstext": "I rendriççi chì de sotta apontan a de paggine inexistente:", "brokenredirects-edit": "cangia", "brokenredirects-delete": "scassa", "withoutinterwiki": "Paggine sensa interwiki", @@ -1695,7 +1695,7 @@ "ntransclusions": "Doeuviou inte $1 {{PLURAL:$1|paggina|paggine}}", "specialpage-empty": "Questa paggina speciale a l'è attualmente voeua.", "lonelypages": "Paggine orfane", - "lonelypagestext": "E seguente paggine no son incluse ni colegæ a di atre paggine de {{SITENAME}}.", + "lonelypagestext": "E seguente paggine no son incluse ni conligæ a di atre paggine de {{SITENAME}}.", "uncategorizedpages": "Paggine sensa categorîa", "uncategorizedcategories": "Categorîe sensa categorîa", "uncategorizedimages": "Immaggini sensa categorîa", @@ -1704,7 +1704,7 @@ "unusedimages": "File inutilizæ", "wantedcategories": "Categorîe domandæ", "wantedpages": "Paggine domandæ", - "wantedpages-summary": "Lista de paggine inexistente co-o ciu gran nummero de collegamenti a lô, escludendo e pagine ch'han solo che i rendiriççi che-e collegan. Pe 'n elenco de pagine inexistente che g'han di rendriççi che-e collegan, amia [[{{#special:BrokenRedirects}}|a lista di rendriççi erræ]].", + "wantedpages-summary": "Lista de paggine inexistente co-o ciu gran nummero d'inganci a lô, escludendo e pagine inganciæ solo che da di rendriççi. Pe 'na lista de pagine inexistente inganciæ da di rendriççi, amia [[{{#special:BrokenRedirects}}|a lista di rendriççi erræ]].", "wantedpages-badtitle": "Tittolo invallido into groppo di risultæ: $1", "wantedfiles": "File domandæ", "wantedfiletext-cat": "I seguenti file son in doeuvia, ma no existan. I file ospitæ inte di repository esterni porieivan esighe elencæ sciben che existan. Questi fasci poxitivi saian barræ. E pagine che incòrpoan i file che no existan son elencæ in [[:$1]].", @@ -1758,7 +1758,7 @@ "ancientpages": "Paggine ciû vëgie", "move": "Mescia", "movethispage": "Mescia 'sta paggina", - "unusedimagestext": "I seguenti file existan ma no son doeuviæ inte nisciun-a paggina.\nNotta che di atri sciti web porieivan ese colegæ a 'n file co-in URL diretto, e coscì o poriæ ese inte sta lista sciuben ch'o segge in doeuvia.", + "unusedimagestext": "I seguenti file existan ma no son doeuviæ inte nisciun-a paggina.\nNotta che di atri sciti web porieivan ese conligæ a 'n file co-in URL diretto, e coscì o poriæ ese inte sta lista sciuben ch'o segge in doeuvia.", "unusedcategoriestext": "E seguente paggine de categoria existan, sciben che nisciun'atra paggina o categoria a-e doeuvie.", "notargettitle": "Dæti mancanti", "notargettext": "No t'hæ indicou una pagina o un utente con chi eseguî sta fonçion.", @@ -2186,7 +2186,7 @@ "nolinkshere-ns": "Pagine ch'apontan a '''[[:$1]]''' into namespace seleçionou no ghe n'è.", "isredirect": "Paggina de rindirissamento", "istemplate": "Incluxon", - "isimage": "Colegamento a file", + "isimage": "Ingancio a-o file", "whatlinkshere-prev": "{{PLURAL:$1|precedente|precedenti $1}}", "whatlinkshere-next": "{{PLURAL:$1|sûccescivo|sûccescivi $1}}", "whatlinkshere-links": "← colegaménti", @@ -2390,7 +2390,7 @@ "export-addns": "Azonzi", "export-download": "Sarva comme file", "export-templates": "Inciodi i template", - "export-pagelinks": "Includdi paggine colegæ scin a 'na profonditæ de:", + "export-pagelinks": "Includdi paggine conligæ scin a 'na profonditæ de:", "export-manual": "Azonzi paggine manoalmente:", "allmessages": "Messaggi do scistema", "allmessagesname": "Nomme", @@ -2455,7 +2455,7 @@ "import-nonewrevisions": "Nisciun-a verscion importâ (ean zà tutte presente, ò satæ pe via di erroî)", "xml-error-string": "$1 a-a riga $2, colonna $3 (byte $4): $5", "import-upload": "Carrega dæti XML", - "import-token-mismatch": "I dæti relativi a-a sescion son anæti persci. Riproeuva.\nFoscia t'ê stæto disconnesso. Verifica d'ese ancon collegou e riproeuva.\nSe o problema o persciste, ti poeu provâ a [[Special:UserLogout|scollegate]] e effettuâ un nuoeuvo accesso, controllando che o to browser o l'açette i cookie da questo scito.", + "import-token-mismatch": "I dæti relativi a-a sescion son anæti persci. Riprœuva.\nFoscia t'ê stæto disconnesso. Verifica d'ese ancon conligou e riprœuva.\nSe o problema o persciste, ti pœu provâ a [[Special:UserLogout|sconligâte]] e effettuâ un nœuvo accesso, controlando che o to navegatô o l'açette i cookie da questo scito.", "import-invalid-interwiki": "Imposcibbile importâ da-o progetto wiki indicou.", "import-error-edit": "A paggina \"$1\" a no l'è stæta importâ perché no t'ê aotorizzou a modificâla.", "import-error-create": "A paggina \"$1\" a no l'è stæta importâ perché no t'ê aotorizzou a creâla.", @@ -2508,8 +2508,8 @@ "tooltip-n-recentchanges": "I ùrtimi cangiaménti into scîto", "tooltip-n-randompage": "Fanni vedde 'na pagina a brettio.", "tooltip-n-help": "Pagine d'agiùtto", - "tooltip-t-whatlinkshere": "Lista de tùtte e pagine che son colegæ a sta chì.", - "tooltip-t-recentchangeslinked": "Ùrtimi càngi de pàgine colegæ a quésta", + "tooltip-t-whatlinkshere": "Lista de tùtte e paggine ch'en conligæ a sta chì.", + "tooltip-t-recentchangeslinked": "Ùrtimi càngi de pàggine conligæ a questa", "tooltip-feed-rss": "Feed RSS pe questa paggina", "tooltip-feed-atom": "Feed Atom pe sta pàgina", "tooltip-t-contributions": "Lista de contribûssioin de {{GENDER:$1|questo|questa}} utente", @@ -2732,7 +2732,7 @@ "exif-pixelxdimension": "Largheçça immaggine", "exif-pixelydimension": "Ateçça immaggine", "exif-usercomment": "Notte de l'utente", - "exif-relatedsoundfile": "File audio collegou", + "exif-relatedsoundfile": "File audio conligou", "exif-datetimeoriginal": "Dæta e oa de creassion di dæti", "exif-datetimedigitized": "Dæta e oa de digitalizzaçion", "exif-subsectime": "Dæta e oa, fraçioin de segondo", @@ -2858,7 +2858,7 @@ "exif-originaldocumentid": "ID univvoco do documento origin*a", "exif-licenseurl": "URL pe-a liçença do copyright", "exif-morepermissionsurl": "Informaçioin insce e liçençe alternative", - "exif-attributionurl": "Se quest'oeuvia ti l'adoeuvi torna, pe piaxei coleghite a", + "exif-attributionurl": "Se quest'œuvia ti l'adœuvi torna, pe piaxei metti 'n ingancio a", "exif-preferredattributionname": "Se quest'oeuvia ti l'adoeuvi torna, pe piaxei attribuiscine a paternitæ a", "exif-pngfilecomment": "Commento do file JPEG", "exif-disclaimer": "Avertençe", @@ -3051,8 +3051,8 @@ "confirmemail_loggedin": "L'adreçço e-mail o l'è stæto confermou.", "confirmemail_subject": "{{SITENAME}}: recesta de conferma de l'adreççoo", "confirmemail_body": "Quarcun, foscia ti mæximo da l'adreçço IP $1, o l'ha registrou l'utença \"$2\" insce {{SITENAME}} indicando questo adreçço e-mail.\n\nPe confermâ che l'utença a t'apparten da vei e attivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi o collegamento seguente co-o to navegatô:\n\n$3\n\nSe *no* t'ê stæto ti a registrâ l'utença, segui sto colegamento pe annulâ a conferma de l'adreçço e-mail:\n\n$5\n\nQuesto coddiçe de conferma o descaziâ aotomaticamente a $4.", - "confirmemail_body_changed": "Quarcun, foscia ti mæximo da l'adreçço IP $1, o l'ha modificou l'adreçço e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adreçço e-mail.\n\nPe confermâ che l'utença a t'apparten da vei e riattivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi o collegamento seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui sto colegamento pe annulâ a conferma de l'adreçço e-mail:", - "confirmemail_body_set": "Quarcun, foscia ti mæximo da l'adreçço IP $1, o l'ha impostcou l'adreçço e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adreçço e-mail.\n\nPe confermâ che l'utença a t'apparten da vei e attivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi o collegamento seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui sto colegamento pe annulâ a conferma de l'adreçço e-mail:", + "confirmemail_body_changed": "Quarcun, foscia ti mæximo da l'adresso IP $1, o l'ha modificou l'adresso e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adresso e-mail.\n\nPe confermâ che l'utença a t'apparten davei e riattivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi l'ingancio seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui st'ingancio pe annulâ a conferma de l'adresso e-mail:", + "confirmemail_body_set": "Quarcun, foscia ti mæximo da l'adresso IP $1, o l'ha impostou l'adresso e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adresso e-mail.\n\nPe confermâ che l'utença a t'aparten davei e attivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi l'ingancio seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui st'ingancio pe annulâ a conferma de l'adresso e-mail:", "confirmemail_invalidated": "Recesta de conferma adreçço e-mail annulâ", "invalidateemail": "Annulla a recesta de conferma e-mail", "notificationemail_subject_changed": "L'adreçço de posta elettronica registrou insce {{SITENAME}} o l'è stæto modificou", @@ -3582,7 +3582,7 @@ "json-error-recursion": "Un o ciù rifeimenti ricorscivi into valô da codificâ", "json-error-inf-or-nan": "Un ò ciu valoî NAN o INF into valô da codificâ", "json-error-unsupported-type": "L'è stæto fornio un valô de un tipo ch'o no poeu ese codificou", - "headline-anchor-title": "Colegamento a questa seçion", + "headline-anchor-title": "Ingancio a questa seçion", "special-characters-group-latin": "Latin", "special-characters-group-latinextended": "Latin esteiso", "special-characters-group-ipa": "IPA", @@ -3666,15 +3666,15 @@ "authmanager-authn-not-in-progress": "L'aotenticaçion a no l'è in corso ò i dæti da sescion son anæti persci. Se prega de recomençâ da cavo.", "authmanager-authn-no-primary": "E credençiæ fornie no poeuan ese aotenticæ.", "authmanager-authn-no-local-user": "E credençiæ fornie no son associæ a nisciun utente de questo wiki.", - "authmanager-authn-no-local-user-link": "E credençiæ fornie son vallide ma no son associæ a nisciun utente de questa wiki. Accedi inte 'n atro moddo ò crea un noeuvo utente, e ti gh'aviæ 'n'opçion pe collegâ e to credençiæ precedente a quell'utença.", + "authmanager-authn-no-local-user-link": "E credençiæ fornie son vallide ma no son associæ a nisciun utente de questa wiki. Accedi inte 'n atro moddo ò crea un nœuvo utente, e ti gh'aviæ 'n'opçion pe conligâ e to credençiæ precedente a quell'utença.", "authmanager-authn-autocreate-failed": "Creaçion aotomattica de 'n'utença locale fallia: $1", "authmanager-change-not-supported": "E credençiæ fornie no poeuan ese modificæ, dæto che no saieivan doeuviæ da ninte.", "authmanager-create-disabled": "A creaçion di utençe a l'è disabilitâ.", "authmanager-create-from-login": "Pe creâ a to utença, completa i campi chì de sotta.", "authmanager-create-not-in-progress": "A creaçion de un'utença a no l'è in corso ò i dæti da sescion son anæti perdui. Se prega de recomençâ da cavo.", "authmanager-create-no-primary": "E credençiæ fornie no poeuan ese doeuviæ pe-a creaçion de l'utença.", - "authmanager-link-no-primary": "E credençiæ fornie no poeuan ese doeuviæ pe-o colegamento de l'utença.", - "authmanager-link-not-in-progress": "O colegamento de l'utença o no procede ò i dæti da sescion so-anæti perdui. Se prega de recomençâ da cavo.", + "authmanager-link-no-primary": "E credençiæ fornie no pœuan ese dœuviæ pe conligâ l'utença.", + "authmanager-link-not-in-progress": "O conligamento de l'utença o no procede ò i dæti da sescion so-anæti perdui. Se prega de recomençâ da cavo.", "authmanager-authplugin-setpass-failed-title": "Modiffica da password fallia", "authmanager-authplugin-setpass-failed-message": "O plugin d'aotenticaçion o l'ha impedio a modiffica da password.", "authmanager-authplugin-create-fail": "O plugin d'aotenticaçion o l'ha impedio a creaçion de l'utença.", @@ -3697,13 +3697,13 @@ "authmanager-provider-temporarypassword": "Password temporannia", "authprovider-confirmlink-message": "Basandose insce di reçenti tentativi d'accesso, e seguente utençe poeuan ese collegæ a-o to account wiki. Collegandole ti poeu effettuâ l'accesso con quelle ascì. Se prega de seleçionâ quelle che devan ese collegæ.", "authprovider-confirmlink-request-label": "Utençe che dovieivan ese collegæ", - "authprovider-confirmlink-success-line": "$1: collegou correttamente.", + "authprovider-confirmlink-success-line": "$1: inganciou correttamente.", "authprovider-confirmlink-failed": "O collegamento de l'utença o no l'è pin-amente ariescio: $1", "authprovider-confirmlink-ok-help": "Continnoa doppo a visualizzaçion di messaggi de errô de collegamento.", "authprovider-resetpass-skip-label": "Sata", "authprovider-resetpass-skip-help": "Sata a rempostaçion da password.", - "authform-nosession-login": "L'aotenticaçion a l'ha avuo successo, ma o to navegatô o no l'è in graddo de \"aregordâ\" che t'ê collegou.\n\n$1", - "authform-nosession-signup": "L'utença a l'è stæta creâ, ma o to navegatô o no l'è in graddo de \"aregordâ\" che t'ê collegou.\n$1", + "authform-nosession-login": "L'aotenticaçion a l'ha avuo successo, ma o to navegatô o no l'è in graddo de \"aregordâ\" che t'ê conligou.\n\n$1", + "authform-nosession-signup": "L'utença a l'è stæta creâ, ma o to navegatô o no l'è in graddo d'\"aregordâ\" che t'ê conligou.\n$1", "authform-newtoken": "Token mancante. $1", "authform-notoken": "Token mancante", "authform-wrongtoken": "Token errou", @@ -3730,7 +3730,7 @@ "cannotlink-no-provider-title": "Utençe collegabbile no ghe n'è", "cannotlink-no-provider": "Utençe colegabbile no ghe n'è.", "linkaccounts": "Collega utençe", - "linkaccounts-success-text": "L'utença a l'è stæta colegâ.", + "linkaccounts-success-text": "L'utença a l'è stæta inganciâ.", "linkaccounts-submit": "Collega utençe", "unlinkaccounts": "Scollega utençe", "unlinkaccounts-success": "L'utença a l'è stæta scollegâ.", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index b28c0d17a1..9d7e70c073 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -1895,6 +1895,7 @@ "activeusers-count": "$1 {{PLURAL:$1|дејство|дејства}} {{PLURAL:$3|денес|во последните $3 дена}}", "activeusers-from": "Прикажи корисници почнувајќи од:", "activeusers-groups": "Прикажи ги корисниците кои членуваат во групите:", + "activeusers-excludegroups": "Изземи ги корисниците што членуваат во групите:", "activeusers-noresult": "Не пронајдов ниеден корисник.", "activeusers-submit": "Прикажи активни корисници", "listgrouprights": "Права на кориснички групи", @@ -3442,7 +3443,7 @@ "tags-deactivate": "деактивирај", "tags-hitcount": "$1 {{PLURAL:$1|промена|промени}}", "tags-manage-no-permission": "Немате дозвола за раководење со ознаки за промени.", - "tags-manage-blocked": "Не можете да раководите со ознаки за промени додека сте блокирани.", + "tags-manage-blocked": "Не можете да раководите со ознаки за промени додека {{GENDER:$1|сте}} блокирани.", "tags-create-heading": "Создај нова ознака", "tags-create-explanation": "Новосоздадните ознаки по основно ќе се стават на располагање за употреба од корисници и ботови.", "tags-create-tag-name": "Име на ознаката:", @@ -3478,11 +3479,11 @@ "tags-deactivate-not-allowed": "Не можам да ја деактивирам ознаката „$1“.", "tags-deactivate-submit": "Декативирај", "tags-apply-no-permission": "Немате дозвола да ставате ознаки за промени заедно со измените што ги правите.", - "tags-apply-blocked": "Не можете да задавате ознаки за промени додека сте блокирани.", + "tags-apply-blocked": "Не можете да задавате ознаки за промени додека {{GENDER:$1|сте}} блокирани.", "tags-apply-not-allowed-one": "Не е дозволено ознаката „$1“ да се става рачно.", "tags-apply-not-allowed-multi": "Не е дозволено {{PLURAL:$2|следнава ознака да се става рачно|следниве ознаки да се ставаат рачно}}: $1", "tags-update-no-permission": "Немате дозвола да додавате или отстранувате ознаки за промена од поединечни преработки или дневнички записи.", - "tags-update-blocked": "Не можете да додавате и отстранувате ознаки за промени додека сте блокирани.", + "tags-update-blocked": "Не можете да додавате и отстранувате ознаки за промени додека {{GENDER:$1|сте}} блокирани.", "tags-update-add-not-allowed-one": "Не е дозволено ознаката „$1“ да се додава рачно.", "tags-update-add-not-allowed-multi": "Не е дозволено {{PLURAL:$2|следнава ознака да се додава рачно|следниве ознаки да се додаваат рачно}}: $1", "tags-update-remove-not-allowed-one": "Не е дозволено да се отстранува ознаката „$1“.", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index a9e9ed6cfb..3a0fce6ce1 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -2139,9 +2139,9 @@ "modifiedarticleprotection": "heeft het beveiligingsniveau gewijzigd voor \"[[$1]]\"", "unprotectedarticle": "heeft de beveiliging van \"[[$1]]\" opgeheven", "movedarticleprotection": "heeft beveiligingsinstellingen verplaatst van \"[[$2]]\" naar \"[[$1]]\"", - "protectedarticle-comment": "{{GENDER:$2|Beschermd}} \"[[$1]]\"", - "modifiedarticleprotection-comment": "{{GENDER:$2|Beschermingsniveau gewijzigd}} voor \"[[$1]]\"", - "unprotectedarticle-comment": "{{GENDER:$2|Bescherming verwijderd}} van \"[[$1]]\"", + "protectedarticle-comment": "{{GENDER:$2|Beveiligde}} \"[[$1]]\"", + "modifiedarticleprotection-comment": "{{GENDER:$2|Heeft het beveiligingsniveau voor \"[[$1]]\" gewijzigd}}", + "unprotectedarticle-comment": "{{GENDER:$2|Heeft de beveiliging van \"[[$1]]\" opgeheven}}", "protect-title": "Beveiligingsniveau instellen voor \"$1\"", "protect-title-notallowed": "Beveiligingsniveau voor \"$1\" bekijken", "prot_1movedto2": "[[$1]] is hernoemd naar [[$2]]", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index e1b6c9b67f..cfdb51084f 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -784,8 +784,6 @@ "passwordreset-emaildisabled": "Used as error message in changing password when site's email feature is disabled.", "passwordreset-username": "{{Identical|Username}}", "passwordreset-domain": "A domain like used in Domain Name System (DNS) or more specifically like a domain component in the Lightweight Directory Access Protocol (LDAP).\n{{Identical|Domain}}", - "passwordreset-capture": "Label for checkbox asking the user whether they want to see the contents of the password reset email (only shown if they have the passwordreset permission).", - "passwordreset-capture-help": "Longer explanatory message for the capture checkbox label.", "passwordreset-email": "{{Identical|E-mail address}}", "passwordreset-emailtitle": "Used as subject (title) of email.", "passwordreset-emailtext-ip": "Be consistent with {{msg-mw|Passwordreset-emailtext-user}}.\n\nParameters:\n* $1 - an IP address\n* $2 - message {{msg-mw|Passwordreset-emailelement}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days", @@ -793,8 +791,6 @@ "passwordreset-emailelement": "This is a body of a password reset email to allow them into the system with a new password. Parameters:\n* $1 - the user's login name. This parameter can be used for GENDER.\n* $2 - the temporary password given by the system", "passwordreset-emailsentemail": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}", "passwordreset-emailsentusername": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}", - "passwordreset-emailsent-capture2": "Used in [[Special:PasswordReset]].\n\nParameters:\n* $1 - number of accounts notified\n\nSee also:\n* {{msg-mw|Passwordreset-emailsentemail}}\n* {{msg-mw|Passwordreset-emailsentusername}}\n* {{msg-mw|Passwordreset-emailerror-capture}}", - "passwordreset-emailerror-capture2": "Error message displayed in [[Special:PasswordReset]] when sending an email fails. Parameters:\n* $1 - error message\n* $2 - username, used for GENDER\n* $3 - number of accounts notified\n\nSee also:\n* {{msg-mw|Passwordreset-emailsentemail}}\n* {{msg-mw|Passwordreset-emailsentusername}}\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}", "passwordreset-nocaller": "Shown when a password reset was requested but the process failed due to an internal error related to missing details about the origin (caller) of the password reset request.", "passwordreset-nosuchcaller": "Shown when a password reset was requested but the username of the caller could not be resolved to a user. This is an internal error.\n\nParameters:\n* $1 - username of the caller", "passwordreset-ignored": "Shown when password reset was unsuccessful due to configuration problems.", @@ -1432,7 +1428,6 @@ "right-siteadmin": "{{doc-right|siteadmin}}", "right-override-export-depth": "{{doc-right|override-export-depth}}", "right-sendemail": "{{doc-right|sendemail}}", - "right-passwordreset": "{{doc-right|passwordreset}}", "right-managechangetags": "{{doc-right|managechangetags}}", "right-applychangetags": "{{doc-right|applychangetags}}", "right-changetags": "{{doc-right|changetags}}", @@ -4248,7 +4243,7 @@ "mediastatistics-header-audio": "Header on [[Special:MediaStatistics]] for file types that are in the audio category\n{{Identical|Audio}}", "mediastatistics-header-video": "Header on [[Special:MediaStatistics]] for file types that are in the video category\n{{Identical|Video}}", "mediastatistics-header-multimedia": "Header on [[Special:MediaStatistics]] for file types that are in the multimedia category. This does not include plain audio or video files, but more complex multimedia such as flash or vrml. This especially includes scripted multimedia. Ogg files in which MediaWiki cannot determine if it is an audio or video file (or something else) are included here.", - "mediastatistics-header-office": "Header on [[Special:MediaStatistics]] for file types that are in the Office category. This includes PDFs, OpenDocument files, Microsoft Word files, etc.", + "mediastatistics-header-office": "Header on [[Special:MediaStatistics]] for file types that are in the Office category. This includes PDFs, OpenDocument files, Microsoft Word files, etc.\n{{Identical|Office}}", "mediastatistics-header-text": "Header on [[Special:MediaStatistics]] for file types that are in the text category. This includes simple text formats, including plain text formats, json, csv, and xml. Source code of compiled programming languages may be included here in the future, but isn't currently.", "mediastatistics-header-executable": "Header on [[Special:MediaStatistics]] for file types that are in the executable category. This includes things like source files for interpreted programming language (Shell scripts, javascript, etc).", "mediastatistics-header-archive": "Header on [[Special:MediaStatistics]] for file types that are in the archive category. Includes things like tar, zip, gzip etc.", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index b0b6f34690..b2853db1dc 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -1964,7 +1964,8 @@ "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней|1=последний день}}.", "activeusers-count": "$1 {{PLURAL:$1|правка|правки|правок}} за {{PLURAL:$3|$3 последний день|последние $3 дня|последние $3 дней|1=последний день}}", "activeusers-from": "Показать участников, начиная с:", - "activeusers-groups": "Отображать пользователей, принадлежащих к группам:", + "activeusers-groups": "Отображать участников, принадлежащих к группам:", + "activeusers-excludegroups": "Исключать участников, принадлежащих к группам:", "activeusers-noresult": "Не найдено участников.", "activeusers-submit": "Показать активных участников", "listgrouprights": "Права групп участников", diff --git a/languages/i18n/sah.json b/languages/i18n/sah.json index 2f0fbc9b9c..07cad95d60 100644 --- a/languages/i18n/sah.json +++ b/languages/i18n/sah.json @@ -437,12 +437,14 @@ "userlogin-resetpassword-link": "Киирии тылгын санаттараҕын дуо?", "userlogin-helplink2": "Киирэргэ көмө", "userlogin-loggedin": "Маннык аатынан киирбиккин {{GENDER:$1|$1}}.\nАтын аатынан киирэргэ аллара көстөр форманы туһан.", + "userlogin-reauth": "Тиһиккэ хат киирэн {{GENDER:$1|$1}} буоларгын бигэргэтиэхтээххин.", "userlogin-createanother": "Атын аатынан бэлиэтэн", "createacct-emailrequired": "Email аадырыс", "createacct-emailoptional": "Email аадырыс (булгуччута суох)", "createacct-email-ph": "Эл аадырыскын суруй", "createacct-another-email-ph": "Эл. почтаҕын киллэр", "createaccountmail": "Быстах киирии тылы туһаныы уонна ону ыйыллыбыт аадырыска ыытыы", + "createaccountmail-help": "Атын киһиэхэ аһарыгын билбэккэ эрэ бэлиэ-ааты оҥорон биэрэргэ туттуллуон сөп.", "createacct-realname": "Дьиҥнээх аатыҥ (булгуччута суох)", "createaccountreason": "Төрүөтэ:", "createacct-reason": "Төрүөтэ", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index bf870cb4bd..0cb547d911 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -1879,6 +1879,7 @@ "activeusers-count": "$1 {{PLURAL:$1|dejanje|dejanji|dejanja|dejanj}} v {{PLURAL:$3|preteklem dnevu|preteklih $3 dneh}}", "activeusers-from": "Prikaži uporabnike začenši z:", "activeusers-groups": "Prikaži uporabnike, ki pripadajo skupinam:", + "activeusers-excludegroups": "Izključi uporabnike, ki pripadajo skupinam:", "activeusers-noresult": "Noben uporabnik ni bil najden.", "activeusers-submit": "Prikaži dejavne uporabnike", "listgrouprights": "Pravice uporabniških skupin", diff --git a/languages/i18n/udm.json b/languages/i18n/udm.json index fc367b9782..7af1a8f791 100644 --- a/languages/i18n/udm.json +++ b/languages/i18n/udm.json @@ -516,7 +516,7 @@ "listusers-submit": "Возьматыны", "listusers-blocked": "(заблокировать{{GENDER:$1||а}})", "listgrouprights": "Право группае пыриськисьёс", - "listgrouprights-summary": "Та группае пырисьёс возьматыны кулэ вики список улӥзы, право соответствующийгес солы возьматоно кариськиз. Оло, ас кожазы ватсаса ивортодэт улыны эрикрадэз сярысь.", + "listgrouprights-summary": "Та группае пырисьёс возьматыны кулэ вики список улӥзы, право соответствующийгес солы возьматоно кариськиз. Оло, ас [[{{MediaWiki:Listgrouprights-helppage}}|кожазы ватсаса ивортодэт]] улыны эрикрадэз сярысь.", "listgrouprights-members": "(список пыриськисьёс)", "emailuser": "Викиавторлы гожтэт", "emailmessage": "Ивортон:", @@ -560,10 +560,10 @@ "whatlinkshere-hidelinks": "$1 чӧлсконъёсты", "whatlinkshere-filters": "Фильтръёс", "block": "Блокировка пыриськисьёс", - "blockip": "Заблокировать пыриськисьёс", + "blockip": "Заблокировать {{GENDER:$1|пыриськисьёс}}", "ipbreason-dropdown": "* Блокировка мугез кабес\n** Полы информациез оскизы\n** Вордскем палэнэ бам\n** Спам-сайтъя педпал чӧлскон\n** Текстлэсь визьем ватсан/жуг-жаг\n** Кышкытлыклэсь, пыриськыны уйиськон\n** Злоупотребление кӧня ке книга учётной\n** Пыриськисьёслэн нимъёссы пыриськисьёс", "ipboptions": "2 час:2 hours,1 нуналлы:1 day,3 нуналлы:3 days,1 арняезлы:1 week,2 арняяз:2 weeks,1 толэзь:1 month,3 толэзь:3 months,6 толэзь:6 months,1 арлэн:1 year,бессрочно:infinite", - "unblocked": "$1 разблокировать", + "unblocked": "[[User:$1|$1]] разблокировать", "unblocked-id": "Блокировка $1 басьтоно луиз", "blocklist-target": "Ужпумъёс", "blocklist-reason": "Мугез", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index 33aa12a0cb..f16cfb1fe3 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -1784,7 +1784,7 @@ "nrevisions": "$1个版本", "nimagelinks": "用于$1个页面中", "ntransclusions": "用于$1个页面中", - "specialpage-empty": "此报告无结果。", + "specialpage-empty": "没有用于此报告的结果。", "lonelypages": "孤立页面", "lonelypagestext": "以下页面没有被{{SITENAME}}的其它页面链接或包含。", "uncategorizedpages": "未归类页面", @@ -1810,8 +1810,8 @@ "mostimages": "最多链接文件", "mostinterwikis": "有最多跨wiki的页面", "mostrevisions": "有最多版本的页面", - "prefixindex": "所有有前缀的页面", - "prefixindex-namespace": "所有有前缀的页面($1名字空间)", + "prefixindex": "所有带前缀的页面", + "prefixindex-namespace": "所有带前缀的页面($1名字空间)", "prefixindex-submit": "显示", "prefixindex-strip": "在列表中除去前缀", "shortpages": "短页面", @@ -1933,7 +1933,7 @@ "allarticles": "所有页面", "allinnamespace": "所有页面($1名字空间)", "allpagessubmit": "提交", - "allpagesprefix": "显示有该前缀的页面:", + "allpagesprefix": "显示带前缀的页面:", "allpagesbadtitle": "给定的页面标题是非法的,或者具有一个内部语言或内部 wiki 的前缀。它可能包含一个或更多的不能用于标题的字符。", "allpages-bad-ns": "在{{SITENAME}}中没有一个叫做\"$1\"的名字空间。", "allpages-hide-redirects": "隐藏重定向", @@ -1963,6 +1963,7 @@ "activeusers-count": "过去$3天有$1次操作", "activeusers-from": "显示用户开始于:", "activeusers-groups": "显示属于用户组的用户:", + "activeusers-excludegroups": "排除属于用户组的用户:", "activeusers-noresult": "找不到用户。", "activeusers-submit": "显示活跃用户", "listgrouprights": "用户组权限", @@ -3719,7 +3720,7 @@ "mediastatistics-header-audio": "音频", "mediastatistics-header-video": "视频", "mediastatistics-header-multimedia": "富媒体", - "mediastatistics-header-office": "办公文件", + "mediastatistics-header-office": "文档", "mediastatistics-header-text": "文本", "mediastatistics-header-executable": "可执行文件", "mediastatistics-header-archive": "压缩格式", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index ee7ce7c8fd..86c0011c4a 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -602,17 +602,17 @@ "botpasswords-label-delete": "刪除", "botpasswords-label-resetpassword": "重設密碼", "botpasswords-label-grants": "適用的權限:", - "botpasswords-help-grants": "每個授權會給予擁有該授權的使用者帳號列於該授權清單的使用者權限。 請參考 [[Special:ListGrants|授權表]] 取得更多資訊。", + "botpasswords-help-grants": "授權可以允許您存取您的使用者帳號已經擁有的權限,但在此開啟授權並不會讓您的使用者帳號可以存取那些您並未擁有的權限。請參考 [[Special:ListGrants|授權表]] 取得更多資訊。", "botpasswords-label-grants-column": "已授權", "botpasswords-bad-appid": "機器人名稱 \"$1\" 無效。", "botpasswords-insert-failed": "新增機器人名稱 \"$1\" 失敗,是否已新增過?", "botpasswords-update-failed": "更新機器人名稱 \"$1\" 失敗,是否已刪除過?", "botpasswords-created-title": "已建立機器人密碼", - "botpasswords-created-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已建立。", + "botpasswords-created-body": "給使用者 \"$2\" 的機器人 \"$1\" 的機器人密碼已建立。", "botpasswords-updated-title": "已更新機器人密碼", - "botpasswords-updated-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已更新。", + "botpasswords-updated-body": "給使用者 \"$2\" 的機器人 \"$1\" 的機器人密碼已更新。", "botpasswords-deleted-title": "已刪除機器人密碼", - "botpasswords-deleted-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已刪除。", + "botpasswords-deleted-body": "給使用者 \"$2\" 的機器人 \"$1\" 的機器人密碼已刪除。", "botpasswords-newpassword": "用來登入 $1 的新密碼為 $2。 請記錄此密碼以供未來參考使用。
(較舊的機器人的登入名稱需與最終使用者名稱相同,您也可使用 $3 做為使用者名稱 $4 做為密碼。)", "botpasswords-no-provider": "BotPasswordsSessionProvider 無法使用。", "botpasswords-restriction-failed": "機器人密碼限制已拒絕此次登入。", @@ -917,11 +917,11 @@ "revdelete-unsuppress": "移除已還原修訂上的顯示限制", "revdelete-log": "原因:", "revdelete-submit": "套用至已選取的{{PLURAL:$1|一筆|多筆}}修訂", - "revdelete-success": "已成功更新檢示修訂內容的權限設定。", + "revdelete-success": "已更新修訂的可見性。", "revdelete-failure": "無法更新修訂的顯示設定:\n$1", - "logdelete-success": "已成功更新檢視日誌的權限設定。", + "logdelete-success": "已設定日誌的可見性。", "logdelete-failure": "無法更新日誌的顯示設定:\n$1", - "revdel-restore": "變更能見度", + "revdel-restore": "變更可見性", "pagehist": "頁面歷史", "deletedhist": "已刪除歷史", "revdelete-hide-current": "隱藏於 $1 $2 的項目錯誤:此為目前的修訂,不可隱藏。", @@ -1064,8 +1064,8 @@ "saveprefs": "儲存", "restoreprefs": "還原所有預設設定 (所有項目)", "prefs-editing": "編輯", - "rows": "橫行數:", - "columns": "直行數:", + "rows": "列數:", + "columns": "欄數:", "searchresultshead": "搜尋", "stub-threshold": "短頁面連結格式門檻值 ($1):", "stub-threshold-sample-link": "樣本", @@ -1342,7 +1342,7 @@ "action-applychangetags": "連同您的變更一起套用標籤", "action-changetags": "加入與移除任何於各別修訂與日誌項目的標籤", "action-deletechangetags": "從資料庫刪除標籤", - "action-purge": "刷新此頁面", + "action-purge": "清除此頁面", "nchanges": "$1 次變更", "enhancedrc-since-last-visit": "{{PLURAL:$1|自上次拜訪}}已有 $1", "enhancedrc-history": "歷史", @@ -1789,10 +1789,10 @@ "mostimages": "被連結最多的檔案", "mostinterwikis": "最多跨 Wiki 連結的頁面", "mostrevisions": "最多修訂的頁面", - "prefixindex": "所有頁面與字首", - "prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)", + "prefixindex": "按詞頭查詢頁面", + "prefixindex-namespace": "按詞頭查詢頁面 ($1 命名空間)", "prefixindex-submit": "顯示", - "prefixindex-strip": "於清單中省略字首", + "prefixindex-strip": "於清單中省略詞首", "shortpages": "過短的頁面", "longpages": "過長的頁面", "deadendpages": "無連結頁面", @@ -1877,12 +1877,19 @@ "apisandbox-continue": "繼續", "apisandbox-continue-clear": "清除", "apisandbox-continue-help": "{{int:apisandbox-continue}} 會 [https://www.mediawiki.org/wiki/API:Query#Continuing_queries 繼續] 最後的請求,{{int:apisandbox-continue-clear}} 則會清除繼續相關的參數。", + "apisandbox-param-limit": "輸入 max 以使用最大限制。", "booksources": "圖書資源", "booksources-search-legend": "尋找圖書資源", "booksources-isbn": "國際標準書號:", "booksources-search": "搜尋", "booksources-text": "下列清單包含其他銷售新書籍或二手書籍的網站連結,可會有你想尋找書籍的進一部資訊:", "booksources-invalid-isbn": "您提供的 ISBN 不正確,請檢查複製的來源是否有誤。", + "magiclink-tracking-rfc": "使用 RFC 魔法連結的頁面", + "magiclink-tracking-rfc-desc": "此頁面使用 RFC 魔法連結的頁面,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] 的如何遷移。", + "magiclink-tracking-pmid": "使用 PMID 魔法連結的頁面", + "magiclink-tracking-pmid-desc": "此頁面使用 PMID 魔法連結的頁面,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] 的如何遷移。", + "magiclink-tracking-isbn": "使用 ISBN 魔法連結的頁面", + "magiclink-tracking-isbn-desc": "此頁面使用 ISBN 魔法連結的頁面,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] 的如何遷移。", "specialloguserlabel": "執行者:", "speciallogtitlelabel": "目標 (標題或以 {{ns:user}}:使用者 表示使用者):", "log": "日誌", @@ -1905,7 +1912,7 @@ "allarticles": "所有頁面", "allinnamespace": "所有頁面 ($1 命名空間)", "allpagessubmit": "執行", - "allpagesprefix": "顯示以此為字首頁面:", + "allpagesprefix": "根據詞首查詢頁面", "allpagesbadtitle": "指定的頁面標題無效、包含內部語言或內部 Wiki 的字首。\n它可能包含一個或多個的不能用於標題的字元。", "allpages-bad-ns": "{{SITENAME}} 沒有 \"$1\" 命名空間。", "allpages-hide-redirects": "隱藏重新導向頁面", @@ -1935,6 +1942,7 @@ "activeusers-count": "最近 $3 天內有 $1 次動作", "activeusers-from": "顯示使用者開始自:", "activeusers-groups": "顯示屬於以下群組的使用者:", + "activeusers-excludegroups": "排除屬於以下群組的使用者:", "activeusers-noresult": "查無使用者。", "activeusers-submit": "顯示活動中的使用者", "listgrouprights": "使用者群組權限", @@ -2127,6 +2135,9 @@ "modifiedarticleprotection": "已變更 \"[[$1]]\" 的保護層級", "unprotectedarticle": "已解除 \"[[$1]]\" 的保護", "movedarticleprotection": "已移動 \"[[$2]]\" 的保護設定至 \"[[$1]]\"", + "protectedarticle-comment": "{{GENDER:$2|受保護}} \"[[$1]]\"", + "modifiedarticleprotection-comment": "{{GENDER:$2|已更改}} \"[[$1]]\" 的保護層級", + "unprotectedarticle-comment": "{{GENDER:$2|已移除}} \"[[$1]]\" 的保護", "protect-title": "變更 \"$1\" 的保護層級", "protect-title-notallowed": "檢視 \"$1\" 的保護層級", "prot_1movedto2": "已移動 [[$1]] 至 [[$2]]", @@ -2509,7 +2520,7 @@ "import-mapping-namespace": "匯入至命名空間:", "import-mapping-subpage": "匯入做為以下頁面的子頁面:", "import-upload-filename": "檔案名稱:", - "import-comment": "註解:", + "import-comment": "評論:", "importtext": "請使用 [[Special:Export|匯出工具]] 從來源 Wiki 匯出檔案,\n儲存至您的電腦後再上傳到這裡。", "importstart": "正在匯入頁面...", "import-revision-count": "$1 個修訂", @@ -2713,6 +2724,7 @@ "log-show-hide-patrol": "$1 巡查日誌", "log-show-hide-tag": "$1 標籤日誌", "confirm-markpatrolled-button": "確定", + "confirm-markpatrolled-top": "標記 $2 的修訂 $3 為已巡查?", "deletedrevision": "已刪除舊修訂 $1", "filedeleteerror-short": "刪除檔案發生錯誤:$1", "filedeleteerror-long": "刪除檔案時發生錯誤:\n\n$1", @@ -2827,8 +2839,8 @@ "exif-colorspace": "色彩空間", "exif-componentsconfiguration": "每像素內含", "exif-compressedbitsperpixel": "影像壓縮模式", - "exif-pixelxdimension": "圖片寬度", - "exif-pixelydimension": "圖片高度", + "exif-pixelxdimension": "影像寬度", + "exif-pixelydimension": "影像高度", "exif-usercomment": "使用者評論", "exif-relatedsoundfile": "相關的音效檔案", "exif-datetimeoriginal": "資料產生的日期時間", @@ -2927,7 +2939,7 @@ "exif-source": "來源", "exif-editstatus": "圖片社評狀態", "exif-urgency": "緊急性", - "exif-fixtureidentifier": "夾具名稱", + "exif-fixtureidentifier": "Fixture 名稱", "exif-locationdest": "描繪地點", "exif-locationdestcode": "位置代碼描述", "exif-objectcycle": "媒體發生時間", @@ -3348,7 +3360,7 @@ "tags-deactivate": "停用", "tags-hitcount": "$1 次變更", "tags-manage-no-permission": "您沒有權限管理變更標籤。", - "tags-manage-blocked": "您無法在被封鎖的情況下管理變更標籤。", + "tags-manage-blocked": "您無法在{{GENDER:$1|您}}被封鎖的情況下管理變更標籤。", "tags-create-heading": "建立新標籤", "tags-create-explanation": "在預設情況下,新建立的標籤可被使用者及機器人使用。", "tags-create-tag-name": "標籤名稱:", @@ -3384,11 +3396,11 @@ "tags-deactivate-not-allowed": "無法停用標籤 \"$1\"。", "tags-deactivate-submit": "停用", "tags-apply-no-permission": "您沒有權限連同您的變更一起套用標籤。", - "tags-apply-blocked": "您無法在被封鎖的情況下套用變更標籤為您的變更。", + "tags-apply-blocked": "您無法在{{GENDER:$1|您}}被封鎖的情況下套用變更標籤為您的變更。", "tags-apply-not-allowed-one": "不允許手動套用標籤 \"$1\"。", "tags-apply-not-allowed-multi": "不允許手動套用以下{{PLURAL:$2|標籤|標籤}}:$1", "tags-update-no-permission": "您沒有權限加入與移除任何於各別修訂與日誌項目的標籤", - "tags-update-blocked": "您無法在被封鎖的情況下移除變更標籤。", + "tags-update-blocked": "您無法在{{GENDER:$1|您}}被封鎖的情況下移除變更標籤。", "tags-update-add-not-allowed-one": "不允許手動加入標籤 \"$1\"。", "tags-update-add-not-allowed-multi": "不允許手動加入以下{{PLURAL:$2|標籤|標籤}}:$1", "tags-update-remove-not-allowed-one": "不允許手動移除標籤 \"$1\"。", @@ -3778,7 +3790,7 @@ "authmanager-authn-autocreate-failed": "自動建立本地帳號失敗:$1", "authmanager-change-not-supported": "提供的憑證無法變更,因為尚無法使用。", "authmanager-create-disabled": "已關閉帳號自動建立。", - "authmanager-create-from-login": "要建立您的帳號,請先填寫以下欄位。", + "authmanager-create-from-login": "要建立您的帳號,請先填寫此欄位。", "authmanager-create-not-in-progress": "帳號建立尚未進行或連線階段資料已遺失,請重頭再開始。", "authmanager-create-no-primary": "提供的憑證無使用在帳號建立。", "authmanager-link-no-primary": "提供的憑證無使用在帳號連結。", diff --git a/package.json b/package.json index 0e841f8eac..99e752cd6d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "grunt-contrib-copy": "1.0.0", "grunt-contrib-watch": "1.0.0", "grunt-eslint": "19.0.0", - "grunt-jsonlint": "1.0.7", + "grunt-jsonlint": "1.1.0", "grunt-karma": "2.0.0", "grunt-stylelint": "0.6.0", "karma": "1.1.0", diff --git a/phpcs.xml b/phpcs.xml index edce2ea267..4693b42eb5 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -31,4 +31,7 @@ ^extensions/ ^skins/ .git + AdminSettings.php + LocalSettings.php + StartProfiler.php diff --git a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js index 100714a862..c7ebfd8a51 100644 --- a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js +++ b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js @@ -187,8 +187,11 @@ // If the user can't upload anything, don't give them the option to. api.getUserInfo().then( function ( userInfo ) { if ( userInfo.rights.indexOf( 'upload' ) === -1 ) { - // TODO Use a better error message when not all logged-in users can upload - booklet.getPage( 'upload' ).$element.msg( 'api-error-mustbeloggedin' ); + if ( mw.user.isAnon() ) { + booklet.getPage( 'upload' ).$element.msg( 'api-error-mustbeloggedin' ); + } else { + booklet.getPage( 'upload' ).$element.msg( 'api-error-badaccess-groups' ); + } } return $.Deferred().resolve(); } ) diff --git a/tests/phpunit/includes/auth/TemporaryPasswordPrimaryAuthenticationProviderTest.php b/tests/phpunit/includes/auth/TemporaryPasswordPrimaryAuthenticationProviderTest.php index d4ebe34a98..4b60622796 100644 --- a/tests/phpunit/includes/auth/TemporaryPasswordPrimaryAuthenticationProviderTest.php +++ b/tests/phpunit/includes/auth/TemporaryPasswordPrimaryAuthenticationProviderTest.php @@ -520,10 +520,6 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC $provider = $this->getProvider( [ 'emailEnabled' => false ] ); $status = $provider->providerAllowsAuthenticationDataChange( $req, true ); $this->assertEquals( \StatusValue::newFatal( 'passwordreset-emaildisabled' ), $status ); - $req->hasBackchannel = true; - $status = $provider->providerAllowsAuthenticationDataChange( $req, true ); - $this->assertFalse( $status->hasMessage( 'passwordreset-emaildisabled' ) ); - $req->hasBackchannel = false; $provider = $this->getProvider( [ 'passwordReminderResendTime' => 10 ] ); $status = $provider->providerAllowsAuthenticationDataChange( $req, true ); @@ -686,18 +682,10 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC $provider = $this->getProvider( [ 'emailEnabled' => false ] ); $status = $provider->testForAccountCreation( $user, $creator, [ $req ] ); $this->assertEquals( \StatusValue::newFatal( 'emaildisabled' ), $status ); - $req->hasBackchannel = true; - $status = $provider->testForAccountCreation( $user, $creator, [ $req ] ); - $this->assertFalse( $status->hasMessage( 'emaildisabled' ) ); - $req->hasBackchannel = false; $provider = $this->getProvider( [ 'emailEnabled' => true ] ); $status = $provider->testForAccountCreation( $user, $creator, [ $req ] ); $this->assertEquals( \StatusValue::newFatal( 'noemailcreate' ), $status ); - $req->hasBackchannel = true; - $status = $provider->testForAccountCreation( $user, $creator, [ $req ] ); - $this->assertFalse( $status->hasMessage( 'noemailcreate' ) ); - $req->hasBackchannel = false; $user->setEmail( 'test@localhost.localdomain' ); $status = $provider->testForAccountCreation( $user, $creator, [ $req ] ); diff --git a/tests/phpunit/includes/cache/GenderCacheTest.php b/tests/phpunit/includes/cache/GenderCacheTest.php index 9c723c028d..e5bb2379ef 100644 --- a/tests/phpunit/includes/cache/GenderCacheTest.php +++ b/tests/phpunit/includes/cache/GenderCacheTest.php @@ -1,4 +1,5 @@ getGenderCache(); $username = isset( self::$nameMap[$userKey] ) ? self::$nameMap[$userKey] : $userKey; $gender = $genderCache->getGenderOf( $username ); $this->assertEquals( $gender, $expectedGender, "GenderCache normal" ); @@ -53,7 +54,7 @@ class GenderCacheTest extends MediaWikiLangTestCase { */ public function testUserObjects( $userKey, $expectedGender ) { $username = isset( self::$nameMap[$userKey] ) ? self::$nameMap[$userKey] : $userKey; - $genderCache = GenderCache::singleton(); + $genderCache = MediaWikiServices::getInstance()->getGenderCache(); $gender = $genderCache->getGenderOf( $username ); $this->assertEquals( $gender, $expectedGender, "GenderCache normal" ); } @@ -79,7 +80,7 @@ class GenderCacheTest extends MediaWikiLangTestCase { */ public function testStripSubpages( $userKey, $expectedGender ) { $username = isset( self::$nameMap[$userKey] ) ? self::$nameMap[$userKey] : $userKey; - $genderCache = GenderCache::singleton(); + $genderCache = MediaWikiServices::getInstance()->getGenderCache(); $gender = $genderCache->getGenderOf( "$username/subpage" ); $this->assertEquals( $gender, $expectedGender, "GenderCache must strip of subpages" ); } diff --git a/tests/phpunit/includes/user/PasswordResetTest.php b/tests/phpunit/includes/user/PasswordResetTest.php index 4db636b126..7ff882a5ad 100644 --- a/tests/phpunit/includes/user/PasswordResetTest.php +++ b/tests/phpunit/includes/user/PasswordResetTest.php @@ -11,7 +11,7 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { */ public function testIsAllowed( $passwordResetRoutes, $enableEmail, $allowsAuthenticationDataChange, $canEditPrivate, $canSeePassword, - $userIsBlocked, $isAllowed, $isAllowedToDisplayPassword + $userIsBlocked, $isAllowed ) { $config = new HashConfig( [ 'PasswordResetRoutes' => $passwordResetRoutes, @@ -40,8 +40,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { $passwordReset = new PasswordReset( $config, $authManager ); $this->assertSame( $isAllowed, $passwordReset->isAllowed( $user )->isGood() ); - $this->assertSame( $isAllowedToDisplayPassword, - $passwordReset->isAllowed( $user, true )->isGood() ); } public function provideIsAllowed() { @@ -54,7 +52,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { 'canSeePassword' => true, 'userIsBlocked' => false, 'isAllowed' => false, - 'isAllowedToDisplayPassword' => false, ], [ 'passwordResetRoutes' => [ 'username' => true ], @@ -64,7 +61,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { 'canSeePassword' => true, 'userIsBlocked' => false, 'isAllowed' => false, - 'isAllowedToDisplayPassword' => false, ], [ 'passwordResetRoutes' => [ 'username' => true ], @@ -74,7 +70,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { 'canSeePassword' => true, 'userIsBlocked' => false, 'isAllowed' => false, - 'isAllowedToDisplayPassword' => false, ], [ 'passwordResetRoutes' => [ 'username' => true ], @@ -84,7 +79,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { 'canSeePassword' => true, 'userIsBlocked' => false, 'isAllowed' => false, - 'isAllowedToDisplayPassword' => false, ], [ 'passwordResetRoutes' => [ 'username' => true ], @@ -94,7 +88,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { 'canSeePassword' => true, 'userIsBlocked' => true, 'isAllowed' => false, - 'isAllowedToDisplayPassword' => false, ], [ 'passwordResetRoutes' => [ 'username' => true ], @@ -104,7 +97,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { 'canSeePassword' => false, 'userIsBlocked' => false, 'isAllowed' => true, - 'isAllowedToDisplayPassword' => false, ], [ 'passwordResetRoutes' => [ 'username' => true ], @@ -114,7 +106,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase { 'canSeePassword' => true, 'userIsBlocked' => false, 'isAllowed' => true, - 'isAllowedToDisplayPassword' => true, ], ]; } diff --git a/tests/phpunit/tests/MediaWikiTestCaseTest.php b/tests/phpunit/tests/MediaWikiTestCaseTest.php index 1c64485db7..edc81ff925 100644 --- a/tests/phpunit/tests/MediaWikiTestCaseTest.php +++ b/tests/phpunit/tests/MediaWikiTestCaseTest.php @@ -138,7 +138,7 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase { /** * @covers MediaWikiTestCase::setLogger - * @covers MediaWikiTestCase::restoreLogger + * @covers MediaWikiTestCase::restoreLoggers */ public function testLoggersAreRestoredOnTearDown_replacingExistingLogger() { $logger1 = LoggerFactory::getInstance( 'foo' ); @@ -153,7 +153,7 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase { /** * @covers MediaWikiTestCase::setLogger - * @covers MediaWikiTestCase::restoreLogger + * @covers MediaWikiTestCase::restoreLoggers */ public function testLoggersAreRestoredOnTearDown_replacingNonExistingLogger() { $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) ); @@ -167,7 +167,7 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase { /** * @covers MediaWikiTestCase::setLogger - * @covers MediaWikiTestCase::restoreLogger + * @covers MediaWikiTestCase::restoreLoggers */ public function testLoggersAreRestoredOnTearDown_replacingSameLoggerTwice() { $logger1 = LoggerFactory::getInstance( 'baz' );