Gabriel Wicke <gwicke@wikimedia.org> <gwicke@users.mediawiki.org>
Gabriel Wicke <gwicke@wikimedia.org> <wicke@wikidev.net>
Geoffrey Mon <geofbot@gmail.com>
+Geoffrey Trang <geoffreytrang@gmail.com>
Gergő Tisza <gtisza@wikimedia.org>
Gergő Tisza <gtisza@wikimedia.org> <tgr.huwiki@gmail.com>
Giftpflanze <gifti@tools.wmflabs.org>
Jackmcbarn <jackmcbarn@gmail.com>
Jackmcbarn <jackmcbarn@gmail.com> <jackmcbarn@users.noreply.github.com>
jagori <jagori79@gmail.com>
-James Forrester <jforrester@wikimedia.org>
+James D. Forrester <jforrester@wikimedia.org>
Jaime Crespo <jcrespo@wikimedia.org>
Jan Gerber <j@thing.net> <j@users.mediawiki.org>
Jan Luca Naumann <jan@jans-seite.de>
Matthew Britton <hugglegurch@gmail.com> <gurch@users.mediawiki.org>
Matthew Flaschen <mflaschen@wikimedia.org>
Matthew Walker <mwalker@wikimedia.org>
+MatthiasDD <Matthias_K2@gmx.de>
Matthias Mullie <git@mullie.eu>
Matthias Mullie <git@mullie.eu> <mmullie@wikimedia.org>
Matěj Grabovský <mgrabovsky@yahoo.com> <mgrabovsky@users.mediawiki.org>
physikerwelt (Moritz Schubotz) <wiki@physikerwelt.de>
PiRSquared17 <pirsquared@tools.wmflabs.org>
Platonides <platonides@gmail.com> <platonides@users.mediawiki.org>
+pppery <mapreader@olum.org>
PranavK <pranavmk98@gmail.com>
Prateek Saxena <psaxena@wikimedia.org>
Prateek Saxena <psaxena@wikimedia.org> <prtksxna@gmail.com>
Victor Vasiliev <vasilvv@mit.edu> <vasilvv@gmail.com>
Vikas S Yaligar <vikasyaligar.it@gmail.com>
Vivek Ghaisas <v.a.ghaisas@gmail.com>
+Volker E <volker.e@wikimedia.org>
wctaiwan <wctaiwan@gmail.com>
withoutaname <drevitchi@gmail.com>
X! <soxred93@gmail.com> <soxred93@users.mediawiki.org>
{{int:version-credits-summary}} <!--
-MediaWiki 1.29 is a collaborative project released under the
+MediaWiki 1.31 is a collaborative project released under the
GNU General Public License v2. We would like to recognize the
following names for their contribution to the product.
* Alex Z.
* Alexander I. Mashin
* Alexander Lehmann
+* Alexander Mashin
* Alexander Monk
* Alexander Sigachov
* Alexandre Emsenhuber
* Angela Beesley Starling
* ankur
* Antoine Musso
+* Antoni Siek
* Antonio Ospite
* apexkid
* April King
* Cindy Cicalese
* ckoerner
* Conrad Irwin
+* Cormac Parle
* cryptocoryne
* Dan Barrett
* Dan Collins
* Darkdragon09
* DaSch
* datguy
+* David Barratt
* David Baumgarten
* David Causse
* David Chan
* David Lynch
* David McCabe
* David Mudrák
+* David Sn
+* Dayllan Maza
* dcausse
* dennisroczek
* Denny Vrandecic
* Derk-Jan Hartman
* Derric Atzrott
* Derrick Coetzee
+* Deskana
* Dévai Tamás
* Devi Krishnan
* Diederik van Liere
* divadsn
+* Dmaza
* Domas Mituzas
* Douglas Gardner
* DPStokesNZ
* Eddie Greiner-Petter
* Edward Chernenko
* Edward Z. Yang
+* Egbe Eugene
* Elisabeth Bauer
* Elliott Eggleston
* Elvis Stansvik
* Emufarmers
* enigmaeth
* Entlinkt
+* Envel Le Hir
* Eranroz
* Eric Evans
* Eric Schneider
* ExplosiveHippo
* Faidon Liambotis
* Federico Leva
+* Felipe L. Ewald
* Fenzik Joseph
+* Filippo Giunchedi
* firebus
* Florian Schmidt
* fomafix
+* Framawiki
* Fran Rogers
* Fred Emmott
* FunPika
* Gary Guo
* gbt248
* Geoffrey Mon
+* GeoffreyT2000
* georggi
* Gergő Tisza
* Gero Scholz
* Giuseppe Lavagetto
* gladoscc
* glaisher
+* golopot
* Greg Maxwell
* Greg Sabino Mullane
* Gregory Szorc
* Helder
* Henning Snater
* Hojjat
+* Hoto Cocoa
* Huji
* Hydriz
* Ian Baker
+* Ian Marlier
* Ilmari Karonen
* Inez Korczyński
* IoannisKydonis
* Jaime Crespo
* Jakub Vrana
* James Earl Douglas
-* James Forrester
+* James D. Forrester
* Jan Berkel
* Jan Drewniak
* Jan Gerber
* jarry1250
* Jaska Zedlik
* Jason Richey
+* Jayprakash12345
* jeblad
* Jeff Hobson
* Jeff Janes
* Jerome Jamnicky
* Jesús Martínez Novo
* jhobs
+* jhsoby
* Jiabao
* Jidanni
* Jimmy Collins
* John N
* Jon Harald Søby
* Jon Robson
+* Jonathan
* Jonathan Wiltshire
* Jools Wills
* jsahleen
* Julian Ostrow
* Juliano F. Ravasi
+* Julien Girault
* Juliusz Gonera
* Jure Kajzer
* Justin Du
* Kartik Mistry
* Karun Dambiec
* Katie Filbert
+* KeerthanaS
* Kevin Israel
* Kghbln
* Kim Eik
* madurangasiriwardena
* Magnus Manske
* mainframe98
+* Mako Bates
* Manuel Menal
* Manuel Schneider
* Marc Ordinas i Llopis
* Marco Schuster
* MarcoAurelio
* Marcus Buck
+* Margaret Epps
* Marius Hoch
* Mark Bergsma
* Mark Clements
* Max Semenik
* Max Sikström
* mayankmadan
+* Mehmet Mert Yıldıran
* Meno25
* merl
* Merlijn S. van Deen
* nullspoon
* Nuria Ruiz
* Nx.devnull
+* Obaid Raza
* Ocean behind ears
* Od1n
* Olaf Lenz
* Pavel Selitskas
* Pcoombe
* Perside Rosalie
+* petarpetkovic
* Peter Coombe
* Peter Gehres
* Peter Hedenskog
* physikerwelt (Moritz Schubotz)
* PieRRoMaN
* Pikne
+* Piotr Miazga
* PiRSquared17
* Platonides
* Pmlineditor
* rahul21
* Raimond Spekking
* Ramunas Geciauskas
+* RazeSoldier
* Remember the dot
* René Kijewski
* Reza
* Ryan Kaldari
* Ryan Lane
* Ryan Schmidt
+* ryan10145
* S Page
* Salvatore Ingala
* Sam Reed
* Sébastien Santoro
* Sergio Santoro
* Sethakill
+* Sfic
* Shahyar
* Shane Gibbons
* Shane King
* shirayuki
* Sidhant Gupta
* Siebrand Mazeland
+* Simeon Dahl
* Simon Walker
* Smriti Singh
* Solitarius
* Subin Siby
* Subramanya Sastry
* Sumit Asthana
+* Suriyaa Kudo
* svip
* Szymon Świerkosz
* T.D. Corell
* UltrasonicNXT
* Umherirrender
* utkarsh95
+* Valerio Bozzolan
* Van de Bugger
* Viačeslav
* Victor Barbu
* Victor Porton
* Victor Vasiliev
* Ville Stadista
+* vinithegit
* vishnu
* Vitaliy Filippov
* Vivek Ghaisas
* Zhaofeng Li
* Zhengzhu Feng
* Zhuyifei1999
+* zoranzoki21
* Zppix
* محمد شعیب
<!-- END CONTRIBUTOR LIST -->
'BenchmarkLruHash' => __DIR__ . '/maintenance/benchmarks/benchmarkLruHash.php',
'BenchmarkParse' => __DIR__ . '/maintenance/benchmarks/benchmarkParse.php',
'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php',
+ 'BenchmarkSanitizer' => __DIR__ . '/maintenance/benchmarks/benchmarkSanitizer.php',
'BenchmarkTidy' => __DIR__ . '/maintenance/benchmarks/benchmarkTidy.php',
'Benchmarker' => __DIR__ . '/maintenance/benchmarks/Benchmarker.php',
'BitmapHandler' => __DIR__ . '/includes/media/Bitmap.php',
*/
$wgContentHandlers = [
// the usual case
- CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler',
+ CONTENT_MODEL_WIKITEXT => WikitextContentHandler::class,
// dumb version, no syntax highlighting
- CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler',
+ CONTENT_MODEL_JAVASCRIPT => JavaScriptContentHandler::class,
// simple implementation, for use by extensions, etc.
- CONTENT_MODEL_JSON => 'JsonContentHandler',
+ CONTENT_MODEL_JSON => JsonContentHandler::class,
// dumb version, no syntax highlighting
- CONTENT_MODEL_CSS => 'CssContentHandler',
+ CONTENT_MODEL_CSS => CssContentHandler::class,
// plain text, for use by extensions, etc.
- CONTENT_MODEL_TEXT => 'TextContentHandler',
+ CONTENT_MODEL_TEXT => TextContentHandler::class,
];
/**
* Whether to use SSL in DB connection.
*
* This setting is only used if $wgLBFactoryConf['class'] is set to
- * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise
+ * '\Wikimedia\Rdbms\LBFactorySimple' and $wgDBservers is an empty array; otherwise
* the DBO_SSL flag must be set in the 'flags' option of the database
* connection to achieve the same functionality.
*/
* Whether to use compression in DB connection.
*
* This setting is only used $wgLBFactoryConf['class'] is set to
- * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise
+ * '\Wikimedia\Rdbms\LBFactorySimple' and $wgDBservers is an empty array; otherwise
* the DBO_COMPRESS flag must be set in the 'flags' option of the database
* connection to achieve the same functionality.
*/
* The LBFactoryMulti class is provided for this purpose, please see
* includes/db/LBFactoryMulti.php for configuration information.
*/
-$wgLBFactoryConf = [ 'class' => 'LBFactorySimple' ];
+$wgLBFactoryConf = [ 'class' => \Wikimedia\Rdbms\LBFactorySimple::class ];
/**
* After a state-changing request is done by a client, this determines
* ];
* @endcode
*
- * Used by LBFactorySimple, may be ignored if $wgLBFactoryConf is set to
+ * Used by \Wikimedia\Rdbms\LBFactorySimple, may be ignored if $wgLBFactoryConf is set to
* another class.
*/
$wgExternalServers = [];
* given, giving a callable function which will generate a suitable cache object.
*/
$wgObjectCaches = [
- CACHE_NONE => [ 'class' => 'EmptyBagOStuff', 'reportDupes' => false ],
- CACHE_DB => [ 'class' => 'SqlBagOStuff', 'loggroup' => 'SQLBagOStuff' ],
+ CACHE_NONE => [ 'class' => EmptyBagOStuff::class, 'reportDupes' => false ],
+ CACHE_DB => [ 'class' => SqlBagOStuff::class, 'loggroup' => 'SQLBagOStuff' ],
CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
CACHE_ACCEL => [ 'factory' => 'ObjectCache::getLocalServerInstance' ],
- CACHE_MEMCACHED => [ 'class' => 'MemcachedPhpBagOStuff', 'loggroup' => 'memcached' ],
+ CACHE_MEMCACHED => [ 'class' => MemcachedPhpBagOStuff::class, 'loggroup' => 'memcached' ],
'db-replicated' => [
- 'class' => 'ReplicatedBagOStuff',
+ 'class' => ReplicatedBagOStuff::class,
'readFactory' => [
- 'class' => 'SqlBagOStuff',
+ 'class' => SqlBagOStuff::class,
'args' => [ [ 'slaveOnly' => true ] ]
],
'writeFactory' => [
- 'class' => 'SqlBagOStuff',
+ 'class' => SqlBagOStuff::class,
'args' => [ [ 'slaveOnly' => false ] ]
],
'loggroup' => 'SQLBagOStuff',
'reportDupes' => false
],
- 'apc' => [ 'class' => 'APCBagOStuff', 'reportDupes' => false ],
- 'apcu' => [ 'class' => 'APCUBagOStuff', 'reportDupes' => false ],
- 'xcache' => [ 'class' => 'XCacheBagOStuff', 'reportDupes' => false ],
- 'wincache' => [ 'class' => 'WinCacheBagOStuff', 'reportDupes' => false ],
- 'memcached-php' => [ 'class' => 'MemcachedPhpBagOStuff', 'loggroup' => 'memcached' ],
- 'memcached-pecl' => [ 'class' => 'MemcachedPeclBagOStuff', 'loggroup' => 'memcached' ],
- 'hash' => [ 'class' => 'HashBagOStuff', 'reportDupes' => false ],
+ 'apc' => [ 'class' => APCBagOStuff::class, 'reportDupes' => false ],
+ 'apcu' => [ 'class' => APCUBagOStuff::class, 'reportDupes' => false ],
+ 'xcache' => [ 'class' => XCacheBagOStuff::class, 'reportDupes' => false ],
+ 'wincache' => [ 'class' => WinCacheBagOStuff::class, 'reportDupes' => false ],
+ 'memcached-php' => [ 'class' => MemcachedPhpBagOStuff::class, 'loggroup' => 'memcached' ],
+ 'memcached-pecl' => [ 'class' => MemcachedPeclBagOStuff::class, 'loggroup' => 'memcached' ],
+ 'hash' => [ 'class' => HashBagOStuff::class, 'reportDupes' => false ],
];
/**
*/
$wgWANObjectCaches = [
CACHE_NONE => [
- 'class' => 'WANObjectCache',
+ 'class' => WANObjectCache::class,
'cacheId' => CACHE_NONE,
'channels' => []
]
/* Example of a simple single data-center cache:
'memcached-php' => [
- 'class' => 'WANObjectCache',
+ 'class' => WANObjectCache::class,
'cacheId' => 'memcached-php',
'channels' => [ 'purge' => 'wancache-main-memcached-purge' ]
]
* Use maintenance/rebuildLocalisationCache.php instead.
*/
$wgLocalisationCacheConf = [
- 'class' => 'LocalisationCache',
+ 'class' => LocalisationCache::class,
'store' => 'detect',
'storeClass' => false,
'storeDirectory' => false,
* an extension setup function.
*/
$wgParserConf = [
- 'class' => 'Parser',
- # 'preprocessorClass' => 'Preprocessor_Hash',
+ 'class' => Parser::class,
+ # 'preprocessorClass' => Preprocessor_Hash::class,
];
/**
* @since 1.27
*/
$wgCentralIdLookupProviders = [
- 'local' => [ 'class' => 'LocalIdLookup' ],
+ 'local' => [ 'class' => LocalIdLookup::class ],
];
/**
* An advanced example:
* @code
* $wgPasswordConfig['bcrypt-peppered'] = [
- * 'class' => 'EncryptedPassword',
+ * 'class' => EncryptedPassword::class,
* 'underlying' => 'bcrypt',
* 'secrets' => [],
* 'cipher' => MCRYPT_RIJNDAEL_256,
*/
$wgPasswordConfig = [
'A' => [
- 'class' => 'MWOldPassword',
+ 'class' => MWOldPassword::class,
],
'B' => [
- 'class' => 'MWSaltedPassword',
+ 'class' => MWSaltedPassword::class,
],
'pbkdf2-legacyA' => [
- 'class' => 'LayeredParameterizedPassword',
+ 'class' => LayeredParameterizedPassword::class,
'types' => [
'A',
'pbkdf2',
],
],
'pbkdf2-legacyB' => [
- 'class' => 'LayeredParameterizedPassword',
+ 'class' => LayeredParameterizedPassword::class,
'types' => [
'B',
'pbkdf2',
],
],
'bcrypt' => [
- 'class' => 'BcryptPassword',
+ 'class' => BcryptPassword::class,
'cost' => 9,
],
'pbkdf2' => [
- 'class' => 'Pbkdf2Password',
+ 'class' => Pbkdf2Password::class,
'algo' => 'sha512',
'cost' => '30000',
'length' => '64',
* Write SQL queries to the debug log.
*
* This setting is only used $wgLBFactoryConf['class'] is set to
- * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise
+ * '\Wikimedia\Rdbms\LBFactorySimple' and $wgDBservers is an empty array; otherwise
* the DBO_DEBUG flag must be set in the 'flags' option of the database
* connection to achieve the same functionality.
*/
*
* @par To completely disable logging:
* @code
- * $wgMWLoggerDefaultSpi = [ 'class' => '\\MediaWiki\\Logger\\NullSpi' ];
+ * $wgMWLoggerDefaultSpi = [ 'class' => \MediaWiki\Logger\NullSpi::class ];
* @endcode
*
* @since 1.25
* @see MwLogger
*/
$wgMWLoggerDefaultSpi = [
- 'class' => '\\MediaWiki\\Logger\\LegacySpi',
+ 'class' => \MediaWiki\Logger\LegacySpi::class,
];
/**
* 'omit_bots' => true,
* ];
* @example $wgRCFeeds['example'] = [
- * 'class' => 'ExampleRCFeed',
+ * 'class' => ExampleRCFeed::class,
* ];
* @since 1.22
*/
* @since 1.22
*/
$wgRCEngines = [
- 'redis' => 'RedisPubSubFeedEngine',
- 'udp' => 'UDPRCFeedEngine',
+ 'redis' => RedisPubSubFeedEngine::class,
+ 'udp' => UDPRCFeedEngine::class,
];
/**
* $wgOut->isSyndicated() is true.
*/
$wgFeedClasses = [
- 'rss' => 'RSSFeed',
- 'atom' => 'AtomFeed',
+ 'rss' => RSSFeed::class,
+ 'atom' => AtomFeed::class,
];
/**
* or (since 1.30) a callback to use for creating the job object.
*/
$wgJobClasses = [
- 'refreshLinks' => 'RefreshLinksJob',
- 'deleteLinks' => 'DeleteLinksJob',
- 'htmlCacheUpdate' => 'HTMLCacheUpdateJob',
- 'sendMail' => 'EmaillingJob',
- 'enotifNotify' => 'EnotifNotifyJob',
- 'fixDoubleRedirect' => 'DoubleRedirectJob',
- 'AssembleUploadChunks' => 'AssembleUploadChunksJob',
- 'PublishStashedFile' => 'PublishStashedFileJob',
- 'ThumbnailRender' => 'ThumbnailRenderJob',
- 'recentChangesUpdate' => 'RecentChangesUpdateJob',
- 'refreshLinksPrioritized' => 'RefreshLinksJob',
- 'refreshLinksDynamic' => 'RefreshLinksJob',
- 'activityUpdateJob' => 'ActivityUpdateJob',
- 'categoryMembershipChange' => 'CategoryMembershipChangeJob',
- 'clearUserWatchlist' => 'ClearUserWatchlistJob',
- 'cdnPurge' => 'CdnPurgeJob',
- 'enqueue' => 'EnqueueJob', // local queue for multi-DC setups
- 'null' => 'NullJob'
+ 'refreshLinks' => RefreshLinksJob::class,
+ 'deleteLinks' => DeleteLinksJob::class,
+ 'htmlCacheUpdate' => HTMLCacheUpdateJob::class,
+ 'sendMail' => EmaillingJob::class,
+ 'enotifNotify' => EnotifNotifyJob::class,
+ 'fixDoubleRedirect' => DoubleRedirectJob::class,
+ 'AssembleUploadChunks' => AssembleUploadChunksJob::class,
+ 'PublishStashedFile' => PublishStashedFileJob::class,
+ 'ThumbnailRender' => ThumbnailRenderJob::class,
+ 'recentChangesUpdate' => RecentChangesUpdateJob::class,
+ 'refreshLinksPrioritized' => RefreshLinksJob::class,
+ 'refreshLinksDynamic' => RefreshLinksJob::class,
+ 'activityUpdateJob' => ActivityUpdateJob::class,
+ 'categoryMembershipChange' => CategoryMembershipChangeJob::class,
+ 'clearUserWatchlist' => ClearUserWatchlistJob::class,
+ 'cdnPurge' => CdnPurgeJob::class,
+ 'enqueue' => EnqueueJob::class, // local queue for multi-DC setups
+ 'null' => NullJob::class,
];
/**
* These settings should be global to all wikis.
*/
$wgJobTypeConf = [
- 'default' => [ 'class' => 'JobQueueDB', 'order' => 'random', 'claimTTL' => 3600 ],
+ 'default' => [ 'class' => JobQueueDB::class, 'order' => 'random', 'claimTTL' => 3600 ],
];
/**
* These settings should be global to all wikis.
*/
$wgJobQueueAggregator = [
- 'class' => 'JobQueueAggregatorNull'
+ 'class' => JobQueueAggregatorNull::class
];
/**
* Expensive Querypages are already updated.
*/
$wgSpecialPageCacheUpdates = [
- 'Statistics' => [ 'SiteStatsUpdate', 'cacheUpdate' ]
+ 'Statistics' => [ SiteStatsUpdate::class, 'cacheUpdate' ]
];
/**
* @see LogFormatter
*/
$wgLogActionsHandlers = [
- 'block/block' => 'BlockLogFormatter',
- 'block/reblock' => 'BlockLogFormatter',
- 'block/unblock' => 'BlockLogFormatter',
- 'contentmodel/change' => 'ContentModelLogFormatter',
- 'contentmodel/new' => 'ContentModelLogFormatter',
- 'delete/delete' => 'DeleteLogFormatter',
- 'delete/delete_redir' => 'DeleteLogFormatter',
- 'delete/event' => 'DeleteLogFormatter',
- 'delete/restore' => 'DeleteLogFormatter',
- 'delete/revision' => 'DeleteLogFormatter',
- 'import/interwiki' => 'ImportLogFormatter',
- 'import/upload' => 'ImportLogFormatter',
- 'managetags/activate' => 'LogFormatter',
- 'managetags/create' => 'LogFormatter',
- 'managetags/deactivate' => 'LogFormatter',
- 'managetags/delete' => 'LogFormatter',
- 'merge/merge' => 'MergeLogFormatter',
- 'move/move' => 'MoveLogFormatter',
- 'move/move_redir' => 'MoveLogFormatter',
- 'patrol/patrol' => 'PatrolLogFormatter',
- 'patrol/autopatrol' => 'PatrolLogFormatter',
- 'protect/modify' => 'ProtectLogFormatter',
- 'protect/move_prot' => 'ProtectLogFormatter',
- 'protect/protect' => 'ProtectLogFormatter',
- 'protect/unprotect' => 'ProtectLogFormatter',
- 'rights/autopromote' => 'RightsLogFormatter',
- 'rights/rights' => 'RightsLogFormatter',
- 'suppress/block' => 'BlockLogFormatter',
- 'suppress/delete' => 'DeleteLogFormatter',
- 'suppress/event' => 'DeleteLogFormatter',
- 'suppress/reblock' => 'BlockLogFormatter',
- 'suppress/revision' => 'DeleteLogFormatter',
- 'tag/update' => 'TagLogFormatter',
- 'upload/overwrite' => 'UploadLogFormatter',
- 'upload/revert' => 'UploadLogFormatter',
- 'upload/upload' => 'UploadLogFormatter',
+ 'block/block' => BlockLogFormatter::class,
+ 'block/reblock' => BlockLogFormatter::class,
+ 'block/unblock' => BlockLogFormatter::class,
+ 'contentmodel/change' => ContentModelLogFormatter::class,
+ 'contentmodel/new' => ContentModelLogFormatter::class,
+ 'delete/delete' => DeleteLogFormatter::class,
+ 'delete/delete_redir' => DeleteLogFormatter::class,
+ 'delete/event' => DeleteLogFormatter::class,
+ 'delete/restore' => DeleteLogFormatter::class,
+ 'delete/revision' => DeleteLogFormatter::class,
+ 'import/interwiki' => ImportLogFormatter::class,
+ 'import/upload' => ImportLogFormatter::class,
+ 'managetags/activate' => LogFormatter::class,
+ 'managetags/create' => LogFormatter::class,
+ 'managetags/deactivate' => LogFormatter::class,
+ 'managetags/delete' => LogFormatter::class,
+ 'merge/merge' => MergeLogFormatter::class,
+ 'move/move' => MoveLogFormatter::class,
+ 'move/move_redir' => MoveLogFormatter::class,
+ 'patrol/patrol' => PatrolLogFormatter::class,
+ 'patrol/autopatrol' => PatrolLogFormatter::class,
+ 'protect/modify' => ProtectLogFormatter::class,
+ 'protect/move_prot' => ProtectLogFormatter::class,
+ 'protect/protect' => ProtectLogFormatter::class,
+ 'protect/unprotect' => ProtectLogFormatter::class,
+ 'rights/autopromote' => RightsLogFormatter::class,
+ 'rights/rights' => RightsLogFormatter::class,
+ 'suppress/block' => BlockLogFormatter::class,
+ 'suppress/delete' => DeleteLogFormatter::class,
+ 'suppress/event' => DeleteLogFormatter::class,
+ 'suppress/reblock' => BlockLogFormatter::class,
+ 'suppress/revision' => DeleteLogFormatter::class,
+ 'tag/update' => TagLogFormatter::class,
+ 'upload/overwrite' => UploadLogFormatter::class,
+ 'upload/revert' => UploadLogFormatter::class,
+ 'upload/upload' => UploadLogFormatter::class,
];
/**
'credits' => true,
'delete' => true,
'edit' => true,
- 'editchangetags' => 'SpecialPageAction',
+ 'editchangetags' => SpecialPageAction::class,
'history' => true,
'info' => true,
'markpatrolled' => true,
'raw' => true,
'render' => true,
'revert' => true,
- 'revisiondelete' => 'SpecialPageAction',
+ 'revisiondelete' => SpecialPageAction::class,
'rollback' => true,
'submit' => true,
'unprotect' => true,
* @code
* $wgAPIModules['foo'] = 'ApiFoo';
* $wgAPIModules['bar'] = [
- * 'class' => 'ApiBar',
+ * 'class' => ApiBar::class,
* 'factory' => function( $main, $name ) { ... }
* ];
* $wgAPIModules['xyzzy'] = [
- * 'class' => 'ApiXyzzy',
- * 'factory' => [ 'XyzzyFactory', 'newApiModule' ]
+ * 'class' => ApiXyzzy::class,
+ * 'factory' => [ XyzzyFactory::class, 'newApiModule' ]
* ];
* @endcode
*
* @par Example using local redis instance:
* @code
* $wgPoolCounterConf = [ 'ArticleView' => [
- * 'class' => 'PoolCounterRedis',
+ * 'class' => PoolCounterRedis::class,
* 'timeout' => 15, // wait timeout in seconds
* 'workers' => 1, // maximum number of active threads in each pool
* 'maxqueue' => 5, // maximum number of total threads in each pool
* @par Example using C daemon from https://www.mediawiki.org/wiki/Extension:PoolCounter:
* @code
* $wgPoolCounterConf = [ 'ArticleView' => [
- * 'class' => 'PoolCounter_Client',
+ * 'class' => PoolCounter_Client::class,
* 'timeout' => 15, // wait timeout in seconds
* 'workers' => 5, // maximum number of active threads in each pool
* 'maxqueue' => 50, // maximum number of total threads in each pool
* @since 1.20
*/
$wgSiteTypes = [
- 'mediawiki' => 'MediaWikiSite',
+ 'mediawiki' => MediaWikiSite::class,
];
/**
* Auto-mounting example for Parsoid:
*
* $wgVirtualRestConfig['paths']['/parsoid/'] = [
- * 'class' => 'ParsoidVirtualRESTService',
+ * 'class' => ParsoidVirtualRESTService::class,
* 'options' => [
* 'url' => 'http://localhost:8000',
* 'prefix' => 'enwiki',
*/
$wgEventRelayerConfig = [
'default' => [
- 'class' => 'EventRelayerNull',
+ 'class' => EventRelayerNull::class,
]
];
$displayTitle = $contextTitle->getPrefixedText();
}
$out->setPageTitle( $this->context->msg( $msg, $displayTitle ) );
+
+ $config = $this->context->getConfig();
+
# Transmit the name of the message to JavaScript for live preview
# Keep Resources.php/mediawiki.action.edit.preview in sync with the possible keys
$out->addJsConfigVars( [
'wgEditMessage' => $msg,
- 'wgAjaxEditStash' => $this->context->getConfig()->get( 'AjaxEditStash' ),
+ 'wgAjaxEditStash' => $config->get( 'AjaxEditStash' ),
] );
+
+ // Add whether to use 'save' or 'publish' messages to JavaScript for post-edit, other
+ // editors, etc.
+ $out->addJsConfigVars(
+ 'wgEditSubmitButtonLabelPublish',
+ $config->get( 'EditSubmitButtonLabelPublish' )
+ );
}
/**
// autoload entries for the lowercase variants of these classes (T166759).
// The code below is never executed, but it is picked up by the AutoloadGenerator
// parser, which scans for class_alias() calls.
- class_alias( 'ConcatenatedGzipHistoryBlob', 'concatenatedgziphistoryblob' );
- class_alias( 'HistoryBlobCurStub', 'historyblobcurstub' );
- class_alias( 'HistoryBlobStub', 'historyblobstub' );
+ class_alias( ConcatenatedGzipHistoryBlob::class, 'concatenatedgziphistoryblob' );
+ class_alias( HistoryBlobCurStub::class, 'historyblobcurstub' );
+ class_alias( HistoryBlobStub::class, 'historyblobstub' );
}
public static function getFormObject(
$user,
IContextSource $context,
- $formClass = 'PreferencesForm',
+ $formClass = PreferencesForm::class,
array $remove = []
) {
$preferencesFactory = self::getDefaultPreferencesFactory();
*/
$wgLockManagers[] = [
'name' => 'fsLockManager',
- 'class' => 'FSLockManager',
+ 'class' => FSLockManager::class,
'lockDirectory' => "{$wgUploadDirectory}/lockdir",
];
$wgLockManagers[] = [
'name' => 'nullLockManager',
- 'class' => 'NullLockManager',
+ 'class' => NullLockManager::class,
];
/**
*/
if ( !$wgLocalFileRepo ) {
$wgLocalFileRepo = [
- 'class' => 'LocalRepo',
+ 'class' => LocalRepo::class,
'name' => 'local',
'directory' => $wgUploadDirectory,
'scriptDirUrl' => $wgScriptPath,
if ( $wgUseSharedUploads ) {
if ( $wgSharedUploadDBname ) {
$wgForeignFileRepos[] = [
- 'class' => 'ForeignDBRepo',
+ 'class' => ForeignDBRepo::class,
'name' => 'shared',
'directory' => $wgSharedUploadDirectory,
'url' => $wgSharedUploadPath,
];
} else {
$wgForeignFileRepos[] = [
- 'class' => 'FileRepo',
+ 'class' => FileRepo::class,
'name' => 'shared',
'directory' => $wgSharedUploadDirectory,
'url' => $wgSharedUploadPath,
}
if ( $wgUseInstantCommons ) {
$wgForeignFileRepos[] = [
- 'class' => 'ForeignAPIRepo',
+ 'class' => ForeignAPIRepo::class,
'name' => 'wikimediacommons',
'apibase' => 'https://commons.wikimedia.org/w/api.php',
'url' => 'https://upload.wikimedia.org/wikipedia/commons',
$wgLocalFileRepo['backend'] = $wgLocalFileRepo['name'] . '-backend';
}
foreach ( $wgForeignFileRepos as &$repo ) {
- if ( !isset( $repo['directory'] ) && $repo['class'] === 'ForeignAPIRepo' ) {
+ if ( !isset( $repo['directory'] ) && $repo['class'] === ForeignAPIRepo::class ) {
$repo['directory'] = $wgUploadDirectory; // b/c
}
if ( !isset( $repo['backend'] ) ) {
$wgLogTypes[] = 'newusers';
$wgLogNames['newusers'] = 'newuserlogpage';
$wgLogHeaders['newusers'] = 'newuserlogpagetext';
- $wgLogActionsHandlers['newusers/newusers'] = 'NewUsersLogFormatter';
- $wgLogActionsHandlers['newusers/create'] = 'NewUsersLogFormatter';
- $wgLogActionsHandlers['newusers/create2'] = 'NewUsersLogFormatter';
- $wgLogActionsHandlers['newusers/byemail'] = 'NewUsersLogFormatter';
- $wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
+ $wgLogActionsHandlers['newusers/newusers'] = NewUsersLogFormatter::class;
+ $wgLogActionsHandlers['newusers/create'] = NewUsersLogFormatter::class;
+ $wgLogActionsHandlers['newusers/create2'] = NewUsersLogFormatter::class;
+ $wgLogActionsHandlers['newusers/byemail'] = NewUsersLogFormatter::class;
+ $wgLogActionsHandlers['newusers/autocreate'] = NewUsersLogFormatter::class;
}
if ( $wgPageLanguageUseDB ) {
$wgLogTypes[] = 'pagelang';
- $wgLogActionsHandlers['pagelang/pagelang'] = 'PageLangLogFormatter';
+ $wgLogActionsHandlers['pagelang/pagelang'] = PageLangLogFormatter::class;
}
if ( $wgCookieSecure === 'detect' ) {
// Sites using multiple datacenters can configure a relayer.
$wgMainWANCache = 'mediawiki-main-default';
$wgWANObjectCaches[$wgMainWANCache] = [
- 'class' => 'WANObjectCache',
+ 'class' => WANObjectCache::class,
'cacheId' => $wgMainCacheType,
'channels' => [ 'purge' => 'wancache-main-default-purge' ]
];
public function response() {
/* Lazy initialization of response object for this request */
if ( !is_object( $this->response ) ) {
- $class = ( $this instanceof FauxRequest ) ? 'FauxResponse' : 'WebResponse';
+ $class = ( $this instanceof FauxRequest ) ? FauxResponse::class : WebResponse::class;
$this->response = new $class();
}
return $this->response;
protected function parseMultiValue( $valueName, $value, $allowMultiple, $allowedValues,
$allSpecifier = null, $limit1 = null, $limit2 = null
) {
- if ( ( trim( $value ) === '' || trim( $value ) === "\x1f" ) && $allowMultiple ) {
+ if ( ( $value === '' || $value === "\x1f" ) && $allowMultiple ) {
return [];
}
$limit1 = $limit1 ?: self::LIMIT_SML1;
* List of available modules: action name => module class
*/
private static $Modules = [
- 'login' => 'ApiLogin',
- 'clientlogin' => 'ApiClientLogin',
- 'logout' => 'ApiLogout',
- 'createaccount' => 'ApiAMCreateAccount',
- 'linkaccount' => 'ApiLinkAccount',
- 'unlinkaccount' => 'ApiRemoveAuthenticationData',
- 'changeauthenticationdata' => 'ApiChangeAuthenticationData',
- 'removeauthenticationdata' => 'ApiRemoveAuthenticationData',
- 'resetpassword' => 'ApiResetPassword',
- 'query' => 'ApiQuery',
- 'expandtemplates' => 'ApiExpandTemplates',
- 'parse' => 'ApiParse',
- 'stashedit' => 'ApiStashEdit',
- 'opensearch' => 'ApiOpenSearch',
- 'feedcontributions' => 'ApiFeedContributions',
- 'feedrecentchanges' => 'ApiFeedRecentChanges',
- 'feedwatchlist' => 'ApiFeedWatchlist',
- 'help' => 'ApiHelp',
- 'paraminfo' => 'ApiParamInfo',
- 'rsd' => 'ApiRsd',
- 'compare' => 'ApiComparePages',
- 'tokens' => 'ApiTokens',
- 'checktoken' => 'ApiCheckToken',
- 'cspreport' => 'ApiCSPReport',
- 'validatepassword' => 'ApiValidatePassword',
+ 'login' => ApiLogin::class,
+ 'clientlogin' => ApiClientLogin::class,
+ 'logout' => ApiLogout::class,
+ 'createaccount' => ApiAMCreateAccount::class,
+ 'linkaccount' => ApiLinkAccount::class,
+ 'unlinkaccount' => ApiRemoveAuthenticationData::class,
+ 'changeauthenticationdata' => ApiChangeAuthenticationData::class,
+ 'removeauthenticationdata' => ApiRemoveAuthenticationData::class,
+ 'resetpassword' => ApiResetPassword::class,
+ 'query' => ApiQuery::class,
+ 'expandtemplates' => ApiExpandTemplates::class,
+ 'parse' => ApiParse::class,
+ 'stashedit' => ApiStashEdit::class,
+ 'opensearch' => ApiOpenSearch::class,
+ 'feedcontributions' => ApiFeedContributions::class,
+ 'feedrecentchanges' => ApiFeedRecentChanges::class,
+ 'feedwatchlist' => ApiFeedWatchlist::class,
+ 'help' => ApiHelp::class,
+ 'paraminfo' => ApiParamInfo::class,
+ 'rsd' => ApiRsd::class,
+ 'compare' => ApiComparePages::class,
+ 'tokens' => ApiTokens::class,
+ 'checktoken' => ApiCheckToken::class,
+ 'cspreport' => ApiCSPReport::class,
+ 'validatepassword' => ApiValidatePassword::class,
// Write modules
- 'purge' => 'ApiPurge',
- 'setnotificationtimestamp' => 'ApiSetNotificationTimestamp',
- 'rollback' => 'ApiRollback',
- 'delete' => 'ApiDelete',
- 'undelete' => 'ApiUndelete',
- 'protect' => 'ApiProtect',
- 'block' => 'ApiBlock',
- 'unblock' => 'ApiUnblock',
- 'move' => 'ApiMove',
- 'edit' => 'ApiEditPage',
- 'upload' => 'ApiUpload',
- 'filerevert' => 'ApiFileRevert',
- 'emailuser' => 'ApiEmailUser',
- 'watch' => 'ApiWatch',
- 'patrol' => 'ApiPatrol',
- 'import' => 'ApiImport',
- 'clearhasmsg' => 'ApiClearHasMsg',
- 'userrights' => 'ApiUserrights',
- 'options' => 'ApiOptions',
- 'imagerotate' => 'ApiImageRotate',
- 'revisiondelete' => 'ApiRevisionDelete',
- 'managetags' => 'ApiManageTags',
- 'tag' => 'ApiTag',
- 'mergehistory' => 'ApiMergeHistory',
- 'setpagelanguage' => 'ApiSetPageLanguage',
+ 'purge' => ApiPurge::class,
+ 'setnotificationtimestamp' => ApiSetNotificationTimestamp::class,
+ 'rollback' => ApiRollback::class,
+ 'delete' => ApiDelete::class,
+ 'undelete' => ApiUndelete::class,
+ 'protect' => ApiProtect::class,
+ 'block' => ApiBlock::class,
+ 'unblock' => ApiUnblock::class,
+ 'move' => ApiMove::class,
+ 'edit' => ApiEditPage::class,
+ 'upload' => ApiUpload::class,
+ 'filerevert' => ApiFileRevert::class,
+ 'emailuser' => ApiEmailUser::class,
+ 'watch' => ApiWatch::class,
+ 'patrol' => ApiPatrol::class,
+ 'import' => ApiImport::class,
+ 'clearhasmsg' => ApiClearHasMsg::class,
+ 'userrights' => ApiUserrights::class,
+ 'options' => ApiOptions::class,
+ 'imagerotate' => ApiImageRotate::class,
+ 'revisiondelete' => ApiRevisionDelete::class,
+ 'managetags' => ApiManageTags::class,
+ 'tag' => ApiTag::class,
+ 'mergehistory' => ApiMergeHistory::class,
+ 'setpagelanguage' => ApiSetPageLanguage::class,
];
/**
* List of available formats: format name => format class
*/
private static $Formats = [
- 'json' => 'ApiFormatJson',
- 'jsonfm' => 'ApiFormatJson',
- 'php' => 'ApiFormatPhp',
- 'phpfm' => 'ApiFormatPhp',
- 'xml' => 'ApiFormatXml',
- 'xmlfm' => 'ApiFormatXml',
- 'rawfm' => 'ApiFormatJson',
- 'none' => 'ApiFormatNone',
+ 'json' => ApiFormatJson::class,
+ 'jsonfm' => ApiFormatJson::class,
+ 'php' => ApiFormatPhp::class,
+ 'phpfm' => ApiFormatPhp::class,
+ 'xml' => ApiFormatXml::class,
+ 'xmlfm' => ApiFormatXml::class,
+ 'rawfm' => ApiFormatJson::class,
+ 'none' => ApiFormatNone::class,
];
/**
* @code
* $modules['foo'] = 'ApiFoo';
* $modules['bar'] = [
- * 'class' => 'ApiBar',
+ * 'class' => ApiBar::class,
* 'factory' => function( $main, $name ) { ... }
* ];
* $modules['xyzzy'] = [
- * 'class' => 'ApiXyzzy',
- * 'factory' => [ 'XyzzyFactory', 'newApiModule' ]
+ * 'class' => ApiXyzzy::class,
+ * 'factory' => [ XyzzyFactory::class, 'newApiModule' ]
* ];
* @endcode
*
$prefix = $query->getModulePath() . '+';
$mgr = $query->getModuleManager();
foreach ( $mgr->getNamesWithClasses() as $name => $class ) {
- if ( is_subclass_of( $class, 'ApiQueryGeneratorBase' ) ) {
+ if ( is_subclass_of( $class, ApiQueryGeneratorBase::class ) ) {
$gens[$name] = $prefix . $name;
}
}
* @var array
*/
private static $QueryPropModules = [
- 'categories' => 'ApiQueryCategories',
- 'categoryinfo' => 'ApiQueryCategoryInfo',
- 'contributors' => 'ApiQueryContributors',
- 'deletedrevisions' => 'ApiQueryDeletedRevisions',
- 'duplicatefiles' => 'ApiQueryDuplicateFiles',
- 'extlinks' => 'ApiQueryExternalLinks',
- 'fileusage' => 'ApiQueryBacklinksprop',
- 'images' => 'ApiQueryImages',
- 'imageinfo' => 'ApiQueryImageInfo',
- 'info' => 'ApiQueryInfo',
- 'links' => 'ApiQueryLinks',
- 'linkshere' => 'ApiQueryBacklinksprop',
- 'iwlinks' => 'ApiQueryIWLinks',
- 'langlinks' => 'ApiQueryLangLinks',
- 'pageprops' => 'ApiQueryPageProps',
- 'redirects' => 'ApiQueryBacklinksprop',
- 'revisions' => 'ApiQueryRevisions',
- 'stashimageinfo' => 'ApiQueryStashImageInfo',
- 'templates' => 'ApiQueryLinks',
- 'transcludedin' => 'ApiQueryBacklinksprop',
+ 'categories' => ApiQueryCategories::class,
+ 'categoryinfo' => ApiQueryCategoryInfo::class,
+ 'contributors' => ApiQueryContributors::class,
+ 'deletedrevisions' => ApiQueryDeletedRevisions::class,
+ 'duplicatefiles' => ApiQueryDuplicateFiles::class,
+ 'extlinks' => ApiQueryExternalLinks::class,
+ 'fileusage' => ApiQueryBacklinksprop::class,
+ 'images' => ApiQueryImages::class,
+ 'imageinfo' => ApiQueryImageInfo::class,
+ 'info' => ApiQueryInfo::class,
+ 'links' => ApiQueryLinks::class,
+ 'linkshere' => ApiQueryBacklinksprop::class,
+ 'iwlinks' => ApiQueryIWLinks::class,
+ 'langlinks' => ApiQueryLangLinks::class,
+ 'pageprops' => ApiQueryPageProps::class,
+ 'redirects' => ApiQueryBacklinksprop::class,
+ 'revisions' => ApiQueryRevisions::class,
+ 'stashimageinfo' => ApiQueryStashImageInfo::class,
+ 'templates' => ApiQueryLinks::class,
+ 'transcludedin' => ApiQueryBacklinksprop::class,
];
/**
* @var array
*/
private static $QueryListModules = [
- 'allcategories' => 'ApiQueryAllCategories',
- 'alldeletedrevisions' => 'ApiQueryAllDeletedRevisions',
- 'allfileusages' => 'ApiQueryAllLinks',
- 'allimages' => 'ApiQueryAllImages',
- 'alllinks' => 'ApiQueryAllLinks',
- 'allpages' => 'ApiQueryAllPages',
- 'allredirects' => 'ApiQueryAllLinks',
- 'allrevisions' => 'ApiQueryAllRevisions',
- 'mystashedfiles' => 'ApiQueryMyStashedFiles',
- 'alltransclusions' => 'ApiQueryAllLinks',
- 'allusers' => 'ApiQueryAllUsers',
- 'backlinks' => 'ApiQueryBacklinks',
- 'blocks' => 'ApiQueryBlocks',
- 'categorymembers' => 'ApiQueryCategoryMembers',
- 'deletedrevs' => 'ApiQueryDeletedrevs',
- 'embeddedin' => 'ApiQueryBacklinks',
- 'exturlusage' => 'ApiQueryExtLinksUsage',
- 'filearchive' => 'ApiQueryFilearchive',
- 'imageusage' => 'ApiQueryBacklinks',
- 'iwbacklinks' => 'ApiQueryIWBacklinks',
- 'langbacklinks' => 'ApiQueryLangBacklinks',
- 'logevents' => 'ApiQueryLogEvents',
- 'pageswithprop' => 'ApiQueryPagesWithProp',
- 'pagepropnames' => 'ApiQueryPagePropNames',
- 'prefixsearch' => 'ApiQueryPrefixSearch',
- 'protectedtitles' => 'ApiQueryProtectedTitles',
- 'querypage' => 'ApiQueryQueryPage',
- 'random' => 'ApiQueryRandom',
- 'recentchanges' => 'ApiQueryRecentChanges',
- 'search' => 'ApiQuerySearch',
- 'tags' => 'ApiQueryTags',
- 'usercontribs' => 'ApiQueryContributions',
- 'users' => 'ApiQueryUsers',
- 'watchlist' => 'ApiQueryWatchlist',
- 'watchlistraw' => 'ApiQueryWatchlistRaw',
+ 'allcategories' => ApiQueryAllCategories::class,
+ 'alldeletedrevisions' => ApiQueryAllDeletedRevisions::class,
+ 'allfileusages' => ApiQueryAllLinks::class,
+ 'allimages' => ApiQueryAllImages::class,
+ 'alllinks' => ApiQueryAllLinks::class,
+ 'allpages' => ApiQueryAllPages::class,
+ 'allredirects' => ApiQueryAllLinks::class,
+ 'allrevisions' => ApiQueryAllRevisions::class,
+ 'mystashedfiles' => ApiQueryMyStashedFiles::class,
+ 'alltransclusions' => ApiQueryAllLinks::class,
+ 'allusers' => ApiQueryAllUsers::class,
+ 'backlinks' => ApiQueryBacklinks::class,
+ 'blocks' => ApiQueryBlocks::class,
+ 'categorymembers' => ApiQueryCategoryMembers::class,
+ 'deletedrevs' => ApiQueryDeletedrevs::class,
+ 'embeddedin' => ApiQueryBacklinks::class,
+ 'exturlusage' => ApiQueryExtLinksUsage::class,
+ 'filearchive' => ApiQueryFilearchive::class,
+ 'imageusage' => ApiQueryBacklinks::class,
+ 'iwbacklinks' => ApiQueryIWBacklinks::class,
+ 'langbacklinks' => ApiQueryLangBacklinks::class,
+ 'logevents' => ApiQueryLogEvents::class,
+ 'pageswithprop' => ApiQueryPagesWithProp::class,
+ 'pagepropnames' => ApiQueryPagePropNames::class,
+ 'prefixsearch' => ApiQueryPrefixSearch::class,
+ 'protectedtitles' => ApiQueryProtectedTitles::class,
+ 'querypage' => ApiQueryQueryPage::class,
+ 'random' => ApiQueryRandom::class,
+ 'recentchanges' => ApiQueryRecentChanges::class,
+ 'search' => ApiQuerySearch::class,
+ 'tags' => ApiQueryTags::class,
+ 'usercontribs' => ApiQueryContributions::class,
+ 'users' => ApiQueryUsers::class,
+ 'watchlist' => ApiQueryWatchlist::class,
+ 'watchlistraw' => ApiQueryWatchlistRaw::class,
];
/**
* @var array
*/
private static $QueryMetaModules = [
- 'allmessages' => 'ApiQueryAllMessages',
- 'authmanagerinfo' => 'ApiQueryAuthManagerInfo',
- 'siteinfo' => 'ApiQuerySiteinfo',
- 'userinfo' => 'ApiQueryUserInfo',
- 'filerepoinfo' => 'ApiQueryFileRepoInfo',
- 'tokens' => 'ApiQueryTokens',
+ 'allmessages' => ApiQueryAllMessages::class,
+ 'authmanagerinfo' => ApiQueryAuthManagerInfo::class,
+ 'siteinfo' => ApiQuerySiteinfo::class,
+ 'userinfo' => ApiQueryUserInfo::class,
+ 'filerepoinfo' => ApiQueryFileRepoInfo::class,
+ 'tokens' => ApiQueryTokens::class,
];
/**
}
$this->tokenFunctions = [
- 'edit' => [ 'ApiQueryInfo', 'getEditToken' ],
- 'delete' => [ 'ApiQueryInfo', 'getDeleteToken' ],
- 'protect' => [ 'ApiQueryInfo', 'getProtectToken' ],
- 'move' => [ 'ApiQueryInfo', 'getMoveToken' ],
- 'block' => [ 'ApiQueryInfo', 'getBlockToken' ],
- 'unblock' => [ 'ApiQueryInfo', 'getUnblockToken' ],
- 'email' => [ 'ApiQueryInfo', 'getEmailToken' ],
- 'import' => [ 'ApiQueryInfo', 'getImportToken' ],
- 'watch' => [ 'ApiQueryInfo', 'getWatchToken' ],
+ 'edit' => [ self::class, 'getEditToken' ],
+ 'delete' => [ self::class, 'getDeleteToken' ],
+ 'protect' => [ self::class, 'getProtectToken' ],
+ 'move' => [ self::class, 'getMoveToken' ],
+ 'block' => [ self::class, 'getBlockToken' ],
+ 'unblock' => [ self::class, 'getUnblockToken' ],
+ 'email' => [ self::class, 'getEmailToken' ],
+ 'import' => [ self::class, 'getImportToken' ],
+ 'watch' => [ self::class, 'getWatchToken' ],
];
Hooks::run( 'APIQueryInfoTokens', [ &$this->tokenFunctions ] );
$this->everything = $this->titles + $this->missing;
$result = $this->getResult();
- uasort( $this->everything, [ 'Title', 'compare' ] );
+ uasort( $this->everything, [ Title::class, 'compare' ] );
if ( !is_null( $this->params['continue'] ) ) {
// Throw away any titles we're gonna skip so they don't
// clutter queries
}
$this->tokenFunctions = [
- 'patrol' => [ 'ApiQueryRecentChanges', 'getPatrolToken' ]
+ 'patrol' => [ self::class, 'getPatrolToken' ]
];
Hooks::run( 'APIQueryRecentChangesTokens', [ &$this->tokenFunctions ] );
}
$this->tokenFunctions = [
- 'rollback' => [ 'ApiQueryRevisions', 'getRollbackToken' ]
+ 'rollback' => [ self::class, 'getRollbackToken' ]
];
Hooks::run( 'APIQueryRevisionsTokens', [ &$this->tokenFunctions ] );
foreach ( $myWgHooks as $name => $subscribers ) {
$arr = [
'name' => $name,
- 'subscribers' => array_map( [ 'SpecialVersion', 'arrayToString' ], $subscribers ),
+ 'subscribers' => array_map( [ SpecialVersion::class, 'arrayToString' ], $subscribers ),
];
ApiResult::setArrayType( $arr['subscribers'], 'array' );
}
$this->tokenFunctions = [
- 'userrights' => [ 'ApiQueryUsers', 'getUserrightsToken' ],
+ 'userrights' => [ self::class, 'getUserrightsToken' ],
];
Hooks::run( 'APIQueryUsersTokens', [ &$this->tokenFunctions ] );
if ( $types ) {
return $types;
}
- $types = [ 'patrol' => [ 'ApiQueryRecentChanges', 'getPatrolToken' ] ];
+ $types = [ 'patrol' => [ ApiQueryRecentChanges::class, 'getPatrolToken' ] ];
$names = [ 'edit', 'delete', 'protect', 'move', 'block', 'unblock',
'email', 'import', 'watch', 'options' ];
foreach ( $names as $name ) {
- $types[$name] = [ 'ApiQueryInfo', 'get' . ucfirst( $name ) . 'Token' ];
+ $types[$name] = [ ApiQueryInfo::class, 'get' . ucfirst( $name ) . 'Token' ];
}
Hooks::run( 'ApiTokensGetTokenTypes', [ &$types ] );
*/
protected function handleStashException( $e ) {
switch ( get_class( $e ) ) {
- case 'UploadStashFileNotFoundException':
+ case UploadStashFileNotFoundException::class:
$wrap = 'apierror-stashedfilenotfound';
break;
- case 'UploadStashBadPathException':
+ case UploadStashBadPathException::class:
$wrap = 'apierror-stashpathinvalid';
break;
- case 'UploadStashFileException':
+ case UploadStashFileException::class:
$wrap = 'apierror-stashfilestorage';
break;
- case 'UploadStashZeroLengthFileException':
+ case UploadStashZeroLengthFileException::class:
$wrap = 'apierror-stashzerolength';
break;
- case 'UploadStashNotLoggedInException':
+ case UploadStashNotLoggedInException::class:
return StatusValue::newFatal( ApiMessage::create(
[ 'apierror-mustbeloggedin', $this->msg( 'action-upload' ) ], 'stashnotloggedin'
) );
- case 'UploadStashWrongOwnerException':
+ case UploadStashWrongOwnerException::class:
$wrap = 'apierror-stashwrongowner';
break;
- case 'UploadStashNoSuchKeyException':
+ case UploadStashNoSuchKeyException::class:
$wrap = 'apierror-stashnosuchfilekey';
break;
default:
"Tacsipacsi"
]
},
- "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fehler und Warnungen]].\n\n<strong>Testen:</strong> Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fehler und Warnungen]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testen:</strong> Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].</p>",
"apihelp-main-param-action": "Auszuführende Aktion.",
"apihelp-main-param-format": "Format der Ausgabe.",
"apihelp-main-param-maxlag": "maxlag kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um weitere Replikationsrückstände zu verhindern, lässt dieser Parameter den Client warten, bis der Replikationsrückstand kleiner als der angegebene Wert (in Sekunden) ist. Bei einem größerem Rückstand wird der Fehlercode <samp>maxlag</samp> zurückgegeben mit einer Nachricht wie <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Siehe [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Handbuch: Maxlag parameter]] für weitere Informationen.",
},
"apihelp-main-summary": "",
- "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testing:</strong> For ease of testing API requests, see [[Special:ApiSandbox]].",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testing:</strong> For ease of testing API requests, see [[Special:ApiSandbox]].</p>",
"apihelp-main-param-action": "Which action to perform.",
"apihelp-main-param-format": "The format of the output.",
"apihelp-main-param-maxlag": "Maximum lag can be used when MediaWiki is installed on a database replicated cluster. To save actions causing any more site replication lag, this parameter can make the client wait until the replication lag is less than the specified value. In case of excessive lag, error code <samp>maxlag</samp> is returned with a message like <samp>Waiting for $host: $lag seconds lagged</samp>.<br />See [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] for more information.",
"apihelp-opensearch-param-suggest": "کاری نکنید اگر <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> false است.",
"apihelp-opensearch-param-format": "فرمت خروجی.",
"apihelp-opensearch-example-te": "یافتن صفحههایی که با <kbd>Te</kbd> آغاز میشوند",
+ "apihelp-options-summary": "تغییر ترجیحات کاربر جاری",
"apihelp-options-param-reset": "ترجیحات را به مقادیر پیش فرض سایت بازمی گرداند.",
"apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
"apihelp-paraminfo-param-helpformat": "ساختار راهنمای رشتهها",
"Kenjiraw"
]
},
- "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet entête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Test :</strong> Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet entête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<p class=\"mw-apisandbox-link\"><strong>Test :</strong> Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].</p>",
"apihelp-main-param-action": "Quelle action effectuer.",
"apihelp-main-param-format": "Le format de sortie.",
"apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur <samp>maxlag</samp> est renvoyé avec un message tel que <samp>Attente de $host : $lag secondes de délai</samp>.<br />Voyez [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.",
"Margherita.mignanelli"
]
},
- "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentazione]] (in inglese)\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]] (in inglese)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma le API sono ancora in fase attiva di sviluppo, e potrebbero cambiare in qualsiasi momento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la mailing list sugli annunci delle API MediaWiki] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite alle API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e, sia il valore dell'intestazione, sia il codice d'errore, verranno impostati con lo stesso valore. Per maggiori informazioni leggi [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Errori ed avvertimenti]] (in inglese).\n\n<strong>Test:</strong> per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentazione]] (in inglese)\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]] (in inglese)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma le API sono ancora in fase attiva di sviluppo, e potrebbero cambiare in qualsiasi momento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la mailing list sugli annunci delle API MediaWiki] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite alle API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e, sia il valore dell'intestazione, sia il codice d'errore, verranno impostati con lo stesso valore. Per maggiori informazioni leggi [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Errori ed avvertimenti]] (in inglese).\n\n<p class=\"mw-apisandbox-link\"><strong>Test:</strong> per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].</p>",
"apihelp-main-param-action": "Azione da compiere.",
"apihelp-main-param-format": "Formato dell'output.",
"apihelp-main-param-assert": "Verifica che l'utente abbia effettuato l'accesso se si è impostato <kbd>user</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
"Hamilton Abreu",
"Mansil",
"Felipe L. Ewald",
- "Athena in Wonderland"
+ "Athena in Wonderland",
+ "Waldir"
]
},
- "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentação]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e pedidos]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página devem ter o comportamento documentado, mas a API ainda está em desenvolvimento ativo e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, será devolvido um cabeçalho HTTP com a chave \"MediaWiki-API-Error\" e depois tanto o valor desse cabeçalho como o código de erro devolvido serão definidos com o mesmo valor. Para mais informação, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Erros e avisos]].\n\n<strong>Testes:</strong> Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].",
+ "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentação]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e pedidos]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página devem ter o comportamento documentado, mas a API ainda está em desenvolvimento ativo e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, será devolvido um cabeçalho HTTP com a chave \"MediaWiki-API-Error\" e depois tanto o valor desse cabeçalho como o código de erro devolvido serão definidos com o mesmo valor. Para mais informação, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Erros e avisos]].\n\n<p class=\"mw-apisandbox-link\">\n<strong>Testes:</strong> Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].\n</p>",
"apihelp-main-param-action": "A operação a ser realizada.",
"apihelp-main-param-format": "O formato do resultado.",
- "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki é instalado num ''cluster'' de bases de dados replicadas. Para impedir que as operações causem ainda mais atrasos de replicação do ''site'', este parâmetro pode fazer o cliente aguardar até que o atraso de replicação seja inferior ao valor especificado. Caso o atraso atual exceda esse valor, o código de erro <samp>maxlag</samp> é devolvido com uma mensagem como <samp>À espera do servidor $host: $lag segundos de atraso</samp>.<br />Consulte [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Parâmetro maxlag]] para mais informações.",
+ "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki é instalado num ''cluster'' de bases de dados replicadas. Para impedir que as operações causem ainda mais atrasos de replicação do sítio, este parâmetro pode fazer o cliente aguardar até que o atraso de replicação seja inferior ao valor especificado. Caso o atraso atual exceda esse valor, o código de erro <samp>maxlag</samp> é devolvido com uma mensagem como <samp>À espera do servidor $host: $lag segundos de atraso</samp>.<br />Consulte [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Parâmetro maxlag]] para mais informações.",
"apihelp-main-param-smaxage": "Definir no cabeçalho HTTP <code>s-maxage</code> de controlo da cache este número de segundos. Os erros nunca são armazenados na cache.",
"apihelp-main-param-maxage": "Definir no cabeçalho HTTP <code>max-age</code> de controlo da cache este número de segundos. Os erros nunca são armazenados na cache.",
"apihelp-main-param-assert": "Se definido com o valor <kbd>user</kbd>, verificar que o utilizador está autenticado. Se definido com o valor <kbd>bot</kbd>, verificar que o utilizador tem o privilégio de conta robô.",
"apihelp-opensearch-example-te": "Encontrar as páginas que começam por <kbd>Te</kbd>.",
"apihelp-options-summary": "Alterar as preferências do utilizador atual.",
"apihelp-options-extended-description": "Só podem ser definidas as opções que estão registadas no núcleo do MediaWiki ou numa das extensões instaladas, ou opções cuja chave tem o prefixo <code>userjs-</code> (que são supostas ser usadas por ''scripts'' de utilizador).",
- "apihelp-options-param-reset": "Reiniciar preferências para os valores por omissão do ''site''.",
+ "apihelp-options-param-reset": "Reiniciar preferências para os valores por omissão do sítio.",
"apihelp-options-param-resetkinds": "Lista dos tipos de opções a reiniciar quando a opção <var>$1reset</var> está definida.",
"apihelp-options-param-change": "Listas das alterações, na forma nome=valor (isto é, skin=vector). Se não for fornecido nenhum valor (nem sequer um sinal de igualdade), por exemplo, nomedaopção|outraopção|..., a opção será reiniciada para o seu valor por omissão. Se qualquer dos valores passados contém uma barra vertical (<kbd>|</kbd>), use um [[Special:ApiHelp/main#main/datatypes|separador alternativo para valores múltiplos]] de forma a obter o comportamento correto.",
"apihelp-options-param-optionname": "O nome da opção que deve ser configurada com o valor dado por <var>$1optionvalue</var>.",
"apihelp-purge-example-simple": "Purgar as páginas <kbd>Main Page</kbd> e <kbd>API</kbd>.",
"apihelp-purge-example-generator": "Purgar as primeiras 10 páginas no espaço nominal principal.",
"apihelp-query-summary": "Obter dados de, e sobre, o MediaWiki.",
- "apihelp-query-extended-description": "Todas as modificações de dados terão primeiro que usar uma consulta para adquirir uma chave, o que visa impedir abusos de sites maliciosos.",
+ "apihelp-query-extended-description": "Todas as modificações de dados terão primeiro que usar uma consulta para adquirir uma chave, o que visa impedir abusos de sítios maliciosos.",
"apihelp-query-param-prop": "As propriedades a serem obtidas para as páginas consultadas.",
"apihelp-query-param-list": "As listas a serem obtidas.",
"apihelp-query-param-meta": "Os metadados a serem obtidos.",
"apihelp-query-param-exportnowrap": "Devolver o XML de exportação sem envolvê-lo num resultado XML (o mesmo formato que [[Special:Export]]). Só pode ser usado com $1export.",
"apihelp-query-param-iwurl": "Indica se deve ser obtido o URL completo quando o título é uma hiperligação interwikis.",
"apihelp-query-param-rawcontinue": "Devolver os dados em bruto de <samp>query-continue</samp> para continuar.",
- "apihelp-query-example-revisions": "Obter [[Special:ApiHelp/query+siteinfo|informação do ''site'']] e as [[Special:ApiHelp/query+revisions|revisões]] da página <kbd>Main Page</kbd>.",
+ "apihelp-query-example-revisions": "Obter [[Special:ApiHelp/query+siteinfo|informação do sítio]] e as [[Special:ApiHelp/query+revisions|revisões]] da página <kbd>Main Page</kbd>.",
"apihelp-query-example-allpages": "Obter as revisões das páginas que começam por <kbd>API/</kbd>.",
"apihelp-query+allcategories-summary": "Enumerar todas as categorias.",
"apihelp-query+allcategories-param-from": "A categoria a partir da qual será começada a enumeração.",
"apihelp-query+alllinks-example-unique": "Listar os títulos únicos para os quais existem hiperligações.",
"apihelp-query+alllinks-example-unique-generator": "Obtém todos os títulos para os quais existem hiperligações, marcando aqueles em falta.",
"apihelp-query+alllinks-example-generator": "Obtém as páginas que contêm as ligações.",
- "apihelp-query+allmessages-summary": "Devolver as mensagens deste ''site''.",
+ "apihelp-query+allmessages-summary": "Devolver as mensagens deste sítio.",
"apihelp-query+allmessages-param-messages": "Mensagens a serem produzidas no resultado. <kbd>*</kbd> (o valor por omissão) significa todas as mensagens.",
"apihelp-query+allmessages-param-prop": "As propriedades a serem obtidas:",
"apihelp-query+allmessages-param-enableparser": "Definir para ativar o analisador sintático; irá pré-processar o texto wiki da mensagem (substituir palavras mágicas, processar predefinições, etc.).",
"apihelp-query+embeddedin-example-simple": "Mostrar as páginas que transcluem <kbd>Template:Stub</kbd>.",
"apihelp-query+embeddedin-example-generator": "Obter informação sobre as páginas que transcluem <kbd>Template:Stub</kbd>.",
"apihelp-query+extlinks-summary": "Devolve todos os URL externos (que não sejam interwikis) das páginas especificadas.",
- "apihelp-query+extlinks-param-limit": "O número de ''links'' a serem devolvidos.",
+ "apihelp-query+extlinks-param-limit": "O número de hiperligações a serem devolvidas.",
"apihelp-query+extlinks-param-protocol": "Protocolo do URL. Se vazio e <var>$1query</var> está definido, o protocolo é <kbd>http</kbd>. Deixe este parâmetro e <var>$1query</var> vazios para listar todas as hiperligações externas.",
"apihelp-query+extlinks-param-query": "Texto de pesquisa sem protocolo. Útil para verificar se uma determinada página contém um determinado URL externo.",
"apihelp-query+extlinks-param-expandurl": "Expandir os URL relativos a protocolo com o protocolo canónico.",
"apihelp-query+info-param-token": "Em substituição, usar [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
"apihelp-query+info-example-simple": "Obter informações sobre a página <kbd>Main Page</kbd>.",
"apihelp-query+info-example-protection": "Obter informação geral e de proteção sobre a página <kbd>Main Page</kbd>.",
- "apihelp-query+iwbacklinks-summary": "Encontrar todas as páginas que contêm ''links'' para as páginas indicadas.",
+ "apihelp-query+iwbacklinks-summary": "Encontrar todas as páginas que contêm hiperligações para as páginas indicadas.",
"apihelp-query+iwbacklinks-extended-description": "Pode ser usado para encontrar todas as hiperligações com um prefixo, ou todas as hiperligações para um título (com um prefixo especificado). Se nenhum dos parâmetros for usado, isso efetivamente significa \"todas as hiperligações interwikis\".",
"apihelp-query+iwbacklinks-param-prefix": "O prefixo interwikis.",
"apihelp-query+iwbacklinks-param-title": "A hiperligação interwikis a ser procurada. Tem de ser usado em conjunto com <var>$1blprefix</var>.",
"apihelp-query+langlinks-example-simple": "Obter as hiperligações interlínguas da página <kbd>Main Page</kbd>.",
"apihelp-query+links-summary": "Devolve todas as hiperligações das páginas indicadas.",
"apihelp-query+links-param-namespace": "Mostrar apenas as hiperligações destes espaços nominais.",
- "apihelp-query+links-param-limit": "O número de ''links'' a serem devolvidos.",
+ "apihelp-query+links-param-limit": "O número de hiperligações a serem devolvidas.",
"apihelp-query+links-param-titles": "Listar só as hiperligações para estes títulos. Útil para verificar se uma determinada página contém hiperligações para um determinado título.",
"apihelp-query+links-param-dir": "A direção de listagem.",
- "apihelp-query+links-example-simple": "Obter os ''links'' da página <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-simple": "Obter as hiperligações da página <kbd>Main Page</kbd>.",
"apihelp-query+links-example-generator": "Obter informação sobre as páginas ligadas na página <kbd>Main Page</kbd>.",
"apihelp-query+links-example-namespaces": "Obter as hiperligações da página <kbd>Main Page</kbd> nos espaços nominais {{ns:user}} e {{ns:template}}.",
"apihelp-query+linkshere-summary": "Encontrar todas as páginas que contêm hiperligações para as páginas indicadas.",
"apihelp-query+search-example-simple": "Pesquisar <kbd>meaning</kbd>.",
"apihelp-query+search-example-text": "Pesquisar <kbd>meaning</kbd> nos textos.",
"apihelp-query+search-example-generator": "Obter informação sobre as páginas devolvidas por uma pesquisa do termo <kbd>meaning</kbd>.",
- "apihelp-query+siteinfo-summary": "Devolver informação geral sobre o ''site''.",
+ "apihelp-query+siteinfo-summary": "Devolver informação geral sobre o sítio.",
"apihelp-query+siteinfo-param-prop": "A informação a ser obtida:",
"apihelp-query+siteinfo-paramvalue-prop-general": "Informação global do sistema.",
"apihelp-query+siteinfo-paramvalue-prop-namespaces": "Uma lista dos espaços nominais registados e dos seus nomes canónicos.",
"apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Uma lista dos nomes alternativos dos espaços nominais registados.",
"apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Uma lista dos nomes alternativos das páginas especiais.",
"apihelp-query+siteinfo-paramvalue-prop-magicwords": "Uma lista das palavras mágicas e dos seus nomes alternativos.",
- "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devolve as estatísticas do ''site''.",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devolve as estatísticas do sítio.",
"apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Devolve o mapa de interwikis (opcionalmente filtrado, opcionalmente localizado usando <var>$1inlanguagecode</var>).",
"apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devolve o servidor da base de dados com o maior atraso de replicação.",
"apihelp-query+siteinfo-paramvalue-prop-usergroups": "Devolve os grupos de utilizadores e as permissões associadas.",
"apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Devolve uma lista dos ''hooks'' de funções do analisador sintático.",
"apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve uma lista de todos os ''hooks'' subscritos (conteúdo de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
"apihelp-query+siteinfo-paramvalue-prop-variables": "Devolve uma lista de identificadores de variáveis.",
- "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devolve uma lista dos protocolos permitidos nos ''links'' externos.",
+ "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devolve uma lista dos protocolos permitidos nas hiperligações externas.",
"apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devolve os valores padrão para as preferências dos utilizadores.",
"apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Devolve a configuração do diálogo de carregamento.",
"apihelp-query+siteinfo-param-filteriw": "Devolver só as entradas locais, ou só as não locais, do mapa de interwikis.",
"apihelp-query+siteinfo-param-showalldb": "Listar todos os servidores da base de dados, não só aquele que tem maior atraso.",
"apihelp-query+siteinfo-param-numberingroup": "Lista o número de utilizadores nos grupos de utilizadores.",
"apihelp-query+siteinfo-param-inlanguagecode": "O código de língua dos nomes localizados (o melhor possível) das línguas e dos temas.",
- "apihelp-query+siteinfo-example-simple": "Obter as informações do ''site''.",
+ "apihelp-query+siteinfo-example-simple": "Obter as informações do sítio.",
"apihelp-query+siteinfo-example-interwiki": "Obter uma lista dos prefixos interwikis locais.",
"apihelp-query+siteinfo-example-replag": "Verificar o atraso de replicação atual.",
"apihelp-query+stashimageinfo-summary": "Devolve informações dos ficheiros escondidos.",
$wgParser->firstCallInit();
# Clone it and store it
$class = $wgParserConf['class'];
- if ( $class == 'ParserDiffTest' ) {
+ if ( $class == ParserDiffTest::class ) {
# Uncloneable
$this->mParser = new $class( $wgParserConf );
} else {
switch ( $conf['store'] ) {
case 'files':
case 'file':
- $storeClass = 'LCStoreCDB';
+ $storeClass = LCStoreCDB::class;
break;
case 'db':
- $storeClass = 'LCStoreDB';
+ $storeClass = LCStoreDB::class;
break;
case 'array':
- $storeClass = 'LCStoreStaticArray';
+ $storeClass = LCStoreStaticArray::class;
break;
case 'detect':
if ( !empty( $conf['storeDirectory'] ) ) {
- $storeClass = 'LCStoreCDB';
+ $storeClass = LCStoreCDB::class;
} elseif ( $wgCacheDirectory ) {
$storeConf['directory'] = $wgCacheDirectory;
- $storeClass = 'LCStoreCDB';
+ $storeClass = LCStoreCDB::class;
} else {
- $storeClass = 'LCStoreDB';
+ $storeClass = LCStoreDB::class;
}
break;
default:
$this->timestamp = $revision->getTimestamp();
}
$this->revision = $revision;
- $this->newForCategorizationCallback = [ 'RecentChange', 'newForCategorization' ];
+ $this->newForCategorizationCallback = [ RecentChange::class, 'newForCategorization' ];
}
/**
sort( $prevTags );
sort( $newTags );
if ( $prevTags == $newTags ) {
- // No change.
return false;
}
if ( !$newTags ) {
- // no tags left, so delete the row altogether
+ // No tags left, so delete the row altogether
$dbw->delete( 'tag_summary', $tsConds, __METHOD__ );
} else {
- $dbw->replace( 'tag_summary',
- [ 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ],
- array_filter( array_merge( $tsConds, [ 'ts_tags' => implode( ',', $newTags ) ] ) ),
- __METHOD__
- );
+ // Specify the non-DEFAULT value columns in the INSERT/REPLACE clause
+ $row = array_filter( [ 'ts_tags' => implode( ',', $newTags ) ] + $tsConds );
+ // Check the unique keys for conflicts, ignoring any NULL *_id values
+ $uniqueKeys = [];
+ foreach ( [ 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ] as $uniqueColumn ) {
+ if ( isset( $row[$uniqueColumn] ) ) {
+ $uniqueKeys[] = [ $uniqueColumn ];
+ }
+ }
+
+ $dbw->replace( 'tag_summary', $uniqueKeys, $row, __METHOD__ );
}
return true;
) {
switch ( $typeName ) {
case 'revision':
- $className = 'ChangeTagsRevisionList';
+ $className = ChangeTagsRevisionList::class;
break;
case 'logentry':
- $className = 'ChangeTagsLogList';
+ $className = ChangeTagsLogList::class;
break;
default:
throw new Exception( "Class $typeName requested, but does not exist" );
return $e['code'];
}
- function affectedRows() {
+ protected function fetchAffectedRowCount() {
return $this->mAffectedRows;
}
// When making changes here, remember to also specify MediaWiki-specific options
// for Database classes in the relevant Installer subclass.
// Such as MysqlInstaller::openConnection and PostgresInstaller::openConnectionWithParams.
- if ( $lbConf['class'] === 'LBFactorySimple' ) {
+ if ( $lbConf['class'] === Wikimedia\Rdbms\LBFactorySimple::class ) {
if ( isset( $lbConf['servers'] ) ) {
// Server array is already explicitly configured; leave alone
} elseif ( is_array( $mainConfig->get( 'DBservers' ) ) ) {
if ( !isset( $lbConf['externalClusters'] ) ) {
$lbConf['externalClusters'] = $mainConfig->get( 'ExternalServers' );
}
- } elseif ( $lbConf['class'] === 'LBFactoryMulti' ) {
+ } elseif ( $lbConf['class'] === Wikimedia\Rdbms\LBFactoryMulti::class ) {
if ( isset( $lbConf['serverTemplate'] ) ) {
if ( in_array( $lbConf['serverTemplate']['type'], $typesWithSchema, true ) ) {
$lbConf['serverTemplate']['schema'] = $mainConfig->get( 'DBmwschema' );
* Usage:
* @code
* $wgMWLoggerDefaultSpi = [
- * 'class' => '\\MediaWiki\\Logger\\LegacySpi',
+ * 'class' => \MediaWiki\Logger\LegacySpi::class,
* ];
* @endcode
*
* default SPI provider:
* @code
* $wgMWLoggerDefaultSpi = [
- * 'class' => '\\MediaWiki\\Logger\\MonologSpi',
+ * 'class' => \MediaWiki\Logger\MonologSpi::class,
* 'args' => [ [
* 'loggers' => [
* '@default' => [
* ],
* 'processors' => [
* 'wiki' => [
- * 'class' => '\\MediaWiki\\Logger\\Monolog\\WikiProcessor',
+ * 'class' => \MediaWiki\Logger\Monolog\WikiProcessor::class,
* ],
* 'psr' => [
- * 'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
+ * 'class' => \Monolog\Processor\PsrLogMessageProcessor::class,
* ],
* 'pid' => [
- * 'class' => '\\Monolog\\Processor\\ProcessIdProcessor',
+ * 'class' => \Monolog\Processor\ProcessIdProcessor::class,
* ],
* 'uid' => [
- * 'class' => '\\Monolog\\Processor\\UidProcessor',
+ * 'class' => \Monolog\Processor\UidProcessor::class,
* ],
* 'web' => [
- * 'class' => '\\Monolog\\Processor\\WebProcessor',
+ * 'class' => \Monolog\Processor\WebProcessor::class,
* ],
* ],
* 'handlers' => [
* 'stream' => [
- * 'class' => '\\Monolog\\Handler\\StreamHandler',
+ * 'class' => \Monolog\Handler\StreamHandler::class,
* 'args' => [ 'path/to/your.log' ],
* 'formatter' => 'line',
* ],
* 'redis' => [
- * 'class' => '\\Monolog\\Handler\\RedisHandler',
+ * 'class' => \Monolog\Handler\RedisHandler::class,
* 'args' => [ function() {
* $redis = new Redis();
* $redis->connect( '127.0.0.1', 6379 );
* 'buffer' => true,
* ],
* 'udp2log' => [
- * 'class' => '\\MediaWiki\\Logger\\Monolog\\LegacyHandler',
+ * 'class' => \MediaWiki\Logger\Monolog\LegacyHandler::class,
* 'args' => [
* 'udp://127.0.0.1:8420/mediawiki
* ],
* ],
* 'formatters' => [
* 'line' => [
- * 'class' => '\\Monolog\\Formatter\\LineFormatter',
+ * 'class' => \Monolog\Formatter\LineFormatter::class,
* ],
* 'logstash' => [
- * 'class' => '\\Monolog\\Formatter\\LogstashFormatter',
+ * 'class' => \Monolog\Formatter\LogstashFormatter::class,
* 'args' => [ 'mediawiki', php_uname( 'n' ), null, '', 1 ],
* ],
* ],
* Usage:
*
* $wgMWLoggerDefaultSpi = [
- * 'class' => '\\MediaWiki\\Logger\\NullSpi',
+ * 'class' => \MediaWiki\Logger\NullSpi::class,
* ];
*
* @see \MediaWiki\Logger\LoggerFactory
global $wgLang;
foreach ( $this->getTrace() as $frame ) {
- if ( isset( $frame['class'] ) && $frame['class'] === 'LocalisationCache' ) {
+ if ( isset( $frame['class'] ) && $frame['class'] === LocalisationCache::class ) {
return false;
}
}
$logger = LoggerFactory::getInstance( 'fatal' );
$logger->error( $msg, [
'fatal_exception' => [
- 'class' => 'ErrorException',
+ 'class' => ErrorException::class,
'message' => "PHP Fatal Error: {$message}",
'code' => $level,
'file' => $file,
private static function useOutputPage( $e ) {
// Can the extension use the Message class/wfMessage to get i18n-ed messages?
foreach ( $e->getTrace() as $frame ) {
- if ( isset( $frame['class'] ) && $frame['class'] === 'LocalisationCache' ) {
+ if ( isset( $frame['class'] ) && $frame['class'] === LocalisationCache::class ) {
return false;
}
}
// Get the FS backend configuration
$autoBackends[] = [
'name' => $backendName,
- 'class' => 'FSFileBackend',
+ 'class' => FSFileBackend::class,
'lockManager' => 'fsLockManager',
'containerPaths' => [
"{$repoName}-public" => "{$directory}",
$config = $this->config( $name );
$class = $config['class'];
- if ( $class === 'FileBackendMultiWrite' ) {
+ if ( $class === FileBackendMultiWrite::class ) {
foreach ( $config['backends'] as $index => $beConfig ) {
if ( isset( $beConfig['template'] ) ) {
// Config is just a modified version of a registered backend's.
'wikiId' => wfWikiID(), // e.g. "my_wiki-en_"
'mimeCallback' => [ $this, 'guessMimeInternal' ],
'obResetFunc' => 'wfResetOutputBuffers',
- 'streamMimeFunc' => [ 'StreamFile', 'contentTypeFromPath' ],
+ 'streamMimeFunc' => [ StreamFile::class, 'contentTypeFromPath' ],
'tmpDirectory' => wfTempDir(),
- 'statusWrapper' => [ 'Status', 'wrap' ],
+ 'statusWrapper' => [ Status::class, 'wrap' ],
'wanCache' => MediaWikiServices::getInstance()->getMainWANObjectCache(),
'srvCache' => ObjectCache::getLocalServerInstance( 'hash' ),
'logger' => LoggerFactory::getInstance( 'FileOperation' ),
LockManagerGroup::singleton( $config['wikiId'] )->get( $config['lockManager'] );
$config['fileJournal'] = isset( $config['fileJournal'] )
? FileJournal::factory( $config['fileJournal'], $name )
- : FileJournal::factory( [ 'class' => 'NullFileJournal' ], $name );
+ : FileJournal::factory( [ 'class' => NullFileJournal::class ], $name );
return $config;
}
if ( !isset( $this->managers[$name]['instance'] ) ) {
$class = $this->managers[$name]['class'];
$config = $this->managers[$name]['config'];
- if ( $class === 'DBLockManager' ) {
+ if ( $class === DBLockManager::class ) {
$lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
$lb = $lbFactory->newMainLB( $config['domain'] );
$dbw = $lb->getLazyConnectionRef( DB_MASTER, [], $config['domain'] );
protected $isPrivate;
/** @var array callable Override these in the base class */
- protected $fileFactory = [ 'UnregisteredLocalFile', 'newFromTitle' ];
+ protected $fileFactory = [ UnregisteredLocalFile::class, 'newFromTitle' ];
/** @var array callable|bool Override these in the base class */
protected $oldFileFactory = false;
/** @var array callable|bool Override these in the base class */
* @return Status
*/
public function newFatal( $message /*, parameters...*/ ) {
- $status = call_user_func_array( [ 'Status', 'newFatal' ], func_get_args() );
+ $status = call_user_func_array( [ Status::class, 'newFatal' ], func_get_args() );
$status->cleanCallback = $this->getErrorCleanupFunction();
return $status;
* Example config:
*
* $wgForeignFileRepos[] = [
- * 'class' => 'ForeignAPIRepo',
+ * 'class' => ForeignAPIRepo::class,
* 'name' => 'shared',
* 'apibase' => 'https://en.wikipedia.org/w/api.php',
* 'fetchDescription' => true, // Optional
'timestamp',
];
- protected $fileFactory = [ 'ForeignAPIFile', 'newFromTitle' ];
+ protected $fileFactory = [ ForeignAPIFile::class, 'newFromTitle' ];
/** @var int Check back with Commons after this expiry */
protected $apiThumbCacheExpiry = 86400; // 1 day (24*3600)
protected $dbConn;
/** @var callable */
- protected $fileFactory = [ 'ForeignDBFile', 'newFromTitle' ];
+ protected $fileFactory = [ ForeignDBFile::class, 'newFromTitle' ];
/** @var callable */
- protected $fileFromRowFactory = [ 'ForeignDBFile', 'newFromRow' ];
+ protected $fileFromRowFactory = [ ForeignDBFile::class, 'newFromRow' ];
/**
* @param array|null $info
protected $tablePrefix;
/** @var array */
- protected $fileFactory = [ 'ForeignDBFile', 'newFromTitle' ];
+ protected $fileFactory = [ ForeignDBFile::class, 'newFromTitle' ];
/** @var array */
- protected $fileFromRowFactory = [ 'ForeignDBFile', 'newFromRow' ];
+ protected $fileFromRowFactory = [ ForeignDBFile::class, 'newFromRow' ];
/** @var bool */
protected $hasSharedCache;
*/
class LocalRepo extends FileRepo {
/** @var callable */
- protected $fileFactory = [ 'LocalFile', 'newFromTitle' ];
+ protected $fileFactory = [ LocalFile::class, 'newFromTitle' ];
/** @var callable */
- protected $fileFactoryKey = [ 'LocalFile', 'newFromKey' ];
+ protected $fileFactoryKey = [ LocalFile::class, 'newFromKey' ];
/** @var callable */
- protected $fileFromRowFactory = [ 'LocalFile', 'newFromRow' ];
+ protected $fileFromRowFactory = [ LocalFile::class, 'newFromRow' ];
/** @var callable */
- protected $oldFileFromRowFactory = [ 'OldLocalFile', 'newFromRow' ];
+ protected $oldFileFromRowFactory = [ OldLocalFile::class, 'newFromRow' ];
/** @var callable */
- protected $oldFileFactory = [ 'OldLocalFile', 'newFromTitle' ];
+ protected $oldFileFactory = [ OldLocalFile::class, 'newFromTitle' ];
/** @var callable */
- protected $oldFileFactoryKey = [ 'OldLocalFile', 'newFromKey' ];
+ protected $oldFileFactoryKey = [ OldLocalFile::class, 'newFromKey' ];
function __construct( array $info = null ) {
parent::__construct( $info );
protected $isSafeFile;
/** @var string Required Repository class type */
- protected $repoClass = 'FileRepo';
+ protected $repoClass = FileRepo::class;
/** @var array Cache of tmp filepaths pointing to generated bucket thumbnails, keyed by width */
protected $tmpBucketedThumbCache = [];
/** @var array */
private $mInfo = [];
- protected $repoClass = 'ForeignApiRepo';
+ protected $repoClass = ForeignApiRepo::class;
/**
* @param Title|string|bool $title
protected $deleted;
/** @var string */
- protected $repoClass = 'LocalRepo';
+ protected $repoClass = LocalRepo::class;
/** @var int Number of line to return by nextHistoryLine() (constructor) */
private $historyLine;
private static function loadModes() {
if ( self::$modeMapping === false ) {
self::$modeMapping = [
- 'traditional' => 'TraditionalImageGallery',
- 'nolines' => 'NolinesImageGallery',
- 'packed' => 'PackedImageGallery',
- 'packed-hover' => 'PackedHoverImageGallery',
- 'packed-overlay' => 'PackedOverlayImageGallery',
- 'slideshow' => 'SlideshowImageGallery',
+ 'traditional' => TraditionalImageGallery::class,
+ 'nolines' => NolinesImageGallery::class,
+ 'packed' => PackedImageGallery::class,
+ 'packed-hover' => PackedHoverImageGallery::class,
+ 'packed-overlay' => PackedOverlayImageGallery::class,
+ 'slideshow' => SlideshowImageGallery::class,
];
// Allow extensions to make a new gallery format.
Hooks::run( 'GalleryGetModes', [ &self::$modeMapping ] );
class HTMLForm extends ContextSource {
// A mapping of 'type' inputs onto standard HTMLFormField subclasses
public static $typeMappings = [
- 'api' => 'HTMLApiField',
- 'text' => 'HTMLTextField',
- 'textwithbutton' => 'HTMLTextFieldWithButton',
- 'textarea' => 'HTMLTextAreaField',
- 'select' => 'HTMLSelectField',
- 'combobox' => 'HTMLComboboxField',
- 'radio' => 'HTMLRadioField',
- 'multiselect' => 'HTMLMultiSelectField',
- 'limitselect' => 'HTMLSelectLimitField',
- 'check' => 'HTMLCheckField',
- 'toggle' => 'HTMLCheckField',
- 'int' => 'HTMLIntField',
- 'float' => 'HTMLFloatField',
- 'info' => 'HTMLInfoField',
- 'selectorother' => 'HTMLSelectOrOtherField',
- 'selectandother' => 'HTMLSelectAndOtherField',
- 'namespaceselect' => 'HTMLSelectNamespace',
- 'namespaceselectwithbutton' => 'HTMLSelectNamespaceWithButton',
- 'tagfilter' => 'HTMLTagFilter',
- 'sizefilter' => 'HTMLSizeFilterField',
- 'submit' => 'HTMLSubmitField',
- 'hidden' => 'HTMLHiddenField',
- 'edittools' => 'HTMLEditTools',
- 'checkmatrix' => 'HTMLCheckMatrix',
- 'cloner' => 'HTMLFormFieldCloner',
- 'autocompleteselect' => 'HTMLAutoCompleteSelectField',
- 'date' => 'HTMLDateTimeField',
- 'time' => 'HTMLDateTimeField',
- 'datetime' => 'HTMLDateTimeField',
+ 'api' => HTMLApiField::class,
+ 'text' => HTMLTextField::class,
+ 'textwithbutton' => HTMLTextFieldWithButton::class,
+ 'textarea' => HTMLTextAreaField::class,
+ 'select' => HTMLSelectField::class,
+ 'combobox' => HTMLComboboxField::class,
+ 'radio' => HTMLRadioField::class,
+ 'multiselect' => HTMLMultiSelectField::class,
+ 'limitselect' => HTMLSelectLimitField::class,
+ 'check' => HTMLCheckField::class,
+ 'toggle' => HTMLCheckField::class,
+ 'int' => HTMLIntField::class,
+ 'float' => HTMLFloatField::class,
+ 'info' => HTMLInfoField::class,
+ 'selectorother' => HTMLSelectOrOtherField::class,
+ 'selectandother' => HTMLSelectAndOtherField::class,
+ 'namespaceselect' => HTMLSelectNamespace::class,
+ 'namespaceselectwithbutton' => HTMLSelectNamespaceWithButton::class,
+ 'tagfilter' => HTMLTagFilter::class,
+ 'sizefilter' => HTMLSizeFilterField::class,
+ 'submit' => HTMLSubmitField::class,
+ 'hidden' => HTMLHiddenField::class,
+ 'edittools' => HTMLEditTools::class,
+ 'checkmatrix' => HTMLCheckMatrix::class,
+ 'cloner' => HTMLFormFieldCloner::class,
+ 'autocompleteselect' => HTMLAutoCompleteSelectField::class,
+ 'date' => HTMLDateTimeField::class,
+ 'time' => HTMLDateTimeField::class,
+ 'datetime' => HTMLDateTimeField::class,
// HTMLTextField will output the correct type="" attribute automagically.
// There are about four zillion other HTML5 input types, like range, but
// we don't use those at the moment, so no point in adding all of them.
- 'email' => 'HTMLTextField',
- 'password' => 'HTMLTextField',
- 'url' => 'HTMLTextField',
- 'title' => 'HTMLTitleTextField',
- 'user' => 'HTMLUserTextField',
- 'usersmultiselect' => 'HTMLUsersMultiselectField',
+ 'email' => HTMLTextField::class,
+ 'password' => HTMLTextField::class,
+ 'url' => HTMLTextField::class,
+ 'title' => HTMLTitleTextField::class,
+ 'user' => HTMLUserTextField::class,
+ 'usersmultiselect' => HTMLUsersMultiselectField::class,
];
public $mFieldData;
if ( $this->mParent instanceof OOUIHTMLForm ) {
throw new MWException( 'HTMLMultiSelectField#getOneCheckbox() is not supported' );
} else {
- $elementFunc = [ 'Html', $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' ];
+ $elementFunc = [ Html::class, $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' ];
$checkbox =
Xml::check( "{$this->mName}[]", $checked, $attribs ) .
' ' .
$html = '';
$attribs = $this->getAttributes( [ 'disabled', 'tabindex' ] );
- $elementFunc = [ 'Html', $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' ];
+ $elementFunc = [ Html::class, $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' ];
# @todo Should this produce an unordered list perhaps?
foreach ( $options as $label => $info ) {
$this->config = $config;
if ( !in_array( 'uploadsource', stream_get_wrappers() ) ) {
- stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
+ stream_wrapper_register( 'uploadsource', UploadSourceAdapter::class );
}
$id = UploadSourceAdapter::registerSource( $source );
"maintenance/populateLogUsertext.php.\n"
);
- $task = $this->maintenance->runChild( 'PopulateLogUsertext' );
+ $task = $this->maintenance->runChild( PopulateLogUsertext::class );
$task->execute();
$this->output( "done.\n" );
}
"databases, you may want to hit Ctrl-C and do this manually with\n" .
"maintenance/populateLogSearch.php.\n" );
- $task = $this->maintenance->runChild( 'PopulateLogSearch' );
+ $task = $this->maintenance->runChild( PopulateLogSearch::class );
$task->execute();
$this->output( "done.\n" );
}
}
$this->output( "Updating category collations..." );
- $task = $this->maintenance->runChild( 'UpdateCollation' );
+ $task = $this->maintenance->runChild( UpdateCollation::class );
$task->execute();
$this->output( "...done.\n" );
}
*/
protected function doMigrateUserOptions() {
if ( $this->db->tableExists( 'user_properties' ) ) {
- $cl = $this->maintenance->runChild( 'ConvertUserOptions', 'convertUserOptions.php' );
+ $cl = $this->maintenance->runChild( ConvertUserOptions::class, 'convertUserOptions.php' );
$cl->execute();
$this->output( "done.\n" );
}
/**
* @var $cl RebuildLocalisationCache
*/
- $cl = $this->maintenance->runChild( 'RebuildLocalisationCache', 'rebuildLocalisationCache.php' );
+ $cl = $this->maintenance->runChild(
+ RebuildLocalisationCache::class, 'rebuildLocalisationCache.php'
+ );
$this->output( "Rebuilding localisation cache...\n" );
$cl->setForce();
$cl->execute();
"databases, you may want to hit Ctrl-C and do this manually with\n" .
"maintenance/migrateComments.php.\n"
);
- $task = $this->maintenance->runChild( 'MigrateComments', 'migrateComments.php' );
+ $task = $this->maintenance->runChild( MigrateComments::class, 'migrateComments.php' );
$task->execute();
$this->output( "done.\n" );
}
*/
protected function migrateArchiveText() {
$this->output( "Migrating archive ar_text to modern storage.\n" );
- $task = $this->maintenance->runChild( 'MigrateArchiveText', 'migrateArchiveText.php' );
+ $task = $this->maintenance->runChild( MigrateArchiveText::class, 'migrateArchiveText.php' );
$task->execute();
$this->output( "done.\n" );
}
// disable (problematic) object cache types explicitly, preserving all other (working) ones
// bug T113843
- $emptyCache = [ 'class' => 'EmptyBagOStuff' ];
+ $emptyCache = [ 'class' => EmptyBagOStuff::class ];
$objectCaches = [
CACHE_NONE => $emptyCache,
// implementation that won't stomp on PHP's cookies.
$GLOBALS['wgSessionProviders'] = [
[
- 'class' => 'InstallerSessionProvider',
+ 'class' => InstallerSessionProvider::class,
'args' => [ [
'priority' => 1,
] ]
if ( !$overrides ) {
$overrides = [
- 'LocalSettingsGenerator' => 'LocalSettingsGenerator',
- 'WebInstaller' => 'WebInstaller',
- 'CliInstaller' => 'CliInstaller',
+ 'LocalSettingsGenerator' => LocalSettingsGenerator::class,
+ 'WebInstaller' => WebInstaller::class,
+ 'CliInstaller' => CliInstaller::class,
];
foreach ( glob( "$IP/mw-config/overrides/*.php" ) as $file ) {
require $file;
}
protected function doOldLinksUpdate() {
- $cl = $this->maintenance->runChild( 'ConvertLinks' );
+ $cl = $this->maintenance->runChild( ConvertLinks::class );
$cl->execute();
}
$this->output( "done.\n" );
$this->output( "Migrating old restrictions to new table...\n" );
- $task = $this->maintenance->runChild( 'UpdateRestrictions' );
+ $task = $this->maintenance->runChild( UpdateRestrictions::class );
$task->execute();
}
"may want to hit Ctrl-C and do this manually with maintenance/\n" .
"populateCategory.php.\n"
);
- $task = $this->maintenance->runChild( 'PopulateCategory' );
+ $task = $this->maintenance->runChild( PopulateCategory::class );
$task->execute();
$this->output( "Done populating category table.\n" );
}
"databases, you may want to hit Ctrl-C and do this manually with\n" .
"maintenance/populateParentId.php.\n" );
- $task = $this->maintenance->runChild( 'PopulateParentId' );
+ $task = $this->maintenance->runChild( PopulateParentId::class );
$task->execute();
}
}
return "# SQLite-specific settings
\$wgSQLiteDataDir = \"{$dir}\";
\$wgObjectCaches[CACHE_DB] = [
- 'class' => 'SqlBagOStuff',
+ 'class' => SqlBagOStuff::class,
'loggroup' => 'SQLBagOStuff',
'server' => [
'type' => 'sqlite',
"config-license-cc-0": "''Creative Commons'' „Zero“ (Gemeinfreiheit)",
"config-license-gfdl": "GNU-Lizenz für freie Dokumentation 1.3 oder höher",
"config-license-pd": "Gemeinfreiheit",
- "config-license-cc-choose": "Eine benutzerdefinierte Creative-Commons-Lizenz auswählen",
+ "config-license-cc-choose": "Eine andere Creative-Commons-Lizenz auswählen",
"config-license-help": "Viele öffentliche Wikis publizieren alle Beiträge unter einer [http://freedomdefined.org/Definition/De freien Lizenz.]\nDies trägt dazu bei, ein Gefühl von Gemeinschaft zu schaffen, und ermutigt zu längerfristiger Mitarbeit.\nHingegen ist im Allgemeinen eine freie Lizenz auf geschlossenen Wikis nicht notwendig.\n\nSofern man Texte aus der Wikipedia verwenden möchte und umgekehrt, sollte die Lizenz {{int:config-license-cc-by-sa}} gewählt werden.\n\nDie Wikipedia nutzte vormals die GNU-Lizenz für freie Dokumentation (GFDL).\nDie GFDL ist eine gültige Lizenz, die allerdings schwer zu verstehen ist.\nEs ist zudem schwierig, gemäß dieser Lizenz lizenzierte Inhalte wiederzuverwenden.",
"config-email-settings": "E-Mail-Einstellungen",
"config-enable-email": "Ausgehende E-Mails ermöglichen",
"config-install-mainpage-failed": "قادر به درج صفحهٔ اصلی نمیباشد:$1",
"config-install-done": "'''تبریک!'''\nبا موفقیت مدیاویکی را نصب کردید.\nبرنامه نصبکننده پرونده <code>LocalSettings.php</code> را درست کرد.\nکه شامل تمام تنظیمات میباشد.\n\nشما نیاز به دریافت آن دارید و آن را در پایهٔ نصب ویکی قرار دهید (همان پوشهٔ index.php). دریافت باید به صورت خودکار شروع شدهباشد.\n\nاگر دریافت شروع نشد یا اگر آن را لغو کردید با کلیک روی پیوند زیر میتوانید آن را دریافت کنید:\n\n$3\n\n'''توجه داشته باشید:''' اگر این را الآن انجام ندهید، این پرونده تولیدشده در صورتی که نصب را بدون دریافت آن تمام کردید بعداً در اختیار شما قرار نخواهد گرفت.\n\nوقتی انجام شد شما میتوانید '''[$2 وارد ویکی شوید]'''.",
"config-install-done-path": "<strong>تبریک!</strong>\nمدیاویکی با موفقیت نصب گردید.\nبرنامه نصبکننده یک پرونده <code>LocalSettings.php</code> ایجاد کرده است که شامل تمام تنظیمات میباشد.\n\nلازم است شما آن را دریافت کرده و در <code>$4</code> قرار دهید. اِن دریافت می باِست به صورت خودکار شروع شدهباشد.\n\nاگر دریافت شروع نشده بود و یا آن را لغو کرده اید با کلیک روی پیوند زیر میتوانید آن را دریافت کنید:\n\n$3\n\n<strong>توجه:</strong> اگر این کار را هم اکنون انجام ندهید و بدون دریافت آن از برنامه نصب خارج شويد، این پرونده تنظیمات تولیدشده در آینده در اختیار شما قرار نخواهد داشت.\n\nوقتی که آن کار را انجام داديد، میتوانید <strong>[$2 وارد ويکی خودتان شويد]</strong>.",
+ "config-install-success": "مدیاویکی به صورت موفقیتآمیز نصب شد. شما میتوانید\nاز <$1$2> برای دیدن ویکیتان بازدید کنید.\nاگر پرسشی داشتید، فهرست سوالهای متداول ما را مطالعه کنید:\n<https://www.mediawiki.org/wiki/Manual:FAQ> یا از یکی از انجمنهای پشیبانی ما که در آن صفحه فهرست شدهاند استفاده کنید.",
"config-download-localsettings": "دریافت <code>LocalSettings.php</code>",
"config-help": "راهنما",
"config-help-tooltip": "برای گسترش کلیک کنید",
"config-env-php": "O PHP $1 está instalado.",
"config-env-hhvm": "HHVM $1 está instalado.",
"config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
- "config-unicode-pure-php-warning": "<strong>Aviso:</strong> A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
+ "config-unicode-pure-php-warning": "<strong>Aviso:</strong> A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu sítio tem alto volume de tráfego, devia informar-se um pouco sobre a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
"config-unicode-update-warning": "<strong>Aviso:</strong> A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projeto ICU].\nDevia [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.",
"config-no-db": "Não foi possível encontrar um controlador apropriado da base de dados! Precisa de instalar um controlador da base de dados para o PHP. {{PLURAL:$2|É aceite o seguinte tipo|São aceites os seguintes tipos}} de base de dados: $1.\n\nSe fez a compilação do PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando <code>./configure --with-mysqli</code>.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também, por exemplo, o pacote <code>php5-mysql</code>.",
"config-outdated-sqlite": "<strong>Aviso:</strong> Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.",
"config-mssql-windowsauth": "Autenticação do Windows",
"config-site-name": "Nome da wiki:",
"config-site-name-help": "Este nome aparecerá no título da janela do seu navegador e em vários outros sítios.",
- "config-site-name-blank": "Introduza o nome do site.",
+ "config-site-name-blank": "Introduza o nome do sítio.",
"config-project-namespace": "Espaço nominal do projeto:",
"config-ns-generic": "Projeto",
"config-ns-site-name": "O mesmo que o nome da wiki: $1",
"config-logo": "URL do logótipo:",
"config-logo-help": "O tema padrão do MediaWiki inclui espaço para um logótipo de 135x160 píxeis acima do menu da barra lateral.\nColoque na wiki uma imagem com estas dimensões e introduza aqui o URL dessa imagem.\n\nSe não pretende usar um logótipo, deixe este campo em branco.",
"config-instantcommons": "Ativar Instant Commons",
- "config-instantcommons-help": "O [https://www.mediawiki.org/wiki/InstantCommons Instant Commons] é uma funcionalidade que permite que as wikis usem imagens, áudio e outros ficheiros multimédia disponíveis no site [https://commons.wikimedia.org/ Wikimedia Commons].\nPara poder usá-los, o MediaWiki necessita de acesso à Internet.\n\nPara mais informações sobre esta funcionalidade, incluindo instruções sobre como configurá-la para usar outras wikis em vez da Wikimedia Commons, consulte o [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Manual Técnico].",
+ "config-instantcommons-help": "O [https://www.mediawiki.org/wiki/InstantCommons Instant Commons] é uma funcionalidade que permite que as wikis usem imagens, áudio e outros ficheiros multimédia disponíveis no sítio [https://commons.wikimedia.org/ Wikimedia Commons].\nPara poder usá-los, o MediaWiki necessita de acesso à Internet.\n\nPara mais informações sobre esta funcionalidade, incluindo instruções sobre como configurá-la para usar outras wikis em vez da Wikimedia Commons, consulte o [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Manual Técnico].",
"config-cc-error": "O auxiliar de escolha de licenças da Creative Commons não produziu resultados.\nIntroduza o nome da licença manualmente.",
"config-cc-again": "Escolha outra vez...",
"config-cc-not-chosen": "Escolha a licença da Creative Commons que pretende e clique \"proceed\".",
"config-advanced-settings": "Configuração avançada",
"config-cache-options": "Configuração da cache de objetos:",
- "config-cache-help": "A cache de objetos é usada para melhorar o desempenho do MediaWiki. Armazena dados usados com frequência.\nSites de tamanho médio ou grande são altamente encorajados a ativar esta funcionalidade e os sites pequenos também terão alguns benefícios em fazê-lo.",
+ "config-cache-help": "A cache de objetos é usada para melhorar o desempenho do MediaWiki. Armazena dados usados com frequência.\nSítios de tamanho médio ou grande são altamente encorajados a ativar esta funcionalidade e os sítios pequenos também terão alguns benefícios em fazê-lo.",
"config-cache-none": "Sem cache (não é removida nenhuma funcionalidade, mas a velocidade de operação pode ser afectada nas wikis grandes)",
"config-cache-accel": "Cache de objetos do PHP (APC, APCu, XCache ou WinCache)",
"config-cache-memcached": "Usar Memcached (requer instalação e configurações adicionais)",
foreach ( $this->inclusive as $func => $stats ) {
foreach ( $stats as $name => $value ) {
if ( $value instanceof RunningStat ) {
- $total = $value->m1 * $value->n;
+ $total = $value->getMean() * $value->getCount();
$percent = ( isset( $main[$name] ) && $main[$name] )
? 100 * $total / $main[$name]
: 0;
$this->inclusive[$func][$name] = [
'total' => $total,
'min' => $value->min,
- 'mean' => $value->m1,
+ 'mean' => $value->getMean(),
'max' => $value->max,
'variance' => $value->m2,
'percent' => $percent,
: new NullLockManager( [] );
$this->fileJournal = isset( $config['fileJournal'] )
? $config['fileJournal']
- : FileJournal::factory( [ 'class' => 'NullFileJournal' ], $this->name );
+ : FileJournal::factory( [ 'class' => NullFileJournal::class ], $this->name );
$this->readOnly = isset( $config['readOnly'] )
? (string)$config['readOnly']
: '';
final protected function newStatus() {
$args = func_get_args();
if ( count( $args ) ) {
- $sv = call_user_func_array( [ 'StatusValue', 'newFatal' ], $args );
+ $sv = call_user_func_array( [ StatusValue::class, 'newFatal' ], $args );
} else {
$sv = StatusValue::newGood();
}
*/
final public function getOperationsInternal( array $ops ) {
$supportedOps = [
- 'store' => 'StoreFileOp',
- 'copy' => 'CopyFileOp',
- 'move' => 'MoveFileOp',
- 'delete' => 'DeleteFileOp',
- 'create' => 'CreateFileOp',
- 'describe' => 'DescribeFileOp',
- 'null' => 'NullFileOp'
+ 'store' => StoreFileOp::class,
+ 'copy' => CopyFileOp::class,
+ 'move' => MoveFileOp::class,
+ 'delete' => DeleteFileOp::class,
+ 'create' => CreateFileOp::class,
+ 'describe' => DescribeFileOp::class,
+ 'null' => NullFileOp::class
];
$performOps = []; // array of FileOp objects
$this->srvsByBucket = array_values( $this->srvsByBucket ); // consecutive
$memcConfig = isset( $config['memcConfig'] ) ? $config['memcConfig'] : [];
- $memcConfig += [ 'class' => 'MemcachedPhpBagOStuff' ]; // default
+ $memcConfig += [ 'class' => MemcachedPhpBagOStuff::class ]; // default
$class = $memcConfig['class'];
- if ( !is_subclass_of( $class, 'MemcachedBagOStuff' ) ) {
+ if ( !is_subclass_of( $class, MemcachedBagOStuff::class ) ) {
throw new InvalidArgumentException( "$class is not of type MemcachedBagOStuff." );
}
*
* Setting 'lag' and 'since' help avoids keys getting stuck in stale states.
*
+ * Be aware that this does not update the process cache for getWithSetCallback()
+ * callers. Keys accessed via that method are not generally meant to also be set
+ * using this primitive method.
+ *
+ * Do not use this method on versioned keys accessed via getWithSetCallback().
+ *
* Example usage:
* @code
* $dbr = wfGetDB( DB_REPLICA );
*
* Note that set() can also be lag-aware and lower the TTL if it's high.
*
+ * Be aware that this does not clear the process cache. Even if it did, callbacks
+ * used by getWithSetCallback() might still return stale data in the case of either
+ * uncommitted or not-yet-replicated changes (callback generally use replica DBs).
+ *
* When using potentially long-running ACID transactions, a good pattern is
* to use a pre-commit hook to issue the delete. This means that immediately
* after commit, callers will see the tombstone in cache upon purge relay.
protected $delimiter = ';';
/** @var DatabaseDomain */
protected $currentDomain;
+ /** @var integer|null Rows affected by the last query to query() or its CRUD wrappers */
+ protected $affectedRowCount;
/**
* Either 1 if a transaction is active or 0 otherwise.
}
/**
- * Helper method for query() that handles profiling and logging and sends
- * the query to doQuery()
+ * Wrapper for query() that also handles profiling, logging, and affected row count updates
*
* @param string $sql Original SQL query
* @param string $commentedSql SQL query with debugging/trace comment
if ( $this->profiler ) {
call_user_func( [ $this->profiler, 'profileIn' ], $queryProf );
}
+ $this->affectedRowCount = null;
$ret = $this->doQuery( $commentedSql );
+ $this->affectedRowCount = $this->affectedRows();
if ( $this->profiler ) {
call_user_func( [ $this->profiler, 'profileOut' ], $queryProf );
}
}
public function replace( $table, $uniqueIndexes, $rows, $fname = __METHOD__ ) {
- $quotedTable = $this->tableName( $table );
-
if ( count( $rows ) == 0 ) {
return;
}
- # Single row case
+ // Single row case
if ( !is_array( reset( $rows ) ) ) {
$rows = [ $rows ];
}
- // @FXIME: this is not atomic, but a trx would break affectedRows()
+ $affectedRowCount = 0;
foreach ( $rows as $row ) {
- # Delete rows which collide
- if ( $uniqueIndexes ) {
- $sql = "DELETE FROM $quotedTable WHERE ";
- $first = true;
- foreach ( $uniqueIndexes as $index ) {
- if ( $first ) {
- $first = false;
- $sql .= '( ';
- } else {
- $sql .= ' ) OR ( ';
- }
- if ( is_array( $index ) ) {
- $first2 = true;
- foreach ( $index as $col ) {
- if ( $first2 ) {
- $first2 = false;
- } else {
- $sql .= ' AND ';
- }
- $sql .= $col . '=' . $this->addQuotes( $row[$col] );
- }
- } else {
- $sql .= $index . '=' . $this->addQuotes( $row[$index] );
- }
+ // Delete rows which collide with this one
+ $indexWhereClauses = [];
+ foreach ( $uniqueIndexes as $index ) {
+ $indexColumns = (array)$index;
+ $indexRowValues = array_intersect_key( $row, array_flip( $indexColumns ) );
+ if ( count( $indexRowValues ) != count( $indexColumns ) ) {
+ throw new DBUnexpectedError(
+ $this,
+ 'New record does not provide all values for unique key (' .
+ implode( ', ', $indexColumns ) . ')'
+ );
+ } elseif ( in_array( null, $indexRowValues, true ) ) {
+ throw new DBUnexpectedError(
+ $this,
+ 'New record has a null value for unique key (' .
+ implode( ', ', $indexColumns ) . ')'
+ );
}
- $sql .= ' )';
- $this->query( $sql, $fname );
+ $indexWhereClauses[] = $this->makeList( $indexRowValues, LIST_AND );
+ }
+
+ if ( $indexWhereClauses ) {
+ $this->delete( $table, $this->makeList( $indexWhereClauses, LIST_OR ), $fname );
+ $affectedRowCount += $this->affectedRows();
}
- # Now insert the row
+ // Now insert the row
$this->insert( $table, $row, $fname );
+ $affectedRowCount += $this->affectedRows();
}
+
+ $this->affectedRowCount = $affectedRowCount;
}
/**
$where = false;
}
+ $affectedRowCount = 0;
$useTrx = !$this->mTrxLevel;
if ( $useTrx ) {
$this->begin( $fname, self::TRANSACTION_INTERNAL );
# Update any existing conflicting row(s)
if ( $where !== false ) {
$ok = $this->update( $table, $set, $where, $fname );
+ $affectedRowCount += $this->affectedRows();
} else {
$ok = true;
}
# Now insert any non-conflicting row(s)
$ok = $this->insert( $table, $rows, $fname, [ 'IGNORE' ] ) && $ok;
+ $affectedRowCount += $this->affectedRows();
} catch ( Exception $e ) {
if ( $useTrx ) {
$this->rollback( $fname, self::FLUSHING_INTERNAL );
if ( $useTrx ) {
$this->commit( $fname, self::FLUSHING_INTERNAL );
}
+ $this->affectedRowCount = $affectedRowCount;
return $ok;
}
}
}
+ public function affectedRows() {
+ return ( $this->affectedRowCount === null )
+ ? $this->fetchAffectedRowCount() // default to driver value
+ : $this->affectedRowCount;
+ }
+
+ /**
+ * @return int Number of retrieved rows according to the driver
+ */
+ abstract protected function fetchAffectedRowCount();
+
/**
* Take the result from a query, and wrap it in a ResultWrapper if
* necessary. Boolean values are passed through as is, to indicate success
/**
* @return int
*/
- public function affectedRows() {
+ protected function fetchAffectedRowCount() {
return $this->mAffectedRows;
}
/** @var string|null */
private $serverVersion = null;
+ /** @var bool|null */
+ private $insertSelectIsSafe = null;
/**
* Additional $params include:
* ID of this server's master will be used. Set the "conds" field to
* override the query conditions, e.g. ['shard' => 's1'].
* - useGTIDs : use GTID methods like MASTER_GTID_WAIT() when possible.
+ * - insertSelectIsSafe : force that native INSERT SELECT is or is not safe [default: null]
* - sslKeyPath : path to key file [default: null]
* - sslCertPath : path to certificate file [default: null]
* - sslCAFile: path to a single certificate authority PEM file [default: null]
}
$this->sqlMode = isset( $params['sqlMode'] ) ? $params['sqlMode'] : '';
$this->utf8Mode = !empty( $params['utf8Mode'] );
+ $this->insertSelectIsSafe = isset( $params['insertSelectIsSafe'] )
+ ? (bool)$params['insertSelectIsSafe'] : null;
parent::__construct( $params );
}
return $this->nativeReplace( $table, $rows, $fname );
}
+ protected function nativeInsertSelect(
+ $destTable, $srcTable, $varMap, $conds,
+ $fname = __METHOD__, $insertOptions = [], $selectOptions = [], $selectJoinConds = []
+ ) {
+ if ( $this->insertSelectIsSafe === null ) {
+ // In MySQL, an INSERT SELECT is only replication safe with row-based
+ // replication or if innodb_autoinc_lock_mode is 0. When those
+ // conditions aren't met, use non-native mode.
+ // While we could try to determine if the insert is safe anyway by
+ // checking if the target table has an auto-increment column that
+ // isn't set in $varMap, that seems unlikely to be worth the extra
+ // complexity.
+ $row = $this->selectRow(
+ false,
+ [
+ 'innodb_autoinc_lock_mode' => '@@innodb_autoinc_lock_mode',
+ 'binlog_format' => '@@binlog_format',
+ ],
+ [],
+ __METHOD__
+ );
+ $this->insertSelectIsSafe = $row->binlog_format === 'ROW' ||
+ (int)$row->innodb_autoinc_lock_mode === 0;
+ }
+
+ if ( !$this->insertSelectIsSafe ) {
+ return $this->nonNativeInsertSelect(
+ $destTable,
+ $srcTable,
+ $varMap,
+ $conds,
+ $fname,
+ $insertOptions,
+ $selectOptions,
+ $selectJoinConds
+ );
+ } else {
+ return parent::nativeInsertSelect(
+ $destTable,
+ $srcTable,
+ $varMap,
+ $conds,
+ $fname,
+ $insertOptions,
+ $selectOptions,
+ $selectJoinConds
+ );
+ }
+ }
+
/**
* Estimate rows in dataset
* Returns estimated count, based on EXPLAIN output
return 0; // already reached this point for sure
}
+ $useGTID = ( $this->useGTIDs && $pos->gtids );
+
// Call doQuery() directly, to avoid opening a transaction if DBO_TRX is set
- if ( $this->useGTIDs && $pos->gtids ) {
+ if ( $useGTID ) {
// Wait on the GTID set (MariaDB only)
$gtidArg = $this->addQuotes( implode( ',', $pos->gtids ) );
$res = $this->doQuery( "SELECT MASTER_GTID_WAIT($gtidArg, $timeout)" );
// Result can be NULL (error), -1 (timeout), or 0+ per the MySQL manual
$status = ( $row[0] !== null ) ? intval( $row[0] ) : null;
if ( $status === null ) {
- // T126436: jobs programmed to wait on master positions might be referencing binlogs
- // with an old master hostname. Such calls make MASTER_POS_WAIT() return null. Try
- // to detect this and treat the replica DB as having reached the position; a proper master
- // switchover already requires that the new master be caught up before the switch.
- $replicationPos = $this->getReplicaPos();
- if ( $replicationPos && !$replicationPos->channelsMatch( $pos ) ) {
- $this->lastKnownReplicaPos = $replicationPos;
- $status = 0;
+ if ( !$useGTID ) {
+ // T126436: jobs programmed to wait on master positions might be referencing
+ // binlogs with an old master hostname; this makes MASTER_POS_WAIT() return null.
+ // Try to detect this case and treat the replica DB as having reached the given
+ // position (any master switchover already requires that the new master be caught
+ // up before the switch).
+ $replicationPos = $this->getReplicaPos();
+ if ( $replicationPos && !$replicationPos->channelsMatch( $pos ) ) {
+ $this->lastKnownReplicaPos = $replicationPos;
+ $status = 0;
+ }
}
} elseif ( $status >= 0 ) {
// Remember that this position was reached to save queries next time
/**
* @return int
*/
- function affectedRows() {
+ protected function fetchAffectedRowCount() {
$conn = $this->getBindingHandle();
return $conn->affected_rows;
}
}
- public function affectedRows() {
+ protected function fetchAffectedRowCount() {
if ( !is_null( $this->mAffectedRows ) ) {
// Forced result for simulated queries
return $this->mAffectedRows;
/** @var FSLockManager (hopefully on the same server as the DB) */
protected $lockMgr;
+ /** @var array List of shared database already attached to this connection */
+ private $alreadyAttached = [];
+
/**
* Additional params include:
* - dbDirectory : directory containing the DB and the lock file directory
parent::__construct( $p );
// Super doesn't open when $user is false, but we can work with $dbName
if ( $p['dbname'] && !$this->isOpen() ) {
- if ( $this->open( $p['host'], $p['user'], $p['password'], $p['dbname'] ) ) {
- $done = [];
- foreach ( $this->tableAliases as $params ) {
- if ( isset( $done[$params['dbname']] ) ) {
- continue;
- }
- $this->attachDatabase( $params['dbname'] );
- $done[$params['dbname']] = 1;
- }
- }
+ $this->open( $p['host'], $p['user'], $p['password'], $p['dbname'] );
}
}
return parent::isWriteQuery( $sql ) && !preg_match( '/^(ATTACH|PRAGMA)\b/i', $sql );
}
+ protected function isTransactableQuery( $sql ) {
+ return parent::isTransactableQuery( $sql ) && !in_array(
+ $this->getQueryVerb( $sql ),
+ [ 'ATTACH', 'PRAGMA' ],
+ true
+ );
+ }
+
/**
* SQLite doesn't allow buffered results or data seeking etc, so we'll use fetchAll as the result
*
/**
* @return int
*/
- function affectedRows() {
+ protected function fetchAffectedRowCount() {
return $this->mAffectedRows;
}
return $this->query( $sql, $fName );
}
+ public function setTableAliases( array $aliases ) {
+ parent::setTableAliases( $aliases );
+ foreach ( $this->tableAliases as $params ) {
+ if ( isset( $this->alreadyAttached[$params['dbname']] ) ) {
+ continue;
+ }
+ $this->attachDatabase( $params['dbname'] );
+ $this->alreadyAttached[$params['dbname']] = true;
+ }
+ }
+
protected function requiresDatabaseUser() {
return false; // just a file
}
* INSERT SELECT wrapper. Takes data from a SELECT query and inserts it
* into another table.
*
+ * @warning If the insert will use an auto-increment or sequence to
+ * determine the value of a column, this may break replication on
+ * databases using statement-based replication if the SELECT is not
+ * deterministically ordered.
+ *
* @param string $destTable The table name to insert into
* @param string|array $srcTable May be either a table name, or an array of table names
* to include in a join.
$res = $this->result;
if ( $this->mSeekTo !== null ) {
- $result = sqlsrv_fetch_object( $res, 'stdClass', [],
+ $result = sqlsrv_fetch_object( $res, stdClass::class, [],
SQLSRV_SCROLL_ABSOLUTE, $this->mSeekTo );
$this->mSeekTo = null;
} else {
}
}
-class_alias( 'Wikimedia\Rdbms\LoadBalancerSingle', 'LoadBalancerSingle' );
+class_alias( LoadBalancerSingle::class, 'LoadBalancerSingle' );
*/
class CategoryPage extends Article {
# Subclasses can change this to override the viewer class.
- protected $mCategoryViewerClass = 'CategoryViewer';
+ protected $mCategoryViewerClass = CategoryViewer::class;
/**
* @var WikiCategoryPage
$this->mPreprocessorClass = $conf['preprocessorClass'];
} elseif ( defined( 'HPHP_VERSION' ) ) {
# Preprocessor_Hash is much faster than Preprocessor_DOM under HipHop
- $this->mPreprocessorClass = 'Preprocessor_Hash';
+ $this->mPreprocessorClass = Preprocessor_Hash::class;
} elseif ( extension_loaded( 'domxml' ) ) {
# PECL extension that conflicts with the core DOM extension (T15770)
wfDebug( "Warning: you have the obsolete domxml extension for PHP. Please remove it!\n" );
- $this->mPreprocessorClass = 'Preprocessor_Hash';
+ $this->mPreprocessorClass = Preprocessor_Hash::class;
} elseif ( extension_loaded( 'dom' ) ) {
- $this->mPreprocessorClass = 'Preprocessor_DOM';
+ $this->mPreprocessorClass = Preprocessor_DOM::class;
} else {
- $this->mPreprocessorClass = 'Preprocessor_Hash';
+ $this->mPreprocessorClass = Preprocessor_Hash::class;
}
wfDebug( __CLASS__ . ": using preprocessor: {$this->mPreprocessorClass}\n" );
}
'printable' => false,
'allowUnsafeRawHtml' => true,
'wrapclass' => 'mw-parser-output',
- 'currentRevisionCallback' => [ 'Parser', 'statelessFetchRevision' ],
- 'templateCallback' => [ 'Parser', 'statelessFetchTemplate' ],
+ 'currentRevisionCallback' => [ Parser::class, 'statelessFetchRevision' ],
+ 'templateCallback' => [ Parser::class, 'statelessFetchTemplate' ],
'speculativeRevIdCallback' => null,
];
*/
public $top;
public $out;
- public $elementClass = 'PPDStackElement';
+ public $elementClass = PPDStackElement::class;
public static $false = false;
*/
public $lineStart;
- public $partClass = 'PPDPart';
+ public $partClass = PPDPart::class;
public function __construct( $data = [] ) {
$class = $this->partClass;
class PPDStack_Hash extends PPDStack {
public function __construct() {
- $this->elementClass = 'PPDStackElement_Hash';
+ $this->elementClass = PPDStackElement_Hash::class;
parent::__construct();
$this->rootAccum = [];
}
class PPDStackElement_Hash extends PPDStackElement {
public function __construct( $data = [] ) {
- $this->partClass = 'PPDPart_Hash';
+ $this->partClass = PPDPart_Hash::class;
parent::__construct( $data );
}
$descriptor = $store[$index];
if ( is_string( $descriptor ) ) {
- $class = 'PPNode_Hash_Text';
+ $class = PPNode_Hash_Text::class;
} elseif ( is_array( $descriptor ) ) {
if ( $descriptor[self::NAME][0] === '@' ) {
- $class = 'PPNode_Hash_Attr';
+ $class = PPNode_Hash_Attr::class;
} else {
- $class = 'PPNode_Hash_Tree';
+ $class = self::class;
}
} else {
throw new MWException( __METHOD__.': invalid node descriptor' );
# Stupid hack
$encValue = preg_replace_callback(
'/((?i)' . wfUrlProtocols() . ')/',
- [ 'Sanitizer', 'armorLinksCallback' ],
+ function ( $matches ) {
+ return str_replace( ':', ':', $matches[1] );
+ },
$encValue );
return $encValue;
}
return $html;
}
- /**
- * Regex replace callback for armoring links against further processing.
- * @param array $matches
- * @return string
- */
- private static function armorLinksCallback( $matches ) {
- return str_replace( ':', ':', $matches[1] );
- }
-
/**
* Return an associative array of attribute names and values from
* a partial tag string. Attribute names are forced to lowercase,
static function normalizeCharReferences( $text ) {
return preg_replace_callback(
self::CHAR_REFS_REGEX,
- [ 'Sanitizer', 'normalizeCharReferencesCallback' ],
+ [ self::class, 'normalizeCharReferencesCallback' ],
$text );
}
public static function decodeCharReferences( $text ) {
return preg_replace_callback(
self::CHAR_REFS_REGEX,
- [ 'Sanitizer', 'decodeCharReferencesCallback' ],
+ [ self::class, 'decodeCharReferencesCallback' ],
$text );
}
global $wgContLang;
$text = preg_replace_callback(
self::CHAR_REFS_REGEX,
- [ 'Sanitizer', 'decodeCharReferencesCallback' ],
+ [ self::class, 'decodeCharReferencesCallback' ],
$text,
-1, //limit
$count
* @see Setup.php
*/
private $types = [
- '' => [ 'type' => '', 'class' => 'InvalidPassword' ],
+ '' => [ 'type' => '', 'class' => InvalidPassword::class ],
];
/**
// Handling for multiselect preferences
if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
- ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
+ ( isset( $info['class'] ) && $info['class'] == \HTMLMultiSelectField::class ) ) {
$options = HTMLFormField::flattenOptions( $info['options'] );
$prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
$val = [];
// Handling for checkmatrix preferences
if ( ( isset( $info['type'] ) && $info['type'] == 'checkmatrix' ) ||
- ( isset( $info['class'] ) && $info['class'] == 'HTMLCheckMatrix' ) ) {
+ ( isset( $info['class'] ) && $info['class'] == \HTMLCheckMatrix::class ) ) {
$columns = HTMLFormField::flattenOptions( $info['columns'] );
$rows = HTMLFormField::flattenOptions( $info['rows'] );
$prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
}
$defaultPreferences['timecorrection'] = [
- 'class' => 'HTMLSelectOrOtherField',
+ 'class' => \HTMLSelectOrOtherField::class,
'label-message' => 'timezonelegend',
'options' => $tzOptions,
'default' => $tzSetting,
public function getForm(
User $user,
IContextSource $context,
- $formClass = 'PreferencesForm',
+ $formClass = PreferencesForm::class,
array $remove = []
) {
$formDescriptor = $this->getFormDescriptor( $user, $context );
public function getForm(
User $user,
IContextSource $contextSource,
- $formClass = 'PreferencesForm',
+ $formClass = \PreferencesForm::class,
array $remove = []
);
global $wgProfiler, $wgProfileLimit;
$params = [
- 'class' => 'ProfilerStub',
+ 'class' => ProfilerStub::class,
'sampling' => 1,
'threshold' => $wgProfileLimit,
'output' => [],
$inSample = mt_rand( 0, $params['sampling'] - 1 ) === 0;
// wfIsCLI() is not available yet
if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' || !$inSample ) {
- $params['class'] = 'ProfilerStub';
+ $params['class'] = ProfilerStub::class;
}
if ( !is_array( $params['output'] ) ) {
* Profiler that only tracks explicit profiling sections
*
* @code
- * $wgProfiler['class'] = 'ProfilerSectionOnly';
+ * $wgProfiler['class'] = ProfilerSectionOnly::class;
* $wgProfiler['output'] = 'text';
* $wgProfiler['visible'] = true;
* @endcode
* Profiler wrapper for XHProf extension.
*
* @code
- * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['class'] = ProfilerXhprof::class;
* $wgProfiler['flags'] = XHPROF_FLAGS_NO_BUILTINS;
* $wgProfiler['output'] = 'text';
* $wgProfiler['visible'] = true;
* @endcode
*
* @code
- * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['class'] = ProfilerXhprof::class;
* $wgProfiler['flags'] = XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_NO_BUILTINS;
* $wgProfiler['output'] = 'udp';
* @endcode
$object->setLogger( $this->logger );
} else {
if ( !isset( $info['class'] ) ) {
- $class = 'ResourceLoaderFileModule';
+ $class = ResourceLoaderFileModule::class;
} else {
$class = $info['class'];
}
}
if (
isset( $info['class'] ) &&
- $info['class'] !== 'ResourceLoaderFileModule' &&
- !is_subclass_of( $info['class'], 'ResourceLoaderFileModule' )
+ $info['class'] !== ResourceLoaderFileModule::class &&
+ !is_subclass_of( $info['class'], ResourceLoaderFileModule::class )
) {
return false;
}
$name, $scripts, $styles, $messages, $templates
) {
if ( $scripts instanceof XmlJsCode ) {
- $scripts = new XmlJsCode( "function ( $, jQuery, require, module ) {\n{$scripts->value}\n}" );
+ if ( self::inDebugMode() ) {
+ $scripts = new XmlJsCode( "function ( $, jQuery, require, module ) {\n{$scripts->value}\n}" );
+ } else {
+ $scripts = new XmlJsCode( 'function($,jQuery,require,module){'. $scripts->value . '}' );
+ }
} elseif ( !is_string( $scripts ) && !is_array( $scripts ) ) {
throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' );
}
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
- return Xml::encodeJsCall( 'mw.user.options.set',
+ // Use FILTER_NOMIN annotation to prevent needless minification and caching (T84960).
+ return ResourceLoader::FILTER_NOMIN . Xml::encodeJsCall(
+ 'mw.user.options.set',
[ $context->getUserObj()->getOptions( User::GETOPTIONS_EXCLUDE_DEFAULTS ) ],
ResourceLoader::inDebugMode()
);
}
/**
- * Generate the JavaScript content of this module.
- *
- * Add FILTER_NOMIN annotation to prevent needless minification and caching (T84960).
- *
* @param ResourceLoaderContext $context
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
- return Xml::encodeJsCall(
+ // Use FILTER_NOMIN annotation to prevent needless minification and caching (T84960).
+ return ResourceLoader::FILTER_NOMIN . Xml::encodeJsCall(
'mw.user.tokens.set',
[ $this->contextUserTokens( $context ) ],
ResourceLoader::inDebugMode()
- ) . ResourceLoader::FILTER_NOMIN;
+ );
}
/**
class RevisionDeleter {
/** List of known revdel types, with their corresponding list classes */
private static $allowedTypes = [
- 'revision' => 'RevDelRevisionList',
- 'archive' => 'RevDelArchiveList',
- 'oldimage' => 'RevDelFileList',
- 'filearchive' => 'RevDelArchivedFileList',
- 'logging' => 'RevDelLogList',
+ 'revision' => RevDelRevisionList::class,
+ 'archive' => RevDelArchiveList::class,
+ 'oldimage' => RevDelFileList::class,
+ 'filearchive' => RevDelArchivedFileList::class,
+ 'logging' => RevDelLogList::class,
];
/** Type map to support old log entries */
public static function getSearchEngineClass( IDatabase $db ) {
switch ( $db->getType() ) {
case 'sqlite':
- return 'SearchSqlite';
+ return SearchSqlite::class;
case 'mysql':
- return 'SearchMySQL';
+ return SearchMySQL::class;
case 'postgres':
- return 'SearchPostgres';
+ return SearchPostgres::class;
case 'mssql':
- return 'SearchMssql';
+ return SearchMssql::class;
case 'oracle':
- return 'SearchOracle';
+ return SearchOracle::class;
default:
- return 'SearchEngineDummy';
+ return SearchEngineDummy::class;
}
}
}
* @return string
*/
public function getObjectType() {
- return 'Site';
+ return Site::class;
}
/**
*/
class SkinApi extends SkinTemplate {
public $skinname = 'apioutput';
- public $template = 'SkinApiTemplate';
+ public $template = SkinApiTemplate::class;
public function setupSkinUserCss( OutputPage $out ) {
parent::setupSkinUserCss( $out );
class SkinFallback extends SkinTemplate {
public $skinname = 'fallback';
- public $template = 'SkinFallbackTemplate';
+ public $template = SkinFallbackTemplate::class;
/**
* Add CSS via ResourceLoader
* @var string For QuickTemplate, the name of the subclass which will
* actually fill the template. Child classes should override the default.
*/
- public $template = 'QuickTemplate';
+ public $template = QuickTemplate::class;
public $thispage;
public $titletxt;
} elseif ( array_key_exists( 'type', $definition ) ) {
$class = HTMLForm::$typeMappings[$definition['type']];
}
- if ( $class !== 'HTMLInfoField' ) {
+ if ( $class !== HTMLInfoField::class ) {
$definition['tabindex'] = $i;
$i++;
}
if ( $qp === null ) {
// QueryPage subclass, Special page name
$qp = [
- [ 'AncientPagesPage', 'Ancientpages' ],
- [ 'BrokenRedirectsPage', 'BrokenRedirects' ],
- [ 'DeadendPagesPage', 'Deadendpages' ],
- [ 'DoubleRedirectsPage', 'DoubleRedirects' ],
- [ 'FileDuplicateSearchPage', 'FileDuplicateSearch' ],
- [ 'ListDuplicatedFilesPage', 'ListDuplicatedFiles' ],
- [ 'LinkSearchPage', 'LinkSearch' ],
- [ 'ListredirectsPage', 'Listredirects' ],
- [ 'LonelyPagesPage', 'Lonelypages' ],
- [ 'LongPagesPage', 'Longpages' ],
- [ 'MediaStatisticsPage', 'MediaStatistics' ],
- [ 'MIMEsearchPage', 'MIMEsearch' ],
- [ 'MostcategoriesPage', 'Mostcategories' ],
- [ 'MostimagesPage', 'Mostimages' ],
- [ 'MostinterwikisPage', 'Mostinterwikis' ],
- [ 'MostlinkedCategoriesPage', 'Mostlinkedcategories' ],
- [ 'MostlinkedTemplatesPage', 'Mostlinkedtemplates' ],
- [ 'MostlinkedPage', 'Mostlinked' ],
- [ 'MostrevisionsPage', 'Mostrevisions' ],
- [ 'FewestrevisionsPage', 'Fewestrevisions' ],
- [ 'ShortPagesPage', 'Shortpages' ],
- [ 'UncategorizedCategoriesPage', 'Uncategorizedcategories' ],
- [ 'UncategorizedPagesPage', 'Uncategorizedpages' ],
- [ 'UncategorizedImagesPage', 'Uncategorizedimages' ],
- [ 'UncategorizedTemplatesPage', 'Uncategorizedtemplates' ],
- [ 'UnusedCategoriesPage', 'Unusedcategories' ],
- [ 'UnusedimagesPage', 'Unusedimages' ],
- [ 'WantedCategoriesPage', 'Wantedcategories' ],
- [ 'WantedFilesPage', 'Wantedfiles' ],
- [ 'WantedPagesPage', 'Wantedpages' ],
- [ 'WantedTemplatesPage', 'Wantedtemplates' ],
- [ 'UnwatchedpagesPage', 'Unwatchedpages' ],
- [ 'UnusedtemplatesPage', 'Unusedtemplates' ],
- [ 'WithoutInterwikiPage', 'Withoutinterwiki' ],
+ [ AncientPagesPage::class, 'Ancientpages' ],
+ [ BrokenRedirectsPage::class, 'BrokenRedirects' ],
+ [ DeadendPagesPage::class, 'Deadendpages' ],
+ [ DoubleRedirectsPage::class, 'DoubleRedirects' ],
+ [ FileDuplicateSearchPage::class, 'FileDuplicateSearch' ],
+ [ ListDuplicatedFilesPage::class, 'ListDuplicatedFiles' ],
+ [ LinkSearchPage::class, 'LinkSearch' ],
+ [ ListredirectsPage::class, 'Listredirects' ],
+ [ LonelyPagesPage::class, 'Lonelypages' ],
+ [ LongPagesPage::class, 'Longpages' ],
+ [ MediaStatisticsPage::class, 'MediaStatistics' ],
+ [ MIMEsearchPage::class, 'MIMEsearch' ],
+ [ MostcategoriesPage::class, 'Mostcategories' ],
+ [ MostimagesPage::class, 'Mostimages' ],
+ [ MostinterwikisPage::class, 'Mostinterwikis' ],
+ [ MostlinkedCategoriesPage::class, 'Mostlinkedcategories' ],
+ [ MostlinkedTemplatesPage::class, 'Mostlinkedtemplates' ],
+ [ MostlinkedPage::class, 'Mostlinked' ],
+ [ MostrevisionsPage::class, 'Mostrevisions' ],
+ [ FewestrevisionsPage::class, 'Fewestrevisions' ],
+ [ ShortPagesPage::class, 'Shortpages' ],
+ [ UncategorizedCategoriesPage::class, 'Uncategorizedcategories' ],
+ [ UncategorizedPagesPage::class, 'Uncategorizedpages' ],
+ [ UncategorizedImagesPage::class, 'Uncategorizedimages' ],
+ [ UncategorizedTemplatesPage::class, 'Uncategorizedtemplates' ],
+ [ UnusedCategoriesPage::class, 'Unusedcategories' ],
+ [ UnusedimagesPage::class, 'Unusedimages' ],
+ [ WantedCategoriesPage::class, 'Wantedcategories' ],
+ [ WantedFilesPage::class, 'Wantedfiles' ],
+ [ WantedPagesPage::class, 'Wantedpages' ],
+ [ WantedTemplatesPage::class, 'Wantedtemplates' ],
+ [ UnwatchedpagesPage::class, 'Unwatchedpages' ],
+ [ UnusedtemplatesPage::class, 'Unusedtemplates' ],
+ [ WithoutInterwikiPage::class, 'Withoutinterwiki' ],
];
Hooks::run( 'wgQueryPages', [ &$qp ] );
}
*/
private static $coreList = [
// Maintenance Reports
- 'BrokenRedirects' => 'BrokenRedirectsPage',
- 'Deadendpages' => 'DeadendPagesPage',
- 'DoubleRedirects' => 'DoubleRedirectsPage',
- 'Longpages' => 'LongPagesPage',
- 'Ancientpages' => 'AncientPagesPage',
- 'Lonelypages' => 'LonelyPagesPage',
- 'Fewestrevisions' => 'FewestrevisionsPage',
- 'Withoutinterwiki' => 'WithoutInterwikiPage',
- 'Protectedpages' => 'SpecialProtectedpages',
- 'Protectedtitles' => 'SpecialProtectedtitles',
- 'Shortpages' => 'ShortPagesPage',
- 'Uncategorizedcategories' => 'UncategorizedCategoriesPage',
- 'Uncategorizedimages' => 'UncategorizedImagesPage',
- 'Uncategorizedpages' => 'UncategorizedPagesPage',
- 'Uncategorizedtemplates' => 'UncategorizedTemplatesPage',
- 'Unusedcategories' => 'UnusedCategoriesPage',
- 'Unusedimages' => 'UnusedimagesPage',
- 'Unusedtemplates' => 'UnusedtemplatesPage',
- 'Unwatchedpages' => 'UnwatchedpagesPage',
- 'Wantedcategories' => 'WantedCategoriesPage',
- 'Wantedfiles' => 'WantedFilesPage',
- 'Wantedpages' => 'WantedPagesPage',
- 'Wantedtemplates' => 'WantedTemplatesPage',
+ 'BrokenRedirects' => BrokenRedirectsPage::class,
+ 'Deadendpages' => DeadendPagesPage::class,
+ 'DoubleRedirects' => DoubleRedirectsPage::class,
+ 'Longpages' => LongPagesPage::class,
+ 'Ancientpages' => AncientPagesPage::class,
+ 'Lonelypages' => LonelyPagesPage::class,
+ 'Fewestrevisions' => FewestrevisionsPage::class,
+ 'Withoutinterwiki' => WithoutInterwikiPage::class,
+ 'Protectedpages' => SpecialProtectedpages::class,
+ 'Protectedtitles' => SpecialProtectedtitles::class,
+ 'Shortpages' => ShortPagesPage::class,
+ 'Uncategorizedcategories' => UncategorizedCategoriesPage::class,
+ 'Uncategorizedimages' => UncategorizedImagesPage::class,
+ 'Uncategorizedpages' => UncategorizedPagesPage::class,
+ 'Uncategorizedtemplates' => UncategorizedTemplatesPage::class,
+ 'Unusedcategories' => UnusedCategoriesPage::class,
+ 'Unusedimages' => UnusedimagesPage::class,
+ 'Unusedtemplates' => UnusedtemplatesPage::class,
+ 'Unwatchedpages' => UnwatchedpagesPage::class,
+ 'Wantedcategories' => WantedCategoriesPage::class,
+ 'Wantedfiles' => WantedFilesPage::class,
+ 'Wantedpages' => WantedPagesPage::class,
+ 'Wantedtemplates' => WantedTemplatesPage::class,
// List of pages
- 'Allpages' => 'SpecialAllPages',
- 'Prefixindex' => 'SpecialPrefixindex',
- 'Categories' => 'SpecialCategories',
- 'Listredirects' => 'ListredirectsPage',
- 'PagesWithProp' => 'SpecialPagesWithProp',
- 'TrackingCategories' => 'SpecialTrackingCategories',
+ 'Allpages' => SpecialAllPages::class,
+ 'Prefixindex' => SpecialPrefixindex::class,
+ 'Categories' => SpecialCategories::class,
+ 'Listredirects' => ListredirectsPage::class,
+ 'PagesWithProp' => SpecialPagesWithProp::class,
+ 'TrackingCategories' => SpecialTrackingCategories::class,
// Authentication
- 'Userlogin' => 'SpecialUserLogin',
- 'Userlogout' => 'SpecialUserLogout',
- 'CreateAccount' => 'SpecialCreateAccount',
- 'LinkAccounts' => 'SpecialLinkAccounts',
- 'UnlinkAccounts' => 'SpecialUnlinkAccounts',
- 'ChangeCredentials' => 'SpecialChangeCredentials',
- 'RemoveCredentials' => 'SpecialRemoveCredentials',
+ 'Userlogin' => SpecialUserLogin::class,
+ 'Userlogout' => SpecialUserLogout::class,
+ 'CreateAccount' => SpecialCreateAccount::class,
+ 'LinkAccounts' => SpecialLinkAccounts::class,
+ 'UnlinkAccounts' => SpecialUnlinkAccounts::class,
+ 'ChangeCredentials' => SpecialChangeCredentials::class,
+ 'RemoveCredentials' => SpecialRemoveCredentials::class,
// Users and rights
- 'Activeusers' => 'SpecialActiveUsers',
- 'Block' => 'SpecialBlock',
- 'Unblock' => 'SpecialUnblock',
- 'BlockList' => 'SpecialBlockList',
- 'AutoblockList' => 'SpecialAutoblockList',
- 'ChangePassword' => 'SpecialChangePassword',
- 'BotPasswords' => 'SpecialBotPasswords',
- 'PasswordReset' => 'SpecialPasswordReset',
- 'DeletedContributions' => 'DeletedContributionsPage',
- 'Preferences' => 'SpecialPreferences',
- 'ResetTokens' => 'SpecialResetTokens',
- 'Contributions' => 'SpecialContributions',
- 'Listgrouprights' => 'SpecialListGroupRights',
- 'Listgrants' => 'SpecialListGrants',
- 'Listusers' => 'SpecialListUsers',
- 'Listadmins' => 'SpecialListAdmins',
- 'Listbots' => 'SpecialListBots',
- 'Userrights' => 'UserrightsPage',
- 'EditWatchlist' => 'SpecialEditWatchlist',
+ 'Activeusers' => SpecialActiveUsers::class,
+ 'Block' => SpecialBlock::class,
+ 'Unblock' => SpecialUnblock::class,
+ 'BlockList' => SpecialBlockList::class,
+ 'AutoblockList' => SpecialAutoblockList::class,
+ 'ChangePassword' => SpecialChangePassword::class,
+ 'BotPasswords' => SpecialBotPasswords::class,
+ 'PasswordReset' => SpecialPasswordReset::class,
+ 'DeletedContributions' => DeletedContributionsPage::class,
+ 'Preferences' => SpecialPreferences::class,
+ 'ResetTokens' => SpecialResetTokens::class,
+ 'Contributions' => SpecialContributions::class,
+ 'Listgrouprights' => SpecialListGroupRights::class,
+ 'Listgrants' => SpecialListGrants::class,
+ 'Listusers' => SpecialListUsers::class,
+ 'Listadmins' => SpecialListAdmins::class,
+ 'Listbots' => SpecialListBots::class,
+ 'Userrights' => UserrightsPage::class,
+ 'EditWatchlist' => SpecialEditWatchlist::class,
// Recent changes and logs
- 'Newimages' => 'SpecialNewFiles',
- 'Log' => 'SpecialLog',
- 'Watchlist' => 'SpecialWatchlist',
- 'Newpages' => 'SpecialNewpages',
- 'Recentchanges' => 'SpecialRecentChanges',
- 'Recentchangeslinked' => 'SpecialRecentChangesLinked',
- 'Tags' => 'SpecialTags',
+ 'Newimages' => SpecialNewFiles::class,
+ 'Log' => SpecialLog::class,
+ 'Watchlist' => SpecialWatchlist::class,
+ 'Newpages' => SpecialNewpages::class,
+ 'Recentchanges' => SpecialRecentChanges::class,
+ 'Recentchangeslinked' => SpecialRecentChangesLinked::class,
+ 'Tags' => SpecialTags::class,
// Media reports and uploads
- 'Listfiles' => 'SpecialListFiles',
- 'Filepath' => 'SpecialFilepath',
- 'MediaStatistics' => 'MediaStatisticsPage',
- 'MIMEsearch' => 'MIMEsearchPage',
- 'FileDuplicateSearch' => 'FileDuplicateSearchPage',
- 'Upload' => 'SpecialUpload',
- 'UploadStash' => 'SpecialUploadStash',
- 'ListDuplicatedFiles' => 'ListDuplicatedFilesPage',
+ 'Listfiles' => SpecialListFiles::class,
+ 'Filepath' => SpecialFilepath::class,
+ 'MediaStatistics' => MediaStatisticsPage::class,
+ 'MIMEsearch' => MIMEsearchPage::class,
+ 'FileDuplicateSearch' => FileDuplicateSearchPage::class,
+ 'Upload' => SpecialUpload::class,
+ 'UploadStash' => SpecialUploadStash::class,
+ 'ListDuplicatedFiles' => ListDuplicatedFilesPage::class,
// Data and tools
- 'ApiSandbox' => 'SpecialApiSandbox',
- 'Statistics' => 'SpecialStatistics',
- 'Allmessages' => 'SpecialAllMessages',
- 'Version' => 'SpecialVersion',
- 'Lockdb' => 'SpecialLockdb',
- 'Unlockdb' => 'SpecialUnlockdb',
+ 'ApiSandbox' => SpecialApiSandbox::class,
+ 'Statistics' => SpecialStatistics::class,
+ 'Allmessages' => SpecialAllMessages::class,
+ 'Version' => SpecialVersion::class,
+ 'Lockdb' => SpecialLockdb::class,
+ 'Unlockdb' => SpecialUnlockdb::class,
// Redirecting special pages
- 'LinkSearch' => 'LinkSearchPage',
- 'Randompage' => 'RandomPage',
- 'RandomInCategory' => 'SpecialRandomInCategory',
- 'Randomredirect' => 'SpecialRandomredirect',
- 'Randomrootpage' => 'SpecialRandomrootpage',
- 'GoToInterwiki' => 'SpecialGoToInterwiki',
+ 'LinkSearch' => LinkSearchPage::class,
+ 'Randompage' => RandomPage::class,
+ 'RandomInCategory' => SpecialRandomInCategory::class,
+ 'Randomredirect' => SpecialRandomredirect::class,
+ 'Randomrootpage' => SpecialRandomrootpage::class,
+ 'GoToInterwiki' => SpecialGoToInterwiki::class,
// High use pages
- 'Mostlinkedcategories' => 'MostlinkedCategoriesPage',
- 'Mostimages' => 'MostimagesPage',
- 'Mostinterwikis' => 'MostinterwikisPage',
- 'Mostlinked' => 'MostlinkedPage',
- 'Mostlinkedtemplates' => 'MostlinkedTemplatesPage',
- 'Mostcategories' => 'MostcategoriesPage',
- 'Mostrevisions' => 'MostrevisionsPage',
+ 'Mostlinkedcategories' => MostlinkedCategoriesPage::class,
+ 'Mostimages' => MostimagesPage::class,
+ 'Mostinterwikis' => MostinterwikisPage::class,
+ 'Mostlinked' => MostlinkedPage::class,
+ 'Mostlinkedtemplates' => MostlinkedTemplatesPage::class,
+ 'Mostcategories' => MostcategoriesPage::class,
+ 'Mostrevisions' => MostrevisionsPage::class,
// Page tools
- 'ComparePages' => 'SpecialComparePages',
- 'Export' => 'SpecialExport',
- 'Import' => 'SpecialImport',
- 'Undelete' => 'SpecialUndelete',
- 'Whatlinkshere' => 'SpecialWhatLinksHere',
- 'MergeHistory' => 'SpecialMergeHistory',
- 'ExpandTemplates' => 'SpecialExpandTemplates',
+ 'ComparePages' => SpecialComparePages::class,
+ 'Export' => SpecialExport::class,
+ 'Import' => SpecialImport::class,
+ 'Undelete' => SpecialUndelete::class,
+ 'Whatlinkshere' => SpecialWhatLinksHere::class,
+ 'MergeHistory' => SpecialMergeHistory::class,
+ 'ExpandTemplates' => SpecialExpandTemplates::class,
// Other
- 'Booksources' => 'SpecialBookSources',
+ 'Booksources' => SpecialBookSources::class,
// Unlisted / redirects
- 'ApiHelp' => 'SpecialApiHelp',
- 'Blankpage' => 'SpecialBlankpage',
- 'Diff' => 'SpecialDiff',
- 'EditTags' => 'SpecialEditTags',
- 'Emailuser' => 'SpecialEmailUser',
- 'Movepage' => 'MovePageForm',
- 'Mycontributions' => 'SpecialMycontributions',
- 'MyLanguage' => 'SpecialMyLanguage',
- 'Mypage' => 'SpecialMypage',
- 'Mytalk' => 'SpecialMytalk',
- 'Myuploads' => 'SpecialMyuploads',
- 'AllMyUploads' => 'SpecialAllMyUploads',
- 'PermanentLink' => 'SpecialPermanentLink',
- 'Redirect' => 'SpecialRedirect',
- 'Revisiondelete' => 'SpecialRevisionDelete',
- 'RunJobs' => 'SpecialRunJobs',
- 'Specialpages' => 'SpecialSpecialpages',
- 'PageData' => 'SpecialPageData'
+ 'ApiHelp' => SpecialApiHelp::class,
+ 'Blankpage' => SpecialBlankpage::class,
+ 'Diff' => SpecialDiff::class,
+ 'EditTags' => SpecialEditTags::class,
+ 'Emailuser' => SpecialEmailUser::class,
+ 'Movepage' => MovePageForm::class,
+ 'Mycontributions' => SpecialMycontributions::class,
+ 'MyLanguage' => SpecialMyLanguage::class,
+ 'Mypage' => SpecialMypage::class,
+ 'Mytalk' => SpecialMytalk::class,
+ 'Myuploads' => SpecialMyuploads::class,
+ 'AllMyUploads' => SpecialAllMyUploads::class,
+ 'PermanentLink' => SpecialPermanentLink::class,
+ 'Redirect' => SpecialRedirect::class,
+ 'Revisiondelete' => SpecialRevisionDelete::class,
+ 'RunJobs' => SpecialRunJobs::class,
+ 'Specialpages' => SpecialSpecialpages::class,
+ 'PageData' => SpecialPageData::class,
];
private static $list;
self::$list = self::$coreList;
if ( !$wgDisableInternalSearch ) {
- self::$list['Search'] = 'SpecialSearch';
+ self::$list['Search'] = SpecialSearch::class;
}
if ( $wgEmailAuthentication ) {
- self::$list['Confirmemail'] = 'EmailConfirmation';
- self::$list['Invalidateemail'] = 'EmailInvalidation';
+ self::$list['Confirmemail'] = EmailConfirmation::class;
+ self::$list['Invalidateemail'] = EmailInvalidation::class;
}
if ( $wgEnableEmail ) {
- self::$list['ChangeEmail'] = 'SpecialChangeEmail';
+ self::$list['ChangeEmail'] = SpecialChangeEmail::class;
}
if ( $wgEnableJavaScriptTest ) {
- self::$list['JavaScriptTest'] = 'SpecialJavaScriptTest';
+ self::$list['JavaScriptTest'] = SpecialJavaScriptTest::class;
}
if ( $wgPageLanguageUseDB ) {
- self::$list['PageLanguage'] = 'SpecialPageLanguage';
+ self::$list['PageLanguage'] = SpecialPageLanguage::class;
}
if ( $wgContentHandlerUseDB ) {
- self::$list['ChangeContentModel'] = 'SpecialChangeContentModel';
+ self::$list['ChangeContentModel'] = SpecialChangeContentModel::class;
}
// Add extension special pages
];
$fields['restrictions'] = [
- 'class' => 'HTMLRestrictionsField',
+ 'class' => HTMLRestrictionsField::class,
'required' => true,
'default' => $this->botPassword->getRestrictions(),
];
],
'diff' => [
'name' => 'diff',
- 'class' => 'HTMLTextField',
+ 'class' => HTMLTextField::class,
'label-message' => 'diff-form-revid',
],
], $this->getContext(), 'diff-form' );
// checkTitle can filter some options out, avoid empty sections
if ( count( $options ) > 0 ) {
$fields['TitlesNs' . $namespace] = [
- 'class' => 'EditWatchlistCheckboxSeriesField',
+ 'class' => EditWatchlistCheckboxSeriesField::class,
'options' => $options,
'section' => "ns$namespace",
];
'size' => 60,
'default' => $title,
'autofocus' => true,
- 'cssclass' => 'mw-ui-input-inline',
],
'input' => [
'type' => 'textarea',
$formDescriptor += [
'textarea' => [
- 'class' => 'HTMLTextAreaField',
+ 'class' => HTMLTextAreaField::class,
'name' => 'pages',
'label-message' => 'export-manual',
'nodata' => true,
) {
$formDescriptor = [
'namespace' => [
- 'class' => 'HTMLSelectNamespace',
+ 'class' => HTMLSelectNamespace::class,
'name' => 'namespace',
'id' => 'namespace',
'cssclass' => 'namespaceselector',
'id' => 'noredirect',
],
'sizelimit' => [
- 'class' => 'HTMLSizeFilterField',
+ 'class' => HTMLSizeFilterField::class,
'name' => 'size',
]
];
$out = $context->getOutput();
$tag = $data['HiddenTag'];
- $status = call_user_func( [ 'ChangeTags', "{$form->tagAction}TagWithChecks" ],
+ $status = call_user_func( [ ChangeTags::class, "{$form->tagAction}TagWithChecks" ],
$tag, $data['Reason'], $context->getUser(), true );
if ( $status->isGood() ) {
} else {
$expiryHtml = $this->msg( 'userrights-expiry-none' )->text();
}
+ // T171345: Add a hidden form element so that other groups can still be manipulated,
+ // otherwise saving errors out with an invalid expiry time for this group.
+ $expiryHtml .= Html::Hidden( "wpExpiry-$group",
+ $currentExpiry ? 'existing' : 'infinite' );
$expiryHtml .= "<br />\n";
} else {
$expiryHtml = Xml::element( 'span', null,
}
$descriptor['UploadFile'] = [
- 'class' => 'UploadSourceField',
+ 'class' => UploadSourceField::class,
'section' => 'source',
'type' => 'file',
'id' => 'wpUploadFile',
if ( $canUploadByUrl ) {
$this->mMaxUploadSize['url'] = UploadBase::getMaxUploadSize( 'url' );
$descriptor['UploadFileURL'] = [
- 'class' => 'UploadSourceField',
+ 'class' => UploadSourceField::class,
'section' => 'source',
'id' => 'wpUploadFileURL',
'radio-id' => 'wpSourceTypeurl',
} else {
$descriptor['License'] = [
'type' => 'select',
- 'class' => 'Licenses',
+ 'class' => Licenses::class,
'section' => 'description',
'id' => 'wpLicense',
'label-message' => 'license',
$formDescriptor = [
'user' => [
- 'class' => 'HTMLUserTextField',
+ 'class' => HTMLUserTextField::class,
'label' => $this->msg( 'listusersfrom' )->text(),
'name' => 'username',
'default' => $this->requestedUser,
'label' => $this->msg( 'group' )->text(),
'name' => 'group',
'default' => $this->requestedGroup,
- 'class' => 'HTMLSelectField',
+ 'class' => HTMLSelectField::class,
'options' => $groupOptions,
],
'editsOnly' => [
'default' => $this->mDefaultDirection
],
'limithiddenfield' => [
- 'class' => 'HTMLHiddenField',
+ 'class' => HTMLHiddenField::class,
'name' => 'limit',
'default' => $this->mLimit
]
if ( $beforeSubmitButtonHookOut !== '' ) {
$formDescriptior[ 'beforeSubmitButtonHookOut' ] = [
- 'class' => 'HTMLInfoField',
+ 'class' => HTMLInfoField::class,
'raw' => true,
'default' => $beforeSubmitButtonHookOut
];
}
$formDescriptor[ 'submit' ] = [
- 'class' => 'HTMLSubmitField',
+ 'class' => HTMLSubmitField::class,
'buttonlabel-message' => 'listusers-submit',
];
if ( $beforeClosingFieldsetHookOut !== '' ) {
$formDescriptior[ 'beforeClosingFieldsetHookOut' ] = [
- 'class' => 'HTMLInfoField',
+ 'class' => HTMLInfoField::class,
'raw' => true,
'default' => $beforeClosingFieldsetHookOut
];
$multiselectOptions = [];
foreach ( $prefs as $name => $info ) {
if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
- ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
+ ( isset( $info['class'] ) && $info['class'] == HTMLMultiSelectField::class ) ) {
$opts = HTMLFormField::flattenOptions( $info['options'] );
$prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
$checkmatrixOptions = [];
foreach ( $prefs as $name => $info ) {
if ( ( isset( $info['type'] ) && $info['type'] == 'checkmatrix' ) ||
- ( isset( $info['class'] ) && $info['class'] == 'HTMLCheckMatrix' ) ) {
+ ( isset( $info['class'] ) && $info['class'] == HTMLCheckMatrix::class ) ) {
$columns = HTMLFormField::flattenOptions( $info['columns'] );
$rows = HTMLFormField::flattenOptions( $info['rows'] );
$prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
$this->cache = $cache;
$this->readOnlyMode = $readOnlyMode;
$this->stats = new NullStatsdDataFactory();
- $this->deferredUpdatesAddCallableUpdateCallback = [ 'DeferredUpdates', 'addCallableUpdate' ];
- $this->revisionGetTimestampFromIdCallback = [ 'Revision', 'getTimestampFromId' ];
+ $this->deferredUpdatesAddCallableUpdateCallback = [ DeferredUpdates::class, 'addCallableUpdate' ];
+ $this->revisionGetTimestampFromIdCallback = [ Revision::class, 'getTimestampFromId' ];
}
/**
"rcfilters-activefilters": "Filtros activos",
"rcfilters-advancedfilters": "Filtros avanzaos",
"rcfilters-limit-title": "Resultancies qu'amosar",
- "rcfilters-limit-and-date-label": "{{PLURAL:$1|cambiu|$1 cambios}}, $2",
+ "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|cambiu|$1 cambios}}, $2",
"rcfilters-date-popup-title": "Periodu de tiempu a buscar",
"rcfilters-days-title": "Últimos díes",
"rcfilters-hours-title": "Últimes hores",
"lockmanager-fail-closelock": "Nun se pudo zarrar el ficheru de bloquéu pa \"$1\".",
"lockmanager-fail-deletelock": "Non se pudo desaniciar el ficheru de bloquéu pa \"$1\".",
"lockmanager-fail-acquirelock": "Nun se pudo adquirir el bloquéu pa \"$1\".",
- "lockmanager-fail-openlock": "Nun se pudo abrir el ficheru de bloquéu pa \"$1\".",
+ "lockmanager-fail-openlock": "Nun se pudo abrir el ficheru de bloquéu pa \"$1\". Por favor comprueba que'l direutoriu de xubíes ta configuráu correutamente y que'l to sirvidor web tien permisos d'escritura nesi direutoriu. Ver https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory pa más información.",
"lockmanager-fail-releaselock": "Nun se pudo lliberar el bloquéu pa \"$1\".",
"lockmanager-fail-db-bucket": "Nun se pudo contautar con bloqueos de bases de datos bastantes nel conxuntu $1.",
"lockmanager-fail-db-release": "Nun se pudieron lliberar los bloqueos na base de datos $1.",
"doubleredirects": "Redireiciones dobles",
"doubleredirectstext": "Esta páxina llista páxines que redireicionen a otres páxines de redireición.\nCada filera contien enllaces a la primera y segunda redireición, asina como al oxetivu de la segunda redireición, que de vezu ye la páxina oxetivu \"real\", onde tendría d'empobinar la primera redireición.\nLes entraes <del>tachaes</del> tan resueltes.",
"double-redirect-fixed-move": "[[$1]] treslladóse.\nAnovóse automáticamente y agora redirixe haza [[$2]].",
- "double-redirect-fixed-maintenance": "Iguando automáticamente la doble redireición de [[$1]] a [[$2]] nuna xera de mantenimientu.",
+ "double-redirect-fixed-maintenance": "Iguando automáticamente la doble redireición de [[$1]] a [[$2]] nuna xera de mantenimientu",
"double-redirect-fixer": "Iguador de redireiciones",
"brokenredirects": "Redireiciones frañaes",
"brokenredirectstext": "Les redireiciones siguientes enllacien a páxines que nun esisten:",
"right-read": "Прагляд старонак",
"right-edit": "Рэдагаваньне старонак",
"right-createpage": "Стварэньне старонак (акрамя старонак абмеркаваньняў)",
- "right-createtalk": "стварэньне старонак абмеркаваньня",
- "right-createaccount": "стварэньне новых рахункаў удзельніка",
+ "right-createtalk": "Стварэньне старонак абмеркаваньня",
+ "right-createaccount": "Стварэньне новых рахункаў удзельнікаў",
"right-autocreateaccount": "Аўтаматычны ўваход з вонкавага рахунку ўдзельніка",
- "right-minoredit": "пазнаÑ\87Ñ\8dнÑ\8cне Ñ\80Ñ\8dдагаванÑ\8cнÑ\8fÑ\9e Ñ\8fк дÑ\80обнÑ\8bÑ\8f",
+ "right-minoredit": "Ð\9fазнаÑ\87Ñ\8dнÑ\8cне Ñ\80Ñ\8dдагаванÑ\8cнÑ\8fÑ\9e Ñ\8fк дÑ\80обнÑ\8bÑ\85",
"right-move": "перанос старонак",
"right-move-subpages": "перанос старонак разам зь іх падстаронкамі",
"right-move-rootuserpages": "перанос карэнных старонак удзельнікаў",
"lockmanager-fail-closelock": "Немагчыма закрыць файл блякаваньня для «$1».",
"lockmanager-fail-deletelock": "Немагчыма выдаліць файл блякаваньня для «$1».",
"lockmanager-fail-acquirelock": "Немагчыма здабыць блякаваньне для «$1».",
- "lockmanager-fail-openlock": "Немагчыма адкрыць файл блякаваньня для «$1».",
+ "lockmanager-fail-openlock": "Немагчыма адкрыць файл блякаваньня для «$1». Упэўніцеся, што вашая тэчка для загрузкі наладжаная слушна і што ваш вэб-сэрвэр мае дазвол на запіс у гэтую тэчку. Глядзіце https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory для дадатковых зьвестак.",
"lockmanager-fail-releaselock": "Немагчыма зьняць блякаваньне для «$1».",
"lockmanager-fail-db-bucket": "Немагчыма скантактавацца з дастатковай колькасьцю базаў блякавньняў на ўчастку $1.",
"lockmanager-fail-db-release": "Немагчыма зьняць блякаваньні для базы зьвестак $1.",
"restrictionsfield-label": "Дазволеныя IP-дыяпазоны:",
"restrictionsfield-help": "Адзін IP-адрас ці CIDR-дыяпазон на радок. Каб дазволіць усё, ужывайце:<pre>0.0.0.0/0\n::/0</pre>",
"edit-error-short": "Памылка: $1",
+ "edit-error-long": "Памылкі:\n\n$1",
"revid": "вэрсія $1",
"pageid": "Ідэнтыфікатар старонкі $1",
"rawhtml-notallowed": "<html>-тэгі ня могуць быць выкарыстаныя па-за звычайнымі старонкамі.",
"zip-file-open-error": "Възникна грешка при отваряне на файла за проверка на ZIP.",
"zip-wrong-format": "Указаният файл не е ZIP файл.",
"zip-bad": "Файлът е повреден или е нечетим ZIP файл.\nСигурността му не може да бъде проверена.",
- "zip-unsupported": "Файлът е ZIP файл, който използва ZIP компоненти, които не се поддържат от МедияУики.\nСигурността му не може да бъде коректно проверена.",
+ "zip-unsupported": "Файлът е ZIP файл, който използва функционалност, която не се поддържа от МедияУики.\nСигурността му не може да бъде коректно проверена.",
"uploadstash": "Скрити качвания",
"uploadstash-summary": "Тази страница предоставя достъп до файловете, които са качени (или са в процес на качване), но все още не са публикувани в уикито. Тези файлове не са достъпни само за потребителя, който ги е качил.",
"uploadstash-clear": "Изчистване на скритите качвания",
"anonpreviewwarning": "''रउआँ खाता में प्रवेश नइखीं भइल। सहेजब तब ए पन्ना के संपादन इतिहास में राउर आईपी पता दर्ज हो जाई।\"",
"missingsummary": "'''याद दियावल जात बा:'''रउआँ एगो संपादन सारांश नइखीं दिहले। अगर फिर \"$1\" पर क्लिक करब, त राउर संपादन एकरे बिना सहेजा जाई।",
"selfredirect": "<strong>चेतावनी:</strong> आप ई पन्ना के खुदे एही पर अनुप्रेषण क रहल बानी।\nया त आप अनुप्रेषण खातिर गलत लक्ष्य देत बानी, या आप गलत पन्ना के संपादन करत बानी।\nएक बेर अउरी \"$1\" क्लिक करब त, ओइसहूँ ई अनुप्रेषण बना दिहल जाई।",
- "missingcommenttext": "नà¥\80à¤\9aà¥\87 à¤\8fà¤\97à¥\8b à¤\9fिपà¥\8dपणà¥\80 à¤à¤°à¥\80à¤\82।",
+ "missingcommenttext": "एगो टिप्पणी भरीं।",
"missingcommentheader": "'''याद दियावल जात बा:''' रउआँ एह कमेंट खातिर कौनों बिसय नइखीं दिहले। अगर आप \"$1\" पर क्लिक करब तब राउर संपादन एकरे बिना सहेजा जाई।",
"summary-preview": "संपादन सारांश क झलक:",
"subject-preview": "बिसय के झलक:",
"watching": "ध्यानसूची में जाते हुए",
"unwatching": "ध्यानसूची से हटते हुए",
"enotif_reset": "सगरी पन्ना सभ देखल चिन्हित करीं",
+ "enotif_impersonal_salutation": "{{SITENAME}} प्रयोगकर्ता",
+ "enotif_subject_deleted": "$2 पन्ना $1 के हटा {{GENDER:$2|दिहलें|दिहली}}",
+ "enotif_minoredit": "ई एगो छोट संपादन बा",
"created": "बनावल गईल",
+ "deletepage": "पन्ना हटाईं",
+ "confirm": "कन्फर्म",
+ "excontent": "सामग्री रहल: \"$1\"",
+ "exbeforeblank": "खाली करे से पहिले सामग्री: \"$1\"",
+ "delete-confirm": "$1 के हटाईं",
+ "delete-legend": "हटाईं",
"actioncomplete": "काम पुरा भइल",
"dellogpage": "हटवले के लिस्ट",
"rollbacklink": "रोलबैक",
"rollbacklinkcount": "रोलबैक $1 {{PLURAL:$1|संपादन|संपादन सब}}",
+ "changecontentmodel-title-label": "पन्ना टाइटिल",
+ "changecontentmodel-model-label": "नया बिसयसूची माडल",
+ "changecontentmodel-reason-label": "कारण:",
+ "changecontentmodel-submit": "बदलीं",
+ "logentry-contentmodel-change-revertlink": "वापस लीं",
"protectlogpage": "सुरक्षा लॉग",
"protectlogtext": "नीचे पन्ना सुरक्षा में भइल बदलावकुल के सूची बा।\nहाल में सुरक्षित पन्नन के सूची खातिर [[Special:ProtectedPages|सुरक्षित पन्नन के सूची]] देखीं।",
"protectedarticle": "\"[[$1]]\" सुरक्षित कइल गइल",
"imgmultigo": "जाईं!",
"imgmultigoto": "$1 पन्ना पर जाईं",
"autoredircomment": "पन्ना [[$1]] पर अनुप्रेषित कइल गइल",
+ "autosumm-new": "पन्ना बनावल गइल \"$1\" के साथ",
"watchlisttools-clear": "धियानसूची साफ करीं",
"watchlisttools-view": "प्रासंगिक बदलाव देखीं",
"watchlisttools-edit": "धियानसूची देखीं आ संपादित करीं",
"specialpages-group-wiki": "डेटा अउर औजार",
"tag-filter": "[[Special:Tags|टैग]] छननी:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग|टैग कुल}}]]: $2)",
+ "tag-mw-new-redirect": "नाया अनुप्रेषण",
"tags-active-yes": "हँऽ",
"tags-active-no": "ना",
"tags-hitcount": "$1 {{PLURAL:$1|बदलाव}}",
"uncategorizedimages": "Fitxers sense categoria",
"uncategorizedtemplates": "Plantilles sense categoria",
"uncategorized-categories-exceptionlist": " # Conté una llista de categories no no s'haurien de mencionar a Special:UncategorizedCategories. Una per línia, començant amb «*». Les línies que comencin amb un altre caràcter (incloent l'espai en blanc) són ignorades. Utilitzeu «#» per a comentaris.",
- "unusedcategories": "Categories sense cap ús",
+ "unusedcategories": "Categories no utilitzades",
"unusedimages": "Fitxers no utilitzats",
"wantedcategories": "Categories demanades",
"wantedpages": "Pàgines demanades",
"postedit-confirmation-created": "Die Seite wurde erstellt.",
"postedit-confirmation-restored": "Die Seite wurde wiederhergestellt.",
"postedit-confirmation-saved": "Deine Bearbeitung wurde gespeichert.",
+ "postedit-confirmation-published": "Deine Bearbeitung wurde veröffentlicht.",
"edit-already-exists": "Die neue Seite konnte nicht erstellt werden, da sie bereits vorhanden ist.",
"defaultmessagetext": "Standardtext",
"content-failed-to-parse": "Parsen des Inhalts $2 für Modell $1 fehlgeschlagen: $3",
"lockmanager-fail-closelock": "Die Sperrdatei für „$1“ konnte nicht geschlossen werden.",
"lockmanager-fail-deletelock": "Die Sperrdatei für „$1“ konnte nicht gelöscht werden.",
"lockmanager-fail-acquirelock": "Die Sperre für „$1“ konnte nicht abgerufen werden.",
- "lockmanager-fail-openlock": "Die Sperrdatei für „$1“ konnte nicht geöffnet werden.",
+ "lockmanager-fail-openlock": "Die Sperrdatei für „$1“ konnte nicht geöffnet werden. Stelle sicher, dass dein Hochladerepositorium korrekt konfiguriert ist und dein Webserver eine Berechtigung zum Beschreiben dieses Repositoriums hat. Siehe https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory für weitere Informationen.",
"lockmanager-fail-releaselock": "Die Sperre für „$1“ konnte nicht freigegeben werden.",
"lockmanager-fail-db-bucket": "Es konnte mit Sammelabruf $1 keine ausreichende Anzahl an Verbindungen zu Sperrdatenbanken hergestellt werden.",
"lockmanager-fail-db-release": "Die Sperren auf Datenbank $1 konnten nicht freigegeben werden.",
"seconds-ago": "Verê $1 {{PLURAL:$1|saniya|saniyeyan}}",
"monday-at": "Dışeme $1 de",
"tuesday-at": "Sêşeme $1 de",
- "wednesday-at": "Çarşeme $1 de",
+ "wednesday-at": "Çeharşeme $1 de",
"thursday-at": "Pancşeme $1 de",
"friday-at": "Êne $1 de",
"saturday-at": "Şeme $1 de",
"postedit-confirmation-created": "The page has been created.",
"postedit-confirmation-restored": "The page has been restored.",
"postedit-confirmation-saved": "Your edit was saved.",
+ "postedit-confirmation-published": "Your edit was published.",
"edit-already-exists": "Could not create a new page.\nIt already exists.",
"addsection-preload": "",
"addsection-editintro": "",
"lockmanager-fail-closelock": "Could not close lock file for \"$1\".",
"lockmanager-fail-deletelock": "Could not delete lock file for \"$1\".",
"lockmanager-fail-acquirelock": "Could not acquire lock for \"$1\".",
- "lockmanager-fail-openlock": "Could not open lock file for \"$1\".",
+ "lockmanager-fail-openlock": "Could not open lock file for \"$1\". Make sure your upload directory is configured correctly and your web server has permission to write to that directory. See https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory for more information.",
"lockmanager-fail-releaselock": "Could not release lock for \"$1\".",
"lockmanager-fail-db-bucket": "Could not contact enough lock databases in bucket $1.",
"lockmanager-fail-db-release": "Could not release locks on database $1.",
"lockmanager-fail-closelock": "No se pudo cerrar la referencia para el archivo de bloqueo de \"$1\".",
"lockmanager-fail-deletelock": "No se pudo eliminar el archivo de bloqueo para \"$1\".",
"lockmanager-fail-acquirelock": "No pudo adquirir el bloqueo para \"$1\".",
- "lockmanager-fail-openlock": "No se pudo abrir el archivo de bloqueo para \"$1\".",
+ "lockmanager-fail-openlock": "No se pudo abrir el archivo de bloqueo de «$1». Revisa que el directorio de cargas esté configurado correctamente y que tu servidor web tenga permisos de escritura en ese directorio. Consulta https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory para obtener más información.",
"lockmanager-fail-releaselock": "No se pudo liberar el bloqueo de \"$1\".",
"lockmanager-fail-db-bucket": "No se pudo contactar con las suficientes bases de datos del conjunto $1.",
"lockmanager-fail-db-release": "No se pudieron liberar los bloqueos registrados en la base de datos $1.",
"listduplicatedfiles": "Lista de archivos con duplicados",
"listduplicatedfiles-summary": "Esta es una lista de archivos donde la versión más reciente es un duplicado de la versión más reciente de un archivo con otro nombre. Solo se tienen en cuenta archivos locales.",
"listduplicatedfiles-entry": "[[:File:$1|$1]] tiene [[$3|{{PLURAL:$2|un duplicado|$2 duplicados}}]].",
- "unusedtemplates": "Plantillas sin uso",
+ "unusedtemplates": "Plantillas no utilizadas",
"unusedtemplatestext": "Aquí se enumeran todas las páginas en el espacio de nombres {{ns:template}} que no están incluidas en otras páginas. Recuerda mirar lo que enlaza a las plantillas antes de borrarlas.",
"unusedtemplateswlh": "otros enlaces",
"randompage": "Página aleatoria",
"uncategorizedimages": "Archivos sin categorizar",
"uncategorizedtemplates": "Plantillas sin categorizar",
"uncategorized-categories-exceptionlist": "# Contiene una lista de categorías que no deberían figurar en Special:UncategorizedCategories. Una categoría por línea, empezando por «*». Las líneas que empiecen por otro carácter (espacios en blanco incluidos) se ignorarán. Usa «#» para añadir comentarios.",
- "unusedcategories": "Categorías sin uso",
- "unusedimages": "Archivos sin uso",
+ "unusedcategories": "Categorías no utilizadas",
+ "unusedimages": "Archivos no utilizados",
"wantedcategories": "Categorías requeridas",
"wantedpages": "Páginas requeridas",
"wantedpages-summary": "Lista de páginas inexistentes con el mayor número de enlaces a ellas, excluyendo páginas que son solo redirecciones a ellas. Para ver una lista de páginas inexistentes con redirecciones apuntando a ellas, consulta [[{{#special:BrokenRedirects}}|la lista de redirecciones rotas]].",
"protect-otherreason": "Otra razón:",
"protect-otherreason-op": "Otro motivo",
"protect-dropdown": "*Razones de protección habituales\n**Vandalismo excesivo\n**Spam excesivo\n**Guerra de ediciones\n**Página muy visitada",
- "protect-edit-reasonlist": "Editar las razones de protección",
+ "protect-edit-reasonlist": "Editar motivos de protección",
"protect-expiry-options": "1 hora:1 hour,1 día:1 day,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite",
"restriction-type": "Permiso:",
"restriction-level": "Nivel de restricción:",
"lockmanager-fail-closelock": "Ezin izan da \"$1\" fitxategiaren giltza itxi.",
"lockmanager-fail-deletelock": "Ezin izan da \"$1\" fitxategia desblokeatu.",
"lockmanager-fail-acquirelock": "Ezin izan da \"$1\" blokeoa eskuratu.",
- "lockmanager-fail-openlock": "Ezin izan da \"$1\" blokeo fitxategia ireki.",
+ "lockmanager-fail-openlock": "Ezin izan da \"$1\"-rentzako blokeo fitxategia ireki. Ziurtatu igoera direktorioa behar bezala konfiguratuta dagoela eta zure web zerbitzariak baimena duela idazteko. Ikusi informazio gehiagorako https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory.",
"lockmanager-fail-releaselock": "Ezin izan da \"$1\" blokeoa askatu.",
"lockmanager-fail-db-bucket": "Ezin izan dut $1 buketean datubase nahikoa ziurtatu.",
"lockmanager-fail-db-release": "Ezin izan da $1 datubasean giltzaraporik askatu.",
"restrictionsfield-badip": "Baliogabeko IP helbide edo eremua: $1",
"restrictionsfield-label": "Onartutako IP eremuak:",
"restrictionsfield-help": "Linea bakoitzeko IP helbide edo CIDR eremu bakarra. Guztia gaitzeko, erabili: \n<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Akatsa: $1",
+ "edit-error-long": "Akatsak:\n\n$1",
"revid": "$1 berrikusi",
"pageid": "$1 orri IDa",
"rawhtml-notallowed": "<html> etiketak ezin dira orri arruntetatik kanpo erabili.",
"recentchanges-noresult": "در فاصله زمانی ارائه شده هیچ تغییری با این معیارهای صورت نگرفته است",
"recentchanges-timeout": "این جستجو زمانش تمام شد. اگر مایلید کلیدواژههای دیگری را جستجو کنید.",
"recentchanges-network": "به دلیل خطای فنی، نتیجهای بدست نیامد. لطفاً برای تازهسازی صفحخ مجدداُ تلاش کنید.",
+ "recentchanges-notargetpage": "نام صفحه را در بالا وارد کنید تا تغییرات مرتبط با آن صفحه را مشاهده کنید.",
"recentchanges-feed-description": "آخرین تغییرات ویکی را در این خوراک پیگیری کنید.",
"recentchanges-label-newpage": "این ویرایش صفحهای تازه ایجاد کرد",
"recentchanges-label-minor": "این یک ویرایش جزئی است",
"rcfilters-advancedfilters": "پالایههای پیشرفته",
"rcfilters-limit-title": "تعداد تغییرات برای نمایش",
"rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|تغییر|تغییر}}, $2",
+ "rcfilters-date-popup-title": "دوره زمانی برای جستجو",
"rcfilters-days-title": "روزهای اخیر",
"rcfilters-hours-title": "ساعتهای اخیر",
"rcfilters-days-show-days": "$1 {{PLURAL:$1|روز|روز}}",
"rcfilters-watchlist-showupdated": "تغییرات صفحاتی که شما بازدید نکردید از زمانی که تغییرات رخ داده به صورت <strong>پررنگ</strong>، با نشانگر توپر.",
"rcfilters-preference-label": "مخفی کردن نسخه بهبود یافته تغییرات اخیر",
"rcfilters-preference-help": "تغییرات رابط کاربری که در سال ۲۰۱۷ اضافه شده است را بر میگرداند.",
+ "rcfilters-filter-showlinkedfrom-label": "نمایش تغییرات صفحاتی که پیوند شدهاند",
+ "rcfilters-filter-showlinkedfrom-option-label": "<strong>صفحات پیوند به</strong> صفحهٔ انتخاب شده",
+ "rcfilters-filter-showlinkedto-label": "نمایش تغییرات در صفحاتی که در ون این صفحه پیوند شدهاند",
+ "rcfilters-filter-showlinkedto-option-label": "<strong>صفحات پیوند شده</strong> درون صفحهٔ انتخاب شده",
+ "rcfilters-target-page-placeholder": "وارد کردن نام صفحه (یا رده)",
"rcnotefrom": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شدهاست|نشان داده شدهاند}}).",
"rclistfromreset": "از نو کردن انتخاب تاریخ",
"rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
"doubleredirects": "تغییرمسیرهای دوتایی",
"doubleredirectstext": "این صفحه فهرستی از صفحههای تغییرمسیری را ارائه میکند که به صفحهٔ تغییرمسیر دیگری اشاره میکنند.\nهر سطر دربردارندهٔ پیوندهایی به تغییرمسیر اول و دوم و همچنین مقصد تغییرمسیر دوم است، که معمولاً صفحهٔ مقصد واقعی است و نخستین تغییرمسیر باید به آن اشاره کند.\nموارد <del>خط خورده</del> درست شدهاند.",
"double-redirect-fixed-move": "[[$1]] انتقال داده شدهاست.\n\nبه صورت خودکار بهروز شدهاست و تغییرمسیری به [[$2]] داده شد.",
- "double-redirect-fixed-maintenance": "رفع خودکار تغییرمسیر دوتایی از [[$1]] به [[$2]] در روند نگهداری.",
+ "double-redirect-fixed-maintenance": "رفع خودکار تغییرمسیر دوتایی از [[$1]] به [[$2]] در روند نگهداری",
"double-redirect-fixer": "تعمیرکار تغییرمسیرها",
"brokenredirects": "تغییرمسیرهای خراب",
"brokenredirectstext": "تغییرمسیرهای زیر به یک صفحهٔ ناموجود پیوند دارند:",
"import-mapping-subpage": "درونریزی به عنوان زیرصفحهٔ صفحهٔ:",
"import-upload-filename": "نام پرونده:",
"import-upload-username-prefix": "پیشوند میانویکی:",
+ "import-assign-known-users": "نسبت دادن ویرایشها به کاربران محلی در صورتی که نام به صورت محلی وجود دارد",
"import-comment": "توضیح:",
"importtext": "لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برونبری]] دریافت کنید.\nسپس آن را روی دستگاهتان ذخیره کنید و اینجا بارگذاری نمایید.",
"importstart": "در حال درونریزی صفحات...",
"imported-log-entries": "$1 {{PLURAL:$1|مورد سیاهه|مورد سیاهه}} درون ریزی شد.",
"importfailed": "درونریزی صفحات شکست خورد: <nowiki>$1</nowiki>",
"importunknownsource": "نوع مأخذ درونریزی معلوم نیست",
+ "importnoprefix": "پیشوند میانویکی پشتیبانی نمیشود",
"importcantopen": "پروندهٔ درونریزی صفحات باز نشد",
"importbadinterwiki": "پیوند میانویکی نادرست",
"importsuccess": "درونریزی با موفقیت انجام شد!",
"pageinfo-category-subcats": "تعداد زیرردهها",
"pageinfo-category-files": "تعداد پروندهها",
"pageinfo-user-id": "شناسه کاربر",
+ "pageinfo-file-hash": "مقدار هش",
"markaspatrolleddiff": "برچسب گشت بزن",
"markaspatrolledtext": "به این صفحه برچسب گشت بزن",
"markaspatrolledtext-file": "انتخاب این نسخهٔ پرونده به عنوان گشت خورده",
"autosumm-replace": "جایگزینی صفحه با '$1'",
"autoredircomment": "تغییرمسیر به [[$1]]",
"autosumm-removed-redirect": "تغییرمسیر به [[$1]] حذف شد",
+ "autosumm-changed-redirect-target": "تغییر هدف تغییرمسیر از [[$1]] به [[$2]]",
"autosumm-new": "صفحهای تازه حاوی «$1» ایجاد کرد",
"autosumm-newblank": "ایجاد صفحه خالی",
"size-bytes": "$1 {{PLURAL:$1|بایت}}",
"restrictionsfield-badip": "نشانی یا بازهٔ آیپی نامعتبر: $1",
"restrictionsfield-label": "بازههای آیپی مجاز:",
"restrictionsfield-help": "یک نشانی آیپی یا بازهٔ سیآیدیار در هر خط وارد کنید. برای فعال کردن همهچیز، این مقدار را استفاده کنید: <code>0.0.0.0/0</code><br /><code>::/0</code>",
+ "edit-error-short": "خطا: $1",
+ "edit-error-long": "خطاها:\n\n$1",
"revid": "نسخهٔ $1",
"pageid": "شناسهٔ صفحهٔ $1",
"rawhtml-notallowed": "برچسبهای <html> را نمیتوان خارج از صفحههای معمولی استفاده کرد.",
"lockmanager-fail-closelock": "Impossible de fermer le fichier de verrou pour « $1 ».",
"lockmanager-fail-deletelock": "Impossible de supprimer le fichier de verrou pour « $1 ».",
"lockmanager-fail-acquirelock": "Impossible d'obtenir le verrou pour « $1 ».",
- "lockmanager-fail-openlock": "Impossible d'ouvrir le fichier de verrou pour « $1» .",
+ "lockmanager-fail-openlock": "Impossible d’ouvrir le fichier de verrou pour « $1 » . Assurez-vous que votre répertoire de téléchargement est configuré correctement et que votre serveur web a le droit d’y écrire. Voyez https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory pour plus d’information.",
"lockmanager-fail-releaselock": "Impossible de relâcher le verrou pour « $1 ».",
"lockmanager-fail-db-bucket": "Impossible de contacter suffisamment de bases de données de verrouillage dans le godet $1.",
"lockmanager-fail-db-release": "Impossible de relâcher les verrous sur la base de données $1.",
"mytalk": "שיחה",
"anontalk": "שיחה",
"navigation": "ניווט",
- "and": " וגם",
+ "and": " ו",
"faq": "שאלות ותשובות",
"actions": "פעולות",
"namespaces": "מרחבי שם",
"lockmanager-fail-closelock": "לא הייתה אפשרות לסגור את קובץ הנעילה עבור \"$1\".",
"lockmanager-fail-deletelock": "לא הייתה אפשרות למחוק את קובץ הנעילה עבור \"$1\".",
"lockmanager-fail-acquirelock": "לא הייתה אפשרות לקבל נעילה עבור \"$1\".",
- "lockmanager-fail-openlock": "לא הייתה אפשרות לפתוח את קובץ הנעילה עבור \"$1\".",
+ "lockmanager-fail-openlock": "לא הייתה אפשרות לפתוח את קובץ הנעילה עבור \"$1\". יש לוודא שתיקיית ההעלאות מוגדרת בצורה תקינה ושלשרת האינטרנט יש הרשאות לכתוב לתיקייה זו. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory למידע נוסף].",
"lockmanager-fail-releaselock": "לא הייתה אפשרות לשחרר את הנעילה עבור \"$1\".",
"lockmanager-fail-db-bucket": "לא הייתה אפשרות לקבל מספיק מסדי נתונים של נעילות בדלי $1.",
"lockmanager-fail-db-release": "לא הייתה אפשרות לשחרר נעילות על מסד הנתונים $1.",
"Innocentbunny"
]
},
- "tog-underline": "लिà¤\82à¤\95 रà¥\87à¤\96ाà¤\82à¤\95ित à¤\95रà¥\87à¤\82:",
- "tog-hideminor": "हाल मà¥\87à¤\82 हà¥\81à¤\8f परिवरà¥\8dतनà¥\8bà¤\82 मà¥\87à¤\82 à¤\9bà¥\8bà¤\9fà¥\87 बदलाव छिपाएँ",
+ "tog-underline": "à¤\95ड़à¥\80 रà¥\87à¤\96ाà¤\82à¤\95न:",
+ "tog-hideminor": "हाल मà¥\87à¤\82 हà¥\81à¤\8f परिवरà¥\8dतनà¥\8bà¤\82 मà¥\87à¤\82 लà¤\98à¥\81 परिवरà¥\8dतन छिपाएँ",
"tog-hidepatrolled": "हाल में हुए परिवर्तनों में परीक्षित बदलाव छिपाएँ",
"tog-newpageshidepatrolled": "नये पृष्ठ की सूची में परीक्षित पृष्ठों को छिपाएँ",
"tog-hidecategorization": "पृष्ठों का श्रेणीकरण छिपाएं",
"version-poweredby-others": "अन्य",
"version-poweredby-translators": "translatewiki.net अनुवादक",
"version-credits-summary": "हम निम्न व्यक्तियों द्वारा [[Special:Version|मीडियाविकि]] में किये गए योगदानों को सराहते हैं।",
- "version-license-info": "मà¥\80डियाविà¤\95ि मà¥\81à¤\95à¥\8dत सà¥\89फ़à¥\8dà¤\9fवà¥\87यर हà¥\88; à¤\86प à¤\89सà¤\95ा पà¥\81नà¤\83 वितरण à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82 à¤\94र/या à¤\89सà¥\87 सà¤\82शà¥\8bधित à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82 à¤\9cà¥\88सा à¤\95ि à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\87 à¤\85à¤\82तरà¤\97त फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन दà¥\8dवारा पà¥\8dरà¤\95ाशित à¤\95िया à¤\97या था; या तà¥\8b लाà¤\87सà¥\87à¤\82स à¤\95ा à¤\85वतरण २, या (à¤\86पà¤\95à¥\87 विà¤\95लà¥\8dप à¤\95à¥\87 à¤\85नà¥\81सार) à¤\95à¥\8bà¤\88 à¤\94र à¤\85वतरण।\n\nमà¥\80डियाविà¤\95ि à¤\87स à¤\86शा à¤\95à¥\87 साथ वितरित à¤\95िया à¤\97या हà¥\88 à¤\95ि यह à¤\89पयà¥\81à¤\95à¥\8dत हà¥\88, पर वारà¤\82à¤\9fà¥\80 à¤\95à¥\87 बिना; à¤\9cिसमà¥\87à¤\82 वà¥\8dयापारिà¤\95 मापदà¤\82ड वालà¥\80 वारà¤\82à¤\9fà¥\80 à¤à¥\80 नहà¥\80à¤\82 हà¥\88 à¤\94र न हà¥\80 à¤\95िसà¥\80 लà¤\95à¥\8dषà¥\8dय à¤\95à¥\87 लिà¤\8f परà¥\8dयापà¥\8dत हà¥\8bनà¥\87 à¤\95ा पà¥\8dरावधान हà¥\88। à¤\94र à¤\9cानà¤\95ारà¥\80 à¤\95à¥\87 लिà¤\8f दà¥\87à¤\96िà¤\8f à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स।\n\nà¤\86पà¤\95à¥\8b à¤\87स पà¥\8dरà¥\8bà¤\97à¥\8dराम à¤\95à¥\87 साथ [{{SERVER}}{{SCRIPTPATH}}/COPYING à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\80 à¤\8fà¤\95 पà¥\8dरति] मिल à¤\9aà¥\81à¤\95à¥\80 हà¥\8bà¤\97à¥\80; यदि नहà¥\80à¤\82 तà¥\8b समà¥\8dपरà¥\8dà¤\95 à¤\95à¥\80à¤\9cिà¤\8f फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन, à¤\87à¤\82à¤\95., 51 फ़à¥\8dरà¥\88à¤\82à¤\95लिन सà¥\8dà¤\9fà¥\8dरà¥\80à¤\9f, पाà¤\81à¤\9aवà¥\80à¤\82 मà¤\82à¤\9c़िल, बà¥\8bस्टन, एम०ए० 02110-1301, यू०एस०ए० या [//www.gnu.org/licenses/old-licenses/gpl-2.0.html इसे ऑनलाइन पढ़ें].",
+ "version-license-info": "मà¥\80डियाविà¤\95ि मà¥\81à¤\95à¥\8dत सà¥\89फ़à¥\8dà¤\9fवà¥\87यर हà¥\88; à¤\86प à¤\89सà¤\95ा पà¥\81नà¤\83 वितरण à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82 à¤\94र/à¤\85थवा à¤\89सà¥\87 à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\87 à¤\85à¤\82तरà¤\97त सà¤\82शà¥\8bधित à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82, à¤\9cà¥\88सा à¤\95à¥\80 फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन दà¥\8dवारा पà¥\8dरà¤\95ाशित à¤\95िया à¤\97या था; या तà¥\8b लाà¤\87सà¥\87à¤\82स à¤\95ा à¤\85वतरण २, या (à¤\86पà¤\95à¥\87 विà¤\95लà¥\8dप à¤\95à¥\87 à¤\85नà¥\81सार) à¤\89सà¤\95à¥\87 बाद à¤\95à¥\87 à¤\95à¥\8bà¤\88 à¤à¥\80 à¤\85नà¥\8dय à¤\85वतरण।\n\nमà¥\80डियाविà¤\95ि à¤\87स à¤\86शा à¤\95à¥\87 साथ वितरित à¤\95िया à¤\97या हà¥\88 à¤\95ि यह à¤\89पयà¥\81à¤\95à¥\8dत हà¥\88, पर वारà¤\82à¤\9fà¥\80 à¤\95à¥\87 बिना; à¤\9cिसमà¥\87à¤\82 वà¥\8dयापारिà¤\95 मापदà¤\82ड वालà¥\80 वारà¤\82à¤\9fà¥\80 à¤à¥\80 नहà¥\80à¤\82 हà¥\88 à¤\94र न हà¥\80 à¤\95िसà¥\80 लà¤\95à¥\8dषà¥\8dय à¤\95à¥\87 लिà¤\8f परà¥\8dयापà¥\8dत हà¥\8bनà¥\87 à¤\95ा पà¥\8dरावधान हà¥\88। à¤\85धिà¤\95 à¤\9cानà¤\95ारà¥\80 à¤\95à¥\87 लिà¤\8f à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स दà¥\87à¤\96ियà¥\87।\n\nà¤\86पà¤\95à¥\8b à¤\87स पà¥\8dरà¥\8bà¤\97à¥\8dराम à¤\95à¥\87 साथ [{{SERVER}}{{SCRIPTPATH}}/COPYING à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\80 à¤\8fà¤\95 पà¥\8dरति] मिल à¤\9aà¥\81à¤\95à¥\80 हà¥\8bà¤\97à¥\80; यदि नहà¥\80à¤\82 तà¥\8b समà¥\8dपरà¥\8dà¤\95 à¤\95à¥\80à¤\9cिà¤\8f फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन, à¤\87à¤\82à¤\95., 51 फ़à¥\8dरà¥\88à¤\82à¤\95लिन सà¥\8dà¤\9fà¥\8dरà¥\80à¤\9f, पाà¤\81à¤\9aवà¥\80à¤\82 मà¤\82à¤\9c़िल, बà¥\89स्टन, एम०ए० 02110-1301, यू०एस०ए० या [//www.gnu.org/licenses/old-licenses/gpl-2.0.html इसे ऑनलाइन पढ़ें].",
"version-software": "इन्स्टॉल की हुई प्रणाली",
"version-software-product": "प्रोडक्ट",
"version-software-version": "अवतरण",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
"tag-mw-contentmodelchange": "सामग्री मॉडल परिवर्तन",
"tag-mw-contentmodelchange-description": "पृष्ठ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel सामग्री मॉडल को परिवर्तित करें] के संपादन।",
- "tag-mw-new-redirect": "नया पà¥\81नà¥\8dनà¤\83 पà¥\8dरà¥\87षित लà¤\95à¥\8dषà¥\8dय",
+ "tag-mw-new-redirect": "नया à¤\85नà¥\81पà¥\8dरà¥\87षण",
"tag-mw-new-redirect-description": "बदलाव जो एक नया रीडायरेक्ट बनाते हैं या पुनर्निर्देशन के लिए एक पृष्ठ बदलते हैं",
"tag-mw-removed-redirect": "हटाया गया पुनर्निर्देशन",
"tag-mw-removed-redirect-description": "संपादन जो किसी मौजूदा रीडायरेक्ट को गैर रीडायरेक्ट में बदलता है",
"tag-mw-replace-description": "संपादन जिसने 90% से अधिक पृष्ट की सामग्री को हटा दिया",
"tag-mw-rollback": "प्रत्यापन्न",
"tag-mw-rollback-description": "संपादन जो रोलबैक लिंक का उपयोग करके पिछला संपादन वापस रोल करता है",
- "tag-mw-undo": "किए हुए कार्य को पूर्वत करना",
+ "tag-mw-undo": "à¤\95िà¤\8f हà¥\81à¤\8f à¤\95ारà¥\8dय à¤\95à¥\8b पà¥\82रà¥\8dववत à¤\95रना",
"tag-mw-undo-description": "संपादन जो पिछले लिंक का उपयोग करके पिछले संपादन को पूर्वत करता है",
"tags-title": "चिप्पियाँ",
"tags-intro": "यह पृष्ठ अर्थ सहित वह चिप्पियाँ दर्शाता है जिनका कोई तंत्रांश किसी संपादन पर निशान लगाने के लिए इस्तेमाल कर सकता है।",
"limitreport-expansiondepth": "उच्चतम विस्तार गहराई",
"limitreport-expensivefunctioncount": "महंगे पार्सर फंक्शनों की संख्या",
"expandtemplates": "साँचा विस्तार",
- "expand_templates_intro": "यह विशà¥\87ष पà¥\83षà¥\8dठपाठà¤\87नपà¥\81à¤\9f लà¥\87ता हà¥\88 à¤\94र सà¤à¥\80 साà¤\81à¤\9aà¥\8bà¤\82 à¤\95à¥\8b विसà¥\8dतà¥\83त à¤\95रता हà¥\88।\nयह <code><nowiki>{{</nowiki>#language:â\80¦}}</code> à¤\9cà¥\88सà¥\87 पारà¥\8dसर फà¤\82à¤\95à¥\8dशनà¥\8bà¤\82 à¤\94र\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> à¤\9cà¥\88सà¥\87 वà¥\87रियà¥\87बलà¥\8bà¤\82 à¤\95à¥\8b à¤à¥\80 विसà¥\8dतà¥\83त à¤\95रता हà¥\88।\nयह दà¥\8bहरà¥\87 à¤\95à¥\8bषà¥\8dठà¤\95à¥\8bà¤\82 मà¥\87à¤\82 दिया लगभग सब कुछ विस्तृत करता है।",
+ "expand_templates_intro": "यह विशà¥\87ष पà¥\83षà¥\8dठविà¤\95िपाठà¥\8dय à¤\87नपà¥\81à¤\9f लà¥\87ता हà¥\88 à¤\94र à¤\89सà¤\95à¥\87 à¤à¥\80तर à¤\95à¥\87 सà¤à¥\80 साà¤\81à¤\9aà¥\8bà¤\82 à¤\95à¥\8b विसà¥\8dतà¥\83त à¤\95रता हà¥\88।\nयह <code><nowiki>{{</nowiki>#language:â\80¦}}</code> à¤\9cà¥\88सà¥\87 पारà¥\8dसर फ़à¤\82à¤\95à¥\8dशनà¥\8dस à¤\94र\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> à¤\9cà¥\88सà¥\87 परिवरà¥\8dतनशà¥\80ल मानà¥\8bà¤\82 à¤\95ा à¤à¥\80 विसà¥\8dतà¥\8dरण à¤\95रता हà¥\88।\nयह दà¥\8bहरà¥\87 à¤\95à¥\8bषà¥\8dठà¤\95à¥\8bà¤\82 मà¥\87à¤\82 पà¥\8dरà¥\87षित लगभग सब कुछ विस्तृत करता है।",
"expand_templates_title": "कन्टेक्स्ट शीर्षक, जैसे {{FULLPAGENAME}} आदि के लिए:",
- "expand_templates_input": "à¤\87नपà¥\81à¤\9f पाठ:",
+ "expand_templates_input": "विà¤\95िपाठà¥\8dय à¤\87नपà¥\81à¤\9f à¤\95रà¥\87à¤\82:",
"expand_templates_output": "परिणाम",
"expand_templates_xml_output": "XML आउटपुट",
"expand_templates_html_output": "सीधे-साधा एचटीएमएल आउटपुट",
"expand_templates_preview": "झलक",
"expand_templates_preview_fail_html": "<strong>अगर यह वैध पूर्ववावलोकन प्रयास है, तो फिर से प्रयास कीजिए।</strong>\nअगर इससे काम न बने तो [[Special:UserLogout|सत्रांत होकर]] पुनः से लॉग इन करें और जाँच करें की आपका ब्राउज़र इस साइट पर कुकीज को अनुमत करता है।",
"expand_templates_preview_fail_html_anon": "<em>चूँकि {{SITENAME}} सीधे-साधे रूप से एचटीएमएल-सक्षम है और आप लॉग्ड इन नहीं है, पूर्वावलोकन छिपा हुआ है ताकि सम्भावित जावास्क्रिप्ट हमले को रोका सके।</em>\n\n<strong>अगर यह वैध पूर्वावलोकन प्रयास है तो कृपया [[Special:UserLogin|लॉग इन करके]] फिर से प्रयास कीजिए।</strong>",
- "expand_templates_input_missing": "आपको कम से कम कुछ पाठ्य प्रदान करने पड़ेंगे।",
+ "expand_templates_input_missing": "à¤\86पà¤\95à¥\8b à¤\95म सà¥\87 à¤\95म à¤\95à¥\81à¤\9b विà¤\95à¥\80पाठà¥\8dय पà¥\8dरदान à¤\95रनà¥\87 पड़à¥\87à¤\82à¤\97à¥\87।",
"pagelanguage": "पृष्ठ भाषा बदलें",
"pagelang-name": "पृष्ठ",
"pagelang-language": "भाषा",
"logentry-import-interwiki": "$1 {{GENDER:$2|uvezao|uvezla}} je $3 s drugog wikija",
"logentry-import-interwiki-details": "$1 {{GENDER:$2|uvezao|uvezla}} je $3 sa $5 ($4 {{PLURAL:$4|izmjena|izmjene|izmjena}})",
"logentry-merge-merge": "$1 je {{GENDER:$2|spojio|spojila}} $3 s $4 (izmjene do $5)",
- "logentry-move-move": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4",
+ "logentry-move-move": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4",
"logentry-move-move-noredirect": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4 bez preusmjeravanja",
"logentry-move-move_redir": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4 preko preusmjeravanja",
"logentry-move-move_redir-noredirect": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4 preko preusmjeravanja bez ostavljanja preusmjeravanja",
"search-external": "Külső kereső",
"searchdisabled": "Elnézésed kérjük, de a teljes szöveges keresés terhelési okok miatt átmenetileg nem használható. Ezidő alatt használhatod a lenti Google keresést, mely viszont lehetséges, hogy nem teljesen friss adatokkal dolgozik.",
"search-error": "A keresés közben hiba történt: $1",
- "search-warning": "$1 keresése közben hiba történt",
+ "search-warning": "Hiba történt a keresés közben: $1",
"preferences": "Beállítások",
"mypreferences": "Beállítások",
"prefs-edits": "Szerkesztéseid száma:",
"uncategorized-categories-exceptionlist": " # Contine un lista de categorias que non debe esser mentionate sur Special:UncategorizedCategories. Un per linea, comenciante con \"*\". Lineas que comencia con un altere character (incluse spatios) es ignorate. Usa \"#\" for commentos.",
"unusedcategories": "Categorias non usate",
"unusedimages": "Imagines non usate",
- "wantedcategories": "Categorias plus demandate",
- "wantedpages": "Paginas plus demandate",
+ "wantedcategories": "Categorias desirate",
+ "wantedpages": "Paginas desirate",
"wantedpages-summary": "Lista del paginas non existente con le major numero de ligamines verso illos, excludente le paginas verso le quales solmente redirectiones liga. Pro un lista del paginas non existente verso le quales redirectiones liga, vide [[{{#special:BrokenRedirects}}|le lista de redirectiones rupte]].",
"wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
"wantedfiles": "Files desirate",
"exif-languagecode": "Мотт",
"exif-iimcategory": "Категори",
"exif-orientation-1": "гIаьхьа",
+ "exif-exposureprogram-1": "Кара",
"exif-scenecapturetype-1": "Ландшафт",
"exif-scenecapturetype-2": "Сага сурт",
"exif-iimcategory-edu": "Дешарца Iомадар",
"lockmanager-fail-closelock": "Non riuscita chiusura del file di blocco per \"$1\".",
"lockmanager-fail-deletelock": "Non riuscita cancellazione del file di blocco per \"$1\".",
"lockmanager-fail-acquirelock": "Non riuscita acquisizione blocco per \"$1\".",
- "lockmanager-fail-openlock": "Non riuscita apertura del file di blocco per \"$1\".",
+ "lockmanager-fail-openlock": "Non riuscita apertura del file di blocco per \"$1\". Assicurati che la cartella per i caricamenti sia configurata correttamente e il web server abbia i permessi per scriverci. Vedi https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory per ulteriori informazioni.",
"lockmanager-fail-releaselock": "Non riuscito rilascio del blocco per \"$1\".",
"lockmanager-fail-db-bucket": "Impossibile contattare i necessari database di blocco nel bucket $1.",
"lockmanager-fail-db-release": "Impossibile revocare i blocchi sul database $1.",
"tag-mw-blank-description": "Modifiche che svuotano una pagina",
"tag-mw-replace": "Sostituito",
"tag-mw-replace-description": "Modifiche che rimuovono oltre il 90% del contenuto di una pagina",
- "tag-mw-rollback": "Atmesti",
+ "tag-mw-rollback": "Rollback",
"tag-mw-rollback-description": "Modifiche che ripristinano le versioni precedenti utilizzando il collegamento di rollback",
"tag-mw-undo": "Annulla",
"tag-mw-undo-description": "Modifiche che annullano le modifiche precedenti utilizzando il collegamento \"Annulla\"",
"recentchangeslinked-feed": "関連ページの更新状況",
"recentchangeslinked-toolbox": "関連ページの更新状況",
"recentchangeslinked-title": "「$1」と関連する変更",
- "recentchangeslinked-summary": "ã\81\93ã\82\8cã\81¯æ\8c\87å®\9aã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\83ªã\83³ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b (ã\81¾ã\81\9fã\81¯æ\8c\87å®\9aã\81\97ã\81\9fã\82«ã\83\86ã\82´ã\83ªã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8b) ã\83\9aã\83¼ã\82¸ã\81®æ\9c\80è¿\91ã\81®å¤\89æ\9b´ã\81®ä¸\80覧ã\81§ã\81\99ã\80\82\n[[Special:Watchlist|è\87ªå\88\86ã\81®ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸は<strong>太字</strong>で表示されます。",
+ "recentchangeslinked-summary": "ã\83\9aã\83¼ã\82¸å\90\8dã\82\92å\85¥å\8a\9bã\81\99ã\82\8bã\81¨ã\80\81ã\83ªã\83³ã\82¯é\96¢ä¿\82 (ã\81\9dã\81®ã\83\9aã\83¼ã\82¸ã\81®ã\83ªã\83³ã\82¯å\85\88ã\82\82ã\81\97ã\81\8fã\81¯ä»\96ã\81®ã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\81®ã\83ªã\83³ã\82¯) ã\81®æ\9c\80è¿\91ã\81®å¤\89æ\9b´ã\82\92調ã\81¹ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82 (ä¸\8bä½\8dã\82«ã\83\86ã\82´ã\83ªã\82\92å\8f\82ç\85§ã\81\99ã\82\8bã\81«ã\81¯ã\80\81ã\82«ã\83\86ã\82´ã\83ª:ã\82«ã\83\86ã\82´ã\83ªå\90\8d (Category:Name of category) ã\82\92å\85¥å\8a\9b)ã\80\82[[Special:Watchlist|è\87ªå\88\86ã\81®ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\81®å¤\89æ\9b´は<strong>太字</strong>で表示されます。",
"recentchangeslinked-page": "ページ名:",
"recentchangeslinked-to": "このページへのリンク元での変更の表示に切り替え",
"recentchanges-page-added-to-category": "[[:$1]]をカテゴリに追加",
"site-rss-feed": "$1 ''RSS Feed''",
"site-atom-feed": "Lebon atom $1",
"page-rss-feed": "\"$1\" ''RSS Feed''",
- "page-atom-feed": "\"$1\" ''Atom Feed''",
+ "page-atom-feed": "Pakan atom \"$1\"",
"red-link-title": "$1 (kaca ora ana)",
"sort-descending": "Urutaké medhun",
"sort-ascending": "Urutaké munggah",
"nosuchaction": "Ora ana tumindak mangkono",
"nosuchactiontext": "Tumindak sing dikarepaké déning URL ora trep.\nPanjenengan bokmanawa salah ngetik URL-é, utawa salah nurut pranala.\nIki bokmanawa uga nuduhaké yèn ana ama ing piranti alus sing dianggo déning {{SITENAME}}.",
"nosuchspecialpage": "Ora ana kaca mirunggan mangkono",
- "nospecialpagetext": "Panjenengan nyuwun kaca astaméwa sing ora sah. Daftar kaca astaméwa sing sah bisa dipirsani ing [[Special:SpecialPages|daftar kaca astaméwa]].",
+ "nospecialpagetext": "<strong>Panjenengan nyuwun kaca mirunggan sing ora sah.</strong>\n\nPratélan kaca mirunggan sing sah bisa tinemu ing [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Masalah",
"databaseerror": "Masalah sasana dhata",
"databaseerror-text": "Ana kerusakan ing basis data (query error).\n\nMungkin ana masalah ing software-e.",
"showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
"showingresultsinrange": "Nuduhaké nganti {{PLURAL:$1|<strong>1</strong> kasil|<strong>$1</strong> kasil}} sajeroning penthangan #<strong>$2</strong> tekan #<strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Asil <strong>$1</strong> saka <strong>$3</strong>|Asil <strong>$1 – $2</strong> saka <strong>$3</strong>}}",
- "search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
+ "search-nonefound": "Ora ana kasil sing mathuk karo pitakoné.",
"search-nonefound-thiswiki": "Ora ana kasil sing jumbuh karo panjalukan ing situs iki.",
"powersearch-legend": "Panggolèkan sabanjuré (''advance search'')",
"powersearch-ns": "Golèk ing mandala aran:",
"recentchanges": "Owahan-owahan anyar",
"recentchanges-legend": "Opsi owah-owahan anyar",
"recentchanges-summary": "Lacak owah-owahan anyar wiki iki ing kaca iki.",
- "recentchanges-noresult": "Ora ana pangowahan ing periode sing diwiwiti kriteria iki.",
+ "recentchanges-noresult": "Ora ana owahan ing kalamangsa sing mathuk karo pranatan iki.",
"recentchanges-feed-description": "Urutna owah-owahan anyar ing wiki ing ''feed'' iki.",
"recentchanges-label-newpage": "Besutan iki nggawé kaca anyar",
"recentchanges-label-minor": "Iki besutan cilik",
"recentchangeslinked-title": "Owah-owahan sing magepokan \"$1\"",
"recentchangeslinked-summary": "Iki pratélaning owah-owahan sing mentas digawé tumrap ing kaca-kaca sing nggayut sawijining kaca (utawa kaca-kaca anggotaning sawijining kategori).\nKaca ing [[Special:Watchlist|pawawangané panjenegan]] <strong>dikandeli</strong>.",
"recentchangeslinked-page": "Jeneng kaca:",
- "recentchangeslinked-to": "Nuduhaké owah-owahan menyang kaca sing disambung menyang kaca-kaca iki",
+ "recentchangeslinked-to": "Nuduhaké owah-owahan kaca-kaca sing nggayut kaca iki",
"recentchanges-page-added-to-category": "[[:$1]] ditambahaké ing kategori",
"recentchanges-page-added-to-category-bundled": "[[:$1]] ditambahaké ing kategori, [[Special:WhatLinksHere/$1|kaca iki kalebu ing njeroné kaca liyané]]",
"recentchanges-page-removed-from-category": "[[:$1]] dibusak saka kategori",
"mywatchlist": "Pawawangan",
"watchlistfor2": "Kanggo $1 $2",
"nowatchlist": "Ora ana apa-apa ing pawawanganing sampéyan.",
- "watchlistanontext": "Mangga $1 kanggo mirsani utawa nyunting daftar pangawasan panjenengan.",
+ "watchlistanontext": "Sumangga mlebu log saperlu ndeleng utawa mbesut barang ing pawawangané panjenengan.",
"watchnologin": "Durung mlebu log",
"addwatch": "Tambah nèng daptar pangawasan",
"addedwatchtext": "Kaca \"[[:$1]]\" wis ditambahaké menyang [[Special:Watchlist|daftar pangawasan]].\nOwah-owahan sing dumadi ing tembé ing kaca iku lan kaca dhiskusi sing kagandhèng, bakal dipacak ing kéné.",
"import-upload": "Ngunggahaké data XML",
"import-token-mismatch": "Kélangan data sèsi. Mangga dijajal manèh.",
"import-invalid-interwiki": "Ora bisa ngimport saka wiki sing kapilih.",
- "import-error-edit": "Kaca \"$1\" ora diimpor amarga Sampéyan ora dililakaké nyunting kuwi.",
+ "import-error-edit": "Kaca \"$1\" ora kaimpor amarga panjenengan ora kawogan mbesut iku.",
"import-error-create": "Kaca \"$1\" ora diimpor amarga Sampéyan ora dililakaké nggawé kuwi.",
"import-error-interwiki": "Kaca \"$1\" ora diimpor amarga jenengé dicadhangaké kango pranala njaba (interwiki).",
"import-error-special": "Kaca \"$1\" ora diimpor amarga darbèké mandala aran mirunggan sing ora nglilakaké anané kaca.",
"tooltip-t-whatlinkshere": "Pratélané kabèh kaca wiki sing nggayut mréné",
"tooltip-t-recentchangeslinked": "Owah-owahan anyar saka kaca-kaca sing nggayut kaca iki",
"tooltip-feed-rss": "''RSS feed'' kanggo kaca iki",
- "tooltip-feed-atom": "''Atom feed'' kanggo kaca iki",
+ "tooltip-feed-atom": "Pakan atom tumrap kaca iki",
"tooltip-t-contributions": "Pratélaning pisumbanging {{GENDER:$1|panganggo iki}}",
"tooltip-t-emailuser": "Kirimi layang-èl nyang {{GENDER:$1|panganggo iki}}",
"tooltip-t-info": "Katerangan liyané ngenani kaca iki",
"exif-referenceblackwhite": "Wiji réferènsi pasangan ireng putih",
"exif-datetime": "Tanggal lan wektu owahé barkas",
"exif-imagedescription": "Sesirah gambar",
- "exif-make": "Produsèn kamera",
+ "exif-make": "Prodhusèn kodhak",
"exif-model": "Modhèl kaméra",
"exif-software": "Piranti alus sing dianggo",
"exif-artist": "Prodhusèn",
"scarytranscludetoolong": "[URL-é kedawan]",
"deletedwhileediting": "<strong>Pélik:</strong> Kaca iki wis dibusak kawit pisanan panjenengan mbesut!",
"confirmrecreate": "Panganggo [[User:$1|$1]] ([[User talk:$1|Wicara]]) wis mbusak kaca iki nalika panjenengan miwiti panyuntingan mawa alesan:\n: ''$2''\nMangga didhedhes (dikonfirmasi) menawa panjenengan kersa nggawé ulang kaca iki.",
- "confirmrecreate-noreason": "Panganggo [[User:$1|$1]] ([[User talk:$1|wicara]]) mbusak kaca iki sakbaré Sampéyan lekas nyunting. Mangga pesthèkaké yèn Sampéyan pancen pingin tenan nggawé manèh kaca iki.",
+ "confirmrecreate-noreason": "Panganggo [[User:$1|$1]] ([[User talk:$1|rembug]]) {{GENDER:$1|mbusak}} kaca iki sawisé panjenengan wiwit mbesut. Sumangga konfirmasi yèn panjenengan temen arep nggawé manèh kaca iki.",
"recreate": "Gawé ulang",
"confirm-purge-title": "Buwang kaca iki",
"confirm_purge_button": "OK",
"redirect": "Lih-lihan miturut barkas, panganggo, kaca, owahan, utawa cathetan",
"redirect-summary": "Kaca mirunggan iki ngener ing sawijining barkas (jeneng gambar diwenehi), kaca (ID revisi utama ID kaca diwenehi), utawa kaca panganggo (ID panganggo diwenehi). Cara nganggo: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
"redirect-submit": "Menyang",
- "redirect-lookup": "Golek:",
+ "redirect-lookup": "Luru:",
"redirect-value": "Aji:",
"redirect-user": "ID panganggo",
"redirect-page": "ID kaca",
"logentry-patrol-patrol": "$1 {{GENDER:$2|nengeri}} révisi $4 saka kaca $3 sing diawasi",
"logentry-patrol-patrol-auto": "$1 otomatis {{GENDER:$2|nandhani}} benahan $4 saka kaca $3 kaawasake",
"logentry-newusers-newusers": "Akun panganggo $1 {{GENDER:$2|digawé}}",
- "logentry-newusers-create": "Akun panganggo $1 {{GENDER:$2|digawé}}",
+ "logentry-newusers-create": "Akun panganggo $1 wis {{GENDER:$2|kagawé}}",
"logentry-newusers-create2": "Akun panganggo $3 {{GENDER:$2|digawé}} déning $1",
"logentry-newusers-byemail": "Akun panganggo $3 {{GENDER:$2|digawé}} déning $1 lan tembung wadi dikirim lumantar layang-èl",
"logentry-newusers-autocreate": "Akun panganggo $1 otomatis {{GENDER:$2|digawé}}",
"password-change-forbidden": "Dir däerft op dëser Wiki Passwierder net änneren.",
"externaldberror": "Entweder ass e Feeler bei der externer Authentifizéierung geschitt, oder Dir däerft Ären externe Benotzerkont net aktualiséieren.",
"login": "Aloggen",
- "login-security": "Iwwerpréift Är Idnetitéit",
+ "login-security": "Iwwerpréift Är Identitéit",
"nav-login-createaccount": "Aloggen / Benotzerkont uleeën",
"logout": "Ofmellen",
"userlogout": "Ausloggen",
"doubleredirects": "Duebel Viruleedungen",
"doubleredirectstext": "Op dëser Säit stinn déi Säiten déi op aner Viruleedungssäite viruleeden.\nAn all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d'Zil vun der zweeter Viruleedung, déi normalerweis déi \"richteg\" Zilsäit ass, op déi déi éischt Viruleedung hilinke soll.\n<del>Duerchgestrachen</del> Linke goufe scho sou verännert datt déi duebel Viruleedung opgeléist ass.",
"double-redirect-fixed-move": "[[$1]] gouf geréckelt.\nD'Säit gouf automatesch aktualiséiert an et ass elo eng Viruleedung op [[$2]].",
- "double-redirect-fixed-maintenance": "Duebel Viruleedung vu(n) [[$1]] op [[$2]] gouf automatesch an engem 'maintenance job' gefléckt.",
+ "double-redirect-fixed-maintenance": "Duebel Viruleedung vu(n) [[$1]] op [[$2]] gouf automatesch an engem 'maintenance job' gefléckt",
"double-redirect-fixer": "Verbesserung vu Viruleedungen",
"brokenredirects": "Futtis Viruleedungen",
"brokenredirectstext": "Dës Viruleedunge linken op Säiten déi et net gëtt.",
"about": "Informaçioìn",
"article": "Vôxe",
"newwindow": "(O s'arve inte 'n âtro barcon)",
- "cancel": "Scancella",
+ "cancel": "Scancélla",
"moredotdotdot": "Âtro...",
"morenotlisted": "Questa lista a poriæ ese incompleta.",
"mypage": "Pàgina",
"searchbutton": "Riçèrca",
"go": "Vanni",
"searcharticle": "Vanni",
- "history": "Stöia da pàgina",
+ "history": "Cronologîa da pàgina",
"history_short": "Stöia",
"history_small": "Stoia",
"updatedmarker": "modificâ da-a mæ urtima vixita",
"site-atom-feed": "Feed Atom de $1",
"page-rss-feed": "Feed RSS pe \"$1\"",
"page-atom-feed": "Feed Atom pe \"$1\"",
- "red-link-title": "$1 (ancon da scrîve)",
+ "red-link-title": "$1 (a pàgina no esiste)",
"sort-descending": "Ordine decrescente",
"sort-ascending": "Ordine crescente",
"nstab-main": "Pàgina",
"welcomeuser": "Benvegnuo, $1!",
"welcomecreation-msg": "L'utensa a l'è stæta creâ correttamente.\nSe ti veu ti peu personalizzâ e [[Special:Preferences|preferençe de {{SITENAME}}]].",
"yourname": "Nomme",
- "userlogin-yourname": "Nómme uténte:",
- "userlogin-yourname-ph": "Scrivi o teu nomme utente",
+ "userlogin-yourname": "Nómme uténte",
+ "userlogin-yourname-ph": "Inserisci o teu nómme uténte",
"createacct-another-username-ph": "Scrivi o teu nomme utente",
"yourpassword": "Pòula segretta:",
- "userlogin-yourpassword": "Pòula segretta:",
+ "userlogin-yourpassword": "Ciâve",
"userlogin-yourpassword-ph": "Scrivi a tu poula segretta.",
"createacct-yourpassword-ph": "Scrivi 'na poula segretta.",
"yourpasswordagain": "Riscrivi a pòula segrétta:",
"notloggedin": "No t'ê introu",
"userlogin-noaccount": "No ti t'ê ancon registrou?",
"userlogin-joinproject": "Registrite insce {{SITENAME}}",
- "createaccount": "Crea 'n nêuvo account",
+ "createaccount": "Registrati",
"userlogin-resetpassword-link": "T'hæ miga ascordou a teu poula segretta?",
"userlogin-helplink2": "Agiutto pe intrâ",
"userlogin-loggedin": "Ti t'ê zà connesso comme {{GENDER:$1|$1}}.\nUsa o formulaio sottostante pe accede comme 'n atro utente.",
"createacct-reason": "Raxon",
"createacct-reason-ph": "Perché t'ê apreuvo a creâ un'atra utensa",
"createacct-reason-help": "Messaggio vixualizou into registro da creaçion de l'utença",
- "createacct-submit": "Crea a to utensa",
+ "createacct-submit": "Crea a teu utensa",
"createacct-another-submit": "Crea utensa",
"createacct-continue-submit": "Continnoa a creaçion de l'utença",
"createacct-another-continue-submit": "Continnoa a creaçion de l'utença",
"createacct-benefit-heading": "{{SITENAME}} o l'è realizzou da de gente comme ti.",
"createacct-benefit-body1": "{{PLURAL:$1|modìfica|modìfiche}}",
"createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàgine}}",
- "createacct-benefit-body3": "{{PLURAL:$1|contribuiou|contribuioei}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|contribûtô recénte|contribûtoî recénti}}",
"badretype": "E paròlle d'ordine che t'hæ scrîo son despægie.",
"usernameinprogress": "A creassion de 'n utensa con questo nomme a l'è zà in corso.\nSe prega de aspêtâ.",
"userexists": "O nomme ûtente inserîo o l'è za doeuviao.<br />\nÇernine 'n âtro.",
"resetpass-expired": "A to poula segretta a l'è descheita. Pe piaxei impòstine un-a neuva pe intrâ.",
"resetpass-expired-soft": "A to poula segretta a l'è descheita e a g'ha da ese reimpostâ. Pe piaxei çèrnine un-a neuva òua ò clicca in sce \"{{int:authprovider-resetpass-skip-label}}\" pe reimpostâla ciu tardi.",
"resetpass-validity-soft": "A to poula segretta a no l'è vallida: $1\n\nPe piaxei çèrnine un-a neuva òua, ò clicca in sce \"{{int:authprovider-resetpass-skip-label}}\" pe reimpostala ciu tardi.",
- "passwordreset": "Reimposta a poula segretta",
+ "passwordreset": "Reimposta ciâve",
"passwordreset-text-one": "Compilla sto formulaio pe riçeive a teu poula segretta temporannia via e-mail.",
"passwordreset-text-many": "{{PLURAL:$1|Compilla un di campi pe riçeive una poula segretta temporannia via e-mail.}}",
"passwordreset-disabled": "A reimpostaçion de poule segrette a l'è stæta disabilitâ in sce sta wiki",
"media_tip": "Ingancio a file moltimediâ",
"sig_tip": "Firma con dæta e ôa",
"hr_tip": "Linnia orizontâ",
- "summary": "Oggetto:",
+ "summary": "Ògetto:",
"subject": "Sogetto:",
"minoredit": "Quésta a l'é 'na modìfica minô",
"watchthis": "Metti sotta oservaçion",
"action-purge": "aggiornâ questa paggina",
"nchanges": "$1 {{PLURAL:$1|modiffica|modiffiche}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'urtima vixita}}",
- "enhancedrc-history": "cronologia",
+ "enhancedrc-history": "cronologîa",
"recentchanges": "Ùrtime modìfiche",
"recentchanges-legend": "Opçioin di ùrtimi cangiaménti",
"recentchanges-summary": "Questa pagina a te mostra i cangiamenti ciu reçenti a-i contegnui do scito.",
"uploadlogpage": "Log di file caregæ",
"uploadlogpagetext": "De sotta gh'è una lista di urtimi file caregæ.\nConsultâ a [[Special:NewFiles|galleria di noeuvi file]] pe 'na vixon d'insemme.",
"filename": "Nomme do file",
- "filedesc": "Detaggi",
+ "filedesc": "Detàggi",
"fileuploadsummary": "Detaggi do file:",
"filereuploadsummary": "Cangiamenti a-o file:",
"filestatus": "Informaçioin in sciô copyright:",
"magiclink-tracking-isbn-desc": "Sta paggina a l'adoeuvia di inganci maggichi ISBN. Amia [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] sciu comme exeguî a migraçion.",
"specialloguserlabel": "Açion effettuâ da:",
"speciallogtitlelabel": "Açion effettuâ sciu (tittolo da paggina ò {{ns:user}}:Nomme utente):",
- "log": "Log",
+ "log": "Regìstri",
"logeventslist-submit": "Mostra",
"all-logs-page": "Tùtti i regìstri pùblici",
"alllogstext": "Presentaçion combinaa de tutti i registri de {{SITENAME}}.\nL'è poscibile restrenze i critei de riçerca seleçionando o tipo de registro, l'utente ch'o l'ha eseguio l'açion, e/ò a pagina interessâ (entrambi i campi son senscibbili a-o maiuscolo/minuscolo).",
"emailuserfooter": "Questa email a l'è stæta {{GENDER:$1|inviâ}} da $1 a {{GENDER:$2|$2}} a traverso a fonçion \"{{int:emailuser}}\" insce {{SITENAME}}. Se {{GENDER:$2|ti ghe rispondi}}, a to email de risposta a saiâ spedia direttamente {{GENDER:$1|a-o|a-a}} mittente originâ, rivelando{{GENDER:$1|ghe}} o {{GENDER:$2|to}} adresso de posta elettronica.",
"usermessage-summary": "Messaggio de scistema",
"usermessage-editor": "Messaggê de scistema",
- "watchlist": "Sotta osservassion",
- "mywatchlist": "Sotta oservaçion",
+ "watchlist": "Òservòi speciâli",
+ "mywatchlist": "òservòi speciâli",
"watchlistfor2": "Pe $1 $2",
"nowatchlist": "A lista di öservæ speciali a l'è voeua.",
"watchlistanontext": "Pe vixualizzâ e modificâ l'elenco di öservæ l'è necessaio eseguî l'accesso.",
"blanknamespace": "(Prinçipâ)",
"contributions": "Contribuçioin {{GENDER:$1|utente}}",
"contributions-title": "Contribuçioìn de $1",
- "mycontris": "Contribuçioin",
- "anoncontribs": "Contribuçioin",
+ "mycontris": "contribûti",
+ "anoncontribs": "contribûti",
"contribsub2": "Pe {{GENDER:$3|$1}} ($2)",
"contributions-userdoesnotexist": "L'utença \"$1\" a no l'è registrâ.",
"nocontribs": "Cangi che soddisfan i critei de riçerca no se n'è atrovou.",
"sp-contributions-newbies": "Fanni védde sôlo e contribuçioìn di nêuvi utenti",
"sp-contributions-newbies-sub": "Pe i nêuvi ûtenti",
"sp-contributions-newbies-title": "Contribuçioin di noeuvi utenti",
- "sp-contributions-blocklog": "Blòcchi",
+ "sp-contributions-blocklog": "blòcchi",
"sp-contributions-suppresslog": "contributi {{GENDER:$1|utente}} soppresci",
"sp-contributions-deleted": "contributi {{GENDER:$1|utente}} scassæ",
"sp-contributions-uploads": "caregaménti",
"blocklist-nousertalk": "o no poeu modificâ a proppia pagina de discuscion",
"ipblocklist-empty": "A lista di blocchi a l'è veua.",
"ipblocklist-no-results": "L'adreçço IP ô o nomme utente domandou o no l'è bloccou.",
- "blocklink": "Blocca",
+ "blocklink": "blòcca",
"unblocklink": "sblòcca",
"change-blocklink": "càngia blòcco",
"contribslink": "Contribuçioìn",
"javascripttest": "Sperimentaçion JavaScript",
"javascripttest-pagetext-unknownaction": "Açion sconosciua \"$1\".",
"javascripttest-qunit-intro": "Amia insce mediawiki.org a [$1 documentaçion riguardante i test].",
- "tooltip-pt-userpage": "A {{GENDER:|to}} pagina utente",
+ "tooltip-pt-userpage": "A {{GENDER:|teu}} pàgina uténte",
"tooltip-pt-anonuserpage": "A paggina utente de questo adreçço IP che t'ê aproeuvo a modificâ comme",
"tooltip-pt-mytalk": "A {{GENDER:|teu}} pàgina de discusción",
"tooltip-pt-anontalk": "Discuscioin insce e modiffiche fæte da questo adreçço IP",
"tooltip-ca-nstab-mediawiki": "Veddi o messaggio de scistema",
"tooltip-ca-nstab-template": "Veddi o template",
"tooltip-ca-nstab-help": "Veddi a paggina d'agiûtto",
- "tooltip-ca-nstab-category": "Veddi a paggina da categorîa",
+ "tooltip-ca-nstab-category": "Véddi a pàgina da categorîa",
"tooltip-minoredit": "Marchilo comme cangiaménto minô",
"tooltip-save": "Sarva i cangiaménti",
"tooltip-publish": "Pubbrica e to modiffiche",
"pageinfo-not-current": "Spiaxente, ma l'è imposcibbile fornî quest'informaçion pe de vege verscioin.",
"pageinfo-header-basic": "Informaçion de base",
"pageinfo-header-edits": "Cronologia de modiffiche",
- "pageinfo-header-restrictions": "Proteçion da paggina",
+ "pageinfo-header-restrictions": "Proteçión da pàgina",
"pageinfo-header-properties": "Propiêtæ da pàgina",
"pageinfo-display-title": "Tittolo vixualizzou",
"pageinfo-default-sort": "Criteio d'ordenamento predefinio",
"pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect}}; $3 {{PLURAL:$3|non redirect}})",
"pageinfo-firstuser": "Creatô da pàgina",
"pageinfo-firsttime": "Dæta de creaçion da paggina",
- "pageinfo-lastuser": "Urtimo contributô",
+ "pageinfo-lastuser": "Ùrtimo contributô",
"pageinfo-lasttime": "Dæta de l'urtima modiffica",
"pageinfo-edits": "Nummero totale de modiffiche",
"pageinfo-authors": "Nummero totale di aotoî distinti",
"permissionserrorstext": "Jūs neturite teisių tai daryti dėl {{PLURAL:$1|šios priežasties|šių priežasčių}}:",
"permissionserrorstext-withaction": "Jūs neturite leidimo $2 dėl {{PLURAL:$1|šios priežasties|šių priežasčių}}:",
"contentmodelediterror": "Jūs negalite redaguoti šios versijos, nes jos turinio modelis yra <code>$1</code>, kuris skiriasi nuo dabartinio puslapio turinio modelio, kuris yra <code>$2</code>.",
- "recreate-moveddeleted-warn": "'''Dėmesio: Jūs atkuriate puslapį, kuris anksčiau buvo ištrintas.'''\n\nTurėtumėte nuspręsti, ar reikėtų toliau redaguoti šį puslapį.\nJūsų patogumui čia pateikiamas šio puslapio šalinimų ir perkėlimų sąrašas:",
+ "recreate-moveddeleted-warn": "<strong>Dėmesio: Jūs atkuriate puslapį, kuris anksčiau buvo ištrintas.</strong>\n\nTurėtumėte nuspręsti, ar reikėtų toliau redaguoti šį puslapį.\nJūsų patogumui čia pateikiamas šio puslapio šalinimų ir perkėlimų sąrašas:",
"moveddeleted-notice": "Šis puslapis buvo ištrintas.\nŽemiau pateikiamas puslapio šalinimų, apsaugojimų, ir pervadinimų sąrašas.",
"moveddeleted-notice-recent": "Atsiprašome, šis puslapis buvo neseniai ištrintas (per pastarąsias 24 valandas). Žemiau pateikiama detali puslapio ištrynimo, rakinimo ir perkėlimo istorija.",
"log-fulllog": "Rodyti visą istoriją",
"doubleredirects": "Dvigubi peradresavimai",
"doubleredirectstext": "Šiame puslapyje yra puslapių, kurie nukreipia į kitus peradresavimo puslapius, sąrašas.\nKiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, taip pat antrojo peradresavimo paskirtis, kuris paprastai yra „tikrasis“ paskirties puslapis, į kurį pirmasis peradresavimas ir turėtų rodyti.\n<del>Išbraukti</del> įrašai yra išspręsti.",
"double-redirect-fixed-move": "[[$1]] buvo pervardytas; dabar tai peradresavimas į [[$2]].",
- "double-redirect-fixed-maintenance": "Tvarkomas dvigubas peradresavimas iš [[$1]] į [[$2]].",
+ "double-redirect-fixed-maintenance": "Tvarkomas dvigubas peradresavimas iš [[$1]] į [[$2]]",
"double-redirect-fixer": "Peradresavimų tvarkyklė",
"brokenredirects": "Peradresavimai į niekur",
"brokenredirectstext": "Šie peradresavimo puslapiai nurodo į neegzistuojančius puslapius:",
"sp-contributions-uploads": "įkėlimai",
"sp-contributions-logs": "specialiųjų veiksmų sąrašas",
"sp-contributions-talk": "aptarimas",
- "sp-contributions-userrights": "naudotojų teisių valdymas",
+ "sp-contributions-userrights": "{{GENDER:$1|naudotojų}} teisių valdymas",
"sp-contributions-blocked-notice": "Šis naudotojas šiuo metu užblokuotas.\nPateikiamas paskutinis blokavimo istorijos įrašas.",
"sp-contributions-blocked-notice-anon": "Šis IP adresas yra užblokuotas.\nPaskutinis blokavimo įrašas pateikiamas žemiau:",
"sp-contributions-search": "Ieškoti įnašų",
"lastmodifiedatby": "Šį puslapį paskutinį kartą redagavo $2, $1, $3.",
"othercontribs": "Paremta $1 darbu.",
"others": "kiti",
- "siteusers": "{{SITENAME}} {{PLURAL:$2|naudotojas|naudotojai}} $1",
+ "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|naudotojas|naudotoja}}|naudotojai}} $1",
"anonusers": "{{SITENAME}} {{PLURAL:$2|anoniminis naudotojas|anoniminiai naudotojai}} $1",
"creditspage": "Puslapio kūrėjai",
"nocredits": "Kūrėjų informacija negalima šiam puslapiui.",
"feedback-thanks": "Ačiū! Jūsų atsiliepimas buvo užregistruotas puslapyje „[$2 $1]“.",
"feedback-thanks-title": "Ačiū!",
"feedback-useragent": "Vartotojo veiksnys:",
- "searchsuggest-search": "Ieškoti",
+ "searchsuggest-search": "Ieškoti {{SITENAME}}",
"searchsuggest-containing": "turintys",
"api-error-badtoken": "Vidinė klaida: blogai atpažinimo ženklas.",
"api-error-emptypage": "Kurti naujus, tuščius puslapius neleidžiama.",
"limitreport-expansiondepth": "Didžiausias plėtimosi gylis",
"limitreport-expensivefunctioncount": "Brangaus analizatoriaus funkcijos skaičius",
"expandtemplates": "Išplėsti šablonus",
- "expand_templates_intro": "Šis specialus puslapis pasirenką tekstą ir išplečia visus rekursyviai.\nJis taip pat išplečia palaikomas analizatoriaus funkcijas kaip\n<code><nowiki>{{</nowiki>#language:…}}</code> ir kintamuosius kaip\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nTiesą sakant, jis išplečia beveik viską dvigubuose skliaustuose.",
+ "expand_templates_intro": "Šis specialus puslapis pasirenką vikitekstą ir išplečia visus rekursyviai.\nJis taip pat išplečia palaikomas analizatoriaus funkcijas kaip\n<code><nowiki>{{</nowiki>#language:…}}</code> ir kintamuosius kaip\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nTiesą sakant, jis išplečia beveik viską dvigubuose skliaustuose.",
"expand_templates_title": "Aplinkybės pavadinimas, {{FULLPAGENAME}} ir pan.:",
"expand_templates_input": "Įvesti vikitekstą:",
"expand_templates_output": "Rezultatas",
"recentchangeslinked-feed": "Altaraçones relacionadas",
"recentchangeslinked-toolbox": "Altaraçones relacionadas",
"recentchangeslinked-title": "Altaraçones que ténen a ber cun \"$1\"",
- "recentchangeslinked-summary": "Esta páigina special amostra las redadeiras altaraçones de páiginas que téngan ua lhigaçon a outra (ó de nembros dua catadorie speceficada).\nLas páiginas que steian ne ls [[Special:Watchlist|tous begiados]] son amostradas an <strong>negrito</strong>.",
+ "recentchangeslinked-summary": "Scriba l nome dua páigina pa ber las altaraçones an todas las páiginas que téngan lhigaçones pa eilha ó pa las quales la páigina oufrecida ténen lhigaçones (pa ber ls nembros dua catadorie, scriba Catadorie:Nome de la catadorie). Las mudanças na sue [[Special:Watchlist|lhista de páiginas begiadas]] son amostradas an <strong>negro</strong>.",
"recentchangeslinked-page": "Nome de la páigina:",
"recentchangeslinked-to": "Amostrar antes altaraçones a páiginas que téngan a ber cula páigina dada",
"upload": "Cargar fexeiro",
"Candalua",
"Macofe",
"V6rg",
- "Nemo bis"
+ "Nemo bis",
+ "S4b1nuz E.656"
]
},
"tog-underline": "Sottolinia 'e jonte:",
"feedback-thanks": "Grazie! 'O feedback vuosto s'è mpizzato dint' 'a paggena \"[$2 $1]\".",
"feedback-thanks-title": "Ve ringraziammo!",
"feedback-useragent": "Aggente utente:",
- "searchsuggest-search": "Truova",
+ "searchsuggest-search": "Truova dint'ô {{SITENAME}}",
"searchsuggest-containing": "tène...",
"api-error-badtoken": "Errore interno: 'O token nun è buono.",
"api-error-emptypage": "'A criazione 'e paggene nuove abbacante nun è permessa.",
"lockmanager-fail-closelock": "Kunne ikke lukke låsefilen for «$1».",
"lockmanager-fail-deletelock": "Kunne ikke slette låsefilen for «$1».",
"lockmanager-fail-acquirelock": "Kunne ikke skaffe lås for «$1».",
- "lockmanager-fail-openlock": "Kunne ikke åpne låsefilen for «$1».",
+ "lockmanager-fail-openlock": "Kunne ikke åpne låsefilen for «$1». Sjekk at opplastingsmappa er konfigurert riktig og at nettjeneren din har tillatelse til å skrive til den mappa. Se https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory for mer informasjon.",
"lockmanager-fail-releaselock": "Kunne ikke frigi låsen for «$1».",
"lockmanager-fail-db-bucket": "Kunne ikke kontakte nok låsedatabaser i bøtten $1.",
"lockmanager-fail-db-release": "Kunne ikke frigi låser på databasen $1.",
"doubleredirects": "Doble omdirigeringer",
"doubleredirectstext": "Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.\nHver rad inneholder lenker til første og andre omdirigering, samt målet for den andre omdirigeringen, som vanligvis er den «virkelige» målsiden som den første omdirigeringen burde peke til.\n<del>Gjennomstrøkne</del> sider har blitt fikset.",
"double-redirect-fixed-move": "[[$1]] har blitt flyttet.\nDen ble automatisk oppdatert og er nå en omdirigering til [[$2]].",
- "double-redirect-fixed-maintenance": "Fikser automatisk dobbel omdirigering fra [[$1]] til [[$2]] som en del av en vedlikeholdsoppgave.",
+ "double-redirect-fixed-maintenance": "Fikser automatisk dobbel omdirigering fra [[$1]] til [[$2]] som en del av en vedlikeholdsoppgave",
"double-redirect-fixer": "Omdirigeringsfikser",
"brokenredirects": "Brutte omdirigeringer",
"brokenredirectstext": "Følgende omdirigeringer peker til ikkeeksisterende sider:",
"action-unwatchedpages": "अवलोकन नगरिएका पृष्ठहरूको सूची हेर्ने",
"action-mergehistory": "यस पृष्ठको इतिहासलाई मिसाउने",
"action-userrights": "सबै प्रयोगकर्ताका अधिकारहरू सम्पादन गर्ने",
- "action-userrights-interwiki": "à¤\85रà¥\81 विà¤\95िका प्रयोगकर्ताहरूको प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
+ "action-userrights-interwiki": "à¤\85रà¥\82 विà¤\95à¥\80का प्रयोगकर्ताहरूको प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
"action-siteadmin": "डेटाबेस बन्दगर्ने वा खोल्ने",
"action-sendemail": "इमेलहरु पठाउने",
"action-editmywatchlist": "तपाईंको निगरानी सूची सम्पादन गर्नुहोस्",
"enhancedrc-history": "इतिहास",
"recentchanges": "नयाँ परिवर्तनहरू",
"recentchanges-legend": "हालैको परिवर्तन विकल्पहरू",
- "recentchanges-summary": "विà¤\95िà¤\95ा à¤à¤°à¥\8dà¤\96रà¤\95ा परिवरà¥\8dतनहरà¥\82लाà¤\88 यस पà¥\83षà¥\8dठमा पहिलà¥\8dयाà¤\89नà¥\87",
+ "recentchanges-summary": "विà¤\95à¥\80à¤\95ा à¤à¤°à¥\8dà¤\96रà¤\95ा परिवरà¥\8dतनहरà¥\82लाà¤\88 यस पà¥\83षà¥\8dठमा हà¥\87रà¥\8dन सà¤\95िनà¥\8dà¤\9b",
"recentchanges-noresult": "दिइएको मापदण्ड अवधिमा मिल्दो कुनै परिवर्तन छैन।",
"recentchanges-feed-description": "यो फिडमा रहेको विकीको सवैभन्दा अन्तिम परिवर्तनहरुको जानकारी राख्नुहोस्",
"recentchanges-label-newpage": "यो सम्पादनले नयाँ पृष्ठ निर्माण गरेको छ",
"statistics-header-hooks": "अन्य तथ्याङ्कहरू",
"statistics-articles": "सामग्री पृष्ठहरू",
"statistics-pages": "पृष्ठहरू",
- "statistics-pages-desc": "विà¤\95िà¤\95ा सबà¥\88 पà¥\83षà¥\8dठहरà¥\82, वारà¥\8dतापà¤\95ा पà¥\83षà¥\8dठहरà¥\82समà¥\87त, रिडाà¤\87रà¥\87à¤\95à¥\8dà¤\9f, à¤\87तà¥\8dयादि ।",
+ "statistics-pages-desc": "विà¤\95à¥\80à¤\95ा सबà¥\88 पà¥\83षà¥\8dठहरà¥\82, वारà¥\8dतापà¤\95ा पà¥\83षà¥\8dठहरà¥\82समà¥\87त, रिडाà¤\87रà¥\87à¤\95à¥\8dà¤\9f, à¤\87तà¥\8dयादि।",
"statistics-files": "उर्ध्वभरण गरिएका फाइलहरू",
"statistics-edits": "{{SITENAME}} स्थापना भए देखिको पृष्ठ सम्पादन",
"statistics-edits-average": "प्रतिपृष्ठ औसत सम्पादन",
"lockmanager-fail-closelock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te sluiten.",
"lockmanager-fail-deletelock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te verwijderen.",
"lockmanager-fail-acquirelock": "Het was niet mogelijk \"$1\" te vergrendelen.",
- "lockmanager-fail-openlock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te openen.",
+ "lockmanager-fail-openlock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te openen. Verzeker uzelf ervan dat de uploadmap goed ingesteld is en uw webserver toestemming heeft om naar die map the schrijven. Zie https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory voor meer informatie.",
"lockmanager-fail-releaselock": "Het was niet mogelijk vergrendeling van \"$1\" op te heffen.",
"lockmanager-fail-db-bucket": "Het was niet mogelijk om in contact te komen met voldoende vergrendelingsdatabases in de bucket $1.",
"lockmanager-fail-db-release": "Het was niet mogelijk om de vergrendeling voor de database $1 op te heffen.",
"exif-compression-2": "CCITT Groep 3 1-dimensionale aangepaste \"Huffman run length\"-codering",
"exif-compression-3": "CCITT Groep 3 faxcodering",
"exif-compression-4": "CCITT Groep 4 faxcodering",
+ "exif-compression-6": "JPEG (oud)",
"exif-copyrighted-true": "Auteursrechtelijk beschermd",
"exif-copyrighted-false": "Auteursrechtelijke status niet ingesteld",
"exif-photometricinterpretation-0": "Zwart en wit (Wit is 0)",
"exif-photometricinterpretation-1": "Zwart-wit (zwart is 0)",
"exif-photometricinterpretation-3": "Palet",
+ "exif-photometricinterpretation-4": "Transparantiemasker",
+ "exif-photometricinterpretation-5": "Gescheiden (waarschijnlijk CMYK)",
"exif-unknowndate": "Datum onbekend",
"exif-orientation-1": "Normaal",
"exif-orientation-2": "Horizontaal gespiegeld",
"restrictionsfield-badip": "Ongeldig IP-adres of range: $1",
"restrictionsfield-label": "Toegestane IP-ranges:",
"restrictionsfield-help": "Een IP-adres of CIDR bereik per lijn. Om alles toe te staan, gebruik:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Fout: $1",
+ "edit-error-long": "Fouten:\n\n$1",
"revid": "versie $1",
"pageid": "Pagina-ID $1",
"rawhtml-notallowed": "<html> tags kunnen alleen op normale pagina's geplaatst worden.",
"undo-success": "Endringa kan angrast.\nSjå på samanlikninga under for å stadfesta at dette er det du ynskjer å gjera. Deretter kan du lagra desse endringane for å fullføra angringa.",
"undo-failure": "Endringa kunne ikkje attenderullast grunna konflikt med endringar som er gjorde i mellomtida.",
"undo-norev": "Endringa kunne ikkje fjernast fordi han ikkje finst eller vart sletta",
+ "undo-nochange": "Det ser ut til at endringa alt er fjerna.",
"undo-summary": "Rullar attende versjon $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]])",
"cantcreateaccount-text": "Kontooppretting frå denne IP-adressa ('''$1''') er blokkert av [[User:$3|$3]].\n\nGrunnen som vart gjeven av $3 er ''$2''",
"viewpagelogs": "Vis loggane for sida",
"exbeforeblank": "innhaldet før sida vart tømd var: «$1»",
"delete-confirm": "Slett «$1»",
"delete-legend": "Slett",
- "historywarning": "<strong>Åtvaring:<strong> Sida du held på å slette har ein historikk med $1 {{PLURAL:$1|versjon|versjonar}}:",
+ "historywarning": "<strong>Åtvaring:</strong> Sida du held på å slette har ein historikk med $1 {{PLURAL:$1|versjon|versjonar}}:",
"historyaction-submit": "Vis",
"confirmdeletetext": "Du held på å varig slette ei side eller eit bilete saman med heile den tilhøyrande historikken frå databasen. Stadfest at du verkeleg vil gjere dette, at du skjønar konsekvensane, og at du gjer dette i tråd med [[{{MediaWiki:Policy-url}}|retningslinene]].",
"actioncomplete": "Ferdig",
"lockmanager-fail-closelock": "Não foi possível encerrar a referência de bloqueio para \"$1\".",
"lockmanager-fail-deletelock": "Não foi possível eliminar a referência de bloqueio para \"$1\".",
"lockmanager-fail-acquirelock": "Não foi possível obter uma referência de bloqueio para \"$1\".",
- "lockmanager-fail-openlock": "Não foi possível abrir a referência de bloqueio para \"$1\".",
+ "lockmanager-fail-openlock": "Não foi possível abrir a referência de bloqueio para \"$1\". Certifique-se de que seu diretório de upload esteja configurado corretamente e seu servidor web tenha permissão para gravar nesse diretório. Veja https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory para maiores informações.",
"lockmanager-fail-releaselock": "Não foi possível liberar o bloqueio para \"$1\".",
"lockmanager-fail-db-bucket": "Não foi possível contatar suficientemente bloqueio das bases de dados no bucket $1 .",
"lockmanager-fail-db-release": "Não foi possível liberar os bloqueios para \"$1\".",
"emailconfirmlink": "Confirme o seu endereço de correio eletrónico",
"invalidemailaddress": "O endereço de correio eletrónico não pode ser aceite porque parece ter um formato inválido.\nIntroduza um endereço formatado corretamente ou deixe o campo vazio.",
"cannotchangeemail": "Os endereços de correio eletrónico das contas não podem ser alterados nesta wiki.",
- "emaildisabled": "Este site não consegue enviar mensagens de correio eletrónico.",
+ "emaildisabled": "Este sítio não consegue enviar mensagens de correio eletrónico.",
"accountcreated": "Conta criada",
"accountcreatedtext": "A conta de utilizador para [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) foi criada.",
"createaccount-title": "Criação de conta na wiki {{SITENAME}}",
"previewnote": "<strong>Lembre-se de que esta é apenas uma antevisão do resultado.</strong>\nAs modificações ainda não foram gravadas!",
"continue-editing": "Ir para a área de edição",
"previewconflict": "Esta antevisão do resultado apresenta o texto da caixa de edição acima tal como este aparecerá se escolher gravá-lo.",
- "session_fail_preview": "Desculpe! Não foi possível processar a edição devido à perda dos dados da sua sessão.\n\nA sua sessão poderá ter sido encerrada. <strong>Verifique se ainda está autenticado e tente novamente, por favor</strong>. \nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite cookies deste site.",
- "session_fail_preview_html": "Desculpe! Não foi possível processar a edição devido à perda de dados da sua sessão.\n\n<em>Como a wiki {{SITENAME}} possibilita o uso de HTML puro, a antevisão está oculta por precaução contra ataques com JavaScript.</em>\n\n<strong>Se esta é uma tentativa legítima de edição tente novamente, por favor</strong>. \nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite <em>cookies</em> deste <em>site</em>.",
+ "session_fail_preview": "Desculpe! Não foi possível processar a edição devido à perda dos dados da sua sessão.\n\nA sua sessão poderá ter sido encerrada. <strong>Verifique se ainda está autenticado e tente novamente, por favor</strong>. \nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite cookies deste sítio.",
+ "session_fail_preview_html": "Desculpe! Não foi possível processar a edição devido à perda de dados da sua sessão.\n\n<em>Como a wiki {{SITENAME}} possibilita o uso de HTML puro, a antevisão está oculta por precaução contra ataques com JavaScript.</em>\n\n<strong>Se esta é uma tentativa legítima de edição tente novamente, por favor</strong>. \nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite <em>cookies</em> deste sítio.",
"token_suffix_mismatch": "<strong>A edição foi rejeitada porque o seu navegador alterou os sinais de pontuação no editor.</strong>\nA edição foi rejeitada para evitar perdas no texto da página.\nIsto acontece ocasionalmente quando se usa um serviço de proxy anonimizador mal configurado.",
"edit_form_incomplete": "<strong>Algumas partes do formulário de edição não chegaram ao servidor; verifique que a sua edição continua intacta e tente novamente, por favor.</strong>",
"editing": "A editar $1",
"showingresultsinrange": "Apresenta-se abaixo {{PLURAL:$1|<strong>1</strong> resultado|até <strong>$1</strong> resultados}} no intervalo #<strong>$2</strong> a #<strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados <strong>$1 - $2</strong> de <strong>$3</strong>}}",
"search-nonefound": "A pesquisa não produziu resultados.",
- "search-nonefound-thiswiki": "Não existem resultados que correspondam à consulta neste site.",
+ "search-nonefound-thiswiki": "Não existem resultados que correspondam à consulta neste sítio.",
"powersearch-legend": "Pesquisa avançada",
"powersearch-ns": "Pesquisar nos domínios:",
"powersearch-togglelabel": "Marcar:",
"prefs-custom-css": "CSS personalizado",
"prefs-custom-js": "JS personalizado",
"prefs-common-css-js": "CSS/JS partilhado por todos os temas:",
- "prefs-reset-intro": "Pode usar esta página para repor as configurações padrão das preferências.\nAs suas preferências serão modificadas para os valores predefinidos do site.\nEsta operação não pode ser desfeita.",
+ "prefs-reset-intro": "Pode usar esta página para repor as configurações padrão das preferências.\nAs suas preferências serão modificadas para os valores predefinidos do sítio.\nEsta operação não pode ser desfeita.",
"prefs-emailconfirm-label": "Confirmação do correio eletrónico:",
"youremail": "Correio eletrónico:",
"username": "Nome de {{GENDER:$1|utilizador|utilizadora|utilizador(a)}}:",
"http-curl-error": "Ocorreu um erro ao aceder ao URL: $1",
"http-bad-status": "Ocorreu um problema durante o pedido HTTP: $1 $2",
"upload-curl-error6": "Não foi possível aceder ao URL",
- "upload-curl-error6-text": "Não foi possível aceder ao URL.\nVerifique se o endereço está correto e o site disponível, por favor.",
+ "upload-curl-error6-text": "Não foi possível aceder ao URL.\nVerifique se o endereço está correto e o sítio disponível, por favor.",
"upload-curl-error28": "Tempo limite para o envio do ficheiro excedido",
- "upload-curl-error28-text": "O site demorou demasiado tempo a responder. Verifique que o site está disponível, aguarde alguns momentos e tente novamente, por favor. Talvez queira voltar a tentar numa altura menos congestionada.",
+ "upload-curl-error28-text": "O sítio demorou demasiado tempo a responder. Verifique que o sítio está disponível, aguarde alguns momentos e tente novamente, por favor. Talvez queira voltar a tentar numa altura menos congestionada.",
"license": "Licença:",
"license-header": "Licenciamento",
"nolicense": "Nenhuma selecionada",
"apihelp-no-such-module": "Módulo \"$1\" não encontrado.",
"apisandbox": "Testes da API",
"apisandbox-jsonly": "Para usar a área de testes da API é necessário o JavaScript.",
- "apisandbox-api-disabled": "A API está desativada neste site.",
+ "apisandbox-api-disabled": "A API está desativada neste sítio.",
"apisandbox-intro": "Use esta página para fazer experiências com a <strong>API operacional do MediaWiki</strong>.\nConsulte a [[mw:API:Main page|documentação da API]] para informações sobre o seu uso. Exemplo: [https://www.mediawiki.org/wiki/API#A_simple_example obter o conteúdo da Página Principal]. Selecione uma operação para ver mais exemplos.\n\nNote que, embora esta seja uma área de testes, as operações que executar nesta página podem modificar a wiki.",
"apisandbox-fullscreen": "Expandir painel",
"apisandbox-fullscreen-tooltip": "Expandir o painel da página de testes para preencher a janela do navegador.",
"booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique a existência de erros ao copiar da fonte original.",
"magiclink-tracking-rfc": "Páginas que usam hiperligações mágicas RFC",
"magiclink-tracking-rfc-desc": "Esta página usa hiperligações mágicas RFC. Consulte a [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] para saber como migrar.",
- "magiclink-tracking-pmid": "Páginas que usam links mágicos PMID",
+ "magiclink-tracking-pmid": "Páginas que usam hiperligações mágicas PMID",
"magiclink-tracking-pmid-desc": "Esta página usa hiperligações mágicas PMID. Consulte a [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] para saber como migrar.",
- "magiclink-tracking-isbn": "Páginas que usam links mágicos ISBN",
+ "magiclink-tracking-isbn": "Páginas que usam hiperligações mágicas ISBN",
"magiclink-tracking-isbn-desc": "Esta página usa hiperligações mágicas ISBN. Consulte a [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] para saber como migrar.",
"specialloguserlabel": "Executante:",
"speciallogtitlelabel": "Alvo (título ou página ou {{ns:user}}:nome de utilizador):",
"import-nonewrevisions": "Não foi importada nenhuma revisão (já estavam todas presentes ou foram ignoradas devido a erros).",
"xml-error-string": "$1 na linha $2, coluna $3 (byte $4): $5",
"import-upload": "Enviar dados em XML",
- "import-token-mismatch": "Perda de dados da sessão.\n\nA sua sessão pode ter sido encerrada. '''Verifique se ainda está autenticado e tente novamente, por favor'''. \nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite cookies deste site.",
+ "import-token-mismatch": "Perda de dados da sessão.\n\nA sua sessão pode ter sido encerrada. '''Verifique se ainda está autenticado e tente novamente, por favor'''. \nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite cookies deste sítio.",
"import-invalid-interwiki": "Não é possível importar da wiki especificada.",
"import-error-edit": "A página \"$1\" não foi importada porque não tem permissão para editá-la.",
"import-error-create": "A página \"$1\" não foi importada porque não tem permissão para criá-la.",
"creditspage": "Créditos da página",
"nocredits": "Não há informação disponível sobre os créditos desta página.",
"spamprotectiontitle": "Filtro de proteção contra spam",
- "spamprotectiontext": "O texto que pretendia gravar foi bloqueado pelo filtro de spam.\nEste bloqueio foi provavelmente causado por uma hiperligação para um ''site'' externo que está na lista negra.",
+ "spamprotectiontext": "O texto que pretendia gravar foi bloqueado pelo filtro de spam.\nEste bloqueio foi provavelmente causado por uma hiperligação para um sítio externo que está na lista negra.",
"spamprotectionmatch": "O seguinte texto ativou o filtro de <i>spam</i>: $1",
"spambot_username": "MediaWiki limpeza de spam",
"spam_reverting": "A reverter para a última revisão que não contém ligação para $1",
"invalidateemail": "Cancelar confirmação do correio eletrónico",
"notificationemail_subject_changed": "O endereço de correio eletrónico registado na wiki {{SITENAME}} foi alterado",
"notificationemail_subject_removed": "O endereço de correio eletrónico registado na wiki {{SITENAME}} foi removido",
- "notificationemail_body_changed": "Alguém, provavelmente você, a partir do endereço IP $1, alterou o endereço de correio eletrónico da conta \"$2\" para \"$3\" na wiki {{SITENAME}}.\n\nCaso não o tenha alterado, contacte imediatamente um administrador do site.",
- "notificationemail_body_removed": "Alguém, provavelmente você, a partir do endereço IP $1, eliminou o endereço de correio eletrónico da conta \"$2\" na wiki {{SITENAME}}.\n\nCaso não o tenha eliminado, contacte imediatamente um administrador do site.",
+ "notificationemail_body_changed": "Alguém, provavelmente você, a partir do endereço IP $1, alterou o endereço de correio eletrónico da conta \"$2\" para \"$3\" na wiki {{SITENAME}}.\n\nCaso não o tenha alterado, contacte imediatamente um administrador do sítio.",
+ "notificationemail_body_removed": "Alguém, provavelmente você, a partir do endereço IP $1, eliminou o endereço de correio eletrónico da conta \"$2\" na wiki {{SITENAME}}.\n\nCaso não o tenha eliminado, contacte imediatamente um administrador do sítio.",
"scarytranscludedisabled": "[Transclusão interwikis foi impossibilitada]",
"scarytranscludefailed": "[Não foi possível obter a predefinição a partir de $1]",
"scarytranscludefailed-httpstatus": "[Não foi possível obter a predefinição a partir de $1: HTTP $2]",
"permanentlink": "Hiperligação permanente",
"permanentlink-revid": "Identificador de revisão",
"permanentlink-submit": "Ir para a revisão",
- "dberr-problems": "Desculpe! Este site está com dificuldades técnicas.",
+ "dberr-problems": "Desculpe! Este sítio está com dificuldades técnicas.",
"dberr-again": "Experimente esperar alguns minutos e atualizar.",
"dberr-info": "(Não foi possível aceder ao servidor da base de dados: $1)",
"dberr-info-hidden": "(Não foi possível aceder ao servidor da base de dados)",
"expand_templates_generate_xml": "Mostrar a árvore de análise sintáctica do XML",
"expand_templates_generate_rawhtml": "Mostrar o HTML puro",
"expand_templates_preview": "Antevisão do resultado",
- "expand_templates_preview_fail_html": "<em>Porque a wiki {{SITENAME}} permite código HTML puro e ocorreu uma perda de dados da sessão, a antevisão ficará ocultada como precaução contra ataques por JavaScript.</em>\n\n<strong>Se esta é uma tentativa legítima de visionamento, por favor tente novamente.</strong>\nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite que este site crie ''cookies''.",
+ "expand_templates_preview_fail_html": "<em>Porque a wiki {{SITENAME}} permite código HTML puro e ocorreu uma perda de dados da sessão, a antevisão ficará ocultada como precaução contra ataques por JavaScript.</em>\n\n<strong>Se esta é uma tentativa legítima de visionamento, por favor tente novamente.</strong>\nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite que este sítio crie ''cookies''.",
"expand_templates_preview_fail_html_anon": "<em>Porque a wiki {{SITENAME}} permite código HTML puro e não iniciou uma sessão, a antevisão ficará ocultada como precaução contra ataques por JavaScript.</em>\n\n<strong>Se esta é uma tentativa legítima de visionamento, por favor [[Special:UserLogin|inicie uma sessão]] e tente novamente.</strong>",
"expand_templates_input_missing": "Necessita de fornecer pelo menos algum texto wiki de entrada.",
"pagelanguage": "Alterar a língua da página",
"rawhtml-notallowed": "As etiquetas <html> não podem ser utilizadas fora de páginas normais.",
"gotointerwiki": "A sair da wiki {{SITENAME}}",
"gotointerwiki-invalid": "O título especificado é inválido.",
- "gotointerwiki-external": "Está prestes a sair da wiki {{SITENAME}} para visitar [[$2]], que é um site externo.\n\n'''[$1 Continuar para $1]'''",
+ "gotointerwiki-external": "Está prestes a sair da wiki {{SITENAME}} para visitar [[$2]], que é um sítio externo.\n\n'''[$1 Continuar para $1]'''",
"undelete-cantedit": "Não pode restaurar esta página porque não tem privilégios para a editar.",
"undelete-cantcreate": "Não pode restaurar esta página porque não existe nenhuma página com este nome e não tem privilégios para criar esta página.",
"pagedata-title": "Dados de página",
"postedit-confirmation-created": "{{gender}}\nShown after a user creates a new page. Parameters:\n* $1 - the current user, for GENDER support",
"postedit-confirmation-restored": "{{gender}}\nShown after a user restores a page to a previous revision. Parameters:\n* $1 - the current user, for GENDER support",
"postedit-confirmation-saved": "{{gender}}\nShown after a user saves a page. Parameters:\n* $1 - the current user, for GENDER support",
+ "postedit-confirmation-published": "{{gender}}\nShown after a user publishes a page. Parameters:\n* $1 - the current user, for GENDER support",
"edit-already-exists": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-gone-missing}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-no-change}}",
"addsection-preload": "{{notranslate}}",
"addsection-editintro": "{{notranslate}}",
"Helpau",
"Staspotanin2",
"Edible Melon",
- "Adam-Yourist"
+ "Adam-Yourist",
+ "MaksimPinigin"
]
},
"tog-underline": "Подчёркивание ссылок:",
"restrictionsfield-label": "Разрешённые диапазоны IP-адресов:",
"restrictionsfield-help": "По одному IP-адресу или CIDR-диапазону в строке. Чтобы разрешить всё, используйте:<pre>0.0.0.0/0\n::/0</pre>",
"edit-error-short": "Ошибка: $1",
- "edit-error-long": "Ошибки: $1",
+ "edit-error-long": "Ошибки:\n\n$1",
"revid": "версия $1",
"pageid": "ID страницы $1",
"rawhtml-notallowed": "<html> теги могут быть использованы только в пределах обычных страниц.",
"rcfilters-filter-watchlist-notwatched-description": "Кэтэбил тиһилигэр киирбит ыстатыйалары уларытыыттан уратыны барытын.",
"rcfilters-filtergroup-watchlistactivity": "Кэтэбил тиһилигин көҕө",
"rcfilters-filter-watchlistactivity-unseen-label": "Көрүллэ илик уларытыылар",
+ "rcfilters-filter-watchlistactivity-unseen-description": "Тиһэх киирииҥ кэнниттэн оҥоһуллубут уларытыылар.",
"rcfilters-filter-watchlistactivity-seen-label": "Көрүллүбүт уларытыылар",
+ "rcfilters-filter-watchlistactivity-seen-description": "Тиһэх киирииҥ иннинэ оҥоһуллубут уларытыылар.",
"rcfilters-filtergroup-changetype": "Уларытыы көрүҥэ",
"rcfilters-filter-pageedits-label": "Сирэй уларытыылара",
"rcfilters-filter-pageedits-description": "Ис хоһоонун, ырытыылары, категорияны ойуулааһыны эҥин уларытыы...",
"emailccsubject": "Эн суругуҥ куоппуйата $1: $2",
"emailsent": "Сурук барда",
"emailsenttext": "Эн суругуҥ ыытылынна.",
- "emailuserfooter": "Бу сурук {{GENDER:$2|$2}} кыттааччыга {{GENDER:$1|$1}} кыттааччыттан «Сурукта ыыт» (\"{{int:emailuser}}\") диэн тэрил көмөтүнэн {{SITENAME}} ситим-сиртэн ыытыллыбыт. {{GENDER:$2|Эн}} электрон аадырыһыҥ ыыппыт {{GENDER:$1|киһигэр}} көстүөҕэ.",
+ "emailuserfooter": "Бу сурук {{GENDER:$2|$2}} кыттааччыга {{GENDER:$1|$1}} кыттааччыттан «Сурукта ыыт» (\"{{int:emailuser}}\") диэн тэрил көмөтүнэн {{SITENAME}} ситим-сиртэн ыытыллыбыт. Өскөтө {{GENDER:$2|Эн}} киниэхэ суруйдаххына, электрон аадырыһыҥ {{GENDER:$1|киһигэр}} көстүөҕэ.",
"usermessage-summary": "Тиһилик биллэриитин хааллар.",
"usermessage-editor": "Тиһилик биллэрээччитэ",
"watchlist": "Кэтэбилим тиһигэ",
"enotif_body_intro_moved": "$PAGEEDITDATE «{{SITENAME}}» бырайыак «$1» ааттаах сирэйин бу {{gender:$2|кыттааччы|кыттааччы}} аатын уларыппыт - $2, билиҥҥи барылын манна көр: $3",
"enotif_body_intro_restored": "$PAGEEDITDATE «{{SITENAME}}» бырайыак «$1» ааттаах сирэйин бу {{gender:$2|кыттааччы|кыттааччы}} соппут - $2, билиҥҥи барылын манна көр: $3",
"enotif_body_intro_changed": "$PAGEEDITDATE «{{SITENAME}}» бырайыак «$1» ааттаах сирэйин бу {{gender:$2|кыттааччы|кыттааччы}} айбыт - $2, билиҥҥи барылын манна көр: $3",
- "enotif_lastvisited": "Бутэһик киирииҥ кэнниттэн оҥоһуллубут уларыйыылары барытын көрөргө манна киир: $1.",
+ "enotif_lastvisited": "Бүтэһик киирииҥ кэнниттэн оҥоһуллубут уларыйыылары барытын көрөргө манна киир: $1.",
"enotif_lastdiff": "Уларытыыны манна көр: $1",
"enotif_anon_editor": "ааттамматах кыттааччы $1",
"enotif_body": "Аламай күн сырдыгынан, $WATCHINGUSERNAME!\n\n$PAGEINTRO $NEWPAGE\n\nУларытыы кылгас ис хоһооно: $PAGESUMMARY $PAGEMINOREDIT\n\nУларыппыт киһиэхэ суруйуоххун сөп:\nэл. почта: $PAGEEDITOR_EMAIL\nбиики: $PAGEEDITOR_WIKI\n\nБу сирэйи бэлиэтэммит ааккынан киирэн көрбөтөххүнэ уларыйбытын туһунан биллэриилэр кэлиэхтэрэ суоҕа. Биллэриилэри аналлаах сирэйгэ отой арааран кэбиһиэххин эмиэ сөп.\n\n Бары үтүөнү кытта, {{SITENAME}} биллэрэр тиһигэ\n\n--\nБиллэрии кэлэрин салайыы\n{{canonicalurl:{{#special:Preferences}}}}\n\nКэтиир тиһиги уларытыы\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nКэтиир тиһиктэн сирэйдэри сотуу\n$UNWATCHURL\n\nКөмө\n$HELPPAGE",
"changecontentmodel-emptymodels-title": "Ис хоһоононун холобура суох",
"changecontentmodel-emptymodels-text": "[[:$1]] иһинээҕитэ ханнык да атын көрүҥҥэ уларыйар кыаҕа суох эбит.",
"log-name-contentmodel": "Иһинээҕитин киэбин уларытыы сурунаала",
- "log-description-contentmodel": "СиÑ\80Ñ\8dй иһинÑ\8dÑ\8dÒ\95иÑ\82ин киÑ\8dбин кÑ\8bÑ\82Ñ\82а Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85",
+ "log-description-contentmodel": "Ð\9cанна Ñ\81иÑ\80Ñ\8dй иһинÑ\8dÑ\8dÒ\95иÑ\82ин киÑ\8dбин Ñ\83лаÑ\80Ñ\8bйÑ\8bÑ\8bÑ\82Ñ\8bн кÑ\8bÑ\82Ñ\82а Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85 Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bлаÑ\80 көÑ\81Ñ\82өллөÑ\80.",
"logentry-contentmodel-new": "$1 $3 диэн сирэйи маны туһанан «$5» {{GENDER:$2|айбыт}}",
"logentry-contentmodel-change": "$1 кыттааччы $3 сирэй иһинээҕитин мадьыалын мантан «$4» манна «$5» {{GENDER:$2|уларыппыт}}",
"logentry-contentmodel-change-revertlink": "төннөрүү",
"delete_and_move_text": "==Сотуохха наада==\n\nМаннык ааттаах сирэй [[:$1|«$1»]] бэлиэр баар. Эн ону суох гынан баран аатын уларытаары гынаҕын дуо?",
"delete_and_move_confirm": "Сөп, бу сирэйи суох гын",
"delete_and_move_reason": "Аатын уларытаары сотулунна \"[[$1]]\"",
- "selfmove": "Аатын уларытар сатаммат. Эргэ уонна саҥа аата биирдэр.",
+ "selfmove": "Аатын уларытар сатаммата; \nэргэ уонна саҥа аата биирдэр.",
"immobile-source-namespace": "\"$1\" аат далыгар баар сирэйдэр ааттарын уларытар кыах суох.",
"immobile-target-namespace": "\"$1\" аат далыгар сирэйи көһөрөр кыах суох",
"immobile-target-namespace-iw": "Интервики сигэтэ ааты уларытыыга туһаныллыбат.",
"import-nonewrevisions": "Биир да уларытыы импортаммата (бу иннинэ таҥастаммыттар, биитэр алҕастаах буолан көтүтүллүбүттэр).",
"xml-error-string": "$1 - $2 строка, $3 колонка ($4 байт): $5",
"import-upload": "XML-дааннайдары киллэр",
- "import-token-mismatch": "Арахсан хаалбыт. \n\nБаҕар тахсан хаалбытыҥ буолуо. <strong>Бэлиэтэммит ааккынан киирэн олороргун тургутан баран хатылаан көр.</strong>.\nӨскөтө син биир көмөлөспөтөҕүнэ [[Special:UserLogout|тахсан баран]] төттөрү киирэн көр уонна браузерыҥ куукалары ыларын тургут.",
+ "import-token-mismatch": "Арахсан хаалбыт. \n\nБаҕар тахсан хаалбытыҥ буолуо. <strong>Бэлиэтэммит ааккынан киирэн олороргун тургутан баран хатылаан көр.</strong>.\nӨскөтө син биир сатамматаҕына [[Special:UserLogout|тахсан баран]] төттөрү киирэн көр уонна браузерыҥ кууканы ыларын тургут.",
"import-invalid-interwiki": "Бу биикиттэн импорт оҥорор сатаммат(а).",
"import-error-edit": "«$1» сирэй көһөрүллүбэтэ, тоҕо диэтэххэ кинини уларытарыҥ көҥүллэммэт эбит.",
"import-error-create": "«$1» сирэй киллэриллибэтэ, тоҕо диэтэххэ кинини айарыҥ сатаммат эбит.",
"autosumm-blank": "Бу сирэй ыраастаныллыбыт",
"autosumm-replace": "Сирэй иһэ уларытыллыбыт: '$1'",
"autoredircomment": "Утаарыы: [[$1]]",
- "autosumm-removed-redirect": "Сотуллубут утаарыы: $1",
- "autosumm-changed-redirect-target": "Утаарыы мантан $1 манна $2 уларыйда",
+ "autosumm-removed-redirect": "Сотуллубут утаарыы: [[$1]]",
+ "autosumm-changed-redirect-target": "Утаарыы мантан [[$1]] манна [[$2]] уларыйда",
"autosumm-new": "'$1' ыйааһыннаах саҥа сирэй оҥоһулунна",
"autosumm-newblank": "Кураанах сирэй оҥоһулунна",
"size-bytes": "$1 байт",
"version-poweredby-others": "атыттар",
"version-poweredby-translators": "translatewiki.net тылбаасчыттара",
"version-credits-summary": "[[Special:Version|MediaWiki]] сайдыытыгар үлэлэрин иһин манна ахтыллыбыт дьоҥҥо махтанабыт.",
- "version-license-info": "MediaWiki көҥүл Ñ\82аÑ\80Ò\95анаÑ\80 бÑ\8bÑ\80агÑ\8bÑ\80ааммалаÑ\80га кииÑ\80Ñ\8dÑ\80, кинини көмпүүÑ\82Ñ\8dÑ\80 аһаÒ\95аÑ\81 бÑ\8bÑ\80агÑ\8bÑ\80ааммалаÑ\80Ñ\8bн пÑ\83ондаÑ\82Ñ\8bн GNU General Public License Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bнан көҥүл Ñ\82аÑ\80Ò\95аÑ\82аÑ\80гÑ\8bÑ\82 Ñ\83онна/Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80гÑ\8bÑ\82 көҥүллÑ\8dнÑ\8dÑ\80; иккиÑ\81 Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 онÑ\82он Ñ\85ойÑ\83ккÑ\83 Ñ\85аннÑ\8bк баÒ\95аÑ\80аÑ\80 баÑ\80Ñ\8bлÑ\8bÑ\82Ñ\82ан Ñ\81аÒ\95алаан.\n\nMediaWiki Ñ\82Ñ\83һалааÑ\85 бÑ\83оллÑ\83н диÑ\8dн Ñ\82аÑ\80Ò\95аÑ\82Ñ\8bллаÑ\80, ол Ñ\8dÑ\80Ñ\8dÑ\8dÑ\80и Ð\90ТЫЫÐ\9bÐ\90Ð\9dÐ\90РСЫÐ\90Ð\9dÐ\9dÐ\90ÒºÐ\90 Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ð¥Ð\90Ð\9dÐ\9dЫÐ\9a ÐРРЧÐ\9eÐ\9fЧУ СÐ\9eРУÐ\9aÐ\9aÐ\90 СӨÐ\9f ТҮÐ\91ÐÒºÐ\98Ð\98ТРбигÑ\8dÑ\80гÑ\8dÑ\82иллибÑ\8dÑ\82 (гаÑ\80анÑ\82иÑ\8fÑ\82а Ñ\81Ñ\83оÑ\85). Сиһилии GNU General Public License Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bн көÑ\80Ò¯Ò¥.\n\n[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License копиÑ\8fÑ\82Ñ\8bн] бÑ\83 бÑ\8bÑ\80агÑ\8bÑ\80аамманÑ\8b кÑ\8bÑ\82Ñ\82а Ñ\8bлÑ\8bаÑ\85Ñ\82ааÑ\85 Ñ\8dÑ\82игиÑ\82, ол Ñ\81аÑ\82аммаÑ\82аÑ\85 бÑ\83оллаÒ\95Ñ\8bна Free Software Foundation, Inc. Ñ\82Ñ\8dÑ\80илÑ\82Ñ\8dÒ\95Ñ\8d Ñ\81Ñ\83Ñ\80Ñ\83кÑ\82а Ñ\81Ñ\83Ñ\80Ñ\83йÑ\83Ò¥, бÑ\83 аадÑ\8bÑ\80Ñ\8bÑ\81ка: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html Ñ\81аайка кииÑ\80Ñ\8dн ааÒ\95Ñ\8bÒ¥].",
+ "version-license-info": "MediaWiki көҥүл Ñ\82аÑ\80Ò\95анаÑ\80 бÑ\8bÑ\80агÑ\8bÑ\80аама. Ð\9eнон GNU General Public License (иккиÑ\81 Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 онÑ\82он Ñ\85ойÑ\83ккÑ\83 Ñ\85аннÑ\8bк баÒ\95аÑ\80аÑ\80 баÑ\80Ñ\8bлÑ\8bÑ\82Ñ\82ан Ñ\81аÒ\95алаан) Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bнан көҥүл Ñ\82аÑ\80Ò\95аÑ\82аÑ\80 Ñ\83онна/Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 көҥүллÑ\8dнÑ\8dÑ\80.\n\nMediaWiki Ñ\82Ñ\83һалааÑ\85 бÑ\83оллÑ\83н диÑ\8dн Ñ\82аÑ\80Ò\95аÑ\82Ñ\8bллаÑ\80, ол Ñ\8dÑ\80Ñ\8dÑ\8dÑ\80и <strong>Ð\90ТЫЫÐ\9bÐ\90Ð\9dÐ\90РСЫÐ\90Ð\9dÐ\9dÐ\90ÒºÐ\90</strong> Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 <strong>Ð¥Ð\90Ð\9dÐ\9dЫÐ\9a ÐРРЧÐ\9eÐ\9fЧУ СÐ\9eРУÐ\9aÐ\9aÐ\90 СӨÐ\9f ТҮÐ\91ÐÒºÐ\98Ð\98ТÐ</strong> <em>бигÑ\8dÑ\80гÑ\8dÑ\82иллибÑ\8dÑ\82</em> (гаÑ\80анÑ\82иÑ\8fÑ\82а Ñ\81Ñ\83оÑ\85). Сиһилии GNU General Public License Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bн көÑ\80.\n\n[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License кÑ\83опÑ\83йаÑ\82Ñ\8bн] бÑ\83 бÑ\8bÑ\80агÑ\8bÑ\80ааманÑ\8b кÑ\8bÑ\82Ñ\82а Ñ\8bлÑ\8bаÑ\85Ñ\82ааÑ\85 Ñ\8dÑ\82иҥ, ол Ñ\81аÑ\82аммаÑ\82аÑ\85 бÑ\83оллаÒ\95Ñ\8bна Free Software Foundation, Inc. Ñ\82Ñ\8dÑ\80илÑ\82Ñ\8dÒ\95Ñ\8d Ñ\81Ñ\83Ñ\80Ñ\83кÑ\82а Ñ\81Ñ\83Ñ\80Ñ\83й, бÑ\83 аадÑ\8bÑ\80Ñ\8bÑ\81ка: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 манна кииÑ\80Ñ\8dн [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ааÑ\85].",
"version-software": "Туруоруллубут бырагырааммалар",
"version-software-product": "Бородуукта",
"version-software-version": "Барыл (торум)",
"search-showingresults": "{{PLURAL:$4|نتيجو <strong>$1</strong> of <strong>$3</strong>|نتيجا <strong>$1 - $2</strong> of <strong>$3</strong>}}",
"search-nonefound": "توھان جي ڳولا جي نتيجي ۾ ڪجھہ بہ نہ لڌو.",
"powersearch-legend": "اعليٰ ڳولا",
+ "powersearch-ns": "نالن لاءِ ڇڏين وڇوٽين ۾ ڳولھيو (سرچ اِن نيم اسپيسز)",
"powersearch-togglelabel": "چڪاسيو:",
"powersearch-toggleall": "سڀ",
"powersearch-togglenone": "ڪو بہ نہ",
"nrevisions": "$1 {{PLURAL:$1|مسودو|مسودا}}",
"nimagelinks": "$1 {{PLURAL:$1|صفحي|صفحن}} ۾ استعمال ٿيل",
"ntransclusions": "$1 {{PLURAL:$1|صفحي|صفحن}} ۾ استعمال ٿيل",
- "specialpage-empty": "ھن رپورٽ لاءِ ڪي-بہ نتيجا ناھن.",
+ "specialpage-empty": "ھن رپورٽ لاءِ ڪي بہ نتيجا ناھن.",
"lonelypages": "يتيم صفحا",
"uncategorizedpages": "اڻ زمريل صفحا",
"uncategorizedcategories": "اڻزمرايل زمرا",
"restriction-level-sysop": "مڪمل طور تحفظيل",
"restriction-level-autoconfirmed": "نيم تحفظيل",
"viewdeletedpage": "ڊاٺل صفحا ڏسو",
- "undelete-nodiff": "ڪوبہ پويون مسودو نہ لڌو",
+ "undelete-nodiff": "ڪوبہ اڳيون مسودو نہ لڌو",
"undeletebtn": "بحاليو",
"undeleteviewlink": "ڏسو",
"undeletecomment": "سبب:",
"version-libraries-description": "تشريح",
"version-libraries-authors": "ليکڪ",
"redirect-submit": "ھلو",
+ "redirect-lookup": "ڏسو:",
"redirect-value": "قدر:",
"redirect-user": "واپرائيندڙ آءِڊي",
"redirect-page": "صفحي جي آءِڊي",
"lockmanager-fail-closelock": "Ne morem zapreti zaklenitvene datoteke »$1«.",
"lockmanager-fail-deletelock": "Ne morem izbrisati zaklenitvene datoteke »$1«.",
"lockmanager-fail-acquirelock": "Ne morem pridobiti zaklenitvene datoteke »$1«.",
- "lockmanager-fail-openlock": "Ne morem odpreti zaklenitvene datoteke »$1«.",
+ "lockmanager-fail-openlock": "Ne morem odpreti zaklenitvene datoteke »$1«. Prepričajte se, da je mapa za nalaganje nastavljena pravilno in da ima vaš spletni strežnik pravice za pisanje v tej mapi. Oglejte si https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory za več informacij.",
"lockmanager-fail-releaselock": "Ne morem sprostiti zaklepa »$1«.",
"lockmanager-fail-db-bucket": "Ne morem kontaktirati zadostnega števila zaklenitvenih zbirk podatkov v vedru $1.",
"lockmanager-fail-db-release": "Ne morem sprostiti zaklepov zbirke podatkov $1.",
]
},
"tog-underline": "Подвлачење веза:",
- "tog-hideminor": "СакÑ\80иÑ\98 маÑ\9aе измене Ñ\83 Ñ\81пиÑ\81кÑ\83 скорашњих измена",
- "tog-hidepatrolled": "СакÑ\80иÑ\98 паÑ\82Ñ\80олиÑ\80ане измене Ñ\83 Ñ\81пиÑ\81кÑ\83 скорашњих измена",
+ "tog-hideminor": "СакÑ\80иÑ\98 маÑ\9aе измене Ñ\81а Ñ\81пиÑ\81ка скорашњих измена",
+ "tog-hidepatrolled": "СакÑ\80иÑ\98 паÑ\82Ñ\80олиÑ\80ане измене Ñ\81а Ñ\81пиÑ\81ка скорашњих измена",
"tog-newpageshidepatrolled": "Сакриј патролиране странице са списка нових страница",
"tog-hidecategorization": "Сакриј категоризацију страница",
"tog-extendwatchlist": "Прошири списак надгледања за приказ свих измена, не само скорашњих",
"tog-showtoolbar": "Прикажи траку с алаткама за уређивање",
"tog-editondblclick": "Уређивање страница двоструким кликом",
"tog-editsectiononrightclick": "Уређивање одељака десним кликом на њихове наслове",
- "tog-watchcreations": "Додај странице које направим и датотеке које пошаљем у списак надгледања",
- "tog-watchdefault": "Додај странице и датотеке које изменим у списак надгледања",
- "tog-watchmoves": "Додај странице и датотеке које преместим у списак надгледања",
- "tog-watchdeletion": "Додај странице и датотеке које обришем у списак надгледања",
- "tog-watchuploads": "Додај датотеке које отпремим у списак надгледања",
- "tog-watchrollback": "Додај странице на којима сам вратио измене у списак надгледања",
+ "tog-watchcreations": "Додај странице које направим и датотеке које пошаљем у мој списак надгледања",
+ "tog-watchdefault": "Додај странице и датотеке које изменим у мој списак надгледања",
+ "tog-watchmoves": "Додај странице и датотеке које преместим у мој списак надгледања",
+ "tog-watchdeletion": "Додај странице и датотеке које обришем у мој списак надгледања",
+ "tog-watchuploads": "Додај датотеке које отпремим у мој списак надгледања",
+ "tog-watchrollback": "Додај странице на којима сам вратио измене у мој списак надгледања",
"tog-minordefault": "Означавај све измене као мање",
- "tog-previewontop": "Прикажи преглед пре оквира за уређивање",
+ "tog-previewontop": "Прикажи претпреглед пре оквира за уређивање",
"tog-previewonfirst": "Прикажи преглед на првој измени",
- "tog-enotifwatchlistpages": "Пошаљи ми имејл када се промени страница/датотека коју надгледам",
- "tog-enotifusertalkpages": "Ð\9fоÑ\88аÑ\99и ми имеÑ\98л када Ñ\81е пÑ\80омени моÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86а за Ñ\80азговоÑ\80",
+ "tog-enotifwatchlistpages": "Пошаљи ми имејл када се страница или датотека коју надгледам измени",
+ "tog-enotifusertalkpages": "Ð\9fоÑ\88аÑ\99и ми имеÑ\98л када Ñ\81е моÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86а за Ñ\80азговоÑ\80 измени",
"tog-enotifminoredits": "Пошаљи ми имејл и за мање измене у страницама и датотекама",
"tog-enotifrevealaddr": "Прикажи моју имејл адресу у порукама обавештења",
"tog-shownumberswatching": "Прикажи број корисника који надгледају",
- "tog-oldsig": "ТекÑ\83Ñ\9bи потпис:",
+ "tog-oldsig": "Ð\92аÑ\88 Ñ\82Ñ\80енÑ\83Ñ\82ни потпис:",
"tog-fancysig": "Сматрај потпис као викитекст (без самоповезивања)",
- "tog-uselivepreview": "Прикажи преглед без освежавања стране",
+ "tog-uselivepreview": "Прикажи претпреглед без освежавања стране",
"tog-forceeditsummary": "Упозори ме када не унесем опис измене",
"tog-watchlisthideown": "Сакриј моје измене са списка надгледања",
"tog-watchlisthidebots": "Сакриј измене ботова са списка надгледања",
"tog-watchlisthideminor": "Сакриј мање измене са списка надгледања",
"tog-watchlisthideliu": "Сакриј измене пријављених корисника са списка надгледања",
"tog-watchlistreloadautomatically": "Аутоматски освежи списак надгледања кад год се филтер измени (потребан JavaScript)",
- "tog-watchlistunwatchlinks": "Ð\94одаÑ\98 дÑ\83гме за Ñ\83кÑ\99Ñ\83Ñ\87еÑ\9aе/иÑ\81кÑ\99Ñ\83Ñ\87еÑ\9aе надгледаÑ\9aа Ñ\81вакоÑ\98 Ñ\81Ñ\82Ñ\80ани на Ñ\81пиÑ\81кÑ\83 надгледаÑ\9aа (поÑ\82Ñ\80ебан Ð\88аваÑ\81кÑ\80ипÑ\82 за еÑ\84екаÑ\82 Ñ\83кÑ\99Ñ\83Ñ\87и/иÑ\81кÑ\99Ñ\83Ñ\87и)",
+ "tog-watchlistunwatchlinks": "Ð\94одаÑ\98 везе за диÑ\80екÑ\82но додаваÑ\9aе/Ñ\83клаÑ\9aаÑ\9aе Ñ\81Ñ\82авки Ñ\81а Ñ\81пиÑ\81ка надгледаÑ\9aа (поÑ\82Ñ\80ебан Ð\88аваСкÑ\80ипÑ\82)",
"tog-watchlisthideanons": "Сакриј измене анонимних корисника са списка надгледања",
"tog-watchlisthidepatrolled": "Сакриј патролиране измене са списка надгледања",
"tog-watchlisthidecategorization": "Сакриј категоризацију страница",
"tog-ccmeonemails": "Пошаљи ми копије имејлова које пошаљем другим корисницима",
"tog-diffonly": "Не приказуј садржај странице испод разлика",
- "tog-showhiddencats": "Скривене категорије",
+ "tog-showhiddencats": "Ð\9fÑ\80икажи Ñ\81кривене категорије",
"tog-norollbackdiff": "Не приказуј разлику након извршеног враћања",
- "tog-useeditwarning": "УпозоÑ\80и ме када напÑ\83Ñ\88Ñ\82ам Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\81а неÑ\81аÑ\87Ñ\83ваним пÑ\80оменама",
+ "tog-useeditwarning": "УпозоÑ\80и ме када напÑ\83Ñ\88Ñ\82ам Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\81а неÑ\81аÑ\87Ñ\83ваним изменама",
"tog-prefershttps": "Увек користи сигурну конекцију када сам пријављен.",
- "underline-always": "Увек подвлачи",
- "underline-never": "Никад не подвлачи",
+ "underline-always": "Увек",
+ "underline-never": "Никад",
"underline-default": "Према теми или прегледачу",
"editfont-style": "Изглед фонта у уређивачком оквиру:",
"editfont-monospace": "Сразмерно широк фонт",
"category-file-count-limited": "{{PLURAL:$1|1=Следећа датотека је|Следеће $1 датотеке су|Следећих $1 датотека је}} у овој категорији.",
"listingcontinuesabbrev": "наст.",
"index-category": "Пописане странице",
- "noindex-category": "Ð\9dеиндекÑ\81иÑ\80ане странице",
+ "noindex-category": "Ð\9dепопиÑ\81ане странице",
"broken-file-category": "Странице с неисправним везама до датотека",
"about": "О нама",
"article": "Страница са садржајем",
"newwindow": "(отвара се у новом прозору)",
"cancel": "Откажи",
"moredotdotdot": "Више…",
- "morenotlisted": "Ð\9eваÑ\98 Ñ\81пиÑ\81ак ниÑ\98е комплеÑ\82ан.",
+ "morenotlisted": "Ð\9eваÑ\98 Ñ\81пиÑ\81ак можда ниÑ\98е поÑ\82пÑ\83н.",
"mypage": "Страница",
"mytalk": "Разговор",
"anontalk": "Разговор",
"navigation-heading": "Навигациони мени",
"errorpagetitle": "Грешка",
"returnto": "Назад на $1.",
- "tagline": "Извор: {{SITENAME}}",
+ "tagline": "Из {{SITENAME}}",
"help": "Помоћ",
- "search": "Ð\9fÑ\80еÑ\82Ñ\80ага",
+ "search": "Ð\9fÑ\80еÑ\82Ñ\80ажи",
"searchbutton": "Претражи",
"go": "Иди",
"searcharticle": "Иди",
"talk": "Разговор",
"views": "Прегледи",
"toolbox": "Алатке",
- "tool-link-userrights": "УÑ\80еди {{GENDER:$1|корисничке}} групе",
- "tool-link-userrights-readonly": "{{GENDER:$1|Корисничке}} групе",
- "tool-link-emailuser": "Пошаљи {{GENDER:$1|имејл}}",
+ "tool-link-userrights": "Ð\9fÑ\80омени {{GENDER:$1|корисничке}} групе",
+ "tool-link-userrights-readonly": "Погледај {{GENDER:$1|корисничке}} групе",
+ "tool-link-emailuser": "Пошаљи имејл {{GENDER:$1|кориснику|корисници}}",
"imagepage": "Погледај страницу датотеке",
"mediawikipage": "Погледај страницу поруке",
"templatepage": "Погледај страницу шаблона",
"viewhelppage": "Погледај страницу помоћи",
- "categorypage": "Ð\9fогледаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 каÑ\82егоÑ\80иÑ\98а",
+ "categorypage": "Ð\9fогледаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 каÑ\82егоÑ\80иÑ\98е",
"viewtalkpage": "Погледај разговор",
"otherlanguages": "На другим језицима",
"redirectedfrom": "(преусмерено са $1)",
"pool-timeout": "Истек времена чека на закључавање",
"pool-queuefull": "Ред је пун захтева",
"pool-errorunknown": "Непозната грешка",
- "pool-servererror": "Услуга бројача пула није доступна ($1).",
+ "pool-servererror": "Услуга бројача редова није доступна ($1).",
"poolcounter-usage-error": "Грешка при употреби: $1",
"aboutsite": "О пројекту {{SITENAME}}",
"aboutpage": "Project:О нама",
"title-invalid-utf8": "Тражени назив странице садржи неважећи UTF-8 знак.",
"title-invalid-interwiki": "Тражени наслов странице садржи унутрашњу вики везу која не може бити кориштена у насловима.",
"title-invalid-talk-namespace": "Тражени наслов странице се односи на страницу за разговор која не може постојати.",
- "title-invalid-characters": "ТÑ\80ажени наÑ\81лов има неважеÑ\9bе каÑ\80акÑ\82еÑ\80е: „$1“.",
+ "title-invalid-characters": "ТÑ\80ажени наÑ\81лов има неважеÑ\9bе знакове: „$1“.",
"title-invalid-relative": "Наслов има релативну путању. Релативни наслови страница (./, ../) нису важећи јер ће често бити недоступни у корисничком прегледачу.",
"title-invalid-magic-tilde": "Тражени наслов странице садржи неважећи след магичног знака тилда (<nowiki>~~~</nowiki>).",
"title-invalid-too-long": "Тражени назив странице је предугачак. Не сме бити дужи од $1 {{PLURAL:$1|бајта|бајтова}} у UTF-8 кодирању.",
"actionthrottledtext": "У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.",
"protectedpagetext": "Ова страница је закључана за измене и друге радње.",
"viewsourcetext": "Можете читати и копирати изворник ове странице.",
- "viewyourtext": "Можете да погледате и копирате изворни текст <strong>ваших измена</strong> на овој страници.",
+ "viewyourtext": "Можете да погледате и копирате изворник <strong>ваших измена</strong> на овој страници.",
"protectedinterface": "Ова страница садржи текст интерфејса за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или изменили преводе било којег викија, посетите [https://translatewiki.net/ translatewiki.net], пројекат за локализацију Медијавикија.",
"editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
"translateinterface": "Да додате или промените преводе за све викије, посетите [https://translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
"cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
- "namespaceprotected": "Немате дозволу да уређујете странице у именском простору <strong>$1</strong>.",
+ "namespaceprotected": "Немате дозволу да уређујете странице у именском простору: <strong>$1</strong>.",
"customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи лична подешавања другог корисника.",
- "customjsprotected": "Немате дозволу да мењате ову страницу јаваскрипта јер садржи личне поставке другог корисника.",
+ "customjsprotected": "Немате дозволу да мењате ову страницу JavaScript јер садржи лична подешавања другог корисника.",
"mycustomcssprotected": "Немате дозволу за мењање ове CSS странице.",
"mycustomjsprotected": "Немате дозволу за мењање ове JavaScript странице.",
"myprivateinfoprotected": "Немате дозволу за мењање ваших личних информација.",
"exception-nologin": "Нисте пријављени",
"exception-nologin-text": "Пријавите се да бисте приступили овој страници или радњи.",
"exception-nologin-text-manual": "Морате бити $1 да бисте приступили овој страници или радњи.",
- "virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: ''$1''",
+ "virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: <em>$1</em>",
"virus-scanfailed": "неуспешно скенирање (код $1)",
"virus-unknownscanner": "непознати антивирус:",
- "logouttext": "<strong>Одјављени сте.</strong>\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
+ "logouttext": "<strong>Одјављени сте.</strong>\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију Вашег прегледача.",
"cannotlogoutnow-title": "Одјава тренутно није могућа",
"cannotlogoutnow-text": "Одјава није могућа током употребе $1.",
"welcomeuser": "Добро дошли, $1!",
"userlogin-yourpassword": "Лозинка",
"userlogin-yourpassword-ph": "Унесите вашу лозинку",
"createacct-yourpassword-ph": "Унесите лозинку",
- "yourpasswordagain": "Потврда лозинке:",
- "createacct-yourpasswordagain": "Потврдите лозинку",
- "createacct-yourpasswordagain-ph": "Унесите лозинку још једном",
+ "yourpasswordagain": "Поново унеси лозинку:",
+ "createacct-yourpasswordagain": "Потврди лозинку",
+ "createacct-yourpasswordagain-ph": "Унесите лозинку поново",
"userlogin-remembermypassword": "Остави ме пријављеног/у",
"userlogin-signwithsecure": "Користите сигурну конекцију",
"cannotlogin-title": "Пријава није могућа",
"userlogin-reauth": "Морате се поново пријавити да би верификовали да сте {{GENDER:$1|$1}}.",
"userlogin-createanother": "Отвори још један налог",
"createacct-emailrequired": "Имејл адреса",
- "createacct-emailoptional": "Ð\90дÑ\80еÑ\81а е-поÑ\88Ñ\82е (необавезно)",
+ "createacct-emailoptional": "Ð\98меÑ\98л адÑ\80еÑ\81а (необавезно)",
"createacct-email-ph": "Унесите Вашу имејл адресу",
"createacct-another-email-ph": "Унесите имејл адресу",
"createaccountmail": "Користите привремену, случајно створену лозинку и пошаљите на наведену имејл адресу",
"createacct-benefit-body2": "{{PLURAL:$1|страница|странице|страница}}",
"createacct-benefit-body3": "недавно {{PLURAL:$1|активни корисник|активна корисника|активних корисника}}",
"badretype": "Унете лозинке се не поклапају.",
- "usernameinprogress": "Налог за ово корисничко име се већ прави, молимо сачекајте.",
+ "usernameinprogress": "Налог за ово корисничко име се већ прави, сачекајте.",
"userexists": "Корисничко име је заузето. Изаберите друго.",
"loginerror": "Грешка при пријављивању",
"createacct-error": "Дошло је до грешке при отварању налога",
"nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "Унели сте неисправно корисничко име.",
"loginsuccesstitle": "Успешно пријављивање",
- "loginsuccess": "'''Пријављени сте као „$1“.'''",
+ "loginsuccess": "<strong>Пријављени сте на {{SITENAME}} као „$1”.</strong>",
"nosuchuser": "Не постоји корисник с именом „$1“.\nКорисничка имена су осетљива на мала и велика слова.\nПроверите да ли сте га добро унели или [[Special:CreateAccount|отворите нови налог]].",
"nosuchusershort": "Корисник с именом „$1“ не постоји.\nПроверите да ли сте правилно написали.",
"nouserspecified": "Морате навести корисничко име.",
"password-login-forbidden": "Коришћење овог корисничког имена и лозинке је забрањено.",
"mailmypassword": "Ресетуј лозинку",
"passwordremindertitle": "{{SITENAME}} — привремена лозинка",
- "passwordremindertext": "Неко, вероватно ви, са ИП адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
+ "passwordremindertext": "Неко, вероватно ви, са IP адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
"noemail": "Не постоји имејл адреса за {{GENDER:$1|корисника|корисницу}} $1.",
"noemailcreate": "Морате навести исправну имејл адресу.",
"passwordsent": "Нова лозинка је послата на имејл адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
"mailerror": "Грешка при слању поруке: $1",
"acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу IP адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове IP адресе тренутно не могу отворити више налога.",
"emailauthenticated": "Ваша имејл адреса је потврђена $2 у $3.",
- "emailnotauthenticated": "Ваша имејл адреса још није потврђена.\nИмејл неће бити послат ни у једном од следећих случајева.",
+ "emailnotauthenticated": "Ваша имејл адреса још увек није потврђена.\nИмејл неће бити послат ни у једном од следећих случајева.",
"noemailprefs": "Унесите имејл адресу како би ове могућности радиле.",
"emailconfirmlink": "Потврдите своју имејл адресу",
"invalidemailaddress": "Имејл адреса не може бити прихваћена јер је неисправног облика.\nУнесите исправну адресу или оставите празно поље.",
"botpasswords-label-delete": "Обриши",
"botpasswords-label-resetpassword": "Ресетуј лозинку",
"botpasswords-label-grants-column": "Одобрено",
- "botpasswords-bad-appid": "â\80\9e$1â\80\9d ниÑ\98е валидан назив бота.",
+ "botpasswords-bad-appid": "â\80\9e$1â\80\9d ниÑ\98е иÑ\81пÑ\80аван назив бота.",
"botpasswords-insert-failed": "Неуспешно додавање бота \"$1\". Да ли је већ додат?",
"botpasswords-update-failed": "Није могуће ажурирати бота \"$1\". Да ли је обрисан?",
"botpasswords-created-title": "Направљена лозинка бота",
"resetpass-abort-generic": "Промену лозинке је спречио додатак.",
"resetpass-expired": "Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.",
"resetpass-expired-soft": "Ваша лозинка је истекла и морате поставити нову. Поставите нову лозинку или кликните „{{int:authprovider-resetpass-skip-label}}“ да је поставите касније.",
- "resetpass-validity-soft": "Ð\92аÑ\88а лозинка ниÑ\98е ваÑ\99ана: $1\n\nМолимо изаберите нову или кликните „{{int:authprovider-resetpass-skip-label}}“ да ресетујете касније.",
+ "resetpass-validity-soft": "Ð\92аÑ\88а лозинка ниÑ\98е иÑ\81пÑ\80авна: $1\n\nМолимо изаберите нову или кликните „{{int:authprovider-resetpass-skip-label}}“ да ресетујете касније.",
"passwordreset": "Обнављање лозинке",
"passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на имејл.",
"passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како бисте добили привремену лозинку на имејл.}}",
"passwordreset-domain": "Домен:",
"passwordreset-email": "Имејл адреса:",
"passwordreset-emailtitle": "Детаљи налога на викију {{SITENAME}}",
- "passwordreset-emailtext-ip": "Неко (вероватно Ви, са ИП адресе $1) је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
+ "passwordreset-emailtext-ip": "Неко (вероватно Ви, са IP адресе $1) је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
"passwordreset-emailtext-user": "{{GENDER:$1|Корисник је затражио|Корисница је затражила}} подсетник о подацима за пријаву на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
"passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
"passwordreset-emailsentemail": "Ако је ово имејл адреса повезана са Вашим налогом, подсетник о лозинци ће бити послат на имејл.",
"resettokens-no-tokens": "Нема жетона за ресетовање.",
"resettokens-tokens": "Жетони:",
"resettokens-token-label": "$1 (тренутна вредност: $2)",
- "resettokens-watchlist-token": "Жетон за веб довод (Atom/RSS) вашег [[Special:Watchlist|списка надгледања]]",
+ "resettokens-watchlist-token": "Жетон за веб довод (Atom/RSS) [[Special:Watchlist|измена на страницама у вашем списку надгледања]]",
"resettokens-done": "Жетони су ресетовани",
"resettokens-resetbutton": "Ресетуј изабране жетоне",
"bold_sample": "Подебљан текст",
"bold_tip": "Подебљан текст",
- "italic_sample": "Искошени текст",
- "italic_tip": "Искошени текст",
+ "italic_sample": "Искошен текст",
+ "italic_tip": "Искошен текст",
"link_sample": "Наслов везе",
"link_tip": "Унутрашња веза",
- "extlink_sample": "http://www.example.com/ наслов везе",
+ "extlink_sample": "http://www.пример.com наслов везе",
"extlink_tip": "Спољашња веза (с префиксом http://)",
"headline_sample": "Текст наслова",
"headline_tip": "Поднаслов (ниво 2)",
"nowiki_sample": "Убаците необликован текст овде",
"nowiki_tip": "Занемари вики обликовање",
"image_sample": "Пример.jpg",
- "image_tip": "УгÑ\80аÑ\92ивање датотеке",
+ "image_tip": "УбаÑ\86ивање датотеке",
"media_sample": "Пример.ogg",
"media_tip": "Веза",
"sig_tip": "Ваш потпис са тренутним временом",
- "hr_tip": "Ð\92одоÑ\80авна линиÑ\98а (коÑ\80иÑ\81Ñ\82иÑ\82и ретко)",
+ "hr_tip": "Ð\92одоÑ\80авна линиÑ\98а (коÑ\80иÑ\81Ñ\82иÑ\82е ретко)",
"summary": "Опис измене:",
"subject": "Тема:",
"minoredit": "Ово је мања измена",
"preview": "Претпреглед",
"showpreview": "Прикажи претпреглед",
"showdiff": "Прикажи измене",
- "blankarticle": "<strong>Упозорење:</strong> Страница коју правите је празна.\nАко још једном притиснете „$1”, страница ће бити направљена без икаквог садржаја.",
- "anoneditwarning": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð\9dисте пријављени. Ако објавите страницу, Ваша IP адреса ће бити јавно видљива у њеној историји измена и другде. Ако се <strong>[$1 пријавите]</strong> или <strong>[$2 отворите налог]</strong>, поред осталих погодности које добијате Ваше измене ће бити приписиване Вашем корисничком имену.",
+ "blankarticle": "<strong>Упозорење:</strong> страница коју правите је празна.\nАко још једном притиснете „$1”, страница ће бити направљена без икаквог садржаја.",
+ "anoneditwarning": "<strong>УпозоÑ\80еÑ\9aе:</strong> нисте пријављени. Ако објавите страницу, Ваша IP адреса ће бити јавно видљива у њеној историји измена и другде. Ако се <strong>[$1 пријавите]</strong> или <strong>[$2 отворите налог]</strong>, поред осталих погодности које добијате Ваше измене ће бити приписиване Вашем корисничком имену.",
"anonpreviewwarning": "<em>Нисте пријављени. Ако објавите страницу, Ваша IP адреса ће бити јавно видљива у њеној историји измена и другде.</em>",
- "missingsummary": "'''Подсетник:''' Нисте унели опис измене.\nАко поново кликнете на „$1”, Ваша измена ће бити сачувана без описа.",
- "selfredirect": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð\9fреусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница за преусмерење погрешна или уређујете погрешну страницу.\nАко још једном притиснете „$1”, преусмерење ће свеједно бити направљено.",
+ "missingsummary": "<strong>Подсетник:</strong> нисте унели опис измене.\nАко поново кликнете на „$1”, Ваша измена ће бити сачувана без описа.",
+ "selfredirect": "<strong>УпозоÑ\80еÑ\9aе:</strong> преусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница за преусмерење погрешна или уређујете погрешну страницу.\nАко још једном притиснете „$1”, преусмерење ће свеједно бити направљено.",
"missingcommenttext": "Молимо унесите коментар.",
- "missingcommentheader": "<strong>Ð\9dапомена:</strong> Ð\9dисте унели наслов теме овог коментара.\nАко поново кликнете на „$1”, измена ће бити сачувана без наслова.",
+ "missingcommentheader": "<strong>Ð\9dапомена:</strong> нисте унели наслов теме овог коментара.\nАко поново кликнете на „$1”, измена ће бити сачувана без наслова.",
"summary-preview": "Преглед описа измене:",
"subject-preview": "Преглед теме:",
"previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
"accmailtext": "Лозинка за {{GENDER:$1|корисника|корисницу}} [[User talk:$1|$1]] је послата на $2. Након пријаве, лозинка се може променити [[Special:ChangePassword|овде]].",
"newarticle": "(нови)",
"newarticletext": "Дошли сте на страницу која још не постоји.\nДа бисте је направили, почните да куцате у прозор испод овог текста (погледајте [$1 страницу за помоћ]).\nАко сте овде дошли грешком, вратите се на претходну страницу.",
- "anontalkpagetext": "----\n<em>Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.</em>\nЗбог тога морамо да користимо бројчану ИП адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:CreateAccount|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
+ "anontalkpagetext": "----\n<em>Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.</em>\nЗбог тога морамо да користимо бројчану IP адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:CreateAccount|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
"noarticletext": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} направити ову страницу]</span>.",
"noarticletext-nopermission": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама или <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне дневнике]</span>, али немате дозволу да направите ову страницу.",
"missing-revision": "Не могу да пронађем измену бр. $1 на страници под називом „{{FULLPAGENAME}}“.\n\nОво се обично дешава када пратите застарелу везу до странице која је обрисана.\nВише информација можете пронаћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневнику брисања].",
"sitecsspreview": "'''Ово је само преглед CSS-а.'''\n'''Страница још није сачувана!'''",
"sitejspreview": "'''Ово је само преглед јаваскрипта.'''\n'''Страница још није сачувана!'''",
"userinvalidcssjstitle": "<strong>Упозорење:</strong> не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
- "updated": "(Ð\90журирано)",
+ "updated": "(ажурирано)",
"note": "<strong>Напомена:</strong>",
"previewnote": "<strong>Не заборавите да је ово само претпреглед.</strong>\nВаше измене још нису сачуване!",
"continue-editing": "Иди на уређивачки оквир",
"content-model-json": "JSON",
"content-json-empty-object": "Празан објекат",
"content-json-empty-array": "Празан низ",
- "deprecated-self-close-category": "СÑ\82Ñ\80аниÑ\86е коÑ\98е коÑ\80иÑ\81Ñ\82е невалидне самозатварајуће HTML тагове",
+ "deprecated-self-close-category": "СÑ\82Ñ\80аниÑ\86е коÑ\98е коÑ\80иÑ\81Ñ\82е неиÑ\81пÑ\80авне самозатварајуће HTML тагове",
"duplicate-args-warning": "<strong>Упозорење:</strong> [[:$1]] позива [[:$2]] са више од једне вредности за параметар „$3“. Само последња наведена вредност ће бити коришћена.",
"duplicate-args-category": "Странице с дуплираним аргументима код позива шаблона",
"duplicate-args-category-desc": "Страница садржи позиве шаблона који користе двоструке аргументе, као што су <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"mergehistory-done": "$3 {{PLURAL:$3|измена странице $1 је спојена|измене странице $1 су спојене|измена странице $1 је спојено}} у [[:$2]].",
"mergehistory-fail": "Не могу да спојим историје. Проверите страницу и временске параметре.",
"mergehistory-fail-bad-timestamp": "Временска ознака није исправна.",
- "mergehistory-fail-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е валидна.",
- "mergehistory-fail-invalid-dest": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е валидна.",
+ "mergehistory-fail-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е иÑ\81пÑ\80авна.",
+ "mergehistory-fail-invalid-dest": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е иÑ\81пÑ\80авна.",
"mergehistory-fail-permission": "Немате овлашћење за спајање историје.",
"mergehistory-fail-self-merge": "Изворна и одредишна страница не могу бити исте.",
"mergehistory-fail-toobig": "Није могуће спојити историје јер више од $1 {{PLURAL:$1|измене ће бити премештене|измена ће бити премештено}}.",
"prefs-resetpass": "Промени лозинку",
"prefs-changeemail": "Промени или уклони имејл адресу",
"prefs-setemail": "Постави имејл адресу",
- "prefs-email": "Поставке имејла",
+ "prefs-email": "Подешавања имејла",
"prefs-rendering": "Изглед",
"saveprefs": "Сачувај",
"restoreprefs": "Врати све на подразумевано (у свим одељцима)",
"prefs-advancedediting": "Главна подешавања",
"prefs-editor": "Уређивач",
"prefs-preview": "Претпреглед",
- "prefs-advancedrc": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
+ "prefs-advancedrc": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
"prefs-opt-out": "Онемогућавање побољшања",
- "prefs-advancedrendering": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
- "prefs-advancedsearchoptions": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
- "prefs-advancedwatchlist": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
- "prefs-displayrc": "Поставке приказа",
- "prefs-displaywatchlist": "Поставке приказа",
+ "prefs-advancedrendering": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
+ "prefs-advancedsearchoptions": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
+ "prefs-advancedwatchlist": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
+ "prefs-displayrc": "Подешавања приказа",
+ "prefs-displaywatchlist": "Подешавања приказа",
"prefs-tokenwatchlist": "Жетон",
"prefs-diffs": "Разлике",
"prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
"right-editmyuserjs": "уређивање сопствених JavaScript датотека",
"right-viewmywatchlist": "види сопствени списак надгледања",
"right-editmywatchlist": "уређивање сопственог списка надгледања; неке предузете радње ће свеједно додати странице на списак и без овог права",
- "right-viewmyprivateinfo": "Ð\92идите своје личне податке (нпр. имејл адресу, право име)",
- "right-editmyprivateinfo": "Уређивање сопствених личних података (нпр. имејл адреса, право име)",
+ "right-viewmyprivateinfo": "видите своје личне податке (нпр. имејл адресу, право име)",
+ "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. имејл адреса, право име)",
"right-editmyoptions": "уређивање сопствених подешавања",
"right-rollback": "брзо враћање измена последњег корисника који је мењао одређену страницу",
"right-markbotedits": "означавање враћених измена као измене бота",
"rcfilters-clear-all-filters": "Уклони све филтере",
"rcfilters-show-new-changes": "Погледајте најновије измене",
"rcfilters-search-placeholder": "Филтрирај скорашње измене (употребите мени или потражите име филтра)",
- "rcfilters-invalid-filter": "Ð\9dевалидан филтер",
+ "rcfilters-invalid-filter": "Ð\9dеиÑ\81пÑ\80аван филтер",
"rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
"rcfilters-filterlist-title": "Филтери",
"rcfilters-filterlist-whatsthis": "Како ово функционише?",
"destfilename": "Назив:",
"upload-maxfilesize": "Максимална величина датотеке: $1",
"upload-description": "Опис датотеке",
- "upload-options": "Поставке отпремања",
+ "upload-options": "Подешавања отпремања",
"watchthisupload": "Надгледај ову датотеку",
"filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
"filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
"uploadstash-errclear": "Чишћење датотека није успело.",
"uploadstash-refresh": "Освежи списак датотека",
"uploadstash-bad-path": "Путања не постоји.",
- "uploadstash-bad-path-invalid": "Ð\9fÑ\83Ñ\82аÑ\9aе ниÑ\98е валидна.",
+ "uploadstash-bad-path-invalid": "Ð\9fÑ\83Ñ\82аÑ\9aа ниÑ\98е иÑ\81пÑ\80авна.",
"uploadstash-bad-path-unknown-type": "Непознат тип „$1“.",
"invalid-chunk-offset": "Неисправна полазна тачка",
"img-auth-accessdenied": "Приступ је одбијен",
"apisandbox-dynamic-error-exists": "Параметар под називом \"$1\" већ постоји.",
"apisandbox-deprecated-parameters": "Застарели параметри",
"apisandbox-fetch-token": "Аутоматски попуни токен",
- "apisandbox-submit-invalid-fields-title": "Ð\9dека поÑ\99а ниÑ\81Ñ\83 валидна",
+ "apisandbox-submit-invalid-fields-title": "Ð\9dека поÑ\99а ниÑ\81Ñ\83 иÑ\81пÑ\80авна",
"apisandbox-submit-invalid-fields-message": "Молимо Вас поправите означена поља и покушајте поново.",
"apisandbox-results": "Резултати",
"apisandbox-sending-request": "Слање API захтева...",
"enotif_lastvisited": "За све измене од ваше последње посете, погледајте $1.",
"enotif_lastdiff": "Да видите ову измену, погледајте $1.",
"enotif_anon_editor": "анониман корисник $1",
- "enotif_body": "Поштовани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nОпис: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nмејл: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите поставке обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили поставке имејл обавештења, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили поставке списка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
+ "enotif_body": "Поштовани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nОпис: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nмејл: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите подешавања обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили подешавања имејл обавештења, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили подешавања списка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
"enotif_minoredit": "Ово је мања измена",
"created": "направљена",
"changed": "измењена",
"unblock": "Деблокирање корисника",
"blockip": "Блокирај {{GENDER:$1|корисника|корисницу}}",
"blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене IP адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване). Можете блокирати опсеге IP адреса помоћу [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] синтаксе, највећи дозвољени опсег за IPv4 је /$1 односно /$2 за IPv6.",
- "ipaddressorusername": "ИП адреса или корисничко име:",
+ "ipaddressorusername": "IP адреса или корисничко име:",
"ipbexpiry": "Истиче:",
"ipbreason": "Разлог:",
"ipbreason-dropdown": "*Најчешћи разлози за блокирање\n** Уношење лажних информација\n** Уклањање садржаја са страница\n** Постављање веза до спољашњих сајтова\n** Уношење бесмислица у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
"emailblock": "имејл је онемогућен",
"blocklist-nousertalk": "забрањено уређивање сопствене странице за разговор",
"ipblocklist-empty": "Списак блокирања је празан.",
- "ipblocklist-no-results": "Тражена ИП адреса или корисничко име није блокирано.",
+ "ipblocklist-no-results": "Тражена IP адреса или корисничко име није блокирано.",
"blocklink": "блокирај",
"unblocklink": "деблокирај",
"change-blocklink": "промени блокаду",
"ipb-otherblocks-header": "{{PLURAL:$1|Друге блокаде}}",
"unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
"ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
- "ipb_blocked_as_range": "Грешка: ИП адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
- "ip_range_invalid": "Неисправан распон ИП адреса.",
+ "ipb_blocked_as_range": "Грешка: IP адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
+ "ip_range_invalid": "Неисправан распон IP адреса.",
"ip_range_toolarge": "Опсежна блокирања већа од /$1 нису дозвољена.",
"proxyblocker": "Блокер посредника",
"proxyblockreason": "Ваша ИП адреса је блокирана јер представља отворени посредник.\nОбратите се вашем добављачу интернет услуга или техничку подршку и обавестите их о овом озбиљном безбедносном проблему.",
"version-libraries-description": "Опис",
"version-libraries-authors": "Аутори",
"redirect": "Преусмерење на датотеку, корисника, страницу, измену или дневник (ID)",
- "redirect-summary": "Ова специјална страница преусмерава до датотеке (са датим именом датотеке), странице (са датим ID-ом измене или ID-ом странице), корисничке странице (са датим нумеричким корисничким ID-ом), или уноса у дневнику (са датим дневничким ID-ом). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
+ "redirect-summary": "Ова посебна страница преусмерава до датотеке (са датим именом датотеке), странице (са датим ID-ом измене или ID-ом странице), корисничке странице (са датим нумеричким корисничким ID-ом), или уноса у дневнику (са датим дневничким ID-ом). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
"redirect-submit": "Иди",
"redirect-lookup": "Тип вредности:",
"redirect-value": "Вредност:",
"logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
"logentry-newusers-byemail": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3 и лозинка је послата на имејл",
"logentry-newusers-autocreate": "Кориснички налог $1 је аутоматски {{GENDER:$2|отворен}}",
- "logentry-protect-move_prot": "$1 је {{GENDER:$2|преместио|преместила}} поставке заштите са $4 на $3",
+ "logentry-protect-move_prot": "$1 је {{GENDER:$2|преместио|преместила}} подешавања заштите са $4 на $3",
"logentry-protect-unprotect": "$1 je {{GENDER:$2|скинуо|скинула}} заштиту са странице $3",
"logentry-protect-protect": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4",
"logentry-protect-protect-cascade": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4 [преносива заштита]",
"feedback-bugornote": "Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].\nУ супротном, послужите се једноставним обрасцем испод. Ваш коментар ће стајати на страници „[$3 $2]“, заједно с корисничким именом и прегледачем који користите.",
"feedback-cancel": "Откажи",
"feedback-close": "Урађено",
- "feedback-external-bug-report-button": "Ð\9fÑ\80иÑ\98ави баг",
+ "feedback-external-bug-report-button": "Ð\9fÑ\80иÑ\98ави гÑ\80еÑ\88кÑ\83",
"feedback-dialog-title": "Пошаљи повратну информацију",
"feedback-error1": "Грешка: непрепознат резултат од АПИ-ја",
"feedback-error2": "Грешка: уређивање није успело",
"usercssispublic": "Напомена: CSS подстранице не би требале садржавати поверљиве информације будући да су видљиве другим корисницима.",
"rawhtml-notallowed": "<html> тагови не могу да се користе ван нормалних страница.",
"gotointerwiki": "Напуштам пројекат {{SITENAME}}",
- "gotointerwiki-invalid": "Ð\9eдабÑ\80ани наÑ\81лов Ñ\98е невалидан.",
+ "gotointerwiki-invalid": "Ð\9eдабÑ\80ани наÑ\81лов Ñ\98е неиÑ\81пÑ\80аван.",
"gotointerwiki-external": "Управо ћете да напустите пројекат {{SITENAME}} да бисте на засебном веб-сајту посетили [[$2]].\n\n'''[$1 Продужи на $1]'''",
"undelete-cantedit": "Не можете повратити ову страницу јер немате дозволу да је уређујете.",
"undelete-cantcreate": "Не можете повратити ову страницу јер нема постојеће странице са овим именом и немате дозволу да направите ову страницу.",
"Obsuser",
"Zoranzoki21",
"Prevodim",
- "Bugoslav"
+ "Bugoslav",
+ "Acamicamacaraca"
]
},
"tog-underline": "Podvlačenje veza:",
"right-editmyuserjs": "uređivanje sopstvenih JavaScript datoteka",
"right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
"right-editmywatchlist": "uređivanje sopstvenog spiska nadgledanja; neke preduzete radnje će svejedno dodati stranice na spisak i bez ovog prava",
- "right-viewmyprivateinfo": "Vidite svoje lične podatke (npr. imejl adresu, pravo ime)",
- "right-editmyprivateinfo": "Уređivanje sopstvenih ličnih podataka (npr. imejl adresa, pravo ime)",
+ "right-viewmyprivateinfo": "vidite svoje lične podatke (npr. imejl adresu, pravo ime)",
+ "right-editmyprivateinfo": "uređivanje sopstvenih ličnih podataka (npr. imejl adresa, pravo ime)",
"right-editmyoptions": "uređivanje sopstvenih podešavanja",
"right-rollback": "brzo vraćanje izmena poslednjeg korisnika koji je menjao određenu stranicu",
"right-markbotedits": "označavanje vraćenih izmena kao izmene bota",
"doubleredirects": "Dubbla omdirigeringar",
"doubleredirectstext": "Det här är en lista över sidor som omdirigerar till andra omdirigeringssidor. \nVarje rad innehåller länkar till den första och andra omdirigeringssidan, samt till målet för den andra omdirigeringen. Målet för den andra omdirigeringen är ofta den \"riktiga\" sidan som den första omdirigeringen egentligen ska leda till.\n<del>Överstrukna</del> poster har åtgärdats.",
"double-redirect-fixed-move": "[[$1]] har flyttats.\nDen uppdaterades automatiskt och är nu en omdirigering till [[$2]].",
- "double-redirect-fixed-maintenance": "Fixar automatiskt dubbel omdirigering från [[$1]] till [[$2]] i ett underhållsjobb.",
+ "double-redirect-fixed-maintenance": "Fixar automatiskt dubbel omdirigering från [[$1]] till [[$2]] i ett underhållsjobb",
"double-redirect-fixer": "Omdirigeringsrättaren",
"brokenredirects": "Trasiga omdirigeringar",
"brokenredirectstext": "Följande omdirigeringar länkar till ej existerande sidor:",
"diff-form": "Skillnader",
"diff-form-oldid": "Gammalt versions-ID (valfritt)",
"diff-form-revid": "Versions-ID för diff",
- "diff-form-submit": "Visa differenser",
+ "diff-form-submit": "Visa skillnad",
"permanentlink": "Permanent länk",
"permanentlink-revid": "Sidversions-ID",
"permanentlink-submit": "Gå till sidversion",
"currentevents": "Рӯйдодҳои кунунӣ",
"currentevents-url": "Лоиҳа:Рӯйдодҳои кунунӣ",
"disclaimers": "Такзибнома",
- "disclaimerpage": "Project:Такзибномаи умумӣ",
+ "disclaimerpage": "Википедия:Такзибномаи умумӣ",
"edithelp": "Роҳнамои вироиш",
"mainpage": "Саҳифаи аслӣ",
"mainpage-description": "Саҳифаи аслӣ",
"duration-decades": "$1 ทศวรรษ",
"duration-centuries": "$1 ศตวรรษ",
"duration-millennia": "$1 สหัสวรรษ",
+ "limitreport-title": "ข้อมูลบันทึกตัวแจงส่วน:",
+ "limitreport-cputime": "การใช้เวลาของซีพียู",
+ "limitreport-cputime-value": "$1 วินาที",
+ "limitreport-walltime": "การใช้เวลาจริง",
+ "limitreport-walltime-value": "$1 วินาที",
+ "limitreport-ppvisitednodes": "จำนวนปมที่เข้าชมแล้วของตัวประมวลก่อน",
+ "limitreport-ppgeneratednodes": "จำนวนปมที่สร้างแล้วของตัวประมวลก่อน",
+ "limitreport-postexpandincludesize": "ขนาดเมื่อรวมขยายแล้ว",
+ "limitreport-postexpandincludesize-value": "$1/$2 ไบต์",
+ "limitreport-templateargumentsize": "ขนาดอาร์กิวเมนต์แม่แบบ",
+ "limitreport-templateargumentsize-value": "$1/$2 ไบต์",
+ "limitreport-expansiondepth": "ความลึกการขยายสูงสุด",
"expandtemplates": "ขยายแม่แบบ",
"expand_templates_output": "ผลลัพธ์",
"expand_templates_ok": "ตกลง",
"log-action-filter-suppress-event": "การระงับปูม",
"log-action-filter-upload-upload": "อัปโหลดใหม่",
"log-action-filter-upload-overwrite": "อัปโหลดใหม่",
+ "edit-error-short": "ข้อผิดพลาด: $1",
+ "edit-error-long": "ข้อผิดพลาด: $1",
"revid": "รุ่นแก้ไข $1",
"pageid": "เลขประจำหน้า $1",
"gotointerwiki": "กำลังออกจาก {{SITENAME}}",
"LR Guanzon"
]
},
- "tog-underline": "Pagsasalungguhit ng link:",
+ "tog-underline": "Pagsasalungguhit ng kawing:",
"tog-hideminor": "Itago ang mga maliliit na pagbabago mula sa mga huling pagbabago",
"tog-hidepatrolled": "Itago ang mga napatrolyang pagbabago mula sa mga huling pagbabago",
"tog-newpageshidepatrolled": "Itago ang mga napatrolyang pahina mula talaan ng bagong pahina",
"history_small": "kasaysayan",
"updatedmarker": "isinapanahon mula noong huli kong pagdalaw",
"printableversion": "Bersiyong maililimbag",
- "permalink": "Permanenteng link",
+ "permalink": "Permanenteng kawing",
"print": "Ilimbag",
"view": "Tingnan",
"view-foreign": "Tingnan sa $1",
"pagetitle": "$1 - {{SITENAME}}",
"pagetitle-view-mainpage": "{{SITENAME}}",
"backlinksubtitle": "← $1",
- "retrievedfrom": "Ikinuha mula sa \"$1\"",
- "youhavenewmessages": "Mayroon kang $1 ($2).",
- "youhavenewmessagesfromusers": "{{PLURAL:$4|Mayroon kang}} $1 magmula sa {{PLURAL:$3|ibang tagagamit|$3 mga tagagamit}} ($2).",
- "youhavenewmessagesmanyusers": "Mayroon kang $1 magmula sa maraming mga tagagamit ($2).",
+ "retrievedfrom": "Kinuha mula sa \"$1\"",
+ "youhavenewmessages": "{{PLURAL:$3|Mayroon kang}} $1 ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Mayroon kang}} $1 mula sa {{PLURAL:$3|ibang tagagamit|$3 mga tagagamit}} ($2).",
+ "youhavenewmessagesmanyusers": "Mayroon kang $1 mula sa maraming tagagamit ($2).",
"newmessageslinkplural": "{{PLURAL:$1|isang bagong mensahe|999=bagong mensahe}}",
"newmessagesdifflinkplural": "huling {{PLURAL:$1|pagbabago|999=mga pagbabago}}",
"youhavenewmessagesmulti": "Mayroon kang mga bagong mensahe sa $1",
"nosuchusershort": "Walang tagagamit na may pangalang \"$1\".\nPakitingnan ang iyong pagbabaybay.",
"nouserspecified": "Kailangang tukuyin mo ang isang pangalang pantagagamit.",
"login-userblocked": "Hinarang ang tagagamit na ito. Hindi pinahihintulutan ang paglalagda.",
- "wrongpassword": "Mali ang ipinasok na password.\nPakisubok muli.",
+ "wrongpassword": "Mali ang ipinasok na password o pangalan ng tagagamit.\nPakisubok muli.",
"wrongpasswordempty": "Walang laman ang ipinasok na password.\nPakisubok muli.",
"passwordtooshort": "Ang mga password ay dapat mayroong {{PLURAL:$1|1 panitik|$1 panitik}} (karakter).",
"passwordtoolong": "Ang mga password ay hindi maaaring mas mahaba sa {{PLURAL:$1|1 panitik|$1 panitik}}.",
"anoneditwarning": "<stromg>Babala:</strong> Hindi ka nakalagda.\nMakikita ng publiko ang iyong IP address kung gagawa ka ng mga pagbabago. Kung <strong>[$1 mag-login]</strong> ka o <strong>[$2 lumikha ng account]</strong>, maiuugnay ang iyong mga pagbabago sa iyong account, kasama ang ibang pakinabang.",
"anonpreviewwarning": "''Hindi ka nakalagda. Itatala sa inyong pagtatala ang inyong direksiyong IP sa kasaysayan ng pagbabago ng pahinang ito.''",
"missingsummary": "'''Paalala:''' Hindi ka nagbigay ng buod ng pagbabago.\nKapag pinindot mo uli ang Sagip, masasagip ang pagbabago mo na wala nito.",
- "missingcommenttext": "Magbigay ng isang kumento/puna sa ibaba.",
+ "missingcommenttext": "Maaaring magbigay ng komento.",
"missingcommentheader": "'''Paalala:''' Hindi ka nagbigay ng isang paksa/paulo para sa punang ito.\nKapag pinindot mo uli ang \"$1\", masasagip ang pagbabago mo na wala nito.",
"summary-preview": "Paunang tingin sa buod:",
"subject-preview": "Paunang tingin sa paksa:",
"continue-editing": "Pumunta sa pook ng pamamatnugot",
"previewconflict": "Ipinamamalas ng paunang tinging ito ang teksto sa loob ng pangitaas na pook-patnugutan ng teksto ayon sa lilitaw na anyo nito kapag pinili mo ang pagsagip.",
"session_fail_preview": "Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.\n\nIkaw ay maaaring nailagda palabas. <strong>Maaaring patunayan na ikaw ay nakalagda pa rin at subukang muli</strong>.\nKung hindi ito gumana, subukang [[Special:UserLogout|umalis sa pagkalagda]] at bumalik muli, at tingnan kung ang iyong browser ay pumapayag sa mga cookie mula sa site na ito.",
- "session_fail_preview_html": "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.'''\n\n''Dahil naka-andar ang hilaw na HTML sa {{SITENAME}}, nakatago ang paunang tingin bilang pag-iingat sa mga paglusob ng JavaScript.''\n\n'''Kung lehitimong pagbabago ito, paki-ulit muli.'''\nKung hindi pa rin ito gumagana, subukang [[Special:UserLogout|mag-logout]] at mag-login muli.",
+ "session_fail_preview_html": "Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.\n\n<em>Dahil naka-andar ang hilaw na HTML sa {{SITENAME}}, nakatago ang paunang tingin bilang pag-iingat sa mga paglusob ng JavaScript.</em>\n\n<strong>Kung lehitimong pagbabago ito, paki-ulit muli.</strong>\nKung hindi pa rin ito gumagana, subukang [[Special:UserLogout|mag-logout]] at mag-login muli, at pakitingnan kung pinapayagan ng iyong browser ang mga cookie mula sa site na ito.",
"token_suffix_mismatch": "'''Hindi tinanggap ang iyong pagbabago dahil sinira ng kliyente ang mga karakter na bantas sa ''token'' ng mamatnugot.\nTinanggihan ang pagbabago upang maiwasan ang korapsyon ng teksto ng artikulo.\nKadalasang nangyayari ito kapag gumagamit ka ng masurot na serbisyo ng hindi-nakikilalang apoderadong (''anonymous proxy'') nasa web.",
"edit_form_incomplete": "'''Ilan sa mga bahagi ng pormularyong pampatnugot ay hindi nakarating sa tagapaghain; suriing muli na ang iyong mga pagbabago ay buo at subukang muli.'''",
"editing": "Binabago ang $1",
"recentchanges-legend-heading": "<strong>Gösterge:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca [[Special:NewPages|yeni sayfalar listesine]] bakınız)",
"recentchanges-submit": "Göster",
+ "rcfilters-other-review-tools": "Diğer inceleme araçları",
"rcfilters-group-results-by-page": "Sayfalandırılmış grup sonuçları",
"rcfilters-activefilters": "Etkin süzgeçler",
"rcfilters-advancedfilters": "Gelişmiş süzgeçler",
+ "rcfilters-limit-title": "Gösterilecek sonuçlar",
+ "rcfilters-days-title": "Son günler",
+ "rcfilters-hours-title": "Son saatler",
"rcfilters-quickfilters": "Kaydedilmiş süzgeçler",
"rcfilters-quickfilters-placeholder-title": "Henüz hiçbir süzgeç kaydedilmedi",
"rcfilters-quickfilters-placeholder-description": "Süzgeç ayarlarınızı kaydetmek ve sonrasında bunları kullanmak için, aşağıda Aktif Süzgeçler alanındaki yer imi simgesine tıklayın.",
"tog-extendwatchlist": "Ragrandi l' djivêye po mostrer tos les candjmints, nén seulmint les dierins",
"tog-usenewrc": "Relére par pådje dins les dierins candjmints et l' djivêye des shuvous (i fåt JavaScript)",
"tog-numberheadings": "Limerotaedje otomatike des tites",
- "tog-showtoolbar": "Mostrer l' bår d' usteyes e môde candjmint (JavaScript)",
- "tog-editondblclick": "Candjî les pådjes avou on dobe-clitch (JavaScript)",
- "tog-editsectiononrightclick": "Candjî les seccions avou on dobe-clitch sol tite (JavaScript)",
- "tog-watchcreations": "Mete les pådjes ki dj' askepeye dins l' djivêye des pådjes shuvowes",
- "tog-watchdefault": "Shuve les årtikes ki dj' fwai ou ki dj' candje",
- "tog-watchmoves": "Radjouter a m' djivêye des shuvous les pådjes ki dji displaece",
- "tog-watchdeletion": "Radjouter a m' djivêye des shuvous les pådjes ki dji disface",
+ "tog-showtoolbar": "Mostrer l' bår d' usteyes e môde candjmint",
+ "tog-editondblclick": "Candjî les pådjes avou on dobe-clitch",
+ "tog-editsectiononrightclick": "Candjî les seccions avou on dobe-clitch so les tites",
+ "tog-watchcreations": "Radjouter a m' djivêye des shuvous les pådjes ki dj' askepeye et les fitchîs ki dj' eberwete",
+ "tog-watchdefault": "Radjouter a m' djivêye des shuvous les pådjes et les fitchîs ki dj' candje",
+ "tog-watchmoves": "Radjouter a m' djivêye des shuvous les pådjes et les fitchîs ki dji displaece",
+ "tog-watchdeletion": "Radjouter a m' djivêye des shuvous les pådjes et les fitchîs ki dji disface",
+ "tog-watchuploads": "Radjouter a m' djivêye des shuvous les fitchîs ki dj' eberwete",
+ "tog-watchrollback": "Radjouter a m' djivêye des shuvous les pådjes wice ki dj' a disfé on candjmint",
"tog-minordefault": "Prémete mes candjmints come mineurs",
"tog-previewontop": "Prévey l' årtike å dzeu del boesse d' aspougnaedje",
"tog-previewonfirst": "Prévey l' årtike å prumî candjmint",
- "tog-enotifwatchlistpages": "M' emiler cwand ene pådje shuvowe candje",
- "tog-enotifusertalkpages": "M' emiler cwand l' pådje di copene da minne candje",
- "tog-enotifminoredits": "M' emiler eto po les ptits candjmints",
+ "tog-enotifwatchlistpages": "M' emiler cwand ene pådje u on fitchî d' èm djivêye des shuvous candje",
+ "tog-enotifusertalkpages": "M' emiler cwand m' pådje di copene da minne candje",
+ "tog-enotifminoredits": "M' emiler eto po les ptits candjmints des pådjes u des fitchîs",
"tog-enotifrevealaddr": "Mostrer mi adresse emile dins les emiles di notifiaedje",
"tog-shownumberswatching": "Mostrer l' nombe d' uzeus ki shuvèt l' pådje",
"tog-oldsig": "Siné pol moumint:",
"welcomeuser": "Bénvnowe, $1!",
"yourname": "Vosse no d' elodjaedje:",
"userlogin-yourname": "No d' uzeu",
+ "userlogin-yourname-ph": "Tapez vosse no d' uzeu",
"yourpassword": "Vosse sicret",
"userlogin-yourpassword": "Sicret",
"yourpasswordagain": "Ritapez vosse sicret",
"rightslog": "Djournå des droets des uzeus",
"rightslogtext": "Çouchal, c' est on djournå des candjmints des droets des uzeus.",
"action-read": "lére cisse pådje ci",
- "action-edit": "candjî l' pådje",
+ "action-edit": "candjî cisse pådje ci",
"action-createpage": "ahiver des pådjes",
"action-createtalk": "ahiver des pådjes di copinaedje",
"action-createaccount": "ahiver ci conte d' uzeu ci",
"action-protect": "candjî les liveas d' protedjaedje del pådje",
"action-autopatrol": "aveur vosse candjmint marké come ricoridjî",
"nchanges": "$1 {{PLURAL:$1|candjmint|candjmints}}",
+ "enhancedrc-history": "Istwere",
"recentchanges": "Dierins candjmints",
"recentchanges-legend": "Tchuzes po les dierins candjmints",
"recentchanges-summary": "Shuvoz chal les dierins candjmints k' i gn a yeu dsu {{SITENAME}}.",
"uploadnewversion-linktext": "Eberweter ene nouve modêye di ci fitchî ci",
"shared-repo-from": "vént d' $1",
"shared-repo": "on depot pårtaedjî",
+ "upload-disallowed-here": "Vos n' ploz nén språtchî ci fitchî ci.",
"filerevert": "Rimete come divant $1",
"filerevert-legend": "Rapexhî l' fitchî",
"filerevert-intro": "Vos estoz k' alez rapexhî l' fitchî <strong>[[Media:$1|$1]]</strong> al [$4 modêye do $3, a $2].",
"contributions": "Ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}}",
"contributions-title": "Djivêye des ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}} $1",
"mycontris": "Mi ovraedje",
+ "anoncontribs": "Mi ovraedje",
"contribsub2": "Po l' uzeu $1 ($2)",
"nocontribs": "Nou candjmint di trové ki corespondreut a ç' critere la.",
"uctop": "(dierinne)",
"feedback-message": "Messaedje",
"feedback-subject": "Sudjet",
"feedback-submit": "Evoyî",
- "searchsuggest-search": "Cweri",
+ "searchsuggest-search": "Cweri so {{SITENAME}}",
"searchsuggest-containing": "ki contént...",
"api-error-emptypage": "C' est nén permetou d' ahiver ene novele pådje et l' leyî vude.",
"api-error-stashfailed": "Aroke divintrinne : li sierveu a pierdou les dnêyes provizweres",
"lockmanager-fail-closelock": "无法关闭“$1”的锁文件。",
"lockmanager-fail-deletelock": "无法删除“$1”的锁文件。",
"lockmanager-fail-acquirelock": "无法为“$1”获取锁。",
- "lockmanager-fail-openlock": "无法打开“$1”的锁文件。",
+ "lockmanager-fail-openlock": "无法打开“$1”的锁定文件。请确保您的上传目录正确配置,并且您的web服务器有权限写入至那个目录。参见https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory获取更多信息。",
"lockmanager-fail-releaselock": "无法为“$1”释放锁。",
"lockmanager-fail-db-bucket": "不能在$1池中联系到足够锁数据库。",
"lockmanager-fail-db-release": "不能在数据库$1上释放锁。",
* @ingroup Benchmark
*/
+use Wikimedia\RunningStat;
+
// @codeCoverageIgnoreStart
require_once __DIR__ . '/../Maintenance.php';
// @codeCoverageIgnoreEnd
}
// Run benchmarks
- $times = [];
+ $stat = new RunningStat();
for ( $i = 0; $i < $count; $i++ ) {
$t = microtime( true );
call_user_func_array( $bench['function'], $bench['args'] );
if ( $verbose ) {
$this->verboseRun( $i );
}
- $times[] = $t;
- }
-
- // Collect metrics
- sort( $times, SORT_NUMERIC );
- $min = $times[0];
- $max = end( $times );
- if ( $count % 2 ) {
- $median = $times[ ( $count - 1 ) / 2 ];
- } else {
- $median = ( $times[$count / 2] + $times[$count / 2 - 1] ) / 2;
+ $stat->addObservation( $t );
}
- $total = array_sum( $times );
- $mean = $total / $count;
// Name defaults to name of called function
if ( is_string( $key ) ) {
$this->addResult( [
'name' => $name,
- 'count' => $count,
- 'total' => $total,
- 'min' => $min,
- 'median' => $median,
- 'mean' => $mean,
- 'max' => $max,
+ 'count' => $stat->getCount(),
+ // Get rate per second from mean (in ms)
+ 'rate' => 1.0 / ( $stat->getMean() / 1000.0 ),
+ 'total' => $stat->getMean() * $stat->getCount(),
+ 'mean' => $stat->getMean(),
+ 'max' => $stat->max,
+ 'stddev' => $stat->getStdDev(),
'usage' => [
'mem' => memory_get_usage( true ),
'mempeak' => memory_get_peak_usage( true ),
public function addResult( $res ) {
$ret = sprintf( "%s\n %' 6s: %d\n",
$res['name'],
- 'times',
+ 'count',
$res['count']
);
-
- foreach ( [ 'total', 'min', 'median', 'mean', 'max' ] as $metric ) {
- $ret .= sprintf( " %' 6s: %6.2fms\n",
+ $ret .= sprintf( " %' 6s: %8.1f/s\n",
+ 'rate',
+ $res['rate']
+ );
+ foreach ( [ 'total', 'mean', 'max', 'stddev' ] as $metric ) {
+ $ret .= sprintf( " %' 6s: %8.2fms\n",
$metric,
$res[$metric]
);
public function __construct() {
parent::__construct();
$this->addDescription( 'Benchmarks HashBagOStuff and MapCacheLRU.' );
- $this->addOption( 'construct', 'Run construct only', false, false );
- $this->addOption( 'fill', 'Run fill only', false, false );
+ $this->addOption( 'method', 'One of "construct" or "set". Default: [All]', false, true );
}
public function execute() {
// 1000 keys (1...500, 500...1)
$keys = array_merge( $exampleKeys, array_reverse( $exampleKeys ) );
- $fill = $this->hasOption( 'fill' ) || !$this->hasOption( 'construct' );
- $construct = $this->hasOption( 'construct' ) || !$this->hasOption( 'fill' );
+ $method = $this->getOption( 'method' );
$benches = [];
- if ( $construct ) {
- $benches['HashBagOStuff-construct'] = [
+ if ( !$method || $method === 'construct' ) {
+ $benches['HashBagOStuff::__construct'] = [
'function' => function () use ( $max ) {
$obj = new HashBagOStuff( [ 'maxKeys' => $max ] );
},
];
- $benches['MapCacheLRU-construct'] = [
+ $benches['MapCacheLRU::__construct'] = [
'function' => function () use ( $max ) {
$obj = new MapCacheLRU( $max );
},
];
}
- if ( $fill ) {
- // For the fill bechmark, ensure object creation is not measured.
+ if ( !$method || $method === 'set' ) {
+ // For the set bechmark, do object creation in setup (not measured)
$hObj = null;
- $benches['HashBagOStuff-fill'] = [
+ $benches['HashBagOStuff::set'] = [
'setup' => function () use ( &$hObj, $max ) {
$hObj = new HashBagOStuff( [ 'maxKeys' => $max ] );
},
}
];
$mObj = null;
- $benches['MapCacheLRU-fill'] = [
+ $benches['MapCacheLRU::set'] = [
'setup' => function () use ( &$mObj, $max ) {
$mObj = new MapCacheLRU( $max );
},
--- /dev/null
+<?php
+/**
+ * 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 Benchmark
+ */
+
+require_once __DIR__ . '/Benchmarker.php';
+
+/**
+ * Maintenance script that benchmarks Sanitizer methods.
+ *
+ * @ingroup Benchmark
+ */
+class BenchmarkSanitizer extends Benchmarker {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Benchmark for Sanitizer methods.' );
+ $this->addOption( 'method', 'One of "validateEmail", "encodeAttribute", '
+ . '"safeEncodeAttribute", "removeHTMLtags", or "stripAllTags". '
+ . 'Default: (All)', false, true );
+ }
+
+ public function execute() {
+ $textWithHtmlSm = 'Before <wrap><in>and</in> another <unclose> <in>word</in></wrap>.';
+ $textWithHtmlLg = str_repeat(
+ // 28K (28 chars * 1000)
+ wfRandomString( 3 ) . ' <tag>' . wfRandomString( 5 ) . '</tag> ' . wfRandomString( 7 ),
+ 1000
+ );
+
+ $method = $this->getOption( 'method' );
+ $benches = [];
+
+ if ( !$method || $method === 'validateEmail' ) {
+ $benches['Sanitizer::validateEmail (valid)'] = function () {
+ Sanitizer::validateEmail( 'user@example.org' );
+ };
+ $benches['Sanitizer::validateEmail (invalid)'] = function () {
+ Sanitizer::validateEmail( 'username@example! org' );
+ };
+ }
+ if ( !$method || $method === 'encodeAttribute' ) {
+ $benches['Sanitizer::encodeAttribute (simple)'] = function () {
+ Sanitizer::encodeAttribute( 'simple' );
+ };
+ $benches['Sanitizer::encodeAttribute (special)'] = function () {
+ Sanitizer::encodeAttribute( ":'\"\n https://example" );
+ };
+ }
+ if ( !$method || $method === 'safeEncodeAttribute' ) {
+ $benches['Sanitizer::safeEncodeAttribute (simple)'] = function () {
+ Sanitizer::safeEncodeAttribute( 'simple' );
+ };
+ $benches['Sanitizer::safeEncodeAttribute (special)'] = function () {
+ Sanitizer::safeEncodeAttribute( ":'\"\n https://example" );
+ };
+ }
+ if ( !$method || $method === 'removeHTMLtags' ) {
+ $sm = strlen( $textWithHtmlSm );
+ $lg = round( strlen( $textWithHtmlLg ) / 1000 ) . 'K';
+ $benches["Sanitizer::removeHTMLtags (input: $sm)"] = function () use ( $textWithHtmlSm ) {
+ Sanitizer::removeHTMLtags( $textWithHtmlSm );
+ };
+ $benches["Sanitizer::removeHTMLtags (input: $lg)"] = function () use ( $textWithHtmlLg ) {
+ Sanitizer::removeHTMLtags( $textWithHtmlLg );
+ };
+ }
+ if ( !$method || $method === 'stripAllTags' ) {
+ $sm = strlen( $textWithHtmlSm );
+ $lg = round( strlen( $textWithHtmlLg ) / 1000 ) . 'K';
+ $benches["Sanitizer::stripAllTags (input: $sm)"] = function () use ( $textWithHtmlSm ) {
+ Sanitizer::stripAllTags( $textWithHtmlSm );
+ };
+ $benches["Sanitizer::stripAllTags (input: $lg)"] = function () use ( $textWithHtmlLg ) {
+ Sanitizer::stripAllTags( $textWithHtmlLg );
+ };
+ }
+
+ $this->bench( $benches );
+ }
+}
+
+$maintClass = BenchmarkSanitizer::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
|| $title->getInterwiki()
|| !$title->canExist()
) {
- if ( $title->getInterwiki() || !$title->canExist() ) {
+ $titleImpossible = $title->getInterwiki() || !$title->canExist();
+ if ( $titleImpossible ) {
$prior = $title->getPrefixedDBkey();
} else {
$prior = $title->getDBkey();
$ns = 0;
}
- $clean = 'Broken/' . $prior;
+ if ( !$titleImpossible && !$title->exists() ) {
+ // Looks like the current title, after cleaning it up, is valid and available
+ $clean = $prior;
+ } else {
+ $clean = 'Broken/' . $prior;
+ }
$verified = Title::makeTitleSafe( $ns, $clean );
if ( !$verified || $verified->exists() ) {
$blah = "Broken/id:" . $row->page_id;
/**
* Special modules who have their own classes
*/
- 'startup' => [ 'class' => 'ResourceLoaderStartUpModule' ],
+ 'startup' => [ 'class' => ResourceLoaderStartUpModule::class ],
// Scripts managed by the local wiki (stored in the MediaWiki namespace)
- 'site' => [ 'class' => 'ResourceLoaderSiteModule' ],
- 'site.styles' => [ 'class' => 'ResourceLoaderSiteStylesModule' ],
+ 'site' => [ 'class' => ResourceLoaderSiteModule::class ],
+ 'site.styles' => [ 'class' => ResourceLoaderSiteStylesModule::class ],
'noscript' => [
- 'class' => 'ResourceLoaderWikiModule',
+ 'class' => ResourceLoaderWikiModule::class,
'styles' => [ 'MediaWiki:Noscript.css' ],
'group' => 'noscript',
],
'filepage' => [
- 'class' => 'ResourceLoaderWikiModule',
+ 'class' => ResourceLoaderWikiModule::class,
'styles' => [ 'MediaWiki:Filepage.css' ],
],
'user.groups' => [
],
// Scripts managed by the current user (stored in their user space)
- 'user' => [ 'class' => 'ResourceLoaderUserModule' ],
- 'user.styles' => [ 'class' => 'ResourceLoaderUserStylesModule' ],
+ 'user' => [ 'class' => ResourceLoaderUserModule::class ],
+ 'user.styles' => [ 'class' => ResourceLoaderUserStylesModule::class ],
// Populate mediawiki.user placeholders with information about the current user
- 'user.defaults' => [ 'class' => 'ResourceLoaderUserDefaultsModule' ],
- 'user.options' => [ 'class' => 'ResourceLoaderUserOptionsModule' ],
- 'user.tokens' => [ 'class' => 'ResourceLoaderUserTokensModule' ],
+ 'user.defaults' => [ 'class' => ResourceLoaderUserDefaultsModule::class ],
+ 'user.options' => [ 'class' => ResourceLoaderUserOptionsModule::class ],
+ 'user.tokens' => [ 'class' => ResourceLoaderUserTokensModule::class ],
// Scripts for the dynamic language specific data, like grammar forms.
- 'mediawiki.language.data' => [ 'class' => 'ResourceLoaderLanguageDataModule' ],
+ 'mediawiki.language.data' => [ 'class' => ResourceLoaderLanguageDataModule::class ],
/* MediaWiki base skinning modules */
],
// Used in the web installer. Test it after modifying this definition!
'mediawiki.skinning.interface' => [
- 'class' => 'ResourceLoaderSkinModule',
+ 'class' => ResourceLoaderSkinModule::class,
'styles' => [
'resources/src/mediawiki.skinning/elements.css' => [ 'media' => 'screen' ],
'resources/src/mediawiki.skinning/content.css' => [ 'media' => 'screen' ],
/* MediaWiki */
'mediawiki' => [
- 'class' => 'ResourceLoaderRawFileModule',
+ 'class' => ResourceLoaderRawFileModule::class,
// Keep in sync with maintenance/jsduck/eg-iframe.html
'scripts' => [
'resources/src/mediawiki/mediawiki.js',
],
'mediawiki.ForeignApi' => [
'targets' => [ 'desktop', 'mobile' ],
- 'class' => 'ResourceLoaderForeignApiModule',
+ 'class' => ResourceLoaderForeignApiModule::class,
// Additional dependencies generated dynamically
'dependencies' => 'mediawiki.ForeignApi.core',
],
]
],
'mediawiki.ForeignStructuredUpload.config' => [
- 'class' => 'ResourceLoaderUploadDialogModule',
+ 'class' => ResourceLoaderUploadDialogModule::class,
],
'mediawiki.ForeignStructuredUpload' => [
'scripts' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js',
]
],
'mediawiki.util' => [
- 'class' => 'ResourceLoaderMediaWikiUtilModule',
+ 'class' => ResourceLoaderMediaWikiUtilModule::class,
'scripts' => 'resources/src/mediawiki/mediawiki.util.js',
'dependencies' => [
'jquery.accessKeyLabel',
'targets' => [ 'desktop', 'mobile' ],
],
'mediawiki.toolbar' => [
- 'class' => 'ResourceLoaderEditToolbarModule',
+ 'class' => ResourceLoaderEditToolbarModule::class,
'scripts' => 'resources/src/mediawiki.toolbar/toolbar.js',
'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
'dependencies' => 'jquery.textSelection',
'postedit-confirmation-created',
'postedit-confirmation-restored',
'postedit-confirmation-saved',
+ 'postedit-confirmation-published',
],
],
'mediawiki.action.view.redirect' => [
'mediawiki.jqueryMsg' => [
// Add data for mediawiki.jqueryMsg, such as allowed tags
- 'class' => 'ResourceLoaderJqueryMsgModule',
+ 'class' => ResourceLoaderJqueryMsgModule::class,
'scripts' => 'resources/src/mediawiki/mediawiki.jqueryMsg.js',
'dependencies' => [
'mediawiki.util',
)
],
- 'mediawiki.language.names' => [ 'class' => 'ResourceLoaderLanguageNamesModule' ],
+ 'mediawiki.language.names' => [ 'class' => ResourceLoaderLanguageNamesModule::class ],
'mediawiki.language.specialCharacters' => [
- 'class' => 'ResourceLoaderSpecialCharacterDataModule'
+ 'class' => ResourceLoaderSpecialCharacterDataModule::class
],
/* MediaWiki Libs */
// The core JavaScript library.
'oojs-ui-core' => [
- 'class' => 'ResourceLoaderOOUIFileModule',
+ 'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => [
'resources/lib/oojs-ui/oojs-ui-core.js',
'resources/src/oojs-ui-local.js',
],
// This contains only the styles required by core widgets.
'oojs-ui-core.styles' => [
- 'class' => 'ResourceLoaderOOUIFileModule',
+ 'class' => ResourceLoaderOOUIFileModule::class,
'styles' => [
'resources/lib/oojs-ui/wikimedia-ui-base.less', // Providing Wikimedia UI LESS variables to all
'resources/src/oojs-ui-local.css', // HACK, see inside the file
],
// Additional widgets and layouts module.
'oojs-ui-widgets' => [
- 'class' => 'ResourceLoaderOOUIFileModule',
+ 'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => 'resources/lib/oojs-ui/oojs-ui-widgets.js',
'themeStyles' => 'widgets',
'dependencies' => [
],
// Toolbar and tools module.
'oojs-ui-toolbars' => [
- 'class' => 'ResourceLoaderOOUIFileModule',
+ 'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => 'resources/lib/oojs-ui/oojs-ui-toolbars.js',
'themeStyles' => 'toolbars',
'dependencies' => [
],
// Windows and dialogs module.
'oojs-ui-windows' => [
- 'class' => 'ResourceLoaderOOUIFileModule',
+ 'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => 'resources/lib/oojs-ui/oojs-ui-windows.js',
'themeStyles' => 'windows',
'dependencies' => [
],
'oojs-ui.styles.indicators' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'indicators',
],
'oojs-ui.styles.textures' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'textures',
],
'oojs-ui.styles.icons-accessibility' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-accessibility',
],
'oojs-ui.styles.icons-alerts' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-alerts',
],
'oojs-ui.styles.icons-content' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-content',
],
'oojs-ui.styles.icons-editing-advanced' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-advanced',
],
'oojs-ui.styles.icons-editing-core' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-core',
],
'oojs-ui.styles.icons-editing-list' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-list',
],
'oojs-ui.styles.icons-editing-styling' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-styling',
],
'oojs-ui.styles.icons-interactions' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-interactions',
],
'oojs-ui.styles.icons-layout' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-layout',
],
'oojs-ui.styles.icons-location' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-location',
],
'oojs-ui.styles.icons-media' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-media',
],
'oojs-ui.styles.icons-moderation' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-moderation',
],
'oojs-ui.styles.icons-movement' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-movement',
],
'oojs-ui.styles.icons-user' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-user',
],
'oojs-ui.styles.icons-wikimedia' => [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-wikimedia',
],
];
// Return [start, end] instead of just start
startAndEnd: false
}, options );
- // FIXME: We may not need character position-based functions if we insert markers in the right places
break;
case 'setSelection':
options = $.extend( {
if ( options.end === undefined ) {
options.end = options.start;
}
- // FIXME: We may not need character position-based functions if we insert markers in the right places
break;
case 'scrollToCaretPosition':
options = $.extend( {
data = data || {};
if ( data.message === undefined ) {
- data.message = $.parseHTML( mw.message( 'postedit-confirmation-saved', data.user || mw.user ).escaped() );
+ data.message = $.parseHTML( mw.message(
+ mw.config.get( 'wgEditSubmitButtonLabelPublish' ) ?
+ 'postedit-confirmation-published' :
+ 'postedit-confirmation-saved',
+ data.user || mw.user
+ ).escaped() );
}
$content = $( '<div>' ).addClass( 'postedit-icon postedit-icon-checkmark postedit-content' );
mw.hook( 'RcFilters.popup.open' ).fire();
- if ( !this.getMenu().getSelectedItem() ) {
+ if ( !this.getMenu().findSelectedItem() ) {
// If there are no selected items, scroll menu to top
// This has to be in a setTimeout so the menu has time
// to be positioned and fixed
*/
mw.rcfilters.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
var nextItem,
- currentItem = this.findHighlightedItem() || this.getSelectedItem();
+ currentItem = this.findHighlightedItem() || this.findSelectedItem();
// Call parent
mw.rcfilters.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );
padding: 0.5em;
}
+#mw-apisandbox-ui .mw-apisandbox-link {
+ display: none;
+}
+
.mw-apisandbox-popup .oo-ui-popupWidget-body > .oo-ui-widget {
vertical-align: middle;
}
this.feedbackPageTitle = config.title || new mw.Title( 'Feedback' );
this.messagePosterPromise = mw.messagePoster.factory.create( this.feedbackPageTitle, config.apiUrl );
+ this.foreignApi = config.apiUrl ? new mw.ForeignApi( config.apiUrl ) : null;
// Links
this.bugsTaskSubmissionLink = config.bugsLink || '//phabricator.wikimedia.org/maniphest/task/edit/form/1/';
* Respond to dialog submit event. If the information was
* submitted successfully, open a MessageDialog to thank the user.
*
- * @param {string} [status] A status of the end of operation
+ * @param {string} status A status of the end of operation
* of the main feedback dialog. Empty if the dialog was
* dismissed with no action or the user followed the button
* to the external task reporting site.
+ * @param {string} feedbackPageName
+ * @param {string} feedbackPageUrl
*/
- mw.Feedback.prototype.onDialogSubmit = function ( status ) {
+ mw.Feedback.prototype.onDialogSubmit = function ( status, feedbackPageName, feedbackPageUrl ) {
var dialogConfig;
if ( status !== 'submitted' ) {
title: mw.msg( 'feedback-thanks-title' ),
message: $( '<span>' ).msg(
'feedback-thanks',
- this.feedbackPageTitle.getNameText(),
+ feedbackPageName,
$( '<a>' ).attr( {
target: '_blank',
- href: this.feedbackPageTitle.getUrl()
+ href: feedbackPageUrl
} )
),
actions: [
this.constructor.static.dialog,
{
title: mw.msg( this.dialogTitleMessageKey ),
+ foreignApi: this.foreignApi,
settings: {
messagePosterPromise: this.messagePosterPromise,
title: this.feedbackPageTitle,
*/
mw.Feedback.Dialog.prototype.getSetupProcess = function ( data ) {
return mw.Feedback.Dialog.parent.prototype.getSetupProcess.call( this, data )
+ .next( function () {
+ // Get the URL of the target page, we want to use that in links in the intro
+ // and in the success dialog
+ var dialog = this;
+ if ( data.foreignApi ) {
+ return data.foreignApi.get( {
+ action: 'query',
+ prop: 'info',
+ inprop: 'url',
+ formatversion: 2,
+ titles: data.settings.title.getPrefixedText()
+ } ).then( function ( data ) {
+ dialog.feedbackPageUrl = OO.getProp( data, 'query', 'pages', 0, 'canonicalurl' );
+ } );
+ } else {
+ this.feedbackPageUrl = data.settings.title.getUrl();
+ }
+ }, this )
.next( function () {
var plainMsg, parsedMsg,
settings = data.settings;
this.setBugReportLink( settings.bugsTaskSubmissionLink );
this.feedbackPageTitle = settings.title;
this.feedbackPageName = settings.title.getNameText();
- this.feedbackPageUrl = settings.title.getUrl();
// Useragent checkbox
if ( settings.useragentCheckbox.show ) {
$this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
}
+ public function testTitlesWithWhitespaces() {
+ $data = $this->doApiRequest( [
+ 'action' => 'query',
+ 'titles' => ' '
+ ] );
+
+ $this->assertArrayHasKey( 'query', $data[0] );
+ $this->assertArrayHasKey( 'pages', $data[0]['query'] );
+ $this->assertEquals( 1, count( $data[0]['query']['pages'] ) );
+ $this->assertArrayHasKey( -1, $data[0]['query']['pages'] );
+ $this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
+ }
+
/**
* Test the ApiBase::titlePartToKey function
*
return false;
}
- function affectedRows() {
+ function fetchAffectedRowCount() {
return -1;
}
protected function doQuery( $sql ) {
}
+ protected function fetchAffectedRowCount() {
+ }
+
// From DatabaseMysqli
protected function mysqlConnect( $realServer ) {
}
'rows' => [ 'field' => 'text', 'field2' => 'text2' ],
],
"DELETE FROM replace_table " .
- "WHERE ( field='text' ); " .
+ "WHERE (field = 'text'); " .
"INSERT INTO replace_table " .
"(field,field2) " .
"VALUES ('text','text2')"
],
],
"DELETE FROM module_deps " .
- "WHERE ( md_module='module' AND md_skin='skin' ); " .
+ "WHERE (md_module = 'module' AND md_skin = 'skin'); " .
"INSERT INTO module_deps " .
"(md_module,md_skin,md_deps) " .
"VALUES ('module','skin','deps')"
],
],
"DELETE FROM module_deps " .
- "WHERE ( md_module='module' AND md_skin='skin' ); " .
+ "WHERE (md_module = 'module' AND md_skin = 'skin'); " .
"INSERT INTO module_deps " .
"(md_module,md_skin,md_deps) " .
"VALUES ('module','skin','deps'); " .
"DELETE FROM module_deps " .
- "WHERE ( md_module='module2' AND md_skin='skin2' ); " .
+ "WHERE (md_module = 'module2' AND md_skin = 'skin2'); " .
"INSERT INTO module_deps " .
"(md_module,md_skin,md_deps) " .
"VALUES ('module2','skin2','deps2')"
],
],
"DELETE FROM module_deps " .
- "WHERE ( md_module='module' ) OR ( md_skin='skin' ); " .
+ "WHERE (md_module = 'module') OR (md_skin = 'skin'); " .
"INSERT INTO module_deps " .
"(md_module,md_skin,md_deps) " .
"VALUES ('module','skin','deps'); " .
"DELETE FROM module_deps " .
- "WHERE ( md_module='module2' ) OR ( md_skin='skin2' ); " .
+ "WHERE (md_module = 'module2') OR (md_skin = 'skin2'); " .
"INSERT INTO module_deps " .
"(md_module,md_skin,md_deps) " .
"VALUES ('module2','skin2','deps2')"
*/
private function getMockDB( $methods = [] ) {
static $abstractMethods = [
- 'affectedRows',
+ 'fetchAffectedRowCount',
'closeConnection',
'dataSeek',
'doQuery',
namespace MediaWiki\Session;
+use Config;
use MediaWikiTestCase;
use User;
use Wikimedia\TestingAccessWrapper;
class SessionBackendTest extends MediaWikiTestCase {
const SESSIONID = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
+ /** @var SessionManager */
protected $manager;
+
+ /** @var Config */
protected $config;
+
+ /** @var SessionProvider */
protected $provider;
+
+ /** @var TestBagOStuff */
protected $store;
protected $onSessionMetadataCalled = false;
* Returns a non-persistent backend that thinks it has at least one session active
* @param User|null $user
* @param string $id
+ * @return SessionBackend
*/
protected function getBackend( User $user = null, $id = null ) {
if ( !$this->config ) {
$this->assertSame( $info->forceHTTPS(), $backend->shouldForceHTTPS() );
$expire = time() + 100;
- $this->store->setSessionMeta( self::SESSIONID, [ 'expires' => $expire ], 2 );
+ $this->store->setSessionMeta( self::SESSIONID, [ 'expires' => $expire ] );
$info = new SessionInfo( SessionInfo::MIN_PRIORITY, [
'provider' => $this->provider,
*/
class SessionManagerTest extends MediaWikiTestCase {
- protected $config, $logger, $store;
+ /** @var \HashConfig */
+ private $config;
+
+ /** @var \TestLogger */
+ private $logger;
+
+ /** @var TestBagOStuff */
+ private $store;
protected function getManager() {
\ObjectCache::$instances['testSessionStore'] = new TestBagOStuff();
/**
* @param string $id Session ID
* @param array $data Session data
- * @param int $expiry
- * @param User $user User for metadata
*/
- public function setSessionData( $id, array $data, $expiry = 0, User $user = null ) {
- $this->setSession( $id, [ 'data' => $data ], $expiry, $user );
+ public function setSessionData( $id, array $data ) {
+ $this->setSession( $id, [ 'data' => $data ] );
}
/**
* @param string $id Session ID
* @param array $metadata Session metadata
- * @param int $expiry
*/
- public function setSessionMeta( $id, array $metadata, $expiry = 0 ) {
- $this->setSession( $id, [ 'metadata' => $metadata ], $expiry );
+ public function setSessionMeta( $id, array $metadata ) {
+ $this->setSession( $id, [ 'metadata' => $metadata ] );
}
/**
* @param string $id Session ID
* @param array $blob Session metadata and data
- * @param int $expiry
- * @param User $user User for metadata
*/
- public function setSession( $id, array $blob, $expiry = 0, User $user = null ) {
+ public function setSession( $id, array $blob ) {
$blob += [
'data' => [],
'metadata' => [],
];
$blob['metadata'] += [
- 'userId' => $user ? $user->getId() : 0,
- 'userName' => $user ? $user->getName() : null,
- 'userToken' => $user ? $user->getToken( true ) : null,
+ 'userId' => 0,
+ 'userName' => null,
+ 'userToken' => null,
'provider' => 'DummySessionProvider',
];
- $this->setRawSession( $id, $blob, $expiry, $user );
+ $this->setRawSession( $id, $blob );
}
/**
* @param string $id Session ID
* @param array|mixed $blob Session metadata and data
- * @param int $expiry
*/
- public function setRawSession( $id, $blob, $expiry = 0 ) {
- if ( $expiry <= 0 ) {
- $expiry = \RequestContext::getMain()->getConfig()->get( 'ObjectCacheSessionExpiry' );
- }
-
+ public function setRawSession( $id, $blob ) {
+ $expiry = \RequestContext::getMain()->getConfig()->get( 'ObjectCacheSessionExpiry' );
$this->set( $this->makeKey( 'MWSession', $id ), $blob, $expiry );
}