* Updated es5-shim from v4.1.5 to v4.5.8
==== New external libraries ====
+* Added wikimedia/scoped-callback v1.0.0
==== Removed and replaced external libraries ====
'DBUnexpectedError' => __DIR__ . '/includes/libs/rdbms/exception/DBUnexpectedError.php',
'DataUpdate' => __DIR__ . '/includes/deferred/DataUpdate.php',
'Database' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
- 'DatabaseBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseBase.php',
+ 'DatabaseBase' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
'DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
'DatabaseInstaller' => __DIR__ . '/includes/installer/DatabaseInstaller.php',
'DatabaseLag' => __DIR__ . '/maintenance/lag.php',
'FileBackendStoreShardListIterator' => __DIR__ . '/includes/libs/filebackend/FileBackendStore.php',
'FileBasedSiteLookup' => __DIR__ . '/includes/site/FileBasedSiteLookup.php',
'FileCacheBase' => __DIR__ . '/includes/cache/FileCacheBase.php',
+ 'FileContentHandler' => __DIR__ . '/includes/content/FileContentHandler.php',
'FileContentsHasher' => __DIR__ . '/includes/utils/FileContentsHasher.php',
'FileDeleteForm' => __DIR__ . '/includes/FileDeleteForm.php',
'FileDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'SamplingStatsdClient' => __DIR__ . '/includes/libs/stats/SamplingStatsdClient.php',
'Sanitizer' => __DIR__ . '/includes/Sanitizer.php',
'SavepointPostgres' => __DIR__ . '/includes/libs/rdbms/database/utils/SavepointPostgres.php',
- 'ScopedCallback' => __DIR__ . '/includes/libs/ScopedCallback.php',
+ 'ScopedCallback' => __DIR__ . '/includes/compat/ScopedCallback.php',
'ScopedLock' => __DIR__ . '/includes/libs/lockmanager/ScopedLock.php',
'SearchApi' => __DIR__ . '/includes/api/SearchApi.php',
'SearchDatabase' => __DIR__ . '/includes/search/SearchDatabase.php',
"wikimedia/php-session-serializer": "1.0.3",
"wikimedia/relpath": "1.0.3",
"wikimedia/running-stat": "1.1.0",
+ "wikimedia/scoped-callback": "1.0.0",
"wikimedia/utfnormal": "1.0.3",
"wikimedia/wrappedstring": "2.2.0",
"zordius/lightncandy": "0.23"
},
"require-dev": {
+ "composer/spdx-licenses": "1.1.4",
"jakub-onderka/php-parallel-lint": "0.9.2",
"justinrainbow/json-schema": "~3.0",
"mediawiki/mediawiki-codesniffer": "0.7.2",
},
"license-name": {
"type": "string",
- "description": "Short identifier for the license under which the extension is released.",
- "enum": [
- "AFL-1.1",
- "AFL-1.2",
- "AFL-2.0",
- "AFL-2.1",
- "AFL-3.0",
- "APL-1.0",
- "Aladdin",
- "ANTLR-PD",
- "Apache-1.0",
- "Apache-1.1",
- "Apache-2.0",
- "APSL-1.0",
- "APSL-1.1",
- "APSL-1.2",
- "APSL-2.0",
- "Artistic-1.0",
- "Artistic-1.0-cl8",
- "Artistic-1.0-Perl",
- "Artistic-2.0",
- "AAL",
- "BitTorrent-1.0",
- "BitTorrent-1.1",
- "BSL-1.0",
- "BSD-2-Clause",
- "BSD-2-Clause-FreeBSD",
- "BSD-2-Clause-NetBSD",
- "BSD-3-Clause",
- "BSD-3-Clause-Clear",
- "BSD-4-Clause",
- "BSD-4-Clause-UC",
- "CECILL-1.0",
- "CECILL-1.1",
- "CECILL-2.0",
- "CECILL-B",
- "CECILL-C",
- "ClArtistic",
- "CNRI-Python",
- "CNRI-Python-GPL-Compatible",
- "CPOL-1.02",
- "CDDL-1.0",
- "CDDL-1.1",
- "CPAL-1.0",
- "CPL-1.0",
- "CATOSL-1.1",
- "Condor-1.1",
- "CC-BY-1.0",
- "CC-BY-2.0",
- "CC-BY-2.5",
- "CC-BY-3.0",
- "CC-BY-ND-1.0",
- "CC-BY-ND-2.0",
- "CC-BY-ND-2.5",
- "CC-BY-ND-3.0",
- "CC-BY-NC-1.0",
- "CC-BY-NC-2.0",
- "CC-BY-NC-2.5",
- "CC-BY-NC-3.0",
- "CC-BY-NC-ND-1.0",
- "CC-BY-NC-ND-2.0",
- "CC-BY-NC-ND-2.5",
- "CC-BY-NC-ND-3.0",
- "CC-BY-NC-SA-1.0",
- "CC-BY-NC-SA-2.0",
- "CC-BY-NC-SA-2.5",
- "CC-BY-NC-SA-3.0",
- "CC-BY-SA-1.0",
- "CC-BY-SA-2.0",
- "CC-BY-SA-2.5",
- "CC-BY-SA-3.0",
- "CC0-1.0",
- "CUA-OPL-1.0",
- "D-FSL-1.0",
- "WTFPL",
- "EPL-1.0",
- "eCos-2.0",
- "ECL-1.0",
- "ECL-2.0",
- "EFL-1.0",
- "EFL-2.0",
- "Entessa",
- "ErlPL-1.1",
- "EUDatagrid",
- "EUPL-1.0",
- "EUPL-1.1",
- "Fair",
- "Frameworx-1.0",
- "FTL",
- "AGPL-1.0",
- "AGPL-3.0",
- "GFDL-1.1",
- "GFDL-1.2",
- "GFDL-1.3",
- "GPL-1.0",
- "GPL-1.0+",
- "GPL-2.0",
- "GPL-2.0+",
- "GPL-2.0-with-autoconf-exception",
- "GPL-2.0-with-bison-exception",
- "GPL-2.0-with-classpath-exception",
- "GPL-2.0-with-font-exception",
- "GPL-2.0-with-GCC-exception",
- "GPL-3.0",
- "GPL-3.0+",
- "GPL-3.0-with-autoconf-exception",
- "GPL-3.0-with-GCC-exception",
- "LGPL-2.1",
- "LGPL-2.1+",
- "LGPL-3.0",
- "LGPL-3.0+",
- "LGPL-2.0",
- "LGPL-2.0+",
- "gSOAP-1.3b",
- "HPND",
- "IBM-pibs",
- "IPL-1.0",
- "Imlib2",
- "IJG",
- "Intel",
- "IPA",
- "ISC",
- "JSON",
- "LPPL-1.3a",
- "LPPL-1.0",
- "LPPL-1.1",
- "LPPL-1.2",
- "LPPL-1.3c",
- "Libpng",
- "LPL-1.02",
- "LPL-1.0",
- "MS-PL",
- "MS-RL",
- "MirOS",
- "MIT",
- "Motosoto",
- "MPL-1.0",
- "MPL-1.1",
- "MPL-2.0",
- "MPL-2.0-no-copyleft-exception",
- "Multics",
- "NASA-1.3",
- "Naumen",
- "NBPL-1.0",
- "NGPL",
- "NOSL",
- "NPL-1.0",
- "NPL-1.1",
- "Nokia",
- "NPOSL-3.0",
- "NTP",
- "OCLC-2.0",
- "ODbL-1.0",
- "PDDL-1.0",
- "OGTSL",
- "OLDAP-2.2.2",
- "OLDAP-1.1",
- "OLDAP-1.2",
- "OLDAP-1.3",
- "OLDAP-1.4",
- "OLDAP-2.0",
- "OLDAP-2.0.1",
- "OLDAP-2.1",
- "OLDAP-2.2",
- "OLDAP-2.2.1",
- "OLDAP-2.3",
- "OLDAP-2.4",
- "OLDAP-2.5",
- "OLDAP-2.6",
- "OLDAP-2.7",
- "OPL-1.0",
- "OSL-1.0",
- "OSL-2.0",
- "OSL-2.1",
- "OSL-3.0",
- "OLDAP-2.8",
- "OpenSSL",
- "PHP-3.0",
- "PHP-3.01",
- "PostgreSQL",
- "Python-2.0",
- "QPL-1.0",
- "RPSL-1.0",
- "RPL-1.1",
- "RPL-1.5",
- "RHeCos-1.1",
- "RSCPL",
- "Ruby",
- "SAX-PD",
- "SGI-B-1.0",
- "SGI-B-1.1",
- "SGI-B-2.0",
- "OFL-1.0",
- "OFL-1.1",
- "SimPL-2.0",
- "Sleepycat",
- "SMLNJ",
- "SugarCRM-1.1.3",
- "SISSL",
- "SISSL-1.2",
- "SPL-1.0",
- "Watcom-1.0",
- "NCSA",
- "VSL-1.0",
- "W3C",
- "WXwindows",
- "Xnet",
- "X11",
- "XFree86-1.1",
- "YPL-1.0",
- "YPL-1.1",
- "Zimbra-1.3",
- "Zlib",
- "ZPL-1.1",
- "ZPL-2.0",
- "ZPL-2.1",
- "Unlicense"
- ]
+ "description": "SPDX identifier for the license under which the extension is released."
},
"requires": {
"type": "object",
},
"license-name": {
"type": "string",
- "description": "Short identifier for the license under which the extension is released.",
- "enum": [
- "AFL-1.1",
- "AFL-1.2",
- "AFL-2.0",
- "AFL-2.1",
- "AFL-3.0",
- "APL-1.0",
- "Aladdin",
- "ANTLR-PD",
- "Apache-1.0",
- "Apache-1.1",
- "Apache-2.0",
- "APSL-1.0",
- "APSL-1.1",
- "APSL-1.2",
- "APSL-2.0",
- "Artistic-1.0",
- "Artistic-1.0-cl8",
- "Artistic-1.0-Perl",
- "Artistic-2.0",
- "AAL",
- "BitTorrent-1.0",
- "BitTorrent-1.1",
- "BSL-1.0",
- "BSD-2-Clause",
- "BSD-2-Clause-FreeBSD",
- "BSD-2-Clause-NetBSD",
- "BSD-3-Clause",
- "BSD-3-Clause-Clear",
- "BSD-4-Clause",
- "BSD-4-Clause-UC",
- "CECILL-1.0",
- "CECILL-1.1",
- "CECILL-2.0",
- "CECILL-B",
- "CECILL-C",
- "ClArtistic",
- "CNRI-Python",
- "CNRI-Python-GPL-Compatible",
- "CPOL-1.02",
- "CDDL-1.0",
- "CDDL-1.1",
- "CPAL-1.0",
- "CPL-1.0",
- "CATOSL-1.1",
- "Condor-1.1",
- "CC-BY-1.0",
- "CC-BY-2.0",
- "CC-BY-2.5",
- "CC-BY-3.0",
- "CC-BY-ND-1.0",
- "CC-BY-ND-2.0",
- "CC-BY-ND-2.5",
- "CC-BY-ND-3.0",
- "CC-BY-NC-1.0",
- "CC-BY-NC-2.0",
- "CC-BY-NC-2.5",
- "CC-BY-NC-3.0",
- "CC-BY-NC-ND-1.0",
- "CC-BY-NC-ND-2.0",
- "CC-BY-NC-ND-2.5",
- "CC-BY-NC-ND-3.0",
- "CC-BY-NC-SA-1.0",
- "CC-BY-NC-SA-2.0",
- "CC-BY-NC-SA-2.5",
- "CC-BY-NC-SA-3.0",
- "CC-BY-SA-1.0",
- "CC-BY-SA-2.0",
- "CC-BY-SA-2.5",
- "CC-BY-SA-3.0",
- "CC0-1.0",
- "CUA-OPL-1.0",
- "D-FSL-1.0",
- "WTFPL",
- "EPL-1.0",
- "eCos-2.0",
- "ECL-1.0",
- "ECL-2.0",
- "EFL-1.0",
- "EFL-2.0",
- "Entessa",
- "ErlPL-1.1",
- "EUDatagrid",
- "EUPL-1.0",
- "EUPL-1.1",
- "Fair",
- "Frameworx-1.0",
- "FTL",
- "AGPL-1.0",
- "AGPL-3.0",
- "GFDL-1.1",
- "GFDL-1.2",
- "GFDL-1.3",
- "GPL-1.0",
- "GPL-1.0+",
- "GPL-2.0",
- "GPL-2.0+",
- "GPL-2.0-with-autoconf-exception",
- "GPL-2.0-with-bison-exception",
- "GPL-2.0-with-classpath-exception",
- "GPL-2.0-with-font-exception",
- "GPL-2.0-with-GCC-exception",
- "GPL-3.0",
- "GPL-3.0+",
- "GPL-3.0-with-autoconf-exception",
- "GPL-3.0-with-GCC-exception",
- "LGPL-2.1",
- "LGPL-2.1+",
- "LGPL-3.0",
- "LGPL-3.0+",
- "LGPL-2.0",
- "LGPL-2.0+",
- "gSOAP-1.3b",
- "HPND",
- "IBM-pibs",
- "IPL-1.0",
- "Imlib2",
- "IJG",
- "Intel",
- "IPA",
- "ISC",
- "JSON",
- "LPPL-1.3a",
- "LPPL-1.0",
- "LPPL-1.1",
- "LPPL-1.2",
- "LPPL-1.3c",
- "Libpng",
- "LPL-1.02",
- "LPL-1.0",
- "MS-PL",
- "MS-RL",
- "MirOS",
- "MIT",
- "Motosoto",
- "MPL-1.0",
- "MPL-1.1",
- "MPL-2.0",
- "MPL-2.0-no-copyleft-exception",
- "Multics",
- "NASA-1.3",
- "Naumen",
- "NBPL-1.0",
- "NGPL",
- "NOSL",
- "NPL-1.0",
- "NPL-1.1",
- "Nokia",
- "NPOSL-3.0",
- "NTP",
- "OCLC-2.0",
- "ODbL-1.0",
- "PDDL-1.0",
- "OGTSL",
- "OLDAP-2.2.2",
- "OLDAP-1.1",
- "OLDAP-1.2",
- "OLDAP-1.3",
- "OLDAP-1.4",
- "OLDAP-2.0",
- "OLDAP-2.0.1",
- "OLDAP-2.1",
- "OLDAP-2.2",
- "OLDAP-2.2.1",
- "OLDAP-2.3",
- "OLDAP-2.4",
- "OLDAP-2.5",
- "OLDAP-2.6",
- "OLDAP-2.7",
- "OPL-1.0",
- "OSL-1.0",
- "OSL-2.0",
- "OSL-2.1",
- "OSL-3.0",
- "OLDAP-2.8",
- "OpenSSL",
- "PHP-3.0",
- "PHP-3.01",
- "PostgreSQL",
- "Python-2.0",
- "QPL-1.0",
- "RPSL-1.0",
- "RPL-1.1",
- "RPL-1.5",
- "RHeCos-1.1",
- "RSCPL",
- "Ruby",
- "SAX-PD",
- "SGI-B-1.0",
- "SGI-B-1.1",
- "SGI-B-2.0",
- "OFL-1.0",
- "OFL-1.1",
- "SimPL-2.0",
- "Sleepycat",
- "SMLNJ",
- "SugarCRM-1.1.3",
- "SISSL",
- "SISSL-1.2",
- "SPL-1.0",
- "Watcom-1.0",
- "NCSA",
- "VSL-1.0",
- "W3C",
- "WXwindows",
- "Xnet",
- "X11",
- "XFree86-1.1",
- "YPL-1.0",
- "YPL-1.1",
- "Zimbra-1.3",
- "Zlib",
- "ZPL-1.1",
- "ZPL-2.0",
- "ZPL-2.1",
- "Unlicense"
- ]
+ "description": "SPDX identifier for the license under which the extension is released."
},
"requires": {
"type": "object",
uses are in active use.
&$tags: list of all active tags. Append to this array.
+'ChangeTagsAfterUpdateTags': Called after tags have been updated with the
+ChangeTags::updateTags function. Params:
+$addedTags: tags effectively added in the update
+$removedTags: tags effectively removed in the update
+$prevTags: tags that were present prior to the update
+$rc_id: recentchanges table id
+$rev_id: revision table id
+$log_id: logging table id
+$params: tag params
+$rc: RecentChange being tagged when the tagging accompanies the action or null
+$user: User who performed the tagging when the tagging is subsequent to the action or null
+
'Collation::factory': Called if $wgCategoryCollation is an unknown collation.
$collationName: Name of the collation in question
&$collationObject: Null. Replace with a subclass of the Collation class that
array_merge(
LinkCache::getSelectFields(),
[
+ 'page_namespace',
+ 'page_title',
'cl_sortkey',
'cat_id',
'cat_title',
'JobRunner' => [
'readQueryTime' => 30,
'writeQueryTime' => 5,
- 'maxAffected' => 1000
+ 'maxAffected' => 500 // ballpark of $wgUpdateRowsPerQuery
],
// Command-line scripts
'Maintenance' => [
* When writing code that should be compatible with older MediaWiki
* versions, either stick to the old names or define the new constants
* yourself, if they're not defined already.
+ *
+ * @deprecated since 1.14
*/
define( 'NS_IMAGE', NS_FILE );
+/**
+ * @deprecated since 1.14
+ */
define( 'NS_IMAGE_TALK', NS_FILE_TALK );
/**@}*/
'id' => $name,
'cols' => $wgUser->getIntOption( 'cols' ),
'rows' => $wgUser->getIntOption( 'rows' ),
+ // The following classes can be used here:
+ // * mw-editfont-default
+ // * mw-editfont-monospace
+ // * mw-editfont-sans-serif
+ // * mw-editfont-serif
+ 'class' => 'mw-editfont-' . $wgUser->getOption( 'editfont' ),
// Avoid PHP notices when appending preferences
// (appending allows customAttribs['style'] to still work).
'style' => ''
use Liuggio\StatsdClient\Sender\SocketSender;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\Session\SessionManager;
+use Wikimedia\ScopedCallback;
// Hide compatibility functions from Doxygen
/// @cond
* @todo Replace calls to wfGetDB with calls to LoadBalancer::getConnection()
* on an injected instance of LoadBalancer.
*
- * @return DatabaseBase
+ * @return Database
*/
function wfGetDB( $db, $groups = [], $wiki = false ) {
return wfGetLB( $wiki )->getConnection( $db, $groups, $wiki );
ContentHandler::getLocalizedName( $this->oldTitle->getContentModel() ),
ContentHandler::getLocalizedName( $this->newTitle->getContentModel() )
);
+ } elseif (
+ !ContentHandler::getForTitle( $this->oldTitle )->canBeUsedOn( $this->newTitle )
+ ) {
+ $status->fatal(
+ 'content-not-allowed-here',
+ ContentHandler::getLocalizedName( $this->oldTitle->getContentModel() ),
+ $this->newTitle->getPrefixedText()
+ );
}
// Image-specific checks
*
* @file
*/
+use Wikimedia\ScopedCallback;
/**
* Gives access to properties of a page.
) ) {
return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit, $offset ) );
}
- return $this->strings( $this->handleResultFromHook( $srchres, $namespaces, $search, $limit ) );
+ return $this->strings(
+ $this->handleResultFromHook( $srchres, $namespaces, $search, $limit, $offset ) );
}
- private function handleResultFromHook( $srchres, $namespaces, $search, $limit ) {
- $rescorer = new SearchExactMatchRescorer();
- return $rescorer->rescore( $search, $namespaces, $srchres, $limit );
+ private function handleResultFromHook( $srchres, $namespaces, $search, $limit, $offset ) {
+ if ( $offset === 0 ) {
+ // Only perform exact db match if offset === 0
+ // This is still far from perfect but at least we avoid returning the
+ // same title afain and again when the user is scrolling with a query
+ // that matches a title in the db.
+ $rescorer = new SearchExactMatchRescorer();
+ $srchres = $rescorer->rescore( $search, $namespaces, $srchres, $limit );
+ }
+ return $srchres;
}
/**
| url\s*\(
| image\s*\(
| image-set\s*\(
+ | attr\s*\([^)]+[\s,]+url
!ix', $value ) ) {
return '/* insecure input */';
}
list( /* $whole */, $protocol, $host, $rest ) = $matches;
// Characters that will be ignored in IDNs.
- // http://tools.ietf.org/html/3454#section-3.1
+ // https://tools.ietf.org/html/rfc3454#section-3.1
// Strip them before further processing so blacklists and such work.
$strip = "/
\\s| # general whitespace
}
/**
- * @return DatabaseBase
+ * @return Database
* @throws MWException
*/
private function getConnection() {
/**
* @param int $dbIndex DB_MASTER or DB_REPLICA
*
- * @return DatabaseBase
+ * @return IDatabase
* @throws MWException
*/
- private function getConnection( $dbIndex ) {
- return $this->loadBalancer->getConnection( $dbIndex, [ 'watchlist' ] );
- }
-
- /**
- * @param Database $connection
- *
- * @throws MWException
- */
- private function reuseConnection( $connection ) {
- $this->loadBalancer->reuseConnection( $connection );
+ private function getConnectionRef( $dbIndex ) {
+ return $this->loadBalancer->getConnectionRef( $dbIndex, [ 'watchlist' ] );
}
/**
* @return int
*/
public function countWatchedItems( User $user ) {
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
$return = (int)$dbr->selectField(
'watchlist',
'COUNT(*)',
],
__METHOD__
);
- $this->reuseConnection( $dbr );
return $return;
}
* @return int
*/
public function countWatchers( LinkTarget $target ) {
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
$return = (int)$dbr->selectField(
'watchlist',
'COUNT(*)',
],
__METHOD__
);
- $this->reuseConnection( $dbr );
return $return;
}
* @throws MWException
*/
public function countVisitingWatchers( LinkTarget $target, $threshold ) {
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
$visitingWatchers = (int)$dbr->selectField(
'watchlist',
'COUNT(*)',
],
__METHOD__
);
- $this->reuseConnection( $dbr );
return $visitingWatchers;
}
public function countWatchersMultiple( array $targets, array $options = [] ) {
$dbOptions = [ 'GROUP BY' => [ 'wl_namespace', 'wl_title' ] ];
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
if ( array_key_exists( 'minimumWatchers', $options ) ) {
$dbOptions['HAVING'] = 'COUNT(*) >= ' . (int)$options['minimumWatchers'];
$dbOptions
);
- $this->reuseConnection( $dbr );
-
$watchCounts = [];
foreach ( $targets as $linkTarget ) {
$watchCounts[$linkTarget->getNamespace()][$linkTarget->getDBkey()] = 0;
array $targetsWithVisitThresholds,
$minimumWatchers = null
) {
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
$conds = $this->getVisitingWatchersCondition( $dbr, $targetsWithVisitThresholds );
$dbOptions
);
- $this->reuseConnection( $dbr );
-
$watcherCounts = [];
foreach ( $targetsWithVisitThresholds as list( $target ) ) {
/* @var LinkTarget $target */
return false;
}
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
$row = $dbr->selectRow(
'watchlist',
'wl_notificationtimestamp',
$this->dbCond( $user, $target ),
__METHOD__
);
- $this->reuseConnection( $dbr );
if ( !$row ) {
return false;
"wl_title {$options['sort']}"
];
}
- $db = $this->getConnection( $options['forWrite'] ? DB_MASTER : DB_REPLICA );
+ $db = $this->getConnectionRef( $options['forWrite'] ? DB_MASTER : DB_REPLICA );
$res = $db->select(
'watchlist',
__METHOD__,
$dbOptions
);
- $this->reuseConnection( $db );
$watchedItems = [];
foreach ( $res as $row ) {
return $timestamps;
}
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
$lb = new LinkBatch( $targetsToLoad );
$res = $dbr->select(
],
__METHOD__
);
- $this->reuseConnection( $dbr );
foreach ( $res as $row ) {
$timestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
$this->uncache( $user, $target );
}
- $dbw = $this->getConnection( DB_MASTER );
+ $dbw = $this->getConnectionRef( DB_MASTER );
foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
// Use INSERT IGNORE to avoid overwriting the notification timestamp
// if there's already an entry for this page
$dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
}
- $this->reuseConnection( $dbw );
return true;
}
$this->uncache( $user, $target );
- $dbw = $this->getConnection( DB_MASTER );
+ $dbw = $this->getConnectionRef( DB_MASTER );
$dbw->delete( 'watchlist',
[
'wl_user' => $user->getId(),
], __METHOD__
);
$success = (bool)$dbw->affectedRows();
- $this->reuseConnection( $dbw );
return $success;
}
return false;
}
- $dbw = $this->getConnection( DB_MASTER );
+ $dbw = $this->getConnectionRef( DB_MASTER );
$conds = [ 'wl_user' => $user->getId() ];
if ( $targets ) {
__METHOD__
);
- $this->reuseConnection( $dbw );
-
$this->uncacheUser( $user );
return $success;
* @return int[] Array of user IDs the timestamp has been updated for
*/
public function updateNotificationTimestamp( User $editor, LinkTarget $target, $timestamp ) {
- $dbw = $this->getConnection( DB_MASTER );
+ $dbw = $this->getConnectionRef( DB_MASTER );
$uids = $dbw->selectFieldValues(
'watchlist',
'wl_user',
],
__METHOD__
);
- $this->reuseConnection( $dbw );
$watchers = array_map( 'intval', $uids );
if ( $watchers ) {
function () use ( $timestamp, $watchers, $target, $fname ) {
global $wgUpdateRowsPerQuery;
- $dbw = $this->getConnection( DB_MASTER );
+ $dbw = $this->getConnectionRef( DB_MASTER );
$factory = wfGetLBFactory();
$ticket = $factory->getEmptyTransactionTicket( __METHOD__ );
}
}
$this->uncacheLinkTarget( $target );
-
- $this->reuseConnection( $dbw );
},
DeferredUpdates::POSTSEND,
$dbw
$queryOptions['LIMIT'] = $unreadLimit;
}
- $dbr = $this->getConnection( DB_REPLICA );
+ $dbr = $this->getConnectionRef( DB_REPLICA );
$rowCount = $dbr->selectRowCount(
'watchlist',
'1',
__METHOD__,
$queryOptions
);
- $this->reuseConnection( $dbr );
if ( !isset( $unreadLimit ) ) {
return $rowCount;
* @param LinkTarget $newTarget
*/
public function duplicateEntry( LinkTarget $oldTarget, LinkTarget $newTarget ) {
- $dbw = $this->getConnection( DB_MASTER );
+ $dbw = $this->getConnectionRef( DB_MASTER );
$result = $dbw->select(
'watchlist',
__METHOD__
);
}
-
- $this->reuseConnection( $dbw );
}
}
/**
* Gets a default replica DB connection object
- * @return DatabaseBase
+ * @return Database
*/
protected function getDB() {
if ( !isset( $this->mSlaveDB ) ) {
class ApiClearHasMsg extends ApiBase {
public function execute() {
$user = $this->getUser();
- $user->setNewtalk( false );
+ if ( $this->getRequest()->wasPosted() ) {
+ $user->setNewtalk( false );
+ } else {
+ DeferredUpdates::addCallableUpdate( function () use ( $user ) {
+ $user->setNewtalk( false );
+ } );
+ }
$this->getResult()->addValue( null, $this->getModuleName(), 'success' );
}
private $continuationData = [];
private $generatorContinuationData = [];
+ private $generatorNonContinuationData = [];
private $generatorParams = [];
private $generatorDone = false;
$this->continuationData[$name][$paramName] = $paramValue;
}
+ /**
+ * Set the non-continuation parameter for the generator module
+ *
+ * In case the generator isn't going to be continued, this sets the fields
+ * to return.
+ *
+ * @since 1.28
+ * @param ApiBase $module
+ * @param string $paramName
+ * @param string|array $paramValue
+ */
+ public function addGeneratorNonContinueParam( ApiBase $module, $paramName, $paramValue ) {
+ $name = $module->getModuleName();
+ $paramName = $module->encodeParamName( $paramName );
+ if ( is_array( $paramValue ) ) {
+ $paramValue = implode( '|', $paramValue );
+ }
+ $this->generatorNonContinuationData[$name][$paramName] = $paramValue;
+ }
+
/**
* Set the continuation parameter for the generator module
* @param ApiBase $module
return array_merge_recursive( $this->continuationData, $this->generatorContinuationData );
}
+ /**
+ * Fetch raw non-continuation data
+ * @since 1.28
+ * @return array
+ */
+ public function getRawNonContinuation() {
+ return $this->generatorNonContinuationData;
+ }
+
/**
* Fetch continuation result data
* @return array [ (array)$data, (bool)$batchcomplete ]
foreach ( $continuationData as $module => $kvp ) {
$data += $kvp;
}
- $data += $this->generatorParams;
- $generatorKeys = implode( '|', array_keys( $this->generatorParams ) );
+ $generatorParams = [];
+ foreach ( $this->generatorNonContinuationData as $kvp ) {
+ $generatorParams += $kvp;
+ }
+ $generatorParams += $this->generatorParams;
+ $data += $generatorParams;
+ $generatorKeys = implode( '|', array_keys( $generatorParams ) );
} elseif ( $this->generatorContinuationData ) {
// All the generator-using modules are complete, but the
// generator isn't. Continue the generator and restart the
/**
* Get the database connection (read-only)
- * @return DatabaseBase
+ * @return Database
*/
protected function getDB() {
return $this->mDbSource->getDB();
* @param string $name Name to assign to the database connection
* @param int $db One of the DB_* constants
* @param array $groups Query groups
- * @return DatabaseBase
+ * @return Database
*/
public function getNamedDB( $name, $db, $groups ) {
if ( !array_key_exists( $name, $this->mNamedDB ) ) {
// Write the continuation data into the result
$this->setContinuationManager( null );
if ( $this->mParams['rawcontinue'] ) {
+ $data = $continuationManager->getRawNonContinuation();
+ if ( $data ) {
+ $this->getResult()->addValue( null, 'query-noncontinue', $data,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
$data = $continuationManager->getRawContinuation();
if ( $data ) {
$this->getResult()->addValue( null, 'query-continue', $data,
* which may not necessarily be the same as the local DB.
*
* TODO: allow querying non-local repos.
- * @return DatabaseBase
+ * @return Database
*/
protected function getDB() {
return $this->mRepo->getSlaveDB();
$nextIndex = 0;
$generated = [];
foreach ( $res as $row ) {
+ if ( $count === 0 && $resultPageSet !== null ) {
+ // Set the non-continue since the list of all revisions is
+ // prone to having entries added at the start frequently.
+ $this->getContinuationManager()->addGeneratorNonContinueParam(
+ $this, 'continue', "$row->rev_timestamp|$row->rev_id"
+ );
+ }
if ( ++$count > $this->limit ) {
// We've had enough
$this->setContinueEnumParameter( 'continue', "$row->rev_timestamp|$row->rev_id" );
/**
* Get the Query database connection (read-only)
- * @return DatabaseBase
+ * @return Database
*/
protected function getDB() {
if ( is_null( $this->mDb ) ) {
* @param string $name Name to assign to the database connection
* @param int $db One of the DB_* constants
* @param array $groups Query groups
- * @return DatabaseBase
+ * @return Database
*/
public function selectNamedDB( $name, $db, $groups ) {
$this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
/* Iterate through the rows, adding data extracted from them to our query result. */
foreach ( $res as $row ) {
+ if ( $count === 0 && $resultPageSet !== null ) {
+ // Set the non-continue since the list of recentchanges is
+ // prone to having entries added at the start frequently.
+ $this->getContinuationManager()->addGeneratorNonContinueParam(
+ $this, 'continue', "$row->rc_timestamp|$row->rc_id"
+ );
+ }
if ( ++$count > $params['limit'] ) {
// We've reached the one extra which shows that there are
// additional pages to be had. Stop here...
"@metadata": {
"authors": [
"Aftabuzzaman",
- "Bodhisattwa"
+ "Bodhisattwa",
+ "আজিজ"
]
},
+ "apihelp-main-param-format": "আউটপুটের বিন্যাস",
+ "apihelp-main-param-requestid": "এখানে প্রদত্ত যেকোন মান প্রতিক্রিয়ায় অন্তর্ভুক্ত করা হবে। অনুরোধের পার্থক্য করতে ব্যবহার করা যেতে পারে।",
"apihelp-block-description": "ব্যবহারকারীকে বাধা দিন।",
+ "apihelp-block-param-reason": "বাধার দানের কারণ।",
+ "apihelp-createaccount-description": "নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করুন",
"apihelp-createaccount-param-name": "ব্যবহারকারী নাম।",
"apihelp-delete-description": "একটি পাতা মুছে ফেলুন।",
"apihelp-delete-example-simple": "<kbd>প্রধান পাতা</kbd> মুছে ফেলুন।",
+ "apihelp-edit-param-text": "পাতার বিষয়বস্তু।",
"apihelp-edit-param-minor": "অনুল্লেখ্য সম্পাদনা।",
+ "apihelp-edit-param-createonly": "পাতাটি আগেই বিদ্যমান থাকলে সম্পদনা করবেন না।",
+ "apihelp-edit-param-contentmodel": "নতুন বিষয়বস্তুর, বিষয়বস্তু-মডেল।",
+ "apihelp-edit-example-edit": "একটি পাতা সম্পাদনা করুন",
+ "apihelp-edit-example-prepend": "একটি পৃষ্ঠার পূর্বে <kbd>__NOTOC__</kbd> লিখুন।",
"apihelp-login-example-login": "প্রবেশ"
}
"authors": [
"Gorizon",
"Mirzali",
- "Kumkumuk"
+ "Kumkumuk",
+ "Asmen"
]
},
"apihelp-main-param-action": "Performansa kamci aksiyon",
"apihelp-disabled-description": "Eno modul aktiv niyo.",
"apihelp-edit-description": "Vıraze û pelan bıvurne.",
"apihelp-edit-param-text": "Zerreki pele",
- "apihelp-edit-param-minor": "Vurnayışo qıckek.",
+ "apihelp-edit-param-minor": "Vurriyayışê werdiy",
"apihelp-edit-param-notminor": "Vurnayışo qıckek niyo.",
"apihelp-edit-param-bot": "Nê vurnayışi zey boti nişan ke.",
"apihelp-edit-example-edit": "Şeker bıvurne",
/**
* Get the replica DB connection to the database
* When non existing, will initialize the connection.
- * @return DatabaseBase
+ * @return Database
*/
protected function getDB() {
if ( !isset( $this->db ) ) {
*/
public $counter = -1;
+ /**
+ * @var array List of tags to apply
+ */
+ private $tags = [];
+
/**
* @var array Array of change types
*/
# Notify extensions
Hooks::run( 'RecentChange_save', [ &$this ] );
+ if ( count( $this->tags ) ) {
+ ChangeTags::addTags( $this->tags, $this->mAttribs['rc_id'],
+ $this->mAttribs['rc_this_oldid'], $this->mAttribs['rc_logid'], null, $this );
+ }
+
# Notify external application via UDP
if ( !$noudp ) {
$this->notifyRCFeeds();
DeferredUpdates::addCallableUpdate(
function () use ( $rc, $tags ) {
+ $rc->addTags( $tags );
$rc->save();
if ( $rc->mAttribs['rc_patrolled'] ) {
PatrolLog::record( $rc, true, $rc->getPerformer() );
}
- if ( count( $tags ) ) {
- ChangeTags::addTags( $tags, $rc->mAttribs['rc_id'],
- $rc->mAttribs['rc_this_oldid'], null, null );
- }
},
DeferredUpdates::POSTSEND,
wfGetDB( DB_MASTER )
DeferredUpdates::addCallableUpdate(
function () use ( $rc, $tags ) {
+ $rc->addTags( $tags );
$rc->save();
if ( $rc->mAttribs['rc_patrolled'] ) {
PatrolLog::record( $rc, true, $rc->getPerformer() );
}
- if ( count( $tags ) ) {
- ChangeTags::addTags( $tags, $rc->mAttribs['rc_id'],
- $rc->mAttribs['rc_this_oldid'], null, null );
- }
},
DeferredUpdates::POSTSEND,
wfGetDB( DB_MASTER )
return $unserializedParams;
}
+
+ /**
+ * Tags to append to the recent change,
+ * and associated revision/log
+ *
+ * @since 1.28
+ *
+ * @param string|array $tags
+ */
+ public function addTags( $tags ) {
+ if ( is_string( $tags ) ) {
+ $this->tags[] = $tags;
+ } else {
+ $this->tags = array_merge( $tags, $this->tags );
+ }
+ }
}
* @param int|null $rev_id The rev_id of the change to add the tags to
* @param int|null $log_id The log_id of the change to add the tags to
* @param string $params Params to put in the ct_params field of table 'change_tag'
+ * @param RecentChange|null $rc Recent change, in case the tagging accompanies the action
+ * (this should normally be the case)
*
* @throws MWException
* @return bool False if no changes are made, otherwise true
*/
public static function addTags( $tags, $rc_id = null, $rev_id = null,
- $log_id = null, $params = null
+ $log_id = null, $params = null, RecentChange $rc = null
) {
- $result = self::updateTags( $tags, null, $rc_id, $rev_id, $log_id, $params );
+ $result = self::updateTags( $tags, null, $rc_id, $rev_id, $log_id, $params, $rc );
return (bool)$result[0];
}
* Pass a variable whose value is null if the log_id is not relevant or unknown.
* @param string $params Params to put in the ct_params field of table
* 'change_tag' when adding tags
+ * @param RecentChange|null $rc Recent change being tagged, in case the tagging accompanies
+ * the action
+ * @param User|null $user Tagging user, in case the tagging is subsequent to the tagged action
*
* @throws MWException When $rc_id, $rev_id and $log_id are all null
* @return array Index 0 is an array of tags actually added, index 1 is an
*
* @since 1.25
*/
- public static function updateTags(
- $tagsToAdd, $tagsToRemove,
- &$rc_id = null, &$rev_id = null, &$log_id = null, $params = null
+ public static function updateTags( $tagsToAdd, $tagsToRemove, &$rc_id = null,
+ &$rev_id = null, &$log_id = null, $params = null, RecentChange $rc = null,
+ User $user = null
) {
$tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure we're submitting all tags...
}
self::purgeTagUsageCache();
+
+ Hooks::run( 'ChangeTagsAfterUpdateTags', [ $tagsToAdd, $tagsToRemove, $prevTags,
+ $rc_id, $rev_id, $log_id, $params, $rc, $user ] );
+
return [ $tagsToAdd, $tagsToRemove, $prevTags ];
}
// do it!
list( $tagsAdded, $tagsRemoved, $initialTags ) = self::updateTags( $tagsToAdd,
- $tagsToRemove, $rc_id, $rev_id, $log_id, $params );
+ $tagsToRemove, $rc_id, $rev_id, $log_id, $params, null, $user );
if ( !$tagsAdded && !$tagsRemoved ) {
// no-op, don't log it
return Status::newGood( (object)[
* Build a text box to select a change tag
*
* @param string $selected Tag to select by default
- * @param bool $fullForm Affects return value, see below
- * @param Title $title Title object to send the form to. Used only if $fullForm is true.
* @param bool $ooui Use an OOUI TextInputWidget as selector instead of a non-OOUI input field
* You need to call OutputPage::enableOOUI() yourself.
- * @return string|array
- * - if $fullForm is false: an array of (label, selector).
- * - if $fullForm is true: HTML of entire form built around the selector.
+ * @return array an array of (label, selector)
*/
- public static function buildTagFilterSelector( $selected = '',
- $fullForm = false, Title $title = null, $ooui = false
- ) {
+ public static function buildTagFilterSelector( $selected = '', $ooui = false ) {
global $wgUseTagFilter;
if ( !$wgUseTagFilter || !count( self::listDefinedTags() ) ) {
- return $fullForm ? '' : [];
+ return [];
}
$data = [
);
}
- if ( !$fullForm ) {
- return $data;
- }
-
- $html = implode( ' ', $data );
- $html .= "\n" .
- Xml::element(
- 'input',
- [ 'type' => 'submit', 'value' => wfMessage( 'tag-filter-submit' )->text() ]
- );
- $html .= "\n" . Html::hidden( 'title', $title->getPrefixedText() );
- $html = Xml::tags(
- 'form',
- [ 'action' => $title->getLocalURL(), 'class' => 'mw-tagfilter-form', 'method' => 'get' ],
- $html
- );
-
- return $html;
+ return $data;
}
/**
--- /dev/null
+<?php
+/**
+ * Compatibility class for pre-namespace, pre-library class name
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @deprecated since 1.28 use Wikimedia\ScopedCallback
+ *
+ * @since 1.21
+ */
+class ScopedCallback extends Wikimedia\ScopedCallback {
+}
if ( $title->getNamespace() == NS_MEDIAWIKI ) {
// Parse mediawiki messages with correct target language
list( /* $unused */, $lang ) = MessageCache::singleton()->figureMessage( $title->getText() );
- $pageLang = wfGetLangObj( $lang );
+ $pageLang = Language::factory( $lang );
}
Hooks::run( 'PageContentLanguage', [ $title, &$pageLang, $wgLang ] );
--- /dev/null
+<?php
+
+/**
+ * Content handler for File: files
+ * TODO: this handler s not used directly now,
+ * but instead manually called by WikitextHandler.
+ * This should be fixed in the future.
+ */
+class FileContentHandler extends WikitextContentHandler {
+
+ public function getFieldsForSearchIndex( SearchEngine $engine ) {
+ $fields['file_media_type'] =
+ $engine->makeSearchFieldMapping( 'file_media_type', SearchIndexField::INDEX_TYPE_KEYWORD );
+ $fields['file_media_type']->setFlag( SearchIndexField::FLAG_CASEFOLD );
+ $fields['file_mime'] =
+ $engine->makeSearchFieldMapping( 'file_mime', SearchIndexField::INDEX_TYPE_SHORT_TEXT );
+ $fields['file_mime']->setFlag( SearchIndexField::FLAG_CASEFOLD );
+ $fields['file_size'] =
+ $engine->makeSearchFieldMapping( 'file_size', SearchIndexField::INDEX_TYPE_INTEGER );
+ $fields['file_width'] =
+ $engine->makeSearchFieldMapping( 'file_width', SearchIndexField::INDEX_TYPE_INTEGER );
+ $fields['file_height'] =
+ $engine->makeSearchFieldMapping( 'file_height', SearchIndexField::INDEX_TYPE_INTEGER );
+ $fields['file_bits'] =
+ $engine->makeSearchFieldMapping( 'file_bits', SearchIndexField::INDEX_TYPE_INTEGER );
+ $fields['file_resolution'] =
+ $engine->makeSearchFieldMapping( 'file_resolution', SearchIndexField::INDEX_TYPE_INTEGER );
+ $fields['file_text'] =
+ $engine->makeSearchFieldMapping( 'file_text', SearchIndexField::INDEX_TYPE_TEXT );
+ return $fields;
+ }
+
+ public function getDataForSearchIndex( WikiPage $page, ParserOutput $parserOutput,
+ SearchEngine $engine ) {
+ $fields = [];
+
+ $title = $page->getTitle();
+ if ( NS_FILE != $title->getNamespace() ) {
+ return [];
+ }
+ $file = wfLocalFile( $title );
+ if ( !$file || !$file->exists() ) {
+ return [];
+ }
+
+ $handler = $file->getHandler();
+ if ( $handler ) {
+ $fields['file_text'] = $handler->getEntireText( $file );
+ }
+ $fields['file_media_type'] = $file->getMediaType();
+ $fields['file_mime'] = $file->getMimeType();
+ $fields['file_size'] = $file->getSize();
+ $fields['file_width'] = $file->getWidth();
+ $fields['file_height'] = $file->getHeight();
+ $fields['file_bits'] = $file->getBitDepth();
+ $fields['file_resolution'] =
+ (int)floor( sqrt( $fields['file_width'] * $fields['file_height'] ) );
+
+ return $fields;
+ }
+
+}
return true;
}
+ /**
+ * Get file handler
+ * @return FileContentHandler
+ */
+ protected function getFileHandler() {
+ return new FileContentHandler();
+ }
+
public function getFieldsForSearchIndex( SearchEngine $engine ) {
$fields = parent::getFieldsForSearchIndex( $engine );
$engine->makeSearchFieldMapping( 'opening_text', SearchIndexField::INDEX_TYPE_TEXT );
$fields['opening_text']->setFlag( SearchIndexField::FLAG_SCORING |
SearchIndexField::FLAG_NO_HIGHLIGHT );
-
- // FIXME: this really belongs in separate file handler but files
- // do not have separate handler. Sadness.
- $fields['file_text'] =
- $engine->makeSearchFieldMapping( 'file_text', SearchIndexField::INDEX_TYPE_TEXT );
+ // Until we have full first-class content handler for files, we invoke it explicitly here
+ $fields = array_merge( $fields, $this->getFileHandler()->getFieldsForSearchIndex( $engine ) );
return $fields;
}
- /**
- * Extract text of the file
- * TODO: probably should go to file handler?
- * @param Title $title
- * @return string|null
- */
- protected function getFileText( Title $title ) {
- $file = wfLocalFile( $title );
- if ( $file && $file->exists() ) {
- $handler = $file->getHandler();
- if ( !$handler ) {
- return null;
- }
- return $handler->getEntireText( $file );
- }
-
- return null;
- }
-
public function getDataForSearchIndex( WikiPage $page, ParserOutput $parserOutput,
SearchEngine $engine ) {
$fields = parent::getDataForSearchIndex( $page, $parserOutput, $engine );
$fields['auxiliary_text'] = $structure->getAuxiliaryText();
$fields['defaultsort'] = $structure->getDefaultSort();
- $title = $page->getTitle();
- if ( NS_FILE == $title->getNamespace() ) {
- $fileText = $this->getFileText( $title );
- if ( $fileText ) {
- $fields['file_text'] = $fileText;
- }
+ // Until we have full first-class content handler for files, we invoke it explicitly here
+ if ( NS_FILE == $page->getTitle()->getNamespace() ) {
+ $fields = array_merge( $fields,
+ $this->getFileHandler()->getDataForSearchIndex( $page, $parserOutput, $engine ) );
}
return $fields;
}
* @param int $id Which connection to use
* @param array $groups Query groups
*
- * @return DatabaseBase
+ * @return Database
*/
protected function getConnection( $id, $groups = [] ) {
$loadBalancer = wfGetLB( $this->wiki );
* @throws InvalidArgumentException
*/
public function get( $name ) {
- if ( !isset( $this->backends[$name] ) ) {
- throw new InvalidArgumentException( "No backend defined with the name `$name`." );
- }
// Lazy-load the actual backend instance
if ( !isset( $this->backends[$name]['instance'] ) ) {
- $class = $this->backends[$name]['class'];
- $config = $this->backends[$name]['config'];
- $config += [
- 'wikiId' => wfWikiID(), // e.g. "my_wiki-en_"
- 'mimeCallback' => [ $this, 'guessMimeInternal' ],
- 'obResetFunc' => 'wfResetOutputBuffers',
- 'streamMimeFunc' => [ 'StreamFile', 'contentTypeFromPath' ]
- ];
- $config['lockManager'] =
- LockManagerGroup::singleton( $config['wikiId'] )->get( $config['lockManager'] );
- $config['fileJournal'] = isset( $config['fileJournal'] )
- ? FileJournal::factory( $config['fileJournal'], $name )
- : FileJournal::factory( [ 'class' => 'NullFileJournal' ], $name );
- $config['wanCache'] = ObjectCache::getMainWANInstance();
- $config['srvCache'] = ObjectCache::getLocalServerInstance( 'hash' );
- $config['statusWrapper'] = [ 'Status', 'wrap' ];
- $config['tmpDirectory'] = wfTempDir();
- $config['logger'] = LoggerFactory::getInstance( 'FileOperation' );
- $config['profiler'] = Profiler::instance();
+ $config = $this->config( $name );
+
+ $class = $config['class'];
if ( $class === 'FileBackendMultiWrite' ) {
foreach ( $config['backends'] as $index => $beConfig ) {
if ( isset( $beConfig['template'] ) ) {
* Get the config array for a backend object with a given name
*
* @param string $name
- * @return array
+ * @return array Parameters to FileBackend::__construct()
* @throws InvalidArgumentException
*/
public function config( $name ) {
}
$class = $this->backends[$name]['class'];
- return [ 'class' => $class ] + $this->backends[$name]['config'];
+ $config = $this->backends[$name]['config'];
+ $config['class'] = $class;
+ $config += [ // set defaults
+ 'wikiId' => wfWikiID(), // e.g. "my_wiki-en_"
+ 'mimeCallback' => [ $this, 'guessMimeInternal' ],
+ 'obResetFunc' => 'wfResetOutputBuffers',
+ 'streamMimeFunc' => [ 'StreamFile', 'contentTypeFromPath' ],
+ 'tmpDirectory' => wfTempDir(),
+ 'statusWrapper' => [ 'Status', 'wrap' ],
+ 'wanCache' => ObjectCache::getMainWANInstance(),
+ 'srvCache' => ObjectCache::getLocalServerInstance( 'hash' ),
+ 'logger' => LoggerFactory::getInstance( 'FileOperation' ),
+ 'profiler' => Profiler::instance()
+ ];
+ $config['lockManager'] =
+ LockManagerGroup::singleton( $config['wikiId'] )->get( $config['lockManager'] );
+ $config['fileJournal'] = isset( $config['fileJournal'] )
+ ? FileJournal::factory( $config['fileJournal'], $name )
+ : FileJournal::factory( [ 'class' => 'NullFileJournal' ], $name );
+
+ return $config;
}
/**
/**
* Get a connection to the replica DB
- * @return DatabaseBase
+ * @return Database
*/
function getSlaveDB() {
return wfGetDB( DB_REPLICA );
/**
* Get a connection to the master DB
- * @return DatabaseBase
+ * @return Database
*/
function getMasterDB() {
return wfGetDB( DB_MASTER );
/**
* The database connection.
*
- * @var DatabaseBase
+ * @var Database
*/
public $db = null;
/**
* Handle to the database subclass
*
- * @var DatabaseBase
+ * @var Database
*/
protected $db;
/**
* Get a database connection to run updates
*
- * @return DatabaseBase
+ * @return Database
*/
public function getDB() {
return $this->db;
return $status;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
return;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
$conn->selectDB( $this->getVar( 'wgDBname' ) );
return $status;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
return;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
$conn->selectDB( $this->getVar( 'wgDBname' ) );
$status = $this->getConnection();
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
return $status;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
if ( $status->isOK() ) {
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
$conn->clearFlag( DBO_TRX );
$status = $this->openPgConnection( 'create-schema' );
if ( $status->isOK() ) {
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
$safeRole = $conn->addIdentifierQuotes( $this->getVar( 'wgDBuser' ) );
return false;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
$superuser = $this->getVar( '_InstallUser' );
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
return $status;
}
/**
- * @var $conn DatabaseBase
+ * @var $conn Database
*/
$conn = $status->value;
"config-admin-help": "Въвежда се предпочитаното потребителско име, например \"Иванчо Иванчев\".\nТова ще е потребителското име, което администраторът ще използва за влизане в уикито.",
"config-admin-name-blank": "Необходимо е да бъде въведено потребителско име на администратора.",
"config-admin-name-invalid": "Посоченото потребителско име \"<nowiki>$1</nowiki>\" е невалидно.\nНеобходимо е да се посочи друго.",
- "config-admin-password-blank": "Ð\9dеовÑ\85одимо е да Ñ\81е вÑ\8aведе парола за администраторската сметка.",
+ "config-admin-password-blank": "Ð\92Ñ\8aведеÑ\82е парола за администраторската сметка.",
"config-admin-password-mismatch": "Двете въведени пароли не съвпадат.",
"config-admin-email": "Адрес за електронна поща:",
"config-admin-email-help": "Въвеждането на адрес за е-поща позволява получаване на е-писма от другите потребители на уикито, възстановяване на изгубена или забравена парола, оповестяване при промени в страниците от списъка за наблюдение. Това поле може да бъде оставено празно.",
"config-page-complete": "Temamyayo",
"config-page-restart": "Barkerdışi fına ser kı",
"config-page-readme": "Mı bıwane",
+ "config-page-releasenotes": "Notë versiyoni",
"config-page-copying": "Kopyayeno",
"config-page-upgradedoc": "Berzkerdış",
+ "config-page-existingwiki": "Mewcud wiki",
"config-restart": "E, fına dest pekê",
"config-sidebar": "* [https://www.mediawiki.org MediaWiki keye]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Şınasiya Karberi]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Şınasiya İdarekaran]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Peşti]\n----\n* <doclink href=Readme>Mı buwanê</doclink>\n* <doclink href=ReleaseNotes>Notê elaqeyıni</doclink>\n* <doclink href=Copying>Kopyakerdış</doclink>\n* <doclink href=UpgradeDoc>Zêdekerdış</doclink>",
"config-env-php": "PHP $1 i biyo saz.",
"config-db-type": "Database tipe:",
"config-db-host": "Database host:",
"config-db-host-oracle": "Database TNS:",
+ "config-db-wiki-settings": "Ena wikiyer akernë",
"config-db-name": "Database name:",
+ "config-db-name-oracle": "Şemaya hardata:",
"config-db-username": "Database nameykarberi:",
"config-db-password": "Database parola :",
"config-db-port": "Portê database:",
+ "config-oracle-def-ts": "Hesıbyaye caytabloy:",
+ "config-oracle-temp-ts": "İdareten caytabloy:",
+ "config-type-mysql": "MySQL (yana hewlın)",
"config-type-mssql": "Microsoft SQL Server",
"config-header-mysql": "Eyarê MySQL",
+ "config-header-sqlite": "SQLite sazi",
+ "config-header-oracle": "Orqcle sazi",
+ "config-header-mssql": "Sazë Microsoft SQL Serveri",
+ "config-missing-db-name": "\"{{int:config-db-name}}\"nrë jew erc dekerdış gerek keno.",
+ "config-missing-db-host": "\"{{int:config-db-host}}\" rë jew erc gerek keno",
+ "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\" rë jew erc gerek keno",
+ "config-mysql-engine": "Motorë depok kerdışi",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
"config-mysql-binary": "Dılet",
"config-mysql-utf8": "UTF-8",
+ "config-mssql-sqlauth": "SQL Server araştnayış",
+ "config-mssql-windowsauth": "Windows kamiye araştnayış",
"config-site-name": "Namey wiki:",
"config-site-name-blank": "Yew nameyê sita cıkewe.",
"config-project-namespace": "Wareyê nameyê proceyi:",
"config-page-dbsettings": "डाटाबेस कुंजी",
"config-page-name": "नाम",
"config-page-options": "विकल्प",
- "config-page-install": "सà¥\8dथापित à¤\95रà¥\81",
+ "config-page-install": "सà¥\8dथापित à¤\95रà¥\80",
"config-page-complete": "पूर्ण!",
- "config-page-restart": "स्थापनाके पुनारम्भ करु",
+ "config-page-restart": "स्थापनाक पुनारम्भ करी",
"config-page-readme": "पढू",
"config-page-releasenotes": "रिलीज नोट्स",
"config-page-copying": "अनुकरण",
"@metadata": {
"authors": [
"Sindhu",
- "Aursani"
+ "Aursani",
+ "Mehtab ahmed"
]
},
"config-information": "معلومات",
- "config-localsettings-badkey": "توهان جي ڏنل ڪنجي غيردرست آهي.",
+ "config-localsettings-badkey": "توهان جي سنواري ڏنل ڪنجي غيردرست آهي.",
"config-your-language": "توهان جي ٻولي:",
"config-wiki-language": "وڪِي ٻولي:",
"config-back": "پوئتي ←",
"config-page-existingwiki": "موجوده وڪِي",
"config-restart": "ها، وري کان شروع ڪريو",
"config-env-php": "PHP $1 تنصيب ٿي چڪو",
- "config-env-hhvm": "HHVM $1 تنصيب ٿي چڪو.",
- "config-xml-bad": "PHP جو XML ماڊيول کٽل آهي. ذريعاتوڪيءَ کي ان ماڊيول ۾ فنڪشنس گھربل آهن ۽ اها موجوده ترتيب يا ڪنفيگيوريشن ۾ ڪم نہ ڪندي. \nتوهان کي گھرجي تہ php-xml RPM پيڪيج تنصيب ڪريو."
+ "config-env-hhvm": "HHVM $1 تنصيب ٿي چڪو."
}
+++ /dev/null
-<?php
-/**
- * This file deals with RAII style scoped callbacks.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Class for asserting that a callback happens when a dummy object leaves scope
- *
- * @since 1.21
- */
-class ScopedCallback {
- /** @var callable */
- protected $callback;
- /** @var array */
- protected $params;
-
- /**
- * @param callable|null $callback
- * @param array $params Callback arguments (since 1.25)
- * @throws Exception
- */
- public function __construct( $callback, array $params = [] ) {
- if ( $callback !== null && !is_callable( $callback ) ) {
- throw new InvalidArgumentException( "Provided callback is not valid." );
- }
- $this->callback = $callback;
- $this->params = $params;
- }
-
- /**
- * Trigger a scoped callback and destroy it.
- * This is the same is just setting it to null.
- *
- * @param ScopedCallback $sc
- */
- public static function consume( ScopedCallback &$sc = null ) {
- $sc = null;
- }
-
- /**
- * Destroy a scoped callback without triggering it
- *
- * @param ScopedCallback $sc
- */
- public static function cancel( ScopedCallback &$sc = null ) {
- if ( $sc ) {
- $sc->callback = null;
- }
- $sc = null;
- }
-
- /**
- * Trigger the callback when this leaves scope
- */
- function __destruct() {
- if ( $this->callback !== null ) {
- call_user_func_array( $this->callback, $this->params );
- }
- }
-}
$this->concurrency = isset( $config['concurrency'] )
? (int)$config['concurrency']
: 50;
- $this->obResetFunc = isset( $params['obResetFunc'] )
- ? $params['obResetFunc']
+ $this->obResetFunc = isset( $config['obResetFunc'] )
+ ? $config['obResetFunc']
: [ $this, 'resetOutputBuffer' ];
- $this->streamMimeFunc = isset( $params['streamMimeFunc'] )
- ? $params['streamMimeFunc']
+ $this->streamMimeFunc = isset( $config['streamMimeFunc'] )
+ ? $config['streamMimeFunc']
: null;
$this->statusWrapper = isset( $config['statusWrapper'] ) ? $config['statusWrapper'] : null;
- $this->profiler = isset( $params['profiler'] ) ? $params['profiler'] : null;
+ $this->profiler = isset( $config['profiler'] ) ? $config['profiler'] : null;
$this->logger = isset( $config['logger'] ) ? $config['logger'] : new \Psr\Log\NullLogger();
$this->statusWrapper = isset( $config['statusWrapper'] ) ? $config['statusWrapper'] : null;
$this->tmpDirectory = isset( $config['tmpDirectory'] ) ? $config['tmpDirectory'] : null;
protected function scopedProfileSection( $section ) {
if ( $this->profiler ) {
call_user_func( [ $this->profiler, 'profileIn' ], $section );
- return new ScopedCallback( [ $this->profiler, 'profileOut' ] );
+ return new ScopedCallback( [ $this->profiler, 'profileOut' ], [ $section ] );
}
return null;
}
public function concatenate( array $params ) {
+ $status = $this->newStatus();
// We are writing to an FS file, so we don't need to do this per-backend
$index = $this->getReadIndexFromParams( $params );
$realParams = $this->substOpPaths( $params, $this->backends[$index] );
- return $this->backends[$index]->concatenate( $realParams );
+ $status->merge( $this->backends[$index]->concatenate( $realParams ) );
+
+ return $status;
}
public function fileExists( array $params ) {
* - user : DB user
* - password : DB user password
* - tablePrefix : DB table prefix
- * - flags : DB flags (see DatabaseBase)
+ * - flags : DB flags; bitfield of IDatabase::DBO_* constants
* - dbsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
* each having an odd-numbered list of DB names (peers) as values.
* - lockExpiry : Lock timeout (seconds) for dropped connections. [optional]
* Class for ensuring a consistent ordering of events as seen by the user, despite replication.
* Kind of like Hawking's [[Chronology Protection Agency]].
*/
-class ChronologyProtector implements LoggerAwareInterface{
+class ChronologyProtector implements LoggerAwareInterface {
/** @var BagOStuff */
protected $store;
/** @var LoggerInterface */
}
}
}
+
+class_alias( 'Database', 'DatabaseBase' );
+++ /dev/null
-<?php
-/**
- * @defgroup Database Database
- *
- * This file deals with database interface functions
- * and query specifics/optimisations.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Database
- */
-
-/**
- * Database abstraction object
- * @ingroup Database
- */
-abstract class DatabaseBase extends Database {
- /**
- * Get search engine class. All subclasses of this need to implement this
- * if they wish to use searching.
- *
- * @return string
- * @deprecated since 1.27; use SearchEngineFactory::getSearchEngineClass()
- */
- public function getSearchEngine() {
- return 'SearchEngineDummy';
- }
-}
throw new InvalidArgumentException( "Prefix must be a string." );
}
$this->prefix = $prefix;
- $this->equivalentString = $this->convertToString();
}
/**
);
}
- return ( $this->equivalentString === $other );
+ return ( $this->getId() === $other );
}
/**
* @return string
*/
public function getId() {
+ if ( $this->equivalentString === null ) {
+ $this->equivalentString = $this->convertToString();
+ }
+
return $this->equivalentString;
}
* @since 1.22
* @see Database
*/
-abstract class DatabaseMysqlBase extends DatabaseBase {
+abstract class DatabaseMysqlBase extends Database {
/** @var MysqlMasterPos */
protected $lastKnownReplicaPos;
/** @var string Method to detect replica DB lag */
/**
* @ingroup Database
*/
-class DatabasePostgres extends DatabaseBase {
+class DatabasePostgres extends Database {
/** @var int|bool */
protected $port;
/**
* @ingroup Database
*/
-class DatabaseSqlite extends DatabaseBase {
+class DatabaseSqlite extends Database {
/** @var bool Whether full text is enabled */
private static $fulltextEnabled = null;
public function flushReplicaSnapshots( $fname = __METHOD__ );
/**
- * Commit on all connections. Done for two reasons:
- * 1. To commit changes to the masters.
- * 2. To release the snapshot on all connections, master and replica DB.
+ * Commit open transactions on all connections. This is useful for two main cases:
+ * - a) To commit changes to the masters.
+ * - b) To release the snapshot on all connections, master and replica DBs.
* @param string $fname Caller name
* @param array $options Options map:
* - maxWriteDuration: abort if more than this much time was spent in write queries
$this->commitMasterChanges( __METHOD__ ); // sanity
}
+ /**
+ * @see ILBFactory::newMainLB()
+ * @param bool $domain
+ * @return LoadBalancer
+ */
+ abstract public function newMainLB( $domain = false );
+
+ /**
+ * @see ILBFactory::getMainLB()
+ * @param bool $domain
+ * @return mixed
+ */
+ abstract public function getMainLB( $domain = false );
+
+ /**
+ * @see ILBFactory::newExternalLB()
+ * @param string $cluster
+ * @param bool $domain
+ * @return LoadBalancer
+ */
+ abstract public function newExternalLB( $cluster, $domain = false );
+
+ /**
+ * @see ILBFactory::getExternalLB()
+ * @param string $cluster
+ * @param bool $domain
+ * @return mixed
+ */
+ abstract public function getExternalLB( $cluster, $domain = false );
+
/**
* Call a method of each tracked load balancer
*
"$fname: transaction round '{$this->trxRoundId}' still running."
);
}
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedPHPBehaviorForCommit(); // try to ignore client aborts
// Run pre-commit callbacks and suppress post-commit callbacks, aborting on failure
$this->forEachLBCallMethod( 'finalizeMasterChanges' );
$this->trxRoundId = false;
$this->requestInfo = $info + $this->requestInfo;
}
+ /**
+ * Make PHP ignore user aborts/disconnects until the returned
+ * value leaves scope. This returns null and does nothing in CLI mode.
+ *
+ * @return ScopedCallback|null
+ */
+ final protected function getScopedPHPBehaviorForCommit() {
+ if ( PHP_SAPI != 'cli' ) { // http://bugs.php.net/bug.php?id=47540
+ $old = ignore_user_abort( true ); // avoid half-finished operations
+ return new ScopedCallback( function () use ( $old ) {
+ ignore_user_abort( $old );
+ } );
+ }
+
+ return null;
+ }
+
function __destruct() {
$this->destroy();
}
public function commitMasterChanges( $fname = __METHOD__ ) {
$failures = [];
+ /** @noinspection PhpUnusedLocalVariableInspection */
+ $scope = $this->getScopedPHPBehaviorForCommit(); // try to ignore client aborts
+
$restore = ( $this->trxRoundId !== false );
$this->trxRoundId = false;
$this->forEachOpenMasterConnection(
} );
}
+ /**
+ * Make PHP ignore user aborts/disconnects until the returned
+ * value leaves scope. This returns null and does nothing in CLI mode.
+ *
+ * @return ScopedCallback|null
+ */
+ final protected function getScopedPHPBehaviorForCommit() {
+ if ( PHP_SAPI != 'cli' ) { // http://bugs.php.net/bug.php?id=47540
+ $old = ignore_user_abort( true ); // avoid half-finished operations
+ return new ScopedCallback( function () use ( $old ) {
+ ignore_user_abort( $old );
+ } );
+ }
+
+ return null;
+ }
+
function __destruct() {
// Avoid connection leaks for sanity
$this->closeAll();
$rc = $this->getRecentChange( $newId );
if ( $to === 'rc' || $to === 'rcandudp' ) {
+ // save RC, passing tags so they are applied there
+ $tags = $this->getTags();
+ if ( is_null( $tags ) ) {
+ $tags = [];
+ }
+ $rc->addTags( $tags );
$rc->save( 'pleasedontudp' );
}
) {
PatrolLog::record( $rc, true, $this->getPerformer() );
}
-
- // Add change tags to the log entry and (if applicable) the associated revision
- $tags = $this->getTags();
- if ( !is_null( $tags ) ) {
- $rcId = $rc->getAttribute( 'rc_id' );
- $revId = $this->getAssociatedRevId(); // Use null if $revId is 0
- ChangeTags::addTags( $tags, $rcId, $revId > 0 ? $revId : null, $newId );
- }
}
},
DeferredUpdates::POSTSEND,
} else {
// segment we don't care about, so skip
$size = wfUnpack( "nint", fread( $fh, 2 ), 2 );
- if ( $size['int'] <= 2 ) {
+ if ( $size['int'] < 2 ) {
throw new MWException( "invalid marker size in jpeg" );
}
fseek( $fh, $size['int'] - 2, SEEK_CUR );
*/
private static function jpegExtractMarker( &$fh ) {
$size = wfUnpack( "nint", fread( $fh, 2 ), 2 );
- if ( $size['int'] <= 2 ) {
+ if ( $size['int'] < 2 ) {
throw new MWException( "invalid marker size in jpeg" );
}
+ if ( $size['int'] === 2 ) {
+ // fread( ..., 0 ) generates a warning
+ return '';
+ }
$segment = fread( $fh, $size['int'] - 2 );
if ( strlen( $segment ) !== $size['int'] - 2 ) {
throw new MWException( "Segment shorter than expected" );
* @deprecated since 1.21: use doEditContent() instead.
*/
public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
- ContentHandler::deprecated( __METHOD__, '1.21' );
+ wfDeprecated( __METHOD__, '1.21' );
return $this->mPage->doEdit( $text, $summary, $flags, $baseRevId, $user );
}
* @deprecated since 1.21: use doEditContent() instead.
*/
public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
- ContentHandler::deprecated( __METHOD__, '1.21' );
+ wfDeprecated( __METHOD__, '1.21' );
$content = ContentHandler::makeContent( $text, $this->getTitle() );
// NOTE: stub for backwards-compatibility. assumes the given text is
// wikitext. will break horribly if it isn't.
- ContentHandler::deprecated( __METHOD__, '1.21' );
+ wfDeprecated( __METHOD__, '1.21' );
$handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
$oldContent = is_null( $oldtext ) ? null : $handler->unserializeContent( $oldtext );
# * <b> (r105284)
# * <bdi> (bug 72884)
# * <span dir="rtl"> and <span dir="ltr"> (bug 35167)
+ # * <s> and <strike> (T35715)
# We strip any parameter from accepted tags (second regex), except dir="rtl|ltr" from <span>,
# to allow setting directionality in toc items.
$tocline = preg_replace(
[
- '#<(?!/?(span|sup|sub|bdi|i|b)(?: [^>]*)?>).*?>#',
- '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|bdi|i|b))(?: .*?)?>#'
+ '#<(?!/?(span|sup|sub|bdi|i|b|s|strike)(?: [^>]*)?>).*?>#',
+ '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|bdi|i|b|s|strike))(?: .*?)?>#'
],
[ '', '<$1>' ],
$safeHeadline
* @ingroup Profiler
* @author Aaron Schulz
*/
+use Wikimedia\ScopedCallback;
/**
* Custom PHP profiler for parser/DB type section names that xhprof/xdebug can't handle
/**
* Object passed around to modules which contains information about the state
- * of a specific loader request
+ * of a specific loader request.
*/
class ResourceLoaderContext {
protected $resourceLoader;
$this->request = $request;
$this->logger = $resourceLoader->getLogger();
+ // Future developers: Avoid use of getVal() in this class, which performs
+ // expensive UTF normalisation by default. Use getRawVal() instead.
+ // Values here are either one of a finite number of internal IDs,
+ // or previously-stored user input (e.g. titles, user names) that were passed
+ // to this endpoint by ResourceLoader itself from the canonical value.
+ // Values do not come directly from user input and need not match.
+
// List of modules
- $modules = $request->getVal( 'modules' );
+ $modules = $request->getRawVal( 'modules' );
$this->modules = $modules ? self::expandModuleNames( $modules ) : [];
// Various parameters
- $this->user = $request->getVal( 'user' );
+ $this->user = $request->getRawVal( 'user' );
$this->debug = $request->getFuzzyBool(
'debug',
$resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
);
- $this->only = $request->getVal( 'only', null );
- $this->version = $request->getVal( 'version', null );
+ $this->only = $request->getRawVal( 'only', null );
+ $this->version = $request->getRawVal( 'version', null );
$this->raw = $request->getFuzzyBool( 'raw' );
// Image requests
- $this->image = $request->getVal( 'image' );
- $this->variant = $request->getVal( 'variant' );
- $this->format = $request->getVal( 'format' );
+ $this->image = $request->getRawVal( 'image' );
+ $this->variant = $request->getRawVal( 'variant' );
+ $this->format = $request->getRawVal( 'format' );
- $this->skin = $request->getVal( 'skin' );
+ $this->skin = $request->getRawVal( 'skin' );
$skinnames = Skin::getSkinNames();
// If no skin is specified, or we don't recognize the skin, use the default skin
if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) {
if ( $this->language === null ) {
// Must be a valid language code after this point (T64849)
// Only support uselang values that follow built-in conventions (T102058)
- $lang = $this->getRequest()->getVal( 'lang', '' );
+ $lang = $this->getRequest()->getRawVal( 'lang', '' );
// Stricter version of RequestContext::sanitizeLangCode()
if ( !Language::isValidBuiltInCode( $lang ) ) {
wfDebug( "Invalid user language code\n" );
*/
public function getDirection() {
if ( $this->direction === null ) {
- $this->direction = $this->getRequest()->getVal( 'dir' );
+ $this->direction = $this->getRequest()->getRawVal( 'dir' );
if ( !$this->direction ) {
// Determine directionality based on user language (bug 6100)
$this->direction = Language::factory( $this->getLanguage() )->getDir();
$rules[] = "a { text-decoration: " .
( $options['underline'] ? 'underline' : 'none' ) . "; }";
}
- if ( $options['editfont'] !== 'default' ) {
- // Double-check that $options['editfont'] consists of safe characters only
- if ( preg_match( '/^[a-zA-Z0-9_, -]+$/', $options['editfont'] ) ) {
- $rules[] = "textarea { font-family: {$options['editfont']}; }\n";
- }
- }
$style = implode( "\n", $rules );
if ( $this->getFlip( $context ) ) {
$style = CSSJanus::transform( $style, true, false );
$titleInfo = [];
$batch = new LinkBatch;
foreach ( $pages as $titleText ) {
- $batch->addObj( Title::newFromText( $titleText ) );
+ $title = Title::newFromText( $titleText );
+ if ( $title ) {
+ // Page name may be invalid if user-provided (e.g. gadgets)
+ $batch->addObj( $title );
+ }
}
if ( !$batch->isEmpty() ) {
$res = $db->select( 'page',
// Before we intersect, map the names to canonical form (T145673).
$intersect = [];
foreach ( $pages as $page => $unused ) {
- $title = Title::newFromText( $page )->getPrefixedText();
- $intersect[$title] = 1;
+ $title = Title::newFromText( $page );
+ if ( $title ) {
+ $intersect[ $title->getPrefixedText() ] = 1;
+ } else {
+ // Page name may be invalid if user-provided (e.g. gadgets)
+ $rl->getLogger()->info(
+ 'Invalid wiki page title "{title}" in ' . __METHOD__,
+ [ 'title' => $page ]
+ );
+ }
}
$info = array_intersect_key( $allInfo, $intersect );
return $sugg->getSuggestedTitle()->getPrefixedText();
} );
- // Rescore results with an exact title match
- // NOTE: in some cases like cross-namespace redirects
- // (frequently used as shortcuts e.g. WP:WP on huwiki) some
- // backends like Cirrus will return no results. We should still
- // try an exact title match to workaround this limitation
- $rescorer = new SearchExactMatchRescorer();
- $rescoredResults = $rescorer->rescore( $search, $this->namespaces, $results, $this->limit );
+ if ( $this->offset === 0 ) {
+ // Rescore results with an exact title match
+ // NOTE: in some cases like cross-namespace redirects
+ // (frequently used as shortcuts e.g. WP:WP on huwiki) some
+ // backends like Cirrus will return no results. We should still
+ // try an exact title match to workaround this limitation
+ $rescorer = new SearchExactMatchRescorer();
+ $rescoredResults = $rescorer->rescore( $search, $this->namespaces, $results, $this->limit );
+ } else {
+ // No need to rescore if offset is not 0
+ // The exact match must have been returned at position 0
+ // if it existed.
+ $rescoredResults = $results;
+ }
if ( count( $rescoredResults ) > 0 ) {
$found = array_search( $rescoredResults[0], $results );
*/
private function initServices() {
if ( !$this->titleParser ) {
- $lang = $this->getContext()->getLanguage();
- $this->titleParser = new MediaWikiTitleCodec( $lang, GenderCache::singleton() );
+ $this->titleParser = MediaWikiServices::getInstance()->getTitleParser();
}
}
}
}
- GenderCache::singleton()->doTitlesArray( $titles );
+ MediaWikiServices::getInstance()->getGenderCache()->doTitlesArray( $titles );
$list = [];
/** @var Title $title */
}
}
- GenderCache::singleton()->doTitlesArray( $titles );
+ MediaWikiServices::getInstance()->getGenderCache()->doTitlesArray( $titles );
foreach ( $titles as $title ) {
$list[] = $title->getPrefixedText();
}
$user = $this->getUser();
- $store = MediaWikiServices::getInstance()->getWatchedItemStore();
-
- foreach ( $this->badItems as $row ) {
- list( $title, $namespace, $dbKey ) = $row;
- $action = $title ? 'cleaning up' : 'deleting';
- wfDebug( "User {$user->getName()} has broken watchlist item ns($namespace):$dbKey, $action.\n" );
-
- $store->removeWatch( $user, new TitleValue( (int)$namespace, $dbKey ) );
-
- // Can't just do an UPDATE instead of DELETE/INSERT due to unique index
- if ( $title ) {
- $user->addWatch( $title );
+ $badItems = $this->badItems;
+ DeferredUpdates::addCallableUpdate( function () use ( $user, $badItems ) {
+ $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+ foreach ( $badItems as $row ) {
+ list( $title, $namespace, $dbKey ) = $row;
+ $action = $title ? 'cleaning up' : 'deleting';
+ wfDebug( "User {$user->getName()} has broken watchlist item " .
+ "ns($namespace):$dbKey, $action.\n" );
+
+ $store->removeWatch( $user, new TitleValue( (int)$namespace, $dbKey ) );
+ // Can't just do an UPDATE instead of DELETE/INSERT due to unique index
+ if ( $title ) {
+ $user->addWatch( $title );
+ }
}
- }
+ } );
}
/**
/**
* Get a database connection for the bot passwords database
* @param int $db Index of the connection to get, e.g. DB_MASTER or DB_REPLICA.
- * @return DatabaseBase
+ * @return Database
*/
public static function getDB( $db ) {
global $wgBotPasswordsCluster, $wgBotPasswordsDatabase;
*
* @param {string} $commandName Command name to include in comment
* @param {string} $filename of PHP file to put autoload information in.
+ * @return string
*/
protected function generatePHPAutoload( $commandName, $filename ) {
// No existing JSON file found; update/generate PHP file
foreach ( glob( $this->basepath . '/*.php' ) as $file ) {
$this->readFile( $file );
}
+
+ // Legacy aliases
+ $this->forceClassPath( 'DatabaseBase',
+ $this->basepath . '/includes/libs/rdbms/database/Database.php' );
}
}
"upload-dialog-disabled": "رفع الملفات باستخدام هذا الحوار معطلة على هذه الويكي.",
"upload-dialog-title": "رفع الملف",
"upload-dialog-button-cancel": "إلغاء",
+ "upload-dialog-button-back": "رجوع",
"upload-dialog-button-done": "تم",
"upload-dialog-button-save": "احفظ",
"upload-dialog-button-upload": "رفع",
"htmlform-cloner-create": "إضافة المزيد",
"htmlform-cloner-delete": "إزالة",
"htmlform-cloner-required": "مطلوب قيمة واحدة على الأقل.",
+ "htmlform-date-placeholder": "YYYY-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "القيمة التي حددتها ليست تاريخا متعرف عليه. جرب استخدام صيغة YYYY-MM-DD.",
+ "htmlform-time-invalid": "القيمة التي حددتها ليست وقتا متعرف عليه. جرب استخدام صيغة HH:MM:SS.",
+ "htmlform-datetime-invalid": "القيمة التي حددتها ليست وقتا وتاريخا متعرف عليه. جرب استخدام صيغة YYYY-MM-DD HH:MM:SS.",
+ "htmlform-date-toolow": "القيمة التي حددتها هي قبل أول تاريخ مسموح به $1.",
+ "htmlform-date-toohigh": "القيمة التي حددتها هي بعد آخر تاريخ مسموح به $1.",
+ "htmlform-time-toolow": "القيمة التي حددتها هي قبل أول وقت مسموح به $1.",
+ "htmlform-time-toohigh": "القيمة التي حددتها هي بعد آخر وقت مسموح به $1.",
+ "htmlform-datetime-toolow": "القيمة التي حددتها هي قبل أول تاريخ ووقت مسموح بهما $1.",
+ "htmlform-datetime-toohigh": "القيمة التي حددتها هي بعد آخر تاريخ ووقت مسموح بهما $1.",
"htmlform-title-badnamespace": "[[:$1]] ليس في نطاق \"{{ns:$2}}\".",
"htmlform-title-not-creatable": "\"$1\" ليس عنوان صفحة يمكن إنشاؤه",
"htmlform-title-not-exists": "$1 غير موجود.",
"upload-dialog-disabled": "Nesta wiki tán desactivaes les xubíes de ficheros por aciu d'esti diálogu.",
"upload-dialog-title": "Xubir ficheru",
"upload-dialog-button-cancel": "Encaboxar",
+ "upload-dialog-button-back": "Anterior",
"upload-dialog-button-done": "Fecho",
"upload-dialog-button-save": "Guardar",
"upload-dialog-button-upload": "Xubir",
"htmlform-cloner-create": "Amestar más",
"htmlform-cloner-delete": "Desaniciar",
"htmlform-cloner-required": "Necesítase polo menos un valor.",
+ "htmlform-date-placeholder": "AAAA-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "AAAA-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "El valor que disti nun ye una data reconocible. Prueba usando'l formatu AAAA-MM-DD.",
+ "htmlform-time-invalid": "El valor que disti nun ye una hora reconocible. Prueba usando'l formatu HH:MM:SS.",
+ "htmlform-datetime-invalid": "Nun se reconoció la fecha y hora nel formatu proporcionáu. Prueba a usar el formatu AAAA-MM-DD HH:MM:SS.",
+ "htmlform-date-toolow": "El valor que disti ye anterior a la fecha más antigua permitida, $1.",
+ "htmlform-date-toohigh": "El valor especificáu ye posterior a la mayor data permitida, $1.",
+ "htmlform-time-toolow": "El valor qu'especificasti ye anterior a la hora más antigua permitida, $1.",
+ "htmlform-time-toohigh": "El valor qu'especificasti ye posterior a la hora más nueva permitida, $1.",
+ "htmlform-datetime-toolow": "El valor qu'especificasti ye anterior a la fecha y hora más antigua permitida, $1.",
+ "htmlform-datetime-toohigh": "El valor qu'especificasti ye posterior a la fecha y hora más nueva permitida, $1.",
"htmlform-title-badnamespace": "[[:$1]] nun ta nel espaciu de nomes \"{{ns:$2}}\".",
"htmlform-title-not-creatable": "«$1» nun ye un títulu de páxina que pueda crease",
"htmlform-title-not-exists": "$1 nun esiste.",
"unlinkaccounts-success": "Desenllazóse la cuenta.",
"authenticationdatachange-ignored": "Nun se xestionó'l cambéu de los datos d'autentificacion. ¿Seique, nun se configuró un fornidor?",
"userjsispublic": "Atención: les subpáxines JavaScript nun tendríen de contener datos acutaos porque son visibles pa otros usuarios.",
- "usercssispublic": "Atención: les subpáxines CSS nun tendríen de contener datos acutaos porque son visibles pa otros usuarios."
+ "usercssispublic": "Atención: les subpáxines CSS nun tendríen de contener datos acutaos porque son visibles pa otros usuarios.",
+ "restrictionsfield-badip": "Direición o rangu IP inválidu: $1",
+ "restrictionsfield-label": "Rangos d'IP permitíos:",
+ "restrictionsfield-help": "Una única direición IP o rangu CIDR per llinia. P'activar toos, utiliza<br><code>0.0.0.0/0</code><br><code>::/0</code>"
}
"yourpasswordagain": "Parolu təkrar daxil edin:",
"createacct-yourpasswordagain": "Parolu təsdiqlə",
"createacct-yourpasswordagain-ph": "Parolu təkrar daxil edin",
- "remembermypassword": "Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})",
"userlogin-remembermypassword": "Sistemdə qal",
"userlogin-signwithsecure": "Etibarlı bağlantıdan istifadə edin",
"yourdomainname": "Sizin domeniniz:",
"listgrouprights-addgroup-self-all": "Bütün qrupları öz hesabına əlavə edə bilər",
"listgrouprights-removegroup-self-all": "Bütün qrupları öz hesabından çıxara bilər",
"listgrouprights-namespaceprotection-namespace": "Adlar fəzası",
+ "restricted-displaytitle-ignored": "İmtina edilmiş görüntü başlıqlarına malik səhifələr",
"mailnologin": "Ünvan yoxdur",
"emailuser": "İstifadəçiyə e-məktub göndər",
"defemailsubject": "\"$1\" adlı istifadəçidən {{SITENAME}} e-məktubu",
"htmlform-selectorother-other": "Digər",
"htmlform-no": "Xeyr",
"htmlform-yes": "Bəli",
- "sqlite-has-fts": "$1 tam mətn axtarma ilə",
- "sqlite-no-fts": "$1 tam mətn axtarma olmadan",
"logentry-delete-delete": "$1 $3 səhifəsini {{GENDER:$2|sildi}}",
"logentry-suppress-delete": "$1 $3 səhifəsini {{GENDER:$2|gizlətdi}}",
"revdelete-content-hid": "gizli mətn",
"subject-preview": "Папярэдні прагляд загалоўку:",
"previewerrortext": "Адбылася памылка пры спробе папярэдняга прагляду вашых зьменаў.",
"blockedtitle": "Удзельнік заблякаваны",
- "blockedtext": "'''Ваш рахунак ўдзельніка ці IP-адрас быў заблякаваны.'''\n\nБлякаваньне выканаў $1.\nПрычына гэтага: ''$2''.\n\n* Пачатак блякаваньня: $8\n* Сканчэньне блякаваньня: $6\n* Быў заблякаваны: $7\n\nВы можаце скантактавацца з $1 ці адным зь іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне. Заўважце, што Вы ня зможаце ўжыць магчымасьць «даслаць ліст па электроннай пошце», пакуль не пазначыце сапраўдны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], і калі гэта Вам не было забаронена.\nВаш IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
+ "blockedtext": "<strong>Ваш рахунак удзельніка ці IP-адрас быў заблякаваны.</strong>\n\nБлякаваньне выканаў $1.\nПрычына гэтага: <em>$2</em>.\n\n* Пачатак блякаваньня: $8\n* Сканчэньне блякаваньня: $6\n* Быў заблякаваны: $7\n\nВы можаце скантактавацца з $1 ці адным зь іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне. Заўважце, што Вы ня зможаце ўжыць магчымасьць «даслаць ліст па электроннай пошце», пакуль не пазначыце сапраўдны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], і калі гэта Вам не было забаронена.\nВаш IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
"autoblockedtext": "Ваш IP-адрас быў аўтаматычна заблякаваны, таму што ён ужываўся іншым удзельнікам, які быў заблякаваны $1.\nПрычына гэтага:\n\n:''$2''\n\n* Блякаваньне пачалося: $8\n* Блякаваньне скончыцца: $6\n* Быў заблякаваны: $7\n\nВы можаце скантактавацца з $1 ці з адным зь іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне.\n\nЗаўважце, што Вы ня зможаце ужываць магчымасьць «даслаць ліст праз электронную пошту», пакуль ня будзе пазначаны дзейны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах удзельніка]], і калі гэта Вам не было забаронена.\n\nВаш цяперашні IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
"blockednoreason": "прычына не пазначана",
"whitelistedittext": "Вам трэба $1, каб рэдагаваць старонкі.",
"upload-dialog-disabled": "Загрузка файлаў з дапамогай гэтага дыялёгу адключаная ў гэтай вікі.",
"upload-dialog-title": "Загрузка файла",
"upload-dialog-button-cancel": "Адмяніць",
+ "upload-dialog-button-back": "Назад",
"upload-dialog-button-done": "Зроблена",
"upload-dialog-button-save": "Захаваць",
"upload-dialog-button-upload": "Загрузіць",
"htmlform-cloner-create": "Дадаць больш",
"htmlform-cloner-delete": "Выдаліць",
"htmlform-cloner-required": "Патрабуецца як мінімум яшчэ адно значэньне.",
+ "htmlform-date-placeholder": "ГГГГ-ММ-ДД",
+ "htmlform-time-placeholder": "ГГ:ХХ:СС",
+ "htmlform-datetime-placeholder": "ГГГГ-ММ-ДД ГГ:ХХ:СС",
+ "htmlform-date-invalid": "Уведзенае вамі значэньне не зьяўляецца датай. Паспрабуйце ўжыць фармат ГГГГ-ММ-ДД.",
+ "htmlform-time-invalid": "Уведзенае вамі значэньне не зьяўляецца часам. Паспрабуйце ўжыць фармат ГГ:ХХ:СС.",
"htmlform-title-badnamespace": "[[:$1]] знаходзіцца не ў прасторы назваў «{{ns:$2}}».",
"htmlform-title-not-creatable": "«$1» — немагчымы загаловак для старонкі",
"htmlform-title-not-exists": "$1 не існуе.",
"botpasswords-deleted-title": "বট পাসওয়ার্ড অপসারণ করা হয়েছে",
"botpasswords-deleted-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড মুছে ফেলা হয়েছিল।",
"botpasswords-no-provider": "BotPasswordsSessionProvider উপলব্ধ নয়।",
+ "botpasswords-restriction-failed": "বট পাসওয়ার্ডের সীমাবদ্ধতা এই প্রবেশ প্রতিরোধ করেছে।",
+ "botpasswords-not-exist": "ব্যবহারকারী \"$1\"-এর \"$2\" নামক বট পাসওয়ার্ডটি নেই।",
"resetpass_forbidden": "পাসওয়ার্ড পরিবর্তন করা সম্ভব নয়",
"resetpass_forbidden-reason": "পাসওয়ার্ড পরিবর্তন করা যাবে না: $1",
"resetpass-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই প্রবেশ করতে হবে।",
"passwordreset-emailelement": "ব্যবহারকারী নাম: \n$1\n\nঅস্থায়ী পাসওয়ার্ড: \n$2",
"passwordreset-emailsentemail": "যদি এই ই-মেইল ঠিকানা আপনার অ্যাকাউন্টের সাথে সংযুক্ত করা থাকে, তাহলে একটি পাসওয়ার্ড বদলের ইমেইল পাঠানো হবে।",
"passwordreset-emailsentusername": "যদি এই ব্যবহারকারী নামের সাথে ই-মেইল ঠিকানা সংযুক্ত করা থাকে, তাহলে একটি পাসওয়ার্ড বদলের ইমেইল পাঠানো হবে।",
+ "passwordreset-emailsent-capture2": "পাসওয়ার্ড পুনঃধার্যকরণের {{PLURAL:$1|email has|ইমেইল পাঠানো}} হয়েছে। {{PLURAL:$1|username and password|ব্যবহারকারীনাম ও পাসওয়ার্ড তালিকা}} এখানে দেখা যাবে।",
+ "passwordreset-emailerror-capture2": "{{GENDER:$2|ব্যবহারকারীকে}} ইমেইল পাঠানো যায়নি: $1 {{PLURAL:$3|username and password|ব্যবহারকারীনাম ও পাসওয়ার্ড তালিকা}} এখানে দেখা যাবে।",
"passwordreset-nocaller": "একটি আহ্বানকারী প্রদান করা আবশ্যক",
"passwordreset-nosuchcaller": "আহ্বানকারীর অস্তিত্ব নেই: $1",
+ "passwordreset-ignored": "পাসওয়ার্ড পুনঃধার্যকরণ করা যায়নি। হয়তো কোন প্রদানকারী কনফিগার করা হয়েনি?",
"passwordreset-invalideamil": "ভুল ইমেইল ঠিকানা",
"passwordreset-nodata": "একটি ব্যবহারকারীর নাম বা একটি ইমেল ঠিকানা দুটির একটিও সরবরা দেয়া হয়নি",
"changeemail": "ই-মেইল ঠিকানা পরিবর্তন বা বাতিল",
"changeemail-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই প্রবেশ করতে হবে।",
"changeemail-oldemail": "বর্তমান ই-মেইল ঠিকানা:",
"changeemail-newemail": "নতুন ই-মেইল ঠিকানা:",
+ "changeemail-newemail-help": "আপনার ইমেইল ঠিকানা অপসরণ করতে চাইলে এই জায়গাটি ফাঁকা ছেড়ে দেওয়া উচিত। ইমেইল ঠিকানা অপসরণ করলে আপনি ভুলে যাওয়া পাসওয়ার্ড পুনঃধার্য করতে পারবেন না এবং এই উইকি থেকে আপনাকে কোন ইমেইল পাঠানো হবে না।",
"changeemail-none": "(কিছু নাই)",
"changeemail-password": "আপনার {{SITENAME}} পাসওয়ার্ড:",
"changeemail-submit": "ই-মেইল পরিবর্তন",
"permissionserrors": "অনুমতি ত্রুটিসমূহ",
"permissionserrorstext": "আপনার এটা করার অনুমতি নেই, নিচের {{PLURAL:$1|টি কারণের|টি কারণের}} জন্য:",
"permissionserrorstext-withaction": "আপনার $2 অনুমতি নেই, যার {{PLURAL:$1|কারণ|কারণসমূহ}} হল:",
+ "contentmodelediterror": "আপনি এই পুনর্বিবেচনা সম্পাদনা করতে পারবেন না কারণ এর বিষয়বস্তু মডেল <code>$1</code>, যা বর্তমান বিষয়বস্তু মডেল <code>$2</code>-এর থেকে ভিন্ন।",
"recreate-moveddeleted-warn": "'''সতর্কীকরণ: আপনি এমন একটি পাতা পুনরায় তৈরি করছেন যা পূর্বে অপসারণ করা হয়েছিল।'''\n\nআপনি পাতাটি সম্পাদনা চালিয়ে যাওয়া ঠিক হবে কিনা, তা বিবেচনা করুন।\nআপনার সুবিধার্থে পাতাটির অপলুপ্তি লগ এখানে দেয়া হলো:",
"moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এ পাতার অবলুপ্তি লগ দেওয়া হলো।",
"moveddeleted-notice-recent": "দুঃখিত, এই পাতাটি সাম্প্রতি অপসারিত হয়েছে (সর্বশেষ ২৪ ঘণ্টায়)।\nসূত্র হিসেবে নিচে এই পাতা অপসারণ ও স্থানান্তর লগ দেয়া হয়েছে।",
"content-not-allowed-here": "\"$1\" কন্টেন্টটি [[$2]] পাতায় অনুমোদিত নয়",
"editwarning-warning": "এই পাতাটি ত্যাগ করলে আপনার আপনার করা পরিবর্তনগুলো হারিয়ে যেতে পারে।\nআপনি যদি প্রবেশ করা থাকেন, আপনি এই সতর্কীকরণ বার্তাটি আপনার পছন্দের \"সম্পাদনা\" অনুচ্ছেদ থেকে নিস্ক্রিয় করতে পারেন।",
"editpage-invalidcontentmodel-title": "বিষয়বস্তু মডেল সমর্থিত নয়",
+ "editpage-invalidcontentmodel-text": "এই \"$1\" বিষয়বস্তু মডেলটি অসমর্থিত।",
"editpage-notsupportedcontentformat-title": "উল্লেখিত পদ্ধতি সমর্থনযোগ্য নয়।",
"editpage-notsupportedcontentformat-text": "$1 লেখার ফরম্যাট, $2 কন্টেন্ট মডেলের উপযোগী নয়।",
"content-model-wikitext": "উইকিটেক্সট",
"mergehistory-fail-bad-timestamp": "সময়তারিখ অবৈধ।",
"mergehistory-fail-invalid-source": "উত্স পাতা অবৈধ।",
"mergehistory-fail-invalid-dest": "গন্তব্য পাতা অবৈধ।",
+ "mergehistory-fail-no-change": "ইতিহাস একত্রীকরণ কোন পুনর্বিবেচনা একত্রিত করে না। দয়া করে পাতা এবং সময় পরামিতি আবার পরীক্ষা করুন।",
"mergehistory-fail-permission": "ইতিহাস একত্রীকরণের জন্য পর্যাপ্ত অনুমতি নেই।",
"mergehistory-fail-self-merge": "উৎস এবং গন্তব্য পাতা একই।",
"mergehistory-fail-toobig": "ইতিহাস থেকে আগের পাতাগুলো একীকরণ সম্ভব নয়, কারণ এর ফলে সর্বোচ্চ $1 টি {{PLURAL:$1|সংস্করণ}} স্থানান্তরের সীমানা অতিক্রম করবে।",
"right-changetags": "নির্দিষ্ট সংস্করণ এবং দীর্ঘ সম্পাদনাগুলোতে [[Special:Tags|ট্যাগ]] সংযোজন ও অপসারণ করুন",
"right-deletechangetags": "ডাটাবেজ থেকে [[Special:Tags|ট্যাগ]] অপসারণ করা",
"grant-group-email": "ইমেইল পাঠান",
+ "grant-group-customization": "অনুকূলকরণ ও পছন্দ",
+ "grant-group-administration": "প্রশাসনিক কাজ সঞ্চালন করুন",
"grant-group-private-information": "আপনার সম্পর্কিত ব্যক্তিগত তথ্যে প্রবেশাধিকার পায়",
"grant-group-other": "বিবিধ কার্যকলাপ",
+ "grant-blockusers": "বাধা দেওয়া ও মুক্ত ব্যবহারকারীগণ",
"grant-createaccount": "অ্যাকাউন্ট তৈরি করুন",
"grant-createeditmovepage": "পাতা তৈরি, সম্পাদনা এবং স্থানান্তর করুন",
+ "grant-delete": "পাতা, পুনর্বিবেচনা ও লগ ভুক্তিসমূহ মুছে ফেলুন।",
+ "grant-editinterface": "মিডিয়াউইকি নামস্থান এবং ব্যবহারকারীর সিএসএস/জাভাস্ক্রিপ্ট সম্পাদনা করে",
"grant-editmycssjs": "আপনার সিএসএস/জাভাস্ক্রিপ্ট সম্পাদনা করুন",
"grant-editmyoptions": "আপনার ব্যবহারকারী পছন্দসমূহ সম্পাদনা করুন",
"grant-editmywatchlist": "আপনার নজরতালিকা সম্পাদনা করুন",
"upload-dialog-disabled": "এই ডায়ালগ ব্যবহার করে ফাইল আপলোড করা এই উইকিতে নিষ্ক্রিয় করা হয়েছে।",
"upload-dialog-title": "ফাইল আপলোড করুন",
"upload-dialog-button-cancel": "বাতিল",
+ "upload-dialog-button-back": "পিছনে",
"upload-dialog-button-done": "সম্পন্ন",
"upload-dialog-button-save": "সংরক্ষণ",
"upload-dialog-button-upload": "আপলোড",
"apisandbox-dynamic-parameters": "অতিরিক্ত প্যারামিটার",
"apisandbox-dynamic-parameters-add-label": "প্যারামিটার যোগ করুন:",
"apisandbox-dynamic-parameters-add-placeholder": "প্যারামিটারের নাম",
+ "apisandbox-dynamic-error-exists": "\"$1\" নামক একটি প্যারামিটার আগে থেকেই বিদ্যমান।",
"apisandbox-results": "ফলাফল",
"apisandbox-sending-request": "API অনুরোধ পাঠানো হচ্ছে...",
"apisandbox-loading-results": "API ফলাফল গ্রহণ করা হচ্ছে...",
"tags-delete-reason": "কারণ:",
"tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
"tags-delete-not-found": "\"$1\" ট্যাগ বিদ্যমান নয়।",
+ "tags-delete-no-permission": "আপনার পরিবর্তন ট্যাগ মুছে ফেলার অনুমতি নেই।",
"tags-activate-title": "সক্রিয় ট্যাগ",
"tags-activate-question": "আপনি ট্যাগ \"$1\" সক্রিয় করতে চলেছেন।",
"tags-activate-reason": "কারণ:",
"htmlform-cloner-create": "আরও যোগ করুন",
"htmlform-cloner-delete": "অপসারণ",
"htmlform-cloner-required": "অন্তত একটি মূল্য আবশ্যক।",
+ "htmlform-date-placeholder": "বববব-মম-দদ",
+ "htmlform-time-placeholder": "ঘঘ:মম:সস",
+ "htmlform-datetime-placeholder": "বববব-মম-দদ ঘঘ:মম:সস",
"htmlform-title-badnamespace": "[[:$1]] \"{{ns:$2}}\" নামস্থানে খুঁজে পাওয়া যায়নি।",
"htmlform-title-not-creatable": "\"$1\" সৃষ্টিযোগ্য পাতার শিরোনাম নয়",
"htmlform-title-not-exists": "$1-এর অস্তিত্ব নেই।",
"log-action-filter-upload-upload": "নতুন আপলোড",
"log-action-filter-upload-overwrite": "পুনঃআপলোড",
"authmanager-authn-no-primary": "সরবরাহকৃত পরিচয়পত্রের অনুমোদন যাচাই করা যায়নি।",
+ "authmanager-authn-autocreate-failed": "একটি স্থানীয় অ্যাকাউন্টের স্বয়ংক্রিয়-সৃষ্টি ব্যর্থ হয়েছে: $1",
"authmanager-create-disabled": "অ্যাকাউন্ট সৃষ্টিকরণ নিষ্ক্রিয় করা হয়েছে।",
"authmanager-create-from-login": "আপনার একাউন্ট তৈরি করতে, নীচের ক্ষেত্রগুলি পূরণ করুন।",
"authmanager-authplugin-setpass-failed-title": "পাসওয়ার্ড পরিবর্তন ব্যর্থ হয়েছে",
"authmanager-authplugin-setpass-bad-domain": "অবৈধ ডোমেইন।",
"authmanager-autocreate-noperm": "স্বয়ংক্রিয় অ্যাকাউন্ট সৃষ্টি মঞ্জুরিপ্রাপ্ত নয়।",
"authmanager-userdoesnotexist": "ব্যবহারকারী অ্যাকাউন্ট \"$1\" অনিবন্ধিত।",
+ "authmanager-username-help": "প্রমাণীকরণের জন্য ব্যবহারকারী নাম।",
+ "authmanager-password-help": "প্রমাণীকরণের জন্য পাসওয়ার্ড।",
+ "authmanager-domain-help": "বহিঃস্থ প্রমাণীকরণের জন্য ডোমেইন।",
+ "authmanager-retype-help": "নিশ্চিত করার জন্য আবার পাসওয়ার্ড লিখুন।",
"authmanager-email-label": "ইমেইল",
"authmanager-email-help": "ইমেইল ঠিকানা",
"authmanager-realname-label": "প্রকৃত নাম",
"authmanager-realname-help": "ব্যবহারকারীর প্রকৃত নাম",
+ "authmanager-provider-password": "পাসওয়ার্ড-ভিত্তিক প্রমাণীকরণ।",
+ "authmanager-provider-password-domain": "পাসওয়ার্ড ও ডোমেইন-ভিত্তিক প্রমাণীকরণ।",
"authmanager-provider-temporarypassword": "অস্থায়ী পাসওয়ার্ড",
"authprovider-confirmlink-success-line": "$1: সংযোগ করা সফল হয়েছে।",
"authprovider-resetpass-skip-label": "উপেক্ষা করো",
"credentialsform-provider": "পরিচয়পত্রের ধরন:",
"credentialsform-account": "অ্যাকাউন্টের নাম:",
"linkaccounts": "অ্যাকাউন্ট সংযোগ করুন",
+ "linkaccounts-success-text": "অ্যাকাউন্টটি সংযোগ করা হয়েছে।",
"linkaccounts-submit": "অ্যাকাউন্ট সংযুক্ত করুন",
"unlinkaccounts": "অ্যাকাউন্ট সংযোগ বিচ্ছিন্ন করুন",
"unlinkaccounts-success": "অ্যাকাউন্টের সংযোগ বিচ্ছিন্ন করা হয়েছে।",
+ "authenticationdatachange-ignored": "প্রমাণীকরণ উপাত্তের পরিবর্তন পরিচালনা করা হয়নি। হয়তো কোন প্রদানকারী কনফিগার করা হয়নি?",
"userjsispublic": "অনুগ্রহ করে লক্ষ্য করুন: জাভাস্ক্রিপ্টের উপপাতাগুলিতে গোপনীয় তথ্য থাকা উচিত নয় যেহেতু অন্যান্য ব্যবহারকারীও এগুলি দেখতে পান।",
- "usercssispublic": "অনুগ্রহ করে লক্ষ্য করুন: সিএসএসের উপপাতাগুলিতে গোপনীয় তথ্য থাকা উচিত নয় যেহেতু অন্যান্য ব্যবহারকারীও এগুলি দেখতে পান।"
+ "usercssispublic": "অনুগ্রহ করে লক্ষ্য করুন: সিএসএসের উপপাতাগুলিতে গোপনীয় তথ্য থাকা উচিত নয় যেহেতু অন্যান্য ব্যবহারকারীও এগুলি দেখতে পান।",
+ "restrictionsfield-badip": "আইপি ঠিকানা অথবা পরিসীমা অবৈধ: $1",
+ "restrictionsfield-label": "অনুমোদিত আইপি পরিসীমা:",
+ "restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে<br><code>0.0.0.0/0</code><br><code>::/0</code><br>ব্যবহার করুন"
}
"upload-http-error": "Даьлла гӀалат HTTP: $1",
"upload-dialog-title": "Файл чуяккхар",
"upload-dialog-button-cancel": "Цаоьшу",
+ "upload-dialog-button-back": "Юха",
"upload-dialog-button-done": "Кийчча ю",
"upload-dialog-button-save": "Ӏалашъян",
"upload-dialog-button-upload": "Чуяккха",
"htmlform-chosen-placeholder": "Харжа кеп",
"htmlform-cloner-create": "ТӀетоха кхин",
"htmlform-cloner-delete": "ДӀаяккха",
+ "htmlform-datetime-placeholder": "ШШШШ-ББ-ДД СС:ММ:СС",
"htmlform-title-not-exists": "«$1» яц.",
"htmlform-user-not-exists": "<strong>$1</strong> яц.",
"htmlform-user-not-valid": "<strong>$1</strong> — декъашхочун магийна йоцу цӀе.",
"special-characters-group-ipa": "ДАЭ (IPA)",
"special-characters-group-symbols": "Символаш",
"special-characters-group-greek": "Грекийн",
- "special-characters-group-greekextended": "Грекийн шординарш",
+ "special-characters-group-greekextended": "Грекийн алсам",
"special-characters-group-cyrillic": "Кирилан",
"special-characters-group-arabic": "Ӏарбийн",
- "special-characters-group-arabicextended": "Iаьрбийн шординарш",
+ "special-characters-group-arabicextended": "Ӏаьрбийн алсам",
"special-characters-group-persian": "Пхьарсхойн",
"special-characters-group-hebrew": "Жуьгтийн",
"special-characters-group-bangla": "Бангалойн",
"special-characters-group-tamil": "Тамилхойн",
"special-characters-group-telugu": "Телугойн",
"special-characters-group-sinhala": "Синхалойн",
- "special-characters-group-gujarati": "Ð\93Ñ\83жаÑ\80аÑ\82ойн",
+ "special-characters-group-gujarati": "Ð\93Ñ\83джаÑ\80аÑ\82и",
"special-characters-group-devanagari": "Деванагари",
"special-characters-group-thai": "Тайхойн",
"special-characters-group-lao": "Лаохойн",
"upload-dialog-disabled": "Načítání souborů pomocí tohoto dialogu je na této wiki vypnuto.",
"upload-dialog-title": "Načtení souboru",
"upload-dialog-button-cancel": "Storno",
+ "upload-dialog-button-back": "Zpět",
"upload-dialog-button-done": "Hotovo",
"upload-dialog-button-save": "Uložit",
"upload-dialog-button-upload": "Načíst",
"unlinkaccounts-success": "Propojení účtu bylo zrušeno.",
"authenticationdatachange-ignored": "Změna autentizačních údajů nebyla zpracována. Možná není nakonfigurován žádný poskytovatel?",
"userjsispublic": "Uvědomte si prosím, že podstránky s JavaScriptem by neměly obsahovat tajné údaje, protože jsou viditelné ostatním uživatelům.",
- "usercssispublic": "Uvědomte si prosím, že podstránky s CSS by neměly obsahovat tajné údaje, protože jsou viditelné ostatním uživatelům."
+ "usercssispublic": "Uvědomte si prosím, že podstránky s CSS by neměly obsahovat tajné údaje, protože jsou viditelné ostatním uživatelům.",
+ "restrictionsfield-badip": "Neplatná IP adresa nebo rozsah: $1",
+ "restrictionsfield-label": "Povolené rozsahy IP adres:",
+ "restrictionsfield-help": "Jedna IP adresa nebo CIDR rozsah na řádek. Všechno povolíte pomocí<br><code>0.0.0.0/0</code><br><code>::/0</code>"
}
"upload-dialog-disabled": "Dateiuploads mit diesem Dialog sind auf diesem Wiki deaktiviert.",
"upload-dialog-title": "Datei hochladen",
"upload-dialog-button-cancel": "Abbrechen",
+ "upload-dialog-button-back": "Zurück",
"upload-dialog-button-done": "Schließen",
"upload-dialog-button-save": "Speichern",
"upload-dialog-button-upload": "Hochladen",
"htmlform-cloner-create": "Weitere hinzufügen",
"htmlform-cloner-delete": "Entfernen",
"htmlform-cloner-required": "Es ist mindestens ein Wert erforderlich.",
- "htmlform-date-toolow": "Der angegebene Wert liegt vor dem frühesten erlaubten Datum $1.",
+ "htmlform-date-placeholder": "JJJJ-MM-TT",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "JJJJ-MM-TT HH:MM:SS",
+ "htmlform-date-invalid": "Der eingegebene Wert ist kein erkanntes Datum. Versuche die Verwendung des Formats JJJJ-MM-TT.",
+ "htmlform-time-invalid": "Der eingegebene Wert ist keine erkannte Zeit. Versuche die Verwendung des Formats HH:MM:SS.",
+ "htmlform-datetime-invalid": "Der eingegebene Wert ist kein erkanntes Datum und keine Zeit. Versuche die Verwendung des Formats JJJJ-MM-TT HH:MM:SS.",
+ "htmlform-date-toolow": "Der eingegebene Wert liegt vor dem frühesten erlaubten Datum $1.",
+ "htmlform-date-toohigh": "Der eingegebene Wert liegt nach dem spätesten erlaubten Datum $1.",
+ "htmlform-time-toolow": "Der eingegebene Wert liegt vor der frühesten erlaubten Zeit $1.",
+ "htmlform-time-toohigh": "Der eingegebene Wert liegt nach der spätesten erlaubten Zeit $1.",
+ "htmlform-datetime-toolow": "Der eingegebene Wert liegt vor dem frühesten erlaubten Datum und der Zeit $1.",
+ "htmlform-datetime-toohigh": "Der eingegebene Wert liegt nach dem spätesten erlaubten Datum und der Zeit $1.",
"htmlform-title-badnamespace": "[[:$1]] ist nicht im Namensraum „{{ns:$2}}“.",
"htmlform-title-not-creatable": "„$1“ ist kein erstellbarer Seitentitel",
"htmlform-title-not-exists": "$1 ist nicht vorhanden.",
"categoryviewer-pagedlinks": "($1) ($2)",
"about": "Heqa cı de",
"article": "Pela zerreki",
- "newwindow": "(pençereyê newey de beno a)",
- "cancel": "Bıterkın",
+ "newwindow": "(teqayaa newid abeno)",
+ "cancel": "Bıtexelne",
"moredotdotdot": "Vêşi...",
"morenotlisted": "Na lista qay kemi ya.",
"mypage": "Pele",
"newpage": "Pela newiye",
"talkpage": "Ena pele sero werêne",
"talkpagelinktext": "werênayış",
- "specialpage": "Perra bağsi",
+ "specialpage": "Pela xısusiye",
"personaltools": "Hacetê şexsiy",
"articlepage": "Pera zerreki bıvin",
- "talk": "Vaten",
+ "talk": "Werênayış",
"views": "Asayışi",
"toolbox": "Haceti",
"tool-link-userrights": "Grubanê {{GENDER:$1|karberi}} bıvırnë",
"mainpage": "Pela Seri",
"mainpage-description": "Pela seri",
"policy-url": "Project:Terzê hereketi",
- "portal": "Portalë Å\9fëlıgi",
+ "portal": "Portalê cemaeti",
"portal-url": "Project:Portalë şëlıgi",
"privacy": "Politikaya nımıteyiye",
"privacypage": "Project:Xısusiyetê nımıtışi",
"hr_tip": "Xeta verardiye (teserrufın bıgureyne/bıxebetne)",
"summary": "Xulasa:",
"subject": "Mewzu:",
- "minoredit": "Vurriyayışo werdiyo",
+ "minoredit": "No yew vurnayışo werdiyo",
"watchthis": "Na pele seyr ke",
"savearticle": "Qeyd ke",
"savechanges": "Vurnayışan qeyd ke",
"prefs-labs": "Xacetê labs",
"prefs-user-pages": "Pelê karberi",
"prefs-personal": "Pela karberi",
- "prefs-rc": "Vıryayışë newey",
+ "prefs-rc": "Vurriyayışê peyêni",
"prefs-watchlist": "Lista seyrkerdışi",
"prefs-editwatchlist": "Lista seyrkerdışi bıvurne",
"prefs-editwatchlist-label": "Listey serkerdışanê cıkewtışi timar kerê",
"recentchanges-noresult": "Goreyê kriteranê kıfşkerdeyan ra qet yew vurnayış nêvêniya.",
"recentchanges-feed-description": "Ena feed dı vurnayişanê tewr peniyan teqip bık.",
"recentchanges-label-newpage": "Enê vurnayışi ra yu pera newi vıraziya ya",
- "recentchanges-label-minor": "Vurriyayışo werdiyo",
+ "recentchanges-label-minor": "No yew vurnayışo werdiyo",
"recentchanges-label-bot": "Eno vurnayış terefê yew boti ra vıraziyo",
"recentchanges-label-unpatrolled": "Eno vurnayış hewna dewriya nêbiyo",
"recentchanges-label-plusminus": "Ebadê pele de bazê bayti de vayeyê cı",
"recentchanges-submit": "Bımocne",
"rcnotefrom": "Cêr de <strong>$2</strong> ra nata {{PLURAL:$5|vurnayışiyê}} asenê (tewr vêşi <strong>$1</strong> asenê) <strong>$3, $4</strong>",
"rclistfrom": "$3 $2 ra tepiya vurnayışanê neweyan bımocne",
- "rcshowhideminor": "vurriyayışê werdi $1",
+ "rcshowhideminor": "Vurriyayışê werdiy $1",
"rcshowhideminor-show": "Bımocne",
"rcshowhideminor-hide": "Bınımne",
"rcshowhidebots": "botan $1",
"watchlist-hide": "Bınımne",
"watchlist-submit": "Bımocne",
"wlshowtime": "Periyoda zemani asenayışi:",
- "wlshowhideminor": "vurriyayışê werdi",
+ "wlshowhideminor": "vurriyayışê werdiy",
"wlshowhidebots": "boti",
"wlshowhideliu": "karberê qeydıni",
"wlshowhideanons": "karberê anonimi",
"views": "अवलोकन गरऽ",
"toolbox": "औजारअन",
"tool-link-userrights": "परिवर्तन{{GENDER:$1|प्रयोगकर्ता}}समूहहरू",
- "tool-link-emailuser": "यो ईमेल{{GENDER:$|प्रयोगकर्ता}}",
+ "tool-link-emailuser": "{{GENDER:$1|प्रयोगकर्ता}}लाई एइ इमेलमी पठाऽ",
"userpage": "प्रयोगकर्ता पाना हेर्न्या",
"projectpage": "प्रोजेक्ट पानो हेर्न्या",
"imagepage": "चित्र पानो हेर",
"databaseerror-query": "अनुरोध: $1",
"databaseerror-function": "फङ्सन : $1",
"databaseerror-error": "गल्ती: $1",
+ "transaction-duration-limit-exceeded": "To avoid creating high replication lag, this transaction was aborted because the write duration ($1) exceeded the $2 second limit.\nIf you are changing many items at once, try doing multiple smaller operations instead.",
"laggedslavemode": "<strong>चेतावनी:</strong> पानामी हालका अद्यतनहरू नहुनस्कदान ।",
"readonly": "डेटाबेस बन्द गरिया छ",
"enterlockreason": "ताल्चा मार्नुको कारण दिया, साथै ताल्चा हटाउने समयको अवधि अनुमान लगा।",
"title-invalid-interwiki": "अनुरोध गरियाको शिर्षकमी अन्तर विकि लिङ्क छ जइलाई शिर्षकमी प्रयोग गद्द नाइपाइनो ।",
"title-invalid-talk-namespace": "निवेदन गरियाको पानाको शिर्षकले उपलब्ध नभएका कुरडी पानालाई सन्दर्भको रूपमी राख्याको छ ।",
"title-invalid-characters": "निवेदन गरियाको यै पानाको शिर्षकमी अवैध अक्षर रयाको छः \"$1\" ।",
+ "title-invalid-relative": "शीर्षक एउटा सन्दर्भित मार्ग राख्दछ। सन्दर्भित पृष्ठको शीर्षक (./, ../)अमान्य छ, किनकि त्यो प्राय रूपले पहुँच बाहिर हुन्छ जब त्यसलाई प्रायोगकर्ताको ब्राउजरबाट प्रयोगमी ल्याउने प्रयास गर्ने गरिन्छ।",
"title-invalid-magic-tilde": "अनुरोध अरिया: पन्ना: शीर्षकमी अमान्य म्याजिक टिल्ड शृङ्खला छ (<nowiki>~~~</nowiki>)।",
"title-invalid-too-long": "अनुरोध अरिया: पन्ना: शीर्षक भौत लामु छ। यो UTF-8 इनकोडिङमी $1 {{PLURAL:$1|byte|bytes}} है लामु हुनु हुनैन।",
"title-invalid-leading-colon": "निवेदन गरिया पृष्ठको शिर्षकको शुरूमी अवैध कोलोन रया छ ।",
"viewsource": "स्रोत हेर",
"viewsource-title": " $1 को स्रोत हेर",
"actionthrottled": "कार्य रोकिईयो",
- "actionthrottledtext": "स्पामको रोकथामको लागि , तमीलाई यो कार्य नापै समयमी मैथै पटक गद्दाबठे सिमित गरियाको छ, र तमीले आफ्नो सिमा पार गरिसक्याछौ ।\nकृपया केही मिनेट पछि पुन: प्रयास गर ।",
+ "actionthrottledtext": "स्पाम रोकथाम खिलाइ, तमलाई येइ काम थोक्काइ बगतमी झिक्कै फेर अद्दा बठेइ सीमित अरीरैछ, रे तमले आफुनी सीमा पार अरिसकिराइछऽ।\nकृपया केइ मिनट पछा दोसर्याँ प्रयास अर्याऽ।",
"protectedpagetext": "यो पृष्ठ सम्पादन हुनबठे बचाउन सम्पादनमी तथा अन्य कार्यमी रोक लगाइया छ।",
"viewsourcetext": "तम ये पृष्ठको स्रोत हेद्दु सकुन्छौ और उईको नक्कल उताद्दु सकुन्छौ |",
"viewyourtext": "यै पानामी रह्याका '''तमरा सम्पादनहरू''' हेद्द या प्रतिलिपी गद्द सक्द्या हौ :",
+ "protectedinterface": "यो पृष्ठले सफ्टवेयरको लागि अन्तरमोहडा पाठ प्रदान गर्दछ , र यसलाई दुरुपयोग हुनबाट बचाउन सुरक्षा प्रदान गरिएको छ।\nसम्पूर्ण विकिहरूका लागि अनुवादमी परिवर्तन गर्नको लागि [https://translatewiki.net/ translatewiki.net], प्रयोग गर्नुहोस् , मिडियाविकि स्थानियकरण परियोजना ।",
"editinginterface": "<strong>चेतावनी:</strong> तमी यै पानालाई सम्पादन गद्द लाग्याछौ, जनले सफ्टवेयरको लागि \nइन्टरफेस सामग्रीहरू प्रदान गरन्छ।\nयै पानामी गरियाको परिवर्तनले यै विकिमी अरु प्रयोगकर्तानको इन्टरफेसको प्रदर्शनमी प्रभाव पडन्छ ।",
"translateinterface": "सप्पै विकिइनखिलाइ अनुवाद थप्दाइ या बदेल्लाइ, कृपया [https://translatewiki.net/ translatewiki.net]को प्रयोग अर:, मिडियाविकि क्षेत्रीयकरण परियोजना:।",
+ "cascadeprotected": "यो पृष्ठ सम्पादन गर्नबाट सुरक्षित गरिएकोछ किनभनें {{PLURAL:$1|पृष्ठ |पृष्ठहरू}}मा सुरक्षित गर्नुका साथै प्रपात (\"cascading\") विकल्प खुल्ला राखिएको छ:\n$2",
"namespaceprotected": "तमलाई '''$1''' नेमस्पेसमी रह्याका पानाहरू सम्पादन गद्या अनुमति छैन ।",
"customcssprotected": "तमलाई यो पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
"customjsprotected": "तमलाई यो जाभास्कृप्ट पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
"changepassword-success": "तमरो पासवर्ड सफलतापूर्वक परिवर्तन भयो!",
"changepassword-throttled": "तमले अलै भौत फेर प्रवेशका निम्ति प्रयास गरया छौ।\nकृपया $1 थोक्कै जागी मात्र प्रयास गर।",
"botpasswords": "बोट पासवर्ड",
+ "botpasswords-createnew": "नौलो बोट पासवर्ड बनाऽ",
+ "botpasswords-editexisting": "भयाऽ बोट पासवर्ड सम्पादन अरऽ",
"botpasswords-label-appid": "बोट नाम:",
"botpasswords-label-create": "सृजना गर",
"botpasswords-label-update": "नयाँ बनाउनु",
"botpasswords-label-resetpassword": "पासवर्ड पूर्वनिर्धारित गर",
"botpasswords-label-grants": "अनुदान आवेदन:",
"botpasswords-label-grants-column": "प्रदान भयो",
+ "botpasswords-bad-appid": "बोट नाउँ \"$1\" नाइमाणीनो।",
+ "botpasswords-insert-failed": "बोट नाउँ \"$1\" थप्दाइ असफल। कि यो पैली थपीसकीरैछ?",
+ "botpasswords-update-failed": "बोट नाउँ \"$1\" अपडेट अद्दाइ असफल। कि यो मेट्याऽ हो?",
"botpasswords-created-title": "बोट को पासवर्ड बन्यो",
+ "botpasswords-created-body": "प्रयोगकर्ता \"$2\" को बोट नाउँ \"$1\" खिलाइ बोट पासवर्ड बनायियो।",
"botpasswords-updated-title": "बोट को पासवर्ड अपडेट भयो",
"botpasswords-deleted-title": "बोट को पासवर्ड मेटियो",
"resetpass_forbidden": "पासवर्ड परिवर्तन गर्न नाइँमिल्लो",
"protect-default": "सब्बै प्रयोगकर्तानहरूलाई अनुमति दिन्या",
"protect-level-autoconfirmed": "नौला तथा दर्ता भयाका प्रयोगकर्तानलाई मात्र अनुमति दिन्या",
"protect-cascade": "यै पानामी संलग्न सुरक्षित पानाहरू (लामबद्द सुरक्षा)",
+ "protect-expiry-options": "२ घण्टाहरू:2 hours,१ दिन :1 day,३ दिनहरू:3 days,१ हप्ता:1 week,२ हप्ताहरू:2 weeks,१ महिना:1 month,३ महिनाहरू:3 months,६ महिनाहरू:6 months,१ वर्ष:1 year,अनगिन्ती:infinite",
+ "restriction-type": "अनुमति:",
"pagesize": "(अक्षरहरू)",
"undeletepage": "मेट्याका पानाहरू हेद्या र पूर्वरुपमी फर्काउन्या",
"undeleterevisions": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} संग्रहित",
"watchlist-hide": "Kaŝi",
"watchlist-submit": "Montri",
"wlshowtime": "Vidigenda tempodaŭro:",
- "wlshowhideminor": "Etaj redaktoj",
- "wlshowhidebots": "robotoj",
- "wlshowhideliu": "registritaj uzantoj",
- "wlshowhideanons": "anonimaj uzantoj",
+ "wlshowhideminor": "etajn redaktojn",
+ "wlshowhidebots": "robotojn",
+ "wlshowhideliu": "registritajn uzantojn",
+ "wlshowhideanons": "anonimajn uzantojn",
"wlshowhidepatr": "patrolitaj redaktoj",
- "wlshowhidemine": "miaj redaktoj",
- "wlshowhidecategorization": "paĝa enkategoriigo.",
+ "wlshowhidemine": "miajn redaktojn",
+ "wlshowhidecategorization": "kategoriigon de paĝoj",
"watchlist-options": "Opcioj por atentaro",
"watching": "Aldonata al la atentaro...",
"unwatching": "Malatentante...",
"logentry-newusers-autocreate": "Uzantokonto $1 estis {{GENDER:$2|kreita}} aŭtomate",
"logentry-protect-move_prot": "$1 {{GENDER:$2|movis}} protektajn agordojn el $4 al $3",
"logentry-protect-unprotect": "$1 {{GENDER:$2|forigis}} protekton el $3",
- "logentry-protect-protect": "$1 {{GENDER:$2|protektis}} $3 $4",
+ "logentry-protect-protect": "$1 {{GENDER:$2|protektis}} la paĝon $3 $4",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|protektis}} $3 $4 [rikure]",
"logentry-protect-modify": "$1 {{GENDER:$2|ŝanĝis}} la nivelon de protekto de $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|ŝanĝis}} la nivelon de protekto de $3 $4 [rikure]",
"upload-dialog-disabled": "En este wiki están desactivadas las subidas de archivos mediante este cuadro de diálogo.",
"upload-dialog-title": "Subir archivo",
"upload-dialog-button-cancel": "Cancelar",
+ "upload-dialog-button-back": "Volver",
"upload-dialog-button-done": "Hecho",
"upload-dialog-button-save": "Guardar",
"upload-dialog-button-upload": "Subir",
"htmlform-cloner-create": "Añadir más",
"htmlform-cloner-delete": "Eliminar",
"htmlform-cloner-required": "Se requiere al menos un valor.",
+ "htmlform-date-placeholder": "AAAA-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "AAAA-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "No se reconoció la fecha en el formato proporcionado. Prueba a usar el formato AAAA-MM-DD.",
+ "htmlform-time-invalid": "No se reconoció la hora en el formato proporcionado. Prueba a usar el formato HH:MM:SS.",
+ "htmlform-datetime-invalid": "No se reconoció la fecha y la hora en el formato proporcionado. Prueba a usar el formato AAAA-MM-DD HH:MM:SS.",
+ "htmlform-date-toolow": "El valor especificado es anterior a la fecha más antigua permitida, $1.",
+ "htmlform-date-toohigh": "El valor especificado es posterior a la fecha límite permitida, $1.",
+ "htmlform-time-toolow": "El valor especificado es anterior a la hora más antigua permitida, $1.",
+ "htmlform-time-toohigh": "El valor especificado es posterior a la hora límite permitida, $1.",
+ "htmlform-datetime-toolow": "El valor especificado es anterior a la fecha y hora más antigua permitidas, $1.",
+ "htmlform-datetime-toohigh": "El valor especificado es posterior a la fecha y hora límite permitidas, $1.",
"htmlform-title-badnamespace": "[[:$1]] no está en el espacio de nombres \"{{ns:$2}}\".",
"htmlform-title-not-creatable": "\"$1\" no es un título de página que se pueda crear",
"htmlform-title-not-exists": "$1 no existe.",
"upload-copy-upload-invalid-domain": "Domeinu honetan ezin dira igoerak kopiatu.",
"upload-dialog-title": "Igo fitxategia",
"upload-dialog-button-cancel": "Utzi",
+ "upload-dialog-button-back": "Atzera",
"upload-dialog-button-done": "Egina",
"upload-dialog-button-save": "Gorde",
"upload-dialog-button-upload": "Igo",
"htmlform-chosen-placeholder": "Aukeratu",
"htmlform-cloner-create": "Gehitu gehiago",
"htmlform-cloner-delete": "Kendu",
+ "htmlform-date-placeholder": "UUUU-HH-EE",
+ "htmlform-time-placeholder": "OO:MM:SS",
+ "htmlform-datetime-placeholder": "UUUU-HH-EE OO:MM:SS",
+ "htmlform-date-invalid": "Jarri duzun balioak ez du data ezagunik adierazten. Saiatu UUUU-HH-EE formatua erabiltzen.",
+ "htmlform-time-invalid": "Jarri duzun balioak ez du denbora ezagunik adierazten. Saiatu OO:MM:SS formatua erabiltzen.",
+ "htmlform-datetime-invalid": "Jarri duzun balioak ez da data eta denbora bezala ezagutzen. Saitu UUUU-HH-EE OO:MM:SS formatua erabiltzen.",
"htmlform-title-not-creatable": "\"$1\" ez da sor daitekeen orrialde baten izenburua",
"htmlform-title-not-exists": "$1 ez da existitzen.",
"htmlform-user-not-exists": "<strong>$1</strong> ez da existitzen.",
"upload-foreign-cant-upload": "Tätä wikiä ei ole konfiguroitu tallentamaan tiedostoja pyydettyyn ulkoiseen tiedostovarastoon.",
"upload-dialog-title": "Tiedoston tallennus",
"upload-dialog-button-cancel": "Peru",
+ "upload-dialog-button-back": "Takaisin",
"upload-dialog-button-done": "Valmis",
"upload-dialog-button-save": "Tallenna",
"upload-dialog-button-upload": "Tallenna",
"htmlform-cloner-create": "Lisää enemmän",
"htmlform-cloner-delete": "Poista",
"htmlform-cloner-required": "Vähintään yksi arvo on pakollinen.",
+ "htmlform-date-placeholder": "VVVV-KK-PP",
+ "htmlform-time-placeholder": "TT:MM:SS",
+ "htmlform-datetime-placeholder": "VVVV-KK-PP TT:MM:SS",
"htmlform-title-badnamespace": "Sivu [[:$1]] ei ole nimiavaruudessa ”{{ns:$2}}”.",
"htmlform-title-not-creatable": "”$1” ei kelpaa sivun nimeksi.",
"htmlform-title-not-exists": "Sivua $1 ei ole olemassa.",
"linkaccounts-submit": "Linkitä tunnuksia",
"unlinkaccounts": "Poista tunnusten linkityksiä",
"unlinkaccounts-success": "Tunnuksen linkitys poistettiin.",
- "authenticationdatachange-ignored": "Varmennustietojen muutosta ei käsitelty. Ehkä palveluntarjoajaa ei määritelty?"
+ "authenticationdatachange-ignored": "Varmennustietojen muutosta ei käsitelty. Ehkä palveluntarjoajaa ei määritelty?",
+ "restrictionsfield-badip": "Virheellinen IP-osoite tai alue: $1",
+ "restrictionsfield-label": "Sallitut IP-alueet:"
}
"prefs-emailconfirm-label": "Confirmation du courriel :",
"youremail": "Courriel :",
"username": "{{GENDER:$1|Nom d'utilisateur|Nom d'utilisatrice}} :",
- "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}}:",
+ "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}} :",
"prefs-registration": "Date d'inscription :",
"yourrealname": "Nom réel :",
"yourlanguage": "Langue :",
"upload-dialog-disabled": "Les téléversements de fichier utilisant cette boîte de dialogue sont désactivés sur ce wiki.",
"upload-dialog-title": "Téléverser un fichier",
"upload-dialog-button-cancel": "Annuler",
+ "upload-dialog-button-back": "Retour",
"upload-dialog-button-done": "Terminé",
"upload-dialog-button-save": "Enregistrer",
"upload-dialog-button-upload": "Téléverser",
"htmlform-cloner-create": "Ajouter encore",
"htmlform-cloner-delete": "Supprimer",
"htmlform-cloner-required": "Une valeur au moins est obligatoire.",
+ "htmlform-date-placeholder": "AAAA-MM-JJ",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "AAAA-MM-JJ HH:MM:SS",
+ "htmlform-date-invalid": "La valeur que vous avez spécifiée n’est pas une date reconnue. Essayez en utilisant le format AAAA-MM-JJ.",
+ "htmlform-time-invalid": "La valeur que vous avez spécifiée n’est pas une heure reconnue. Essayez en utilisant le format HH:MM:SS.",
+ "htmlform-datetime-invalid": "La valeur que vous avez spécifiée n’est pas un horodatage reconnu. Essayez en utilisant le format AAAA-MM-JJ HH:MM:SS.",
+ "htmlform-date-toolow": "La valeur que vous avez spécifiée est antérieure à la date autorisée la plus ancienne, qui est $1.",
+ "htmlform-date-toohigh": "La valeur que vous avez spécifiée est postérieure à la date autorisée la plus lointaine, qui est $1.",
+ "htmlform-time-toolow": "La valeur que vous avez spécifiée est antérieure à la plus petite heure autorisée, qui est $1.",
+ "htmlform-time-toohigh": "La valeur que vous avez spécifiée est postérieure à la plus grande heure autorisée, qui est $1.",
+ "htmlform-datetime-toolow": "La valeur que vous avez spécifiée est antérieure à l’horodatage autorisé le plus ancien, qui est $1.",
+ "htmlform-datetime-toohigh": "La valeur que vous avez spécifiée est postérieure à l’horodatage autorisé le plus lointain, qui est $1.",
"htmlform-title-badnamespace": "[[:$1]] n'est pas dans l’espace de noms « {{ns:$2}} ».",
"htmlform-title-not-creatable": "« $1 » n’est pas un titre de page pouvant être créée",
"htmlform-title-not-exists": "$1 n’existe pas",
"recentchanges-page-removed-from-category-bundled": "[[:$1]] eliminada da categoría [[Special:WhatLinksHere/$1||esta páxina está incluída noutras páxinas]]",
"autochange-username": "Cambio automático de MediaWiki",
"upload": "Subir un ficheiro",
- "uploadbtn": "Subir un ficheiro",
+ "uploadbtn": "Subir o ficheiro",
"reuploaddesc": "Cancelar a carga e volver ao formulario de carga",
"upload-tryagain": "Enviar a descrición do ficheiro modificada",
"uploadnologin": "Non accedeu ao sistema",
"upload-dialog-disabled": "As cargas de ficheiros usando esta pantalla están desactivadas neste wiki.",
"upload-dialog-title": "Subir un ficheiro",
"upload-dialog-button-cancel": "Cancelar",
+ "upload-dialog-button-back": "Volver",
"upload-dialog-button-done": "Feito",
"upload-dialog-button-save": "Gardar",
"upload-dialog-button-upload": "Subir",
"statistics-edits-average": "Media de edicións por páxina",
"statistics-users": "[[Special:ListUsers|Usuarios]] rexistrados",
"statistics-users-active": "Usuarios activos",
- "statistics-users-active-desc": "Usuarios que teñen levado a cabo unha acción {{PLURAL:$1|no último día|nos últimos $1 días}}",
+ "statistics-users-active-desc": "Usuarios que levaron a cabo unha acción {{PLURAL:$1|no último día|nos últimos $1 días}}",
"pageswithprop": "Páxinas cunha propiedade de páxina",
"pageswithprop-legend": "Páxinas cunha propiedade de páxina",
"pageswithprop-text": "Esta páxina lista aquelas páxinas que utilizan unha propiedade de páxina determinada.",
"htmlform-cloner-create": "Engadir máis",
"htmlform-cloner-delete": "Eliminar",
"htmlform-cloner-required": "Necesítase, polo menos, un valor.",
+ "htmlform-date-placeholder": "AAAA-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "AAAA-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "O valor especificado non é unha data recoñedica. Probe usando o formato AAAA-MM-DD.",
+ "htmlform-time-invalid": "O valor especificado non é unha hora recoñedica. Probe usando o formato HH:MM:SS.",
+ "htmlform-datetime-invalid": "O valor especificado non é unha data e hora recoñedica. Probe usando o formato AAAA-MM-DD HH:MM:SS.",
+ "htmlform-date-toolow": "O valor especificado é anterior á data máis antiga permitida: $1",
+ "htmlform-date-toohigh": "O valor especificado é posterior á data máis nova permitida: $1",
+ "htmlform-time-toolow": "O valor especificado é anterior ó tempo máis antigo permitido: $1",
+ "htmlform-time-toohigh": "O valor especificado é posterior ó tempo máis novo permitido: $1",
+ "htmlform-datetime-toolow": "O valor especificado é anterior á data e tampo máis antigo permitido: $1",
+ "htmlform-datetime-toohigh": "O valor especificado é posterior á data e tempo máis novo permitido: $1",
"htmlform-title-badnamespace": "\"[[:$1]]\" non está no espazo de nomes \"{{ns:$2}}\".",
"htmlform-title-not-creatable": "\"$1\" non é un título de páxina que se poida crear",
"htmlform-title-not-exists": "\"$1\" non existe.",
"articleexists": "આ નામનું પાનું અસ્તિત્વમાં છે, અથવાતો તમે પસંદ કરેલું નામ અસ્વિકાર્ય છો.\nકૃપા કરી અન્ય નામ પસંદ કરો.",
"cantmove-titleprotected": "આ સ્થાને તમે પાનું નહીં હટાવી શકો કેમ કે નવું શીર્ષક રચના કરવા પહેલેથી આરક્ષીત છે",
"movetalk": "સંલગ્ન ચર્ચાનું પાનું પણ ખસેડો",
- "move-subpages": "($1 સુધી) ઉપ-પાના હટાવાયા",
+ "move-subpages": "પેટાપાનાં પણ ખસેડો ($1 સુધીના)",
"move-talk-subpages": "ઉપપાનને ચર્ચાના પાના પર ખસેડો ( $1 સુધે)",
"movepage-page-exists": "પાનું $1 પહેલેથી અસ્તિત્વમાં છે તેના પર સ્વયં ચલિત રીતે નવું લેખન ન થાય.",
"movepage-page-moved": "પાના $1 ને $2 પર ખસેડાયું",
"deletethispage": "מחיקת דף זה",
"undeletethispage": "שחזור דף זה",
"undelete_short": "שחזור {{PLURAL:$1|עריכה אחת|$1 עריכות}}",
- "viewdeleted_short": "×\94צ×\92ת {{PLURAL:$1|×\92רס×\94 ער×\99×\9bה אחת|$1 עריכה מחוקות}}",
+ "viewdeleted_short": "×\94צ×\92ת {{PLURAL:$1|ער×\99×\9b×\94 ×\9e×\97×\95קה אחת|$1 עריכה מחוקות}}",
"protect": "הגנה",
"protect_change": "שינוי",
"protectthispage": "הפעלת הגנה על דף זה",
"eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.",
"throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.",
"mailerror": "שגיאה בשליחת דואר: $1",
- "acct_creation_throttle_hit": "מבקרים באתר זה דרך כתובת ה־IP שלך כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ב־$2. זהו המקסימום המותר בתקופה זו.\nלפיכך, כרגע לא ניתן ליצור חשבונות נוספים מכתובת ה־IP הזו.",
+ "acct_creation_throttle_hit": "מבקרים באתר זה דרך כתובת ה־IP שלך כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} במהלך $2. זהו המקסימום המותר בתקופה זו.\nלפיכך, כרגע לא ניתן ליצור חשבונות נוספים מכתובת ה־IP הזו.",
"emailauthenticated": "כתובת הדוא\"ל שלך אומתה ב־$2 בשעה $3.",
"emailnotauthenticated": "כתובת הדוא\"ל שלכם עדיין לא אומתה.\nלא יישלח אליכם דוא\"ל עבור אף אחת מהתכונות הבאות.",
"noemailprefs": "יש לציין כתובת דוא\"ל בהעדפות שלך כדי שתכונות אלה יעבדו.",
"upload-dialog-disabled": "אין אפשרות להעלות קבצים באמצעות תיבת הדו־שיח הזאת באתר זה.",
"upload-dialog-title": "העלאת קובץ",
"upload-dialog-button-cancel": "ביטול",
+ "upload-dialog-button-back": "חזרה",
"upload-dialog-button-done": "בוצע",
"upload-dialog-button-save": "שמירה",
"upload-dialog-button-upload": "העלאה",
"htmlform-cloner-create": "הוספה",
"htmlform-cloner-delete": "הסרה",
"htmlform-cloner-required": "דרוש לפחות ערך אחד.",
+ "htmlform-date-placeholder": "YYYY-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "הערך שכתבת אינו תאריך מוכר. ניתן להשתמש בפורמט YYYY-MM-DD.",
+ "htmlform-time-invalid": "הערך שכתבת אינו שעה מוכרת. ניתן להשתמש בפורמט HH:MM:SS.",
+ "htmlform-datetime-invalid": "הערך שכתבת אינו תאריך ושעה מוכרים. ניתן להשתמש בפורמט YYYY-MM-DD HH:MM:SS.",
+ "htmlform-date-toolow": "הערך שכתבת הוא לפני התאריך המוקדם ביותר האפשרי, $1.",
+ "htmlform-date-toohigh": "הערך שכתבת הוא אחרי התאריך המאוחר ביותר האפשרי, $1.",
+ "htmlform-time-toolow": "הערך שכתבת הוא לפני השעה המוקדמת ביותר האפשרית, $1.",
+ "htmlform-time-toohigh": "הערך שכתבת הוא אחרי השעה המאוחרת ביותר האפשרית, $1.",
+ "htmlform-datetime-toolow": "הערך שכתבת הוא לפני התאריך והשעה המוקדמים ביותר האפשריים, $1.",
+ "htmlform-datetime-toohigh": "הערך שכתבת הוא אחרי התאריך והשעה המאוחרים ביותר האפשריים, $1.",
"htmlform-title-badnamespace": "[[:$1]] אינו במרחב השם \"{{ns:$2}}\".",
"htmlform-title-not-creatable": "\"$1\" אינו שם של דף שאפשר ליצור",
"htmlform-title-not-exists": "$1 אינו קיים.",
"upload-copy-upload-invalid-domain": "Kopije postavljenih datoteka nisu dostupne s ove domene.",
"upload-dialog-title": "Postavi datoteku",
"upload-dialog-button-cancel": "Odustani",
+ "upload-dialog-button-back": "Natrag",
"upload-dialog-button-done": "Gotovo",
"upload-dialog-button-save": "Spremi",
"upload-dialog-button-upload": "Postavi",
"emailuserfooter": "Ovu je e-poruku {{GENDER:$1|poslao suradnik|poslala suradnica}} $1 {{GENDER:$2|suradniku $2|suradnici $2}} uporabom mogućnosti \"{{int:emailuser}}\" s projekta {{SITENAME}}.",
"usermessage-summary": "Ostavljanje poruke sustava.",
"usermessage-editor": "Uređivač sistemskih poruka",
- "watchlist": "Moj popis praćenja",
+ "watchlist": "Popis praćenja",
"mywatchlist": "Popis praćenja",
"watchlistfor2": "Za $1 $2",
"nowatchlist": "Na Vašem popisu praćenja nema nijednog članka.",
"htmlform-cloner-create": "Dodaj još",
"htmlform-cloner-delete": "Ukloni",
"htmlform-cloner-required": "Potrebna je barem jedna vrijednost.",
+ "htmlform-date-placeholder": "GGGG-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "GGGG-MM-DD HH:MM:SS",
+ "htmlform-time-invalid": "Unesena vrijednost nije prepoznati format vremena. Pokušajte koristiti format HH:MM:SS.",
+ "htmlform-datetime-toohigh": "Uneseni datum i vrijeme su veći od $1",
"logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
"logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
"logentry-delete-event": "$1 je {{GENDER:$2|promijenio|promijenila}} vidljivost {{PLURAL:$5|zapisa u evidenciji|$5 zapisa u evidenciji}} na $3: $4",
"upload-dialog-disabled": "Il caricamento di file tramite questa finestra di dialogo è disabilitato in questo wiki.",
"upload-dialog-title": "Carica file",
"upload-dialog-button-cancel": "Annulla",
+ "upload-dialog-button-back": "Indietro",
"upload-dialog-button-done": "Fatto",
"upload-dialog-button-save": "Salva",
"upload-dialog-button-upload": "Carica",
"listfiles_date": "Data",
"listfiles_name": "Nome",
"listfiles_user": "Utente",
- "listfiles_size": "Dimensione in byte",
+ "listfiles_size": "Dimensione",
"listfiles_description": "Descrizione",
"listfiles_count": "Versioni",
"listfiles-show-all": "Includi le vecchie versioni delle immagini",
"htmlform-cloner-create": "Aggiungi altro",
"htmlform-cloner-delete": "Rimuovi",
"htmlform-cloner-required": "È obbligatorio almeno un valore.",
+ "htmlform-date-placeholder": "AAAA-MM-GG",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "AAAA-MM-GG HH:MM:SS",
+ "htmlform-date-invalid": "Il valore specificato non è riconosciuto come data. Prova a utilizzare il formato AAAA-MM-GG.",
+ "htmlform-time-invalid": "Il valore specificato non è riconosciuto come orario. Prova a utilizzare il formato HH:MM:SS.",
+ "htmlform-datetime-invalid": "Il valore specificato non è riconosciuto come data e ora. Prova a utilizzare il formato AAAA-MM-GG HH:MM:SS.",
+ "htmlform-date-toolow": "Il valore specificato è precedente alla prima data consentita del $1.",
+ "htmlform-date-toohigh": "Il valore specificato è successivo all'ultima data consentita del $1.",
+ "htmlform-time-toolow": "Il valore specificato è precedente al primo orario consentito del $1.",
+ "htmlform-time-toohigh": "Il valore specificato è successivo all'ultimo orario consentito di $1.",
+ "htmlform-datetime-toolow": "Il valore specificato è precedente alla prima data e ora consentita del $1.",
+ "htmlform-datetime-toohigh": "Il valore specificato è successivo all'ultima data e ora consentita del $1.",
"htmlform-title-badnamespace": "[[:$1]] non si trova nel namespace \"{{ns:$2}}\".",
"htmlform-title-not-creatable": "\"$1\" è il titolo di una pagina non creabile",
"htmlform-title-not-exists": "$1 non esiste.",
"upload-dialog-disabled": "이 대화창을 이용한 파일 올리기는 이 위키에서 비활성화되어 있습니다.",
"upload-dialog-title": "파일 올리기",
"upload-dialog-button-cancel": "취소",
+ "upload-dialog-button-back": "뒤로",
"upload-dialog-button-done": "완료",
"upload-dialog-button-save": "저장",
"upload-dialog-button-upload": "올리기",
"htmlform-cloner-create": "더 추가",
"htmlform-cloner-delete": "제거",
"htmlform-cloner-required": "적어도 하나의 값이 필요합니다.",
+ "htmlform-date-placeholder": "YYYY-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
"htmlform-title-badnamespace": "[[:$1]] 문서는 \"{{ns:$2}}\" 이름공간에 없습니다.",
"htmlform-title-not-creatable": "\"$1\"은 만들 수 없는 문서 제목입니다.",
"htmlform-title-not-exists": "$1 문서는 존재하지 않습니다.",
"upload-dialog-disabled": "D'Eropluede vu Fichieren mat dësem Dialog ass op dëser Wiki desaktivéiert.",
"upload-dialog-title": "Fichier eroplueden",
"upload-dialog-button-cancel": "Ofbriechen",
+ "upload-dialog-button-back": "Zréck",
"upload-dialog-button-done": "Fäerdeg",
"upload-dialog-button-save": "Späicheren",
"upload-dialog-button-upload": "Eroplueden",
"htmlform-cloner-create": "Méi derbäisetzen",
"htmlform-cloner-delete": "Ewechhuelen",
"htmlform-cloner-required": "Mindestens ee Wäert ass obligatoresch.",
+ "htmlform-date-placeholder": "JJJJ-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "JJJJ-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "De Wäert deen Dir aginn hutt gouf net als Datum erkannt. Probéiert de Format JJJJ-MM-DD ze benotzen.",
+ "htmlform-time-invalid": "De Wäert deen Dir aginn hutt gouf net als Zäit erkannt. Probéiert de Format HH:MM:SS ze benotzen.",
+ "htmlform-datetime-invalid": "De Wäert deen Dir aginn hutt gouf net als Datum an Zäit erkannt. Probéiert de Format JJJJ-MM-DD HH:MM:SS ze benotzen.",
+ "htmlform-date-toolow": "De Wäert deen Dir aginn hutt ass virun deem éischten erlaabten Datum vum $1.",
+ "htmlform-date-toohigh": "De wäert deen Dir aginn hutt ass nom leschten erlaabten Datum vum $1.",
+ "htmlform-time-toolow": "De Wäert deen Dir aginn hutt ass virun der éischter erlaabter Zäit vu(n) $1.",
+ "htmlform-time-toohigh": "De Wäert deen Dir aginn hutt ass no der leschter erlaabter Zäit vu(n) $1.",
"htmlform-title-badnamespace": "[[:$1]] ass net am Nummraum \"{{ns:$2}}\".",
"htmlform-title-not-creatable": "\"$1\" ass kee Säitentitel deen ugeluecht ka ginn",
"htmlform-title-not-exists": "$1 gëtt et net.",
"upload-foreign-cant-upload": "Šis vikis nėra sukonfigūruotas failų įkėlimui į nurodytą išorinę failų talpyklą.",
"upload-dialog-title": "Įkelti failą",
"upload-dialog-button-cancel": "Atšaukti",
+ "upload-dialog-button-back": "Atgal",
"upload-dialog-button-done": "Atlikta",
"upload-dialog-button-save": "Išsaugoti",
"upload-dialog-button-upload": "Įkelti",
"permissionserrorstext-withaction": "अहाँक अनुमति नै अछि $2 लेल, एकर लेल {{PLURAL:$1|कारण|कारणसभ}}सँ:",
"recreate-moveddeleted-warn": "'''चेतौनी''': अहाँ फेरसँ ओ पन्ना बना रहल छी जे पहिने मेटा देल गेल छै।'''\n\nअहाँ विचारू जे की ई सम्पादन केनाइ उचित अछि।\nऐ पन्नाक मेटाएल बला आ हटाएल वृत्तलेख एतए सुविधा लेल देल जा रहल अछि:",
"moveddeleted-notice": "ई पन्ना मेटाएल गेल अछि।\nई पन्ना लेल मेटाएल आ स्थानान्तरणक लग सन्दर्भ लेल नीचाँ देल गेल अछि।",
- "log-fulllog": "सà¤à¤\9fा वà¥\83तà¥\8dतलà¥\87à¤\96 देखी",
+ "log-fulllog": "समà¥\8dपà¥\82रà¥\8dण लà¥\8cà¤\97 देखी",
"edit-hook-aborted": "सम्पादन नोकसीसँ खतम भेल।\nई कोनो कारण नै देलक।",
"edit-gone-missing": "पन्ना अद्यतन नै भऽ सकल।\nलगैए जे ई मेटा देल गेल अछि।",
"edit-conflict": "सम्पादन अन्तर्विरोध",
"expansion-depth-exceeded-warning": "पन्ना विस्तार गहिराई पार केनए अछि",
"parser-unstrip-loop-warning": "Unstrip लूप पाओल गेल",
"parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार कइर गेल($1)",
- "converter-manual-rule-error": "म्यानुअल भाषा परिवर्तन नियम में त्रुटि",
+ "converter-manual-rule-error": "म्यानुअल भाषा परिवर्तन नियममे त्रुटि",
"undo-success": "ई सम्पादन पूर्ववत बदलल जा सकैए।\nकृपा क' नीचाँक तुलनाक जाँच करू ई देखैले जे ई वएह भेल अछि जे अहाँ चाहै छलहुँ, आ तखन सम्पादन ख़तम करबा लेल नीचाँक परिवर्तन सुरक्षित करू ।",
"undo-failure": "मध्यवर्ती विरोधी सम्पादनक कारण ऐ सम्पादनकेँ खतम नै कएल जा सकैए।",
"undo-norev": "ई सम्पादन खतम नै कएला जा सकैए कारण ई अछि नै वा मेटा देल गेल अछि।",
"revdelete-show-file-submit": "हँ",
"revdelete-selected-text": "[[:$2]] {{PLURAL:$1|क|के}} चयनित अवतरण:",
"revdelete-selected-file": "[[:$2]] {{PLURAL:$1|क|के}} चयनित फाइल अवतरण:",
- "logdelete-selected": "{{PLURAL:$1|à¤\9aà¥\81नल वà¥\83तà¥\8dतलà¥\87à¤\96 à¤\98à¤\9fना|à¤\9aà¥\81नल वà¥\83तà¥\8dतलà¥\87à¤\96 घटनासभ}}:",
+ "logdelete-selected": "{{PLURAL:$1|à¤\9aà¥\81नल लà¥\8cà¤\97 à¤\98à¤\9fना|à¤\9aà¥\81नल लà¥\8cà¤\97 घटनासभ}}:",
"revdelete-text-text": "हटाएल गेल अवतरण पृष्ठ इतिहासमें देखाएल जाएत मुदा वोकर सामग्री सार्वजनिक रूपसँ नै देखाएल जा सकएत अछि।",
"revdelete-text-file": "हटाएल गेल अवतरण पृष्ठ इतिहासमें देखाएल जाएत मुदा वोकर सामग्री सार्वजनिक रूपसँ नै देखाएल जा सकएत अछि।",
"logdelete-text": "हटाए गेल प्रवेश घटनासभ अखैनो भी लॉग में दिखाबल ज्यात, लेकिन ओकर सामग्री के कुछ भाग के सार्वजनीक करबाक के लेल दुर्गम भ्या जेत।",
"revdelete-reasonotherlist": "दोसर कारण",
"revdelete-edit-reasonlist": "मेटेबाक कारण बदली",
"revdelete-offender": "संशोधन केनिहार:",
- "suppressionlog": "दबाà¤\8fलà¤\97à¥\87ल वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "suppressionlog": "नà¥\81à¤\95ाà¤\8fल लà¥\8cà¤\97",
"suppressionlogtext": "नीचाँ मेटाएल आ प्रतिबन्धक उल्लेख अछि जे संचालकसँ नुकाएल सामिग्री अछि।\nअखन स्थित प्रभावी प्रतिबन्ध आ अवरोध लेल देखू [[Special:BlockList|IP block list]] ।",
- "mergehistory": "मिà¤\9cà¥\8dà¤\9dर à¤à¥\87ल पनà¥\8dना सà¤à¤\95 à¤\87तिहास",
+ "mergehistory": "पà¥\83षà¥\8dठà¤\95 à¤\87तिहास à¤\8fà¤\95तà¥\8dरित à¤\95रà¥\80",
"mergehistory-header": "ई पन्ना अहाँकेँ एकटा स्रोत पन्नाक एकटा नव पन्नामे संशोधन इतिहासकेँ मिज्झर करबाक अनुमति दैत अछि।\nसुनिश्चित होउ जे ई परिवर्तन ऐतिहासिक पन्ना सांतत्य स्थापित करत।",
- "mergehistory-box": "दà¥\82 पनà¥\8dनाà¤\95 सà¤\82शà¥\8bधन मिà¤\9cà¥\8dà¤\9dर à¤\95रà¥\80।",
+ "mergehistory-box": "दà¥\81à¤\88 पà¥\83षà¥\8dठसà¤à¤\95 à¤\87तिहास à¤\8fà¤\95तà¥\8dरित à¤\95रà¥\80:",
"mergehistory-from": "मूल पन्ना:",
"mergehistory-into": "लक्ष्य पन्ना:",
- "mergehistory-list": "मिà¤\9cà¥\8dà¤\9dर यà¥\8bà¤\97à¥\8dय सम्पादन इतिहास",
+ "mergehistory-list": "à¤\8fà¤\95तà¥\8dरितà¥\80à¤\95रण सम्पादन इतिहास",
"mergehistory-merge": "[[:$1]] एकर संशोधन सभकेँ [[:$2]] मे मिलाएल जा सकैए।\nरेडियो बटन स्तम्भक प्रयोग मात्र संशोधनकेँ निर्धारित समए वा ओइसँ पहिने मिज्झर करबामे प्रयोग करू।\nमोन राखू जे उपर नीचाँक लागिक प्रयोग ऐ स्तम्भकेँ पुनर्स्थापित कऽ देत।",
- "mergehistory-go": "मिà¤\9cà¥\8dà¤\9dर हà¥\8bà¤\87 यà¥\8bà¤\97à¥\8dय समà¥\8dपादन सà¤à¤\95à¥\87à¤\81 दà¥\87à¤\96ाà¤\89",
- "mergehistory-submit": "सà¤\82शà¥\8bधन सà¤à¤\95à¥\87 मिà¤\9cà¥\8dà¤\9dर करी",
- "mergehistory-empty": "à¤\95à¥\8bनà¥\8b सà¤\82शà¥\8bधन मिà¤\9cà¥\8dà¤\9dर नà¥\88 à¤\95à¤\8fल à¤\9cा सà¤\95à¥\88à¤\8f।",
+ "mergehistory-go": "à¤\8fà¤\95तà¥\8dरित à¤\95रà¥\88लà¥\87ल लायà¤\95 समà¥\8dपादन दà¥\87à¤\96ाबà¥\80",
+ "mergehistory-submit": "सà¤\82शà¥\8bधन à¤\8fà¤\95तà¥\8dरित करी",
+ "mergehistory-empty": "à¤\95à¥\8bनà¥\8b à¤à¥\80 à¤\85वतरण à¤\8fà¤\95तà¥\8dरित नà¥\88 à¤\95à¤\8fल à¤\9cा सà¤\95ल।",
"mergehistory-done": "$3 {{PLURAL:$3|संशोधन|संशोधन सभ}} एकर $1 सफलता पूर्वक मिज्झर कएल गेल [[:$2]] मे।",
"mergehistory-fail": "इतिहासक मिश्रणकेँ नै कऽ सकल, कृपा कऽ पन्ना आ समए परिमितिकेँ फेरसँ जाँचू।",
"mergehistory-fail-bad-timestamp": "समय सङ्ख्या अमान्य।",
"mergehistory-comment": "[[:$1]] केँ [[:$2]] मे मिलाएल गेल: $3",
"mergehistory-same-destination": "स्रोत आ लक्ष्य पन्ना सभ एक्के नै भऽ सकैए",
"mergehistory-reason": "कारण:",
- "mergelog": "मिà¤\9cà¥\8dà¤\9dरबला वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "mergelog": "à¤\8fà¤\95तà¥\8dरà¥\80à¤\95रण लà¥\8cà¤\97",
"revertmerge": "नै मिज्झर",
"mergelogpagetext": "नीचाँ एक पन्ना इतिहासक दोसरमे अद्यतन मिश्रणक सूची अछि।",
"history-title": "\"$1\" क संशोधन इतिहास",
"right-undelete": "पन्ना फेरसँ आनी",
"right-suppressrevision": "संचालकसँ नुकाएल संशोधनकेँ पुनरीक्षित करी आ फेरसँ आनी",
"right-viewsuppressed": "कोनो प्रयोक्ताके नुकाएल संसोधन देखु",
- "right-suppressionlog": "वà¥\8dयà¤\95à¥\8dतिà¤\97त वà¥\83तà¥\8dतलà¥\87à¤\96 देखी",
+ "right-suppressionlog": "निà¤\9cà¥\80 लà¥\8cà¤\97 देखी",
"right-block": "दोसर प्रयोक्ताकेँ सम्पादनसँ रोकी",
"right-blockemail": "प्रयोक्ताकेँ ई-पत्र पठेबासँ रोकी",
"right-hideuser": "एकटा प्रयोक्तानामकेँ प्रतिबन्धित करू, लोकसँ एकरा नुका कऽ",
"right-noratelimit": "दरक सीमासँ प्रभावित नै",
"right-import": "दोसर विकीसँ पन्ना लिअ",
"right-importupload": "पन्नासभकेँ संचिका उपारोपणसँ आनू",
- "right-patrol": "दà¥\8bसराà¤\95 समà¥\8dपादनà¤\95à¥\87à¤\81 सà¤\82à¤\9aालित दà¥\87à¤\96ाà¤\89",
- "right-autopatrol": "अपन सम्पादनकेँ स्वचालित रूपेँ संचालित देखाउ",
+ "right-patrol": "à¤\85नà¥\8dय सदसà¥\8dयसà¤à¤\95 समà¥\8dपादन परà¥\80à¤\95à¥\8dषित à¤\9aिनà¥\8dहित à¤\95रà¥\80",
+ "right-autopatrol": "अपन सम्पादन स्वचालित रूपसँ परीक्षित चिन्हित करी",
"right-patrolmarks": "हालक परिवर्तनमे संचालन चेन्ह देखू",
"right-unwatchedpages": "एहन पृष्ठसभक सूची देखी जे केकरो ध्यानसूचीमे नै अछि",
- "right-mergehistory": "पनà¥\8dनाà¤\95 à¤\87तिहास सà¤à¤\95à¥\87à¤\81 मिà¤\9cà¥\8dà¤\9dर à¤\95रà¥\82",
+ "right-mergehistory": "पनà¥\8dनाà¤\95 à¤\87तिहास à¤\8fà¤\95तà¥\8dरित à¤\95रà¥\80",
"right-userrights": "सभटा प्रयोक्ता अधिकारकेँ सम्पादित करू",
"right-userrights-interwiki": "दोसर विकीपर प्रयोक्ताक प्रयोक्ता अधिकारक सम्पादन करी",
"right-siteadmin": "दत्तनिधिकेँ प्रतिबन्धित करू आ फेर प्रतिबन्ध हटाउ",
"grant-viewmywatchlist": "अपन साकांक्षसूची देखी",
"newuserlogpage": "प्रयोक्ता रचना लग",
"newuserlogpagetext": "ई प्रयोक्ता निर्माणक वृत्तलेख अछि।",
- "rightslog": "पà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\85धिà¤\95ार वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "rightslog": "पà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\85धिà¤\95ार लà¥\8cà¤\97",
"rightslogtext": "ई प्रयोक्ता अधिकार परिवर्तन सभक वृतलेख छी।",
"action-read": "ई पन्ना पढी",
"action-edit": "ई पन्नाक सम्पादित करी",
"action-createtalk": "ई वार्ता पन्ना बनाबी",
"action-createaccount": "ई प्रयोक्ता खाता बनाबी",
"action-autocreateaccount": "स्वतः बाहरी सदस्य खाता बनाबी",
- "action-history": "पनà¥\8dनाà¤\95 à¤\87तिहास मिà¤\9cà¥\8dà¤\9dर à¤\95री",
+ "action-history": "à¤\88 पà¥\83षà¥\8dठà¤\95 à¤\87तिहास दà¥\87à¤\96ी",
"action-minoredit": "ऐ सम्पादनके मामूली कही",
"action-move": "ई पृष्ठके स्थानान्तरित करी",
"action-move-subpages": "ई पन्ना आ एकर उपपन्नाके स्थानान्तरित करी",
"action-rollback": "कृपा कऽ अन्तिम प्रयोक्ताक सम्पादनकेँ प्रत्यावर्तित करू जे एक खास पन्नाकेँ सम्पादित केलन्हि",
"action-import": "ऐ पन्नाकेँ दोसर विकीसँ आनू",
"action-importupload": "ऐ पन्नाकेँ संचिका उपारोपणसँ आनू",
- "action-patrol": "दà¥\8bसराà¤\95 समà¥\8dपादनà¤\95à¥\87à¤\81 सà¤\82à¤\9aालित दà¥\87à¤\96ाà¤\89",
- "action-autopatrol": "अपन सम्पादनकेँ संचालित देखाउ",
+ "action-patrol": "à¤\85नà¥\8dय सदसà¥\8dयसà¤à¤\95 समà¥\8dपादन परà¥\80à¤\95à¥\8dषित à¤\95रà¥\80",
+ "action-autopatrol": "अपन सम्पादन स्वचालित रूपसँ परीक्षित करी",
"action-unwatchedpages": "बिना संचालित पन्ना सभक सूचीकेँ देखू",
- "action-mergehistory": "पनà¥\8dनाà¤\95 à¤\87तिहासà¤\95à¥\87à¤\81 मिà¤\9cà¥\8dà¤\9dर à¤\95रà¥\82",
+ "action-mergehistory": "à¤\88 पà¥\83षà¥\8dठà¤\95 à¤\87तिहास à¤\8fà¤\95तà¥\8dरित à¤\95रà¥\80",
"action-userrights": "सभटा प्रयोक्ता अधिकारकेँ सम्पादित करू",
"action-userrights-interwiki": "दोसर विकीपर प्रयोक्ताक प्रयोक्ता अधिकारक सम्पादन करू",
"action-siteadmin": "दत्तनिधिकेँ प्रतिबन्धित करू आ फेर प्रतिबन्ध हटाउ",
"action-editmywatchlist": "काँच साकांक्षसूची संपादित करू",
"action-viewmywatchlist": "अपन काँच साकांक्षसूची देखु",
"action-viewmyprivateinfo": "अपन व्यक्तिगत जानकारी देखु",
- "action-editmyprivateinfo": "à¤\85पन वà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\9cानà¤\95ारà¥\80 समà¥\8dपादित à¤\95रà¥\81",
+ "action-editmyprivateinfo": "à¤\85पन वà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\9cानà¤\95ारà¥\80 समà¥\8dपादित à¤\95रà¥\80",
"action-editcontentmodel": "एक पन्ना के सामग्री मॉडल कें सम्पादन।",
"action-managechangetags": "ट्याग बनाबी आ सक्षम (असक्षम) करी",
"action-applychangetags": "आहाँ के बदलाव के साथ टैग जोडू।",
"enhancedrc-history": "इतिहास",
"recentchanges": "लगक परिवर्तनसभ",
"recentchanges-legend": "नव परिवर्तन सम्बन्धी विकल्प",
- "recentchanges-summary": "à¤\88 पनà¥\8dनापर विà¤\95à¥\80मà¥\87 à¤à¥\87ल सठसà¤\81 à¤\85दà¥\8dयतन परिवरà¥\8dतनपर नà¤\9cरि राà¤\96à¥\80।",
+ "recentchanges-summary": "à¤\88 विà¤\95िमà¥\87 à¤à¥\87ल सनà¥\8dनिà¤\95à¤\9f परिवरà¥\8dतन à¤\88 पà¥\83षà¥\8dठपर दà¥\87à¤\96ल à¤\9cा सà¤\95à¥\88त à¤\85à¤\9bि।",
"recentchanges-noresult": "इ अवधिके दौरान इ मापदंडके पूर्ण करेत समय कोनो परिवर्तन नै केएल गेल अछि।",
"recentchanges-feed-description": "ई सूचना-तंत्रांशमे विकीमे भेल सभसँ लगक परिवर्तन ताकी।",
"recentchanges-label-newpage": "ई सम्पादन एकटा नव पन्नाक निर्माण केलक।",
"recentchanges-label-minor": "ई एकटा लघु सम्पादन छी",
"recentchanges-label-bot": "ई सम्पादन यान्त्रिक छल।",
- "recentchanges-label-unpatrolled": "à¤\90 समà¥\8dपादनà¤\95 पà¥\81नरà¥\80à¤\95à¥\8dषण à¤\85à¤\96न धरि नà¥\88 à¤\95à¤\8fल à¤\97à¥\87ल à¤\85à¤\9bि।",
+ "recentchanges-label-unpatrolled": "à¤\88 समà¥\8dपादन à¤\85à¤\96न à¤\9cाà¤\81à¤\9aल नà¥\88 à¤\97à¥\87ल à¤\85à¤\9bि",
"recentchanges-label-plusminus": "पन्ना आकार ई बाइट सङ्ख्या सँ बदलल गेल",
"recentchanges-legend-heading": "<strong>कुञ्जी:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नव पन्नसभक सूची]] सेहो देखी)",
"upload-permitted": "अनुमतित फाइल {{PLURAL:$2|प्रकार}}: $1।",
"upload-preferred": "पसन्दिदा फाइल {{PLURAL:$2|प्रकार|प्रकारसभ}}: $1।",
"upload-prohibited": "प्रतिबन्धित सञ्चिका {{PLURAL:$2|प्रकार|प्रकारसभ}}:$1 ।",
- "uploadlogpage": "à¤\89पारà¥\8bपण वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "uploadlogpage": "à¤\89पारà¥\8bपण लà¥\8cà¤\97",
"uploadlogpagetext": "नीचाँ अद्यतन सञ्चिका उपारोपणक वर्णन अछि।\nदेखी [[Special:NewFiles|नव सञ्चिकाक बखारी]] बेसी स्पष्ट समुच्चा दृश्य लेल।",
"filename": "सञ्चिका नाम",
"filedesc": "संक्षेप",
"mimetype": "माइम प्रकार:",
"download": "अवारोपन",
"unwatchedpages": "बिन ध्यान देल पन्ना",
- "listredirects": "रसà¥\8dता बदलà¥\87नक सूची",
+ "listredirects": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शनसà¤क सूची",
"listduplicatedfiles": "डुप्लिकेट के साथ फाइलसभ के सूची।",
"listduplicatedfiles-entry": "[[:File:$1|$1]] राखैत अछि [[$3|{{PLURAL:$2|एक प्रतिलिपि|$2 duplicates}}]] ।",
"unusedtemplates": "बिना प्रयोगक नमूना सभ",
"unusedtemplateswlh": "दोसर लागि सभ",
"randompage": "अव्यवस्थित पृष्ठ",
"randompage-nopages": "ऐमे दोसर पन्ना नै अछि {{PLURAL:$2|namespace|namespaces}}: $1 ।",
- "randomincategory": "श्रेणी में यादृच्छिक (रैंडम) पन्ना",
+ "randomincategory": "श्रेणीमे यादृच्छिक पृष्ठ",
"randomincategory-invalidcategory": "\"$1\" एक मान्य श्रेणी नाम नै अछि।",
"randomincategory-nopages": "[[:Category:$1|$1]] श्रेणीमे कोनो पृष्ठ नै अछि।",
"randomincategory-category": "श्रेणी:",
"randomincategory-legend": "श्रेणीमे यादृच्छिक पृष्ठ",
"randomincategory-submit": "जाए",
- "randomredirect": "मिà¤\9cà¥\8dà¤\9dर बदलà¥\87नबला लाà¤\97ि",
+ "randomredirect": "à¤\95à¥\8bनà¥\8b à¤\8fà¤\95 पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन पर à¤\9cाà¤\8f",
"randomredirect-nopages": "नामस्थान \"$1\" मे कोनो बदलेनबला लागि नै अछि।",
"statistics": "सांख्यिकी",
"statistics-header-pages": "पन्नाक तथ्याङ्क",
"double-redirect-fixed-move": "[[$1]] घसकाएल गेल।\nई आब [[$2]] दिस जा रहल अछि।",
"double-redirect-fixed-maintenance": "द्वितीयक बदलेन [[$1]] सँ [[$2]] कएल गेल।",
"double-redirect-fixer": "बदलेन स्थायित्व",
- "brokenredirects": "à¤\9fà¥\82à¤\9fल बदलà¥\87न सà¤",
+ "brokenredirects": "तà¥\81à¤\9fल पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन पà¥\83षà¥\8dठ",
"brokenredirectstext": "ई बदलेन सभ नै अवस्थित पन्ना सभक दिस जाइत अछि।",
"brokenredirects-edit": "सम्पादन करी",
"brokenredirects-delete": "मेटाबी",
"prefixindex": "उपसर्गक संग सभटा पृष्ठ",
"prefixindex-namespace": "उपसर्ग भएल सभ पृष्ठ ($1 नामस्थान)",
"prefixindex-strip": "सूची में उपसर्ग नुकाउ",
- "shortpages": "पनà¥\8dना सठà¤\9bाà¤\81à¤\9fà¥\82",
+ "shortpages": "à¤\9bà¥\8bà¤\9f पà¥\83षà¥\8dठसà¤",
"longpages": "नमगर पन्ना सभ",
"deadendpages": "एकदमसँ अन्त भऽ जाएबला पन्ना सभ",
"deadendpagestext": "ई पन्ना सभ {{SITENAME}} क दोसर पन्नासँ लागिमे नै रहत।",
"speciallogtitlelabel": "प्रयोजन (शीर्षक अथवा {{ns:user}}:प्रयोगकर्तानाम):",
"log": "लौग",
"logeventslist-submit": "देखाबी",
- "all-logs-page": "सठसारà¥\8dवà¤\9cनिà¤\95 वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "all-logs-page": "सठसारà¥\8dवà¤\9cनिà¤\95 लà¥\8cà¤\97",
"alllogstext": "{{अन्तर्जाल}} क सभटा उपलब्ध वृत्तलेखक संयुक्त दृश्य।\nअहाँ दृश्यकेँ संकीर्ण करबा लेल वृत्तलेखक एकटा प्रकार चुनि सकै छी, प्रयोक्तानाम (ब्रह्मक्षर-लघ्वक्षर विचारणीय), वा प्रभावित पन्ना (एतौ ब्रह्मक्षर-लघ्वक्षर विचारणीय)।",
"logempty": "वृत्तलेखमे कोनो मेल खाइबला बौस्तु नै।",
"log-title-wildcard": "खोज शीर्षक सभ ऐ पाठसँ प्रारम्भ",
"listusers-submit": "देखाबी",
"listusers-noresult": "कोनो प्रयोक्ता नै",
"listusers-blocked": "(प्रतिबन्धित)",
- "activeusers": "सक्रिय प्रयोक्ता सभक सूची",
+ "activeusers": "सक्रिय प्रयोक्तासभक सूची",
"activeusers-intro": "ई ओहेन प्रयोक्ता सभक सूची अछि जे पछिला $1 {{PLURAL:$1|दिन|दिन}} मे किछु सक्रियता देखेने छथि।",
"activeusers-count": "$1 {{PLURAL:$1|कार्य}} पिछला $3 {{PLURAL:$3|दिन|दिनसभ}}मे",
"activeusers-from": "प्रयोक्ता प्रदर्शन प्रारम्भ भेल:",
"listgrants-summary": "ई प्रदान केल गेल सूची छी। सदस्य अपन खाताक अनुपयोगक द्वारा उपयोग करि सकैत अछि, मुदा मात्र किछ सीमित अधिकार धरि। ई अधिकार सदस्यद्वारा देल गेल अधिकार धरि सीमित रहैत अछि । एतय [[{{MediaWiki:Listgrouprights-helppage}}|अन्य जानकारी]] सेहो अछि, जे एक अधिकारक बारेमे बताबैत अछि।",
"listgrants-grant": "अधिकार",
"listgrants-rights": "अधिकार",
- "trackingcategories": "शà¥\8dरà¥\87णà¥\80à¤\95à¥\87 à¤\9fà¥\8dरयाà¤\95 à¤\95रà¥\81",
+ "trackingcategories": "à¤\9aिहà¥\8dनित शà¥\8dरà¥\87णà¥\80सà¤",
"trackingcategories-summary": "ई पृष्ठ पर ओ जोडवाला श्रेणीसभक सूची मिलैत अछि जे स्वतः रूप सँ मिडियाविकि सफ्टवेयरद्वारा बनैत अछि। ओ सभक नाम सम्बन्धित प्रणाली सन्देस बदलै सँ {{ns:8}} नामस्थानमे बदलल जा सकैत अछि।",
"trackingcategories-msg": "चिह्नित श्रेणी",
"trackingcategories-name": "सन्देश नाम",
"actioncomplete": "क्रिया पूर्ण",
"actionfailed": "कार्य नै भेल",
"deletedtext": "\"$1\" केँ मेटा देल गेल अछि।\nदेखू $2 हालक मेटाएल सामिग्रीक अभिलेख लेल।",
- "dellogpage": "मà¥\87à¤\9fाà¤\8fल सामिà¤\97à¥\8dरà¥\80à¤\95 वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "dellogpage": "मà¥\87à¤\9fाà¤\8fल लà¥\8cà¤\97",
"dellogpagetext": "नीचाँ एकदम लगक मेटाएल पन्नाकऽ सूची छी।",
- "deletionlog": "मà¥\87à¤\9fाà¤\8fल सामिà¤\97à¥\8dरà¥\80à¤\95 वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "deletionlog": "मà¥\87à¤\9fाà¤\8fल लà¥\8cà¤\97",
"reverted": "पुरान कोनो संशोधन धरि घुराउ",
"deletecomment": "कारण:",
"deleteotherreason": "दोसर/ अतिरिक्त कारण:",
"undeletedpage": "'''$1 के पुनर्स्थापित करल गेल अछि'''\n\nलग पास में हटाओल गेल आ पुनर्स्थापित कएल गेल पन्ना सभके जानकारी के लेल [[Special:Log/delete|हटाओल गेल लग]] देखु।",
"undelete-header": "हालक मेटाएल पन्ना के लेल [[Special:Log/delete|हटाएल लग]] देखू।",
"undelete-search-title": "मेटाएल गेल पृष्ठ ताकी",
- "undelete-search-box": "मेटाएल पन्ना सभकेँ ताकू",
+ "undelete-search-box": "मेटाएल पन्नासभ ताकी",
"undelete-search-prefix": "से शुरु भेल पन्ना देखाबू.",
"undelete-search-submit": "ताकू",
"undelete-no-results": "एहेन पन्ना मेटाएल पेटारमे नै भेटल।",
"sp-contributions-newbies": "मात्र नव खाताक योगदान देखाबी",
"sp-contributions-newbies-sub": "नब प्रयोक्ताकऽ लेल",
"sp-contributions-newbies-title": "नब प्रयोक्ताकऽ योगदान",
- "sp-contributions-blocklog": "पà¥\8dरतिबनà¥\8dधित वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "sp-contributions-blocklog": "पà¥\8dरतिबनà¥\8dधित लà¥\8cà¤\97",
"sp-contributions-suppresslog": "{{GENDER:$1|प्रयोगकर्ता}} योगदान दबाबी",
"sp-contributions-deleted": "{{GENDER:$1|प्रयोगकर्ता}}क मेटाएल योगदान",
"sp-contributions-uploads": "उपारोपण",
- "sp-contributions-logs": "वà¥\83तà¥\8dतलà¥\87à¤\96 सà¤",
+ "sp-contributions-logs": "लà¥\8cà¤\97",
"sp-contributions-talk": "वार्त्ता",
"sp-contributions-userrights": "प्रयोक्ता अधिकारकऽ प्रबन्धन",
"sp-contributions-blocked-notice": "ई प्रयोक्ता अखन प्रतिबन्धित अछि।\nनव प्रतिबन्धित वृत्तलेख लेख सन्दर्भ नीचाँ देल अछि:",
"contribslink": "योगदान",
"emaillink": "ई-पत्र पठाउ",
"autoblocker": "अहाँक अनिकेत \"[[User:$1|$1]]\" द्वारा प्रयोगक कारण स्वचालित रूपेँ प्रतिबन्धित भऽ गेल।\n$1 एकर प्रतिबन्धक कारण अछि : \"$2\"",
- "blocklogpage": "पà¥\8dरतिबनà¥\8dधित वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "blocklogpage": "पà¥\8dरतिबनà¥\8dधित लà¥\8cà¤\97",
"blocklog-showlog": "ऐ प्रयोक्ताकेँ पहिनहिये प्रतिबन्धित कऽ देल गेल अछि।\nप्रतिबन्धक वृत्तलेख सन्दर्भ लेल नीचाँ देल जा रहल अछि:",
"blocklog-showsuppresslog": "ऐ प्रयोक्ताकेँ पहिनहिये प्रतिबन्धित आ अदृश्य कऽ देल गेल अछि।\nदबाएल वृत्तलेख सन्दर्भ लेल नीचाँ देल जा रहल अछि:",
"blocklogentry": "प्रतिबन्धित [[$1]] एकर अन्तिम तिथि अछि $2 $3",
"movepage-page-moved": "पन्ना $1 केँ $2 लग घसका देल गेल अछि।",
"movepage-page-unmoved": "पन्ना $1 केँ $2 लग नै घसकाएल जा सकैए।",
"movepage-max-pages": "बेसी सें बेसी $1 पृष्ठ बदलि के {{PLURAL:$1| क देल गेल अछि|क देल गेल अछि}}, आब आर पृष्ठ अपने आप नहि बदलत.",
- "movelogpage": "स्थानान्तरण लग",
+ "movelogpage": "सà¥\8dथानानà¥\8dतरण लà¥\8cà¤\97",
"movelogpagetext": "नाम बदलल गेल लेख कऽ सूचि नीचां देल गेल अछि",
"movesubpage": "{{PLURAL:$1|उप पन्ना|उप पन्ना}}",
"movesubpagetext": "नीचां $1 {{PLURAL:$1| पन्ना देखाओल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि|पन्ना देखावोल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि}}।",
"allmessages-prefix": "उपसर्गक आधारपर छाँटू:",
"allmessages-language": "भाषा:",
"allmessages-filter-submit": "चलू",
- "allmessages-filter-translate": "à¤\85नà¥\81वाद à¤\95रà¥\81",
+ "allmessages-filter-translate": "à¤\85नà¥\81वाद à¤\95रà¥\80",
"thumbnail-more": "पैग",
"filemissing": "संचिका हेराएल",
"thumbnail_error": "लघुचित्र निर्माण कालमे भ्रम:$1",
"markedaspatrollederror-noautopatrol": "अहाँ अपन कएल संशोधनकेँ संचालित नै कहि सकै छी।",
"markedaspatrollednotify": "$1 पृष्ठ में कएल गएल ऐ परिवर्तन जाँचल गेल चिन्हासी कएल गेल।",
"markedaspatrollederrornotify": "जाँचल चिन्हासी असफल भेल।",
- "patrol-log-page": "सà¤\82à¤\9aालन वà¥\83तà¥\8dतलà¥\87à¤\96",
- "patrol-log-header": "à¤\88 सà¤\82à¤\9aालित सà¤\82शà¥\8bधन सà¤à¤\95 वà¥\83तà¥\8dतलà¥\87à¤\96 छी।",
- "log-show-hide-patrol": "$1 निरà¥\80à¤\95à¥\8dषण वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "patrol-log-page": "परà¥\80à¤\95à¥\8dषण लà¥\8cà¤\97",
+ "patrol-log-header": "à¤\88 परà¥\80à¤\95à¥\8dषित à¤\85वतरणसà¤à¤\95 लà¥\8cà¤\97 छी।",
+ "log-show-hide-patrol": "$1 निरà¥\80à¤\95à¥\8dषण लà¥\8cà¤\97",
"log-show-hide-tag": "$1 ट्याग लग",
"deletedrevision": "पुरान संशोधन $1 हटा देलौं",
"filedeleteerror-short": "संचिका मेटेबामे भ्रम : $1",
"exif-orientation-1": "सामान्य",
"exif-orientation-2": "अनुदैर्घ्य मिज्झर",
"exif-orientation-3": "180° पर घुमायल गेल",
- "exif-orientation-4": "à¤\85नà¥\81पà¥\8dरसà¥\8dथ मिà¤\9cà¥\8dà¤\9dर",
+ "exif-orientation-4": "à¤à¤°à¥\8dà¤\9fिà¤\95लà¥\80 फà¥\8dलिप à¤\95रà¥\80",
"exif-orientation-5": "90° सी.सी.डब्लू. घुमाओल गेल आ अनुप्रस्थ रूपेँ मिज्झर कएल गेल",
"exif-orientation-6": "९०° सी.सी.डब्लू. घुमाएल गेल",
"exif-orientation-7": "९०° सी.डब्लू. घुमाओल गेल आ अनुप्रस्थ रूपेँ मिज्झर कएल गेल",
"exif-customrendered-0": "सामान्य प्रक्रिया",
"exif-customrendered-1": "वैकल्पिक प्रक्रिया",
"exif-exposuremode-0": "स्वयं देखबैत",
- "exif-exposuremode-1": "सà¤\82à¤\9aालित दà¥\87à¤\96ाà¤\8fब",
+ "exif-exposuremode-1": "मà¥\88नà¥\8dयà¥\81à¤\85ल à¤\8fà¤\95à¥\8dपà¥\8bà¤\9cर",
"exif-exposuremode-2": "स्वचालित कोष्ठक",
"exif-whitebalance-0": "स्वचालित उज्जर सन्तुलन",
"exif-whitebalance-1": "संचालित उज्जर सन्तुलन",
"watchlistedit-raw-added": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} जोड़ल गेल:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} हटाएल गेल:",
"watchlistedit-clear-title": "ध्यानसूची खाली करी",
- "watchlistedit-clear-legend": "साà¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80 मà¥\87à¤\9fाà¤\89",
+ "watchlistedit-clear-legend": "साà¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80 मà¥\87à¤\9fाबà¥\80",
"watchlistedit-clear-explain": "एही ठाम रहल सभ शिर्षक अहाँक साकांक्ष-सूची से मेटा जाएत",
"watchlistedit-clear-titles": "शीर्षक",
"watchlistedit-clear-submit": "साकांक्ष-सूची मेटाउ (ई स्थायी छि!)",
"watchlistedit-clear-done": "अहाँक साकांक्ष-सूची मेटाओल गेल।",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} हटाएल गेल:",
- "watchlistedit-too-many": "à¤\8fतà¥\87à¤\95 बहà¥\81त रास पनà¥\8dना सठदà¥\87à¤\96ावà¥\8bल à¤\9cाà¤\8fत।",
- "watchlisttools-clear": "साà¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80 मà¥\87à¤\9fाà¤\89",
+ "watchlistedit-too-many": "à¤\8fतय दरà¥\8dशावà¥\88à¤\95 लà¥\87ल à¤\85तà¥\8dयधिà¤\95 पà¥\83षà¥\8dठà¤\85à¤\9bि।",
+ "watchlisttools-clear": "साà¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80 मà¥\87à¤\9fाबà¥\80",
"watchlisttools-view": "सम्बन्धित परिवर्तन सभकेँ देखी",
"watchlisttools-edit": "साकांक्षसूची देखी आ सम्पादित करी",
"watchlisttools-raw": "काँच साकांक्षसूची सम्पादित करी",
"specialpages-group-maintenance": "सुस्थापन प्रतिवेदन",
"specialpages-group-other": "दोसर विशेष पन्ना",
"specialpages-group-login": "सम्प्रवेश/ सम्प्रवेश आवेदन",
- "specialpages-group-changes": "हालà¤\95 परिवरà¥\8dतन à¤\86 वà¥\83तà¥\8dतलà¥\87à¤\96",
+ "specialpages-group-changes": "सनà¥\8dनिà¤\95à¤\9f परिवरà¥\8dतन à¤\86 लà¥\8cà¤\97",
"specialpages-group-media": "मीडिया प्रतिवेदन आ उपारोपण",
"specialpages-group-users": "प्रयोक्ता आ अधिकार",
- "specialpages-group-highuse": "बà¥\87सà¥\80 पà¥\8dरयà¥\8bà¤\97बला पनà¥\8dना सà¤",
+ "specialpages-group-highuse": "à¤\85तà¥\8dयधिà¤\95 à¤\89पयà¥\8bà¤\97à¥\80 पà¥\83षà¥\8dठ",
"specialpages-group-pages": "पन्ना सभक सूची",
"specialpages-group-pagetools": "पन्नाक औजार सभ",
"specialpages-group-wiki": "विकी दत्तांश आ औजार सभ",
"tags-title": "चेन्ह सभ",
"tags-intro": "ई पन्ना चेन्ह सभकेँ सूचित करैए जे तंत्रांश सम्पादनसँ चिन्हित करए, आ ओकर अर्थ सेहो।",
"tags-tag": "चेन्हक नाम",
- "tags-display-header": "परिवरà¥\8dतन सà¥\82à¤\9aà¥\80 सà¤à¤\95 रà¥\82परà¤\82à¤\97",
+ "tags-display-header": "परिवरà¥\8dतन सà¥\82à¤\9aिसà¤à¤®à¥\87 पà¥\8dरदरà¥\8dशन",
"tags-description-header": "अर्थक पूर्ण विवरण",
"tags-source-header": "स्रोत",
"tags-active-header": "सक्रिय?",
"tags-edit-title": "ट्याग सम्पादन",
"tags-edit-manage-link": "ट्याग व्यवस्थापन",
"tags-edit-revision-selected": "[[:$2]] {{PLURAL:$1|क|के}} चयनित अवतरण:",
- "tags-edit-logentry-selected": "{{PLURAL:$1|à¤\9aà¥\81नल वà¥\83तà¥\8dतलà¥\87à¤\96 à¤\98à¤\9fना|à¤\9aà¥\81नल वà¥\83तà¥\8dतलà¥\87à¤\96 à¤\98à¤\9fना सभ}}:",
+ "tags-edit-logentry-selected": "{{PLURAL:$1|à¤\9aà¥\81नल लà¥\8cà¤\97 à¤\98à¤\9fना|à¤\9aà¥\81नल लà¥\8cà¤\97 à¤\98à¤\9fनासभ}}:",
"tags-edit-existing-tags-none": "<em>कोनो नै</em>",
"tags-edit-new-tags": "नव ट्याग:",
"tags-edit-add": "इ ट्यागसभ जोडी:",
"htmlform-cloner-delete": "हटाउ",
"logentry-delete-delete": "$1 पृष्ठ $3 {{GENDER:$2|मेटौलक}}",
"logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
- "logentry-delete-event": "$1 {{GENDER:$2|changed}} एकर दृश्य{{PLURAL:$5| एकटा वृत्तलेख|$5 वृत्तलेख}} $3: $4 केँ",
+ "logentry-delete-event": "$1द्वारा $3 पृष्ठक लौग {{PLURAL:$5|प्रविष्टि|प्रविष्टिसभ}}क दृश्यता {{GENDER:$2|परिवर्तित केलक}}: $4",
"logentry-delete-revision": "$1 द्वारा $3 पृष्ठक {{PLURAL:$5|एक अवतरण|$5 अवतरणसभ}}क दृश्यता {{GENDER:$2|परिवर्तित}}: $4",
- "logentry-delete-event-legacy": "$1 {{GENDER:$2|changed}} $3 पर वृत्तलेख दृश्य",
- "logentry-delete-revision-legacy": "$1 {{GENDER:$2|changed}} $3 पर वृत्तलेख संशोधन",
+ "logentry-delete-event-legacy": "$1द्वारा $3 पृष्ठ पर लौग क्रियासभक दृश्यता {{GENDER:$2|परिवर्तित केलक}}",
+ "logentry-delete-revision-legacy": "$1द्वारा $3 पृष्ठ पर अवतरणसभक दृश्यता {{GENDER:$2|परिवर्तित केलक}}",
"logentry-suppress-delete": "$1 {{GENDER:$2|दबाएल}} page $3",
"logentry-suppress-event": "$1 चोरिसँ {{GENDER:$2|परिवर्तन कियल गैल}} एकर दृश्य{{PLURAL:$5| एकटा वृत्तलेख|$5 वृत्तलेख}} $3: $4 पर",
"logentry-suppress-revision": "$1 चोरिसँ {{GENDER:$2|changed}} एकर दृश्य{{PLURAL:$5| एकटा संशोधन|$5 संशोधन}} $3: $4 पर",
- "logentry-suppress-event-legacy": "$1 नुका क {{GENDER:$2|परिवर्तन}} $3 पर वृत्तलेख दृश्य",
+ "logentry-suppress-event-legacy": "$1द्वारा गुप्त रूपसँ $3 पृष्ठ पर लौग क्रियासभक दृश्यता {{GENDER:$2|परिवर्तित केलक}}",
"logentry-suppress-revision-legacy": "$1 नुका कऽ {{GENDER:$2|changed}} $3 पर संशोधन दृश्य",
"revdelete-content-hid": "सामिग्री नुकाएल",
"revdelete-summary-hid": "नुकाएल सारांश सम्पादन",
"feedback-back": "पाछां",
"feedback-bugcheck": "बहुत निक! जांच करु कि [ $1 known bugs] पहिले स त नै अछि ।",
"feedback-bugnew": "हम जाँच केलौ। एक नव बग रिपोर्ट करी",
- "feedback-cancel": "रदà¥\8dद à¤\95रà¥\81",
+ "feedback-cancel": "रदà¥\8dद à¤\95रà¥\80",
"feedback-close": "भ गेल",
"feedback-error-title": "त्रुटि",
"feedback-error1": "त्रुटि: नै पहचानल गेल परिणाम एपीआईसँ",
"upload-dialog-disabled": "Подигањето на податотеки со помош на овој дијалог е оневозможено на ова вики.",
"upload-dialog-title": "Подигни податотека",
"upload-dialog-button-cancel": "Откажи",
+ "upload-dialog-button-back": "Назад",
"upload-dialog-button-done": "Готово",
"upload-dialog-button-save": "Зачувај",
"upload-dialog-button-upload": "Подигни",
"htmlform-cloner-create": "Додај уште",
"htmlform-cloner-delete": "Отстрани",
"htmlform-cloner-required": "Се бара барем една вредност.",
+ "htmlform-date-placeholder": "ГГГГ-ММ-ДД",
+ "htmlform-time-placeholder": "ЧЧ:ММ:СС",
+ "htmlform-datetime-placeholder": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
+ "htmlform-date-invalid": "Не можам да ја препознаам внесената вредност. Користете го форматот ГГГГ-ММ-ДД.",
+ "htmlform-time-invalid": "Не можам да ја препознаам внесената вредност за време. Користете го форматот ЧЧ:ММ:СС.",
+ "htmlform-datetime-invalid": "Не можам да ја препознаам внесената вредност за датум и време. Користете го форматот ГГГГ-ММ-ДД ММ:СС.",
+ "htmlform-date-toolow": "Укажаната вредност е пред најраниот допуштен датум — $1.",
+ "htmlform-date-toohigh": "Укажаната вредност е по најдоцниот допуштен датум — $1.",
+ "htmlform-time-toolow": "Укажаната вредност е пред најраното допуштено време — $1.",
+ "htmlform-time-toohigh": "Укажаната вредност е по најдоцното допуштено време — $1.",
+ "htmlform-datetime-toolow": "Укажаната вредност е пред најраниот допуштен датум и време — $1.",
+ "htmlform-datetime-toohigh": "Укажаната вредност е по најдоцниот допуштен датум и време — $1.",
"htmlform-title-badnamespace": "[[:$1]] не се наоѓа во именскиот простор „{{ns:$2}}“.",
"htmlform-title-not-creatable": "Насловот „$1“ не може да се создава",
"htmlform-title-not-exists": "$1 не постои.",
"tog-enotifminoredits": "मला पानांच्या आणि संचिकांच्या छोट्या बदलांकरीता सुद्धा विरोप पाठवा",
"tog-enotifrevealaddr": "सूचना विरोपात माझा विरोपाचा (ई-मेल ) पत्ता दाखवा",
"tog-shownumberswatching": "पहारा देणाऱ्या सदस्यांचा आकडा दाखवा",
- "tog-oldsig": "सध्याची सही:",
+ "tog-oldsig": "à¤\86पलà¥\80 सधà¥\8dयाà¤\9aà¥\80 सहà¥\80:",
"tog-fancysig": "सही विकिसंज्ञा म्हणून वापरा (आपोआप दुव्याशिवाय)",
"tog-uselivepreview": "सजीव झलक दाखवा",
"tog-forceeditsummary": "जर ’बदलांचा आढावा’ दिला नसेल तर मला सूचित करा",
"tog-showhiddencats": "लपविलेले वर्ग दाखवा",
"tog-norollbackdiff": "द्रुतमाघार घेतल्यास बदल वगळा",
"tog-useeditwarning": "जर मी संपादित करीत असलेल्या पानावरील माझे संपादिलेले बदल जतन न केल्यास मला इशारा द्या",
- "tog-prefershttps": "सनोंद प्रवेशतांना प्रत्येक वेळी सुरक्षित अनुबंध वापरा",
+ "tog-prefershttps": "सनà¥\8bà¤\82द पà¥\8dरवà¥\87शित à¤\85सताà¤\82ना पà¥\8dरतà¥\8dयà¥\87à¤\95 वà¥\87ळà¥\80 सà¥\81रà¤\95à¥\8dषित à¤\85नà¥\81बà¤\82ध वापरा",
"underline-always": "नेहमी",
"underline-never": "कधीच नाही",
"underline-default": "त्वचा अथवा न्याहाळक अविचल (स्कीन अथवा ब्राऊजर डिफॉल्ट)",
"category-file-count-limited": "खालील {{PLURAL:$1|संचिका|$1 संचिका}} या वर्गात आहेत.",
"listingcontinuesabbrev": "पुढे चला",
"index-category": "अनुक्रमित पाने",
- "noindex-category": "à¤\85नà¥\81à¤\95à¥\8dरम नसलà¥\87लà¥\80 पाने",
+ "noindex-category": "विना-à¤\85नà¥\81à¤\95à¥\8dरमित पाने",
"broken-file-category": "तुटलेल्या संचिका दुव्यांसह असलेली पाने",
"about": "च्या विषयी",
"article": "आशयाचे पान",
"newwindow": "(नवीन खिडकीत उघडते.)",
"cancel": "रद्द करा",
"moredotdotdot": "अजून...",
- "morenotlisted": "हà¥\80 यादà¥\80 पà¥\82रà¥\8dण नाहà¥\80.",
+ "morenotlisted": "हà¥\80 यादà¥\80 à¤\85पà¥\82रà¥\8dण à¤\85सà¥\82 शà¤\95तà¥\87.",
"mypage": "पान",
"mytalk": "चर्चा",
"anontalk": "चर्चा पान",
"talk": "चर्चा",
"views": "दृष्ये",
"toolbox": "साधने",
+ "tool-link-emailuser": "{{GENDER:$1|सदस्याला}} विपत्र पाठवा",
"userpage": "सदस्य पृष्ठ",
"projectpage": "प्रकल्प पान पहा",
"imagepage": "संचिका पृष्ठ पहा",
"createacct-yourpasswordagain-ph": "पुन्हा परवलीचा शब्द टाका",
"userlogin-remembermypassword": "मला नोंदीकृतच(लॉग्ड-ईन) ठेवा",
"userlogin-signwithsecure": "सुरक्षित अनुबंध(सेक्युअर कनेक्शन) वापरा",
+ "cannotlogin-title": "सनोंद प्रवेश करु शकत नाही",
"cannotloginnow-title": "आता सनोंद प्रवेश घेऊ शकत नाही",
"cannotloginnow-text": "$1 वापरत असतांना सनोंद प्रवेश करणे शक्य नाही.",
"yourdomainname": "तुमचे क्षेत्र (डोमेन) :",
"eauthentsent": "नमूद केलेल्या ई-मेल पत्त्यावर एक निश्चितता स्वीकारक ई-मेल पाठविला गेला आहे.\nखात्यावर कोणताही इतर ई-मेल पाठविण्यापूर्वी - तो ई-मेल पत्ता तुमचाच आहे, हे सुनिश्चित करण्यासाठी - तुम्हाला त्या ई-मेल मधील सूचनांचे पालन करावे लागेल.",
"throttled-mailpassword": "मागील {{PLURAL:$1|तासात|$1 तासांत}} परवलीचा शब्द बदलण्यासाठीची सूचना विपत्राद्वारे पाठविलेली आहे. दुरुपयोग टाळण्यासाठी, {{PLURAL:$1|एका तासामध्ये|$1 तासांमध्ये}} फक्त एकदाच सूचना दिली जाईल.",
"mailerror": "विपत्र पाठवण्यात त्रुटी: $1",
- "acct_creation_throttle_hit": "à¤\86पला à¤\85à¤\82à¤\95पतà¥\8dता वापरà¥\81न या विà¤\95िस à¤à¥\87à¤\9f दà¥\87णाऱà¥\8dयाà¤\82नà¥\80 à¤\95ाल {{PLURAL:$1|१ à¤\96ातà¥\87|$1 à¤\96ातà¥\80}} à¤\89à¤\98डलà¥\80 à¤\86हà¥\87त तà¥\80 या à¤\95ालावधà¥\80तà¥\80ल महतà¥\8dतम à¤\86हà¥\87त.\n\nतà¥\8dयाà¤\9aा परिपाà¤\95 मà¥\8dहणà¥\82न सधà¥\8dया हा à¤\85à¤\82à¤\95पतà¥\8dता वापरà¥\81न à¤à¥\87à¤\9f दà¥\87णाऱà¥\8dयास अधिक खाते उघडता येणार नाहीत.",
+ "acct_creation_throttle_hit": "à¤\86पला à¤\85à¤\82à¤\95पतà¥\8dता वापरà¥\81न या विà¤\95िस à¤à¥\87à¤\9f दà¥\87णाऱà¥\8dयाà¤\82नà¥\80 माà¤\97à¥\80ल $2 मधà¥\8dयà¥\87 {{PLURAL:$1|१ à¤\96ातà¥\87|$1 à¤\96ातà¥\80}} à¤\89à¤\98डलà¥\80 à¤\86हà¥\87त तà¥\80 या à¤\95ालावधà¥\80तà¥\80ल महतà¥\8dतम à¤\86हà¥\87त.\n\nतà¥\8dयाà¤\9aा परिपाà¤\95 मà¥\8dहणà¥\82न सधà¥\8dया हा à¤\85à¤\82à¤\95पतà¥\8dता वापरà¥\81न à¤à¥\87à¤\9f दà¥\87णाऱà¥\8dयाला अधिक खाते उघडता येणार नाहीत.",
"emailauthenticated": "तुमचा विपत्रपत्ता $2 ला $3 यावेळी तपासण्यात आला आहे.",
"emailnotauthenticated": "तुमच्या ई-मेल पत्त्याची अद्याप निश्चिती झालेली नाही. खालील कोणत्याही फिचर्ससाठी ई-मेल पाठविला जाणार नाही.",
"noemailprefs": "खालील सुविधा कार्यान्वित करण्यासाठी,पसंतीक्रमात ई-मेल पत्ता नमूद करा.",
"botpasswords-label-resetpassword": "परवलीच्या शब्दाची पुनर्स्थापना करा",
"botpasswords-label-grants": "लागू अनुदाने:",
"botpasswords-help-grants": "प्रत्येक अनुदान हे सदस्य खात्यास आधीच असलेल्या यादीकृत सदस्य अधिकारास पोहोच देते.अधिक माहितीसाठी [[Special:ListGrants|अनुदानांचा तक्ता]] हे बघा.",
- "botpasswords-label-restrictions": "वापराचे प्रतिबंध:",
"botpasswords-label-grants-column": "मंजूर",
"botpasswords-bad-appid": "\"$1\" हे सांगकाम्याचे नाव वैध नाही.",
"botpasswords-insert-failed": "\"$1\" हे सांगकाम्याचे नाव जोडण्यात अयशस्वी. ते पूर्वीच जोडले होते काय?",
"upload-dialog-disabled": "हा डायलॉग वापरून या विकिवर संचिका अपभारण अक्षम केले आहे.",
"upload-dialog-title": "संचिकेचे अपभारण करा",
"upload-dialog-button-cancel": "रद्द करा",
+ "upload-dialog-button-back": "परत जा",
"upload-dialog-button-done": "झाले",
"upload-dialog-button-save": "जतन करा",
"upload-dialog-button-upload": "अपभारण करा",
"pageinfo-article-id": "पृष्ठ-परिचय",
"pageinfo-language": "पानाच्या मजकूराची भाषा",
"pageinfo-content-model": "पान आशय नमूना",
+ "pageinfo-content-model-change": "बदला",
"pageinfo-robot-policy": "यंत्रमानवाद्वारे अनुक्रमन",
"pageinfo-robot-index": "अनुमती दिली",
"pageinfo-robot-noindex": "अनुमती दिल्या जात नाही",
"htmlform-cloner-create": "अधिक जोडा",
"htmlform-cloner-delete": "हटवा",
"htmlform-cloner-required": "किमान एक किंमत हवी",
+ "htmlform-date-placeholder": "वववव-मम-दिदि",
+ "htmlform-time-placeholder": "ताता:मिमि:सेसे",
+ "htmlform-datetime-placeholder": "वववव-मम-दिदि ताता:मिमि:सेसे",
+ "htmlform-date-invalid": "आपण नमूद केलेली किंमत ही अनोळखी दिनांक आहे. वववव-मम-दिदि प्रारुपणाचा वापर करण्याबाबत विचार करा.",
+ "htmlform-time-invalid": "आपण नमूद केलेली किंमत ही अनोळखी आहे. ताता:मिमि:सेसे प्रारुपणाचा वापर करण्याबाबत विचार करा.",
+ "htmlform-datetime-invalid": "आपण नमूद केलेली किंमत ही अनोळखी दिनांक व वेळ आहे. वववव-मम-दिदि ताता:मिमि:सेसे प्रारुपणाचा वापर करण्याबाबत विचार करा.",
+ "htmlform-time-toohigh": "आपण नमूद केलेली किंमत ही $1च्या परवानगी असलेल्या वेळ मर्यादेबाहेर आहे.",
+ "htmlform-datetime-toohigh": "आपण नमूद केलेली किंमत ही $1च्या परवानगी असलेल्या दिनांक व वेळ मर्यादेबाहेर आहे.",
"htmlform-title-badnamespace": "[[:$1]] हे \"{{ns:$2}}\" नामविश्वात नाही.",
"htmlform-title-not-creatable": "\"$1\" हे पान तयार करण्यासाठीचे शीर्षक नाही",
"htmlform-title-not-exists": "$1 अस्तीत्वात नाही.",
"htmlform-user-not-exists": "<strong>$1</strong> अस्तीत्वात नाही.",
"htmlform-user-not-valid": "<strong>$1</strong> हे वैध सदस्यनाम नाही.",
- "sqlite-has-fts": "पूर्ण-मजकूर शोध समर्थनासहित $1",
- "sqlite-no-fts": "पूर्ण-मजकूर शोध समर्थनाविरहित $1",
"logentry-delete-delete": "$1 {{GENDER:$2|वगळलेले पान}} $3",
"logentry-delete-restore": "$1 {{GENDER:$2|पुनर्स्थापित पृष्ठ}} $3",
"logentry-delete-event": "$1 ने $3 वर{{PLURAL:$5|नोंद-प्रसंग|$5 नोंद प्रसंगांची}} दृष्यता{{GENDER:$2|बदलली}}:$4",
"아라",
"Fitoschido",
"Taresi",
- "Macofe"
+ "Macofe",
+ "Akapochtli"
]
},
"tog-underline": "Mokìnxòîkuilòtzàswis tzòwilistìn:",
"returnto": "Ximocuepa īhuīc $1.",
"tagline": "Īhuīcpa {{SITENAME}}",
"help": "Tēpalēhuiliztli",
- "search": "Mà motèmo",
+ "search": "Nican tictemoz",
"searchbutton": "Tictēmōz",
"go": "Xiyauh",
"searcharticle": "Xiyauh",
"unprotectthispage": "Xicpatla inīn tlaīxtli ītlapiyaliz",
"newpage": "Yancuic tlaīxtli",
"talkpage": "Xictlahto inīn tlaīxtli ītechcopa",
- "talkpagelinktext": "Nenônòtzalistli",
+ "talkpagelinktext": "Nenonotzaliztli",
"specialpage": "Nònkuâkìskàtlaìxtlapalli",
"personaltools": "In tlein nitēquitiltilia",
"articlepage": "Xiquitta in tlamantlaīxtli",
"userlogin-yourname": "Tequihuihcātōcāitl",
"yourpassword": "Motlahtōlichtacāyo",
"yourpasswordagain": "Motlahtōlichtacāyo occeppa",
- "remembermypassword": "Ticpiyāz motlacalaquiliz inīn chīuhpōhualhuazco (īxquich {{PLURAL:$1|tōnalli}})",
"yourdomainname": "Moāxcāyō",
"login": "Xicalaqui",
"nav-login-createaccount": "Ximocalaqui / ximomachiyōmaca",
"listusers": "Brukerliste",
"listusers-editsonly": "Vis bare brukere med redigeringer",
"listusers-creationsort": "Sorter etter opprettelsesdato",
- "listusers-desc": "Sorter i avtakende rekkefølge",
+ "listusers-desc": "Sorter i synkende rekkefølge",
"usereditcount": "{{PLURAL:$1|én redigering|$1 redigeringer}}",
"usercreated": "{{GENDER:$3|Opprettet}} $2 $1",
"newpages": "Nye sider",
"tog-showhiddencats": "Ozuta peitetyt kategouriet",
"tog-norollbackdiff": "Älä ozuta eroloi, konzu olet ottanuh järilleh aijemban versien järilleh tuondu -toimindol",
"tog-useeditwarning": "Ollen lähtemäs sivulpäi iäre tallendamattah muutoksii, huomaita minuu",
- "tog-prefershttps": "Käytä ainos suojattuu yhtevytty ku olet kirjutannuhes",
+ "tog-prefershttps": "Käytä ainos suojattuu yhtevytty, ku olet kirjutannuhes",
"underline-always": "Ainos",
"underline-never": "Nikonzu",
"underline-default": "Käytä livaimen piäazetuksii",
"minoredit": "Tämä on pieni kohendus",
"watchthis": "Tarkaile tädä sivuu",
"savearticle": "Tallenda sivu",
+ "savechanges": "Tallenda muutokset",
"preview": "Ezikačo",
"showpreview": "Ezikačo",
"showdiff": "Luajitut kohendukset",
"content-model-text": "perustekstu",
"content-model-javascript": "JavaScript",
"content-json-empty-object": "Tyhjy objektu",
- "cantcreateaccounttitle": "Ei voi luadie tunnustu",
"cantcreateaccount-text": "Tunnuksien luadimine täs IP-adressaspäi ('''$1''') on estetty. Estäjänny on [[User:$3|$3]].\n\nKäyttäjän $3 annettu syy on ''$2''",
"cantcreateaccount-range-text": "Tunnuksien luadimine IP-adressilois adressualovehel <strong>$1</strong>, kuduah kuuluu sinungi käytetty IP-adressu(<strong>$4</strong>), on estetty. Eston on azetannuh [[User:$3|$3]].\n\nKäyttäjän $3 annettu syy estole on \"$2\".",
"viewpagelogs": "Ozuta tämän sivun lougat",
"upload-dialog-disabled": "Przesyłanie plików przy pomocy tego okna jest wyłączone na tej wiki.",
"upload-dialog-title": "Prześlij plik",
"upload-dialog-button-cancel": "Anuluj",
+ "upload-dialog-button-back": "Wstecz",
"upload-dialog-button-done": "Gotowe",
"upload-dialog-button-save": "Zapisz",
"upload-dialog-button-upload": "Prześlij",
"htmlform-cloner-create": "Dodaj więcej",
"htmlform-cloner-delete": "Usuń",
"htmlform-cloner-required": "Wymagana jest co najmniej jedna wartość.",
+ "htmlform-date-placeholder": "RRRR-MM-DD",
"htmlform-title-badnamespace": "[[:$1]] nie znajduje się w przestrzeni nazw „{{ns:$2}}”.",
"htmlform-title-not-creatable": "Nie można użyć „$1” do utworzenia tytułu strony",
"htmlform-title-not-exists": "$1 nie istnieje.",
"navigation": "This is shown as a section header in the sidebar of most skins.\n\n{{Identical|Navigation}}",
"and": "The translation for \"and\" appears in the [[Special:Version]] page, between the last two items of a list. If a comma is needed, add it at the beginning without a gap between it and the \"&\". &#32; is a blank space, one character long. Please leave it as it is.\n\nThis can also appear in the credits page if the credits feature is enabled,for example [{{canonicalurl:Support|action=credits}} the credits of the support page]. (To view any credits page type <nowiki>&action=credits</nowiki> at the end of any URL in the address bar.)\n{{Identical|And}}",
"qbfind": "Alternative for \"search\" as used in Cologne Blue skin.\n{{Identical|Find}}",
- "qbbrowse": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|Browse}}",
+ "qbbrowse": "Heading in sidebar menu in CologneBlue skin as seen in [[File:CologneBlue sidebar qqx.png]]\n{{Identical|Browse}}",
"qbedit": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|Edit}}",
"qbpageoptions": "Heading in sidebar menu in CologneBlue skin as seen in http://i.imgur.com/I08Y3jW.png\n{{Identical|This page}}",
"qbmyoptions": "Heading in the Cologne Blue skin user menu containing links to user (talk) page, preferences, watchlist, etc.\n{{Identical|My pages}}",
"expensive-parserfunction-warning": "Atenție: Această pagină conține prea multe apelări costisitoare ale funcțiilor parser.\n\nAr trebui să existe mai puțin de $2 {{PLURAL:$2|apelare|apelări}}, acolo există {{PLURAL:$1|$1 apelare|$1 apelări}}.",
"expensive-parserfunction-category": "Pagini cu prea multe apelări costisitoare de funcții parser",
"post-expand-template-inclusion-warning": "Atenție: Formatele incluse sunt prea mari.\nUnele formate nu vor fi incluse.",
- "post-expand-template-inclusion-category": "Paginile în care este inclus formatul are o dimensiune prea mare",
+ "post-expand-template-inclusion-category": "Pagini în care formatele incluse au o dimensiune prea mare",
"post-expand-template-argument-warning": "Atenție: Această pagină conține cel puțin un argument al unui format care are o mărime prea mare atunci când este expandat.\nAcsete argumente au fost omise.",
"post-expand-template-argument-category": "Pagini care conțin formate cu argumente omise",
"parser-template-loop-warning": "Buclă de formate detectată: [[$1]]",
"upload-dialog-disabled": "На этом вики-сайте отключена возможность загрузки файлов с помощью этого диалогового окна.",
"upload-dialog-title": "Загрузить файл",
"upload-dialog-button-cancel": "Отменить",
+ "upload-dialog-button-back": "Назад",
"upload-dialog-button-done": "Готово",
"upload-dialog-button-save": "Сохранить",
"upload-dialog-button-upload": "Загрузить",
"htmlform-cloner-create": "Добавить ещё",
"htmlform-cloner-delete": "Удалить",
"htmlform-cloner-required": "Требуется по крайней мере одно значение.",
+ "htmlform-date-placeholder": "ГГГГ-ММ-ДД",
+ "htmlform-time-placeholder": "ЧЧ:ММ:СС",
+ "htmlform-datetime-placeholder": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
+ "htmlform-date-invalid": "Указанное вами значение не похоже на дату. Попробуйте использовать формат ГГГГ-ММ-ДД.",
+ "htmlform-time-invalid": "Указанное вами значение не похоже на время. Попробуйте использовать формат ЧЧ-ММ-СС.",
+ "htmlform-datetime-invalid": "Указанное вами значение не похоже на дату и время. Попробуйте использовать формат ГГГГ-ММ-ДД ЧЧ-ММ-СС.",
+ "htmlform-date-toolow": "Указанное вами значение меньше самой ранней разрешённой даты — $1.",
+ "htmlform-date-toohigh": "Указанное вами значение больше самой поздней разрешённой даты — $1.",
+ "htmlform-time-toolow": "Указанное вами значение меньше самого раннего разрешённого времени — $1.",
+ "htmlform-time-toohigh": "Указанное вами значение больше самого позднего разрешённого времени — $1.",
+ "htmlform-datetime-toolow": "Указанное вами значение меньше самым ранних разрешённых даты и времени — $1.",
+ "htmlform-datetime-toohigh": "Указанное вами значение больше самых поздних разрешённых даты и времени — $1.",
"htmlform-title-badnamespace": "[[:$1]] находится не в пространстве имён «{{ns:$2}}».",
"htmlform-title-not-creatable": "«$1» — заголовок страницы, которая не может быть создана",
"htmlform-title-not-exists": "$1 не существует.",
"tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برق ٽپال ڪريو",
"tog-enotifrevealaddr": "پڌراين ۾ منهنجو برق ٽپال پتو ظاهر ڪريو.",
"tog-shownumberswatching": "ڏسندڙ يوزرس جو انگ ڏيکاريو",
- "tog-oldsig": "موجوده دستخط",
+ "tog-oldsig": "توھان جو موجوده دستخط:",
"tog-uselivepreview": "سڌي سنئين پيش نگاھہ استعمال ڪريو",
"tog-watchlisthideown": "زير نظر فهرست مان منهنجون ڪيل ترميمون لڪايو",
"tog-watchlisthidebots": "ٽيٽ فهرست تان بوٽ جون ترميمون لڪايو",
"tog-diffonly": "تفاوت هيٺان صفحي جو مواد نہ ڏيکاريو",
"tog-showhiddencats": "لڪل زمرا ڏيکاريو",
"tog-useeditwarning": "مونکي خبردار ڪريو جڏهن مان هڪ ترميم وارو صفحو بغير تبديلين سانڍڻ جي ڇڏيان",
- "tog-prefershttps": "هميشه محفوظ ڪنيڪشن استعمال ڪريو جڏهن لاگ اِن ٿيل هجو",
+ "tog-prefershttps": "هميشہ محفوظ ڪنيڪشن استعمال ڪريو جڏهن داخل ٿيل هجو",
"underline-always": "هميشہ",
"underline-never": "ڪڏهن بہ نہ",
"editfont-style": "ايراضي جو فونٽ اسٽائيل سنواريو:",
"category-file-count-limited": "هيٺيون يا هيٺيان {{PLURAL:$1|فائيل آهي|$1 فائيل آهن}} هن تازي زمري ۾.",
"listingcontinuesabbrev": "جاري..",
"index-category": "ڏسڻيل صفحا",
- "noindex-category": "غيرڏسڻيل صفحا",
+ "noindex-category": "غير-ڏسڻيل صفحا",
"broken-file-category": "فائيل جي ٽٽل ڳنڍڻن وارا صفحا",
"about": "بابت",
"article": "موادي صفحو",
"newwindow": "(نئين دريءَ ۾ کلندو)",
"cancel": "رد",
"moredotdotdot": "اڃا...",
- "morenotlisted": "فهرست مڪمل ڪانهي.",
+ "morenotlisted": "ھي فھرست نامڪمل بہ ٿي سگھي ٿي.",
"mypage": "منهنجو صفحو",
"mytalk": "ڳالهہ ٻول",
"anontalk": "ڳالھ ٻولھ",
"yourpasswordagain": "يُوزرنان ٻيهر ٽائيپ ڪريو:",
"createacct-yourpasswordagain": "ڳجھي لفظ جي خاطري ڪريو",
"createacct-yourpasswordagain-ph": "ٻيهر ڳجھو لفظ داخل ڪريو",
- "remembermypassword": "هن برائوزر تي منهنجي لاگ ان کي (وڌ ۾ وڌ $1 {{PLURAL:$1|ڏينهن}} لاءِ) ياد رکو",
"userlogin-remembermypassword": "مون کي لاگ اِن رکو",
"userlogin-signwithsecure": "محفوظ ڳانڍاپو استعمال ڪريو",
"cannotloginnow-title": "ھاڻي لاگ ان نٿو ڪري سگھجي",
"accountcreatedtext": "يوزر کاتو [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) جي لاءِ تخليق ٿي چڪو آهي.",
"createaccount-title": "{{SITENAME}} تي کاتو کولڻ",
"login-throttled": "توهان تازو ئي لاگ اِن ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
- "login-abort-generic": "توهان جو لاگ اِن ناڪام ويو.",
+ "login-abort-generic": "توهان جو داخل ٿيڻ ناڪام ويو - بند ڪيل",
"login-migrated-generic": "توهان جو کاتو لڏي چڪو آهي، ۽ هن وڪيءَ تي توهان جو يُوزنانءُ هاڻي وجود نہ ٿو رکي.",
"loginlanguagelabel": "ٻولي: $1",
"createacct-another-realname-tip": "اصل نالو ڄاڻائڻ اختياري آهي. جيڪڏهن توهان اصل نالو ڄاڻايو ٿا، تہ اهو توهان کي توهان جي ڪم جي مڃتا ڏيڻ لاءِ ڪم آندو ويندو.",
"passwordreset-emailtitle": "{{SITENAME}} واري کاتي جا تفصيل",
"passwordreset-emailelement": "يُوزر نانءُ: \n$1\n\nعارضي ڳجھو لفظ:\n$2",
"changeemail": "برق ٽپال پتو مِٽايو يا بدلايو",
- "changeemail-passwordrequired": "توهانکي هن تبديلي جي تصديق ڪرڻ جي لاءِ پنهنجو ڳجھو لفظ داخل ڪرڻ جي ضرورت پوندي.",
"changeemail-oldemail": "هاڻوڪو برق ٽپال پتو:",
"changeemail-newemail": "نئون برق ٽپال پتو:",
"changeemail-none": "(ڪو بہ نہ)",
"content-json-empty-array": "خالي اري",
"duplicate-args-warning": "چتاءُ: [[:$2]] کي [[:$1]] ڪال ڪري رهيو آهي، جنهن منجھہ ’$3‘ نيمپيما لاءِ هڪ کان وڌيڪ قدر ڄاڻايل آهن. فقط آخري ڄاڻايل قدر استعمال ڪيو ويندو.",
"parser-template-loop-warning": "سانچو چڪر لڌو ويو: [[$1]]",
- "cantcreateaccounttitle": "کاتو کولي نہ ٿو سگھجي",
"cantcreateaccount-text": "هن آءِ پي پتي تان کاتي جي تخليق تي يُوز (<strong>$1</strong>) [[User:$3|$3]] روڪ لڳائي آهي.\n\n$3 جو ڄاڻايل سبب آهي <em>$2</em> آهي.",
"cantcreateaccount-range-text": "آءِپي پتن جي حد <strong>$1</strong> ۾ [[User:$3|$3]] کاتو کولڻ تي روڪ لڳائي وئي آهي،$4 جنهن ۾ توهان جو آءِپي پتو بہ (<strong>$4</strong>)، پڻ شامل آهي. \n\n$3 ان روڪَ جو سبب \"$2\" ڄاڻايو آهي.",
"viewpagelogs": "هن صفحي جا لاگس ڏسو",
"sp-contributions-newbies-sub": "نون کاتن لاءِ",
"sp-contributions-newbies-title": "نون کاتن جي لاءِ يوزر جون ڀاڱيداريون",
"sp-contributions-blocklog": "بنسش لاگ",
- "sp-contributions-deleted": "يُوزر جون ڊاٺل ڀاڱيداريون",
+ "sp-contributions-deleted": "ڊاٿل {{GENDER:$1|يوزر}} ڀاڱيداريون",
"sp-contributions-uploads": "چاڙھَ",
"sp-contributions-logs": "لاگس",
"sp-contributions-talk": "ڳالھہ",
"category-file-count-limited": "ဢၼ်ပဵၼ် {{PLURAL:$1|ၾၢႆႇၼႆႉ|$1 ၾၢႆႇၸိူဝ်းၼႆႉ}} မီးဝႆႉတီႈၼႂ်း တွၼ်ႈၵၼ်ၼႆ့။",
"listingcontinuesabbrev": "သိုပ်ႇ",
"index-category": "ၼႃႈလိၵ်ႈ ၸိူဝ်းၸီ့ဝႆ့",
- "noindex-category": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¸á\80á\80°á\80\9dá\80ºá\80¸á\81¸á\80®á\80·á\80\9dá\82\86á\80·",
+ "noindex-category": "á\81¼á\82\83á\82\88á\80\9cá\80á\81µá\80ºá\82\88 á\81¸á\80á\80°á\80\9dá\80ºá\80¸á\81¸á\80®á\82\89á\80\9dá\82\86á\82\89",
"broken-file-category": "ၼႃႈလိၵ်ႈၸိူဝ်းမီးဝႆႉ ႁဵင်းၵွင်ႉၾၢႆႇဢၼ်လူ့လႅဝ်",
"about": "လွင်ႈတၢင်း",
"article": "ၼမ်းၼႂ်း",
"newwindow": "(ပိုတ်ႇၼင်ႇဝိၼ်းတူဝ်း ဢၼ်မႂ်ႇ)",
"cancel": "ဢမ်ႇႁဵတ်း",
"moredotdotdot": "ထႅင်ႈ...",
- "morenotlisted": "သဵၼ်ႈမၢႆဢၼ်ၼႆႉ ဢမ်ႇတဵမ်ထူၼ်ႈ။",
+ "morenotlisted": "á\80\9eá\80µá\81¼á\80ºá\82\88á\80\99á\81¢á\82\86á\80¢á\81¼á\80ºá\81¼á\82\86á\82\89 á\80¢á\80\99á\80ºá\82\87á\80¢á\81¢á\80\95á\80ºá\82\88á\80\90á\80µá\80\99á\80ºá\80\91á\80°á\81¼á\80ºá\82\88á\81\8b",
"mypage": "ၼႃႈလိၵ်ႈ",
"mytalk": "တွၼ်ႈဢုပ်ႇ",
"anontalk": "တွၼ်ႈဢုပ်ႇ",
"talk": "တႃႇဢုပ်ႇ",
"views": "လူတူၺ်း",
"toolbox": "ၶိူင်ႈၵမ်ႉၵႅမ်",
+ "tool-link-userrights": "လႅၵ်ႈလၢႆႈ {{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}} ၸုမ်း",
+ "tool-link-emailuser": "သူင်ႇဢီးမေးလ်ဢၼ်ၼႆႉ {{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}}",
"userpage": "တူၺ်းၼႃႈလိၵ်ႈၽူႈၸႂ်ႉတိုဝ်း",
"projectpage": "တူၺ်းၼႃႈလိၵ်ႈ ပရေႃးၵျႅၵ်ႉ",
"imagepage": "တူၺ်းၼႃႈလိၵ်ႈၾၢႆႇ",
"yourpasswordagain": "ၶိုၼ်းပေႃႉပၼ် ၶေႃႈလပ်ႉ :",
"createacct-yourpasswordagain": "ၼႄႉၼွၼ်းပၼ် ၶေႃႈလပ်ႉ",
"createacct-yourpasswordagain-ph": "ပေႃႉသႂ်ႇၶေႃႈလပ်ႉထႅင်ႈၵမ်းၼိုင်ႈ",
- "remembermypassword": "တွင်းဝႆႉပၼ် လွၵ်ႉဢိၼ်ႇၵဝ်ၶႃႈ တီႈၼႂ်း ၶိူင်ႈပိုတ်ႇဝႆႉၼႆႉ (တီႈႁိုင်ႁိုင်မၼ်း $1 {{PLURAL:$1|ၼိုင်ႈဝၼ်း|ဝၼ်း}})",
"userlogin-remembermypassword": "သိုပ်ႇဢဝ်ၵဝ်ၶႃႈ လွၵ်ႉဢိၼ်ႇဝႆႉလႄႈ",
"userlogin-signwithsecure": "ၸႂ်ႉၵွင်ႉသၢၼ် ႁူမ်ႇလူမ်ႈ",
+ "cannotlogin-title": "ဢမ်ႇၸၢင်ႈၶဝ်ႈ လွၵ်ႉဢိၼ်ႇ",
+ "cannotlogin-text": "လွင်ႈၶဝ်ႈလွၵ်ႉဢိၼ်ႇ ဢမ်ႇပႆႇပဵၼ်လႆႈ",
"cannotloginnow-title": "ဢမ်ႇၸၢင်ႈၶဝ်ႈ လွၵ်ႉဢိၼ်ႇ ယၢမ်းလဵဝ်",
"cannotloginnow-text": "တေဢမ်ႇၸၢင်ႈ လွၵ်ႉၶဝ်ႈ ၽွင်းမိူဝ်ႈၸႂ်ႉ $1",
+ "cannotcreateaccount-title": "ဢမ်ႇၸၢင်ႈၵေႃႇတင်ႈ ဢၶွင်ႉ",
+ "cannotcreateaccount-text": "လွင်ႈၵေႃႇတင်ႈဢၶွင်ႉၵမ်းသိုဝ်ႈၼၼ်ႉ ဢမ်ႇလႆႈပိုတ်ႇဝႆႉပၼ်ၵႃႈတီႈ ဝီႇၶီႇၼႆႉ။",
"yourdomainname": "တူဝ်ႇမဵင်း ၸဝ်ႈၵဝ်ႇ :",
"password-change-forbidden": "ၸဝ်ႈၵဝ်ႇတေဢမ်ႇၸၢင်ႈ လႅၵ်ႈလၢႆႈ ၶေႃႈလပ်ႉ ၵႃႈတီႈၼိူဝ် ဝီႇၶီႇၼႆႉ",
+ "externaldberror": "ၼႆႉမၼ်းလႆႈပဵၼ် ယွၼ်ႉ လွင်ႈၽိတ်းပိူင်ႈ ၵၢၼ်လူတ်းပွႆႇ ယွင်ၶေႃႈမုၼ်း ဢမ်ႇၼၼ် ယွၼ်ႉပိူဝ်ႈ ၸဝ်ႈၵဝ်ႇၼႆႉ ဢမ်ႇထုၵ်ႇၶႂၢင်းပၼ် တႃႇတေႁဵတ်း ဢၢပ်ႉတိတ်ႉ ဢၶွင်ႉၽၢႆႇၼွၵ်ႈ။",
"login": "လွၵ်ႉဢိၼ်ႇ",
"login-security": "ၼႄႉၼွၼ်း မၢႆၽၢင်ၸဝ်ႈၵဝ်ႇ",
"nav-login-createaccount": "လွၵ်ႉဢိၼ်ႇ / သၢင်ႈဢၶွင်ႉ",
"createacct-email-ph": "ပေႃႉသႂ်ႇပၼ် ႁဵင်းလိၵ်ႈ ဢီးမေးၸဝ်ႈၵဝ်ႇ",
"createacct-another-email-ph": "ပေႃႉသႂ်ႇပၼ် ႁဵင်းလိၵ်ႈ ဢီးမေးလ်",
"createaccountmail": "ၸႂ်ႉပၼ် ၶေႃႈလပ်ႉၸူဝ်ႈၵႅပ်ႉ သူင်ႇၼၼ်ႉၵႂႃႇၸူး ႁဵင်းလိၵ်ႈဢီးမေးလ် ဢၼ်မၵ်းမၼ်ႈဝႆႉ ပၼ်ၼၼ်ႉ။",
+ "createaccountmail-help": "ပေႃးဢမ်ႇမီး လွင်ႈလဵပ်ႈႁဵၼ်း ၶေႃႈလပ်ႉၼႆ တေဢမ်ႇၸၢင်ႈဢဝ်ၸႂ်ႉ တႃႇတေၵေႃႇတင်ႈ ဢၶွင်ႉတွၼ်ႈတႃႇ ၵူၼ်းတၢင်ႇၵေႃႉ။",
"createacct-realname": "ၸိုဝ်ႈတႄႉတႄႉ (ဢဝ်ၸႂ်ဝႃႈ)",
"createaccountreason": "လွင်ႈတၢင်း :",
"createacct-reason": "လွင်ႈတၢင်း :",
"loginerror": "လွၵ်ႉဢိၼ်ႇ ၽိတ်းပိူင်ႈ",
"createacct-error": "ၵၢၼ်ၵေႃႇသၢင်ႈ ဢၶွင်ႉ ၽိတ်းပိူင်ႈ",
"createaccounterror": "ဢမ်ႇၸၢင်ႈၵေႃႇသၢင်ႈ ဢၶွင်ႉ : $1",
+ "nocookiesnew": "ဢၶွင်ႉ ၽူႈၸႂ်ႉတိုဝ်းၼႆႉ ထုၵ်ႇၵေႃႇသၢင်ႈယဝ်ႉယဝ်ႈ၊ ၵူၺ်းၵႃႈ ၸဝ်ႈၵဝ်ႇဢမ်ႇပႆႇလႆႈၶဝ်ႈ လွၵ်ႉဢိၼ်ႇဝႆႉ။ {{SITENAME}} ၸႂ်ႉ ၶုၵ်ႉၵီး တႃႇတေၶဝ်ႈလွၵ်ႉဢိၼ်ႇ ၽူႈၸႂ်ႉတိုဝ်း။\nၸဝ်ႈၵဝ်ႇလႆႈဢိုတ်းဝႆႉ ၶုၵ်ႉၵီး။\nၶႅၼ်ႈတေႃႈ ပိုတ်ႇပၼ်ၸိူဝ်းၼၼ်ႉသေ ၶဝ်ႈလွၵ်ႉဢိၼ်ႇပၼ်တင်း ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ၸဝ်ႈၵဝ်ႇ ဢၼ်မႂ်ႇလႄႈတင်း ၶေႃႈလပ်ႉၼၼ်ႉလႄႈ။",
+ "nocookieslogin": "{{SITENAME}} ၸႂ်ႉ ၶုၵ်ႉၵီး တႃႇတေၶဝ်ႈလွၵ်ႉဢိၼ်ႇ ၽူႈၸႂ်ႉတိုဝ်း။\nၸဝ်ႈၵဝ်ႇလႆႈဢိုတ်းဝႆႉ ၶုၵ်ႉၵီး။\nၶႅၼ်ႈတေႃႈ ပိုတ်ႇပၼ်ၸိူဝ်းၼၼ်ႉသေ ၶတ်းၸႂ်တူၺ်းထႅမ်ႈလႄႈ။",
+ "nocookiesfornew": "ဢၶွင်ႉၽူႈၸႂ်ႉတိုဝ်းၼႆႉ ဢမ်ႇထုၵ်ႇၵေႃႇသၢင်ႈ ယွၼ်ႉပိူဝ်ႈႁဝ်းၶႃႈ ဢမ်ႇၸၢင်ႈၼႄႉၼွၼ်း ငဝ်ႈငႃႇမၼ်း။\nၶႅၼ်းတေႃႈ ပိုတ်ႇပၼ် ၶုၵ်ႉၵီးၸဝ်ႈၵဝ်ႇယဝ်ႉသေ ၶိုၼ်းတူင်ႉပိုတ်ႇၼႃႈလိၵ်ႈၼႆႉသေ ၶတ်းၸႂ်တူၺ်းထႅင်ႈၶႃႈလႄႈ။",
+ "createacct-loginerror": "ဢၶွင်ႉ ၵေႃႇတင်ႈၶႅမ်ႉလႅပ်ႈၵႂႃႇသေတႃႉ ၸဝ်ႈၵဝ်ႇ တေဢမ်ႇပႆႇၸၢင်ႈၶဝ်ႈ လွၵ်ႉဢိၼ်ႇ ႁင်းၶေႃႈ။ ၶႅၼ်းတေႃႈ ႁဵတ်းတႃႇ [[Special:UserLogin|manual login]].",
"noname": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇလႆႈ မၵ်းမၼ်ႈဝႆႉပၼ် ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ဢၼ်ၸႂ်ႉလႆႈ။",
"loginsuccesstitle": "လွၵ်ႉဢိၼ်ႇဝႆႉယဝ်ႉ",
"loginsuccess": "<strong>ၸဝ်ႈၵဝ်ႇ လွၵ်ႉဢိၼ်ႇၶဝ်ႈၸူး {{SITENAME}} ၼင်ႇ \"$1\".</strong> ယဝ်ႉဢေႃႈ ယၢမ်းလဵဝ်",
+ "nosuchuser": "ၸိုဝ်ႈ တွၼ်ႈတႃႇတႃႇၽူႈၸႂ်ႉတိုဝ်း \"$1\" ဢၼ်ၼႆႉ မၼ်းဢမ်ႇမီးဝႆႉ။\nၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်းၼႆႉ မၼ်းမီးလိူင်ႈတူဝ်လဵၵ်ႉတူဝ်ယႂ်ႇ။\nၵူတ်ႇထတ်းတူၺ်း တူဝ်လေႃးမၼ်း ဢမ်ႇၼၼ် [[Special:CreateAccount|create a new account]].",
"nosuchusershort": "ဢၼ်ပဵၼ်ၸိုဝ်ႈ ၽူႈၸႂ်ႉတိုဝ်း \"$1\" ဢၼ်ၼႆႉ မၼ်းဢမ်ႇမီး။\nမႄးၵူတ်ႇတူၺ်း တူဝ်လိၵ်ႈမၼ်းလီလီလႄႈ။",
"nouserspecified": "ၸဝ်ႈၵဝ်ႇ ထုၵ်ႇလီမၵ်းမၼ်ႈ ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း",
"login-userblocked": "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉ ထုၵ်ႇႁႄႉတတ်းဝႆႉ။ ဢမ်ႇမီးသုၼ်ႇတႃႇ လွၵ်ႉဢိၼ်ႇ",
"passwordreset-emailelement": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း:\n$1\n\nၶေႃႈလပ်ႉ ၸူဝ်ႈၵႅပ်ႉ:\n$2",
"passwordreset-emailsentemail": "ႁဵင်းလိၵ်ႈ ဢီးမေးလ်ဢၼ်ၼႆႉၼႆႉ မၼ်းၵပ်းၵၢႆႇၵၼ်တင်း ဢၶွင်ႉၸဝ်ႈၵဝ်ႇ၊ ဢၼ်ပဵၼ် ဢီးမေးလ် တႃႇတင်ႈၶိုၼ်းမၢႆလပ်ႉၼၼ်ႉ တေထုၵ်ႇသူင်ႇၸူးယူႇ.",
"passwordreset-emailsentusername": "ႁဵင်းလိၵ်ႈ ဢီးမေးလ်ဢၼ်ၼႆႉၼႆႉ မၼ်းၵပ်းၵၢႆႇၵၼ်တင်း ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ဢၼ်ၼႆႉ၊ ဢၼ်ပဵၼ် ဢီးမေးလ် တႃႇတင်ႈၶိုၼ်းမၢႆလပ်ႉၼၼ်ႉ တေထုၵ်ႇသူင်ႇၸူးယူႇ.",
- "passwordreset-emailsent-capture": "ဢီးမေးလ် ၵၢၼ်တင်ႈၶိုၼ်း မၢႆလပ်ႉၼၼ်ႉ ထုၵ်ႇသူင်ႇၵႂႃႇၸူး ဢၼ်ၼႄဝႆႉၼင်ႇ ၽၢႆႇတႂ်ႈၼႆႉ။",
"passwordreset-invalideamil": "ႁဵင်းလိၵ်ႈ ဢီႈမေးလ် ၽိတ်းဝႆႉ။",
"passwordreset-nodata": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်းလႄႈ ႁဵင်းလိၵ်ႈဢီးမေးလ် ဢမ်ႇလႆႈၵမ်ႉထႅမ်ဝႆႉ သေဢၼ်။",
"changeemail": "လႅၵ်ႈလၢႆႈ ဢမ်ႇၼၼ် ထွၼ်ပႅတ်ႈ ႁဵင်းလိၵ်ႈ ဢီးမေးလ်",
"content-json-empty-object": "ၵၢၼ်ပဝ်ႇ",
"content-json-empty-array": "ထႅဝ်ပဝ်ႇ",
"post-expand-template-inclusion-warning": "<strong>ၶေႃႈၽၢင်ႉ</strong> - ပိူင်ဢဝ်မႃးႁူမ်ႈၼၼ်ႉယႂ်ႇပူၼ်ႉၼႃႇ။\nပိူင်မၢင်ၼႃႈတေဢမ်ႇႁူမ်ႈပႃးၸွမ်း။",
- "cantcreateaccounttitle": "ဢမ်ႇၸၢင်ႈၵေႃႇသၢင်ႈ ဢၶွင်ႉ",
"viewpagelogs": "တူၺ်းသၢႆမၢႆ တွၼ်ႈတႃႇၼႃႈလိၵ်ႈၼႆႉ",
"nohistory": "တီႈၼႆႈ ဢမ်ႇမီး ပိုၼ်းထတ်းသၢင်ႈ တွၼ်ႈတႃႇၼႃႈလိၵ်ႈၼႆႉ",
"currentrev": "ၵၢၼ်ၶူၼ်ႉလူ ၵမ်းလိုၼ်းသုတ်း",
"booksources-search-legend": "ၶူၼ်ႉႁႃတႃႇ ငဝ်ႇငႃႇပပ်ႉ",
"booksources-search": "ၶူၼ်ႉႁႃ",
"log": "သၢႆမၢႆ",
+ "checkbox-all": "တင်းမူတ်း",
+ "checkbox-none": "ဢမ်ႇမီးသင်",
+ "checkbox-invert": "ပိၼ်ႈၽိုၼ်",
"allpages": "ၼႃႈလိၵ်ႈတင်းသဵင်ႈ",
+ "nextpage": "ၼႃးလိၵ်ႈ တေမႃး ($1)",
+ "prevpage": "ၼႃးလိၵ်ႈ ပူၼ်ႉမႃး ($1)",
+ "allpagesfrom": "ၼႃႈလိၵ်ႈဢၼ်ၼႄ တႄႇတီႈ :",
+ "allpagesto": "ၼႃႈလိၵ်ႈဢၼ်ၼႄ သုတ်းတီႈ :",
"allarticles": "ၼႃႈလိၵ်ႈတင်းသဵင်ႈ",
+ "allinnamespace": "ၼႃႈလိၵ်ႈတင်းမူတ်း ($1 ဢွင်ႈၸိုဝ်ႈ)",
"allpagessubmit": "ၶူၼ်ႉႁႃ",
+ "allpagesprefix": "ၼႃးလိၵ်ႈဢၼ်ၼႄ ဢိၵ်ႇတင်း ၶေႃႈလူင်ႈၼႃႈ",
"categories": "လိူင်ႈ",
"mywatchlist": "သဵၼ်ႈမၢႆပႂ်ႉတူၺ်း",
"watch": "ပႂ်ႉတူၺ်း",
"talk": "Diskusia",
"views": "Zobrazenia",
"toolbox": "Nástroje",
+ "tool-link-userrights": "Zmeniť používateľské skupiny {{GENDER:$1|tohoto použivateľa|tejto používateľky}}",
+ "tool-link-emailuser": "Poslať e-mail {{GENDER:$1|tomuto používateľovi|tejto používateľke}}",
"userpage": "Zobraziť stránku používateľa",
"projectpage": "Zobraziť projektovú stránku",
"imagepage": "Zobraziť stránku súboru",
"content-model-css": "CSS",
"content-json-empty-object": "Prázdny objekt",
"content-json-empty-array": "Prázdne pole",
+ "deprecated-self-close-category": "Stránky s neplatnými samouzavrenými HTML značkami",
+ "deprecated-self-close-category-desc": "Stránka obsahuje neplatné samouzatvárajúce HTML značky, napr. <code><b/></code> alebo <code><span/></code>. Ich správanie sa v záujme konzistencie so špecifikáciou HTML5 čoskoro zmení a použitie je preto vo wikitexte zastarané.",
"duplicate-args-warning": "<strong>Upozornenie:</strong> Stránka [[:$1]] volá [[:$2]] s viacerými hodnotami parametra „$3“. Použitá bude len posledná odovzdaná hodnota.",
"duplicate-args-category": "Stránky s duplicitnými parametrami pri volaniach šablón",
"duplicate-args-category-desc": "Stránka obsahuje volania šablóny používajúce duplicitné parametere, ako napríklad <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> alebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"search-redirect": "(presmerovanie $1)",
"search-section": "(sekcia $1)",
"search-category": "($1 kategória)",
+ "search-file-match": "(výskyt v obsahu súboru)",
"search-suggest": "Mali ste na mysli „$1“?",
"search-rewritten": "Zobrazujú sa výsledky pre $1. Vyhľadať namiesto toho $2.",
"search-interwiki-caption": "Sesterské projekty",
"prefs-files": "Súbory",
"prefs-custom-css": "Vlastný CSS",
"prefs-custom-js": "Vlastný JS",
- "prefs-common-css-js": "Spoločné CSS/JS pre všetky témy vzhľadu:",
+ "prefs-common-css-js": "Spoločné CSS/JS pre všetky témy:",
"prefs-reset-intro": "Túto stránku môžete použiť na vrátenie predvolených hodnôt vašich nastavení.\nTúto operáciu nemožno vrátiť.",
"prefs-emailconfirm-label": "Overenie e-emailu:",
"youremail": "Váš e-mail²",
"right-edit": "Upravovať stránky (ktoré nie sú diskusné stránky)",
"right-createpage": "Vytvárať stránky (ktoré nie sú diskusné stránky)",
"right-createtalk": "Vytvárať diskusné stránky",
- "right-createaccount": "Vytvárať nové používateľské účty",
+ "right-createaccount": "Vytvárať nové používateľské kontá",
+ "right-autocreateaccount": "Automatické prihlásenie s externým používateľským kontom",
"right-minoredit": "Označovať úpravy ako drobné",
"right-move": "Presúvať stránky",
"right-move-subpages": "Presunúť stránky aj s podstránkami",
"rcshowhidebots": "$1 botov",
"rcshowhidebots-show": "Zobraziť",
"rcshowhidebots-hide": "Skryť",
- "rcshowhideliu": "$1 registrovaných používateľov",
+ "rcshowhideliu": "$1 registrovaných",
"rcshowhideliu-show": "Zobraziť",
"rcshowhideliu-hide": "Skryť",
- "rcshowhideanons": "$1 anonymných používateľov",
+ "rcshowhideanons": "$1 anonymov",
"rcshowhideanons-show": "Zobraziť",
"rcshowhideanons-hide": "Skryť",
"rcshowhidepatr": "$1 úpravy strážených stránok",
"rcshowhidemine": "$1 moje úpravy",
"rcshowhidemine-show": "Zobraziť",
"rcshowhidemine-hide": "Skryť",
- "rcshowhidecategorization": "$1 kategorizáciu stránok",
+ "rcshowhidecategorization": "$1 kategorizáciu",
"rcshowhidecategorization-show": "Zobraziť",
"rcshowhidecategorization-hide": "Skryť",
"rclinks": "Zobraziť posledných $1 úprav za posledných $2 dní<br />$3",
"upload-copy-upload-invalid-domain": "Kopírovanie nahraných súborov nie je dostupné z tejto domény.",
"upload-dialog-title": "Nahrať súbor",
"upload-dialog-button-cancel": "Zrušiť",
+ "upload-dialog-button-back": "Späť",
"upload-dialog-button-done": "Hotovo",
"upload-dialog-button-save": "Uložiť",
"upload-dialog-button-upload": "Nahrať",
"watchnologin": "Nie ste prihlásený/á",
"addwatch": "Pridať do zoznamu sledovaných stránok",
"addedwatchtext": "Stránka „[[:$1]]“ a jej diskusná stránka boli pridané do vášho zoznamu [[Special:Watchlist|sledovaných stránok]].",
+ "addedwatchtext-talk": "„[[:$1]]“ a súvisiaca stránka boli pridané do vášho zoznamu [[Special:Watchlist|sledovaných stránok]].",
"addedwatchtext-short": "Stránka „$1“ bola pridaná do vášho zoznamu sledovaných.",
"removewatch": "Odstrániť zo zoznamu sledovaných",
"removedwatchtext": "Stránka „[[:$1]]“ a jej diskusná stránka boli odstránené z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].",
+ "removedwatchtext-talk": "„[[:$1]]“ a súvisiaca stránka boli odstránené z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].",
"removedwatchtext-short": "Stránka „$1“ bola odstránená z vášho zoznamu sledovaných.",
"watch": "Sledovať",
"watchthispage": "Sledovať túto stránku",
"revertpage": "Posledné úpravy používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) vrátené; bola obnovená posledná úprava $1",
"revertpage-nouser": "Vrátené úpravy od skrytého používateľa na poslednú revíziu od {{GENDER:$1|[[User:$1|$1]]}}",
"rollback-success": "Úpravy $1 vrátené; obnovená posledná verzia od $2.",
+ "rollback-success-notify": "Úpravy používateľa $1 boli vrátené;\nobnovená posledná revízia od používateľa $2. [$3 Zobraziť zmeny]",
"sessionfailure-title": "Chyba relácie",
"sessionfailure": "Zdá sa, že je problém s vašou prihlasovacou reláciou;\ntáto akcia bola zrušená ako prevencia proti zneužitiu relácie (session).\nProsím, stlačte \"naspäť\", obnovte stránku, z ktorej ste sa sem dostali, a skúste to znova.",
"changecontentmodel": "Zmeniť model obsahu stránky",
"tags-active-yes": "Áno",
"tags-active-no": "Nie",
"tags-source-extension": "Definované softvérom",
+ "tags-source-manual": "Pridané manuálne používateľmi a botmi",
"tags-source-none": "Už sa nepoužíva",
"tags-edit": "upraviť",
"tags-delete": "zmazať",
"feedback-bugornote": "Ak ste pripravený podrobne popísať technický problém, prosím pošlite [$1 hlásenie o chybe]. \nV opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš komentár sa pridá na stránku „[$3 $2]“ spolu s vašim používateľským meno a prehliadačom, ktorý používate.",
"feedback-cancel": "Zrušiť",
"feedback-close": "Hotovo",
+ "feedback-external-bug-report-button": "Založiť technickú úlohu",
"feedback-dialog-title": "Odoslať názor",
+ "feedback-dialog-intro": "Pomocou formulára nižšie môžete odoslať svoj názor. Váš komentár sa spolu s vašim použivateľským menom pridá na stránku „$1“.",
"feedback-error-title": "Chyba",
"feedback-error1": "Chyba: Nerozpoznaný výsledok z API",
"feedback-error2": "Chyba: Úprava sa nepodarila",
"feedback-message": "Správa:",
"feedback-subject": "Predmet:",
"feedback-submit": "Odoslať",
+ "feedback-terms": "Beriem na vedomie, že informácie o mojom prehliadači zahŕňajú jeho presnú verziu spolu s verziou operačného systému a budú zverejnené pri mojom komentári.",
+ "feedback-termsofuse": "Súhlasím s tým, že budem poskytovať spätnú väzbu v súlade s Podmienkami použitia.",
"feedback-thanks": "Ďakujeme. Váš komentár bol odoslaný na stránku „[$2 $1]“.",
"feedback-thanks-title": "Ďakujeme",
"feedback-useragent": "Prehliadač:",
"searchsuggest-search": "Hľadať",
"searchsuggest-containing": "obsahuje...",
+ "api-error-autoblocked": "Vaše IP adresa bola automaticky zablokovaná, pretože ju používal zablokovaný používateľ.",
"api-error-badaccess-groups": "Nemáte oprávnenie nahrávať súbory na tejto wiki.",
"api-error-badtoken": "Vnútorná chyba: Zlý token.",
+ "api-error-blocked": "Možnosť editovať vám bola zablokovaná.",
"api-error-copyuploaddisabled": "Nahrávanie z URL je na tomto serveri zakázané.",
"api-error-duplicate": "{{PLURAL:$1|ďalší súbor|ďalšie súbory}} s rovnakým obsahom už na tejto wiki existujú",
"api-error-duplicate-archive": "{{PLURAL:$1|ďalší súbor|ďalšie súbory}} s rovnakým obsahom už na tejto wiki existoval, ale {{PLURAL:$1|bol zmazaný|boli zmazané}}.",
"pagelang-language": "Jazyk",
"pagelang-use-default": "Použiť predvolený jazyk",
"pagelang-select-lang": "Vybrať jazyk",
+ "pagelang-submit": "Odoslať",
"right-pagelang": "Zmeniť jazyk stránky",
"action-pagelang": "meniť jazyk stránky",
"default-skin-not-found": "Uups! Základná tapeta pre Vašu wiki, popísanú v <code dir=\"ltr\">$wgDefaultSkin</code> ako <code>$1</code>, nie je dostupná. \n\nVaša inštalácia pravdepodobne obsahuje nasledovné tapety. Pozri [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pre viac informácii o ich aktivácii a zvoľte základnú.\n\n$2\n\n; Ak ste MediaWiki len teraz nainštalovali\n; Zrejme ste to nainštalovali z gitu alebo priamo zo zdrojového kódu inou metódou. Je to očakávané. Skúste nainštalovať nejaké tapety z [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory];\n:*Stiahnutím [https://www.mediawiki.org/wiki/Download tarball installer], ktorý ponúka viacero tapiet a rozšírení. Skopírovať a nalepiť možno priamo z <code>skins/</code>.\n:*Klonovanie jednej zo <code>mediawiki/skins/*</code> schránok cez git do <code dir=\"ltr\">skins/</code> priečinku Vašej Media Wiki inštalácie.\n: S existujúcou git schránkou, ak ste vývojár MediaWiki, by nemal byť konflikt.\n\n: Ak ste upgradeovali MediaWiki\n: MediaWiki 1.24 a novšie už tapety automaticky neaktivujú. (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Nasledovný kód môžete skopírovať do <code>LocalSettings.php</code> pre aktivovanie všetkých dostupných tapiet.\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ak ste upravili <code>LocalSettings.php</code>:\n: Skontrolujte chyby.",
"mediastatistics-header-text": "Text",
"mediastatistics-header-executable": "Spustiteľné súbory",
"mediastatistics-header-archive": "Komprimované formáty",
+ "mediastatistics-header-total": "Všetky súbory",
"json-warn-trailing-comma": "Z JSONu {{PLURAL:$1|bola odstránená 1 koncová čiarka|boli odstránené $1 koncové čiarky|bolo odstránených $1 koncových čiarok}}",
"json-error-unknown": "Došlo k problému s JSONom. Chyba: $1",
"json-error-depth": "Maximálna hĺbka zásobníka bola prekročená",
"special-characters-group-ipa": "IPA",
"special-characters-group-symbols": "Symboly",
"special-characters-group-greek": "Grécke",
+ "special-characters-group-greekextended": "Grécke rozšírené",
"special-characters-group-cyrillic": "Azbuka",
"special-characters-group-arabic": "Arabské",
"special-characters-group-arabicextended": "Arabské rozšírené",
"mw-widgets-dateinput-placeholder-month": "RRRR-MM",
"mw-widgets-titleinput-description-new-page": "stránka zatiaľ neexistuje",
"mw-widgets-titleinput-description-redirect": "presmerovanie na $1",
- "randomrootpage": "Náhodná koreňová stránka"
+ "randomrootpage": "Náhodná koreňová stránka",
+ "changecredentials": "Zmena prihlasovacích údajov",
+ "removecredentials": "Odstránenie prihlasovacích údajov"
}
"upload-dialog-disabled": "Nalaganj datotek z uporabo tega obrazca je na wikiju onemogočeno.",
"upload-dialog-title": "Naloži datoteko",
"upload-dialog-button-cancel": "Prekliči",
+ "upload-dialog-button-back": "Nazaj",
"upload-dialog-button-done": "Končano",
"upload-dialog-button-save": "Shrani",
"upload-dialog-button-upload": "Naloži",
"htmlform-cloner-create": "Dodaj več",
"htmlform-cloner-delete": "Odstrani",
"htmlform-cloner-required": "Zahtevana je vsaj ena vrednost.",
+ "htmlform-date-placeholder": "LLLL-MM-DD",
+ "htmlform-time-placeholder": "UU:MM:SS",
+ "htmlform-datetime-placeholder": "LLLL-MM-DD UU:MM:SS",
+ "htmlform-date-invalid": "Navedena vrednost ni prepoznan datum. Poskusite uporabiti obliko LLLL-MM-DD.",
+ "htmlform-time-invalid": "Navedena vrednost ni prepoznan čas. Poskusite uporabiti obliko UU:MM:SS.",
+ "htmlform-datetime-invalid": "Navedena vrednost ni prepoznan datum in čas. Poskusite uporabiti obliko LLLL-MM-DD UU:MM:SS.",
+ "htmlform-date-toolow": "Navedena vrednost je časovno pred najzgodnejšim dovoljenim datumom $1.",
+ "htmlform-date-toohigh": "Navedena vrednost je časovno po najpoznejšim dovoljenim datumom $1.",
+ "htmlform-time-toolow": "Navedena vrednost je časovno pred najzgodnejšim dovoljenim časom $1.",
+ "htmlform-time-toohigh": "Navedena vrednost je časovno po najpoznejšim dovoljenim časom $1.",
+ "htmlform-datetime-toolow": "Navedena vrednost je časovno pred najzgodnejšim dovoljenim datumom in časom $1.",
+ "htmlform-datetime-toohigh": "Navedena vrednost je časovno po najpoznejšim dovoljenim datumom in časom $1.",
"htmlform-title-badnamespace": "[[:$1]] ni v imenskem prostoru »{{ns:$2}}«.",
"htmlform-title-not-creatable": "»$1« je naslov strani, ki ga ni mogoče ustvariti",
"htmlform-title-not-exists": "$1 ne obstaja.",
"htmlform-cloner-create": "Lägg till mer",
"htmlform-cloner-delete": "Ta bort",
"htmlform-cloner-required": "Det krävs minst ett värde.",
+ "htmlform-date-placeholder": "ÅÅÅÅ-MM-DD",
+ "htmlform-time-placeholder": "TT:MM:SS",
+ "htmlform-datetime-placeholder": "ÅÅÅÅ-MM-DD TT:MM:SS",
"htmlform-title-badnamespace": "[[:$1]] är inte i \"{{ns:$2}}\"-namnrymden.",
"htmlform-title-not-creatable": "\"$1\" är inte en sidtitel som kan skapas",
"htmlform-title-not-exists": "$1 finns inte.",
"viewtalkpage": "تبادلۂ خیال دیکھیں",
"otherlanguages": "دیگر زبانوں میں",
"redirectedfrom": "($1 سے رجوع مکرر)",
- "redirectpagesub": "لوٹایا گیا صفحہ",
+ "redirectpagesub": "رجوع مکرر",
"redirectto": "رجوعِ مکرر از:",
"lastmodifiedat": "اس صفحہ میں آخری بار مورخہ $1ء کو $2 بجے ترمیم کی گئی۔",
"viewcount": "اِس صفحہ تک {{PLURAL:$1|ایکبار|$1 مرتبہ}} رسائی کی گئی",
"editlink": "ترمیم",
"viewsourcelink": "ماخذ دیکھیں",
"editsectionhint": "ترمیم قطعہ: $1",
- "toc": "Ù\85Ù\86درجات",
+ "toc": "Ù\81Û\81رست",
"showtoc": "دکھائیں",
"hidetoc": "چھپائیں",
"collapsible-collapse": "خاتمے",
"summary": "خلاصہ:",
"subject": "عنوان:",
"minoredit": "معمولی ترمیم",
- "watchthis": "اس صفحہ کو زیر نظر کیحیے",
+ "watchthis": "اس صفحہ کو زیر نظر کریں",
"savearticle": "محفوظ",
"savechanges": "تبدیلیاں محفوظ کریں",
"publishpage": "شائع کریں",
"blocked-notice-logextract": "یہ صارف معطل ہے۔\nحوالہ کے لیے نوشتہ پابندی کا تازہ ترین اندراج ذیل میں دستیاب ہے:",
"clearyourcache": "<strong>یاددہانی:</strong> محفوظ کرنے کے بعد ان تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیشے صاف کرنا ہوگا۔\n* '''فائرفاکس/ سفاری:''' جب ''Reload'' پر کلک کریں تو ''Shift'' دباکر رکھیں، یا ''Ctrl-F5'' یا ''Ctrl-R'' دبائیں (Mac پر ''R-⌘'')\n* '''گوگل کروم:''' ''Ctrl-Shift-R'' دبائیں (Mac پر ''Shift-R-⌘'')\n* '''انٹرنیٹ ایکسپلورر:''' جب ''Refresh'' پر کلک کریں تو ''Ctrl'' یا ''Ctrl-F5'' دبائیں\n* '''اوپیرا:''' ''Tools → Preferences'' میں جائیں اور کیشے (cache) صاف کریں",
"usercssyoucanpreview": "<strong>نکتہ:</strong> اپنی نئی سی ایس ایس کو جانچنے کے لیے اسے محفوظ کرنے سے قبل «{{int:showpreview}}» کی بٹن استعمال کریں۔",
- "userjsyoucanpreview": "<strong>نکتہ:</strong> اپنی نئی جاوا اسکرپٹ کو جانچنے کے لیے اسے محفوظ کرنے سے قبل «{{int:showpreview}}» کی بٹن استعمال کریں۔",
+ "userjsyoucanpreview": "<strong>نکتہ:</strong>اپنی نئی جاوا اسکرپٹ کو محفوظ کرنے سے قبل «{{int:showpreview}}» کی بٹن پر کلک کرکے جانچ لیں۔",
"usercsspreview": "<strong>یاد رہے کہ اس وقت آپ اپنی سی ایس کی محض نمائش دیکھ رہے ہیں، یہ اب تک محفوظ نہیں ہوئی ہے!</strong>",
"userjspreview": "<strong>یاد رہے کہ اس وقت آپ اپنی جاوا اسکرپٹ کی محض نمائش دیکھ/جانچ رہے ہیں، یہ اب تک محفوظ نہیں ہوئی ہے!</strong>",
"sitecsspreview": "<strong>یاد رہے کہ اس وقت آپ اس سی ایس کی محض نمائش دیکھ رہے ہیں، یہ اب تک محفوظ نہیں ہوئی ہے!</strong>",
"upload-dialog-disabled": "اس ویکی پر اس ڈائیلاگ سے فائل اپ لوڈز غیر فعال ہیںَ",
"upload-dialog-title": "فائل اپلوڈ کریں",
"upload-dialog-button-cancel": "منسوخ",
+ "upload-dialog-button-back": "پیچھے جائیں",
"upload-dialog-button-done": "مکمل",
"upload-dialog-button-save": "محفوظ",
"upload-dialog-button-upload": "اپلوڈ",
"contributions-title": "صارف $1 کی شراکتیں",
"mycontris": "شراکتیں",
"anoncontribs": "شراکتیں",
- "contribsub2": "برائے {{GENDER:$3|$1}} ($2)",
+ "contribsub2": "{{GENDER:$3|$1}} ($2)",
"contributions-userdoesnotexist": "«$1» کے نام سے صارف کھاتہ مندرج نہیں ہے۔",
"nocontribs": "اس معیار کے مطابق کوئی ترمیم دستیاب نہیں ہوئی۔",
- "uctop": "(موجودہ)",
+ "uctop": "(موجودہ نسخہ)",
"month": "مہینہ (اور اُس سے قبل):",
"year": "سال (اور اُس سے قبل):",
"sp-contributions-newbies": "محض جدید صارفین کی شراکتیں دکھائیں",
"sp-contributions-hideminor": "معمولی ترامیم چھپائیں",
"sp-contributions-submit": "تلاش",
"whatlinkshere": "مربوط صفحات",
- "whatlinkshere-title": "\"$1\" سے مربوط صفحات",
+ "whatlinkshere-title": "«$1» سے مربوط صفحات",
"whatlinkshere-page": "صفحہ:",
"linkshere": "<strong>[[:$1]]</strong> سے درج ذیل صفحات مربوط ہیں:",
"nolinkshere": "<strong>[[:$1]]</strong> سے کوئی صفحہ مربوط نہیں ہے۔",
"whatlinkshere-next": "{{PLURAL:$1|اگلا|اگلے $1}}",
"whatlinkshere-links": "→ روابط",
"whatlinkshere-hideredirs": "رجوع مکررات $1",
- "whatlinkshere-hidetrans": "$1 استعمالات",
+ "whatlinkshere-hidetrans": "استعمالات $1",
"whatlinkshere-hidelinks": "روابط $1",
"whatlinkshere-hideimages": "تصویر کے روابط $1",
"whatlinkshere-filters": "مقطارات",
"autosumm-blank": "تمام مندرجات حذف",
"autosumm-replace": "\"$1\" سے مواد کی تبدیلی",
"autoredircomment": "[[$1]] سے رجوع مکرر",
- "autosumm-new": "نے «$1» مواد پر مشتمل نیا صفحہ بنایا",
+ "autosumm-new": "«$1» مواد پر مشتمل نیا صفحہ بنایا",
"autosumm-newblank": "خالی صفحہ بنایا",
"size-bytes": "$1 بائٹ",
"size-kilobytes": "$1 کلوبائٹ",
"htmlform-cloner-create": "مزید اضافہ کریں",
"htmlform-cloner-delete": "حذف",
"htmlform-cloner-required": "کم ازکم ایک قدر درکار ہے۔",
+ "htmlform-date-placeholder": "YYYY-MM-DD",
+ "htmlform-time-placeholder": "HH:MM:SS",
+ "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "آپ کی درج کردہ قدر تسلیم شدہ تاریخ نہیں ہے۔ براہ کرم YYYY-MM-DD فارمیٹ استعمال کرنے کی کوشش کریں۔",
+ "htmlform-time-invalid": "آپ کی درج کردہ قدر تسلیم شدہ وقت نہیں ہے۔ براہ کرم HH:MM:SS فارمیٹ استعمال کرنے کی کوشش کریں۔",
+ "htmlform-datetime-invalid": "آپ کی درج کردہ قدر تسلیم شدہ تاریخ اور وقت نہیں ہے۔ براہ کرم YYYY-MM-DD HH:MM:SS فارمیٹ استعمال کرنے کی کوشش کریں۔",
"htmlform-title-badnamespace": "[[:$1]] صفحہ \"{{ns:$2}}\" نام فضا میں موجود نہیں۔",
"htmlform-title-not-creatable": "«$1» عنوان قابل تخلیق نہیں",
"htmlform-title-not-exists": "$1 موجود نہیں ہے۔",
"tog-enotifminoredits": "Gửi thư cho tôi cả những thay đổi nhỏ trong trang và tập tin",
"tog-enotifrevealaddr": "Hiện địa chỉ thư điện tử của tôi trong thư thông báo",
"tog-shownumberswatching": "Hiển thị số người đang xem",
- "tog-oldsig": "Chữ ký hiện tại:",
+ "tog-oldsig": "Chữ ký hiện tại của bạn:",
"tog-fancysig": "Xem chữ ký là mã wiki (không có liên kết tự động)",
"tog-uselivepreview": "Xem trước trực tiếp",
"tog-forceeditsummary": "Nhắc tôi khi tôi quên tóm lược sửa đổi",
"tog-showhiddencats": "Hiển thị thể loại ẩn",
"tog-norollbackdiff": "Bỏ qua bản so sánh sau khi lùi sửa",
"tog-useeditwarning": "Cảnh báo khi tôi thoát trang sửa đổi mà chưa lưu trang",
- "tog-prefershttps": "Luôn kết nối an toàn khi đăng nhập",
+ "tog-prefershttps": "Luôn kết nối an toàn khi đã đăng nhập",
"underline-always": "Luôn luôn",
"underline-never": "Không bao giờ",
"underline-default": "Mặc định của giao diện hoặc trình duyệt",
"newwindow": "(mở cửa sổ mới)",
"cancel": "Hủy bỏ",
"moredotdotdot": "Thêm nữa…",
- "morenotlisted": "Danh sách này không có đầy đủ.",
+ "morenotlisted": "Danh sách này có thể không đầy đủ.",
"mypage": "Trang cá nhân",
"mytalk": "Tin nhắn",
"anontalk": "Thảo luận",
"eauthentsent": "Thư xác nhận đã được gửi cho địa chỉ thư điện tử được chỉ định. Trước khi bạn có thể nhận thư, bạn cần thực hiện hướng dẫn trong thư để xác nhận tài khoản thuộc về bạn.",
"throttled-mailpassword": "Mật khẩu đã được gửi đến cho bạn trong vòng {{PLURAL:$1|$1 giờ|$1 giờ}} đồng hồ trở lại. Để tránh lạm dụng, chỉ có thể gửi mật khẩu $1 giờ đồng hồ một lần.",
"mailerror": "Lỗi gửi thư : $1",
- "acct_creation_throttle_hit": "Ai đó cùng [[địa chỉ IP]] với bạn đã mở {{PLURAL:$1|một tài khoản|$1 tài khoản}} ở đây trong vòng 24 giờ. Vì quy định hạn chế số tài khoản mở trên một địa chỉ IP nên bạn hiện không thể mở thêm được nữa dùng địa chỉ IP này.",
+ "acct_creation_throttle_hit": "Ai đó cùng địa chỉ IP với bạn đã mở {{PLURAL:$1|một tài khoản|$1 tài khoản}} ở đây vào $2 qua. Vì quy định hạn chế số tài khoản mở trên một địa chỉ IP nên bạn hiện không thể mở thêm được nữa dùng địa chỉ IP này.",
"emailauthenticated": "Địa chỉ thư điện tử của bạn được xác nhận vào lúc $3 $2.",
"emailnotauthenticated": "Địa chỉ thư điện tử của bạn chưa được xác nhận. Các chức năng sau sẽ không gửi thư điện tử.",
"noemailprefs": "Hãy ghi một địa chỉ thư điện tử trong tùy chọn cá nhân để có thể sử dụng tính năng này.",
"botpasswords-label-resetpassword": "Đặt lại mật khẩu",
"botpasswords-label-grants": "Các quyền có liên quan:",
"botpasswords-help-grants": "Các lượt cấp phép cho phép truy cập các quyền người dùng mà một tài khoản đã có sẵn. Xem thêm thông tin trong [[Special:ListGrants|bảng cấp phép]].",
- "botpasswords-label-restrictions": "Hạn chế sử dụng:",
"botpasswords-label-grants-column": "Cấp quyền",
"botpasswords-bad-appid": "Bot có tên \"$1\" không hợp lệ.",
"botpasswords-insert-failed": "Không thể thêm tên bot \"$1\". Nó đã được thêm vào chưa?",
"botpasswords-updated-body": "Đã cập nhật mật khẩu cho bot “$1” của người dùng “$2”.",
"botpasswords-deleted-title": "Bot mật khẩu đã bị xóa",
"botpasswords-deleted-body": "Đã xóa mật khẩu cho bot “$1” của người dùng “$2”.",
- "botpasswords-newpassword": "Mật khẩu mới để đăng nhập như <strong>$1</strong> là <strong>$2</strong>. <em>Xin hãy ghi lại mật khẩu này để mai mốt tham khảo.</em>",
+ "botpasswords-newpassword": "Mật khẩu mới để đăng nhập như <strong>$1</strong> là <strong>$2</strong>. <em>Xin hãy ghi lại mật khẩu này để mai mốt tham khảo.</em> <br> (Các bot cũ cần tên đăng nhập khớp với tên người dùng cuối cùng có thể sử dụng tên người dùng <strong>$3</strong> và mật khẩu <strong>$4</strong>.)",
"botpasswords-no-provider": "BotPasswordsSessionProvider không có sẵn.",
"botpasswords-restriction-failed": "Mật khẩu bot giới hạn ngăn chặn đăng nhập này.",
"botpasswords-invalid-name": "Tên người dùng đã chỉ định không chứa dấu tách mật khẩu bot (\"$1\").",
"tags-actions-header": "Tác vụ",
"tags-active-yes": "Kích hoạt",
"tags-active-no": "Vô hiệu",
- "tags-source-extension": "Xác định bởi một mở rộng",
+ "tags-source-extension": "Xác định bởi phần mềm",
"tags-source-manual": "Áp dụng thủ công bởi người dùng và bot",
"tags-source-none": "Không còn sử dụng",
"tags-edit": "sửa",
"htmlform-title-not-exists": "$1 không tồn tại.",
"htmlform-user-not-exists": "<strong>$1</strong> không tồn tại.",
"htmlform-user-not-valid": "<strong>$1</strong> không phải là tên người dùng.",
- "sqlite-has-fts": "$1 với sự hỗ trợ tìm kiếm toàn văn",
- "sqlite-no-fts": "$1 không có hỗ trợ tìm kiếm toàn văn",
"logentry-delete-delete": "$1 {{GENDER:$2}}đã xóa trang “$3”",
"logentry-delete-restore": "$1 {{GENDER:$2}}đã phục hồi trang “$3”",
"logentry-delete-event": "$1 {{GENDER:$2}}đã thay đổi mức hiển thị của {{PLURAL:$5|một mục nhật trình|$5 mục nhật trình}} về $3: $4",
"upload-dialog-disabled": "使用此对话框的文件上传在此wiki已禁用。",
"upload-dialog-title": "上传文件",
"upload-dialog-button-cancel": "取消",
+ "upload-dialog-button-back": "返回",
"upload-dialog-button-done": "完成",
"upload-dialog-button-save": "保存",
"upload-dialog-button-upload": "上传",
*/
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
// This endpoint is supposed to be independent of request cookies and other
// details of the session. Enforce this constraint with respect to session use.
return;
}
+// Don't initialise ChronologyProtector from object cache, and
+// don't wait for unrelated MediaWiki writes when querying ResourceLoader.
+MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->setRequestInfo( [
+ 'ChronologyProtection' => 'false',
+] );
+
// Set up ResourceLoader
$resourceLoader = new ResourceLoader(
ConfigFactory::getDefaultInstance()->makeConfig( 'main' ),
/**
* Lock the search index
- * @param DatabaseBase &$db
+ * @param Database &$db
*/
private function lockSearchindex( $db ) {
$write = [ 'searchindex' ];
/**
* Unlock the tables
- * @param DatabaseBase &$db
+ * @param Database &$db
*/
private function unlockSearchindex( $db ) {
$db->unlockTables( __CLASS__ . '::' . __METHOD__ );
/**
* Unlock and lock again
* Since the lock is low-priority, queued reads will be able to complete
- * @param DatabaseBase &$db
+ * @param Database &$db
*/
private function relockSearchindex( $db ) {
$this->unlockSearchindex( $db );
* Perform a search index update with locking
* @param int $maxLockTime The maximum time to keep the search index locked.
* @param string $callback The function that will update the function.
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @param array $results
*/
public function updateSearchIndex( $maxLockTime, $callback, $dbw, $results ) {
/**
* Update the searchindex table for a given pageid
- * @param DatabaseBase $dbw A database write handle
+ * @param Database $dbw A database write handle
* @param int $pageId The page ID to update.
* @return null|string
*/
class UpdateLogging {
/**
- * @var DatabaseBase
+ * @var Database
*/
public $dbw;
public $batchSize = 1000;
}
/**
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @return void
*/
private function insertData( $dbw ) {
}
/**
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @return void
*/
private function delete( $dbw ) {
}
/**
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @return void
*/
private function truncate( $dbw ) {
/**
* @param ResultWrapper $res
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @return null|int
*/
function convertOptionBatch( $res, $dbw ) {
* Do this inside a transaction
*
* @param array $id Array of revision id values
- * @param DatabaseBase $dbw DatabaseBase class (needs to be a master)
+ * @param Database $dbw Database class (needs to be a master)
*/
private function deleteRevs( $id, &$dbw ) {
if ( !is_array( $id ) ) {
/**
* Callback function for each revision, child classes should override
* processRevision instead.
- * @param DatabaseBase $rev
+ * @param Database $rev
*/
public function handleRevision( $rev ) {
$title = $rev->getTitle();
protected $checkpointFiles = [];
/**
- * @var DatabaseBase
+ * @var Database
*/
protected $db;
/**
* May throw a database error if, say, the server dies during query.
- * @param DatabaseBase $db
+ * @param Database $db
* @param int $id The old_id
* @return string
*/
class NamespaceConflictChecker extends Maintenance {
/**
- * @var DatabaseBase
+ * @var Database
*/
protected $db;
/**
* Lock the appropriate tables for the script
- * @param DatabaseBase $db
+ * @param Database $db
* @param string $extraTable The name of any extra tables to lock (eg: text)
*/
private function lockTables( $db, $extraTable = [] ) {
}
}
- private function updatePageRows( DatabaseBase $dbw, $pageIds, $model ) {
+ private function updatePageRows( Database $dbw, $pageIds, $model ) {
$count = count( $pageIds );
$this->output( "Setting $count rows to $model..." );
$dbw->update(
$this->output( "done.\n" );
}
- protected function populatePage( DatabaseBase $dbw, $ns ) {
+ protected function populatePage( Database $dbw, $ns ) {
$toSave = [];
$lastId = 0;
$nsCondition = $ns === 'all' ? [] : [ 'page_namespace' => $ns ];
}
}
- private function updateRevisionOrArchiveRows( DatabaseBase $dbw, $ids, $model, $table ) {
+ private function updateRevisionOrArchiveRows( Database $dbw, $ids, $model, $table ) {
$prefix = $table === 'archive' ? 'ar' : 'rev';
$model_column = "{$prefix}_content_model";
$format_column = "{$prefix}_content_format";
$this->output( "done.\n" );
}
- protected function populateRevisionOrArchive( DatabaseBase $dbw, $table, $ns ) {
+ protected function populateRevisionOrArchive( Database $dbw, $table, $ns ) {
$prefix = $table === 'archive' ? 'ar' : 'rev';
$model_column = "{$prefix}_content_model";
$format_column = "{$prefix}_content_format";
return __CLASS__;
}
- protected function buildUpdateCondition( DatabaseBase $dbw ) {
+ protected function buildUpdateCondition( Database $dbw ) {
$rcNew = $dbw->addQuotes( RC_NEW );
$rcSrcNew = $dbw->addQuotes( RecentChange::SRC_NEW );
$rcEdit = $dbw->addQuotes( RC_EDIT );
class ImageBuilder extends Maintenance {
/**
- * @var DatabaseBase
+ * @var Database
*/
protected $dbw;
const RTI_CHUNK_SIZE = 500;
/**
- * @var DatabaseBase
+ * @var Database
*/
private $db;
class RefreshImageMetadata extends Maintenance {
/**
- * @var DatabaseBase
+ * @var Database
*/
protected $dbw;
}
/**
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @return array
*/
function getConditions( $dbw ) {
/**
* Gets a DB master connection for the given external cluster name
* @param string $cluster
- * @return DatabaseBase
+ * @return Database
*/
function getExtDB( $cluster ) {
$lb = wfGetLBFactory()->getExternalLB( $cluster );
* Return an SQL expression selecting rows which sort above the given row,
* assuming an ordering of cl_collation, cl_to, cl_type, cl_from
* @param stdClass $row
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @return string
*/
function getBatchCondition( $row, $dbw ) {
require_once __DIR__ . '/Maintenance.php';
+use Composer\Spdx\SpdxLicenses;
+use JsonSchema\Validator;
+
class ValidateRegistrationFile extends Maintenance {
public function __construct() {
parent::__construct();
$this->addArg( 'path', 'Path to extension.json/skin.json file.', true );
}
public function execute() {
- if ( !class_exists( 'JsonSchema\Validato' ) ) {
+ if ( !class_exists( Validator::class ) ) {
$this->error( 'The JsonSchema library cannot be found, please install it through composer.', 1 );
+ } elseif ( !class_exists( SpdxLicenses::class ) ) {
+ $this->error(
+ 'The spdx-licenses library cannot be found, please install it through composer.', 1
+ );
}
$path = $this->getArg( 0 );
$this->output( "Warning: $path is using a deprecated schema, and should be updated to "
. ExtensionRegistry::MANIFEST_VERSION . "\n" );
}
- $validator = new JsonSchema\Validator;
+
+ $licenseError = false;
+ // Check if it's a string, if not, schema validation will display an error
+ if ( isset( $data->{'license-name'} ) && is_string( $data->{'license-name'} ) ) {
+ $licenses = new SpdxLicenses();
+ $valid = $licenses->validate( $data->{'license-name'} );
+ if ( !$valid ) {
+ $licenseError = '[license-name] Invalid SPDX license identifier, '
+ . 'see <https://spdx.org/licenses/>';
+ }
+ }
+
+ $validator = new Validator;
$validator->check( $data, (object) [ '$ref' => 'file://' . $schemaPath ] );
- if ( $validator->isValid() ) {
+ if ( $validator->isValid() && !$licenseError ) {
$this->output( "$path validates against the version $version schema!\n" );
} else {
foreach ( $validator->getErrors() as $error ) {
$this->output( "[{$error['property']}] {$error['message']}\n" );
}
+ if ( $licenseError ) {
+ $this->output( "$licenseError\n" );
+ }
$this->error( "$path does not validate.", 1 );
}
}
clear: both;
}
+/* Edit font preference */
+/* TODO: for 'default' on non-textareas we could compute the default font of textarea in the client */
+.mw-editfont-default:not( textarea ) {
+ font-family: monospace;
+}
+
+/* Keep this rule separate from the :not rule above so it still works in older browsers */
+.mw-editfont-monospace {
+ font-family: monospace;
+}
+
+.mw-editfont-sans-serif {
+ font-family: sans-serif;
+}
+
+.mw-editfont-serif {
+ font-family: serif;
+}
+
/**
* rev_deleted stuff
*/
// ----------------------------------------------------------------------------
.button-colors( @bgColor, @highlightColor, @activeColor ) {
- background: @bgColor;
+ background-color: @bgColor;
+ color: @colorButtonText;
+ border: 1px solid @colorFieldBorder;
+
+ // Make sure that `color` isn't inheriting from user-agent styles
+ &:visited {
+ color: @colorButtonText;
+ }
&:hover {
background-color: @highlightColor;
+ color: @colorGray4;
+ border-color: @colorGray10;
}
&:focus {
- border-color: @colorWhite;
- box-shadow: inset 0 0 0 1px @bgColor, inset 0 0 0 2px @colorWhite;
- outline-width: 0;
-
- // Remove the inner border and padding in Firefox.
- &::-moz-focus-inner {
- border-color: transparent;
- padding: 0;
- }
+ background-color: @highlightColor;
+ // Make sure that `color` isn't inheriting from user-agent styles
+ color: @colorButtonText;
+ border-color: @colorProgressive;
+ box-shadow: inset 0 0 0 1px @colorProgressive, inset 0 0 0 2px #fff;
}
&:active,
&.is-on,
&.mw-ui-checked {
background-color: @activeColor;
+ color: @colorGray1;
+ border-color: @colorGray7;
box-shadow: none;
}
-}
-
-.button-colors( @bgColor, @highlightColor, @activeColor ) when ( lightness( @bgColor ) >= 70% ) {
- color: @colorButtonText;
- border: 1px solid @colorFieldBorder;
-
- &:hover,
- &:active,
- &:visited {
- // make sure that is isn't inheriting from a general rule
- color: @colorButtonText;
- }
-
- &:focus {
- background-color: @highlightColor;
- }
&:disabled {
- color: @colorDisabledText;
+ background-color: @colorGray12;
+ color: #fff;
+ border-color: @colorGray12;
- // make sure disabled buttons don't have hover and active states
+ // Make sure disabled buttons don't have hover and active states
&:hover,
&:active {
- background: @bgColor;
+ background-color: @colorGray12;
+ color: #fff;
box-shadow: none;
+ border-color: @colorGray12;
}
}
}
-.button-colors( @bgColor, @highlightColor, @activeColor ) when ( lightness( @bgColor ) < 70% ) {
+.button-colors-primary( @bgColor, @highlightColor, @activeColor ) {
+ background-color: @bgColor;
color: #fff;
// border of the same color as background so that light background and
// dark background buttons are the same height and width
border: 1px solid @bgColor;
- text-shadow: 0 1px rgba(0, 0, 0, .1);
+ text-shadow: 0 1px rgba( 0, 0, 0, 0.1 );
+
+ &:hover {
+ background-color: @highlightColor;
+ border-color: @highlightColor;
+ }
+
+ &:focus {
+ box-shadow: inset 0 0 0 1px @bgColor, inset 0 0 0 2px #fff;
+ }
+
+ &:active,
+ &.is-on,
+ &.mw-ui-checked {
+ background-color: @activeColor;
+ border-color: @activeColor;
+ box-shadow: none;
+ }
&:disabled {
- background-color: @colorGray13;
- border-color: @colorGray13;
+ background-color: @colorGray12;
+ color: #fff;
+ border-color: @colorGray12;
- // make sure disabled buttons don't have hover and active states
+ // Make sure disabled buttons don't have hover and active states
&:hover,
&:active,
&.mw-ui-checked {
+ background-color: @colorGray12;
+ color: #fff;
+ border-color: @colorGray12;
box-shadow: none;
}
}
.button-colors-quiet( @textColor, @highlightColor, @activeColor ) {
// Quiet buttons all start gray, and reveal
- // constructive/progressive/destructive color on hover and active.
+ // progressive/destructive color on hover and active.
color: @colorButtonText;
&:hover {
@colorGray2: #222;
@colorGray3: #333;
@colorGray4: #444;
-@colorGray5: #555;
+@colorGray5: #54595d;
@colorGray6: #666;
@colorGray7: #72777d;
@colorGray8: #888;
@colorGray9: #999;
-@colorGray10: #aaa;
+@colorGray10: #a2a9b1;
@colorGray11: #bbb;
-@colorGray12: #ccc;
+@colorGray12: #c8ccd1;
@colorGray13: #ddd;
-@colorGray14: #eee;
+@colorGray14: #eaecf0;
@colorGray15: #f8f9fa; // lightest
// Semantic background colors
vertical-align: middle;
// Content styling
- .button-colors( #fff, @colorGray12, @colorGray7 );
+ .button-colors( @colorGray15, #fff, #d9d9d9 );
text-align: center;
font-weight: bold;
// Interaction styling
cursor: pointer;
+ &:focus {
+ outline-width: 0;
+
+ // Remove the inner border and padding in Firefox.
+ &::-moz-focus-inner {
+ border-color: transparent;
+ padding: 0;
+ }
+ }
+
+ // `:not()` is used exclusively for `transition`s as both are not supported by IE < 9
+ &:not( :disabled ) {
+ .transition( ~'background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms' );
+ }
+
&:disabled {
text-shadow: none;
cursor: default;
// Progressive buttons
//
// Use progressive buttons for actions which lead to a next step in the process.
+ // .mw-ui-constructive is deprecated; consolidated with `progressive`, see T110555
// .mw-ui-primary is deprecated, kept for compatibility.
//
// Markup:
//
// Styleguide 2.1.1.
&.mw-ui-progressive,
+ &.mw-ui-constructive,
&.mw-ui-primary {
- .button-colors( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
-
- &.mw-ui-quiet {
- .button-colors-quiet( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
- }
- }
-
- // Constructive buttons (deprecated, consolidated with `progressive` – see T110555)
- //
- // Use constructive buttons for actions which result in a final action in the process that results
- // in a change of state.
- // e.g. save changes button
- //
- // Markup:
- // <div>
- // <button class="mw-ui-button mw-ui-constructive">.mw-ui-constructive</button>
- // </div>
- // <div>
- // <button class="mw-ui-button mw-ui-constructive" disabled>.mw-ui-constructive</button>
- // </div>
- //
- // Styleguide 2.1.2.
- &.mw-ui-constructive {
- .button-colors( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
+ .button-colors-primary( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
&.mw-ui-quiet {
.button-colors-quiet( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
// <button class="mw-ui-button mw-ui-destructive" disabled>.mw-ui-destructive</button>
// </div>
//
- // Styleguide 2.1.3.
+ // Styleguide 2.1.2.
&.mw-ui-destructive {
- .button-colors( @colorDestructive, @colorDestructiveHighlight, @colorDestructiveActive );
+ .button-colors-primary( @colorDestructive, @colorDestructiveHighlight, @colorDestructiveActive );
&.mw-ui-quiet {
.button-colors-quiet( @colorDestructive, @colorDestructiveHighlight, @colorDestructiveActive );
// <button class="mw-ui-button mw-ui-progressive mw-ui-quiet" disabled>.mw-ui-progressive</button>
// </div>
//
- // Styleguide 2.1.4.
+ // Styleguide 2.1.3.
&.mw-ui-quiet {
background: transparent;
border: 0;
// - atext : defined in RFC 5322 section 3.2.3
// - ldh-str : defined in RFC 1034 section 3.5
//
- // (see STD 68 / RFC 5234 http://tools.ietf.org/html/std68)
+ // (see STD 68 / RFC 5234 https://tools.ietf.org/html/std68)
// First, define the RFC 5322 'atext' which is pretty easy:
// atext = ALPHA / DIGIT / ; Printable US-ASCII
// "!" / "#" / ; characters not including
}
// The RepoGroup cache is invalidated by the creation of file redirects
- if ( $title->getNamespace() === NS_IMAGE ) {
+ if ( $title->inNamespace( NS_FILE ) ) {
RepoGroup::singleton()->clearCache( $title );
}
}
!! end
+!! test
+T35715: s/strike element in ToC
+!! wikitext
+__TOC__
+== <s>test</s> test <strike>test</strike> ==
+!! html
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#test_test_test"><span class="tocnumber">1</span> <span class="toctext"><s>test</s> test <strike>test</strike></span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="test_test_test"><s>test</s> test <strike>test</strike></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=1" title="Edit section: test test test">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! end
+
# Note that the html output does not have the <p></p>, but the
# html+tidy output *does*. This is because the empty <p></p> is
# removed by the sanitizer, but only when tidy is *not* enabled (!).
* This test is used to verify our formatting against all lower and
* all upper cases language code.
*
- * @see http://tools.ietf.org/html/bcp47
+ * @see https://tools.ietf.org/html/bcp47
* @dataProvider provideLanguageCodes()
*/
public function testBCP47( $code, $expected ) {
'/* insecure input */',
'background-image: -moz-image-set("asdf.png" 1x, "asdf.png" 2x);'
],
+ [ '/* insecure input */', 'foo: attr( title, url );' ],
+ [ '/* insecure input */', 'foo: attr( title url );' ],
];
}
->getMock();
if ( $expectedConnectionType !== null ) {
$mock->expects( $this->any() )
- ->method( 'getConnection' )
+ ->method( 'getConnectionRef' )
->with( $expectedConnectionType )
->will( $this->returnValue( $mockDb ) );
} else {
$mock->expects( $this->any() )
- ->method( 'getConnection' )
+ ->method( 'getConnectionRef' )
->will( $this->returnValue( $mockDb ) );
}
$mock->expects( $this->any() )
new TitleValue( 1, 'ApiQueryWatchlistRawIntegrationTestPage1' ),
] );
+ ObjectCache::getMainWANInstance()->clearProcessCache();
$result = $this->doListWatchlistRawRequest( [
'wrowner' => $otherUser->getName(),
'wrtoken' => '1234567890',
}
public function testTestUserCanAuthenticate() {
+ $user = self::getMutableTestUser()->getUser();
+
$dbw = wfGetDB( DB_MASTER );
$passwordFactory = new \PasswordFactory();
'user_newpassword' => \PasswordFactory::newInvalidPassword()->toString(),
'user_newpass_time' => null,
],
- [ 'user_name' => 'UTSysop' ]
+ [ 'user_id' => $user->getId() ]
);
- $this->assertFalse( $provider->testUserCanAuthenticate( 'UTSysop' ) );
+ $this->assertFalse( $provider->testUserCanAuthenticate( $user->getName() ) );
$dbw->update(
'user',
'user_newpassword' => $pwhash,
'user_newpass_time' => null,
],
- [ 'user_name' => 'UTSysop' ]
+ [ 'user_id' => $user->getId() ]
);
- $this->assertTrue( $provider->testUserCanAuthenticate( 'UTSysop' ) );
- $this->assertTrue( $provider->testUserCanAuthenticate( 'uTSysop' ) );
+ $this->assertTrue( $provider->testUserCanAuthenticate( $user->getName() ) );
+ $this->assertTrue( $provider->testUserCanAuthenticate( lcfirst( $user->getName() ) ) );
$dbw->update(
'user',
'user_newpassword' => $pwhash,
'user_newpass_time' => $dbw->timestamp( time() - 10 ),
],
- [ 'user_name' => 'UTSysop' ]
+ [ 'user_id' => $user->getId() ]
);
$providerPriv->newPasswordExpiry = 100;
- $this->assertTrue( $provider->testUserCanAuthenticate( 'UTSysop' ) );
+ $this->assertTrue( $provider->testUserCanAuthenticate( $user->getName() ) );
$providerPriv->newPasswordExpiry = 1;
- $this->assertFalse( $provider->testUserCanAuthenticate( 'UTSysop' ) );
+ $this->assertFalse( $provider->testUserCanAuthenticate( $user->getName() ) );
$dbw->update(
'user',
'user_newpassword' => \PasswordFactory::newInvalidPassword()->toString(),
'user_newpass_time' => null,
],
- [ 'user_name' => 'UTSysop' ]
+ [ 'user_id' => $user->getId() ]
);
}
}
public function testAuthentication() {
+ $user = self::getMutableTestUser()->getUser();
+
$password = 'TemporaryPassword';
$hash = ':A:' . md5( $password );
$dbw = wfGetDB( DB_MASTER );
$dbw->update(
'user',
[ 'user_newpassword' => $hash, 'user_newpass_time' => $dbw->timestamp( time() - 10 ) ],
- [ 'user_name' => 'UTSysop' ]
+ [ 'user_id' => $user->getId() ]
);
$req = new PasswordAuthenticationRequest();
);
// Validation failure
- $req->username = 'UTSysop';
+ $req->username = $user->getName();
$req->password = $password;
$this->validity = \Status::newFatal( 'arbitrary-failure' );
$ret = $provider->beginPrimaryAuthentication( $reqs );
$this->manager->removeAuthenticationSessionData( null );
$this->validity = \Status::newGood();
$this->assertEquals(
- AuthenticationResponse::newPass( 'UTSysop' ),
+ AuthenticationResponse::newPass( $user->getName() ),
$provider->beginPrimaryAuthentication( $reqs )
);
$this->assertNotNull( $this->manager->getAuthenticationSessionData( 'reset-pass' ) );
$this->manager->removeAuthenticationSessionData( null );
$this->validity = \Status::newGood();
- $req->username = 'uTSysop';
+ $req->username = lcfirst( $user->getName() );
$this->assertEquals(
- AuthenticationResponse::newPass( 'UTSysop' ),
+ AuthenticationResponse::newPass( $user->getName() ),
$provider->beginPrimaryAuthentication( $reqs )
);
$this->assertNotNull( $this->manager->getAuthenticationSessionData( 'reset-pass' ) );
- $req->username = 'UTSysop';
+ $req->username = $user->getName();
// Expired password
$providerPriv->newPasswordExpiry = 1;
$oldpass = 'OldTempPassword';
$newpass = 'NewTempPassword';
- $hash = ':A:' . md5( $oldpass );
- $dbw = wfGetDB( DB_MASTER );
- $dbw->update(
- 'user',
- [ 'user_newpassword' => $hash, 'user_newpass_time' => $dbw->timestamp( time() + 10 ) ],
- [ 'user_name' => 'UTSysop' ]
- );
-
$dbw = wfGetDB( DB_MASTER );
$oldHash = $dbw->selectField( 'user', 'user_newpassword', [ 'user_name' => $cuser ] );
$cb = new \ScopedCallback( function () use ( $dbw, $cuser, $oldHash ) {
$dbw->update( 'user', [ 'user_newpassword' => $oldHash ], [ 'user_name' => $cuser ] );
} );
+ $hash = ':A:' . md5( $oldpass );
+ $dbw->update(
+ 'user',
+ [ 'user_newpassword' => $hash, 'user_newpass_time' => $dbw->timestamp( time() + 10 ) ],
+ [ 'user_name' => $cuser ]
+ );
+
$provider = $this->getProvider();
// Sanity check
}
public function testProviderChangeAuthenticationDataEmail() {
+ $user = self::getMutableTestUser()->getUser();
+
$dbw = wfGetDB( DB_MASTER );
$dbw->update(
'user',
[ 'user_newpass_time' => $dbw->timestamp( time() - 5 * 3600 ) ],
- [ 'user_name' => 'UTSysop' ]
+ [ 'user_id' => $user->getId() ]
);
- $user = \User::newFromName( 'UTSysop' );
- $reset = new \ScopedCallback( function ( $email ) use ( $user ) {
- $user->setEmail( $email );
- $user->saveSettings();
- }, [ $user->getEmail() ] );
-
- $user->setEmail( 'test@localhost.localdomain' );
- $user->saveSettings();
-
$req = TemporaryPasswordAuthenticationRequest::newRandom();
$req->username = $user->getName();
$req->mailpassword = true;
$dbw->update(
'user',
[ 'user_newpass_time' => $dbw->timestamp( time() + 5 * 3600 ) ],
- [ 'user_name' => 'UTSysop' ]
+ [ 'user_id' => $user->getId() ]
);
$provider = $this->getProvider( [ 'passwordReminderResendTime' => 0 ] );
$status = $provider->providerAllowsAuthenticationDataChange( $req, true );
$status = $provider->providerAllowsAuthenticationDataChange( $req, true );
$this->assertEquals( \StatusValue::newGood(), $status );
- $req->caller = 'UTSysop';
+ $req->caller = $user->getName();
$status = $provider->providerAllowsAuthenticationDataChange( $req, true );
$this->assertEquals( \StatusValue::newGood(), $status );
$mailed = false;
$resetMailer = $this->hookMailer( function ( $headers, $to, $from, $subject, $body )
- use ( &$mailed, $req )
+ use ( &$mailed, $req, $user )
{
$mailed = true;
- $this->assertSame( 'test@localhost.localdomain', $to[0]->address );
+ $this->assertSame( $user->getEmail(), $to[0]->address );
$this->assertContains( $req->password, $body );
return false;
} );
$this->assertEquals( $expect, $provider->beginPrimaryAccountCreation( $user, $user, $reqs ) );
$this->assertNull( $this->manager->getAuthenticationSessionData( 'no-email' ) );
- // We have to cheat a bit to avoid having to add a new user to
- // the database to test the actual setting of the password works right
- $user = \User::newFromName( 'UTSysop' );
+ $user = self::getMutableTestUser()->getUser();
$req->username = $authreq->username = $user->getName();
$req->password = $authreq->password = 'NewPassword';
- $expect = AuthenticationResponse::newPass( 'UTSysop' );
+ $expect = AuthenticationResponse::newPass( $user->getName() );
$expect->createRequest = $req;
$res2 = $provider->beginPrimaryAccountCreation( $user, $user, $reqs );
public function testAccountCreationEmail() {
$creator = \User::newFromName( 'Foo' );
- $user = \User::newFromName( 'UTSysop' );
- $reset = new \ScopedCallback( function ( $email ) use ( $user ) {
- $user->setEmail( $email );
- $user->saveSettings();
- }, [ $user->getEmail() ] );
+ $user = self::getMutableTestUser()->getUser();
$user->setEmail( null );
$req = TemporaryPasswordAuthenticationRequest::newRandom();
return false;
} );
- $expect = AuthenticationResponse::newPass( 'UTSysop' );
+ $expect = AuthenticationResponse::newPass( $user->getName() );
$expect->createRequest = clone( $req );
- $expect->createRequest->username = 'UTSysop';
+ $expect->createRequest->username = $user->getName();
$res = $provider->beginPrimaryAccountCreation( $user, $creator, [ $req ] );
$this->assertEquals( $expect, $res );
$this->assertTrue( $this->manager->getAuthenticationSessionData( 'no-email' ) );
--- /dev/null
+<?php
+
+/**
+ * @group ContentHandler
+ */
+class FileContentHandlerTest extends MediaWikiLangTestCase {
+ /**
+ * @var FileContentHandler
+ */
+ private $handler;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->handler = new FileContentHandler();
+ }
+
+ public function testIndexMapping() {
+ $mockEngine = $this->getMock( 'SearchEngine' );
+
+ $mockEngine->expects( $this->atLeastOnce() )
+ ->method( 'makeSearchFieldMapping' )
+ ->willReturnCallback( function ( $name, $type ) {
+ $mockField =
+ $this->getMockBuilder( 'SearchIndexFieldDefinition' )
+ ->setMethods( [ 'getMapping' ] )
+ ->setConstructorArgs( [ $name, $type ] )
+ ->getMock();
+ return $mockField;
+ } );
+
+ $map = $this->handler->getFieldsForSearchIndex( $mockEngine );
+ $expect = [
+ 'file_media_type' => 1,
+ 'file_mime' => 1,
+ 'file_size' => 1,
+ 'file_width' => 1,
+ 'file_height' => 1,
+ 'file_bits' => 1,
+ 'file_resolution' => 1,
+ 'file_text' => 1,
+ ];
+ foreach ( $map as $name => $field ) {
+ $this->assertInstanceOf( 'SearchIndexField', $field );
+ $this->assertEquals( $name, $field->getName() );
+ unset( $expect[$name] );
+ }
+ $this->assertEmpty( $expect );
+ }
+}
$title = Title::newFromText( 'Somefile.jpg', NS_FILE );
$page = new WikiPage( $title );
+ $fileHandler = $this->getMockBuilder( FileContentHandler::class )
+ ->disableOriginalConstructor()
+ ->setMethods( [ 'getDataForSearchIndex' ] )
+ ->getMock();
+
$handler = $this->getMockBuilder( WikitextContentHandler::class )
->disableOriginalConstructor()
- ->setMethods( [ 'getFileText' ] )
+ ->setMethods( [ 'getFileHandler' ] )
->getMock();
- $handler->method( 'getFileText' )->will( $this->returnValue( 'This is file content' ) );
+
+ $handler->method( 'getFileHandler' )->will( $this->returnValue( $fileHandler ) );
+ $fileHandler->expects( $this->once() )
+ ->method( 'getDataForSearchIndex' )
+ ->will( $this->returnValue( [ 'file_text' => 'This is file content' ] ) );
$data = $handler->getDataForSearchIndex( $page, new ParserOutput(), $mockEngine );
$this->assertArrayHasKey( 'file_text', $data );
<?php
+
+use Wikimedia\ScopedCallback;
+
/**
* @author Matthias Mullie <mmullie@wikimedia.org>
* @group BagOStuff
$value1 = $this->cache->getScopedLock( $key, 0 );
$value2 = $this->cache->getScopedLock( $key, 0 );
- $this->assertType( 'ScopedCallback', $value1, 'First call returned lock' );
+ $this->assertType( ScopedCallback::class, $value1, 'First call returned lock' );
$this->assertNull( $value2, 'Duplicate call returned no lock' );
unset( $value1 );
$value3 = $this->cache->getScopedLock( $key, 0 );
- $this->assertType( 'ScopedCallback', $value3, 'Lock returned callback after release' );
+ $this->assertType( ScopedCallback::class, $value3, 'Lock returned callback after release' );
unset( $value3 );
$value1 = $this->cache->getScopedLock( $key, 0, 5, 'reentry' );
$value2 = $this->cache->getScopedLock( $key, 0, 5, 'reentry' );
- $this->assertType( 'ScopedCallback', $value1, 'First reentrant call returned lock' );
- $this->assertType( 'ScopedCallback', $value1, 'Second reentrant call returned lock' );
+ $this->assertType( ScopedCallback::class, $value1, 'First reentrant call returned lock' );
+ $this->assertType( ScopedCallback::class, $value1, 'Second reentrant call returned lock' );
}
/**
/**
* Override the singleton for unit testing
* @param SessionManager|null $manager
- * @return \\ScopedCallback|null
+ * @return \\Wikimedia\ScopedCallback|null
*/
public static function setSessionManagerSingleton( SessionManager $manager = null ) {
session_write_close();
}
/**
- * Test vectors from Appendix A on http://tools.ietf.org/html/rfc5869
+ * Test vectors from Appendix A on https://tools.ietf.org/html/rfc5869
*/
public static function providerRfc5869() {
* http://www.gnu.org/copyleft/gpl.html
*/
+use Composer\Spdx\SpdxLicenses;
+use JsonSchema\Validator;
+
/**
* Validates all loaded extensions and skins using the ExtensionRegistry
* against the extension.json schema in the docs/ folder.
public function setUp() {
parent::setUp();
- if ( !class_exists( 'JsonSchema\Uri\UriRetriever' ) ) {
+ if ( !class_exists( Validator::class ) ) {
$this->markTestSkipped(
'The JsonSchema library cannot be found,' .
' please install it through composer to run extension.json validation tests.'
"$path is using a non-supported schema version"
);
- $validator = new JsonSchema\Validator;
+ $licenseError = false;
+ if ( class_exists( SpdxLicenses::class ) && isset( $data->{'license-name'} )
+ // Check if it's a string, if not, schema validation will display an error
+ && is_string( $data->{'license-name'} )
+ ) {
+ $licenses = new SpdxLicenses();
+ $valid = $licenses->validate( $data->{'license-name'} );
+ if ( !$valid ) {
+ $licenseError = '[license-name] Invalid SPDX license identifier, '
+ . 'see <https://spdx.org/licenses/>';
+ }
+ }
+
+ $validator = new Validator;
$validator->check( $data, (object) [ '$ref' => 'file://' . $schemaPath ] );
- if ( $validator->isValid() ) {
+ if ( $validator->isValid() && !$licenseError ) {
// All good.
$this->assertTrue( true );
} else {
foreach ( $validator->getErrors() as $error ) {
$out .= "[{$error['property']}] {$error['message']}\n";
}
+ if ( $licenseError ) {
+ $out .= "$licenseError\n";
+ }
$this->assertTrue( false, $out );
}
}