From: jenkins-bot
Date: Thu, 14 Sep 2017 02:35:09 +0000 (+0000)
Subject: Merge "Improve flaky SiteStatsTest"
X-Git-Tag: 1.31.0-rc.0~2104
X-Git-Url: http://git.cyclocoop.org/ecrire?a=commitdiff_plain;h=655931210678d0090cd60a8463f2bb6d95099b0e;hp=d0b093d4bdc5d28eda5d37f5163f0694bd189234;p=lhc%2Fweb%2Fwiklou.git
Merge "Improve flaky SiteStatsTest"
---
diff --git a/RELEASE-NOTES-1.30 b/RELEASE-NOTES-1.30
index 67a449a312..8517a8f0de 100644
--- a/RELEASE-NOTES-1.30
+++ b/RELEASE-NOTES-1.30
@@ -70,6 +70,9 @@ section).
** This is currently gated by $wgCommentTableSchemaMigrationStage. Most wikis
can set this to MIGRATION_NEW and run maintenance/migrateComments.php as
soon as any necessary extensions are updated.
+* (T138166) Added ability for users to prohibit other users from sending them
+ emails with Special:Emailuser. Can be enabled by setting
+ $wgEnableUserEmailBlacklist to true.
=== External library changes in 1.30 ===
@@ -216,6 +219,8 @@ changes to languages because of Phabricator reports.
* wfUsePHP() is deprecated.
* wfFixSessionID() was removed.
* wfShellExec() and related functions are deprecated, use Shell::command().
+* (T138166) SpecialEmailUser::getTarget() now requires a second argument, the sending
+ user object. Using the method without the second argument is deprecated.
== Compatibility ==
MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
diff --git a/autoload.php b/autoload.php
index 4448204a5e..61fd192f0d 100644
--- a/autoload.php
+++ b/autoload.php
@@ -421,8 +421,8 @@ $wgAutoloadLocalClasses = [
'EditAction' => __DIR__ . '/includes/actions/EditAction.php',
'EditCLI' => __DIR__ . '/maintenance/edit.php',
'EditPage' => __DIR__ . '/includes/EditPage.php',
- 'EditWatchlistCheckboxSeriesField' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
- 'EditWatchlistNormalHTMLForm' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+ 'EditWatchlistCheckboxSeriesField' => __DIR__ . '/includes/specials/formfields/EditWatchlistCheckboxSeriesField.php',
+ 'EditWatchlistNormalHTMLForm' => __DIR__ . '/includes/specials/forms/EditWatchlistNormalHTMLForm.php',
'EmailConfirmation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialEmailInvalidate.php',
'EmailNotification' => __DIR__ . '/includes/mail/EmailNotification.php',
@@ -633,7 +633,7 @@ $wgAutoloadLocalClasses = [
'ImageQueryPage' => __DIR__ . '/includes/specialpage/ImageQueryPage.php',
'ImportImages' => __DIR__ . '/maintenance/importImages.php',
'ImportLogFormatter' => __DIR__ . '/includes/logging/ImportLogFormatter.php',
- 'ImportReporter' => __DIR__ . '/includes/specials/SpecialImport.php',
+ 'ImportReporter' => __DIR__ . '/includes/specials/helpers/ImportReporter.php',
'ImportSiteScripts' => __DIR__ . '/maintenance/importSiteScripts.php',
'ImportSites' => __DIR__ . '/maintenance/importSites.php',
'ImportSource' => __DIR__ . '/includes/import/ImportSource.php',
@@ -746,8 +746,8 @@ $wgAutoloadLocalClasses = [
'Languages' => __DIR__ . '/maintenance/language/languages.inc',
'LayeredParameterizedPassword' => __DIR__ . '/includes/password/LayeredParameterizedPassword.php',
'LegacyLogFormatter' => __DIR__ . '/includes/logging/LogFormatter.php',
- 'License' => __DIR__ . '/includes/Licenses.php',
- 'Licenses' => __DIR__ . '/includes/Licenses.php',
+ 'License' => __DIR__ . '/includes/specials/helpers/License.php',
+ 'Licenses' => __DIR__ . '/includes/specials/formfields/Licenses.php',
'LinkBatch' => __DIR__ . '/includes/cache/LinkBatch.php',
'LinkCache' => __DIR__ . '/includes/cache/LinkCache.php',
'LinkFilter' => __DIR__ . '/includes/LinkFilter.php',
@@ -1135,7 +1135,7 @@ $wgAutoloadLocalClasses = [
'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
'PostgresUpdater' => __DIR__ . '/includes/installer/PostgresUpdater.php',
'Preferences' => __DIR__ . '/includes/Preferences.php',
- 'PreferencesForm' => __DIR__ . '/includes/Preferences.php',
+ 'PreferencesForm' => __DIR__ . '/includes/specials/forms/PreferencesForm.php',
'PrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
'PreprocessDump' => __DIR__ . '/maintenance/preprocessDump.php',
'Preprocessor' => __DIR__ . '/includes/parser/Preprocessor.php',
@@ -1532,14 +1532,14 @@ $wgAutoloadLocalClasses = [
'UploadChunkVerificationException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadChunkZeroLengthFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadDumper' => __DIR__ . '/maintenance/dumpUploads.php',
- 'UploadForm' => __DIR__ . '/includes/specials/SpecialUpload.php',
+ 'UploadForm' => __DIR__ . '/includes/specials/forms/UploadForm.php',
'UploadFromChunks' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadFromFile' => __DIR__ . '/includes/upload/UploadFromFile.php',
'UploadFromStash' => __DIR__ . '/includes/upload/UploadFromStash.php',
'UploadFromUrl' => __DIR__ . '/includes/upload/UploadFromUrl.php',
'UploadLogFormatter' => __DIR__ . '/includes/logging/UploadLogFormatter.php',
'UploadSourceAdapter' => __DIR__ . '/includes/import/UploadSourceAdapter.php',
- 'UploadSourceField' => __DIR__ . '/includes/specials/SpecialUpload.php',
+ 'UploadSourceField' => __DIR__ . '/includes/specials/formfields/UploadSourceField.php',
'UploadStash' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashBadPathException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashCleanup' => __DIR__ . '/maintenance/cleanupUploadStash.php',
diff --git a/includes/CommentStore.php b/includes/CommentStore.php
index 2ed21d1995..b8a31e6f02 100644
--- a/includes/CommentStore.php
+++ b/includes/CommentStore.php
@@ -367,26 +367,7 @@ class CommentStore {
* @return CommentStoreComment
*/
public function createComment( IDatabase $dbw, $comment, array $data = null ) {
- global $wgContLang;
-
- if ( !$comment instanceof CommentStoreComment ) {
- if ( $data !== null ) {
- foreach ( $data as $k => $v ) {
- if ( substr( $k, 0, 1 ) === '_' ) {
- throw new InvalidArgumentException( 'Keys in $data beginning with "_" are reserved' );
- }
- }
- }
- if ( $comment instanceof Message ) {
- $message = clone $comment;
- $text = $message->inLanguage( $wgContLang ) // Avoid $wgForceUIMsgAsContentMsg
- ->setInterfaceMessageFlag( true )
- ->text();
- $comment = new CommentStoreComment( null, $text, $message, $data );
- } else {
- $comment = new CommentStoreComment( null, $comment, null, $data );
- }
- }
+ $comment = CommentStoreComment::newUnsavedComment( $comment, $data );
# Truncate comment in a Unicode-sensitive manner
$comment->text = $this->lang->truncate( $comment->text, self::MAX_COMMENT_LENGTH );
diff --git a/includes/CommentStoreComment.php b/includes/CommentStoreComment.php
index afc1374223..3920ba083f 100644
--- a/includes/CommentStoreComment.php
+++ b/includes/CommentStoreComment.php
@@ -42,7 +42,7 @@ class CommentStoreComment {
public $data;
/**
- * @private For use by CommentStore only
+ * @private For use by CommentStore only. Use self::newUnsavedComment() instead.
* @param int|null $id
* @param string $text
* @param Message|null $message
@@ -54,4 +54,39 @@ class CommentStoreComment {
$this->message = $message ?: new RawMessage( '$1', [ $text ] );
$this->data = $data;
}
+
+ /**
+ * Create a new, unsaved CommentStoreComment
+ *
+ * @param string|Message|CommentStoreComment $comment Comment text or Message object.
+ * A CommentStoreComment is also accepted here, in which case it is returned unchanged.
+ * @param array|null $data Structured data to store. Keys beginning with '_' are reserved.
+ * Ignored if $comment is a CommentStoreComment.
+ * @return CommentStoreComment
+ */
+ public static function newUnsavedComment( $comment, array $data = null ) {
+ global $wgContLang;
+
+ if ( $comment instanceof CommentStoreComment ) {
+ return $comment;
+ }
+
+ if ( $data !== null ) {
+ foreach ( $data as $k => $v ) {
+ if ( substr( $k, 0, 1 ) === '_' ) {
+ throw new InvalidArgumentException( 'Keys in $data beginning with "_" are reserved' );
+ }
+ }
+ }
+
+ if ( $comment instanceof Message ) {
+ $message = clone $comment;
+ $text = $message->inLanguage( $wgContLang ) // Avoid $wgForceUIMsgAsContentMsg
+ ->setInterfaceMessageFlag( true )
+ ->text();
+ return new CommentStoreComment( null, $text, $message, $data );
+ } else {
+ return new CommentStoreComment( null, $comment, null, $data );
+ }
+ }
}
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index 5b77d16c4e..852cd08cf0 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -1603,6 +1603,13 @@ $wgEnableEmail = true;
*/
$wgEnableUserEmail = true;
+/**
+ * Set to true to enable user-to-user e-mail blacklist.
+ *
+ * @since 1.30
+ */
+$wgEnableUserEmailBlacklist = false;
+
/**
* If true put the sending user's email in a Reply-To header
* instead of From (false). ($wgPasswordSender will be used as From.)
@@ -6850,13 +6857,6 @@ $wgStructuredChangeFiltersShowPreference = false;
*/
$wgStructuredChangeFiltersEnableExperimentalViews = false;
-/**
- * Whether to allow users to use the experimental live update feature in the new RecentChanges UI
- *
- * Temporary variable during development and will be removed.
- */
-$wgStructuredChangeFiltersEnableLiveUpdate = false;
-
/**
* Whether to enable RCFilters app on Special:Watchlist
*
diff --git a/includes/EditPage.php b/includes/EditPage.php
index 06a5cc3b62..9f3f586748 100644
--- a/includes/EditPage.php
+++ b/includes/EditPage.php
@@ -2915,7 +2915,7 @@ class EditPage {
}
}
- $buttonLabel = $this->context->msg( $this->getSaveButtonLabel() )->text();
+ $buttonLabel = $this->context->msg( $this->getSubmitButtonLabel() )->text();
if ( $this->missingComment ) {
$out->wrapWikiMsg( "", 'missingcommenttext' );
@@ -3794,7 +3794,7 @@ class EditPage {
* @return string
*/
public function getPreviewText() {
- global $wgRawHtml, $wgLang;
+ global $wgRawHtml;
global $wgAllowUserCss, $wgAllowUserJs;
$out = $this->context->getOutput();
@@ -3830,7 +3830,8 @@ class EditPage {
# provide a anchor link to the editform
$continueEditing = '' .
- '[[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' .
+ '[[#' . self::EDITFORM_ID . '|' .
+ $this->context->getLanguage()->getArrow() . ' ' .
$this->context->msg( 'continue-editing' )->text() . ']] ';
if ( $this->mTriedSave && !$this->mTokenOk ) {
if ( $this->mTokenOkExceptSuffix ) {
@@ -4333,9 +4334,9 @@ class EditPage {
*
* @return string
*/
- private function getSaveButtonLabel() {
+ protected function getSubmitButtonLabel() {
$labelAsPublish =
- $this->mArticle->getContext()->getConfig()->get( 'EditSubmitButtonLabelPublish' );
+ $this->context->getConfig()->get( 'EditSubmitButtonLabelPublish' );
// Can't use $this->isNew as that's also true if we're adding a new section to an extant page
$newPage = !$this->mTitle->exists();
@@ -4360,7 +4361,7 @@ class EditPage {
public function getEditButtons( &$tabindex ) {
$buttons = [];
- $buttonLabel = $this->context->msg( $this->getSaveButtonLabel() )->text();
+ $buttonLabel = $this->context->msg( $this->getSubmitButtonLabel() )->text();
$attribs = [
'name' => 'wpSave',
@@ -4448,11 +4449,10 @@ class EditPage {
* @param string|array|bool $match Text (or array of texts) which triggered one or more filters
*/
public function spamPageWithContent( $match = false ) {
- global $wgLang;
$this->textbox2 = $this->textbox1;
if ( is_array( $match ) ) {
- $match = $wgLang->listToText( $match );
+ $match = $this->context->getLanguage()->listToText( $match );
}
$out = $this->context->getOutput();
$out->prepareErrorPage( $this->context->msg( 'spamprotectiontitle' ) );
@@ -4640,19 +4640,20 @@ class EditPage {
* @since 1.29
*/
protected function addLongPageWarningHeader() {
- global $wgMaxArticleSize, $wgLang;
+ global $wgMaxArticleSize;
if ( $this->contentLength === false ) {
$this->contentLength = strlen( $this->textbox1 );
}
$out = $this->context->getOutput();
+ $lang = $this->context->getLanguage();
if ( $this->tooBig || $this->contentLength > $wgMaxArticleSize * 1024 ) {
$out->wrapWikiMsg( "\n$1\n
",
[
'longpageerror',
- $wgLang->formatNum( round( $this->contentLength / 1024, 3 ) ),
- $wgLang->formatNum( $wgMaxArticleSize )
+ $lang->formatNum( round( $this->contentLength / 1024, 3 ) ),
+ $lang->formatNum( $wgMaxArticleSize )
]
);
} else {
@@ -4660,7 +4661,7 @@ class EditPage {
$out->wrapWikiMsg( "\n$1\n
",
[
'longpage-hint',
- $wgLang->formatSize( strlen( $this->textbox1 ) ),
+ $lang->formatSize( strlen( $this->textbox1 ) ),
strlen( $this->textbox1 )
]
);
@@ -4717,7 +4718,7 @@ class EditPage {
protected function addExplainConflictHeader( OutputPage $out ) {
$out->wrapWikiMsg(
"\n$1\n
",
- [ 'explainconflict', $this->context->msg( $this->getSaveButtonLabel() )->text() ]
+ [ 'explainconflict', $this->context->msg( $this->getSubmitButtonLabel() )->text() ]
);
}
diff --git a/includes/Licenses.php b/includes/Licenses.php
deleted file mode 100644
index 6467777bff..0000000000
--- a/includes/Licenses.php
+++ /dev/null
@@ -1,210 +0,0 @@
-
- * @copyright Copyright © 2005, Ãvar Arnfjörð Bjarmason
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- */
-
-/**
- * A License class for use on Special:Upload
- */
-class Licenses extends HTMLFormField {
- /** @var string */
- protected $msg;
-
- /** @var array */
- protected $licenses = [];
-
- /** @var string */
- protected $html;
- /**#@-*/
-
- /**
- * @param array $params
- */
- public function __construct( $params ) {
- parent::__construct( $params );
-
- $this->msg = empty( $params['licenses'] )
- ? wfMessage( 'licenses' )->inContentLanguage()->plain()
- : $params['licenses'];
- $this->selected = null;
-
- $this->makeLicenses();
- }
-
- /**
- * @private
- */
- protected function makeLicenses() {
- $levels = [];
- $lines = explode( "\n", $this->msg );
-
- foreach ( $lines as $line ) {
- if ( strpos( $line, '*' ) !== 0 ) {
- continue;
- } else {
- list( $level, $line ) = $this->trimStars( $line );
-
- if ( strpos( $line, '|' ) !== false ) {
- $obj = new License( $line );
- $this->stackItem( $this->licenses, $levels, $obj );
- } else {
- if ( $level < count( $levels ) ) {
- $levels = array_slice( $levels, 0, $level );
- }
- if ( $level == count( $levels ) ) {
- $levels[$level - 1] = $line;
- } elseif ( $level > count( $levels ) ) {
- $levels[] = $line;
- }
- }
- }
- }
- }
-
- /**
- * @param string $str
- * @return array
- */
- protected function trimStars( $str ) {
- $numStars = strspn( $str, '*' );
- return [ $numStars, ltrim( substr( $str, $numStars ), ' ' ) ];
- }
-
- /**
- * @param array &$list
- * @param array $path
- * @param mixed $item
- */
- protected function stackItem( &$list, $path, $item ) {
- $position =& $list;
- if ( $path ) {
- foreach ( $path as $key ) {
- $position =& $position[$key];
- }
- }
- $position[] = $item;
- }
-
- /**
- * @param array $tagset
- * @param int $depth
- */
- protected function makeHtml( $tagset, $depth = 0 ) {
- foreach ( $tagset as $key => $val ) {
- if ( is_array( $val ) ) {
- $this->html .= $this->outputOption(
- $key, '',
- [
- 'disabled' => 'disabled',
- 'style' => 'color: GrayText', // for MSIE
- ],
- $depth
- );
- $this->makeHtml( $val, $depth + 1 );
- } else {
- $this->html .= $this->outputOption(
- $val->text, $val->template,
- [ 'title' => '{{' . $val->template . '}}' ],
- $depth
- );
- }
- }
- }
-
- /**
- * @param string $message
- * @param string $value
- * @param null|array $attribs
- * @param int $depth
- * @return string
- */
- protected function outputOption( $message, $value, $attribs = null, $depth = 0 ) {
- $msgObj = $this->msg( $message );
- $text = $msgObj->exists() ? $msgObj->text() : $message;
- $attribs['value'] = $value;
- if ( $value === $this->selected ) {
- $attribs['selected'] = 'selected';
- }
-
- $val = str_repeat( /*   */ "\xc2\xa0", $depth * 2 ) . $text;
- return str_repeat( "\t", $depth ) . Xml::element( 'option', $attribs, $val ) . "\n";
- }
-
- /**#@-*/
-
- /**
- * Accessor for $this->licenses
- *
- * @return array
- */
- public function getLicenses() {
- return $this->licenses;
- }
-
- /**
- * Accessor for $this->html
- *
- * @param bool $value
- *
- * @return string
- */
- public function getInputHTML( $value ) {
- $this->selected = $value;
-
- $this->html = $this->outputOption( wfMessage( 'nolicense' )->text(), '',
- (bool)$this->selected ? null : [ 'selected' => 'selected' ] );
- $this->makeHtml( $this->getLicenses() );
-
- $attribs = [
- 'name' => $this->mName,
- 'id' => $this->mID
- ];
- if ( !empty( $this->mParams['disabled'] ) ) {
- $attibs['disabled'] = 'disabled';
- }
-
- return Html::rawElement( 'select', $attribs, $this->html );
- }
-}
-
-/**
- * A License class for use on Special:Upload (represents a single type of license).
- */
-class License {
- /** @var string */
- public $template;
-
- /** @var string */
- public $text;
-
- /**
- * @param string $str License name??
- */
- function __construct( $str ) {
- list( $text, $template ) = explode( '|', strrev( $str ), 2 );
-
- $this->template = strrev( $template );
- $this->text = strrev( $text );
- }
-}
diff --git a/includes/Linker.php b/includes/Linker.php
index dccd99c73e..403b10a149 100644
--- a/includes/Linker.php
+++ b/includes/Linker.php
@@ -76,7 +76,7 @@ class Linker {
* @since 1.18 Method exists since 1.16 as non-static, made static in 1.18.
* @deprecated since 1.28, use MediaWiki\Linker\LinkRenderer instead
*
- * @param Title $target Can currently only be a Title, but this may
+ * @param LinkTarget $target Can currently only be a LinkTarget, but this may
* change to support Images, literal URLs, etc.
* @param string $html The HTML contents of the element, i.e.,
* the link text. This is raw HTML and will not be escaped. If null,
@@ -107,8 +107,8 @@ class Linker {
public static function link(
$target, $html = null, $customAttribs = [], $query = [], $options = []
) {
- if ( !$target instanceof Title ) {
- wfWarn( __METHOD__ . ': Requires $target to be a Title object.', 2 );
+ if ( !$target instanceof LinkTarget ) {
+ wfWarn( __METHOD__ . ': Requires $target to be a LinkTarget object.', 2 );
return "$html";
}
@@ -1175,7 +1175,7 @@ class Linker {
$sectionTitle = Title::newFromText( '#' . $section );
} else {
$sectionTitle = Title::makeTitleSafe( $title->getNamespace(),
- $title->getDBkey(), $section );
+ $title->getDBkey(), Sanitizer::decodeCharReferences( $section ) );
}
if ( $sectionTitle ) {
$link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' );
@@ -1291,9 +1291,7 @@ class Linker {
if ( $target->getText() == '' && !$target->isExternal()
&& !$local && $title
) {
- $newTarget = clone $title;
- $newTarget->setFragment( '#' . $target->getFragment() );
- $target = $newTarget;
+ $target = $title->createFragmentTarget( $target->getFragment() );
}
$thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
@@ -1321,7 +1319,7 @@ class Linker {
*
* @note This is only public for technical reasons. It's not intended for use outside Linker.
*
- * @param Title $title
+ * @param LinkTarget $linkTarget
* @param string $text
* @param string|null $wikiId Id of the wiki to link to (if not the local wiki),
* as used by WikiMap.
@@ -1330,23 +1328,23 @@ class Linker {
* @return string HTML link
*/
public static function makeCommentLink(
- Title $title, $text, $wikiId = null, $options = []
+ LinkTarget $linkTarget, $text, $wikiId = null, $options = []
) {
- if ( $wikiId !== null && !$title->isExternal() ) {
+ if ( $wikiId !== null && !$linkTarget->isExternal() ) {
$link = self::makeExternalLink(
WikiMap::getForeignURL(
$wikiId,
- $title->getNamespace() === 0
- ? $title->getDBkey()
- : MWNamespace::getCanonicalName( $title->getNamespace() ) . ':'
- . $title->getDBkey(),
- $title->getFragment()
+ $linkTarget->getNamespace() === 0
+ ? $linkTarget->getDBkey()
+ : MWNamespace::getCanonicalName( $linkTarget->getNamespace() ) . ':'
+ . $linkTarget->getDBkey(),
+ $linkTarget->getFragment()
),
$text,
/* escape = */ false // Already escaped
);
} else {
- $link = self::link( $title, $text, [], [], $options );
+ $link = self::link( $linkTarget, $text, [], [], $options );
}
return $link;
diff --git a/includes/Preferences.php b/includes/Preferences.php
index c29c4b9c85..0a9d70153f 100644
--- a/includes/Preferences.php
+++ b/includes/Preferences.php
@@ -1,7 +1,5 @@
'tog-ccmeonemails',
'disabled' => $disableEmailPrefs,
];
+
+ if ( $config->get( 'EnableUserEmailBlacklist' )
+ && !$disableEmailPrefs
+ && !(bool)$user->getOption( 'disablemail' )
+ ) {
+ $lookup = CentralIdLookup::factory();
+ $ids = $user->getOption( 'email-blacklist', [] );
+ $names = $ids ? $lookup->namesFromCentralIds( $ids, $user ) : [];
+
+ $defaultPreferences['email-blacklist'] = [
+ 'type' => 'usersmultiselect',
+ 'label-message' => 'email-blacklist-label',
+ 'section' => 'personal/email',
+ 'default' => implode( "\n", $names ),
+ ];
+ }
}
if ( $config->get( 'EnotifWatchlist' ) ) {
@@ -1365,7 +1379,7 @@ class Preferences {
$htmlForm->setSubmitText( $context->msg( 'saveprefs' )->text() );
# Used message keys: 'accesskey-preferences-save', 'tooltip-preferences-save'
$htmlForm->setSubmitTooltip( 'preferences-save' );
- $htmlForm->setSubmitID( 'prefsubmit' );
+ $htmlForm->setSubmitID( 'prefcontrol' );
$htmlForm->setSubmitCallback( [ 'Preferences', 'tryFormSubmit' ] );
return $htmlForm;
@@ -1635,123 +1649,3 @@ class Preferences {
return $timeZoneList;
}
}
-
-/** Some tweaks to allow js prefs to work */
-class PreferencesForm extends HTMLForm {
- // Override default value from HTMLForm
- protected $mSubSectionBeforeFields = false;
-
- private $modifiedUser;
-
- /**
- * @param User $user
- */
- public function setModifiedUser( $user ) {
- $this->modifiedUser = $user;
- }
-
- /**
- * @return User
- */
- public function getModifiedUser() {
- if ( $this->modifiedUser === null ) {
- return $this->getUser();
- } else {
- return $this->modifiedUser;
- }
- }
-
- /**
- * Get extra parameters for the query string when redirecting after
- * successful save.
- *
- * @return array
- */
- public function getExtraSuccessRedirectParameters() {
- return [];
- }
-
- /**
- * @param string $html
- * @return string
- */
- function wrapForm( $html ) {
- $html = Xml::tags( 'div', [ 'id' => 'preferences' ], $html );
-
- return parent::wrapForm( $html );
- }
-
- /**
- * @return string
- */
- function getButtons() {
- $attrs = [ 'id' => 'mw-prefs-restoreprefs' ];
-
- if ( !$this->getModifiedUser()->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
- return '';
- }
-
- $html = parent::getButtons();
-
- if ( $this->getModifiedUser()->isAllowed( 'editmyoptions' ) ) {
- $t = $this->getTitle()->getSubpage( 'reset' );
-
- $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
- $html .= "\n" . $linkRenderer->makeLink( $t, $this->msg( 'restoreprefs' )->text(),
- Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ) );
-
- $html = Xml::tags( 'div', [ 'class' => 'mw-prefs-buttons' ], $html );
- }
-
- return $html;
- }
-
- /**
- * Separate multi-option preferences into multiple preferences, since we
- * have to store them separately
- * @param array $data
- * @return array
- */
- function filterDataForSubmit( $data ) {
- foreach ( $this->mFlatFields as $fieldname => $field ) {
- if ( $field instanceof HTMLNestedFilterable ) {
- $info = $field->mParams;
- $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $fieldname;
- foreach ( $field->filterDataForSubmit( $data[$fieldname] ) as $key => $value ) {
- $data["$prefix$key"] = $value;
- }
- unset( $data[$fieldname] );
- }
- }
-
- return $data;
- }
-
- /**
- * Get the whole body of the form.
- * @return string
- */
- function getBody() {
- return $this->displaySection( $this->mFieldTree, '', 'mw-prefsection-' );
- }
-
- /**
- * Get the "" for a given section key. Normally this is the
- * prefs-$key message but we'll allow extensions to override it.
- * @param string $key
- * @return string
- */
- function getLegend( $key ) {
- $legend = parent::getLegend( $key );
- Hooks::run( 'PreferencesGetLegend', [ $this, $key, &$legend ] );
- return $legend;
- }
-
- /**
- * Get the keys of each top level preference section.
- * @return array of section keys
- */
- function getPreferenceSections() {
- return array_keys( array_filter( $this->mFieldTree, 'is_array' ) );
- }
-}
diff --git a/includes/Sanitizer.php b/includes/Sanitizer.php
index 7d17cd1065..a7f963a435 100644
--- a/includes/Sanitizer.php
+++ b/includes/Sanitizer.php
@@ -1203,8 +1203,6 @@ class Sanitizer {
global $wgExperimentalHtmlIds;
$options = (array)$options;
- $id = self::decodeCharReferences( $id );
-
if ( $wgExperimentalHtmlIds && !in_array( 'legacy', $options ) ) {
$id = preg_replace( '/[ \t\n\r\f_\'"%]+/', '_', $id );
$id = trim( $id, '_' );
@@ -1313,8 +1311,6 @@ class Sanitizer {
* @return string
*/
private static function escapeIdInternal( $id, $mode ) {
- $id = self::decodeCharReferences( $id );
-
switch ( $mode ) {
case 'html5':
$id = str_replace( ' ', '_', $id );
diff --git a/includes/TemplateParser.php b/includes/TemplateParser.php
index 2759ff9baa..2293dabbd9 100644
--- a/includes/TemplateParser.php
+++ b/includes/TemplateParser.php
@@ -38,6 +38,13 @@ class TemplateParser {
*/
protected $forceRecompile = false;
+ /**
+ * @var int Compilation flags passed to LightnCandy
+ */
+ // Do not add more flags here without discussion.
+ // If you do add more flags, be sure to update unit tests as well.
+ protected $compileFlags = LightnCandy::FLAG_ERROR_EXCEPTION;
+
/**
* @param string $templateDir
* @param bool $forceRecompile
@@ -47,6 +54,18 @@ class TemplateParser {
$this->forceRecompile = $forceRecompile;
}
+ /**
+ * Enable/disable the use of recursive partials.
+ * @param bool $enable
+ */
+ public function enableRecursivePartials( $enable ) {
+ if ( $enable ) {
+ $this->compileFlags = $this->compileFlags | LightnCandy::FLAG_RUNTIMEPARTIAL;
+ } else {
+ $this->compileFlags = $this->compileFlags & ~LightnCandy::FLAG_RUNTIMEPARTIAL;
+ }
+ }
+
/**
* Constructs the location of the the source Mustache template
* @param string $templateName The name of the template
@@ -73,11 +92,13 @@ class TemplateParser {
* @throws RuntimeException
*/
protected function getTemplate( $templateName ) {
+ $templateKey = $templateName . '|' . $this->compileFlags;
+
// If a renderer has already been defined for this template, reuse it
- if ( isset( $this->renderers[$templateName] ) &&
- is_callable( $this->renderers[$templateName] )
+ if ( isset( $this->renderers[$templateKey] ) &&
+ is_callable( $this->renderers[$templateKey] )
) {
- return $this->renderers[$templateName];
+ return $this->renderers[$templateKey];
}
$filename = $this->getTemplateFilename( $templateName );
@@ -90,7 +111,7 @@ class TemplateParser {
$fileContents = file_get_contents( $filename );
// Generate a quick hash for cache invalidation
- $fastHash = md5( $fileContents );
+ $fastHash = md5( $this->compileFlags . '|' . $fileContents );
// Fetch a secret key for building a keyed hash of the PHP code
$config = MediaWikiServices::getInstance()->getMainConfig();
@@ -127,7 +148,7 @@ class TemplateParser {
if ( !is_callable( $renderer ) ) {
throw new RuntimeException( "Requested template, {$templateName}, is not callable" );
}
- $this->renderers[$templateName] = $renderer;
+ $this->renderers[$templateKey] = $renderer;
return $renderer;
}
@@ -168,9 +189,7 @@ class TemplateParser {
return LightnCandy::compile(
$code,
[
- // Do not add more flags here without discussion.
- // If you do add more flags, be sure to update unit tests as well.
- 'flags' => LightnCandy::FLAG_ERROR_EXCEPTION,
+ 'flags' => $this->compileFlags,
'basedir' => $this->templateDir,
'fileext' => '.mustache',
]
diff --git a/includes/Xml.php b/includes/Xml.php
index 16a5a9ddec..0091513125 100644
--- a/includes/Xml.php
+++ b/includes/Xml.php
@@ -493,7 +493,8 @@ class Xml {
}
/**
- * Build a drop-down box from a textual list.
+ * Build a drop-down box from a textual list. This is a wrapper
+ * for Xml::listDropDownOptions() plus the XmlSelect class.
*
* @param string $name Name and id for the drop-down
* @param string $list Correctly formatted text (newline delimited) to be
@@ -507,60 +508,91 @@ class Xml {
public static function listDropDown( $name = '', $list = '', $other = '',
$selected = '', $class = '', $tabindex = null
) {
- $optgroup = false;
+ $options = self::listDropDownOptions( $list, [ 'other' => $other ] );
+
+ $xmlSelect = new XmlSelect( $name, $name, $selected );
+ $xmlSelect->addOptions( $options );
+
+ if ( $class ) {
+ $xmlSelect->setAttribute( 'class', $class );
+ }
+ if ( $tabindex ) {
+ $xmlSelect->setAttribute( 'tabindex', $tabindex );
+ }
- $options = self::option( $other, 'other', $selected === 'other' );
+ return $xmlSelect->getHTML();
+ }
+ /**
+ * Build options for a drop-down box from a textual list.
+ *
+ * The result of this function can be passed to XmlSelect::addOptions()
+ * (to render a plain `` dropdown box) or to Xml::listDropDownOptionsOoui()
+ * and then OOUI\DropdownInputWidget() (to render a pretty one).
+ *
+ * @param string $list Correctly formatted text (newline delimited) to be
+ * used to generate the options.
+ * @param array $params Extra parameters
+ * @param string $params['other'] If set, add an option with this as text and a value of 'other'
+ * @return array Array keys are textual labels, values are internal values
+ */
+ public static function listDropDownOptions( $list, $params = [] ) {
+ $options = [];
+
+ if ( isset( $params['other'] ) ) {
+ $options[ $params['other'] ] = 'other';
+ }
+
+ $optgroup = false;
foreach ( explode( "\n", $list ) as $option ) {
$value = trim( $option );
if ( $value == '' ) {
continue;
} elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
- // A new group is starting ...
+ # A new group is starting...
$value = trim( substr( $value, 1 ) );
- if ( $optgroup ) {
- $options .= self::closeElement( 'optgroup' );
- }
- $options .= self::openElement( 'optgroup', [ 'label' => $value ] );
- $optgroup = true;
+ $optgroup = $value;
} elseif ( substr( $value, 0, 2 ) == '**' ) {
- // groupmember
- $value = trim( substr( $value, 2 ) );
- $options .= self::option( $value, $value, $selected === $value );
- } else {
- // groupless reason list
- if ( $optgroup ) {
- $options .= self::closeElement( 'optgroup' );
+ # groupmember
+ $opt = trim( substr( $value, 2 ) );
+ if ( $optgroup === false ) {
+ $options[$opt] = $opt;
+ } else {
+ $options[$optgroup][$opt] = $opt;
}
- $options .= self::option( $value, $value, $selected === $value );
+ } else {
+ # groupless reason list
$optgroup = false;
+ $options[$option] = $option;
}
}
- if ( $optgroup ) {
- $options .= self::closeElement( 'optgroup' );
- }
-
- $attribs = [];
-
- if ( $name ) {
- $attribs['id'] = $name;
- $attribs['name'] = $name;
- }
+ return $options;
+ }
- if ( $class ) {
- $attribs['class'] = $class;
- }
+ /**
+ * Convert options for a drop-down box into a format accepted by OOUI\DropdownInputWidget etc.
+ *
+ * TODO Find a better home for this function.
+ *
+ * @param array $options Options, as returned e.g. by Xml::listDropDownOptions()
+ * @return array
+ */
+ public static function listDropDownOptionsOoui( $options ) {
+ $optionsOoui = [];
- if ( $tabindex ) {
- $attribs['tabindex'] = $tabindex;
+ foreach ( $options as $text => $value ) {
+ if ( is_array( $value ) ) {
+ $optionsOoui[] = [ 'optgroup' => (string)$text ];
+ foreach ( $value as $text2 => $value2 ) {
+ $optionsOoui[] = [ 'data' => (string)$value2, 'label' => (string)$text2 ];
+ }
+ } else {
+ $optionsOoui[] = [ 'data' => (string)$value, 'label' => (string)$text ];
+ }
}
- return self::openElement( 'select', $attribs )
- . "\n"
- . $options
- . "\n"
- . self::closeElement( 'select' );
+ return $optionsOoui;
}
/**
diff --git a/includes/api/ApiEmailUser.php b/includes/api/ApiEmailUser.php
index 4b4b76bbc0..edea2661a2 100644
--- a/includes/api/ApiEmailUser.php
+++ b/includes/api/ApiEmailUser.php
@@ -34,7 +34,7 @@ class ApiEmailUser extends ApiBase {
$params = $this->extractRequestParams();
// Validate target
- $targetUser = SpecialEmailUser::getTarget( $params['target'] );
+ $targetUser = SpecialEmailUser::getTarget( $params['target'], $this->getUser() );
if ( !( $targetUser instanceof User ) ) {
switch ( $targetUser ) {
case 'notarget':
diff --git a/includes/api/i18n/uk.json b/includes/api/i18n/uk.json
index e9a7f9b154..75a50b72e2 100644
--- a/includes/api/i18n/uk.json
+++ b/includes/api/i18n/uk.json
@@ -341,7 +341,7 @@
"apihelp-parse-paramvalue-prop-sections": "ÐÐ°Ñ ÑоздÑли в аналÑÐ·Ð¾Ð²Ð°Ð½Ð¾Ð¼Ñ Ð²ÑкÑÑекÑÑÑ.",
"apihelp-parse-paramvalue-prop-revid": "ÐÐ¾Ð´Ð°Ñ ÑденÑиÑÑкаÑÐ¾Ñ Ð²ÐµÑÑÑÑ Ð°Ð½Ð°Ð»ÑÐ·Ð¾Ð²Ð°Ð½Ð¾Ñ ÑÑоÑÑнки.",
"apihelp-parse-paramvalue-prop-displaytitle": "ÐÐ¾Ð´Ð°Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº аналÑзованого вÑкÑÑекÑÑÑ.",
- "apihelp-parse-paramvalue-prop-headitems": "ÐаÑÑаÑÑло. ÐÐ°Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи Ð´Ð»Ñ Ð²ÑÑавки в <head>
ÑÑоÑÑнки.",
+ "apihelp-parse-paramvalue-prop-headitems": "ÐÐ°Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи Ð´Ð»Ñ Ð²ÑÑавки в <head>
ÑÑоÑÑнки.",
"apihelp-parse-paramvalue-prop-headhtml": "ÐÐ°Ñ Ð¿ÑоаналÑзований <head>
ÑÑоÑÑнки.",
"apihelp-parse-paramvalue-prop-modules": "ÐÐ°Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ResourceLoader, викоÑиÑÑÐ°Ð½Ñ Ð½Ð° ÑÑоÑÑнÑÑ. Щоб заванÑажиÑи, викоÑиÑÑовÑйÑе mw.loader.using()
. Чи jsconfigvars , Ñи encodedjsconfigvars Ð¼Ð°Ñ Ð±ÑÑи запиÑано Ñазом з modules .",
"apihelp-parse-paramvalue-prop-jsconfigvars": "ÐÐ°Ñ Ð·Ð¼ÑÐ½Ð½Ñ ÐºÐ¾Ð½ÑÑгÑÑаÑÑÑ JavaScript, пÑиÑÐ°Ð¼Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑÑоÑÑнки. Щоб заÑÑоÑÑваÑи, викоÑиÑÑайÑе mw.config.set()
.",
@@ -1072,8 +1072,8 @@
"apihelp-query+search-paramvalue-prop-sectiontitle": "ÐÐ¾Ð´Ð°Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº вÑдповÑдного ÑоздÑлÑ.",
"apihelp-query+search-paramvalue-prop-categorysnippet": "ÐÐ¾Ð´Ð°Ñ Ð¿ÑоаналÑзований ÑÑивок вÑдповÑÐ´Ð½Ð¾Ñ ÐºÐ°ÑегоÑÑÑ.",
"apihelp-query+search-paramvalue-prop-isfilematch": "ÐÐ¾Ð´Ð°Ñ Ð¿ÐµÑемикаÑ, Ñкий показÑÑ, Ñ Ð¿Ð¾ÑÑк знайÑов вмÑÑÑ ÑайлÑ.",
- "apihelp-query+search-paramvalue-prop-score": "ÐаÑÑаÑÑло й ÑнгоÑÑÑÑÑÑÑ. ",
- "apihelp-query+search-paramvalue-prop-hasrelated": "ÐаÑÑаÑÑло й ÑнгоÑÑÑÑÑÑÑ. ",
+ "apihelp-query+search-paramvalue-prop-score": "ÐнгоÑÑÑÑÑÑÑ.",
+ "apihelp-query+search-paramvalue-prop-hasrelated": "ÐгноÑÑÑÑÑÑÑ.",
"apihelp-query+search-param-limit": "СкÑлÑки вÑÑого ÑÑоÑÑнок виводиÑи.",
"apihelp-query+search-param-interwiki": "ÐклÑÑаÑи ÑнÑеÑвÑÐºÑ Ð² ÑезÑлÑÑаÑаÑ
поÑÑкÑ, ÑкÑо доÑÑÑпно.",
"apihelp-query+search-param-backend": "Який бекенд поÑÑÐºÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи, ÑкÑо не за замовÑÑваннÑм.",
@@ -1186,7 +1186,7 @@
"apihelp-query+userinfo-paramvalue-prop-rights": "ÐеÑелÑÑÑÑ ÑÑÑ Ð¿Ñава, ÑÐºÑ Ð¼Ð°Ñ Ð¿Ð¾ÑоÑний коÑиÑÑÑваÑ.",
"apihelp-query+userinfo-paramvalue-prop-changeablegroups": "ÐеÑелÑÑÑÑ Ð³ÑÑпи, Ñ ÑÐºÑ ÐºÐ¾ÑиÑÑÑÐ²Ð°Ñ Ð¼Ð¾Ð¶Ðµ додаваÑи Ñ Ð· ÑкиÑ
вилÑÑаÑи.",
"apihelp-query+userinfo-paramvalue-prop-options": "ÐеÑелÑÑÑÑ ÑÑÑ Ð½Ð°Ð»Ð°ÑÑÑваннÑ, ÑÐºÑ Ð¿Ð¾ÑоÑний коÑиÑÑÑÐ²Ð°Ñ Ð²ÑÑановив.",
- "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "ÐаÑÑаÑÑле. ÐÑÑимаÑи знак Ð´Ð»Ñ Ð·Ð¼Ñни налаÑÑÑÐ²Ð°Ð½Ñ Ð¿Ð¾ÑоÑного коÑиÑÑÑваÑа.",
+ "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "ÐÑÑимаÑи Ñокен Ð´Ð»Ñ Ð·Ð¼Ñни налаÑÑÑÐ²Ð°Ð½Ñ Ð¿Ð¾ÑоÑного коÑиÑÑÑваÑа.",
"apihelp-query+userinfo-paramvalue-prop-editcount": "ÐÐ¾Ð´Ð°Ñ ÐºÑлÑкÑÑÑÑ ÑедагÑÐ²Ð°Ð½Ñ Ð¿Ð¾ÑоÑного коÑиÑÑÑваÑа.",
"apihelp-query+userinfo-paramvalue-prop-ratelimits": "ÐеÑелÑÑÑÑ ÑÑÑ Ð»ÑмÑÑи оÑÑнок, заÑÑоÑÐ¾Ð²Ð½Ñ Ð´Ð¾ поÑоÑного коÑиÑÑÑваÑа.",
"apihelp-query+userinfo-paramvalue-prop-realname": "ÐÐ¾Ð´Ð°Ñ ÑпÑÐ°Ð²Ð¶Ð½Ñ Ñм'Ñ ÐºÐ¾ÑиÑÑÑваÑа.",
@@ -1430,6 +1430,10 @@
"api-format-prettyprint-header-only-html": "Це HTML-пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑизнаÑене Ð´Ð»Ñ Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ, однак не пÑидаÑне Ð´Ð»Ñ Ð¿Ñикладного викоÑиÑÑаннÑ.\n\nÐив. [[mw:Special:MyLanguage/API|Ð¿Ð¾Ð²Ð½Ñ Ð´Ð¾ÐºÑменÑаÑÑÑ]], або [[Special:ApiHelp/main|довÑÐ´ÐºÑ Ð· API]] Ð´Ð»Ñ Ð´ÐµÑалÑнÑÑÐ¾Ñ ÑнÑоÑмаÑÑÑ.",
"api-format-prettyprint-header-hyperlinked": "Це â HTML-ÑепÑезенÑаÑÑÑ ÑоÑмаÑÑ $1. HTML добÑий Ð´Ð»Ñ Ð²Ð¸Ð¿ÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº, але непÑидаÑний Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°ÑкÑв.\n\nÐкажÑÑÑ Ð¿Ð°ÑамеÑÑ format , Ñоб змÑниÑи ÑоÑÐ¼Ð°Ñ Ð²Ð¸Ð²Ð¾Ð´Ñ. Щоб побаÑиÑи ÑепÑезенÑаÑÑÑ ÑоÑмаÑÑ $1 не Ñ ÑоÑÐ¼Ñ HTML, вкажÑÑÑ [$3 format=$2 ].\nÐив. [[mw:API|Ð¿Ð¾Ð²Ð½Ñ Ð´Ð¾ÐºÑменÑаÑÑÑ]], або [[Special:ApiHelp/main|довÑÐ´ÐºÑ API]], Ñоб дÑзнаÑиÑÑ Ð±ÑлÑÑе.",
"api-format-prettyprint-status": "ÐÑдповÑÐ´Ñ Ð¿Ð¾Ð²ÐµÑнеÑÑÑÑ Ñз HTTP-ÑÑаÑÑÑом $1 $2.",
+ "api-login-fail-aborted": "ÐвÑенÑиÑÑкаÑÑÑ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð²Ð·Ð°ÑмодÑÑ Ð· коÑиÑÑÑваÑем, Ñка не пÑдÑÑимÑÑÑÑÑÑ action=login . Щоб маÑи Ð·Ð¼Ð¾Ð³Ñ ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ action=login , див. [[Special:BotPasswords]]. Щоб пÑодовжиÑи викоÑиÑÑовÑваÑи вÑ
Ñд Ñ ÑиÑÑÐµÐ¼Ñ ÑеÑез оÑновний облÑковий запиÑ, див.[[Special:ApiHelp/clientlogin|action=clientlogin]] .",
+ "api-login-fail-aborted-nobotpw": "ÐвÑенÑиÑÑкаÑÑÑ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð²Ð·Ð°ÑмодÑÑ Ð· коÑиÑÑÑваÑем, Ñка не пÑдÑÑимÑÑÑÑÑÑ action=login . Щоб ÑвÑйÑи в ÑиÑÑемÑ, див. [[Special:ApiHelp/clientlogin|action=clientlogin]] .",
+ "api-login-fail-badsessionprovider": "Ðеможливо ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ Ð¿Ñи викоÑиÑÑÐ°Ð½Ð½Ñ $1.",
+ "api-login-fail-sameorigin": "Ðеможливо ÑвÑйÑи в ÑиÑÑемÑ, коли не заÑÑоÑовÑÑÑÑÑÑ ''полÑÑика Ñого ж поÑ
одженнÑ''.",
"api-pageset-param-titles": "СпиÑок назв над Ñкими пÑаÑÑваÑи.",
"api-pageset-param-pageids": "СпиÑок ÑденÑиÑÑкаÑоÑÑв ÑÑоÑÑнок над Ñкими пÑаÑÑваÑи.",
"api-pageset-param-revids": "СпиÑок ÑденÑиÑÑкаÑоÑÑв веÑÑÑй над Ñкими пÑаÑÑваÑи.",
@@ -1440,6 +1444,7 @@
"api-help-title": "ÐовÑдка API MediaWiki",
"api-help-lead": "Це авÑомаÑиÑно генеÑована ÑÑоÑÑнка докÑменÑаÑÑÑ API MediaWiki.\n\nÐокÑменÑаÑÑÑ Ñа пÑиклади: https://www.mediawiki.org/wiki/API",
"api-help-main-header": "Ðоловний модÑлÑ",
+ "api-help-undocumented-module": "ÐÐ»Ñ Ð¼Ð¾Ð´ÑÐ»Ñ $1 вÑдÑÑÑÐ½Ñ Ð´Ð¾ÐºÑменÑаÑÑÑ.",
"api-help-flag-deprecated": "Цей модÑÐ»Ñ Ñ Ð·Ð°ÑÑаÑÑлим.",
"api-help-flag-internal": "Цей модÑÐ»Ñ Ñ Ð²Ð½ÑÑÑÑÑнÑм або неÑÑабÑлÑним. Ðого ÑобоÑа може бÑÑи змÑнена без ÑповÑÑеннÑ.",
"api-help-flag-readrights": "Цей модÑÐ»Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð¿Ñав на ÑиÑаннÑ.",
@@ -1471,6 +1476,7 @@
"api-help-param-upload": "Ðовинно бÑÑи надÑÑлано Ñ ÑоÑÐ¼Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ ÑÐ°Ð¹Ð»Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑи multipart/form-data.",
"api-help-param-multi-separate": "РоздÑлÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð· Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ | або [[Special:ApiHelp/main#main/datatypes|алÑÑеÑнаÑивÑ]].",
"api-help-param-multi-max": "ÐакÑималÑна кÑлÑкÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ñ â {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} Ð´Ð»Ñ Ð±Ð¾ÑÑв).",
+ "api-help-param-multi-max-simple": "ÐакÑималÑна кÑлÑкÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ñ ÑÑановиÑÑ {{PLURAL:$1|$1}}.",
"api-help-param-multi-all": "Щоб зазнаÑиÑи вÑÑ Ð·Ð½Ð°ÑеннÑ, викоÑиÑÑовÑйÑе $1 .",
"api-help-param-default": "Ðа замовÑÑваннÑм: $1",
"api-help-param-default-empty": "Ðа замовÑÑваннÑм: (пÑÑÑо) ",
@@ -1542,6 +1548,8 @@
"apierror-changeauth-norequest": "Ðе вдалоÑÑ ÑÑвоÑиÑи Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° змÑнÑ.",
"apierror-chunk-too-small": "ÐÑнÑмалÑний ÑозмÑÑ ÑмаÑка ÑÑановиÑÑ $1 {{PLURAL:$1|байÑ|байÑи|байÑÑв}} Ð´Ð»Ñ Ð½ÐµÐºÑнÑевиÑ
ÑмаÑкÑв.",
"apierror-cidrtoobroad": "$1 CIDR-дÑапазони, ÑиÑÑÑ Ð½Ñж /$2, недозволенÑ.",
+ "apierror-compare-no-title": "Ðеможливо попеÑеднÑо збеÑегÑи ÑÑанÑÑоÑмаÑÑÑ Ð±ÐµÐ· назви. СпÑобÑйÑе зазнаÑиÑи fromtitle або totitle .",
+ "apierror-compare-relative-to-nothing": "ÐÑдÑÑÑÐ½Ñ Ð²ÐµÑÑÑÑ 'from', ÑÐºÐ¾Ñ Ð± ÑÑоÑÑвалоÑÑ torelative .",
"apierror-contentserializationexception": "ÐевдаÑа ÑеÑÑалÑзаÑÑÑ Ð²Ð¼ÑÑÑÑ: $1",
"apierror-contenttoobig": "Ðаданий Ðами вмÑÑÑ Ð¿ÐµÑевиÑÑÑ Ð»ÑмÑÑ Ñ $1 {{PLURAL:$1|кÑлобайÑ|кÑлобайÑи|кÑлобайÑÑв}} ÑозмÑÑÑ ÑÑоÑÑнки.",
"apierror-copyuploadbaddomain": "ÐаванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° URL-адÑеÑÐ¾Ñ Ð½ÐµÐ´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ Ð· ÑÑого доменÑ.",
@@ -1585,10 +1593,12 @@
"apierror-maxlag": "ÐÑÑкÑÐ²Ð°Ð½Ð½Ñ Ð½Ð° $2: заÑÑимка $1 {{PLURAL:$1|ÑекÑнда|ÑекÑнди|ÑекÑнд}}.",
"apierror-mimesearchdisabled": "MIME-поÑÑк вимкнений Ñ ÑкÑÐ¿Ð¾Ð¼Ñ ÑежимÑ.",
"apierror-missingcontent-pageid": "ÐÑдÑÑÑнÑй вмÑÑÑ Ð´Ð»Ñ ÑÑоÑÑнки з ÑденÑиÑÑкаÑоÑом $1.",
+ "apierror-missingcontent-revid": "ÐÑдÑÑÑнÑй конÑÐµÐ½Ñ Ð´Ð»Ñ ÑденÑиÑÑкаÑоÑа веÑÑÑÑ $1.",
"apierror-missingparam-at-least-one-of": "{{PLURAL:$2|ÐаÑамеÑÑ|ЩонайменÑе один паÑамеÑÑÑв}} $1 Ñ Ð¾Ð±Ð¾Ð²'Ñзковим.",
"apierror-missingparam-one-of": "{{PLURAL:$2|ÐаÑамеÑÑ|Ðдин з паÑамеÑÑÑв}} $1 Ñ Ð¾Ð±Ð¾Ð²'Ñзковим.",
"apierror-missingparam": "ÐаÑамеÑÑ $1 Ð¼Ð°Ñ Ð±ÑÑи заповнений.",
"apierror-missingrev-pageid": "ÐÐµÐ¼Ð°Ñ Ð¿Ð¾ÑоÑÐ½Ð¾Ñ Ð²ÐµÑÑÑÑ ÑÑоÑÑнки з ÑденÑиÑÑкаÑоÑом $1.",
+ "apierror-missingrev-title": "ÐÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ $1 вÑдÑÑÑÐ½Ñ Ð¿Ð¾ÑоÑна веÑÑÑÑ.",
"apierror-missingtitle-createonly": "ÐÑдÑÑÑÐ½Ñ Ð½Ð°Ð·Ð²Ð¸ можна заÑ
иÑÑиÑи ÑÑлÑки ÑеÑез create .",
"apierror-missingtitle": "Ðказана Ðами ÑÑоÑÑнка не ÑÑнÑÑ.",
"apierror-missingtitle-byname": "СÑоÑÑнка $1 не ÑÑнÑÑ.",
@@ -1692,6 +1702,7 @@
"apiwarn-badurlparam": "Ðе вдалоÑÑ Ð¿Ð°ÑÑиÑи $1urlparam Ð´Ð»Ñ $2. ÐикоÑиÑÑовÑÑÑÑÑÑ Ð»Ð¸Ñе ÑиÑина Ñ Ð²Ð¸ÑоÑа.",
"apiwarn-badutf8": "ÐнаÑеннÑ, вказане Ð´Ð»Ñ $1 , мÑÑÑиÑÑ Ð½ÐµÐ´ÑйÑÐ½Ñ Ð°Ð±Ð¾ неноÑмалÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð´Ð°Ð½Ñ. ТекÑÑÐ¾Ð²Ñ Ð´Ð°Ð½Ñ Ð¼Ð°ÑÑÑ Ð±ÑÑи дÑйÑними, NFC-ноÑмалÑзований Unicode без конÑÑолÑниÑ
ÑимволÑв C0, окÑÑм HT (\\t), LF (\\n), Ñ CR (\\r).",
"apiwarn-checktoken-percentencoding": "ÐеÑевÑÑÑе, Ñи Ñимволи, ÑÐ°ÐºÑ Ñк «+» Ñ ÑокенÑ, пÑойÑли пÑавилÑне пÑоÑенÑне кодÑÐ²Ð°Ð½Ð½Ñ Ð² URL.",
+ "apiwarn-compare-nocontentmodel": "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°ÑиÑи конÑенÑÐ½Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ, пÑипÑÑкаÑмо $1.",
"apiwarn-deprecation-deletedrevs": "list=deletedrevs Ñ Ð·Ð°ÑÑаÑÑлим. ÐÑÐ´Ñ Ð»Ð°Ñка, викоÑиÑÑовÑйÑе замÑÑÑÑ Ð½Ñого prop=deletedrevisions або list=alldeletedrevisions .",
"apiwarn-deprecation-expandtemplates-prop": "ÐÑкÑлÑки не задано жодниÑ
знаÑÐµÐ½Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа prop , Ñк виÑ
ÑÐ´Ð½Ñ Ð´Ð°Ð½Ñ Ð±Ñло викоÑиÑÑано ÑÑаÑий ÑоÑмаÑ. Цей ÑоÑÐ¼Ð°Ñ Ñ Ð·Ð°ÑÑаÑÑлим, Ñ Ð² майбÑÑнÑÐ¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ prop бÑде задано ÑÑандаÑÑне знаÑеннÑ, наÑлÑдком Ñого ÑÑане Ñе, Ñо завжди викоÑиÑÑовÑваÑимеÑÑÑÑ Ð½Ð¾Ð²Ð¸Ð¹ ÑоÑмаÑ.",
"apiwarn-deprecation-httpsexpected": "ÐикоÑиÑÑано HTTP, ÑÐ¾Ð´Ñ Ñк оÑÑкÑвалоÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ HTTPS.",
diff --git a/includes/changes/ChangesList.php b/includes/changes/ChangesList.php
index cac476929b..bc50096f1b 100644
--- a/includes/changes/ChangesList.php
+++ b/includes/changes/ChangesList.php
@@ -182,9 +182,9 @@ class ChangesList extends ContextSource {
$classes[] = self::CSS_CLASS_PREFIX . 'edit';
$classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns' .
$rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
- $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns-' .
- $rc->mAttribs['rc_namespace'] );
}
+ $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns-' .
+ $rc->mAttribs['rc_namespace'] );
// Indicate watched status on the line to allow for more
// comprehensive styling.
diff --git a/includes/changes/EnhancedChangesList.php b/includes/changes/EnhancedChangesList.php
index 8e24efe77b..0df6828162 100644
--- a/includes/changes/EnhancedChangesList.php
+++ b/includes/changes/EnhancedChangesList.php
@@ -383,7 +383,7 @@ class EnhancedChangesList extends ChangesList {
) {
$classes[] = 'mw-enhanced-watched';
}
- $classes = array_merge( $classes, $this->getHTMLClassesForFilters( $rcObj ) );
+ $classes = array_merge( $classes, $this->getHTMLClasses( $rcObj, $rcObj->watched ) );
$separator = ' . . ';
diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php
index 34f285235a..ed8cbb4ca3 100644
--- a/includes/diff/DifferenceEngine.php
+++ b/includes/diff/DifferenceEngine.php
@@ -181,7 +181,8 @@ class DifferenceEngine extends ContextSource {
public function deletedLink( $id ) {
if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
$dbr = wfGetDB( DB_REPLICA );
- $row = $dbr->selectRow( 'archive', '*',
+ $row = $dbr->selectRow( 'archive',
+ Revision::selectArchiveFields(),
[ 'ar_rev_id' => $id ],
__METHOD__ );
if ( $row ) {
diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php
index 8aea7abade..96e7a7e7f9 100644
--- a/includes/filerepo/file/LocalFile.php
+++ b/includes/filerepo/file/LocalFile.php
@@ -1129,11 +1129,9 @@ class LocalFile extends File {
if ( $this->historyLine == 0 ) { // called for the first time, return line from cur
$this->historyRes = $dbr->select( 'image',
- [
- '*',
- "'' AS oi_archive_name",
- '0 as oi_deleted',
- 'img_sha1'
+ self::selectFields() + [
+ 'oi_archive_name' => $dbr->addQuotes( '' ),
+ 'oi_deleted' => 0,
],
[ 'img_name' => $this->title->getDBkey() ],
$fname
@@ -1145,7 +1143,9 @@ class LocalFile extends File {
return false;
}
} elseif ( $this->historyLine == 1 ) {
- $this->historyRes = $dbr->select( 'oldimage', '*',
+ $this->historyRes = $dbr->select(
+ 'oldimage',
+ OldLocalFile::selectFields(),
[ 'oi_name' => $this->title->getDBkey() ],
$fname,
[ 'ORDER BY' => 'oi_timestamp DESC' ]
diff --git a/includes/htmlform/HTMLFormField.php b/includes/htmlform/HTMLFormField.php
index dfd18ba4c9..e642c2cdd0 100644
--- a/includes/htmlform/HTMLFormField.php
+++ b/includes/htmlform/HTMLFormField.php
@@ -1076,33 +1076,8 @@ abstract class HTMLFormField {
$this->mOptionsLabelsNotFromMessage = true;
$this->mOptions = self::forceToStringRecursive( $this->mParams['options'] );
} elseif ( array_key_exists( 'options-message', $this->mParams ) ) {
- /** @todo This is copied from Xml::listDropDown(), deprecate/avoid duplication? */
$message = $this->getMessage( $this->mParams['options-message'] )->inContentLanguage()->plain();
-
- $optgroup = false;
- $this->mOptions = [];
- foreach ( explode( "\n", $message ) as $option ) {
- $value = trim( $option );
- if ( $value == '' ) {
- continue;
- } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
- # A new group is starting...
- $value = trim( substr( $value, 1 ) );
- $optgroup = $value;
- } elseif ( substr( $value, 0, 2 ) == '**' ) {
- # groupmember
- $opt = trim( substr( $value, 2 ) );
- if ( $optgroup === false ) {
- $this->mOptions[$opt] = $opt;
- } else {
- $this->mOptions[$optgroup][$opt] = $opt;
- }
- } else {
- # groupless reason list
- $optgroup = false;
- $this->mOptions[$option] = $option;
- }
- }
+ $this->mOptions = Xml::listDropDownOptions( $message );
} else {
$this->mOptions = null;
}
@@ -1122,16 +1097,7 @@ abstract class HTMLFormField {
return null;
}
- $options = [];
-
- foreach ( $oldoptions as $text => $data ) {
- $options[] = [
- 'data' => (string)$data,
- 'label' => (string)$text,
- ];
- }
-
- return $options;
+ return Xml::listDropDownOptionsOoui( $oldoptions );
}
/**
diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php
index e5a5c9445c..07aeb13d1d 100644
--- a/includes/installer/PostgresUpdater.php
+++ b/includes/installer/PostgresUpdater.php
@@ -783,7 +783,8 @@ END;
$info = $this->db->fieldInfo( $table, $field );
if ( $info->defaultValue() !== $default ) {
$this->output( "Changing '$table.$field' default value\n" );
- $this->db->query( "ALTER TABLE $table ALTER $field SET DEFAULT " . $default );
+ $this->db->query( "ALTER TABLE $table ALTER $field SET DEFAULT "
+ . $this->db->addQuotes( $default ) );
}
}
diff --git a/includes/jobqueue/JobQueueMemory.php b/includes/jobqueue/JobQueueMemory.php
index 649e2af989..f9e2c3dc41 100644
--- a/includes/jobqueue/JobQueueMemory.php
+++ b/includes/jobqueue/JobQueueMemory.php
@@ -177,7 +177,7 @@ class JobQueueMemory extends JobQueue {
return new MappedIterator(
$unclaimed,
function ( $value ) {
- $this->jobFromSpecInternal( $value );
+ return $this->jobFromSpecInternal( $value );
}
);
}
@@ -196,7 +196,7 @@ class JobQueueMemory extends JobQueue {
return new MappedIterator(
$claimed,
function ( $value ) {
- $this->jobFromSpecInternal( $value );
+ return $this->jobFromSpecInternal( $value );
}
);
}
diff --git a/includes/page/Article.php b/includes/page/Article.php
index 5b03a22a2f..b91bd9a88a 100644
--- a/includes/page/Article.php
+++ b/includes/page/Article.php
@@ -1695,24 +1695,11 @@ class Article implements Page {
$outputPage->enableOOUI();
- $options = [];
- $options[] = [
- 'data' => 'other',
- 'label' => $ctx->msg( 'deletereasonotherlist' )->inContentLanguage()->text(),
- ];
- $list = $ctx->msg( 'deletereason-dropdown' )->inContentLanguage()->text();
- foreach ( explode( "\n", $list ) as $option ) {
- $value = trim( $option );
- if ( $value == '' ) {
- continue;
- } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
- $options[] = [ 'optgroup' => trim( substr( $value, 1 ) ) ];
- } elseif ( substr( $value, 0, 2 ) == '**' ) {
- $options[] = [ 'data' => trim( substr( $value, 2 ) ) ];
- } else {
- $options[] = [ 'data' => trim( $value ) ];
- }
- }
+ $options = Xml::listDropDownOptions(
+ $ctx->msg( 'deletereason-dropdown' )->inContentLanguage()->text(),
+ [ 'other' => $ctx->msg( 'deletereasonotherlist' )->inContentLanguage()->text() ]
+ );
+ $options = Xml::listDropDownOptionsOoui( $options );
$fields[] = new OOUI\FieldLayout(
new OOUI\DropdownInputWidget( [
diff --git a/includes/page/ImageHistoryPseudoPager.php b/includes/page/ImageHistoryPseudoPager.php
index 4785ef1ad4..20bc614b51 100644
--- a/includes/page/ImageHistoryPseudoPager.php
+++ b/includes/page/ImageHistoryPseudoPager.php
@@ -55,8 +55,7 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
public function __construct( $imagePage ) {
parent::__construct( $imagePage->getContext() );
$this->mImagePage = $imagePage;
- $this->mTitle = clone $imagePage->getTitle();
- $this->mTitle->setFragment( '#filehistory' );
+ $this->mTitle = $imagePage->getTitle()->createFragmentTarget( 'filehistory' );
$this->mImg = null;
$this->mHist = [];
$this->mRange = [ 0, 0 ]; // display range
diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php
index 6fc36f6858..bbf22ba2d4 100644
--- a/includes/page/WikiPage.php
+++ b/includes/page/WikiPage.php
@@ -1921,10 +1921,10 @@ class WikiPage implements Page, IDBAccessObject {
$wikiPage = $this;
// Trigger post-create hook
$params = [ &$wikiPage, &$user, $content, $summary,
- $flags & EDIT_MINOR, null, null, &$flags, $revision ];
+ $flags & EDIT_MINOR, null, null, &$flags, $revision ];
Hooks::run( 'PageContentInsertComplete', $params );
// Trigger post-save hook
- $params = array_merge( $params, [ &$status, $meta['baseRevId'] ] );
+ $params = array_merge( $params, [ &$status, $meta['baseRevId'], 0 ] );
Hooks::run( 'PageContentSaveComplete', $params );
}
),
diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php
index ff4936d035..e901f6f311 100644
--- a/includes/parser/Parser.php
+++ b/includes/parser/Parser.php
@@ -4204,6 +4204,8 @@ class Parser {
# Save headline for section edit hint before it's escaped
$headlineHint = $safeHeadline;
+ # Decode HTML entities
+ $safeHeadline = Sanitizer::decodeCharReferences( $safeHeadline );
$fallbackHeadline = Sanitizer::escapeIdForAttribute( $safeHeadline, Sanitizer::ID_FALLBACK );
$linkAnchor = Sanitizer::escapeIdForLink( $safeHeadline );
$safeHeadline = Sanitizer::escapeIdForAttribute( $safeHeadline, Sanitizer::ID_PRIMARY );
@@ -5764,6 +5766,7 @@ class Parser {
# Strip out wikitext links(they break the anchor)
$text = $this->stripSectionName( $text );
$text = Sanitizer::normalizeSectionNameWhitespace( $text );
+ $text = Sanitizer::decodeCharReferences( $text );
return '#' . Sanitizer::escapeIdForLink( $text );
}
@@ -5782,6 +5785,7 @@ class Parser {
# Strip out wikitext links(they break the anchor)
$text = $this->stripSectionName( $text );
$text = Sanitizer::normalizeSectionNameWhitespace( $text );
+ $text = Sanitizer::decodeCharReferences( $text );
if ( isset( $wgFragmentMode[1] ) && $wgFragmentMode[1] === 'legacy' ) {
// ForAttribute() and ForLink() are the same for legacy encoding
diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php
index 06319e5575..3480a51f3c 100644
--- a/includes/parser/ParserOutput.php
+++ b/includes/parser/ParserOutput.php
@@ -259,7 +259,7 @@ class ParserOutput extends CacheTime {
global $wgOut, $wgLang;
$editsectionPage = Title::newFromText( htmlspecialchars_decode( $m[1] ) );
$editsectionSection = htmlspecialchars_decode( $m[2] );
- $editsectionContent = isset( $m[4] ) ? $m[3] : null;
+ $editsectionContent = isset( $m[4] ) ? Sanitizer::decodeCharReferences( $m[3] ) : null;
if ( !is_object( $editsectionPage ) ) {
throw new MWException( "Bad parser output text." );
diff --git a/includes/skins/Skin.php b/includes/skins/Skin.php
index df7a9edede..8fb0d1c091 100644
--- a/includes/skins/Skin.php
+++ b/includes/skins/Skin.php
@@ -1057,10 +1057,10 @@ abstract class Skin extends ContextSource {
$targetUser = User::newFromId( $id );
}
- # The sending user must have a confirmed email address and the target
- # user must have a confirmed email address and allow emails from users.
- return $this->getUser()->canSendEmail() &&
- $targetUser->canReceiveEmail();
+ # The sending user must have a confirmed email address and the receiving
+ # user must accept emails from the sender.
+ return $this->getUser()->canSendEmail()
+ && SpecialEmailUser::validateTarget( $targetUser, $this->getUser() ) === '';
}
/**
@@ -1578,8 +1578,6 @@ abstract class Skin extends ContextSource {
$attribs = [];
if ( !is_null( $tooltip ) ) {
- # T27462: undo double-escaping.
- $tooltip = Sanitizer::decodeCharReferences( $tooltip );
$attribs['title'] = wfMessage( 'editsectionhint' )->rawParams( $tooltip )
->inLanguage( $lang )->text();
}
@@ -1611,7 +1609,7 @@ abstract class Skin extends ContextSource {
$result .= implode(
''
- . wfMessage( 'pipe-separator' )->inLanguage( $lang )->text()
+ . wfMessage( 'pipe-separator' )->inLanguage( $lang )->escaped()
. ' ',
$linksHtml
);
diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php
index 0762bf7f8d..6114b31095 100644
--- a/includes/specialpage/ChangesListSpecialPage.php
+++ b/includes/specialpage/ChangesListSpecialPage.php
@@ -602,10 +602,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
'wgStructuredChangeFiltersEnableExperimentalViews',
$experimentalStructuredChangeFilters
);
- $out->addJsConfigVars(
- 'wgStructuredChangeFiltersEnableLiveUpdate',
- $this->getConfig()->get( 'StructuredChangeFiltersEnableLiveUpdate' )
- );
$out->addJsConfigVars(
'wgRCFiltersChangeTags',
$this->buildChangeTagList()
diff --git a/includes/specials/SpecialEditWatchlist.php b/includes/specials/SpecialEditWatchlist.php
index e1ecfe8cd5..d2940e4a02 100644
--- a/includes/specials/SpecialEditWatchlist.php
+++ b/includes/specials/SpecialEditWatchlist.php
@@ -770,38 +770,3 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
);
}
}
-
-/**
- * Extend HTMLForm purely so we can have a more sane way of getting the section headers
- */
-class EditWatchlistNormalHTMLForm extends HTMLForm {
- public function getLegend( $namespace ) {
- $namespace = substr( $namespace, 2 );
-
- return $namespace == NS_MAIN
- ? $this->msg( 'blanknamespace' )->escaped()
- : htmlspecialchars( $this->getContext()->getLanguage()->getFormattedNsText( $namespace ) );
- }
-
- public function getBody() {
- return $this->displaySection( $this->mFieldTree, '', 'editwatchlist-' );
- }
-}
-
-class EditWatchlistCheckboxSeriesField extends HTMLMultiSelectField {
- /**
- * HTMLMultiSelectField throws validation errors if we get input data
- * that doesn't match the data set in the form setup. This causes
- * problems if something gets removed from the watchlist while the
- * form is open (T34126), but we know that invalid items will
- * be harmless so we can override it here.
- *
- * @param string $value The value the field was submitted with
- * @param array $alldata The data collected from the form
- * @return bool|string Bool true on success, or String error to display.
- */
- function validate( $value, $alldata ) {
- // Need to call into grandparent to be a good citizen. :)
- return HTMLFormField::validate( $value, $alldata );
- }
-}
diff --git a/includes/specials/SpecialEmailuser.php b/includes/specials/SpecialEmailuser.php
index 830b43817f..249be7f17f 100644
--- a/includes/specials/SpecialEmailuser.php
+++ b/includes/specials/SpecialEmailuser.php
@@ -44,7 +44,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
}
public function getDescription() {
- $target = self::getTarget( $this->mTarget );
+ $target = self::getTarget( $this->mTarget, $this->getUser() );
if ( !$target instanceof User ) {
return $this->msg( 'emailuser-title-notarget' )->text();
}
@@ -142,7 +142,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
throw new ErrorPageError( $title, $msg, $params );
}
// Got a valid target user name? Else ask for one.
- $ret = self::getTarget( $this->mTarget );
+ $ret = self::getTarget( $this->mTarget, $this->getUser() );
if ( !$ret instanceof User ) {
if ( $this->mTarget != '' ) {
// Messages used here: notargettext, noemailtext, nowikiemailtext
@@ -187,9 +187,14 @@ class SpecialEmailUser extends UnlistedSpecialPage {
* Validate target User
*
* @param string $target Target user name
- * @return User User object on success or a string on error
+ * @param User|null $sender User sending the email
+ * @return User|string User object on success or a string on error
*/
- public static function getTarget( $target ) {
+ public static function getTarget( $target, User $sender = null ) {
+ if ( $sender === null ) {
+ wfDeprecated( __METHOD__ . ' without specifying the sending user', '1.30' );
+ }
+
if ( $target == '' ) {
wfDebug( "Target is empty.\n" );
@@ -197,21 +202,50 @@ class SpecialEmailUser extends UnlistedSpecialPage {
}
$nu = User::newFromName( $target );
- if ( !$nu instanceof User || !$nu->getId() ) {
+ $error = self::validateTarget( $nu, $sender );
+
+ return $error ? $error : $nu;
+ }
+
+ /**
+ * Validate target User
+ *
+ * @param User $target Target user
+ * @param User|null $sender User sending the email
+ * @return string Error message or empty string if valid.
+ * @since 1.30
+ */
+ public static function validateTarget( $target, User $sender = null ) {
+ if ( $sender === null ) {
+ wfDeprecated( __METHOD__ . ' without specifying the sending user', '1.30' );
+ }
+
+ if ( !$target instanceof User || !$target->getId() ) {
wfDebug( "Target is invalid user.\n" );
return 'notarget';
- } elseif ( !$nu->isEmailConfirmed() ) {
+ } elseif ( !$target->isEmailConfirmed() ) {
wfDebug( "User has no valid email.\n" );
return 'noemail';
- } elseif ( !$nu->canReceiveEmail() ) {
+ } elseif ( !$target->canReceiveEmail() ) {
wfDebug( "User does not allow user emails.\n" );
return 'nowikiemail';
+ } elseif ( $sender !== null ) {
+ $blacklist = $target->getOption( 'email-blacklist', [] );
+ if ( $blacklist ) {
+ $lookup = CentralIdLookup::factory();
+ $senderId = $lookup->centralIdFromLocalUser( $sender );
+ if ( $senderId !== 0 && in_array( $senderId, $blacklist ) ) {
+ wfDebug( "User does not allow user emails from this user.\n" );
+
+ return 'nowikiemail';
+ }
+ }
}
- return $nu;
+ return '';
}
/**
@@ -326,7 +360,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
public static function submit( array $data, IContextSource $context ) {
$config = $context->getConfig();
- $target = self::getTarget( $data['Target'] );
+ $target = self::getTarget( $data['Target'], $context->getUser() );
if ( !$target instanceof User ) {
// Messages used here: notargettext, noemailtext, nowikiemailtext
return Status::newFatal( $target . 'text' );
diff --git a/includes/specials/SpecialImport.php b/includes/specials/SpecialImport.php
index beb454d669..9ce52ef013 100644
--- a/includes/specials/SpecialImport.php
+++ b/includes/specials/SpecialImport.php
@@ -24,8 +24,6 @@
* @ingroup SpecialPage
*/
-use MediaWiki\MediaWikiServices;
-
/**
* MediaWiki page data importer
*
@@ -524,172 +522,3 @@ class SpecialImport extends SpecialPage {
return 'pagetools';
}
}
-
-/**
- * Reporting callback
- * @ingroup SpecialPage
- */
-class ImportReporter extends ContextSource {
- private $reason = false;
- private $logTags = [];
- private $mOriginalLogCallback = null;
- private $mOriginalPageOutCallback = null;
- private $mLogItemCount = 0;
-
- /**
- * @param WikiImporter $importer
- * @param bool $upload
- * @param string $interwiki
- * @param string|bool $reason
- */
- function __construct( $importer, $upload, $interwiki, $reason = false ) {
- $this->mOriginalPageOutCallback =
- $importer->setPageOutCallback( [ $this, 'reportPage' ] );
- $this->mOriginalLogCallback =
- $importer->setLogItemCallback( [ $this, 'reportLogItem' ] );
- $importer->setNoticeCallback( [ $this, 'reportNotice' ] );
- $this->mPageCount = 0;
- $this->mIsUpload = $upload;
- $this->mInterwiki = $interwiki;
- $this->reason = $reason;
- }
-
- /**
- * Sets change tags to apply to the import log entry and null revision.
- *
- * @param array $tags
- * @since 1.29
- */
- public function setChangeTags( array $tags ) {
- $this->logTags = $tags;
- }
-
- function open() {
- $this->getOutput()->addHTML( "\n" );
- }
-
- function reportNotice( $msg, array $params ) {
- $this->getOutput()->addHTML(
- Html::element( 'li', [], $this->msg( $msg, $params )->text() )
- );
- }
-
- function reportLogItem( /* ... */ ) {
- $this->mLogItemCount++;
- if ( is_callable( $this->mOriginalLogCallback ) ) {
- call_user_func_array( $this->mOriginalLogCallback, func_get_args() );
- }
- }
-
- /**
- * @param Title $title
- * @param ForeignTitle $foreignTitle
- * @param int $revisionCount
- * @param int $successCount
- * @param array $pageInfo
- * @return void
- */
- public function reportPage( $title, $foreignTitle, $revisionCount,
- $successCount, $pageInfo ) {
- $args = func_get_args();
- call_user_func_array( $this->mOriginalPageOutCallback, $args );
-
- if ( $title === null ) {
- # Invalid or non-importable title; a notice is already displayed
- return;
- }
-
- $this->mPageCount++;
- $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
- if ( $successCount > 0 ) {
- // prevents jumbling of the versions count
- // in RTL wikis in case the page title is LTR
- $this->getOutput()->addHTML(
- "" . $linkRenderer->makeLink( $title ) . " " .
- "" .
- $this->msg( 'import-revision-count' )->numParams( $successCount )->escaped() .
- " " .
- " \n"
- );
-
- $logParams = [ '4:number:count' => $successCount ];
- if ( $this->mIsUpload ) {
- $detail = $this->msg( 'import-logentry-upload-detail' )->numParams(
- $successCount )->inContentLanguage()->text();
- $action = 'upload';
- } else {
- $pageTitle = $foreignTitle->getFullText();
- $fullInterwikiPrefix = $this->mInterwiki;
- Hooks::run( 'ImportLogInterwikiLink', [ &$fullInterwikiPrefix, &$pageTitle ] );
-
- $interwikiTitleStr = $fullInterwikiPrefix . ':' . $pageTitle;
- $interwiki = '[[:' . $interwikiTitleStr . ']]';
- $detail = $this->msg( 'import-logentry-interwiki-detail' )->numParams(
- $successCount )->params( $interwiki )->inContentLanguage()->text();
- $action = 'interwiki';
- $logParams['5:title-link:interwiki'] = $interwikiTitleStr;
- }
- if ( $this->reason ) {
- $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
- . $this->reason;
- }
-
- $comment = $detail; // quick
- $dbw = wfGetDB( DB_MASTER );
- $latest = $title->getLatestRevID();
- $nullRevision = Revision::newNullRevision(
- $dbw,
- $title->getArticleID(),
- $comment,
- true,
- $this->getUser()
- );
-
- $nullRevId = null;
- if ( !is_null( $nullRevision ) ) {
- $nullRevId = $nullRevision->insertOn( $dbw );
- $page = WikiPage::factory( $title );
- # Update page record
- $page->updateRevisionOn( $dbw, $nullRevision );
- Hooks::run(
- 'NewRevisionFromEditComplete',
- [ $page, $nullRevision, $latest, $this->getUser() ]
- );
- }
-
- // Create the import log entry
- $logEntry = new ManualLogEntry( 'import', $action );
- $logEntry->setTarget( $title );
- $logEntry->setComment( $this->reason );
- $logEntry->setPerformer( $this->getUser() );
- $logEntry->setParameters( $logParams );
- $logid = $logEntry->insert();
- if ( count( $this->logTags ) ) {
- $logEntry->setTags( $this->logTags );
- }
- // Make sure the null revision will be tagged as well
- $logEntry->setAssociatedRevId( $nullRevId );
-
- $logEntry->publish( $logid );
-
- } else {
- $this->getOutput()->addHTML( "" . $linkRenderer->makeKnownLink( $title ) . " " .
- $this->msg( 'import-nonewrevisions' )->escaped() . " \n" );
- }
- }
-
- function close() {
- $out = $this->getOutput();
- if ( $this->mLogItemCount > 0 ) {
- $msg = $this->msg( 'imported-log-entries' )->numParams( $this->mLogItemCount )->parse();
- $out->addHTML( Xml::tags( 'li', null, $msg ) );
- } elseif ( $this->mPageCount == 0 && $this->mLogItemCount == 0 ) {
- $out->addHTML( " \n" );
-
- return Status::newFatal( 'importnopages' );
- }
- $out->addHTML( "\n" );
-
- return Status::newGood( $this->mPageCount );
- }
-}
diff --git a/includes/specials/SpecialUpload.php b/includes/specials/SpecialUpload.php
index b98fad1997..59f97960bf 100644
--- a/includes/specials/SpecialUpload.php
+++ b/includes/specials/SpecialUpload.php
@@ -22,7 +22,6 @@
* @ingroup Upload
*/
-use MediaWiki\Linker\LinkRenderer;
use MediaWiki\MediaWikiServices;
/**
@@ -846,476 +845,3 @@ class SpecialUpload extends SpecialPage {
return $bitmapHandler->autoRotateEnabled();
}
}
-
-/**
- * Sub class of HTMLForm that provides the form section of SpecialUpload
- */
-class UploadForm extends HTMLForm {
- protected $mWatch;
- protected $mForReUpload;
- protected $mSessionKey;
- protected $mHideIgnoreWarning;
- protected $mDestWarningAck;
- protected $mDestFile;
-
- protected $mComment;
- protected $mTextTop;
- protected $mTextAfterSummary;
-
- protected $mSourceIds;
-
- protected $mMaxFileSize = [];
-
- protected $mMaxUploadSize = [];
-
- public function __construct( array $options = [], IContextSource $context = null,
- LinkRenderer $linkRenderer = null
- ) {
- if ( $context instanceof IContextSource ) {
- $this->setContext( $context );
- }
-
- if ( !$linkRenderer ) {
- $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
- }
-
- $this->mWatch = !empty( $options['watch'] );
- $this->mForReUpload = !empty( $options['forreupload'] );
- $this->mSessionKey = isset( $options['sessionkey'] ) ? $options['sessionkey'] : '';
- $this->mHideIgnoreWarning = !empty( $options['hideignorewarning'] );
- $this->mDestWarningAck = !empty( $options['destwarningack'] );
- $this->mDestFile = isset( $options['destfile'] ) ? $options['destfile'] : '';
-
- $this->mComment = isset( $options['description'] ) ?
- $options['description'] : '';
-
- $this->mTextTop = isset( $options['texttop'] )
- ? $options['texttop'] : '';
-
- $this->mTextAfterSummary = isset( $options['textaftersummary'] )
- ? $options['textaftersummary'] : '';
-
- $sourceDescriptor = $this->getSourceSection();
- $descriptor = $sourceDescriptor
- + $this->getDescriptionSection()
- + $this->getOptionsSection();
-
- Hooks::run( 'UploadFormInitDescriptor', [ &$descriptor ] );
- parent::__construct( $descriptor, $context, 'upload' );
-
- # Add a link to edit MediaWiki:Licenses
- if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
- $this->getOutput()->addModuleStyles( 'mediawiki.special.upload.styles' );
- $licensesLink = $linkRenderer->makeKnownLink(
- $this->msg( 'licenses' )->inContentLanguage()->getTitle(),
- $this->msg( 'licenses-edit' )->text(),
- [],
- [ 'action' => 'edit' ]
- );
- $editLicenses = '' . $licensesLink . '
';
- $this->addFooterText( $editLicenses, 'description' );
- }
-
- # Set some form properties
- $this->setSubmitText( $this->msg( 'uploadbtn' )->text() );
- $this->setSubmitName( 'wpUpload' );
- # Used message keys: 'accesskey-upload', 'tooltip-upload'
- $this->setSubmitTooltip( 'upload' );
- $this->setId( 'mw-upload-form' );
-
- # Build a list of IDs for javascript insertion
- $this->mSourceIds = [];
- foreach ( $sourceDescriptor as $field ) {
- if ( !empty( $field['id'] ) ) {
- $this->mSourceIds[] = $field['id'];
- }
- }
- }
-
- /**
- * Get the descriptor of the fieldset that contains the file source
- * selection. The section is 'source'
- *
- * @return array Descriptor array
- */
- protected function getSourceSection() {
- if ( $this->mSessionKey ) {
- return [
- 'SessionKey' => [
- 'type' => 'hidden',
- 'default' => $this->mSessionKey,
- ],
- 'SourceType' => [
- 'type' => 'hidden',
- 'default' => 'Stash',
- ],
- ];
- }
-
- $canUploadByUrl = UploadFromUrl::isEnabled()
- && ( UploadFromUrl::isAllowed( $this->getUser() ) === true )
- && $this->getConfig()->get( 'CopyUploadsFromSpecialUpload' );
- $radio = $canUploadByUrl;
- $selectedSourceType = strtolower( $this->getRequest()->getText( 'wpSourceType', 'File' ) );
-
- $descriptor = [];
- if ( $this->mTextTop ) {
- $descriptor['UploadFormTextTop'] = [
- 'type' => 'info',
- 'section' => 'source',
- 'default' => $this->mTextTop,
- 'raw' => true,
- ];
- }
-
- $this->mMaxUploadSize['file'] = min(
- UploadBase::getMaxUploadSize( 'file' ),
- UploadBase::getMaxPhpUploadSize()
- );
-
- $help = $this->msg( 'upload-maxfilesize',
- $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
- )->parse();
-
- // If the user can also upload by URL, there are 2 different file size limits.
- // This extra message helps stress which limit corresponds to what.
- if ( $canUploadByUrl ) {
- $help .= $this->msg( 'word-separator' )->escaped();
- $help .= $this->msg( 'upload_source_file' )->parse();
- }
-
- $descriptor['UploadFile'] = [
- 'class' => 'UploadSourceField',
- 'section' => 'source',
- 'type' => 'file',
- 'id' => 'wpUploadFile',
- 'radio-id' => 'wpSourceTypeFile',
- 'label-message' => 'sourcefilename',
- 'upload-type' => 'File',
- 'radio' => &$radio,
- 'help' => $help,
- 'checked' => $selectedSourceType == 'file',
- ];
-
- if ( $canUploadByUrl ) {
- $this->mMaxUploadSize['url'] = UploadBase::getMaxUploadSize( 'url' );
- $descriptor['UploadFileURL'] = [
- 'class' => 'UploadSourceField',
- 'section' => 'source',
- 'id' => 'wpUploadFileURL',
- 'radio-id' => 'wpSourceTypeurl',
- 'label-message' => 'sourceurl',
- 'upload-type' => 'url',
- 'radio' => &$radio,
- 'help' => $this->msg( 'upload-maxfilesize',
- $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
- )->parse() .
- $this->msg( 'word-separator' )->escaped() .
- $this->msg( 'upload_source_url' )->parse(),
- 'checked' => $selectedSourceType == 'url',
- ];
- }
- Hooks::run( 'UploadFormSourceDescriptors', [ &$descriptor, &$radio, $selectedSourceType ] );
-
- $descriptor['Extensions'] = [
- 'type' => 'info',
- 'section' => 'source',
- 'default' => $this->getExtensionsMessage(),
- 'raw' => true,
- ];
-
- return $descriptor;
- }
-
- /**
- * Get the messages indicating which extensions are preferred and prohibitted.
- *
- * @return string HTML string containing the message
- */
- protected function getExtensionsMessage() {
- # Print a list of allowed file extensions, if so configured. We ignore
- # MIME type here, it's incomprehensible to most people and too long.
- $config = $this->getConfig();
-
- if ( $config->get( 'CheckFileExtensions' ) ) {
- $fileExtensions = array_unique( $config->get( 'FileExtensions' ) );
- if ( $config->get( 'StrictFileExtensions' ) ) {
- # Everything not permitted is banned
- $extensionsList =
- '' .
- $this->msg( 'upload-permitted' )
- ->params( $this->getLanguage()->commaList( $fileExtensions ) )
- ->numParams( count( $fileExtensions ) )
- ->parseAsBlock() .
- "
\n";
- } else {
- # We have to list both preferred and prohibited
- $fileBlacklist = array_unique( $config->get( 'FileBlacklist' ) );
- $extensionsList =
- '' .
- $this->msg( 'upload-preferred' )
- ->params( $this->getLanguage()->commaList( $fileExtensions ) )
- ->numParams( count( $fileExtensions ) )
- ->parseAsBlock() .
- "
\n" .
- '' .
- $this->msg( 'upload-prohibited' )
- ->params( $this->getLanguage()->commaList( $fileBlacklist ) )
- ->numParams( count( $fileBlacklist ) )
- ->parseAsBlock() .
- "
\n";
- }
- } else {
- # Everything is permitted.
- $extensionsList = '';
- }
-
- return $extensionsList;
- }
-
- /**
- * Get the descriptor of the fieldset that contains the file description
- * input. The section is 'description'
- *
- * @return array Descriptor array
- */
- protected function getDescriptionSection() {
- $config = $this->getConfig();
- if ( $this->mSessionKey ) {
- $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
- try {
- $file = $stash->getFile( $this->mSessionKey );
- } catch ( Exception $e ) {
- $file = null;
- }
- if ( $file ) {
- global $wgContLang;
-
- $mto = $file->transform( [ 'width' => 120 ] );
- if ( $mto ) {
- $this->addHeaderText(
- '' .
- Html::element( 'img', [
- 'src' => $mto->getUrl(),
- 'class' => 'thumbimage',
- ] ) . '
', 'description' );
- }
- }
- }
-
- $descriptor = [
- 'DestFile' => [
- 'type' => 'text',
- 'section' => 'description',
- 'id' => 'wpDestFile',
- 'label-message' => 'destfilename',
- 'size' => 60,
- 'default' => $this->mDestFile,
- # @todo FIXME: Hack to work around poor handling of the 'default' option in HTMLForm
- 'nodata' => strval( $this->mDestFile ) !== '',
- ],
- 'UploadDescription' => [
- 'type' => 'textarea',
- 'section' => 'description',
- 'id' => 'wpUploadDescription',
- 'label-message' => $this->mForReUpload
- ? 'filereuploadsummary'
- : 'fileuploadsummary',
- 'default' => $this->mComment,
- 'cols' => 80,
- 'rows' => 8,
- ]
- ];
- if ( $this->mTextAfterSummary ) {
- $descriptor['UploadFormTextAfterSummary'] = [
- 'type' => 'info',
- 'section' => 'description',
- 'default' => $this->mTextAfterSummary,
- 'raw' => true,
- ];
- }
-
- $descriptor += [
- 'EditTools' => [
- 'type' => 'edittools',
- 'section' => 'description',
- 'message' => 'edittools-upload',
- ]
- ];
-
- if ( $this->mForReUpload ) {
- $descriptor['DestFile']['readonly'] = true;
- } else {
- $descriptor['License'] = [
- 'type' => 'select',
- 'class' => 'Licenses',
- 'section' => 'description',
- 'id' => 'wpLicense',
- 'label-message' => 'license',
- ];
- }
-
- if ( $config->get( 'UseCopyrightUpload' ) ) {
- $descriptor['UploadCopyStatus'] = [
- 'type' => 'text',
- 'section' => 'description',
- 'id' => 'wpUploadCopyStatus',
- 'label-message' => 'filestatus',
- ];
- $descriptor['UploadSource'] = [
- 'type' => 'text',
- 'section' => 'description',
- 'id' => 'wpUploadSource',
- 'label-message' => 'filesource',
- ];
- }
-
- return $descriptor;
- }
-
- /**
- * Get the descriptor of the fieldset that contains the upload options,
- * such as "watch this file". The section is 'options'
- *
- * @return array Descriptor array
- */
- protected function getOptionsSection() {
- $user = $this->getUser();
- if ( $user->isLoggedIn() ) {
- $descriptor = [
- 'Watchthis' => [
- 'type' => 'check',
- 'id' => 'wpWatchthis',
- 'label-message' => 'watchthisupload',
- 'section' => 'options',
- 'default' => $this->mWatch,
- ]
- ];
- }
- if ( !$this->mHideIgnoreWarning ) {
- $descriptor['IgnoreWarning'] = [
- 'type' => 'check',
- 'id' => 'wpIgnoreWarning',
- 'label-message' => 'ignorewarnings',
- 'section' => 'options',
- ];
- }
-
- $descriptor['DestFileWarningAck'] = [
- 'type' => 'hidden',
- 'id' => 'wpDestFileWarningAck',
- 'default' => $this->mDestWarningAck ? '1' : '',
- ];
-
- if ( $this->mForReUpload ) {
- $descriptor['ForReUpload'] = [
- 'type' => 'hidden',
- 'id' => 'wpForReUpload',
- 'default' => '1',
- ];
- }
-
- return $descriptor;
- }
-
- /**
- * Add the upload JS and show the form.
- */
- public function show() {
- $this->addUploadJS();
- parent::show();
- }
-
- /**
- * Add upload JS to the OutputPage
- */
- protected function addUploadJS() {
- $config = $this->getConfig();
-
- $useAjaxDestCheck = $config->get( 'UseAjax' ) && $config->get( 'AjaxUploadDestCheck' );
- $useAjaxLicensePreview = $config->get( 'UseAjax' ) &&
- $config->get( 'AjaxLicensePreview' ) && $config->get( 'EnableAPI' );
- $this->mMaxUploadSize['*'] = UploadBase::getMaxUploadSize();
-
- $scriptVars = [
- 'wgAjaxUploadDestCheck' => $useAjaxDestCheck,
- 'wgAjaxLicensePreview' => $useAjaxLicensePreview,
- 'wgUploadAutoFill' => !$this->mForReUpload &&
- // If we received mDestFile from the request, don't autofill
- // the wpDestFile textbox
- $this->mDestFile === '',
- 'wgUploadSourceIds' => $this->mSourceIds,
- 'wgCheckFileExtensions' => $config->get( 'CheckFileExtensions' ),
- 'wgStrictFileExtensions' => $config->get( 'StrictFileExtensions' ),
- 'wgFileExtensions' => array_values( array_unique( $config->get( 'FileExtensions' ) ) ),
- 'wgCapitalizeUploads' => MWNamespace::isCapitalized( NS_FILE ),
- 'wgMaxUploadSize' => $this->mMaxUploadSize,
- 'wgFileCanRotate' => SpecialUpload::rotationEnabled(),
- ];
-
- $out = $this->getOutput();
- $out->addJsConfigVars( $scriptVars );
-
- $out->addModules( [
- 'mediawiki.special.upload', // Extras for thumbnail and license preview.
- ] );
- }
-
- /**
- * Empty function; submission is handled elsewhere.
- *
- * @return bool False
- */
- function trySubmit() {
- return false;
- }
-}
-
-/**
- * A form field that contains a radio box in the label
- */
-class UploadSourceField extends HTMLTextField {
-
- /**
- * @param array $cellAttributes
- * @return string
- */
- function getLabelHtml( $cellAttributes = [] ) {
- $id = $this->mParams['id'];
- $label = Html::rawElement( 'label', [ 'for' => $id ], $this->mLabel );
-
- if ( !empty( $this->mParams['radio'] ) ) {
- if ( isset( $this->mParams['radio-id'] ) ) {
- $radioId = $this->mParams['radio-id'];
- } else {
- // Old way. For the benefit of extensions that do not define
- // the 'radio-id' key.
- $radioId = 'wpSourceType' . $this->mParams['upload-type'];
- }
-
- $attribs = [
- 'name' => 'wpSourceType',
- 'type' => 'radio',
- 'id' => $radioId,
- 'value' => $this->mParams['upload-type'],
- ];
-
- if ( !empty( $this->mParams['checked'] ) ) {
- $attribs['checked'] = 'checked';
- }
-
- $label .= Html::element( 'input', $attribs );
- }
-
- return Html::rawElement( 'td', [ 'class' => 'mw-label' ] + $cellAttributes, $label );
- }
-
- /**
- * @return int
- */
- function getSize() {
- return isset( $this->mParams['size'] )
- ? $this->mParams['size']
- : 60;
- }
-}
diff --git a/includes/specials/formfields/EditWatchlistCheckboxSeriesField.php b/includes/specials/formfields/EditWatchlistCheckboxSeriesField.php
new file mode 100644
index 0000000000..cb93bb2cee
--- /dev/null
+++ b/includes/specials/formfields/EditWatchlistCheckboxSeriesField.php
@@ -0,0 +1,37 @@
+
+ * @copyright Copyright © 2005, Ãvar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * A License class for use on Special:Upload
+ */
+class Licenses extends HTMLFormField {
+ /** @var string */
+ protected $msg;
+
+ /** @var array */
+ protected $licenses = [];
+
+ /** @var string */
+ protected $html;
+ /**#@-*/
+
+ /**
+ * @param array $params
+ */
+ public function __construct( $params ) {
+ parent::__construct( $params );
+
+ $this->msg = empty( $params['licenses'] )
+ ? wfMessage( 'licenses' )->inContentLanguage()->plain()
+ : $params['licenses'];
+ $this->selected = null;
+
+ $this->makeLicenses();
+ }
+
+ /**
+ * @private
+ */
+ protected function makeLicenses() {
+ $levels = [];
+ $lines = explode( "\n", $this->msg );
+
+ foreach ( $lines as $line ) {
+ if ( strpos( $line, '*' ) !== 0 ) {
+ continue;
+ } else {
+ list( $level, $line ) = $this->trimStars( $line );
+
+ if ( strpos( $line, '|' ) !== false ) {
+ $obj = new License( $line );
+ $this->stackItem( $this->licenses, $levels, $obj );
+ } else {
+ if ( $level < count( $levels ) ) {
+ $levels = array_slice( $levels, 0, $level );
+ }
+ if ( $level == count( $levels ) ) {
+ $levels[$level - 1] = $line;
+ } elseif ( $level > count( $levels ) ) {
+ $levels[] = $line;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @param string $str
+ * @return array
+ */
+ protected function trimStars( $str ) {
+ $numStars = strspn( $str, '*' );
+ return [ $numStars, ltrim( substr( $str, $numStars ), ' ' ) ];
+ }
+
+ /**
+ * @param array &$list
+ * @param array $path
+ * @param mixed $item
+ */
+ protected function stackItem( &$list, $path, $item ) {
+ $position =& $list;
+ if ( $path ) {
+ foreach ( $path as $key ) {
+ $position =& $position[$key];
+ }
+ }
+ $position[] = $item;
+ }
+
+ /**
+ * @param array $tagset
+ * @param int $depth
+ */
+ protected function makeHtml( $tagset, $depth = 0 ) {
+ foreach ( $tagset as $key => $val ) {
+ if ( is_array( $val ) ) {
+ $this->html .= $this->outputOption(
+ $key, '',
+ [
+ 'disabled' => 'disabled',
+ 'style' => 'color: GrayText', // for MSIE
+ ],
+ $depth
+ );
+ $this->makeHtml( $val, $depth + 1 );
+ } else {
+ $this->html .= $this->outputOption(
+ $val->text, $val->template,
+ [ 'title' => '{{' . $val->template . '}}' ],
+ $depth
+ );
+ }
+ }
+ }
+
+ /**
+ * @param string $message
+ * @param string $value
+ * @param null|array $attribs
+ * @param int $depth
+ * @return string
+ */
+ protected function outputOption( $message, $value, $attribs = null, $depth = 0 ) {
+ $msgObj = $this->msg( $message );
+ $text = $msgObj->exists() ? $msgObj->text() : $message;
+ $attribs['value'] = $value;
+ if ( $value === $this->selected ) {
+ $attribs['selected'] = 'selected';
+ }
+
+ $val = str_repeat( /*   */ "\xc2\xa0", $depth * 2 ) . $text;
+ return str_repeat( "\t", $depth ) . Xml::element( 'option', $attribs, $val ) . "\n";
+ }
+
+ /**#@-*/
+
+ /**
+ * Accessor for $this->licenses
+ *
+ * @return array
+ */
+ public function getLicenses() {
+ return $this->licenses;
+ }
+
+ /**
+ * Accessor for $this->html
+ *
+ * @param bool $value
+ *
+ * @return string
+ */
+ public function getInputHTML( $value ) {
+ $this->selected = $value;
+
+ $this->html = $this->outputOption( wfMessage( 'nolicense' )->text(), '',
+ (bool)$this->selected ? null : [ 'selected' => 'selected' ] );
+ $this->makeHtml( $this->getLicenses() );
+
+ $attribs = [
+ 'name' => $this->mName,
+ 'id' => $this->mID
+ ];
+ if ( !empty( $this->mParams['disabled'] ) ) {
+ $attibs['disabled'] = 'disabled';
+ }
+
+ return Html::rawElement( 'select', $attribs, $this->html );
+ }
+}
diff --git a/includes/specials/formfields/UploadSourceField.php b/includes/specials/formfields/UploadSourceField.php
new file mode 100644
index 0000000000..251a28667a
--- /dev/null
+++ b/includes/specials/formfields/UploadSourceField.php
@@ -0,0 +1,68 @@
+mParams['id'];
+ $label = Html::rawElement( 'label', [ 'for' => $id ], $this->mLabel );
+
+ if ( !empty( $this->mParams['radio'] ) ) {
+ if ( isset( $this->mParams['radio-id'] ) ) {
+ $radioId = $this->mParams['radio-id'];
+ } else {
+ // Old way. For the benefit of extensions that do not define
+ // the 'radio-id' key.
+ $radioId = 'wpSourceType' . $this->mParams['upload-type'];
+ }
+
+ $attribs = [
+ 'name' => 'wpSourceType',
+ 'type' => 'radio',
+ 'id' => $radioId,
+ 'value' => $this->mParams['upload-type'],
+ ];
+
+ if ( !empty( $this->mParams['checked'] ) ) {
+ $attribs['checked'] = 'checked';
+ }
+
+ $label .= Html::element( 'input', $attribs );
+ }
+
+ return Html::rawElement( 'td', [ 'class' => 'mw-label' ] + $cellAttributes, $label );
+ }
+
+ /**
+ * @return int
+ */
+ function getSize() {
+ return isset( $this->mParams['size'] )
+ ? $this->mParams['size']
+ : 60;
+ }
+}
diff --git a/includes/specials/forms/EditWatchlistNormalHTMLForm.php b/includes/specials/forms/EditWatchlistNormalHTMLForm.php
new file mode 100644
index 0000000000..723093a772
--- /dev/null
+++ b/includes/specials/forms/EditWatchlistNormalHTMLForm.php
@@ -0,0 +1,36 @@
+msg( 'blanknamespace' )->escaped()
+ : htmlspecialchars( $this->getContext()->getLanguage()->getFormattedNsText( $namespace ) );
+ }
+
+ public function getBody() {
+ return $this->displaySection( $this->mFieldTree, '', 'editwatchlist-' );
+ }
+}
diff --git a/includes/specials/forms/PreferencesForm.php b/includes/specials/forms/PreferencesForm.php
new file mode 100644
index 0000000000..d4e5ef4fdd
--- /dev/null
+++ b/includes/specials/forms/PreferencesForm.php
@@ -0,0 +1,143 @@
+modifiedUser = $user;
+ }
+
+ /**
+ * @return User
+ */
+ public function getModifiedUser() {
+ if ( $this->modifiedUser === null ) {
+ return $this->getUser();
+ } else {
+ return $this->modifiedUser;
+ }
+ }
+
+ /**
+ * Get extra parameters for the query string when redirecting after
+ * successful save.
+ *
+ * @return array
+ */
+ public function getExtraSuccessRedirectParameters() {
+ return [];
+ }
+
+ /**
+ * @param string $html
+ * @return string
+ */
+ function wrapForm( $html ) {
+ $html = Xml::tags( 'div', [ 'id' => 'preferences' ], $html );
+
+ return parent::wrapForm( $html );
+ }
+
+ /**
+ * @return string
+ */
+ function getButtons() {
+ $attrs = [ 'id' => 'mw-prefs-restoreprefs' ];
+
+ if ( !$this->getModifiedUser()->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
+ return '';
+ }
+
+ $html = parent::getButtons();
+
+ if ( $this->getModifiedUser()->isAllowed( 'editmyoptions' ) ) {
+ $t = $this->getTitle()->getSubpage( 'reset' );
+
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ $html .= "\n" . $linkRenderer->makeLink( $t, $this->msg( 'restoreprefs' )->text(),
+ Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ) );
+
+ $html = Xml::tags( 'div', [ 'class' => 'mw-prefs-buttons' ], $html );
+ }
+
+ return $html;
+ }
+
+ /**
+ * Separate multi-option preferences into multiple preferences, since we
+ * have to store them separately
+ * @param array $data
+ * @return array
+ */
+ function filterDataForSubmit( $data ) {
+ foreach ( $this->mFlatFields as $fieldname => $field ) {
+ if ( $field instanceof HTMLNestedFilterable ) {
+ $info = $field->mParams;
+ $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $fieldname;
+ foreach ( $field->filterDataForSubmit( $data[$fieldname] ) as $key => $value ) {
+ $data["$prefix$key"] = $value;
+ }
+ unset( $data[$fieldname] );
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Get the whole body of the form.
+ * @return string
+ */
+ function getBody() {
+ return $this->displaySection( $this->mFieldTree, '', 'mw-prefsection-' );
+ }
+
+ /**
+ * Get the "" for a given section key. Normally this is the
+ * prefs-$key message but we'll allow extensions to override it.
+ * @param string $key
+ * @return string
+ */
+ function getLegend( $key ) {
+ $legend = parent::getLegend( $key );
+ Hooks::run( 'PreferencesGetLegend', [ $this, $key, &$legend ] );
+ return $legend;
+ }
+
+ /**
+ * Get the keys of each top level preference section.
+ * @return array of section keys
+ */
+ function getPreferenceSections() {
+ return array_keys( array_filter( $this->mFieldTree, 'is_array' ) );
+ }
+}
diff --git a/includes/specials/forms/UploadForm.php b/includes/specials/forms/UploadForm.php
new file mode 100644
index 0000000000..44d91a8a26
--- /dev/null
+++ b/includes/specials/forms/UploadForm.php
@@ -0,0 +1,446 @@
+setContext( $context );
+ }
+
+ if ( !$linkRenderer ) {
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ }
+
+ $this->mWatch = !empty( $options['watch'] );
+ $this->mForReUpload = !empty( $options['forreupload'] );
+ $this->mSessionKey = isset( $options['sessionkey'] ) ? $options['sessionkey'] : '';
+ $this->mHideIgnoreWarning = !empty( $options['hideignorewarning'] );
+ $this->mDestWarningAck = !empty( $options['destwarningack'] );
+ $this->mDestFile = isset( $options['destfile'] ) ? $options['destfile'] : '';
+
+ $this->mComment = isset( $options['description'] ) ?
+ $options['description'] : '';
+
+ $this->mTextTop = isset( $options['texttop'] )
+ ? $options['texttop'] : '';
+
+ $this->mTextAfterSummary = isset( $options['textaftersummary'] )
+ ? $options['textaftersummary'] : '';
+
+ $sourceDescriptor = $this->getSourceSection();
+ $descriptor = $sourceDescriptor
+ + $this->getDescriptionSection()
+ + $this->getOptionsSection();
+
+ Hooks::run( 'UploadFormInitDescriptor', [ &$descriptor ] );
+ parent::__construct( $descriptor, $context, 'upload' );
+
+ # Add a link to edit MediaWiki:Licenses
+ if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
+ $this->getOutput()->addModuleStyles( 'mediawiki.special.upload.styles' );
+ $licensesLink = $linkRenderer->makeKnownLink(
+ $this->msg( 'licenses' )->inContentLanguage()->getTitle(),
+ $this->msg( 'licenses-edit' )->text(),
+ [],
+ [ 'action' => 'edit' ]
+ );
+ $editLicenses = '' . $licensesLink . '
';
+ $this->addFooterText( $editLicenses, 'description' );
+ }
+
+ # Set some form properties
+ $this->setSubmitText( $this->msg( 'uploadbtn' )->text() );
+ $this->setSubmitName( 'wpUpload' );
+ # Used message keys: 'accesskey-upload', 'tooltip-upload'
+ $this->setSubmitTooltip( 'upload' );
+ $this->setId( 'mw-upload-form' );
+
+ # Build a list of IDs for javascript insertion
+ $this->mSourceIds = [];
+ foreach ( $sourceDescriptor as $field ) {
+ if ( !empty( $field['id'] ) ) {
+ $this->mSourceIds[] = $field['id'];
+ }
+ }
+ }
+
+ /**
+ * Get the descriptor of the fieldset that contains the file source
+ * selection. The section is 'source'
+ *
+ * @return array Descriptor array
+ */
+ protected function getSourceSection() {
+ if ( $this->mSessionKey ) {
+ return [
+ 'SessionKey' => [
+ 'type' => 'hidden',
+ 'default' => $this->mSessionKey,
+ ],
+ 'SourceType' => [
+ 'type' => 'hidden',
+ 'default' => 'Stash',
+ ],
+ ];
+ }
+
+ $canUploadByUrl = UploadFromUrl::isEnabled()
+ && ( UploadFromUrl::isAllowed( $this->getUser() ) === true )
+ && $this->getConfig()->get( 'CopyUploadsFromSpecialUpload' );
+ $radio = $canUploadByUrl;
+ $selectedSourceType = strtolower( $this->getRequest()->getText( 'wpSourceType', 'File' ) );
+
+ $descriptor = [];
+ if ( $this->mTextTop ) {
+ $descriptor['UploadFormTextTop'] = [
+ 'type' => 'info',
+ 'section' => 'source',
+ 'default' => $this->mTextTop,
+ 'raw' => true,
+ ];
+ }
+
+ $this->mMaxUploadSize['file'] = min(
+ UploadBase::getMaxUploadSize( 'file' ),
+ UploadBase::getMaxPhpUploadSize()
+ );
+
+ $help = $this->msg( 'upload-maxfilesize',
+ $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
+ )->parse();
+
+ // If the user can also upload by URL, there are 2 different file size limits.
+ // This extra message helps stress which limit corresponds to what.
+ if ( $canUploadByUrl ) {
+ $help .= $this->msg( 'word-separator' )->escaped();
+ $help .= $this->msg( 'upload_source_file' )->parse();
+ }
+
+ $descriptor['UploadFile'] = [
+ 'class' => 'UploadSourceField',
+ 'section' => 'source',
+ 'type' => 'file',
+ 'id' => 'wpUploadFile',
+ 'radio-id' => 'wpSourceTypeFile',
+ 'label-message' => 'sourcefilename',
+ 'upload-type' => 'File',
+ 'radio' => &$radio,
+ 'help' => $help,
+ 'checked' => $selectedSourceType == 'file',
+ ];
+
+ if ( $canUploadByUrl ) {
+ $this->mMaxUploadSize['url'] = UploadBase::getMaxUploadSize( 'url' );
+ $descriptor['UploadFileURL'] = [
+ 'class' => 'UploadSourceField',
+ 'section' => 'source',
+ 'id' => 'wpUploadFileURL',
+ 'radio-id' => 'wpSourceTypeurl',
+ 'label-message' => 'sourceurl',
+ 'upload-type' => 'url',
+ 'radio' => &$radio,
+ 'help' => $this->msg( 'upload-maxfilesize',
+ $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
+ )->parse() .
+ $this->msg( 'word-separator' )->escaped() .
+ $this->msg( 'upload_source_url' )->parse(),
+ 'checked' => $selectedSourceType == 'url',
+ ];
+ }
+ Hooks::run( 'UploadFormSourceDescriptors', [ &$descriptor, &$radio, $selectedSourceType ] );
+
+ $descriptor['Extensions'] = [
+ 'type' => 'info',
+ 'section' => 'source',
+ 'default' => $this->getExtensionsMessage(),
+ 'raw' => true,
+ ];
+
+ return $descriptor;
+ }
+
+ /**
+ * Get the messages indicating which extensions are preferred and prohibitted.
+ *
+ * @return string HTML string containing the message
+ */
+ protected function getExtensionsMessage() {
+ # Print a list of allowed file extensions, if so configured. We ignore
+ # MIME type here, it's incomprehensible to most people and too long.
+ $config = $this->getConfig();
+
+ if ( $config->get( 'CheckFileExtensions' ) ) {
+ $fileExtensions = array_unique( $config->get( 'FileExtensions' ) );
+ if ( $config->get( 'StrictFileExtensions' ) ) {
+ # Everything not permitted is banned
+ $extensionsList =
+ '' .
+ $this->msg( 'upload-permitted' )
+ ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+ ->numParams( count( $fileExtensions ) )
+ ->parseAsBlock() .
+ "
\n";
+ } else {
+ # We have to list both preferred and prohibited
+ $fileBlacklist = array_unique( $config->get( 'FileBlacklist' ) );
+ $extensionsList =
+ '' .
+ $this->msg( 'upload-preferred' )
+ ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+ ->numParams( count( $fileExtensions ) )
+ ->parseAsBlock() .
+ "
\n" .
+ '' .
+ $this->msg( 'upload-prohibited' )
+ ->params( $this->getLanguage()->commaList( $fileBlacklist ) )
+ ->numParams( count( $fileBlacklist ) )
+ ->parseAsBlock() .
+ "
\n";
+ }
+ } else {
+ # Everything is permitted.
+ $extensionsList = '';
+ }
+
+ return $extensionsList;
+ }
+
+ /**
+ * Get the descriptor of the fieldset that contains the file description
+ * input. The section is 'description'
+ *
+ * @return array Descriptor array
+ */
+ protected function getDescriptionSection() {
+ $config = $this->getConfig();
+ if ( $this->mSessionKey ) {
+ $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
+ try {
+ $file = $stash->getFile( $this->mSessionKey );
+ } catch ( Exception $e ) {
+ $file = null;
+ }
+ if ( $file ) {
+ global $wgContLang;
+
+ $mto = $file->transform( [ 'width' => 120 ] );
+ if ( $mto ) {
+ $this->addHeaderText(
+ '' .
+ Html::element( 'img', [
+ 'src' => $mto->getUrl(),
+ 'class' => 'thumbimage',
+ ] ) . '
', 'description' );
+ }
+ }
+ }
+
+ $descriptor = [
+ 'DestFile' => [
+ 'type' => 'text',
+ 'section' => 'description',
+ 'id' => 'wpDestFile',
+ 'label-message' => 'destfilename',
+ 'size' => 60,
+ 'default' => $this->mDestFile,
+ # @todo FIXME: Hack to work around poor handling of the 'default' option in HTMLForm
+ 'nodata' => strval( $this->mDestFile ) !== '',
+ ],
+ 'UploadDescription' => [
+ 'type' => 'textarea',
+ 'section' => 'description',
+ 'id' => 'wpUploadDescription',
+ 'label-message' => $this->mForReUpload
+ ? 'filereuploadsummary'
+ : 'fileuploadsummary',
+ 'default' => $this->mComment,
+ 'cols' => 80,
+ 'rows' => 8,
+ ]
+ ];
+ if ( $this->mTextAfterSummary ) {
+ $descriptor['UploadFormTextAfterSummary'] = [
+ 'type' => 'info',
+ 'section' => 'description',
+ 'default' => $this->mTextAfterSummary,
+ 'raw' => true,
+ ];
+ }
+
+ $descriptor += [
+ 'EditTools' => [
+ 'type' => 'edittools',
+ 'section' => 'description',
+ 'message' => 'edittools-upload',
+ ]
+ ];
+
+ if ( $this->mForReUpload ) {
+ $descriptor['DestFile']['readonly'] = true;
+ } else {
+ $descriptor['License'] = [
+ 'type' => 'select',
+ 'class' => 'Licenses',
+ 'section' => 'description',
+ 'id' => 'wpLicense',
+ 'label-message' => 'license',
+ ];
+ }
+
+ if ( $config->get( 'UseCopyrightUpload' ) ) {
+ $descriptor['UploadCopyStatus'] = [
+ 'type' => 'text',
+ 'section' => 'description',
+ 'id' => 'wpUploadCopyStatus',
+ 'label-message' => 'filestatus',
+ ];
+ $descriptor['UploadSource'] = [
+ 'type' => 'text',
+ 'section' => 'description',
+ 'id' => 'wpUploadSource',
+ 'label-message' => 'filesource',
+ ];
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Get the descriptor of the fieldset that contains the upload options,
+ * such as "watch this file". The section is 'options'
+ *
+ * @return array Descriptor array
+ */
+ protected function getOptionsSection() {
+ $user = $this->getUser();
+ if ( $user->isLoggedIn() ) {
+ $descriptor = [
+ 'Watchthis' => [
+ 'type' => 'check',
+ 'id' => 'wpWatchthis',
+ 'label-message' => 'watchthisupload',
+ 'section' => 'options',
+ 'default' => $this->mWatch,
+ ]
+ ];
+ }
+ if ( !$this->mHideIgnoreWarning ) {
+ $descriptor['IgnoreWarning'] = [
+ 'type' => 'check',
+ 'id' => 'wpIgnoreWarning',
+ 'label-message' => 'ignorewarnings',
+ 'section' => 'options',
+ ];
+ }
+
+ $descriptor['DestFileWarningAck'] = [
+ 'type' => 'hidden',
+ 'id' => 'wpDestFileWarningAck',
+ 'default' => $this->mDestWarningAck ? '1' : '',
+ ];
+
+ if ( $this->mForReUpload ) {
+ $descriptor['ForReUpload'] = [
+ 'type' => 'hidden',
+ 'id' => 'wpForReUpload',
+ 'default' => '1',
+ ];
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Add the upload JS and show the form.
+ */
+ public function show() {
+ $this->addUploadJS();
+ parent::show();
+ }
+
+ /**
+ * Add upload JS to the OutputPage
+ */
+ protected function addUploadJS() {
+ $config = $this->getConfig();
+
+ $useAjaxDestCheck = $config->get( 'UseAjax' ) && $config->get( 'AjaxUploadDestCheck' );
+ $useAjaxLicensePreview = $config->get( 'UseAjax' ) &&
+ $config->get( 'AjaxLicensePreview' ) && $config->get( 'EnableAPI' );
+ $this->mMaxUploadSize['*'] = UploadBase::getMaxUploadSize();
+
+ $scriptVars = [
+ 'wgAjaxUploadDestCheck' => $useAjaxDestCheck,
+ 'wgAjaxLicensePreview' => $useAjaxLicensePreview,
+ 'wgUploadAutoFill' => !$this->mForReUpload &&
+ // If we received mDestFile from the request, don't autofill
+ // the wpDestFile textbox
+ $this->mDestFile === '',
+ 'wgUploadSourceIds' => $this->mSourceIds,
+ 'wgCheckFileExtensions' => $config->get( 'CheckFileExtensions' ),
+ 'wgStrictFileExtensions' => $config->get( 'StrictFileExtensions' ),
+ 'wgFileExtensions' => array_values( array_unique( $config->get( 'FileExtensions' ) ) ),
+ 'wgCapitalizeUploads' => MWNamespace::isCapitalized( NS_FILE ),
+ 'wgMaxUploadSize' => $this->mMaxUploadSize,
+ 'wgFileCanRotate' => SpecialUpload::rotationEnabled(),
+ ];
+
+ $out = $this->getOutput();
+ $out->addJsConfigVars( $scriptVars );
+
+ $out->addModules( [
+ 'mediawiki.special.upload', // Extras for thumbnail and license preview.
+ ] );
+ }
+
+ /**
+ * Empty function; submission is handled elsewhere.
+ *
+ * @return bool False
+ */
+ function trySubmit() {
+ return false;
+ }
+}
diff --git a/includes/specials/helpers/ImportReporter.php b/includes/specials/helpers/ImportReporter.php
new file mode 100644
index 0000000000..63addb8772
--- /dev/null
+++ b/includes/specials/helpers/ImportReporter.php
@@ -0,0 +1,190 @@
+mOriginalPageOutCallback =
+ $importer->setPageOutCallback( [ $this, 'reportPage' ] );
+ $this->mOriginalLogCallback =
+ $importer->setLogItemCallback( [ $this, 'reportLogItem' ] );
+ $importer->setNoticeCallback( [ $this, 'reportNotice' ] );
+ $this->mPageCount = 0;
+ $this->mIsUpload = $upload;
+ $this->mInterwiki = $interwiki;
+ $this->reason = $reason;
+ }
+
+ /**
+ * Sets change tags to apply to the import log entry and null revision.
+ *
+ * @param array $tags
+ * @since 1.29
+ */
+ public function setChangeTags( array $tags ) {
+ $this->logTags = $tags;
+ }
+
+ function open() {
+ $this->getOutput()->addHTML( "\n" );
+ }
+
+ function reportNotice( $msg, array $params ) {
+ $this->getOutput()->addHTML(
+ Html::element( 'li', [], $this->msg( $msg, $params )->text() )
+ );
+ }
+
+ function reportLogItem( /* ... */ ) {
+ $this->mLogItemCount++;
+ if ( is_callable( $this->mOriginalLogCallback ) ) {
+ call_user_func_array( $this->mOriginalLogCallback, func_get_args() );
+ }
+ }
+
+ /**
+ * @param Title $title
+ * @param ForeignTitle $foreignTitle
+ * @param int $revisionCount
+ * @param int $successCount
+ * @param array $pageInfo
+ * @return void
+ */
+ public function reportPage( $title, $foreignTitle, $revisionCount,
+ $successCount, $pageInfo ) {
+ $args = func_get_args();
+ call_user_func_array( $this->mOriginalPageOutCallback, $args );
+
+ if ( $title === null ) {
+ # Invalid or non-importable title; a notice is already displayed
+ return;
+ }
+
+ $this->mPageCount++;
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ if ( $successCount > 0 ) {
+ // prevents jumbling of the versions count
+ // in RTL wikis in case the page title is LTR
+ $this->getOutput()->addHTML(
+ "" . $linkRenderer->makeLink( $title ) . " " .
+ "" .
+ $this->msg( 'import-revision-count' )->numParams( $successCount )->escaped() .
+ " " .
+ " \n"
+ );
+
+ $logParams = [ '4:number:count' => $successCount ];
+ if ( $this->mIsUpload ) {
+ $detail = $this->msg( 'import-logentry-upload-detail' )->numParams(
+ $successCount )->inContentLanguage()->text();
+ $action = 'upload';
+ } else {
+ $pageTitle = $foreignTitle->getFullText();
+ $fullInterwikiPrefix = $this->mInterwiki;
+ Hooks::run( 'ImportLogInterwikiLink', [ &$fullInterwikiPrefix, &$pageTitle ] );
+
+ $interwikiTitleStr = $fullInterwikiPrefix . ':' . $pageTitle;
+ $interwiki = '[[:' . $interwikiTitleStr . ']]';
+ $detail = $this->msg( 'import-logentry-interwiki-detail' )->numParams(
+ $successCount )->params( $interwiki )->inContentLanguage()->text();
+ $action = 'interwiki';
+ $logParams['5:title-link:interwiki'] = $interwikiTitleStr;
+ }
+ if ( $this->reason ) {
+ $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
+ . $this->reason;
+ }
+
+ $comment = $detail; // quick
+ $dbw = wfGetDB( DB_MASTER );
+ $latest = $title->getLatestRevID();
+ $nullRevision = Revision::newNullRevision(
+ $dbw,
+ $title->getArticleID(),
+ $comment,
+ true,
+ $this->getUser()
+ );
+
+ $nullRevId = null;
+ if ( !is_null( $nullRevision ) ) {
+ $nullRevId = $nullRevision->insertOn( $dbw );
+ $page = WikiPage::factory( $title );
+ # Update page record
+ $page->updateRevisionOn( $dbw, $nullRevision );
+ Hooks::run(
+ 'NewRevisionFromEditComplete',
+ [ $page, $nullRevision, $latest, $this->getUser() ]
+ );
+ }
+
+ // Create the import log entry
+ $logEntry = new ManualLogEntry( 'import', $action );
+ $logEntry->setTarget( $title );
+ $logEntry->setComment( $this->reason );
+ $logEntry->setPerformer( $this->getUser() );
+ $logEntry->setParameters( $logParams );
+ $logid = $logEntry->insert();
+ if ( count( $this->logTags ) ) {
+ $logEntry->setTags( $this->logTags );
+ }
+ // Make sure the null revision will be tagged as well
+ $logEntry->setAssociatedRevId( $nullRevId );
+
+ $logEntry->publish( $logid );
+
+ } else {
+ $this->getOutput()->addHTML( "" . $linkRenderer->makeKnownLink( $title ) . " " .
+ $this->msg( 'import-nonewrevisions' )->escaped() . " \n" );
+ }
+ }
+
+ function close() {
+ $out = $this->getOutput();
+ if ( $this->mLogItemCount > 0 ) {
+ $msg = $this->msg( 'imported-log-entries' )->numParams( $this->mLogItemCount )->parse();
+ $out->addHTML( Xml::tags( 'li', null, $msg ) );
+ } elseif ( $this->mPageCount == 0 && $this->mLogItemCount == 0 ) {
+ $out->addHTML( " \n" );
+
+ return Status::newFatal( 'importnopages' );
+ }
+ $out->addHTML( "\n" );
+
+ return Status::newGood( $this->mPageCount );
+ }
+}
diff --git a/includes/specials/helpers/License.php b/includes/specials/helpers/License.php
new file mode 100644
index 0000000000..4f94b4d232
--- /dev/null
+++ b/includes/specials/helpers/License.php
@@ -0,0 +1,46 @@
+
+ * @copyright Copyright © 2005, Ãvar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * A License class for use on Special:Upload (represents a single type of license).
+ */
+class License {
+ /** @var string */
+ public $template;
+
+ /** @var string */
+ public $text;
+
+ /**
+ * @param string $str License name??
+ */
+ function __construct( $str ) {
+ list( $text, $template ) = explode( '|', strrev( $str ), 2 );
+
+ $this->template = strrev( $template );
+ $this->text = strrev( $text );
+ }
+}
diff --git a/includes/user/CentralIdLookup.php b/includes/user/CentralIdLookup.php
index 2ced6e2516..618b7f07ed 100644
--- a/includes/user/CentralIdLookup.php
+++ b/includes/user/CentralIdLookup.php
@@ -157,6 +157,27 @@ abstract class CentralIdLookup implements IDBAccessObject {
return $idToName[$id];
}
+ /**
+ * Given a an array of central user IDs, return the (local) user names.
+ * @param int[] $ids Central user IDs
+ * @param int|User $audience One of the audience constants, or a specific user
+ * @param int $flags IDBAccessObject read flags
+ * @return string[] User names
+ * @since 1.30
+ */
+ public function namesFromCentralIds(
+ array $ids, $audience = self::AUDIENCE_PUBLIC, $flags = self::READ_NORMAL
+ ) {
+ $idToName = array_fill_keys( $ids, false );
+ $names = $this->lookupCentralIds( $idToName, $audience, $flags );
+ $names = array_unique( $names );
+ $names = array_filter( $names, function ( $name ) {
+ return $name !== false && $name !== '';
+ } );
+
+ return array_values( $names );
+ }
+
/**
* Given a (local) user name, return the central ID
* @note There's no requirement that the user name actually exists locally,
@@ -174,6 +195,27 @@ abstract class CentralIdLookup implements IDBAccessObject {
return $nameToId[$name];
}
+ /**
+ * Given an array of (local) user names, return the central IDs.
+ * @param string[] $names Canonicalized user names
+ * @param int|User $audience One of the audience constants, or a specific user
+ * @param int $flags IDBAccessObject read flags
+ * @return int[] User IDs
+ * @since 1.30
+ */
+ public function centralIdsFromNames(
+ array $names, $audience = self::AUDIENCE_PUBLIC, $flags = self::READ_NORMAL
+ ) {
+ $nameToId = array_fill_keys( $names, false );
+ $ids = $this->lookupUserNames( $nameToId, $audience, $flags );
+ $ids = array_unique( $ids );
+ $ids = array_filter( $ids, function ( $id ) {
+ return $id !== false;
+ } );
+
+ return array_values( $ids );
+ }
+
/**
* Given a central user ID, return a local User object
* @note Unlike nameFromCentralId(), this does guarantee that the local
diff --git a/includes/user/User.php b/includes/user/User.php
index 0c39610b24..6115144d1b 100644
--- a/includes/user/User.php
+++ b/includes/user/User.php
@@ -5317,6 +5317,13 @@ class User implements IDBAccessObject {
$data[$row->up_property] = $row->up_value;
}
}
+
+ // Convert the email blacklist from a new line delimited string
+ // to an array of ids.
+ if ( isset( $data['email-blacklist'] ) && $data['email-blacklist'] ) {
+ $data['email-blacklist'] = array_map( 'intval', explode( "\n", $data['email-blacklist'] ) );
+ }
+
foreach ( $data as $property => $value ) {
$this->mOptionOverrides[$property] = $value;
$this->mOptions[$property] = $value;
@@ -5339,6 +5346,26 @@ class User implements IDBAccessObject {
// Not using getOptions(), to keep hidden preferences in database
$saveOptions = $this->mOptions;
+ // Convert usernames to ids.
+ if ( isset( $this->mOptions['email-blacklist'] ) ) {
+ if ( $this->mOptions['email-blacklist'] ) {
+ $value = $this->mOptions['email-blacklist'];
+ // Email Blacklist may be an array of ids or a string of new line
+ // delimnated user names.
+ if ( is_array( $value ) ) {
+ $ids = array_filter( $value, 'is_numeric' );
+ } else {
+ $lookup = CentralIdLookup::factory();
+ $ids = $lookup->centralIdsFromNames( explode( "\n", $value ), $this );
+ }
+ $this->mOptions['email-blacklist'] = $ids;
+ $saveOptions['email-blacklist'] = implode( "\n", $this->mOptions['email-blacklist'] );
+ } else {
+ // If the blacklist is empty, set it to null rather than an empty string.
+ $this->mOptions['email-blacklist'] = null;
+ }
+ }
+
// Allow hooks to abort, for instance to save to a global profile.
// Reset options to default state before saving.
if ( !Hooks::run( 'UserSaveOptions', [ $this, &$saveOptions ] ) ) {
diff --git a/languages/data/ZhConversion.php b/languages/data/ZhConversion.php
index 03ebe21ce6..64cce789a5 100644
--- a/languages/data/ZhConversion.php
+++ b/languages/data/ZhConversion.php
@@ -3155,6 +3155,7 @@ public static $zh2Hant = [
'ä¸ç¾çº¦' => 'ä¸ç°½ç´',
'ä¸ç¾ç½²' => 'ä¸ç°½ç½²',
'ä¸ç¾è®¢' => 'ä¸ç°½è¨',
+'ä¸ç¾è¯' => 'ä¸ç°½è',
'ä¸ç¾' => 'ä¸ç±¤',
'ä¸ç³»ä¸' => 'ä¸ç¹«ä¸',
'ä¸è¯¾é' => 'ä¸èª²é',
@@ -3172,6 +3173,7 @@ public static $zh2Hant = [
'ä¸ç¾çº¦' => 'ä¸ç°½ç´',
'ä¸ç¾ç½²' => 'ä¸ç°½ç½²',
'ä¸ç¾è®¢' => 'ä¸ç°½è¨',
+'ä¸ç¾è¯' => 'ä¸ç°½è',
'ä¸ç¾' => 'ä¸ç±¤',
'ä¸è¯¾é' => 'ä¸èª²é',
'ä¸å¹²ä¸å' => 'ä¸ä¹¾ä¸æ·¨',
@@ -3247,6 +3249,7 @@ public static $zh2Hant = [
'ä¸ç¾çº¦' => 'ä¸ç°½ç´',
'ä¸ç¾ç½²' => 'ä¸ç°½ç½²',
'ä¸ç¾è®¢' => 'ä¸ç°½è¨',
+'ä¸ç¾è¯' => 'ä¸ç°½è',
'ä¸ç¾' => 'ä¸ç±¤',
'ä¸é£å' => 'ä¸é¢¨å¾',
'丰仪' => '丰å',
@@ -4322,7 +4325,6 @@ public static $zh2Hant = [
'å°å女' => 'å°å女',
'å°åå' => 'å°åå«',
'å°å·' => 'å°å·',
-'å°å¸æ¯' => 'å°å¸æ¯',
'å°åå²' => 'å°æ·å²',
'å°é' => 'å°é',
'å°é£å¥' => 'å°é¢¨ç',
@@ -4867,6 +4869,8 @@ public static $zh2Hant = [
'å°¸ç¥' => 'å°¸ç¥',
'尸祿' => '尸祿',
'å°¸ç¦' => '尸祿',
+'å°¸ç½' => 'å°¸ç¾
',
+'å°¸ç¾
' => 'å°¸ç¾
',
'å°¸ç½ç²¾è' => 'å°¸ç¾
ç²¾è',
'å°¸ç¾
ç²¾è' => 'å°¸ç¾
ç²¾è',
'å°¸è£' => 'å°¸è£',
@@ -5883,6 +5887,7 @@ public static $zh2Hant = [
'æå' => 'ææ',
'ææå' => 'ææå¾',
'æåå²' => 'ææ·å²',
+'æé²è°·ç©è¯' => 'æé²è°·ç©èª',
'æ¥æ¸¸' => 'æ¥é',
'æ¥é¦æå¦' => 'æ¥é¦é¬¥å¸',
'ææ å' => 'ææ å',
@@ -6034,6 +6039,7 @@ public static $zh2Hant = [
'æ¶é' => 'æ¶é',
'æåª' => 'æé»',
'æ殿å' => 'æ殿å',
+'æåç' => 'æç¼ç',
'æå' => 'æé«®',
'æä¸' => 'æä¸',
'æå' => 'æå',
@@ -6063,7 +6069,6 @@ public static $zh2Hant = [
'æè' => 'æ¡¿è',
'æ¢ä¸åå' => 'æ¢ä¸åå',
'æ¢å¯è¶
' => 'æ¢åè¶
',
-'æ¡å¹²' => 'æ¢å¹¹',
'æ¡æé' => 'æ¢æ裡',
'梨干' => '梨乾',
'梯å²' => '梯è¡',
@@ -6139,7 +6144,6 @@ public static $zh2Hant = [
'横å¾æ´æ' => 'æ©«å¾µæ´æ',
'横æ¢' => 'æ©«æ¨',
'横å²' => 'æ©«è¡',
-'å°å¸' => '檯å¸',
'å°å' => '檯æ',
'å°ç¯' => '檯ç',
'å°ç' => '檯ç',
@@ -8494,6 +8498,10 @@ public static $zh2Hant = [
'é¯è¡' => 'éè©',
'é¯ç¼' => 'éé',
'å
³ç³»' => 'éä¿',
+'å
³ç³»å' => 'éç³»å',
+'å
³ç³»æ' => 'éç³»æ',
+'å
³ç³»ç§' => 'éç³»ç§',
+'å
³ç³»ç»' => 'é系統',
'è¾ä½' => 'é¢ä½',
'è¾ä½' => 'é¢ä½',
'è¾å' => 'é¢å',
@@ -9710,6 +9718,7 @@ public static $zh2Hans = [
'å' => '𪢮',
'å¿' => 'é',
'å' => 'å',
+'å»' => 'å',
'å¡' => 'å',
'å·' => 'æ§',
'å
' => 'å',
@@ -13498,6 +13507,7 @@ public static $zh2Hans = [
'å´å´' => 'æä»',
'å´å' => 'æå§',
'å´å±±' => 'æå±±',
+'å´å³¶' => 'æå²',
'å´æ²' => 'ææ²',
'å´è
' => 'æè
',
'å´è' => 'æè',
@@ -13875,6 +13885,9 @@ public static $zh2TW = [
'å¥ç¹å¼' => 'å¥å¾·å¼',
'å¥æ¯è¾¾é»å ' => 'å¥æ¯å¤§é»å ',
'å¥æ¯éé»å ' => 'å¥æ¯å¤§é»å ',
+'å纳德·ç¹ææ®' => 'åç´Â·å·æ®',
+'ç¶å·ç¹ææ®' => 'åç´Â·å·æ®',
+'ç¶å¥´Â·ç¹ææ®' => 'åç´Â·å·æ®',
'å¡æå¥' => 'åæè©',
'ä¹æ²»Â·å¥¥å¨å°' => 'å¬æ²»Â·æå¨ç¾',
'ä½æ²»äº' => 'å¬æ²»äº',
@@ -13951,6 +13964,7 @@ public static $zh2TW = [
'å°¼æ¥å°' => 'å°¼æ¥',
'å°¼æ¥ç¾' => 'å°¼æ¥',
'é
马å' => 'å±±è',
+'ç¹ææ®' => 'å·æ®',
'æºåº' => 'å·¥å
·æ©',
'æ©åº' => 'å·¥å
·æ©',
'ç寶客æ©' => 'å·¨ç¡é¸å®¢æ©',
@@ -14105,6 +14119,7 @@ public static $zh2TW = [
'奥巴马' => 'æ巴馬',
'奧巴馬' => 'æ巴馬',
'æ£å¨å±å¤' => 'æ£å¨å±å¤',
+'å£ä½©å¾·ç½èæ' => 'æ±å ',
'æè±' => '汶è',
'æ²å¾' => 'æ²æ',
'æ²å°é¿æ伯' => 'æ²çå°é¿æ伯',
@@ -14270,7 +14285,8 @@ public static $zh2TW = [
'æ¯éå¡å°¼äº' => 'è
å©å¡å°¼äº',
'éå°æ¨å
¹' => 'è·å§è²',
'éç¾æ¨è²' => 'è·å§è²',
-'è·ææ´»é' => 'è·ææ´»é',
+'è·éæ´»å»£å ´' => 'è·éæ´»å»£å ´',
+'è·éæ´»é' => 'è·éæ´»é',
'è«æ¡æ¯å
' => 'è«ä¸æ¯å
',
'ç¦æè¨' => 'è¯åæ²',
'è¯éæ²' => 'è¯åæ²',
@@ -14349,6 +14365,8 @@ public static $zh2TW = [
'å±å¹' => 'è¢å¹',
'è¡äººè·¯æ' => 'è¡äººè·¯æ¬',
'è¡äººè·¯æ¬' => 'è¡äººè·¯æ¬',
+'æµåä½æ¥ç³»çµ±' => 'è¡åä½æ¥ç³»çµ±',
+'移å¨æä½ç³»ç»' => 'è¡åä½æ¥ç³»çµ±',
'æµå網絡' => 'è¡å網路',
'移å¨ç½ç»' => 'è¡å網路',
'æµåé»è©±' => 'è¡åé»è©±',
@@ -14840,6 +14858,7 @@ public static $zh2HK = [
'å é«æ' => 'ä½é«æ',
'ç¶å¾·è§' => 'ä½å¾è§',
'ä½åé' => 'ä½åè£',
+'æä½ç³»ç»' => 'ä½æ¥ç³»çµ±',
'ä¾è' => 'ä¾ç',
'ä¾èä½' => 'ä¾èä½',
'ä¾èå' => 'ä¾èå',
@@ -15843,6 +15862,8 @@ public static $zh2HK = [
'æ¸ç¢¼è¨è' => 'æ¸ç¢¼è¨è',
'æ°åçµè§' => 'æ¸ç¢¼é»è¦',
'æ¸ä½é»è¦' => 'æ¸ç¢¼é»è¦',
+'æ°åé³ä¹' => 'æ¸ç¢¼é³æ¨',
+'æ¸ä½é³æ¨' => 'æ¸ç¢¼é³æ¨',
'æ¸èä½' => 'æ¸èä½',
'æ¸èå' => 'æ¸èå',
'æ¸è稱' => 'æ¸è稱',
@@ -15974,7 +15995,6 @@ public static $zh2HK = [
'æèè¿°' => 'æèè¿°',
'æèé' => 'æèé',
'檯' => 'æ±',
-'å°å¸' => 'æ±å¸',
'å°å' => 'æ±æ',
'å°ç¯' => 'æ±ç',
'å°é¢ä¸' => 'æ±é¢ä¸',
@@ -16101,6 +16121,8 @@ public static $zh2HK = [
'æ´»èè
' => 'æ´»èè
',
'æ´»èè¿°' => 'æ´»èè¿°',
'æ´»èé' => 'æ´»èé',
+'移å¨æä½ç³»ç»' => 'æµåä½æ¥ç³»çµ±',
+'è¡åä½æ¥ç³»çµ±' => 'æµåä½æ¥ç³»çµ±',
'移å¨ç½ç»' => 'æµå網絡',
'è¡å網路' => 'æµå網絡',
'移å¨çµè¯' => 'æµåé»è©±',
@@ -16313,6 +16335,8 @@ public static $zh2HK = [
'ç«è稱' => 'ç«è稱',
'ç«èè
' => 'ç«èè
',
'ç»é' => 'ç«è£',
+'åç´Â·å·æ®' => 'ç¶å·ç¹ææ®',
+'å纳德·ç¹ææ®' => 'ç¶å·ç¹ææ®',
'ç¶è' => 'ç¶ç',
'ç¶èä½' => 'ç¶èä½',
'éèä½' => 'ç¶èä½',
@@ -18118,6 +18142,9 @@ public static $zh2CN = [
'åè稱' => 'åè称',
'åèè
' => 'åèè
',
'åèè¿°' => 'åèè¿°',
+'åç´Â·å·æ®' => 'å纳德·ç¹ææ®',
+'ç¶å·ç¹ææ®' => 'å纳德·ç¹ææ®',
+'ç¶å¥´Â·ç¹ææ®' => 'å纳德·ç¹ææ®',
'å±è' => 'å±ç',
'å±èæ¸' => 'å±è书',
'å±èä½' => 'å±èä½',
@@ -18180,6 +18207,7 @@ public static $zh2CN = [
'åé¯æ¯' => 'å¾å¢å
¹',
'åç¦é¯' => 'å¾ç¦å¢',
'ååç' => 'åç ç¬',
+'æ±å ' => 'å£ä½©å¾·ç½èæ',
'èé²è¥¿äº' => 'å£å¢è¥¿äº',
'èå
éæ¯å¤ç¦åå°¼ç¶æ¯' => 'å£åºè¨å尼维æ¯',
'èåæ¯ç´åæ¯' => 'å£åºè¨å尼维æ¯',
@@ -18204,6 +18232,7 @@ public static $zh2CN = [
'è¾è²ç¾' => 'åè²å°',
'èé溫' => 'åé温',
'åè½è®æ¸å稱' => 'åå',
+'網åå稱' => 'åå',
'åéå·´æ¯' => 'åºéå·´æ¯',
'å å§' => 'å å§',
'åå¹æ' => 'å ªå¹æ',
@@ -18783,6 +18812,7 @@ public static $zh2CN = [
'æ¸ä½æè¡' => 'æ°åææ¯',
'æ¸ä½é»è¦' => 'æ°åçµè§',
'æ¸ç¢¼é»è¦' => 'æ°åçµè§',
+'æ¸ä½é³æ¨' => 'æ°åé³ä¹',
'è³æ庫' => 'æ°æ®åº',
'æ¸è' => 'æ°ç',
'æ¸ä½ç
§ç¸æ©' => 'æ°ç ç
§ç¸æº',
@@ -18964,10 +18994,10 @@ public static $zh2CN = [
'梳èè
' => '梳èè
',
'梳èè¿°' => '梳èè¿°',
'梵谷' => '梵é«',
-'æ©ç' => 'æ¦ç',
'æ¬ å¸³' => 'æ¬ è´¦',
'æ»å¸³' => 'æ»è´¦',
'åºéçæ¯' => 'æ¯å©çæ¯',
+'æ«ç´¢' => 'æ¯ç´¢',
'ç¢å¡ç´¢' => 'æ¯å ç´¢',
'è
å©å¡å°¼äº' => 'æ¯éå¡å°¼äº',
'模é西æ¯' => 'æ¯éæ±æ¯',
@@ -19406,6 +19436,8 @@ public static $zh2CN = [
'èæ©' => 'ç§æ©ç½',
'象ç海岸' => 'ç§ç¹è¿ªç¦',
'ç©æ¥µä»½å' => '积æåå',
+'æµåä½æ¥ç³»çµ±' => '移å¨æä½ç³»ç»',
+'è¡åä½æ¥ç³»çµ±' => '移å¨æä½ç³»ç»',
'æµåé»è©±' => '移å¨çµè¯',
'è¡åé»è©±' => '移å¨çµè¯',
'æµå網絡' => '移å¨ç½ç»',
@@ -19609,6 +19641,8 @@ public static $zh2CN = [
'è¢å
æ£' => 'è§å
æ£',
'è¢å±' => 'è§å±',
'éç¾æ¯å¦' => 'è·å°æ¯æ³°å ',
+'è·éæ´»å»£å ´' => 'è·é活广åº',
+'è·éæ´»é' => 'è·éæ´»é',
'è«ä¸æ¯å
' => 'è«æ¡æ¯å
',
'é·ä¼æ³°ç£' => 'è±ç¹æ¹¾',
'è³´ç´¢æ' => 'è±ç´¢æ',
diff --git a/languages/i18n/ais.json b/languages/i18n/ais.json
index 525be3c2ae..53c4cd544f 100644
--- a/languages/i18n/ais.json
+++ b/languages/i18n/ais.json
@@ -12,7 +12,7 @@
"tog-watchlisthidecategorization": "midimut kasabelih kakuniza",
"tog-showhiddencats": "paazih madimutay a kakuniza",
"underline-always": "mahizatuay",
- "underline-never": "caaytu",
+ "underline-never": "amana kanca caay",
"editfont-default": "saazih sakaluk pataayaw tu kawaw a sulyang",
"editfont-monospace": "malecad ilaed a kataci nu silit",
"editfont-sansserif": "pacabay tu telay a kataci nu sulit",
@@ -137,8 +137,8 @@
"toolbox": "sakaluk",
"otherlanguages": "zumaay a kamu",
"redirectedfrom": "(miliyawtu tazuma nay $1)",
- "redirectpagesub": "miliyaw tazuma kasabelih",
- "redirectto": "miliyaw tazuma tu:",
+ "redirectpagesub": "miliyaw patatuzuâ",
+ "redirectto": "miliyaw patatuzuâ i:",
"lastmodifiedat": "uyni kasabelih sazikuz mikawaway tu kalumyiti i $1 $2.",
"protectedpage": "madiputay a kasabelih",
"jumpto": "taayaw:",
@@ -175,6 +175,7 @@
"toc": "dilyikotoling",
"showtoc": "paazih",
"hidetoc": "midimut",
+ "collapsible-collapse": "piked",
"collapsible-expand": "micuwat",
"confirmable-yes": "hang",
"confirmable-no": "caay",
@@ -218,6 +219,7 @@
"createacct-yourpasswordagain-ph": "pisulitan ku mima kinacacay aca",
"userlogin-remembermypassword": "i balucuâen aku patalabu setyitase",
"cannotlogin-title": "laâcus patalabu",
+ "cannotlogin-text": "laâcus patalabu.",
"cannotloginnow-title": "laâcus patalabu ayza",
"cannotcreateaccount-title": "laâcusay panganganen ku canghaw",
"yourdomainname": "numisuay a calay-subal(wangyi):",
@@ -295,7 +297,7 @@
"sig_tip": "misuay a sulit nu ngangan atu demiad, tuki",
"hr_tip": "Sapisasuala (cayka yadah kawiza)",
"summary": "pecuâ nu lacul:",
- "subject": "taazihan tu kawaw:",
+ "subject": "satangahan:",
"minoredit": "payni mikilulay a mikawaway-kalumyiti",
"watchthis": "miazih tuyni kasabelih",
"savearticle": "misuped kasabelih",
@@ -346,7 +348,7 @@
"nextrevision": "kilulay masumad â",
"currentrevisionlink": "sabaluhay masumad",
"cur": "ayza",
- "next": "nuzikuzan",
+ "next": "zikuzan a cacay",
"last": "ayaway",
"page_last": "sazikuzay a kasabelih",
"history-fieldset-title": "mikilim masumad nu ayaway",
@@ -387,7 +389,7 @@
"titlematches": "kasabelih satangah matatungus",
"textmatches": "kasabelih lacul matatungus",
"prevn": "ayaw saka {{PLURAL:$1|$1}}",
- "nextn": "zikuzan saka {{PLURAL:$1|$1}}",
+ "nextn": "zikuzan a cacay {{PLURAL:$1|$1}}",
"prev-page": "ayaway a belih",
"next-page": "zikuzan a belih",
"nextn-title": "nuzikuzan saka {{PLURAL:$1|a heci}}",
@@ -395,7 +397,7 @@
"viewprevnext": "ciwsace ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-new": " uyni Wiki patizeng ku kasabelih \"[[:$1]]\"ï¼ {{PLURAL:$2|0=| acasa miazih tu tatengaâay patalabuay a matepaâay a heci. |acasa miazih tu tatengaâay zuma matepaâay a heci.}}",
"searchprofile-articles": "lacul kasabelih",
- "searchprofile-images": "malocimyidiya",
+ "searchprofile-images": "kayadah-myiti",
"searchprofile-everything": "hamin",
"searchprofile-advanced": "tapabaw",
"searchprofile-articles-tooltip": "i labu nu $1 mikilim",
@@ -436,12 +438,13 @@
"searchresultshead": "kilim",
"stub-threshold-sample-link": "maaziahan",
"stub-threshold-disabled": "mapasatezep",
+ "timezonelegend": "tatukian a kakitizaan:",
"localtime": "itiniay a tuki:",
"servertime": "sefuci-kikay a tuki:",
"timezoneregion-africa": "Afilika",
"timezoneregion-america": "Amilikaco",
"timezoneregion-antarctica": "Nancico",
- "timezoneregion-arctic": "Sasaamisan",
+ "timezoneregion-arctic": "Sasaamisan nu kitakit",
"timezoneregion-asia": "Yaco",
"timezoneregion-australia": "Awco",
"timezoneregion-europe": "Ouco",
@@ -485,6 +488,7 @@
"group-suppress": "misisipay",
"group-all": "(hamin)",
"group-bot-member": "{{GENDER:$1|kikay a tademaw}}",
+ "group-bureaucrat-member": "{{GENDER:$1|situngusay-mikawaway}}",
"grouppage-bot": "{{ns:project}}:kikay a tademaw",
"grouppage-sysop": "{{ns:project}}:mikuwanay",
"grouppage-bureaucrat": "{{ns:project}}:situngusay a mikawaway",
@@ -510,13 +514,17 @@
"grant-uploadfile": "patapabaw ku baluhay a tangan",
"grant-basic": "anganganay a tungus",
"newuserlogpage": "patizeng misaungayay nasulitan nakawawan",
+ "action-read": "miasip tina kasabelih",
"action-edit": "mikawaway-kalumyiti uyni a kasabelih",
+ "action-createpage": "patizeng tina kasabelih",
"action-move-categorypages": "milimad kakuniza a kasabelih",
"action-movefile": "milimad tina tangan",
"action-upload": "patapabaw tina tangan",
+ "action-delete": "misipu tina kasabelih",
"action-deleterevision": "misipu tu masumaday nu ayaway",
"action-deletelogentry": "masipu nasulitan nazipaâan kasacacay",
"action-sendemail": "pabahel imyiyo(email)",
+ "action-purge": "misipu tina kasabelih",
"nchanges": "$1 {{PLURAL:$1|misumad}}",
"enhancedrc-history": "nazipaâan",
"recentchanges": "capi a demaiday a sumad",
@@ -626,12 +634,12 @@
"upload-file-error": "ilabuay a mungangaw",
"upload-dialog-button-cancel": "palawpes",
"upload-dialog-button-back": "tatiku",
- "upload-dialog-button-done": "pahezek",
+ "upload-dialog-button-done": "malahecitu",
"upload-dialog-button-save": "suped",
"upload-dialog-button-upload": "patapabaw",
"upload-form-label-infoform-title": "pulitaay a kalunasulitan",
"upload-form-label-infoform-name": "kalungangan",
- "upload-form-label-infoform-description": "patahkal",
+ "upload-form-label-infoform-description": "sapuelac",
"upload-form-label-infoform-categories": "kakuniza",
"upload-form-label-infoform-date": "demiad",
"uploadstash": "patapabaw ku sulu nu pisipetan",
@@ -651,7 +659,7 @@
"listfiles_name": "kalungangan",
"listfiles_user": "misaungayay",
"listfiles_size": "hacica-tabaki",
- "listfiles_description": "patahkal",
+ "listfiles_description": "sapuelac",
"listfiles_count": "baziyong",
"listfiles-latestversion": "ayzaay a baziyong",
"listfiles-latestversion-yes": "hang",
@@ -660,6 +668,7 @@
"filehist": "tangan nu nazipaâan",
"filehist-help": "sapecec ku demiad/tuki sapiciwsace ku tuki nina demiad a tangan baziyong",
"filehist-deleteall": "haminan misipu",
+ "filehist-revert": "patiku",
"filehist-current": "ayza",
"filehist-datetime": "demiad/tuki",
"filehist-thumb": "sukep tu zunga",
@@ -744,6 +753,7 @@
"apihelp": "buhci tu kamu nu API",
"apisandbox": "bunac haku nu API",
"apisandbox-fullscreen": "micuwat tu sapat",
+ "apisandbox-unfullscreen": "paazih kasabelih",
"apisandbox-submit": "miawaw tu milunguc",
"apisandbox-reset": "palawpis",
"apisandbox-retry": "miliyaw mitaneng",
@@ -801,7 +811,7 @@
"emailusernamesubmit": "patayzaan",
"emailfrom": "patigamiay:",
"emailto": "katukuh:",
- "emailsubject": "taazihan tu kawaw:",
+ "emailsubject": "satangahan:",
"emailmessage": "palatuh:",
"emailsend": "patigamitu",
"watchlist": "miazihay a piazihan tu sulit",
@@ -856,7 +866,7 @@
"protect-othertime": "zuma a tatukian:",
"protect-otherreason-op": "zuma a mahicaay",
"protect-edit-reasonlist": "midiput a mahicaay nu mikawaway-kalumyiti",
- "restriction-type": "pabeli tu kinli mahasa:",
+ "restriction-type": "tungus:",
"restriction-level": "kelec kasaselal:",
"minimum-size": "makaadidiâay a sausi",
"maximum-size": "sakatabakiay a sausi:",
@@ -866,10 +876,11 @@
"restriction-create": "patizeng",
"restriction-upload": "patapabaw",
"restriction-level-sysop": "maenapay a diput",
- "restriction-level-autoconfirmed": "madiputay a kasabelih - satizep mikawaway tu kalumyiti",
+ "restriction-level-autoconfirmed": "lalusa-diput",
"restriction-level-all": "amahicahicaay a kasalelal",
"undelete-fieldset-title": "patiku misumad nu ayaway",
"undeletebtn": "patiku",
+ "undeleteinvert": "kabelihan mipiliâ",
"undeletecomment": "mahicaay:",
"undelete-search-submit": "kilim",
"undelete-show-file-submit": "hang",
@@ -897,7 +908,7 @@
"whatlinkshere-title": "masasiket tazumaay a \"$1\" kasabelih",
"whatlinkshere-page": "Kasabelih:",
"linkshere": "isasaay a kasabelih masasiket tazuma tu [[:$1]] :",
- "isredirect": "miliyaw tazuma kasabelih",
+ "isredirect": "miliyaw patatuzuâ",
"istemplate": "palaculen tu kasabelih",
"isimage": "tangan-tangan misiket",
"whatlinkshere-prev": "saka {{PLURAL:$1|nuayaway}}",
@@ -918,6 +929,7 @@
"ipb-confirm": "malucekay tu langat",
"blockipsuccesssub": "milangat malahci",
"ipb-edit-dropdown": "malangat a mahicaay nu mikawaway-kalumyiti",
+ "ipb-unblock-addr": "mihulak tu langat $1",
"ipb-blocklist-duration-left": "$1 pakawili",
"ipusubmit": "misipu tina langat",
"autoblocklist-submit": "kilim",
@@ -935,6 +947,7 @@
"noautoblockblock": "mapasatezep lunuk milangat",
"emailblock": "mapasatezep imyiyo(email)",
"blocklink": "milangat",
+ "unblocklink": "mihulak tu langat",
"change-blocklink": "misumad tu langat",
"contribslink": "paanin",
"emaillink": "pabahel imyiyo(email)",
@@ -968,6 +981,7 @@
"allmessages-filter-translate": "mibelih",
"thumbnail-more": "patabaki(micuwat)",
"filemissing": "tangan mahedaw",
+ "thumbnail_image-missing": "tangan mahedaw: $1",
"import": "pacumuden kasabelih",
"import-interwiki-sourcepage": "saangangan kasabelih:",
"import-interwiki-templates": "yamalyilu sacahamin taazihan mitudung",
@@ -989,6 +1003,8 @@
"tooltip-ca-edit": "mikawaway-kalumyiti uyni a kasabelih",
"tooltip-ca-viewsource": "uyni kasabelih madiputay tuway.\nkapah kisu miciwsace tuyni kasabelih sakatizeng bangu",
"tooltip-ca-history": "uyini kasabelih nasawniay a sumad",
+ "tooltip-ca-protect": "midiput tina kasabelih",
+ "tooltip-ca-delete": "misipu tina kasabelih",
"tooltip-ca-move": "milimad tina kasabelih",
"tooltip-ca-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
"tooltip-search": "kilim {{SITENAME}}",
@@ -1078,24 +1094,31 @@
"show-big-image-preview": "pataayaway miazih hacica ku tabaki: $1.",
"show-big-image-size": "$1 Ã $2 syangsu",
"file-info-gif-looped": "palalacalen",
- "file-info-gif-frames": "$1 {{PLURAL:$1|misabacu}}",
- "file-info-png-frames": "$1 {{PLURAL:$1|misabacu}}",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|kulit sapat}}",
+ "file-info-png-frames": "$1 {{PLURAL:$1|kulit sapat}}",
"newimages": "baluhay tangan a sulu nu zunga",
"newimages-legend": "kilim",
"noimages": "inayiâ amahicahica tu zunga.",
"gallery-slideshow-toggle": "ketun mibalic sukep tu zunga",
"ilsubmit": "kilim",
"bydate": "ahizan tu demiad",
+ "seconds": "$1 a {{PLURAL:$1|abeti}}",
"minutes": "{{PLURAL:$1|$1 widi}}",
"hours": "{{PLURAL:$1|$1 tuki}}",
"days": "$1 {{PLURAL:$1|a demiad}}",
"ago": "ayaw nu $1",
"just-now": "nasawni",
+ "hours-ago": "ayaw $1 {{PLURAL:$1|a tuki}}",
+ "minutes-ago": "ayaw $1 {{PLURAL:$1|widi}}",
+ "seconds-ago": "ayaw $1 {{PLURAL:$1|a beti}}",
"monday-at": "sakacacay a demiad nu lipay i$1",
"friday-at": "sakalima a demied nu lipay i $1",
"saturday-at": "sakaenem a demiad nu lipay i $1",
+ "sunday-at": "pilipayan i $1",
"metadata": "pulita tu kalunasulitan",
"metadata-help": "uyni tangan labuay amin yamalyilu zuma cesyun, uyni a cesyun akay nay suewyi sasasing asaca sapisekyin i tapang asaca suwyihwa saayaw katukuh pahzekan a nakawawan mapacunusay. anu nay tangan saayaway setyitase masumadtu, hatizaay pulita kalunasulitan akay laâcus mileku mabetil a misumad tu tangan.",
+ "metadata-expand": "paazih pulita kalunasulitan",
+ "metadata-collapse": "midimut pulitaay a kalunasulitan",
"metadata-fields": "i tini palatuh patahkal i labuay a EXIF pulita tu kalunasulitanay a kakitizaan, yamalyilu i zunga paazih kasabelih, sapipulita tu cudad nu nasulitan malepiâ paazih palatuh.\nzumaay a pulita tu cudad pataayaw tu kawaw midimut.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "ahebal",
"exif-imagelength": "takalaw sulyang",
@@ -1151,7 +1174,9 @@
"exif-gaincontrol": "makaazihay misimaw",
"exif-contrast": "e-contrast",
"exif-saturation": "matumesay a sulyang",
+ "exif-sharpness": "kacidem",
"exif-devicesettingdescription": "sakaluk setin sapuelac",
+ "exif-subjectdistancerange": "baat nu tatizengan a liwliw",
"exif-gpslatituderef": "pyiwyi asaca nanwyi",
"exif-gpslongituderef": "tongcing asaca sicing",
"exif-gpsaltituderef": "nutakalaw namakay bayuâ miazih tu tatengaâay a sulyang",
@@ -1165,6 +1190,7 @@
"exif-gpsdatestamp": "GPS a demiad",
"exif-keywords": "aazihen dulit",
"exif-worldregioncreated": "zunga masasing a kakitizaan",
+ "exif-countrycreated": "zunga masasingan a kanatal",
"exif-provinceorstatecreated": "yakuwanan a sasing",
"exif-citycreated": "yatukay a sasing",
"exif-countrydest": "paazih tu kanatal",
@@ -1194,6 +1220,7 @@
"exif-label": "aazihen paya",
"exif-rightscertificate": "nisangaâan niza tu tungus a kawaw nu makuwanay a pincen",
"exif-copyrighted": "nisangaâan niza tu tungus a kawaw setyitase",
+ "exif-copyrightowner": "nizaay nisangaâan tu tungus a kawaw",
"exif-usageterms": "mamaala a cedang",
"exif-webstatement": "nabalucu'an nu i telay nisangaâan niza tu tungus a kawaw",
"exif-morepermissionsurl": "paliyuh pabeli tu kinli a cesyun",
@@ -1223,7 +1250,10 @@
"exif-exposureprogram-4": "kiyata maluayaw",
"exif-subjectdistance-value": "$1 mi",
"exif-meteringmode-2": "pikuwanan pacunus lalet",
+ "exif-meteringmode-3": "baniyut-ditek",
+ "exif-meteringmode-4": "kayadah- baniyut-ditek",
"exif-meteringmode-5": "muse",
+ "exif-meteringmode-6": "liyad",
"exif-meteringmode-255": "zuma",
"exif-lightsource-1": "likat",
"exif-lightsource-2": "inkwang a tinghuy",
@@ -1231,6 +1261,9 @@
"exif-lightsource-9": "cilalah a demiad",
"exif-lightsource-10": "kenutan",
"exif-lightsource-11": "iduutay",
+ "exif-lightsource-17": "tatungus likat nu dingki A",
+ "exif-lightsource-18": "tatungus likat nu dingki B",
+ "exif-lightsource-19": "tatungus likat nu dingki C",
"exif-lightsource-255": "zuma katahkalan nu likat",
"exif-flash-fired-0": "sabelabelatay a tinghui caay henay miwawah",
"exif-flash-fired-1": "sabelabelatay a tinghui miwawah tuway",
@@ -1287,6 +1320,7 @@
"exif-objectcycle-b": "namalanam atu namalahuk",
"exif-gpsdirection-t": "tatengaay tatuzuâan",
"exif-gpsdirection-m": "tatuzu'an nu tyice",
+ "exif-ycbcrpositioning-1": "teban",
"exif-ycbcrpositioning-2": "palecad miala tu maaziahan",
"exif-dc-contributor": "paaninay tu kalusasing",
"exif-dc-date": "demiad",
@@ -1311,15 +1345,18 @@
"exif-iimcategory-spo": "wundukay",
"exif-iimcategory-wea": "demidad",
"exif-urgency-normal": "tatungus ($1)",
+ "exif-urgency-low": "puânel ($1)",
"exif-urgency-high": "takalaw ($1)",
"namespacesall": "hamin",
"monthsall": "hamin",
"recreate": "miliyaw miteka patizeng",
+ "confirm-purge-title": "misipu tina kasabelih",
"confirm_purge_button": "malucekay",
"confirm-watch-button": "malucekay",
"confirm-unwatch-button": "malucekay",
"confirm-rollback-button": "malucekay",
"quotation-marks": "\"$1\"",
+ "imgmultipageprev": "ayaway cacay a belih",
"imgmultipagenext": "zikuzan a belih â",
"imgmultigo": "mileku!",
"img-lang-default": "(pataayaw tu kawaw a kamu)",
@@ -1327,6 +1364,7 @@
"ascending_abbrev": "masalaylay adidiâay katukuh tabakiay",
"descending_abbrev": "masalaylay tabakiay katukuh adidiâay",
"table_pager_next": "zikuzan a belih",
+ "table_pager_first": "sakacacay a belih",
"table_pager_last": "sazikuzay a kasabelih",
"table_pager_limit_label": "paybelih a sulit:",
"table_pager_limit_submit": "mileku",
@@ -1336,12 +1374,15 @@
"watchlistedit-normal-title": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
"watchlistedit-normal-submit": "misipu satangahan",
"watchlistedit-clear-title": "misipu miazihay a piazihan tu sulit",
+ "watchlisttools-clear": "misipu miazihay a piazihan tu sulit",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1| sasukamu ]])",
"timezone-local": "itizaay",
"version": "baziyong",
"version-skins": "malacul tu nuhekalan",
"version-specialpages": "sazumaay a kasabelih",
"version-parserhooks": "kulawid nu saheciay sakaluk",
+ "version-variables": "masumaday-sausi",
+ "version-antispam": "mitenaâ tu babakahen a latuh",
"version-other": "zuma",
"version-mediahandlers": "myiti saungayay a sakaluk",
"version-hooks": "kulawid",
@@ -1351,7 +1392,7 @@
"version-skin-colheader-name": "nuhekalan",
"version-ext-colheader-version": "baziyong",
"version-ext-colheader-license": "sapabeli tu kinli a cedang",
- "version-ext-colheader-description": "patahkal",
+ "version-ext-colheader-description": "sapuelac",
"version-ext-colheader-credits": "masacudaday",
"version-poweredby-others": "zuma",
"version-software": "malacul tu ku zwanti",
@@ -1362,9 +1403,11 @@
"version-libraries-library": "sulu nu cengse",
"version-libraries-version": "baziyong",
"version-libraries-license": "sapabeli tu kinli a cedang",
- "version-libraries-description": "patahkal",
+ "version-libraries-description": "sapuelac",
"version-libraries-authors": "masacudaday",
"redirect-submit": "mileku",
+ "redirect-lookup": "palalitemuh tu kawaw:",
+ "redirect-value": "sulyang:",
"redirect-page": "kasabelih ID",
"redirect-file": "kalungangan nu tangan",
"redirect-logid": "nasulitan nazipaâan ID",
@@ -1386,8 +1429,10 @@
"tag-filter-submit": "kilim",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|aazihen payaâ}}]]: $2)",
"tag-mw-contentmodelchange": "lacul tatudungen misangaâ misumad",
+ "tags-title": "aazihen a paya",
"tags-tag": "aazihen a paya kalungangan",
"tags-source-header": "saangangan",
+ "tags-active-header": "miwawah",
"tags-actions-header": "saungay",
"tags-active-yes": "hang",
"tags-active-no": "caay",
@@ -1437,19 +1482,22 @@
"logentry-move-move": "$1 {{GENDER:$2|milimad tuway}} kasabelih $3 katukuh $4",
"logentry-newusers-create": "{{GENDER:$2|patizeng}} misaungayay canghaw tuway $1",
"logentry-upload-upload": "$1 {{GENDER:$2|masayacay tuway}} $3",
+ "log-name-managetags": "aazihan a paya kuwan tu nasulitan",
"log-name-tag": "aazihen a paya nasulitan nazipaâan",
"rightsnone": "(nayiâ)",
"feedback-back": "tatiku",
"feedback-cancel": "palawpes",
- "feedback-close": "pahezek",
+ "feedback-close": "malahecitu",
"feedback-external-bug-report-button": "munday nu patubeli",
+ "feedback-dialog-title": "patahkal tu kamu mihwidubaku",
"feedback-message": "palatuh:",
- "feedback-subject": "taazihan tu kawaw:",
+ "feedback-subject": "satangahan:",
"feedback-submit": "patayzaan",
"feedback-thanks-title": "kukay tisuwanan!",
"searchsuggest-search": "kilim {{SITENAME}}",
"api-error-unknownerror": "caay kapulita ku mungangaw: \"$1\".",
"duration-seconds": "$1 {{PLURAL:$1|a beti}}",
+ "duration-minutes": "$1 {{PLURAL:$1|widi}}",
"duration-hours": "$1 {{PLURAL:$1|tuki}}",
"duration-weeks": "$1 {{PLURAL:$1|a lipas}}",
"duration-years": "$1 {{PLURAL:$1|a mihca}}",
@@ -1474,6 +1522,7 @@
"action-pagelang": "misumad kasabelih a kamu",
"log-name-pagelang": "kamu misumad a nasulitan nazipaâan",
"mediastatistics": "myiti sausi cesyun",
+ "mediastatistics-table-mimetype": "MIME nikalahizaan",
"mediastatistics-table-extensions": "kapah saungay a mikilulay a ngangan nu tangan",
"mediastatistics-table-count": "tangan nikayadah",
"mediastatistics-table-totalbytes": "pulung sausi nu hacica-tabaki",
@@ -1525,6 +1574,7 @@
"log-action-filter-all": "hamin",
"log-action-filter-block-block": "milangat",
"log-action-filter-block-reblock": "milangat tu sapisumad",
+ "log-action-filter-block-unblock": "mihulak tu langat",
"log-action-filter-delete-delete": "misipu kasabelih",
"log-action-filter-delete-delete_redir": "miliyaw patatuzuâ mipakutay tu sulit",
"log-action-filter-delete-restore": "kasabelih milawpes tu sipu",
@@ -1533,6 +1583,7 @@
"log-action-filter-managetags-create": "patizeng aazihen paya",
"log-action-filter-managetags-delete": "misipu aazihen a paya",
"log-action-filter-managetags-activate": "aazihen a paya miteka",
+ "log-action-filter-managetags-deactivate": "aazihan a paya palawpesen ku pisaungay",
"log-action-filter-newusers-autocreate": "lunuk patizeng",
"log-action-filter-patrol-patrol": "lima-saungay tayza mikibi",
"log-action-filter-patrol-autopatrol": "lunuk tayza mikibi",
@@ -1555,10 +1606,11 @@
"authmanager-provider-temporarypassword": "nanunuz a mima",
"authprovider-confirmlink-request-label": "manakanca masasiket tu canghaw",
"authprovider-resetpass-skip-label": "sekipo",
+ "authform-newtoken": "mahedaw mima-sacukcuk. $1",
"authform-wrongtoken": "mima-sacukcuk mungangaw",
"specialpage-securitylevel-not-allowed-title": "amana",
"cannotauth-not-allowed-title": "caykataneng ku tungus",
- "changecredentials": "misumad tu sapangangan",
+ "changecredentials": "misumad tu sapangangan-wacay",
"removecredentials": "misipu sapangangan",
"credentialsform-provider": "pincen nikalahizaan:",
"credentialsform-account": "canghaw kalungangan:",
diff --git a/languages/i18n/az.json b/languages/i18n/az.json
index d2173a2017..3628ddf527 100644
--- a/languages/i18n/az.json
+++ b/languages/i18n/az.json
@@ -998,11 +998,69 @@
"recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hÉmçinin bax: [[Special:NewPages|yeni sÉhifÉlÉrin siyahısı]])",
"recentchanges-submit": "GöstÉr",
+ "rcfilters-legend-heading": "Abreviaturalar siyahısı: ",
+ "rcfilters-other-review-tools": "DigÉr yoxlama alÉtlÉri ",
+ "rcfilters-group-results-by-page": "DÉyiÅikliklÉri sÉhifÉlÉrÉ görÉ qruplaÅdır",
+ "rcfilters-grouping-title": "QruplaÅdırma",
+ "rcfilters-activefilters": "Aktiv filtrlÉr",
+ "rcfilters-advancedfilters": "GeniÅ filtr",
+ "rcfilters-limit-title": "GöstÉrilmÉli dÉyiÅikliklÉr",
+ "rcfilters-limit-shownum": "Son {{PLURAL:$1|dÉyiÅikliyi|$1 dÉyiÅikliyi}} göstÉr",
+ "rcfilters-days-title": "Son günlÉr",
+ "rcfilters-hours-title": "Son saatlar",
+ "rcfilters-days-show-days": "$1 {{PLURAL:$1|gün|gün}}",
+ "rcfilters-days-show-hours": "$1 {{PLURAL:$1|saat|saat}}",
+ "rcfilters-quickfilters": "YaddaÅdakı filtrlÉr",
+ "rcfilters-quickfilters-placeholder-title": "YaddaÅa verilmiÅ keçid yoxdur",
+ "rcfilters-quickfilters-placeholder-description": "Filtr nizamlamalarını yaddaÅda saxlamaq vÉ sonradan tÉkrar istifadÉ etmÉk üçün aÅaÄıdakı Aktiv FiltrlÉr bölmÉsindÉki ÉlfÉcin niÅanını tıqlayın.",
+ "rcfilters-savedqueries-remove": "Sil",
"rcfilters-savedqueries-new-name-label": "Ad",
"rcfilters-savedqueries-cancel-label": "LÉÄv et",
+ "rcfilters-savedqueries-add-new-title": "Hazırkı filtr nizamlamalarını yaddaÅa ver",
+ "rcfilters-restore-default-filters": "Standart filtrlÉri bÉrpa et",
+ "rcfilters-clear-all-filters": "Bütün filtrlÉri sil",
+ "rcfilters-show-new-changes": "Æn son dÉyiÅikliklÉri göstÉr",
+ "rcfilters-search-placeholder": "Son dÉyiÅikliklÉri filtrlÉ (siyahıdan seçin vÉ ya yazın)",
+ "rcfilters-empty-filter": "Aktiv filtr yoxdur. Bütün redaktÉlÉr göstÉrilir.",
"rcfilters-filterlist-title": "FiltrlÉr",
+ "rcfilters-filterlist-feedbacklink": "Bu (yeni) filtrasiya alÉtlÉri barÉdÉ fikirlÉrinizi bizimlÉ bölüÅün",
+ "rcfilters-highlightbutton-title": "NÉticÉlÉri vurÄula",
+ "rcfilters-highlightmenu-title": "RÉng seçin",
+ "rcfilters-highlightmenu-help": "Bu xüsusiyyÉti rÉnglÉmÉk üçün rÉng seçin",
+ "rcfilters-filtergroup-authorship": "RedaktÉlÉrin müÉllifliyi",
+ "rcfilters-filter-editsbyself-label": "Ãz dÉyiÅikliklÉriniz",
+ "rcfilters-filter-editsbyother-label": "BaÅqalarının dÉyiÅikliklÉri",
+ "rcfilters-filtergroup-userExpLevel": "Ä°stifadÉçi qeydiyyatı vÉ tÉcrübÉsi",
+ "rcfilters-filter-user-experience-level-registered-label": "Qeydiyyatlı",
+ "rcfilters-filter-user-experience-level-unregistered-label": "Qeydiyyatsız",
+ "rcfilters-filter-user-experience-level-newcomer-label": "TÉcrübÉsizlÉr",
+ "rcfilters-filter-user-experience-level-learner-label": "ÃyrÉnÉnlÉr",
+ "rcfilters-filter-user-experience-level-experienced-label": "TÉcrübÉli istifadÉçilÉr",
+ "rcfilters-filtergroup-automated": "Avtomatik redaktÉlÉr",
"rcfilters-filter-bots-label": "Bot",
+ "rcfilters-filter-humans-label": "Ä°nsan (qeyri-bot)",
+ "rcfilters-filtergroup-significance": "ÆhÉmiyyÉtlilik",
"rcfilters-filter-minor-label": "Kiçik redaktÉlÉr",
+ "rcfilters-filter-major-label": "Adi redaktÉlÉr",
+ "rcfilters-filtergroup-watchlist": "Ä°zlÉmÉ siyahısındakı sÉhifÉlÉr",
+ "rcfilters-filter-watchlist-watched-label": "Ä°zlÉmÉ siyahısında olan",
+ "rcfilters-filter-watchlist-watchednew-label": "Ä°zlÉmÉ siyahısında yeni redaktÉlÉr",
+ "rcfilters-filter-watchlist-notwatched-label": "Ä°zlÉmÉ siyahısında olmayan",
+ "rcfilters-filtergroup-changetype": "DÉyiÅiklik növü",
+ "rcfilters-filter-pageedits-label": "SÉhifÉ redaktÉlÉri",
+ "rcfilters-filter-newpages-label": "SÉhifÉ yaradılmaları",
+ "rcfilters-filter-categorization-label": "Kateqoriya dÉyiÅikliklÉri",
+ "rcfilters-filter-logactions-label": "Qeydiyyatlı redaktÉlÉr",
+ "rcfilters-filter-logactions-description": "Ä°nzibati tÉdbirlÉr, hesab yaradılmaları, sÉhifÉ silinmÉlÉri, yüklÉmÉlÉrâ¦",
+ "rcfilters-filtergroup-lastRevision": "Son versiyalar",
+ "rcfilters-filter-lastrevision-label": "Hazırkı versiya",
+ "rcfilters-filter-previousrevision-label": "Sonuncu olmayan versiya",
+ "rcfilters-exclude-button-off": "SeçilÉnlÉri istisna et",
+ "rcfilters-exclude-button-on": "SeçilmiÅlÉrin çıxarılması",
+ "rcfilters-view-advanced-filters-label": "GeniÅlÉndirilmiÅ filtrlÉr",
+ "rcfilters-view-tags": "EtiketlÉnmiÅ redaktÉlÉr",
+ "rcfilters-view-namespaces-tooltip": "NÉticÉlÉri adlar fÉzasına görÉ filtrlÉ",
+ "rcfilters-view-tags-tooltip": "NÉticÉlÉri redaktÉ etiketlÉri Ésasında filtrlÉ",
"rcnotefrom": "AÅaÄıda $2 -dÉn bu yana olan dÉyiÅikliklÉr göstÉrilib ($1 -dÉn çox olmayaraq).",
"rclistfrom": "$3 $2 vaxtından baÅlayaraq yeni dÉyiÅikliklÉri göstÉr",
"rcshowhideminor": "Kiçik redaktÉlÉri $1",
@@ -1049,6 +1107,7 @@
"recentchangeslinked-summary": "AÅaÄıdakı siyahı, qeyd olunan sÉhifÉyÉ (vÉ ya qeyd olunan kateqoriyadakı sÉhifÉlÉrÉ) daxili keçid verÉn sÉhifÉlÉrdÉ edilmiÅ son dÉyiÅikliklÉrin siyahısıdır.\n[[Special:Watchlist|Ä°zlÉmÉ siyahınızdakı]] sÉhifÉlÉr '''qalın''' ÅriftlÉ göstÉrilmiÅdir.",
"recentchangeslinked-page": "SÉhifÉ adı:",
"recentchangeslinked-to": "Qeyd olunan sÉhifÉdÉki deyil, ona daxili keçid verÉn sÉhifÉlÉrdÉki dÉyiÅikliklÉri göstÉr",
+ "recentchanges-page-added-to-category": "[[:$1]] kateqoriyaya ÉlavÉ edildi",
"upload": "Fayl yüklÉ",
"uploadbtn": "SÉnÉd yüklÉ",
"reuploaddesc": "Return to the upload form.",
diff --git a/languages/i18n/azb.json b/languages/i18n/azb.json
index e21d635b35..8b650ca7d5 100644
--- a/languages/i18n/azb.json
+++ b/languages/i18n/azb.json
@@ -867,7 +867,7 @@
"search-interwiki-caption": "Ùارداش پرÙÚÙâÙر",
"search-interwiki-default": "$1 دا٠سÙÙÙجÙار:",
"search-interwiki-more": "(داÙا)",
- "search-interwiki-more-results": "داÙا ÚÙÙØ® سÙÙÙÙجâÙار",
+ "search-interwiki-more-results": "داÙا ÚÙÙØ® ÙتÛجÙâÙر",
"search-relatedarticle": "اÛÙÚ¯ÛÙÛ",
"searchrelated": "اÛÙÚ¯ÛÙÛ",
"searchall": "بÙتÙÙ",
@@ -993,8 +993,8 @@
"prefs-help-prefershttps": "سÛزÛ٠ب٠ترجÛØÛÙÛزÛÙ Ø§Ø«Ø±Û Ø³ÛزÛ٠سÙÙØ±Ø§Ú©Û Ú¯ÛرÛØ´ÛÙÛز د٠سÙÙرا اÙÙاجاÙ.",
"prefswarning-warning": "ترجÛØÙرÛÙÛز٠اÙÙا٠دÙÛÛØ´ÛÚ© Ùر ÙÙ٠آرتÛرÛÙÙ
Ûب.\nاÛر ب٠صÙØÙ ÙÛÙ \"$1\" اÙستÙÙ٠باسÛÙÙ
اÙ
Ûشدا٠اÙÙج٠ترک ائتسز ترجÛØÙرÛÙÛز آرتÛرÛÙÙ
ÛÛاجاÙ.",
"prefs-tabs-navigation-hint": "اÛÙ¾ اÙج٠: سÛز ائÙÛ٠بÛÙرسÛز ساغ ٠سÙ٠جÙت ÙÛÙ
ا Ú©ÛÙÛد ÙرÛÙد٠ÙÛشاÙÙ ÙÙ ÙÛ٠دÙÙاÙÙ
Ø§Ø³Û ÙÛشاÙÙ Ùر ÙÛستÛÙد٠اÛستÙاد٠ائد٠سÛز.",
- "userrights": "اÛØ´ÙدÛØ¬Û ØاÙÙارÛ",
- "userrights-lookup-user": "بÛر اÛشدÛØ¬Û Ø³Ø¦Ú",
+ "userrights": "اÛØ´Ùد٠ØاÙÙارÛ",
+ "userrights-lookup-user": "بÛر اÛØ´Ùد٠سئÚ",
"userrights-user-editname": "اÛستÛÙادÙâÚÛ Ø¢Ø¯ÛâÙÛØ²Û ÛازÛÙ",
"editusergroup": "اÛستÛÙادÙâÚÛ ÙرÙÙ¾ÙÙ٠دÙÛÛشدÛر",
"editinguser": "اÛستÛÙادÙâÚÛ '[[User:$1|$1]]' $2 اÙÚÙ٠اÛستÛÙادÙâÚÛ ØÙÙÙâÙØ§Ø±Û Ø¯ÛÛشدÛرÛÙÛر",
@@ -1009,7 +1009,7 @@
"userrights-changeable-col": "دÙÙÛشدÛر٠بÛÙدÛÚ¯ÛÙÛز ÙرÙÙ¾Ùار",
"userrights-unchangeable-col": "دÙÙÛشدÛر٠بÛÙÙ
ÙâدÛÚ¯ÛÙÛز ÙرÙÙ¾Ùار",
"userrights-expiry-current": "$1-د٠ÙÛرتÙÙÙر",
- "userrights-expiry-othertime": "باشÙا Ùاخت",
+ "userrights-expiry-othertime": "Ø¢ÛØ±Û Úاغ",
"userrights-conflict": "اÛستÛÙادÙâÚÛ ØاÙÙØ§Ø±Û ØªÙÙÙÙØ´Ù
اسÛ! ÙÙØ·Ùا٠گÙزÙÙ Û٠٠دÙÛÛشدÛرÙ
ÙâÙرÛÙÛØ²Û ÛئÙÛâد٠ائدÛÙ.",
"group": "گرÙÙ:",
"group-user": "اÛستÙادÙâÚÛÙر",
diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json
index ce6ae9ec47..de3c4189c3 100644
--- a/languages/i18n/be-tarask.json
+++ b/languages/i18n/be-tarask.json
@@ -742,6 +742,7 @@
"parser-template-loop-warning": "ÐÑÑÑÐ»ÐµÐ½Ñ ÑÑÐºÐ»Ñ Ñ ÑаблÑнаÑ
: [[$1]]",
"template-loop-category": "СÑаÑÐ¾Ð½ÐºÑ Ð· ÑÑклÑÐ¼Ñ ÑаблÑнаÑ",
"template-loop-category-desc": "СÑаÑонка ÑÑÑÑмлÑвае ÑÑÐºÐ»Ñ ÑаблÑнÑ, г. зн., ÑаблÑн ÑклÑÑае Ñам ÑÑбе ÑÑкÑÑÑÑÑна.",
+ "template-loop-warning": "ÐапÑÑÑджанÑне: гÑÑÐ°Ñ ÑÑаÑонка вÑклÑкае [[:$1]], ÑÐºÑ Ð·ÑÑÑлÑеÑÑа пÑÑÑÑнай ÑÑÐºÐ»Ñ ÑаблÑÐ½Ð°Ñ (бÑÑконÑÑ ÑÑкÑÑÑÑÑÐ½Ñ Ð²ÑклÑк).",
"parser-template-recursion-depth-warning": "ÐеÑавÑÑÐ°Ð½Ñ Ð»ÑмÑÑ Ð³Ð»ÑбÑÐ½Ñ ÑÑкÑÑÑÑÑ ÑаблÑÐ½Ñ ($1)",
"language-converter-depth-warning": "ÐеÑавÑÑанае абмежаванÑне глÑбÑÐ½Ñ ÐºÐ°Ð½Ð²ÑÑÑаÑÑ Ð²Ð°ÑÑÑнÑÐ°Ñ Ð¼Ð¾Ð²Ñ ($1)",
"node-count-exceeded-category": "СÑаÑÐ¾Ð½ÐºÑ Ð·Ñ Ð¿ÐµÑавÑÑанай колÑкаÑÑÑÑ Ð²ÑзлоÑ",
@@ -1405,6 +1406,7 @@
"rcfilters-watchlist-markseen-button": "ÐазнаÑÑÑÑ ÑÑе зÑÐ¼ÐµÐ½Ñ Ñк пÑагледжанÑÑ",
"rcfilters-watchlist-edit-watchlist-button": "Ð ÑдагаваÑÑ Ð²Ð°Ñ ÑÑпÑÑ Ð½Ð°Ð·ÑÑанÑÐ½Ñ Ð·Ð° ÑÑаÑонкамÑ",
"rcfilters-watchlist-showupdated": "ÐÑÐ¼ÐµÐ½Ñ ÑÑаÑонак, ÑкÑÑ Ð²Ñ Ð½Ðµ Ð½Ð°Ð²ÐµÐ´Ð²Ð°Ð»Ñ Ð¿Ð°ÑÑÐ»Ñ Ð³ÑÑÑÑ
зÑменаÑ, пазнаÑанÑÑ ÑоÑÑÑÑм з адпаведнÑÐ¼Ñ Ð¿Ð°Ð·Ð½Ð°ÐºÐ°Ð¼Ñ.",
+ "rcfilters-preference-label": "СÑ
аваÑÑ Ð¿Ð°Ð»ÐµÐ¿ÑанÑÑ Ð²ÑÑÑÑÑ Ð°Ð¿Ð¾ÑнÑÑ
зÑменаÑ",
"rcnotefrom": "ÐÑжÑй {{PLURAL:$5|знаÑ
одзÑÑÑа зÑмена|знаÑ
одзÑÑÑа зÑменÑ}} з $4 $3 (да $1 на ÑÑаÑонкÑ).",
"rclistfromreset": "СкÑнÑÑÑ Ð²ÑÐ±Ð°Ñ Ð´Ð°ÑÑ",
"rclistfrom": "ÐаказаÑÑ Ð·ÑÐ¼ÐµÐ½Ñ Ð· $2 $3",
@@ -3896,5 +3898,6 @@
"cannotlink-no-provider-title": "ÐÑма ÑаÑ
ÑÐ½ÐºÐ°Ñ Ð´Ð»Ñ Ð´Ð°Ð»ÑÑÑнÑнÑ",
"cannotlink-no-provider": "ÐÑма ÑаÑ
ÑÐ½ÐºÐ°Ñ Ð´Ð»Ñ Ð´Ð°Ð»ÑÑÑнÑнÑ.",
"linkaccounts": "ÐалÑÑÑнÑне ÑаÑ
ÑнкаÑ",
- "linkaccounts-success-text": "РаÑ
Ñнак бÑÑ Ð´Ð°Ð»ÑÑанÑ."
+ "linkaccounts-success-text": "РаÑ
Ñнак бÑÑ Ð´Ð°Ð»ÑÑанÑ.",
+ "linkaccounts-submit": "ÐалÑÑÑÑÑ ÑаÑ
ÑнкÑ"
}
diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json
index 6812863793..77d0083942 100644
--- a/languages/i18n/bn.json
+++ b/languages/i18n/bn.json
@@ -71,6 +71,7 @@
"tog-watchlisthideminor": "à¦
নà§à¦²à§à¦²à§à¦à§à¦¯ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦à§à¦²à§ নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦¯à¦¼ লà§à¦à¦¿à¦¯à¦¼à§ রাà¦à¦¾ হà§à¦",
"tog-watchlisthideliu": "à¦
à§à¦¯à¦¾à¦à¦¾à¦à¦¨à§à¦à§ পà§à¦°à¦¬à§à¦¶à¦à§à¦¤ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§à¦¦à§à¦° সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦à§à¦²à¦¿ নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦¯à¦¼ লà§à¦à¦¿à¦¯à¦¼à§ রাà¦à¦¾ হà§à¦",
"tog-watchlistreloadautomatically": "পà§à¦°à¦¤à¦¿à¦¬à¦¾à¦° à¦à¦à¦à¦¿ à¦à¦¾à¦à¦à¦¨à¦¿ পরিবরà§à¦¤à¦¨ হà¦à¦¯à¦¼à¦¾ মাতà§à¦°à¦ সà§à¦¬à¦¯à¦¼à¦à¦à§à¦°à¦¿à¦¯à¦¼à¦à¦¾à¦¬à§ নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦à¦¿ পà§à¦¨à¦à¦²à§à¦¡ à¦à¦°à¦¾ হà§à¦ (à¦à¦¾à¦à¦¾à¦¸à§à¦à§à¦°à¦¿à¦ªà§à¦ পà§à¦°à¦¯à¦¼à§à¦à¦¨)",
+ "tog-watchlistunwatchlinks": "নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦° à¦à§à¦à§à¦¤à¦¿à¦¤à§ সরাসরি দà§à¦à¦¾/না দà§à¦à¦¾à¦° সà¦à¦¯à§à¦ যà§à¦à§à¦¤ à¦à¦°à§à¦¨ (à¦à¦ à¦à¦¾à¦°à§à¦¯à¦à¦¾à¦°à¦¿à¦¤à¦¾ à¦à¦¨à§à¦¯ à¦à¦¾à¦à¦¾à¦¸à§à¦à§à¦°à¦¿à¦ªà§à¦ পà§à¦°à¦¯à¦¼à§à¦à¦¨)",
"tog-watchlisthideanons": "বà§à¦¨à¦¾à¦®à§ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§à¦¦à§à¦° সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦à§à¦²à¦¿ নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦¯à¦¼ à¦à¦¡à¦¼à¦¾à¦²à§ রাà¦à¦¾ হà§à¦",
"tog-watchlisthidepatrolled": "পরà§à¦à§à¦·à¦¿à¦¤ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦à§à¦²à¦¿ নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦¯à¦¼ লà§à¦à¦¿à¦¯à¦¼à§ রাà¦à¦¾ হà§à¦",
"tog-watchlisthidecategorization": "পাতার শà§à¦°à§à¦£à§à¦¬à¦¦à§à¦§à¦à¦°à¦£ লà§à¦à¦¿à¦¯à¦¼à§ রাà¦à¦¾ হà§à¦",
@@ -721,7 +722,7 @@
"permissionserrorstext-withaction": "à¦à¦ªà¦¨à¦¾à¦° $2 à¦
নà§à¦®à¦¤à¦¿ নà§à¦, যার {{PLURAL:$1|à¦à¦¾à¦°à¦£à¦à¦¿|à¦à¦¾à¦°à¦£à¦à§à¦²à¦¿}} হল:",
"contentmodelediterror": "à¦à¦ªà¦¨à¦¿ à¦à¦ পà§à¦¨à¦°à§à¦¬à¦¿à¦¬à§à¦à¦¨à¦¾ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à¦°à¦¤à§ পারবà§à¦¨ না à¦à¦¾à¦°à¦£ à¦à¦° বিষয়বসà§à¦¤à§ মডà§à¦² $1
, যা বরà§à¦¤à¦®à¦¾à¦¨ বিষয়বসà§à¦¤à§ মডà§à¦² $2
-à¦à¦° থà§à¦à§ à¦à¦¿à¦¨à§à¦¨à¥¤",
"recreate-moveddeleted-warn": "'''সতরà§à¦à§à¦à¦°à¦£: à¦à¦ªà¦¨à¦¿ à¦à¦®à¦¨ à¦à¦à¦à¦¿ পাতা পà§à¦¨à¦°à¦¾à¦¯à¦¼ তà§à¦°à¦¿ à¦à¦°à¦à§à¦¨ যা পà§à¦°à§à¦¬à§ à¦
পসারণ à¦à¦°à¦¾ হয়à§à¦à¦¿à¦²à¥¤'''\n\nà¦à¦ªà¦¨à¦¿ পাতাà¦à¦¿ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à¦¾à¦²à¦¿à¦¯à¦¼à§ যাà¦à¦¯à¦¼à¦¾ ঠিঠহবৠà¦à¦¿à¦¨à¦¾, তা বিবà§à¦à¦¨à¦¾ à¦à¦°à§à¦¨à¥¤\nà¦à¦ªà¦¨à¦¾à¦° সà§à¦¬à¦¿à¦§à¦¾à¦°à§à¦¥à§ পাতাà¦à¦¿à¦° à¦
পলà§à¦ªà§à¦¤à¦¿ লঠà¦à¦à¦¾à¦¨à§ দà§à¦¯à¦¼à¦¾ হলà§:",
- "moveddeleted-notice": "à¦à¦ পাতাà¦à¦¿ à¦
পসারণ à¦à¦°à¦¾ হয়à§à¦à§à¥¤\nসà§à¦¤à§à¦° হিসà§à¦¬à§ নিà¦à§ ঠপাতার à¦
বলà§à¦ªà§à¦¤à¦¿ লঠদà§à¦à¦¯à¦¼à¦¾ হলà§à¥¤",
+ "moveddeleted-notice": "à¦à¦ পাতাà¦à¦¿ à¦
পসারণ à¦à¦°à¦¾ হয়à§à¦à§à¥¤\nসà§à¦¤à§à¦° হিসà§à¦¬à§ নিà¦à§ à¦à¦ পাতার à¦
পসারণ, সà§à¦°à¦à§à¦·à¦¾ ঠসà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° লঠদà§à¦à¦¯à¦¼à¦¾ হলà§à¥¤",
"moveddeleted-notice-recent": "দà§à¦à¦à¦¿à¦¤, à¦à¦ পাতাà¦à¦¿ সামà§à¦ªà§à¦°à¦¤à¦¿ à¦
পসারিত হয়à§à¦à§ (সরà§à¦¬à¦¶à§à¦· ২৪ à¦à¦£à§à¦à¦¾à¦¯à¦¼)।\nসà§à¦¤à§à¦° হিসà§à¦¬à§ নিà¦à§ à¦à¦ পাতা à¦
পসারণ, সà§à¦°à¦à§à¦·à¦¾ ঠসà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° লঠদà§à¦¯à¦¼à¦¾ হয়à§à¦à§à¥¤",
"log-fulllog": "সমà§à¦ªà§à¦°à§à¦£ লঠদà§à¦à§à¦¨",
"edit-hook-aborted": "হà§à¦ দà§à¦¬à¦¾à¦°à¦¾ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ পরিতà§à¦¯à¦à§à¦¤ হয়à§à¦à§à¥¤\nà¦à¦° à¦à§à¦¨ বà§à¦¯à¦¾à¦à§à¦¯à¦¾ নাà¦à¥¤",
@@ -1330,6 +1331,7 @@
"rcfilters-savedqueries-new-name-label": "নাম",
"rcfilters-savedqueries-new-name-placeholder": "à¦à¦¾à¦à¦à¦¨à¦¿à¦° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯ বরà§à¦£à¦¨à¦¾ à¦à¦°à§à¦¨",
"rcfilters-savedqueries-apply-label": "à¦à¦¾à¦à¦à¦¨à¦¿ তà§à¦°à¦¿ à¦à¦°à§à¦¨",
+ "rcfilters-savedqueries-apply-and-setdefault-label": "পà§à¦°à§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ à¦à¦¾à¦à¦à¦¨à¦¿ তà§à¦°à¦¿ à¦à¦°à§à¦¨",
"rcfilters-savedqueries-cancel-label": "বাতিল",
"rcfilters-savedqueries-add-new-title": "বরà§à¦¤à¦®à¦¾à¦¨ à¦à¦¾à¦à¦à¦¨à¦¿à¦° সà§à¦à¦¿à¦ সà¦à¦°à¦à§à¦·à¦£ à¦à¦°à§à¦¨",
"rcfilters-restore-default-filters": "পà§à¦°à§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ à¦à¦¾à¦à¦à¦¨à¦¿ পà§à¦¨à¦°à§à¦¦à§à¦§à¦¾à¦° à¦à¦°à§à¦¨",
@@ -1347,7 +1349,7 @@
"rcfilters-filterlist-noresults": "à¦à§à¦¨à¦ à¦à¦¾à¦à¦à¦¨à¦¿ পাà¦à¦¯à¦¼à¦¾ যায়নি",
"rcfilters-noresults-conflict": "à¦à§à¦¨à¦ ফলাফল পাà¦à¦¯à¦¼à¦¾ যায়নি à¦à¦¾à¦°à¦£ à¦
নà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§à¦° মাপà¦à¦¾à¦ িà¦à§à¦²à¦¿à¦° মধà§à¦¯à§ সà¦à¦à¦°à§à¦· à¦à¦à§",
"rcfilters-state-message-subset": "à¦à¦ à¦à¦¾à¦à¦à¦¨à¦¿à¦à¦¿à¦° à¦à§à¦¨ পà§à¦°à¦à¦¾à¦¬ নà§à¦ à¦à¦¾à¦°à¦£ à¦à¦° ফলাফলà¦à§à¦²à¦¿ নিমà§à¦¨à§à¦à§à¦¤ বà§à¦¹à¦¤à§à¦¤à¦° পরিধির {{PLURAL:$2|à¦à¦¾à¦à¦à¦¨à¦¿à¦à¦¿à¦°|à¦à¦¾à¦à¦à¦¨à¦¿à¦à§à¦²à¦¿à¦°}} মধà§à¦¯à§ à¦
নà§à¦¤à¦°à§à¦à§à¦à§à¦¤ à¦à¦à§ (à¦à¦²à§à¦à¦ªà¦¾à¦¤ à¦à¦°à§ à¦à¦à¦¿à¦à§ à¦à¦²à¦¾à¦¦à¦¾ à¦à¦°à§ দà§à¦à¦¾à¦° à¦à§à¦·à§à¦à¦¾ à¦à¦°à§à¦¨): $1",
- "rcfilters-state-message-fullcoverage": "à¦à§à¦¨ দলà§à¦° সমসà§à¦¤ à¦à¦¾à¦à¦à¦¨à¦¿ নিরà§à¦¬à¦¾à¦à¦¨ à¦à¦°à¦¾ à¦à¦¬à¦ à¦à§à¦¨ à¦à¦¾à¦à¦à¦¨à¦¿à¦ নিরà§à¦¬à¦¾à¦à¦¨ না à¦à¦°à¦¾ à¦à¦à¦ à¦à¦¥à¦¾, তাঠà¦à¦ à¦à¦¾à¦à¦à¦¨à¦¿à¦à¦¿à¦° à¦à§à¦¨ পà§à¦°à¦à¦¾à¦¬ নà§à¦à¥¤ à¦à¦ দলৠà¦
নà§à¦¤à¦°à§à¦à§à¦à§à¦¤ à¦à¦¾à¦à¦à¦¨à¦¿à¦à§à¦²à¦¿ হল: $1",
+ "rcfilters-state-message-fullcoverage": "à¦à¦ দলà§à¦° সমসà§à¦¤ à¦à¦¾à¦à¦à¦¨à¦¿ নিরà§à¦¬à¦¾à¦à¦¨ à¦à¦°à¦¾, না à¦à¦°à¦¾ à¦à¦à¦ à¦à¦¥à¦¾, তাঠà¦à¦ à¦à¦¾à¦à¦à¦¨à¦¿à¦à¦¿à¦° à¦à§à¦¨ পà§à¦°à¦à¦¾à¦¬ নà§à¦à¥¤ à¦à¦ দলৠà¦
নà§à¦¤à¦°à§à¦à§à¦à§à¦¤ à¦à¦¾à¦à¦à¦¨à¦¿à¦à§à¦²à¦¿ হল: $1",
"rcfilters-filtergroup-authorship": "à¦à¦¾à¦° দà§à¦¬à¦¾à¦°à¦¾ পরিবরà§à¦¤à¦¿à¦¤",
"rcfilters-filter-editsbyself-label": "à¦à¦ªà¦¨à¦¾à¦° দà§à¦¬à¦¾à¦°à¦¾ পরিবরà§à¦¤à¦¿à¦¤",
"rcfilters-filter-editsbyself-description": "à¦à¦ªà¦¨à¦¾à¦° নিà¦à¦¸à§à¦¬ à¦
বদান।",
@@ -1387,6 +1389,8 @@
"rcfilters-filter-watchlist-notwatched-label": "নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦à§à¦à§à¦¤ নয়",
"rcfilters-filter-watchlist-notwatched-description": "à¦à¦ªà¦¨à¦¾à¦° নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦¯à¦¼ থাà¦à¦¾ পাতাà¦à§à¦²à¦¿ বà§à¦¯à¦¤à§à¦¯à¦¼ সবà¦à¦¿à¦à§à¥¤",
"rcfilters-filtergroup-watchlistactivity": "নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦° à¦à¦¾à¦°à§à¦¯à¦à§à¦°à¦®",
+ "rcfilters-filter-watchlistactivity-unseen-label": "à¦
দà§à¦à¦¾ পরিবরà§à¦¤à¦¨",
+ "rcfilters-filter-watchlistactivity-seen-label": "দà§à¦à¦¾ পরিবরà§à¦¤à¦¨",
"rcfilters-filtergroup-changetype": "পরিবরà§à¦¤à¦¨à§à¦° ধরন",
"rcfilters-filter-pageedits-label": "পাতার সমà§à¦ªà¦¾à¦¦à¦¨à¦¾",
"rcfilters-filter-pageedits-description": "à¦à¦à¦à¦¿ বিষয়বসà§à¦¤à§, à¦à¦²à§à¦à¦¨à¦¾, বিষয়শà§à¦°à§à¦£à§à¦° বিবরণ... à¦à¦¤à§à¦¯à¦¾à¦¦à¦¿à¦¤à§ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾",
@@ -1408,10 +1412,12 @@
"rcfilters-tag-prefix-namespace-inverted": "$1 :নয় ",
"rcfilters-view-advanced-filters-label": "à¦à¦¨à§à¦¨à¦¤ à¦à¦¾à¦à¦à¦¨à¦¿",
"rcfilters-view-tags": "à¦à§à¦¯à¦¾à¦à¦à§à¦¤ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾",
+ "rcfilters-view-namespaces-tooltip": "নামসà§à¦¥à¦¾à¦¨ à¦
নà§à¦¯à¦¾à¦¯à¦¼à§ ফলাফল à¦à¦¾à¦à¦à§à¦¨",
"rcfilters-view-tags-tooltip": "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à§à¦¯à¦¾à¦ বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§ ফলাফল à¦à¦¾à¦à¦à§à¦¨",
"rcfilters-view-return-to-default-tooltip": "মà§à¦² à¦à¦¾à¦à¦à¦¨à¦¿à¦° মà§à¦¨à§à¦¤à§ ফিরà§à¦¨",
"rcfilters-liveupdates-button": "সরাসরি হালনাà¦à¦¾à¦¦",
"rcfilters-liveupdates-button-title-on": "সরাসরি হালনাà¦à¦¾à¦¦ বনà§à¦§ à¦à¦°à§à¦¨",
+ "rcfilters-watchlist-markseen-button": "দà§à¦à¦¾ হিসাবৠসব পরিবরà§à¦¤à¦¨ à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ à¦à¦°à§à¦¨",
"rcnotefrom": "$2 à¦à¦¾ থà§à¦à§ সà¦à¦à¦à¦¿à¦¤ পরিবরà§à¦¤à¦¨à¦à§à¦²à¦¿ (সরà§à¦¬à§à¦à§à¦ $1à¦à¦¿ দà§à¦à¦¾à¦¨à§ হয়à§à¦à§)।",
"rclistfromreset": "তারিঠনিরà§à¦¬à¦¾à¦à¦¨ পà§à¦¨à¦à¦¸à§à¦¥à¦¾à¦ªà¦¨ à¦à¦°à§à¦¨",
"rclistfrom": "$2, $3 তারিà¦à§à¦° পর সà¦à¦à¦à¦¿à¦¤ নতà§à¦¨ পরিবরà§à¦¤à¦¨à¦à§à¦²à§ দà§à¦à¦¾à¦",
@@ -2094,7 +2100,7 @@
"unwatchthispage": "নà¦à¦° সরিয়ৠনিন",
"notanarticle": "বিষয়বসà§à¦¤à§ পাতা নয়",
"notvisiblerev": "à¦
পর à¦à¦à¦à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ à¦à¦°à§à¦¤à§à¦ পà§à¦°à¦£à§à¦¤ সরà§à¦¬à¦¶à§à¦· সà¦à¦¸à§à¦à¦°à¦£à¦à¦¿ à¦
পসারিত হয়à§à¦à§",
- "watchlist-details": "à¦à¦ªà¦¨à¦¾à¦° নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦¤à§ {{PLURAL:$1|$1à¦à¦¿ পাতা}} à¦à¦à§ (à¦à¦²à¦¾à¦ª পাতাà¦à§à¦²à¦¿ à¦à¦£à¦¨à¦¾à¦¯à¦¼ না ধরà§)।",
+ "watchlist-details": "à¦à¦ªà¦¨à¦¾à¦° নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾à¦¯à¦¼ {{PLURAL:$1|$1à¦à¦¿ পাতা}} à¦à¦à§ (à¦à¦²à¦¾à¦ª পাতাসহ)।",
"wlheader-enotif": "à¦à¦®à§à¦² বিà¦à§à¦à¦ªà§à¦¤à¦¿ সà¦à§à¦°à¦¿à¦¯à¦¼ à¦à¦°à¦¾ à¦à¦à§à¥¤",
"wlheader-showupdated": "à¦à¦ªà¦¨à¦¾à¦° শà§à¦· à¦à¦à¦®à¦¨à§à¦° পর থà§à¦à§ যà§à¦¸à¦¬ পাতায় পরিবরà§à¦¤à¦¨ হয়à§à¦à§ সà§à¦à§à¦²à¦¿ '''à¦à¦¾à¦¢à¦¼''' à¦à¦°à§ দà§à¦à¦¾à¦¨à§ হয়à§à¦à§à¥¤",
"wlnote": "নিà¦à§ $3, $4 তারিঠথà§à¦à§ বিà¦à¦¤ {{PLURAL:$2|১ à¦à¦¨à§à¦à¦¾à¦¯à¦¼|$2 à¦à¦¨à§à¦à¦¾à¦¯à¦¼}} সà¦à¦à¦à¦¿à¦¤ {{PLURAL:$1|শà§à¦· ১à¦à¦¿ পরিবরà§à¦¤à¦¨|শà§à¦· $1à¦à¦¿ পরিবরà§à¦¤à¦¨}} দà§à¦à¦¾à¦¨à§ হল।",
@@ -3575,6 +3581,9 @@
"compare-title-not-exists": "à¦à¦ªà¦¨à¦¾à¦° à¦à¦¾à¦à§à¦à§à¦·à¦¿à¦¤ শিরà§à¦¨à¦¾à¦®à¦à¦¿ নà§à¦à¥¤",
"compare-revision-not-exists": "à¦à¦ªà¦¨à¦¾à¦° à¦à¦¾à¦à§à¦à§à¦·à¦¿à¦¤ সà¦à¦¸à§à¦à¦°à¦£à¦à¦¿ নà§à¦à¥¤",
"diff-form": "পারà§à¦¥à¦à§à¦¯",
+ "diff-form-submit": "পারà§à¦¥à¦à§à¦¯ দà§à¦à¦¾à¦¨",
+ "permanentlink": "সà§à¦¥à¦¾à¦¯à¦¼à§ সà¦à¦¯à§à¦",
+ "permanentlink-revid": "সà¦à¦¶à§à¦§à¦¨ à¦à¦à¦¡à¦¿",
"permanentlink-submit": "à¦à¦ সà¦à¦¶à§à¦§à¦¨à§ যান",
"dberr-problems": " দà§à¦à¦à¦¿à¦¤! à¦à¦ সাà¦à¦à¦à¦¿ বরà§à¦¤à¦®à¦¾à¦¨à§ à¦à¦¾à¦°à§à¦à¦°à§ à¦
সà§à¦¬à¦¿à¦§à¦¾à¦° মà§à¦à§à¦®à§à¦à¦¿ হয়à§à¦à§à¥¤",
"dberr-again": "à¦à¦¯à¦¼à§à¦ মিনিঠপর পà§à¦¨à¦°à¦¾à¦¯à¦¼ পরিদরà§à¦¶à¦¨à§à¦° à¦à§à¦·à§à¦à¦¾ à¦à¦°à§à¦¨à¥¤",
@@ -3984,5 +3993,6 @@
"undelete-cantedit": "à¦à¦ªà¦¨à¦¿ à¦à¦ পাতাà¦à¦¿ ফিরিয়ৠà¦à¦¨à¦¤à§ পারবà§à¦¨ না à¦à¦¾à¦°à¦£ à¦à¦ªà¦¨à¦¾à¦° à¦à¦ পাতাà¦à¦¿ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à¦°à¦¾à¦° à¦
নà§à¦®à¦¤à¦¿ নà§à¦à¥¤",
"undelete-cantcreate": "à¦à¦ªà¦¨à¦¿ à¦à¦ পাতাà¦à¦¿ ফিরিয়ৠà¦à¦¨à¦¤à§ পারবà§à¦¨ না à¦à¦¾à¦°à¦£ à¦à¦ নামৠà¦à§à¦¨ পাতা বিদà§à¦¯à¦®à¦¾à¦¨ নà§à¦ ঠà¦à¦ªà¦¨à¦¾à¦° à¦à¦ পাতাà¦à¦¿ তà§à¦°à¦¿ à¦à¦°à¦¾à¦° à¦
নà§à¦®à¦¤à¦¿ নà§à¦à¥¤",
"pagedata-title": "পাতার à¦à¦ªà¦¾à¦¤à§à¦¤",
+ "pagedata-not-acceptable": "à¦à§à¦¨ মিলৠযাà¦à¦¯à¦¼à¦¾ বিনà§à¦¯à¦¾à¦¸ পাà¦à¦¯à¦¼à¦¾ যায় নি। সমরà§à¦¥à¦¿à¦¤ MIME ধরনà¦à§à¦²à¦¿ হল: $1",
"pagedata-bad-title": "à¦
পà§à¦°à¦¯à§à¦à§à¦¯ শিরà§à¦¨à¦¾à¦®: \"$1\""
}
diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json
index d99bf55b7d..b53395e50b 100644
--- a/languages/i18n/ca.json
+++ b/languages/i18n/ca.json
@@ -56,7 +56,8 @@
"Jaumeortola",
"Kippelboy",
"Syum90",
- "Xð"
+ "Xð",
+ "Abella"
]
},
"tog-underline": "Subratlla els enllaços:",
@@ -183,9 +184,9 @@
"hidden-category-category": "Categories ocultes",
"category-subcat-count": "{{PLURAL:$2|Aquesta categoria només té la següent subcategoria.|Aquesta categoria conté {{PLURAL:$1|la següent subcategoria|les següents $1 subcategories}}, d'un total de $2.}}",
"category-subcat-count-limited": "Aquesta categoria conté {{PLURAL:$1|la següent subcategoria|les següents $1 subcategories}}.",
- "category-article-count": "{{PLURAL:$2|Aquesta categoria només té la pà gina següent.|{{PLURAL:$1|La pà gina següent és|Les $1 pà gines següents són}} dins dâaquesta categoria, dâun total de $2.}}",
+ "category-article-count": "{{PLURAL:$2|Aquesta categoria només conté la pà gina següent.|{{PLURAL:$1|La pà gina és|Les $1 pà gines són}} dins d'aquesta categoria, d'un total de $2.}}",
"category-article-count-limited": "{{PLURAL:$1|La següent pà gina és|Les següents $1 pà gines són}} dins la categoria actual.",
- "category-file-count": "{{PLURAL:$2|Aquesta categoria només té el fitxer següent.|{{PLURAL:$1|El fitxer següent és|Els $1 fitxers següents són}} dins dâaquesta categoria, dâun total de $2.}}",
+ "category-file-count": "{{PLURAL:$2|Aquesta categoria només conté el fitxer següent.|{{PLURAL:$1|El fitxer és|Els $1 fitxers són}} dins d'aquesta categoria, d'un total de $2.}}",
"category-file-count-limited": "{{PLURAL:$1|El següent fitxer és|Els següents $1 fitxers són}} dins la categoria actual.",
"listingcontinuesabbrev": " cont.",
"index-category": "PÃ gines indexades",
@@ -252,14 +253,14 @@
"viewhelppage": "Visualitza la pà gina d'ajuda",
"categorypage": "Visualitza la pà gina de la categoria",
"viewtalkpage": "Visualitza la pà gina de discussió",
- "otherlanguages": "En altres llengües",
+ "otherlanguages": "En altres idiomes",
"redirectedfrom": "(S'ha redirigit des de: $1)",
"redirectpagesub": "Pà gina de redirecció",
"redirectto": "Redirigeix a:",
"lastmodifiedat": "La pà gina va ser modificada per darrera vegada el $1 a les $2.",
"viewcount": "S'ha visitat aquesta pà gina {{PLURAL:$1|una vegada|$1 vegades}}.",
"protectedpage": "PÃ gina protegida",
- "jumpto": "Dreceres rà pides:",
+ "jumpto": "Salta a:",
"jumptonavigation": "navegació",
"jumptosearch": "cerca",
"view-pool-error": "Disculpeu, els servidors es troben sobrecarregats.\nMassa usuaris estan tractant d'accedir a aquesta pà gina.\nPer favor, esperau una mica abans de tornar a accedir a aquesta pà gina.\n\n$1",
@@ -270,13 +271,13 @@
"pool-servererror": "El servei de recompte de la reserva no és disponible ($1).",
"poolcounter-usage-error": "Error d'ús: $1",
"aboutsite": "Quant al projecte {{SITENAME}}",
- "aboutpage": "Project:Quant a",
+ "aboutpage": "Project:Quant al",
"copyright": "El contingut està disponible sota la llicència $1 si no s'indica el contrari.",
"copyrightpage": "{{ns:project}}:Drets d'autor",
"currentevents": "Actualitat",
"currentevents-url": "Project:Actualitat",
- "disclaimers": "AvÃs general",
- "disclaimerpage": "Project:AvÃs general",
+ "disclaimers": "Renúncies",
+ "disclaimerpage": "Project:Descà rrec general",
"edithelp": "Ajuda per a l'edició",
"helppage-top-gethelp": "Ajuda",
"mainpage": "PÃ gina principal",
@@ -323,7 +324,7 @@
"feed-invalid": "La subscripció no és và lida pel tipus de sindicament.",
"feed-unavailable": "Els canals de sindicació no estan disponibles",
"site-rss-feed": "Canal RSS $1",
- "site-atom-feed": "Canal Atom $1",
+ "site-atom-feed": "Font Atom $1",
"page-rss-feed": "«$1» RSS Feed",
"page-atom-feed": "Canal Atom «$1»",
"feed-atom": "Atom",
@@ -1475,7 +1476,7 @@
"recentchanges-page-removed-from-category": "[[:$1]] treta de la categoria",
"recentchanges-page-removed-from-category-bundled": "[[:$1]] treta de la categoria, [[Special:WhatLinksHere/$1|aquesta pà gina està inclosa en d'altres]]",
"autochange-username": "Canvi automà tic del MediaWiki",
- "upload": "Carregueu un fitxer",
+ "upload": "Pujar un fitxer",
"uploadbtn": "Carrega un fitxer",
"reuploaddesc": "Torna al formulari per apujar.",
"upload-tryagain": "Envia la descripció del fitxer modificat",
@@ -2633,7 +2634,7 @@
"tooltip-pt-login": "Us animem a registrar-vos, però no és obligatori",
"tooltip-pt-login-private": "Cal que inicieu una sessió per a utilitzar aquest wiki",
"tooltip-pt-logout": "Finalitza la sessió d'usuari",
- "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
+ "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu una sessió, encara que no és obligatori",
"tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pà gina",
"tooltip-ca-edit": "Modifica aquesta pà gina",
"tooltip-ca-addsection": "Comença una secció nova",
@@ -2651,21 +2652,21 @@
"tooltip-search-fulltext": "Cerca aquest text a les pà gines",
"tooltip-p-logo": "Visiteu la pà gina principal",
"tooltip-n-mainpage": "Visiteu la pà gina principal",
- "tooltip-n-mainpage-description": "Vegeu la pà gina principal",
- "tooltip-n-portal": "Sobre el projecte, què podeu fer, on podeu trobar coses",
+ "tooltip-n-mainpage-description": "Visiteu la pà gina principal",
+ "tooltip-n-portal": "Sobre el projecte, què podeu fer, on trobareu les coses",
"tooltip-n-currentevents": "Per trobar informació general sobre l'actualitat",
- "tooltip-n-recentchanges": "Llista de canvis recents al wiki",
+ "tooltip-n-recentchanges": "Una llista dels canvis recents al wiki",
"tooltip-n-randompage": "Carrega una pà gina a lâatzar",
- "tooltip-n-help": "El lloc per saber més coses",
- "tooltip-t-whatlinkshere": "Llista de totes les pà gines wiki que enllacen aquÃ",
+ "tooltip-n-help": "El lloc per a saber més coses",
+ "tooltip-t-whatlinkshere": "Una llista de totes les pà gines wiki que enllacen amb aquesta",
"tooltip-t-recentchangeslinked": "Canvis recents a pà gines enllaçades des d'aquesta pà gina",
"tooltip-feed-rss": "Canal RSS d'aquesta pà gina",
"tooltip-feed-atom": "Canal Atom d'aquesta pà gina",
"tooltip-t-contributions": "Llista de les contribucions d'{{GENDER:$1|aquest usuari|aquesta usuà ria}}",
"tooltip-t-emailuser": "Envia un correu a {{GENDER:$1|aquest usuari|aquesta usuà ria}}",
"tooltip-t-info": "Més informació sobre aquesta pà gina",
- "tooltip-t-upload": "Carregueu fitxers",
- "tooltip-t-specialpages": "Llista de totes les pà gines especials",
+ "tooltip-t-upload": "Pujar alguns fitxers",
+ "tooltip-t-specialpages": "Llista totes les pà gines especials",
"tooltip-t-print": "Versió per a impressió d'aquesta pà gina",
"tooltip-t-permalink": "Enllaç permanent a aquesta versió de la pà gina",
"tooltip-ca-nstab-main": "Vegeu el contingut de la pà gina",
diff --git a/languages/i18n/csb.json b/languages/i18n/csb.json
index c66fdf9f56..405e14fb2b 100644
--- a/languages/i18n/csb.json
+++ b/languages/i18n/csb.json
@@ -844,7 +844,7 @@
"unwatch": "Ãprzestôj ùzerac",
"unwatchthispage": "Ãprzestôj ùzerac nÄ
starnã",
"notanarticle": "To nie je artikel",
- "watchlist-details": "Twòjô lësta ùzérónych starnów zamëkô w se {{PLURAL:$1|$1 pozycjã|$1 pozycje|$1 pozycjów}}, nie rechùjÄ
c diskùsëjów.",
+ "watchlist-details": "{{PLURAL:$1|Starna je |$1 Starnë sÄ
}} na twòji lësce ùzérónych starnów (diskùsëji téż)",
"wlheader-showupdated": "Artiklë jakczé òstaÅë zmienioné òd Twòji slédny wizytë sÄ
wëapratnioné pògrëbieniém ",
"wlnote": "Niżi môsz wëskrzënioné {{PLURAL:$1|slédnÄ
zmianã|$1 slédnëch zmianów}} zrobioné òb {{PLURAL:$2|gòdzënã|$2 gòdzënë/gòdzënów}}, rëchùjÄ
c òd $3 dnia $4.",
"wlshowlast": "Wëskrzëni zjinaczi z $1 gòdzënów $2 dni",
diff --git a/languages/i18n/de.json b/languages/i18n/de.json
index e0a83eb176..162c4c2a0b 100644
--- a/languages/i18n/de.json
+++ b/languages/i18n/de.json
@@ -818,6 +818,7 @@
"parser-template-loop-warning": "Vorlagenschleife entdeckt: [[$1]]",
"template-loop-category": "Seiten mit Vorlagenschleifen",
"template-loop-category-desc": "Die Seite enthält eine Vorlagenschleife, z. B. eine Vorlage, die sich selbst rekursiv aufruft.",
+ "template-loop-warning": "Warnung: Diese Seite ruft [[:$1]] auf, die eine Vorlagenschleife verursacht (ein unendlicher rekursiver Aufruf).",
"parser-template-recursion-depth-warning": "Vorlagenrekursionstiefengrenze überschritten ($1)",
"language-converter-depth-warning": "Sprachkonvertertiefenlimit überschritten ($1)",
"node-count-exceeded-category": "Seiten, die die Knotenanzahl überschritten haben",
@@ -1485,6 +1486,8 @@
"rcfilters-watchlist-markseen-button": "Alle Ãnderungen als gesehen markieren",
"rcfilters-watchlist-edit-watchlist-button": "Deine Liste der beobachteten Seiten bearbeiten",
"rcfilters-watchlist-showupdated": "Ãnderungen an Seiten, die du seit ihrem Auftreten nicht besucht hast, sind fett markiert.",
+ "rcfilters-preference-label": "Die verbesserte Version der Letzten Ãnderungen ausblenden",
+ "rcfilters-preference-help": "Macht die Neugestaltung der Oberfläche aus dem Jahr 2017 und alle seitdem hinzugefügten Werkzeuge wieder rückgängig.",
"rcnotefrom": "Angezeigt {{PLURAL:$5|wird die Ãnderung|werden die Ãnderungen}} seit $3, $4 (max. $1 Einträge).",
"rclistfromreset": "Datumsauswahl zurücksetzen",
"rclistfrom": "Nur Ãnderungen seit $3, $2 Uhr zeigen.",
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 5dd83453af..24e1818e89 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -1063,6 +1063,7 @@
"timezoneregion-indian": "Indian Ocean",
"timezoneregion-pacific": "Pacific Ocean",
"allowemail": "Enable email from other users",
+ "email-blacklist-label": "Prohibit these users from sending emails to me:",
"prefs-searchoptions": "Search",
"prefs-namespaces": "Namespaces",
"default": "default",
diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json
index f6242e3832..9493dd490d 100644
--- a/languages/i18n/fr.json
+++ b/languages/i18n/fr.json
@@ -894,6 +894,7 @@
"parser-template-loop-warning": "Modèle en boucle détecté : [[$1]]",
"template-loop-category": "Pages avec des boucles de modèle",
"template-loop-category-desc": "La page contient une boucle dans le modèle, c.à .d. un modèle qui sâappelle lui-même récursivement.",
+ "template-loop-warning": "Avertissement : Cette page appelle [[:$1]] ce qui provoque une boucle de modèles (un appel récursif infini).",
"parser-template-recursion-depth-warning": "Limite de profondeur des appels récursifs de modèles dépassée ($1)",
"language-converter-depth-warning": "Limite de profondeur du convertisseur de langue dépassée ($1)",
"node-count-exceeded-category": "Pages dépassant le nombre de nÅuds maximal",
@@ -1561,6 +1562,8 @@
"rcfilters-watchlist-markseen-button": "Marquer toutes les modifications comme vues",
"rcfilters-watchlist-edit-watchlist-button": "Modifier votre liste de pages suivies",
"rcfilters-watchlist-showupdated": "Les modifications faites aux pages que vous nâavez pas visitées depuis quâelles ont été modifiées sont en gras , avec des balises unies.",
+ "rcfilters-preference-label": "Masquer la version améliorée des modifications récentes",
+ "rcfilters-preference-help": "Restitue la version 2017 de l'interface ainsi que de tous les outils ajoutés alors et depuis.",
"rcnotefrom": "Ci-dessous {{PLURAL:$5|la modification effectuée|les modifications effectuées}} depuis le $3, $4 (affichées jusquâà $1 ).",
"rclistfromreset": "Réinitialiser la sélection de la date",
"rclistfrom": "Afficher les nouvelles modifications depuis le $3 Ã $2",
@@ -2828,7 +2831,7 @@
"tooltip-t-contributions": "Voir la liste des contributions de {{GENDER:$1|cet utilisateur|cette utilisatrice}}",
"tooltip-t-emailuser": "Envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}",
"tooltip-t-info": "Plus dâinformation sur cette page",
- "tooltip-t-upload": "Importer des fichiers",
+ "tooltip-t-upload": "Téléverser des fichiers",
"tooltip-t-specialpages": "Liste de toutes les pages spéciales",
"tooltip-t-print": "Version imprimable de cette page",
"tooltip-t-permalink": "Adresse permanente de cette version de la page",
@@ -3086,7 +3089,7 @@
"exif-relatedsoundfile": "Fichier audio associé",
"exif-datetimeoriginal": "Date de la prise originelle",
"exif-datetimedigitized": "Date de la numérisation",
- "exif-subsectime": "Date de modification",
+ "exif-subsectime": "Date en fraction de seconde",
"exif-subsectimeoriginal": "Date de la prise originelle",
"exif-subsectimedigitized": "Date de la numérisation",
"exif-exposuretime": "Temps d'exposition",
diff --git a/languages/i18n/glk.json b/languages/i18n/glk.json
index d521606cf6..0cbdff40b8 100644
--- a/languages/i18n/glk.json
+++ b/languages/i18n/glk.json
@@ -348,6 +348,7 @@
"template-semiprotected": "(ÙÙÙ
٠بپأسÙ)",
"hiddencategories": "ا٠ÙÙÚ¯ {{PLURAL:$1|Ùکت٠جخÛت٠جرگÙ|$1 جخÛت٠جرگÙ}} Ù
ئ٠درÙ:",
"moveddeleted-notice": "ا٠ÙÙÚ¯ ØØ°ÙأبؤکÙ.\nØذ٠ؤ اÙÙتÙاÙË Ø³ÙاÙ٠ا٠ÙÙÚ¯Ë ÙÙسÙ٠ا٠بÛÙ ÙÛشؤ٠بدأکÙ.",
+ "content-model-wikitext": "ÙÙÚ©Ù-Ùؤت",
"viewpagelogs": "ا٠ÙÙÚ¯Ë Ø³ÙاÙÙ'Ù٠دئÙ",
"currentrev-asof": "ÙسأÙÙ ÙÛسخ٠تا $1",
"revisionasof": "ÙÛسخ٠$1",
@@ -356,10 +357,12 @@
"currentrevisionlink": "ÙسأÙÙ ÙÛسخÙÙ° ÙÛشؤ٠دأÙ",
"cur": "Ø£ÙؤÙ",
"last": "دأÙ
ÙØ´Ú©Ù",
+ "history-feed-title": "دÚÙÙÙاÚÙÙؤÙË ØªØ§Ø±ÙØ®ÚÙ",
"rev-deleted-user": "(کارگÙر٠ÙؤÙ
ØØ°Ùأبؤ)",
"rev-delundel": "ÙÛشؤ٠دأÙ/جÛØ®ÛساÙئÙ",
"revdelete-hide-user": "کارگÙر٠ÙؤÙ
/Ø¢Ù.Ù¾Ù",
"revdelete-reason-dropdown": "*ØØ°ÙË ÙرÙ
اÙ٠دÙÙÙؤÙ\n** ÚاکÛدÙØÙÙ ÙÙض Ú¯ÛدÙ\n** Ùظر Ùا اطÙاعات٠ک٠Ù
ؤÙاسب ÙÙÙ\n** کارگÙر٠ÙؤÙ
Ù Ú©Ù Ù
ؤÙاسب ÙÙÙ\n** اطÙاعات٠ک٠اÛÙË Ù
ئ٠تؤÙÙ
ت درÙ",
+ "mergelog": "ادغاÙ
Ë Ø³ÙاÙÙ",
"history-title": "\"$1\"Ë ÙاگرداÙ٠تارئخ",
"difference-title": "$1: ÙÛسخÙ'ÙË ØªØ¤ÙÙر",
"lineno": "Ø±Ú $1:",
@@ -426,6 +429,7 @@
"right-sendemail": "باخ٠کارگÙرؤÙ٠اÙÙ
Ù٠بخسأÙ",
"newuserlogpage": "کارگÙر ÚاگÛدÙË Ø³ÙاÙÙ",
"newuserlogpagetext": "ا٠Ùکت٠سÙاÙÙ' کارگÙر ÚاگÛدÙؤÙË Ø¬Ù",
+ "rightslog": "کارگÙØ±Ë Ø§Ø®ØªÙØ§Ø±Ø§ØªË Ø³ÙاÙÙ",
"action-edit": "ا٠ÙÙگ٠دÚÙÙÙاÚÙ٠بکÛÙ",
"action-createaccount": "ا٠کارگÙر٠ØÙساب٠ÚاکÛÙ",
"action-move-categorypages": "جرگ٠ÙÙگؤÙ٠جابجا Ú¯ÛدÙ",
@@ -469,6 +473,7 @@
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کارگÙر}} Ù¾ÙÚ¯Ùر]",
"rc-change-size-new": "$1 {{PLURAL:$1|باÙت}} تغÙÙØ±Ë Ù¾Ø³Ù",
"recentchangeslinked": "Ù
ÛØ±ØªØ¨Ø·Ë ØªØºÙÙرؤÙ",
+ "recentchangeslinked-feed": "Ù
ÛØ±ØªØ¨Ø·Ë ØªØºÙÙرؤÙ",
"recentchangeslinked-toolbox": "Ù
ÛØ±ØªØ¨Ø·Ë ØªØºÙÙرؤÙ",
"recentchangeslinked-title": "\"$1\"Ë Ù
Ûرتبط تغÙÙرؤÙ",
"recentchangeslinked-summary": "ا٠جÙØ±Ø Ùکت٠ÙÙست٠تÙÙÙ٠بÙÙÙ٠آخر٠تغÙÙØ±Ø¤Ù Ø£Ø¬Ù Ø§Û ÙÙگؤÙË Ù
ئ٠ک٠ا٠ÙÙÚ¯Ë Ø¬Ù Ø®Ø§Ù Ø¨Ø¨Ø¤Ù (Ùا جرگÙÙ Ù
Ø¤Ø±Ø¯Ë ÙØ¸Ø±Ë Ø¬Ù). Ø§Û ÙÙگؤÙÙ Ú©Ù [[Special:Watchlist|Ø´ÙÙ
ئ٠پÙÚ¯Ùر٠ÙÙست]]Û±Ù
Ùئ٠دبÛÙ Ù¾ÛررÙÚ¯ ÙÛشؤ٠بدأبÛÙÙ.",
@@ -478,6 +483,7 @@
"upload-file-error-text": "Ùخت٠ØÙØ³Ø£Ù Ø¨Ø¤Ø¯Ø¨Û Ú©Ù Ø³Ø±ÙØ±Ë Ù
ئ٠Ùکت٠Ù
ؤÙÙت٠ÙاÙÙ ÚاگÛد٠بÛبÛÙØ Ø³Ø£Ø¨ بÛبؤ.\n\nÙکت٠[[Special:ListUsers/sysop|Ú©Ùا]] Ø£Ù
رأ تÙ
اس بگÙرÙÙ.",
"upload-misc-error-text": "جÙرأکشئÙË Ø²Ù
ØªØ Ùکت٠سأب بÛبؤ Ú©Ù Ù
Ø£ÙÛÙ
ÙÙÙ ÚÙسÙ.\nÙؤط٠بکÛÙÙ٠بÙÙÙ٠اÙÙترÙت٠ÙÛشؤÙÙ Ù
ؤعتبر ؤ دسÙأرس اÙس٠ؤ ÙÙدئ٠ØÙسأ٠بکÛÙÙÙ.\n\nØ£Ú¯Ù ÙÙدئ٠دÛرÛسأÙÛØ¨Ø¤Ø Ùکت٠[[Special:ListUsers/sysop|Ú©Ùا'Ù]] Ø£Ù
رأ تÙ
اس بگÙرÙÙ.",
"img-auth-accessdenied": "Ø´ÙÙ
ئ٠دسÙأرس ÙÙÙ",
+ "license": "جÙاز ÙؤÙ
Ù:",
"license-header": "جÙاز",
"license-nopreview": "(Ù¾Ùشادئ٠ئب٠ÙÙÚÙ ÙÙØ£)",
"listfiles-userdoesnotexist": "\"$1\" کارگÙر٠ØÙساب ثبت ÙÛبؤ.",
@@ -519,7 +525,10 @@
"suppress": "دÛØ®ÛساÙگرÙ",
"booksources": "Ú©ÙØªØ§Ø¨Ë Ø³Ø±Ø¨Ø³Ø¤Ù",
"booksources-search": "ÙاÙ
ج",
+ "specialloguserlabel": "Ù
ÛجرÙ:",
"log": "سÙاÙÙÙ°âÙ",
+ "all-logs-page": "ÙÙ
ت٠عÛÙ
ÛÙ
٠سÙاÙÙ'Ù",
+ "allpages": "ÙÙ
ت٠ÙÙگؤÙ",
"allarticles": "ÙÙ
ت٠ÙÙگؤÙ",
"allpagessubmit": "بÛØ´Û",
"categories": "جرگÙ'Ù",
@@ -538,6 +547,8 @@
"emailuser-title-target": "ا٠{{GENDER:$1|کارگÙرÙ}} اÙÙ
Ù٠بخسأÙ.",
"usermaildisabled": "ÙشأÙ٠کارگÙر ئب٠اÙÙ
Ù٠خسأÙئÙ.",
"usermaildisabledtext": "Ø´Ù
٠ا٠ÙÙÚ©Ù Ù
ئ٠Ù
ÙÙÙ٠باخ٠کارگÙرؤÙ٠اÙÙ
Ù٠بخسأÙÙÙ",
+ "usermessage-editor": "سÙستÙ
Ë Ù¾ÙغؤÙ
-رسؤÙ",
+ "watchlist": "Ù¾ÙÚ¯ÙتÙؤÙË ÙÙست",
"mywatchlist": "Ù¾ÙÚ¯ÙتÙؤÙË ÙÙست",
"watch": "Ù¾ÙÚ¯ÙتÙ",
"wlheader-enotif": "ÙØ£ÙØ¯Ø±Ë Ø§ÙÙ
Ù٠کار کؤÙÙ.",
@@ -547,6 +558,8 @@
"alreadyrolled": "ÙشأÙÙ [[:$1]]Ë Ø¢Ø®Ø±Ù Ø¯ÚÙÙÙاÚÙÙÙ Ú©Ù [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); بؤدÙØ Ù¾Ø³Ø§ÙگرداÙئÙØ Ø§ÙÙË Ù¾ÙØ´ÙØ ÙÚ© ÙÙر ÙاÙÙÙÙس٠دÚÙÙÙاÚÙÙ Ùا پساÙگردا٠بؤدÙ.\n\nÙÙÚ¯Ë Ø¢Ø®Ø±Ù Ø¯ÚÙÙÙاÚÙÙÙ [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) بؤدÙ.",
"protectlogpage": "پأسÙË Ø³ÙاÙÙ",
"protect-level-sysop": "ÙÙØ· Ú©Ùا'Ù",
+ "restriction-edit": "دÚÙÙÙاÚÙÙ",
+ "restriction-move": "جابجا Ú¯ÛدÙ",
"restriction-level-sysop": "ÙاÙÙ
بپأسÙ",
"undeletehistorynoadmin": "ا٠ÙÙÚ¯ ØØ°Ùأبؤ.\nا٠ÙÙÚ¯Ë ØØ°ÙأبؤÙË Ø¯ÙÙ٠باÙÙ Ø§Û Ú©Ø§Ø±Ú¯ÙرؤÙË ÙÛشؤÙÙ Ú©Ù ØØ°ÙË Ù¾Ùش٠ا٠ÙÙگ٠دÚÙÙÙاÚÙ٠بؤد٠بؤÙØ Ø¬Ùر٠ÙÙÚاÙË Ù
ئ٠بÙ
Ø£.\nا٠ØØ°Ùأبؤ دÚÙÙÙاÚÙÙؤÙË Ø£ØµÙË Ùؤت خاÙÙ Ú©Ùا'ÙË Ø¯Ø³ÙأرسÙ.",
"namespace": "ÙؤÙ
Ùضا:",
@@ -558,10 +571,16 @@
"contributions": "{{GENDER:$1|کارگÙر}}Ë Ù
ÛشارکتؤÙ",
"mycontris": "Ù
ÛشارکتؤÙ",
"anoncontribs": "Ù
ÛشارکتؤÙ",
+ "contribsub2": "{{GENDER:$3|$1}} ($2)Ë ÙÙسÙÙ",
+ "uctop": "(Ø£ÙؤÙË ÙÛسخÙ)",
"month": "ا٠Ù
ا٠Ù
ئ٠(ؤ دأÙ
ÙØ´Ú©):",
"year": "ا٠ساÙË Ù
ئ٠(ؤ دأÙ
ÙØ´Ú©):",
+ "sp-contributions-blocklog": "دبÛستÙË Ø³ÙاÙÙ'Ù",
"sp-contributions-uploads": "جؤرأکشئÙؤÙ",
+ "sp-contributions-logs": "سÙاÙÙÙ°âÙ",
"sp-contributions-talk": "گب",
+ "sp-contributions-search": "Ù
ÛشارکتؤÙË ÙاÙ
ج",
+ "sp-contributions-username": "Ø¢Ù-Ù¾ÙË Ø¢Ø¯Ø±Ø³ Ùا کارگÙر٠ÙؤÙ
:",
"sp-contributions-submit": "ÙاÙ
ج",
"whatlinkshere": "ÙرÚ٠خا٠ببؤ ائرÙ",
"whatlinkshere-title": "ÙÙگؤÙ٠گ٠«$1Â»Ë Ø£Ù
رأ خا٠دأÙÙ",
@@ -581,6 +600,7 @@
"contribslink": "ÙاÙرÙâئÙ",
"block-log-flags-nousertalk": "Ù
ÙÙÙ Ø®Û Ú¯Ø¨Ë ÙÙگ٠دÚÙÙÙاÚÙ٠بکÛÙÙ",
"block-log-flags-hiddenname": "دÛØ®ÛساÙئ٠کارگÙر٠ÙؤÙ
",
+ "proxyblocker": "پراکس٠دبÛستÙÚÙ",
"movecategorypage-warning": "اخظار: Ø´Ù
٠جرگ٠ÙÙگ٠جابجا کأدرÙÙ. Ø´ÙÙ
Ù ØÙاس بÙ
ؤÙÙ Ú©Ù ÙÙØ· ÙÙÚ¯ جابجا بÙ٠ؤ ÙÙگؤ٠ÙدÙÙ
٠جرگ٠Ù
ئ٠Ù
ؤÙ٠ؤ تاز٠جرگ٠Ù
ئ٠ÙØ´ÙÙ .",
"cant-move-category-page": "Ø´Ù
٠اجاز٠ÙدأÙÙ٠جرگÙÙ°âÙË ÙÙگ٠جابجا بکÛÙÙÙ.",
"cant-move-to-category-page": "Ø´Ù
٠اÙجاز٠ÙدأÙÙÙ Ùکت٠ÙÙگ٠ببرÙÙ Ùکت٠جرگ٠ÙÙÚ¯Ë Ù
ئÙ.",
@@ -637,11 +657,22 @@
"tooltip-summary": "ÙÙÚاÙس٠Ùارد بکÛÙÙÙ",
"pageinfo-header-edits": "تارÙØ®ÚÙÙ° دÚÙÙÙاÚÙÙ Ú¯ÛدÙ",
"pageinfo-header-restrictions": "ÙÙگ٠پأسÙ",
+ "pageinfo-header-properties": "ÙÙÚ¯Ë ÙÙÚÚ¯ÙئÙ",
+ "pageinfo-display-title": "تÙتر٠ÙÛشؤ٠دأÙ",
+ "pageinfo-article-id": "ÙÙÚ¯Ë Ø´ÙاسÙ",
"pageinfo-robot-index": "Ù
ؤجاز",
"pageinfo-firstuser": "ÙÙÚ¯Ë ÚاکÛÙکس",
+ "pageinfo-firsttime": "ÙÙÚ¯Ë ÚاگÛدÙË Ø²Ù
ت",
+ "pageinfo-lastuser": "آخر٠دÚÙÙÙاÚÙÙ Ú¯ÛدÙکس",
+ "pageinfo-lasttime": "آخر٠دÚÙÙÙاÚÙÙË ØªØ§Ø±ÙØ®",
+ "pageinfo-edits": "ÙÙ
ت٠دÚÙÙÙاÚÙÙؤÙË ØªØ¹Ø¯Ø§Ø¯",
+ "pageinfo-recent-edits": "آخر٠دÚÙÙÙاÚÙÙؤÙË ØªØ¹Ø¯Ø§Ø¯ ($1 Ë Ø£Ø®ÙØ±Ë Ù
ÙئÙ)",
+ "pageinfo-recent-authors": "آخر٠تÙÙا ÙÙÙشتÙکسؤÙË ØªØ¹Ø¯Ø§Ø¯",
"pageinfo-hidden-categories": "جخÛت٠{{PLURAL:$1| جرگÙ|جرگÙ}} ( $1 )",
"pageinfo-toolboxlink": "ÙÙÚ¯Ë Ø§Ø·Ùاعات",
+ "pageinfo-contentpage-yes": "Ø£ÙØ£",
"pageinfo-category-info": "جرگ٠اطÙاعات",
+ "patrol-log-page": "Ú¯Ø´ØªË Ø³ÙاÙÙ",
"previousdiff": "â ÙدÙÙ
ÙâØªØ±Ë Ø¯ÚÙÙÙاÚÙÙ",
"nextdiff": "تازÙâØªØ±Ë Ø¯ÚÙÙÙاÚÙÙ â",
"file-info-size": "$1 à $2 Ù¾ÛکسÙØ ÙاÙÙË ÙاÙÙراز: $3Ø ÙÙع MIME ÙاÙÙ: $4",
@@ -661,6 +692,11 @@
"monthsall": "ÙÙ
Ù",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گب]])",
"redirect-submit": "بÛØ´Û",
+ "redirect-lookup": "ÙاÙ
ج:",
+ "redirect-value": "Ù
Ùدار:",
+ "redirect-user": "کارگÙØ±Ë Ø´ÙاسÙ",
+ "redirect-page": "ÙÙÚ¯Ë Ø´ÙاسÙ",
+ "redirect-revision": "ÙÙÚ¯Ë ÙÛسخÙ",
"redirect-file": "ÙاÙÙË ÙؤÙ
",
"specialpages": "Ø®Ø§ØµË ÙÙگؤÙ",
"specialpages-group-login": "دÙرÙÙ/Ø«Ø¨ØªË ÙؤÙ
",
@@ -669,6 +705,7 @@
"logentry-newusers-create": "کارگÙر٠Øساب $1 {{GENDER:$2|ÚاگÛدÙ-بÛبؤ}}",
"logentry-upload-upload": "$1 $3 {{GENDER:$2|جؤرأکشئÙ}}",
"searchsuggest-search": "{{SITENAME}} Ù
ئ٠ÙاÙ
ج",
+ "duration-days": "$1 رÛز",
"expand_templates_preview": "Ù¾ÙشادئÙ",
"default-skin-not-found": "اؤخ! Ù¾ÙØ´ÙØ±Ø¶Ë ÙاÙب٠ک٠شÙÙ
Ù ÙÙک٠ئب٠Ù
ئ٠تعرÙ٠ببؤ ب٠عÙÙاÙË $1
Ø Ø¯Ø³Ùرس ÙÙÙ.\n\nب٠Ùظر Ù
ÛâØ¢Ûد Ùصب Ø´Ù
ا شاÙ
Ù Ù¾ÙستÙâÙØ§Û Ø²Ûر Ù
ÛâØ´Ùد. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راÙÙÙ
ا: تÙظÛÙ
ات Ù¾ÙستÙ] را Ø¨Ø±Ø§Û Ú©Ø³Ø¨ اطÙاعات در بار٠ÚÚ¯ÙÙÚ¯Û ÙعاÙâساخت٠آÙâÙا ٠اÙتخاب Ù¾ÛØ´âÙرض ببÛÙÛد.\n\n$2\n\n; اگر اخÛرا٠Ù
دÛاÙÛÚ©Û Ø±Ø§ Ùصب کردÙâاÛد:\n: اØتÙ
اÙا٠از Ú¯ÛØªØ Ûا ب٠طÙر Ù
ستÙÛÙ
از کد Ù
بدأ ک٠از ÚÙد Ù
تد دÛگر استÙاد٠Ù
ÛâÚ©Ùد Ùصب کردÛد. اÙتظار Ù
ÛâرÙد. ÚÙد {{PLURAL:$4|Ù¾ÙستÙ|Ù¾ÙستÙ}} از [https://www.mediawiki.org/wiki/Category:All_skins ÙÙرست Ù¾Ùست٠mediawiki.org] Ùصب Ú©ÙÛØ¯Ø Ú©Ù ÙÙ
را٠ÚÙدÛÙ Ù¾Ùست٠٠اÙزÙÙÙ ÙستÙد. Ø´Ù
ا Ù
ÛâتÙاÙÛد شاخ٠skins/
را از Ø¢Ù ÙسخÙâØ¨Ø±Ø¯Ø§Ø±Û Ú©Ø±Ø¯Ù Ù Ø¨ÚسباÙÛد.\n\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins استÙاد٠از Ú¯Ûت Ø¨Ø±Ø§Û Ø¯Ø±ÛاÙت Ù¾ÙستÙâÙا].\n: اÙجاÙ
اÛ٠کار با Ù
خز٠گÛتâتا٠تداخ٠ÙÙ
ÛâÚ©Ùد اگر تÙسعÙâدÙÙد٠Ù
دÛاÙÛÚ©Û ÙستÛد.\n\n; اگر اخÛرا٠Ù
دÛاÙÛÚ©Û Ø±Ø§ ارتÙاء دادÛد:\n: Ù
دÛاÙÛÚ©Û Û±Ù«Û²Û´ ٠تازÙâتر دÛگر ب٠طÙر Ø®Ùدکار Ù¾ÙستÙâÙØ§Û Ùصبâشد٠را Ùعا٠ÙÙ
ÛâÚ©Ùد ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راÙÙÙ
ا: Ú©Ø´Ù Ø®Ùدکار Ù¾ÙستÙ] را ببÛÙÛد). Ø´Ù
ا Ù
ÛâتÙاÙÛد خطÙØ· زÛر را ب٠داخ٠LocalSettings.php
بÚسباÙÛد تا {{PLURAL:$5|ÙÙ
Ù|ÙÙ
Ù}} Ù¾ÙستÙâÙØ§Û Ùصبâشد٠را Ùعا٠کÙÛد:\n\n$3 \n\n; اگر اخÛرا٠LocalSettings.php
را تغÛÛر دادÛد:\n: ÙاÙ
Ù¾ÙستÙâÙا را Ø¨Ø±Ø§Û ØºÙØ· اÙ
ÙاÛÛ Ø¯ÙØ¨Ø§Ø±Ù Ø¨Ø±Ø±Ø³Û Ú©ÙÛد."
}
diff --git a/languages/i18n/gu.json b/languages/i18n/gu.json
index 6a159510e9..a03e55e430 100644
--- a/languages/i18n/gu.json
+++ b/languages/i18n/gu.json
@@ -336,6 +336,8 @@
"filerenameerror": "\"$1\" નà«àª નામ બદલà«àª¨à« \"$2\" àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³.",
"filedeleteerror": "\"$1\" ફાàªàª² હàªàª¾àªµà« ન શàªàª¾àª.",
"directorycreateerror": "ડિરà«àªà«àªàª°à« \"$1\" ન બનાવૠશàªàª¾àª.",
+ "directoryreadonlyerror": "ડિરà«àªà«àªàª°à« \"$1\" ફàªà«àª¤ વાàªàªàªµàª¾ માàªà« àªà«.",
+ "directorynotreadableerror": "ડિરà«àªà«àªàª°à« \"$1\" વાàªàªà« શàªàª¾àª¯ તà«àªµà«àª નથà«.",
"filenotfound": "ફાàªàª² \"$1\" ન મળà«.",
"unexpected": "àª
ણધારૠàªàª¿àªàª®àª¤: \"$1\"=\"$2\".",
"formerror": "તà«àª°à«àªàª¿: પતà«àª°àª રàªà« થયà«àª નહà«àª",
@@ -343,8 +345,14 @@
"cannotdelete": "ફાàªàª² àªà« પાનà«àª \"$1\" હàªàª¾àªµà« શàªàª¾àª¯à«àª નથà«.\nશàªà«àª¯ àªà« àªà« àª
નà«àª¯ àªà«àªàª પહà«àª²à«àª¥à« હàªàª¾àªµà« દà«àª§à«àª હà«àª¯.",
"cannotdelete-title": "\"$1\" પાનà«àª àªàª¾àª¢à« શàªàª¤àª¾ નથà«",
"delete-hook-aborted": "દà«àª° àªàª°àªµàª¾àª¨à«àª હà«àª વડૠરà«àªà« રાàªàªµàª¾àª®àª¾àª àªàªµà«àª¯à«àª.\nતૠàªà«àª àªàª¾àª°àª£ àªàªªàª¤à«àª નથà«.",
+ "no-null-revision": "પà«àª·à«àª \"$1\" માàªà« નવૠનલ પà«àª¨àª°àª¾àªµàª°à«àª¤àª¨ બનાવૠશàªà«àª¯à«àª નથà«",
"badtitle": "àªàª°àª¾àª¬ શિરà«àª·àª",
"badtitletext": "àªàªªàª¨à«àª àªàªà«àªàª¿àª¤ શà«àª°à«àª·àª àª
માનà«àª¯ àªà«, àªàª¾àª²à« àªà«, àª
થવાતૠàª
યà«àªà«àª¯ રà«àª¤à« àªàªàª¤àª°-àªàª¾àª·àª¿àª¯ àªà« àªàªàª¤àª°-વિàªàª¿ સાથૠàªà«àª¡àª¾àª¯à«àª²à«àª શà«àª°à«àª·àª àªà«.\nશàªà«àª¯ àªà« àªà« તà«àª®àª¾àª àªàª àªà« વધૠàªàªµàª¾ àª
àªà«àª·àª° àªà« àªàª¿àª¹à«àª¨à« àªà« àªà« àªà« પાનાનાઠશà«àª°à«àª·àª માàªà« àª
વà«àª§ àªà«.",
+ "title-invalid-empty": "વિનàªàª¤à« àªàª°à«àª²à«àª પાનà«àª શà«àª°à«àª·àª àªàª¾àª²à« àªà« àª
થવા તà«àª®àª¾àª ફàªà«àª¤ નામસà«àª¥àª³àª¨à«àª નામ àªà«.",
+ "title-invalid-utf8": "વિનàªàª¤à« àªàª°àª¾àª¯à«àª² પà«àª·à«àª શà«àª°à«àª·àªàª®àª¾àª àª
માનà«àª¯ UTF-8 àªà«àª°àª® àªà«.",
+ "title-invalid-interwiki": "માàªàª£à« àªàª°à«àª² પà«àª·à«àª શà«àª°à«àª·àªàª®àª¾àª àªàª àªàªàª¤àª°àªµàª¿àªàª¿ àªàª¡à« àªà« àªà«àª¨à« àªàªªàª¯à«àª શà«àª°à«àª·àªàª®àª¾àª àªàª°à« શàªàª¾àª¤à« નથà«.",
+ "title-invalid-talk-namespace": "વિનàªàª¤à« àªàª°àª¾àª¯à«àª² પાનà«àª શà«àª°à«àª·àª àªàªµàª¾ àªàª°à«àªàª¾ પà«àª·à«àª નૠàªàª²à«àª²à«àª àªàª°à« àªà« àªà« àª
સà«àª¤àª¿àª¤à«àªµàª®àª¾àª નથà«.",
+ "title-invalid-characters": "માàªàª£à« àªàª°à«àª² પà«àª·à«àª શà«àª°à«àª·àªàª®àª¾àª àª
માનà«àª¯ àª
àªà«àª·àª°à« àªà«: \"$1\".",
"perfcached": "નà«àªà« દરà«àª¶àª¾àªµà«àª²à« માહિતૠàªà«àª¨àª¾ સàªàªà«àª°àª¹àª®àª¾àªàª¥à« લà«àª§à«àª²à« àªà« àª
નૠશàªà«àª¯ àªà« àªà« તૠહાલનૠપરિસà«àª¥àª¿àª¤àª¿àª®àª¾àª સàªà«àª ના હà«àª¯. વધà«àª®àª¾àª વધૠ{{PLURAL:$1|àªàª પરિણામ|$1 પરિણામà«}} ઠસàªàªà«àª°àª¹àª®àª¾àª àªàªªàª²àª¬à«àª§ àªà«.",
"perfcachedts": "નà«àªà«àª¨à« વિàªàª¤à« àªà«àª¨àª¾ સàªàªà«àª°àª¹àª®àª¾àª¥à« àªà« àª
નૠતૠàªà«àª²à«àª²à« $1ઠતાàªà« àªàª°àªµàª¾àª®àª¾àª àªàªµà« હતà«. વધà«àª®àª¾àª વધૠ{{PLURAL:$4|àªàª પરિણામ|$4 પરિણામà«}} ઠસàªàªà«àª°àª¹àª®àª¾àª àªàªªàª²àª¬à«àª§ àªà«.",
"querypage-no-updates": "ઠપાનાનૠનવૠàªàªµà«àª¤à«àª¤àª¿àª હાલમાઠàª
àªà«àª°àª¿àª¯ àªà«.\nàª
હà«àªàª¨à« વિàªàª¤à« હાલમાઠરિફà«àª°à«àª¶ àªàª°àªµàª¾àª®àª¾àª નહૠàªàªµà«.",
diff --git a/languages/i18n/he.json b/languages/i18n/he.json
index 0e3a57955b..a8bd06ec5f 100644
--- a/languages/i18n/he.json
+++ b/languages/i18n/he.json
@@ -765,6 +765,7 @@
"parser-template-loop-warning": "× ×צ×× ×ª×× ×ת ×ק×ר×ת ×עצ××: [[$1]]",
"template-loop-category": "×פ×× ×¢× ×××××ת ×ת×× ×ת",
"template-loop-category-desc": "×××£ ××× ×××× ××××× ×ת×× ×ת, ××××ר ת×× ×ת שק×ר×ת ×עצ×× ××××¤× ×¨×§×רס×××.",
+ "template-loop-warning": "×××ר×: ×××£ ××× ×§××¨× ×[[:$1]], ××× ×××¨× ×××××× ×ת×× ×ת (קר××× ×¨×§×רס×××ת ××× ×¡×פ×ת).",
"parser-template-recursion-depth-warning": "×¢××ק ×ת×× ××ת ×××××××ת ×× ××× ×¢×ר ×ת ×××××× ($1)",
"language-converter-depth-warning": "×¢××ק ×××ר ××©×¤× ×¢×ר ×ת ×××××× ($1)",
"node-count-exceeded-category": "×פ×× ×©××× ×ספר ×צ×ת×× ×××× ×××",
diff --git a/languages/i18n/it.json b/languages/i18n/it.json
index 955aa00697..cc103c5a80 100644
--- a/languages/i18n/it.json
+++ b/languages/i18n/it.json
@@ -1491,6 +1491,8 @@
"rcfilters-view-tags-tooltip": "Filtra risultati per etichette di modifica",
"rcfilters-view-return-to-default-tooltip": "Torna al menu filtri principale",
"rcfilters-watchlist-edit-watchlist-button": "Modifica il tuo elenco di pagine osservate",
+ "rcfilters-preference-label": "Nascondi la versione migliorata delle ultime modifiche",
+ "rcfilters-preference-help": "Ripristina la riprogettazione dell'interfaccia 2017 e tutti gli strumenti aggiunti allora e da allora.",
"rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da $3, $4 (mostrate fino a $1 ).",
"rclistfromreset": "Reimposta la selezione della data",
"rclistfrom": "Mostra le nuove modifiche a partire daË $2, $3",
diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json
index c7cd4e2c05..0e9370f595 100644
--- a/languages/i18n/ko.json
+++ b/languages/i18n/ko.json
@@ -1457,6 +1457,7 @@
"rcfilters-watchlist-markseen-button": "모ë ë³ê²½ì¬íì 본 ê²ì¼ë¡ íì",
"rcfilters-watchlist-edit-watchlist-button": "ë´ ì£¼ì문ì ëª©ë¡ í¸ì§",
"rcfilters-watchlist-showupdated": "ë³ê²½ì´ ë°ìí ì´íë¡ ë°©ë¬¸í ì ì´ ìë 문ìì ë³ê²½ì¬íì êµµê² íìë©ëë¤.",
+ "rcfilters-preference-label": "ê°ì ë ë²ì ì ìµê·¼ ë°ë ì¨ê¸°ê¸°",
"rcnotefrom": "ìëë $3, $4 ë¶í° ììíë {{PLURAL:$5|ë°ëì´ ììµëë¤}}. (ìµë $1 ê°ê° íìë¨)",
"rclistfromreset": "ë ì§ ì í ì´ê¸°í",
"rclistfrom": "$3 $2ë¶í° ììíë ìë¡ ë°ë 문ì 보기",
@@ -3823,7 +3824,7 @@
"special-characters-group-sinhala": "ì±í ë¼ ë¬¸ì",
"special-characters-group-gujarati": "구ìë¼í¸ 문ì",
"special-characters-group-devanagari": "ë°ë°ëê°ë¦¬ì´",
- "special-characters-group-thai": "íì´ì´",
+ "special-characters-group-thai": "íêµì´",
"special-characters-group-lao": "ë¼ì¤ì´",
"special-characters-group-khmer": "í¬ë©ë¥´ì´",
"special-characters-group-canadianaboriginal": "ìºëë¤ ì주민 ì¸ì´",
diff --git a/languages/i18n/ku-latn.json b/languages/i18n/ku-latn.json
index 7a1c129fb3..b596b8dcf8 100644
--- a/languages/i18n/ku-latn.json
+++ b/languages/i18n/ku-latn.json
@@ -65,6 +65,8 @@
"underline-never": "Qet",
"underline-default": "Tercîhên lêgerokê",
"editfont-default": "Tercîhên lêgerokê",
+ "editfont-sansserif": "Fonta Sans-serif'ê",
+ "editfont-serif": "Fonta Serif'ê",
"sunday": "yekÅem",
"monday": "duÅem",
"tuesday": "sêÅem",
@@ -107,10 +109,10 @@
"feb": "reÅ",
"mar": "adr",
"apr": "avr",
- "may": "gulan",
+ "may": "gln",
"jun": "pûÅ",
"jul": "tîr",
- "aug": "teb",
+ "aug": "Glw",
"sep": "rez",
"oct": "kew",
"nov": "ser",
@@ -222,7 +224,7 @@
"currentevents": "Bûyerên rojane",
"currentevents-url": "Project:Bûyerên rojane",
"disclaimers": "Ferexetname",
- "disclaimerpage": "Project:Ferexetname",
+ "disclaimerpage": "Project:Ferexetnameya giÅtî",
"edithelp": "Alîkariya guherandinê",
"helppage-top-gethelp": "Alîkarî",
"mainpage": "Destpêk",
@@ -231,7 +233,7 @@
"portal": "Portala komê",
"portal-url": "Project:Portala komê",
"privacy": "Siyaseta veÅarîtiyê",
- "privacypage": "Project:Parastina daneyan",
+ "privacypage": "Project:Siyaseta veÅarîtiyê",
"badaccess": "Ãewtiya destûrê",
"badaccess-group0": "Tu nikarî vî tiÅtî bikî.",
"badaccess-groups": "Ev tiÅta tu dixwazî bikî tenê ji bikarhênerên {{PLURAL:$2|van koman|vê komê}} re {{PLURAL:$2|ne|ye}}: $1.",
@@ -274,7 +276,7 @@
"nstab-media": "Medya",
"nstab-special": "Rûpela taybet",
"nstab-project": "Rûpela projeyê",
- "nstab-image": "Wêne",
+ "nstab-image": "Dosye",
"nstab-mediawiki": "Peyam",
"nstab-template": "Åablon",
"nstab-help": "Alîkarî",
@@ -548,7 +550,7 @@
"templatesused": "{{PLURAL:$1|Åablona|Åablonên}} ku li ser vê rûpelê {{PLURAL:$1|tê|tên}} bikaranîn:",
"templatesusedpreview": "{{PLURAL:$1|Åablona|Åablonên}} di vê pêÅdîtinê de {{PLURAL:$1|tê|tên}} bikaranîn:",
"templatesusedsection": "{{PLURAL:$1|Åablona ku di vê beÅê de tê bikaranîn|Åablonên ku di vê beÅê de tên bikaranîn}}:",
- "template-protected": "(tê parastin)",
+ "template-protected": "()",
"template-semiprotected": "(nîv-parastî)",
"hiddencategories": "Ev rûpel endamê {{PLURAL:$1|1 kategoriya veÅartî|$1 kategoriyên veÅartî}} ye:",
"nocreate-loggedin": "Destûra te tune ye ku tu rûpelên nu biafirînî.",
@@ -665,7 +667,7 @@
"searchprofile-everything": "Her tiÅt",
"searchprofile-advanced": "PêÅketî",
"searchprofile-articles-tooltip": "Di $1 da lêbigere",
- "searchprofile-images-tooltip": "Li pelan bigere",
+ "searchprofile-images-tooltip": "Li nav dosyeyan bigere",
"searchprofile-everything-tooltip": "Di hemû naverokada bigere (tevî gotûbêja)",
"search-result-size": "$1 ({{PLURAL:$2|peyvek|$2 peyv}})",
"search-redirect": "(beralîkirina ji $1)",
@@ -853,7 +855,7 @@
"recentchanges-legend": "Vebijarkên guherandinên dawî",
"recentchanges-summary": "Guhertinên herî dawî yên wîkiyê li ser vê rûpelê biÅopîne.",
"recentchanges-label-newpage": "Rûpeleke nû hate çêkirin",
- "recentchanges-label-minor": "Ev guherîneke biçûk e",
+ "recentchanges-label-minor": "Ev guhertineke Biçûk e",
"recentchanges-label-bot": "Ev guherîn ji aliyê botekê ve hate çêkirin",
"recentchanges-label-unpatrolled": "Ev gotar hêjî nehatiye sererastkirin",
"recentchanges-label-plusminus": "Qebareya vê rûpelê bi ev qas biteyan hate guherandin",
@@ -938,7 +940,7 @@
"filetype-banned": "Dosyeyên bi vê cureye hatîye qedexekirin.",
"verification-error": "Ev dosye, rastandina dosyeye derbas nekir.",
"unknown-error": "Ãewtiyeke nenas pêk hat.",
- "large-file": "Mezinbûna pelê bila ji $1 ne mezintir be; ev pel $2 e.",
+ "large-file": "Mezinbûna dosyeyê divê ji $1 ne mezintir be; ev dosye $2 e.",
"emptyfile": "Data'ya barkirî vala ye. Sedemê valabûnê belkî ÅaÅnivîsek di navê data'yê da ye. Xêra xwe seke, ku tu rast dixazê vê data'yê barbikê.",
"fileexists": "Datayek bi vê navê berê heye.\nEger tu niha li âTomarbikeâ xê, ew wêneyê kevin ê here û wêneyê te ê were barkirin di bin wê navê.\nDi bin [[:$1]] du dikarî sekê, ku di dixwazê wê wêneyê biguherînê.\nEger tu naxazê, xêra xwe li âBetalâ xe.\n[[$1|thumb]]",
"fileexists-extension": "Datayek wek vê navê berê heye: [[$2|thumb]]\n* Navî datayê yê tê barkirin: [[:$1]] \n* Navî datayê yê berê heyê: [[:$2]] \nXêra xwe navekî din bibîne.",
@@ -1018,12 +1020,12 @@
"filehist-user": "Bikarhêner",
"filehist-dimensions": "Mezinahî",
"filehist-filesize": "Mezinahiya pelê",
- "filehist-comment": "Åîrove",
+ "filehist-comment": "Åirove",
"imagelinks": "Bikaranîna pelê",
"linkstoimage": "Di van rûpelan de {{PLURAL:$1|page links|$1 lînkek}} ji vî dosyeye re heye:",
"nolinkstoimage": "Rûpelekî ku ji vî wêneyî re girêdankê çêdike nîne.",
"linkstoimage-redirect": "$1 (beralîkirina pelê) $2",
- "sharedupload-desc-here": "Ev pel ji $1 û dibe ku ji aliyê projeyên din ve jî hatibe bikaranîn.\nAgahdariya li ser [$2 rûpela danasîna pelê] li jêr tê nîÅandan.",
+ "sharedupload-desc-here": "Ev dosye ji $1 û dibe ku ji aliyê projeyên din ve jî hatibe bikaranîn.\nAgahdariya li ser [$2 rûpela danasîna dosyeyê] li jêr tê nîÅandan.",
"filepage-nofile-link": "Dosyeyek bi vî navî tune ye, lê tu dikarî wê [$1 bar bikî].",
"uploadnewversion-linktext": "Versiyoneke nû ya vê daneyê barbike",
"shared-repo-from": "ji $1",
diff --git a/languages/i18n/lfn.json b/languages/i18n/lfn.json
index 8df8bb1a10..49c7e06aca 100644
--- a/languages/i18n/lfn.json
+++ b/languages/i18n/lfn.json
@@ -46,6 +46,7 @@
"tog-watchlisthideminor": "Asconde editas minor de la lista de pajes oservada",
"tog-watchlisthideliu": "Asconde editas par usores identifiada de la lista de pajes oservada",
"tog-watchlistreloadautomatically": "Recarga automata la lista de pajes oservada cuando un filtre es cambiada (JavaScript nesesada)",
+ "tog-watchlistunwatchlinks": "Ajunta lias direta per monitori/desmonitori a pajes monitorida (JavaScript es usada per alterna entre la du)",
"tog-watchlisthideanons": "Asconde editas par usores anonim de la lista de pajes oservada",
"tog-watchlisthidepatrolled": "Asconde editas patruliada de la lista de pajes oservada",
"tog-watchlisthidecategorization": "Asconde la categori de pajes",
@@ -216,7 +217,11 @@
"jumptosearch": "xerca",
"view-pool-error": "Pardona, la servadores es tro cargada a esta ora.\nTro multe usores es atenta vide esta paje.\nPer favore espeta ante cuanto tu atenta vide esta paje denova.\n\n$1",
"generic-pool-error": "Pardona, la servadores es tro cargada a esta ora.\nTro multe usores es atentante vide esta recurso.\nPer favore espeta ante cuando tu atenta vide esta recurso denova.",
+ "pool-timeout": "Semafor nonotenable: atenta abandonada",
+ "pool-queuefull": "Filo de servadores es plen",
"pool-errorunknown": "Era nonconoseda",
+ "pool-servererror": "La manejador de servadores no es disponable ($1)",
+ "poolcounter-usage-error": "Era de usa: $1",
"aboutsite": "Sur {{SITENAME}}",
"aboutpage": "Project:Sur",
"copyright": "La contenida es disponeda su $1, estra diferes notada.",
@@ -234,10 +239,16 @@
"portal-url": "Project:Porton de comunia",
"privacy": "Promete de privatia",
"privacypage": "Project:Promete de privatia",
+ "badaccess": "Era de permete",
+ "badaccess-group0": "Tu no es permeteda a fa la ata cual tu ia solisita.",
+ "badaccess-groups": "La ata cual tu ia solisita es limitada a usores en {{PLURAL:$2|la grupo|un de la grupos}}: $1.",
+ "versionrequired": "Revisa $1 de MediaWiki es nesesada",
+ "versionrequiredtext": "Revisa $1 de MediaWiki es nesesada per usa esta paje.\nVide la [[Special:Version|paje de varias]].",
"ok": "Oce",
"retrievedfrom": "Retraeda de \"$1\"",
"youhavenewmessages": "{{PLURAL:$3|Tu ave}} $1 ($2).",
"youhavenewmessagesfromusers": "{{PLURAL:$4|Tu ave}} $1 de {{PLURAL:$3|un otra usor|$3 usores}} ($2).",
+ "youhavenewmessagesmanyusers": "Tu ave $1 de multe usores ($2).",
"newmessageslinkplural": "{{PLURAL:$1|un mesaje nova|999=mesajes nova}}",
"newmessagesdifflinkplural": "{{PLURAL:$1|cambia|cambias}} resente",
"youhavenewmessagesmulti": "Tu ave mesajes nova en $1",
@@ -255,13 +266,19 @@
"confirmable-confirm": "Esce {{GENDER:$1|tu}} es serta?",
"confirmable-yes": "Si",
"confirmable-no": "No",
+ "thisisdeleted": "Vide o restora $1?",
"viewdeleted": "Vide $1?",
+ "restorelink": "{{PLURAL:$1|un edita sutraeda|$1 editas sutraeda}}",
"feedlinks": "Flue:",
+ "feed-invalid": "Tipo de flue no es valida.",
+ "feed-unavailable": "Flues no es disponable",
"site-rss-feed": "$1 RSS Flue",
"site-atom-feed": "$1 Flue Atom",
"page-rss-feed": "\"$1\" RSS Flue",
"page-atom-feed": "\"$1\" Flue Atom",
"red-link-title": "$1 (paje no esiste)",
+ "sort-descending": "Ordina desendente",
+ "sort-ascending": "Ordina asendente",
"nstab-main": "Paje",
"nstab-user": "Paje de usor",
"nstab-media": "Paje de medio",
@@ -273,13 +290,27 @@
"nstab-help": "Paje de aida",
"nstab-category": "Categoria",
"mainpage-nstab": "Paje xef",
+ "nosuchactiontext": "La ata spesifada par la URL es nonvalida.\nCisa tu ia maltape la URL o ia segue un lia noncoreta.\nO cisa esta indica un defeto en la program usada par {{SITENAME}}.",
"nosuchspecialpage": "Paje spesial nonesistente",
"nospecialpagetext": "Tu ia solisita un paje spesial nonvalida. \n\nUn lista de pajes spesial valida es disponable en [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Era",
"databaseerror": "Era de base de datos",
+ "databaseerror-text": "Un era ia aveni en interoga la banco de datos.\nCisa esta indica un defeto en la program.",
+ "databaseerror-textcl": "Un era ia aveni en interoga la banco de datos.",
+ "databaseerror-query": "Interoga: $1",
+ "databaseerror-function": "Funsiona: $1",
+ "databaseerror-error": "Era: $1",
"missingarticle-diff": "(Difere: $1, $2)",
"internalerror": "Era interna",
"internalerror_info": "Era interna: $1",
+ "internalerror-fatal-exception": "Era nonreparable de tipo \"$1\"",
+ "filecopyerror": "Fix \"$1\" no ia pote es copiada a \"$2\".",
+ "filerenameerror": "Fix \"$1\" no ia pote es renomida a \"$2\".",
+ "filedeleteerror": "Fix \"$1\" no ia pote es sutraeda.",
+ "directorycreateerror": "Arcivo \"$1\" no ia pote es creada.",
+ "directoryreadonlyerror": "Arcivo \"$1\" es nonscrivable.",
+ "directorynotreadableerror": "Arcivo \"$1\" es nonlejable.",
+ "filenotfound": "Fix \"$1\" no ia pote es trovada.",
"badtitle": "Mal titulo",
"badtitletext": "La titulo de la paje spesifada es nonlegal, vacua, o un titulo interlingual o intervici de lia noncoreta. Cisa lo conteni un o plu sinias cual on no pote usa en titulos.",
"viewsource": "Mostra la fonte",
@@ -290,6 +321,9 @@
"myprivateinfoprotected": "Tu no ave permete per edita tua informa privata.",
"mypreferencesprotected": "Tu no ave permete per edita tua preferes.",
"ns-specialprotected": "La pajes spesial no pote es editada.",
+ "virus-badscanner": "Malajustada: scanador antivirusal nonconoseda: $1 ",
+ "virus-scanfailed": "fali de scane (codigo $1)",
+ "virus-unknownscanner": "scanador antivirusal nonconoseda:",
"logouttext": "Tu es aora desautenticida. \n\nNota ce cisa alga pajes va continua es mostrada como si tu ta es ancora autenticida asta cuando tu vacui la memoria de tua surfador.",
"cannotlogoutnow-title": "Tu no pote desautentici a presente",
"cannotlogoutnow-text": "Desautentici no es posible cuando tu usa $1.",
@@ -348,7 +382,17 @@
"createacct-benefit-body1": "{{PLURAL:$1|edita|editas}}",
"createacct-benefit-body2": "{{PLURAL:$1|paje|pajes}}",
"createacct-benefit-body3": "{{PLURAL:$1|contribuor|contribuores}} resente",
+ "badretype": "La claves cual tu ia tape no es egal.",
+ "usernameinprogress": "Un crea de conta per esta nom de usor aveni ja.\nEspeta, per favore.",
+ "userexists": "La nom spesifada de usor es ja usada.\nEleje un otra nom, per favore.",
"loginerror": "Era de entra",
+ "createacct-error": "Era de crea de conta",
+ "createaccounterror": "La conta no ia pote es creada: $1",
+ "nocookiesnew": "La conta de usor es aora creada, ma tu no ia autentici.\n{{SITENAME}} usa cucis per autentici usores.\nTu ia descomuta cucis.\nPer favore, comuta los e autentici con tua nom de usor nova e tua clave.",
+ "nocookieslogin": "{{SITENAME}} usa cucis per autentici usores.\nTu ia descomuta cucis.\nPer favore, comuta los e atenta denova.",
+ "nocookiesfornew": "La conta de usor no ia es creada, car nos no ia pote confirma sua fonte.\nSerti ce tu ia comuta cucis, recarga esta paje, e atenta denova.",
+ "createacct-loginerror": "La crea de la conta ia susede, ma tu no ia pote es automata autenticida. Per favore, vade a la paje de [[Special:UserLogin|autentici nonautomata]].",
+ "noname": "Tu no ia spesifa un nom de usor valida.",
"loginsuccesstitle": "Tu ia entra",
"loginsuccess": "'''Tu ia entrada aora a {{SITENAME}} como \"$1\".'''",
"nosuchuser": "On no ave un usor con la nom \"$1\".\nOn distingui entre leteras major e minor per nomes de usores.\nEsamina la spele, o [[Special:CreateAccount|crea un conta nova]].",
@@ -365,18 +409,37 @@
"passwordremindertitle": "Sinia secreta temporer nova per {{SITENAME}}",
"passwordremindertext": "Algun (tu, probable, de adirije IP $1)\nia demanda un sinia secreta nova per {{SITENAME}} ($4).\nLa sinia secreta tempora per usor \"$2\" es aora \"$3\". Si esta ia es tua intende, tu debe identifia tu denova per entra e eleje tua sinia nova aora.\nTua sinia tempora va desvalidi en {{PLURAL:$5|un dia|$5 dias}}.\n\nSi algun otra ca tu ia envia esta demanda a nos, o si tu ia recorda tua sinia secreta e no vole cambia lo aora, tu pote iniora esta mesaje e continua usa tua sinia secreta vea.",
"noemail": "No es un adirije de eposta per usor \"$1\".",
+ "noemailcreate": "Tu debe furni un adirije de eposta valida.",
"passwordsent": "Un sinia secreta ia es enviada a la adirije de eposta per \"$1\".\nPer favore, sinia per entra ancora pos tu ia reseta el.",
"eauthentsent": "Un eposta de serti ia es enviada a la adirije de eposta spesifada.\nAnte cualce otra epostas es enviada a tua conta, tu va nesesa segue la instruis en la eposta, per serti ce la conta es vera la tua.",
+ "throttled-mailpassword": "Un eposta de reinisia la clave ia es ja enviada, en la {{PLURAL:$1|ora|$1 oras}} la plu resente.\nPer preveni malusa, sola un tal eposta va es enviada per {{PLURAL:$1|ora|$1 oras}}.",
"mailerror": "Era en envia eposta: $1",
"acct_creation_throttle_hit": "Visitores a esta vici, usante tua adirije IP, ia crea {{PLURAL:$1|1 conta|$1 contas}} en la $2 la plu resente, cual es la masima permeteda en esta periodo.\nComo resulta, visitores con esta adirije IP no pote crea plu contas a esta tempo.",
+ "emailauthenticated": "Tua adirije de eposta ia es confirmada a $2 a $3.",
"emailconfirmlink": "Aproba tu adirije de eposta",
+ "cannotchangeemail": "On no pote cambia adirijes de eposta per contas en esta vici.",
+ "emaildisabled": "Esta vici no pote envia epostas.",
"accountcreated": "Conta es creada",
+ "accountcreatedtext": "La conta de usor per [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discute]]) ia es creada.",
+ "createaccount-title": "Crea de conta per {{SITENAME}}",
+ "createaccount-text": "Algun ia crea un conta per tua adirije de eposta a {{SITENAME}} ($4) nomida \"$2\", con clave \"$3\".\nTu debe autentici e cambia tua clave aora.\n\nTu pote iniora esta mesaje, si esta conta ia es creada par era.",
+ "login-throttled": "Tu ia fa resente tro multe atentas de autentici.\nPer favore, pausa per $1 ante atenta denova.",
+ "login-abort-generic": "Tua autentici ia fali - Abortada",
+ "login-migrated-generic": "Tua conta ia es migrada, e tua nom de usor no esiste plu en esta vici.",
"loginlanguagelabel": "Lingua: $1",
+ "suspicious-userlogout": "Tua solisita de desautentici ia es refusada car lo pare es enviada par un surfador o proxi malfunsionante.",
+ "createacct-another-realname-tip": "La nom vera es nonobligante.\nSi tu eleje furni lo, lo va es usada per atribui la laboras fada par la usor.",
"pt-login": "Identifia se",
"pt-login-button": "Identifia",
"pt-login-continue-button": "Continua autentici",
"pt-createaccount": "Crea un conta",
"pt-userlogout": "Desidentifia",
+ "php-mail-error-unknown": "Era nonconoseda en la funsiona mail() de PHP.",
+ "user-mail-no-addy": "On ia atenta envia un eposta sin adirije de eposta.",
+ "user-mail-no-body": "On ia atenta envia un eposta con corpo vacua o nonormal corta.",
+ "changepassword": "Cambia clave",
+ "resetpass_announce": "Per fini autentici, tu debe furni un clave nova.",
+ "resetpass_header": "Cambia clave de conta",
"oldpassword": "Sinia secreta vea:",
"newpassword": "Sinia secreta nova:",
"retypenew": "Re-entra tu sinia secreta nova:",
@@ -385,6 +448,7 @@
"changepassword-throttled": "Tu ia fa resente tro multe atentas de autentici.\nPer favore, pausa per $1 ante atenta denova.",
"botpasswords": "Claves de bot",
"botpasswords-summary": "Claves de bot permete ce on asede un conta de usor par API sin usa la identia xef de la conta. La diretos de usor disponable pos autentici par clave de bot es cisa restrinjeda.\n\nSi tu no sabe perce on ta vole fa esta, probable tu debe no fa lo. Nunca un otra person debe demanda ce tu jenera un de estas e dona lo a el.",
+ "botpasswords-disabled": "Claves de bot es descomutada.",
"botpasswords-no-central-id": "Per usa claves de bot, tu debe es autenticida con conta sentral.",
"botpasswords-existing": "Claves esistente de bot",
"botpasswords-createnew": "Crea un clave nova de bot",
@@ -405,6 +469,13 @@
"botpasswords-created-body": "La clave de bot \"$1\" de usor \"$2\" ia es creada.",
"botpasswords-updated-title": "Clave de bot cambiada",
"botpasswords-updated-body": "La clave de bot \"$1\" de usor \"$2\" ia es cambiada.",
+ "botpasswords-deleted-title": "Clave de bot sutraeda",
+ "botpasswords-deleted-body": "La clave de bot \"$1\" de usor \"$2\" ia es sutraeda.",
+ "botpasswords-newpassword": "La clave nova per autentici con $1 es $2 . Per favore, nota esta per refere futur. (Per botes vea de cual sua nom de autentici debe es la mesma como la nom de usor ultima, tu pote usa ance $3 como nom de usor e $4 como clave.)",
+ "botpasswords-no-provider": "BotPasswordsSessionProvider no es disponable.",
+ "botpasswords-restriction-failed": "Restrinjes de clave de bot preveni esta autentici.",
+ "botpasswords-invalid-name": "La nom de usor spesifada no conteni la sinia separante de claves de bot (\"$1\").",
+ "botpasswords-not-exist": "Usor \"$1\" no ave un clave de bot nomida \"$2\".",
"resetpass_forbidden": "Claves no pote es cambiada",
"resetpass_forbidden-reason": "Claves no pote es cambiada: $1",
"resetpass-no-info": "Tu debe es autenticida per asede direta esta paje.",
@@ -554,6 +625,7 @@
"nocreatetext": "{{SITENAME}} ave un restringe a la capas per crea pajes nova.\nTu pote vade a retro e edita un paje esistente, o [[Special:UserLogin|sinia per entra o crea un conta]].",
"nocreate-loggedin": "Tu no es permeteda a crea pajes nova.",
"sectioneditnotsupported-title": "La edita de partes no es suportada",
+ "sectioneditnotsupported-text": "La edita de partes no es suportada en esta paje.",
"permissionserrors": "Era de permete",
"permissionserrorstext-withaction": "Tu no pote $2, per la {{PLURAL:$1|razona|razonas}} seguente:",
"recreate-moveddeleted-warn": "Avisa: Tu recrea un paje cual on ia sutrae a ante. \n\nConsidera esce lo conveni ce tu continua edita esta paje. La arcivos de sutrae e move per la paje es presentada asi per aida:",
@@ -599,6 +671,7 @@
"rev-showdeleted": "mostra",
"revdelete-nooldid-title": "Revisa destinal nonvalida",
"revdelete-show-file-submit": "Si",
+ "revdelete-hide-comment": "Resoma de edita",
"revdelete-radio-set": "Ascondeda",
"revdelete-radio-unset": "Vidable",
"revdelete-log": "Razona:",
diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json
index 13a9fd1630..d6974ee6c6 100644
--- a/languages/i18n/mk.json
+++ b/languages/i18n/mk.json
@@ -754,6 +754,7 @@
"parser-template-loop-warning": "ÐÑонаÑдена е Ñамка во ÑаблоноÑ: [[$1]]",
"template-loop-category": "СÑÑаниÑи Ñо ÑаблонÑки Ñамки",
"template-loop-category-desc": "СÑÑаниÑава ÑодÑжи ÑаблонÑка Ñамка, Ñ.е. Ñаблон ÐºÐ¾Ñ Ð¿Ð¾Ð²ÑоÑливо Ñе ÑамоповикÑва",
+ "template-loop-warning": "ÐÑедÑпÑедÑваÑе: СÑÑаниÑава го повикÑва [[:$1]], ÑÑо пÑедизвикÑва Ñамка во ÑÐ°Ð±Ð»Ð¾Ð½Ð¾Ñ (беÑконеÑно повÑоÑлив повик).",
"parser-template-recursion-depth-warning": "ÐÑеÑекоÑена е гÑаниÑаÑа на длабоÑинаÑа на ÑекÑÑзиÑаÑа во ÑÐ°Ð±Ð»Ð¾Ð½Ð¾Ñ ($1)",
"language-converter-depth-warning": "ÐÑеÑекоÑена е гÑаниÑаÑа на длабоÑинаÑа на ÑазиÑÐ½Ð¸Ð¾Ñ Ð¿ÑеÑвоÑÐ°Ñ ($1)",
"node-count-exceeded-category": "СÑÑаниÑи каде е Ð½Ð°Ð´Ð¼Ð¸Ð½Ð°Ñ Ð±ÑоÑÐ¾Ñ Ð½Ð° Ñазли",
diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json
index 5e835fa28a..e151d5d98e 100644
--- a/languages/i18n/ml.json
+++ b/languages/i18n/ml.json
@@ -35,9 +35,9 @@
]
},
"tog-underline": "à´à´£àµà´£à´¿à´àµ¾à´àµà´àµ à´
à´à´¿à´µà´°à´¯à´¿à´àµà´:",
- "tog-hideminor": "à´ªàµà´¤à´¿à´¯ മാറàµà´±à´àµà´à´³àµà´àµ à´ªà´àµà´à´¿à´à´¯à´¿àµ½ à´àµà´±à´¿à´¯ തിരàµà´¤àµà´¤àµà´àµ¾ à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´àµà´à´¾à´¤à´¿à´°à´¿à´àµà´àµà´",
- "tog-hidepatrolled": "à´±àµà´¨àµà´¤àµà´àµà´±àµà´±à´¿à´¯ തിരàµà´¤àµà´¤àµà´àµ¾ à´ªàµà´¤à´¿à´¯à´®à´¾à´±àµà´±à´àµà´à´³à´¿àµ½ à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´àµà´à´¾à´¤à´¿à´°à´¿à´àµà´àµà´",
- "tog-newpageshidepatrolled": "à´±àµà´¨àµà´¤àµà´àµà´±àµà´±à´ªàµà´ªàµà´àµà´ താളàµà´àµ¾ à´ªàµà´¤à´¿à´¯à´¤à´¾à´³àµà´à´³àµà´àµ à´ªà´àµà´à´¿à´à´¯à´¿àµ½ à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´àµà´à´¾à´¤à´¿à´°à´¿à´àµà´àµà´",
+ "tog-hideminor": "à´ªàµà´¤à´¿à´¯ മാറàµà´±à´àµà´à´³àµà´àµ à´ªà´àµà´à´¿à´à´¯à´¿àµ½ à´àµà´±à´¿à´¯ തിരàµà´¤àµà´¤àµà´àµ¾ മറയàµà´àµà´àµà´",
+ "tog-hidepatrolled": "à´±àµà´¨àµà´¤àµà´àµà´±àµà´±à´¿à´¯ തിരàµà´¤àµà´¤àµà´àµ¾ à´ªàµà´¤à´¿à´¯à´®à´¾à´±àµà´±à´àµà´à´³à´¿àµ½ മറയàµà´àµà´àµà´",
+ "tog-newpageshidepatrolled": "à´±àµà´¨àµà´¤àµà´àµà´±àµà´±à´ªàµà´ªàµà´àµà´ താളàµà´àµ¾ à´ªàµà´¤à´¿à´¯à´¤à´¾à´³àµà´à´³àµà´àµ à´ªà´àµà´à´¿à´à´¯à´¿àµ½ മറയàµà´àµà´àµà´",
"tog-hidecategorization": "താളàµà´à´³àµà´àµ വർà´àµà´àµà´à´°à´£à´ മറയàµà´àµà´àµà´",
"tog-extendwatchlist": "à´à´±àµà´±à´µàµà´ à´ªàµà´¤à´¿à´¯à´µ മാതàµà´°à´®à´²àµà´², à´à´²àµà´²à´¾ മാറàµà´±à´àµà´à´³àµà´ à´¦àµà´¶àµà´¯à´®à´¾à´àµà´¨àµà´¨ വിധതàµà´¤à´¿àµ½ à´¶àµà´°à´¦àµà´§à´¿à´àµà´àµà´¨àµà´¨ താളàµà´à´³àµà´àµ à´ªà´àµà´à´¿à´ വിà´à´¸à´¿à´ªàµà´ªà´¿à´àµà´àµà´.",
"tog-usenewrc": "സമàµà´ªà´à´¾à´² മാറàµà´±à´àµà´àµ¾, à´¶àµà´°à´¦àµà´§à´¿à´àµà´àµà´¨àµà´¨à´µà´¯àµà´àµ à´ªà´àµà´à´¿à´ à´à´¨àµà´¨àµ താളàµà´à´³à´¿àµ½ മാറàµà´±à´àµà´àµ¾ à´à´£à´à´¤à´¿à´°à´¿à´àµà´àµà´",
diff --git a/languages/i18n/mwl.json b/languages/i18n/mwl.json
index 377611c376..041be722ea 100644
--- a/languages/i18n/mwl.json
+++ b/languages/i18n/mwl.json
@@ -149,6 +149,9 @@
"navigation": "Nabegaçon",
"and": " i",
"faq": "FAQ",
+ "namespaces": "DomÃnios",
+ "variants": "Bariadades",
+ "navigation-heading": "Menu de nabegaçon",
"errorpagetitle": "Erro",
"returnto": "Retornar pa $1.",
"tagline": "De {{SITENAME}}",
@@ -162,6 +165,7 @@
"printableversion": "Berson pa ampremir",
"permalink": "Lhigaçon pa siempre",
"print": "Ampremir",
+ "view": "Ber",
"edit": "Eiditar",
"create": "Criar",
"create-local": "Poner çcriçon lhocal",
@@ -170,7 +174,7 @@
"protect_change": "demudar",
"unprotect": "Altarar la proteçon",
"newpage": "Páigina nuoba",
- "talkpagelinktext": "Cumbersar",
+ "talkpagelinktext": "cumbersa",
"specialpage": "Páigina special",
"personaltools": "Ferramientas pessonales",
"talk": "Cumbersa",
@@ -299,6 +303,8 @@
"emailauthenticated": "L sou andereço de correio eiletrónico fui cunfirmado la $2, a las $3.",
"emailconfirmlink": "Cunfirma la tue morada de correio eiletrónico",
"loginlanguagelabel": "Lhéngua: $1",
+ "pt-login": "Antrar",
+ "pt-createaccount": "Criar ua cuonta",
"pt-userlogout": "Salir",
"changepassword": "Demudar palabra-chabe",
"resetpass_header": "Demudar palabra-chabe de la cuonta",
@@ -364,7 +370,7 @@
"nocreatetext": "{{SITENAME}} restringe la possibilidade de criar nuobas páiginas.\nPuode buoltar atrás i eiditar ua páigina yá eisistente, ó [[Special:UserLogin|outenticar-se ó criar ua cuonta]].",
"permissionserrorstext-withaction": "Tu nun tenes premisson pa $2, {{PLURAL:$1|pula seguinte rezon|pulas seguintes rezones}}:",
"recreate-moveddeleted-warn": "Abiso: Tu stás a criar ua páigina que yá fui d'atrás botada fuora. \n\nBei bien se ye própio cuntinar a eiditar esta páigina.\nL registro de la eileminaçon i de l arrastrar ye amostrado eiqui por cumbeniéncia:",
- "moveddeleted-notice": "Esta páigina fui apagada.\nL registro de la eileminaçon, proteçon i arrastrar desta páigina stá ambaixo pa refréncia.",
+ "moveddeleted-notice": "Esta páigina fui botada fuora.\nL registro de la eileminaçon, porteçon i arrastramiento desta páigina stá ambaixo pa refréncia.",
"viewpagelogs": "Ber registros pa esta páigina",
"currentrev": "Rebison atual",
"currentrev-asof": "Eidiçon atual cumo $1",
@@ -384,6 +390,7 @@
"history-feed-item-nocomment": "$1 a $2",
"rev-delundel": "amostrar/scunder",
"revdel-restore": "Demudar besiblidade",
+ "revdelete-edit-reasonlist": "Eiditar rezones de botar fuora",
"mergehistory-submit": "Misturar eidiçones",
"revertmerge": "Ãfazer ounion",
"history-title": "Stórico de eidiçones de \"$1\"",
@@ -397,13 +404,16 @@
"notextmatches": "Nun fui possible achar, ne l cuntenido de las páiginas, la palabra percurada",
"prevn": "{{PLURAL:$1|anterior|$1 anteriores}}",
"nextn": "{{PLURAL:$1|próssimo|próssimos $1}}",
+ "shown-title": "Amostrar $1 {{PLURAL:$1|resultado|resultados}} por páigina",
"viewprevnext": "Ber ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-new": "Criar la páigina \"[[:$1]]\" nesta berson! {{PLURAL:$2|0=|Beija tamien la páigina ancontrada na percura.|Beija tamien ls resultados de la percura.}}",
"searchprofile-articles": "Páiginas de cuntenido",
"searchprofile-images": "Multimédia",
"searchprofile-everything": "Todo",
"searchprofile-advanced": "Abançado",
+ "searchprofile-articles-tooltip": "Percurar an $1",
"searchprofile-images-tooltip": "Percurar fexeiros",
+ "searchprofile-everything-tooltip": "Percurar an todo l cuntenido (ancluindo páiginas de cumbersa)",
"searchprofile-advanced-tooltip": "Personalizar ls domÃnios adonde percurar",
"search-result-size": "$1 ({{PLURAL:$2|1 palabra|$2 palabras}})",
"search-redirect": "(ancaminamiento pa $1)",
@@ -529,6 +539,7 @@
"right-edit": "Eiditar páiginas",
"right-move": "Arrastrar páiginas",
"right-movefile": "Arrastrar fexeiros",
+ "right-writeapi": "Outelizar la API de scrita",
"grant-editmycssjs": "Eiditar l sou CSS/JavaScript personalizado",
"newuserlogpage": "Registro de criaçon de outelizadores",
"rightslog": "Registro de dreitos de l outelizador",
@@ -543,16 +554,29 @@
"recentchanges": "Redadeiras altaraçones",
"recentchanges-legend": "Oupçones de las redadeiras altaraçones",
"recentchanges-feed-description": "Acumpanha las redadeiras altaraçones de l biqui por esta semiente.",
+ "recentchanges-label-newpage": "Esta eidiçon criou ua nuoba páigina",
+ "recentchanges-label-minor": "Esta ye ua eidiçon pequerrixa",
+ "recentchanges-label-bot": "Esta eidiçon fui feita por un robó",
+ "recentchanges-label-plusminus": "Altaraçon ne l tamanho de la páigina, an bytes",
+ "recentchanges-legend-heading": "Lhegenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ber tamien la [[Special:NewPages|lhista de páiginas nuobas]])",
+ "recentchanges-submit": "Amostrar",
"rcfilters-filtergroup-watchlist": "Páiginas begiadas",
"rcnotefrom": "Ambaixo {{PLURAL:$5|stá la altaraçon feita|stan las alteraçones feitas}} zde $2 (amostradas até $1 ).",
"rclistfrom": "Amostrar las noubas altaraçones a partir de $2 de $3",
"rcshowhideminor": "$1 eidiçones pequerrixas",
+ "rcshowhideminor-show": "Amostrar",
"rcshowhidebots": "$1 robós",
+ "rcshowhidebots-show": "Amostrar",
"rcshowhideliu": "$1 outelizadores registrados",
+ "rcshowhideliu-show": "Amostrar",
"rcshowhideanons": "$1 outelizadores anónimos",
+ "rcshowhideanons-show": "Amostrar",
"rcshowhidepatr": "$1 eidiçones patrulhadas",
+ "rcshowhidepatr-show": "Amostrar",
"rcshowhidemine": "$1 mies eidiçones",
+ "rcshowhidemine-show": "Amostrar",
+ "rcshowhidecategorization-show": "Amostrar",
"rclinks": "Amostrar las redadeiras $1 altaraçones ne ls redadeiros $2 dies",
"diff": "defr",
"hist": "stór",
@@ -562,6 +586,7 @@
"newpageletter": "N",
"boteditletter": "b",
"rc_categories_any": "Qualquiera de ls scolhidos",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} açpuis las altaraçones",
"newsectionsummary": "/* $1 */ nuobo cacho",
"rc-enhanced-expand": "Amostrar detailhes",
"rc-enhanced-hide": "Scunder detailhes",
@@ -600,6 +625,7 @@
"filehist-datetime": "Data i hora",
"filehist-thumb": "Amostra",
"filehist-thumbtext": "Amostra de la berson de las $1",
+ "filehist-nothumb": "Meniatura andisponible",
"filehist-user": "Outelizador",
"filehist-dimensions": "Tamanho",
"filehist-filesize": "Tamanho de l fexeiro",
@@ -608,6 +634,7 @@
"linkstoimage": "{{PLURAL:$1|Esta páigina lhiga|Estas $1 páiginas lhigan}} este fexeiro:",
"nolinkstoimage": "Nanhua páigina apunta pa este fexeiro.",
"sharedupload": "Este fexeiro ye de $1 i puode ser outelizado por outros porjetos.",
+ "sharedupload-desc-here": "Este fexeiro ye de $1 i puode ser outelizado por outros porjetos.\nLa çcriçon na [$2 páigina oureginal] ye amostrada ambaixo.",
"uploadnewversion-linktext": "Cargar ua nuoba berson deste fexeiro",
"shared-repo-from": "de $1",
"filerevert-comment": "Motibo:",
@@ -616,6 +643,7 @@
"filedelete-submit": "Apagar",
"filedelete-nofile": "'''$1''' nun eisiste.",
"filedelete-reason-otherlist": "Outra rezon",
+ "filedelete-edit-reasonlist": "Eiditar rezones de botar fuora",
"mimesearch": "Percura MIME",
"listredirects": "Amostrar ancaminamientos",
"unusedtemplates": "Modelos nun outelizados",
@@ -655,6 +683,7 @@
"mostimages": "Eimaiges cun mais refréncias",
"mostrevisions": "Páiginas de cuntenido cun mais rebisones",
"prefixindex": "Todas las páiginas cun perfixo",
+ "prefixindex-submit": "Amostrar",
"shortpages": "Páiginas pequeinhas",
"longpages": "Páiginas cumpridas",
"deadendpages": "Páiginas sin salida",
@@ -662,6 +691,7 @@
"protectedtitles": "TÃtalos portegidos",
"listusers": "Lhista de outelizadores",
"newpages": "Páiginas nuobas",
+ "newpages-submit": "Amostrar",
"ancientpages": "Páiginas mais antigas",
"move": "Arrastrar",
"movethispage": "Arrastrar esta páigina",
@@ -681,6 +711,7 @@
"specialloguserlabel": "Outelizador(a):",
"speciallogtitlelabel": "Albo (tÃtalo ó páigina ó {{ns:user}}:nome d'outelizador):",
"log": "Registros",
+ "logeventslist-submit": "Amostrar",
"all-logs-page": "Todos ls registros públicos",
"logempty": "Nun eisiste nanhue antrada correspondente ne l registro.",
"allpages": "Todas las páiginas",
@@ -692,6 +723,7 @@
"allpagessubmit": "Bota",
"allpagesprefix": "Amostrar páiginas cul perfixo:",
"categories": "Catadories",
+ "categories-submit": "Amostrar",
"linksearch": "Percura de lhigaçones sternas",
"linksearch-ok": "Percurar",
"listusers-submit": "Amostrar",
@@ -711,29 +743,35 @@
"watch": "Begiar",
"watchthispage": "Begiar esta páigina",
"unwatch": "Zantressar-se",
- "watchlist-details": "{{PLURAL:$1|Eisiste $1 páigina|Eisisten $1 páiginas}} na sue lhista de páiginas begiadas, scluindo las páiginas de cumbersa.",
+ "watchlist-details": "{{PLURAL:$1|Eisiste $1 páigina|Eisisten $1 páiginas}} na sue lhista de páiginas begiadas (mais las páiginas de cumbersa).",
"wlheader-enotif": "La notificaçon por correio eiletrónico stá atiba.",
"wlheader-showupdated": "Las páiginas altaradas zde la redadeira beç que las besitou aparecen çtacadas an negrito .",
"wlshowlast": "Ber redadeiras $1 horas $2 dies",
+ "watchlist-submit": "Amostrar",
"watchlist-options": "Oupçones de la lhista de páiginas begiadas",
"watching": "A begiar...",
"unwatching": "A deixar de begiar...",
"enotif_reset": "Marcar todas las páiginas cumo bejitadas",
"created": "criada",
"changed": "demudada",
- "deletepage": "Botar fuora páigina",
+ "deletepage": "Botar fuora la páigina",
+ "excontentauthor": "l cuntenido era: \"$1\", i {{GENDER:$2|l único eiditor|la única eiditora|l(a) único(a) eiditor(a)}} era [[Special:Contributions/$2|$2]] ([[User talk:$2|cumbersa]])",
"delete-confirm": "Botar fuora \"$1\"",
"delete-legend": "Botar fuora",
"historywarning": "Abiso: La páigina que stás quaije a botar fuora ten un stórico cun aprossimadamente $1 {{PLURAL:$1|rebison|rebisones}}:",
+ "historyaction-submit": "Amostrar",
"confirmdeletetext": "Stás quaije a botar fuora para siempre ua páigina ó ua eimaige i todos ls sous stóricos.\nPor fabor, bei se ye esso que quieres fazer, que antendes las cunsequéncias i se esso stá d'acordo culas [[{{MediaWiki:Policy-url}}|polÃticas]].",
"actioncomplete": "Acion acabada",
- "deletedtext": "\"$1\" fue elhiminada.\nConsulte $2 para um registo de eliminações recentes.",
+ "deletedtext": "\"$1\" fue botada fuora.\nCunsulte $2 pa un registro reciente de las páiginas botadas fuora.",
"dellogpage": "Registro de botado fuora",
"deletecomment": "Rezon:",
"deleteotherreason": "Rezon adicional:",
"deletereasonotherlist": "Outra rezon",
"deletereason-dropdown": "* Motibos d'eliminaçon quemuns\n** Spam\n** Bandalismo\n** Biolaçon de dreitos d'outor\n** Pedido de l'outor\n** Ancaminamiento ambálido",
+ "delete-edit-reasonlist": "Eiditar rezones de botar fuora",
"rollbacklink": "retornar",
+ "rollbacklinkcount": "çfazer $1 {{PLURAL:$1|eidiçon|eidiçones}}",
+ "revertpage": "Fúrun çfeitas las eidiçones de [[Special:Contributions/$2|$2]] ([[User talk:$2|cumbersa]]) pa la redadeira rebison de [[User:$1|$1]]",
"protectlogpage": "Registro de porteçon",
"protectedarticle": "porteger \"[[$1]]\"",
"modifiedarticleprotection": "demudeste l nible de porteçon pa \"[[$1]]\"",
@@ -763,6 +801,9 @@
"undeletelink": "ber/restourar",
"namespace": "Spácio de nomes:",
"invert": "Amberter scuolha",
+ "tooltip-invert": "Marque esta caixa pa scunder las altaraçones la páiginas ne l domÃnio selecionado (i ne l domÃnio associado, se scolheu la oupçon)",
+ "namespace_association": "DomÃnio associado",
+ "tooltip-namespace_association": "Marque esta caixa pa ancluir tamien l domÃnio de cuntenido ó de cumbersa associado a la sue seleçon",
"blanknamespace": "(Percipal)",
"contributions": "Cuntribuiçones {{GENDER:$1|de l outelizador|de la outelizadora|de l(a) outelizador(a)}}",
"contributions-title": "Upas {{GENDER:$1|de l outelizador|de la outelizadora}} $1",
@@ -814,7 +855,9 @@
"move-watch": "Begiar esta páigina",
"movepagebtn": "Arrastrar páigina",
"pagemovedsub": "Páigina arrastrada cumo debe de ser",
- "movepage-moved": "'''\"$1\" fui arrastrado pa \"$2\"'''",
+ "movepage-moved": "\"$1\" fui arrastrada pa \"$2\" ",
+ "movepage-moved-redirect": "Fui criado un ancaminamiento.",
+ "movepage-moved-noredirect": "La criaçon dun ancaminamiento fui suprimida.",
"articleexists": "Yá eisiste ua páigina cun este tÃtalo, ou l tÃtalo que scolhiste ye ambálido.\nPor fabor, scuolhe outro nome.",
"movetalk": "Arrastrar tamien la páigina de cumbersa associada",
"move-subpages": "Arrastrar subpáiginas (anté $1)",
@@ -824,6 +867,7 @@
"revertmove": "poner al robés",
"move-leave-redirect": "Criar un ancaminamiento",
"export": "Sportar páiginas",
+ "export-submit": "Sportar",
"export-download": "Grabar cumo fexeiro",
"allmessages": "Todas las mensaiges de l sistema",
"allmessagesname": "Nome",
@@ -840,6 +884,7 @@
"tooltip-pt-mycontris": "{{GENDER:|Mies}} upas",
"tooltip-pt-login": "Tu sós animado pa que te outentiques, inda que esso nun seia oubrigatório.",
"tooltip-pt-logout": "Salir",
+ "tooltip-pt-createaccount": "Ye ancorajado a criar ua cuonta i ampeçar sesson; inda assi, nun ye oubrigatório",
"tooltip-ca-talk": "Cumbersa subre l cuntenido de la páigina",
"tooltip-ca-edit": "Eiditar esta páigina",
"tooltip-ca-addsection": "Ampeçar un cacho nuobo",
@@ -889,6 +934,10 @@
"tooltip-rollback": "\"{{int:rollbacklink}}\" çfazer, cun un solo clique, las eidiçones de l redadeiro eiditor desta páigina.",
"tooltip-undo": "\"Ãfazer\" çfaç esta eidiçoni abre ls campos de eidiçon ne l modo \"ber cumo queda\".\nPremite ajuntar la rezon de la eidiçon ne l sumário.",
"lastmodifiedatby": "Esta páigina fui eiditada pula redadeira beç a la(s) $2 de $1 por $3.",
+ "pageinfo-robot-noindex": "Nun premitida",
+ "pageinfo-subpages-name": "Subpáiginas desta páigina",
+ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|ancaminamiento|ancaminamientos}}; $3 {{PLURAL:$3|nun ancaminamiento|nun ancaminamientos}})",
+ "pageinfo-magic-words": "{{PLURAL:$1|Palabra mágica|Palabras mágicas}} ($1)",
"pageinfo-toolboxlink": "Anformaçones de la páigina",
"previousdiff": "â Eidiçon d'atrás",
"nextdiff": "Redadeira eidiçon â",
@@ -898,6 +947,9 @@
"file-nohires": "Sin resoluçon maior çponible.",
"svg-long-desc": "fexeiro SVG, de $1 Ã $2 pÃxeles, tamanho: $3",
"show-big-image": "Fexeiro oureginal",
+ "show-big-image-preview": "Tamanho desta antebison: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Outra resoluçon|Outras resoluçones}}: $1.",
+ "show-big-image-size": "$1 Ã $2 pÃxeles",
"newimages": "Galerie de nuobos fexeiros",
"noimages": "Nun hai nada pa ber.",
"ilsubmit": "Percurar",
@@ -978,6 +1030,8 @@
"specialpages-group-pagetools": "Ferramienta de páiginas",
"specialpages-group-wiki": "Dados i ferramientas",
"specialpages-group-redirects": "Páiginas speciales de ancaminamientos",
+ "tag-filter": "Filtrar las [[Special:Tags|etiquetas]]:",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2)",
"tags-title": "Eitiquetas",
"tags-edit": "eiditar",
"tags-activate": "atibar",
@@ -987,6 +1041,8 @@
"logentry-move-move": "$1 {{GENDER:$2|arrastrou}} $3 pa $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|arrastrou}} $3 pa $4 sin deixar un ancaminamiento",
"logentry-move-move_redir": "$1 {{GENDER:$2|arrastrou}} $3 pa l sou ancaminamiento $4",
+ "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|arrastrou}} $3 pa l sou ancaminamiento $4, suprimindo l purmeiro",
+ "logentry-newusers-create": "La cuonta de {{GENDER:$2|outelizador|outelizadora}} $1 fui criada",
"rightsnone": "(nanhun)",
"searchsuggest-search": "Percurar an {{SITENAME}}",
"mediastatistics-header-multimedia": "Média anriquecida",
diff --git a/languages/i18n/my.json b/languages/i18n/my.json
index 8c67a7c786..13f49bc444 100644
--- a/languages/i18n/my.json
+++ b/languages/i18n/my.json
@@ -408,7 +408,7 @@
"createaccount-title": "{{SITENAME}} á¡áá½áẠá¡áá±á¬áá·áºáá¼á¯áá¯ááºáá¼ááºá¸",
"login-throttled": "áááºááẠlogin áááºááẠá¡áá¼áááºáá¼á±á¬ááºáá¼á¬á¸á
á½á¬ á¡á¬á¸áá¯ááºáá²á·áá¼á®á¸áá¼á
áºáááºá\náá»á±á¸áá°á¸áá¼á¯á áááºááááºááẠ$1 á
á±á¬áá·áºáá±á¸áá«á",
"login-abort-generic": "áá±á¬á·ááºá¡ááºáááºáá¼ááºá¸ áá¡á±á¬ááºáá¼ááºáá« - áá»ááºááááºá¸áá¼á®á¸",
- "loginlanguagelabel": "áá¬áá¬: $1",
+ "loginlanguagelabel": "áá¬áá¬á
áá¬á¸: $1",
"pt-login": "á¡áá±á¬áá·áºáááºáááº",
"pt-login-button": "á¡áá±á¬áá·áºáááºáááº",
"pt-login-continue-button": "áááºááẠáááºáá±á¬ááºáá«",
@@ -752,7 +752,7 @@
"prefs-memberingroups": "{{PLURAL:$1|á¡á¯ááºá
á¯|á¡á¯ááºá
á¯áá»á¬á¸}}á {{GENDER:$2|á¡áá½á²á·áááº}}",
"prefs-registration": "áá¾ááºáá¯á¶áááºááá·áº á¡áá»ááẠ-",
"yourrealname": "áá¬áááºáááºá¸ -",
- "yourlanguage": "áá¬áá¬á
áá¬á¸ -",
+ "yourlanguage": "áá¬áá¬á
áá¬á¸:",
"yournick": "áááºáá¾ááºá¡áá
Ạ-",
"badsig": "ááá¬á¸ááááºááá·áº áááºáá¾ááºá¡áá¼ááºá¸á\nHTML tags ááᯠá
á
áºáá±á¸áá«á",
"badsiglength": "ááá·áºáááºáá¾ááºááẠáá¾ááºáá½ááºá¸áá±áá«áááºá\náááºá¸ááẠá
á¬áá¯á¶á¸ {{PLURAL:$1|áá¯á¶á¸|áá¯á¶á¸}}ááẠááá¾ááºááá«á",
@@ -1466,7 +1466,7 @@
"allmessages-filter-unmodified": "ááá¼á¯áá¼ááºáá¬á¸áá±á¬",
"allmessages-filter-all": "á¡á¬á¸áá¯á¶á¸",
"allmessages-filter-modified": "áá¼á¯áá¼ááºáá¬á¸áá±á¬",
- "allmessages-language": "áá¬áᬠ-",
+ "allmessages-language": "áá¬áá¬á
áá¬á¸:",
"allmessages-filter-submit": "áá½á¬á¸",
"thumbnail-more": "áá¯á¶áá¼á®á¸áá»á²á·áááº",
"filemissing": "ááá¯ááºáá»á±á¬ááºáá±áááº",
diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json
index 7c609948ab..ed2acac903 100644
--- a/languages/i18n/nb.json
+++ b/languages/i18n/nb.json
@@ -1360,7 +1360,7 @@
"rcfilters-empty-filter": "Ingen aktive filtre. Alle bidrag vises.",
"rcfilters-filterlist-title": "Filtre",
"rcfilters-filterlist-whatsthis": "Hvordan virker dette?",
- "rcfilters-filterlist-feedbacklink": "Gi tilbakemelding på de nye (beta)filtrene",
+ "rcfilters-filterlist-feedbacklink": "Gi tilbakemelding på disse (nye) filterverktøyene",
"rcfilters-highlightbutton-title": "Marker resultater",
"rcfilters-highlightmenu-title": "Velg en farge",
"rcfilters-highlightmenu-help": "Velg en farge for å merke denne egenskapen",
@@ -1441,6 +1441,8 @@
"rcfilters-liveupdates-button-title-on": "Slå av live-oppdateringer",
"rcfilters-liveupdates-button-title-off": "Vis nye endringer når de skjer",
"rcfilters-watchlist-markseen-button": "Merk alle endringer som sett.",
+ "rcfilters-watchlist-edit-watchlist-button": "Rediger listen over sider du overvåker",
+ "rcfilters-watchlist-showupdated": "Endringer til sider du ikke har besøkt siden endringene ble gjort vises med fet skrift.",
"rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden $3, $4 (frem til $1 ).",
"rclistfromreset": "Nullstill datovalg",
"rclistfrom": "Vis nye endringer fra og med $3 $2",
@@ -2354,6 +2356,7 @@
"sp-contributions-newonly": "Bare vis bidrag som er sideopprettinger",
"sp-contributions-hideminor": "Skjul mindre endringer",
"sp-contributions-submit": "Søk",
+ "sp-contributions-outofrange": "Kan ikke vise resultater. Det gitte IP-intervallet er større enn CIDR-grensen på /$1.",
"whatlinkshere": "Det som lenker hit",
"whatlinkshere-title": "Sider som lenker til «$1»",
"whatlinkshere-page": "Side:",
diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json
index 3bf9a31211..73d0df803b 100644
--- a/languages/i18n/nl.json
+++ b/languages/i18n/nl.json
@@ -813,6 +813,7 @@
"parser-template-loop-warning": "Er is een kringloop in sjablonen geconstateerd: [[$1]]",
"template-loop-category": "Pagina's met sjablonen die zichzelf insluiten",
"template-loop-category-desc": "De pagina bevat een sjabloon dat zichzelf insluit, bijvoorbeeld een sjabloon dat zichzelf recursief aanroept.",
+ "template-loop-warning": "Waarschuwing: Deze pagina roept [[:$1]] aan, wat een sjabloon kringloop veroorzaakt (een oneindige recursieve aanroep).",
"parser-template-recursion-depth-warning": "De recursiediepte voor sjablonen is overschreden ($1)",
"language-converter-depth-warning": "De dieptelimiet voor de taalconvertor is overschreden ($1)",
"node-count-exceeded-category": "Pagina's waar het maximaal aantal nodes is overschreden",
@@ -1475,6 +1476,7 @@
"rcfilters-liveupdates-button-title-off": "Toon nieuwe wijzigingen op het moment dat ze gebeuren",
"rcfilters-watchlist-markseen-button": "Alle wijzigingen markeren als bezocht.",
"rcfilters-watchlist-edit-watchlist-button": "Bewerk uw volglijst",
+ "rcfilters-preference-label": "Verberg de verbeterde versie van Recente Wijzigingen",
"rcnotefrom": "Wijzigingen sinds $3 om $4 (maximaal $1 {{PLURAL:$1|wijziging|wijzigingen}}).",
"rclistfromreset": "Datum selectie opnieuw instellen",
"rclistfrom": "Wijzigingen bekijken vanaf $3 $2",
diff --git a/languages/i18n/nn.json b/languages/i18n/nn.json
index c33f9540aa..7641ccad1f 100644
--- a/languages/i18n/nn.json
+++ b/languages/i18n/nn.json
@@ -708,7 +708,7 @@
"last": "førre",
"page_first": "fyrste",
"page_last": "siste",
- "histlegend": "Merk av for dei versjonane du vil samanlikne og trykk [Enter] eller klikk på knappen nedst på sida. Forklaring: (no) = skilnad frå den noverande versjonen, (førre) = skilnad frå den førre versjonen, s = småplukk",
+ "histlegend": "Merk av for dei versjonane du vil samanlikne og trykk [Enter] eller klikk på knappen nedst på sida. \nForklaring: ({{int:cur}}) = skilnad frå den noverande versjonen, ({{int:last}}) = skilnad frå den førre versjonen, {{int:minoreditletter}} = småplukk",
"history-fieldset-title": "Søk etter versjonar",
"history-show-deleted": "Berre sletta versjonar",
"histfirst": "eldste",
diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json
index 8fcd2b7655..f18a32f560 100644
--- a/languages/i18n/pl.json
+++ b/languages/i18n/pl.json
@@ -89,7 +89,8 @@
"Kirsan",
"Krottyianock",
"Mazab IZW",
- "InternerowyGoÅÄ
b"
+ "InternerowyGoÅÄ
b",
+ "Wojtas"
]
},
"tog-underline": "PodkreÅlenie linków:",
@@ -1481,6 +1482,7 @@
"rcfilters-liveupdates-button-title-off": "WyÅwietlaj nowe zmiany zaraz po tym jak nastÄ
piÄ
",
"rcfilters-watchlist-markseen-button": "Oznacz wszystkie zmiany jako obejrzane",
"rcfilters-watchlist-edit-watchlist-button": "Edytuj swojÄ
listÄ obserwowanych stron",
+ "rcfilters-preference-label": "WyÅÄ
cz ulepszenia strony Ostatnie zmiany",
"rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianÄ|pokazano zmiany}} {{PLURAL:$5|wykonanÄ
|wykonane}} po $3, $4 (nie wiÄcej niż '''$1''' pozycji).",
"rclistfromreset": "Zresetuj wybór daty",
"rclistfrom": "Pokaż nowe zmiany od $3 $2",
@@ -3626,7 +3628,7 @@
"htmlform-int-toolow": "Podana wartoÅÄ jest poniżej dopuszczalnego minimum $1",
"htmlform-int-toohigh": "Podana wartoÅÄ jest powyżej dopuszczalnego maximum $1",
"htmlform-required": "Podanie tej wartoÅci jest wymagane",
- "htmlform-submit": "WyÅlij",
+ "htmlform-submit": "PrzeÅlij",
"htmlform-reset": "Cofnij zmiany",
"htmlform-selectorother-other": "Inne",
"htmlform-no": "Nie",
diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json
index e6f323efe8..6749e350f7 100644
--- a/languages/i18n/pt.json
+++ b/languages/i18n/pt.json
@@ -801,6 +801,7 @@
"parser-template-loop-warning": "Ciclo de predefinições detetado: [[$1]]",
"template-loop-category": "Páginas com ciclos infinitos de predefinições",
"template-loop-category-desc": "Esta página contém um ciclo infinito de predefinições, isto é, uma predefinição que se chama a si própria recursivamente.",
+ "template-loop-warning": "Aviso: Esta página chama [[:$1]] o que causa um ciclo infinito de predefinições (uma chamada recursiva sem término).",
"parser-template-recursion-depth-warning": "Foi excedido o limite da profundidade de recursividade nas predefinições ($1)",
"language-converter-depth-warning": "O limite de profundidade do conversor de idiomas excedeu a ($1)",
"node-count-exceeded-category": "Páginas em que o total de nós é excedido",
@@ -1465,6 +1466,8 @@
"rcfilters-watchlist-markseen-button": "Marcar todas as modificações como já vistas",
"rcfilters-watchlist-edit-watchlist-button": "Editar a sua lista de páginas vigiadas",
"rcfilters-watchlist-showupdated": "As mudanças das páginas que ainda não visitou após terem sido alteradas aparecem a negrito , com marcadores sólidos.",
+ "rcfilters-preference-label": "Ocultar a versão melhorada das mudanças recentes",
+ "rcfilters-preference-help": "Reverte o redesenho da interface de 2017 e todas as ferramentas adicionadas na altura e desde então.",
"rcnotefrom": "Abaixo {{PLURAL:$5|está a mudança|estão as mudanças}} desde $2 (mostradas até $1 ).",
"rclistfromreset": "Reiniciar a seleção da data",
"rclistfrom": "Mostrar as novas mudanças a partir das $2 de $3",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index 9d2e77dcba..208c7c3370 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -1254,6 +1254,7 @@
"timezoneregion-indian": "Used in \"Time zone\" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], \"date and time\" tab.\n{{Related|Timezoneregion}}",
"timezoneregion-pacific": "Used in \"Time zone\" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], \"date and time\" tab.\n{{Related|Timezoneregion}}",
"allowemail": "Used in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.",
+ "email-blacklist-label": "Used in [[Special:Preferences]] > {{int:prefs-prohibit}} > {{int:email}}.",
"prefs-searchoptions": "{{Identical|Search}}",
"prefs-namespaces": "Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferences]]\n{{Identical|Namespace}}",
"default": "{{Identical|Default}}",
diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json
index 5ace4bf1c0..d8de413c8d 100644
--- a/languages/i18n/ru.json
+++ b/languages/i18n/ru.json
@@ -114,7 +114,8 @@
"MustangDSG",
"Valeri'swiki",
"Marat-avgust",
- "Ernác"
+ "Ernác",
+ "Wertuose"
]
},
"tog-underline": "ÐодÑÑÑкивание ÑÑÑлок:",
@@ -848,6 +849,7 @@
"parser-template-loop-warning": "ÐбнаÑÑжена пеÑÐ»Ñ Ð² ÑаблонаÑ
: [[$1]]",
"template-loop-category": "СÑÑаниÑÑ Ñ Ð¿ÐµÑлÑми в ÑаблонаÑ
",
"template-loop-category-desc": "ÐÑа ÑÑÑаниÑа ÑодеÑÐ¶Ð¸Ñ Ð¿ÐµÑÐ»Ñ Ð² Ñаблоне, Ñ.е. Ñаблон, коÑоÑÑй ÑекÑÑÑивно вÑзÑÐ²Ð°ÐµÑ Ñам ÑебÑ.",
+ "template-loop-warning": "ÐÑедÑпÑеждение: strong> ÐÑа ÑÑÑаниÑа вÑзÑÐ²Ð°ÐµÑ [[:$1]], коÑоÑÑй пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñикла в Ñаблоне (беÑконеÑнÑй ÑекÑÑÑивнÑй вÑзов).",
"parser-template-recursion-depth-warning": "ÐÑевÑÑен пÑедел глÑÐ±Ð¸Ð½Ñ ÑекÑÑÑии Ñаблона ($1)",
"language-converter-depth-warning": "ÐÑевÑÑен пÑедел глÑÐ±Ð¸Ð½Ñ Ð¿ÑеобÑазоваÑÐµÐ»Ñ ÑзÑков ($1)",
"node-count-exceeded-category": "СÑÑаниÑÑ, на коÑоÑÑÑ
пÑевÑÑено ÑиÑло Ñзлов",
@@ -1394,7 +1396,7 @@
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "ÐоказаÑÑ",
"rcfilters-tag-remove": "УдалиÑÑ '$1'",
- "rcfilters-legend-heading": "ÐÑÑÑÑ
аÑÑÑÑÐ»Ð°Ð½Ñ ÑизмеÑи: ",
+ "rcfilters-legend-heading": "СпиÑок ÑокÑаÑений: ",
"rcfilters-other-review-tools": "ÐÑÑгие инÑÑÑÑменÑÑ Ð¿ÑовеÑки ",
"rcfilters-group-results-by-page": "ÐÑÑппиÑоваÑÑ ÑезÑлÑÑаÑÑ Ð¿Ð¾ ÑÑÑаниÑе",
"rcfilters-grouping-title": "ÐÑÑппиÑовка",
@@ -1504,7 +1506,7 @@
"rcfilters-view-advanced-filters-label": "РаÑÑиÑеннÑе ÑилÑÑÑÑ",
"rcfilters-view-tags": "ТегиÑованнÑе пÑавки",
"rcfilters-view-namespaces-tooltip": "РезÑлÑÑаÑÑ ÑилÑÑÑа по пÑоÑÑÑанÑÑвам имÑн",
- "rcfilters-view-tags-tooltip": "РезÑлÑÑаÑÑ ÑилÑÑÑа, иÑполÑзÑÑÑего меÑки пÑавок",
+ "rcfilters-view-tags-tooltip": "ФилÑÑÑоваÑÑ ÑезÑлÑÑаÑÑ, иÑполÑзÑÑ Ð¼ÐµÑки пÑавок",
"rcfilters-view-return-to-default-tooltip": "ÐеÑнÑÑÑÑÑ Ð² главное Ð¼ÐµÐ½Ñ ÑилÑÑÑов",
"rcfilters-liveupdates-button": "ÐбновлÑÑÑ Ð°Ð²ÑомаÑиÑеÑки",
"rcfilters-liveupdates-button-title-on": "ÐÑклÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкие обновлениÑ",
@@ -1512,6 +1514,8 @@
"rcfilters-watchlist-markseen-button": "ÐÑмеÑиÑÑ Ð²Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ°Ðº пÑоÑмоÑÑеннÑе",
"rcfilters-watchlist-edit-watchlist-button": "РедакÑиÑоваÑÑ Ð²Ð°Ñ ÑпиÑок пÑоÑмоÑÑеннÑÑ
ÑÑÑаниÑ",
"rcfilters-watchlist-showupdated": "ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑаниÑ, коÑоÑÑе Ð²Ñ Ð½Ðµ поÑеÑали Ñ Ñого моменÑа, как они изменилиÑÑ, вÑÐ´ÐµÐ»ÐµÐ½Ñ Ð¶Ð¸ÑнÑм и оÑмеÑÐµÐ½Ñ Ð¿Ð¾Ð»Ð½Ñм маÑкеÑом.",
+ "rcfilters-preference-label": "СкÑÑÑÑ ÑлÑÑÑеннÑÑ Ð²ÐµÑÑÐ¸Ñ ÐоÑледниÑ
изменений",
+ "rcfilters-preference-help": "ÐÑкаÑÑÐ²Ð°ÐµÑ Ñедизайн инÑеÑÑейÑа 2017 года и вÑе инÑÑÑÑменÑÑ, добавленнÑе Ñ ÑеÑ
поÑ.",
"rcnotefrom": "Ðиже {{PLURAL:$5|Ñказано изменение|пеÑеÑиÑÐ»ÐµÐ½Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ}} Ñ $3, $4 (показано не более $1 ).",
"rclistfromreset": "СбÑоÑиÑÑ Ð²ÑÐ±Ð¾Ñ Ð´Ð°ÑÑ",
"rclistfrom": "ÐоказаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ $3 $2.",
diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json
index 99a793b416..bc9b0ce327 100644
--- a/languages/i18n/sl.json
+++ b/languages/i18n/sl.json
@@ -742,6 +742,7 @@
"parser-template-loop-warning": "V predlogi je bila odkrita zanka: [[$1]]",
"template-loop-category": "Strani z zankami predlog",
"template-loop-category-desc": "Stran vsebuje zanko predloge, tj. predlogo, ki rekurzivno kliÄe sama sebe.",
+ "template-loop-warning": "Opozorilo: Ta stran kliÄe [[:$1]], kar povzroÄi zanko predloge (neskonÄni rekurzivni klic).",
"parser-template-recursion-depth-warning": "PrekoraÄena globina rekurzije predlog ($1)",
"language-converter-depth-warning": "PrekoraÄena globina pretvorbe jezikov ($1)",
"node-count-exceeded-category": "Strani s prekoraÄenim Å¡tevilom vozliÅ¡Ä",
@@ -1406,6 +1407,8 @@
"rcfilters-watchlist-markseen-button": "OznaÄi vse spremembe kot pregledane",
"rcfilters-watchlist-edit-watchlist-button": "Uredite svoj seznam nadzorovanih strani",
"rcfilters-watchlist-showupdated": "Spremembe strani, ki jih niste obiskali od zadnje spremembe, so prikazane krepko , z moÄnimi oznakami.",
+ "rcfilters-preference-label": "Skrij izboljÅ¡ano razliÄico Zadnjih sprememb",
+ "rcfilters-preference-help": "Povrne preoblikovanje vmesnika leta 2017 in vsa takrat in od takrat dodana orodja.",
"rcnotefrom": "{{PLURAL:$5|Navedena je sprememba|Navedeni sta spremembi|Navedene so spremembe}} od $3 $4 dalje (prikazujem jih do $1 ).",
"rclistfromreset": "Ponastavi izbiro datuma",
"rclistfrom": "Prikaži spremembe od $3 $2 naprej",
diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json
index 69e3252b64..c933046080 100644
--- a/languages/i18n/sr-ec.json
+++ b/languages/i18n/sr-ec.json
@@ -707,7 +707,7 @@
"permissionserrorstext": "ÐемаÑе овлаÑÑеÑе за Ð¾Ð²Ñ ÑадÑÑ Ð¸Ð· {{PLURAL:$1|1=ÑледеÑег|ÑледеÑиÑ
}} Ñазлога:",
"permissionserrorstext-withaction": "ÐемаÑе Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ Ð·Ð° $2 из {{PLURAL:$1|ÑледеÑег|ÑледеÑиÑ
}} Ñазлога:",
"recreate-moveddeleted-warn": "УпозоÑеÑе: поново пÑавиÑе ÑÑÑаниÑÑ ÐºÐ¾Ñа Ñе пÑеÑÑ
одно обÑиÑана. \n\nРазмоÑÑиÑе да ли Ñе пÑикладно да наÑÑавиÑе Ñ ÑÑеÑиваÑем ове ÑÑÑаниÑе.\nÐвде Ñе наведена иÑÑоÑиÑа бÑиÑаÑа и пÑемеÑÑаÑа Ñ Ð¾Ð±ÑазложеÑем:",
- "moveddeleted-notice": "Ðва ÑÑÑаниÑа Ñе обÑиÑана.\nÐÑÑоÑиÑа Ñеног бÑиÑаÑа и пÑемеÑÑаÑа налази Ñе иÑпод:",
+ "moveddeleted-notice": "Ðва ÑÑÑаниÑа Ñе обÑиÑана.\nÐÑÑоÑиÑа Ñеног бÑиÑаÑа, заÑÑиÑе и пÑемеÑÑаÑа налази Ñе иÑпод:",
"moveddeleted-notice-recent": "Ðао нам Ñе, ова ÑÑÑаниÑа Ñе недавно обÑиÑана (Ñ Ð¿Ð¾ÑледÑиÑ
24 ÑаÑа).\nÐвде Ñе наведена иÑÑоÑиÑа бÑиÑаÑа и пÑемеÑÑаÑа Ñ Ð¾Ð±ÑазложеÑем.",
"log-fulllog": "ÐÐ¾Ð³Ð»ÐµÐ´Ð°Ñ ÑÐµÐ»Ñ Ð¸ÑÑоÑиÑÑ",
"edit-hook-aborted": "ÐÐ·Ð¼ÐµÐ½Ñ Ñе пÑекинÑла кÑка.\nÐиÑе даÑо никакво обÑазложеÑе.",
@@ -3675,6 +3675,7 @@
"mw-widgets-mediasearch-noresults": "Ðема ÑезÑлÑаÑа.",
"mw-widgets-titleinput-description-new-page": "ÑÑÑаниÑа ÑÐ¾Ñ Ñвек не поÑÑоÑи",
"mw-widgets-titleinput-description-redirect": "пÑеÑÑмеÑава на $1",
+ "mw-widgets-usersmultiselect-placeholder": "ÐÐ¾Ð´Ð°Ñ ÑоÑ...",
"date-range-from": "Ðд даÑÑма:",
"date-range-to": "Ðо даÑÑма:",
"randomrootpage": "СлÑÑаÑна коÑенÑка ÑÑÑаниÑа",
diff --git a/languages/i18n/su.json b/languages/i18n/su.json
index 231f0ce1d6..a400895e79 100644
--- a/languages/i18n/su.json
+++ b/languages/i18n/su.json
@@ -316,13 +316,13 @@
"internalerror": "Kasalahan internal",
"internalerror_info": "Kasalahan internal: $1",
"internalerror-fatal-exception": "Mahiwal dina ketikan \"$1\"",
- "filecopyerror": "Teu bisa nyalin koropak \"$1\" ka \"$2\".",
- "filerenameerror": "Teu bisa ngaganti ngaran koropak \"$1\" jadi \"$2\".",
- "filedeleteerror": "Teu bisa ngahapus koropak \"$1\".",
+ "filecopyerror": "Teu bisa néplak berkas \"$1\" ka \"$2\".",
+ "filerenameerror": "Teu bisa ngarobah ngaran berkas \"$1\" jadi \"$2\".",
+ "filedeleteerror": "Teu bisa mupus berkas \"$1\".",
"directorycreateerror": "Henteu bisa nyieun diréktori \"$1\".",
"directoryreadonlyerror": "Diréktori \"$1\" ukur-baca.",
"directorynotreadableerror": "Diréktori \"$1\" henteu bisa dibaca.",
- "filenotfound": "Teu bisa manggihan koropak \"$1\".",
+ "filenotfound": "Teu bisa manggihan berkas \"$1\".",
"unexpected": "Peunteun di luar hontalan: \"$1\"=\"$2\".",
"formerror": "Kasalahan: teu bisa ngirim formulir",
"badarticleerror": "Peta ieu teu bisa dipigawé na kaca ieu.",
@@ -983,11 +983,11 @@
"timezoneregion-europe": "Ãropah",
"timezoneregion-indian": "Samudra Indonésia",
"timezoneregion-pacific": "Samudra Pasifik",
- "allowemail": "Buka koropak pikeun nampa surélék ti nu séjén",
+ "allowemail": "Buka berkas pikeun nampa surélék ti nu séjén",
"prefs-searchoptions": "Paluruh",
"prefs-namespaces": "Ngaranspasi",
"default": "ti dituna",
- "prefs-files": "Koropak",
+ "prefs-files": "Berkas",
"prefs-custom-css": "CSS sakahayang",
"prefs-custom-js": "JavaScript sakahayang",
"prefs-common-css-js": "CSS/JavaScript dipaké pikeun sakabéh kulit:",
@@ -1051,6 +1051,8 @@
"userrights-expiry": "Kadaluwarsa:",
"userrights-expiry-existing": "Waktu kadaluwarsa kiwari: $3, $2",
"userrights-expiry-othertime": "Séjén waktu:",
+ "userrights-invalid-expiry": "Waktu kadaluwarsa pikeun gorombolan \"$1\" teu sah.",
+ "userrights-expiry-in-past": "Waktu kadaluwarsa pikeun gorombolan \"$1\" geus kaliwat berlalu.",
"group": "Gorombolan:",
"group-user": "Pamaké",
"group-autoconfirmed": "Pamaké anu otomatis dikonfirmasi",
@@ -1076,6 +1078,7 @@
"right-createpage": "Nyieun kaca anyar (nu lain kaca obrolan)",
"right-createtalk": "Nyieun kaca obrolan",
"right-createaccount": "Nyieun akun anyar",
+ "right-autocreateaccount": "Otomatis asup log ku akun pamaké luar",
"right-minoredit": "Nandaan éditan minor",
"right-move": "Mindahkeun kaca",
"right-move-subpages": "Pindahkeun kaca katut sakabéh subkacana",
@@ -1084,7 +1087,7 @@
"right-movefile": "Mindahkeun berkas",
"right-suppressredirect": "Henteu nyieun hiji alihan ti ngaran lila sabot mindahkeun kaca",
"right-upload": "Unjal berkas",
- "right-reupload": "Nimpah koropak nu geus aya",
+ "right-reupload": "Ngalandih berkas nu geus aya",
"right-reupload-own": "Nimpah koropak nu geus aya nu dimuat ku sorangan",
"right-reupload-shared": "Nampik gambar-gambar dina média lokal babarengan",
"right-upload_by_url": "Unjal berkas tina alamat URL",
@@ -1111,6 +1114,7 @@
"right-unblockself": "buka peungpeuk sorangan",
"right-protect": "Ngarobah hambalan protéksi jeung édit kaca anu dikonci",
"right-editprotected": "Edit kaca anu dikonci salaku \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "Ãdit kaca nu ditantayungan minangka \"{{int:protect-level-autoconfirmed}}\"",
"right-editcontentmodel": "Ãdit modél kontén kaca",
"right-editinterface": "Ãdit antarbenget pamaké",
"right-editusercss": "Ãdit berkas CSS pamaké séjén",
@@ -1118,9 +1122,11 @@
"right-editmyusercss": "Ãdit berkas CSS pamaké anjeun",
"right-editmyuserjs": "Ãdit berkas JavaScript pamaké anjeun",
"right-viewmywatchlist": "Tempo awaskeuneun anjeun",
+ "right-editmywatchlist": "Ãdit daptar awaskeuneun anjeung. Masih aya cara nambahkeun kaca tanpa kudu mibanda ieu hak.",
"right-viewmyprivateinfo": "Tempo data pribadi anjeun (alamat surélék, ngaran asli)",
"right-editmyprivateinfo": "Robah data pribadi anjeun (alamat surélék, ngaran asli)",
"right-editmyoptions": "Robah préferénsi anjeun",
+ "right-rollback": "Geuwat malikkeun éditan-éditan pamaké panungtung nu ngédit kaca tinangtu",
"right-markbotedits": "Nandaan pamalikan révisi minangka éditan bot",
"right-noratelimit": "Teu dipangaruhan ku wawatesan jumlah éditan",
"right-import": "Ngimpor kaca ti wiki séjén",
@@ -1190,7 +1196,7 @@
"action-move-categorypages": "pindahkeun kaca kategori",
"action-movefile": "mindahkeun ieu berkas",
"action-upload": "ngamuat ieu berkas",
- "action-reupload": "nimpah berkas nu geus aya ieu",
+ "action-reupload": "ngalandih berkas nu geus aya",
"action-reupload-shared": "nimpah ier berkas dina gudang sadaya",
"action-upload_by_url": "ngamuat ieu berkas ti URL",
"action-writeapi": "maké API",
@@ -1224,6 +1230,7 @@
"action-editcontentmodel": "ngédit modél kontén hiji kaca",
"action-managechangetags": "jieun sarta pareuman tag",
"action-applychangetags": "larapkeun tag bareng jeung parobahan anjeun",
+ "action-changetags": "nambahan jeung mupus tag sakahanyar dina révisi individu jeung éntri log",
"action-deletechangetags": "pupus tag tina basis data",
"action-purge": "hapus sindangan ieu kaca",
"nchanges": "$1 {{PLURAL:$1|parobahan|parobahan}}",
@@ -1258,6 +1265,7 @@
"rcfilters-highlighted-filters-list": "Disorot: $1",
"rcfilters-quickfilters": "Saringan kasimpen",
"rcfilters-quickfilters-placeholder-title": "Can aya tutumbu kasimpen",
+ "rcfilters-quickfilters-placeholder-description": "Pikeun nyimpen pangaturan saringan jeung makéna deui, klik ikon ciciri kaca di aréa Panyaringan Aktif, di handap.",
"rcfilters-savedqueries-defaultlabel": "Saringan kasimpen",
"rcfilters-savedqueries-rename": "Robah ngaran",
"rcfilters-savedqueries-setdefault": "Atur minangka baku",
@@ -1277,11 +1285,12 @@
"rcfilters-empty-filter": "Euweuh filter aktif. Sakumna kontribusi ditémbongkeun.",
"rcfilters-filterlist-title": "Saringan",
"rcfilters-filterlist-whatsthis": "Kumaha bet bisa kieu?",
- "rcfilters-filterlist-feedbacklink": "Béré eupan balik pikeun saringan uji coba anyar",
+ "rcfilters-filterlist-feedbacklink": "Béjaan kami kedalan anjeun ngeunaan ieu alat panyaringan (anyar)",
"rcfilters-highlightbutton-title": "Hasil sorotan",
"rcfilters-highlightmenu-title": "Pilih warna",
"rcfilters-highlightmenu-help": "Pilih warna pikeun nyorot ieu properti",
"rcfilters-filterlist-noresults": "Taya saringan nu kapanggih",
+ "rcfilters-noresults-conflict": "Hasil teu kapanggih lantaran kritéria pamaluruhanna pajiin-jiin",
"rcfilters-filtergroup-authorship": "Kontribusi kapangarangan",
"rcfilters-filter-editsbyself-label": "Ãditan meunang anjeun",
"rcfilters-filter-editsbyself-description": "Kontribusi anjeun.",
@@ -1329,6 +1338,7 @@
"rcfilters-filter-newpages-label": "Panyieunan kaca",
"rcfilters-filter-newpages-description": "Ãditan nu nyieun kaca anyar.",
"rcfilters-filter-categorization-label": "Parobahan kategori",
+ "rcfilters-filter-categorization-description": "Rékaman kaca nu geus ditambahkeun atawa dipupus tina kategori.",
"rcfilters-filter-logactions-label": "Tarékah kacatet",
"rcfilters-filtergroup-lastRevision": "Révisi panganyarna",
"rcfilters-filter-lastrevision-label": "Révisi panganyarna",
@@ -1349,6 +1359,7 @@
"rcfilters-liveupdates-button-title-off": "Témbongkeun parobahan anyar nalika éta parobahan prung",
"rcfilters-watchlist-markseen-button": "Tandaan sakumna parobahan minangka katémbong",
"rcfilters-watchlist-edit-watchlist-button": "Ãdit daptar kaca awaskeuneun anjeun",
+ "rcfilters-preference-label": "Samunikeun vérsi Anyar Robah nu geus diropéa",
"rcnotefrom": "Di handap ieu {{PLURAL:$5|parobahan}} ti $3, $4 (nepi ka $1 ditémbongkeun).",
"rclistfromreset": "Rését pilihan kaping",
"rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
@@ -1413,8 +1424,8 @@
"upload-preferred": "Tipeu koropak nu dianjurkeun: $1.",
"upload-prohibited": "{{PLURAL:$2|Jinis}} berkas nu dilarang: $1.",
"uploadlogpage": "Log unggahan",
- "uploadlogpagetext": "Di handap mangrupa daptar muatan koropak nu panganyarna. Titimangsa nu katémbong dumasar titimangsa server.",
- "filename": "Ngaran koropak",
+ "uploadlogpagetext": "Di handap téh daptar unjalan berkas panganyarna. \nTémbong [[Special:NewFiles|galéri berkas anyar]] pikeun pidangan visual.",
+ "filename": "Ngaran berkas",
"filedesc": "Ringkesna",
"fileuploadsummary": "Ringkesan:",
"filereuploadsummary": "Parobahan berkas:",
@@ -1422,8 +1433,8 @@
"filesource": "Sumber:",
"ignorewarning": "Ulah diwaro, simpen baé koropakna.",
"ignorewarnings": "Tong diwaro panginget naon baé",
- "minlength1": "Ngaran koropak sahanteuna kudu diwangun ku hiji aksara.",
- "illegalfilename": "Ngaran koropak \"$1\" ngandung aksara nu teu diwenangkeun pikeun judul kaca. Mangga gentos ngaranna tur cobi muatkeun deui.",
+ "minlength1": "Ngaran koropak sahenteuna ngandung sahurup.",
+ "illegalfilename": "Ngaran berkas \"$1\" ngandung aksara nu teu diwenangkeun pikeun judul kaca. Mangga ganti ngaranna tur coba unjal deui.",
"filename-toolong": "Ngaran berkas teu meunang leuwih ti 240 bit.",
"badfilename": "Ngaran gambar geus dirobah jadi \"$1\".",
"filetype-mime-mismatch": "Ãksténsi berkas \".$1\" teu luyu jeung tipeu MIME anu kadetéksi ti berkas ($2).",
@@ -1443,9 +1454,9 @@
"unknown-error": "Aya kasalahan anu teu dikanyahoankeun.",
"tmp-create-error": "Teu bisa nyieun berkas sementara.",
"tmp-write-error": "Ãror nulis berkas sementara.",
- "large-file": "Hadéna mah koropak nu dimuat téh teu leuwih ti $1 bit; ieu koropak gedéna $2 bit.",
- "largefileserver": "Ieu koropak badag teuing, ngaleuwihan wates nu diwenangkeun ku server.",
- "emptyfile": "Koropak nu dimuatkeun ku anjeun jigana kosong. Hal ieu bisa jadi alatan sarupaning ''typo'' na ngaran koropakna. Mangga parios deui yén anjeun leres-leres hoyong ngamuat koropak éta.",
+ "large-file": "Alusna mah ukuran berkas téh teu leuwih ti $1;\nari ieu berkas $2.",
+ "largefileserver": "Ieu berkas leuwih badag tina nu diwenangkeun ku sérver.",
+ "emptyfile": "Berkas nu diunjal ku anjeun jigana mah kosong. Ieu perkara meureun alatan salah ketik dina ngaran berkasna. Pék pastikeun yén anjeun téh bener-bener hayang ngunjal éta berkas.",
"windows-nonascii-filename": "Ieu wiki teu ngarojong ngaran berkas anu maké aksara husus.",
"fileexists": "Berkas nu ngaranna kieu geus aya, mangga parios [[:$1]] mun {{GENDER:|anjeun}} teu yakin rék ngaganti.\n[[$1|thumb]]",
"fileexists-extension": "Geus aya berkas anu ngaranna sarupa: [[$2|thumb]]\n* Ngaran berkas nu dimuat: [[:$1]] \n* Ngaran berkas nu geus aya: [[:$2]] \nPilih ngaran séjén.",
@@ -1455,23 +1466,23 @@
"file-deleted-duplicate": "Berkas anu sarua jeung [[:$1]] geus kungsi dihapus.\nPariksa heula jujutan hapusanana saméméh neruskeun ngamuat deui éta berkas.",
"uploadwarning": "Pépéling ngamuat",
"uploadwarning-text": "Ropéa pedaran berkas di handap terus cobaan deui.",
- "savefile": "Simpen koropak",
+ "savefile": "Simpen berkas",
"uploaddisabled": "Punten, ngamuat ayeuna ditumpurkeun.",
"copyuploaddisabled": "Unggahan dumasar URL ditumpurkeun.",
- "uploaddisabledtext": "Fungsi ngamuat koropak ditumpurkeun.",
- "uploadscripted": "Koropak ieu ngandung kode HTML atawa skrip nu bisa dibaca ngaco ku panyungsi ramat (''web browser'').",
+ "uploaddisabledtext": "Fungsi ngunjal berkas ditumpurkeun.",
+ "uploadscripted": "Ieu berkas ngandung kodeu HTML atawa skrip nu bisa dibaca ngaco ku panyungsi ramat.",
"uploaded-setting-href-svg": "Maké tag \"sét\" pikeun nambahkeun atribut \"href\" kana élemén utama dipeungpeuk.",
"uploadinvalidxml": "XML na berkas nu diunjal teu bisa didadarkeun.",
"uploadvirus": "Koropakna ngandung virus! Katrangan: $1",
- "upload-source": "Koropak sumber",
- "sourcefilename": "Ngaran koropak sumber:",
+ "upload-source": "Berkas sumber",
+ "sourcefilename": "Ngaran berkas sumber:",
"sourceurl": "URL sumber:",
- "destfilename": "Ngaran koropak tujuan:",
- "upload-maxfilesize": "Ukuran koropak panggedéna: $1",
- "upload-description": "Pedaran koropak",
+ "destfilename": "Ngaran berkas tujuan:",
+ "upload-maxfilesize": "Ukuran maksimum berkas: $1",
+ "upload-description": "Pedaran berkas",
"upload-options": "Pilihan muat",
"watchthisupload": "Awaskeun ieu kaca",
- "filewasdeleted": "Ngaran koropak ieu geus di hapus. Anjeun kudu ningali ka $1 sa acan muatkeun koropak deui",
+ "filewasdeleted": "Berkas nu ngaranna kieu pernah diunjal sarta tuluy dipupus. Pék riksa heula $1 saméméh ngunjal éta berkas téh.",
"upload-proto-error": "Salah protokol",
"upload-file-error": "Kasalahan internal",
"upload-misc-error": "Kasalahan muat anu teu kanyahoan",
@@ -1479,6 +1490,7 @@
"upload-http-error": "Aya galat HTTP: $1",
"upload-copy-upload-invalid-domain": "Unjalan téplakan teu sayaga ti ieu domain.",
"upload-foreign-cant-upload": "Ieu wiki teu diatur pikeun ngunjal berkas ka gudang panyindangan asing.",
+ "upload-dialog-disabled": "Unjal berkas maké ieu dialog dipareuman di ieu wiki.",
"upload-dialog-title": "Unjal berkas",
"upload-dialog-button-cancel": "Bolay",
"upload-dialog-button-back": "Balik deui",
@@ -1487,12 +1499,14 @@
"upload-dialog-button-upload": "Unjal",
"upload-form-label-infoform-title": "Wincikan",
"upload-form-label-infoform-name": "Ngaran",
+ "upload-form-label-infoform-name-tooltip": "Judul déskriptif anu unik pikeun berkas, anu bakal miboga fungsi minangka ngaran berkas. Anjeun bisa maké basa basajan kalawan spasi. Ulah ngawuwuhkeun éksténsi berkas",
"upload-form-label-infoform-description": "Pedaran",
"upload-form-label-usage-title": "Pamakéan",
"upload-form-label-usage-filename": "Ngaran berkas",
"upload-form-label-own-work": "Ieu mah karya kuring sorangan",
"upload-form-label-infoform-categories": "Kategori",
"upload-form-label-infoform-date": "Ping",
+ "upload-form-label-not-own-work-local-generic-local": "Sugan anjeun hayang nyoba [[Special:Upload|kaca unjalan baku]].",
"backend-fail-stream": "Teu bisa malidkeun berkas \"$1\"",
"backend-fail-backup": "Teu bisa nyadangkeun berkas \"$1\".",
"backend-fail-notexists": "Berkas $1 euweuh.",
@@ -1530,12 +1544,14 @@
"uploadstash-errclear": "Mersihan berkas nu garagal.",
"uploadstash-refresh": "Nyegerken deui daptar berkas",
"uploadstash-thumbnail": "tempo miniatur",
+ "invalid-chunk-offset": "Opsét potongan teu valid",
"img-auth-accessdenied": "Aksés ditolak",
"img-auth-nofile": "Berkas \"$1\" henteu aya.",
"img-auth-streaming": "Palidan \"$1\".",
"img-auth-noread": "Pamaké teu boga kawenangan maca \"$1\".",
"http-invalid-url": "URL teu bener: $1",
"http-invalid-scheme": "URL kalawan skéma \"$1\" teu dirojong.",
+ "http-request-error": "Pundutan HTTP gagal alatan kasalahan nu teu dipikanyaho.",
"http-read-error": "Kasalahan maca HTTP.",
"http-timed-out": "Pamundutan HTTP béakeun waktu.",
"http-curl-error": "Kasalahan keur nyokot URL: $1",
@@ -1578,13 +1594,13 @@
"filehist-nothumb": "Taya miniatur",
"filehist-user": "Kontributor",
"filehist-dimensions": "Ukuran",
- "filehist-filesize": "Ukuran koropak",
+ "filehist-filesize": "Ukuran berkas",
"filehist-comment": "Kamandang",
"imagelinks": "Pamakéan berkas",
"linkstoimage": "Kaca ieu {{PLURAL:$1|numbu|$1 numbu}} ka gambar ieu :",
"nolinkstoimage": "Teu aya kaca anu nutumbu ka ieu berkas.",
"linkstoimage-redirect": "$1 (pangalihan berkas) $2",
- "sharedupload": "Ieu koropak téh ti $1 nu bisa jadi dipaké ku proyék-proyék lianna.",
+ "sharedupload": "Ieu berkas téh ti $1 jeung meureun dipaké ku proyék-proyék séjén.",
"sharedupload-desc-here": "Ieu berkas asalna ti $1 anu bisa jadi dipaké ku proyék séjén. \nPedaran ti [$2 kaca pedaranana] dipidangkeun di handap.",
"filepage-nofile": "Taya berkas nu ngaranna kieu.",
"filepage-nofile-link": "Taya berkan nu ngaranna kieu, tapi anjeun bisa [$1 ngunjalkeunna].",
@@ -1948,9 +1964,14 @@
"watchlist-options": "Pilihan awaskeuneun",
"watching": "Ngawaskeun...",
"unwatching": "Eureun ngawaskeun...",
+ "watcherrortext": "Aya kasalahan mangsa ngarobah préférénsi daptar awaskeuneun anjeun pikeun \" $1 \".",
"enotif_reset": "Tandaan sadaya kaca nu geus dilongok",
"enotif_impersonal_salutation": "Pamaké {{SITENAME}}",
"enotif_subject_deleted": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dihapus}} ku $2",
+ "enotif_subject_created": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dijieun}} ku $2",
+ "enotif_subject_moved": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dialihkeun}} ku $2",
+ "enotif_subject_restored": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dibalikkeun}} ku $2",
+ "enotif_subject_changed": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dirobah}} ku $2",
"enotif_lastvisited": "Pikeun sakumna parobahan ti saprak jebulan panungtung, tempo $1",
"enotif_lastdiff": "Pikeun nempo parobahan, ilikan $1",
"enotif_anon_editor": "pamaké anonim $1",
@@ -2016,11 +2037,14 @@
"protectedarticle": "ngonci $1",
"modifiedarticleprotection": "hambalan koncian \"[[$1]]\" geus dirobah",
"unprotectedarticle": "muka konci tina \"[[$1]]\"",
+ "movedarticleprotection": "ngalihkeun pangaturan protéksi ti \"[[$2]]\" ka \"[[$1]]\"",
"protectedarticle-comment": "{{GENDER:$2|Nangtayungan}} \"[[$1]]\"",
+ "modifiedarticleprotection-comment": "{{GENDER:$2|Ngarobah tingkat panangtayungan}} pikeun \"[[$1]]\"",
"protect-title": "Ngonci \"$1\"",
"protect-title-notallowed": "Tempo undak panangtayungan ti \"$1\"",
"prot_1movedto2": "mindahkeun [[$1]] ka [[$2]]",
"protect-badnamespace-title": "Ngaranspasi nu teu bisa ditangtayungan",
+ "protect-badnamespace-text": "Kaca dina ieu ngaranspasi teu bisa diprotéksi.",
"protect-norestrictiontypes-title": "Kaca nu teu karaksa",
"protect-legend": "Konfirmasi ngonci",
"protectcomment": "Alesan:",
@@ -2114,6 +2138,7 @@
"year": "Ti taun (jeung saméméhna):",
"sp-contributions-newbies": "Témbongkeun kontribusi ti akun anyar wungkul",
"sp-contributions-newbies-sub": "Pikeun akun anyar",
+ "sp-contributions-newbies-title": "Kontribusi pamaké pikeun akun anyar",
"sp-contributions-blocklog": "log peungpeuk",
"sp-contributions-suppresslog": "kontribusi {{GENDER:$1|pamaké}} nu disamunikeun",
"sp-contributions-deleted": "kontribusi {{GENDER:$1|pamaké}} nu dipupus",
@@ -2165,10 +2190,11 @@
"ipboptions": "2 jam:2 hours,sapoé:1 day,3 poé:3 days,saminggu:1 week,2 minggu:2 weeks,sabulan:1 month,3 bulan:3 months,6 bulan:6 months,sataun:1 year,tanpa wates:infinite",
"ipbhidename": "Sumputkeun ngaran pamaké tina éditan jeung daptar pamaké",
"ipbwatchuser": "Awaskeun kaca pamaké jeung kaca obrolan pamaké ieu",
+ "ipb-change-block": "Peungpeuk deui pamaké kalawan sét konfigurasi ieu",
"ipb-confirm": "Konfirmasi peungpeuk",
"badipaddress": "Alamat IP teu sah",
"blockipsuccesssub": "Meungpeuk geus hasil",
- "blockipsuccesstext": "\"$1\" dipeungpeuk.\n Tempo [[Special:BlockList|daptar peungpeuk IP]] pikeun nempoan deui peungpeuk.",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] geus dipeungpeuk. \nTempo [[Special:BlockList|daptar peungpeukan]] pikeun niténan deui pameungpeukan.",
"ipb-edit-dropdown": "Ãdit alesan meungpeuk",
"ipb-unblock-addr": "Buka peungpeuk $1",
"ipb-unblock": "Nyabut peungpeuk pamaké atawa alamat IP",
@@ -2264,6 +2290,7 @@
"unlockdbsuccesstext": "pangkalan data geus teu dikonci.",
"databaselocked": "Basis data geus kakonci.",
"databasenotlocked": "Gudang data teu kakonci.",
+ "lockedbyandtime": "(ku $1 dina $2 $3)",
"move-page": "Pindahkeun $1",
"move-page-legend": "Pindahkeun kaca",
"movepagetext": "Migunakeun formulir di handap bakal ngaganti ngaran hiji kaca, mindahkeun sadaya jujutanana ka ngaran anyar.\nJudul nu heubeul bakal jadi kaca alihan ka judul nu anyar.\nAnjeun bisa menerkeun alihan nu nujul ka judul asli sacara otomatis.\nMun henteu, pariksa bisi aya [[Special:DoubleRedirects|alihan ganda]] atawa [[Special:BrokenRedirects|buntu]]\nAnjeun tanggel waler pikeun mastikeun yén tumbu-tumbu tetep nujul ka tempat nu sakuduna dituju.\n\nCatet yén kacana '''moal''' pindah mun judul nu anyar geus aya eusian, kajaba mangrupa alihan sarta teu mibanda jujutan.\nIeu ngandung harti yén anjeun bisa ngaganti ngaran hiji kaca balik deui ka nu cikénéh diganti ngaranna mun anjeun nyieun kasalahan, sarta anjeun teu bisa nimpah kaca nu geus aya.\n\n'''AWAS!'''\nIeu parobahan bisa gedé pangaruhna mun dilarapkeun kana kaca anu payu;\nanjeun kudu bener-bener ngarti kana hal ieu.",
@@ -2379,14 +2406,14 @@
"imported-log-entries": "Geus diimpor $1 {{PLURAL:$1|saéntri log|éntri log}}.",
"importfailed": "Ngimpor gagal: $1",
"importunknownsource": "Tipeu sumber impor teu dipikawanoh",
- "importcantopen": "Teu bisa muka koropak impor",
+ "importcantopen": "Teu bisa muka berkas impor",
"importbadinterwiki": "Tutumbu antarwiki awon",
"importsuccess": "Ngimpor geus hasil!",
"importnosources": "Taya wiki ti nu diimpor nu geus dijieun sarta pamuatan jujuta sacara langsung geus di non-aktifkeun.",
- "importnofile": "Euweuh koropak impor nu dimuat.",
- "importuploaderrorsize": "Koropak impor gagal dimuat. Ukuranana ngaleuwihan wates nu diwenangkeun.",
- "importuploaderrorpartial": "Koropak impor gagal dimuat sagemblengna.",
- "importuploaderrortemp": "Koropak impor gagal dimuat. Folder samentarana leungit.",
+ "importnofile": "Euweuh berkas impor nu diunjal.",
+ "importuploaderrorsize": "Unjalan berkas impor gagal. Ukuranna ngaleuwihan wates nu diwenangkeun.",
+ "importuploaderrorpartial": "Unjalan berkas impor gagal.\nNgan sawaréh berkas nu ngahasil diunjal.",
+ "importuploaderrortemp": "Unjalan berkas impor gagal. Folder témporérna leungit.",
"import-parse-failure": "Prosés impor XML teu hasil",
"import-noarticle": "Euweuh kaca imporeun!",
"import-nonewrevisions": "Euweuh révisi nu diimpor (sakum révisi geus aya atawa diliwatan lantaran kasalahan).",
@@ -2400,6 +2427,7 @@
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|sarévisi|révisi}} diimpor ti $2",
"javascripttest": "Nguji JavaScript",
"javascripttest-pagetext-unknownaction": "Tarékah \"$1\" teu dipikanyaho.",
+ "javascripttest-qunit-intro": "Tempo [$1 dokuméntasi pangujian] di mediawiki.org.",
"tooltip-pt-userpage": "Kaca {{GENDER:|pamaké anjeun}}",
"tooltip-pt-anonuserpage": "Kaca pamaké pikeun IP nu ku anjeun keur diédit",
"tooltip-pt-mytalk": "Kaca obrolan {{GENDER:|anjeun}}",
@@ -2487,8 +2515,12 @@
"spamprotectiontext": "Kaca anu rék disimpen dipeungpeuk ku saringan spam.\nSigana mah ieu téh alatan tutumbu ka loka luar anu dibléklis.",
"spamprotectionmatch": "Teks di handap ieu mancing saringan spam kami: $1",
"spambot_username": "Pamersihan spam MediaWiki",
+ "spam_reverting": "Ngabolaykeun ka vérsi panungtung nu teu mibanda tutumbu ka $1",
+ "spam_blanking": "Sakum révisi nu mibanda tutumbu ka $1, kosong",
+ "spam_deleting": "Sakum révisi nu mibanda tutumbu ka $1, pamupusan",
"simpleantispam-label": "Pamariksaan anti-spam.\nAnu ieu ulah dieusian!",
"pageinfo-title": "Ãmbaran pikeun \"$1\"",
+ "pageinfo-not-current": "Hampura, teu mumkin méré ieu informasi ka révisi heubeul.",
"pageinfo-header-basic": "Ãmbaran dasar",
"pageinfo-header-edits": "Jujutan édit",
"pageinfo-header-restrictions": "Protéksi kaca",
@@ -2517,12 +2549,16 @@
"pageinfo-edits": "Jumlah éditan",
"pageinfo-authors": "Jumlah kontributor nu béda",
"pageinfo-recent-edits": "Jumlah éditan kiwari (dina $1 panungtung)",
+ "pageinfo-recent-authors": "Jumlah panulis béda kiwari",
+ "pageinfo-magic-words": "{{PLURAL:$1|Sakecap|Kecap}} ajaib ($1)",
"pageinfo-toolboxlink": "Ãmbaran kaca",
"pageinfo-redirectsto": "Alihkeun ka",
"pageinfo-redirectsto-info": "info",
"pageinfo-contentpage": "Diitung minangka kaca eusi",
"pageinfo-contentpage-yes": "Enya",
+ "pageinfo-protect-cascading": "Panangtayungan ngaruntuy ti dieu",
"pageinfo-protect-cascading-yes": "Enya",
+ "pageinfo-protect-cascading-from": "Panangtayungan mapay ti",
"pageinfo-category-info": "Info kategori",
"pageinfo-category-total": "Jumlah anggahota",
"pageinfo-category-pages": "Jumlah kaca",
@@ -2531,6 +2567,7 @@
"pageinfo-user-id": "ID pamaké",
"markaspatrolleddiff": "Tandaan salaku geus diriksa",
"markaspatrolledtext": "Tandaan artikel ieu salaku geus diriksa",
+ "markaspatrolledtext-file": "Tandaan vérsi berkas minangka kaawas",
"markedaspatrolled": "Tandaan salaku geus diriksa",
"markedaspatrolledtext": "Révisi [[:$1]] nu dipilih geus ditandaan salaku geus diroris.",
"rcpatroldisabled": "Ronda Nu Anyar Robah ditumpurkeun",
@@ -2538,11 +2575,14 @@
"markedaspatrollederror": "Teu bisa nandaan geus dipatroli",
"markedaspatrollederrortext": "Anjeun kudu milih révisi anu rék ditandaan geus diroris.",
"markedaspatrollederror-noautopatrol": "Anjeung teu diwenangkeun nandaan pangriksa ka éditan sorangan.",
+ "markedaspatrollednotify": "Ieu parobahan pikeun $1 geus ditandaan kaawas.",
+ "markedaspatrollederrornotify": "Nandaan minangka kaawas gagal.",
"patrol-log-page": "Log patroli",
"patrol-log-header": "Ieu minangka log pikeun révisi nu geus diroris.",
"log-show-hide-patrol": "$1 log rorisan",
"log-show-hide-tag": "log tag $1",
"confirm-markpatrolled-button": "Heug",
+ "confirm-markpatrolled-top": "Tandaan révisi $3 ti $2 minangka kaawas?",
"deletedrevision": "Révisi heubeul nu dihapus $1",
"filedeleteerror-short": "Ãror nalika ngahapus koropak $1",
"filedeleteerror-long": "Aya kasalahan sawaktu ngahapus koropak:\n\n$1",
@@ -2563,6 +2603,7 @@
"svg-long-error": "Berkas SVG teu sah: $1",
"show-big-image": "Berkas asli",
"show-big-image-preview": "Ukuran ieu pramidang: $1.",
+ "show-big-image-preview-differ": "Ukuran ieu pramidang $3 ti ieu berkas $2: $1",
"show-big-image-other": "{{PLURAL:$2|Resolusi}} lianna: $1.",
"show-big-image-size": "$1 Ã $2 pixel",
"file-info-gif-looped": "nguriling",
@@ -2607,7 +2648,7 @@
"yesterday-at": "Kamari jam $1",
"bad_image_list": "Formatna kieu:\n\nNgan daptar butiran (baris anu dimimitian ku tanda *) anu diitung. \nTutumbu kahiji dina hiji baris dianggap numbu ka berkas anu goréng. \nTutumbu sanggeusna dina baris anu sarua dianggap bener, nyaéta artikel anu midangkeun éta berkas.",
"metadata": "Métadata",
- "metadata-help": "Ieu koropak ngandung émbaran tambahan, nu sigana asalna tina kaméra digital atawa paminday nu dipaké pikeun ngadigitalkeunana. Mun ieu koropak geus dirobah tina bentuk aslina, datana bisa jadi teu bener.",
+ "metadata-help": "Ieu berkas ngandung informasi panambah, mumkin ditambahkeun tina kaméra digital atawa pamindéy nu dipaké pikeun nyieun atawa ngadigitalkeun ieu berkas.\nMun ieu berkas geus diropéa tina wangun aslina, sawatara wincikan meureun baé teu sagemblengna ngarépléksikeun informasi ti ieu berkas nu diropéa téh.",
"metadata-expand": "Témbongkeun wincikan panambah",
"metadata-collapse": "Sumputkeun wincikan panambah",
"metadata-fields": "Widang métadata gambar nu dibéréndélkeun di handap bakal dipidangkeun dina kaca gambar mun tabél métadata disumputkeun.\nNu séjénna bakal disumputkeun sakumaha asalna.\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",
@@ -2747,6 +2788,7 @@
"exif-fixtureidentifier": "Ngaran fikstur",
"exif-locationdest": "Lokasi nu digambarkeun",
"exif-locationdestcode": "Kodeu lokasi nu digambarkeun",
+ "exif-objectcycle": "Sésa waktu éta média dimaksudkeun pikeun",
"exif-contact": "Informasi kontak",
"exif-writer": "Nu nulis",
"exif-languagecode": "Basa",
@@ -2787,8 +2829,12 @@
"exif-originalimageheight": "Jangkung gambar saméméh diteukteuk",
"exif-originalimagewidth": "Lébar gambar saméméh diteukteuk",
"exif-compression-1": "Teu kakompres",
+ "exif-compression-2": "CCITT Group 3 1-Dimensional Modified Huffman RLE",
+ "exif-compression-3": "CCITT Group 3 fax encoding",
+ "exif-compression-4": "CCITT Group 4 fax encoding",
"exif-copyrighted-true": "Mihak cipta",
"exif-copyrighted-false": "Status hak cipta can diatur",
+ "exif-photometricinterpretation-1": "Hideung jeung bodas (Hideung mah 0)",
"exif-unknowndate": "Titimangsa teu kanyahoan",
"exif-orientation-1": "Normal",
"exif-orientation-2": "Dibalikkeun horizontal",
@@ -2814,6 +2860,7 @@
"exif-subjectdistance-value": "$1 méter",
"exif-meteringmode-0": "Duka",
"exif-meteringmode-1": "Rata-rata",
+ "exif-meteringmode-2": "Rarata tengah bobot",
"exif-meteringmode-3": "Spot",
"exif-meteringmode-4": "MultiSpot",
"exif-meteringmode-5": "Pola",
@@ -2838,14 +2885,29 @@
"exif-lightsource-255": "Sumber cahya séjén",
"exif-flash-fired-0": "Lampu kilat teu hurung",
"exif-flash-fired-1": "Buricak hurung",
+ "exif-flash-return-0": "taya fungsi padétéksian strobo balik",
+ "exif-flash-return-2": "lampu strobo balik teu kadétéksi",
+ "exif-flash-return-3": "lampu strobo balik kadétéksi",
+ "exif-flash-mode-1": "lampu kilat diperlukeun",
+ "exif-flash-mode-2": "lampu kilat dipareuman",
"exif-flash-mode-3": "modeu otomatis",
+ "exif-flash-function-1": "Taya fungsi lampu kilat",
+ "exif-flash-redeye-1": "mode réduksi pantulan panon-beureum",
"exif-focalplaneresolutionunit-2": "inci",
"exif-sensingmethod-1": "Teu kadéfinisi",
+ "exif-sensingmethod-2": "Sénsor aréa warna sasiki",
+ "exif-sensingmethod-3": "Sénsor aréa warna dua siki",
+ "exif-sensingmethod-4": "Sénsor aréa warna tilu siki",
+ "exif-sensingmethod-5": "Sénsor aréa warna mapay",
+ "exif-sensingmethod-7": "Sénsor trilinéar",
+ "exif-sensingmethod-8": "Sénsor linéar warna mapay",
+ "exif-filesource-3": "Kaméra digital cicing",
"exif-scenetype-1": "Gambar poto langsung",
"exif-customrendered-0": "Prosés normal",
"exif-customrendered-1": "Prosés biasa",
"exif-exposuremode-0": "Pajanan otomatis",
"exif-exposuremode-1": "Pajanan manual",
+ "exif-exposuremode-2": "Brakét otomatis",
"exif-whitebalance-0": "Kasaimbangan bodas otomatis",
"exif-whitebalance-1": "Kasaimbangan bodas manual",
"exif-scenecapturetype-0": "Baku",
@@ -2853,6 +2915,10 @@
"exif-scenecapturetype-2": "Nangtung (portrait)",
"exif-scenecapturetype-3": "Tetempoan peuting",
"exif-gaincontrol-0": "Kosong",
+ "exif-gaincontrol-1": "Naikkeun fokus landeuh",
+ "exif-gaincontrol-2": "Naikkeun fokus luhur",
+ "exif-gaincontrol-3": "Turunkeun fokus landeuh",
+ "exif-gaincontrol-4": "Turunkeun fokus luhur",
"exif-contrast-0": "Normal",
"exif-contrast-1": "Leuleus",
"exif-contrast-2": "Heuras",
@@ -2873,6 +2939,7 @@
"exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|méter|méter}} luhureun beungeut laut",
"exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|méter|méter}} handapeun beungeut laut",
"exif-gpsstatus-a": "Keur ngukur",
+ "exif-gpsstatus-v": "Interoperabilitas pangukuran",
"exif-gpsmeasuremode-2": "Ukuran 2-diménsi",
"exif-gpsmeasuremode-3": "Ukuran 3-diménsi",
"exif-gpsspeed-k": "Kilométer per jam",
@@ -2894,6 +2961,7 @@
"exif-ycbcrpositioning-1": "Nengah",
"exif-ycbcrpositioning-2": "Atas (co-sited)",
"exif-dc-contributor": "Kontributor",
+ "exif-dc-coverage": "Lingkup témporal atawa spasial média",
"exif-dc-date": "Titimangsa",
"exif-dc-publisher": "Pamedal",
"exif-dc-relation": "Média anu tumali",
@@ -2922,6 +2990,7 @@
"exif-urgency-normal": "Normal ($1)",
"exif-urgency-low": "Landeuh ($1)",
"exif-urgency-high": "Luhur ($1)",
+ "exif-urgency-other": "Prioritas robahluyuan ($1)",
"namespacesall": "kabéh",
"monthsall": "kabéh",
"confirmemail": "Konfirmasi alamat surélék",
@@ -2940,8 +3009,13 @@
"confirmemail_body": "Aya, sigana mah anjeun, ti alamat IP $1,\ngeus ngadaptarkeun akun \"$2\" maké alamat surélék ieu di {{SITENAME}}.\n\nPikeun mastikeun yén ieu akun mémang kagungan, sarta ngaktipkeun fitur surélék di {{SITENAME}}, buka tutumbu di handap ieu dina panyungsi (''browser'') anjeun:\n\n$3\n\nLamun anjeun teu ngadaptarkeun ieu akun, turutkeun ieu tutumbu pikeun ngabolaykeun konfirmasi alamat surélék:\n\n$5\n\nSandi konfirmasi ieu bakal kadaluwarsa dina $4.",
"confirmemail_invalidated": "Konfirmasi alamat surélék dibolaykeun",
"invalidateemail": "Bolaykeun konfirmasi surélék",
+ "notificationemail_subject_changed": "Alamat surélék kadaptar {{SITENAME}} geus diganti",
+ "notificationemail_subject_removed": "Alamat surélék kadaptar {{SITENAME}} geus dipupus",
+ "notificationemail_body_changed": "Hiji jalma, meureun ajeun, ti alamat IP $1,\ngeus ngaganti alamat surélék akun \"$2\" jadi \"$3\" di {{SITENAME}}",
+ "notificationemail_body_removed": "Hiji jalma, meureun anjeun, ti alamat IP $1,\ngeus mupus alamat surélék akun \"$2\" di {{SITENAME}}.\n\nMun ieu lain anjeun, geuwat nepungan administrator situs.",
"scarytranscludedisabled": "[Transklusi interwiki ditumpurkeun]",
"scarytranscludefailed": "[Gagal nyokot citakan $1]",
+ "scarytranscludefailed-httpstatus": "[Nyokot citakan $1 gagal: HTTP $2]",
"scarytranscludetoolong": "[URLna panjang teuing]",
"deletedwhileediting": "'''Awas''': ieu kaca geus dihapus nalika anjeun mitembeyan ngédit!",
"confirmrecreate": "Pamaké [[User:$1|$1]] ([[User talk:$1|ngobrol]]) geus ngahapus artikel ieu nalika anjeun ngédit kalawan alesan:\n: ''$2''\nmangga pastikeun yén anjeun rék nyieun deui artikel ieu.",
@@ -2949,16 +3023,20 @@
"confirm-purge-title": "Hapus sindangan ieu",
"confirm_purge_button": "Heug",
"confirm-purge-top": "Hapus sindangan kaca ieu?",
+ "confirm-purge-bottom": "Mersihkeun kaca bakal sakaligus mupus sindangan jeung midangkeun vérsi kaca kiwari.",
"confirm-watch-button": "Heug",
+ "confirm-watch-top": "Tambahkeun ieu kaca kana awaskeuneun anjeun?",
"confirm-unwatch-button": "Heug",
"confirm-unwatch-top": "Pupus ieu kaca tina aawaseun anjeun?",
"confirm-rollback-button": "Heug",
+ "confirm-rollback-top": "Balikkeun éditan ka ieu kaca?",
"quotation-marks": "\"$1\"",
"imgmultipageprev": "â kaca saacana",
"imgmultipagenext": "kaca salajengna â",
"imgmultigo": "Téang!",
"imgmultigoto": "Jung ka kaca $1",
"img-lang-default": "(basa default)",
+ "img-lang-info": "Jadikeun ieu gambar dina $1. $2",
"img-lang-go": "Jung",
"ascending_abbrev": "naék",
"descending_abbrev": "turun",
@@ -2990,13 +3068,20 @@
"watchlistedit-raw-removed": "{{PLURAL:$1|1 judul geus|$1 judul geus}} dikaluarkeun:",
"watchlistedit-clear-title": "Bersihan aawaseun",
"watchlistedit-clear-legend": "Bersihan aawaseun",
+ "watchlistedit-clear-explain": "Sakum judul bakal dipupus tina daptar awaskeuneun anjeun",
"watchlistedit-clear-titles": "Judul:",
+ "watchlistedit-clear-submit": "Bersihkeun daptar awaskeuneun (Ieu mah permanén!)",
+ "watchlistedit-clear-done": "Daptar awaskeuneun geus bersihkeun.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 judul geus|$1 judul geus}} dipupus:",
+ "watchlistedit-too-many": "Loba teuing kaca nu dipidangkeun di dieu.",
+ "watchlisttools-clear": "Bersihan daptar awaskeuneun",
"watchlisttools-view": "Témbongkeun parobahan nu patali",
"watchlisttools-edit": "Témbongkeun sarta édit béréndélan awaskeuneun",
"watchlisttools-raw": "Robah béréndélan awaskeuneun",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|obrolan]])",
"timezone-local": "Lokal",
"duplicate-defaultsort": "'''Awas''': Konci runtuyan asal \"$2\" ngalindih konci runtuyan asal \"$1\" anu saméméhna.",
+ "duplicate-displaytitle": "Mangkahadé: Midangkeun judul \"$2\" ngalandih judul pidangan \"$1\" saméméhna.",
"version": "Vérsi",
"version-extensions": "Ãksténsi nu diinstal",
"version-skins": "Kalakop nu diinstal",
@@ -3022,9 +3107,13 @@
"version-ext-colheader-description": "Pedaran",
"version-ext-colheader-credits": "Pangarang",
"version-license-title": "Lisénsi pikeun $1",
+ "version-license-not-found": "Taya detil informasi lisénsi pikeun ieu éksténsi.",
"version-credits-title": "Krédit pikeun $1",
+ "version-credits-not-found": "Taya detil informasi krédit pikeun ieu éksténsi.",
+ "version-poweredby-credits": "Ieu wiki dirojong ku '''[https://www.mediawiki.org/ MédiaWiki]''', hak cipta © 2001-$1 $2.",
"version-poweredby-others": "séjénna",
"version-poweredby-translators": "darmamurcaya translatewiki.net",
+ "version-credits-summary": "Kami baris ngangken jalma-jalma di handap kalawan kontribusina ka [[Special:Version|MédiaWiki]].",
"version-software": "Sopwér nu geus diinstal",
"version-software-product": "Produk",
"version-software-version": "Vérsi",
@@ -3037,6 +3126,7 @@
"version-libraries-license": "Lisénsi",
"version-libraries-description": "Pedaran",
"version-libraries-authors": "Pangarang",
+ "redirect": "Alihan dumasar ID berkas, pamaké, kaca, révisi, atawa log",
"redirect-summary": "Ieu kaca husus mindahkeun ka berkas (kalawan ngaran berkasna), kaca (kalawan ID répisi atawa ID kaca), kaca pamaké (kalawan ID pamaké nomerik), atawa éntri log (kalawan ID logna). Pamakéan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], atawa [[{{#Special:Redirect}}/logid/186]].",
"redirect-submit": "Jung",
"redirect-lookup": "Ilikan:",
@@ -3048,7 +3138,8 @@
"redirect-logid": "ID log",
"redirect-not-exists": "Ajén teu kapanggih",
"fileduplicatesearch": "Paluruh gambar duplikat",
- "fileduplicatesearch-filename": "Ngaran koropak:",
+ "fileduplicatesearch-summary": "Pamaluruhan duplikat berkas dumasar niléy hash-na.",
+ "fileduplicatesearch-filename": "Ngaran berkas:",
"fileduplicatesearch-submit": "Paluruh",
"fileduplicatesearch-info": "$1 Ã $2 piksel Ukuran koropak: $3 Tipeu MIME: $4",
"fileduplicatesearch-result-1": "Koropak \"$1\" teu boga duplikat idéntik.",
@@ -3056,6 +3147,7 @@
"fileduplicatesearch-noresults": "Teu manggihan berkas nu ngaranna \"$1\".",
"specialpages": "Kaca husus",
"specialpages-note-top": "Kamandang",
+ "specialpages-note-restricted": "* Kaca husus normal.\n* ",
"specialpages-group-maintenance": "Laporan pigawéeun",
"specialpages-group-other": "Kaca husus lainna",
"specialpages-group-login": "Asup log / jieun akun",
@@ -3078,7 +3170,10 @@
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
"tag-mw-contentmodelchange": "parobahan modél kontén",
"tags-title": "Tag",
+ "tags-intro": "Ieu kaca ngandung daptar tag nu bisa ditandaan ku pakakas lemes kana hiji éditan di handap hartina.",
"tags-tag": "Ngaran tag",
+ "tags-display-header": "Pidangan di daptar parobahan",
+ "tags-description-header": "Déskripsi lengkep atawa harti",
"tags-source-header": "Sumber",
"tags-active-header": "Hurung?",
"tags-hitcount-header": "Parobahan kalawan tag",
@@ -3086,12 +3181,14 @@
"tags-active-yes": "Enya",
"tags-active-no": "Teu",
"tags-source-extension": "Ditangtukeun ku pakakas lemes",
+ "tags-source-manual": "Dipaké sacara manual ku pamaké jeung bot",
"tags-source-none": "Teu dipaké deui",
"tags-edit": "édit",
"tags-delete": "pupus",
"tags-activate": "hurungkeun",
"tags-deactivate": "pareuman",
"tags-hitcount": "$1 {{PLURAL:$1|parobahan|parobahan}}",
+ "tags-manage-no-permission": "Anjeun teu mibanda kawenangan pikeun ngatur parobahan tag.",
"tags-create-heading": "Nyieun tag anyar",
"tags-create-tag-name": "Ngaran tag:",
"tags-create-reason": "Alesan:",
@@ -3099,13 +3196,27 @@
"tags-create-already-exists": "Tag \"$1\" geus aya.",
"tags-create-warnings-below": "Anjeun rék nuluykeun panyieunan ieu tag?",
"tags-delete-title": "Pupus tag",
+ "tags-delete-explanation-initial": "Anjeun bakal mupus tag \"$1\" ti basisdata.",
"tags-delete-reason": "Alesan:",
+ "tags-delete-submit": "Pupus ieu tag ogé",
+ "tags-delete-not-allowed": "Tag nu dibikeun ku éksténsi teu bisa dipupus iwal éta éksténsi ngidinan.",
+ "tags-delete-not-found": "Tag \"$1\" euweuh.",
+ "tags-delete-too-many-uses": "Tag \"$1\" dilarapkeun ka $2 atawa leuwih {{PLURAL:$2|sarévisi|révisi}} nu hartina éta téh teu bisa dipupus.",
+ "tags-delete-warnings-after-delete": "Tag \"$1\" dipupus, ngan bijil {{PLURAL:$2|saparingetan|paringetan}} di handap:",
+ "tags-delete-no-permission": "Anjeun teu mibanda kawenangan pikeun mupus parobahan tag.",
"tags-activate-title": "Hurungkeun tag",
+ "tags-activate-question": "Anjeun bakal ngaktifkeun tag \"$1\".",
"tags-activate-reason": "Alesan:",
+ "tags-activate-not-allowed": "Ieu tag \"$1\" teu mumkin bisa diaktifkeun.",
+ "tags-activate-not-found": "Tag \"$1\" euweuh.",
"tags-activate-submit": "Hurungkeun",
"tags-deactivate-title": "Pareuman tag",
+ "tags-deactivate-question": "Anjeun bakal nganonktifkeun tag \"$1\".",
"tags-deactivate-reason": "Alesan:",
+ "tags-deactivate-not-allowed": "Ieu tag \"$1\" tidak mumkin bisa dinonaktifkeun.",
"tags-deactivate-submit": "Pareuman",
+ "tags-apply-no-permission": "Anjeun teu boga idin pikeun ngalarapkeun parobahan tag babarengan jeung parobahan anjeun.",
+ "tags-apply-blocked": "Anjeun teu bisa ngalarapkeun tag jeung parobahan anjeun nalika {{GENDER:$1|anjeun}} keur dipeungpeuk.",
"tags-edit-title": "Ãdit tag",
"tags-edit-manage-link": "Kokola tag",
"tags-edit-existing-tags": "Tag nu aya:",
@@ -3119,6 +3230,8 @@
"tags-edit-reason": "Alesan:",
"tags-edit-revision-submit": "Larapkeun parobahan kana {{PLURAL:$1|ieu révisi|$1 révisi}}",
"tags-edit-success": "Parobahan dilarapkeun.",
+ "tags-edit-failure": "Perobahan di handap bisa dilarapkeun:\n$1",
+ "tags-edit-nooldid-title": "Udagan révisi teu sah",
"comparepages": "Bandinkeun kaca",
"compare-page1": "Kaca 1",
"compare-page2": "Kaca 2",
@@ -3183,8 +3296,12 @@
"rightslogentry-temporary-group": "$1 (samentara, nika $2)",
"feedback-adding": "Nambahkeun eupan balik kana kaca...",
"feedback-back": "Balik deui",
+ "feedback-bugcheck": "Hadé! Ngan ngariksa yén éta téh lain hiji di antara [$1 bug nu geus dipiwanoh].",
+ "feedback-bugnew": "Kuring geus mariksa. Laporkeun bug anyar",
"feedback-cancel": "Bolay",
"feedback-close": "Anggeus",
+ "feedback-external-bug-report-button": "Kirim pancén téhnis",
+ "feedback-dialog-title": "Kirim saran jeung tanggepan",
"feedback-error2": "Kasalahan: Ãdit gagal",
"feedback-message": "Surat:",
"feedback-subject": "Ngeunaan:",
@@ -3194,6 +3311,11 @@
"searchsuggest-search": "Paluruh {{SITENAME}}",
"searchsuggest-containing": "ngandung...",
"api-error-badtoken": "Kasalahan internal: Token goréng.",
+ "api-error-emptypage": "Panyieunan kaca anyar nu kosong teu diidinan.",
+ "api-error-publishfailed": "Kasalahan internal: sérver gagal medal berkas saheulaanan.",
+ "api-error-stashfailed": "Kasalahan internal: sérver gagal nyimpen berkas saheulaanan.",
+ "api-error-unknown-warning": "Paringetan teu dipiwawuh: $1",
+ "api-error-unknownerror": "Kasalahan teu dipiwawuh: \"$1\"",
"duration-seconds": "$1 {{PLURAL:$1|detik|detik}}",
"duration-minutes": "$1 {{PLURAL:$1|menit|menit}}",
"duration-hours": "$1 {{PLURAL:$1|jam|jam}}",
@@ -3203,7 +3325,18 @@
"duration-decades": "$1 {{PLURAL:$1|dékadeu|dékadeu}}",
"duration-centuries": "$1 {{PLURAL:$1|abad|abad}}",
"duration-millennia": "$1 {{PLURAL:$1|milénium|milénium}}",
+ "rotate-comment": "Gambar diputerkeun $1 {{PLURAL:$1|darajat}} saarah jarum jam",
+ "limitreport-title": "Parser profil data:",
+ "limitreport-cputime": "Waktu pamakéan CPU",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|sadetik|detik}}",
"limitreport-walltime": "Pamakéan waktu nyaan",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|sadetik|detik}}",
+ "limitreport-ppvisitednodes": "Préprosésor nyorang itungan node",
+ "limitreport-ppgeneratednodes": "Préprosésor ngasilkeun itungan node",
+ "limitreport-postexpandincludesize": "Pasca ngalegakeun kaasup ukuran",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|sabita|bita}}",
+ "limitreport-templateargumentsize": "Ukuran argumén citakan",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|sabita|bita}}",
"expandtemplates": "Mekarkeun citakan",
"expand_templates_input": "Téks input:",
"expand_templates_output": "Hasil:",
diff --git a/languages/i18n/tay.json b/languages/i18n/tay.json
index b882534d89..4d864dc494 100644
--- a/languages/i18n/tay.json
+++ b/languages/i18n/tay.json
@@ -8,6 +8,9 @@
"Translatealcd"
]
},
+ "tog-numberheadings": "Smiâ nanak sa banggoâ na spzyang kkayal",
+ "editfont-sansserif": "Ungat pintrang sa inrkyasan na biruâ",
+ "editfont-serif": "Pintrang sa inrkyasan na biruâ",
"sunday": "Hngawan ryax",
"monday": "âRingan qutux hngawan",
"tuesday": "Tay sazing ryax qutux hngawan",
@@ -77,6 +80,7 @@
"subcategories": "Uzyuk na pintbcyan",
"category-media-header": "Cyux niyaâ ptbcyun na \"$1\" Metiâ",
"hidden-categories": "{{PLURAL:$1| Lnqing na pintbcyan }}",
+ "hidden-category-category": "Lnqing na pintbuciâ",
"category-subcat-count": "{{PLURAL:$2|pintbcyan qaniy ga nanak yaquw qutux uzyuk na pintbcyan quw spgluw niyaâ.| pintbcyan qaniy ga kwaraâ kin na $1 uzyuk na pintbcyan sawn niya uziy, $2 kwaraâ.}}",
"category-article-count": "{{PLURAL:$2| pintbcyan qaniy ga ginkwaraâ zngazyan tay suruw. | pintbcyan qaniy ga kwaraâ kin $1 pintbcyan tay suruw, $2 kwaraâ.}}",
"category-file-count": "{{PLURAL:$2|Pintbcyan niyaâ qaniy ga nanak yaquw nyux niyaâ sbiruâ sa hugal qaniy|Pintbcyan niyaâ qaniy ga kwaraâ kin na biruâ ka $1, psqunun kwara\nga $2 .}}",
@@ -110,11 +114,13 @@
"view": "Psbaybzih minblaq mitaâ",
"view-foreign": "Psbzih mitaâ squ$1",
"edit": "Smrâzyut miruâsmrâzyut miruâ",
+ "edit-local": "Srâzyut miruâ sa sinbbaq kmayal sa rhzyal sqaniy",
"create": "Psârux",
"create-local": "Tnwang sa kayâ na rhzyal qasa",
"delete": "âmuyut",
"protect": "mlahang",
"protect_change": "smbah",
+ "unprotect": "Sbah kinlahang",
"newpage": "Giqas na zngayan",
"talkpagelinktext": "mpkal",
"specialpage": "Mnanak na bbrwan",
@@ -147,10 +153,12 @@
"portal-url": "Project:kkzyup secyun",
"privacy": "Gagaâ na zyuwaw nanak",
"privacypage": "Project: Gagaâ na zyuwaw nanak",
+ "badaccess": "Minâuquâ pcingan sinpngan na kiriâ",
"ok": "Wal balay",
"retrievedfrom": "âNagal sa \"$1\"",
"editsection": "smrâzyut miruâ",
"editold": "Smrâzyut miruâ",
+ "viewsourceold": "Kta quw llpgan aring sa cinâringan",
"editlink": "smrâzyut miruâ",
"viewsourcelink": "Kta quw llpgan aring sa cinâringan",
"editsectionhint": "Smrâzyut miruâ gnaygay binrwanï¼$1",
@@ -158,35 +166,49 @@
"showtoc": "Pkaykitaâ",
"hidetoc": "lqing",
"collapsible-collapse": "Psqunun",
+ "collapsible-expand": "cankay",
"confirmable-yes": "Awâ",
"confirmable-no": "Iyat",
"feedlinks": "Pcyumung kktan:",
"site-atom-feed": "$1 na tkhulan Atom",
"page-atom-feed": "inkhulan na Atom tay $1",
"red-link-title": "$1 (ungat zzngayan)",
+ "sort-descending": "Pkkrawn mkuw tay bbawiq",
"nstab-main": "Zzngayan",
"nstab-user": "Pktâaniy",
+ "nstab-media": "Zngazyan na metiâ",
"nstab-special": "Mnanak na bbrwan",
"nstab-project": "Zngyan na Cwanâan",
"nstab-image": "biruâ na zayzyuwaw",
"nstab-mediawiki": "pintkaykayâ",
"nstab-template": "Mopan",
+ "nstab-help": "Minblaq pinqzyuâ sa zngazyan",
"nstab-category": "Psâanak sa mkgluw",
"mainpage-nstab": "Târingan na zzngayan",
+ "databaseerror": "Minâuquâ quw cryawkuâ",
"databaseerror-function": "Pptzyuwaw:$1",
+ "readonly": "Nyux niyaâ sngusun quw sslyan biruâ qaniy",
"missingarticle-diff": "(Kinâiniâ ptnaq:$1, $2)",
"internalerror": "pinâqwan tay qsahuy",
"badtitle": "Ungat zyuwaw na laluâ na spzyang kkayal",
"badtitletext": "Sniâ suâ laluâ na spzyang kkayal suâ qasa ga ungat zyuwaw niyaâ, ungat ana nanuâ qsahuy niyaâ, iniâ ga iniâ suâ ânblayqiy pâubuy quw pinâubuy suâ squw bzinah na kayâ, iniâ ga âmubuy sa sniâ nahaâ laluâ sa Wikiâ. \nKuna kya wal suâ syun ka biruâ qasa ga kyaâa cyux âmagan sa biruâ na iniâ baqiy mitaâ haziâ.",
"viewsource": "Kta quw llpgan aring sa cinâringan",
+ "actionthrottled": "Wal shtuy quw ppzyuwiâan",
"exception-nologin": "Iniâ suâ kzyup naâ",
+ "cannotlogoutnow-title": "Iniâ baqiy mshriq misuw qaniy",
"yourname": "Laluâ na pptzyuwaw:",
"userlogin-yourname": "Laluâ na pptzyuwaw",
"userlogin-yourname-ph": "Brwaniy laluâ na pptzyuwaw suâ",
"yourpassword": "Mimaâ:",
"userlogin-yourpassword": "Nanak kung baq sa llpgan qaniy",
"userlogin-yourpassword-ph": "Brwaniy Mimaâ suâ",
+ "createacct-yourpassword-ph": "Brwaniy quw isuâ nanak musaâ baq na banggoâ",
+ "createacct-yourpasswordagain-ph": "Brwaniy lawziy quw mimaâ",
"userlogin-remembermypassword": "Laxiy zngiy kinzyup makuâ",
+ "userlogin-signwithsecure": "Ptzyawganiy quw iyat qqzyaqih na âubuy",
+ "cannotloginnow-title": "Iniâ baqiy mzyup misuw qaniy",
+ "cannotcreateaccount-title": "Iniâ baqiy psârux Canghaw",
+ "yourdomainname": "Wangyuâ suâ:",
"login": "mzyup",
"logout": "mshriq",
"userlogout": "mshriq",
@@ -201,27 +223,42 @@
"createacct-email-ph": "Brwaniy zyusyo na e-meyoâ suâ",
"createacct-another-email-ph": "Brwaniy zyusyo na e-meyoâ suâ",
"createacct-reason": "âringan",
+ "createacct-submit": "Psârux laluâ na Canghaw suâ",
"createacct-another-submit": "Psârux canghaw",
"createacct-benefit-heading": "{{SITENAME}} hyaâ ga ânagal squw yan isuâ psrâzyut miruâ na squliq pinsârux.",
"createacct-benefit-body1": "{{PLURAL:$1|smrâzyut miruâ }}",
"createacct-benefit-body2": "{{PLURAL:$1|zzngayan}}",
"createacct-benefit-body3": "misuw qaniy na{{PLURAL:$1| smnrâzyut miruâ}}",
+ "createacct-error": "Minâuquâ quw pinsârux suâ Canghaw",
+ "createaccounterror": "Iniâ baqiy psârux Canghaw:$1",
+ "mailmypassword": "Tâaring lawziy smiâ mimaâ",
+ "accountcreated": "Wal psârux canghaw",
"loginlanguagelabel": "Kayâï¼$1",
"pt-login": "Mzyup",
"pt-login-button": "mzyup",
+ "pt-login-continue-button": "Siy luhing mzyup",
"pt-createaccount": "Psârux canghaw",
"pt-userlogout": "mshriq",
+ "changepassword": "Sbah mimaâ",
+ "oldpassword": "Mimaâ sraral:",
+ "botpasswords": "Mimaâ na squliq na kikay",
"botpasswords-label-create": "Psârux",
"botpasswords-label-update": "Sbahun giqas",
"botpasswords-label-cancel": "laxan",
"botpasswords-label-delete": "âmuyut",
"botpasswords-label-resetpassword": "Tâaring lawziy smiâ mimaâ",
+ "resetpass_forbidden": "Iniâ baqiy snbah mimaâ",
+ "resetpass_forbidden-reason": "Iniâ baqiy snbah mimaâ: $1",
+ "resetpass-submit-loggedin": "Sbah mimaâ",
"resetpass-submit-cancel": "laxan",
+ "resetpass-temp-password": "Pinbaybah smiâ na mimaâ:",
"passwordreset": "Tâaring lawziy smiâ mimaâ",
"passwordreset-username": "Laluâ na pptzyuwaw:",
+ "passwordreset-domain": "Laluâ na wangyuâ:",
"passwordreset-email": "Zyusyo na e-meyoâ:",
"changeemail-none": "(ungat)",
"resettokens-tokens": "Niwan sawsuâ:",
+ "resettokens-done": "Wal tâaring kbalay lawziy niwan sawsuâ na mimaâ.",
"bold_sample": "Qthuy na biruâ",
"bold_tip": "Qthuy na biruâ",
"italic_sample": "Mtkkiy na biruâ",
@@ -243,21 +280,34 @@
"minoredit": "Iyat spzyang balay ssrâtun miruâ balay qaniy hyaâ",
"watchthis": "Kmyagal mitaâ sa zngayan qaniy",
"savearticle": "Cucun qu zngazyan",
+ "savechanges": "Cucun squw sinbah",
"preview": "Pnaynamaâ mitaâ",
"showpreview": "Pnaynamaâ pkitaâ sa misa spkitaâ na zayzyuwaw",
"showdiff": "Pkaykitaâ sinbah",
"anoneditwarning": "Smrhuw kmal: Iniâ suâ kzyup naâ. Maha iy wal suâ sbahun ana inuâ ga, nanuâ quw cyux kiâan na IP suâ ga musaâ ktan kwaraâ squliq. Maha iy [$1 wal mzyup] iniâ ga [$2 psârux Canghaw] ï¼sinrâzyut suâ miruâ qaniy ga musaâ niyaâ sâagal sa laluâ suâ ka nyux mmiruâ qaniy smbbaq, ru musaâ magal sa kwaraâ ka qqblayqan na hway nahaâ.",
+ "subject-preview": "Pnaynamaâ mitaâ sa spzyang na ptzyuwaw:",
+ "blockednoreason": "iniâ niyaâ kaylaniy quw nanuâ quw âringan",
+ "nosuchsectiontitle": "Iniâ âluwiy quw binkgan gnaygay na binrwan",
"loginreqlink": "mzyup",
+ "accmailtitle": "Wayal ssatuâ mima",
"noarticletext-nopermission": "Ungat ana cikuy knayal sa zyuwaw na qsahuy na laluâ na kayâ squw nyux ktan sa zngayan qaniy.\nAna suâ sâusaâ sa zngayan tay bzinah \n[[Special:Search/{{PAGENAME}}|hmkangiâ sa puqing laluâ na zngayan qaniy]], iniâ ga [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hmkangiâ sa mâubuy sa zyuwaw na bbrwan qutux qutux ryax] ï¼ga ungat kinriâ suâ msârux sa zngayan qaniy.",
"updated": "(Sinbahan)",
"note": " pinkitaâ niyaâ sa pinzgaâ ï¼ ",
+ "continue-editing": "Usaâ squw hhalan smrâzyut miruâ",
"editing": "Nyuw smrâzyut miruâ $1",
"editingsection": "smrâzyut miruâ $1 (gnaygay binrwan)",
+ "storedversion": "Wal cucun quw sinbah",
"templatesused": "Zngayan qaniy ga cyux niyaâ sptzyuwaw qu nyux sbiruâ hugal qaniy{{PLURAL:$1|mopan}}ï¼",
"template-protected": "(klhangan)",
"template-semiprotected": "(ana walskun ga baqun smbah)",
"hiddencategories": "zngayan qaniy hyaâ ga gluw na {{PLURAL:$1|1 lnqing na pintbcyan|$1 lnqing pintbcyan}}na qutux bluw na squliq nahaâï¼",
+ "permissionserrors": "Minâuquâ pcingan sinpngan na kiriâ",
"moveddeleted-notice": "Wal pzyutan quw zngayan qaniy.\nNyux sbiruâ hugal quw wal pzyutan na zngazyan squw sinhzyuwan bniruâ sa qutux qutux ryax akiâ baqun sa ggalan pspngan mitaâ.",
+ "edit-conflict": "Iniâ ptnaq imiâ qsahuy na sinrâzyut miruâ.",
+ "postedit-confirmation-created": "Wal psârux zngazyan.",
+ "postedit-confirmation-restored": "Wal pbaynahun sazngayan sraral",
+ "defaultmessagetext": "Pinnamaâ smiâ pintkaykayâ na biruâ",
+ "invalid-content-data": "Ungat zyuwaw nquw sinbbaq kayâ na qsahuy niyaâ",
"content-model-wikitext": "Wikitext",
"content-model-text": "biruâ mlmlux",
"content-json-empty-object": "Ungat ana nanuâ quw nnanuâ niyaâ",
@@ -279,17 +329,30 @@
"rev-delundel": "Smbah sa musaâ slwan mitaâ",
"rev-showdeleted": "Pkaykitaâ",
"revdelete-show-file-submit": "Awâ",
+ "revdelete-legend": "Syaniy qutux sa snqays sa spkaykitaâ",
+ "revdelete-hide-comment": "Srâzyut miruâ gnaygay laluâ",
+ "revdelete-radio-same": "(laxiy sbahiy)",
"revdelete-radio-set": "Lqing",
"revdelete-radio-unset": "Pkaykitaâ",
"revdelete-log": "âringan:",
+ "revdel-restore": "sbah quw musaâ baqun mitaâ",
+ "deletedhist": "Wal pzyutan lquw pincyuwagan sraral",
+ "revdelete-edit-reasonlist": "Srâzyut miruâ sa âringan na pinzyutan",
+ "revdelete-offender": "Smnbah sa binrwan na squliq:",
+ "mergehistory-from": "Inkhulan na zngazyan:",
+ "mergehistory-into": "Sngusan zngazyan:",
+ "mergehistory-fail-bad-timestamp": "Minâuquâ bniruâ suâ zikang",
"mergehistory-reason": "âringan:",
"history-title": "Tay \"$1\" na sinbah bniruâ sraral",
"difference-title": "Kin iniâ ptnaq sinbahan squw \"$1\"",
"lineno": "Tuqiy binkgan binrwan$1ï¼",
"editundo": "Psbzinah",
+ "diff-empty": "(ungat iniâ ptnaq)",
"diff-multi-sameuser": "({{PLURAL:iniâ kta quw sinbahan tay kskaâ nquw sinbahan tay $1}})",
"searchresults": "Babaw na hinkangi",
"searchresults-title": "$1 na babaw hinkangi",
+ "titlematches": "Mtnaq quw laluâ kkayal sa zngazyan",
+ "textmatches": "Mtnaq balay binrwan qsahuy na zngazyan",
"prevn": "tay glaing {{PLURAL:$1|$1}}",
"nextn": "tay suruw {{PLURAL:$1|$1}}",
"prev-page": "llpgan tay glaing",
@@ -316,12 +379,17 @@
"searchall": "kwaraâ",
"search-showingresults": "{{PLURAL:$4|tay $1 pucing niyaâ, psqunun lga $3 |tay $1 - $2 pucing nyaâ, psqunun lga $3 pucing nyaâ}}",
"search-nonefound": "Ktan qu bniruâ niyaâ ga ungat quw musaâ mtnaq sa tthuzyay sa awsaâ hmkangiâ.",
+ "powersearch-togglelabel": "Wazyaw:",
"powersearch-toggleall": "Kwaraâ",
"powersearch-togglenone": "Ungat",
"mypreferences": "Sniâ makuâ",
+ "prefs-edits": "Kinpiraâ na sinrâzyut:",
"prefs-skin": "Ktan na rawziq",
"skin-preview": "Pnaynamaâ mitaâ",
+ "prefs-labs": "Tthuzyay na tmrang psiking",
+ "prefs-user-pages": "Zngazyan na pptzyuwaw",
"prefs-rc": "Sbahun misuw qaniy",
+ "prefs-editwatchlist": "Srâzyut miruâ sa kkitaâ binkgan sa kktan",
"prefs-misc": "Mzinah",
"prefs-email": "bbzagan sa e-meyoâ",
"prefs-rendering": "Ktan na rawziq",
@@ -329,6 +397,8 @@
"prefs-editing": "Smrâzyut miruâ",
"searchresultshead": "Hhkangiâ",
"timezonelegend": "Zikang na iniâ ptanaq rhzyal",
+ "localtime": "Zikang na rhzyal sqasa:",
+ "servertime": "Zikang na pklahang sa Wangcan:",
"timezoneregion-africa": "Xweco",
"timezoneregion-america": "Meco",
"timezoneregion-antarctica": "Nancicow",
@@ -345,18 +415,25 @@
"prefs-custom-css": "Sinpung nanak CSS",
"youremail": "e-meyoâ:",
"username": "{{GENDER:$1|Laluâ na pptzyuwaw}}:",
+ "prefs-registration": "Pbiruâ zikang:",
"yourlanguage": "Kayâ:",
+ "yournick": "Giqas na bniruâ laluâ:",
"email": "e-meyoâ",
"prefs-i18n": "Koksayka",
"prefs-dateformat": "Ksuâ na ryax",
"prefs-timeoffset": "Kininiâ ptnaq na zikang",
"prefs-advancedediting": "Kwaraâ hyaâ g a syensyang",
"prefs-preview": "Pnaynamaâ mitaâ",
+ "prefs-displayrc": "Pktâaniy bbzyagan",
"prefs-tokenwatchlist": "Niwan sawsuâ",
"prefs-diffs": "Kinâiniâ ptnaq",
+ "userrights": "Pcingan sinpngan na pptzyuwaw",
+ "userrights-lookup-user": "Wazyaw quw pptzyuwaw",
+ "userrights-groupsmember": "Ubuy gluw na chyuncu:",
"userrights-reason": "âringan:",
"userrights-expiry-current": "Sinpngan ryax $1",
"userrights-expiry": "Sinpngan ryax:",
+ "userrights-expiry-othertime": "Zikang tay bzinah:",
"group-user": "kwaraâ ka cyux mbing ka qutux qutux ngasal",
"group-bot": "Squliq na kikay",
"group-sysop": "Pklahang",
@@ -369,10 +446,33 @@
"grouppage-bot": "{{ns:project}}:Squliq na kikay",
"grouppage-sysop": "{{ns:project}}:Pklahang",
"grouppage-bureaucrat": "{{ns:project}}:Gyoseâning",
+ "right-read": "Lpgun zngazyan",
+ "right-createtalk": "Psârux na zngazyan na ppkyalan",
+ "right-move-categorypages": "Shzyaniy quw pintbuciâ na zngazyan",
"right-writeapi": "Sptzyuwaw squw API",
+ "right-undelete": "Laxiy quw akiâ llaxan na zngazyan",
+ "right-unblockself": "Laxiy quw qnhut isuâ nanak",
+ "right-mergehistory": "Psqunun zngazyan pincyuwagan sraral",
+ "grant-group-page-interaction": "Usaâ mpkayal squw zngazyan",
+ "grant-group-file-interaction": "Usaâ mpkayal squw metiâ",
+ "grant-group-email": "Stwaniy e-meyoâ",
+ "grant-group-high-volume": "Pzyux iytal wayal sptzyuwaw",
+ "grant-group-administration": "Ptzyuwaw squw pptzyuwaw sa kklahang",
"grant-createaccount": "Psârux canghaw",
+ "grant-privateinfo": "Agal ruw ssiâ sa lnqing na sinbbaq na cryaw",
+ "grant-uploadfile": "Pawsaâ sa kktan quw giqas Tangâan qaniy",
"newuserlogpage": "Psârux sa bbiruâ krayryax na pbing nasquliq",
+ "action-read": "lpuw zngazyan qaniy",
"action-edit": "srâzyut squw zzngayan tay sqaniy",
+ "action-createpage": "Psârux quw zngazyan qaniy",
+ "action-move": "hzâaniy quw zngazyan qaniy",
+ "action-move-categorypages": "shzyaniy quw pintbuciâ na zngazyan",
+ "action-movefile": "hzâaniy quw Tangâan qaniy",
+ "action-delete": "âzyuciy quw zngazyan qaniy",
+ "action-deletelogentry": "pzyuciy quw bniruâ sa binkgan lmlamuâ",
+ "action-sendemail": "Stwaniy e-meyoâ",
+ "action-purge": "kwagiy quw zngazyan qaniy",
+ "nchanges": "min$1 {{PLURAL:$1|smbah}}",
"enhancedrc-history": "kwaraâ binrwan sraral",
"recentchanges": "Sinbahan misuw qaniy",
"recentchanges-legend": "Misan sinbahan wwazyaw misuw",
@@ -385,13 +485,24 @@
"recentchanges-legend-heading": " pinkitaâ niyaâ sa pinzgaâ ï¼ ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aniy mitaâ sa[[Special:NewPages|giqas na zzngayan]])",
"recentchanges-submit": "Pkaykitaâ",
+ "rcfilters-quickfilters": "Cucun squw kkay na ptâiruw",
+ "rcfilters-savedqueries-defaultlabel": "Cucun squw kkay na ptâiruw",
"rcfilters-filterlist-title": "Hhkangiâ",
+ "rcfilters-highlightbutton-title": "Baqun balay pcingan balay smbbaq nquw bniruâ niyaâ",
+ "rcfilters-highlightmenu-title": "Wazyaw biruâ knitaâ rawziq",
+ "rcfilters-filterlist-noresults": "Ktan ga ungat ana qutux cinârgan na sinpngan sa musaâ tthuzyay",
+ "rcfilters-filtergroup-authorship": "Mintzyuwaw sa wal miq sa pincyuwagan",
+ "rcfilters-filter-editsbyother-label": "Sinbah na squliq tay bzinah",
"rcfilters-filter-user-experience-level-registered-label": "Pinbiruâ",
"rcfilters-filter-user-experience-level-unregistered-label": "Iyat pinbiruâ naâ",
"rcfilters-filter-user-experience-level-learner-label": "Misan mqbaq",
+ "rcfilters-filtergroup-automated": "Mutuw niyaâ srâtun miruâ nanak",
"rcfilters-filter-bots-label": "squliq na kikay",
"rcfilters-filter-unpatrolled-label": "Iyat gnawzyagan mitaâ naâ",
"rcfilters-filtergroup-significance": "Spzyang krhun na zyuwaw",
+ "rcfilters-filter-major-label": "Iyat mszik sa spzyang srâtun miruâ",
+ "rcfilters-filter-watchlist-watched-label": "Kta quw babaw na pâinsat",
+ "rcfilters-filtergroup-changetype": "Sbah gluw na mmntnaq",
"rcfilters-filter-categorization-label": "Pintbcyan na sinbahan",
"rclistfrom": "Inkahul misan sinbahan sa $2, $3",
"rcshowhideminor": "$1 mszik sa ssrâtun",
@@ -421,6 +532,7 @@
"minoreditletter": "cipuq",
"newpageletter": "Giqas",
"boteditletter": "squliq na kikay",
+ "rc_categories_any": "Ana nanuâ binzyagan na",
"rc-change-size-new": "sin-nbah$1 {{PLURAL:bzyaqan kkayal na llpgan}}",
"recentchangeslinked": "Mâubuy quw zyuwaw na sinbahan",
"recentchangeslinked-feed": "Mâubuy quw zyuwaw na sinbahan",
@@ -434,18 +546,32 @@
"filename": "Laluâ na tangâan",
"filedesc": "Laluâ na spzyang bbiruâ suâ",
"fileuploadsummary": "Laluâ na spzyang bbiruâ suâ:",
+ "filereuploadsummary": "Sbah quw Tangâan",
"filesource": "Tkhulan:",
+ "ignorewarnings": "Siy laxiy kya kwaraâ quw sinngunguâ niyaâ",
+ "savefile": "Cucun Tangâan",
+ "uploaddisabled": "Wal phngagun quw pptzyuwaw na ppawsa.",
+ "upload-description": "Pinqzyuwan Tangâan",
+ "watchthisupload": "Kta quw Tangâan qaniy",
"upload-file-error": "pinâqwan tay qsahuy",
"upload-dialog-button-back": "âbzinah",
"upload-dialog-button-done": "Tmasuq",
"upload-dialog-button-save": "Cucun",
"upload-form-label-infoform-description": "Miblaq pnqzyuâ sa zyuwaw",
"upload-form-label-usage-title": "Pptzyuwaw",
+ "upload-form-label-usage-filename": "Laluâ na Tangâan",
+ "upload-form-label-own-work": "Qaniy ga kinbalay makuâ",
"upload-form-label-infoform-date": "Ryax",
+ "uploadstash": "Pawsaâ sa kktan quw llqingan",
+ "uploadstash-refresh": "Psqgiqas smbah quw binzyagan sa kktan na Tangâan",
+ "uploadstash-thumbnail": "inblaq mitaâ swotuâ",
+ "invalid-chunk-offset": "Ungat zyuwaw na Chyak offset",
"license": "Biruâ na gagaâ nqu snwayal hmriq sa kinriâ:",
"license-header": "Biruâ na gagaâ nqu snwayal hmriq sa kinriâ",
+ "license-nopreview": "(Iniâ aniy pnaynamaâ pkitaâ)",
"listfiles-delete": "âmuyut",
"imgfile": "biruâ na zayzyuwaw",
+ "listfiles": "Binkgan sa kktan na Tangâan",
"listfiles_date": "Ryax",
"listfiles_user": "kwaraâ ka cyux mbing ka qutux qutux ngasal",
"listfiles_size": "Sspngan kinkrahuâ",
@@ -463,42 +589,87 @@
"filehist-thumbtext": "Pinkcikuy kbalay na syasing squ kinblayan $1",
"filehist-user": "kwaraâ ka cyux mbing ka qutux qutux ngasal.",
"filehist-dimensions": "Sspngan kinkrahuâ",
+ "filehist-filesize": "Kinkrahuâ na Tangâan",
"filehist-comment": "Tnwang smbbaq miruâ",
"imagelinks": "Pptzyuwaw na sinrâzyut biruâ",
"linkstoimage": "Nyux sbiruâ tay hugal ka {{PLURAL:$1| qutux zngazyan |$1 qutux zngazyan}}spâubuy sa biruâ qaniy.",
"nolinkstoimage": "Ungat ana qutux wal âmubuy sa biruâ na ana nanuâ zyuwaw qaniy.",
"sharedupload-desc-here": "Tangâan qaniy hyaâ ga kahul squw$1 ruw haziâ ana wal sptzyuwaw na cwanâan bbzinah. \nTay kyahuâ cyux spkitaâ sa Tangâan qaniy hyaâ ga cyux squw [$2 Tangâan pinqzyuâ zngayan ] na qsahuy pinqzyuwan.",
+ "shared-repo-from": "minkahul sa $1",
+ "shared-repo": "pglgan mitaâ ruw pglgan mtzyuwaw na ssliyan Tangâan",
"upload-disallowed-here": "Iyat suâ bauqn âmumuk quw biruâ na zayzyuwaw qaniy.",
"filerevert": "Psbzih $1",
+ "filerevert-legend": "Psbzinah qu Tangâan",
"filerevert-comment": "âringan:",
+ "filedelete": "âzyuciy $1",
"filedelete-comment": "âringan:",
"filedelete-submit": "âmuyut",
+ "filedelete-edit-reasonlist": "Srâzyut miruâ sa âringan na pinzyutan",
+ "filedelete-maintenance-title": "Iniâ baqiy âmuzyut Taangâan",
"download": "syacay",
+ "unwatchedpages": "Iniâ klhangiy mitaâ na zngazyan",
+ "listredirects": "Târingun pglaing lawziy binzyagan sa kktan",
+ "listduplicatedfiles": "Târingiy lawziy Tangâan na ktan binkgan",
+ "unusedtemplates": "Iyat pintzyuwaw naâ na mopan",
"randompage": "Random page",
"randomincategory-submit": "Musaâ",
"statistics": "Sinqunan plpuw",
+ "statistics-header-edits": "Srâzyut miruâ sinqunan plpuw",
+ "statistics-files": "Wal pawsun sa kktan quw Tangâan",
+ "statistics-users-active": "Iniâ hngaw mtzyuwaw na pptyuwaw",
+ "pageswithprop-prop": "Laluâ na ubuy mkgluw:",
"pageswithprop-submit": "Musaâ",
"brokenredirects-edit": "Smrâzyut miruâ",
"brokenredirects-delete": "âmuyut",
"withoutinterwiki-legend": "Târingan na biruâ",
"withoutinterwiki-submit": "Pkaykitaâ",
"nbytes": "$1 {{PLURAL:$1|qutux llpgan na bzyaqan kkayal}}",
+ "ncategories": "$1 {{PLURAL:$1|pintbcyan}}",
+ "nlinks": "$1{{PLURAL:$1|âubuy}}",
"nmembers": "$1 {{PLURAL:$1|pinglgan}}",
+ "nrevisions": "min$1 {{PLURAL:$1|smbah}}",
+ "uncategorizedpages": "Zngazyan na iyat pintbuciâ",
+ "uncategorizedcategories": "Iyat pintbuciâ na pptbcyun",
+ "uncategorizedimages": "Tangâan na iyat pintbuciâ",
+ "uncategorizedtemplates": "Musaâ ptbcyun sa kkbalay nn nanuâ",
+ "unusedcategories": "Iniâ ptzyawganiy naâna pintbuciâ",
+ "unusedimages": "Iniâ aniy mtzyuwaw naâ na Tangâan",
+ "wantedcategories": "Musaâ sawyan magal ka ptbuciâ",
+ "wantedpages": "Musaâ sawyan magal ka zngazyan",
+ "wantedfiles": "Musaâ sawyan magal ka Tangâan",
+ "wantedtemplates": "Musaâ sawyan magal ka mopan",
"prefixindex-submit": "Pkaykitaâ",
+ "shortpages": "Râtung iyal na zngazyan",
+ "longpages": "Hmzinas iyal na zngazyan",
+ "protectedpages": "Klhangan na zngazyan",
"protectedpages-timestamp": "Ryax zikang",
"protectedpages-page": "Zzngayan",
"protectedpages-expiry": "Sinpngan ryax",
+ "protectedpages-performer": "Klhangiy quw pptzyuwaw",
"protectedpages-reason": "âringan",
+ "protectedpages-submit": "Pktâaniy",
"protectedpages-unknown-timestamp": "Iniâ bqbaqiy ginlaylwan",
+ "protectedpages-unknown-performer": "Iniâ bqbaqiy ginlaylwan na pptzyuwaw",
+ "protectedtitles": "Klhangan na laluâ na kkayal",
+ "protectedtitles-submit": "Pktâaniy laluâ na kkayal",
+ "listusers": "Binkgan sa zzngazyan na pptzyuwaw",
+ "listusers-desc": "Aring tay krahuâ mkuw ruw mucing cikuy",
"usereditcount": "$1 {{PLURAL:$1|smrâzyut miruâ}}",
"newpages": "Giqas na zzngzyan",
"newpages-submit": "Pkaykitaâ",
"newpages-username": "Laluâ na pptzyuwaw:",
"move": "Smhziâ",
+ "movethispage": "Hzâaniy quw zngazyan qaniy",
"notargettitle": "Ungat sinngusan niyaâ",
"pager-older-n": "{{PLURAL:$1|smural haziâ quw $1}}",
"suppress": "Shtuy",
+ "apihelp": "minblaq kmal na API",
+ "apisandbox": "saho API",
+ "apisandbox-unfullscreen": "Pktâaniy",
"apisandbox-retry": "Talam lawziy",
+ "apisandbox-deprecated-parameters": "Wal phngagun na chansuâ",
+ "apisandbox-fetch-token": "Mutuw siy biruâ nanak banggoâ na mimaâ",
+ "apisandbox-submit-invalid-fields-title": "Ungat zyuwaw bbrwan sa krumaâ",
"apisandbox-results": "Pcingan balay",
"apisandbox-continue": "Siy lhingiy",
"booksources": "Brbiruâ na inkhulan na pilaâ",
@@ -506,6 +677,7 @@
"booksources-search": "Hkangiâ",
"log": "Pinhknyan sraral",
"logeventslist-submit": "Pkaykitaâ",
+ "all-logs-page": "Kwaraâ ka wal niyaâ skayal kwaraâ squliq ka bnrwan",
"checkbox-all": "Kwaraâ",
"checkbox-none": "Ungat",
"checkbox-invert": "Pssyuk mwazyaw",
@@ -516,11 +688,24 @@
"allpagessubmit": "Mtzyuwaw",
"categories": "Pintbcyan",
"categories-submit": "Pkaykitaâ",
+ "linksearch": "Hhkangiââubuy taylnglingay",
+ "linksearch-pat": "Hhkangiâ:",
"linksearch-ns": "Kungcyen na sslaluâ:",
"linksearch-ok": "Hhkangiâ",
"listusers-submit": "Pkaykitaâ",
+ "listusers-noresult": "Ktan ga ungat qutux pptzyuwaw.",
+ "listusers-blocked": "(wal sqhut)",
+ "activeusers-noresult": "Ktan ga ungat qutux pptzyuwaw",
"listgrouprights-rights": "Pcingan na sinpngan",
+ "listgrouprights-members": "(binzyagan sa kktan gluw na qutux pinglgan)",
+ "listgrouprights-addgroup-all": "Tawnganiy kwaraâ quw cyucuâ",
+ "listgrouprights-removegroup-all": "Laxan kwaraâ cyuncuâ",
+ "listgrouprights-removegroup-self-all": "Laxan kwaraâ cyuncuâ",
+ "listgrouprights-namespaceprotection-header": "Klhangan sa iyat niyaâ kkhmut na sslaluâ sa kung cyen:",
"listgrants-rights": "Pcingan na sinpngan",
+ "trackingcategories-desc": "Galan pspngan na snliâ sa snliâ niyaâkwaraâ ka pintbuciâ",
+ "trackingcategories-disabled": "Wal phngagun quw pintbcyan",
+ "mailnologin": "Ungat sstwan laluâ na rhzyal",
"emailusername": "Laluâ na pptzyuwaw:",
"emailusernamesubmit": "Pawsun",
"emailto": "Sginbang a:",
@@ -530,30 +715,51 @@
"mywatchlist": "Kta quw binkgan biruâ",
"watchnologin": "Iniâ suâ kzyup naâ",
"watch": "Kitaâ",
+ "watchthispage": "Kta quw zngazyan qaniy",
+ "notanarticle": "Zngazyan na iyat kayâ balay na binrwan",
"watchlist-hide": "Lqing",
"watchlist-submit": "Pkaykitaâ",
"wlshowhidebots": "squliq na kikay",
+ "wlshowhideliu": "wal pbiruâquwpptzyuwaw",
"wlshowhideanons": "inqing laluâ nqu squliq cyux mbing",
+ "wlshowhidepatr": "wal ktan bniruâ na sinrâzyut",
+ "watchlist-options": "Wwazyaw saâ kkitaâ sa binkgan sa kktan",
"enotif_impersonal_salutation": "{{SITENAME}} kwaraâ ka cyux mbing ka qutux qutux ngasal",
"enotif_anon_editor": "inqing laluâ nqu squliq cyux mbing $1",
+ "enotif_minoredit": "Qaniy hyaâ ga mszik na musaâ srâtun miruâ",
"delete-confirm": "âmuyut \"$1\"",
"historyaction-submit": "Pkaykitaâ",
+ "actioncomplete": "Tmasuq mtzyuwaw",
+ "actionfailed": "Wal yaqih pintzyuwaw",
"dellogpage": "Wayal pzyutan ka bniruâ qasa",
"deletecomment": "âringan:",
+ "delete-edit-reasonlist": "Srâzyut miruâ sa âringan na pinzyutan",
"rollbacklink": "psbnahun",
"rollbacklinkcount": "psbzinah squw {{PLURAL:sinrâzyut miruâ sa|$1}}",
+ "rollbackfailed": "Psbzinah sa wal yaqih",
+ "sessionfailure-title": "Wayal yaqih squw pâubuy",
+ "changecontentmodel-model-label": "Giqas na pinsulung sa inrkyasan na bnrwan tay qsahuy",
"changecontentmodel-reason-label": "âringan:",
"changecontentmodel-submit": "Smbah",
"logentry-contentmodel-change-revertlink": "psbzih",
"protectlogpage": "Kklahang sa bniruâ",
"protectcomment": "âringan:",
"protectexpiry": "Sinpngan ryax:",
+ "protect_expiry_invalid": "Iniâ baqiy snbah mimaâ.",
+ "protect_expiry_old": "Wal tmasuq quw sinpngan na ryax",
+ "protect-level-sysop": "Nanak yaquw pklahang swalan",
"protect-expiring": "Sinpngan ryax $1 (UTC)",
+ "protect-expiring-local": "sinpngan ryax squw $1",
+ "protect-othertime": "Zikang tay bzinah:",
+ "protect-edit-reasonlist": "Srâzyut miruâ quw âringan na kklahang",
"restriction-type": "Pcingan na sinpngan:",
+ "restriction-level": "Pssyukun aring sa wagiq paybkuw ruw mucing sa cikuy",
+ "maximum-size": "Sspngan kinkrahu na sinpngan:",
"pagesize": "(bzyaqan kkayal na llpgan)",
"restriction-edit": "Smrâzyut miruâ",
"restriction-move": "Smhziâ",
"restriction-create": "Psârux",
+ "undelete-fieldset-title": "Psbzinah sa wal sbahun",
"undeletebtn": "Psbzih",
"undeleteinvert": "Pssyuk mwazyaw",
"undeletecomment": "âringan:",
@@ -570,6 +776,7 @@
"anoncontribs": "Snliâ sa binrwan",
"month": "Pcingan na sniyan nahaâ ryax na byacing:",
"year": "Pcingan na sniyan nahaâ ryax na kawas",
+ "sp-contributions-newbies-sub": "Pptzyuwaw sa kkbalay sa giqas na Canghaw",
"sp-contributions-logs": "pinhknyan sraral",
"sp-contributions-talk": "mpkal",
"sp-contributions-submit": "Hhkangiâ",
@@ -588,30 +795,56 @@
"whatlinkshere-hidelinks": "$1 pâubuy",
"whatlinkshere-filters": "Hmkangiâ",
"whatlinkshere-submit": "Musaâ",
+ "block": "Htzyaniy quw pptzyuwaw",
+ "blockip-legend": "Htzyaniy quw pptzyuwaw",
"ipbreason": "âringan:",
+ "ipbsubmit": "Qhtaniy quw pptzyuwaw qaniy",
+ "ipbother": "Zikang tay bzinah:",
+ "ipb-edit-dropdown": "Srâzyut miruâ quw âringan na qnhut",
+ "ipb-blocklist-duration-left": "msthay $1",
+ "ipusubmit": "Laxiy quw qnihut qaniy",
"autoblocklist-submit": "Hhkangiâ",
"blocklist-timestamp": "Ryax zikang",
"blocklist-target": "Sinpngan na sinngusan",
"blocklist-expiry": "Sinpngan ryax",
+ "blocklist-by": "Qnhtan na pklahang",
"blocklist-reason": "âringan",
"ipblocklist-submit": "Hhkangiâ",
+ "noautoblockblock": "phngaw quw pinzroo na qnhut",
+ "emailblock": "phngaw quw e-meyoâ",
"blocklink": "qmhut",
+ "change-blocklink": "Snbah qnhut",
"contribslink": "wal miq sa pincyuwagan",
+ "emaillink": "Stwaniy e-meyoâ",
+ "block-log-flags-noautoblock": "phngaw quw pinzroo na qnhut",
+ "block-log-flags-noemail": "phngaw quw e-meyoâ",
+ "lockdb": "Sngusiy cryawkuâ",
+ "lockbtn": "Sngusiy cryawkuâ",
"move-page": "Smhziâ $1",
+ "pagemovedsub": "Wal thuzyay smhziâ",
"movelogpage": "Sinhzyan sa bniruâ",
"movereason": "âringan:",
"revertmove": "psbzih",
"export": "Pawsaâ sa bzinah quwzngayan",
+ "exportall": "Stwaniy kwaraâ quw zngazyan",
"export-submit": "Pawsaâ",
+ "export-download": "Cucun ruw akiâ mgTangâan",
+ "allmessagesdefault": "Pinnamaâ smiâ pintkaykayâ na biruâ",
"allmessages-filter-legend": "Hhkangiâ",
"allmessages-filter-unmodified": "Iyat sinbah",
"allmessages-filter-all": "Kwaraâ biruâ na zngyan",
+ "allmessages-prefix": "Khlaniy sa puqing biruâ hmkangiâ:",
"allmessages-language": "Kayâ:",
"allmessages-filter-submit": "Mtzyuwaw",
"allmessages-filter-translate": "Gmbang miruâ",
"thumbnail-more": "Pkrahuâ",
+ "filemissing": "Wal mgzyuwaw Tangâan",
+ "import-interwiki-sourcepage": "Inkhulan na zngazyan:",
+ "import-interwiki-templates": "Kwaraâ kin na kwaraâ yayaâ na kkbalay nnanuâ",
"import-upload-filename": "Laluâ na tangâan:",
"import-comment": "Tnwang smbbaq miruâ",
+ "import-revision-count": "min$1 {{PLURAL:$1|smbah}}",
+ "importsuccess": "Wal tmasuq pawsaâ sa qsahuy na...la!",
"tooltip-pt-userpage": "{{GENDER:|Laluâ suâ sa pptzyuwaw}}sinrâzyut miruâ",
"tooltip-pt-mytalk": "{{GENDER:|Rwa suâ}} zngayan sa spkayal",
"tooltip-pt-preferences": "{{GENDER:|Rwa suâ}}sniâ makuâ ktan krayryax",
@@ -624,6 +857,9 @@
"tooltip-ca-edit": "Srâzyut squw zzngayan tay sqaniy",
"tooltip-ca-viewsource": "Ana wayal skun quw zngazyan qaniy ga, musaâ suâ baqun musaâ msbaybzih mitaâ naâ quw puqing balay laluâ na binkgan niyaâ.",
"tooltip-ca-history": "Zzngayan qaniy hyaâ ga sinbahan sa wayal qasa",
+ "tooltip-ca-protect": "Klhangiy quw zngazyan qaniy",
+ "tooltip-ca-delete": "âzyuciy quw zngazyan qaniy",
+ "tooltip-ca-move": "Hzâaniy quw zngazyan qaniy",
"tooltip-ca-watch": "Aniy tmwang sa baqun duâ mitaâ na biruâ binkgan ka ggyahan llpgan qaniy",
"tooltip-search": "Hmkangiâ sa {{SITENAME}}",
"tooltip-search-go": "Maha makiâ balay mtnaq laluâ sa zzngayan qaniy ga, hala taâ sa zzngayan qasa.",
@@ -652,23 +888,46 @@
"tooltip-ca-nstab-template": "Kta quw mopan",
"tooltip-ca-nstab-category": "psbzih mitaâ sa pintbcyan na zngazyan",
"tooltip-save": "Skuâ qu wayal suâ sbahun",
+ "tooltip-publish": "Kaylaniy kwaraâ squliq quw sinbah suâ",
"tooltip-preview": "Zik na sskun suâ quw sinbahan suâ ga, sbnahiy mitaâ quw sinbah suâ.",
"tooltip-diff": "Aniy pkitaâ quw wayal suâ sbahun tay qsahuy niyaâ",
+ "tooltip-watchlistedit-raw-submit": "Psqgiqas smbah kkitaâ sa bnkuw na kktan",
"tooltip-rollback": "ssbuâ sa âubuy squ âPsbznahanâ lga musaâ baq mbzinah squw sinrâztan binrwan na misan mniruâ sa wayal qasa",
"tooltip-undo": "\"Psbzinah\"hyaâ ga mutuw niyaâ baqun psbzinah quw sinrâzyut miruâ, ruw kahul sa yuran mosuâ gmyah sa pcyuawag na smrâzyut miruâ, ana suâ twangan miruâ sa nanuâ quw stwang squw sslaluâ na kkayal qaniy.",
"tooltip-summary": "Brwaniy quw laluâ na spzyang bbiruâ suâ",
"others": "bzinah",
+ "creditspage": "Kinbalay sa zngazyan na qutux gluw qasa",
"simpleantispam-label": "Kmyagal sa kana ptayqihiy na niwan saysyup na kayâ na nnanu.\nLaxiy brwaniy sa bbrwan qaniy!",
+ "pageinfo-header-edits": "Srâzyut miruâ pincyuwagan sraral",
+ "pageinfo-display-title": "Pktâaniy laluâ na kkayal",
+ "pageinfo-article-id": "Zngazyan na ID",
+ "pageinfo-language": "Kayâ qsahuy na zngazyan",
"pageinfo-language-change": "smbah",
+ "pageinfo-content-model": "Inrkyasan pinsulung sa qsahuy na zngazyan",
"pageinfo-content-model-change": "smbah",
"pageinfo-robot-index": "Snwalan",
"pageinfo-watchers": "Number of page watchers",
+ "pageinfo-firstuser": "Kinbalay sa zngazyang",
+ "pageinfo-firsttime": "Zikang na pinsârux sa zngazyan",
+ "pageinfo-lastuser": "Senmung psrâzyut miruâ sa misuw qaniy",
+ "pageinfo-lasttime": "Ryax sinrâzyut miruâ misuw qaniy",
+ "pageinfo-edits": "Sinqunan plpuw na pinsrâzyut miruâ",
+ "pageinfo-recent-authors": "Senmung pbiruâ sa misuw qaniy",
"pageinfo-toolboxlink": "Zzngayan na ggalan qqbaqan",
+ "pageinfo-redirectsto": "Târingun pglaing maras sa:",
"pageinfo-contentpage-yes": "Awâ",
+ "pageinfo-protect-cascading": "Kklahang tkhulan sakwaraâ ka mâubuy na ana nanuâ",
"pageinfo-protect-cascading-yes": "Awâ",
+ "pageinfo-protect-cascading-from": "Kklahang tkhulan sakwaraâ ka mâubuy na ana nanuâ",
+ "pageinfo-category-subcats": "Kinpzyux llpgan na uzyuk na pintbcyan",
+ "pageinfo-category-files": "Kinpzyux na Tangâan",
"pageinfo-user-id": "Mning ID",
+ "markaspatrolleddiff": "Sinbbaq sa wayal gawzyagan mitaâ",
+ "markedaspatrolled": "Sinbbaq sa wayal gawzyagan mitaâ",
"confirm-markpatrolled-button": "Wal balay",
+ "previousdiff": "â Smural sinrâzyut miruâ",
"nextdiff": "Giqas haziâ sinrâzyutâ",
+ "thumbsize": "Sspngan kinkrahuâ na swotuâ:",
"file-info-size": "$1 Ã $2 qqblayqan zzyangay, zayzyuwaw biruâ na sspngan kinkrahuâ: $3, gluw na mmntnaq MIME: $4",
"file-nohires": "Ungat qbaqan miq qutux sa musaâ tthuzyay iyal pkaykitaâ sa kinslwan iyal na qayqayaâ.",
"svg-long-desc": "SVG biruâ na cyux slyan ana nanuâ zayzyuwawï¼kinkrahuâ ktan tay babaw\n$1 Ã $2 tay babaw na Syangsuâï¼\nsspngan kinkrahuâ kkitaâ syasingï¼$3",
@@ -677,51 +936,111 @@
"show-big-image-other": "Kwaraâ tay bbzinah na {{PLURAL:$2|kinbaqun iyal mitaâ na}}ï¼$1",
"show-big-image-size": "$1 Ã $2 qqblayqan zzyangay",
"file-info-gif-looped": "syunxwan",
+ "file-info-gif-frames": "tay$1 {{PLURAL:$1|gnaygay pinzyuwiâan}}",
"file-info-png-looped": "syunxwan",
+ "file-info-png-frames": "tay$1 {{PLURAL:$1|gnaygay pinzyuwiâan}}",
"newimages-legend": "Hhkangiâ",
+ "noimages": "Ungat ana nanuâ pinzgaâ",
"gallery-slideshow-toggle": "Sbah mita' sa syasing bzinah",
"ilsubmit": "Hhkangiâ",
"bydate": "skahul sa ryax",
+ "monday-at": "Ryax tay qutux sa qutux rihay squw $1",
+ "tuesday-at": "Ryax tay sazing sa qutux rihay squw $1",
+ "wednesday-at": "Rryax tay cyugalx sa qutux rihay squw $1",
+ "thursday-at": "Ryax tay spayat sa qutux rihay squw $1",
+ "friday-at": "Ryax tay zmagal sa qutux rihay squw $1",
+ "saturday-at": "Ryax tay mtzyuâ sa qutux rihay squw $1",
+ "sunday-at": "Ryax hngawan sa qutux rihay squw $1",
+ "yesterday-at": "$1 tay shiraâ",
"metadata": "Cyuensâcryaw",
"metadata-help": "Takiâ sa biruâ na kwaraâ zayzyuwaw qaniy ga kwaraâ kin na zayzyuwaw bbzinah, kwaraâ quw zyuwaw sqaniy ga haziâ na kahul sa pinsârux na Suwe syangciy iniâ ga tmrang squw cyux psârux squw Sken iniâ ga cyux tmrang smrâzyut sa Suwe . \nMaha iy wal sbahun squw puqing balay na biruâ cyux syan squw ana nanuâ zyuwaw lga, iyat haziâ baqun minblaq ppwah krumaâ quw wal minblayqun miruâ na wayal sbahun na zyuwaw hyaâ la.",
"metadata-fields": "makiâ squw bnaykgan na pintkaykayâ ka qsahuy na Cyensâcryaw EXIF ga, syun niyaâ sa zzngazyan kwaraâ kin na Syasing, nanuâ iy mhiriq quw binrwan niyaâ Cyensâcryaw lga nanak yaquw nyux sbiruâ hugal ka pintkaykayâ qaniy msthay.\ncyuensâ cryaw bzinah hyaâ lga skun niyaâ sa llqingun qasa hyaâ. \n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Kinglabang",
+ "exif-bitspersample": "Weyuen na qutux qutux syangsuâ",
+ "exif-compression": "Ppkcikuy",
"exif-orientation": "Ppiray sa iyat ptkkiy ktan quw syasing",
"exif-xresolution": "Sweping Cyesituâ",
"exif-yresolution": "Cwecâ Cyesituâ",
+ "exif-stripoffsets": "Cyux kiâan na ggalan sinbbaq ana nanuâ",
"exif-primarychromaticities": "Spzyang balay na iroâ",
"exif-datetime": "Ryax na sinbah Tangâan squw zikang na sinbahan Tangâan",
"exif-make": "Squliq ka pkbalay squw Syasinkiâ",
"exif-model": "Laluâ na kinblayan Syasingkiâ",
"exif-software": "Ggalan pptzyuwaw sa zyuwaw na Tennaw",
+ "exif-copyright": "Cinpancyuen",
"exif-exifversion": "ktan sa kinblayan na Exif",
"exif-colorspace": "Hhalan mwazyaw sa qqlah sa iniâ ptnaq kktan na bbiruâ",
+ "exif-componentsconfiguration": "Qutux qutux imiâ na syngsuâ",
+ "exif-compressedbitsperpixel": "Pptzyuwaw sa ppkcikuy sa syasing",
+ "exif-usercomment": "Knayal kayâ na pptzyuwaw",
"exif-datetimeoriginal": "Ryax na sniâ sa Craw squw zikang na sniâ sa Craw",
"exif-datetimedigitized": "Ryax na minsuwexwaâ squw zikang na minsuwexwaâ",
+ "exif-exposuretime": "Zikang na pinsyaxan",
"exif-fnumber": "Kinsmyaxan na syasingkiâ",
+ "exif-exposureprogram": "Kkbalay niyaâ sa pisyaxan na syasingkiâ",
+ "exif-isospeedratings": "pspngan kinhaylaw na ISO",
+ "exif-maxaperturevalue": "Pzyang krahuâ sspngan kinsmyax na syasingkiâ",
"exif-subjectdistance": "Kintwahiq zyuwaw na sinngusan ppsingan",
"exif-lightsource": "Puqing na syax",
"exif-flash": "Pnilaw na pyax pyax",
"exif-subjectarea": "Rhzyal cyux ki'an na spzyang kkayal",
+ "exif-flashenergy": "Rnguâ kinlawkahan na pnilaw na pyax pyax",
"exif-subjectlocation": "Cyux ki'an na spzyang kkayal",
+ "exif-exposureindex": "Miruâ kinsnyaxan pinspngan na pspngan pinsyax na syasingkiâ",
+ "exif-filesource": "Tkhulan na Tangâan",
+ "exif-customrendered": "Sinpung niyaâ nanak kkbalay niyaâ sa syasing",
+ "exif-exposuremode": "Kinâiniâ ptnaq pinsyaxan na syax sa syasinkiâ",
"exif-whitebalance": "Wayt belns",
+ "exif-scenecapturetype": "Kininiâ ptnaq ppsyasing na rhzyal",
"exif-sharpness": "Srp nes",
+ "exif-devicesettingdescription": "Pinqzyuwan sa sniâ niyaâ sa kinblayan",
+ "exif-subjectdistancerange": "Lnglingay na kintwahiq zyuwaw na spzyang ppsingan squw ppsyasing",
+ "exif-gpslatituderef": "Peweâ iniâ ga zanweâ",
+ "exif-gpslongituderef": "Tngcin iniâ ga sicin",
+ "exif-gpsaltituderef": "Kkitaâ sapspngan sa kinwagiq na kaybat",
+ "exif-gpssatellites": "Pptzyuwaw sa spsukuryuw na wesing",
+ "exif-gpsstatus": "Zyuwaw na GPS suâ",
+ "exif-gpsdatestamp": "ryax na GPS",
"exif-keywords": "Biruâ na Galan sa hhkangi qsahuy na tenaw",
+ "exif-worldregioncreated": "Rhzyal na pinsyasing",
+ "exif-countrycreated": "Syasing pinsyasing na kokkaâ",
+ "exif-provinceorstatecreated": "Syasing pinsyasing qalang na syo krahuâ",
+ "exif-citycreated": "Syasing pinsyasing qalang hugal",
+ "exif-countrydest": "Pktâaniy quw kokkaâ",
+ "exif-provinceorstatedest": "Pktâaniy quw Syo iniâ ga Syuw",
+ "exif-citydest": "Pinkaykitaâ ka qalang hugal",
"exif-headline": "Laluâ",
+ "exif-credit": "Ppkbalay/Pbiq sa pincyuwagan",
"exif-source": "Tkhulan",
+ "exif-locationdestcode": "Aniy pinqzyuâ quw âniwan na banggoâ nquw cyux niyaâ kiâan",
+ "exif-objectcycle": "Hintgan zikang na metiâ",
+ "exif-contact": "Prinrak sa ggalan kinbaq zayzyuwaw",
"exif-writer": "Sinmung miruâ",
"exif-languagecode": "Kayâ:",
+ "exif-iimversion": "ubuy gluw bniruâ na IIM",
"exif-iimcategory": "Psâanak sa mkgluw",
"exif-identifier": "Biruâ na sinbbaq sa cyux nahaâ ptcyuwagun",
+ "exif-cameraownername": "Cinsyasingkiâ",
"exif-label": "Qinlah laluâ",
+ "exif-rightscertificate": "Cinkhulan sinhuzyay sa pklahang sa kinriâ na pinhtuw biruâ",
+ "exif-copyrightowner": "Cinpancyuen",
+ "exif-webstatement": "Sinbbaq sa kiriâ na pincyuwagan sa wangcaluâ",
+ "exif-licenseurl": "âubuy sa sswayal miq sa kinriâ na pinhtuw biruâ",
+ "exif-morepermissionsurl": "âniwan sa bbiq kinriâ na ggalan qinbaq",
+ "exif-originalimageheight": "Kinwagiq na iniâ qtabiy naâ",
+ "exif-originalimagewidth": "Kinglabang na iniâ qtabiy naâ",
"exif-compression-1": "Iniâ aniy pkcikuy naâ",
+ "exif-copyrighted-true": "Klhangan na Panchyen",
+ "exif-copyrighted-false": "Iniâ bqbaqiy ginllwan zyuwaw na cinkinriâ sa pinhtuw biruâ",
"exif-unknowndate": "Iniâ bqbaqiy ginlaylwan na ryax",
"exif-orientation-1": "Mutuw galan sa puqing pspngan kwaraâ na squliq",
"exif-orientation-2": "Ptbangun pssyuk",
+ "exif-colorspace-65535": "Iniâânblayqiy mitaâ quw biruâ knitaâ rawziq",
"exif-exposureprogram-0": "Iniâ syaniy kayâ naâ",
"exif-exposureprogram-1": "Szyuwiâ na qbaâ",
"exif-meteringmode-0": "Iniâ bqbaqiy ginlaylwan",
"exif-meteringmode-1": "Pinqsugan",
+ "exif-meteringmode-2": "Syun tay kska na ppsingan quw sqtuxan spzyang ssyan iroâ na syasing â musaâ cyose",
"exif-meteringmode-4": "Multi-Spot",
"exif-meteringmode-255": "Bzinah",
"exif-lightsource-0": "Iniâ bqbaqiy ginlaylwan",
@@ -730,10 +1049,21 @@
"exif-lightsource-4": "Pnilaw na pyax pyax",
"exif-lightsource-10": "Mzyulung",
"exif-lightsource-11": "Tay minkum",
+ "exif-lightsource-17": "Galan pspngan pnilaw A",
+ "exif-lightsource-18": "Galan pspngan pnilaw B",
+ "exif-lightsource-19": "Galan pspngan pnilaw C",
+ "exif-flash-fired-0": "Iniâ gyahiy naâ quw pnilaw na pyax pyax",
+ "exif-flash-fired-1": "Wal gyahan quw pnilaw na pyax pyax",
+ "exif-flash-function-1": "Ungat btthuzyay na ppilaw na pyax pyax",
+ "exif-flash-redeye-1": "iyat kktalah rawziq na syasing",
"exif-focalplaneresolutionunit-2": "incun",
"exif-sensingmethod-1": "Iniâ syaniy kayâ naâ",
+ "exif-sensingmethod-7": "Kikay na kkinsaâ sa san sengse",
+ "exif-scenetype-1": "Zgaâ na pinsyasing",
"exif-customrendered-0": "Kwaraâ hyaâ ga cngsyuâ",
"exif-exposuremode-1": "Pinspsyax na squliq",
+ "exif-whitebalance-0": "Mutuw niyaâ white balance nanak",
+ "exif-whitebalance-1": "Szyuwiâ na qbaâ quw white balance",
"exif-scenecapturetype-0": "Galan pspngan",
"exif-scenecapturetype-2": "Syasing na squliq",
"exif-scenecapturetype-3": "Knitaâ sa mlhngan na qlqalang",
@@ -753,19 +1083,33 @@
"exif-gpslatitude-s": "Nanweâ",
"exif-gpslongitude-e": "Ist longzicyut",
"exif-gpslongitude-w": "Sicing",
+ "exif-gpsstatus-a": "Cyuw tmrang sukuryuw naâ",
+ "exif-gpsstatus-v": "Sukuryuw squw musaâ mâubuy",
+ "exif-gpsspeed-k": "Qutux spung ga piraâ kirometaâ",
+ "exif-gpsspeed-m": "Qutux spung ga piraâ Mayruâ",
"exif-gpsdestdistance-k": "Kirometaâ",
"exif-gpsdestdistance-m": "Inriâ",
"exif-gpsdestdistance-n": "Hayriâ",
+ "exif-gpsdop-fair": "Maykuraâ tay kskaâ ($1)",
+ "exif-objectcycle-b": "Sasan ruw babaw kryaxan",
"exif-ycbcrpositioning-1": "Kskaâ",
"exif-dc-contributor": "Minniq",
"exif-dc-date": "Ryax",
"exif-dc-rights": "Pcingan na sinpngan",
+ "exif-iimcategory-clj": "Magal qinzqihan squw Horit",
+ "exif-iimcategory-fin": "Kezay squw psyubay",
"exif-iimcategory-hth": "Blaq hiâ",
+ "exif-iimcategory-lif": "Qaynxan squw ârngawan lmawsay",
+ "exif-iimcategory-rel": "Sinhyan gagaâ squw sinhyan",
+ "exif-iimcategory-sci": "Kagak squw gizit na kagak",
"exif-iimcategory-spo": "Tayyok",
"exif-iimcategory-wea": "Kayal",
"exif-urgency-normal": "Galan pspngan ($1)",
+ "exif-urgency-low": "Rrawq ($1)",
+ "exif-urgency-high": "Kinwagiq ($1)",
"namespacesall": "kwaraâ",
"monthsall": "kwaraâ",
+ "confirm-purge-title": "Kwagiy quw zngazyan qaniy",
"confirm_purge_button": "Wal balay",
"confirm-watch-button": "Wal balay",
"confirm-unwatch-button": "Wal balay",
@@ -774,23 +1118,36 @@
"imgmultipageprev": "âllpgan tay glaing",
"imgmultipagenext": "llpgan tay suruw â",
"imgmultigo": "Awâ!",
+ "img-lang-default": "(pinnamaâ smiâ na kayâ)",
"img-lang-go": "Musaâ",
"ascending_abbrev": "pskkrawn paybkuw",
"table_pager_next": "Llpgan tay suruw",
"table_pager_prev": "Llpgan tay glaing",
"table_pager_first": "Târingan balay na llpgan",
"table_pager_last": "Pucing balay llpgan",
+ "table_pager_limit_label": "Llpgan na kinpzyux na peziâ:",
"table_pager_limit_submit": "Pawsun",
+ "autosumm-blank": "Pskawngaciy quw biruâ qsahuy na zngazyan",
+ "autosumm-newblank": "Psârux ungat ana nanuâ na zngazyan",
+ "watchlistedit-normal-title": "Srâzyut miruâ sa kkitaâ binkgan sa kktan",
"watchlistedit-raw-titles": "Laluâ:",
+ "watchlistedit-raw-submit": "Psqgiqas smbah kkitaâ sa bnkuw na kktan",
"watchlistedit-clear-titles": "Laluâ:",
+ "watchlisttools-clear": "Laxiy kwaraâ quw kkitaâ squw kktan binkgan",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mpkal]])",
"version": "Ubuy gluw bbiruâ ni",
+ "version-skins": "Ktan tay babaw ka wayal syun qsahuy na pptzyuwaw",
+ "version-specialpages": "Kin iniâ ptnaq na zngazyan",
+ "version-antispam": "Hntuy sa kana wahiy na giway ungat zyuwaw na saysyup",
"version-other": "Bzinah",
+ "version-mediahandlers": "Hantora na metiâ",
+ "version-no-ext-name": "[iniâ slluy ]",
"version-skin-colheader-name": "Ktan na rawziq",
"version-ext-colheader-version": "Ubuy gluw bbiruâ ni",
"version-ext-colheader-license": "Biruâ na gagaâ nqu snwayal hmriq sa kinriâ",
"version-ext-colheader-description": "Miblaq pnqzyuâ sa zyuwaw",
"version-poweredby-others": "bzinah",
+ "version-software": "Wayal syun qsahuy na pptzyuwaw",
"version-software-version": "Ubuy gluw bbiruâ ni",
"version-entrypoints": "Kkzyup URL",
"version-entrypoints-header-url": "URL",
@@ -801,74 +1158,144 @@
"redirect-submit": "Mtzyuwaw",
"redirect-lookup": "Hmkangiâ:",
"redirect-user": "Mning ID",
+ "redirect-page": "Zngazyan na ID",
"redirect-file": "Laluâ na tangâan",
+ "redirect-logid": "Bbiruâ krayryax ID",
"redirect-not-exists": "Ini' âluwiy biruâ na llpgan",
+ "fileduplicatesearch": "Hkangiâ mtpangaâ na Tangâan",
"fileduplicatesearch-filename": "Laluâ na tangâan:",
"fileduplicatesearch-submit": "Hhkangiâ",
"specialpages": "Mnanak na zzngayan",
+ "specialpages-group-other": "Bzinah ka iniâ ptnaq na zngazyan",
+ "specialpages-group-users": "Pptzyuwawsquwkinriâ na ptzyuwagun",
+ "specialpages-group-wiki": "Snliâ kwaraâ biruâ zyuwaw na ana nanuâ squw qayqayaâ",
+ "tags": "Kya rnguâ na sinbah sa qnlah laluâ",
"tag-filter": "[[Special:Tags|qinlah laluâ]]hhkangiâ:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|qinlah laluâ}}]]: $2)",
+ "tag-mw-contentmodelchange": "sbah quw pinsulung sa inrkyasan bniruâ niyaâ sa qsahuy",
"tags-title": "Qinlah laluâ",
"tags-source-header": "Tkhulan",
"tags-active-header": "Gyahiy?",
+ "tags-hitcount-header": "Wal spyawciâna sinbah",
"tags-active-yes": "Awâ",
"tags-active-no": "Iyat",
+ "tags-source-extension": "Zwatiâ quw smiâ kayâ",
"tags-edit": "Smrâzyut miruâ",
"tags-delete": "âmuyut",
"tags-deactivate": "phngagun",
+ "tags-hitcount": "min$1 {{PLURAL:$1|smbah}}",
+ "tags-create-heading": "Psârux quw giqas na laluâ na qinlah",
+ "tags-create-tag-name": "Aluâ na qinlah biruâ:",
"tags-create-reason": "âringan:",
"tags-create-submit": "Psârux",
"tags-delete-reason": "âringan:",
"tags-activate-reason": "âringan:",
"tags-deactivate-reason": "âringan:",
+ "tags-edit-title": "Srâzyut miruâ qinlah laluâ",
"tags-edit-existing-tags-none": "Ungat",
"tags-edit-reason": "âringan:",
+ "tags-edit-success": "Wal siy glaniy kya quw sinbah.",
"comparepages": "Pspung sa zzngazyan",
+ "compare-page1": "Tay 1 gnyahan llpgan",
"compare-page2": "Zzngayan 2",
"compare-submit": "Pspngun",
"diff-form": "Kinâiniâ ptnaq",
"permanentlink": "Mrayrhuw na pinâubuy",
+ "htmlform-required": "Llpgan qaniy hyaâ ga siy kiy brwan.",
"htmlform-submit": "Pawsun",
+ "htmlform-reset": "Psbzinah quw walmsbah",
"htmlform-selectorother-other": "Bzinah",
"htmlform-no": "iyat",
"htmlform-yes": "Awâ",
"logentry-delete-delete": "$1 {{GENDER:$2|wal laxan}}zngayan $3",
+ "revdelete-content-hid": "wal lqingun quw binrwan tay qsahuy",
+ "revdelete-content-unhid": "lzxiy quw lnqing qsahuy na bnrwan",
"logentry-move-move": "$1 {{GENDER:$2|wal shzyun}}zngyan $3 squw $4",
"logentry-newusers-create": "Wayal tmasuq {{GENDER:$2|psârux sq }} quw cin canghaw $1",
"logentry-upload-upload": "$1 {{GENDER:$2|wal pawsun }} $3",
+ "log-name-managetags": "Qmlah sa laluâ na bniruâ kklahang",
"rightsnone": "(ungat)",
"feedback-back": "âbzinah",
"feedback-close": "Tmasuq",
+ "feedback-external-bug-report-button": "Kaylaniy quw kya âzzyuwaw na gizit",
+ "feedback-dialog-title": "Stwaniy quw bniq suâ kayâ",
"feedback-message": "Pintkaykayâ:",
"feedback-subject": "Spzyang na ptzyuwaw:",
"feedback-submit": "Pawsun",
+ "feedback-useragent": "âmyunaw sa pptzyuwaw:",
"searchsuggest-search": "Hhkangiâ {{SITENAME}}",
"searchsuggest-containing": "kwaraâ kin na...",
+ "limitreport-walltime": "Spzyang balay pincyuwagan na zikang",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bzyaqan kkayal na llpgan}}",
+ "limitreport-templateargumentsize": "Pspngan kinkrahuâ na chansuâ na Mopan",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bzyaqan kkayal na llpgan}}",
+ "limitreport-expansiondepth": "Spzyang balay krahuâ kinzzik na gnyahan",
+ "expand_templates_input": "Brwaniy quw biruâ:",
"expand_templates_output": "Pcingan balay",
+ "expand_templates_xml_output": "pawsaâ quw XML",
"expand_templates_ok": "Wal balay",
"expand_templates_preview": "Pnaynamaâ mitaâ",
"pagelang-language": "Kayâ:",
+ "pagelang-use-default": "Ptzyawganiy sa mnaynamaâ sniâ na kayâ",
+ "pagelang-select-lang": "Wazyaw kayâ",
"pagelang-reason": "âringan",
"pagelang-submit": "Pawsun",
+ "log-name-pagelang": "Bniruâ sa sinbah na kayâ",
+ "mediastatistics": "Pinsqun plpuw sa ggalang sinbbaq na metiâ",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 bzyaqan kkayal na llpgan}} ($2; $3%)",
+ "mediastatistics-table-extensions": "Musaâ baqun sptzyuwaw na estensyong",
+ "mediastatistics-table-count": "Kinpzyux na Tangâan",
"mediastatistics-header-unknown": "Iniâ bqbaqiy ginlaylwan",
+ "mediastatistics-header-multimedia": "Smppzyux squw zyuwaw na twometiâ",
"mediastatistics-header-text": "Biruâ mlmlux",
+ "mediastatistics-header-archive": "Wal pkcikuyun ksuâ",
+ "headline-anchor-title": "âubuy sa biruâ gnaygay sqaniy",
"special-characters-group-latin": "Biruâ na lating",
+ "special-characters-group-latinextended": "Pinslabang na biruâ na Latin",
"special-characters-group-symbols": "Sniâ nahaâ sa gagaâ na bbiruâ",
"special-characters-group-greek": "Biruâ na Grisyaâ",
+ "special-characters-group-greekextended": "Pinsglabang biruâ na Girisyaâ",
+ "special-characters-group-arabicextended": "Pinsglabang biruâ na Arabiyaâ",
"special-characters-group-persian": "Przn",
"special-characters-group-bangla": "Biruâ na Bengr",
+ "special-characters-group-gujarati": "Biruâ na kucyarati",
"special-characters-group-thai": "Biruâ na Taykok",
"special-characters-group-khmer": "Biru' na Khmer",
+ "mw-widgets-dateinput-no-date": "Iniâ wazyaw ryax",
+ "mw-widgets-mediasearch-noresults": "Ktan ga ungat quw pcingan balay na zyuwaw.",
"mw-widgets-titleinput-description-new-page": "ungat zzngayan",
"mw-widgets-categoryselector-add-category-placeholder": "Twangiy sa pintbcyan...",
+ "mw-widgets-usersmultiselect-placeholder": "Twangiy pzyux naâ...",
+ "randomrootpage": "Tay puqing balay zngazyan nquw mutuw siy pspung sa inlungan nanak phtuw angazyan",
+ "log-action-filter-block": "Htzyaniy quw gluw na mmntnaq:",
+ "log-action-filter-delete": "âzyutan quw gluw na mmntnaq:",
+ "log-action-filter-import": "Pawsaâ qsahuy quw gluw na mmntnaq:",
+ "log-action-filter-move": "Hzâaniy quw ubuy na mtntnaq:",
+ "log-action-filter-patrol": "Musaâ gmawzyaw sa gluw na mmntnaq:",
+ "log-action-filter-protect": "Kklhangiy sa ubuy na mtntnaq na...:",
+ "log-action-filter-upload": "Pawsaâ sa kktan quw gluw na mmntnaq:",
"log-action-filter-all": "Kwaraâ biruâ na zngyan",
"log-action-filter-block-block": "Qmhut",
+ "log-action-filter-delete-delete_redir": "Tâaring pawsaâ sa âmumuk sa binrwan",
+ "log-action-filter-delete-restore": "Laxiy quw akiâ llaxan na zngazyan",
"log-action-filter-delete-event": "Pzyutan binrwan",
+ "log-action-filter-managetags-deactivate": "Laxiy gyahiy quw âuzyut na qnlah biruâ",
"log-action-filter-patrol-patrol": "hkangyun na qbaâ",
+ "log-action-filter-protect-move_prot": "Wal shzyun quw kklahang",
"log-action-filter-rights-rights": "Sbah na qbaâ",
+ "log-action-filter-suppress-event": "Laxiy aniy pkitaâ quw bniruâ",
+ "log-action-filter-suppress-revision": "Sbah quw qnihut sa pkaykitaâ",
+ "log-action-filter-suppress-delete": "Laxiy pktâaniy quw zngazyan",
+ "authmanager-authplugin-setpass-failed-title": "Wal yaqih quw sinbah sa mimaâ",
+ "authmanager-authplugin-setpass-bad-domain": "Ungat zyuwaw na wangyuâ.",
"authmanager-email-label": "e-meyoâ",
- "authmanager-email-help": "Zyusyo na e-meyoâ"
+ "authmanager-email-help": "Zyusyo na e-meyoâ",
+ "cannotauth-not-allowed-title": "Iniâ pintayhuk pcingan sinpngan na kiriâ",
+ "changecredentials": "Sbah quw sinrhuw sinhuzyay",
+ "credentialsform-provider": "Minsinrhuw sinhuzyay gluw na mtntnaq:",
+ "credentialsform-account": "Laluâ na canghaw",
+ "linkaccounts-success-text": "Wal pâubuyquw canghaw.",
+ "unlinkaccounts": "Laxiy quw âubuy Canghaw",
+ "revid": "sinbah sa $1",
+ "pageid": "Zngazyan na ID $1"
}
diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json
index c4ffd629c0..50244e36a3 100644
--- a/languages/i18n/uk.json
+++ b/languages/i18n/uk.json
@@ -805,6 +805,7 @@
"parser-template-loop-warning": "ÐиÑвлена пеÑÐ»Ñ Ñ ÑаблонаÑ
: [[$1]]",
"template-loop-category": "СÑоÑÑнки з пеÑлÑми ÑаблонÑв",
"template-loop-category-desc": "Ð¦Ñ ÑÑоÑÑнка мÑÑÑиÑÑ Ð¿ÐµÑÐ»Ñ ÑаблонÑв, ÑобÑо Ñаблон, Ñкий ÑекÑÑÑивно Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ Ñам Ñебе.",
+ "template-loop-warning": "ÐопеÑедженнÑ: Ð¦Ñ ÑÑоÑÑнка викликаÑ[[:$1]], Ñо ÑпÑиÑинÑÑ Ð¿ÐµÑÐ»Ñ Ð² ÑÐ°Ð±Ð»Ð¾Ð½Ñ (неÑкÑнÑенний ÑекÑÑÑивний виклик).",
"parser-template-recursion-depth-warning": "ÐеÑевиÑене Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ð»Ð¸Ð±Ð¸Ð½Ð¸ ÑекÑÑÑÑÑ ÑÐ°Ð±Ð»Ð¾Ð½Ñ ($1)",
"language-converter-depth-warning": "ÐеÑевиÑене Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð³Ð»Ð¸Ð±Ð¸Ð½Ð¸ мовного конвеÑÑоÑа ($1)",
"node-count-exceeded-category": "СÑоÑÑнки, на ÑкиÑ
пеÑевиÑено лÑÑилÑник вÑзлÑв",
@@ -1472,6 +1473,8 @@
"rcfilters-watchlist-markseen-button": "ÐознаÑиÑи вÑÑ Ð·Ð¼Ñни Ñк пеÑеглÑнÑÑÑ",
"rcfilters-watchlist-edit-watchlist-button": "РедагÑваÑи ÐÐ°Ñ ÑпиÑок ÑÑоÑÑнок, за Ñкими Ðи ÑпоÑÑеÑÑгаÑÑе",
"rcfilters-watchlist-showupdated": "ÐмÑни до ÑÑоÑÑнок, ÑÐºÑ Ðи не вÑдвÑдÑвали з моменÑÑ Ð·Ð´ÑйÑÐ½ÐµÐ½Ð½Ñ Ð·Ð¼Ñн, видÑÐ»ÐµÐ½Ñ Ð¶Ð¸Ñним , Ñз ÑÑлÑÑними маÑкеÑами.",
+ "rcfilters-preference-label": "ÐÑиÑ
оваÑи покÑаÑÐµÐ½Ñ Ð²ÐµÑÑÑÑ ÐовиÑ
ÑедагÑванÑ",
+ "rcfilters-preference-help": "СкаÑовÑÑ Ð·Ð¼ÑÐ½Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñ 2017 ÑÐ¾ÐºÑ Ñа вÑÑ ÑнÑÑÑÑменÑи, Ð´Ð¾Ð´Ð°Ð½Ñ ÑÐ¾Ð´Ñ Ð¹ пÑзнÑÑе.",
"rcnotefrom": "ÐижÑе знаÑ
одÑÑÑÑÑ {{PLURAL:$5|ÑедагÑваннÑ}} з $3, $4 (вÑдобÑажено до $1 ).",
"rclistfromreset": "СкинÑÑи вибÑÑ Ð´Ð°Ñи",
"rclistfrom": "ÐоказаÑи ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑинаÑÑи з $3 $2.",
@@ -2392,6 +2395,7 @@
"sp-contributions-newonly": "ÐоказÑваÑи ÑÑлÑки ÑедагÑваннÑ, ÑÐºÑ Ñ ÑÑвоÑеннÑми ÑÑоÑÑнок",
"sp-contributions-hideminor": "ÐÑиÑ
оваÑи Ð¼Ð°Ð»Ñ Ð¿Ñавки",
"sp-contributions-submit": "ÐоÑÑк",
+ "sp-contributions-outofrange": "Ðеможливо показаÑи бÑдÑ-ÑÐºÑ ÑезÑлÑÑаÑи. ÐапиÑÑваний дÑапазон IP-адÑÐµÑ Ñ Ð±ÑлÑÑим, анÑж CIDR-лÑмÑÑ Ñ /$1.",
"whatlinkshere": "ÐоÑÐ¸Ð»Ð°Ð½Ð½Ñ ÑÑди",
"whatlinkshere-title": "СÑоÑÑнки, Ñо поÑилаÑÑÑÑÑ Ð½Ð° «$1»",
"whatlinkshere-page": "СÑоÑÑнка:",
diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json
index 77474e8759..af6289705b 100644
--- a/languages/i18n/zh-hans.json
+++ b/languages/i18n/zh-hans.json
@@ -826,6 +826,7 @@
"parser-template-loop-warning": "æ£æ¥å°æ¨¡æ¿å¾ªç¯ï¼[[$1]]",
"template-loop-category": "æ模æ¿å¾ªç¯ç页é¢",
"template-loop-category-desc": "页é¢åå¨æ¨¡æ¿å¾ªç¯ï¼å°±æ¯éå½è¿è¡èªæè°ç¨ç模æ¿ã",
+ "template-loop-warning": "è¦åï¼ æ¤é¡µé¢è°ç¨[[:$1]]ï¼è¿å¯¼è´äºæ¨¡æ¿å¾ªç¯ï¼æ ééå½è°ç¨ï¼ã",
"parser-template-recursion-depth-warning": "模æ¿éå½æ·±åº¦è¶éï¼$1ï¼",
"language-converter-depth-warning": "åè¯è½¬æ¢å¨æ·±åº¦è¶éï¼$1ï¼",
"node-count-exceeded-category": "页é¢çèç¹æ°è¶
åºéå¶",
@@ -1490,6 +1491,8 @@
"rcfilters-watchlist-markseen-button": "æ è®°æææ´æ¹ä¸ºå·²æ¥ç",
"rcfilters-watchlist-edit-watchlist-button": "ç¼è¾æ¨ççè§é¡µé¢çå表",
"rcfilters-watchlist-showupdated": "èªæ´æ¹åç以æ¥ï¼å¯¹æ¨å°æªè®¿é®ç页é¢ååºçæ´æ¹ä»¥ç²ä½ æ¾ç¤ºï¼å¹¶å¸¦æç«ä½æ è®°ã",
+ "rcfilters-preference-label": "éèæ¹è¿çæè¿æ´æ¹çæ¬",
+ "rcfilters-preference-help": "è¿åå°2017å¹´çé¢éæ°è®¾è®¡çï¼å¹¶éæ°æ·»å è¿ä»¥åæ°å¢çå·¥å
·ã",
"rcnotefrom": "ä¸é¢{{PLURAL:$5|æ¯}}$3 $4 ä¹åçæ´æ¹ï¼æå¤æ¾ç¤º$1 个ï¼ã",
"rclistfromreset": "éç½®æ¶é´éæ©",
"rclistfrom": "æ¾ç¤º$3 $2ä¹åçæ°æ´æ¹",
diff --git a/maintenance/dictionary/mediawiki.dic b/maintenance/dictionary/mediawiki.dic
index e7ba8faf20..7c3c95d712 100644
--- a/maintenance/dictionary/mediawiki.dic
+++ b/maintenance/dictionary/mediawiki.dic
@@ -3181,7 +3181,7 @@ prefixsearchdisabled
prefs
prefsection
prefsnologintext2
-prefsubmit
+prefcontrol
preload
preloads
preloadtitle
diff --git a/maintenance/language/zhtable/toCN.manual b/maintenance/language/zhtable/toCN.manual
index 6975e2503c..a63149e6a4 100644
--- a/maintenance/language/zhtable/toCN.manual
+++ b/maintenance/language/zhtable/toCN.manual
@@ -2269,6 +2269,7 @@
è¡åé»è©± 移å¨çµè¯
æµåé»è©± 移å¨çµè¯
æ¸ææ© è°å¶è§£è°å¨
+網åå稱 åå
èé ä¹é¨
è²éæ¯ ä¼¯å©å
¹
ç¶å¾·è§ ä½å¾è§
@@ -2343,6 +2344,7 @@
馬ç¾å°å¤« 马å°ä»£å¤«
馬ç¾ä» 马è³ä»
馬å©å
±åå 马éå
񆆫
+æ±å å£ä½©å¾·ç½èæ
笨豬跳 蹦æè·³
ç»ç´§è·³ 蹦æè·³
çé» ç¬åª
@@ -2400,6 +2402,9 @@
è³æç» æ¬æç»
è³Â·æç» æ¬Â·æç»
æ巴馬 奥巴马
+åç´Â·å·æ® å纳德·ç¹ææ®
+ç¶å·ç¹ææ® å纳德·ç¹ææ®
+ç¶å¥´Â·ç¹ææ® å纳德·ç¹ææ®
åé åæé²
å°åé å°åé©
寮人æ°æ°ä¸»å
±åå èæ人æ°æ°ä¸»å
񆆫
@@ -2480,6 +2485,8 @@
ç¾æ
é ç¾æ
大
ä¸è©å¸ æ§éå±±
è·éæ´» 好è±å
+è·éæ´»é è·éæ´»é
+è·éæ´»å»£å ´ è·é活广åº
麻è©è«¸å¡ 马è¨è¯¸å¡
ä¼å©è«¾ ä¼å©è¯ºä¼
ä¼å©è«¾ä¼ ä¼å©è¯ºä¼
@@ -2501,6 +2508,8 @@
éé« åºä»¶
å¯è® åªè¯»
ä½æ¥ç³»çµ± æä½ç³»ç»
+è¡åä½æ¥ç³»çµ± 移å¨æä½ç³»ç»
+æµåä½æ¥ç³»çµ± 移å¨æä½ç³»ç»
å¤æç¨å¼ æ件
é»æ¶é« æ¶ä½ç®¡
é¡¯ç¤ºå¡ æ¾å¡
@@ -2576,7 +2585,6 @@ Aåèç ç²åèç
è®æ°è¦æ¨¡ éæ°é级
è®æ°å°éè¦æ¨¡ éæ°å°éè§æ¨¡
é»å
ç¹å¶ éæ°
-æ©ç æ¦ç
è¡æ¿ç¸½è£ é¦å¸æ§è¡å®
å·è¡é·ï¼ é¦å¸æ§è¡å®ï¼
å·è¡é·ã é¦å¸æ§è¡å®ã
@@ -2624,6 +2632,7 @@ Aåèç ç²åèç
æ¸ä½æè¡ æ°åææ¯
æ¸ä½è¨è æ°åä¿¡å·
æ¸ç¢¼è¨è æ°åä¿¡å·
+æ¸ä½é³æ¨ æ°åé³ä¹
æ¸ä½å æ°åå
è¡å網路 移å¨ç½ç»
æµå網絡 移å¨ç½ç»
@@ -2672,3 +2681,4 @@ Aåèç ç²åèç
è¡äººè·¯æ è¡äººè·¯æ
å¡è è¢ å¡æè¢
çé¾éºµ ä¹å¬é¢
+æ«ç´¢ æ¯ç´¢
diff --git a/maintenance/language/zhtable/toHK.manual b/maintenance/language/zhtable/toHK.manual
index 7a07259eec..b71764ad7c 100644
--- a/maintenance/language/zhtable/toHK.manual
+++ b/maintenance/language/zhtable/toHK.manual
@@ -14,7 +14,6 @@
å¦å° å¦æ±
å¼¹ç å° å½ç æ±
æå° æºæ±
-å°å¸ æ±å¸
å°å æ±æ
å°ç¯ æ±ç
ååå° å¯«åæ±
@@ -2664,6 +2663,9 @@
æ©å¨äºº æ©æ¢°äºº
移å¨çµè¯ æµåé»è©±
è¡åé»è©± æµåé»è©±
+æä½ç³»ç» ä½æ¥ç³»çµ±
+移å¨æä½ç³»ç» æµåä½æ¥ç³»çµ±
+è¡åä½æ¥ç³»çµ± æµåä½æ¥ç³»çµ±
æ¸ææ© èª¿å¶è§£èª¿å¨
çä¿¡ çè¨
ç°¡è¨ çè¨
@@ -2896,6 +2898,8 @@
è³æç» æ¬æç»
è³Â·æç» æ¬Â·æç»
æ巴馬 奧巴馬
+åç´Â·å·æ® ç¶å·ç¹ææ®
+å纳德·ç¹ææ® ç¶å·ç¹ææ®
æç»Â·å¸æ ç½é«æ¦
ççç ççç
Aè ç²è
@@ -3007,6 +3011,8 @@ IPå°å IPä½å
æ¸ä½æè¡ æ¸ç¢¼æè¡
æ°åä¿¡å· æ¸ç¢¼è¨è
æ¸ç¢¼è¨è æ¸ç¢¼è¨è
+æ°åé³ä¹ æ¸ç¢¼é³æ¨
+æ¸ä½é³æ¨ æ¸ç¢¼é³æ¨
æ°åå æ¸ç¢¼å
æ¸ä½å æ¸ç¢¼å
è¡å網路 æµå網絡
diff --git a/maintenance/language/zhtable/toSimp.manual b/maintenance/language/zhtable/toSimp.manual
index 6f3304fce8..56400c35d4 100644
--- a/maintenance/language/zhtable/toSimp.manual
+++ b/maintenance/language/zhtable/toSimp.manual
@@ -184,6 +184,7 @@
å´è
æè
å´è æè
å´èª¿ æè°
+å´å³¶ æå²
è« è å§å
æ
«æ
ææ¿
éå
æ éå
æ
diff --git a/maintenance/language/zhtable/toTW.manual b/maintenance/language/zhtable/toTW.manual
index d983932fe4..16e275168d 100644
--- a/maintenance/language/zhtable/toTW.manual
+++ b/maintenance/language/zhtable/toTW.manual
@@ -508,7 +508,8 @@
馬å©è 馬éè
é士满 éå¥è
è·éæ´» 好èå¡¢
-è·ææ´»é è·ææ´»é
+è·éæ´»é è·éæ´»é
+è·éæ´»å»£å ´ è·éæ´»å»£å ´
ç»´å°äº¬ç¾¤å² ç¶äº¬ç¾¤å³¶
ç¶ç¾äº¬ç¾¤å³¶ ç¶äº¬ç¾¤å³¶
纽é»æ ç´åè¬
@@ -533,6 +534,7 @@
èç¹å©ç¾ èç¹å©
æ¯å ªççº³ç»´äº æ¯å ªå°é£ç¶äº
æ¯å ªçç´ç¶äº æ¯å ªå°é£ç¶äº
+å£ä½©å¾·ç½èæ æ±å
麦å
å° éº¥å¯
è¿å
å° éº¥å¯
é¯è³æ¯Â·å·´éåç¾
é¯æ¬Â·å·´çåç¾
@@ -604,6 +606,10 @@
è¯å°¼è¿ª ç迺迪
奥巴马 æ巴馬
奧巴馬 æ巴馬
+ç¹ææ® å·æ®
+å纳德·ç¹ææ® åç´Â·å·æ®
+ç¶å·ç¹ææ® åç´Â·å·æ®
+ç¶å¥´Â·ç¹ææ® åç´Â·å·æ®
æ¦ç æ©ç
ç¯çç ççç
ç²è Aè
@@ -619,6 +625,8 @@
æºè½å¡ æºæ
§å¡
æ¸æ庫 è³æ庫
æä½ç³»ç» ä½æ¥ç³»çµ±
+移å¨æä½ç³»ç» è¡åä½æ¥ç³»çµ±
+æµåä½æ¥ç³»çµ± è¡åä½æ¥ç³»çµ±
人æºäº¤äº 人æ©äºå
交äºè®¾è®¡ äºåè¨è¨
äºèç½ç» 網é網路
diff --git a/maintenance/language/zhtable/trad2simp.manual b/maintenance/language/zhtable/trad2simp.manual
index e5b05ffec2..1912bcf240 100644
--- a/maintenance/language/zhtable/trad2simp.manual
+++ b/maintenance/language/zhtable/trad2simp.manual
@@ -135,6 +135,7 @@ U+056D9å|U+056E0å |
U+05705å
|U+051FDå½|
U+0577Få¿|U+09644é|
U+0579Cå|U+0579Bå|
+U+057BBå»|U+0575Då|
U+0585Aå¡|U+051A2å¢|
U+0585Få¡|U+0846Cè¬|
U+05872塲|U+0573Aåº|
diff --git a/maintenance/language/zhtable/tradphrases.manual b/maintenance/language/zhtable/tradphrases.manual
index 9b2e081019..c5d5fd7350 100644
--- a/maintenance/language/zhtable/tradphrases.manual
+++ b/maintenance/language/zhtable/tradphrases.manual
@@ -776,6 +776,7 @@
éªçªè¢å
çå
é±å
+å çµ
é¥é¥
ä¹¾è
æ¯è
@@ -1095,6 +1096,7 @@
ä¸ç°½ç¼
ä¸ç°½ç´
ä¸ç°½äº
+ä¸ç°½è
ä¸ç°½å
ä¸ç°½å
ä¸ç°½æ¶
@@ -1105,6 +1107,7 @@
ä¸ç°½ç¼
ä¸ç°½ç´
ä¸ç°½äº
+ä¸ç°½è
ä¸ç°½å
ä¸ç°½å
ä¸ç°½æ¶
@@ -1115,6 +1118,7 @@
ä¸ç°½ç¼
ä¸ç°½ç´
ä¸ç°½äº
+ä¸ç°½è
çç¡®
磽确
ç¡®ç
@@ -1868,6 +1872,7 @@
山谷 #åè©ç¨
æºè°·
æ¼è°·
+æé²è°·ç©èª
äºç¾äºº
ç·ç·»
æ°äº
@@ -2364,7 +2369,6 @@
å¯èªå¶
å°å女
å°åå«
-å°å¸æ¯
å°å·
å°é¢¨ç©©å¥
ç©©å¥çå°é¢¨
@@ -2393,6 +2397,7 @@
尸鳩
尸佼
å°¸å
+å°¸ç¾
å°¸ç¾
ç²¾è
æ¯å©å°¸ä½
å°¸æ£ä½
@@ -3682,6 +3687,7 @@
èç½ç¼
ç¼çæ
ç¼çæ³
+æç¼ç
å¤äººæäº
æ人æäº
äºæ
@@ -3710,3 +3716,7 @@
æ§å¥ææ²
ç®èå¸
é²åç®è
+éç³»å
+é系統
+éç³»æ
+éç³»ç§
diff --git a/maintenance/language/zhtable/tradphrases_exclude.manual b/maintenance/language/zhtable/tradphrases_exclude.manual
index c622560176..3ab14eb199 100644
--- a/maintenance/language/zhtable/tradphrases_exclude.manual
+++ b/maintenance/language/zhtable/tradphrases_exclude.manual
@@ -776,3 +776,5 @@
éäº
é£äº
ç®è
+æ¢å¹¹
+檯å¸
diff --git a/maintenance/populateIpChanges.php b/maintenance/populateIpChanges.php
index eb60f801cd..ffb8c43b30 100644
--- a/maintenance/populateIpChanges.php
+++ b/maintenance/populateIpChanges.php
@@ -67,12 +67,12 @@ TEXT
$this->output( "Copying IP revisions to ip_changes, from rev_id $start to rev_id $end\n" );
while ( $blockStart <= $end ) {
- $cond = "rev_id >= $blockStart AND rev_user = 0 ORDER BY rev_id ASC LIMIT " . $this->mBatchSize;
$rows = $dbw->select(
'revision',
[ 'rev_id', 'rev_timestamp', 'rev_user_text' ],
- $cond,
- __METHOD__
+ [ "rev_id >= $blockStart", 'rev_user' => 0 ],
+ __METHOD__,
+ [ 'ORDER BY' => 'rev_id ASC', 'LIMIT' => $this->mBatchSize ]
);
if ( !$rows || $rows->numRows() === 0 ) {
@@ -82,19 +82,15 @@ TEXT
$this->output( "...checking $this->mBatchSize revisions for IP edits that need copying, " .
"starting with rev_id $blockStart\n" );
+ $insertRows = [];
foreach ( $rows as $row ) {
// Double-check to make sure this is an IP, e.g. not maintenance user or imported revision.
if ( IP::isValid( $row->rev_user_text ) ) {
- $dbw->insert(
- 'ip_changes',
- [
- 'ipc_rev_id' => $row->rev_id,
- 'ipc_rev_timestamp' => $row->rev_timestamp,
- 'ipc_hex' => IP::toHex( $row->rev_user_text ),
- ],
- __METHOD__,
- 'IGNORE'
- );
+ $insertRows[] = [
+ 'ipc_rev_id' => $row->rev_id,
+ 'ipc_rev_timestamp' => $row->rev_timestamp,
+ 'ipc_hex' => IP::toHex( $row->rev_user_text ),
+ ];
$revCount++;
}
@@ -104,6 +100,13 @@ TEXT
$blockStart++;
+ $dbw->insert(
+ 'ip_changes',
+ $insertRows,
+ __METHOD__,
+ 'IGNORE'
+ );
+
$lbFactory->waitForReplication();
usleep( $throttle * 1000 );
}
diff --git a/resources/Resources.php b/resources/Resources.php
index f0aa9ecbca..10786dacaa 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -1091,6 +1091,9 @@ return [
'scripts' => [
'resources/src/mediawiki/htmlform/htmlform.Checker.js',
],
+ 'dependencies' => [
+ 'jquery.throttle-debounce',
+ ],
'targets' => [ 'desktop', 'mobile' ],
],
'mediawiki.htmlform.ooui' => [
@@ -1772,6 +1775,7 @@ return [
'resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js',
],
'dependencies' => [
+ 'jquery.byteLength',
'oojs',
'mediawiki.api',
'mediawiki.api.options',
diff --git a/resources/src/jquery/jquery.byteLength.js b/resources/src/jquery/jquery.byteLength.js
index 7fe25ee30c..222f14afd8 100644
--- a/resources/src/jquery/jquery.byteLength.js
+++ b/resources/src/jquery/jquery.byteLength.js
@@ -11,7 +11,7 @@
* @static
* @inheritable
* @param {string} str
- * @return {string}
+ * @return {number}
*/
jQuery.byteLength = function ( str ) {
// This basically figures out how many bytes a UTF-16 string (which is what js sees)
diff --git a/resources/src/mediawiki.action/images/close.png b/resources/src/mediawiki.action/images/close.png
new file mode 100644
index 0000000000..80dde95155
Binary files /dev/null and b/resources/src/mediawiki.action/images/close.png differ
diff --git a/resources/src/mediawiki.action/images/close.svg b/resources/src/mediawiki.action/images/close.svg
new file mode 100644
index 0000000000..7f7551128e
--- /dev/null
+++ b/resources/src/mediawiki.action/images/close.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.postEdit.less b/resources/src/mediawiki.action/mediawiki.action.view.postEdit.less
index e1fa925823..d19f098529 100644
--- a/resources/src/mediawiki.action/mediawiki.action.view.postEdit.less
+++ b/resources/src/mediawiki.action/mediawiki.action.view.postEdit.less
@@ -7,7 +7,7 @@
height: 0;
left: 50%;
z-index: 1000;
- font-size: 13px;
+ font-size: 14px;
cursor: pointer;
}
@@ -19,6 +19,24 @@
opacity: 1;
.transition( opacity 250ms );
+ &:after {
+ content: '';
+ background: no-repeat center center;
+ .background-image-svg( 'images/close.svg', 'images/close.png' );
+ background-size: 12px 12px;
+ position: absolute;
+ right: 0.4em;
+ top: 0;
+ bottom: 0;
+ min-width: 32px;
+ min-height: 32px;
+ opacity: 0.87;
+
+ &:hover {
+ opacity: 1;
+ }
+ }
+
&.mw-notification {
padding-right: 3em;
}
@@ -29,32 +47,13 @@
}
.postedit-icon {
- padding-left: 41px; /* 25 + 8 + 8 */
+ padding-left: 25px;
/* like min-height, but old IE compatible and keeps text vertically aligned, too */
line-height: 25px;
background-repeat: no-repeat;
- background-position: 8px 50%;
}
.postedit-icon-checkmark {
/* @embed */
background-image: url( images/green-checkmark.png );
- background-position: left;
-}
-
-.postedit:after {
- content: 'Ã';
- position: absolute;
- padding: 0 0.8em;
- right: 0;
- top: 0;
- font-size: 1.25em;
- font-weight: bold;
- line-height: 2.3em;
- text-shadow: 0 0.0625em 0 #fff;
- opacity: 0.2;
-}
-
-.postedit:hover:after {
- opacity: 0.4;
}
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
index f37229f725..ee74ac5f97 100644
--- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
@@ -863,7 +863,7 @@
// Stringify state
stringified = JSON.stringify( state );
- if ( stringified.length > 65535 ) {
+ if ( $.byteLength( stringified ) > 65535 ) {
// Sanity check, since the preference can only hold that.
return;
}
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
index 67edb4fe71..83e5796353 100644
--- a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
@@ -79,6 +79,14 @@
);
filtersWidget.setTopSection( wlTopSection.$element );
} // end Special:WL
+
+ /**
+ * Fired when initialization of the filtering interface for changes list is complete.
+ *
+ * @event structuredChangeFilters_ui_initialized
+ * @member mw.hook
+ */
+ mw.hook( 'structuredChangeFilters.ui.initialized' ).fire();
}
};
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.js
index e39be6c4db..d2033289b5 100644
--- a/resources/src/mediawiki.rcfilters/mw.rcfilters.js
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.js
@@ -47,7 +47,7 @@
},
featureFlags: {
liveUpdate: mw.config.get( 'wgStructuredChangeFiltersLiveUpdateSupported' ) &&
- ( mw.config.get( 'wgStructuredChangeFiltersEnableLiveUpdate' ) || new mw.Uri().query.liveupdate )
+ ( mw.user.options.get( 'rcenhancedfilters' ) || new mw.Uri().query.liveupdate )
}
};
}( mediaWiki ) );
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.less
index ec4954cacb..4e8ad56721 100644
--- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.less
+++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.less
@@ -1,3 +1,5 @@
+@import 'mediawiki.mixins';
+
.mw-rcfilters-ui-saveFiltersPopupButtonWidget {
&-popup {
&-layout,
@@ -6,11 +8,17 @@
}
> .oo-ui-popupWidget-popup > .oo-ui-popupWidget-head {
+ position: relative;
height: auto;
padding: 1em;
// Icon width + icon left position (rounded to 0.5 to give a little extra margin)
padding-right: 1.875em + 0.5em;
+ > .oo-ui-buttonWidget {
+ top: 50%;
+ .transform( translateY( -50% ) );
+ }
+
> .oo-ui-iconWidget {
float: none;
display: inline-block;
@@ -19,10 +27,11 @@
> .oo-ui-labelElement-label {
float: none;
- display: inline;
+ display: inline-block;
font-size: 1.2em;
margin: 0;
font-weight: bold;
+ vertical-align: middle;
}
}
}
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.js b/resources/src/mediawiki.special/mediawiki.special.preferences.js
index 63f2d9825b..6291f3f5ba 100644
--- a/resources/src/mediawiki.special/mediawiki.special.preferences.js
+++ b/resources/src/mediawiki.special/mediawiki.special.preferences.js
@@ -11,7 +11,6 @@
return this.id.replace( /^mw-prefsection/g, 'preftab' );
};
- $( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
$preftoc = $( '#preftoc' );
$preferences = $( '#preferences' );
diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt
index 00d2538c80..2064e0303d 100644
--- a/tests/parser/parserTests.txt
+++ b/tests/parser/parserTests.txt
@@ -307,7 +307,7 @@ CircularRef
!! html/parsoid
[1]
-â Error: Expansion loop detected at Template:CircularRef
+â Error: Expansion loop detected at Template:CircularRef
!! end
!! test
@@ -2449,7 +2449,7 @@ Block tag pre
foo
!! html/parsoid
-
foo
+
foo
!! end
!!test
@@ -4338,12 +4338,12 @@ Definition Lists: Mixed Lists: Test 10
!! test
Definition Lists: Mixed Lists: Test 11
!! wikitext
-;a
-:*b
-!! html
-a
+; a
+:* b
+!! html/*
+ a
-
+
!! end
@@ -6687,7 +6687,7 @@ Don't break on | in extension attribute in template
!! html/parsoid
[1]
-â ha
+â ha
!! end
## We don't support roundtripping of these attributes in Parsoid.
@@ -6862,7 +6862,7 @@ T107652: [s in templates that also generate table cell attributes should be
-]â foo
+â foo
!! end
!! test
@@ -7322,8 +7322,8 @@ parsoid=wt2html
!! html
!! end
@@ -9706,7 +9706,7 @@ parsoid
!! wikitext
*
!! html/parsoid
-
+
!! end
!! test
@@ -9876,6 +9876,17 @@ parsoid=wt2html,wt2wt
+!! html/parsoid
+ foo
+li-hack
+templated li-hack
+ unsupported li-hack with preceding comments
+
+
+
!!end
!! test
@@ -9911,9 +9922,9 @@ Parsoid: Test of whitespace serialization with Templated bullets
parsoid
!! wikitext
* {{bullet}}
-!! html
+!! html/parsoid
!! end
@@ -13221,7 +13232,7 @@ Templates: Wiki Tables: 7. Fosterable [s should get fostered
]
-â foo
+â foo
!!end
!! test
@@ -14260,6 +14271,20 @@ Image with caption, T55312 #3
Caption page=stuff
!! end
+!! test
+Image caption with pipe entity
+!! wikitext
+[[File:Foobar.jpg|thumb|one | two]]
+[[File:Foobar.jpg|thumb|one ''two'' | three]]
+!! html/php
+
+
+
+!! html/parsoid
+one | two
+one two | three
+!! end
+
!! test
Allow empty links in image captions (T62753)
!! options
@@ -15580,7 +15605,7 @@ T93580: 1. Templated [ inside block images
!! html/parsoid
]Caption with templated ref: [1]
-â foo
+â foo
!! end
!! test
@@ -15592,7 +15617,7 @@ T93580: 2. [ inside inline images
!! html/parsoid
]
-â foo
+â foo
!! end
!! test
@@ -15604,7 +15629,7 @@ T93580: 3. Templated [ inside inline images
!! html/parsoid
]
-â foo
+â foo
!! end
###
@@ -18139,7 +18164,7 @@ Parser hook: static parser hook inside a comment
!! html/parsoid
-
+
!! end
# Nested template calls; this case was broken by Parser.php rev 1.506,
@@ -20925,7 +20950,7 @@ HTML with raw HTML ($wgRawHtml==true)
wgRawHtml=1
!! wikitext
-!! html
+!! html/php
!! end
@@ -24424,12 +24449,12 @@ Empty LI and TR nodes should not be stripped from top-level content
!! html/parsoid
-
+
foo
@@ -24443,9 +24468,9 @@ Empty TR nodes should not be stripped if they have any attributes set
{{EmptyTRWithHTMLAttrTest}}
!! html/parsoid
!! end
@@ -25731,7 +25756,7 @@ parsoid=html2wt
'foo [1]
'foo test
'foo and bar
-
+
â test
!! wikitext
@@ -25881,7 +25906,7 @@ a
parsoid=html2wt
!! html/parsoid
foo [1]
-
+
â a
b
@@ -26289,7 +26314,7 @@ RT-ed inter-element separators should be valid separators
!! html/parsoid
!!end
@@ -26436,7 +26461,7 @@ parsoid
!! html
@@ -26458,7 +26483,7 @@ parsoid
!! html
-
+
@@ -29255,17 +29280,18 @@ unclosed internal link XSS (T137264)
[[#%3Cscript%3Ealert(1)%3C/script%3E|
!! end
+# Use $wgRawHtml to inject a