* WikiRevision::$fileIsTemp was deprecated.
* WikiRevision::$importer was deprecated.
* WikiRevision::$user was deprecated.
+* Article::getLastPurgeTimestamp(), WikiPage::getLastPurgeTimestamp(), and the
+ WikiPage::PURGE_* constants are deprecated, and the functions will always
+ return false. They were a hack for an issue that has since been fixed.
== Compatibility ==
'Wikimedia\\Rdbms\\FakeResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php',
'Wikimedia\\Rdbms\\Field' => __DIR__ . '/includes/libs/rdbms/field/Field.php',
'Wikimedia\\Rdbms\\IBlob' => __DIR__ . '/includes/libs/rdbms/encasing/IBlob.php',
+ 'Wikimedia\\Rdbms\\IDatabase' => __DIR__ . '/includes/libs/rdbms/database/IDatabase.php',
'Wikimedia\\Rdbms\\ILBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/ILBFactory.php',
'Wikimedia\\Rdbms\\ILoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/ILoadBalancer.php',
'Wikimedia\\Rdbms\\ILoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/ILoadMonitor.php',
+ 'Wikimedia\\Rdbms\\IMaintainableDatabase' => __DIR__ . '/includes/libs/rdbms/database/IMaintainableDatabase.php',
'Wikimedia\\Rdbms\\IResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/IResultWrapper.php',
'Wikimedia\\Rdbms\\LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.php',
'Wikimedia\\Rdbms\\LBFactoryMulti' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactoryMulti.php',
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
class Block {
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* The "CategoryFinder" class takes a list of articles, creates an internal
* representation of all their parent categories (as well as parents of
require_once __DIR__ . '/libs/rdbms/defines.php';
require_once __DIR__ . '/compat/normal/UtfNormalDefines.php';
+use Wikimedia\Rdbms\IDatabase;
+
/**
* @defgroup Constants MediaWiki constants
*/
*/
use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LoggerInterface;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ChronologyProtector;
use Wikimedia\Rdbms\LBFactory;
$n = intval( $jobRunRate );
}
- $runJobsLogger = LoggerFactory::getInstance( 'runJobs' );
+ $logger = LoggerFactory::getInstance( 'runJobs' );
- // Fall back to running the job(s) while the user waits if needed
- if ( !$this->config->get( 'RunJobsAsync' ) ) {
- $runner = new JobRunner( $runJobsLogger );
- $runner->run( [ 'maxJobs' => $n ] );
- return;
- }
-
- // Do not send request if there are probably no jobs
try {
- $group = JobQueueGroup::singleton();
- if ( !$group->queuesHaveJobs( JobQueueGroup::TYPE_DEFAULT ) ) {
- return;
+ if ( $this->config->get( 'RunJobsAsync' ) ) {
+ // Send an HTTP request to the job RPC entry point if possible
+ $invokedWithSuccess = $this->triggerAsyncJobs( $n, $logger );
+ if ( !$invokedWithSuccess ) {
+ // Fall back to blocking on running the job(s)
+ $logger->warning( "Jobs switched to blocking; Special:RunJobs disabled" );
+ $this->triggerSyncJobs( $n, $logger );
+ }
+ } else {
+ $this->triggerSyncJobs( $n, $logger );
}
} catch ( JobQueueError $e ) {
+ // Do not make the site unavailable (T88312)
MWExceptionHandler::logException( $e );
- return; // do not make the site unavailable
+ }
+ }
+
+ /**
+ * @param integer $n Number of jobs to try to run
+ * @param LoggerInterface $runJobsLogger
+ */
+ private function triggerSyncJobs( $n, LoggerInterface $runJobsLogger ) {
+ $runner = new JobRunner( $runJobsLogger );
+ $runner->run( [ 'maxJobs' => $n ] );
+ }
+
+ /**
+ * @param integer $n Number of jobs to try to run
+ * @param LoggerInterface $runJobsLogger
+ * @return bool Success
+ */
+ private function triggerAsyncJobs( $n, LoggerInterface $runJobsLogger ) {
+ // Do not send request if there are probably no jobs
+ $group = JobQueueGroup::singleton();
+ if ( !$group->queuesHaveJobs( JobQueueGroup::TYPE_DEFAULT ) ) {
+ return true;
}
$query = [ 'title' => 'Special:RunJobs',
$runJobsLogger->error( "Failed to start cron API (socket error $errno): $errstr" );
}
- // Fall back to running the job(s) while the user waits if needed
- if ( !$invokedWithSuccess ) {
- $runJobsLogger->warning( "Jobs switched to blocking; Special:RunJobs disabled" );
-
- $runner = new JobRunner( $runJobsLogger );
- $runner->run( [ 'maxJobs' => $n ] );
- }
+ return $invokedWithSuccess;
}
}
* @file
*/
use Wikimedia\Timestamp\TimestampException;
+use Wikimedia\Rdbms\IDatabase;
/**
* Handles the backend logic of merging the histories of two
*
* @file
*/
+
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* List for revision table items for a single page
/** @var ResultWrapper|bool */
protected $res;
- /** @var bool|object */
+ /** @var bool|Revision */
protected $current;
/**
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Static accessor class for site_stats and related things
*/
*
* @file
*/
+
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\Interwiki\InterwikiLookup;
use MediaWiki\MediaWikiServices;
<?php
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Linker\LinkTarget;
use Wikimedia\Assert\Assert;
use Wikimedia\Rdbms\LoadBalancer;
<?php
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Extension mechanism for WatchedItemQueryService
<?php
+use Wikimedia\Rdbms\IDatabase;
use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
}
public function onSubmit( $data ) {
- return $this->page->doPurge( WikiPage::PURGE_ALL );
+ return $this->page->doPurge();
}
public function show() {
$touched = null;
}
- // If a page was purged on HTTP GET, relect that timestamp to avoid sending 304s
- $touched = max( $touched, $this->page->getLastPurgeTimestamp() );
-
// Send HTTP 304 if the IMS matches or otherwise set expiry/last-modified headers
if ( $touched && $this->getOutput()->checkLastModified( $touched ) ) {
wfDebug( __METHOD__ . ": done 304\n" );
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* This abstract class implements many basic API functions, and is the base of
* all API classes.
*/
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* This class contains a list of pages that the client has requested.
$page = WikiPage::factory( $title );
if ( !$user->pingLimiter( 'purge' ) ) {
// Directly purge and skip the UI part of purge()
- $page->doPurge( WikiPage::PURGE_ALL );
+ $page->doPurge();
$r['purged'] = true;
} else {
$this->addWarning( 'apierror-ratelimited' );
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Query module to enumerate all available pages.
*
$db = $this->getDB();
$params = $this->extractRequestParams();
+ $userId = !is_null( $params['user'] ) ? User::idFromName( $params['user'] ) : null;
// Table and return fields
$this->addTables( 'image' );
// Image filters
if ( !is_null( $params['user'] ) ) {
- $this->addWhereFld( 'img_user_text', $params['user'] );
+ if ( $userId ) {
+ $this->addWhereFld( 'img_user', $userId );
+ } else {
+ $this->addWhereFld( 'img_user_text', $params['user'] );
+ }
}
if ( $params['filterbots'] != 'all' ) {
$this->addTables( 'user_groups' );
if ( $params['sort'] == 'timestamp' ) {
$this->addOption( 'ORDER BY', 'img_timestamp' . $sortFlag );
if ( !is_null( $params['user'] ) ) {
- $this->addOption( 'USE INDEX', [ 'image' => 'img_usertext_timestamp' ] );
+ if ( $userId ) {
+ $this->addOption( 'USE INDEX', [ 'image' => 'img_user_timestamp' ] );
+ } else {
+ $this->addOption( 'USE INDEX', [ 'image' => 'img_usertext_timestamp' ] );
+ }
} else {
$this->addOption( 'USE INDEX', [ 'image' => 'img_timestamp' ] );
}
use Wikimedia\Rdbms\ResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Class for fetching backlink lists, approximate backlink counts and
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Class representing a list of titles
* @file
* @ingroup Cache
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* LCStore implementation which uses the standard DB functions to store data.
* This will work on any MediaWiki installation.
* @author Matthew Flaschen
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* An individual filter in a boolean group
*
* @author Matthew Flaschen
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Represents a filter group with multiple string options. They are passed to the server as
* a single form parameter separated by a delimiter. The parameter name is the
$className = 'ChangeTagsLogList';
break;
default:
- throw new Exception( "Class $className requested, but does not exist" );
+ throw new Exception( "Class $typeName requested, but does not exist" );
}
+
return new $className( $context, $title, $ids );
}
* @ingroup Change tagging
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Stores a list of taggable log entries.
* @since 1.25
* @ingroup Change tagging
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Stores a list of taggable revisions.
* @since 1.25
* @ingroup Database
*/
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IMaintainableDatabase;
class CloneDatabase {
/** @var string Table prefix for cloning */
<?php
+use Wikimedia\Rdbms\IDatabase;
+
/**
* The oci8 extension is fairly weak and doesn't support oci_num_rows, among
* other things. We use a wrapper class to handle that and other
<?php
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Deferrable Update for closure/callback updates via IDatabase::doAtomicSection()
* @since 1.27
<?php
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Deferrable Update for closure/callback updates that should use auto-commit mode
* @since 1.28
*
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\LBFactory;
use Wikimedia\Rdbms\LoadBalancer;
*/
use MediaWiki\MediaWikiServices;
use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\IDatabase;
/**
* Update object handling the cleanup of links tables after a page was deleted.
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
use Wikimedia\ScopedCallback;
<?php
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Deferrable Update for closure/callback
*/
*/
use MediaWiki\MediaWikiServices;
use Wikimedia\Assert\Assert;
+use Wikimedia\Rdbms\IDatabase;
/**
* Class for handling updates to the site_stats table
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* @deprecated Since 1.28 Use DataUpdate directly, injecting the database
*/
<?php
use Psr\Log\LoggerInterface;
+use Wikimedia\Rdbms\IDatabase;
/**
* Class for fixing stale WANObjectCache keys using a purge event source
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* @ingroup SpecialPage Dump
*/
use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\IDatabase;
/**
* DB accessable external objects.
*/
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
/**
* Version of FileJournal that logs to a DB table
<?php
+
+use Wikimedia\Rdbms\IDatabase;
+
/**
* MySQL version of DBLockManager that supports shared locks.
*
* @ingroup FileRepo
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* A foreign repository with an accessible MediaWiki database
*
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A repository that stores files in the local filesystem and registers them
*/
use \MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\IDatabase;
/**
* Class to represent a local file in the wiki's own database
}
}
- if ( $foundRelativeURI ) {
- if ( $domain ) {
- return $domain . $locations[$countLocations - 1];
- } else {
- $url = parse_url( $this->url );
- if ( isset( $url['host'] ) ) {
- return $url['scheme'] . '://' . $url['host'] .
- $locations[$countLocations - 1];
- }
- }
- } else {
+ if ( !$foundRelativeURI ) {
return $locations[$countLocations - 1];
}
+ if ( $domain ) {
+ return $domain . $locations[$countLocations - 1];
+ }
+ $url = parse_url( $this->url );
+ if ( isset( $url['host'] ) ) {
+ return $url['scheme'] . '://' . $url['host'] .
+ $locations[$countLocations - 1];
+ }
}
return $this->url;
* @ingroup Deployment
*/
use Wikimedia\Rdbms\LBFactorySingle;
+use Wikimedia\Rdbms\IDatabase;
/**
* Base class for DBMS-specific installation helper classes.
* @file
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
require_once __DIR__ . '/../../maintenance/Maintenance.php';
"config-db-install-help": "Merkañ anv an implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.",
"config-db-account-lock": "Implijout ar memes anv implijer ha ger-tremen e-kerzh oberiadurioù boutin",
"config-db-wiki-account": "Kont implijer evit oberiadurioù boutin",
+ "config-db-wiki-help": "Merkañ an anv-implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad oberiadurioù normal ar wiki.\nMa n'eus ket eus ar gont ha ma'z eus gwirioù a-walc'h gant ar gont staliañ, e vo krouet ar gont implijer-mañ gant al live gwirioù rekis izelañ evit gallout lakaat ar wiki da vont en-dro.",
"config-db-prefix": "Rakrann taolennoù an diaz roadennoù :",
+ "config-db-prefix-help": "Mard eo ret deoc'h rannañ un diaz roadennoù gant meur a wiki, pe etre MediaWiki hag un arload benak all e c'hallit dibab ouzhpennañ ur rakger da holl anvioù an taolennoù kuit na vije tabutoù.\nArabat ober gant esaouennoù.\n\nPeurliesañ e vez laosket goullo ar vaezienn-mañ.",
"config-mysql-old": "Rekis eo MySQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
"config-db-port": "Porzh an diaz roadennoù :",
"config-db-schema": "Brastres evit MediaWiki",
"config-db-schema-help": "Peurliesañ e vo digudenn ar chema-mañ.\nArabat cheñch anezho ma n'hoc'h eus ket ezhomm d'en ober.",
"config-pg-test-error": "N'haller ket kevreañ ouzh an diaz-titouroù '''$1''' : $2",
"config-sqlite-dir": "Kavlec'h roadennoù SQLite :",
+ "config-sqlite-dir-help": "Stokañ a ra SQLite an holl roadennoù en ur restr nemetken.\n\nE-pad ar staliañ, rankout a ra ar servijer web gallout skrivañ er c'havlec'h pourchaset ganeoc'h.\n\nNe zlefe <strong>ket</strong> bezañ tizhadus dre ar web; setu perak ne lakaomp ket anezhañ el lec'h m'emañ ho restroù PHP.\n\nSkivañ a raio ar stalier ur restr <code>.htaccess</code> war un dro gantañ met ma c'hoarvez ur fazi e c'hallfe unan bennak tapout krog en ho roadennoù.\nKement-se a sell ouzh ar roadennoù implijer (chomlec'hioù postel, gerioù-tremen hachet) hag ouzh an adweladennoù diverket ha takadoù gwarzeet all eus ar wiki.\n\nEn em soñjit ha ne vefe ket gwelloc'h lakaat an diaz roadennoù en un tu bennak all, da skouer e <code>/var/lib/mediawiki/yourwiki</code>.",
"config-oracle-def-ts": "Esaouenn stokañ (\"tablespace\") dre ziouer :",
"config-oracle-temp-ts": "Esaouenn stokañ (''tablespace'') da c'hortoz :",
"config-type-mysql": "MySQL (pe kenglotus)",
"config-type-oracle": "Oracle",
"config-type-mssql": "Microsoft SQL Server",
"config-support-info": "Skoret eo ar reizhiadoù diaz titouroù da-heul gant MediaWiki :\n\n$1\n\nMa ne welit ket amañ dindan ar reizhiad diaz titouroù a fell deoc'h ober ganti, heuilhit an titouroù a-us (s.o. al liammoù) evit gweredekaat ar skorañ.",
- "config-dbsupport-mysql": "* $1 eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ ([http://www.php.net/manual/en/mysql.installation.php penaos kempunañ PHP gant skor MySQL])",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ. Mont a ra MediaWiki en-dro gant [{{int:version-db-mariadb-url}} MariaDB] ha [{{int:version-db-percona-url}} Percona Server] ivez, kenglotus o-daou gant MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Penaos kempunañ PHP gant skor MySQL])",
"config-dbsupport-postgres": "* Ur reizhiad diaz titouroù brudet ha digor eo $1. Gallout a ra ober evit MySQL ([http://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL]). Gallout a ra bezañ un nebeud drein bihan enni ha n'eo ket erbedet he implijout en un endro produiñ.",
"config-dbsupport-sqlite": "* $1 zo ur reizhiad diaz titouroù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)",
"config-dbsupport-oracle": "* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])",
* @file
* @author Aaron Schulz
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
use Wikimedia\ScopedCallback;
*
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
class PurgeJobUtils {
* @ingroup LockManager
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Version of LockManager based on using named/row DB locks.
*
use Database;
use DBConnRef;
-use IDatabase;
use InvalidArgumentException;
/**
use Wikimedia\Rdbms\DatabaseDomain;
use Wikimedia\Rdbms\ILoadBalancer;
use Wikimedia\Rdbms\DBMasterPos;
+use Wikimedia\Rdbms\IDatabase;
/**
* Helper class to handle automatically marking connections as reusable (via RAII pattern)
use Wikimedia\Rdbms\DBMasterPos;
use Wikimedia\Rdbms\Blob;
use Wikimedia\Timestamp\ConvertibleTimestamp;
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
/**
* Relational database abstraction object
}
$class = 'Database' . ucfirst( $driver );
- if ( class_exists( $class ) && is_subclass_of( $class, 'IDatabase' ) ) {
+ if ( class_exists( $class ) && is_subclass_of( $class, IDatabase::class ) ) {
// Resolve some defaults for b/c
$p['host'] = isset( $p['host'] ) ? $p['host'] : false;
$p['user'] = isset( $p['user'] ) ? $p['user'] : false;
* @file
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
+
use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\LikeMatch;
-use Wikimedia\Rdbms\DBMasterPos;
-use Wikimedia\Rdbms\Field;
-use Wikimedia\Rdbms\IResultWrapper;
+use DBError;
+use DBConnectionError;
+use DBUnexpectedError;
+use DBQueryError;
+use Exception;
+use RuntimeException;
+use UnexpectedValueException;
+use stdClass;
/**
* Basic database interface for live and lazy-loaded relation database handles
*/
public function setTableAliases( array $aliases );
}
+
+class_alias( 'Wikimedia\Rdbms\IDatabase', 'IDatabase' );
* @file
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
+
+use Exception;
+use RuntimeException;
+use DBUnexpectedError;
/**
* Advanced database interface for IDatabase handles that include maintenance methods
$oldName, $newName, $temporary = false, $fname = __METHOD__
);
}
+
+class_alias( 'Wikimedia\Rdbms\IMaintainableDatabase', 'IMaintainableDatabase' );
<?php
+
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
/**
* Helper class to handle automatically marking connections as reusable (via RAII pattern)
* as well handling deferring the actual network connection until the handle is used
namespace Wikimedia\Rdbms;
-use IDatabase;
use stdClass;
use RuntimeException;
<?php
use Wikimedia\Rdbms\ILoadBalancer;
+use Wikimedia\Rdbms\IDatabase;
/**@{
* Database related constants
* @file
* @ingroup Database
*/
+use Wikimedia\Rdbms\IDatabase;
/**
* @ingroup Database
* @file
* @ingroup Database
*/
+use Wikimedia\Rdbms\IDatabase;
/**
* Database error base class
* @file
* @ingroup Database
*/
+use Wikimedia\Rdbms\IDatabase;
/**
* Base class for the more common types of database errors. These are known to occur
* @file
* @ingroup Database
*/
+use Wikimedia\Rdbms\IDatabase;
/**
* @ingroup Database
use WANObjectCache;
use Exception;
use RuntimeException;
-use IDatabase;
use DBTransactionError;
use DBReplicationWaitError;
'errorLogger' => $this->errorLogger,
'hostname' => $this->hostname,
'cliMode' => $this->cliMode,
- 'agent' => $this->agent
+ 'agent' => $this->agent,
+ 'chronologyProtector' => $this->getChronologyProtector()
];
}
namespace Wikimedia\Rdbms;
-use IDatabase;
use InvalidArgumentException;
/**
public function getMainLB( $domain = false ) {
$section = $this->getSectionForDomain( $domain );
if ( !isset( $this->mainLBs[$section] ) ) {
- $lb = $this->newMainLB( $domain );
- $this->getChronologyProtector()->initLB( $lb );
- $this->mainLBs[$section] = $lb;
+ $this->mainLBs[$section] = $this->newMainLB( $domain );
}
return $this->mainLBs[$section];
public function getExternalLB( $cluster ) {
if ( !isset( $this->extLBs[$cluster] ) ) {
$this->extLBs[$cluster] = $this->newExternalLB( $cluster );
- $this->getChronologyProtector()->initLB( $this->extLBs[$cluster] );
}
return $this->extLBs[$cluster];
public function getMainLB( $domain = false ) {
if ( !isset( $this->mainLB ) ) {
$this->mainLB = $this->newMainLB( $domain );
- $this->getChronologyProtector()->initLB( $this->mainLB );
}
return $this->mainLB;
public function getExternalLB( $cluster ) {
if ( !isset( $this->extLBs[$cluster] ) ) {
$this->extLBs[$cluster] = $this->newExternalLB( $cluster );
- $this->getChronologyProtector()->initLB( $this->extLBs[$cluster] );
}
return $this->extLBs[$cluster];
namespace Wikimedia\Rdbms;
-use IDatabase;
use InvalidArgumentException;
use BadMethodCallException;
*/
namespace Wikimedia\Rdbms;
-use IDatabase;
use Database;
use DBConnRef;
use MaintainableDBConnRef;
* - srvCache : BagOStuff object for server cache [optional]
* - memCache : BagOStuff object for cluster memory cache [optional]
* - wanCache : WANObjectCache object [optional]
+ * - chronologyProtector: ChronologyProtector object [optional]
* - hostname : The name of the current server [optional]
* - cliMode: Whether the execution context is a CLI script. [optional]
* - profiler : Class name or instance with profileIn()/profileOut() methods. [optional]
* If a DB_REPLICA connection has been opened already, then wait immediately.
* Otherwise sets a variable telling it to wait if such a connection is opened.
*
- * @param DBMasterPos $pos
+ * @param DBMasterPos|bool $pos Master position or false
*/
public function waitFor( $pos );
*
* This can be used a faster proxy for waitForAll()
*
- * @param DBMasterPos $pos
+ * @param DBMasterPos|bool $pos Master position or false
* @param int $timeout Max seconds to wait; default is mWaitTimeout
* @return bool Success (able to connect and no timeouts reached)
*/
/**
* Set the master wait position and wait for ALL replica DBs to catch up to it
*
- * @param DBMasterPos $pos
+ * @param DBMasterPos|bool $pos Master position or false
* @param int $timeout Max seconds to wait; default is mWaitTimeout
* @return bool Success (able to connect and no timeouts reached)
*/
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Wikimedia\ScopedCallback;
-use IDatabase;
use Database;
use DBConnRef;
use MaintainableDBConnRef;
/** @var ILoadMonitor */
private $loadMonitor;
+ /** @var ChronologyProtector|null */
+ private $chronProt;
/** @var BagOStuff */
private $srvCache;
/** @var BagOStuff */
/** @var boolean */
private $disabled = false;
+ /** @var boolean */
+ private $chronProtInitialized = false;
/** @var integer Warn when this many connection are held */
const CONN_HELD_WARN_THRESHOLD = 10;
: ( gethostname() ?: 'unknown' );
$this->cliMode = isset( $params['cliMode'] ) ? $params['cliMode'] : PHP_SAPI === 'cli';
$this->agent = isset( $params['agent'] ) ? $params['agent'] : '';
+
+ if ( isset( $params['chronologyProtector'] ) ) {
+ $this->chronProt = $params['chronologyProtector'];
+ }
}
/**
return $i;
}
- /**
- * @param DBMasterPos|false $pos
- */
public function waitFor( $pos ) {
+ $oldPos = $this->mWaitForPos;
$this->mWaitForPos = $pos;
- $i = $this->mReadIndex;
+ // If a generic reader connection was already established, then wait now
+ $i = $this->mReadIndex;
if ( $i > 0 ) {
if ( !$this->doWait( $i ) ) {
$this->laggedReplicaMode = true;
}
}
+
+ // Restore the older position if it was higher
+ $this->setWaitForPositionIfHigher( $oldPos );
}
public function waitForOne( $pos, $timeout = null ) {
+ $oldPos = $this->mWaitForPos;
$this->mWaitForPos = $pos;
$i = $this->mReadIndex;
$ok = true; // no applicable loads
}
+ // Restore the older position if it was higher
+ $this->setWaitForPositionIfHigher( $oldPos );
+
return $ok;
}
public function waitForAll( $pos, $timeout = null ) {
+ $oldPos = $this->mWaitForPos;
$this->mWaitForPos = $pos;
$serverCount = count( $this->mServers );
}
}
+ // Restore the older position if it was higher
+ $this->setWaitForPositionIfHigher( $oldPos );
+
return $ok;
}
+ /**
+ * @param DBMasterPos|bool $pos
+ */
+ private function setWaitForPositionIfHigher( $pos ) {
+ if ( !$pos ) {
+ return;
+ }
+
+ if ( !$this->mWaitForPos || $pos->hasReached( $this->mWaitForPos ) ) {
+ $this->mWaitForPos = $pos;
+ }
+ }
+
/**
* @param int $i
* @return IDatabase|bool
$domain = false; // local connection requested
}
+ if ( !$this->chronProtInitialized && $this->chronProt ) {
+ $this->connLogger->debug( __METHOD__ . ': calling initLB() before first connection.' );
+ // Load CP positions before connecting so that doWait() triggers later if needed
+ $this->chronProtInitialized = true;
+ $this->chronProt->initLB( $this );
+ }
+
if ( $domain !== false ) {
$conn = $this->openForeignConnection( $i, $domain );
} elseif ( isset( $this->mConns['local'][$i][0] ) ) {
namespace Wikimedia\Rdbms;
-use IDatabase;
use InvalidArgumentException;
/**
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Wikimedia\ScopedCallback;
-use IDatabase;
use BagOStuff;
/**
namespace Wikimedia\Rdbms;
-use IDatabase;
use BagOStuff;
/**
* @since 1.19
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Interface for log entries. Every log entry has these methods.
*
*/
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
class LogEventsList extends ContextSource {
const NO_ACTION_LINK = 1;
* @ingroup Cache
*/
+use Wikimedia\Rdbms\IDatabase;
use \MediaWiki\MediaWikiServices;
use \Wikimedia\WaitConditionLoop;
use \Wikimedia\Rdbms\TransactionProfiler;
/**
* Call to WikiPage function for backwards compatibility.
* @see WikiPage::doPurge
+ * @note In 1.28 (and only 1.28), this took a $flags parameter that
+ * controlled how much purging was done.
*/
- public function doPurge( $flags = WikiPage::PURGE_ALL ) {
- return $this->mPage->doPurge( $flags );
+ public function doPurge() {
+ return $this->mPage->doPurge();
}
/**
* Call to WikiPage function for backwards compatibility.
* @see WikiPage::getLastPurgeTimestamp
+ * @deprecated since 1.29
*/
public function getLastPurgeTimestamp() {
+ wfDeprecated( __METHOD__, '1.29' );
return $this->mPage->getLastPurgeTimestamp();
}
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Used to show archived pages and eventually restore them.
return $this->mDupes;
}
- public function doPurge( $flags = self::PURGE_ALL ) {
+ /**
+ * Override handling of action=purge
+ * @return bool
+ */
+ public function doPurge() {
$this->loadFile();
-
if ( $this->mFile->exists() ) {
wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" );
DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->mTitle, 'imagelinks' ) );
// Purge redirect cache
$this->mRepo->invalidateImageRedirect( $this->mTitle );
}
-
- return parent::doPurge( $flags );
+ return parent::doPurge();
}
/**
use \MediaWiki\Logger\LoggerFactory;
use \MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Class representing a MediaWiki article and history.
*/
protected $mLinksUpdated = '19700101000000';
- const PURGE_CDN_CACHE = 1; // purge CDN cache for page variant URLs
- const PURGE_CLUSTER_PCACHE = 2; // purge parser cache in the local datacenter
- const PURGE_GLOBAL_PCACHE = 4; // set page_touched to clear parser cache in all datacenters
+ /** @deprecated since 1.29. Added in 1.28 for partial purging, no longer used. */
+ const PURGE_CDN_CACHE = 1;
+ const PURGE_CLUSTER_PCACHE = 2;
+ const PURGE_GLOBAL_PCACHE = 4;
const PURGE_ALL = 7;
/**
/**
* Perform the actions of a page purging
- * @param integer $flags Bitfield of WikiPage::PURGE_* constants
* @return bool
+ * @note In 1.28 (and only 1.28), this took a $flags parameter that
+ * controlled how much purging was done.
*/
- public function doPurge( $flags = self::PURGE_ALL ) {
+ public function doPurge() {
// Avoid PHP 7.1 warning of passing $this by reference
$wikiPage = $this;
return false;
}
- if ( ( $flags & self::PURGE_GLOBAL_PCACHE ) == self::PURGE_GLOBAL_PCACHE ) {
- // Set page_touched in the database to invalidate all DC caches
- $this->mTitle->invalidateCache();
- } elseif ( ( $flags & self::PURGE_CLUSTER_PCACHE ) == self::PURGE_CLUSTER_PCACHE ) {
- // Delete the parser options key in the local cluster to invalidate the DC cache
- ParserCache::singleton()->deleteOptionsKey( $this );
- // Avoid sending HTTP 304s in ViewAction to the client who just issued the purge
- $cache = ObjectCache::getLocalClusterInstance();
- $cache->set(
- $cache->makeKey( 'page', 'last-dc-purge', $this->getId() ),
- wfTimestamp( TS_MW ),
- $cache::TTL_HOUR
- );
- }
+ $this->mTitle->invalidateCache();
- if ( ( $flags & self::PURGE_CDN_CACHE ) == self::PURGE_CDN_CACHE ) {
- // Clear any HTML file cache
- HTMLFileCache::clearFileCache( $this->getTitle() );
- // Send purge after any page_touched above update was committed
- DeferredUpdates::addUpdate(
- new CdnCacheUpdate( $this->mTitle->getCdnUrls() ),
- DeferredUpdates::PRESEND
- );
- }
+ // Clear file cache
+ HTMLFileCache::clearFileCache( $this->getTitle() );
+ // Send purge after above page_touched update was committed
+ DeferredUpdates::addUpdate(
+ new CdnCacheUpdate( $this->mTitle->getCdnUrls() ),
+ DeferredUpdates::PRESEND
+ );
if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
$messageCache = MessageCache::singleton();
*
* @return string|bool TS_MW timestamp or false
* @since 1.28
+ * @deprecated since 1.29. It will always return false.
*/
public function getLastPurgeTimestamp() {
- $cache = ObjectCache::getLocalClusterInstance();
-
- return $cache->get( $cache->makeKey( 'page', 'last-dc-purge', $this->getId() ) );
+ wfDeprecated( __METHOD__, '1.29' );
+ return false;
}
/**
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* IndexPager is an efficient pager which uses a (roughly unique) index in the
class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
- /* Methods */
-
/**
* @param ResourceLoaderContext $context
* @return array
return false;
}
- /**
- * @param ResourceLoaderContext $context
- * @return string: Hash
- */
- public function getModifiedHash( ResourceLoaderContext $context ) {
- $logo = $this->getConfig()->get( 'Logo' );
- $logoHD = $this->getConfig()->get( 'LogoHD' );
- return md5( parent::getModifiedHash( $context ) . $logo . json_encode( $logoHD ) );
+ public function getDefinitionSummary( ResourceLoaderContext $context ) {
+ $summary = parent::getDefinitionSummary( $context );
+ $summary[] = [
+ 'logo' => $this->getConfig()->get( 'Logo' ),
+ 'logoHD' => $this->getConfig()->get( 'LogoHD' ),
+ ];
+ return $summary;
}
}
* @author Roan Kattouw
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Abstraction for ResourceLoader modules which pull from wiki pages
*
* @ingroup RevisionDelete
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* List for archive table items, i.e. revisions deleted via action=delete
*/
* @ingroup RevisionDelete
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* List for filearchive table items
*/
* @ingroup RevisionDelete
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Item class for an oldimage table row
*/
* @ingroup RevisionDelete
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* List for oldimage table items
*/
* @ingroup RevisionDelete
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* List for logging table items
*/
*/
use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* List for revision table items
* @ingroup RevisionDelete
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Backend functions for suppressing and unsuppressing all references to a given user,
* used when blocking with HideUser enabled. This was spun out of SpecialBlockip.php
* @ingroup Search
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Base search engine base class for database-backed searches
* @ingroup Search
<?php
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Factory class for SearchEngine.
* Allows to create engine of the specific type.
*/
use MediaWiki\Logger\LoggerFactory;
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Special page which uses a ChangesList to show query results.
&$query_options, &$join_conds ) {
$user = $ctx->getUser();
- if ( $user->getId() ) {
- $conds[] = 'rc_user != ' . $dbr->addQuotes( $user->getId() );
- } else {
- $conds[] = 'rc_user_text != ' . $dbr->addQuotes( $user->getName() );
- }
+ $conds[] = 'rc_user_text != ' . $dbr->addQuotes( $user->getName() );
},
'cssClassSuffix' => 'self',
'isRowApplicableCallable' => function ( $ctx, $rc ) {
&$query_options, &$join_conds ) {
$user = $ctx->getUser();
- if ( $user->getId() ) {
- $conds[] = 'rc_user = ' . $dbr->addQuotes( $user->getId() );
- } else {
- $conds[] = 'rc_user_text = ' . $dbr->addQuotes( $user->getName() );
- }
+ $conds[] = 'rc_user_text = ' . $dbr->addQuotes( $user->getName() );
},
'cssClassSuffix' => 'others',
'isRowApplicableCallable' => function ( $ctx, $rc ) {
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Variant of QueryPage which uses a gallery to output results, thus
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Variant of QueryPage which formats the result as a simple link to the page
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* This is a class for doing query pages; since they're almost all the same,
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Class definition for a wanted query page like
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A special page listing redirects to non existent page. Those should be
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A special page listing redirects to redirecting page.
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Special:LinkSearch to search the external-links table.
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Special:ListDuplicatedFiles Lists all files where the current version is
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Special:Listredirects - Lists all the redirects on the wiki.
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* @ingroup SpecialPage
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A special page that list pages that have highest category count
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A special page that listed pages that have highest interwiki count
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A special page to show pages ordered by the number of pages linking to them.
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A querypage to show categories ordered in descending order by the pages in them
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Special page lists templates with a large number of
$opts = new FormOptions();
$opts->add( 'like', '' );
+ $opts->add( 'user', '' );
$opts->add( 'showbots', false );
$opts->add( 'hidepatrolled', false );
$opts->add( 'limit', 50 );
'name' => 'like',
],
+ 'user' => [
+ 'type' => 'text',
+ 'label-message' => 'newimages-user',
+ 'name' => 'user',
+ ],
+
'showbots' => [
'type' => 'check',
'label-message' => 'newimages-showbots',
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* SpecialShortpages extends QueryPage. It is used to return the shortest
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A special page that displays a list of pages that are not on anyones watchlist.
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* A special page that lists last changes made to the wiki,
* @todo Use some variant of Pager or something; the pagination here is lousy.
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Implements Special:Whatlinkshere
*
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
class ContribsPager extends ReverseChronologicalPager {
}
$sortable = [ 'img_timestamp', 'img_name', 'img_size' ];
/* For reference, the indicies we can use for sorting are:
- * On the image table: img_usertext_timestamp, img_size, img_timestamp
+ * On the image table: img_user_timestamp, img_usertext_timestamp,
+ * img_size, img_timestamp
* On oldimage: oi_usertext_timestamp, oi_name_timestamp
*
* In particular that means we cannot sort by timestamp when not filtering
$fields = [ 'img_name', 'img_user', 'img_timestamp' ];
$options = [];
+ $user = $opts->getValue( 'user' );
+ if ( $user !== '' ) {
+ $userId = User::idFromName( $user );
+ if ( $userId ) {
+ $conds['img_user'] = $userId;
+ } else {
+ $conds['img_user_text'] = $user;
+ }
+ }
+
if ( !$opts->getValue( 'showbots' ) ) {
$groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Represents a "user group membership" -- a specific instance of a user belonging
* to a group. For example, the fact that user Mary belongs to the sysop group is a
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Cut-down copy of User interface for local-interwiki-database
* user rights manipulation.
<?php
+
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Allows iterating a large number of rows in batches transparently.
* By default when iterated over returns the full query result as an
* @file
* @ingroup Maintenance
*/
+use Wikimedia\Rdbms\IDatabase;
use \MediaWiki\MediaWikiServices;
class BatchRowWriter {
"isredirect": "masinhikan ke kweskiticohemikok",
"isimage": "e ici tapitik masinahikaniwoc",
"whatlinkshere-links": "← ka patiki",
+ "whatlinkshere-hideredirs": "$1 itapihikina",
+ "whatlinkshere-hidetrans": "$1 pitcititawina",
"whatlinkshere-hidelinks": "$1 ka patiki",
+ "whatlinkshere-filters": "cikopesinikan",
"whatlinkshere-submit": "Tapowata",
"ipblocklist-submit": "Nantokaskeritcikatek",
"blocklink": "nokipita",
"Elias Ahmmad"
]
},
- "tog-underline": "সà¦\82যà§\8bà¦\97à¦\97à§\81লির নিচে দাগ দেখানো হোক:",
+ "tog-underline": "সà¦\82যà§\8bà¦\97à§\87র নিচে দাগ দেখানো হোক:",
"tog-hideminor": "অনুল্লেখ্য সম্পাদনাগুলি সাম্প্রতিক পরিবর্তন পাতায় লুকিয়ে রাখা হোক",
"tog-hidepatrolled": "পরীক্ষিত সম্পাদনাগুলি সাম্প্রতিক পরিবর্তন পাতায় লুকিয়ে রাখা হোক",
"tog-newpageshidepatrolled": "পরীক্ষিত পাতাগুলিকে নতুন পাতার তালিকায় লুকিয়ে রাখা হোক",
"tog-watchlisthideanons": "বেনামী ব্যবহারকারীদের সম্পাদনাগুলি নজরতালিকায় আড়ালে রাখা হোক",
"tog-watchlisthidepatrolled": "পরীক্ষিত সম্পাদনাগুলি নজরতালিকায় লুকিয়ে রাখা হোক",
"tog-watchlisthidecategorization": "পাতার শ্রেণীবদ্ধকরণ লুকিয়ে রাখা হোক",
- "tog-ccmeonemails": "à¦\85নà§\8dয বà§\8dযবহারà¦\95ারà§\80র à¦\95াà¦\9bà§\87 à¦\86মার পাঠানà§\8b à¦\87মà§\87à¦\87লà§\87র à¦\8fà¦\95à¦\9fি à¦\85নà§\81লিপি আমাকে পাঠানো হোক",
+ "tog-ccmeonemails": "à¦\85নà§\8dয বà§\8dযবহারà¦\95ারà§\80র à¦\95াà¦\9bà§\87 à¦\86মার পাঠানà§\8b à¦\87মà§\87à¦\87লà§\87র à¦\8fà¦\95à¦\9fি পà§\8dরতিলিপি আমাকে পাঠানো হোক",
"tog-diffonly": "পার্থক্যের নিচে পাতার বিষয়বস্তু না দেখানো হোক",
"tog-showhiddencats": "লুকায়িত বিষয়শ্রেণীসমূহ দেখানো হোক",
"tog-norollbackdiff": "রোলব্যাকের পরে সংস্করণগুলির পার্থক্য না দেখানো হোক",
"subcategories": "উপবিষয়শ্রেণীসমূহ",
"category-media-header": "\"$1\" বিষয়শ্রেণীতে অন্তর্ভুক্ত মিডিয়া ফাইলগুলি",
"category-empty": "''এই বিষয়শ্রণীতে বর্তমানে কোন পাতা বা মিডিয়া ফাইল নেই।''",
- "hidden-categories": "{{PLURAL:$1|à¦\9fি লà§\81à¦\95ায়িত বিষয়শà§\8dরà§\87ণà§\80}}",
+ "hidden-categories": "{{PLURAL:$1|লুকায়িত বিষয়শ্রেণী}}",
"hidden-category-category": "লুকায়িত বিষয়শ্রেণীসমূহ",
"category-subcat-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবলমাত্র নিচের উপবিষয়শ্রেণীটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি উপবিষয়শ্রেণীর মধ্যে {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী}} নিচে দেখানো হয়েছে।}}",
"category-subcat-count-limited": "এই বিষয়শ্রেণীতে নিচের {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী আছে}}।",
"confirmable-confirm": "{{GENDER:$1|আপনি}} কি নিশ্চিত?",
"confirmable-yes": "হ্যাঁ",
"confirmable-no": "না",
- "thisisdeleted": "$1 দà§\87à¦\96ানà§\8b বা পà§\81নà¦\83সà§\83ষà§\8dà¦\9fি à¦\95রা হà§\8bà¦\95?",
- "viewdeleted": "$1 দà§\87à¦\96ানà§\8b হà§\8bà¦\95?",
+ "thisisdeleted": "$1 দà§\87à¦\96বà§\87ন বা পà§\81নরà§\81দà§\8dধার à¦\95রবà§\87ন?",
+ "viewdeleted": "$1 দà§\87à¦\96বà§\87ন?",
"restorelink": "{{PLURAL:$1|একটি মুছে ফেলা সম্পাদনা|$1টি মুছে ফেলা সম্পাদনা}}",
"feedlinks": "ফিড:",
"feed-invalid": "গ্রাহক ফিডের ধরন অবৈধ।",
"page-atom-feed": "\"$1\" অ্যাটম ফিড",
"feed-atom": "অ্যাটম",
"red-link-title": "$1 (পাতার অস্তিত্ব নেই)",
- "sort-descending": "উল্টো বর্ণক্রমে সাজানো হোক",
- "sort-ascending": "বর্ণানুক্রমে সাজানো হোক",
+ "sort-descending": "উল্টো বর্ণক্রমে সাজান",
+ "sort-ascending": "বর্ণানুক্রমে সাজান",
"nstab-main": "পাতা",
"nstab-user": "ব্যবহারকারীর পাতা",
"nstab-media": "মিডিয়া পাতা",
"databaseerror-error": "ত্রুটি: $1",
"transaction-duration-limit-exceeded": "দীর্ঘ পুনঃসৃষ্টি বিলম্ব এড়ানোর জন্য এই ট্রানজাকশনটি বাতিল করা হল, কারণ লিখনের স্থায়িত্ব ($1) $2 সেকেন্ড সীমাটিকে অতিক্রম করে গিয়েছিল। \nযদি আপনি অনেকগুলি আইটেম একসাথে পরিবর্তন করতে চান, তাহলে একাধিক ক্ষুদ্রতর অপারেশন সম্পন্ন করার চেষ্টা করুন।",
"laggedslavemode": "<strong>সতর্ক বার্তা:</strong> পাতাটি সম্ভবত সম্প্রতি হালনাগাদ করা হয়নি।",
- "readonly": "ডাà¦\9fাবà§\87à¦\9c তালাবদ্ধ",
- "enterlockreason": "তালাবদ্ধ করার কারণ কি তা বলুন, সাথে কখন তালা খুলবেন তার আনুমানিক সময় উল্লেখ করুন",
- "readonlytext": "নতà§\81ন à¦à§\81à¦\95à§\8dতি à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয সমà§\8dপাদনার à¦\9cনà§\8dয ডাà¦\9fাবà§\87à¦\9c বরà§\8dতমানà§\87 তালাবদà§\8dধ à¦\95রা à¦\86à¦\9bà§\87। সমà§\8dà¦à¦¬à¦¤ ডাà¦\9fাবà§\87à¦\9c রà¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র নিয়মিত à¦\95াà¦\9c à¦\9aলà¦\9bà§\87। à¦\95াà¦\9c শà§\87ষ হলà§\87 à¦\8fà¦\9fি সà§\8dবাà¦à¦¾à¦¬à¦¿à¦\95 à¦\85বসà§\8dথায় ফিরà§\87 à¦\86সবà§\87।\n\nযà§\87 সিসà§\8dà¦\9fà§\87ম পà§\8dরশাসà¦\95 à¦\8fà¦\9fি তালাবদ্ধ করেছেন, তিনি এই ব্যাখ্যা দিয়েছেন: $1",
+ "readonly": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ",
+ "enterlockreason": "তালাবদ্ধ করার কারণ কি তা বলুন, সাথে কখন তালা খুলবেন তার আনুমানিক সময় উল্লেখ করুন",
+ "readonlytext": "নতà§\81ন à¦à§\81à¦\95à§\8dতি à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয সমà§\8dপাদনার à¦\9cনà§\8dয ডাà¦\9fাবà§\87à¦\9c বরà§\8dতমানà§\87 à¦\85বরà§\81দà§\8dধ à¦\95রা à¦\86à¦\9bà§\87। সমà§\8dà¦à¦¬à¦¤ ডাà¦\9fাবà§\87à¦\9c রà¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র নিয়মিত à¦\95াà¦\9c à¦\9aলà¦\9bà§\87। à¦\95াà¦\9c শà§\87ষ হলà§\87 à¦\8fà¦\9fি সà§\8dবাà¦à¦¾à¦¬à¦¿à¦\95 à¦\85বসà§\8dথায় ফিরà§\87 à¦\86সবà§\87।\n\nযà§\87 সিসà§\8dà¦\9fà§\87ম পà§\8dরশাসà¦\95 à¦\8fà¦\9fি à¦\85বরà§\81দ্ধ করেছেন, তিনি এই ব্যাখ্যা দিয়েছেন: $1",
"missing-article": "\"$1\" পাতাটির $2 লেখাটি ডাটাবেজ খুঁজে পায়নি, যদিও খুঁজে পাওয়ার কথা ছিল।\n\nসাধারণত কোন মেয়াদোত্তীর্ণ সংশোধন পার্থক্য অনুসরণ করলে অথবা \nমুছে ফেলা কোন পাতার ইতিহাসের সংযোগ অনুসরণ করলে এমনটি ঘটে।\n\nযদি এমনটি না হয়, তাহলে আপনি হয়ত সফটওয়্যারে কোন ত্রুটি খুঁজে পেয়েছেন।\n\nঅনুগ্রহ করে ইউআরএল-টি উল্লেখ করে এ ব্যাপারে কোন [[Special:ListUsers/sysop|প্রশাসককে]] অবহিত করুন।",
"missingarticle-rev": "(সংস্করণ#: $1)",
"missingarticle-diff": "(পার্থক্য: $1, $2)",
- "readonly_lag": "ডাà¦\9fাবà§\87à¦\9c সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 তালাবদ্ধ করে দেয়া হয়েছে, যাতে অধীন ডাটাবেজ সার্ভারগুলি প্রধান ডাটাবেজ সার্ভারের অবস্থায় আসতে পারে।",
+ "readonly_lag": "ডাà¦\9fাবà§\87à¦\9c সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 à¦\85বরà§\81দ্ধ করে দেয়া হয়েছে, যাতে অধীন ডাটাবেজ সার্ভারগুলি প্রধান ডাটাবেজ সার্ভারের অবস্থায় আসতে পারে।",
"nonwrite-api-promise-error": "'Promise-Non-Write-API-Action' HTTP শিরলেখে পাঠানো হয়েছিল কিন্তু অনুরোধটি একটি API লিখন মডিউলে ছিল।",
"internalerror": "অভ্যন্তরীণ ত্রুটি",
"internalerror_info": "অভ্যন্তরীণ ত্রুটি: $1",
"filecopyerror": "\"$1\" নাম থেকে \"$2\" নামে ফাইল প্রতিলিপি করা যায়নি।",
"filerenameerror": "\"$1\" ফাইলটির নাম পরিবর্তন করে \"$2\" করা সম্ভব হয়নি।",
"filedeleteerror": "\"$1\" ফাইলটি মুছে ফেলা সম্ভব হয়নি।",
- "directorycreateerror": "\"$1\" নামà§\87 নিরà§\8dদà§\87শিà¦\95া তà§\88রি à¦\95রা যায়নি।",
- "directoryreadonlyerror": "\"$1\" নামà§\87র নিরà§\8dদà§\87শিà¦\95াà¦\9fি শà§\81ধà§\81মাতà§\8dর পাঠযà§\8bà¦\97à§\8dয।",
- "directorynotreadableerror": "\"$1\" নামà§\87র নিরà§\8dদà§\87শিà¦\95াà¦\9fি পাঠযà§\8bà¦\97à§\8dয নয়।",
- "filenotfound": "\"$1\" নামà§\87র ফাà¦\87লà¦\9fি à¦\96à§\81à¦\81à¦\9cà§\87 পাà¦\93য়া যায়নি।",
+ "directorycreateerror": "\"$1\" নির্দেশিকা তৈরি করা যায়নি।",
+ "directoryreadonlyerror": "\"$1\" নির্দেশিকাটি শুধুমাত্র পাঠযোগ্য।",
+ "directorynotreadableerror": "\"$1\" নির্দেশিকাটি পাঠযোগ্য নয়।",
+ "filenotfound": "\"$1\" ফাইলটি খুঁজে পাওয়া যায়নি।",
"unexpected": "অপ্রত্যাশিত মান: \"$1\"=\"$2\"।",
"formerror": "ত্রুটি: ফরমটি জমা দেওয়া সম্ভব হয়নি।",
"badarticleerror": "এই পাতায় এই কাজটি করা সম্ভব নয়।",
"cannotdelete": "\"$1\" পাতা বা ফাইলটি মোছা সম্ভব হয়নি।\nসম্ভবত অন্য কেউ আগেই এটিকে মুছে ফেলেছেন।",
- "cannotdelete-title": "\"$1\" শিরà§\8bনামà§\87র পাতাà¦\9fি মà§\81à¦\9bà§\87 ফà§\87লা যাà¦\9aà§\8dà¦\9bà§\87 না।",
+ "cannotdelete-title": "\"$1\" পাতাà¦\9fি মà§\81à¦\9bà§\87 ফà§\87লা যাà¦\9aà§\8dà¦\9bà§\87 না",
"delete-hook-aborted": "হুকের কারণে পাতা মোছার কাজটি পরিত্যক্ত হয়েছে।\nকোন ব্যাখ্যা দেয়া হয়নি।",
- "no-null-revision": "\"$1\" নামà§\87র পাতার à¦\9cনà§\8dয ফাà¦\81à¦\95া সà¦\82সà§\8dà¦\95রণ তà§\88রà§\80 à¦\95রা যায়নি",
+ "no-null-revision": "\"$1\" পাতার জন্য ফাঁকা সংস্করণ তৈরী করা যায়নি",
"badtitle": "ভুল শিরোনাম",
"badtitletext": "অনুরোধকৃত পাতার শিরোনামটি অবৈধ, খালি কিংবা কোন ভুল আন্তঃভাষা বা আন্তঃউইকি শিরোনাম সংযোগ ছিল। এটিতে সম্ভবত এমন এক (একাধিক) ক্যারেক্টার আছে, যা (যেগুলি) শিরোনামে ব্যবহারযোগ্য নয়।",
"title-invalid-empty": "অনুরোধকৃত পাতার শিরোনামটি খালি বা শুধুমাত্র একটি নামস্থানের নাম ধারণ করে।",
"title-invalid-too-long": "অনুরোধকৃত পাতার শিরোনামটি অত্যধিক দীর্ঘ। ইউটিএফ-৮ সাংকেতিকীকরণ অনুযায়ী এটি $1 {{PLURAL:$1|বাইটের}} থেকে দীর্ঘতর হতে পারবে না।",
"title-invalid-leading-colon": "অনুরোধকৃত পাতার শিরোনামটির শুরুতে একটি অবৈধ কোলন চিহ্ন (:) রয়েছে।",
"perfcached": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সম্পূর্ণ হালনাগাদকৃত না-ও হতে পারে। সর্বোচ্চ {{PLURAL:$1|একটি ফলাফল|$1 টি ফলাফল}} ক্যাশে থাকতে পারে।",
- "perfcachedts": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সর্বশেষ $1 তারিখে হালনাগাদ করা হয়েছে। সর্বোচ্চ {{PLURAL:$4|একটি ফলাফল|$4 টি ফলাফল}} ক্যাশে থাকতে পারে।",
+ "perfcachedts": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সর্বশেষ $1 তারিখে হালনাগাদ করা হয়েছে। সর্বোচ্চ {{PLURAL:$4|একটি ফলাফল|$4টি ফলাফল}} ক্যাশে থাকতে পারে।",
"querypage-no-updates": "এই পাতার জন্য হালনাগাদ নিষ্ক্রিয় করা হয়েছে। এখানে রাখা উপাত্তগুলি এ মুহূর্তে হালনাগাদ করা হবে না।",
"viewsource": "উৎস দেখুন",
- "viewsource-title": "$1 নামের পাতাটির উৎস দেখুন",
+ "viewsource-title": "$1-এর উৎস দেখুন",
"actionthrottled": "কাজের গতি ধীরকরণ",
"actionthrottledtext": "অপব্যবহার প্রতিরোধক সমাধান হিসেবে এই কাজটি খুব কম সময়ে অনেক বেশিবার সম্পাদন করার উপর সীমা বেঁধে দেওয়া হয়েছে, এবং আপনি সেই সীমা অতিক্রম করেছেন।\nঅনুগ্রহ করে কয়েক মিনিট পরে আবার চেষ্টা করুন।",
"protectedpagetext": "সম্পাদনা অথবা অন্যান্য কাজে বাধা দিতে পাতাটিকে সুরক্ষিত হয়েছে।",
"viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের প্রতিলিপি করতে পারবেন।",
- "viewyourtext": "আপনি এই পাতায় করা <strong>আপনার সম্পাদনাগুলি</strong>দেখতে এবং প্রতিলিপি করতে পারেন।",
+ "viewyourtext": "আপনি এই পাতায় করা <strong>আপনার সম্পাদনাগুলি</strong> দেখতে এবং প্রতিলিপি করতে পারেন।",
"protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটি যাতে অপব্যবহারে না করা হয়, সেজন্য এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করণ প্রকল্প [https://translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
- "editinginterface": "<strong>সতরà§\8dà¦\95 বারà§\8dতা:</strong> à¦\86পনি à¦\8fমন à¦\8fà¦\95à¦\9fি পাতা সমà§\8dপাদনা à¦\95রà¦\9bà§\87ন যা সফà¦\9fà¦\93য়à§\8dযারà§\87র à¦\9cনà§\8dয à¦\87নà§\8dà¦\9fারফà§\87স à¦\9fà§\87à¦\95à§\8dসà¦\9f সরবরাহ করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির অন্যান্য ব্যবহারকারীদের জন্য দৃশ্যমান ইন্টারফেসে প্রভাব ফেলবে।",
+ "editinginterface": "<strong>সতরà§\8dà¦\95 বারà§\8dতা:</strong> à¦\86পনি à¦\8fমন à¦\8fà¦\95à¦\9fি পাতা সমà§\8dপাদনা à¦\95রà¦\9bà§\87ন যা সফà¦\9fà¦\93য়à§\8dযারà§\87র à¦\9cনà§\8dয à¦\87নà§\8dà¦\9fারফà§\87স লà§\87à¦\96া সরবরাহ করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির অন্যান্য ব্যবহারকারীদের জন্য দৃশ্যমান ইন্টারফেসে প্রভাব ফেলবে।",
"translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে দয়া করে [https://translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
- "cascadeprotected": "à¦\8fà¦\87 পাতাà¦\9fিà¦\95à§\87 সমà§\8dপাদনা থà§\87à¦\95à§\87 সà§\81রà¦\95à§\8dষিত à¦\95রা হয়à§\87à¦\9bà§\87, à¦\95ারণ à¦\8fà¦\9fি নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$1|à¦\9fি পাতায়}} অন্তর্ভুক্ত, যেগুলি \"প্রপাতাকার\" বৈশিষ্ট্য সহযোগে সুরক্ষিত করা আছে:\n$2",
+ "cascadeprotected": "à¦\8fà¦\87 পাতাà¦\9fিà¦\95à§\87 সমà§\8dপাদনা থà§\87à¦\95à§\87 সà§\81রà¦\95à§\8dষিত à¦\95রা হয়à§\87à¦\9bà§\87, à¦\95ারণ à¦\8fà¦\9fি নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$1|পাতায়|পাতাà¦\97à§\81লিতà§\87}} অন্তর্ভুক্ত, যেগুলি \"প্রপাতাকার\" বৈশিষ্ট্য সহযোগে সুরক্ষিত করা আছে:\n$2",
"namespaceprotected": "<strong>$1</strong> নামস্থানের কোন পাতা আপনার সম্পাদনা করার অনুমতি নেই।",
"customcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
"customjsprotected": "আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
"mypreferencesprotected": "আপনার পছন্দসমূহ সম্পাদনা করতে আপনার অনুমতি নেই",
"ns-specialprotected": "বিশেষ পাতাসমূহ সম্পাদনা করা যাবে না।",
"titleprotected": "[[User:$1|$1]] কর্তৃক এই শিরোনামটি সৃষ্টি করা থেকে সুরক্ষিত করা হয়েছে। কারণ: <em>$2</em>।",
- "filereadonlyerror": "\"$1\" ফাà¦\87লà¦\9fিà¦\95à§\87 পরিবরà§\8dতন à¦\95রা সমà§\8dà¦à¦¬ হà¦\9aà§\8dà¦\9bà§\87 না à¦\95ারণ \"$2\" ফাà¦\87ল সà¦\82à¦\97à§\8dরহসà§\8dথল শà§\81ধà§\81মাতà§\8dর-পঠন মà§\8bডà§\87 à¦\86à¦\9bà§\87।\n\nসিসà§\8dà¦\9fà§\87ম পà§\8dরশাসà¦\95 যিনি à¦\8fà¦\9fি বন্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: \"$3\"।",
+ "filereadonlyerror": "\"$1\" ফাà¦\87লà¦\9fিà¦\95à§\87 পরিবরà§\8dতন à¦\95রা সমà§\8dà¦à¦¬ হà¦\9aà§\8dà¦\9bà§\87 না à¦\95ারণ \"$2\" ফাà¦\87ল সà¦\82à¦\97à§\8dরহশালাà¦\9fি শà§\81ধà§\81মাতà§\8dর-পঠন মà§\8bডà§\87 à¦\86à¦\9bà§\87।\n\nসিসà§\8dà¦\9fà§\87ম পà§\8dরশাসà¦\95 যিনি ফাà¦\87লà¦\9fি à¦\85বরà§\81দ্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: \"$3\"।",
"invalidtitle-knownnamespace": "অবৈধ শিরোনাম, যেখানে নামস্থান \"$2\" এবং লেখা হয়েছে \"$3\"",
"invalidtitle-unknownnamespace": "অবৈধ শিরোনাম, যেখানে ব্যবহৃত হয়েছে অপরিচিত নামস্থান সংখ্যা $1 এবং লেখা হয়েছে \"$2\"",
"exception-nologin": "প্রবেশ করেন নি",
"copyrightwarning2": "অনুগ্রহ করে লক্ষ করুন: {{SITENAME}}-এর এই ভুক্তিতে আপনার লেখা বা অবদান অন্যান্য ব্যবহারকারীরা পরিবর্তন বা পরিবর্ধন করতে, এমনকি মুছে ফেলতে পারবেন। {{SITENAME}} এ আপনার সকল লেখালেখি/অবদান গনু ফ্রি ডকুমেন্টেশনের ($1) আওতায় বিনামূল্যে প্রাপ্য ও হস্তান্তরযোগ্য। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে ব্যবহার করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না। আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন (তবে কোন মৌলিক গবেষণা নয়) বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না।'''",
"editpage-cannot-use-custom-model": "এই পাতার বিষয়বস্তুর রূপ পরিবর্তন করা যাবে না।",
"longpageerror": "'''ত্রুটি: আপনার জমা দেয়া টেক্সটের পরিমাণ {{PLURAL:$1|এক কিলোবাইট|$1 কিলোবাইট}}, যা সর্বোচ্চ সীমা {{PLURAL:$2|এক কিলোবাইটের|$2 কিলোবাইটের}} চেয়ে বেশি।'''\nএটি সংরক্ষণ করা সম্ভব নয়।",
- "readonlywarning": "<strong>সতরà§\8dà¦\95à§\80à¦\95রণ: রà¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র à¦\9cনà§\8dয ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ রাà¦\96া হয়à§\87à¦\9bà§\87, তাà¦\87 à¦\8fà¦\87 মà§\81হà§\82রà§\8dতà§\87 à¦\86পনি à¦\86পনার সমà§\8dপাদনা সà¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 পারবà§\87ন না।</strong>\nà¦\86পনি à¦\9aাà¦\87লà§\87 লà§\87à¦\96াà¦\9fি à¦\85নà§\81লিপি à¦\95রà§\87 à¦\93 à¦\95à§\8bন à¦\9fà§\87à¦\95à§\8dসà¦\9f ফাà¦\87লà§\87 পà§\8dরতিলà§\87পন à¦\95রার দà§\8dবারা à¦à¦¬à¦¿à¦·à§\8dযতà§\87র à¦\9cনà§\8dয সà¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 পারà§\87ন।\n\nসিসà§\8dà¦\9fà§\87ম পà§\8dরশাসà¦\95 যিনি à¦\8fà¦\9fি বন্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: $1",
+ "readonlywarning": "<strong>সতরà§\8dà¦\95বারà§\8dতা: রà¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র à¦\9cনà§\8dয ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ রাà¦\96া হয়à§\87à¦\9bà§\87, তাà¦\87 à¦\8fà¦\87 মà§\81হà§\82রà§\8dতà§\87 à¦\86পনি à¦\86পনার সমà§\8dপাদনা সà¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 পারবà§\87ন না।</strong>\nà¦\86পনি à¦\9aাà¦\87লà§\87 লà§\87à¦\96াà¦\9fি পà§\8dরতিলিপি à¦\95রà§\87 à¦\95à§\8bন à¦\9fà§\87à¦\95à§\8dসà¦\9f ফাà¦\87লà§\87 সà§\87à¦\81à¦\9fà§\87 à¦à¦¬à¦¿à¦·à§\8dযতà§\87র à¦\9cনà§\8dয সà¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 পারà§\87ন।\n\nযà§\87 সিসà§\8dà¦\9fà§\87ম পà§\8dরশাসà¦\95 ডাà¦\9fাবà§\87à¦\9cà¦\9fি à¦\85বরà§\81দ্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: $1",
"protectedpagewarning": "'''সতর্কীকরণ: এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি সম্পাদনা করতে পারবেন।'''\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
"semiprotectedpagewarning": "'''নোট:''' এই পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে তাই নিবন্ধনকৃত ব্যবহারকারী এটি সম্পাদনা করতে পারবেন।\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
"cascadeprotectedwarning": "<strong>সতর্কীকরণ:</strong> এই পাতাটি সুরক্ষিত, ফলে এটি শুধুমাত্র প্রশাসক অধিকারপ্রাপ্ত ব্যবহারকারীগণ সম্পাদনা করতে পারেন, কারণ এটি নিচের প্রপাতাকার-সুরক্ষিত {{PLURAL:$1|পাতায়|পাতাসমূহে}} অন্তর্ভুক্ত আছে:",
"sectioneditnotsupported-title": "অনুচ্ছেদ সম্পাদনা সমর্থন করে না",
"sectioneditnotsupported-text": "এই সম্পাদনা পাতায় অনুচ্ছেদ সম্পাদনা সমর্থন করে না",
"permissionserrors": "অনুমতি ত্রুটিসমূহ",
- "permissionserrorstext": "à¦\86পনার à¦\8fà¦\9fা à¦\95রার à¦\85নà§\81মতি নà§\87à¦\87, নিà¦\9aà§\87র {{PLURAL:$1|à¦\9fি à¦\95ারণà§\87র|à¦\9fি à¦\95ারণà§\87র}} à¦\9cনà§\8dয:",
- "permissionserrorstext-withaction": "নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$1|à¦\9fি à¦\95ারণà§\87র}} à¦\9cনà§\8dয à¦\86পনার $2-র à¦\85নà§\81মà§\8bদন নà§\87à¦\87:",
+ "permissionserrorstext": "নিনà§\8dমলিà¦\96িত {{PLURAL:$1|à¦\95ারণà¦\9fির|à¦\95ারণà¦\97à§\81লির}} à¦\9cনà§\8dয à¦\86পনার à¦\8fà¦\9fা à¦\95রার à¦\85নà§\81মতি নà§\87à¦\87:",
+ "permissionserrorstext-withaction": "à¦\86পনার $2 à¦\85নà§\81মতি নà§\87à¦\87, যার {{PLURAL:$1|à¦\95ারণ|à¦\95ারণসমà§\82হ}} হল:",
"contentmodelediterror": "আপনি এই পুনর্বিবেচনা সম্পাদনা করতে পারবেন না কারণ এর বিষয়বস্তু মডেল <code>$1</code>, যা বর্তমান বিষয়বস্তু মডেল <code>$2</code>-এর থেকে ভিন্ন।",
"recreate-moveddeleted-warn": "'''সতর্কীকরণ: আপনি এমন একটি পাতা পুনরায় তৈরি করছেন যা পূর্বে অপসারণ করা হয়েছিল।'''\n\nআপনি পাতাটি সম্পাদনা চালিয়ে যাওয়া ঠিক হবে কিনা, তা বিবেচনা করুন।\nআপনার সুবিধার্থে পাতাটির অপলুপ্তি লগ এখানে দেয়া হলো:",
"moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এ পাতার অবলুপ্তি লগ দেওয়া হলো।",
"post-expand-template-argument-warning": "' ' ' সাবধান: ' ' ' এই পাতাটিতে অন্তত একটি ফর্মা যুক্তি আছে যা একটি খুব বড় বিস্তার আকার ধারণ করেছে।\nতাই এই আর্গুমেন্টটি বাদ দেওয়া হয়েছে।",
"post-expand-template-argument-category": "বাদ ফর্মা আর্গুমেন্ট ধারণকারী পাতা",
"parser-template-loop-warning": "টেমপ্লেট লুপ সনাক্ত হয়েছে: [[$1]]",
+ "template-loop-category": "টেমপ্লেট লুপসহ পাতা",
+ "template-loop-category-desc": "এই পাতায় একটি টেমপ্লেট লুপ আছে, অর্থাৎ এটি এমন একটি টেমপ্লেট যা নিজেকেই পুনরাবৃত্তভাবে আহ্বান করে।",
"parser-template-recursion-depth-warning": "টেমপ্লেট পুনরাবৃত্তি (রিকার্শন) ডেপথ্ সীমা অতক্রম করেছে ($1)",
"language-converter-depth-warning": "ভাষা পরিবর্তন ডেপথ্ সীমা অতক্রম করেছে ($1)",
"node-count-exceeded-category": "যে সকল পাতার নোড কাউন্ট সীমানা পার হয়েছে",
"cantcreateaccount-range-text": "[[User:$3|$3]] কর্তৃক আইপি ঠিকানার ব্যাপ্তি <strong>$1</strong>-এর মধ্যে অ্যাকাউন্ট তৈরি করা অবরুদ্ধ করা হয়েছে। যাতে আপনার আইপি ঠিকানাও (<strong>$4</strong>) রয়েছে। \n\n$3 কর্তৃক <em>$2</em> কারণ দেখানো হয়েছে।",
"viewpagelogs": "এই পাতার জন্য লগগুলো দেখুন",
"nohistory": "এই পাতার কোন সম্পাদনার ইতিহাস নেই।",
- "currentrev": "সরà§\8dবশà§\87ষ সà¦\82শà§\8bধিত সà¦\82সà§\8dà¦\95রণ",
- "currentrev-asof": "$1 সময় à¦\93 তারিà¦\96à§\87 সমà§\8dপাদিত সরà§\8dবশà§\87ষ সà¦\82শà§\8bধিত সংস্করণ",
+ "currentrev": "সর্বশেষ সংস্করণ",
+ "currentrev-asof": "$1 তারিà¦\96à§\87 সমà§\8dপাদিত সরà§\8dবশà§\87ষ সংস্করণ",
"revisionasof": "$1 তারিখে সংশোধিত সংস্করণ",
- "revision-info": "{{GENDER:$6|$2}} à¦\95রà§\8dতà§\83à¦\95 $1 সময় à¦\93 তারিà¦\96à§\87 সà¦\82শà§\8bধিত সà¦\82সà§\8dà¦\95রণ $7",
+ "revision-info": "{{GENDER:$6|$2}} à¦\95রà§\8dতà§\83à¦\95 $1 তারিà¦\96à§\87 সà¦\82শà§\8bধিত সà¦\82সà§\8dà¦\95রণ$7",
"previousrevision": "←পুর্বের সংস্করণ",
"nextrevision": "পরবর্তী সংস্করণ→",
"currentrevisionlink": "সর্বশেষ সংস্করণ",
"last": "পূর্ববর্তী",
"page_first": "প্রথম",
"page_last": "শেষ",
- "histlegend": "পার্থক্য নির্বাচন: যে সংস্করণগুলি তুলনা করতে চান, সেগুলি চিহ্নিত করে এন্টার বা নিচের বোতামটি টিপুন।<br />\nনির্দেশিকা: <strong>(বর্তমান)</strong> = বর্তমান সংস্করণের সাথে পার্থক্য, <strong>(পূর্ববর্তী)<strong> = পূর্বের সংস্করণের সাথে পার্থক্য, <strong>অ<strong> = অনুল্লেখ্য সম্পাদনা।",
+ "histlegend": "পার্থক্য নির্বাচন: যে সংস্করণগুলি তুলনা করতে চান, সেগুলি চিহ্নিত করে এন্টার বা নিচের বোতামটি টিপুন।<br />\nনির্দেশিকা: <strong>({{int:cur}})</strong> = বর্তমান সংস্করণের সাথে পার্থক্য, <strong>({{int:last}})</strong> = পূর্বের সংস্করণের সাথে পার্থক্য, <strong>{{int:minoreditletter}}</strong> = অনুল্লেখ্য সম্পাদনা।",
"history-fieldset-title": "সংশোধিত সংস্করণের জন্য অনুসন্ধান করুন",
"history-show-deleted": "শুধুমাত্র অপসারিত সংশোধন",
"histfirst": "সবচেয়ে পুরনো",
"rev-deleted-comment": "(সম্পাদনা সারাংশ অপসারিত)",
"rev-deleted-user": "(ব্যবহারকারীর নাম সরিয়ে নেওয়া হয়েছে)",
"rev-deleted-event": "(লগ তথ্য সরানো হয়েছে)",
- "rev-deleted-user-contribs": "ব্যবহারকারীর নাম অথবা আইপি ঠিকানা অপসারিত হয়েছে - অবদান থেকে সম্পাদনা লুকিয়ে রাখা হয়েছে",
+ "rev-deleted-user-contribs": "[ব্যবহারকারীর নাম অথবা আইপি ঠিকানা সরানো হয়েছে - অবদান থেকে সম্পাদনা লুকিয়ে রাখা হয়েছে]",
"rev-deleted-text-permission": "পাতার এই সংস্করণটি '''অপসারিত''' হয়েছে।\nবিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।",
"rev-suppressed-text-permission": "পাতার সংশোধনটি <strong>গোপন</strong> করা হয়েছে।\nবিস্তারিত বিবরণ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} গোপনকার্যের লগে] থাকতে পারে।",
"rev-deleted-text-unhide": "পাতার এই সংস্করণটি '''অপসারিত''' হয়েছে।\nবিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।\nআপনি ইচ্ছা পোষণ করলে [$1 এই সংস্করণটি দেখতে পারেন]।",
"revdelete-hide-comment": "সম্পাদনা সারাংশ",
"revdelete-hide-user": "সম্পাদকের ব্যবহারকারী নাম/আইপি ঠিকানা",
"revdelete-hide-restricted": "প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো",
- "revdelete-radio-same": "অপরিবর্তিত থাক",
+ "revdelete-radio-same": "(পরিবর্তন করবেন না)",
"revdelete-radio-set": "লুকায়িত",
"revdelete-radio-unset": "দৃশ্যমান",
"revdelete-suppress": "সব প্রশাসক ও অন্যান্যদের কাছ থেকে উপাত্ত লুকিয়ে রাখা হোক।",
"mergelogpagetext": "নিচে সবচেয়ে সাম্প্রতিক ঘটা এক পাতার ইতিহাসের সাথে অন্য পাতার ইতিহাসের একত্রীকরণের একটি তালিকা দেওয়া হল।",
"history-title": "\"$1\" পাতাটির সংশোধনের ইতিহাস",
"difference-title": "\"$1\" পাতাটির দুইটি সংশোধিত সংস্করণের মধ্যে পার্থক্য",
- "difference-title-multipage": "\"$1\" à¦\93 \"$2\" শিরà§\8bনামà§\87র পাতাà¦\97à§\81লির মধà§\8dযà§\87 পারà§\8dথà¦\95à§\8dয",
- "difference-multipage": "পাতাগুলির মধ্যে পার্থক্য",
+ "difference-title-multipage": "\"$1\" ও \"$2\" পাতাগুলির মধ্যে পার্থক্য",
+ "difference-multipage": "(পাতাগুলির মধ্যে পার্থক্য)",
"lineno": "$1 নং লাইন:",
"compareselectedversions": "নির্বাচিত সংশোধিত সংস্করণগুলির তুলনা",
"showhideselectedversions": "নির্বাচিত সংশোধনগুলি দেখাও/লুকাও",
"prevn-title": "পূর্ববর্তী $1{{PLURAL:$1|টি ফলাফল}}",
"nextn-title": "পরবর্তী $1টি {{PLURAL:$1|ফলাফল}}",
"shown-title": "প্রতি পাতায় $1টি {{PLURAL:$1|ফলাফল}} দেখাও",
- "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) দà§\87à¦\96ানà§\8b হà§\8bà¦\95।",
+ "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) দà§\87à¦\96à§\81ন",
"searchmenu-exists": "'''এই উইকিতে \"[[:$1]]\" নামে একটি পাতা রয়েছে'''",
"searchmenu-new": "<strong>\"[[:$1]]\" পাতাটি এই উইকিতে তৈরি করুন!</strong> {{PLURAL:$2|0=|এছাড়া আপনার অনুসন্ধানের সাথে পাওয়া পাতাটি দেখুন।|এছাড়া অনুসন্ধানে পাওয়া ফলাফলগুলিও দেখুন।}}",
"searchprofile-articles": "বিষয়বস্তুসমৃদ্ধ পাতা",
"searchprofile-images": "মাল্টিমিডিয়া",
"searchprofile-everything": "সমস্তকিছু",
- "searchprofile-advanced": "উন্নততর অনুসন্ধান",
+ "searchprofile-advanced": "উন্নত",
"searchprofile-articles-tooltip": "$1 এ অনুসন্ধান",
"searchprofile-images-tooltip": "ফাইলের জন্য অনুসন্ধান",
- "searchprofile-everything-tooltip": "সà¦\95ল বিষয়বসà§\8dতà§\81 à¦\85নà§\81সনà§\8dধান à¦\95রা হà§\8bà¦\95 (আলাপের পাতাসহ)",
- "searchprofile-advanced-tooltip": "সà§\8dবনিরà§\8dধারিত নামসà§\8dথানà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রা হà§\8bà¦\95",
+ "searchprofile-everything-tooltip": "সà¦\95ল বিষয়বসà§\8dতà§\81 à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন (আলাপের পাতাসহ)",
+ "searchprofile-advanced-tooltip": "সà§\8dবনিরà§\8dধারিত নামসà§\8dথানà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন",
"search-result-size": "$1 ({{PLURAL:$2|১টি শব্দ|$2টি শব্দ}})",
"search-result-category-size": "{{PLURAL:$1|১টি সদস্য|$1টি সদস্য}} ({{PLURAL:$2|১টি উপবিষয়শ্রেণী|$2টি উপবিষয়শ্রেণী}}, {{PLURAL:$3|১টি ফাইল |$3টি ফাইল}})",
"search-redirect": "($1 থেকে পুনর্নির্দেশিত)",
"search-showingresults": "মোট {{PLURAL:$4|<strong>$3</strong>টি ফলাফলের মধ্যে <strong>$1</strong>টি ফলাফল|মোট <strong>$3</strong>টি ফলাফলের মধ্যে <strong>$1 - $2</strong> নং ফলাফল}}",
"search-nonefound": "অনুসন্ধানকৃত জিজ্ঞাসার সাথে মিলে যায় এমন কোনো ফলাফল নেই।",
"search-nonefound-thiswiki": "অনুসন্ধানকৃত জিজ্ঞাসার সাথে মিলে যায় এমন কোনো ফলাফল এই সাইটে নেই।",
- "powersearch-legend": "উন্নততর অনুসন্ধান",
- "powersearch-ns": "নিà¦\9aà§\87র নিরà§\8dবাà¦\9aিত নামসà§\8dথানà¦\97à§\81লিতà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রা হà§\8bà¦\95:",
- "powersearch-togglelabel": "নিরà§\8dবাà¦\9aন à¦\95রা হà§\8bà¦\95:",
+ "powersearch-legend": "উন্নত অনুসন্ধান",
+ "powersearch-ns": "নামসà§\8dথানà¦\97à§\81লিতà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন:",
+ "powersearch-togglelabel": "নিরà§\8dবাà¦\9aন à¦\95রà§\81ন:",
"powersearch-toggleall": "সবগুলি",
"powersearch-togglenone": "কোনটিই নয়",
"powersearch-remember": "ভবিষ্যত অনুসন্ধানগুলির জন্য নির্বাচন মনে রাখা হোক",
"prefs-resetpass": "পাসওয়ার্ড পরিবর্তন",
"prefs-changeemail": "ইমেইল ঠিকানা পরিবর্তন বা বাতিল করুন",
"prefs-setemail": "একটি ইমেইল ঠিকানা নির্ধারণ করুন",
- "prefs-email": "ইমেইল-সংক্রান্ত পছন্দগুলি",
+ "prefs-email": "ইমেইলের পছন্দগুলি",
"prefs-rendering": "অবয়ব",
"saveprefs": "সংরক্ষণ",
"restoreprefs": "সকল পূর্বনির্ধারিত সেটিং ফিরিয়ে আনো (সকল অংশে)",
"stub-threshold-sample-link": "নমুনা",
"stub-threshold-disabled": "নিস্ক্রিয়",
"recentchangesdays": "সাম্প্রতিক পরিবর্তন পাতায় প্রদর্শিত দিনের সংখ্যা:",
- "recentchangesdays-max": "সর্বোচ্চ $1 {{PLURAL:$1|দিনের}} সাম্প্রতিক পরিবর্তন প্রদর্শনযোগ্য",
+ "recentchangesdays-max": "সর্বোচ্চ $1 {{PLURAL:$1|দিনের}}",
"recentchangescount": "সাম্প্রতিক পরিবর্তনে প্রদর্শিত সম্পাদনার পূর্বনির্ধারিত সংখ্যা:",
"prefs-help-recentchangescount": "এতে সাম্প্রতিক পরিবর্তনগুলি, পাতার ইতিহাসগুলি এবং লগগুলি অন্তর্ভুক্ত।",
"prefs-help-watchlist-token2": "এটি আপনার নজরতালিকার ওয়েব ফিডের গোপন চাবি। কেউ যদি এটি জানতে পারেন, তাহলে তিনি আপনার নজরতালিকা পড়তে সক্ষম হবেন, তাই এটি প্রকাশ করবেন না। [[Special:ResetTokens|আপনার এটি পুনঃনির্ধারণ করার প্রয়োজন হলে এখানে ক্লিক করুন]]।",
"right-mergehistory": "পাতার ইতিহাস একীকরণ করুন।",
"right-userrights": "সকল ব্যবহারকারী অধিকার সম্পাদনা করুন",
"right-userrights-interwiki": "অন্যান্য উইকির ব্যবহারকারীদের অধিকারসমূহ সম্পাদনা করুন।",
- "right-siteadmin": "ডাà¦\9fাবà§\87à¦\9c বনà§\8dধ à¦\8fবà¦\82 à¦\96à§\81লà§\81ন",
+ "right-siteadmin": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রা à¦\8fবà¦\82 à¦\96à§\8bলা",
"right-override-export-depth": "৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন",
"right-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠানো",
"right-managechangetags": "[[Special:Tags|ট্যাগ]] তৈরি ও সক্রিয়/নিষ্ক্রিয় করুন",
"action-block": "এই ব্যবহারকারীকে সম্পাদনা করতে বাঁধা দেয়ার",
"action-protect": "এই পাতার সুরক্ষার মাত্রা পরিবর্তন করার",
"action-rollback": "একটি নির্দিষ্ট পাতার সর্বশেষ ব্যবহারকারীর সম্পদনা পূর্বাবস্থায় ফিরিয়ে আনুন",
- "action-import": "অন্য উইকি থেকে পাতা আমদানি করা",
+ "action-import": "অন্য উইকি থেকে পাতা আমদানি করার",
"action-importupload": "ফাইল আপলোড থেকে পাতা আমদানী করো",
"action-patrol": "অন্যদের সম্পাদনা পরীক্ষিত বলে চিহ্নিত করো",
"action-autopatrol": "পরীক্ষিত বলে চিহ্নিত কি আপনি সম্পাদনা করেছেন",
"action-mergehistory": "এই পাতার ইতিহাস একত্রিত করার",
"action-userrights": "সকল ব্যবহারকারীর অধিকার সম্পাদনা করুন",
"action-userrights-interwiki": "অন্যান্য উইকির ব্যবহারকারীদের অধিকারসমূহ সম্পাদনা করুন",
- "action-siteadmin": "ডাà¦\9fাবà§\87à¦\9c বনà§\8dধ à¦\85থবা à¦\96à§\81লà§\81ন",
+ "action-siteadmin": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রা à¦\85থবা à¦\96à§\8bলা",
"action-sendemail": "ই-মেইল পাঠাও",
"action-editmyoptions": "নিজের পছন্দসমূহ সম্পাদনা করার",
"action-editmywatchlist": "আপনার নজরতালিকা পরিবর্তন করুন",
"rcfilters-highlightmenu-help": "এই বৈশিষ্ট্য আলোকপাত করতে একটি রঙ নির্বাচন করুন",
"rcfilters-filterlist-noresults": "কোনও ফিল্টার পাওয়া যায়নি",
"rcfilters-noresults-conflict": "কোনও ফলাফল পাওয়া যায়নি কারণ অনুসন্ধানের মাপকাঠিগুলির মধ্যে সংঘর্ষ আছে",
- "rcfilters-state-message-subset": "à¦\8fà¦\87 à¦\9bাà¦\81à¦\95নিà¦\9fির à¦\95à§\8bন পà§\8dরà¦à¦¾à¦¬ নà§\87à¦\87 à¦\95ারণ à¦\8fর ফলাফলà¦\97à§\81লি নিমà§\8dনà§\8bà¦\95à§\8dত বà§\83হতà§\8dতর পরিধির {{PLURAL:$2|à¦\9fি à¦\9bাà¦\81à¦\95নির}} মধ্যে অন্তর্ভুক্ত আছে (আলোকপাত করে এটিকে আলাদা করে দেখার চেষ্টা করুন): $1",
+ "rcfilters-state-message-subset": "à¦\8fà¦\87 à¦\9bাà¦\81à¦\95নিà¦\9fির à¦\95à§\8bন পà§\8dরà¦à¦¾à¦¬ নà§\87à¦\87 à¦\95ারণ à¦\8fর ফলাফলà¦\97à§\81লি নিমà§\8dনà§\8bà¦\95à§\8dত বà§\83হতà§\8dতর পরিধির {{PLURAL:$2|à¦\9bাà¦\81à¦\95নির|à¦\9bাà¦\81à¦\95নিà¦\97à§\81লির}} মধ্যে অন্তর্ভুক্ত আছে (আলোকপাত করে এটিকে আলাদা করে দেখার চেষ্টা করুন): $1",
"rcfilters-state-message-fullcoverage": "কোন দলের সমস্ত ছাঁকনি নির্বাচন করা এবং কোন ছাঁকনিই নির্বাচন না করা একই কথা, তাই এই ছাঁকনিটির কোন প্রভাব নেই। এই দলে অন্তর্ভুক্ত ছাঁকনিগুলি হল: $1",
"rcfilters-filtergroup-registration": "ব্যবহারকারী নিবন্ধন",
"rcfilters-filter-registered-label": "নিবন্ধিত",
"rcfilters-filter-registered-description": "প্রবেশকৃত সম্পাদকবৃন্দ।",
"rcfilters-filter-unregistered-label": "অনিবন্ধিত",
"rcfilters-filter-unregistered-description": "সম্পাদক যারা প্রবেশ করেন নি।",
- "rcfilters-filter-unregistered-conflicts-user-experience-level": "এই ছাঁকনিটির সাথে নিম্নোক্ত ব্যবহারকারী অভিজ্ঞতা-সংক্রান্ত {{PLURAL:$2|টি ছাঁকনির}} সংঘর্ষ আছে; এই {{PLURAL:$2|টি ছাঁকনি}} কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে: $1",
+ "rcfilters-filter-unregistered-conflicts-user-experience-level": "এই ছাঁকনিটির সাথে নিম্নোক্ত ব্যবহারকারী অভিজ্ঞতা{{PLURAL:$2|ছাঁকনির|ছাঁকনিগুলির}} সংঘর্ষ আছে; যা কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে: $1",
"rcfilters-filtergroup-authorship": "কৃতি সম্পাদনা",
"rcfilters-filter-editsbyself-label": "আপনার নিজস্ব সম্পাদনা",
"rcfilters-filter-editsbyself-description": "আপনার দ্বারা সম্পাদনা।",
"rcfilters-filter-editsbyother-label": "অন্যদের দ্বারা সম্পাদনা",
"rcfilters-filter-editsbyother-description": "অন্য ব্যবহারকারীদের দ্বারা করা সম্পাদনা (আপনার না)।",
"rcfilters-filtergroup-userExpLevel": "অভিজ্ঞতার স্তর (শুধু মাত্র নিবন্ধিত ব্যবহারকারীর জন্য)",
- "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "অভিজ্ঞতা-সংক্রান্ত ছাঁকনিগুলি কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে, তাই এই ছাঁকটি \"অনিবন্ধিত\" ছাঁকনিটির সাথে সংঘর্ষে আছে।",
- "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "\"অনিবন্ধিত\" ছাঁকনিটি এক বা তার অধিক অভিজ্ঞতা-সংক্রান্ত ছাঁকনির সাথে সংঘর্ষে আছে, যে ছাঁকনিগুলি কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে। সংঘর্ষরত ছাঁকনিগুলিকে উপরের \"সক্রিয় ছাঁকনিসমূহ\" এলাকাতে চিহ্নিত করা হয়েছে।",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "অভিজ্ঞতা ছাঁকনিগুলি কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে, তাই এই ছাঁকনিটি \"অনিবন্ধিত\" ছাঁকনিটির সাথে সংঘর্ষে আছে।",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "\"অনিবন্ধিত\" ছাঁকনিটি এক বা তার অধিক অভিজ্ঞতা ছাঁকনির সাথে সংঘর্ষে আছে, যে ছাঁকনিগুলি কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে। সংঘর্ষরত ছাঁকনিগুলিকে উপরের \"সক্রিয় ছাঁকনিসমূহ\" এলাকাতে চিহ্নিত করা হয়েছে।",
"rcfilters-filter-user-experience-level-newcomer-label": "নতুন আগত",
"rcfilters-filter-user-experience-level-newcomer-description": "১০টি সম্পাদনার কম ও ৪ দিনের কার্যকলাপ।",
"rcfilters-filter-user-experience-level-learner-label": "শিক্ষার্থী",
- "rcfilters-filter-user-experience-level-learner-description": "যারা \"নবাগত\" ব্যবহারকারীদের চেয়ে বেশিসংখ্যক দিন ও বেশিবার সম্পাদনা করেছেন, কিন্তু \"অভিজ্ঞ\" ব্যবহারকারীদের চেয়ে কমসংখ্যক দিন ও কমবার সম্পাদনা করেছেন।",
+ "rcfilters-filter-user-experience-level-learner-description": "যারা \"নবাগত\" ব্যবহারকারীদের চেয়ে বেশিসংখ্যক দিন ও বেশিবার সম্পাদনা করেছেন, কিন্তু \"অভিজ্ঞ ব্যবহারকারীদের\" চেয়ে কম করেছেন।",
"rcfilters-filter-user-experience-level-experienced-label": "অভিজ্ঞ ব্যবহারকারী",
"rcfilters-filter-user-experience-level-experienced-description": "৩০ দিনের বেশী কার্যকলাপ ও ৫০০টি সম্পাদনা।",
"rcfilters-filtergroup-automated": "স্বয়ংক্রিয় অবদান",
"rcfilters-filter-logactions-label": "প্রবেশকৃত কার্য",
"rcfilters-filter-logactions-description": "প্রশাসনিক কর্ম, অ্যাকাউন্ট সৃষ্টিকরণ, পাতা অপসারণ, আপলোড....",
"rcfilters-hideminor-conflicts-typeofchange-global": "\"অনুল্লেখ্য সম্পাদনা\" ছাঁকনিটির সাথে এক বা ততোধিক \"পরিবর্তনের ধরন\"-সংক্রান্ত ছাঁকনির সংঘর্ষ আছে, কারণ কিছু নির্দিষ্ট ধরনের সম্পাদনা \"অনুল্লেখ্য\" হিসেবে চিহ্নিত করা সম্ভব নয়। সংঘর্ষে থাকা ছাঁকনিগুলিকে উপরের \"সক্রিয় ছাঁকনিসমূহ\" এলাকাতে চিহ্নিত করা হয়েছে।",
- "rcfilters-hideminor-conflicts-typeofchange": "কিছু নির্দিষ্ট ধরনের সম্পাদনা \"অনুল্লেখ্য\" হিসেবে চিহ্নিত করা সম্ভব নয়, তাই এই ছাঁকনিটির সাথে নিম্নোক্ত \"পরিবর্তনের ধরন\"-সংক্রান্ত ছাঁকনিগুলির সংঘর্ষ আছে: $1",
+ "rcfilters-hideminor-conflicts-typeofchange": "কিছু নির্দিষ্ট ধরনের সম্পাদনা \"অনুল্লেখ্য\" হিসেবে চিহ্নিত করা সম্ভব নয়, তাই এই ছাঁকনিটির সাথে নিম্নোক্ত পরিবর্তনের ধরন ছাঁকনিগুলির সংঘর্ষ আছে: $1",
"rcfilters-typeofchange-conflicts-hideminor": "এই \"পরিবর্তনের ধরন\"-সংক্রান্ত ছাঁকনিটির সাথে \"অনুল্লেখ্য সম্পাদনা\" ছাঁকনিটির সংঘর্ষ আছে। কিছু নির্দিষ্ট ধরনের সম্পাদনা \"অনুল্লেখ্য\" হিসেবে চিহ্নিত করা সম্ভব নয়।",
"rcnotefrom": "<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)।",
"rclistfrom": "$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও",
"fileexists-shared-forbidden": "অংশীদারী ফাইল ভাণ্ডারে এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান।\nআপনি যদি এখনো ফাইলটি আপলোড করতে চান, তবে অনুগ্রহপূর্বক পেছনে গিয়ে একটি নতুন নামে ফাইলটি আপলোড করুন।[[File:$1|thumb|center|$1]]",
"fileexists-no-change": "আপলোডটি <strong>[[:$1]]</strong>-এর বর্তমান সংস্করণের হুবহু প্রতিলিপি।",
"fileexists-duplicate-version": "এই আপলোডটি <strong>[[:$1]]</strong>-এর একটি {{PLURAL:$2|পুরনো সংস্করণের}} হুবহু প্রতিলিপি।",
- "file-exists-duplicate": "এই ফাইলটি নিচের {{PLURAL:$1|ফাইল|ফাইলগুলির}} অনুলিপি:",
+ "file-exists-duplicate": "এই ফাইলটি নিচের {{PLURAL:$1|ফাইলটির|ফাইলগুলির}} অবিকল প্রতিলিপি:",
"file-deleted-duplicate": "এই ফাইলটির মত একটি ফাইল ([[:$1]]) পূর্বে অপসারণ করা হয়েছে।\nপুনরায় আপলোড করার পূর্বে আপনার উচিত আগের ফাইলটির অপসারণের কারণ জানা।",
"file-deleted-duplicate-notitle": "এই ফাইলটির মত হুবহু একটি ফাইল আগেই মুছে ফেলা হয়েছে, এবং শিরোনামটিও অবলোপন করা হয়েছে। \nএই ফাইলটিকে পুনরায় আপলোড করার আগে এমন কাউকে জিজ্ঞাসা করে নিন যিনি অবলুপ্ত ফাইল উপাত্তগুলি দেখার ক্ষমতা রাখেন বলে এই পরিস্থিতিটি পর্যালোচনা করতে পারেন।",
"uploadwarning": "আপলোড সতর্কবাণী",
"uploaded-href-attribute-svg": "এসভিজি ফাইলের href বৈশিষ্ট্যগুলির জন্য কেবলমাত্র http:// বা https:// লক্ষ্যগুলি অনুমোদিত; কিন্তু <code><$1 $2=\"$3\"></code> পাওয়া গেছে।",
"uploaded-href-unsafe-target-svg": "অনিরাপদ উপাত্তে href পাওয়া গেছে: আপলোডকৃত SVG ফাইলে URI লক্ষ্য ছিল <code><$1 $2=\"$3\"></code>।",
"uploaded-animate-svg": "\"animate\" ট্যাগটি পাওয়া গেছে যা আপলোডকৃত এসভিজি ফাইলের <code><$1 $2=\"$3\"></code> - এই \"from\" অ্যাট্রিবিউটটি ব্যবহার করে href পরিবর্তন করতে পারে।",
- "uploaded-setting-event-handler-svg": "à¦\87à¦à§\87নà§\8dà¦\9f-হà§\8dযানà§\8dডলার à¦\85à§\8dযাà¦\9fà§\8dরিবিà¦\89à¦\9f সà§\87à¦\9f করতে বাধা দেওয়া হয়েছে। আপলোডকৃত এসভিজি ফাইলে <code><$1 $2=\"$3\"></code> খুঁজে পাওয়া গেছে।",
+ "uploaded-setting-event-handler-svg": "à¦\87à¦à§\87নà§\8dà¦\9f-হà§\8dযানà§\8dডলার à¦\85à§\8dযাà¦\9fà§\8dরিবিà¦\89à¦\9f নিরà§\8dধারণ করতে বাধা দেওয়া হয়েছে। আপলোডকৃত এসভিজি ফাইলে <code><$1 $2=\"$3\"></code> খুঁজে পাওয়া গেছে।",
"uploaded-setting-href-svg": "\"set\" ট্যাগটি ব্যবহার করে \"href\" অ্যাট্রিবিউট পিতৃ-উপাদানে যোগ করতে বাধাদান করা হয়েছে।",
"uploaded-wrong-setting-svg": "\"set\" ট্যাগটি ব্যবহার করে যেকোন অ্যাট্রিবিউটে কোন রিমোট/ডাটা/স্ক্রিপ্ট লক্ষ্য যোগ করতে বাধা দেওয়া হয়েছে। আপলোডকৃত এসভিজি ফাইলে <code><set to=\"$1\"></code> খুঁজে পাওয়া গেছে।",
- "uploaded-setting-handler-svg": "যà§\87 à¦\8fসà¦à¦¿à¦\9cি ফাà¦\87ল রিমà§\8bà¦\9f/ডাà¦\9fা/সà§\8dà¦\95à§\8dরিপà§\8dà¦\9f দিয়à§\87 \"handler\" à¦\85à§\8dযাà¦\9fà§\8dরিবিà¦\89à¦\9fà¦\9fি সà§\87à¦\9f করে, সেটিকে বাধা দেওয়া হয়েছে। আপলোডকৃত এসভিজি ফাইলে <code>$1=\"$2\"</code> খুঁজে পাওয়া গেছে।",
- "uploaded-remote-url-svg": "যà§\87 à¦\8fসà¦à¦¿à¦\9cি ফাà¦\87ল রিমà§\8bà¦\9f à¦\87à¦\89à¦\86রà¦\8fল দিয়à§\87 যà§\87à¦\95à§\8bন শà§\88লà§\80 à¦\85à§\8dযাà¦\9fà§\8dরিবিà¦\89à¦\9fà¦\9f সà§\87à¦\9f করে, সেটিকে বাধা দেওয়া হয়েছে। আপলোডকৃত এসভিজি ফাইলে <code>$1=\"$2\"</code> খুঁজে পাওয়া গেছে।",
+ "uploaded-setting-handler-svg": "যà§\87 à¦\8fসà¦à¦¿à¦\9cি ফাà¦\87ল রিমà§\8bà¦\9f/ডাà¦\9fা/সà§\8dà¦\95à§\8dরিপà§\8dà¦\9f দিয়à§\87 \"handler\" à¦\85à§\8dযাà¦\9fà§\8dরিবিà¦\89à¦\9fà¦\9fি নিরà§\8dধারণ করে, সেটিকে বাধা দেওয়া হয়েছে। আপলোডকৃত এসভিজি ফাইলে <code>$1=\"$2\"</code> খুঁজে পাওয়া গেছে।",
+ "uploaded-remote-url-svg": "যà§\87 à¦\8fসà¦à¦¿à¦\9cি ফাà¦\87ল রিমà§\8bà¦\9f à¦\87à¦\89à¦\86রà¦\8fল দিয়à§\87 যà§\87à¦\95à§\8bন শà§\88লà§\80 à¦\85à§\8dযাà¦\9fà§\8dরিবিà¦\89à¦\9fà¦\9f নিরà§\8dধারণ করে, সেটিকে বাধা দেওয়া হয়েছে। আপলোডকৃত এসভিজি ফাইলে <code>$1=\"$2\"</code> খুঁজে পাওয়া গেছে।",
"uploaded-image-filter-svg": "আপলোডকৃত SVG ফাইলে URL: <code><$1 $2=\"$3\"></code> সহ ছবি পরিশোধক পাওয়া গেছে।",
"uploadscriptednamespace": "এই SVG ফাইলে অবৈধ নামস্থান \"<nowiki>$1</nowiki>\" রয়েছে",
"uploadinvalidxml": "আপলোডকৃত ফাইলে XML পার্স করা যাবে না।",
"backend-fail-describe": "\"$1\" ফাইলের মেটাডাটা পরিবর্তন সম্ভব নয়।",
"backend-fail-alreadyexists": "\"$1\" নামের একটি ফাইল আগে থেকেই রয়েছে।",
"backend-fail-store": "\"$2\"-এ \"$1\" ফাইলটি সংরক্ষন করা সম্ভব নয়।",
- "backend-fail-copy": "\"$1\" ফাà¦\87লà¦\9fি \"$2\"-তà§\87 à¦\85নà§\81লিপি করা সম্ভব নয়।",
+ "backend-fail-copy": "\"$1\" ফাà¦\87লà¦\9fি \"$2\"-à¦\8f পà§\8dরতিলিপি করা সম্ভব নয়।",
"backend-fail-move": "\"$2\"-এ \"$1\" ফাইলটি স্থানান্তর করা সম্ভব নয়।",
"backend-fail-opentemp": "অস্থায়ী ফাইলটি খোলা যাবে না।",
"backend-fail-writetemp": "অস্থায়ী ফাইলটিতে লেখা যাচ্ছে না।",
"backend-fail-usable": "\"$1\" ফাইলটিতে লেখা অথবা ফাইলটি পড়া যাচ্ছে না, কারণ সঠিক অনুমতি নেই অথবা ডিরেক্টরীটি নেই।",
"filejournal-fail-dbconnect": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজের সাথে যুক্ত হওয়া যাচ্ছে না।",
"filejournal-fail-dbquery": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজ হালনাগাদ করা যাচ্ছে না।",
- "lockmanager-notlocked": "\"$1\" à¦\86নলà¦\95 à¦\95রা যাà¦\9aà§\8dà¦\9bà§\87 না; à¦\8fà¦\9fি লà¦\95 à¦\95রা রয়à§\87à¦\9bà§\87।",
+ "lockmanager-notlocked": "\"$1\" à¦\96à§\8bলা যায়নি; à¦\8fà¦\9fিà¦\95à§\87 à¦\85বরà§\81দà§\8dধ à¦\95রা হয়নি।",
"lockmanager-fail-closelock": "\"$1\" ফাইলটি লক করা তাই বন্ধ করা যাচ্ছে না।",
- "lockmanager-fail-deletelock": "\"$1\" লà¦\95 à¦\95রা ফাইলটি অপসারণ সম্ভব নয়।",
+ "lockmanager-fail-deletelock": "\"$1\" à¦\85বরà§\8bধনিরà§\8dদà§\87শà¦\95 ফাইলটি অপসারণ সম্ভব নয়।",
"lockmanager-fail-acquirelock": "\"$1\" লক করা ফাইল খুজে পাওয়া যাচ্ছে না।",
- "lockmanager-fail-openlock": "\"$1\" লà¦\95 à¦\95রা ফাইলটি খোলা সম্ভব নয়।",
+ "lockmanager-fail-openlock": "\"$1\" à¦\8fà¦\87 à¦\85বরà§\8bধনিরà§\8dদà§\87শà¦\95 ফাইলটি খোলা সম্ভব নয়।",
"lockmanager-fail-releaselock": "\"$1\" লক করা ফাইলটি ছাড়া যাচ্ছে না।",
- "lockmanager-fail-db-bucket": "$1 à¦\8fর লà¦\95 à¦\95রা ডাটাবেজের সাথে যোগাযোগ করা যাচ্ছে না।",
+ "lockmanager-fail-db-bucket": "$1 বাà¦\95à§\87à¦\9fà¦\9fিতà§\87 যথà§\87ষà§\8dà¦\9f সà¦\82à¦\96à§\8dযà¦\95 à¦\85বরà§\8bধ ডাটাবেজের সাথে যোগাযোগ করা যাচ্ছে না।",
"lockmanager-fail-db-release": "$1 ডাটাবেজের লক খোলা যাচ্ছে না।",
- "lockmanager-fail-svr-acquire": "$1 সার্ভারের লক পাওয়া যাচ্ছে না।",
+ "lockmanager-fail-svr-acquire": "$1 সার্ভারে তালা পাওয়া যায়নি।",
"lockmanager-fail-svr-release": "$1 ডাটাবেজের লক খোলা যাচ্ছে না।",
"zip-file-open-error": "ফাইলটির জিপ পরীক্ষা করার সময় একটি ত্রুটি দেখা দিয়েছে।",
"zip-wrong-format": "চিহ্নিত ফাইলটি কোনো জিপ ফাইল নয়।",
"duplicatesoffile": "নিচের {{PLURAL:$1|ফাইলটি|$1 ফাইলগুলো}} এই ফাইলের প্রতিলিপি ([[Special:FileDuplicateSearch/$2|বিস্তারিত দেখুন]]):",
"sharedupload": "এই ফাইলটি $1 থেকে নেওয়া হয়েছে এবং এবং অন্যান্য প্রকল্পেও ব্যবহৃত হতে পারে।",
"sharedupload-desc-there": "এই ফাইলটি $1 থেকে দেখানো হচ্ছে এবং হয়তো এটি অন্যান্য প্রকল্পতেও ব্যবহৃত হয়েছে।\nঅনুগ্রহ করে বিস্তারিত জানার জন্য [$2 ফাইলটির বর্ণনা পাতা] দেখুন।",
- "sharedupload-desc-here": "à¦\8fà¦\87 ফাà¦\87লà¦\9fি $1 থà§\87à¦\95à§\87 à¦\86à¦\97ত à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয পà§\8dরà¦\95লà§\8dপà§\87 বà§\8dযবহà§\83ত হতà§\87 পারà§\87।\nসà§\87à¦\96ানà§\87 à¦\85বসà§\8dথিত [$2 ফাà¦\87লà¦\9fির বিবরণ পাতায়] রাà¦\96া বিবরণ নিচে দেখানো হলো।",
+ "sharedupload-desc-here": "à¦\8fà¦\87 ফাà¦\87লà¦\9fি $1 থà§\87à¦\95à§\87 à¦\86à¦\97ত à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয পà§\8dরà¦\95লà§\8dপà§\87 বà§\8dযবহà§\83ত হতà§\87 পারà§\87।\nসà§\87à¦\96ানà§\87 থাà¦\95া [$2 ফাà¦\87লà¦\9fির বিবরণ পাতার] বিবরণ নিচে দেখানো হলো।",
"sharedupload-desc-edit": "এই ফাইলটি $1 থেকে এবং অন্যান্য প্রকল্পে ব্যবহৃত হতে পারে।\n[$2 ফাইলটির বর্ণনা পাতা] থেকে আপনি ফাইলটি বর্ণনা সম্পাদনা করতে পারেন।",
"sharedupload-desc-create": "This file is from $1 and may be used by other projects.\nMaybe you want to edit the description on its [$2 file description page] there.",
"filepage-nofile": "এই নামের কোন ফাইল নেই।",
"filedelete-nofile-old": "নির্দেশিত বৈশিষ্ট্যগুলির জন্য '''$1'''-এর কোন আর্কাইভ সংস্করণ নেই।",
"filedelete-otherreason": "অন্য/বাড়তি কারণ:",
"filedelete-reason-otherlist": "অন্য কারণ",
- "filedelete-reason-dropdown": "*সাধারণ à¦\85পসারণà§\87র à¦\95ারণসমà§\82হ\n** à¦\95পিরাà¦\87à¦\9f লà¦\99à§\8dà¦\98ন\n** ফাà¦\87লà§\87র à¦\85নà§\81লিপি",
+ "filedelete-reason-dropdown": "*à¦\85পসারণà§\87র সাধারণ à¦\95ারণসমà§\82হ\n** à¦\95পিরাà¦\87à¦\9f লà¦\99à§\8dà¦\98ন\n** à¦\85বিà¦\95ল পà§\8dরতিলিপিà¦\95à§\83ত ফাà¦\87ল",
"filedelete-edit-reasonlist": "অপসারণের কারণ সম্পাদনা",
"filedelete-maintenance": "রক্ষণাবেক্ষণের সময় ফাইল অপরাসণ এবং পুনরুদ্ধার সাময়িকভাবে নিস্ক্রিয় রয়েছে।",
"filedelete-maintenance-title": "ফাইলটি অপসারণ করা সম্ভব নয়",
"protectedpages-indef": "শুধুমাত্র অসীম সুরক্ষা",
"protectedpages-summary": "এই পাতাটি বর্তমানে সুরক্ষিত থাকা বিদ্যমান পাতগুলির তালিকা। সৃষ্টি করা থেকে সুরক্ষিত রয়েছে এমন পাতার তালিকার জন্য, [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] দেখুন।",
"protectedpages-cascade": "শুধুমাত্র প্রপাতাকার সুরক্ষা",
- "protectedpages-noredirect": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b লà§\81à¦\95িয়à§\87 রাà¦\96া হà§\8bà¦\95",
+ "protectedpages-noredirect": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b লà§\81à¦\95ান",
"protectedpagesempty": "কোন পাতা বর্তমানে এই প্যারামিটারগুলিসহ সুরক্ষিত নয়।",
"protectedpages-timestamp": "সময়বার্তা",
"protectedpages-page": "পাতা",
"apisandbox": "এপিআই খেলাঘর",
"apisandbox-jsonly": "API খেলাঘর ব্যবহার করতে জাভাস্ক্রিপ্ট প্রয়োজন।",
"apisandbox-api-disabled": "এপিআই এই সাইটে নিষ্ক্রিয় করা আছে।",
- "apisandbox-intro": "<strong>মিডিয়াà¦\89à¦\87à¦\95ি à¦\93য়à§\87ব সà§\87বা à¦\8fপিà¦\86à¦\87</strong> নিয়à§\87 পরà§\80à¦\95à§\8dষানিরà§\80à¦\95à§\8dষা à¦\9aালাতà§\87 à¦\8fà¦\87 পাতাà¦\9fি বà§\8dযবহার à¦\95রà§\81ন। \nà¦\8fপিà¦\86à¦\87 বà§\8dযবহারà§\87র à¦\89পর বিসà§\8dতারিত à¦\9cানতà§\87 [[mw:API:Main page|à¦\8fপিà¦\86à¦\87 ডà¦\95à§\81মà§\87নà§\8dà¦\9fà§\87শন]] দà§\87à¦\96à§\81ন।\nà¦\89দাহরণ: [https://www.mediawiki.org/wiki/API#A_simple_example get the content of a Main Page]। আরও উদাহরণ দেখার জন্য একটি কর্ম নির্বাচন করুন।\n\nলক্ষ করুন যে যদিও এটি একটি খেলাঘর, তা সত্ত্বেও এই পাতায় করা আপনার সম্পাদনাগুলি উইকিতে পরিবর্তন সাধন করতে পারে।",
+ "apisandbox-intro": "<strong>মিডিয়াà¦\89à¦\87à¦\95ি à¦\93য়à§\87ব সà§\87বা à¦\8fপিà¦\86à¦\87</strong> নিয়à§\87 পরà§\80à¦\95à§\8dষানিরà§\80à¦\95à§\8dষা à¦\9aালাতà§\87 à¦\8fà¦\87 পাতাà¦\9fি বà§\8dযবহার à¦\95রà§\81ন। \nà¦\8fপিà¦\86à¦\87 বà§\8dযবহারà§\87র à¦\89পর বিসà§\8dতারিত à¦\9cানতà§\87 [[mw:API:Main page|à¦\8fপিà¦\86à¦\87 নথিপতà§\8dর]] দà§\87à¦\96à§\81ন।\nà¦\89দাহরণ: [https://www.mediawiki.org/wiki/API#A_simple_example পà§\8dরধান পাতার বিষয়বসà§\8dতà§\81 পান]। আরও উদাহরণ দেখার জন্য একটি কর্ম নির্বাচন করুন।\n\nলক্ষ করুন যে যদিও এটি একটি খেলাঘর, তা সত্ত্বেও এই পাতায় করা আপনার সম্পাদনাগুলি উইকিতে পরিবর্তন সাধন করতে পারে।",
"apisandbox-fullscreen": "প্যানেল সম্প্রসারণ করুন",
"apisandbox-fullscreen-tooltip": "ব্রাউজারের উইন্ডো পূরণ করতে খেলাঘরের প্যানেল প্রসারিত করুন।",
"apisandbox-unfullscreen": "পাতা দেখাও",
"magiclink-tracking-isbn": "আইএসবিএন জাদু সংযোগ ব্যবহার করা পাতা",
"magiclink-tracking-isbn-desc": "এই পাতাটি আইএসবিএন যাদু সংযোগ ব্যবহার করে। কিভাবে মাইগ্রেট করবেন জানতে [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] দেখুন।",
"specialloguserlabel": "সম্পাদক:",
- "speciallogtitlelabel": "লà¦\95à§\8dষà§\8dয (শিরà§\8bনাম বা {{ns:user}}:বà§\8dযবহারà¦\95ারà§\80র à¦\9cনà§\8dয ব্যবহারকারী নাম):",
+ "speciallogtitlelabel": "লà¦\95à§\8dষà§\8dয (বà§\8dযবহারà¦\95ারà§\80র à¦\9cনà§\8dয শিরà§\8bনাম বা {{ns:user}}:ব্যবহারকারী নাম):",
"log": "লগগুলি",
"logeventslist-submit": "দেখাও",
"all-logs-page": "সব প্রকাশ্য লগ",
"allpagesprefix": "এই উপসর্গবিশিষ্ট পাতাগুলো দেখাও:",
"allpagesbadtitle": "প্রদত্ত পাতার শিরোনামটি অবৈধ ছিল অথবা এটিতে কোন আন্তঃভাষা বা আন্তঃউইকি উপসর্গ ছিল। এটিতে এক বা একাধিক ক্যারেক্টার থাকতে পারে যা শিরোনামে ব্যবহার করা সম্ভব নয়।",
"allpages-bad-ns": "{{SITENAME}}-এ \"$1\" নামের কোন নামস্থান নেই।",
- "allpages-hide-redirects": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b লà§\81à¦\95িয়à§\87 রাà¦\96া হà§\8bà¦\95",
+ "allpages-hide-redirects": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b লà§\81à¦\95ান",
"cachedspecial-viewing-cached-ttl": "আপনি এই পৃষ্ঠায় একটি ক্যাশে সংস্করণ দেখছেন, যা $1 দিনের পুরানো হতে পারে।",
"cachedspecial-viewing-cached-ts": "আপনি এই পৃষ্ঠায় একটি ক্যাশে সংস্করণ দেখছেন, যা সম্পূর্ণরূপে হালনাগাদকৃত নাও হতে পারে।",
"cachedspecial-refresh-now": "সাম্প্রতিকগুলো প্রদর্শন করো।",
"activeusers-excludegroups": "এই দলভুক্ত ব্যবহারকারী বাদ দিন:",
"activeusers-noresult": "কোনো ব্যবহারকারী পাওয়া যায়নি।",
"activeusers-submit": "সক্রিয় ব্যবহারকারী প্রদর্শন করুন",
- "listgrouprights": "ব্যবহারকারী দল অনুযায়ী অধিকার",
+ "listgrouprights": "ব্যবহারকারীর দলগত অধিকার",
"listgrouprights-summary": "এই উইকিতে সংজ্ঞায়িত ব্যবহারকারী দলগুলির একটি তালিকা নিচে দেখানো হচ্ছে, সাথে দলের সাথে সংশ্লিষ্ট অধিকারসমূহও উল্লেখ করা হয়েছে।\nনির্দিষ্ট ব্যক্তির অধিকারগুলি সম্পর্কে [[{{MediaWiki:Listgrouprights-helppage}}|অতিরিক্ত তথ্য]] থাকতে পারে।",
"listgrouprights-key": "ব্যাখ্যা:\n* <span class=\"listgrouprights-granted\">অনুমোদিত অধিকার</span>\n* <span class=\"listgrouprights-revoked\">প্রত্যাহারকৃত অধিকার</span>",
"listgrouprights-group": "দল",
"emailsubject": "বিষয়:",
"emailmessage": "বার্তা:",
"emailsend": "প্রেরণ করো",
- "emailccme": "à¦\86মার বারà§\8dতার à¦\8fà¦\95à¦\9fি à¦\85নà§\81লিপি à¦\86মাà¦\95à§\87 à¦\87-মেইল করা হোক।",
- "emailccsubject": "আপনার বার্তার অনুলিপি $1-কে: $2",
+ "emailccme": "à¦\86মার বারà§\8dতার à¦\8fà¦\95à¦\9fি পà§\8dরতিলিপি à¦\86মাà¦\95à§\87 à¦\87মেইল করা হোক।",
+ "emailccsubject": "$1-কে আপনার বার্তার প্রতিলিপি: $2",
"emailsent": "ই-মেইল প্রেরণ করা হয়েছে",
"emailsenttext": "আপনার ই-মেইল বার্তা প্রেরণ করা হয়েছে।",
"emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailuser}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে {{GENDER:$2|$2}}-এর নিকট {{GENDER:$1|পাঠানো হয়েছে}}। যদি {{GENDER:$2|আপনি}} এই ইমেইলটির উত্তর দেন, তাহলে {{GENDER:$2|আপনার}} উত্তরের ইমেইলটি সরাসরি {{GENDER:$1|মূল প্রেরকের}} কাছে পাঠানো হবে, সেই সাথে {{GENDER:$2|আপনার}} ইমেল ঠিকানা {{GENDER:$1|তাঁর}} কাছে প্রকাশ করা হবে।",
"deletecomment": "কারণ:",
"deleteotherreason": "অন্য/অতিরিক্ত কারণ:",
"deletereasonotherlist": "অন্য কারণ",
- "deletereason-dropdown": "*মà§\81à¦\9bà§\87 ফà§\87লার সাধারণ à¦\95ারণà¦\97à§\81লি\n** à¦\85বাà¦\9eà§\8dà¦\9bিত পà§\81নরাবà§\83তà§\8dত সমà§\8dপাদনা (spam)\n** ধ্বংসপ্রবণতা\n** কপিরাইট ভঙ্গ\n** লেখকের অনুরোধ\n** অকার্যকর পুনঃনির্দেশ",
+ "deletereason-dropdown": "*মà§\81à¦\9bà§\87 ফà§\87লার সাধারণ à¦\95ারণà¦\97à§\81লি\n** সà§\8dপà§\8dযাম\n** ধ্বংসপ্রবণতা\n** কপিরাইট ভঙ্গ\n** লেখকের অনুরোধ\n** অকার্যকর পুনঃনির্দেশ",
"delete-edit-reasonlist": "অপসারণের কারণ সম্পাদনা",
"delete-toobig": "এই পাতার সম্পাদনার ইতিহাস অনেক বড়, যা $1টি {{PLURAL:$1|সংস্করণের|সংস্করণের}} বেশি।\n{{SITENAME}}-এর দূর্ঘটনাজনিত সমস্যা এড়াতে এই ধরনের পাতা মুছার ব্যপারে সীমাবদ্ধতা আরোপিত হয়েছে।",
"delete-warning-toobig": "এই পাতাটির একটি বৃহৎ সম্পাদনা ইতিহাস রয়েছে, যা $1 {{PLURAL:$1|সংস্করণেরও|সংস্করণেরও}} বেশি।\nএই পাতাটি মুছে ফেললে তা {{SITENAME}} সাইটের ডেটাবেজ সমস্যার কারণ হতে পারে;\nসাবধানতার সাথে এগিয়ে যান।",
"changecontentmodel-submit": "পরিবর্তন করুন",
"changecontentmodel-success-title": "বিষয়বস্তুর প্রতিরূপ পরিবর্তিত হয়েছিলো",
"changecontentmodel-success-text": "[[:$1]]-এর বিষয়বস্তুর ধরণ পরিবর্তন হয়েছে।",
- "changecontentmodel-cannot-convert": "[[:$1]] নামà§\87র পাতার বিষয়বসà§\8dতà§\81 $2 নামà¦\95 সà§\8dথানà§\80য়à¦\95à§\83ত ধরনে রূপান্তরিত করা সম্ভব নয়।",
+ "changecontentmodel-cannot-convert": "[[:$1]] পাতার বিষয়বসà§\8dতà§\81 $2-à¦\8fর ধরনে রূপান্তরিত করা সম্ভব নয়।",
"changecontentmodel-nodirectediting": "$1 বিষয়বস্তুর রূপ সরাসরি সম্পাদনা করা সমর্থন করে না",
"changecontentmodel-emptymodels-title": "কোন বিষয়বস্তুর রূপ উপলব্ধ নয়",
- "changecontentmodel-emptymodels-text": "[[:$1]] নামà§\87র পাতার বিষয়বসà§\8dতà§\81 à¦\95à§\8bন রà¦\95মà§\87র বিষà¦\87য়বসà§\8dতà§\81 ধরনেই রূপান্তরিত করা সম্ভব নয়।",
+ "changecontentmodel-emptymodels-text": "[[:$1]] পাতার বিষয়বসà§\8dতà§\81 à¦\95à§\8bন ধরনেই রূপান্তরিত করা সম্ভব নয়।",
"log-name-contentmodel": "বিষয়বস্তুর রূপ পরিবর্তন লগ",
"log-description-contentmodel": "এই পাতাতে পাতাগুলির বিষয়বস্তুর মডেলের পরিবর্তনের একটি তালিকা আছে। এছাড়াও পূর্বনির্ধারিত মডেল ব্যতীত অন্য মডেলে তৈরি করা পাতাগুলিও তালিকাতে দেওয়া আছে।",
- "logentry-contentmodel-new": "$1 পূর্বনির্ধারিত নয় এমন একটি বিষয়বস্তু মডেল \"$5\" ব্যবহার $3 নামের পাতাটি {{GENDER:$2|তৈরি করেছেন}}",
+ "logentry-contentmodel-new": "$1 পূর্বনির্ধারিত নয় এমন একটি বিষয়বস্তুর রূপ \"$5\" ব্যবহার $3 পাতাটি {{GENDER:$2|তৈরি করেছেন}}",
"logentry-contentmodel-change": "$1 $3 পাতার বিষয়বস্তুর রূপ \"$4\" থেকে \"$5\"-এ {{GENDER:$2|পরিবর্তন করেছেন}}",
"logentry-contentmodel-change-revertlink": "প্রত্যাবর্তন",
"logentry-contentmodel-change-revert": "প্রত্যাবর্তন",
"protectexpiry": "মেয়াদোত্তীর্ণ হবে:",
"protect_expiry_invalid": "মেয়াদোত্তীর্ণ সময় অবৈধ।",
"protect_expiry_old": "মেয়াদোত্তীর্ণ সময় অতীতে অবস্থিত।",
- "protect-unchain-permissions": "সুরক্ষা-সংক্রান্ত অন্যান্য পছন্দগুলি দেখার জন্য তালা খুলুন",
+ "protect-unchain-permissions": "সুরক্ষার অন্যান্য পছন্দগুলি দেখার জন্য তালা খুলুন",
"protect-text": "'''$1''' পাতাটির জন্য সুরক্ষার স্তর আপনি এখানে দেখতে ও পরিবর্তন করতে পারেন।",
"protect-locked-blocked": "বাধাপ্রাপ্ত অবস্থায় আপনি পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারবেন না। এখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
- "protect-locked-dblock": "ডাà¦\9fাবà§\87à¦\9c বন্ধ থাকায় সুরক্ষা স্তর পরিবর্তন করা যাবে না।\nএখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
+ "protect-locked-dblock": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ থাকায় সুরক্ষা স্তর পরিবর্তন করা যাবে না।\nএখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
"protect-locked-access": "আপনার অ্যাকাউন্ট থেকে পাতার সুরক্ষা স্তর পরিবর্তন করার অনুমতি নেই।\nএখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
"protect-cascadeon": "এই পাতাটি বর্তমানে সুরক্ষিত আছে, কারণ পাতাটি নিচের {{PLURAL:$1|পাতায়|পাতাগুলিতে}} অন্তর্ভুক্ত, {{PLURAL:$1|যাতে|যেগুলিতে}} প্রপাতাকার সুরক্ষা চালু আছে। আপনি এই পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারেন, তবে এটি প্রপাতাকার সুরক্ষাটিতে কোন পরিবর্তন সাধন করবে না।",
"protect-default": "সমস্ত ব্যবহারকারীর জন্য",
"pagesize": "(বাইট)",
"restriction-edit": "সম্পাদনা",
"restriction-move": "সরিয়ে নেওয়া",
- "restriction-create": "সà§\83ষà§\8dà¦\9fি à¦\95রা হà§\8bà¦\95",
+ "restriction-create": "তà§\88রি à¦\95রà§\81ন",
"restriction-upload": "আপলোড",
"restriction-level-sysop": "সম্পূর্ণ সুরক্ষিত",
"restriction-level-autoconfirmed": "অর্ধ-সুরক্ষিত",
"ipaddressorusername": "আইপি ঠিকানা বা ব্যবহারকারীর নাম:",
"ipbexpiry": "যখন মেয়াদোত্তীর্ণ হবে:",
"ipbreason": "কারণ:",
- "ipbreason-dropdown": "*বাধা দানà§\87র সাধারণ à¦\95ারণà¦\97à§\81লি\n** মিথà§\8dযা তথà§\8dয পà§\8dরবিষà§\8dà¦\9f à¦\95রা\n** পাতা থà§\87à¦\95à§\87 বিষয়বসà§\8dতà§\81 মà§\81à¦\9bà§\87 ফà§\87লা\n** à¦\85বাà¦\9eà§\8dà¦\9bিত বহিà¦\83সà§\8dথ à¦\95à§\8bন সাà¦\87à¦\9fà§\87র পà§\8dরতি সà¦\82যà§\8bà¦\97 বারà¦\82বার যà§\8bà¦\97 à¦\95রা\n** পাতাà¦\97à§\81লিতà§\87 à¦\85রà§\8dথহà§\80ন বিষয়বসà§\8dতà§\81 পà§\8dরবিষà§\8dà¦\9f করা\n** ভীতি উদ্রেককারী আচরণ/হয়রানি\n** একাধিক অ্যাকাউন্টের অপব্যবহার\n** ব্যবহারকারী নাম অগ্রহণযোগ্য",
+ "ipbreason-dropdown": "*বাধা দানà§\87র সাধারণ à¦\95ারণà¦\97à§\81লি\n** মিথà§\8dযা তথà§\8dয যà§\8bà¦\97 à¦\95রা\n** পাতা থà§\87à¦\95à§\87 বিষয়বসà§\8dতà§\81 মà§\81à¦\9bà§\87 ফà§\87লা\n** à¦\85বাà¦\9eà§\8dà¦\9bিত বহিà¦\83সà§\8dথ à¦\95à§\8bন সাà¦\87à¦\9fà§\87র পà§\8dরতি সà¦\82যà§\8bà¦\97 বারà¦\82বার যà§\8bà¦\97 à¦\95রা\n** পাতাà¦\97à§\81লিতà§\87 à¦\85রà§\8dথহà§\80ন বিষয়বসà§\8dতà§\81 যà§\8bà¦\97 করা\n** ভীতি উদ্রেককারী আচরণ/হয়রানি\n** একাধিক অ্যাকাউন্টের অপব্যবহার\n** ব্যবহারকারী নাম অগ্রহণযোগ্য",
"ipb-hardblock": "এই আইপি ঠিকানা থেকে লগ-ইনকৃত ব্যবহারকারীদেরকে সম্পাদনায় বাধা দাও",
"ipbcreateaccount": "অ্যাকাউন্ট সৃষ্টিতে বাধা দেওয়া হোক",
"ipbemailban": "ব্যবহারকারীকে ই-মেইল পাঠাতে বাধা দেওয়া হোক",
"cant-see-hidden-user": "আপনি যে ব্যবহারকারীকে ব্লক বা লুকিয়ে রাখতে চাচ্ছেন তাকে আগে থেকেই ব্লক বা লুকিয়ে রাখা হয়েছে। এছাড়া আপনার Hideuser অধিকার নেই, তাই আপনি ব্যবহারকারীর অবস্থা পরিবর্তন করতে পারবেন না।",
"ipbblocked": "আপনি অন্য কোন ব্যবহারকরীকে ব্লক বা আনব্লক করতে পারবেন না, কারণ আপনি নিজেই ব্লক রয়েছেন",
"ipbnounblockself": "আপনি নিজেকে আনব্লক করতে পারবেন না",
- "lockdb": "ডাà¦\9fাবà§\87à¦\9c বন্ধ করে দেওয়া হোক",
+ "lockdb": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ করে দেওয়া হোক",
"unlockdb": "ডাটাবেজ খুলে দেওয়া হোক",
- "lockdbtext": "ডাà¦\9fাবà§\87à¦\9c বনà§\8dধ à¦\95রà§\87 দিলà§\87 à¦\95à§\8bন বà§\8dযবহারà¦\95ারà§\80 পাতা সমà§\8dপাদনা à¦\95রতà§\87, তাদà§\87র পà¦\9bনà§\8dদ পরিবরà§\8dতন à¦\95রতà§\87, তাদà§\87র নà¦\9cরতালিà¦\95া সমà§\8dপাদনা à¦\95রতà§\87, এবং ডাটাবেজে পরিবর্তন আনে এমন কোন কিছু করতে পারবেন না।\nঅনুগ্রহ করে নিশ্চিত করুন যে আপনি এটাই করতে চান, এবং আপনার রক্ষণাবেক্ষণ শেষ হবার পর ডাটাবেজ আবার খুলে দেবেন।",
+ "lockdbtext": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রà§\87 দিলà§\87 à¦\95à§\8bনà§\8b বà§\8dযবহারà¦\95ারà§\80à¦\87 পাতা সমà§\8dপাদনা à¦\95রতà§\87, তাদà§\87র পà¦\9bনà§\8dদ পরিবরà§\8dতন à¦\95রতà§\87, তাদà§\87র নà¦\9cরতালিà¦\95া সমà§\8dপাদনা à¦\95রতà§\87 এবং ডাটাবেজে পরিবর্তন আনে এমন কোন কিছু করতে পারবেন না।\nঅনুগ্রহ করে নিশ্চিত করুন যে আপনি এটাই করতে চান, এবং আপনার রক্ষণাবেক্ষণ শেষ হবার পর ডাটাবেজ আবার খুলে দেবেন।",
"unlockdbtext": "ডাটাবেজ খুলে দিলে সব ব্যবহারকারী পাতা সম্পাদনা করতে, তাদের পছন্দ পরিবর্তন করতে, তাদের নজরতালিকা সম্পাদনা করতে, এবং ডাটাবেজে পরিবর্তন সাধন করে, এমন অন্যান্য কাজ করতে পারবেন।\nঅনুগ্রহ করে নিশ্চিত করুন যে আপনি এটাই করতে চান।",
- "lockconfirm": "হà§\8dযাà¦\81, à¦\86মি à¦\86সলà§\87à¦\87 ডাà¦\9fাবà§\87à¦\9c বনà§\8dধ à¦\95রতে চাই।",
+ "lockconfirm": "হà§\8dযাà¦\81, à¦\86মি à¦\86সলà§\87à¦\87 ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রà§\87 দিতে চাই।",
"unlockconfirm": "হ্যাঁ, আমি আসলেই ডাটাবেজ খুলে দিতে চাই।",
- "lockbtn": "ডাà¦\9fাবà§\87à¦\9c বন্ধ করা হোক",
+ "lockbtn": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ করা হোক",
"unlockbtn": "ডাটাবেজ খুলে দেওয়া হোক",
"locknoconfirm": "আপনি নিশ্চিতকরণ বাক্সে টিক দেননি।",
- "lockdbsuccesssub": "ডাà¦\9fাবà§\87à¦\9c সফলà¦à¦¾à¦¬à§\87 বন্ধ করে দেওয়া হয়েছে",
+ "lockdbsuccesssub": "ডাà¦\9fাবà§\87à¦\9c সফলà¦à¦¾à¦¬à§\87 à¦\85বরà§\81দ্ধ করে দেওয়া হয়েছে",
"unlockdbsuccesssub": "ডাটাবেজ খুলে দেওয়া হয়েছে",
- "lockdbsuccesstext": "ডাà¦\9fাবà§\87à¦\9c বন্ধ করা হয়েছে\n<br />আপনার রক্ষণাবেক্ষণ সম্পন্ন হবার পর [[Special:UnlockDB|ডাটাবেজ খুলে দিতে]] ভুলবেন না।",
+ "lockdbsuccesstext": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ করা হয়েছে\n<br />আপনার রক্ষণাবেক্ষণ সম্পন্ন হবার পর [[Special:UnlockDB|ডাটাবেজ খুলে দিতে]] ভুলবেন না।",
"unlockdbsuccesstext": "ডাটাবেজ খুলে দেওয়া হয়েছে।",
- "lockfilenotwritable": "ডাà¦\9fাবà§\87à¦\9c বনà§\8dধ à¦\95রার ফাà¦\87লà¦\9fি লিà¦\96নযà§\8bà¦\97à§\8dয নয়। ডাà¦\9fাবà§\87à¦\9c বন্ধ করতে বা খুলতে চাইলে ফাইলটিকে ওয়েব সার্ভার কর্তৃক লিখনযোগ্য হতে হবে।",
- "databaselocked": "ডাà¦\9fাবà§\87সà¦\9fি à¦\87তিমধà§\8dযà§\87à¦\87 তালাবদ্ধ।",
+ "lockfilenotwritable": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\8bধনিরà§\8dদà§\87শà¦\95 ফাà¦\87লà¦\9fি লিà¦\96নযà§\8bà¦\97à§\8dয নয়। ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ করতে বা খুলতে চাইলে ফাইলটিকে ওয়েব সার্ভার কর্তৃক লিখনযোগ্য হতে হবে।",
+ "databaselocked": "ডাà¦\9fাবà§\87à¦\9cà¦\9fি à¦\87তিমধà§\8dযà§\87à¦\87 à¦\85বরà§\81দ্ধ।",
"databasenotlocked": "ডাটাবেজ বন্ধ নয়।",
"lockedbyandtime": "({{GENDER:$1|$1}} $2 এর $3 সময়ে)",
"move-page": "$1 স্থানান্তর",
"import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nঅন্যান্য উইকি থেকে সমস্ত আমদানি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
"import-interwiki-sourcewiki": "উত্স উইকি:",
"import-interwiki-sourcepage": "উৎস পাতা:",
- "import-interwiki-history": "à¦\8fà¦\87 পাতার সমসà§\8dত à¦\87তিহাসà§\87র সà¦\82সà§\8dà¦\95রণà§\87র à¦\85নà§\81লিপি করা হোক",
+ "import-interwiki-history": "à¦\8fà¦\87 পাতার à¦\87তিহাসà§\87র সমসà§\8dত সà¦\82সà§\8dà¦\95রণà§\87র পà§\8dরতিলিপি করা হোক",
"import-interwiki-templates": "সকল টেম্পলেট অন্তর্ভুক্ত",
"import-interwiki-submit": "আমদানি",
"import-mapping-default": "পূর্বনির্ধারিত অবস্থানে আমদানি করুন",
"import-error-special": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
"import-error-invalid": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ নামটি সঠিক নয়।",
"import-error-unserialize": "$1 পাতার $2 সংস্করণটি সিরিয়ালাইজ করা যাচ্ছে না। এই রিভিশনে $4 হিসাবে $3 কন্টেন্ট মডেলে সিরিয়ালাইজ করা আছে।",
- "import-error-bad-location": "বিষয়বসà§\8dতà§\81 মডà§\87ল $3 বà§\8dযবহার à¦\95রà§\87 সমà§\8dপাদিত $2 নà¦\82 সà¦\82শà§\8bধনà¦\9fি \"$1\" নামà§\87র পাতায় সà¦\82রà¦\95à§\8dষণ à¦\95রা যাবà§\87 না, à¦\95ারণ à¦\90 মডà§\87লà¦\9fি à¦\90 পাতাতà§\87 পà§\8dরযà§\8bà¦\9cà§\8dয নয়।",
+ "import-error-bad-location": "বিষয়বস্তু মডেল $3 ব্যবহার করে সম্পাদিত $2 নং সংশোধনটি \"$1\" পাতায় সংরক্ষণ করা যাবে না, কারণ ঐ মডেলটি ঐ পাতাতে প্রযোজ্য নয়।",
"import-options-wrong": "{{PLURAL:$2|পছন্দ}} নির্বাচনে ভুল: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "মূল পাতার ভুল শিরনাম দেয়া হয়েছে।",
"import-rootpage-nosubpage": "মূল পাতার \"$1\" নামস্থানে উপপাতা তৈরী অনুমোদিত নয়।",
"tooltip-ca-nstab-help": "সাহায্য পাতাটি দেখুন",
"tooltip-ca-nstab-category": "বিষয়শ্রেণী পাতাটি দেখুন",
"tooltip-minoredit": "এটিকে অনুল্লেখ্য সম্পাদনা হিসেবে চিহ্নিত করা হোক",
- "tooltip-save": "à¦\86পনার পরিবরà§\8dতনà¦\97à§\81লি সà¦\82রà¦\95à§\8dষিত হà§\8bà¦\95",
+ "tooltip-save": "à¦\86পনার পরিবরà§\8dতনà¦\97à§\81লি সà¦\82রà¦\95à§\8dষিত à¦\95রà§\81ন",
"tooltip-publish": "আপনার পরিবর্তন প্রকাশ করুন",
"tooltip-preview": "অনুগ্রহ করে সংরক্ষণের আগে আপনার পরিবর্তনগুলি প্রাকদর্শন করুন!",
- "tooltip-diff": "à¦\86পনি à¦\9fà§\87à¦\95à§\8dসà¦\9fà§\87 à¦\95à§\80 à¦\95à§\80 পরিবরà§\8dতন à¦\95রà§\87à¦\9bà§\87ন, তা দà§\87à¦\96ানà§\8b হà§\8bà¦\95।",
+ "tooltip-diff": "লà§\87à¦\96ায় à¦\95à§\80 à¦\95à§\80 পরিবরà§\8dতন à¦\95রà§\87à¦\9bà§\87ন তা দà§\87à¦\96à§\81ন",
"tooltip-compareselectedversions": "এই পাতার দুইটি নির্বাচিত সংস্করণের মধ্যে তুলনা দেখুন।",
"tooltip-watch": "এই পাতাটি আমার নজরতালিকায় যোগ করো",
"tooltip-watchlistedit-normal-submit": "শিরোনাম অপসারণ",
"anonusers": "{{SITENAME}} বেনামী {{PLURAL:$2|ব্যবহারকারী|ব্যবহারকারীগণ}} $1",
"creditspage": "পাতার স্বীকৃতি",
"nocredits": "এই পাতাটির জন্য কোন কৃতিত্ব-সম্পর্কিত তথ্য নেই।",
- "spamprotectiontitle": "à¦\85বাà¦\9eà§\8dà¦\9bিত পà§\81নরাবà§\83তà§\8dত সমà§\8dপাদনা (spam) প্রতিরক্ষা ছাঁকনি",
- "spamprotectiontext": "à¦\86পনি যà§\87 পাতাà¦\9fি সà¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦\9aà§\87য়à§\87à¦\9bà§\87ন, তা à¦\85বাà¦\9eà§\8dà¦\9bিত পà§\81নরাবà§\83তà§\8dত সমà§\8dপাদনার ছাঁকনি বাধা দিয়েছে। সম্ভবত কালোতালিকাভুক্ত বহিঃস্থ কোন সাইটের সংযোগের কারণে এমনটি ঘটেছে।",
- "spamprotectionmatch": "নিà¦\9aà§\87র à¦\9fà§\87à¦\95à§\8dসà¦\9fà¦\9fি à¦\86মাদà§\87র à¦\85বাà¦\9eà§\8dà¦\9bিত পà§\81নরাবà§\83তà§\8dত সমà§\8dপাদনার ছাঁকনিকে সক্রিয় করেছে: $1",
- "spambot_username": "মিডিয়াà¦\89à¦\87à¦\95ি à¦\85বাà¦\9eà§\8dà¦\9bিত পà§\81নরাবà§\83তà§\8dত সমà§\8dপাদনা পরিস্কার",
+ "spamprotectiontitle": "সà§\8dপà§\8dযাম প্রতিরক্ষা ছাঁকনি",
+ "spamprotectiontext": "à¦\86পনি যà§\87 পাতাà¦\9fি সà¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦\9aà§\87য়à§\87à¦\9bà§\87ন, তা সà§\8dপà§\8dযাম ছাঁকনি বাধা দিয়েছে। সম্ভবত কালোতালিকাভুক্ত বহিঃস্থ কোন সাইটের সংযোগের কারণে এমনটি ঘটেছে।",
+ "spamprotectionmatch": "নিà¦\9aà§\87র লà§\87à¦\96াà¦\9fি à¦\86মাদà§\87র সà§\8dপà§\8dযাম ছাঁকনিকে সক্রিয় করেছে: $1",
+ "spambot_username": "মিডিয়াà¦\89à¦\87à¦\95ি সà§\8dপà§\8dযাম পরিস্কার",
"spam_reverting": "$1-এর প্রতি কোন সংযোগ নেই, এমন সর্বশেষ সংস্করণে ফেরত নেওয়া হচ্ছে।",
"spam_blanking": "$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন খালি করা হচ্ছে",
"spam_deleting": "$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন অপসারণ করা হচ্ছে",
"metadata": "অধি-উপাত্ত",
"metadata-help": "এই ফাইলে অতিরিক্ত কিছু তথ্য আছে। সম্ভবত যে ডিজিটাল ক্যামেরা বা স্ক্যানারের মাধ্যমে এটি তৈরি বা ডিজিটায়িত করা হয়েছিল, সেটি কর্তৃক তথ্যগুলি যুক্ত হয়েছে। যদি ফাইলটি তার আদি অবস্থা থেকে পরিবর্তিত হয়ে থাকে, কিছু কিছু বিবরণ পরিবর্তিত ফাইলটির জন্য প্রযোজ্য না-ও হতে পারে।",
"metadata-expand": "সম্প্রসারিত সবিস্তারে দেখাও",
- "metadata-collapse": "সমà§\8dপà§\8dরসারিত বিসà§\8dতারিত বিবরণ লà§\81à¦\95ানà§\8b হà§\8bà¦\95",
- "metadata-fields": "à¦\8fà¦\87 বারà§\8dতায় তালিà¦\95াà¦à§\81à¦\95à§\8dত à¦\9aিতà§\8dর মà§\87à¦\9fাডাà¦\9fা à¦\95à§\8dষà§\87তà§\8dরà¦\97à§\81লি à¦\9bবির পাতায় পà§\8dরদরà§\8dশন à¦\95রা হবà§\87, যà¦\96ন à¦\85ধি-à¦\89পাতà§\8dত সারণিটি সংকুচিত করা হবে। অন্য ক্ষেত্রগুলি স্বাভাবিক অবস্থায় লুকায়িত থাকবে।\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-collapse": "সমà§\8dপà§\8dরসারিত বিবরণ দà§\87à¦\96ান",
+ "metadata-fields": "à¦\8fà¦\87 বারà§\8dতায় তালিà¦\95াà¦à§\81à¦\95à§\8dত à¦\9aিতà§\8dর মà§\87à¦\9fাডাà¦\9fা à¦\95à§\8dষà§\87তà§\8dরà¦\97à§\81লি à¦\9bবির পাতায় পà§\8dরদরà§\8dশন à¦\95রা হবà§\87, যà¦\96ন মà§\87à¦\9fাডাà¦\9fা সারণিটি সংকুচিত করা হবে। অন্য ক্ষেত্রগুলি স্বাভাবিক অবস্থায় লুকায়িত থাকবে।\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "চওড়া",
"exif-imagelength": "লম্বা",
"exif-bitspersample": "উপাদানপ্রতি বিট",
"version-specialpages": "বিশেষ পাতাসমূহ",
"version-parserhooks": "পার্সার হুক",
"version-variables": "চলক",
- "version-antispam": "à¦\85বাà¦\9eà§\8dà¦\9bিত পà§\81নরাবà§\83তà§\8dত সমà§\8dপাদনা প্রতিরোধ",
+ "version-antispam": "সà§\8dপà§\8dযাম প্রতিরোধ",
"version-other": "অন্য",
"version-mediahandlers": "মিডিয়া ব্যবস্থাপক",
"version-hooks": "হুক",
"version-license-not-found": "এই এক্সটেনশনের জন্য কোনো বিস্তারিত লাইসেন্স তথ্য পাওয়া যায়নি।",
"version-credits-title": "$1-এর জন্য কৃতিত্ব",
"version-credits-not-found": "এই এক্সটেনশনটির জন্য কোনো বিস্তারিত কৃতিত্ব তথ্য পাওয়া যায়নি।",
- "version-poweredby-credits": "এই উইকিটি পরিচালিত হচ্ছে <strong>[https://www.mediawiki.org/ মিডিয়াউইকি]</strong> -এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
+ "version-poweredby-credits": "এই উইকিটি <strong>[https://www.mediawiki.org/ মিডিয়াউইকির]</strong> মাধ্যমে পরিচালিত হচ্ছে, কপিরাইট © ২০০১-$1 $2।",
"version-poweredby-others": "অন্যান্য",
"version-poweredby-translators": "translatewiki.net অনুবাদকগণ",
"version-credits-summary": "[[Special:Version|মিডিয়াউইকি]] সফটওয়্যারে অবদানের জন্য আমরা এই ব্যক্তিকে স্বীকৃতি দিতে চাই।",
- "version-license-info": "মিডিয়াà¦\89à¦\87à¦\95ি à¦\8fà¦\95à¦\9fি ফà§\8dরি সফà¦\9fà¦\93য়à§\8dযার; à¦\86পনি à¦\8fà¦\9fি বিতরণ à¦\95রতà§\87 পারবà§\87ন à¦\8fবà¦\82/à¦\85থবা সমà§\8dপদানা à¦\95রতà§\87 পারবà§\87ন, à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 ফà§\8dরি সফà¦\9fà¦\93য়à§\8dযার ফাà¦\89নà§\8dডà§\87শনà§\87র পà§\8dরà¦\95াশিত à¦\97নà§\81 à¦\9cà§\87নারà§\87ল পাবলিà¦\95 লাà¦\87সà§\87নà§\8dসà§\87র ২য় à¦\85থবা সামà§\8dপà§\8dরতিà¦\95তম à¦\95à§\8bনà§\8b সà¦\82সà§\8dà¦\95রণ মà§\87নà§\87 à¦\9aলতà§\87 হবà§\87। \n\nসà¦\95লà§\87র à¦\89পà¦\95ারà§\87র লà¦\95à§\8dষà§\8dযà§\87 à¦\8fà¦\9fি বিতরণ à¦\95রা হয়à§\87 থাà¦\95à§\87, à¦\95িনà§\8dতà§\81 à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦\95à§\8bনà§\8b à¦\93য়ারà§\87নà§\8dà¦\9fি দà§\87য়া হয় না, à¦\8fমনà¦\95ি বিশà§\87ষ à¦\95à§\8bনà§\8b à¦\95ারà§\8dযà¦\95à§\8dষà§\87তà§\8dরà§\87 বà§\8dযবহারà§\87র à¦\9cনà§\8dযà¦\93 তথাà¦\95থিত à¦\93য়ারà§\87নà§\8dà¦\9fি দà§\87য়া হয় না। বিসà§\8dতারিত à¦\9cানতà§\87 দà§\87à¦\96à§\81ন à¦\97নà§\81 à¦\9cà§\87নারà§\87ল পাবলিà¦\95 লাà¦\87সà§\87নà§\8dস। \n\nà¦\8fà¦\87 সফà¦\9fà¦\93য়à§\8dযারà§\87র সাথà§\87 [{{SERVER}}{{SCRIPTPATH}}/COPYING à¦\97নà§\81 à¦\9cà§\87নারà§\87ল পাবলিà¦\95 লাà¦\87সà§\87নà§\8dসà§\87র à¦\8fà¦\95à¦\9fি à¦\85নà§\81লিপি] থাà¦\95ার à¦\95থা; যদি à¦\86পনি না পà§\87য়à§\87 থাà¦\95à§\87ন তাহলà§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 ফà§\8dরি সফà¦\9fà¦\93য়à§\8dযার ফাà¦\89নà§\8dডà§\87শনà¦\95à§\87 à¦\9cানান à¦\8fà¦\87 ঠিà¦\95ানায়, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA à¦\85থবা [//www.gnu.org/licenses/old-licenses/gpl-2.0.html à¦\85নলাà¦\87নà§\87 দà§\87à¦\96ুন]।",
+ "version-license-info": "মিডিয়াà¦\89à¦\87à¦\95ি à¦\8fà¦\95à¦\9fি à¦\89নà§\8dমà§\81à¦\95à§\8dত সফà¦\9fà¦\93য়à§\8dযার; à¦\86পনি à¦\8fà¦\9fি পà§\81নà¦\83বিতরণ à¦\95রতà§\87 পারবà§\87ন à¦\8fবà¦\82/à¦\85থবা সমà§\8dপাদনা à¦\95রতà§\87 পারবà§\87ন, à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 ফà§\8dরি সফà¦\9fà¦\93য়à§\8dযার ফাà¦\89নà§\8dডà§\87শনà§\87র পà§\8dরà¦\95াশিত à¦\97নà§\81 à¦\9cà§\87নারà§\87ল পাবলিà¦\95 লাà¦\87সà§\87নà§\8dসà§\87র ২য় à¦\85থবা সামà§\8dপà§\8dরতিà¦\95তম à¦\95à§\8bনà§\8b সà¦\82সà§\8dà¦\95রণ মà§\87নà§\87 à¦\9aলতà§\87 হবà§\87। \n\nমিডিয়াà¦\89à¦\87à¦\95ি à¦\8fà¦\87 à¦\86শায় বিতরণ à¦\95রা হয়à§\87 থাà¦\95à§\87 যà§\87 à¦\8fà¦\9fি সà¦\95লà§\87র à¦\89পà¦\95ারà§\87 à¦\86সবà§\87, à¦\95িনà§\8dতà§\81 à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦\95à§\8bনà§\8b লিà¦\96িত à¦\85à¦\99à§\8dà¦\97à§\80à¦\95ার দà§\87য়া হয় না, à¦\8fমনà¦\95ি বà§\8dযবসাযà§\8bà¦\97à§\8dযতা বা বিশà§\87ষ à¦\95à§\8bনà§\8b à¦\95ারà§\8dযà¦\95à§\8dষà§\87তà§\8dরà§\87 বà§\8dযবহারà§\87র à¦\9cনà§\8dয à¦\8fà¦\9fি à¦\89পযà§\81à¦\95à§\8dত à¦\95ি না, à¦\8f নিয়à§\87 পরà§\8bà¦\95à§\8dষ à¦\85à¦\99à§\8dà¦\97à§\80à¦\95ারà¦\93 দà§\87য়া হয় না। বিসà§\8dতারিত à¦\9cানতà§\87 à¦\97নà§\81 à¦\9cà§\87নারà§\87ল পাবলিà¦\95 লাà¦\87সà§\87নà§\8dস দà§\87à¦\96à§\81ন। \n\nà¦\8fà¦\87 সফà¦\9fà¦\93য়à§\8dযারà§\87র সাথà§\87 [{{SERVER}}{{SCRIPTPATH}}/COPYING à¦\97নà§\81 à¦\9cà§\87নারà§\87ল পাবলিà¦\95 লাà¦\87সà§\87নà§\8dসà§\87র à¦\8fà¦\95à¦\9fি পà§\8dরতিলিপি] থাà¦\95ার à¦\95থা; যদি à¦\86পনি না পà§\87য়à§\87 থাà¦\95à§\87ন তাহলà§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 ফà§\8dরি সফà¦\9fà¦\93য়à§\8dযার ফাà¦\89নà§\8dডà§\87শনà¦\95à§\87 à¦\9cানান à¦\8fà¦\87 ঠিà¦\95ানায়, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA à¦\85থবা [//www.gnu.org/licenses/old-licenses/gpl-2.0.html লাà¦\87সà§\87নà§\8dসà¦\9fি à¦\87নà§\8dà¦\9fারনà§\87à¦\9fà§\87 পড়ুন]।",
"version-software": "ইনস্টলকৃত সফটওয়্যার",
"version-software-product": "পণ্য",
"version-software-version": "সংস্করণ",
"fileduplicatesearch-submit": "অনুসন্ধান",
"fileduplicatesearch-info": "$1 × $2 পিক্সেল<br />ফাইলের আকার: $3<br />এমআইএমই প্রকার: $4",
"fileduplicatesearch-result-1": " \"$1\" ফাইলের কোন ডুপ্লেকেট ফাইল নাই।",
- "fileduplicatesearch-result-n": "\"$1\" à¦\8fà¦\87 ফাà¦\87লà§\87র {{PLURAL:$2|1 à¦\8fà¦\95à¦\87রà¦\95ম à¦\85নà§\81লিপি|$2 à¦\8fà¦\95à¦\87রà¦\95ম à¦\85নà§\81লিপি}} রয়েছে।",
+ "fileduplicatesearch-result-n": "\"$1\" ফাà¦\87লà¦\9fির {{PLURAL:$2|১à¦\9fি à¦\85বিà¦\95ল পà§\8dরতিলিপি|$2à¦\9fি à¦\85বিà¦\95ল পà§\8dরতিলিপি}} রয়েছে।",
"fileduplicatesearch-noresults": "\"$1\" নামের কোনো ফাইল খুঁজে পাওয়া যায়নি।",
"specialpages": "বিশেষ পাতাসমূহ",
"specialpages-note-top": "ব্যাখ্যা",
"specialpages-group-pagetools": "পাতা সংক্রান্ত সরঞ্জাম",
"specialpages-group-wiki": "উপাত্ত এবং সরঞ্জামসমূহ",
"specialpages-group-redirects": "বিশেষ পাতাগুলি পুনর্নির্দেশ করা হচ্ছে",
- "specialpages-group-spam": "à¦\85বাà¦\9eà§\8dà¦\9bিত পà§\81নরাবà§\83তà§\8dত সমà§\8dপাদনারà§\8bধà§\80 সরঞ্জামসমূহ",
+ "specialpages-group-spam": "সà§\8dপà§\8dযাম সরঞ্জামসমূহ",
"specialpages-group-developer": "ডেভলপারের সরঞ্জাম",
"blankpage": "খালি পাতা",
"intentionallyblankpage": "এই পাতাটি ইচ্ছা করে খালি রাখা হয়েছে",
"tags-create-invalid-chars": "ট্যাগের নামে কমা (<code>,</code>) বা ফরোয়ার্ড স্ল্যাশ (<code>/</code>) থাকতে পারবে না।",
"tags-create-invalid-title-chars": "ট্যাগের নাম এমন অক্ষর থাকতে পারবে না যা পাতার শিরোনামে ব্যবহার করা যায় না।",
"tags-create-already-exists": "\"$1\" ট্যাগ ইতিমধ্যেই বিদ্যমান।",
- "tags-create-warnings-above": "\"$1\" à¦\9fà§\8dযাà¦\97à¦\9fি তà§\88রির পà§\8dরà¦\9aà§\87ষà§\8dà¦\9fার সময় নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$2|à¦\9fি সতরà§\8dà¦\95 বারà§\8dতা}} উৎপন্ন হয়েছে:",
+ "tags-create-warnings-above": "\"$1\" à¦\9fà§\8dযাà¦\97à¦\9fি তà§\88রির পà§\8dরà¦\9aà§\87ষà§\8dà¦\9fার সময় নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$2|সতরà§\8dà¦\95 বারà§\8dতা|সতরà§\8dà¦\95 বারà§\8dতাà¦\97à§\81লি}} উৎপন্ন হয়েছে:",
"tags-create-warnings-below": "আপনি কি ট্যাগটি তৈরি করা চালিয়ে যেতে চান?",
"tags-delete-title": "ট্যাগ অপসারণ",
"tags-delete-explanation-initial": "আপনি ডাটাবেজ থেকে \"$1\" ট্যাগটি অপসারণ করতে চলেছেন।",
- "tags-delete-explanation-in-use": "ট্যাগটি বর্তমানে যে {{PLURAL:$2|$2 টি সংশোধন এবং/বা লগ ভুক্তি}}তে প্রযুক্ত হয়েছে, সেগুলি থেকে এটিকে অপসারণ করা হবে।",
+ "tags-delete-explanation-in-use": "ট্যাগটি বর্তমানে যে {{PLURAL:$2|$2 টি সংশোধন এবং/বা লগ ভুক্তিতে}} প্রয়োগ হয়েছে, সেগুলি থেকে এটিকে অপসারণ করা হবে।",
"tags-delete-explanation-warning": "এই কাজটি <strong>অপরিবর্তনযোগ্য</strong> এবং এটিকে ভবিষ্যতে <strong>বাতিল করা সম্ভব নয়</strong>, এমনকি ডাটাবেজ প্রশাসকরাও এটি বাতিল করতে পারবেন না। এই ট্যাগটিই মুছে ফেলতে চাচ্ছেন কি না, সে ব্যাপারে সুনিশ্চিত হোন।",
- "tags-delete-explanation-active": "<strong>\"$1\" à¦\9fà§\8dযাà¦\97à¦\9fি à¦\8fà¦\96নà¦\93 সà¦\95à§\8dরিয় à¦\8fবà¦\82 à¦à¦¬à¦¿à¦·à§\8dযতà§\87 à¦\8fà¦\9fিà¦\95à§\87 পà§\8dরয়à§\8bà¦\97 à¦\95রা যাবà§\87।</strong> à¦\8fà¦\87 বà§\8dযাপারà¦\9fি à¦\98à¦\9fা বনà§\8dধ à¦\95রার à¦\9cনà§\8dয যà§\87সব সà§\8dথানà§\87 à¦\9fà§\8dযাà¦\97à¦\9fিà¦\95à§\87 পà§\8dরয়à§\8bà¦\97 à¦\95রার à¦\9cনà§\8dয সà§\87à¦\9f করা হয়েছে, সেসব স্থানে গিয়ে সেটিকে নিষ্ক্রিয় করুন।",
+ "tags-delete-explanation-active": "<strong>\"$1\" à¦\9fà§\8dযাà¦\97à¦\9fি à¦\8fà¦\96নà¦\93 সà¦\95à§\8dরিয় à¦\8fবà¦\82 à¦à¦¬à¦¿à¦·à§\8dযতà§\87 à¦\8fà¦\9fিà¦\95à§\87 পà§\8dরয়à§\8bà¦\97 à¦\95রা যাবà§\87।</strong> à¦\8fà¦\87 বà§\8dযাপারà¦\9fি à¦\98à¦\9fা বনà§\8dধ à¦\95রার à¦\9cনà§\8dয যà§\87সব সà§\8dথানà§\87 à¦\9fà§\8dযাà¦\97à¦\9fিà¦\95à§\87 পà§\8dরয়à§\8bà¦\97 à¦\95রার à¦\9cনà§\8dয নিরà§\8dধারণ করা হয়েছে, সেসব স্থানে গিয়ে সেটিকে নিষ্ক্রিয় করুন।",
"tags-delete-reason": "কারণ:",
"tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
"tags-delete-not-allowed": "এক্সটেনশন দ্বারা সংজ্ঞায়িত ট্যাগ অপসারণ করা সম্ভব নয়, যদি না এক্সটেনশনটি বিশেষভাবে এটি করার অনুমতি দিয়ে থাকে।",
"tags-delete-not-found": "\"$1\" ট্যাগ বিদ্যমান নয়।",
"tags-delete-too-many-uses": "\"$1\" ট্যাগটি $2টিরও অধিক {{PLURAL:$2|সংশোধনে}} প্রয়োগ করা হয়েছে, যার অর্থ এটি অপসারণ করা যাবে না।",
- "tags-delete-warnings-after-delete": "\"$1\" à¦\9fà§\8dযাà¦\97à¦\9fি মà§\81à¦\9bà§\87 ফà§\87লা হয়à§\87à¦\9bà§\87, à¦\95িনà§\8dতà§\81 নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$2|à¦\9fি সতরà§\8dà¦\95 বারà§\8dতা}} উৎপন্ন হয়েছে:",
+ "tags-delete-warnings-after-delete": "\"$1\" à¦\9fà§\8dযাà¦\97à¦\9fি মà§\81à¦\9bà§\87 ফà§\87লা হয়à§\87à¦\9bà§\87, à¦\95িনà§\8dতà§\81 নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$2|সতরà§\8dà¦\95 বারà§\8dতাà¦\9fি|সতরà§\8dà¦\95 বারà§\8dতাà¦\97à§\81লি}} উৎপন্ন হয়েছে:",
"tags-delete-no-permission": "আপনার পরিবর্তন ট্যাগ মুছে ফেলার অনুমতি নেই।",
"tags-activate-title": "সক্রিয় ট্যাগ",
"tags-activate-question": "আপনি ট্যাগ \"$1\" সক্রিয় করতে চলেছেন।",
"tags-edit-manage-link": "ট্যাগ পরিচালনা করুন",
"tags-edit-revision-selected": "[[:$2]] পাতার {{PLURAL:$1|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:",
"tags-edit-logentry-selected": "{{PLURAL:$1|নির্বাচিত লগ ইভেন্ট}}:",
- "tags-edit-revision-legend": "{{PLURAL:$1|এই সংশোধনে|$1টি সংশোধনের সবগুলিতে}} ট্যাগ যোগ বা অপসারণ করুন।",
+ "tags-edit-revision-legend": "{{PLURAL:$1|এই সংশোধন|$1টি সংশোধনের সবগুলি}} থেকে ট্যাগ যোগ বা অপসারণ করুন",
"tags-edit-logentry-legend": "{{PLURAL:$1|এই লগের ভুক্তি|$1টি লগের ভুক্তি}} থেকে ট্যাগ যোগ বা বাতিল করুন",
"tags-edit-existing-tags": "বিদ্যমান ট্যাগ:",
"tags-edit-existing-tags-none": "<em>কোনটি নয়</em>",
"dberr-info-hidden": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি)",
"dberr-usegoogle": "এই পরিস্থিতিতে আপনি গুগলের মাধ্যমে অনুসন্ধান করার চেষ্টা করতে পারেন।",
"dberr-outofdate": "খেয়াল করুন যে, আমাদের বিষয়বস্তু সম্পর্কিত তাদের সূচি মেয়াদ উত্তীর্ণ হতে পারে।",
- "dberr-cachederror": "à¦\8fà¦\9fি à¦\85নà§\81রà§\8bধà¦\95à§\83ত পাতার à¦\95à§\8dযাশà§\87 লিপি, যা হালনাà¦\97াতà¦\95à§\83ত নাও হতে পারে।",
+ "dberr-cachederror": "à¦\8fà¦\9fি à¦\85নà§\81রà§\8bধà¦\95à§\83ত পাতাà¦\9fির à¦\95à§\8dযাশ পà§\8dরতিলিপি, যা হালনাà¦\97াতà¦\95à§\83ত না-ও হতে পারে।",
"htmlform-invalid-input": "আপনার প্রদানকৃত ইনপুটে সমস্যা রয়েছে",
"htmlform-select-badoption": "যে মান আপনি উল্লেখ করেছেন তা গ্রহণযোগ্য অপশন নয়।",
"htmlform-int-invalid": "আপনার পরিবর্তীত সংখ্যাটি ইন্টিজার(পূর্ণসংখ্যা) নয়।",
"logentry-protect-protect-cascade": "$1 $3 {{GENDER:$2|সুরক্ষিত করেছেন}} $4 [প্রপাতাকার]",
"logentry-protect-modify": "$1 $3-এর জন্য সুরক্ষা স্তর {{GENDER:$2|পরিবর্তন করেছেন}} $4",
"logentry-protect-modify-cascade": "$1 $3-এর জন্য সুরক্ষা স্তর {{GENDER:$2|পরিবর্তন করেছেন}} $4 [প্রপাতাকার]",
- "logentry-rights-rights": "$1 নামক ব্যবহারকারী {{GENDER:$6|$3}}-এর দলীয় সদস্যপদ $4 থেকে $5 -এ {{GENDER:$2|পরিবর্তন}} করেছেন",
+ "logentry-rights-rights": "$1 {{GENDER:$6|$3}}-এর দলীয় সদস্যপদ $4 থেকে $5-এ {{GENDER:$2|পরিবর্তন}} করেছেন",
"logentry-rights-rights-legacy": "$1 দলের সদস্যপদ পরিবর্তন করেছেন {{GENDER:$2|changed}} এর জন্য $3",
"logentry-rights-autopromote": "$1 স্বয়ংক্রিয়ভাবে $4 থেকে $5-এ {{GENDER:$2|উন্নীত}} হয়েছেন",
"logentry-upload-upload": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
"logentry-managetags-deactivate": "$1 \"$4\" ট্যাগটি ব্যবহারকারী ও বট দ্বারা ব্যবহারের জন্য {{GENDER:$2|নিষ্ক্রিয়}} করেছেন",
"log-name-tag": "ট্যাগ লগ",
"log-description-tag": "এই পাতাতে দেখানো হয়েছে কখন কখন ব্যবহারকারীরা নির্দিষ্ট সংশোধন বা লগ ভুক্তিতে [[Special:Tags|ট্যাগ]] যোগ বা সেখান থেকে ট্যাগ অপসারণ করেছেন। যখন কোন সম্পাদনা, অপসারণ বা এই জাতীয় কর্মের অংশ হিসেবে ট্যাগ করা হয়, সেই ট্যাগগুলি এই লগে তালিকাভুক্ত করা হয় না।",
- "logentry-tag-update-add-revision": "$1 নামক ব্যবহারকারী $6 এই {{PLURAL:$7|টি ট্যাগ}} $3 নামক পাতার $4 নং সংস্করণে {{GENDER:$2|যোগ করেছেন}}",
- "logentry-tag-update-add-logentry": "$1 নামক ব্যবহারকারী $6 এই {{PLURAL:$7|টি ট্যাগ}} $3 নামক পাতার $5 নং লগ ভুক্তিতে {{GENDER:$2|যোগ করেছেন}}",
- "logentry-tag-update-remove-revision": "$1 নামক ব্যবহারকারী $8 এই {{PLURAL:$9|টি ট্যাগ}} $3 নামক পাতার $4 নং সংস্করণ থেকে {{GENDER:$2|অপসারণ করেছেন}}",
- "logentry-tag-update-remove-logentry": "$1 নামক ব্যবহারকারী $8 এই {{PLURAL:$9|টি ট্যাগ}} $3 নামক পাতার $5 নং লগ ভুক্তি থেকে {{GENDER:$2|অপসারণ করেছেন}}",
- "logentry-tag-update-revision": "$1 নামক ব্যবহারকারী $3 নামক পাতার $4 নং সংস্করণের ট্যাগগুলি {{GENDER:$2|হালনাগাদ করেছেন}} ($6 এই {{PLURAL:$7|টি যোগ করা হয়েছে}};$8 এই {{PLURAL:$9|টি অপসারণ করা হয়েছে}})",
- "logentry-tag-update-logentry": "$1 নামক ব্যবহারকারী $3 নামক পাতার $5 নং লগ ভুক্তির ট্যাগগুলি {{GENDER:$2|হালনাগাদ করেছেন}} ($6 এই {{PLURAL:$7|টি যোগ করা হয়েছে}};$8 এই {{PLURAL:$9|টি অপসারণ করা হয়েছে}})",
+ "logentry-tag-update-add-revision": "$1 $3 পাতার $4 নং সংস্করণে $6 {{PLURAL:$7|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|যোগ করেছেন}}",
+ "logentry-tag-update-add-logentry": "$1 $3 পাতার $5 নং লগ ভুক্তিতে $6 {{PLURAL:$7|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|যোগ করেছেন}}",
+ "logentry-tag-update-remove-revision": "$1 $3 পাতার $4 নং লগ সংস্করণ থেকে $8 {{PLURAL:$9|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|সরিয়েছেন}}",
+ "logentry-tag-update-remove-logentry": "$1 $3 পাতার $5 নং লগ ভুক্তি থেকে $8 {{PLURAL:$9|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|সরিয়েছেন}}",
+ "logentry-tag-update-revision": "$1 $3 পাতার $4 নং সংস্করণের ট্যাগগুলি {{GENDER:$2|হালনাগাদ করেছেন}} ($6 {{PLURAL:$7|যোগ করা হয়েছে}}; $8 {{PLURAL:$9|সরানো হয়েছে}})",
+ "logentry-tag-update-logentry": "$1 $3 পাতার $5 নং লগ ভুক্তির ট্যাগগুলি {{GENDER:$2|হালনাগাদ করেছেন}} ($6 {{PLURAL:$7|যোগ করা হয়েছে}}; $8{{PLURAL:$9|সরানো হয়েছে}})",
"rightsnone": "(কিছু নাই)",
"rightslogentry-temporary-group": "$1 (সাময়িক, $2 পর্যন্ত)",
"feedback-adding": "পাতায় প্রতিক্রিয়া যোগ হচ্ছে...",
"log-name-pagelang": "ভাষা পরিবর্তন লগ",
"log-description-pagelang": "এটি পাতার ভাষা পরিবর্তনের লগ।",
"logentry-pagelang-pagelang": "$1 $3-এর ভাষা $4 থেকে $5-এ {{GENDER:$2|পরিবর্তন}} করেছেন",
- "default-skin-not-found": "à¦\93হà§\8b! à¦\86পনার à¦\89à¦\87à¦\95ির যà§\87 পà§\81নরà§\8dনিরà§\8dধারিত বহিরাবরণ, যà§\87à¦\9fি <code dir=\"ltr\">$wgDefaultSkin</code>-à¦\8f <code>$1</code> হিসà§\87বà§\87 সà¦\82à¦\9cà§\8dà¦\9eায়িত, সà§\87à¦\9fি পাà¦\93য়া যাà¦\9aà§\8dà¦\9bà§\87 না।\n\nà¦\86পনার à¦\87নসà§\8dà¦\9fলà§\87শনà§\87 মনà§\87 হà¦\9aà§\8dà¦\9bà§\87 নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$4|à¦\9fি বহিরাবরণ}} à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত à¦\86à¦\9bà§\87। à¦\95à§\80 à¦\95রà§\87 {{PLURAL:$4।|à¦\8fà¦\9fি|à¦\8fà¦\97à§\81লি}} সà¦\95à§\8dরিয় à¦\95রতà§\87 হবà§\87 à¦\8fবà¦\82 পà§\82রà§\8dবনিরà§\8dধারিতà¦\9fি নিরà§\8dবাà¦\9aন à¦\95রতà§\87 হবà§\87, তার à¦\9cনà§\8dয [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] দà§\87à¦\96à§\81ন। \n\n$2\n\n; যদি à¦\86পনি à¦\96à§\81ব সমà§\8dপà§\8dরতি মিডিয়াà¦\89à¦\87à¦\95ি à¦\87নà§\8dসà¦\9fল à¦\95রà§\87 থাà¦\95à§\87ন:\n: à¦\86পনি সমà§\8dà¦à¦¬à¦¤ à¦\97িà¦\9f থà§\87à¦\95à§\87 à¦\85থবা সরাসরি à¦\89à§\8eস à¦\95à§\8bড থà§\87à¦\95à§\87 à¦\85নà§\8dয à¦\95à§\8bন পদà§\8dধতি à¦\85নà§\81সরণ à¦\95রà§\87 à¦\87নà§\8dসà¦\9fল à¦\95রà§\87à¦\9bà§\87ন। à¦\8fমনà¦\9fাà¦\87 পà§\8dরতà§\8dযাশিত। [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-à¦\8fর বহিরাবরণ নিরà§\8dদà§\87শিà¦\95া] থà§\87à¦\95à§\87 নিà¦\9aà§\87র পদà§\8dধতিà¦\97à§\81লির সাহাযà§\8dযà§\87 à¦\95িà¦\9bà§\81 বহিরাবরণ à¦\87নà§\8dসà¦\9fল à¦\95রার à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রà§\81ন:\n:* [https://www.mediawiki.org/wiki/Download à¦\9fারবল à¦\87নà§\8dসà¦\9fলারà¦\9fি] ডাà¦\89নলà§\8bড à¦\95রà§\87; à¦\8fà¦\9fিতà§\87 à¦\85নà§\87à¦\95à¦\97à§\81লি বহিরাবরণ à¦\93 à¦\8fà¦\95à§\8dসà¦\9fà§\87নশন রয়à§\87à¦\9bà§\87। à¦\86পনি à¦\8fà¦\9fির <code>skins/</code> ডাà¦\87রà§\87à¦\95à¦\9fরিà¦\9fি পà§\8dরতিলিপি à¦\95রà§\87 সাà¦\81à¦\9fতà§\87 পারà§\87ন।\n:* নিরà§\8dদিষà§\8dà¦\9f বহিরাবরণ à¦\9fারবলà¦\97à§\81লি [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] থà§\87à¦\95à§\87 ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins à¦\97িà¦\9f বà§\8dযবহার à¦\95রà§\87 বহিরাবরণ ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন]\n: à¦\86পনি যদি মিডিয়াà¦\89à¦\87à¦\95ি ডà§\87à¦à§\87লপার হয়à§\87 থাà¦\95à§\87ন, তাহলà§\87 à¦\8f à¦\95াà¦\9cà¦\9fি à¦\95রলà§\87 à¦\86পনার à¦\97িà¦\9f সà¦\82à¦\97à§\8dরহশালার সাথà§\87 à¦\8fà¦\9fির সà¦\82à¦\98াত হবà§\87 না।\n; à¦\86পনি যদি à¦\96à§\81ব সমà§\8dপà§\8dরতি মিডিয়াà¦\89à¦\87à¦\95ির সরà§\8dবশà§\87ষ সà¦\82সà§\8dà¦\95রণà§\87 হালনাà¦\97াদ à¦\95রà§\87 থাà¦\95à§\87ন:\n: মিডিয়াà¦\89à¦\87à¦\95ির ১.২৪ à¦\8fবà¦\82 নতà§\81নতর সà¦\82সà§\8dà¦\95রণà¦\97à§\81লি à¦\87নà§\8dসà¦\9fলà¦\95à§\83ত বহিরাবরণà¦\97à§\81লি à¦\86র সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 সà¦\95à§\8dরিয় à¦\95রà§\87 না। ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery] দà§\87à¦\96à§\81ন)। à¦\86পনি <code>LocalSettings.php</code> ফাà¦\87লà¦\9fির à¦à§\87তরà§\87 নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$5|à¦\9fি লাà¦\87ন}} সà§\87à¦\81à¦\9fà§\87 à¦\87নà§\8dসà¦\9fলà¦\95à§\83ত {{PLURAL:$5|à¦\9fি বহিরাবরণ}} {{PLURAL:$5|সবà¦\97à§\81লি}} সà¦\95à§\8dরিয় à¦\95রতà§\87 পারà§\87ন:\n\n<pre dir=\"ltr\">$3</pre>\n\n; à¦\86পনি যদি à¦\96à§\81ব সমà§\8dপà§\8dরতি <code>LocalSettings.php</code> পরিবরà§\8dতন à¦\95রà§\87 থাà¦\95à§\87ন:\n: à¦\9fাà¦\87পিà¦\82 ত্রুটির জন্য বহিরাবরণের নামগুলি পুনরায় পরীক্ষা করুন।",
- "default-skin-not-found-no-skins": "à¦\93হà§\8b! à¦\86পনার à¦\89à¦\87à¦\95ির যà§\87 পà§\81নরà§\8dনিরà§\8dধারিত বহিরাবরণ, যà§\87à¦\9fি <code dir=\"ltr\">$wgDefaultSkin</code>-à¦\8f <code>$1</code> হিসà§\87বà§\87 সà¦\82à¦\9cà§\8dà¦\9eায়িত, সà§\87à¦\9fি পাà¦\93য়া যাà¦\9aà§\8dà¦\9bà§\87 না।\n\nà¦\86পনার à¦\95à§\8bন বহিরাবরণ à¦\87নà§\8dসà¦\9fল à¦\95রা হয়নি।\n\n; যদি à¦\86পনি à¦\96à§\81ব সমà§\8dপà§\8dরতি মিডিয়াà¦\89à¦\87à¦\95ি à¦\87নà§\8dসà¦\9fল à¦\95রà§\87 থাà¦\95à§\87ন বা মিডিয়াà¦\89à¦\87à¦\95ির সরà§\8dবশà§\87ষ সà¦\82সà§\8dà¦\95রণà§\87 হালনাà¦\97াদ à¦\95রà§\87 থাà¦\95à§\87ন:\n: à¦\86পনি সমà§\8dà¦à¦¬à¦¤ à¦\97িà¦\9f থà§\87à¦\95à§\87 à¦\85থবা সরাসরি à¦\89à§\8eস à¦\95à§\8bড থà§\87à¦\95à§\87 à¦\85নà§\8dয à¦\95à§\8bন পদà§\8dধতি à¦\85নà§\81সরণ à¦\95রà§\87 à¦\87নà§\8dসà¦\9fল à¦\95রà§\87à¦\9bà§\87ন। à¦\8fমনà¦\9fাà¦\87 পà§\8dরতà§\8dযাশিত। মিডিয়াà¦\89à¦\87à¦\95ির ১.২৪ à¦\8fবà¦\82 নতà§\81নতর সà¦\82সà§\8dà¦\95রণà¦\97à§\81লি মà§\82ল সà¦\82à¦\97à§\8dরহশালাতà§\87 à¦\8fà¦\96ন à¦\86র à¦\95à§\8bন বহিরাবরণ à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত থাà¦\95à§\87 না। à¦\86র সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 সà¦\95à§\8dরিয় à¦\95রà§\87 না। [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-à¦\8fর বহিরাবরণ নিরà§\8dদà§\87শিà¦\95া] থà§\87à¦\95à§\87 নিà¦\9aà§\87র পদà§\8dধতিà¦\97à§\81লির সাহাযà§\8dযà§\87 à¦\95িà¦\9bà§\81 বহিরাবরণ à¦\87নà§\8dসà¦\9fল à¦\95রার à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রà§\81ন:\n:* [https://www.mediawiki.org/wiki/Download à¦\9fারবল à¦\87নà§\8dসà¦\9fলারà¦\9fি] ডাà¦\89নলà§\8bড à¦\95রà§\87; à¦\8fà¦\9fিতà§\87 à¦\85নà§\87à¦\95à¦\97à§\81লি বহিরাবরণ à¦\93 à¦\8fà¦\95à§\8dসà¦\9fà§\87নশন রয়à§\87à¦\9bà§\87। à¦\86পনি à¦\8fà¦\9fির <code>skins/</code> ডাà¦\87রà§\87à¦\95à¦\9fরিà¦\9fি পà§\8dরতিলিপি à¦\95রà§\87 সাà¦\81à¦\9fতà§\87 পারà§\87ন।\n:* নিরà§\8dদিষà§\8dà¦\9f বহিরাবরণ à¦\9fারবলà¦\97à§\81লি [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] থà§\87à¦\95à§\87 ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins à¦\97িà¦\9f বà§\8dযবহার à¦\95রà§\87 বহিরাবরণ ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন]\n: à¦\86পনি যদি মিডিয়াà¦\89à¦\87à¦\95ি ডà§\87à¦à§\87লপার হয়à§\87 থাà¦\95à§\87ন, তাহলà§\87 à¦\8f à¦\95াà¦\9cà¦\9fি à¦\95রলà§\87 à¦\86পনার à¦\97িà¦\9f সà¦\82à¦\97à§\8dরহশালার সাথà§\87 à¦\8fà¦\9fির সà¦\82à¦\98াত হবà§\87 না।([https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration]-à¦\8f দà§\87à¦\96à§\81ন) à¦\95à§\80à¦à¦¾à¦¬à§\87 বহিরাবরণà¦\97à§\81লি সà¦\95à§\8dরিয় à¦\95রতà§\87 হয় à¦\8fবà¦\82 à¦\95à§\8bন বহিরাবরণà¦\9fি পà§\81নরà§\8dনিরà§\8dধারিত হবে, তা কীভাবে নির্বাচন করতে হয়।",
+ "default-skin-not-found": "à¦\93হà§\8b! à¦\86পনার à¦\89à¦\87à¦\95ির পà§\82রà§\8dবনিরà§\8dধারিত à¦\86বরণ, যà§\87à¦\9fি <code dir=\"ltr\">$wgDefaultSkin</code>-à¦\8f <code>$1</code> হিসà§\87বà§\87 সà¦\82à¦\9cà§\8dà¦\9eায়িত, সà§\87à¦\9fি পাà¦\93য়া যাà¦\9aà§\8dà¦\9bà§\87 না।\n\nà¦\86পনার à¦\87নসà§\8dà¦\9fলà§\87শনà§\87 মনà§\87 হà¦\9aà§\8dà¦\9bà§\87 নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$4|à¦\86বরণ|à¦\86বরণà¦\97à§\81লি}} à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত à¦\86à¦\9bà§\87। à¦\95à§\80 à¦\95রà§\87 {{PLURAL:$4।|à¦\8fà¦\9fি|à¦\8fà¦\97à§\81লি}} সà¦\95à§\8dরিয় à¦\95রতà§\87 হবà§\87 à¦\8fবà¦\82 পà§\82রà§\8dবনিরà§\8dধারিতà¦\9fি নিরà§\8dবাà¦\9aন à¦\95রতà§\87 হবà§\87, তার à¦\9cনà§\8dয [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] দà§\87à¦\96à§\81ন। \n\n$2\n\n; যদি à¦\86পনি à¦\96à§\81ব সমà§\8dপà§\8dরতি মিডিয়াà¦\89à¦\87à¦\95ি à¦\87নà§\8dসà¦\9fল à¦\95রà§\87 থাà¦\95à§\87ন:\n: à¦\86পনি সমà§\8dà¦à¦¬à¦¤ à¦\97িà¦\9f থà§\87à¦\95à§\87 à¦\85থবা সরাসরি à¦\89à§\8eস à¦\95à§\8bড থà§\87à¦\95à§\87 à¦\85নà§\8dয à¦\95à§\8bন পদà§\8dধতি à¦\85নà§\81সরণ à¦\95রà§\87 à¦\87নà§\8dসà¦\9fল à¦\95রà§\87à¦\9bà§\87ন। à¦\8fমনà¦\9fাà¦\87 পà§\8dরতà§\8dযাশিত। [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-à¦\8fর বহিরাবরণ নিরà§\8dদà§\87শিà¦\95া] থà§\87à¦\95à§\87 নিà¦\9aà§\87র পদà§\8dধতিà¦\97à§\81লির সাহাযà§\8dযà§\87 à¦\95িà¦\9bà§\81 à¦\86বরণ à¦\87নà§\8dসà¦\9fল à¦\95রার à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রà§\81ন:\n:* [https://www.mediawiki.org/wiki/Download à¦\9fারবল à¦\87নà§\8dসà¦\9fলারà¦\9fি] ডাà¦\89নলà§\8bড à¦\95রà§\87; à¦\8fà¦\9fিতà§\87 à¦\85নà§\87à¦\95à¦\97à§\81লি à¦\86বরণ à¦\93 à¦\8fà¦\95à§\8dসà¦\9fà§\87নশন রয়à§\87à¦\9bà§\87। à¦\86পনি <code>skins/</code> সরাসরি পà§\8dরতিলিপি à¦\95রà§\87 সাà¦\81à¦\9fতà§\87 পারà§\87ন।\n:* নিরà§\8dদিষà§\8dà¦\9f à¦\86বরণ à¦\9fারবলà¦\97à§\81লি [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] থà§\87à¦\95à§\87 ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins à¦\97িà¦\9f বà§\8dযবহার à¦\95রà§\87 বহিরাবরণ ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন]\n: à¦\86পনি যদি মিডিয়াà¦\89à¦\87à¦\95ি ডà§\87à¦à§\87লপার হয়à§\87 থাà¦\95à§\87ন, তাহলà§\87 à¦\8f à¦\95াà¦\9cà¦\9fি à¦\95রলà§\87 à¦\86পনার à¦\97িà¦\9f সà¦\82à¦\97à§\8dরহশালার সাথà§\87 à¦\8fà¦\9fির সà¦\82à¦\98াত হবà§\87 না।\n; à¦\86পনি যদি à¦\96à§\81ব সমà§\8dপà§\8dরতি মিডিয়াà¦\89à¦\87à¦\95ির সরà§\8dবশà§\87ষ সà¦\82সà§\8dà¦\95রণà§\87 হালনাà¦\97াদ à¦\95রà§\87 থাà¦\95à§\87ন:\n: মিডিয়াà¦\89à¦\87à¦\95ির ১.২৪ à¦\8fবà¦\82 নতà§\81নতর সà¦\82সà§\8dà¦\95রণà¦\97à§\81লি à¦\87নà§\8dসà¦\9fলà¦\95à§\83ত à¦\86বরণà¦\97à§\81লি à¦\86র সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 সà¦\95à§\8dরিয় à¦\95রà§\87 না। ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery] দà§\87à¦\96à§\81ন)। à¦\86পনি <code>LocalSettings.php</code> ফাà¦\87লà¦\9fির à¦à§\87তরà§\87 নিমà§\8dনà§\8bà¦\95à§\8dত {{PLURAL:$5|লাà¦\87ন|লাà¦\87নà¦\97à§\81লি}} সà§\87à¦\81à¦\9fà§\87 à¦\87নà§\8dসà¦\9fলà¦\95à§\83ত {{PLURAL:$5|à¦\86বরণ|à¦\86বরণà¦\97à§\81লি}} সà¦\95à§\8dরিয় à¦\95রতà§\87 পারà§\87ন:\n\n<pre dir=\"ltr\">$3</pre>\n\n; à¦\86পনি যদি à¦\96à§\81ব সমà§\8dপà§\8dরতি <code>LocalSettings.php</code> পরিবরà§\8dতন à¦\95রà§\87 থাà¦\95à§\87ন:\n: বানান ত্রুটির জন্য বহিরাবরণের নামগুলি পুনরায় পরীক্ষা করুন।",
+ "default-skin-not-found-no-skins": "à¦\93হà§\8b! à¦\86পনার à¦\89à¦\87à¦\95ির পà§\82রà§\8dবনিরà§\8dধারিত, যà§\87à¦\9fি <code dir=\"ltr\">$wgDefaultSkin</code>-à¦\8f <code>$1</code> হিসà§\87বà§\87 সà¦\82à¦\9cà§\8dà¦\9eায়িত, সà§\87à¦\9fি পাà¦\93য়া যাà¦\9aà§\8dà¦\9bà§\87 না।\n\nà¦\86পনার à¦\95à§\8bন à¦\86বরণ à¦\87নà§\8dসà¦\9fল à¦\95রা হয়নি।\n\n; যদি à¦\86পনি à¦\96à§\81ব সমà§\8dপà§\8dরতি মিডিয়াà¦\89à¦\87à¦\95ি à¦\87নà§\8dসà¦\9fল à¦\95রà§\87 থাà¦\95à§\87ন বা মিডিয়াà¦\89à¦\87à¦\95ির সরà§\8dবশà§\87ষ সà¦\82সà§\8dà¦\95রণà§\87 হালনাà¦\97াদ à¦\95রà§\87 থাà¦\95à§\87ন:\n: à¦\86পনি সমà§\8dà¦à¦¬à¦¤ à¦\97িà¦\9f থà§\87à¦\95à§\87 à¦\85থবা সরাসরি à¦\89à§\8eস à¦\95à§\8bড থà§\87à¦\95à§\87 à¦\85নà§\8dয à¦\95à§\8bন পদà§\8dধতি à¦\85নà§\81সরণ à¦\95রà§\87 à¦\87নà§\8dসà¦\9fল à¦\95রà§\87à¦\9bà§\87ন। à¦\8fমনà¦\9fাà¦\87 পà§\8dরতà§\8dযাশিত। মিডিয়াà¦\89à¦\87à¦\95ির ১.২৪ à¦\8fবà¦\82 নতà§\81নতর সà¦\82সà§\8dà¦\95রণà¦\97à§\81লি মà§\82ল সà¦\82à¦\97à§\8dরহশালাতà§\87 à¦\8fà¦\96ন à¦\86র à¦\95à§\8bন à¦\86বরণ à¦\85নà§\8dতরà§\8dà¦à§\81à¦\95à§\8dত থাà¦\95à§\87 না। à¦\86র সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 সà¦\95à§\8dরিয় à¦\95রà§\87 না। [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-à¦\8fর à¦\86বরণ নিরà§\8dদà§\87শিà¦\95া] থà§\87à¦\95à§\87 নিà¦\9aà§\87র পদà§\8dধতিà¦\97à§\81লির সাহাযà§\8dযà§\87 à¦\95িà¦\9bà§\81 à¦\86বরণ à¦\87নà§\8dসà¦\9fল à¦\95রার à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রà§\81ন:\n:* [https://www.mediawiki.org/wiki/Download à¦\9fারবল à¦\87নà§\8dসà¦\9fলারà¦\9fি] ডাà¦\89নলà§\8bড à¦\95রà§\87; à¦\8fà¦\9fিতà§\87 à¦\85নà§\87à¦\95à¦\97à§\81লি à¦\86বরণ à¦\93 à¦\8fà¦\95à§\8dসà¦\9fà§\87নশন রয়à§\87à¦\9bà§\87। à¦\86পনি <code>skins/</code> সরাসরি পà§\8dরতিলিপি à¦\95রà§\87 সাà¦\81à¦\9fতà§\87 পারà§\87ন।\n:* নিরà§\8dদিষà§\8dà¦\9f à¦\86বরণ à¦\9fারবলà¦\97à§\81লি [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] থà§\87à¦\95à§\87 ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins à¦\97িà¦\9f বà§\8dযবহার à¦\95রà§\87 বহিরাবরণ ডাà¦\89নলà§\8bড à¦\95রতà§\87 পারà§\87ন]\n: à¦\86পনি যদি মিডিয়াà¦\89à¦\87à¦\95ি ডà§\87à¦à§\87লপার হয়à§\87 থাà¦\95à§\87ন, তাহলà§\87 à¦\8f à¦\95াà¦\9cà¦\9fি à¦\95রলà§\87 à¦\86পনার à¦\97িà¦\9f সà¦\82à¦\97à§\8dরহশালার সাথà§\87 à¦\8fà¦\9fির সà¦\82à¦\98াত হবà§\87 না।([https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration]-à¦\8f দà§\87à¦\96à§\81ন) à¦\95à§\80à¦à¦¾à¦¬à§\87 বহিরাবরণà¦\97à§\81লি সà¦\95à§\8dরিয় à¦\95রতà§\87 হয় à¦\8fবà¦\82 à¦\95à§\8bন à¦\86বরণà¦\9fি পà§\81নরà§\8dনিরà§\8dধারিত হবে, তা কীভাবে নির্বাচন করতে হয়।",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (সক্রিয় করা)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>নিষ্ক্রিয় করা</strong>)",
"mediastatistics": "মিডিয়া পরিসংখ্যান",
"json-error-ctrl-char": "অক্ষর নিয়ন্ত্রণ ত্রুটি, সম্ভবত ভুল এনকোডকৃত",
"json-error-syntax": "সিনট্যাক্স ত্রুটি",
"json-error-utf8": "ত্রুটিপূর্ণ ইউটিএফ-৮ অক্ষর, সম্ভবত ভুল এনকোডকৃত",
- "json-error-recursion": "যà§\87 à¦à§\8dযালà§\81à¦\9fি à¦\8fনà¦\95à§\8bড à¦\95রা হবà§\87 সà§\87à¦\9fিতà§\87 à¦\8fà¦\95 বা তার à¦\85ধিà¦\95 রিà¦\95ারà§\8dসিঠরà§\87ফারà§\87নà§\8dস à¦\86à¦\9bà§\87।",
- "json-error-inf-or-nan": "à¦\8fà¦\95 বা তার à¦\85ধিà¦\95 NAN à¦\85থবা INF à¦à§\8dযালà§\81 à¦\8fনà¦\95à§\8bড à¦\95রার à¦\9cনà§\8dয পà§\8dরবিষà§\8dà¦\9f à¦à§\8dযালà§\81তà§\87 বিদà§\8dযমান।",
+ "json-error-recursion": "যà§\87 মানà¦\9fি à¦\8fনà¦\95à§\8bড à¦\95রা হবà§\87 সà§\87à¦\9fিতà§\87 à¦\8fà¦\95 বা তার à¦\85ধিà¦\95 রিà¦\95ারà§\8dসিঠসà§\82তà§\8dর à¦\86à¦\9bà§\87",
+ "json-error-inf-or-nan": "à¦\8fনà¦\95à§\8bড à¦\95রার à¦\9cনà§\8dয মানà§\87 à¦\8fà¦\95 বা à¦\8fà¦\95াধিà¦\95 NAN à¦\85থবা INF মান বিদà§\8dযমান",
"json-error-unsupported-type": "এনকোড করা যাবে না এমন একটি মানের ধরন দেয়া হয়েছে",
"headline-anchor-title": "এই অনুচ্ছেদে সংযোগ",
"special-characters-group-latin": "লাতিন",
"log-action-filter-contentmodel-change": "বিষয়বস্তুর রূপ পরিবর্তন",
"log-action-filter-contentmodel-new": "অ-মানক বিষয়বস্তুর রূপসহ পাতা তৈরি",
"log-action-filter-delete-delete": "পাতা অপসারণ",
- "log-action-filter-delete-delete_redir": "পà§\81নরà§\8dনিরà§\8dদà§\87শ মà§\81à¦\9bà§\87 নতà§\81ন à¦\95রà§\87 লà§\87à¦\96া",
+ "log-action-filter-delete-delete_redir": "পà§\81নরà§\8dনিরà§\8dদà§\87শ পà§\81নরà§\8dলিà¦\96ন",
"log-action-filter-delete-restore": "পাতা পুনঃরুদ্ধার",
"log-action-filter-delete-event": "লগ অপসারণ",
"log-action-filter-delete-revision": "সংশোধন অপসারণ",
"post-expand-template-argument-warning": "Diwallit : war ar bajenn-mañ ez eus eus da nebeutañ un arventenn eus ur patrom zo re vras.\nA-gostez eo bet lezet an arventenn-se.",
"post-expand-template-argument-category": "Pajennoù enno arventennoù patrom bet lezet a-gostez",
"parser-template-loop-warning": "Patrom e kelc'h detektet : [[$1]]",
+ "template-loop-category": "Pajennoù enno lagadennoù patrom",
+ "template-loop-category-desc": "Ul lagadenn batrom zo er bajenn, d.l.e. ur patrom en em c'halv e-unan en ur mod rekursivel.",
"parser-template-recursion-depth-warning": "Tizhet bevenn donder galvoù rekursivek ar patromoù ($1)",
"language-converter-depth-warning": "Aet eur en tu all d'ar vevenn amdreiñ yezhoù ($1)",
"node-count-exceeded-category": "Pajennoù m'eur aet en tu all d'an niver a skoulmoù",
"post-expand-template-argument-warning": "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu groß ist. Diese Parameter werden ignoriert.",
"post-expand-template-argument-category": "Seiten mit ignorierten Vorlagenparametern",
"parser-template-loop-warning": "Vorlagenschleife entdeckt: [[$1]]",
+ "template-loop-category": "Seiten mit Vorlagenschleifen",
+ "template-loop-category-desc": "Die Seite enthält eine Vorlagenschleife, z. B. eine Vorlage, die sich selbst rekursiv aufruft.",
"parser-template-recursion-depth-warning": "Vorlagenrekursionstiefengrenze überschritten ($1)",
"language-converter-depth-warning": "Sprachkonvertertiefenlimit überschritten ($1)",
"node-count-exceeded-category": "Seiten, die die Knotenanzahl überschritten haben",
"newimages-summary": "This special page shows the last uploaded files.",
"newimages-legend": "Filter",
"newimages-label": "Filename (or a part of it):",
+ "newimages-user": "IP address or username",
"newimages-showbots": "Show uploads by bots",
"newimages-hidepatrolled": "Hide patrolled uploads",
"noimages": "Nothing to see.",
"post-expand-template-argument-warning": "'''هشدار:''' این صفحه شامل دست کم یک پارامتر الگو است که بیش از اندازه بزرگ است.\nاین پارامترها نادیده گرفته شدند.",
"post-expand-template-argument-category": "صفحههای حاوی الگوهایی با پارامترهای نادیدهگرفتهشده",
"parser-template-loop-warning": "حلقه در الگو پیدا شد: [[$1]]",
+ "template-loop-category": "صفحههای دارای حلقه در الگو",
+ "template-loop-category-desc": "صفحه دارای حلقه در الگو، مثلا الگویی که از خودش درون خودش استفادهکردهاست.",
"parser-template-recursion-depth-warning": "محدودیت عمق بازگشت الگو رد شد ($1)",
"language-converter-depth-warning": "محدودیت عمق مبدل زبانی رد شد ($1)",
"node-count-exceeded-category": "صفحههایی که از حداکثر تعداد گره تجاوز کردهاند",
"page_first": "نخست",
"page_last": "واپسین",
"histlegend": "انتخاب تفاوت: دکمههای گرد کنار ویرایشهایی که میخواهید با هم مقایسه کنید را علامت بزنید و دکمهٔ Enter را بزنید یا دکمهٔ پایین را فشار دهید.<br />\nاختصارات: '''({{int:cur}})''' = تفاوت با نسخهٔ فعلی، '''({{int:last}})''' = تفاوت با نسخهٔ قبلی، '''({{int:minoreditletter}})''' = ویرایش جزئی.",
- "history-fieldset-title": "مرور تاریخچه",
- "history-show-deleted": "فقط حذفشده",
+ "history-fieldset-title": "جستجو برای نسخهها",
+ "history-show-deleted": "فقط حذفشدهفقط نسخههای حذف شده",
"histfirst": "قدیمیترین",
"histlast": "جدیدترین",
"historysize": "({{PLURAL:$1|۱ بایت|$1 بایت}})",
"rcfilters-invalid-filter": "پالایهٔ نامعتبر",
"rcfilters-empty-filter": "پالایهای فعال نیست. همهٔ مشارکتهای دیده میشوند.",
"rcfilters-filterlist-title": "پالایهها",
+ "rcfilters-filterlist-whatsthis": "این چیست؟",
"rcfilters-filterlist-feedbacklink": "ارسال بازخورد برای پالایههای جدید (آزمایشی)",
"rcfilters-highlightbutton-title": "پررنگ کردن نتایج",
"rcfilters-highlightmenu-title": "انتخاب رنگ",
"rcfilters-highlightmenu-help": "یک رنگ انتخاب کنید تا این خصوصیت پر رنگ شود",
"rcfilters-filterlist-noresults": "پالایهای یافت نشد",
+ "rcfilters-noresults-conflict": "نتیجهای یافت نشد چون محدوده جستجو دارای تداخل است",
+ "rcfilters-state-message-subset": "این پالایه تاثیری ندارد چون نتایج آن شامل موارد مرزی {{PLURAL:$2|پالایه|پالایه}} است (از پررنگکننده برای تمایز استفاده کنید): $1",
"rcfilters-filtergroup-registration": "ثبتنام کاربر",
"rcfilters-filter-registered-label": "ثبت شده",
"rcfilters-filter-registered-description": "ورود ویرایشگران.",
"post-expand-template-argument-warning": "<strong>Attention :</strong> cette page contient au moins un paramètre de modèle dont la taille après expansion est trop importante. \nCes arguments n’ont donc pas été inclus.",
"post-expand-template-argument-category": "Pages contenant des paramètres de modèle non évalués",
"parser-template-loop-warning": "Modèle en boucle détecté : [[$1]]",
+ "template-loop-category": "Pages avec des boucles de modèle",
+ "template-loop-category-desc": "La page contient une boucle de modèle, c.à.d. un modèle qui s’appelle lui-même récursivement.",
"parser-template-recursion-depth-warning": "Limite de profondeur des appels récursifs de modèles dépassée ($1)",
"language-converter-depth-warning": "Limite de profondeur du convertisseur de langue dépassée ($1)",
"node-count-exceeded-category": "Pages dépassant le nombre de nœuds maximal",
"post-expand-template-argument-warning": "'''אזהרה:''' דף זה כולל לפחות תבנית אחת שבה פרמטרים גדולים מדי.\nפרמטרים אלה הושמטו.",
"post-expand-template-argument-category": "דפים שבהם הושמטו פרמטרים של תבניות",
"parser-template-loop-warning": "נמצאה תבנית הקוראת לעצמה: [[$1]]",
+ "template-loop-category": "דפים עם לולאות בתבנית",
+ "template-loop-category-desc": "הדף הזה מכיל לולאה בתבנית, כלומר תבנית שקוראת לעצמה באופן רקורסיבי.",
"parser-template-recursion-depth-warning": "עומק התבניות המוכללות זו בזו עבר את המגבלה ($1)",
"language-converter-depth-warning": "עומק ממיר השפה עבר את המגבלה ($1)",
"node-count-exceeded-category": "דפים שבהם מספר הצמתים גדול מדי",
"content-not-allowed-here": "ページ [[$2]] では、「$1」コンテンツは許可されていません",
"editwarning-warning": "このページを離れると、あなたが行なった変更がすべて失われてしまうかもしれません。\nログインしている場合、個人設定の「{{int:prefs-editing}}」タブでこの警告を表示しないようにすることができます。",
"editpage-invalidcontentmodel-title": "対応していないコンテンツ形式",
+ "editpage-invalidcontentmodel-text": "コンテンツ・モデル「$1」は対応していません。",
"editpage-notsupportedcontentformat-title": "対応していないコンテンツ形式",
"editpage-notsupportedcontentformat-text": "コンテンツ モデル $2 は、コンテンツ形式 $1 に対応していません。",
"content-model-wikitext": "ウィキテキスト",
"content-model-css": "CSS",
"content-json-empty-object": "空のオブジェクト",
"content-json-empty-array": "空の配列",
+ "deprecated-self-close-category": "無効な自己終了HTMLタグを使用しているページ",
+ "deprecated-self-close-category-desc": "<code><b/></code> や <code><span/></code> 等の無効な自己終了HTMLタグを含むページ。これらのタグはまもなく HTML5 の仕様に準拠する動作へと変更されるため、ウィキテキスト内での使用は非推奨となりました。",
"duplicate-args-warning": "<strong>警告:</strong> [[:$1]]は複数の「$3」パラメータを伴って[[:$2]]を呼び出しています。提供されている最後の値のみが使用されます。",
"duplicate-args-category": "テンプレート呼び出しで引数が重複しているページ",
"duplicate-args-category-desc": "引数が重複したテンプレート呼び出しを含むページ。例: <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>、<code><nowiki>{{foo|bar|1=baz}}</nowiki></code>",
"post-expand-template-argument-warning": "<strong>警告:</strong> このページは、展開後のサイズが大きすぎるテンプレート引数を少なくとも 1 つ含んでいます。\nこれらの引数を省略しました。",
"post-expand-template-argument-category": "省略されたテンプレート引数を含むページ",
"parser-template-loop-warning": "テンプレートのループを検出しました: [[$1]]",
+ "template-loop-category": "テンプレートがループしているページ",
+ "template-loop-category-desc": "テンプレート自身が再帰的自己参照を行うなど、ループするテンプレートが含まれているページ。",
"parser-template-recursion-depth-warning": "テンプレートの再帰の深さ ($1) が上限を超えました",
"language-converter-depth-warning": "言語変換機能の深さ ($1) が制限を超えました",
"node-count-exceeded-category": "ノード数が制限を超えたページ",
"page_first": "先頭",
"page_last": "末尾",
"histlegend": "差分の選択: 比較したい版のラジオボタンを選択し、Enterキーを押すか、下部のボタンを押します。<br />\n凡例: <strong>({{int:cur}})</strong>=最新版との比較、<strong>({{int:last}})</strong>=直前の版との比較、<strong>{{int:minoreditletter}}</strong>=細部の編集",
- "history-fieldset-title": "履歴の閲覧",
- "history-show-deleted": "削除済みのみ",
+ "history-fieldset-title": "版の検索",
+ "history-show-deleted": "削除版のみ",
"histfirst": "最古",
"histlast": "最新",
"historysize": "({{PLURAL:$1|$1バイト}})",
"username": "{{GENDER:$1|利用者名}}:",
"prefs-memberingroups": "{{GENDER:$2|所属}}{{PLURAL:$1|グループ}}:",
"prefs-memberingroups-type": "$1",
+ "group-membership-link-with-expiry": "$1 ($2 まで)",
"prefs-registration": "登録日時:",
"prefs-registration-date-time": "$1",
"yourrealname": "本名:",
"userrights-groupsmember": "所属グループ:",
"userrights-groupsmember-auto": "自動的に付与される権限:",
"userrights-groupsmember-type": "$1",
- "userrights-groups-help": "この利用者が属するグループを変更できます。\n* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。\n* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。\n* 「*」はグループに一旦追加した場合に除去 (あるいはその逆) ができないことを示しています。",
+ "userrights-groups-help": "この利用者が属するグループを変更できます。\n* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。\n* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。\n*「*」はグループに一旦追加した場合に除去 (あるいはその逆) ができないことを示しています。\n*「#」は有効期限の延長のみを行うことができますが、現在の期限よりも短縮することはできません。",
"userrights-reason": "理由:",
"userrights-no-interwiki": "他ウィキ上における利用者権限の編集権限は、ありません。",
"userrights-nodatabase": "データベース$1は存在しないか、ローカル上にありません。",
"userrights-unchangeable-col": "変更できないグループ",
"userrights-irreversible-marker": "$1*",
"userrights-expiry-current": "期限 $1",
- "userrights-expiry-none": "有効期限切れではありません",
+ "userrights-expiry-none": "無期限",
"userrights-expiry": "有効期限:",
+ "userrights-expiry-existing": "現在の有効期限: $2 $3",
"userrights-expiry-othertime": "その他の期間:",
+ "userrights-expiry-options": "1日:1 day,1週間:1 week,1か月:1 month,3か月:3 months,6か月:6 months,1 年:1 year",
+ "userrights-invalid-expiry": "「$1」グループに指定された有効期限は無効です。",
+ "userrights-expiry-in-past": "「$1」グループに指定された有効期限は過去の時刻です。",
+ "userrights-cannot-shorten-expiry": "「$1」グループの有効期限を短縮できません。このグループを与奪できる権限を持つ利用者だけが有効期限を短縮できます。",
"userrights-conflict": "利用者権限の変更が競合しています! 変更内容を確認してください。",
"group": "グループ:",
"group-user": "登録利用者",
"rcfilters-clear-all-filters": "すべてのフィルターをクリア",
"rcfilters-invalid-filter": "無効なフィルター",
"rcfilters-filterlist-title": "フィルター",
+ "rcfilters-highlightmenu-title": "色を選ぶ",
"rcfilters-filterlist-noresults": "フィルターが見つかりませんでした",
"rcfilters-filtergroup-registration": "利用者登録",
"rcfilters-filter-registered-label": "登録済み",
"rcfilters-filter-unregistered-label": "未登録",
"rcfilters-filter-bots-label": "ボット",
"rcfilters-filter-humans-label": "人間(ボットではない)",
+ "rcfilters-filter-patrolled-label": "巡回済み",
+ "rcfilters-filter-patrolled-description": "巡回済みとマークされた編集。",
+ "rcfilters-filter-unpatrolled-label": "未巡回",
+ "rcfilters-filter-unpatrolled-description": "まだ巡回済みとマークされていない編集。",
+ "rcfilters-filtergroup-significance": "重要度",
+ "rcfilters-filter-minor-label": "細部の編集",
+ "rcfilters-filter-minor-description": "編集者が細部の編集とマークしたもの。",
+ "rcfilters-filter-major-label": "細部でない編集",
+ "rcfilters-filter-major-description": "細部とマークされていない編集。",
+ "rcfilters-filtergroup-changetype": "変更の種類",
+ "rcfilters-filter-pageedits-label": "ページの編集",
+ "rcfilters-filter-newpages-label": "ページの作成",
+ "rcfilters-filter-newpages-description": "ページを新規作成する編集。",
+ "rcfilters-filter-categorization-label": "カテゴリ変更",
"rcnotefrom": "以下は<strong>$3 $4</strong>以降の{{PLURAL:$5|更新です}} (最大 <strong>$1</strong> 件)。",
"rclistfrom": "$3の$2以降の更新を表示する",
"rcshowhideminor": "細部の編集を$1",
"editcomment": "編集内容の要約: <em>$1</em>",
"revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|トーク]]) による編集を [[User:$1|$1]] による直前の版へ差し戻しました",
"revertpage-nouser": "非表示の利用者による編集を {{GENDER:$1|[[User:$1|$1]]}} による直前の版へ差し戻しました",
- "rollback-success": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。",
+ "rollback-success": "{{GENDER:$3|$1}}による編集を差し戻しました。\n{{GENDER:$4|$2}}による直前の版へ変更されました。",
"rollback-success-notify": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。[$3 変更を表示]",
"sessionfailure-title": "セッションの失敗",
"sessionfailure": "ログインのセッションに問題が発生しました。\nセッション乗っ取りを防ぐため、操作を取り消しました。\n前のページへ戻って再度読み込んだ後に、もう一度試してください。",
"changecontentmodel-success-text": "[[:$1]]のコンテンツ・タイプは変更されました。",
"changecontentmodel-cannot-convert": "[[:$1]]のコンテンツは$2の型には変換できません。",
"changecontentmodel-nodirectediting": "$1 コンテンツ・モデルは、ダイレクト編集をサポートしていません。",
+ "changecontentmodel-emptymodels-title": "利用可能なコンテンツ・モデルがありません",
"changecontentmodel-emptymodels-text": "[[:$1]]のコンテンツはどの型にも変換できません。",
"log-name-contentmodel": "コンテンツ・モデル変更記録",
"log-description-contentmodel": "ページのコンテンツ・モデルに関連する出来事",
"protect-cantedit": "このページの編集権限がないため、保護レベルを変更できません。",
"protect-othertime": "その他の期間:",
"protect-othertime-op": "その他の期間",
- "protect-existing-expiry": "現在の保護期限: $2 $3",
- "protect-existing-expiry-infinity": "既存の有効期限: 無期限",
+ "protect-existing-expiry": "現在の有効期限: $2 $3",
+ "protect-existing-expiry-infinity": "現在の有効期限: 無期限",
"protect-otherreason": "他の、または追加の理由:",
"protect-otherreason-op": "その他の理由",
"protect-dropdown": "*よくある保護理由\n** 度重なる荒らし\n** 度重なるスパム投稿\n** 非生産的な編集合戦\n** 高負荷ページ",
"sorbs": "DNSBL",
"sorbsreason": "ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。",
"sorbs_create_account_reason": "ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。\nアカウント作成はできません",
+ "softblockrangesreason": "現在の IP アドレス ($1) からの匿名投稿は許可されていません。ログインしてください。",
"xffblockreason": "X-Forwarded-For ヘッダーに含まれている IP アドレスがブロックされています。これはあなたのものか、あなたが利用しているプロキシサーバーのものです。元のブロックの理由は: $1",
"cant-see-hidden-user": "ブロックしようとしている利用者は、既にブロックされ隠されています。\nあなたには hideuser 権限がないため、この利用者のブロックの閲覧/編集はできません。",
"ipbblocked": "あなた自身がブロックされているため、他の利用者のブロックやブロック解除はできません。",
"cant-move-to-user-page": "利用者下位ページ以外の利用者ページに、ページを移動させる権限がありません。",
"cant-move-category-page": "カテゴリのページを移動させる権限がありません。",
"cant-move-to-category-page": "ページをカテゴリのページに移動させる権限がありません。",
+ "cant-move-subpages": "下位のページを移動する権限がありません。",
+ "namespace-nosubpages": "名前空間「$1」はサブページが許可されていません。",
"newtitle": "新しいページ名:",
"move-watch": "移動元と移動先ページをウォッチ",
"movepagebtn": "ページを移動",
"newimages-showbots": "ボットによるアップロードを表示",
"newimages-hidepatrolled": "巡回済みのアップロードを隠す",
"noimages": "表示できるものがありません。",
+ "gallery-slideshow-toggle": "トグルサムネイル",
"ilsubmit": "検索",
"bydate": "日付順",
"sp-newimages-showfrom": "$1の$2以降の新しいファイルを表示",
"tag-filter": "[[Special:Tags|タグ]]絞り込み:",
"tag-filter-submit": "絞り込み",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|タグ}}]]: $2)",
+ "tag-mw-contentmodelchange": "コンテンツ・モデルの変更",
"tags-title": "タグ",
"tags-intro": "このページは、ソフトウェアが編集に対して付けるタグとその意味の一覧です。",
"tags-tag": "タグ名",
"logentry-tag-update-revision": "$1 がページ「$3」の版 $4 のタグを{{GENDER:$2|更新しました}} ($6 を{{PLURAL:$7|追加}}、$8 を{{PLURAL:$9|削除}})",
"logentry-tag-update-logentry": "$1 がページ「$3」の記録項目 $5 のタグを{{GENDER:$2|更新しました}} ($6 を{{PLURAL:$7|追加}}、$8 を{{PLURAL:$9|削除}})",
"rightsnone": "(なし)",
+ "rightslogentry-temporary-group": "$1 ($2までの臨時)",
"feedback-adding": "ページへのフィードバックの追加...",
"feedback-back": "戻る",
"feedback-bugcheck": "Great! [$1 既出のバグ]に既に含まれていないかご確認ください。",
"pagelang-select-lang": "言語を選択",
"pagelang-reason": "理由",
"pagelang-submit": "変更",
+ "pagelang-nonexistent-page": "ページ $1 は存在しません。",
"right-pagelang": "ページの言語を変更",
"action-pagelang": "ページの言語の変更",
"log-name-pagelang": "言語変更の記録",
"usercssispublic": "注意: CSS のサブページは第三者が閲覧可能なため、機微な情報を含めないでください。",
"restrictionsfield-badip": "無効な IP アドレス、またはその範囲: $1",
"restrictionsfield-label": "許可する IP の範囲:",
- "restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合は<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+ "restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合: <pre>0.0.0.0/0\n::/0</pre>"
}
"duration-centuries": "taonjato $1{{PLURAL:$1|}}",
"limitreport-walltime": "Tena fotoam-pampiasana",
"limitreport-walltime-value": "$1 segondra{{PLURAL:$1|}}",
+ "expandtemplates": "Hanitatra ny endrika",
+ "expand_templates_input": "Wikisoratra loharano:",
"expand_templates_output": "Valiny",
"expand_templates_xml_output": "Famoahana XML",
"expand_templates_html_output": "Famoahana HTML",
"expand_templates_ok": "OK",
"expand_templates_remove_comments": "Hanala resaka",
+ "expand_templates_generate_rawhtml": "Haneho HTML maina",
"expand_templates_preview": "Topi-maso",
"pagelang-name": "Pejy",
"pagelang-language": "Fiteny",
"mediastatistics-header-text": "Soratra",
"mediastatistics-header-executable": "Azo alefa",
"mediastatistics-header-total": "Rakitra rehetra",
+ "json-error-syntax": "Hadisoan-drariteny",
"special-characters-group-latin": "latina",
"special-characters-group-latinextended": "latina nitarina",
"special-characters-group-ipa": "AAI",
"special-characters-title-endash": "tsipika anglisy",
"special-characters-title-emdash": "tsipika em",
"special-characters-title-minus": "marika mainosy",
+ "mw-widgets-mediasearch-noresults": "Tsy nahitana valiny",
+ "mw-widgets-titleinput-description-new-page": "Tsy mbola misy ilay pejy",
+ "mw-widgets-usersmultiselect-placeholder": "Hanampy be kokoa",
"sessionmanager-tie": "Tsy afaka mampikambana karazan-kataka fampamantarana maromaro: $1.",
+ "log-action-filter-all": "Manontolo",
+ "log-action-filter-block-block": "Bolongana",
+ "log-action-filter-protect-protect": "Fiarovana",
+ "log-action-filter-protect-unprotect": "Fanalana fiarovana",
"authmanager-authn-not-in-progress": "Tsy andalam-panaovana ny fampamantarana, na very ny angon'ny sesiôna. Avereno hatramin'ny voalohany azafady.",
"authmanager-authplugin-setpass-failed-title": "Tsy nahomby ny fanovana tenimiafina",
"authmanager-authplugin-setpass-failed-message": "Nandà ny fanovana tenimiafina ny plugin fampamantarana.",
"authmanager-username-help": "Anaram-pikambana ho an'ny fampamantarana.S",
"authmanager-password-help": "Tenimiafina ho an'ny fampamantarana.",
"authmanager-retype-help": "tenimiafina indray hanamarinana.",
+ "authmanager-email-label": "Mailaka",
+ "authmanager-email-help": "Adiresy mailaka:",
+ "authmanager-realname-label": "Tena anarana:",
"authmanager-provider-password": "Fampamamtarana mifototra amin'ny tenimiafina",
"authmanager-provider-password-domain": "Fampamantarana mifototra amin'ny tenimiafina ary vala",
"authmanager-provider-temporarypassword": "Tenimiafina vonjimaika",
+ "authprovider-resetpass-skip-label": "Dinganina",
"authprovider-resetpass-skip-help": "Handingana ny famerenam-tenimiafina.",
- "authform-nosession-login": "nahomby ny fidirana, fa tsy mahatadidy anao tafiditra ny mpitety tranonkalanao."
+ "authform-nosession-login": "nahomby ny fidirana, fa tsy mahatadidy anao tafiditra ny mpitety tranonkalanao.",
+ "specialpage-securitylevel-not-allowed-title": "Voarara",
+ "changecredentials": "Hanova torohay fampahafantarana",
+ "changecredentials-submit": "Ovaina ny torohay fampahafantarana",
+ "changecredentials-invalidsubpage": "Tsy karazan-torohay fampahafantarana azo ekena $1",
+ "changecredentials-success": "Niova ny torohay fampahafantarana anao.",
+ "removecredentials": "Hanala torohay fampahafantarana",
+ "removecredentials-submit": "Esorina ny torohay fampahafantarana",
+ "credentialsform-provider": "Karazan-torohay fampahafantarana:",
+ "credentialsform-account": "Anaran-kaonty:",
+ "restrictionsfield-badip": "Adiresy na valan'IP tsy azo raisina: $1",
+ "restrictionsfield-label": "Valan' IP ekena:",
+ "revid": "versiona $1",
+ "pageid": "ID pejy $1"
}
"post-expand-template-argument-warning": "'''Предупредување:''' Оваа страница содржи најмалку еден шаблонски аргумент кој е со преголема должина.\nТаквите аргументи ќе бидат изземени при расчленувањето.",
"post-expand-template-argument-category": "Страници кои содржат изземени аргументи на шаблони",
"parser-template-loop-warning": "Пронајдена е јамка во шаблонот: [[$1]]",
+ "template-loop-category": "Страници со шаблонски јамки",
+ "template-loop-category-desc": "Страницава содржи шаблонска јамка, т.е. шаблон кој повторливо се самоповикува",
"parser-template-recursion-depth-warning": "Пречекорена е границата на длабочината на рекурзијата во шаблонот ($1)",
"language-converter-depth-warning": "Пречекорена е границата на длабочината на јазичниот претворач ($1)",
"node-count-exceeded-category": "Страници каде е надминат бројот на јазли",
"missingsummary": "'''Atencion :''' avètz pas modificat lo resumit de vòstra modificacion. Se clicatz tornarmai sul boton « Salvar », lo salvament serà fait sens avertiment mai.",
"missingcommenttext": "Mercé de metre un comentari çaijós.",
"missingcommentheader": "<strong>Rapèl :</strong> Avètz pas provesit cap de subjècte per aqueste comentari.\nSe clicatz tornamai sus « {{int:Savearticle}} », vòstra modificacion serà enregistrada sens subjècte.",
- "summary-preview": "Previsualizacion del resumit :",
- "subject-preview": "Previsualizacion del subjècte",
+ "summary-preview": "Apercebut del resumit de modificacion :",
+ "subject-preview": "Apercebut del subjècte :",
"blockedtitle": "L'utilizaire es blocat",
"blockedtext": "'''Vòstre compte d'utilizaire o vòstra adreça IP es estat blocat'''\n\nLo blocatge es estat efectuat per $1.\nLa rason invocada es la seguenta : ''$2''.\n\n* Començament del blocatge : $8\n* Expiracion del blocatge : $6\n* Compte blocat : $7.\n\nPodètz contactar $1 o un autre [[{{MediaWiki:Grouppage-sysop}}|administrator]] per ne discutir.\nPodètz pas utilizar la foncion « Mandar un corrièr electronic a aqueste utilizaire » que se una adreça de corrièr valida es especificada dins vòstras [[Special:Preferences|preferéncias]].\nVòstra adreça IP actuala es $3 e vòstre identificant de blocatge es #$5.\nIncluissètz aquesta adreça dins tota requèsta.",
"autoblockedtext": "Vòstra adreça IP es estada blocada automaticament perque es estada utilizada per un autre utilizaire, ele-meteis blocat per $1.\nLa rason invocadaa es :\n\n:''$2''\n\n* Començament del blocatge : $8\n* Expiracion del blocatge : $6\n* Compte blocat : $7\n\nPodètz contactar $1 o un dels autres [[{{MediaWiki:Grouppage-sysop}}|administrators]] per discutir d'aqueste blocatge.\n\nNotatz que podètz pas utilizar la foncionalitat \"Mandar un messatge a aqueste utilizaire\" tant qu'auretz pas una adreça e-mail enregistrada dins vòstras [[Special:Preferences|preferéncias]] e tant que seretz pas blocat per son utilizacion.\n\nVòstra adreça IP actuala es $3, e lo numèro de blocatge es $5.\nPrecisatz aquestas indicacions dins totas las requèstas que faretz.",
"page_first": "primièra",
"page_last": "darrièra",
"histlegend": "Legenda : ({{MediaWiki:Cur}}) = diferéncia amb la version actuala ,\n({{MediaWiki:Last}}) = diferéncia amb la version precedenta, <b>m</b> = cambiament menor",
- "history-fieldset-title": "Percórrer l'istoric",
- "history-show-deleted": "Suprimits solament",
+ "history-fieldset-title": "Recercar de revisions",
+ "history-show-deleted": "Revision suprimida unicament",
"histfirst": "Las mai ancianas",
"histlast": "Las mai recentas",
"historysize": "({{PLURAL:$1|1 octet|$1 octets}})",
"prefs-diffs": "Diferéncias",
"prefs-help-prefershttps": "Aquesta preferéncia serà efectiva al moment de vòstra connexion que ven.",
"prefs-tabs-navigation-hint": "Astúcia : Podètz utilizar las sagetas d'esquèrra e de dreita per navigar entre los onglets.",
- "userrights": "Gestion dels dreits d'utilizaire",
+ "userrights": "Dreits dels utilizaires",
"userrights-lookup-user": "Seleccionar un utilizaire",
"userrights-user-editname": "Entrar un nom d’utilizaire :",
"editusergroup": "Cargar de gropes d’utilizaires",
"rcfilters-filter-editsbyself-label": "Vòstras pròprias modificacions",
"rcfilters-filter-editsbyself-description": "Vòstras modificacions.",
"rcfilters-filter-editsbyother-label": "Modificacions per d’autres.",
- "rcfilters-filter-userExpLevel-newcomer-label": "Novèls arribants",
- "rcfilters-filter-userExpLevel-learner-label": "Aprenents",
- "rcfilters-filter-userExpLevel-experienced-label": "Utilizaires experimentats",
+ "rcfilters-filter-user-experience-level-newcomer-label": "Novèls arribants",
+ "rcfilters-filter-user-experience-level-learner-label": "Aprenents",
+ "rcfilters-filter-user-experience-level-experienced-label": "Utilizaires experimentats",
"rcfilters-filtergroup-automated": "Contribucions automatizadas",
"rcfilters-filter-bots-label": "Robòt",
"rcfilters-filter-humans-label": "Èsser uman (pas robòt)",
"protect-expiry-options": "1 ora:1 hour,1 jorn:1 day,1 setmana:1 week,2 setmanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 an:1 year,indefinidament:infinite",
"restriction-type": "Permission :",
"restriction-level": "Nivèl de restriccion :",
- "minimum-size": "Talha minimoma",
+ "minimum-size": "Talha minimala",
"maximum-size": "Talha maximala :",
"pagesize": "(octets)",
"restriction-edit": "Modificacion",
"post-expand-template-argument-warning": "Uwaga – strona zawiera co najmniej jeden argument szablonu, który po rozwinięciu jest zbyt duży.\nArgument ten będzie pominięty.",
"post-expand-template-argument-category": "Strony, w których użyto szablon z pominięciem argumentów",
"parser-template-loop-warning": "Wykryto pętlę w szablonie [[$1]]",
+ "template-loop-category-desc": "Strona zawiera pętlę szablonów, czyli szablon, który wywołuje sam siebie rekursywnie.",
"parser-template-recursion-depth-warning": "Przekroczno limit głębokości rekurencji szablonu ($1)",
"language-converter-depth-warning": "Przekroczono ograniczenie ($1) głębokości zagnieżdżenia konwersji językowej",
"node-count-exceeded-category": "Strony, gdzie przekroczono liczbę węzłów",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Pokaż",
"rcfilters-activefilters": "Aktywne filtry",
- "rcfilters-restore-default-filters": "Przywrócić domyślne filtry",
+ "rcfilters-restore-default-filters": "Przywróć domyślne filtry",
"rcfilters-clear-all-filters": "Wyczyść filtry",
"rcfilters-search-placeholder": "Filtruj ostatnie zmiany (przeglądaj lub zacznij wpisywać)",
"rcfilters-invalid-filter": "Nieprawidłowy filtr",
"rcfilters-highlightmenu-help": "Wybierz kolor, aby podświetlić tę właściwość",
"rcfilters-filterlist-noresults": "Nie znaleziono filtrów",
"rcfilters-noresults-conflict": "Nie znaleziono wyników z powodu konfliktu kryteriów wyszukiwania",
+ "rcfilters-state-message-subset": "Ten filtr nie wywoła efektu, ponieważ pasujące do niego wyniki są zawarte w bardziej {{PLURAL:$2|szczegółowym filtrze|szczegółowych filtrach}} (spróbuj podświetlić, aby je rozróżnić): $1",
+ "rcfilters-state-message-fullcoverage": "Wybranie wszystkich filtrów w grupie działa tak samo jak niewybranie żadnego, więc ten filtr nie będzie miał efektu. W grupie zawarto też: $1",
"rcfilters-filtergroup-registration": "Rejestracja użytkownika",
"rcfilters-filter-registered-label": "Zarejestrowani",
"rcfilters-filter-registered-description": "Zalogowani edytorzy.",
"rcfilters-filter-unregistered-label": "Niezarejestrowani",
"rcfilters-filter-unregistered-description": "Niezalogowani",
+ "rcfilters-filter-unregistered-conflicts-user-experience-level": "Ten filtr koliduje z {{PLURAL:$2|poniższym filtrem|poniższymi filtrami}} doświadczenia, {{PLURAL:$2|który wyszukuje|które wyszukują}} tylko zarejestrowanych użytkowników: $1",
"rcfilters-filtergroup-authorship": "Autorstwo edycji",
"rcfilters-filter-editsbyself-label": "Moje edycje",
"rcfilters-filter-editsbyself-description": "Edycje dokonane przez Ciebie.",
"rcfilters-filter-editsbyother-label": "Edycje inne niż Twoje",
"rcfilters-filter-editsbyother-description": "Edycje wykonane przez innych (nie Twoje).",
"rcfilters-filtergroup-userExpLevel": "Poziom doświadczenia (tylko o zarejestrowanych użytkownikach)",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Filtry doświadczenia wyszukują tylko edycje zarejestrowanych użytkowników, więc ten filtr koliduje z filtrem “Niezarejestrowani”.",
"rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "Filtr \"Niezarejestrowani\" koliduje z jednym lub więcej filtrów z filtrów poziomu doświadczenia, które służą do wyszukiwania wkładu tylko zarejestrowanych użytkowników. Kolidujące filtry zostały odpowiednio oznaczone na pasku Aktywnych filtrów.",
"rcfilters-filter-user-experience-level-newcomer-label": "Początkujący",
"rcfilters-filter-user-experience-level-newcomer-description": "Mniej niż 10 edycji i 4 dni aktywności.",
"rcfilters-filter-categorization-description": "Dodanie lub usunięcie strony z kategorii",
"rcfilters-filter-logactions-label": "Działania rejestrowane",
"rcfilters-filter-logactions-description": "Działania administracyjne, tworzenie kont, usuwanie stron, przesyłanie plików...",
+ "rcfilters-hideminor-conflicts-typeofchange-global": "Filtr \"Drobne zmiany\" koliduje z jednym lub wieloma filtrami Rodzaju zmian, ponieważ niektóre rodzaje zmian nie mogą być uznawane za \"drobne\". Kolidujące filtry zostały odpowiednio zaznaczone na pasku aktywnych filtrów powyżej.",
+ "rcfilters-hideminor-conflicts-typeofchange": "Niektóre rodzaje zmian nie mogą być uznawane za \"drobne\", więc ten filtr koliduje z następującymi filtrami rodzaju zmian: $1",
+ "rcfilters-typeofchange-conflicts-hideminor": "Ten filtr Rodzaju zmian koliduje z filtrem \"Drobne zmiany\". Nie wszystkie zmiany mogą być uznawane za \"drobne\".",
"rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
"rclistfrom": "Pokaż nowe zmiany od $3 $2",
"rcshowhideminor": "$1 drobne edycje",
"authmanager-autocreate-noperm": "Automatyczne tworzenie konta jest niedozwolone.",
"authmanager-autocreate-exception": "Automatyczne tworzenie konta tymczasowo wyłączone z powodu wcześniejszych błędów.",
"authmanager-userdoesnotexist": "Konto użytkownika „$1” nie jest zarejestrowane.",
+ "authmanager-userlogin-remembermypassword-help": "Czy hasło powinno być zapamiętane dłużej niż długość sesji.",
"authmanager-username-help": "Nazwa użytkownika dla uwierzytelniania.",
"authmanager-password-help": "Hasło do uwierzytelniania.",
"authmanager-domain-help": "Domena uwierzytelniania zewnętrznego.",
"newimages-summary": "This message is displayed at the top of [[Special:NewImages]] to explain what is shown on that special page.",
"newimages-legend": "Caption of the fieldset for the filter on [[Special:NewImages]]\n\n{{Identical|Filter}}",
"newimages-label": "Caption of the filter editbox on [[Special:NewImages]]",
+ "newimages-user": "Caption of the username/IP address editbox on [[Special:NewImages]]",
"newimages-showbots": "Used as label for a checkbox. When checked, [[Special:NewImages]] will also display uploads by users in the bots group.",
"newimages-hidepatrolled": "Used as label for a checkbox. When checked, [[Special:NewImages]] will not display patrolled uploads.\n\nCf. {{msg-mw|tog-hidepatrolled}} and {{msg-mw|apihelp-feedrecentchanges-param-hidepatrolled}}.",
"noimages": "This is shown on the special page [[Special:NewImages]], when there aren't any recently uploaded files.",
"shared-repo-from": "из $1",
"shared-repo": "общего хранилища",
"shared-repo-name-wikimediacommons": "Викисклада",
- "filepage.css": "/* CSS и помещены сюда входит на странице описания файла, также на зарубежного заказчика Вики */",
+ "filepage.css": "/* Размещённые здесь CSS будут применены на странице описания файла и на сторонних клиентских вики */",
"upload-disallowed-here": "Вы не можете перезаписать этот файл.",
"filerevert": "Возврат к старой версии $1",
"filerevert-legend": "Возвратить версию файла",
"sunday-at": "в воскресенье в $1",
"yesterday-at": "Вчера в $1",
"bad_image_list": "Формат должен быть следующим:\n\nБудут учитываться только элементы списка (строки, начинающиеся на символ *).\nПервая ссылка строки должна быть ссылкой на запрещённое для вставки изображение.\nПоследующие ссылки в той же строке будут рассматриваться как исключения, то есть статьи, куда изображение может быть включено.",
- "variantname-zh-hans": "его",
+ "variantname-zh-hans": "hans",
"metadata": "Метаданные",
"metadata-help": "Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.",
"metadata-expand": "Показать дополнительные данные",
"exif-copyrighted-false": "Авторско-правовой статус не задан",
"exif-photometricinterpretation-1": "Чёрный и белый (чёрный — 0)",
"exif-photometricinterpretation-4": "Маска прозрачности",
- "exif-photometricinterpretation-5": "РазделенÑ\8b (видимо в CMYK)",
+ "exif-photometricinterpretation-5": "РазделенÑ\8b (веÑ\80оÑ\8fÑ\82но CMYK)",
"exif-unknowndate": "Неизвестная дата",
"exif-orientation-1": "Нормальная",
"exif-orientation-2": "Отражено по горизонтали",
"confirmemail_body_set": "Кто-то (возможно вы) с IP-адресом $1\nуказал данный адрес электронной почты для учётной записи «$2» в проекте «{{SITENAME}}».\n\nЧтобы подтвердить, что эта учётная запись действительно принадлежит вам,\nи включить возможность отправки писем с сайта «{{SITENAME}}», откройте в браузере приведённую ниже ссылку:\n\n$3\n\nЕсли данная учётная запись *не* относится к вам, то перейдите по следующей ссылке,\nчтобы отменить подтверждение адреса электронной почты:\n\n$5\n\nКод подтверждения действителен до $4.",
"confirmemail_invalidated": "Подтверждение адреса электронной почты отменено.",
"invalidateemail": "Отмена подтверждения адреса электронной почты",
- "notificationemail_subject_changed": "{{SITENAME}} зарегистрированный адрес электронной почты был изменен",
+ "notificationemail_subject_changed": "Адрес электронной почты для {{SITENAME}} был изменён",
"notificationemail_subject_removed": "{{SITENAME}} зарегистрированный адрес электронной почты был удален",
"notificationemail_body_changed": "Кто-то, вероятно, вы, с IP-адреса $1,\nизменил адрес электронной почты учетной записи \"$2\" на \"$3\" на {{SITENAME}}.\n\nЕсли это были не вы, обратитесь к администратору сайта немедленно.",
"notificationemail_body_removed": "Кто-то, вероятно вы, с IP-адреса $1,\nудалил адрес электронной почты учетной записи \"$2\" на {{SITENAME}}.\n\nЕсли это были не вы, обратитесь к администратору сайта немедленно.",
"log-action-filter-contentmodel": "Тип изменения модели содержимого:",
"log-action-filter-delete": "Тип удаления:",
"log-action-filter-import": "Тип импорта:",
- "log-action-filter-managetags": "Тип Ñ\82ега Ñ\83пÑ\80авленÑ\87еÑ\81киÑ\85 дейÑ\81Ñ\82вий:",
+ "log-action-filter-managetags": "Ð\94ейÑ\81Ñ\82вие по Ñ\83пÑ\80авлениÑ\8e Ñ\82егами:",
"log-action-filter-move": "Тип переименования:",
"log-action-filter-newusers": "Тип создания учётной записи:",
"log-action-filter-patrol": "Тип патрулирования:",
"log-action-filter-managetags-delete": "Удаление тегов",
"log-action-filter-managetags-activate": "Активация тегов",
"log-action-filter-managetags-deactivate": "Отключение тега",
- "log-action-filter-move-move": "Ð\94вигаÑ\82Ñ\8cÑ\81Ñ\8f без пеÑ\80езапиÑ\81и пеÑ\80еадÑ\80еÑ\81аÑ\86ий",
- "log-action-filter-move-move_redir": "Ð\9fеÑ\80емеÑ\81Ñ\82иÑ\82Ñ\8c Ñ\81 заменой пеÑ\80еадÑ\80еÑ\81аÑ\86ий",
+ "log-action-filter-move-move": "Ð\9fеÑ\80еименованиÑ\8f не в Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83Ñ\8eÑ\89ее пеÑ\80енапÑ\80авление",
+ "log-action-filter-move-move_redir": "Ð\9fеÑ\80еименованиÑ\8f повеÑ\80Ñ\85 пеÑ\80енапÑ\80авлениÑ\8f",
"log-action-filter-newusers-create": "Создание анонимным участником",
"log-action-filter-newusers-create2": "Создание зарегистрированным участником",
"log-action-filter-newusers-autocreate": "Автоматическое создание",
"nstab-template": "Modellu",
"nstab-help": "Agiudu",
"nstab-category": "Categoria",
+ "mainpage-nstab": "Pàgina printzipale",
"nosuchaction": "No esistit custa atzione",
"nosuchactiontext": "S'atzione ispetzificada in sa URL no est vàlida.\nEst possìbile chi sa URL siat istada carcada male, o si siat sighidu unu ligòngiu non vàlidu.\nCustu diat pòdere èssere unu \"bug\" de {{SITENAME}}.",
"nosuchspecialpage": "Custa pàgina ispetziale no esistit",
"password-change-forbidden": "Non podes cambiare sa password in custa wiki.",
"login": "Intra",
"nav-login-createaccount": "Intra / crea contu",
- "userlogin": "Intra / crea contu",
- "userloginnocreate": "Intra",
"logout": "Serra sessione",
"userlogout": "Essida",
"notloggedin": "Non ses intradu",
"userlogin-noaccount": "Non tenes unu contu?",
"userlogin-joinproject": "Registra⋅ti a {{SITENAME}}",
- "nologin": "Non tenes unu contu? '''$1'''.",
- "nologinlink": "Crea unu contu",
"createaccount": "Crea contu",
- "gotaccount": "Tenes giai unu contu? $1.",
- "gotaccountlink": "Identìfica·ti",
- "userlogin-resetlink": "As ismentigadu is datos pro s'atzessu?",
"userlogin-resetpassword-link": "As ismentigadu sa password?",
"userlogin-helplink2": "Agiudu pro s'atzessu",
"userlogin-createanother": "Crea un àteru contu",
"createacct-another-email-ph": "Inserta s'indiritzu post.el",
"createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu post.el ispetzificadu",
"createacct-realname": "Nùmene beru (optzionale)",
- "createaccountreason": "Motivu:",
"createacct-reason": "Motivu",
"createacct-reason-ph": "Pro ite ses creende un àteru contu",
"createacct-submit": "Crea su contu tuo",
"passwordreset-emaildisabled": "Is funtzionalidades de email sunt istadas disabilitadas in custa wiki.",
"passwordreset-username": "Nùmene impitadore:",
"passwordreset-domain": "Domìniu:",
- "passwordreset-capture": "Ammustrare su cuntenutu de sa email?",
"passwordreset-email": "Indiritzu email:",
"passwordreset-emailtitle": "Particulares de s'impitadore in {{SITENAME}}",
"passwordreset-emailelement": "Nùmene utente: \n$1\n\nPassword temporànea: \n$2",
"saveprefs": "Sarba",
"restoreprefs": "Restàura totus is sèberos predefinidos (in totus is setziones)",
"prefs-editing": "Casella de modìfica",
- "rows": "Lìnias:",
- "columns": "Colunnas:",
"searchresultshead": "Chirca",
"stub-threshold": "Valore mìnimu pro is <a href=\"#\" class=\"stub\">ligòngios a is abotzos</a>, in bytes:",
"stub-threshold-disabled": "Disativadu",
"boteditletter": "b",
"rc_categories_any": "Calesisiat",
"rc-change-size": "$1",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} a pustis de sa modìfica",
"newsectionsummary": "/* $1 */ setzione noa",
"rc-enhanced-expand": "Ammustra particulares",
"rc-enhanced-hide": "Cua particulares",
"logentry-upload-overwrite": "$1 {{GENDER:$2|carrigadu}} una versione noa de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|carrigadu}} $3",
"rightsnone": "(nisciunu)",
- "revdelete-summary": "ogetu de sa modìfica",
"feedback-cancel": "Annudda",
"feedback-close": "Fatu",
"feedback-message": "Messàgiu:",
"post-expand-template-argument-warning": "'''Opozorilo:'''' Ta stran vsebuje vsaj en argument predloge, ki ima preveliko razširitev.\nNaslednji argumenti so bili izpuščeni.",
"post-expand-template-argument-category": "Strani z izpuščenimi argumenti predloge",
"parser-template-loop-warning": "V predlogi je bila odkrita zanka: [[$1]]",
+ "template-loop-category": "Strani z zankami predlog",
+ "template-loop-category-desc": "Stran vsebuje zanko predloge, tj. predlogo, ki rekurzivno kliče sama sebe.",
"parser-template-recursion-depth-warning": "Prekoračena globina rekurzije predlog ($1)",
"language-converter-depth-warning": "Prekoračena globina pretvorbe jezikov ($1)",
"node-count-exceeded-category": "Strani s prekoračenim številom vozlišč",
"recentchanges-summary": "Пратите скорашње измене на овој страници.",
"recentchanges-noresult": "Нема промена у задатом времену за задате критеријуме.",
"recentchanges-feed-description": "Пратите скорашње измене уз помоћ овог довода.",
- "recentchanges-label-newpage": "Ð\9dова страница",
- "recentchanges-label-minor": "Ð\9cања измена",
+ "recentchanges-label-newpage": "Ð\9eвом изменом напÑ\80авÑ\99ена Ñ\98е нова страница",
+ "recentchanges-label-minor": "Ð\9eво Ñ\98е мања измена",
"recentchanges-label-bot": "Ову измену је направио бот",
"recentchanges-label-unpatrolled": "Ова измена још није патролирана",
"recentchanges-label-plusminus": "Промена величине странице у бајтовима",
"recentchanges-summary": "Pratite skorašnje izmene na ovoj stranici.",
"recentchanges-noresult": "Nema promena u zadatom vremenu za zadate kriterijume.",
"recentchanges-feed-description": "Pratite skorašnje izmene uz pomoć ovog dovoda.",
- "recentchanges-label-newpage": "Nova stranica",
- "recentchanges-label-minor": "Manja izmena",
+ "recentchanges-label-newpage": "Ovom izmenom napravljena je nova izmena",
+ "recentchanges-label-minor": "Ovo je manja izmena",
"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",
"currentevents-url": "Project:Güncel olaylar",
"disclaimers": "Sorumluluk reddi",
"disclaimerpage": "Project:Genel sorumluluk reddi",
- "edithelp": "Nasıl değiştirilir?",
+ "edithelp": "Düzenleme yardımı",
"helppage-top-gethelp": "Yardım",
"mainpage": "Ana Sayfa",
"mainpage-description": "Ana sayfa",
"post-expand-template-argument-warning": "<strong>警告:</strong>本页面包含至少一个展开后过大的模板参数。这些参数会被忽略。",
"post-expand-template-argument-category": "含有略过模板参数的页面",
"parser-template-loop-warning": "检查到模板循环:[[$1]]",
+ "template-loop-category": "有模板循环的页面",
+ "template-loop-category-desc": "页面存在模板循环,就是递归进行自我调用的模板。",
"parser-template-recursion-depth-warning": "模板递归深度越限($1)",
"language-converter-depth-warning": "字词转换器深度越限($1)",
"node-count-exceeded-category": "页面的节点数超出限制",
$maintClass = false;
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\LBFactory;
require_once __DIR__ . '/../includes/export/DumpFilter.php';
use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\IDatabase;
/**
* @ingroup Dump Maintenance
*/
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
require_once __DIR__ . '/Maintenance.php';
* @author Timo Tijhof
*/
-use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
require_once __DIR__ . '/Maintenance.php';
* @ingroup Maintenance
*/
+use Wikimedia\Rdbms\IDatabase;
+
require_once __DIR__ . '/Maintenance.php';
/**
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Maintenance script to run a database query in batches and wait for replica DBs.
*
require_once __DIR__ . '/Maintenance.php';
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Maintenance script that sends SQL queries from the specified file to the database.
'dependencies' => [
'mediawiki.ForeignStructuredUpload',
'mediawiki.Upload.BookletLayout',
- 'mediawiki.widgets.CategorySelector',
+ 'mediawiki.widgets.CategoryMultiselectWidget',
'mediawiki.widgets.DateInputWidget',
'mediawiki.jqueryMsg',
'mediawiki.api.messages',
'targets' => [ 'desktop', 'mobile' ],
],
'mediawiki.widgets.CategorySelector' => [
+ 'deprecated' => 'Use "mw.widgets.CategoryMultiselectWidget" instead. See T161285.',
+ 'dependencies' => [
+ 'mediawiki.widgets.CategoryMultiselectWidget',
+ ],
+ ],
+ 'mediawiki.widgets.CategoryMultiselectWidget' => [
'scripts' => [
'resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js',
- 'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js',
+ 'resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js',
],
'dependencies' => [
'oojs-ui-widgets',
],
'messages' => [
'red-link-title',
- 'mw-widgets-categoryselector-add-category-placeholder'
+ 'mw-widgets-categoryselector-add-category-placeholder',
],
'targets' => [ 'desktop', 'mobile' ],
],
--- /dev/null
+/*!
+ * MediaWiki Widgets - CategoryMultiselectWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+ var NS_CATEGORY = mw.config.get( 'wgNamespaceIds' ).category;
+
+ /**
+ * Category selector widget. Displays an OO.ui.CapsuleMultiselectWidget
+ * and autocompletes with available categories.
+ *
+ * mw.loader.using( 'mediawiki.widgets.CategoryMultiselectWidget', function () {
+ * var selector = new mw.widgets.CategoryMultiselectWidget( {
+ * searchTypes: [
+ * mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch,
+ * mw.widgets.CategoryMultiselectWidget.SearchType.InternalSearch
+ * ]
+ * } );
+ *
+ * $( 'body' ).append( selector.$element );
+ *
+ * selector.setSearchTypes( [ mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories ] );
+ * } );
+ *
+ * @class mw.widgets.CategoryMultiselectWidget
+ * @uses mw.Api
+ * @extends OO.ui.CapsuleMultiselectWidget
+ * @mixins OO.ui.mixin.PendingElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {mw.Api} [api] Instance of mw.Api (or subclass thereof) to use for queries
+ * @cfg {number} [limit=10] Maximum number of results to load
+ * @cfg {mw.widgets.CategoryMultiselectWidget.SearchType[]} [searchTypes=[mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch]]
+ * Default search API to use when searching.
+ */
+ mw.widgets.CategoryMultiselectWidget = function MWCategoryMultiselectWidget( config ) {
+ // Config initialization
+ config = $.extend( {
+ limit: 10,
+ searchTypes: [ mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch ]
+ }, config );
+ this.limit = config.limit;
+ this.searchTypes = config.searchTypes;
+ this.validateSearchTypes();
+
+ // Parent constructor
+ mw.widgets.CategoryMultiselectWidget.parent.call( this, $.extend( true, {}, config, {
+ menu: {
+ filterFromInput: false
+ },
+ placeholder: mw.msg( 'mw-widgets-categoryselector-add-category-placeholder' ),
+ // This allows the user to both select non-existent categories, and prevents the selector from
+ // being wiped from #onMenuItemsChange when we change the available options in the dropdown
+ allowArbitrary: true
+ } ) );
+
+ // Mixin constructors
+ OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$handle } ) );
+
+ // Event handler to call the autocomplete methods
+ this.$input.on( 'change input cut paste', OO.ui.debounce( this.updateMenuItems.bind( this ), 100 ) );
+
+ // Initialize
+ this.api = config.api || new mw.Api();
+ this.searchCache = {};
+ };
+
+ /* Setup */
+
+ OO.inheritClass( mw.widgets.CategoryMultiselectWidget, OO.ui.CapsuleMultiselectWidget );
+ OO.mixinClass( mw.widgets.CategoryMultiselectWidget, OO.ui.mixin.PendingElement );
+
+ /* Methods */
+
+ /**
+ * Gets new items based on the input by calling
+ * {@link #getNewMenuItems getNewItems} and updates the menu
+ * after removing duplicates based on the data value.
+ *
+ * @private
+ * @method
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.updateMenuItems = function () {
+ this.getMenu().clearItems();
+ this.getNewMenuItems( this.$input.val() ).then( function ( items ) {
+ var existingItems, filteredItems,
+ menu = this.getMenu();
+
+ // Never show the menu if the input lost focus in the meantime
+ if ( !this.$input.is( ':focus' ) ) {
+ return;
+ }
+
+ // Array of strings of the data of OO.ui.MenuOptionsWidgets
+ existingItems = menu.getItems().map( function ( item ) {
+ return item.data;
+ } );
+
+ // Remove if items' data already exists
+ filteredItems = items.filter( function ( item ) {
+ return existingItems.indexOf( item ) === -1;
+ } );
+
+ // Map to an array of OO.ui.MenuOptionWidgets
+ filteredItems = filteredItems.map( function ( item ) {
+ return new OO.ui.MenuOptionWidget( {
+ data: item,
+ label: item
+ } );
+ } );
+
+ menu.addItems( filteredItems ).toggle( true );
+ }.bind( this ) );
+ };
+
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.clearInput = function () {
+ mw.widgets.CategoryMultiselectWidget.parent.prototype.clearInput.call( this );
+ // Abort all pending requests, we won't need their results
+ this.api.abort();
+ };
+
+ /**
+ * Searches for categories based on the input.
+ *
+ * @private
+ * @method
+ * @param {string} input The input used to prefix search categories
+ * @return {jQuery.Promise} Resolves with an array of categories
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.getNewMenuItems = function ( input ) {
+ var i,
+ promises = [],
+ deferred = $.Deferred();
+
+ if ( $.trim( input ) === '' ) {
+ deferred.resolve( [] );
+ return deferred.promise();
+ }
+
+ // Abort all pending requests, we won't need their results
+ this.api.abort();
+ for ( i = 0; i < this.searchTypes.length; i++ ) {
+ promises.push( this.searchCategories( input, this.searchTypes[ i ] ) );
+ }
+
+ this.pushPending();
+
+ $.when.apply( $, promises ).done( function () {
+ var categoryNames,
+ allData = [],
+ dataSets = Array.prototype.slice.apply( arguments );
+
+ // Collect values from all results
+ allData = allData.concat.apply( allData, dataSets );
+
+ categoryNames = allData
+ // Remove duplicates
+ .filter( function ( value, index, self ) {
+ return self.indexOf( value ) === index;
+ } )
+ // Get Title objects
+ .map( function ( name ) {
+ return mw.Title.newFromText( name );
+ } )
+ // Keep only titles from 'Category' namespace
+ .filter( function ( title ) {
+ return title && title.getNamespaceId() === NS_CATEGORY;
+ } )
+ // Convert back to strings, strip 'Category:' prefix
+ .map( function ( title ) {
+ return title.getMainText();
+ } );
+
+ deferred.resolve( categoryNames );
+
+ } ).always( this.popPending.bind( this ) );
+
+ return deferred.promise();
+ };
+
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.createItemWidget = function ( data ) {
+ var title = mw.Title.makeTitle( NS_CATEGORY, data );
+ if ( !title ) {
+ return null;
+ }
+ return new mw.widgets.CategoryCapsuleItemWidget( {
+ apiUrl: this.api.apiUrl || undefined,
+ title: title
+ } );
+ };
+
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.getItemFromData = function ( data ) {
+ // This is a bit of a hack... We have to canonicalize the data in the same way that
+ // #createItemWidget and CategoryCapsuleItemWidget will do, otherwise we won't find duplicates.
+ var title = mw.Title.makeTitle( NS_CATEGORY, data );
+ if ( !title ) {
+ return null;
+ }
+ return OO.ui.mixin.GroupElement.prototype.getItemFromData.call( this, title.getMainText() );
+ };
+
+ /**
+ * Validates the values in `this.searchType`.
+ *
+ * @private
+ * @return {boolean}
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.validateSearchTypes = function () {
+ var validSearchTypes = false,
+ searchTypeEnumCount = Object.keys( mw.widgets.CategoryMultiselectWidget.SearchType ).length;
+
+ // Check if all values are in the SearchType enum
+ validSearchTypes = this.searchTypes.every( function ( searchType ) {
+ return searchType > -1 && searchType < searchTypeEnumCount;
+ } );
+
+ if ( validSearchTypes === false ) {
+ throw new Error( 'Unknown searchType in searchTypes' );
+ }
+
+ // If the searchTypes has mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories
+ // it can be the only search type.
+ if ( this.searchTypes.indexOf( mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories ) > -1 &&
+ this.searchTypes.length > 1
+ ) {
+ throw new Error( 'Can\'t have additional search types with mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories' );
+ }
+
+ // If the searchTypes has mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories
+ // it can be the only search type.
+ if ( this.searchTypes.indexOf( mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories ) > -1 &&
+ this.searchTypes.length > 1
+ ) {
+ throw new Error( 'Can\'t have additional search types with mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories' );
+ }
+
+ return true;
+ };
+
+ /**
+ * Sets and validates the value of `this.searchType`.
+ *
+ * @param {mw.widgets.CategoryMultiselectWidget.SearchType[]} searchTypes
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.setSearchTypes = function ( searchTypes ) {
+ this.searchTypes = searchTypes;
+ this.validateSearchTypes();
+ };
+
+ /**
+ * Searches categories based on input and searchType.
+ *
+ * @private
+ * @method
+ * @param {string} input The input used to prefix search categories
+ * @param {mw.widgets.CategoryMultiselectWidget.SearchType} searchType
+ * @return {jQuery.Promise} Resolves with an array of categories
+ */
+ mw.widgets.CategoryMultiselectWidget.prototype.searchCategories = function ( input, searchType ) {
+ var deferred = $.Deferred(),
+ cacheKey = input + searchType.toString();
+
+ // Check cache
+ if ( this.searchCache[ cacheKey ] !== undefined ) {
+ return this.searchCache[ cacheKey ];
+ }
+
+ switch ( searchType ) {
+ case mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch:
+ this.api.get( {
+ formatversion: 2,
+ action: 'opensearch',
+ namespace: NS_CATEGORY,
+ limit: this.limit,
+ search: input
+ } ).done( function ( res ) {
+ var categories = res[ 1 ];
+ deferred.resolve( categories );
+ } ).fail( deferred.reject.bind( deferred ) );
+ break;
+
+ case mw.widgets.CategoryMultiselectWidget.SearchType.InternalSearch:
+ this.api.get( {
+ formatversion: 2,
+ action: 'query',
+ list: 'allpages',
+ apnamespace: NS_CATEGORY,
+ aplimit: this.limit,
+ apfrom: input,
+ apprefix: input
+ } ).done( function ( res ) {
+ var categories = res.query.allpages.map( function ( page ) {
+ return page.title;
+ } );
+ deferred.resolve( categories );
+ } ).fail( deferred.reject.bind( deferred ) );
+ break;
+
+ case mw.widgets.CategoryMultiselectWidget.SearchType.Exists:
+ if ( input.indexOf( '|' ) > -1 ) {
+ deferred.resolve( [] );
+ break;
+ }
+
+ this.api.get( {
+ formatversion: 2,
+ action: 'query',
+ prop: 'info',
+ titles: 'Category:' + input
+ } ).done( function ( res ) {
+ var categories = [];
+
+ $.each( res.query.pages, function ( index, page ) {
+ if ( !page.missing ) {
+ categories.push( page.title );
+ }
+ } );
+
+ deferred.resolve( categories );
+ } ).fail( deferred.reject.bind( deferred ) );
+ break;
+
+ case mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories:
+ if ( input.indexOf( '|' ) > -1 ) {
+ deferred.resolve( [] );
+ break;
+ }
+
+ this.api.get( {
+ formatversion: 2,
+ action: 'query',
+ list: 'categorymembers',
+ cmtype: 'subcat',
+ cmlimit: this.limit,
+ cmtitle: 'Category:' + input
+ } ).done( function ( res ) {
+ var categories = res.query.categorymembers.map( function ( category ) {
+ return category.title;
+ } );
+ deferred.resolve( categories );
+ } ).fail( deferred.reject.bind( deferred ) );
+ break;
+
+ case mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories:
+ if ( input.indexOf( '|' ) > -1 ) {
+ deferred.resolve( [] );
+ break;
+ }
+
+ this.api.get( {
+ formatversion: 2,
+ action: 'query',
+ prop: 'categories',
+ cllimit: this.limit,
+ titles: 'Category:' + input
+ } ).done( function ( res ) {
+ var categories = [];
+
+ $.each( res.query.pages, function ( index, page ) {
+ if ( !page.missing && $.isArray( page.categories ) ) {
+ categories.push.apply( categories, page.categories.map( function ( category ) {
+ return category.title;
+ } ) );
+ }
+ } );
+
+ deferred.resolve( categories );
+ } ).fail( deferred.reject.bind( deferred ) );
+ break;
+
+ default:
+ throw new Error( 'Unknown searchType' );
+ }
+
+ // Cache the result
+ this.searchCache[ cacheKey ] = deferred.promise();
+
+ return deferred.promise();
+ };
+
+ /**
+ * @enum mw.widgets.CategoryMultiselectWidget.SearchType
+ * Types of search available.
+ */
+ mw.widgets.CategoryMultiselectWidget.SearchType = {
+ /** Search using action=opensearch */
+ OpenSearch: 0,
+
+ /** Search using action=query */
+ InternalSearch: 1,
+
+ /** Search for existing categories with the exact title */
+ Exists: 2,
+
+ /** Search only subcategories */
+ SubCategories: 3,
+
+ /** Search only parent categories */
+ ParentCategories: 4
+ };
+
+ // For backwards compatibility. See T161285.
+ mw.widgets.CategorySelector = mw.widgets.CategoryMultiselectWidget;
+}( jQuery, mediaWiki ) );
+++ /dev/null
-/*!
- * MediaWiki Widgets - CategorySelector class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-( function ( $, mw ) {
- var CSP,
- NS_CATEGORY = mw.config.get( 'wgNamespaceIds' ).category;
-
- /**
- * Category selector widget. Displays an OO.ui.CapsuleMultiselectWidget
- * and autocompletes with available categories.
- *
- * mw.loader.using( 'mediawiki.widgets.CategorySelector', function () {
- * var selector = new mw.widgets.CategorySelector( {
- * searchTypes: [
- * mw.widgets.CategorySelector.SearchType.OpenSearch,
- * mw.widgets.CategorySelector.SearchType.InternalSearch
- * ]
- * } );
- *
- * $( 'body' ).append( selector.$element );
- *
- * selector.setSearchTypes( [ mw.widgets.CategorySelector.SearchType.SubCategories ] );
- * } );
- *
- * @class mw.widgets.CategorySelector
- * @uses mw.Api
- * @extends OO.ui.CapsuleMultiselectWidget
- * @mixins OO.ui.mixin.PendingElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- * @cfg {mw.Api} [api] Instance of mw.Api (or subclass thereof) to use for queries
- * @cfg {number} [limit=10] Maximum number of results to load
- * @cfg {mw.widgets.CategorySelector.SearchType[]} [searchTypes=[mw.widgets.CategorySelector.SearchType.OpenSearch]]
- * Default search API to use when searching.
- */
- function CategorySelector( config ) {
- // Config initialization
- config = $.extend( {
- limit: 10,
- searchTypes: [ CategorySelector.SearchType.OpenSearch ]
- }, config );
- this.limit = config.limit;
- this.searchTypes = config.searchTypes;
- this.validateSearchTypes();
-
- // Parent constructor
- mw.widgets.CategorySelector.parent.call( this, $.extend( true, {}, config, {
- menu: {
- filterFromInput: false
- },
- placeholder: mw.msg( 'mw-widgets-categoryselector-add-category-placeholder' ),
- // This allows the user to both select non-existent categories, and prevents the selector from
- // being wiped from #onMenuItemsChange when we change the available options in the dropdown
- allowArbitrary: true
- } ) );
-
- // Mixin constructors
- OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$handle } ) );
-
- // Event handler to call the autocomplete methods
- this.$input.on( 'change input cut paste', OO.ui.debounce( this.updateMenuItems.bind( this ), 100 ) );
-
- // Initialize
- this.api = config.api || new mw.Api();
- this.searchCache = {};
- }
-
- /* Setup */
-
- OO.inheritClass( CategorySelector, OO.ui.CapsuleMultiselectWidget );
- OO.mixinClass( CategorySelector, OO.ui.mixin.PendingElement );
- CSP = CategorySelector.prototype;
-
- /* Methods */
-
- /**
- * Gets new items based on the input by calling
- * {@link #getNewMenuItems getNewItems} and updates the menu
- * after removing duplicates based on the data value.
- *
- * @private
- * @method
- */
- CSP.updateMenuItems = function () {
- this.getMenu().clearItems();
- this.getNewMenuItems( this.$input.val() ).then( function ( items ) {
- var existingItems, filteredItems,
- menu = this.getMenu();
-
- // Never show the menu if the input lost focus in the meantime
- if ( !this.$input.is( ':focus' ) ) {
- return;
- }
-
- // Array of strings of the data of OO.ui.MenuOptionsWidgets
- existingItems = menu.getItems().map( function ( item ) {
- return item.data;
- } );
-
- // Remove if items' data already exists
- filteredItems = items.filter( function ( item ) {
- return existingItems.indexOf( item ) === -1;
- } );
-
- // Map to an array of OO.ui.MenuOptionWidgets
- filteredItems = filteredItems.map( function ( item ) {
- return new OO.ui.MenuOptionWidget( {
- data: item,
- label: item
- } );
- } );
-
- menu.addItems( filteredItems ).toggle( true );
- }.bind( this ) );
- };
-
- /**
- * @inheritdoc
- */
- CSP.clearInput = function () {
- CategorySelector.parent.prototype.clearInput.call( this );
- // Abort all pending requests, we won't need their results
- this.api.abort();
- };
-
- /**
- * Searches for categories based on the input.
- *
- * @private
- * @method
- * @param {string} input The input used to prefix search categories
- * @return {jQuery.Promise} Resolves with an array of categories
- */
- CSP.getNewMenuItems = function ( input ) {
- var i,
- promises = [],
- deferred = $.Deferred();
-
- if ( $.trim( input ) === '' ) {
- deferred.resolve( [] );
- return deferred.promise();
- }
-
- // Abort all pending requests, we won't need their results
- this.api.abort();
- for ( i = 0; i < this.searchTypes.length; i++ ) {
- promises.push( this.searchCategories( input, this.searchTypes[ i ] ) );
- }
-
- this.pushPending();
-
- $.when.apply( $, promises ).done( function () {
- var categoryNames,
- allData = [],
- dataSets = Array.prototype.slice.apply( arguments );
-
- // Collect values from all results
- allData = allData.concat.apply( allData, dataSets );
-
- categoryNames = allData
- // Remove duplicates
- .filter( function ( value, index, self ) {
- return self.indexOf( value ) === index;
- } )
- // Get Title objects
- .map( function ( name ) {
- return mw.Title.newFromText( name );
- } )
- // Keep only titles from 'Category' namespace
- .filter( function ( title ) {
- return title && title.getNamespaceId() === NS_CATEGORY;
- } )
- // Convert back to strings, strip 'Category:' prefix
- .map( function ( title ) {
- return title.getMainText();
- } );
-
- deferred.resolve( categoryNames );
-
- } ).always( this.popPending.bind( this ) );
-
- return deferred.promise();
- };
-
- /**
- * @inheritdoc
- */
- CSP.createItemWidget = function ( data ) {
- var title = mw.Title.makeTitle( NS_CATEGORY, data );
- if ( !title ) {
- return null;
- }
- return new mw.widgets.CategoryCapsuleItemWidget( {
- apiUrl: this.api.apiUrl || undefined,
- title: title
- } );
- };
-
- /**
- * @inheritdoc
- */
- CSP.getItemFromData = function ( data ) {
- // This is a bit of a hack... We have to canonicalize the data in the same way that
- // #createItemWidget and CategoryCapsuleItemWidget will do, otherwise we won't find duplicates.
- var title = mw.Title.makeTitle( NS_CATEGORY, data );
- if ( !title ) {
- return null;
- }
- return OO.ui.mixin.GroupElement.prototype.getItemFromData.call( this, title.getMainText() );
- };
-
- /**
- * Validates the values in `this.searchType`.
- *
- * @private
- * @return {boolean}
- */
- CSP.validateSearchTypes = function () {
- var validSearchTypes = false,
- searchTypeEnumCount = Object.keys( CategorySelector.SearchType ).length;
-
- // Check if all values are in the SearchType enum
- validSearchTypes = this.searchTypes.every( function ( searchType ) {
- return searchType > -1 && searchType < searchTypeEnumCount;
- } );
-
- if ( validSearchTypes === false ) {
- throw new Error( 'Unknown searchType in searchTypes' );
- }
-
- // If the searchTypes has CategorySelector.SearchType.SubCategories
- // it can be the only search type.
- if ( this.searchTypes.indexOf( CategorySelector.SearchType.SubCategories ) > -1 &&
- this.searchTypes.length > 1
- ) {
- throw new Error( 'Can\'t have additional search types with CategorySelector.SearchType.SubCategories' );
- }
-
- // If the searchTypes has CategorySelector.SearchType.ParentCategories
- // it can be the only search type.
- if ( this.searchTypes.indexOf( CategorySelector.SearchType.ParentCategories ) > -1 &&
- this.searchTypes.length > 1
- ) {
- throw new Error( 'Can\'t have additional search types with CategorySelector.SearchType.ParentCategories' );
- }
-
- return true;
- };
-
- /**
- * Sets and validates the value of `this.searchType`.
- *
- * @param {mw.widgets.CategorySelector.SearchType[]} searchTypes
- */
- CSP.setSearchTypes = function ( searchTypes ) {
- this.searchTypes = searchTypes;
- this.validateSearchTypes();
- };
-
- /**
- * Searches categories based on input and searchType.
- *
- * @private
- * @method
- * @param {string} input The input used to prefix search categories
- * @param {mw.widgets.CategorySelector.SearchType} searchType
- * @return {jQuery.Promise} Resolves with an array of categories
- */
- CSP.searchCategories = function ( input, searchType ) {
- var deferred = $.Deferred(),
- cacheKey = input + searchType.toString();
-
- // Check cache
- if ( this.searchCache[ cacheKey ] !== undefined ) {
- return this.searchCache[ cacheKey ];
- }
-
- switch ( searchType ) {
- case CategorySelector.SearchType.OpenSearch:
- this.api.get( {
- formatversion: 2,
- action: 'opensearch',
- namespace: NS_CATEGORY,
- limit: this.limit,
- search: input
- } ).done( function ( res ) {
- var categories = res[ 1 ];
- deferred.resolve( categories );
- } ).fail( deferred.reject.bind( deferred ) );
- break;
-
- case CategorySelector.SearchType.InternalSearch:
- this.api.get( {
- formatversion: 2,
- action: 'query',
- list: 'allpages',
- apnamespace: NS_CATEGORY,
- aplimit: this.limit,
- apfrom: input,
- apprefix: input
- } ).done( function ( res ) {
- var categories = res.query.allpages.map( function ( page ) {
- return page.title;
- } );
- deferred.resolve( categories );
- } ).fail( deferred.reject.bind( deferred ) );
- break;
-
- case CategorySelector.SearchType.Exists:
- if ( input.indexOf( '|' ) > -1 ) {
- deferred.resolve( [] );
- break;
- }
-
- this.api.get( {
- formatversion: 2,
- action: 'query',
- prop: 'info',
- titles: 'Category:' + input
- } ).done( function ( res ) {
- var categories = [];
-
- $.each( res.query.pages, function ( index, page ) {
- if ( !page.missing ) {
- categories.push( page.title );
- }
- } );
-
- deferred.resolve( categories );
- } ).fail( deferred.reject.bind( deferred ) );
- break;
-
- case CategorySelector.SearchType.SubCategories:
- if ( input.indexOf( '|' ) > -1 ) {
- deferred.resolve( [] );
- break;
- }
-
- this.api.get( {
- formatversion: 2,
- action: 'query',
- list: 'categorymembers',
- cmtype: 'subcat',
- cmlimit: this.limit,
- cmtitle: 'Category:' + input
- } ).done( function ( res ) {
- var categories = res.query.categorymembers.map( function ( category ) {
- return category.title;
- } );
- deferred.resolve( categories );
- } ).fail( deferred.reject.bind( deferred ) );
- break;
-
- case CategorySelector.SearchType.ParentCategories:
- if ( input.indexOf( '|' ) > -1 ) {
- deferred.resolve( [] );
- break;
- }
-
- this.api.get( {
- formatversion: 2,
- action: 'query',
- prop: 'categories',
- cllimit: this.limit,
- titles: 'Category:' + input
- } ).done( function ( res ) {
- var categories = [];
-
- $.each( res.query.pages, function ( index, page ) {
- if ( !page.missing && $.isArray( page.categories ) ) {
- categories.push.apply( categories, page.categories.map( function ( category ) {
- return category.title;
- } ) );
- }
- } );
-
- deferred.resolve( categories );
- } ).fail( deferred.reject.bind( deferred ) );
- break;
-
- default:
- throw new Error( 'Unknown searchType' );
- }
-
- // Cache the result
- this.searchCache[ cacheKey ] = deferred.promise();
-
- return deferred.promise();
- };
-
- /**
- * @enum mw.widgets.CategorySelector.SearchType
- * Types of search available.
- */
- CategorySelector.SearchType = {
- /** Search using action=opensearch */
- OpenSearch: 0,
-
- /** Search using action=query */
- InternalSearch: 1,
-
- /** Search for existing categories with the exact title */
- Exists: 2,
-
- /** Search only subcategories */
- SubCategories: 3,
-
- /** Search only parent categories */
- ParentCategories: 4
- };
-
- mw.widgets.CategorySelector = CategorySelector;
-}( jQuery, mediaWiki ) );
return mw.ForeignStructuredUpload.BookletLayout.parent.prototype.initialize.call( this ).then(
function () {
return $.when(
- // Point the CategorySelector to the right wiki
+ // Point the CategoryMultiselectWidget to the right wiki
booklet.upload.getApi().then( function ( api ) {
// If this is a ForeignApi, it will have a apiUrl, otherwise we don't need to do anything
if ( api.apiUrl ) {
- // Can't reuse the same object, CategorySelector calls #abort on its mw.Api instance
+ // Can't reuse the same object, CategoryMultiselectWidget calls #abort on its mw.Api instance
booklet.categoriesWidget.api = new mw.ForeignApi( api.apiUrl );
}
return $.Deferred().resolve();
multiline: true,
autosize: true
} );
- this.categoriesWidget = new mw.widgets.CategorySelector( {
+ this.categoriesWidget = new mw.widgets.CategoryMultiselectWidget( {
// Can't be done here because we don't know the target wiki yet... done in #initialize.
// api: new mw.ForeignApi( ... ),
$overlay: this.$overlay
* @ingroup Testing
*/
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
class DbTestRecorder extends TestRecorder {
public $version;
+ /** @var Database */
private $db;
- public function __construct( IDatabase $db ) {
+ public function __construct( IMaintainableDatabase $db ) {
$this->db = $db;
}
* @file
* @ingroup Testing
*/
+use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
use Wikimedia\ScopedCallback;
<?php
+use Wikimedia\Rdbms\IDatabase;
+
/**
* @group Database
* @group Database
* @covers Http::getProxy
*/
public function testGetProxy() {
+ $this->setMwGlobals( 'wgHTTPProxy', false );
+ $this->assertEquals(
+ '',
+ Http::getProxy(),
+ 'default setting'
+ );
+
$this->setMwGlobals( 'wgHTTPProxy', 'proxy.domain.tld' );
$this->assertEquals(
'proxy.domain.tld',
];
}
+ public static function provideRelativeRedirects() {
+ return [
+ [
+ 'location' => [ 'http://newsite/file.ext', '/newfile.ext' ],
+ 'final' => 'http://newsite/newfile.ext',
+ 'Relative file path Location: interpreted as full URL'
+ ],
+ [
+ 'location' => [ 'https://oldsite/file.ext' ],
+ 'final' => 'https://oldsite/file.ext',
+ 'Location to the HTTPS version of the site'
+ ],
+ [
+ 'location' => [
+ '/anotherfile.ext',
+ 'http://anotherfile/hoster.ext',
+ 'https://anotherfile/hoster.ext'
+ ],
+ 'final' => 'https://anotherfile/hoster.ext',
+ 'Relative file path Location: should keep the latest host and scheme!'
+ ],
+ [
+ 'location' => [ '/anotherfile.ext' ],
+ 'final' => 'http://oldsite/anotherfile.ext',
+ 'Relative Location without domain '
+ ],
+ [
+ 'location' => null,
+ 'final' => 'http://oldsite/file.ext',
+ 'No Location (no redirect) '
+ ],
+ ];
+ }
+
/**
* Warning:
*
* These tests are for code that makes use of an artifact of how CURL
* handles header reporting on redirect pages, and will need to be
- * rewritten when T31232 is taken care of (high-level handling of
- * HTTP redirects).
+ * rewritten when T31232 is taken care of (high-level handling of HTTP redirects).
+ *
+ * @dataProvider provideRelativeRedirects
+ * @covers MWHttpRequest::getFinalUrl
*/
- public function testRelativeRedirections() {
+ public function testRelativeRedirections( $location, $final, $message = null ) {
$h = MWHttpRequestTester::factory( 'http://oldsite/file.ext', [], __METHOD__ );
-
- # Forge a Location header
- $h->setRespHeaders( 'location', [
- 'http://newsite/file.ext',
- '/newfile.ext',
- ]
- );
- # Verify we correctly fix the Location
- $this->assertEquals(
- 'http://newsite/newfile.ext',
- $h->getFinalUrl(),
- "Relative file path Location: interpreted as full URL"
- );
-
- $h->setRespHeaders( 'location', [
- 'https://oldsite/file.ext'
- ]
- );
- $this->assertEquals(
- 'https://oldsite/file.ext',
- $h->getFinalUrl(),
- "Location to the HTTPS version of the site"
- );
-
- $h->setRespHeaders( 'location', [
- '/anotherfile.ext',
- 'http://anotherfile/hoster.ext',
- 'https://anotherfile/hoster.ext'
- ]
- );
- $this->assertEquals(
- 'https://anotherfile/hoster.ext',
- $h->getFinalUrl( "Relative file path Location: should keep the latest host and scheme!" )
- );
+ // Forge a Location header
+ $h->setRespHeaders( 'location', $location );
+ // Verify it correctly fixes the Location
+ $this->assertEquals( $final, $h->getFinalUrl(), $message );
}
/**
* Extension API: 20140829
*
* Commented out constants that were removed in PHP 5.6.0
- *
- * @covers CurlHttpRequest::execute
*/
public function provideCurlConstants() {
return [
/**
* Added this test based on an issue experienced with HHVM 3.3.0-dev
- * where it did not define a cURL constant.
+ * where it did not define a cURL constant. T72570
*
- * T72570
* @dataProvider provideCurlConstants
*/
public function testCurlConstants( $value ) {
<?php
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
$user = $this->getTestUser()->getUser();
$this->assertConditions(
[ # expected
- "rc_user != '{$user->getId()}'",
+ "rc_user_text != '{$user->getName()}'",
],
[
'hidemyself' => 1,
$user = $this->getTestUser()->getUser();
$this->assertConditions(
[ # expected
- "rc_user = '{$user->getId()}'",
+ "rc_user_text = '{$user->getName()}'",
],
[
'hidebyothers' => 1,
$user = $this->getTestUser()->getUser();
$this->assertConditions(
[ # expected
- "rc_user != '{$user->getId()}'",
- "rc_user = '{$user->getId()}'",
+ "rc_user_text != '{$user->getName()}'",
+ "rc_user_text = '{$user->getName()}'",
],
[
'hidemyself' => 1,