- msg( 'userlogin-noaccount' ); ?>
msg( 'userlogin-joinproject' ); ?>
+
mTempPath = $tempPath;
- $this->mFileSize = $fileSize;
+
+ $this->setTempFile( $tempPath, $fileSize );
$this->mRemoveTempFile = $removeTempFile;
}
@@ -231,6 +235,21 @@ abstract class UploadBase {
*/
abstract public function initializeFromRequest( &$request );
+ /**
+ * @param string $tempPath File system path to temporary file containing the upload
+ * @param integer $fileSize
+ */
+ protected function setTempFile( $tempPath, $fileSize = null ) {
+ $this->mTempPath = $tempPath;
+ if ( strlen( $this->mTempPath ) && file_exists( $this->mTempPath ) ) {
+ $this->tempFileObj = new TempFSFile( $this->mTempPath );
+ $this->mFileSize = $fileSize ?: filesize( $this->mTempPath );
+ } else {
+ $this->tempFileObj = null;
+ $this->mFileSize = null;
+ }
+ }
+
/**
* Fetch the file. Usually a no-op
* @return Status
@@ -716,7 +735,7 @@ abstract class UploadBase {
WatchAction::doWatch(
$this->getLocalFile()->getTitle(),
$user,
- WatchedItem::IGNORE_USER_RIGHTS
+ User::IGNORE_USER_RIGHTS
);
}
Hooks::run( 'UploadComplete', [ &$this ] );
@@ -952,9 +971,10 @@ abstract class UploadBase {
* on exit to clean up.
*/
public function cleanupTempFile() {
- if ( $this->mRemoveTempFile && $this->mTempPath && file_exists( $this->mTempPath ) ) {
- wfDebug( __METHOD__ . ": Removing temporary file {$this->mTempPath}\n" );
- unlink( $this->mTempPath );
+ if ( $this->mRemoveTempFile && $this->tempFileObj ) {
+ // Delete when all relevant TempFSFile handles go out of scope
+ wfDebug( __METHOD__ . ": Marked temporary file '{$this->mTempPath}' for removal\n" );
+ $this->tempFileObj->autocollect();
}
}
diff --git a/includes/upload/UploadFromChunks.php b/includes/upload/UploadFromChunks.php
index d82a9e6f9f..ebb4ebb9e8 100644
--- a/includes/upload/UploadFromChunks.php
+++ b/includes/upload/UploadFromChunks.php
@@ -145,12 +145,12 @@ class UploadFromChunks extends UploadFromFile {
if ( !$status->isOk() ) {
return $status;
}
+
wfDebugLog( 'fileconcatenate', "Combined $i chunks in $tAmount seconds." );
- // File system path
- $this->mTempPath = $tmpPath;
- // Since this was set for the last chunk previously
- $this->mFileSize = filesize( $this->mTempPath );
+ // File system path of the actual full temp file
+ $this->setTempFile( $tmpPath );
+
$ret = $this->verifyUpload();
if ( $ret['status'] !== UploadBase::OK ) {
wfDebugLog( 'fileconcatenate', "Verification failed for chunked upload" );
diff --git a/includes/user/User.php b/includes/user/User.php
index 7bc410d8ed..09124bfd61 100644
--- a/includes/user/User.php
+++ b/includes/user/User.php
@@ -62,17 +62,22 @@ class User implements IDBAccessObject {
*/
const VERSION = 10;
- /**
- * Maximum items in $mWatchedItems
- */
- const MAX_WATCHED_ITEMS_CACHE = 100;
-
/**
* Exclude user options that are set to their default value.
* @since 1.25
*/
const GETOPTIONS_EXCLUDE_DEFAULTS = 1;
+ /**
+ * @since 1.27
+ */
+ const CHECK_USER_RIGHTS = true;
+
+ /**
+ * @since 1.27
+ */
+ const IGNORE_USER_RIGHTS = false;
+
/**
* Array of Strings List of member variables which are saved to the
* shared cache (memcached). Any operation which changes the
@@ -291,9 +296,6 @@ class User implements IDBAccessObject {
/** @var Block */
private $mBlockedFromCreateAccount = false;
- /** @var array */
- private $mWatchedItems = [];
-
/** @var integer User::READ_* constant bitfield used to load data */
protected $queryFlagsUsed = self::READ_NORMAL;
@@ -856,8 +858,6 @@ class User implements IDBAccessObject {
|| strlen( $name ) > $wgMaxNameChars
|| $name != $wgContLang->ucfirst( $name )
) {
- wfDebugLog( 'username', __METHOD__ .
- ": '$name' invalid due to empty, IP, slash, length, or lowercase" );
return false;
}
@@ -867,8 +867,6 @@ class User implements IDBAccessObject {
if ( is_null( $parsed )
|| $parsed->getNamespace()
|| strcmp( $name, $parsed->getPrefixedText() ) ) {
- wfDebugLog( 'username', __METHOD__ .
- ": '$name' invalid due to ambiguous prefixes" );
return false;
}
@@ -883,8 +881,6 @@ class User implements IDBAccessObject {
'\x{e000}-\x{f8ff}' . # private use
']/u';
if ( preg_match( $unicodeBlacklist, $name ) ) {
- wfDebugLog( 'username', __METHOD__ .
- ": '$name' invalid due to blacklisted characters" );
return false;
}
@@ -3445,51 +3441,36 @@ class User implements IDBAccessObject {
}
}
- /**
- * Get a WatchedItem for this user and $title.
- *
- * @since 1.22 $checkRights parameter added
- * @param Title $title
- * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
- * Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
- * @return WatchedItem
- */
- public function getWatchedItem( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
- $key = $checkRights . ':' . $title->getNamespace() . ':' . $title->getDBkey();
-
- if ( isset( $this->mWatchedItems[$key] ) ) {
- return $this->mWatchedItems[$key];
- }
-
- if ( count( $this->mWatchedItems ) >= self::MAX_WATCHED_ITEMS_CACHE ) {
- $this->mWatchedItems = [];
- }
-
- $this->mWatchedItems[$key] = WatchedItem::fromUserTitle( $this, $title, $checkRights );
- return $this->mWatchedItems[$key];
- }
-
/**
* Check the watched status of an article.
* @since 1.22 $checkRights parameter added
* @param Title $title Title of the article to look at
- * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
- * Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
+ * @param bool $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
+ * Pass User::CHECK_USER_RIGHTS or User::IGNORE_USER_RIGHTS.
* @return bool
*/
- public function isWatched( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
- return $this->getWatchedItem( $title, $checkRights )->isWatched();
+ public function isWatched( $title, $checkRights = self::CHECK_USER_RIGHTS ) {
+ if ( $title->isWatchable() && ( !$checkRights || $this->isAllowed( 'viewmywatchlist' ) ) ) {
+ return WatchedItemStore::getDefaultInstance()->isWatched( $this, $title );
+ }
+ return false;
}
/**
* Watch an article.
* @since 1.22 $checkRights parameter added
* @param Title $title Title of the article to look at
- * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
- * Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
- */
- public function addWatch( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
- $this->getWatchedItem( $title, $checkRights )->addWatch();
+ * @param bool $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
+ * Pass User::CHECK_USER_RIGHTS or User::IGNORE_USER_RIGHTS.
+ */
+ public function addWatch( $title, $checkRights = self::CHECK_USER_RIGHTS ) {
+ if ( !$checkRights || $this->isAllowed( 'editmywatchlist' ) ) {
+ WatchedItemStore::getDefaultInstance()->addWatchBatch( [
+ [ $this, $title->getSubjectPage() ],
+ [ $this, $title->getTalkPage() ],
+ ]
+ );
+ }
$this->invalidateCache();
}
@@ -3497,11 +3478,14 @@ class User implements IDBAccessObject {
* Stop watching an article.
* @since 1.22 $checkRights parameter added
* @param Title $title Title of the article to look at
- * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
- * Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
+ * @param bool $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
+ * Pass User::CHECK_USER_RIGHTS or User::IGNORE_USER_RIGHTS.
*/
- public function removeWatch( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
- $this->getWatchedItem( $title, $checkRights )->removeWatch();
+ public function removeWatch( $title, $checkRights = self::CHECK_USER_RIGHTS ) {
+ if ( !$checkRights || $this->isAllowed( 'editmywatchlist' ) ) {
+ WatchedItemStore::getDefaultInstance()->removeWatch( $this, $title->getSubjectPage() );
+ WatchedItemStore::getDefaultInstance()->removeWatch( $this, $title->getTalkPage() );
+ }
$this->invalidateCache();
}
@@ -3569,9 +3553,8 @@ class User implements IDBAccessObject {
$force = 'force';
}
- $this->getWatchedItem( $title )->resetNotificationTimestamp(
- $force, $oldid
- );
+ WatchedItemStore::getDefaultInstance()
+ ->resetNotificationTimestamp( $this, $title, $force, $oldid );
}
/**
diff --git a/includes/utils/MWRestrictions.php b/includes/utils/MWRestrictions.php
index 521e3452b8..617e8f59fd 100644
--- a/includes/utils/MWRestrictions.php
+++ b/includes/utils/MWRestrictions.php
@@ -69,13 +69,13 @@ class MWRestrictions {
$invalidKeys = array_diff( $keys, $validKeys );
if ( $invalidKeys ) {
throw new InvalidArgumentException(
- 'Array contains invalid keys: ' . join( ', ', $invalidKeys )
+ 'Array contains invalid keys: ' . implode( ', ', $invalidKeys )
);
}
$missingKeys = array_diff( $neededKeys, $keys );
if ( $missingKeys ) {
throw new InvalidArgumentException(
- 'Array is missing required keys: ' . join( ', ', $missingKeys )
+ 'Array is missing required keys: ' . implode( ', ', $missingKeys )
);
}
diff --git a/languages/Language.php b/languages/Language.php
index 0bd227621f..6f404dde3f 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -723,20 +723,6 @@ class Language {
}
}
- /**
- * @deprecated since 1.24, doesn't handle conflicting aliases. Use
- * SpecialPageFactory::getLocalNameFor instead.
- * @param string $name
- * @return string
- */
- function specialPage( $name ) {
- $aliases = $this->getSpecialPageAliases();
- if ( isset( $aliases[$name][0] ) ) {
- $name = $aliases[$name][0];
- }
- return $this->getNsText( NS_SPECIAL ) . ':' . $name;
- }
-
/**
* @return array
*/
@@ -802,33 +788,6 @@ class Language {
return $this->getMessageFromDB( "tog-$tog" );
}
- /**
- * Get native language names, indexed by code.
- * Only those defined in MediaWiki, no other data like CLDR.
- * If $customisedOnly is true, only returns codes with a messages file
- *
- * @param bool $customisedOnly
- *
- * @return array
- * @deprecated since 1.20, use fetchLanguageNames()
- */
- public static function getLanguageNames( $customisedOnly = false ) {
- return self::fetchLanguageNames( null, $customisedOnly ? 'mwfile' : 'mw' );
- }
-
- /**
- * Get translated language names. This is done on best effort and
- * by default this is exactly the same as Language::getLanguageNames.
- * The CLDR extension provides translated names.
- * @param string $code Language code.
- * @return array Language code => language name
- * @since 1.18.0
- * @deprecated since 1.20, use fetchLanguageNames()
- */
- public static function getTranslatedLanguageNames( $code ) {
- return self::fetchLanguageNames( $code, 'all' );
- }
-
/**
* Get an array of language names, indexed by code.
* @param null|string $inLanguage Code of language in which to return the names
@@ -954,17 +913,6 @@ class Language {
return wfMessage( $msg )->inLanguage( $this );
}
- /**
- * Get the native language name of $code.
- * Only if defined in MediaWiki, no other data like CLDR.
- * @param string $code
- * @return string
- * @deprecated since 1.20, use fetchLanguageName()
- */
- function getLanguageName( $code ) {
- return self::fetchLanguageName( $code );
- }
-
/**
* @param string $key
* @return string
@@ -2896,6 +2844,7 @@ class Language {
/**
* @param string $s
* @return string
+ * @throws MWException
*/
function checkTitleEncoding( $s ) {
if ( is_array( $s ) ) {
@@ -4235,7 +4184,7 @@ class Language {
* Refresh the cache of conversion tables when
* MediaWiki:Conversiontable* is updated.
*
- * @param Title $titleobj The Title of the page being updated
+ * @param Title $title The Title of the page being updated
*/
public function updateConversionTable( Title $title ) {
$this->mConverter->updateConversionTable( $title );
@@ -4282,15 +4231,6 @@ class Language {
return self::$dataCache->getItem( $this->mCode, 'linkPrefixCharset' );
}
- /**
- * @deprecated since 1.24, will be removed in 1.25
- * @return Language
- */
- function getLangObj() {
- wfDeprecated( __METHOD__, '1.24' );
- return $this;
- }
-
/**
* Get the "parent" language which has a converter to convert a "compatible" language
* (in another variant) to this language (eg. zh for zh-cn, but not en for en-gb).
@@ -4416,6 +4356,7 @@ class Language {
/**
* @param string $code
* @return string
+ * @throws MWException
* @since 1.23
*/
public static function getJsonMessagesFileName( $code ) {
@@ -4581,7 +4522,7 @@ class Language {
* @param string $expiry Database expiry String
* @param bool|int $format True to process using language functions, or TS_ constant
* to return the expiry in a given timestamp
- * @param string $inifinity If $format is not true, use this string for infinite expiry
+ * @param string $infinity If $format is not true, use this string for infinite expiry
* @return string
* @since 1.18
*/
diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php
index 81e78b5914..b31b10ffc7 100644
--- a/languages/LanguageConverter.php
+++ b/languages/LanguageConverter.php
@@ -160,7 +160,7 @@ class LanguageConverter {
$req = $this->getURLVariant();
- if ( $wgUser->isLoggedIn() && !$req ) {
+ if ( $wgUser->isSafeToLoad() && $wgUser->isLoggedIn() && !$req ) {
$req = $this->getUserVariant();
} elseif ( !$req ) {
$req = $this->getHeaderVariant();
@@ -257,6 +257,9 @@ class LanguageConverter {
// Get language variant preference from logged in users
// Don't call this on stub objects because that causes infinite
// recursion during initialisation
+ if ( !$wgUser->isSafeToLoad() ) {
+ return false;
+ }
if ( $wgUser->isLoggedIn() ) {
if ( $this->mMainLanguageCode == $wgContLang->getCode() ) {
$ret = $wgUser->getOption( 'variant' );
diff --git a/languages/classes/LanguageCu.php b/languages/classes/LanguageCu.php
index b36f0809fc..89625c0567 100644
--- a/languages/classes/LanguageCu.php
+++ b/languages/classes/LanguageCu.php
@@ -52,11 +52,11 @@ class LanguageCu extends Language {
if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
switch ( $case ) {
case 'genitive': # ÑодиÑелÑнÑй падеж
- if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вики' )
- || ( join( '', array_slice( $ar[0], -4 ) ) == 'Ðики' )
+ if ( ( implode( '', array_slice( $ar[0], -4 ) ) == 'вики' )
+ || ( implode( '', array_slice( $ar[0], -4 ) ) == 'Ðики' )
) {
- } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'Ñï' ) {
- $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ÑÑ©';
+ } elseif ( implode( '', array_slice( $ar[0], -2 ) ) == 'Ñï' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'ÑÑ©';
}
break;
case 'accusative': # виниÑелÑнÑй падеж
diff --git a/languages/classes/LanguageHy.php b/languages/classes/LanguageHy.php
index f6d5270676..05b0ebed04 100644
--- a/languages/classes/LanguageHy.php
+++ b/languages/classes/LanguageHy.php
@@ -52,12 +52,12 @@ class LanguageHy extends Language {
if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
switch ( $case ) {
case 'genitive': # Õ½Õ¥Õ¼Õ¡Õ¯Õ¡Õ¶ Õ°Õ¸Õ¬Õ¸Õ¾
- if ( join( '', array_slice( $ar[0], -1 ) ) == 'Õ¡' ) {
- $word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'Õ¡ÕµÕ«';
- } elseif ( join( '', array_slice( $ar[0], -1 ) ) == 'Õ¸' ) {
- $word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'Õ¸ÕµÕ«';
- } elseif ( join( '', array_slice( $ar[0], -4 ) ) == 'Õ£Õ«ÖÖ' ) {
- $word = join( '', array_slice( $ar[0], 0, -4 ) ) . 'Õ£ÖÖÕ«';
+ if ( implode( '', array_slice( $ar[0], -1 ) ) == 'Õ¡' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -1 ) ) . 'Õ¡ÕµÕ«';
+ } elseif ( implode( '', array_slice( $ar[0], -1 ) ) == 'Õ¸' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -1 ) ) . 'Õ¸ÕµÕ«';
+ } elseif ( implode( '', array_slice( $ar[0], -4 ) ) == 'Õ£Õ«ÖÖ' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -4 ) ) . 'Õ£ÖÖÕ«';
} else {
$word .= 'Õ«';
}
diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php
index 6cc23e3050..72bde4007d 100644
--- a/languages/classes/LanguageUk.php
+++ b/languages/classes/LanguageUk.php
@@ -51,19 +51,19 @@ class LanguageUk extends Language {
if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
switch ( $case ) {
case 'genitive': # Ñодовий вÑдмÑнок
- if ( join( '', array_slice( $ar[0], -2 ) ) === 'ÑÑ' ) {
- $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ÑÑ';
- } elseif ( join( '', array_slice( $ar[0], -2 ) ) === 'Ñи' ) {
- $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'Ñ';
- } elseif ( join( '', array_slice( $ar[0], -2 ) ) === 'ди' ) {
- $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'дÑв';
- } elseif ( join( '', array_slice( $ar[0], -3 ) ) === 'ник' ) {
- $word = join( '', array_slice( $ar[0], 0, -3 ) ) . 'ника';
+ if ( implode( '', array_slice( $ar[0], -2 ) ) === 'ÑÑ' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'ÑÑ';
+ } elseif ( implode( '', array_slice( $ar[0], -2 ) ) === 'Ñи' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'Ñ';
+ } elseif ( implode( '', array_slice( $ar[0], -2 ) ) === 'ди' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'дÑв';
+ } elseif ( implode( '', array_slice( $ar[0], -3 ) ) === 'ник' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -3 ) ) . 'ника';
}
break;
case 'accusative': # знаÑ
Ñдний вÑдмÑнок
- if ( join( '', array_slice( $ar[0], -2 ) ) === 'ÑÑ' ) {
- $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ÑÑ';
+ if ( implode( '', array_slice( $ar[0], -2 ) ) === 'ÑÑ' ) {
+ $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'ÑÑ';
}
break;
}
diff --git a/languages/data/ZhConversion.php b/languages/data/ZhConversion.php
index d2730852b1..08a40b8de8 100644
--- a/languages/data/ZhConversion.php
+++ b/languages/data/ZhConversion.php
@@ -3237,6 +3237,7 @@ public static $zh2Hant = [
'ä¸çºªé' => 'ä¸ç´é',
'ä¸çºªé表' => 'ä¸ç´éé¶',
'丢ä¸' => 'ä¸é',
+'并åä¸' => '並åä¸',
'并æ°å
¥æ·' => '並æ°å
¥æ¾±',
'并åå¨' => '並ç¼å',
'并åå±' => '並ç¼å±',
@@ -3709,7 +3710,6 @@ public static $zh2Hant = [
'äºå¹²' => 'äºå¹¹',
'äºé' => 'äºè£¡',
'äºäº' => 'äºæ¼',
-'äºç¾å°¼äºå' => 'äºç¾å°¼äºæ',
'交æ' => '交è¨',
'交游' => '交é',
'交å' => '交鬨',
@@ -3730,7 +3730,6 @@ public static $zh2Hant = [
'ä»è´µ' => 'ä»è²´',
'ä»è' => 'ä»å',
'ä»å¹²ç' => 'ä»å¹¹ç',
-'ä»é' => 'ä»é',
'ä»æ' => 'ä»è¨',
'ä»å' => 'ä»å',
'ä»å座' => 'ä»å座',
@@ -3802,7 +3801,7 @@ public static $zh2Hant = [
'并å°' => 'ä½µå°',
'并å' => 'ä½µå',
'并å' => 'ä½µå',
-'并åä¸' => 'ä½µåä¸',
+'并å' => 'ä½µå',
'并æ¢' => 'ä½µæ',
'并æ¡' => 'ä½µæ¡',
'并æµ' => 'ä½µæµ',
@@ -3823,7 +3822,6 @@ public static $zh2Hant = [
'使å
¶æ' => '使å
¶é¬¥',
'æ¥äº' => 'ä¾æ¼',
'ä¾ä»' => 'ä¾å',
-'ä¾å¶' => 'ä¾è£½',
'ä¾ä¾ä¸è' => 'ä¾ä¾ä¸æ¨',
'ä¾æ' => 'ä¾è¨',
'侵并' => '侵併',
@@ -4374,6 +4372,8 @@ public static $zh2Hant = [
'å稷' => 'å稷',
'åç¶' => 'åç¶',
'å羿' => 'å羿',
+'åè' => 'åè¼',
+'åè¼' => 'åè¼',
'åè¡' => 'åè¡',
'åè§' => 'åè§',
'å丰' => 'åè±',
@@ -4404,6 +4404,7 @@ public static $zh2Hant = [
'åè´è´' => 'å緻緻',
'åéåæ°' => 'å裡åæ°£',
'åæ' => 'åå',
+'åé' => 'å裡',
'å¦å' => 'å¦å',
'å¨å' => 'å¨å',
'å¨æ å' => 'å¨æ å',
@@ -4662,12 +4663,10 @@ public static $zh2Hant = [
'大æåå²' => '大ææ·å²',
'大å' => '大æ',
'大æ¬é' => '大æ¬é',
-'大æ¬éæ²' => '大æ¬éæ²',
'大åå²' => '大æ·å²',
'大ç
åæ' => '大ç
åç',
'大ç®å¹²è¿' => '大ç®ä¹¾é£',
'大笨é' => '大笨é',
-'大笨éæ²' => '大笨éæ²',
'大è¡' => '大è¡',
'大è¡å' => '大è¡æ',
'大è¡åå²' => '大è¡æ·å²',
@@ -4973,7 +4972,6 @@ public static $zh2Hant = [
'å¹´é' => '年裡',
'å¹´é´' => 'å¹´é',
'并å' => '并å',
-'并å' => '并å',
'并å·' => '并å·',
'并æ¥èé£' => '并æ¥èé£',
'并è¿' => '并è¿',
@@ -5090,7 +5088,6 @@ public static $zh2Hant = [
'åæ
°' => 'å¼æ
°',
'åæ£' => 'å¼æ£',
'åæ·' => 'å¼æ·',
-'åæ' => 'å¼æ',
'åæ' => 'å¼æ',
'åæ' => 'å¼æ',
'åæ' => 'å¼æ',
@@ -5118,7 +5115,9 @@ public static $zh2Hant = [
'å¼ å' => 'å¼µå³',
'å¼ æ°' => 'å¼µæ°',
'å¼µæ°' => 'å¼µæ°',
+'å¼ æè' => 'å¼µæ ¢è',
'å¼ ä¹äºå¼ å¾' => 'å¼µæ¨äºå¼µå¾',
+'强å¶' => 'å¼·å¶',
'强å¶ä½ç¨' => 'å¼·å¶ä½ç¨',
'强奸' => '強姦',
'强干' => '強幹',
@@ -5171,7 +5170,6 @@ public static $zh2Hant = [
'å¤å§' => '復å§',
'å¤æ´»èå表' => '復活ç¯æ表',
'å¤è' => '復ç¦',
-'å¾äºº' => '徵人',
'å¾ä»¤' => '徵令',
'å¾ä¿¡' => '徵信',
'å¾å' => 'å¾µå',
@@ -5399,6 +5397,8 @@ public static $zh2Hant = [
'æ¶æ' => 'æ¡é¬¥',
'æ´æ ' => 'æ´æ
',
'æ大å©é¢' => 'æ大å©éºµ',
+'ææ²³éè±å' => 'ææ²³éè±å',
+'ç±æ²³éè±å' => 'ææ²³éè±å',
'ç±å°' => 'æç',
'æäº' => 'ææ¼',
'æ¿æ´' => 'æ¿æ¨¸',
@@ -5513,7 +5513,7 @@ public static $zh2Hant = [
'æ大æ¢' => 'æ大æ¨',
'æ¯é¢' => 'æ¯éºµ',
'æ¶ä½' => 'æ¶é¤',
-'æ¹åç' => 'æ¹åç',
+'æ¹å' => 'æ¹å',
'æ¹åç¡®å®' => 'æ¹å確å®',
'æ¹å¤' => 'æ¹è¦',
'æ¹æ³¨' => 'æ¹è¨»',
@@ -5577,16 +5577,8 @@ public static $zh2Hant = [
'æ³å±' => 'æ³è·¼',
'æ¼æ»æ¼æ´»' => 'æ¼æ»æ¼æ´»',
'æ¾æ²' => 'æ¾ç',
-'æ¿ä¸è¡¨' => 'æ¿ä¸é¶',
-'æ¿ä¸é' => 'æ¿ä¸é',
'æ¿å' => 'æ¿æº',
'æ¿ç ´ä»' => 'æ¿ç ´å´',
-'æå¾' => 'æå',
-'æå¸
' => 'æ帥',
-'æ彩' => 'æ彩',
-'æ念' => 'æ念',
-'æå·' => 'æè',
-'æ车' => 'æè»',
'ææ' => 'æ鬥',
'æ大æ¢' => 'æ大æ¨',
'ææ' => 'æ鬥',
@@ -5663,10 +5655,8 @@ public static $zh2Hant = [
'ææ' => 'ææ',
'æ骨é¢' => 'æ骨麵',
'æå' => 'æå',
-'æå¸' => 'æå¸',
'æå' => 'ææ',
'æé©' => 'æé',
-'æé' => 'æé',
'æé¢' => 'æ麵',
'éä¸' => 'æ¡ä¸',
'éä¼' => 'æ¡ä¼',
@@ -6086,7 +6076,7 @@ public static $zh2Hant = [
'æ æ 溪' => 'æ æ 溪',
'æ ¡å' => 'æ ¡æº',
'æ ¡è' => 'æ ¡è',
-'æ ¸åç' => 'æ ¸åç',
+'æ ¸å' => 'æ ¸å',
'æ ¼äº' => 'æ ¼æ¼',
'æ ¼è' => 'æ ¼ç¯',
'æ ¼éå' => 'æ ¼éæ',
@@ -6599,7 +6589,7 @@ public static $zh2Hant = [
'äºæ' => 'ç鬥',
'ç°å®ç¥¥å' => 'ç°å®ç¥¥å¤',
'ç½è¡' => 'ç½è©',
-'å°å¬é' => 'ç¾å¬é',
+'å°å¬å' => 'ç¾å¬é',
'å¢é' => 'ç裡',
'çé' => 'ç裡',
'çè¨åªè¯' => 'çè¨é»èª',
@@ -6665,7 +6655,9 @@ public static $zh2Hant = [
'çå' => 'çå',
'ç®å®' => 'çå®',
'çäº' => 'çæ¼',
+'çãå¸' => 'çãé¹¹',
'çæ°´é¢' => 'ç水麵',
+'çå¸' => 'çé¹¹',
'çé¢é
±' => 'ç麵é¬',
'çåé¢' => 'çå麵',
'çäº' => 'çæ¼',
@@ -6692,6 +6684,9 @@ public static $zh2Hant = [
'ç·ä»' => 'ç·å',
'çé' => 'ç裡',
'çäº' => 'çæ¼',
+'çåå±' => 'çç¼å±',
+'çåç' => 'çç¼ç',
+'çåè¡' => 'çç¼è¡',
'çé¿å' => 'çé·é«®',
'çå' => 'çé«®',
'æ¯äº' => 'ç¢æ¼',
@@ -6805,8 +6800,6 @@ public static $zh2Hant = [
'ç¸äº' => 'ç¸æ¼',
'ç¸å²' => 'ç¸è¡',
'ç¸æ' => 'ç¸é¬¥',
-'çä¸è¡¨' => 'çä¸é¶',
-'çä¸é' => 'çä¸é',
'çæ³é' => 'çæ³è£¡',
'çå' => 'çæº',
'ç表é¢' => 'ç表é¢',
@@ -6827,8 +6820,6 @@ public static $zh2Hant = [
'å°è§' => 'ç覺',
'ç¡æ¸¸ç
' => 'ç¡éç
',
'çå' => 'çæº',
-'ç
ä¸è¡¨' => 'ç
ä¸é¶',
-'ç
ä¸é' => 'ç
ä¸é',
'çè' => 'çç',
'äºæ' => 'çæ',
'äºç¶' => 'çç¶',
@@ -6864,6 +6855,7 @@ public static $zh2Hant = [
'ç¡®ç ' => 'ç¡®ç ',
'ç¢å¿' => 'ç¢èª',
'ç¢é' => 'ç¢è£¡',
+'碧河é' => '碧河é',
'碰é' => '碰é',
'确系' => '確ä¿',
'ç 表' => '碼é¶',
@@ -6921,6 +6913,7 @@ public static $zh2Hant = [
'秦æ²å®¢è¿' => '秦ç客é',
'移祸äº' => '移ç¦æ¼',
'ç¨æ¾' => 'ç¨é¬',
+'ç¨åå' => 'ç¨åé«®',
'棱å°' => 'ç¨å°',
'棱å' => 'ç¨å',
'棱å±' => 'ç¨å±¤',
@@ -6998,24 +6991,6 @@ public static $zh2Hant = [
'竹å¶' => '竹製',
'竹溪å¿' => '竹谿縣',
'ç¬éèå' => 'ç¬è£¡èå',
-'第ä¸åºç°' => '第ä¸åºç¾',
-'第ä¸åºç¾' => '第ä¸åºç¾',
-'第ä¸åºç·' => '第ä¸åºç·',
-'第ä¸åºçº¿' => '第ä¸åºç·',
-'第ä¸åº' => '第ä¸é½£',
-'第ä¸åº' => '第ä¸é½£',
-'第ä¸åºå±' => '第ä¸åºå±',
-'第ä¸åº' => '第ä¸é½£',
-'第ä¹åº' => '第ä¹é½£',
-'第äºåºç·' => '第äºåºç·',
-'第äºåºçº¿' => '第äºåºç·',
-'第äºåº' => '第äºé½£',
-'第äºåºå±' => '第äºåºå±',
-'第äºåº' => '第äºé½£',
-'第å
«åº' => '第å
«é½£',
-'第å
åº' => '第å
é½£',
-'第ååºå±' => '第ååºå±',
-'第ååº' => '第åé½£',
'ç¬æ' => 'çæ¡¿',
'ç¬ç§å¢¨å¹²' => 'ç禿墨乾',
'çäº' => 'çæ¼',
@@ -7596,6 +7571,7 @@ public static $zh2Hant = [
'è«é¨' => 'è«é¨',
'èå¨çæ' => 'èåç鬥',
'èå女å¦' => 'è髮女å¦',
+'èç½å' => 'èç½ç¼',
'èå' => 'èå',
'èæ¶' => 'è湧',
'èå' => 'èæº',
@@ -7769,6 +7745,7 @@ public static $zh2Hant = [
'å¤ç®' => 'è¤ç®',
'å¤ç¼' => 'è¤ç¼',
'å¤ç§' => 'è¤ç¨®',
+'å¤ç©' => 'è¤ç©',
'å¤çº¿' => 'è¤ç·',
'å¤ä¹ ' => 'è¤ç¿',
'å¤è²' => 'è¤è²',
@@ -8215,6 +8192,7 @@ public static $zh2Hant = [
'游客' => 'é客',
'游宦' => 'é宦',
'游山ç©æ°´' => 'éå±±ç©æ°´',
+'游å»' => 'éå»',
'游å¿
ææ¹' => 'éå¿
ææ¹',
'游æ©' => 'éæ©',
'游æ' => 'éæ²',
@@ -8222,6 +8200,7 @@ public static $zh2Hant = [
'游æ好é²' => 'éæ好é',
'游æ¹' => 'éæ¹',
'游æ' => 'éæ',
+'游æ¥' => 'éæ¥',
'游ä¹' => 'éæ¨',
'游æ å¡å°º' => 'éæ¨å¡å°º',
'游å' => 'éæ·',
@@ -8629,7 +8608,6 @@ public static $zh2Hant = [
'éæ°' => 'é³æ°',
'é³æ°' => 'é³æ°',
'éç¼' => 'é³é',
-'é游' => 'é¸é',
'é³æ¥é¢' => 'é½æ¥éºµ',
'é³å' => 'é½æ',
'é³åå²' => 'é½æ·å²',
@@ -8648,6 +8626,7 @@ public static $zh2Hant = [
'åªèº«' => 'é»èº«',
'éææ' => 'éææ',
'é
è' => 'é
ç¯',
+'éå¢' => 'éå',
'éæ°é' => 'éæ¸è£¡',
'éäº' => 'éæ¼',
'éé' => 'é裡',
@@ -8764,6 +8743,7 @@ public static $zh2Hant = [
'é¢æ¥ä¸å' => 'é å ±ä¸æº',
'é¢å¶' => 'é 製',
'é¢è¢æ¬²' => 'é è¢æ
¾',
+'头åç°' => 'é ç¼ç¾',
'头é' => 'é 裡',
'头é¿å' => 'é é·é«®',
'头å' => 'é é«®',
@@ -9016,10 +8996,11 @@ public static $zh2Hant = [
'åçå¿é¿' => 'é«®çå¿é·',
'åç¦' => 'é«®ç¦',
'å笺' => 'é«®ç®',
+'åç°ª' => '髮簪',
'å纱' => 'é«®ç´',
'åç»' => 'é«®çµ',
'åä¸' => '髮絲',
-'åç½' => '髮網',
+'åç½è' => '髮網è',
'åè' => 'é«®è
³',
'åè¤' => 'é«®è',
'åè¶' => 'é«®è ',
@@ -9027,7 +9008,6 @@ public static $zh2Hant = [
'åè¡' => 'é«®è ',
'åè¸å²å ' => '髮踴æ²å ',
'å辫' => '髮辮',
-'åé' => 'é«®é',
'åé' => 'é«®éµ',
'åé¿' => 'é«®é·',
'åé
' => 'é«®é',
@@ -9241,6 +9221,7 @@ public static $zh2Hant = [
'鹤å' => '鶴髮',
'鸾é´' => 'é¸é',
'é¹°é' => 'é¹°éµ°',
+'å¸ãç' => 'é¹¹ãç',
'å¸å³' => 'é¹¹å³',
'å¸å´æ·¡è' => 'é¹¹å´æ·¡è',
'å¸å' => 'é¹¹å',
@@ -9255,6 +9236,7 @@ public static $zh2Hant = [
'å¸æ±¤' => '鹹湯',
'å¸æ½' => 'é¹¹æ½',
'å¸æ¹¿' => 'é¹¹æ¿',
+'å¸ç' => 'é¹¹ç',
'å¸ç' => 'é¹¹ç',
'å¸ç²¥' => '鹹粥',
'å¸è' => 'é¹¹è',
@@ -10521,6 +10503,7 @@ public static $zh2Hans = [
'æ½' => 'æ¼±',
'æ½' => 'æ³¼',
'æ½' => 'æ´',
+'æ½' => 'ð£²',
'æ½' => '沩',
'æ½' => 'æ½',
'潤' => '润',
@@ -11842,6 +11825,7 @@ public static $zh2Hans = [
'èº' => 'è·',
'èº' => '踬',
'èº' => 'è¹°',
+'èº' => 'ð¨',
'èº' => 'è·¹',
'èº' => 'ð¨
¬',
'躡' => 'è¹',
@@ -13874,7 +13858,6 @@ public static $zh2TW = [
'è¡äººè·¯' => '人è¡é',
'ç³åèçæ ¼' => 'ä»åæ¯ç¶å¸',
'ç³åèçæ ¼' => 'ä»åæ¯ç¶å¸',
-'çé¢' => 'ä»é¢',
'ä¼å©è¯ºä¼å·' => 'ä¼å©è«¾å·',
'ä¼æ¯å¦å¸å°' => 'ä¼æ¯å¦å ¡',
'ä¼æ¯å¦å¸ç¾' => 'ä¼æ¯å¦å ¡',
@@ -14010,6 +13993,8 @@ public static $zh2TW = [
'èªå¤©å¨' => '太空é£è¡å¨',
'å°¼æ¥å©äº' => 'å¥åå©äº',
'å°¼æ¥å©äº' => 'å¥åå©äº',
+'å
§ç¾
ç¢' => 'å¥æ´æ¯',
+'å
ç½æ¯' => 'å¥æ´æ¯',
'å¿å»' => '奶油',
'è·éæ´»' => '好èå¡¢',
'å¨å»å§æ¯' => 'å¨å»å£«',
@@ -14028,7 +14013,6 @@ public static $zh2TW = [
'å®æçåå·´å¸é' => 'å®å°å¡åå·´å¸é',
'æ´ªé½ææ¯' => 'å®é½ææ¯',
'å¯ææ ¹' => 'å¯è¥¿æ ¹',
-'宽带' => 'å¯¬é »',
'èæ人æ°æ°ä¸»å
±åå½' => '寮人æ°æ°ä¸»å
±åå',
'èæ¾äººæ°æ°ä¸»å
±åå' => '寮人æ°æ°ä¸»å
±åå',
'èæ' => '寮å',
@@ -14422,7 +14406,6 @@ public static $zh2TW = [
'æ ¼è±ç¾å¥' => 'èèç¾ç',
'é»å±±å
±åå½' => 'èç¹å
§å¥ç¾
å
±åå',
'é»å±±å
±åå' => 'èç¹å
§å¥ç¾
å
±åå',
-'滿å°å¯' => 'èç¹å©',
'èç¹å©å°' => 'èç¹å©',
'èç¹å©ç¾' => 'èç¹å©',
'æ®å¯è¬' => 'è²ç¾è¬',
@@ -14704,7 +14687,6 @@ public static $zh2HK = [
'å¸æ§' => 'ä½æ§',
'å¸äº' => 'ä½æ¼',
'å¸æ¼' => 'ä½æ¼',
-'å¸æ½' => 'ä½æ½',
'å¸æ¯' => 'ä½æ¯',
'å¸æ»¡' => 'ä½æ»¿',
'å¸æ»¿' => 'ä½æ»¿',
@@ -15032,6 +15014,7 @@ public static $zh2HK = [
'å
èé' => 'å
èé',
'æ¯æé ' => 'å
æé ',
'å
ç¾
å西äº' => 'å
ç¾
å°äº',
+'å¥æ´æ¯' => 'å
§ç¾
ç¢',
'å
¬å¸' => 'å
¬ä½',
'åè' => 'åç',
'åèä½' => 'åèä½',
@@ -15194,6 +15177,7 @@ public static $zh2HK = [
'å¹èé' => 'å¹èé',
'åè' => 'åç',
'åéåæ°' => 'åè£åæ°£',
+'åé' => 'åè£',
'å³è' => 'å³ç',
'å³èä½' => 'å³èä½',
'å³èå' => 'å³èå',
@@ -15869,6 +15853,8 @@ public static $zh2HK = [
'æ¼èè
' => 'æ¼èè
',
'æ¼èè¿°' => 'æ¼èè¿°',
'æ¼èé' => 'æ¼èé',
+'æ©æ¥å æ' => 'ææ¥å æ',
+'ææ¥å æ' => 'ææ¥å æ',
'æè' => 'æç',
'æèä½' => 'æèä½',
'æèå' => 'æèå',
@@ -15895,6 +15881,7 @@ public static $zh2HK = [
'æºèè
' => 'æºèè
',
'æºèè¿°' => 'æºèè¿°',
'æºèé' => 'æºèé',
+'æ¶éè' => 'æ¶éç',
'æ»å ' => 'æ»ä½',
'æ¾è' => 'æ¾ç',
'æ¾èä½' => 'æ¾èä½',
@@ -16637,6 +16624,7 @@ public static $zh2HK = [
'ç³»åé' => 'ç³»åè£',
'ä¿æ¸' => 'ç³»æ¸',
'ç³»é' => 'ç³»è£',
+'ç´éè' => 'ç´éç',
'ç´å ' => 'ç´ä½',
'约å ' => 'ç´ä½',
'ç´è³å£«å' => 'ç´è³å£«å',
@@ -16859,7 +16847,6 @@ public static $zh2HK = [
'èç¾æ¬½' => 'èå©æ¬½',
'è¡å ' => 'è¡ä½',
'è«è¦éåçä¹è¯' => 'è«èè£è³£ç麼è¥',
-'滿å°å¯' => 'èç¹å©ç¾',
'èç¹å©' => 'èç¹å©ç¾',
'èè' => 'èç',
'èèä½' => 'èèä½',
@@ -16992,6 +16979,7 @@ public static $zh2HK = [
'è¨èè
' => 'è¨èè
',
'è¨èè¿°' => 'è¨èè¿°',
'è¨èé' => 'è¨èé',
+'è¨éè' => 'è¨éç',
'試è' => '試ç',
'試èä½' => '試èä½',
'試èå' => '試èå',
@@ -17925,6 +17913,7 @@ public static $zh2CN = [
'éèè¿°' => 'å
³èè¿°',
'é帳' => 'å
³è´¦',
'è¨æ¶é«' => 'å
å',
+'å¥æ´æ¯' => 'å
ç½æ¯',
'çæ¯äº' => 'åæ¯äº',
'åè' => 'åç',
'åèæ¸' => 'åè书',
@@ -18253,6 +18242,8 @@ public static $zh2CN = [
'åè稱' => 'åè称',
'åèè
' => 'åèè
',
'åèè¿°' => 'åèè¿°',
+'åææ' => 'åææ',
+'å
ææ' => 'åææ',
'å
è²è' => 'åè´ç',
'å¦å°å°¼äº' => 'å¦æ¡å°¼äº',
'ä¼æ³¢æ' => 'ååæ',
@@ -18346,7 +18337,6 @@ public static $zh2CN = [
'å®èè
' => 'å®èè
',
'å®èè¿°' => 'å®èè¿°',
'æ³¢éæ´»' => 'å®è±å',
-'å¯¬é »' => '宽带',
'å¯æ§å®' => 'å¯ææ ¹',
'å¯è¥¿æ ¹' => 'å¯ææ ¹',
'å°è' => '对ç',
@@ -18575,6 +18565,7 @@ public static $zh2CN = [
'æ³èè¿°' => 'æ³èè¿°',
'義大å©' => 'æ大å©',
'æå·´å¥å¤«' => 'æå°å·´ä¹å¤«',
+'æ份è¡' => 'æ份è¡',
'æ份' => 'æå',
'æ°è' => 'æç',
'æ°èæ¸' => 'æè书',
@@ -18818,6 +18809,7 @@ public static $zh2CN = [
'æ¼èè
' => 'æ¼èè
',
'æ¼èè¿°' => 'æ¼èè¿°',
'ä½æ¥ç³»çµ±' => 'æä½ç³»ç»',
+'æ¶éè' => 'æ¶å½ç',
'æ¶å¸³' => 'æ¶è´¦',
'æ¾è' => 'æ¾ç',
'æ¾èä½' => 'æ¾èä½',
@@ -19550,6 +19542,7 @@ public static $zh2CN = [
'索馬å©è' => '索马éå
°',
'æ£é«ä¸æ' => 'ç¹ä½ä¸æ',
'å¼·æ¯é ç°ç¤' => '约翰æ¯é¡¿å²',
+'ç´éè' => '纪å½ç',
'縱è' => '纵ç',
'çµä»½' => 'ç»å',
'ç¶å¸¸å¸³' => 'ç»å¸¸è´¦',
@@ -19686,7 +19679,6 @@ public static $zh2CN = [
'è½è稱' => 'è½è称',
'è½èè
' => 'è½èè
',
'è½èè¿°' => 'è½èè¿°',
-'滿å°å¯' => 'èç¹å©å°',
'èç¹å©' => 'èç¹å©å°',
'èè' => 'èç',
'èèæ¸' => 'èè书',
@@ -19770,6 +19762,7 @@ public static $zh2CN = [
'è¨ç«' => '计å',
'é»è
¦ç¨å¼' => '计ç®æºç¨åº',
'èªå¸³' => '认账',
+'è¨éè' => 'è®°å½ç',
'è¨è' => 'è®°ç',
'è¨èæ¸' => 'è®°è书',
'è¨èä½' => 'è®°èä½',
diff --git a/languages/i18n/ace.json b/languages/i18n/ace.json
index 209f25218e..20047c4716 100644
--- a/languages/i18n/ace.json
+++ b/languages/i18n/ace.json
@@ -766,7 +766,7 @@
"recentchanges-label-minor": "Nyoe neuandam ubeut",
"recentchanges-label-bot": "Neuandam nyoe geupubuet le bot",
"recentchanges-label-unpatrolled": "Neuandam nyoe goh lom geukalon",
- "recentchanges-legend-heading": "'''Hareutoë:'''",
+ "recentchanges-legend-heading": "
Hareutoë: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (eu cit [[Special:NewPages|dapeuta laman barô]])",
"rcnotefrom": "Di yup nyoë nakeuh neuubah yôh
$2 (geupeudeuh trôh âan
$1 neuubah).",
"rclistfrom": "Peudeuih neuubah barô yôh $3 $2 kön",
diff --git a/languages/i18n/ady-cyrl.json b/languages/i18n/ady-cyrl.json
index f27094db3a..05e0c7ce3c 100644
--- a/languages/i18n/ady-cyrl.json
+++ b/languages/i18n/ady-cyrl.json
@@ -435,7 +435,7 @@
"passwordreset-email": "ÐмÑйл адÑеÑ:",
"passwordreset-emailtitle": "ÐккаÑÐ½Ñ Ð¸ гÑÑпÑÑкIÑÑ
ÑÑ, мий ÑÑI {{SITENAME}}",
"passwordreset-emailelement": "ÐÑбгÑÑаÑIÑ: \n$1\n\nTemporary password: \n$2",
- "passwordreset-emailsent": "ÐÑÑ ÑегиÑÑÑÑгÑÑ ÐµÐ¼ÑйлÑÑ ÑÑÑÐ¼Ñ Ñи аккаÑнÑÑм пае, ÑÑÑÑгÑÑÑIÑм и зÑÑедз емÑйл кÑÑпÑагÑÑÑ
ÑÑÑÑ.",
+ "passwordreset-emailsentemail": "ÐÑÑ ÑегиÑÑÑÑгÑÑ ÐµÐ¼ÑйлÑÑ ÑÑÑÐ¼Ñ Ñи аккаÑнÑÑм пае, ÑÑÑÑгÑÑÑIÑм и зÑÑедз емÑйл кÑÑпÑагÑÑÑ
ÑÑÑÑ.",
"passwordreset-emailsent-capture": "ШÑÑÑгÑÑÑIÑм изÑÑедз ÑÑгÑÑÑ
ÑÑгÑÑ ÐµÐ¼ÑйлÑÑ Ð³ÑаÑ
ÑÑгÑÑ, ÑÑIÑгÑкIÑ Ð°Ñ Ð¾Ð»ÑÑгÑÑ.",
"changeemail": "ÐÑблÑÑ
ÑÑ Ðµ ÑегÑÑкI емÑйл адÑеÑÑÑ",
"changeemail-no-info": "ÐÑ Ð½ÑкIÑбгÑом занкIÑÑ ÑкIонÑÑ ÑÑаемÑ, ÑиÑÑемÑм ÑÑ
ÑÑ
ÑÑгÑÑн Ñае.",
@@ -687,8 +687,6 @@
"prefs-displayrc": "ÐÑÑпÑÑкIÑÑ
ÑÑ ÐºÑÑгÑÑлÑагÑÑ",
"prefs-displaywatchlist": "ÐÑÑпÑÑкIÑÑ
ÑÑ ÐºÑÑгÑÑлÑагÑÑ",
"prefs-tokenwatchlist": "Токен",
- "email-address-validity-valid": "ÐмÑйл адÑеÑÑÑ ÑÑÑÑзÑм ÑÑд",
- "email-address-validity-invalid": "ÐмÑйл адÑÐµÑ ÑÑÑÑз иÑÑ
",
"userrights-lookup-user": "ÐÑбгÑÑÑÐ¼Ñ ÑкÑпÑ
ÑÑ Ð³ÑÑпÑ",
"userrights-user-editname": "ÐÑÑ
Ñи нÑбгÑÑаÑÓÑÑ:",
"editusergroup": "ÐÑбгÑÑÑÐ¼Ñ Ñ ÐºÑÐ¿Ð¼Ñ ÑIаз",
@@ -785,7 +783,7 @@
"recentchanges-label-bot": "ÐÑ Ñ
ÑÓÑзÑнÑгÑÑÑ Ð±Ð¾ÑÑм ÑÑÓÑгÑ",
"recentchanges-label-unpatrolled": "ÐÑ Ñ
ÑÓÑзÑнÑгÑÑм джÑÑи паÑÑÑлÑÑ Ð°ÑплÑÑкÓÑгÑÑп",
"recentchanges-label-plusminus": "ÐÑкIÑбгÑом ионÑÑгÑÑгÑÑ Ð¼ÑÑ ÑÑдиз Ð±Ð°Ð¹Ñ Ð¿ÑÑагÑÑкIÑ Ð·ÑÑ
ÑокIÑгÑÑ",
- "recentchanges-legend-heading": "'''ТÑ
ÑдÑ:'''",
+ "recentchanges-legend-heading": "
ТÑ
ÑдÑ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (нÑмÑкÓÑÑ ÐµÐ¿Ð»Ñ [[Special:NewPages|нÑкÓÑбгÑÑакÓÑ ÐºÑп]])",
"rclistfrom": "Ð¥ÑIÑзÑнÑкIÑÑ
ÑÑ ÐºÑÑгÑÑлÑагÑÑ Ð¼ÑÑ ÑегÑÑжÑагÑÑÑ $2, $3",
"rcshowhideminor": "$1 зÑÑ
ÑокÓÑнÑгÑÑ ÑÓÑкÓÑ",
@@ -858,7 +856,6 @@
"upload-description": "ФайлÑм и кÑÑбаÑ",
"upload-options": "ÐлÑÑ
Ñан гÑÑпÑÑкIÑÑ
ÑÑ",
"watchthisupload": "ÐÑ ÑайлÑм лÑÑплÑ",
- "upload-success-subj": "ШIÐ¾Ñ Ð¸Ð»ÑÑ
ÑагÑ",
"upload-proto-error": "ÐÑоÑокол ÑÑкÑÑагÑÑ",
"upload-file-error": "ЫкIоÑI ÑÑкÑÑагÑÑ",
"upload-misc-error": "ÐÑÑ
ÑмÑÑIÑкIÑгÑÑ Ð¸Ð»ÑÑ
Ñан ÑÑкÑÑагÑÑ",
@@ -868,7 +865,6 @@
"upload-dialog-button-done": "ÐÑÑIÑÑкIÑгÑÑ",
"upload-dialog-button-save": "ÐÑÑ
",
"upload-dialog-button-upload": "ÐлÑÑ
Ñ",
- "upload-form-label-select-file": "ÐÑÑÑ
ÑÑ
Ñайл",
"upload-form-label-infoform-title": "ÐÑÑбаÑ",
"upload-form-label-infoform-name": "ЦIÑ",
"upload-form-label-infoform-description": "ÐгÑÑÑбгÑÑIон",
diff --git a/languages/i18n/af.json b/languages/i18n/af.json
index 0d1c8d7c1c..0c51902c2f 100644
--- a/languages/i18n/af.json
+++ b/languages/i18n/af.json
@@ -1115,7 +1115,7 @@
"recentchanges-label-bot": "Hierdie wysiging is deur 'n bot gemaak",
"recentchanges-label-unpatrolled": "Die wysiging is nog nie gekontroleer nie",
"recentchanges-label-plusminus": "Bladsy is met die aantal grepe gewysig",
- "recentchanges-legend-heading": "'''Sleutel:'''",
+ "recentchanges-legend-heading": "
Sleutel: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sien ook die [[Special:NewPages|lys van nuwe bladsye]])",
"rcnotefrom": "Wysigings sedert
$2 (maksimum van
$1 word gewys).",
"rclistfrom": "Vertoon wysigings vanaf $3 $2",
diff --git a/languages/i18n/anp.json b/languages/i18n/anp.json
index 44192fda5d..2621af97ea 100644
--- a/languages/i18n/anp.json
+++ b/languages/i18n/anp.json
@@ -501,7 +501,7 @@
"recentchanges-label-bot": "ठसà¤à¤ªà¤¾à¤¦à¤¨ बà¥à¤ नॠà¤à¤°à¤²à¤à¥",
"recentchanges-label-unpatrolled": "ठसà¤à¤ªà¤¾à¤¦à¤¨ à¤
à¤à¤¨à¥ à¤à¤¾à¤à¤à¤²à¤½ नॠà¤à¥à¤²à¤½ à¤à¥.",
"recentchanges-label-plusminus": "पà¥à¤·à¥à¤ à¤à¤à¤¾à¤° ठबाà¤à¤ सà¤à¤à¥à¤¯à¤¾ सà¤à¥ बदललà¥",
- "recentchanges-legend-heading": "'''विवरण:'''",
+ "recentchanges-legend-heading": "
विवरण: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नया पनà¥à¤¨à¤¾ à¤à¥ सà¥à¤à¥]] à¤à¥ à¤à¥ दà¥à¤à¤½)",
"rclistfrom": "$3 $2 सà¤à¥ नया बदलाव दà¥à¤à¤²à¤¾à¤¬à¤½",
"rcshowhideminor": "à¤à¥à¤à¤½ बदलाव $1",
diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json
index 2ec612050c..318f8a20f7 100644
--- a/languages/i18n/ar.json
+++ b/languages/i18n/ar.json
@@ -58,7 +58,8 @@
"Haytham morsy",
"BAB ZAA",
"ASammour",
- "Maroen1990"
+ "Maroen1990",
+ "Sonic N800"
]
},
"tog-underline": "سطر تØت اÙÙصÙات:",
@@ -494,7 +495,7 @@
"nocookieslogin": "ÙستخدÙ
{{SITENAME}} اÙÙÙÙÙز ÙتسجÙ٠اÙدخÙÙ.\nاÙÙÙÙÙز Ù
عطÙØ© ÙدÙÙ.\nÙ
Ù ÙضÙÙ ÙعÙÙا Ø«Ù
ØاÙÙ Ù
رة أخرÙ.",
"nocookiesfornew": "ÙÙ
ÙتÙ
Ø¥Ùشاء Øساب اÙÙ
ستخدÙ
Ø ÙØ£ÙÙا ÙÙ
Ùستطع تأÙÙد Ù
صدرÙ. \nتأÙد Ù
٠أ٠Ù
ÙÙات تعرÙ٠اÙارتباط (اÙÙÙÙÙز) Ù
ÙعÙØ© عÙدÙØ Ø«Ù
أعد تØÙ
Ù٠اÙصÙØØ© ÙØاÙÙ Ù
رة أخرÙ.",
"noname": "ÙÙ
تØدد اسÙ
Ù
ستخدÙ
صØÙØ.",
- "loginsuccesstitle": "تÙ
اÙدخÙ٠بشÙ٠صØÙØ",
+ "loginsuccesstitle": "تÙ
اÙدخÙÙ",
"loginsuccess": "'''ÙÙد سجÙت اÙدخÙÙ Ù{{SITENAME}} باسÙ
\"$1\".'''",
"nosuchuser": "Ùا ÙÙجد Ù
ستخدÙ
باÙاسÙ
\"$1\".\nأسÙ
اء اÙÙ
ستخدÙ
ÙÙ Øساسة ÙØاÙØ© اÙØرÙÙ.\nتأÙد Ù
٠إÙ
Ùاء اÙاسÙ
Ø Ø£Ù [[Special:UserLogin/signup|ÙÙ
بإÙشاء Øساب جدÙد]].",
"nosuchusershort": "Ùا ÙÙجد Ù
ستخدÙ
باسÙ
$1\".\nتأÙد Ù
٠إÙ
Ùاء اÙاسÙ
.",
@@ -530,7 +531,7 @@
"createaccount-title": "Ø¥Ùشاء Øساب ÙÙ {{SITENAME}}",
"createaccount-text": "شخص Ù
ا Ø£Ùشأ Øسابا ÙعÙÙا٠برÙد٠اÙØ¥ÙÙترÙÙÙ ÙÙ {{SITENAME}} ($4) باÙاسÙ
\"$2\"Ø ÙÙÙ
Ø© اÙسر \"$3\".\nÙÙبغ٠عÙÙ٠تسجÙ٠اÙدخÙÙ ÙتغÙÙر ÙÙÙ
Ø© اÙسر اÙخاصة ب٠اÙØ¢Ù.\n\nÙÙ
ÙÙ٠تجاÙÙ Ùذ٠اÙرساÙØ©Ø Ù٠تÙ
Ø¥Ùشاء Ùذا اÙØساب باÙخطأ.",
"login-throttled": "ÙÙد ÙÙ
ت بÙ
ØاÙÙات دخÙÙ ÙØ«Ùرة جدا Ù
ؤخرا.\nÙ
Ù ÙضÙ٠اÙتظر $1 Ùب٠اÙÙ
ØاÙÙØ© Ù
رة أخرÙ.",
- "login-abort-generic": "ÙÙ
ÙÙØ¬Ø ÙÙÙج٠- تÙ
إجÙاضÙ",
+ "login-abort-generic": "Ùش٠دخÙÙÙ - تÙ
إجÙاضÙ",
"login-migrated-generic": "تÙ
تÙجÙر ØسابÙØ ÙÙÙ
Ùعد اسÙ
اÙÙ
ستخدÙ
اÙخاص ب٠Ù
ÙجÙدا٠عÙÙ Ùذ٠اÙÙÙÙÙ",
"loginlanguagelabel": "اÙÙغة: $1",
"suspicious-userlogout": "رÙض Ø·Ùب خرÙج٠ÙØ£ÙÙ Ùبد٠ÙØ£Ù٠أرس٠ع٠طرÙÙ Ù
تصÙØ Ù
عطÙب Ø£Ù ÙسÙØ· تخزÙÙ.",
@@ -550,7 +551,7 @@
"newpassword": "ÙÙÙ
Ø© اÙسر اÙجدÙدة:",
"retypenew": "أعد Ùتابة ÙÙÙ
Ø© اÙسر اÙجدÙدة:",
"resetpass_submit": "ضبط ÙÙÙ
Ø© اÙسر ÙاÙدخÙÙ",
- "changepassword-success": "تÙ
تغÙÙر ÙÙÙ
Ø© اÙسر بÙجاØ!",
+ "changepassword-success": "تÙ
تغÙÙر ÙÙÙ
Ø© اÙسر !",
"changepassword-throttled": "ÙدÙÙ Ù
ØاÙÙات تسجÙ٠دخÙÙ ÙØ«Ùرة ØدÙثة. Ù
Ù ÙضÙ٠اÙتظر $1 Ùب٠اÙÙ
ØاÙÙØ© ثاÙÙØ©.",
"botpasswords": "ÙÙÙ
ات Ù
رÙر اÙبÙت",
"botpasswords-disabled": "ÙÙÙ
ات اÙسر اÙخاصة باÙبÙت Ù
عطÙØ©.",
@@ -568,8 +569,12 @@
"botpasswords-label-restrictions": "ÙÙÙد اÙاستخداÙ
:",
"botpasswords-label-grants-column": "اÙÙ
Ù
ÙÙØ",
"botpasswords-bad-appid": "اسÙ
اÙبÙت \"$1\" غÙر صØÙØ.",
+ "botpasswords-insert-failed": "ÙØ´Ù Ù٠اضاÙØ© اسÙ
اÙبÙت \"$1\".Ù٠اضÙ٠باÙÙعÙØ",
+ "botpasswords-update-failed": "ÙØ´Ù Ù٠تØدÙØ« اسÙ
بÙت \"$1\". Ù٠تÙ
ØØ°ÙÙØ",
"botpasswords-created-title": "صÙاعة ÙÙÙ
Ø© سر Ø£ÙÙØ©",
+ "botpasswords-created-body": "تÙ
Ø¥Ùشاء ÙÙÙ
Ø© Ù
رÙر بÙت \"$1\".",
"botpasswords-updated-title": "تØدÙØ« ÙÙÙ
Ø© اÙسر اÙØ£ÙÙØ©",
+ "botpasswords-updated-body": "ÙÙÙ
Ø© سر اÙبÙت\"$1\" Ùد ØØ°Ùت.",
"botpasswords-deleted-title": "ÙÙÙ
Ø© سر اÙبÙت ØØ°Ùت",
"botpasswords-deleted-body": "ÙÙÙ
Ø© سر اÙبÙت\"$1\" Ùد ØØ°Ùت.",
"resetpass_forbidden": "ÙÙÙ
ات اÙسر Ùا ÙÙ
Ù٠تغÙÙرÙا",
@@ -855,9 +860,9 @@
"revdelete-unsuppress": "إزاÙØ© اÙضÙابط Ù
٠اÙÙ
راجعات اÙÙ
سترجعة",
"revdelete-log": "اÙسبب:",
"revdelete-submit": "طب٠عÙÙ {{PLURAL:$1||اÙÙ
راجعة اÙÙ
ختارة|اÙÙ
راجعتÙ٠اÙÙ
ختارتÙÙ|اÙÙ
راجعات اÙÙ
ختارة}}",
- "revdelete-success": "'''تÙ
تØدÙØ« رؤÙØ© اÙÙ
راجعات بÙجاØ.'''",
+ "revdelete-success": "تÙ
تØدÙØ« رؤÙØ© اÙÙ
راجعات بÙجاØ.",
"revdelete-failure": "'''تعذر تØدÙØ« رؤÙØ© اÙÙ
راجعة:'''\n$1",
- "logdelete-success": "'''تÙ
ضبط رؤÙØ© اÙسجÙات بÙجاØ.'''",
+ "logdelete-success": "تÙ
ضبط رؤÙØ© اÙسجÙات بÙجاØ.",
"logdelete-failure": "'''تعذر ضبط رؤÙØ© اÙسجÙ:'''\n$1",
"revdel-restore": "تغÙÙر اÙرؤÙØ©",
"pagehist": "تارÙØ® اÙصÙØØ©",
@@ -886,7 +891,7 @@
"mergehistory-go": "عرض اÙتعدÙÙات اÙÙابÙØ© ÙÙدÙ
ج",
"mergehistory-submit": "دÙ
ج اÙÙ
راجعات",
"mergehistory-empty": "Ùا Ù
راجعات ÙÙ
Ù٠دÙ
جÙا.",
- "mergehistory-done": "$3 {{PLURAL:$3|Ù
راجعة|Ù
راجعة}} Ù
Ù $1 تÙ
دÙ
جÙا بÙØ¬Ø§Ø ÙÙ [[:$2]].",
+ "mergehistory-done": "$3 {{PLURAL:$3|Ù
راجعة|Ù
راجعة}} Ù
Ù $1{{PLURAL:$3|ÙاÙ|اÙÙ}} تÙ
دÙ
جÙا بÙØ¬Ø§Ø ÙÙ [[:$2]].",
"mergehistory-fail": "غÙر Ùادر عÙ٠عÙ
٠دÙ
ج اÙتارÙØ®Ø Ù
Ù ÙضÙ٠أعد اÙتØÙÙ Ù
Ù Ù
Øددات اÙصÙØØ© ÙاÙزÙ
Ù.",
"mergehistory-fail-bad-timestamp": "اÙختÙ
اÙزÙ
Ù٠غÙر صاÙØ.",
"mergehistory-fail-invalid-source": "اÙصÙØØ© اÙÙ
صدر غÙر صاÙØØ©.",
@@ -1210,6 +1215,7 @@
"grant-editpage": "تعدÙ٠صÙØات Ù
ÙجÙدة",
"grant-editprotected": "تعدÙ٠صÙØات Ù
ØÙ
ÙØ©",
"grant-highvolume": "تعدÙÙ ÙبÙر اÙØجÙ
",
+ "grant-patrol": "تغÙÙرات دÙرÙØ© ÙÙصÙØات",
"grant-protect": "ØÙ
اÙØ© ÙإزاÙØ© ØÙ
اÙØ© اÙصÙØات",
"grant-rollback": "استرجاع اÙتغÙÙرات Ù٠اÙصÙØات",
"grant-sendemail": "إرسا٠برÙد Ø¥ÙÙترÙÙÙ ÙÙÙ
ستخدÙ
Ù٠اÙآخرÙÙ",
@@ -1227,6 +1233,7 @@
"action-createpage": "Ø¥Ùشاء اÙصÙØات",
"action-createtalk": "Ø¥Ùشاء صÙØات اÙÙÙاش",
"action-createaccount": "Ø¥Ùشاء Øساب اÙÙ
ستخدÙ
Ùذا",
+ "action-autocreateaccount": "تÙÙائÙا Ø¥Ùشاء Ùذا اÙØساب Ù
ستخدÙ
خارجÙ",
"action-history": "اعرض تارÙØ® Ùذ٠اÙصÙØØ©",
"action-minoredit": "اÙتعÙÙÙ
عÙÙ Ùذا اÙتعدÙÙ ÙØ·ÙÙÙ",
"action-move": "ÙÙÙ Ùذ٠اÙصÙØØ©",
@@ -1483,7 +1490,7 @@
"uploadstash-clear": "Ù
Ø³Ø Ø§ÙÙ
ÙÙات اÙÙ
خبأة",
"uploadstash-nofiles": "ÙÙس ÙدÙ٠أ٠Ù
ÙÙات Ù
خبأة.",
"uploadstash-badtoken": "ÙÙ
ÙÙØ¬Ø Ø£Ø¯Ø§Ø¡ Ø°Ù٠اÙعÙ
ÙØ Ø±Ø¨Ù
ا ÙØ£Ù Ùثائ٠تÙÙÙض اÙتØرÙر اÙخاصة ب٠Ù
ÙتÙÙØ© اÙصÙاØÙØ©. ØاÙÙ Ù
رة أخرÙ.",
- "uploadstash-errclear": "ÙÙ
تÙØ¬Ø Ø¹Ù
ÙÙØ© Ù
Ø³Ø Ø§ÙÙ
ÙÙات.",
+ "uploadstash-errclear": "ÙØ´Ùت عÙ
ÙÙØ© Ù
Ø³Ø Ø§ÙÙ
ÙÙات.",
"uploadstash-refresh": "تØدÙØ« ÙائÙ
Ø© اÙÙ
ÙÙات",
"invalid-chunk-offset": "Ùطعة Ø£ÙÙست غÙر صاÙØØ©",
"img-auth-accessdenied": "رÙض اÙÙصÙÙ",
@@ -1753,7 +1760,8 @@
"apisandbox-sending-request": "إرسا٠طÙب API ...",
"apisandbox-loading-results": "استÙبا٠طÙبات API ...",
"apisandbox-request-url-label": "Ù
سار اÙØ·Ùب:",
- "apisandbox-request-time": "ÙÙت اÙØ·Ùب: $1",
+ "apisandbox-request-time": "ÙÙت اÙØ·Ùب: {{PLURAL:$1|$1 ms}}",
+ "apisandbox-results-fixtoken": "رÙ
ز اÙصØÙØ Ùإعادة اÙÙ
ÙاÙÙØ©",
"apisandbox-alert-page": "ÙÙا٠ØÙÙ٠غÙر صاÙØØ© ÙÙ Ùذ٠اÙصÙØØ©.",
"apisandbox-alert-field": "ÙÙÙ
Ø© Ùذا اÙØÙ٠غÙر صاÙØØ©.",
"booksources": "Ù
صادر Ùتاب",
@@ -1982,6 +1990,7 @@
"changecontentmodel-title-label": "عÙÙا٠اÙصÙØØ©",
"changecontentmodel-model-label": "ÙÙ
Ùذج Ù
ØتÙ٠جدÙد",
"changecontentmodel-reason-label": "اÙسبب:",
+ "changecontentmodel-submit": "تغÙÙر",
"changecontentmodel-success-title": "ÙÙ
Ùذج اÙÙ
ØتÙ٠تÙ
تغÙÙرÙ",
"changecontentmodel-success-text": "ÙÙع اÙÙ
ØتÙÙ Ù[[:$1]] تÙ
تغÙÙرÙ.",
"changecontentmodel-cannot-convert": "اÙÙ
ØتÙ٠عÙÙ [[:$1]] Ùا ÙÙ
Ù٠تØÙÙÙÙ ÙÙÙع Ù
Ù $2.",
@@ -2529,8 +2538,8 @@
"pageinfo-language": "Ùغة Ù
ØتÙ٠اÙصÙØØ©",
"pageinfo-content-model": "ÙÙ
Ùذج Ù
ØتÙ٠اÙصÙØØ©",
"pageinfo-robot-policy": "ÙÙرسة اÙرÙبÙتات",
- "pageinfo-robot-index": "Ù
سÙ
ÙØØ©",
- "pageinfo-robot-noindex": "غÙر Ù
سÙ
ÙØØ©",
+ "pageinfo-robot-index": "Ù
سÙ
ÙØ Ø¨Ùا",
+ "pageinfo-robot-noindex": "غÙر Ù
سÙ
ÙØ Ø¨Ùا",
"pageinfo-watchers": "عدد اÙÙ
راÙبÙÙ",
"pageinfo-visiting-watchers": "عدد Ù
راÙب٠اÙصÙØØ© اÙØ°Ù٠زارÙا اÙتعدÙÙات اÙأخÙرة",
"pageinfo-few-watchers": "Ø£ÙÙ Ù
Ù {{PLURAL:$1||Ù
راÙب ÙاØد|Ù
راÙبÙ٠اثÙÙÙ|$1 Ù
راÙبÙÙ|$1 Ù
راÙباÙ|$1 Ù
راÙب}}",
@@ -3293,12 +3302,14 @@
"tags-deactivate": "تعطÙÙ",
"tags-hitcount": "{{PLURAL:$1|Ùا تغÙÙرات|تغÙÙر ÙاØد|تغÙÙراÙ|$1 تغÙÙرات|$1 تغÙÙرا|$1 تغÙÙر}}",
"tags-manage-no-permission": "ÙÙس ÙدÙ٠صÙاØÙØ© إدارة ÙسÙÙ
اÙتغÙÙر.",
+ "tags-manage-blocked": "Ùا ÙÙ
ÙÙ٠إدارة عÙاÙ
ات اÙتغÙÙر ÙÙ ØÙÙ Ù
Ùعت.",
"tags-create-heading": "Ø¥Ùشاء ÙسÙ
جدÙد",
"tags-create-explanation": "Ù٠اÙÙضع اÙاÙتراضÙØ Ø§ÙÙسÙÙ
اÙجدÙدة اÙÙ
Ùشأة سÙØªØ§Ø Ø§Ø³ØªØ®Ø¯Ø§Ù
Ùا ÙÙبÙتات ÙاÙÙ
ستخدÙ
ÙÙ.",
"tags-create-tag-name": "اسÙ
اÙÙسÙ
:",
"tags-create-reason": "اÙسبب:",
"tags-create-submit": "Ø£Ùشئ",
"tags-create-no-name": "عÙÙ٠أ٠تØدد اسÙ
اÙÙسÙ
.",
+ "tags-create-invalid-title-chars": "Ùجب Ø£Ù Ùا تØتÙ٠أسÙ
اء اÙعÙاÙ
ات اÙØ£Øر٠اÙت٠Ùا ÙÙ
Ù٠استخداÙ
Ùا Ù٠عÙاÙÙ٠اÙصÙØات.",
"tags-create-already-exists": "اÙÙسÙ
\"$1\" Ù
ÙجÙد باÙÙعÙ.",
"tags-create-warnings-below": "Ù٠تÙد Ù
تابعة Ø¥Ùشاء اÙÙسÙ
Ø",
"tags-delete-title": "اØذ٠اÙÙسÙ
",
@@ -3318,6 +3329,8 @@
"tags-deactivate-reason": "سبب",
"tags-deactivate-not-allowed": "Ù
٠غÙر اÙÙ
Ù
Ù٠تعطÙ٠اÙÙسÙ
\"$1\".",
"tags-deactivate-submit": "عطÙ",
+ "tags-apply-no-permission": "ÙÙس ÙدÙ٠إذ٠ÙتطبÙ٠عÙاÙ
ات اÙتغÙÙر جÙبا Ø¥Ù٠جÙب Ù
ع اÙتغÙÙرات.",
+ "tags-apply-blocked": "Ùا ÙÙ
ÙÙ٠تطبÙ٠عÙاÙ
ات اÙتغÙÙر جÙبا Ø¥Ù٠جÙب Ù
ع اÙتغÙÙرات ÙÙ ØÙÙ Ù
Ùعت.",
"tags-apply-not-allowed-one": "اÙسÙÙ
\"$1\" غÙر Ù
سÙ
ÙØ Ø£Ù ÙتÙ
تطبÙÙÙ ÙدÙÙا.",
"tags-apply-not-allowed-multi": "{{PLURAL:$2|اÙÙسÙ
|اÙÙسÙÙ
}} اÙتاÙÙØ© غÙر Ù
سÙ
ÙØ Ø£Ù ÙتÙ
تطبÙÙÙا ÙدÙÙا: $1",
"tags-update-no-permission": "Ø£Ùت Ùا تÙ
تÙ٠اÙسÙ
Ø§Ø ÙإضاÙØ© أ٠إزاÙØ© ÙسÙÙ
اÙتغÙÙر Ù
٠اÙÙ
راجعات Ø£Ù Ù
دخÙات اÙسج٠اÙÙردÙØ©.",
@@ -3342,7 +3355,7 @@
"tags-edit-reason": "اÙسبب:",
"tags-edit-revision-submit": "طب٠اÙتغÙÙرات Ù{{PLURAL:$1|Ùذ٠اÙÙ
راجعة|$1 Ù
راجعات}}",
"tags-edit-logentry-submit": "طب٠اÙتغÙÙرات Ù{{PLURAL:$1|Ù
دخÙØ© اÙسج٠ÙØ°Ù|$1 Ù
دخÙات اÙسجÙ}}",
- "tags-edit-success": "طبÙت اÙتغÙÙرات بÙجاØ.",
+ "tags-edit-success": "طبÙت اÙتغÙÙرات.",
"tags-edit-failure": "اÙتغÙÙرات ÙÙ
تطبÙ: $1",
"tags-edit-nooldid-title": "Ù
راجعة Ùد٠غÙر صاÙØØ©",
"tags-edit-none-selected": "Ù
Ù ÙضÙ٠اختر عÙ٠اÙØ£ÙÙ ÙسÙ
ا ÙاØدا ÙÙإضاÙØ© أ٠اÙإزاÙØ©.",
@@ -3494,7 +3507,9 @@
"api-error-publishfailed": "خطأ داخÙÙ: ÙÙ
ÙÙØ¬Ø Ø§ÙخادÙÙ
ÙÙ Ùشر Ù
ÙÙ Ù
ؤÙت",
"api-error-stasherror": "Øدث خطأ أثÙاء رÙع اÙÙ
ÙÙ ÙتخزÙÙÙ.",
"api-error-stashedfilenotfound": "ÙÙ
Ùعثر عÙ٠اÙÙ
Ù٠اÙÙ
ØجÙب عÙد Ù
ØاÙÙØ© رÙع٠Ù
٠اÙØجب.",
+ "api-error-stashpathinvalid": "ÙÙا٠اÙطرÙ٠اÙØ°Ù Ùجب Ø£Ù ÙتÙ
اÙعثÙر عÙÙ Ù
ÙÙ Ù
خبئ غÙر صاÙØ.",
"api-error-stashfilestorage": "Øدث خطأ أثÙاء رÙع اÙÙ
ÙÙ ÙتخزÙÙÙ.",
+ "api-error-stashzerolength": "Ùا ÙÙ
Ù٠أ٠خادÙ
تخبئة اÙÙ
ÙÙØ ÙØ£ÙÙ ÙØتÙ٠عÙÙ Ø·Ù٠صÙرÙ.",
"api-error-stashnotloggedin": "Ùجب عÙÙ٠تسجÙ٠اÙدخÙÙ ÙØÙظ اÙÙ
ÙÙات ÙÙ Ù
رÙÙعاتÙ.",
"api-error-stashwrongowner": "اÙÙ
Ù٠اÙØ°Ù ÙÙت تØاÙ٠اÙÙصÙ٠اÙÙÙ ÙÙ Ù
خبÙائت٠ÙÙس ÙÙ.",
"api-error-stashnosuchfilekey": "اÙÙ
Ù٠اÙØ°Ù ÙÙت تØاÙ٠اÙÙصÙ٠اÙÙÙ ÙÙ Ù
خبÙائت٠غÙر Ù
ÙجÙد.",
@@ -3542,6 +3557,7 @@
"expand_templates_generate_xml": "اعرض شجرة XML parse",
"expand_templates_generate_rawhtml": "أظÙر خاÙ
HTML",
"expand_templates_preview": "عرض Ù
سبÙ",
+ "expand_templates_preview_fail_html": "
عذرا! ÙÙ
Ùستطع Ù
عاÙجة تعدÙÙ٠بسبب ÙÙدا٠بÙاÙات اÙجÙسة.\n\nÙØ£Ù {{SITENAME}} بÙا HTML اÙخاÙ
Ù
ÙعÙØ©Ø Ø§Ùعرض اÙÙ
سب٠Ù
Ø®ÙÙ ÙاØتÙاط ضد ÙجÙ
ات اÙجاÙا سÙرÙبت. \n\n
إذا ÙاÙت ÙØ°Ù Ù
ØاÙÙØ© تعدÙ٠صادÙØ©Ø Ù
Ù ÙضÙÙ ØاÙÙ Ù
رة أخرÙ. \nإذا ÙاÙت Ù
ازاÙت Ùا تعÙ
ÙØ ØاÙÙ [[Special:UserLogout|تسجÙ٠اÙخرÙج]] Ø«Ù
تسجÙ٠اÙدخÙÙ Ù
جددا.٠تاÙد ÙÙ Ù
تصÙØÙ Ù
٠اÙÙÙÙÙز اÙخاصة بÙذا اÙÙ
ÙÙع.",
"expand_templates_input_missing": "Ùجب تÙدÙÙ
بعض اÙÙ
دخÙات اÙÙصÙØ© عÙ٠اÙØ£ÙÙ.",
"pagelanguage": "تغÙÙر Ùغة اÙصÙØØ©",
"pagelang-name": "صÙØØ©",
@@ -3555,10 +3571,11 @@
"log-description-pagelang": "Ùذا سج٠تغÙرات Ù٠صÙØØ© اÙÙغات.",
"logentry-pagelang-pagelang": " {{GENDER:$2|غÙÙÙر|غÙÙÙرت}} $1 Ùغة اÙصÙØØ© «$3» Ù
Ù $4 Ø¥ÙÙ $5.",
"default-skin-not-found-row-enabled": "*
$1
/ $2 (Ù
ÙعÙ)",
- "default-skin-not-found-row-disabled": "*
$1
/ $2 ('''Ù
عطÙ''')",
+ "default-skin-not-found-row-disabled": "*
$1
/ $2 (
Ù
Ùغاة )",
"mediastatistics": "Ø¥Øصاءات اÙÙ
ÙدÙا",
"mediastatistics-summary": "Ø¥Øصاءات ع٠أÙÙ
اط اÙÙ
ÙÙات اÙÙ
رÙÙØ¹Ø©Ø ÙتشÙ
٠أØدث Ùسخة Ù
٠اÙÙ
ÙÙ ÙÙØ·Ø ØÙØ« تستبعد اÙÙسخ اÙÙدÙÙ
Ø© أ٠اÙÙ
ØØ°ÙÙØ© Ù
٠اÙÙ
ÙÙات.",
"mediastatistics-nbytes": "{{PLURAL:$1|باÙت ÙاØد|باÙتا٠اثÙاÙ|$1 باÙتات|$1 باÙتاÙ|$1 باÙت}} ($2; $3%)",
+ "mediastatistics-bytespertype": "اÙØجÙ
اÙÙÙÙ ÙÙ٠اÙÙ
ÙÙات: {{PLURAL:$1|باÙت$1|$1 باÙت}}($2; $3%).",
"mediastatistics-allbytes": "اÙØجÙ
اÙÙÙÙ ÙÙ٠اÙÙ
ÙÙات: {{PLURAL:$1|$1 باÙت}} ($2).",
"mediastatistics-table-mimetype": "ÙÙع MIME",
"mediastatistics-table-extensions": "اÙاÙ
تدادات اÙÙ
Ù
ÙÙØ©",
diff --git a/languages/i18n/arc.json b/languages/i18n/arc.json
index 8ef40dbf13..9c7ef37c75 100644
--- a/languages/i18n/arc.json
+++ b/languages/i18n/arc.json
@@ -626,7 +626,7 @@
"recentchanges-label-bot": "ÜÜܬ (bot) Ü¥ÜÜ ÜÜ¢Ü Ü«ÜÜÜ Ü¦Ü",
"recentchanges-label-unpatrolled": "Ü«ÜÜÜ Ü¦Ü ÜÜ¢Ü Ü Ü ÜÜ ÜܪÜÜÜ Ü ÜÜ«Ü",
"recentchanges-label-plusminus": "Ü¥ÜÜªÜ ÜܦÜÜ¬Ü ÜܫܬÜÜ Ü¦ ÜÜÜ¢Ü Ü¡Ü¢ÜÜ¢Ü Ü¡Ü¢ ÜÜÜÌ",
- "recentchanges-legend-heading": "'''ܦÜÜ«Ü©Ü:'''",
+ "recentchanges-legend-heading": "
ܦÜÜ«Ü©Ü: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Üܦ ÜÜÜ [[Special:NewPages|Ü¡ÜܬÜÜÜ¬Ü ÜܦÜܬܬÌÜ ÜÜÌܬܬÜ]])",
"rcnotefrom": "Ü Ü¬Üܬ Ü«ÜÜÜ Ü¦ÌÜ ÜÜ¡Ü¢ '''$2''' (Ü¥Ü '''$1''' ܡܬÜÜÜÜ¢ÌÜ).",
"rclistfrom": "ÜÜÜ Ü«ÜÜÜ Ü¦ÌÜ ÜÜÌÜ¬Ü Ü¡Ü¢ $3 $2",
diff --git a/languages/i18n/arq.json b/languages/i18n/arq.json
index 5131276e7d..cc236713f5 100644
--- a/languages/i18n/arq.json
+++ b/languages/i18n/arq.json
@@ -61,7 +61,7 @@
"editfont-serif": "ØرÙ٠ب٠زÙاÙد",
"sunday": "اÙØد",
"monday": "ÙØ«ÙÙÙ",
- "tuesday": "اÙتÙاتÙ",
+ "tuesday": "اÙØ«Ùاث",
"wednesday": "ÙاربعÙ",
"thursday": "اÙØ®Ù
Ùس",
"friday": "اÙجÙ
عÙ",
@@ -76,15 +76,15 @@
"january": "جاÙÙÙ",
"february": "ÙÙÙرÙ",
"march": "Ù
ارس",
- "april": "Ø£ÙرÙÙ",
+ "april": "اÙرÙÙ",
"may_long": "Ù
اÙ",
"june": "جÙاÙ",
- "july": "جÙÙÙÙÙ",
- "august": "Ø£Ùت",
- "september": "سبتاÙ
بر",
- "october": "ÙتÙبر",
- "november": "ÙÙÙاÙ
بر",
- "december": "دÙساÙ
بر",
+ "july": "جÙÙÙÙØ©",
+ "august": "اÙت",
+ "september": "سبتÙ
بر",
+ "october": "اÙتÙبر",
+ "november": "ÙÙÙÙ
بر",
+ "december": "دÙسÙ
بر",
"january-gen": "جاÙÙÙ",
"february-gen": "ÙÙÙرÙ",
"march-gen": "Ù
ارس",
@@ -100,15 +100,15 @@
"jan": "جاÙÙÙ",
"feb": "ÙÙÙرÙ",
"mar": "Ù
ارس",
- "apr": "Ø£ÙرÙÙ",
+ "apr": "اÙرÙÙ",
"may": "Ù
اÙ",
"jun": "جÙاÙ",
- "jul": "جÙÙÙÙÙ",
- "aug": "Ø£Ùت",
- "sep": "سبتاÙ
بر",
- "oct": "ÙتÙبر",
- "nov": "ÙÙÙاÙ
بر",
- "dec": "دÙساÙ
بر",
+ "jul": "جÙÙÙÙØ©",
+ "aug": "اÙت",
+ "sep": "سبتÙ
بر",
+ "oct": "اÙتÙبر",
+ "nov": "ÙÙÙÙ
بر",
+ "dec": "دÙسÙ
بر",
"january-date": "جاÙÙÙÙ $1",
"february-date": "ÙÙÙرÙÙ $1",
"march-date": "Ù
ارس $1",
@@ -123,7 +123,7 @@
"december-date": "دÙسÙ
بر $1",
"period-am": "تاع اÙصباØ",
"period-pm": "تاع اÙعشÙÙØ©",
- "pagecategories": "{{PLURAL:$1|ÙصÙÙØ©|ÙصÙÙات}}",
+ "pagecategories": "{{PLURAL:$1|ÙاتÙÚÙرÙ|ÙاتÙÚÙرÙات}}",
"category_header": "اÙباج٠Ù٠اÙتصÙÙÙ \"$1\"",
"subcategories": "تصÙÙÙات تØتÙÙ",
"category-media-header": "ÙÙØ´ÙÙ Ù
ÙÙتÙÙ
ÙدÙا ÙاÙÙاتÙÙÙر٠\"$1\"",
@@ -149,7 +149,7 @@
"mypage": "باجÙ",
"mytalk": "تÙرعÙج",
"anontalk": "تÙرعÙج",
- "navigation": "تبØار",
+ "navigation": "ÙاڥÙÚاسÙÙÙ",
"and": " Ù",
"qbfind": "Ùتش",
"qbbrowse": "اتجÙÙÙ ÙÙ Ù
ضÙ
ÙÙ",
@@ -159,12 +159,12 @@
"faq": "اÙÙ
سÙسÙØ© اÙÙ
تعاÙدÙ",
"faqpage": "Project:سؤاÙات Ù
تÙررÙ",
"actions": "Ø£ÙعاÙ",
- "namespaces": "بÙاصة تاع أسÙ
Ùات",
+ "namespaces": "بÙاصة تاع اÙاساÙ
Ù",
"variants": "تÙÙÙعات",
- "navigation-heading": "اÙÙاÙÙ
Ø© تاع اÙÙتبØار",
+ "navigation-heading": "اÙÙÙستة تاع اÙÙاڥÙÚاسÙÙÙ",
"errorpagetitle": "غÙØ·Ù",
"returnto": "ÙÙ٠إÙÙ $1.",
- "tagline": "Ù
Ù{{SITENAME}}",
+ "tagline": "Ù
Ù {{SITENAME}}",
"help": "Ù
عاÙÙØ©",
"search": "ÙتÙØ´",
"searchbutton": "ÙتÙØ´",
@@ -173,8 +173,8 @@
"history": "تارÙØ® اÙÙ
ÙÙ",
"history_short": "تارÙØ®",
"updatedmarker": "Ù
بدÙÙ Ù
ÙÙ٠اÙزÙارة تاع٠اÙÙتاÙÙØ©",
- "printableversion": "Ùسخة تاع طبÙع",
- "permalink": "ÙصÙ٠داÙÙ
",
+ "printableversion": "ڥرسÙÙ٠تÙدر تطبعÙا",
+ "permalink": "ÙÙا٠داÙÙ
",
"print": "اÙ
برÙÙ
Ù",
"view": "اÙرا",
"view-foreign": "Ø´Ù٠عÙÙ $1",
@@ -196,13 +196,13 @@
"unprotectthispage": "بدÙ٠اÙØضÙØ© تاع Ùاد اÙباجة",
"newpage": "باج٠جدÙدÙ",
"talkpage": "ÙرعÙج عÙÙ Ùاد اÙباجة",
- "talkpagelinktext": "Ù
Ùادرة",
+ "talkpagelinktext": "تÙاÙØ´",
"specialpage": "باجة Ø®ÙصÙصÙÙØ©",
- "personaltools": "دÙزا٠شخصÙÙ",
+ "personaltools": "ادÙÙات شخصÙÙØ©",
"articlepage": "Ø´Ù٠اÙباجة تاع اÙÙ
ØتاÙا",
- "talk": "Ù
Ùادرة",
- "views": "Ø´ÙÙات",
- "toolbox": "دÙزاÙ",
+ "talk": "تÙاÙØ´",
+ "views": "Ø¢ÙÙشاج",
+ "toolbox": "ادÙÙات",
"userpage": "Ø´Ù٠اÙباجة تاع اÙÙ
ستعÙ
ÙÙ",
"projectpage": "Ø´Ù٠اÙباجة تاع اÙبرÙجÙ",
"imagepage": "Ø´Ù٠اÙباجة تاع اÙÙÙØ´Ù",
@@ -211,15 +211,15 @@
"viewhelppage": "Ø´Ù٠اÙباجة تاع اÙÙ
عاÙÙØ©",
"categorypage": "Ø´Ù٠اÙباجة تاع اÙصÙÙÙ",
"viewtalkpage": "Ø´Ù٠اÙتÙرعÙج",
- "otherlanguages": "ب ÙÙغات ÙØدÙخرة",
+ "otherlanguages": "ب ÙÙغات اخرÙÙ",
"redirectedfrom": "(Ù
ØÙÙ Ù
Ù $1)",
"redirectpagesub": "باجة تاع اÙتØÙاÙ",
"redirectto": "ØÙÙÙ ÙÙ:",
- "lastmodifiedat": "Ùاد اÙباج٠راÙ٠تبدÙÙت ÙÙار اÙÙ $1, عÙ٠اÙÙساعة $2.",
+ "lastmodifiedat": "Ùاذ اÙصÙØØ© راÙ٠تبدÙÙت اخÙر Ù
رÙØ© ÙÙار $1Ø Ù
عا $2.",
"viewcount": "Ùاد اÙباجة ÙشاÙت {{PLURAL:$1|خطرة ÙØدة|$1 خطرة}}.",
"protectedpage": "باجة Ù
ØضÙÙØ©",
- "jumpto": "اÙÙز Ù:",
- "jumptonavigation": "تبØار",
+ "jumpto": "سÙر Ù:",
+ "jumptonavigation": "ÙاڥÙÚاسÙÙÙ",
"jumptosearch": "ÙتÙØ´",
"view-pool-error": "اعدرÙÙØ§Ø Ø§ÙسرباÙات راÙÙ
Ù
غبÙÙÙÙ Ù Ùاد اÙÙÙÙتة.\nبزÙا٠اÙÙ
ستعÙ
ÙÙÙÙ٠راÙÙ
باغÙÙÙ ÙØ´ÙÙÙ Ùاد اÙباجة.\nاصبر٠ش٠ÙÙÙتة Ùب٠Ù
ا تØاÙÙ٠تÙØÙÙ ÙÙا عاÙد.\n\n$1",
"generic-pool-error": "اعدرÙÙØ§Ø Ø§ÙسرباÙات راÙÙ
Ù
غبÙÙÙÙ Ù Ùاد اÙÙÙÙتة.\nبزÙا٠اÙÙ
ستعÙ
ÙÙÙÙ٠راÙÙ
باغÙÙÙ ÙØ´ÙÙÙ Ùاد اÙباجة.\nاصبر٠ش٠ÙÙÙتة Ùب٠Ù
ا تØاÙÙ٠تÙØÙÙ ÙÙا عاÙد.",
@@ -228,30 +228,30 @@
"pool-errorunknown": "Ø®Ùطة Ù
اش٠Ù
عرÙÙØ©",
"pool-servererror": "اÙسربÙس تاع اÙعدÙا٠را٠Øابس ( $1 ).",
"poolcounter-usage-error": "غÙطة تاع ستÙعÙ
اÙ: $1",
- "aboutsite": "عÙÙ{{SITENAME}}",
- "aboutpage": "Project:عÙÙ",
+ "aboutsite": "ÙÙ٠ش٠عÙÙ {{SITENAME}}",
+ "aboutpage": "Project:Ù
عÙÙÙ
ات",
"copyright": "اÙÙ
ØتاÙا را٠تØت اÙÙسخة $1 تاع اÙÙÙساÙØ³Ø ØºÙر ÙÙا Ùا٠Ù
ÙتÙب Øاجاخرة.",
"copyrightpage": "{{ns:project}}:ØÙÙ٠اÙÙسخ",
"currentevents": "اÙختÙÙارات",
"currentevents-url": "Project:خبÙرات",
"disclaimers": "تÙبÙÙات",
- "disclaimerpage": "Project:اÙتØØ°Ùرات اÙعاÙ
Ù",
+ "disclaimerpage": "Project:اÙتÙبÙÙات اÙعاÙ
ÙØ©",
"edithelp": "Ù
عÙÙØ©",
"helppage-top-gethelp": "Ù
عاÙÙØ©",
- "mainpage": "اÙپاجة اÙÙÙÙاÙÙÙØ©",
- "mainpage-description": "اÙپاجة اÙÙÙÙاÙÙÙØ©",
+ "mainpage": "اÙپاجة اÙاÙÙاÙÙÙØ©",
+ "mainpage-description": "صÙØØ© اÙاستÙباÙ",
"policy-url": "Project:اÙÙ
ÙاÙÙ",
- "portal": "بÙرطا٠اÙÙ
جتÙ
ع",
- "portal-url": "Project:بÙرطا٠اÙÙ
جتÙ
ع",
- "privacy": "اÙسÙاسة تاع اÙخصÙصÙات (اÙدÙ٠اÙضÙÙÙ)",
- "privacypage": "Project:خصÙصÙÙ",
+ "portal": "بÙابة اÙÙ
جتÙ
ع",
+ "portal-url": "Project:بÙابة اÙÙ
جتÙ
ع",
+ "privacy": "اÙسÙاسة تاع اÙخصÙصÙÙØ©",
+ "privacypage": "Project:اÙسÙاسة تاع اÙخصÙصÙÙØ©",
"badaccess": "Ù
Ø´ÙÙ ÙÙ Ù
سÙ
ÙØات",
"badaccess-group0": "Ù
اش٠Ù
ÙبÙÙ ÙÙ٠تدÙر اÙش٠اÙÙ٠را٠تسÙÙ٠تدÙرÙÙ.",
"badaccess-groups": "اÙÙعÙØ© اÙÙ٠را٠سÙÙÙت تدÙرÙا Ù
سÙ
ÙØØ© بر٠ÙÙ Ù
ستعÙ
ÙÙÙÙ {{PLURAL:$2||اÙÙÙ ÙÙÙ
ا Ù
Ù٠جÙ
اعة|اÙÙÙ ÙÙÙ
ا Ù
Ù ÙØدة Ù
Ù Ùاد اÙجÙ
اÙع}}: $1.",
"versionrequired": "اÙÙسخة $1 تاع Ù
ÙدÙاÙÙÙÙ Ù
ÙزÙÙ
Ø©",
"versionrequiredtext": "اÙÙسخة $1 تاع Ù
ÙدÙاÙÙÙ٠راÙÙ Ù
ÙزÙÙ
Ø© باش تÙجÙ
تستعÙ
Ù Ùاد اÙباجة.\nØ´ÙÙ [[Special:Version|اÙباجة تاع اÙÙسخات باش تÙÙÙ
ÙتÙر عÙÙ Ùاد اÙØ´Ù]]",
"ok": "ÙابÙ",
- "retrievedfrom": "جاÙبÙÙÙ Ù
Ù \"$1\"",
+ "retrievedfrom": "جاÙبÙÙÙ Ù
Ù \"$1\"",
"youhavenewmessages": "عÙد٠$1 ($2).",
"youhavenewmessagesfromusers": "{{PLURAL:$4|عÙدÙ}} $1 Ù
٠عÙد {PLURAL:$3|Ù
ستعÙ
ÙÙ ÙاØد|زÙج تاع اÙÙ
ستعÙ
ÙÙÙÙÙ|$3 Ù
ستعÙ
ÙÙ}} ($2).",
"youhavenewmessagesmanyusers": "عÙد٠$1 Ù
٠عÙد Ø´Øا٠Ù
Ù Ù
ستعÙ
ÙÙ ($2).",
@@ -263,7 +263,7 @@
"viewsourceold": "Ø´Ù٠اÙاصÙ",
"editlink": "تبدÙÙ",
"viewsourcelink": "Ø´Ù٠اÙعÙÙ",
- "editsectionhint": "Ø¥ÙدÙت٠اÙصÙÙ:$1",
+ "editsectionhint": "بدÙ٠٠اÙسÙسÙÙÙ: $1",
"toc": "Ù
ØتÙÙات",
"showtoc": "ÙرÙÙ",
"hidetoc": "خبÙÙ",
@@ -279,13 +279,13 @@
"feed-invalid": "اÙÙÙع تاع اÙتÙÙÙÙ
Ø© Ù
اش٠Ù
صÙاØ.",
"feed-unavailable": "اÙتÙÙÙÙ
ات Ù
ا راÙÙ
Ø´ Ù
ÙجÙدÙÙ.",
"site-rss-feed": "تÙار آرâإسâإس $1",
- "site-atom-feed": "$1 تÙار آتÙÙ
",
+ "site-atom-feed": "سÙÙÙا٠آتÙÙ
تاع $1",
"page-rss-feed": "تÙÙÙÙ
ة RSS تاع \"$1\"",
"page-atom-feed": "$1 تÙار آتÙÙ
",
- "red-link-title": "$1 (اÙباجة Ù
ا ÙاÙÙØ´)",
+ "red-link-title": "$1 (اÙباجة Ù
ا ÙاÙÙØ© Ø´Ù)",
"sort-descending": "رتÙب ب٠ÙازÙÙÙ",
"sort-ascending": "رتÙب ب٠طاÙÙعÙ",
- "nstab-main": "اÙباجة",
+ "nstab-main": "صÙØØ©",
"nstab-user": "باجة{{GENDER:{{BASEPAGENAME}}|اÙÙ
ستخدÙ
|اÙÙ
ستخدÙ
Ø©}}",
"nstab-media": "باجة تاع Ù
ÙدÙا",
"nstab-special": "باج٠خÙصÙصÙÙØ©",
@@ -295,7 +295,7 @@
"nstab-template": "Ù
ÙداÙ",
"nstab-help": "باجة تاع Ù
عاÙÙØ©",
"nstab-category": "تصÙÙÙ",
- "mainpage-nstab": "اÙپاجة اÙÙÙÙاÙÙÙØ©",
+ "mainpage-nstab": "اÙپاجة اÙاÙÙاÙÙÙØ©",
"nosuchaction": "اÙش٠اÙÙÙ Ø·ÙبتÙÙ Ù
ا ÙاÙÙØ´",
"nosuchactiontext": "اÙÙعÙØ© اÙÙÙ Ù
Ø·ÙÙبة ÙÙ URL Ù
اش٠Ù
ÙبÙÙØ©.\nباÙا٠Ù
ا دخÙÙتÙØ´ اÙÙ URL ÙÙÙ
ا ÙازÙ
ÙÙا تاÙ٠تبÙعت٠Ùاش ÙصÙÙ Ù
غÙÙØ·.\nÙÙجÙ
تاÙÙ ÙÙÙÙ ÙاÙ٠عÙÙÙØ© ÙÙ ÙÙجÙسÙا٠اÙÙÙ Ù
ستعÙ
Ù ÙÙ {{SITENAME}}.",
"nosuchspecialpage": "Ùاد اÙباجة اÙØ®ÙصÙصÙÙØ© Ù
ا ÙاÙÙØ´ Ù
ÙÙا",
@@ -366,7 +366,7 @@
"myprivateinfoprotected": "Ù
ا عÙدÙØ´ اÙØ³Ø±Ø§Ø Ø¨Ø§Ø´ تبدÙ٠اÙÙ
عÙÙÙ
ات اÙشخصÙÙØ© دÙاÙÙ.",
"mypreferencesprotected": "Ù
ا عÙدÙØ´ اÙØ³Ø±Ø§Ø Ø¨Ø§Ø´ تبدÙ٠اÙإختÙÙارات دÙاÙÙ.",
"ns-specialprotected": "اÙپاجات اÙخصÙصة Ù
ا تÙجÙ
Ø´ تتبدÙÙ.",
- "titleprotected": "Ùاد اÙعÙÙا٠را٠Ù
Øض٠Ù
Ù` اÙتبدا٠Ù
٠عÙد [[User:$1|$1]].\nاÙسبÙØ© اÙÙÙ Ù
دÙÙا ÙÙÙا
$2 .",
+ "titleprotected": "[[User:$1|$1]] {{GENDER:$1|ØÙ
Ù|ØÙ
ات}} Ùاذ اÙعÙÙا٠Ù
اÙØ®ÙÙاÙ.\nاÙسبÙØ© تاع٠ÙÙÙ
$2 .",
"filereadonlyerror": "Ù
اش٠Ù
Ù
Ù٠تبدا٠اÙÙÙØ´Ù \"$1\" خاطرش اÙزÙ
ÙاÙ
\"$2\" را٠Ù
شغÙÙØ© ÙÙ٠اÙخاصÙÙØ© \"اÙرا برÙ\".\n\nاÙÙ
ÙسÙÙر اÙÙ٠غÙÙÙ٠را٠Ù
اد اÙتÙسÙر Ùادا: \"$3\".",
"invalidtitle-knownnamespace": "عÙÙا٠Ù
اش٠Ù
ÙبÙ٠ب ÙسÙع تاع تسÙ
ÙÙØ© \"$2\" Ù
عا اÙÙتÙبة \"$3\".",
"invalidtitle-unknownnamespace": "عÙÙا٠Ù
اش٠Ù
ÙبÙ٠ب ÙÙ
ر٠Ù
اش٠Ù
عرÙ٠تاع اÙÙسÙع تاع تسÙ
ÙÙØ© \"$1\" Ù
عا اÙÙتÙبة \"$2\".",
@@ -479,9 +479,9 @@
"loginlanguagelabel": "اÙÙÙغÙ: $1",
"suspicious-userlogout": "اÙÙ
Ø·Ùب تاع٠باش تسجÙ٠خارج Ù
ا تسجÙÙØ´ خاطر را٠Ùبا٠Ù
رسÙÙ Ù
٠عÙد بØÙار Ù
عطÙÙ ÙÙا خزÙا٠تاع ÙسÙاط (proxy cache).",
"createacct-another-realname-tip": "اÙسÙ
ÙÙØ© اÙØÙÙاÙÙÙØ© Ù
اش٠Ù
ÙزÙÙ
Ø©.\nÙÙا تستعÙ
ÙÙا غاد٠تصÙØ§Ø Ø¨Ø§Ø´ تÙسÙب ÙÙ٠اÙخدÙ
Ø© اÙÙ٠غاد٠تدÙرÙا.",
- "pt-login": "دخÙØ©",
+ "pt-login": "ادخÙ",
"pt-login-button": "دخÙÙ",
- "pt-createaccount": "اصÙع Øساب",
+ "pt-createaccount": "اعÙ
Ù ÙÙÙت",
"pt-userlogout": "اÙخرÙج",
"php-mail-error-unknown": "غÙطة Ù
جÙÙÙØ© صرات ÙÙ ÙضÙÙØ© mail() تاع PHP.",
"user-mail-no-addy": "را٠سÙÙÙت تبعت Ø¥ÙÙ
ا٠بÙا Ù
ا تØÙط٠آدرÙسة ÙÙÙ.",
@@ -646,7 +646,7 @@
"revertmerge": "ÙرÙ",
"history-title": " «$1»: تارÙØ® اÙÙ
راجعات",
"difference-title": "ÙرÙÙات بÙ٠اÙتبداÙات تاع \"$1\"",
- "lineno": "سطر$1:",
+ "lineno": "سطر $1:",
"compareselectedversions": "ÙÙÙ
بار٠بÙÙ ÙسختÙÙ Ù
Ø®ÙرÙÙ",
"editundo": "ÙØÙ",
"diff-multi-sameuser": "({{PLURAL:$1|تبدÙÙØ© Ù
تÙسÙطة ÙØدة|$1 تبدÙÙات Ù
تÙسÙØ·ÙÙ}} Ù
اش٠{{PLURAL:$1|Ù
ÙرÙÙØ©|$1 Ù
ÙرÙÙÙÙ}} Ù
٠عÙد ÙÙس اÙÙ
ستعÙ
ÙÙ)",
@@ -687,7 +687,7 @@
"action-edit": "عد٠Ùاذ اÙباجÙ",
"nchanges": "$1 تبدÙÙÙ{{PLURAL:$1||s}}",
"enhancedrc-history": "تارÙØ®",
- "recentchanges": "اÙتبداÙات اÙتÙاÙا",
+ "recentchanges": "اÙتبداÙات اÙاخÙرة",
"recentchanges-legend": "Ùاش تختار Ù`اÙتبداÙات اÙتÙاÙا",
"recentchanges-summary": "اجبر اÙتبداÙات اÙÙÙاخر اÙÙ٠صرا٠٠Ùاد اÙصÙØØ©.",
"recentchanges-feed-description": "تبع اÙتبدÙÙات اÙجدد ÙÙÙÙÙÙ ÙÙ Ùاذ اÙتÙار .",
@@ -696,7 +696,7 @@
"recentchanges-label-bot": "Ùاذ اÙتبدÙÙ Ùدار برÙبÙ",
"recentchanges-label-unpatrolled": "Ù
ا تراجعتش Ùاذ اÙتبدÙÙÙ ÙÙØ¢Ù",
"recentchanges-label-plusminus": "اÙØجÙÙ
تاع اÙصÙØØ© را٠تبدÙ٠ب Ùاد اÙعدÙØ© تاع اÙباÙتات",
- "recentchanges-legend-heading": "'''تÙسار:'''",
+ "recentchanges-legend-heading": "
تÙسار: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ø´Ù٠تاÙÙ [[Special:NewPages|ÙÙستة تاع صÙØات جدÙدة]])",
"rcnotefrom": "اÙتØت اÙتبدÙÙات Ù
Ù
$2 (Ø¥ÙÙ
$1 Ù
عرÙضة).",
"rclistfrom": "بÙ٠اÙتبدÙÙات اÙبدÙÙ Ù
Ù $3 $2",
@@ -723,7 +723,7 @@
"minoreditletter": "Ø·",
"newpageletter": "جâ",
"boteditletter": "ب",
- "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} Ù
Ùرا اÙتبداÙ",
+ "rc-change-size-new": "$1 {{PLURAL:$1|اÙÙتاتة|اÙÙتاتات}} بعد اÙتبداÙ",
"rc-enhanced-expand": "Ø´Ù٠اÙتÙاصÙÙ",
"rc-enhanced-hide": "خب٠اÙتÙاصÙÙ",
"recentchangeslinked": "تبدÙÙات Ù
ربÙØ·Ù",
@@ -732,7 +732,7 @@
"recentchangeslinked-summary": "Ùاذ٠ÙÙستة تع اÙتبدÙÙات اÙÙ٠تÙ
ت Ùاذ اÙخطرة ÙÙباجات اÙÙ
ÙصÙÙØ© Ù
٠باجة Ù
عÙÙØ© (ÙÙا ÙÙأعضاء اÙداخÙÙÙ Ù٠تصÙÙÙ Ù
عÙÙ).\nاÙصÙØات ÙÙ [[Special:Watchlist|ÙÙستت Ù
راÙبة ÙتاعÙ]] '''Ù
غÙظÙ'''",
"recentchangeslinked-page": "اسÙ
اÙباجÙ:",
"recentchangeslinked-to": "بÙ٠اÙتبدÙÙات ÙÙباجات اÙÙ
ÙصÙÙØ© ÙÙباج٠اÙÙ
عطÙØ© عÙضا اÙعÙس",
- "upload": "Ø·Ùع ÙÙØ´Ù",
+ "upload": "Ø·ÙÙع ÙÙØ´ÙÙ",
"uploadlogpage": "رÙجÙستر رÙع اÙÙÙØ´Ùات",
"filedesc": "Ù
Ùخص",
"license": "ترخÙص:",
@@ -754,7 +754,7 @@
"nolinkstoimage": "Ù
ا ÙاÙØ´ باجات Ù
ÙصÙÙÙ ÙÙاذ اÙÙÙØ´Ù.",
"sharedupload-desc-here": "Ùاذ اÙÙ
Ù٠جا٠Ù
Ù $1. ÙÙ
ÙÙ ÙÙÙÙ Ù
ستعÙ
Ù Ù
٠برÙجÙات ÙØد أخرÙÙ.\nاÙتÙصÙÙ Ùتاع٠ÙÙ [$2 باجت اÙصÙات] Ù
ØØ·ÙØ·Ù ÙÙا ÙتØت.",
"upload-disallowed-here": "Ù
ا تÙØÙ
Ø´ تعدÙÙ Ùاد اÙتصÙÙرة",
- "randompage": "باجة عÙ٠اÙزÙر",
+ "randompage": "صÙØØ© ع اÙزÙر",
"statistics": "Ø¥ØصائÙÙات",
"nbytes": "{{PLURAL:$1|باÙت 1|$1 باÙت}}",
"nmembers": "$1 اعضاء{{PLURAL:$1||s}}",
@@ -797,7 +797,7 @@
"tooltip-invert": "عÙÙÙ
Ùاد اÙÙ
ÙÙبسة باش تخبÙ٠اÙتبداÙات تاع اÙصÙØات اÙÙÙ ÙÙÙا ÙسÙع` اÙتسÙ
ÙØ© (Ù ÙسÙع اÙتسÙ
ÙØ© اÙÙ
ربÙØ· ÙÙا ÙاÙÙ)",
"namespace_association": "ÙسÙع اÙتسÙ
ÙØ© اÙÙ
ربÙØ·",
"tooltip-namespace_association": "عÙÙÙ
عÙÙ Ùاد اÙÙ
ÙÙبسة باش تدخÙ٠تاÙ٠اÙÙ
Ùادرة ÙÙا ÙسÙع اÙتسÙ
ÙØ© تاع اÙÙ
ÙضÙع اÙÙ
ربÙØ· Ù
عا ÙسÙع اÙتسÙ
ÙØ© اÙÙ
سÙÙÙÙسÙÙÙÙ",
- "blanknamespace": "أساسÙ",
+ "blanknamespace": "رئÙسÙ",
"contributions": "Ù
ساÙÙ
ات {{GENDER:$1|اÙÙ
ستخدÙ
|اÙÙ
ستخدÙ
Ù}}",
"contributions-title": "Ù
ساÙÙ
ات {{GENDER:$1|اÙÙ
ستخدÙ
|اÙÙ
ستخدÙ
Ù}} $1",
"mycontris": "اÙÙ
ساÙÙ
ات تاعÙ",
@@ -815,7 +815,7 @@
"sp-contributions-username": "عÙÙا٠أÙب٠ÙاÙا٠اسÙ
Ù
ستخدÙ
:",
"sp-contributions-toponly": "Ù
ا تÙرÙ٠غÙر اÙÙ
شارÙات اÙتÙاÙا تاع اÙÙ
ÙاÙات",
"sp-contributions-submit": "تÙتاش",
- "whatlinkshere": "Ùاش Ùاص٠ÙÙا",
+ "whatlinkshere": "Ø´ÙÙÙ ÙÙصÙÙ Ù ÙÙا",
"whatlinkshere-title": "اÙباجات اÙÙ٠تÙÙÙ ÙÙ \"$1\"",
"whatlinkshere-page": "اÙباجÙ:",
"linkshere": "Ùاذ اÙباجات ÙÙصÙ٠إÙÙ '''[[:$1]]''':",
@@ -852,38 +852,38 @@
"tooltip-pt-preferences": "اÙختÙÙارات {{GENDER:|تاعÙ}}",
"tooltip-pt-watchlist": "ÙÙستت اÙباجات اÙ٠را٠أتبع تبدÙÙاتÙÙ
",
"tooltip-pt-mycontris": "اÙÙÙستة تاع اÙÙ
ساÙÙ
ات {{GENDER:|تاعÙ}}",
- "tooltip-pt-login": "Ù
ادابÙ٠تسج٠اÙدخÙØ© ØªØ§Ø¹Ù Ø Ø¨ØµÙØ Ùادا Ù
اش٠Ù
ÙزÙÙ
",
+ "tooltip-pt-login": "Ù
اذا بÙ٠تدخ٠٠اÙÙÙÙت تاعÙØ ÙاÙÙ Ùاذا Ù
ا Ø´Ù Ù
ÙزÙÙ
عÙÙÙ",
"tooltip-pt-logout": "سج٠خرÙج",
- "tooltip-pt-createaccount": "ÙÙØµØ Ø¨Ø§Ø´ تصÙع Øساب ٠تسج٠دخÙت٠; عÙÙ ÙÙ Øا٠Ù
اÙÙØ´ ضرÙرÙ",
- "tooltip-ca-talk": "Ù
ÙاÙش٠عÙÙ Ùاد باجت اÙÙ
ØتÙا",
- "tooltip-ca-edit": "بدÙÙ Ùاد اÙÙصÙØÙ",
+ "tooltip-pt-createaccount": "Ù
اذا بÙÙا ÙÙ Ùا٠تعÙ
Ù ÙÙÙت Ùتدخ٠ÙÙÙØ ÙاÙÙ Ùاذا Ù
ا Ø´Ù Ù
ÙزÙÙ
عÙÙÙ",
+ "tooltip-ca-talk": "Ù
ÙاÙشة عÙÙ Ùاذ اÙصÙØØ© تاع اÙÙ
ØتÙÙ",
+ "tooltip-ca-edit": "بدÙÙ Ù Ùاذ اÙÙصÙØØ©",
"tooltip-ca-addsection": "ابدأ طر٠جدÙد",
"tooltip-ca-viewsource": "Ùاذ اÙباج٠Ù
ØÙ
ÙÙ. Ù Ø´Ù٠تÙدر٠تشÙÙ٠اÙأصÙÙ ÙتاعÙا",
- "tooltip-ca-history": "اÙÙ
راجعات اÙتÙاÙا تاع اÙباجة (Ù
عا اÙÙ
ساÙÙ
Ù٠تاÙعÙا)",
+ "tooltip-ca-history": "اÙڥرسÙÙÙات اÙÙداÙ
دÙا٠Ùاذ اÙصÙØØ©",
"tooltip-ca-protect": "برÙتÙج٠ÙاذاÙباجÙ",
"tooltip-ca-delete": "اÙ
ØÙ Ùاذ اÙباجÙ",
"tooltip-ca-move": "بد٠أسÙ
ÙØ° اÙباجÙ",
"tooltip-ca-watch": "زÙد ÙØ° اÙباجة ÙÙ ÙÙستة تاع٠تاع اÙتتباع",
"tooltip-ca-unwatch": "اÙÙع Ùاد اÙباجة Ù
ÙÙ ÙÙستة تاع٠تاع اÙتتباع",
"tooltip-search": " ÙتÙØ´ ÙÙ {{SITENAME}}",
- "tooltip-search-go": "رÙØ Ù Ø¨Ø§Ø¬Ø© عÙدÙا ذا٠اÙآسÙ
بدÙات ÙÙا ÙاÙت ÙاÙÙØ©",
- "tooltip-search-fulltext": "ÙتÙØ´ عÙ٠باجة ب Ùاد اÙÙتبة",
- "tooltip-p-logo": "زÙر اÙپاجة اÙÙÙÙاÙÙÙØ©",
+ "tooltip-search-go": "رÙØ Ù ØµÙØØ© عÙدÙا ÙÙس Ùاذ اÙاسÙ
اÙذا تÙجÙدت",
+ "tooltip-search-fulltext": "ÙتÙØ´ ع اÙپاجات اÙÙÙ ÙÙÙا Ùاذ اÙÙصÙ",
+ "tooltip-p-logo": "زÙر صÙØØ© اÙاستÙباÙ",
"tooltip-n-mainpage": "زÙر اÙپاجة اÙÙÙÙاÙÙÙØ©",
- "tooltip-n-mainpage-description": "زÙر اÙپاجة اÙÙÙÙاÙÙÙØ©",
- "tooltip-n-portal": "عÙ٠اÙپرÙجÙØÙاش تÙدر تدÙØ±Ø ÙÙ٠تصÙب Ùاش تØتاج",
- "tooltip-n-currentevents": "صÙب خبارات Ù
ستÙرÙ٠عÙ٠اÙصÙاÙØ Ø§ÙÙ٠راÙÙ
Ùصرا٠ضرÙا",
- "tooltip-n-recentchanges": "اÙÙÙستة تاع اÙتبداÙات اÙجدÙدة ÙÙ ÙÙÙÙ",
- "tooltip-n-randompage": "Ø·ÙÙع باج٠عÙ٠اÙزÙر",
- "tooltip-n-help": "بÙاصة اÙÙ
عÙÙØ©",
- "tooltip-t-whatlinkshere": "ÙÙستة تاع ÙاÙ
٠باجات اÙÙ
ØتاÙا اÙÙاصÙÙ ÙÙا",
+ "tooltip-n-mainpage-description": "زÙر صÙØØ© اÙاستÙباÙ",
+ "tooltip-n-portal": "ع اÙÙ
شرÙØ¹Ø Ø´ÙÙ٠تÙدر تدÙØ±Ø ÙÙ٠تÙÙ٠اÙØاجات اÙÙÙ Øاجت٠بÙÙا",
+ "tooltip-n-currentevents": "Ø´Ù٠اش Ùاعد ÙصÙر",
+ "tooltip-n-recentchanges": "ÙÙستة تاع اÙتبداÙات اÙاخÙرÙ٠٠اÙÙÙÙÙ",
+ "tooltip-n-randompage": "شرج٠صÙØØ© ع اÙزÙر",
+ "tooltip-n-help": "بÙاصة اÙÙ
عاÙÙØ©",
+ "tooltip-t-whatlinkshere": "ÙÙستة دÙا٠صÙØات اÙÙÙÙ٠اÙÙÙ٠اÙÙ٠تÙصÙÙ Ù ÙÙا",
"tooltip-t-recentchangeslinked": "ÙÙستة تاع اÙتبدÙÙات اÙتÙاÙا تاع اÙباجات اÙÙ٠عÙدÙÙ
رباط Ù
عا ÙادÙ",
"tooltip-feed-atom": "سÙÙا٠آتÙÙ
تاع Ùاد اÙباجة",
"tooltip-t-contributions": "Ø´ÙÙ ÙÙستة تاع اÙÙ
ساÙÙ
ات تاع {{GENDER:$1|Ùاد اÙÙ
ستعÙ
ÙÙ|Ùاد اÙÙ
ستعÙ
ÙÙÙØ©}}",
"tooltip-t-emailuser": "أرس٠برÙÙ ÙÙاذ اÙÙ
ستخدÙ
",
- "tooltip-t-upload": "أرس٠تصÙÙرة ٠إÙا Ø£Ù Ù
ÙÙ Ù
ÙدÙا ÙÙسرÙر",
- "tooltip-t-specialpages": "ÙÙستة تاع ÙاÙ
٠اÙباجات اÙخصÙصÙÙØ©",
- "tooltip-t-print": "Ùسخ٠ÙÙاذ اÙباج٠ÙابÙÙ ÙÙطبÙع",
+ "tooltip-t-upload": "Ø·ÙÙع ÙÙØ´ÙÙات",
+ "tooltip-t-specialpages": "ÙÙستة تاع اÙباجات اÙخاصÙÙÙ ÙÙÙÙÙ
",
+ "tooltip-t-print": "ڥرسÙÙ٠تÙدر تطبعÙا",
"tooltip-t-permalink": "ÙصÙ٠داÙÙ
راÙØ Ù Ùاد اÙÙسخة تاع اÙباجة",
"tooltip-ca-nstab-main": "Ø´Ù٠باج٠اÙÙ
ØتÙÙ",
"tooltip-ca-nstab-user": "Ø´Ù٠باجت اÙÙ
ستعÙ
Ù",
@@ -902,7 +902,7 @@
"tooltip-undo": "\"ÙØÙÙ\" Ùاص٠Ùاد اÙÙÙ
عاÙدة Ù ØÙ٠تاÙØ© تاع تبدا٠بشÙÙÙ ÙبÙاÙÙÙÙ. تخÙÙ٠باش ترجع ÙÙ Ù
عاÙد٠اÙتاÙÙ٠٠تزÙد اÙÙسبÙØ© عÙاش ÙÙ Ùابس٠تاع اÙÙØÙÙصÙÙ.",
"tooltip-summary": "دخ٠تÙØ®Ùص صغÙر",
"simpleantispam-label": "Ù
سÙÙØ© ضد٠اÙسباÙ
.\nÙ
ا تعÙ
Ùرش Ùادا!",
- "pageinfo-toolboxlink": "Ù
عÙÙÙ
ات عÙÙ Ùاد اÙباجة",
+ "pageinfo-toolboxlink": "Ù
عÙÙÙ
ات عÙÙ Ùاذ اÙصÙØØ©",
"previousdiff": "â اÙتعدÙ٠اÙÙ ÙبÙ",
"nextdiff": "اÙتبدÙ٠اÙجا٠â",
"file-info-size": "$1 à $2 بÙس٠ØجÙ
اÙÙ
ÙÙ: $3Ø ÙÙع MIME: $4",
@@ -935,7 +935,7 @@
"watchlisttools-raw": "Ù
ÙدÙÙÙ ÙÙستت اÙتبÙع٠اÙخاÙ
",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|تÙرعÙج]])",
"duplicate-defaultsort": "'''تÙÙÙÙ:''' Ù
ÙØªØ§Ø Ø§ÙتستÙ٠اÙاÙتراض٠\"$2\" دÙباسا Ù
ÙØªØ§Ø Ø§ÙتستÙ٠اÙاÙتراض٠اÙتاÙÙ\"$1\".",
- "specialpages": "اÙباجات اÙخصÙصÙØ©",
+ "specialpages": "اÙپاجات اÙخاصÙÙÙ",
"external_image_whitelist": " #
Ø®ÙÙ Ùاذ اÙسطر ÙÙÙ
ا راÙ\n#ØØ· Ù
ÙØ«Ùرات اÙتعبÙرات اÙÙ
ÙتظÙ
Ø© (بر٠اÙجزء اÙÙ ÙرÙØ Ø¨ÙÙ //) باÙتØت\n#Ùاذ ÙÙÙÙ Ù
طابÙتÙا Ù
ع Ù
سارات اÙتصاÙÙر اÙبراÙÙÙ (اÙÙ
ÙصÙÙØ© بصÙÙ Ù
باشرÙ)\n#Ùاذ٠اÙ٠تشبÙغاد٠تÙعرض ÙتصاÙØ±Ø Ø®Ùا٠Ùذا بر٠ÙصÙÙØ© ÙÙتصÙÙرة غاد٠تÙعرض\n#اÙسطÙر اÙÙ٠تبدأا ب# تعتبر تعÙÙÙات\n#Ùذا Ùا Ùتأثر بØاÙØ© اÙØرÙÙ\n\n#ØØ· ÙاÙ
Ù Ù
ÙØ«Ùرات اÙتعبÙرات اÙÙ
ÙتظÙ
Ø© ÙÙÙ Ùذا اÙسطر. Ø®ÙÙ Ùاذ اÙسطر سÙاسÙا ÙÙÙ
ا ÙÙ ",
"tag-filter": "صÙاÙØ©[[Special:Tags|اÙÙشاÙ
]]:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||ÙسÙ
|ÙسÙ
اÙ|ÙسÙÙ
}}]]: $2)",
@@ -943,5 +943,5 @@
"logentry-move-move": "{{GENDER:$2|ÙÙÙÙ|ÙÙÙÙت}} $1 اÙصÙØØ© $3 ÙÙ $4",
"logentry-newusers-create": "را٠تÙØªØ Øساب {{GENDER:$2|اÙÙ
ستخدÙ
|اÙÙ
ستخدÙ
Ù}} $1",
"logentry-upload-upload": " {{GENDER:$2|ÙزÙÙ|ÙزÙÙت}} $1 $3",
- "searchsuggest-search": "تÙتاش"
+ "searchsuggest-search": "ÙتÙØ´"
}
diff --git a/languages/i18n/arz.json b/languages/i18n/arz.json
index 12075c9480..91089cc615 100644
--- a/languages/i18n/arz.json
+++ b/languages/i18n/arz.json
@@ -270,7 +270,7 @@
"confirmable-no": "Ùا",
"thisisdeleted": "عرض ا٠استرجاع $1Ø",
"viewdeleted": "عرض $1Ø",
- "restorelink": "{{PLURAL:$1|تعدÙÙ ÙاØد Ù
ÙغÙ|تعدÙÙÙÙ Ù
ÙغÙÙÙ|$1 تعدÙÙات Ù
ÙغÙØ©|$1 تعدÙÙ Ù
ÙغÙ|$1 تعدÙÙ Ù
ÙغÙ}}",
+ "restorelink": "{{PLURAL:$1|تعدÙÙ ÙاØد Ù
ÙغÙ|$1 تعدÙÙات Ù
ÙغÙÙ}}",
"feedlinks": "تÙÙÙÙ
:",
"feed-invalid": "ÙÙع اشترا٠اÙتغذÙØ© Ù
Ø´ صØ.",
"feed-unavailable": "اÙتغذÙØ© Ù
Ø´ Ù
تÙÙرة",
@@ -959,7 +959,7 @@
"recentchanges-label-minor": "د٠تعدÙ٠صغÙر",
"recentchanges-label-bot": "اÙتعدÙ٠د٠عÙ
Ù٠بÙت",
"recentchanges-label-unpatrolled": "اÙتعدÙ٠د٠Ù
إتراجعش ÙسÙ",
- "recentchanges-legend-heading": "شرØ",
+ "recentchanges-legend-heading": "
Ø´Ø±Ø ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بص ÙÙ
ا٠عÙÙ [[Special:NewPages|ÙاÙÙ
٠اÙصÙØات اÙجدÙدÙ]])",
"rcnotefrom": "د٠اÙتعدÙÙات Ù
Ù '''$2''' (Ù '''$1''' Ù
عرÙضÙ).",
"rclistfrom": "اظÙر اÙتعدÙÙات بداÙÙ Ù
Ù $3 $2",
diff --git a/languages/i18n/as.json b/languages/i18n/as.json
index c552cce9d1..e702f3279f 100644
--- a/languages/i18n/as.json
+++ b/languages/i18n/as.json
@@ -183,7 +183,7 @@
"history": "পà§à¦·à§à¦ া à¦à¦¤à¦¿à¦¹à¦¾à¦¸",
"history_short": "à¦à¦¤à¦¿à¦¹à¦¾à¦¸",
"updatedmarker": "মà§à§° শà§à¦¹à¦¤à§à¦¯à¦¼à¦¾ পৰিদৰà§à¦¶à¦¨à§° পাà¦à§° সালসলনিবà§à§°",
- "printableversion": "পà§à§°à¦à¦¾à¦¶à¦¯à§à¦à§à¦¯ সà¦à¦¸à§à¦à§°à¦£",
+ "printableversion": "মà§à¦¦à§à§°à¦£à¦¯à§à¦à§à¦¯ সà¦à¦¸à§à¦à§°à¦£",
"permalink": "সà§à¦¥à¦¾à¦¯à¦¼à§ সà§à¦¤à§à§° (লিà¦à¦)",
"print": "পà§à§°à¦¿à¦£à§à¦ à¦à§°à¦¿à¦¬à¦²à§",
"view": "দà§à¦à§à§±à¦¾à¦à¦",
@@ -1150,7 +1150,7 @@
"recentchanges-label-bot": "à¦à¦ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦à§ ব'à¦à§ à¦à§°à¦¿à¦à§",
"recentchanges-label-unpatrolled": "à¦à¦ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦à§ à¦à¦¤à¦¿à¦¯à¦¼à¦¾à¦ পৰà§à¦à§à¦·à¦¾ à¦à§°à¦¾ হà§à§±à¦¾ নাà¦",
"recentchanges-label-plusminus": "পà§à¦·à§à¦ াৰ à¦à¦à¦¾à§° à¦à¦ পৰিমাণৰ বাà¦à¦ পৰিৱৰà§à¦¤à¦¨ হà§à¦à§",
- "recentchanges-legend-heading": "'''বà§à¦¯à¦¾à¦à§à¦¯à¦¾:'''",
+ "recentchanges-legend-heading": "
বà§à¦¯à¦¾à¦à§à¦¯à¦¾: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (লà¦à¦¤à§ [[Special:NewPages|নতà§à¦¨ পà§à¦·à§à¦ াসমà§à¦¹à§° তালিà¦à¦¾]] à¦à¦¾à¦à¦)",
"recentchanges-legend-plusminus": "(''±১২৩'')",
"rcnotefrom": "তলত '''$2''' ৰ পৰা হà§à§±à¦¾ ('''$1''' লà§à¦à§) পৰিৱৰà§à¦¤à¦¨ দà§à¦à§à§±à¦¾ হà§à¦à§ ।",
diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json
index 994c8570fa..ef8ef21ee6 100644
--- a/languages/i18n/ast.json
+++ b/languages/i18n/ast.json
@@ -1254,7 +1254,7 @@
"recentchanges-label-bot": "Esta edición ta fecha por un bot",
"recentchanges-label-unpatrolled": "Esta edición ta ensin patrullar entá",
"recentchanges-label-plusminus": "El tamañu d'esta páxina cambió nesti númberu de bytes",
- "recentchanges-legend-heading": "'''Lleenda:'''",
+ "recentchanges-legend-heading": "
Lleenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ver tamién la [[Special:NewPages|llista de páxines nueves]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Amosar",
diff --git a/languages/i18n/awa.json b/languages/i18n/awa.json
index b5ff417c12..6cb75d2895 100644
--- a/languages/i18n/awa.json
+++ b/languages/i18n/awa.json
@@ -1141,7 +1141,7 @@
"recentchanges-label-bot": "ठसमà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤à¥à¤ ॠब़ा़ठà¤à¤°à¥ हà¥",
"recentchanges-label-unpatrolled": "ठसà¤à¤ªà¤¾à¤¦à¤¨ à¤
à¤à¥à¤¨ नाठà¤à¤¾à¤à¤à¤¿ à¤à¤¾ हà¥",
"recentchanges-label-plusminus": "पनà¥à¤¨à¤¾ à¤à¤¯ à¤à¤à¤¾à¤° ठबाà¤à¤ सà¤à¤à¥à¤¯à¤¾ सॠबदला",
- "recentchanges-legend-heading": "'''à¤à¥à¤à¤à¥:'''",
+ "recentchanges-legend-heading": "
à¤à¥à¤à¤à¥: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नवा पनà¥à¤¨à¤¨à¥ à¤à¤¯ सà¥à¤à¥]] à¤à¤¯ à¤à¥ दà¥à¤à¤¾ à¤à¤¾à¤¯)",
"rcnotefrom": "नà¥à¤à¥
$2 à¤à¥ बाद सॠ(
$1 तà¤) {{PLURAL:$5|हà¥à¤ बदलाव दरà¥à¤¶à¤¾à¤¯à¤¾ à¤à¤¯à¤¾ हà¥|हà¥à¤ बदलाव दरà¥à¤¶à¤¾à¤ à¤à¤¯à¥ हà¥à¤}}।",
"rclistfrom": "$3 $2 सॠनà¤à¤µà¤¾ बदलाव दà¥à¤à¤¾à¤µà¤¾ à¤à¤¾à¤¯",
diff --git a/languages/i18n/az.json b/languages/i18n/az.json
index 43c3d49594..5a68e59539 100644
--- a/languages/i18n/az.json
+++ b/languages/i18n/az.json
@@ -1013,7 +1013,7 @@
"recentchanges-label-bot": "Bu redaktÉ bot tÉrÉfindÉn edilmiÅdir",
"recentchanges-label-unpatrolled": "Bu redaktÉ hÉlÉ patrullanmayıb",
"recentchanges-label-plusminus": "SÉhifÉnin ölçüsündÉki dÉyiÅiklik (baytlarla)",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "
Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hÉmçinin bax: [[Special:NewPages|yeni sÉhifÉlÉrin siyahısı]])",
"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",
diff --git a/languages/i18n/azb.json b/languages/i18n/azb.json
index bde18c8fea..f8cc340ef8 100644
--- a/languages/i18n/azb.json
+++ b/languages/i18n/azb.json
@@ -1154,7 +1154,7 @@
"recentchanges-label-bot": "ب٠دÛÛØ´ÛÚ© بÛر بÙت طرÙÛÙد٠ائدÛÙÛبâدÛر",
"recentchanges-label-unpatrolled": "ب٠دÛÛØ´ÛÚ©ÙÛÚ© ÙÙ٠گؤزد٠گئÚÛرÛÙÙ
ÙâÛÛبâدÛر",
"recentchanges-label-plusminus": "صÙØÙâÙÛ٠اؤÙÚÙس٠باÛت Ù
ÛÙØ¯Ø§Ø±Û Ø§ÛÙ٠تعÛÛ٠ائدÛÙÛر",
- "recentchanges-legend-heading": "'''ÙÛساÙتÙ
اÙار:'''",
+ "recentchanges-legend-heading": "
ÙÛساÙتÙ
اÙار: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بÛرد٠[[Special:NewPages|ÛئÙÛ ØµÙØÙâÙرÛÙ ÙÛستÛÙÙ]] باخÛÙ)",
"rcnotefrom": "Ø¢Ø´Ø§ØºÛ Ø¯Ø§Ú©Û Ø¯ÙÛÛØ´ÛÚ© ÙردÙ
$3, $4 (دÙ
$1 {{PLURAL:$5|Úا٠گÙسترÛÙÛب|Úا٠گÙسترÛÙÛب دÛر}}).",
"rclistfrom": "$3 $2 ÙاختÛÙدا٠باشÙاÛارا٠ÛئÙÛ Ø¯ÛÛØ´ÛÚ©ÙØ±Û Ú¯Ø¤Ø³ØªØ±",
diff --git a/languages/i18n/ba.json b/languages/i18n/ba.json
index d0111193a5..b2fc126338 100644
--- a/languages/i18n/ba.json
+++ b/languages/i18n/ba.json
@@ -1142,7 +1142,7 @@
"recentchanges-label-bot": "ÐÑл ÑÓ©ÒÓÑеү Ð±Ð¾Ñ ÑаÑаÑÑнан баÑҡаÑÑлдÑ",
"recentchanges-label-unpatrolled": "ÐÑл ÑÓ©ÒÓÑеү ҡаÑалмаÒан Óле",
"recentchanges-label-plusminus": "ÐÐ¸Ñ ÑÑл Ñиклем байÑҡа Ò¯ÒгÓÑÒе",
- "recentchanges-legend-heading": "'''Ðегенда:'''",
+ "recentchanges-legend-heading": "
Ðегенда: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Ð¯Ò£Ñ Ð±Ð¸ÑÑÓÑ Ð¸Ñемлеген]] ҡаÑаÒÑÒ)",
"rcnotefrom": "ТүбÓÐ½Ð´Ó '''$2''' баÑлап ('''$1''' Ñиклем) Ò¯ÒгÓÑÑеүÒÓÑ ÐºÒ¯ÑÒ»ÓÑелгÓн.",
"rclistfrom": "$3 $2 баÑлап ÑÒ£Ñ Ò¯ÒгÓÑÑеүÒÓÑÒе күÑÒ»ÓÑ.",
diff --git a/languages/i18n/bcc.json b/languages/i18n/bcc.json
index 4b3829c932..943b13f25f 100644
--- a/languages/i18n/bcc.json
+++ b/languages/i18n/bcc.json
@@ -1128,7 +1128,7 @@
"recentchanges-label-bot": "ائ ÙÛراÛØ´ Ú¯ÙÙ ÛÚ© رباتء کت٠بÛتگ",
"recentchanges-label-unpatrolled": "اÛÙ ÙÛراÛØ´ اÙاگتء گشتâزÙÛ Ù٠بÛتگ",
"recentchanges-label-plusminus": "تاکء ساÛز ÙÙ
گرÙÚ Ú¯Ù٠ائ باÛت اÙÛ Ø§Ùداجگ Ù¹Ú¯Ù Ùارتگ اÙت",
- "recentchanges-legend-heading": "'''اختصاراÙ:'''",
+ "recentchanges-legend-heading": "
اختصاراÙ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ÙÙÚÙØ´ پر [[Special:NewPages|ÙÙÚ©Û٠تاکاÙØ¡ ÙÙرست]] بÚار ات)",
"rcnotefrom": "Ø¨Û Ø¬ÙÙگا Ù¹Ú¯Ùا٠شÙ
$3, $4 (تا
$1 {{PLURAL:$5|Ùشا٠دات٠بÙت٠اÙت|Ùشا٠دات٠بÙت٠اÙت}}).",
"rclistfrom": "Ù¾ÛØ´ دار ÙÙÚ©Û٠تغÛÛراتآ ÚÙ $3 $2",
diff --git a/languages/i18n/bcl.json b/languages/i18n/bcl.json
index 4254ee4e34..99c880f822 100644
--- a/languages/i18n/bcl.json
+++ b/languages/i18n/bcl.json
@@ -1099,7 +1099,7 @@
"recentchanges-label-bot": "Ining pagliwat pinaghimo bilang sarong bot",
"recentchanges-label-unpatrolled": "Ining pagliwat dae pa tabi pinagpatrolyahan",
"recentchanges-label-plusminus": "An kadakulaan nin pahina pinagliwat sa paagi kaining numero nin mga bayta",
- "recentchanges-legend-heading": "'''Kabalaynan:'''",
+ "recentchanges-legend-heading": "
Kabalaynan: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hilngon man [[Special:NewPages|listahan kan mga baguhong pahina]])",
"recentchanges-legend-plusminus": "(''±saro-duwa-tolo'')",
"rcnotefrom": "Sa ibaba iyo an mga kaliwatan poon kan '''$2''' (sagkod sa '''$1''' na ipinapahiling).",
diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json
index 53259dcfde..3842d274cb 100644
--- a/languages/i18n/be-tarask.json
+++ b/languages/i18n/be-tarask.json
@@ -455,7 +455,7 @@
"nocookieslogin": "{{SITENAME}} вÑкаÑÑÑÑоÑвае ÑайлÑ-кÑÐºÑ Ð´Ð»Ñ ÑваÑ
Ð¾Ð´Ñ Ñ ÑÑÑÑÑмÑ.\nУ ÐаÑÑм бÑаÑзÑÑÑ ÑайлÑ-кÑÐºÑ Ð°Ð´ÐºÐ»ÑÑанÑÑ.\nÐÐ°Ð»Ñ Ð»Ð°Ñка, ÑклÑÑÑÑе ÑÑ
Ñ Ð¿Ð°ÑпÑабÑйÑе ÑÑÑÑ Ñаз.",
"nocookiesfornew": "РаÑ
Ñнак ÑдзелÑнÑка Ð½Ñ Ð±ÑÑ ÑÑвоÑанÑ, ÑÐ°Ð¼Ñ ÑÑо Ð¼Ñ Ð½Ðµ Ð·Ð¼Ð°Ð³Ð»Ñ Ð¿Ð°ÑÑвеÑдзÑÑÑ Ñго кÑÑнÑÑÑ. \nУпÑÑнÑÑеÑÑ, ÑÑо Ñ ÐÐ°Ñ ÑклÑÑанÑÑ ÑайлÑ-кÑкÑ, пеÑазагÑÑзÑÑе гÑÑÑÑ ÑÑаÑÐ¾Ð½ÐºÑ Ñ Ð¿Ð°ÑпÑабÑйÑе зноÑ.",
"noname": "ÐÑ Ð¿Ð°Ð·Ð½Ð°ÑÑÐ»Ñ Ð½ÑÑлÑÑнае ÑÐ¼Ñ ÑдзелÑнÑка.",
- "loginsuccesstitle": "ÐаÑÑпÑÑ
Ð¾Ð²Ñ ÑваÑ
од Ñ ÑÑÑÑÑмÑ",
+ "loginsuccesstitle": "УвайÑÐ»Ñ Ñ ÑÑÑÑÑмÑ",
"loginsuccess": "
ЦÑÐ¿ÐµÑ ÐÑ ÑвайÑÐ»Ñ Ñ {{GRAMMAR:вÑнавалÑнÑ|{{SITENAME}}}} Ñк «$1». ",
"nosuchuser": "УдзелÑнÑка «$1» не ÑÑнÑе.\nÐÑлÑкÑÑ Ñ Ð¼Ð°Ð»ÑÑ Ð»ÑÑаÑÑ Ð°Ð´ÑозÑнÑваÑÑÑа Ñ ÑмÑнаÑ
ÑдзелÑнÑкаÑ.\nÐÑавеÑÑе напÑÑанÑне алÑбо [[Special:UserLogin/signup|ÑÑваÑÑÑе Ð½Ð¾Ð²Ñ ÑаÑ
Ñнак]].",
"nosuchusershort": "УдзелÑнÑка Ð·Ñ Ñменем «$1» не ÑÑнÑе. ÐÑавеÑÑе напÑÑанÑне.",
@@ -491,7 +491,7 @@
"createaccount-title": "СÑваÑÑнÑне ÑаÑ
ÑÐ½ÐºÑ Ñ {{GRAMMAR:меÑнÑ|{{SITENAME}}}}",
"createaccount-text": "ÐеÑ
Ñа ÑÑваÑÑÑ ÑаÑ
Ñнак «$2» Ñ {{GRAMMAR:меÑнÑ|{{SITENAME}}}} ($4) Ð´Ð»Ñ ÐаÑага адÑаÑÑ ÑлекÑÑоннай поÑÑÑ. ÐаÑÐ¾Ð»Ñ Ð´Ð»Ñ Ð³ÑÑага ÑаÑ
ÑÐ½ÐºÑ â «$3». Ðам ÑÑÑба ÑвайÑÑÑÑ Ñ Ð·ÑмÑнÑÑÑ ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð·Ð°Ñаз.\n\nÐÑ Ð¼Ð¾Ð¶Ð°Ñе пÑаÑгнаÑаваÑÑ Ð³ÑÑÑ Ð»ÑÑÑ, ÐºÐ°Ð»Ñ Ð³ÑÑÑ ÑаÑ
Ñнак бÑÑ ÑÑвоÑÐ°Ð½Ñ Ð¿Ð°Ð¼Ñлкова.",
"login-throttled": "ÐÑ Ð·ÑабÑÐ»Ñ Ð½Ð°Ð´Ñа ÑÐ¼Ð°Ñ ÑпÑÐ¾Ð±Ð°Ñ ÑваÑ
Ð¾Ð´Ñ Ñ ÑÑÑÑÑмÑ.\nÐÐ°Ð»Ñ Ð»Ð°Ñка, паÑакайÑе $1 пеÑад ÑÑм Ñк паÑпÑабаваÑÑ ÑзноÑ.",
- "login-abort-generic": "Ðе аÑÑÑмалаÑÑ ÑвайÑÑÑÑ Ñ ÑÑÑÑÑмÑ, ÑкаÑавана",
+ "login-abort-generic": "Ðе аÑÑÑмалаÑÑ ÑвайÑÑÑÑ Ñ ÑÑÑÑÑÐ¼Ñ â ÑпÑнена",
"login-migrated-generic": "ÐÐ°Ñ ÑаÑ
Ñнак бÑÑ Ð¿ÐµÑанеÑÐµÐ½Ñ Ñ Ð²Ð°Ñае ÑÐ¼Ñ ÑдзелÑнÑка болÑÑ Ð½Ðµ ÑÑнÑе Ñ Ð³ÑÑай вÑкÑ.",
"loginlanguagelabel": "Ðова: $1",
"suspicious-userlogout": "ÐÐ°Ñ Ð·Ð°Ð¿ÑÑ Ð½Ð° вÑÑ
ад з ÑÑÑÑÑÐ¼Ñ Ð±ÑÑ Ð°Ð´Ñ
ÑленÑ, ÑÐ°Ð¼Ñ ÑÑо вÑглÑдае, ÑÑо Ñн бÑÑ Ð´Ð°ÑÐ»Ð°Ð½Ñ Ð¿Ð°ÑкоджанÑм бÑаÑзÑÑам алÑбо кÑÑаванÑм пÑокÑÑ-ÑÑÑвÑÑам.",
@@ -510,7 +510,7 @@
"newpassword": "ÐÐ¾Ð²Ñ Ð¿Ð°ÑолÑ:",
"retypenew": "ÐаÑÑаÑÑÑе Ð½Ð¾Ð²Ñ Ð¿Ð°ÑолÑ:",
"resetpass_submit": "ÐаÑ
аваÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ñ ÑвайÑÑÑÑ",
- "changepassword-success": "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±ÑÑ Ð¿Ð°ÑÑпÑÑ
ова зÑмененÑ!",
+ "changepassword-success": "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±ÑÑ Ð·ÑмененÑ!",
"changepassword-throttled": "ÐÑ Ð·ÑабÑÐ»Ñ Ð·Ð°ÑÐ¼Ð°Ñ ÑпÑÐ¾Ð±Ð°Ñ ÑвайÑÑÑÑ Ñ ÑÑÑÑÑмÑ.\nÐÐ°Ð»Ñ Ð»Ð°Ñка, паÑакайÑе $1 пеÑад наÑÑÑпнай ÑпÑобай.",
"botpasswords": "ÐаÑÐ¾Ð»Ñ ÑобаÑаÑ",
"botpasswords-summary": "
ÐаÑÐ¾Ð»Ñ ÑобаÑÐ°Ñ Ð´Ð°Ð·Ð²Ð°Ð»ÑÑÑÑ Ð´Ð¾ÑÑÑп да ÑаÑ
ÑÐ½ÐºÑ ÑдзелÑнÑка пÑаз API без вÑкаÑÑÑÑанÑÐ½Ñ Ð»Ð°Ð³ÑÐ½Ñ Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð°ÑноÑнага ÑаÑ
ÑнкÑ. ÐÑÐ°Ð²Ñ ÑдзелÑнÑка пÑÑ Ð²ÑкаÑÑÑÑанÑÐ½Ñ Ð¿Ð°ÑÐ¾Ð»Ñ ÑобаÑа могÑÑÑ Ð±ÑÑÑ Ð°Ð±Ð¼ÐµÐ¶Ð°Ð²Ð°Ð½ÑÑ.\n\nÐÐ°Ð»Ñ Ð²Ñ Ð½Ñ Ð²ÐµÐ´Ð°ÐµÑе, навоÑÑа вам гÑÑа, мабÑÑÑ, не ÑабÑÑе гÑÑага. ÐÑÑ
Ñо не павÑнен пÑаÑÑÑÑ Ð²Ð°Ñ Ð·Ð³ÐµÐ½ÑÑаваÑÑ ÑÐ°ÐºÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ñ Ð¿ÐµÑадаÑÑ Ð³ÑÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ ÑмÑ.",
@@ -533,7 +533,7 @@
"botpasswords-insert-failed": "Ðе аÑÑÑмалаÑÑ Ð´Ð°Ð´Ð°ÑÑ ÑобаÑа Ð·Ñ Ñмем «$1». ÐагÑÑма, Ñн Ñжо бÑÑ Ð´Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ñ?",
"botpasswords-update-failed": "Ðе аÑÑÑмалаÑÑ Ð°Ð±Ð½Ð°Ð²ÑÑÑ ÑобаÑа Ð·Ñ Ñмем «$1». ÐагÑÑма, Ñн бÑÑ Ð²ÑдаленÑ?",
"botpasswords-created-title": "ÐаÑÐ¾Ð»Ñ ÑобаÑа ÑÑвоÑанÑ",
- "botpasswords-created-body": "ÐаÑÐ¾Ð»Ñ ÑобаÑа «$1» бÑÑ Ð¿Ð°ÑÑпÑÑ
ова ÑÑвоÑанÑ.",
+ "botpasswords-created-body": "ÐаÑÐ¾Ð»Ñ ÑобаÑа «$1» бÑÑ ÑÑвоÑанÑ.",
"botpasswords-updated-title": "ÐаÑÐ¾Ð»Ñ ÑобаÑа абноÑленÑ",
"botpasswords-updated-body": "ÐаÑÐ¾Ð»Ñ ÑобаÑа «$1» бÑÑ Ð¿Ð°ÑÑпÑÑ
ова абноÑленÑ.",
"botpasswords-deleted-title": "ÐаÑÐ¾Ð»Ñ ÑобаÑа вÑдаленÑ",
@@ -1195,6 +1195,7 @@
"grant-protect": "ÐбаÑона Ñ Ð·ÑнÑÑÑÑе абаÑÐ¾Ð½Ñ ÑÑаÑонак",
"grant-rollback": "ÐÐ´ÐºÐ°Ñ Ð·ÑÐ¼ÐµÐ½Ð°Ñ ÑÑаÑонак",
"grant-sendemail": "ÐдпÑаÑка лÑÑÑÐ¾Ñ ÑлекÑÑоннай поÑÑÑ ÑнÑÑм ÑдзелÑнÑкам",
+ "grant-uploadeditmovefile": "ÐагÑÑзка, замена Ñ Ð¿ÐµÑайменаванÑне ÑайлаÑ",
"newuserlogpage": "ÐÑÑнал ÑÑваÑÑнÑÐ½Ñ ÑаÑ
ÑнкаÑ",
"newuserlogpagetext": "ÐÑÑа жÑÑнал ÑÑваÑÑнÑÐ½Ñ ÑаÑ
ÑÐ½ÐºÐ°Ñ ÑдзелÑнÑÐºÐ°Ñ Ñ ÑдзелÑнÑÑ.",
"rightslog": "ÐÑÑнал пÑÐ°Ð²Ð¾Ñ ÑдзелÑнÑкаÑ",
diff --git a/languages/i18n/be.json b/languages/i18n/be.json
index f2a978e7cc..d2ac95d2e8 100644
--- a/languages/i18n/be.json
+++ b/languages/i18n/be.json
@@ -361,6 +361,7 @@
"title-invalid-interwiki": "ÐапÑÑÐ°Ð½Ñ Ð·Ð°Ð³Ð°Ð»Ð¾Ð²Ð°Ðº зÑмÑÑÑае ÑнÑÑÑвÑкÑ-ÑпаÑÑлкÑ, ÑкÑÑ Ð½ÐµÐ»Ñга ÑжÑваÑÑ Ñ Ð½Ð°Ð·Ð²Ð°Ñ
.",
"title-invalid-talk-namespace": "ÐапÑÑÐ°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° ÑÑаÑÐ¾Ð½ÐºÑ Ð°Ð´Ð¿Ð°Ð²Ñдае ÑÑаÑонÑÑ ÑазмоÑ, ÑÐºÐ°Ñ Ð½Ðµ можа ÑÑнаваÑÑ.",
"title-invalid-characters": "ÐапÑÑÐ°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° ÑÑаÑÐ¾Ð½ÐºÑ ÑÑÑÑмлÑвае недапÑÑÑалÑнÑÑ ÑÑмвалÑ: \"$1\".",
+ "title-invalid-relative": "Ðазва ÑÑÑÑмлÑвае адноÑÐ½Ñ ÑлÑÑ
. ÐдноÑнÑÑ Ð½Ð°Ð·Ð²Ñ ÑÑаÑонак (./, ../) недапÑÑÑалÑнÑÑ, паколÑÐºÑ ÑÐ½Ñ ÑаÑÑа недаÑÑжнÑÑ Ð¿Ð°Ð´ÑÐ°Ñ Ð°Ð¿ÑаÑоÑÐºÑ ÐºÐ°ÑÑÑÑалÑнÑÑкÑм бÑаÑзеÑам.",
"title-invalid-magic-tilde": "ÐапÑÑÐ°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° ÑÑаÑÐ¾Ð½ÐºÑ ÑÑÑÑмлÑвае недапÑÑÑалÑнÑÑ Ð¿Ð°ÑлÑдоÑнаÑÑÑ ÑÑлÑÐ´Ð°Ñ (
~~~ ).",
"title-invalid-too-long": "ÐапÑÑÐ°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° ÑÑаÑÐ¾Ð½ÐºÑ Ð·Ð°Ð½Ð°Ð´Ñа доÑгаÑ. Яна павÑнна бÑÑÑ Ð½Ðµ даÑжÑй за $1 {{PLURAL:$1|байÑ|байÑÑ|байÑаÑ}} Ñ ÐºÐ°Ð´Ð°Ð²Ð°Ð½Ð½Ñ UTF-8.",
"title-invalid-leading-colon": "ÐапÑÑÐ°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° ÑÑаÑÐ¾Ð½ÐºÑ ÑÑÑÑмлÑвае недапÑÑÑалÑнае двÑÑ
кÑоп'е Ñ Ð¿Ð°ÑаÑкÑ.",
@@ -522,6 +523,36 @@
"changepassword-success": "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð¿Ð°ÑпÑÑ
ова змененÑ!",
"changepassword-throttled": "ÐанадÑа многа нÑдаÑнÑÑ
ÑпÑоб ÑвайÑÑÑ Ð¿Ð°Ð´ гÑÑÑм ÑлÑковÑм запÑÑам. \nÐаÑакайÑе $1 пеÑад ÑÑм, Ñк ÑпÑабаваÑÑ ÑзноÑ.",
"botpasswords": "ÐаÑÐ¾Ð»Ñ ÑобаÑаÑ",
+ "botpasswords-summary": "
ÐаÑÐ¾Ð»Ñ ÑобаÑÐ°Ñ Ð´Ð°Ð·Ð²Ð°Ð»ÑÑÑÑ Ð´Ð¾ÑÑÑп да ÑлÑковага запÑÑÑ ÑдзелÑнÑка пÑаз API без вÑкаÑÑÑÑÐ°Ð½Ð½Ñ Ð·Ð²ÐµÑÑак аÑноÑнага акаÑнÑа. ÐÐ°Ð·Ð²Ð¾Ð»Ñ ÑдзелÑнÑка пÑÑ Ð²ÑкаÑÑÑÑÐ°Ð½Ð½Ñ Ð¿Ð°ÑÐ¾Ð»Ñ ÑобаÑа могÑÑÑ Ð±ÑÑÑ Ð°Ð±Ð¼ÐµÐ¶Ð°Ð²Ð°Ð½ÑÑ.\n\nÐÐ°Ð»Ñ Ð²Ñ Ð½Ðµ ведаеÑе, навоÑÑа гÑÑа вам, Ñ
ÑÑÑÑй за ÑÑÑ, вам гÑÑа не ÑÑÑба. ÐÑÑ
Ñо не павÑнен пÑаÑÑÑÑ Ð²Ð°Ñ ÑÑваÑÑÑÑ ÑÐ°ÐºÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ñ Ð¿ÐµÑадаÑÑ Ð³ÑÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ ÑмÑ.",
+ "botpasswords-disabled": "ÐаÑÐ¾Ð»Ñ ÑобаÑÐ°Ñ Ð°Ð´ÐºÐ»ÑÑанÑ.",
+ "botpasswords-no-central-id": "Ðаб вÑкаÑÑÑÑоÑваÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ ÑобаÑаÑ, Ð²Ñ Ð¿Ð°Ð²ÑÐ½Ð½Ñ ÑвайÑÑÑ Ñ ÑÑÑÑÑÐ¼Ñ Ð· ÑÑнÑÑалÑзаванÑм ÑлÑковÑм запÑÑам.",
+ "botpasswords-existing": "ÐаÑÑнÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ ÑобаÑаÑ",
+ "botpasswords-createnew": "СÑваÑÑÑÑ Ð½Ð¾Ð²Ñ Ð¿Ð°ÑÐ¾Ð»Ñ ÑобаÑа",
+ "botpasswords-editexisting": "Ð ÑдагаваÑÑ Ð½Ð°ÑÑÐ½Ñ Ð¿Ð°ÑÐ¾Ð»Ñ ÑобаÑа",
+ "botpasswords-label-appid": "Ðазва ÑобаÑа:",
+ "botpasswords-label-create": "СÑваÑÑÑÑ",
+ "botpasswords-label-update": "ÐбнавÑÑÑ",
+ "botpasswords-label-cancel": "СкаÑаваÑÑ",
+ "botpasswords-label-delete": "СÑеÑÑÑ",
+ "botpasswords-label-resetpassword": "СкÑнÑÑÑ Ð¿Ð°ÑолÑ",
+ "botpasswords-label-grants": "ÐÑÑдаÑнÑÑ Ð´Ð°Ð·Ð²Ð¾Ð»Ñ:",
+ "botpasswords-help-grants": "ÐÐ¾Ð¶Ð½Ñ Ð´Ð°Ð·Ð²Ð¾Ð» дае доÑÑÑп да пÑÐ°Ð²Ð¾Ñ ÑдзелÑнÑка, ÑкÑÑ Ñжо пÑÑзнаÑÐ°Ð½Ñ ÑлÑÐºÐ¾Ð²Ð°Ð¼Ñ Ð·Ð°Ð¿ÑÑÑ ÑдзелÑнÑка. ÐлÑдзÑÑе [[Special:ListGrants|ÑаблÑÑÑ Ð´Ð°Ð·Ð²Ð¾Ð»Ð°Ñ]] Ð´Ð»Ñ Ð°ÑÑÑÐ¼Ð°Ð½Ð½Ñ Ð´Ð°Ð´Ð°ÑковÑÑ
зÑвеÑÑак.",
+ "botpasswords-label-restrictions": "ÐÐ±Ð¼ÐµÐ¶Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð° вÑкаÑÑÑÑанне:",
+ "botpasswords-label-grants-column": "Ðазволена",
+ "botpasswords-bad-appid": "Ðазва ÑобаÑа \"$1\" недапÑÑÑалÑнаÑ.",
+ "botpasswords-insert-failed": "Ðе ÑдалоÑÑ Ð´Ð°Ð´Ð°ÑÑ ÑобаÑÑ Ð½Ð°Ð·Ð²Ñ \"$1\". ÐагÑÑма, Ñна Ñжо дададзена?",
+ "botpasswords-update-failed": "Ðе ÑдалоÑÑ Ð·Ð¼ÑнÑÑÑ ÑобаÑÑ Ð½Ð°Ð·Ð²Ñ \"$1\". Ðожа, Ñна ÑÑÑÑÑаÑ?",
+ "botpasswords-created-title": "ÐаÑÐ¾Ð»Ñ ÑобаÑа ÑÑвоÑанÑ",
+ "botpasswords-created-body": "ÐаÑÐ¾Ð»Ñ Ð´Ð»Ñ ÑобаÑа \"$1\" паÑпÑÑ
ова ÑÑвоÑанÑ.",
+ "botpasswords-updated-title": "ÐаÑÐ¾Ð»Ñ ÑобаÑа абноÑленÑ",
+ "botpasswords-updated-body": "ÐаÑÐ¾Ð»Ñ Ð´Ð»Ñ ÑобаÑа \"$1\" паÑпÑÑ
ова абноÑленÑ.",
+ "botpasswords-deleted-title": "ÐаÑÐ¾Ð»Ñ ÑобаÑа ÑÑÑÑÑÑ",
+ "botpasswords-deleted-body": "ÐаÑÐ¾Ð»Ñ Ð´Ð»Ñ ÑобаÑа \"$1\" паÑпÑÑ
ова ÑÑÑÑÑÑ.",
+ "botpasswords-newpassword": "ÐÐ¾Ð²Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð´Ð»Ñ ÑваÑ
Ð¾Ð´Ñ Ð¿Ð°Ð´
$1 â
$2 .
ÐÐ°Ð»Ñ Ð»Ð°Ñка, запÑÑÑÑе Ñго Ð´Ð»Ñ Ð²ÑкаÑÑÑÑÐ°Ð½Ð½Ñ Ñ Ð±ÑдÑÑÑнÑ. ",
+ "botpasswords-no-provider": "BotPasswordsSessionProvider недаÑÑÑпнÑ.",
+ "botpasswords-restriction-failed": "УваÑ
од не вÑÐºÐ°Ð½Ð°Ð½Ñ Ð·-за абмежаваннÑÑ Ð½Ð° паÑÐ¾Ð»Ñ ÑобаÑа.",
+ "botpasswords-invalid-name": "Ðаказанае ÑÐ¼Ñ ÑдзелÑнÑка не ÑÑÑÑмлÑвае падзÑлÑлÑнÑк паÑÐ¾Ð»Ñ ÑобаÑа (\"$1\").",
+ "botpasswords-not-exist": "УдзелÑнÑк \"$1\" не мае паÑÐ¾Ð»Ñ Ð´Ð»Ñ ÑобаÑа з назвай \"$2\".",
"resetpass_forbidden": "Ðе дазволена мÑнÑÑÑ Ð¿Ð°ÑолÑ",
"resetpass-no-info": "ТÑÑба ÑвайÑÑÑ Ñ ÑÑÑÑÑмÑ, каб звÑÑÑаÑÑа да гÑÑай ÑÑаÑÐ¾Ð½ÐºÑ Ð½Ð°ÑпÑоÑÑ.",
"resetpass-submit-loggedin": "ÐмÑнÑÑÑ Ð¿Ð°ÑолÑ",
@@ -641,8 +672,8 @@
"previewnote": "
ÐамÑÑайÑе, гÑÑа ÑолÑÐºÑ Ð¿Ð°Ð¿ÑÑÑÐ´Ð½Ñ Ð¿Ð°ÐºÐ°Ð·. ÐÑаÑÐºÑ ÑÑÑÑ Ð½Ðµ замаÑаванÑÑ!",
"continue-editing": "ÐÑаÑÑгнÑÑÑ ÑÑдагаванне",
"previewconflict": "ÐÑÑа папÑÑÑÐ´Ð½Ñ Ð¿Ð°ÐºÐ°Ð· магÑÑмага вÑнÑÐºÑ Ð·Ð°Ð¼Ð°ÑоÑÐ²Ð°Ð½Ð½Ñ Ð°ÐºÑÑалÑнага ÑÑÐ°Ð½Ñ ÐºÑÑнÑÑнага ÑÑкÑÑÑ Ñ Ð²ÐµÑÑ
нÑм ÑÑкÑÑавÑм полÑ.",
- "session_fail_preview": "'''Ðе ÑдалоÑÑ Ð°Ð¿ÑаÑаваÑÑ Ð²Ð°ÑÑ Ð¿ÑаÑкÑ, ÑÐ°Ð¼Ñ ÑÑо ÑеÑÐ²ÐµÑ Ð·Ð³ÑбÑÑ Ð·Ð²ÐµÑÑÐºÑ Ð°Ð± ваÑÑм ÑеанÑе.\nÐаÑпÑабÑйÑе, ÐºÐ°Ð»Ñ Ð»Ð°Ñка, ÑзноÑ.\nÐÐ°Ð»Ñ Ñ ÑÐ°Ð´Ñ Ð½Ðµ аÑÑÑмаеÑÑа, паÑпÑабÑйÑе [[Special:UserLogout|вÑйÑÑÑ Ð· ÑÑÑÑÑмÑ]] Ñ Ð·Ð°Ð¹ÑÑÑ ÑзноÑ.'''",
- "session_fail_preview_html": "'''Ðе ÑдалоÑÑ Ð°Ð¿ÑаÑаваÑÑ Ð²Ð°ÑÑ Ð¿ÑаÑÐºÑ Ð·-за Ñаго, ÑÑо згÑбÑлÑÑÑ Ð´Ð°Ð½ÑÑ Ð°Ð± ÑеанÑе.'''\n\n''ÐеÑадпаказ не зÑобленÑ, бо на плÑÑоÑÑÑ {{SITENAME}} Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ñ ÑÑÑÑ ÐºÐ¾Ð´ HTML, ÑÑо ÑобÑÑÑ Ð¼Ð°Ð³ÑÑмÑÐ¼Ñ Ð°ÑÐ°ÐºÑ Ð¿Ñаз ЯваÑкÑÑпÑ.''\n\n'''ÐÐ°Ð»Ñ Ð³ÑÑа наÑмалÑÐ½Ð°Ñ ÑпÑоба пÑаÑкÑ, паÑпÑабÑйÑе паÑÑаÑÑÑÑ Ð·Ð°Ð¿ÑÑванне. ÐÐ°Ð»Ñ Ñ Ð³ÑÑа не дапаможа, паÑпÑабÑйÑе [[Special:UserLogout|вÑйÑÑÑ Ð· ÑÑÑÑÑмÑ]] Ñ ÑвайÑÑÑ ÑзноÑ.'''",
+ "session_fail_preview": "Ðе ÑдалоÑÑ Ð°Ð¿ÑаÑаваÑÑ Ð²Ð°ÑÑ Ð¿ÑаÑкÑ, ÑÐ°Ð¼Ñ ÑÑо ÑеÑÐ²ÐµÑ Ð·Ð³ÑбÑÑ Ð·Ð²ÐµÑÑÐºÑ Ð°Ð± ваÑÑм ÑеанÑе.\n\nÐагÑÑма, Ð²Ñ Ð²ÑйÑÐ»Ñ Ð· ÑÑÑÑÑмÑ.
ÐÐ°Ð»Ñ Ð»Ð°Ñка, пÑавеÑÑе, ÑÑо Ð²Ñ ÑвайÑÐ»Ñ Ñ ÑÑÑÑÑÐ¼Ñ Ñ Ð¿Ð°ÑпÑабÑйÑе ÑÑÑÑ Ñаз. \nÐÐ°Ð»Ñ Ñ ÑÐ°Ð´Ñ Ð½Ðµ аÑÑÑмаеÑÑа, паÑпÑабÑйÑе [[Special:UserLogout|вÑйÑÑÑ Ð· ÑÑÑÑÑмÑ]] Ñ Ð·Ð°Ð¹ÑÑÑ ÑзноÑ, ÑакÑама пÑавеÑÑе, ÑÑо Ð²Ð°Ñ Ð±ÑаÑÐ·ÐµÑ Ð´Ð°Ð·Ð²Ð°Ð»Ñе кÑÐºÑ Ð· гÑÑага ÑайÑа.",
+ "session_fail_preview_html": "Ðе ÑдалоÑÑ Ð°Ð¿ÑаÑаваÑÑ Ð²Ð°ÑÑ Ð¿ÑаÑÐºÑ Ð·-за Ñаго, ÑÑо згÑбÑлÑÑÑ Ð´Ð°Ð½ÑÑ Ð°Ð± ÑеанÑе.\n\n
ÐеÑадпаказ не зÑобленÑ, бо на плÑÑоÑÑÑ {{SITENAME}} Ð´Ð°Ð·Ð²Ð¾Ð»ÐµÐ½Ñ ÑÑÑÑ ÐºÐ¾Ð´ HTML, ÑÑо ÑобÑÑÑ Ð¼Ð°Ð³ÑÑмÑÐ¼Ñ Ð°ÑÐ°ÐºÑ Ð¿Ñаз ЯваÑкÑÑпÑ. \n\n
ÐÐ°Ð»Ñ Ð³ÑÑа наÑмалÑÐ½Ð°Ñ ÑпÑоба пÑаÑкÑ, паÑпÑабÑйÑе паÑÑаÑÑÑÑ Ð·Ð°Ð¿ÑÑванне. \nÐÐ°Ð»Ñ Ñ Ð³ÑÑа не дапаможа, паÑпÑабÑйÑе [[Special:UserLogout|вÑйÑÑÑ Ð· ÑÑÑÑÑмÑ]] Ñ ÑвайÑÑÑ ÑзноÑ, ÑакÑама пÑавеÑÑе, ÑÑо Ð²Ð°Ñ Ð±ÑаÑÐ·ÐµÑ Ð´Ð°Ð·Ð²Ð°Ð»Ñе кÑÐºÑ Ð· гÑÑага ÑайÑа.",
"token_suffix_mismatch": "'''ÐаÑа пÑаÑка бÑла адÑ
Ñлена, каб пазбегнÑÑÑ ÑапÑÐ°Ð²Ð°Ð½Ð½Ñ ÑÑкÑÑÑ ÑÑаÑонкÑ, ÑÐ°Ð¼Ñ ÑÑо Ð²Ð°Ñ Ð±ÑаÑÐ·ÐµÑ Ð¿Ð°Ð¿ÑÐ°Ð²Ð°Ñ Ð·Ð½Ð°ÐºÑ Ð¿ÑÑпÑÐ½ÐºÑ Ñ ÐºÐ²ÑÑÐºÑ Ð¿ÑаÑкÑ.\nÐагÑÑма, пÑÑÑÑна Ñ Ð²ÑкаÑÑÑÑÐ°Ð½Ð½Ñ Ð²Ð°Ð¼Ñ Ð°Ð½Ð°Ð½Ñмнага пÑокÑÑ-ÑеÑвеÑа, пÑагÑÐ°Ð¼Ñ Ñкога пÑаÑÑÑÑÑ Ð½ÐµÐºÐ°ÑÑкÑна.'''",
"edit_form_incomplete": "'''ÐекаÑоÑÑÑ ÑаÑÑÐºÑ ÑоÑÐ¼Ñ ÑÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ðµ даÑÑгнÑÐ»Ñ ÑеÑвеÑа. УпÑÑнÑÑеÑÑ, ÑÑо ÐаÑÑÑ ÑÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ðµ паÑкоджанÑÑ Ñ Ð¿Ð°ÑпÑабÑйÑе зноÑ.'''",
"editing": "ÐÑавÑм $1",
@@ -658,11 +689,12 @@
"yourdiff": "ÐдÑозненнÑ",
"copyrightwarning": "ÐаÑважÑе, ÑÑо ÑÑе ÑÐºÐ»Ð°Ð´Ñ Ð½Ð° {{SITENAME}} лÑÑаÑÑа вÑданÑÐ¼Ñ Ð½Ð° ÑмоваÑ
$2 (Ð±Ð°Ñ Ð¿Ð°Ð´ÑабÑзнаÑÑÑ Ð½Ð° $1). ÐÐ°Ð»Ñ Ð²Ñ Ð½Ðµ жадаеÑе, каб ваÑÑÑ Ð¼Ð°ÑÑÑÑÑÐ»Ñ Ð±ÑзлÑÑаÑна пÑавÑлÑÑÑ, Ñ Ñвабодна ÑаÑпаÑÑÑджвалÑÑÑ, Ñо Ñ Ð½Ðµ аддавайÑе ÑÑ
ÑÑдÑ.
\nТакÑама Ð²Ñ Ð½Ð°Ð¼ абÑÑаеÑе, ÑÑо напÑÑÐ°Ð»Ñ Ð³ÑÑа ÑамÑ, або ÑкапÑÑÐ°Ð²Ð°Ð»Ñ Ð· ÑÑÑÑÑÑÑ, ÑÐºÑ Ð·Ð½Ð°Ñ
одзÑÑÑа Ñ Ð¿ÑблÑÑнай ÑлаÑнаÑÑÑ, або з аналагÑÑнага Ñвабоднага ÑÑÑÑÑÑÑ.\n'''ÐÐ ÐÐÐÐÐÐЦРСЮÐЫ, ÐÐÐ ÐÐÐÐÐÐÐÐÐÐÐ ÐÐÐÐÐÐУ, ÐÐТÐРЫЯÐУ, ЯÐÐ ÐÐ¥ÐÐÐÐÐЦЦРÐÐТÐРСÐÐÐ ÐÐ ÐÐÐÐ!'''",
"copyrightwarning2": "ÐаÑважÑе, ÑÑо ÐºÐ¾Ð¶Ð½Ñ Ñклад на {{SITENAME}} можа бÑÑÑ Ð¿Ð°Ð¿ÑаÑленÑ, Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð°Ð±Ð¾ вÑÐ´Ð°Ð»ÐµÐ½Ñ ÑнÑÑÐ¼Ñ ÑдзелÑнÑкамÑ. ÐÐ°Ð»Ñ Ð²Ñ Ð½Ðµ жадаеÑе, каб ваÑÑÑ Ð¼Ð°ÑÑÑÑÑÐ»Ñ Ð±ÑзлÑÑаÑна пÑавÑлÑÑÑ, Ñо Ñ Ð½Ðµ давайÑе ÑÑ
ÑÑдÑ.
\nТакÑама Ð²Ñ Ð½Ð°Ð¼ абÑÑаеÑе, ÑÑо напÑÑÐ°Ð»Ñ Ð³ÑÑа ÑамÑ, або ÑкапÑÑÐ°Ð²Ð°Ð»Ñ Ð· ÑÑÑÑÑÑÑ, ÑÐºÑ Ð·Ð½Ð°Ñ
одзÑÑÑа Ñ Ð¿ÑблÑÑнай ÑлаÑнаÑÑÑ, або з аналагÑÑнага Ñвабоднага ÑÑÑÑÑÑÑ (Ð±Ð°Ñ Ð¿Ð°Ð´ÑабÑзнаÑÑÑ Ð½Ð° $1).\n'''ÐÐ ÐÐÐÐÐÐЦРСЮÐЫ, ÐÐÐ ÐÐÐÐÐÐÐÐÐÐÐ ÐÐÐÐÐÐУ, ÐÐТÐРЫЯÐУ, ЯÐÐ ÐÐ¥ÐÐÐÐÐЦЦРÐÐТÐРСÐÐÐ ÐÐ ÐÐÐÐ!'''",
+ "editpage-cannot-use-custom-model": "ÐадÑÐ»Ñ Ð·Ð¼ÐµÑÑÑ Ð³ÑÑай ÑÑаÑÐ¾Ð½ÐºÑ Ð½Ðµ можа бÑÑÑ Ð·Ð¼ÐµÐ½ÐµÐ½Ð°.",
"longpageerror": "'''ÐамÑлка: ÐбâÑм ÑÑкÑÑÑ, ÑÐºÑ ÐÑ ÑпÑабÑеÑе запÑÑаÑÑ Ñкладае $1 {{PLURAL:$1|кÑлабайÑ|кÑлабайÑÑ|кÑлабайÑаÑ}}, ÑÑо болей ÑÑÑаноÑленага Ð°Ð±Ð¼ÐµÐ¶Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð° $2 {{PLURAL:$2|кÑлабайÑ|кÑлабайÑÑ|кÑлабайÑаÑ}}.'''\nСÑаÑонка не можа бÑÑÑ Ð·Ð°Ñ
аванаÑ.",
- "readonlywarning": "
Увага: заÑаз Ð²Ñ Ð½Ðµ можаÑе запÑÑаÑÑ Ñвае пÑаÑкÑ, ÑÐ°Ð¼Ñ ÑÑо база звеÑÑак заÑÑнена на абÑлÑгоÑванне. \nÐагÑÑма, ваÑÑа пеÑанеÑÑÑ Ð²Ð°Ñ ÑÑкÑÑ Ñ Ð°ÑÐ¾Ð±Ð½Ñ Ñайл Ñ Ð·Ð°Ð¿ÑÑаÑÑ Ð½Ð° поÑÑм.\n\nÐдмÑнÑÑÑÑаÑаÑ, ÑÐºÑ Ð·Ð°ÑÑнÑÑ Ð±Ð°Ð·Ñ, ÑаÑÑлÑмаÑÑÑ Ð³ÑÑа Ñак: $1",
+ "readonlywarning": "
Увага: заÑаз Ð²Ñ Ð½Ðµ можаÑе запÑÑаÑÑ Ñвае пÑаÑкÑ, ÑÐ°Ð¼Ñ ÑÑо база звеÑÑак заÑÑнена на абÑлÑгоÑванне. \nÐагÑÑма, ваÑÑа пеÑанеÑÑÑ Ð²Ð°Ñ ÑÑкÑÑ Ñ Ð°ÑÐ¾Ð±Ð½Ñ Ñайл Ñ Ð·Ð°Ð¿ÑÑаÑÑ Ð½Ð° поÑÑм.\n\nСÑÑÑÑÐ¼Ð½Ñ Ð°Ð´Ð¼ÑнÑÑÑÑаÑаÑ, ÑÐºÑ Ð·Ð°ÑÑнÑÑ Ð±Ð°Ð·Ñ, ÑаÑÑлÑмаÑÑÑ Ð³ÑÑа Ñак: $1",
"protectedpagewarning": "'''УÐÐÐÐ: ÑÑаÑонка паÑÑаÑлена пад аÑ
овÑ, ÑÐ°Ð¼Ñ Ñе могÑÑÑ Ð¿ÑавÑÑÑ ÑолÑÐºÑ Ð°Ð´Ð¼ÑнÑÑÑÑаÑаÑÑ.'''\nÐÑжÑй Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ Ð°Ð¿Ð¾ÑÐ½Ñ Ð·Ð°Ð¿ÑÑ Ð· адпаведнага жÑÑнала:",
"semiprotectedpagewarning": "'''Увага:''' ÑÑаÑонка паÑÑаÑлена пад аÑ
овÑ, ÑÐ°Ð¼Ñ Ñе могÑÑÑ Ð¿ÑавÑÑÑ ÑолÑÐºÑ Ð·Ð°ÑÑгÑÑÑÑаванÑÑ ÑдзелÑнÑÐºÑ («паÑ-аÑ
ова»). ÐÑжÑй Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ Ð°Ð¿Ð¾ÑÐ½Ñ Ð·Ð°Ð¿ÑÑ Ð· адпаведнага жÑÑнала:",
- "cascadeprotectedwarning": "'''Увага:''' гÑÑÐ°Ñ ÑÑаÑонка аÑ
оÑваеÑÑа, ÑÐ°Ð¼Ñ Ñе могÑÑÑ Ð¿ÑавÑÑÑ ÑолÑÐºÑ ÑдзелÑнÑÐºÑ Ð· пÑÐ°Ð²Ð°Ð¼Ñ Ð°Ð´Ð¼ÑнÑÑÑÑаÑаÑа. ÐÑÑÑÑна аÑ
овÑ: ÑлÑÑÑнне гÑÑай ÑÑаÑÐ¾Ð½ÐºÑ Ñ {{PLURAL:$1|ÑÑаÑонкÑ, ÑÐºÐ°Ñ ÑÑаÑÑÑ|ÑÑаÑонкÑ, ÑкÑÑ ÑÑаÑÑÑ}} пад каÑкаднай аÑ
овай:",
+ "cascadeprotectedwarning": "
Увага: гÑÑÐ°Ñ ÑÑаÑонка аÑ
оÑваеÑÑа, ÑÐ°Ð¼Ñ Ñе могÑÑÑ Ð¿ÑавÑÑÑ ÑолÑÐºÑ ÑдзелÑнÑÐºÑ Ð· пÑÐ°Ð²Ð°Ð¼Ñ Ð°Ð´Ð¼ÑнÑÑÑÑаÑаÑа. ÐÑÑÑÑна аÑ
овÑ: ÑлÑÑÑнне гÑÑай ÑÑаÑÐ¾Ð½ÐºÑ Ñ {{PLURAL:$1|ÑÑаÑонкÑ, ÑÐºÐ°Ñ ÑÑаÑÑÑ|ÑÑаÑонкÑ, ÑкÑÑ ÑÑаÑÑÑ}} пад каÑкаднай аÑ
овай:",
"titleprotectedwarning": "'''УÐÐÐÐ: ÑÑаÑонка паÑÑаÑлена пад аÑ
овÑ, ÑÐ°Ð¼Ñ Ñе могÑÑÑ ÑÑваÑаÑÑ ÑолÑÐºÑ ÑдзелÑнÑÐºÑ Ð· [[Special:ListGroupRights|адмÑÑловÑÐ¼Ñ Ð¿ÑавамÑ]].'''\nÐÑжÑй Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ Ð°Ð¿Ð¾ÑÐ½Ñ Ð·Ð°Ð¿ÑÑ Ð· адпаведнага жÑÑнала:",
"templatesused": "Шабло{{PLURAL:$1|н|нÑ}} на гÑÑай ÑÑаÑонÑÑ:",
"templatesusedpreview": "Шабло{{PLURAL:$1|н Ñ|Ð½Ñ Ñ}} гÑÑÑм пеÑадпаказе:",
@@ -677,6 +709,7 @@
"permissionserrors": "ÐамÑлка доÑÑÑпÑ",
"permissionserrorstext": "Ðам не дазволена гÑÑага ÑабÑÑÑ, з наÑÑÑпн{{PLURAL:$1|ай пÑÑÑÑнÑ|ÑÑ
пÑÑÑÑн}}:",
"permissionserrorstext-withaction": "Ðам не дазволена $2, з-за наÑÑÑп{{PLURAL:$1|най пÑÑÑÑнÑ|нÑÑ
пÑÑÑÑн}}:",
+ "contentmodelediterror": "ÐÑ Ð½Ðµ можаÑе пÑавÑÑÑ Ð³ÑÑÑ Ð²ÐµÑÑÑÑ, ÑÐ°Ð¼Ñ ÑÑо Ñе мадÑÐ»Ñ Ð·Ð¼ÐµÑÑÑ â
$1
, ÑÑо адÑознÑваеÑÑа ад ÑÑпеÑаÑнÑй мадÑÐ»Ñ Ð·Ð¼ÐµÑÑÑ ÑÑаÑонкÑ,
$2
.",
"recreate-moveddeleted-warn": "
Увага: ÐÑ Ð°Ð´Ð½Ð°ÑлÑеÑе ÑÑаÑонкÑ, ÑÐºÐ°Ñ Ñаней бÑла ÑÑÑÑÑа. \n\nТÑÑба падÑмаÑÑ, ÑÑ Ð²Ð°ÑÑа далей пÑаÑаваÑÑ Ð· гÑÑай ÑÑаÑонкай.\nÐоÑÑ Ð¶ÑÑнал ÑÑÑÑаннÑÑ Ñ Ð¿ÐµÑаноÑÐ°Ñ Ð´Ð»Ñ Ð³ÑÑай ÑÑаÑонкÑ:",
"moveddeleted-notice": "ÐÑÑÐ°Ñ ÑÑаÑонка бÑла ÑÑÑÑÑаÑ.\nÐÑжÑй Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ Ð¶ÑÑнал ÑÑÑÑаннÑÑ Ñ Ð¿ÐµÑаноÑÐ°Ñ Ð´Ð»Ñ Ð³ÑÑай ÑÑаÑонкÑ.",
"log-fulllog": "ÐаглÑдзеÑÑ Ð¿Ð¾ÑÐ½Ñ Ð»Ð¾Ð³",
@@ -699,6 +732,8 @@
"content-model-text": "звÑÑÐ°Ð¹Ð½Ñ ÑÑкÑÑ",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "ÐÑÑÑÑ Ð°Ð±'екÑ",
+ "content-json-empty-array": "ÐÑÑÑÑ Ð¼Ð°ÑÑÑ",
"expensive-parserfunction-warning": "Увага: Ðа ÑÑаÑонÑÑ Ð·Ð°Ð½Ð°Ð´Ñа ÑÐ¼Ð°Ñ Ð¿ÑаÑаÑмÑÑÑÑÑ
зваÑоÑÐ°Ñ Ð´Ð° паÑÑеÑа.\n\nТÑÑба, каб зваÑоÑÐ°Ñ Ð±Ñло меней за $2, а заÑаз ÑÑÑÑ $1.",
"expensive-parserfunction-category": "СÑаÑонкÑ, дзе ÑÐ¼Ð°Ñ Ð¿ÑаÑаÑмÑÑÑÑÑ
зваÑоÑÐ°Ñ Ð´Ð° паÑÑеÑа",
"post-expand-template-inclusion-warning": "Увага: аб'Ñм ÑлÑÑанага Ñаблона занадÑа вÑлÑкÑ.\nÐекаÑоÑÑÑ ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð½Ðµ бÑдÑÑÑ ÑлÑÑанÑÑ.",
@@ -787,7 +822,7 @@
"revdelete-legend": "ÐаÑÑÑоÑÑÑ Ð°Ð±Ð¼ÐµÐ¶Ð°Ð²Ð°Ð½Ð½Ñ Ð±Ð°ÑнаÑÑÑ",
"revdelete-hide-text": "ТÑкÑÑ Ð²ÐµÑÑÑÑ",
"revdelete-hide-image": "СÑ
аваÑÑ Ð·Ð¼ÐµÑÑ Ñайла",
- "revdelete-hide-name": "Ðе паказваÑÑ Ð´Ð·ÐµÑÐ½Ð½Ñ Ñ Ð¼ÑÑÑ",
+ "revdelete-hide-name": "Ðе паказваÑÑ Ð¼ÑÑÑ Ñ Ð¿Ð°ÑамеÑÑÑ",
"revdelete-hide-comment": "ТлÑмаÑÑнне пÑаÑкÑ",
"revdelete-hide-user": "ÐÐ¼Ñ ÑдзелÑнÑка /адÑÐ°Ñ IP",
"revdelete-hide-restricted": "ТакÑама абмÑжоÑваÑÑ ÑакÑм ÑÑнам адмÑнÑÑÑÑаÑаÑаÑ",
@@ -800,7 +835,7 @@
"revdelete-submit": "ÐÑÑмÑнÑÑÑ Ð´Ð° азнаÑан{{PLURAL:$1|ай еÑÑÑÑ|ÑÑ
веÑÑÑй}}",
"revdelete-success": "ÐаÑпÑÑ
ова абноÑлена баÑнаÑÑÑ Ð²ÐµÑÑÑÑ.",
"revdelete-failure": "'''Ðе ÑдалоÑÑ Ð°Ð±Ð½Ð°Ð²ÑÑÑ Ð±Ð°ÑнаÑÑÑ Ð²ÐµÑÑÑÑ:'''\n$1",
- "logdelete-success": "'''ÐаÑнаÑÑÑ Ð¿Ð°Ð´Ð·ÐµÑ Ð½Ð°ÑÑаÑÐ»ÐµÐ½Ð°Ñ Ð¿Ð°ÑпÑÑ
ова.'''",
+ "logdelete-success": "ÐаÑнаÑÑÑ Ð¿Ð°Ð´Ð·ÐµÑ Ð½Ð°ÑÑаÑÐ»ÐµÐ½Ð°Ñ Ð¿Ð°ÑпÑÑ
ова.",
"logdelete-failure": "'''ÐаÑнаÑÑÑ Ð¶ÑÑнала не ÑÑÑалÑвана:'''\n$1",
"revdel-restore": "памÑнÑÑÑ Ð±Ð°ÑнаÑÑÑ",
"pagehist": "ÐÑÑÑоÑÑÑ ÑÑаÑонкÑ",
@@ -863,6 +898,8 @@
"notextmatches": "ÐÑÑога не знойдзена Ñ ÑÑкÑÑаÑ
ÑÑаÑонак",
"prevn": "папÑÑÑдн. {{PLURAL:$1|$1}}",
"nextn": "наÑÑÑп. {{PLURAL:$1|$1}}",
+ "prev-page": "папÑÑÑднÑÑ ÑÑаÑонка",
+ "next-page": "наÑÑÑÐ¿Ð½Ð°Ñ ÑÑаÑонка",
"prevn-title": "ÐапÑÑÑднÑ{{PLURAL:$1| вÑнÑк|Ñ $1 вÑнÑкÑ(аÑ)}}",
"nextn-title": "ÐаÑÑÑпнÑ{{PLURAL:$1| вÑнÑк|Ñ $1 вÑнÑкÑ(аÑ)}}",
"shown-title": "ÐаказваÑÑ $1 {{PLURAL:$1|вÑнÑк|вÑнÑкÑ(аÑ)}} на ÑÑаÑонкÑ",
@@ -881,8 +918,10 @@
"search-result-category-size": "{{PLURAL:$1|$1 ÑлеменÑ|$1 ÑлеменÑа|$1 ÑлеменÑаÑ}} ({{PLURAL:$2|$2 падкаÑÑгоÑÑÑ|$2 падкаÑÑгоÑÑÑ|$2 падкаÑÑгоÑÑй}}, {{PLURAL:$3|$3 Ñайл|$3 Ñайла|$3 ÑайлаÑ}})",
"search-redirect": "(пеÑаÑÑлка $1)",
"search-section": "(падÑаздзел $1)",
+ "search-category": "(каÑÑгоÑÑÑ $1)",
"search-file-match": "(адпавÑдае змеÑÑÑÐ²Ñ Ñайла)",
"search-suggest": "Ð¦Ñ Ñ
аÑÐµÐ»Ñ Ð²Ñ ÑказаÑÑ: $1",
+ "search-rewritten": "ÐÐ°ÐºÐ°Ð·Ð°Ð½Ñ Ð²ÑнÑÐºÑ Ð´Ð»Ñ $1. ÐамеÑÑ Ð³ÑÑага ÑÑкаÑÑ $2.",
"search-interwiki-caption": "СÑмежнÑÑ Ð¿ÑаекÑÑ",
"search-interwiki-default": "ÐÑнÑÐºÑ Ð· $1:",
"search-interwiki-more": "(ÑÑÑÑ)",
@@ -921,7 +960,7 @@
"prefs-watchlist-token": "СакÑÑÑÐ½Ñ ÐºÐ»ÑÑ Ð´Ð»Ñ RSS:",
"prefs-misc": "Рознае",
"prefs-resetpass": "ÐмÑнÑÑÑ Ð¿Ð°ÑолÑ",
- "prefs-changeemail": "ÐмÑнÑÑÑ e-mail",
+ "prefs-changeemail": "ÐмÑнÑÑÑ Ð°Ð±Ð¾ вÑдалÑÑÑ Ð°Ð´ÑÐ°Ñ ÑлекÑÑоннай поÑÑÑ",
"prefs-setemail": "УÑÑаноÑка ÑлекÑÑоннага адÑаÑа",
"prefs-email": "Ðл.поÑÑа",
"prefs-rendering": "ÐÑд",
@@ -931,7 +970,8 @@
"rows": "РадкÑ:",
"columns": "ÐалонкÑ:",
"searchresultshead": "ÐоÑÑк",
- "stub-threshold": "ÐаÑог Ð´Ð»Ñ Ð¿Ð°ÐºÐ°Ð·Ñ ÑпаÑÑлкÑ
Ñк на паÑаÑÐºÐ¾Ð²Ñ Ð°ÑÑÑкÑл (Ñ Ð±Ð°Ð¹ÑаÑ
):",
+ "stub-threshold": "ÐаÑог Ð´Ð»Ñ Ð¿Ð°ÐºÐ°Ð·Ñ ÑпаÑÑÐ»ÐºÑ Ñк на паÑаÑÐºÐ¾Ð²Ñ Ð°ÑÑÑкÑл ($1):",
+ "stub-threshold-sample-link": "пÑÑклад",
"stub-threshold-disabled": "Ðе ÑклÑÑана",
"recentchangesdays": "Ðа колÑÐºÑ Ð´Ð·Ñн паказваÑÑ {{lc:{{:{{ns:mediawiki}}:recentchanges/be}}}}:",
"recentchangesdays-max": "(найболÑÑ $1 {{PLURAL:$1|дзенÑ|дзÑн}})",
@@ -1008,10 +1048,10 @@
"userrights": "РаÑпаÑаджÑнне пÑÐ°Ð²Ð°Ð¼Ñ ÑдзелÑнÑка",
"userrights-lookup-user": "РаÑпаÑаджаÑÑа гÑÑÐ¿Ð°Ð¼Ñ ÑдзелÑнÑкаÑ",
"userrights-user-editname": "УвÑдзÑÑе ÑÐ¼Ñ ÑдзелÑнÑка:",
- "editusergroup": "ÐÑавÑÑÑ Ð³ÑÑÐ¿Ñ ÑдзелÑнÑкаÑ",
- "editinguser": "Ðмена пÑÐ°Ñ ÑдзелÑнÑка '''[[User:$1|$1]]''' $2",
+ "editusergroup": "ÐÑавÑÑÑ Ð³ÑÑÐ¿Ñ {{GENDER:$1|ÑдзелÑнÑкаÑ|ÑдзелÑнÑÑ}}",
+ "editinguser": "Ðмена пÑÐ°Ñ {{GENDER:$1|ÑдзелÑнÑка|ÑдзелÑнÑÑÑ}}
[[User:$1|$1]] $2",
"userrights-editusergroup": "РаÑпаÑаджаÑÑа гÑÑÐ¿Ð°Ð¼Ñ ÑдзелÑнÑка",
- "saveusergroups": "ÐаÑ
аваÑÑ Ð³ÑÑÐ¿Ñ ÑдзелÑнÑкаÑ",
+ "saveusergroups": "ÐаÑ
аваÑÑ Ð³ÑÑÐ¿Ñ {{GENDER:$1|ÑдзелÑнÑкаÑ|ÑдзелÑнÑÑ}}",
"userrights-groupsmember": "У гÑÑпе:",
"userrights-groupsmember-auto": "ÐÑÑÑÐ½Ñ Ñлен:",
"userrights-groups-help": "ТÑÑ Ð¼Ð¾Ð¶Ð½Ð° мÑнÑÑÑ Ð³ÑÑпÑ, да ÑкÑÑ
належÑÑÑ Ð³ÑÑÑ ÑдзелÑнÑк.\n* ÐдзнаÑанае поле вÑбаÑÑ Ð°Ð·Ð½Ð°Ñае ÑваÑ
оджанне ÑдзелÑнÑка Ñ Ð¿ÑÑнÑÑ Ð³ÑÑпÑ.\n* ЧÑÑÑае поле вÑбаÑÑ Ð°Ð·Ð½Ð°Ñае неÑваÑ
оджанне.\n* Ðнак * азнаÑае, ÑÑо нелÑга вÑнÑÑÑ ÑдзелÑнÑка з гÑÑпÑ, ÐºÐ°Ð»Ñ Ñн Ñжо Ñам, або наадваÑоÑ.",
@@ -1023,7 +1063,7 @@
"userrights-changeable-col": "ÐÑÑпÑ, ÑкÑÑ Ð²Ð°Ð¼ дазволена мÑнÑÑÑ",
"userrights-unchangeable-col": "ÐÑÑпÑ, ÑкÑÑ Ð²Ð°Ð¼ не дазволена мÑнÑÑÑ",
"userrights-conflict": "ÐанÑлÑÐºÑ Ð·Ð¼ÑÐ½ÐµÐ½Ð½Ñ ÑдзелÑнÑÑкÑÑ
дазволаÑ! ÐÐ°Ð»Ñ Ð»Ð°Ñка, пÑавеÑÑе Ñ Ð¿Ð°ÑвеÑдзÑÑе зменÑ.",
- "userrights-removed-self": "ÐÑ Ð¿Ð°ÑпÑÑ
ова вÑдалÑÐ»Ñ Ñвае ÑлаÑнÑÑ Ð¿ÑавÑ. ТакÑм ÑÑнам, ÐÑ Ð±Ð¾Ð»ÑÑ Ð½Ðµ зможаÑе аÑÑÑмаÑÑ Ð´Ð¾ÑÑÑп да гÑÑай ÑÑаÑонкÑ.",
+ "userrights-removed-self": "ÐÑ Ð²ÑдалÑÐ»Ñ Ñвае ÑлаÑнÑÑ Ð¿ÑавÑ. ТакÑм ÑÑнам, ÐÑ Ð±Ð¾Ð»ÑÑ Ð½Ðµ зможаÑе аÑÑÑмаÑÑ Ð´Ð¾ÑÑÑп да гÑÑай ÑÑаÑонкÑ.",
"group": "ÐÑÑпа:",
"group-user": "УдзелÑнÑкÑ",
"group-autoconfirmed": "ÐÑÑа-паÑвеÑджанÑÑ ÑдзелÑнÑкÑ",
@@ -1171,7 +1211,7 @@
"recentchanges-label-bot": "ÐÑаÑка зÑоблена пÑагÑамай-ÑобаÑам",
"recentchanges-label-unpatrolled": "ÐÑаÑка ÑÑÑÑ Ð½Ðµ аÑÑÑмала Ð°Ð´Ð·Ð½Ð°ÐºÑ ÑÑ
валенаÑÑÑ (за Ñй не ÑоÑÑÑÑ \"паÑÑÑлÑ\")",
"recentchanges-label-plusminus": "Ðб'Ñм ÑÑаÑÐ¾Ð½ÐºÑ Ð·Ð¼ÑнÑÑÑÑ Ð½Ð° гÑÑÑÑ Ð»ÑÑÐ±Ñ Ð±Ð°Ð¹ÑаÑ",
- "recentchanges-legend-heading": "'''Ðегенда:'''",
+ "recentchanges-legend-heading": "
Ðегенда: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (гл. аÑобна [[Special:NewPages|новÑÑ ÑÑаÑонкÑ]])",
"rcnotefrom": "ÐÑжÑй {{PLURAL:$5|паказана змÑненне|Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ Ð·Ð¼ÐµÐ½Ñ}} з
$3, $4 (не болÑÑ Ð·Ð°
$1 ).",
"rclistfrom": "ÐаказаÑÑ Ð·Ð¼ÐµÐ½Ñ Ð· $3 $2",
@@ -1202,7 +1242,7 @@
"newpageletter": "Ð",
"boteditletter": "Ñ",
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назÑÑалÑнÑк|назÑÑалÑнÑкÑ|назÑÑалÑнÑкаÑ}}]",
- "rc_categories": "ÐбмежаваÑÑ ÐºÐ°ÑÑгоÑÑÑÐ¼Ñ (ÑазмÑжоÑваÑÑ Ð·Ð½Ð°ÐºÐ°Ð¼ \"|\")",
+ "rc_categories": "ÐбмежаваÑÑ ÐºÐ°ÑÑгоÑÑÑÐ¼Ñ (ÑазмÑжоÑваÑÑ Ð·Ð½Ð°ÐºÐ°Ð¼ \"|\"):",
"rc_categories_any": "УÑе",
"rc-change-size-new": "$1 {{PLURAL:$1|байÑ|байÑÑ|байÑаÑ}} паÑÐ»Ñ Ð·Ð¼ÐµÐ½Ñ",
"newsectionsummary": "/* $1 */ Ð½Ð¾Ð²Ñ Ð¿Ð°Ð´Ñаздзел",
@@ -1227,9 +1267,9 @@
"uploaderror": "ÐамÑлка пÑÑ ÑкладаннÑ",
"upload-recreate-warning": "'''Увага''': Ñайл з ÑакÑм Ñмем бÑÑ Ð²ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð°Ð±Ð¾ пеÑамеÑÑанÑ.''' \n\nÐÑÑнал вÑÐ´Ð°Ð»ÐµÐ½Ð½Ñ Ñ Ð¿ÐµÑамÑÑÑÑÐ½Ð½Ñ Ð³ÑÑай ÑÑаÑÐ¾Ð½ÐºÑ Ð¿ÑÑводзÑÑÑа ÑÑÑ Ð´Ð»Ñ Ð·ÑÑÑнаÑÑÑ:",
"uploadtext": "ТÑÑ Ð¼Ð¾Ð¶Ð½Ð° ÑклаÑÑÑ ÑÐ°Ð¹Ð»Ñ Ñ Ð²ÑкÑ.\nÐÑаглÑд або поÑÑк Ñаней Ñкладзенага [[Special:FileList|ÑобÑÑÑа ÑÑÑ]]; апÑÐ¾Ñ Ñаго, ÑÑе ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ Ñ ÑÑÑÑÐ°Ð½Ð½Ñ Ð°Ð´Ð·Ð½Ð°ÑаÑÑÑа Ñ Ð¶ÑÑналаÑ
[[Special:Log/upload|ÑкладаннÑ]] Ñ [[Special:Log/delete|ÑÑÑÑаннÑ]], адпаведна.\n\nÐаб ÑÑÑавÑÑÑ Ñайл Ñ ÑÑаÑонкÑ, ÑжÑваеÑÑа ÑпаÑÑлка, зÑÐ¾Ð±Ð»ÐµÐ½Ð°Ñ Ð°Ð´Ð½Ñм з наÑÑÑпнÑÑ
ÑпоÑабаÑ:\n* '''
[[ image:File.jpg]]
''' паказвае Ñайл Ñ Ð¿Ð¾ÑнÑм памеÑÑ\n* '''
[[ image:File.png|200px|thumb|left|ÑлÑмаÑалÑÐ½Ñ ÑÑкÑÑ]]
''' паказвае Ñайл, маÑÑÐ°Ð±Ð°Ð²Ð°Ð½Ñ Ð´Ð° ÑÑÑÑÐ½Ñ 200 кÑопак, Ñ ÑамÑÑ, змеÑÑанай злева, Ñ Ð· 'ÑлÑмаÑалÑнÑм ÑÑкÑÑам' Ñ ÑкаÑÑÑ Ð¿Ð¾Ð´Ð¿ÑÑÑ\n* '''
[[ media:File.ogg]]
''' не паказвае Ñамога Ñайла, а ÑолÑÐºÑ ÑпаÑÑÐ»ÐºÑ Ð½Ð° Ñго",
- "upload-permitted": "ÐазволенÑÑ ÑÑÐ¿Ñ ÑайлаÑ: $1.",
- "upload-preferred": "ÐолÑÑ Ð¿ÑÑмалÑнÑÑ ÑÑÐ¿Ñ ÑайлаÑ: $1.",
- "upload-prohibited": "ÐабаÑоненÑÑ ÑÑÐ¿Ñ ÑайлаÑ: $1.",
+ "upload-permitted": "{{PLURAL:$2|ÐÐ°Ð·Ð²Ð¾Ð»ÐµÐ½Ñ ÑÑп|ÐазволенÑÑ ÑÑпÑ}} ÑайлаÑ: $1.",
+ "upload-preferred": "ÐолÑÑ {{PLURAL:$2|пÑÑмалÑÐ½Ñ ÑÑп|пÑÑмалÑнÑÑ ÑÑпÑ}} ÑайлаÑ: $1.",
+ "upload-prohibited": "{{PLURAL:$2|ÐабаÑÐ¾Ð½ÐµÐ½Ñ ÑÑп|ÐабаÑоненÑÑ ÑÑпÑ}} ÑайлаÑ: $1.",
"uploadlogpage": "ÐÑÑнал ÑкладаннÑÑ",
"uploadlogpagetext": "ÐÑжÑй Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ ÑпÑÑ [[Special:NewFiles|нÑдаÑна ÑкладзенÑÑ
]] ÑайлаÑ.",
"filename": "Ðазва Ñайла",
@@ -1306,7 +1346,17 @@
"upload-too-many-redirects": "ÐанадÑа ÑÐ¼Ð°Ñ Ð¿ÐµÑаÑÑлак за гÑÑÑм адÑаÑам (URL)",
"upload-http-error": "ÐамÑлка HTTP: $1",
"upload-copy-upload-invalid-domain": "ÐапÑÑаванне загÑÑзак не дазволенае Ñ Ð³ÑÑÑм дамене.",
+ "upload-dialog-button-cancel": "ÐÑÑога",
+ "upload-dialog-button-done": "ÐаÑова",
+ "upload-dialog-button-save": "ÐапÑÑаÑÑ",
+ "upload-dialog-button-upload": "УклаÑÑÑ",
+ "upload-form-label-infoform-title": "ÐадÑабÑзнаÑÑÑ",
+ "upload-form-label-infoform-name": "Ðазва",
"upload-form-label-infoform-description": "ÐпÑÑанне",
+ "upload-form-label-usage-title": "ÐÑкаÑÑÑÑанне",
+ "upload-form-label-usage-filename": "Ðазва Ñайла",
+ "foreign-structured-upload-form-label-own-work": "ÐÑÑа Ð¼Ð°Ñ ÑлаÑÐ½Ð°Ñ Ð¿ÑаÑа",
+ "foreign-structured-upload-form-label-infoform-categories": "ÐаÑÑгоÑÑÑ",
"foreign-structured-upload-form-label-infoform-date": "ÐаÑа",
"backend-fail-stream": "Ðе аÑÑÑмалаÑÑ ÑÑанÑлÑваÑÑ Ñайл $1.",
"backend-fail-backup": "ÐемагÑÑма зÑабÑÑÑ ÑÑзеÑвнÑÑ ÐºÐ¾Ð¿ÑÑ $1.",
@@ -1326,7 +1376,7 @@
"backend-fail-read": "Ðе аÑÑÑмалаÑÑ Ð¿ÑаÑÑÑаÑÑ Ñайл $1.",
"backend-fail-create": "ÐемагÑÑма запÑÑаÑÑ Ñайл \"$1\".",
"backend-fail-maxsize": "ÐемагÑÑма запÑÑаÑÑ Ñайл \"$1\", ÑÐ°Ð¼Ñ ÑÑо Ñн болÑÑÑ Ð·Ð° {{PLURAL:$2|адзÑн байÑ|$2 байÑÑ|$2 байÑаÑ}}.",
- "backend-fail-readonly": "СеÑÐ²ÐµÑ ÑÑ
овÑÑÑа «$1» Ñ ÑÑжÑме ÑолÑÐºÑ ÑÑÑаннÑ. ÐÑÑÑÑна: «$2»",
+ "backend-fail-readonly": "СеÑÐ²ÐµÑ ÑÑ
овÑÑÑа «$1» Ñ ÑÑжÑме ÑолÑÐºÑ ÑÑÑаннÑ. ÐÑÑÑÑна:
$2 ",
"backend-fail-synced": "СÑан Ñайла «$1» адÑознÑваеÑÑа ад ÑÑÐ°Ð½Ñ Ð½Ð° ÑнÑÑÑанÑм ÑеÑвеÑÑ ÑÑ
овÑÑÑа",
"backend-fail-connect": "ÐемагÑÑма далÑÑÑÑÑа да ÑеÑвеÑа ÑÑ
овÑÑÑа «$1».",
"backend-fail-internal": "УзнÑкла невÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñлка на ÑеÑвеÑÑ ÑÑ
овÑÑÑа «$1».",
@@ -1477,6 +1527,7 @@
"randomincategory-nopages": "ÐÑма ÑÑаÑонак Ñ ÐºÐ°ÑÑгоÑÑÑ [[:Category:$1|$1]].",
"randomincategory-category": "ÐаÑÑгоÑÑÑ:",
"randomincategory-legend": "ÐÑÐ¿Ð°Ð´ÐºÐ¾Ð²Ð°Ñ ÑÑаÑонка Ñ ÐºÐ°ÑÑгоÑÑÑ",
+ "randomincategory-submit": "ÐеÑайÑÑÑ",
"randomredirect": "ÐÑÐ¿Ð°Ð´ÐºÐ¾Ð²Ð°Ñ Ð¿ÐµÑаÑÑлка",
"randomredirect-nopages": "ÐÑма пеÑаÑÑлак Ñ Ð¿ÑаÑÑоÑÑ Ð½Ð°Ð·Ð²Ð°Ñ \"$1\".",
"statistics": "СÑаÑÑÑÑÑка",
@@ -1593,19 +1644,29 @@
"pager-older-n": "{{PLURAL:$1|1 ÑÑаÑÑйÑаÑ|$1 ÑÑаÑÑйÑÑÑ}}",
"suppress": "ÐадавÑÑÑ",
"querypage-disabled": "ÐÑÑа адмÑÑÐ»Ð¾Ð²Ð°Ñ ÑÑаÑонка адклÑÑана Ð´Ð»Ñ Ð¿Ð°Ð²ÑÑÑÐ½Ð½Ñ Ð¿ÑадÑкÑÑйнаÑÑÑ.",
+ "apihelp": "Ðаведка па API",
+ "apihelp-no-such-module": "ÐодÑÐ»Ñ \"$1\" не знойдзенÑ.",
+ "apisandbox-submit": "ÐÑабÑÑÑ Ð·Ð°Ð¿ÑÑ",
+ "apisandbox-reset": "ÐÑÑÑÑÑÑÑ",
+ "apisandbox-retry": "ÐаÑÑаÑÑÑÑ",
+ "apisandbox-examples": "ÐÑÑкладÑ",
+ "apisandbox-dynamic-parameters": "ÐадаÑковÑÑ Ð¿Ð°ÑамеÑÑÑ",
+ "apisandbox-dynamic-parameters-add-label": "ÐадаÑÑ Ð¿Ð°ÑамеÑÑ:",
"booksources": "ÐнÑгÑ",
"booksources-search-legend": "ÐнайÑÑÑ, дзе кÑпÑÑÑ ÐºÐ½ÑгÑ",
"booksources-search": "ÐоÑÑк",
"booksources-text": "ÐÑжÑй Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ Ð¿ÐµÑалÑк ÑпаÑÑлак на ÑнÑÑÑ ÑеÑÑÑнÑÑ Ð¿Ð»ÑÑоÑкÑ, ÑкÑÑ Ð¿ÑадаÑÑÑ Ð½Ð¾Ð²ÑÑ Ñ Ð±/Ñ ÐºÐ½ÑгÑ, Ñ, магÑÑма, маÑÑÑ Ð±Ð¾Ð»ÑÑ Ð·Ð²ÐµÑÑак пÑа кнÑгÑ, ÑкÑÑ
Ð²Ñ ÑÑкаеÑе:",
"booksources-invalid-isbn": "ÐÑÑÑ ISBN не вÑглÑдае пÑавÑлÑнÑм; пÑавеÑÑе пÑавÑлÑнаÑÑÑ ÐºÐ°Ð¿ÑÑÐ°Ð²Ð°Ð½Ð½Ñ Ð· аÑÑгÑналÑ.",
"specialloguserlabel": "ÐÑканаÑÑа:",
- "speciallogtitlelabel": "ÐÑÑа (назва ÑÑ ÑдзелÑнÑк):",
+ "speciallogtitlelabel": "ÐÑÑа (назва ÑÑ {{ns:user}}:ÑмÑ_ÑдзелÑнÑка Ð´Ð»Ñ ÑдзелÑнÑка):",
"log": "ÐÑÑналÑ",
+ "logeventslist-submit": "ÐаказаÑÑ",
"all-logs-page": "УÑе пÑблÑÑнÑÑ Ð¶ÑÑналÑ",
"alllogstext": "СÑполÑÐ½Ñ Ð¿Ð°ÐºÐ°Ð· ÑÑÑÑ
магÑÑмÑÑ
жÑÑÐ½Ð°Ð»Ð°Ñ Ð½Ð° плÑÑоÑÑÑ {{SITENAME}}.\nÐожна звÑзÑÑÑ Ð°Ð±'Ñм паказÑ, вÑбÑÑаÑÑÑ ÑÑп жÑÑнала, ÑÐ¼Ñ ÑдзелÑнÑка (з ÑлÑкам ÑÑгÑÑÑÑÑ Ð»ÑÑаÑ) або ÑÑаÑÐ¾Ð½ÐºÑ (ÑакÑама з ÑлÑкам ÑÑгÑÑÑÑÑ).",
"logempty": "ÐÑÑога адпаведнага Ñ Ð¶ÑÑнале не знойдзена.",
"log-title-wildcard": "ÐнайÑÑÑ Ð½Ð°Ð·Ð²Ñ, ÑкÑÑ Ð¿Ð°ÑÑнаÑÑÑа з гÑÑага ÑÑкÑÑÑ",
"showhideselectedlogentries": "ÐаказаÑÑ/ÑÑ
аваÑÑ Ð²ÑбÑанÑÑ Ð·Ð°Ð¿ÑÑÑ Ð¶ÑÑнала",
+ "checkbox-all": "УÑе",
"allpages": "УÑе ÑÑаÑонкÑ",
"nextpage": "ÐаÑÑÑÐ¿Ð½Ð°Ñ ÑÑаÑонка ($1)",
"prevpage": "ÐапÑÑÑднÑÑ ÑÑаÑонка ($1)",
@@ -1756,11 +1817,12 @@
"deletepage": "СÑеÑÑÑ ÑÑаÑонкÑ",
"confirm": "ÐаÑвеÑдзÑÑÑ",
"excontent": "ÑÑкÑÑ Ð±ÑÑ: '$1'",
- "excontentauthor": "ÑÑкÑÑ Ð±ÑÑ: '$1' (Ñ Ð°Ð´Ð·ÑÐ½Ñ Ð°ÑÑаÑ: '[[Special:Contributions/$2|$2]]')",
+ "excontentauthor": "ÑÑкÑÑ Ð±ÑÑ: '$1' (Ñ Ð°Ð´Ð·ÑÐ½Ñ Ð°ÑÑаÑ: \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|ÑазмовÑ]]))",
"exbeforeblank": "змеÑÑÑва пеÑад аÑÑÑÑÐºÐ°Ñ Ð±Ñло: '$1'",
"delete-confirm": "СÑеÑÑÑ \"$1\"",
"delete-legend": "СÑеÑÑÑ",
"historywarning": "
Увага: СÑаÑонка, ÑкÑÑ Ð²Ñ Ñ
оÑаÑе ÑÑеÑÑÑ, мае гÑÑÑоÑÑÑ Ð· пÑÑблÑзна $1 {{PLURAL:$1|пÑаÑкÑ|пÑавак}}:",
+ "historyaction-submit": "ÐаказаÑÑ",
"confirmdeletetext": "ÐÑ Ð·Ð±ÑÑаеÑеÑÑ ÑÑеÑÑÑ ÑÑаÑÐ¾Ð½ÐºÑ Ñазам з ÑÑлай Ñе гÑÑÑоÑÑÑй пÑавак.\nÐаÑвеÑдзÑÑе Ñвой Ð½Ð°Ð¼ÐµÑ Ð·ÑабÑÑÑ Ð³ÑÑа, ÑÐ²Ð°Ñ ÑазÑменне наÑÑÑпÑÑваÑ, Ñ ÑÑо Ð²Ñ ÑобÑÑе гÑÑа Ñ Ð°Ð´Ð¿Ð°Ð²ÐµÐ´Ð½Ð°ÑÑÑ Ð· [[{{MediaWiki:Policy-url}}|палÑÑÑкай (аÑноÑнÑÐ¼Ñ Ð¿ÑавÑламÑ)]].",
"actioncomplete": "ÐавеÑÑана апеÑаÑÑÑ",
"actionfailed": "ÐамÑлка дзеÑннÑ",
@@ -1777,7 +1839,7 @@
"delete-toobig": "СÑаÑонка мае вÑлÑкÑÑ Ð³ÑÑÑоÑÑÑ Ð¿Ñавак, болÑÑ Ð·Ð° $1 {{PLURAL:$1|веÑÑÑÑ|веÑÑÑй}}. СÑÑÑанне ÑакÑÑ
ÑÑаÑонак бÑло абмежавана, каб пазбегÑÑ ÑÑваÑÑÐ½Ð½Ñ Ð²ÑпадковÑÑ
пеÑаÑкод пÑаÑÑ {{SITENAME}}.",
"delete-warning-toobig": "СÑаÑонка мае вÑлÑкÑÑ Ð³ÑÑÑоÑÑÑ Ð¿Ñавак, болÑÑ Ð·Ð° $1 {{PLURAL:$1|веÑÑÑÑ|веÑÑÑй}}. СÑÑÑанне ÑакÑÑ
ÑÑаÑонак можа пеÑаÑкодзÑÑÑ Ð¿ÑаÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½ÑÑ
{{SITENAME}}; бÑдзÑÑе аÑÑÑÑожнÑмÑ.",
"deleteprotected": "ÐÑ Ð½Ðµ можаÑе ÑÑеÑÑÑ Ð³ÑÑÑÑ ÑÑаÑонкÑ, ÑÐ°Ð¼Ñ ÑÑо Ñна аÑ
оÑваеÑÑа.",
- "deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ÐнÑÑÑ ÑÑаÑонкÑ]] ÑпаÑÑлаÑÑÑа на ÑÑ ÑклÑÑаÑÑÑ ÑÑаÑонкÑ, ÑкÑÑ Ð²Ñ Ð·Ð±ÑÑаеÑеÑÑ ÑÑеÑÑÑ.",
+ "deleting-backlinks-warning": "
Увага: [[Special:WhatLinksHere/{{FULLPAGENAME}}|ÐнÑÑÑ ÑÑаÑонкÑ]] ÑпаÑÑлаÑÑÑа на ÑÑ ÑклÑÑаÑÑÑ ÑÑаÑонкÑ, ÑкÑÑ Ð²Ñ Ð·Ð±ÑÑаеÑеÑÑ ÑÑеÑÑÑ.",
"rollback": "ÐдкаÑÑÑÑ Ð¿ÑаÑкÑ",
"rollbacklink": "адкаÑ",
"rollbacklinkcount": "адкаÑÑÑÑ $1 {{PLURAL:$1|пÑаÑкÑ|пÑаÑкÑ|пÑавак}}",
@@ -1791,6 +1853,7 @@
"rollback-success": "ÐдкоÑÐ°Ð½Ñ Ð¿ÑаÑÐºÑ $1; веÑнÑÑа апоÑнÑÑ Ð²ÐµÑÑÑÑ $2.",
"sessionfailure-title": "ÐамÑлка ÑеанÑÑ",
"sessionfailure": "ÐагÑÑма, ÑÑÑÑ Ð¿ÑÐ°Ð±Ð»ÐµÐ¼Ñ Ð· ваÑÑм ÑеанÑам пÑаÑÑ Ñ ÑÑÑÑÑме. Ð¢Ð°Ð¼Ñ Ð²Ð°Ð¼ бÑло адмоÑлена Ñ Ð²ÑÐºÐ°Ð½Ð°Ð½Ð½Ñ Ð´Ð·ÐµÑннÑ, каб заÑÑеÑагÑÑÑÑ Ð°Ð´ заÑ
Ð¾Ð¿Ñ ÑеанÑа.\n\nÐÑÑнÑÑеÑÑ Ð½Ð° папÑÑÑднÑÑ ÑÑаÑонкÑ, пеÑазагÑÑзÑÑе Ñе Ñ ÑÐ°Ð´Ñ Ð¿Ð°ÑпÑабÑйÑе зноÑ.",
+ "changecontentmodel-reason-label": "ÐÑÑÑÑна:",
"protectlogpage": "ÐÑÑнал аÑ
овÑ",
"protectlogtext": "ÐÑжÑй пÑÑÐ²ÐµÐ´Ð·ÐµÐ½Ñ Ð¶ÑÑнал змен абаÑÐ¾Ð½Ñ ÑÑаÑонкÑ.\nÐÑ Ð¼Ð¾Ð¶Ð°Ñе ÑакÑама пÑагледзеÑÑ [[Special:ProtectedPages|пеÑалÑк ÑÑаÑонак пад аÑ
овай]].",
"protectedarticle": "пад аÑ
овай «[[$1]]»",
@@ -1852,7 +1915,7 @@
"undeletepagetext": "ÐаÑÑÑпн{{PLURAL:$1|Ð°Ñ ÑÑаÑонка бÑла ÑÑÑÑÑаÑ, але заÑÑаеÑÑа Ñ Ð°ÑÑ
Ñве Ñ Ð¼Ð¾Ð¶Ð° бÑÑÑ Ð°Ð´Ð½Ð¾ÑленаÑ|ÑÑ $1 ÑÑаÑÐ¾Ð½ÐºÑ Ð±ÑÐ»Ñ ÑÑÑÑÑÑÑ, але заÑÑаÑÑÑа Ñ Ð°ÑÑ
Ñве Ñ Ð¼Ð¾Ð³ÑÑÑ Ð±ÑÑÑ Ð°Ð´Ð½Ð¾ÑленÑ}}\nÐÑÑ
ÑÑ Ð¼Ð¾Ð¶Ð° пеÑÑÑдÑÑна аÑÑÑÑаÑÑа.",
"undelete-fieldset-title": "ÐднавÑÑÑ Ð²ÐµÑÑÑÑ",
"undeleteextrahelp": "ÐÐ»Ñ Ð¿Ð¾Ñнага аднаÑÐ»ÐµÐ½Ð½Ñ Ð³ÑÑÑоÑÑÑ ÑÑаÑÐ¾Ð½ÐºÑ Ð¿Ð°ÐºÑнÑÑе ÑÑе Ð°Ð´Ð·Ð½Ð°ÐºÑ Ð¿ÑÑÑÑÐ¼Ñ Ñ Ð½Ð°ÑÑÑнÑÑе '''«{{int:undeletebtn}}»'''. ÐÐ»Ñ ÑаÑÑковага аднаÑленнÑ, пазнаÑÑе ÑÑÑ Ð²ÐµÑÑÑÑ ÑÑаÑонкÑ, ÑкÑÑ ÑÑÑба аднавÑÑÑ, Ñ Ð½Ð°ÑÑÑнÑÑе '''«{{int:undeletebtn}}»'''.",
- "undeleterevisions": "$1 {{PLURAL:$1|веÑÑÑÑ|веÑÑÑй}} з аÑÑ
ÑвÑ",
+ "undeleterevisions": "$1 {{PLURAL:$1|веÑÑÑÑ|веÑÑÑй}} ÑÑÑÑÑа",
"undeletehistory": "ÐÐ°Ð»Ñ Ð°Ð´Ð½Ð°Ð²ÑÑÑ ÑÑаÑонкÑ, Ñо Ñ Ñе гÑÑÑоÑÑÑ Ð¿Ñавак веÑнÑÑÑа ÑÑе Ñе веÑÑÑÑ.\nÐÐ°Ð»Ñ Ð¿Ð°ÑÐ»Ñ ÑÑÑÑÐ°Ð½Ð½Ñ ÑÑваÑалаÑÑ Ð½Ð¾Ð²Ð°Ñ ÑÑаÑонка з Ñакой Ñамай назвай, Ñо адноÑленÑÑ Ð²ÐµÑÑÑÑ Ð·'ÑвÑÑÑа Ñ Ñе гÑÑÑоÑÑÑ Ð¿ÐµÑад ÑаÑам ÑÑваÑÑÐ½Ð½Ñ Ð½Ð¾Ð²Ð°Ð¹ ÑÑаÑонкÑ.",
"undeleterevdel": "ÐднаÑленне не бÑдзе вÑконваÑÑа, ÐºÐ°Ð»Ñ Ñ Ñго вÑнÑÐºÑ Ð±Ñла б ÑаÑÑкова ÑÑÑÑÑÐ°Ñ Ð½Ð°Ð¹Ð½Ð¾ÑÑÐ°Ñ Ð²ÐµÑÑÑÑ ÑÑаÑÐ¾Ð½ÐºÑ Ð°Ð±Ð¾ Ñайла. У ÑакÑÑ
вÑпадкаÑ
ÑÑÑба знÑÑÑ Ð²ÑÐ±Ð°Ñ Ð· ÑамÑÑ
нÑдаÑнÑÑ
ÑÑÑÑÑÑÑ
веÑÑÑй або дазволÑÑÑ ÑÑ
паказ.",
"undeletehistorynoadmin": "ÐÑÑÐ°Ñ ÑÑаÑонка бÑла ÑÑÑÑÑаÑ. ÐÑÑÑÑна ÑÑÑÑÐ°Ð½Ð½Ñ Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ð°Ñ Ñ Ð½ÑжÑй, Ñазам з падÑабÑзнаÑÑÑÐ¼Ñ Ð¿Ñа ÑдзелÑнÑкаÑ, ÑкÑÑ Ð¿ÑавÑÐ»Ñ ÑÑаÑÐ¾Ð½ÐºÑ Ð¿ÐµÑад ÑÑÑÑаннем. Сам ÑÑкÑÑ ÑÑÑÑÑÑÑ
веÑÑÑй даÑÑÑÐ¿Ð½Ñ ÑолÑÐºÑ Ð°Ð´Ð¼ÑнÑÑÑÑаÑаÑам.",
@@ -2208,11 +2271,11 @@
"javascripttest-qunit-intro": "ÐлÑдзÑÑе [$1 дакÑменÑаÑÑÑ Ð¿Ð° ÑÑÑÑаваннÑ] на mediawiki.org.",
"tooltip-pt-userpage": "ÐаÑа ÑлаÑÐ½Ð°Ñ ÑÑаÑонка",
"tooltip-pt-anonuserpage": "СÑаÑонка ÑдзелÑнÑка Ð´Ð»Ñ Ñаго IP, з Ñкога Ð²Ñ Ð·Ð°Ñаз пÑаÑÑеÑе",
- "tooltip-pt-mytalk": "ÐаÑа ÑÑаÑонка ÑазмоÑ",
+ "tooltip-pt-mytalk": "{{GENDER:|ÐаÑа}} ÑÑаÑонка ÑазмоÑ",
"tooltip-pt-anontalk": "Ð Ð°Ð·Ð¼Ð¾Ð²Ñ Ð°Ð± пÑаÑкаÑ
, зÑобленÑÑ
з гÑÑага IP-адÑаÑа",
- "tooltip-pt-preferences": "ÐаÑÑ Ð½Ð°ÑÑÑойкÑ",
+ "tooltip-pt-preferences": "{{GENDER:|ÐаÑÑ}} наÑÑÑойкÑ",
"tooltip-pt-watchlist": "ÐеÑалÑк ÑÑаÑонак, за змÑненнÑÐ¼Ñ Ñ ÑкÑÑ
Ð²Ñ ÑоÑÑÑе",
- "tooltip-pt-mycontris": "ÐеÑалÑк ваÑага ÑкладÑ",
+ "tooltip-pt-mycontris": "ÐеÑалÑк {{GENDER:|ваÑага}} ÑкладÑ",
"tooltip-pt-anoncontribs": "СпÑÑ Ð¿Ñавак, зÑобленÑÑ
з гÑÑага IP-адÑаÑа",
"tooltip-pt-login": "Ðам пÑапанÑеÑÑа ÑвайÑÑÑ Ñ ÑÑÑÑÑмÑ, але гÑÑа неабавÑзкова.",
"tooltip-pt-logout": "ÐÑйÑÑÑ Ð· ÑÑÑÑÑмÑ",
@@ -2244,7 +2307,7 @@
"tooltip-t-recentchangeslinked": "ÐÑдаÑнÑÑ Ð·Ð¼ÐµÐ½Ñ Ñ ÑÑаÑонкаÑ
, на ÑкÑÑ ÑпаÑÑлаеÑÑа гÑÑÐ°Ñ ÑÑаÑонка",
"tooltip-feed-rss": "RSS-ÑÑÑÑÐ¼ÐµÐ½Ñ Ð³ÑÑай ÑÑаÑонкÑ",
"tooltip-feed-atom": "СÑÑÑÐ¼ÐµÐ½Ñ Ð½Ð°Ð²Ñн Atom Ð´Ð»Ñ Ð³ÑÑай ÑÑаÑонкÑ",
- "tooltip-t-contributions": "ÐаказаÑÑ Ð¿ÐµÑалÑк ÑÐºÐ»Ð°Ð´Ð°Ñ Ð³ÑÑага ÑдзелÑнÑка",
+ "tooltip-t-contributions": "ÐеÑалÑк ÑÐºÐ»Ð°Ð´Ð°Ñ {{GENDER:$1|гÑÑага ÑдзелÑнÑка|гÑÑай ÑдзелÑнÑÑÑ}}",
"tooltip-t-emailuser": "ÐдаÑлаÑÑ ÑдзелÑнÑÐºÑ Ð»ÑÑÑ Ñл.поÑÑÑ",
"tooltip-t-upload": "УклаÑÑÑ ÑайлÑ",
"tooltip-t-specialpages": "ÐеÑалÑк ÑÑÑÑ
адмÑÑловÑÑ
ÑÑаÑонак",
@@ -2886,7 +2949,11 @@
"version-entrypoints": "УваÑ
однÑÑ Ð°Ð´ÑаÑÑ",
"version-entrypoints-header-entrypoint": "ÐÑопка ÑваÑ
одÑ",
"version-entrypoints-header-url": "URL",
- "redirect": "ÐеÑаÑÑлка да Ñайла, ID ÑдзелÑнÑка, ÑÑаÑÐ¾Ð½ÐºÑ ÑÑ Ð²ÐµÑÑÑÑ",
+ "version-libraries-version": "ÐеÑÑÑÑ",
+ "version-libraries-license": "ÐÑÑÑнзÑÑ",
+ "version-libraries-description": "ÐпÑÑанне",
+ "version-libraries-authors": "ÐÑÑаÑÑ",
+ "redirect": "ÐеÑаÑÑлка да Ñайла, ID ÑдзелÑнÑка, ÑÑаÑонкÑ, веÑÑÑÑ ÑÑ Ð¶ÑÑнала",
"redirect-legend": "ÐеÑаÑÑлка да Ñайла ÑÑ ÑÑаÑонкÑ",
"redirect-summary": "ÐÑÑа адмÑÑÐ»Ð¾Ð²Ð°Ñ ÑÑаÑонка пеÑаÑÑлае да Ñайла (з Ð½Ð°Ð·Ð²Ñ Ñайла), на ÑÑаÑÐ¾Ð½ÐºÑ (з ÑдÑнÑÑÑÑкаÑаÑа веÑÑÑÑ ÑÑ ÑÑаÑонкÑ), ÑÑ Ð½Ð° ÑÑаÑÐ¾Ð½ÐºÑ ÑдзелÑнÑка (ÐºÐ°Ð»Ñ Ð´Ð°Ð´Ð·ÐµÐ½Ñ Ð»ÑÑÐ±Ð°Ð²Ñ ID ÑдзелÑнÑка). УжÑванне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ÑÑ [[{{#Special:Redirect}}/user/101]].",
"redirect-submit": "ÐеÑайÑÑÑ",
@@ -2933,8 +3000,10 @@
"tags-tag": "Ðазва бÑÑкÑ",
"tags-display-header": "Ðазва на паказ",
"tags-description-header": "ÐоÑнае апÑÑанне знаÑÑннÑ",
+ "tags-source-header": "ÐÑÑнÑÑа",
"tags-active-header": "ÐкÑÑÑнÑ?",
"tags-hitcount-header": "ÐазнаÑанÑÑ
пÑавак",
+ "tags-actions-header": "ÐзеÑннÑ",
"tags-active-yes": "Ðа",
"tags-active-no": "Ðе",
"tags-edit": "пÑавÑÑÑ",
diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json
index f0686c6b79..7d8303e6c4 100644
--- a/languages/i18n/bg.json
+++ b/languages/i18n/bg.json
@@ -1176,7 +1176,7 @@
"recentchanges-label-bot": "Тази ÑедакÑÐ¸Ñ Ðµ извÑÑÑена Ð¾Ñ Ð±Ð¾Ñ",
"recentchanges-label-unpatrolled": "Тази ÑедакÑÐ¸Ñ Ð²Ñе оÑе не е пÑовеÑена",
"recentchanges-label-plusminus": "РазмеÑÑÑ Ð½Ð° ÑÑÑаниÑаÑа е пÑоменен Ñ Ñози бÑой байÑове",
- "recentchanges-legend-heading": "'''Ðегенда:'''",
+ "recentchanges-legend-heading": "
Ðегенда: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вижÑе ÑÑÑо [[Special:NewPages|ÑпиÑÑка Ñ Ð½Ð¾Ð²Ð¸ ÑÑÑаниÑи]])",
"recentchanges-submit": "Ðокажи",
"rcnotefrom": "Ðадени Ñа пÑомениÑе оÑ
$2 (до
$1 показани).",
diff --git a/languages/i18n/bgn.json b/languages/i18n/bgn.json
index 7188b0c0bd..1867fe73e6 100644
--- a/languages/i18n/bgn.json
+++ b/languages/i18n/bgn.json
@@ -6,7 +6,8 @@
"Rachitrali",
"Mjbmr",
"Macofe",
- "Hosseinblue"
+ "Hosseinblue",
+ "Dalba"
]
},
"tog-underline": "ÙÛÙکاÙÛ Ø¬ÙÙگا خط Ú©Ø´ÛتÛÙ",
@@ -1089,7 +1090,7 @@
"recentchanges-label-plusminus": "تاکدÛÙ
ئ ØجÙ
بئ Ø§Û Ø§Ùدازگ باÛÙ¹ ئا تغÛر Ú©ÙرتÙ",
"recentchanges-legend-heading": "
اختصارئاÙ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ÙÙ
ÛرÙÚ¯ Ø¨Û [[Special:NewPages|ÙÙÚ©Û٠تاکدÛÙ
اÙئ ÙÚ ÙÛست]] ئا سÛ٠بکÙÛت)",
- "rcnotefrom": "بئ جÙÙگا تغÛرات Ø´Ù
$3, $4 (تا
$1 {{PLURAL:$5|Ùشا٠دات٠بÙتÙ|Ùشا٠دات٠اÙت}}).",
+ "rcnotefrom": "بÙ٠جÙÙگا تغÛرات Ø´Ù
$3, $4 (تا
$1 {{PLURAL:$5|Ùشا٠دات٠بÙتÙ|Ùشا٠دات٠اÙت}}).",
"rclistfrom": "ÙÙÚ©Û٠تغÛراتاÙئ Ùشا٠داتÛ٠شر٠ش٠$3 $2",
"rcshowhideminor": "$1 Ø¦Û Ú©Ù
Û٠اÛÚÛٹاÙ",
"rcshowhideminor-show": "Ùشا٠داتÛÙ",
diff --git a/languages/i18n/bho.json b/languages/i18n/bho.json
index c0742ed385..cf66e2b879 100644
--- a/languages/i18n/bho.json
+++ b/languages/i18n/bho.json
@@ -1018,7 +1018,7 @@
"recentchanges-label-bot": "ठसà¤à¤ªà¤¾à¤¦à¤¨ à¤à¤à¥ बà¥à¤ दà¥à¤µà¤¾à¤°à¤¾ à¤à¤à¤² à¤à¤à¤² बा",
"recentchanges-label-unpatrolled": "ठसà¤à¤ªà¤¾à¤¦à¤¨ à¤à¥ à¤
à¤à¤¿à¤¨ लॠà¤à¤¾à¤à¤à¤² नà¤à¤à¥ à¤à¤à¤²",
"recentchanges-label-plusminus": "à¤à¤¤à¤¨à¤¾ बाà¤à¤à¤¸à¥ सॠपनà¥à¤¨à¤¾ à¤à¥ साà¤à¤ बदलल à¤à¤à¤²",
- "recentchanges-legend-heading": "'''सà¤à¤à¥à¤¤:'''",
+ "recentchanges-legend-heading": "
सà¤à¤à¥à¤¤: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (à¤à¤¹à¥ दà¥à¤à¥à¤ [[Special:NewPages|नया पनà¥à¤¨à¤µà¤¨ à¤à¥ लिसà¥à¤]])",
"rclistfrom": "$2, $3 सॠशà¥à¤°à¥ नया बदलाव दà¥à¤à¤¾à¤à¤",
"rcshowhideminor": "$1 à¤à¥à¤ सà¤à¤ªà¤¾à¤¦à¤¨",
diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json
index 7824732809..21fd01f1b3 100644
--- a/languages/i18n/bn.json
+++ b/languages/i18n/bn.json
@@ -150,7 +150,7 @@
"category-media-header": "\"$1\" বিষয়শà§à¦°à§à¦£à§à¦¤à§ à¦
নà§à¦¤à¦°à§à¦à§à¦à§à¦¤ মিডিয়া ফাà¦à¦²à¦à§à¦²à¦¿",
"category-empty": "''à¦à¦ বিষয়শà§à¦°à¦£à§à¦¤à§ বরà§à¦¤à¦®à¦¾à¦¨à§ à¦à§à¦¨ পাতা বা মিডিয়া ফাà¦à¦² নà§à¦à¥¤''",
"hidden-categories": "{{PLURAL:$1|লà§à¦à¦¾à¦¯à¦¼à¦¿à¦¤ বিষয়শà§à¦°à§à¦£à§|লà§à¦à¦¾à¦¯à¦¼à¦¿à¦¤ বিষয়শà§à¦°à§à¦£à§à¦¸à¦®à§à¦¹}}",
- "hidden-category-category": "লà§à¦à¦¾à¦¯à¦¼à¦¿à¦¤ বিষয়শà§à¦°à§à¦£à§à¦¸à¦®à§à¦¹",
+ "hidden-category-category": "লà§à¦à§à¦à¦¾à¦¯à¦¼à¦¿à¦¤ বিষয়শà§à¦°à§à¦£à§à¦¸à¦®à§à¦¹",
"category-subcat-count": "{{PLURAL:$2|à¦à¦ বিষয়শà§à¦°à§à¦£à§à¦¤à§ à¦à§à¦¬à¦²à¦®à¦¾à¦¤à§à¦° নিà¦à§à¦° à¦à¦ªà¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§à¦°à§à¦£à§à¦à¦¿ à¦à¦à§à¥¤|à¦à¦ বিষয়শà§à¦°à§à¦£à§à¦¤à§ à¦
নà§à¦¤à¦°à§à¦à§à¦à§à¦¤ মà§à¦ $2à¦à¦¿ à¦à¦ªà¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§à¦°à§à¦£à§à¦° মধà§à¦¯à§ {{PLURAL:$1|à¦à¦¿ à¦à¦ªà¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§à¦°à§à¦£à§|$1à¦à¦¿ à¦à¦ªà¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§à¦°à§à¦£à§}} নিà¦à§ দà§à¦à¦¾à¦¨à§ হয়à§à¦à§à¥¤}}",
"category-subcat-count-limited": "à¦à¦ বিষয়শà§à¦°à§à¦£à§à¦¤à§ নিà¦à§à¦° {{PLURAL:$1|à¦à¦¿ à¦à¦ªà¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§à¦°à§à¦£à§|$1à¦à¦¿ à¦à¦ªà¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§à¦°à§à¦£à§ à¦à¦à§}}।",
"category-article-count": "{{PLURAL:$2|à¦à¦ বিষয়শà§à¦°à§à¦£à§à¦¤à§ à¦à§à¦¬à¦² নিà¦à§à¦° পাতাà¦à¦¿ à¦à¦à§à¥¤|à¦à¦ বিষয়শà§à¦°à§à¦£à§à¦¤à§ à¦
নà§à¦¤à¦°à§à¦à§à¦à§à¦¤ মà§à¦ $2à¦à¦¿ পাতার মধà§à¦¯à§ {{PLURAL:$1|à¦à¦¿ পাতা|$1à¦à¦¿ পাতা}} নিà¦à§ দà§à¦à¦¾à¦¨à§ হল।}}",
@@ -832,7 +832,7 @@
"revdelete-unsuppress": "সà¦à¦¶à§à¦§à¦¨ পà§à¦¨à¦à¦¸à§à¦¥à¦¾à¦ªà¦¨à§à¦° à¦à¦ªà¦° সà§à¦®à¦¾à¦¬à¦¦à§à¦§à¦¤à¦¾ দà§à¦° à¦à¦°à§",
"revdelete-log": "à¦à¦¾à¦°à¦£:",
"revdelete-submit": "নিরà§à¦¬à¦¾à¦à¦¿à¦¤ {{PLURAL:$1|সà¦à¦¶à§à¦§à¦¨à§|সà¦à¦¶à§à¦§à¦¸à¦®à§à¦¹à§}} পà§à¦°à¦¯à¦¼à§à¦ à¦à¦°à§",
- "revdelete-success": "'''সà¦à¦¶à§à¦§à¦¨ দà§à¦¶à§à¦¯à¦®à¦¾à¦¨à¦¤à¦¾ সফলà¦à¦¾à¦¬à§ হালনাà¦à¦¾à¦¦ à¦à¦°à¦¾ হয়à§à¦à§à¥¤'''",
+ "revdelete-success": "সà¦à¦¶à§à¦§à¦¨à§à¦° দà§à¦¶à§à¦¯à¦®à¦¾à¦¨à¦¤à¦¾ হালনাà¦à¦¾à¦¦ à¦à¦°à¦¾ হয়à§à¦à§à¥¤",
"revdelete-failure": "সà¦à¦¶à§à¦§à¦¨à§à¦° দà§à¦¶à§à¦¯à¦®à¦¾à¦¨à¦¤à¦¾ হালনাà¦à¦¾à¦¦ à¦à¦°à¦¾ যায়নি:\n$1",
"logdelete-success": "'''à¦à¦à¦¨à¦¾ দà§à¦¶à§à¦¯à¦®à¦¾à¦¨à¦¤à¦¾ সফলà¦à¦¾à¦¬à§ সà§à¦¥à¦¾à¦ªà¦¨ à¦à¦°à¦¾ হয়à§à¦à§à¥¤'''",
"logdelete-failure": "'''লà¦-à¦à¦° দà§à¦¶à§à¦¯à¦®à¦¾à¦¨à¦¤à¦¾ নিরà§à¦§à¦¾à¦°à¦£ সমà§à¦à¦¬ হà¦à§à¦à§ না:'''\n$1",
@@ -1176,6 +1176,7 @@
"grant-editmyoptions": "à¦à¦ªà¦¨à¦¾à¦° বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ পà¦à¦¨à§à¦¦à¦¸à¦®à§à¦¹ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à¦°à§à¦¨",
"grant-editmywatchlist": "à¦à¦ªà¦¨à¦¾à¦° নà¦à¦°à¦¤à¦¾à¦²à¦¿à¦à¦¾ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à¦°à§à¦¨",
"grant-editprotected": "সà¦à¦°à¦à§à¦·à¦¿à¦¤ পাতা সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à¦°à§à¦¨",
+ "grant-sendemail": "à¦
নà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§à¦à§ à¦à¦®à§à¦à¦² পাঠান",
"grant-uploadfile": "নতà§à¦¨ ফাà¦à¦² à¦à¦ªà¦²à§à¦¡ à¦à¦°à§à¦¨",
"grant-basic": "মà§à¦²à¦¿à¦ à¦
ধিà¦à¦¾à¦°",
"grant-viewdeleted": "à¦
পসারিত ফাà¦à¦² ঠপাতাà¦à§à¦²à¦¿ দà§à¦à§à¦¨",
@@ -1931,6 +1932,7 @@
"changecontentmodel-title-label": "পাতার শিরà§à¦¨à¦¾à¦®",
"changecontentmodel-model-label": "পাতার বিষয়বসà§à¦¤à§à¦° পà§à¦°à¦¤à¦¿à¦°à§à¦ª",
"changecontentmodel-reason-label": "à¦à¦¾à¦°à¦£:",
+ "changecontentmodel-submit": "পরিবরà§à¦¤à¦¨ à¦à¦°à§à¦¨",
"changecontentmodel-success-title": "বিষয়বসà§à¦¤à§à¦° পà§à¦°à¦¤à¦¿à¦°à§à¦ª পরিবরà§à¦¤à¦¿à¦¤ হয়à§à¦à¦¿à¦²à§",
"changecontentmodel-success-text": "[[:$1]]-à¦à¦° বিষয়বসà§à¦¤à§à¦° ধরণ পরিবরà§à¦¤à¦¨ হয়à§à¦à§à¥¤",
"log-name-contentmodel": "বিষয়বসà§à¦¤à§à¦° মডà§à¦² পরিবরà§à¦¤à¦¨ লà¦",
@@ -3463,7 +3465,7 @@
"mw-widgets-titleinput-description-new-page": "পাতা à¦à¦à¦¨à§ বিদà§à¦¯à¦®à¦¾à¦¨ নয়",
"mw-widgets-titleinput-description-redirect": "$1-ঠপà§à¦¨à¦à¦¨à¦¿à¦°à§à¦¦à§à¦¶à¦¿à¦¤",
"api-error-blacklisted": "à¦
নà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦
পর à¦à§à¦¨à§ বরà§à¦£à¦¨à¦¾à¦®à§à¦²à¦ নাম বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§à¦¨à¥¤",
- "sessionmanager-tie": "à¦à¦à¦¾à¦§à¦¿à¦ à¦
নà§à¦°à§à¦§à§à¦° পà§à¦°à¦®à¦¾à¦£à§à¦à¦°à¦£à§à¦° ধরন à¦à¦à¦¤à§à¦°à¦¿à¦¤ à¦à¦°à¦¾ যাবৠনা: $1.",
+ "sessionmanager-tie": "à¦à¦à¦¾à¦§à¦¿à¦ à¦
নà§à¦°à§à¦§à§à¦° পà§à¦°à¦®à¦¾à¦£à§à¦à¦°à¦£à§à¦° ধরন à¦à¦à¦¤à§à¦°à¦¿à¦¤ à¦à¦°à¦¾ যাবৠনা: $1।",
"sessionprovider-generic": "$1à¦à¦¿ সà§à¦¶à¦¨",
"sessionprovider-mediawiki-session-cookiesessionprovider": "à¦à§à¦à¦¿-à¦à¦¿à¦¤à§à¦¤à¦¿à¦ সà§à¦¶à¦¨",
"sessionprovider-nocookies": "à¦à§à¦à¦¿ নিষà§à¦à§à¦°à¦¿à¦¯à¦¼ à¦à¦°à¦¾à¥¤ নিশà§à¦à¦¿à¦¤ à¦à¦°à§à¦¨ যৠà¦à¦ªà¦¨à¦¾à¦° à¦à§à¦à¦¿ সà¦à§à¦°à¦¿à¦¯à¦¼ à¦à¦à§ à¦à¦¬à¦ à¦à¦¬à¦¾à¦° শà§à¦°à§ à¦à¦°à§à¦¨à¥¤",
diff --git a/languages/i18n/br.json b/languages/i18n/br.json
index 6abf1d99b4..c542737eb5 100644
--- a/languages/i18n/br.json
+++ b/languages/i18n/br.json
@@ -1151,7 +1151,7 @@
"recentchanges-label-bot": "Gant ur bot eo bet degaset ar c'hemm-mañ.",
"recentchanges-label-unpatrolled": "N'eo ket bet gwiriet ar c'hemm-mañ evit c'hoazh.",
"recentchanges-label-plusminus": "Kemmet eo ment ar bajenn eus an niver-mañ a oktedoù",
- "recentchanges-legend-heading": "'''Alc'hwez :'''",
+ "recentchanges-legend-heading": "
Alc'hwez : ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gwelet ivez [[Special:NewPages|roll ar pajennoù nevez]])",
"rcnotefrom": "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an
$2 (
$1 d'ar muiañ).",
"rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an/ar $3 $2",
diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json
index 50c03e54f1..e531009c84 100644
--- a/languages/i18n/bs.json
+++ b/languages/i18n/bs.json
@@ -1199,7 +1199,7 @@
"recentchanges-label-bot": "Izmjenu napravio bot",
"recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
"recentchanges-label-plusminus": "Promjena veliÄine stranice u bajtovima",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "
Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
"recentchanges-submit": "Prikaži",
"rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od
$3, $4 (do
$1 prikazano).",
diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json
index de6f9ed595..913a16e982 100644
--- a/languages/i18n/ca.json
+++ b/languages/i18n/ca.json
@@ -196,6 +196,7 @@
"moredotdotdot": "Més...",
"morenotlisted": "Aquesta llista no és completa.",
"mypage": "PÃ gina",
+ "anonuserpage": "Usuari desconegut",
"mytalk": "Discussió",
"anontalk": "Discussió",
"navigation": "Navegació",
@@ -498,7 +499,7 @@
"nocookiesfornew": "No s'ha creat el compte d'usuari, ja que no es podia confirmar el seu origen.\nVerifiqueu que teniu habilitades les galetes al vostre navegador, torneu a carregar aquesta pà gina i intenteu-lo de nou.",
"nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "No heu especificat un nom và lid d'usuari.",
- "loginsuccesstitle": "S'ha iniciat la sessió amb èxit",
+ "loginsuccesstitle": "Sessió iniciada",
"loginsuccess": "Heu iniciat la sessió a {{SITENAME}} com a «$1».",
"nosuchuser": "No hi ha cap usuari anomenat «$1».\nReviseu-ne l'ortografia (recordeu que es distingeixen les majúscules i minúscules), o [[Special:UserLogin/signup|creeu un compte d'usuari nou]].",
"nosuchusershort": "No hi ha cap usuari anomenat «$1». Comproveu que ho hà giu escrit correctament.",
@@ -534,7 +535,7 @@
"createaccount-title": "Creació d'un compte a {{SITENAME}}",
"createaccount-text": "Algú ha creat un compte d'usuari anomenat $2 en el projecte {{SITENAME}}\n($4) amb la vostra adreça de correu electrònic. La contrasenya per a l'usuari «$2» és «$3». HaurÃeu d'accedir al compte i canviar-vos aquesta contrasenya com més aviat millor.\n\nSi no hi teniu cap relació i aquest compte s'ha creat per error, simplement ignoreu el missatge.",
"login-throttled": "Heu realitzat massa intents d'accés a la sessió.\nEspereu $1 abans de tornar-ho a provar.",
- "login-abort-generic": "L'entrada al compte d'usuari no ha reeixit - S'ha interromput.",
+ "login-abort-generic": "L'inici de sessió ha fallat - Operació anul·lada.",
"login-migrated-generic": "S'ha migrat el vostre compte, i el vostre nom d'usuari ja no existeix en aquest wiki.",
"loginlanguagelabel": "Llengua: $1",
"suspicious-userlogout": "S'ha denegat la vostra petició per a tancar la sessió, ja que sembla que va ser enviada per un navegador defectuós o un servidor intermediari.",
@@ -559,12 +560,16 @@
"botpasswords": "Contrasenyes de bot",
"botpasswords-disabled": "S'han inhabilitat les contrasenyes dels bots",
"botpasswords-no-central-id": "Per a utilitzar contrasenyes de bots heu d'haver iniciat una sessió en un compte centralitzat.",
+ "botpasswords-existing": "Contrasenyes de bot existents",
+ "botpasswords-createnew": "Crea una contrasenya de bot nova",
+ "botpasswords-editexisting": "Edita una contrasenya de bot existent",
"botpasswords-label-appid": "Nom del bot:",
"botpasswords-label-create": "Crea",
"botpasswords-label-update": "Actualitza",
"botpasswords-label-cancel": "Cancel·la",
"botpasswords-label-delete": "Suprimeix",
"botpasswords-label-resetpassword": "Reinicia la contrasenya",
+ "botpasswords-label-restrictions": "Restriccions d'ús:",
"resetpass_forbidden": "No poden canviar-se les contrasenyes",
"resetpass-no-info": "Heu d'estar registrats en un compte per a poder accedir directament a aquesta pà gina.",
"resetpass-submit-loggedin": "Canvia la contrasenya",
@@ -887,6 +892,9 @@
"mergehistory-empty": "No pot fusionar-se cap revisió.",
"mergehistory-done": "{{PLURAL:$3|Sâha|Sâhan}} fusionat correctament $3 {{PLURAL:$3|revisió|revisions}} de $1 a [[:$2]].",
"mergehistory-fail": "No s'ha pogut realitzar la fusió de l'historial, comproveu la pà gina i els parà metres horaris.",
+ "mergehistory-fail-bad-timestamp": "La marca horà ria no és và lida.",
+ "mergehistory-fail-invalid-source": "La pà gina font no és và lida.",
+ "mergehistory-fail-invalid-dest": "La pà gina de destinació no és và lida.",
"mergehistory-fail-toobig": "No s'ha pogut fer la fusió de l'historial perquè es mourien més del lÃmit de $1 {{PLURAL:$1|revisió|revisions}}.",
"mergehistory-no-source": "La pà gina d'origen $1 no existeix.",
"mergehistory-no-destination": "La pà gina de destinació $1 no existeix.",
@@ -1199,6 +1207,12 @@
"grant-createaccount": "Crea comptes",
"grant-createeditmovepage": "Crea, modifica i reanomena pà gines",
"grant-delete": "Suprimeix pà gines, revisions i entrades de registre",
+ "grant-editmywatchlist": "Modifica la llista de seguiment",
+ "grant-editpage": "Modifica les pà gines existents",
+ "grant-editprotected": "Modifica pà gines protegides",
+ "grant-highvolume": "Edició d'alt volum",
+ "grant-oversight": "Amaga usuaris i suprimeix revisions",
+ "grant-uploadfile": "Carrega fitxers nous",
"newuserlogpage": "Registre de creació d'usuaris",
"newuserlogpagetext": "Aquest és un registre de creació de nous usuaris.",
"rightslog": "Registre dels permisos d'usuari",
@@ -1261,7 +1275,7 @@
"recentchanges-label-bot": "Aquesta modificació fou feta per un bot",
"recentchanges-label-unpatrolled": "Aquesta modificació encara no s'ha patrullat",
"recentchanges-label-plusminus": "La mida de la pà gina ha canviat aquest nombre de bytes",
- "recentchanges-legend-heading": "'''Llegenda:'''",
+ "recentchanges-legend-heading": "
Llegenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vegeu també la [[Special:NewPages|llista de pà gines noves]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Mostra",
@@ -1729,7 +1743,7 @@
"apisandbox-submit": "Fes sol·licitud",
"apisandbox-reset": "Neteja",
"apisandbox-examples": "Exemple",
- "apisandbox-results": "Resultat",
+ "apisandbox-results": "Resultats",
"apisandbox-request-url-label": "Sol·licita URL:",
"apisandbox-request-time": "Temps de sol·licitud: $1",
"booksources": "Obres de referència",
@@ -1892,6 +1906,7 @@
"wlshowhideanons": "usuaris anònims",
"wlshowhidepatr": "edicions supervisades",
"wlshowhidemine": "les meves edicions",
+ "wlshowhidecategorization": "categorització de pà gines",
"watchlist-options": "Opcions de la llista de seguiment",
"watching": "S'està vigilant...",
"unwatching": "S'està desatenent...",
@@ -3447,11 +3462,12 @@
"expand_templates_preview": "Previsualitza",
"expand_templates_preview_fail_html": "
Atès que {{SITENAME}} té HTML cru i hi ha hagut una pèrdua de dades de la sessió, s'ha amagat la vista prèvia com a mesura de precaució contra atacs en JavaScript. \n\n
Si això és un intent de previsualització legÃtim, torneu-ho a provar. \nSi encara no funciona, intenteu [[Special:UserLogout|finalitzar la sessió]] i iniciar-la de nou.",
"expand_templates_preview_fail_html_anon": "
Atès que {{SITENAME}} té l'HTML cru habilitat i no heu iniciat una sessió, s'ha amagat la previsualització com a prevenció d'atacs en JavaScript. \n\n
Si això és un intent de previsualització legÃtim, [[Special:UserLogin|inicieu una sessió]] i torneu-ho a provar. ",
- "pagelanguage": "Selector de l'idioma de les pà gines",
+ "pagelanguage": "Canvia l'idioma de la pà gina",
"pagelang-name": "PÃ gina",
"pagelang-language": "Idioma",
"pagelang-use-default": "Utilitza l'idioma per defecte",
"pagelang-select-lang": "Selecciona un idioma",
+ "pagelang-submit": "Envia",
"right-pagelang": "Canvia l'idioma de la pà gina",
"action-pagelang": "canvia l'idioma de la pà gina",
"log-name-pagelang": "Canvia el registre de llengua",
diff --git a/languages/i18n/ce.json b/languages/i18n/ce.json
index 8658f09b4f..e92e4165fa 100644
--- a/languages/i18n/ce.json
+++ b/languages/i18n/ce.json
@@ -215,7 +215,7 @@
"redirectedfrom": "($1 дÓаÑаÑ
Ñажийна кÑ
Ñзе)",
"redirectpagesub": "ÐгÓо-дÓаÑаÑ
ÑажоÑг",
"redirectto": "ÐÓаÑаÑ
ÑÐ°Ð¶Ð¾Ñ ÑÓе:",
- "lastmodifiedat": "Ð¥ÓокÑ
Ñ Ð°Ð³Óонан ÑÓаÑÑ
Ñ
ÑаÑа Ñ
ийÑÐ°Ð¼Ð°Ñ Ð±Ð¸Ð½Ð°: $1, $2.",
+ "lastmodifiedat": "Ð¥ÓокÑ
Ñ Ð°Ð³Óонна ÑÓаÑÑ
Ñ
ÑаÑа Ñ
ийÑÐ°Ð¼Ð°Ñ Ð±Ð¸Ð½Ð°: $1, $2.",
"viewcount": "Ð¥ÓокÑ
Ñ Ð°Ð³Óонг Ñ
ÑовÑийна $1 {{PLURAL:$1|за}}.",
"protectedpage": "ÐÓаÑоллийÑа Ð¹Ð¾Ð»Ñ Ð°Ð³Óо",
"jumpto": "ÐеÑ
Ñа гÓо:",
@@ -1137,7 +1137,7 @@
"recentchanges-label-bot": "Ð¥ÓаÑа ниÑÐ´Ð°Ñ Ð±Ð¾Ñо дина",
"recentchanges-label-unpatrolled": "Ð¥ÓаÑа ниÑÐ´Ð°Ñ Ñ
ÓинÑа ÑÑ
Ñано паÑÑÑлиÑоваÑÑ Ð´Ð¸Ð½Ð° даÑ",
"recentchanges-label-plusminus": "байÑаÑкаÑ
Ñ Ð±Ð°Ñам Ñ
ийÑаÑ",
- "recentchanges-legend-heading": "'''Ðегенда: '''",
+ "recentchanges-legend-heading": "
Ðегенда: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ñ
Ñажа кÑ
ин [[Special:NewPages|кеÑла агÓонийн могÓа]])",
"recentchanges-submit": "ÐайÑа",
"rcnotefrom": "ÐаÑ
аÑ
Ñ Ð³Ð°Ð¹Ñина ÑÓеÑа
$2 (Ñ
ийÑамаÑ
$1 кÓезиг).",
@@ -1982,7 +1982,7 @@
"newtitle": "ÐеÑла ÑÓе",
"move-watch": "Ð¥ÓаÑа агÓо ÑеÑгаме могÓанан ÑкÑаÑоÑ
а",
"movepagebtn": "ÐгÓон ÑÓе Ñ
ийÑа",
- "pagemovedsub": "ÐгÓон ÑÓе Ñ
ийÑина",
+ "pagemovedsub": "ÐгÓонан ÑÓе Ñ
ийÑина",
"movepage-moved": "'''ÐгÓон ÑÓе «$1» Ñ
ийÑина â «$2»'''",
"movepage-moved-redirect": "ÐÑ
оÑллина дÓаÑаÑ
ÑажоÑг.",
"movepage-moved-noredirect": "ÐÓаÑÑ
ÑажоÑг кÑ
Ð¾Ð»Ð»Ð°Ñ Ð´Ð¾Ñ
ина.",
@@ -2259,6 +2259,7 @@
"seconds-abbrev": "$1 оÑÑ",
"minutes-abbrev": "$1 мин",
"hours-abbrev": "$1 ÑаÑ
Ñ.",
+ "days-abbrev": "$1 д",
"seconds": "{{PLURAL:$1|$1 ÑекÑнд|$1 ÑекÑнд}}",
"minutes": "{{PLURAL:$1|$1 миноÑ|$1 миноÑ}}",
"hours": "{{PLURAL:$1|$1 ÑаÑ
ÑÑ}}",
diff --git a/languages/i18n/ckb.json b/languages/i18n/ckb.json
index c3d1797592..928a791493 100644
--- a/languages/i18n/ckb.json
+++ b/languages/i18n/ckb.json
@@ -1069,7 +1069,7 @@
"recentchanges-label-bot": "ئÛÙ
دÛستکارÛÛÛ ÙÛ ÙاÛÛ٠بÛتÛÙÛ Ú©Ø±Ø§ÙÛ",
"recentchanges-label-unpatrolled": "ئÛÙ
دÛستکارÛÛÛ Ú¾Ûشتا پاس ÙÛدراÙÛ",
"recentchanges-label-plusminus": "ÙÛبارÛÛ Ù¾ÛÚÛ Ø¦ÛÙÛÙØ¯Û Ø¨Ø§Ûت Ú¯ÛÚاÙÛ",
- "recentchanges-legend-heading": "'''Ú©ÙرتکراÙÛکاÙ:'''",
+ "recentchanges-legend-heading": "
Ú©ÙرتکراÙÛکاÙ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ú¾ÛرÙÛھا بÚÙاÙÛ [[Special:NewPages|Ù¾ÛØ±Ø³ØªÛ Ù¾ÛÚÛ ÙÙÛکاÙ]])",
"recentchanges-legend-plusminus": "(''±۱٢٣'')",
"recentchanges-submit": "ÙÛشاÙÛ Ø¨Ø¯Û",
diff --git a/languages/i18n/crh-cyrl.json b/languages/i18n/crh-cyrl.json
index f4c011f31e..1bac2e1c56 100644
--- a/languages/i18n/crh-cyrl.json
+++ b/languages/i18n/crh-cyrl.json
@@ -755,7 +755,7 @@
"recentchanges-label-bot": "ÐÑ Ð±Ð¸Ñ Ð±Ð¾ÑнÑÐ½Ñ ÑпкÑан денÑиÑÑиÑмеÑи",
"recentchanges-label-unpatrolled": "ÐÑ Ð´ÐµÐ½ÑиÑÑиÑме Ð°Ð»Ñ Ð´Ð°Ð° ÑеÑкеÑилÑмеген",
"recentchanges-label-plusminus": "ÐÐ°Ð¹Ñ ÑÑабÑнен ÑаиÑе бÑÑÐºÐ»Ð¸Ð³Ð¸Ð½Ð¸Ð½Ñ Ð´ÐµÐ½ÑиÑÑиÑилÑмеÑи",
- "recentchanges-legend-heading": "'''ÐÑаÑеÑлеÑ:'''",
+ "recentchanges-legend-heading": "
ÐÑаÑеÑлеÑ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ÑнÑÑ ÑаиÑÐµÐ»ÐµÑ Ð´Ð¶ÐµÐ´Ð²ÐµÐ»Ð¸Ð½Ðµ]] де бакÑÑнÑÑз)",
"rcnotefrom": "
$3, $4 ÑаÑиÑ
Ñндан баÑлап ÑпÑлгÑан {{PLURAL:$5|денÑиÑÑиÑме|денÑиÑÑиÑмелеÑ}} аÑагÑÑдадÑÑ (ÑÐ½Ñ ÑокÑ
$1 дане ÑаиÑе коÑÑÑеÑиле).",
"rclistfrom": "$3 $2 ÑаÑиÑ
Ñндан беÑли ÑпÑлгÑан денÑиÑÑиÑмелеÑни коÑÑÑеÑ",
diff --git a/languages/i18n/crh-latn.json b/languages/i18n/crh-latn.json
index 301dba4138..9333f95404 100644
--- a/languages/i18n/crh-latn.json
+++ b/languages/i18n/crh-latn.json
@@ -753,7 +753,7 @@
"recentchanges-label-bot": "Bu bir botnıñ yapqan deñiÅtirmesi",
"recentchanges-label-unpatrolled": "Bu deñiÅtirme alâ daa teÅkerilmegen",
"recentchanges-label-plusminus": "Bayt esabınen saife büyükliginiñ deñiÅtirilmesi",
- "recentchanges-legend-heading": "'''Ä°Åaretler:'''",
+ "recentchanges-legend-heading": "
Ä°Åaretler: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|yañı saifeler cedveline]] de baqıñız)",
"rcnotefrom": "
$3, $4 tarihından baÅlap yapılÄan {{PLURAL:$5|deñiÅtirme|deñiÅtirmeler}} aÅaÄıdadır (eñ çоq
$1 dane saife kösterile).",
"rclistfrom": "$3 $2 tarihından berli yapılÄan deñiÅtirmelerni köster",
diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json
index 45e2766747..4996cad229 100644
--- a/languages/i18n/cs.json
+++ b/languages/i18n/cs.json
@@ -28,7 +28,8 @@
"××¢×¨× ×¨××× ××ר×",
"Cvanca",
"Macofe",
- "Urbanecm"
+ "Urbanecm",
+ "LordMsz"
]
},
"tog-underline": "Podtrhávat odkazy:",
@@ -524,7 +525,7 @@
"newpassword": "Nové heslo:",
"retypenew": "Napište znovu nové heslo",
"resetpass_submit": "Nastavit heslo a pÅihlásit se",
- "changepassword-success": "VaÅ¡e heslo bylo úspÄÅ¡nÄ zmÄnÄno!",
+ "changepassword-success": "VaÅ¡e heslo bylo zmÄnÄno!",
"changepassword-throttled": "Provedli jste pÅÃliÅ¡ mnoho pokusů o pÅihlášenÃ.\nÄekejte prosÃm $1 a zkuste to znovu.",
"botpasswords": "Hesla pro boty",
"botpasswords-summary": "
Hesla pro boty umožÅujà pÅistupovat k uživatelskému úÄtu prostÅednictvà API bez použità hlavnÃch pÅihlaÅ¡ovacÃch údajů úÄtu. Uživatelská oprávnÄnà dostupná po pÅihlášenà pomocà hesla pro boty mohou být omezena.\n\nPokud nevÃte, k Äemu byste to {{GENDER:|chtÄl|chtÄla|chtÄli}} použÃt, pravdÄpodobnÄ byste to použÃvat {{GENDER:|nemÄl|nemÄla|nemÄli}}. Nikdo by vás nikdy nemÄl žádat, abyste si zde vygenerovali heslo a dali mu ho.",
@@ -539,17 +540,19 @@
"botpasswords-label-cancel": "Storno",
"botpasswords-label-delete": "Smazat",
"botpasswords-label-resetpassword": "Resetovat heslo",
+ "botpasswords-label-grants": "Použitelná oprávnÄnÃ:",
+ "botpasswords-help-grants": "Každé pÅidÄlenà dává pÅÃstup k uvedeným uživatelským oprávnÄnÃm, která uživatelský úÄet již má. Viz [[Special:ListGrants|table of grants]] pro vÃce informacÃ.",
"botpasswords-label-restrictions": "Omezenà užitÃ:",
"botpasswords-label-grants-column": "PÅidÄleno",
"botpasswords-bad-appid": "Název bota â$1â nenà platný.",
"botpasswords-insert-failed": "NepodaÅilo se pÅidat název bota â$1â. Nebyl už pÅidán?",
"botpasswords-update-failed": "NepodaÅilo se aktualizovat název bota â$1â. Nebyl smazán?",
"botpasswords-created-title": "Heslo pro bota vytvoÅeno",
- "botpasswords-created-body": "Heslo pro bota â$1â bylo úspÄÅ¡nÄ vytvoÅeno.",
+ "botpasswords-created-body": "Heslo pro bota jménem â$1â uživatele â$2â bylo vytvoÅeno.",
"botpasswords-updated-title": "Heslo pro bota aktualizováno",
- "botpasswords-updated-body": "Heslo pro bota â$1â bylo úspÄÅ¡nÄ aktualizováno.",
+ "botpasswords-updated-body": "Heslo pro bota jménem â$1â uživatele â$2â bylo aktualizováno.",
"botpasswords-deleted-title": "Heslo pro bota smazáno",
- "botpasswords-deleted-body": "Heslo pro bota â$1â bylo smazáno.",
+ "botpasswords-deleted-body": "Heslo pro bota jménem â$1â uživatele â$2â bylo smazáno.",
"botpasswords-newpassword": "Nové pÅihlaÅ¡ovacà heslo pro bota
$1 je
$2 .
Zaznamenejte si je pro budoucà použitÃ. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider nenà dostupný.",
"botpasswords-restriction-failed": "Toto pÅihlášenà bylo zamÃtnuto omezenÃm hesel pro boty.",
@@ -559,7 +562,7 @@
"resetpass-no-info": "K této stránce majà pÅÃmý pÅÃstup jen pÅihlášenà uživatelé.",
"resetpass-submit-loggedin": "ZmÄnit heslo",
"resetpass-submit-cancel": "Storno",
- "resetpass-wrong-oldpass": "Nesprávné doÄasné nebo aktuálnà heslo.\nMožná jste si již úspÄÅ¡nÄ heslo zmÄnili, nebo jste si vyžádali nové doÄasné heslo.",
+ "resetpass-wrong-oldpass": "Nesprávné doÄasné nebo aktuálnà heslo.\nMožná jste si již heslo zmÄnili, nebo jste si vyžádali nové doÄasné heslo.",
"resetpass-recycled": "Jako nové heslo si prosÃm nastavte nÄco jiného než stávajÃcà heslo.",
"resetpass-temp-emailed": "PÅihlaÅ¡ujete se pomocà doÄasného hesla, které bylo zasláno e-mailem.\nAbyste dokonÄili pÅihlášenÃ, nastavte si nové heslo:",
"resetpass-temp-password": "DoÄasné heslo:",
@@ -843,9 +846,9 @@
"revdelete-unsuppress": "Odstranit omezenà na obnovených revizÃch",
"revdelete-log": "Důvod:",
"revdelete-submit": "Aplikovat na {{PLURAL:$1|zvolenou revizi|zvolené revize}}",
- "revdelete-success": "'''Viditelnost revize úspÄÅ¡nÄ nastavena.'''",
+ "revdelete-success": "Viditelnost revize nastavena.",
"revdelete-failure": "'''NepodaÅilo se nastavit viditelnost revize:'''\n$1",
- "logdelete-success": "'''Viditelnost události úspÄÅ¡nÄ nastavena.'''",
+ "logdelete-success": "Viditelnost události úspÄÅ¡nÄ nastavena.",
"logdelete-failure": "'''NepodaÅilo se nastavit viditelnost protokolu:'''\n$1",
"revdel-restore": "ZmÄnit viditelnost",
"pagehist": "Historie stránky",
@@ -876,10 +879,13 @@
"mergehistory-empty": "Nelze slouÄit žádnou verzi.",
"mergehistory-done": "$3 {{PLURAL:$3|verze|verze|verzÃ}} stránky $1 {{PLURAL:$3|byla úspÄÅ¡nÄ slouÄena|byly úspÄÅ¡nÄ slouÄeny|bylo úspÄÅ¡nÄ slouÄeno}} do stránky [[:$2]].",
"mergehistory-fail": "SlouÄenà historià nelze provést. PÅekontrolujte zadané stránky a jejich historii.",
+ "mergehistory-fail-bad-timestamp": "Äasové razÃtko je neplatné.",
"mergehistory-fail-invalid-source": "Zdrojová stránka je neplatná.",
"mergehistory-fail-invalid-dest": "CÃlová stránka je neplatná.",
+ "mergehistory-fail-no-change": "SlouÄenà historie nespojilo žádné revize. PÅekontrolujte prosÃm stránku a Äasové parametry.",
"mergehistory-fail-permission": "NedostateÄná oprávnÄnà ke sluÄovánà historie.",
"mergehistory-fail-self-merge": "Zdrojová a cÃlová stránka jsou shodné.",
+ "mergehistory-fail-timestamps-overlap": "Zdrojové revize se pÅekrývajÃ, nebo pÅicházà až po cÃlových revizÃch.",
"mergehistory-fail-toobig": "Nelze provést slouÄenà historie, protože by se pÅesouvalo vÃce revizÃ, než je limit $1.",
"mergehistory-no-source": "Zdrojová stránka $1 neexistuje.",
"mergehistory-no-destination": "CÃlová stránka $1 neexistuje.",
@@ -1085,7 +1091,7 @@
"userrights-changeable-col": "Skupiny, které můžete mÄnit",
"userrights-unchangeable-col": "Skupiny, které nemůžete mÄnit",
"userrights-conflict": "Konflikt zmÄn uživatelských práv! Zkontrolujte a potvrÄte požadované zmÄny.",
- "userrights-removed-self": "ÃspÄÅ¡nÄ jste si odebrali vlastnà práva. TudÞ už nemáte k této stránce pÅÃstup.",
+ "userrights-removed-self": "Odebrali jste si vlastnà práva. TudÞ už nemáte k této stránce pÅÃstup.",
"group": "Skupina:",
"group-user": "Uživatelé",
"group-autoconfirmed": "Automaticky schválenà uživatelé",
@@ -1353,7 +1359,7 @@
"ignorewarning": "Ignorovat varovánà a naÄÃst soubor.",
"ignorewarnings": "Ignorovat vÅ¡echna varovánÃ",
"minlength1": "Jméno souboru musà mÃt alespoÅ jeden znak.",
- "illegalfilename": "Název souboru \"$1\" obsahuje znaky, které nejsou povoleny v názvech stránek. ProsÃm pÅejmenujte soubor a zkuste jej nahrát znovu.",
+ "illegalfilename": "Název souboru â$1â obsahuje znaky, které nejsou povoleny v názvech stránek. ProsÃm pÅejmenujte soubor a zkuste jej nahrát znovu.",
"filename-toolong": "Jména souborů nemohou být delšà než 240 bajtů.",
"badfilename": "Jméno souboru bylo zmÄnÄno na â$1â.",
"filetype-mime-mismatch": "PÅÃpona souboru â.$1â neodpovÃdá rozpoznanému MIME typu souboru ($2).",
@@ -1361,7 +1367,7 @@
"filetype-bad-ie-mime": "Nelze naÄÃst tento soubor, neboÅ¥ Internet Explorer by ho považoval za â$1â, což je nedovolený a potenciálnÄ nebezpeÄný typ souboru.",
"filetype-unwanted-type": "â.$1â''' je nežádoucà formát souborů. {{PLURAL:$3|UpÅednostÅovaný formát souborů je|UpÅednostÅované formáty souborů jsou}} $2.",
"filetype-banned-type": "'''â.$1â''' {{PLURAL:$4|je nedovolený formát souborů|jsou nedovolené formáty souborů}}.\n{{PLURAL:$3|Povolený formát souborů je|Povolené formáty souborů jsou}} $2.",
- "filetype-missing": "Soubor nemá pÅÃponu (napÅ. \".jpg\").",
+ "filetype-missing": "Soubor nemá pÅÃponu (napÅ. â.jpgâ).",
"empty-file": "NaÄtený soubor je prázdný.",
"file-too-large": "NaÄtený soubor je pÅÃliÅ¡ velký.",
"filename-tooshort": "Název souboru je pÅÃliÅ¡ krátký.",
@@ -1503,7 +1509,7 @@
"uploadstash-summary": "Tato stránka nabÃzà pÅÃstup k naÄteným (nebo právÄ naÄÃtaným) souborům, které dosud nejsou zveÅejnÄny na wiki. Tyto soubory se nezobrazà nikomu kromÄ uživatele, který je naÄetl.",
"uploadstash-clear": "Vymazat soubory ve skrýši",
"uploadstash-nofiles": "Ve skrýši nemáte žádné soubory.",
- "uploadstash-badtoken": "Operace se nezdaÅila, možná vyprÅ¡ela platnost vaÅ¡eho oprávnÄnà k editaci. Zkuste to znovu.",
+ "uploadstash-badtoken": "Operace se nezdaÅila. Možná vyprÅ¡ela platnost vaÅ¡eho oprávnÄnà k editaci. Zkuste to znovu.",
"uploadstash-errclear": "Soubory se nepodaÅilo vymazat.",
"uploadstash-refresh": "Aktualizovat seznam souborů",
"invalid-chunk-offset": "Neplatný posun bloku",
@@ -2017,6 +2023,7 @@
"changecontentmodel-nodirectediting": "Model obsahu $1 nepodporuje pÅÃmou editaci",
"log-name-contentmodel": "Kniha zmÄny modelů obsahu",
"log-description-contentmodel": "Události týkajÃcà se modelů obsahu stránek",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|založil|založila}} stránku $3 za použità nestandardnÃho modelu obsahu â$5â",
"logentry-contentmodel-change": "$1 {{GENDER:$2|zmÄnil|zmÄnila}} model obsahu stránky $3 z â$4â na â$5â",
"logentry-contentmodel-change-revertlink": "vrátit",
"logentry-contentmodel-change-revert": "vrácenà zpÄt",
@@ -2864,6 +2871,7 @@
"exif-copyrighted-true": "ChránÄno autorským právem",
"exif-copyrighted-false": "Bez informacà o autorských právech",
"exif-photometricinterpretation-1": "ÄernobÃlá (Äerná je 0)",
+ "exif-photometricinterpretation-4": "Maska průhlednosti",
"exif-unknowndate": "neznámé datum",
"exif-orientation-1": "NormálnÃ",
"exif-orientation-2": "VodorovnÄ pÅevráceno",
@@ -3296,7 +3304,7 @@
"tags-delete-not-allowed": "ZnaÄky definované rozÅ¡ÃÅenÃmi nelze smazat, leda by to pÅÃsluÅ¡né rozÅ¡ÃÅenà výslovnÄ umožnilo.",
"tags-delete-not-found": "ZnaÄka â$1â neexistuje.",
"tags-delete-too-many-uses": "ZnaÄkou â$1â {{PLURAL:$2|je oznaÄena vÃce než $2 revize|jsou oznaÄeny vÃce než $2 revize|je oznaÄeno vÃce než $2 revizÃ}}, což znamená, že ji nelze smazat.",
- "tags-delete-warnings-after-delete": "ZnaÄka â$1â byla úspÄÅ¡nÄ smazána, ale {{PLURAL:$1|bylo zjiÅ¡tÄno|byla zjiÅ¡tÄna}} následujÃcà varovánÃ:",
+ "tags-delete-warnings-after-delete": "ZnaÄka â$1â byla smazána, ale {{PLURAL:$2|bylo zjiÅ¡tÄno|byla zjiÅ¡tÄna}} následujÃcà varovánÃ:",
"tags-activate-title": "Aktivovat znaÄku",
"tags-activate-question": "Chystáte se aktivovat znaÄku â$1â.",
"tags-activate-reason": "Důvod:",
@@ -3335,7 +3343,7 @@
"tags-edit-reason": "Důvod:",
"tags-edit-revision-submit": "Aplikovat zmÄny na {{PLURAL:$1|tuto revizi|tyto $1 revize|tÄchto $1 revizÃ}}",
"tags-edit-logentry-submit": "Aplikovat zmÄny na {{PLURAL:$1|tento protokolovacà záznam|tyto $1 protokolovacà záznamy|tÄchto $1 protokolovacÃch záznamů}}",
- "tags-edit-success": "ZmÄny byly úspÄÅ¡nÄ aplikovány.",
+ "tags-edit-success": "ZmÄny byly aplikovány.",
"tags-edit-failure": "ZmÄny se nepodaÅilo provést:\n$1",
"tags-edit-nooldid-title": "Neplatná cÃlová revize",
"tags-edit-nooldid-text": "BuÄ jste nezadali žádnou cÃlovou revizi, na kterou by se tato funkce mÄla použÃt, nebo uvedená revize neexistuje.",
diff --git a/languages/i18n/cy.json b/languages/i18n/cy.json
index 16799cfd2e..07babc7611 100644
--- a/languages/i18n/cy.json
+++ b/languages/i18n/cy.json
@@ -1142,7 +1142,7 @@
"recentchanges-label-bot": "Golygwyd gan fot",
"recentchanges-label-unpatrolled": "Nid yw'r golygiad hwn wedi derbyn ymweliad patrôl eto",
"recentchanges-label-plusminus": "Newidiodd maint y dudalen o'r nifer hwn o feitiau",
- "recentchanges-legend-heading": "'''Allwedd:'''",
+ "recentchanges-legend-heading": "
Allwedd: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Isod rhestrir pob newid er
$3, $4 (ymddengys
$1 ohonynt).",
diff --git a/languages/i18n/da.json b/languages/i18n/da.json
index 59c1c23bc0..8263cf69e1 100644
--- a/languages/i18n/da.json
+++ b/languages/i18n/da.json
@@ -1235,7 +1235,7 @@
"recentchanges-label-bot": "Denne redigering blev udført af en bot",
"recentchanges-label-unpatrolled": "Denne redigering er endnu ikke blevet patruljeret",
"recentchanges-label-plusminus": "Størrelsen på siden blev ændret med dette antal bytes",
- "recentchanges-legend-heading": "'''Forklaring:'''",
+ "recentchanges-legend-heading": "
Forklaring: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|listen over nye sider]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.",
diff --git a/languages/i18n/de.json b/languages/i18n/de.json
index a3be6ef93a..5a33125866 100644
--- a/languages/i18n/de.json
+++ b/languages/i18n/de.json
@@ -227,6 +227,7 @@
"moredotdotdot": "Mehr â¦",
"morenotlisted": "Diese Liste ist nicht vollständig.",
"mypage": "Eigene Seite",
+ "anonuserpage": "Unbekannter Benutzer",
"mytalk": "Diskussion",
"anontalk": "Diskussionsseite",
"navigation": "Navigation",
@@ -526,7 +527,7 @@
"nocookieslogin": "{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer. Du hast Cookies deaktiviert, bitte aktiviere diese und versuche es erneut.",
"nocookiesfornew": "Das Benutzerkonto wurde nicht erstellt, da die Datenherkunft nicht ermittelt werden konnte.\nBitte stelle sicher, dass du Cookies aktiviert hast. Lade diese Seite danach erneut und versuche es noch einmal.",
"noname": "Du musst einen gültigen Benutzernamen angeben.",
- "loginsuccesstitle": "Anmeldung erfolgreich",
+ "loginsuccesstitle": "Angemeldet",
"loginsuccess": "
Du bist jetzt als â$1â bei {{SITENAME}} angemeldet. ",
"nosuchuser": "Der Benutzername â$1â existiert nicht.\nÃberprüfe die Schreibweise (GroÃ-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|lege ein neues Benutzerkonto an]].",
"nosuchusershort": "Der Benutzername â$1â ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
@@ -562,7 +563,7 @@
"createaccount-title": "Erstellung eines Benutzerkontos für {{SITENAME}}",
"createaccount-text": "Es wurde für dich ein Benutzerkonto â$2â auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für â$2â ist â$3â. Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
"login-throttled": "Du hast zu oft versucht, dich anzumelden.\nBitte warte $1, bevor du es erneut probierst.",
- "login-abort-generic": "Deine Anmeldung war nicht erfolgreich â Abgebrochen",
+ "login-abort-generic": "Deine Anmeldung ist fehlgeschlagen â Abgebrochen",
"login-migrated-generic": "Dein Benutzerkonto wurde migriert. Dein Benutzername ist auf diesem Wiki nicht mehr vorhanden.",
"loginlanguagelabel": "Sprache: $1",
"suspicious-userlogout": "Deine Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.",
@@ -582,7 +583,7 @@
"newpassword": "Neues Passwort:",
"retypenew": "Neues Passwort (nochmal):",
"resetpass_submit": "Passwort übermitteln und anmelden",
- "changepassword-success": "Dein Passwort wurde erfolgreich geändert!",
+ "changepassword-success": "Dein Passwort wurde geändert!",
"changepassword-throttled": "Du hast kürzlich zu viele Anmeldeversuche unternommen.\nBitte warte $1, bevor du es erneut versuchst.",
"botpasswords": "Botpasswörter",
"botpasswords-summary": "
Botpasswörter erlauben Zugriff auf ein Benutzerkonto über die API, ohne die Hauptanmeldeinformationen des Benutzerkontos zu verwenden. Die verfügbaren Benutzerrechte bei der Anmeldung mit einem Botpasswort können beschränkt sein.\n\nWenn du nicht weiÃt, warum du ein Passwort erstellen sollst, tu es nicht. Du solltest ein Passwort nie für einen anderen erzeugen und es an ihn übergeben.",
@@ -605,11 +606,11 @@
"botpasswords-insert-failed": "Der Botname â$1â konnte nicht hinzugefügt werden. Wurde er bereits hinzugefügt?",
"botpasswords-update-failed": "Der Botname â$1â konnte nicht aktualisiert werden. Wurde er gelöscht?",
"botpasswords-created-title": "Botpasswort erstellt",
- "botpasswords-created-body": "Das Botpasswort â$1â wurde erfolgreich erstellt.",
+ "botpasswords-created-body": "Das Botpasswort für den Botnamen â$1â des Benutzers â$2â wurde erstellt.",
"botpasswords-updated-title": "Botpasswort aktualisiert",
- "botpasswords-updated-body": "Das Botpasswort â$1â wurde erfolgreich aktualisiert.",
+ "botpasswords-updated-body": "Das Botpasswort für den Botnamen â$1â des Benutzers â$2â wurde aktualisiert.",
"botpasswords-deleted-title": "Botpasswort gelöscht",
- "botpasswords-deleted-body": "Das Botpasswort â$1â wurde gelöscht.",
+ "botpasswords-deleted-body": "Das Botpasswort für den Botnamen â$1â des Benutzers â$2â wurde gelöscht.",
"botpasswords-newpassword": "Das neue Passwort zur Anmeldung mit
$1 ist
$2 .
Bitte halte dies für die Zukunft fest. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider ist nicht verfügbar.",
"botpasswords-restriction-failed": "Beschränkungen des Botpassworts verhindern diese Anmeldung.",
@@ -619,7 +620,7 @@
"resetpass-no-info": "Du musst dich anmelden, um auf diese Seite direkt zuzugreifen.",
"resetpass-submit-loggedin": "Passwort ändern",
"resetpass-submit-cancel": "Abbrechen",
- "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.",
+ "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise hast du dein Passwort bereits geändert oder ein neues temporäres Passwort beantragt.",
"resetpass-recycled": "Bitte setze dein Passwort auf ein anderes Passwort als dein aktuelles fest.",
"resetpass-temp-emailed": "Du hast dich mit einem temporären E-Mail-Code angemeldet.\nUm die Anmeldung abzuschlieÃen, musst du jetzt ein neues Passwort festlegen:",
"resetpass-temp-password": "Temporäres Passwort:",
@@ -903,9 +904,9 @@
"revdelete-unsuppress": "Einschränkungen für wiederhergestellte Versionen aufheben",
"revdelete-log": "Grund:",
"revdelete-submit": "Auf gewählte {{PLURAL:$1|Version|Versionen}} anwenden",
- "revdelete-success": "'''Die Versionsansicht wurde aktualisiert.'''",
+ "revdelete-success": "Die Versionsansicht wurde aktualisiert.",
"revdelete-failure": "'''Die Versionssichtbarkeit konnte nicht aktualisiert werden:'''\n$1",
- "logdelete-success": "'''Logbuchansicht erfolgreich geändert.'''",
+ "logdelete-success": "Logbuchansicht geändert.",
"logdelete-failure": "'''Logbuchsichtbarkeit kann nicht geändert werden:'''\n$1",
"revdel-restore": "Sichtbarkeit ändern",
"pagehist": "Versionsgeschichte",
@@ -1135,7 +1136,7 @@
"userrights": "Benutzerrechte verwalten",
"userrights-lookup-user": "Gruppenzugehörigkeit verwalten",
"userrights-user-editname": "Benutzername:",
- "editusergroup": "{{GENDER:$1|Benutzerrechte}} bearbeiten",
+ "editusergroup": "{{GENDER:$1|Benutzergruppen}} verwalten",
"editinguser": "Ãndere Benutzerrechte {{GENDER:$1|des Benutzers|der Benutzerin}}
[[User:$1|$1]] $2",
"userrights-editusergroup": "Benutzer-Gruppenzugehörigkeit bearbeiten",
"saveusergroups": "{{GENDER:$1|Gruppenzugehörigkeit}} ändern",
@@ -1151,7 +1152,7 @@
"userrights-changeable-col": "Gruppenzugehörigkeit, die du ändern kannst",
"userrights-unchangeable-col": "Gruppenzugehörigkeit, die du nicht ändern kannst",
"userrights-conflict": "Benutzerrechteänderungskonflikt! Bitte überprüfe und bestätige deine Ãnderungen.",
- "userrights-removed-self": "Du hast deine eigenen Rechte erfolgreich entfernt. Du kannst nicht länger auf diese Seite zugreifen.",
+ "userrights-removed-self": "Du hast deine eigenen Rechte entfernt. Du kannst nicht länger auf diese Seite zugreifen.",
"group": "Gruppe:",
"group-user": "Benutzer",
"group-autoconfirmed": "Automatisch bestätigte Benutzer",
@@ -1216,7 +1217,7 @@
"right-editprotected": "Seiten bearbeiten, die als â{{int:protect-level-sysop}}â geschützt sind",
"right-editsemiprotected": "Seiten bearbeiten, die als â{{int:protect-level-autoconfirmed}}â geschützt sind",
"right-editcontentmodel": "Das Inhaltsmodell einer Seite bearbeiten",
- "right-editinterface": "Benutzeroberfläche bearbeiten",
+ "right-editinterface": "Systemnachrichten und Benutzeroberflächen bearbeiten",
"right-editusercssjs": "Fremde CSS- und JavaScript-Dateien bearbeiten",
"right-editusercss": "Fremde CSS-Dateien bearbeiten",
"right-edituserjs": "Fremde JavaScript-Dateien bearbeiten",
@@ -1237,8 +1238,8 @@
"right-patrolmarks": "Kontrollmarkierungen in den letzten Ãnderungen sehen",
"right-unwatchedpages": "Liste der unbeobachteten Seiten ansehen",
"right-mergehistory": "Versionsgeschichten von Seiten vereinen",
- "right-userrights": "Benutzerrechte bearbeiten",
- "right-userrights-interwiki": "Benutzerrechte in anderen Wikis bearbeiten",
+ "right-userrights": "Benutzerrechte verwalten",
+ "right-userrights-interwiki": "Benutzerrechte in anderen Wikis verwalten",
"right-siteadmin": "Datenbank sperren und entsperren",
"right-override-export-depth": "Exportiere Seiten einschlieÃlich verlinkter Seiten bis zu einer Tiefe von 5",
"right-sendemail": "E-Mails an andere Benutzer senden",
@@ -1314,7 +1315,7 @@
"action-autopatrol": "eigene Bearbeitungen als kontrolliert zu markieren",
"action-unwatchedpages": "die Liste der unbeobachteten Seiten einzusehen",
"action-mergehistory": "die Versionsgeschichten von Seiten zu vereinen",
- "action-userrights": "Benutzerrechte zu ändern",
+ "action-userrights": "Benutzerrechte zu verwalten",
"action-userrights-interwiki": "die Rechte von Benutzern in anderen Wikis zu ändern",
"action-siteadmin": "die Datenbank zu sperren oder freizugeben",
"action-sendemail": "E-Mails zu senden",
@@ -1570,8 +1571,8 @@
"uploadstash-summary": "Diese Seite ermöglicht den Zugriff auf Dateien, die hochgeladen wurden, bzw. gerade hochgeladen werden, aber noch nicht auf dem Wiki publiziert wurden. Die Dateien sind ausschlieÃlich für den hochladenden Benutzer einsehbar.",
"uploadstash-clear": "Die vorab gespeicherten Dateien entfernen",
"uploadstash-nofiles": "Es sind keine vorab gespeicherten Dateien vorhanden.",
- "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.",
- "uploadstash-errclear": "Das Entfernen der vorab gespeicherten Dateien war erfolglos.",
+ "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien ist fehlgeschlagen, da vielleicht deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.",
+ "uploadstash-errclear": "Das Entfernen der vorab gespeicherten Dateien ist fehlgeschlagen.",
"uploadstash-refresh": "Liste der Dateien aktualisieren",
"invalid-chunk-offset": "Ungültiger Startpunkt",
"img-auth-accessdenied": "Zugriff verweigert",
@@ -2081,12 +2082,14 @@
"changecontentmodel-title-label": "Seitentitel",
"changecontentmodel-model-label": "Neues Inhaltsmodell",
"changecontentmodel-reason-label": "Grund:",
+ "changecontentmodel-submit": "Ãndern",
"changecontentmodel-success-title": "Das Inhaltsmodell wurde geändert",
"changecontentmodel-success-text": "Der Inhaltstyp von [[:$1]] wurde geändert.",
"changecontentmodel-cannot-convert": "Der Inhalt von [[:$1]] kann nicht zum Typ $2 konvertiert werden.",
"changecontentmodel-nodirectediting": "Das Inhaltsmodell â$1â unterstützt keine direkten Bearbeitungen",
"log-name-contentmodel": "Inhaltsmodell-Ãnderungs-Logbuch",
"log-description-contentmodel": "Ereignisse bezüglich den Inhaltsmodellen einer Seite",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|erstellte}} die Seite $3 mit einem Nicht-Standard-Inhaltsmodell â$5â",
"logentry-contentmodel-change": "$1 {{GENDER:$2|änderte}} das Inhaltsmodell der Seite $3 von â$4â nach â$5â",
"logentry-contentmodel-change-revertlink": "zurücksetzen",
"logentry-contentmodel-change-revert": "zurücksetzen",
@@ -3338,7 +3341,7 @@
"tags-delete-not-allowed": "Markierungen, die von einer Erweiterung definiert werden, können nicht gelöscht werden, auÃer die Erweiterung erlaubt es ausdrücklich.",
"tags-delete-not-found": "Die Markierung â$1â ist nicht vorhanden.",
"tags-delete-too-many-uses": "Die Markierung â$1â wird bei mehr als {{PLURAL:$2|einer Version|$2 Versionen}} verwendet und kann deshalb nicht gelöscht werden.",
- "tags-delete-warnings-after-delete": "Die Markierung â$1â wurde erfolgreich gelöscht, aber die {{PLURAL:$2|folgende Warnung ist|folgenden Warnungen sind}} aufgetreten:",
+ "tags-delete-warnings-after-delete": "Die Markierung â$1â wurde gelöscht, aber die {{PLURAL:$2|folgende Warnung ist|folgenden Warnungen sind}} aufgetreten:",
"tags-activate-title": "Markierung aktivieren",
"tags-activate-question": "Du bist dabei, die Markierung â$1â zu aktivieren.",
"tags-activate-reason": "Grund:",
@@ -3377,7 +3380,7 @@
"tags-edit-reason": "Grund:",
"tags-edit-revision-submit": "Ãnderungen an {{PLURAL:$1|diese Version|$1 Versionen}} anwenden",
"tags-edit-logentry-submit": "Ãnderungen an {{PLURAL:$1|diesen Logbucheintrag|$1 Logbucheinträgen}} anwenden",
- "tags-edit-success": "Die Ãnderungen wurden erfolgreich angewandt.",
+ "tags-edit-success": "Die Ãnderungen wurden angewandt.",
"tags-edit-failure": "Die Ãnderungen konnten nicht angewandt werden:\n$1",
"tags-edit-nooldid-title": "Ungültige Zielversion",
"tags-edit-nooldid-text": "Du hast entweder keine Zielversion angegeben, für die diese Funktion ausgeführt werden soll oder die angegebene Version ist nicht vorhanden.",
diff --git a/languages/i18n/diq.json b/languages/i18n/diq.json
index b4ff483890..4625c89ea3 100644
--- a/languages/i18n/diq.json
+++ b/languages/i18n/diq.json
@@ -349,7 +349,7 @@
"delete-hook-aborted": "EsterıtıÅi terefê çengeli ra ibtal bi.\nQet tesrih beyan nêbi.",
"no-null-revision": "Qandé \"$1\" zew rewizyono newe névıraziya.",
"badtitle": "Sernameo xırabın",
- "badtitletext": "Sernamey pela ke Åıma waÅt, nêvêrd, thalo/vengo ya ki zıwano miyanêno Äelet gırêdae ya ki sernamey wiki.\nBeno ke, tede yew ya zi zêdê iÅareti estê ke sernaman de nêxebetiyenê.",
+ "badtitletext": "Sernameyê pela ke Åıma waÅt, nêvêrd, vengo ya zi zıwano miyanêno Äelet gırêdaye ya zi sernameyê wiki.\nBeno ke, tede yew ya zi zêdê iÅareti estê ke sernameyan de nêxebetiyenê.",
"perfcached": "Datay cı ver hazır biye. No semedê ra nıkayin niyo! tewr zaf {{PLURAL:$1|netice|$1 netice}} debêno de",
"perfcachedts": "Cêr de malumatê nımıteyi esti, demdê newe kerdıÅo peyın: $1. Tewr zaf {{PLURAL:$4|netice|$4 neticey cı}} debyayo de",
"querypage-no-updates": "RocanebiyayıÅê na pele nıka cadayiyê.\nDayiyi tiya nıka newe nêbenê.",
@@ -1136,7 +1136,7 @@
"recentchanges-label-bot": "Eno vurnayıŠterefê yew boti ra vıraziyo",
"recentchanges-label-unpatrolled": "Eno vurnayıŠhewna dewriya nêbiyo",
"recentchanges-label-plusminus": "Ebadê pele de bazê bayti de vayeyê cı",
- "recentchanges-legend-heading": "'''Kıtabek:'''",
+ "recentchanges-legend-heading": "
Kıtabek: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Lista pelanê neweyan]] zi bıvêne)",
"recentchanges-legend-plusminus": "''(±123)''",
"rcnotefrom": "Cêr de
$2 ra nata vurnayıÅiyê asenê (tewr vêÅi
$1 asenê).",
@@ -1768,7 +1768,7 @@
"rollbackfailed": "PeyserardıŠnêbi",
"cantrollback": "karbero peyin têna paÅt dayo, no semedi ra vuriyayiÅ tepiya nêgeriyeni.",
"alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}} hetê [[Special:Contributions/$2|{{int:contribslink}}]]) ra pelê ıney[[:$1]] de vurnayiÅ biyo u no vurnayiÅ tepiya nêgeriyeno;\nyewna ten pel de vurnayiÅ kerdo u pel tepiya nêgeriyeno.\n\noyo ke vurnayiÅo peyin kerdo: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
- "editcomment": "kılmnuÅteyê vurnayiÅibi:
$1 .",
+ "editcomment": "Xulasaya vurnayıÅi:
$1 .",
"revertpage": "Hetê [[Special:Contributions/$2|$2]] ([[User talk:$2|Mesac]]) ra vurnayiÅ biyo u ney vurnayiÅi tepiya geriyayo u no [[User:$1|$1]] kes o ke cuwa ver revizyon kerdo revizyonê no kesi tepiya anciyayo.",
"revertpage-nouser": "No keso ke vuriyayiÅ kerdo vuriyayiÅé{{GENDER:$1|[[User:$1|$1]]}} ker o",
"rollback-success": "vurnayiÅê no kesi $1 tepiya geriyayo u hetê no\n$2 kesi ra cıwa ver o ke revizyon biyo no revizyon tepiya anciyayo.",
diff --git a/languages/i18n/dsb.json b/languages/i18n/dsb.json
index 86b5f17105..0817b873d8 100644
--- a/languages/i18n/dsb.json
+++ b/languages/i18n/dsb.json
@@ -1114,7 +1114,7 @@
"recentchanges-label-bot": "ToÅ ta zmÄna jo se pÅez boÅik wuwjadÅa.",
"recentchanges-label-unpatrolled": "ToÅ ta zmÄna hyÅ¡Äi njejo se pÅekontrolÄrowaÅa",
"recentchanges-label-plusminus": "ZmÄnjona wjelikosc boka (licba bajtow)",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "
Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (glej teke [[Special:NewPages|lisÄinu nowych bokow]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "DoÅojce pokazuju se zmÄny wót
$2 (maks.
$1 zapisow).",
diff --git a/languages/i18n/dty.json b/languages/i18n/dty.json
index cba5f25edb..51104de12b 100644
--- a/languages/i18n/dty.json
+++ b/languages/i18n/dty.json
@@ -803,7 +803,7 @@
"recentchanges-label-bot": "यॠसमà¥à¤ªà¤¾à¤¦à¤¨ बà¥à¤à¤¬à¤ ॠà¤à¤°à¤¿à¤¯à¤¾à¤à¥ थà¥à¤¯à¥",
"recentchanges-label-unpatrolled": "यॠसमà¥à¤ªà¤¾à¤¦à¤¨ यà¥à¤²à¤¸à¤®à¥à¤® à¤à¤¸à¥à¤¤à¥ à¤à¤°à¤¿à¤¯à¤¾à¤à¥ नाà¤à¤¥à¥",
"recentchanges-label-plusminus": "यति बाà¤à¤à¤¹à¤°à¥ सà¤à¤à¥à¤¯à¤¾à¤²à¥ पानाà¤à¥ à¤à¤à¤¾à¤° फà¥à¤°à¤¬à¤¦à¤² à¤à¤¯à¤¾à¤à¥ à¤",
- "recentchanges-legend-heading": "'''à¤à¤¦à¤°à¥à¤¶ वाà¤à¥à¤¯:'''",
+ "recentchanges-legend-heading": "
à¤à¤¦à¤°à¥à¤¶ वाà¤à¥à¤¯: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नà¥à¤²à¤¾ पानाà¤à¥ सà¥à¤à¥]] यà¥à¤²à¤¾à¤ लॠहà¥à¤°à¤¿à¤¦à¤¿à¤¯)",
"rclistfrom": "$3 $2 दà¥à¤à¤¿à¤à¤¾ नयाठपरिवरà¥à¤¤à¤¨à¤¹à¤°à¥ दà¥à¤à¤¾à¤à¤¨à¥à¤¯à¤¾",
"rcshowhideminor": "$1 सानतिनॠसमà¥à¤ªà¤¾à¤¦à¤¨",
diff --git a/languages/i18n/egl.json b/languages/i18n/egl.json
index bc53c06ac1..388ad61600 100644
--- a/languages/i18n/egl.json
+++ b/languages/i18n/egl.json
@@ -1147,7 +1147,7 @@
"recentchanges-label-bot": "Cla mudéfica ché l'é stêda fâta da un bot.",
"recentchanges-label-unpatrolled": "Cla mudéfica ché an n'é mìa incòra stêda verifichêda.",
"recentchanges-label-plusminus": "Cambiamèint ed la pà gina in nómer ed byte",
- "recentchanges-legend-heading": "'''Spiegasiòun:'''",
+ "recentchanges-legend-heading": "
Spiegasiòun: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (guêrda [[Special:NewPages|al pà gini nÅvi]])",
"rcnotefrom": "Ché sòt a {{PLURAL:$5|gh'é la mudéfica fâta|gh'în al mudéfichi fâti}} a partîr da
$3,$4 (fîn a
$1 ).",
"rclistfrom": "Fà vèder al mudéfichi fâti a partîr da $3 $2",
diff --git a/languages/i18n/el.json b/languages/i18n/el.json
index df8a1c367f..16d8c33aad 100644
--- a/languages/i18n/el.json
+++ b/languages/i18n/el.json
@@ -1176,7 +1176,7 @@
"right-importupload": "ÎιÏαγÏγή ÏελίδÏν με ανÎβαÏμα αÏÏείοÏ
",
"right-patrol": "ΣήμανÏη εÏεξεÏγαÏιÏν άλλÏν ÏÏηÏÏÏν ÏÏ ÎµÎ»ÎµÎ³Î¼ÎνεÏ",
"right-autopatrol": "ÎÏ
ÏÏμαÏη ÏημείÏÏη ÏÏν εÏεξεÏγαÏιÏν ÏοÏ
Ï ÏÏ ÎµÎ»ÎµÎ³Î¼ÎνεÏ",
- "right-patrolmarks": "ÎείÏε ÏÎ¹Ï ÏημειÏÏÎµÎ¹Ï 'Ï
ÏÏ ÏαÏακολοÏθηÏη' ÏÏν ÏÏοÏÏάÏÏν αλλαγÏν",
+ "right-patrolmarks": "Î Ïοβολή ÏημάνÏεÏν ελÎγÏοÏ
ÏÏÏÏÏαÏÏν αλλαγÏν",
"right-unwatchedpages": "ÎείÏε μια λίÏÏα ÏελίδÏν ÏοÏ
δεν ÏαÏακολοÏ
θοÏνÏαι",
"right-mergehistory": "ΣÏ
γÏÏνεÏ
Ïη ÏοÏ
ιÏÏοÏÎ¹ÎºÎ¿Ï ÏÏν ÏελίδÏν",
"right-userrights": "ΤÏοÏοÏοίηÏη ÏλÏν ÏÏν δικαιÏμάÏÏν ÏÏηÏÏÏν",
@@ -2569,10 +2569,10 @@
"pageinfo-category-pages": "ÎÏιθμÏÏ ÏελίδÏν",
"pageinfo-category-subcats": "ÎÏιθμÏÏ Ï
ÏοκαÏηγοÏιÏν",
"pageinfo-category-files": "ÎÏιθμÏÏ Î±ÏÏείÏν",
- "markaspatrolleddiff": "Îα ÏημειÏθεί 'Ï
ÏÏ ÏαÏακολοÏθηÏη'",
+ "markaspatrolleddiff": "ΣήμανÏη ÏÏ ÎµÎ»ÎµÎ³Î¼Îνο",
"markaspatrolledtext": "ΣήμανÏη αÏ
ÏÎ®Ï ÏÎ·Ï ÏÎµÎ»Î¯Î´Î±Ï ÏÏ ÎµÎ»ÎµÎ³Î¼ÎνηÏ",
"markaspatrolledtext-file": "ÎÏιÏημάνεÏε αÏ
Ïή Ïη ÎκδοÏη ÏοÏ
αÏÏείοÏ
ÏÏ ÎµÎ»ÎµÎ³Î¼Îνη",
- "markedaspatrolled": "ΣημειÏμÎνο ÏÏ 'Ï
ÏÏ ÏαÏακολοÏθηÏη'",
+ "markedaspatrolled": "ΣημειÏθηκε ÏÏ ÎµÎ»ÎµÎ³Î¼Îνο",
"markedaspatrolledtext": "ΠεÏιλεγμÎνη αναθεÏÏηÏη ÏÎ·Ï [[:$1]] ÎÏει ÏημειÏθεί ÏÏ ÎµÎ»ÎµÎ³Î¼Îνη.",
"rcpatroldisabled": "ΠλειÏοÏ
Ïγία 'ΠαÏακολοÏθηÏη Î ÏÏÏÏαÏÏν ÎλλαγÏν' ÎÏει αÏενεÏγοÏοιηθεί.",
"rcpatroldisabledtext": "ΠλειÏοÏ
Ïγία 'ΠαÏακολοÏθηÏη Î ÏÏÏÏαÏÏν ÎλλαγÏν' είναι αÏ
Ïή Ïη ÏÏιγμή αÏενεÏγοÏοιημÎνη.",
@@ -2582,8 +2582,8 @@
"markedaspatrollednotify": "ÎÏ
Ïή η αλλαγή Ïε $1 ÎÏει εÏιÏημανθεί ÏÏ ÎµÎ»ÎµÎ³Î¼Îνη.",
"markedaspatrollederrornotify": "ΣήμανÏη ÏÏ ÎµÎ»ÎµÎ³Î¼Îνη αÏÎÏÏ
Ïε.",
"patrol-log-page": "ÎÏÏείο καÏαγÏαÏÎ®Ï ÏεÏιÏολιÏν",
- "patrol-log-header": "ÎÏ
ÏÏÏ ÎµÎ¯Î½Î±Î¹ ÎÎ½Î±Ï ÎºÎ±ÏÎ¬Î»Î¿Î³Î¿Ï ÏεÏιÏολοÏμενÏν αναθεÏÏήÏεÏν.",
- "log-show-hide-patrol": "$1 καÏαγÏαÏή εÏιÏήÏηÏηÏ",
+ "patrol-log-header": "ÎÏ
ÏÏ ÎµÎ¯Î½Î±Î¹ μηÏÏÏο ελεγμÎνÏν αναθεÏÏήÏεÏν.",
+ "log-show-hide-patrol": "$1 μηÏÏÏοÏ
ελÎγÏοÏ
εÏεξεÏγαÏιÏν",
"log-show-hide-tag": "$1 εÏικÎÏÏα καÏαγÏαÏήÏ",
"deletedrevision": "Î Ïαλιά ÎκδοÏη ÏÎ·Ï $1 διαγÏάÏÏηκε",
"filedeleteerror-short": "ΣÏάλμα καÏά Ïη διαγÏαÏή ÏοÏ
αÏÏείοÏ
: $1",
@@ -3318,7 +3318,7 @@
"logentry-move-move_redir": "{{GENDER:$2|Î|Î}} $1 μεÏακίνηÏε Ïη Ïελίδα $3 ÏÏην $4 ÏÎ¬Î½Ï Î±ÏÏ Ïην ανακαÏεÏθÏ
νÏη",
"logentry-move-move_redir-noredirect": "{{GENDER:$2|Î|Î}} $1 μεÏακίνηÏε Ïην Ïελίδα $3 ÏÏην $4 ÏÎ¬Î½Ï Î±ÏÏ Î¼Î¹Î± ανακαÏεÏθÏ
νÏη ÏÏÏÎ¯Ï Î½Î± αÏήÏει ανακαÏεÏθÏ
νÏη",
"logentry-patrol-patrol": "{{GENDER:$2|Î|Î}} $1 εÏιÏήμανε Ïην ÎκδοÏη $4 ÏÎ·Ï ÏÎµÎ»Î¯Î´Î±Ï $3 ÏÏ ÎµÎ»ÎµÎ³Î¼Îνη",
- "logentry-patrol-patrol-auto": "{{GENDER:$2|Î|Î}} $1 αÏ
ÏÏμαÏα Ïήμανε Ïην ÎκδοÏη $4 ÏÎ·Ï ÏÎµÎ»Î¯Î´Î±Ï $3 ÏÏ ÎµÎ»ÎµÎ³Î¼Îνη",
+ "logentry-patrol-patrol-auto": "{{GENDER:$2|Î|Î}} $1 αÏ
ÏÏμαÏα ÏημείÏÏε Ïην ÎκδοÏη $4 ÏÎ·Ï ÏÎµÎ»Î¯Î´Î±Ï $3 ÏÏ ÎµÎ»ÎµÎ³Î¼Îνη",
"logentry-newusers-newusers": "ΠλογαÏιαÏμÏÏ ÏÏήÏÏη $1 {{GENDER:$2|δημιοÏ
Ïγήθηκε}}",
"logentry-newusers-create": "ΠλογαÏιαÏμÏÏ ÏÏήÏÏη $1 {{GENDER:$2|δημιοÏ
Ïγήθηκε}}",
"logentry-newusers-create2": "ΠλογαÏιαÏμÏÏ ÏÏήÏÏη $3 δημιοÏ
Ïγήθηκε αÏÏ {{GENDER:$2|Ïον|Ïην}} $1",
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 115b66f26a..5b32b978df 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -143,6 +143,7 @@
"moredotdotdot": "More...",
"morenotlisted": "This list is not complete.",
"mypage": "Page",
+ "anonuserpage": "Unknown user",
"mytalk": "Talk",
"anontalk": "Talk",
"navigation": "Navigation",
@@ -468,7 +469,7 @@
"nocookiesfornew": "The user account was not created, as we could not confirm its source.\nEnsure you have cookies enabled, reload this page and try again.",
"nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "You have not specified a valid username.",
- "loginsuccesstitle": "Login successful",
+ "loginsuccesstitle": "Logged in",
"loginsuccess": "
You are now logged in to {{SITENAME}} as \"$1\". ",
"nosuchuser": "There is no user by the name \"$1\".\nUsernames are case sensitive.\nCheck your spelling, or [[Special:UserLogin/signup|create a new account]].",
"nosuchusershort": "There is no user by the name \"$1\".\nCheck your spelling.",
@@ -508,7 +509,7 @@
"createaccount-title": "Account creation for {{SITENAME}}",
"createaccount-text": "Someone created an account for your email address on {{SITENAME}} ($4) named \"$2\", with password \"$3\".\nYou should log in and change your password now.\n\nYou may ignore this message, if this account was created in error.",
"login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
- "login-abort-generic": "Your login was unsuccessful - Aborted",
+ "login-abort-generic": "Your login failed - Aborted",
"login-migrated-generic": "Your account has been migrated, and your username no longer exist on this wiki.",
"loginlanguagelabel": "Language: $1",
"loginlanguagelinks": "* {{#language:de}}|de\n* {{#language:en}}|en\n* {{#language:eo}}|eo\n* {{#language:fr}}|fr\n* {{#language:es}}|es\n* {{#language:it}}|it\n* {{#language:nl}}|nl",
@@ -532,7 +533,7 @@
"newpassword": "New password:",
"retypenew": "Retype new password:",
"resetpass_submit": "Set password and log in",
- "changepassword-success": "Your password has been changed successfully!",
+ "changepassword-success": "Your password has been changed!",
"changepassword-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
"botpasswords": "Bot passwords",
"botpasswords-summary": "
Bot passwords allow access to a user account via the API without using the account's main login credentials. The user rights available when logged in with a bot password may be restricted.\n\nIf you don't know why you might want to do this, you should probably not do it. No one should ever ask you to generate one of these and give it to them.",
@@ -555,11 +556,11 @@
"botpasswords-insert-failed": "Failed to add bot name \"$1\". Was it already added?",
"botpasswords-update-failed": "Failed to update bot name \"$1\". Was it deleted?",
"botpasswords-created-title": "Bot password created",
- "botpasswords-created-body": "The bot password \"$1\" was created successfully.",
+ "botpasswords-created-body": "The bot password for bot name \"$1\" of user \"$2\" was created.",
"botpasswords-updated-title": "Bot password updated",
- "botpasswords-updated-body": "The bot password \"$1\" was updated successfully.",
+ "botpasswords-updated-body": "The bot password for bot name \"$1\" of user \"$2\" was updated.",
"botpasswords-deleted-title": "Bot password deleted",
- "botpasswords-deleted-body": "The bot password \"$1\" was deleted.",
+ "botpasswords-deleted-body": "The bot password for bot name \"$1\" of user \"$2\" was deleted.",
"botpasswords-newpassword": "The new password to log in with
$1 is
$2 .
Please record this for future reference. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider is not available.",
"botpasswords-restriction-failed": "Bot password restrictions prevent this login.",
@@ -569,7 +570,7 @@
"resetpass-no-info": "You must be logged in to access this page directly.",
"resetpass-submit-loggedin": "Change password",
"resetpass-submit-cancel": "Cancel",
- "resetpass-wrong-oldpass": "Invalid temporary or current password.\nYou may have already successfully changed your password or requested a new temporary password.",
+ "resetpass-wrong-oldpass": "Invalid temporary or current password.\nYou may have already changed your password or requested a new temporary password.",
"resetpass-recycled": "Please reset your password to something other than your current password.",
"resetpass-temp-emailed": "You logged in with a temporary emailed code.\nTo finish logging in, you must set a new password here:",
"resetpass-temp-password": "Temporary password:",
@@ -870,9 +871,9 @@
"revdelete-unsuppress": "Remove restrictions on restored revisions",
"revdelete-log": "Reason:",
"revdelete-submit": "Apply to selected {{PLURAL:$1|revision|revisions}}",
- "revdelete-success": "Revision visibility successfully updated.",
+ "revdelete-success": "Revision visibility updated.",
"revdelete-failure": "Revision visibility could not be updated:\n$1",
- "logdelete-success": "Log visibility successfully set.",
+ "logdelete-success": "Log visibility set.",
"logdelete-failure": "Log visibility could not be set:\n$1",
"revdel-restore": "change visibility",
"pagehist": "Page history",
@@ -1130,7 +1131,7 @@
"userrights-unchangeable-col": "Groups you cannot change",
"userrights-irreversible-marker": "$1*",
"userrights-conflict": "Conflict of user rights changes! Please review and confirm your changes.",
- "userrights-removed-self": "You successfully removed your own rights. As such, you are no longer able to access this page.",
+ "userrights-removed-self": "You removed your own rights. As such, you are no longer able to access this page.",
"group": "Group:",
"group-user": "Users",
"group-autoconfirmed": "Autoconfirmed users",
@@ -1561,8 +1562,8 @@
"uploadstash-summary": "This page provides access to files that are uploaded or in the process of uploading, but are not yet published to the wiki. These files are not visible to anyone but the user who uploaded them.",
"uploadstash-clear": "Clear stashed files",
"uploadstash-nofiles": "You have no stashed files.",
- "uploadstash-badtoken": "Performing of that action was unsuccessful, perhaps because your editing credentials expired. Try again.",
- "uploadstash-errclear": "Clearing the files was unsuccessful.",
+ "uploadstash-badtoken": "Performing that action failed. Perhaps because your editing credentials expired. Please try again.",
+ "uploadstash-errclear": "Clearing the files failed.",
"uploadstash-refresh": "Refresh the list of files",
"invalid-chunk-offset": "Invalid chunk offset",
"img-auth-accessdenied": "Access denied",
@@ -2127,6 +2128,7 @@
"changecontentmodel-title-label": "Page title",
"changecontentmodel-model-label": "New content model",
"changecontentmodel-reason-label": "Reason:",
+ "changecontentmodel-submit": "Change",
"changecontentmodel-success-title": "The content model was changed",
"changecontentmodel-success-text": "The content type of [[:$1]] has been changed.",
"changecontentmodel-cannot-convert": "The content on [[:$1]] cannot be converted to a type of $2.",
@@ -3657,7 +3659,7 @@
"tags-delete-not-allowed": "Tags defined by an extension cannot be deleted unless the extension specifically allows it.",
"tags-delete-not-found": "The tag \"$1\" does not exist.",
"tags-delete-too-many-uses": "The tag \"$1\" is applied to more than $2 {{PLURAL:$2|revision|revisions}}, which means it cannot be deleted.",
- "tags-delete-warnings-after-delete": "The tag \"$1\" was deleted successfully, but the following {{PLURAL:$2|warning was|warnings were}} encountered:",
+ "tags-delete-warnings-after-delete": "The tag \"$1\" was deleted, but the following {{PLURAL:$2|warning was|warnings were}} encountered:",
"tags-activate-title": "Activate tag",
"tags-activate-question": "You are about to activate the tag \"$1\".",
"tags-activate-reason": "Reason:",
@@ -3698,7 +3700,7 @@
"tags-edit-reason": "Reason:",
"tags-edit-revision-submit": "Apply changes to {{PLURAL:$1|this revision|$1 revisions}}",
"tags-edit-logentry-submit": "Apply changes to {{PLURAL:$1|this log entry|$1 log entries}}",
- "tags-edit-success": "The changes were successfully applied.",
+ "tags-edit-success": "The changes were applied.",
"tags-edit-failure": "The changes could not be applied:\n$1",
"tags-edit-nooldid-title": "Invalid target revision",
"tags-edit-nooldid-text": "You have either not specified any target revision on which to perform this function, or the specified revision does not exist.",
diff --git a/languages/i18n/eo.json b/languages/i18n/eo.json
index 148f851083..44f361ef44 100644
--- a/languages/i18n/eo.json
+++ b/languages/i18n/eo.json
@@ -1894,7 +1894,7 @@
"rollbackfailed": "Malfaro malsukcesis",
"cantrollback": "Ne povas restarigi antaÅan redakton; la redaktinto lasta estas la sola aÅtoro de la paÄo.",
"alreadyrolled": "Ne povas restarigi la lastan redakton de [[:$1]] de la [[User:$2|$2]] ([[User talk:$2|diskuto]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\npro tio, ke oni intertempe redaktis aÅ restarigis la paÄon.\nLa lasta redaktinto estis [[User:$3|$3]] ([[User talk:$3|diskuto]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
- "editcomment": "La resumo de la komento estis:
$1 .",
+ "editcomment": "La resumo de la redakto estis:
$1 .",
"revertpage": "Malfaris redaktojn de [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuto]]) al la lasta versio de [[User:$1|$1]]",
"revertpage-nouser": "Restarigis redaktojn de (salutnomo forigita) al lasta revizio de {{GENDER:$1|[[User:$1|$1]]}}",
"rollback-success": "Restaris redaktojn de $1; ÅanÄis al lasta versio de $2.",
@@ -3395,7 +3395,7 @@
"limitreport-expansiondepth": "Plej alta profundeco de etendo",
"limitreport-expensivefunctioncount": "Nombro de kostaj sintaks-analizilaj funkcioj",
"expandtemplates": "Åablonetendilo",
- "expand_templates_intro": "Äi tiu speciala paÄo traktas tekston kaj ampleksigas Äiujn Åablonojn en Äi rekursie.\nÄi ankaÅ ampleksigas sintaksajn funkciojn kiel\n
{{ #language:â¦}}
kaj variablojn kiel\n
{{ CURRENTDAY}}
. Fakte preskaÅ iujn ajn en duoblaj krampoj.",
+ "expand_templates_intro": "Äi tiu speciala paÄo prenas tekston kaj rikure etendas Äiujn Åablonojn en Äi.\nÄi etendas ankaÅ sintaksajn funkciojn kiel\n
{{ #language:â¦}}
kaj variablojn kiel\n
{{ CURRENTDAY}}
.\nFakte, Äi etendas preskaÅ Äion en duoblaj krampoj.",
"expand_templates_title": "Kunteksta titolo, por {{FULLPAGENAME}}, ktp.:",
"expand_templates_input": "Enigita teksto:",
"expand_templates_output": "Rezulto",
diff --git a/languages/i18n/es.json b/languages/i18n/es.json
index 79e1cfd8f5..f5a40c38ae 100644
--- a/languages/i18n/es.json
+++ b/languages/i18n/es.json
@@ -366,7 +366,7 @@
"currentevents": "Actualidad",
"currentevents-url": "Project:Actualidad",
"disclaimers": "Aviso legal",
- "disclaimerpage": "Project:Limitación general de responsabilidad",
+ "disclaimerpage": "Project:Descargo general",
"edithelp": "Ayuda de edición",
"helppage-top-gethelp": "Ayuda",
"mainpage": "Página principal",
@@ -612,7 +612,7 @@
"createaccount-title": "Creación de cuenta para {{SITENAME}}",
"createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor, accede ahora y cambia tu contraseña.\n\nSi esta cuenta fue creada por error, ignora este mensaje.",
"login-throttled": "Has intentado iniciar sesión demasiadas veces seguidas. Por favor espera $1 antes de intentarlo nuevamente.",
- "login-abort-generic": "Se ha intentado acceder sin éxito - Cancelado",
+ "login-abort-generic": "Falló el inicio de sesión - Cancelado",
"login-migrated-generic": "Se ha trasladado tu cuenta. Tu nombre de usuario ya no existe en este wiki.",
"loginlanguagelabel": "Idioma: $1",
"suspicious-userlogout": "Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.",
@@ -632,7 +632,7 @@
"newpassword": "Contraseña nueva:",
"retypenew": "Confirmar la contraseña nueva:",
"resetpass_submit": "Establecer contraseña e iniciar sesión",
- "changepassword-success": "La contraseña se modificó correctamente.",
+ "changepassword-success": "Se modificó la contraseña.",
"changepassword-throttled": "Has intentado acceder demasiadas veces recientemente.\nEspera $1 antes de intentarlo de nuevo.",
"botpasswords": "Contraseñas de bots",
"botpasswords-summary": "Las
contraseñas de bots permiten el acceso a una cuenta de usuario mediante la API sin usar las credenciales principales de la cuenta. Los derechos de un usuario mientras haya iniciado sesión con una contraseña de bot pueden estar restringidos.\n\nSi no sabes por qué querrÃas hacer esto, probablemente no deberÃas hacerlo. Nadie deberÃa pedirte que generes una de estas claves y que se la entregues.",
@@ -654,11 +654,11 @@
"botpasswords-insert-failed": "No se pudo agregar el nombre del bot \"$1\". ¿Ya ha sido añadido?",
"botpasswords-update-failed": "No se pudo actualizar el nombre del bot \"$1\". ¿Ha sido borrado?",
"botpasswords-created-title": "Se creó la contraseña de bot",
- "botpasswords-created-body": "La contraseña de bot \"$1\" se creó correctamente.",
- "botpasswords-updated-title": "La contraseña de bot ha sido actualizada",
- "botpasswords-updated-body": "La contraseña de bot\"$1\" se actualizó correctamente.",
- "botpasswords-deleted-title": "La contraseña de bot ha sido eliminada",
- "botpasswords-deleted-body": "La contraseña de bot \"$1\" ha sido eliminada.",
+ "botpasswords-created-body": "Se creó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
+ "botpasswords-updated-title": "Se actualizó la contraseña de bot",
+ "botpasswords-updated-body": "Se actualizó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
+ "botpasswords-deleted-title": "Se eliminó la contraseña de bot",
+ "botpasswords-deleted-body": "Se eliminó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
"botpasswords-newpassword": "La nueva contraseña para iniciar sesión con
$1 es
$2 .
Conserva estos datos para usos futuros. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider no está disponible.",
"botpasswords-restriction-failed": "Las restricciones de la contraseña de bot impiden este inicio de sesión.",
@@ -668,7 +668,7 @@
"resetpass-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
"resetpass-submit-loggedin": "Cambiar contraseña",
"resetpass-submit-cancel": "Cancelar",
- "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado exitosamente tu contraseña o que hayas pedido una nueva contraseña temporal.",
+ "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado tu contraseña o que hayas pedido una nueva contraseña temporal.",
"resetpass-recycled": "Restablece tu contraseña a algo distinto de tu contraseña actual.",
"resetpass-temp-emailed": "Has iniciado sesión con una contraseña temporal enviada por correo electrónico.\nPara continuar, debes establecer una nueva contraseña aquÃ:",
"resetpass-temp-password": "Contraseña temporal:",
@@ -952,9 +952,9 @@
"revdelete-unsuppress": "Eliminar restricciones de las revisiones restauradas",
"revdelete-log": "Motivo:",
"revdelete-submit": "Aplicar a {{PLURAL:$1|la revisión seleccionada|las revisiones seleccionadas}}",
- "revdelete-success": "Se ha cambiado con éxito la visibilidad de las revisiones.",
+ "revdelete-success": "Se cambió la visibilidad de las revisiones.",
"revdelete-failure": "No se ha podido cambiar la visibilidad de las revisiones:\n$1",
- "logdelete-success": "Se ha cambiado con éxito la visibilidad de los eventos.",
+ "logdelete-success": "Se cambió la visibilidad de los registros.",
"logdelete-failure": "No se pudo cambiar la visibilidad de los eventos:\n$1",
"revdel-restore": "cambiar visibilidad",
"pagehist": "Historial de la página",
@@ -1194,7 +1194,7 @@
"userrights-changeable-col": "Grupos que puedes cambiar",
"userrights-unchangeable-col": "Grupos que no puedes cambiar",
"userrights-conflict": "¡Conflicto de cambio de los permisos de usuario! Por favor, revisa y confirma tus cambios.",
- "userrights-removed-self": "Has eliminado con éxito tus propios permisos. Por tanto, ya no podrás volver a acceder a esta página.",
+ "userrights-removed-self": "Has eliminado tus propios permisos. Por tanto, ya no podrás volver a acceder a esta página.",
"group": "Grupo:",
"group-user": "Usuarios",
"group-autoconfirmed": "Autoconfirmados",
@@ -1382,7 +1382,7 @@
"recentchanges-label-bot": "Esta edición fue realizada por un robot",
"recentchanges-label-unpatrolled": "Esta edición aún no ha sido verificada",
"recentchanges-label-plusminus": "El tamaño de la página cambió esta cantidad de bytes",
- "recentchanges-legend-heading": "'''Leyenda:'''",
+ "recentchanges-legend-heading": "
Leyenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
"recentchanges-submit": "Mostrar",
"rcnotefrom": "Debajo aparece{{PLURAL:$5| el cambio|n los cambios}} desde
$3, $4 (se muestran hasta
$1 ).",
@@ -1609,7 +1609,7 @@
"uploadstash-clear": "Borrar los ficheros escondidos",
"uploadstash-nofiles": "No tienes archivos escondidos.",
"uploadstash-badtoken": "No se pudo realizar la acción. Es posible que haya finalizado el tiempo de espera de la sesión. Inténtalo de nuevo.",
- "uploadstash-errclear": "El borrado de los archivos no tuvo éxito.",
+ "uploadstash-errclear": "Falló el borrado de los archivos.",
"uploadstash-refresh": "Actualizar la lista de archivos",
"invalid-chunk-offset": "Desplazamiento inválido del fragmento",
"img-auth-accessdenied": "Acceso denegado",
@@ -2110,12 +2110,14 @@
"changecontentmodel-title-label": "TÃtulo de página",
"changecontentmodel-model-label": "Modelo de contenido nuevo",
"changecontentmodel-reason-label": "Motivo:",
+ "changecontentmodel-submit": "Cambiar",
"changecontentmodel-success-title": "Se cambió el modelo de contenido",
"changecontentmodel-success-text": "Se ha cambiado el tipo de contenido de [[:$1]].",
"changecontentmodel-cannot-convert": "El contenido de [[:$1]] no se puede convertir a un tipo de $2.",
"changecontentmodel-nodirectediting": "El modelo de contenido $1 no admite la edición directa",
"log-name-contentmodel": "Registro de cambios del modelo de contenido",
"log-description-contentmodel": "Eventos relacionados con los modelos de contenido de una página",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|creó}} la página $3 usando un modelo de contenido no predeterminado \"$5\"",
"logentry-contentmodel-change": "$1 {{GENDER:$2|cambió}} el modelo de contenido de la página $3 de \"$4\" a \"$5\"",
"logentry-contentmodel-change-revertlink": "revertir",
"logentry-contentmodel-change-revert": "revertir",
@@ -2950,7 +2952,7 @@
"exif-attributionurl": "Cuando reutilices este trabajo, por favor enlaza a",
"exif-preferredattributionname": "Al volver a utilizar este trabajo, por favor da crédito",
"exif-pngfilecomment": "Comentario de archivo PNG",
- "exif-disclaimer": "Aviso legal",
+ "exif-disclaimer": "Descargo",
"exif-contentwarning": "Advertencia de contenido",
"exif-giffilecomment": "Comentario de archivo GIF",
"exif-intellectualgenre": "Tipo de elemento",
@@ -3351,7 +3353,7 @@
"tags-delete-not-allowed": "No se pueden eliminar las etiquetas definidas por una extensión, a menos que esta lo permita expresamente.",
"tags-delete-not-found": "La etiqueta «$1» no existe.",
"tags-delete-too-many-uses": "No se puede borrar la etiqueta \"$1\" porque se ha aplicado a más de {{PLURAL:$2|una revisión|$2 revisiones}}.",
- "tags-delete-warnings-after-delete": "La etiqueta \"$1\" se borró exitosamente, pero con {{PLURAL:$2|la siguiente advertencia|las siguientes advertencias}}:",
+ "tags-delete-warnings-after-delete": "La etiqueta \"$1\" se borró, pero con {{PLURAL:$2|la siguiente advertencia|las siguientes advertencias}}:",
"tags-activate-title": "Activar etiqueta",
"tags-activate-question": "Estás a punto de activar la etiqueta «$1».",
"tags-activate-reason": "Motivo:",
@@ -3388,7 +3390,7 @@
"tags-edit-reason": "Motivo:",
"tags-edit-revision-submit": "Aplicar los cambios a {{PLURAL:$1|esta revisión|$1 revisiones}}",
"tags-edit-logentry-submit": "Aplicar los cambios a {{PLURAL:$1|esta entrada del registro|$1 entradas del registro}}",
- "tags-edit-success": "Los cambios se aplicaron con éxito.",
+ "tags-edit-success": "Se aplicaron los cambios.",
"tags-edit-failure": "No se pudieron aplicar los cambios:\n$1",
"tags-edit-nooldid-title": "Revisión de página no válida",
"tags-edit-nooldid-text": "No se especificó ninguna revisión en que realizar esta acción, o bien, la revisión especificada no existe.",
diff --git a/languages/i18n/et.json b/languages/i18n/et.json
index 4e95038a68..5ce19556b4 100644
--- a/languages/i18n/et.json
+++ b/languages/i18n/et.json
@@ -1228,7 +1228,7 @@
"recentchanges-label-bot": "Roboti tehtud muudatus",
"recentchanges-label-unpatrolled": "Seda muudatust ei ole veel kontrollitud",
"recentchanges-label-plusminus": "Lehekülje suuruse muutus baitides",
- "recentchanges-legend-heading": "'''Seletus:'''",
+ "recentchanges-legend-heading": "
Seletus: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vaata ka [[Special:NewPages|uute lehekülgede loendit]])",
"recentchanges-submit": "Näita",
"rcnotefrom": "Allpool on toodud {{PLURAL:$5|muudatus|muudatused}} alates:
$3, kell $4 (näidatakse kuni
$1 muudatust)",
diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json
index 5659fd0d7c..e99ed78f69 100644
--- a/languages/i18n/eu.json
+++ b/languages/i18n/eu.json
@@ -1144,7 +1144,7 @@
"recentchanges-label-bot": "Aldaketa hau bot batek egin du",
"recentchanges-label-unpatrolled": "Aldaketa hau ez da oraindik patruilatua izan",
"recentchanges-label-plusminus": "Orriaren neurriak byte kopuru honen gorabehera izan du",
- "recentchanges-legend-heading": "'''Azalpenak:'''",
+ "recentchanges-legend-heading": "
Azalpenak: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ikus, gainera, [[Special:NewPages|orri berrien zerrenda]])",
"recentchanges-submit": "Erakutsi",
"rcnotefrom": "Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira:
$2 (gehienez
$1 erakusten dira).",
diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json
index a6a56528a7..9d76b8047c 100644
--- a/languages/i18n/fa.json
+++ b/languages/i18n/fa.json
@@ -50,7 +50,8 @@
"MRG90",
"Mahdy Saffar",
"Arian Ar",
- "Ms96"
+ "Ms96",
+ "Freshman404"
]
},
"tog-underline": "خط Ú©Ø´Ûد٠زÛر Ù¾ÛÙÙدÙا:",
@@ -492,7 +493,7 @@
"nocookieslogin": "{{SITENAME}} Ø¨Ø±Ø§Û ÙرÙد کاربرا٠ب٠ساÙ
اÙ٠از Ú©ÙÚ©ÛâÙا استÙاد٠Ù
ÛâÚ©Ùد.\nØ´Ù
ا Ú©ÙÚ©ÛâÙا را از کار اÙداختÙâاÛد.\nÙØ·Ùا٠کÙÚ©ÛâÙا را ب٠کار بÛÙدازÛد ٠دÙبار٠اÙ
تØا٠کÙÛد.",
"nocookiesfornew": "Øساب Ú©Ø§Ø±Ø¨Ø±Û Ø³Ø§Ø®ØªÙ ÙØ´Ø¯Ø Ø²Ûرا ÙتÙاÙستÛÙ
Ù
Ùبع آ٠را تأÛÛد Ú©ÙÛÙ
.\nÙ
Ø·Ù
ئ٠شÙÛد Ú©Ù Ú©ÙÚ©ÛâÙا Ùعا٠ÙستÙØ¯Ø Ø¢Ùâگا٠صÙØ٠را از Ù٠بارگÛØ±Û Ú©ÙÛد ٠دÙبار٠اÙ
تØا٠کÙÛد.",
"noname": "Ø´Ù
ا ÙاÙ
Ú©Ø§Ø±Ø¨Ø±Û Ù
Ø¹ØªØ¨Ø±Û Ù
شخص ÙکردÙâاÛد.",
- "loginsuccesstitle": "ÙرÙد Ù
ÙÙÙÛتâØ¢Ù
Ûز ب٠ساÙ
اÙÙ",
+ "loginsuccesstitle": "ÙرÙد ب٠ساÙ
اÙÙ",
"loginsuccess": "'''Ø´Ù
ا اکÙÙ٠با ÙاÙ
«$1» ب٠{{SITENAME}} Ùارد شدÙâاÛد.'''",
"nosuchuser": "Ú©Ø§Ø±Ø¨Ø±Û Ø¨Ø§ ÙاÙ
«$1» ÙجÙد Ùدارد.\nÙاÙ
Ú©Ø§Ø±Ø¨Ø±Û Ø¨Ù Ø¨Ø²Ø±Ú¯Û Ù Ú©ÙÚÚ©Û ØرÙÙ Øساس است.\nاÙ
ÙØ§Û ÙاÙ
را Ø¨Ø±Ø±Ø³Û Ú©ÙÛØ¯Ø Ûا [[Special:UserLogin/signup|ÛÚ© Øساب Ú©Ø§Ø±Ø¨Ø±Û ØªØ§Ø²Ù Ø¨Ø³Ø§Ø²Ûد]].",
"nosuchusershort": "ÙÛÚ Ú©Ø§Ø±Ø¨Ø±Û Ø¨Ø§ ÙاÙ
''$1'' ÙجÙد Ùدارد.\nاÙ
ÙاÛتا٠را ÙØ§Ø±Ø³Û Ú©ÙÛد.",
@@ -548,7 +549,7 @@
"newpassword": "گذرÙاÚÙ٠تازÙ:",
"retypenew": "گذرÙاÚÙ٠تاز٠را دÙبار٠Ùارد Ú©ÙÛد",
"resetpass_submit": "تÙظÛÙ
گذرÙاÚÙ Ù ÙرÙد ب٠ساÙ
اÙÙ",
- "changepassword-success": "گذرÙاÚÙÙ Ø´Ù
ا با Ù
ÙÙÙÛت تغÛÛر داد٠شد!",
+ "changepassword-success": "گذرÙاÚÙÙ Ø´Ù
ا تغÛÛر داد٠شد!",
"changepassword-throttled": "Ø´Ù
ا Ø¨Ù ØªØ§Ø²Ú¯Û ÚÙدÛÙâبار Ø¨Ø±Ø§Û Ø«Ø¨Øª ÙرÙد تÙاش کردÙâاÛد.\nÙØ·Ùا٠پÛØ´ از Ø¢Ùک٠دÙبار٠تÙاش Ú©ÙÛد $1 صبر Ú©ÙÛد.",
"botpasswords": "گذرÙاÚ٠ربات",
"botpasswords-summary": "
گذرÙاÚÙâÙØ§Û Ø±Ø¨Ø§ØªÛ Ø§Ø¬Ø§Ø²Ù Ø¯Ø³ØªØ±Ø³Û Ø¨Ù ÛÚ© Øساب Ú©Ø§Ø±Ø¨Ø±Û Ø¨Ø§ اÛâÙ¾ÛâØ¢Û Ø¨Ø¯Ù٠استÙاد٠از رÙ
ز اصÙÛ Øساب را Ù
ÛâدÙد. دسترسÛâÙØ§Û Ú©Ø§Ø±Ø¨Ø±Û Ù
ÙجÙد ÙÙگاÙ
Û Ú©Ù Ø¨Ø§ گذرÙاÚÙ٠رباتÛÚ© Ùارد Ù
ÛâØ´ÙÛد Ù
Ù
ک٠است Ù
ØدÙد باشÙد.\n\nاگر ÙÙ
ÛâداÙÛد Ú©Ù Ù
Ù
ک٠است با اÛÙ ÚÙ Ú©ÙÛØ¯Ø Ø§ØتÙ
اÙا٠ÙباÛد ÙÛÚ Ú©Ø§Ø±Û Ú©ÙÛد. ÙÛÚâکس ÙباÛد از Ø´Ù
ا Ø®Ùاست٠باشد Ú©Ù ÛÚ©Û Ø§Ø² اÛÙâÙا درست Ú©ÙÛد ب٠آÙâÙا بدÙÛد.",
@@ -571,9 +572,9 @@
"botpasswords-insert-failed": "شکست در اÙزÙد٠ÙاÙ
ربات «$1». در Øا٠Øاضر اضاÙ٠شد٠استØ",
"botpasswords-update-failed": "شکست در بÙâرÙزرساÙÛ ÙاÙ
Ø±Ø¨Ø§ØªÛ Â«$1». Øذ٠شد٠استØ",
"botpasswords-created-title": "گذرÙاÚ٠ربات اÛجاد شد",
- "botpasswords-created-body": "گذرÙاÚÙÙ Ø±Ø¨Ø§ØªÛ Â«$1» با Ù
ÙÙÙÛت اÛجاد شد.",
+ "botpasswords-created-body": "گذرÙاÚÙÙ Ø±Ø¨Ø§ØªÛ Â«$1» اÛجاد شد.",
"botpasswords-updated-title": "گذرÙاÚ٠ربات بÙâرÙز شد",
- "botpasswords-updated-body": "گذرÙاÚÙÙ Ø±Ø¨Ø§ØªÛ Â«$1» با Ù
ÙÙÙÛت بÙâرÙز شد.",
+ "botpasswords-updated-body": "گذرÙاÚÙÙ Ø±Ø¨Ø§ØªÛ Â«$1» بÙâرÙز شد.",
"botpasswords-deleted-title": "گذرÙاÚ٠ربات Øذ٠شد",
"botpasswords-deleted-body": "گذرÙاÚÙÙ Ø±Ø¨Ø§ØªÛ Â«$1» Øذ٠شد.",
"botpasswords-newpassword": "
$2 گذرÙاÚÙ٠جدÛد Ø¨Ø±Ø§Û ÙرÙد با
$1 است.
ÙØ·Ùا٠اÛ٠را Ø¨Ø±Ø§Û Ø§Ø±Ø¬Ø§Ø¹ در Ø¢ÛÙد٠ذخÛر٠کÙÛد. ",
@@ -585,7 +586,7 @@
"resetpass-no-info": "Ø¨Ø±Ø§Û Ø¯Ø³ØªØ±Ø³Û Ù
ستÙÛÙ
ب٠اÛ٠صÙØÙ Ø´Ù
ا باÛد ب٠ساÙ
اÙÙ Ùارد شد٠باشÛد.",
"resetpass-submit-loggedin": "تغÛÛر گذرÙاÚÙ",
"resetpass-submit-cancel": "ÙغÙ",
- "resetpass-wrong-oldpass": "گذرÙاÚÙÙ Ù
ÙÙت Ûا اخÛر ÙاÙ
عتبر.\nÙ
Ù
ک٠است Ú©Ù Ø´Ù
ا ÙÙ
ÛÙÚ© گذرÙاÚÙâتا٠را با Ù
ÙÙÙÛت تغÛÛر داد٠باشÛد Ûا درخÙاست ÛÚ© گذرÙاÚÙÙ Ù
ÙÙت تاز٠کرد٠باشÛد.",
+ "resetpass-wrong-oldpass": "گذرÙاÚÙÙ Ù
ÙÙت Ûا اخÛر ÙاÙ
عتبر.\nÙ
Ù
ک٠است Ú©Ù Ø´Ù
ا ÙÙ
ÛÙÚ© گذرÙاÚÙâتا٠را تغÛÛر داد٠باشÛد Ûا درخÙاست ÛÚ© گذرÙاÚÙÙ Ù
ÙÙت تاز٠کرد٠باشÛد.",
"resetpass-recycled": "ÙØ·Ùا٠رÙ
ز عبÙر Ø®Ùد را ب٠ÚÛز دÛÚ¯Ø±Û ØºÛر از رÙ
ز عبÙر ÙعÙÛ ØªÙظÛÙ
Ú©ÙÛد.",
"resetpass-temp-emailed": "Ø´Ù
ا با ÛÚ© کد اÛÙ
Û٠شدÙÙ Ù
ÙÙت Ùارد شدÙâاÛد.\nØ¨Ø±Ø§Û Ù¾Ø§Ûا٠ÙرÙØ¯Ø Ø´Ù
ا باÛد رÙ
ز عبÙر جدÛØ¯Û Ø§ÛÙجا Ùارد Ú©ÙÛد:",
"resetpass-temp-password": "گذرÙاÚÙÙ Ù
ÙÙت:",
@@ -869,9 +870,9 @@
"revdelete-unsuppress": "ØØ°Ù Ù
ØدÙدÛتâÙا در بازبÛÙÛâÙØ§Û ØªØ±Ù
ÛÙ
âشدÙ",
"revdelete-log": "دÙÛÙ:",
"revdelete-submit": "اعÙ
ا٠بر {{PLURAL:$1|ÙسخÙÙ|ÙسخÙâÙاÛ}} اÙتخاب شدÙ",
- "revdelete-success": "'''Ù¾ÛداÛÛ Ùسخ٠با Ù
ÙÙÙÛت ب٠رÙز شد.'''",
+ "revdelete-success": "'''Ù¾ÛداÛÛ Ùسخ٠ب٠رÙز شد.'''",
"revdelete-failure": "'''Ù¾ÛداÛÛ ÙسخÙâÙا Ùاب٠ب٠رÙز کرد٠ÙÛست:'''\n$1",
- "logdelete-success": "تغÛÛر Ù¾ÛداÛÛ Ù
Ùرد با Ù
ÙÙÙÛت اÙجاÙ
شد.",
+ "logdelete-success": "تغÛÛر Ù¾ÛداÛÛ Ù
Ùرد اÙجاÙ
شد.",
"logdelete-failure": "'''Ù¾ÛداÛÛ Ø³ÛاÙÙâÙا Ùاب٠تÙظÛÙ
ÙÛست:'''\n$1",
"revdel-restore": "تغÛÛر Ù¾ÛداÛÛ",
"pagehist": "تارÛØ®ÚÙ٠صÙØÙ",
@@ -966,7 +967,7 @@
"search-suggest": "Ø¢Ûا Ù
ÙظÙرتا٠اÛ٠بÙد: $1",
"search-rewritten": "ÙÙ
اÛØ´ ÙتاÛج $1. جستجÙÛ Ø¨Ù Ø¬Ø§Û $2.",
"search-interwiki-caption": "پرÙÚÙâÙØ§Û Ø®ÙاÙر",
- "search-interwiki-default": "ÙتاÛج از $1 :",
+ "search-interwiki-default": "ÙتاÛج از $1:",
"search-interwiki-more": "(بÛشتر)",
"search-relatedarticle": "Ù
رتبط",
"searchrelated": "Ù
رتبط",
@@ -1114,7 +1115,7 @@
"userrights-changeable-col": "گرÙÙâÙاÛÛ Ú©Ù Ù
ÛâتÙاÙÛد تغÛÛر دÙÛد",
"userrights-unchangeable-col": "گرÙÙâÙاÛÛ Ú©Ù ÙÙ
ÛâتÙاÙÛد تغÛÛر دÙÛد",
"userrights-conflict": "تعارض دسترسÛâÙØ§Û Ú©Ø§Ø±Ø¨Ø±Û! ÙØ·ÙØ§Ù Ø¨Ø±Ø±Ø³Û Ú©ÙÛد ٠تغÛÛرات را تأÛÛد Ú©ÙÛد.",
- "userrights-removed-self": "Ø´Ù
ا با Ù
ÙÙÙÛت دسترسÛâÙØ§Û Ø®Ùد را ÙاستاÙدÛد. ب٠اÛ٠ترتÛب Ø´Ù
ا دÛگر ب٠اÛ٠صÙØÙ Ø¯Ø³ØªØ±Ø³Û ÙدارÛد.",
+ "userrights-removed-self": "Ø´Ù
ا دسترسÛâÙØ§Û Ø®Ùد را ÙاستاÙدÛد. ب٠اÛ٠ترتÛب Ø´Ù
ا دÛگر ب٠اÛ٠صÙØÙ Ø¯Ø³ØªØ±Ø³Û ÙدارÛد.",
"group": "گرÙÙ:",
"group-user": "کاربراÙ",
"group-autoconfirmed": "کاربرا٠تأÛÛدشدÙÙ Ø®Ùدکار",
@@ -1531,7 +1532,7 @@
"uploadstash-summary": "اÛ٠صÙØÙ Ø¯Ø³ØªØ±Ø³Û Ø¨Ù Ù¾Ø±ÙÙدÙâÙاÛÛ Ú©Ù Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø´Ø¯ÙâاÙد (Ûا در ØØ§Ù Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û ÙستÙد) اÙ
ا ÙÙÙز در ÙÛÚ©Û Ù
Ùتشر ÙشدÙâاÙد را ÙراÙÙ
Ù
ÛâÚ©Ùد. اÛ٠پرÙÙدÙâÙا تÙسط ÙÛÚ Ú©Ø§Ø±Ø¨Ø±Û Ø¨Ù Ø¬Ø² Ú©Ø³Û Ú©Ù Ø¢ÙâÙا را Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ú©Ø±Ø¯Ù Ùاب٠دÛد٠ÙÛستÙد.",
"uploadstash-clear": "پاکâکرد٠پرÙÙدÙâÙØ§Û Ø§ÙبارشدÙ",
"uploadstash-nofiles": "Ø´Ù
ا ÙÛÚ Ù¾Ø±ÙÙدÙ٠اÙبارشدÙâØ§Û ÙدارÛد.",
- "uploadstash-badtoken": "اÙجاÙ
اÛ٠اÙداÙ
ÙاÙ
ÙÙ٠بÙØ¯Ø Ø§ØتÙ
اÙا٠ب٠اÛ٠دÙÛ٠ک٠اعتبار ÙÛراÛØ´ Ø´Ù
ا ب٠اتÙ
اÙ
رسÛد٠است. دÙبار٠اÙ
تØا٠کÙÛد.",
+ "uploadstash-badtoken": "اÙجاÙ
اÛ٠اÙداÙ
ÙاÙ
ÙÙ٠بÙØ¯Ø Ø§ØتÙ
اÙا٠ب٠اÛ٠دÙÛ٠ک٠اعتبار ÙÛراÛØ´ Ø´Ù
ا ب٠اتÙ
اÙ
رسÛد٠است. ÙØ·Ùا٠دÙبار٠اÙ
تØا٠کÙÛد.",
"uploadstash-errclear": "پاکâکرد٠پرÙÙدÙâÙا ÙاÙ
ÙÙ٠بÙد.",
"uploadstash-refresh": "تاز٠کرد٠ÙÙرست پرÙÙدÙâÙا",
"invalid-chunk-offset": "جابجاÛÛ ÙاÙ
عتبر ÙطعÙ",
@@ -2042,12 +2043,14 @@
"changecontentmodel-title-label": "عÙÙا٠صÙØÙ",
"changecontentmodel-model-label": "ÙÙ
ÙÙÙ Ù
ØتÙØ§Û Ø¬Ø¯Ûد",
"changecontentmodel-reason-label": "دÙÛÙ:",
+ "changecontentmodel-submit": "تغÛÛر",
"changecontentmodel-success-title": "ÙÙ
ÙÙÙ Ù
ØتÙÛ ØªØºÛÛر ÛاÙت",
"changecontentmodel-success-text": "ÙÙع Ù
ØتÙÛ [[:$1]] تغÛÛر ÛاÙت",
"changecontentmodel-cannot-convert": "Ù
ØتÙÛ Ø¯Ø± [[:$1]] ÙÙ
ÛâتÙاÙد ب٠گÙÙÙâØ§Û Ø§Ø² $2 تبدÛÙ Ø´Ùد.",
"changecontentmodel-nodirectediting": "ÙÙ
ÙÙÙ Ù
ØتÙÛ $1 اÙ
کا٠ÙÛراÛØ´ Ù
ستÙÛÙ
را پشتÛباÙÛ ÙÙ
ÛâÚ©Ùد",
"log-name-contentmodel": "سÛاÙ٠تغÛÛر ÙÙ
ÙÙÙ Ù
ØتÙÛ",
"log-description-contentmodel": "رÙÛدادÙØ§Û Ù
رتبط با ÙÙ
ÙÙÙ Ù
ØتÙÛâÙØ§Û ÛÚ© صÙØÙ",
+ "logentry-contentmodel-new": "صÙØÙÙ $3 با استÙاد٠از Ù
دÙâÙØ§Û Ù
ØتÙاÛÛ ØºÛر Ù¾ÛØ´âÙرض «$5» تÙسط $1 {{GENDER:$2|ساخت٠شد}}",
"logentry-contentmodel-change": "ÙÙ
ÙÙÙ Ù
ØتÙØ§Û ØµÙØÙÙ $3 از \"$4\" ب٠\"$5\" تÙسط $1 {{GENDER:$2|تغÛÛر داد٠شد}}",
"logentry-contentmodel-change-revertlink": "ÙاگرداÙÛ",
"logentry-contentmodel-change-revert": "ÙاگرداÙÛ",
@@ -2166,7 +2169,7 @@
"sp-contributions-newbies-sub": "Ø¨Ø±Ø§Û ØªØ§Ø²ÙâکاراÙ",
"sp-contributions-newbies-title": "Ù
شارکتâÙØ§Û Ú©Ø§Ø±Ø¨Ø±Û Ø¨Ø±Ø§Û ØسابâÙØ§Û ØªØ§Ø²Ùâکار",
"sp-contributions-blocklog": "سÛاÙÙ٠بستÙâشدÙâÙا",
- "sp-contributions-suppresslog": "Ú©Ù
Ú©âÙØ§Û Ú©Ø§Ø±Ø¨Ø± Ù
تÙÙ٠شدÙ",
+ "sp-contributions-suppresslog": "Ù
شارکتâÙØ§Û ÙرÙÙشاÙÛâشدÙ",
"sp-contributions-deleted": "Ù
شارکتâÙØ§Û ØØ°ÙâشدÙ٠کاربر",
"sp-contributions-uploads": "بارگذارÛâÙا",
"sp-contributions-logs": "سÛاÙÙâÙا",
@@ -3328,7 +3331,7 @@
"tags-delete-not-allowed": "برÚسبâÙاÛÛ Ú©Ù Ø¯Ø± ÛÚ© اÙزÙÙ٠تعرÛÙ Ù
ÛâØ´ÙÙد Ùاب٠ØØ°Ù ÙÛستÙØ¯Ø Ù
گر اÛÙک٠آ٠اÙزÙÙ٠در اÛÙ Ù
Ùرد خاص اÛÙ ÙابÙÛت را بدÙد.",
"tags-delete-not-found": "تگ «$1» ÙجÙد Ùدارد.",
"tags-delete-too-many-uses": "برÚسب \"$1\" در بÛØ´ از $2 Ùسخ٠اعÙ
ا٠شد٠است Ù ÙÙ
ÛâتÙا٠آ٠را ØØ°Ù ÙÙ
Ùد.",
- "tags-delete-warnings-after-delete": "برÚسب \"$1\" با Ù
ÙÙÙÛت ØØ°Ù Ø´Ø¯Ø Ø§Ù
ا با {{PLURAL:$2|خطاÛ|خطاÙاÛ}} زÛر ÙÙ
را٠بÙد:",
+ "tags-delete-warnings-after-delete": "برÚسب \"$1\" ØØ°Ù Ø´Ø¯Ø Ø§Ù
ا با {{PLURAL:$2|خطاÛ|خطاÙاÛ}} زÛر ÙÙ
را٠بÙد:",
"tags-activate-title": "ÙعاÙâØ³Ø§Ø²Û Ø¨Ø±Úسب",
"tags-activate-question": "Ø´Ù
ا در Øا٠ÙعاÙâØ³Ø§Ø²Û ØªÚ¯ «$1» ÙستÛد.",
"tags-activate-reason": "دÙÛÙ:",
@@ -3367,7 +3370,7 @@
"tags-edit-reason": "دÙÛÙ:",
"tags-edit-revision-submit": "اعÙ
ا٠تغÛÛرات بر رÙÛ {{PLURAL:$1|اÛÙ ÙسخÙ|$1 ÙسخÙ}}",
"tags-edit-logentry-submit": "اعÙ
ا٠تغÛÛرات بر رÙÛ {{PLURAL:$1|اÛ٠سÛاÙÙ|$1 سÛاÙÙ}}",
- "tags-edit-success": "تغÛÛرات با Ù
ÙÙÙÛت اعÙ
ا٠شدÙد.",
+ "tags-edit-success": "تغÛÛرات اعÙ
ا٠شدÙد.",
"tags-edit-failure": "اÙ
کا٠اعÙ
ا٠تغÛÛرات ÙجÙد Ùدارد: $1",
"tags-edit-nooldid-title": "ÙسخÙÙ Ù
Ùصد Ùادرست",
"tags-edit-nooldid-text": "ÙسخÙÙ Ù
Ùصد Ø¨Ø±Ø§Û Ø§Ø¹Ù
ا٠تابع Ù
Ùرد Ùظر را Ù
شخص ÙکردÙâاÛØ¯Ø Ûا ÙسخÙÙ Ù
Ùرد Ùظر ÙجÙد Ùدارد.",
diff --git a/languages/i18n/fo.json b/languages/i18n/fo.json
index 2cac81f15a..d12e340d59 100644
--- a/languages/i18n/fo.json
+++ b/languages/i18n/fo.json
@@ -18,6 +18,7 @@
"tog-hideminor": "Krógva minni broytingar à seinastu broytingum",
"tog-hidepatrolled": "Krógva eftirkannaðar rættingar à seinastu broytingum",
"tog-newpageshidepatrolled": "Goym eftirkannaðar sÃður frá listanum yvir nýggjar sÃður",
+ "tog-hidecategorization": "Fjal bólking av sÃðum",
"tog-extendwatchlist": "VÃðka eftirlitslistan fyri at vÃsa allar broytingar, ikki bara tær seinastu",
"tog-usenewrc": "Bólka broytingar eftir sÃðu à seinastu broytingum og eftirlitslita",
"tog-numberheadings": "Sjálvvirkandi talmerking av yvirskriftum",
@@ -46,6 +47,7 @@
"tog-watchlisthideliu": "Goym broytingar sum eru gjørdar av brúkarum, sum eru loggaðir á, frá hyggjaralistanum",
"tog-watchlisthideanons": "Krógva broytingar sum eru gjørdar av dulnevndum brúkarum frá eftirlitslistanum",
"tog-watchlisthidepatrolled": "Fjal eftirhugdar broytingar frá eftirlitslistanum",
+ "tog-watchlisthidecategorization": "Fjal bólking av sÃðum",
"tog-ccmeonemails": "Send mær avrit av teldubrøvum, sum eg sendi til aðrar brúkarar",
"tog-diffonly": "VÃs ikki innihaldið av sÃðuni undir broytingum",
"tog-showhiddencats": "VÃs goymdir bólkar",
@@ -147,7 +149,7 @@
"morenotlisted": "Hesin listin er ikki liðugur.",
"mypage": "SÃða",
"mytalk": "Kjak",
- "anontalk": "Kjak til hesa IP-adressuna",
+ "anontalk": "Kjak",
"navigation": "Navigatión",
"and": " og",
"qbfind": "Finn",
@@ -225,6 +227,8 @@
"pool-timeout": "Støðgur, bÃða verður eftir lásinum",
"pool-queuefull": "Køin til \"hylin\" er full",
"pool-errorunknown": "Ãkend villa",
+ "pool-servererror": "Pool counter-tænastan er ikki tøk ($1).",
+ "poolcounter-usage-error": "Nýtslufeilur: $1",
"aboutsite": "Um {{SITENAME}}",
"aboutpage": "Project:Um",
"copyright": "Innihaldið er tøkt undir $1, um ikki annað er viðmerkt.",
@@ -292,6 +296,7 @@
"nstab-template": "Fyrimynd",
"nstab-help": "Hjálp",
"nstab-category": "Bólkur",
+ "mainpage-nstab": "ForsÃða",
"nosuchaction": "Ongin slÃk gerð",
"nosuchactiontext": "Gerðin, ið tilskilað er à url, virkar ikki.\nMøguliga hevur tú stava urlin skeivt, ella fylgt einari skeivari leinkju.\nHetta kann eisini benda á ein feil à software'ini sum {{SITENAME}} brúkar.",
"nosuchspecialpage": "Ongin slÃk serlig sÃða",
@@ -316,6 +321,8 @@
"filerenameerror": "Kundi ikki umdoypa fÃlu \"$1\" til \"$2\".",
"filedeleteerror": "Kundi ikki strika fÃluna \"$1\".",
"directorycreateerror": "Kundi ikki upprætta mappuna \"$1\".",
+ "directoryreadonlyerror": "Faldarin \"$1\" er vardur móti skriving.",
+ "directorynotreadableerror": "Faldarin \"$1\" er ikki lesbarur.",
"filenotfound": "Kundi ikki finna fÃlu \"$1\".",
"unexpected": "Ãvæntað virði: \"$1\"=\"$2\".",
"formerror": "Villa: Kundi ikki senda skránna.",
@@ -332,13 +339,14 @@
"viewsource": "VÃs keldu",
"viewsource-title": "SÃ keldu fyri $1",
"actionthrottled": "Hendingin kvaldist",
- "actionthrottledtext": "â Fyri at mótvirka spam, er tað ikki møguligt at gera hetta alt ov nógvar ferðir uppá stutta tÃð, og tú ert farin yvir tað markið.\nVinarliga royn aftur um fáir minuttir.",
+ "actionthrottledtext": "Fyri at mótvirka spam, er tað ikki møguligt at gera hetta alt ov nógvar ferðir uppá stutta tÃð, og tú ert farin yvir tað markið.\nVinarliga royn aftur um fáir minuttir.",
"protectedpagetext": "Hendan sÃða er blivin vard fyri at steðga rættingum ella øðrum handlingum.",
- "viewsourcetext": "Tú kanst sÃggja og avrita kelduna til hesa grein:",
- "viewyourtext": "Tú kanst sÃggja og avrita kelduna fyri '''tÃnar rættingar''' til hesa sÃðuna:",
+ "viewsourcetext": "Tú kanst sÃggja og avrita kelduna til hesa grein.",
+ "viewyourtext": "Tú kanst sÃggja og avrita kelduna til
tÃnar rættingar til hesa sÃðuna.",
"protectedinterface": "â Henda sÃðan gevur markamóts tekst til ritbúnaðin (software), og er vard fyri at fyribyrgja misnýtslu.\nFyri at gera rættingar ella broyta týðingar á øllum wiki'um, vinarliga nýt [//translatewiki.net/ translatewiki.net], MediaWiki verkætlanina.",
- "editinginterface": "â '''Ãvaring:''' Tú rættar eina sÃðu sum verður brúkt til at geva markamóts tekst til ritbúnaðin (software).\nBroytingar á hesi sÃðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrar brúkarar á hesi wiki.\nFyri at gera týðingar ella broyta týðingar á øllum wiki, vinarliga nýt [//translatewiki.net/ translatewiki.net], sum er ein MediaWiki verkætlan.",
- "cascadeprotected": "Henda sÃðan er vard fyri rættingum, tà hon er à fylgjandi {{PLURAL:$1|sÃðu, sum er|sÃðum, sum eru}}\nvardar við \"arvaðari sÃðuverjing\"\n$2",
+ "editinginterface": "
Ãvaring: Tú rættar eina sÃðu sum verður brúkt til at geva markamóts tekst til ritbúnaðin (software).\nBroytingar á hesi sÃðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrar brúkarar á hesi wiki.",
+ "translateinterface": "Fyri at gera ella broyta týðingar fyri allar wikiir, vinarliga nýt [//translatewiki.net/ translatewiki.net], the MediaWiki staðsetingar verkætlan.",
+ "cascadeprotected": "Henda sÃðan er vard fyri rættingum, tà hon er à fylgjandi {{PLURAL:$1|sÃðu, sum er|sÃðum, sum eru}}\nvardar við \"niðurarvan\" møguleikanum tendraðum:\n$2",
"namespaceprotected": "Tú hevur ikki loyvi til at rætta sÃður à $1 navnateiginum.",
"customcssprotected": "Tú hevur ikki loyvi til at rætta hesa CSS sÃðuna, tà hon inniheldur persónligar innstillingar hjá øðrum brúkara.",
"customjsprotected": "Tú hevur ikki loyvir til at rætta hesa JavaScript sÃðuna, tà hon inniheldur persónligar innstillingar hjá øðrum brúkara.",
@@ -348,16 +356,17 @@
"mypreferencesprotected": "Tú hevur ikki loyvi til at rætta tÃnar preferensur.",
"ns-specialprotected": "Serstakar sÃður kunnu ikki rættast.",
"titleprotected": "[[User:$1|$1]] hevur vart hetta heitið frá skapan.\nGivin orsøk er
$2 .",
- "filereadonlyerror": "Tað var ikki møguligt at broyta fÃluna \"$1\" tà at fÃlugoymslan \"$2\" er à bara-lesa støðu.\n\nUmboðsstjórin sum stongdi hana, gav hesa frágreiðing: \"$3\".",
+ "filereadonlyerror": "Tað var ikki møguligt at broyta fÃluna \"$1\" tà at fÃlugoymslan \"$2\" er skrivivard.\n\nSkipanaradministratorurin sum stongdi hana, gav hesa frágreiðing: \"$3\".",
"invalidtitle-knownnamespace": "Ãgyldugt heiti við navnaøki \"$2\" og teksti \"$3\"",
"invalidtitle-unknownnamespace": "Ãgyldigt heiti við ókendum navnaøkis tali $1 og teksti \"$2\"",
"exception-nologin": "Tú ert ikki loggað/ur inn",
- "exception-nologin-text": "Vinarliga [[Special:Userlogin|rita inn]] fyri at fáa atgongd til hesa sÃðu ella handling.",
+ "exception-nologin-text": "Vinarliga rita inn fyri at fáa atgongd til hesa sÃðu ella handling.",
"exception-nologin-text-manual": "Vinarliga $1 fyri at fáa atgongd til hesa sÃðu ella handling.",
"virus-badscanner": "Konfiguratións villa: Ãkendur virus skannari: ''$1''",
"virus-scanfailed": "â skanning virkaði ikki (kota $1)",
"virus-unknownscanner": "ókent antivirus:",
"logouttext": "'''Tú hevur nú ritað út.'''\n \nLegg til merkis, at summar sÃður framvegis vera vÃstar, sum um tú enn vart loggað/ur á, til tú hevur reinsað tÃn brovsara fyri \"cache\".",
+ "cannotlogoutnow-title": "Tað ber ikki til at rita út nú",
"welcomeuser": "Vælkomin, $1!",
"welcomecreation-msg": "TÃn konta er nú stovnað.\nGloym ikki at broyta tÃnar [[Special:Preferences|{{SITENAME}}-innstillingar]].",
"yourname": "TÃtt brúkaranavn:",
@@ -474,6 +483,11 @@
"resetpass_submit": "Vel loyniorð og rita inn",
"changepassword-success": "TÃtt loyniorð er nú broytt!",
"changepassword-throttled": "Tú hevur roynt at rita inn ov nógvar ferðir nýliga.\nVinarliga bÃða $1 áðrenn tú roynir aftur.",
+ "botpasswords-label-create": "Upprætta",
+ "botpasswords-label-update": "Dagfør",
+ "botpasswords-label-cancel": "Avbrót",
+ "botpasswords-label-delete": "Strika",
+ "botpasswords-label-resetpassword": "Nullstilla loyniorðið",
"resetpass_forbidden": "Loyniorð kunnu ikki broytast",
"resetpass-no-info": "Tú mást vera loggaður á fyri at fáa beinleiðis atgongd til hesa sÃðu.",
"resetpass-submit-loggedin": "Broyt loyniorð",
@@ -537,7 +551,7 @@
"sig_tip": "TÃn undirskrift við tÃðarstempli",
"hr_tip": "Vatnrøtt linja (vera sparin við)",
"summary": "Samandráttur:",
- "subject": "Evni/heiti:",
+ "subject": "Evni:",
"minoredit": "Hetta er smábroyting",
"watchthis": "Hav eftirlit við hesi sÃðuni",
"savearticle": "Goym sÃðu",
@@ -781,6 +795,7 @@
"notextmatches": "Ongin sÃðutekstur samsvarar",
"prevn": "undanfarnu {{PLURAL:$1|$1}}",
"nextn": "næstu {{PLURAL:$1|$1}}",
+ "prev-page": "undanfarna sÃða",
"next-page": "næsta sÃða",
"prevn-title": "Gomul $1 {{PLURAL:$1|úrslit|úrslit}}",
"nextn-title": "Næstu $1 {{PLURAL:$1|úrslit|úrslit}}",
@@ -801,7 +816,9 @@
"search-redirect": "(umstilling $1)",
"search-section": "(sektión $1)",
"search-category": "(bólkur $1)",
+ "search-file-match": "(svarar til innihaldið av fÃluni)",
"search-suggest": "Meinti tú: $1",
+ "search-rewritten": "VÃsir úrslit fyri $1. Leita à staðin eftir $2.",
"search-interwiki-caption": "LÃknandi verkætlanir",
"search-interwiki-default": "Ãrslit frá $1:",
"search-interwiki-more": "(meira)",
@@ -812,6 +829,7 @@
"showingresultsinrange": "Niðanfyri verða vÃst upp til {{PLURAL:$1|
1 úrslit|
$1 úrslit}} à økinum #
$2 til #
$3 .",
"search-showingresults": "{{PLURAL:$4|Ãrslit
$1 av
$3 |Ãrslit
$1 - $2 av
$3 }}",
"search-nonefound": "Leitingin gav onki úrslit.",
+ "search-nonefound-thiswiki": "Ongi úrslit passaðu til fyrispurningin á hesi sÃðu.",
"powersearch-legend": "VÃðkað leitan",
"powersearch-ns": "Leita à navnaøkinum:",
"powersearch-togglelabel": "Kanna eftir:",
@@ -824,7 +842,7 @@
"preferences": "Innstillingar",
"mypreferences": "Innstillingar",
"prefs-edits": "Tal av rættingum:",
- "prefsnologintext2": "Vinarliga $1 fyri at broyta tÃnar innstillingat.",
+ "prefsnologintext2": "Vinarliga rita inn fyri at broyta tÃnar innstillingar.",
"prefs-skin": "Hamur",
"skin-preview": "Forskoðan",
"datedefault": "Ongi serlig ynskir",
@@ -833,6 +851,8 @@
"prefs-personal": "Brúkaradáta",
"prefs-rc": "Nýkomnar broytingar og stubbaskoðan",
"prefs-watchlist": "Eftirlit",
+ "prefs-editwatchlist": "Rætta eftirlitslistan",
+ "prefs-editwatchlist-clear": "Rudda tÃn eftirlitslista",
"prefs-watchlist-days": "Tal av døgum, sum skula vÃsast à eftirliti:",
"prefs-watchlist-days-max": "Ã mesta lagi $1 {{PLURAL:$1|dagur|dagar}}",
"prefs-watchlist-edits": "Tal av rættingum, sum skula vÃsast à vÃðkaðum eftirliti:",
@@ -840,7 +860,7 @@
"prefs-watchlist-token": "Lykil til eftirlitslistan:",
"prefs-misc": "Ymiskar innstillingar",
"prefs-resetpass": "Broyt loyniorð",
- "prefs-changeemail": "Broyt t-post adressu",
+ "prefs-changeemail": "Broyt ella tak burtur t-post adressu",
"prefs-setemail": "Skriva tÃna t-post adressu",
"prefs-email": "T-post møguleikar",
"prefs-rendering": "Ãtsjónd",
@@ -850,7 +870,8 @@
"rows": "Røð:",
"columns": "Teigar:",
"searchresultshead": "Leita",
- "stub-threshold": "Avmarkað til
stubba leinki formatering (bytes):",
+ "stub-threshold": "Avmarkað til stubba leinki formatering $1:",
+ "stub-threshold-sample-link": "dømi",
"stub-threshold-disabled": "Er gjørt óvirki",
"recentchangesdays": "Dagar av vÃsa à seinastu broytingum:",
"recentchangesdays-max": "Ã mesta lagi $1 {{PLURAL:$1|dagur|dagar}}",
@@ -1079,7 +1100,7 @@
"recentchanges-label-bot": "Henda rætting varð gjørd av einum botti",
"recentchanges-label-unpatrolled": "Henda rætting er ikki blivin eftirkannað enn",
"recentchanges-label-plusminus": "Støddin á sÃðuni broyttist við hesum talinum av bytes",
- "recentchanges-legend-heading": "'''Teknfrágreiðing:'''",
+ "recentchanges-legend-heading": "
Teknfrágreiðing: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sà eisini [[Special:NewPages|yvirlit yvir nýggjar sÃður]])",
"rcnotefrom": "Niðanfyri verða broytingar sÃðan
$2 (upp til
$1 vÃstar).",
"rclistfrom": "Sýn nýggjar broytingar byrjandi við $3 $2",
diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json
index d64d4db990..19e70c01fc 100644
--- a/languages/i18n/fr.json
+++ b/languages/i18n/fr.json
@@ -275,6 +275,7 @@
"moredotdotdot": "Plus...",
"morenotlisted": "Cette liste nâest pas complète.",
"mypage": "Page",
+ "anonuserpage": "Utilisateur inconnu",
"mytalk": "Discussion",
"anontalk": "Discussion",
"navigation": "Navigation",
@@ -574,7 +575,7 @@
"nocookieslogin": "{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.",
"nocookiesfornew": "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et réessayez.",
"noname": "Vous n'avez pas saisi un nom d'utilisateur valide.",
- "loginsuccesstitle": "Connexion réussie",
+ "loginsuccesstitle": "Connecté",
"loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e}} à {{SITENAME}} en tant que « $1 ».",
"nosuchuser": "L'utilisateur « $1 » n'existe pas.\nLes noms d'utilisateurs sont sensibles à la casse.\nVérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
"nosuchusershort": "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
@@ -630,7 +631,7 @@
"newpassword": "Nouveau mot de passe :",
"retypenew": "Confirmer le nouveau mot de passe :",
"resetpass_submit": "Changer le mot de passe et se connecter",
- "changepassword-success": "Votre mot de passe a été changé avec succès !",
+ "changepassword-success": "Votre mot de passe a été modifié !",
"changepassword-throttled": "Vous avez fait trop de tentatives de connexion récemment.\nVeuillez attendre $1 avant de réessayer.",
"botpasswords": "Mots de passe de robots",
"botpasswords-summary": "
Mots de passe de robots permet dâaccéder à un compte utilisateur via lâAPI sans utiliser les identifiants de connexion principaux. Les droits utilisateur disponibles en étant connecté avec un mot de passe robot peuvent être réduits.\n\nSi vous ne voyez pas pourquoi vous voudriez faire cela, câest que vous nâen avez pas besoin. Personne ne devrait jamais vous demander dâen générer un et de le lui donner.",
@@ -653,9 +654,9 @@
"botpasswords-insert-failed": "Ãchec de lâajout du nom de robot «â¯$1â¯Â». A-t-il déjà été ajoutéâ¯?",
"botpasswords-update-failed": "Ãchec à la mise à jour du nom de robot «â¯$1â¯Â». A-t-il déjà été suppriméâ¯?",
"botpasswords-created-title": "Mot de passe de robots créé",
- "botpasswords-created-body": "Le mot de passe de robots «â¯$1â¯Â» a bien été créé.",
+ "botpasswords-created-body": "Le mot de passe de robots «â¯$1â¯Â» a été créé.",
"botpasswords-updated-title": "Mot de passe de robots mis à jour",
- "botpasswords-updated-body": "Le mot de passe de robots «â¯$1â¯Â» a bien été mis à jour.",
+ "botpasswords-updated-body": "Le mot de passe de robots «â¯$1â¯Â» a été mis à jour.",
"botpasswords-deleted-title": "Mot de passe de robots supprimé",
"botpasswords-deleted-body": "Le mot de passe de robots «â¯$1â¯Â» a été supprimé.",
"botpasswords-newpassword": "Le nouveau mot de passe pour se connecter avec
$1 est
$2 .
Veuillez lâenregistrer pour y faire référence ultérieurement. ",
@@ -952,9 +953,9 @@
"revdelete-unsuppress": "Enlever les restrictions sur les versions restaurées",
"revdelete-log": "Motif :",
"revdelete-submit": "Appliquer {{PLURAL:$1|à la révision sélectionnée|aux révisions sélectionnées}}",
- "revdelete-success": "'''Visibilité des versions mise à jour avec succès.'''",
+ "revdelete-success": "Visibilité des versions mise à jour.",
"revdelete-failure": "'''La visibilité de la version n'a pas pu être mise à jour :'''\n$1",
- "logdelete-success": "'''Visibilité du journal paramétrée avec succès.'''",
+ "logdelete-success": "Visibilité du journal modifiée.",
"logdelete-failure": "'''La visibilité du journal n'a pas pu être définie :'''\n$1",
"revdel-restore": "modifier la visibilité",
"pagehist": "Historique de la page",
@@ -1198,7 +1199,7 @@
"userrights-changeable-col": "Les groupes que vous pouvez modifier",
"userrights-unchangeable-col": "Les groupes que vous ne pouvez pas modifier",
"userrights-conflict": "Conflit de modification de droits utilisateurâ¯! Veuillez relire et confirmer vos modifications.",
- "userrights-removed-self": "Vous avez bien supprimé vos propres droits. Du coup, vous ne pouvez plus accéder à cette page.",
+ "userrights-removed-self": "Vous avez supprimé vos propres droits. Du coup, vous ne pouvez plus accéder à cette page.",
"group": "Groupe :",
"group-user": "Utilisateurs",
"group-autoconfirmed": "Utilisateurs autoconfirmés",
@@ -1616,7 +1617,7 @@
"uploadstash-summary": "Cette page donne accès aux fichiers qui sont importés (ou en cours dâimportation), mais ne sont pas encore publiés dans le wiki. Ces fichiers ne sont pas encore visibles, sauf pour lâutilisateur qui les a importés.",
"uploadstash-clear": "Effacer les fichiers en cache",
"uploadstash-nofiles": "Vous nâavez pas de fichiers en cache dâimport.",
- "uploadstash-badtoken": "Lâexécution de cette action a échoué, peut-être parce que vos informations dâidentification ont expiré. Réessayez.",
+ "uploadstash-badtoken": "Lâexécution de cette action a échoué, peut-être parce que vos informations dâidentification ont expiré. Veuillez réessayer.",
"uploadstash-errclear": "La suppression des fichiers a échoué.",
"uploadstash-refresh": "Actualiser la liste des fichiers",
"invalid-chunk-offset": "Offset de segment non valide",
@@ -2128,12 +2129,14 @@
"changecontentmodel-title-label": "Titre de la page",
"changecontentmodel-model-label": "Nouveau modèle de contenu",
"changecontentmodel-reason-label": "Motif :",
+ "changecontentmodel-submit": "Modifier",
"changecontentmodel-success-title": "Le modèle de contenu a été modifié",
"changecontentmodel-success-text": "Le modèle de contenu de [[:$1]] a été modifié.",
"changecontentmodel-cannot-convert": "Le contenu sur [[:$1]] nâa pas pu être converti en un type de $2.",
"changecontentmodel-nodirectediting": "Le modèle de contenu $1 ne permet pas la modification directe",
"log-name-contentmodel": "Journal de modification de modèle de contenu",
"log-description-contentmodel": "Ãvénements relatifs aux modèles de contenu dâune page",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|a créé}} la page $3 en utilisant un modèle de contenu «â¯$5â¯Â» autre que celui par défaut",
"logentry-contentmodel-change": "$1 {{GENDER:$2|a modifié}} le modèle de contenu de la page $3 de «â¯$4â¯Â» en «â¯$5â¯Â»",
"logentry-contentmodel-change-revertlink": "rétablir",
"logentry-contentmodel-change-revert": "rétablir",
@@ -3453,7 +3456,7 @@
"tags-delete-not-allowed": "Les balises définies par une extension ne peuvent pas être supprimées, à moins que l'extension ne le permette spécifiquement.",
"tags-delete-not-found": "La balise « $1 » nâexiste pas.",
"tags-delete-too-many-uses": "La balise « $1 » est appliquée à plus de $2 {{PLURAL:$2|révision|révisions}}, ce qui signifie qu'elle ne peut pas être supprimée.",
- "tags-delete-warnings-after-delete": "La balise « $1 » a été supprimée avec succès, mais {{PLURAL:$2|l' avertissement suivant a|avertissements suivants ont}} été rencontré{{PLURAL:$2||s}} :",
+ "tags-delete-warnings-after-delete": "La balise « $1 » a été supprimée, mais {{PLURAL:$2|lâavertissement suivant a|les avertissements suivants ont}} été rencontré{{PLURAL:$2||s}} :",
"tags-activate-title": "Activer la balise",
"tags-activate-question": "Vous êtes sur le point d'activer la balise « $1 ».",
"tags-activate-reason": "Motif :",
@@ -3492,7 +3495,7 @@
"tags-edit-reason": "Motif :",
"tags-edit-revision-submit": "Appliquer les modifications à {{PLURAL:$1|cette révision|$1 révisions}}",
"tags-edit-logentry-submit": "Appliquer les modifications à {{PLURAL:$1|cette entrée de journal|$1 entrées de journal}}",
- "tags-edit-success": "Les modifications ont été appliquées avec succès.",
+ "tags-edit-success": "Les modifications ont été appliquées.",
"tags-edit-failure": "Les modifications nâont pas pu être appliquées :\n$1",
"tags-edit-nooldid-title": "Révision cible non valide",
"tags-edit-nooldid-text": "Vous nâavez soit pas spécifié de révision cible sur laquelle exécuter cette fonction, soit la révision spécifiée nâexiste pas.",
diff --git a/languages/i18n/frc.json b/languages/i18n/frc.json
index be92a648c5..89cc1a192b 100644
--- a/languages/i18n/frc.json
+++ b/languages/i18n/frc.json
@@ -655,7 +655,7 @@
"nchanges": "$1 changement{{PLURAL:$1||s}}",
"enhancedrc-history": "changements",
"recentchanges": "Changements récent",
- "recentchanges-legend-heading": "'''Légende:'''",
+ "recentchanges-legend-heading": "
Légende: ",
"rcshowhideminor-hide": "Cacher",
"rcshowhidebots": "$1 les robots",
"rcshowhidebots-show": "Afficher",
diff --git a/languages/i18n/frp.json b/languages/i18n/frp.json
index cbdb0b0828..38bee3441d 100644
--- a/languages/i18n/frp.json
+++ b/languages/i18n/frp.json
@@ -132,12 +132,12 @@
"category-empty": "
Ora cela catègoria contint gins de pâge de fichiér multimèdiâ. ",
"hidden-categories": "{{PLURAL:$1|Catègoria cachiêe|Catègories cachiêes}}",
"hidden-category-category": "Catègories cachiêes",
- "category-subcat-count": "Cela catègoria-que at {{PLURAL:$2|mas que cela sot-catègoria.|{{PLURAL:$1|cela sot-catègoria|celes $1 sot-catègories}}, sur na soma de $2.}}",
- "category-subcat-count-limited": "Cela catègoria-que at {{PLURAL:$1|cela sot-catègoria|celes $1 sot-catègories}}.",
- "category-article-count": "{{PLURAL:$2|Cela catègoria-que contint mas que cela pâge.|{{PLURAL:$1|Cela pâge est|Celes $1 pâges sont}} a cela catègoria-que, sur na soma de $2.}}",
- "category-article-count-limited": "{{PLURAL:$1|Cela pâge figure|Celes $1 pâges figuront}} dedens la presenta catègoria.",
- "category-file-count": "{{PLURAL:$2|Cela catègoria-que contint mas que cél fichiér.|{{PLURAL:$1|Cél fichiér est|Celos $1 fichiérs sont}} a cela catègoria-que, sur na soma de $2.}}",
- "category-file-count-limited": "{{PLURAL:$1|Cél fichiér figure|Celos $1 fichiérs figuront}} dedens la presenta catègoria.",
+ "category-subcat-count": "Cela catègoria at {{PLURAL:$2|mas que cela sot-catègoria-que.|{{PLURAL:$1|cela sot-catègoria|celes $1 sot-catègories}}-que, sur na soma de $2.}}",
+ "category-subcat-count-limited": "Cela catègoria at {{PLURAL:$1|cela sot-catègoria|celes $1 sot-catègories}}-que.",
+ "category-article-count": "{{PLURAL:$2|Cela catègoria contint mas que cela pâge-que.|{{PLURAL:$1|Cela pâge-que est|Celes $1 pâges-que sont}} a cela catègoria, sur na soma de $2.}}",
+ "category-article-count-limited": "{{PLURAL:$1|Cela pâge-que figure|Celes $1 pâges-que figuront}} dedens la presenta catègoria.",
+ "category-file-count": "{{PLURAL:$2|Cela catègoria contint mas que cél fichiér-que.|{{PLURAL:$1|Cél fichiér-que est|Celos $1 fichiérs-que sont}} a cela catègoria, sur na soma de $2.}}",
+ "category-file-count-limited": "{{PLURAL:$1|Cél fichiér-que figure|Celos $1 fichiérs-que figuront}} dedens la presenta catègoria.",
"listingcontinuesabbrev": "(suita)",
"index-category": "Pâges endèxâyes",
"noindex-category": "Pâges pas endèxâyes",
@@ -149,6 +149,7 @@
"moredotdotdot": "Més...",
"morenotlisted": "Cela lista est pas complèta.",
"mypage": "Pâge",
+ "anonuserpage": "Utilisator encognu",
"mytalk": "Discussion",
"anontalk": "Discussion",
"navigation": "Navegacion",
@@ -170,7 +171,7 @@
"help": "Ãde",
"search": "Rechèrche",
"searchbutton": "Rechèrchiér",
- "go": "Alar trovar",
+ "go": "Emmodar",
"searcharticle": "Liére",
"history": "Historico de la pâge",
"history_short": "Historico",
@@ -242,7 +243,7 @@
"helppage-top-gethelp": "Ãde",
"mainpage": "Reçua",
"mainpage-description": "Reçua",
- "policy-url": "Project:Règlles de dedens",
+ "policy-url": "Project:Politiques",
"portal": "Reçua de la comunôtât",
"portal-url": "Project:Reçua de la comunôtât",
"privacy": "Politica de confidencialitât",
@@ -301,7 +302,7 @@
"nosuchaction": "Accion encognua",
"nosuchactiontext": "Lâaccion spècifiâye dens lâURL est pas justa.\nPôt-étre vos éd mâl-buchiê lâURL ou ben siuvu un lim fôx.\nPôt asse-ben étre na cofieria dedens la programeria empleyêe per {{SITENAME}}.",
"nosuchspecialpage": "Pâge spèciâla inègzistenta",
- "nospecialpagetext": "
Vos éd demandâ na pâge spèciâla quâègziste pas. \n\nNa lista de les pâges spèciâles justes sè trôve dessus [[Special:SpecialPages|{{int:specialpages}}]].",
+ "nospecialpagetext": "
Vos éd demandâ na pâge spèciâla pas justa. \n\nNa lista de les pâges spèciâles justes sè trôve dessus [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Fôta",
"databaseerror": "Fôta de la bâsa de balyês",
"databaseerror-text": "Na fôta de demanda de bâsa de balyês est arrevâye.\nCen pôt vegnir dâuna cofieria dedens la programeria.",
@@ -309,12 +310,12 @@
"databaseerror-query": "Demanda : $1",
"databaseerror-function": "Fonccion : $1",
"databaseerror-error": "Fôta : $1",
- "transaction-duration-limit-exceeded": "Por èvitar na trop fôrtâôgmentacion du dèlê de rèplicacion, cela transaccion est étâye anulâye perce que lo temps dâècritura ($1) at dèpassâ la limita de $2 second{{PLURAL:$2|a|es}}.\nSe vos chèrchiéd a changiér un mouél de piéces en mémo temps, pletout èprovâd de fâre lâopèracion en doux-três ètapes.",
+ "transaction-duration-limit-exceeded": "Por èvitar na trop fôrtâôgmentacion du dèlê de rèplicacion, cela transaccion est étâye anulâye, lo temps dâècritura ($1) at dèpassâ la limita de $2 second{{PLURAL:$2|a|es}}.\nSe vos chèrchiéd a changiér un mouél de piéces en mémo temps, pletout èprovâd de fâre lâopèracion en doux-três ètapes.",
"laggedslavemode": "
Atencion : cela pâge pôt pas contegnir los fins dèrriérs changements fêts.",
"readonly": "Bâsa de balyês cotâye",
"enterlockreason": "Buchiéd na rêson du vèrroly et pués unâèstimacion de son temps",
"readonlytext": "Ora la bâsa de balyês est cotâye por de novèles entrês et dâôtros changements, de sûr por na rotina dâentretin, dês cen tot tornerat en ôrdre.\n\nLâadministrator sistèmo que lâat cotâ at balyê celâèxplicacion : $1",
- "missing-article": "La bâsa de balyês at pas trovâ lo tèxto dâuna pâge quâel arêt diu trovar, apelâye « $1 » $2.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ dâuna dif dâun historico de vers na pâge suprimâye.\n\nSâo est pas lo câs, pôt étre na cofieria dedens la programeria.\nSe vos plét, signalâd-la a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar lâURL du lim.",
+ "missing-article": "La bâsa de balyês at pas trovâ lo tèxto dâuna pâge quâarêt diu trovar, apelâye « $1 » $2.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ dâuna dif dâun historico de vers na pâge suprimâye.\n\nSâo est pas lo câs, pôt étre na cofieria dedens la programeria.\nSe vos plét, signalâd-la a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar lâURL du lim.",
"missingarticle-rev": "(numerô de vèrsion : $1)",
"missingarticle-diff": "(dif : $1, $2)",
"readonly_lag": "La bâsa de balyês est étâye cotâye ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.",
@@ -343,12 +344,12 @@
"title-invalid-interwiki": "Lo titro de la pâge demandâye contint un lim entèrvouiqui que pôt pas étre empleyê dedens los titros.",
"title-invalid-talk-namespace": "Lo titro de la pâge demandâye sâen rèfère a na pâge de discussion que pôt pas ègzistar.",
"title-invalid-characters": "Lo titro de la pâge demandâye contint de caractèros pas justos : « $1 ».",
- "title-invalid-relative": "Lo titro contint un chemin relatif. Los titros que rèferençont de pâges relatives (./, ../) sont pas justos, perce que seront sovent inaccèssiblos dês los navegators des utilisators.",
+ "title-invalid-relative": "Lo titro contint un chemin relatif. Los titros que rèferençont de pâges relatives (./, ../) sont pas justos, seront sovent inaccèssiblos dês los navegators des utilisators.",
"title-invalid-magic-tilde": "Lo titro de la pâge demandâye contint na cobla de tildes magicos pas justa (
~~~ ).",
"title-invalid-too-long": "Lo titro de la pâge demandâye est trop long. Dêt pas dèpassar $1 octèt{{PLURAL:$1||s}} dens lâencodâjo UTF-8.",
"title-invalid-leading-colon": "Lo titro de la pâge demandâye contint un doux-pouents pas justo u comencement.",
- "perfcached": "Celes balyês sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.",
- "perfcachedts": "Celes balyês sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp lo $1. Por lo més {{PLURAL:$4|un rèsultat est disponiblo|$4 rèsultats sont disponiblos}} dedens lo cacho.",
+ "perfcached": "Celes balyês-que sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.",
+ "perfcachedts": "Celes balyês-que sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp lo $1. Por lo més {{PLURAL:$4|un rèsultat est disponiblo|$4 rèsultats sont disponiblos}} dedens lo cacho.",
"querypage-no-updates": "Ora les mêses a jorn por cela pâge sont dèsactivâyes.\nLes balyês ique seront pas betâyes a jorn.",
"viewsource": "Vêre lo tèxto sôrsa",
"viewsource-title": "Vêre lo tèxto sôrsa de $1",
@@ -357,20 +358,20 @@
"protectedpagetext": "Cela pâge est étâye protègiêe por empachiér son changement ou ben dâôtres accions.",
"viewsourcetext": "Vos pouede vêre et copiyér lo tèxto sôrsa de cela pâge.",
"viewyourtext": "Vos pouede vêre et copiyér lo tèxto sôrsa de
voutros changements a cela pâge.",
- "protectedinterface": "Cela pâge-que balye de tèxto dâentèrface por la programeria sur cél vouiqui et est vêr protègiêe por èvitar los abus.\nPor apondre ou ben changiér de traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
+ "protectedinterface": "Cela pâge balye de tèxto dâentèrface por la programeria sur cél vouiqui et est vêr protègiêe por èvitar los abus.\nPor apondre ou ben changiér de traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
"editinginterface": "
Atencion : vos éte aprés changiér na pâge empleyêe por fâre lo tèxto dâentèrface de la programeria.\nLos changements sè cognetront sur lâaparence de lâentèrface utilisator por los ôtros utilisators de cél vouiqui.",
- "translateinterface": "Por apondre ou ben changiér des traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
- "cascadeprotected": "Cela pâge-que est protègiêe contre los changements perce quâel est transcllua per {{PLURAL:$1|cela pâge quâest étâye protègiêe|celes pâges que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ :\n$2",
+ "translateinterface": "Por apondre ou ben changiér de traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
+ "cascadeprotected": "Cela pâge est protègiêe contre los changements, el est transcllua per {{PLURAL:$1|cela pâge-que quâest étâye protègiêe|celes pâges-que que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ :\n$2",
"namespaceprotected": "Vos éd pas la pèrmission de changiér les pâges de lâèspâço de noms «
$1 ».",
- "customcssprotected": "Vos éd pas la pèrmission de changiér cela pâge CSS perce que contint la configuracion a sè dâun ôtrâutilisator.",
- "customjsprotected": "Vos éd pas la pèrmission de changiér cela pâge JavaScript perce que contint la configuracion a sè dâun ôtrâutilisator.",
+ "customcssprotected": "Vos éd pas la pèrmission de changiér cela pâge CSS, contint la configuracion a sè dâun ôtrâutilisator.",
+ "customjsprotected": "Vos éd pas la pèrmission de changiér cela pâge JavaScript, contint la configuracion a sè dâun ôtrâutilisator.",
"mycustomcssprotected": "Vos éd pas la pèrmission de changiér cela pâge CSS.",
"mycustomjsprotected": "Vos éd pas la pèrmission de changiér cela pâge JavaScript.",
"myprivateinfoprotected": "Vos éd pas la pèrmission de changiér voutres enformacions a vos.",
"mypreferencesprotected": "Vos éd pas la pèrmission de changiér voutres prèferences.",
"ns-specialprotected": "Les pâges spèciâles pôvont pas étre changiêes.",
"titleprotected": "Cél titro est étâ protègiê a la crèacion per [[User:$1|$1]].\nLa rêson balyêe est «
$2 ».",
- "filereadonlyerror": "Y at pas moyen de changiér lo fichiér « $1 » perce que lo dèpôt de fichiérs « $2 » est mas quâen lèctura.\n\nLâadministrator sistèmo que lâat cotâ at balyê celâèxplicacion : « $3 ».",
+ "filereadonlyerror": "Y at pas moyen de changiér lo fichiér « $1 », lo dèpôt de fichiérs « $2 » est mas quâen lèctura.\n\nLâadministrator sistèmo que lâat cotâ at balyê celâèxplicacion : « $3 ».",
"invalidtitle-knownnamespace": "Titro pas justo avouéc lâèspâço de noms « $2 » et lo tèxto « $3 »",
"invalidtitle-unknownnamespace": "Titro pas justo avouéc lo numerô dâèspâço de noms encognu $1 et lo tèxto « $2 »",
"exception-nologin": "Pas branchiê",
@@ -443,11 +444,11 @@
"loginerror": "Fôta de branchement",
"createacct-error": "Fôta pendent la crèacion du comptio",
"createaccounterror": "Y at pas moyen de fâre lo comptio : $1",
- "nocookiesnew": "Lo comptio utilisator est étâ fêt, mas vos éte pas branchiê{{GENDER:||e}}.\n{{SITENAME}} emplèye des raportiors (
cookies ) por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd-vos branchiér avouéc voutron novél nom dâutilisator et voutron contresegno.",
- "nocookieslogin": "{{SITENAME}} emplèye des raportiors (
cookies ) por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd èprovar.",
- "nocookiesfornew": "Lo comptio utilisator est pas étâ fêt, perce que nos ens pas possu confirmar son origina.\nControlâd que vos éd activâ los raportiors (
cookies ), rechargiéd la pâge et pués tornâd èprovar.",
+ "nocookiesnew": "Lo comptio utilisator est étâ fêt, mas vos éte pas branchiê{{GENDER:||e}}.\n{{SITENAME}} emplèye de raportiors (
cookies ) por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd-vos branchiér avouéc voutron novél nom dâutilisator et voutron contresegno.",
+ "nocookieslogin": "{{SITENAME}} emplèye de raportiors (
cookies ) por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd èprovar.",
+ "nocookiesfornew": "Lo comptio utilisator est pas étâ fêt, nos ens pas possu confirmar son origina.\nControlâd que vos éd activâ los raportiors (
cookies ), rechargiéd la pâge et pués tornâd èprovar.",
"noname": "Vos éd pas spècifiâ un nom dâutilisator justo.",
- "loginsuccesstitle": "Branchement reussi",
+ "loginsuccesstitle": "Branchiê(e)",
"loginsuccess": "
Ora vos éte branchiê{{GENDER:$1||e}} a {{SITENAME}} coment « $1 ». ",
"nosuchuser": "Y at gins dâutilisator avouéc lo nom « $1 ».\nLos noms dâutilisator sont sensiblos a la câssa.\nSe vos plét, controlâd lâortografia ou ben [[Special:UserLogin/signup|féte un comptio novél]].",
"nosuchusershort": "Y at gins dâutilisator avouéc lo nom « $1 ».\nSe vos plét, controlâd lâortografia.",
@@ -470,23 +471,23 @@
"eauthentsent": "Un mèssâjo de confirmacion est étâ mandâ a lâadrèce èlèctronica spècifiâye.\nDevant quâun ôtro mèssâjo seye mandâ a cél comptio, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo comptio est franc lo voutro.",
"throttled-mailpassword": "Un mèssâjo de remêsâa zérô de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|lâhora passâye|les $1 hores passâyes}}.\nPor èvitar los abus, ren que yon serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.",
"mailerror": "Fôta pendent lâèxpèdicion du mèssâjo : $1",
- "acct_creation_throttle_hit": "Des vesitors de cél vouiqui-que quâemplèyont voutron adrèce IP ant fêt $1 comptio{{PLURAL:$1||s}} pendent lo jorn passâ, cen quâest lo més ôtorisâ dens ceti temps.\nDu côp los vesitors quâemplèyont celâadrèce IP pôvont fâre gins de comptio por lo moment.",
+ "acct_creation_throttle_hit": "Des vesitors de cél vouiqui quâemplèyont voutron adrèce IP ant fêt $1 comptio{{PLURAL:$1||s}} pendent lo jorn passâ, cen quâest lo més ôtorisâ dens ceti temps.\nDu côp los vesitors quâemplèyont celâadrèce IP pôvont fâre gins de comptio por lo moment.",
"emailauthenticated": "Voutron adrèce èlèctronica est étâye confirmâye lo $2 a $3.",
- "emailnotauthenticated": "Voutron adrèce èlèctronica est pâoncor confirmâye.\nNion mèssâjo serat mandâ por châcuna de celes fonccionalitâts.",
+ "emailnotauthenticated": "Voutron adrèce èlèctronica est pâoncor confirmâye.\nNion mèssâjo serat mandâ por châcuna de celes fonccionalitâts-que.",
"noemailprefs": "Spècifiâd unâadrèce èlèctronica dens voutres prèferences por empleyér celes fonccionalitâts.",
"emailconfirmlink": "Confirmâd voutron adrèce èlèctronica",
- "invalidemailaddress": "Celâadrèce èlèctronica pôt pas étre accèptâye perce que semble avêr un format pas justo.\nSe vos plét, buchiéd unâadrèce ben formatâye ou ben lèssiéd cél champ vouedo.",
+ "invalidemailaddress": "Celâadrèce èlèctronica pôt pas étre accèptâye, semble avêr un format pas justo.\nSe vos plét, buchiéd unâadrèce ben formatâye ou ben lèssiéd cél champ vouedo.",
"cannotchangeemail": "Les adrèces èlèctroniques des comptios pôvont pas étre changiêes sur cél vouiqui.",
"emaildisabled": "Cél seto pôt pas mandar de mèssâjos.",
"accountcreated": "Comptio fêt",
"accountcreatedtext": "Lo comptio utilisator por [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discussion]]) est étâ fêt.",
"createaccount-title": "Crèacion dâun comptio por {{SITENAME}}",
- "createaccount-text": "Yon at fêt un comptio por voutron adrèce èlèctronica dessus {{SITENAME}} ($4) apelâ « $2 », avouéc lo contresegno « $3 ».\nVos vos devriâd branchiér et pués changiér dês ora voutron contresegno.\n\nIgnorâd cél mèssâjo-que se cél compto est étâ fêt per fôta.",
+ "createaccount-text": "Yon at fêt un comptio por voutron adrèce èlèctronica dessus {{SITENAME}} ($4) apelâ « $2 », avouéc lo contresegno « $3 ».\nVos vos devriâd branchiér et pués changiér dês ora voutron contresegno.\n\nIgnorâd cél mèssâjo se cél comptio est étâ fêt per fôta.",
"login-throttled": "Dês pou vos éd èprovâ un mouél de branchements.\nSe vos plét, atende-vos $1 devant que tornar èprovar.",
"login-abort-generic": "Voutron branchement at pas reussi - Anulâ",
- "login-migrated-generic": "Voutron comptio est étâ migrâ, et pués voutron nom dâutilisator ègziste pas més dessus cél vouiqui.",
+ "login-migrated-generic": "Voutron comptio est étâ migrâ, et pués voutron nom dâutilisator ègziste pas més sur cél vouiqui.",
"loginlanguagelabel": "Lengoua : $1",
- "suspicious-userlogout": "Voutra demanda de dèbranchement est étâye refusâye perce que semble quâest étâye mandâye per un navegator câsso ou ben la mêsa en cacho dâun proxi.",
+ "suspicious-userlogout": "Voutra demanda de dèbranchement est étâye refusâye, semble quâel est étâye mandâye per un navegator câsso ou ben la mêsa en cacho dâun proxi.",
"createacct-another-realname-tip": "Lo veré nom est u chouèx.\nSe vos dècidâd de lo balyér, serat empleyê por atribuar a lâutilisator ses ôvres.",
"pt-login": "Sè branchiér",
"pt-login-button": "Sè branchiér",
@@ -503,7 +504,7 @@
"newpassword": "Contresegno novél :",
"retypenew": "Confirmar lo contresegno novél :",
"resetpass_submit": "Changiér lo contresegno et pués sè branchiér",
- "changepassword-success": "Voutron contresegno est étâ changiê avouéc reusséta !",
+ "changepassword-success": "Voutron contresegno est étâ changiê !",
"changepassword-throttled": "Dês pou vos éd èprovâ un mouél de branchements.\nSe vos plét, atende-vos $1 devant que tornar èprovar.",
"botpasswords": "Contresegnos de robots",
"botpasswords-summary": "
Contresegnos de robots pèrmèt dâarrevar a un comptio utilisator avouéc lâAPI sen empleyér los identifients de branchement principâls. Los drêts dâutilisator disponiblos en étent branchiê avouéc un contresegno de robot pôvont étre rèduits.\n\nSe vos vêde pas porquè vos vodriâd cen fâre, o est que vos en éd pas fôta. Nion vos devrêt jamés demandar de nen fâre yon et pués de lo y balyér.",
@@ -526,11 +527,11 @@
"botpasswords-insert-failed": "Falyita de lâaponsa du nom de robot « $1 ». Est-o quâil est ja étâ apondu ?",
"botpasswords-update-failed": "Falyita a la mêsâa jorn du nom de robot « $1 ». Est-o quâil est ja étâ suprimâ ?",
"botpasswords-created-title": "Contresegno de robot fêt",
- "botpasswords-created-body": "Lo contresegno de robot « $1 » est étâ fêt avouéc reusséta.",
+ "botpasswords-created-body": "Lo contresegno de robot por lo nom de robot « $1 » a lâutilisator « $2 » est étâ fêt.",
"botpasswords-updated-title": "Contresegno de robot betâ a jorn",
- "botpasswords-updated-body": "Lo contresegno de robot « $1 » est étâ betâ a jorn avouéc reusséta.",
+ "botpasswords-updated-body": "Lo contresegno de robot por lo nom de robot « $1 » a lâutilisator « $2 » est étâ betâ a jorn.",
"botpasswords-deleted-title": "Contresegno de robot suprimâ",
- "botpasswords-deleted-body": "Lo contresegno de robot « $1 » est étâ suprimâ.",
+ "botpasswords-deleted-body": "Lo contresegno de robot por lo nom de robot « $1 » a lâutilisator « $2 » est étâ suprimâ.",
"botpasswords-newpassword": "Lo contresegno novél por sè branchiér avouéc
$1 est
$2 .
Se vos plét, encartâd-lo por y fâre rèference ples târd. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider est pas disponiblo.",
"botpasswords-restriction-failed": "Les rèstriccions de contresegno de robot empachont cél branchement.",
@@ -540,7 +541,7 @@
"resetpass-no-info": "Vos dête étre branchiê por arrevar tot drêt a cela pâge.",
"resetpass-submit-loggedin": "Changiér lo contresegno",
"resetpass-submit-cancel": "Anular",
- "resetpass-wrong-oldpass": "Contresegno temporèro ou ben dâora pas justo.\nPôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben demandâ un contresegno temporèro novél.",
+ "resetpass-wrong-oldpass": "Contresegno temporèro ou ben dâora pas justo.\nPôt-étre vos éd ja changiê voutron contresegno ou ben demandâ un contresegno temporèro novél.",
"resetpass-recycled": "Se vos plét, rebetâd voutron contresegno a quârque-ren dâôtro que celi dâora.",
"resetpass-temp-emailed": "Vos éte branchiê{{GENDER:||e}} avouéc un code temporèro mandâ per mèssageria èlèctronica.\nPor chavonar lo branchement, vos dête dèfenir un contresegno novél ique :",
"resetpass-temp-password": "Contresegno temporèro :",
@@ -549,8 +550,8 @@
"resetpass-expired-soft": "Voutron contresegno at èxpirâ et dêt étre rebetâ a zérô. Se vos plét, chouèsésséd-nen un novél ora ou ben cllicâd dessus « {{int:resetpass-submit-cancel}} » por o fâre ples târd.",
"resetpass-validity-soft": "Voutron contresegno est pas justo : $1\n\nSe vos plét, chouèsésséd-nen un novél ora ou ben cllicâd dessus « {{int:resetpass-submit-cancel}} » por o fâre ples târd.",
"passwordreset": "Remêsâa zérô du contresegno",
- "passwordreset-text-one": "Rempléd cél formulèro por recêvre un contresegno temporèro per mèssageria èlèctronica.",
- "passwordreset-text-many": "{{PLURAL:$1|Rempléd yon des champs por recêvre un contresegno temporèro per mèssageria èlèctronica.}}",
+ "passwordreset-text-one": "Empléd cél formulèro por recêvre un contresegno temporèro per mèssageria èlèctronica.",
+ "passwordreset-text-many": "{{PLURAL:$1|Empléd yon des champs por recêvre un contresegno temporèro per mèssageria èlèctronica.}}",
"passwordreset-disabled": "La remêsâa zérô des contresegnos est étâye dèsactivâye sur cél vouiqui.",
"passwordreset-emaildisabled": "Les fonccionalitâts de mèssageria èlèctronica sont étâyes dèsactivâyes sur cél vouiqui.",
"passwordreset-username": "Nom dâutilisator :",
@@ -560,12 +561,12 @@
"passwordreset-email": "Adrèce èlèctronica :",
"passwordreset-emailtitle": "Dètalys du comptio dessus {{SITENAME}}",
"passwordreset-emailtext-ip": "Yon (de sûr vos, avouéc lâadrèce IP $1) at demandâ na remêsâa zérô de voutron\ncontresegno por {{SITENAME}} ($4). {{PLURAL:$3|Cél comptio utilisator-que est associyê|Celos comptios utilisators-que sont associyês}}\na celâadrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben se vos vos éte rapelâ de voutron contresegno originâl et que vos en voléd pas més changiér,\nvos pouede ignorar cél mèssâjo et continuar a empleyér voutron viely contresegno.",
- "passwordreset-emailtext-user": "Lâutilisator $1 dessus {{SITENAME}} at demandâ na remêsâa zérô de voutron contresegno por {{SITENAME}}\n($4). {{PLURAL:$3|Cél compto utilisator-que est associyê|Celos comptos utilisators-que sont associyês}}\na celâadrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben se vos vos éte rapelâ de voutron contresegno originâl et que vos en voléd pas més changiér,\nvos pouede ignorar cél mèssâjo et continuar a empleyér voutron viely contresegno.",
+ "passwordreset-emailtext-user": "Lâutilisator $1 dessus {{SITENAME}} at demandâ na remêsâa zérô de voutron contresegno por {{SITENAME}}\n($4). {{PLURAL:$3|Cél comptio utilisator-que est associyê|Celos comptios utilisators-que sont associyês}}\na celâadrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben se vos vos éte rapelâ de voutron contresegno originâl et que vos en voléd pas més changiér,\nvos pouede ignorar cél mèssâjo et continuar a empleyér voutron viely contresegno.",
"passwordreset-emailelement": "Nom dâutilisator :\n$1\n\nContresegno temporèro :\n$2",
"passwordreset-emailsentemail": "Se celâadrèce èlèctronica est associyêe a voutron comptio, adonc un mèssâjo de remêsâa zérô de contresegno serat mandâ.",
"passwordreset-emailsentusername": "Sây at unâadrèce èlèctronica associyêe a cél nom dâutilisator, adonc un mèssâjo de remêsâa zérô de contresegno serat mandâ.",
- "passwordreset-emailsent-capture": "Un mèssâjo de remêsâa zérô de contresegno est étâ mandâ, quâest montrâ ce-desot.",
- "passwordreset-emailerror-capture": "Un mèssâjo de remêsâa zérô de contresegno est étâ fêt, quâest montrâ ce-desot, mas lâèxpèdicion a lâutilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
+ "passwordreset-emailsent-capture": "Un mèssâjo de remêsâa zérô de contresegno est étâ mandâ, quâil est montrâ ce-desot.",
+ "passwordreset-emailerror-capture": "Un mèssâjo de remêsâa zérô de contresegno est étâ fêt, quâil est montrâ ce-desot, mas lâèxpèdicion a lâutilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
"changeemail": "Changiér ou ben enlevar lâadrèce èlèctronica",
"changeemail-header": "Complètâd cél formulèro por changiér voutron adrèce èlèctronica. Se vos voléd enlevar lâassociacion dâunâadrèce èlèctronica avouéc voutron comptio, lèssiéd la novèlâadrèce èlèctronica voueda pendent la somission du formulèro.",
"changeemail-passwordrequired": "Vos devréd buchiér voutron contresegno por confirmar cél changement.",
@@ -579,7 +580,7 @@
"changeemail-throttled": "Vos éd èprovâ un mouél de branchements.\nSe vos plét, atende-vos $1 devant que tornar èprovar.",
"changeemail-nochange": "Se vos plét, buchiéd na novèlâadrèce èlèctronica difèrenta.",
"resettokens": "Rebetar a zérô los jetons",
- "resettokens-text": "Ique, vos pouede rebetar a zérô los jetons que pèrmètont dâarrevar a quârques balyês privâyes associyêes a voutron comptio.\n\nVos o devriâd fâre se vos los éd partagiês per accident avouéc yon ou ben se voutron comptio est étâ compromètu.",
+ "resettokens-text": "Ique, vos pouede rebetar a zérô los jetons que pèrmètont dâarrevar a quârques balyês privâyes associyêes a voutron comptio.\n\nVos o devriâd fâre se vos los éd partagiês per accident avouéc yon ou ben se voutron comptio est étâ comprometu.",
"resettokens-no-tokens": "Y at gins de jeton a rebetar a zérô.",
"resettokens-tokens": "Jetons :",
"resettokens-token-label": "$1 (valor dâora : $2)",
@@ -613,7 +614,7 @@
"showpreview": "Montrar un apèrçu",
"showdiff": "Montrar los changements",
"blankarticle": "
Atencion : la pâge que vos éte aprés fâre est voueda.\nSe vos tornâd cllicar dessus « {{int:savearticle}} », la pâge serat fêta sen gins de contegnu.",
- "anoneditwarning": "
Atencion : vos éte pas branchiê. Voutron adrèce IP serat visibla devant tot lo mondo se vos féte des changements. Se vos vos
[$1 branchiéd] ou ben
[$2 féte un comptio] , voutros changements seront atribuâs a voutron nom dâutilisator, entre-mié ôtros avantâjos.",
+ "anoneditwarning": "
Atencion : vos éte pas branchiê. Voutron adrèce IP serat visibla devant tot lo mondo se vos féte de changements. Se vos vos
[$1 branchiéd] ou ben
[$2 féte un comptio] , voutros changements seront atribuâs a voutron nom dâutilisator, entre-mié ôtros avantâjos.",
"anonpreviewwarning": "
Vos éte pas branchiê{{GENDER:||e}}. En encartent, voutron adrèce IP serat encartâye dedens lâhistorico des changements de cela pâge. ",
"missingsummary": "
Sovegnence : vos éd balyê gins de rèsumâ de changement.\nSe vos tornâd cllicar dessus « {{int:savearticle}} », voutron changement serat encartâ sen rèsumâ.",
"selfredirect": "
Atencion : vos éte aprés redirigiér la pâge vers lyé-méma.\nVos pouede avêr spècifiâ na crouye ciba por la redirèccion ou ben pôt-étre vos changiéd na crouye pâge.\nSe vos tornâd cllicar dessus « {{int:savearticle}} », la redirèccion serat fêta tot-un.",
@@ -623,8 +624,8 @@
"subject-preview": "Apèrçu de la chousa :",
"previewerrortext": "Na fôta est arrevâye pendent lâèprôva dâapèrçu de voutros changements.",
"blockedtitle": "Lâutilisator est blocâ",
- "blockedtext": "
Voutron nom dâutilisator voutron adrèce IP est étâ(ye) blocâ(ye). \n\nLo blocâjo est étâ fêt per $1.\nLa rêson balyêe est
$2 .\n\n* Comencement du blocâjo : $8\n* Ãxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben un ôtrâ[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.\nVos pouede pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens quâunâadrèce èlèctronica justa seye spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos seyâd pas étâ blocâ de lâempleyér.\nVoutron adrèce IP dâora est $3 et lâidentifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.",
- "autoblockedtext": "Voutron adrèce IP est étâye blocâye ôtomaticament perce quâel est étâye empleyêe per un ôtrâutilisator, lui-mémo blocâ per $1.\nLa rêson balyêe est :\n\n:
$2 \n\n* Comencement du blocâjo : $8\n* Ãxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.\n\nNotâd que vos porréd pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens que vos èyâd unâadrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyâd pas étâ blocâ de lâempleyér.\n\nVoutron adrèce IP dâora est $3 et lâidentifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.",
+ "blockedtext": "
Voutron nom dâutilisator voutron adrèce IP est étâ(ye) blocâ(ye). \n\nLo blocâjo est étâ fêt per $1.\nLa rêson balyêe est
$2 .\n\n* Comencement du blocâjo : $8\n* Ãxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben un ôtrâ[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.\nVos pouede pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens quâunâadrèce èlèctronica justa seye spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de lâempleyér.\nVoutron adrèce IP dâora est $3 et lâidentifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.",
+ "autoblockedtext": "Voutron adrèce IP est étâye blocâye ôtomaticament, el est étâye empleyêe per un ôtrâutilisator, lui-mémo blocâ per $1.\nLa rêson balyêe est :\n\n:
$2 \n\n* Comencement du blocâjo : $8\n* Ãxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.\n\nNotâd que vos porréd pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens que vos èyéd unâadrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de lâempleyér.\n\nVoutron adrèce IP dâora est $3 et lâidentifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.",
"blockednoreason": "niona rêson balyêe",
"whitelistedittext": "Se vos plét, vos vos dête $1 por povêr changiér les pâges.",
"confirmedittext": "Vos dête confirmar voutron adrèce èlèctronica devant que changiér les pâges.\nSe vos plét, buchiéd et pués validâd voutron adrèce èlèctronica dens voutres [[Special:Preferences|prèferences]].",
@@ -634,13 +635,13 @@
"loginreqlink": "branchiér",
"loginreqpagetext": "Se vos plét, vos vos dête $1 por povêr vêre les ôtres pâges.",
"accmailtitle": "Contresegno mandâ",
- "accmailtext": "Un contresegno fêt a lâhasârd por [[User talk:$1|$1]] est étâ mandâ a $2. Pôt étre changiê sur la pâge de
[[Special:ChangePassword|changement de contresegno]] aprés branchement.",
+ "accmailtext": "Un contresegno fêt a lâhasârd por [[User talk:$1|$1]] est étâ mandâ a $2. Pôt étre changiê dessus la pâge de
[[Special:ChangePassword|changement de contresegno]] aprés branchement.",
"newarticle": "(Novél)",
- "newarticletext": "Vos éd siuvu un lim de vers na pâge quâègziste pâoncor.\nPor fâre cela pâge, buchiéd voutron tèxto dedens la bouèta ce-desot (vêde la [$1 pâge dâéde] por més dâenformacions).\nSe vos éte arrevâ{{GENDER:||ye}} ique per fôta, cllicâd sur lo boton
Devant de voutron navegator.",
- "anontalkpagetext": "----\n
O est la pâge de discussion dâun utilisator anonimo quâat pâoncor fêt un comptio ou ben que nen emplèye pas. \nPor cen, nos devens empleyér son adrèce IP numerica por o identifiar.\nUnâadrèce IP dâense pôt étre partagiêe per un mouél dâutilisators.\nSe vos éte {{GENDER:|un utilisator|unâutilisatrice}} anonim{{GENDER:|o|a}} et pués se vos constatâd que des comentèros que vos regârdont pas vos sont étâs adrèciês, se vos plét [[Special:UserLogin/signup|féte un comptio]] ou ben [[Special:UserLogin|branchiéd-vos]] por èvitar tota confusion que vint avouéc dâôtros utilisators anonimos.",
+ "newarticletext": "Vos éd siuvu un lim de vers na pâge quâègziste pâoncor.\nPor fâre cela pâge, buchiéd voutron tèxto dedens la bouèta ce-desot (vêde la [$1 pâge dâéde] por més dâenformacions).\nSe vos éte arrevâ{{GENDER:||ye}} ique per fôta, cllicâd dessus lo boton
Devant de voutron navegator.",
+ "anontalkpagetext": "----\n
O est la pâge de discussion dâun utilisator anonimo quâat pâoncor fêt un comptio ou ben que nen emplèye pas. \nPor cen, nos devens empleyér son adrèce IP numerica por o identifiar.\nUnâadrèce IP dâense pôt étre partagiêe per un mouél dâutilisators.\nSe vos éte {{GENDER:|un utilisator|unâutilisatrice}} anonim{{GENDER:|o|a}} et pués se vos constatâd que de comentèros que vos regârdont pas vos sont étâs adrèciês, se vos plét [[Special:UserLogin/signup|féte un comptio]] ou ben [[Special:UserLogin|branchiéd-vos]] por èvitar tota confusion que vint avouéc dâôtros utilisators anonimos.",
"noarticletext": "Ora y at gins de tèxto dedens cela pâge.\nVos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges,\n
[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornâls liyês]\nou ben [{{fullurl:{{FULLPAGENAME}}|action=edit}} fâre cela pâge] .",
"noarticletext-nopermission": "Ora y at gins de tèxto dedens cela pâge.\nVos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges ou ben
[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornâls liyês] , mas vos éd pas la pèrmission de fâre cela pâge.",
- "missing-revision": "La vèrsion n° $1 de la pâge apelâye « {{FULLPAGENAME}} » ègziste pas.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ dâun historico de vers na pâge quâest étâye suprimâye.\nVos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+ "missing-revision": "La vèrsion n° $1 de la pâge apelâye « {{FULLPAGENAME}} » ègziste pas.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ dâun historico de vers na pâge quâest étâye suprimâye.\nVos pouede trovar més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
"userpage-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.\nSe vos plét, controlâd se vos voléd fâre ou ben changiér cela pâge.",
"userpage-userdoesnotexist-view": "Lo comptio utilisator « $1 » est pas encartâ.",
"blocked-notice-logextract": "Ora {{GENDER:$1|cél utilisator|celâutilisatrice}} est blocâ{{GENDER:$1||ye}}.\nLa dèrriére entrâ du jornâl des blocâjos est balyêe ce-desot coment rèference :",
@@ -651,7 +652,7 @@
"userjspreview": "
Rapelâd-vos que vos éte ren quâaprés prèvêre voutron code JavaScript.\nIl est pâoncor étâ encartâ ! ",
"sitecsspreview": "
Rapelâd-vos que vos éte ren quâaprés prèvêre cela fôlye CSS.\nEl est pâoncor étâye encartâye ! ",
"sitejspreview": "
Rapelâd-vos que vos éte ren quâaprés prèvêre cél code JavaScript.\nIl est pâoncor étâ encartâ ! ",
- "userinvalidcssjstitle": "
Atencion : ègziste gins dâhabelyâjo « $1 ».\nRapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
+ "userinvalidcssjstitle": "
Atencion : ègziste gins dâhabelyâjo « $1 ».\nRapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont de titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
"updated": "(Betâ a jorn)",
"note": "
Nota : ",
"previewnote": "
Rapelâd-vos quâo est ren quâun apèrçu. \nVoutros changements sont pâoncor étâs encartâs !",
@@ -659,14 +660,14 @@
"previewconflict": "Cél apèrçu fât vêre lo tèxto de la zona de changement de dâamont coment aparêtrat se vos chouèsésséd de lâencartar.",
"session_fail_preview": "Dèsolâ ! Nos povens pas encartar voutron changement a côsa dâuna pèrda dâenformacions sur voutra sèssion.\n\nPôt-étre vos éte étâ dèbranchiê.
Se vos plét, controlâd que vos éte adés branchiê et pués tornâd èprovar. \nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (
cookies ) de cél seto.",
"session_fail_preview_html": "Dèsolâ ! Nos povens pas encartar voutron changement a côsa dâuna pèrda dâenformacions sur voutra sèssion.\n\n
Perce que {{SITENAME}} at activâ lâHTML bruto, lâapèrçu est étâ cachiê por prèvegnir les ataques per JavaScript. \n\n
Se lâèprôva de changement est lèg·itima, se vos plét tornâd èprovar. \nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (
cookies ) de cél seto.",
- "token_suffix_mismatch": "
Voutron changement est pas étâ accèptâ perce que voutron cliant at mècllâ los caractèros de ponctuacion dedens lo jeton de changement. \nLo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.\nDes côps cél problèmo arreve quand vos empleyéd un sèrviço de proxi Vouèbe anonimo quâest pas de sûr.",
+ "token_suffix_mismatch": "
Voutron changement est pas étâ accèptâ, voutron cliant at mècllâ los caractèros de ponctuacion dedens lo jeton de changement. \nLo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.\nDes côps cél problèmo arreve quand vos empleyéd un sèrviço de proxi Vouèbe anonimo quâest pas de sûr.",
"edit_form_incomplete": "
Doux-três parties du formulèro de changement ant pas avengiê lo sèrvior ; controlâd que voutros changements sont entactos et pués tornâd èprovar. ",
"editing": "Changement de $1",
"creating": "Crèacion de $1",
"editingsection": "Changement de $1 (sèccion)",
"editingcomment": "Changement de $1 (novèla sèccion)",
"editconflict": "Disputa de changement : $1",
- "explainconflict": "Un ôtro at changiê cela pâge aprés que vos vos seyâd betâ a la changiér.\nLa zona de changement de dâamont contint lo tèxto de la pâge coment ègziste orendrêt.\nVoutros changements aparèssont dedens la zona de changement de desot.\nVos voléd devêr fusionar voutros changements dedens lo tèxto ègzistent.\n
Solament lo tèxto de la zona de changement de dâamont serat encartâ se vos cllicâd dessus « {{int:savearticle}} ».",
+ "explainconflict": "Un ôtro at changiê cela pâge aprés que vos vos seyéd betâ a la changiér.\nLa zona de changement de dâamont contint lo tèxto de la pâge coment ègziste orendrêt.\nVoutros changements aparèssont dedens la zona de changement de desot.\nVos voléd devêr fusionar voutros changements dedens lo tèxto ègzistent.\n
Solament lo tèxto de la zona de changement de dâamont serat encartâ se vos cllicâd dessus « {{int:savearticle}} ».",
"yourtext": "Voutron tèxto",
"storedversion": "Vèrsion encartâye",
"nonunicodebrowser": "
Atencion : voutron navegator recognêt pas lâUnicode. \nNa solucion de rechanjo est étâye trovâye por vos pèrmetre de changiér en tota suretât na pâge : los caractèros nan-ASCII aparêtront dedens la zona de changement coment codes hègzadècimâls.",
@@ -679,8 +680,8 @@
"readonlywarning": "
Atencion : la bâsa de balyês est étâye cotâye por na rotina dâentretin, cen fât que vos porréd vêr pas encartar voutros changements orendrêt. \nVos pouede copiyér et côlar voutron tèxto dedens un fichiér tèxto et pués lâencartar por ples târd.\n\nLâadministrator sistèmo que lâat cotâ at balyê celâèxplicacion : $1",
"protectedpagewarning": "
Atencion : cela pâge est étâye protègiêe de façon que solament los utilisators quâant lo statut dâadministrator la pouessont changiér. \nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
"semiprotectedpagewarning": "
Nota : cela pâge est étâye protègiêe de façon que solament los utilisators encartâs la pouessont changiér.\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
- "cascadeprotectedwarning": "
Atencion : cela pâge est étâye protègiêe de façon que solament los utilisators quâant lo statut dâadministrator la pouessont changiér perce quâel est transcllua dedens {{PLURAL:$1|cela pâge protègiêe|celes pâges protègiêes}}-que avouéc la « protèccion en cascâda » activâye :",
- "titleprotectedwarning": "
Atencion : cela pâge est étâye protègiêe de façon que des [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre. \nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
+ "cascadeprotectedwarning": "
Atencion : cela pâge est étâye protègiêe de façon que solament los utilisators quâant lo statut dâadministrator la pouessont changiér, el est transcllua dedens {{PLURAL:$1|cela pâge protègiêe|celes pâges protègiêes}}-que avouéc la « protèccion en cascâda » activâye :",
+ "titleprotectedwarning": "
Atencion : cela pâge est étâye protègiêe de façon que de [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre. \nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
"templatesused": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} per cela pâge :",
"templatesusedpreview": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cél apèrçu :",
"templatesusedsection": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cela sèccion :",
@@ -693,9 +694,9 @@
"sectioneditnotsupported-title": "Changement de sèccion pas recognu",
"sectioneditnotsupported-text": "Lo changement dâuna sèccion est pas recognu dens cela pâge.",
"permissionserrors": "Fôta de pèrmission",
- "permissionserrorstext": "Vos éd pas la pèrmission de fâre lâaccion demandâye por {{PLURAL:$1|cela rêson|celes rêsons}} :",
- "permissionserrorstext-withaction": "Vos éd pas la pèrmission de $2 por {{PLURAL:$1|cela rêson|celes rêsons}} :",
- "contentmodelediterror": "Vos pouede pas changiér cela vèrsion perce que son modèlo de contegnu est
$1
, cen que sè difèrence du modèlo de contegnu dâora de la pâge
$2
.",
+ "permissionserrorstext": "Vos éd pas la pèrmission de fâre lâaccion demandâye por {{PLURAL:$1|cela rêson|celes rêsons}}-que :",
+ "permissionserrorstext-withaction": "Vos éd pas la pèrmission de $2 por {{PLURAL:$1|cela rêson|celes rêsons}}-que :",
+ "contentmodelediterror": "Vos pouede pas changiér cela vèrsion, son modèlo de contegnu est
$1
, cen que sè difèrence du modèlo de contegnu dâora de la pâge
$2
.",
"recreate-moveddeleted-warn": "
Atencion : vos éte aprés refâre na pâge quâest étâye suprimâye dês devant. \n\nDemandâd-vos se fôt franc continuar son changement.\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ce-desot por comoditât :",
"moveddeleted-notice": "Cela pâge est étâye suprimâye.\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ce-desot coment rèference.",
"moveddeleted-notice-recent": "Dèsolâ, dês pou cela pâge est étâye suprimâye (dens les 24 hores passâyes).\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ce-desot coment rèference.",
@@ -703,7 +704,7 @@
"edit-hook-aborted": "Changement anulâ per unâèxtension.\nNionâèxplicacion est étâye balyêe.",
"edit-gone-missing": "Y at pas moyen de betar a jorn la pâge.\nSemble que seye étâye suprimâye.",
"edit-conflict": "Disputa de changement.",
- "edit-no-change": "Voutron changement est étâ ignorâ perce que nion changement est étâ fêt u tèxto.",
+ "edit-no-change": "Voutron changement est étâ ignorâ, nion changement est étâ fêt u tèxto.",
"postedit-confirmation-created": "La pâge est étâye fêta.",
"postedit-confirmation-restored": "La pâge est étâye refêta.",
"postedit-confirmation-saved": "Voutron changement est étâ encartâ.",
@@ -711,7 +712,7 @@
"defaultmessagetext": "Mèssâjo per dèfôt",
"content-failed-to-parse": "Falyita de lâanalise du contegnu de $2 por lo modèlo $1 : $3",
"invalid-content-data": "Balyês du contegnu pas justes",
- "content-not-allowed-here": "Lo contegnu « $1 » est pas ôtorisâ sur la pâge [[$2]]",
+ "content-not-allowed-here": "Lo contegnu « $1 » est pas ôtorisâ dessus la pâge [[$2]]",
"editwarning-warning": "Quitar cela pâge vos farat pèrdre tôs los changements que vos éd fêts.\nSe vos éte branchiê{{GENDER:||e}}, vos pouede dèsactivar cela semonce dedens la sèccion « {{int:prefs-editing}} » de voutres prèferences.",
"editpage-notsupportedcontentformat-title": "Format de contegnu pas recognu",
"editpage-notsupportedcontentformat-text": "Lo format de contegnu $1 est pas recognu per lo modèlo de contegnu $2.",
@@ -744,7 +745,7 @@
"converter-manual-rule-error": "Fôta dècelâye dedens la règlla de convèrsion manuâla de lengoua",
"undo-success": "Lo changement pôt étre dèfêt.\nSe vos plét, controlâd la comparèson ce-desot por vos assurar quâo est franc cen que vos voléd fâre, et pués encartâd los changements por chavonar sa dèfêta.",
"undo-failure": "Lo changement at pas possu étre dèfêt a côsa dâuna disputa avouéc des changements entèrmèdièros.",
- "undo-norev": "Lo changement at pas possu étre dèfêt perce quâil est inègzistent ou ben quâil est étâ suprimâ.",
+ "undo-norev": "Lo changement at pas possu étre dèfêt, il est inègzistent ou ben il est étâ suprimâ.",
"undo-nochange": "Semble que lo changement seye ja étâ dèfêt.",
"undo-summary": "Dèfêta du changement $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]])",
"undo-summary-username-hidden": "Dèfêta du changement $1 dâun utilisator cachiê",
@@ -781,18 +782,18 @@
"rev-deleted-user": "(nom dâutilisator enlevâ)",
"rev-deleted-event": "(dètalys du jornâl enlevâs)",
"rev-deleted-user-contribs": "[nom dâutilisator ou ben adrèce IP enlevâ(ye) - changement cachiê sur les contribucions]",
- "rev-deleted-text-permission": "Cela vèrsion de la pâge est étâye
suprimâye .\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
- "rev-suppressed-text-permission": "Cela vèrsion de la pâge est étâye
rèprimâye .\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
- "rev-deleted-text-unhide": "Cela vèrsion de la pâge est étâye
suprimâye .\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
- "rev-suppressed-text-unhide": "Cela vèrsion de la pâge est étâye
rèprimâye .\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
- "rev-deleted-text-view": "Cela vèrsion de la pâge est étâye
suprimâye .\nVos la pouede vêre ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
- "rev-suppressed-text-view": "Cela vèrsion de la pâge est étâye
rèprimâye .\nVos la pouede vêre ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
- "rev-deleted-no-diff": "Vos pouede pas vêre cela dif perce que yona de les vèrsions est étâye
suprimâye .\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
- "rev-suppressed-no-diff": "Vos pouede pas vêre cela dif perce que yona de les vèrsions est étâye
suprimâye .",
- "rev-deleted-unhide-diff": "Yona de les vèrsions de cela dif est étâye
suprimâye .\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
- "rev-suppressed-unhide-diff": "Yona de les vèrsions de cela dif est étâye
rèprimâye .\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
- "rev-deleted-diff-view": "Yona de les vèrsions de cela dif est étâye
suprimâye .\nVos pouede vêre cela dif ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
- "rev-suppressed-diff-view": "Yona de les vèrsions de cela dif est étâye
rèprimâye .\nVos pouede vêre cela dif ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
+ "rev-deleted-text-permission": "Cela vèrsion de la pâge est étâye
suprimâye .\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+ "rev-suppressed-text-permission": "Cela vèrsion de la pâge est étâye
rèprimâye .\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
+ "rev-deleted-text-unhide": "Cela vèrsion de la pâge est étâye
suprimâye .\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
+ "rev-suppressed-text-unhide": "Cela vèrsion de la pâge est étâye
rèprimâye .\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
+ "rev-deleted-text-view": "Cela vèrsion de la pâge est étâye
suprimâye .\nVos la pouede vêre ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+ "rev-suppressed-text-view": "Cela vèrsion de la pâge est étâye
rèprimâye .\nVos la pouede vêre ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
+ "rev-deleted-no-diff": "Vos pouede pas vêre cela dif, yona de les vèrsions est étâye
suprimâye .\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+ "rev-suppressed-no-diff": "Vos pouede pas vêre cela dif, yona de les vèrsions est étâye
suprimâye .",
+ "rev-deleted-unhide-diff": "Yona de les vèrsions de cela dif est étâye
suprimâye .\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
+ "rev-suppressed-unhide-diff": "Yona de les vèrsions de cela dif est étâye
rèprimâye .\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
+ "rev-deleted-diff-view": "Yona de les vèrsions de cela dif est étâye
suprimâye .\nVos pouede vêre cela dif ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+ "rev-suppressed-diff-view": "Yona de les vèrsions de cela dif est étâye
rèprimâye .\nVos pouede vêre cela dif ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
"rev-delundel": "changiér la visibilitât",
"rev-showdeleted": "montrar",
"revisiondelete": "Suprimar ou ben refâre de vèrsions",
@@ -808,8 +809,8 @@
"revdelete-text-file": "Les vèrsions de fichiér suprimâyes continueront a aparêtre dedens lâhistorico du fichiér, mas na partia de lor contegnu serat inaccèssibla u publico.",
"logdelete-text": "Los èvènements du jornâl suprimâs continueront a aparêtre dedens los jornâls, mas na partia de lor contegnu serat inaccèssibla u publico.",
"revdelete-text-others": "Los ôtros administrators porront adés arrevar u contegnu cachiê et lo refâre, a muens que des rèstriccions de més seyont dèfenies.",
- "revdelete-confirm": "Se vos plét, confirmâd quâo est franc cen que vos voléd fâre, que vos en compregnéd les consèquences, et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles]].",
- "revdelete-suppress-text": "La rèprèssion dêt étre empleyêe
ren que dens celos câs :\n* Enformacions que pôvont étre difamatouères\n* Enformacions a sè que vant pas avouéc\n*:
adrèce, numerô de tèlèfono, numerô dâidentificacion nacionâl, et tot cen que vat avouéc ",
+ "revdelete-confirm": "Se vos plét, confirmâd quâo est franc cen que vos voléd fâre, que vos en compregnéd les consèquences, et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|politiques]].",
+ "revdelete-suppress-text": "La rèprèssion dêt étre empleyêe
ren que dens celos câs-que :\n* Enformacions que pôvont étre difamatouères\n* Enformacions a sè que vant pas avouéc\n*:
adrèce, numerô de tèlèfono, numerô dâidentificacion nacionâl, et tot cen que vat avouéc ",
"revdelete-legend": "Dèfenir de rèstriccions de visibilitât",
"revdelete-hide-text": "Tèxto de la vèrsion",
"revdelete-hide-image": "Cachiér lo contegnu du fichiér",
@@ -824,9 +825,9 @@
"revdelete-unsuppress": "Enlevar les rèstriccions sur les vèrsions refêtes",
"revdelete-log": "Rêson :",
"revdelete-submit": "Aplicar a {{PLURAL:$1|la vèrsion chouèsia|les vèrsions chouèsies}}",
- "revdelete-success": "Visibilitât de la vèrsion betâye a jorn avouéc reusséta.",
+ "revdelete-success": "Visibilitât de la vèrsion betâye a jorn.",
"revdelete-failure": "La visibilitât de la vèrsion at pas possu étre betâye a jorn :\n$1",
- "logdelete-success": "Visibilitât du jornâl dèfenia avouéc reusséta.",
+ "logdelete-success": "Visibilitât du jornâl dèfenia.",
"logdelete-failure": "La visibilitât du jornâl at pas possu étre dèfenia :\n$1",
"revdel-restore": "changiér la visibilitât",
"pagehist": "Historico de la pâge",
@@ -837,7 +838,7 @@
"revdelete-modify-missing": "Fôta en changient la piéce avouéc lâID $1 : el est manquenta dedens la bâsa de balyês !",
"revdelete-no-change": "
Atencion : la piéce datâye du $1 a $2 at ja la configuracion de visibilitât demandâye.",
"revdelete-concurrent-change": "Fôta en changient la piéce datâye du $1 a $2 : son statut semble étre étâ changiê per un ôtro justo que vos èprovâvâd dâo changiér.\nSe vos plét, controlâd los jornâls.",
- "revdelete-only-restricted": "Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar de piéces de la viua ux administrators sen chouèsir avouéc des ôtros chouèx de visibilitât.",
+ "revdelete-only-restricted": "Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar de piéces de la viua ux administrators sen chouèsir avouéc dâôtros chouèx de visibilitât.",
"revdelete-reason-dropdown": "*Rêsons corentes de suprèssion\n** Violacion du drêt dâôtor\n** Comentèros enformacions a sè que vant pas avouéc\n** Nom dâutilisator que vat pas avouéc\n** Enformacions que pôvont étre difamatouères",
"revdelete-otherreason": "Ãtra rêson ou ben rêson de més :",
"revdelete-reasonotherlist": "Ãtra rêson",
@@ -851,7 +852,7 @@
"mergehistory-from": "Pâge dâorigina :",
"mergehistory-into": "Pâge de dèstinacion :",
"mergehistory-list": "Historico des changements que pôvont étre fusionâs",
- "mergehistory-merge": "Celes vèrsions de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].\nEmpleyéd la colona de botons de chouèx por fusionar mas que les vèrsions fêtes dês lo comencement tant quâa la dâta spècifiâye.\nNotâd que lâusâjo des lims de navegacion rebeterat a zérô cela colona.",
+ "mergehistory-merge": "Celes vèrsions-que de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].\nEmpleyéd la colona de botons de chouèx por fusionar mas que les vèrsions fêtes dês lo comencement tant quâa la dâta spècifiâye.\nNotâd que lâusâjo des lims de navegacion rebeterat a zérô cela colona.",
"mergehistory-go": "Montrar los changements que pôvont étre fusionâs",
"mergehistory-submit": "Fusionar les vèrsions",
"mergehistory-empty": "Niona vèrsion pôt étre fusionâye.",
@@ -864,7 +865,7 @@
"mergehistory-fail-permission": "Drêts ensufisents por fusionar los historicos.",
"mergehistory-fail-self-merge": "Les pâges dâorigina et de dèstinacion sont pariéres.",
"mergehistory-fail-timestamps-overlap": "Les vèrsions dâorigina cavalont ou ben siuvont les vèrsions de dèstinacion.",
- "mergehistory-fail-toobig": "Y at pas moyen de fâre la fusion des historicos perce quâun nombro de {{PLURAL:$1|vèrsions}} dâamont la limita de $1 devrêt étre dèplaciê.",
+ "mergehistory-fail-toobig": "Y at pas moyen de fâre la fusion des historicos, un nombro de {{PLURAL:$1|vèrsions}} dâamont la limita de $1 devrêt étre dèplaciê.",
"mergehistory-no-source": "La pâge dâorigina $1 ègziste pas.",
"mergehistory-no-destination": "La pâge de dèstinacion $1 ègziste pas.",
"mergehistory-invalid-source": "La pâge dâorigina dêt avêr un titro justo.",
@@ -888,7 +889,7 @@
"diff-multi-sameuser": "({{PLURAL:$1|Na vèrsion entèrmèdièra per lo mémâutilisator pas montrâye|$1 vèrsions entèrmèdières per lo mémâutilisator pas montrâyes}})",
"diff-multi-otherusers": "({{PLURAL:$1|Na vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|un ôtrâutilisator|$2 utilisators}} pas montrâye{{PLURAL:$1||s}})",
"diff-multi-manyusers": "({{PLURAL:$1|Na vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més {{PLURAL:$2|dâun utilisator|de $2 utilisators}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})",
- "difference-missing-revision": "{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ dâuna dif de vers na pâge quâest étâye suprimâye.\nVos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+ "difference-missing-revision": "{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ dâuna dif de vers na pâge quâest étâye suprimâye.\nVos pouede trovar més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
"searchresults": "Rèsultats de la rechèrche",
"searchresults-title": "Rèsultats de la rechèrche por « $1 »",
"titlematches": "Corrèspondances dedens los titros de les pâges",
@@ -903,7 +904,7 @@
"shown-title": "Montrar $1 rèsultat{{PLURAL:$1||s}} per pâge",
"viewprevnext": "Vêre ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "
Y at na pâge apelâye « [[:$1]] » sur cél vouiqui. {{PLURAL:$2|0=|Vêde avouéc los ôtros rèsultats de voutra rechèrche.}}",
- "searchmenu-new": "
Fâre la pâge « [[:$1|$1]] » sur cél vouiqui ! {{PLURAL:$2|0=|Vêde avouéc la pâge trovâye avouéc voutra rechèrche.|Vêde avouéc los rèsultats de voutra rechèrche.}}",
+ "searchmenu-new": "
Fâre la pâge « [[:$1|$1]] » sur cél vouiqui ! {{PLURAL:$2|0=|Vêde asse-ben la pâge trovâye avouéc voutra rechèrche.|Vêde avouéc los rèsultats de voutra rechèrche.}}",
"searchprofile-articles": "Pâges de contegnu",
"searchprofile-images": "Multimèdiâ",
"searchprofile-everything": "Tot",
@@ -1019,7 +1020,7 @@
"yourvariant": "Vèrsion de la lengoua du contegnu :",
"prefs-help-variant": "Voutra vèrsion voutron ortografia prèferâye por fâre vêre les pâges de contegnu de cél vouiqui.",
"yournick": "Signatura novèla :",
- "prefs-help-signature": "Los comentèros sur les pâges de discussion dêvont étre signês avouéc «
~~~~ » que serat convèrti per voutra signatura et un horodatâjo.",
+ "prefs-help-signature": "Los comentèros dessus les pâges de discussion dêvont étre signês avouéc «
~~~~ » que serat convèrti per voutra signatura et un horodatâjo.",
"badsig": "Signatura bruta pas justa.\nControlâd les balises HTML.",
"badsiglength": "Voutra signatura est trop longe.\nDêt pas dèpassar $1 caractèro{{PLURAL:$1||s}}.",
"yourgender": "Coment vos prèferâd étre dècrit ?",
@@ -1030,7 +1031,7 @@
"email": "Mèssageria èlèctronica",
"prefs-help-realname": "Lo veré nom est u chouèx.\nSâil est balyê, serat empleyê por vos atribuar voutres ôvres.",
"prefs-help-email": "Lâadrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a lâoubliar.",
- "prefs-help-email-others": "Vos porriâd avouéc chouèsir de lèssiér los ôtros lor veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron adrèce èlèctronica.",
+ "prefs-help-email-others": "Vos porriâd asse-ben chouèsir de lèssiér los ôtros lor veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron adrèce èlèctronica.",
"prefs-help-email-required": "Unâadrèce èlèctronica est nècèssèra.",
"prefs-info": "Enformacions de bâsa",
"prefs-i18n": "Entèrnacionalisacion",
@@ -1069,7 +1070,7 @@
"userrights-changeable-col": "Les tropes que vos pouede changiér",
"userrights-unchangeable-col": "Les tropes que vos pouede pas changiér",
"userrights-conflict": "Disputa de changement de drêts dâutilisator ! Se vos plét, controlâd et pués confirmâd voutros changements.",
- "userrights-removed-self": "Vos éd enlevâ avouéc reusséta los voutros drêts. Cen fât que vos pouede pas més arrevar a cela pâge.",
+ "userrights-removed-self": "Vos éd enlevâ los voutros drêts. Cen fât que vos pouede pas més arrevar a cela pâge.",
"group": "Tropa :",
"group-user": "Utilisators",
"group-autoconfirmed": "Utilisators ôtoconfirmâs",
@@ -1111,7 +1112,7 @@
"right-purge": "Purgiér lo cacho du seto dâuna pâge sen confirmacion",
"right-autoconfirmed": "Pas étre afèctâ per les limitacions de dèbit liyêes a les adrèces IP",
"right-bot": "Ãtre trètâ coment un mècanismo ôtomatisâ",
- "right-nominornewtalk": "Pas dècllenchiér la notificacion de mèssâjo novél quand fant un petiôt changement sur la pâge de discussion dâun utilisator",
+ "right-nominornewtalk": "Pas dècllenchiér la notificacion de mèssâjo novél quand fant un petiôt changement dessus la pâge de discussion dâun utilisator",
"right-apihighlimits": "Empleyér de limites ples hôtes dedens les demandes API",
"right-writeapi": "Empleyér lâAPI dâècritura",
"right-delete": "Suprimar de pâges",
@@ -1259,7 +1260,7 @@
"recentchanges-label-plusminus": "La talye de la pâge at changiê de cél nombro dâoctèts.",
"recentchanges-legend-heading": "
Lègenda : ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vêde avouéc la [[Special:NewPages|lista de les pâges novèles]]).",
- "recentchanges-submit": "Listar",
+ "recentchanges-submit": "Montrar",
"rcnotefrom": "Vê-que {{PLURAL:$5|lo changement fêt|los changements fêts}} dês lo
$3 a $4 (tant quâa
$1 montrâs).",
"rclistfrom": "Montrar los novéls changements dês lo $3 a $2",
"rcshowhideminor": "$1 los petiôts changements",
@@ -1321,7 +1322,7 @@
"upload_directory_read_only": "Lo rèpèrtouèro de tèlèchargement ($1) est pas accèssiblo en ècritura dês lo sèrvior Vouèbe.",
"uploaderror": "Fôta pendent lo tèlèchargement",
"upload-recreate-warning": "
Atencion : un fichiér avouéc cél nom est étâ suprimâ ou ben dèplaciê. \n\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ique por comoditât :",
- "uploadtext": "Empleyéd lo formulèro ce-desot por tèlèchargiér de fichiérs.\nPor vêre ou ben rechèrchiér de fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs sur lo [[Special:Log/upload|jornâl des tèlèchargements]], et les suprèssions sur lo [[Special:Log/delete|jornâl de les suprèssions]].\n\nPor entrebetar un fichiér dedens na pâge, empleyéd un lim de yona de celes fôrmes :\n*
[[ {{ns:file}}:Fichiér.jpg]]
por empleyér la vèrsion en plêna largior du fichiér\n*
[[ {{ns:file}}:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]
por empleyér na miniatura de 200 pixèls de lârjo dedens na bouètâa gôche avouéc « tèxto dèscriptif » coment dèscripcion\n*
[[ {{ns:media}}:Fichiér.ogg]]
por liyér tot drêt vers lo fichiér sen lo fâre vêre",
+ "uploadtext": "Empleyéd lo formulèro ce-desot por tèlèchargiér de fichiérs.\nPor vêre ou ben rechèrchiér de fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs dessus lo [[Special:Log/upload|jornâl des tèlèchargements]], et les suprèssions dessus lo [[Special:Log/delete|jornâl de les suprèssions]].\n\nPor entrebetar un fichiér dedens na pâge, empleyéd un lim de yona de celes fôrmes-que :\n*
[[ {{ns:file}}:Fichiér.jpg]]
por empleyér la vèrsion en plêna largior du fichiér\n*
[[ {{ns:file}}:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]
por empleyér na miniatura de 200 pixèls de lârjo dedens na bouètâa gôche avouéc « tèxto dèscriptif » coment dèscripcion\n*
[[ {{ns:media}}:Fichiér.ogg]]
por liyér tot drêt vers lo fichiér sen lo fâre vêre",
"upload-permitted": "Tipo{{PLURAL:$2||s}} de fichiérs ôtorisâ{{PLURAL:$2||s}} : $1.",
"upload-preferred": "Tipo{{PLURAL:$2||s}} de fichiérs prèferâ{{PLURAL:$2||s}} : $1.",
"upload-prohibited": "Tipo{{PLURAL:$2||s}} de fichiérs dèfendu{{PLURAL:$2||s}} : $1.",
@@ -1341,7 +1342,7 @@
"badfilename": "Lo nom du fichiér est étâ changiê en « $1 ».",
"filetype-mime-mismatch": "Lâèxtension du fichiér « .$1 » corrèspond pas u tipo MIME dècelâ du fichiér ($2).",
"filetype-badmime": "Los fichiérs du tipo MIME « $1 » pôvont pas étre tèlèchargiês.",
- "filetype-bad-ie-mime": "Lo fichiér pôt pas étre tèlèchargiê perce que serêt dècelâ coment « $1 » per Internet Explorer, cen que corrèspond a un tipo de fichiér dèfendu et pués pôt-étre dangerox.",
+ "filetype-bad-ie-mime": "Lo fichiér pôt pas étre tèlèchargiê, serêt dècelâ coment « $1 » per Internet Explorer, cen que corrèspond a un tipo de fichiér dèfendu et pués pôt-étre dangerox.",
"filetype-unwanted-type": "
« .$1 » est un tipo de fichiér pas volu.\n{{PLURAL:$3|Lo tipo de fichiér prèferâ est|Los tipos de fichiérs prèferâs sont}} $2.",
"filetype-banned-type": "
« .$1 » {{PLURAL:$4|est pas un tipo de fichiér ôtorisâ|sont pas de tipos de fichiérs ôtorisâs}}.\n{{PLURAL:$3|Lo tipo de fichiér ôtorisâ est|Los tipos de fichiérs ôtorisâs sont}} $2.",
"filetype-missing": "Lo fichiér at gins dâèxtension (coment « .jpg » per ègzemplo).",
@@ -1361,7 +1362,7 @@
"emptyfile": "Lo fichiér que vos éd tèlèchargiê semble étre vouedo.\nCen pôt étre diu a na fôta dedens lo nom du fichiér.\nSe vos plét, controlâd que vos voléd franc tèlèchargiér cél fichiér.",
"windows-nonascii-filename": "Cél vouiqui recognêt pas los noms de fichiérs avouéc des caractèros spèciâls.",
"fileexists": "Un fichiér avouéc cél nom ègziste ja, se vos plét controlâd
[[:$1]] se {{GENDER:|vos}} éte pas de sûr de lo volêr changiér.\n[[$1|thumb]]",
- "filepageexists": "La pâge de dèscripcion por cél fichiér est ja étâye fêta ique
[[:$1]] , mas nion fichiér avouéc cél nom ègziste ora.\nLo rèsumâ que vos voléd buchiér aparêtrat pas sur la pâge de dèscripcion.\nPor o fâre, vos la devréd changiér a la man.\n[[$1|thumb]]",
+ "filepageexists": "La pâge de dèscripcion por cél fichiér est ja étâye fêta ique
[[:$1]] , mas nion fichiér avouéc cél nom ègziste ora.\nLo rèsumâ que vos voléd buchiér aparêtrat pas dessus la pâge de dèscripcion.\nPor o fâre, vos la devréd changiér a la man.\n[[$1|thumb]]",
"fileexists-extension": "Un fichiér avouéc un nom dâense ègziste ja : [[$2|thumb]]\n* Nom du fichiér a tèlèchargiér :
[[:$1]] \n* Nom du fichiér ègzistent :
[[:$2]] \nPôt-étre vos voléd empleyér un nom ples prôpro ?",
"fileexists-thumbnail-yes": "Lo fichiér semble étre unâémâge en talye rèduita
(miniatura) .\n[[$1|thumb]]\nSe vos plét, controlâd lo fichiér
[[:$1]] .\nSe lo fichiér controlâ est la mémâémâge avouéc la talye originâla, y at pas fôta de tèlèchargiér na miniatura de més.",
"file-thumbnail-no": "Lo nom du fichiér comence per
$1 .\nSemble étre unâémâge en talye rèduita
(miniatura) .\nSe vos éd celâémâge en hôta rèsolucion, tèlèchargiéd-la, ôtrament changiéd son nom, se vos plét.",
@@ -1394,7 +1395,7 @@
"uploadscriptednamespace": "Cél fichiér SVG contint un èspâço de noms « $1 » pas ôtorisâ.",
"uploadinvalidxml": "Lo XML dedens lo fichiér tèlèchargiê at pas possu étre analisâ.",
"uploadvirus": "Cél fichiér contint un virus !\nDètalys : $1",
- "uploadjava": "O est un fichiér ZIP que contint un fichiér Java « .class ».\nLo tèlèchargement de fichiérs Java est pas ôtorisâ perce que pôvont èvitar de rèstriccions de sècuritât.",
+ "uploadjava": "O est un fichiér ZIP que contint un fichiér Java « .class ».\nLo tèlèchargement de fichiérs Java est pas ôtorisâ, pôvont èvitar de rèstriccions de sècuritât.",
"upload-source": "Fichiér sôrsa",
"sourcefilename": "Nom du fichiér sôrsa :",
"sourceurl": "URL sôrsa :",
@@ -1405,7 +1406,7 @@
"watchthisupload": "Siuvre cél fichiér",
"filewasdeleted": "Un fichiér avouéc cél nom est ja étâ tèlèchargiê et pués suprimâ.\nVos devriâd controlar lo $1 devant que lo tornar tèlèchargiér.",
"filename-thumb-name": "Cen ressemble a un titro de miniatura. Se vos plét, tèlèchargiéd gins de miniatura ja presenta sur lo mémo vouiqui. Ãtrament, se vos plét corregiéd lo nom du fichiér por que seye ples significatif et pués quâil èye pas lo prèfixo de miniatura.",
- "filename-bad-prefix": "Lo nom du fichiér que vos tèlèchargiéd comence per
« $1 » quâest en g·ènèrâl un nom pas dèscriptif balyê ôtomaticament per los aparèlys-fotô numericos.\nSe vos plét, chouèsésséd-nen un nom ples dèscriptif.",
+ "filename-bad-prefix": "Lo nom du fichiér que vos tèlèchargiéd comence per
« $1 » quâo est en g·ènèrâl un nom pas dèscriptif balyê ôtomaticament per los aparèlys-fotô numericos.\nSe vos plét, chouèsésséd-nen un nom ples dèscriptif.",
"filename-prefix-blacklist": " #
\n# La sintaxa est ceta :\n# * Tot tèxto que siut un « # » tant quâa la fin de la legne est un comentèro.\n# * Tota legne pas voueda est un prèfixo tipico de nom de fichiér balyê ôtomaticament per los aparèlys-fotô numericos :\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # quârques enfatâblos\nIMG # g·ènèrico\nJD # Jenoptik\nMGP # Pentax\nPICT # de totes sôrtes\n # ",
"upload-proto-error": "Protocolo fôx",
"upload-proto-error-text": "Lo tèlèchargement a distance at fôta dâURLs que començont per
http://
ou ben
ftp://
.",
@@ -1432,9 +1433,15 @@
"foreign-structured-upload-form-label-own-work": "Su lâôtor de celâôvra",
"foreign-structured-upload-form-label-infoform-categories": "Catègories",
"foreign-structured-upload-form-label-infoform-date": "Dâta",
- "foreign-structured-upload-form-label-own-work-message-local": "Confirmo que tèlèchârjo cél fichiér dâaprés les condicions et les politiques de licence de {{SITENAME}}.",
+ "foreign-structured-upload-form-label-own-work-message-local": "Confirmo que tèlèchârjo cél fichiér dâaprés les condicions dâusâjo et les politiques de licence de {{SITENAME}}.",
"foreign-structured-upload-form-label-not-own-work-message-local": "Se vos pouede pas tèlèchargiér cél fichiér dâaprés les politiques de {{SITENAME}}, se vos plét cllôde cela bouèta de dialogo et pués èprovâd unâôtra mètoda.",
- "foreign-structured-upload-form-label-not-own-work-local-local": "Vos pouede avouéc èprovar la [[Special:Upload|pâge de tèlèchargement per dèfôt]].",
+ "foreign-structured-upload-form-label-not-own-work-local-local": "Vos pouede asse-ben èprovar la [[Special:Upload|pâge de tèlèchargement per dèfôt]].",
+ "foreign-structured-upload-form-label-own-work-message-default": "Compregno que tèlèchârjo cél fichiér vers un dèpôt partagiê. Confirmo quâo fé dâaprés les condicions dâusâjo et les politiques de licence de ceti.",
+ "foreign-structured-upload-form-label-not-own-work-message-default": "Se vos pouede pas tèlèchargiér cél fichiér dâaprés les politiques du dèpôt partagiê, se vos plét cllôde cela bouèta de dialogo et pués èprovâd unâôtra mètoda.",
+ "foreign-structured-upload-form-label-not-own-work-local-default": "Vos pouede asse-ben èprovar dâempleyér la [[Special:Upload|pâge de tèlèchargement de {{SITENAME}}]], se cél fichiér y pôt étre tèlèchargiê dâaprés lors politiques.",
+ "foreign-structured-upload-form-label-own-work-message-shared": "Cèrtifio étre lo dètentior des drêts dâôtor sur cél fichiér, et jâaccèpto de publeyér cél fichiér dessus Wikimedia Commons en lo betent irrèvocâblament desot licence [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Atribucion - Partâjo dens les Mémes Condicions 4.0] et pués jâaccèpto les [https://wikimediafoundation.org/wiki/Terms_of_Use condicions dâusâjo].",
+ "foreign-structured-upload-form-label-not-own-work-message-shared": "Se vos éte pas lo dètentior des drêts dâôtor sur cél fichiér ou ben que vos lo voléd publeyér desot na licence difèrenta, vos pouede empleyér lâ[https://commons.wikimedia.org/wiki/Special:UploadWizard assistent de tèlèchargement de Commons].",
+ "foreign-structured-upload-form-label-not-own-work-local-shared": "Vos pouede asse-ben èprovar dâempleyér la [[Special:Upload|pâge de tèlèchargement de {{SITENAME}}]], se cél fichiér y pôt étre tèlèchargiê dâaprés lors politiques.",
"backend-fail-stream": "Y at pas moyen de tramandar lo fichiér « $1 ».",
"backend-fail-backup": "Y at pas moyen dâencartar lo fichiér « $1 ».",
"backend-fail-notexists": "Lo fichiér $1 ègziste pas.",
@@ -1448,21 +1455,21 @@
"backend-fail-copy": "Y at pas moyen de copiyér lo fichiér « $1 » vers « $2 ».",
"backend-fail-move": "Y at pas moyen de dèplaciér lo fichiér « $1 » vers « $2 ».",
"backend-fail-opentemp": "Y at pas moyen dâuvrir lo fichiér temporèro.",
- "backend-fail-writetemp": "Y at pas moyen dâècrire dedens lo fichiér temporèro.",
+ "backend-fail-writetemp": "Y at pas moyen dâècrire sur lo fichiér temporèro.",
"backend-fail-closetemp": "Y at pas moyen de cllôre lo fichiér temporèro.",
"backend-fail-read": "Y at pas moyen de liére lo fichiér « $1 ».",
"backend-fail-create": "Y at pas moyen dâècrire lo fichiér « $1 ».",
- "backend-fail-maxsize": "Y at pas moyen dâècrire lo fichiér « $1 » perce quâil est ples grôs {{PLURAL:$2|quâun octèt|que $2 octèts}}.",
- "backend-fail-readonly": "Ora lo sistèmo de stocâjo « $1 » est justo en lèctura. La rêson balyêe est : « ''$2'' »",
+ "backend-fail-maxsize": "Y at pas moyen dâècrire lo fichiér « $1 », il est ples grôs {{PLURAL:$2|quâun octèt|que $2 octèts}}.",
+ "backend-fail-readonly": "Ora lo sistèmo de stocâjo « $1 » est mas quâen lèctura. La rêson balyêe est :
$2 ",
"backend-fail-synced": "Lo fichiér « $1 » est dens un ètat dèsordonâ dedens los sistèmos de stocâjo de dedens",
"backend-fail-connect": "Y at pas moyen de sè branchiér u sistèmo de stocâjo « $1 ».",
"backend-fail-internal": "Na fôta encognua est arrevâye dedens lo sistèmo de stocâjo « $1 ».",
"backend-fail-contenttype": "Y at pas moyen de dètèrmenar lo tipo de contegnu du fichiér a stocar dedens « $1 ».",
"backend-fail-batchsize": "Lo sistèmo de stocâjo at balyê na pârt de $1 {{PLURAL:$1|opèracion|opèracions}} de fichiér ; la limita est $2 {{PLURAL:$2|opèracion|opèracions}}.",
- "backend-fail-usable": "Y at pas moyen de liére dâècrire lo fichiér « $1 » a côsa de pèrmissions ensufisentes ou ben de rèpèrtouèros / conteniors manquents.",
- "filejournal-fail-dbconnect": "Y at pas moyen de sè branchiér a la bâsa de balyês du jornal por lo sistèmo de stocâjo « $1 ».",
- "filejournal-fail-dbquery": "Y at pas moyen de betar a jorn la bâsa de balyês du jornal por lo sistèmo de stocâjo « $1 ».",
- "lockmanager-notlocked": "Y at pas moyen de dèvèrrolyér « $1 » ; il est pas vèrrolyê.",
+ "backend-fail-usable": "Y at pas moyen de liére dâècrire lo fichiér « $1 » a côsa de drêts ensufisents ou ben de rèpèrtouèros conteniors manquents.",
+ "filejournal-fail-dbconnect": "Y at pas moyen de sè branchiér a la bâsa de balyês du jornâl por lo sistèmo de stocâjo « $1 ».",
+ "filejournal-fail-dbquery": "Y at pas moyen de betar a jorn la bâsa de balyês du jornâl por lo sistèmo de stocâjo « $1 ».",
+ "lockmanager-notlocked": "Y at pas moyen de dècotar « $1 » ; o est pas cotâ.",
"lockmanager-fail-closelock": "Y at pas moyen de cllôre lo fichiér de vèrroly por « $1 ».",
"lockmanager-fail-deletelock": "Y at pas moyen de suprimar lo fichiér de vèrroly por « $1 ».",
"lockmanager-fail-acquirelock": "Y at pas moyen dâavêr lo vèrroly por « $1 ».",
@@ -1470,30 +1477,30 @@
"lockmanager-fail-releaselock": "Y at pas moyen de relâchiér lo vèrroly por « $1 ».",
"lockmanager-fail-db-bucket": "Y at pas moyen de sè veriér vers prod de bâses de balyês de vèrroly dedens la sèlye $1.",
"lockmanager-fail-db-release": "Y at pas moyen de relâchiér los vèrrolys sur la bâsa de balyês $1.",
- "lockmanager-fail-svr-acquire": "Y at pas moyen dâavêr des vèrrolys sur lo sèrvior $1.",
+ "lockmanager-fail-svr-acquire": "Y at pas moyen dâavêr de vèrrolys sur lo sèrvior $1.",
"lockmanager-fail-svr-release": "Y at pas moyen de relâchiér los vèrrolys sur lo sèrvior $1.",
"zip-file-open-error": "Na fôta est arrevâye pendent lâuvèrtura du fichiér por los contrôlos ZIP.",
"zip-wrong-format": "Lo fichiér spècifiâ est pas un fichiér ZIP.",
"zip-bad": "Lo fichiér est un fichiér ZIP corrompu ou ben ôtrament iliésiblo.\nPôt pas étre controlâ coment fôt por la sècuritât.",
- "zip-unsupported": "Lo fichiér est un fichiér ZIP quâemplèye des fonccionalitâts ZIP pas recognues per MediaWiki.\nPôt pas étre controlâ coment fôt por la sècuritât.",
+ "zip-unsupported": "Lo fichiér est un fichiér ZIP quâemplèye de fonccionalitâts ZIP pas recognues per MediaWiki.\nPôt pas étre controlâ coment fôt por la sècuritât.",
"uploadstash": "Cacho de tèlèchargement",
- "uploadstash-summary": "Ceta pâge balye accès ux fichiérs que sont tèlèchargiês ou ben en côrs de tèlèchargement, mas sont pâoncor publeyês dedens lo vouiqui. Celos fichiérs sont pâoncor visiblos, solament por lâutilisator que los at tèlèchargiês.",
- "uploadstash-clear": "Ãfaciér los fichiérs en cacho",
+ "uploadstash-summary": "Cela pâge balye accès ux fichiérs que sont tèlèchargiês ou ben en cors de tèlèchargement, mas sont pâoncor publeyês dedens lo vouiqui. Celos fichiérs sont pâoncor visiblos, solament por lâutilisator que los at tèlèchargiês.",
+ "uploadstash-clear": "Vouedar los fichiérs en cacho",
"uploadstash-nofiles": "Vos éd gins de fichiér en cacho.",
- "uploadstash-badtoken": "Lâègzécucion de celâaccion at pas reussi, pôt-étre perce que voutros identifients de changement ant èxpirâ. Tornâd èprovar.",
- "uploadstash-errclear": "Lâèfacement des fichiérs at pas reussi.",
+ "uploadstash-badtoken": "Lâègzécucion de celâaccion at pas reussi. Pôt-étre perce que voutros identifients de changement ant èxpirâ. Se vos plét, tornâd èprovar.",
+ "uploadstash-errclear": "La vouegiê des fichiérs at pas reussi.",
"uploadstash-refresh": "Rafrèchir la lista des fichiérs",
"invalid-chunk-offset": "Dèplacement de bocon pas justo",
"img-auth-accessdenied": "Accès refusâ",
- "img-auth-nopathinfo": "PATH_INFO manquenta.\nVoutron sèrvior est pas configurâ por passar celâenformacion.\nPôt étre bâsâye sur CGI et vêr pas recognetre « img_auth ».\nVêde https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+ "img-auth-nopathinfo": "PATH_INFO manquent.\nVoutron sèrvior est pas configurâ por passar celâenformacion.\nPôt-étre que fonccione en CGI et recognêt vêr pas img_auth.\nVêde https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
"img-auth-notindir": "Lo chemin demandâ est pas lo rèpèrtouèro de tèlèchargement configurâ.",
"img-auth-badtitle": "Y at pas moyen de construire un titro justo dês « $1 ».",
"img-auth-nologinnWL": "Vos éte pas branchiê et pués « $1 » est pas dedens la lista blanche.",
"img-auth-nofile": "Lo fichiér « $1 » ègziste pas.",
- "img-auth-isdir": "Vos èprovâd dâarrevar u rèpèrtouèro « $1 ».\nSolament lâaccès ux fichiérs est pèrmês.",
+ "img-auth-isdir": "Vos èprovâd dâarrevar u rèpèrtouèro « $1 ».\nSolament lâaccès ux fichiérs est pèrmetu.",
"img-auth-streaming": "Lèctura en continu de « $1 ».",
- "img-auth-public": "La fonccion de img_auth.php est de sortir des fichiérs dâun vouiqui privâ.\nCeti vouiqui est configurâ coment un vouiqui publico.\nPor na sècuritât pèrfèta, img_auth.php est dèsactivâ.",
- "img-auth-noread": "Lâutilisator at pas accès a la lèctura de « $1 ».",
+ "img-auth-public": "La fonccion dâimg_auth.php est de sortir de fichiérs dâun vouiqui privâ.\nCél vouiqui est configurâ coment un vouiqui publico.\nPor na sècuritât parfèta, img_auth.php est dèsactivâ.",
+ "img-auth-noread": "Lâutilisator at pas accès en lèctura de « $1 ».",
"http-invalid-url": "URL pas justa : $1",
"http-invalid-scheme": "Les URLs avouéc lo plan « $1 » sont pas recognues.",
"http-request-error": "La demanda HTTP at pas reussi a côsa dâuna fôta encognua.",
@@ -1504,24 +1511,31 @@
"upload-curl-error6": "Y at pas moyen dâavengiér lâURL",
"upload-curl-error6-text": "LâURL balyêe pôt pas étre avengiêe.\nSe vos plét, tornâd controlar que lâURL est justa et pués que lo seto est en legne.",
"upload-curl-error28": "Dèlê dèpassâ pendent lo tèlèchargement",
- "upload-curl-error28-text": "Lo seto at tardâ bien a rèpondre.\nSe vos plét, controlâd que lo seto est en legne, atende un pou et pués tornâd èprovar.\nVos pouede asse-ben èprovar a unâhora de muendra afluence.",
+ "upload-curl-error28-text": "Lo seto at tardâ ben a rèpondre.\nSe vos plét, controlâd que lo seto est en legne, atende-vos un petiôt moment et pués tornâd èprovar.\nVos pouede asse-ben èprovar a unâhora de muendra borrâ.",
"license": "Licence :",
"license-header": "Licence",
"nolicense": "Pas yona chouèsia",
+ "licenses-edit": "Changiér los chouèx de licence",
"license-nopreview": "(Apèrçu pas disponiblo)",
- "upload_source_url": " (unâURL justa et accèssibla publicament)",
- "upload_source_file": " (un fichiér sur voutron ordenator)",
- "listfiles-summary": "Ceta pâge spèciâla montre tôs los fichiérs tèlèchargiês.\nQuand el est filtrâye per utilisator, solament los fichiérs que la vèrsion la ples novèla est étâye tèlèchargiêe per cél utilisator sont montrâs.",
- "listfiles_search_for": "Rechèrchiér un nom de fichiér mèdia :",
+ "upload_source_url": "(lo fichiér que vos éd chouèsi dês unâURL justa et accèssibla publicament)",
+ "upload_source_file": "(lo fichiér que vos éd chouèsi dês voutron ordenator)",
+ "listfiles-delete": "suprimar",
+ "listfiles-summary": "Cela pâge spèciâla montre tôs los fichiérs tèlèchargiês.",
+ "listfiles_search_for": "Rechèrchiér un nom de fichiér multimèdiâ :",
+ "listfiles-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.",
"imgfile": "fichiér",
"listfiles": "Lista de fichiérs",
- "listfiles_thumb": "Figura",
+ "listfiles_thumb": "Miniatura",
"listfiles_date": "Dâta",
"listfiles_name": "Nom",
"listfiles_user": "Utilisator",
"listfiles_size": "Talye",
"listfiles_description": "Dèscripcion",
"listfiles_count": "Vèrsions",
+ "listfiles-show-all": "Entrebetar les vielyes vèrsions de les émâges",
+ "listfiles-latestversion": "Vèrsion dâora",
+ "listfiles-latestversion-yes": "Ouè",
+ "listfiles-latestversion-no": "Nan",
"file-anchor-link": "Fichiér",
"filehist": "Historico du fichiér",
"filehist-help": "Cllicar dessus na dâta et hora por vêre lo fichiér coment il ére a cél moment.",
@@ -1532,68 +1546,76 @@
"filehist-datetime": "Dâta et hora",
"filehist-thumb": "Miniatura",
"filehist-thumbtext": "Miniatura por la vèrsion du $1",
- "filehist-nothumb": "Niona figura",
+ "filehist-nothumb": "Niona miniatura",
"filehist-user": "Utilisator",
"filehist-dimensions": "Dimensions",
"filehist-filesize": "Talye du fichiér",
"filehist-comment": "Comentèro",
"imagelinks": "Usâjo du fichiér",
- "linkstoimage": "{{PLURAL:$1|Cela pâge-que emplèye|Celes $1 pâges-que emplèyont}} ceti fichiér :",
- "linkstoimage-more": "Més {{PLURAL:$1|dâuna pâge emplèye|de $1 pâges emplèyont}} ceti fichiér.\nCeta lista montre ren que {{PLURAL:$1|la premiére pâge quâemplèye|les $1 premiéres pâges quâemplèyont}} ceti fichiér.\nNa [[Special:WhatLinksHere/$2|lista complèta]] est disponibla.",
- "nolinkstoimage": "Niona pâge emplèye ceti fichiér.",
- "morelinkstoimage": "Vêde [[Special:WhatLinksHere/$1|més de lims]] de vers ceti fichiér.",
+ "linkstoimage": "{{PLURAL:$1|Cela pâge-que emplèye|Celes $1 pâges-que emplèyont}} cél fichiér :",
+ "linkstoimage-more": "Més {{PLURAL:$1|dâuna pâge emplèye|de $1 pâges emplèyont}} cél fichiér.\nCela lista-que montre mas que {{PLURAL:$1|la premiére pâge quâemplèye|les $1 premiéres pâges quâemplèyont}} cél fichiér.\nNa [[Special:WhatLinksHere/$2|lista complèta]] est disponibla.",
+ "nolinkstoimage": "Niona pâge emplèye cél fichiér.",
+ "morelinkstoimage": "Vêde [[Special:WhatLinksHere/$1|més de lims]] de vers cél fichiér.",
"linkstoimage-redirect": "$1 (redirèccion de fichiér) $2",
- "duplicatesoffile": "{{PLURAL:$1|Cél fichiér-que est un doblo|Celos $1 fichiérs-que sont des doblos}} de ceti ([[Special:FileDuplicateSearch/$2|més de dètalys]]) :",
- "sharedupload": "Ceti fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.",
- "sharedupload-desc-there": "Ceti fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.\nSe vos plét, vêde la sina [$2 pâge de dèscripcion] por més dâenformacions.",
+ "duplicatesoffile": "{{PLURAL:$1|Cél fichiér-que est un doblo|Celos $1 fichiérs-que sont de doblos}} de ceti ([[Special:FileDuplicateSearch/$2|més de dètalys]]) :",
+ "sharedupload": "Cél fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.",
+ "sharedupload-desc-there": "Cél fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.\nSe vos plét, vêde sa [$2 pâge de dèscripcion] por més dâenformacions.",
"sharedupload-desc-here": "Cél fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.\nLa dèscripcion dessus sa [$2 pâge de dèscripcion] est montrâye ce-desot.",
- "sharedupload-desc-edit": "Ceti fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion sur la sina [$2 pâge de dèscripcion].",
- "sharedupload-desc-create": "Ceti fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion sur la sina [$2 pâge de dèscripcion].",
+ "sharedupload-desc-edit": "Cél fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion dessus sa [$2 pâge de dèscripcion].",
+ "sharedupload-desc-create": "Cél fichiér vint de $1 et pôt étre empleyê per dâôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion dessus sa [$2 pâge de dèscripcion].",
"filepage-nofile": "Nion fichiér de cél nom ègziste.",
"filepage-nofile-link": "Nion fichiér de cél nom ègziste, mas vos en pouede [$1 tèlèchargiér yon].",
- "uploadnewversion-linktext": "Tèlèchargiér na novèla vèrsion de ceti fichiér",
+ "uploadnewversion-linktext": "Tèlèchargiér na novèla vèrsion de cél fichiér",
"shared-repo-from": "de : $1",
"shared-repo": "un dèpôt partagiê",
"filepage.css": "/* Lo code CSS betâ ique est encllu dens la pâge de dèscripcion du fichiér, et pués dens los vouiquis cliants ètrangiérs. */",
- "upload-disallowed-here": "Vos pouede pas ècllafar ceti fichiér.",
+ "upload-disallowed-here": "Vos pouede pas ècllafar cél fichiér.",
"filerevert": "Rèvocar $1",
"filerevert-legend": "Rèvocar lo fichiér",
- "filerevert-intro": "Vos éte prèst a rèvocar lo fichiér '''[[Media:$1|$1]]''' a la [$4 vèrsion du $2 a $3].",
+ "filerevert-intro": "Vos éte prèst a rèvocar lo fichiér
[[Media:$1|$1]] a la [$4 vèrsion du $2 a $3].",
"filerevert-comment": "Rêson :",
"filerevert-defaultcomment": "Rèvocâ a la vèrsion du $1 a $2 ($3)",
"filerevert-submit": "Rèvocar",
- "filerevert-success": "'''[[Media:$1|$1]]''' est étâ rèvocâ a la [$4 vèrsion du $2 a $3].",
+ "filerevert-success": "
[[Media:$1|$1]] est étâ rèvocâ a la [$4 vèrsion du $2 a $3].",
"filerevert-badversion": "Y at gins de vèrsion locâla devant de cél fichiér avouéc lâhorodatâjo balyê.",
"filedelete": "Suprimar $1",
"filedelete-legend": "Suprimar lo fichiér",
- "filedelete-intro": "Vos éte prèst a suprimar lo fichiér '''[[Media:$1|$1]]''' et pués tot lo sin historico.",
- "filedelete-intro-old": "Vos éte aprés suprimar la vèrsion de '''[[Media:$1|$1]]''' du [$4 $2 a $3].",
+ "filedelete-intro": "Vos éte prèst a suprimar lo fichiér
[[Media:$1|$1]] et pués tot son historico.",
+ "filedelete-intro-old": "Vos éte aprés suprimar la vèrsion de
[[Media:$1|$1]] du [$4 $2 a $3].",
"filedelete-comment": "Rêson :",
"filedelete-submit": "Suprimar",
- "filedelete-success": "'''$1''' est étâ suprimâ.",
- "filedelete-success-old": "La vèrsion de '''[[Media:$1|$1]]''' du $2 a $3 est étâye suprimâye.",
- "filedelete-nofile": "'''$1''' ègziste pas.",
- "filedelete-nofile-old": "Ãgziste gins de vèrsion arch·ivâye de '''$1''' avouéc los atributs spècifiâs.",
- "filedelete-otherreason": "Ãtra rêson / rêson de ples :",
+ "filedelete-success": "
$1 est étâ suprimâ.",
+ "filedelete-success-old": "La vèrsion de
[[Media:$1|$1]] du $2 a $3 est étâye suprimâye.",
+ "filedelete-nofile": "
$1 ègziste pas.",
+ "filedelete-nofile-old": "Ãgziste gins de vèrsion arch·ivâye de
$1 avouéc los atributs spècifiâs.",
+ "filedelete-otherreason": "Ãtra rêson ou ben rêson de més :",
"filedelete-reason-otherlist": "Ãtra rêson",
- "filedelete-reason-dropdown": "*Rêsons corentes de suprèssion\n** Violacion du drêt dâôtor\n** Fichiér en doblo",
+ "filedelete-reason-dropdown": "*Rêsons comenes de suprèssion\n** Violacion du drêt dâôtor\n** Fichiér en doblo",
"filedelete-edit-reasonlist": "Changiér les rêsons de suprèssion",
- "filedelete-maintenance": "La suprèssion et la rèstoracion de fichiérs est dèsactivâye por un moment pendent la mantegnence.",
+ "filedelete-maintenance": "La suprèssion et la rèstoracion de fichiérs est pas dèsactivâye por grant-temps pendent lâentretin.",
"filedelete-maintenance-title": "Y at pas moyen de suprimar lo fichiér",
"mimesearch": "Rechèrche per tipo MIME",
- "mimesearch-summary": "Ceta pâge pèrmèt de filtrar los fichiérs per lor tipo MIME.\nEntrâ : ''tipodecontegnu''/''sot-tipo'', per ègzemplo
image/jpeg
.",
+ "mimesearch-summary": "Cela pâge vos pèrmèt de filtrar los fichiérs per lor tipo MIME.\nEntrâ : tipo_de_contegnu/sot-tipo ou ben tipo_de_contegnu/*, per ègzemplo
image/jpeg
.",
"mimetype": "Tipo MIME :",
"download": "tèlèchargiér",
"unwatchedpages": "Pâges pas siuvues",
"listredirects": "Lista de les redirèccions",
+ "listduplicatedfiles": "Lista de fichiérs en doblo",
+ "listduplicatedfiles-summary": "O est na lista de fichiérs yô que la vèrsion la ples novèla du fichiér est na copia de la vèrsion la ples novèla dâun ôtro fichiér. Solament los fichiérs locâls sont ègzamenâs.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]] at [[$3|{{PLURAL:$2|un doblo|$2 doblos}}]].",
"unusedtemplates": "Modèlos pas empleyês",
- "unusedtemplatestext": "Ceta pâge liste totes les pâges de lâèspâço de noms « {{ns:template}} » que sont pas entrebetâyes dedens nionâôtra pâge.\nOubliâd pas de controlar sây at gins dâôtro lim de vers los modèlos devant que los suprimar.",
+ "unusedtemplatestext": "Cela pâge liste totes les pâges de lâèspâço de noms « {{ns:template}} » que sont pas entrebetâyes dedens nionâôtra pâge.\nOubliâd pas de controlar sây at gins dâôtro lim de vers los modèlos devant que los suprimar.",
"unusedtemplateswlh": "ôtros lims",
"randompage": "Pâge a lâhasârd",
- "randompage-nopages": "Y at gins de pâge dedens {{PLURAL:$2|cetâèspâço|cetos èspâços}} de noms : $1.",
+ "randompage-nopages": "Y at gins de pâge dedens {{PLURAL:$2|cél èspâço|celos èspâços}} de noms-que : $1.",
+ "randomincategory": "Pâge a lâhasârd dedens la catègoria",
+ "randomincategory-invalidcategory": "« $1 » est pas un nom de catègoria justo.",
+ "randomincategory-nopages": "Y at gins de pâge dedens la catègoria [[:Category:$1|$1]].",
+ "randomincategory-category": "Catègoria :",
+ "randomincategory-legend": "Pâge a lâhasârd dedens la catègoria",
"randomincategory-submit": "Emmodar",
- "randomredirect": "Redirèccion per hasârd",
- "randomredirect-nopages": "Y at gins de pâge de redirèccion dedens lâèspâço de noms « $1 ».",
+ "randomredirect": "Redirèccion a lâhasârd",
+ "randomredirect-nopages": "Y at gins de redirèccion dedens lâèspâço de noms « $1 ».",
"statistics": "Statistiques",
"statistics-header-pages": "Statistiques de les pâges",
"statistics-header-edits": "Statistiques des changements",
@@ -1610,34 +1632,37 @@
"statistics-users-active-desc": "Utilisators quâant fêt por lo muens unâaccion pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}",
"pageswithprop": "Pâges avouéc na propriètât de pâge",
"pageswithprop-legend": "Pâges avouéc na propriètât de pâge",
- "pageswithprop-text": "Ceta pâge liste les pâges quâemplèyont na propriètât de pâge particuliére.",
+ "pageswithprop-text": "Cela pâge liste les pâges quâemplèyont na propriètât de pâge particuliére.",
"pageswithprop-prop": "Nom de la propriètât :",
- "pageswithprop-submit": "Alar trovar",
+ "pageswithprop-submit": "Emmodar",
+ "pageswithprop-prophidden-long": "valor de propriètât de tèxto long cachiêe ($1)",
+ "pageswithprop-prophidden-binary": "valor de propriètât binèra cachiêe ($1)",
"doubleredirects": "Redirèccions dobles",
- "doubleredirectstext": "Ceta pâge liste les pâges que redirijont vers dâôtres pâges de redirèccion.\nChâque renche contint des lims de vers la premiére et la seconda redirèccion, et pués la ciba de la seconda redirèccion, cen que balye habituèlament la « veré » pâge ciba, de vers laquinta la premiére redirèccion devrêt pouentar.\nLes entrâs
barrâyes sont étâyes solucionâyes.",
- "double-redirect-fixed-move": "[[$1]] est étâye dèplaciêe.\nOra redirige vers [[$2]].",
- "double-redirect-fixed-maintenance": "Correge la redirèccion dobla de [[$1]] vers [[$2]].",
+ "doubleredirectstext": "Cela pâge liste les pâges que redirijont vers dâôtres pâges de redirèccion.\nChâque renche contint de lims de vers la premiére et la seconda redirèccion, et pués la ciba de la seconda redirèccion, cen que balye per habituda la « veré » pâge ciba que la premiére redirèccion devrêt pouentar.\nLes entrês
barrâyes sont étâyes solucionâyes.",
+ "double-redirect-fixed-move": "[[$1]] est étâ dèplaciê.\nIl est étâ betâ a jorn ôtomaticament et redirige ora vers [[$2]].",
+ "double-redirect-fixed-maintenance": "Corrèccion ôtomatica de la redirèccion dobla de [[$1]] de vers [[$2]] dens un ovrâjo dâentretin.",
"double-redirect-fixer": "Corrèctor de redirèccion",
"brokenredirects": "Redirèccions câsses",
- "brokenredirectstext": "Cetes redirèccions mènont vers des pâges pas ègzistentes :",
+ "brokenredirectstext": "Celes redirèccions-que mènont vers de pâges inègzistentes :",
"brokenredirects-edit": "changiér",
"brokenredirects-delete": "suprimar",
"withoutinterwiki": "Pâges sen lims entèrlengoues",
- "withoutinterwiki-summary": "Cetes pâges ant gins de lim de vers dâôtres lengoues.",
+ "withoutinterwiki-summary": "Celes pâges-que ant gins de lim de vers des vèrsions en ôtres lengoues.",
"withoutinterwiki-legend": "Prèfixo",
"withoutinterwiki-submit": "Montrar",
- "fewestrevisions": "Pâges avouéc lo muens de vèrsions",
+ "fewestrevisions": "Pâges les muens changiêes",
"nbytes": "$1 octèt{{PLURAL:$1||s}}",
- "ncategories": "$1 catègorie{{PLURAL:$1||s}}",
+ "ncategories": "$1 catègori{{PLURAL:$1|a|es}}",
"ninterwikis": "$1 {{PLURAL:$1|lim entèrvouiqui|lims entèrvouiquis}}",
"nlinks": "$1 lim{{PLURAL:$1||s}}",
"nmembers": "$1 membro{{PLURAL:$1||s}}",
+ "nmemberschanged": "$1 â $2 membro{{PLURAL:$2||s}}",
"nrevisions": "$1 vèrsion{{PLURAL:$1||s}}",
"nimagelinks": "Empleyê dessus $1 pâge{{PLURAL:$1||s}}",
"ntransclusions": "empleyê dessus $1 pâge{{PLURAL:$1||s}}",
"specialpage-empty": "Y at gins de rèsultat a fâre vêre.",
"lonelypages": "Pâges orfenes",
- "lonelypagestext": "Cetes pâges sont ni pouentâyes ni entrebetâyes per dâôtres pâges de {{SITENAME}}.",
+ "lonelypagestext": "Celes pâges-que sont ni liyêes ni transcllues per dâôtres pâges de {{SITENAME}}.",
"uncategorizedpages": "Pâges sen catègories",
"uncategorizedcategories": "Catègories sen catègories",
"uncategorizedimages": "Fichiérs sen catègories",
@@ -1646,117 +1671,172 @@
"unusedimages": "Fichiérs pas empleyês",
"wantedcategories": "Catègories demandâyes",
"wantedpages": "Pâges demandâyes",
+ "wantedpages-summary": "Lista de les pâges inègzistentes quâant lo més de lims de vers lor, en èxcllusent les pâges quâant ren que de redirèccions pouentent vers lor. Por avêr na lista de les pâges inègzistentes quâant de redirèccions pouentent vers lor, vêde la [[{{#special:BrokenRedirects}}|lista de les redirèccions câsses]].",
"wantedpages-badtitle": "Titro pas justo dedens lâensemblo de rèsultats : $1",
"wantedfiles": "Fichiérs demandâs",
- "wantedfiletext-cat": "Cetos fichiérs sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo sâègzistont. Tôs celos fôx positifs seront
barrâs. Et pués les pâges quâapondont des fichiérs quâègzistont pas sont listâs dedens [[:$1]].",
- "wantedfiletext-nocat": "Cetos fichiérs sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo sâègzistont. Tôs celos fôx positifs seront
barrâs.",
+ "wantedfiletext-cat": "Celos fichiérs-que sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo sâègzistont. Tôs celos fôx positifs seront
barrâs. Et pués les pâges quâapondont de fichiérs quâègzistont pas sont listâs dedens [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Celos fichiérs-que sont empleyês, mas ègzistont pas. Et pués les pâges quâapondont de fichiérs quâègzistont pas sont listâs dedens [[:$1]].",
+ "wantedfiletext-nocat": "Celos fichiérs-que sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo sâègzistont. Tôs celos fôx positifs seront
barrâs.",
+ "wantedfiletext-nocat-noforeign": "Celos fichiérs-que sont empleyês, mas ègzistont pas.",
"wantedtemplates": "Modèlos demandâs",
"mostlinked": "Pâges les ples liyêes",
"mostlinkedcategories": "Catègories les ples liyêes",
- "mostlinkedtemplates": "Modèlos los ples liyês",
+ "mostlinkedtemplates": "Modèlos los ples transcllus",
"mostcategories": "Pâges avouéc lo més de catègories",
"mostimages": "Fichiérs los ples liyês",
"mostinterwikis": "Pâges avouéc lo més de lims entèrvouiquis",
- "mostrevisions": "Pâges avouéc lo més de vèrsions",
+ "mostrevisions": "Pâges les ples changiêes",
"prefixindex": "Totes les pâges que començont per...",
"prefixindex-namespace": "Totes les pâges avouéc prèfixo (èspâço de noms $1)",
+ "prefixindex-submit": "Montrar",
+ "prefixindex-strip": "Enlevar lo prèfixo dedens la lista",
"shortpages": "Pâges côrtes",
"longpages": "Pâges longes",
- "deadendpages": "Pâges en cul-de-sac",
- "deadendpagestext": "Cetes pâges contegnont gins de lim de vers dâôtres pâges de {{SITENAME}}.",
+ "deadendpages": "Pâges en charriére borgne",
+ "deadendpagestext": "Celes pâges-que contegnont gins de lim de vers dâôtres pâges de {{SITENAME}}.",
"protectedpages": "Pâges protègiêes",
- "protectedpages-indef": "Ren que les protèccions sen fin",
- "protectedpages-cascade": "Ren que les protèccions en cascâda",
+ "protectedpages-indef": "Mas que les protèccions sen fin",
+ "protectedpages-summary": "Cela pâge liste les pâges ègzistentes que sont ora protègiêes. Por na lista des titros protègiês contre la crèacion, vêde [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+ "protectedpages-cascade": "Mas que les protèccions en cascâda",
+ "protectedpages-noredirect": "Cachiér les redirèccions",
"protectedpagesempty": "Ora niona pâge est protègiêe avouéc celos paramètros.",
+ "protectedpages-timestamp": "Dâta et hora",
+ "protectedpages-page": "Pâge",
+ "protectedpages-expiry": "Ãxpire lo",
+ "protectedpages-performer": "Protèccion per lâutilisator",
+ "protectedpages-params": "Paramètros de protèccion",
+ "protectedpages-reason": "Rêson",
+ "protectedpages-submit": "Fâre vêre les pâges",
+ "protectedpages-unknown-timestamp": "Encognua",
+ "protectedpages-unknown-performer": "Utilisator encognu",
"protectedtitles": "Titros protègiês",
+ "protectedtitles-summary": "Cela pâge liste los titros que sont ora protègiês contre la crèacion. Por na lista de les pâges ègzistentes protègiêes, vêde [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
"protectedtitlesempty": "Ora nion titro est protègiê avouéc celos paramètros.",
+ "protectedtitles-submit": "Fâre vêre los titros",
"listusers": "Lista des utilisators",
"listusers-editsonly": "Montrar ren que los utilisators avouéc des contribucions",
"listusers-creationsort": "Betar per dâta de crèacion",
+ "listusers-desc": "Betar en ôrdre dècrèssent",
"usereditcount": "$1 changement{{PLURAL:$1||s}}",
"usercreated": "Fêt{{GENDER:$3||a}} lo $1 a $2",
"newpages": "Pâges novèles",
+ "newpages-submit": "Montrar",
"newpages-username": "Nom dâutilisator :",
"ancientpages": "Pâges les ples vielyes",
"move": "Dèplaciér",
- "movethispage": "Dèplaciér ceta pâge",
- "unusedimagestext": "Cetos fichiérs ègzistont, mas sont pas entrebetâs dedens niona pâge.\nSe vos plét, notâd que dâôtros setos Vouèbe pôvont avêr un lim de vers un fichiér avouéc unâURL drêta, donc un fichiér pôt adés étre listâ ique pendent quâil est en usâjo actif.",
- "unusedcategoriestext": "Cetes catègories ègzistont, mas nionâôtra pâge niona catègorie les emplèye.",
+ "movethispage": "Dèplaciér cela pâge",
+ "unusedimagestext": "Celos fichiérs-que ègzistont, mas sont pas apondus a niona pâge.\nSe vos plét, notâd que dâôtros setos Vouèbe pôvont avêr un lim de vers un fichiér avouéc unâURL drêta, adonc un fichiér pôt adés étre listâ ique pendent quâil est en usâjo actif.",
+ "unusedcategoriestext": "Celes catègories-que ègzistont, mas nionâôtra pâge niona catègoria les emplèye.",
"notargettitle": "Niona ciba",
- "notargettext": "Vos éd pas spècifiâ na pâge un utilisator ciba sur laquinta / loquint vos souhètâd fâre celâaccion.",
+ "notargettext": "Vos éd pas spècifiâ na pâge un utilisator ciba que vos voléd fâre celâaccion.",
"nopagetitle": "Niona pâge ciba dâense",
"nopagetext": "La pâge ciba que vos éd spècifiâye ègziste pas.",
"pager-newer-n": "{{PLURAL:$1|ples novèla|$1 ples novèles}}",
"pager-older-n": "{{PLURAL:$1|ples vielye|$1 ples vielyes}}",
- "suppress": "Ãtar",
- "querypage-disabled": "Ceta pâge spèciâla est dèsactivâye por des rêsons de capacitât.",
+ "suppress": "Rèprimar",
+ "querypage-disabled": "Cela pâge spèciâla est dèsactivâye por de rêsons de capacitât.",
+ "apihelp": "Ãde de lâAPI",
+ "apihelp-no-such-module": "Lo modulo « $1 » est entrovâblo.",
"apisandbox": "Bouèta de sabla API",
- "apisandbox-api-disabled": "API est dèsactivâ sur ceti seto.",
- "apisandbox-intro": "Utilisâd ceta pâge por èxpèrimentar avouéc '''MediaWiki API'''.\nReportâd-vos sur [//www.mediawiki.org/wiki/API:Main_page la documentacion de lâAPI] por més de dètalys sur lâusâjo de lâAPI.",
+ "apisandbox-jsonly": "La bouèta de sabla API at fôta de JavaScript.",
+ "apisandbox-api-disabled": "LâAPI est dèsactivâ sur cél seto.",
+ "apisandbox-intro": "Empleyéd cela pâge por èprovar lo
sèrviço Vouèbe API de MediaWiki .\nNen rèferâd-vos a la [[mw:API:Main page|documentacion de lâAPI]] por més de dètalys dessus lâusâjo de lâAPI. Ãgzemplo : [//www.mediawiki.org/wiki/API#A_simple_example avêr lo contegnu dâuna pâge principâla]. Chouèsésséd unâaccion por vêre dâôtros ègzemplos.\n\nNotâd que, quand ben quâo est na bouèta de sabla, les accions que vos féte sur cela pâge pôvont changiér lo vouiqui.",
+ "apisandbox-fullscreen": "Ãpatar la banche",
+ "apisandbox-fullscreen-tooltip": "Ãpatar la banche de la bouèta de sabla por emplir la fenétra du navegator.",
+ "apisandbox-unfullscreen": "Montrar la pâge",
+ "apisandbox-unfullscreen-tooltip": "Rèduire la banche de la bouèta de sabla, por que los lims de navegacion de MediaWiki seyont disponiblos.",
"apisandbox-submit": "Fâre la demanda",
- "apisandbox-reset": "Ãfaciér",
- "apisandbox-examples": "Ãgzemplo",
- "apisandbox-results": "Rèsultat",
- "apisandbox-request-url-label": "Requéta URL :",
- "apisandbox-request-time": "Durâ de la demanda : $1",
- "booksources": "Ãvres de refèrence",
- "booksources-search-legend": "Rechèrchiér entre-mié les ôvres de refèrence",
+ "apisandbox-reset": "Vouedar",
+ "apisandbox-retry": "Tornar èprovar",
+ "apisandbox-loading": "Chargement de les enformacions du modulo « $1 » de lâAPI...",
+ "apisandbox-load-error": "Na fôta est arrevâye pendent lo chargement de les enformacions du modulo « $1 » de lâAPI : $2",
+ "apisandbox-no-parameters": "Cél modulo de lâAPI at gins de paramètro.",
+ "apisandbox-helpurls": "Lims dâéde",
+ "apisandbox-examples": "Ãgzemplos",
+ "apisandbox-dynamic-parameters": "Paramètros de més",
+ "apisandbox-dynamic-parameters-add-label": "Aponsa du paramètro :",
+ "apisandbox-dynamic-parameters-add-placeholder": "Nom du paramètro",
+ "apisandbox-dynamic-error-exists": "Un paramètro apelâ « $1 » ègziste ja.",
+ "apisandbox-deprecated-parameters": "Paramètros dèpassâs",
+ "apisandbox-fetch-token": "Ãtô-remplissâjo du jeton",
+ "apisandbox-submit-invalid-fields-title": "Doux-três champs sont pas justos",
+ "apisandbox-submit-invalid-fields-message": "Se vos plét, corregiéd los champs marcâs et pués tornâd èprovar.",
+ "apisandbox-results": "Rèsultats",
+ "apisandbox-sending-request": "Ãxpèdicion de la demanda a lâAPI...",
+ "apisandbox-loading-results": "Rècèpcion des rèsultats de lâAPI...",
+ "apisandbox-results-error": "Na fôta est arrevâye pendent lo chargement de la rèponsa a la demanda de lâAPI : $1.",
+ "apisandbox-request-url-label": "URL de la demanda :",
+ "apisandbox-request-time": "Temps de la demanda : {{PLURAL:$1|$1 ms}}",
+ "apisandbox-results-fixtoken": "Corregiéd lo jeton et pués remandâd",
+ "apisandbox-results-fixtoken-fail": "Y at pas moyen de rècupèrar lo jeton « $1 ».",
+ "apisandbox-alert-page": "Los champs de cela pâge sont pas justos.",
+ "apisandbox-alert-field": "La valor de cél champ est pas justa.",
+ "booksources": "Ãvres de rèference",
+ "booksources-search-legend": "Rechèrchiér entre-mié dâôvres de rèference",
"booksources-isbn": "ISBN :",
"booksources-search": "Rechèrchiér",
- "booksources-text": "Vê-que na lista de lims de vers dâôtros setos que vendont des lévros nôfs et dâocasion, et pués pôvont avêr des enformacions de ples sur les ôvres que vos chèrchiéd :",
+ "booksources-text": "Vê-que na lista de lims de vers dâôtros setos que vendont de lévros nôvos et dâocasion, et pués que pôvont asse-ben avêr dâenformacions de més sur les ôvres que vos chèrchiéd :",
"booksources-invalid-isbn": "LâISBN balyê semble pas étre justo ; controlâd se vos éd fêt na fôta en copiyent la sôrsa originâla.",
"specialloguserlabel": "Ãtor :",
- "speciallogtitlelabel": "Ciba (titro ou ben utilisator) :",
- "log": "Jornals",
- "all-logs-page": "Tôs los jornals publicos",
- "alllogstext": "Vua combinâye de tôs los jornals disponiblos dessus {{SITENAME}}.\nVos pouede rètrendre la vua en chouèséssent un tipo de jornal, lo nom dâutilisator (sensiblo a la câssa) la pâge regardâye (sensiblâa la câssa avouéc).",
- "logempty": "Niona piéce que corrèspond sur lo jornal.",
- "log-title-wildcard": "Chèrchiér entre-mié los titros que començont per cél tèxto",
- "showhideselectedlogentries": "Montrar / cachiér les entrâs de jornal chouèsies",
+ "speciallogtitlelabel": "Ciba (titro ou ben {{ns:user}}:nom dâutilisator por un utilisator) :",
+ "log": "Jornâls",
+ "logeventslist-submit": "Montrar",
+ "all-logs-page": "Tôs los jornâls publicos",
+ "alllogstext": "Viua combinâye de tôs los jornâls disponiblos dessus {{SITENAME}}.\nVos pouede rètrendre la viua en chouèséssent un tipo de jornâl, lo nom dâutilisator (sensiblo a la câssa) ou ben la pâge regardâye (sensiblâa la câssa avouéc).",
+ "logempty": "Niona piéce que corrèspond sur lo jornâl.",
+ "log-title-wildcard": "Rechèrchiér entre-mié los titros que començont per cél tèxto",
+ "showhideselectedlogentries": "Changiér la visibilitât de les entrês de jornâl chouèsies",
+ "log-edit-tags": "Changiér les balises de les entrês de jornâl chouèsies",
+ "checkbox-select": "Chouèsir : $1",
+ "checkbox-all": "Totes",
+ "checkbox-none": "Pas yona",
+ "checkbox-invert": "Envèrsar",
"allpages": "Totes les pâges",
"nextpage": "Pâge aprés ($1)",
"prevpage": "Pâge devant ($1)",
"allpagesfrom": "Fâre vêre les pâges dês :",
"allpagesto": "Fâre vêre les pâges tant quâa :",
"allarticles": "Totes les pâges",
- "allinnamespace": "Totes les pâges (dedens lâèspâço de noms « $1 »)",
- "allpagessubmit": "Listar",
+ "allinnamespace": "Totes les pâges (dedens lâèspâço de noms $1)",
+ "allpagessubmit": "Emmodar",
"allpagesprefix": "Fâre vêre les pâges que començont per lo prèfixo :",
- "allpagesbadtitle": "Lo titro de la pâge balyêe est pas justo ou ben contint un prèfixo entèrlengoua ou entèrvouiqui resèrvâ.\nContint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.",
+ "allpagesbadtitle": "Lo titro de la pâge balyêe est pas justo ou ben contint un prèfixo entèrlengoua entèrvouiqui resèrvâ.\nContint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.",
"allpages-bad-ns": "{{SITENAME}} at gins dâèspâço de noms « $1 ».",
"allpages-hide-redirects": "Cachiér les redirèccions",
"cachedspecial-viewing-cached-ttl": "Vos vêde na vèrsion betâye en cacho de cela pâge, que pôt étre vielye por lo més $1.",
- "cachedspecial-viewing-cached-ts": "Vos vêde na vèrsion betâye en cacho de cela pâge, que porrêt pas étre tot a fêt a jorn.",
+ "cachedspecial-viewing-cached-ts": "Vos vêde na vèrsion betâye en cacho de cela pâge, que porrêt pas étre a chavon a jorn.",
"cachedspecial-refresh-now": "Vêre la ples novèla.",
"categories": "Catègories",
- "categoriespagetext": "{{PLURAL:$1|Ceta catègorie contint|Cetes catègories contegnont}} des pâges des fichiérs mèdia.\nLes [[Special:UnusedCategories|catègories pas empleyêes]] sont pas montrâyes ique.\nVêde asse-ben les [[Special:WantedCategories|catègories demandâyes]].",
+ "categories-submit": "Montrar",
+ "categoriespagetext": "{{PLURAL:$1|Cela catègoria-que contint|Celes catègories-que contegnont}} de pâges de fichiérs multimèdiâ.\nLes [[Special:UnusedCategories|catègories pas empleyêes]] sont pas montrâyes ique.\nVêde avouéc les [[Special:WantedCategories|catègories demandâyes]].",
"categoriesfrom": "Fâre vêre les catègories dês :",
- "special-categories-sort-count": "tri per nombro de piéces",
- "special-categories-sort-abc": "tri alfabètico",
+ "special-categories-sort-count": "chouèx per comptâjo",
+ "special-categories-sort-abc": "chouèx alfabètico",
"deletedcontributions": "Contribucions suprimâyes",
"deletedcontributions-title": "Contribucions suprimâyes",
"sp-deletedcontributions-contribs": "contribucions",
"linksearch": "Rechèrche de lims de defôr",
- "linksearch-pat": "Modèlo de rechèrche :",
+ "linksearch-pat": "Plan de rechèrche :",
"linksearch-ns": "Ãspâço de noms :",
"linksearch-ok": "Rechèrchiér",
- "linksearch-text": "Des caractèros j·oquères coment « *.wikipedia.org » pôvont étre empleyês.\nIls ant fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *.org ».
\n{{PLURAL:$2|Protocolo recognu|Protocolos recognus}} : $1 (http:// per dèfôt se nion protocolo est spècifiâ).",
+ "linksearch-text": "Des mètacaractèros coment « *.wikipedia.org » pôvont étre empleyês.\nIls ant fôta dâu muens un domêno de nivél de dessus, per ègzemplo « *.org ».
\n{{PLURAL:$2|Protocolo recognu|Protocolos recognus}} : $1 (http:// per dèfôt se nion protocolo est spècifiâ).",
"linksearch-line": "$1 est liyê dês $2",
- "linksearch-error": "Los caractèros j·oquères pôvont étre empleyês ren quâu comencement du nom de domêno de lâhôto.",
+ "linksearch-error": "Los mètacaractèros pôvont étre empleyês ren quâu comencement du nom de domêno de lâhôto.",
"listusersfrom": "Fâre vêre los utilisators dês :",
- "listusers-submit": "Listar",
- "listusers-noresult": "Nion utilisator trovâ.",
- "listusers-blocked": "(blocâ{{GENDER:$1||ye|(ye)}})",
+ "listusers-submit": "Montrar",
+ "listusers-noresult": "Nion utilisator est étâ trovâ.",
+ "listusers-blocked": "(blocâ{{GENDER:$1||ye}})",
"activeusers": "Lista des utilisators actifs",
- "activeusers-intro": "O est na lista des utilisators quâant ègzèrciê unâactivitât la quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.",
+ "activeusers-intro": "O est na lista des utilisators quâant ègzèrciê unâactivitât quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.",
"activeusers-count": "$1 accion{{PLURAL:$1||s}} pendent {{PLURAL:$3|lo jorn passâ|los $3 jorns passâs}}",
"activeusers-from": "Fâre vêre los utilisators dês :",
"activeusers-hidebots": "Cachiér los robots",
"activeusers-hidesysops": "Cachiér los administrators",
- "activeusers-noresult": "Nion utilisator trovâ.",
+ "activeusers-noresult": "Nion utilisator est étâ trovâ.",
+ "activeusers-submit": "Fâre vêre los utilisators actifs",
"listgrouprights": "Drêts de les tropes dâutilisators",
- "listgrouprights-summary": "Vê-que na lista de les tropes dâutilisators dèfenies sur ceti vouiqui et pués los sins drêts dâaccès.\nY pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més dâenformacions]] sur los drêts endividuèls.",
- "listgrouprights-key": "*
Drêt balyê \n*
Drêt cassâ ",
+ "listgrouprights-summary": "Vê-que na lista de les tropes dâutilisators dèfenies sur cél vouiqui et pués lors drêts dâaccès associyês.\nY pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més dâenformacions]] sur los drêts endividuèls.",
+ "listgrouprights-key": "Lègenda :\n*
Drêt balyê \n*
Drêt cassâ ",
"listgrouprights-group": "Tropa",
"listgrouprights-rights": "Drêts",
"listgrouprights-helppage": "Help:Drêts de les tropes",
@@ -1765,21 +1845,42 @@
"listgrouprights-removegroup": "Enlevar de {{PLURAL:$2|la tropa|les tropes}} : $1",
"listgrouprights-addgroup-all": "Apondre a totes les tropes",
"listgrouprights-removegroup-all": "Enlevar de totes les tropes",
- "listgrouprights-addgroup-self": "Sè pôt apondre {{PLURAL:$2|la tropa|les tropes}} a son prôpro compto : $1",
- "listgrouprights-removegroup-self": "Sè pôt enlevar {{PLURAL:$2|la tropa|les tropes}} de son prôpro compto : $1",
- "listgrouprights-addgroup-self-all": "Sè pôt apondre totes les tropes a son prôpro compto",
- "listgrouprights-removegroup-self-all": "Sè pôt enlevar totes les tropes de son prôpro compto",
+ "listgrouprights-addgroup-self": "Sè pôt apondre {{PLURAL:$2|la tropa|les tropes}} u sin comptio : $1",
+ "listgrouprights-removegroup-self": "Sè pôt enlevar {{PLURAL:$2|la tropa|les tropes}} du sin comptio : $1",
+ "listgrouprights-addgroup-self-all": "Sè pôt apondre totes les tropes u sin comptio",
+ "listgrouprights-removegroup-self-all": "Sè pôt enlevar totes les tropes du sin comptio",
+ "listgrouprights-namespaceprotection-header": "Rèstriccions dâèspâço de noms",
+ "listgrouprights-namespaceprotection-namespace": "Ãspâço de noms",
+ "listgrouprights-namespaceprotection-restrictedto": "Drêt(s) que pèrmèt(ont) a lâutilisator de changiér",
+ "listgrants": "Ãtorisacions",
+ "listgrants-summary": "Vê-que na lista des drêts avouéc lor accès associyê ux drêts dâutilisator. Los utilisators pôvont ôtorisar les aplicacions a empleyér lor comptio, mas avouéc des drêts limitâs dâaprés los drêts que lâutilisator at balyê a lâaplicacion. Portant unâaplicacion fassent u nom dâun utilisator pôt pas ben empleyér de drêts que lâutilisator at pas.\nY pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més dâenformacions]] sur los drêts endividuèls.",
+ "listgrants-grant": "Ãtorisacion",
+ "listgrants-rights": "Drêts",
+ "trackingcategories": "Catègories de gouârda",
+ "trackingcategories-summary": "Cela pâge liste les catègories de gouârda que sont emplies ôtomaticament per MediaWiki. Lors noms pôvont étre changiês en changient los mèssâjos sistèmo que corrèspondont dedens lâèspâço de noms {{ns:8}}.",
+ "trackingcategories-msg": "Catègoria de gouârda",
+ "trackingcategories-name": "Nom du mèssâjo",
+ "trackingcategories-desc": "Critèros dâentrebetâ de la catègoria",
+ "noindex-category-desc": "La pâge est pas endèxâye per los robots, contint lo mot magico
__NOINDEX__
et est dedens un èspâço de noms yô que cél marcâjo est ôtorisâ.",
+ "index-category-desc": "La pâge contint un
__INDEX__
(et est dedens un èspâço de noms yô que cél marcâjo est ôtorisâ), et pués serat vêr endèxâye per los robots pendent quâo serêt pas étâ normalament.",
+ "post-expand-template-inclusion-category-desc": "La talye de la pâge dèpâsse
$wgMaxArticleSize
aprés lâèxpension de tôs los modèlos, cen fât que doux-três modèlos ant vêr pas étâ èpatâs.",
+ "post-expand-template-argument-category-desc": "La pâge dèpâsse
$wgMaxArticleSize
aprés lâèxpension dâun argument de modèlo (quârque-ren entre-mié colâdes triples, coment
{{{Foo}}}
).",
+ "expensive-parserfunction-category-desc": "La pâge emplèye trop de fonccions parsiors que revegnont chieres (coment
#ifexist
). Vêde [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "La pâge contint un lim de fichiér câsso (un lim por apondre un fichiér pendent que ceti ègziste pas).",
+ "hidden-category-category-desc": "La catègoria contint
__HIDDENCAT__
dedens son contegnu, cen quâempache per dèfôt sa viua dens lo cajon des lims de catègoria sur les pâges.",
+ "trackingcategories-nodesc": "Niona dèscripcion disponibla.",
+ "trackingcategories-disabled": "La catègoria est dèsactivâye",
"mailnologin": "Nionâadrèce dâèxpèdior",
- "mailnologintext": "Vos dête étre [[Special:UserLogin|branchiê]] et avêr spècifiâ unâadrèce èlèctronica justa dens voutres [[Special:Preferences|prèferences]] por povêr mandar des mèssâjos a dâôtros utilisators.",
- "emailuser": "Lui mandar un mèssâjo",
- "emailuser-title-target": "Mandar un mèssâjo a cetâutilisat{{GENDER:$1|or|rice}}",
+ "mailnologintext": "Vos dête étre [[Special:UserLogin|branchiê]] et pués avêr unâadrèce èlèctronica justa dens voutres [[Special:Preferences|prèferences]] por povêr mandar de mèssâjos a dâôtros utilisators.",
+ "emailuser": "Y mandar un mèssâjo",
+ "emailuser-title-target": "Mandar un mèssâjo a {{GENDER:$1|cél utilisator|celâutilisatrice}}",
"emailuser-title-notarget": "Mandar un mèssâjo a lâutilisator",
- "emailpagetext": "Vos pouede empleyér lo formulèro ce-desot por mandar un mèssâjo a cetâutilisat{{GENDER:$1|or|rice}}.\nLâadrèce èlèctronica que vos éd buchiêe dens voutres [[Special:Preferences|prèferences]] aparêtrat dedens lo champ « Ãxpèdior » de voutron mèssâjo ; dâense, lo dèstinatèro vos porrat rèpondre tot drêt.",
+ "emailpagetext": "Vos pouede empleyér lo formulèro ce-desot por mandar un mèssâjo a {{GENDER:$1|cél utilisator|celâutilisatrice}}.\nLâadrèce èlèctronica que vos éd buchiêe dens voutres [[Special:Preferences|prèferences]] aparêtrat dedens lo champ « Ãxpèdior » de voutron mèssâjo, cen fât que lo dèstinatèro vos porrat rèpondre tot drêt.",
"defemailsubject": "Mèssâjo de {{SITENAME}} de lâutilisator « $1 »",
"usermaildisabled": "Lâèxpèdicion de mèssâjos entre utilisators est dèsactivâye",
- "usermaildisabledtext": "Vos pouede pas mandar de mèssâjos a dâôtros utilisators sur ceti vouiqui",
+ "usermaildisabledtext": "Vos pouede pas mandar de mèssâjos a dâôtros utilisators sur cél vouiqui",
"noemailtitle": "Nionâadrèce èlèctronica",
- "noemailtext": "Cetâutilisator at pas spècifiâ unâadrèce èlèctronica justa.",
+ "noemailtext": "Cél utilisator at pas spècifiâ unâadrèce èlèctronica justa.",
"nowikiemailtext": "Cél utilisator at chouèsi de pas recêvre de mèssâjos de la pârt dâôtros utilisators.",
"emailnotarget": "Nom dâutilisator du dèstinatèro pas ègzistent pas justo.",
"emailtarget": "Buchiéd lo nom dâutilisator du dèstinatèro",
@@ -1795,90 +1896,121 @@
"emailccsubject": "Copia de voutron mèssâjo a $1 : $2",
"emailsent": "Mèssâjo mandâ",
"emailsenttext": "Voutron mèssâjo est étâ mandâ per mèssageria èlèctronica.",
- "emailuserfooter": "Ceti mèssâjo est étâ mandâ per « $1 » a « $2 » per la fonccion « Lui mandar un mèssâjo » de {{SITENAME}}.",
+ "emailuserfooter": "Cél mèssâjo est étâ {{GENDER:$1|mandâ}} per « $1 » a « {{GENDER:$2|$2}} » per la fonccion « {{int:emailuser}} » de {{SITENAME}}.",
"usermessage-summary": "At lèssiê un mèssâjo sistèmo.",
"usermessage-editor": "Mèssagiér du sistèmo",
"usermessage-template": "MediaWiki:MèssâjoUtilisator",
- "watchlist": "Lista de siuvu",
- "mywatchlist": "Lista de siuvu",
+ "watchlist": "Lista de gouârda",
+ "mywatchlist": "Lista de gouârda",
"watchlistfor2": "Por $1 $2",
- "nowatchlist": "Vos éd gins de piéce dedens voutra lista de siuvu.",
- "watchlistanontext": "Se vos plét, vos vos dête $1 por povêr vêre ou ben changiér les piéces de voutra lista de siuvu.",
+ "nowatchlist": "Vos éd gins de piéce dedens voutra lista de gouârda.",
+ "watchlistanontext": "Se vos plét, branchiéd-vos por povêr vêre ou ben changiér les piéces de voutra lista de gouârda.",
"watchnologin": "Pas branchiê",
- "addwatch": "Apondre a la lista de siuvu",
- "addedwatchtext": "La pâge « [[:$1]] » est étâye apondua a voutra [[Special:Watchlist|lista de siuvu]].\nLos changements que vegnont de ceta pâge et de la sina pâge de discussion y seront listâs.",
- "removewatch": "Enlevar de la lista de siuvu",
- "removedwatchtext": "La pâge « [[:$1]] » est étâye enlevâye de voutra [[Special:Watchlist|lista de siuvu]].",
+ "addwatch": "Apondre a la lista de gouârda",
+ "addedwatchtext": "« [[:$1]] » et sa pâge de discussion sont étâyes apondues a voutra [[Special:Watchlist|lista de gouârda]].",
+ "addedwatchtext-short": "La pâge « $1 » est étâye apondua a voutra lista de gouârda.",
+ "removewatch": "Enlevar de la lista de gouârda",
+ "removedwatchtext": "« [[:$1]] » et sa pâge de discussion sont étâyes enlevâyes de voutra [[Special:Watchlist|lista de gouârda]].",
+ "removedwatchtext-short": "La pâge « $1 » est étâye enlevâye de voutra lista de gouârda.",
"watch": "Siuvre",
- "watchthispage": "Siuvre ceta pâge",
+ "watchthispage": "Siuvre cela pâge",
"unwatch": "Pas més siuvre",
"unwatchthispage": "Pas més siuvre",
"notanarticle": "O est pas na pâge de contegnu",
"notvisiblerev": "La dèrriére vèrsion per un ôtrâutilisator est étâye suprimâye",
- "watchlist-details": "Y at $1 pâge{{PLURAL:$1||s}} dedens voutra lista de siuvu, sen comptar les pâges de discussion.",
+ "watchlist-details": "Y at $1 pâge{{PLURAL:$1||s}} dedens voutra lista de gouârda, sen comptar a pârt les pâges de discussion.",
"wlheader-enotif": "La notificacion per mèssageria èlèctronica est activâye.",
- "wlheader-showupdated": "Les pâges que sont étâyes changiêes dês voutra dèrriére visita sont montrâyes en '''grâs'''.",
- "wlnote": "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|lâhora passâye|les '''$2''' hores passâyes}}, dês $3 a $4.",
- "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs ou ben",
- "watchlist-options": "Chouèx de la lista de siuvu",
- "watching": "Siuvu...",
- "unwatching": "Fin du siuvu...",
- "watcherrortext": "Na fôta est arrevâye pendent lo changement de la configuracion de voutra lista de siuvu por « $1 ».",
- "enotif_reset": "Marcar totes les pâges coment visitâyes",
+ "wlheader-showupdated": "Les pâges que sont étâyes changiêes dês voutra dèrriére vesita sont montrâyes en
grôs .",
+ "wlnote": "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los
$1 dèrriérs changements fêts}} pendent {{PLURAL:$2|lâhora passâye|les
$2 hores passâyes}}, tant quâu $3 a $4.",
+ "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs",
+ "watchlist-hide": "Cachiér",
+ "watchlist-submit": "Montrar",
+ "wlshowtime": "Temps a fâre vêre :",
+ "wlshowhideminor": "petiôts changements",
+ "wlshowhidebots": "robots",
+ "wlshowhideliu": "utilisators encartâs",
+ "wlshowhideanons": "utilisators anonimos",
+ "wlshowhidepatr": "changements gouardâs",
+ "wlshowhidemine": "mos changements",
+ "wlshowhidecategorization": "catègorisacion de les pâges",
+ "watchlist-options": "Chouèx de la lista de gouârda",
+ "watching": "Comencement de la gouârda...",
+ "unwatching": "Fin de la gouârda...",
+ "watcherrortext": "Na fôta est arrevâye pendent lo changement de la configuracion de voutra lista de gouârda por « $1 ».",
+ "enotif_reset": "Marcar totes les pâges coment vesitâyes",
"enotif_impersonal_salutation": "Utilisator de {{SITENAME}}",
- "enotif_subject_deleted": "La pâge $1 dessus {{SITENAME}} est étâye suprimâye per {{GENDER:$2|$2}}",
- "enotif_subject_created": "La pâge $1 dessus {{SITENAME}} est étâye fêta per {{GENDER:$2|$2}}",
- "enotif_subject_moved": "La pâge $1 dessus {{SITENAME}} est étâye dèplaciêe per {{GENDER:$2|$2}}",
- "enotif_subject_restored": "La pâge $1 dessus {{SITENAME}} est étâye refêta per {{GENDER:$2|$2}}",
- "enotif_subject_changed": "La pâge $1 dessus {{SITENAME}} est étâye changiêe per {{GENDER:$2|$2}}",
- "enotif_body_intro_deleted": "La pâge $1 dessus {{SITENAME}} est étâye suprimâye lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3.",
- "enotif_body_intro_created": "La pâge $1 dessus {{SITENAME}} est étâye fêta lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion dâora.",
- "enotif_body_intro_moved": "La pâge $1 dessus {{SITENAME}} est étâye dèplaciêe lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion dâora.",
- "enotif_body_intro_restored": "La pâge $1 dessus {{SITENAME}} est étâye refêta lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion dâora.",
- "enotif_body_intro_changed": "La pâge $1 dessus {{SITENAME}} est étâye changiêe lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion dâora.",
- "enotif_lastvisited": "Vêde $1 por tôs los changements dês voutra dèrriére visita.",
+ "enotif_subject_deleted": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|suprimâye}} per $2",
+ "enotif_subject_created": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|fêta}} per $2",
+ "enotif_subject_moved": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|dèplaciêe}} per $2",
+ "enotif_subject_restored": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|refêta}} per $2",
+ "enotif_subject_changed": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|changiêe}} per $2",
+ "enotif_body_intro_deleted": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|suprimâye}} lo $PAGEEDITDATE per $2, vêde $3.",
+ "enotif_body_intro_created": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|fêta}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion dâora.",
+ "enotif_body_intro_moved": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|dèplaciêe}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion dâora.",
+ "enotif_body_intro_restored": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|refêta}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion dâora.",
+ "enotif_body_intro_changed": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|changiêe}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion dâora.",
+ "enotif_lastvisited": "Vêde $1 por tôs los changements dês voutra dèrriére vesita.",
"enotif_lastdiff": "Vêde $1 por vêre cél changement.",
"enotif_anon_editor": "utilisator anonimo $1",
- "enotif_body": "Chier(a) $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRèsumâ du contributor : $PAGESUMMARY $PAGEMINOREDIT\n\nVeriéd-vos vers lo contributor :\nmèl. : $PAGEEDITOR_EMAIL\nvouiqui : $PAGEEDITOR_WIKI\n\nY arat gins dâôtra notificacion en câs de changements a vegnir, du muens que vos visiteyâd cela pâge. Vos pouede asse-ben rebetar a zérô los segnalements de notificacion por totes les pâges de voutra lista de siuvu.\n\nVoutron sistèmo de notificacion de {{SITENAME}}\n\n--\nPor changiér la configuracion de notificacion per mèssageria èlèctronica, visitâd\n{{canonicalurl:{{#special:Preferences}}}}\n\nPor changiér la configuracion de voutra lista de siuvu, visitâd\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPor suprimar la pâge de voutra lista de siuvu, visitâd\n$UNWATCHURL\n\nAvis et assistance de ples :\n$HELPPAGE",
+ "enotif_body": "Chier{{GENDER:$WATCHINGUSERNAME||a}} $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRèsumâ du contributor : $PAGESUMMARY $PAGEMINOREDIT\n\nVeriéd-vos vers lo contributor :\nmèl. : $PAGEEDITOR_EMAIL\nvouiqui : $PAGEEDITOR_WIKI\n\nY arat gins dâôtra notificacion en câs de changements a vegnir, a muens que vos vesiteyéd cela pâge a pêna branchiê. Vos pouede asse-ben rebetar a zérô los marcâjos de notificacion por totes les pâges de voutra lista de gouârda.\n\nVoutron sistèmo de notificacion de {{SITENAME}}\n\n--\nPor changiér la configuracion de notificacion per mèssageria èlèctronica, vesitâd\n{{canonicalurl:{{#special:Preferences}}}}\n\nPor changiér la configuracion de voutra lista de gouârda, vesitâd\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPor suprimar la pâge de voutra lista de gouârda, vesitâd\n$UNWATCHURL\n\nAvis et éde de més :\n$HELPPAGE",
"created": "fêta",
"changed": "changiê",
"deletepage": "Suprimar la pâge",
"confirm": "Confirmar",
"excontent": "lo contegnu ére : « $1 »",
- "excontentauthor": "lo contegnu ére : « $1 » (et lo solèt contributor ére « [[Special:Contributions/$2|$2]] »)",
+ "excontentauthor": "lo contegnu ére : « $1 », et lo solèt contributor « [[Special:Contributions/$2|$2]] » ([[User talk:$2|discutar]])",
"exbeforeblank": "lo contegnu devant blanchiment ére : « $1 »",
"delete-confirm": "Suprimar « $1 »",
"delete-legend": "Suprimar",
- "historywarning": "'''Atencion :''' la pâge que vos éte prèst a suprimar at un historico avouéc a pou prés $1 vèrsion{{PLURAL:$1||s}} :",
- "confirmdeletetext": "Vos éte prèst a suprimar na pâge et pués tot lo sin historico.\nSe vos plét, confirmâd quâo est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].",
+ "historywarning": "
Atencion : la pâge que vos éte prèst a suprimar at un historico avouéc $1 vèrsion{{PLURAL:$1||s}} :",
+ "historyaction-submit": "Montrar",
+ "confirmdeletetext": "Vos éte prèst a suprimar na pâge et pués tot son historico.\nSe vos plét, confirmâd quâo est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|politiques]].",
"actioncomplete": "Accion fêta",
"actionfailed": "Lâaccion at pas reussi",
"deletedtext": "« $1 » est étâye suprimâye.\nVêde lo $2 por na lista de les novèles suprèssions.",
- "dellogpage": "Jornal de les suprèssions",
+ "dellogpage": "Jornâl de les suprèssions",
"dellogpagetext": "Vê-que na lista de les suprèssions les ples novèles.",
- "deletionlog": "jornal de les suprèssions",
- "reverted": "Vèrsion devant rètablia",
+ "deletionlog": "jornâl de les suprèssions",
+ "reverted": "Rèvocâ a la vèrsion devant",
"deletecomment": "Rêson :",
- "deleteotherreason": "Ãtra rêson / rêson de ples :",
+ "deleteotherreason": "Ãtra rêson ou ben rêson de més :",
"deletereasonotherlist": "Ãtra rêson",
- "deletereason-dropdown": "*Rêsons corentes de suprèssion\n** Demanda de lâôtor\n** Violacion du drêt dâôtor\n** Vandalismo",
+ "deletereason-dropdown": "* Rêsons corentes de suprèssion\n** Mèssâjo cofo\n** Vandalismo\n** Violacion du drêt dâôtor\n** Demanda de lâôtor\n** Redirèccion câssa",
"delete-edit-reasonlist": "Changiér les rêsons de suprèssion",
- "delete-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprèssion de pâges dâense est étâye rètrenta por prèvegnir des pèrturbacions emprèvues de {{SITENAME}}.",
- "delete-warning-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;\na fâre avouéc prudence.",
+ "delete-toobig": "Cela pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprèssion de pâges dâense est étâye rètrenta por prèvegnir de pèrturbacions emprèviues de {{SITENAME}}.",
+ "delete-warning-toobig": "Cela pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;\na fâre avouéc prudence.",
+ "deleteprotected": "Vos pouede pas suprimar cela pâge, el est étâye protègiêe.",
+ "deleting-backlinks-warning": "
Atencion : [[Special:WhatLinksHere/{{FULLPAGENAME}}|Dâôtres pâges]] ant un lim de vers ou ben transcllusont la pâge que vos voléd suprimar.",
"rollback": "Rèvocar los changements",
"rollbacklink": "rèvocar",
"rollbacklinkcount": "rèvocar $1 changement{{PLURAL:$1||s}}",
"rollbacklinkcount-morethan": "rèvocar més de $1 changement{{PLURAL:$1||s}}",
"rollbackfailed": "La rèvocacion at pas reussi",
- "cantrollback": "Y at pas moyen de rèvocar lo changement ;\nlo dèrriér contributor est lo solèt ôtor de ceta pâge.",
+ "cantrollback": "Y at pas moyen de rèvocar lo changement ;\nlo dèrriér contributor est lo solèt ôtor de cela pâge.",
"alreadyrolled": "Y at pas moyen de rèvocar lo dèrriér changement de la pâge « [[:$1]] » fêt per [[User:$2|$2]] ([[User talk:$2|discutar]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;\nun ôtro at ja changiê ou ben rèvocâ la pâge.\n\nLo dèrriér changement de la pâge est étâ fêt per [[User:$3|$3]] ([[User talk:$3|discutar]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "Lo rèsumâ de changement ére :
$1 .",
"revertpage": "Rèvocacion des changements de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]]) de vers la dèrriére vèrsion de [[User:$1|$1]]",
- "revertpage-nouser": "Rèvocacion des changements de (nom dâutilisator enlevâ) de vers la dèrriére vèrsion de [[User:$1|$1]]",
+ "revertpage-nouser": "Rèvocacion des changements per un utilisator cachiê de vers la dèrriére vèrsion de {{GENDER:$1|[[User:$1|$1]]}}",
"rollback-success": "Rèvocacion des changements de $1 ;\nrèstoracion de la dèrriére vèrsion de $2.",
- "sessionfailure-title": "Falyita de sèance",
- "sessionfailure": "Voutra sèance de branchement semble avêr des problèmos ;\ncelâaccion est étâye anulâye en prèvencion dâun piratâjo de sèance.\nSe vos plét, clicâd dessus « Devant », rechargiéd la pâge de yô que vos vegnéd et pués tornâd èprovar.",
- "protectlogpage": "Jornal de les protèccions",
+ "sessionfailure-title": "Falyita de sèssion",
+ "sessionfailure": "Voutra sèssion de branchement semble avêr de problèmos ;\ncelâaccion est étâye anulâye en prèvencion dâun piratâjo de sèssion.\nSe vos plét, cllicâd dessus « Devant », rechargiéd la pâge de yô que vos vegnéd et pués tornâd èprovar.",
+ "changecontentmodel": "Changiér lo modèlo de contegnu dâuna pâge",
+ "changecontentmodel-legend": "Changiér lo modèlo de contegnu",
+ "changecontentmodel-title-label": "Titro de la pâge",
+ "changecontentmodel-model-label": "Novél modèlo de contegnu",
+ "changecontentmodel-reason-label": "Rêson :",
+ "changecontentmodel-submit": "Changiér",
+ "changecontentmodel-success-title": "Lo modèlo de contegnu est étâ changiê",
+ "changecontentmodel-success-text": "Lo tipo de contegnu de [[:$1]] est étâ changiê.",
+ "changecontentmodel-cannot-convert": "Lo contegnu dessus [[:$1]] at pas possu étre convèrti en un tipo de $2.",
+ "changecontentmodel-nodirectediting": "Lo modèlo de contegnu $1 recognêt pas lo changement drêt",
+ "log-name-contentmodel": "Jornâl des changements de modèlo de contegnu",
+ "log-description-contentmodel": "Ãvènements sur los modèlos de contegnu dâuna pâge",
+ "logentry-contentmodel-new": "$1 at {{GENDER:$2|fêt}} la pâge $3 en empleyent un modèlo de contegnu « $5 » ôtro que celi per dèfôt",
+ "logentry-contentmodel-change": "$1 at {{GENDER:$2|changiê}} lo modèlo de contegnu de la pâge $3 de « $4 » en « $5 »",
+ "logentry-contentmodel-change-revertlink": "rèvocar",
+ "logentry-contentmodel-change-revert": "rèvocar",
+ "protectlogpage": "Jornâl de les protèccions",
"protectlogtext": "Vê-que na lista des changements de les protèccions de pâges.\nVêde la [[Special:ProtectedPages|lista de les pâges protègiêes]] por la lista de les protèccions que sont ora actives.",
"protectedarticle": "at protègiê « [[$1]] »",
"modifiedarticleprotection": "at changiê lo nivél de protèccion de « [[$1]] »",
@@ -1888,34 +2020,35 @@
"protect-title-notallowed": "Vêre lo nivél de protèccion de « $1 »",
"prot_1movedto2": "at dèplaciê [[$1]] vers [[$2]]",
"protect-badnamespace-title": "Ãspâço de noms pas protèjâblo",
- "protect-badnamespace-text": "Les pâges dedens cetâèspâço de noms pôvont pas étre protègiêes.",
+ "protect-badnamespace-text": "Les pâges dedens cél èspâço de noms pôvont pas étre protègiêes.",
"protect-norestrictiontypes-text": "Cela pâge pôt pas étre protègiêe, y at gins de tipo de rèstriccion disponiblo.",
"protect-norestrictiontypes-title": "Pâge pas protèjâbla",
"protect-legend": "Confirmar la protèccion",
"protectcomment": "Rêson :",
"protectexpiry": "Dâta dâèxpiracion :",
- "protect_expiry_invalid": "La dâta dâèxpiracion est pas justa.",
- "protect_expiry_old": "La dâta dâèxpiracion est ja passâye.",
- "protect-unchain-permissions": "Dèvèrrolyér adés més de chouèx de protèccion",
- "protect-text": "Ique vos pouede vêre et changiér lo nivél de protèccion de la pâge '''$1'''.",
- "protect-locked-blocked": "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ{{GENDER:||ye|(ye)}}.\nVê-que la configuracion dâora de la pâge '''$1''' :",
- "protect-locked-dblock": "Los nivéls de protèccion pôvont pas étre changiês, la bâsa de balyês est vèrrolyêe.\nVê-que la configuracion dâora de la pâge '''$1''' :",
- "protect-locked-access": "Voutron compto at pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.\nVê-que la configuracion dâora de la pâge '''$1''' :",
- "protect-cascadeon": "Ora cela pâge-que est protègiêe, el est entrebetâye dedens {{PLURAL:$1|ceta pâge quâest étâye protègiêe|cetes pâges que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ.\nVos pouede changiér lo nivél de protèccion de cela pâge sen que cen afècte la protèccion en cascâda.",
+ "protect_expiry_invalid": "Lo temps dâèxpiracion est pas justo.",
+ "protect_expiry_old": "Lo temps dâèxpiracion est ja passâ.",
+ "protect-unchain-permissions": "Dècotar adés més de chouèx de protèccion",
+ "protect-text": "Ique vos pouede vêre et changiér lo nivél de protèccion de la pâge
$1 .",
+ "protect-locked-blocked": "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ{{GENDER:||ye}}.\nVê-que la configuracion dâora de la pâge
$1 :",
+ "protect-locked-dblock": "Los nivéls de protèccion pôvont pas étre changiês, la bâsa de balyês est cotâye.\nVê-que la configuracion dâora de la pâge
$1 :",
+ "protect-locked-access": "Voutron comptio at pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.\nVê-que la configuracion dâora de la pâge
$1 :",
+ "protect-cascadeon": "Ora cela pâge est protègiêe, el est transcllua dedens {{PLURAL:$1|cela pâge-que quâest étâye protègiêe|celes pâges-que que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ.\nLos changements du nivél de protèccion de cela pâge afècteront pas la protèccion en cascâda.",
"protect-default": "Ãtorisar tôs los utilisators",
- "protect-fallback": "Ãtorisar ren que los utilisators avouéc lo drêt « $1 »",
- "protect-level-autoconfirmed": "Ãtorisar ren que los utilisators ôtoconfirmâs",
- "protect-level-sysop": "Ãtorisar ren que los administrators",
+ "protect-fallback": "Ãtorisar mas que los utilisators avouéc lo drêt « $1 »",
+ "protect-level-autoconfirmed": "Ãtorisar mas que los utilisators ôtoconfirmâs",
+ "protect-level-sysop": "Ãtorisar mas que los administrators",
"protect-summary-cascade": "protèccion en cascâda",
- "protect-expiring": "èxpire lo $2 a $3 (UTC)",
+ "protect-expiring": "èxpire lo $1 (UTC)",
"protect-expiring-local": "èxpire lo $1",
"protect-expiry-indefinite": "sen fin",
"protect-cascade": "Protègiér les pâges entrebetâyes dedens ceta (protèccion en cascâda)",
- "protect-cantedit": "Vos pouede pas changiér los nivéls de protèccion de ceta pâge, vos éd pas la pèrmission de la changiér.",
- "protect-othertime": "Ãtra dâta dâèxpiracion :",
- "protect-othertime-op": "ôtra dâta dâèxpiracion",
- "protect-existing-expiry": "Dâta dâèxpiracion ègzistenta : $2 a $3",
- "protect-otherreason": "Ãtra rêson / rêson de ples :",
+ "protect-cantedit": "Vos pouede pas changiér los nivéls de protèccion de cela pâge, vos éd pas la pèrmission de la changiér.",
+ "protect-othertime": "Ãtro temps :",
+ "protect-othertime-op": "ôtro temps",
+ "protect-existing-expiry": "Temps dâèxpiracion ègzistent : $2 a $3",
+ "protect-existing-expiry-infinity": "Temps dâèxpiracion ègzistent : sen fin",
+ "protect-otherreason": "Ãtra rêson ou ben rêson de més :",
"protect-otherreason-op": "Ãtra rêson",
"protect-dropdown": "*Rêsons corentes de protèccion\n** Vandalismo èxcèssif\n** Spame èxcèssif\n** Guèrres de changements contre-productives\n** Pâge a trafic fôrt",
"protect-edit-reasonlist": "Changiér les rêsons de protèccion",
@@ -2017,6 +2150,7 @@
"whatlinkshere-hidelinks": "$1 los lims",
"whatlinkshere-hideimages": "$1 los fichiérs liyês",
"whatlinkshere-filters": "Filtros",
+ "whatlinkshere-submit": "Emmodar",
"autoblockid": "Blocâjo ôtomatico #$1",
"block": "Blocar lâusanciér",
"unblock": "Dèblocar lâusanciér",
@@ -2215,7 +2349,7 @@
"allmessages-filter-modified": "Changiê",
"allmessages-prefix": "Filtrar per prèfixo :",
"allmessages-language": "Lengoua :",
- "allmessages-filter-submit": "Aplicar",
+ "allmessages-filter-submit": "Emmodar",
"thumbnail-more": "Agrantir",
"filemissing": "Fichiér manquent",
"thumbnail_error": "Ãrror pendent la crèacion de la figura : $1",
@@ -2840,8 +2974,9 @@
"percent": "$1 %",
"imgmultipageprev": "â pâge devant",
"imgmultipagenext": "pâge aprés â",
- "imgmultigo": "Listar !",
+ "imgmultigo": "Emmodar !",
"imgmultigoto": "Alar a la pâge $1",
+ "img-lang-go": "Emmodar",
"ascending_abbrev": "que crêt",
"descending_abbrev": "que dècrêt",
"table_pager_next": "Pâge aprés",
@@ -2850,7 +2985,7 @@
"table_pager_last": "Dèrriére pâge",
"table_pager_limit": "Montrar $1 èlèment{{PLURAL:$1||s}} per pâge",
"table_pager_limit_label": "Rèsultats per pâge :",
- "table_pager_limit_submit": "Listar",
+ "table_pager_limit_submit": "Emmodar",
"table_pager_empty": "Gins de rèsultat",
"autosumm-blank": "Pâge blanchia",
"autosumm-replace": "Contegnu remplaciê per « $1 »",
@@ -2957,6 +3092,7 @@
"version-entrypoints": "URL de pouent dâentrâ",
"version-entrypoints-header-entrypoint": "Pouent dâentrâ",
"version-entrypoints-header-url": "URL",
+ "redirect-submit": "Emmodar",
"fileduplicatesearch": "Rechèrche des fichiérs en doblo",
"fileduplicatesearch-summary": "Rechèrche des fichiérs en doblo dâaprés lor mârca de chaplâjo.",
"fileduplicatesearch-legend": "Rechèrche dâun doblo",
diff --git a/languages/i18n/frr.json b/languages/i18n/frr.json
index 490a0f24a9..0306e65208 100644
--- a/languages/i18n/frr.json
+++ b/languages/i18n/frr.json
@@ -1202,7 +1202,7 @@
"recentchanges-label-bot": "Feranrang faan en bot",
"recentchanges-label-unpatrolled": "Detdiar feranrang as noch ei efterluket wurden",
"recentchanges-label-plusminus": "Feranert sidjengrate (am soföl bytes)",
- "recentchanges-legend-heading": "'''Ferklaarang:'''",
+ "recentchanges-legend-heading": "
Ferklaarang: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Diar {{PLURAL:$5|woort det feranrang|wurd a feranrangen}} sant
$3,$4 uunwiset (ei muar üs
$1 feranrangen).",
diff --git a/languages/i18n/fur.json b/languages/i18n/fur.json
index 551586e367..42da004e43 100644
--- a/languages/i18n/fur.json
+++ b/languages/i18n/fur.json
@@ -707,7 +707,7 @@
"recentchanges-label-bot": "Chest cambiament al è stât eseguît di un bot",
"recentchanges-label-unpatrolled": "Chest cambiament nol è stât ancjemò verificât",
"recentchanges-label-plusminus": "La dimension de pagjine e je cambiade di chest numar di byte",
- "recentchanges-legend-heading": "'''Lejende:'''",
+ "recentchanges-legend-heading": "
Lejende: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (cjale lis [[Special:NewPages|gnovis pagjinis]])",
"rcnotefrom": "Ca sot i cambiaments dal '''$2''' (fintremai al '''$1''').",
"rclistfrom": "Mostre i ultins cambiaments dal $3 $2",
diff --git a/languages/i18n/fy.json b/languages/i18n/fy.json
index 742f2440f1..80329a0eda 100644
--- a/languages/i18n/fy.json
+++ b/languages/i18n/fy.json
@@ -947,7 +947,7 @@
"recentchanges-label-minor": "Dit is in tekstwiziging",
"recentchanges-label-bot": "Dizze wiziging is troch in robot makke",
"recentchanges-label-unpatrolled": "Dizze wiziging is noch net neisjûn",
- "recentchanges-legend-heading": "'''Leginda:'''",
+ "recentchanges-legend-heading": "
Leginda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjoch ek de [[Special:NewPages|list mei nije siden]])",
"rcnotefrom": "Dit binne de feroarings sûnt
$2 (maksimaal
$1 ).",
"rclistfrom": "Jou nije feroarings, begjinnende mei $3 $2",
diff --git a/languages/i18n/gd.json b/languages/i18n/gd.json
index 2f731f227d..1bb1745180 100644
--- a/languages/i18n/gd.json
+++ b/languages/i18n/gd.json
@@ -1160,7 +1160,7 @@
"recentchanges-label-bot": "'S e bot a rinn an deasachadh seo",
"recentchanges-label-unpatrolled": "Cha do chuir freiceadan comharra ris an deasachadh seo fhathast",
"recentchanges-label-plusminus": "Seo meud atharrachadh na duilleige ann am byte",
- "recentchanges-legend-heading": "'''Treòir:'''",
+ "recentchanges-legend-heading": "
Treòir: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
"recentchanges-legend-plusminus": "(
±123 )",
"rcnotefrom": "Chì thu {{PLURAL:$5|am mùthadh|na mùthaidhean|na mùthaidhean|na mùthaidhean}} o
$3 $4 (gu ruige
$1 dhiubh) gu h-ìosal.",
diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json
index 5c31b883ac..0c59e35e2a 100644
--- a/languages/i18n/gl.json
+++ b/languages/i18n/gl.json
@@ -460,7 +460,7 @@
"nocookieslogin": "{{SITENAME}} usa cookies para rexistrar os usuarios.\nVostede ten as cookies deshabilitadas.\nPor favor, habilÃteas e inténteo de novo.",
"nocookiesfornew": "Non se creou a conta de usuario porque non puidemos confirmar a súa orixe.\nAsegúrese de que ten as cookies habilitadas, volva cargar a páxina e inténteo de novo.",
"noname": "Non especificou un nome de usuario válido.",
- "loginsuccesstitle": "Accedeu correctamente",
+ "loginsuccesstitle": "Conectado",
"loginsuccess": "
Accedeu ao sistema de {{SITENAME}} como \"$1\". ",
"nosuchuser": "Non existe ningún usuario chamado \"$1\".\nOs nomes de usuario diferencian entre maiúsculas e minúsculas.\nVerifique o nome que inseriu ou [[Special:UserLogin/signup|cree unha nova conta]].",
"nosuchusershort": "Non existe ningún usuario chamado \"$1\".\nVerifique o nome que inseriu.",
@@ -496,7 +496,7 @@
"createaccount-title": "Creación dunha conta para {{SITENAME}}",
"createaccount-text": "Alguén creou unha conta chamada \"$2\" para o seu enderezo de correo electrónico en {{SITENAME}} ($4), e con contrasinal \"$3\".\nDebe acceder ao sistema e mudar o contrasinal agora.\n\nPode facer caso omiso desta mensaxe se se creou esta conta por erro.",
"login-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
- "login-abort-generic": "Acceso ao sistema incorrecto; abortado",
+ "login-abort-generic": "Fallou o inicio de sesión - Cancelado",
"login-migrated-generic": "A súa conta foi migrada e o seu nome de usuario xa non existe neste wiki.",
"loginlanguagelabel": "Lingua: $1",
"suspicious-userlogout": "Rexeitouse a súa petición de saÃr do sistema porque semella que a enviou un navegador roto ou a caché dun proxy.",
@@ -516,7 +516,7 @@
"newpassword": "Contrasinal novo:",
"retypenew": "Insira outra vez o novo contrasinal:",
"resetpass_submit": "Establecer o contrasinal e acceder ao sistema",
- "changepassword-success": "O seu contrasinal modificouse correctamente!",
+ "changepassword-success": "O seu contrasinal foi modificado!",
"changepassword-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
"botpasswords": "Contrasinais de Bot",
"botpasswords-summary": "Os
contrasinais de Bot permiten acceder a unha conta de usuario por medio da API sen usar as crecenciais de acceso da conta principal. Os dereitos de usuario dispoñibles cando se accede ao sistema cun contrasinal de bot poden estar restrinxidos.",
@@ -539,9 +539,9 @@
"botpasswords-insert-failed": "Erro ao engadir o nome de bot \"$1\". Revise se xa foi engadido previamente.",
"botpasswords-update-failed": "Erro ao actualizar o nome de bot \"$1\". Revise se foi borrado.",
"botpasswords-created-title": "Contrasinal de bot creado",
- "botpasswords-created-body": "O contrasinal de bot \"$1\" creouse con éxito.",
+ "botpasswords-created-body": "Creouse o contrasinal de bot \"$1\".",
"botpasswords-updated-title": "Contrasinal de bot actualizado",
- "botpasswords-updated-body": "O contrasinal de bot \"$1\" actualizouse con éxito.",
+ "botpasswords-updated-body": "O contrasinal de bot \"$1\" foi actualizado.",
"botpasswords-deleted-title": "Contrasinal de bot borrado",
"botpasswords-deleted-body": "O contrasinal de bot \"$1\" foi borrado.",
"botpasswords-newpassword": "O novo contrasinal para acceder con strong>$1 é
$2 .
Por favor, rexistra isto para referencia futura. ",
@@ -837,9 +837,9 @@
"revdelete-unsuppress": "Retirar as restricións sobre as revisións restauradas",
"revdelete-log": "Motivo:",
"revdelete-submit": "Aplicar {{PLURAL:$1|á revisión seleccionada|ás revisións seleccionadas}}",
- "revdelete-success": "'''Actualizouse sen problemas a visibilidade da revisión.'''",
+ "revdelete-success": "Actualizouse a visibilidade da revisión.",
"revdelete-failure": "'''Non se puido actualizar a visibilidade da revisión:'''\n$1",
- "logdelete-success": "'''Configurouse sen problemas a visibilidade do rexistro.'''",
+ "logdelete-success": "Configurouse a visibilidade do rexistro.",
"logdelete-failure": "'''A visibilidade do rexistro non pode ser fixada:'''\n$1",
"revdel-restore": "cambiar a visibilidade",
"pagehist": "Historial da páxina",
@@ -1082,7 +1082,7 @@
"userrights-changeable-col": "Os grupos que pode cambiar",
"userrights-unchangeable-col": "Os grupos que non pode cambiar",
"userrights-conflict": "Hai un conflito na modificación dos dereitos de usuario! Por favor, revÃseo e confirme os seus cambios.",
- "userrights-removed-self": "Retirou correctamente os seus propios dereitos. Polo tanto, xa non ten acceso a esta páxina.",
+ "userrights-removed-self": "Retirou os seus propios dereitos. Polo tanto, xa non ten acceso a esta páxina.",
"group": "Grupo:",
"group-user": "Usuarios",
"group-autoconfirmed": "Usuarios autoconfirmados",
@@ -1500,7 +1500,7 @@
"uploadstash-summary": "Esta páxina proporciona acceso a ficheiros que xa están cargados (ou en proceso de carga), pero que aÃnda non están publicados no wiki. Estes ficheiros non son visibles para ninguén, agás para o usuario que os cargou.",
"uploadstash-clear": "Borrar os ficheros agochados",
"uploadstash-nofiles": "Non ten ningún ficheiro agochado.",
- "uploadstash-badtoken": "A acción non se puido completar, seica porque caducou a información de acceso. Inténteo de novo.",
+ "uploadstash-badtoken": "A acción fallou, probablemente porque caducou a información de acceso. Por favor, inténteo de novo.",
"uploadstash-errclear": "Fallou o borrado de ficheiros.",
"uploadstash-refresh": "Actualizar a lista de ficheiros",
"invalid-chunk-offset": "Desprazamento inválido do fragmento",
@@ -3243,7 +3243,7 @@
"tags-delete-not-allowed": "As etiquetas definidas por unha extensión non se poden borrar, agás que a extensión especÃfica o permita.",
"tags-delete-not-found": "A páxina \"$1\" non existe.",
"tags-delete-too-many-uses": "A etiqueta \"$1\" aplÃcase a máis de $2 {{PLURAL:$2|revisión|revisións}}; isto significa que non se pode borrar.",
- "tags-delete-warnings-after-delete": "A etiqueta \"$1\" borrouse correctamente; con todo, {{PLURAL:$2|atopouse o seguinte erro|atopáronse os seguintes erros}}:",
+ "tags-delete-warnings-after-delete": "A etiqueta \"$1\" borrouse; con todo, {{PLURAL:$2|atopouse o seguinte aviso|atopáronse os seguintes avisos}}:",
"tags-activate-title": "Activar unha etiqueta",
"tags-activate-question": "Está a piques de activar a etiqueta\"$1\".",
"tags-activate-reason": "Motivo:",
@@ -3282,7 +3282,7 @@
"tags-edit-reason": "Motivo:",
"tags-edit-revision-submit": "Aplicar os cambios a {{PLURAL:$1|esta revisión|$1 revisións}}",
"tags-edit-logentry-submit": "Aplicar os cambios a {{PLURAL:$1|esta entrada do rexistro|$1 entradas do rexistro}}",
- "tags-edit-success": "Os cambios aplicáronse con éxito.",
+ "tags-edit-success": "Aplicáronse os cambios.",
"tags-edit-failure": "Non se puideron aplicar os cambios:\n$1",
"tags-edit-nooldid-title": "Revisión inválida",
"tags-edit-nooldid-text": "Non indicou a revisión sobre a que realizar esta función, ou a revisión especificada non existe.",
diff --git a/languages/i18n/gom-deva.json b/languages/i18n/gom-deva.json
index eb82d6f5c6..b48844daa4 100644
--- a/languages/i18n/gom-deva.json
+++ b/languages/i18n/gom-deva.json
@@ -11,7 +11,8 @@
"Supriya kankumbikar",
"Vaishali Parab",
"The Discoverer",
- "Cliffa fernandes"
+ "Cliffa fernandes",
+ "Rxy"
]
},
"tog-hideminor": "हालà¥à¤à¤ बदल à¤à¥à¤²à¥à¤²à¥à¤¯à¤¾à¤à¤¤à¤²à¥ बारà¥à¤ सà¤à¤ªà¤¾à¤¦à¤¨ लिपय",
@@ -24,7 +25,7 @@
"tog-enotifwatchlistpages": "मà¥à¤¹à¤à¥à¤¯à¤¾ सादà¥à¤°à¤µà¤³à¥à¤°à¥à¤à¤¤à¤²à¥à¤ पान वा फायल बदलà¥à¤²à¥ à¤à¤¾à¤²à¥à¤¯à¤¾à¤° मà¥à¤¹à¤¾à¤à¤¾ à¤à¤®à¥à¤² à¤à¤°à¤¾à¤¤",
"tog-shownumberswatching": "धà¥à¤¯à¤¾à¤¨ दवरपॠवाà¤à¤à¤¡à¥à¤¯à¤¾à¤à¤à¥ सà¤à¤à¥à¤¯à¤¾ दाà¤à¤¯",
"tog-oldsig": "सदà¥à¤¯à¤¾à¤à¥ निशाणà¥",
- "tog-uselivepreview": "लायव पà¥à¤°à¥à¤µà¤¨à¤¿à¤¯à¤¾à¤³à¤¾à¤à¥ à¤à¤ªà¥à¤ à¤à¤°",
+ "tog-uselivepreview": "लायव पà¥à¤°à¥à¤µà¤¨à¤¿à¤¯à¤¾à¤³à¤¾à¤à¥ वापर",
"tog-watchlisthideown": "सादà¥à¤°à¤µà¤³à¥à¤°à¥à¤¤à¤²à¥à¤ मà¥à¤¹à¤à¥ सà¤à¤ªà¤¾à¤¦à¤¨ लिपय",
"tog-watchlisthidebots": "धà¥à¤¯à¤¾à¤¨à¤¸à¥à¤à¥à¤¤à¤²à¥ रà¥à¤¬à¥à¤ सà¤à¤ªà¤¾à¤¦à¤¨ लिपय",
"tog-watchlisthideminor": "सादà¥à¤°à¤µà¤³à¥à¤°à¥à¤¤à¤²à¥ लà¥à¤¹à¤¾à¤¨ सà¤à¤ªà¤¾à¤¦à¤¨ लिपय",
@@ -118,7 +119,7 @@
"and": " à¤à¤¨à¥à¤",
"qbfind": "सà¥à¤¦à¤¾à¤¤",
"qbbrowse": "बà¥à¤°à¤¾à¤à¤",
- "qbedit": "सà¤à¤ªà¤¾à¤¦à¤¨",
+ "qbedit": "बदल",
"qbpageoptions": "हà¥à¤ पान",
"qbmyoptions": "मà¥à¤¹à¤à¥ पानाà¤",
"faq": "परत परत विà¤à¤¾à¤°à¤¿à¤²à¥à¤²à¥ पà¥à¤°à¤¸à¥à¤¨",
@@ -142,7 +143,7 @@
"print": "à¤à¤¾à¤ª",
"view": "पळय",
"view-foreign": " $1 à¤à¥à¤° पळयात",
- "edit": "सà¤à¤ªà¤¾à¤¦à¤¨",
+ "edit": "बदल",
"edit-local": "थळावà¥à¤¯à¤¾ सà¤à¤ªà¤¾à¤¦à¤¨à¤¾à¤à¥à¤ वरà¥à¤£à¤¨",
"create": "निरà¥à¤®à¤¾à¤£ à¤à¤°",
"create-local": "थळावॠवरà¥à¤£à¤¨ à¤à¥à¤¡à¤¾à¤¤",
@@ -161,7 +162,7 @@
"newpage": "नवà¥à¤ पान",
"talkpage": "हà¥à¤¯à¤¾ पानाà¤à¥à¤° à¤à¤°à¥à¤à¤¾ à¤à¤°à¤¾à¤¤",
"talkpagelinktext": "à¤à¤°à¥à¤à¤¾",
- "specialpage": "à¤à¤¾à¤¶à¥à¤²à¥à¤ पान",
+ "specialpage": "विशà¥à¤¶ पान",
"personaltools": "à¤à¤¾à¤à¤à¥ साधनाà¤",
"articlepage": "मà¤à¤à¥à¤° पान पळयात",
"talk": "à¤à¤¾à¤¸à¤¾à¤à¤¾à¤¸",
@@ -179,7 +180,7 @@
"redirectedfrom": "($1 सà¥à¤¨ पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤¦à¥à¤¶à¤¿à¤¤)",
"redirectpagesub": "पान परतà¥à¤¨ निरà¥à¤¦à¥à¤¶à¥à¤¤ à¤à¤°à¤à¥à¤",
"redirectto": "हाà¤à¤à¤¾à¤ पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤¦à¥à¤¶à¤¿à¤¤:",
- "lastmodifiedat": " हà¥à¤¯à¤¾ पानाà¤à¤¤ निमाणॠबदल,$1 वà¥à¤° $2 वà¥à¤³à¤¾à¤° à¤à¥à¤²à¥à¤²à¥",
+ "lastmodifiedat": "हà¥à¤¯à¤¾ पानाà¤à¤¤ निमाणॠबदल,$1 वà¥à¤° $2 वà¥à¤³à¤¾à¤° à¤à¥à¤²à¥à¤²à¥",
"protectedpage": "राà¤à¥à¤¨ दवरिलà¥à¤²à¥à¤ पान",
"jumpto": "हà¥à¤ªà¥à¤¨ वà¤à¤¾à¤¤:",
"jumptonavigation": "दिशा-नियà¤à¤¤à¥à¤°à¤£",
@@ -205,8 +206,8 @@
"ok": "बरà¥à¤",
"retrievedfrom": "\"$1\" à¤à¥ à¤à¤¡à¤²à¥à¤¯à¤¾à¤¨ परतà¥à¤¨ मà¥à¤³à¤¯à¤²à¥à¤",
"youhavenewmessagesmulti": "$1 à¤à¥à¤° तà¥à¤à¤¾ नवॠसà¤à¤¦à¥à¤¶ à¤à¤¸à¤¾",
- "editsection": "सà¤à¤ªà¤¾à¤¦à¤¨",
- "editold": "सà¤à¤ªà¤¾à¤¦à¤¨",
+ "editsection": "बदल",
+ "editold": "बदल",
"viewsourceold": "à¤à¤à¤® पळà¥à¤¯à¤¾à¤¤",
"editlink": "बदल",
"viewsourcelink": "à¤à¤à¤® पळयात",
@@ -232,7 +233,7 @@
"nstab-main": "पान",
"nstab-user": "वापरपॠपान",
"nstab-media": "माधà¥à¤¯à¤®à¤¾à¤à¥à¤ पान",
- "nstab-special": "à¤à¤¾à¤¶à¥à¤²à¥à¤ पान",
+ "nstab-special": "विशà¥à¤¶ पान",
"nstab-project": "पà¥à¤°à¤à¤²à¥à¤ªà¤¾à¤à¥à¤ पान",
"nstab-image": "फायल",
"nstab-mediawiki": "सà¤à¤¦à¥à¤¶",
@@ -240,7 +241,7 @@
"nstab-help": "à¤à¤¦à¤¾à¤°à¤¾à¤à¥à¤ पान",
"nstab-category": "वरà¥à¤",
"nosuchaction": "à¤
सलॠतरà¥à¤à¥ à¤à¤¾à¤°à¥à¤¯ ना",
- "nosuchspecialpage": "à¤
सलॠà¤à¤¾à¤à¤¯à¤ à¤à¤¾à¤¶à¥à¤²à¥à¤ पान ना",
+ "nosuchspecialpage": "à¤
सलॠà¤à¤¾à¤à¤¯à¤ विशà¥à¤¶ पान ना",
"error": "à¤à¥à¤",
"databaseerror": "डà¥
à¤à¤¾à¤¬à¥
ठतà¥à¤°à¥à¤à¥",
"databaseerror-textcl": "डà¥
à¤à¤¾à¤¬à¥à¤ विरà¥à¤§ तà¥à¤°à¥à¤à¥ à¤à¤¯à¤¿à¤²à¥à¤²à¥ à¤à¤¸à¤¾",
@@ -373,7 +374,7 @@
"image_tip": "à¤
à¤à¤¤: सà¥à¤¥à¤¾à¤ªà¥à¤¤ फायल",
"media_tip": "फायलà¥à¤à¥ à¤à¥à¤¡à¤£à¥",
"sig_tip": "वà¥à¤³-à¤à¤¾à¤ª सयत तà¥à¤®à¤à¥ निशाणà¥",
- "hr_tip": "à¤à¤¡à¤µà¥ वळ (à¤à¤£à¥ à¤à¤ªà¥à¤ à¤à¤°à¤à¥)",
+ "hr_tip": "à¤à¤¡à¤µà¥ वळ (à¤à¤£à¥ वापरà¤à¥)",
"summary": "à¤à¤ªà¤°à¥à¤¸:",
"subject": "विशय/माथाळà¥",
"minoredit": "हà¥à¤ दाà¤à¤à¥à¤ सà¤à¤ªà¤¾à¤¦à¤¨",
@@ -486,7 +487,7 @@
"prefs-watchlist": "सादà¥à¤°à¤µà¤³à¥à¤°à¥",
"youremail": "à¤à¤®à¥à¤²",
"yourrealname": "à¤à¤°à¥à¤ नाà¤à¤µà¤",
- "right-writeapi": "बरà¥à¤µà¤ªà¤¾à¤à¥ API à¤à¥ à¤à¤ªà¥à¤ à¤à¤°à¤¾à¤¤",
+ "right-writeapi": "बरà¥à¤µà¤ªà¤¾à¤à¥ API वापरात",
"newuserlogpage": "वापरपॠरà¥à¤à¤¨à¥à¤à¥ वळà¥à¤°à¥",
"action-edit": "हà¥à¤ पान सà¤à¤ªà¤¾à¤¦à¥à¤¤ à¤à¤°",
"nchanges": "$1 {{PLURAL:$1|बदल|बदल}}",
@@ -500,7 +501,7 @@
"recentchanges-label-bot": "हà¥à¤ सà¤à¤ªà¤¾à¤¦à¤¨ रà¥à¤¬à¥à¤à¤¾à¤¨ à¤à¥à¤²à¤¾.",
"recentchanges-label-unpatrolled": "हà¥à¤ सà¤à¤ªà¤¾à¤¦à¤¨ à¤à¤à¥à¤¨ तपासà¥à¤à¤ ना",
"recentchanges-label-plusminus": "हà¥à¤¯à¤¾ पानाà¤à¥ à¤à¤à¤¾à¤° à¤à¤¤à¤²à¥à¤¯à¤¾ बाà¤à¤à¥à¤¸à¤¨ बदललà¥",
- "recentchanges-legend-heading": "'''à¤à¥à¤à¤à¥:'''",
+ "recentchanges-legend-heading": "
à¤à¥à¤à¤à¥: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages| नवà¥à¤¯à¤¾ पानाà¤à¤à¥ सà¥à¤à¥]] पळयात)",
"rcnotefrom": "$2 पासà¥à¤¨ à¤à¥à¤²à¥à¤²à¥ बदल सà¤à¤¯à¤² दिलà¥à¤¯à¤¾à¤¤ ($1 मà¥à¤°à¥à¤¨ दाà¤à¤¯à¤²à¥à¤¯à¤¾à¤¤)",
"rclistfrom": "$3 $2 साà¤à¥à¤¨ नवà¥à¤ बदल दाà¤à¤¯à¤¾à¤¤",
@@ -571,7 +572,7 @@
"statistics": "सà¤à¤à¥à¤¯à¤¾à¤¶à¤¾à¤¸à¥à¤¤à¥à¤°",
"statistics-pages": "पान:",
"statistics-files": "फायल à¤
पलà¥à¤¡ à¤à¤°à¤¾à¤¤",
- "brokenredirects-edit": "सà¤à¤ªà¤¾à¤¦à¤¨",
+ "brokenredirects-edit": "बदल",
"brokenredirects-delete": "à¤à¤¾à¤¡à¥à¤¨ à¤à¤¡à¤¯à¤¾à¤¤",
"nbytes": "$1 {{PLURAL:$1|बायà¥à¤}}",
"nmembers": "$1 {{PLURAL:$1|वाà¤à¤à¤¡à¥}}",
@@ -617,7 +618,7 @@
"changecontentmodel-reason-label": "à¤à¤¾à¤°à¤£:",
"protectlogpage": "सà¥à¤°à¤à¥à¤·à¤¿à¤¤à¥à¤à¥à¤ सà¥à¤¤à¥à¤°",
"protectedarticle": "राà¤à¤¿à¤²à¥à¤²à¥\"[[$1]]\"",
- "restriction-edit": "सà¤à¤ªà¤¾à¤¦à¤¨",
+ "restriction-edit": "बदल",
"restriction-move": "दà¥à¤¸à¤°à¥à¤à¤¡à¥ वà¥à¤¹à¤°à¤¾à¤¤",
"restriction-create": "निरà¥à¤®à¤¾à¤£ à¤à¤°",
"undeletelink": "पळà¥à¤¯à¤¾à¤¤/परत हाडात",
@@ -628,7 +629,7 @@
"namespace_association": "सà¤à¤¬à¤à¤¦à¥à¤¤ नाà¤à¤µà¤¥à¥à¤³",
"tooltip-namespace_association": "à¤à¤°à¥à¤à¤¾ वा वà¥à¤à¤à¥à¤ नाà¤à¤µà¤¾à¤à¥à¤ सà¥à¤µà¤¾à¤¤à¥à¤ सà¤à¤¬à¤à¤¦à¥à¤¤ विशयाà¤à¥à¤¯à¤¾ नाà¤à¤µà¤¾à¤à¥ सà¥à¤µà¤¾à¤¤ à¤à¤¸à¥à¤ªà¤¾à¤µà¤¨ à¤à¥à¤µà¤ªà¤¾à¤à¤¾à¤¤à¥à¤° हà¥à¤¯à¤¾ बà¥à¤à¥à¤¸à¤¾à¤à¤¤ पळयात",
"blanknamespace": "(मà¥à¤à¥à¤²)",
- "contributions": "{{GENDER:$1|à¤à¤ªà¥à¤à¤à¤°à¥à¤¤à¥}} यà¥à¤à¤¦à¤¾à¤¨à¤¾à¤",
+ "contributions": "{{GENDER:$1|वापरपà¥}} यà¥à¤à¤¦à¤¾à¤¨à¤¾à¤",
"contributions-title": "$1 à¤à¤¾à¤¤à¥à¤° वापरपà¥à¤¯à¤¾à¤à¥à¤ यà¥à¤à¤¦à¤¾à¤¨à¤¾à¤",
"mycontris": "यà¥à¤à¤¦à¤¾à¤¨",
"uctop": "(हालà¥à¤à¥à¤)",
@@ -710,7 +711,7 @@
"tooltip-t-contributions": "हà¥à¤¯à¤¾ वापरपà¥à¤¯à¤¾à¤à¥ यà¥à¤à¤¦à¤¾à¤¨à¤¾à¤à¥ वळà¥à¤°à¥",
"tooltip-t-emailuser": "हà¥à¤¯à¤¾ à¤à¤ªà¥à¤à¤à¤°à¥à¤¤à¥à¤¯à¤¾à¤ à¤-मà¥à¤² धाडात",
"tooltip-t-upload": "फायलॠà¤
पलà¥à¤¡ à¤à¤°à¤¾à¤¤",
- "tooltip-t-specialpages": "सà¤à¤³à¥à¤¯à¤¾ à¤à¤¾à¤¶à¥à¤²à¥à¤¯à¤¾ पानाà¤à¤à¥ वळà¥à¤°à¥",
+ "tooltip-t-specialpages": "सà¤à¤³à¥à¤¯à¤¾ विशà¥à¤¶ पानाà¤à¤à¥ वळà¥à¤°à¥",
"tooltip-t-print": "हà¥à¤¯à¤¾ पानाà¤à¥ à¤à¤¾à¤ªà¤ªà¤¾à¤¯à¥à¤à¥à¤¯ à¤à¤µà¥à¤¤à¥à¤¤à¥",
"tooltip-t-permalink": "हà¥à¤¯à¤¾ पानाà¤à¥à¤¯à¤¾ हà¥à¤¯à¤¾ पà¥à¤¨à¤°à¥à¤¨à¤¿à¤¯à¤¾à¤³à¤¾à¤à¤¡à¥ सदाà¤à¤à¤¾à¤³ à¤à¥à¤¡à¤£à¥",
"tooltip-ca-nstab-main": "मà¤à¤à¥à¤° पान पळà¥à¤¯à¤¾à¤¤",
@@ -761,7 +762,7 @@
"watchlisttools-view": "पà¥à¤°à¤¸à¥à¤¤à¥à¤¤ बदल पळयात.",
"watchlisttools-edit": "सादà¥à¤°à¤µà¤³à¥à¤°à¥ पळय à¤à¤¨à¥ सà¤à¤ªà¤¾à¤¦à¥à¤¤ à¤à¤°à¤¾à¤¤",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|à¤à¤²à¤¯à¤¾à¤¤]])",
- "specialpages": "à¤à¤¾à¤¶à¥à¤²à¥à¤ पानाà¤",
+ "specialpages": "विशà¥à¤¶ पानाà¤",
"tag-filter": "[[Special:Tags|à¤à¥à¤°à¥à¤µà¥à¤à¥à¤]] à¤à¤¾à¤³à¤£à¥:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|à¤à¥à¤°à¤µà¥à¤à¥à¤|à¤à¥à¤°à¤µà¥à¤à¥à¤à¥}}]]: $2)",
"htmlform-title-not-exists": "$1 à¤
सà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤à¤¤ ना.",
diff --git a/languages/i18n/gom-latn.json b/languages/i18n/gom-latn.json
index 28125ae321..5343a48124 100644
--- a/languages/i18n/gom-latn.json
+++ b/languages/i18n/gom-latn.json
@@ -157,7 +157,7 @@
"newpage": "Novem pan",
"talkpage": "Hea panachem bhasabhas kor",
"talkpagelinktext": "Bhasabhas",
- "specialpage": "Khaxhel pan",
+ "specialpage": "Vixex pan",
"personaltools": "Khasgi avtam",
"articlepage": "Vixoi sombondhi pan poloi",
"talk": "Bhasabhas",
@@ -199,7 +199,7 @@
"privacy": "Gupitaiechem dhoronn",
"privacypage": "Project:Gupitachem dhoronn",
"badaccess-group0": "Tumi tillson kel'lem karya korunk tumkam permissanv na.",
- "badaccess-groups": "Tumi tillson kel'lem kary mat {{PLURAL:$2|the group|one of the groups}}: $1 -ak permissanv asa.",
+ "badaccess-groups": "Tumi tillson kel'lem karya mat {{PLURAL:$2|hea zomeache|hantuntle eke zomeache}} vaporpeank porvangi asa: $1.",
"versionrequired": "MediaWikichem $1 version zai",
"versionrequiredtext": "Hem pan vaprunk MediaWikichem $1 version zai.\n[[Special:Version|version page]] pan poloea.",
"ok": "Zait",
@@ -233,7 +233,7 @@
"nstab-main": "Pan",
"nstab-user": "Vapuddpeachem pan",
"nstab-media": "Madheomachem pan",
- "nstab-special": "Khaxelem pan",
+ "nstab-special": "Vixex pan",
"nstab-project": "Prokolpache pan",
"nstab-image": "Fail",
"nstab-mediawiki": "Sondex",
@@ -242,7 +242,7 @@
"nstab-category": "Vorg",
"mainpage-nstab": "Mukhel pan",
"nosuchaction": "Oslem torechem karya nam",
- "nosuchspecialpage": "Oslem kaich khaxellem pan na",
+ "nosuchspecialpage": "Oslem kaich vixex pan na",
"error": "Chuk",
"databaseerror": "Totv-kox chuk",
"databaseerror-textcl": "Totv-kox (database) sodtana chuk ghodli",
@@ -408,7 +408,7 @@
"template-semiprotected": "(ordhem rakhun dovorlelem)",
"hiddencategories": "Hem pan {{PLURAL:$1|1 lipoilelea vorgacho vangddi|$1 lipoileleam vorgancho vangddi}}:",
"permissionserrorstext-withaction": "$2, hem korpak tuka porvangi na, {{PLURAL:$1|hea karnnak lagon|hea karnnank lagun}}:",
- "recreate-moveddeleted-warn": "
Xittkavnni: Tum ek pan porot rochtai jem fattim kadun udoilelem.\n\nPanacho sudar korop sarkem zalear dhean di.\nPan vogllavpachem ani sotr halovpachem, sovloti khatir hangasor dilelem asa:",
+ "recreate-moveddeleted-warn": "Xittkavnni: Tum ek pan porot rochtai jem fattim kadun udoilelem.\n\nPanacho sudar korop sarkem zalear dhean di.\nPan kadoupachem ani halovpachem sotr, sovloti khatir hangasor dilelem asa:",
"moveddeleted-notice": "Hem pan kadun udoilelem asa.\nPanachea kadun udounechi ani hallovnechi sotr sondorba khatir sokoil dilea.",
"content-model-wikitext": "wikimozkur",
"content-model-text": "Sado mozkur",
@@ -493,7 +493,7 @@
"prefs-help-email": "Email potto sokticho na, pun tum gupitutor visroxi zalear gupitutor punorsthapon korunk email pottechi goroz podta.",
"prefs-help-email-others": "Tujean dusreank tujea vapurpeacho panar vo bhasabhasache panar aslele eke email zodde vorvim tuje xim sompork korunk diunk zata.\nDusre tuje xim sompork kortat tednam tuzo email potto tankam kollchenam.",
"group-all": "(soglle)",
- "right-writeapi": "Borovpeache API-cho upeog",
+ "right-writeapi": "Borovpeache API-cho vapor",
"newuserlogpage": "Vapurpi rochnnechem sotr",
"action-edit": "hem pan sudar",
"nchanges": "$1 {{PLURAL:$1|bodlop|bodlopam}}",
@@ -629,7 +629,7 @@
"delete-legend": "Kadun udoi",
"actioncomplete": "Karvai sompurnn",
"actionfailed": "Karvai oiesiesvi",
- "dellogpage": "Vogllaoneche sotr",
+ "dellogpage": "Kadun udouneche sotr",
"deleteotherreason": "Dusrem/aniki karon:",
"rollbacklink": "kovoll",
"rollbacklinkcount": "$1 {{PLURAL:$1|bodol|bodlopam}} kovoll",
@@ -737,7 +737,7 @@
"tooltip-t-contributions": "{{GENDER:$1|Hea vapuddpeachea}} yogdanachi suchi",
"tooltip-t-emailuser": "{{GENDER:$1|Hea vapuddpeak}} email patthoi",
"tooltip-t-upload": "Faili upload kor",
- "tooltip-t-specialpages": "Sogllea khaxelim pananchi volleri",
+ "tooltip-t-specialpages": "Sogllea vixex pananchi volleri",
"tooltip-t-print": "Hea panachem chap'pakyogya avrutti",
"tooltip-t-permalink": "Hea panache hea uzollnnek togpi zoddni",
"tooltip-ca-nstab-main": "Mozkur pan polloi",
@@ -790,7 +790,7 @@
"watchlisttools-raw": "Sadurvollerichi mull-an bodol kor",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|uloi]])",
"duplicate-defaultsort": "'''Chotrai:''' Falta anukraman mukhel ''$2'' rodd korta adhlem falta anukraman mukhel ''$1'', haka.",
- "specialpages": "Khaxelim Panam",
+ "specialpages": "Vixex panam",
"external_image_whitelist": " #Hi voll asa toxich dovor\n#Khala sodpache sache (''regular expressions'') ghal (fokot // modem voita poi tem bhag)\n#Hanche borobor bhaile zodlele murt comparar kel'le zatele\n#Mell khatat tim murt koxeo distele, na zalear fokot mortek ek zodd distele\n#Jeo voll #-an suru zatele tem vivek mhunn manlele zatele\n#Hanga vhodle and dhakte okxora modem forok podona\n\n#Soglle sodpache sache hea volla voir ghal. Hi voll asa toxich dovor ",
"tag-filter": "[[Special:Tags|Kurvechit]] challni:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2)",
diff --git a/languages/i18n/gsw.json b/languages/i18n/gsw.json
index 9e06079064..77cfb9e892 100644
--- a/languages/i18n/gsw.json
+++ b/languages/i18n/gsw.json
@@ -1188,7 +1188,7 @@
"recentchanges-label-bot": "Die Bearbeitig isch dur e Bott uusgfiert wore",
"recentchanges-label-unpatrolled": "Die Bearbeitig isch nonig vun eme Fäldhieter aagluegt wore",
"recentchanges-label-plusminus": "Di gänderet SytegreÃi (Aazahl in Byte)",
- "recentchanges-legend-heading": "'''Legänd:'''",
+ "recentchanges-legend-heading": "Legänd: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lueg au d [[Special:NewPages|Lischt vu neie Syte]])",
"rcnotefrom": "Azeigt {{PLURAL:$5|isch d Ãnderig|sy maximal $1 Ãnderige}} syt $3, $4 .",
"rclistfrom": "Nume Ãnderige syt $3, $2 Uhr zeige.",
diff --git a/languages/i18n/gu.json b/languages/i18n/gu.json
index 8179211d1a..35bdcc0e72 100644
--- a/languages/i18n/gu.json
+++ b/languages/i18n/gu.json
@@ -1098,7 +1098,7 @@
"recentchanges-label-bot": "ઠફà«àª°àª«àª¾àª° બà«àª દà«àªµàª¾àª°àª¾ àªàª°àª¾àª¯à« àªà«",
"recentchanges-label-unpatrolled": "ઠફà«àª°àª«àª¾àª° હàªà« àªàªàª¾àª¸àª¾àª¯à« નથà«",
"recentchanges-label-plusminus": "પાનાનà«àª àªàª¦ àªàªªà«àª²àª¾ àª
àªàªà« àªà«àªàª²àª¾àª બાàªàªà«àª¸ àªà«àªàª²à«àª બદલà«àª¯à« àªà«.",
- "recentchanges-legend-heading": "'''àªàª³:'''",
+ "recentchanges-legend-heading": "àªàª³: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|નવા પાનાàªàª¨à« યાદà«]] પણ àªà«àª)",
"rcnotefrom": "નà«àªà« $2 થૠફà«àª°àª«àª¾àª°à« દરà«àª¶àª¾àªµà«àª² àªà« ($1 સà«àª§à« દરà«àª¶àª¾àªµàª²à« àªà«).",
"rclistfrom": "$3 $2 બાદ થયà«àª²àª¾ નવા ફà«àª°àª«àª¾àª°à« બતાવà«",
diff --git a/languages/i18n/he.json b/languages/i18n/he.json
index 4e6e4535b7..49605f4faa 100644
--- a/languages/i18n/he.json
+++ b/languages/i18n/he.json
@@ -174,6 +174,7 @@
"moredotdotdot": "×¢××â¦",
"morenotlisted": "רש××× ×× ××× × ××××.",
"mypage": "××£ ×שת×ש",
+ "anonuserpage": "×שת×ש ×× ××××¢",
"mytalk": "ש×××",
"anontalk": "ש×××",
"navigation": "× ××××",
@@ -474,7 +475,7 @@
"nocookieslogin": "{{SITENAME}} ×שת×ש ××¢××××ת ××× ×××× ×ס ×שת×ש×× ××ער×ת.\n××פ××¤× ×©××× ××¢××××ת ××××××ת.\n×× × ×פע××× ×××ª× ×××ש ×× ×¡× ×©××.",
"nocookiesfornew": "×ש××× ××שת×ש ×× × ×צר, ××××× ×©×× ××××× × ××××× ×ת ×ק×ר×.\n×××× ×©××¢××××ת ××פע××ת ××פ××¤× ×©×××, ××¢×× ×××ש ××£ ×× ×× ×¡× ×©××.",
"noname": "×× ××× ×¡×ª ×©× ×שת×ש תק××",
- "loginsuccesstitle": "××× ××¡× ××ש××× ××צ×××",
+ "loginsuccesstitle": "× ×× ×¡×ª ××ש×××",
"loginsuccess": "'''× ×× ×¡×ª ×{{grammar:ת××××ת|{{SITENAME}}}} ××©× \"$1\".'''",
"nosuchuser": "××× ×שת×ש ××©× \"$1\".\n×× × ×××× ×©××××ת × ××× (×××× ××ת××ת ר×ש××ת ×ק×× ×ת), ×× [[Special:UserLogin/signup|×¦×¨× ×ש××× ××ש]].",
"nosuchusershort": "××× ×שת×ש ××©× \"$1\".\n×× × ×××× ×©××××ת × ×××.",
@@ -510,7 +511,7 @@
"createaccount-title": "×צ×רת ×ש××× ×{{grammar:ת××××ת|{{SITENAME}}}}",
"createaccount-text": "××ש×× ×צר ×ש××× ××©× $2 ×{{grammar:ת××××ת|{{SITENAME}}}} ($4), ××ס×ס×× ×××× ×ת ×©× ××ש××× ××× \"$3\". ×¢×××× ××××× ×¡ ×××©× ×ת ×¢×ש×× ×ת ×ס×ס××.\n\n××פשר×ת×× ××תע×× ×××××¢× ××, ×× ××ש××× × ×צר ×××¢×ת.",
"login-throttled": "×××¦×¢×ª× ×××ר×× × × ×ס××× ×ת ר××× ××× ××××× ×¡ ××ש××× ××.\n×× × ××ת×× × $1 ××¤× × ×©×ª× ×¡× ×©××.",
- "login-abort-generic": "××× ××¡× ××ש××× ×× ×צ×××× - ××× ××פסק×",
+ "login-abort-generic": "×× ××¡×ª× ××ש××× ×× ×צ×××× - ××× ××פסק×",
"login-migrated-generic": "×ש××× ××שת×ש ש×× ×××¢×ר, ××©× ××שת×ש ש×× ××ר ×× ×§××× ××תר ×××§× ××.",
"loginlanguagelabel": "שפ×: $1",
"suspicious-userlogout": "××§×©×ª× ×צ×ת ×××ש××× × ×××ª× ××××× ×©× ×¨×× ×©××× × ×©××× ×¢×Ö¾××× ×פ××¤× ×©××ר ×× ×©×¨×ª פר××§×¡× ×¢× ×××ר×× ×××××.",
@@ -530,7 +531,7 @@
"newpassword": "ס×ס×× ××ש×:",
"retypenew": "×××¨× ×¢× ×ס×ס×× ×××ש×:",
"resetpass_submit": "×××רת ×ס×ס×× ××× ××¡× ××ש×××",
- "changepassword-success": "ס×ס××ª× ×©×× ×ª× ××צ×××!",
+ "changepassword-success": "ס×ס××ª× ×©×× ×ª×!",
"changepassword-throttled": "×××¦×¢×ª× ×××ר×× × × ×ס××× ×ת ר××× ××× ××××× ×¡ ××ש××× ××.\n×× × ××ת×× × $1 ××¤× × ×©×ª× ×¡× ×©××.",
"botpasswords": "סס×××ת ×××",
"botpasswords-summary": "סס×××ת ××× ××פשר×ת ×× ××¡× ××ש××× ×שת×ש ×××צע×ת API, ××× ×©×××ש ×× ×ª×× × ××××××ת ×ר×ש××× ×©× ××ש×××. × ××ª× ×××××× ×ת ×רש××ת ××שת×ש ××××× ×ת ××שר × ×× ×¡×× ×¢× ×¡×¡×ת ×××.",
@@ -553,11 +554,11 @@
"botpasswords-insert-failed": "××ספת ×©× ×××× \"$1\" × ×ש××. ××× ××× ××ר × ×סף?",
"botpasswords-update-failed": "×× ××× ×פשר ××¢××× ×ת ×©× ×××× \"$1\". ××× ××× × ××ק?",
"botpasswords-created-title": "סס×ת ×××× × ×צר×",
- "botpasswords-created-body": "סס×ת ×××× \"$1\" × ××¦×¨× ××צ×××.",
+ "botpasswords-created-body": "סס×ת ×××× ×¢××ר ××× ××©× \"$1\" ×©× ××שת×ש \"$2\" × ×צר×.",
"botpasswords-updated-title": "סס×ת ×××× ×¢×××× ×",
- "botpasswords-updated-body": "סס×ת ×××× \"$1\" ×¢×××× × ××צ×××.",
+ "botpasswords-updated-body": "סס×ת ×××× ×¢××ר ××× ××©× \"$1\" ×©× ××שת×ש \"$2\" ×¢×××× ×.",
"botpasswords-deleted-title": "סס×ת ×××× × ××ק×",
- "botpasswords-deleted-body": "סס×ת ×××× \"$1\" × ××ק×.",
+ "botpasswords-deleted-body": "סס×ת ×××× ×¢××ר ××× ××©× \"$1\" ×©× ××שת×ש \"$2\" × ××ק×.",
"botpasswords-newpassword": "×סס×× ××××©× ××× ××¡× $1 ××× $2 . × × ×ש××ר ××××¢ ×× ×צ××¨× ×¢××× ×¢×ª×××. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider ××× × ××××.",
"botpasswords-restriction-failed": "×× ××¡× ×× × ×× ×¢× ××©× ×××××ת ×¢× ×¡×¡×××ת ×××.",
@@ -849,10 +850,10 @@
"revdelete-unsuppress": "×סרת ×××××ת ××רס××ת ××ש×××ר×ת",
"revdelete-log": "ס×××:",
"revdelete-submit": "××צ××¢ ×¢× {{PLURAL:$1|×××¨×¡× ×©× ××ר×|××רס××ת ×©× ××ר×}}",
- "revdelete-success": "'''××¦× ×סתרת ×××¨×¡× ×¢×××× ××צ×××.'''",
- "revdelete-failure": "'''×× × ××ª× ××× ××¢××× ×ת ××¦× ×סתרת ××רס×:'''\n$1",
- "logdelete-success": "'''×סתרת פע××ת ××××× ××ש××× ××צ×××.'''",
- "logdelete-failure": "'''×× × ××ª× ××× ××צע ×ת ×סתרת פע××ת ×××××:'''\n$1",
+ "revdelete-success": "××¦× ×צ×ת ×××¨×¡× ×¢××××.",
+ "revdelete-failure": "×× × ××ª× ××× ××¢××× ×ת ××¦× ×צ×ת ××רס×:\n$1",
+ "logdelete-success": "××¦× ×צ×ת פע××ת ××××× ×¢××××.",
+ "logdelete-failure": "×× × ××ª× ××× ××¢××× ×ת ××¦× ×צ×ת פע××ת ×××××:\n$1",
"revdel-restore": "ש×× ×× ××צ××",
"pagehist": "××ס××ר××ת ×××£",
"deletedhist": "××רס××ת ××××ק×ת",
@@ -1094,7 +1095,7 @@
"userrights-changeable-col": "ק××צ×ת ש××פשר×ת×× ××©× ×ת",
"userrights-unchangeable-col": "ק××צ×ת ש××× ××פשר×ת×× ××©× ×ת",
"userrights-conflict": "××ª× ×ש×ת ××× ×©×× ××× ×רש××ת ×שת×ש! ×× × ×××§× ×ת ×ש×× ×××× ×©××× ×××©×¨× ××ת×.",
- "userrights-removed-self": "×סרת ××צ××× ×ת ×רש××ת ××שת×ש ש××. ××× ××× ×× ×עת ×פשר×ת ××שת ×××£ ××.",
+ "userrights-removed-self": "×סרת ×ת ×רש××ת ××שת×ש ×©× ×¢×¦××. ××× ××× ×× ×עת ×פשר×ת ××שת ×××£ ××.",
"group": "ק××צ×:",
"group-user": "×שת×ש××",
"group-autoconfirmed": "×שת×ש×× ×ת×ק××",
@@ -1512,7 +1513,7 @@
"uploadstash-summary": "××£ ×× ××פשר ×××©× ×ק×צ×× ×©×××¢×× (×× × ×צ××× ×ת×××× ××¢×××), ×× ××¨× ×¤×רס×× ××תר ××××ק×. ק×צ×× ××× ××× × ×××××× ×××ש ×××× ××שת×ש ש××¢×× ××ת×.",
"uploadstash-clear": "×××קת ×ק×צ×× ×ס××ק",
"uploadstash-nofiles": "××× ××× ×§×צ×× ×ס××ק.",
- "uploadstash-badtoken": "××צ××¢ ×פע××× × ×ש×, ×××× ×××× ×¤×§×עת ת××§×¤× ×©× ×ס×××× ×ער××× ×©×××. × ×¡× ×©××.",
+ "uploadstash-badtoken": "××צ××¢ ×פע××× × ×ש×, ×××× ×××× ×¤×§×עת ת××§×¤× ×©× ×ס×××× ×ער××× ×©×××. × × ×× ×¡×ת ש××.",
"uploadstash-errclear": "×××קת ×ק×צ×× × ×ש××.",
"uploadstash-refresh": "×¨×¢× ×× ×¨×©××ת ×ק×צ××",
"invalid-chunk-offset": "×××¡× ××ש ×× ×ª×§××",
@@ -2024,6 +2025,7 @@
"changecontentmodel-title-label": "××תרת ×××£",
"changecontentmodel-model-label": "×××× ×ת××× ×××ש",
"changecontentmodel-reason-label": "ס×××:",
+ "changecontentmodel-submit": "ש×× ××",
"changecontentmodel-success-title": "×××× ×ת××× ×©×Ö¼× ×",
"changecontentmodel-success-text": "×××× ×ת××× ×©× [[:$1]] ש×Ö¼× ×.",
"changecontentmodel-cannot-convert": "×ת××× ×××£ [[:$1]] ××× × ×××× ××××ת ×××ר ×ס×× ×©× $2.",
@@ -3334,7 +3336,7 @@
"tags-delete-not-allowed": "ת×××ת ש×××××¨× ×¢×Ö¾××× ×ר××× ××× × × ××ª× ×ת ×××××§× ××× ×× ×× ××ר××× ×ת××¨× ××ת ××××××.",
"tags-delete-not-found": "×ת××ת \"$1\" ××× × ×§×××ת.",
"tags-delete-too-many-uses": "×ת××ת \"$1\" ××××ת ×¢× ××תר {{PLURAL:$2|×××¨×¡× ××ת|×Ö¾$2 ×רס××ת}}, ×××× ×× × ××ª× ××××ק ××ת×.",
- "tags-delete-warnings-after-delete": "×ת××ת \"$1\" × ×××§× ××צ×××, ××× {{PLURAL:$2|×תק××× ×××××¨× ××××|×תק××× ××××ר×ת ××××ת}}:",
+ "tags-delete-warnings-after-delete": "×ת××ת \"$1\" × ××ק×, ××× {{PLURAL:$2|×תק××× ×××××¨× ××××|×תק××× ××××ר×ת ××××ת}}:",
"tags-activate-title": "×פע×ת ת××ת",
"tags-activate-question": "××ª× ×¢××××× ××פע×× ×ת ×ת××ת \"$1\".",
"tags-activate-reason": "×ס×ר:",
@@ -3373,7 +3375,7 @@
"tags-edit-reason": "ס×××:",
"tags-edit-revision-submit": "×××ת ש×× ×××× {{PLURAL:$1|×××¨×¡× ×××ת|×Ö¾$1 ×רס××ת}}",
"tags-edit-logentry-submit": "×××ת ש×× ×××× {{PLURAL:$1|×רש××ת ××××× ×××ת|×Ö¾$1 רש××ת ×××××}}",
- "tags-edit-success": "×ש×× ×××× ××××× ××צ×××.",
+ "tags-edit-success": "×ש×× ×××× ×××××.",
"tags-edit-failure": "×××ת ×ש×× ×××× × ×ש××:\n$1",
"tags-edit-nooldid-title": "×רסת ×××¢× ××× × ×ª×§×× ×",
"tags-edit-nooldid-text": "×× ×©×× ×¦××× ×ª ש×× ××¨×¡× ×©×פע××× ×ª××צע ×¢×××, ×× ×©×××¨×¡× ×©×¦××× ×ª ××× × ×§×××ת.",
diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json
index cb49872f1c..ebe10c7025 100644
--- a/languages/i18n/hi.json
+++ b/languages/i18n/hi.json
@@ -211,6 +211,7 @@
"moredotdotdot": "à¤à¤°...",
"morenotlisted": "यह सà¥à¤à¥ पà¥à¤°à¥à¤£ नहà¥à¤ हà¥à¥¤",
"mypage": "पà¥à¤·à¥à¤ ",
+ "anonuserpage": "à¤
à¤à¥à¤à¤¾à¤¤ सदसà¥à¤¯",
"mytalk": "वारà¥à¤¤à¤¾",
"anontalk": "वारà¥à¤¤à¤¾",
"navigation": "à¤à¥à¤°à¤®à¤£",
@@ -583,6 +584,7 @@
"botpasswords-updated-body": "बà¥à¤ पासवरà¥à¤¡ \"$1\" सफलतापà¥à¤°à¥à¤µà¤ à¤
दà¥à¤¯à¤¤à¤¨ हà¥à¤à¥¤",
"botpasswords-deleted-title": "बà¥à¤ पासवरà¥à¤¡ हठà¤à¤¯à¤¾",
"botpasswords-deleted-body": "बà¥à¤ पासवरà¥à¤¡ \"$1\" हठà¤à¤¯à¤¾à¥¤",
+ "botpasswords-not-exist": "सदसà¥à¤¯ \"$1\" à¤à¥ à¤à¤ª बà¥à¤ पासवरà¥à¤¡ नहà¥à¤ हà¥, à¤à¤¿à¤¸à¤à¤¾ नाम \"$2\" हà¥à¥¤",
"resetpass_forbidden": "à¤à¥à¤à¤¶à¤¬à¥à¤¦ बदलॠनहà¥à¤ à¤à¤¾ सà¤à¤¤à¥",
"resetpass-no-info": "à¤à¤¸ पà¥à¤·à¥à¤ à¤à¤¾ सà¥à¤§à¥ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¤¨à¥ à¤à¥ लिठà¤à¤ªà¤à¥ लà¥à¤ à¤à¤¨ à¤à¤°à¤¨à¤¾ हà¥à¤à¤¾à¥¤",
"resetpass-submit-loggedin": "à¤à¥à¤à¤¶à¤¬à¥à¤¦ बदलà¥à¤",
@@ -1207,8 +1209,14 @@
"right-changetags": "à¤à¤®à¤¾ à¤à¤°à¥ à¤à¤° हà¤à¤¾à¤ सà¥à¤µà¤¤à¤à¤¤à¥à¤° [[Special:Tags|à¤à¥à¤]] वà¥à¤¯à¤à¥à¤¤à¤¿à¤à¤¤ à¤
वतरणà¥à¤ à¤à¤° लà¥à¤ पà¥à¤°à¤µà¤¿à¤à¥à¤¤à¤¿à¤¯à¥à¤ पर",
"grant-group-email": "à¤-मà¥à¤² à¤à¥à¤à¥à¤",
"grant-createaccount": "à¤à¤¾à¤¤à¤¾ बनाà¤à¤",
+ "grant-editmycssjs": "à¤
पनॠसदसà¥à¤¯ सà¥à¤à¤¸à¤à¤¸/à¤à¥à¤à¤¸ à¤à¥ सà¤à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥à¤",
+ "grant-editmyoptions": "à¤
पनॠसदसà¥à¤¯ पसà¤à¤¦ à¤à¥ सà¤à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥à¤",
"grant-editmywatchlist": "धà¥à¤¯à¤¾à¤¨à¤¸à¥à¤à¥ सà¤à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥à¤",
+ "grant-editpage": "बनॠपà¥à¤·à¥à¤ सà¤à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥à¤",
+ "grant-editprotected": "सà¥à¤°à¤à¥à¤·à¤¿à¤¤ पà¥à¤·à¥à¤ सà¤à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥à¤",
+ "grant-sendemail": "à¤
नà¥à¤¯ सदसà¥à¤¯à¥à¤ à¤à¥ à¤-मà¥à¤² à¤à¥à¤à¥à¤",
"grant-basic": "सामानà¥à¤¯ à¤
धिà¤à¤¾à¤°",
+ "grant-viewdeleted": "हà¤à¤¾à¤¯à¥ à¤à¤ फ़ाà¤à¤² व पà¥à¤·à¥à¤ दà¥à¤à¥à¤",
"grant-viewmywatchlist": "à¤
पनॠधà¥à¤¯à¤¾à¤¨à¤¸à¥à¤à¥ दà¥à¤à¥à¤",
"newuserlogpage": "सदसà¥à¤¯ à¤à¤¾à¤¤à¤¾ निरà¥à¤®à¤¾à¤£ लà¥à¤",
"newuserlogpagetext": "यह सदसà¥à¤¯ à¤à¤¾à¤¤à¥à¤ à¤à¥ निरà¥à¤®à¤¾à¤£ à¤à¤¾ लà¥à¤ हà¥à¥¤",
@@ -1219,6 +1227,7 @@
"action-createpage": "पà¥à¤·à¥à¤ बनानà¥",
"action-createtalk": "वारà¥à¤¤à¤¾ पà¥à¤·à¥à¤ बनानà¥",
"action-createaccount": "यह सदसà¥à¤¯ à¤à¤¾à¤¤à¤¾ à¤à¥à¤²à¤¨à¥",
+ "action-autocreateaccount": "सà¥à¤µà¤¤à¤ हॠबाहरॠसदसà¥à¤¯ à¤à¤¾à¤¤à¤¾ बनायà¥à¤",
"action-history": "à¤à¤¸ पà¥à¤·à¥à¤ à¤à¤¾ à¤à¤¤à¤¿à¤¹à¤¾à¤¸ दà¥à¤à¤¨à¥",
"action-minoredit": "à¤à¤¸ बदलाव à¤à¥ à¤à¥à¤à¤¾ बदलाव à¤à¤¿à¤¨à¥à¤¹à¤¿à¤¤ à¤à¤°à¤¨à¥",
"action-move": "à¤à¤¸ पà¥à¤·à¥à¤ à¤à¥ सà¥à¤¥à¤¾à¤¨à¤¾à¤à¤¤à¤°à¤¿à¤¤ à¤à¤°à¤¨à¥",
@@ -1272,7 +1281,7 @@
"recentchanges-label-bot": "यह सà¤à¤ªà¤¾à¤¦à¤¨ à¤à¤ बà¥à¤ दà¥à¤µà¤¾à¤°à¤¾ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ था",
"recentchanges-label-unpatrolled": "यह सà¤à¤ªà¤¾à¤¦à¤¨ à¤
à¤à¥ à¤à¤¾à¤à¤à¤¾ नहà¥à¤ à¤à¤¯à¤¾ हà¥",
"recentchanges-label-plusminus": "पà¥à¤·à¥à¤ à¤à¤à¤¾à¤° à¤à¤¸ बाà¤à¤ सà¤à¤à¥à¤¯à¤¾ सॠबदला",
- "recentchanges-legend-heading": "'''à¤à¥à¤à¤à¥:'''",
+ "recentchanges-legend-heading": "à¤à¥à¤à¤à¥: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नठपनà¥à¤¨à¥à¤ à¤à¥ सà¥à¤à¥]] à¤à¥ à¤à¥ दà¥à¤à¥à¤)",
"recentchanges-submit": "दिà¤à¤¾à¤à¤",
"rcnotefrom": "नà¥à¤à¥ $2 à¤à¥ बाद सॠ($1 तà¤) {{PLURAL:$5|हà¥à¤ बदलाव दरà¥à¤¶à¤¾à¤¯à¤¾ à¤à¤¯à¤¾ हà¥|हà¥à¤ बदलाव दरà¥à¤¶à¤¾à¤ à¤à¤¯à¥ हà¥à¤}}।",
@@ -1715,11 +1724,13 @@
"protectedpages-performer": "सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¥ वाला सदसà¥à¤¯",
"protectedpages-params": "सà¥à¤°à¤à¥à¤·à¤¾ पà¥à¤°à¤¾à¤à¤²",
"protectedpages-reason": "à¤à¤¾à¤°à¤£",
+ "protectedpages-submit": "पà¥à¤·à¥à¤ à¥à¤ à¤à¥ दिà¤à¤¾à¤",
"protectedpages-unknown-timestamp": "à¤
à¤à¥à¤à¤¾à¤¤",
"protectedpages-unknown-performer": "à¤
à¤à¥à¤à¤¾à¤¤ सदसà¥à¤¯",
"protectedtitles": "सà¥à¤°à¤à¥à¤·à¤¿à¤¤ शà¥à¤°à¥à¤·à¤",
"protectedtitles-summary": "यह पà¥à¤·à¥à¤ à¤à¤¨ पà¥à¤·à¥à¤ शà¥à¤°à¥à¤·à¤à¥à¤ à¤à¥ सà¥à¤à¥ दà¥à¤¤à¤¾ हॠà¤à¤¿à¤¨à¥à¤¹à¥à¤ à¤
à¤à¥ बनानॠसॠसà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥à¥¤ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ मà¥à¤à¥à¤¦à¤¾ पà¥à¤·à¥à¤ à¥à¤ à¤à¥ सà¥à¤à¥ दà¥à¤à¤¨à¥ à¤à¥ लिठ[[{{#special:ProtectedPages}}|{{int:protectedpages}}]] दà¥à¤à¥à¤à¥¤",
"protectedtitlesempty": "à¤à¤¨ नियमà¥à¤ दà¥à¤µà¤¾à¤°à¤¾ à¤à¥à¤ à¤à¥ शà¥à¤°à¥à¤·à¤ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ नहà¥à¤ हà¥à¤à¥¤",
+ "protectedtitles-submit": "शà¥à¤°à¥à¤·à¤à¥à¤ à¤à¥ दिà¤à¤¾à¤",
"listusers": "सदसà¥à¤¯à¤¸à¥à¤à¥",
"listusers-editsonly": "à¤à¥à¤µà¤² सà¤à¤ªà¤¾à¤¦à¤¨ à¤à¤° à¤à¥à¤à¥ सदसà¥à¤¯ दिà¤à¤¾à¤à¤",
"listusers-creationsort": "निरà¥à¤®à¤¾à¤£ तिथि à¤à¥ à¤à¤§à¤¾à¤° पर à¤à¥à¤°à¤®à¤¾à¤à¤à¤¨ à¤à¤°à¥à¤",
@@ -1751,7 +1762,7 @@
"apisandbox-submit": "à¤
नà¥à¤°à¥à¤§ à¤à¤°à¥à¤",
"apisandbox-reset": "सà¥à¤ªà¤·à¥à¤",
"apisandbox-retry": "दà¥à¤¬à¤¾à¤°à¤¾ पà¥à¤°à¤¯à¤¾à¤¸ à¤à¤°à¥à¤",
- "apisandbox-examples": "Example",
+ "apisandbox-examples": "à¤à¤¦à¤¾à¤¹à¤°à¤£",
"apisandbox-results": "परिणाम",
"apisandbox-request-url-label": "à¤
नà¥à¤°à¥à¤§ URL:",
"apisandbox-request-time": "à¤
नà¥à¤°à¥à¤§ समय: $1",
@@ -1834,6 +1845,7 @@
"listgrouprights-namespaceprotection-header": "नामसà¥à¤¥à¤¾à¤¨ à¤à¥ बà¤à¤¦à¤¿à¤¶à¥à¤",
"listgrouprights-namespaceprotection-namespace": "नामसà¥à¤¥à¤¾à¤¨",
"listgrouprights-namespaceprotection-restrictedto": "à¤à¤ªà¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾ à¤à¥ समà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤°à¤¨à¥ मà¥à¤ सà¤à¥à¤·à¤® à¤à¤°à¤¨à¥ वालॠà¤
धिà¤à¤¾à¤°",
+ "listgrants-rights": "à¤
धिà¤à¤¾à¤°",
"trackingcategories": "à¤à¤¿à¤¹à¥à¤¨à¤¿à¤¤ शà¥à¤°à¥à¤£à¤¿à¤¯à¤¾à¤",
"trackingcategories-summary": "à¤à¤¸ पà¥à¤·à¥à¤ पर à¤à¤¨ à¤à¥à¤¡à¤¼à¤¨à¥ वालॠशà¥à¤°à¥à¤£à¤¿à¤¯à¥à¤ à¤à¥ सà¥à¤à¥ मिलतॠहॠà¤à¥ सà¥à¤µà¤¤à¤ रà¥à¤ª सॠमà¥à¤¡à¤¿à¤¯à¤¾à¤µà¤¿à¤à¤¿ सà¥à¤«à¤¼à¥à¤à¤µà¥à¤¯à¤° दà¥à¤µà¤¾à¤°à¤¾ बनतॠहà¥à¤à¥¤ à¤à¤¨à¤à¥ नाम समà¥à¤¬à¤à¤§à¤¿à¤¤ पà¥à¤°à¤£à¤¾à¤²à¤¿ सनà¥à¤¦à¥à¤¶ à¤à¥ बदलनॠसॠ{{ns:8}} नामसà¥à¤¥à¤¾à¤¨ मà¥à¤ बदलॠà¤à¤¾ सà¤à¤¤à¥ हà¥à¤à¥¤",
"trackingcategories-msg": "à¤à¤¿à¤¹à¥à¤¨à¤¿à¤¤ शà¥à¤°à¥à¤£à¥",
@@ -1975,6 +1987,7 @@
"changecontentmodel-title-label": "पà¥à¤·à¥à¤ शà¥à¤°à¥à¤·à¤",
"changecontentmodel-model-label": "नयि सामà¤à¥à¤°à¥ à¤à¤¾ नमà¥à¤¨à¤¾",
"changecontentmodel-reason-label": "à¤à¤¾à¤°à¤£:",
+ "changecontentmodel-submit": "परिवरà¥à¤¤à¤¨",
"changecontentmodel-success-title": "सामà¤à¤°à¤¿ à¤à¤¾ नामà¥à¤¨à¥ मॠबदलाव हà¥à¥à¥à¤¾à¤¾ हà¥à¥à¥",
"changecontentmodel-success-text": "[[:$1]] à¤à¥ सामà¤à¥à¤°à¥ à¤à¤¾ पà¥à¤°à¤à¤¾à¤° परिवरà¥à¤¤à¤¿à¤¤ हà¥à¤à¥¤",
"changecontentmodel-cannot-convert": "[[:$1]] à¤à¥ सामà¤à¥à¤°à¥ à¤à¤¾ पà¥à¤°à¤à¤¾à¤° $2 मà¥à¤ नहà¥à¤ बदल सà¤à¤¤à¤¾ हà¥à¥¤",
@@ -2129,6 +2142,7 @@
"whatlinkshere-hidelinks": "$1 à¤à¤¡à¤¼à¤¿à¤¯à¤¾à¤",
"whatlinkshere-hideimages": "$1 फ़ाà¤à¤² लिà¤à¤",
"whatlinkshere-filters": "à¤à¤¨à¥à¤¨à¥",
+ "whatlinkshere-submit": "à¤à¤¾à¤¯à¥à¤",
"autoblockid": "सà¥à¤µà¤¤à¤ à¤
वरà¥à¤§ #$1",
"block": "à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ à¤à¥ à¤
वरà¥à¤§à¤¿à¤¤ à¤à¤°à¥à¤à¥¤",
"unblock": "à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ पर à¤
वरà¥à¤§à¤£ हà¤à¤¾à¤à¤",
@@ -2321,6 +2335,7 @@
"export-download": "फ़ाà¤à¤²à¤à¥ रà¥à¤ªà¤®à¥à¤ सà¥à¤µ à¤à¤°à¥à¤",
"export-templates": "à¤à¥à¤®à¥à¤ªà¥à¤²à¥à¤à¤¸ à¤à¥ à¤à¥à¤¡à¥à¤",
"export-pagelinks": "à¤à¤¿à¤¨ पनà¥à¤¨à¥à¤ à¤à¥ हवालॠयहाठहà¥à¤, à¤à¤¨à¥à¤¹à¥à¤ à¤à¥ à¤à¤¸ à¤à¤¹à¤°à¤¾à¤ तठशामिल à¤à¤°à¥à¤:",
+ "export-manual": "सà¥à¤µà¤¯à¤ सॠपà¥à¤·à¥à¤ à¤à¥à¤¡à¤¼à¥à¤:",
"allmessages": "वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ सà¤à¤¦à¥à¤¶",
"allmessagesname": "नाम",
"allmessagesdefault": "डिफà¥à¤²à¥à¤ पाठ",
@@ -2414,6 +2429,7 @@
"tooltip-pt-preferences": "{{GENDER:|à¤à¤ªà¤à¥}} वरà¥à¤¯à¤¤à¤¾à¤à¤",
"tooltip-pt-watchlist": "à¤à¤ªà¤¨à¥ धà¥à¤¯à¤¾à¤¨ दियॠहà¥à¤ पनà¥à¤¨à¥à¤à¤à¥ सà¥à¤à¥",
"tooltip-pt-mycontris": "à¤à¤ªà¤à¥ यà¥à¤à¤¦à¤¾à¤¨à¥à¤ à¤à¥ सà¥à¤à¥",
+ "tooltip-pt-anoncontribs": "à¤à¤¸ à¤à¤à¤ªà¥ पतॠसॠसà¤à¤ªà¤¾à¤¦à¤¨ à¤à¥ सà¥à¤à¥",
"tooltip-pt-login": "à¤à¤ªà¤à¥ सतà¥à¤°à¤¾à¤°à¤®à¥à¤ à¤à¤°à¤¨à¥ à¤à¥ लिठपà¥à¤°à¥à¤¤à¥à¤¸à¤¾à¤¹à¤¿à¤¤ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¤à¤¾ हà¥; लà¥à¤à¤¿à¤¨ यह à¤
निवारà¥à¤¯ नहà¥à¤ हà¥",
"tooltip-pt-logout": "सतà¥à¤°à¤¾à¤à¤¤",
"tooltip-pt-createaccount": "हमारा सà¥à¤à¤¾à¤µ हॠà¤à¥ à¤à¤ª à¤à¤¾à¤¤à¤¾ बनाà¤à¤ à¤à¤° लà¥à¤à¤¿à¤¨ à¤à¤°à¥à¤, परनà¥à¤¤à¥ यह à¤
निवारà¥à¤¯ नहà¥à¤ हà¥",
diff --git a/languages/i18n/hif-latn.json b/languages/i18n/hif-latn.json
index a6c3263ddb..e18aa14f46 100644
--- a/languages/i18n/hif-latn.json
+++ b/languages/i18n/hif-latn.json
@@ -1180,7 +1180,7 @@
"recentchanges-label-bot": "Ii badlao ke ek bot karis hae",
"recentchanges-label-unpatrolled": "Ii badlao pe abhi pahraa nai dewa gais hae.",
"recentchanges-label-plusminus": "Panna ke size etna bytes se badla",
- "recentchanges-legend-heading": "'''Legend:'''",
+ "recentchanges-legend-heading": "Legend: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aur dekho [[Special:NewPages|nawaa panna ke suchi]])",
"recentchanges-submit": "Dekhao",
"rcnotefrom": "Niche {{PLURAL:$5|badlao hae|badlao hae}} $3, $4 ($1 talak dekhawa gais) talak.",
diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json
index 623b81bff6..dbe4fcb6ff 100644
--- a/languages/i18n/hr.json
+++ b/languages/i18n/hr.json
@@ -1169,7 +1169,7 @@
"recentchanges-label-bot": "Izmjenu napravio bot",
"recentchanges-label-unpatrolled": "Nepregledana izmjena",
"recentchanges-label-plusminus": "Promjena veliÄine stranice (u bajtovima)",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "Nova stranica",
"recentchanges-submit": "Prikaži",
"rcnotefrom": "Slijede promjene od $2 (prikazano ih je do $1 ).",
diff --git a/languages/i18n/hrx.json b/languages/i18n/hrx.json
index e32fdc34ff..160e2b6d02 100644
--- a/languages/i18n/hrx.json
+++ b/languages/i18n/hrx.json
@@ -1103,7 +1103,7 @@
"recentchanges-label-bot": "Ãnnrung doorich en Bot",
"recentchanges-label-unpatrolled": "Nicht-kontrollierte Ãnnrung",
"recentchanges-label-plusminus": "Die Ãnnrung von der Seitengröss in Bytes",
- "recentchanges-legend-heading": "'''Legende:'''",
+ "recentchanges-legend-heading": "Legende: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sieh ooch die [[Special:NewPages|List von neier Seite]])",
"rcnotefrom": "Oongezeicht sin die Ãnnrunge seit $2 (max. $1 Einträch).",
"rclistfrom": "Nuar Ãnnrunge seit $3, $2 Uhr zeiche.",
diff --git a/languages/i18n/hsb.json b/languages/i18n/hsb.json
index 3b36673cb5..6e8b482cab 100644
--- a/languages/i18n/hsb.json
+++ b/languages/i18n/hsb.json
@@ -1150,7 +1150,7 @@
"recentchanges-label-bot": "Tuta zmÄna bu pÅez roboÄik pÅewjedźena",
"recentchanges-label-unpatrolled": "Tuta zmÄnu hiÅ¡Äe njebu pÅepruwowana",
"recentchanges-label-plusminus": "ZmÄnjena wulkosÄ strony (w bajtach)",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hlej tež [[Special:NewPages|lisÄinu nowych stronow]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Deleka so {{PLURAL:$5|zmÄna|zmÄnje|zmÄny}} wot $3, $4 {{PLURAL:$5|pokazuje|pokazujetej|pokazuja}} (haÄ k $1 ).",
diff --git a/languages/i18n/ht.json b/languages/i18n/ht.json
index 26631f5b41..0a51bcd40c 100644
--- a/languages/i18n/ht.json
+++ b/languages/i18n/ht.json
@@ -665,7 +665,7 @@
"recentchanges-label-newpage": "Modifikasyon sa a kreye yon lòt paj",
"recentchanges-label-minor": "Sa se yon ti chanjman",
"recentchanges-label-bot": "Se yon wobo ki fè chanjman sa a.",
- "recentchanges-legend-heading": "'''Lejann:'''",
+ "recentchanges-legend-heading": "Lejann: ",
"rcnotefrom": "Men modifikasyon yo ki fèt depi '''$2''' ('''$1''' dènye).",
"rclistfrom": "Afiche nouvo modifikasyon yo depi $3 $2",
"rcshowhideminor": "$1 modifiksayon yo ki tou piti",
diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json
index 0afb86117b..e6565237ee 100644
--- a/languages/i18n/hu.json
+++ b/languages/i18n/hu.json
@@ -667,7 +667,7 @@
"newarticle": "(Ãj)",
"newarticletext": "Egy olyan lapra mutató hivatkozást követtél, ami még nem létezik.\nA lap létrehozásához csak gépeld be a szövegét a lenti szövegdobozba. Ha kész vagy, az âElÅnézet megtekintéseâ gombbal ellenÅrizheted, hogy úgy fog-e kinézni, ahogy szeretnéd, és a âLap mentéseâ gombbal tudod elmenteni. (További információkat a [$1 súgólapon] találsz).\nHa tévedésbÅl jutottál ide, kattints a böngészÅd '''vissza''' vagy '''back''' gombjára.",
"anontalkpagetext": "----''Ez egy olyan anonim szerkesztÅ vitalapja, aki még nem regisztrált, vagy csak nem jelentkezett be.\nEzért az IP-cÃmét használjuk az azonosÃtására.\nUgyanazon az IP-cÃmen számos szerkesztÅ osztozhat az idÅk folyamán.\nHa úgy látod, hogy az üzenetek, amiket ide kapsz, nem neked szólnak, [[Special:UserLogin/signup|regisztrálj]] vagy ha már regisztráltál, [[Special:UserLogin|jelentkezz be]], hogy ne keverjenek össze másokkal.''",
- "noarticletext": "Ez a lap jelenleg nem tartalmaz szöveget.\n[[Special:Search/{{PAGENAME}}|Rákereshetsz erre a cÃmszóra]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} megtekintheted a kapcsolódó naplókat],\nvagy [{{fullurl:{{FULLPAGENAME}}|action=edit}} szerkesztheted a lapot]. ",
+ "noarticletext": "Ez a lap jelenleg nem tartalmaz szöveget.\n[[Special:Search/{{PAGENAME}}|Rákereshetsz erre a cÃmszóra]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} megtekintheted a kapcsolódó naplókat],\nvagy [{{fullurl:{{FULLPAGENAME}}|action=edit}} létrehozhatod a lapot]. ",
"noarticletext-nopermission": "Ez a lap jelenleg nem tartalmaz szöveget.\n[[Special:Search/{{PAGENAME}}|Rákereshetsz a lap cÃmére]] más lapok tartalmában, vagy [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} megtekintheted a kapcsolódó naplófájlokat] .",
"missing-revision": "A(z) \"{{FULLPAGENAME}}\" nevű oldal #$1 változata nem létezik.\n\nEzt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás használata okozza. Részletek a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatóak.",
"userpage-userdoesnotexist": "Nincs â$1 â nevű regisztrált felhasználónk.\nNézd meg, hogy valóban ezt a lapot szeretnéd-e létrehozni vagy szerkeszteni.",
@@ -1282,7 +1282,7 @@
"recentchanges-label-bot": "Ezt a szerkesztést egy bot hajtotta végre",
"recentchanges-label-unpatrolled": "Ezt a szerkesztést még nem ellenÅrizték",
"recentchanges-label-plusminus": "Az oldal mérete ennyi bájttal módosult",
- "recentchanges-legend-heading": "'''Jelmagyarázat:'''",
+ "recentchanges-legend-heading": "Jelmagyarázat: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lásd még: [[Special:NewPages|új lapok listája]])",
"recentchanges-submit": "MegjelenÃtés",
"rcnotefrom": "Alább a $3 $4 óta történt változtatások láthatóak (legfeljebb $1 db).",
diff --git a/languages/i18n/hy.json b/languages/i18n/hy.json
index 3a44e1c9a1..4240fbbbf1 100644
--- a/languages/i18n/hy.json
+++ b/languages/i18n/hy.json
@@ -255,7 +255,7 @@
"mainpage": "Ô³Õ¬ÕÕ¡Õ¾Õ¸Ö Õ§Õ»",
"mainpage-description": "Ô³Õ¬ÕÕ¡Õ¾Õ¸Ö Õ§Õ»",
"policy-url": "Project:Ô¿Õ¡Õ¶Õ¸Õ¶Õ¡Õ¯Õ¡ÖÕ£",
- "portal": "ÕÕ¡Õ´Õ¡ÕµÕ¶ÖÕ¡ÕµÕ«Õ¶ ÕºÕ¸ÖÕ¿Õ¡Õ¬",
+ "portal": "Ô½Õ¸ÖÕ°ÖÕ¤Õ¡ÖÕ¡Õ¶",
"portal-url": "Project:ÕÕ¡Õ´Õ¡ÕµÕ¶ÖÕ¡ÕµÕ«Õ¶ ÕºÕ¸ÖÕ¿Õ¡Õ¬",
"privacy": "Ô³Õ¡Õ²Õ¿Õ¶Õ«Õ¸ÖÕ©ÕµÕ¡Õ¶ ÖÕ¡Õ²Õ¡ÖÕ¡Õ¯Õ¡Õ¶Õ¸ÖÕ©ÕµÕ¸ÖÕ¶",
"privacypage": "Project:Ô³Õ¡Õ²Õ¿Õ¶Õ«Õ¸ÖÕ©ÕµÕ¡Õ¶ ÖÕ¡Õ²Õ¡ÖÕ¡Õ¯Õ¡Õ¶Õ¸ÖÕ©ÕµÕ¸ÖÕ¶",
@@ -921,7 +921,7 @@
"recentchanges-label-bot": "Ô±ÕµÕ½ ÕÕ´Õ¢Õ¡Õ£ÖÕ¸ÖÕ´Õ¨ Õ¯Õ¡Õ¿Õ¡ÖÕ¾Õ¥Õ¬ Õ§ Õ¢Õ¸Õ¿Õ« Õ¯Õ¸Õ²Õ´Õ«Ö",
"recentchanges-label-unpatrolled": "Ô±ÕµÕ½ ÕÕ´Õ¢Õ¡Õ£ÖÕ¸ÖÕ´Õ¨ Õ¤Õ¥Õ¼ Õ¹Õ« ÕºÕ¡ÖÕ¥Õ¯Õ¾Õ¥Õ¬",
"recentchanges-label-plusminus": "Ô·Õ»Õ« Õ¹Õ¡ÖÕ½Õ¨ ÖÕ¸ÖÕ¸ÕÕ¾Õ¥Ö Õ¡ÕµÕ½ÖÕ¡Õ¶ Õ¢Õ¡ÕµÕ©Õ¸Õ¾",
- "recentchanges-legend-heading": "'''Ô¼Õ¥Õ£Õ¥Õ¶Õ¤Õ'''",
+ "recentchanges-legend-heading": "Ô¼Õ¥Õ£Õ¥Õ¶Õ¤Õ ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Õ¿Õ¥Õ½ Õ¶Õ¡ÖÕ [[Special:NewPages|Õ¶Õ¸Ö Õ§Õ»Õ¥ÖÕ« ÖÕ¡Õ¶Õ¯]])",
"recentchanges-submit": "ÕÕ¸ÖÕµÖ Õ¿Õ¡Õ¬",
"rcnotefrom": "ÕÕ¿Õ¸ÖÖ Õ¢Õ¥ÖÕ¾Õ¡Õ® Õ¥Õ¶ ÖÕ¸ÖÕ¸ÕÕ¸ÖÕ©ÕµÕ¸ÖÕ¶Õ¶Õ¥ÖÕ¨ Õ½Õ¯Õ½Õ¡Õ®Õ '''$2''' (Õ´Õ«Õ¶Õ¹ÖÕ '''$1''')Ö",
diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json
index a318921a06..0d14ead7f2 100644
--- a/languages/i18n/ia.json
+++ b/languages/i18n/ia.json
@@ -607,7 +607,7 @@
"newarticle": "(Nove)",
"newarticletext": "Tu ha sequite un ligamine verso un pagina que non existe ancora.\nPro crear iste pagina, comencia a scriber in le quadro infra (consulta le [$1 pagina de adjuta] pro plus informationes).\nSi tu ha arrivate a iste pagina per error, clicca le button '''Retornar''' de tu navigator.",
"anontalkpagetext": "---- ''Isto es le pagina de discussion pro un usator anonyme qui non ha ancora create un conto, o qui non lo usa. Consequentemente nos debe usar le adresse IP numeric pro identificar le/la.\nUn tal adresse IP pote esser usate in commun per varie personas.\nSi tu es un usator anonyme e pensa que commentos irrelevante ha essite dirigite a te, per favor [[Special:UserLogin/signup|crea un conto]] o [[Special:UserLogin|aperi un session]] pro evitar futur confusiones con altere usatores anonyme.''",
- "noarticletext": "Al momento il non ha texto in iste pagina.\nTu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificar iste pagina] .",
+ "noarticletext": "Al momento il non ha texto in iste pagina.\nTu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear iste pagina] .",
"noarticletext-nopermission": "In iste momento il non ha texto in iste pagina.\nTu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,\no [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente], ma tu non ha le permission de crear iste pagina. ",
"missing-revision": "Le version â$1 del pagina nominate \"{{FULLPAGENAME}}\" non existe.\n\nIsto es generalmente causate per sequer un ligamine de historia obsolete a un pagina que ha essite delite.\nDetalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de deletiones].",
"userpage-userdoesnotexist": "Le conto de usator \"$1 \" non es registrate. Per favor verifica que tu vole crear/modificar iste pagina.",
@@ -1207,7 +1207,7 @@
"recentchanges-label-bot": "Iste modification ha essite effectuate per un robot",
"recentchanges-label-unpatrolled": "Iste modification non ha ancora essite patruliate",
"recentchanges-label-plusminus": "Le dimension del pagina ha cambiate de iste numero de bytes",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam le [[Special:NewPages|lista de nove paginas]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Monstrar",
@@ -2331,13 +2331,13 @@
"javascripttest-pagetext-frameworks": "Per favor selige un del sequente structuras de test: $1",
"javascripttest-pagetext-skins": "Selige un apparentia con le qual executar le tests:",
"javascripttest-qunit-intro": "Vide [$1 documentation de tests] sur mediawiki.org.",
- "tooltip-pt-userpage": "Tu pagina de usator",
+ "tooltip-pt-userpage": "{{GENDER:|Tu}} pagina de usator",
"tooltip-pt-anonuserpage": "Le pagina de usator pro le adresse IP desde le qual tu face modificationes",
- "tooltip-pt-mytalk": "Tu pagina de discussion",
+ "tooltip-pt-mytalk": "{{GENDER:|Tu}} pagina de discussion",
"tooltip-pt-anontalk": "Discussion super le modificationes facite desde iste adresse IP",
- "tooltip-pt-preferences": "Mi preferentias",
+ "tooltip-pt-preferences": "{{GENDER:|Tu}} preferentias",
"tooltip-pt-watchlist": "Le lista de paginas del quales tu seque le modificationes",
- "tooltip-pt-mycontris": "Lista de tu contributiones",
+ "tooltip-pt-mycontris": "Lista de {{GENDER:|tu}} contributiones",
"tooltip-pt-anoncontribs": "Un lista de modificationes facite per iste adresse IP",
"tooltip-pt-login": "Nos recommenda que tu te authentica, ma non es obligatori.",
"tooltip-pt-logout": "Clauder session",
@@ -2369,7 +2369,7 @@
"tooltip-t-recentchangeslinked": "Modificationes recente in le paginas al quales iste pagina contine ligamines",
"tooltip-feed-rss": "Syndication RSS pro iste pagina",
"tooltip-feed-atom": "Syndication Atom pro iste pagina",
- "tooltip-t-contributions": "Vider le lista de contributiones de iste usator",
+ "tooltip-t-contributions": "Un lista de contributiones de {{GENDER:$1|iste usator}}",
"tooltip-t-emailuser": "Inviar un e-mail a iste usator",
"tooltip-t-info": "Plus information super iste pagina",
"tooltip-t-upload": "Incargar files",
diff --git a/languages/i18n/it.json b/languages/i18n/it.json
index 136f62fe08..0be6b071e0 100644
--- a/languages/i18n/it.json
+++ b/languages/i18n/it.json
@@ -570,7 +570,7 @@
"createaccount-title": "Creazione di un accesso a {{SITENAME}}",
"createaccount-text": "Qualcuno ha creato un accesso a {{SITENAME}} ($4) a nome di $2, associato a questo indirizzo di posta elettronica. La password per l'utente \"$2\" è impostata a \"$3\".\nà opportuno eseguire un accesso quanto prima e cambiare la password immediatamente.\n\nSe l'accesso è stato creato per errore, si può ignorare questo messaggio.",
"login-throttled": "Sono stati effettuati troppi tentativi di accesso in breve tempo.\nAttendi $1 e riprova in seguito.",
- "login-abort-generic": "Il tuo login non ha avuto successo - Annullato",
+ "login-abort-generic": "Il tuo accesso non è riuscito - Annullato",
"login-migrated-generic": "La tua utenza è stata migrata, e il tuo nome utente non esiste più su questo wiki.",
"loginlanguagelabel": "Lingua: $1",
"suspicious-userlogout": "La tua richiesta di disconnessione è stata negata perché sembra inviata da un browser non funzionante o un proxy di caching.",
@@ -590,7 +590,7 @@
"newpassword": "Nuova password:",
"retypenew": "Riscrivi la nuova password:",
"resetpass_submit": "Imposta la password e accedi al sito",
- "changepassword-success": "La password è stata modificata correttamente!",
+ "changepassword-success": "La tua password è stata modificata!",
"changepassword-throttled": "Sono stati effettuati troppi tentativi di accesso in breve tempo.\nAttendi $1 e riprova in seguito.",
"botpasswords": "Password bot",
"botpasswords-summary": "Password bot consente l'accesso ad un'utenza tramite API senza usare le credenziali di accesso principali dell'utenza. I diritti utente disponibili quando si è effettuato l'accesso con una password bot possono essere limitati.\n\nSe non conosci il motivo per cui potresti farlo, allora probabilmente non dovresti farlo. Nessuno dovrebbe mai chiederti di generare uno di questi e darli a loro.",
@@ -613,9 +613,9 @@
"botpasswords-insert-failed": "Impossibile aggiungere il nome bot \"$1\". à stato già aggiunto?",
"botpasswords-update-failed": "Impossibile aggiornare il nome bot \"$1\". Ã stato cancellato?",
"botpasswords-created-title": "Password bot creata",
- "botpasswords-created-body": "La password bot \"$1\" è stata creata con successo.",
+ "botpasswords-created-body": "La password bot \"$1\" è stata creata.",
"botpasswords-updated-title": "Password bot aggiornata",
- "botpasswords-updated-body": "La password bot \"$1\" è stata aggiornata con successo.",
+ "botpasswords-updated-body": "La password bot \"$1\" è stata aggiornata.",
"botpasswords-deleted-title": "Password bot cancellata",
"botpasswords-deleted-body": "La password bot \"$1\" è stata cancellata.",
"botpasswords-newpassword": "La nuova password per accedere con $1 è $2 . Registratelo per consultazioni future. ",
@@ -627,7 +627,7 @@
"resetpass-no-info": "Devi aver effettuato l'accesso per accedere a questa pagina direttamente.",
"resetpass-submit-loggedin": "Cambia password",
"resetpass-submit-cancel": "Annulla",
- "resetpass-wrong-oldpass": "Password temporanea o attuale non valida.\nLa password potrebbe essere stata già cambiata, oppure potrebbe essere stata richiesta una nuova password temporanea.",
+ "resetpass-wrong-oldpass": "Password temporanea o attuale non valida.\nLa password potrebbe essere stata già modificata, oppure potrebbe essere stata richiesta una nuova password temporanea.",
"resetpass-recycled": "Si prega di reimpostare con una password diversa dalla password attuale.",
"resetpass-temp-emailed": "L'accesso è stato effettuato con un codice temporaneo, inviato via email. Per completare la registrazione, è necessario impostare una nuova password qui:",
"resetpass-temp-password": "Password temporanea:",
@@ -911,9 +911,9 @@
"revdelete-unsuppress": "Elimina le limitazioni sulle versioni ripristinate",
"revdelete-log": "Motivo:",
"revdelete-submit": "Applica {{PLURAL:$1|alla versione selezionata|alle versioni selezionate}}",
- "revdelete-success": "'''Visibilità della versione aggiornata correttamente.'''",
+ "revdelete-success": "Visibilità della versione aggiornata.",
"revdelete-failure": "'''La visibilità della versione non può essere aggiornata:'''\n$1",
- "logdelete-success": "'''Visibilità dell'evento impostata correttamente.'''",
+ "logdelete-success": "Impostata visibilità dell'evento.",
"logdelete-failure": "'''La visibilità dell'evento non può essere impostata:'''\n$1",
"revdel-restore": "cambia la visibilità ",
"pagehist": "Cronologia della pagina",
@@ -1156,7 +1156,7 @@
"userrights-changeable-col": "Gruppi modificabili",
"userrights-unchangeable-col": "Gruppi non modificabili",
"userrights-conflict": "Conflitto di modifica dei diritti utente! Controlla e conferma le tue modifiche.",
- "userrights-removed-self": "Hai rimosso con successo i tuoi diritti. E quindi, non sarai più in grado di accedere a questa pagina.",
+ "userrights-removed-self": "Hai rimosso i tuoi diritti. E quindi, non sarai più in grado di accedere a questa pagina.",
"group": "Gruppo:",
"group-user": "Utenti",
"group-autoconfirmed": "Utenti autoconvalidati",
@@ -1574,8 +1574,8 @@
"uploadstash-summary": "Questa pagina consente l'accesso ai file che sono stati caricati (o sono in fase di caricamento) ma che non sono stati ancora pubblicati sul wiki. Questi file sono visibili solo all'utente che li ha caricati.",
"uploadstash-clear": "Elimina i file in stash",
"uploadstash-nofiles": "Non hai file in stash.",
- "uploadstash-badtoken": "Questa azione non ha avuto successo, forse perché le tue credenziali di modifica sono scadute. Prova ancora.",
- "uploadstash-errclear": "La cancellazione dei file non ha avuto successo.",
+ "uploadstash-badtoken": "Esecuzione dell'azione non riuscita, forse perché le tue credenziali di modifica sono scadute. Prova ancora.",
+ "uploadstash-errclear": "La pulizia dei file non è riuscita.",
"uploadstash-refresh": "Aggiorna l'elenco dei file",
"invalid-chunk-offset": "Offset della parte non valido.",
"img-auth-accessdenied": "Accesso negato",
@@ -2092,6 +2092,7 @@
"changecontentmodel-nodirectediting": "Il modello di contenuto $1 non supporta la modifica diretta",
"log-name-contentmodel": "Modifiche del modello contenuti",
"log-description-contentmodel": "Eventi relativi al modello di contenuto di una pagina",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|ha creato}} la pagina $3 utilizzando un modello di contenuto non predefinito \"$5\"",
"logentry-contentmodel-change": "$1 {{GENDER:$2|ha modificato}} il modello di contenuto della pagina $3 da \"$4\" a \"$5\"",
"logentry-contentmodel-change-revertlink": "ripristina",
"logentry-contentmodel-change-revert": "ripristina",
@@ -3133,7 +3134,7 @@
"confirmrecreate": "L'utente [[User:$1|$1]] ([[User talk:$1|discussioni]]) ha cancellato questa pagina dopo che hai iniziato a modificarla, per il seguente motivo: ''$2''\nPer favore, conferma che vuoi veramente ricreare questa pagina.",
"confirmrecreate-noreason": "L'utente [[User:$1|$1]] ([[User talk:$1|discussioni]]) {{GENDER:$1|ha cancellato}} questa pagina dopo che hai iniziato a modificarla. Per favore, conferma che vuoi veramente ricreare questa pagina.",
"recreate": "Ricrea",
- "confirm_purge_button": "Conferma",
+ "confirm_purge_button": "OK",
"confirm-purge-top": "Vuoi pulire la cache di questa pagina?",
"confirm-purge-bottom": "Ripulire la cache di una pagina consente di mostrare la sua versione più aggiornata.",
"confirm-watch-button": "OK",
@@ -3332,7 +3333,7 @@
"tags-delete-not-allowed": "I tag definiti da un'estensione non possono essere eliminati a meno che ciò non sia specificamente permesso dall'estensione.",
"tags-delete-not-found": "Il tag \"$1\" non esiste.",
"tags-delete-too-many-uses": "Il tag \"$1\" è applicato a più di $2 {{PLURAL:$2|revisione|revisioni}}, il che significa che non può essere eliminato.",
- "tags-delete-warnings-after-delete": "Il tag \"$1\" è stato eliminato con successo, ma fai attenzione {{PLURAL:$2|al seguente avviso|ai seguenti avvisi}}:",
+ "tags-delete-warnings-after-delete": "L'etichetta \"$1\" è stata cancellata, ma fai attenzione {{PLURAL:$2|al seguente avviso|ai seguenti avvisi}}:",
"tags-activate-title": "Attiva tag",
"tags-activate-question": "Stai per attivare il tag \"$1\".",
"tags-activate-reason": "Motivo:",
@@ -3371,7 +3372,7 @@
"tags-edit-reason": "Motivo:",
"tags-edit-revision-submit": "Applica le modifiche a {{PLURAL:$1|questa versione|$1 versioni}}",
"tags-edit-logentry-submit": "Applica le modifiche a {{PLURAL:$1|questa voce di registro|$1 voci di registro}}",
- "tags-edit-success": "Le modifiche sono state applicate correttamente.",
+ "tags-edit-success": "Le modifiche sono state applicate.",
"tags-edit-failure": "Non è stato possibile effettuare le seguenti modifiche:\n$1",
"tags-edit-nooldid-title": "Versione specificata non valida",
"tags-edit-nooldid-text": "Non è stata specificata alcuna versione della pagina su cui eseguire questa funzione, oppure la versione specificata non esiste.",
diff --git a/languages/i18n/jam.json b/languages/i18n/jam.json
index fdd3c4714f..34bd816274 100644
--- a/languages/i18n/jam.json
+++ b/languages/i18n/jam.json
@@ -560,7 +560,7 @@
"recentchanges-label-bot": "Dis edit pofaam bai bot",
"recentchanges-label-unpatrolled": "Dis edit no get pachuol yet",
"recentchanges-label-plusminus": "Di piej saiz chienj bai dis nomba a bait",
- "recentchanges-legend-heading": "'''Lejen:'''",
+ "recentchanges-legend-heading": "Lejen: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (azwel si [[Special:NewPages|lis a nyuu piej]])",
"rclistfrom": "Shuo nyuu chienjdem we taat frahn $3 $2",
"rcshowhideminor": "$1 maina editdem",
diff --git a/languages/i18n/jut.json b/languages/i18n/jut.json
index 37e963d8f2..264a219df3 100644
--- a/languages/i18n/jut.json
+++ b/languages/i18n/jut.json
@@ -593,7 +593,7 @@
"recentchanges-label-bot": "Denn redigiireng bløw utförtj å i robott",
"recentchanges-label-unpatrolled": "Redigiireng ä ennu ett bløwen patruljiirtj.",
"recentchanges-label-plusminus": "Störrelsen på siden bløw øndan mä detj åntal bytes",
- "recentchanges-legend-heading": "'''Forklareng:'''",
+ "recentchanges-legend-heading": "Forklareng: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sie åsså [[Special:NewPages|listen öwe nyj side]])",
"rcnotefrom": "Nierfor ä op te '''$1''' {{PLURAL:$5|øndreng|øndrenge}} sien '''$2''' wisen.",
"rclistfrom": "Wis nyj øndrenge startenje fra $3 kl. $2",
@@ -736,7 +736,6 @@
"unwatch": "Fjän öwewågneng",
"watchlist-details": "Du har $1 {{PLURAL:$1|side|sider}} på din åvervågnengsliste (øn diskusjesider).",
"wlshowlast": "Ves de seneste $1 têmer $2 dåg",
- "watchlistall2": "Ã¥le",
"watching": "Tilfye öwewågneng...",
"unwatching": "Fjäne öwewågneng...",
"deletepage": "Slett siid",
diff --git a/languages/i18n/jv.json b/languages/i18n/jv.json
index 69eae9fde7..8a4924e8f9 100644
--- a/languages/i18n/jv.json
+++ b/languages/i18n/jv.json
@@ -1085,7 +1085,7 @@
"recentchanges-label-bot": "Suntingan iki diayahi déning bot",
"recentchanges-label-unpatrolled": "Suntingan iki durung dipatroli",
"recentchanges-label-plusminus": "Agengipun kaca sampun dipunowahi samekaten.",
- "recentchanges-legend-heading": "'''Katrangan:'''",
+ "recentchanges-legend-heading": "Katrangan: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dhelengen uga: [[Special:NewPages|daftar kaca anyar]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Ing ngisor iki owah-owahan wiwit $2 (kapacak nganti $1 owah-owahan).",
diff --git a/languages/i18n/ka.json b/languages/i18n/ka.json
index 267ba5ad05..53e2f20923 100644
--- a/languages/i18n/ka.json
+++ b/languages/i18n/ka.json
@@ -471,7 +471,7 @@
"nocookiesfornew": "áááá®ááá ááááá¡ ááááá áá¨á áá á¨áá¥ááááá, á ááááá ááá¡á á¬á§áá á ááá ááááá¡á¢á£á áá.\ná£áá á£ááááá§áá¤ááá á£ááá áá§áá¡ ááááááá¡ áá¥á¢áá£á ááá. á¨ááááá áááááá®ááá áááá áá áá á¡áªáááá á®áááá®áá",
"nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "áá¥áááá¡ áááá áááááááá£áá áááá®ááá ááááá¡ á¡áá®ááá á¥áááááá áá áá áá¡.",
- "loginsuccesstitle": "á¡áá¡á¢áááá¨á á¨áá¡ááá áááá®áá áªááááá.",
+ "loginsuccesstitle": "á¡áá¡á¢áááá¨á á¨áá¡ááá áááá®áá áªááááá",
"loginsuccess": "'''ááááááá á¨áá¡á£áá á®áá á {{SITENAME}}-á¨á á áááá ᪠â$1â.'''",
"nosuchuser": "áááá®ááá ááááá á¡áá®áááá $1 áá áá á¡ááááá¡.\náááá®ááá áááááá á¡áá®ááááá áá á«ááááááá áá¡ááááá¡ á áááá¡á¢á áááá..\ná¨ááááá¬ááá á¡áá®áááá¡ ááá¬áá á áá[[Special:UserLogin/signup|á¨áá¥ááááá áá®ááá ááááá áá¨á]].",
"nosuchusershort": "áááá®ááá ááááá á¡áá®áááá â$1â áá áá á¡ááááá¡. á¨ááááá¬ááá ááá ááá¬áá á.",
@@ -507,7 +507,7 @@
"createaccount-title": "ááááá áá¨áá¡ á¨áá¥ááá {{SITENAME}}-áááá¡",
"createaccount-text": "ááá¦ááªáá á¨áá¥ááá ááááá áá¨á á¡áá®áááá â$2â áá ááá áááá â$3â áá¥áááá áááá¥á¢á ááá£áá á¤áá¡á¢áá¡áááá¡ {{SITENAME}}-á¨á ($4). ááá®ááá ááá áááá¡á¢á áá ááá áá á¨ááªááááá ááá ááá.\n\ná¨áááá«áááá á§á£á ááá¦ááá áá áááá¥áªááá áá á¨áá¢á§áááááááá¡, áᣠááááá áá¨á á¨ááªááááá á¨ááá¥ááá.",
"login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
- "login-abort-generic": "áá¥áááá ááá¢áá ááááªáá á¬áá á£ááá¢áááááá â ááá£á¥ááá",
+ "login-abort-generic": "áá¥áááá ááá¢áá ááááªáá ááá áááá®áá áªááááá â ááá£á¥ááá",
"login-migrated-generic": "áá¥áááá ááááá áá¨á ááááá¢ááááá áá¥áá, áá áá¥áááá áááá®ááá ááááá¡ á¡áá®ááá áá ááááá¨á áá¦áá áá á¡ááááá¡.",
"loginlanguagelabel": "ááá: $1",
"suspicious-userlogout": "áá¥áááá áááá®áááá ááá¡áááá¡ á¨áá¡áá®áá ááá£á¥áááá£ááá, á áááááá᪠ááá áááá¡ á¥áá¨áá ááááá áá áá¥á¡áá¡ áá áá áááá áá¥á¢á£áá áá áá£ááá áá¡ áááá®ááááá¡.",
@@ -527,7 +527,7 @@
"newpassword": "áá®ááá ááá ááá:",
"retypenew": "áá®ááá ááá ááá ááááááá áááá:",
"resetpass_submit": "ááá£ááááá ááá ááá áá ááá áááá¡á¢á áá ááá",
- "changepassword-success": "áá¥áááá ááá ááá á¬áá ááá¢áááá á¨áááªáááá!",
+ "changepassword-success": "áá¥áááá ááá ááá á¨áááªáááá!",
"changepassword-throttled": "áá¥ááá ááááá®áá áªááááá ááááá áá¨á¨á á¨áá¡áááá¡ áááááá¢áá áááá á ááªáááááá. ááááá áááá á¨áá§ááááááá ááá®ááá ááááªáááá $1.",
"botpasswords": "ááá¢áá¡ ááá ááááá",
"botpasswords-summary": "ááá¢áááá¡ áááááá á¡áá¨á£áááááá¡ áá«áááá áááá®ááá ááááá¡ ááááá áá¨ááá áááááá¨áá áááá¡ API-áá¡ ááááá§áááááá ááááá áá¨áá¡ á«áá ááááá á¨áá¡áááá¡ áááááªáááááá¡ ááááá§áááááá¡ ááá áá¨á. áááá®ááá ááááá¡ á£á¤áááááá áá¡ááá á¨áá¡áááá¡áá¡ á¨áá¡áá«ááá á¨ááá¦á£áá£áá áá§áá¡.\n\náᣠáá ááªáá áá¡ á áá¢áá á£ááá áááááááá, ááááá áá ᪠á£ááá áááááááá. áá¡ááá ááááá¡ á¬áááá¥ááá áá á¡á®ááá¡áááá¡ áááááªááá áá áá á ááááááááá ááá£áá.",
@@ -550,9 +550,9 @@
"botpasswords-insert-failed": "ááá¢áá¡ á¡áá®áááá¡ $1\" ááááá¢ááá á¨áá£á«ááááááá. á£ááá ááááá¢ááá£ááá?",
"botpasswords-update-failed": "ááá¢áá¡ á¡áá®áááá¡ \"$1\" ááááá®áááá á¨áá£á«ááááááá. á¬áá¨ááááá?",
"botpasswords-created-title": "ááá¢áá¡ ááá ááá á¨áá¥áááááá",
- "botpasswords-created-body": "ááá¢áá¡ ááá ááá \"$1\" á¬áá ááá¢áááá á¨ááá¥ááá.",
+ "botpasswords-created-body": "ááá¢áá¡ ááá ááá \"$1\" á¨ááá¥ááá.",
"botpasswords-updated-title": "ááá¢áá¡ ááá ááá ááááá®ááá",
- "botpasswords-updated-body": "ááá¢áá¡ ááá ááá \"$1\" á¬áá ááá¢áááá ááááá®ááá.",
+ "botpasswords-updated-body": "ááá¢áá¡ ááá ááá \"$1\" ááááá®ááá.",
"botpasswords-deleted-title": "ááá¢áá¡ ááá ááá á¬áá¨ááááá",
"botpasswords-deleted-body": "ááá¢áá¡ ááá ááá \"$1\" á¬ááá¨ááá.",
"botpasswords-newpassword": "áá®ááá ááá ááá $1 -áá á¨áá¡áá¡áááááá áá áá¡ $2 . ááá®ááá áááááá®á¡ááá áá áá á©ááá¬áá áá. ",
@@ -564,7 +564,7 @@
"resetpass-no-info": "ááááá áá¢á£ááá áá áááá áááá á¡ááá£á¨ááá áá¥ááá á£ááá á¬áá ááááááá áááá á¡áá¡á¢áááá¡áááá.",
"resetpass-submit-loggedin": "ááá áááá¡ á¨ááªááá",
"resetpass-submit-cancel": "ááá£á¥áááá",
- "resetpass-wrong-oldpass": "áá áá¡á¬áá á áá áááááá áá ááá¥áááá ááá ááá.\ná¨áá¡áá«ááá áá¥ááá á¬áá ááá¢áááá á¨ááªááááá ááá ááá áá ááááá®áááá áá®ááá.",
+ "resetpass-wrong-oldpass": "áá áá¡á¬áá á áá áááááá áá ááá¥áááá ááá ááá.\ná¨áá¡áá«ááá áá¥ááá á£ááá á¨ááªááááá ááá ááá áá ááááá®áááá áá®ááá áá áááááá ááá ááá.",
"resetpass-recycled": "ááá®ááá, á¨ááªááááá ááá ááá ááááá, á ááááá᪠áááá¡á®ááááááá áá¥áááá áááááááá á ááá áááá¡áááá.",
"resetpass-temp-emailed": "áá¥ááá á¬áá ááááááá á®áá á áá áááááá ááá áááá¡ ááá®ááá áááá, á ááááá᪠ááá¦ááá£ááá áááá¥á¢á ááá£áá á¤áá¡á¢áá. á¡áá¡á¢áááá¨á á¨áá¡áááá¡ ááá¡á á£ááááá¡áááá¡, áá£áªáááááááá áá®ááá ááá áááá¡ á¬áá ááááá:",
"resetpass-temp-password": "áá áááááá ááá ááá:",
@@ -849,9 +849,9 @@
"revdelete-unsuppress": "ááá®á¡áááá á¨ááá¦á£ááá ááá á¡ááááá¡ áá¦áááááá¡ááá",
"revdelete-log": "áááááá:",
"revdelete-submit": "{{PLURAL:$1|áá á©áá£áá ááá á¡ááá¡|áá á©áá£áá ááá á¡ááááá¡}} áááá®áá áªáááááá",
- "revdelete-success": "'''ááá á¡ááá¡ á®áááááááá á¨áááªáááá.'''",
+ "revdelete-success": "ááá á¡ááá¡ á®áááááááá á¨áááªáááá.",
"revdelete-failure": "'''ááá á¡ááá¡ á®áááááááá áá á¨ááá«áááá ááá§ááááá£áá áá¥ááá¡:'''\n$1",
- "logdelete-success": "áááááááá¡ á®áááááááá á¬áá ááá¢áááá á¨áááªáááá.",
+ "logdelete-success": "áááááááá¡ á®áááááááá á¨áááªáááá.",
"logdelete-failure": "'''áá£á ááááá¡ á®áááááááá áá áá áá¡ ááá§ááááá£áá:'''\n$1",
"revdel-restore": "á®ááááááááá¡ á¨ááªááá",
"pagehist": "áááá ááá¡ áá¡á¢áá áá",
@@ -1099,7 +1099,7 @@
"userrights-unchangeable-col": "á¯áá£á¤ááá, á áááááá᪠áá á¨áááá«áááá á¨ááªááááá",
"userrights-irreversible-marker": "$1*",
"userrights-conflict": "áááá®ááá áááááá á£á¤ááááááá¡ áááá¤ááá¥á¢á! ááá®ááá á®áááááá áá á¨ááááá®áá áá¥áááá áªááááááááá.",
- "userrights-removed-self": "áá¥ááá á¬áá ááá¢áááá á¬áá¨áááá á¡ááá£ááá á á£á¤áááá. á¨áá¡áááááá¡áá, áá¥ááá áá¦áá ááá¥ááááá áá áááá áááá á¬áááááá¡ á¡áá¨á£ááááá",
+ "userrights-removed-self": "áá¥ááá á¬áá¨áááá á¡ááá£ááá á á£á¤áááá. á¨áá¡áááááá¡áá, áá¥ááá áá¦áá ááá¥ááááá áá áááá áááá á¬áááááá¡ á¡áá¨á£ááááá",
"group": "á¯áá£á¤á:",
"group-user": "áááá®ááá áááááá",
"group-autoconfirmed": "ááá¢áááá¢á£á áá ááááá¡á¢á£á ááá£áá áááá®ááá áááááá",
@@ -1287,7 +1287,7 @@
"recentchanges-label-bot": "áá¡ áá áá¡ ááá¢áá¡ á áááá¥á¢áá ááá",
"recentchanges-label-unpatrolled": "áá¡ á áááá¥á¢áá ááá ááááá£ááá¬ááááááá",
"recentchanges-label-plusminus": "áªáááááááááá¡ áááá áááá¢ááá¨á",
- "recentchanges-legend-heading": "'''ááááááá:'''",
+ "recentchanges-legend-heading": "ááááááá: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (áá®. ááá áááá [[Special:NewPages|áá®ááá áááá ááááá¡ á¡áá]])",
"recentchanges-legend-plusminus": "(±123 )",
"recentchanges-submit": "á©áááááá",
@@ -1491,7 +1491,7 @@
"backend-fail-read": "á¤áááá $1-áá¡ á¬ááááá®áá ááá ááá®áá á®áá.",
"backend-fail-create": "á¤áááá $1-áá¡ á©áá¬áá á ááá ááá®áá á®áá.",
"backend-fail-maxsize": "á¤áááá $1-áá¡ á©áá¬áá á ááá ááá®áá á®áá, á áááááá᪠ááá¡á áááá áááá áááá¡ {{PLURAL:$2|áá á áááá¢á¡|$2 áááá¢á¡}}.",
- "backend-fail-readonly": "á¡ááªááá \"$1\" ááááááá á®ááááá¡áá¬áááááá áá®áááá á¬ááááá®ááá¡ á ááááá¨á. áááááá: \"$2\"",
+ "backend-fail-readonly": "á¡ááªááá \"$1\" ááááááá á®ááááá¡áá¬áááááá áá®áááá á¬ááááá®ááá¡ á ááááá¨á. áááááá: $2 ",
"backend-fail-synced": "á¤áááá \"$1\" ááá§áá¤ááá á¨ááá á¡ááªáááá¡ á¨áá£áááá®ááááá ááááááá ááááá¨á",
"backend-fail-connect": "\"$1\" á¡ááªááááá áááááá¨áá ááá ááá ááá®áá á®áá.",
"backend-fail-internal": "\"$1\" á¡ááªááá¨á ááá®áá ááá£ááááááá á¨ááªáááá.",
@@ -1518,7 +1518,7 @@
"uploadstash-summary": "áá áááá ááá á¨áá¡áá«ááááááá áá á¤ááááá ááá«áááá, á áááááá᪠á£ááá ááá¢ááá áááá áá áá®áá áá¢ááá ááááá, áááá áá á¯áá ááááá¨á áá ááááá¥ááá§áááá£ááá. áá¡ á¤áááááá, ááá áá ááá¢ááá áááá áááá®ááá ááááá¡á, á¯áá á¡áá¯áá áá áá áááá¡ á£ááá®ááá¡.",
"uploadstash-clear": "ááá¤áá á£áá á¤ááááááá¡ ááá¡á£á¤áááááá",
"uploadstash-nofiles": "áá¥ááá áá ááá¥áá ááá¤áá á£áá á¤áááááá.",
- "uploadstash-badtoken": "áááááááá£áá ááá¥áááááá ááá á¨áá¡á á£ááá. á¨áá¡áá«ááá, áá¥áááá á£á¡áá¤á áá®ááááá¡ áááááá¢áá¡ ááá¥ááááááá¡ áááá ááááá¬á£á á. ááááá á¡áªáááá.",
+ "uploadstash-badtoken": "áááááááá£áá ááá¥áááááá ááá á¨áá¡á á£ááá. á¨áá¡áá«ááá, áá¥áááá á£á¡áá¤á áá®ááááá¡ áááááá¢áá¡ ááá¥ááááááá¡ áááá ááááá¬á£á á. ááá®ááá, á¡áªáááá ááááá.",
"uploadstash-errclear": "á¤ááááááá¡ ááá¡á£á¤áááááá ááá ááá®áá á®áá.",
"uploadstash-refresh": "á¤ááááááá¡ á¡ááá¡ ááááá®áááá",
"invalid-chunk-offset": "áá áá¡á¬áá á á¡áá¬á§áá¡á á¬áá á¢ááá",
@@ -2013,7 +2013,7 @@
"delete-toobig": "áá áááá áá¡ á«ááááá áá á«ááá áá¡á¢áá áá áááá©ááá, $1 {{PLURAL:$1|ááá á¡áááá|ááá á¡áááááá|ááá á¡ááááá}} ááá¢á. ááá¡á á¬áá¨áá áááá á«ááá {{SITENAME}}-áá¡ ááá áá¥á¢á£á áá áá£á¨ááááá¡ á£áá á£ááááá§áá¤áá¡áááá¡.",
"delete-warning-toobig": "áá áááá áá¡ á«ááááá áá á«ááá áá¡á¢áá áá áááá©ááá, $1 {{PLURAL:$1|ááá á¡áááá|ááá á¡áááááá|ááá á¡ááááá}} ááá¢á.\nááá¡áá á¬áá¨ááá á¨áá¡áá«ááá áááááá¬áááá¡ á¡ááá¢áá¡ áááááªáááá ááááá¡ {{SITENAME}} áá áááá áá¥á¢á£áá áá£á¨áááá;\náááá¥ááááá á¡áá¤á áá®áááá.",
"deleteprotected": "áá¥ááá áá á¨áááá«áááá áá áááá ááá¡ á¬áá¨áá, á ááááá áá¡ áááªá£ááá.",
- "deleting-backlinks-warning": "'''ááá¤á áá®ááááá:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|á¡á®áá áááá áááá]] áááááá¨áá ááá£ááá áá á¬áá¡áá¨ááá áááá áááá.",
+ "deleting-backlinks-warning": "ááá¤á áá®ááááá: [[Special:WhatLinksHere/{{FULLPAGENAME}}|á¡á®áá áááá áááá]] áááááá¨áá ááá£ááá áá á¬áá¡áá¨ááá áááá áááá.",
"rollback": "áªáááááááááá¡ ááá£á¥áááá",
"rollbacklink": "á¡á¬á áá¤á ááá£á¥áááá",
"rollbacklinkcount": "$1 {{PLURAL:$1|áªáááááááá¡|áªáááááááá¡}} ááá£á¥áááá",
@@ -2038,6 +2038,7 @@
"changecontentmodel-nodirectediting": "$1 á¨ááááá á¡áá¡ áááááá¡ áá áá¥áá¡ ááá ááááá á á áááá¥á¢áá áááá¡ áá®áá ááááá á",
"log-name-contentmodel": "á¨ááááá á¡áá¡ ááááááá¡ á¨ááªáááá¡ áá£á áááá",
"log-description-contentmodel": "áááá ááá¡ á¨ááááá á¡áá¡ áááááááá áááááá¨áá ááá£áá ááááááááá",
+ "logentry-contentmodel-new": "$1-á {{GENDER:$2|á¨áá¥ááá}} áááá áá $3, áá á-á¡á¢ááááá á¢á£áá ááááááá \"$5\"",
"logentry-contentmodel-change": "$1-áá {{GENDER:$2|á¨ááªáááá}} $3-áá¡ áááá ááá¡ á¨ááááá á¡áá¡ áááááá \"$4\"-ááá \"$5\"-áá",
"logentry-contentmodel-change-revertlink": "áááá á£áááá",
"logentry-contentmodel-change-revert": "áááá á£áááá",
@@ -3332,7 +3333,7 @@
"tags-delete-not-allowed": "ááá¤áá áááááá áááá¡ááá¦áá á£áá á¢ááááá, áá á¨ááá«áááá áá§áá¡ á¬áá¨áááá, áá£áá ááá¤áá ááááá áá¨ááá áá áá áá«áááá áááá¡ ááááááááá¡ á¨áá¡áá«áááááááá¡",
"tags-delete-not-found": "áá¦ááá¨ááá â$1â áá áá á¡ááááá¡.",
"tags-delete-too-many-uses": "á¢ááá \"$1\" ááá¦ááá£ááá $2 ááá á¡áááááá, á á᪠áááá¡ ááá¨áááá¡, á áá ááá áá á¨ááá«áááá áá§áá¡ á¬áá¨áááá",
- "tags-delete-warnings-after-delete": "á¢ááá â$1â á¬áá ááá¢áááá áá¥áá á¬áá¨áááá, áá£ááªá áá¦ááá©ááááá áá§á á¨áááááá á¨áá¢á§ááááááá: $2",
+ "tags-delete-warnings-after-delete": "á¢ááá â$1â á¬ááá¨ááá, áá£ááªá áá¦ááá©áááááá á¨áááááá {{PLURAL:$2|á¨áá¢á§ááááááá|á¨áá¢á§ááááááááá}}:",
"tags-activate-title": "á¢áááá¡ áááá¥á¢áá£á ááá",
"tags-activate-question": "áá¥ááá áªáááááá ááá¡áááá£á áááá¡ áááá¥á¢áá£á áááá¡ â$1â.",
"tags-activate-reason": "áááááá:",
@@ -3361,7 +3362,7 @@
"tags-edit-revision-legend": "á¢áááááá¡ ááááá¢ááá áá á¬áá¨áá {{PLURAL:$1|áá¡ ááááá¡ááá¯áá|á§áááá $1 ááááá¡ááá¯áá}}",
"tags-edit-logentry-legend": "á¢áááááá¡ ááááá¢ááá áá á¬áá¨áá {{PLURAL:$1|áá¡ á©áááá¬áá á áá£á áááá¨á|á§áááá $1 áá£á ááááá¡ á©áááá¬áá á}}",
"tags-edit-existing-tags": "áá á¡ááá£áá ááá¡áááá£á ááááá:",
- "tags-edit-existing-tags-none": "''áá á''",
+ "tags-edit-existing-tags-none": "áá á ",
"tags-edit-new-tags": "áá®ááá áá¦ááá¨ááá:",
"tags-edit-add": "áá áá¦ááá¨áááá¡ ááááá¢ááá:",
"tags-edit-remove": "áá áá¦ááá¨áááá¡ á¬áá¨áá:",
@@ -3371,7 +3372,7 @@
"tags-edit-reason": "áááááá:",
"tags-edit-revision-submit": "áªáááááááááá¡ ááá¦ááá {{PLURAL:$1|áá¡ ááááá¡ááá¯áá|$1 ááááá¡ááá¯áááá}}",
"tags-edit-logentry-submit": "ááá¦ááá£áá áªááááááááá {{PLURAL:$1|áá¡ á©áááá¬áá áá áá£á áááá¨á|$1 á©áááá¬áá áááá¡ áá£á áááá}}",
- "tags-edit-success": "áªááááááááá á¬áá ááá¢ááá£ááá áá¥áá ááá¦ááá£áá",
+ "tags-edit-success": "áªááááááááá ááá¦ááá£ááá.",
"tags-edit-failure": "áªááááááááá áá áá¥áá á¨áááá®á£áá: $1",
"tags-edit-nooldid-title": "áá áá áá¡ áááªááá£áá á¡áááááá ááá á¡áá",
"tags-edit-nooldid-text": "áá á¤á£áá¥áªááá¡ á¨áá¡áá¡á á£áááááá áá¥ááá áá ááá¥áá áááªááá£áá á¡áááááá ááá á¡áá, áá áááááááá£áá ááá á¡áá áá áá á¡ááááá¡",
diff --git a/languages/i18n/kab.json b/languages/i18n/kab.json
index d3db536097..c9039a174a 100644
--- a/languages/i18n/kab.json
+++ b/languages/i18n/kab.json
@@ -1083,7 +1083,7 @@
"recentchanges-label-bot": "D-arubut id yeseqdacen abeddel agi",
"recentchanges-label-unpatrolled": "Abeddel agi mazal yesÉa aselken.",
"recentchanges-label-plusminus": "Tiddi n usebtar tetwebeddel s umá¸an agi n itamá¸anen.",
- "recentchanges-legend-heading": "'''Aglam :'''",
+ "recentchanges-legend-heading": "Aglam : ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zeṠdaɣen [[Special:NewPages|umuɣ n isebtar imaynuten]]).",
"recentchanges-legend-plusminus": "(''± 123'')",
"rcnotefrom": "Deg ukessar llan ibeddlen seg wasmi '''$2''' (ar '''$1''').",
diff --git a/languages/i18n/khw.json b/languages/i18n/khw.json
index e76e78fb27..8d9a6ad91c 100644
--- a/languages/i18n/khw.json
+++ b/languages/i18n/khw.json
@@ -699,7 +699,7 @@
"recentchanges-label-bot": "Ú¾ÛÛ Ø§ÛÚÛÙ¹Ù Ø®Ùد کار بÙٹ٠زرÛعا اÙجاÙ
دÛÙÙÙ ÛÙئÛ",
"recentchanges-label-unpatrolled": "Ú¾ÛÛ ØªØ±Ù
ÛÙ
Ù Ú¾Ù
ÙÙÛÛ Ù¾Øª Ù
راجعت(Patrolled) Ú©ÙرÙÙÙ Ù٠بÛØªÛ Ø´Ûر",
"recentchanges-label-plusminus": "صÙØ٠سائز تبدÛÙ Ø´Ø¯Û Ø¨ÙØاظ بائٹ Ù
Ùدار",
- "recentchanges-legend-heading": "'''ÙÛجÙÚ:'''",
+ "recentchanges-legend-heading": "ÙÛجÙÚ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ú¾Ù
Ù Ø¯Û ÙÙÚÛ [[Special:NewPages|list of new pages]])",
"rcnotefrom": "Ú¾ÛÛ Ù
ÙÚا '''$2''' Ú©ÙرÙÙ٠بÛر٠تبدÛÙÛا٠تÙصÛÙات Ø´ÛÙÛ ('''$1''' تبدÛÙÛا٠پشÛÙ٠بÙÙÛاÙ)Û",
"rclistfrom": "$3 $2 ÙÙغ تبدÛÙÛاں پشÛÚ© شرÙع Ú©ÙرÛ",
@@ -974,10 +974,10 @@
"filemissing": "Ùائ٠ÙÛÚ©Û",
"thumbnail_error": "$1 Ú
Û٠ساÛز٠ھÙٹ٠ساÙزÛکا Ù
سئÙÛ",
"tooltip-pt-userpage": "ØªÛ ØµØ§Ø±ÙÛ ØµÙØÛ",
- "tooltip-pt-mytalk": "ØªÛ ØµÙØÛ Ù
Ø´ÙÙÙÚ¯Û",
+ "tooltip-pt-mytalk": "{{GENDER:|تÛ}} صÙØÛ Ù
Ø´ÙÙÙÚ¯Û",
"tooltip-pt-preferences": " ØªÛ ØªØ±Ø¬ÛØات",
"tooltip-pt-watchlist": "Ú¾ØªÛ ØµÙØات٠ÙÛرست Ú©Û Ú¾ØªÛتا٠تبدÛÙÛ ØªÛ Ø²ÛرÙÙظر Ø´ÛÙÛ",
- "tooltip-pt-mycontris": "ØªÛ Ú©Ø§Ø±Ø¯Ù Ú©ÙرÙ
ا٠ÙÛرست",
+ "tooltip-pt-mycontris": "{{GENDER:|تÛ}} کارد٠کÙرÙ
ا٠ÙÛرست",
"tooltip-pt-login": "ØªÛ Ø¨ÚÛ Ø¯Ø§Ø®ÙÙ ÙÙØ´ØªÛ Ø¨ÛÚ© جÙ
Ø´ÛØ±Ø ÙÛÚ©Ù Ú¾ÛÛ Ø¶Ø±ÙØ±Û ÙÙ",
"tooltip-pt-logout": "خارج بÙس",
"tooltip-pt-createaccount": "ØªØªÛ Ø¯Ø¹Ùت دÛÙÙ٠بÙÛØ§Ù Ú©Û Ú©Ú¾Ø§ØªÛ Ø³Ø§ÙزاÙÛÛÙÛÚ©Ù Ú©Ú¾Ø§ØªÛ Ø³Ø§ÙزÛÚ© ÙازÙ
Û ÙÙ-",
@@ -1006,7 +1006,7 @@
"tooltip-t-recentchangeslinked": "Ú¾ÛÛ ØµÙØÛ٠سÙÙ
Ù
ربÙØ· صÙØØ§ØªÛ Ø¨Ûر٠ØاÙÛÛ ØªØ¨Ø¯ÛÙÛ",
"tooltip-feed-rss": "Ú¾ÛÛ ØµÙØ٠بÚÛ Ø§Ø³Ø³ Ø®Ùرد",
"tooltip-feed-atom": "Ú¾ÛÛ ØµÙØ٠بÚÛ Ø¢Ù¹ÙÙ
ÙÛÚ",
- "tooltip-t-contributions": "ÙÙغ تدÙÛÙ",
+ "tooltip-t-contributions": "Ù
ضÙ
ÙÙÙ Ùسٹ {{GENDER:$1|Ú¾ÛÛ ØµØ§Ø±Ù}}Ù",
"tooltip-t-emailuser": "Ú¾ÛÛ Ù
Ù
بارÙت بشÙÛ Ú©ØºØ§Ø²(Ø§Û Ù
ÛÙ) اÙÚ
اÙÛ",
"tooltip-t-upload": "ÙائÙ٠اپÙÙÚ Ú©ÙرÛ",
"tooltip-t-specialpages": "س٠خاص صÙØات٠ÙÛرست",
diff --git a/languages/i18n/kk-cyrl.json b/languages/i18n/kk-cyrl.json
index baedef7a30..a4a679f82f 100644
--- a/languages/i18n/kk-cyrl.json
+++ b/languages/i18n/kk-cyrl.json
@@ -444,7 +444,7 @@
"nocookieslogin": "ÒаÑÑÑÑÑÑ ÐºÑÑÑ Ò¯ÑÑн {{SITENAME}} ÑоÑабÑнда «cookies» деген ÒолданÑладÑ.\nСÑзде «cookies» Ó©ÑÑÑÑлген.\nÐ¡Ð¾Ð½Ñ ÒоÑÑÒ£Ñз да кÑÑÑÐ´Ñ ÒайÑа байÒап көÑÑÒ£Ñз.",
"nocookiesfornew": "ÐнÑÒ£ ÒайнаÑÑн ÑаÑÑай алмаÒандÑÒÑан ÒаÑÑÑÑÑÑнÑÒ£ аккаÑнÑÑ ÑÑÑкелмедÑ. «Cookies» ÒоÑÑлÑп ÑÒ±ÑÒанÑна көз жеÑкÑзÑÒ£Ñз, беÑÑÑ ÒайÑа жаңаÑÑÑÒ£Ñз жÓне ÑаÒÑ Ð±Ð°Ð¹Òап көÑÑÒ£Ñз.",
"noname": "СÑзде жаÑÐ°Ð¼Ð´Ñ ÒаÑÑÑÑÑÑ Ð°ÑÑ Ð°Ð½ÑÒÑалмаÒан.",
- "loginsuccesstitle": "ÐÑÑÑÑÒ£Ñз ÑÓÑÑÑ Ð±Ð¾Ð»Ð´Ñ.",
+ "loginsuccesstitle": "ÐÑÑдÑÒ£Ñз.",
"loginsuccess": "СÑз ÐµÐ½Ð´Ñ {{SITENAME}} жобаÑÑна «$1» ÑеÑÑнде кÑÑдÑÒ£Ñз. ",
"nosuchuser": "Ðұнда «$1» деп аÑалÒан ÒаÑÑÑÑÑÑ ÑÑÑкелмеген.\nÒаÑÑÑÑÑÑ Ð°ÑÑаÑÑ ÐºÑÑÑ ÓÑÑпÑеÑден ÑÒ±ÑÑ ÐºÐµÑек.\nÐмлеңÑÐ·Ð´Ñ ÑекÑеÑÑÒ£Ñз немеÑе [[Special:UserLogin/signup|жаңа ÑÑÑÐºÐµÐ»Ð³Ñ Ð¶Ð°ÑаңÑз]].",
"nosuchusershort": "Ðұнда «$1» деп аÑалÒан ÒаÑÑÑÑÑÑ ÑÑÑкелмеген.\nÐмлеңÑÐ·Ð´Ñ ÑекÑеÑÑÒ£Ñз.",
@@ -498,8 +498,12 @@
"newpassword": "Ðаңа ÒÒ±Ð¿Ð¸Ñ ÑөзÑÒ£Ñз:",
"retypenew": "Ðаңа ÒÒ±Ð¿Ð¸Ñ ÑөзÑÒ£ÑÐ·Ð´Ñ ÒайÑалаңÑз:",
"resetpass_submit": "ÒÒ±Ð¿Ð¸Ñ ÑÓ©Ð·Ð´Ñ ÒойÑÒ£Ñз да кÑÑÑÒ£Ñз",
- "changepassword-success": "ÒÒ±Ð¿Ð¸Ñ ÑөзÑÒ£Ñз ÑÓÑÑÑ Ó©Ð·Ð³ÐµÑÑÑлдÑ!",
+ "changepassword-success": "ÒÒ±Ð¿Ð¸Ñ ÑөзÑÒ£Ñз өзгеÑÑÑлдÑ!",
"changepassword-throttled": "СÑз жаÒÑнда кÑÑÑге ÑÑм көп ÓÑÐµÐºÐµÑ Ð¶Ð°ÑадÑÒ£Ñз.\nÒайÑа байÒап көÑÑ Ò¯ÑÑн $1 ÑаÒÑÑ ÐºÒ¯Ñе ÑÒ±ÑÑÒ£Ñз.",
+ "botpasswords-label-update": "ÐаңаÑÑÑ",
+ "botpasswords-label-cancel": "ÐолдÑÑмаÑ",
+ "botpasswords-label-delete": "ÐоÑ",
+ "botpasswords-label-resetpassword": "ÒÒ±Ð¿Ð¸Ñ ÑÓ©Ð·Ð´Ñ ÒалпÑна кеÑÑÑÑÑ",
"resetpass_forbidden": "ÒÒ±Ð¿Ð¸Ñ Ñөз өзгеÑÑÑлмейдÑ",
"resetpass-no-info": "Ðұл беÑке ÑÑкелей ÐµÐ½Ñ Ò¯ÑÑн жүйеге кÑÑÑÑÒ£Ñз кеÑек.",
"resetpass-submit-loggedin": "ÒÒ±Ð¿Ð¸Ñ ÑÓ©Ð·Ð´Ñ Ó©Ð·Ð³ÐµÑÑÑ",
@@ -779,9 +783,9 @@
"revdelete-unsuppress": "ÒалпÑна келÑÑÑÑлген ÑүзеÑÑлеÑден ÑиÑмдаÑÐ´Ñ Ð°Ð»Ð°ÑÑаÑ",
"revdelete-log": "СебебÑ:",
"revdelete-submit": "ÐөлекÑенген {{PLURAL:$1|ÑүзеÑÑге|ÑүзеÑÑлеÑге}} ÒолданÑ",
- "revdelete-success": "'''ТүзеÑÑ ÐºÓ©ÑÑнÑÑÑ ÑÓÑÑÑ Ð¶Ð°Ò£Ð°ÑÑÑлдÑ.'''",
+ "revdelete-success": "ТүзеÑÑ ÐºÓ©ÑÑнÑÑÑ Ð¶Ð°Ò£Ð°ÑÑÑлдÑ.",
"revdelete-failure": "'''ТүзеÑÑ ÐºÓ©ÑÑнÑÑÑ Ð¶Ð°Ò£Ð°ÑÑÑлмадÑ:'''\n$1",
- "logdelete-success": "'''ÐÑÑнал көÑÑнÑÑÑ ÑÓÑÑÑ ÒойÑлдÑ.'''",
+ "logdelete-success": "ÐÑÑнал көÑÑнÑÑÑ ÒойÑлдÑ.",
"logdelete-failure": "ÐÑÑнал көÑÑнÑлÑÐ³Ñ Ð¾ÑнаÑÑлмадÑ:\n$1",
"revdel-restore": "көÑÑнÑÑÑн өзгеÑÑÑ",
"pagehist": "ÐÐµÑ ÑаÑиÑ
Ñ",
@@ -1172,7 +1176,7 @@
"recentchanges-label-bot": "Ðұл Ó©Ò£Ð´ÐµÐ¼ÐµÐ½Ñ Ð±Ð¾Ñ Ð¶Ð°ÑадÑ.",
"recentchanges-label-unpatrolled": "Ðұл өңдеме ÓÐ»Ñ ÑекÑеÑÑден Ó©ÑпедÑ.",
"recentchanges-label-plusminus": "ÐÐ°Ð¹Ñ Ð±Ð¾Ð¹ÑнÑа беÑÑÑÒ£ өзгеÑÑÑ Ó©Ð»ÑемÑ",
- "recentchanges-legend-heading": "'''ШаÑÑÑÑ Ð±ÐµÐ»Ð³ÑлеÑ:'''",
+ "recentchanges-legend-heading": "ШаÑÑÑÑ Ð±ÐµÐ»Ð³ÑлеÑ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ò: [[Special:NewPages|бөлек беÑÑе]])",
"recentchanges-legend-plusminus": "(±123 )",
"recentchanges-submit": "ÐÓ©ÑÑеÑÑ",
@@ -1629,10 +1633,10 @@
"apihelp-no-such-module": "«$1» модÑÐ»Ñ ÑабÑлмадÑ.",
"apisandbox-submit": "СұÑанÑÑ Ð¶Ð°ÑаÑ",
"apisandbox-reset": "ТазаÑÑÑ",
- "apisandbox-examples": "ÐÑÑалÑ",
- "apisandbox-results": "ÐÓÑижеÑÑ",
+ "apisandbox-examples": "ÐÑÑалдаÑ",
+ "apisandbox-results": "ÐÓÑижелеÑ",
"apisandbox-request-url-label": "URL ÑÒ±ÑанÑÑÑ",
- "apisandbox-request-time": "СұÑанÑÑ ÑаÒÑÑÑ: $1",
+ "apisandbox-request-time": "СұÑанÑÑ ÑаÒÑÑÑ: {{PLURAL:$1|$1 мÑ}}",
"booksources": "ÐÑÑап ÒайнаÑлаÑÑ",
"booksources-search-legend": "ÐÑÑап ÒайнаÑлаÑÑн ÑздеÑ",
"booksources-search": "ÐздеÑ",
@@ -1648,6 +1652,10 @@
"log-title-wildcard": "ÐÑна мÓÑÑннен баÑÑалÑÑÑн ÑаÒÑÑÑп аÑÑаÑÑн ÑздеÑ",
"showhideselectedlogentries": "ТаңдалÒан жÑÑнал енгÑзÑлÑмдеÑÑн көÑÑеÑÑ/жаÑÑÑÑ",
"log-edit-tags": "ТаңдалÒан жÑÑнал жазбалаÑÑнÑÒ£ Ó©Ò£Ð´ÐµÑ Ð±ÐµÐ»Ð³ÑлеÑÑ",
+ "checkbox-select": "ТаңдаÑ: $1",
+ "checkbox-all": "ÐаÑлÑÒÑ",
+ "checkbox-none": "ÐÑÒандай",
+ "checkbox-invert": "ÐеÑÑÑÑнÑе",
"allpages": "ÐаÑлÑÒ Ð±ÐµÑÑеÑ",
"nextpage": "ÐелеÑÑ Ð±ÐµÑке ($1)",
"prevpage": "ÐлдÑÒ£ÒÑ Ð±ÐµÑке ($1)",
@@ -1709,6 +1717,7 @@
"listgrouprights-namespaceprotection-header": "ÐÑÑм кеңÑÑÑÑÐ³Ñ ÑекÑелÑмдеÑÑ",
"listgrouprights-namespaceprotection-namespace": "ÐÑÐ°Ñ ÐºÐµÒ£ÑÑÑÑгÑ",
"listgrouprights-namespaceprotection-restrictedto": "ÒаÑÑÑÑÑÑÒа Ó©Ò£Ð´ÐµÑ Ò¯ÑÑн беÑÑлген ÒÒ±ÒÑÒ(ÑаÑ)",
+ "listgrants-rights": "ÒÒ±ÒÑÒÑаÑ",
"trackingcategories": "СанаÑÑаÑÐ´Ñ ÒадаÒалаÑ",
"trackingcategories-summary": "Ðұл Ð±ÐµÑ ÐедиаУики баÒдаÑламалÑÒ Ð¶Ð°ÑаÒÑамаÑÑнан авÑомаÑÑÑ ÑÒ¯Ñде ÑолÑÑÑÑлаÑÑн ÑанаÑÑаÑÐ´Ñ ÐµÑепÑеп ÑÑзедÑ. ÐлаÑдÑÒ£ еÑÑмдеÑÑн {{ns:8}} еÑÑм кеңÑÑÑÑгÑÐ½Ð´ÐµÐ³Ñ ÑÓÐ¹ÐºÐµÑ Ð¶Ò¯Ð¹Ðµ Ñ
абаÑлаÑÑ Ð°ÑÒÑÐ»Ñ Ó©Ð·Ð³ÐµÑÑÑге боладÑ.",
"trackingcategories-msg": "СанаÑÑÑ ÒадаÒалаÑ",
@@ -1784,6 +1793,7 @@
"wlshowhideanons": "Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð´Ñ ÒаÑÑÑÑÑÑлаÑ",
"wlshowhidepatr": "ÑекÑеÑÑлген өңдемелеÑ",
"wlshowhidemine": "өңдемелеÑÑм",
+ "wlshowhidecategorization": "ÐÐµÑ ÑанаÑÑаÑлаÑÑ",
"watchlist-options": "ÐаÒÑÐ»Ð°Ñ ÑÑзÑмÑнÑÒ£ бапÑаÑлаÑÑ",
"watching": "ÐаÒÑлаÑдаâ¦",
"unwatching": "ÐаÒÑламаÑдаâ¦",
@@ -2899,7 +2909,7 @@
"size-bytes": "$1 байÑ",
"size-kilobytes": "$1 ÐÐ",
"lag-warn-normal": "{{PLURAL:$1|ÑекÑнÑÑа|ÑекÑнÑÑа}} $1 Ð¶Ð°Ò£Ð°Ð»Ð°Ñ Ó©Ð·Ð³ÐµÑÑÑÑÐµÑ Ð±Ò±Ð» ÑÑзÑмде көÑÑеÑÑлмеÑÑ Ð¼Ò¯Ð¼ÐºÑн.",
- "lag-warn-high": "ÐеÑекÒÐ¾Ñ ÑеÑвеÑÑ ÐºÓ©Ð¿ кеÑÑгÑÑ ÑебебÑнен, $1 {{PLURAL:$1|ÑекÑнÑÑа|ÑеÑнÑÑа}} Ð¶Ð°Ò£Ð°Ð»Ð°Ñ Ó©Ð·Ð³ÐµÑÑÑÑÐµÑ Ð±Ò±Ð» ÑÑзÑмде көÑÑеÑÑлмеÑÑ Ð¼Ò¯Ð¼ÐºÑн.",
+ "lag-warn-high": "ÐеÑекÒÐ¾Ñ ÑеÑвеÑÑ ÐºÓ©Ð¿ кеÑÑгÑÑ ÑебебÑнен, $1 {{PLURAL:$1|ÑекÑндÑан|ÑекÑндÑан}} Ð¶Ð°Ò£Ð°Ð»Ð°Ñ Ó©Ð·Ð³ÐµÑÑÑÑÐµÑ Ð±Ò±Ð» ÑÑзÑмде көÑÑеÑÑлмеÑÑ Ð¼Ò¯Ð¼ÐºÑн.",
"watchlistedit-normal-title": "ÐаÒÑÐ»Ð°Ñ ÑÑзÑÐ¼Ð´Ñ Ó©Ò£Ð´ÐµÑ",
"watchlistedit-normal-legend": "ÐаÒÑÐ»Ð°Ñ ÑÑзÑмÑнен ÑаÒÑÑÑп аÑÑаÑÑн алаÑÑаÑ",
"watchlistedit-normal-explain": "ÐаÒÑÐ»Ð°Ñ ÑÑзÑмÑÒ£ÑÐ·Ð´ÐµÐ³Ñ ÑаÒÑÑÑп аÑÑÐ°Ñ Ñөменде көÑÑеÑÑледÑ.\nТаÒÑÑÑп аÑÑн алаÑÑÐ°Ñ Ò¯ÑÑн, бүйÑÑ ÐºÓ©Ð·Ð³Ðµ ÒÒ±ÑÐ±ÐµÐ»Ð³Ñ ÑалÑÒ£Ñз, жÓне \"{{int:Watchlistedit-normal-submit}}\" Ð´ÐµÐ³ÐµÐ½Ð´Ñ Ð½Ò±ÒÑÒ£Ñз.\nТаÒÑ Ð´Ð° [[Special:EditWatchlist/raw|Òам ÑÑзÑÐ¼Ð´Ñ Ó©Ò£Ð´ÐµÐ¹]] алаÑÑз.",
diff --git a/languages/i18n/km.json b/languages/i18n/km.json
index fffcfa3744..e298a9834c 100644
--- a/languages/i18n/km.json
+++ b/languages/i18n/km.json
@@ -1097,7 +1097,7 @@
"recentchanges-label-bot": "áá¶áááááááááááááá¼ááá¶ááááá¾á¡á¾áááááá¼ááááá",
"recentchanges-label-unpatrolled": "áá¶áááááááááááá·ááá¶áááááá¼ááá¶ááááá¶ááá",
"recentchanges-label-plusminus": "ááá áááááááááá¼ááá¶ááááá¶áááááá¼ááá·ááá¶á
ááá½ááá",
- "recentchanges-legend-heading": "''áááááááááá¶ááá'''",
+ "recentchanges-legend-heading": "áááááááááá¶ááá ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (áá¾áááááááá¼á [[Special:NewPages|ááááá¸ááááááááá¸]])",
"rcnotefrom": "áá¶ááááááááááá¶ááááá¶áááááá¼ááá¶áá¶áá·áá
á¶áááá¶áááḠ$4 $3 (áááá á¶áá¢áá·áááá¶á
ááá½á $1 )á",
"rclistfrom": "áááá á¶áááááá¶áááááá¼ááááá¸áá
á¶áááá¶áááḠ$3 $2",
diff --git a/languages/i18n/kn.json b/languages/i18n/kn.json
index 5f40f33df8..a090015f07 100644
--- a/languages/i18n/kn.json
+++ b/languages/i18n/kn.json
@@ -392,7 +392,7 @@
"yourname": "ನಿಮà³à²® ಬಳà²à³à²¯ ಹà³à²¸à²°à³",
"userlogin-yourname": "ಬಳà²à³à²¦à²¾à²° ಹà³à²¸à²°à³",
"userlogin-yourname-ph": "ನಿಮà³à²® ಸದಸà³à²¯à²¨à²¾à²® ಬರà³à²¯à²¿à²°à²¿",
- "createacct-another-username-ph": "ಸದಸà³à²¯à²¨à²¾à²® (\"ಯà³à²¸à²°à³à²¨à³à²®à³\") ಬರಿರಿ",
+ "createacct-another-username-ph": "ಬಳà²à³à²¦à²¾à²°à²° ಹà³à²¸à²°à³ ಬರà³à²¯à²¿à²°à²¿",
"yourpassword": "ನಿಮà³à²® ಪà³à²°à²µà³à²¶à²ªà²¦",
"userlogin-yourpassword": "ಪà³à²°à²µà³à²¶à²ªà²¦",
"userlogin-yourpassword-ph": "ನಿಮà³à²® ಪà³à²°à²µà³à²¶à²ªà²¦ ನಮà³à²¦à²¿à²¸à²¿",
@@ -431,10 +431,10 @@
"createacct-realname": "ನಿà²à²µà²¾à²¦ ಹà³à²¸à²°à³ (à²à²à³à²à²¿à²)",
"createaccountreason": "à²à²¾à²°à²£:",
"createacct-reason": "à²à²¾à²°à²£",
- "createacct-reason-ph": "ನà³à²µà³ ಯಾà²à³ à²à²¨à³à²¨à³ à²à²à²¦à³ à²à²¾à²¤ ಮಾಡà³à²¤ à²à²¦à³à²¦à³à²°à²¿ ?",
+ "createacct-reason-ph": "ನà³à²µà³ ಯಾà²à³ à²à²¨à³à²¨à³à²à²¦à³ à²à²¾à²¤à³ ತà³à²°à³à²¯à³à²¤à³à²¤à²¿à²¦à³à²¦à³à²°à²¿",
"createacct-submit": "à²à²¾à²¤à³à²¯à²¨à³à²¨à³ ಸà³à²·à³à²à²¿à²¸à²¿",
"createacct-another-submit": "à²à²¨à³à²¨à³ à²à²à²¦à³ à²à²¾à²¤ ಮಾಡಿ",
- "createacct-benefit-heading": "{{SITENAME}} ನಿಮà³à²®à²¨à³à²¤à²µà³ à²à²¨à²°à²¿à²à²¦ ಮಾಡಿದà³",
+ "createacct-benefit-heading": "{{SITENAME}} ನಿಮà³à²®à²à²¤à²¹ à²à²¨à²°à²¿à²à²¦à²²à³ ಮಾಡಿದà³à²¦à³.",
"createacct-benefit-body1": "{{PLURAL:$1|ಸà²à²ªà²¾à²¦à²¨à³|ಸà²à²ªà²¾à²¦à²¨à³à²à²³à³}}",
"createacct-benefit-body2": "{{PLURAL:$1|ಪà³à²|ಪà³à²à²à²³à³}}",
"createacct-benefit-body3": "{{PLURAL:$1|à²à³à²¡à³à²à³|à²à³à²¡à³à²à³à²à²³à³}}",
@@ -942,7 +942,7 @@
"recentchanges-label-bot": "ಠಸà²à²ªà²¾à²¦à²¨à³à²¯à²¨à³à²¨à³ à²à²à²¦à³ ಬಾà²à³ ಮಾಡಿದà³",
"recentchanges-label-unpatrolled": "ಠಸà²à²ªà²¾à²¦à²¨à³à²¯à²¨à³à²¨à³ à²à²¨à³à²¨à³ ಪರà³à²à³à²·à³à²à³ à²à²³à²ªà²¡à²¿à²¸à²¿à²²à³à²²",
"recentchanges-label-plusminus": "ಪà³à²à²¦ à²à²¾à²¤à³à²°à²µà³ à²à²·à³à²à³ ಸà²à²à³à²¯à³à²¯ ಬà³à²à³âà²à²³à²¿à²à²¦ ಬದಲಾಯಿಸಲà³à²ªà²à³à²à²¿à²¦à³",
- "recentchanges-legend-heading": "'''ಪರಿವಿಡಿ:'''",
+ "recentchanges-legend-heading": "ಪರಿವಿಡಿ: ",
"rcnotefrom": "'''$2''' à²à²à²¦ à²à²à²¿à²°à³à²µ ಬದಲಾವಣà³à²à²³à³ à²à³à²³à²à²¿à²µà³ (à²à³à²¨à³à²¯ '''$1'''ರವರà³à²à³ ತà³à²°à²¿à²¸à²²à²¾à²à²¿à²¦à³).",
"rclistfrom": "$3 $2 à²à²à²¦ ಪà³à²°à²¾à²°à²à²à²¿à²¸à²¿ ಮಾಡಲಾದ ಬದಲಾವಣà³à²à²³à²¨à³à²¨à³ ನà³à²¡à²¿",
"rcshowhideminor": "à²à²¿à²à³à²à²ªà³à²à³à² ಬದಲಾವಣà³à²à²³à²¨à³à²¨à³ $1",
diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json
index 757d4b0dd5..7ab3abbe01 100644
--- a/languages/i18n/ko.json
+++ b/languages/i18n/ko.json
@@ -1297,7 +1297,7 @@
"recentchanges-label-bot": "ë´ì´ ìíí í¸ì§",
"recentchanges-label-unpatrolled": "ìì§ ì ê²íì§ ìì í¸ì§",
"recentchanges-label-plusminus": "ë°ì´í¸ë¡ í기ë ë°ë 문ì í¬ê¸°",
- "recentchanges-legend-heading": "'''ë²ë¡:'''",
+ "recentchanges-legend-heading": "ë²ë¡: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ì 문ì 목ë¡]]ë ë³´ì¸ì)",
"recentchanges-legend-plusminus": "(±123 )",
"recentchanges-submit": "보기",
diff --git a/languages/i18n/krc.json b/languages/i18n/krc.json
index 0a39946ad6..dd0a5b2a90 100644
--- a/languages/i18n/krc.json
+++ b/languages/i18n/krc.json
@@ -1074,7 +1074,7 @@
"recentchanges-label-bot": "ÐÑ ÑÑÑлендиÑиÑÐ½Ñ Ð±Ð¾Ñ ÑÑгенди",
"recentchanges-label-unpatrolled": "ÐÑ ÑÑÑлендиÑÐ¸Ñ Ð°Ð»ÐºÑÑн паÑÑÑÐ»Ñ ÑÑилинмегенди",
"recentchanges-label-plusminus": "ÐеÑни ÑлÑеми бÑллай Ð±Ð¸Ñ Ð±Ð°Ð¹ÑÑ
а ÑÑÑленнгенди",
- "recentchanges-legend-heading": "'''Ðегенда: '''",
+ "recentchanges-legend-heading": "Ðегенда: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (кÑаÑагÑÑз: [[Special:NewPages|Ð´Ð¶Ð°Ð½Ð³Ñ Ð±ÐµÑлени ÑизмеÑи]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "ТÑбÑÑекде $2 баÑлаб ($1 деÑи) ÑÑÑлендиÑиÑле кÑÑÑнедиле",
diff --git a/languages/i18n/ksh.json b/languages/i18n/ksh.json
index 22f884c876..e07c931352 100644
--- a/languages/i18n/ksh.json
+++ b/languages/i18n/ksh.json
@@ -84,10 +84,10 @@
"june": "Juni",
"july": "Juli",
"august": "Aujuss",
- "september": "September",
+ "september": "Septämber",
"october": "Oktober",
- "november": "November",
- "december": "Dezember",
+ "november": "Novämber",
+ "december": "Dezämber",
"january-gen": "Janewar",
"february-gen": "Febrewar",
"march-gen": "Määz",
@@ -96,10 +96,10 @@
"june-gen": "Juni",
"july-gen": "Juli",
"august-gen": "Aujuss",
- "september-gen": "September",
+ "september-gen": "Septämber",
"october-gen": "Oktober",
- "november-gen": "November",
- "december-gen": "Dezember",
+ "november-gen": "Novämber",
+ "december-gen": "Dezämber",
"jan": "Jan",
"feb": "Feb",
"mar": "Mäz",
@@ -385,6 +385,8 @@
"virus-scanfailed": "Dat Söhke eà donevve jejange, dä Kood för dä Fähler es â$1â.",
"virus-unknownscanner": "Dat Projamm fö noh Komjuterviere ze sööke kenne mer nit:",
"logouttext": "'''Jäz bes de usjelogg'''\n\nKünnt sin, dat De de ein udder andere Sigg noch wigger aanjezeich kriÃ, wie wann de noch enjelogg wörs. Dun Dingem Brauser singe Cache fottschmieÃe udder läddesch maache, öm uà dä Nommer erus ze kumme!",
+ "cannotlogoutnow-title": "UÃlogge jeiht jrahd nit",
+ "cannotlogoutnow-text": "UÃlogge jeiht jrahd nit wam_mer $1 bruch.",
"welcomeuser": "Wellkumme $1!",
"welcomecreation-msg": "Dinge Zohjang es enjerescht.\nWann De wells, künnts De Ding [[Special:Preferences|Enschtällonge aanpaÃe]].",
"yourname": "Metmaacher_Naame:",
@@ -401,6 +403,8 @@
"remembermypassword": "Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloà för hück}})",
"userlogin-remembermypassword": "Op Duur enlogge",
"userlogin-signwithsecure": "VerschlöÃeld enlogge",
+ "cannotloginnow-title": "Ennlogge jeiht jrahd nit",
+ "cannotloginnow-text": "Ennlogge jeiht jrahd nit wam_mer $1 bruche well.",
"yourdomainname": "Ding Domain",
"password-change-forbidden": "Do kanns en heh däm Wiki kein PaÃwööter ändere.",
"externaldberror": "Do wor ene Fähler en de externe Daatebank, oder Do darfs Ding extern Daate nit ändere. Dat Aanmelde jingk jedenfalls donevve.",
@@ -448,7 +452,7 @@
"nocookieslogin": "{{ucfirst:{{GRAMMAR:Nominativ|{{SITENAME}}}}}} bruch cookies för et Enlogge. Et süht esu us, als hätts De de cookies avjeschalt. Dun se aanschalte un dann versök et noch ens. Odder söök Der ene Brauser, dä et kann.",
"nocookiesfornew": "Et wood keine Zohjang opjemaat, weil mer nit jeweà sin künne, woh de Daate her kohme.\nDinge Brauser moà cookies enjeschalldt han.\nDonn dat prööfe, donn heh di Sigg norr_ens neu laade, un dann versöhk et norr_ens.",
"noname": "Dat jeiht nit als ene Metmaacher Name. Jetz muss De et noch ens versöke.",
- "loginsuccesstitle": "Dat Enlogge hät jeflupp.",
+ "loginsuccesstitle": "Enjelogg",
"loginsuccess": "'''Do bes jetz enjelogg {{GRAMMAR:en|{{SITENAME}}}}, un Dinge Name als ene Metmaacher es â$1â.'''",
"nosuchuser": "Dä Metmaacher Name â$1â wor verkihrt.\nJroÃ- un Kleinboochshtabe maache ene Ungerscheid!\n \nJetz muss De et noch ens versöke.\nUdder donn_[[Special:UserLogin/signup|ene neue Metmaacher aanmelde]].",
"nosuchusershort": "Dä Metmaacher Name â$1â wor verkihrt. Jetz muss De et noch ens versöke.",
@@ -506,11 +510,28 @@
"resetpass_submit": "E neu Zweschepasswood övvermeddele un aanmellde",
"changepassword-success": "Et PaÃwood es jeändert.",
"changepassword-throttled": "Do häs zoh öff versöhk, enzelogge. Waat $1 Ih dat De es widder probeers.",
+ "botpasswords": "Bot-PaÃwööter",
+ "botpasswords-disabled": "Bot-PaÃwööter sin uÃjeschallt",
+ "botpasswords-no-central-id": "Ãm Bot-PaÃwööter bruche ze künne, moà De övve en jemeinsamme Aanmälldong ennjelogg sin.",
+ "botpasswords-existing": "Vörhande Bot-PaÃwööter",
+ "botpasswords-createnew": "Lääsch e neu Bot-PaÃwööter aan",
+ "botpasswords-editexisting": "Verännder a Bot-PaÃwööter",
+ "botpasswords-label-appid": "Däm Bot singe Nahme",
"botpasswords-label-create": "Neu maache",
"botpasswords-label-update": "Ãnndere",
"botpasswords-label-cancel": "Ophüre",
"botpasswords-label-delete": "FottschmiiÃe",
"botpasswords-label-resetpassword": "PaÃwoot neu säze",
+ "botpasswords-label-restrictions": "Beschränkonge:",
+ "botpasswords-bad-appid": "â$1â es keine jölltejje Nahme för ene Bot.",
+ "botpasswords-insert-failed": "Kunnt keine Bot mem Nahme â$1â derbei donn. Wohr velleijsch ald doh.",
+ "botpasswords-update-failed": "Kunnt keine Bot mem Nahme â$1â veränndere. Es velleijsch fottjeschmeÃe?",
+ "botpasswords-created-title": "Dat Bot-PaÃwood es aanjelaat",
+ "botpasswords-created-body": "Dat Bot-PaÃwoot för dä Bot â$1â {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} â$2â wood ennjerescht.",
+ "botpasswords-updated-title": "Dat Bot-PaÃwood es veränndert",
+ "botpasswords-updated-body": "Dat Bot-PaÃwoot för dä Bot â$1â {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} â$2â wood veränndert.",
+ "botpasswords-deleted-title": "Dat Bot-PaÃwood es fott",
+ "botpasswords-deleted-body": "Dat Bot-PaÃwoot för dä Bot â$1â {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} â$2â wood fott jeschmeÃe.",
"resetpass_forbidden": "E Passwoot kann nit jeändert wääde.",
"resetpass-no-info": "Do mööts ad enjelogg sin, öm tiräk op di Sigg jonn ze dörve",
"resetpass-submit-loggedin": "Passwood tuusche",
@@ -799,9 +820,9 @@
"revdelete-unsuppress": "De Beschrängkonge för der widderjehollte Versione ophevve",
"revdelete-log": "Aanlaà odder Jrund:",
"revdelete-submit": "Op de aanjekrützte {{PLURAL:$1|Version|Versione|-nix-}} aanwende",
- "revdelete-success": "'''De Väsjohn wood verschtoche udder seeschba jemaat.'''",
+ "revdelete-success": "De Väsjohn wood verschtoche udder seeschba jemaat.",
"revdelete-failure": "'''Dä Version ier Seeschbaakeit kunnte mer nit ändere:'''\n$1",
- "logdelete-success": "'''Dä Enndraach em Logbohch wood verschtoche udder seeschbaa jemaat.'''",
+ "logdelete-success": "Dä Enndraach em Logbohch wood verschtoche udder seeschbaa jemaat.",
"logdelete-failure": "'''Däm Enndraach em Logbohch sing Seeschbaakeit kunnte mer nit ändere:''' $1",
"revdel-restore": "Verschteische udder seeschba maache",
"pagehist": "Ãlldere Väsjohne",
@@ -832,6 +853,7 @@
"mergehistory-empty": "Mer han kei Versione för zesammezeläje",
"mergehistory-done": "{{PLURAL:$3|Ein Väsjohn es|$3 Väsjohn sen|Kei Väsjohn wood}} fun â$1â noh â[[:$2]]â övverdraare un domet zosamme jelaat.",
"mergehistory-fail": "Dat Versione zesamme läje is nit müjjelisch. Don ens di Sigge un de Zigge pröfe!",
+ "mergehistory-fail-self-merge": "De Quell-Sigg un de Ziel-Sigg sin deselve Sigg.",
"mergehistory-fail-toobig": "Mih wi {{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohne}} wöödte zesamme jelaat. Esu vill künne mer nit, un maache mer nit.",
"mergehistory-no-source": "En Ursprungssigg â$1â jidd_et nit.",
"mergehistory-no-destination": "En Zielsigg â$1â jidd_et nit.",
@@ -1650,6 +1672,7 @@
"mostrevisions": "Atikkele met de mihste Ãnderonge",
"prefixindex": "Alle Sigge, dänne ehr Nahme med enem beschtemmpte Wood udder Täx aanfängk",
"prefixindex-namespace": "Alle Sigge med enem beschtemmpte Aanfang em Appachtemang â$1â",
+ "prefixindex-submit": "Lohà jonn!",
"prefixindex-strip": "Donn der jemeinsamme Aanfang vun dä Tetelle en dä Leà fottlohÃe.",
"shortpages": "Atikele zoteet vun koot noh lang",
"longpages": "Atikele zoteet vun lang noh koot",
@@ -1667,11 +1690,13 @@
"protectedpages-performer": "Jeschöz vum Metmaacher",
"protectedpages-params": "De Zoot Schpär",
"protectedpages-reason": "Der Jrond",
+ "protectedpages-submit": "Lohà jonn!",
"protectedpages-unknown-timestamp": "Onbikannt",
"protectedpages-unknown-performer": "Onbikannte Metmaacher",
"protectedtitles": "Verbodde Titele för Sigge",
"protectedtitles-summary": "Hee sin verbodde Sigge-Tittele opjeleÃ. Onger dä Name ka_mer kein neu Sigge aanläje.\nEn Leà met dä Sigge, di jäje et Verändere udder jäje et Ãmnenne jeschötz sin, fengk mer op dä Sigg [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
"protectedtitlesempty": "Op di Aat sin jrad kein Sigge jäje et neu Aanlääje jeschötz.",
+ "protectedtitles-submit": "Lohà jonn!",
"listusers": "De MetmaacherleÃ",
"listusers-editsonly": "Donn nor Metmaacher zeije, di och ens jät jeschrevve han.",
"listusers-creationsort": "Noh em Dattum vum Aanmellde zoteere",
@@ -1679,6 +1704,7 @@
"usereditcount": "{{PLURAL:$1|Ein Ãnderong|$1 Ãnderonge|Nix jedonn}}",
"usercreated": "{{GENDER:$3|}}Aanjemelldt aam $1 öm $2 Uhr",
"newpages": "Neu Sigge",
+ "newpages-submit": "Lohà jonn!",
"newpages-username": "Metmaacher_Naame:",
"ancientpages": "Atikele zoteet vun Ahl noh Neu",
"move": "Ãmnenne",
@@ -1696,11 +1722,13 @@
"apihelp": "Hölp för de API ",
"apihelp-no-such-module": "Et Moduhl â$1â wood nit jefonge.",
"apisandbox": "De API uÃprobeere",
+ "apisandbox-jsonly": "Der ohne JavaSkrepp kam_mer de API för zom erömprobehre nit bruche.",
"apisandbox-api-disabled": "Dat API es en heh dämm Wiki afjeschalldt.",
- "apisandbox-intro": "Op heh dä Sigg kanns De met dä '''MediaWiki web service API ''' eröm schpelle.\nBeloor Der de Einzelheite, wi di jebruch weed, op dä iere [//www.mediawiki.org/wiki/API:Main_page Sigg met de Verklieronge].\nE Beiscpell: [//www.mediawiki.org/wiki/API#A_simple_example De Houpsigg holle].\nSöhk ene {{int:Apisb-label-action}} uÃ, öm mieh Beishpell aanjezeisch ze krijje.\nOch wann dat heh nor zom UÃprobeere es, kann dat, wat De heh mähÃ, et Wiki verändere.",
+ "apisandbox-intro": "Op heh dä Sigg kanns De met dä MediaWiki web service API eröm schpelle.\nBeloor Der de Einzelheite, wi di jebruch weed, op dä iere [[mw:API:Main_page Sigg met de Verklieronge]].\nE Beiscpell: [//www.mediawiki.org/wiki/API#A_simple_example De Houpsigg holle].\nSöhk ene {{int:Apisb-label-action}} uÃ, öm mieh Beishpell aanjezeisch ze krijje.\nOch wann dat heh nor zom UÃprobeere es, kann dat, wat De heh mähÃ, et Wiki verändere.",
"apisandbox-submit": "Lohà jonn!",
"apisandbox-reset": "Läddesch maache",
- "apisandbox-examples": "Bäijshpell",
+ "apisandbox-retry": "Norr_ens versöhke",
+ "apisandbox-examples": "Bäijshpelle",
"apisandbox-dynamic-parameters": "Zohsäzlejje Parrameetere",
"apisandbox-results": "Erus jekumme es",
"apisandbox-request-url-label": "Dä URL vun dä Aanfrooch:",
@@ -1720,6 +1748,9 @@
"log-title-wildcard": "Sök noh Titelle, di aanfange met â¦",
"showhideselectedlogentries": "UÃjesöhk Endrääsch verschteische udder zeije",
"log-edit-tags": "Donn de Makehronge vun de uÃjesöhk Enndrähsch em Logbohch beärbeide",
+ "checkbox-all": "Alle",
+ "checkbox-none": "Keine",
+ "checkbox-invert": "UÃwahl ömdrihje",
"allpages": "Alle Sigge",
"nextpage": "De nächste Sigg: â$1â",
"prevpage": "Vörijje Sigg ($1)",
@@ -2067,6 +2098,7 @@
"whatlinkshere-hidelinks": "de nommahle Lengks $1",
"whatlinkshere-hideimages": "$1 de Lengks op Datteihje",
"whatlinkshere-filters": "UÃsööke",
+ "whatlinkshere-submit": "Lohà jonn!",
"autoblockid": "Automattesche Sperr Nommer $1",
"block": "Metmaacher udder en IP -Addräà sperre",
"unblock": "Don en Sperr för ene Metmaacher udder en IP -Addräà ophävve",
@@ -3206,7 +3238,7 @@
"tags-delete-not-allowed": "Kännzeijsche, di övver Zohsazprojramme faÃjelaat wääde, kam_mer blà fottschmiiÃe, wann dat Zohsazprojramm et zohlöht.",
"tags-delete-not-found": "E Kännzeijsche â$1â jidd_et nit.",
"tags-delete-too-many-uses": "Dat Kännzeijsche â$1â es för {{PLURAL:$2|mih wi ein Väsjohn|övver $2 Väsjohn|kein Väsjohn}} em jebruch, dröm kam_mer et nit fottschmiiÃe.",
- "tags-delete-warnings-after-delete": "Dat Kännzeijsche â$1â es fottjeschmeÃe, ävver {{PLURAL:$2|ei Problem|$2 Probleme|kein Problem}} es opjevalle:",
+ "tags-delete-warnings-after-delete": "Dat Kännzeijsche â$1â es fottjeschmeÃe, ävver {{PLURAL:$2|ei Problehm|$2 Problehme|kein Problhem}} es opjevalle:",
"tags-activate-title": "Kännzeijsche aanschallde",
"tags-activate-question": "Do bes om bäÃte Wähsch, et Kännzeijsche â$1â aanzeschallde.",
"tags-activate-reason": "Jrond:",
diff --git a/languages/i18n/ku-latn.json b/languages/i18n/ku-latn.json
index 59f5172da0..9499c11a65 100644
--- a/languages/i18n/ku-latn.json
+++ b/languages/i18n/ku-latn.json
@@ -861,7 +861,7 @@
"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",
- "recentchanges-legend-heading": "'''Ravekirina kurtenavan:'''",
+ "recentchanges-legend-heading": "Ravekirina kurtenavan: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (here [[Special:NewPages|lîsteya rûpelên nû]])",
"rclistfrom": "Guherandinên ji $3 $2 Åûnde nîÅan bide",
"rcshowhideminor": "Guherandinên biçûk $1",
diff --git a/languages/i18n/kw.json b/languages/i18n/kw.json
index a40a73e812..6b316dafdf 100644
--- a/languages/i18n/kw.json
+++ b/languages/i18n/kw.json
@@ -319,8 +319,6 @@
"createaccountreason": "Acheson:",
"createacct-reason": "Acheson",
"createacct-reason-ph": "Prag yth esowgh ow kwruthyl akont aral",
- "createacct-captcha": "Gwiryans sekerder",
- "createacct-imgcaptcha-ph": "Entrewgh an tekst a welowgh a-ugh",
"createacct-submit": "Gwruthyl agas akont",
"createacct-benefit-heading": "Gwrys yw {{SITENAME}} gans tus kepar ha hwi.",
"createacct-benefit-body1": "{{PLURAL:$1|janj|chanj}}",
@@ -380,10 +378,10 @@
"passwordreset-domain": "Tiredh:",
"passwordreset-email": "Trigva ebost:",
"passwordreset-emailtitle": "Manylyon agas akont war {{SITENAME}}",
- "passwordreset-emailsent": "Ebost dassettya ger tremena re beu danvenys.",
+ "passwordreset-emailsentemail": "Ebost dassettya ger tremena re beu danvenys.",
"passwordreset-emailsent-capture": "Ebost dassettya ger tremena re beu danvenys, hag y hyllir y weles a-woles.",
"changeemail": "Chanjya trigva ebost",
- "changeemail-text": "Lenwewgh an furvlen-ma rag chanjya agas trigva ebost. Y fydh res dhywgh entra agas ger tremena rag afydhya an chanj-ma.",
+ "changeemail-header": "Chanjya trigva ebost an akont",
"changeemail-oldemail": "Agas trigva ebost a-lemmyn:",
"changeemail-newemail": "Agas trigva ebost nowyth:",
"changeemail-none": "(nagonan)",
@@ -625,7 +623,7 @@
"recentchanges-label-minor": "Chanj byghan yw hemma",
"recentchanges-label-bot": "Gwrys veu an chanj ma gans bott",
"recentchanges-label-unpatrolled": "Ny veu an chanj ma patrolyes hwath",
- "recentchanges-legend-heading": "'''Alhwedh:'''",
+ "recentchanges-legend-heading": "Alhwedh: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler ynwedh an [[Special:NewPages|rol a folennow nowydh]])",
"rclistfrom": "Diskwedhes chanjyow nowydh yn unn dhalleth dhyworth $3 $2",
"rcshowhideminor": "$1 chanjyow byghan",
@@ -764,7 +762,6 @@
"activeusers-hidesysops": "Kudha menystroryon",
"listgrouprights-members": "(rol eseli)",
"emailuser": "Ebostya an devnydhyer-ma",
- "emailpage": "Ebostya devnydhyer",
"defemailsubject": "Ebost danvenys dre {{SITENAME}} gans an devnydhyer \"$1\"",
"emailfrom": "Dhyworth:",
"emailto": "Dhe:",
@@ -874,7 +871,6 @@
"move-page": "Gwaya $1",
"move-page-legend": "Gwaya folen",
"movepagetext": "Devnydhya an furvlen a-woles a dhashenow folen, yn unn waya oll y istori dhe'n hanow nowyth.\nAn titel koth a vydh folen dhaskedyans dhe'n titel nowyth.\nHwi a yll nowedhi daskedyansow a boynt dhe'n titel derowel yn awtomatek.\nMar ny wrewgh, surhewgh hwi dhe jeckya rag [[Special:DoubleRedirects|daskedyansow dobyl]] po [[Special:BrokenRedirects|terrys]].\nOmgemeryansek owgh rag surhe y pes kevrennow poyntya dhe'n tyller ewn.\n\nNotyewgh '''na wayir''' an folen mars eus folen orth an titel nowyth seulabrys, marnas bos an pyth kampollys diwettha daskedyans ha ny'n jeves istori chanjya kyns vyth.\nHemm a styr y hyllowgh diswul dashenwel folen mar kwrewgh kammwrians, ha ny yllowgh gorskrifa folen eus ena seulabrys.\n\n'''Gwarnyans!'''\nHemm a yll bos chanj tromm ha bras dres ehen rag folen gerys-da;\nSurhewgh mar pleg hwi dhe gonvedhes sewyansow an gwrians-ma kyns mos yn-rag.",
- "movearticle": "Gwaya an folen:",
"moveuserpage-warning": "'''Gwarnyans''': Yth esowgh ow mos dhe waya folen dhevnydhyer. Notyewgh mar pleg ny vydh marnas an folen gwayys ha ''ny vydh'' an devnydhyer dashenwys.",
"newtitle": "Dhe ditel nowyth:",
"move-watch": "Golya an folen-ma",
diff --git a/languages/i18n/la.json b/languages/i18n/la.json
index 0d9010e014..2496807a4b 100644
--- a/languages/i18n/la.json
+++ b/languages/i18n/la.json
@@ -33,17 +33,18 @@
"tog-hideminor": "Recensiones minores in indice nuper mutatorum supprimere",
"tog-hidepatrolled": "Redactiones censae inter nuper mutatas celandae",
"tog-newpageshidepatrolled": "Paginae censae inter nouissime creatas celandae",
+ "tog-hidecategorization": "Classificationes paginarum supprimere",
"tog-extendwatchlist": "In indice paginarum observandarum non solum recentissimas, verum omnes mutationes ostendere",
"tog-usenewrc": "Indices per paginas redigere",
"tog-numberheadings": "Subtituli numeris adornandi",
- "tog-showtoolbar": "Affigere trabem redigentem",
+ "tog-showtoolbar": "Trabem editoriam affigere",
"tog-editondblclick": "Duplici ictu liceat paginam recensere",
"tog-editsectiononrightclick": "Titulis a dextra tactis liceat paginarum partes recensere",
"tog-watchcreations": "Paginas, quas creavero, et fasciculos, quos imposuero, observare",
"tog-watchdefault": "Paginas et fasciculos, quos recensuero, observare",
"tog-watchmoves": "Paginas et fasciculos, quos movero, observare",
"tog-watchdeletion": "Paginas et fasciculos, quos delevero, paginarum observandarum indici addere",
- "tog-minordefault": "Notare omnes recensiones quasi minores",
+ "tog-minordefault": "Omnes recensiones per se ut minores notare",
"tog-previewontop": "Prospectum supra capsam recensoriam ostendere",
"tog-previewonfirst": "Prospectum novae paginae perhibere",
"tog-enotifwatchlistpages": "Mutata vel pagina vel fasciculo observando certior fiam",
@@ -54,7 +55,7 @@
"tog-oldsig": "Subscriptio, qua nunc uteris:",
"tog-fancysig": "Subscriptio vicitext (sine nexu automatico)",
"tog-uselivepreview": "Prospectum viventem perhibere",
- "tog-forceeditsummary": "Si recensionem non summatim descripsero, me roga si continuare velim",
+ "tog-forceeditsummary": "Cavere, ut recensionem summatim describam",
"tog-watchlisthideown": "Recensiones meas in paginarum observandarum indice supprimere",
"tog-watchlisthidebots": "Recensiones per automaton factas in paginarum observandarum indice supprimere",
"tog-watchlisthideminor": "Minores recensiones in paginarum observandarum indice supprimere",
@@ -66,9 +67,12 @@
"tog-diffonly": "Nihil nisi differentia in pagina facta ostendatur",
"tog-showhiddencats": "Categorias celatas monstrare",
"tog-norollbackdiff": "Post reversionem paginae differentia neglegatur",
+ "tog-useeditwarning": "Prohibere, ne paginam nondum servatam relinquam",
"underline-always": "Semper",
"underline-never": "Numquam",
"underline-default": "Defalta navigatri interretialis",
+ "editfont-style": "Stilus:",
+ "editfont-default": "iuxta navigatrum",
"sunday": "dies Solis",
"monday": "dies Lunae",
"tuesday": "dies Martis",
@@ -640,21 +644,23 @@
"prefs-rc": "Nuper mutata",
"prefs-watchlist": "Paginae observandae",
"prefs-watchlist-days": "Quot dies index respiciat:",
- "prefs-watchlist-days-max": "Numerus maximus: $1 {{PLURAL:$1|dies|dies}}",
+ "prefs-watchlist-days-max": "Maximum spatium: $1 {{PLURAL:$1|dies|dies}}",
"prefs-watchlist-edits": "Quot mutationes index summum respiciat:",
- "prefs-watchlist-edits-max": "Numerus maximus: 1000",
+ "prefs-watchlist-edits-max": "Maximus numerus: 1000",
"prefs-misc": "Misc",
"prefs-resetpass": "Tesseram mutare",
"prefs-email": "Modi ad litteras electronicas spectantes",
"prefs-rendering": "Conspectus",
"saveprefs": "Hos modos servare",
"restoreprefs": "Omnes (diversi) modi in integrum restituantur",
- "prefs-editing": "Mensura capsae verbi",
+ "prefs-editing": "Recensere",
"rows": "Lineae:",
"columns": "Columnae:",
"searchresultshead": "Figuratio eventorum investigationis",
"recentchangesdays": "Quot dies index respiciat:",
+ "recentchangesdays-max": "$1 maxime {{PLURAL:$1|diem|dies}}",
"recentchangescount": "Quot mutationes index respiciat:",
+ "prefs-help-recentchangescount": "Inclusis nuper mutatis, paginarum historiis, actis",
"savedprefs": "Modi tui servati sunt.",
"timezonelegend": "Zona temporis:",
"localtime": "Hora indigena:",
@@ -704,6 +710,8 @@
"prefs-info": "Generalia",
"prefs-i18n": "Sermonis delectus",
"prefs-signature": "Subscriptio",
+ "prefs-advancedediting": "Generalia",
+ "prefs-editor": "Capsa editoria",
"prefs-preview": "Prospectus",
"prefs-advancedrc": "Modi speciales",
"prefs-advancedwatchlist": "Indicis modi speciales",
@@ -823,7 +831,7 @@
"recentchanges-label-bot": "Hanc recensionem automaton fecit",
"recentchanges-label-unpatrolled": "Haec recensio nondum est examinata",
"recentchanges-label-plusminus": "Tot octetis magnitudo paginae mutata est",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam [[Special:NewPages|indicem paginarum novarum]])",
"rcnotefrom": "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
"rclistfrom": "Monstrare mutata nova incipiens ab $3 $2",
@@ -845,6 +853,9 @@
"rcshowhidemine": "$1 conlationes meas",
"rcshowhidemine-show": "Monstrare",
"rcshowhidemine-hide": "Celare",
+ "rcshowhidecategorization": "$1 classificationes",
+ "rcshowhidecategorization-show": "Ostendere",
+ "rcshowhidecategorization-hide": "Supprimere",
"rclinks": "Monstrare $1 nuperrime mutata in $2 diebus proximis. $3",
"diff": "diss",
"hist": "hist",
@@ -1142,13 +1153,14 @@
"wlnote": "{{PLURAL:$1|Indicatur mutatio novissima|Indicantur '''$1''' mutationes novissimae}} abhinc {{PLURAL:$2|superiorem horam|superiores '''$2''' horas}} (ab $3, $4) factae.",
"wlshowlast": "Monstrare proximas $1 horas $2 dies",
"watchlist-hide": "Supprimere recensiones",
- "watchlist-submit": "Porrige",
- "wlshowtime": "Temporis spatium porrigendum:",
+ "watchlist-submit": "Ostendere",
+ "wlshowtime": "Index respiciat:",
"wlshowhideminor": "minores",
"wlshowhidebots": "automatice factas",
"wlshowhideliu": "a conlatoribus notis factas",
"wlshowhideanons": "sine nomine factas",
"wlshowhidemine": "meas",
+ "wlshowhidecategorization": "classificationes",
"watchlist-options": "Huius indicis modi",
"watching": "Custodiens...",
"unwatching": "Decustodiens...",
@@ -1161,9 +1173,9 @@
"changed": "mutata",
"deletepage": "Delere paginam",
"confirm": "Adfirmare",
- "excontent": "contenta erant: '$1'",
- "excontentauthor": "contenta erant: '$1' (et contributor unicus erat '[[Special:Contributions/$2|$2]]')",
- "exbeforeblank": "contenta priusquam pagina facta vacua erant: '$1'",
+ "excontent": "contenta fuerant: '$1'",
+ "excontentauthor": "contenta fuerant: '$1' (conlata a solo '[[Specialis:Conlationes/$2|$2]]') ([[Disputatio:$2|Disputatio]])",
+ "exbeforeblank": "pagina rasa continuerat: '$1'",
"delete-confirm": "Delere \"$1\"",
"delete-legend": "Delere",
"historywarning": "'''Monitio:''' Pagina quam delere vis historiam {{PLURAL:$1|unius fere emendationis|$1 fere emendationum}} habet:",
@@ -1556,6 +1568,9 @@
"noimages": "Nullum videndum.",
"ilsubmit": "Quaerere",
"bydate": "ex die",
+ "hours": "{{PLURAL:$1|hanc horam|has $1 horas}}",
+ "days": "{{PLURAL:$1|hunc diem|hos $1 dies}}",
+ "hours-ago": "abhinc $1 {{PLURAL:$1|horam|horas}}",
"metadata": "Metadata",
"metadata-help": "Hic fasciculus alias res continet, saepius a machina originatore additas, et (si fasciculus postea recensus sit) fortasse corrigendas.",
"metadata-expand": "Plura ostende",
diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json
index a992d35798..60117ff5cf 100644
--- a/languages/i18n/lb.json
+++ b/languages/i18n/lb.json
@@ -451,7 +451,7 @@
"nocookieslogin": "{{SITENAME}} benotzt Cookië beim Umelle vun de Benotzer.\nDir hutt Cookien ausgeschalt.\nAktivéiert d'Cookien w.e.g. a versicht et nach eng Kéier.",
"nocookiesfornew": "De Benotzerkont gouf net ugeluecht, well mir seng Quell net bestëmme konnten.\nVergewëssert Iech datt Dir Cookien zouloosst, luet dës Säit nei a probéiert nach emol.",
"noname": "Dir hutt kee gëltege Benotzernumm uginn.",
- "loginsuccesstitle": "Umeldung huet geklappt",
+ "loginsuccesstitle": "Ageloggt",
"loginsuccess": "'''Dir sidd elo als \"$1\" op {{SITENAME}} ugemellt.'''",
"nosuchuser": "Et gëtt kee Benotzernumm mam Numm \"$1\".\nBeim Benotzernumm gëtt tëscht groussen a klenge Buschtawen ënnerscheet (casesensitive).\nKuckt w.e.g. op d'Schreifweis richteg ass, oder [[Special:UserLogin/signup|maacht en neie Benotzerkont op]].",
"nosuchusershort": "De Benotzernumm \"$1\" gëtt et net.\nKuckt w.e.g. op d'Schreifweis richteg ass.",
@@ -806,7 +806,7 @@
"revdelete-submit": "Op déi gewielt {{PLURAL:$1|Versioun|Versiounen}} uwenden",
"revdelete-success": "'''Sichtbarkeet vun de Versioune gouf aktualiséiert.''''",
"revdelete-failure": "'''Sichtbarkeet vun der Versioun konnt net aktualiséiert ginn:'''\n$1",
- "logdelete-success": "'''Sichbarkeet vum Logbuch geännert.'''",
+ "logdelete-success": "'''Sichbarkeet vum Logbuch agestallt.'''",
"logdelete-failure": "'''D'Sichtbarkeet vum Logbuch konnt net agestllt ginn:'''\n$1",
"revdel-restore": "Sichtbarkeet änneren",
"pagehist": "Versioune vun dëser Säit",
@@ -1420,7 +1420,7 @@
"uploadstash-summary": "Op dëser Säit huet en Zougrëff op Fichieren déi eropgeluede sinn (oder am Gaang sinn eropgelueden ze ginn) déi awer nach net op der Wiki publizéiert sinn. Dës Fichier kënnen eenzeg an eleng vun deem Benotzer deen se eropgelueden huet gesi ginn.",
"uploadstash-clear": "Um Server gespäichert Fichieren déi nach net eropgeluede si läschen",
"uploadstash-nofiles": "Dir hutt keng gespäichert Fichieren déi Dir nach net eropgelueden hutt.",
- "uploadstash-badtoken": "D'Ausféiere vun dëser Aktioun huet net funktionéiert, vläicht well d'Informatiounen iwwer Ãr Rechter ofgelaf sinn. Probéiert et nach emol.",
+ "uploadstash-badtoken": "D'Ausféiere vun dëser Aktioun huet net funktionéiert, vläicht well d'Informatiounen iwwer Ãr Rechter ofgelaf sinn. Probéiert et w.e.g. nach emol.",
"uploadstash-errclear": "D'Läsche vun de Fichieren huet net funktionéiert.",
"uploadstash-refresh": "Lëscht vun de Fichieren aktualiséieren",
"img-auth-accessdenied": "Zougang refuséiert",
diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json
index 2b790e5d65..483b3a757f 100644
--- a/languages/i18n/lij.json
+++ b/languages/i18n/lij.json
@@ -1038,7 +1038,7 @@
"recentchanges-label-bot": "Sto cangiaménto o l'à fæto in bot",
"recentchanges-label-unpatrolled": "Sto cangiaménto o no l'é stæto ancón verificòu",
"recentchanges-label-plusminus": "Variassion da paggina in nummero de byte",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veddi e [[Special:NewPages|neuve paggine]])",
"rcnotefrom": "Chì sotta gh'è i cangiamenti fæti comensando da '''$2''' (scin a '''$1''').",
"rclistfrom": "Fanni vedde e modiffiche apportæ partindo da $3 $2",
diff --git a/languages/i18n/lki.json b/languages/i18n/lki.json
index 8d489f0537..3026652a01 100644
--- a/languages/i18n/lki.json
+++ b/languages/i18n/lki.json
@@ -1174,7 +1174,7 @@
"recentchanges-label-bot": "Ø§Û Ø¯ÛسکارÛÛ Ø±Ø¨Ø§ØªÛ Ø§ÙجÛÙ
دائÙ",
"recentchanges-label-unpatrolled": "اÛÙ ÙÛراÛØ´ ÙÙÙز گشتâزÙÛ Ùشد٠است",
"recentchanges-label-plusminus": "ØجÙ
ÙÛÙÚ¯Û Ø¨Ù Ø§Ùداز٠اÛÙ Ù
Ùدار باÛت تغÛÛر ÛاÙت٠است",
- "recentchanges-legend-heading": "'''اختصارÛÙ:'''",
+ "recentchanges-legend-heading": "اختصارÛÙ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ÙÙ
ÚÙÛ٠ب٠[[Special:NewPages|ÙÙرست صÙØات تازÙ]] Ùگا٠کÙÛد)",
"recentchanges-submit": "ÙÛشا٠دائÙ",
"rcnotefrom": "در زÛر تغÛÛرات از $3, $4 (تا $1 {{PLURAL:$5|Ùشا٠داد٠شدÙâاست|Ùشا٠داد٠شدÙâاÙد}}).",
diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json
index 633b8879ae..1582bb3879 100644
--- a/languages/i18n/lrc.json
+++ b/languages/i18n/lrc.json
@@ -1182,7 +1182,7 @@
"recentchanges-label-bot": "Ø§Û ÙÙراÙشت ÙÙ Ù٠بÙت اÙجÙÙ
دئÙ",
"recentchanges-label-unpatrolled": "Ø§Û ÙÙراÙشت ÙÙÛ ØªÙÙ Ùاداشت ÙبÙÙ",
"recentchanges-label-plusminus": "اÙاز٠بÙÚ¯Ù ÙÙ Ø´Ù
ار Ø§Û Ø¨Ø§ÛتÛا Ø¢Ùشت کردÙ.",
- "recentchanges-legend-heading": "'''Ù
Ûراث:'''",
+ "recentchanges-legend-heading": "Ù
Ûراث: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ÙÙ
ÚÙ٠بÙÛÙÛت [[ÙÛجÙ:بÙÚ¯Ûا تازÙ|ÙÙÙ
گ٠بÙÚ¯Ûا تازÙ]])",
"recentchanges-legend-plusminus": "(±123 )",
"rcnotefrom": "د Ùار Ø¢ÙشتÛا د $2 ÙÛئÙ(د با٠د $1 ÙØ´Ù٠دئ٠بÛÙ)",
diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json
index 3e6c7c12c2..ad93163e84 100644
--- a/languages/i18n/lt.json
+++ b/languages/i18n/lt.json
@@ -495,7 +495,7 @@
"blocked-mailpassword": "Jūsų IP adresas yra užblokuotas nuo redagavimo, taigi neleidžiama naudoti slaptažodžio priminimo funkcijos, kad apsisaugotume nuo piktnaudžiavimo.",
"eauthentsent": "Patvirtinimo laiÅ¡kas buvo nusiųstas į paskirtÄ
jį el. paÅ¡to adresÄ
.\nPrieÅ¡ iÅ¡siunÄiant kitÄ
laiÅ¡kÄ
į jÅ«sų dÄžutÄ, jÅ«s turite vykdyti nurodymus laiÅ¡ke, kad patvirtintumÄte, kad dÄžutÄ tikrai yra jÅ«sų.",
"throttled-mailpassword": "Slaptažodžio priminimas jau buvo iÅ¡siųstas, per {{PLURAL:$1|$1 paskutinÄ valandÄ
|$1 paskutines valandas|$1 paskutinių valandų}}.\n\nNorint apsisaugoti nuo piktnaudžiavimo, slaptažodžio priminimas gali bÅ«ti iÅ¡siųstas tik kas {{PLURAL:$1|$1 valandÄ
|$1 valandas|$1 valandų}}.",
- "mailerror": "Klaida siunÄiant paÅ¡tÄ
: $1",
+ "mailerror": "Klaida siunÄiant laiÅ¡kÄ
: $1",
"acct_creation_throttle_hit": "Å io projekto lankytojai, naudojantys jÅ«sų IP adresÄ
, sukÅ«rÄ {{PLURAL:$1|$1 paskyrÄ
|$1 paskyras|$1 paskyrų}} per paskutiniÄ
jÄ
dienÄ
, o tai yra didžiausias leidžiamas kiekis per šį laiko tarpÄ
.\nTodÄl Å¡iuo metu lankytojai, naudojantys šį IP adresÄ
, daugiau negali kurti paskyrų.",
"emailauthenticated": "Jūsų el. pašto adresas buvo patvirtintas $2 d. $3.",
"emailnotauthenticated": "JÅ«sų el. paÅ¡to adresas dar nÄra patvirtintas. Jokie laiÅ¡kai\nnebus siunÄiami nei vienai žemiau iÅ¡vardintai paslaugai.",
@@ -883,6 +883,7 @@
"mergehistory-empty": "Versijos negali būti sujungtos",
"mergehistory-done": "$3 $1 {{PLURAL:$3|versija|versijos|versijų}} sÄkmingai {{PLURAL:$3|sujungta|sujungtos|sujungta}} su [[:$2]].",
"mergehistory-fail": "Nepavyksta atlikti istorijų sujungimo, prašome patikrinti puslapio ir laiko parametrus.",
+ "mergehistory-fail-invalid-dest": "Paskirties puslapis yra neteisingas.",
"mergehistory-fail-toobig": "Nepavyksta sulieti istorijos, nes būtina pernešti daugiau, nei leidžia $1 riba, {{PLURAL:$1|versijos|versijų}}.",
"mergehistory-no-source": "Å altinio puslapis $1 neegzistuoja.",
"mergehistory-no-destination": "Rezultato puslapis $1 neegzistuoja.",
@@ -1099,7 +1100,7 @@
"group-all": "(visi)",
"group-user-member": "{{GENDER:$1|naudotojas|naudotoja}}",
"group-autoconfirmed-member": "{{GENDER:$1|automatiškai patvirtintas naudotojas|automatiškai patvirtinta naudotoja}}",
- "group-bot-member": "Botas",
+ "group-bot-member": "Robotas",
"group-sysop-member": "Administratorius",
"group-bureaucrat-member": "Biurokratas",
"group-suppress-member": "{{GENDER:$1|slopintojas|slopintoja}}",
@@ -1276,7 +1277,7 @@
"recentchanges-label-bot": "Šį keitimÄ
atliko automatinÄ programa",
"recentchanges-label-unpatrolled": "Å is keitimas dar nebuvo patikrintas",
"recentchanges-label-plusminus": "Å iuo baitų skaiÄiumi pakeista puslapio apimtis",
- "recentchanges-legend-heading": "'''Paaiškinimai:'''",
+ "recentchanges-legend-heading": "Paaiškinimai: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (taip pat žiÅ«rÄkite [[Special:NewPages|naujausių straipsnių sÄ
raÅ¡Ä
]])",
"recentchanges-submit": "Rodyti",
"rcnotefrom": "Žemiau yra {{PLURAL:$5|pakeitimas|pakeitimai}} pradedant $3, $4 (rodoma iki $1 pakeitimų).",
@@ -1299,7 +1300,7 @@
"rcshowhidemine": "$1 mano keitimus",
"rcshowhidemine-show": "Rodyti",
"rcshowhidemine-hide": "SlÄpti",
- "rcshowhidecategorization": "$1 puslapio kategorizavimas",
+ "rcshowhidecategorization": "$1 puslapių kategorizavimus",
"rcshowhidecategorization-show": "Rodyti",
"rcshowhidecategorization-hide": "SlÄpti",
"rclinks": "Rodyti paskutinius $1 pakeitimų per paskutiniÄ
sias $2 dienų $3",
@@ -1756,19 +1757,24 @@
"apisandbox": "API smÄlio dÄžÄs",
"apisandbox-api-disabled": "API yra iÅ¡jungtas Å¡ioje svetainÄje.",
"apisandbox-intro": "Naudokite šį puslapį norÄdami eksperimentuoti su '''MediaWiki API \"â.\n\tIeÅ¡kokite [//www.mediawiki.org/wiki/API:Main_page API dokumentacijoje] IÅ¡samesnÄs informacijos apie API naudojimo.",
+ "apisandbox-fullscreen": "IÅ¡plÄsti skydelį",
+ "apisandbox-unfullscreen": "Rodyti puslapį",
"apisandbox-submit": "Pateikti praÅ¡ymÄ
",
"apisandbox-reset": "IÅ¡valyti",
"apisandbox-retry": "Bandykite dar kartÄ
",
"apisandbox-no-parameters": "Šis API modulis neturi parametrų.",
+ "apisandbox-helpurls": "PagalbinÄs nuorodos",
"apisandbox-examples": "Pavyzdžiai",
"apisandbox-dynamic-parameters": "Papildomi parametrai",
"apisandbox-dynamic-parameters-add-label": "PridÄti parametrÄ
:",
"apisandbox-dynamic-parameters-add-placeholder": "Parametro pavadinimas",
+ "apisandbox-dynamic-error-exists": "Parametras, pavadinimu â$1â jau yra.",
"apisandbox-deprecated-parameters": "Nebenaudojami parametrai",
"apisandbox-submit-invalid-fields-title": "Kai kurie laukai yra neteisingi",
"apisandbox-results": "Rezultatai",
"apisandbox-request-url-label": "Prašyti URL:",
"apisandbox-request-time": "Užklausos laikas: $1",
+ "apisandbox-alert-field": "Å io lauko reikÅ¡mÄ yra neteisinga.",
"booksources": "Knygų šaltiniai",
"booksources-search-legend": "Knygų šaltinių paieška",
"booksources-search": "Ieškoti",
@@ -3477,7 +3483,7 @@
"expand_templates_preview_fail_html": "Nes {{SITENAME}} turi įgalinta grynÄ
HTML ir įvyko sesijos duomenų praradimas, peržiÅ«ra yra paslÄpta kaip atsargos priemonÄ prieÅ¡ JavaScript atakas. \n\nJei tai teisÄtas peržiÅ«ros bandymas, praÅ¡ome bandyti dar kartÄ
. \nJei tai vistiek neveikia, pabandykite [[Special:UserLogout|atsijungti]] ir vÄl prisijungti.",
"expand_templates_preview_fail_html_anon": "Nes {{SITENAME}} turi įgalinta grynÄ
HTML ir jÅ«s esate neprisijungÄs, peržiÅ«ra paslÄpta kaip atsargumo priemonÄ prieÅ¡ JavaScript atakas. \n\nJei tai teisÄtas peržiÅ«ros bandymas praÅ¡ome [[Special:UserLogin|prisijungti]] ir bandyti vÄl. ",
"expand_templates_input_missing": "Turite pateikti bent truputį įvesties teksto.",
- "pagelanguage": "Puslapio kalbos pasirinkimas",
+ "pagelanguage": "Keisti puslapio kalbÄ
",
"pagelang-name": "Puslapis",
"pagelang-language": "Kalba",
"pagelang-use-default": "Naudoti numatytÄ
jÄ
kalbÄ
",
diff --git a/languages/i18n/luz.json b/languages/i18n/luz.json
index 5c0bf4bc7a..0adbac64e6 100644
--- a/languages/i18n/luz.json
+++ b/languages/i18n/luz.json
@@ -505,7 +505,7 @@
"recentchanges-label-bot": "Ø¦Û Ø¦ÛصÙØ§Ø ØªØ£Ú¤Ø£Ø³ÛØ· ÛÛ Ø±ÙÙبات اÙجاÙ
ڤابÛÛ",
"recentchanges-label-unpatrolled": "Ø¦Û Ø¦ÛصÙØ§Ø ÙÛÙÛ Ú¯Ø£Ø´Øª ÙأڤابÛدھ",
"recentchanges-label-plusminus": "Ø£Ùدازھ بأÙÚ¯Û Ú¤Ø§ Ø¦Û ØªÛعداد باÛت تأغÛÛر دادھ بÛÛ",
- "recentchanges-legend-heading": "'''تأغÛÛر٠ÙÛ :'''",
+ "recentchanges-legend-heading": "تأغÛÛر٠ÙÛ : ",
"recentchanges-legend-newpage": "{{عÛضڤ٠أÙجÙÙÙ
Ø£Ù:تأغÛÛر٠أخÛر-بأرÚأسب-بأÙÚ¯Û ÙÛ}} (ÙØ£ÙÛ Ø³Ù Ú©Û [[Special:NewPages|ÙÛست بأÙÚ¯Ù ÙÛ]])",
"rclistfrom": "ÙÛØ´Û Ø¯Ø§Ø¦Ù ØªØ£ØºÛÛر٠ÙÛ Ú¤Ø§ Ø´ÛØ±Û Ø²Ú¾ $3 $2",
"rcshowhideminor": "ئÛصÙاØÙ Ú©ÚÚ© $1",
diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json
index 4d3fe0bbfc..743761121d 100644
--- a/languages/i18n/lv.json
+++ b/languages/i18n/lv.json
@@ -904,10 +904,10 @@
"userrights": "DalÄ«bnieku tiesÄ«bu pÄrvaldÄ«ba",
"userrights-lookup-user": "PÄrvaldÄ«t dalÄ«bnieka grupas",
"userrights-user-editname": "Ievadi lietotÄjvÄrdu:",
- "editusergroup": "Izmainīt dalībnieka grupas",
+ "editusergroup": "Izmainīt {{GENDER:$1|dalībnieka|dalībnieces}} grupas",
"editinguser": "IzmainÄ«t lietotÄja '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]]) statusu",
"userrights-editusergroup": "IzmainÄ«t lietotÄja grupas",
- "saveusergroups": "SaglabÄt dalÄ«bnieka grupas",
+ "saveusergroups": "SaglabÄt {{GENDER:$1|dalÄ«bnieka|dalÄ«bnieces}} grupas",
"userrights-groupsmember": "Å obrÄ«d ietilpst grupÄs:",
"userrights-groupsmember-auto": "Netiešs dalībnieks:",
"userrights-groups-help": "Tu vari izmainÄ«t kÄdÄs grupÄs Å¡is lietotÄjs ir:\n* IeÄ·eksÄts lauciÅÅ¡ norÄda, ka lietotÄjs ir attiecÄ«gajÄ grupÄ.\n* NeieÄ·eksÄts lauciÅÅ¡ norÄda, ka lietotÄjs nav attiecÄ«gajÄ grupÄ.\n* * norÄda, ka Å¡o grupu tu nevarÄsi noÅemt, pÄc tam, kad to bÅ«si pielicis, vai otrÄdÄk (tu nevarÄsi atcelt savas izmaiÅas).",
@@ -1044,7 +1044,7 @@
"recentchanges-label-bot": "Å is ir bota veikts labojums",
"recentchanges-label-unpatrolled": "Å is labojums vÄl nav pÄrbaudÄ«ts",
"recentchanges-label-plusminus": "Par tik baitiem tika izmainÄ«ts lapas izmÄrs",
- "recentchanges-legend-heading": "'''ApzÄ«mÄjumi:'''",
+ "recentchanges-legend-heading": "ApzÄ«mÄjumi: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (skatÄ«t arÄ« [[Special:NewPages|jaunÄs lapas]])",
"recentchanges-submit": "RÄdÄ«t",
"rcnotefrom": "Å obrÄ«d redzamas izmaiÅas kopÅ¡ '''$2''' (parÄdÄ«tas ne vairÄk par '''$1''').",
@@ -1396,8 +1396,8 @@
"apisandbox": "API smilškaste",
"apisandbox-api-disabled": "API ir atspÄjots Å¡ajÄ tÄ«mekļa vietnÄ.",
"apisandbox-reset": "Notīrīt",
- "apisandbox-examples": "PiemÄrs",
- "apisandbox-results": "RezultÄts",
+ "apisandbox-examples": "PiemÄri",
+ "apisandbox-results": "RezultÄti",
"apisandbox-request-url-label": "Pieprasījuma URL:",
"apisandbox-request-time": "Pieprasījuma izpildes laiks: $1",
"booksources": "GrÄmatu avoti",
@@ -1793,7 +1793,7 @@
"movenotallowedfile": "Tev nav atļaujas pÄrvietot failus.",
"cant-move-user-page": "Tev nav atļaujas pÄrvietot lietotÄju lapas (neskaitot apakÅ¡lapas).",
"cant-move-to-user-page": "Tev nav atļaujas pÄrvietot lapu uz lietotÄja lapu (neskaitot lietotÄja lapas apakÅ¡lapu).",
- "newtitle": "Uz Å¡Ädu lapu",
+ "newtitle": "Jaunais nosaukums:",
"move-watch": "Uzraudzīt šo lapu",
"movepagebtn": "PÄrvietot lapu",
"pagemovedsub": "PÄrvietoÅ¡ana notikusi veiksmÄ«gi",
@@ -1906,11 +1906,11 @@
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versijas|versija|versijas}} no $2",
"javascripttest": "JavaScript testÄÅ¡ana",
"javascripttest-pagetext-unknownaction": "NezinÄma darbÄ«ba \"$1\".",
- "tooltip-pt-userpage": "Tava lietotÄja lapa",
+ "tooltip-pt-userpage": "Tava {{GENDER:|dalībnieka|dalībnieces}} lapa",
"tooltip-pt-anonuserpage": "Manas IP adreses lietotÄja lapa",
- "tooltip-pt-mytalk": "Tava diskusiju lapa",
+ "tooltip-pt-mytalk": "{{GENDER:|Tava}} diskusiju lapa",
"tooltip-pt-anontalk": "Diskusija par labojumiem, kas izdarīti no šīs IP adreses",
- "tooltip-pt-preferences": "Tavas izvÄles",
+ "tooltip-pt-preferences": "{{GENDER:|Tavas}} izvÄles",
"tooltip-pt-watchlist": "Tevis uzraudzÄ«tÄs lapas",
"tooltip-pt-mycontris": "{{GENDER:|Tavs}} devums",
"tooltip-pt-anoncontribs": "Labojumi, kas veikti no Å¡Ä«s IP adreses",
diff --git a/languages/i18n/mai.json b/languages/i18n/mai.json
index f7da241b00..965be18cec 100644
--- a/languages/i18n/mai.json
+++ b/languages/i18n/mai.json
@@ -25,24 +25,25 @@
"Macofe"
]
},
- "tog-underline": "लिà¤à¤à¤à¥à¤ रà¥à¤à¤¾à¤à¤à¤¿à¤¤ à¤à¤°à¥:",
- "tog-hideminor": "सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¥à¤¤à¤¨à¤®à¥ à¤à¥à¤ परिवरà¥à¤¤à¥à¤¤à¤¨ नà¥à¤à¤¾à¤",
- "tog-hidepatrolled": "सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¥à¤¤à¤¨à¤®à¥ à¤à¥à¤ परिवरà¥à¤¤à¥à¤¤à¤¨ नà¥à¤à¤¾à¤",
- "tog-newpageshidepatrolled": "नियà¤à¤¤à¥à¤°à¤¿à¤¤ समà¥à¤ªà¤¾à¤¦à¤¨à¤à¥à¤ नव पनà¥à¤¨à¤¾ सà¥à¤à¥à¤¸à¤ नà¥à¤à¤¾à¤",
- "tog-extendwatchlist": "सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¤¨ नà¥,à¤
à¤à¤¨ धà¥à¤¯à¤¾à¤¨à¤¸à¥à¤à¥à¤®à¥ रहल सठपरिवरà¥à¤¤à¤¨ दà¥à¤à¤¾à¤",
- "tog-usenewrc": "नà¥à¤ सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¤¨ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥ (à¤à¤¾à¤µà¤¾à¤¸à¥à¤à¥à¤°à¤¿à¤ªà¥à¤ à¤à¤¾à¤¹à¥)",
- "tog-numberheadings": "शà¥à¤°à¥à¤·à¤ सà¥à¤µà¤¯à¤-à¤à¥à¤°à¤®à¤¾à¤à¤à¤¿à¤¤ à¤à¤°à¥",
- "tog-showtoolbar": "सà¤à¤ªà¤¾à¤¦à¤¨ à¤à¤à¤¾à¤°à¤ªà¥à¤à¥ दà¥à¤à¤¾à¤ (à¤à¤¾à¤µà¤¾à¤¸à¥à¤à¥à¤°à¥à¤ªà¥à¤)",
- "tog-editondblclick": "दॠबà¥à¤° à¤à¥à¤²à¥à¤ à¤à¤ पनà¥à¤¨à¤¾ सà¤à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥ (à¤à¤¾à¤µà¤¾à¤¸à¥à¤à¥à¤°à¥à¤ªà¥à¤)",
- "tog-editsectiononrightclick": "ठà¤à¤£à¥à¤¡à¤ समà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤£à¥à¤¡à¤ शà¥à¤°à¥à¤·à¤à¥à¤ दहिन à¤à¥à¤²à¤¿à¤ à¤à¤½ समà¥à¤à¤µ (à¤à¤¾à¤µà¤¾à¤¸à¥à¤à¥à¤°à¤¿à¤ªà¥à¤ à¤à¤¾à¤¹à¥)",
- "tog-watchcreations": "हमर बनाà¤à¤² पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ राà¤à¥",
- "tog-watchdefault": "हमर सà¤à¤ªà¤¾à¤¦à¤¿à¤¤ पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ दà¥à¤à¤¾à¤",
- "tog-watchmoves": "हमरा दà¥à¤µà¤¾à¤°à¤¾ हà¤à¤¾à¤à¤² पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ राà¤à¥",
- "tog-watchdeletion": "हमरा दà¥à¤µà¤¾à¤°à¤¾ हà¤à¤¾à¤à¤² पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ राà¤à¥",
+ "tog-underline": "लिà¤à¥à¤à¤à¥ रà¥à¤à¤¾à¤à¥à¤à¤¿à¤¤ à¤à¤°à¥:",
+ "tog-hideminor": "सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¤¨à¤®à¥ à¤à¥à¤ परिवरà¥à¤¤à¤¨ नà¥à¤à¤¾à¤¬à¥",
+ "tog-hidepatrolled": "सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¤¨à¤®à¥ नियनà¥à¤¤à¥à¤°à¤¿à¤¤ à¤à¤à¤² समà¥à¤ªà¤¾à¤¦à¤¨ नà¥à¤à¤¾à¤¬à¥",
+ "tog-newpageshidepatrolled": "नियनà¥à¤¤à¥à¤°à¤¿à¤¤ समà¥à¤ªà¤¾à¤¦à¤¨à¤à¥ नव पनà¥à¤¨à¤¾ सà¥à¤à¥à¤¸à¤ नà¥à¤à¤¾à¤¬à¥",
+ "tog-hidecategorization": "पà¥à¤·à¥à¤ सà¤à¤ शà¥à¤°à¥à¤£à¥à¤à¤°à¤£ हà¤à¤¾à¤¬à¥",
+ "tog-extendwatchlist": "सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¤¨ नà¥,à¤
à¤à¤¨ धà¥à¤¯à¤¾à¤¨à¤¸à¥à¤à¥à¤®à¥ रहल सठपरिवरà¥à¤¤à¤¨ दà¥à¤à¤¾à¤¬à¥",
+ "tog-usenewrc": "नà¥à¤ सनà¥à¤¨à¤¿à¤à¤ परिवरà¥à¤¤à¤¨ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥ (à¤à¤¾à¤µà¤¾à¤¸à¥à¤à¥à¤°à¤¿à¤ªà¥à¤ à¤à¤¾à¤¹à¥)",
+ "tog-numberheadings": "शà¥à¤°à¥à¤·à¤ सà¥à¤µà¤¯à¤-à¤à¥à¤°à¤®à¤¾à¤à¤à¤¿à¤¤ à¤à¤°à¥",
+ "tog-showtoolbar": "समà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤à¤¾à¤°à¤ªà¥à¤à¥ दà¥à¤à¤¾à¤¬à¥",
+ "tog-editondblclick": "दॠबà¥à¤° à¤à¥à¤²à¥à¤ à¤à¤ पनà¥à¤¨à¤¾ समà¥à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥",
+ "tog-editsectiononrightclick": "à¤
नà¥à¤à¤¾à¤ शà¥à¤°à¥à¤·à¤ पर दाहिन à¤à¥à¤²à¤¿à¤ à¤à¤°à¥ पर à¤
नà¥à¤à¤¾à¤ समà¥à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤°à¥",
+ "tog-watchcreations": "हमर बनाà¤à¤² पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ राà¤à¥",
+ "tog-watchdefault": "हमर समà¥à¤ªà¤¾à¤¦à¤¿à¤¤ पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ दà¥à¤à¤¾à¤¬à¥",
+ "tog-watchmoves": "हमरादà¥à¤µà¤¾à¤°à¤¾ à¤à¤¸à¥à¤à¤¾à¤à¤² पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ राà¤à¥",
+ "tog-watchdeletion": "हमरादà¥à¤µà¤¾à¤°à¤¾ मà¥à¤à¤¾à¤à¤² पà¥à¤·à¥à¤ हमर साà¤à¤¾à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ राà¤à¥",
"tog-watchrollback": "हमरा दà¥à¤µà¤¾à¤°à¤¾ à¤à¥à¤¡à¤²à¤à¥à¤² पà¥à¤·à¥à¤ हमार साà¤à¤à¤à¥à¤· सà¥à¤à¥à¤®à¥ राà¤à¥",
"tog-minordefault": "हमर सठसमà¥à¤ªà¤¾à¤¦à¤¨ पà¥à¤°à¥à¤µà¤¨à¥à¤¯à¤¸à¥à¤¤ रà¥à¤ªà¥à¤ मामà¥à¤²à¥ à¤à¤¹à¥",
- "tog-previewontop": "सà¤à¤ªà¤¾à¤¦à¤¨ पà¥à¤à¥à¤ à¤à¤ªà¤° दà¥à¤¶à¥à¤¯ दà¥à¤à¤¾à¤",
- "tog-previewonfirst": "पहिल सà¤à¤ªà¤¾à¤¦à¤¨à¤ बाद पà¥à¤°à¥à¤µà¤¾à¤µà¤²à¥à¤à¤¨ दà¥à¤à¤¾à¤",
+ "tog-previewontop": "समà¥à¤ªà¤¾à¤¦à¤¨ पà¥à¤à¥à¤ à¤à¤ªà¤° दà¥à¤¶à¥à¤¯ दà¥à¤à¤¾à¤¬à¥",
+ "tog-previewonfirst": "पहिल समà¥à¤ªà¤¾à¤¦à¤¨à¤ बाद पà¥à¤°à¥à¤µà¤¾à¤µà¤²à¥à¤à¤¨ दà¥à¤à¤¾à¤¬à¥",
"tog-enotifwatchlistpages": "à¤à¥à¤ हमर धà¥à¤¯à¤¾à¤¨à¤¸à¥à¤à¥à¤ à¤à¥à¤¨à¥ पनà¥à¤¨à¤¾à¤®à¥ परिवरà¥à¤¤à¤¨ हà¥à¤
ठतठहमरा à¤-पतà¥à¤° पठाà¤",
"tog-enotifusertalkpages": "हमर सदसà¥à¤¯ वारà¥à¤¤à¤¾ पà¥à¤·à¥à¤ पर à¤à¥à¤² परिवरà¥à¤¤à¥à¤¤à¤¨à¤ हà¥à¤¤à¥ हमरा à¤-मà¥à¤² à¤à¤°à¤¥à¤¿",
"tog-enotifminoredits": "à¤à¥à¤ परिवरà¥à¤¤à¥à¤¤à¤¨à¤ हà¥à¤¤à¥ सà¥à¤¹à¥ हमरा à¤-मà¥à¤² पठाà¤",
@@ -392,7 +393,7 @@
"virus-unknownscanner": "à¤
à¤à¥à¤à¤¾à¤¤ विषविधि निरà¥à¤§à¤",
"logouttext": "'''à¤
हाठनिषà¥à¤à¥à¤°à¤®à¤£ à¤à¤½ à¤à¥à¤² à¤à¥à¥¤'''\n\nà¤
हाठ{{à¤
नà¥à¤¤à¤°à¥à¤à¤¾à¤²}} पà¥à¤°à¤¯à¥à¤ à¤
नाम à¤à¤½ à¤à¤½ सà¤à¥ à¤à¥, वा à¤
हाठ[$1 log in again] वà¤à¤¹ à¤à¤à¤¿ à¤à¥à¤¨à¥ à¤à¤¨ पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾à¤ रà¥à¤ªà¤®à¥ सà¥à¤¹à¥ पà¥à¤°à¤¯à¥à¤ à¤à¤½ सà¤à¥ à¤à¥à¥¤\nठमà¥à¤¨ राà¤à¥ à¤à¥ à¤à¤¿à¤à¥ पनà¥à¤¨à¤¾ à¤à¤¨à¤¾ दà¥à¤à¤¾ पड़ि सà¤à¥à¤ à¤à¥à¤¨à¤¾ à¤
हाठà¤
à¤à¤¨à¥ समà¥à¤ªà¥à¤°à¤µà¥à¤¶à¤¿à¤¤ हà¥à¤, à¤à¤¾à¤µà¤¤ à¤
हाठà¤
पन à¤à¤µà¥à¤·à¤à¤ à¤à¤ªà¤¸à¥à¤®à¥à¤¤à¤¿ मà¥à¤à¤¾ नॠदॠà¤à¥à¥¤",
"welcomeuser": "à¤
हाà¤à¥ सà¥à¤µà¤¾à¤à¤¤ à¤
à¤à¤¿, $1!",
- "welcomecreation-msg": "à¤
हाà¤à¥ à¤à¤¾à¤¤à¤¾ बनावà¥à¤² à¤à¥à¤² à¤
à¤à¤¿ ।\nà¤
पन [[Special:Preferences|{{SITENAME}} पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤à¤¤à¤¾à¤¸à¤]] बदलà¥à¤² नॠबिसरब।",
+ "welcomecreation-msg": "à¤
हाà¤à¤ à¤à¤¾à¤¤à¤¾ बनाà¤à¤² à¤à¥à¤² à¤
à¤à¤¿à¥¤\nà¤
पन [[Special:Preferences|{{SITENAME}} पसनà¥à¤¦]] बदलॠलà¥à¤² नॠबिसरब।",
"yourname": "पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾:",
"userlogin-yourname": "पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾:",
"userlogin-yourname-ph": "à¤
पन पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾à¤¨à¤¾à¤® लिà¤à¥",
@@ -1181,7 +1182,7 @@
"recentchanges-label-bot": "ठसमà¥à¤ªà¤¾à¤¦à¤¨ याà¤à¤¤à¥à¤°à¤¿à¤ à¤à¤²à¥¤",
"recentchanges-label-unpatrolled": "ठसमà¥à¤ªà¤¾à¤¦à¤¨à¤ पà¥à¤¨à¤°à¥à¤à¥à¤·à¤£ à¤
à¤à¤¨ धरि नॠà¤à¤à¤² à¤à¥à¤² à¤
à¤à¤¿à¥¤",
"recentchanges-label-plusminus": "पनà¥à¤¨à¤¾à¤à¥ à¤à¤à¤¾à¤° ठबाà¤à¤ सà¤à¤à¥à¤¯à¤¾à¤¸à¥ बदलल à¤à¥à¤²",
- "recentchanges-legend-heading": "'''à¤à¥à¤à¤à¥:'''",
+ "recentchanges-legend-heading": "à¤à¥à¤à¤à¥: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नयाठपनà¥à¤¨à¤¸à¤à¤à¥ सà¥à¤à¥]] सहॠदà¥à¤à¥)",
"rcnotefrom": "नà¥à¤à¤¾à¤à¤®à¥ '''$2''' सठà¤à¥à¤² परिवरà¥à¤¤à¤¨ à¤
à¤à¤¿ ('''$1''' धरि दà¥à¤à¤¾à¤à¤²)।",
"rclistfrom": "$3 $2 सठशà¥à¤°à¥ à¤à¥à¤² नव परिवरà¥à¤¤à¤¨ दà¥à¤à¥",
diff --git a/languages/i18n/mg.json b/languages/i18n/mg.json
index 16cc94fc05..4a5b94b152 100644
--- a/languages/i18n/mg.json
+++ b/languages/i18n/mg.json
@@ -15,6 +15,7 @@
"tog-hideminor": "Hanitsika ny fiovana madinika ao amin'ny fiovana farany",
"tog-hidepatrolled": "Hanitrika ny fiovana voaara-maso ao amin'ny fiovana farany",
"tog-newpageshidepatrolled": "Hanitsika ny pejy voaara-maso ao amin'ny pejy vaovao",
+ "tog-hidecategorization": "Hanafina ny fansokajiana pejy",
"tog-extendwatchlist": "Hanitatra ny lisitra fanaraham-pejy mba haneho ny fanovana rehetra fa tsy ny vaovao indrindra fotsiny",
"tog-usenewrc": "Hampivondrona ny fiovana araky ny pejy ao amin'ny fiovana farany ary ao amin'ny lisitry ny pejy arahana",
"tog-numberheadings": "Asio laharany ny lohateny",
@@ -42,8 +43,10 @@
"tog-watchlisthidebots": "Asitriho amin'ny lisitro ny fanovà na nataon'ny rôbô",
"tog-watchlisthideminor": "Tsy aseho ny fisoloina kely anatin'ny pejy fanaraha-maso",
"tog-watchlisthideliu": "Asitriho amin'ny lisitro ny fanovà na nataon'ny mpikambana hafa",
+ "tog-watchlistreloadautomatically": "Hanavao ny lisitry ny pejy arahana rehefa misy sivana niova (mila JavaScript)",
"tog-watchlisthideanons": "Asitriho amin'ny lisitro ny fanovana nataon'ny IP",
"tog-watchlisthidepatrolled": "Asitriho amin'ny lisitro ny fanovà na efa nojerena",
+ "tog-watchlisthidecategorization": "Hanafina ny fanasokajiana pejy",
"tog-ccmeonemails": "Andefaso tahaka ny imailaka alefako amin'ny mpikambana hafa",
"tog-diffonly": "Aza ampiseho ny voatonin'ny pejy eo amban'ny diff",
"tog-showhiddencats": "Asehoy ny sokajy misitrika",
@@ -307,10 +310,11 @@
"databaseerror-query": "Hataka: $1",
"databaseerror-function": "Lefa: $1",
"databaseerror-error": "Hadisoana: $1",
+ "transaction-duration-limit-exceeded": "Mba tsy hisian'ny fihalavan'ny fotoam-pandikana be loatra, dia nofoanana ity asa ity satria nihoatra ny fetra $2 {{PLURAL:$2}}segondra ny fotoana nalain'ny asa fanoratana ($1 s). Raha manova zavatra mibolongana be indray mandeha ianao dia zarazarao ho kelikely ny zavatra ataonao.",
"laggedslavemode": "Fampitandremana: Mety ho tsy nisy fanovana vao haingana angamba io pejy io",
"readonly": "Mihidy ny banky angona",
"enterlockreason": "Manomeza antony hanidiana ny pejy, ahitana ny fotoana tokony hamahana izay fihidiana izay",
- "readonlytext": "\nMihidy vonjimaika aloha ny banky angona ka tsy afaka anaovana fanovana na fanampiana vaovao. Azo inoana fa asa fikolokoloana mahazatra ihany io ka rehefa vita izay asa izay dia hverina amin'ny laoniny izy.\n\nNy mpitantana nanidy azy dia nametraka ito fanazavana ito: $1",
+ "readonlytext": "Mihidy ny banky angona ka tsy afaka anaovana fanovana na fanampiana vaovao. Azo inoana fa asa fikolokoloana mahazatra ihany io ka rehefa vita izay asa izay dia hverina amin'ny laoniny izy.\n\nNy mpitantana nanidy azy dia nametraka ito fanazavana ito: $1",
"missing-article": "Tsy hitan'ny banky angona ilay lahatsoratra pejy iray tokony ho hitany, mitondra ny lohateny « $1 » $2.\n\nMatetika, izany no mitranga rehefa manaraka rohy makany amina diff efa lany andro na efa makany amin'ny pejy tantaran'ny pejy voafafa iray.\n\nRaha tsy izany, mety misy olana ao amin'ny rindrankajin'ny lohamilina.\nLazao any amin'ny [[Special:ListUsers/sysop|mpandrindra]] io olana io ary aza adino no manome azy ny URL an'ilay rohy.",
"missingarticle-rev": "(famerenana faha : $1)",
"missingarticle-diff": "(diff : $1 ; $2)",
@@ -345,7 +349,7 @@
"viewsource": "Hijery fango",
"viewsource-title": "Hijery ny fangon'i $1",
"actionthrottled": "Tao voafetra",
- "actionthrottledtext": "Mba hiady amin'ny spam, ny hatetika momba ny fanaovana io otao io dia ferana ho foifoy, ary niaotra io fetra io ianao.\nAndramo indray afaka minitra vitsivitsy.",
+ "actionthrottledtext": "Mba hiady amin'ny fanararaotana dia voafetra ara-katetika ny fanaovana ity zavatra ity, ary nihoatra izany fetra izany ianao.\n\nAndramo indray afaka minitra vitsivitsy.",
"protectedpagetext": "Narovana mba tsy hisiana fanovana na tao hafa ity pejy ity.",
"viewsourcetext": "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity.",
"viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny fanovanao tamin'ity pejy ity.",
@@ -362,7 +366,7 @@
"mypreferencesprotected": "Tsy manana alalana ahafahana manova ny safidinao ianao.",
"ns-specialprotected": "Tsy afaka ovaina ny pejy anatin'ny toeran'anarana « {{ns:special}} » .",
"titleprotected": "Voaaron'i [[User:$1|$1]] ity lohateny ity mba tsy hamorona pejy mitondra ity anarana ity.\nNy antony napetraka dia : $2 .",
- "filereadonlyerror": "Tsy afaka manova ny rakitra \"$1\" satria famakiana ihany no tao azo atao amin'i \"$2\".\n\nNy antony nomen'ny mpandrindra nanidy azy: \"$3\".",
+ "filereadonlyerror": "Tsy afaka manova ny rakitra \"$1\" satria famakiana ihany no azo atao amin'i \"$2\".\n\nNy antony nomen'ny mpandrindra nanidy azy: \"$3\".",
"invalidtitle-knownnamespace": "Lohateny tsy miady amin'ny fepetra miaraka amin'ny anaram-balam-pejy \"$2\" ary soratra \"$3\"",
"invalidtitle-unknownnamespace": "Lohateny tsy ekena miaraka amin'ny laharana anaran-tsehatra $1 ary soratra \"$2\"",
"exception-nologin": "Tsy tafiditra",
@@ -474,7 +478,7 @@
"createaccount-title": "Fanokafana kaonty ho an'ny/i {{SITENAME}}",
"createaccount-text": "Nisy olona nanokatra kaonty ho an'ny adiresy imailakao eo amin'ny {{SITENAME}} ($4) mitondra anarana « $2 » miaraka amin'ny tenimiafina « $3 ». \nTokony miditra na manokatra kaonty ianao, ary ovay ny tenimiafinao dien-izao.\n\nAza mijery ity hafatra ity ianao raha voaforona an-tsifetezana ilay kaonty io.",
"login-throttled": "Betsaka loatra ny andram-pidirana nataonao.\n\nAndraso $1 alohan'ny mamerina.",
- "login-abort-generic": "Tsy nahomby ny fanandramanao niditra",
+ "login-abort-generic": "Tsy nahomby ny fanandramanao niditra - najanona",
"login-migrated-generic": "Efa nafindra ny kaontinao, ary efa tsy misy eto amin'ity wiki ity intsony ny anaram-pikamnbanao",
"loginlanguagelabel": "fiteny : $1",
"suspicious-userlogout": "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
@@ -498,11 +502,34 @@
"botpasswords": "Tenimiafin-drôbô",
"botpasswords-disabled": "Tsy ampiasaina ny tenimiafin-drôbô.",
"botpasswords-existing": "Tenimiafin-drôbô efa misy",
+ "botpasswords-createnew": "Hamorona tenimiafina rôbô vaovao",
+ "botpasswords-editexisting": "Hanova tenimiafina rôbô efa misy",
+ "botpasswords-label-appid": "Anarana rôbô:",
+ "botpasswords-label-create": "Foronina",
+ "botpasswords-label-update": "Vaozina",
+ "botpasswords-label-cancel": "Avela",
+ "botpasswords-label-delete": "Fafà na",
+ "botpasswords-label-resetpassword": "Hamerina ny tenimiafina",
+ "botpasswords-label-grants": "Zo mihatra:",
+ "botpasswords-label-restrictions": "Fetran'ny fampiasana:",
+ "botpasswords-label-grants-column": "Nomena",
+ "botpasswords-bad-appid": "Tsy azo raisina ny anarana rôbô \"$1\".",
+ "botpasswords-insert-failed": "Tsy afaka nanampy ny anarana rôbô \"$1\". Tsy efa nampiana ve ilay izy?",
+ "botpasswords-update-failed": "Tsy afaka nanavao ny anarana rôbô \"$1\". Nofafà na ve ilay izy?",
+ "botpasswords-created-title": "Noforonina ilay tenimiafina rôbô",
+ "botpasswords-created-body": "Noforonina ny tenimiafina rôbô \"$1\".",
+ "botpasswords-updated-title": "Nohavaozina ny tenimiafina rôbô",
+ "botpasswords-updated-body": "Nohavaozina ny tenimiafina rôbô \"$1\".",
+ "botpasswords-deleted-title": "Nofafà na ny tenimiafina rôbô",
+ "botpasswords-deleted-body": "Nofafà na ny tenimiafina rôbô \"$1\".",
+ "botpasswords-newpassword": "Ny tenimiafina idirana amin'i $1 dia $2 . Raiketo ilay izy ho an'ny fampiasà na any aoriana any. ",
+ "botpasswords-no-provider": "Tsy afaka antsoina ny BotPasswordsSessionProvider.",
+ "botpasswords-restriction-failed": "Manakana ity fidirana ity ny fepetra mifehy ny tenimiafina rôbô.",
"resetpass_forbidden": "Tsy afaka ovaina ny tenimiafina",
"resetpass-no-info": "Tsy maintsy tafiditra ao amin'ny kaontinao ianao vao afaka mijery ity pejy ity.",
"resetpass-submit-loggedin": "Ovay ny tenimiafina",
"resetpass-submit-cancel": "Aoka ihany",
- "resetpass-wrong-oldpass": "Tsy izy ny tenimiafinao (tsotra na miserana)\nMety efa nanova tenimiafina na nanontany tenimiafina miserana angamba ianao.",
+ "resetpass-wrong-oldpass": "Tsy izy ny tenimiafinao (ankehitriny na vonjimaika)\nMety efa nanova tenimiafina na nangataka hahazo tenimiafina vonjimaika angamba ianao.",
"resetpass-recycled": "Avereno amy zavatra hafa nohon'ny tenimiafinao ankehitriny ny tenimiafinao.",
"resetpass-temp-emailed": "Niditra tamin'ny alalan'ny tenimiafina vonjimaika nalefa mailaka ianao.\nMba hamaranana ny fidirana, dia tsy maintsy mampiditra tenimiafina vaovao eto ianao :",
"resetpass-temp-password": "Tenimiafina miserana :",
@@ -909,6 +936,7 @@
"columns": "Tsanganana/Tioba :",
"searchresultshead": "Fikarohana",
"stub-threshold": "Fetra ambony ho an'i rohim-bangovango (oktety):",
+ "stub-threshold-sample-link": "santiôna",
"stub-threshold-disabled": "Tsy alefa",
"recentchangesdays": "Isan'ny andro ho aseho amin'ny fiovana farany:",
"recentchangesdays-max": "($1 andro{{PLURAL:$1||}} fara-faha betsany)",
@@ -1093,6 +1121,33 @@
"right-sendemail": "Mandefa imailaka any amin'ny mpikambana hafa",
"right-passwordreset": "Hijery ny imailaka famerenana ny tenimiafina",
"right-managechangetags": "Mamorona ary mamafa [[Special:Tags|balizy]] ao amin'ny banky angona",
+ "grant-group-page-interaction": "Mifanakalo amin'ny pejy",
+ "grant-group-file-interaction": "Mifanakalo amin'ny hainoamanjery",
+ "grant-group-watchlist-interaction": "Mifanakalo amin'ny lisitry ny pejy arahanao",
+ "grant-group-email": "Mandefa mailaka",
+ "grant-group-high-volume": "Manao zavatra haingana",
+ "grant-group-other": "Manao hetsika maro samihafa",
+ "grant-blockusers": "Manakana sy manala sakan'ny mpikambana",
+ "grant-createaccount": "Hamorona kaonty",
+ "grant-createeditmovepage": "Mamorona, manova, ary manisaka pejy",
+ "grant-delete": "Mamafa pejy, versiona ary iditry ny laogy",
+ "grant-editinterface": "Manova ny CSS/Javascript an'ny mpikambana ary anaran-tsehatra MediaWiki",
+ "grant-editmycssjs": "Manova CSS/Javascript anao",
+ "grant-editmyoptions": "Hanova ny safidim-pikambanao",
+ "grant-editmywatchlist": "Manova ny lisitry ny pejy arahana",
+ "grant-editpage": "Manova ny pejy efa misy",
+ "grant-editprotected": "Manova ny pejy voaaro",
+ "grant-highvolume": "Manova pejy ambongadiny",
+ "grant-oversight": "Manafina mpikambana ary mamafa versiona",
+ "grant-patrol": "Manamarika ireo fiovam-pejy ho voatsidika",
+ "grant-protect": "Miaro ary manala ny fiavoram-pejy",
+ "grant-rollback": "Mamafa fiovana amin'ny pejy",
+ "grant-sendemail": "Mandefa mailaka amin'ny mpikambana hafa",
+ "grant-uploadeditmovefile": "Manondrana, manova ary manisaka rakitra",
+ "grant-uploadfile": "Mampiditra rakitra vaovao",
+ "grant-basic": "Zo fototra",
+ "grant-viewdeleted": "Mitsidika ireo rakitra ary pejy voafafa",
+ "grant-viewmywatchlist": "Hijery ny lisitry ny pejy arahanao",
"newuserlogpage": "Laogim-panokafana kaontim-pikambana",
"newuserlogpagetext": "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
"rightslog": "Laogim-piovan'ny zom-pikambana",
@@ -1102,6 +1157,7 @@
"action-createpage": "hanao pejy",
"action-createtalk": "hanao pejin-dresaka",
"action-createaccount": "amboary io kaontim-pikambana io",
+ "action-autocreateaccount": "foronina ho azy io kaontim-pikambana ivelany io",
"action-history": "hijery ny tantaran'ity pejy ity",
"action-minoredit": "Mariho ho kely ity fanovana ity",
"action-move": "hamindra io pejy io",
@@ -1157,6 +1213,7 @@
"recentchanges-label-plusminus": "IO ny isan'ny oktety niova tamin'ilay pejy",
"recentchanges-legend-heading": "Maribolana: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (jereo koa ny [[Special:NewPage|lisitry ny pejy vaovao]])",
+ "recentchanges-submit": "Aseho",
"rcnotefrom": "Eo ambany dia ahitana ireo fiovana{{PLURAL:$5}} hatry ny $3, $4 (naseho hatramin'ny $1 ).",
"rclistfrom": "Asehoy izay vao niova manomboka ny $3 $2",
"rcshowhideminor": "$1 ny fanovà na kely",
@@ -1177,6 +1234,9 @@
"rcshowhidemine": "$1 ny fanovà ko",
"rcshowhidemine-show": "Haneho",
"rcshowhidemine-hide": "Hanafina",
+ "rcshowhidecategorization": "$1 ny fisokajiam-pejy",
+ "rcshowhidecategorization-show": "Aseho",
+ "rcshowhidecategorization-hide": "Afenina",
"rclinks": "Asehoy ny $1 niova farany tato anatin'ny $2 andro $3",
"diff": "Fampitahana",
"hist": "tant.",
@@ -1200,6 +1260,8 @@
"recentchangeslinked-summary": "Mampiseho ny fanovà na vao haingana ity pejy manokana ity. Voasoratra amin'ny '''sora-matavy''' ny lohaten'ny [[Special:Watchlist|pejy arahinao-maso]].",
"recentchangeslinked-page": "anaram-pejy :",
"recentchangeslinked-to": "Ampisehoy ny fanovà n'ny pejy misy rohy makany amin'ny pejy fa tsy atao mivadika",
+ "recentchanges-page-added-to-category": "Nampiana tamin'ny sokajy [[:$1]]",
+ "autochange-username": "Fiovà na vita ho azy MediaWiki",
"upload": "Handefa rakitra",
"uploadbtn": "Alefaso ny rakitra",
"reuploaddesc": "Miverena any amin'ny fisy fandefasan-drakitra.",
@@ -1299,6 +1361,9 @@
"upload-form-label-infoform-description": "Famisavisana",
"upload-form-label-usage-title": "Fampiasana",
"upload-form-label-usage-filename": "Anaran-drakitra",
+ "foreign-structured-upload-form-label-own-work": "Asako ity",
+ "foreign-structured-upload-form-label-infoform-categories": "Sokajy",
+ "foreign-structured-upload-form-label-infoform-date": "Daty",
"backend-fail-stream": "Tsy afaka mamaky ilay rakitra $1.",
"backend-fail-backup": "Tsy afaka mitahiry ilay rakitra $1.",
"backend-fail-notexists": "Tsy misy ilay rakitra $1.",
@@ -1525,6 +1590,8 @@
"mostrevisions": "Lahatsoratra niova im-betsaka indrindra",
"prefixindex": "Pejy manomboka amin'ny...",
"prefixindex-namespace": "Ny pejy rehetra mitondra ny tovona (anaran-tsehatra $1)",
+ "prefixindex-submit": "Aseho",
+ "prefixindex-strip": "Hanala ny tovona anaty lisitra",
"shortpages": "Pejy fohy",
"longpages": "Pejy lavabe",
"deadendpages": "Pejy tsy mirohy",
@@ -1540,10 +1607,12 @@
"protectedpages-performer": "Fiarovana ny mpikambana",
"protectedpages-params": "Parametatry ny fiavorana",
"protectedpages-reason": "Antony",
+ "protectedpages-submit": "Haneho pejy",
"protectedpages-unknown-timestamp": "Tsy fantatra",
"protectedpages-unknown-performer": "Mpikambana tsy fantatra",
"protectedtitles": "Lohateny voaaro",
"protectedtitlesempty": "Tsy misy lohateny voaaro miaraka amin'ireo mpihazaka ireo.",
+ "protectedtitles-submit": "Lohateny aseho",
"listusers": "Lisitry ny mpikambana",
"listusers-editsonly": "Ny mpikambana manam-pandraisan'anjara ihany no aseho",
"listusers-creationsort": "Afantina amin'ny daty fanokafana",
@@ -1551,6 +1620,7 @@
"usereditcount": "fanovana $1 {{PLURAL:}}",
"usercreated": "Noforonina ny {{GENDER:$3}} $1 tamin'ny $2",
"newpages": "Pejy vaovao",
+ "newpages-submit": "Aseho",
"newpages-username": "Solonanarana:",
"ancientpages": "Ireo pejy tranainy indrindra",
"move": "Hamindra azy toerana",
@@ -1563,10 +1633,36 @@
"nopagetext": "Tsy misy ny pejy tanjona nolazainareo.",
"pager-newer-n": "$1 {{PLURAL:$1|vao haingana|vao haingana}}",
"pager-older-n": "$1 {{PLURAL:$1|taloha|taloha}}",
- "suppress": "Hitondra",
+ "suppress": "Fafà na",
"querypage-disabled": "Tsy ampiasaina ity pejy manokana ity mba hitsitsy ny solosaina",
"apihelp": "Fanoroana API",
"apihelp-no-such-module": "Tsy hita ny joro \"$1\".",
+ "apisandbox": "Kianjam-pasika API",
+ "apisandbox-jsonly": "Ilaina amin'ny fampiasana kianjam-pasika API ny JavaScript.",
+ "apisandbox-api-disabled": "Tsy alefa amin'ity tranonkala ity ny API.",
+ "apisandbox-fullscreen": "Hanitatra solaitra",
+ "apisandbox-unfullscreen": "Haneho pejy",
+ "apisandbox-submit": "Hanao hataka",
+ "apisandbox-reset": "Diovina",
+ "apisandbox-retry": "Andramana indray",
+ "apisandbox-helpurls": "Rohim-panoroana",
+ "apisandbox-examples": "Ohatra",
+ "apisandbox-dynamic-parameters": "Parametatra miampy",
+ "apisandbox-dynamic-parameters-add-label": "Hanampy parametatra:",
+ "apisandbox-dynamic-parameters-add-placeholder": "Anaram-parametatra",
+ "apisandbox-dynamic-error-exists": "Efa misy parametatra mitondra ny anarana \"$1\".",
+ "apisandbox-deprecated-parameters": "Parametatra tola",
+ "apisandbox-fetch-token": "Fenoina ho azy ny token",
+ "apisandbox-submit-invalid-fields-title": "Misy saha tsy azo raisina",
+ "apisandbox-results": "Valiny",
+ "apisandbox-sending-request": "Mandefa hataka API...",
+ "apisandbox-loading-results": "Mandray valiny API...",
+ "apisandbox-results-error": "Nisy hadisoana tamin'ny fakà na ny valin-kataka API: $1.",
+ "apisandbox-request-url-label": "Hataka URL:",
+ "apisandbox-request-time": "Fotoana nangatahana{{PLURAL:$1|$1 ms}}",
+ "apisandbox-results-fixtoken": "Ahitsio ny token ary alefaso indray",
+ "apisandbox-results-fixtoken-fail": "Tsy afaka naka ny token \"$1\".",
+ "apisandbox-alert-page": "Tsy ekena ny votoatin'ny saha ato amin'ity pejy ity.",
"booksources": "boky tsiahy",
"booksources-search-legend": "hikaroka anatin'ny boky todika",
"booksources-search": "Fikarohana",
@@ -1575,11 +1671,15 @@
"specialloguserlabel": "Mpikambana nanao :",
"speciallogtitlelabel": "Tanjona (lohateny na mpikambana) :",
"log": "Tatitrâasa",
+ "logeventslist-submit": "Aseho",
"all-logs-page": "Laogy rehetra",
"alllogstext": "Seho nakambana ho an'ny laogy rehetra azo jerena eto amin'ny {{SITENAME}}.\nAzonao ferana ny fahitana ny tao amin'ny fisafidianana karazana laogy iray, anaram-pikambana iray na pejy iray (samihafa ny sorabaventy sy soramadinika).",
"logempty": "Tsy nahitana.",
"log-title-wildcard": "Hitady amin'ny lohateny manomboka amin'io soratra io",
"showhideselectedlogentries": "Haneho/Hanafina ny iditry ny laogy nofidiana",
+ "checkbox-all": "Rehetra",
+ "checkbox-none": "Tsy misy",
+ "checkbox-invert": "Avadika",
"allpages": "Pejy rehetra",
"nextpage": "Pejy manaraka ($1)",
"prevpage": "Pejy taloha ($1)",
@@ -1595,6 +1695,7 @@
"cachedspecial-viewing-cached-ttl": "Mijery pejy anaty takona ianao, izay namboarina $1 taona lasa.",
"cachedspecial-refresh-now": "Hijery ny farany indrindra",
"categories": "Sokajy",
+ "categories-submit": "Aseho",
"categoriespagetext": "{{PLURAL:$1}}Ampiasain'ny rakitra na pejy ireo sokajy manaraka ireo.\nTsy hiseho eto ny [[Special:UnusedCategories|sokajy tsy miasa]].\nVangio koa ny [[Special:WantedCategories|sokajy ilaina]].",
"categoriesfrom": "Haneho ny sokajy manomboka amin'ny :",
"special-categories-sort-count": "afantina amin'ny isan-javatra",
@@ -1638,6 +1739,9 @@
"listgrouprights-namespaceprotection-header": "Fifehezana amin'ny valan'anarana",
"listgrouprights-namespaceprotection-namespace": "Valan'anarana",
"listgrouprights-namespaceprotection-restrictedto": "Zo ahafahan'ny mpikambana manova",
+ "listgrants": "Fahazoan-dalana",
+ "listgrants-grant": "Omena alalana",
+ "listgrants-rights": "Zo",
"trackingcategories": "Sokajy fanarahana",
"trackingcategories-msg": "Sokajy fanarahana",
"trackingcategories-name": "Anaran-kafatra",
diff --git a/languages/i18n/mhr.json b/languages/i18n/mhr.json
index 080a3dc90c..5df7821f55 100644
--- a/languages/i18n/mhr.json
+++ b/languages/i18n/mhr.json
@@ -457,7 +457,7 @@
"recentchanges-label-minor": "Тиде изи ÑÓ§ÑлаÑÑмаÑ",
"recentchanges-label-bot": "Тиде ÑÓ§ÑлаÑÑмаÑÑм Ð±Ð¾Ñ ÑÑÑен",
"recentchanges-label-unpatrolled": "Тиде ÑÓ§ÑлаÑÑмаÑÑм нигӧ ÑеÑген огÑл",
- "recentchanges-legend-heading": "'''Ðегенде:'''",
+ "recentchanges-legend-heading": "Ðегенде: ",
"recentchanges-legend-newpage": "$1 - Ñ Ð»Ð°ÑÑÑк",
"rcnotefrom": "Ðиже пеÑеÑиÑÐ»ÐµÐ½Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ '''$2''' (не более '''$1''').",
"rclistfrom": "$3 $2 гÑÑ ÑӱҥалÑн Ñ Ð²Ð°ÑÑалÑÑмаÑÑм онÑÑкÑаÑ",
@@ -543,7 +543,6 @@
"withoutinterwiki-submit": "онÑÑкÑаÑ",
"nbytes": "$1 {{PLURAL:$1|байÑ|байÑ}}",
"nmembers": "$1 {{PLURAL:$1|1=лаÑÑÑк|лаÑÑÑк-влак}}",
- "nviews": "$1 {{PLURAL:$1|1=онÑÑмо|онÑÑмо-влак}}",
"lonelypages": "ТÑлÑк лаÑÑÑк-влак",
"wantedcategories": "ЫÑÑÑман каÑегоÑий-влак",
"wantedpages": "ЫÑÑÑÑÐ°Ñ Ð»Ð°ÑÑÑк-влак",
@@ -581,6 +580,7 @@
"activeusers-count": "ÐÑÑаÑÑÑÑ $3 {{PLURAL:$3|1=кеÑÑÑÑе|кеÑÑлаÑÑе}} $1 {{PLURAL:$1|1=ÑÓ§ÑлаÑÑмаÑ|ÑÓ§ÑлаÑÑмаÑ-влак}}",
"activeusers-hidebots": "ÐоÑ-влакÑм ÑÑлÑаÑ",
"activeusers-hidesysops": "СайÑвикÑаÑÑÑе-влакÑм ÑÑлÑаÑ",
+ "activeusers-submit": "онÑÑкÑаÑ",
"listgrouprights-members": "(ÑÓ±ÑкаÑÑе ÑлÑо-влак)",
"emailuser": "ÐайдаланÑÑе дек ÑеÑÑÑ",
"watchlist": "ÐÑкеÑÑÐ¼Ð°Ñ Ð»Ó±Ð¼ÐµÑ",
@@ -687,7 +687,6 @@
"move-page-legend": "ÐаÑÑÑкÑн лӱмжÑм ваÑÑалÑÑмаÑ",
"movepagetext": "ӰлÑл ÑоÑмо дене пайдаланен, ÑÑй лаÑÑÑкÑн лӱмÑм ваÑÑалÑен кеÑÑаÑ, ÑÑдÑн ваÑÑалÑÑме ÑÑÑÑмгоÑнÑже Ñ Ð²ÐµÑÑÑ ÐºÑÑаÑÑме.\nТоÑÑо лӱмÑÑÑÓ§ Ñ Ð»Ó±Ð¼ÑÑ ÐºÐ¾Ð»ÑÑмо лаÑÑÑк кодеÑ.\nТÑй ÑоÑÑо лӱмÑÑ ÐºÐ¾Ð»ÑÑмо лаÑÑÑк-влакÑм Ñке ÑемÑн ваÑÑалÑке кеÑÑаÑ.\nТÑй ÑидÑм ÑÐ½ÐµÑ ÑÑÑе гÑн, [[Special:DoubleRedirects|кокÑÑан]] да [[Special:BrokenRedirects|пÑдÑÑгÑÑо Ð²ÐµÑ Ð²ÐµÑе колÑÑмаÑÑм]] ÑеÑге.\nТÑй палемдÑме веÑÑÑ ÐºÑлвеÑ-влаклан ÑÑйнÑмÑлан да ÑÑÑко онÑÑкÑÑмÑлан вÑйÑн ÑогеÑ.\n\nШоÑÑÑ Ð½Ð°Ð»: кÑнам Ñ Ð»Ó±Ð¼Ð°Ð½ лаÑÑÑк Ñло, ÑÑдо '''ок''' кÑÑаÑалÑ. ТÑге огÑл, кÑнам лаÑÑÑк Ð²ÐµÑ Ð²ÐµÑе кÑÑаÑалÑÐµÑ Ð°Ð»Ðµ ÑÑдо ÑÑа да ваÑÑалÑÑÐ¼Ð°Ñ ÑÑÑÑмгоÑнÑже Ñке.\nТÑй лаÑÑÑкÑм йонгÑлÑÑ ÐºÑÑаÑÐµÐ½Ð°Ñ Ð³Ñн менгеÑла ÑÑдÑм ÑоÑÑо лӱмÑÑ ÐºÑÑаÑен кеÑÑаÑ, но ÑÑй Ñже ÑлÑо лаÑÑÑкÑм Ó±ÑÑÑн Ð¾Ñ ÐºÐµÑÑ, манÑн онÑÑкÑа.\n\n'''ТӱÑко лий!'''\nЧӱÑкÑдÑн кÑÑÑлÑмо лаÑÑÑклан Ñиде кÑÐ³Ñ Ð²Ð°ÑÑалÑÑÑÑм ÑÑÑен кеÑÑеÑ;\nУмбаке кайÑме Ð´ÐµÑ Ð¾Ð½ÑÑÑ ÑоналÑе, ÑÑй ÑидÑн Ð´ÐµÑ Ð²Ð°Ñа лиймÑм ÑмÑлеÑ.",
"movepagetalktext": "Тиде лаÑÑÑкÑн каҥаÑÑÐ¼Ð°Ñ Ð»Ð°ÑÑÑк Ñке ÑемÑн Ð¾Ð³ÐµÑ ÐºÑÑно, '''Ñидлан амалже:'''\n*ТÑгай лӱман ÑÑа огÑл каҥаÑÑÐ¼Ð°Ñ Ð»Ð°ÑÑÑк Ñло ала\n*ӰлÑÑ ÐºÐ°Ð¹ÑкÑм Ð¾Ñ ÐºÐ¾Ñангде.\n\nТÑгай годÑм ÑÑÐ»Ð°Ñ Ð»Ð°ÑÑÑкÑм Ñке ÐºÐ¸Ð´ÐµÑ Ð´ÐµÐ½Ðµ кÑÑаÑÐ°Ñ Ð°Ð»Ðµ икÑÐµÑ ÑÑÐ½Ð°Ñ ÐºÓ±Ð»ÐµÑ.",
- "movearticle": "Тиде лаÑÑÑкÑн лӱмжÑм ваÑÑалÑаÑ:",
"newtitle": "У лӱм:",
"move-watch": "Тиде лаÑÑÑкÑм ÑÑкеÑаÑ",
"movepagebtn": "ÐаÑÑÑкÑн лӱмжÑм ваÑÑалÑаÑ",
diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json
index 04ca1ca919..f3e4132d80 100644
--- a/languages/i18n/mk.json
+++ b/languages/i18n/mk.json
@@ -1237,7 +1237,7 @@
"recentchanges-label-bot": "Ðва ÑÑедÑваÑе е напÑавено од боÑ",
"recentchanges-label-unpatrolled": "Ðва ÑÑедÑваÑе Ñè ÑÑÑе не е иÑпаÑÑолиÑано",
"recentchanges-label-plusminus": "ÐолеминÑка пÑомена на ÑÑÑаниÑаÑа во баÑÑи",
- "recentchanges-legend-heading": "'''Ðегенда:'''",
+ "recentchanges-legend-heading": "Ðегенда: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (погл. и [[Special:NewPages|ÑпиÑÐ¾ÐºÐ¾Ñ Ð½Ð° нови ÑÑÑаниÑи]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "ÐÑикажи",
diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json
index 136a64288c..e313abe782 100644
--- a/languages/i18n/ml.json
+++ b/languages/i18n/ml.json
@@ -1247,7 +1247,7 @@
"recentchanges-label-bot": "à´à´¤àµ യനàµà´¤àµà´°à´ à´àµà´¯àµà´¤ തിരàµà´¤àµà´¤à´¾à´£àµ",
"recentchanges-label-unpatrolled": "à´à´¤àµà´µà´°àµ à´±àµà´¨àµà´¤àµà´àµà´±àµà´±à´ªàµà´ªàµà´à´¾à´¤àµà´¤ തിരàµà´¤àµà´¤àµ",
"recentchanges-label-plusminus": "താളിനàµà´±àµ വലിപàµà´ªà´ à´à´¤àµà´°à´¯àµà´ à´¬àµà´±àµà´±àµà´àµ¾ മാറിയിരിà´àµà´àµà´¨àµà´¨àµ",
- "recentchanges-legend-heading": "'''à´¸àµà´à´¨:'''",
+ "recentchanges-legend-heading": "à´¸àµà´à´¨: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|à´ªàµà´¤à´¿à´¯ താളàµà´à´³àµà´àµ à´ªà´àµà´à´¿à´à´¯àµà´]] à´à´¾à´£àµà´)",
"recentchanges-submit": "à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´àµà´àµà´",
"rcnotefrom": "$3, $4 à´®àµà´¤à´²àµà´³àµà´³ {{PLURAL:$5|മാറàµà´±à´|മാറàµà´±à´àµà´àµ¾}} à´à´£àµ താഴàµà´¯àµà´³àµà´³à´¤àµ ($1 à´à´£àµà´£à´ വരൠà´àµà´àµà´àµà´àµà´¨àµà´¨à´¤à´¾à´£àµ).",
diff --git a/languages/i18n/mn.json b/languages/i18n/mn.json
index 90cf7d9591..89929c0c18 100644
--- a/languages/i18n/mn.json
+++ b/languages/i18n/mn.json
@@ -1147,7 +1147,7 @@
"recentchanges-label-bot": "Ð Ð¾Ð±Ð¾Ñ Ð³Ò¯Ð¹ÑÑÑгÑÑÑн заÑваÑ",
"recentchanges-label-unpatrolled": "ÐÐ½Ñ Ð·Ð°ÑваÑÑг манаж амжаагүй",
"recentchanges-label-plusminus": "Ó¨Ó©ÑÑлөгдÑөн Ð±Ð°Ð¹Ñ Ñ
ÑмжÑÑ",
- "recentchanges-legend-heading": "'''ТаниÑ
Ò¯ÑÑг:'''",
+ "recentchanges-legend-heading": "ТаниÑ
Ò¯ÑÑг: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|жагÑааж Ñ
аÑаÑ
]])",
"rcnotefrom": "ÐооÑÑ
Ð½Ñ '''$2'''-Ñ Ñ
ойÑиÑ
Ó©Ó©ÑÑлөлÑүүд ('''$1''' Ñ
Ò¯ÑÑÑлÑ
ийг Ñ
аÑÑÑлав) Ñм.",
"rclistfrom": "$3 $2-Ñ Ñ
ойÑиÑ
ÑÐ¸Ð½Ñ Ð·Ð°ÑваÑÑÑдÑг үзүүлÑÑ
",
diff --git a/languages/i18n/mr.json b/languages/i18n/mr.json
index d2fbdba718..1f7e833ec8 100644
--- a/languages/i18n/mr.json
+++ b/languages/i18n/mr.json
@@ -1278,7 +1278,7 @@
"recentchanges-label-bot": "हॠसà¤à¤ªà¤¾à¤¦à¤¨ à¤à¤à¤¾ साà¤à¤à¤à¤¾à¤®à¥à¤¯à¤¾à¤à¤¡à¥à¤¨ à¤à¥à¤²à¥ à¤à¥à¤²à¥ à¤à¤¹à¥",
"recentchanges-label-unpatrolled": "हॠसà¤à¤ªà¤¾à¤¦à¤¨ à¤
à¤à¥à¤¨ तपासलà¥à¤¯à¤¾ à¤à¥à¤²à¥ नाहà¥",
"recentchanges-label-plusminus": "या पानाà¤à¤¾ à¤à¤à¤¾à¤° à¤à¤¤à¤à¥à¤¯à¤¾ बाà¤à¤à¤¸à¥ नॠबदलला",
- "recentchanges-legend-heading": "'''विवरण:'''",
+ "recentchanges-legend-heading": "विवरण: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नविन पानाà¤à¤à¥ यादà¥]] हà¥à¤¹à¥ पाहा)",
"recentchanges-legend-plusminus": "(''±१२३'')",
"recentchanges-submit": "दाà¤à¤µà¤¾",
diff --git a/languages/i18n/ms.json b/languages/i18n/ms.json
index 74eb97de1d..aa44e04cd7 100644
--- a/languages/i18n/ms.json
+++ b/languages/i18n/ms.json
@@ -1201,7 +1201,7 @@
"recentchanges-label-bot": "Suntingan ini dilakukan oleh bot",
"recentchanges-label-unpatrolled": "Suntingan ini belum dirondai",
"recentchanges-label-plusminus": "Saiz laman telah berubah sebanyak jumlah bait ini",
- "recentchanges-legend-heading": "'''Petunjuk:'''",
+ "recentchanges-legend-heading": "Petunjuk: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat juga [[Special:NewPages|senarai laman baru]])",
"rcnotefrom": "Yang berikut adalah {{PLURAL:$5|suntingan|suntingan-suntingan}} sejak $3, $4 (selebihi $1 dipaparkan).",
"rclistfrom": "Paparkan perubahan sejak $3 $2",
diff --git a/languages/i18n/mt.json b/languages/i18n/mt.json
index 7417f87c5b..f09f565b16 100644
--- a/languages/i18n/mt.json
+++ b/languages/i18n/mt.json
@@ -1120,7 +1120,7 @@
"recentchanges-label-bot": "Din il-modifika Ä¡iet effettwata minn bot",
"recentchanges-label-unpatrolled": "Din il-modifika għadha ma ġietx verifikata",
"recentchanges-label-plusminus": "Id-daqs tal-paġna nbidel b'dan in-numru ta' bytes",
- "recentchanges-legend-heading": "'''Leġenda:'''",
+ "recentchanges-legend-heading": "Leġenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ara wkoll il-[[Special:NewPages|lista tal-paġni l-ġodda]])",
"rcnotefrom": "Ħawn taħt jinsabu l-modifiki minn '''$2''' (sa '''$1''').",
"rclistfrom": "Uri l-modifiki Ä¡odda li jibdew minn $3 $2",
diff --git a/languages/i18n/my.json b/languages/i18n/my.json
index cd21621367..4459df2cce 100644
--- a/languages/i18n/my.json
+++ b/languages/i18n/my.json
@@ -395,7 +395,7 @@
"createacct-error": "á¡áá±á¬áá·áºáááºáá®á¸áá¾á¯ á¡áá¾á¬á¸",
"createaccounterror": "á¤á¡áá±á¬áá·áºááᯠááááºáá®á¸ááá¯ááºáá« - $1",
"noname": "ááá¬á¸ááẠá¡áá¯á¶á¸áá¼á¯áá°á¡áááºááᯠááááºáá¾ááºááá±á¸áá«á",
- "loginsuccesstitle": "Login áááºâáá¼ááºá¸ á¡á±á¬ááºáá¼ááºáááºá",
+ "loginsuccesstitle": "áá±á¬á·ááºá¡ááºáááºáá¼á®á¸áá¼á®",
"loginsuccess": "'''áááºááẠ{{SITENAME}} ááá¯á· \"$1\" á¡áá¼á
ẠLogin áááºáá¼á®á¸áá¼á
áºáááºá'''",
"nosuchusershort": "\"$1\" á¡áááºáá¼áá·áº á¡áá¯á¶á¸áá¼á¯áá°ááá¾ááá«á\ná
á¬áá¯á¶á¸áá±á«ááºá¸ áá¼ááºá
á
áºáá±á¸áá«áááºá",
"nouserspecified": "á¡áá¯á¶á¸áá¼á¯áá°á¡áááºááᯠáá±á¬áºáá¼ááááºáá¼á
áºáááºá",
@@ -417,7 +417,7 @@
"accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|áá½á±á¸áá½á±á¸]]) á¡áá½áẠá¡áá±á¬áá·áºááᯠáááºáá®á¸áá¼á®á¸ áá¼á
áºáááºá",
"createaccount-title": "{{SITENAME}} á¡áá½áẠá¡áá±á¬áá·áºáá¼á¯áá¯ááºáá¼ááºá¸",
"login-throttled": "áááºááẠlogin áááºááẠá¡áá¼áááºáá¼á±á¬ááºáá¼á¬á¸á
á½á¬ á¡á¬á¸áá¯ááºáá²á·áá¼á®á¸áá¼á
áºáááºá\náá»á±á¸áá°á¸áá¼á¯á áááºááááºááẠ$1 á
á±á¬áá·áºáá±á¸áá«á",
- "login-abort-generic": "Login áááºáá¼ááºá¸ áá¡á±á¬ááºáá¼ááºáá« - áá½ááºáá½á¬á¸áá¼á®",
+ "login-abort-generic": "áá±á¬á·ááºá¡ááºáááºáá¼ááºá¸ áá¡á±á¬ááºáá¼ááºáá« - áá»ááºááááºá¸áá¼á®á¸",
"loginlanguagelabel": "áá¬áá¬: $1",
"pt-login": "á¡áá±á¬áá·áºáááºáááº",
"pt-login-button": "á¡áá±á¬áá·áºáááºáááº",
@@ -430,7 +430,7 @@
"newpassword": "á
áá¬á¸áá¾áẠá¡áá
Ạ-",
"retypenew": "á
áá¬á¸áá¾áẠá¡áá
áºááᯠáááºááá¯ááºáá« -",
"resetpass_submit": "á
áá¬á¸áá¾ááºááᯠáááºáá¾ááºáá¼á®á¸áá±á¬áẠLog in áááºáááº",
- "changepassword-success": "ááá·áºá
áá¬á¸áá¾ááºááᯠá¡á±á¬ááºáá¼ááºá
á½á¬ áá¼á±á¬ááºá¸áá²áá¼á®á¸áá«áá¼á®á",
+ "changepassword-success": "ááá·áºá
áá¬á¸áá¾ááºááᯠáá¼á±á¬ááºá¸áá²áá¼á®á¸áá«áá¼á®!",
"botpasswords-label-appid": "áá±á¬á·á¡áááº-",
"botpasswords-label-create": "áááºáá®á¸",
"botpasswords-label-cancel": "ááá¯ááºáá±á¬á·áá«",
@@ -572,7 +572,7 @@
"revdelete-unsuppress": "áá¼ááºáááºááááºá¸ááááºá¸áá¬á¸áá±á¬ áá°áá»á¬á¸áá¾ ááá·áºáááºáá»ááºáá»á¬á¸ááᯠáááºáá¾á¬á¸áááº",
"revdelete-log": "á¡âáá¼á±á¬ááºá¸âáá¼âáá»ááº:",
"revdelete-submit": "áá½á±á¸áá»ááºáá¬á¸áá±á¬ {{PLURAL:$1|áá°|áá°áá»á¬á¸}}ááᯠáááºáá±á¬ááºá
á±áááº",
- "revdelete-success": "'''áá°áá¼ááºááá¯ááºá
á½ááºá¸áá¾ááá¾á¯ááᯠá¡á±á¬ááºáá¼ááºá
á½á¬ update áá¯ááºáá¼á®á¸áá«áá¼á®á'''",
+ "revdelete-success": "áá°áá¼ááºááá¯ááºá
á½ááºá¸áá¾ááá¾á¯ááᯠupdate áá¯ááºáá¼á®á¸áá«áá¼á®á",
"revdel-restore": "áááºáá»á¾ áá¾á¯áá¼ááºááá¯ááºáááºááᯠáá¼á±á¬ááºá¸áááº",
"pagehist": "á
á¬áá»ááºáá¾á¬ áá¾ááºáááºá¸",
"deletedhist": "áá»ááºáá
áºááá¯ááºáá±á¬ áá¾ááºáááºá¸",
diff --git a/languages/i18n/mzn.json b/languages/i18n/mzn.json
index 6728fed0c3..dc66e1358a 100644
--- a/languages/i18n/mzn.json
+++ b/languages/i18n/mzn.json
@@ -341,8 +341,6 @@
"createacct-email-ph": "ش٠اÛÙ
Û٠ر٠باÙÙÛÙ",
"createaccountmail": "اÛÙ
Û٠جÙ",
"createaccountreason": "دÙÛÙ:",
- "createacct-captcha": "اÙ
ÙÛØªÛ ÚÚ©",
- "createacct-imgcaptcha-ph": "اÛ٠بÙÙÛشتÙâÛÛ Ú©Ù Ø¨Ø§Ùا ÙÛÙÙÛ Ø±Ù Ø¨ÙÙÛسÛÙ",
"createacct-submit": "ش٠اکاÙت ر٠بسازÛÙ",
"createacct-benefit-heading": "{{SITENAME}} ر٠شÙÙ
Ù ÙØ§Ø±Û Ø¢Ø¯ÙÙ
Ù٠بÙساتÙÙ",
"createacct-benefit-body1": "{{PLURAL:$1|دÚÛâÛÙ}}",
@@ -517,7 +515,7 @@
"recentchanges-label-bot": "اÛÙتا ÙÛراÛØ´âر٠ات٠ربات اÙجاÙ
ÙدائÙ",
"recentchanges-label-unpatrolled": "اÛ٠دÙÚÛâÛ٠ر٠ÙÙÙتا Ø¨Ø±Ø±Ø³Û ÙÙکاردÙÙ.",
"recentchanges-label-plusminus": "صÙØÙâÛ ÙÙاÛد٠اÙد٠باÛت تغÛÛر ÙاکردÙ",
- "recentchanges-legend-heading": "'''اختصارÙÙ:'''",
+ "recentchanges-legend-heading": "اختصارÙÙ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|تاز٠بسات٠صÙØÙâئÙÙ]] ر٠ÙÙ
ÙارشÛÙ)",
"rclistfrom": "ÙÙÙ
اÛØ´ تازÙâدگاردستÙâئÙ٠با شرÙع از $3 $2",
"rcshowhideminor": "Ù¾ÚÛÚ© دÚÛâÛÙâئÙÙ $1",
diff --git a/languages/i18n/nan.json b/languages/i18n/nan.json
index ac1f6805d8..b4fdd36994 100644
--- a/languages/i18n/nan.json
+++ b/languages/i18n/nan.json
@@ -635,7 +635,7 @@
"recentchanges-label-bot": "Che sī ki-khì-lâng kái--ê",
"recentchanges-label-unpatrolled": "é个編輯æç¡å·¡è¦é",
"recentchanges-label-plusminus": "å½¼é æ¹äºï¼ç²¾å·®çä½å
çµ",
- "recentchanges-legend-heading": "'''Ké-soeh:'''",
+ "recentchanges-legend-heading": "Ké-soeh: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (è«åè[[Special:NewPages|æ°é æ¸
å®]])",
"rcnotefrom": "Ä-kha sÄ« $2 kà u ta⿠ê kái-pià n (keÌk-ke hián-sÄ« $1 hÄng).",
"rclistfrom": "Hián-sī tùi $3 $2 kà u ta⿠ê sin kái-pià n",
diff --git a/languages/i18n/nap.json b/languages/i18n/nap.json
index cc7d313890..d1b54bd27d 100644
--- a/languages/i18n/nap.json
+++ b/languages/i18n/nap.json
@@ -153,6 +153,7 @@
"moredotdotdot": "Cchiù...",
"morenotlisted": "Chisto elenco nun è cumpreto.",
"mypage": "Paggena",
+ "anonuserpage": "Utente scanusciuto",
"mytalk": "'E chià cchieriate mmie",
"anontalk": "Chiacchierate",
"navigation": "Navigazzione",
@@ -487,7 +488,7 @@
"createaccount-title": "Criazione 'e nu cunto pe' {{SITENAME}}",
"createaccount-text": "Coccherun ave fatto nu cunto ncoppa {{SITENAME}} ($4) a nomme 'e $2, associato a st'indirizzo 'e posta elettronica. 'A password pe l'utente \"$2\" è abbià ta a comme \"$3\".\nFosse buono 'e trasì ampressa e cagnà 'a password subbeto.\n\nSi 'a criazione d' 'o cunto è stata nu sbaglio, allora putite lassà perde sta mmasciata.",
"login-throttled": "Songo state fatte troppe tentative 'a trasì dint'a nu periodo troppo curto.\nAspetta nu $1 e prova aròppo.",
- "login-abort-generic": "'O login tujo nun ha avuto succiesso - Annullato",
+ "login-abort-generic": "'O login vuosto scassaje - Annullato",
"login-migrated-generic": "'O cunto tuo nun sè mmigrato, e l'username d' 'o tuojo nun esiste cchiù dint'a sta wiki.",
"loginlanguagelabel": "Lengua: $1",
"suspicious-userlogout": "'A richiesta 'e disconnessione d' 'a toja è stata negate pecché pare ca fosse mannata 'a nu navigatóre rutto o nu proxy 'e \"caching\".",
@@ -506,7 +507,7 @@
"newpassword": "Password nova:",
"retypenew": "Ripete 'a password:",
"resetpass_submit": "Stabbelite 'a password e trasite",
- "changepassword-success": "'A password è stata cagnata currettamente!",
+ "changepassword-success": "'A password è stata cagnata!",
"changepassword-throttled": "Songo state fatte troppe tentative 'a trasì.\nAspetta nu $1 apprimma 'e pruvà n'ata vota.",
"botpasswords": "Password bot",
"botpasswords-summary": "Password bot premmettesse 'e trasì a n'utente pe' bbìa d'API senza ausà 'e credenziale d'acciesso prencepale 'e ll'utenza. 'E deritte utente disponibbele quanno s'affettuasse l'accesso cu na password 'e bot se ponn'apprisentà lemmetate.\n\nSi nun canuscite 'o mutivo p' 'o quale 'o putite fà , allora può darse ca nun l'avissev'a ffà . Nisciuno avesse maje 'addimannà 'e crià una 'e chiste p' 'e ddà a chille.",
@@ -529,11 +530,11 @@
"botpasswords-insert-failed": "Nun se pò azzeccà 'o nomme bot \"$1\". Fosse stato già azzeccato?",
"botpasswords-update-failed": "Se scassaje a carrecà 'o nomme bot \"$1\". à stato scancellato?",
"botpasswords-created-title": "Password bot criata",
- "botpasswords-created-body": "'A password bot \"$1\" fuje criata cu' succiesso.",
+ "botpasswords-created-body": "'A password bot \"$1\" 'a ll'utente \"$2\" fuje criata.",
"botpasswords-updated-title": "Password bot agghiurnata",
- "botpasswords-updated-body": "'A password bot \"$1\" è fuje agghiurnata cu' succiesso.",
+ "botpasswords-updated-body": "'A password bot \"$1\" 'a ll'utente \"$2\" fuje agghiurnata.",
"botpasswords-deleted-title": "Password bot scancellata",
- "botpasswords-deleted-body": "'A password bot \"$1\" è stata scancellata.",
+ "botpasswords-deleted-body": "'A password bot \"$1\" 'a ll'utente \"$2\" è stata scancellata.",
"botpasswords-newpassword": "'A password nòva pe' puté trasì cu $1 è $2 . Pe' piacere signatevello chesto pe' ve ffà conzurtaziune future. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider nun è disponibbele.",
"botpasswords-restriction-failed": "'E restriziune 'e password bot nun ve permettessero st'acciesso.",
@@ -825,9 +826,9 @@
"revdelete-unsuppress": "Scancella 'e limmete ncopp' 'e verziune arripigliate",
"revdelete-log": "Mutivo:",
"revdelete-submit": "Applica {{PLURAL:$1|â virziona scigliuta|a 'e virziune scigliute}}",
- "revdelete-success": "'''Visibbelità d' 'a verziona agghiurnata e apposto.'''",
+ "revdelete-success": "Visibbelità d' 'a verziona agghiurnata e apposto.",
"revdelete-failure": "'''Int'a sta virziona 'a visibbelità nun se può agghiurnà :'''\n$1",
- "logdelete-success": "'''Int'a stu riggistro 'a visibbelità è stata scigliuta currettamente.'''",
+ "logdelete-success": "Visebbiletà d' 'o riggistro mpustata.",
"logdelete-failure": "'''Int'a stu riggistro 'a visibbelità nun se può scegliere:'''\n$1",
"revdel-restore": "cà gna visiblità ",
"pagehist": "Verziune 'e primma",
@@ -1070,7 +1071,7 @@
"userrights-changeable-col": "Gruppe ca putite cagnà ",
"userrights-unchangeable-col": "Gruppe ca nun putite cagnà ",
"userrights-conflict": "Conflitto 'e cagnamiento 'e deritte utente! Cuntrullate e cunfermate 'e cagnamiente vuoste.",
- "userrights-removed-self": "Avete rimosso buono 'e deritte vuoste. Picciò nun putite trasì cchiù dint'a sta paggena.",
+ "userrights-removed-self": "Avite rimosso 'e deritte vuoste. Picciò nun putite trasì cchiù dint'a sta paggena.",
"group": "Gruppo:",
"group-user": "Utente",
"group-autoconfirmed": "Utente autocunfermate",
@@ -1486,8 +1487,8 @@
"uploadstash-summary": "Sta paggena dà l'accesso a 'e file ca songo carrecate o ca stanno pe' se carrecà , ma nun songo pubbrecat'ancora ncopp'a sta wiki. Sti file nun songo visibbele a nisciuno, sulamente a chill'utente ca l'ha carrecato.",
"uploadstash-clear": "Pulezza 'e file annascunnute",
"uploadstash-nofiles": "Nun tenite file annascunnute.",
- "uploadstash-badtoken": "L'esecuzione 'e sta azione nun ha avuto successo, forse pecché 'e credenziale 'e cagnamiento so' mmaturate. Prova n'ata vota.",
- "uploadstash-errclear": "'A pulezzia d' 'e file nun ha avuto successo.",
+ "uploadstash-badtoken": "L'esecuzione 'e sta azione scassaje.\nForse pecché 'e credenziale 'e cagnamiento so' mmaturate.\nPruvate n'ata vota.",
+ "uploadstash-errclear": "'A pulezzia d' 'e file scassaje.",
"uploadstash-refresh": "Agghiuorna l'elenco d' 'e file",
"invalid-chunk-offset": "Distanza d' 'a parte nun valida",
"img-auth-accessdenied": "Acciesso negato",
@@ -1994,12 +1995,14 @@
"changecontentmodel-title-label": "Titulo d\"a paggena",
"changecontentmodel-model-label": "Mudello 'e cuntenute nuovo",
"changecontentmodel-reason-label": "Mutivo:",
+ "changecontentmodel-submit": "Cagnato",
"changecontentmodel-success-title": "'O mudello 'e cuntenuto fuje cagnato",
"changecontentmodel-success-text": "'O tipo 'e cuntenut 'e [[:$1]] è stato cagnato.",
"changecontentmodel-cannot-convert": "'E cuntenute dint'a [[:$1]] nun se ponno scagnà a nu tipo 'e $2.",
"changecontentmodel-nodirectediting": "'O mudello 'e cuntenute $1 nun suppurtasse 'o cagnamiento diretto",
"log-name-contentmodel": "Riggistro 'e cagnamiente d' 'o mudello 'e cuntenute",
"log-description-contentmodel": "Evvente azzeccate c' 'o mudello 'e cuntenute 'e na paggena",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|criaje}} 'a paggena $3 ausanno nu mudell' 'e cuntenute nun-predefinito \"$5\"",
"logentry-contentmodel-change": "$1 {{GENDER:$2|cagnaje}} 'o mudello 'e cuntenute 'e na paggena $3 'a \"$4\" a \"$5\"",
"logentry-contentmodel-change-revertlink": "arrepiglia",
"logentry-contentmodel-change-revert": "arrepiglia",
@@ -3208,7 +3211,7 @@
"tags-delete-not-allowed": "'E tag ca se so' definite 'a na stensiona nun se ponno scancellà si nun è c' 'a stensiona 'o premmettesse.",
"tags-delete-not-found": "'O tag $1 nun esiste.",
"tags-delete-too-many-uses": "'O tag \"$1\" è apprecato a cchiù 'e $2 {{PLURAL:$2|verziona|verziune}}, cosa ca vulesse dicere ca nun se ò scancellà .",
- "tags-delete-warnings-after-delete": "'O tag \"$1\" s'è scancellato buono, ma {{PLURAL:$2|s'è ncuntrato ll'avviso|se songhe ncuntrate ll'avise}} ccà :",
+ "tags-delete-warnings-after-delete": "'O tag \"$1\" s'è scancellato, ma {{PLURAL:$2|s'è ncuntrato ll'avviso|se songhe ncuntrate ll'avise}} ccà :",
"tags-activate-title": "Appiccia 'o tag",
"tags-activate-question": "Vuje state p'appiccià 'o tag \"$1\".",
"tags-activate-reason": "Mutivo:",
diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json
index 0a5732058a..4bdecee698 100644
--- a/languages/i18n/nb.json
+++ b/languages/i18n/nb.json
@@ -1295,7 +1295,7 @@
"recentchanges-label-bot": "Denne redigeringen ble gjort av en bot",
"recentchanges-label-unpatrolled": "Denne redigeringen har ikke blitt patruljert ennå",
"recentchanges-label-plusminus": "Sidestørrelsen ble endret med dette antallet byte",
- "recentchanges-legend-heading": "'''Tegnforklaring:'''",
+ "recentchanges-legend-heading": "Tegnforklaring: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste over nye sider]])",
"recentchanges-legend-plusminus": "«(±123)»",
"recentchanges-submit": "Vis",
diff --git a/languages/i18n/nds-nl.json b/languages/i18n/nds-nl.json
index 86f1b2c739..e122c0e958 100644
--- a/languages/i18n/nds-nl.json
+++ b/languages/i18n/nds-nl.json
@@ -1102,7 +1102,7 @@
"recentchanges-label-bot": "Disse bewarking is uutevoerd deur n bot",
"recentchanges-label-unpatrolled": "Disse bewarking is nog niet nao-ekeken",
"recentchanges-label-plusminus": "Disse ziedgrootte is mit dit antal bytes ewiezigd",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zie oek de [[Special:NewPages|lieste mit nieje ziejen]])",
"rcnotefrom": "Dit bin de wiezigingen sinds $2 (maximum van $1 wiezigingen).",
"rclistfrom": "Bekiek wiezigingen vanaof $3 $2",
diff --git a/languages/i18n/ne.json b/languages/i18n/ne.json
index d3aae3548e..ac0d25ce61 100644
--- a/languages/i18n/ne.json
+++ b/languages/i18n/ne.json
@@ -1189,7 +1189,7 @@
"recentchanges-label-bot": "यॠसमà¥à¤ªà¤¾à¤¦à¤¨ बà¥à¤à¤¦à¥à¤µà¤¾à¤°à¤¾ à¤à¤°à¤¿à¤à¤à¥ थियà¥",
"recentchanges-label-unpatrolled": "यॠसमà¥à¤ªà¤¾à¤¦à¤¨ à¤
हिलॠसमà¥à¤® à¤à¤¸à¥à¤¤à¥ à¤à¤°à¤¿à¤à¤à¥ à¤à¥à¤¨",
"recentchanges-label-plusminus": "यति बाà¤à¤à¤¹à¤°à¥ सà¤à¤à¥à¤¯à¤¾à¤²à¥ पà¥à¤·à¥à¤ à¤à¥ à¤à¤à¤¾à¤° परिवरà¥à¤¤à¤¨ à¤à¤à¤à¥ à¤",
- "recentchanges-legend-heading": "'''à¤à¤¦à¤°à¥à¤¶ वाà¤à¥à¤¯:'''",
+ "recentchanges-legend-heading": "à¤à¤¦à¤°à¥à¤¶ वाà¤à¥à¤¯: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नयाठपà¥à¤·à¥à¤ हरà¥à¤à¥ सà¥à¤à¥]] यॠपनि हà¥à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥)",
"recentchanges-legend-plusminus": "(''±१२३'')",
"recentchanges-submit": "दà¥à¤à¤¾à¤à¤¨à¥à¤¹à¥à¤¸à¥",
diff --git a/languages/i18n/nn.json b/languages/i18n/nn.json
index 6aec91c5ea..d751514c13 100644
--- a/languages/i18n/nn.json
+++ b/languages/i18n/nn.json
@@ -1095,7 +1095,7 @@
"recentchanges-label-bot": "Endringa vart gjord av ein robot",
"recentchanges-label-unpatrolled": "Endringa er ikkje patruljert enno",
"recentchanges-label-plusminus": "Storleiken til sida vart endra med så mange byte",
- "recentchanges-legend-heading": "'''Tyding:'''",
+ "recentchanges-legend-heading": "Tyding: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjå dessutan [[Special:NewPages|lista over nye sider]])",
"recentchanges-submit": "Vis",
"rcnotefrom": "Nedanfor er endringane gjorde sidan $2 viste (opp til $1 stykke)",
diff --git a/languages/i18n/oc.json b/languages/i18n/oc.json
index 92ff581970..3a68073ecc 100644
--- a/languages/i18n/oc.json
+++ b/languages/i18n/oc.json
@@ -1153,7 +1153,7 @@
"recentchanges-label-bot": "Aqueste cambiament es estat efectuat per un bòt.",
"recentchanges-label-unpatrolled": "Aqueste cambiament es pas estat verificat encara.",
"recentchanges-label-plusminus": "La talha de la pagina a cambiat d'aqueste nombre dâoctets.",
- "recentchanges-legend-heading": "'''Legenda :'''",
+ "recentchanges-legend-heading": "Legenda : ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
"rcnotefrom": "Ãaijós {{PLURAL:$5|la modificacion efectuada|las modificacions efectuadas}} dempuèi lo $3, $4 (afichadas fins a $1 ).",
"rclistfrom": "Afichar las modificacions novèlas dempuèi lo $3 $2",
@@ -1363,7 +1363,7 @@
"licenses-edit": "Modificar las opcions de licéncia",
"license-nopreview": "(Previsualizacion impossibla)",
"upload_source_url": "(lo fichièr qu'avètz causit dempuèi una URL valida e accessibla publicament)",
- "upload_source_file": "(vòstre fichièr causit dempuèi vòstre ordenador)",
+ "upload_source_file": "(vòstre fichièr causit dempuèi vòstre ordinator)",
"listfiles-delete": "suprimir",
"listfiles-summary": "Aquesta pagina especiala permet de far la lista de totes los fichièrs importats.",
"listfiles_search_for": "Recèrca del mèdia nomenat :",
diff --git a/languages/i18n/olo.json b/languages/i18n/olo.json
index da3e1a3f2c..486d5e958f 100644
--- a/languages/i18n/olo.json
+++ b/languages/i18n/olo.json
@@ -699,7 +699,7 @@
"recentchanges-label-bot": "Tämän kohenduksen on luadinuh bot",
"recentchanges-label-unpatrolled": "Tädä korjuandua vie ei ole tarkistettu",
"recentchanges-label-plusminus": "Sivu on kazvanuh [] baital",
- "recentchanges-legend-heading": "'''Legendu:'''",
+ "recentchanges-legend-heading": "Legendu: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kaÄo sežo [[Special:NewPages|uuzien sivuloin listu]])",
"rclistfrom": "Ozuta jälgimäzet muutokset algajen $2, $3",
"rcshowhideminor": "$1 pienet kohendukset",
diff --git a/languages/i18n/or.json b/languages/i18n/or.json
index c203837b1e..e9ff2ede71 100644
--- a/languages/i18n/or.json
+++ b/languages/i18n/or.json
@@ -1163,7 +1163,7 @@
"recentchanges-label-bot": "à¬à¬¹à¬¿ ବଦଳà¬à¬¿ à¬à¬£à '''ବà¬'''à¬àଠଦàଠà¬à¬°à¬¾à¬¯à¬¾à¬à¬¥à¬¿à¬²à¬¾",
"recentchanges-label-unpatrolled": "à¬à¬¹à¬¿ ବଦଳà¬à¬¿à¬à ଠଯାà¬à¬ ପରà¬à¬¾ ଯାà¬à¬¨à¬¾à¬¹à¬¿à¬",
"recentchanges-label-plusminus": "à¬à¬¹à¬¿ ବାà¬à¬ ତଥààରà à¬à¬ ପàଷàଠାର à¬à¬à¬¾à¬° ବଦଳ",
- "recentchanges-legend-heading": "'''à¬à¬à¬³à¬¨:'''",
+ "recentchanges-legend-heading": "à¬à¬à¬³à¬¨: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (à¬à¬¹àରି ଦàà¬à¬¨àତà: [[Special:NewPages|ନàଠପàଷàଠାମାନà¬àଠତାଲିà¬à¬¾]])",
"rcnotefrom": "$3, $4 ପରଠାରà {{PLURAL:$5|ବଦଳà¬à¬¿|ବଦଳà¬àଡ଼ିà¬}} ତଳà ଦିà¬à¬à¬²à¬¾ ($1 ଯାଠଦିà¬à¬à¬²à¬¾) ।",
"rclistfrom": "$3 $2ରà à¬à¬°à¬®àଠà¬à¬°à¬¿ ନàଠବଦଳà¬àଡ଼ିଠଦàà¬à¬¾à¬à¬¬à",
diff --git a/languages/i18n/os.json b/languages/i18n/os.json
index 1dbdf8a1c5..460665ec45 100644
--- a/languages/i18n/os.json
+++ b/languages/i18n/os.json
@@ -909,7 +909,7 @@
"recentchanges-label-minor": "Ðй Ñ ÑÑÑÑл ивд",
"recentchanges-label-bot": "ÐÑÑ Ð¸Ð²Ð´ Ð±Ð¾Ñ ÑаÑæзÑа",
"recentchanges-label-unpatrolled": "ÐÑÑ Ð¸Ð²Ð´ нÑÑмæ Ð½Ã¦Ñ ÑÐ¸Ð´Ð°Ñ Ð³Ð¾Ð½Ð´",
- "recentchanges-legend-heading": "'''Ðегендæ:'''",
+ "recentchanges-legend-heading": "Ðегендæ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ÑÑй йеддæмæ Ñен [[Special:NewPages|ног ÑæÑÑÑÑ Ð½Ð¾Ð¼Ñ
ÑгÑд]])",
"rcnotefrom": "ÐÑÐ½Ð´Ã¦Ñ ÑÑÑ Ã¦Ð²Ð´ÑÑÑ Ð¸Ð²Ð´ÑÑÑæ '''$2'''-æй ('''{{grammar:genitive|$1}}''' йонг).",
"rclistfrom": "РавдиÑÑн ивдÑÑÑæ амæй ÑæÑÑæ: $3 $2",
diff --git a/languages/i18n/pa.json b/languages/i18n/pa.json
index 0363c07e68..407e9b9f44 100644
--- a/languages/i18n/pa.json
+++ b/languages/i18n/pa.json
@@ -1037,7 +1037,7 @@
"recentchanges-label-bot": "à¨à¨¹ ਸà©à¨§ à¨à©±à¨ ਬà©à¨ ਦà©à¨à¨°à¨¾ à¨à©à¨¤à© à¨à¨ ਸà©",
"recentchanges-label-unpatrolled": "à¨à¨¹ ਫà©à¨°-ਬਦਲ ਹਾਲ੠ਵà©à¨à¨¿à¨ ਨਹà©à¨ à¨à¨¿à¨",
"recentchanges-label-plusminus": "ਸਫ਼੠ਵਿੱਠà¨à©°à¨¨à©à¨à¨ ਬਾà¨à¨à¨¾à¨ ਦ੠ਤਬਦà©à¨²à© ਹà©à¨",
- "recentchanges-legend-heading": "'''à¨à©à¨à¨¾:'''",
+ "recentchanges-legend-heading": "à¨à©à¨à¨¾: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ਨਵà©à¨ ਸਫ਼ਿà¨à¨ ਦ੠ਸà©à¨à©]] ਵ੠ਵà©à¨à©)",
"recentchanges-legend-plusminus": "(''±੧੨੩'')",
"recentchanges-submit": "ਦਿà¨à¨¾à¨",
diff --git a/languages/i18n/pfl.json b/languages/i18n/pfl.json
index c39ce4c463..5c0ab955d1 100644
--- a/languages/i18n/pfl.json
+++ b/languages/i18n/pfl.json
@@ -305,8 +305,6 @@
"createacct-realname": "Wie heschd (mugschds awwa nedd)",
"createaccountreason": "Grund:",
"createacct-reason": "Bgrindung",
- "createacct-captcha": "Sischahaidsbriefung",
- "createacct-imgcaptcha-ph": "Gebbde Tegschd oi, wu owwe seje duschd",
"createacct-submit": "Leschda ä Kondo oa",
"createacct-another-submit": "Leschda ä onnares Kondo oa",
"createacct-benefit-heading": "{{SITENAME}} wead vun Laid wie dia gmachd.",
@@ -643,7 +641,7 @@
"recentchanges-label-bot": "Ãnnarunge duaschn Bod",
"recentchanges-label-unpatrolled": "Die Ãnnarung isch noch nedd iwwabriefd worre",
"recentchanges-label-plusminus": "Ãnnarung vunde Saidegreeà in Bytes",
- "recentchanges-legend-heading": "'''Bildtegschd:'''",
+ "recentchanges-legend-heading": "Bildtegschd: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gugg a uff [[Special:NewPages|Lischd vun naije Saide]])",
"rcnotefrom": "Unne sinn Ãnnarunge said $2<-strong> (bis $1<-strong>).",
"rclistfrom": "Zaisch die ledschde Ãnnarunge ab $3 $2",
@@ -777,6 +775,7 @@
"unusedcategoriestext": "Die Sachgrubb hodds, a wonnse vun känna onnare Said odda Sachgrubb gnumme werd.",
"pager-newer-n": "{{PLURAL:$1|negschd 1|negschd $1}}",
"pager-older-n": "{{PLURAL:$1|vorisch 1|vorische $1}}",
+ "apisandbox-api-disabled": "Die API isch uffm Wiki abgschdelld worre.",
"booksources": "Buchgwelle",
"booksources-search-legend": "Noch Buchgwelle gugge",
"booksources-search": "Gugg",
@@ -938,7 +937,6 @@
"movepagetext": "Midm Formad konnschd ä Said en naije Nome gewwe, debai werrem alli alde Ausgawe uffde nai Nome vaschowe.\nAusm alde Nome werd e Waidalaidungssaid zum naije Nome.\nWaidalaidungssaide, wu uffde ald Nome umlaide dun, konnschd vun allä uffde naischde Schdond bringe.\nWonndes ned willschd, guggschd uff [[Special:DoubleRedirects|dobbldi]] odda [[Special:BrokenRedirects|kabuddi Waidalaidunge]].\nSoasch dfia, dass Linggs waida uffdie rischdische Saide fiehan.\n\nGebb Achd, dass die Said '''ned''' vaschowe werd, wonns schunä Said midm naije Nome hod, auÃa wonnse lea isch odda e Waidalaidung.\nDes heeÃd, Du konnschd ke Said, wus schun gibbd, iwwaschraiwe.\n\n'''BAÃMAUFF!'''\nDes isch e wischdischi Ãnnarung fa e Said un konn zimlisch uuerwaaded soi fa wischdischi Saide;\nmach des bloÃ, wonn die Folsche vunde MaÃnohm a abschedze konnschd.",
"movepagetext-noredirectfixer": "Middm Foamula unne koschd die Said nai bnenne, wonnse midde gonse Gschischd uffn naije Noame bwesche duschd.\nDe ald Tidl weadä Said midd änna Waidalaidung uff die Said werre.\nBass uff unn gugg uff [[Special:DoubleRedirects|dobbelde]] odda [[Special:BrokenRedirects|kabudde Waidalaidunge]]. Du bischd dvoa vaondwoadlisch, dass Ling'gs uffs rischdische zaische dun.\n\nBass uff, die Said wead nedd vaschowe, wonns schun ä Said gewwe dud, wude selwe Noame hodd, aussa, s'isch ä Waidalaidung ohne Gschischd.\nDes heesd, wonnän Fehla gmschd hoschd, konschd ä Said zrigg. Awwa konschd kä Said iwwaschraiwe, wus schun hodd.\n\nBassma uff, Beaschl! \nDes konn schlimme Folsche fa b'liewde Saide hawwe. Saida wiaglisch sischa, dass a alles was do due wilschd, a vaschdonne hoschd. Odda losses sunschd bessa soi.",
"movepagetalktext": "D Dischbediersaid werd ach mid verschowe, '''ausser:'''\n* Du verschiebsch die Saide in e annere Namensraum, odder\n* s gebbt schun e Dischbediersaid mi dem Name, orrer\n* Du wählsch unne d Option, se nid z verschiewe.\n\nIn denne Fäll misst mer d Dischbediersaid vun Hand kopiere.",
- "movearticle": "Said vaschiewe:",
"newtitle": "Zum naije Didl:",
"move-watch": "Die Said beowachde",
"movepagebtn": "Said vaschiewe",
@@ -949,7 +947,6 @@
"movelogpage": "Vaschiewungs-Logbuch",
"movereason": "Grund:",
"revertmove": "Zurigg vaschiewe",
- "delete_and_move": "Lesche un Verschiewe",
"delete_and_move_confirm": "Ja, Said lesche",
"export": "Saide rausgewwe",
"exportcuronly": "Bloà die ledschd Ãnnarung vunde Said exboadiere",
diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json
index d91ed95fff..bcea86b0c7 100644
--- a/languages/i18n/pl.json
+++ b/languages/i18n/pl.json
@@ -81,7 +81,8 @@
"Doctore",
"PiotrAntosz",
"The Polish",
- "Expert3222"
+ "Expert3222",
+ "Mateuszek045"
]
},
"tog-underline": "PodkreÅlenie linków:",
@@ -522,7 +523,7 @@
"nocookieslogin": "{{SITENAME}} wykorzystuje ciasteczka do przechowywania informacji o zalogowaniu siÄ przez użytkownika.\nMasz obecnie w przeglÄ
darce wyÅÄ
czonÄ
obsÅugÄ ciasteczek.\nSpróbuj ponownie po jej wÅÄ
czeniu.",
"nocookiesfornew": "Konto użytkownika nie zostaÅo utworzone, ponieważ nie można byÅo potwierdziÄ jego źródÅa.\nUpewnij siÄ, że masz wÅÄ
czonÄ
obsÅugÄ ciasteczek, przeÅaduj stronÄ i spróbuj ponownie.",
"noname": "To nie jest poprawna nazwa użytkownika.",
- "loginsuccesstitle": "Zalogowano pomyÅlnie",
+ "loginsuccesstitle": "Zalogowano",
"loginsuccess": "'''{{GENDER:|ZalogowaÅeÅ siÄ|ZalogowaÅaÅ siÄ|Zalogowano}} do {{GRAMMAR:D.lp|{{SITENAME}}}} jako â$1â.'''",
"nosuchuser": "Brak użytkownika o nazwie â$1â.\nW nazwie użytkownika ma znaczenie wielkoÅÄ znaków.\nSprawdź pisowniÄ lub [[Special:UserLogin/signup|utwórz nowe konto]].",
"nosuchusershort": "Brak użytkownika o nazwie â$1â.\nSprawdź poprawnoÅÄ pisowni.",
@@ -578,14 +579,16 @@
"newpassword": "Nowe hasÅo:",
"retypenew": "Powtórz nowe hasÅo:",
"resetpass_submit": "Ustaw hasÅo i zaloguj siÄ",
- "changepassword-success": "Twoje hasÅo zostaÅo pomyÅlnie zmienione!",
+ "changepassword-success": "Twoje hasÅo zostaÅo zmienione!",
"changepassword-throttled": "Ostatnio zbyt wiele razy próbowaÅeÅ zalogowaÄ siÄ na to konto.\nOdczekaj $1, zanim ponowisz próbÄ.",
+ "botpasswords": "HasÅa bota",
"botpasswords-label-appid": "Nazwa bota:",
"botpasswords-label-create": "Utwórz",
"botpasswords-label-update": "Aktualizuj",
"botpasswords-label-cancel": "Anuluj",
"botpasswords-label-delete": "UsuÅ",
"botpasswords-label-resetpassword": "Zresetuj hasÅo",
+ "botpasswords-label-grants-column": "Przyznane",
"resetpass_forbidden": "HasÅa nie mogÄ
zostaÄ zmienione",
"resetpass-no-info": "Musisz byÄ zalogowany, by uzyskaÄ bezpoÅredni dostÄp do tej strony.",
"resetpass-submit-loggedin": "ZmieÅ hasÅo",
@@ -874,9 +877,9 @@
"revdelete-unsuppress": "WyÅÄ
cz utajnianie dla odtwarzanej historii zmian",
"revdelete-log": "Powód:",
"revdelete-submit": "Zaakceptuj dla {{PLURAL:$1|wybranej|wybranych}} wersji",
- "revdelete-success": "'''Uaktualniono widocznoÅÄ wersji.'''",
+ "revdelete-success": "Uaktualniono widocznoÅÄ wersji.",
"revdelete-failure": "'''WidocznoÅÄ wersji nie może zostaÄ uaktualniona â '''\n$1",
- "logdelete-success": "'''Zmieniono widocznoÅÄ zdarzeÅ.'''",
+ "logdelete-success": "Zmieniono widocznoÅÄ zdarzeÅ.",
"logdelete-failure": "'''WidocznoÅÄ rejestru nie może zostaÄ ustawiona â '''\n$1",
"revdel-restore": "zmieÅ widocznoÅÄ",
"pagehist": "Historia edycji strony",
@@ -1075,7 +1078,7 @@
"gender-female": "kobieta",
"prefs-help-gender": "Podanie pÅci nie jest obowiÄ
zkowe. JeÅli zdecydujesz siÄ jÄ
okreÅliÄ, oprogramowanie dostosuje do niej interfejs. Informacja o Twojej pÅci bÄdzie widoczna dla wszystkich.",
"email": "Eâmail",
- "prefs-help-realname": "ImiÄ i nazwisko jest opcjonalne.\nJeÅli je podasz, to może byÄ stosowane w celu przypisania Twojej pracy.",
+ "prefs-help-realname": "ImiÄ i nazwisko jest opcjonalne.\nJeÅli zdecydujesz siÄ je podaÄ, zostanÄ
użyte, by udokumentowaÄ Twoje autorstwo.",
"prefs-help-email": "Podanie adresu eâmail nie jest obowiÄ
zkowe, lecz jest konieczne do zresetowania zapomnianego hasÅa.",
"prefs-help-email-others": "Możesz również umożliwiÄ innym użytkownikom wysÅanie do Ciebie eâmaila poprzez TwojÄ
stronÄ użytkownika lub stronÄ dyskusji (bez ujawniania Twojego adresu).",
"prefs-help-email-required": "Wymagany jest adres eâmail.",
@@ -1116,7 +1119,7 @@
"userrights-changeable-col": "Grupy, które możesz wybraÄ",
"userrights-unchangeable-col": "Grupy, których nie możesz wybraÄ",
"userrights-conflict": "Konflikt zmiany uprawnieÅ użytkownika! ProszÄ sprawdziÄ i potwierdziÄ swoje zmiany.",
- "userrights-removed-self": "PomyÅlnie odebraÅeÅ sobie uprawnienia. W zwiÄ
zku z tym nie masz już dostÄpu do tej strony.",
+ "userrights-removed-self": "OdebraÅeÅ sobie uprawnienia. W zwiÄ
zku z tym nie masz już dostÄpu do tej strony.",
"group": "Grupa:",
"group-user": "Użytkownicy",
"group-autoconfirmed": "Automatycznie zatwierdzeni użytkownicy",
@@ -1519,7 +1522,7 @@
"uploadstash-summary": "Ta strona umożliwia dostÄp do przesÅanych lub wÅaÅnie przesyÅanych plików, ale jeszcze nie opublikowanych na wiki. Pliki widzi wyÅÄ
cznie użytkownik, które je przesÅaÅ.",
"uploadstash-clear": "WyczyÅÄ schowek z plikami",
"uploadstash-nofiles": "Nie masz żadnych ukrytych plików.",
- "uploadstash-badtoken": "Operacja nie powiodÅa siÄ. MożliwÄ
przyczynÄ
jest, że Twoje upoważnienie do edytowania wygasÅo. Spróbuj ponownie.",
+ "uploadstash-badtoken": "Operacja nie powiodÅa siÄ. ByÄ może Twoje upoważnienie do edytowania wygasÅo. Spróbuj ponownie.",
"uploadstash-errclear": "Czyszczenie plików nie powiodÅo siÄ.",
"uploadstash-refresh": "OdÅwież listÄ plików",
"invalid-chunk-offset": "NieprawidÅowe przesuniÄcie fragmentu",
@@ -1773,10 +1776,14 @@
"apisandbox-jsonly": "Do korzystania z brudnopisu API wymagany jest JavaScript.",
"apisandbox-api-disabled": "API jest wyÅÄ
czone na tej stronie.",
"apisandbox-intro": "Użyj tej strony do eksperymentowania z serwisem API MediaWiki .\nWiÄcej szczegóÅów na temat wykorzystywania API można znaleÅºÄ w [[mw:API:Main page|dokumentacji API]]. PrzykÅad: [//www.mediawiki.org/wiki/API#A_simple_example pobranie zawartoÅci strony gÅównej]. Wybierz akcjÄ, by zobaczyÄ wiÄcej przykÅadów.\n\nZwrÃ³Ä uwagÄ, że chociaż jest to brudnopis, to dziaÅania, które można przeprowadzaÄ na tej stronie, mogÄ
zmieniÄ wiki.",
+ "apisandbox-fullscreen": "Rozszerz panel",
+ "apisandbox-fullscreen-tooltip": "Rozszerz panel Årodowiska testowego, aby zajmowaÅ caÅe okno przeglÄ
darki.",
"apisandbox-unfullscreen": "Pokaż stronÄ",
+ "apisandbox-unfullscreen-tooltip": "Zmniejsz pasek Årodowiska testowego, aby linki nawigacyjne MediaWiki staÅy siÄ dostÄpne.",
"apisandbox-submit": "Wykonaj zapytanie",
"apisandbox-reset": "WyczyÅÄ",
"apisandbox-retry": "Ponów próbÄ",
+ "apisandbox-loading": "Åadowanie informacji o module API â$1ââ¦",
"apisandbox-no-parameters": "Ten moduŠAPI nie posiada parametrów.",
"apisandbox-helpurls": "Linki pomocy",
"apisandbox-examples": "PrzykÅady",
@@ -1784,12 +1791,16 @@
"apisandbox-dynamic-parameters-add-label": "Dodaj parametr:",
"apisandbox-dynamic-parameters-add-placeholder": "Nazwa parametru",
"apisandbox-dynamic-error-exists": "Parametr o nazwie â$1â już istnieje.",
+ "apisandbox-deprecated-parameters": "PrzestarzaÅe parametry",
+ "apisandbox-fetch-token": "Automatycznie uzupeÅnij token",
"apisandbox-submit-invalid-fields-title": "Niektóre pola sÄ
nieprawidÅowe",
"apisandbox-submit-invalid-fields-message": "Popraw zaznaczone pola i spróbuj ponownie.",
"apisandbox-results": "Wyniki",
+ "apisandbox-sending-request": "WysyÅanie zapytania APIâ¦",
"apisandbox-loading-results": "Pobieranie wyników API...",
"apisandbox-request-url-label": "URL zapytania:",
"apisandbox-request-time": "Czas przetwarzania zapytania: {{PLURAL:$1|$1 ms}}",
+ "apisandbox-results-fixtoken": "Popraw token i wyÅlij ponownie",
"apisandbox-alert-page": "Pola na tej stronie sÄ
nieprawidÅowe.",
"apisandbox-alert-field": "WartoÅÄ tego pola jest nieprawidÅowa.",
"booksources": "KsiÄ
żki",
@@ -1872,6 +1883,8 @@
"listgrouprights-namespaceprotection-header": "Ograniczenia przestrzeni nazw",
"listgrouprights-namespaceprotection-namespace": "PrzestrzeÅ nazw",
"listgrouprights-namespaceprotection-restrictedto": "Uprawnienia pozwalajÄ
ce użytkownikom na edytowanie",
+ "listgrants": "Uprawnienia",
+ "listgrants-grant": "Uprawnienie",
"listgrants-rights": "Uprawnienie",
"trackingcategories": "Åledzenie kategorii",
"trackingcategories-summary": "Ta strona zawiera listÄ kategorii monitorujÄ
cych wypeÅnianych automatycznie przez oprogramowanie MediaWiki. Nazwy kategorii można zmieniÄ edytujÄ
c odpowiednie komunikaty systemowe znajdujÄ
ce siÄ w przestrzeni nazw {{ns:8}}.",
@@ -1996,7 +2009,7 @@
"delete-toobig": "Ta strona ma bardzo dÅugÄ
historiÄ edycji â ponad $1 {{PLURAL:$1|zmianÄ|zmiany|zmian}}. \nUsuwanie jej zostaÅo ograniczone ze wzglÄdu na możliwoÅÄ zakÅócenia pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.",
"delete-warning-toobig": "Ta strona ma bardzo dÅugÄ
historiÄ edycji â ponad $1 {{PLURAL:$1|zmianÄ|zmiany|zmian}}. \nBÄ
dź ostrożny, ponieważ usuniÄcie jej może spowodowaÄ zakÅócenia w pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.",
"deleteprotected": "Nie możesz usunÄ
Ä tej strony, ponieważ zostaÅa zabezpieczona.",
- "deleting-backlinks-warning": "''' Uwaga:''' Do strony, którÄ
masz zamiar usunÄ
Ä, odwoÅujÄ
siÄ [[Special:WhatLinksHere/{{FULLPAGENAME}}|inne strony]].",
+ "deleting-backlinks-warning": "Uwaga: Do strony, którÄ
masz zamiar usunÄ
Ä, odwoÅujÄ
siÄ [[Special:WhatLinksHere/{{FULLPAGENAME}}|inne strony]].",
"rollback": "Cofnij edycjÄ",
"rollbacklink": "cofnij",
"rollbacklinkcount": "cofnij $1 {{PLURAL:$1|edycjÄ|edycje|edycji}}",
@@ -2015,6 +2028,7 @@
"changecontentmodel-title-label": "TytuÅ strony",
"changecontentmodel-model-label": "Nowy model zawartoÅci",
"changecontentmodel-reason-label": "Powód:",
+ "changecontentmodel-submit": "ZmieÅ",
"changecontentmodel-success-title": "Model zawartoÅci zostaÅ zmieniony",
"changecontentmodel-success-text": "Typ zawartoÅci [[:$1]] zostaÅ zmieniony.",
"changecontentmodel-cannot-convert": "ZawartoÅÄ [[:$1]] nie może byÄ przeksztaÅcona do typu $2.",
@@ -2347,7 +2361,7 @@
"move-leave-redirect": "Pozostaw przekierowanie pod dotychczasowym tytuÅem.",
"protectedpagemovewarning": "'''UWAGA!''' Ponieważ strona zostaÅa zabezpieczona, tylko użytkownicy z uprawnieniami administratora mogÄ
zmieniÄ jej nazwÄ.\nOstatni wpis z rejestru jest pokazany poniżej.",
"semiprotectedpagemovewarning": "'''Uwaga!''' Ponieważ strona zostaÅa zabezpieczona, tylko zarejestrowani użytkownicy mogÄ
zmieniÄ jej nazwÄ.\nOstatni wpis z rejestru jest pokazany poniżej.",
- "move-over-sharedrepo": "== Plik istnieje ==\n[[:$1]] istnieje we wspólnym repozytorium. Zmiana nazwy pliku na tÄ spowoduje przesÅoniÄcie wspóÅdzielonego pliku.",
+ "move-over-sharedrepo": "[[:$1]] istnieje we wspólnym repozytorium. Zmiana nazwy pliku na tÄ spowoduje przesÅoniÄcie wspóÅdzielonego pliku.",
"file-exists-sharedrepo": "Plik o wybranej nazwie istnieje we wspólnym repozytorium.\nWybierz innÄ
nazwÄ.",
"export": "Eksport stron",
"exporttext": "Możesz wyeksportowaÄ treÅÄ i historiÄ edycji jednej strony lub zestawu stron w formacie XML.\nWyeksportowane informacje można później zaimportowaÄ do innej wiki, dziaÅajÄ
cej na oprogramowaniu MediaWiki, korzystajÄ
c ze [[Special:Import|strony importu]].\n\nWyeksportowanie wielu stron wymaga wpisania poniżej tytuÅów stron po jednym tytule w wierszu oraz okreÅlenia, czy ma zostaÄ wyeksportowana bieżÄ
ca czy wszystkie wersje strony z opisami edycji lub też tylko bieżÄ
ca wersja z opisem ostatniej edycji.\n\nMożesz również użyÄ linku, np. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] dla strony â[[{{MediaWiki:Mainpage}}]]â.",
@@ -2363,6 +2377,7 @@
"export-download": "Zapisz do pliku",
"export-templates": "DoÅÄ
cz szablony",
"export-pagelinks": "DoÅÄ
cz linkowane strony na gÅÄbokoÅci:",
+ "export-manual": "Dodaj strony rÄcznie:",
"allmessages": "Komunikaty systemowe",
"allmessagesname": "Nazwa",
"allmessagesdefault": "Tekst domyÅlny",
@@ -2593,6 +2608,7 @@
"pageinfo-category-files": "Liczba plików",
"markaspatrolleddiff": "oznacz edycjÄ jako âsprawdzonÄ
â",
"markaspatrolledtext": "Oznacz tÄ stronÄ jako âsprawdzonÄ
â",
+ "markaspatrolledtext-file": "Oznacz tÄ wersjÄ pliku jako âsprawdzonÄ
â",
"markedaspatrolled": "Sprawdzone",
"markedaspatrolledtext": "Wybrana wersja [[:$1]] zostaÅa oznaczona jako âsprawdzonaâ.",
"rcpatroldisabled": "WyÅÄ
czono funkcjÄ patrolowania na stronie ostatnich zmian",
@@ -2644,6 +2660,7 @@
"newimages-legend": "Filtruj",
"newimages-label": "Nazwa pliku (lub jej fragment):",
"newimages-showbots": "Pokaż pliki przesÅane przez boty",
+ "newimages-hidepatrolled": "Ukryj sprawdzone pliki",
"noimages": "Brak plików do pokazania.",
"ilsubmit": "Szukaj",
"bydate": "wedÅug daty",
@@ -3277,7 +3294,7 @@
"tags-delete-not-allowed": "Znaczniki okreÅlone przez rozszerzenie nie mogÄ
zostaÄ usuniÄte, chyba że dane rozszerzenie jawnie na to zezwala.",
"tags-delete-not-found": "Znacznik â$1â nie istnieje.",
"tags-delete-too-many-uses": "Znacznik â$1â jest stosowany w wiÄcej niż {{PLURAL:$2|jednej wersji|$2 wersjach}}, co oznacza, że nie może byÄ usuniÄty.",
- "tags-delete-warnings-after-delete": "Znacznik â$1â zostaÅ pomyÅlnie usuniÄty, ale {{PLURAL:$2|otrzymano nastÄpujÄ
ce ostrzeżenie|otrzymano nastÄpujÄ
ce ostrzeżenia}}:",
+ "tags-delete-warnings-after-delete": "Znacznik â$1â zostaÅ usuniÄty, ale {{PLURAL:$2|otrzymano nastÄpujÄ
ce ostrzeżenie|otrzymano nastÄpujÄ
ce ostrzeżenia}}:",
"tags-activate-title": "Aktywacja znacznika",
"tags-activate-question": "Zamierzasz aktywowaÄ znacznik â$1â.",
"tags-activate-reason": "Powód:",
@@ -3533,7 +3550,7 @@
"expand_templates_generate_xml": "Pokaż drzewo analizatora skÅadni w formacie XML",
"expand_templates_generate_rawhtml": "Pokaż surowy HTML",
"expand_templates_preview": "PodglÄ
d",
- "expand_templates_preview_fail_html": "Ponieważ {{SITENAME}} ma wÅÄ
czony surowy kod HTML i zaistniaÅa strata danych z sesji, podglÄ
d jest ukryty jako zabezpieczenie przed atakiem JavaScript. \n\nJeÅli to jest próba sÅusznego podglÄ
du, proszÄ spróbowaÄ ponownie. \nJeÅli to nadal nie dziaÅa, spróbuj [[Special:UserLogout|wylogowaÄ siÄ]] i zalogowaÄ siÄ z powrotem.",
+ "expand_templates_preview_fail_html": "Ponieważ {{SITENAME}} ma wÅÄ
czony surowy kod HTML i zaistniaÅa strata danych z sesji, podglÄ
d jest ukryty jako zabezpieczenie przed atakiem JavaScript. \n\nJeÅli to jest próba sÅusznego podglÄ
du, proszÄ spróbowaÄ ponownie. \nJeÅli to nie pomoże â spróbuj [[Special:UserLogout|wylogowaÄ siÄ]] i zalogowaÄ ponownie, a także upewnij siÄ, że twoja przeglÄ
darka akceptuje ciasteczka z tej witryny.",
"pagelanguage": "Zmiana jÄzyka strony",
"pagelang-name": "Strona",
"pagelang-language": "JÄzyk",
@@ -3607,5 +3624,5 @@
"mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje",
"mw-widgets-titleinput-description-redirect": "przekierowanie do $1",
"api-error-blacklisted": "Wybierz inny, opisowy tytuÅ.",
- "randomrootpage": "Losowa strona tytuÅowa"
+ "randomrootpage": "Losowa strona (bez podstron)"
}
diff --git a/languages/i18n/pms.json b/languages/i18n/pms.json
index 8a90128d47..305806f391 100644
--- a/languages/i18n/pms.json
+++ b/languages/i18n/pms.json
@@ -1179,7 +1179,7 @@
"recentchanges-label-bot": "Sa modìfica a l'é stà ita fà ita da un trigomiro",
"recentchanges-label-unpatrolled": "Sta modìfica-sì a l'é pa ancó stà ita verificà ",
"recentchanges-label-plusminus": "La taja dla pà gina a l'é cangià d'un nùmer ëd bytes",
- "recentchanges-legend-heading": "'''Legend:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vëdde ëdcò la [[Special:NewPages|lista dle pà gine neuve]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Ambelessì sota a-i é {{PLURAL:$5|la modìfica|le modìfiche}} da $3, $4 (mostrà fin-a a $1 ).",
diff --git a/languages/i18n/pnb.json b/languages/i18n/pnb.json
index 94146bd708..57c0b4290b 100644
--- a/languages/i18n/pnb.json
+++ b/languages/i18n/pnb.json
@@ -966,7 +966,7 @@
"recentchanges-label-bot": "اÛس تبدÛÙÛ ÙÙÚº بÙÙ¹ ÙÛ Ú©Ûتا اÛÛ",
"recentchanges-label-unpatrolled": "اÛس تبدÛÙÛ ØªÛ ÛÙÛ Ú¯Ø´Øª ÙئÛÚº ÛÙئÛÛ",
"recentchanges-label-plusminus": "صÙÛ Ø¯Ø§ Ùاپ اÛÙÛ Ø¨Ø§Ø¦Ù¹Ø§Úº Ùا٠بدÙÛا Ú¯Ûا",
- "recentchanges-legend-heading": "'''Ùات:'''",
+ "recentchanges-legend-heading": "Ùات: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (اÛÛ ÙÛ ÙÛÚ©Ú¾Ù [[Special:NewPages|ÙÙÛÚº صÙÛاں Ø¯Û Ùسٹ]])",
"rcnotefrom": "ÛÙÛ ØªÚ© '''$2''' تÙÚº '''$1''' تبدÛÙÛاں تھÙÛ Ø¯ØªÛاں گئÛاں ÙÛÚºÛ",
"rclistfrom": "$3 $2 تÙÚº ÛÙÙÛ Ø¢ÙÛاں ÙÙÛاں تبدÛÙÛاں Ùکھاؤ",
diff --git a/languages/i18n/ps.json b/languages/i18n/ps.json
index 563d685420..adb63dceaf 100644
--- a/languages/i18n/ps.json
+++ b/languages/i18n/ps.json
@@ -1012,7 +1012,7 @@
"recentchanges-label-bot": "دا سÙ
ÙÙ Ù٠رÙباټ ترسر٠کÚÛ",
"recentchanges-label-unpatrolled": "دغ٠سÙ
Ù٠تر اÙس٠پÙØ±Û ÙÙ Ø¯Û Ú
ار٠شÙÛ",
"recentchanges-label-plusminus": "د باÙÙ¼ÙÙ٠د Ø´Ù
Ûر ÙÙ Ù
Ø®Û Ø¯ Ù
Ø® د بدÙÙÙ Ú©ÚÙ",
- "recentchanges-legend-heading": "'''ÙÙÚÙÙÙÙÙ:'''",
+ "recentchanges-legend-heading": "ÙÙÚÙÙÙÙÙ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د ÙÙÙÙ Ù
Ø®ÙÙÙ ÙÚÙÙÚ©]] ÙÙ
ÙÚ¯Ùرئ)",
"recentchanges-legend-plusminus": "(±123 )",
"recentchanges-submit": "Úکار٠کÙÙ",
diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json
index 1a68edcd9c..51b82aac6e 100644
--- a/languages/i18n/pt-br.json
+++ b/languages/i18n/pt-br.json
@@ -90,7 +90,8 @@
"Eduardo Addad de Oliveira",
"Raphaelras",
"Arthurteb303",
- "Rffontenelle"
+ "Rffontenelle",
+ "HenriqueCrang"
]
},
"tog-underline": "Sublinhar links:",
@@ -232,6 +233,7 @@
"moredotdotdot": "Mais...",
"morenotlisted": "Esta lista não está completa.",
"mypage": "Página",
+ "anonuserpage": "Usuário desconhecido",
"mytalk": "Discussão",
"anontalk": "Discussão",
"navigation": "Navegação",
@@ -533,7 +535,7 @@
"nocookieslogin": "Você tem os cookies desativados no seu navegador, e a {{SITENAME}} utiliza cookies para ligar os usuários às suas contas. Por favor os ative e tente novamente.",
"nocookiesfornew": "A conta de usuário não foi criada porque não foi possÃvel confirmar a sua origem.\nCertifique-se de que tem os cookies ativados, recarregue esta página e tente novamente.",
"noname": "Você não colocou um nome de usuário válido.",
- "loginsuccesstitle": "Login bem sucedido",
+ "loginsuccesstitle": "Autenticado",
"loginsuccess": "'''Agora você está {{GENDER:autenticado|autenticada}} ao wiki {{SITENAME}} como \"$1\"'''.",
"nosuchuser": "Não existe nenhum usuário com o nome \"$1\".\nOs nomes de usuário são sensÃveis a letras maiúsculas.\nVerifique o que foi digitado ou [[Special:UserLogin/signup|crie uma nova conta]].",
"nosuchusershort": "Não existe um usuário com o nome \"$1\". Verifique o nome que introduziu.",
@@ -1329,7 +1331,7 @@
"recentchanges-label-bot": "Esta edição foi feita por um robô",
"recentchanges-label-unpatrolled": "Esta edição ainda não foi patrulhada",
"recentchanges-label-plusminus": "Alteração no tamanho da página, em bytes",
- "recentchanges-legend-heading": "'''Legenda''':",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veja também a [[Special:NewPages|lista de páginas novas]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Exibir",
diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json
index 304fd47ae0..cb9198553c 100644
--- a/languages/i18n/pt.json
+++ b/languages/i18n/pt.json
@@ -502,7 +502,7 @@
"nocookieslogin": "A {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu navegador.\nAtive-os e tente novamente, por favor.",
"nocookiesfornew": "A conta de utilizador não foi criada, porque não foi possÃvel confirmar a sua origem.\nCertifique-se de que tem os ''cookies'' ativados, recarregue esta página e tente novamente.",
"noname": "Não especificou um nome de utilizador válido.",
- "loginsuccesstitle": "InÃcio de sessão bem sucedido",
+ "loginsuccesstitle": "Autenticação bem sucedida",
"loginsuccess": "'''Encontra-se agora ligado à {{SITENAME}} como \"$1\"'''.",
"nosuchuser": "Não existe nenhum utilizador com o nome \"$1\".\nOs nomes de utilizador são sensÃveis à capitalização.\nVerifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].",
"nosuchusershort": "Não existe um utilizador com o nome \"$1\". Verifique o nome que introduziu.",
@@ -538,7 +538,7 @@
"createaccount-title": "Criação de conta na {{SITENAME}}",
"createaccount-text": "Alguém criou uma conta com o nome $2 para o seu endereço de correio eletrónico, na wiki {{SITENAME}} ($4), com a palavra-passe \"$3\".\nDeve agora iniciar sessão e alterar a sua palavra-passe.\n\nSe a conta foi criada por engano, pode ignorar esta mensagem.",
"login-throttled": "Realizou demasiadas tentativas de inÃcio de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
- "login-abort-generic": "O inÃcio de sessão não teve êxito - Cancelado",
+ "login-abort-generic": "O inÃcio de sessão falhou - Cancelado",
"login-migrated-generic": "A sua conta foi migrada e o seu nome de utilizador já não existe nesta wiki.",
"loginlanguagelabel": "Idioma: $1",
"suspicious-userlogout": "O seu pedido para sair foi negado porque parece ter sido enviado por um navegador danificado ou por um proxy com cache.",
@@ -580,9 +580,9 @@
"botpasswords-insert-failed": "Falhou ao adicionar o nome do robô \"$1\". Já foi adicionado?",
"botpasswords-update-failed": "Falha ao atualizar o nome do robô \"$1\". Será que foi eliminado?",
"botpasswords-created-title": "Criada palavra-passe para o robô",
- "botpasswords-created-body": "A palavra-passe para o robô \"$1\" foi criada com sucesso.",
+ "botpasswords-created-body": "A palavra-passe para o robô \"$1\" foi criada.",
"botpasswords-updated-title": "A palavra-passe de robô foi actualizada.",
- "botpasswords-updated-body": "A palavra-passe de robô \"$1\" foi actualizada com sucesso.",
+ "botpasswords-updated-body": "A palavra-passe de robô \"$1\" foi atualizada.",
"botpasswords-deleted-title": "Palavra-passe de robô eliminada",
"botpasswords-deleted-body": "A palavra-passe de robô \"$1\" foi eliminada.",
"botpasswords-newpassword": "A nova palavra-passe para iniciar sessão com $1 é $2 . Por favor, recorde-se dela para futura referência.",
@@ -591,7 +591,7 @@
"resetpass-no-info": "Precisa de iniciar sessão para aceder diretamente a esta página.",
"resetpass-submit-loggedin": "Alterar palavra-passe",
"resetpass-submit-cancel": "Cancelar",
- "resetpass-wrong-oldpass": "Palavra-passe temporária ou atual inválida.\nPode ter já alterado com sucesso a sua palavra-passe ou solicitado uma nova palavra-passe temporária.",
+ "resetpass-wrong-oldpass": "Palavra-passe temporária ou atual inválida.\nPode ter já alterado a sua palavra-passe ou solicitado uma nova palavra-passe temporária.",
"resetpass-recycled": "Redefina a sua palavra-passe para uma diferente da atual, por favor.",
"resetpass-temp-emailed": "Iniciou a sessão com um código temporário.\nPara completar a autenticação, tem de definir uma palavra-passe nova aqui:",
"resetpass-temp-password": "Palavra-passe temporária:",
@@ -875,9 +875,9 @@
"revdelete-unsuppress": "Remover restrições das revisões restauradas",
"revdelete-log": "Motivo:",
"revdelete-submit": "Aplicar {{PLURAL:$1|à revisão selecionada|às revisões selecionadas}}",
- "revdelete-success": "'''A visibilidade da revisão foi atualizada.'''",
+ "revdelete-success": "Visibilidade da revisão atualizada.",
"revdelete-failure": "'''A visibilidade da revisão não foi atualizada:'''\n$1",
- "logdelete-success": "'''A visibilidade da entrada do registo foi definida.'''",
+ "logdelete-success": "Visibilidade da entrada do registo definida.",
"logdelete-failure": "'''Não foi possÃvel definir a visibilidade da entrada do registo:'''\n$1",
"revdel-restore": "Alterar visibilidade",
"pagehist": "Histórico da página",
@@ -1118,7 +1118,7 @@
"userrights-changeable-col": "Grupos que pode alterar",
"userrights-unchangeable-col": "Grupos que não pode alterar",
"userrights-conflict": "Conflito entre alterações de privilégios de utilizador! Por favor, reveja e confirme as suas mudanças.",
- "userrights-removed-self": "Removeu com sucesso os seus privilégios. Como resultado disso, já não consegue aceder a esta página.",
+ "userrights-removed-self": "Removeu os seus privilégios. Como resultado disto, já não consegue aceder a esta página.",
"group": "Grupo:",
"group-user": "Utilizadores",
"group-autoconfirmed": "Utilizadores autoconfirmados",
@@ -1523,7 +1523,7 @@
"uploadstash-summary": "Esta página dá acesso aos ficheiros enviados (ou que estão no processo de envio) mas que ainda não foram publicados na wiki. Estes ficheiros não são visÃveis para ninguém, exceto para o utilizador que os enviou.",
"uploadstash-clear": "Apagar os ficheiros escondidos",
"uploadstash-nofiles": "Não tem ficheiros escondidos.",
- "uploadstash-badtoken": "Não foi possÃvel executar essa operação, talvez porque as suas credenciais de edição expiraram. Tente novamente.",
+ "uploadstash-badtoken": "Não foi possÃvel executar a operação. Talvez as suas credenciais de edição tenham expirado. Tente novamente.",
"uploadstash-errclear": "Não foi possÃvel apagar os ficheiros.",
"uploadstash-refresh": "Atualizar a lista de ficheiros",
"invalid-chunk-offset": "Deslocamento de fragmento inválido",
@@ -3237,7 +3237,7 @@
"tags-delete-not-allowed": "Etiquetas definidas por uma extensão não podem ser eliminadas, a menos que a extensão, especificamente, o permita.",
"tags-delete-not-found": "A etiqueta \"$1\" não existe.",
"tags-delete-too-many-uses": "A etiqueta \"$1\" está aplicada em mais que $2 {{PLURAL:$2|edição|edições}}, o que significa que não pode ser eliminada.",
- "tags-delete-warnings-after-delete": "A etiqueta \"$1\" foi eliminada com sucesso, mas {{PLURAL:$2|o seguinte aviso foi encontrado|os seguintes avisos foram encontrados}}:",
+ "tags-delete-warnings-after-delete": "A etiqueta \"$1\" foi eliminada, mas {{PLURAL:$2|o seguinte aviso foi encontrado|os seguintes avisos foram encontrados}}:",
"tags-activate-title": "Ativar etiqueta",
"tags-activate-question": "Está prestes a ativar a etiqueta \"$1\".",
"tags-activate-reason": "Motivo:",
@@ -3274,7 +3274,7 @@
"tags-edit-reason": "Motivo:",
"tags-edit-revision-submit": "Aplicar alterações a {{PLURAL:$1|esta revisões|$1 revisões}}",
"tags-edit-logentry-submit": "Aplicar alterações a {{PLURAL:$1|esta entrada de registo|$1 entradas de registo}}",
- "tags-edit-success": "As alterações foram aplicadas com sucesso.",
+ "tags-edit-success": "As alterações foram aplicadas.",
"tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
"tags-edit-nooldid-title": "Revisão de página inválida",
"tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta ação, ou a revisão especificada não existe.",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index c9a0c231a4..ae2eca4d75 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -319,6 +319,7 @@
"moredotdotdot": "Used as \"More...\" link for {{msg-mw|pageinfo-transclusions}} field, in the \"templates used on this page\" list.\n\nSimilar to {{msg-mw|morenotlisted}}.\n{{Identical|More...}}",
"morenotlisted": "An indication that more of a templates list is not shown.\n\nUsed as \"More...\" link for {{msg-mw|pageinfo-templates}} field.\n\nSimilar to {{msg-mw|moredotdotdot}}.",
"mypage": "A text for the link to the user's user page in the links at the top of the page.\n{{Identical|Page}}",
+ "anonuserpage": "Same as {{msg-mw|mypage}} but used for non-logged-in users.\nA text for the link to the IP user page in the links at the top of the page.\n\nSee also:\n* {{msg-mw|Accesskey-pt-anonuserpage}}\n* {{msg-mw|Tooltip-pt-anonuserpage}}",
"mytalk": "In the personal URLs page section - right upper corner.\n\nUsed as link title in your personal toolbox.\n\nSee also:\n* {{msg-mw|Mytalk}}\n* {{msg-mw|Accesskey-pt-mytalk}}\n* {{msg-mw|Tooltip-pt-mytalk}}\n{{Identical|Talk}}",
"anontalk": "Same as {{msg-mw|mytalk}} but used for non-logged-in users.\n{{Identical|Talk}}\n\nSee also:\n* {{msg-mw|Accesskey-pt-anontalk}}\n* {{msg-mw|Tooltip-pt-anontalk}}",
"navigation": "This is shown as a section header in the sidebar of most skins.\n\n{{Identical|Navigation}}",
@@ -644,7 +645,7 @@
"nocookiesfornew": "This message is displayed when the user tried to create a new account, but it failed the cross-site request forgery (CSRF) check. It could be blocking an attack, but most likely, the browser isn't accepting cookies.",
"nocookiesforlogin": "{{optional}}\nThis message is displayed when someone tried to login and the CSRF failed (most likely, the browser doesn't accept cookies).\n\nDefault:\n* {{msg-mw|Nocookieslogin}}",
"noname": "Error message.",
- "loginsuccesstitle": "The title of the page saying that you are logged in. The content of the page is the message {{msg-mw|Loginsuccess}}.\n{{Identical|Login successful}}",
+ "loginsuccesstitle": "The title of the page saying that you are logged in. The content of the page is the message {{msg-mw|Loginsuccess}}.\n{{Identical|Log in}}",
"loginsuccess": "The content of the page saying that you are logged in. The title of the page is {{msg-mw|Loginsuccesstitle}}.\n\nParameters:\n* $1 - the name of the logged in user\n{{Gender}}",
"nosuchuser": "Displayed when trying to log in with an unexisting username.\n\nWhen you are not allowed to create an account, the following message is displayed:\n* {{msg-mw|Nosuchusershort}}\nParameters:\n* $1 - username",
"nosuchusershort": "Displayed when trying to log in with a non-existent username.\n\nThis message is only shown when you can't create an account, otherwise the following message is displayed:\n* {{msg-mw|Nosuchusershort}}\n\nParameters:\n* $1 - username",
@@ -731,11 +732,11 @@
"botpasswords-insert-failed": "Error message when saving a new bot password failed. It's likely that the failure was because the user resubmitted the form after a previous successful save. Parameters:\n* $1 - Bot name",
"botpasswords-update-failed": "Error message when saving changes to an existing bot password failed. It's likely that the failure was because the user deleted the bot password in another browser window. Parameters:\n* $1 - Bot name",
"botpasswords-created-title": "Title of the success page when a new bot password is created.",
- "botpasswords-created-body": "Success message when a new bot password is created. Parameters:\n* $1 - Bot name",
+ "botpasswords-created-body": "Success message when a new bot password is created. Parameters:\n* $1 - Bot name\n* $2 - User name",
"botpasswords-updated-title": "Title of the success page when a bot password is updated.",
- "botpasswords-updated-body": "Success message when a bot password is updated. Parameters:\n* $1 - Bot name",
+ "botpasswords-updated-body": "Success message when a bot password is updated. Parameters:\n* $1 - Bot name\n* $2 - User name",
"botpasswords-deleted-title": "Title of the success page when a bot password is deleted.",
- "botpasswords-deleted-body": "Success message when a bot password is deleted. Parameters:\n* $1 - Bot name",
+ "botpasswords-deleted-body": "Success message when a bot password is deleted. Parameters:\n* $1 - Bot name\n* $2 - User name",
"botpasswords-newpassword": "Success message to display the new password when a bot password is created or updated. Parameters:\n* $1 - User name to be used for login.\n* $2 - Password to be used for login.",
"botpasswords-no-provider": "Error message when login is attempted but the BotPasswordsSessionProvider is not included in $wgSessionProviders
.",
"botpasswords-restriction-failed": "Error message when login is rejected because the configured restrictions were not satisfied.",
@@ -2303,6 +2304,7 @@
"changecontentmodel-title-label": "Label for the input field where the target page title should be entered\n{{Identical|Page title}}",
"changecontentmodel-model-label": "Label of the dropdown listing available content model types the user can change a page to",
"changecontentmodel-reason-label": "{{Identical|Reason}}",
+ "changecontentmodel-submit": "Label of the form \"submit\" button for [[Special:ChangeContentModel]]\n{{Identical|Change}}",
"changecontentmodel-success-title": "Title of the success page of the change content model special page",
"changecontentmodel-success-text": "Message telling user that their change has been successfully done.\n* $1 - Target page title",
"changecontentmodel-cannot-convert": "Error message shown if the content model cannot be changed to the specified type. $1 is the page title, $2 is the localized content model name.",
@@ -3146,7 +3148,7 @@
"exif-make": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe Manufacturer of the digital camera (or scanner) that took the photo.",
"exif-model": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe model of camera (or scanner) used to take the picture.",
"exif-software": "Short for \"The software which was used to create or modify this image\".\n\nThe property can come from the Exif Software tag, PNG software chunk, iptc-iim 2:65 Software field, or XMP's xmp:CreatorTool field.\n\nExif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].",
- "exif-artist": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThis message labels the author or artist of the work. Usually this means who took the photograph, or who drew the picture. The corresponding value field most commonly contains a single author, however it can contain an ordered (or unordered depending on which metadata standard is used to store the information) list of authors. Sometimes the persons position is prefixed before their name such as \"Photographer, John Smith\". The exif standard recommends multiple authors be specified by \"position, Author 1; position for author 2, Author 2's name\" however this doesn't seem to happen in practise very often. If multiple authors are specified using a non-exif standard, then a billeted (or numbered) list is used.\n\nThis property can be specified by exif Artist tag, XMP's tiff:Artist, XMP's dc:creator, iptc-iim's 2:80 byline, PNG's author textual chunk, PNG's (unofficial) artist textual chunk. XMP's photoshop:AuthorsPosition and iptc 2:85 byline-title can also affect display of this property.\n{{Identical|Author}}",
+ "exif-artist": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThis message labels the author or artist of the work. Usually this means who took the photograph, or who drew the picture. The corresponding value field most commonly contains a single author, however it can contain an ordered (or unordered depending on which metadata standard is used to store the information) list of authors. Sometimes the persons position is prefixed before their name such as \"Photographer, John Smith\". The exif standard recommends multiple authors be specified by \"position, Author 1; position for author 2, Author 2's name\" however this doesn't seem to happen in practice very often. If multiple authors are specified using a non-exif standard, then a billeted (or numbered) list is used.\n\nThis property can be specified by exif Artist tag, XMP's tiff:Artist, XMP's dc:creator, iptc-iim's 2:80 byline, PNG's author textual chunk, PNG's (unofficial) artist textual chunk. XMP's photoshop:AuthorsPosition and iptc 2:85 byline-title can also affect display of this property.\n{{Identical|Author}}",
"exif-copyright": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nLabel for information contained in exif Copyright tag, XMP dc:rights, IPTC-iim 2:116, or PNG copyright textual chunk.\n\nTypically the copyright statement for the photograph/drawing/video (such as ''(c) 2010 John Smith. Released under GFDL''). Sometimes contains license information. See also {{msg-mw|exif-copyrightowner}}",
"exif-exifversion": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nVersion of exif standard photo uses. Typically this is 2.22",
"exif-flashpixversion": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nVersion of flashpix used. Flashpix is a format used for storing some types of metadata in image. It is not as commonly used as EXIF, and mediawiki currently cannot read Flashpix data.",
@@ -3155,7 +3157,7 @@
"exif-compressedbitsperpixel": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].",
"exif-pixelydimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image width}}",
"exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image height}}",
- "exif-usercomment": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nComments by user. Sometimes used like ImageDescription when the ImageDescription contained non-ascii characters. (Technically ImageDescription is supposed to contain ascii characters. In practise utf-8 is used in ImageDescription, so this field isn't used too much.)",
+ "exif-usercomment": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nComments by user. Sometimes used like ImageDescription when the ImageDescription contained non-ascii characters. (Technically ImageDescription is supposed to contain ascii characters. In practice utf-8 is used in ImageDescription, so this field isn't used too much.)",
"exif-relatedsoundfile": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nSome cameras offer the option to record an audio \"memo\" for the photo they just took. If the user did that, the name of the file is labelled with this message.",
"exif-datetimeoriginal": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe date and time when the original image data was generated. For example if it was a painting from 1773, scanned in to a computer in 2007, the datetimeoriginal would be 1773 and {{msg-mw|exif-datetimedigitized}} would have the 2007 date.",
"exif-datetimedigitized": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe date and time when the image was stored as digital data.",
diff --git a/languages/i18n/qu.json b/languages/i18n/qu.json
index 884f82ebdd..134328ab1f 100644
--- a/languages/i18n/qu.json
+++ b/languages/i18n/qu.json
@@ -1098,7 +1098,7 @@
"recentchanges-label-bot": "Kayqa rurana antachap llamk'apusqanmi",
"recentchanges-label-unpatrolled": "Kay llamk'apusqaqa manaraqmi patrullasqachu",
"recentchanges-label-plusminus": "P'anqap chhikan, kay byte yupaywan wakinchasqa",
- "recentchanges-legend-heading": "'''Sut'ichana:'''",
+ "recentchanges-legend-heading": "Sut'ichana: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|musuq p'anqakunatapas]] qhaway)",
"rcnotefrom": "Kay qatiqpiqa $2 -mantapacha ($1 -kama) hukchasqakunatam rikunki.",
"rclistfrom": "$3 $2-manta musuq hukchasqakunata rikuchiy",
diff --git a/languages/i18n/rm.json b/languages/i18n/rm.json
index cfb22eca37..be52e1538c 100644
--- a/languages/i18n/rm.json
+++ b/languages/i18n/rm.json
@@ -1006,7 +1006,7 @@
"recentchanges-label-minor": "Quai è ina pitschna modificaziun",
"recentchanges-label-bot": "Questa modificaziun è vegnida exequida dad in bot",
"recentchanges-label-unpatrolled": "Questa midada n'è anc betg vegnida controllada",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vesair era la [[Special:NewPages|glista da novas paginas]])",
"rcnotefrom": "I vegnan mussadas las midadas a partir da las $4 dals $3 (maximalmain $1 ).",
"rclistfrom": "Mussar las novas midadas a partir da las $2 dals $3",
diff --git a/languages/i18n/ro.json b/languages/i18n/ro.json
index 1e281fe557..c1137ba393 100644
--- a/languages/i18n/ro.json
+++ b/languages/i18n/ro.json
@@ -1225,7 +1225,7 @@
"recentchanges-label-bot": "AceastÄ modificare a fost efectuatÄ de un robot",
"recentchanges-label-unpatrolled": "AceastÄ modificare nu a fost încÄ verificatÄ",
"recentchanges-label-plusminus": "Dimensiunea paginii s-a modificat corespunzÄtor acestui numÄr de octeÈi",
- "recentchanges-legend-heading": "'''LegendÄ:'''",
+ "recentchanges-legend-heading": "LegendÄ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedeÈi Èi [[Special:NewPages|lista cu pagini noi]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "AfiÈeazÄ",
diff --git a/languages/i18n/roa-tara.json b/languages/i18n/roa-tara.json
index 7d4dc42501..5e2559e19a 100644
--- a/languages/i18n/roa-tara.json
+++ b/languages/i18n/roa-tara.json
@@ -1180,7 +1180,7 @@
"recentchanges-label-bot": "Stu cangiamende ha state fatte da 'nu bot",
"recentchanges-label-unpatrolled": "Stu cangiamende non g'Ã state angore condrollate",
"recentchanges-label-plusminus": "'A dimenzione d'a pà gene ave cangiate da stu numere de byte",
- "recentchanges-legend-heading": "'''Leggende:'''",
+ "recentchanges-legend-heading": "Leggende: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ('ndruche pure [[Special:NewPages|elenghe de le pà ggene nuève]])",
"rcnotefrom": "Sotte {{PLURAL:$5|ste 'u cangiamende|stonne le cangiaminde}} da $3, $4 ('nzigne a $1 fatte vedè).",
"rclistfrom": "Fà vedè le urteme cangiaminde partenne da $3 $2",
diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json
index 6e3b9469a0..75d7c4972f 100644
--- a/languages/i18n/ru.json
+++ b/languages/i18n/ru.json
@@ -528,7 +528,7 @@
"nocookieslogin": "{{SITENAME}} иÑполÑзÑÐµÑ Â«cookies» Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑаÑÑников. ÐÑ Ð¸Ñ
оÑклÑÑили. ÐожалÑйÑÑа, вклÑÑиÑе иÑ
и попÑобÑйÑе Ñнова.",
"nocookiesfornew": "УÑÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÑÑаÑÑника не бÑла Ñоздана из-за невозможноÑÑи пÑовеÑиÑÑ ÐµÑ Ð¸ÑÑоÑник. \nУбедиÑеÑÑ, ÑÑо вклÑÑÐµÐ½Ñ Â«cookies», обновиÑе ÑÑÑаниÑÑ Ð¸ попÑобÑйÑе еÑÑ Ñаз.",
"noname": "ÐÑ Ð½Ðµ Ñказали допÑÑÑимого имени ÑÑаÑÑника.",
- "loginsuccesstitle": "Ðпознание пÑоÑло ÑÑпеÑно",
+ "loginsuccesstitle": "ÐÑ
од пÑоизведÑн",
"loginsuccess": "ТепеÑÑ Ð²Ñ ÑабоÑаеÑе под именем $1.",
"nosuchuser": "УÑаÑÑника Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ «$1» не ÑÑÑеÑÑвÑеÑ.\nÐмена ÑÑаÑÑников ÑÑвÑÑвиÑелÑÐ½Ñ Ðº ÑегиÑÑÑÑ Ð±Ñкв.\nÐÑовеÑÑÑе пÑавилÑноÑÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ или [[Special:UserLogin/signup|ÑоздайÑе новÑÑ ÑÑÑÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ]].",
"nosuchusershort": "Ðе ÑÑÑеÑÑвÑÐµÑ ÑÑаÑÑника Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ «$1». ÐÑовеÑÑÑе напиÑание имени.",
@@ -564,7 +564,7 @@
"createaccount-title": "{{SITENAME}}: Ñоздание ÑÑÑÑной запиÑи",
"createaccount-text": "ÐÑо-Ñо Ñоздал ÑÑÑÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Â«$2» на ÑеÑвеÑе пÑоекÑа {{SITENAME}} ($4), Ñказав Ð²Ð°Ñ Ð°Ð´ÑÐµÑ ÑлекÑÑонной поÑÑÑ. \n\nÐаÑÐ¾Ð»Ñ ÑÑÑÑной запиÑи â «$3». Ðам ÑледÑÐµÑ Ð°Ð²ÑоÑизоваÑÑÑÑ Ð½Ð° ÑайÑе и измениÑÑ Ð¿Ð°ÑолÑ.\n\nÐÑоигноÑиÑÑйÑе данное ÑообÑение, еÑли ÑÑÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð±Ñла Ñоздана по оÑибке.",
"login-throttled": "ÐÑ Ñделали ÑлиÑком много попÑÑок пÑедÑÑавиÑÑÑÑ ÑиÑÑеме.\nÐожалÑйÑÑа, подождиÑе $1 пеÑед Ñем, как попÑобоваÑÑ Ñнова.",
- "login-abort-generic": "ÐеÑдаÑÐ½Ð°Ñ Ð¿Ð¾Ð¿ÑÑка пÑедÑÑавиÑÑÑÑ ÑиÑÑеме",
+ "login-abort-generic": "Ðе ÑдалоÑÑ Ð¿ÑедÑÑавиÑÑÑÑ ÑиÑÑеме â оÑменено",
"login-migrated-generic": "ÐаÑа ÑÑÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð±Ñла пеÑенеÑена, и ваÑе Ð¸Ð¼Ñ ÑÑаÑÑника болÑÑе не ÑÑÑеÑÑвÑÐµÑ Ð² ÑÑой вики.",
"loginlanguagelabel": "ЯзÑк: $1",
"suspicious-userlogout": "ÐÐ°Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° завеÑÑение ÑеанÑа оÑклонÑн, Ñак как он поÑ
ож на запÑоÑ, оÑпÑавленнÑй некоÑÑекÑнÑм бÑаÑзеÑом или кÑÑиÑÑÑÑим пÑокÑи.",
@@ -584,7 +584,7 @@
"newpassword": "ÐовÑй паÑолÑ:",
"retypenew": "ÐовÑоÑиÑе ввод нового паÑолÑ:",
"resetpass_submit": "УÑÑановиÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð¸ пÑедÑÑавиÑÑÑÑ",
- "changepassword-success": "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±Ñл ÑÑпеÑно изменÑн!",
+ "changepassword-success": "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±Ñл изменÑн!",
"changepassword-throttled": "ÐÑ Ñделали ÑлиÑком много попÑÑок пÑедÑÑавиÑÑÑÑ ÑиÑÑеме.\nÐожалÑйÑÑа, подождиÑе $1 пеÑед Ñем, как попÑобоваÑÑ Ñнова.",
"botpasswords": "ÐаÑоли боÑов",
"botpasswords-summary": "ÐаÑоли боÑа позволÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑÑÑÑной запиÑи полÑзоваÑÐµÐ»Ñ ÑеÑез API без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¾Ð³Ð¸Ð½Ð° и паÑÐ¾Ð»Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ ÑÑÑÑной запиÑи. ÐÑава ÑÑаÑÑника пÑи вÑ
оде Ñ Ð¿Ð°Ñолем боÑа могÑÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑенÑ.\n\nÐÑли ÐÑ Ð½Ðµ знаеÑе, заÑем вам ÑÑо, веÑоÑÑно, лÑÑÑе ÑÑого не делайÑе. ÐикÑо никогда не должен пÑоÑиÑÑ Ð²Ð°Ñ, ÑÑÐ¾Ð±Ñ Ð²Ñ Ñоздали и ÑообÑили его.",
@@ -607,9 +607,9 @@
"botpasswords-insert-failed": "Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð±Ð¾Ñа Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ «$1». Ðозможно, он бÑл Ñже добавлен?",
"botpasswords-update-failed": "Ðе ÑдалоÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ Ð±Ð¾Ñа Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ «$1». Ðозможно, он бÑл ÑдалÑн?",
"botpasswords-created-title": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа Ñоздан",
- "botpasswords-created-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑл ÑÑпеÑно Ñоздан.",
+ "botpasswords-created-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑл Ñоздан.",
"botpasswords-updated-title": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа обновлÑн",
- "botpasswords-updated-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑл ÑÑпеÑно обновлÑн.",
+ "botpasswords-updated-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑл обновлÑн.",
"botpasswords-deleted-title": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа ÑдалÑн",
"botpasswords-deleted-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑл ÑдалÑн.",
"botpasswords-newpassword": "ÐовÑй паÑÐ¾Ð»Ñ Ð´Ð»Ñ Ð²Ñ
ода под $1 â $2 . ÐапиÑиÑе его Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑего иÑполÑзованиÑ. ",
@@ -621,7 +621,7 @@
"resetpass-no-info": "ЧÑÐ¾Ð±Ñ Ð¾Ð±ÑаÑаÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно к ÑÑой ÑÑÑаниÑе, вам ÑледÑÐµÑ Ð¿ÑедÑÑавиÑÑÑÑ ÑиÑÑеме.",
"resetpass-submit-loggedin": "ÐзмениÑÑ Ð¿Ð°ÑолÑ",
"resetpass-submit-cancel": "ÐÑмена",
- "resetpass-wrong-oldpass": "ÐепÑавилÑнÑй вÑеменнÑй или ÑекÑÑий паÑолÑ.\nÐозможно, Ð²Ñ Ñже ÑÑпеÑно изменили паÑолÑ, или запÑоÑили новÑй вÑеменнÑй паÑолÑ.",
+ "resetpass-wrong-oldpass": "ÐепÑавилÑнÑй вÑеменнÑй или ÑекÑÑий паÑолÑ.\nÐозможно, Ð²Ñ Ñже изменили паÑÐ¾Ð»Ñ Ð¸Ð»Ð¸ запÑоÑили новÑй вÑеменнÑй паÑолÑ.",
"resetpass-recycled": "ÐожалÑйÑÑа, измениÑе паÑÐ¾Ð»Ñ Ð½Ð° ÑÑо-Ñо, оÑлиÑное Ð¾Ñ Ð²Ð°Ñего ÑекÑÑего паÑолÑ.",
"resetpass-temp-emailed": "ÐÑ Ð¿ÑедÑÑавилиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ñеменного паÑолÑ, полÑÑенного по ÑлекÑÑонной поÑÑе.\nÐÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð²Ñ
ода в ÑиÑÑемÑ, необÑ
одимо задаÑÑ Ð½Ð¾Ð²Ñй паÑолÑ:",
"resetpass-temp-password": "ÐÑеменнÑй паÑолÑ:",
@@ -903,7 +903,7 @@
"revdelete-unsuppress": "СнÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ñ Ð²Ð¾ÑÑÑановленнÑÑ
веÑÑий",
"revdelete-log": "ÐÑиÑина:",
"revdelete-submit": "ÐÑимениÑÑ Ðº {{PLURAL:$1|1=вÑбÑанной веÑÑии|вÑбÑаннÑм веÑÑиÑм}}",
- "revdelete-success": "'''ÐидимоÑÑÑ Ð²ÐµÑÑии ÑÑпеÑно изменена.'''",
+ "revdelete-success": "ÐидимоÑÑÑ Ð²ÐµÑÑии обновлена.",
"revdelete-failure": "'''ÐидимоÑÑÑ Ð²ÐµÑÑии не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð°:'''\n$1",
"logdelete-success": "ÐидимоÑÑÑ ÑобÑÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð°.",
"logdelete-failure": "'''ÐидимоÑÑÑ Ð¶ÑÑнала не ÑÑÑановлена:'''\n$1",
@@ -1148,7 +1148,7 @@
"userrights-changeable-col": "ÐÑÑппÑ, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе изменÑÑÑ",
"userrights-unchangeable-col": "ÐÑÑппÑ, коÑоÑÑе Ð²Ñ Ð½Ðµ можеÑе изменÑÑÑ",
"userrights-conflict": "ÐонÑÐ»Ð¸ÐºÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñав ÑÑаÑÑника! ÐожалÑйÑÑа, пÑовеÑÑÑе и пÑимениÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ð½Ð¾Ð²Ð¾.",
- "userrights-removed-self": "ÐÑ ÑÑпеÑно Ñдалили ÑобÑÑвеннÑе пÑава. Таким обÑазом, Ð²Ñ Ð±Ð¾Ð»ÑÑе не ÑможеÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑÑой ÑÑÑаниÑе.",
+ "userrights-removed-self": "ÐÑ Ñдалили ÑобÑÑвеннÑе пÑава. Таким обÑазом, Ð²Ñ Ð±Ð¾Ð»ÑÑе не ÑможеÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑÑой ÑÑÑаниÑе.",
"group": "ÐÑÑппа:",
"group-user": "УÑаÑÑники",
"group-autoconfirmed": "ÐвÑоподÑвеÑждÑннÑе ÑÑаÑÑники",
@@ -1567,7 +1567,7 @@
"uploadstash-summary": "ÐÐ°Ð½Ð½Ð°Ñ ÑÑÑаниÑа пÑедоÑÑавлÑÐµÑ Ð´Ð¾ÑÑÑп к Ñайлам, коÑоÑÑе бÑли загÑÑÐ¶ÐµÐ½Ñ (или наÑ
одÑÑÑÑ Ð² пÑоÑеÑÑе загÑÑзки), но еÑÑ Ð½Ðµ бÑли опÑÐ±Ð»Ð¸ÐºÐ¾Ð²Ð°Ð½Ñ Ð² вики. ÐÑи ÑÐ°Ð¹Ð»Ñ Ð½Ð¸ÐºÐ¾Ð¼Ñ Ð½Ðµ виднÑ, кÑоме загÑÑзивÑего иÑ
ÑÑаÑÑника.",
"uploadstash-clear": "ÐÑиÑÑиÑÑ ÑкÑÑÑÑе ÑайлÑ",
"uploadstash-nofiles": "У Ð²Ð°Ñ Ð½ÐµÑ ÑкÑÑÑÑÑ
Ñайлов.",
- "uploadstash-badtoken": "Ðе ÑдалоÑÑ Ð²ÑполниÑÑ ÑказаннÑе дейÑÑвиÑ. Ðозможно, иÑÑÑк ÑÑок дейÑÑÐ²Ð¸Ñ Ð²Ð°Ñего жеÑона безопаÑноÑÑи. ÐопÑобÑйÑе еÑÑ Ñаз.",
+ "uploadstash-badtoken": "Ðе ÑдалоÑÑ Ð²ÑполниÑÑ ÑказаннÑе дейÑÑвиÑ. Ðозможно, иÑÑÑк ÑÑок дейÑÑÐ²Ð¸Ñ Ð²Ð°ÑиÑ
ÑÑÑÑнÑÑ
даннÑÑ
. ÐожалÑйÑÑа, пÑобÑйÑе еÑÑ Ñаз.",
"uploadstash-errclear": "ÐÑиÑÑка Ñайлов не ÑдалаÑÑ.",
"uploadstash-refresh": "ÐбновиÑÑ ÑпиÑок Ñайлов",
"invalid-chunk-offset": "ÐедопÑÑÑимое ÑмеÑение ÑÑагменÑа",
@@ -2086,6 +2086,7 @@
"changecontentmodel-nodirectediting": "ÐÐ¾Ð´ÐµÐ»Ñ ÑодеÑжимого $1 не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÑÑмое ÑедакÑиÑование",
"log-name-contentmodel": "ÐÑÑнал Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ ÑодеÑжимого",
"log-description-contentmodel": "СобÑÑиÑ, ÑвÑзаннÑе Ñ Ð¼Ð¾Ð´ÐµÐ»Ñми ÑодеÑжимого ÑÑÑаниÑ",
+ "logentry-contentmodel-new": "$1 Ñоздал{{GENDER:$2||а}} ÑÑÑаниÑÑ $3 Ñ Ð¸ÑполÑзованием неÑÑандаÑÑной модели ÑодеÑжимого «$5»",
"logentry-contentmodel-change": "$1 изменил{{GENDER:$2||а}} Ð¼Ð¾Ð´ÐµÐ»Ñ ÑодеÑжимого ÑÑÑаниÑÑ $3 Ñ Â«$4» на «$5»",
"logentry-contentmodel-change-revertlink": "оÑкаÑ",
"logentry-contentmodel-change-revert": "ÐÑкаÑ",
@@ -3385,7 +3386,7 @@
"tags-delete-not-allowed": "ÐеÑки, опÑеделÑннÑе ÑаÑÑиÑением, не могÑÑ Ð±ÑÑÑ ÑдаленÑ, еÑли ÑолÑко ÑаÑÑиÑÐµÐ½Ð¸Ñ Ñвно не даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑÑого делаÑÑ.",
"tags-delete-not-found": "ÐеÑка «$1» не ÑÑÑеÑÑвÑеÑ.",
"tags-delete-too-many-uses": "ÐеÑка «$1» пÑименÑеÑÑÑ Ð² более Ñем $2 {{PLURAL:$2|веÑÑии|веÑÑиÑм}}, ÑÑо ознаÑаеÑ, ÑÑо она не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдалена.",
- "tags-delete-warnings-after-delete": "ÐеÑка «$1» бÑла Ñдалена ÑÑпеÑно, но {{PLURAL:$2|бÑло обнаÑÑжено ÑледÑÑÑее пÑедÑпÑеждение|бÑли обнаÑÑÐ¶ÐµÐ½Ñ ÑледÑÑÑие пÑедÑпÑеждениÑ}}:",
+ "tags-delete-warnings-after-delete": "ÐеÑка «$1» бÑла Ñдалена, но {{PLURAL:$2|бÑло обнаÑÑжено ÑледÑÑÑее пÑедÑпÑеждение|бÑли обнаÑÑÐ¶ÐµÐ½Ñ ÑледÑÑÑие пÑедÑпÑеждениÑ}}:",
"tags-activate-title": "ÐкÑивиÑоваÑÑ Ð¼ÐµÑкÑ",
"tags-activate-question": "ÐÑ ÑобиÑаеÑеÑÑ Ð°ÐºÑивиÑоваÑÑ Ð¼ÐµÑÐºÑ Â«$1».",
"tags-activate-reason": "ÐÑиÑина:",
@@ -3424,7 +3425,7 @@
"tags-edit-reason": "ÐÑиÑина:",
"tags-edit-revision-submit": "ÐÑимениÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ðº {{PLURAL:$1|ÑÑой веÑÑии|$1 веÑÑиÑм}}",
"tags-edit-logentry-submit": "ÐÑимениÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ðº {{PLURAL:$1|ÑÑой запиÑи жÑÑнала|$1 запиÑÑм жÑÑнала}}",
- "tags-edit-success": "ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñли ÑÑпеÑно пÑимененÑ.",
+ "tags-edit-success": "ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñли пÑимененÑ.",
"tags-edit-failure": "ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ ÑдалоÑÑ Ð¿ÑимениÑÑ.\n$1",
"tags-edit-nooldid-title": "Ðе задана ÑÐµÐ»ÐµÐ²Ð°Ñ Ð²ÐµÑÑиÑ",
"tags-edit-nooldid-text": "ÐÑ Ð½Ðµ задали ÑелевÑÑ Ð²ÐµÑÑÐ¸Ñ (веÑÑии) Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑой ÑÑнкÑии, или ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ.",
diff --git a/languages/i18n/rue.json b/languages/i18n/rue.json
index 60a2a2317f..1c1c7cee1d 100644
--- a/languages/i18n/rue.json
+++ b/languages/i18n/rue.json
@@ -1077,7 +1077,7 @@
"recentchanges-label-minor": "ТоÑо Ñ Ð¼Ð°Ð»Ð° змÑна",
"recentchanges-label-bot": "ТоÑо едÑÑÐ¾Ð²Ð°Ð½Ñ Ð·Ñоблене боÑом",
"recentchanges-label-unpatrolled": "ТоÑа змÑна доÑепеÑÑ Ð½Ðµ бÑла паÑÑолÑвана.",
- "recentchanges-legend-heading": "'''ÐеÒенда:'''",
+ "recentchanges-legend-heading": "ÐеÒенда: ",
"recentchanges-legend-newpage": "$1 â нова ÑÑоÑÑнка",
"rcnotefrom": "Ðолов ÑÑÑÑ Ð²ÐºÐ°Ð·Ð°Ð½Ñ Ð·Ð¼ÑÐ½Ñ Ð¾Ð´ $2 (до $1 ).",
"rclistfrom": "ÐказаÑи едÑÑÐ¾Ð²Ð°Ð½Ñ Ð¿Ð¾ÑÑнаÑÑÑ Ð· $3 $2.",
diff --git a/languages/i18n/sa.json b/languages/i18n/sa.json
index adbfaf7451..e62d9313b6 100644
--- a/languages/i18n/sa.json
+++ b/languages/i18n/sa.json
@@ -1179,7 +1179,7 @@
"recentchanges-label-bot": "बà¥à¤à¥-दà¥à¤µà¤¾à¤°à¤¾ à¤à¥à¤¤à¤ समà¥à¤ªà¤¾à¤¦à¤¨à¤®à¥à¤¤à¤¤à¥",
"recentchanges-label-unpatrolled": "à¤à¤¤à¤¾à¤µà¤¤à¤¾ à¤
सà¥à¤¯ समà¥à¤ªà¤¾à¤¦à¤¨à¤¸à¥à¤¯ परिशà¥à¤²à¤¿à¤¨à¤ नाà¤à¥à¤¤à¥ ।",
"recentchanges-label-plusminus": "पà¥à¤·à¥à¤ सà¥à¤¯ à¤à¤à¤¾à¤°à¤ à¤à¤¤à¤¾à¤µà¤¦à¥à¤à¤¿à¤ बà¥à¤à¥à¤¸à¥-सà¤à¤à¥à¤¯à¤¾à¤à¤¿à¤ परिवरà¥à¤¤à¤¿à¤¤à¤",
- "recentchanges-legend-heading": "'''विà¤à¤²à¥à¤ªà¤µà¤¿à¤·à¤¯à¤à¤®à¥'''",
+ "recentchanges-legend-heading": "विà¤à¤²à¥à¤ªà¤µà¤¿à¤·à¤¯à¤à¤®à¥ ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|à¤
तà¥à¤° नà¥à¤¤à¤¨à¤ªà¥à¤·à¥à¤ ानामॠà¤à¤µà¤²à¤¿à¤]] à¤
पि दà¥à¤¶à¥à¤¯à¤¤à¤¾à¤®à¥)",
"rcnotefrom": "$3, $4 तठà¤à¤°à¤à¥à¤¯ ($1 परà¥à¤¯à¤¨à¥à¤¤à¤) à¤à¤¾à¤¤à¤¾à¤¨à¤¿ {{PLURAL:$5|परिवरà¥à¤¤à¤¨à¤¾à¤¨à¤¿}} à¤
धठपà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤à¤¾à¤¨à¤¿ ।",
"rclistfrom": "$3 $2 पशà¥à¤à¤¾à¤¤à¥ à¤à¤¾à¤¤à¤¾à¤¨à¤¿ नà¥à¤¤à¤¨à¤¾à¤¨à¤¿ परिवरà¥à¤¤à¤¨à¤¾à¤¨à¤¿ दà¥à¤¶à¥à¤¯à¤¨à¥à¤¤à¤¾à¤®à¥",
diff --git a/languages/i18n/sah.json b/languages/i18n/sah.json
index f8c424ba42..ffbdea6726 100644
--- a/languages/i18n/sah.json
+++ b/languages/i18n/sah.json
@@ -1264,7 +1264,7 @@
"recentchanges-label-bot": "ÐÑ ÑлаÑÑÑÑÑÐ½Ñ ÑÐ¾Ð±Ð¾Ñ Ð¾Ò¥Ð¾ÑбÑÑ",
"recentchanges-label-unpatrolled": "ÐÑ ÑлаÑÑÑÑÑ Ó©ÑÑÓ© боÑÑÑÑÑллана илик",
"recentchanges-label-plusminus": "СиÑÑй кÑÑмÑÐ¹Ñ Ð±Ð°ÑÑа баайÑÑнан ÑлаÑÑйбÑÑ",
- "recentchanges-legend-heading": "'''ÐегендаÑа:'''",
+ "recentchanges-legend-heading": "ÐегендаÑа: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ó©ÑÑÓ© көÑ: [[Special:NewPages|Саҥа ÑиÑÑйдÑÑ ÑиһикÑÑÑÑ]])",
"recentchanges-submit": "ÐÓ©ÑдөÑ",
"rcnotefrom": "Ðанна {{PLURAL:$5|ÑлаÑÑÑÑÑ ÐºÓ©ÑдөÑүлүннÑ|ÑлаÑÑÑÑÑÐ»Ð°Ñ ÐºÓ©Ò»Ò¯Ð½Ð½Ò¯Ð»ÑÑ}} баÑÑаÑÑан $3, $4 (баÑÑаÑÑан ÑлбÑÑ
көÑÑүбÑÑ $1 ).",
diff --git a/languages/i18n/sc.json b/languages/i18n/sc.json
index dc124741bc..332e9f6174 100644
--- a/languages/i18n/sc.json
+++ b/languages/i18n/sc.json
@@ -841,7 +841,7 @@
"recentchanges-label-bot": "Custa modìfica l'at fata unu bot",
"recentchanges-label-unpatrolled": "Custu cà mbiu no est istadu cumprobadu",
"recentchanges-label-plusminus": "Su cà mbiu de sa mannà ria de sa pà gina dae su nùmeru de bytes",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (cà stia [[Special:NewPages|is pà ginas noas]])",
"rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudà ntzia|Is chi sighint sunt is mudà ntzias}} dae $3, $4 (ammustradas fintzas a $1 ).",
"rclistfrom": "Ammustra cà mbios dae $3 $2",
diff --git a/languages/i18n/scn.json b/languages/i18n/scn.json
index 71fb83bcac..e7363e1928 100644
--- a/languages/i18n/scn.json
+++ b/languages/i18n/scn.json
@@ -1174,7 +1174,7 @@
"recentchanges-label-bot": "Stu canciamentu fu fattu di nu bot",
"recentchanges-label-unpatrolled": "Stu canciamentu ancora nun fu virificatu",
"recentchanges-label-plusminus": "La grannizza dâ pà ggina canciau di stu nùmmiru di byte",
- "recentchanges-legend-heading": "'''Ligenda:'''",
+ "recentchanges-legend-heading": "Ligenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa puru [[Special:NewPages|la lista dî pà ggini novi]])",
"rcnotefrom": "Ccassutta {{PLURAL:$5|c'è lu canciamentu|ci sù li canciamenti}} a pà rtiri dû $3, $4 (nn'havi ammustrati nfina a $1 ).",
"rclistfrom": "Ammustra li canciamenti novi a pà rtiri dû $3 $2",
diff --git a/languages/i18n/sco.json b/languages/i18n/sco.json
index 0c09fc91fe..bcba1a5490 100644
--- a/languages/i18n/sco.json
+++ b/languages/i18n/sco.json
@@ -1144,7 +1144,7 @@
"recentchanges-label-bot": "This eedit wis performed bi ae bot",
"recentchanges-label-unpatrolled": "This eedit haes no bin patrolled yet",
"recentchanges-label-plusminus": "The page size chynged bi this nummer o bytes",
- "recentchanges-legend-heading": "'''Legend:'''",
+ "recentchanges-legend-heading": "Legend: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] n aw)",
"rcnotefrom": "Ablo {{PLURAL:$5|is the chynge|ar the chynges}} sin $3, $4 (up tae $1 shawn).",
"rclistfrom": "Shaw new chynges stertin fae $3 $2",
diff --git a/languages/i18n/sd.json b/languages/i18n/sd.json
index 8b02a368c3..c6e6e6ddf2 100644
--- a/languages/i18n/sd.json
+++ b/languages/i18n/sd.json
@@ -861,7 +861,7 @@
"recentchanges-label-minor": "ÙÙØ¡Ù ÙÚª Ù
عÙ
ÙÙ٠ترÙ
ÙÙ
Ø¢ÙÙ.",
"recentchanges-label-bot": "ÙÙء٠ترÙ
ÙÙ
بÙÙ½ عÙ
Ù Û¾ Ø¢ÙدÙ.",
"recentchanges-label-plusminus": "Ù٠صÙØ٠ج٠Ù
اپ Û¾ ÙÙترÙ٠ٻاٺڻÙ٠ج٠ڦÙر Ø¢Ù٠آÙÙ",
- "recentchanges-legend-heading": "\"ÚªÙجÙ.\"",
+ "recentchanges-legend-heading": "\"ÚªÙجÙ. ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ù¾Ú» Úس٠[[Special:NewPages|ÙÙ٠صÙØ٠ج٠ÙÙرست]])",
"recentchanges-submit": "ÚÙکارÙÙ",
"rcnotefrom": "ÙÙÙº {{PLURAL:$5|تبدÙÙ٠آÙÙ|تبدÙÙÙÙ٠آÙÙ}} کا٠$3, $4 (تائÙÙ $1 ) ÚÙکارÙ٠آÙÙ.",
diff --git a/languages/i18n/ses.json b/languages/i18n/ses.json
index f8f18e0712..2c92aaba96 100644
--- a/languages/i18n/ses.json
+++ b/languages/i18n/ses.json
@@ -1134,7 +1134,7 @@
"recentchanges-label-bot": "Maršin no ka barmaa woo tee",
"recentchanges-label-unpatrolled": "Barmaa woo mana kurandi jina",
"recentchanges-label-plusminus": "Moɲoo azzaatoo barmay nda cebsi hinnaa woo",
- "recentchanges-legend-heading": "'''Maana:'''",
+ "recentchanges-legend-heading": "Maana: ",
"recentchanges-legend-newpage": "{{int:barmay kokorantey-šilbay-moo taaga}} (guna da [[Special:NewPages|moo taagey maašeede]])",
"recentchanges-legend-plusminus": "(±123 )",
"rcnotefrom": "Ne ganda {{PLURAL:$5|ti barmay|barmawey}} za $3, $4 (hala $1 kaÅ ga cebandi).",
diff --git a/languages/i18n/sgs.json b/languages/i18n/sgs.json
index c8b338eb4d..ec538b1411 100644
--- a/languages/i18n/sgs.json
+++ b/languages/i18n/sgs.json
@@ -816,7 +816,7 @@
"recentchanges-label-bot": "Å Äta keitÄma padÄrba autuomatÄnÄ pruograma",
"recentchanges-label-unpatrolled": "Ons pakeitÄms dÄ nabova oždabuots",
"recentchanges-label-plusminus": "Anuo baitu skaitliom pakeists straipsnÄ apmiers",
- "recentchanges-legend-heading": "'''PÄiÅ¡kÄnÄmÄ:'''",
+ "recentchanges-legend-heading": "PÄiÅ¡kÄnÄmÄ: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dÄ veiziekat [[Special:NewPages|vielÄ«bÅ«ju straipsniu sÄroÅ¡a]])",
"rcnotefrom": "Apatiuo {{PLURAL:$5|ruodoms pakeitÄms|ruodomÄ pakeitÄmÄ}} nug $3, $4 (ne daugiau kÄp $1 ruodoma Ä«r).",
"rclistfrom": "RuodÄ«tÄ vielÄ«bus pakeitÄmus pradedont nug $3 $2",
diff --git a/languages/i18n/sh.json b/languages/i18n/sh.json
index af9f6f821e..754df9718f 100644
--- a/languages/i18n/sh.json
+++ b/languages/i18n/sh.json
@@ -1178,7 +1178,7 @@
"recentchanges-label-bot": "Ovu je izmjenu uÄinio bot",
"recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
"recentchanges-label-plusminus": "VeliÄina stranice promijenila se za ovoliko bajtova",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (takoÄer pogledajte [[Special:NewPages|spisak novih stranica]])",
"rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od $3, $4 (do $1 prikazano).",
"rclistfrom": "Prikaži nove poruke od / ÐÑикажи нове поÑÑке од $3 $2",
diff --git a/languages/i18n/si.json b/languages/i18n/si.json
index 78a1ce7f64..087407028b 100644
--- a/languages/i18n/si.json
+++ b/languages/i18n/si.json
@@ -1195,7 +1195,7 @@
"recentchanges-label-bot": "මà·à¶º රà·à¶¶à·à·à¶à· à·à·à·à·à¶±à· à¶à¶»à¶± ලද à·à¶à·à·à¶à¶»à¶«à¶ºà¶à·",
"recentchanges-label-unpatrolled": "මà·à¶¸ à·à¶à·à·à¶à¶»à¶«à¶º à¶à·à¶¸ à·à·à¶¸à¶»à·à·à¶±à¶º à¶à¶» නà·à¶¸à·à¶",
"recentchanges-label-plusminus": "පà·à¶§à·à·à· බයà·à¶§ à¶à¶«à¶± මà·à¶´à¶¸à¶«à¶à·à¶±à· à·à·à¶±à·à· à·à· à¶à¶",
- "recentchanges-legend-heading": "'''à·à·à·à·à¶à¶»à¶º:'''",
+ "recentchanges-legend-heading": "à·à·à·à·à¶à¶»à¶º: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|න෠පà·à¶§à· ලà·à¶ºà·à·à·à¶à·à·]] ද බලනà·à¶±)",
"recentchanges-submit": "පà·à¶±à·à·à¶±à·à¶±",
"rcnotefrom": "{{PLURAL:$5|à·à·à¶±à·à·à¶à¶¸|à·à·à¶±à·à·à¶à¶¸à·}} න෠පà·à· à·à·à¶¯à·à·à· à¶à¶à· $3, $4 මà·à·à· පà·à¶ දà·à¶à·à·à· ($1 චපà·âරමà·à¶«à¶ºà¶ à¶à¶´à¶»à·à¶¸à¶ºà¶à· පà·à¶±à·à·à· à¶à¶).",
diff --git a/languages/i18n/sk.json b/languages/i18n/sk.json
index 0396d430a8..0034434e99 100644
--- a/languages/i18n/sk.json
+++ b/languages/i18n/sk.json
@@ -1187,7 +1187,7 @@
"recentchanges-label-bot": "Túto úpravu vykonal bot",
"recentchanges-label-unpatrolled": "Táto úprava zatiaľ nebola strážená",
"recentchanges-label-plusminus": "Veľkosť stránky sa zmenila o toľkoto bajtov",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pozri tiež [[Special:NewPages|zoznam nových stránok]])",
"recentchanges-submit": "Zobraziť",
"rcnotefrom": "Nižšie {{PLURAL:$5|je zobrazená úprava|sú zobrazené úpravy}} od $2 (do $1 ).",
diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json
index 1571bc2c03..a0c7d66771 100644
--- a/languages/i18n/sl.json
+++ b/languages/i18n/sl.json
@@ -451,7 +451,7 @@
"nocookieslogin": "{{SITENAME}} za prijavljanje uporabnikov uporablja piÅ¡kotke.\nKer jih imate onemogoÄene, vas prosimo, da jih omogoÄite in se ponovno prijavite.",
"nocookiesfornew": "UporabniÅ¡ki raÄun ni bil ustvarjen, ker nismo mogli potrditi njegovega izvora.\nPoskrbite, da imate omogoÄene piÅ¡kotke, osvežite to stran in poskusite znova.",
"noname": "Niste vnesli veljavnega uporabniškega imena.",
- "loginsuccesstitle": "Uspešno ste se prijavili",
+ "loginsuccesstitle": "Sedaj ste prijavljeni",
"loginsuccess": "'''Zdaj ste prijavljeni v {{GRAMMAR:tožilnik|{{SITENAME}}}} kot »$1«.'''",
"nosuchuser": "Uporabnik z imenom »$1« ne obstaja.\nUporabniÅ¡ka imena so obÄutljiva na velikost Ärk.\nPreverite Ärkovanje ali pa si [[Special:UserLogin/signup|ustvarite nov uporabniÅ¡ki raÄun]].",
"nosuchusershort": "Uporabnik z imenom »$1« ne obstaja.\nPreverite Ärkovanje.",
@@ -487,7 +487,7 @@
"createaccount-title": "Ustvarjanje raÄuna za {{GRAMMAR:tožilnik|{{SITENAME}}}}",
"createaccount-text": "Nekdo je ustvaril raÄun $2 na {{GRAMMAR:dajalnik|{{SITENAME}}}} ($4). Geslo za »$2« je »$3«. PriporoÄljivo je, da se prijavite in spremenite svoje geslo sedaj.\n\nTo sporoÄilo lahko prezrete, Äe je bil raÄun ustvarjen pomotoma.",
"login-throttled": "Nedavno ste izvedli preveÄ poskusov prijave.\nProsimo, poÄakajte $1, preden poskusite znova.",
- "login-abort-generic": "VaÅ¡a prijava ni bila uspeÅ¡na â Prekinjeno",
+ "login-abort-generic": "VaÅ¡a prijava je spodletela â Prekinjeno",
"login-migrated-generic": "VaÅ¡ raÄun smo preselili in vaÅ¡e uporabniÅ¡ko ime na tem wikiju ne obstaja veÄ.",
"loginlanguagelabel": "Jezik: $1",
"suspicious-userlogout": "Vaša zahteva za odjavo je bila zavrnjena, saj kaže, da je bila poslana iz pokvarjenega brskalnika ali proxyja s predpomnilnikom.",
@@ -507,7 +507,7 @@
"newpassword": "Novo geslo:",
"retypenew": "Ponovno vpišite geslo:",
"resetpass_submit": "Nastavi geslo in se prijavi",
- "changepassword-success": "Vaše geslo je bilo uspešno spremenjeno!",
+ "changepassword-success": "Vaše geslo smo spremenili!",
"changepassword-throttled": "Nedavno ste izvedli preveÄ poskusov prijave.\nProsimo, poÄakajte $1, preden poskusite znova.",
"botpasswords": "Gesla botov",
"botpasswords-summary": "Gesla botov omogoÄajo dostop do uporabniÅ¡kega raÄuna z API-jem brez uporabe glavnih poverilnic raÄuna za prijavo. Omejite lahko uporabniÅ¡ke pravice, ki so na voljo pri prijavi z geslom bota.\n\nÄe ne veste, zakaj bi to morda uporabljali, tega najverjetneje ne potrebujete. NihÄe vas ne sme prositi, da mu zgenerirate in daste geslo bota.",
@@ -530,11 +530,11 @@
"botpasswords-insert-failed": "Dodajanje imena bota »$1« ni uspelo. Ste ga že dodali?",
"botpasswords-update-failed": "Posodobitev imena bota »$1« je spodletelo. Ste ga izbrisali?",
"botpasswords-created-title": "Ustvarili smo geslo bota",
- "botpasswords-created-body": "Uspešno smo ustvarili geslo bota »$1«.",
+ "botpasswords-created-body": "Ustvarili smo geslo bota »$1« uporabnika »$2«.",
"botpasswords-updated-title": "Posodobili smo geslo bota",
- "botpasswords-updated-body": "Uspešno smo posodobili geslo bota »$1«.",
+ "botpasswords-updated-body": "Posodobili smo geslo bota »$1« uporabnika »$2«.",
"botpasswords-deleted-title": "Izbrisali smo geslo bota",
- "botpasswords-deleted-body": "Uspešno smo izbrisali geslo bota »$1«.",
+ "botpasswords-deleted-body": "Izbrisali smo geslo bota »$1« uporabnika »$2«.",
"botpasswords-newpassword": "Novo geslo za prijavo z imenom $1 je $2 . Prosimo, zabeležite si to za uporabo v prihodnje. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider ni na voljo.",
"botpasswords-restriction-failed": "Omejitve gesla bota prepreÄujejo to prijavo.",
@@ -544,7 +544,7 @@
"resetpass-no-info": "Za neposreden dostop do te strani morate biti prijavljeni.",
"resetpass-submit-loggedin": "Spremenite geslo",
"resetpass-submit-cancel": "PrekliÄi",
- "resetpass-wrong-oldpass": "Neveljavno zaÄano ali trenutno geslo.\nMorda ste že uspeÅ¡no spremenili geslo ali pa ste zahtevali novo zaÄasno geslo.",
+ "resetpass-wrong-oldpass": "Neveljavno zaÄasno ali trenutno geslo.\nMorda ste že spremenili geslo ali pa ste zahtevali novo zaÄasno geslo.",
"resetpass-recycled": "Prosimo, ponastavite svoje geslo na nekaj drugega kot svoje trenutno geslo.",
"resetpass-temp-emailed": "Trenutno ste prijavljeni z zaÄasno kodo, poslano z e-poÅ¡to. Za zakljuÄitev prijave morate tukaj nastaviti novo geslo:",
"resetpass-temp-password": "ZaÄasno geslo:",
@@ -828,9 +828,9 @@
"revdelete-unsuppress": "Odpraviti omejitve na obnovljenih redakcijah.",
"revdelete-log": "Razlog:",
"revdelete-submit": "Uporabi za {{PLURAL:$1|izbrano redakcijo|izbrani redakciji|izbrane redakcije}}",
- "revdelete-success": "'''Vidnost redakcije je bila uspešno nastavljena.'''",
+ "revdelete-success": "Vidnost redakcije smo posodobili.",
"revdelete-failure": "'''Vidnost redakcije ni bilo mogoÄe nastaviti:'''\n$1",
- "logdelete-success": "'''Vidnost dnevnika je bila uspešno nastavljena.'''",
+ "logdelete-success": "Vidnost dnevnika smo nastavili.",
"logdelete-failure": "'''Vidnost dnevnika ne more biti nastavljena!:'''\n$1",
"revdel-restore": "Spremeni vidnost",
"pagehist": "Zgodovina strani",
@@ -1074,7 +1074,7 @@
"userrights-changeable-col": "Skupine, ki jih lahko spremenite",
"userrights-unchangeable-col": "Skupine, ki jih ne morete spremeniti",
"userrights-conflict": "Spor sprememb uporabniških pravic! Prosimo, da pregledate in potrdite svoje spremembe.",
- "userrights-removed-self": "UspeÅ¡no ste odstranili svoje pravice. Tako sedaj ne morete veÄ dostopati do te strani.",
+ "userrights-removed-self": "Odstranili ste svoje pravice. Tako sedaj ne morete veÄ dostopati do te strani.",
"group": "Skupina:",
"group-user": "Uporabniki",
"group-autoconfirmed": "Samodejno potrjeni uporabniki",
@@ -1491,8 +1491,8 @@
"uploadstash-summary": "Ta stran omogoÄa dostop do datotek, ki so naložene (oziroma v postopku nalaganja), vendar Å¡e niso objavljene na wikiju. Te datoteke so vidne samo uporabniku, ki jih je naložil, in nikomur drugemu.",
"uploadstash-clear": "PoÄisti skrite datoteke",
"uploadstash-nofiles": "Nimate skritih datotek.",
- "uploadstash-badtoken": "Izvedba dejanja ni bila uspešna, morda zaradi izteklih poverilnic za urejanje. Poskusite znova.",
- "uploadstash-errclear": "ÄiÅ¡Äenje datotek ni bilo uspeÅ¡no.",
+ "uploadstash-badtoken": "Izvedba dejanja je spodletela. Morda zaradi izteklih poverilnic za urejanje. Prosimo, poskusite znova.",
+ "uploadstash-errclear": "ÄiÅ¡Äenje datotek je spodletelo.",
"uploadstash-refresh": "Osveži seznam datotek",
"invalid-chunk-offset": "Neveljaven odmik delÄka",
"img-auth-accessdenied": "Dostop zavrnjen",
@@ -2001,12 +2001,14 @@
"changecontentmodel-title-label": "Naslov strani",
"changecontentmodel-model-label": "Novi model vsebine",
"changecontentmodel-reason-label": "Razlog:",
+ "changecontentmodel-submit": "Spremeni",
"changecontentmodel-success-title": "Spremenili smo model vsebine",
"changecontentmodel-success-text": "Spremenili smo vrsto vsebine [[:$1]].",
"changecontentmodel-cannot-convert": "Vsebine na [[:$1]] ni mogoÄe pretvoriti v vrsto $2.",
"changecontentmodel-nodirectediting": "Model vsebine $1 ne podpira neposrednega urejanja",
"log-name-contentmodel": "Dnevnik sprememb modela vsebine",
"log-description-contentmodel": "Dogodki, povezani z modeli vsebin strani",
+ "logentry-contentmodel-new": "$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} stran $3 z neprivzetim modelom vsebine »$5«",
"logentry-contentmodel-change": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} model vsebine strani $3 z »$4« na »$5«",
"logentry-contentmodel-change-revertlink": "vrni",
"logentry-contentmodel-change-revert": "vrni",
@@ -3228,7 +3230,7 @@
"tags-delete-not-allowed": "Oznak, ki jih doloÄijo razÅ¡iritve, ni mogoÄe izbrisati, razen Äe razÅ¡iritve to izrecno dovolijo.",
"tags-delete-not-found": "Oznaka »$1« ne obstaja.",
"tags-delete-too-many-uses": "Oznaka »$1« je uporabljena pri veÄ kot $2 {{PLURAL:$2|redakciji|redakcijah}}, kar pomeni, da je ni mogoÄe izbrisati.",
- "tags-delete-warnings-after-delete": "Oznako »$1« smo uspešno izbrisali, vendar smo naleteli na {{PLURAL:$2|naslednjo težavo|naslednji težavi|naslednje težave}}:",
+ "tags-delete-warnings-after-delete": "Oznako »$1« smo izbrisali, vendar smo naleteli na {{PLURAL:$2|naslednjo težavo|naslednji težavi|naslednje težave}}:",
"tags-activate-title": "Aktiviraj oznako",
"tags-activate-question": "Aktivirali boste oznako »$1«.",
"tags-activate-reason": "Razlog:",
@@ -3267,7 +3269,7 @@
"tags-edit-reason": "Razlog:",
"tags-edit-revision-submit": "Uveljavi spremembe na {{PLURAL:$1|redakciji|$1 redakcijah}}",
"tags-edit-logentry-submit": "Uveljavi spremembe na {{PLURAL:$1|dnevniškem vnosu|$1 dnevniških vnosih}}",
- "tags-edit-success": "Spremembe smo uspešno uveljavili.",
+ "tags-edit-success": "Spremembe smo uveljavili.",
"tags-edit-failure": "Sprememb nismo mogli uveljaviti:\n$1",
"tags-edit-nooldid-title": "Neveljavna ciljna redakcija",
"tags-edit-nooldid-text": "Bodisi niste navedli ciljne redakcije, na kateri želite izvesti dejanje, bodisi navedena redakcija ne obstaja.",
diff --git a/languages/i18n/so.json b/languages/i18n/so.json
index 4cf2d107d1..e9782f098d 100644
--- a/languages/i18n/so.json
+++ b/languages/i18n/so.json
@@ -693,7 +693,7 @@
"recentchanges-label-bot": "Badalkaan waxaa sameeyay bot",
"recentchanges-label-unpatrolled": "bedelkaan hadda wali lama waardiyeen",
"recentchanges-label-plusminus": "Qaadka bogga wuxuu ku bedelmay tirada halbeega baytka",
- "recentchanges-legend-heading": "'''Sharaxaad:'''",
+ "recentchanges-legend-heading": "Sharaxaad: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sidoo kale eeg [[Special:NewPages|liiska bogagga cusub]])",
"rcnotefrom": "Hoostaan waa isbedaladii dhacay '''$2''' (waxaad arkoosaa ilaa '''$1''' ).",
"rclistfrom": "Itusi isbedelada cusub oo ka bilaabaneyso $3 $2",
diff --git a/languages/i18n/sq.json b/languages/i18n/sq.json
index 8daf40de41..552431f0ee 100644
--- a/languages/i18n/sq.json
+++ b/languages/i18n/sq.json
@@ -1125,7 +1125,7 @@
"recentchanges-label-bot": "Ky redaktim u krye nga një robot",
"recentchanges-label-unpatrolled": "Ky editim ende nuk është patrolluar",
"recentchanges-label-plusminus": "Madhësia e faqes ndryshoi me këtë numër bajtësh",
- "recentchanges-legend-heading": "'''Legjenda:'''",
+ "recentchanges-legend-heading": "Legjenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (shiko gjithashtu [[Special:NewPages|listën e faqeve të reja]])",
"rcnotefrom": "Më poshtë {{PLURAL:$5|është shfaqur ndryshimi|janë shfaqur ndryshimet}} që nga $3, $4 (deri në $1 ).",
"rclistfrom": "Tregon ndryshime së fundmi duke filluar nga $3 $2",
diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json
index acc660bfd6..04b8a53aff 100644
--- a/languages/i18n/sr-ec.json
+++ b/languages/i18n/sr-ec.json
@@ -1222,7 +1222,7 @@
"recentchanges-label-bot": "ÐÐ²Ñ Ð¸Ð·Ð¼ÐµÐ½Ñ Ñе напÑавио боÑ",
"recentchanges-label-unpatrolled": "Ðва измена ÑÐ¾Ñ Ð½Ð¸Ñе паÑÑолиÑана",
"recentchanges-label-plusminus": "ÐÑомена велиÑине ÑÑÑаниÑе Ñ Ð±Ð°ÑÑовима",
- "recentchanges-legend-heading": "'''Ðегенда:'''",
+ "recentchanges-legend-heading": "Ðегенда: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ÑпиÑак новиÑ
ÑÑÑаниÑа]])",
"recentchanges-submit": "ÐÑикажи",
"rcnotefrom": "ÐÑпод {{PLURAL:$5|Ñе измена|ÑÑ Ð¸Ð·Ð¼ÐµÐ½Ðµ}} од $3, $4 (до $1 пÑиказано).",
diff --git a/languages/i18n/sr-el.json b/languages/i18n/sr-el.json
index e42fc1aa48..e95cfbb073 100644
--- a/languages/i18n/sr-el.json
+++ b/languages/i18n/sr-el.json
@@ -1183,7 +1183,7 @@
"recentchanges-label-bot": "Ovu izmenu je napravio bot",
"recentchanges-label-unpatrolled": "Ova izmena još nije patrolirana",
"recentchanges-label-plusminus": "Promena veliÄine stranice u bajtovima",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
"recentchanges-submit": "Prikaži",
"rcnotefrom": "Ispod {{PLURAL:$5|je izmena|su izmene}} od $3, $4 (do $1 prikazano).",
diff --git a/languages/i18n/su.json b/languages/i18n/su.json
index a399644234..520f3b3d7c 100644
--- a/languages/i18n/su.json
+++ b/languages/i18n/su.json
@@ -1104,7 +1104,7 @@
"recentchanges-label-bot": "Ieu parobahan dijieun ku bot",
"recentchanges-label-unpatrolled": "Ieu éditan can karoris",
"recentchanges-label-plusminus": "Ukuran kaca robah sajumlah ieu bit",
- "recentchanges-legend-heading": "'''Pedaran:'''",
+ "recentchanges-legend-heading": "Pedaran: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tempo ogé [[Special:NewPages|béréndélan kaca anyar]])",
"rcnotefrom": "Di handap ieu parobahan saprak $2 (nu ditémbongkeun nepi ka $1 ).",
"rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json
index 849f52639c..e3a6a1ea58 100644
--- a/languages/i18n/sv.json
+++ b/languages/i18n/sv.json
@@ -210,6 +210,7 @@
"moredotdotdot": "Mer...",
"morenotlisted": "Denna lista är inte fullständig.",
"mypage": "Sida",
+ "anonuserpage": "Okänd användare",
"mytalk": "Diskussion",
"anontalk": "Diskussion",
"navigation": "Navigering",
@@ -508,7 +509,7 @@
"nocookieslogin": "{{SITENAME}} använder kakor för att logga in användare. Du har stängt av kakor i din webbläsare. Försök igen med stöd för kakor aktiverat.",
"nocookiesfornew": "Användarkontot skapades inte, eftersom vi inte kunde bekräfta dess källa.\nSe till att du har aktiverat kakor, ladda om denna sida och försök igen.",
"noname": "Du har angett ett ogiltigt användarnamn.",
- "loginsuccesstitle": "Inloggningen lyckades",
+ "loginsuccesstitle": "Inloggad",
"loginsuccess": "'''Du är nu inloggad på {{SITENAME}} som \"$1\".'''",
"nosuchuser": "Det finns ingen användare med namnet \"$1\".\nAnvändarnamn är skiftlägeskänsliga.\nKontrollera din stavning, eller [[Special:UserLogin/signup|skapa ett nytt konto]].",
"nosuchusershort": "Det finns ingen användare som heter \"$1\". Kontrollera att du stavat rätt.",
@@ -587,11 +588,11 @@
"botpasswords-insert-failed": "Kunde inte lägga till botnamnet \"$1\". Har det redan lagts till?",
"botpasswords-update-failed": "Kunde inte uppdatera botnamnet \"$1\". Har det raderats?",
"botpasswords-created-title": "Botlösenord skapades",
- "botpasswords-created-body": "Botlösenordet \"$1\" skapades.",
+ "botpasswords-created-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" skapades.",
"botpasswords-updated-title": "Botlösenordet uppdaterades",
- "botpasswords-updated-body": "Botlösenordet \"$1\" uppdaterades.",
+ "botpasswords-updated-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" uppdaterades.",
"botpasswords-deleted-title": "Botlösenord raderades",
- "botpasswords-deleted-body": "Botlösenordet \"$1\" raderades.",
+ "botpasswords-deleted-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" raderades.",
"botpasswords-newpassword": "Det nya lösenordet att logga in för $1 är $2 . Spara detta som framtida referens. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider är inte tillgänglig.",
"botpasswords-restriction-failed": "Begränsningar av botlösenord tillåter inte denna inloggning.",
@@ -699,7 +700,7 @@
"newarticle": "(Ny)",
"newarticletext": "Du har klickat på en länk till en sida som inte finns ännu. För att skapa sidan, börja att skriva i fältet nedan (du kan läsa mer på [$1 hjälpsidan]). Om du kom hit av misstag kan du bara trycka på tillbaka -knappen i din webbläsare.",
"anontalkpagetext": "----''Detta är diskussionssidan för en anonym användare som inte ännu skapat ett konto, eller som inte använder det.\nDärför måste vi använda den numeriska IP-adressen för att identifiera honom/henne.\nEn sådan IP-adress kan delas av flera användare.\nOm du är en anonym användare och känner att irrelevanta kommentarer har riktats mot dig, vänligen [[Special:UserLogin/signup|skapa ett konto]] eller [[Special:UserLogin|logga in]] för att undvika framtida förväxlingar med andra anonyma användare.''",
- "noarticletext": "Det finns just nu ingen text på denna sida.\nDu kan [[Special:Search/{{PAGENAME}}|söka efter denna sidtitel]] på andra sidor, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar], eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} redigera denna sida] .",
+ "noarticletext": "Det finns just nu ingen text på denna sida.\nDu kan [[Special:Search/{{PAGENAME}}|söka efter denna sidtitel]] på andra sidor, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar], eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} skapa denna sida] .",
"noarticletext-nopermission": "Det finns för tillfället ingen text på denna sida.\nDu kan [[Special:Search/{{PAGENAME}}|söka efter denna sidas titel]] på andra sidor,\neller [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar] men du har inte behörighet att skapa sidan.",
"missing-revision": "Revisionen #$1 av sidan med namnet \"{{FULLPAGENAME}}\" finns inte.\n\nDetta orsakas vanligen av efter en gammal historiklänk till en sida som har raderats.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
"userpage-userdoesnotexist": "\"$1 \" är inte ett registrerat användarkonto. Tänk efter om du vill skapa/redigera den här sidan.",
@@ -885,9 +886,9 @@
"revdelete-unsuppress": "Ta bort begränsningar på återställda versioner",
"revdelete-log": "Anledning:",
"revdelete-submit": "Tillämpa på {{PLURAL:$1|vald version|valda versioner}}",
- "revdelete-success": "'''Sidversionssynlighet har uppdaterats.'''",
+ "revdelete-success": "Sidversionssynlighet har uppdaterats.",
"revdelete-failure": "'''Sidversionssynlighet kunde inte uppdateras:'''\n$1",
- "logdelete-success": "'''Loggens synlighet har ställts in.'''",
+ "logdelete-success": "Loggens synlighet har ställts in.",
"logdelete-failure": "'''Loggens synlighet kunde inte ställas in:'''\n$1",
"revdel-restore": "ändra synlighet",
"pagehist": "Sidhistorik",
@@ -1319,7 +1320,7 @@
"recentchanges-label-bot": "Denna redigering gjordes av en bot",
"recentchanges-label-unpatrolled": "Denna redigering har inte blivit patrullerad ännu",
"recentchanges-label-plusminus": "Sidans storlek ändrades med detta antal byte",
- "recentchanges-legend-heading": "'''Teckenförklaring:'''",
+ "recentchanges-legend-heading": "Teckenförklaring: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se även [[Special:NewPages|listan över nya sidor]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Visa",
@@ -1522,7 +1523,7 @@
"backend-fail-read": "Kunde inte läsa filen ''$1''.",
"backend-fail-create": "Kunde inte skapa filen $1.",
"backend-fail-maxsize": "Kunde inte skapa filen $1 eftersom den är större än {{PLURAL:$2|en byte|$2 bytes}}.",
- "backend-fail-readonly": "Lagringssystemet \"$1\" är för närvarande skrivskyddad. Den angivna anledningen är: \"$2\"",
+ "backend-fail-readonly": "Lagringssystemet \"$1\" är för närvarande skrivskyddat. Den angivna anledningen var: $2 ",
"backend-fail-synced": "Filen \"$1\" är i ett inkonsekvent tillstånd inom de interna lagringssystemen",
"backend-fail-connect": "Kunde inte ansluta till lagringssystemet \"$1\".",
"backend-fail-internal": "Ett okänt fel uppstod i lagringssystemet \"$1\".",
@@ -1549,7 +1550,7 @@
"uploadstash-summary": "Denna sida ger tillgång till filer som är uppladdade (eller håller på att laddas upp) men som ännu inte är publicerade till wikin. Dessa filer är inte synliga för någon annan än den användare som laddade upp dem.",
"uploadstash-clear": "Rensa temporärt lagrade filer",
"uploadstash-nofiles": "Du har inga temporärt lagrade filer.",
- "uploadstash-badtoken": "Utförandet av den åtgärden misslyckades, kanske för att din redigeringsrättigheter löpt ut. Försök igen.",
+ "uploadstash-badtoken": "Misslyckades att utföra åtgärden. Dina redigeringsrättigheter har kanske löpt ut. Försök igen.",
"uploadstash-errclear": "Rensning av filerna misslyckades.",
"uploadstash-refresh": "Uppdatera listan över filer",
"invalid-chunk-offset": "Ogiltig segmentsförskjutning",
@@ -2040,7 +2041,7 @@
"delete-toobig": "Denna sida har en lång redigeringshistorik med mer än $1 {{PLURAL:$1|sidversion|sidversioner}}. Borttagning av sådana sidor har begränsats för att förhindra oavsiktliga driftstörningar på {{SITENAME}}.",
"delete-warning-toobig": "Denna sida har en lång redigeringshistorik med mer än $1 {{PLURAL:$1|sidversion|sidversioner}}. Att radera sidan kan skapa problem med hanteringen av databasen på {{SITENAME}}; var försiktig.",
"deleteprotected": "Du kan inte radera denna sida eftersom den är skyddad.",
- "deleting-backlinks-warning": "'''Varning:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Andra sidor]] länkar till eller inkluderar sidan som du är på väg att radera.",
+ "deleting-backlinks-warning": "Varning: \n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Andra sidor]] länkar till eller inkluderar sidan som du är på väg att radera.",
"rollback": "Rulla tillbaka ändringar",
"rollbacklink": "rulla tillbaka",
"rollbacklinkcount": "rulla tillbaka $1 {{PLURAL:$1|redigering|redigeringar}}",
@@ -2059,12 +2060,14 @@
"changecontentmodel-title-label": "Sidtitel",
"changecontentmodel-model-label": "Ny innehållsmodell",
"changecontentmodel-reason-label": "Orsak:",
+ "changecontentmodel-submit": "Ãndra",
"changecontentmodel-success-title": "Innehållsmodellen ändrades",
"changecontentmodel-success-text": "Innehållstypen för [[:$1]] har ändrats.",
"changecontentmodel-cannot-convert": "Innehållet på [[:$1]] kan inte konverteras till typen $2.",
"changecontentmodel-nodirectediting": "Innehållsmodellen $1 stöder inte direkt redigering",
"log-name-contentmodel": "Ãndringslogg för innehÃ¥llsmodellen",
"log-description-contentmodel": "Händelser som är relaterade till en sidas innehållsmodeller",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|skapade}} sidan $3 med den icke-standardiserade innehållsmodellen \"$5\"",
"logentry-contentmodel-change": "$1 {{GENDER:$2|ändrade}} innehållsmodellen för sidan $3 från \"$4\" till \"$5\"",
"logentry-contentmodel-change-revertlink": "återställ",
"logentry-contentmodel-change-revert": "återställ",
@@ -3323,7 +3326,7 @@
"tags-edit-revision-legend": "Lägg eller ta bort märken från {{PLURAL:$1|denna sidversion|alla $1 sidversioner}}",
"tags-edit-logentry-legend": "Lägg till eller ta bort märken från {{PLURAL:$1|denna loggpost|alla $1 loggposter}}",
"tags-edit-existing-tags": "Befintliga märken:",
- "tags-edit-existing-tags-none": "''Inga''",
+ "tags-edit-existing-tags-none": "Inga ",
"tags-edit-new-tags": "Nya märken:",
"tags-edit-add": "Lägg till dessa märken:",
"tags-edit-remove": "Ta bort dessa märken:",
diff --git a/languages/i18n/sw.json b/languages/i18n/sw.json
index aca80f4ca0..532f1abb64 100644
--- a/languages/i18n/sw.json
+++ b/languages/i18n/sw.json
@@ -1131,7 +1131,7 @@
"recentchanges-label-bot": "Sahihisho hili lilitekelezwa na bot",
"recentchanges-label-unpatrolled": "Haririo hili bado halijafanyiwa doria",
"recentchanges-label-plusminus": "Ukubwa ukurasa kubadilishwa na hii idadi ya baiti",
- "recentchanges-legend-heading": "'''Simulizi:'''",
+ "recentchanges-legend-heading": "Simulizi: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pia tazama [[Special:NewPages|orodha ya kurasa mpya]])",
"rcnotefrom": "Hapo chini {{PLURAL:$5|is the change|yaonekana mabadiliko}} tangu $3,$4 (hadi $1 tunaonyesha).",
"rclistfrom": "Onyesha mabadiliko mapya kuanzia $3 $2",
diff --git a/languages/i18n/szl.json b/languages/i18n/szl.json
index 55974d3fd9..ee91968fe3 100644
--- a/languages/i18n/szl.json
+++ b/languages/i18n/szl.json
@@ -984,7 +984,7 @@
"recentchanges-label-bot": "To sprowjyÅy bůÅo zrobjůne uod bota",
"recentchanges-label-unpatrolled": "To sprowjyÅy Åy bůÅo jeszcze uowjerzůne",
"recentchanges-label-plusminus": "PůmjyÅono mjara zajty we bajtach",
- "recentchanges-legend-heading": "'''Legynda:'''",
+ "recentchanges-legend-heading": "Legynda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uobejrzij tyż [[Special:NewPages|lista nowych zajt]])",
"rcnotefrom": "PůÅiżej pokazano půmjyÅaÅo zrobjůne pů $2 (Åy wjyncyj kej $1 pozycji).",
"rclistfrom": "Ukoż půmjyÅaÅa uod $3 $2",
diff --git a/languages/i18n/ta.json b/languages/i18n/ta.json
index 512fb5dee4..73745239cc 100644
--- a/languages/i18n/ta.json
+++ b/languages/i18n/ta.json
@@ -1279,7 +1279,7 @@
"recentchanges-label-bot": "à®à®¨à¯à®¤ தà¯à®à¯à®ªà¯à®ªà®¾à®©à®¤à¯ à®à®°à¯ தானியà®à¯à®à®¿à®¯à®¾à®²à¯ à®à¯à®¯à¯à®¯à®ªà¯à®ªà®à¯à®à®¤à®¾à®à¯à®®à¯",
"recentchanges-label-unpatrolled": "à®à®¨à¯à®¤ தà¯à®à¯à®ªà¯à®ªà¯ à®à®©à¯à®©à¯à®®à¯ à®°à¯à®¨à¯à®¤à®¿à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯",
"recentchanges-label-plusminus": "à®à®¤à¯à®¤à®©à¯ பà¯à®à¯à®à¯à®à®³à¯à®à¯à®à¯ பà®à¯à®à®¤à¯à®¤à®¿à®©à¯ à®
ளவ௠மாறà¯à®±à®ªà¯à®ªà®à¯à®à¯à®³à¯à®³à®¤à¯",
- "recentchanges-legend-heading": "'''à®à¯à®±à®¿à®¯à¯à®à¯à®à¯ விளà®à¯à®à®®à¯:'''",
+ "recentchanges-legend-heading": "à®à¯à®±à®¿à®¯à¯à®à¯à®à¯ விளà®à¯à®à®®à¯: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|பà¯à®¤à®¿à®¯ பà®à¯à®à®à¯à®à®³à¯ பà®à¯à®à®¿à®¯à®²à¯à®¯à¯à®®à¯]] à®à®¾à®£à®µà¯à®®à¯)",
"recentchanges-submit": "à®à®¾à®à¯à®à¯",
"rcnotefrom": "à®à¯à®´à¯ à®à®¾à®£à®ªà¯à®ªà®à¯à®µà®¤à¯ $3, $4 à®à®²à®¿à®°à¯à®¨à¯à®¤à¯ à®à¯à®¯à¯à®¯à®ªà¯à®ªà®à¯à® ($1 வரà¯à®à¯ à®à®¾à®à¯à®à®ªà¯à®ªà®à¯à®à¯à®³à¯à®³à®¤à¯) {{PLURAL:$5|மாறà¯à®±à®®à®¾à®à¯à®®à¯.|மாறà¯à®±à®à¯à®à®³à®¾à®à¯à®®à¯.}}",
diff --git a/languages/i18n/tcy.json b/languages/i18n/tcy.json
index f183f409ef..11736b1118 100644
--- a/languages/i18n/tcy.json
+++ b/languages/i18n/tcy.json
@@ -635,7 +635,7 @@
"recentchanges-label-bot": "ಠಸà²à²ªà²¦à²¨à³ à²à²à²à²¿ ಬಾà²à³âಡೠà²à²¤à³à²à²¡à³",
"recentchanges-label-unpatrolled": "ಠಸà²à²ªà²¾à²¦à²¨à³à²¨à³ ನನಲಾ ಪರà³à²à³à²·à³ ಮಲà³à²¤à³âà²à²¿.",
"recentchanges-label-plusminus": "ಬà³à²à³à²¸à³âದ ಲà³à²à³à²à³à²¡à³ ಠಪಾಲà³à²¦ à²à²¾à²¤à³à²°à³ ಬದಲಾತà³à²à²¡à³",
- "recentchanges-legend-heading": "'''ಲà³à²à³à²à²¡à³:'''",
+ "recentchanges-legend-heading": "ಲà³à²à³à²à²¡à³: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ಬà³à²à³à²à³à²²à²¾ ತà³à²²à³ [[Special:NewPages|ಪà³à²¸ ಪà³à²à³à²¦ ಪà²à³à²à²¿]])",
"rclistfrom": "$3 $2 ರà³à²¦à³ ಸà³à²°à³à²µà²¾à²¤à²¿à²¨ ಪà³à²¸ ಬದಲಾವಣà³à²²à³à²¨à³ ತà³à²à³à²ªà²¾à²µà³",
"rcshowhideminor": "$1 à²à²²à³à²¯à³à²²à³à²¯ ಬದಲಾವಣà³à²²à³",
diff --git a/languages/i18n/te.json b/languages/i18n/te.json
index 583245cd69..5c3ad1c271 100644
--- a/languages/i18n/te.json
+++ b/languages/i18n/te.json
@@ -1170,7 +1170,7 @@
"recentchanges-label-bot": "ఠమారà±à°ªà±à°¨à± à°à° బాà°à± à°à±à°¸à°¿à°à°¦à°¿",
"recentchanges-label-unpatrolled": "ఠదిదà±à°¦à±à°¬à°¾à°à± à°®à±à°¦ నిà°à°¾ à°²à±à°¦à±",
"recentchanges-label-plusminus": "à° à°ªà±à°à°¿ పరిమాణà°à°²à± à°à°°à°¿à°à°¿à°¨ మారà±à°ªà±à°² à°¬à±à°à±à°² à°¸à°à°à±à°¯",
- "recentchanges-legend-heading": "'''à°¸à±à°à°¿à° :'''",
+ "recentchanges-legend-heading": "à°¸à±à°à°¿à° : ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|à°à±à°¤à±à°¤ à°ªà±à°à±à°² à°à°¾à°¬à°¿à°¤à°¾]]నౠà°à±à°¡à°¾ à°à±à°¡à°à°¡à°¿)",
"recentchanges-submit": "à°à±à°ªà°¿à°à°à±",
"rcnotefrom": "$2 à°¨à±à°à°¡à°¿ à°à°°à°¿à°à°¿à°¨ మారà±à°ªà±à°²à± ($1 వరà°à±) à°à°¿à°à°¦ à°à±à°ªà°¬à°¡à±à°¡à°¾à°¯à°¿.",
diff --git a/languages/i18n/th.json b/languages/i18n/th.json
index 5d2f881ed6..453be28df6 100644
--- a/languages/i18n/th.json
+++ b/languages/i18n/th.json
@@ -1178,7 +1178,7 @@
"recentchanges-label-bot": "à¸à¸à¸à¸à¸£à¸°à¸à¸³à¸à¸²à¸£à¹à¸à¹à¹à¸à¸à¸µà¹",
"recentchanges-label-unpatrolled": "à¸à¸²à¸£à¹à¸à¹à¹à¸à¸à¸µà¹à¸¢à¸±à¸à¹à¸¡à¹à¹à¸à¹à¸à¸£à¸§à¸à¸ªà¸à¸",
"recentchanges-label-plusminus": "à¸à¸à¸²à¸à¸à¸à¸à¸«à¸à¹à¸²à¹à¸à¸¥à¸µà¹à¸¢à¸à¹à¸à¸à¸³à¸à¸§à¸à¹à¸à¸à¹à¹à¸à¹à¸²à¸à¸µà¹",
- "recentchanges-legend-heading": "'''à¸à¸³à¸à¸à¸´à¸à¸²à¸¢à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸à¹:'''",
+ "recentchanges-legend-heading": "à¸à¸³à¸à¸à¸´à¸à¸²à¸¢à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸à¹: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (à¸à¸¹à¹à¸à¸´à¹à¸¡à¸à¸µà¹ [[Special:NewPages|รายà¸à¸·à¹à¸à¸«à¸à¹à¸²à¹à¸«à¸¡à¹]])",
"recentchanges-submit": "à¹à¸ªà¸à¸",
"rcnotefrom": "à¸à¹à¸²à¸à¸¥à¹à¸²à¸à¹à¸à¹à¸à¸à¸²à¸£à¹à¸à¸¥à¸µà¹à¸¢à¸à¹à¸à¸¥à¸à¸à¸±à¹à¸à¹à¸à¹ $3, $4 (à¹à¸ªà¸à¸à¸¡à¸²à¸à¸ªà¸¸à¸ $1 )",
diff --git a/languages/i18n/tl.json b/languages/i18n/tl.json
index 655d5aedf2..44ff623d7a 100644
--- a/languages/i18n/tl.json
+++ b/languages/i18n/tl.json
@@ -1087,7 +1087,7 @@
"recentchanges-label-minor": "Isa itong munting pagbabago",
"recentchanges-label-bot": "Gawa ng isang bot ang pagbabagong ito",
"recentchanges-label-unpatrolled": "Hindi pa napapatrulyahan ang pagbabagong ito",
- "recentchanges-legend-heading": "'''Gabay:'''",
+ "recentchanges-legend-heading": "Gabay: ",
"recentchanges-legend-newpage": "$1 - bagong pahina",
"rcnotefrom": "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').",
"rclistfrom": "Ipakita ang bagong mga pagbabago simula sa $3 $2",
diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json
index bfe89bdc3f..f214131722 100644
--- a/languages/i18n/tr.json
+++ b/languages/i18n/tr.json
@@ -579,7 +579,7 @@
"newpassword": "Yeni parola",
"retypenew": "Yeni parolayı tekrar girin",
"resetpass_submit": "Åifreyi ayarlayın ve oturum açın",
- "changepassword-success": "Parolanız baÅarıyla deÄiÅtirildi!",
+ "changepassword-success": "Parolanız deÄiÅtirildi!",
"changepassword-throttled": "Ãok fazla yeni oturum açma giriÅiminde bulundunuz.\nLütfen tekrar denemeden önce $1 bekleyin.",
"botpasswords": "Bot Åifreleri",
"botpasswords-disabled": "Bot Åifreleri devre dıÅı.",
@@ -891,7 +891,7 @@
"revdelete-submit": "Seçilen {{PLURAL:$1|sürüme|sürümlere}} uygula",
"revdelete-success": "'''Revizyon görünürlüÄü baÅarıyla güncellendi.'''",
"revdelete-failure": "'''Revizyon görünürlüÄü güncellenemiyor:'''\n$1",
- "logdelete-success": "'''Günlük görünürlüÄü baÅarıyla ayarlandı.'''",
+ "logdelete-success": "Günlük görünürlüÄü ayarlandı.",
"logdelete-failure": "'''Günlük görünürlüÄü ayarlanamadı:'''\n$1",
"revdel-restore": "görünürlüÄü deÄiÅtir",
"pagehist": "Sayfa geçmiÅi",
@@ -1300,7 +1300,7 @@
"recentchanges-label-bot": "Bu deÄiÅiklik bir bot tarafından yapıldı",
"recentchanges-label-unpatrolled": "Bu deÄiÅiklik henüz gözlenmemiÅ",
"recentchanges-label-plusminus": "Sayfa boyutundaki deÄiÅikliÄin bayt bazında deÄeri",
- "recentchanges-legend-heading": "'''Gösterge:'''",
+ "recentchanges-legend-heading": "Gösterge: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca [[Special:NewPages|yeni sayfalar listesine]] bakınız)",
"recentchanges-submit": "Göster",
"rcnotefrom": "$3, $4 tarihinden itibaren yapılan {{PLURAL:$5|deÄiÅiklik|deÄiÅiklik}} aÅaÄıdadır ($1 tarhine kadar olanlar gösterilmektedir).",
@@ -1323,7 +1323,7 @@
"rcshowhidemine": "Benim deÄiÅikliklerimi $1",
"rcshowhidemine-show": "göster",
"rcshowhidemine-hide": "gizle",
- "rcshowhidecategorization": "$1 Sayfa kategorizasyonu",
+ "rcshowhidecategorization": "$1 sayfa kategorizasyonu",
"rcshowhidecategorization-show": "Göster",
"rcshowhidecategorization-hide": "Gizle",
"rclinks": "Son $2 günde yapılan son $1 deÄiÅikliÄi göster; $3",
@@ -1914,6 +1914,7 @@
"wlshowhideanons": "anonim kullanıcılar",
"wlshowhidepatr": "incelenmiÅ deÄiÅiklikler",
"wlshowhidemine": "deÄiÅikliklerim",
+ "wlshowhidecategorization": "sayfa kategorizasyonu",
"watchlist-options": "İzleme listesi seçenekleri",
"watching": "Ä°zleniyor...",
"unwatching": "Ä°zlenmiyor...",
diff --git a/languages/i18n/tt-cyrl.json b/languages/i18n/tt-cyrl.json
index 49be8ce301..cd81bf593f 100644
--- a/languages/i18n/tt-cyrl.json
+++ b/languages/i18n/tt-cyrl.json
@@ -996,7 +996,7 @@
"recentchanges-label-bot": "ÐÑ Ò¯Ð·Ð³ÓÑÑÒ¯ Ð±Ð¾Ñ Ð±ÐµÐ»Óн ÑÑлÓнгÓн",
"recentchanges-label-unpatrolled": "ҮзгÓÑÑүне ÓÐ»ÐµÐ³Ó ÑикÑеÑмÓгÓннÓÑ",
"recentchanges-label-plusminus": "ÐиÑнең зÑÑлÑÐ³Ñ ÑÑнÑÒ£ кадÓÑле байÑка үзгÓÑде",
- "recentchanges-legend-heading": "'''ÐңлаÑма: '''",
+ "recentchanges-legend-heading": "ÐңлаÑма: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ÑÑлай Ñк [[Special:NewPages|Ñңа биÑлÓÑ Ð¸Ñемлеген]] каÑагÑз)",
"recentchanges-submit": "ÐÒ¯ÑÑÓÑ",
"rcnotefrom": "ÐÑÑаÑак $3, $4 Ó©Ñен {{PLURAL:$5|үзгÓÑÑүлÓÑ ÐºÒ¯ÑÑÓÑелгÓн}} ($1 аÑÑÑк Ñүгел).",
@@ -1426,7 +1426,7 @@
"delete-edit-reasonlist": "СÓбÓплÓÑ Ð¸Ñемлеген үзгÓÑÑÒ¯",
"rollbacklink": "киÑе кайÑаÑÑ",
"rollbacklinkcount": "$1 {{PLURAL:$1|ÑөзÓÑмÓне}} киÑе кагÑ",
- "editcomment": "ҮзгÓÑÑÒ¯ Ó©Ñен ÑаÑвиÑ: $1 .",
+ "editcomment": "ҮзгÓÑÑүлÓÑ ÑаÑвиÑламаÑÑ: $1 .",
"revertpage": "[[Special:Contributions/$2|$2]] үзгÓÑÑүлÓÑе ([[User talk:$2|бÓÑ
ÓÑ]]) [[User:$1|$1]] ÑÑамаÑÑна кадÓÑ ÐºÐ¸Ñе кайÑаÑÑлдÑ",
"changecontentmodel-title-label": "ÐиÑнең иÑеме",
"changecontentmodel-reason-label": "СÓбÓп:",
diff --git a/languages/i18n/tt-latn.json b/languages/i18n/tt-latn.json
index ee4a7fc857..a78db9e8a0 100644
--- a/languages/i18n/tt-latn.json
+++ b/languages/i18n/tt-latn.json
@@ -800,7 +800,7 @@
"recentchanges-label-bot": "Bu üzgärtmä bot tarafınnan yasaldı",
"recentchanges-label-unpatrolled": "Bu üzgärtmä älegä raslanmaÄan",
"recentchanges-label-plusminus": "Bit zurlıÄınıñ baytlardaÄı üzgäreÅ",
- "recentchanges-legend-heading": "'''Añlatma:'''",
+ "recentchanges-legend-heading": "Añlatma: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Åulay uq [[Special:NewPages|yaña bitlär isemlegen]] qarap alıÄız)",
"rcnotefrom": "Astaraq '''$2''' baÅlap ('''$1''' qädär) üzgärtülär kürsätelgän.",
"rclistfrom": "$3 $2 baÅlap yaña üzgärtülärne kürsät",
diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json
index f36eb07061..2a586907fa 100644
--- a/languages/i18n/uk.json
+++ b/languages/i18n/uk.json
@@ -509,7 +509,7 @@
"nocookiesfornew": "ÐблÑковий Ð·Ð°Ð¿Ð¸Ñ ÐºÐ¾ÑиÑÑÑваÑа не бÑв ÑÑвоÑений ÑеÑез неможливÑÑÑÑ Ð¿ÐµÑевÑÑиÑи поÑ
Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
.\nÐеÑеконайÑеÑÑ, Ñо кÑки ввÑмкнено, оновÑÑÑ ÑÑоÑÑÐ½ÐºÑ Ñ ÑпÑобÑйÑе Ñе Ñаз.",
"nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "Ðи зазнаÑили непÑавилÑне Ñм'Ñ ÐºÐ¾ÑиÑÑÑваÑа.",
- "loginsuccesstitle": "УÑпÑÑний вÑ
Ñд до ÑиÑÑеми",
+ "loginsuccesstitle": "ÐÑ
Ñд виконано",
"loginsuccess": "'''Ð¢ÐµÐ¿ÐµÑ Ð²Ð¸ пÑаÑÑÑÑе в {{grammar:locative|{{SITENAME}}}} пÑд Ñменем $1.'''",
"nosuchuser": "ÐоÑиÑÑÑваÑа з Ñменем «$1» не ÑÑнÑÑ.\nÐ ÑменаÑ
коÑиÑÑÑваÑÑв ÑозÑÑзнÑÑÑÑÑÑ Ð²ÐµÐ»Ð¸ÐºÑ Ð¹ Ð¼Ð°Ð»Ñ Ñимволи.\nÐеÑевÑÑÑе пÑавилÑнÑÑÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð½Ñ Ð°Ð±Ð¾ ÑкоÑиÑÑайÑеÑÑ ÑоÑÐ¼Ð¾Ñ Ð½Ð¸Ð¶Ñе, Ñоб [[Special:UserLogin/signup|ÑÑвоÑиÑи новий облÑковий запиÑ]].",
"nosuchusershort": "ÐоÑиÑÑÑваÑа з Ñменем «$1» не ÑÑнÑÑ.\nÐеÑевÑÑÑе пÑавилÑнÑÑÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð½Ñ ÑменÑ.",
@@ -545,7 +545,7 @@
"createaccount-title": "СÑвоÑÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñкового запиÑÑ Ð´Ð»Ñ {{SITENAME}}",
"createaccount-text": "Ð¥ÑоÑÑ ÑÑвоÑив облÑковий Ð·Ð°Ð¿Ð¸Ñ Â«$2» на ÑеÑвеÑÑ Ð¿ÑоекÑÑ {{SITENAME}} ($4) з паÑолем «$3», зазнаÑивÑи ваÑÑ Ð°Ð´ÑеÑÑ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð¿Ð¾ÑÑи. Ðам ÑлÑд зайÑи Ñ Ð·Ð¼ÑниÑи паÑолÑ.\n\nÐгноÑÑйÑе дане повÑдомленнÑ, ÑкÑо облÑковий Ð·Ð°Ð¿Ð¸Ñ Ð±Ñло ÑÑвоÑено помилково.",
"login-throttled": "Ðи зÑобили надÑо багаÑо ÑпÑоб ввÑйÑи до ÑиÑÑеми.\nÐÑÐ´Ñ Ð»Ð°Ñка, заÑекайÑе $1 пеÑед повÑоÑÐ½Ð¾Ñ ÑпÑобоÑ.",
- "login-abort-generic": "Ðе вдалоÑÑ Ð²Ð²ÑйÑи до ÑиÑÑеми",
+ "login-abort-generic": "ÐÑ
Ñд Ñ ÑиÑÑÐµÐ¼Ñ Ð·Ð°Ð·Ð½Ð°Ð² невдаÑÑ â ÑкаÑовано",
"login-migrated-generic": "ÐÐ°Ñ Ð¾Ð±Ð»Ñковий Ð·Ð°Ð¿Ð¸Ñ Ð±Ñло пеÑенеÑено Ñ Ð²Ð°Ñе Ñм'Ñ ÐºÐ¾ÑиÑÑÑваÑа бÑлÑÑе не ÑÑнÑÑ Ð½Ð° ÑÑй вÑкÑ.",
"loginlanguagelabel": "Ðова: $1",
"suspicious-userlogout": "ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° завеÑÑÐµÐ½Ð½Ñ ÑеанÑÑ Ð²ÑдÑ
илений, оÑкÑлÑки вÑн ÑÑ
ожий на запиÑ, вÑдпÑавлений зÑпÑованим веб-оглÑдаÑем або кеÑÑÑÑим пÑокÑÑ-ÑеÑвеÑом.",
@@ -565,7 +565,7 @@
"newpassword": "Ðовий паÑолÑ:",
"retypenew": "Ще Ñаз введÑÑÑ Ð½Ð¾Ð²Ð¸Ð¹ паÑолÑ:",
"resetpass_submit": "ÐÑÑановиÑи паÑÐ¾Ð»Ñ Ñ Ð²Ð²ÑйÑи",
- "changepassword-success": "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ ÑÑпÑÑно змÑнено!",
+ "changepassword-success": "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±Ñло змÑнено!",
"changepassword-throttled": "Ðи неÑодавно зÑобили надÑо багаÑо ÑпÑоб ввÑйÑи до ÑиÑÑеми.\nÐÑÐ´Ñ Ð»Ð°Ñка, заÑекайÑе $1 пеÑед повÑоÑÐ½Ð¾Ñ ÑпÑобоÑ.",
"botpasswords": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾ÑÑв",
"botpasswords-summary": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа дозволÑÑÑÑ Ð¾ÑÑимаÑи доÑÑÑп до облÑкового запиÑÑ ÐºÐ¾ÑиÑÑÑваÑа ÑеÑез API без викоÑиÑÑÐ°Ð½Ð½Ñ Ð»Ð¾Ð³ÑÐ½Ñ Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð³Ð¾Ð»Ð¾Ð²Ð½Ð¾Ð³Ð¾ облÑкового запиÑÑ. ÐÑава коÑиÑÑÑваÑа пÑи вÑ
Ð¾Ð´Ñ Ð· паÑолем боÑа можÑÑÑ Ð±ÑÑи обмеженнÑ.\n\nЯкÑо ви не знаÑÑе, навÑÑо воно вам, ÑмовÑÑно, кÑаÑе ÑÑого не ÑобÑÑÑ. ÐÑÑ
Ñо нÑколи не повинен пÑоÑиÑи ваÑ, Ñоб ви ÑÑвоÑили Ñи повÑдомили Ñей паÑолÑ.",
@@ -588,11 +588,11 @@
"botpasswords-insert-failed": "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñи боÑа з Ñменем «$1». Ðожливо, вÑн вже бÑв доданий?",
"botpasswords-update-failed": "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñи боÑа з Ñменем «$1». Ðожливо, вÑн бÑв видалений?",
"botpasswords-created-title": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа ÑÑвоÑено",
- "botpasswords-created-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑв ÑÑпÑÑно ÑÑвоÑений.",
+ "botpasswords-created-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа з Ñм'Ñм «$1» коÑиÑÑÑваÑа «$2» бÑло ÑÑвоÑено.",
"botpasswords-updated-title": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа оновлено",
- "botpasswords-updated-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑв ÑÑпÑÑно оновлений.",
+ "botpasswords-updated-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа з Ñм'Ñм «$1» коÑиÑÑÑваÑа «$2» бÑло оновлено.",
"botpasswords-deleted-title": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа видалено",
- "botpasswords-deleted-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа «$1» бÑло видалено",
+ "botpasswords-deleted-body": "ÐаÑÐ¾Ð»Ñ Ð±Ð¾Ñа з Ñм'Ñм «$1» коÑиÑÑÑваÑа «$2» бÑло видалено",
"botpasswords-newpassword": "Ðовий паÑÐ¾Ð»Ñ Ð´Ð»Ñ Ð²Ñ
Ð¾Ð´Ñ Ð¿Ñд $1 â $2 . ÐапиÑÑÑÑ Ð¹Ð¾Ð³Ð¾ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð»ÑÑого викоÑиÑÑаннÑ. ",
"botpasswords-no-provider": "BotPasswordsSessionProvider не доÑÑÑпний.",
"botpasswords-restriction-failed": "ÐÑ
Ñд не бÑло здÑйÑнено ÑеÑез Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±Ð¾Ñа.",
@@ -602,7 +602,7 @@
"resetpass-no-info": "Щоб звеÑÑаÑиÑÑ Ð±ÐµÐ·Ð¿Ð¾ÑеÑеднÑо до ÑÑÑÑ ÑÑоÑÑнки, вам ÑлÑд ÑвÑйÑи до ÑиÑÑеми.",
"resetpass-submit-loggedin": "ÐмÑниÑи паÑолÑ",
"resetpass-submit-cancel": "СкаÑÑваÑи",
- "resetpass-wrong-oldpass": "ÐепÑавилÑний ÑимÑаÑовий або поÑоÑний паÑолÑ.\nÐожливо, ви вже ÑÑпÑÑно змÑнили паÑÐ¾Ð»Ñ Ð°Ð±Ð¾ зÑобили Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° новий ÑимÑаÑовий паÑолÑ.",
+ "resetpass-wrong-oldpass": "ÐепÑавилÑний ÑимÑаÑовий або поÑоÑний паÑолÑ.\nÐожливо, Ðи вже змÑнили паÑÐ¾Ð»Ñ Ð°Ð±Ð¾ зÑобили Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° новий ÑимÑаÑовий паÑолÑ.",
"resetpass-recycled": "ÐмÑнÑÑÑ ÑвÑй паÑÐ¾Ð»Ñ Ð½Ð° ÑоÑÑ ÑнÑе, нÑж Ð²Ð°Ñ Ð¿Ð¾ÑоÑний паÑолÑ.",
"resetpass-temp-emailed": "Ðи ввÑйÑли, викоÑиÑÑовÑÑÑи ÑимÑаÑовий паÑолÑ, Ñкий оÑÑимали елекÑÑÐ¾Ð½Ð½Ð¾Ñ Ð¿Ð¾ÑÑоÑ. \nÐÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð²Ñ
Ð¾Ð´Ñ Ð² ÑиÑÑÐµÐ¼Ñ Ð½ÐµÐ¾Ð±Ñ
Ñдно задаÑи новий паÑолÑ:",
"resetpass-temp-password": "ТимÑаÑовий паÑолÑ:",
@@ -887,9 +887,9 @@
"revdelete-unsuppress": "ÐнÑÑи Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð· вÑдновлениÑ
веÑÑÑй",
"revdelete-log": "ÐÑиÑина:",
"revdelete-submit": "ÐаÑÑоÑÑваÑи до {{PLURAL:$1|1=обÑÐ°Ð½Ð¾Ñ Ð²ÐµÑÑÑÑ|обÑаниÑ
веÑÑÑй}}",
- "revdelete-success": "'''ÐидимÑÑÑÑ Ð²ÐµÑÑÑÑ ÑÑпÑÑно змÑнена.'''",
+ "revdelete-success": "ÐидимÑÑÑÑ Ð²ÐµÑÑÑÑ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾.",
"revdelete-failure": "'''ÐидимÑÑÑÑ Ð²ÐµÑÑÑÑ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ змÑниÑи:'''\n$1",
- "logdelete-success": "'''ÐидимÑÑÑÑ Ð¿Ð¾Ð´ÑÑ ÑÑпÑÑно змÑнена.'''",
+ "logdelete-success": "ÐидимÑÑÑÑ Ð¿Ð¾Ð´ÑÑ Ð²ÑÑановлено.",
"logdelete-failure": "'''Ðе вдалоÑÑ Ð²ÑÑановиÑи видимÑÑÑÑ Ð¶ÑÑналÑ:'''\n$1",
"revdel-restore": "ÐмÑниÑи видимÑÑÑÑ",
"pagehist": "ÐÑÑоÑÑÑ ÑÑоÑÑнки",
@@ -1135,7 +1135,7 @@
"userrights-unchangeable-col": "ÐÑÑпи, ÑÐºÑ Ð²Ð¸ не можеÑе змÑниÑи",
"userrights-irreversible-marker": "$1*",
"userrights-conflict": "ÐонÑлÑÐºÑ Ð·Ð¼Ñни пÑав коÑиÑÑÑваÑа! ÐÑÐ´Ñ Ð»Ð°Ñка, пеÑевÑÑÑе Ñа пÑдÑвеÑдÑÑÑ Ð·Ð¼Ñни зновÑ.",
- "userrights-removed-self": "Ðи ÑÑпÑÑно позбавили Ñебе влаÑниÑ
пÑав. ЧеÑез Ñе Ðи бÑлÑÑе не маÑÑе доÑÑÑÐ¿Ñ Ð´Ð¾ ÑÑÑÑ ÑÑоÑÑнки.",
+ "userrights-removed-self": "Ðи позбавили Ñебе влаÑниÑ
пÑав. ЧеÑез Ñе Ðи бÑлÑÑе не маÑÑе доÑÑÑÐ¿Ñ Ð´Ð¾ ÑÑÑÑ ÑÑоÑÑнки.",
"group": "ÐÑÑпа:",
"group-user": "ÐоÑиÑÑÑваÑÑ",
"group-autoconfirmed": "ÐвÑопÑдÑвеÑÐ´Ð¶ÐµÐ½Ñ ÐºÐ¾ÑиÑÑÑваÑÑ",
@@ -1555,8 +1555,8 @@
"uploadstash-summary": "Ð¦Ñ ÑÑоÑÑнка Ð½Ð°Ð´Ð°Ñ Ð´Ð¾ÑÑÑп до ÑайлÑв, Ñо бÑли заванÑÐ°Ð¶ÐµÐ½Ñ (або заванÑажÑÑÑÑÑÑ Ð·Ð°Ñаз), але Ñе не бÑли опÑблÑÐºÐ¾Ð²Ð°Ð½Ñ Ð² вÑкÑ. Ð¦Ñ Ñайли не вÑдобÑажаÑÑÑÑÑ Ð½ÑкомÑ, кÑÑм коÑиÑÑÑваÑа, Ñо ÑÑ
заванÑажив.",
"uploadstash-clear": "ÐÑиÑÑиÑи ÑÑ
Ð¾Ð²Ð°Ð½Ñ Ñайли",
"uploadstash-nofiles": "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ ÑÑ
ованиÑ
ÑайлÑв.",
- "uploadstash-badtoken": "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñи Ð²ÐºÐ°Ð·Ð°Ð½Ñ Ð´ÑÑ. Ðожливо, виÑеÑпаний ÑеÑмÑн дÑÑ ÑеÑÑÑ ÑедагÑваннÑ. СпÑобÑйÑе Ñе Ñаз.",
- "uploadstash-errclear": "ÐÑиÑÐµÐ½Ð½Ñ ÑайлÑв не вдалоÑÑ.",
+ "uploadstash-badtoken": "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñи Ð²ÐºÐ°Ð·Ð°Ð½Ñ Ð´ÑÑ. Ðожливо, виÑеÑпаний ÑеÑмÑн дÑÑ ÑеÑÑÑ ÑедагÑваннÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, ÑпÑобÑйÑе Ñе Ñаз.",
+ "uploadstash-errclear": "ÐÑиÑÐµÐ½Ð½Ñ ÑайлÑв зазнало невдаÑÑ.",
"uploadstash-refresh": "ÐновиÑи ÑпиÑок ÑайлÑв",
"invalid-chunk-offset": "ÐепÑипÑÑÑимий зÑÑв ÑÑагменÑа",
"img-auth-accessdenied": "ÐÑдмовлено в доÑÑÑпÑ",
@@ -2070,12 +2070,14 @@
"changecontentmodel-title-label": "Ðазва ÑÑоÑÑнки",
"changecontentmodel-model-label": "Ðова Ð¼Ð¾Ð´ÐµÐ»Ñ Ð²Ð¼ÑÑÑÑ",
"changecontentmodel-reason-label": "ÐÑиÑина:",
+ "changecontentmodel-submit": "ÐмÑниÑи",
"changecontentmodel-success-title": "ÐÐ¾Ð´ÐµÐ»Ñ Ð²Ð¼ÑÑÑÑ Ð±Ñло змÑнено",
"changecontentmodel-success-text": "Тип вмÑÑÑÑ ÑÑоÑÑнки [[:$1]] бÑло змÑнено.",
"changecontentmodel-cannot-convert": "ÐмÑÑÑ ÑÑоÑÑнки [[:$1]] не можна пеÑеÑвоÑиÑи на вмÑÑÑ ÑÐ¸Ð¿Ñ $2.",
"changecontentmodel-nodirectediting": "ÐÐ¾Ð´ÐµÐ»Ñ Ð²Ð¼ÑÑÑÑ $1 не пÑдÑÑимÑÑ Ð¿ÑÑме ÑедагÑваннÑ",
"log-name-contentmodel": "ÐÑÑнал змÑн Ð¼Ð¾Ð´ÐµÐ»Ñ Ð²Ð¼ÑÑÑÑ",
"log-description-contentmodel": "ÐодÑÑ, пов'ÑÐ·Ð°Ð½Ñ Ð· моделÑми вмÑÑÑÑ ÑÑоÑÑнки",
+ "logentry-contentmodel-new": "$1 {{GENDER:$2|ÑÑвоÑив|ÑÑвоÑила}} ÑÑоÑÑÐ½ÐºÑ $3, викоÑиÑÑовÑÑÑи неÑÑандаÑÑÐ½Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð²Ð¼ÑÑÑÑ Â«$5»",
"logentry-contentmodel-change": "$1 {{GENDER:$2|змÑнив|змÑнила}} Ð¼Ð¾Ð´ÐµÐ»Ñ Ð²Ð¼ÑÑÑÑ ÑÑоÑÑнки $3 з «$4» на «$5»",
"logentry-contentmodel-change-revertlink": "вÑдкинÑÑи",
"logentry-contentmodel-change-revert": "вÑдкинÑÑи",
@@ -3435,7 +3437,7 @@
"tags-delete-not-allowed": "ÐÑÑки, визнаÑÐµÐ½Ñ ÑозÑиÑеннÑм, не можÑÑÑ Ð±ÑÑи вилÑÑенÑ, ÑкÑо ÑÑлÑки ÑозÑиÑÐµÐ½Ð½Ñ Ð½Ðµ дозволÑÑ Ñе окÑемо.",
"tags-delete-not-found": "ÐÑÑка «$1» не ÑÑнÑÑ.",
"tags-delete-too-many-uses": "ÐÑÑÐºÐ¾Ñ Â«$1» понад $2 {{PLURAL:$2|ÑедагÑваннÑ|ÑедагÑваннÑ|ÑедагÑванÑ}}, Ñ Ñе ознаÑаÑ, Ñо ÑÑ Ð½Ðµ можна вилÑÑиÑи.",
- "tags-delete-warnings-after-delete": "ÐÑÑÐºÑ Â«$1» бÑло ÑÑпÑÑно вилÑÑено, але {{PLURAL:$2|з'ÑвилиÑÑ ÑакÑ|1=з'ÑвилоÑÑ Ñаке}} попеÑедженнÑ:",
+ "tags-delete-warnings-after-delete": "ÐÑÑÐºÑ Â«$1» бÑло вилÑÑено, але {{PLURAL:$2|з'ÑвилоÑÑ Ñаке|з'ÑвилиÑÑ ÑакÑ}} попеÑедженнÑ:",
"tags-activate-title": "ÐкÑивÑваÑи мÑÑкÑ",
"tags-activate-question": "Ðи збиÑаÑÑеÑÑ Ð°ÐºÑивÑваÑи мÑÑÐºÑ Â«$1».",
"tags-activate-reason": "ÐÑиÑина:",
@@ -3474,7 +3476,7 @@
"tags-edit-reason": "ÐÑиÑина:",
"tags-edit-revision-submit": "ÐаÑÑоÑÑваÑи змÑни до {{PLURAL:$1|ÑÑÑÑ Ð²ÐµÑÑÑÑ|$1 веÑÑÑй}}",
"tags-edit-logentry-submit": "ÐаÑÑоÑÑваÑи змÑни до {{PLURAL:$1|ÑÑого жÑÑналÑного запиÑÑ|$1 жÑÑналÑниÑ
запиÑÑв}}",
- "tags-edit-success": "ÐмÑни ÑÑпÑÑно заÑÑоÑовано",
+ "tags-edit-success": "ÐмÑни заÑÑоÑовано.",
"tags-edit-failure": "Ðе вдалоÑÑ Ð·Ð°ÑÑоÑÑваÑи змÑни:\n$1",
"tags-edit-nooldid-title": "ÐекоÑекÑна ÑÑлÑова веÑÑÑÑ",
"tags-edit-nooldid-text": "Ðи або не вказали ÑÑлÑÐ¾Ð²Ñ Ð²ÐµÑÑÑÑ, до ÑÐºÐ¾Ñ Ð·Ð°Ð´ÑÑÑи ÑÑнкÑÑÑ, або вказали неÑÑнÑÑÑÑ Ð²ÐµÑÑÑÑ.",
diff --git a/languages/i18n/ur.json b/languages/i18n/ur.json
index 3ce29fca93..abceeb09f4 100644
--- a/languages/i18n/ur.json
+++ b/languages/i18n/ur.json
@@ -857,7 +857,7 @@
"recentchanges-label-bot": "اس ترÙ
ÛÙ
ک٠اÛÚ© رÙØ¨Û ÙÛ Ø§ÙجاÙ
دÛا ÛÛ",
"recentchanges-label-unpatrolled": "اس ترÙ
ÛÙ
Ú©Û Ø§Ø¨ تک Ù
راجعت ÙÛÛÚº Ú©Û Ú¯Ø¦Û",
"recentchanges-label-plusminus": "صÙØÛ Ú©Ø§ ØجÙ
تبدÛÙ Ø´Ø¯Û Ø¨ÙØاظ بائٹ Ù
Ùدار",
- "recentchanges-legend-heading": "'''اختÛارات'''",
+ "recentchanges-legend-heading": "اختÛارات ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ÙÛز [[Special:NewPages|جدÛد صÙØات Ú©Û ÙÛرست]]) Ù
ÙاØØ¸Û ÙرÙ
ائÛÚº",
"recentchanges-submit": "دکھائÛÚº",
"rcnotefrom": "Ø°ÛÙ Ù
ÛÚº $3, $4 Ø³Û Ú©Û Ú¯Ø¦Û {{PLURAL:$5|تبدÛÙÛ|تبدÛÙÛاں}} $1 تک Ø¯Ú©Ú¾Ø§Ø¦Û Ø¬Ø§ رÛÛ ÛÛÚºÛ",
diff --git a/languages/i18n/uz.json b/languages/i18n/uz.json
index 40d6018000..2a3c48fdf2 100644
--- a/languages/i18n/uz.json
+++ b/languages/i18n/uz.json
@@ -790,7 +790,7 @@
"recentchanges-label-bot": "Bu tahrirni bot bajargan",
"recentchanges-label-unpatrolled": "Bu tahrir hali tekshirilmagan",
"recentchanges-label-plusminus": "Sahifa vazni qanchaga oʻzgargani (bayt)",
- "recentchanges-legend-heading": "'''Izoh:'''",
+ "recentchanges-legend-heading": "Izoh: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|alohida roʻyxat]])",
"rcnotefrom": "Quyida $3, $4 dan keyin sodir boʻlgan oʻzgarishlar koʻrsatilgan (oxirgi $1 tasi).",
"rclistfrom": "$3, $2 dan keyin sodir boʻlgan oʻzgarishlarni koʻrsat",
diff --git a/languages/i18n/vec.json b/languages/i18n/vec.json
index cabec169a0..6358cec8a1 100644
--- a/languages/i18n/vec.json
+++ b/languages/i18n/vec.json
@@ -1060,7 +1060,7 @@
"recentchanges-label-bot": "Sta modifica el la ga fata un bot",
"recentchanges-label-unpatrolled": "Sta modifica no la xe stà gnancora verificà ",
"recentchanges-label-plusminus": "La dimension de la pagina la xe canbià de sto nùmaro de byte",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "Legenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
"rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
"rclistfrom": "Mostra i canbiamenti fati da Æe $2 del $3",
diff --git a/languages/i18n/vi.json b/languages/i18n/vi.json
index 3ac8d05d36..a3805fe312 100644
--- a/languages/i18n/vi.json
+++ b/languages/i18n/vi.json
@@ -474,7 +474,7 @@
"nocookieslogin": "{{SITENAME}} sá» dụng cookie Äá» ÄÄng nháºp thà nh viên. Bạn Äã tắt cookie. Xin hãy kÃch hoạt rá»i thá» lại.",
"nocookiesfornew": "Không thá» má» tà i khoản vì không thá» xác nháºn nguá»n yêu cầu nó.\nHãy chắc chắn bạn Äã báºt lên cookie, là m má»i trang nà y, và thá» lại.",
"noname": "ChÆ°a nháºp tên.",
- "loginsuccesstitle": "ÄÄng nháºp thà nh công",
+ "loginsuccesstitle": "Äã ÄÄng nháºp",
"loginsuccess": "'''Bạn Äã ÄÄng nháºp và o {{SITENAME}} vá»i tên â$1â.'''",
"nosuchuser": "Không có thà nh viên nà o có tên â$1â.\nTên ngÆ°á»i dùng có phân biá»t chữ hoa chữ thÆ°á»ng.\nHãy kiá»m tra lại chÃnh tả, hoặc [[Special:UserLogin/signup|má» tà i khoản má»i]].",
"nosuchusershort": "Không có thà nh viên nà o có tên â$1â. Xin hãy kiá»m tra lại chÃnh tả.",
@@ -510,7 +510,7 @@
"createaccount-title": "Tà i khoản má»i tại {{SITENAME}}",
"createaccount-text": "Ai Äó Äã tạo má»t tà i khoản vá»i tên $2 tại {{SITENAME}} ($4). Máºt khẩu của â$2â là â$3â. Bạn nên ÄÄng nháºp và Äá»i máºt khẩu ngay bây giá».\n\nXin hãy bá» qua thông Äiá»p nà y nếu tà i khoản nà y không phải do bạn tạo ra.",
"login-throttled": "Bạn Äã hết quyá»n thá» máºt khẩu tà i khoản nà y vì bạn Äã nháºp sai quá nhiá»u. Xin hãy Äợi $1 rá»i hãy thá» lại.",
- "login-abort-generic": "Thất bại khi ÄÄng nháºp",
+ "login-abort-generic": "ÄÄng nháºp của bạn không thà nh công - bá» hủy bá»",
"login-migrated-generic": "Tà i khoản của bạn Äã Äược hợp nhất, và tên ÄÄng nháºp của bạn không còn tá»n tại trên wiki nà y.",
"loginlanguagelabel": "Ngôn ngữ: $1",
"suspicious-userlogout": "Äã bá» qua yêu cầu ÄÄng xuất bạn, hình nhÆ° Äược gá»i từ trình duyá»t hoặc máy proxy nhá» Äá»m hÆ°.",
@@ -530,7 +530,7 @@
"newpassword": "Máºt khẩu má»i:",
"retypenew": "Gõ lại:",
"resetpass_submit": "Chá»n máºt khẩu và ÄÄng nháºp",
- "changepassword-success": "Äã Äá»i máºt khẩu thà nh công!",
+ "changepassword-success": "Máºt khẩu của bạn Äã Äược thay Äá»i.",
"changepassword-throttled": "Bạn Äã thá» ÄÄng nháºp gần Äây nhiá»u lần quá. Xin chá» $1 trÆ°á»c khi bạn thá» lần nữa.",
"botpasswords": "Máºt khẩu Bot",
"botpasswords-disabled": "Máºt khẩu Bot bá» vô hiá»u hoá.",
@@ -1774,6 +1774,7 @@
"apisandbox-dynamic-error-exists": "Má»t tham sá» có tên \"$1\" Äã tá»n tại.",
"apisandbox-fetch-token": "Tá»± Äá»ng Äiá»n token nà y",
"apisandbox-submit-invalid-fields-title": "Má»t sá» field là không hợp lá»",
+ "apisandbox-submit-invalid-fields-message": "Xin vui lòng sá»a các miá»n Äược Äánh dấu và thá» lại.",
"apisandbox-results": "Kết quả",
"apisandbox-sending-request": "Äang gá»i yêu cầu API...",
"apisandbox-loading-results": "Nháºn kết quả API...",
@@ -1781,6 +1782,7 @@
"apisandbox-request-url-label": "URL của yêu cầu:",
"apisandbox-request-time": "Thá»i gian yêu cầu: {{PLURAL:$1|$1 ms}}",
"apisandbox-alert-page": "Các miá»n trên Trang nà y là không hợp lá».",
+ "apisandbox-alert-field": "Giá trá» của miá»n nà y là không hợp lá».",
"booksources": "Nguá»n sách",
"booksources-search-legend": "Tìm kiếm nguá»n sách",
"booksources-search": "Tìm kiếm",
diff --git a/languages/i18n/vro.json b/languages/i18n/vro.json
index 1b7d1a08f5..afd8d8d996 100644
--- a/languages/i18n/vro.json
+++ b/languages/i18n/vro.json
@@ -807,7 +807,7 @@
"recentchanges-label-bot": "Seo muutmisõ tekk' robot",
"recentchanges-label-unpatrolled": "Seod muutmist olõ-õi viil üle kaet",
"recentchanges-label-plusminus": "Lehe suurusõ muutus baidõn",
- "recentchanges-legend-heading": "'''Seletüs:'''",
+ "recentchanges-legend-heading": "Seletüs: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kaeq ka [[Special:NewPages|vahtsidõ lehti nimekirjä]])",
"rcnotefrom": "Tan ommaq muutmisõq kuupääväst '''$2''' pääle (näüdätäs kooniq '''$1''' muutmist).",
"rclistfrom": "Näütäq muutmiisi kuupääväst $3 $2 pääle",
diff --git a/languages/i18n/war.json b/languages/i18n/war.json
index 2d4673a166..61255566ae 100644
--- a/languages/i18n/war.json
+++ b/languages/i18n/war.json
@@ -1034,7 +1034,7 @@
"recentchanges-label-bot": "Ini nga pagliwat in ginbuhat han bot",
"recentchanges-label-unpatrolled": "Ini nga pagliwat in diri pa nakapatrol",
"recentchanges-label-plusminus": "An kadako han pakli in nabag-o hin ini nga numero nga mga byte",
- "recentchanges-legend-heading": "'''Leyenda:'''",
+ "recentchanges-legend-heading": "Leyenda: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaa gihapon [[Special:NewPages|talaan han mga bag-o nga pakli]])",
"recentchanges-submit": "Pakit-a",
"rcnotefrom": "An ha ubos in mga pagbabag-o tikang han $2 (kutob ngadto ha $1 nga ginpakita).",
diff --git a/languages/i18n/wo.json b/languages/i18n/wo.json
index 3b8fbbb5e0..36cf7d0096 100644
--- a/languages/i18n/wo.json
+++ b/languages/i18n/wo.json
@@ -858,7 +858,7 @@
"recentchanges-label-bot": "Coppite bu ab bot def",
"recentchanges-label-unpatrolled": "Coppite bii kenn fugloogu ko",
"recentchanges-label-plusminus": "Dayoob xët wi soppeeku na ci lu ni toll ciy byte.",
- "recentchanges-legend-heading": "'''Piri:'''",
+ "recentchanges-legend-heading": "Piri: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (wone itam [[Special:NewPages|limu xët yu bees yi]]) -",
"rcnotefrom": "Yii ñooy coppite yi dalee '''$2''' (ba '''$1''').",
"rclistfrom": "Wone coppite yi mujj yi dooree $3 $2",
diff --git a/languages/i18n/wuu.json b/languages/i18n/wuu.json
index 65d5bdb418..0f153518ba 100644
--- a/languages/i18n/wuu.json
+++ b/languages/i18n/wuu.json
@@ -1037,7 +1037,7 @@
"recentchanges-label-bot": "ç®ç¼è¾ç±æºå¨äººæ§è¡",
"recentchanges-label-unpatrolled": "该ç¼è¾è¿æå·¡æ¥",
"recentchanges-label-plusminus": "ç®é¡µé¢åèæ°åå个åå",
- "recentchanges-legend-heading": "'''说æï¼'''",
+ "recentchanges-legend-heading": "说æï¼ ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}ï¼è§[[Special:NewPages|æ°é¡µé¢å表]]ï¼",
"rclistfrom": "æ¾ç¤º $3 $2 以æ¥ä¸ªæ°æ¹å¨",
"rcshowhideminor": "$1å°ç¼å",
diff --git a/languages/i18n/xmf.json b/languages/i18n/xmf.json
index 02024b8ffb..bc98445479 100644
--- a/languages/i18n/xmf.json
+++ b/languages/i18n/xmf.json
@@ -1131,7 +1131,7 @@
"recentchanges-label-bot": "áá á áááá¥á¢áá áá¤á ááá¢áᨠááá¦ááááá á á",
"recentchanges-label-unpatrolled": "áá á áááá¥á¢áá áá¤á ááá á®ááá áá á á ááá¢á á£ááá áá¤áá á",
"recentchanges-label-plusminus": "ááá áá¤áá¤áᨠáá·áá áááá¢áá¤á¡",
- "recentchanges-legend-heading": "'''ááááááá:'''",
+ "recentchanges-legend-heading": "ááááááá: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ááá¨ááá¨á á¥áá«áá áá [[Special:NewPages|áá®áá á®áá¡á·ááá¤áᨠáá áááá£áá]])",
"rcnotefrom": "á¥ááááá {{PLURAL:$5|ááá©ááááááá áªááááááá|ááá©ááááááá áªááááááááá}} $3, $4 -ááá (ááá©ááááááá áá áá£ááá¢áá¡ $1 ).",
"rclistfrom": "áá®áá ááá áá¤áá¤áᨠá«áá áá¤á áááá§áá¤áá $3 $2-á¨á",
diff --git a/languages/i18n/yi.json b/languages/i18n/yi.json
index 4054ec06bc..d5f577682f 100644
--- a/languages/i18n/yi.json
+++ b/languages/i18n/yi.json
@@ -1200,7 +1200,7 @@
"recentchanges-label-bot": "×× ×¨×¢××ַק××ר×× × ××× ×××ס×עפ××¨× × ×××",
"recentchanges-label-unpatrolled": "×× ×¨×¢××ק××ר×× × ××× × ×× × ××©× × ×××עק×ק×",
"recentchanges-label-plusminus": "×××× ×ר××ס ××¢×¢× ××¢×¨× ××× ×ער צ×× ×××××",
- "recentchanges-legend-heading": "'''××¢××¢× ××¢:'''",
+ "recentchanges-legend-heading": "××¢××¢× ××¢: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (××¢× ×××× [[Special:NewPages|×× ×¨×©××× ×¤×× × ×××¢ ×××¢×ער]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "××××××",
diff --git a/languages/i18n/yo.json b/languages/i18n/yo.json
index 174f9ddbd7..91af0cee53 100644
--- a/languages/i18n/yo.json
+++ b/languages/i18n/yo.json
@@ -1038,7 +1038,7 @@
"recentchanges-label-bot": "Rá»Ìbá»Ìá»Ìtì ni ó á¹£e à túná¹£e yìÃ",
"recentchanges-label-unpatrolled": "Ãtúná¹£e yìà kò tà ì jáº¹Ì onÃsÃá¹£á»Ì",
"recentchanges-label-plusminus": "Iye bytes à túnṣe sà ìtóbi ojúewé",
- "recentchanges-legend-heading": "'''Ãtumá»Ì:'''",
+ "recentchanges-legend-heading": "Ãtumá»Ì: ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ẹ tún wo [[Special:NewPages|à tòjá» Ã wá»n ojúewé tuntun]])",
"rcnotefrom": "Ãwá»n à túná¹£e láti ''''$2''' (tÃtà dé '''$1''' hà n) lábẹÌ.",
"rclistfrom": "Ãfihà n à wá»n à túná¹£e tuntun nÃpa bÃbẹÌráº¹Ì láti $3 $2",
diff --git a/languages/i18n/yue.json b/languages/i18n/yue.json
index 57c9a118c9..6d63e20cb0 100644
--- a/languages/i18n/yue.json
+++ b/languages/i18n/yue.json
@@ -1189,7 +1189,7 @@
"recentchanges-label-bot": "å¢æ¬¡ç·¨è¼¯ä¿ç±æ©æ¢°äººé²è¡",
"recentchanges-label-unpatrolled": "å¢æ¬¡ç·¨è¼¯éæªå·¡æ¥é",
"recentchanges-label-plusminus": "é é¢ä½å
çµå¤§ç´°è®å",
- "recentchanges-legend-heading": "'''æ¨è¨ï¼'''",
+ "recentchanges-legend-heading": "æ¨è¨ï¼ ",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ï¼çå[[Special:NewPages|æ°éç]]ï¼",
"recentchanges-submit": "顯示",
"rcnotefrom": "ä¸é¢å
{{PLURAL:$5|æ¹å}}ç± $3 $4 éå§ï¼é¡¯ç¤ºå°'''$1'''ï¼ã",
diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json
index fdbc766981..4b4a024b8e 100644
--- a/languages/i18n/zh-hans.json
+++ b/languages/i18n/zh-hans.json
@@ -231,6 +231,7 @@
"moredotdotdot": "æ´å¤...",
"morenotlisted": "æ¬å表ä¸å®æ´ã",
"mypage": "页é¢",
+ "anonuserpage": "æªç¥ç¨æ·",
"mytalk": "讨论",
"anontalk": "讨论",
"navigation": "导èª",
@@ -530,7 +531,7 @@
"nocookieslogin": "{{SITENAME}}使ç¨Cookieå®ç°ç¨æ·ç»å½ãæ¨å·²åç¨Cookieã请å¯ç¨Cookieååè¯ã",
"nocookiesfornew": "该ç¨æ·è´¦æ·æªè¢«å建ï¼æ们ä¸è½ç¡®è®¤å®çæ¥æºã请确ä¿ä½ å·²å¯ç¨Cookieï¼å·æ°æ¬é¡µååè¯ã",
"noname": "æªæå®ææçç¨æ·åã",
- "loginsuccesstitle": "ç»å½æå",
+ "loginsuccesstitle": "å·²ç»å½",
"loginsuccess": "æ¨ç°å¨å·²ç»ä»¥\"$1\"ç身份ç»å½äº{{SITENAME}}ã ",
"nosuchuser": "没æå为â$1âçç¨æ·ãç¨æ·ååºå大å°åã请æ£æ¥ä½ çæ¼åæ[[Special:UserLogin/signup|å建æ°è´¦æ·]]ã",
"nosuchusershort": "没æå为â$1âçç¨æ·ã请æ£æ¥ä½ çæ¼åã",
@@ -566,7 +567,7 @@
"createaccount-title": "å¨{{SITENAME}}å建æ°è´¦æ·",
"createaccount-text": "æ人å¨{{SITENAME}}ä¸å©ç¨æ¨çé®ç®±å建äºä¸ä¸ªå为 \"$2\" çæ°å¸æ·ï¼$4ï¼ï¼å¯ç æ¯ \"$3\" ãæ¨åºè¯¥ç«å³ç»å½å¹¶æ´æ¹å¯ç ã\n\nå¦æ该账æ·å建é误çè¯ï¼æ¨å¯ä»¥å¿½ç¥æ¤ä¿¡æ¯ã",
"login-throttled": "ä½ æè¿å°è¯ç»å½ç次æ°è¿å¤ã请çå¾
$1ååè¯ã",
- "login-abort-generic": "ç»å½å¤±è´¥ - å·²ç»æ¢",
+ "login-abort-generic": "æ¨çç»å½å¤±è´¥ - å·²ç»æ¢",
"login-migrated-generic": "æ¨çè´¦æ·å·²è¢«è¿ç§»ï¼å¹¶ä¸æ¨çç¨æ·åå¨æ¤wikiä¸ååå¨ã",
"loginlanguagelabel": "è¯è¨ï¼$1",
"suspicious-userlogout": "注é请æ±è¢«æç»ï¼å 为å®ä¼¼ä¹æ¯ç±æ设计缺é·çæµè§å¨æç¼å代çååºçã",
@@ -609,11 +610,11 @@
"botpasswords-insert-failed": "æ æ³æ·»å æºå¨äººåâ$1âãå®æ¯å¦å·²æ·»å ï¼",
"botpasswords-update-failed": "æ æ³æ´æ°æºå¨äººåâ$1âãå®æ¯å¦å·²å é¤ï¼",
"botpasswords-created-title": "æºå¨äººå¯ç å·²å建",
- "botpasswords-created-body": "æºå¨äººå¯ç â$1âå·²æåæ´æ°ã",
+ "botpasswords-created-body": "ç¨äºç¨æ·â$2âçæºå¨äººå称â$1âçæºå¨äººå¯ç å·²å建ã",
"botpasswords-updated-title": "æºå¨äººå¯ç å·²æ´æ°",
- "botpasswords-updated-body": "æºå¨äººå¯ç â$1âå·²æåæ´æ°ã",
+ "botpasswords-updated-body": "ç¨äºç¨æ·â$2âçæºå¨äººå称â$1âçæºå¨äººå¯ç å·²æ´æ°ã",
"botpasswords-deleted-title": "æºå¨äººå¯ç å·²å é¤",
- "botpasswords-deleted-body": "æºå¨äººå¯ç â$1âå·²å é¤ã",
+ "botpasswords-deleted-body": "ç¨äºç¨æ·â$2âçæºå¨äººå称â$1âçæºå¨äººå¯ç å·²å é¤ã",
"botpasswords-newpassword": "ç¨äºç»å½$1 çæ°å¯ç æ¯$2 ã请记ä½å®ä»¥å¤ä»ååèã ",
"botpasswords-no-provider": "BotPasswordsSessionProviderä¸å¯ç¨ã",
"botpasswords-restriction-failed": "æºå¨äººå¯ç éå¶é»æ¢æ¤æ¬¡ç»å½ã",
@@ -907,9 +908,9 @@
"revdelete-unsuppress": "å¨å·²æ¢å¤ççæ¬ä¸ç§»é¤éå¶",
"revdelete-log": "åå ï¼",
"revdelete-submit": "åºç¨äºéä¸ç{{PLURAL:$1|çæ¬}}",
- "revdelete-success": "çæ¬å¯è§æ§æ´æ°æåã",
+ "revdelete-success": "çæ¬å¯è§æ§å·²æ´æ°ã",
"revdelete-failure": "çæ¬å¯è§æ§æ æ³æ´æ°ï¼\n$1",
- "logdelete-success": "äºä»¶çå¯è§æ§å·²ç»æå设置ã",
+ "logdelete-success": "æ¥å¿å¯è§æ§å·²è®¾ç½®ã",
"logdelete-failure": "äºä»¶çå¯è§æ§æ æ³è®¾ç½®ï¼\n$1",
"revdel-restore": "æ´æ¹å¯è§æ§",
"pagehist": "页é¢åå²",
@@ -1152,7 +1153,7 @@
"userrights-changeable-col": "æ¨å¯ä»¥æ´æ¹çç¨æ·ç»",
"userrights-unchangeable-col": "æ¨ä¸è½æ´æ¹çç¨æ·ç»",
"userrights-conflict": "ç¨æ·æéçæ´æ¹åå¨å²çªï¼è¯·æ£æ¥å¹¶ç¡®è®¤æ¨çæ´æ¹ã",
- "userrights-removed-self": "æ¨å·²æåå é¤æ¨èªå·±çæå©ãå æ¤ï¼æ¨ä¸åè½å¤è®¿é®æ¤é¡µã",
+ "userrights-removed-self": "æ¨å·²å é¤æ¨èªå·±çæå©ãå æ¤ï¼æ¨ä¸åè½å¤è®¿é®æ¤é¡µã",
"group": "ç¨æ·ç»ï¼",
"group-user": "ç¨æ·",
"group-autoconfirmed": "èªå¨ç¡®è®¤ç¨æ·",
@@ -1570,8 +1571,8 @@
"uploadstash-summary": "è¿ä¸ªé¡µé¢æä¾å·²ç»ä¸ä¼ ï¼æè
ä¸ä¼ ä¸ï¼ä½æªåå¸å°wikiä¹æ件ååãè¿äºæ件é¤äºä¸ä¼ çç¨æ·ä¹å¤ä¸ä¼è¢«å
¶ä»äººå¯è§ã",
"uploadstash-clear": "æ¸
é¤è´®èæ件",
"uploadstash-nofiles": "æ¨æ²¡æ被éèçæ件ã",
- "uploadstash-badtoken": "该æä½æ§è¡å¤±è´¥ï¼å¯è½æ¯å ä¸ºä½ çç¼è¾åè¯å·²è¿æã请éè¯ã",
- "uploadstash-errclear": "æ¸
é¤æ件ä¸æåã",
+ "uploadstash-badtoken": "æ§è¡å¯¹åºæä½å¤±è´¥ãå¯è½æ¯å 为æ¨çç¼è¾åè¯å·²è¿æã请éè¯ã",
+ "uploadstash-errclear": "æ¸
é¤æ件失败ã",
"uploadstash-refresh": "æ´æ°æ件å表",
"invalid-chunk-offset": "æ æåºåå移é",
"img-auth-accessdenied": "æç»è®¿é®",
@@ -2082,12 +2083,14 @@
"changecontentmodel-title-label": "页é¢æ é¢",
"changecontentmodel-model-label": "æ°çå
容模å",
"changecontentmodel-reason-label": "åå ï¼",
+ "changecontentmodel-submit": "æ´æ¹",
"changecontentmodel-success-title": "å
容模åå·²æ´æ¹",
"changecontentmodel-success-text": "[[:$1]]çå
容类å被æ´æ¹ã",
"changecontentmodel-cannot-convert": "[[:$1]]ä¸çå
容ä¸è½è½¬æ¢ä¸º$2çä¸ä¸ªç±»åã",
"changecontentmodel-nodirectediting": "$1å
容模åä¸æ¯æç´æ¥ç¼è¾",
"log-name-contentmodel": "å
容模åæ´æ¹æ¥å¿",
"log-description-contentmodel": "ä¸ä¸ä¸ªé¡µé¢çå
容模åç¸å
³çæ´»å¨",
+ "logentry-contentmodel-new": "$1已使ç¨éé»è®¤çå
容模åâ$5â{{GENDER:$2|å建}}页é¢$3",
"logentry-contentmodel-change": "$1å°é¡µé¢$3çå
容模åä»â$4â{{GENDER:$2|æ´æ¹}}为â$5â",
"logentry-contentmodel-change-revertlink": "åé",
"logentry-contentmodel-change-revert": "åé",
@@ -2519,7 +2522,7 @@
"javascripttest-pagetext-skins": "éæ©å¤è§æ¥è¿è¡æµè¯ï¼",
"javascripttest-qunit-intro": "请è§mediawiki.orgç[$1 æµè¯è¯´ææ件]ã",
"tooltip-pt-userpage": "{{GENDER:|æ¨çç¨æ·}}页",
- "tooltip-pt-anonuserpage": "ä½ ç¨äºç¼è¾çIPå°åçç¨æ·é¡µé¢",
+ "tooltip-pt-anonuserpage": "æ¨ç¨äºç¼è¾çIPå°åçç¨æ·é¡µé¢",
"tooltip-pt-mytalk": "{{GENDER:|æ¨}}ç讨论页é¢",
"tooltip-pt-anontalk": "æå
³æ¬IPå°åçç¼è¾ç讨论",
"tooltip-pt-preferences": "{{GENDER:|æ¨}}ç设置",
@@ -3339,7 +3342,7 @@
"tags-delete-not-allowed": "æ©å±å®ä¹çæ ç¾ä¸è½è¢«å é¤ï¼é¤é该æ©å±æç¡®å
许ã",
"tags-delete-not-found": "æ ç¾â$1âä¸åå¨ã",
"tags-delete-too-many-uses": "â$1âæ ç¾å·²åºç¨å°è¶
è¿$2个修订çæ¬ï¼è¿æå³çå®ä¸è½è¢«å é¤ã",
- "tags-delete-warnings-after-delete": "æ ç¾â$1âå·²æåå é¤ï¼ä½éå°äºä»¥ä¸{{PLURAL:$2|è¦å}}ï¼",
+ "tags-delete-warnings-after-delete": "æ ç¾â$1âå·²å é¤ï¼ä½éå°äºä»¥ä¸{{PLURAL:$2|è¦å}}ï¼",
"tags-activate-title": "æ¿æ´»æ ç¾",
"tags-activate-question": "æ¨å°è¦æ¿æ´»æ ç¾â$1âã",
"tags-activate-reason": "åå ï¼",
@@ -3378,7 +3381,7 @@
"tags-edit-reason": "åå ï¼",
"tags-edit-revision-submit": "å°æ´æ¹åºç¨è³{{PLURAL:$1|æ¤|$1个}}修订çæ¬",
"tags-edit-logentry-submit": "å°æ´æ¹åºç¨è³{{PLURAL:$1|æ¤æ¥å¿è®°å½|$1个æ¥å¿è®°å½}}",
- "tags-edit-success": "æ´æ¹å·²æååºç¨ã",
+ "tags-edit-success": "æ´æ¹å·²åºç¨ã",
"tags-edit-failure": "æ´æ¹æ æ³è¢«åºç¨ï¼\n$1",
"tags-edit-nooldid-title": "æ æç®æ çæ¬",
"tags-edit-nooldid-text": "æ¨å°æªæå®ä»»ä½è¦æ§è¡æ¤åè½çç®æ çæ¬ï¼æè
ææå®ççæ¬ä¸åå¨ã",
diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json
index 3c4b6e89af..66010b2a78 100644
--- a/languages/i18n/zh-hant.json
+++ b/languages/i18n/zh-hant.json
@@ -68,7 +68,8 @@
"è",
"Jasonzhuocn",
"Bowleerin",
- "é£èåå å"
+ "é£èåå å",
+ "Bbslam"
]
},
"tog-underline": "åºç·æ¨ç¤ºé£çµï¼",
@@ -563,7 +564,7 @@
"newpassword": "æ°å¯ç¢¼ï¼",
"retypenew": "éæ°è¼¸å
¥æ°å¯ç¢¼ï¼",
"resetpass_submit": "è¨å®å¯ç¢¼ä¸¦ç»å
¥",
- "changepassword-success": "æ¨çå¯ç¢¼å·²è®æ´æåï¼",
+ "changepassword-success": "æ¨çå¯ç¢¼å·²ç¶è®æ´ï¼",
"changepassword-throttled": "æ¨æè¿å試äºå¤ªå¤æ¬¡ç»å
¥ã\nè«çå¾
$1 å¾å試ã",
"botpasswords": "æ©å¨äººå¯ç¢¼",
"botpasswords-summary": "æ©å¨äººå¯ç¢¼ å¯å¨ä¸é帳èç主è¦ç»å
¥å¯ç¢¼æ
æ³ä¸ï¼å
許éé API åå使ç¨è
帳èã å¯éå¶ä½¿ç¨æ©å¨äººå¯ç¢¼ç»å
¥ç使ç¨è
æ¬éã\n\nè¥å¨å°ç¡æ³äºè§£çºä½è¦è¨å®æ©å¨äººå¯ç¢¼ä¹åä¸æ使ç¨æ¤åè½ã ä¸ä¸è©²æä»»ä½äººæåæ¨ç´¢åæ©å¨äººå¯ç¢¼ã",
@@ -586,9 +587,9 @@
"botpasswords-insert-failed": "æ°å¢æ©å¨äººå稱 \"$1\" 失æï¼æ¯å¦å·²æ°å¢éï¼",
"botpasswords-update-failed": "æ´æ°æ©å¨äººå稱 \"$1\" 失æï¼æ¯å¦å·²åªé¤éï¼",
"botpasswords-created-title": "已建ç«æ©å¨äººå¯ç¢¼",
- "botpasswords-created-body": "æ©å¨äººå¯ç¢¼ \"$1\" 已建ç«æåã",
+ "botpasswords-created-body": "æ©å¨äººå¯ç¢¼ \"$1\" 已建ç«ã",
"botpasswords-updated-title": "å·²æ´æ°æ©å¨äººå¯ç¢¼",
- "botpasswords-updated-body": "æ©å¨äººå¯ç¢¼ \"$1\" 已修æ¹æåã",
+ "botpasswords-updated-body": "æ©å¨äººå¯ç¢¼ \"$1\" 已修æ¹ã",
"botpasswords-deleted-title": "å·²åªé¤æ©å¨äººå¯ç¢¼",
"botpasswords-deleted-body": "æ©å¨äººå¯ç¢¼ \"$1\" å·²åªé¤ã",
"botpasswords-newpassword": "ç¨ä¾ç»å
¥ $1 çæ°å¯ç¢¼çº $2 ã è«è¨éæ¤å¯ç¢¼ä»¥ä¾æªä¾åè使ç¨ã ",
@@ -600,7 +601,7 @@
"resetpass-no-info": "æ¨å¿
é ç´æ¥ç»å
¥ååéåé é¢ã",
"resetpass-submit-loggedin": "è®æ´å¯ç¢¼",
"resetpass-submit-cancel": "åæ¶",
- "resetpass-wrong-oldpass": "ç¡æçè¨ææç¾æå¯ç¢¼ã\næ¨å¯è½æ©å·²æåå°è®æ´äºå¯ç¢¼ï¼æè
å·²ç¶è«æ±ä¸åæ°çè¨æå¯ç¢¼ã",
+ "resetpass-wrong-oldpass": "ç¡æçè¨ææç¾æå¯ç¢¼ã\næ¨å¯è½å·²ç¶è®æ´äºå¯ç¢¼ï¼æè
å·²ç¶è«æ±ä¸åæ°çè¨æå¯ç¢¼ã",
"resetpass-recycled": "è«éè¨æ¨çå¯ç¢¼çºä¸åèç®åä¸åçå¯ç¢¼ã",
"resetpass-temp-emailed": "æ¨ä½¿ç¨è¨æé»åéµä»¶å³éç代碼ç»å
¥ã\nè¦å®æç»å
¥ï¼æ¨å¿
é å¨é裡è¨å®ä¸åæ°å¯ç¢¼ï¼",
"resetpass-temp-password": "è¨æå¯ç¢¼ï¼",
@@ -618,7 +619,7 @@
"passwordreset-capture": "檢è¦é»åéµä»¶å
§å®¹ï¼",
"passwordreset-capture-help": "è¥æ¨å¾é¸æ¤æ ¸é¸æ¹å¡ï¼é»åéµä»¶ (å
å«è¨æå¯ç¢¼) å°ç´æ¥é¡¯ç¤ºï¼ä¸¦å¯çµ¦ä½¿ç¨è
ã",
"passwordreset-email": "é»åéµä»¶å°åï¼",
- "passwordreset-emailtitle": "{{SITENAME}} ç帳è詳細è³æ",
+ "passwordreset-emailtitle": "å¨ {{SITENAME}} ç帳è詳細è³æ",
"passwordreset-emailtext-ip": "ä¸æ人士 (å¯è½æ¯æ¨èªå·±ï¼ä¾èª IP ä½å $1) è¦æ±éè¨å¨ {{SITENAME}} ($4) çå¯ç¢¼ï¼ä¸åæ¯èæ¤é»åéµä»¶å°åæéç使ç¨è
{{PLURAL:$3|帳è}}ï¼\n\n$2\n\n{{PLURAL:$3|éåè¨æå¯ç¢¼|éäºè¨æå¯ç¢¼}}å°æå¨{{PLURAL:$5|ä¸å¤©|$5 天}}å
§å°æï¼\næ¨æç«å³ç»å
¥ä¸¦æ´æ¹æ°çå¯ç¢¼ãå¦æä¸æ¯æ¨è¦æ±éè¨å¯ç¢¼ï¼ææ¨å·²æ³èµ·å¯ç¢¼ï¼ä¸¦ä¸æºåä¿®æ¹ï¼\næ¨å¯ä»¥å¿½ç¥æ¬è¨æ¯ä¸¦ä¸ç¹¼çºä½¿ç¨æ¨åæ¬çå¯ç¢¼ã",
"passwordreset-emailtext-user": "使ç¨è
$1 è¦æ±éè¨å¨ {{SITENAME}} ($4) çå¯ç¢¼ï¼ä¸åæ¯èæ¤é»åéµä»¶ä½åæéç使ç¨è
{{PLURAL:$3|帳è}}ï¼\n\n$2\n\n{{PLURAL:$3|éåè¨æå¯ç¢¼|éäºè¨æå¯ç¢¼}}å°æå¨{{PLURAL:$5|ä¸å¤©|$5 天}}å
§å°æï¼\næ¨æç«å³ç»å
¥ä¸¦æ´æ¹æ°çå¯ç¢¼ãå¦æä¸æ¯æ¨è¦æ±éè¨å¯ç¢¼ï¼ææ¨å·²æ³èµ·å¯ç¢¼ï¼ä¸¦ä¸æºåä¿®æ¹ï¼\næ¨å¯ä»¥å¿½ç¥æ¤è¨æ¯ä¸¦ä¸ç¹¼çºä½¿ç¨æ¨åæ¬çå¯ç¢¼ã",
"passwordreset-emailelement": "使ç¨è
å稱ï¼\n$1\n\nè¨æå¯ç¢¼ï¼\n$2",
@@ -698,7 +699,7 @@
"newarticle": "(æ°)",
"newarticletext": "æ¨æ£é£çµè³ä¸é ä¸åå¨é é¢ã\nè¦å»ºç«è©²é é¢ï¼è«å¨ä¸æ¹ç編輯æ¹å¡ä¸è¼¸å
¥å
§å®¹ (詳æ
è«åè [$1 説æé é¢]) ã\nå¦ææ¨æ¯ä¸å°å¿ä¾å°æ¤é é¢ï¼è«é»é¸ç覽å¨ç è¿å æéã",
"anontalkpagetext": "----\næ¤è¨è«é é¢æ¯çµ¦å°æªå»ºç«å¸³èçå¿å使ç¨è
ä½¿ç¨ \nå æ¤æåå¿
é ä½¿ç¨ IP ä½åä¾è¾¨è身份ï¼ä½ç¸åç IP ä½åå¯è½ç±è¨±å¤ä¸åç使ç¨è
æå
±ç¨ã\nå¦ææ¨æ¯å¿å使ç¨è
並ä¸è¦ºå¾è©è«çå
§å®¹èæ¨ç¡éï¼è« [[Special:UserLogin/signup|建ç«æ°å¸³è]] æ [[Special:UserLogin|ç»å
¥]] é¿å
èå
¶ä»å¿å使ç¨è
æ··æ·ã",
- "noarticletext": "æ¤é é¢ç®åæ²æå
§å®¹ï¼æ¨å¯ä»¥å¨å
¶å®é é¢ä¸[[Special:Search/{{PAGENAME}}|æå°æ¤é é¢æ¨é¡]]ã[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æå°ç¸éæ¥èª]æ[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯æ¤é ] ã",
+ "noarticletext": "æ¤é é¢ç®åæ²æå
§å®¹ï¼æ¨å¯ä»¥å¨å
¶å®é é¢ä¸[[Special:Search/{{PAGENAME}}|æå°æ¤é é¢æ¨é¡]]ã[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æå°ç¸éæ¥èª]æ[{{fullurl:{{FULLPAGENAME}}|action=edit}} 建ç«æ¤é ] ã",
"noarticletext-nopermission": "æ¤é é¢ç®åæ²æå
§å®¹ï¼\næ¨å¯ä»¥å¨å
¶å®é é¢ä¸ [[Special:Search/{{PAGENAME}}|æå°æ¤é é¢æ¨é¡]]ï¼æ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æå°ç¸éæ¥èª] ï¼ä½æ¨æ²ææ¬é建ç«æ¤é é¢ã",
"missing-revision": "é é¢å稱 \"{{FULLPAGENAME}}\" ç #$1 ä¿®è¨çæ¬ä¸åå¨ã\n\né常æ¯å é£çµå°éæçæ·å²é é¢ï¼è©²é é¢å·²è¢«åªé¤ã\n詳æ
è«åè [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} åªé¤æ¥èª]ã",
"userpage-userdoesnotexist": "使ç¨è
帳è \"$1\" å°æªè¨»åã\nè¥æ¨è¦å»ºç«/編輯æ¤é é¢ï¼è«å
檢æ¥æ¯å¦æ£ç¢ºã",
@@ -717,8 +718,8 @@
"previewnote": "æ¨ç®åæ£å¨é 覽ï¼æ¨çè®æ´éå°æªå²åï¼ ",
"continue-editing": "åå¾ç·¨è¼¯æ¡",
"previewconflict": "æ¤é 覽顯示äºæ¨æ¼ä¸æ¹æå編輯æ¡ä¸çå
§å®¹å²åä¹å¾å°æ顯示ççµæã",
- "session_fail_preview": "å¾æ±æï¼ç±æ¼é£ç·é段çè³æéºå¤±ï¼æåç¡æ³èçæ¨ç編輯åä½ã \nè«å試ä¸æ¬¡ã\nå¦æä»ç¶å¤±æï¼è« [[Special:UserLogout|ç»åº]] å¾éæ°ç»å
¥ã",
- "session_fail_preview_html": "å¾æ±æï¼ç±æ¼é£ç·é段çè³æéºå¤±ï¼æåç¡æ³èçæ¨ç編輯åä½ã \n\nç±æ¼ {{SITENAME}} éåäºåå§ HTML 模å¼ï¼å°ä¸æ顯示é 覽ç«é¢ä»¥é¿å
JavaScript æ»æã \n\nè¥éæ¯ç¬¦åè¦ç¯ç編輯åä½ï¼è«å試ä¸æ¬¡ã \nå¦æä»ç¶æåé¡ï¼è« [[Special:UserLogout|ç»åº]] å¾åéæ°ç»å
¥ä¸æ¬¡ã",
+ "session_fail_preview": "å¾æ±æï¼ç±æ¼é£ç·é段çè³æéºå¤±ï¼ä»¥è³æ¼æåç¡æ³èçæ¨ç編輯åä½ã\næ¨å¯è½å·²ç¶ç»åºäºãè«æ¨ç¢ºèªæ¨ä»ç¶å¨ç»å
¥çæ
ï¼ä¸¦è«å試ä¸æ¬¡ ã\nè«å試ä¸æ¬¡ã\nå¦æä»ç¶å¤±æï¼è« [[Special:UserLogout|ç»åº]] å¾éæ°ç»å
¥ï¼ä¸¦è«æ¨ç¢ºèªæ¨çç覽å¨å
許æ¤ç¶²ç«çCookieã",
+ "session_fail_preview_html": "æ±æï¼ç±æ¼æ¯æ¬¡ç»å
¥æ段åºç¾è³æéºå¤±ï¼æåç¡æ³èçæ¨æä½åºç編輯ã \n\n {{SITENAME}} å·²éåäºåå§ HTML 模å¼ï¼æ
æ¤é 覽ç«é¢å°ä¸æ顯示以é¿å
JavaScript æ»æã \n\nå¦æ¨å¸æçæ£è½å¤ ä½åºé次編輯ï¼è«å試ä¸æ¬¡ã \nå¦æä»ä¸æåï¼è« [[Special:UserLogout|ç»åº]] å¾åéæ°ç»å
¥ï¼ä¸¦ç¢ºä¿ç覽å¨è¨å®çºãå
許éå網åçcookieãã",
"token_suffix_mismatch": "å æ¨ä½¿ç¨çç覽å¨ç ´å£äºç·¨è¼¯å¯é°ä¸çç¹æ®ç¬¦èï¼æ¨ç編輯已被æçµã \nçºäºé¿å
ç ´å£é é¢å
§å®¹ï¼å·²æçµæ¤æ¬¡ç·¨è¼¯åä½ï¼\næç¼çéååé¡é常æ¯å çºæ¨ä½¿ç¨äºæåé¡çå¿å網é 代ç伺æå¨ã",
"edit_form_incomplete": "é¨ä»½ç·¨è¼¯çå
§å®¹æªéè³ä¼ºæå¨ï¼è«æª¢æ¥æ¨ç編輯å
§å®¹æ¯å¦å®æ´ä¸¦å試ä¸æ¬¡ã ",
"editing": "æ£å¨ç·¨è¼¯ $1",
@@ -884,9 +885,9 @@
"revdelete-unsuppress": "移é¤å·²éåä¿®è¨ä¸ç顯示éå¶",
"revdelete-log": "åå ï¼",
"revdelete-submit": "å¥ç¨è³å·²é¸åç{{PLURAL:$1|ä¸ç|å¤ç}}ä¿®è¨",
- "revdelete-success": "å·²æåæ´æ°ä¿®è¨ç顯示è¨å®ã",
+ "revdelete-success": "å·²æåæ´æ°æª¢ç¤ºä¿®è¨å
§å®¹çæ¬éè¨å®ã",
"revdelete-failure": "ç¡æ³æ´æ°ä¿®è¨ç顯示è¨å®ï¼\n$1",
- "logdelete-success": "å·²æåæ´æ°æ¥èªç顯示è¨å®ã",
+ "logdelete-success": "å·²æåæ´æ°æª¢è¦æ¥èªçæ¬éè¨å®ã",
"logdelete-failure": "ç¡æ³æ´æ°æ¥èªç顯示è¨å®ï¼\n$1",
"revdel-restore": "è®æ´è½è¦åº¦",
"pagehist": "é é¢æ·å²",
@@ -917,6 +918,11 @@
"mergehistory-empty": "æ²æå¯ä»¥åä½µçä¿®è¨",
"mergehistory-done": "$1 ä¸ $3 次修è¨å·²åä½µè³ [[:$2]]ã",
"mergehistory-fail": "ç¡æ³é²è¡æ·å²åä½µï¼è«éæ°æª¢æ¥è©²é é¢åæéåæ¸ã",
+ "mergehistory-fail-bad-timestamp": "æéå¼ç¡æã",
+ "mergehistory-fail-invalid-source": "ä¾æºé é¢ç¡æã",
+ "mergehistory-fail-invalid-dest": "ç®æ¨é é¢ç¡æã",
+ "mergehistory-fail-no-change": "æ·å²åä½µå°æªå併任ä½ä¿®è¨æ·å²ç´éãè«å次檢æ¥é é¢ä»¥åæéåæ¸ã",
+ "mergehistory-fail-self-merge": "ä¾æºé é¢èç®æ¨é é¢çå稱ç¸åã",
"mergehistory-fail-toobig": "è¶
é $1 åä¿®è¨ç§»åçä¸éï¼ç¡æ³é²è¡æ·å²åä½µã",
"mergehistory-no-source": "ä¾æºé é¢ $1 ä¸åå¨ã",
"mergehistory-no-destination": "ç®æ¨é é¢ $1 ä¸åå¨ã",
@@ -1122,7 +1128,7 @@
"userrights-changeable-col": "æ¨å¯è®æ´ç群çµ",
"userrights-unchangeable-col": "æ¨ä¸å¯è®æ´ç群çµ",
"userrights-conflict": "使ç¨è
æ¬éè®æ´ç¼çè¡çªï¼è«æª¢é±ä¸¦ç¢ºèªä½ çè®æ´ã",
- "userrights-removed-self": "æ¨å·²æå移é¤èªå·±çæ¬éï¼æ¨å·²ç¡æ³å次ååæ¤é é¢ã",
+ "userrights-removed-self": "æ¨å·²ç§»é¤èªå·±çæ¬éï¼æ
æ¨å·²ç¡æ³å次ååæ¤é é¢ã",
"group": "群çµï¼",
"group-user": "使ç¨è
",
"group-autoconfirmed": "èªå確èªç使ç¨è
",
@@ -1512,7 +1518,7 @@
"backend-fail-read": "ç¡æ³è®åæªæ¡ \"$1\"ã",
"backend-fail-create": "ç¡æ³å¯«å
¥æªæ¡ \"$1\"ã",
"backend-fail-maxsize": "ç±æ¼æªæ¡å¤§å°è¶
é $2 ä½å
çµï¼ç¡æ³å¯«å
¥æªæ¡ \"$1\"ââã",
- "backend-fail-readonly": "å²å庫çå¾ç«¯ \"$1\" ç®åçºå¯è®æ¨¡å¼ãåå çºï¼\"$2 \"",
+ "backend-fail-readonly": "å²å庫çå¾ç«¯ \"$1\" ç®åçºå¯è®æ¨¡å¼ãåå çºï¼$2 ",
"backend-fail-synced": "æªæ¡ \"$1\" èå
§é¨å²å庫å¾ç«¯å
§ççæ
ä¸ä¸è´ã",
"backend-fail-connect": "ç¡æ³é£çµè³å²å庫å¾ç«¯ \"$1\"ã",
"backend-fail-internal": "å²å庫å¾ç«¯ \"$1\" ç¼çäºä¸æçé¯èª¤ã",
@@ -1539,7 +1545,7 @@
"uploadstash-summary": "æ¤é é¢å¯ååå·²ä¸å³æéå¨ä¸å³ç¨åºä½å°æªå¨ Wiki å
¬éçæªæ¡ï¼éäºæªæ¡é¤äºä¸å³ç使ç¨è
æ¬èº«å¤ï¼å
¶ä»äººå°ç¡æ³æ¥çã",
"uploadstash-clear": "æ¸
é¤å²è庫æªæ¡",
"uploadstash-nofiles": "æ¨æ²æå²èçæªæ¡ã",
- "uploadstash-badtoken": "å·è¡åä½å¤±æï¼æ¨ç編輯è³è¨å¯è½å·²ç¶éæï¼è«éæ°å試ã",
+ "uploadstash-badtoken": "å·è¡åä½å¤±æãæ¨ç編輯è³è¨å¯è½å·²ç¶éæï¼è«éæ°å試ã",
"uploadstash-errclear": "æ¸
é¤æªæ¡å¤±æã",
"uploadstash-refresh": "æ´æ°æªæ¡æ¸
å®",
"invalid-chunk-offset": "ç¡æåå¡ä½ç½®",
@@ -1790,7 +1796,7 @@
"apihelp": "API 說æ",
"apihelp-no-such-module": "æ¥ç¡æ¨¡çµ \"$1\"ã",
"apisandbox": "API æ²ç",
- "apisandbox-api-disabled": "æ¤ç¶²ç«å·²éé API 使ç¨ã",
+ "apisandbox-api-disabled": "æ¤ç¶²ç«å·²éé APIã",
"apisandbox-intro": "使ç¨æ¤é é¢å¯æ¸¬è©¦ '''MediaWiki Web Service API'''ã\nè«åèã[//www.mediawiki.org/wiki/API:Main_page API 說ææ件] 以åå¾è©³ç´°è³è¨ãä¾ï¼[//www.mediawiki.org/wiki/API#A_simple_example åå¾ä¸»é çå
§å®¹]ã è«é¸æåä½ä»¥åå¾æ´å¤ç¯ä¾ã\n\nè«æ³¨æï¼éç¶æ¤çºæ²çï¼æ¨å¨æ¤é æå·è¡çåä½ä»æå¯è½æä¿®æ¹å° Wikiã",
"apisandbox-fullscreen": "å±éé¢æ¿",
"apisandbox-fullscreen-tooltip": "å±éæ²çé¢æ¿ä¾å¡«æ»¿ç覽å¨è¦çªã",
@@ -2045,6 +2051,7 @@
"changecontentmodel-title-label": "é é¢æ¨é¡",
"changecontentmodel-model-label": "æ°å
§å®¹æ¨¡å",
"changecontentmodel-reason-label": "åå ï¼",
+ "changecontentmodel-submit": "è®æ´",
"changecontentmodel-success-title": "å·²è®æ´å
§å®¹æ¨¡å",
"changecontentmodel-success-text": "å·²è®æ´ [[:$1]] çå
§å®¹é¡åã",
"changecontentmodel-cannot-convert": "[[:$1]] çå
§å®¹ç¡æ³è½æçº $2 é¡åã",
@@ -3288,7 +3295,7 @@
"tags-delete-not-allowed": "ç¡æ³åªé¤ç±æ´å
å¥ä»¶å®ç¾©çæ¨ç±¤ï¼é¤é該æ´å
å¥ä»¶å
許ã",
"tags-delete-not-found": "æ¨ç±¤ \"$1\" ä¸åå¨ã",
"tags-delete-too-many-uses": "æ¨ç±¤ \"$1\" æå¥ç¨è³ $2 ç以ä¸ç{{PLURAL:$2|ä¿®è¨|ä¿®è¨}}ï¼é代表該æ¨ç±¤å°ç¡æ³åªé¤ã",
- "tags-delete-warnings-after-delete": "æ¨ç±¤ \"$1\" å·²åªé¤æåï¼ä½ç¼çä¸å{{PLURAL:$2|è¦å|è¦å}}ï¼",
+ "tags-delete-warnings-after-delete": "æ¨ç±¤ \"$1\" å·²åªé¤ï¼ä½ç¼çä¸å{{PLURAL:$2|è¦å|è¦å}}ï¼",
"tags-activate-title": "ååæ¨ç±¤",
"tags-activate-question": "æ¨æ£è¦ååæ¨ç±¤ \"$1\"ã",
"tags-activate-reason": "åå ï¼",
@@ -3325,7 +3332,7 @@
"tags-edit-reason": "åå ï¼",
"tags-edit-revision-submit": "å¥ç¨è®æ´è³{{PLURAL:$1|æ¤ä¿®è¨|$1 çä¿®è¨}}",
"tags-edit-logentry-submit": "å¥ç¨è®æ´è³{{PLURAL:$1|æ¤æ¥èªé
ç®|$1 çæ¥èªé
ç®}}",
- "tags-edit-success": "å·²æåå¥ç¨è®æ´ã",
+ "tags-edit-success": "å·²å¥ç¨è®æ´ã",
"tags-edit-failure": "è®æ´è¢«ç¡æ³å¥ç¨ï¼\n$1",
"tags-edit-nooldid-title": "ç¡æçç®æ¨ä¿®è¨",
"tags-edit-nooldid-text": "æ¨æ²ææå®ä»»ä½è¦å·è¡æ¤åè½çç®æ¨ä¿®è¨ææå®çä¿®è¨ä¸¦ä¸åå¨ã",
diff --git a/load.php b/load.php
index c6452fb475..2b97f7aa2a 100644
--- a/load.php
+++ b/load.php
@@ -24,6 +24,11 @@
use MediaWiki\Logger\LoggerFactory;
+// This endpoint is supposed to be independent of request cookies and other
+// details of the session. Log warnings for violations of the no-session
+// constraint.
+define( 'MW_NO_SESSION', 'warn' );
+
require __DIR__ . '/includes/WebStart.php';
// URL safety checks
@@ -31,12 +36,15 @@ if ( !$wgRequest->checkUrlExtension() ) {
return;
}
-// Respond to ResourceLoader request
+// Set up ResourceLoader
$resourceLoader = new ResourceLoader(
ConfigFactory::getDefaultInstance()->makeConfig( 'main' ),
LoggerFactory::getInstance( 'resourceloader' )
);
-$resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) );
+$context = new ResourceLoaderContext( $resourceLoader, $wgRequest );
+
+// Respond to ResourceLoader request
+$resourceLoader->respond( $context );
Profiler::instance()->setTemplated( true );
diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php
index 777eddd192..a08297a647 100644
--- a/maintenance/Maintenance.php
+++ b/maintenance/Maintenance.php
@@ -752,17 +752,19 @@ abstract class Maintenance {
if ( isset( $this->mParams[$option] ) ) {
$multi = $this->mParams[$option]['multiOccurrence'];
- $exists = array_key_exists( $option, $options );
- if ( $multi && $exists ) {
- $options[$option][] = $value;
- } elseif ( $multi ) {
- $options[$option] = [ $value ];
- } elseif ( !$exists ) {
- $options[$option] = $value;
- } else {
- $this->error( "\nERROR: $option parameter given twice\n" );
- $this->maybeHelp( true );
- }
+ } else {
+ $multi = false;
+ }
+ $exists = array_key_exists( $option, $options );
+ if ( $multi && $exists ) {
+ $options[$option][] = $value;
+ } elseif ( $multi ) {
+ $options[$option] = [ $value ];
+ } elseif ( !$exists ) {
+ $options[$option] = $value;
+ } else {
+ $this->error( "\nERROR: $option parameter given twice\n" );
+ $this->maybeHelp( true );
}
}
diff --git a/maintenance/benchmarks/Benchmarker.php b/maintenance/benchmarks/Benchmarker.php
index 8651a6829c..5fab082334 100644
--- a/maintenance/benchmarks/Benchmarker.php
+++ b/maintenance/benchmarks/Benchmarker.php
@@ -87,7 +87,7 @@ abstract class Benchmarker extends Maintenance {
$ret .= sprintf( "%s times: function %s(%s) :\n",
$res['count'],
$res['function'],
- join( ', ', $res['arguments'] )
+ implode( ', ', $res['arguments'] )
);
$ret .= sprintf( " %6.2fms (%6.2fms each)\n",
$res['delta'] * 1000,
diff --git a/maintenance/dumpBackup.php b/maintenance/dumpBackup.php
index 190432517d..d4255a0f2f 100644
--- a/maintenance/dumpBackup.php
+++ b/maintenance/dumpBackup.php
@@ -102,7 +102,9 @@ TEXT
$this->fatalError( "Unable to open file {$filename}\n" );
}
$pages = array_map( 'trim', $pages );
- $this->pages = array_filter( $pages, create_function( '$x', 'return $x !== "";' ) );
+ $this->pages = array_filter( $pages, function ( $x ) {
+ return $x !== '';
+ } );
}
if ( $this->hasOption( 'start' ) ) {
diff --git a/maintenance/getConfiguration.php b/maintenance/getConfiguration.php
index 6bc9a6a548..3c679e6e7a 100644
--- a/maintenance/getConfiguration.php
+++ b/maintenance/getConfiguration.php
@@ -53,7 +53,7 @@ class GetConfiguration extends Maintenance {
$this->addOption( 'regex', 'regex to filter variables with', false, true );
$this->addOption( 'iregex', 'same as --regex but case insensitive', false, true );
$this->addOption( 'settings', 'Space-separated list of wg* variables', false, true );
- $this->addOption( 'format', join( ', ', self::$outFormats ), false, true );
+ $this->addOption( 'format', implode( ', ', self::$outFormats ), false, true );
}
protected function validateParamsAndArgs() {
diff --git a/maintenance/initSiteStats.php b/maintenance/initSiteStats.php
index 7e62b89f48..b2530ce653 100644
--- a/maintenance/initSiteStats.php
+++ b/maintenance/initSiteStats.php
@@ -63,6 +63,9 @@ class InitSiteStats extends Maintenance {
$this->output( "\nUpdating site statistics..." );
$counter->refresh();
$this->output( "done.\n" );
+ } else {
+ $this->output( "\nTo update the site statistics table, run the script "
+ . "with the --update option.\n" );
}
if ( $this->hasOption( 'active' ) ) {
diff --git a/maintenance/language/zhtable/Makefile.py b/maintenance/language/zhtable/Makefile.py
index 999f25c134..15a1cb9d0f 100755
--- a/maintenance/language/zhtable/Makefile.py
+++ b/maintenance/language/zhtable/Makefile.py
@@ -417,17 +417,17 @@ def main():
namespace MediaWiki\Languages\Data;
class ZhConversion {
-public static $zh2Hant = array(\n'''
+public static $zh2Hant = [\n'''
php += PHPArray(toHant) \
- + '\n);\n\npublic static $zh2Hans = array(\n' \
+ + '\n];\n\npublic static $zh2Hans = [\n' \
+ PHPArray(toHans) \
- + '\n);\n\npublic static $zh2TW = array(\n' \
+ + '\n];\n\npublic static $zh2TW = [\n' \
+ PHPArray(toTW) \
- + '\n);\n\npublic static $zh2HK = array(\n' \
+ + '\n];\n\npublic static $zh2HK = [\n' \
+ PHPArray(toHK) \
- + '\n);\n\npublic static $zh2CN = array(\n' \
+ + '\n];\n\npublic static $zh2CN = [\n' \
+ PHPArray(toCN) \
- + '\n);\n}\n'
+ + '\n];\n}\n'
if pyversion[:1] in ['2']:
f = open(os.path.join('..', '..', '..', 'languages', 'data', 'ZhConversion.php'), 'wb', encoding='utf8')
diff --git a/maintenance/language/zhtable/toCN.manual b/maintenance/language/zhtable/toCN.manual
index 944e20ecd1..915c6996d0 100644
--- a/maintenance/language/zhtable/toCN.manual
+++ b/maintenance/language/zhtable/toCN.manual
@@ -37,6 +37,7 @@
鹽份 çå
çµä»½ ç»å
æ份 æå
+æä»½è¡ æ份è¡
æ¬ä»½ æ¬å
æ¬æ¬ä»½ä»½ æ¬æ¬åå
æ°å¦å
¶ä»½ æ°å¦å
¶å
@@ -2179,6 +2180,9 @@
æ£ä½è æ£å¸ç
éä½è éå¸ç
éå¸è éå¸ç
+è¨éè è®°å½ç
+ç´éè 纪å½ç
+æ¶éè æ¶å½ç
ä¸åå
è ä¸åå
ç
èµ°çºä¸è 走为ä¸ç
è¨æ¶é« å
å
@@ -2239,7 +2243,6 @@
åå網路 å±åç½ç»
å·¨é å®
æçå¨ æ«æ仪
-å¯¬é » 宽带
è³æ庫 æ°æ®åº
æ¯é³ å
é³
å°è¡¨æ© æå°æº
@@ -2325,6 +2328,7 @@
寮å èæ
貢寮 贡寮 #åè©ç¨
èå©å èéå
+å¥æ´æ¯ å
ç½æ¯
è«ä¸æ¯å
è«æ¡æ¯å
è³´ç´¢æ è±ç´¢æ
å°æ¯äº èµæ¯äº
@@ -2403,6 +2407,8 @@
ææ¯é西 第æ¯å©æ¯
å·´æ¯æ 巴士æ
ææ 迪æ
+åææ åææ
+å
ææ åææ
è³½æ®åæ¯ å¡æµ¦è·¯æ¯
è·å§è² éå°æ¨å
¹
å è©èµ°å» å æ²å°å¸¦
@@ -2476,7 +2482,6 @@
å¯è¥¿æ ¹ å¯ææ ¹
ç´æ¾¤è¥¿ æ°æ³½è¥¿
èç¹å© èç¹å©å°
-滿å°å¯ èç¹å©å°
åééåæå·´å¥ ç¹ç«å°¼è¾¾åå¤å·´å¥
åéé ç¹ç«å°¼è¾¾
æå·´å¥ å¤å·´å¥
diff --git a/maintenance/language/zhtable/toHK.manual b/maintenance/language/zhtable/toHK.manual
index 457457aacc..f76d875b53 100644
--- a/maintenance/language/zhtable/toHK.manual
+++ b/maintenance/language/zhtable/toHK.manual
@@ -55,7 +55,6 @@
å¸å
ä½å
å¸å± ä½å±
å¸é² ä½é²
-å¸æ½ ä½æ½
å¸æ»¡ ä½æ»¿
å¸æ»¿ ä½æ»¿
å¸å ä½å
@@ -325,6 +324,8 @@
å æ´ ä½æ´
å å±é¨ ä½å±é¨
æ¥å æ¥ä½
+ææ¥å æ ææ¥å æ
+æ©æ¥å æ ææ¥å æ
ç¾å ç¾ä½
è±å è±ä½
å¾·å å¾·ä½
@@ -592,6 +593,7 @@
å°æ¶é å°æè£
ä½é é«è£
æé æ«è£
+åé åè£
çµå½±é é»å½±è£
广æé 廣æè£
çµè§é é»è¦è£
@@ -2569,6 +2571,9 @@
æ£ä½è æ£ä½ç
éä½è éä½ç
éå¸è éä½ç
+è¨éè è¨éç
+ç´éè ç´éç
+æ¶éè æ¶éç
ä¸åå
è ä¸åå
ç
èµ°çºä¸è èµ°çºä¸ç
鬧è 鬧ç
@@ -2697,6 +2702,7 @@
寮å èæ¾
貢寮 貢寮 #åè©ç¨
è¯å°¼äº è¯é
+å¥æ´æ¯ å
§ç¾
ç¢
è«ä¸æ¯å
è«æ¡æ¯å
è³´ç´¢æ èç´¢æ
å°æ¯äº è´æ¯äº
@@ -2824,7 +2830,6 @@
ç±è·å è¾å¥§ç¦
å¾å
è¨æ¯ å¾·å
è©æ¯
èç¹å© èç¹å©ç¾
-滿å°å¯ èç¹å©ç¾
ç´è³å£«å ç´è³å£«å
é»å¤å
æ¢
é¸
æ¢
é¸ æ¢
é¸
diff --git a/maintenance/language/zhtable/toTW.manual b/maintenance/language/zhtable/toTW.manual
index ddd6f9df9f..12431b382a 100644
--- a/maintenance/language/zhtable/toTW.manual
+++ b/maintenance/language/zhtable/toTW.manual
@@ -183,7 +183,6 @@
ååº ååæª
å段 æ¬ä½
åç åæª
-çé¢ ä»é¢
æ§ä»¶ æ§å¶é
çç ç¢ç
硬ç 硬ç¢
@@ -204,7 +203,6 @@
æå¡å¨ 伺æå¨
å±åç½ åå網
å±åç½ç» åå網路
-宽带 å¯¬é »
æ°æ®åº è³æ庫
æå°æº å°è¡¨æ©
æå°æ© å°è¡¨æ©
@@ -348,6 +346,8 @@
èæ 寮å
èæ¾ å¯®å
è¯å°¼äº è¯äº
+å
ç½æ¯ å¥æ´æ¯
+å
§ç¾
ç¢ å¥æ´æ¯
èéå èå©å
è«æ¡æ¯å
è«ä¸æ¯å
è±ç´¢æ è³´ç´¢æ
@@ -531,7 +531,6 @@
å¾å
è©æ¯ å¾·å
è©æ¯
èç¹å©å° èç¹å©
èç¹å©ç¾ èç¹å©
-滿å°å¯ èç¹å©
麦å
å° éº¥å¯
è¿å
å° éº¥å¯
é¯è³æ¯Â·å·´éåç¾
é¯æ¬Â·å·´çåç¾
diff --git a/maintenance/language/zhtable/toTrad.manual b/maintenance/language/zhtable/toTrad.manual
index 2bc8945611..5c6a70b7bb 100644
--- a/maintenance/language/zhtable/toTrad.manual
+++ b/maintenance/language/zhtable/toTrad.manual
@@ -75,7 +75,6 @@
馬å å±± 馬å å±±
é«æ礼 éæ·ç¦®
è´ç¯ è´ç¯
-åè± åè±
äºè¬ äºè¬
è©©äº è©©äº
äºçº äºçº
@@ -137,6 +136,7 @@
æ¶æ¾¤æ° æ¶æ¾¤æ°
æ¶é·æ æ¶é·æ
æ¶ææ æ¶ææ
+åè± åè±
è·å è·å
廢å 廢å
å髮座 å髮座
@@ -147,6 +147,14 @@
è³¢å è³¢å
åå åå
è»å è»å
+é³æå é³æå
+天ç¥ä¹å 天ç¥ä¹å
+è±å è±å
+åç¶ åç¶
+èé½å èé½å
+ååº ååº
+å¾åº å¾åº
+åè¼ åè¼
é¦¬æ ¼éå¸ é¦¬æ ¼éå¸
ä½³éé® ä½³éé®
æåªæ¡ æåªæ¡
@@ -191,8 +199,6 @@
å¤è 復ç¦
è¹æ èæ
è¹æå¹² èæä¹¾
-ååº ååº
-å¾åº å¾åº
é¾å±±åº é¾å±±åº
å¯¶å±±åº å¯¶å±±åº
å¡å±±åº å¡å±±åº
@@ -201,11 +207,6 @@
é®®äº é®®äº
賦è 賦è
è
äºè»¾ è
äºè»¾
-é³æå é³æå
-天ç¥ä¹å 天ç¥ä¹å
-è±å è±å
-åç¶ åç¶
-èé½å èé½å
壽天é 壽天é
è²´åé è²´åé
æ±æ¹é æ±æ¹é
@@ -214,6 +215,7 @@
æ°´éé³³æ æ°´éé³³æ
æ°´éæ¿æ°´æºª æ°´éæ¿æ°´æºª
æ´éè© æ´éè©
+ææ²³éè±å ææ²³éè±å
åä¸ä¾ åä¸ä¾
åä¾åå» åä¾åå»
åå åå
@@ -273,6 +275,7 @@
åå¹³ æå¹³
åé³ æé½
éå é³æ
+å°å¬å ç¾å¬é
åå®®é åå®®é
èåº èåº
æ¿ç ´ä» æ¿ç ´å´
@@ -531,3 +534,4 @@
æå¬ æ²é¼
å¬å¬é¼ é¼é¼é¼
è§éº» è§éº»
+å¼ æè å¼µæ ¢è
diff --git a/maintenance/language/zhtable/trad2simp.manual b/maintenance/language/zhtable/trad2simp.manual
index 03c42d9c8c..c9d78b7a5f 100644
--- a/maintenance/language/zhtable/trad2simp.manual
+++ b/maintenance/language/zhtable/trad2simp.manual
@@ -323,6 +323,7 @@ U+06ED9æ»|U+06C47æ±|
U+06EDBæ»|U+06DEBæ·«|
U+06EF7æ»·|U+05364å¤|
U+06F44æ½|U+06F31æ¼±|
+U+06F55æ½|U+23C98ð£²|
U+06F59æ½|U+06CA9沩|
U+06F81æ¾|U+06DA9涩|
U+06F90æ¾|U+06C84æ²|
@@ -618,6 +619,7 @@ U+08E5Fè¹|U+08FF9迹|
U+08E60è¹ |U+08DD6è·|
U+08E67蹧|U+07CDFç³|
U+08E75è¹µ|U+08E74è¹´|
+U+08E98èº|U+28001ð¨|
U+08EADèº|U+0803Dè½|
U+08EB3躳|U+08EAC躬|
U+08EB6躶|U+088F8裸|
diff --git a/maintenance/language/zhtable/tradphrases.manual b/maintenance/language/zhtable/tradphrases.manual
index 309bd5d082..492a99d53a 100644
--- a/maintenance/language/zhtable/tradphrases.manual
+++ b/maintenance/language/zhtable/tradphrases.manual
@@ -364,6 +364,11 @@
æ¸ç½ªä½µç½°
å¬ä½µ
ç併潮
+åä½µ
+ä½µçºä¸é«
+ä½µçºä¸å®¶
+ä½µå
+並åä¸
ææ©å¤ªå¾æ¸
è£æµ·
ä¸æ¡
@@ -545,6 +550,7 @@
é«®éµ
髮飾
é«®ç´
+髮簪
é«®ä¸æå
é«®ä¸æ²å
髮乳
@@ -623,7 +629,7 @@
髮已éç½
髮油
é«®çºè¡ä¹æ¬
-髮網
+髮網è
é«®è¸æ²å
é«®é
é»é«®
@@ -641,6 +647,7 @@
ç¾é«®æ¥
ç¾é«®æ²é¾
ç¾å®¹ç¾é«®
+ç¨åé«®
模èæ£æ£å
模èä¸è»
模èä¸æ£
@@ -706,6 +713,7 @@
è¤å解
è¤å #å è¤åè©é »é é«æ¼å¾©å
è¤æ¹
+è¤ç©
æ¥ç©
ææ¬ç©çè²
ä¸ç©
@@ -1155,6 +1163,10 @@
é¹¹æ¹
é¹¹æ¿
鹹豬
+çé¹¹
+é¹¹ç
+çãé¹¹
+é¹¹ãç
é¦ç¶è±å
籲天
å鬱
@@ -1386,7 +1398,6 @@
åç¥æ
ä¼æ¯èæ
é
麴
-ç¾å¬é
æ¾¹èº
æè¨
å§è¨
@@ -1551,8 +1562,8 @@
çé½
åç
æ²ç
-æ¹åç
-æ ¸åç
+æ¹å
+æ ¸å
çºæº
æºç´
æºé
@@ -1619,12 +1630,6 @@
çé¶
ç表é¢
éµé
-çä¸é
-çä¸é¶
-ç
ä¸é
-ç
ä¸é¶
-æ¿ä¸é
-æ¿ä¸é¶
éä¸æ²ä¸é¿
å°æºé
å°æºéé¶
@@ -1637,8 +1642,6 @@
é¶æ
¢
é¿é
éæ²
-大æ¬éæ²
-大笨éæ²
ä¸ç´éé¶
ä¸ç´é
é¶ç
@@ -1685,7 +1688,6 @@
éé
éç´
é座
-ä»é
寺é
座é
大笨é
@@ -1846,6 +1848,8 @@
éç§
éè©
éå
+éå»
+éæ¥
éç¾å¸å
é»å¥´ç±²å¤©é
æéæ¹
@@ -2893,10 +2897,6 @@
æ大æ¨
æ大æ¨
åè±
-製å¾
-éå¶
-æ§å¶
-製å
å¿è
èè
è¾è
@@ -2915,8 +2915,6 @@
äºæä¸
註ï¼# ä¸ä½â注ï¼â
åçº# ä¸ä½âåçºâ
-ä½µçºä¸é«
-ä½µçºä¸å®¶
ä¸å# é¿å
âå裡âçé¯èª¤
å
©å
äºå
@@ -2998,7 +2996,6 @@
ç¯ç®è£¡
å ´è£¡
ä¸ç´è£¡
-äºç¾å°¼äºæ
注é
æé¢
è·¯é¢
@@ -3084,6 +3081,7 @@
é«è£¡
æ«è£¡
ç裡
+å裡
é»å½±è£¡
廣æ裡
é»è¦è£¡
@@ -3294,6 +3292,21 @@
é風å¾
é 風å¾
大風å¾
+è³å
+å±±ä»å
+ç²åè·¯
+åè¸å
+è¬è¯å
+è¶æ å
+ææ å
+å¨æ å
+åæ å
+è¶å¨å
+èå
+é³æå
+æ æå
+èé½å
+åè¼
é¦¬æ ¼éå¸
ä¼éå¸
åå
¥
@@ -3332,20 +3345,6 @@
é»åé²
代表
æ°´ç¡æå¥
-è³å
-å±±ä»å
-ç²åè·¯
-åè¸å
-è¬è¯å
-è¶æ å
-ææ å
-å¨æ å
-åæ å
-è¶å¨å
-èå
-é³æå
-æ æå
-èé½å
äºå è¯
äºé²é¶´
äºå¿ è
é
@@ -3419,9 +3418,11 @@
åå¨å¾
å¹¾å¨å¾
å¤å¨å¾
-åå¾
åçç«
å¸åèº
+ç´
åå說
+å°å
+åå¾
æ°äºéç¾
æ¨éå
ä¼ééå
@@ -3429,7 +3430,8 @@
çç°é
å°äºé
西äºé
-å°å
+碧河é
+ææ²³éè±å
å¶å¿ç©
å¶ä¸äºå
äºç«æ
@@ -3500,7 +3502,6 @@
å¾å¤©
å¸å®¶
游é¢
-ç´
åå說
æ¸é¢
ä¸åª
湧水
@@ -3561,7 +3562,6 @@
é½ç©
太é
御製
-åä½µ
è人æ
é»å½±å¾
å°çºå
@@ -3677,6 +3677,7 @@
å±è»
å±è¹
米糰
+éå
謹æ¿
çç
éè
@@ -3743,12 +3744,15 @@
é»å製表
製æ¯
製販
+製å¾
+製å
è¯è£½
éå¶ #以ä¸åè©ç¨
管å¶
æå¶
æ§å¶
éå¶
+å¼·å¶
é«å¾µ
ç¶åå¾µ
ä»·å·
@@ -3766,21 +3770,6 @@
0é½£
0åºç¾
0åºç·
-第ä¸é½£
-第äºé½£
-第ä¸é½£
-第åé½£
-第äºé½£
-第å
é½£
-第ä¸é½£
-第å
«é½£
-第ä¹é½£
-第ä¸åºç¾
-第ä¸åºç·
-第äºåºç·
-第ä¸åºå±
-第ååºå±
-第äºåºå±
éé½£
éåºç¾
éåºä¹
@@ -3828,9 +3817,14 @@
ç§ç¼ç
ç§ç¼èµ·
ç§ç¼å±
+çç¼ç
+çç¼è¡
+çç¼å±
縮çç¼
ç°¡çç¼
çç¼ç
+é ç¼ç¾
+èç½ç¼
å¤äººæäº
æ人æäº
äºæ
diff --git a/maintenance/language/zhtable/tradphrases_exclude.manual b/maintenance/language/zhtable/tradphrases_exclude.manual
index 07cb389e45..09a41ad49a 100644
--- a/maintenance/language/zhtable/tradphrases_exclude.manual
+++ b/maintenance/language/zhtable/tradphrases_exclude.manual
@@ -635,7 +635,6 @@
å
é½£
å¼å
éç¶
é«®å°
-髮網
ä¿®é
麵ç·
繫ä¸
@@ -717,3 +716,12 @@
é²é¢±
æ
¾æ
åæ
+æ
+æ
+é¸é
+徵人
+é«®é
+ä¾è£½
+并å
+ä½µåä¸
+髮網
diff --git a/package.json b/package.json
index 91d27bb954..21a050bb3f 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,6 @@
"karma-chrome-launcher": "0.2.2",
"karma-firefox-launcher": "0.1.7",
"karma-qunit": "0.1.9",
- "qunitjs": "1.18.0"
+ "qunitjs": "1.22.0"
}
}
diff --git a/phpcs.xml b/phpcs.xml
index 38c7aaa96c..edce2ea267 100644
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -26,9 +26,9 @@
0
- node_modules
- vendor
- extensions
- skins
+ node_modules/
+ vendor/
+ ^extensions/
+ ^skins/
.git
diff --git a/resources/lib/oojs-ui/i18n/mn.json b/resources/lib/oojs-ui/i18n/mn.json
new file mode 100644
index 0000000000..500aca78e4
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/mn.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Munkhzaya.E"
+ ]
+ },
+ "ooui-toolbar-more": "Ðлүү",
+ "ooui-toolgroup-expand": "Ðлүү",
+ "ooui-toolgroup-collapse": "Цөөн",
+ "ooui-dialog-message-accept": "Ðа",
+ "ooui-dialog-message-reject": "ЦÑÑлаÑ
",
+ "ooui-dialog-process-error": "Ð¯Ð¼Ð°Ñ Ð½Ñг алдаа гаÑÑан",
+ "ooui-dialog-process-dismiss": "ÐÑÑÑ
",
+ "ooui-dialog-process-retry": "ÐаÑ
ин оÑолдоÑ
",
+ "ooui-dialog-process-continue": "Ð¦Ð°Ð°Ñ ÑваÑ
",
+ "ooui-selectfile-button-select": "Файлаа ÑонгоÑ
",
+ "ooui-selectfile-not-supported": "СонгоÑол Ñайл Ð½Ñ Ð´ÑмжигдÑÑ
гүй байна",
+ "ooui-selectfile-placeholder": "Файл Ñонгоогүй байна",
+ "ooui-selectfile-dragdrop-placeholder": "Файлаа Ñнд Ñ
адгалаÑ
"
+}
diff --git a/resources/lib/oojs-ui/i18n/ug-arab.json b/resources/lib/oojs-ui/i18n/ug-arab.json
index 19725cc29e..00d19619ea 100644
--- a/resources/lib/oojs-ui/i18n/ug-arab.json
+++ b/resources/lib/oojs-ui/i18n/ug-arab.json
@@ -5,5 +5,21 @@
"Tel'et",
"Tifinaghes"
]
- }
+ },
+ "ooui-outline-control-move-down": "تÛÛÛÙÚ¯Û ÙÛتÙÛ",
+ "ooui-outline-control-move-up": "ÙÛÙÛرÙغا ÙÛتÙÛ",
+ "ooui-outline-control-remove": "ئÛÚÛر",
+ "ooui-toolbar-more": "تÛØ®ÙÙ
Û ÙÛÙ¾",
+ "ooui-toolgroup-expand": "تÛØ®ÙÙ
Û ÙÛÙ¾",
+ "ooui-toolgroup-collapse": "ئاز",
+ "ooui-dialog-message-accept": "تاÙ
اÙ
",
+ "ooui-dialog-message-reject": "Ûاز ÙÛÚ",
+ "ooui-dialog-process-error": "ÙاÙ
ÛÙÛÙ
خاتاÙÙÙ ÙÛرÛÙدÙ",
+ "ooui-dialog-process-dismiss": "ÚÙÙÙرÙÛÛت",
+ "ooui-dialog-process-retry": "ÙاÙتا سÙÙا",
+ "ooui-dialog-process-continue": "داÛاÙ
ÙاشتÛر",
+ "ooui-selectfile-button-select": "بÙر Ú¾ÛججÛت تاÙÙا",
+ "ooui-selectfile-not-supported": "تاÙÙاÙغا٠ھÛججÛØªØªÛ Ù
ÛسÙÙÛ Ø¨Ø§Ø±",
+ "ooui-selectfile-placeholder": "Ú¾ÛججÛت تاÙÙاÙÙ
ÙدÙ",
+ "ooui-selectfile-dragdrop-placeholder": "Ú¾ÛججÛتÙÙ Ø¨Û ÙÛØ±Ú¯Û ØªØ§Ø´ÙاÚ"
}
diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js
index d07bcf2d04..d297933a83 100644
--- a/resources/lib/oojs-ui/oojs-ui-apex.js
+++ b/resources/lib/oojs-ui/oojs-ui-apex.js
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:12Z
+ * Date: 2016-03-08T21:46:49Z
*/
( function ( OO ) {
diff --git a/resources/lib/oojs-ui/oojs-ui-core-apex.css b/resources/lib/oojs-ui/oojs-ui-core-apex.css
index 5bd560a6f8..8b92d89827 100644
--- a/resources/lib/oojs-ui/oojs-ui-core-apex.css
+++ b/resources/lib/oojs-ui/oojs-ui-core-apex.css
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
.oo-ui-element-hidden {
display: none !important;
@@ -31,7 +31,8 @@
cursor: default;
}
.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
display: inline-block;
vertical-align: middle;
}
@@ -39,19 +40,10 @@
display: inline-block;
position: relative;
}
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- display: inline-block;
vertical-align: top;
text-align: center;
}
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
@@ -806,14 +798,11 @@
overflow: auto;
}
.oo-ui-textInputWidget input[type="search"] {
- -webkit-appearance: none;
+ -webkit-appearance: texfield;
}
.oo-ui-textInputWidget input[type="search"]::-ms-clear {
display: none;
}
-.oo-ui-textInputWidget input[type="search"]::-ms-reveal {
- display: none;
-}
.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration,
.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button,
.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button,
diff --git a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
index dfb34b340e..6ff352c2ff 100644
--- a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
+++ b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
.oo-ui-element-hidden {
display: none !important;
@@ -31,7 +31,8 @@
cursor: default;
}
.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
display: inline-block;
vertical-align: middle;
}
@@ -39,19 +40,10 @@
display: inline-block;
position: relative;
}
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- display: inline-block;
vertical-align: top;
text-align: center;
}
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
@@ -113,14 +105,14 @@
}
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
- color: #008064;
+ color: #2962cc;
}
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #00af89;
+ color: #347bff;
}
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #005946;
+ color: #1f4999;
box-shadow: none;
}
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
@@ -166,7 +158,6 @@
.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
line-height: 1.2em;
- display: inline-block;
}
.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
position: absolute;
@@ -176,9 +167,6 @@
.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
margin-left: 0.3em;
}
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- display: inline-block;
-}
.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
margin-left: 0.46875em;
@@ -236,20 +224,20 @@
color: #ffffff;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
- color: #00af89;
+ color: #347bff;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
- background-color: rgba(0, 171, 137, 0.1);
- border-color: rgba(0, 89, 70, 0.5);
+ background-color: rgba(52, 123, 255, 0.1);
+ border-color: rgba(31, 73, 153, 0.5);
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
- box-shadow: inset 0 0 0 1px #005946;
- border-color: #005946;
+ box-shadow: inset 0 0 0 1px #1f4999;
+ border-color: #1f4999;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- color: #005946;
- border-color: #005946;
+ color: #1f4999;
+ border-color: #1f4999;
box-shadow: none;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
@@ -303,22 +291,22 @@
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
color: #ffffff;
- background-color: #00af89;
- border-color: #00af89;
+ background-color: #347bff;
+ border-color: #347bff;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
- background: #008064;
- border-color: #008064;
+ background: #2962cc;
+ border-color: #2962cc;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
box-shadow: inset 0 0 0 1px #ffffff;
- border-color: #00af89;
+ border-color: #347bff;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
color: #ffffff;
- background-color: #005946;
- border-color: #005946;
+ background-color: #1f4999;
+ border-color: #1f4999;
box-shadow: none;
}
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
@@ -864,10 +852,10 @@
height: 1.6em;
background-color: white;
border: 1px solid #777777;
- background-image: url("themes/mediawiki/images/icons/check-constructive.png");
- background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
- background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
- background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
+ background-image: url("themes/mediawiki/images/icons/check-constructive-deprecated.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive-deprecated.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive-deprecated.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive-deprecated.png");
background-repeat: no-repeat;
background-position: center center;
background-origin: border-box;
@@ -982,10 +970,10 @@
height: 1.6em;
background: white;
border: 1px solid #777777;
- background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
- background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
- background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
- background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
+ background-image: url("themes/mediawiki/images/icons/circle-constructive-deprecated.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive-deprecated.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive-deprecated.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive-deprecated.png");
background-repeat: no-repeat;
background-position: center center;
background-origin: border-box;
@@ -1043,14 +1031,11 @@
overflow: auto;
}
.oo-ui-textInputWidget input[type="search"] {
- -webkit-appearance: none;
+ -webkit-appearance: texfield;
}
.oo-ui-textInputWidget input[type="search"]::-ms-clear {
display: none;
}
-.oo-ui-textInputWidget input[type="search"]::-ms-reveal {
- display: none;
-}
.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration,
.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button,
.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button,
@@ -1297,7 +1282,6 @@
left: 0.25em;
}
.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
- line-height: 1.275em;
margin: 0 1em;
}
.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
diff --git a/resources/lib/oojs-ui/oojs-ui-core.js b/resources/lib/oojs-ui/oojs-ui-core.js
index 9be8e3abcc..f587a392f3 100644
--- a/resources/lib/oojs-ui/oojs-ui-core.js
+++ b/resources/lib/oojs-ui/oojs-ui-core.js
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:12Z
+ * Date: 2016-03-08T21:46:49Z
*/
( function ( OO ) {
@@ -7020,7 +7020,7 @@ OO.ui.InputWidget.prototype.restorePreInfuseState = function ( state ) {
* @cfg {boolean} [useInputTag=false] Use an ` ` tag instead of a ` ` tag, the default.
* Widgets configured to be an ` ` do not support {@link #icon icons} and {@link #indicator indicators},
* non-plaintext {@link #label labels}, or {@link #value values}. In general, useInputTag should only
- * be set to `true` when thereâs need to support IE6 in a form with multiple buttons.
+ * be set to `true` when thereâs need to support IE 6 in a form with multiple buttons.
*/
OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
// Configuration initialization
@@ -7705,7 +7705,7 @@ OO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {
* @constructor
* @param {Object} [config] Configuration options
* @cfg {string} [type='text'] The value of the HTML `type` attribute: 'text', 'password', 'search',
- * 'email' or 'url'. Ignored if `multiline` is true.
+ * 'email', 'url' or 'date'. Ignored if `multiline` is true.
*
* Some values of `type` result in additional behaviors:
*
@@ -8106,8 +8106,8 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
.val( '' );
maxInnerHeight = this.$clone.innerHeight();
- // Difference between reported innerHeight and scrollHeight with no scrollbars present
- // Equals 1 on Blink-based browsers and 0 everywhere else
+ // Difference between reported innerHeight and scrollHeight with no scrollbars present.
+ // This is sometimes non-zero on Blink-based browsers, depending on zoom level.
measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
@@ -8161,7 +8161,7 @@ OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
* @private
*/
OO.ui.TextInputWidget.prototype.getSaneType = function ( config ) {
- var type = [ 'text', 'password', 'search', 'email', 'url' ].indexOf( config.type ) !== -1 ?
+ var type = [ 'text', 'password', 'search', 'email', 'url', 'date' ].indexOf( config.type ) !== -1 ?
config.type :
'text';
return config.multiline ? 'multiline' : type;
@@ -8204,7 +8204,16 @@ OO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) {
this.focus();
- input.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' );
+ try {
+ input.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' );
+ } catch ( e ) {
+ // IE throws an exception if you call setSelectionRange on a unattached DOM node.
+ // Rather than expensively check if the input is attached every time, just check
+ // if it was the cause of an error being thrown. If not, rethrow the error.
+ if ( this.getElementDocument().body.contains( input ) ) {
+ throw e;
+ }
+ }
return this;
};
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js
index 453bebe88e..c2bf522cf8 100644
--- a/resources/lib/oojs-ui/oojs-ui-mediawiki.js
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.js
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:12Z
+ * Date: 2016-03-08T21:46:49Z
*/
( function ( OO ) {
diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css b/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
index f246a936a9..0ea30069e9 100644
--- a/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
+++ b/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
.oo-ui-popupTool .oo-ui-popupWidget-popup,
.oo-ui-popupTool .oo-ui-popupWidget-anchor {
diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
index e11849e065..90b7f83c93 100644
--- a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
+++ b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
.oo-ui-popupTool .oo-ui-popupWidget-popup,
.oo-ui-popupTool .oo-ui-popupWidget-anchor {
diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars.js b/resources/lib/oojs-ui/oojs-ui-toolbars.js
index dfdabc9617..6fddd25ed7 100644
--- a/resources/lib/oojs-ui/oojs-ui-toolbars.js
+++ b/resources/lib/oojs-ui/oojs-ui-toolbars.js
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:12Z
+ * Date: 2016-03-08T21:46:49Z
*/
( function ( OO ) {
diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css
index 045f55d4d6..2d60c082bf 100644
--- a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css
+++ b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css
@@ -1,31 +1,36 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
-.oo-ui-draggableElement-handle.oo-ui-widget-enabled {
+.oo-ui-draggableElement-handle,
+.oo-ui-draggableElement-handle.oo-ui-widget {
cursor: move;
cursor: url(images/grab.cur );
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
-.oo-ui-draggableElement-placeholder {
- opacity: 0.2;
-}
-.oo-ui-draggableElement.oo-ui-widget-enabled:active {
+.oo-ui-draggableElement-handle:active {
cursor: move;
cursor: url(images/grabbing.cur );
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
-.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
+.oo-ui-draggableElement-handle.oo-ui-widget-disabled,
+.oo-ui-widget-disabled .oo-ui-draggableElement-handle {
+ cursor: default;
+}
+.oo-ui-draggableElement-placeholder {
+ opacity: 0.2;
+}
+.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement {
display: inline-block;
}
.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css
index 5726dae113..165a6c29d4 100644
--- a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css
+++ b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css
@@ -1,31 +1,36 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
-.oo-ui-draggableElement-handle.oo-ui-widget-enabled {
+.oo-ui-draggableElement-handle,
+.oo-ui-draggableElement-handle.oo-ui-widget {
cursor: move;
cursor: url(images/grab.cur );
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
-.oo-ui-draggableElement-placeholder {
- opacity: 0.2;
-}
-.oo-ui-draggableElement.oo-ui-widget-enabled:active {
+.oo-ui-draggableElement-handle:active {
cursor: move;
cursor: url(images/grabbing.cur );
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
-.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
+.oo-ui-draggableElement-handle.oo-ui-widget-disabled,
+.oo-ui-widget-disabled .oo-ui-draggableElement-handle {
+ cursor: default;
+}
+.oo-ui-draggableElement-placeholder {
+ opacity: 0.2;
+}
+.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement {
display: inline-block;
}
.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
@@ -628,7 +633,7 @@
right: 2em;
}
.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget {
- background: rgba(52, 123, 255, 0.1);
+ background-color: rgba(52, 123, 255, 0.1);
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
diff --git a/resources/lib/oojs-ui/oojs-ui-widgets.js b/resources/lib/oojs-ui/oojs-ui-widgets.js
index ac4b5b4dfe..04137da65a 100644
--- a/resources/lib/oojs-ui/oojs-ui-widgets.js
+++ b/resources/lib/oojs-ui/oojs-ui-widgets.js
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:12Z
+ * Date: 2016-03-08T21:46:49Z
*/
( function ( OO ) {
@@ -3720,6 +3720,13 @@ OO.mixinClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.mixin.IconElement );
* @param {Mixed[]} datas Data of the now-selected items
*/
+/**
+ * @event resize
+ *
+ * A resize event is emitted when the widget's dimensions change to accomodate newly added items or
+ * current user input.
+ */
+
/* Methods */
/**
@@ -3882,7 +3889,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.addItems = function ( items ) {
}
if ( !same ) {
this.emit( 'change', this.getItemsData() );
- this.menu.position();
+ this.updateIfHeightChanged();
}
return this;
@@ -3919,7 +3926,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.removeItems = function ( items ) {
}
if ( !same ) {
this.emit( 'change', this.getItemsData() );
- this.menu.position();
+ this.updateIfHeightChanged();
}
return this;
@@ -3932,7 +3939,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.clearItems = function () {
if ( this.items.length ) {
OO.ui.mixin.GroupElement.prototype.clearItems.call( this );
this.emit( 'change', this.getItemsData() );
- this.menu.position();
+ this.updateIfHeightChanged();
}
return this;
};
@@ -4162,8 +4169,21 @@ OO.ui.CapsuleMultiSelectWidget.prototype.updateInputSize = function () {
bestWidth = this.$content.innerWidth() - 10;
}
this.$input.width( Math.floor( bestWidth ) );
+ this.updateIfHeightChanged();
+ }
+};
+/**
+ * Determine if widget height changed, and if so, update menu position and emit 'resize' event.
+ *
+ * @private
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.updateIfHeightChanged = function () {
+ var height = this.$element.height();
+ if ( height !== this.height ) {
+ this.height = height;
this.menu.position();
+ this.emit( 'resize' );
}
};
diff --git a/resources/lib/oojs-ui/oojs-ui-windows-apex.css b/resources/lib/oojs-ui/oojs-ui-windows-apex.css
index d54017cdd9..68659d307e 100644
--- a/resources/lib/oojs-ui/oojs-ui-windows-apex.css
+++ b/resources/lib/oojs-ui/oojs-ui-windows-apex.css
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
.oo-ui-actionWidget.oo-ui-pendingElement-pending {
background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
@@ -153,7 +153,6 @@
.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
text-align: center;
line-height: 3.4em;
- padding: 0 2em;
}
.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
background-color: rgba(0, 0, 0, 0.05);
diff --git a/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css
index c2b44b4269..e1e5b51d5e 100644
--- a/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css
+++ b/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:17Z
+ * Date: 2016-03-08T21:46:53Z
*/
.oo-ui-window {
background: transparent;
@@ -146,7 +146,6 @@
.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
text-align: center;
line-height: 3.4em;
- padding: 0 2em;
}
.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
background-color: rgba(0, 0, 0, 0.05);
@@ -164,10 +163,10 @@
font-weight: bold;
}
.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
+ background-color: rgba(8, 126, 204, 0.05);
}
.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
+ background-color: rgba(8, 126, 204, 0.1);
}
.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
background-color: rgba(212, 83, 83, 0.05);
diff --git a/resources/lib/oojs-ui/oojs-ui-windows.js b/resources/lib/oojs-ui/oojs-ui-windows.js
index f07f11ef6c..dbd50ed645 100644
--- a/resources/lib/oojs-ui/oojs-ui-windows.js
+++ b/resources/lib/oojs-ui/oojs-ui-windows.js
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.16.1
+ * OOjs UI v0.16.2
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011â2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-03-01T21:50:12Z
+ * Date: 2016-03-08T21:46:49Z
*/
( function ( OO ) {
@@ -2417,10 +2417,18 @@ OO.ui.Dialog.static.escapable = true;
* @param {jQuery.Event} e Key down event
*/
OO.ui.Dialog.prototype.onDialogKeyDown = function ( e ) {
- if ( e.which === OO.ui.Keys.ESCAPE ) {
+ var actions;
+ if ( e.which === OO.ui.Keys.ESCAPE && this.constructor.static.escapable ) {
this.executeAction( '' );
e.preventDefault();
e.stopPropagation();
+ } else if ( e.which === OO.ui.Keys.ENTER && e.ctrlKey ) {
+ actions = this.actions.get( { flags: 'primary', visible: true, disabled: false } );
+ if ( actions.length > 0 ) {
+ this.executeAction( actions[ 0 ].getAction() );
+ e.preventDefault();
+ e.stopPropagation();
+ }
}
};
@@ -2511,9 +2519,7 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
);
this.actions.add( this.getActionWidgets( actions ) );
- if ( this.constructor.static.escapable ) {
- this.$element.on( 'keydown', this.onDialogKeyDownHandler );
- }
+ this.$element.on( 'keydown', this.onDialogKeyDownHandler );
}, this );
};
@@ -2524,9 +2530,7 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
// Parent method
return OO.ui.Dialog.parent.prototype.getTeardownProcess.call( this, data )
.first( function () {
- if ( this.constructor.static.escapable ) {
- this.$element.off( 'keydown', this.onDialogKeyDownHandler );
- }
+ this.$element.off( 'keydown', this.onDialogKeyDownHandler );
this.actions.clear();
this.currentAction = null;
diff --git a/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json b/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
index aae5201535..ec755a1d0c 100644
--- a/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
+++ b/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
@@ -13,6 +13,7 @@
"ltr": "images/icons/calendar-ltr.svg",
"rtl": "images/icons/calendar-rtl.svg"
} },
+ "code": { "file": "images/icons/code.svg" },
"find": { "file": {
"ltr": "images/icons/find-ltr.svg",
"rtl": "images/icons/find-rtl.svg"
@@ -25,6 +26,7 @@
"ltr": "images/icons/layout-ltr.svg",
"rtl": "images/icons/layout-rtl.svg"
} },
+ "markup": { "file": "images/icons/markup.svg" },
"newline": { "file": {
"ltr": "images/icons/newline-ltr.svg",
"rtl": "images/icons/newline-rtl.svg"
diff --git a/resources/lib/oojs-ui/themes/apex/icons-editing-core.json b/resources/lib/oojs-ui/themes/apex/icons-editing-core.json
index ceb3199223..b303071ce7 100644
--- a/resources/lib/oojs-ui/themes/apex/icons-editing-core.json
+++ b/resources/lib/oojs-ui/themes/apex/icons-editing-core.json
@@ -19,6 +19,14 @@
"ltr": "images/icons/external-link-ltr.svg",
"rtl": "images/icons/external-link-rtl.svg"
} },
- "linkSecure": { "file": "images/icons/secure-link.svg" }
+ "linkSecure": { "file": "images/icons/secure-link.svg" },
+ "redo": { "file": {
+ "ltr": "images/icons/arched-arrow-ltr.svg",
+ "rtl": "images/icons/arched-arrow-rtl.svg"
+ } },
+ "undo": { "file": {
+ "ltr": "images/icons/arched-arrow-rtl.svg",
+ "rtl": "images/icons/arched-arrow-ltr.svg"
+ } }
}
}
diff --git a/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json b/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json
index decae862aa..bd263997f1 100644
--- a/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json
+++ b/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json
@@ -31,7 +31,7 @@
"fr,it": "images/icons/bold-g.svg",
"hy": "images/icons/bold-armn-to.svg",
"ka": "images/icons/bold-geor-man.svg",
- "ky,ru": "images/icons/bold-cyrl-zhe.svg",
+ "ky,ru,uk": "images/icons/bold-cyrl-zhe.svg",
"nl": "images/icons/bold-v.svg",
"os": "images/icons/bold-cyrl-be.svg"
}
@@ -41,7 +41,7 @@
"lang": {
"ar": "images/icons/italic-arab-meem.svg",
"cs,en,fr,he,ml,pl,pt,sco": "images/icons/italic-i.svg",
- "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
+ "be,da,de,fi,ky,nn,no,os,sv,ru,uk": "images/icons/italic-k.svg",
"es,gl,it,nl": "images/icons/italic-c.svg",
"eu": "images/icons/italic-e.svg",
"fa": "images/icons/italic-arab-keheh-jeem.svg",
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/markup.png b/resources/lib/oojs-ui/themes/apex/images/icons/markup.png
new file mode 100644
index 0000000000..c78f418585
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/markup.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/markup.svg b/resources/lib/oojs-ui/themes/apex/images/icons/markup.svg
new file mode 100644
index 0000000000..7f8c253549
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/markup.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
index b03950c305..40516c0bd3 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
+++ b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
@@ -20,6 +20,7 @@
"ltr": "images/icons/calendar-ltr.svg",
"rtl": "images/icons/calendar-rtl.svg"
} },
+ "code": { "file": "images/icons/code.svg" },
"find": { "file": {
"ltr": "images/icons/find-ltr.svg",
"rtl": "images/icons/find-rtl.svg"
@@ -32,6 +33,7 @@
"ltr": "images/icons/layout-ltr.svg",
"rtl": "images/icons/layout-rtl.svg"
} },
+ "markup": { "file": "images/icons/markup.svg" },
"newline": { "file": {
"ltr": "images/icons/newline-ltr.svg",
"rtl": "images/icons/newline-rtl.svg"
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json
index ffa890552f..d70f60e3cd 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json
+++ b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json
@@ -11,7 +11,7 @@
"color": "#347bff"
},
"constructive": {
- "color": "#00af89"
+ "color": "#347bff"
},
"destructive": {
"color": "#d11d13"
@@ -41,6 +41,14 @@
"ltr": "images/icons/external-link-ltr.svg",
"rtl": "images/icons/external-link-rtl.svg"
} },
- "linkSecure": { "file": "images/icons/secure-link.svg" }
+ "linkSecure": { "file": "images/icons/secure-link.svg" },
+ "redo": { "file": {
+ "ltr": "images/icons/arched-arrow-ltr.svg",
+ "rtl": "images/icons/arched-arrow-rtl.svg"
+ } },
+ "undo": { "file": {
+ "ltr": "images/icons/arched-arrow-rtl.svg",
+ "rtl": "images/icons/arched-arrow-ltr.svg"
+ } }
}
}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json
index 28188ea148..45c6a6438f 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json
+++ b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json
@@ -38,7 +38,7 @@
"fr,it": "images/icons/bold-g.svg",
"hy": "images/icons/bold-armn-to.svg",
"ka": "images/icons/bold-geor-man.svg",
- "ky,ru": "images/icons/bold-cyrl-zhe.svg",
+ "ky,ru,uk": "images/icons/bold-cyrl-zhe.svg",
"nl": "images/icons/bold-v.svg",
"os": "images/icons/bold-cyrl-be.svg"
}
@@ -48,7 +48,7 @@
"lang": {
"ar": "images/icons/italic-arab-meem.svg",
"cs,en,fr,he,ml,pl,pt,sco": "images/icons/italic-i.svg",
- "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
+ "be,da,de,fi,ky,nn,no,os,sv,ru,uk": "images/icons/italic-k.svg",
"es,gl,it,nl": "images/icons/italic-c.svg",
"eu": "images/icons/italic-e.svg",
"fa": "images/icons/italic-arab-keheh-jeem.svg",
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-layout.json b/resources/lib/oojs-ui/themes/mediawiki/icons-layout.json
index b713146f48..efad42edb1 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/icons-layout.json
+++ b/resources/lib/oojs-ui/themes/mediawiki/icons-layout.json
@@ -11,7 +11,7 @@
"color": "#347bff"
},
"constructive": {
- "color": "#00af89"
+ "color": "#347bff"
},
"destructive": {
"color": "#d11d13"
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json b/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
index 7029bc2c8c..65c7c5bd3c 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
+++ b/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
@@ -11,7 +11,7 @@
"color": "#347bff"
},
"constructive": {
- "color": "#00af89"
+ "color": "#347bff"
},
"destructive": {
"color": "#d11d13"
@@ -45,7 +45,7 @@
},
"variants": [ "progressive" ]
},
- "star": { "file": "images/icons/star.svg", "variants": [ "constructive" ] },
+ "star": { "file": "images/icons/star.svg", "variants": [ "constructive", "progressive" ] },
"trash": { "file": "images/icons/trash.svg" },
"trashUndo": { "file": {
"ltr": "images/icons/trashUndo-ltr.svg",
@@ -55,6 +55,6 @@
"ltr": "images/icons/unLock-ltr.svg",
"rtl": "images/icons/unLock-rtl.svg"
}, "variants": [ "destructive" ] },
- "unStar": { "file": "images/icons/unStar.svg", "variants": [ "constructive" ] }
+ "unStar": { "file": "images/icons/unStar.svg", "variants": [ "constructive", "progressive" ] }
}
}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons.json b/resources/lib/oojs-ui/themes/mediawiki/icons.json
index c332e3c56a..047bc6b436 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/icons.json
+++ b/resources/lib/oojs-ui/themes/mediawiki/icons.json
@@ -11,6 +11,9 @@
"color": "#347bff"
},
"constructive": {
+ "color": "#347bff"
+ },
+ "constructive-deprecated": {
"color": "#00af89"
},
"destructive": {
@@ -21,12 +24,12 @@
}
},
"images": {
- "add": { "file": "images/icons/add.svg", "variants": [ "constructive" ] },
+ "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ] },
"advanced": { "file": "images/icons/advanced.svg" },
"alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
"cancel": { "file": "images/icons/cancel.svg", "variants": [ "destructive" ] },
- "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ] },
- "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] },
+ "check": { "file": "images/icons/check.svg", "variants": [ "constructive-deprecated", "constructive", "progressive", "destructive" ] },
+ "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive-deprecated", "constructive", "progressive" ] },
"close": { "file": {
"ltr": "images/icons/close-ltr.svg",
"rtl": "images/icons/close-rtl.svg"
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png
index 3f6b88e975..02d4f126e2 100644
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
index 0bd0e73a48..34a4bba6d0 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
@@ -1,5 +1,5 @@
-
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.png
new file mode 100644
index 0000000000..02d4f126e2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.svg
new file mode 100644
index 0000000000..34a4bba6d0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.png
new file mode 100644
index 0000000000..a0f9871690
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.svg
new file mode 100644
index 0000000000..07a5614013
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png
index a0f9871690..eb72d14362 100644
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
index 07a5614013..3084e5a37f 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
@@ -1,4 +1,4 @@
-
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.png
new file mode 100644
index 0000000000..43ed48251e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.svg
new file mode 100644
index 0000000000..b96e771bfd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png
index 43ed48251e..d2e71c61f7 100644
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg
index b96e771bfd..136b43ef73 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg
@@ -1,4 +1,4 @@
-
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.png
new file mode 100644
index 0000000000..d2e71c61f7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.svg
new file mode 100644
index 0000000000..136b43ef73
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.png
new file mode 100644
index 0000000000..0f64c02330
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.svg
new file mode 100644
index 0000000000..9d87725612
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.png
new file mode 100644
index 0000000000..c78f418585
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.svg
new file mode 100644
index 0000000000..7f8c253549
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png
index cc3a4d3435..39e7978609 100644
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg
index ffe55569fd..4a6dae9904 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg
@@ -1,4 +1,4 @@
-
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.png
new file mode 100644
index 0000000000..39e7978609
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.svg
new file mode 100644
index 0000000000..4a6dae9904
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png
index c5574babb5..41e2735f3b 100644
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
index 9feb601618..1526306421 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
@@ -1,4 +1,4 @@
-
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png
index 2964300622..76019517b5 100644
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg
index 5e98ccb285..131743d9b0 100644
--- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg
@@ -1,4 +1,4 @@
-
+
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.png
new file mode 100644
index 0000000000..76019517b5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.svg
new file mode 100644
index 0000000000..131743d9b0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/resources/lib/qunitjs/qunit.css b/resources/lib/qunitjs/qunit.css
index f1dcd4e1cc..8c78b67e6d 100644
--- a/resources/lib/qunitjs/qunit.css
+++ b/resources/lib/qunitjs/qunit.css
@@ -1,27 +1,27 @@
/*!
- * QUnit 1.18.0
- * http://qunitjs.com/
+ * QUnit 1.22.0
+ * https://qunitjs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
- * http://jquery.org/license
+ * https://jquery.org/license
*
- * Date: 2015-04-03T10:23Z
+ * Date: 2016-02-23T15:57Z
*/
/** Font Family and Sizes */
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
margin: 0;
padding: 0;
}
@@ -68,6 +68,12 @@
overflow: hidden;
}
+#qunit-filteredTest {
+ padding: 0.5em 1em 0.5em 1em;
+ background-color: #F4FF77;
+ color: #366097;
+}
+
#qunit-userAgent {
padding: 0.5em 1em 0.5em 1em;
background-color: #2B81AF;
@@ -114,12 +120,16 @@
display: list-item;
}
+#qunit-tests.hidepass {
+ position: relative;
+}
+
#qunit-tests.hidepass li.running,
#qunit-tests.hidepass li.pass {
visibility: hidden;
position: absolute;
- width: 0px;
- height: 0px;
+ width: 0;
+ height: 0;
padding: 0;
border: 0;
margin: 0;
@@ -162,6 +172,10 @@
border-radius: 5px;
}
+.qunit-source {
+ margin: 0.6em 0 0.3em;
+}
+
.qunit-collapsed {
display: none;
}
diff --git a/resources/lib/qunitjs/qunit.js b/resources/lib/qunitjs/qunit.js
index f3542ca9d4..84873ae576 100644
--- a/resources/lib/qunitjs/qunit.js
+++ b/resources/lib/qunitjs/qunit.js
@@ -1,102 +1,249 @@
/*!
- * QUnit 1.18.0
- * http://qunitjs.com/
+ * QUnit 1.22.0
+ * https://qunitjs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
- * http://jquery.org/license
+ * https://jquery.org/license
*
- * Date: 2015-04-03T10:23Z
+ * Date: 2016-02-23T15:57Z
*/
-(function( window ) {
+(function( global ) {
-var QUnit,
- config,
- onErrorFnPrev,
- loggingCallbacks = {},
- fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" ),
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- // Keep a local reference to Date (GH-283)
- Date = window.Date,
- now = Date.now || function() {
- return new Date().getTime();
- },
- globalStartCalled = false,
- runStarted = false,
- setTimeout = window.setTimeout,
- clearTimeout = window.clearTimeout,
- defined = {
- document: window.document !== undefined,
- setTimeout: window.setTimeout !== undefined,
- sessionStorage: (function() {
- var x = "qunit-test-string";
- try {
- sessionStorage.setItem( x, x );
- sessionStorage.removeItem( x );
- return true;
- } catch ( e ) {
- return false;
+var QUnit = {};
+
+var Date = global.Date;
+var now = Date.now || function() {
+ return new Date().getTime();
+};
+
+var setTimeout = global.setTimeout;
+var clearTimeout = global.clearTimeout;
+
+// Store a local window from the global to allow direct references.
+var window = global.window;
+
+var defined = {
+ document: window && window.document !== undefined,
+ setTimeout: setTimeout !== undefined,
+ sessionStorage: (function() {
+ var x = "qunit-test-string";
+ try {
+ sessionStorage.setItem( x, x );
+ sessionStorage.removeItem( x );
+ return true;
+ } catch ( e ) {
+ return false;
+ }
+ }() )
+};
+
+var fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" );
+var globalStartCalled = false;
+var runStarted = false;
+
+var toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty;
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+ var i, j,
+ result = a.slice();
+
+ for ( i = 0; i < result.length; i++ ) {
+ for ( j = 0; j < b.length; j++ ) {
+ if ( result[ i ] === b[ j ] ) {
+ result.splice( i, 1 );
+ i--;
+ break;
}
- }())
- },
- /**
- * Provides a normalized error string, correcting an issue
- * with IE 7 (and prior) where Error.prototype.toString is
- * not properly implemented
- *
- * Based on http://es5.github.com/#x15.11.4.4
- *
- * @param {String|Error} error
- * @return {String} error message
- */
- errorString = function( error ) {
- var name, message,
- errorString = error.toString();
- if ( errorString.substring( 0, 7 ) === "[object" ) {
- name = error.name ? error.name.toString() : "Error";
- message = error.message ? error.message.toString() : "";
- if ( name && message ) {
- return name + ": " + message;
- } else if ( name ) {
- return name;
- } else if ( message ) {
- return message;
+ }
+ }
+ return result;
+}
+
+// from jquery.js
+function inArray( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+/**
+ * Makes a clone of an object using only Array or Object as base,
+ * and copies over the own enumerable properties.
+ *
+ * @param {Object} obj
+ * @return {Object} New object with only the own properties (recursively).
+ */
+function objectValues ( obj ) {
+ var key, val,
+ vals = QUnit.is( "array", obj ) ? [] : {};
+ for ( key in obj ) {
+ if ( hasOwn.call( obj, key ) ) {
+ val = obj[ key ];
+ vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
+ }
+ }
+ return vals;
+}
+
+function extend( a, b, undefOnly ) {
+ for ( var prop in b ) {
+ if ( hasOwn.call( b, prop ) ) {
+
+ // Avoid "Member not found" error in IE8 caused by messing with window.constructor
+ // This block runs on every environment, so `global` is being used instead of `window`
+ // to avoid errors on node.
+ if ( prop !== "constructor" || a !== global ) {
+ if ( b[ prop ] === undefined ) {
+ delete a[ prop ];
+ } else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
+ a[ prop ] = b[ prop ];
+ }
+ }
+ }
+ }
+
+ return a;
+}
+
+function objectType( obj ) {
+ if ( typeof obj === "undefined" ) {
+ return "undefined";
+ }
+
+ // Consider: typeof null === object
+ if ( obj === null ) {
+ return "null";
+ }
+
+ var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
+ type = match && match[ 1 ];
+
+ switch ( type ) {
+ case "Number":
+ if ( isNaN( obj ) ) {
+ return "nan";
+ }
+ return "number";
+ case "String":
+ case "Boolean":
+ case "Array":
+ case "Set":
+ case "Map":
+ case "Date":
+ case "RegExp":
+ case "Function":
+ case "Symbol":
+ return type.toLowerCase();
+ }
+ if ( typeof obj === "object" ) {
+ return "object";
+ }
+}
+
+// Safe object type checking
+function is( type, obj ) {
+ return QUnit.objectType( obj ) === type;
+}
+
+var getUrlParams = function() {
+ var i, param, name, value;
+ var urlParams = {};
+ var location = window.location;
+ var params = location.search.slice( 1 ).split( "&" );
+ var length = params.length;
+
+ for ( i = 0; i < length; i++ ) {
+ if ( params[ i ] ) {
+ param = params[ i ].split( "=" );
+ name = decodeURIComponent( param[ 0 ] );
+
+ // allow just a key to turn on a flag, e.g., test.html?noglobals
+ value = param.length === 1 ||
+ decodeURIComponent( param.slice( 1 ).join( "=" ) ) ;
+ if ( urlParams[ name ] ) {
+ urlParams[ name ] = [].concat( urlParams[ name ], value );
} else {
- return "Error";
+ urlParams[ name ] = value;
}
- } else {
- return errorString;
}
- },
- /**
- * Makes a clone of an object using only Array or Object as base,
- * and copies over the own enumerable properties.
- *
- * @param {Object} obj
- * @return {Object} New object with only the own properties (recursively).
- */
- objectValues = function( obj ) {
- var key, val,
- vals = QUnit.is( "array", obj ) ? [] : {};
- for ( key in obj ) {
- if ( hasOwn.call( obj, key ) ) {
- val = obj[ key ];
- vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
+ }
+
+ return urlParams;
+};
+
+// Doesn't support IE6 to IE9, it will return undefined on these browsers
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+ offset = offset === undefined ? 4 : offset;
+
+ var stack, include, i;
+
+ if ( e.stack ) {
+ stack = e.stack.split( "\n" );
+ if ( /^error$/i.test( stack[ 0 ] ) ) {
+ stack.shift();
+ }
+ if ( fileName ) {
+ include = [];
+ for ( i = offset; i < stack.length; i++ ) {
+ if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+ break;
+ }
+ include.push( stack[ i ] );
+ }
+ if ( include.length ) {
+ return include.join( "\n" );
}
}
- return vals;
- };
+ return stack[ offset ];
+
+ // Support: Safari <=6 only
+ } else if ( e.sourceURL ) {
+
+ // exclude useless self-reference for generated Error objects
+ if ( /qunit.js$/.test( e.sourceURL ) ) {
+ return;
+ }
+
+ // for actual exceptions, this is useful
+ return e.sourceURL + ":" + e.line;
+ }
+}
+
+function sourceFromStacktrace( offset ) {
+ var error = new Error();
+
+ // Support: Safari <=7 only, IE <=10 - 11 only
+ // Not all browsers generate the `stack` property for `new Error()`, see also #636
+ if ( !error.stack ) {
+ try {
+ throw error;
+ } catch ( err ) {
+ error = err;
+ }
+ }
-QUnit = {};
+ return extractStacktrace( error, offset );
+}
/**
* Config object: Maintain internal state
* Later exposed as QUnit.config
* `config` initialized at top of scope
*/
-config = {
+var config = {
// The queue of tests to run
queue: [],
@@ -110,15 +257,19 @@ config = {
// by default, modify document.title when suite is done
altertitle: true,
+ // HTML Reporter: collapse every test except the first failing test
+ // If false, all failing tests will be expanded
+ collapse: true,
+
// by default, scroll to top of the page when suite is done
scrolltop: true,
- // when enabled, all tests must call expect()
- requireExpects: false,
-
// depth up-to which object will be dumped
maxDepth: 5,
+ // when enabled, all tests must call expect()
+ requireExpects: false,
+
// add checkboxes that are persisted in the query-string
// when enabled, the id is set to `true` as a `QUnit.config` property
urlConfig: [
@@ -131,7 +282,7 @@ config = {
id: "noglobals",
label: "Check for Globals",
tooltip: "Enabling this will test if any test introduces new properties on the " +
- "`window` object. Stored as query-strings."
+ "global object (`window` in Browsers). Stored as query-strings."
},
{
id: "notrycatch",
@@ -144,6 +295,9 @@ config = {
// Set of all modules.
modules: [],
+ // Stack of nested modules
+ moduleStack: [],
+
// The first unnamed module
currentModule: {
name: "",
@@ -153,75 +307,162 @@ config = {
callbacks: {}
};
+var urlParams = defined.document ? getUrlParams() : {};
+
// Push a loose unnamed module to the modules collection
config.modules.push( config.currentModule );
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
- var i, current,
- location = window.location || { search: "", protocol: "file:" },
- params = location.search.slice( 1 ).split( "&" ),
- length = params.length,
- urlParams = {};
+if ( urlParams.filter === true ) {
+ delete urlParams.filter;
+}
- if ( params[ 0 ] ) {
- for ( i = 0; i < length; i++ ) {
- current = params[ i ].split( "=" );
- current[ 0 ] = decodeURIComponent( current[ 0 ] );
+// String search anywhere in moduleName+testName
+config.filter = urlParams.filter;
- // allow just a key to turn on a flag, e.g., test.html?noglobals
- current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
- if ( urlParams[ current[ 0 ] ] ) {
- urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
- } else {
- urlParams[ current[ 0 ] ] = current[ 1 ];
+config.testId = [];
+if ( urlParams.testId ) {
+ // Ensure that urlParams.testId is an array
+ urlParams.testId = decodeURIComponent( urlParams.testId ).split( "," );
+ for (var i = 0; i < urlParams.testId.length; i++ ) {
+ config.testId.push( urlParams.testId[ i ] );
+ }
+}
+
+var loggingCallbacks = {};
+
+// Register logging callbacks
+function registerLoggingCallbacks( obj ) {
+ var i, l, key,
+ callbackNames = [ "begin", "done", "log", "testStart", "testDone",
+ "moduleStart", "moduleDone" ];
+
+ function registerLoggingCallback( key ) {
+ var loggingCallback = function( callback ) {
+ if ( objectType( callback ) !== "function" ) {
+ throw new Error(
+ "QUnit logging methods require a callback function as their first parameters."
+ );
}
+
+ config.callbacks[ key ].push( callback );
+ };
+
+ // DEPRECATED: This will be removed on QUnit 2.0.0+
+ // Stores the registered functions allowing restoring
+ // at verifyLoggingCallbacks() if modified
+ loggingCallbacks[ key ] = loggingCallback;
+
+ return loggingCallback;
+ }
+
+ for ( i = 0, l = callbackNames.length; i < l; i++ ) {
+ key = callbackNames[ i ];
+
+ // Initialize key collection of logging callback
+ if ( objectType( config.callbacks[ key ] ) === "undefined" ) {
+ config.callbacks[ key ] = [];
}
+
+ obj[ key ] = registerLoggingCallback( key );
}
+}
+
+function runLoggingCallbacks( key, args ) {
+ var i, l, callbacks;
- if ( urlParams.filter === true ) {
- delete urlParams.filter;
+ callbacks = config.callbacks[ key ];
+ for ( i = 0, l = callbacks.length; i < l; i++ ) {
+ callbacks[ i ]( args );
}
+}
+
+// DEPRECATED: This will be removed on 2.0.0+
+// This function verifies if the loggingCallbacks were modified by the user
+// If so, it will restore it, assign the given callback and print a console warning
+function verifyLoggingCallbacks() {
+ var loggingCallback, userCallback;
- QUnit.urlParams = urlParams;
+ for ( loggingCallback in loggingCallbacks ) {
+ if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
- // String search anywhere in moduleName+testName
- config.filter = urlParams.filter;
+ userCallback = QUnit[ loggingCallback ];
- if ( urlParams.maxDepth ) {
- config.maxDepth = parseInt( urlParams.maxDepth, 10 ) === -1 ?
- Number.POSITIVE_INFINITY :
- urlParams.maxDepth;
- }
+ // Restore the callback function
+ QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
- config.testId = [];
- if ( urlParams.testId ) {
+ // Assign the deprecated given callback
+ QUnit[ loggingCallback ]( userCallback );
- // Ensure that urlParams.testId is an array
- urlParams.testId = decodeURIComponent( urlParams.testId ).split( "," );
- for ( i = 0; i < urlParams.testId.length; i++ ) {
- config.testId.push( urlParams.testId[ i ] );
+ if ( global.console && global.console.warn ) {
+ global.console.warn(
+ "QUnit." + loggingCallback + " was replaced with a new value.\n" +
+ "Please, check out the documentation on how to apply logging callbacks.\n" +
+ "Reference: https://api.qunitjs.com/category/callbacks/"
+ );
+ }
}
}
+}
- // Figure out if we're running the tests from a server or not
- QUnit.isLocal = location.protocol === "file:";
+( function() {
+ if ( !defined.document ) {
+ return;
+ }
- // Expose the current QUnit version
- QUnit.version = "1.18.0";
-}());
+ // `onErrorFnPrev` initialized at top of scope
+ // Preserve other handlers
+ var onErrorFnPrev = window.onerror;
+
+ // Cover uncaught exceptions
+ // Returning true will suppress the default browser handler,
+ // returning false will let it run.
+ window.onerror = function( error, filePath, linerNr ) {
+ var ret = false;
+ if ( onErrorFnPrev ) {
+ ret = onErrorFnPrev( error, filePath, linerNr );
+ }
+
+ // Treat return value as window.onerror itself does,
+ // Only do our handling if not suppressed.
+ if ( ret !== true ) {
+ if ( QUnit.config.current ) {
+ if ( QUnit.config.current.ignoreGlobalErrors ) {
+ return true;
+ }
+ QUnit.pushFailure( error, filePath + ":" + linerNr );
+ } else {
+ QUnit.test( "global failure", extend(function() {
+ QUnit.pushFailure( error, filePath + ":" + linerNr );
+ }, { validTest: true } ) );
+ }
+ return false;
+ }
+
+ return ret;
+ };
+} )();
+
+QUnit.urlParams = urlParams;
+
+// Figure out if we're running the tests from a server or not
+QUnit.isLocal = !( defined.document && window.location.protocol !== "file:" );
+
+// Expose the current QUnit version
+QUnit.version = "1.22.0";
-// Root QUnit object.
-// `QUnit` initialized at top of scope
extend( QUnit, {
// call on start of module test to prepend name to all tests
- module: function( name, testEnvironment ) {
- var currentModule = {
- name: name,
- testEnvironment: testEnvironment,
- tests: []
- };
+ module: function( name, testEnvironment, executeNow ) {
+ var module, moduleFns;
+ var currentModule = config.currentModule;
+
+ if ( arguments.length === 2 ) {
+ if ( testEnvironment instanceof Function ) {
+ executeNow = testEnvironment;
+ testEnvironment = undefined;
+ }
+ }
// DEPRECATED: handles setup/teardown functions,
// beforeEach and afterEach should be used instead
@@ -234,46 +475,61 @@ extend( QUnit, {
delete testEnvironment.teardown;
}
- config.modules.push( currentModule );
- config.currentModule = currentModule;
- },
+ module = createModule();
- // DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
- asyncTest: function( testName, expected, callback ) {
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
+ moduleFns = {
+ beforeEach: setHook( module, "beforeEach" ),
+ afterEach: setHook( module, "afterEach" )
+ };
- QUnit.test( testName, expected, callback, true );
- },
+ if ( executeNow instanceof Function ) {
+ config.moduleStack.push( module );
+ setCurrentModule( module );
+ executeNow.call( module.testEnvironment, moduleFns );
+ config.moduleStack.pop();
+ module = module.parentModule || currentModule;
+ }
+
+ setCurrentModule( module );
+
+ function createModule() {
+ var parentModule = config.moduleStack.length ?
+ config.moduleStack.slice( -1 )[ 0 ] : null;
+ var moduleName = parentModule !== null ?
+ [ parentModule.name, name ].join( " > " ) : name;
+ var module = {
+ name: moduleName,
+ parentModule: parentModule,
+ tests: []
+ };
- test: function( testName, expected, callback, async ) {
- var test;
+ var env = {};
+ if ( parentModule ) {
+ extend( env, parentModule.testEnvironment );
+ delete env.beforeEach;
+ delete env.afterEach;
+ }
+ extend( env, testEnvironment );
+ module.testEnvironment = env;
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
+ config.modules.push( module );
+ return module;
}
- test = new Test({
- testName: testName,
- expected: expected,
- async: async,
- callback: callback
- });
+ function setCurrentModule( module ) {
+ config.currentModule = module;
+ }
- test.queue();
},
- skip: function( testName ) {
- var test = new Test({
- testName: testName,
- skip: true
- });
+ // DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
+ asyncTest: asyncTest,
- test.queue();
- },
+ test: test,
+
+ skip: skip,
+
+ only: only,
// DEPRECATED: The functionality of QUnit.start() will be altered in QUnit 2.0.
// In QUnit 2.0, invoking it will ONLY affect the `QUnit.config.autostart` blocking behavior.
@@ -301,6 +557,17 @@ extend( QUnit, {
// If a test is running, adjust its semaphore
config.current.semaphore -= count || 1;
+ // If semaphore is non-numeric, throw error
+ if ( isNaN( config.current.semaphore ) ) {
+ config.current.semaphore = 0;
+
+ QUnit.pushFailure(
+ "Called start() with a non-numeric decrement.",
+ sourceFromStacktrace( 2 )
+ );
+ return;
+ }
+
// Don't start until equal number of stop-calls
if ( config.current.semaphore > 0 ) {
return;
@@ -337,43 +604,9 @@ extend( QUnit, {
config: config,
- // Safe object type checking
- is: function( type, obj ) {
- return QUnit.objectType( obj ) === type;
- },
-
- objectType: function( obj ) {
- if ( typeof obj === "undefined" ) {
- return "undefined";
- }
-
- // Consider: typeof null === object
- if ( obj === null ) {
- return "null";
- }
-
- var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
- type = match && match[ 1 ] || "";
+ is: is,
- switch ( type ) {
- case "Number":
- if ( isNaN( obj ) ) {
- return "nan";
- }
- return "number";
- case "String":
- case "Boolean":
- case "Array":
- case "Date":
- case "RegExp":
- case "Function":
- return type.toLowerCase();
- }
- if ( typeof obj === "object" ) {
- return "object";
- }
- return undefined;
- },
+ objectType: objectType,
extend: extend,
@@ -395,174 +628,50 @@ extend( QUnit, {
if ( config.autostart ) {
resumeProcessing();
}
+ },
+
+ stack: function( offset ) {
+ offset = ( offset || 0 ) + 2;
+ return sourceFromStacktrace( offset );
}
});
-// Register logging callbacks
-(function() {
- var i, l, key,
- callbacks = [ "begin", "done", "log", "testStart", "testDone",
- "moduleStart", "moduleDone" ];
-
- function registerLoggingCallback( key ) {
- var loggingCallback = function( callback ) {
- if ( QUnit.objectType( callback ) !== "function" ) {
- throw new Error(
- "QUnit logging methods require a callback function as their first parameters."
- );
- }
+registerLoggingCallbacks( QUnit );
- config.callbacks[ key ].push( callback );
- };
+function begin() {
+ var i, l,
+ modulesLog = [];
- // DEPRECATED: This will be removed on QUnit 2.0.0+
- // Stores the registered functions allowing restoring
- // at verifyLoggingCallbacks() if modified
- loggingCallbacks[ key ] = loggingCallback;
+ // If the test run hasn't officially begun yet
+ if ( !config.started ) {
- return loggingCallback;
- }
+ // Record the time of the test run's beginning
+ config.started = now();
- for ( i = 0, l = callbacks.length; i < l; i++ ) {
- key = callbacks[ i ];
+ verifyLoggingCallbacks();
- // Initialize key collection of logging callback
- if ( QUnit.objectType( config.callbacks[ key ] ) === "undefined" ) {
- config.callbacks[ key ] = [];
+ // Delete the loose unnamed module if unused.
+ if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
+ config.modules.shift();
}
- QUnit[ key ] = registerLoggingCallback( key );
- }
-})();
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will suppress the default browser handler,
-// returning false will let it run.
-window.onerror = function( error, filePath, linerNr ) {
- var ret = false;
- if ( onErrorFnPrev ) {
- ret = onErrorFnPrev( error, filePath, linerNr );
- }
-
- // Treat return value as window.onerror itself does,
- // Only do our handling if not suppressed.
- if ( ret !== true ) {
- if ( QUnit.config.current ) {
- if ( QUnit.config.current.ignoreGlobalErrors ) {
- return true;
- }
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- } else {
- QUnit.test( "global failure", extend(function() {
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- }, { validTest: true } ) );
+ // Avoid unnecessary information by not logging modules' test environments
+ for ( i = 0, l = config.modules.length; i < l; i++ ) {
+ modulesLog.push({
+ name: config.modules[ i ].name,
+ tests: config.modules[ i ].tests
+ });
}
- return false;
- }
-
- return ret;
-};
-
-function done() {
- var runtime, passed;
-
- config.autorun = true;
- // Log the last module results
- if ( config.previousModule ) {
- runLoggingCallbacks( "moduleDone", {
- name: config.previousModule.name,
- tests: config.previousModule.tests,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all,
- runtime: now() - config.moduleStats.started
+ // The test run is officially beginning now
+ runLoggingCallbacks( "begin", {
+ totalTests: Test.count,
+ modules: modulesLog
});
}
- delete config.previousModule;
-
- runtime = now() - config.started;
- passed = config.stats.all - config.stats.bad;
-
- runLoggingCallbacks( "done", {
- failed: config.stats.bad,
- passed: passed,
- total: config.stats.all,
- runtime: runtime
- });
-}
-
-// Doesn't support IE6 to IE9, it will return undefined on these browsers
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
- offset = offset === undefined ? 4 : offset;
-
- var stack, include, i;
-
- if ( e.stack ) {
- stack = e.stack.split( "\n" );
- if ( /^error$/i.test( stack[ 0 ] ) ) {
- stack.shift();
- }
- if ( fileName ) {
- include = [];
- for ( i = offset; i < stack.length; i++ ) {
- if ( stack[ i ].indexOf( fileName ) !== -1 ) {
- break;
- }
- include.push( stack[ i ] );
- }
- if ( include.length ) {
- return include.join( "\n" );
- }
- }
- return stack[ offset ];
-
- // Support: Safari <=6 only
- } else if ( e.sourceURL ) {
-
- // exclude useless self-reference for generated Error objects
- if ( /qunit.js$/.test( e.sourceURL ) ) {
- return;
- }
-
- // for actual exceptions, this is useful
- return e.sourceURL + ":" + e.line;
- }
-}
-
-function sourceFromStacktrace( offset ) {
- var error = new Error();
-
- // Support: Safari <=7 only, IE <=10 - 11 only
- // Not all browsers generate the `stack` property for `new Error()`, see also #636
- if ( !error.stack ) {
- try {
- throw error;
- } catch ( err ) {
- error = err;
- }
- }
-
- return extractStacktrace( error, offset );
-}
-
-function synchronize( callback, last ) {
- if ( QUnit.objectType( callback ) === "array" ) {
- while ( callback.length ) {
- synchronize( callback.shift() );
- }
- return;
- }
- config.queue.push( callback );
- if ( config.autorun && !config.blocking ) {
- process( last );
- }
+ config.blocking = false;
+ process( true );
}
function process( last ) {
@@ -592,40 +701,21 @@ function process( last ) {
}
}
-function begin() {
- var i, l,
- modulesLog = [];
-
- // If the test run hasn't officially begun yet
- if ( !config.started ) {
-
- // Record the time of the test run's beginning
- config.started = now();
-
- verifyLoggingCallbacks();
-
- // Delete the loose unnamed module if unused.
- if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
- config.modules.shift();
- }
-
- // Avoid unnecessary information by not logging modules' test environments
- for ( i = 0, l = config.modules.length; i < l; i++ ) {
- modulesLog.push({
- name: config.modules[ i ].name,
- tests: config.modules[ i ].tests
- });
- }
+function pauseProcessing() {
+ config.blocking = true;
- // The test run is officially beginning now
- runLoggingCallbacks( "begin", {
- totalTests: Test.count,
- modules: modulesLog
- });
+ if ( config.testTimeout && defined.setTimeout ) {
+ clearTimeout( config.timeout );
+ config.timeout = setTimeout(function() {
+ if ( config.current ) {
+ config.current.semaphore = 0;
+ QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
+ } else {
+ throw new Error( "Test timed out" );
+ }
+ resumeProcessing();
+ }, config.testTimeout );
}
-
- config.blocking = false;
- process( true );
}
function resumeProcessing() {
@@ -648,143 +738,47 @@ function resumeProcessing() {
}
}
-function pauseProcessing() {
- config.blocking = true;
-
- if ( config.testTimeout && defined.setTimeout ) {
- clearTimeout( config.timeout );
- config.timeout = setTimeout(function() {
- if ( config.current ) {
- config.current.semaphore = 0;
- QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
- } else {
- throw new Error( "Test timed out" );
- }
- resumeProcessing();
- }, config.testTimeout );
- }
-}
+function done() {
+ var runtime, passed;
-function saveGlobal() {
- config.pollution = [];
+ config.autorun = true;
- if ( config.noglobals ) {
- for ( var key in window ) {
- if ( hasOwn.call( window, key ) ) {
- // in Opera sometimes DOM element ids show up here, ignore them
- if ( /^qunit-test-output/.test( key ) ) {
- continue;
- }
- config.pollution.push( key );
- }
- }
- }
-}
-
-function checkPollution() {
- var newGlobals,
- deletedGlobals,
- old = config.pollution;
-
- saveGlobal();
-
- newGlobals = diff( config.pollution, old );
- if ( newGlobals.length > 0 ) {
- QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
- }
-
- deletedGlobals = diff( old, config.pollution );
- if ( deletedGlobals.length > 0 ) {
- QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
- }
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
- var i, j,
- result = a.slice();
-
- for ( i = 0; i < result.length; i++ ) {
- for ( j = 0; j < b.length; j++ ) {
- if ( result[ i ] === b[ j ] ) {
- result.splice( i, 1 );
- i--;
- break;
- }
- }
+ // Log the last module results
+ if ( config.previousModule ) {
+ runLoggingCallbacks( "moduleDone", {
+ name: config.previousModule.name,
+ tests: config.previousModule.tests,
+ failed: config.moduleStats.bad,
+ passed: config.moduleStats.all - config.moduleStats.bad,
+ total: config.moduleStats.all,
+ runtime: now() - config.moduleStats.started
+ });
}
- return result;
-}
-
-function extend( a, b, undefOnly ) {
- for ( var prop in b ) {
- if ( hasOwn.call( b, prop ) ) {
+ delete config.previousModule;
- // Avoid "Member not found" error in IE8 caused by messing with window.constructor
- if ( !( prop === "constructor" && a === window ) ) {
- if ( b[ prop ] === undefined ) {
- delete a[ prop ];
- } else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
- a[ prop ] = b[ prop ];
- }
- }
- }
- }
+ runtime = now() - config.started;
+ passed = config.stats.all - config.stats.bad;
- return a;
+ runLoggingCallbacks( "done", {
+ failed: config.stats.bad,
+ passed: passed,
+ total: config.stats.all,
+ runtime: runtime
+ });
}
-function runLoggingCallbacks( key, args ) {
- var i, l, callbacks;
-
- callbacks = config.callbacks[ key ];
- for ( i = 0, l = callbacks.length; i < l; i++ ) {
- callbacks[ i ]( args );
+function setHook( module, hookName ) {
+ if ( module.testEnvironment === undefined ) {
+ module.testEnvironment = {};
}
-}
-
-// DEPRECATED: This will be removed on 2.0.0+
-// This function verifies if the loggingCallbacks were modified by the user
-// If so, it will restore it, assign the given callback and print a console warning
-function verifyLoggingCallbacks() {
- var loggingCallback, userCallback;
-
- for ( loggingCallback in loggingCallbacks ) {
- if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
-
- userCallback = QUnit[ loggingCallback ];
-
- // Restore the callback function
- QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
- // Assign the deprecated given callback
- QUnit[ loggingCallback ]( userCallback );
-
- if ( window.console && window.console.warn ) {
- window.console.warn(
- "QUnit." + loggingCallback + " was replaced with a new value.\n" +
- "Please, check out the documentation on how to apply logging callbacks.\n" +
- "Reference: http://api.qunitjs.com/category/callbacks/"
- );
- }
- }
- }
+ return function( callback ) {
+ module.testEnvironment[ hookName ] = callback;
+ };
}
-// from jquery.js
-function inArray( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
-}
+var focused = false;
+var priorityCount = 0;
function Test( settings ) {
var i, l;
@@ -858,9 +852,11 @@ Test.prototype = {
config.current = this;
+ if ( this.module.testEnvironment ) {
+ delete this.module.testEnvironment.beforeEach;
+ delete this.module.testEnvironment.afterEach;
+ }
this.testEnvironment = extend( {}, this.module.testEnvironment );
- delete this.testEnvironment.beforeEach;
- delete this.testEnvironment.afterEach;
this.started = now();
runLoggingCallbacks( "testStart", {
@@ -886,14 +882,12 @@ Test.prototype = {
this.callbackStarted = now();
if ( config.notrycatch ) {
- promise = this.callback.call( this.testEnvironment, this.assert );
- this.resolvePromise( promise );
+ runTest( this );
return;
}
try {
- promise = this.callback.call( this.testEnvironment, this.assert );
- this.resolvePromise( promise );
+ runTest( this );
} catch ( e ) {
this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " +
this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
@@ -906,6 +900,11 @@ Test.prototype = {
QUnit.start();
}
}
+
+ function runTest( test ) {
+ promise = test.callback.call( test.testEnvironment, test.assert );
+ test.resolvePromise( promise );
+ }
},
after: function() {
@@ -918,16 +917,19 @@ Test.prototype = {
return function runHook() {
config.current = test;
if ( config.notrycatch ) {
- promise = hook.call( test.testEnvironment, test.assert );
- test.resolvePromise( promise, hookName );
+ callHook();
return;
}
try {
- promise = hook.call( test.testEnvironment, test.assert );
- test.resolvePromise( promise, hookName );
+ callHook();
} catch ( error ) {
test.pushFailure( hookName + " failed on " + test.testName + ": " +
- ( error.message || error ), extractStacktrace( error, 0 ) );
+ ( error.message || error ), extractStacktrace( error, 0 ) );
+ }
+
+ function callHook() {
+ promise = hook.call( test.testEnvironment, test.assert );
+ test.resolvePromise( promise, hookName );
}
};
},
@@ -936,16 +938,20 @@ Test.prototype = {
hooks: function( handler ) {
var hooks = [];
- // Hooks are ignored on skipped tests
- if ( this.skip ) {
- return hooks;
+ function processHooks( test, module ) {
+ if ( module.parentModule ) {
+ processHooks( test, module.parentModule );
+ }
+ if ( module.testEnvironment &&
+ QUnit.objectType( module.testEnvironment[ handler ] ) === "function" ) {
+ hooks.push( test.queueHook( module.testEnvironment[ handler ], handler ) );
+ }
}
- if ( this.module.testEnvironment &&
- QUnit.objectType( this.module.testEnvironment[ handler ] ) === "function" ) {
- hooks.push( this.queueHook( this.module.testEnvironment[ handler ], handler ) );
+ // Hooks are ignored on skipped tests
+ if ( !this.skip ) {
+ processHooks( this, this.module );
}
-
return hooks;
},
@@ -990,6 +996,9 @@ Test.prototype = {
assertions: this.assertions,
testId: this.testId,
+ // Source of Test
+ source: this.stack,
+
// DEPRECATED: this property will be removed in 2.0.0, use runtime instead
duration: this.runtime
});
@@ -1003,7 +1012,7 @@ Test.prototype = {
},
queue: function() {
- var bad,
+ var priority,
test = this;
if ( !this.valid() ) {
@@ -1019,7 +1028,6 @@ Test.prototype = {
},
test.hooks( "beforeEach" ),
-
function() {
test.run();
},
@@ -1035,32 +1043,30 @@ Test.prototype = {
]);
}
- // `bad` initialized at top of scope
- // defer when previous test run passed, if storage is available
- bad = QUnit.config.reorder && defined.sessionStorage &&
+ // Prioritize previously failed tests, detected from sessionStorage
+ priority = QUnit.config.reorder && defined.sessionStorage &&
+sessionStorage.getItem( "qunit-test-" + this.module.name + "-" + this.testName );
- if ( bad ) {
- run();
- } else {
- synchronize( run, true );
- }
+ return synchronize( run, priority );
},
- push: function( result, actual, expected, message ) {
+ pushResult: function( resultInfo ) {
+
+ // resultInfo = { result, actual, expected, message, negative }
var source,
details = {
module: this.module.name,
name: this.testName,
- result: result,
- message: message,
- actual: actual,
- expected: expected,
+ result: resultInfo.result,
+ message: resultInfo.message,
+ actual: resultInfo.actual,
+ expected: resultInfo.expected,
testId: this.testId,
+ negative: resultInfo.negative || false,
runtime: now() - this.started
};
- if ( !result ) {
+ if ( !resultInfo.result ) {
source = sourceFromStacktrace();
if ( source ) {
@@ -1071,13 +1077,13 @@ Test.prototype = {
runLoggingCallbacks( "log", details );
this.assertions.push({
- result: !!result,
- message: message
+ result: !!resultInfo.result,
+ message: resultInfo.message
});
},
pushFailure: function( message, source, actual ) {
- if ( !this instanceof Test ) {
+ if ( !( this instanceof Test ) ) {
throw new Error( "pushFailure() assertion outside test context, was " +
sourceFromStacktrace( 2 ) );
}
@@ -1113,7 +1119,7 @@ Test.prototype = {
QUnit.stop();
then.call(
promise,
- QUnit.start,
+ function() { QUnit.start(); },
function( error ) {
message = "Promise rejected " +
( !phase ? "during" : phase.replace( /Each$/, "" ) ) +
@@ -1132,10 +1138,21 @@ Test.prototype = {
},
valid: function() {
- var include,
- filter = config.filter && config.filter.toLowerCase(),
+ var filter = config.filter,
+ regexFilter = /^(!?)\/([\w\W]*)\/(i?$)/.exec( filter ),
module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(),
- fullName = ( this.module.name + ": " + this.testName ).toLowerCase();
+ fullName = ( this.module.name + ": " + this.testName );
+
+ function testInModuleChain( testModule ) {
+ var testModuleName = testModule.name ? testModule.name.toLowerCase() : null;
+ if ( testModuleName === module ) {
+ return true;
+ } else if ( testModule.parentModule ) {
+ return testInModuleChain( testModule.parentModule );
+ } else {
+ return false;
+ }
+ }
// Internally-generated tests are always valid
if ( this.callback && this.callback.validTest ) {
@@ -1146,7 +1163,7 @@ Test.prototype = {
return false;
}
- if ( module && ( !this.module.name || this.module.name.toLowerCase() !== module ) ) {
+ if ( module && !testInModuleChain( this.module ) ) {
return false;
}
@@ -1154,7 +1171,23 @@ Test.prototype = {
return true;
}
- include = filter.charAt( 0 ) !== "!";
+ return regexFilter ?
+ this.regexFilter( !!regexFilter[1], regexFilter[2], regexFilter[3], fullName ) :
+ this.stringFilter( filter, fullName );
+ },
+
+ regexFilter: function( exclude, pattern, flags, fullName ) {
+ var regex = new RegExp( pattern, flags );
+ var match = regex.test( fullName );
+
+ return match !== exclude;
+ },
+
+ stringFilter: function( filter, fullName ) {
+ filter = filter.toLowerCase();
+ fullName = fullName.toLowerCase();
+
+ var include = filter.charAt( 0 ) !== "!";
if ( !include ) {
filter = filter.slice( 1 );
}
@@ -1167,7 +1200,6 @@ Test.prototype = {
// Otherwise, do the opposite
return !include;
}
-
};
// Resets the test setup. Useful for tests that modify the DOM.
@@ -1180,7 +1212,7 @@ QUnit.reset = function() {
// Return on non-browser environments
// This is necessary to not break on node tests
- if ( typeof window === "undefined" ) {
+ if ( !defined.document ) {
return;
}
@@ -1228,6 +1260,129 @@ function generateHash( module, testName ) {
return hex.slice( -8 );
}
+function synchronize( callback, priority ) {
+ var last = !priority;
+
+ if ( QUnit.objectType( callback ) === "array" ) {
+ while ( callback.length ) {
+ synchronize( callback.shift() );
+ }
+ return;
+ }
+
+ if ( priority ) {
+ config.queue.splice( priorityCount++, 0, callback );
+ } else {
+ config.queue.push( callback );
+ }
+
+ if ( config.autorun && !config.blocking ) {
+ process( last );
+ }
+}
+
+function saveGlobal() {
+ config.pollution = [];
+
+ if ( config.noglobals ) {
+ for ( var key in global ) {
+ if ( hasOwn.call( global, key ) ) {
+
+ // in Opera sometimes DOM element ids show up here, ignore them
+ if ( /^qunit-test-output/.test( key ) ) {
+ continue;
+ }
+ config.pollution.push( key );
+ }
+ }
+ }
+}
+
+function checkPollution() {
+ var newGlobals,
+ deletedGlobals,
+ old = config.pollution;
+
+ saveGlobal();
+
+ newGlobals = diff( config.pollution, old );
+ if ( newGlobals.length > 0 ) {
+ QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
+ }
+
+ deletedGlobals = diff( old, config.pollution );
+ if ( deletedGlobals.length > 0 ) {
+ QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
+ }
+}
+
+// Will be exposed as QUnit.asyncTest
+function asyncTest( testName, expected, callback ) {
+ if ( arguments.length === 2 ) {
+ callback = expected;
+ expected = null;
+ }
+
+ QUnit.test( testName, expected, callback, true );
+}
+
+// Will be exposed as QUnit.test
+function test( testName, expected, callback, async ) {
+ if ( focused ) { return; }
+
+ var newTest;
+
+ if ( arguments.length === 2 ) {
+ callback = expected;
+ expected = null;
+ }
+
+ newTest = new Test({
+ testName: testName,
+ expected: expected,
+ async: async,
+ callback: callback
+ });
+
+ newTest.queue();
+}
+
+// Will be exposed as QUnit.skip
+function skip( testName ) {
+ if ( focused ) { return; }
+
+ var test = new Test({
+ testName: testName,
+ skip: true
+ });
+
+ test.queue();
+}
+
+// Will be exposed as QUnit.only
+function only( testName, expected, callback, async ) {
+ var newTest;
+
+ if ( focused ) { return; }
+
+ QUnit.config.queue.length = 0;
+ focused = true;
+
+ if ( arguments.length === 2 ) {
+ callback = expected;
+ expected = null;
+ }
+
+ newTest = new Test({
+ testName: testName,
+ expected: expected,
+ async: async,
+ callback: callback
+ });
+
+ newTest.queue();
+}
+
function Assert( testContext ) {
this.test = testContext;
}
@@ -1245,30 +1400,55 @@ QUnit.assert = Assert.prototype = {
}
},
- // Increment this Test's semaphore counter, then return a single-use function that
+ // Increment this Test's semaphore counter, then return a function that
// decrements that counter a maximum of once.
- async: function() {
+ async: function( count ) {
var test = this.test,
- popped = false;
+ popped = false,
+ acceptCallCount = count;
+
+ if ( typeof acceptCallCount === "undefined" ) {
+ acceptCallCount = 1;
+ }
test.semaphore += 1;
test.usedAsync = true;
pauseProcessing();
return function done() {
- if ( !popped ) {
- test.semaphore -= 1;
- popped = true;
- resumeProcessing();
- } else {
- test.pushFailure( "Called the callback returned from `assert.async` more than once",
+
+ if ( popped ) {
+ test.pushFailure( "Too many calls to the `assert.async` callback",
sourceFromStacktrace( 2 ) );
+ return;
+ }
+ acceptCallCount -= 1;
+ if ( acceptCallCount > 0 ) {
+ return;
}
+
+ test.semaphore -= 1;
+ popped = true;
+ resumeProcessing();
};
},
// Exports test.push() to the user API
- push: function( /* result, actual, expected, message */ ) {
+ // Alias of pushResult.
+ push: function( result, actual, expected, message, negative ) {
+ var currentAssert = this instanceof Assert ? this : QUnit.config.current.assert;
+ return currentAssert.pushResult( {
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: negative
+ } );
+ },
+
+ pushResult: function( resultInfo ) {
+
+ // resultInfo = { result, actual, expected, message, negative }
var assert = this,
currentTest = ( assert instanceof Assert && assert.test ) || QUnit.config.current;
@@ -1291,57 +1471,112 @@ QUnit.assert = Assert.prototype = {
if ( !( assert instanceof Assert ) ) {
assert = currentTest.assert;
}
- return assert.test.push.apply( assert.test, arguments );
+
+ return assert.test.pushResult( resultInfo );
},
ok: function( result, message ) {
message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
QUnit.dump.parse( result ) );
- this.push( !!result, result, true, message );
+ this.pushResult( {
+ result: !!result,
+ actual: result,
+ expected: true,
+ message: message
+ } );
},
notOk: function( result, message ) {
message = message || ( !result ? "okay" : "failed, expected argument to be falsy, was: " +
QUnit.dump.parse( result ) );
- this.push( !result, result, false, message );
+ this.pushResult( {
+ result: !result,
+ actual: result,
+ expected: false,
+ message: message
+ } );
},
equal: function( actual, expected, message ) {
/*jshint eqeqeq:false */
- this.push( expected == actual, actual, expected, message );
+ this.pushResult( {
+ result: expected == actual,
+ actual: actual,
+ expected: expected,
+ message: message
+ } );
},
notEqual: function( actual, expected, message ) {
/*jshint eqeqeq:false */
- this.push( expected != actual, actual, expected, message );
+ this.pushResult( {
+ result: expected != actual,
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ } );
},
propEqual: function( actual, expected, message ) {
actual = objectValues( actual );
expected = objectValues( expected );
- this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+ this.pushResult( {
+ result: QUnit.equiv( actual, expected ),
+ actual: actual,
+ expected: expected,
+ message: message
+ } );
},
notPropEqual: function( actual, expected, message ) {
actual = objectValues( actual );
expected = objectValues( expected );
- this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+ this.pushResult( {
+ result: !QUnit.equiv( actual, expected ),
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ } );
},
deepEqual: function( actual, expected, message ) {
- this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+ this.pushResult( {
+ result: QUnit.equiv( actual, expected ),
+ actual: actual,
+ expected: expected,
+ message: message
+ } );
},
notDeepEqual: function( actual, expected, message ) {
- this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+ this.pushResult( {
+ result: !QUnit.equiv( actual, expected ),
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ } );
},
strictEqual: function( actual, expected, message ) {
- this.push( expected === actual, actual, expected, message );
+ this.pushResult( {
+ result: expected === actual,
+ actual: actual,
+ expected: expected,
+ message: message
+ } );
},
notStrictEqual: function( actual, expected, message ) {
- this.push( expected !== actual, actual, expected, message );
+ this.pushResult( {
+ result: expected !== actual,
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ } );
},
"throws": function( block, expected, message ) {
@@ -1397,233 +1632,280 @@ QUnit.assert = Assert.prototype = {
}
}
- currentTest.assert.push( ok, actual, expectedOutput, message );
+ currentTest.assert.pushResult( {
+ result: ok,
+ actual: actual,
+ expected: expectedOutput,
+ message: message
+ } );
}
};
-// Provide an alternative to assert.throws(), for enviroments that consider throws a reserved word
+// Provide an alternative to assert.throws(), for environments that consider throws a reserved word
// Known to us are: Closure Compiler, Narwhal
(function() {
/*jshint sub:true */
Assert.prototype.raises = Assert.prototype[ "throws" ];
}());
+function errorString( error ) {
+ var name, message,
+ resultErrorString = error.toString();
+ if ( resultErrorString.substring( 0, 7 ) === "[object" ) {
+ name = error.name ? error.name.toString() : "Error";
+ message = error.message ? error.message.toString() : "";
+ if ( name && message ) {
+ return name + ": " + message;
+ } else if ( name ) {
+ return name;
+ } else if ( message ) {
+ return message;
+ } else {
+ return "Error";
+ }
+ } else {
+ return resultErrorString;
+ }
+}
+
// Test for equality any JavaScript type.
// Author: Philippe Rathé
QUnit.equiv = (function() {
- // Call the o related callback with the given arguments.
- function bindCallbacks( o, callbacks, args ) {
- var prop = QUnit.objectType( o );
- if ( prop ) {
- if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
- return callbacks[ prop ].apply( callbacks, args );
- } else {
- return callbacks[ prop ]; // or undefined
- }
- }
- }
+ // Stack to decide between skip/abort functions
+ var callers = [];
- // the real equiv function
- var innerEquiv,
+ // Stack to avoiding loops from circular referencing
+ var parents = [];
+ var parentsB = [];
- // stack to decide between skip/abort functions
- callers = [],
+ var getProto = Object.getPrototypeOf || function( obj ) {
- // stack to avoiding loops from circular referencing
- parents = [],
- parentsB = [],
+ /*jshint proto: true */
+ return obj.__proto__;
+ };
- getProto = Object.getPrototypeOf || function( obj ) {
- /* jshint camelcase: false, proto: true */
- return obj.__proto__;
- },
- callbacks = (function() {
+ function useStrictEquality( b, a ) {
- // for string, boolean, number and null
- function useStrictEquality( b, a ) {
+ // To catch short annotation VS 'new' annotation of a declaration. e.g.:
+ // `var i = 1;`
+ // `var j = new Number(1);`
+ if ( typeof a === "object" ) {
+ a = a.valueOf();
+ }
+ if ( typeof b === "object" ) {
+ b = b.valueOf();
+ }
- /*jshint eqeqeq:false */
- if ( b instanceof a.constructor || a instanceof b.constructor ) {
+ return a === b;
+ }
- // to catch short annotation VS 'new' annotation of a
- // declaration
- // e.g. var i = 1;
- // var j = new Number(1);
- return a == b;
- } else {
- return a === b;
- }
- }
+ function compareConstructors( a, b ) {
+ var protoA = getProto( a );
+ var protoB = getProto( b );
+
+ // Comparing constructors is more strict than using `instanceof`
+ if ( a.constructor === b.constructor ) {
+ return true;
+ }
- return {
- "string": useStrictEquality,
- "boolean": useStrictEquality,
- "number": useStrictEquality,
- "null": useStrictEquality,
- "undefined": useStrictEquality,
+ // Ref #851
+ // If the obj prototype descends from a null constructor, treat it
+ // as a null prototype.
+ if ( protoA && protoA.constructor === null ) {
+ protoA = null;
+ }
+ if ( protoB && protoB.constructor === null ) {
+ protoB = null;
+ }
- "nan": function( b ) {
- return isNaN( b );
- },
+ // Allow objects with no prototype to be equivalent to
+ // objects with Object as their constructor.
+ if ( ( protoA === null && protoB === Object.prototype ) ||
+ ( protoB === null && protoA === Object.prototype ) ) {
+ return true;
+ }
- "date": function( b, a ) {
- return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
- },
+ return false;
+ }
- "regexp": function( b, a ) {
- return QUnit.objectType( b ) === "regexp" &&
+ function getRegExpFlags( regexp ) {
+ return "flags" in regexp ? regexp.flags : regexp.toString().match( /[gimuy]*$/ )[ 0 ];
+ }
- // the regex itself
- a.source === b.source &&
+ var callbacks = {
+ "string": useStrictEquality,
+ "boolean": useStrictEquality,
+ "number": useStrictEquality,
+ "null": useStrictEquality,
+ "undefined": useStrictEquality,
+ "symbol": useStrictEquality,
+ "date": useStrictEquality,
- // and its modifiers
- a.global === b.global &&
+ "nan": function() {
+ return true;
+ },
- // (gmi) ...
- a.ignoreCase === b.ignoreCase &&
- a.multiline === b.multiline &&
- a.sticky === b.sticky;
- },
+ "regexp": function( b, a ) {
+ return a.source === b.source &&
- // - skip when the property is a method of an instance (OOP)
- // - abort otherwise,
- // initial === would have catch identical references anyway
- "function": function() {
- var caller = callers[ callers.length - 1 ];
- return caller !== Object && typeof caller !== "undefined";
- },
+ // Include flags in the comparison
+ getRegExpFlags( a ) === getRegExpFlags( b );
+ },
- "array": function( b, a ) {
- var i, j, len, loop, aCircular, bCircular;
+ // - skip when the property is a method of an instance (OOP)
+ // - abort otherwise,
+ // initial === would have catch identical references anyway
+ "function": function() {
+ var caller = callers[ callers.length - 1 ];
+ return caller !== Object && typeof caller !== "undefined";
+ },
- // b could be an object literal here
- if ( QUnit.objectType( b ) !== "array" ) {
- return false;
- }
+ "array": function( b, a ) {
+ var i, j, len, loop, aCircular, bCircular;
- len = a.length;
- if ( len !== b.length ) {
- // safe and faster
- return false;
- }
+ len = a.length;
+ if ( len !== b.length ) {
+ // safe and faster
+ return false;
+ }
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
- for ( i = 0; i < len; i++ ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[ j ] === a[ i ];
- bCircular = parentsB[ j ] === b[ i ];
- if ( aCircular || bCircular ) {
- if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
- loop = true;
- } else {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- }
- if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+ // Track reference to avoid circular references
+ parents.push( a );
+ parentsB.push( b );
+ for ( i = 0; i < len; i++ ) {
+ loop = false;
+ for ( j = 0; j < parents.length; j++ ) {
+ aCircular = parents[ j ] === a[ i ];
+ bCircular = parentsB[ j ] === b[ i ];
+ if ( aCircular || bCircular ) {
+ if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+ loop = true;
+ } else {
parents.pop();
parentsB.pop();
return false;
}
}
+ }
+ if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
parents.pop();
parentsB.pop();
- return true;
- },
+ return false;
+ }
+ }
+ parents.pop();
+ parentsB.pop();
+ return true;
+ },
- "object": function( b, a ) {
+ "set": function( b, a ) {
+ var aArray, bArray;
- /*jshint forin:false */
- var i, j, loop, aCircular, bCircular,
- // Default to true
- eq = true,
- aProperties = [],
- bProperties = [];
+ aArray = [];
+ a.forEach( function( v ) {
+ aArray.push( v );
+ });
+ bArray = [];
+ b.forEach( function( v ) {
+ bArray.push( v );
+ });
- // comparing constructors is more strict than using
- // instanceof
- if ( a.constructor !== b.constructor ) {
+ return innerEquiv( bArray, aArray );
+ },
- // Allow objects with no prototype to be equivalent to
- // objects with Object as their constructor.
- if ( !( ( getProto( a ) === null && getProto( b ) === Object.prototype ) ||
- ( getProto( b ) === null && getProto( a ) === Object.prototype ) ) ) {
- return false;
- }
- }
+ "map": function( b, a ) {
+ var aArray, bArray;
- // stack constructor before traversing properties
- callers.push( a.constructor );
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
-
- // be strict: don't ensure hasOwnProperty and go deep
- for ( i in a ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[ j ] === a[ i ];
- bCircular = parentsB[ j ] === b[ i ];
- if ( aCircular || bCircular ) {
- if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
- loop = true;
- } else {
- eq = false;
- break;
- }
- }
- }
- aProperties.push( i );
- if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+ aArray = [];
+ a.forEach( function( v, k ) {
+ aArray.push( [ k, v ] );
+ });
+ bArray = [];
+ b.forEach( function( v, k ) {
+ bArray.push( [ k, v ] );
+ });
+
+ return innerEquiv( bArray, aArray );
+ },
+
+ "object": function( b, a ) {
+ var i, j, loop, aCircular, bCircular;
+
+ // Default to true
+ var eq = true;
+ var aProperties = [];
+ var bProperties = [];
+
+ if ( compareConstructors( a, b ) === false ) {
+ return false;
+ }
+
+ // Stack constructor before traversing properties
+ callers.push( a.constructor );
+
+ // Track reference to avoid circular references
+ parents.push( a );
+ parentsB.push( b );
+
+ // Be strict: don't ensure hasOwnProperty and go deep
+ for ( i in a ) {
+ loop = false;
+ for ( j = 0; j < parents.length; j++ ) {
+ aCircular = parents[ j ] === a[ i ];
+ bCircular = parentsB[ j ] === b[ i ];
+ if ( aCircular || bCircular ) {
+ if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+ loop = true;
+ } else {
eq = false;
break;
}
}
+ }
+ aProperties.push( i );
+ if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+ eq = false;
+ break;
+ }
+ }
- parents.pop();
- parentsB.pop();
- callers.pop(); // unstack, we are done
+ parents.pop();
+ parentsB.pop();
- for ( i in b ) {
- bProperties.push( i ); // collect b's properties
- }
+ // Unstack, we are done
+ callers.pop();
- // Ensures identical properties name
- return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
- }
- };
- }());
+ for ( i in b ) {
- innerEquiv = function() { // can take multiple arguments
- var args = [].slice.apply( arguments );
- if ( args.length < 2 ) {
- return true; // end transition
+ // Collect b's properties
+ bProperties.push( i );
+ }
+
+ // Ensures identical properties name
+ return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
}
+ };
- return ( (function( a, b ) {
- if ( a === b ) {
- return true; // catch the most you can
- } else if ( a === null || b === null || typeof a === "undefined" ||
- typeof b === "undefined" ||
- QUnit.objectType( a ) !== QUnit.objectType( b ) ) {
+ function typeEquiv( a, b ) {
+ var type = QUnit.objectType( a );
+ return QUnit.objectType( b ) === type && callbacks[ type ]( b, a );
+ }
- // don't lose time with error prone cases
- return false;
- } else {
- return bindCallbacks( a, callbacks, [ b, a ] );
- }
+ // The real equiv function
+ function innerEquiv( a, b ) {
- // apply transition with (1..n) arguments
- }( args[ 0 ], args[ 1 ] ) ) &&
- innerEquiv.apply( this, args.splice( 1, args.length - 1 ) ) );
- };
+ // We're done when there's nothing more to compare
+ if ( arguments.length < 2 ) {
+ return true;
+ }
+
+ // Require type-specific equality
+ return ( a === b || typeEquiv( a, b ) ) &&
+
+ // ...across all consecutive argument pairs
+ ( arguments.length === 2 || innerEquiv.apply( this, [].slice.call( arguments, 1 ) ) );
+ }
return innerEquiv;
}());
@@ -1632,7 +1914,7 @@ QUnit.equiv = (function() {
// http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html
QUnit.dump = (function() {
function quote( str ) {
- return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
+ return "\"" + str.toString().replace( /\\/g, "\\\\" ).replace( /"/g, "\\\"" ) + "\"";
}
function literal( o ) {
return o + "";
@@ -1839,1225 +2121,1255 @@ QUnit.dump = (function() {
}
}
}
- ret += close;
+ ret += close;
+
+ // Show content of TextNode or CDATASection
+ if ( node.nodeType === 3 || node.nodeType === 4 ) {
+ ret += node.nodeValue;
+ }
+
+ return ret + open + "/" + tag + close;
+ },
+
+ // function calls it internally, it's the arguments part of the function
+ functionArgs: function( fn ) {
+ var args,
+ l = fn.length;
+
+ if ( !l ) {
+ return "";
+ }
+
+ args = new Array( l );
+ while ( l-- ) {
+
+ // 97 is 'a'
+ args[ l ] = String.fromCharCode( 97 + l );
+ }
+ return " " + args.join( ", " ) + " ";
+ },
+ // object calls it internally, the key part of an item in a map
+ key: quote,
+ // function calls it internally, it's the content of the function
+ functionCode: "[code]",
+ // node calls it internally, it's a html attribute value
+ attribute: quote,
+ string: quote,
+ date: quote,
+ regexp: literal,
+ number: literal,
+ "boolean": literal
+ },
+ // if true, entities are escaped ( <, >, \t, space and \n )
+ HTML: false,
+ // indentation unit
+ indentChar: " ",
+ // if true, items in a collection, are separated by a \n, else just a space.
+ multiline: true
+ };
+
+ return dump;
+}());
+
+// back compat
+QUnit.jsDump = QUnit.dump;
+
+// Deprecated
+// Extend assert methods to QUnit for Backwards compatibility
+(function() {
+ var i,
+ assertions = Assert.prototype;
+
+ function applyCurrent( current ) {
+ return function() {
+ var assert = new Assert( QUnit.config.current );
+ current.apply( assert, arguments );
+ };
+ }
+
+ for ( i in assertions ) {
+ QUnit[ i ] = applyCurrent( assertions[ i ] );
+ }
+})();
+
+// For browser, export only select globals
+if ( defined.document ) {
+
+ (function() {
+ var i, l,
+ keys = [
+ "test",
+ "module",
+ "expect",
+ "asyncTest",
+ "start",
+ "stop",
+ "ok",
+ "notOk",
+ "equal",
+ "notEqual",
+ "propEqual",
+ "notPropEqual",
+ "deepEqual",
+ "notDeepEqual",
+ "strictEqual",
+ "notStrictEqual",
+ "throws",
+ "raises"
+ ];
+
+ for ( i = 0, l = keys.length; i < l; i++ ) {
+ window[ keys[ i ] ] = QUnit[ keys[ i ] ];
+ }
+ })();
+
+ window.QUnit = QUnit;
+}
+
+// For nodejs
+if ( typeof module !== "undefined" && module && module.exports ) {
+ module.exports = QUnit;
+
+ // For consistency with CommonJS environments' exports
+ module.exports.QUnit = QUnit;
+}
+
+// For CommonJS with exports, but without module.exports, like Rhino
+if ( typeof exports !== "undefined" && exports ) {
+ exports.QUnit = QUnit;
+}
+
+if ( typeof define === "function" && define.amd ) {
+ define( function() {
+ return QUnit;
+ } );
+ QUnit.config.autostart = false;
+}
+
+/*
+ * This file is a modified version of google-diff-match-patch's JavaScript implementation
+ * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
+ * modifications are licensed as more fully set forth in LICENSE.txt.
+ *
+ * The original source of google-diff-match-patch is attributable and licensed as follows:
+ *
+ * Copyright 2006 Google Inc.
+ * https://code.google.com/p/google-diff-match-patch/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * More Info:
+ * https://code.google.com/p/google-diff-match-patch/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ */
+QUnit.diff = ( function() {
+ function DiffMatchPatch() {
+ }
+
+ // DIFF FUNCTIONS
+
+ /**
+ * The data structure representing a diff is an array of tuples:
+ * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
+ * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
+ */
+ var DIFF_DELETE = -1,
+ DIFF_INSERT = 1,
+ DIFF_EQUAL = 0;
+
+ /**
+ * Find the differences between two texts. Simplifies the problem by stripping
+ * any common prefix or suffix off the texts before diffing.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean=} optChecklines Optional speedup flag. If present and false,
+ * then don't run a line-level diff first to identify the changed areas.
+ * Defaults to true, which does a faster, slightly less optimal diff.
+ * @return {!Array.} Array of diff tuples.
+ */
+ DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines ) {
+ var deadline, checklines, commonlength,
+ commonprefix, commonsuffix, diffs;
+
+ // The diff must be complete in up to 1 second.
+ deadline = ( new Date() ).getTime() + 1000;
+
+ // Check for null inputs.
+ if ( text1 === null || text2 === null ) {
+ throw new Error( "Null input. (DiffMain)" );
+ }
+
+ // Check for equality (speedup).
+ if ( text1 === text2 ) {
+ if ( text1 ) {
+ return [
+ [ DIFF_EQUAL, text1 ]
+ ];
+ }
+ return [];
+ }
+
+ if ( typeof optChecklines === "undefined" ) {
+ optChecklines = true;
+ }
+
+ checklines = optChecklines;
+
+ // Trim off common prefix (speedup).
+ commonlength = this.diffCommonPrefix( text1, text2 );
+ commonprefix = text1.substring( 0, commonlength );
+ text1 = text1.substring( commonlength );
+ text2 = text2.substring( commonlength );
+
+ // Trim off common suffix (speedup).
+ commonlength = this.diffCommonSuffix( text1, text2 );
+ commonsuffix = text1.substring( text1.length - commonlength );
+ text1 = text1.substring( 0, text1.length - commonlength );
+ text2 = text2.substring( 0, text2.length - commonlength );
+
+ // Compute the diff on the middle block.
+ diffs = this.diffCompute( text1, text2, checklines, deadline );
+
+ // Restore the prefix and suffix.
+ if ( commonprefix ) {
+ diffs.unshift( [ DIFF_EQUAL, commonprefix ] );
+ }
+ if ( commonsuffix ) {
+ diffs.push( [ DIFF_EQUAL, commonsuffix ] );
+ }
+ this.diffCleanupMerge( diffs );
+ return diffs;
+ };
+
+ /**
+ * Reduce the number of edits by eliminating operationally trivial equalities.
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) {
+ var changes, equalities, equalitiesLength, lastequality,
+ pointer, preIns, preDel, postIns, postDel;
+ changes = false;
+ equalities = []; // Stack of indices where equalities are found.
+ equalitiesLength = 0; // Keeping our own length var is faster in JS.
+ /** @type {?string} */
+ lastequality = null;
+ // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+ pointer = 0; // Index of current position.
+ // Is there an insertion operation before the last equality.
+ preIns = false;
+ // Is there a deletion operation before the last equality.
+ preDel = false;
+ // Is there an insertion operation after the last equality.
+ postIns = false;
+ // Is there a deletion operation after the last equality.
+ postDel = false;
+ while ( pointer < diffs.length ) {
+
+ // Equality found.
+ if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) {
+ if ( diffs[ pointer ][ 1 ].length < 4 && ( postIns || postDel ) ) {
+
+ // Candidate found.
+ equalities[ equalitiesLength++ ] = pointer;
+ preIns = postIns;
+ preDel = postDel;
+ lastequality = diffs[ pointer ][ 1 ];
+ } else {
+
+ // Not a candidate, and can never become one.
+ equalitiesLength = 0;
+ lastequality = null;
+ }
+ postIns = postDel = false;
+
+ // An insertion or deletion.
+ } else {
+
+ if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) {
+ postDel = true;
+ } else {
+ postIns = true;
+ }
+
+ /*
+ * Five types to be split:
+ * A BXYC D
+ * A XC D
+ * A BXC
+ * AXC D
+ * A BXC
+ */
+ if ( lastequality && ( ( preIns && preDel && postIns && postDel ) ||
+ ( ( lastequality.length < 2 ) &&
+ ( preIns + preDel + postIns + postDel ) === 3 ) ) ) {
+
+ // Duplicate record.
+ diffs.splice(
+ equalities[ equalitiesLength - 1 ],
+ 0,
+ [ DIFF_DELETE, lastequality ]
+ );
+
+ // Change second copy to insert.
+ diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
+ equalitiesLength--; // Throw away the equality we just deleted;
+ lastequality = null;
+ if ( preIns && preDel ) {
+ // No changes made which could affect previous entry, keep going.
+ postIns = postDel = true;
+ equalitiesLength = 0;
+ } else {
+ equalitiesLength--; // Throw away the previous equality.
+ pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
+ postIns = postDel = false;
+ }
+ changes = true;
+ }
+ }
+ pointer++;
+ }
+
+ if ( changes ) {
+ this.diffCleanupMerge( diffs );
+ }
+ };
+
+ /**
+ * Convert a diff array into a pretty HTML report.
+ * @param {!Array.} diffs Array of diff tuples.
+ * @param {integer} string to be beautified.
+ * @return {string} HTML representation.
+ */
+ DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) {
+ var op, data, x,
+ html = [];
+ for ( x = 0; x < diffs.length; x++ ) {
+ op = diffs[ x ][ 0 ]; // Operation (insert, delete, equal)
+ data = diffs[ x ][ 1 ]; // Text of change.
+ switch ( op ) {
+ case DIFF_INSERT:
+ html[ x ] = "" + data + " ";
+ break;
+ case DIFF_DELETE:
+ html[ x ] = "" + data + "";
+ break;
+ case DIFF_EQUAL:
+ html[ x ] = "" + data + " ";
+ break;
+ }
+ }
+ return html.join( "" );
+ };
+
+ /**
+ * Determine the common prefix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the start of each
+ * string.
+ */
+ DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) {
+ var pointermid, pointermax, pointermin, pointerstart;
+ // Quick check for common null cases.
+ if ( !text1 || !text2 || text1.charAt( 0 ) !== text2.charAt( 0 ) ) {
+ return 0;
+ }
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ pointermin = 0;
+ pointermax = Math.min( text1.length, text2.length );
+ pointermid = pointermax;
+ pointerstart = 0;
+ while ( pointermin < pointermid ) {
+ if ( text1.substring( pointerstart, pointermid ) ===
+ text2.substring( pointerstart, pointermid ) ) {
+ pointermin = pointermid;
+ pointerstart = pointermin;
+ } else {
+ pointermax = pointermid;
+ }
+ pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
+ }
+ return pointermid;
+ };
+
+ /**
+ * Determine the common suffix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the end of each string.
+ */
+ DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) {
+ var pointermid, pointermax, pointermin, pointerend;
+ // Quick check for common null cases.
+ if ( !text1 ||
+ !text2 ||
+ text1.charAt( text1.length - 1 ) !== text2.charAt( text2.length - 1 ) ) {
+ return 0;
+ }
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ pointermin = 0;
+ pointermax = Math.min( text1.length, text2.length );
+ pointermid = pointermax;
+ pointerend = 0;
+ while ( pointermin < pointermid ) {
+ if ( text1.substring( text1.length - pointermid, text1.length - pointerend ) ===
+ text2.substring( text2.length - pointermid, text2.length - pointerend ) ) {
+ pointermin = pointermid;
+ pointerend = pointermin;
+ } else {
+ pointermax = pointermid;
+ }
+ pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
+ }
+ return pointermid;
+ };
+
+ /**
+ * Find the differences between two texts. Assumes that the texts do not
+ * have any common prefix or suffix.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean} checklines Speedup flag. If false, then don't run a
+ * line-level diff first to identify the changed areas.
+ * If true, then run a faster, slightly less optimal diff.
+ * @param {number} deadline Time when the diff should be complete by.
+ * @return {!Array.} Array of diff tuples.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) {
+ var diffs, longtext, shorttext, i, hm,
+ text1A, text2A, text1B, text2B,
+ midCommon, diffsA, diffsB;
+
+ if ( !text1 ) {
+ // Just add some text (speedup).
+ return [
+ [ DIFF_INSERT, text2 ]
+ ];
+ }
+
+ if ( !text2 ) {
+ // Just delete some text (speedup).
+ return [
+ [ DIFF_DELETE, text1 ]
+ ];
+ }
+
+ longtext = text1.length > text2.length ? text1 : text2;
+ shorttext = text1.length > text2.length ? text2 : text1;
+ i = longtext.indexOf( shorttext );
+ if ( i !== -1 ) {
+ // Shorter text is inside the longer text (speedup).
+ diffs = [
+ [ DIFF_INSERT, longtext.substring( 0, i ) ],
+ [ DIFF_EQUAL, shorttext ],
+ [ DIFF_INSERT, longtext.substring( i + shorttext.length ) ]
+ ];
+ // Swap insertions for deletions if diff is reversed.
+ if ( text1.length > text2.length ) {
+ diffs[ 0 ][ 0 ] = diffs[ 2 ][ 0 ] = DIFF_DELETE;
+ }
+ return diffs;
+ }
+
+ if ( shorttext.length === 1 ) {
+ // Single character string.
+ // After the previous speedup, the character can't be an equality.
+ return [
+ [ DIFF_DELETE, text1 ],
+ [ DIFF_INSERT, text2 ]
+ ];
+ }
+
+ // Check to see if the problem can be split in two.
+ hm = this.diffHalfMatch( text1, text2 );
+ if ( hm ) {
+ // A half-match was found, sort out the return data.
+ text1A = hm[ 0 ];
+ text1B = hm[ 1 ];
+ text2A = hm[ 2 ];
+ text2B = hm[ 3 ];
+ midCommon = hm[ 4 ];
+ // Send both pairs off for separate processing.
+ diffsA = this.DiffMain( text1A, text2A, checklines, deadline );
+ diffsB = this.DiffMain( text1B, text2B, checklines, deadline );
+ // Merge the results.
+ return diffsA.concat( [
+ [ DIFF_EQUAL, midCommon ]
+ ], diffsB );
+ }
+
+ if ( checklines && text1.length > 100 && text2.length > 100 ) {
+ return this.diffLineMode( text1, text2, deadline );
+ }
+
+ return this.diffBisect( text1, text2, deadline );
+ };
+
+ /**
+ * Do the two texts share a substring which is at least half the length of the
+ * longer text?
+ * This speedup can produce non-minimal diffs.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {Array.} Five element Array, containing the prefix of
+ * text1, the suffix of text1, the prefix of text2, the suffix of
+ * text2 and the common middle. Or null if there was no match.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffHalfMatch = function( text1, text2 ) {
+ var longtext, shorttext, dmp,
+ text1A, text2B, text2A, text1B, midCommon,
+ hm1, hm2, hm;
+
+ longtext = text1.length > text2.length ? text1 : text2;
+ shorttext = text1.length > text2.length ? text2 : text1;
+ if ( longtext.length < 4 || shorttext.length * 2 < longtext.length ) {
+ return null; // Pointless.
+ }
+ dmp = this; // 'this' becomes 'window' in a closure.
+
+ /**
+ * Does a substring of shorttext exist within longtext such that the substring
+ * is at least half the length of longtext?
+ * Closure, but does not reference any external variables.
+ * @param {string} longtext Longer string.
+ * @param {string} shorttext Shorter string.
+ * @param {number} i Start index of quarter length substring within longtext.
+ * @return {Array.} Five element Array, containing the prefix of
+ * longtext, the suffix of longtext, the prefix of shorttext, the suffix
+ * of shorttext and the common middle. Or null if there was no match.
+ * @private
+ */
+ function diffHalfMatchI( longtext, shorttext, i ) {
+ var seed, j, bestCommon, prefixLength, suffixLength,
+ bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;
+ // Start with a 1/4 length substring at position i as a seed.
+ seed = longtext.substring( i, i + Math.floor( longtext.length / 4 ) );
+ j = -1;
+ bestCommon = "";
+ while ( ( j = shorttext.indexOf( seed, j + 1 ) ) !== -1 ) {
+ prefixLength = dmp.diffCommonPrefix( longtext.substring( i ),
+ shorttext.substring( j ) );
+ suffixLength = dmp.diffCommonSuffix( longtext.substring( 0, i ),
+ shorttext.substring( 0, j ) );
+ if ( bestCommon.length < suffixLength + prefixLength ) {
+ bestCommon = shorttext.substring( j - suffixLength, j ) +
+ shorttext.substring( j, j + prefixLength );
+ bestLongtextA = longtext.substring( 0, i - suffixLength );
+ bestLongtextB = longtext.substring( i + prefixLength );
+ bestShorttextA = shorttext.substring( 0, j - suffixLength );
+ bestShorttextB = shorttext.substring( j + prefixLength );
+ }
+ }
+ if ( bestCommon.length * 2 >= longtext.length ) {
+ return [ bestLongtextA, bestLongtextB,
+ bestShorttextA, bestShorttextB, bestCommon
+ ];
+ } else {
+ return null;
+ }
+ }
+
+ // First check if the second quarter is the seed for a half-match.
+ hm1 = diffHalfMatchI( longtext, shorttext,
+ Math.ceil( longtext.length / 4 ) );
+ // Check again based on the third quarter.
+ hm2 = diffHalfMatchI( longtext, shorttext,
+ Math.ceil( longtext.length / 2 ) );
+ if ( !hm1 && !hm2 ) {
+ return null;
+ } else if ( !hm2 ) {
+ hm = hm1;
+ } else if ( !hm1 ) {
+ hm = hm2;
+ } else {
+ // Both matched. Select the longest.
+ hm = hm1[ 4 ].length > hm2[ 4 ].length ? hm1 : hm2;
+ }
+
+ // A half-match was found, sort out the return data.
+ text1A, text1B, text2A, text2B;
+ if ( text1.length > text2.length ) {
+ text1A = hm[ 0 ];
+ text1B = hm[ 1 ];
+ text2A = hm[ 2 ];
+ text2B = hm[ 3 ];
+ } else {
+ text2A = hm[ 0 ];
+ text2B = hm[ 1 ];
+ text1A = hm[ 2 ];
+ text1B = hm[ 3 ];
+ }
+ midCommon = hm[ 4 ];
+ return [ text1A, text1B, text2A, text2B, midCommon ];
+ };
+
+ /**
+ * Do a quick line-level diff on both strings, then rediff the parts for
+ * greater accuracy.
+ * This speedup can produce non-minimal diffs.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} deadline Time when the diff should be complete by.
+ * @return {!Array.} Array of diff tuples.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffLineMode = function( text1, text2, deadline ) {
+ var a, diffs, linearray, pointer, countInsert,
+ countDelete, textInsert, textDelete, j;
+ // Scan the text on a line-by-line basis first.
+ a = this.diffLinesToChars( text1, text2 );
+ text1 = a.chars1;
+ text2 = a.chars2;
+ linearray = a.lineArray;
+
+ diffs = this.DiffMain( text1, text2, false, deadline );
+
+ // Convert the diff back to original text.
+ this.diffCharsToLines( diffs, linearray );
+ // Eliminate freak matches (e.g. blank lines)
+ this.diffCleanupSemantic( diffs );
+
+ // Rediff any replacement blocks, this time character-by-character.
+ // Add a dummy entry at the end.
+ diffs.push( [ DIFF_EQUAL, "" ] );
+ pointer = 0;
+ countDelete = 0;
+ countInsert = 0;
+ textDelete = "";
+ textInsert = "";
+ while ( pointer < diffs.length ) {
+ switch ( diffs[ pointer ][ 0 ] ) {
+ case DIFF_INSERT:
+ countInsert++;
+ textInsert += diffs[ pointer ][ 1 ];
+ break;
+ case DIFF_DELETE:
+ countDelete++;
+ textDelete += diffs[ pointer ][ 1 ];
+ break;
+ case DIFF_EQUAL:
+ // Upon reaching an equality, check for prior redundancies.
+ if ( countDelete >= 1 && countInsert >= 1 ) {
+ // Delete the offending records and add the merged ones.
+ diffs.splice( pointer - countDelete - countInsert,
+ countDelete + countInsert );
+ pointer = pointer - countDelete - countInsert;
+ a = this.DiffMain( textDelete, textInsert, false, deadline );
+ for ( j = a.length - 1; j >= 0; j-- ) {
+ diffs.splice( pointer, 0, a[ j ] );
+ }
+ pointer = pointer + a.length;
+ }
+ countInsert = 0;
+ countDelete = 0;
+ textDelete = "";
+ textInsert = "";
+ break;
+ }
+ pointer++;
+ }
+ diffs.pop(); // Remove the dummy entry at the end.
+
+ return diffs;
+ };
+
+ /**
+ * Find the 'middle snake' of a diff, split the problem in two
+ * and return the recursively constructed diff.
+ * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} deadline Time at which to bail if not yet complete.
+ * @return {!Array.} Array of diff tuples.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffBisect = function( text1, text2, deadline ) {
+ var text1Length, text2Length, maxD, vOffset, vLength,
+ v1, v2, x, delta, front, k1start, k1end, k2start,
+ k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;
+ // Cache the text lengths to prevent multiple calls.
+ text1Length = text1.length;
+ text2Length = text2.length;
+ maxD = Math.ceil( ( text1Length + text2Length ) / 2 );
+ vOffset = maxD;
+ vLength = 2 * maxD;
+ v1 = new Array( vLength );
+ v2 = new Array( vLength );
+ // Setting all elements to -1 is faster in Chrome & Firefox than mixing
+ // integers and undefined.
+ for ( x = 0; x < vLength; x++ ) {
+ v1[ x ] = -1;
+ v2[ x ] = -1;
+ }
+ v1[ vOffset + 1 ] = 0;
+ v2[ vOffset + 1 ] = 0;
+ delta = text1Length - text2Length;
+ // If the total number of characters is odd, then the front path will collide
+ // with the reverse path.
+ front = ( delta % 2 !== 0 );
+ // Offsets for start and end of k loop.
+ // Prevents mapping of space beyond the grid.
+ k1start = 0;
+ k1end = 0;
+ k2start = 0;
+ k2end = 0;
+ for ( d = 0; d < maxD; d++ ) {
+ // Bail out if deadline is reached.
+ if ( ( new Date() ).getTime() > deadline ) {
+ break;
+ }
+
+ // Walk the front path one step.
+ for ( k1 = -d + k1start; k1 <= d - k1end; k1 += 2 ) {
+ k1Offset = vOffset + k1;
+ if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) {
+ x1 = v1[ k1Offset + 1 ];
+ } else {
+ x1 = v1[ k1Offset - 1 ] + 1;
+ }
+ y1 = x1 - k1;
+ while ( x1 < text1Length && y1 < text2Length &&
+ text1.charAt( x1 ) === text2.charAt( y1 ) ) {
+ x1++;
+ y1++;
+ }
+ v1[ k1Offset ] = x1;
+ if ( x1 > text1Length ) {
+ // Ran off the right of the graph.
+ k1end += 2;
+ } else if ( y1 > text2Length ) {
+ // Ran off the bottom of the graph.
+ k1start += 2;
+ } else if ( front ) {
+ k2Offset = vOffset + delta - k1;
+ if ( k2Offset >= 0 && k2Offset < vLength && v2[ k2Offset ] !== -1 ) {
+ // Mirror x2 onto top-left coordinate system.
+ x2 = text1Length - v2[ k2Offset ];
+ if ( x1 >= x2 ) {
+ // Overlap detected.
+ return this.diffBisectSplit( text1, text2, x1, y1, deadline );
+ }
+ }
+ }
+ }
- // Show content of TextNode or CDATASection
- if ( node.nodeType === 3 || node.nodeType === 4 ) {
- ret += node.nodeValue;
+ // Walk the reverse path one step.
+ for ( k2 = -d + k2start; k2 <= d - k2end; k2 += 2 ) {
+ k2Offset = vOffset + k2;
+ if ( k2 === -d || ( k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) {
+ x2 = v2[ k2Offset + 1 ];
+ } else {
+ x2 = v2[ k2Offset - 1 ] + 1;
+ }
+ y2 = x2 - k2;
+ while ( x2 < text1Length && y2 < text2Length &&
+ text1.charAt( text1Length - x2 - 1 ) ===
+ text2.charAt( text2Length - y2 - 1 ) ) {
+ x2++;
+ y2++;
+ }
+ v2[ k2Offset ] = x2;
+ if ( x2 > text1Length ) {
+ // Ran off the left of the graph.
+ k2end += 2;
+ } else if ( y2 > text2Length ) {
+ // Ran off the top of the graph.
+ k2start += 2;
+ } else if ( !front ) {
+ k1Offset = vOffset + delta - k2;
+ if ( k1Offset >= 0 && k1Offset < vLength && v1[ k1Offset ] !== -1 ) {
+ x1 = v1[ k1Offset ];
+ y1 = vOffset + x1 - k1Offset;
+ // Mirror x2 onto top-left coordinate system.
+ x2 = text1Length - x2;
+ if ( x1 >= x2 ) {
+ // Overlap detected.
+ return this.diffBisectSplit( text1, text2, x1, y1, deadline );
+ }
}
+ }
+ }
+ }
+ // Diff took too long and hit the deadline or
+ // number of diffs equals number of characters, no commonality at all.
+ return [
+ [ DIFF_DELETE, text1 ],
+ [ DIFF_INSERT, text2 ]
+ ];
+ };
- return ret + open + "/" + tag + close;
- },
-
- // function calls it internally, it's the arguments part of the function
- functionArgs: function( fn ) {
- var args,
- l = fn.length;
+ /**
+ * Given the location of the 'middle snake', split the diff in two parts
+ * and recurse.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} x Index of split point in text1.
+ * @param {number} y Index of split point in text2.
+ * @param {number} deadline Time at which to bail if not yet complete.
+ * @return {!Array.} Array of diff tuples.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) {
+ var text1a, text1b, text2a, text2b, diffs, diffsb;
+ text1a = text1.substring( 0, x );
+ text2a = text2.substring( 0, y );
+ text1b = text1.substring( x );
+ text2b = text2.substring( y );
+
+ // Compute both diffs serially.
+ diffs = this.DiffMain( text1a, text2a, false, deadline );
+ diffsb = this.DiffMain( text1b, text2b, false, deadline );
+
+ return diffs.concat( diffsb );
+ };
- if ( !l ) {
- return "";
- }
+ /**
+ * Reduce the number of edits by eliminating semantically trivial equalities.
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ DiffMatchPatch.prototype.diffCleanupSemantic = function( diffs ) {
+ var changes, equalities, equalitiesLength, lastequality,
+ pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1,
+ lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;
+ changes = false;
+ equalities = []; // Stack of indices where equalities are found.
+ equalitiesLength = 0; // Keeping our own length var is faster in JS.
+ /** @type {?string} */
+ lastequality = null;
+ // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+ pointer = 0; // Index of current position.
+ // Number of characters that changed prior to the equality.
+ lengthInsertions1 = 0;
+ lengthDeletions1 = 0;
+ // Number of characters that changed after the equality.
+ lengthInsertions2 = 0;
+ lengthDeletions2 = 0;
+ while ( pointer < diffs.length ) {
+ if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found.
+ equalities[ equalitiesLength++ ] = pointer;
+ lengthInsertions1 = lengthInsertions2;
+ lengthDeletions1 = lengthDeletions2;
+ lengthInsertions2 = 0;
+ lengthDeletions2 = 0;
+ lastequality = diffs[ pointer ][ 1 ];
+ } else { // An insertion or deletion.
+ if ( diffs[ pointer ][ 0 ] === DIFF_INSERT ) {
+ lengthInsertions2 += diffs[ pointer ][ 1 ].length;
+ } else {
+ lengthDeletions2 += diffs[ pointer ][ 1 ].length;
+ }
+ // Eliminate an equality that is smaller or equal to the edits on both
+ // sides of it.
+ if ( lastequality && ( lastequality.length <=
+ Math.max( lengthInsertions1, lengthDeletions1 ) ) &&
+ ( lastequality.length <= Math.max( lengthInsertions2,
+ lengthDeletions2 ) ) ) {
+
+ // Duplicate record.
+ diffs.splice(
+ equalities[ equalitiesLength - 1 ],
+ 0,
+ [ DIFF_DELETE, lastequality ]
+ );
+
+ // Change second copy to insert.
+ diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
+
+ // Throw away the equality we just deleted.
+ equalitiesLength--;
+
+ // Throw away the previous equality (it needs to be reevaluated).
+ equalitiesLength--;
+ pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
+
+ // Reset the counters.
+ lengthInsertions1 = 0;
+ lengthDeletions1 = 0;
+ lengthInsertions2 = 0;
+ lengthDeletions2 = 0;
+ lastequality = null;
+ changes = true;
+ }
+ }
+ pointer++;
+ }
- args = new Array( l );
- while ( l-- ) {
+ // Normalize the diff.
+ if ( changes ) {
+ this.diffCleanupMerge( diffs );
+ }
- // 97 is 'a'
- args[ l ] = String.fromCharCode( 97 + l );
+ // Find any overlaps between deletions and insertions.
+ // e.g: abcxxxxxxdef
+ // -> abcxxxdef
+ // e.g: xxxabcdefxxx
+ // -> def xxxabc
+ // Only extract an overlap if it is as big as the edit ahead or behind it.
+ pointer = 1;
+ while ( pointer < diffs.length ) {
+ if ( diffs[ pointer - 1 ][ 0 ] === DIFF_DELETE &&
+ diffs[ pointer ][ 0 ] === DIFF_INSERT ) {
+ deletion = diffs[ pointer - 1 ][ 1 ];
+ insertion = diffs[ pointer ][ 1 ];
+ overlapLength1 = this.diffCommonOverlap( deletion, insertion );
+ overlapLength2 = this.diffCommonOverlap( insertion, deletion );
+ if ( overlapLength1 >= overlapLength2 ) {
+ if ( overlapLength1 >= deletion.length / 2 ||
+ overlapLength1 >= insertion.length / 2 ) {
+ // Overlap found. Insert an equality and trim the surrounding edits.
+ diffs.splice(
+ pointer,
+ 0,
+ [ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ]
+ );
+ diffs[ pointer - 1 ][ 1 ] =
+ deletion.substring( 0, deletion.length - overlapLength1 );
+ diffs[ pointer + 1 ][ 1 ] = insertion.substring( overlapLength1 );
+ pointer++;
}
- return " " + args.join( ", " ) + " ";
- },
- // object calls it internally, the key part of an item in a map
- key: quote,
- // function calls it internally, it's the content of the function
- functionCode: "[code]",
- // node calls it internally, it's an html attribute value
- attribute: quote,
- string: quote,
- date: quote,
- regexp: literal,
- number: literal,
- "boolean": literal
- },
- // if true, entities are escaped ( <, >, \t, space and \n )
- HTML: false,
- // indentation unit
- indentChar: " ",
- // if true, items in a collection, are separated by a \n, else just a space.
- multiline: true
- };
-
- return dump;
-}());
+ } else {
+ if ( overlapLength2 >= deletion.length / 2 ||
+ overlapLength2 >= insertion.length / 2 ) {
+
+ // Reverse overlap found.
+ // Insert an equality and swap and trim the surrounding edits.
+ diffs.splice(
+ pointer,
+ 0,
+ [ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ]
+ );
+
+ diffs[ pointer - 1 ][ 0 ] = DIFF_INSERT;
+ diffs[ pointer - 1 ][ 1 ] =
+ insertion.substring( 0, insertion.length - overlapLength2 );
+ diffs[ pointer + 1 ][ 0 ] = DIFF_DELETE;
+ diffs[ pointer + 1 ][ 1 ] =
+ deletion.substring( overlapLength2 );
+ pointer++;
+ }
+ }
+ pointer++;
+ }
+ pointer++;
+ }
+ };
-// back compat
-QUnit.jsDump = QUnit.dump;
+ /**
+ * Determine if the suffix of one string is the prefix of another.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the end of the first
+ * string and the start of the second string.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffCommonOverlap = function( text1, text2 ) {
+ var text1Length, text2Length, textLength,
+ best, length, pattern, found;
+ // Cache the text lengths to prevent multiple calls.
+ text1Length = text1.length;
+ text2Length = text2.length;
+ // Eliminate the null case.
+ if ( text1Length === 0 || text2Length === 0 ) {
+ return 0;
+ }
+ // Truncate the longer string.
+ if ( text1Length > text2Length ) {
+ text1 = text1.substring( text1Length - text2Length );
+ } else if ( text1Length < text2Length ) {
+ text2 = text2.substring( 0, text1Length );
+ }
+ textLength = Math.min( text1Length, text2Length );
+ // Quick check for the worst case.
+ if ( text1 === text2 ) {
+ return textLength;
+ }
-// For browser, export only select globals
-if ( typeof window !== "undefined" ) {
+ // Start by looking for a single character match
+ // and increase length until no match is found.
+ // Performance analysis: https://neil.fraser.name/news/2010/11/04/
+ best = 0;
+ length = 1;
+ while ( true ) {
+ pattern = text1.substring( textLength - length );
+ found = text2.indexOf( pattern );
+ if ( found === -1 ) {
+ return best;
+ }
+ length += found;
+ if ( found === 0 || text1.substring( textLength - length ) ===
+ text2.substring( 0, length ) ) {
+ best = length;
+ length++;
+ }
+ }
+ };
- // Deprecated
- // Extend assert methods to QUnit and Global scope through Backwards compatibility
- (function() {
- var i,
- assertions = Assert.prototype;
+ /**
+ * Split two texts into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {{chars1: string, chars2: string, lineArray: !Array.}}
+ * An object containing the encoded text1, the encoded text2 and
+ * the array of unique strings.
+ * The zeroth element of the array of unique strings is intentionally blank.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffLinesToChars = function( text1, text2 ) {
+ var lineArray, lineHash, chars1, chars2;
+ lineArray = []; // e.g. lineArray[4] === 'Hello\n'
+ lineHash = {}; // e.g. lineHash['Hello\n'] === 4
+
+ // '\x00' is a valid character, but various debuggers don't like it.
+ // So we'll insert a junk entry to avoid generating a null character.
+ lineArray[ 0 ] = "";
+
+ /**
+ * Split a text into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ * Modifies linearray and linehash through being a closure.
+ * @param {string} text String to encode.
+ * @return {string} Encoded string.
+ * @private
+ */
+ function diffLinesToCharsMunge( text ) {
+ var chars, lineStart, lineEnd, lineArrayLength, line;
+ chars = "";
+ // Walk the text, pulling out a substring for each line.
+ // text.split('\n') would would temporarily double our memory footprint.
+ // Modifying text would create many large strings to garbage collect.
+ lineStart = 0;
+ lineEnd = -1;
+ // Keeping our own length variable is faster than looking it up.
+ lineArrayLength = lineArray.length;
+ while ( lineEnd < text.length - 1 ) {
+ lineEnd = text.indexOf( "\n", lineStart );
+ if ( lineEnd === -1 ) {
+ lineEnd = text.length - 1;
+ }
+ line = text.substring( lineStart, lineEnd + 1 );
+ lineStart = lineEnd + 1;
- function applyCurrent( current ) {
- return function() {
- var assert = new Assert( QUnit.config.current );
- current.apply( assert, arguments );
- };
+ if ( lineHash.hasOwnProperty ? lineHash.hasOwnProperty( line ) :
+ ( lineHash[ line ] !== undefined ) ) {
+ chars += String.fromCharCode( lineHash[ line ] );
+ } else {
+ chars += String.fromCharCode( lineArrayLength );
+ lineHash[ line ] = lineArrayLength;
+ lineArray[ lineArrayLength++ ] = line;
+ }
+ }
+ return chars;
}
- for ( i in assertions ) {
- QUnit[ i ] = applyCurrent( assertions[ i ] );
+ chars1 = diffLinesToCharsMunge( text1 );
+ chars2 = diffLinesToCharsMunge( text2 );
+ return {
+ chars1: chars1,
+ chars2: chars2,
+ lineArray: lineArray
+ };
+ };
+
+ /**
+ * Rehydrate the text in a diff from a string of line hashes to real lines of
+ * text.
+ * @param {!Array.} diffs Array of diff tuples.
+ * @param {!Array.} lineArray Array of unique strings.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) {
+ var x, chars, text, y;
+ for ( x = 0; x < diffs.length; x++ ) {
+ chars = diffs[ x ][ 1 ];
+ text = [];
+ for ( y = 0; y < chars.length; y++ ) {
+ text[ y ] = lineArray[ chars.charCodeAt( y ) ];
+ }
+ diffs[ x ][ 1 ] = text.join( "" );
}
- })();
+ };
- (function() {
- var i, l,
- keys = [
- "test",
- "module",
- "expect",
- "asyncTest",
- "start",
- "stop",
- "ok",
- "notOk",
- "equal",
- "notEqual",
- "propEqual",
- "notPropEqual",
- "deepEqual",
- "notDeepEqual",
- "strictEqual",
- "notStrictEqual",
- "throws"
- ];
+ /**
+ * Reorder and merge like edit sections. Merge equalities.
+ * Any edit section can move as long as it doesn't cross an equality.
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ DiffMatchPatch.prototype.diffCleanupMerge = function( diffs ) {
+ var pointer, countDelete, countInsert, textInsert, textDelete,
+ commonlength, changes, diffPointer, position;
+ diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end.
+ pointer = 0;
+ countDelete = 0;
+ countInsert = 0;
+ textDelete = "";
+ textInsert = "";
+ commonlength;
+ while ( pointer < diffs.length ) {
+ switch ( diffs[ pointer ][ 0 ] ) {
+ case DIFF_INSERT:
+ countInsert++;
+ textInsert += diffs[ pointer ][ 1 ];
+ pointer++;
+ break;
+ case DIFF_DELETE:
+ countDelete++;
+ textDelete += diffs[ pointer ][ 1 ];
+ pointer++;
+ break;
+ case DIFF_EQUAL:
+ // Upon reaching an equality, check for prior redundancies.
+ if ( countDelete + countInsert > 1 ) {
+ if ( countDelete !== 0 && countInsert !== 0 ) {
+ // Factor out any common prefixes.
+ commonlength = this.diffCommonPrefix( textInsert, textDelete );
+ if ( commonlength !== 0 ) {
+ if ( ( pointer - countDelete - countInsert ) > 0 &&
+ diffs[ pointer - countDelete - countInsert - 1 ][ 0 ] ===
+ DIFF_EQUAL ) {
+ diffs[ pointer - countDelete - countInsert - 1 ][ 1 ] +=
+ textInsert.substring( 0, commonlength );
+ } else {
+ diffs.splice( 0, 0, [ DIFF_EQUAL,
+ textInsert.substring( 0, commonlength )
+ ] );
+ pointer++;
+ }
+ textInsert = textInsert.substring( commonlength );
+ textDelete = textDelete.substring( commonlength );
+ }
+ // Factor out any common suffixies.
+ commonlength = this.diffCommonSuffix( textInsert, textDelete );
+ if ( commonlength !== 0 ) {
+ diffs[ pointer ][ 1 ] = textInsert.substring( textInsert.length -
+ commonlength ) + diffs[ pointer ][ 1 ];
+ textInsert = textInsert.substring( 0, textInsert.length -
+ commonlength );
+ textDelete = textDelete.substring( 0, textDelete.length -
+ commonlength );
+ }
+ }
+ // Delete the offending records and add the merged ones.
+ if ( countDelete === 0 ) {
+ diffs.splice( pointer - countInsert,
+ countDelete + countInsert, [ DIFF_INSERT, textInsert ] );
+ } else if ( countInsert === 0 ) {
+ diffs.splice( pointer - countDelete,
+ countDelete + countInsert, [ DIFF_DELETE, textDelete ] );
+ } else {
+ diffs.splice(
+ pointer - countDelete - countInsert,
+ countDelete + countInsert,
+ [ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ]
+ );
+ }
+ pointer = pointer - countDelete - countInsert +
+ ( countDelete ? 1 : 0 ) + ( countInsert ? 1 : 0 ) + 1;
+ } else if ( pointer !== 0 && diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL ) {
- for ( i = 0, l = keys.length; i < l; i++ ) {
- window[ keys[ i ] ] = QUnit[ keys[ i ] ];
+ // Merge this equality with the previous one.
+ diffs[ pointer - 1 ][ 1 ] += diffs[ pointer ][ 1 ];
+ diffs.splice( pointer, 1 );
+ } else {
+ pointer++;
+ }
+ countInsert = 0;
+ countDelete = 0;
+ textDelete = "";
+ textInsert = "";
+ break;
+ }
+ }
+ if ( diffs[ diffs.length - 1 ][ 1 ] === "" ) {
+ diffs.pop(); // Remove the dummy entry at the end.
}
- })();
- window.QUnit = QUnit;
-}
+ // Second pass: look for single edits surrounded on both sides by equalities
+ // which can be shifted sideways to eliminate an equality.
+ // e.g: ABA C -> AB AC
+ changes = false;
+ pointer = 1;
-// For nodejs
-if ( typeof module !== "undefined" && module && module.exports ) {
- module.exports = QUnit;
+ // Intentionally ignore the first and last element (don't need checking).
+ while ( pointer < diffs.length - 1 ) {
+ if ( diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL &&
+ diffs[ pointer + 1 ][ 0 ] === DIFF_EQUAL ) {
- // For consistency with CommonJS environments' exports
- module.exports.QUnit = QUnit;
-}
+ diffPointer = diffs[ pointer ][ 1 ];
+ position = diffPointer.substring(
+ diffPointer.length - diffs[ pointer - 1 ][ 1 ].length
+ );
-// For CommonJS with exports, but without module.exports, like Rhino
-if ( typeof exports !== "undefined" && exports ) {
- exports.QUnit = QUnit;
-}
+ // This is a single edit surrounded by equalities.
+ if ( position === diffs[ pointer - 1 ][ 1 ] ) {
+
+ // Shift the edit over the previous equality.
+ diffs[ pointer ][ 1 ] = diffs[ pointer - 1 ][ 1 ] +
+ diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer ][ 1 ].length -
+ diffs[ pointer - 1 ][ 1 ].length );
+ diffs[ pointer + 1 ][ 1 ] =
+ diffs[ pointer - 1 ][ 1 ] + diffs[ pointer + 1 ][ 1 ];
+ diffs.splice( pointer - 1, 1 );
+ changes = true;
+ } else if ( diffPointer.substring( 0, diffs[ pointer + 1 ][ 1 ].length ) ===
+ diffs[ pointer + 1 ][ 1 ] ) {
+
+ // Shift the edit over the next equality.
+ diffs[ pointer - 1 ][ 1 ] += diffs[ pointer + 1 ][ 1 ];
+ diffs[ pointer ][ 1 ] =
+ diffs[ pointer ][ 1 ].substring( diffs[ pointer + 1 ][ 1 ].length ) +
+ diffs[ pointer + 1 ][ 1 ];
+ diffs.splice( pointer + 1, 1 );
+ changes = true;
+ }
+ }
+ pointer++;
+ }
+ // If shifts were made, the diff needs reordering and another shift sweep.
+ if ( changes ) {
+ this.diffCleanupMerge( diffs );
+ }
+ };
-if ( typeof define === "function" && define.amd ) {
- define( function() {
- return QUnit;
- } );
- QUnit.config.autostart = false;
-}
+ return function( o, n ) {
+ var diff, output, text;
+ diff = new DiffMatchPatch();
+ output = diff.DiffMain( o, n );
+ diff.diffCleanupEfficiency( output );
+ text = diff.diffPrettyHtml( output );
+
+ return text;
+ };
+}() );
// Get a reference to the global object, like window in browsers
}( (function() {
return this;
})() ));
-/*istanbul ignore next */
-// jscs:disable maximumLineLength
-/*
- * This file is a modified version of google-diff-match-patch's JavaScript implementation
- * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
- * modifications are licensed as more fully set forth in LICENSE.txt.
- *
- * The original source of google-diff-match-patch is attributable and licensed as follows:
- *
- * Copyright 2006 Google Inc.
- * http://code.google.com/p/google-diff-match-patch/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * More Info:
- * https://code.google.com/p/google-diff-match-patch/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) === "the quick brown fox jumps ed} Array of diff tuples.
- */
- DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines, optDeadline ) {
- var deadline, checklines, commonlength,
- commonprefix, commonsuffix, diffs;
- // Set a deadline by which time the diff must be complete.
- if ( typeof optDeadline === "undefined" ) {
- if ( this.DiffTimeout <= 0 ) {
- optDeadline = Number.MAX_VALUE;
- } else {
- optDeadline = ( new Date() ).getTime() + this.DiffTimeout * 1000;
- }
- }
- deadline = optDeadline;
-
- // Check for null inputs.
- if ( text1 === null || text2 === null ) {
- throw new Error( "Null input. (DiffMain)" );
- }
-
- // Check for equality (speedup).
- if ( text1 === text2 ) {
- if ( text1 ) {
- return [
- [ DIFF_EQUAL, text1 ]
- ];
- }
- return [];
- }
-
- if ( typeof optChecklines === "undefined" ) {
- optChecklines = true;
- }
-
- checklines = optChecklines;
-
- // Trim off common prefix (speedup).
- commonlength = this.diffCommonPrefix( text1, text2 );
- commonprefix = text1.substring( 0, commonlength );
- text1 = text1.substring( commonlength );
- text2 = text2.substring( commonlength );
-
- // Trim off common suffix (speedup).
- /////////
- commonlength = this.diffCommonSuffix( text1, text2 );
- commonsuffix = text1.substring( text1.length - commonlength );
- text1 = text1.substring( 0, text1.length - commonlength );
- text2 = text2.substring( 0, text2.length - commonlength );
-
- // Compute the diff on the middle block.
- diffs = this.diffCompute( text1, text2, checklines, deadline );
-
- // Restore the prefix and suffix.
- if ( commonprefix ) {
- diffs.unshift( [ DIFF_EQUAL, commonprefix ] );
- }
- if ( commonsuffix ) {
- diffs.push( [ DIFF_EQUAL, commonsuffix ] );
- }
- this.diffCleanupMerge( diffs );
- return diffs;
- };
-
- /**
- * Reduce the number of edits by eliminating operationally trivial equalities.
- * @param {!Array.} diffs Array of diff tuples.
- */
- DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) {
- var changes, equalities, equalitiesLength, lastequality,
- pointer, preIns, preDel, postIns, postDel;
- changes = false;
- equalities = []; // Stack of indices where equalities are found.
- equalitiesLength = 0; // Keeping our own length var is faster in JS.
- /** @type {?string} */
- lastequality = null;
- // Always equal to diffs[equalities[equalitiesLength - 1]][1]
- pointer = 0; // Index of current position.
- // Is there an insertion operation before the last equality.
- preIns = false;
- // Is there a deletion operation before the last equality.
- preDel = false;
- // Is there an insertion operation after the last equality.
- postIns = false;
- // Is there a deletion operation after the last equality.
- postDel = false;
- while ( pointer < diffs.length ) {
- if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found.
- if ( diffs[ pointer ][ 1 ].length < this.DiffEditCost && ( postIns || postDel ) ) {
- // Candidate found.
- equalities[ equalitiesLength++ ] = pointer;
- preIns = postIns;
- preDel = postDel;
- lastequality = diffs[ pointer ][ 1 ];
- } else {
- // Not a candidate, and can never become one.
- equalitiesLength = 0;
- lastequality = null;
- }
- postIns = postDel = false;
- } else { // An insertion or deletion.
- if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) {
- postDel = true;
- } else {
- postIns = true;
- }
- /*
- * Five types to be split:
- * A BXYC D
- * A XC D
- * A BXC
- * AXC D
- * A BXC
- */
- if ( lastequality && ( ( preIns && preDel && postIns && postDel ) ||
- ( ( lastequality.length < this.DiffEditCost / 2 ) &&
- ( preIns + preDel + postIns + postDel ) === 3 ) ) ) {
- // Duplicate record.
- diffs.splice( equalities[equalitiesLength - 1], 0, [ DIFF_DELETE, lastequality ] );
- // Change second copy to insert.
- diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
- equalitiesLength--; // Throw away the equality we just deleted;
- lastequality = null;
- if (preIns && preDel) {
- // No changes made which could affect previous entry, keep going.
- postIns = postDel = true;
- equalitiesLength = 0;
- } else {
- equalitiesLength--; // Throw away the previous equality.
- pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
- postIns = postDel = false;
- }
- changes = true;
- }
- }
- pointer++;
- }
-
- if ( changes ) {
- this.diffCleanupMerge( diffs );
- }
- };
-
- /**
- * Convert a diff array into a pretty HTML report.
- * @param {!Array.} diffs Array of diff tuples.
- * @param {integer} string to be beautified.
- * @return {string} HTML representation.
- */
- DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) {
- var op, data, x, html = [];
- for ( x = 0; x < diffs.length; x++ ) {
- op = diffs[x][0]; // Operation (insert, delete, equal)
- data = diffs[x][1]; // Text of change.
- switch ( op ) {
- case DIFF_INSERT:
- html[x] = "" + data + " ";
- break;
- case DIFF_DELETE:
- html[x] = "" + data + "";
- break;
- case DIFF_EQUAL:
- html[x] = "" + data + " ";
- break;
- }
- }
- return html.join("");
- };
-
- /**
- * Determine the common prefix of two strings.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {number} The number of characters common to the start of each
- * string.
- */
- DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) {
- var pointermid, pointermax, pointermin, pointerstart;
- // Quick check for common null cases.
- if ( !text1 || !text2 || text1.charAt(0) !== text2.charAt(0) ) {
- return 0;
- }
- // Binary search.
- // Performance analysis: http://neil.fraser.name/news/2007/10/09/
- pointermin = 0;
- pointermax = Math.min( text1.length, text2.length );
- pointermid = pointermax;
- pointerstart = 0;
- while ( pointermin < pointermid ) {
- if ( text1.substring( pointerstart, pointermid ) === text2.substring( pointerstart, pointermid ) ) {
- pointermin = pointermid;
- pointerstart = pointermin;
- } else {
- pointermax = pointermid;
- }
- pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
- }
- return pointermid;
- };
-
- /**
- * Determine the common suffix of two strings.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {number} The number of characters common to the end of each string.
- */
- DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) {
- var pointermid, pointermax, pointermin, pointerend;
- // Quick check for common null cases.
- if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) {
- return 0;
- }
- // Binary search.
- // Performance analysis: http://neil.fraser.name/news/2007/10/09/
- pointermin = 0;
- pointermax = Math.min(text1.length, text2.length);
- pointermid = pointermax;
- pointerend = 0;
- while ( pointermin < pointermid ) {
- if (text1.substring( text1.length - pointermid, text1.length - pointerend ) ===
- text2.substring( text2.length - pointermid, text2.length - pointerend ) ) {
- pointermin = pointermid;
- pointerend = pointermin;
- } else {
- pointermax = pointermid;
- }
- pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
- }
- return pointermid;
- };
-
- /**
- * Find the differences between two texts. Assumes that the texts do not
- * have any common prefix or suffix.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {boolean} checklines Speedup flag. If false, then don't run a
- * line-level diff first to identify the changed areas.
- * If true, then run a faster, slightly less optimal diff.
- * @param {number} deadline Time when the diff should be complete by.
- * @return {!Array.} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) {
- var diffs, longtext, shorttext, i, hm,
- text1A, text2A, text1B, text2B,
- midCommon, diffsA, diffsB;
-
- if ( !text1 ) {
- // Just add some text (speedup).
- return [
- [ DIFF_INSERT, text2 ]
- ];
- }
-
- if (!text2) {
- // Just delete some text (speedup).
- return [
- [ DIFF_DELETE, text1 ]
- ];
- }
-
- longtext = text1.length > text2.length ? text1 : text2;
- shorttext = text1.length > text2.length ? text2 : text1;
- i = longtext.indexOf( shorttext );
- if ( i !== -1 ) {
- // Shorter text is inside the longer text (speedup).
- diffs = [
- [ DIFF_INSERT, longtext.substring( 0, i ) ],
- [ DIFF_EQUAL, shorttext ],
- [ DIFF_INSERT, longtext.substring( i + shorttext.length ) ]
- ];
- // Swap insertions for deletions if diff is reversed.
- if ( text1.length > text2.length ) {
- diffs[0][0] = diffs[2][0] = DIFF_DELETE;
- }
- return diffs;
- }
-
- if ( shorttext.length === 1 ) {
- // Single character string.
- // After the previous speedup, the character can't be an equality.
- return [
- [ DIFF_DELETE, text1 ],
- [ DIFF_INSERT, text2 ]
- ];
- }
-
- // Check to see if the problem can be split in two.
- hm = this.diffHalfMatch(text1, text2);
- if (hm) {
- // A half-match was found, sort out the return data.
- text1A = hm[0];
- text1B = hm[1];
- text2A = hm[2];
- text2B = hm[3];
- midCommon = hm[4];
- // Send both pairs off for separate processing.
- diffsA = this.DiffMain(text1A, text2A, checklines, deadline);
- diffsB = this.DiffMain(text1B, text2B, checklines, deadline);
- // Merge the results.
- return diffsA.concat([
- [ DIFF_EQUAL, midCommon ]
- ], diffsB);
- }
-
- if (checklines && text1.length > 100 && text2.length > 100) {
- return this.diffLineMode(text1, text2, deadline);
- }
-
- return this.diffBisect(text1, text2, deadline);
- };
-
- /**
- * Do the two texts share a substring which is at least half the length of the
- * longer text?
- * This speedup can produce non-minimal diffs.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {Array.} Five element Array, containing the prefix of
- * text1, the suffix of text1, the prefix of text2, the suffix of
- * text2 and the common middle. Or null if there was no match.
- * @private
- */
- DiffMatchPatch.prototype.diffHalfMatch = function(text1, text2) {
- var longtext, shorttext, dmp,
- text1A, text2B, text2A, text1B, midCommon,
- hm1, hm2, hm;
- if (this.DiffTimeout <= 0) {
- // Don't risk returning a non-optimal diff if we have unlimited time.
- return null;
- }
- longtext = text1.length > text2.length ? text1 : text2;
- shorttext = text1.length > text2.length ? text2 : text1;
- if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {
- return null; // Pointless.
- }
- dmp = this; // 'this' becomes 'window' in a closure.
-
- /**
- * Does a substring of shorttext exist within longtext such that the substring
- * is at least half the length of longtext?
- * Closure, but does not reference any external variables.
- * @param {string} longtext Longer string.
- * @param {string} shorttext Shorter string.
- * @param {number} i Start index of quarter length substring within longtext.
- * @return {Array.} Five element Array, containing the prefix of
- * longtext, the suffix of longtext, the prefix of shorttext, the suffix
- * of shorttext and the common middle. Or null if there was no match.
- * @private
- */
- function diffHalfMatchI(longtext, shorttext, i) {
- var seed, j, bestCommon, prefixLength, suffixLength,
- bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;
- // Start with a 1/4 length substring at position i as a seed.
- seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
- j = -1;
- bestCommon = "";
- while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {
- prefixLength = dmp.diffCommonPrefix(longtext.substring(i),
- shorttext.substring(j));
- suffixLength = dmp.diffCommonSuffix(longtext.substring(0, i),
- shorttext.substring(0, j));
- if (bestCommon.length < suffixLength + prefixLength) {
- bestCommon = shorttext.substring(j - suffixLength, j) +
- shorttext.substring(j, j + prefixLength);
- bestLongtextA = longtext.substring(0, i - suffixLength);
- bestLongtextB = longtext.substring(i + prefixLength);
- bestShorttextA = shorttext.substring(0, j - suffixLength);
- bestShorttextB = shorttext.substring(j + prefixLength);
- }
- }
- if (bestCommon.length * 2 >= longtext.length) {
- return [ bestLongtextA, bestLongtextB,
- bestShorttextA, bestShorttextB, bestCommon
- ];
- } else {
- return null;
- }
- }
-
- // First check if the second quarter is the seed for a half-match.
- hm1 = diffHalfMatchI(longtext, shorttext,
- Math.ceil(longtext.length / 4));
- // Check again based on the third quarter.
- hm2 = diffHalfMatchI(longtext, shorttext,
- Math.ceil(longtext.length / 2));
- if (!hm1 && !hm2) {
- return null;
- } else if (!hm2) {
- hm = hm1;
- } else if (!hm1) {
- hm = hm2;
- } else {
- // Both matched. Select the longest.
- hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
- }
-
- // A half-match was found, sort out the return data.
- text1A, text1B, text2A, text2B;
- if (text1.length > text2.length) {
- text1A = hm[0];
- text1B = hm[1];
- text2A = hm[2];
- text2B = hm[3];
- } else {
- text2A = hm[0];
- text2B = hm[1];
- text1A = hm[2];
- text1B = hm[3];
- }
- midCommon = hm[4];
- return [ text1A, text1B, text2A, text2B, midCommon ];
- };
-
- /**
- * Do a quick line-level diff on both strings, then rediff the parts for
- * greater accuracy.
- * This speedup can produce non-minimal diffs.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} deadline Time when the diff should be complete by.
- * @return {!Array.} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffLineMode = function(text1, text2, deadline) {
- var a, diffs, linearray, pointer, countInsert,
- countDelete, textInsert, textDelete, j;
- // Scan the text on a line-by-line basis first.
- a = this.diffLinesToChars(text1, text2);
- text1 = a.chars1;
- text2 = a.chars2;
- linearray = a.lineArray;
-
- diffs = this.DiffMain(text1, text2, false, deadline);
-
- // Convert the diff back to original text.
- this.diffCharsToLines(diffs, linearray);
- // Eliminate freak matches (e.g. blank lines)
- this.diffCleanupSemantic(diffs);
-
- // Rediff any replacement blocks, this time character-by-character.
- // Add a dummy entry at the end.
- diffs.push( [ DIFF_EQUAL, "" ] );
- pointer = 0;
- countDelete = 0;
- countInsert = 0;
- textDelete = "";
- textInsert = "";
- while (pointer < diffs.length) {
- switch ( diffs[pointer][0] ) {
- case DIFF_INSERT:
- countInsert++;
- textInsert += diffs[pointer][1];
- break;
- case DIFF_DELETE:
- countDelete++;
- textDelete += diffs[pointer][1];
- break;
- case DIFF_EQUAL:
- // Upon reaching an equality, check for prior redundancies.
- if (countDelete >= 1 && countInsert >= 1) {
- // Delete the offending records and add the merged ones.
- diffs.splice(pointer - countDelete - countInsert,
- countDelete + countInsert);
- pointer = pointer - countDelete - countInsert;
- a = this.DiffMain(textDelete, textInsert, false, deadline);
- for (j = a.length - 1; j >= 0; j--) {
- diffs.splice( pointer, 0, a[j] );
- }
- pointer = pointer + a.length;
- }
- countInsert = 0;
- countDelete = 0;
- textDelete = "";
- textInsert = "";
- break;
- }
- pointer++;
- }
- diffs.pop(); // Remove the dummy entry at the end.
-
- return diffs;
- };
-
- /**
- * Find the 'middle snake' of a diff, split the problem in two
- * and return the recursively constructed diff.
- * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} deadline Time at which to bail if not yet complete.
- * @return {!Array.} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffBisect = function(text1, text2, deadline) {
- var text1Length, text2Length, maxD, vOffset, vLength,
- v1, v2, x, delta, front, k1start, k1end, k2start,
- k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;
- // Cache the text lengths to prevent multiple calls.
- text1Length = text1.length;
- text2Length = text2.length;
- maxD = Math.ceil((text1Length + text2Length) / 2);
- vOffset = maxD;
- vLength = 2 * maxD;
- v1 = new Array(vLength);
- v2 = new Array(vLength);
- // Setting all elements to -1 is faster in Chrome & Firefox than mixing
- // integers and undefined.
- for (x = 0; x < vLength; x++) {
- v1[x] = -1;
- v2[x] = -1;
- }
- v1[vOffset + 1] = 0;
- v2[vOffset + 1] = 0;
- delta = text1Length - text2Length;
- // If the total number of characters is odd, then the front path will collide
- // with the reverse path.
- front = (delta % 2 !== 0);
- // Offsets for start and end of k loop.
- // Prevents mapping of space beyond the grid.
- k1start = 0;
- k1end = 0;
- k2start = 0;
- k2end = 0;
- for (d = 0; d < maxD; d++) {
- // Bail out if deadline is reached.
- if ((new Date()).getTime() > deadline) {
- break;
- }
-
- // Walk the front path one step.
- for (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
- k1Offset = vOffset + k1;
- if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) {
- x1 = v1[k1Offset + 1];
- } else {
- x1 = v1[k1Offset - 1] + 1;
- }
- y1 = x1 - k1;
- while (x1 < text1Length && y1 < text2Length &&
- text1.charAt(x1) === text2.charAt(y1)) {
- x1++;
- y1++;
- }
- v1[k1Offset] = x1;
- if (x1 > text1Length) {
- // Ran off the right of the graph.
- k1end += 2;
- } else if (y1 > text2Length) {
- // Ran off the bottom of the graph.
- k1start += 2;
- } else if (front) {
- k2Offset = vOffset + delta - k1;
- if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {
- // Mirror x2 onto top-left coordinate system.
- x2 = text1Length - v2[k2Offset];
- if (x1 >= x2) {
- // Overlap detected.
- return this.diffBisectSplit(text1, text2, x1, y1, deadline);
- }
- }
- }
- }
-
- // Walk the reverse path one step.
- for (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
- k2Offset = vOffset + k2;
- if ( k2 === -d || (k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) {
- x2 = v2[k2Offset + 1];
- } else {
- x2 = v2[k2Offset - 1] + 1;
- }
- y2 = x2 - k2;
- while (x2 < text1Length && y2 < text2Length &&
- text1.charAt(text1Length - x2 - 1) ===
- text2.charAt(text2Length - y2 - 1)) {
- x2++;
- y2++;
- }
- v2[k2Offset] = x2;
- if (x2 > text1Length) {
- // Ran off the left of the graph.
- k2end += 2;
- } else if (y2 > text2Length) {
- // Ran off the top of the graph.
- k2start += 2;
- } else if (!front) {
- k1Offset = vOffset + delta - k2;
- if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {
- x1 = v1[k1Offset];
- y1 = vOffset + x1 - k1Offset;
- // Mirror x2 onto top-left coordinate system.
- x2 = text1Length - x2;
- if (x1 >= x2) {
- // Overlap detected.
- return this.diffBisectSplit(text1, text2, x1, y1, deadline);
- }
- }
- }
- }
- }
- // Diff took too long and hit the deadline or
- // number of diffs equals number of characters, no commonality at all.
- return [
- [ DIFF_DELETE, text1 ],
- [ DIFF_INSERT, text2 ]
- ];
- };
-
- /**
- * Given the location of the 'middle snake', split the diff in two parts
- * and recurse.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} x Index of split point in text1.
- * @param {number} y Index of split point in text2.
- * @param {number} deadline Time at which to bail if not yet complete.
- * @return {!Array.} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) {
- var text1a, text1b, text2a, text2b, diffs, diffsb;
- text1a = text1.substring(0, x);
- text2a = text2.substring(0, y);
- text1b = text1.substring(x);
- text2b = text2.substring(y);
-
- // Compute both diffs serially.
- diffs = this.DiffMain(text1a, text2a, false, deadline);
- diffsb = this.DiffMain(text1b, text2b, false, deadline);
-
- return diffs.concat(diffsb);
- };
-
- /**
- * Reduce the number of edits by eliminating semantically trivial equalities.
- * @param {!Array.} diffs Array of diff tuples.
- */
- DiffMatchPatch.prototype.diffCleanupSemantic = function(diffs) {
- var changes, equalities, equalitiesLength, lastequality,
- pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1,
- lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;
- changes = false;
- equalities = []; // Stack of indices where equalities are found.
- equalitiesLength = 0; // Keeping our own length var is faster in JS.
- /** @type {?string} */
- lastequality = null;
- // Always equal to diffs[equalities[equalitiesLength - 1]][1]
- pointer = 0; // Index of current position.
- // Number of characters that changed prior to the equality.
- lengthInsertions1 = 0;
- lengthDeletions1 = 0;
- // Number of characters that changed after the equality.
- lengthInsertions2 = 0;
- lengthDeletions2 = 0;
- while (pointer < diffs.length) {
- if (diffs[pointer][0] === DIFF_EQUAL) { // Equality found.
- equalities[equalitiesLength++] = pointer;
- lengthInsertions1 = lengthInsertions2;
- lengthDeletions1 = lengthDeletions2;
- lengthInsertions2 = 0;
- lengthDeletions2 = 0;
- lastequality = diffs[pointer][1];
- } else { // An insertion or deletion.
- if (diffs[pointer][0] === DIFF_INSERT) {
- lengthInsertions2 += diffs[pointer][1].length;
- } else {
- lengthDeletions2 += diffs[pointer][1].length;
- }
- // Eliminate an equality that is smaller or equal to the edits on both
- // sides of it.
- if (lastequality && (lastequality.length <=
- Math.max(lengthInsertions1, lengthDeletions1)) &&
- (lastequality.length <= Math.max(lengthInsertions2,
- lengthDeletions2))) {
- // Duplicate record.
- diffs.splice( equalities[ equalitiesLength - 1 ], 0, [ DIFF_DELETE, lastequality ] );
- // Change second copy to insert.
- diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;
- // Throw away the equality we just deleted.
- equalitiesLength--;
- // Throw away the previous equality (it needs to be reevaluated).
- equalitiesLength--;
- pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
- lengthInsertions1 = 0; // Reset the counters.
- lengthDeletions1 = 0;
- lengthInsertions2 = 0;
- lengthDeletions2 = 0;
- lastequality = null;
- changes = true;
- }
- }
- pointer++;
- }
-
- // Normalize the diff.
- if (changes) {
- this.diffCleanupMerge(diffs);
- }
-
- // Find any overlaps between deletions and insertions.
- // e.g: abcxxxxxxdef
- // -> abcxxxdef
- // e.g: xxxabcdefxxx
- // -> def xxxabc
- // Only extract an overlap if it is as big as the edit ahead or behind it.
- pointer = 1;
- while (pointer < diffs.length) {
- if (diffs[pointer - 1][0] === DIFF_DELETE &&
- diffs[pointer][0] === DIFF_INSERT) {
- deletion = diffs[pointer - 1][1];
- insertion = diffs[pointer][1];
- overlapLength1 = this.diffCommonOverlap(deletion, insertion);
- overlapLength2 = this.diffCommonOverlap(insertion, deletion);
- if (overlapLength1 >= overlapLength2) {
- if (overlapLength1 >= deletion.length / 2 ||
- overlapLength1 >= insertion.length / 2) {
- // Overlap found. Insert an equality and trim the surrounding edits.
- diffs.splice( pointer, 0, [ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ] );
- diffs[pointer - 1][1] =
- deletion.substring(0, deletion.length - overlapLength1);
- diffs[pointer + 1][1] = insertion.substring(overlapLength1);
- pointer++;
- }
- } else {
- if (overlapLength2 >= deletion.length / 2 ||
- overlapLength2 >= insertion.length / 2) {
- // Reverse overlap found.
- // Insert an equality and swap and trim the surrounding edits.
- diffs.splice( pointer, 0, [ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ] );
- diffs[pointer - 1][0] = DIFF_INSERT;
- diffs[pointer - 1][1] =
- insertion.substring(0, insertion.length - overlapLength2);
- diffs[pointer + 1][0] = DIFF_DELETE;
- diffs[pointer + 1][1] =
- deletion.substring(overlapLength2);
- pointer++;
- }
- }
- pointer++;
- }
- pointer++;
- }
- };
-
- /**
- * Determine if the suffix of one string is the prefix of another.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {number} The number of characters common to the end of the first
- * string and the start of the second string.
- * @private
- */
- DiffMatchPatch.prototype.diffCommonOverlap = function(text1, text2) {
- var text1Length, text2Length, textLength,
- best, length, pattern, found;
- // Cache the text lengths to prevent multiple calls.
- text1Length = text1.length;
- text2Length = text2.length;
- // Eliminate the null case.
- if (text1Length === 0 || text2Length === 0) {
- return 0;
- }
- // Truncate the longer string.
- if (text1Length > text2Length) {
- text1 = text1.substring(text1Length - text2Length);
- } else if (text1Length < text2Length) {
- text2 = text2.substring(0, text1Length);
- }
- textLength = Math.min(text1Length, text2Length);
- // Quick check for the worst case.
- if (text1 === text2) {
- return textLength;
- }
-
- // Start by looking for a single character match
- // and increase length until no match is found.
- // Performance analysis: http://neil.fraser.name/news/2010/11/04/
- best = 0;
- length = 1;
- while (true) {
- pattern = text1.substring(textLength - length);
- found = text2.indexOf(pattern);
- if (found === -1) {
- return best;
- }
- length += found;
- if (found === 0 || text1.substring(textLength - length) ===
- text2.substring(0, length)) {
- best = length;
- length++;
- }
- }
- };
-
- /**
- * Split two texts into an array of strings. Reduce the texts to a string of
- * hashes where each Unicode character represents one line.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {{chars1: string, chars2: string, lineArray: !Array.}}
- * An object containing the encoded text1, the encoded text2 and
- * the array of unique strings.
- * The zeroth element of the array of unique strings is intentionally blank.
- * @private
- */
- DiffMatchPatch.prototype.diffLinesToChars = function(text1, text2) {
- var lineArray, lineHash, chars1, chars2;
- lineArray = []; // e.g. lineArray[4] === 'Hello\n'
- lineHash = {}; // e.g. lineHash['Hello\n'] === 4
-
- // '\x00' is a valid character, but various debuggers don't like it.
- // So we'll insert a junk entry to avoid generating a null character.
- lineArray[0] = "";
-
- /**
- * Split a text into an array of strings. Reduce the texts to a string of
- * hashes where each Unicode character represents one line.
- * Modifies linearray and linehash through being a closure.
- * @param {string} text String to encode.
- * @return {string} Encoded string.
- * @private
- */
- function diffLinesToCharsMunge(text) {
- var chars, lineStart, lineEnd, lineArrayLength, line;
- chars = "";
- // Walk the text, pulling out a substring for each line.
- // text.split('\n') would would temporarily double our memory footprint.
- // Modifying text would create many large strings to garbage collect.
- lineStart = 0;
- lineEnd = -1;
- // Keeping our own length variable is faster than looking it up.
- lineArrayLength = lineArray.length;
- while (lineEnd < text.length - 1) {
- lineEnd = text.indexOf("\n", lineStart);
- if (lineEnd === -1) {
- lineEnd = text.length - 1;
- }
- line = text.substring(lineStart, lineEnd + 1);
- lineStart = lineEnd + 1;
-
- if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :
- (lineHash[line] !== undefined)) {
- chars += String.fromCharCode( lineHash[ line ] );
- } else {
- chars += String.fromCharCode(lineArrayLength);
- lineHash[line] = lineArrayLength;
- lineArray[lineArrayLength++] = line;
- }
- }
- return chars;
- }
-
- chars1 = diffLinesToCharsMunge(text1);
- chars2 = diffLinesToCharsMunge(text2);
- return {
- chars1: chars1,
- chars2: chars2,
- lineArray: lineArray
- };
- };
-
- /**
- * Rehydrate the text in a diff from a string of line hashes to real lines of
- * text.
- * @param {!Array.} diffs Array of diff tuples.
- * @param {!Array.} lineArray Array of unique strings.
- * @private
- */
- DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) {
- var x, chars, text, y;
- for ( x = 0; x < diffs.length; x++ ) {
- chars = diffs[x][1];
- text = [];
- for ( y = 0; y < chars.length; y++ ) {
- text[y] = lineArray[chars.charCodeAt(y)];
- }
- diffs[x][1] = text.join("");
- }
- };
-
- /**
- * Reorder and merge like edit sections. Merge equalities.
- * Any edit section can move as long as it doesn't cross an equality.
- * @param {!Array.} diffs Array of diff tuples.
- */
- DiffMatchPatch.prototype.diffCleanupMerge = function(diffs) {
- var pointer, countDelete, countInsert, textInsert, textDelete,
- commonlength, changes;
- diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end.
- pointer = 0;
- countDelete = 0;
- countInsert = 0;
- textDelete = "";
- textInsert = "";
- commonlength;
- while (pointer < diffs.length) {
- switch ( diffs[ pointer ][ 0 ] ) {
- case DIFF_INSERT:
- countInsert++;
- textInsert += diffs[pointer][1];
- pointer++;
- break;
- case DIFF_DELETE:
- countDelete++;
- textDelete += diffs[pointer][1];
- pointer++;
- break;
- case DIFF_EQUAL:
- // Upon reaching an equality, check for prior redundancies.
- if (countDelete + countInsert > 1) {
- if (countDelete !== 0 && countInsert !== 0) {
- // Factor out any common prefixies.
- commonlength = this.diffCommonPrefix(textInsert, textDelete);
- if (commonlength !== 0) {
- if ((pointer - countDelete - countInsert) > 0 &&
- diffs[pointer - countDelete - countInsert - 1][0] ===
- DIFF_EQUAL) {
- diffs[pointer - countDelete - countInsert - 1][1] +=
- textInsert.substring(0, commonlength);
- } else {
- diffs.splice( 0, 0, [ DIFF_EQUAL,
- textInsert.substring( 0, commonlength )
- ] );
- pointer++;
- }
- textInsert = textInsert.substring(commonlength);
- textDelete = textDelete.substring(commonlength);
- }
- // Factor out any common suffixies.
- commonlength = this.diffCommonSuffix(textInsert, textDelete);
- if (commonlength !== 0) {
- diffs[pointer][1] = textInsert.substring(textInsert.length -
- commonlength) + diffs[pointer][1];
- textInsert = textInsert.substring(0, textInsert.length -
- commonlength);
- textDelete = textDelete.substring(0, textDelete.length -
- commonlength);
- }
- }
- // Delete the offending records and add the merged ones.
- if (countDelete === 0) {
- diffs.splice( pointer - countInsert,
- countDelete + countInsert, [ DIFF_INSERT, textInsert ] );
- } else if (countInsert === 0) {
- diffs.splice( pointer - countDelete,
- countDelete + countInsert, [ DIFF_DELETE, textDelete ] );
- } else {
- diffs.splice( pointer - countDelete - countInsert,
- countDelete + countInsert, [ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ] );
- }
- pointer = pointer - countDelete - countInsert +
- (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1;
- } else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {
- // Merge this equality with the previous one.
- diffs[pointer - 1][1] += diffs[pointer][1];
- diffs.splice(pointer, 1);
- } else {
- pointer++;
- }
- countInsert = 0;
- countDelete = 0;
- textDelete = "";
- textInsert = "";
- break;
- }
- }
- if (diffs[diffs.length - 1][1] === "") {
- diffs.pop(); // Remove the dummy entry at the end.
- }
-
- // Second pass: look for single edits surrounded on both sides by equalities
- // which can be shifted sideways to eliminate an equality.
- // e.g: ABA C -> AB AC
- changes = false;
- pointer = 1;
- // Intentionally ignore the first and last element (don't need checking).
- while (pointer < diffs.length - 1) {
- if (diffs[pointer - 1][0] === DIFF_EQUAL &&
- diffs[pointer + 1][0] === DIFF_EQUAL) {
- // This is a single edit surrounded by equalities.
- if ( diffs[ pointer ][ 1 ].substring( diffs[ pointer ][ 1 ].length -
- diffs[ pointer - 1 ][ 1 ].length ) === diffs[ pointer - 1 ][ 1 ] ) {
- // Shift the edit over the previous equality.
- diffs[pointer][1] = diffs[pointer - 1][1] +
- diffs[pointer][1].substring(0, diffs[pointer][1].length -
- diffs[pointer - 1][1].length);
- diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
- diffs.splice(pointer - 1, 1);
- changes = true;
- } else if ( diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer + 1 ][ 1 ].length ) ===
- diffs[ pointer + 1 ][ 1 ] ) {
- // Shift the edit over the next equality.
- diffs[pointer - 1][1] += diffs[pointer + 1][1];
- diffs[pointer][1] =
- diffs[pointer][1].substring(diffs[pointer + 1][1].length) +
- diffs[pointer + 1][1];
- diffs.splice(pointer + 1, 1);
- changes = true;
- }
- }
- pointer++;
- }
- // If shifts were made, the diff needs reordering and another shift sweep.
- if (changes) {
- this.diffCleanupMerge(diffs);
- }
- };
-
- return function(o, n) {
- var diff, output, text;
- diff = new DiffMatchPatch();
- output = diff.DiffMain(o, n);
- //console.log(output);
- diff.diffCleanupEfficiency(output);
- text = diff.diffPrettyHtml(output);
-
- return text;
- };
-}());
-// jscs:enable
-
(function() {
+// Don't load the HTML Reporter on non-Browser environments
+if ( typeof window === "undefined" || !window.document ) {
+ return;
+}
+
// Deprecated QUnit.init - Ref #530
// Re-initialize the configuration options
QUnit.init = function() {
@@ -3115,12 +3427,8 @@ QUnit.init = function() {
}
};
-// Don't load the HTML Reporter on non-Browser environments
-if ( typeof window === "undefined" ) {
- return;
-}
-
var config = QUnit.config,
+ collapseNext = false,
hasOwn = Object.prototype.hasOwnProperty,
defined = {
document: window.document !== undefined,
@@ -3479,7 +3787,7 @@ function appendHeader() {
if ( header ) {
header.innerHTML = "" + header.innerHTML + " ";
}
}
@@ -3517,6 +3825,18 @@ function storeFixture() {
}
}
+function appendFilteredTest() {
+ var testId = QUnit.config.testId;
+ if ( !testId || testId.length <= 0 ) {
+ return "";
+ }
+ return "";
+}
+
function appendUserAgent() {
var userAgent = id( "qunit-userAgent" );
@@ -3524,7 +3844,7 @@ function appendUserAgent() {
userAgent.innerHTML = "";
userAgent.appendChild(
document.createTextNode(
- "QUnit " + QUnit.version + "; " + navigator.userAgent
+ "QUnit " + QUnit.version + "; " + navigator.userAgent
)
);
}
@@ -3588,6 +3908,7 @@ QUnit.begin(function( details ) {
"" +
" " +
"
" +
+ appendFilteredTest() +
" " +
" ";
}
@@ -3693,9 +4014,15 @@ QUnit.testStart(function( details ) {
});
+function stripHtml( string ) {
+ // strip tags, html entity and whitespaces
+ return string.replace(/<\/?[^>]+(>|$)/g, "").replace(/\"/g, "").replace(/\s+/g, "");
+}
+
QUnit.log(function( details ) {
var assertList, assertLi,
- message, expected, actual,
+ message, expected, actual, diff,
+ showDiff = false,
testItem = id( "qunit-test-output-" + details.testId );
if ( !testItem ) {
@@ -3710,26 +4037,44 @@ QUnit.log(function( details ) {
// when it calls, it's implicit to also not show expected and diff stuff
// Also, we need to check details.expected existence, as it can exist and be undefined
if ( !details.result && hasOwn.call( details, "expected" ) ) {
- expected = escapeText( QUnit.dump.parse( details.expected ) );
+ if ( details.negative ) {
+ expected = escapeText( "NOT " + QUnit.dump.parse( details.expected ) );
+ } else {
+ expected = escapeText( QUnit.dump.parse( details.expected ) );
+ }
+
actual = escapeText( QUnit.dump.parse( details.actual ) );
message += "Expected: " +
expected +
" ";
if ( actual !== expected ) {
+
message += "Result: " +
- actual + " " +
- "Diff: " +
- QUnit.diff( expected, actual ) + " ";
- } else {
- if ( expected.indexOf( "[object Array]" ) !== -1 ||
- expected.indexOf( "[object Object]" ) !== -1 ) {
- message += "Message: " +
- "Diff suppressed as the depth of object is more than current max depth (" +
- QUnit.config.maxDepth + ").Hint: Use QUnit.dump.maxDepth
to " +
- " run with a higher max depth or " +
- "Rerun without max depth.
";
+ actual + "";
+
+ // Don't show diff if actual or expected are booleans
+ if ( !( /^(true|false)$/.test( actual ) ) &&
+ !( /^(true|false)$/.test( expected ) ) ) {
+ diff = QUnit.diff( expected, actual );
+ showDiff = stripHtml( diff ).length !==
+ stripHtml( expected ).length +
+ stripHtml( actual ).length;
+ }
+
+ // Don't show diff if expected and actual are totally different
+ if ( showDiff ) {
+ message += "Diff: " +
+ diff + " ";
}
+ } else if ( expected.indexOf( "[object Array]" ) !== -1 ||
+ expected.indexOf( "[object Object]" ) !== -1 ) {
+ message += "Message: " +
+ "Diff suppressed as the depth of object is more than current max depth (" +
+ QUnit.config.maxDepth + ").Hint: Use QUnit.dump.maxDepth
to " +
+ " run with a higher max depth or " +
+ "Rerun without max depth.
";
}
if ( details.source ) {
@@ -3739,7 +4084,7 @@ QUnit.log(function( details ) {
message += "
";
- // this occours when pushFailure is set and we have an extracted stack trace
+ // this occurs when pushFailure is set and we have an extracted stack trace
} else if ( !details.result && details.source ) {
message += "" +
"Source: " +
@@ -3757,7 +4102,7 @@ QUnit.log(function( details ) {
QUnit.testDone(function( details ) {
var testTitle, time, testItem, assertList,
- good, bad, testCounts, skipped,
+ good, bad, testCounts, skipped, sourceName,
tests = id( "qunit-tests" );
if ( !tests ) {
@@ -3781,6 +4126,16 @@ QUnit.testDone(function( details ) {
}
if ( bad === 0 ) {
+
+ // Collapse the passing tests
+ addClass( assertList, "qunit-collapsed" );
+ } else if ( bad && config.collapse && !collapseNext ) {
+
+ // Skip collapsing the first failing test
+ collapseNext = true;
+ } else {
+
+ // Collapse remaining tests
addClass( assertList, "qunit-collapsed" );
}
@@ -3812,10 +4167,31 @@ QUnit.testDone(function( details ) {
time.innerHTML = details.runtime + " ms";
testItem.insertBefore( time, assertList );
}
+
+ // Show the source of the test when showing assertions
+ if ( details.source ) {
+ sourceName = document.createElement( "p" );
+ sourceName.innerHTML = "Source: " + details.source;
+ addClass( sourceName, "qunit-source" );
+ if ( bad === 0 ) {
+ addClass( sourceName, "qunit-collapsed" );
+ }
+ addEvent( testTitle, "click", function() {
+ toggleClass( sourceName, "qunit-collapsed" );
+ });
+ testItem.appendChild( sourceName );
+ }
});
if ( defined.document ) {
- if ( document.readyState === "complete" ) {
+
+ // Avoid readyState issue with phantomjs
+ // Ref: #818
+ var notPhantom = ( function( p ) {
+ return !( p && p.version && p.version.major > 0 );
+ } )( window.phantom );
+
+ if ( notPhantom && document.readyState === "complete" ) {
QUnit.load();
} else {
addEvent( window, "load", QUnit.load );
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js b/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
index 168a1c18d5..b339371da0 100644
--- a/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
+++ b/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
@@ -2,6 +2,10 @@
'use strict';
/**
+ * Fired after an edit was successfully saved.
+ *
+ * Does not fire for null edits.
+ *
* @event postEdit
* @member mw.hook
* @param {Object} [data] Optional data
diff --git a/resources/src/mediawiki.less/mediawiki.ui/mixins.less b/resources/src/mediawiki.less/mediawiki.ui/mixins.less
index 93b7265f39..12825dee72 100644
--- a/resources/src/mediawiki.less/mediawiki.ui/mixins.less
+++ b/resources/src/mediawiki.less/mediawiki.ui/mixins.less
@@ -33,7 +33,7 @@
// Button styling
// ----------------------------------------------------------------------------
-.button-colors(@bgColor, @highlightColor, @activeColor) {
+.button-colors( @bgColor, @highlightColor, @activeColor ) {
background: @bgColor;
&:hover {
@@ -60,7 +60,7 @@
}
}
-.button-colors(@bgColor, @highlightColor, @activeColor) when (lightness(@bgColor) >= 70%) {
+.button-colors( @bgColor, @highlightColor, @activeColor ) when ( lightness( @bgColor ) >= 70% ) {
color: @colorButtonText;
border: 1px solid @colorGray12;
@@ -87,7 +87,7 @@
}
}
-.button-colors(@bgColor, @highlightColor, @activeColor) when (lightness(@bgColor) < 70%) {
+.button-colors( @bgColor, @highlightColor, @activeColor ) when ( lightness( @bgColor ) < 70% ) {
color: #fff;
// border of the same color as background so that light background and
// dark background buttons are the same height and width
@@ -107,7 +107,7 @@
}
}
-.button-colors-quiet(@textColor, @highlightColor, @activeColor) {
+.button-colors-quiet( @textColor, @highlightColor, @activeColor ) {
// Quiet buttons all start gray, and reveal
// constructive/progressive/destructive color on hover and active.
color: @colorButtonText;
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.js b/resources/src/mediawiki.special/mediawiki.special.preferences.js
index 29322f423e..a756f22d4d 100644
--- a/resources/src/mediawiki.special/mediawiki.special.preferences.js
+++ b/resources/src/mediawiki.special/mediawiki.special.preferences.js
@@ -266,7 +266,7 @@
// Check if all of the form values are unchanged
function isPrefsChanged() {
- var inputs = $( '#mw-prefs-form :input' ),
+ var inputs = $( '#mw-prefs-form :input[name]' ),
input, $input, inputType,
index, optIndex,
opt;
@@ -276,7 +276,8 @@
$input = $( input );
// Different types of inputs have different methods for accessing defaults
- if ( $input.is( 'select' ) ) { // has the property defaultSelected for each option
+ if ( $input.is( 'select' ) ) {
+ // has the property defaultSelected for each option
for ( optIndex = 0; optIndex < input.options.length; optIndex++ ) {
opt = input.options[ optIndex ];
if ( opt.selected !== opt.defaultSelected ) {
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
index 831ba8c1fd..fd907ac252 100644
--- a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
+++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
@@ -1,11 +1,12 @@
/* Styles for user login and signup forms */
.mw-form-related-link-container {
+ margin-bottom: 0.5em;
text-align: center;
}
.mw-ui-vform .mw-secure {
/* @embed */
- background: url(images/icon-lock.png) no-repeat scroll left center transparent;
+ background: url( images/icon-lock.png ) no-repeat left center;
margin: 0 0 0 1px;
padding: 0 0 0 11px;
}
@@ -57,7 +58,7 @@ section.mw-form-header {
/* Other display formats end up too wide */
display: table-cell;
width: 270px;
- background-color: #FFF;
+ background-color: #fff;
}
/* Make the fancycaptcha-image-container full-width within its parent. */
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css b/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css
index df3db574fd..42d56936d2 100644
--- a/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css
+++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css
@@ -1,9 +1,8 @@
/* The login form invites users to create an account */
#mw-createaccount-cta {
width: 20em;
- height: 10em;
/* @embed */
- background: url(images/glyph-people-large.png) no-repeat 50%;
+ background: url( images/glyph-people-large.png ) no-repeat 50%;
margin: 0 auto;
- padding-top: 4em;
+ padding-top: 7.8em;
}
diff --git a/resources/src/mediawiki.ui/components/buttons.less b/resources/src/mediawiki.ui/components/buttons.less
index 40a67c52e4..5931efbec3 100644
--- a/resources/src/mediawiki.ui/components/buttons.less
+++ b/resources/src/mediawiki.ui/components/buttons.less
@@ -138,7 +138,7 @@
}
}
- // Constructive buttons
+ // Constructive buttons (deprecated, consolidated with `progressive` â see T110555)
//
// Use constructive buttons for actions which result in a final action in the process that results
// in a change of state.
@@ -154,10 +154,10 @@
//
// Styleguide 2.1.2.
&.mw-ui-constructive {
- .button-colors( @colorConstructive, @colorConstructiveHighlight, @colorConstructiveActive );
+ .button-colors( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
&.mw-ui-quiet {
- .button-colors-quiet( @colorConstructive, @colorConstructiveHighlight, @colorConstructiveActive );
+ .button-colors-quiet( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
}
}
diff --git a/resources/src/mediawiki/api/parse.js b/resources/src/mediawiki/api/parse.js
index 49219d782c..02528dcfff 100644
--- a/resources/src/mediawiki/api/parse.js
+++ b/resources/src/mediawiki/api/parse.js
@@ -7,18 +7,30 @@
/**
* Convenience method for 'action=parse'.
*
- * @param {string} wikitext
+ * @param {string|mw.Title} content Content to parse, either as a wikitext string or
+ * a mw.Title.
+ * @param {Object} additionalParams Parameters object to set custom settings, e.g.
+ * redirects, sectionpreview. prop should not be overridden.
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {string} return.done.data Parsed HTML of `wikitext`.
*/
- parse: function ( wikitext ) {
- var apiPromise = this.get( {
+ parse: function ( content, additionalParams ) {
+ var apiPromise, config = $.extend( {
formatversion: 2,
action: 'parse',
- contentmodel: 'wikitext',
- text: wikitext
- } );
+ contentmodel: 'wikitext'
+ }, additionalParams );
+
+ if ( typeof content === 'string' ) {
+ // Wikitext
+ config.text = content;
+ } else {
+ // mw.Title
+ config.page = content.getPrefixedDb();
+ }
+
+ apiPromise = this.get( config );
return apiPromise
.then( function ( data ) {
diff --git a/resources/src/mediawiki/mediawiki.inspect.js b/resources/src/mediawiki/mediawiki.inspect.js
index 671f38fa17..fdb7adfdef 100644
--- a/resources/src/mediawiki/mediawiki.inspect.js
+++ b/resources/src/mediawiki/mediawiki.inspect.js
@@ -202,6 +202,7 @@
// Convert size to human-readable string.
$.each( modules, function ( i, module ) {
+ module.sizeInBytes = module.size;
module.size = humanSize( module.size );
} );
diff --git a/resources/src/mediawiki/mediawiki.js b/resources/src/mediawiki/mediawiki.js
index f282db607c..4aad2bac90 100644
--- a/resources/src/mediawiki/mediawiki.js
+++ b/resources/src/mediawiki/mediawiki.js
@@ -1193,7 +1193,7 @@
var r = $.Deferred();
pendingRequests.push( function () {
- if ( moduleName && !hasOwn.call( registry, moduleName ) ) {
+ if ( moduleName && hasOwn.call( registry, moduleName ) ) {
window.require = mw.loader.require;
window.module = registry[ moduleName ].module;
}
diff --git a/resources/src/mediawiki/mediawiki.viewport.js b/resources/src/mediawiki/mediawiki.viewport.js
index aa9dd0581f..6396331f90 100644
--- a/resources/src/mediawiki/mediawiki.viewport.js
+++ b/resources/src/mediawiki/mediawiki.viewport.js
@@ -50,14 +50,25 @@
* @return {boolean}
*/
isElementInViewport: function ( el, rectangle ) {
- var elRect = el.getBoundingClientRect(),
+ var $el = $( el ),
+ offset = $el.offset(),
+ rect = {
+ height: $el.height(),
+ width: $el.width(),
+ top: offset.top,
+ left: offset.left
+ },
viewport = rectangle || this.makeViewportFromWindow();
return (
- ( viewport.bottom >= elRect.top ) &&
- ( viewport.right >= elRect.left ) &&
- ( viewport.top <= elRect.top + elRect.height ) &&
- ( viewport.left <= elRect.left + elRect.width )
+ // Top border must be above viewport's bottom
+ ( viewport.bottom >= rect.top ) &&
+ // Left border must be before viewport's right border
+ ( viewport.right >= rect.left ) &&
+ // Bottom border must be below viewport's top
+ ( viewport.top <= rect.top + rect.height ) &&
+ // Right border must be after viewport's left border
+ ( viewport.left <= rect.left + rect.width )
);
},
diff --git a/tests/phpunit/MediaWikiLangTestCase.php b/tests/phpunit/MediaWikiLangTestCase.php
index 214bcc11ba..fd308b2d95 100644
--- a/tests/phpunit/MediaWikiLangTestCase.php
+++ b/tests/phpunit/MediaWikiLangTestCase.php
@@ -6,7 +6,6 @@
abstract class MediaWikiLangTestCase extends MediaWikiTestCase {
protected function setUp() {
global $wgLanguageCode, $wgContLang;
- parent::setUp();
if ( $wgLanguageCode != $wgContLang->getCode() ) {
throw new MWException( "Error in MediaWikiLangTestCase::setUp(): " .
@@ -14,18 +13,11 @@ abstract class MediaWikiLangTestCase extends MediaWikiTestCase {
"\$wgContLang->getCode() (" . $wgContLang->getCode() . ")" );
}
- // HACK: Call getLanguage() so the real $wgContLang is cached as the user language
- // rather than our fake one. This is to avoid breaking other, unrelated tests.
- RequestContext::getMain()->getLanguage();
-
- $langCode = 'en'; # For mainpage to be 'Main Page'
- $langObj = Language::factory( $langCode );
+ parent::setUp();
- $this->setMwGlobals( [
- 'wgLanguageCode' => $langCode,
- 'wgLang' => $langObj,
- 'wgContLang' => $langObj,
- ] );
+ $this->setUserLang( 'en' );
+ // For mainpage to be 'Main Page'
+ $this->setContentLang( 'en' );
MessageCache::singleton()->disable();
}
diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php
index d5192ace38..b9cf51d17a 100644
--- a/tests/phpunit/MediaWikiTestCase.php
+++ b/tests/phpunit/MediaWikiTestCase.php
@@ -134,12 +134,20 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
if ( !self::$dbSetup ) {
// switch to a temporary clone of the database
self::setupTestDB( $this->db, $this->dbPrefix() );
+ $this->addCoreDBData();
if ( ( $this->db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
$this->resetDB();
}
}
- $this->addCoreDBData();
+
+ // TODO: the DB setup should be done in setUpBeforeClass(), so the test DB
+ // is available in subclasse's setUpBeforeClass() and setUp() methods.
+ // This would also remove the need for the HACK that is oncePerClass().
+ if ( $this->oncePerClass() ) {
+ $this->addDBDataOnce();
+ }
+
$this->addDBData();
$needsResetDB = true;
}
@@ -151,6 +159,22 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
}
}
+ /**
+ * @return boolean
+ */
+ private function oncePerClass() {
+ // Remember current test class in the database connection,
+ // so we know when we need to run addData.
+
+ $class = static::class;
+
+ $first = !isset( $this->db->_hasDataForTestClass )
+ || $this->db->_hasDataForTestClass !== $class;
+
+ $this->db->_hasDataForTestClass = $class;
+ return $first;
+ }
+
/**
* @since 1.21
*
@@ -415,6 +439,33 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
$this->setMwGlobals( $name, $merged );
}
+ /**
+ * @since 1.27
+ * @param string|Language $lang
+ */
+ public function setUserLang( $lang ) {
+ RequestContext::getMain()->setLanguage( $lang );
+ $this->setMwGlobals( 'wgLang', RequestContext::getMain()->getLanguage() );
+ }
+
+ /**
+ * @since 1.27
+ * @param string|Language $lang
+ */
+ public function setContentLang( $lang ) {
+ if ( $lang instanceof Language ) {
+ $langCode = $lang->getCode();
+ $langObj = $lang;
+ } else {
+ $langCode = $lang;
+ $langObj = Language::factory( $langCode );
+ }
+ $this->setMwGlobals( [
+ 'wgLanguageCode' => $langCode,
+ 'wgContLang' => $langObj,
+ ] );
+ }
+
/**
* Sets the logger for a specified channel, for the duration of the test.
* @since 1.27
@@ -527,8 +578,29 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
}
/**
- * Stub. If a test needs to add additional data to the database, it should
- * implement this method and do so
+ * Stub. If a test suite needs to add additional data to the database, it should
+ * implement this method and do so. This method is called once per test suite
+ * (i.e. once per class).
+ *
+ * Note data added by this method may be removed by resetDB() depending on
+ * the contents of $tablesUsed.
+ *
+ * To add additional data between test function runs, override prepareDB().
+ *
+ * @see addDBData()
+ * @see resetDB()
+ *
+ * @since 1.27
+ */
+ public function addDBDataOnce() {
+ }
+
+ /**
+ * Stub. Subclasses may override this to prepare the database.
+ * Called before every test run (test function or data set).
+ *
+ * @see addDBDataOnce()
+ * @see resetDB()
*
* @since 1.18
*/
@@ -675,23 +747,16 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
*/
private function resetDB() {
if ( $this->db ) {
- if ( $this->db->getType() == 'oracle' ) {
- if ( self::$useTemporaryTables ) {
- wfGetLB()->closeAll();
- $this->db = wfGetDB( DB_MASTER );
- } else {
- foreach ( $this->tablesUsed as $tbl ) {
- if ( $tbl == 'interwiki' ) {
- continue;
- }
- $this->db->query( 'TRUNCATE TABLE ' . $this->db->tableName( $tbl ), __METHOD__ );
- }
+ $truncate = in_array( $this->db->getType(), [ 'oracle', 'mysql' ] );
+ foreach ( $this->tablesUsed as $tbl ) {
+ // TODO: reset interwiki and user tables to their original content.
+ if ( $tbl == 'interwiki' || $tbl == 'user' ) {
+ continue;
}
- } else {
- foreach ( $this->tablesUsed as $tbl ) {
- if ( $tbl == 'interwiki' || $tbl == 'user' ) {
- continue;
- }
+
+ if ( $truncate ) {
+ $this->db->query( 'TRUNCATE TABLE ' . $this->db->tableName( $tbl ), __METHOD__ );
+ } else {
$this->db->delete( $tbl, '*', __METHOD__ );
}
}
@@ -1283,4 +1348,5 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
public static function wfResetOutputBuffersBarrier( $buffer ) {
return $buffer;
}
+
}
diff --git a/tests/phpunit/includes/BlockTest.php b/tests/phpunit/includes/BlockTest.php
index 28192e9810..35ebf42c26 100644
--- a/tests/phpunit/includes/BlockTest.php
+++ b/tests/phpunit/includes/BlockTest.php
@@ -13,16 +13,7 @@ class BlockTest extends MediaWikiLangTestCase {
/* variable used to save up the blockID we insert in this test suite */
private $blockId;
- protected function setUp() {
- parent::setUp();
- $this->setMwGlobals( [
- 'wgLanguageCode' => 'en',
- 'wgContLang' => Language::factory( 'en' )
- ] );
- }
-
function addDBData() {
-
$user = User::newFromName( 'UTBlockee' );
if ( $user->getID() == 0 ) {
$user->addToDatabase();
diff --git a/tests/phpunit/includes/ExportTest.php b/tests/phpunit/includes/ExportTest.php
index d451e2100d..a2bb97a2bc 100644
--- a/tests/phpunit/includes/ExportTest.php
+++ b/tests/phpunit/includes/ExportTest.php
@@ -12,8 +12,6 @@ class ExportTest extends MediaWikiLangTestCase {
protected function setUp() {
parent::setUp();
$this->setMwGlobals( [
- 'wgContLang' => Language::factory( 'en' ),
- 'wgLanguageCode' => 'en',
'wgCapitalLinks' => true,
] );
}
diff --git a/tests/phpunit/includes/ExtraParserTest.php b/tests/phpunit/includes/ExtraParserTest.php
index 78e71ea467..5dd4f7a07c 100644
--- a/tests/phpunit/includes/ExtraParserTest.php
+++ b/tests/phpunit/includes/ExtraParserTest.php
@@ -18,12 +18,12 @@ class ExtraParserTest extends MediaWikiTestCase {
$contLang = Language::factory( 'en' );
$this->setMwGlobals( [
'wgShowDBErrorBacktrace' => true,
- 'wgLanguageCode' => 'en',
- 'wgContLang' => $contLang,
- 'wgLang' => Language::factory( 'en' ),
'wgCleanSignatures' => true,
] );
+ $this->setUserLang( 'en' );
+ $this->setContentLang( $contLang );
+ // FIXME: This test should pass without setting global content language
$this->options = ParserOptions::newFromUserAndLang( new User, $contLang );
$this->options->setTemplateCallback( [ __CLASS__, 'statelessFetchTemplate' ] );
$this->parser = new Parser;
diff --git a/tests/phpunit/includes/HtmlTest.php b/tests/phpunit/includes/HtmlTest.php
index a18e3c8c76..a90295a4c1 100644
--- a/tests/phpunit/includes/HtmlTest.php
+++ b/tests/phpunit/includes/HtmlTest.php
@@ -6,8 +6,11 @@ class HtmlTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
- $langCode = 'en';
- $langObj = Language::factory( $langCode );
+ $this->setMwGlobals( [
+ 'wgWellFormedXml' => false,
+ ] );
+
+ $langObj = Language::factory( 'en' );
// Hardcode namespaces during test runs,
// so that html output based on existing namespaces
@@ -32,13 +35,8 @@ class HtmlTest extends MediaWikiTestCase {
100 => 'Custom',
101 => 'Custom_talk',
] );
-
- $this->setMwGlobals( [
- 'wgLanguageCode' => $langCode,
- 'wgContLang' => $langObj,
- 'wgLang' => $langObj,
- 'wgWellFormedXml' => false,
- ] );
+ $this->setUserLang( $langObj );
+ $this->setContentLang( $langObj );
}
/**
diff --git a/tests/phpunit/includes/MWTimestampTest.php b/tests/phpunit/includes/MWTimestampTest.php
index 908376ba88..bca39824b7 100644
--- a/tests/phpunit/includes/MWTimestampTest.php
+++ b/tests/phpunit/includes/MWTimestampTest.php
@@ -10,8 +10,6 @@ class MWTimestampTest extends MediaWikiLangTestCase {
// Avoid 'GetHumanTimestamp' hook and others
$this->setMwGlobals( 'wgHooks', [] );
-
- RequestContext::getMain()->setLanguage( Language::factory( 'en' ) );
}
/**
diff --git a/tests/phpunit/includes/MergeHistoryTest.php b/tests/phpunit/includes/MergeHistoryTest.php
index 951cf8d64e..5ea0cdf2d6 100644
--- a/tests/phpunit/includes/MergeHistoryTest.php
+++ b/tests/phpunit/includes/MergeHistoryTest.php
@@ -8,7 +8,7 @@ class MergeHistoryTest extends MediaWikiTestCase {
/**
* Make some pages to work with
*/
- public function addDBData() {
+ public function addDBDataOnce() {
// Pages that won't actually be merged
$this->insertPage( 'Test' );
$this->insertPage( 'Test2' );
diff --git a/tests/phpunit/includes/MessageTest.php b/tests/phpunit/includes/MessageTest.php
index bdd80e4c94..cf34b18713 100644
--- a/tests/phpunit/includes/MessageTest.php
+++ b/tests/phpunit/includes/MessageTest.php
@@ -6,9 +6,9 @@ class MessageTest extends MediaWikiLangTestCase {
parent::setUp();
$this->setMwGlobals( [
- 'wgLang' => Language::factory( 'en' ),
'wgForceUIMsgAsContentMsg' => [],
] );
+ $this->setUserLang( 'en' );
}
/**
@@ -517,7 +517,7 @@ class MessageTest extends MediaWikiLangTestCase {
* @covers Message::inContentLanguage
*/
public function testInContentLanguage() {
- $this->setMwGlobals( 'wgLang', Language::factory( 'fr' ) );
+ $this->setUserLang( 'fr' );
// NOTE: make sure internal caching of the message text is reset appropriately
$msg = wfMessage( 'mainpage' );
@@ -531,9 +531,9 @@ class MessageTest extends MediaWikiLangTestCase {
*/
public function testInContentLanguageOverride() {
$this->setMwGlobals( [
- 'wgLang' => Language::factory( 'fr' ),
'wgForceUIMsgAsContentMsg' => [ 'mainpage' ],
] );
+ $this->setUserLang( 'fr' );
// NOTE: make sure internal caching of the message text is reset appropriately.
// NOTE: wgForceUIMsgAsContentMsg forces the messages *current* language to be used.
diff --git a/tests/phpunit/includes/PrefixSearchTest.php b/tests/phpunit/includes/PrefixSearchTest.php
index 6f4c300a4c..6d5154f418 100644
--- a/tests/phpunit/includes/PrefixSearchTest.php
+++ b/tests/phpunit/includes/PrefixSearchTest.php
@@ -5,7 +5,7 @@
*/
class PrefixSearchTest extends MediaWikiLangTestCase {
- public function addDBData() {
+ public function addDBDataOnce() {
if ( !$this->isWikitextNS( NS_MAIN ) ) {
// tests are skipped if NS_MAIN is not wikitext
return;
diff --git a/tests/phpunit/includes/RevisionStorageTest.php b/tests/phpunit/includes/RevisionStorageTest.php
index 16d8c97435..440495b216 100644
--- a/tests/phpunit/includes/RevisionStorageTest.php
+++ b/tests/phpunit/includes/RevisionStorageTest.php
@@ -57,6 +57,8 @@ class RevisionStorageTest extends MediaWikiTestCase {
CONTENT_MODEL_WIKITEXT
);
}
+
+ $this->tablesUsed[] = 'archive';
}
protected function tearDown() {
diff --git a/tests/phpunit/includes/StatusTest.php b/tests/phpunit/includes/StatusTest.php
index 6f4395b952..782fab0c6b 100644
--- a/tests/phpunit/includes/StatusTest.php
+++ b/tests/phpunit/includes/StatusTest.php
@@ -321,24 +321,25 @@ class StatusTest extends MediaWikiLangTestCase {
/**
* @dataProvider provideGetWikiTextAndHtml
* @covers Status::getWikiText
- * @todo test long and short context messages generated through this method
- * this can not really be done now due to use of wfMessage()->plain()
- * It is possible to mock such methods but only if namespaces are used
*/
- public function testGetWikiText( Status $status, $wikitext, $html ) {
+ public function testGetWikiText(
+ Status $status, $wikitext, $wrappedWikitext, $html, $wrappedHtml
+ ) {
$this->assertEquals( $wikitext, $status->getWikiText() );
+
+ $this->assertEquals( $wrappedWikitext, $status->getWikiText( 'wrap-short', 'wrap-long', 'qqx' ) );
}
/**
* @dataProvider provideGetWikiTextAndHtml
* @covers Status::getHtml
- * @todo test long and short context messages generated through this method
- * this can not really be done now due to use of $this->getWikiText using
- * wfMessage()->plain(). It is possible to mock such methods but only if
- * namespaces are used.
*/
- public function testGetHtml( Status $status, $wikitext, $html ) {
+ public function testGetHtml(
+ Status $status, $wikitext, $wrappedWikitext, $html, $wrappedHtml
+ ) {
$this->assertEquals( $html, $status->getHTML() );
+
+ $this->assertEquals( $wrappedHtml, $status->getHTML( 'wrap-short', 'wrap-long', 'qqx' ) );
}
/**
@@ -352,7 +353,11 @@ class StatusTest extends MediaWikiLangTestCase {
$testCases['GoodStatus'] = [
new Status(),
"Internal error: Status::getWikiText called for a good result, this is incorrect\n",
+ "(wrap-short: (internalerror_info: Status::getWikiText called for a good result, " .
+ "this is incorrect\n))",
"Internal error: Status::getWikiText called for a good result, this is incorrect\n
",
+ "(wrap-short: (internalerror_info: Status::getWikiText called for a good result, " .
+ "this is incorrect\n))\n
",
];
$status = new Status();
@@ -360,7 +365,11 @@ class StatusTest extends MediaWikiLangTestCase {
$testCases['GoodButNoError'] = [
$status,
"Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n",
+ "(wrap-short: (internalerror_info: Status::getWikiText: Invalid result object: " .
+ "no error text but not OK\n))",
"Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n
",
+ "(wrap-short: (internalerror_info: Status::getWikiText: Invalid result object: " .
+ "no error text but not OK\n))\n
",
];
$status = new Status();
@@ -368,7 +377,9 @@ class StatusTest extends MediaWikiLangTestCase {
$testCases['1StringWarning'] = [
$status,
"",
+ "(wrap-short: (fooBar!))",
"<fooBar!>\n
",
+ "(wrap-short: (fooBar!))\n
",
];
$status = new Status();
@@ -377,7 +388,9 @@ class StatusTest extends MediaWikiLangTestCase {
$testCases['2StringWarnings'] = [
$status,
"* \n* \n",
+ "(wrap-long: * (fooBar!)\n* (fooBar2!)\n)",
"\n",
+ "(wrap-long: * (fooBar!)\n
\n\n)\n
",
];
$status = new Status();
@@ -385,7 +398,9 @@ class StatusTest extends MediaWikiLangTestCase {
$testCases['1MessageWarning'] = [
$status,
"",
+ "(wrap-short: (fooBar!: foo, bar))",
"<fooBar!>\n
",
+ "(wrap-short: (fooBar!: foo, bar))\n
",
];
$status = new Status();
@@ -394,12 +409,26 @@ class StatusTest extends MediaWikiLangTestCase {
$testCases['2MessageWarnings'] = [
$status,
"* \n* \n",
+ "(wrap-long: * (fooBar!: foo, bar)\n* (fooBar2!)\n)",
"\n",
+ "(wrap-long: * (fooBar!: foo, bar)\n
\n\n)\n
",
];
return $testCases;
}
+ private static function sanitizedMessageParams( Message $message ) {
+ return array_map( function ( $p ) {
+ return $p instanceof Message
+ ? [
+ 'key' => $p->getKey(),
+ 'params' => self::sanitizedMessageParams( $p ),
+ 'lang' => $p->getLanguage()->getCode(),
+ ]
+ : $p;
+ }, $message->getParams() );
+ }
+
/**
* @dataProvider provideGetMessage
* @covers Status::getMessage
@@ -407,9 +436,10 @@ class StatusTest extends MediaWikiLangTestCase {
public function testGetMessage(
Status $status, $expectedParams = [], $expectedKey, $expectedWrapper
) {
- $message = $status->getMessage();
+ $message = $status->getMessage( null, null, 'qqx' );
$this->assertInstanceOf( 'Message', $message );
- $this->assertEquals( $expectedParams, $message->getParams(), 'Message::getParams' );
+ $this->assertEquals( $expectedParams, self::sanitizedMessageParams( $message ),
+ 'Message::getParams' );
$this->assertEquals( $expectedKey, $message->getKey(), 'Message::getKey' );
$message = $status->getMessage( 'wrapper-short', 'wrapper-long' );
@@ -462,20 +492,18 @@ class StatusTest extends MediaWikiLangTestCase {
'wrapper-short'
];
- // FIXME: Assertion tries to compare a StubUserLang with a Language object, because
- // "data providers are executed before both the call to the setUpBeforeClass static method
- // and the first call to the setUp method. Because of that you can't access any variables
- // you create there from within a data provider."
- // http://phpunit.de/manual/3.7/en/writing-tests-for-phpunit.html
-// $status = new Status();
-// $status->warning( 'fooBar!' );
-// $status->warning( 'fooBar2!' );
-// $testCases[ '2StringWarnings' ] = array(
-// $status,
-// array( new Message( 'fooBar!' ), new Message( 'fooBar2!' ) ),
-// "* \$1\n* \$2",
-// 'wrapper-long'
-// );
+ $status = new Status();
+ $status->warning( 'fooBar!' );
+ $status->warning( 'fooBar2!' );
+ $testCases[ '2StringWarnings' ] = [
+ $status,
+ [
+ [ 'key' => 'fooBar!', 'params' => [], 'lang' => 'qqx' ],
+ [ 'key' => 'fooBar2!', 'params' => [], 'lang' => 'qqx' ]
+ ],
+ "* \$1\n* \$2",
+ 'wrapper-long'
+ ];
$status = new Status();
$status->warning( new Message( 'fooBar!', [ 'foo', 'bar' ] ) );
@@ -491,7 +519,10 @@ class StatusTest extends MediaWikiLangTestCase {
$status->warning( new Message( 'fooBar2!' ) );
$testCases['2MessageWarnings'] = [
$status,
- [ new Message( 'fooBar!', [ 'foo', 'bar' ] ), new Message( 'fooBar2!' ) ],
+ [
+ [ 'key' => 'fooBar!', 'params' => [ 'foo', 'bar' ], 'lang' => 'qqx' ],
+ [ 'key' => 'fooBar2!', 'params' => [], 'lang' => 'qqx' ]
+ ],
"* \$1\n* \$2",
'wrapper-long'
];
diff --git a/tests/phpunit/includes/TitlePermissionTest.php b/tests/phpunit/includes/TitlePermissionTest.php
index a4d0059631..584a368b36 100644
--- a/tests/phpunit/includes/TitlePermissionTest.php
+++ b/tests/phpunit/includes/TitlePermissionTest.php
@@ -26,14 +26,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
protected function setUp() {
parent::setUp();
- $langObj = Language::factory( 'en' );
$localZone = 'UTC';
$localOffset = date( 'Z' ) / 60;
$this->setMwGlobals( [
- 'wgContLang' => $langObj,
- 'wgLanguageCode' => 'en',
- 'wgLang' => $langObj,
'wgLocaltimezone' => $localZone,
'wgLocalTZoffset' => $localOffset,
'wgNamespaceProtection' => [
diff --git a/tests/phpunit/includes/TitleTest.php b/tests/phpunit/includes/TitleTest.php
index f2ad1c6172..b3465e1a85 100644
--- a/tests/phpunit/includes/TitleTest.php
+++ b/tests/phpunit/includes/TitleTest.php
@@ -9,14 +9,12 @@ class TitleTest extends MediaWikiTestCase {
parent::setUp();
$this->setMwGlobals( [
- 'wgLanguageCode' => 'en',
- 'wgContLang' => Language::factory( 'en' ),
- // User language
- 'wgLang' => Language::factory( 'en' ),
'wgAllowUserJs' => false,
'wgDefaultLanguageVariant' => false,
'wgMetaNamespace' => 'Project',
] );
+ $this->setUserLang( 'en' );
+ $this->setContentLang( 'en' );
}
/**
@@ -421,12 +419,11 @@ class TitleTest extends MediaWikiTestCase {
) {
// Setup environnement for this test
$this->setMwGlobals( [
- 'wgLanguageCode' => $contLang,
- 'wgContLang' => Language::factory( $contLang ),
- 'wgLang' => Language::factory( $lang ),
'wgDefaultLanguageVariant' => $variant,
'wgAllowUserJs' => true,
] );
+ $this->setUserLang( $lang );
+ $this->setContentLang( $contLang );
$title = Title::newFromText( $titleText );
$this->assertInstanceOf( 'Title', $title,
diff --git a/tests/phpunit/includes/WatchedItemIntegrationTest.php b/tests/phpunit/includes/WatchedItemIntegrationTest.php
new file mode 100644
index 0000000000..20fcedb9a1
--- /dev/null
+++ b/tests/phpunit/includes/WatchedItemIntegrationTest.php
@@ -0,0 +1,123 @@
+getUser();
+ }
+
+ public function testWatchAndUnWatchItem() {
+ $user = $this->getUser();
+ $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+ // Cleanup after previous tests
+ WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+
+ $this->assertFalse(
+ WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+ 'Page should not initially be watched'
+ );
+ WatchedItem::fromUserTitle( $user, $title )->addWatch();
+ $this->assertTrue(
+ WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+ 'Page should be watched'
+ );
+ WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+ $this->assertFalse(
+ WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+ 'Page should be unwatched'
+ );
+ }
+
+ public function testUpdateAndResetNotificationTimestamp() {
+ $user = $this->getUser();
+ $otherUser = ( new TestUser( 'WatchedItemIntegrationTestUser_otherUser' ) )->getUser();
+ $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+ WatchedItem::fromUserTitle( $user, $title )->addWatch();
+ $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+
+ EmailNotification::updateWatchlistTimestamp( $otherUser, $title, '20150202010101' );
+ $this->assertEquals(
+ '20150202010101',
+ WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
+ );
+
+ WatchedItem::fromUserTitle( $user, $title )->resetNotificationTimestamp();
+ $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+ }
+
+ public function testDuplicateAllAssociatedEntries() {
+ $user = $this->getUser();
+ $titleOld = Title::newFromText( 'WatchedItemIntegrationTestPageOld' );
+ $titleNew = Title::newFromText( 'WatchedItemIntegrationTestPageNew' );
+ WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->addWatch();
+ WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->addWatch();
+ // Cleanup after previous tests
+ WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->removeWatch();
+ WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->removeWatch();
+
+ WatchedItem::duplicateEntries( $titleOld, $titleNew );
+
+ $this->assertTrue(
+ WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->isWatched()
+ );
+ $this->assertTrue(
+ WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->isWatched()
+ );
+ $this->assertTrue(
+ WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->isWatched()
+ );
+ $this->assertTrue(
+ WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->isWatched()
+ );
+ }
+
+ public function testIsWatched_falseOnNotAllowed() {
+ $user = $this->getUser();
+ $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+ WatchedItem::fromUserTitle( $user, $title )->addWatch();
+
+ $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+ $user->mRights = [];
+ $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+ }
+
+ public function testGetNotificationTimestamp_falseOnNotAllowed() {
+ $user = $this->getUser();
+ $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+ WatchedItem::fromUserTitle( $user, $title )->addWatch();
+ WatchedItem::fromUserTitle( $user, $title )->resetNotificationTimestamp();
+
+ $this->assertEquals(
+ null,
+ WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
+ );
+ $user->mRights = [];
+ $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+ }
+
+ public function testRemoveWatch_falseOnNotAllowed() {
+ $user = $this->getUser();
+ $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+ WatchedItem::fromUserTitle( $user, $title )->addWatch();
+
+ $previousRights = $user->mRights;
+ $user->mRights = [];
+ $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
+ $user->mRights = $previousRights;
+ $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
+ }
+
+}
diff --git a/tests/phpunit/includes/WatchedItemStoreIntegrationTest.php b/tests/phpunit/includes/WatchedItemStoreIntegrationTest.php
new file mode 100644
index 0000000000..9341fb89b6
--- /dev/null
+++ b/tests/phpunit/includes/WatchedItemStoreIntegrationTest.php
@@ -0,0 +1,82 @@
+getUser();
+ }
+
+ public function testWatchAndUnWatchItem() {
+ $user = $this->getUser();
+ $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
+ $store = WatchedItemStore::getDefaultInstance();
+ // Cleanup after previous tests
+ $store->removeWatch( $user, $title );
+
+ $this->assertFalse(
+ $store->isWatched( $user, $title ),
+ 'Page should not initially be watched'
+ );
+ $store->addWatch( $user, $title );
+ $this->assertTrue(
+ $store->isWatched( $user, $title ),
+ 'Page should be watched'
+ );
+ $store->removeWatch( $user, $title );
+ $this->assertFalse(
+ $store->isWatched( $user, $title ),
+ 'Page should be unwatched'
+ );
+ }
+
+ public function testUpdateAndResetNotificationTimestamp() {
+ $user = $this->getUser();
+ $otherUser = ( new TestUser( 'WatchedItemStoreIntegrationTestUser_otherUser' ) )->getUser();
+ $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
+ $store = WatchedItemStore::getDefaultInstance();
+ $store->addWatch( $user, $title );
+ $this->assertNull( $store->loadWatchedItem( $user, $title )->getNotificationTimestamp() );
+
+ $store->updateNotificationTimestamp( $otherUser, $title, '20150202010101' );
+ $this->assertEquals(
+ '20150202010101',
+ $store->loadWatchedItem( $user, $title )->getNotificationTimestamp()
+ );
+
+ $this->assertTrue( $store->resetNotificationTimestamp( $user, $title ) );
+ $this->assertNull( $store->loadWatchedItem( $user, $title )->getNotificationTimestamp() );
+ }
+
+ public function testDuplicateAllAssociatedEntries() {
+ $user = $this->getUser();
+ $titleOld = Title::newFromText( 'WatchedItemStoreIntegrationTestPageOld' );
+ $titleNew = Title::newFromText( 'WatchedItemStoreIntegrationTestPageNew' );
+ $store = WatchedItemStore::getDefaultInstance();
+ $store->addWatch( $user, $titleOld->getSubjectPage() );
+ $store->addWatch( $user, $titleOld->getTalkPage() );
+ // Cleanup after previous tests
+ $store->removeWatch( $user, $titleNew->getSubjectPage() );
+ $store->removeWatch( $user, $titleNew->getTalkPage() );
+
+ $store->duplicateAllAssociatedEntries( $titleOld, $titleNew );
+
+ $this->assertTrue( $store->isWatched( $user, $titleOld->getSubjectPage() ) );
+ $this->assertTrue( $store->isWatched( $user, $titleOld->getTalkPage() ) );
+ $this->assertTrue( $store->isWatched( $user, $titleNew->getSubjectPage() ) );
+ $this->assertTrue( $store->isWatched( $user, $titleNew->getTalkPage() ) );
+ }
+
+}
diff --git a/tests/phpunit/includes/WatchedItemStoreTest.php b/tests/phpunit/includes/WatchedItemStoreTest.php
deleted file mode 100644
index fc132b06e1..0000000000
--- a/tests/phpunit/includes/WatchedItemStoreTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-getMock( 'IDatabase' );
- }
-
- /**
- * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
- */
- private function getMockLoadBalancer( $mockDb ) {
- $mock = $this->getMockBuilder( 'LoadBalancer' )
- ->disableOriginalConstructor()
- ->getMock();
- $mock->expects( $this->any() )
- ->method( 'getConnection' )
- ->will( $this->returnValue( $mockDb ) );
- return $mock;
- }
-
- private function getFakeRow( $userId, $timestamp ) {
- $fakeRow = new stdClass();
- $fakeRow->wl_user = $userId;
- $fakeRow->wl_notificationtimestamp = $timestamp;
- return $fakeRow;
- }
-
- public function testDuplicateEntry_nothingToDuplicate() {
- $mockDb = $this->getMockDb();
- $mockDb->expects( $this->exactly( 1 ) )
- ->method( 'select' )
- ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
-
- $store = new WatchedItemStore( $this->getMockLoadBalancer( $mockDb ) );
-
- $store->duplicateEntry(
- Title::newFromText( 'Old_Title' ),
- Title::newFromText( 'New_Title' )
- );
- }
-
- public function testDuplicateEntry_somethingToDuplicate() {
- $fakeRows = [
- $this->getFakeRow( 1, '20151212010101' ),
- $this->getFakeRow( 2, null ),
- ];
-
- $mockDb = $this->getMockDb();
- $mockDb->expects( $this->at( 0 ) )
- ->method( 'select' )
- ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
- $mockDb->expects( $this->at( 1 ) )
- ->method( 'replace' )
- ->with(
- 'watchlist',
- [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
- [
- [
- 'wl_user' => 1,
- 'wl_namespace' => 0,
- 'wl_title' => 'New_Title',
- 'wl_notificationtimestamp' => '20151212010101',
- ],
- [
- 'wl_user' => 2,
- 'wl_namespace' => 0,
- 'wl_title' => 'New_Title',
- 'wl_notificationtimestamp' => null,
- ],
- ],
- $this->isType( 'string' )
- );
-
- $store = new WatchedItemStore( $this->getMockLoadBalancer( $mockDb ) );
-
- $store->duplicateEntry(
- Title::newFromText( 'Old_Title' ),
- Title::newFromText( 'New_Title' )
- );
- }
-
-}
diff --git a/tests/phpunit/includes/WatchedItemStoreUnitTest.php b/tests/phpunit/includes/WatchedItemStoreUnitTest.php
new file mode 100644
index 0000000000..709b4b419f
--- /dev/null
+++ b/tests/phpunit/includes/WatchedItemStoreUnitTest.php
@@ -0,0 +1,1236 @@
+getMock( IDatabase::class );
+ }
+
+ /**
+ * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
+ */
+ private function getMockLoadBalancer( $mockDb ) {
+ $mock = $this->getMockBuilder( LoadBalancer::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mock->expects( $this->any() )
+ ->method( 'getConnection' )
+ ->will( $this->returnValue( $mockDb ) );
+ $mock->expects( $this->any() )
+ ->method( 'getReadOnlyReason' )
+ ->will( $this->returnValue( false ) );
+ return $mock;
+ }
+
+ /**
+ * @return PHPUnit_Framework_MockObject_MockObject|BagOStuff
+ */
+ private function getMockCache() {
+ $mock = $this->getMockBuilder( BagOStuff::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mock->expects( $this->any() )
+ ->method( 'makeKey' )
+ ->will( $this->returnCallback( function() {
+ return implode( ':', func_get_args() );
+ } ) );
+ return $mock;
+ }
+
+ /**
+ * @param int $id
+ * @return PHPUnit_Framework_MockObject_MockObject|User
+ */
+ private function getMockNonAnonUserWithId( $id ) {
+ $mock = $this->getMock( User::class );
+ $mock->expects( $this->any() )
+ ->method( 'isAnon' )
+ ->will( $this->returnValue( false ) );
+ $mock->expects( $this->any() )
+ ->method( 'getId' )
+ ->will( $this->returnValue( $id ) );
+ return $mock;
+ }
+
+ /**
+ * @return User
+ */
+ private function getAnonUser() {
+ return User::newFromName( 'Anon_User' );
+ }
+
+ private function getFakeRow( array $rowValues ) {
+ $fakeRow = new stdClass();
+ foreach ( $rowValues as $valueName => $value ) {
+ $fakeRow->$valueName = $value;
+ }
+ return $fakeRow;
+ }
+
+ public function testGetDefaultInstance() {
+ $instanceOne = WatchedItemStore::getDefaultInstance();
+ $instanceTwo = WatchedItemStore::getDefaultInstance();
+ $this->assertSame( $instanceOne, $instanceTwo );
+ }
+
+ public function testDuplicateEntry_nothingToDuplicate() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'select' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user',
+ 'wl_notificationtimestamp',
+ ],
+ [
+ 'wl_namespace' => 0,
+ 'wl_title' => 'Old_Title',
+ ],
+ 'WatchedItemStore::duplicateEntry',
+ [ 'FOR UPDATE' ]
+ )
+ ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ );
+
+ $store->duplicateEntry(
+ Title::newFromText( 'Old_Title' ),
+ Title::newFromText( 'New_Title' )
+ );
+ }
+
+ public function testDuplicateEntry_somethingToDuplicate() {
+ $fakeRows = [
+ $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
+ $this->getFakeRow( [ 'wl_user' => 2, 'wl_notificationtimestamp' => null ] ),
+ ];
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->at( 0 ) )
+ ->method( 'select' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user',
+ 'wl_notificationtimestamp',
+ ],
+ [
+ 'wl_namespace' => 0,
+ 'wl_title' => 'Old_Title',
+ ]
+ )
+ ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+ $mockDb->expects( $this->at( 1 ) )
+ ->method( 'replace' )
+ ->with(
+ 'watchlist',
+ [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+ [
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'New_Title',
+ 'wl_notificationtimestamp' => '20151212010101',
+ ],
+ [
+ 'wl_user' => 2,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'New_Title',
+ 'wl_notificationtimestamp' => null,
+ ],
+ ],
+ $this->isType( 'string' )
+ );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ );
+
+ $store->duplicateEntry(
+ Title::newFromText( 'Old_Title' ),
+ Title::newFromText( 'New_Title' )
+ );
+ }
+
+ public function testDuplicateAllAssociatedEntries_nothingToDuplicate() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->at( 0 ) )
+ ->method( 'select' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user',
+ 'wl_notificationtimestamp',
+ ],
+ [
+ 'wl_namespace' => 0,
+ 'wl_title' => 'Old_Title',
+ ]
+ )
+ ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+ $mockDb->expects( $this->at( 1 ) )
+ ->method( 'select' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user',
+ 'wl_notificationtimestamp',
+ ],
+ [
+ 'wl_namespace' => 1,
+ 'wl_title' => 'Old_Title',
+ ]
+ )
+ ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ );
+
+ $store->duplicateAllAssociatedEntries(
+ Title::newFromText( 'Old_Title' ),
+ Title::newFromText( 'New_Title' )
+ );
+ }
+
+ public function testDuplicateAllAssociatedEntries_somethingToDuplicate() {
+ $fakeRows = [
+ $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
+ ];
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->at( 0 ) )
+ ->method( 'select' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user',
+ 'wl_notificationtimestamp',
+ ],
+ [
+ 'wl_namespace' => 0,
+ 'wl_title' => 'Old_Title',
+ ]
+ )
+ ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+ $mockDb->expects( $this->at( 1 ) )
+ ->method( 'replace' )
+ ->with(
+ 'watchlist',
+ [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+ [
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'New_Title',
+ 'wl_notificationtimestamp' => '20151212010101',
+ ],
+ ],
+ $this->isType( 'string' )
+ );
+ $mockDb->expects( $this->at( 2 ) )
+ ->method( 'select' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user',
+ 'wl_notificationtimestamp',
+ ],
+ [
+ 'wl_namespace' => 1,
+ 'wl_title' => 'Old_Title',
+ ]
+ )
+ ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+ $mockDb->expects( $this->at( 3 ) )
+ ->method( 'replace' )
+ ->with(
+ 'watchlist',
+ [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+ [
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 1,
+ 'wl_title' => 'New_Title',
+ 'wl_notificationtimestamp' => '20151212010101',
+ ],
+ ],
+ $this->isType( 'string' )
+ );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ );
+
+ $store->duplicateAllAssociatedEntries(
+ Title::newFromText( 'Old_Title' ),
+ Title::newFromText( 'New_Title' )
+ );
+ }
+
+ public function testAddWatch_nonAnonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'insert' )
+ ->with(
+ 'watchlist',
+ [
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'Some_Page',
+ 'wl_notificationtimestamp' => null,
+ ]
+ ]
+ );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'delete' )
+ ->with( '0:Some_Page:1' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $store->addWatch(
+ $this->getMockNonAnonUserWithId( 1 ),
+ Title::newFromText( 'Some_Page' )
+ );
+ }
+
+ public function testAddWatch_anonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'insert' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $store->addWatch(
+ $this->getAnonUser(),
+ Title::newFromText( 'Some_Page' )
+ );
+ }
+
+ public function testAddWatchBatch_nonAnonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'insert' )
+ ->with(
+ 'watchlist',
+ [
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'Some_Page',
+ 'wl_notificationtimestamp' => null,
+ ],
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 1,
+ 'wl_title' => 'Some_Page',
+ 'wl_notificationtimestamp' => null,
+ ]
+ ]
+ );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->exactly( 2 ) )
+ ->method( 'delete' );
+ $mockCache->expects( $this->at( 1 ) )
+ ->method( 'delete' )
+ ->with( '0:Some_Page:1' );
+ $mockCache->expects( $this->at( 3 ) )
+ ->method( 'delete' )
+ ->with( '1:Some_Page:1' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $mockUser = $this->getMockNonAnonUserWithId( 1 );
+
+ $this->assertTrue(
+ $store->addWatchBatch(
+ [
+ [ $mockUser, new TitleValue( 0, 'Some_Page' ) ],
+ [ $mockUser, new TitleValue( 1, 'Some_Page' ) ],
+ ]
+ )
+ );
+ }
+
+ public function testAddWatchBatch_anonymousUserCombinationsAreSkipped() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'insert' )
+ ->with(
+ 'watchlist',
+ [
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'Some_Page',
+ 'wl_notificationtimestamp' => null,
+ ]
+ ]
+ );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'delete' )
+ ->with( '0:Some_Page:1' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertTrue(
+ $store->addWatchBatch(
+ [
+ [ $this->getMockNonAnonUserWithId( 1 ), new TitleValue( 0, 'Some_Page' ) ],
+ [ $this->getAnonUser(), new TitleValue( 0, 'Other_Page' ) ],
+ ]
+ )
+ );
+ }
+
+ public function testAddWatchBatchReturnsFalse_whenOnlyGivenAnonymousUserCombinations() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'insert' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $anonUser = $this->getAnonUser();
+ $this->assertFalse(
+ $store->addWatchBatch(
+ [
+ [ $anonUser, new TitleValue( 0, 'Some_Page' ) ],
+ [ $anonUser, new TitleValue( 1, 'Other_Page' ) ],
+ ]
+ )
+ );
+ }
+
+ public function testAddWatchBatchReturnsFalse_whenGivenEmptyList() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'insert' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->addWatchBatch( [] )
+ );
+ }
+
+ public function testLoadWatchedItem_existingItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue(
+ $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+ ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'set' )
+ ->with(
+ '0:SomeDbKey:1'
+ );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $watchedItem = $store->loadWatchedItem(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ );
+ $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+ $this->assertEquals( 1, $watchedItem->getUser()->getId() );
+ $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
+ $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
+ }
+
+ public function testLoadWatchedItem_noItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue( [] ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->loadWatchedItem(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testLoadWatchedItem_anonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'selectRow' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->loadWatchedItem(
+ $this->getAnonUser(),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testRemoveWatch_existingItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'delete' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ );
+ $mockDb->expects( $this->once() )
+ ->method( 'affectedRows' )
+ ->will( $this->returnValue( 1 ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'delete' )
+ ->with( '0:SomeDbKey:1' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertTrue(
+ $store->removeWatch(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testRemoveWatch_noItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'delete' )
+ ->with(
+ 'watchlist',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ );
+ $mockDb->expects( $this->once() )
+ ->method( 'affectedRows' )
+ ->will( $this->returnValue( 0 ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'delete' )
+ ->with( '0:SomeDbKey:1' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->removeWatch(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testRemoveWatch_anonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'delete' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->removeWatch(
+ $this->getAnonUser(),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testGetWatchedItem_existingItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue(
+ $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+ ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'get' )
+ ->with(
+ '0:SomeDbKey:1'
+ )
+ ->will( $this->returnValue( null ) );
+ $mockCache->expects( $this->once() )
+ ->method( 'set' )
+ ->with(
+ '0:SomeDbKey:1'
+ );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $watchedItem = $store->getWatchedItem(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ );
+ $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+ $this->assertEquals( 1, $watchedItem->getUser()->getId() );
+ $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
+ $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
+ }
+
+ public function testGetWatchedItem_cachedItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'selectRow' );
+
+ $mockUser = $this->getMockNonAnonUserWithId( 1 );
+ $linkTarget = new TitleValue( 0, 'SomeDbKey' );
+ $cachedItem = new WatchedItem( $mockUser, $linkTarget, '20151212010101' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'get' )
+ ->with(
+ '0:SomeDbKey:1'
+ )
+ ->will( $this->returnValue( $cachedItem ) );
+ $mockCache->expects( $this->never() )
+ ->method( 'set' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertEquals(
+ $cachedItem,
+ $store->getWatchedItem(
+ $mockUser,
+ $linkTarget
+ )
+ );
+ }
+
+ public function testGetWatchedItem_noItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue( [] ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'set' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->getWatchedItem(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testGetWatchedItem_anonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'selectRow' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'set' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->getWatchedItem(
+ $this->getAnonUser(),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testIsWatchedItem_existingItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue(
+ $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+ ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'set' )
+ ->with(
+ '0:SomeDbKey:1'
+ );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertTrue(
+ $store->isWatched(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testIsWatchedItem_noItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue( [] ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'set' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->isWatched(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testIsWatchedItem_anonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'selectRow' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'set' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->isWatched(
+ $this->getAnonUser(),
+ new TitleValue( 0, 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testResetNotificationTimestamp_anonymousUser() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'selectRow' );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'set' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->resetNotificationTimestamp(
+ $this->getAnonUser(),
+ Title::newFromText( 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testResetNotificationTimestamp_noItem() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue( [] ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->never() )
+ ->method( 'set' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $this->assertFalse(
+ $store->resetNotificationTimestamp(
+ $this->getMockNonAnonUserWithId( 1 ),
+ Title::newFromText( 'SomeDbKey' )
+ )
+ );
+ }
+
+ public function testResetNotificationTimestamp_item() {
+ $user = $this->getMockNonAnonUserWithId( 1 );
+ $title = Title::newFromText( 'SomeDbKey' );
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue(
+ $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+ ) );
+
+ $mockCache = $this->getMockCache();
+ $mockCache->expects( $this->once() )
+ ->method( 'set' )
+ ->with(
+ '0:SomeDbKey:1',
+ $this->isInstanceOf( WatchedItem::class )
+ );
+ $mockCache->expects( $this->once() )
+ ->method( 'delete' )
+ ->with( '0:SomeDbKey:1' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ // Note: This does not actually assert the job is correct
+ $callableCallCounter = 0;
+ $mockCallback = function( $callable ) use ( &$callableCallCounter ) {
+ $callableCallCounter++;
+ $this->assertInternalType( 'callable', $callable );
+ };
+ $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
+
+ $this->assertTrue(
+ $store->resetNotificationTimestamp(
+ $user,
+ $title
+ )
+ );
+ $this->assertEquals( 1, $callableCallCounter );
+ }
+
+ public function testResetNotificationTimestamp_noItemForced() {
+ $user = $this->getMockNonAnonUserWithId( 1 );
+ $title = Title::newFromText( 'SomeDbKey' );
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'selectRow' );
+
+ $mockCache = $this->getMockCache();
+ $mockDb->expects( $this->never() )
+ ->method( 'set' );
+ $mockDb->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ // Note: This does not actually assert the job is correct
+ $callableCallCounter = 0;
+ $mockCallback = function( $callable ) use ( &$callableCallCounter ) {
+ $callableCallCounter++;
+ $this->assertInternalType( 'callable', $callable );
+ };
+ $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
+
+ $this->assertTrue(
+ $store->resetNotificationTimestamp(
+ $user,
+ $title,
+ 'force'
+ )
+ );
+ $this->assertEquals( 1, $callableCallCounter );
+ }
+
+ /**
+ * @param $text
+ * @param int $ns
+ *
+ * @return PHPUnit_Framework_MockObject_MockObject|Title
+ */
+ private function getMockTitle( $text, $ns = 0 ) {
+ $title = $this->getMock( Title::class );
+ $title->expects( $this->any() )
+ ->method( 'getText' )
+ ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
+ $title->expects( $this->any() )
+ ->method( 'getDbKey' )
+ ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
+ $title->expects( $this->any() )
+ ->method( 'getNamespace' )
+ ->will( $this->returnValue( $ns ) );
+ return $title;
+ }
+
+ public function testResetNotificationTimestamp_oldidSpecifiedLatestRevisionForced() {
+ $user = $this->getMockNonAnonUserWithId( 1 );
+ $oldid = 22;
+ $title = $this->getMockTitle( 'SomeTitle' );
+ $title->expects( $this->once() )
+ ->method( 'getNextRevisionID' )
+ ->with( $oldid )
+ ->will( $this->returnValue( false ) );
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->never() )
+ ->method( 'selectRow' );
+
+ $mockCache = $this->getMockCache();
+ $mockDb->expects( $this->never() )
+ ->method( 'set' );
+ $mockDb->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ // Note: This does not actually assert the job is correct
+ $callableCallCounter = 0;
+ $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+ function( $callable ) use ( &$callableCallCounter ) {
+ $callableCallCounter++;
+ $this->assertInternalType( 'callable', $callable );
+ }
+ );
+
+ $this->assertTrue(
+ $store->resetNotificationTimestamp(
+ $user,
+ $title,
+ 'force',
+ $oldid
+ )
+ );
+ $this->assertEquals( 1, $callableCallCounter );
+ }
+
+ public function testResetNotificationTimestamp_oldidSpecifiedNotLatestRevisionForced() {
+ $user = $this->getMockNonAnonUserWithId( 1 );
+ $oldid = 22;
+ $title = $this->getMockTitle( 'SomeDbKey' );
+ $title->expects( $this->once() )
+ ->method( 'getNextRevisionID' )
+ ->with( $oldid )
+ ->will( $this->returnValue( 33 ) );
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue(
+ $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+ ) );
+
+ $mockCache = $this->getMockCache();
+ $mockDb->expects( $this->never() )
+ ->method( 'set' );
+ $mockDb->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ // Note: This does not actually assert the job is correct
+ $addUpdateCallCounter = 0;
+ $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+ function( $callable ) use ( &$addUpdateCallCounter ) {
+ $addUpdateCallCounter++;
+ $this->assertInternalType( 'callable', $callable );
+ }
+ );
+
+ $getTimestampCallCounter = 0;
+ $store->overrideRevisionGetTimestampFromIdCallback(
+ function( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
+ $getTimestampCallCounter++;
+ $this->assertEquals( $title, $titleParam );
+ $this->assertEquals( $oldid, $oldidParam );
+ }
+ );
+
+ $this->assertTrue(
+ $store->resetNotificationTimestamp(
+ $user,
+ $title,
+ 'force',
+ $oldid
+ )
+ );
+ $this->assertEquals( 1, $addUpdateCallCounter );
+ $this->assertEquals( 1, $getTimestampCallCounter );
+ }
+
+ public function testUpdateNotificationTimestamp_watchersExist() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'select' )
+ ->with(
+ [ 'watchlist' ],
+ [ 'wl_user' ],
+ [
+ 'wl_user != 1',
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ 'wl_notificationtimestamp IS NULL'
+ ]
+ )
+ ->will(
+ $this->returnValue( [
+ $this->getFakeRow( [ 'wl_user' => '2' ] ),
+ $this->getFakeRow( [ 'wl_user' => '3' ] )
+ ] )
+ );
+ $mockDb->expects( $this->once() )
+ ->method( 'onTransactionIdle' )
+ ->with( $this->isType( 'callable' ) )
+ ->will( $this->returnCallback( function( $callable ) {
+ $callable();
+ } ) );
+ $mockDb->expects( $this->once() )
+ ->method( 'update' )
+ ->with(
+ 'watchlist',
+ [ 'wl_notificationtimestamp' => null ],
+ [
+ 'wl_user' => [ 2, 3 ],
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ );
+
+ $this->assertEquals(
+ [ 2, 3 ],
+ $store->updateNotificationTimestamp(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' ),
+ '20151212010101'
+ )
+ );
+ }
+
+ public function testUpdateNotificationTimestamp_noWatchers() {
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'select' )
+ ->with(
+ [ 'watchlist' ],
+ [ 'wl_user' ],
+ [
+ 'wl_user != 1',
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ 'wl_notificationtimestamp IS NULL'
+ ]
+ )
+ ->will(
+ $this->returnValue( [] )
+ );
+ $mockDb->expects( $this->never() )
+ ->method( 'onTransactionIdle' );
+ $mockDb->expects( $this->never() )
+ ->method( 'update' );
+
+ $store = new WatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ );
+
+ $watchers = $store->updateNotificationTimestamp(
+ $this->getMockNonAnonUserWithId( 1 ),
+ new TitleValue( 0, 'SomeDbKey' ),
+ '20151212010101'
+ );
+ $this->assertInternalType( 'array', $watchers );
+ $this->assertEmpty( $watchers );
+ }
+
+}
diff --git a/tests/phpunit/includes/WatchedItemUnitTest.php b/tests/phpunit/includes/WatchedItemUnitTest.php
new file mode 100644
index 0000000000..bc3731173a
--- /dev/null
+++ b/tests/phpunit/includes/WatchedItemUnitTest.php
@@ -0,0 +1,183 @@
+getMockBuilder( WatchedItemStore::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ /**
+ * @dataProvider provideUserTitleTimestamp
+ */
+ public function testConstruction( $user, LinkTarget $linkTarget, $notifTimestamp ) {
+ $item = new WatchedItem( $user, $linkTarget, $notifTimestamp );
+
+ $this->assertSame( $user, $item->getUser() );
+ $this->assertSame( $linkTarget, $item->getLinkTarget() );
+ $this->assertSame( $notifTimestamp, $item->getNotificationTimestamp() );
+
+ // The below tests the internal WatchedItem::getTitle method
+ $this->assertInstanceOf( 'Title', $item->getTitle() );
+ $this->assertSame( $linkTarget->getDBkey(), $item->getTitle()->getDBkey() );
+ $this->assertSame( $linkTarget->getFragment(), $item->getTitle()->getFragment() );
+ $this->assertSame( $linkTarget->getNamespace(), $item->getTitle()->getNamespace() );
+ $this->assertSame( $linkTarget->getText(), $item->getTitle()->getText() );
+ }
+
+ /**
+ * @dataProvider provideUserTitleTimestamp
+ */
+ public function testFromUserTitle( $user, $linkTarget, $timestamp ) {
+ $store = $this->getMockWatchedItemStore();
+ $store->expects( $this->once() )
+ ->method( 'loadWatchedItem' )
+ ->with( $user, $linkTarget )
+ ->will( $this->returnValue( new WatchedItem( $user, $linkTarget, $timestamp ) ) );
+ WatchedItemStore::overrideDefaultInstance( $store );
+
+ $item = WatchedItem::fromUserTitle( $user, $linkTarget, User::IGNORE_USER_RIGHTS );
+
+ $this->assertEquals( $user, $item->getUser() );
+ $this->assertEquals( $linkTarget, $item->getLinkTarget() );
+ $this->assertEquals( $timestamp, $item->getNotificationTimestamp() );
+ }
+
+ /**
+ * @dataProvider provideUserTitleTimestamp
+ */
+ public function testResetNotificationTimestamp( $user, $linkTarget, $timestamp ) {
+ $force = 'XXX';
+ $oldid = 999;
+
+ $store = $this->getMockWatchedItemStore();
+ $store->expects( $this->once() )
+ ->method( 'resetNotificationTimestamp' )
+ ->with( $user, $this->isInstanceOf( Title::class ), $force, $oldid )
+ ->will( $this->returnCallback(
+ function ( $user, Title $title, $force, $oldid ) use ( $linkTarget ) {
+ /** @var LinkTarget $linkTarget */
+ $this->assertInstanceOf( 'Title', $title );
+ $this->assertSame( $linkTarget->getDBkey(), $title->getDBkey() );
+ $this->assertSame( $linkTarget->getFragment(), $title->getFragment() );
+ $this->assertSame( $linkTarget->getNamespace(), $title->getNamespace() );
+ $this->assertSame( $linkTarget->getText(), $title->getText() );
+
+ return true;
+ }
+ ) );
+ WatchedItemStore::overrideDefaultInstance( $store );
+
+ $item = new WatchedItem( $user, $linkTarget, $timestamp );
+ $item->resetNotificationTimestamp( $force, $oldid );
+ }
+
+ public function testAddWatch() {
+ $title = Title::newFromText( 'SomeTitle' );
+ $timestamp = null;
+ $checkRights = 0;
+
+ /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+ $user = $this->getMock( User::class );
+ $user->expects( $this->once() )
+ ->method( 'addWatch' )
+ ->with( $title, $checkRights );
+
+ $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+ $this->assertTrue( $item->addWatch() );
+ }
+
+ public function testRemoveWatch() {
+ $title = Title::newFromText( 'SomeTitle' );
+ $timestamp = null;
+ $checkRights = 0;
+
+ /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+ $user = $this->getMock( User::class );
+ $user->expects( $this->once() )
+ ->method( 'removeWatch' )
+ ->with( $title, $checkRights );
+
+ $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+ $this->assertTrue( $item->removeWatch() );
+ }
+
+ public function provideBooleans() {
+ return [
+ [ true ],
+ [ false ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideBooleans
+ */
+ public function testIsWatched( $returnValue ) {
+ $title = Title::newFromText( 'SomeTitle' );
+ $timestamp = null;
+ $checkRights = 0;
+
+ /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+ $user = $this->getMock( User::class );
+ $user->expects( $this->once() )
+ ->method( 'isWatched' )
+ ->with( $title, $checkRights )
+ ->will( $this->returnValue( $returnValue ) );
+
+ $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+ $this->assertEquals( $returnValue, $item->isWatched() );
+ }
+
+ public function testDuplicateEntries() {
+ $oldTitle = Title::newFromText( 'OldTitle' );
+ $newTitle = Title::newFromText( 'NewTitle' );
+
+ $store = $this->getMockWatchedItemStore();
+ $store->expects( $this->once() )
+ ->method( 'duplicateAllAssociatedEntries' )
+ ->with( $oldTitle, $newTitle );
+ WatchedItemStore::overrideDefaultInstance( $store );
+
+ WatchedItem::duplicateEntries( $oldTitle, $newTitle );
+ }
+
+ public function testBatchAddWatch() {
+ /** @var WatchedItem[] $items */
+ $items = [
+ new WatchedItem( User::newFromId( 1 ), new TitleValue( 0, 'Title1' ), null ),
+ new WatchedItem( User::newFromId( 3 ), Title::newFromText( 'Title2' ), '20150101010101' ),
+ ];
+
+ $userTargetCombinations = [];
+ foreach ( $items as $item ) {
+ $userTargetCombinations[] = [ $item->getUser(), $item->getTitle()->getSubjectPage() ];
+ $userTargetCombinations[] = [ $item->getUser(), $item->getTitle()->getTalkPage() ];
+ }
+
+ $store = $this->getMockWatchedItemStore();
+ $store->expects( $this->once() )
+ ->method( 'addWatchBatch' )
+ ->with( $userTargetCombinations );
+ WatchedItemStore::overrideDefaultInstance( $store );
+
+ WatchedItem::batchAddWatch( $items );
+ }
+
+}
diff --git a/tests/phpunit/includes/api/ApiBlockTest.php b/tests/phpunit/includes/api/ApiBlockTest.php
index f51997c916..d2dccf997d 100644
--- a/tests/phpunit/includes/api/ApiBlockTest.php
+++ b/tests/phpunit/includes/api/ApiBlockTest.php
@@ -17,7 +17,7 @@ class ApiBlockTest extends ApiTestCase {
return $this->getTokenList( self::$users['sysop'] );
}
- function addDBData() {
+ function addDBDataOnce() {
$user = User::newFromName( 'UTApiBlockee' );
if ( $user->getId() == 0 ) {
diff --git a/tests/phpunit/includes/api/RandomImageGenerator.php b/tests/phpunit/includes/api/RandomImageGenerator.php
index 62e175b2ab..78cb7fb152 100644
--- a/tests/phpunit/includes/api/RandomImageGenerator.php
+++ b/tests/phpunit/includes/api/RandomImageGenerator.php
@@ -230,7 +230,7 @@ class RandomImageGenerator {
$points[] = $point['x'] . ',' . $point['y'];
}
- return join( " ", $points );
+ return implode( " ", $points );
}
/**
@@ -425,7 +425,7 @@ class RandomImageGenerator {
$components[] = mt_rand( 0, 255 );
}
- return 'rgb(' . join( ', ', $components ) . ')';
+ return 'rgb(' . implode( ', ', $components ) . ')';
}
/**
diff --git a/tests/phpunit/includes/api/query/ApiQueryBasicTest.php b/tests/phpunit/includes/api/query/ApiQueryBasicTest.php
index 9ba4587b5d..e5971b4418 100644
--- a/tests/phpunit/includes/api/query/ApiQueryBasicTest.php
+++ b/tests/phpunit/includes/api/query/ApiQueryBasicTest.php
@@ -36,9 +36,10 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
/**
* Create a set of pages. These must not change, otherwise the tests might give wrong results.
- * @see MediaWikiTestCase::addDBData()
+ *
+*@see MediaWikiTestCase::addDBDataOnce()
*/
- function addDBData() {
+ function addDBDataOnce() {
try {
if ( Title::newFromText( 'AQBT-All' )->exists() ) {
return;
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php b/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
index 8f11a51168..944d31c824 100644
--- a/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
+++ b/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
@@ -29,9 +29,10 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
/**
* Create a set of pages. These must not change, otherwise the tests might give wrong results.
- * @see MediaWikiTestCase::addDBData()
+ *
+*@see MediaWikiTestCase::addDBDataOnce()
*/
- function addDBData() {
+ function addDBDataOnce() {
try {
$this->editPage( 'AQCT73462-A', '**AQCT73462-A** [[AQCT73462-B]] [[AQCT73462-C]]' );
$this->editPage( 'AQCT73462-B', '[[AQCT73462-A]] **AQCT73462-B** [[AQCT73462-C]]' );
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinueTest.php b/tests/phpunit/includes/api/query/ApiQueryContinueTest.php
index a6269ed265..b31627b4d4 100644
--- a/tests/phpunit/includes/api/query/ApiQueryContinueTest.php
+++ b/tests/phpunit/includes/api/query/ApiQueryContinueTest.php
@@ -33,9 +33,10 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
/**
* Create a set of pages. These must not change, otherwise the tests might give wrong results.
- * @see MediaWikiTestCase::addDBData()
+ *
+*@see MediaWikiTestCase::addDBDataOnce()
*/
- function addDBData() {
+ function addDBDataOnce() {
try {
$this->editPage( 'Template:AQCT-T1', '**Template:AQCT-T1**' );
$this->editPage( 'Template:AQCT-T2', '**Template:AQCT-T2**' );
diff --git a/tests/phpunit/includes/cache/GenderCacheTest.php b/tests/phpunit/includes/cache/GenderCacheTest.php
index a441b3d441..40994da037 100644
--- a/tests/phpunit/includes/cache/GenderCacheTest.php
+++ b/tests/phpunit/includes/cache/GenderCacheTest.php
@@ -6,7 +6,7 @@
*/
class GenderCacheTest extends MediaWikiLangTestCase {
- function addDBData() {
+ function addDBDataOnce() {
// ensure the correct default gender
$this->mergeMwGlobalArrayValue( 'wgDefaultUserOptions', [ 'gender' => 'unknown' ] );
diff --git a/tests/phpunit/includes/cache/LocalisationCacheTest.php b/tests/phpunit/includes/cache/LocalisationCacheTest.php
index 7d62b018b3..697eb2dc81 100644
--- a/tests/phpunit/includes/cache/LocalisationCacheTest.php
+++ b/tests/phpunit/includes/cache/LocalisationCacheTest.php
@@ -15,7 +15,7 @@ class LocalisationCacheTest extends MediaWikiTestCase {
}
/**
- * @return PHPUnit_Framework_MockObject_MockObject|LocalisationCache
+ * @return LocalisationCache
*/
protected function getMockLocalisationCache() {
global $IP;
diff --git a/tests/phpunit/includes/cache/MessageCacheTest.php b/tests/phpunit/includes/cache/MessageCacheTest.php
index ddd74e3919..bd744c01ca 100644
--- a/tests/phpunit/includes/cache/MessageCacheTest.php
+++ b/tests/phpunit/includes/cache/MessageCacheTest.php
@@ -19,17 +19,11 @@ class MessageCacheTest extends MediaWikiLangTestCase {
protected function configureLanguages() {
// for the test, we need the content language to be anything but English,
// let's choose e.g. German (de)
- $langCode = 'de';
- $langObj = Language::factory( $langCode );
-
- $this->setMwGlobals( [
- 'wgLanguageCode' => $langCode,
- 'wgLang' => $langObj,
- 'wgContLang' => $langObj,
- ] );
+ $this->setUserLang( 'de' );
+ $this->setContentLang( 'de' );
}
- function addDBData() {
+ function addDBDataOnce() {
$this->configureLanguages();
// Set up messages and fallbacks ab -> ru -> de
diff --git a/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php b/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
index 70da12e2db..6369b33430 100644
--- a/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
+++ b/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
@@ -24,6 +24,16 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
*/
private static $mockRecentChange;
+ /**
+ * @var Revision
+ */
+ private static $pageRev = null;
+
+ /**
+ * @var string
+ */
+ private static $pageName = 'CategoryMembershipChangeTestPage';
+
public static function newForCategorizationCallback() {
self::$lastNotifyArgs = func_get_args();
self::$notifyCallCounter += 1;
@@ -34,10 +44,20 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
parent::setUp();
self::$notifyCallCounter = 0;
self::$mockRecentChange = self::getMock( 'RecentChange' );
+
+ $this->setContentLang( 'qqx' );
+ }
+
+ public function addDBDataOnce() {
+ $info = $this->insertPage( self::$pageName );
+ $title = $info['title'];
+
+ $page = WikiPage::factory( $title );
+ self::$pageRev = $page->getRevision();
}
private function newChange( Revision $revision = null ) {
- $change = new CategoryMembershipChange( Title::newFromText( 'UTPage' ), $revision );
+ $change = new CategoryMembershipChange( Title::newFromText( self::$pageName ), $revision );
$change->overrideNewForCategorizationCallback(
'CategoryMembershipChangeTest::newForCategorizationCallback'
);
@@ -53,9 +73,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
$this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
$this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
- $this->assertEquals( 'MediaWiki automatic change', self::$lastNotifyArgs[2]->getName() );
- $this->assertEquals( '[[:UTPage]] added to category', self::$lastNotifyArgs[3] );
- $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
+ $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ', 0)',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
$this->assertEquals( 0, self::$lastNotifyArgs[5] );
$this->assertEquals( 0, self::$lastNotifyArgs[6] );
$this->assertEquals( null, self::$lastNotifyArgs[7] );
@@ -72,9 +93,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
$this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
$this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
- $this->assertEquals( 'MediaWiki automatic change', self::$lastNotifyArgs[2]->getName() );
- $this->assertEquals( '[[:UTPage]] removed from category', self::$lastNotifyArgs[3] );
- $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
+ $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ', 0)',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
$this->assertEquals( 0, self::$lastNotifyArgs[5] );
$this->assertEquals( 0, self::$lastNotifyArgs[6] );
$this->assertEquals( null, self::$lastNotifyArgs[7] );
@@ -84,7 +106,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
}
public function testChangeAddedWithRev() {
- $revision = Revision::newFromId( Title::newFromText( 'UTPage' )->getLatestRevID() );
+ $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
$change = $this->newChange( $revision );
$change->triggerCategoryAddedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
@@ -93,9 +115,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
$this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
$this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
$this->assertEquals( 'UTSysop', self::$lastNotifyArgs[2]->getName() );
- $this->assertEquals( '[[:UTPage]] added to category', self::$lastNotifyArgs[3] );
- $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
- $this->assertEquals( 0, self::$lastNotifyArgs[5] );
+ $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ', 0)',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
$this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
$this->assertEquals( null, self::$lastNotifyArgs[7] );
$this->assertEquals( 0, self::$lastNotifyArgs[8] );
@@ -104,7 +127,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
}
public function testChangeRemovedWithRev() {
- $revision = Revision::newFromId( Title::newFromText( 'UTPage' )->getLatestRevID() );
+ $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
$change = $this->newChange( $revision );
$change->triggerCategoryRemovedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
@@ -113,9 +136,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
$this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
$this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
$this->assertEquals( 'UTSysop', self::$lastNotifyArgs[2]->getName() );
- $this->assertEquals( '[[:UTPage]] removed from category', self::$lastNotifyArgs[3] );
- $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
- $this->assertEquals( 0, self::$lastNotifyArgs[5] );
+ $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ', 0)',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
$this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
$this->assertEquals( null, self::$lastNotifyArgs[7] );
$this->assertEquals( 0, self::$lastNotifyArgs[8] );
diff --git a/tests/phpunit/includes/changes/OldChangesListTest.php b/tests/phpunit/includes/changes/OldChangesListTest.php
index 193034f374..5746a61dc4 100644
--- a/tests/phpunit/includes/changes/OldChangesListTest.php
+++ b/tests/phpunit/includes/changes/OldChangesListTest.php
@@ -29,8 +29,8 @@ class OldChangesListTest extends MediaWikiLangTestCase {
$this->setMwGlobals( [
'wgArticlePath' => '/wiki/$1',
- 'wgLang' => Language::factory( 'qqx' )
] );
+ $this->setUserLang( 'qqx' );
}
/**
@@ -108,13 +108,13 @@ class OldChangesListTest extends MediaWikiLangTestCase {
$line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
$this->assertContains(
- "(newpageletter) ",
+ '(newpageletter) ',
$line,
'new page flag'
);
$this->assertContains(
- "(boteditletter) ",
+ '(boteditletter) ',
$line,
'bot flag'
);
@@ -197,7 +197,7 @@ class OldChangesListTest extends MediaWikiLangTestCase {
private function getContext() {
$user = $this->getTestUser();
$context = $this->testRecentChangesHelper->getTestContext( $user );
- $context->setLanguage( Language::factory( 'qqx' ) );
+ $context->setLanguage( 'qqx' );
return $context;
}
diff --git a/tests/phpunit/includes/changes/TestRecentChangesHelper.php b/tests/phpunit/includes/changes/TestRecentChangesHelper.php
index 128e067f9a..faa1dccd01 100644
--- a/tests/phpunit/includes/changes/TestRecentChangesHelper.php
+++ b/tests/phpunit/includes/changes/TestRecentChangesHelper.php
@@ -154,7 +154,7 @@ class TestRecentChangesHelper {
public function getTestContext( User $user ) {
$context = new RequestContext();
- $context->setLanguage( Language::factory( 'en' ) );
+ $context->setLanguage( 'en' );
$context->setUser( $user );
diff --git a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
index 8e8002cee0..168b2c6837 100644
--- a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
+++ b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
@@ -247,14 +247,64 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
];
}
- function testMasterPos() {
- $pos1 = new MySQLMasterPos( 'db1034-bin.000976', '843431247' );
- $pos2 = new MySQLMasterPos( 'db1034-bin.000976', '843431248' );
-
- $this->assertTrue( $pos1->hasReached( $pos1 ) );
- $this->assertTrue( $pos2->hasReached( $pos2 ) );
- $this->assertTrue( $pos2->hasReached( $pos1 ) );
- $this->assertFalse( $pos1->hasReached( $pos2 ) );
+ /**
+ * @dataProvider provideComparePositions
+ */
+ function testHasReached( MySQLMasterPos $lowerPos, MySQLMasterPos $higherPos ) {
+ $this->assertTrue( $higherPos->hasReached( $lowerPos ) );
+ $this->assertTrue( $higherPos->hasReached( $higherPos ) );
+ $this->assertTrue( $lowerPos->hasReached( $lowerPos ) );
+ $this->assertFalse( $lowerPos->hasReached( $higherPos ) );
+ }
+
+ function provideComparePositions() {
+ return [
+ [
+ new MySQLMasterPos( 'db1034-bin.000976', '843431247' ),
+ new MySQLMasterPos( 'db1034-bin.000976', '843431248' )
+ ],
+ [
+ new MySQLMasterPos( 'db1034-bin.000976', '999' ),
+ new MySQLMasterPos( 'db1034-bin.000976', '1000' )
+ ],
+ [
+ new MySQLMasterPos( 'db1034-bin.000976', '999' ),
+ new MySQLMasterPos( 'db1035-bin.000976', '1000' )
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideChannelPositions
+ */
+ function testChannelsMatch( MySQLMasterPos $pos1, MySQLMasterPos $pos2, $matches ) {
+ $this->assertEquals( $matches, $pos1->channelsMatch( $pos2 ) );
+ $this->assertEquals( $matches, $pos2->channelsMatch( $pos1 ) );
+ }
+
+ function provideChannelPositions() {
+ return [
+ [
+ new MySQLMasterPos( 'db1034-bin.000876', '44' ),
+ new MySQLMasterPos( 'db1034-bin.000976', '74' ),
+ true
+ ],
+ [
+ new MySQLMasterPos( 'db1052-bin.000976', '999' ),
+ new MySQLMasterPos( 'db1052-bin.000976', '1000' ),
+ true
+ ],
+ [
+ new MySQLMasterPos( 'db1066-bin.000976', '9999' ),
+ new MySQLMasterPos( 'db1035-bin.000976', '10000' ),
+ false
+ ],
+ [
+ new MySQLMasterPos( 'db1066-bin.000976', '9999' ),
+ new MySQLMasterPos( 'trump2016.000976', '10000' ),
+ false
+ ],
+ ];
}
/**
diff --git a/tests/phpunit/includes/db/DatabaseSqliteTest.php b/tests/phpunit/includes/db/DatabaseSqliteTest.php
index 18de9be049..80fb826bf3 100644
--- a/tests/phpunit/includes/db/DatabaseSqliteTest.php
+++ b/tests/phpunit/includes/db/DatabaseSqliteTest.php
@@ -330,7 +330,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
foreach ( $versions as $version ) {
$versions = "upgrading from $version to $wgVersion";
- $db = $this->prepareDB( $version );
+ $db = $this->prepareTestDB( $version );
$tables = $this->getTables( $db );
$this->assertEquals( $currentTables, $tables, "Different tables $versions" );
foreach ( $tables as $table ) {
@@ -389,7 +389,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
$this->assertTrue( $db->close(), "closing database" );
}
- private function prepareDB( $version ) {
+ private function prepareTestDB( $version ) {
static $maint = null;
if ( $maint === null ) {
$maint = new FakeMaintenance();
diff --git a/tests/phpunit/includes/deferred/LinksUpdateTest.php b/tests/phpunit/includes/deferred/LinksUpdateTest.php
index 75af87e6d5..9609f74a14 100644
--- a/tests/phpunit/includes/deferred/LinksUpdateTest.php
+++ b/tests/phpunit/includes/deferred/LinksUpdateTest.php
@@ -6,7 +6,7 @@
* ^--- make sure temporary tables are used.
*/
class LinksUpdateTest extends MediaWikiLangTestCase {
- protected $testingPageId;
+ protected static $testingPageId;
function __construct( $name = null, array $data = [], $dataName = '' ) {
parent::__construct( $name, $data, $dataName );
@@ -45,9 +45,9 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
$this->setMwGlobals( 'wgRCWatchCategoryMembership', true );
}
- public function addDBData() {
+ public function addDBDataOnce() {
$res = $this->insertPage( 'Testing' );
- $this->testingPageId = $res['id'];
+ self::$testingPageId = $res['id'];
$this->insertPage( 'Some_other_page' );
$this->insertPage( 'Template:TestingTemplate' );
}
@@ -68,7 +68,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
public function testUpdate_pagelinks() {
/** @var Title $t */
/** @var ParserOutput $po */
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$po->addLink( Title::newFromText( "Foo" ) );
$po->addLink( Title::newFromText( "Special:Foo" ) ); // special namespace should be ignored
@@ -81,7 +81,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
'pagelinks',
'pl_namespace,
pl_title',
- 'pl_from = ' . $this->testingPageId,
+ 'pl_from = ' . self::$testingPageId,
[ [ NS_MAIN, 'Foo' ] ]
);
$this->assertArrayEquals( [
@@ -100,7 +100,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
'pagelinks',
'pl_namespace,
pl_title',
- 'pl_from = ' . $this->testingPageId,
+ 'pl_from = ' . self::$testingPageId,
[
[ NS_MAIN, 'Bar' ],
[ NS_TALK, 'Bar' ],
@@ -120,7 +120,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
*/
public function testUpdate_externallinks() {
/** @var ParserOutput $po */
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$po->addExternalLink( "http://testing.com/wiki/Foo" );
@@ -129,7 +129,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
$po,
'externallinks',
'el_to, el_index',
- 'el_from = ' . $this->testingPageId,
+ 'el_from = ' . self::$testingPageId,
[
[ 'http://testing.com/wiki/Foo', 'http://com.testing./wiki/Foo' ],
]
@@ -143,7 +143,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
/** @var ParserOutput $po */
$this->setMwGlobals( 'wgCategoryCollation', 'uppercase' );
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$po->addCategory( "Foo", "FOO" );
@@ -152,7 +152,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
$po,
'categorylinks',
'cl_to, cl_sortkey',
- 'cl_from = ' . $this->testingPageId,
+ 'cl_from = ' . self::$testingPageId,
[ [ 'Foo', "FOO\nTESTING" ] ]
);
}
@@ -232,7 +232,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
*/
public function testUpdate_iwlinks() {
/** @var ParserOutput $po */
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$target = Title::makeTitleSafe( NS_MAIN, "Foo", '', 'linksupdatetest' );
$po->addInterwikiLink( $target );
@@ -242,7 +242,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
$po,
'iwlinks',
'iwl_prefix, iwl_title',
- 'iwl_from = ' . $this->testingPageId,
+ 'iwl_from = ' . self::$testingPageId,
[ [ 'linksupdatetest', 'Foo' ] ]
);
}
@@ -252,7 +252,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
*/
public function testUpdate_templatelinks() {
/** @var ParserOutput $po */
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$po->addTemplate( Title::newFromText( "Template:Foo" ), 23, 42 );
@@ -262,7 +262,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
'templatelinks',
'tl_namespace,
tl_title',
- 'tl_from = ' . $this->testingPageId,
+ 'tl_from = ' . self::$testingPageId,
[ [ NS_TEMPLATE, 'Foo' ] ]
);
}
@@ -272,7 +272,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
*/
public function testUpdate_imagelinks() {
/** @var ParserOutput $po */
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$po->addImage( "Foo.png" );
@@ -281,7 +281,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
$po,
'imagelinks',
'il_to',
- 'il_from = ' . $this->testingPageId,
+ 'il_from = ' . self::$testingPageId,
[ [ 'Foo.png' ] ]
);
}
@@ -295,7 +295,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
] );
/** @var ParserOutput $po */
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$po->addLanguageLink( Title::newFromText( "en:Foo" )->getFullText() );
@@ -304,7 +304,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
$po,
'langlinks',
'll_lang, ll_title',
- 'll_from = ' . $this->testingPageId,
+ 'll_from = ' . self::$testingPageId,
[ [ 'En', 'Foo' ] ]
);
}
@@ -316,7 +316,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
global $wgPagePropsHaveSortkey;
/** @var ParserOutput $po */
- list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+ list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
$fields = [ 'pp_propname', 'pp_value' ];
$expected = [];
@@ -349,7 +349,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
}
$this->assertLinksUpdate(
- $t, $po, 'page_props', $fields, 'pp_page = ' . $this->testingPageId, $expected );
+ $t, $po, 'page_props', $fields, 'pp_page = ' . self::$testingPageId, $expected );
}
public function testUpdate_page_props_without_sortkey() {
diff --git a/tests/phpunit/includes/exception/MWExceptionTest.php b/tests/phpunit/includes/exception/MWExceptionTest.php
index 94c039c2df..0e87ffa42f 100644
--- a/tests/phpunit/includes/exception/MWExceptionTest.php
+++ b/tests/phpunit/includes/exception/MWExceptionTest.php
@@ -19,9 +19,9 @@ class MWExceptionTest extends MediaWikiTestCase {
* @dataProvider provideTextUseOutputPage
* @covers MWException::useOutputPage
*/
- public function testUseOutputPage( $expected, $wgLang, $wgFullyInitialised, $wgOut ) {
+ public function testUseOutputPage( $expected, $langObj, $wgFullyInitialised, $wgOut ) {
$this->setMwGlobals( [
- 'wgLang' => $wgLang,
+ 'wgLang' => $langObj,
'wgFullyInitialised' => $wgFullyInitialised,
'wgOut' => $wgOut,
] );
@@ -32,7 +32,7 @@ class MWExceptionTest extends MediaWikiTestCase {
public function provideTextUseOutputPage() {
return [
- // expected, wgLang, wgFullyInitialised, wgOut
+ // expected, langObj, wgFullyInitialised, wgOut
[ false, null, null, null ],
[ false, $this->getMockLanguage(), null, null ],
[ false, $this->getMockLanguage(), true, null ],
@@ -52,9 +52,9 @@ class MWExceptionTest extends MediaWikiTestCase {
* @dataProvider provideUseMessageCache
* @covers MWException::useMessageCache
*/
- public function testUseMessageCache( $expected, $wgLang ) {
+ public function testUseMessageCache( $expected, $langObj ) {
$this->setMwGlobals( [
- 'wgLang' => $wgLang,
+ 'wgLang' => $langObj,
] );
$e = new MWException();
$this->assertEquals( $expected, $e->useMessageCache() );
diff --git a/tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php b/tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php
index 50a24ada24..54178fe2af 100644
--- a/tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php
+++ b/tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php
@@ -21,10 +21,11 @@ class CategoryMembershipChangeJobTest extends MediaWikiTestCase {
public function setUp() {
parent::setUp();
$this->setMwGlobals( 'wgRCWatchCategoryMembership', true );
+ $this->setContentLang( 'qqx' );
}
- public function addDBData() {
- parent::addDBData();
+ public function addDBDataOnce() {
+ parent::addDBDataOnce();
$insertResult = $this->insertPage( self::TITLE_STRING, 'UT Content' );
$this->title = $insertResult['title'];
}
@@ -74,11 +75,11 @@ class CategoryMembershipChangeJobTest extends MediaWikiTestCase {
$removedRevId = $this->editPageText( 'Blank' );
$this->assertEquals(
- '[[:' . self::TITLE_STRING . ']] added to category',
+ '(recentchanges-page-added-to-category: ' . self::TITLE_STRING . ', 0)',
$this->getCategorizeRecentChangeForRevId( $addedRevId )->getAttribute( 'rc_comment' )
);
$this->assertEquals(
- '[[:' . self::TITLE_STRING . ']] removed from category',
+ '(recentchanges-page-removed-from-category: ' . self::TITLE_STRING . ', 0)',
$this->getCategorizeRecentChangeForRevId( $removedRevId )->getAttribute( 'rc_comment' )
);
}
diff --git a/tests/phpunit/includes/libs/MemoizedCallableTest.php b/tests/phpunit/includes/libs/MemoizedCallableTest.php
index 519c8c38de..6eb96b157e 100644
--- a/tests/phpunit/includes/libs/MemoizedCallableTest.php
+++ b/tests/phpunit/includes/libs/MemoizedCallableTest.php
@@ -4,7 +4,7 @@
* in an instance property rather than APC.
*/
class ArrayBackedMemoizedCallable extends MemoizedCallable {
- public $cache = [];
+ private $cache = [];
protected function fetchResult( $key, &$success ) {
if ( array_key_exists( $key, $this->cache ) ) {
@@ -112,6 +112,11 @@ class MemoizedCallableTest extends PHPUnit_Framework_TestCase {
$this->readAttribute( $a, 'callableName' ),
$this->readAttribute( $b, 'callableName' )
);
+
+ $c = new ArrayBackedMemoizedCallable( function () {
+ return rand();
+ } );
+ $this->assertEquals( $c->invokeArgs(), $c->invokeArgs(), 'memoized random' );
}
/**
diff --git a/tests/phpunit/includes/media/WebPTest.php b/tests/phpunit/includes/media/WebPTest.php
index b50fe80827..dfa92f1f8a 100644
--- a/tests/phpunit/includes/media/WebPTest.php
+++ b/tests/phpunit/includes/media/WebPTest.php
@@ -137,5 +137,5 @@ class WebPHandlerTest extends MediaWikiTestCase {
}
/* Python code to extract a header and convert to PHP format:
- * print '"%s"' % ''.join( '\\x%02X' % ord(c) for c in urllib.urlopen(url).read(36) )
+ * print '"%s"' % ''.implode( '\\x%02X' % ord(c) for c in urllib.urlopen(url).read(36) )
*/
diff --git a/tests/phpunit/includes/page/ArticleTablesTest.php b/tests/phpunit/includes/page/ArticleTablesTest.php
index d88592600f..3a3b514651 100644
--- a/tests/phpunit/includes/page/ArticleTablesTest.php
+++ b/tests/phpunit/includes/page/ArticleTablesTest.php
@@ -17,9 +17,8 @@ class ArticleTablesTest extends MediaWikiLangTestCase {
$page = WikiPage::factory( $title );
$user = new User();
$user->mRights = [ 'createpage', 'edit', 'purge' ];
- $this->setMwGlobals( 'wgLanguageCode', 'es' );
- $this->setMwGlobals( 'wgContLang', Language::factory( 'es' ) );
- $this->setMwGlobals( 'wgLang', Language::factory( 'fr' ) );
+ $this->setContentLang( 'es' );
+ $this->setUserLang( 'fr' );
$page->doEditContent(
new WikitextContent( '{{:{{int:history}}}}' ),
@@ -30,7 +29,7 @@ class ArticleTablesTest extends MediaWikiLangTestCase {
);
$templates1 = $title->getTemplateLinksFrom();
- $this->setMwGlobals( 'wgLang', Language::factory( 'de' ) );
+ $this->setUserLang( 'de' );
$page = WikiPage::factory( $title ); // In order to force the re-rendering of the same wikitext
// We need an edit, a purge is not enough to regenerate the tables
diff --git a/tests/phpunit/includes/parser/NewParserTest.php b/tests/phpunit/includes/parser/NewParserTest.php
index 04d606782a..4eb480d4ef 100644
--- a/tests/phpunit/includes/parser/NewParserTest.php
+++ b/tests/phpunit/includes/parser/NewParserTest.php
@@ -211,15 +211,15 @@ class NewParserTest extends MediaWikiTestCase {
parent::tearDownAfterClass();
}
- function addDBData() {
- $this->tablesUsed[] = 'site_stats';
+ function addDBDataOnce() {
# disabled for performance
# $this->tablesUsed[] = 'image';
# Update certain things in site_stats
$this->db->insert( 'site_stats',
[ 'ss_row_id' => 1, 'ss_images' => 2, 'ss_good_articles' => 1 ],
- __METHOD__
+ __METHOD__,
+ [ 'IGNORE' ]
);
$user = User::newFromId( 0 );
diff --git a/tests/phpunit/includes/search/SearchEnginePrefixTest.php b/tests/phpunit/includes/search/SearchEnginePrefixTest.php
index 2a3a5fe9cf..6a3f95bb22 100644
--- a/tests/phpunit/includes/search/SearchEnginePrefixTest.php
+++ b/tests/phpunit/includes/search/SearchEnginePrefixTest.php
@@ -10,7 +10,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase {
*/
private $search;
- public function addDBData() {
+ public function addDBDataOnce() {
if ( !$this->isWikitextNS( NS_MAIN ) ) {
// tests are skipped if NS_MAIN is not wikitext
return;
diff --git a/tests/phpunit/includes/search/SearchEngineTest.php b/tests/phpunit/includes/search/SearchEngineTest.php
index b680d5e014..055e982377 100644
--- a/tests/phpunit/includes/search/SearchEngineTest.php
+++ b/tests/phpunit/includes/search/SearchEngineTest.php
@@ -44,7 +44,7 @@ class SearchEngineTest extends MediaWikiLangTestCase {
parent::tearDown();
}
- public function addDBData() {
+ public function addDBDataOnce() {
if ( !$this->isWikitextNS( NS_MAIN ) ) {
// @todo cover the case of non-wikitext content in the main namespace
return;
diff --git a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php
index 590f2878ba..5126a42138 100644
--- a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php
+++ b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php
@@ -62,7 +62,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
] );
}
- public function addDBData() {
+ public function addDBDataOnce() {
$passwordFactory = new \PasswordFactory();
$passwordFactory->init( \RequestContext::getMain()->getConfig() );
// A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
diff --git a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
index 998d2bb335..534cf9baf7 100644
--- a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
+++ b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
@@ -171,7 +171,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
$gotWarnings = count( $warnings );
if ( $gotWarnings !== $expectWarnings ) {
$this->fail( "Expected $expectWarnings warning(s), but got $gotWarnings:\n" .
- join( "\n", $warnings )
+ implode( "\n", $warnings )
);
}
}
diff --git a/tests/phpunit/includes/specials/SpecialMyLanguageTest.php b/tests/phpunit/includes/specials/SpecialMyLanguageTest.php
index 548b75bec3..89fd1b0696 100644
--- a/tests/phpunit/includes/specials/SpecialMyLanguageTest.php
+++ b/tests/phpunit/includes/specials/SpecialMyLanguageTest.php
@@ -5,7 +5,7 @@
* @covers SpecialMyLanguage
*/
class SpecialMyLanguageTest extends MediaWikiTestCase {
- public function addDBData() {
+ public function addDBDataOnce() {
$titles = [
'Page/Another',
'Page/Another/ru',
diff --git a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
index 1ac5e5992d..0bb0afeec0 100644
--- a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
+++ b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
@@ -32,10 +32,6 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
parent::setUp();
$this->setMwGlobals( [
- 'wgLanguageCode' => 'en',
- 'wgContLang' => Language::factory( 'en' ),
- // User language
- 'wgLang' => Language::factory( 'en' ),
'wgAllowUserJs' => false,
'wgDefaultLanguageVariant' => false,
'wgMetaNamespace' => 'Project',
@@ -57,6 +53,8 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
]
]
] );
+ $this->setUserLang( 'en' );
+ $this->setContentLang( 'en' );
}
/**
diff --git a/tests/phpunit/structure/ApiDocumentationTest.php b/tests/phpunit/structure/ApiDocumentationTest.php
index b9cb6c17e4..542420a9dc 100644
--- a/tests/phpunit/structure/ApiDocumentationTest.php
+++ b/tests/phpunit/structure/ApiDocumentationTest.php
@@ -153,7 +153,7 @@ class ApiDocumentationTest extends MediaWikiTestCase {
foreach ( $globals as $k => $v ) {
$g[] = "$k=" . var_export( $v, 1 );
}
- $k = "Module $path with " . join( ', ', $g );
+ $k = "Module $path with " . implode( ', ', $g );
$ret[$k] = [ $path, $globals ];
}
}
diff --git a/tests/phpunit/suites/ExtensionsTestSuite.php b/tests/phpunit/suites/ExtensionsTestSuite.php
index 723328e2df..0e23fdde82 100644
--- a/tests/phpunit/suites/ExtensionsTestSuite.php
+++ b/tests/phpunit/suites/ExtensionsTestSuite.php
@@ -8,16 +8,14 @@
class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
public function __construct() {
parent::__construct();
- $paths = array();
+ $paths = [];
// Extensions can return a list of files or directories
- Hooks::run( 'UnitTestsList', array( &$paths ) );
+ Hooks::run( 'UnitTestsList', [ &$paths ] );
foreach ( $paths as $path ) {
if ( is_dir( $path ) ) {
// If the path is a directory, search for test cases.
// @since 1.24
- $suffixes = array(
- 'Test.php',
- );
+ $suffixes = [ 'Test.php' ];
$fileIterator = new File_Iterator_Facade();
$matchingFiles = $fileIterator->getFilesAsArray( $path, $suffixes );
$this->addTestFiles( $matchingFiles );
@@ -26,7 +24,7 @@ class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
$this->addTestFile( $path );
}
}
- if ( !count( $paths ) ) {
+ if ( !$paths ) {
$this->addTest( new DummyExtensionsTest( 'testNothing' ) );
}
}
diff --git a/tests/qunit/data/defineCallMwLoaderTestCallback.js b/tests/qunit/data/defineCallMwLoaderTestCallback.js
new file mode 100644
index 0000000000..afd886c334
--- /dev/null
+++ b/tests/qunit/data/defineCallMwLoaderTestCallback.js
@@ -0,0 +1 @@
+module.exports = 'Define worked.';
diff --git a/tests/qunit/data/generateJqueryMsgData.php b/tests/qunit/data/generateJqueryMsgData.php
index 456787c7da..5a96dc3356 100644
--- a/tests/qunit/data/generateJqueryMsgData.php
+++ b/tests/qunit/data/generateJqueryMsgData.php
@@ -110,7 +110,7 @@ class GenerateJqueryMsgData extends Maintenance {
$langKey = $languageCode . '_' . $key;
$messages[$langKey] = $template;
$tests[] = [
- 'name' => $languageCode . ' ' . $key . ' ' . join( ',', $args ),
+ 'name' => $languageCode . ' ' . $key . ' ' . implode( ',', $args ),
'key' => $langKey,
'args' => $args,
'result' => $result,
diff --git a/tests/qunit/data/requireCallMwLoaderTestCallback.js b/tests/qunit/data/requireCallMwLoaderTestCallback.js
new file mode 100644
index 0000000000..8bc087b007
--- /dev/null
+++ b/tests/qunit/data/requireCallMwLoaderTestCallback.js
@@ -0,0 +1,2 @@
+var x = require( 'test.require.define' );
+module.exports = 'Require worked.' + x;
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
index f2865ebb63..4fab90d659 100644
--- a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
+++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
@@ -6,7 +6,7 @@
} ) );
QUnit.test( 'Hello world', function ( assert ) {
- QUnit.expect( 1 );
+ QUnit.expect( 2 );
var api = new mw.Api();
@@ -20,6 +20,16 @@
);
} );
+ api.parse( new mw.Title( 'Earth' ) ).done( function ( html ) {
+ assert.equal( html, 'Earth is a planet.
' );
+ } );
+
+ this.server.respondWith( /action=parse.*&page=Earth/, function ( request ) {
+ request.respond( 200, { 'Content-Type': 'application/json' },
+ '{ "parse": { "text": "Earth is a planet.
" } }'
+ );
+ } );
+
this.server.respond();
} );
}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js
index ce4ea8b147..dd43c553bc 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js
@@ -1127,4 +1127,24 @@
}, /is not loaded/, 'Requesting non-existent modules throws error.' );
} );
+ QUnit.asyncTest( 'mw.loader require in debug mode', 1, function ( assert ) {
+ var path = mw.config.get( 'wgScriptPath' );
+ mw.loader.register( [
+ [ 'test.require.define', '0' ],
+ [ 'test.require.callback', '0', [ 'test.require.define' ] ]
+ ] );
+ mw.loader.implement( 'test.require.callback', [ QUnit.fixurl( path + '/tests/qunit/data/requireCallMwLoaderTestCallback.js' ) ] );
+ mw.loader.implement( 'test.require.define', [ QUnit.fixurl( path + '/tests/qunit/data/defineCallMwLoaderTestCallback.js' ) ] );
+
+ mw.loader.using( 'test.require.callback', function () {
+ QUnit.start();
+ var exported = mw.loader.require( 'test.require.callback' );
+ assert.strictEqual( exported, 'Require worked.Define worked.',
+ 'module.exports worked in debug mode' );
+ }, function () {
+ QUnit.start();
+ assert.ok( false, 'Error callback fired while loader.using "test.require.callback" module' );
+ } );
+ } );
+
}( mediaWiki, jQuery ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js
index 61391d8bc8..f404294215 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js
@@ -60,6 +60,29 @@
'It should default to the window object if no viewport is given' );
} );
+ QUnit.test( 'isElementInViewport with scrolled page', 1, function ( assert ) {
+ var viewport = {
+ top: 2000,
+ left: 0,
+ right: 1000,
+ bottom: 2500
+ },
+ el = $( '
' )
+ .appendTo( '#qunit-fixture' )
+ .width( 20 )
+ .height( 20 )
+ .offset( {
+ top: 2300,
+ left: 20
+ } )
+ .get( 0 );
+ window.scrollTo( viewport.left, viewport.top );
+ assert.ok( mw.viewport.isElementInViewport( el, viewport ),
+ 'It should return true when the element is fully enclosed in the ' +
+ 'viewport even when the page is scrolled down' );
+ window.scrollTo( 0, 0 );
+ } );
+
QUnit.test( 'isElementCloseToViewport', 3, function ( assert ) {
var
viewport = {