From: jenkins-bot Date: Tue, 13 Feb 2018 18:22:32 +0000 (+0000) Subject: Merge "Add SPARQL client to core" X-Git-Tag: 1.31.0-rc.0~617 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=ee56f00ddf0609082f8ae9a4dc3e6e1b6f54ddfd;hp=7b27f210ba493283a635b1cc72edc173de05044f Merge "Add SPARQL client to core" --- diff --git a/.mailmap b/.mailmap index c101be35c1..08e1aaa15f 100644 --- a/.mailmap +++ b/.mailmap @@ -167,6 +167,7 @@ Gabriel Wicke Gabriel Wicke Gabriel Wicke Geoffrey Mon +Geoffrey Trang Gergő Tisza Gergő Tisza Giftpflanze @@ -196,7 +197,7 @@ Jack Phoenix Jackmcbarn Jackmcbarn jagori -James Forrester +James D. Forrester Jaime Crespo Jan Gerber Jan Luca Naumann @@ -278,6 +279,7 @@ Matt Johnston Matthew Britton Matthew Flaschen Matthew Walker +MatthiasDD Matthias Mullie Matthias Mullie Matěj Grabovský @@ -330,6 +332,7 @@ Philip Tzou physikerwelt (Moritz Schubotz) PiRSquared17 Platonides +pppery PranavK Prateek Saxena Prateek Saxena @@ -451,6 +454,7 @@ Victor Vasiliev Victor Vasiliev Vikas S Yaligar Vivek Ghaisas +Volker E wctaiwan withoutaname X! diff --git a/CREDITS b/CREDITS index ea011e8701..95d6a6cfa6 100644 --- a/CREDITS +++ b/CREDITS @@ -1,5 +1,5 @@ {{int:version-credits-summary}} * Alex Z. * Alexander I. Mashin * Alexander Lehmann +* Alexander Mashin * Alexander Monk * Alexander Sigachov * Alexandre Emsenhuber @@ -62,6 +63,7 @@ The following list can be found parsed under Special:Version/Credits --> * Angela Beesley Starling * ankur * Antoine Musso +* Antoni Siek * Antonio Ospite * apexkid * April King @@ -134,6 +136,7 @@ The following list can be found parsed under Special:Version/Credits --> * Cindy Cicalese * ckoerner * Conrad Irwin +* Cormac Parle * cryptocoryne * Dan Barrett * Dan Collins @@ -156,6 +159,7 @@ The following list can be found parsed under Special:Version/Credits --> * Darkdragon09 * DaSch * datguy +* David Barratt * David Baumgarten * David Causse * David Chan @@ -163,6 +167,8 @@ The following list can be found parsed under Special:Version/Credits --> * David Lynch * David McCabe * David Mudrák +* David Sn +* Dayllan Maza * dcausse * dennisroczek * Denny Vrandecic @@ -170,10 +176,12 @@ The following list can be found parsed under Special:Version/Credits --> * Derk-Jan Hartman * Derric Atzrott * Derrick Coetzee +* Deskana * Dévai Tamás * Devi Krishnan * Diederik van Liere * divadsn +* Dmaza * Domas Mituzas * Douglas Gardner * DPStokesNZ @@ -183,6 +191,7 @@ The following list can be found parsed under Special:Version/Credits --> * Eddie Greiner-Petter * Edward Chernenko * Edward Z. Yang +* Egbe Eugene * Elisabeth Bauer * Elliott Eggleston * Elvis Stansvik @@ -194,6 +203,7 @@ The following list can be found parsed under Special:Version/Credits --> * Emufarmers * enigmaeth * Entlinkt +* Envel Le Hir * Eranroz * Eric Evans * Eric Schneider @@ -209,10 +219,13 @@ The following list can be found parsed under Special:Version/Credits --> * ExplosiveHippo * Faidon Liambotis * Federico Leva +* Felipe L. Ewald * Fenzik Joseph +* Filippo Giunchedi * firebus * Florian Schmidt * fomafix +* Framawiki * Fran Rogers * Fred Emmott * FunPika @@ -220,6 +233,7 @@ The following list can be found parsed under Special:Version/Credits --> * Gary Guo * gbt248 * Geoffrey Mon +* GeoffreyT2000 * georggi * Gergő Tisza * Gero Scholz @@ -231,6 +245,7 @@ The following list can be found parsed under Special:Version/Credits --> * Giuseppe Lavagetto * gladoscc * glaisher +* golopot * Greg Maxwell * Greg Sabino Mullane * Gregory Szorc @@ -246,9 +261,11 @@ The following list can be found parsed under Special:Version/Credits --> * Helder * Henning Snater * Hojjat +* Hoto Cocoa * Huji * Hydriz * Ian Baker +* Ian Marlier * Ilmari Karonen * Inez Korczyński * IoannisKydonis @@ -264,7 +281,7 @@ The following list can be found parsed under Special:Version/Credits --> * Jaime Crespo * Jakub Vrana * James Earl Douglas -* James Forrester +* James D. Forrester * Jan Berkel * Jan Drewniak * Jan Gerber @@ -277,6 +294,7 @@ The following list can be found parsed under Special:Version/Credits --> * jarry1250 * Jaska Zedlik * Jason Richey +* Jayprakash12345 * jeblad * Jeff Hobson * Jeff Janes @@ -291,6 +309,7 @@ The following list can be found parsed under Special:Version/Credits --> * Jerome Jamnicky * Jesús Martínez Novo * jhobs +* jhsoby * Jiabao * Jidanni * Jimmy Collins @@ -307,11 +326,13 @@ The following list can be found parsed under Special:Version/Credits --> * 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 @@ -321,6 +342,7 @@ The following list can be found parsed under Special:Version/Credits --> * Kartik Mistry * Karun Dambiec * Katie Filbert +* KeerthanaS * Kevin Israel * Kghbln * Kim Eik @@ -372,6 +394,7 @@ The following list can be found parsed under Special:Version/Credits --> * madurangasiriwardena * Magnus Manske * mainframe98 +* Mako Bates * Manuel Menal * Manuel Schneider * Marc Ordinas i Llopis @@ -381,6 +404,7 @@ The following list can be found parsed under Special:Version/Credits --> * Marco Schuster * MarcoAurelio * Marcus Buck +* Margaret Epps * Marius Hoch * Mark Bergsma * Mark Clements @@ -410,6 +434,7 @@ The following list can be found parsed under Special:Version/Credits --> * Max Semenik * Max Sikström * mayankmadan +* Mehmet Mert Yıldıran * Meno25 * merl * Merlijn S. van Deen @@ -473,6 +498,7 @@ The following list can be found parsed under Special:Version/Credits --> * nullspoon * Nuria Ruiz * Nx.devnull +* Obaid Raza * Ocean behind ears * Od1n * Olaf Lenz @@ -496,6 +522,7 @@ The following list can be found parsed under Special:Version/Credits --> * Pavel Selitskas * Pcoombe * Perside Rosalie +* petarpetkovic * Peter Coombe * Peter Gehres * Peter Hedenskog @@ -509,6 +536,7 @@ The following list can be found parsed under Special:Version/Credits --> * physikerwelt (Moritz Schubotz) * PieRRoMaN * Pikne +* Piotr Miazga * PiRSquared17 * Platonides * Pmlineditor @@ -529,6 +557,7 @@ The following list can be found parsed under Special:Version/Credits --> * rahul21 * Raimond Spekking * Ramunas Geciauskas +* RazeSoldier * Remember the dot * René Kijewski * Reza @@ -564,6 +593,7 @@ The following list can be found parsed under Special:Version/Credits --> * Ryan Kaldari * Ryan Lane * Ryan Schmidt +* ryan10145 * S Page * Salvatore Ingala * Sam Reed @@ -583,6 +613,7 @@ The following list can be found parsed under Special:Version/Credits --> * Sébastien Santoro * Sergio Santoro * Sethakill +* Sfic * Shahyar * Shane Gibbons * Shane King @@ -591,6 +622,7 @@ The following list can be found parsed under Special:Version/Credits --> * shirayuki * Sidhant Gupta * Siebrand Mazeland +* Simeon Dahl * Simon Walker * Smriti Singh * Solitarius @@ -614,6 +646,7 @@ The following list can be found parsed under Special:Version/Credits --> * Subin Siby * Subramanya Sastry * Sumit Asthana +* Suriyaa Kudo * svip * Szymon Świerkosz * T.D. Corell @@ -663,12 +696,14 @@ The following list can be found parsed under Special:Version/Credits --> * UltrasonicNXT * Umherirrender * utkarsh95 +* Valerio Bozzolan * Van de Bugger * Viačeslav * Victor Barbu * Victor Porton * Victor Vasiliev * Ville Stadista +* vinithegit * vishnu * Vitaliy Filippov * Vivek Ghaisas @@ -700,6 +735,7 @@ The following list can be found parsed under Special:Version/Credits --> * Zhaofeng Li * Zhengzhu Feng * Zhuyifei1999 +* zoranzoki21 * Zppix * محمد شعیب diff --git a/RELEASE-NOTES-1.31 b/RELEASE-NOTES-1.31 index 5e14aeed83..cc08b33e84 100644 --- a/RELEASE-NOTES-1.31 +++ b/RELEASE-NOTES-1.31 @@ -24,6 +24,8 @@ production. * $wgFragmentMode is now set to [ 'legacy', 'html5' ] by default. This is a first step of migration to human-readable section IDs that will later result in 'html5' being the default mode. +* CACHE_ACCEL now only supports APC(u) or WinCache. XCache support was removed + as upstream is inactive and has no plans to move to PHP 7. === New features in 1.31 === * Wikimedia\Rdbms\IDatabase->select() and similar methods now support @@ -42,24 +44,29 @@ production. the ParserOutput::getText() post-cache transformations. * Added a hook, UploadForm:getInitialPageText, to allow extensions to alter the initial page text for file uploads. -* (T181651) The info page for File pages now displays the file's base-36 SHA1 +* (T181651) The info page for File pages now displays the file's base-16 SHA1 hash value in the table of basic information. +* Style tags with a 'data-mw-deduplicate' attribute will be deduplicated as a + ParserOutput::getText() post-cache transformation. This may be disabled by + passing 'deduplicateStyles' => false to that method. === External library changes in 1.31 === ==== Upgraded external libraries ==== * Updated jquery.chosen from v0.9.14 to v1.8.2. * Updated composer/spdx-licenses from 1.1.4 to - 1.2.0 (development dependency). + 1.3.0 (development dependency). * Updated nikic/php-parser from 2.1.0 to 3.1.3 (development dependency). * Updated wikimedia/ip-set from 1.1.0 to 1.2.0. * Updated wikimedia/relpath from 2.0.0 to 2.1.1. * Updated wikimedia/running-stat from 1.1.0 to 1.2.0. * Updated wikimedia/wrappedstring from 2.2.0 to 2.3.0. +* Updated mediawiki/at-ease from 1.1.0 to 1.2.0. * … ==== New external libraries ==== +* Added wikimedia/object-factory 1.0.0 * … ==== Removed and replaced external libraries ==== @@ -90,6 +97,9 @@ changes to languages because of Phabricator reports. * (T180052) Mirandese (mwl) now supports gendered NS_USER/NS_USER_TALK namespaces. * (T182305) New language support: Nyungar (nys). +* (T186359) New language support: Siberian Tatar [cебертатар] (sty). +* (T186635) New language support: Guianan Creole (gcr). +* (T186647) New language support: Kumyk [къумукъ] (kum). === Other changes in 1.31 === * Introducing multi-content-revision capability into the storage layer. For details, @@ -186,6 +196,43 @@ changes to languages because of Phabricator reports. * The driver 'mysql' for MySQL, deprecated in MediaWiki 1.30, has been removed. The driver has been deprecated since PHP 5.5 and was removed in PHP 7.0. The default driver for MySQL has been 'mysqli' since MediaWiki 1.22. +* The following properties of PreparedEdit were deprecated in 1.21 and have been removed: + * PreparedEdit->newText + * PreparedEdit->oldText + * PreparedEdit->pst +* QuickTemplate::setRef() was deprecated in favour of QuickTemplate::set(). + Setting template variables by reference allowed violating the principle of data being + immutable once added to the skin template. In practice, this method was not being + used for that. Rather, setRef() existed as memory optimisation for PHP 4. +* QuickTemplate::setTranslator() was deprecated in favour of Skin::msg() parameters. +* MediaWikiI18N::set() was deprecated in favour of Skin::msg() parameters. +* MediaWikiI18N::translate() was deprecated in favour of Skin::msg() or wfMessage(). +* Passing false to ParserOptions::setWrapOutputClass() is deprecated. Use the + 'unwrap' transform to ParserOutput::getText() instead. +* ParserOutput objects generated using a non-default value for + ParserOptions::setWrapOutputClass() can no longer be added to the parser + cache. +* The following deprecated methods from the OutputPage class have been removed: + * OutputPage::addExtensionStyle(); deprecated in 1.27 + * OutputPage::getExtStyle(); deprecated in 1.27 + * OutputPage::setETag(); deprecated in 1.28 (obsolete no-op) + * OutputPage::setSquidMaxage(); deprecated in 1.27 + * OutputPage::readOnlyPage(); deprecated in 1.25 + * OutputPage::rateLimited(); deprecated in 1.25 + * Additionally, the protected OutputPage::$mExtStyles array, only accessed through + the above and with no known uses, was removed. +* The no-op method Skin::showIPinHeader(), deprecated in 1.27, was removed. +* \ObjectFactory (no namespace) is deprecated, the namespaced \Wikimedia\ObjectFactory + from the wikimedia/object-factory library should be used instead. +* CommentStore::newKey is deprecated. Get an instance from MediaWikiServices instead. +* The following CommentStore methods have had their signatures changed to introduce a $key parameter, + usage of the methods on instances retrieved from CommentStore::newKey will remain unchanged but deprecated: + * CommentStore::getFields + * CommentStore::getJoin + * CommentStore::getComment + * CommentStore::getCommentLegacy + * CommentStore::insert + * CommentStore::insertWithTemplate == Compatibility == MediaWiki 1.31 requires PHP 5.5.9 or later. Although HHVM 3.18.5 or later is supported, diff --git a/autoload.php b/autoload.php index 7f1a47f497..fc77fcb91c 100644 --- a/autoload.php +++ b/autoload.php @@ -197,6 +197,7 @@ $wgAutoloadLocalClasses = [ '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', @@ -1071,7 +1072,7 @@ $wgAutoloadLocalClasses = [ 'ORAField' => __DIR__ . '/includes/db/ORAField.php', 'ORAResult' => __DIR__ . '/includes/db/ORAResult.php', 'ObjectCache' => __DIR__ . '/includes/objectcache/ObjectCache.php', - 'ObjectFactory' => __DIR__ . '/includes/libs/ObjectFactory.php', + 'ObjectFactory' => __DIR__ . '/includes/compat/ObjectFactory.php', 'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php', 'OldLocalFile' => __DIR__ . '/includes/filerepo/file/OldLocalFile.php', 'OracleInstaller' => __DIR__ . '/includes/installer/OracleInstaller.php', @@ -1362,7 +1363,7 @@ $wgAutoloadLocalClasses = [ 'SiteLookup' => __DIR__ . '/includes/site/SiteLookup.php', 'SiteSQLStore' => __DIR__ . '/includes/site/SiteSQLStore.php', 'SiteStats' => __DIR__ . '/includes/SiteStats.php', - 'SiteStatsInit' => __DIR__ . '/includes/SiteStats.php', + 'SiteStatsInit' => __DIR__ . '/includes/SiteStatsInit.php', 'SiteStatsUpdate' => __DIR__ . '/includes/deferred/SiteStatsUpdate.php', 'SiteStore' => __DIR__ . '/includes/site/SiteStore.php', 'SitesCacheFileBuilder' => __DIR__ . '/includes/site/SitesCacheFileBuilder.php', @@ -1721,7 +1722,6 @@ $wgAutoloadLocalClasses = [ 'WordLevelDiff' => __DIR__ . '/includes/diff/WordLevelDiff.php', 'WrapOldPasswords' => __DIR__ . '/maintenance/wrapOldPasswords.php', 'XCFHandler' => __DIR__ . '/includes/media/XCF.php', - 'XCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/XCacheBagOStuff.php', 'XMLRCFeedFormatter' => __DIR__ . '/includes/rcfeed/XMLRCFeedFormatter.php', 'XMPInfo' => __DIR__ . '/includes/libs/xmp/XMPInfo.php', 'XMPReader' => __DIR__ . '/includes/libs/xmp/XMP.php', diff --git a/composer.json b/composer.json index 4596c4c05b..c3ff8d6659 100644 --- a/composer.json +++ b/composer.json @@ -24,8 +24,8 @@ "ext-mbstring": "*", "ext-xml": "*", "liuggio/statsd-php-client": "1.0.18", - "mediawiki/at-ease": "1.1.0", - "oojs/oojs-ui": "0.25.1", + "mediawiki/at-ease": "1.2.0", + "oojs/oojs-ui": "0.25.2", "oyejorge/less.php": "1.7.0.14", "php": ">=5.5.9", "psr/log": "1.0.2", @@ -36,6 +36,7 @@ "wikimedia/composer-merge-plugin": "1.4.1", "wikimedia/html-formatter": "1.0.1", "wikimedia/ip-set": "1.2.0", + "wikimedia/object-factory": "1.0.0", "wikimedia/php-session-serializer": "1.0.4", "wikimedia/purtle": "1.0.6", "wikimedia/relpath": "2.1.1", @@ -49,7 +50,7 @@ "zordius/lightncandy": "0.23" }, "require-dev": { - "composer/spdx-licenses": "1.2.0", + "composer/spdx-licenses": "1.3.0", "hamcrest/hamcrest-php": "^2.0", "jakub-onderka/php-parallel-lint": "0.9.2", "jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a", diff --git a/docs/distributors.txt b/docs/distributors.txt index f19574c06c..758111009f 100644 --- a/docs/distributors.txt +++ b/docs/distributors.txt @@ -162,14 +162,14 @@ There are several other pieces of software that MediaWiki can make good use of. Distributors might choose to install these automatically with MediaWiki and perhaps configure it to use them (see Configuration section of this document): - * APC (Alternative PHP Cache), XCache, or similar: Will greatly speed up the + * APC (Alternative PHP Cache) or similar: Will greatly speed up the execution of MediaWiki, and all other PHP applications, at some cost in memory usage. Will be used automatically for the most part. * clamav: Can be used for virus scanning of uploaded files. Enable with "$wgAntivirus = 'clamav';". * DjVuLibre: Allows processing of DjVu files. To enable this, set "$wgDjvuDump = 'djvudump'; $wgDjvuRenderer = 'ddjvu'; $wgDjvuTxt = 'djvutxt';". - * HTML Tidy: Fixes errors in HTML at runtime. Can be enabled with + * HTML Tidy: Fixes errors in HTML at runtime. Can be enabled with "$wgUseTidy = true;". * ImageMagick: For resizing images. "$wgUseImageMagick = true;" will enable it. PHP's GD can also be used, but ImageMagick is preferable. diff --git a/docs/extension.schema.v2.json b/docs/extension.schema.v2.json index 51f9417d30..e13129bb56 100644 --- a/docs/extension.schema.v2.json +++ b/docs/extension.schema.v2.json @@ -669,7 +669,7 @@ }, "SkinOOUIThemes": { "type": "object", - "description": "Map of skin names to OOjs UI themes to use. Same format as ResourceLoaderOOUIModule::$builtinSkinThemeMap." + "description": "Map of skin names to OOUI themes to use. Same format as ResourceLoaderOOUIModule::$builtinSkinThemeMap." }, "PasswordPolicy": { "type": "object", diff --git a/docs/hooks.txt b/docs/hooks.txt index d497884236..7084b51d56 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -1666,6 +1666,13 @@ $query: query options passed to Title::getInternalURL() 'GetIP': modify the ip of the current user (called only once). &$ip: string holding the ip as determined so far +'GetLangPreferredVariant': Called in LanguageConverter#getPreferredVariant() to + allow fetching the language variant code from cookies or other such + alternative storage. +&$req: language variant from the URL (string) or boolean false if no variant + was specified in the URL; the value of this variable comes from + LanguageConverter#getURLVariant() + 'GetLinkColours': modify the CSS class of an array of page links. $linkcolour_ids: array of prefixed DB keys of the pages linked to, indexed by page_id. diff --git a/includes/Block.php b/includes/Block.php index 0999ad2063..bdc6702f91 100644 --- a/includes/Block.php +++ b/includes/Block.php @@ -222,7 +222,7 @@ class Block { 'ipb_block_email', 'ipb_allow_usertalk', 'ipb_parent_block_id', - ] + CommentStore::newKey( 'ipb_reason' )->getFields(); + ] + CommentStore::getStore()->getFields( 'ipb_reason' ); } /** @@ -235,7 +235,7 @@ class Block { * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` */ public static function getQueryInfo() { - $commentQuery = CommentStore::newKey( 'ipb_reason' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'ipb_reason' ); return [ 'tables' => [ 'ipblocks' ] + $commentQuery['tables'], 'fields' => [ @@ -460,9 +460,9 @@ class Block { // I wish I didn't have to do this $db = wfGetDB( DB_REPLICA ); $this->mExpiry = $db->decodeExpiry( $row->ipb_expiry ); - $this->mReason = CommentStore::newKey( 'ipb_reason' ) + $this->mReason = CommentStore::getStore() // Legacy because $row may have come from self::selectFields() - ->getCommentLegacy( $db, $row )->text; + ->getCommentLegacy( $db, 'ipb_reason', $row )->text; $this->isHardblock( !$row->ipb_anon_only ); $this->isAutoblocking( $row->ipb_enable_autoblock ); @@ -654,7 +654,7 @@ class Block { 'ipb_block_email' => $this->prevents( 'sendemail' ), 'ipb_allow_usertalk' => !$this->prevents( 'editownusertalk' ), 'ipb_parent_block_id' => $this->mParentBlockId - ] + CommentStore::newKey( 'ipb_reason' )->insert( $dbw, $this->mReason ); + ] + CommentStore::getStore()->insert( $dbw, 'ipb_reason', $this->mReason ); return $a; } @@ -670,7 +670,7 @@ class Block { 'ipb_create_account' => $this->prevents( 'createaccount' ), 'ipb_deleted' => (int)$this->mHideName, // typecast required for SQLite 'ipb_allow_usertalk' => !$this->prevents( 'editownusertalk' ), - ] + CommentStore::newKey( 'ipb_reason' )->insert( $dbw, $this->mReason ); + ] + CommentStore::getStore()->insert( $dbw, 'ipb_reason', $this->mReason ); } /** diff --git a/includes/CommentStore.php b/includes/CommentStore.php index 0d679d37db..8447b2c797 100644 --- a/includes/CommentStore.php +++ b/includes/CommentStore.php @@ -20,6 +20,7 @@ * @file */ +use MediaWiki\MediaWikiServices; use Wikimedia\Rdbms\IDatabase; /** @@ -79,40 +80,71 @@ class CommentStore { */ protected static $formerTempTables = []; - /** @var string */ - protected $key; + /** + * @since 1.30 + * @deprecated in 1.31 + * @var string|null + */ + protected $key = null; /** @var int One of the MIGRATION_* constants */ protected $stage; - /** @var array|null Cache for `self::getJoin()` */ - protected $joinCache = null; + /** @var array[] Cache for `self::getJoin()` */ + protected $joinCache = []; /** @var Language Language to use for comment truncation */ protected $lang; /** - * @param string $key A key such as "rev_comment" identifying the comment - * field being fetched. * @param Language $lang Language to use for comment truncation. Defaults * to $wgContLang. + * @param int $migrationStage One of the MIGRATION_* constants */ - public function __construct( $key, Language $lang = null ) { - global $wgCommentTableSchemaMigrationStage, $wgContLang; - - $this->key = $key; - $this->stage = $wgCommentTableSchemaMigrationStage; - $this->lang = $lang ?: $wgContLang; + public function __construct( Language $lang, $migrationStage ) { + $this->stage = $migrationStage; + $this->lang = $lang; } /** * Static constructor for easier chaining + * @deprecated in 1.31 Should not be constructed with a $key, use CommentStore::getStore * @param string $key A key such as "rev_comment" identifying the comment * field being fetched. * @return CommentStore */ public static function newKey( $key ) { - return new CommentStore( $key ); + global $wgCommentTableSchemaMigrationStage, $wgContLang; + // TODO uncomment once not used in extensions + // wfDeprecated( __METHOD__, '1.31' ); + $store = new CommentStore( $wgContLang, $wgCommentTableSchemaMigrationStage ); + $store->key = $key; + return $store; + } + + /** + * @since 1.31 + * @deprecated in 1.31 Use DI to inject a CommentStore instance into your class. + * @return CommentStore + */ + public static function getStore() { + return MediaWikiServices::getInstance()->getCommentStore(); + } + + /** + * Compat method allowing use of self::newKey until removed. + * @param string|null $methodKey + * @throw InvalidArgumentException + * @return string + */ + private function getKey( $methodKey = null ) { + $key = $this->key !== null ? $this->key : $methodKey; + if ( $key === null ) { + // @codeCoverageIgnoreStart + throw new InvalidArgumentException( '$key should not be null' ); + // @codeCoverageIgnoreEnd + } + return $key; } /** @@ -123,23 +155,29 @@ class CommentStore { * * @note Use of this method may require a subsequent database query to * actually fetch the comment. If possible, use `self::getJoin()` instead. + * + * @since 1.30 + * @since 1.31 Method signature changed, $key parameter added (with deprecated back compat) + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @return string[] to include in the `$vars` to `IDatabase->select()`. All * fields are aliased, so `+` is safe to use. */ - public function getFields() { + public function getFields( $key = null ) { + $key = $this->getKey( $key ); $fields = []; if ( $this->stage === MIGRATION_OLD ) { - $fields["{$this->key}_text"] = $this->key; - $fields["{$this->key}_data"] = 'NULL'; - $fields["{$this->key}_cid"] = 'NULL'; + $fields["{$key}_text"] = $key; + $fields["{$key}_data"] = 'NULL'; + $fields["{$key}_cid"] = 'NULL'; } else { if ( $this->stage < MIGRATION_NEW ) { - $fields["{$this->key}_old"] = $this->key; + $fields["{$key}_old"] = $key; } - if ( isset( self::$tempTables[$this->key] ) ) { - $fields["{$this->key}_pk"] = self::$tempTables[$this->key]['joinPK']; + if ( isset( self::$tempTables[$key] ) ) { + $fields["{$key}_pk"] = self::$tempTables[$key]['joinPK']; } else { - $fields["{$this->key}_id"] = "{$this->key}_id"; + $fields["{$key}_id"] = "{$key}_id"; } } return $fields; @@ -151,56 +189,61 @@ class CommentStore { * Each resulting row should be passed to `self::getComment()` to get the * actual comment. * + * @since 1.30 + * @since 1.31 Method signature changed, $key parameter added (with deprecated back compat) + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @return array With three keys: * - tables: (string[]) to include in the `$table` to `IDatabase->select()` * - fields: (string[]) to include in the `$vars` to `IDatabase->select()` * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` * All tables, fields, and joins are aliased, so `+` is safe to use. */ - public function getJoin() { - if ( $this->joinCache === null ) { + public function getJoin( $key = null ) { + $key = $this->getKey( $key ); + if ( !array_key_exists( $key, $this->joinCache ) ) { $tables = []; $fields = []; $joins = []; if ( $this->stage === MIGRATION_OLD ) { - $fields["{$this->key}_text"] = $this->key; - $fields["{$this->key}_data"] = 'NULL'; - $fields["{$this->key}_cid"] = 'NULL'; + $fields["{$key}_text"] = $key; + $fields["{$key}_data"] = 'NULL'; + $fields["{$key}_cid"] = 'NULL'; } else { $join = $this->stage === MIGRATION_NEW ? 'JOIN' : 'LEFT JOIN'; - if ( isset( self::$tempTables[$this->key] ) ) { - $t = self::$tempTables[$this->key]; - $alias = "temp_$this->key"; + if ( isset( self::$tempTables[$key] ) ) { + $t = self::$tempTables[$key]; + $alias = "temp_$key"; $tables[$alias] = $t['table']; $joins[$alias] = [ $join, "{$alias}.{$t['pk']} = {$t['joinPK']}" ]; $joinField = "{$alias}.{$t['field']}"; } else { - $joinField = "{$this->key}_id"; + $joinField = "{$key}_id"; } - $alias = "comment_$this->key"; + $alias = "comment_$key"; $tables[$alias] = 'comment'; $joins[$alias] = [ $join, "{$alias}.comment_id = {$joinField}" ]; if ( $this->stage === MIGRATION_NEW ) { - $fields["{$this->key}_text"] = "{$alias}.comment_text"; + $fields["{$key}_text"] = "{$alias}.comment_text"; } else { - $fields["{$this->key}_text"] = "COALESCE( {$alias}.comment_text, $this->key )"; + $fields["{$key}_text"] = "COALESCE( {$alias}.comment_text, $key )"; } - $fields["{$this->key}_data"] = "{$alias}.comment_data"; - $fields["{$this->key}_cid"] = "{$alias}.comment_id"; + $fields["{$key}_data"] = "{$alias}.comment_data"; + $fields["{$key}_cid"] = "{$alias}.comment_id"; } - $this->joinCache = [ + $this->joinCache[$key] = [ 'tables' => $tables, 'fields' => $fields, 'joins' => $joins, ]; } - return $this->joinCache; + return $this->joinCache[$key]; } /** @@ -209,12 +252,13 @@ class CommentStore { * Shared implementation for getComment() and getCommentLegacy() * * @param IDatabase|null $db Database handle for getCommentLegacy(), or null for getComment() + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @param object|array $row * @param bool $fallback * @return CommentStoreComment */ - private function getCommentInternal( IDatabase $db = null, $row, $fallback = false ) { - $key = $this->key; + private function getCommentInternal( IDatabase $db = null, $key, $row, $fallback = false ) { $row = (array)$row; if ( array_key_exists( "{$key}_text", $row ) && array_key_exists( "{$key}_data", $row ) ) { $cid = isset( $row["{$key}_cid"] ) ? $row["{$key}_cid"] : null; @@ -333,12 +377,27 @@ class CommentStore { * If you need to fake a comment in a row for some reason, set fields * `{$key}_text` (string) and `{$key}_data` (JSON string or null). * + * @since 1.30 + * @since 1.31 Method signature changed, $key parameter added (with deprecated back compat) + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @param object|array $row Result row. * @param bool $fallback If true, fall back as well as possible instead of throwing an exception. * @return CommentStoreComment */ - public function getComment( $row, $fallback = false ) { - return $this->getCommentInternal( null, $row, $fallback ); + public function getComment( $key, $row = null, $fallback = false ) { + // Compat for method sig change in 1.31 (introduction of $key) + if ( $this->key !== null ) { + $fallback = $row; + $row = $key; + $key = $this->getKey(); + } + if ( $row === null ) { + // @codeCoverageIgnoreStart + throw new InvalidArgumentException( '$row must not be null' ); + // @codeCoverageIgnoreEnd + } + return $this->getCommentInternal( null, $key, $row, $fallback ); } /** @@ -351,13 +410,28 @@ class CommentStore { * If you need to fake a comment in a row for some reason, set fields * `{$key}_text` (string) and `{$key}_data` (JSON string or null). * + * @since 1.30 + * @since 1.31 Method signature changed, $key parameter added (with deprecated back compat) * @param IDatabase $db Database handle to use for lookup + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @param object|array $row Result row. * @param bool $fallback If true, fall back as well as possible instead of throwing an exception. * @return CommentStoreComment */ - public function getCommentLegacy( IDatabase $db, $row, $fallback = false ) { - return $this->getCommentInternal( $db, $row, $fallback ); + public function getCommentLegacy( IDatabase $db, $key, $row = null, $fallback = false ) { + // Compat for method sig change in 1.31 (introduction of $key) + if ( $this->key !== null ) { + $fallback = $row; + $row = $key; + $key = $this->getKey(); + } + if ( $row === null ) { + // @codeCoverageIgnoreStart + throw new InvalidArgumentException( '$row must not be null' ); + // @codeCoverageIgnoreEnd + } + return $this->getCommentInternal( $db, $key, $row, $fallback ); } /** @@ -443,23 +517,25 @@ class CommentStore { /** * Implementation for `self::insert()` and `self::insertWithTempTable()` * @param IDatabase $dbw + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @param string|Message|CommentStoreComment $comment * @param array|null $data * @return array [ array $fields, callable $callback ] */ - private function insertInternal( IDatabase $dbw, $comment, $data ) { + private function insertInternal( IDatabase $dbw, $key, $comment, $data ) { $fields = []; $callback = null; $comment = $this->createComment( $dbw, $comment, $data ); if ( $this->stage <= MIGRATION_WRITE_BOTH ) { - $fields[$this->key] = $this->lang->truncate( $comment->text, 255 ); + $fields[$key] = $this->lang->truncate( $comment->text, 255 ); } if ( $this->stage >= MIGRATION_WRITE_BOTH ) { - if ( isset( self::$tempTables[$this->key] ) ) { - $t = self::$tempTables[$this->key]; + if ( isset( self::$tempTables[$key] ) ) { + $t = self::$tempTables[$key]; $func = __METHOD__; $commentId = $comment->id; $callback = function ( $id ) use ( $dbw, $commentId, $t, $func ) { @@ -473,7 +549,7 @@ class CommentStore { ); }; } else { - $fields["{$this->key}_id"] = $comment->id; + $fields["{$key}_id"] = $comment->id; } } @@ -485,17 +561,34 @@ class CommentStore { * * @note It's recommended to include both the call to this method and the * row insert in the same transaction. + * + * @since 1.30 + * @since 1.31 Method signature changed, $key parameter added (with deprecated back compat) * @param IDatabase $dbw Database handle to insert on + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @param string|Message|CommentStoreComment $comment As for `self::createComment()` * @param array|null $data As for `self::createComment()` * @return array Fields for the insert or update */ - public function insert( IDatabase $dbw, $comment, $data = null ) { - if ( isset( self::$tempTables[$this->key] ) ) { - throw new InvalidArgumentException( "Must use insertWithTempTable() for $this->key" ); + public function insert( IDatabase $dbw, $key, $comment = null, $data = null ) { + // Compat for method sig change in 1.31 (introduction of $key) + if ( $this->key !== null ) { + $data = $comment; + $comment = $key; + $key = $this->key; + } + if ( $comment === null ) { + // @codeCoverageIgnoreStart + throw new InvalidArgumentException( '$comment can not be null' ); + // @codeCoverageIgnoreEnd + } + + if ( isset( self::$tempTables[$key] ) ) { + throw new InvalidArgumentException( "Must use insertWithTempTable() for $key" ); } - list( $fields ) = $this->insertInternal( $dbw, $comment, $data ); + list( $fields ) = $this->insertInternal( $dbw, $key, $comment, $data ); return $fields; } @@ -507,7 +600,12 @@ class CommentStore { * * @note It's recommended to include both the call to this method and the * row insert in the same transaction. + * + * @since 1.30 + * @since 1.31 Method signature changed, $key parameter added (with deprecated back compat) * @param IDatabase $dbw Database handle to insert on + * @param string $key A key such as "rev_comment" identifying the comment + * field being fetched. * @param string|Message|CommentStoreComment $comment As for `self::createComment()` * @param array|null $data As for `self::createComment()` * @return array Two values: @@ -515,14 +613,26 @@ class CommentStore { * - callable Function to call when the primary key of the row being * inserted/updated is known. Pass it that primary key. */ - public function insertWithTempTable( IDatabase $dbw, $comment, $data = null ) { - if ( isset( self::$formerTempTables[$this->key] ) ) { - wfDeprecated( __METHOD__ . " for $this->key", self::$formerTempTables[$this->key] ); - } elseif ( !isset( self::$tempTables[$this->key] ) ) { - throw new InvalidArgumentException( "Must use insert() for $this->key" ); + public function insertWithTempTable( IDatabase $dbw, $key, $comment = null, $data = null ) { + // Compat for method sig change in 1.31 (introduction of $key) + if ( $this->key !== null ) { + $data = $comment; + $comment = $key; + $key = $this->getKey(); + } + if ( $comment === null ) { + // @codeCoverageIgnoreStart + throw new InvalidArgumentException( '$comment can not be null' ); + // @codeCoverageIgnoreEnd + } + + if ( isset( self::$formerTempTables[$key] ) ) { + wfDeprecated( __METHOD__ . " for $key", self::$formerTempTables[$key] ); + } elseif ( !isset( self::$tempTables[$key] ) ) { + throw new InvalidArgumentException( "Must use insert() for $key" ); } - list( $fields, $callback ) = $this->insertInternal( $dbw, $comment, $data ); + list( $fields, $callback ) = $this->insertInternal( $dbw, $key, $comment, $data ); if ( !$callback ) { $callback = function () { // Do nothing. diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 8f4c3468b0..a6a36865bb 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1004,15 +1004,15 @@ $wgParserTestMediaHandlers = [ */ $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, ]; /** @@ -1817,7 +1817,7 @@ $wgDBtype = 'mysql'; * 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. */ @@ -1827,7 +1827,7 @@ $wgDBssl = false; * 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. */ @@ -1998,7 +1998,7 @@ $wgDBservers = false; * 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 @@ -2142,7 +2142,7 @@ $wgExternalStores = []; * ]; * @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 = []; @@ -2255,7 +2255,7 @@ $wgCacheDirectory = false; * - CACHE_NONE: Do not cache * - CACHE_DB: Store cache objects in the DB * - CACHE_MEMCACHED: MemCached, must specify servers in $wgMemCachedServers - * - CACHE_ACCEL: APC, APCU, XCache or WinCache + * - CACHE_ACCEL: APC, APCU or WinCache * - (other): A string may be used which identifies a cache * configuration in $wgObjectCaches. * @@ -2310,34 +2310,33 @@ $wgLanguageConverterCacheType = CACHE_ANYTHING; * 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 ], + '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 ], ]; /** @@ -2374,13 +2373,13 @@ $wgMainWANCache = 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' ] ] @@ -2527,7 +2526,7 @@ $wgAdaptiveMessageCache = false; * Use maintenance/rebuildLocalisationCache.php instead. */ $wgLocalisationCacheConf = [ - 'class' => 'LocalisationCache', + 'class' => LocalisationCache::class, 'store' => 'detect', 'storeClass' => false, 'storeDirectory' => false, @@ -3783,10 +3782,11 @@ $wgResourceLoaderValidateStaticJS = false; */ $wgResourceLoaderLESSVars = [ /** - * Minimum available screen width at which a device can be considered a tablet/desktop + * Minimum available screen width at which a device can be considered a tablet * The number is currently based on the device width of a Samsung Galaxy S5 mini and is low * enough to cover iPad (768px). Number is prone to change with new information. * @since 1.27 + * @deprecated 1.31 Use mediawiki.ui/variables instead */ 'deviceWidthTablet' => '720px', ]; @@ -3936,9 +3936,6 @@ $wgNamespaceAliases = []; * because articles can be created such that they are hard to view or edit. * * In some rare cases you may wish to remove + for compatibility with old links. - * - * Theoretically 0x80-0x9F of ISO 8859-1 should be disallowed, but - * this breaks interlanguage links */ $wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+"; @@ -4169,8 +4166,8 @@ $wgInvalidRedirectTargets = [ 'Filepath', 'Mypage', 'Mytalk', 'Redirect' ]; * an extension setup function. */ $wgParserConf = [ - 'class' => 'Parser', - # 'preprocessorClass' => 'Preprocessor_Hash', + 'class' => Parser::class, + # 'preprocessorClass' => Preprocessor_Hash::class, ]; /** @@ -4474,7 +4471,7 @@ $wgActiveUserDays = 30; * @since 1.27 */ $wgCentralIdLookupProviders = [ - 'local' => [ 'class' => 'LocalIdLookup' ], + 'local' => [ 'class' => LocalIdLookup::class ], ]; /** @@ -4762,7 +4759,7 @@ $wgPasswordDefault = 'pbkdf2'; * An advanced example: * @code * $wgPasswordConfig['bcrypt-peppered'] = [ - * 'class' => 'EncryptedPassword', + * 'class' => EncryptedPassword::class, * 'underlying' => 'bcrypt', * 'secrets' => [], * 'cipher' => MCRYPT_RIJNDAEL_256, @@ -4775,31 +4772,31 @@ $wgPasswordDefault = 'pbkdf2'; */ $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', @@ -6109,7 +6106,7 @@ $wgDebugComments = false; * 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. */ @@ -6214,7 +6211,7 @@ $wgDebugLogGroups = []; * * @par To completely disable logging: * @code - * $wgMWLoggerDefaultSpi = [ 'class' => '\\MediaWiki\\Logger\\NullSpi' ]; + * $wgMWLoggerDefaultSpi = [ 'class' => \MediaWiki\Logger\NullSpi::class ]; * @endcode * * @since 1.25 @@ -6222,7 +6219,7 @@ $wgDebugLogGroups = []; * @see MwLogger */ $wgMWLoggerDefaultSpi = [ - 'class' => '\\MediaWiki\\Logger\\LegacySpi', + 'class' => \MediaWiki\Logger\LegacySpi::class, ]; /** @@ -6278,6 +6275,12 @@ $wgShowDBErrorBacktrace = false; */ $wgLogExceptionBacktrace = true; +/** + * If true, the MediaWiki error handler passes errors/warnings to the default error handler + * after logging them. The setting is ignored when the track_errors php.ini flag is true. + */ +$wgPropagateErrors = true; + /** * Expose backend server host names through the API and various HTML comments */ @@ -6774,7 +6777,7 @@ $wgRCLinkDays = [ 1, 3, 7, 14, 30 ]; * 'omit_bots' => true, * ]; * @example $wgRCFeeds['example'] = [ - * 'class' => 'ExampleRCFeed', + * 'class' => ExampleRCFeed::class, * ]; * @since 1.22 */ @@ -6786,8 +6789,8 @@ $wgRCFeeds = []; * @since 1.22 */ $wgRCEngines = [ - 'redis' => 'RedisPubSubFeedEngine', - 'udp' => 'UDPRCFeedEngine', + 'redis' => RedisPubSubFeedEngine::class, + 'udp' => UDPRCFeedEngine::class, ]; /** @@ -6911,8 +6914,8 @@ $wgOverrideSiteFeed = []; * $wgOut->isSyndicated() is true. */ $wgFeedClasses = [ - 'rss' => 'RSSFeed', - 'atom' => 'AtomFeed', + 'rss' => RSSFeed::class, + 'atom' => AtomFeed::class, ]; /** @@ -7439,24 +7442,24 @@ $wgServiceWiringFiles = [ * 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, ]; /** @@ -7505,7 +7508,7 @@ $wgJobSerialCommitThreshold = false; * These settings should be global to all wikis. */ $wgJobTypeConf = [ - 'default' => [ 'class' => 'JobQueueDB', 'order' => 'random', 'claimTTL' => 3600 ], + 'default' => [ 'class' => JobQueueDB::class, 'order' => 'random', 'claimTTL' => 3600 ], ]; /** @@ -7513,7 +7516,7 @@ $wgJobTypeConf = [ * These settings should be global to all wikis. */ $wgJobQueueAggregator = [ - 'class' => 'JobQueueAggregatorNull' + 'class' => JobQueueAggregatorNull::class ]; /** @@ -7534,7 +7537,7 @@ $wgJobQueueIncludeInMaxLagFactor = false; * Expensive Querypages are already updated. */ $wgSpecialPageCacheUpdates = [ - 'Statistics' => [ 'SiteStatsUpdate', 'cacheUpdate' ] + 'Statistics' => [ SiteStatsUpdate::class, 'cacheUpdate' ] ]; /** @@ -7724,42 +7727,42 @@ $wgLogActions = []; * @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, ]; /** @@ -7890,7 +7893,7 @@ $wgActions = [ 'credits' => true, 'delete' => true, 'edit' => true, - 'editchangetags' => 'SpecialPageAction', + 'editchangetags' => SpecialPageAction::class, 'history' => true, 'info' => true, 'markpatrolled' => true, @@ -7899,7 +7902,7 @@ $wgActions = [ 'raw' => true, 'render' => true, 'revert' => true, - 'revisiondelete' => 'SpecialPageAction', + 'revisiondelete' => SpecialPageAction::class, 'rollback' => true, 'submit' => true, 'unprotect' => true, @@ -8048,12 +8051,12 @@ $wgDebugAPI = false; * @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 * @@ -8476,7 +8479,7 @@ $wgRedirectOnLogin = null; * @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 @@ -8488,7 +8491,7 @@ $wgRedirectOnLogin = null; * @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 @@ -8562,7 +8565,7 @@ $wgTextModelsToParse = [ * @since 1.20 */ $wgSiteTypes = [ - 'mediawiki' => 'MediaWikiSite', + 'mediawiki' => MediaWikiSite::class, ]; /** @@ -8636,7 +8639,7 @@ $wgPageLanguageUseDB = false; * Auto-mounting example for Parsoid: * * $wgVirtualRestConfig['paths']['/parsoid/'] = [ - * 'class' => 'ParsoidVirtualRESTService', + * 'class' => ParsoidVirtualRESTService::class, * 'options' => [ * 'url' => 'http://localhost:8000', * 'prefix' => 'enwiki', @@ -8733,7 +8736,7 @@ $wgMaxJobDBWriteDuration = false; */ $wgEventRelayerConfig = [ 'default' => [ - 'class' => 'EventRelayerNull', + 'class' => EventRelayerNull::class, ] ]; diff --git a/includes/Defines.php b/includes/Defines.php index ca603e7684..087af39db4 100644 --- a/includes/Defines.php +++ b/includes/Defines.php @@ -103,7 +103,7 @@ define( 'CACHE_ANYTHING', -1 ); // Use anything, as long as it works define( 'CACHE_NONE', 0 ); // Do not cache define( 'CACHE_DB', 1 ); // Store cache objects in the DB define( 'CACHE_MEMCACHED', 2 ); // MemCached, must specify servers in $wgMemCacheServers -define( 'CACHE_ACCEL', 3 ); // APC, XCache or WinCache +define( 'CACHE_ACCEL', 3 ); // APC or WinCache /**@}*/ /**@{ diff --git a/includes/EditPage.php b/includes/EditPage.php index 72c3c14194..6fbeed7b4d 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -1717,7 +1717,7 @@ class EditPage { // being set. This is used by ConfirmEdit to display a captcha // without any error message cruft. } else { - $this->hookError = $status->getWikiText(); + $this->hookError = $this->formatStatusErrors( $status ); } // Use the existing $status->value if the hook set it if ( !$status->value ) { @@ -1727,7 +1727,7 @@ class EditPage { } elseif ( !$status->isOK() ) { # ...or the hook could be expecting us to produce an error // FIXME this sucks, we should just use the Status object throughout - $this->hookError = $status->getWikiText(); + $this->hookError = $this->formatStatusErrors( $status ); $status->fatal( 'hookaborted' ); $status->value = self::AS_HOOK_ERROR_EXPECTED; return false; @@ -1736,6 +1736,26 @@ class EditPage { return true; } + /** + * Wrap status errors in an errorbox for increased visiblity + * + * @param Status $status + * @return string Wikitext + */ + private function formatStatusErrors( Status $status ) { + $errmsg = $status->getWikiText( + 'edit-error-short', + 'edit-error-long', + $this->context->getLanguage() + ); + return << +{$errmsg} + +
+ERROR; + } + /** * Return the summary to be used for a new section. * @@ -2452,12 +2472,22 @@ class EditPage { $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' ) + ); } /** @@ -2768,7 +2798,8 @@ class EditPage { if ( $this->wasDeletedSinceLastEdit() && 'save' == $this->formtype ) { $username = $this->lastDelete->user_name; - $comment = CommentStore::newKey( 'log_comment' )->getComment( $this->lastDelete )->text; + $comment = CommentStore::getStore() + ->getComment( 'log_comment', $this->lastDelete )->text; // It is better to not parse the comment at all than to have templates expanded in the middle // TODO: can the checkLabel be moved outside of the div so that wrapWikiMsg could be used? @@ -3727,7 +3758,7 @@ class EditPage { return new OOUI\ButtonWidget( [ 'id' => 'mw-editform-cancel', - 'href' => $this->getContextTitle()->getLinkUrl( $cancelParams ), + 'href' => $this->getContextTitle()->getLinkURL( $cancelParams ), 'label' => new OOUI\HtmlSnippet( $this->context->msg( 'cancel' )->parse() ), 'framed' => false, 'infusable' => true, @@ -3780,7 +3811,7 @@ class EditPage { */ protected function getLastDelete() { $dbr = wfGetDB( DB_REPLICA ); - $commentQuery = CommentStore::newKey( 'log_comment' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'log_comment' ); $data = $dbr->selectRow( [ 'logging', 'user' ] + $commentQuery['tables'], [ diff --git a/includes/Feed.php b/includes/Feed.php index 92eec0830a..86e9bee69d 100644 --- a/includes/Feed.php +++ b/includes/Feed.php @@ -88,7 +88,7 @@ class FeedItem { * @return string */ public function getUniqueID() { - $id = $this->getUniqueIDUnescaped(); + $id = $this->getUniqueIdUnescaped(); if ( $id ) { return $this->xmlEncode( $id ); } @@ -383,7 +383,7 @@ class RSSFeed extends ChannelFeed { "title" => $item->getTitle(), "url" => $this->xmlEncode( wfExpandUrl( $item->getUrlUnescaped(), PROTO_CURRENT ) ), "permalink" => $item->rssIsPermalink, - "uniqueID" => $item->getUniqueId(), + "uniqueID" => $item->getUniqueID(), "description" => $item->getDescription(), "date" => $this->xmlEncode( $this->formatTime( $item->getDate() ) ), "author" => $item->getAuthor() @@ -433,7 +433,7 @@ class AtomFeed extends ChannelFeed { // uses htmlentities, which does not work with XML $templateParams = [ 'language' => $this->xmlEncode( $this->getLanguage() ), - 'feedID' => $this->getFeedID(), + 'feedID' => $this->getFeedId(), 'title' => $this->getTitle(), 'url' => $this->xmlEncode( wfExpandUrl( $this->getUrlUnescaped(), PROTO_CURRENT ) ), 'selfUrl' => $this->getSelfUrl(), @@ -474,7 +474,7 @@ class AtomFeed extends ChannelFeed { // Manually escaping rather than letting Mustache do it because Mustache // uses htmlentities, which does not work with XML $templateParams = [ - "uniqueID" => $item->getUniqueId(), + "uniqueID" => $item->getUniqueID(), "title" => $item->getTitle(), "mimeType" => $this->xmlEncode( $wgMimeType ), "url" => $this->xmlEncode( wfExpandUrl( $item->getUrlUnescaped(), PROTO_CURRENT ) ), diff --git a/includes/FeedUtils.php b/includes/FeedUtils.php index 6108ca1d46..4dde52d0b4 100644 --- a/includes/FeedUtils.php +++ b/includes/FeedUtils.php @@ -89,7 +89,7 @@ class FeedUtils { $timestamp, $row->rc_deleted & Revision::DELETED_COMMENT ? wfMessage( 'rev-deleted-comment' )->escaped() - : CommentStore::newKey( 'rc_comment' )->getComment( $row )->text, + : CommentStore::getStore()->getComment( 'rc_comment', $row )->text, $actiontext ); } diff --git a/includes/GitInfo.php b/includes/GitInfo.php index fb75c256d6..6270b27fdd 100644 --- a/includes/GitInfo.php +++ b/includes/GitInfo.php @@ -306,9 +306,9 @@ class GitInfo { $config = "{$this->basedir}/config"; $url = false; if ( is_readable( $config ) ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $configArray = parse_ini_file( $config, true ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); $remote = false; // Use the "origin" remote repo if available or any other repo if not. diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index a06d72100f..884c3f0f80 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -877,9 +877,9 @@ function wfParseUrl( $url ) { if ( $wasRelative ) { $url = "http:$url"; } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $bits = parse_url( $url ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); // parse_url() returns an array without scheme for some invalid URLs, e.g. // parse_url("%0Ahttp://example.com") == [ 'host' => '%0Ahttp', 'path' => 'example.com' ] if ( !$bits || !isset( $bits['scheme'] ) ) { @@ -2009,19 +2009,19 @@ function wfNegotiateType( $cprefs, $sprefs ) { /** * Reference-counted warning suppression * - * @deprecated since 1.26, use MediaWiki\suppressWarnings() directly + * @deprecated since 1.26, use Wikimedia\suppressWarnings() directly * @param bool $end */ function wfSuppressWarnings( $end = false ) { - MediaWiki\suppressWarnings( $end ); + Wikimedia\suppressWarnings( $end ); } /** - * @deprecated since 1.26, use MediaWiki\restoreWarnings() directly + * @deprecated since 1.26, use Wikimedia\restoreWarnings() directly * Restore error level to previous value */ function wfRestoreWarnings() { - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } /** @@ -2150,9 +2150,9 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) { } // Turn off the normal warning, we're doing our own below - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $ok = mkdir( $dir, $mode, true ); // PHP5 <3 - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$ok ) { // directory may have been created on another request since we last checked @@ -2412,9 +2412,9 @@ function wfMerge( $old, $mine, $yours, &$result, &$mergeAttemptResult = null ) { # This check may also protect against code injection in # case of broken installations. - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$haveDiff3 ) { wfDebug( "diff3 not found\n" ); @@ -2496,9 +2496,9 @@ function wfDiff( $before, $after, $params = '-u' ) { } global $wgDiff; - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $haveDiff = $wgDiff && file_exists( $wgDiff ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); # This check may also protect against code injection in # case of broken installations. @@ -2754,7 +2754,7 @@ function wfSetupSession( $sessionId = false ) { if ( session_id() !== $session->getId() ) { session_id( $session->getId() ); } - MediaWiki\quietCall( 'session_start' ); + Wikimedia\quietCall( 'session_start' ); } /** @@ -3122,15 +3122,15 @@ function wfMemoryLimit() { $conflimit = wfShorthandToInteger( $wgMemoryLimit ); if ( $conflimit == -1 ) { wfDebug( "Removing PHP's memory limit\n" ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); ini_set( 'memory_limit', $conflimit ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return $conflimit; } elseif ( $conflimit > $memlimit ) { wfDebug( "Raising PHP's memory limit to $conflimit bytes\n" ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); ini_set( 'memory_limit', $conflimit ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return $conflimit; } } @@ -3283,9 +3283,9 @@ function wfUnpack( $format, $data, $length = false ) { } } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $result = unpack( $format, $data ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $result === false ) { // If it cannot extract the packed data. diff --git a/includes/HistoryBlob.php b/includes/HistoryBlob.php index 075b48d225..1d4f6e4e8d 100644 --- a/includes/HistoryBlob.php +++ b/includes/HistoryBlob.php @@ -519,9 +519,9 @@ class DiffHistoryBlob implements HistoryBlob { function diff( $t1, $t2 ) { # Need to do a null concatenation with warnings off, due to bugs in the current version of xdiff # "String is not zero-terminated" - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $diff = xdiff_string_rabdiff( $t1, $t2 ) . ''; - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return $diff; } @@ -532,9 +532,9 @@ class DiffHistoryBlob implements HistoryBlob { */ function patch( $base, $diff ) { if ( function_exists( 'xdiff_string_bpatch' ) ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $text = xdiff_string_bpatch( $base, $diff ) . ''; - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return $text; } @@ -707,7 +707,7 @@ if ( false ) { // 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' ); } diff --git a/includes/Html.php b/includes/Html.php index dfd80a8c43..3bcf13132f 100644 --- a/includes/Html.php +++ b/includes/Html.php @@ -589,9 +589,12 @@ class Html { * * @param string $contents CSS * @param string $media A media type string, like 'screen' + * @param array $attribs (since 1.31) Associative array of attributes, e.g., [ + * 'href' => 'https://www.mediawiki.org/' ]. See expandAttributes() for + * further documentation. * @return string Raw HTML */ - public static function inlineStyle( $contents, $media = 'all' ) { + public static function inlineStyle( $contents, $media = 'all', $attribs = [] ) { // Don't escape '>' since that is used // as direct child selector. // Remember, in css, there is no "x" for hexadecimal escapes, and @@ -609,7 +612,7 @@ class Html { return self::rawElement( 'style', [ 'media' => $media, - ], $contents ); + ] + $attribs, $contents ); } /** diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index 150c72f804..6c932d2a2e 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -548,6 +548,9 @@ class MediaWiki { } } + MWExceptionHandler::handleException( $e ); + } catch ( Error $e ) { + // Type errors and such: at least handle it now and clean up the LBFactory state MWExceptionHandler::handleException( $e ); } @@ -1028,7 +1031,7 @@ class MediaWiki { $port = $info['port']; } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $sock = $host ? fsockopen( $host, $port, @@ -1037,7 +1040,7 @@ class MediaWiki { // If it takes more than 100ms to connect to ourselves there is a problem... 0.100 ) : false; - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); $invokedWithSuccess = true; if ( $sock ) { diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 00767c7f6c..9077666ddf 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -1,6 +1,7 @@ getService( 'RevisionStore' ); } + /** + * @since 1.31 + * @return RevisionLookup + */ + public function getRevisionLookup() { + return $this->getService( 'RevisionLookup' ); + } + + /** + * @since 1.31 + * @return RevisionFactory + */ + public function getRevisionFactory() { + return $this->getService( 'RevisionFactory' ); + } + /** * @since 1.31 * @return PreferencesFactory @@ -743,6 +762,14 @@ class MediaWikiServices extends ServiceContainer { return $this->getService( 'HttpRequestFactory' ); } + /** + * @since 1.31 + * @return CommentStore + */ + public function getCommentStore() { + return $this->getService( 'CommentStore' ); + } + /////////////////////////////////////////////////////////////////////////// // NOTE: When adding a service getter here, don't forget to add a test // case for it in MediaWikiServicesTest::provideGetters() and in diff --git a/includes/MergeHistory.php b/includes/MergeHistory.php index b969e0394c..0e9bb4673d 100644 --- a/includes/MergeHistory.php +++ b/includes/MergeHistory.php @@ -1,10 +1,6 @@ * * This program is free software; you can redistribute it and/or modify diff --git a/includes/Message.php b/includes/Message.php index e55eaaf646..fac9a59893 100644 --- a/includes/Message.php +++ b/includes/Message.php @@ -1245,7 +1245,14 @@ class Message implements MessageSpecifier, Serializable { ); return $out instanceof ParserOutput - ? $out->getText( [ 'enableSectionEditLinks' => false ] ) + ? $out->getText( [ + 'enableSectionEditLinks' => false, + // Wrapping messages in an extra
is probably not expected. If + // they're outside the content area they probably shouldn't be + // targeted by CSS that's targeting the parser output, and if + // they're inside they already are from the outer div. + 'unwrap' => true, + ] ) : $out; } diff --git a/includes/MovePage.php b/includes/MovePage.php index fe8246535f..fc9f6a6676 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -597,7 +597,12 @@ class MovePage { $redirectArticle->doEditUpdates( $redirectRevision, $user, [ 'created' => true ] ); - ChangeTags::addTags( $changeTags, null, $redirectRevId, null ); + // make a copy because of log entry below + $redirectTags = $changeTags; + if ( in_array( 'mw-new-redirect', ChangeTags::getSoftwareTags() ) ) { + $redirectTags[] = 'mw-new-redirect'; + } + ChangeTags::addTags( $redirectTags, null, $redirectRevId, null ); } } diff --git a/includes/OutputPage.php b/includes/OutputPage.php index fc7fbf7220..6b44a557b4 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -52,12 +52,6 @@ class OutputPage extends ContextSource { /** @var bool */ protected $mCanonicalUrl = false; - /** - * @var array Additional stylesheets. Looks like this is for extensions. - * Might be replaced by ResourceLoader. - */ - protected $mExtStyles = []; - /** * @var string Should be private - has getter and setter. Contains * the HTML title */ @@ -464,31 +458,6 @@ class OutputPage extends ContextSource { $this->mScripts .= $script; } - /** - * Register and add a stylesheet from an extension directory. - * - * @deprecated since 1.27 use addModuleStyles() or addStyle() instead - * @param string $url Path to sheet. Provide either a full url (beginning - * with 'http', etc) or a relative path from the document root - * (beginning with '/'). Otherwise it behaves identically to - * addStyle() and draws from the /skins folder. - */ - public function addExtensionStyle( $url ) { - wfDeprecated( __METHOD__, '1.27' ); - array_push( $this->mExtStyles, $url ); - } - - /** - * Get all styles added by extensions - * - * @deprecated since 1.27 - * @return array - */ - function getExtStyle() { - wfDeprecated( __METHOD__, '1.27' ); - return $this->mExtStyles; - } - /** * Add a JavaScript file out of skins/common, or a given relative path. * Internal use only. Use OutputPage::addModules() if possible. @@ -714,13 +683,6 @@ class OutputPage extends ContextSource { $this->mAdditionalBodyClasses = array_merge( $this->mAdditionalBodyClasses, (array)$classes ); } - /** - * @deprecated since 1.28 Obsolete - wgUseETag experiment was removed. - * @param string $tag - */ - public function setETag( $tag ) { - } - /** * Set whether the output should only contain the body of the article, * without any skin, sidebar, etc. @@ -815,9 +777,9 @@ class OutputPage extends ContextSource { # this breaks strtotime(). $clientHeader = preg_replace( '/;.*$/', '', $clientHeader ); - MediaWiki\suppressWarnings(); // E_STRICT system time bitching + Wikimedia\suppressWarnings(); // E_STRICT system time bitching $clientHeaderTime = strtotime( $clientHeader ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$clientHeaderTime ) { wfDebug( __METHOD__ . ": unable to parse the client's If-Modified-Since header: $clientHeader\n" ); @@ -1988,15 +1950,6 @@ class OutputPage extends ContextSource { return Parser::stripOuterParagraph( $parsed ); } - /** - * @param int $maxage - * @deprecated since 1.27 Use setCdnMaxage() instead - */ - public function setSquidMaxage( $maxage ) { - wfDeprecated( __METHOD__, '1.27' ); - $this->setCdnMaxage( $maxage ); - } - /** * Set the value of the "s-maxage" part of the "Cache-control" HTTP header * @@ -2660,36 +2613,6 @@ class OutputPage extends ContextSource { return $text; } - /** - * Display a page stating that the Wiki is in read-only mode. - * Should only be called after wfReadOnly() has returned true. - * - * Historically, this function was used to show the source of the page that the user - * was trying to edit and _also_ permissions error messages. The relevant code was - * moved into EditPage in 1.19 (r102024 / d83c2a431c2a) and removed here in 1.25. - * - * @deprecated since 1.25; throw the exception directly - * @throws ReadOnlyError - */ - public function readOnlyPage() { - if ( func_num_args() > 0 ) { - throw new MWException( __METHOD__ . ' no longer accepts arguments since 1.25.' ); - } - - throw new ReadOnlyError; - } - - /** - * Turn off regular page output and return an error response - * for when rate limiting has triggered. - * - * @deprecated since 1.25; throw the exception directly - */ - public function rateLimited() { - wfDeprecated( __METHOD__, '1.25' ); - throw new ThrottledError; - } - /** * Show a warning about replica DB lag * @@ -3714,12 +3637,6 @@ class OutputPage extends ContextSource { public function buildCssLinksArray() { $links = []; - // Add any extension CSS - foreach ( $this->mExtStyles as $url ) { - $this->addStyle( $url ); - } - $this->mExtStyles = []; - foreach ( $this->styles as $file => $options ) { $link = $this->styleLink( $file, $options ); if ( $link ) { diff --git a/includes/Preferences.php b/includes/Preferences.php index f08b155058..26e28baf47 100644 --- a/includes/Preferences.php +++ b/includes/Preferences.php @@ -267,7 +267,7 @@ class Preferences { public static function getFormObject( $user, IContextSource $context, - $formClass = 'PreferencesForm', + $formClass = PreferencesForm::class, array $remove = [] ) { $preferencesFactory = self::getDefaultPreferencesFactory(); @@ -303,6 +303,8 @@ class Preferences { /** * Handle the form submission if everything validated properly * + * @deprecated since 1.31, use PreferencesFactory + * * @param array $formData * @param PreferencesForm $form * @return bool|Status|string diff --git a/includes/Revision.php b/includes/Revision.php index 510c1ee231..eba563cfda 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -22,6 +22,8 @@ use MediaWiki\Storage\MutableRevisionRecord; use MediaWiki\Storage\RevisionAccessException; +use MediaWiki\Storage\RevisionFactory; +use MediaWiki\Storage\RevisionLookup; use MediaWiki\Storage\RevisionRecord; use MediaWiki\Storage\RevisionStore; use MediaWiki\Storage\RevisionStoreRecord; @@ -64,6 +66,20 @@ class Revision implements IDBAccessObject { return MediaWikiServices::getInstance()->getRevisionStore(); } + /** + * @return RevisionLookup + */ + protected static function getRevisionLookup() { + return MediaWikiServices::getInstance()->getRevisionLookup(); + } + + /** + * @return RevisionFactory + */ + protected static function getRevisionFactory() { + return MediaWikiServices::getInstance()->getRevisionFactory(); + } + /** * @param bool|string $wiki The ID of the target wiki database. Use false for the local wiki. * @@ -97,7 +113,7 @@ class Revision implements IDBAccessObject { * @return Revision|null */ public static function newFromId( $id, $flags = 0 ) { - $rec = self::getRevisionStore()->getRevisionById( $id, $flags ); + $rec = self::getRevisionLookup()->getRevisionById( $id, $flags ); return $rec === null ? null : new Revision( $rec, $flags ); } @@ -116,7 +132,7 @@ class Revision implements IDBAccessObject { * @return Revision|null */ public static function newFromTitle( LinkTarget $linkTarget, $id = 0, $flags = 0 ) { - $rec = self::getRevisionStore()->getRevisionByTitle( $linkTarget, $id, $flags ); + $rec = self::getRevisionLookup()->getRevisionByTitle( $linkTarget, $id, $flags ); return $rec === null ? null : new Revision( $rec, $flags ); } @@ -135,7 +151,7 @@ class Revision implements IDBAccessObject { * @return Revision|null */ public static function newFromPageId( $pageId, $revId = 0, $flags = 0 ) { - $rec = self::getRevisionStore()->getRevisionByPageId( $pageId, $revId, $flags ); + $rec = self::getRevisionLookup()->getRevisionByPageId( $pageId, $revId, $flags ); return $rec === null ? null : new Revision( $rec, $flags ); } @@ -184,7 +200,7 @@ class Revision implements IDBAccessObject { } } - $rec = self::getRevisionStore()->newRevisionFromArchiveRow( $row, 0, $title, $overrides ); + $rec = self::getRevisionFactory()->newRevisionFromArchiveRow( $row, 0, $title, $overrides ); return new Revision( $rec, self::READ_NORMAL, $title ); } @@ -202,9 +218,9 @@ class Revision implements IDBAccessObject { */ public static function newFromRow( $row ) { if ( is_array( $row ) ) { - $rec = self::getRevisionStore()->newMutableRevisionFromArray( $row ); + $rec = self::getRevisionFactory()->newMutableRevisionFromArray( $row ); } else { - $rec = self::getRevisionStore()->newRevisionFromRow( $row ); + $rec = self::getRevisionFactory()->newRevisionFromRow( $row ); } return new Revision( $rec ); @@ -341,7 +357,7 @@ class Revision implements IDBAccessObject { 'rev_sha1', ]; - $fields += CommentStore::newKey( 'rev_comment' )->getFields(); + $fields += CommentStore::getStore()->getFields( 'rev_comment' ); if ( $wgContentHandlerUseDB ) { $fields[] = 'rev_content_format'; @@ -378,7 +394,7 @@ class Revision implements IDBAccessObject { 'ar_sha1', ]; - $fields += CommentStore::newKey( 'ar_comment' )->getFields(); + $fields += CommentStore::getStore()->getFields( 'ar_comment' ); if ( $wgContentHandlerUseDB ) { $fields[] = 'ar_content_format'; @@ -492,13 +508,13 @@ class Revision implements IDBAccessObject { $row['user'] = $wgUser; } - $this->mRecord = self::getRevisionStore()->newMutableRevisionFromArray( + $this->mRecord = self::getRevisionFactory()->newMutableRevisionFromArray( $row, $queryFlags, $this->ensureTitle( $row, $queryFlags, $title ) ); } elseif ( is_object( $row ) ) { - $this->mRecord = self::getRevisionStore()->newRevisionFromRow( + $this->mRecord = self::getRevisionFactory()->newRevisionFromRow( $row, $queryFlags, $this->ensureTitle( $row, $queryFlags, $title ) @@ -976,7 +992,7 @@ class Revision implements IDBAccessObject { */ public function getPrevious() { $title = $this->getTitle(); - $rec = self::getRevisionStore()->getPreviousRevision( $this->mRecord, $title ); + $rec = self::getRevisionLookup()->getPreviousRevision( $this->mRecord, $title ); return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title ); } @@ -987,7 +1003,7 @@ class Revision implements IDBAccessObject { */ public function getNext() { $title = $this->getTitle(); - $rec = self::getRevisionStore()->getNextRevision( $this->mRecord, $title ); + $rec = self::getRevisionLookup()->getNextRevision( $this->mRecord, $title ); return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title ); } @@ -1247,7 +1263,7 @@ class Revision implements IDBAccessObject { return false; } - $record = self::getRevisionStore()->getKnownCurrentRevision( $title, $revId ); + $record = self::getRevisionLookup()->getKnownCurrentRevision( $title, $revId ); return $record ? new Revision( $record ) : false; } } diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index dab3b5cf6c..8b0452db3d 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -47,6 +47,7 @@ use MediaWiki\Shell\CommandFactory; use MediaWiki\Storage\BlobStoreFactory; use MediaWiki\Storage\RevisionStore; use MediaWiki\Storage\SqlBlobStore; +use Wikimedia\ObjectFactory; return [ 'DBLoadBalancerFactory' => function ( MediaWikiServices $services ) { @@ -163,7 +164,8 @@ return [ $store = new WatchedItemStore( $services->getDBLoadBalancer(), new HashBagOStuff( [ 'maxKeys' => 100 ] ), - $services->getReadOnlyMode() + $services->getReadOnlyMode(), + $services->getMainConfig()->get( 'UpdateRowsPerQuery' ) ); $store->setStatsdDataFactory( $services->getStatsdDataFactory() ); @@ -175,7 +177,10 @@ return [ }, 'WatchedItemQueryService' => function ( MediaWikiServices $services ) { - return new WatchedItemQueryService( $services->getDBLoadBalancer() ); + return new WatchedItemQueryService( + $services->getDBLoadBalancer(), + $services->getCommentStore() + ); }, 'CryptRand' => function ( MediaWikiServices $services ) { @@ -394,8 +399,6 @@ return [ $id = 'apc'; } elseif ( function_exists( 'apcu_fetch' ) ) { $id = 'apcu'; - } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) { - $id = 'xcache'; } elseif ( function_exists( 'wincache_ucache_get' ) ) { $id = 'wincache'; } else { @@ -473,15 +476,26 @@ return [ $store = new RevisionStore( $services->getDBLoadBalancer(), $blobStore, - $services->getMainWANObjectCache() + $services->getMainWANObjectCache(), + $services->getCommentStore() ); + $store->setLogger( LoggerFactory::getInstance( 'RevisionStore' ) ); + $config = $services->getMainConfig(); $store->setContentHandlerUseDB( $config->get( 'ContentHandlerUseDB' ) ); return $store; }, + 'RevisionLookup' => function ( MediaWikiServices $services ) { + return $services->getRevisionStore(); + }, + + 'RevisionFactory' => function ( MediaWikiServices $services ) { + return $services->getRevisionStore(); + }, + 'BlobStoreFactory' => function ( MediaWikiServices $services ) { global $wgContLang; return new BlobStoreFactory( @@ -512,6 +526,14 @@ return [ return new \MediaWiki\Http\HttpRequestFactory(); }, + 'CommentStore' => function ( MediaWikiServices $services ) { + global $wgContLang; + return new CommentStore( + $wgContLang, + $services->getMainConfig()->get( 'CommentTableSchemaMigrationStage' ) + ); + } + /////////////////////////////////////////////////////////////////////////// // NOTE: When adding a service here, don't forget to add a getter function // in the MediaWikiServices class. The convenience getter should just call diff --git a/includes/Setup.php b/includes/Setup.php index 3e37c9c9c1..cc6915a74b 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -249,12 +249,12 @@ $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK; */ $wgLockManagers[] = [ 'name' => 'fsLockManager', - 'class' => 'FSLockManager', + 'class' => FSLockManager::class, 'lockDirectory' => "{$wgUploadDirectory}/lockdir", ]; $wgLockManagers[] = [ 'name' => 'nullLockManager', - 'class' => 'NullLockManager', + 'class' => NullLockManager::class, ]; /** @@ -276,7 +276,7 @@ $wgGalleryOptions += [ */ if ( !$wgLocalFileRepo ) { $wgLocalFileRepo = [ - 'class' => 'LocalRepo', + 'class' => LocalRepo::class, 'name' => 'local', 'directory' => $wgUploadDirectory, 'scriptDirUrl' => $wgScriptPath, @@ -295,7 +295,7 @@ if ( !$wgLocalFileRepo ) { if ( $wgUseSharedUploads ) { if ( $wgSharedUploadDBname ) { $wgForeignFileRepos[] = [ - 'class' => 'ForeignDBRepo', + 'class' => ForeignDBRepo::class, 'name' => 'shared', 'directory' => $wgSharedUploadDirectory, 'url' => $wgSharedUploadPath, @@ -315,7 +315,7 @@ if ( $wgUseSharedUploads ) { ]; } else { $wgForeignFileRepos[] = [ - 'class' => 'FileRepo', + 'class' => FileRepo::class, 'name' => 'shared', 'directory' => $wgSharedUploadDirectory, 'url' => $wgSharedUploadPath, @@ -329,7 +329,7 @@ if ( $wgUseSharedUploads ) { } 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', @@ -349,7 +349,7 @@ if ( !isset( $wgLocalFileRepo['backend'] ) ) { $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'] ) ) { @@ -528,9 +528,9 @@ $wgJsMimeType = 'text/javascript'; $wgFileExtensions = array_values( array_diff( $wgFileExtensions, $wgFileBlacklist ) ); if ( $wgInvalidateCacheOnLocalSettingsChange ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', filemtime( "$IP/LocalSettings.php" ) ) ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } if ( $wgNewUserLog ) { @@ -538,16 +538,16 @@ if ( $wgNewUserLog ) { $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' ) { @@ -698,7 +698,7 @@ if ( $wgMainWANCache === false ) { // 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' ] ]; @@ -717,9 +717,9 @@ wfMemoryLimit(); * explicitly set. Inspired by phpMyAdmin's treatment of the problem. */ if ( is_null( $wgLocaltimezone ) ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $wgLocaltimezone = date_default_timezone_get(); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } date_default_timezone_set( $wgLocaltimezone ); @@ -736,20 +736,22 @@ if ( !$wgDBerrorLogTZ ) { // Initialize the request object in $wgRequest $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat -// Set user IP/agent information for causal consistency purposes. -// The cpPosIndex cookie has no prefix and is set by MediaWiki::preOutputCommit(). -$cpPosIndex = $wgRequest->getInt( 'cpPosIndex', (int)$wgRequest->getCookie( 'cpPosIndex', '' ) ); +// Set user IP/agent information for agent session consistency purposes MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->setRequestInfo( [ 'IPAddress' => $wgRequest->getIP(), 'UserAgent' => $wgRequest->getHeader( 'User-Agent' ), 'ChronologyProtection' => $wgRequest->getHeader( 'ChronologyProtection' ), - 'ChronologyPositionIndex' => $cpPosIndex + // The cpPosIndex cookie has no prefix and is set by MediaWiki::preOutputCommit() + 'ChronologyPositionIndex' => + $wgRequest->getInt( 'cpPosIndex', (int)$wgRequest->getCookie( 'cpPosIndex', '' ) ) ] ); -// Make sure that caching does not compromise the consistency improvements -if ( $cpPosIndex ) { +// Make sure that object caching does not undermine the ChronologyProtector improvements +if ( $wgRequest->getCookie( 'UseDC', '' ) === 'master' ) { + // The user is pinned to the primary DC, meaning that they made recent changes which should + // be reflected in their subsequent web requests. Avoid the use of interim cache keys because + // they use a blind TTL and could be stale if an object changes twice in a short time span. MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching( false ); } -unset( $cpPosIndex ); // Useful debug output if ( $wgCommandLineMode ) { @@ -872,7 +874,7 @@ if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) { ) { // Start the PHP-session for backwards compatibility session_id( $session->getId() ); - MediaWiki\quietCall( 'session_start' ); + Wikimedia\quietCall( 'session_start' ); } unset( $session ); diff --git a/includes/SiteStats.php b/includes/SiteStats.php index ce87596a5f..7b2b8d38e2 100644 --- a/includes/SiteStats.php +++ b/includes/SiteStats.php @@ -23,81 +23,66 @@ use Wikimedia\Rdbms\Database; use Wikimedia\Rdbms\IDatabase; use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\LoadBalancer; /** * Static accessor class for site_stats and related things */ class SiteStats { - /** @var bool|stdClass */ + /** @var stdClass */ private static $row; - /** @var bool */ - private static $loaded = false; - - /** @var int[] */ - private static $pageCount = []; - - static function unload() { - self::$loaded = false; - } - - static function recache() { - self::load( true ); - } - /** - * @param bool $recache + * Trigger a reload next time a field is accessed */ - static function load( $recache = false ) { - if ( self::$loaded && !$recache ) { - return; - } - - self::$row = self::loadAndLazyInit(); + public static function unload() { + self::$row = null; + } - # This code is somewhat schema-agnostic, because I'm changing it in a minor release -- TS - if ( !isset( self::$row->ss_total_pages ) && self::$row->ss_total_pages == -1 ) { - # Update schema - $u = new SiteStatsUpdate( 0, 0, 0 ); - $u->doUpdate(); - self::$row = self::doLoad( wfGetDB( DB_REPLICA ) ); + protected static function load() { + if ( self::$row === null ) { + self::$row = self::loadAndLazyInit(); } - - self::$loaded = true; } /** - * @return bool|stdClass + * @return stdClass */ - static function loadAndLazyInit() { - global $wgMiserMode; + protected static function loadAndLazyInit() { + $config = MediaWikiServices::getInstance()->getMainConfig(); + $lb = self::getLB(); + $dbr = $lb->getConnection( DB_REPLICA ); wfDebug( __METHOD__ . ": reading site_stats from replica DB\n" ); - $row = self::doLoad( wfGetDB( DB_REPLICA ) ); + $row = self::doLoadFromDB( $dbr ); - if ( !self::isSane( $row ) ) { - $lb = MediaWikiServices::getInstance()->getDBLoadBalancer(); - if ( $lb->hasOrMadeRecentMasterChanges() ) { - // Might have just been initialized during this request? Underflow? - wfDebug( __METHOD__ . ": site_stats damaged or missing on replica DB\n" ); - $row = self::doLoad( wfGetDB( DB_MASTER ) ); - } + if ( !self::isSane( $row ) && $lb->hasOrMadeRecentMasterChanges() ) { + // Might have just been initialized during this request? Underflow? + wfDebug( __METHOD__ . ": site_stats damaged or missing on replica DB\n" ); + $row = self::doLoadFromDB( $lb->getConnection( DB_MASTER ) ); } - if ( !$wgMiserMode && !self::isSane( $row ) ) { - // Normally the site_stats table is initialized at install time. - // Some manual construction scenarios may leave the table empty or - // broken, however, for instance when importing from a dump into a - // clean schema with mwdumper. - wfDebug( __METHOD__ . ": initializing damaged or missing site_stats\n" ); - - SiteStatsInit::doAllAndCommit( wfGetDB( DB_REPLICA ) ); + if ( !self::isSane( $row ) ) { + if ( $config->get( 'MiserMode' ) ) { + // Start off with all zeroes, assuming that this is a new wiki or any + // repopulations where done manually via script. + SiteStatsInit::doPlaceholderInit(); + } else { + // Normally the site_stats table is initialized at install time. + // Some manual construction scenarios may leave the table empty or + // broken, however, for instance when importing from a dump into a + // clean schema with mwdumper. + wfDebug( __METHOD__ . ": initializing damaged or missing site_stats\n" ); + SiteStatsInit::doAllAndCommit( $dbr ); + } - $row = self::doLoad( wfGetDB( DB_MASTER ) ); + $row = self::doLoadFromDB( $lb->getConnection( DB_MASTER ) ); } if ( !self::isSane( $row ) ) { wfDebug( __METHOD__ . ": site_stats persistently nonsensical o_O\n" ); + // Always return a row-like object + $row = (object)array_fill_keys( self::selectFields(), 0 ); } return $row; @@ -105,78 +90,68 @@ class SiteStats { /** * @param IDatabase $db - * @return bool|stdClass - */ - static function doLoad( $db ) { - return $db->selectRow( 'site_stats', [ - 'ss_row_id', - 'ss_total_edits', - 'ss_good_articles', - 'ss_total_pages', - 'ss_users', - 'ss_active_users', - 'ss_images', - ], [], __METHOD__ ); - } - - /** - * Return the total number of page views. Except we don't track those anymore. - * Stop calling this function, it will be removed some time in the future. It's - * kept here simply to prevent fatal errors. - * - * @deprecated since 1.25 - * @return int + * @return stdClass|bool */ - static function views() { - wfDeprecated( __METHOD__, '1.25' ); - return 0; + private static function doLoadFromDB( IDatabase $db ) { + return $db->selectRow( + 'site_stats', + self::selectFields(), + [ 'ss_row_id' => 1 ], + __METHOD__ + ); } /** * @return int */ - static function edits() { + public static function edits() { self::load(); + return self::$row->ss_total_edits; } /** * @return int */ - static function articles() { + public static function articles() { self::load(); + return self::$row->ss_good_articles; } /** * @return int */ - static function pages() { + public static function pages() { self::load(); + return self::$row->ss_total_pages; } /** * @return int */ - static function users() { + public static function users() { self::load(); + return self::$row->ss_users; } /** * @return int */ - static function activeUsers() { + public static function activeUsers() { self::load(); + return self::$row->ss_active_users; } /** * @return int */ - static function images() { + public static function images() { self::load(); + return self::$row->ss_images; } @@ -185,17 +160,17 @@ class SiteStats { * @param string $group Name of group * @return int */ - static function numberingroup( $group ) { + public static function numberingroup( $group ) { $cache = MediaWikiServices::getInstance()->getMainWANObjectCache(); + return $cache->getWithSetCallback( $cache->makeKey( 'SiteStats', 'groupcounts', $group ), $cache::TTL_HOUR, function ( $oldValue, &$ttl, array &$setOpts ) use ( $group ) { - $dbr = wfGetDB( DB_REPLICA ); - + $dbr = self::getLB()->getConnection( DB_REPLICA ); $setOpts += Database::getCacheSetOptions( $dbr ); - return $dbr->selectField( + return (int)$dbr->selectField( 'user_groups', 'COUNT(*)', [ @@ -213,8 +188,9 @@ class SiteStats { * Total number of jobs in the job queue. * @return int */ - static function jobs() { + public static function jobs() { $cache = MediaWikiServices::getInstance()->getMainWANObjectCache(); + return $cache->getWithSetCallback( $cache->makeKey( 'SiteStats', 'jobscount' ), $cache::TTL_MINUTE, @@ -232,20 +208,41 @@ class SiteStats { /** * @param int $ns - * * @return int */ - static function pagesInNs( $ns ) { - if ( !isset( self::$pageCount[$ns] ) ) { - $dbr = wfGetDB( DB_REPLICA ); - self::$pageCount[$ns] = (int)$dbr->selectField( - 'page', - 'COUNT(*)', - [ 'page_namespace' => $ns ], - __METHOD__ - ); - } - return self::$pageCount[$ns]; + public static function pagesInNs( $ns ) { + $cache = MediaWikiServices::getInstance()->getMainWANObjectCache(); + + return $cache->getWithSetCallback( + $cache->makeKey( 'SiteStats', 'page-in-namespace', $ns ), + $cache::TTL_HOUR, + function ( $oldValue, &$ttl, array &$setOpts ) use ( $ns ) { + $dbr = self::getLB()->getConnection( DB_REPLICA ); + $setOpts += Database::getCacheSetOptions( $dbr ); + + return (int)$dbr->selectField( + 'page', + 'COUNT(*)', + [ 'page_namespace' => $ns ], + __METHOD__ + ); + }, + [ 'pcTTL' => $cache::TTL_PROC_LONG ] + ); + } + + /** + * @return array + */ + public static function selectFields() { + return [ + 'ss_total_edits', + 'ss_good_articles', + 'ss_total_pages', + 'ss_users', + 'ss_active_users', + 'ss_images', + ]; } /** @@ -254,7 +251,6 @@ class SiteStats { * Checks only fields which are filled by SiteStatsInit::refresh. * * @param bool|object $row - * * @return bool */ private static function isSane( $row ) { @@ -276,148 +272,14 @@ class SiteStats { return false; } } - return true; - } -} - -/** - * Class designed for counting of stats. - */ -class SiteStatsInit { - - // Database connection - private $db; - - // Various stats - private $mEdits = null, $mArticles = null, $mPages = null; - private $mUsers = null, $mFiles = null; - - /** - * @param bool|IDatabase $database - * - bool: Whether to use the master DB - * - IDatabase: Database connection to use - */ - public function __construct( $database = false ) { - if ( $database instanceof IDatabase ) { - $this->db = $database; - } elseif ( $database ) { - $this->db = wfGetDB( DB_MASTER ); - } else { - $this->db = wfGetDB( DB_REPLICA, 'vslow' ); - } - } - - /** - * Count the total number of edits - * @return int - */ - public function edits() { - $this->mEdits = $this->db->selectField( 'revision', 'COUNT(*)', '', __METHOD__ ); - $this->mEdits += $this->db->selectField( 'archive', 'COUNT(*)', '', __METHOD__ ); - return $this->mEdits; - } - - /** - * Count pages in article space(s) - * @return int - */ - public function articles() { - global $wgArticleCountMethod; - - $tables = [ 'page' ]; - $conds = [ - 'page_namespace' => MWNamespace::getContentNamespaces(), - 'page_is_redirect' => 0, - ]; - - if ( $wgArticleCountMethod == 'link' ) { - $tables[] = 'pagelinks'; - $conds[] = 'pl_from=page_id'; - } elseif ( $wgArticleCountMethod == 'comma' ) { - // To make a correct check for this, we would need, for each page, - // to load the text, maybe uncompress it, maybe decode it and then - // check if there's one comma. - // But one thing we are sure is that if the page is empty, it can't - // contain a comma :) - $conds[] = 'page_len > 0'; - } - $this->mArticles = $this->db->selectField( $tables, 'COUNT(DISTINCT page_id)', - $conds, __METHOD__ ); - return $this->mArticles; - } - - /** - * Count total pages - * @return int - */ - public function pages() { - $this->mPages = $this->db->selectField( 'page', 'COUNT(*)', '', __METHOD__ ); - return $this->mPages; - } - - /** - * Count total users - * @return int - */ - public function users() { - $this->mUsers = $this->db->selectField( 'user', 'COUNT(*)', '', __METHOD__ ); - return $this->mUsers; - } - - /** - * Count total files - * @return int - */ - public function files() { - $this->mFiles = $this->db->selectField( 'image', 'COUNT(*)', '', __METHOD__ ); - return $this->mFiles; - } - - /** - * Do all updates and commit them. More or less a replacement - * for the original initStats, but without output. - * - * @param IDatabase|bool $database - * - bool: Whether to use the master DB - * - IDatabase: Database connection to use - * @param array $options Array of options, may contain the following values - * - activeUsers bool: Whether to update the number of active users (default: false) - */ - public static function doAllAndCommit( $database, array $options = [] ) { - $options += [ 'update' => false, 'activeUsers' => false ]; - - // Grab the object and count everything - $counter = new SiteStatsInit( $database ); - - $counter->edits(); - $counter->articles(); - $counter->pages(); - $counter->users(); - $counter->files(); - - $counter->refresh(); - - // Count active users if need be - if ( $options['activeUsers'] ) { - SiteStatsUpdate::cacheUpdate( wfGetDB( DB_MASTER ) ); - } + return true; } /** - * Refresh site_stats + * @return LoadBalancer */ - public function refresh() { - $values = [ - 'ss_row_id' => 1, - 'ss_total_edits' => ( $this->mEdits === null ? $this->edits() : $this->mEdits ), - 'ss_good_articles' => ( $this->mArticles === null ? $this->articles() : $this->mArticles ), - 'ss_total_pages' => ( $this->mPages === null ? $this->pages() : $this->mPages ), - 'ss_users' => ( $this->mUsers === null ? $this->users() : $this->mUsers ), - 'ss_images' => ( $this->mFiles === null ? $this->files() : $this->mFiles ), - ]; - - $dbw = wfGetDB( DB_MASTER ); - $dbw->upsert( 'site_stats', $values, [ 'ss_row_id' ], $values, __METHOD__ ); + private static function getLB() { + return MediaWikiServices::getInstance()->getDBLoadBalancer(); } } diff --git a/includes/SiteStatsInit.php b/includes/SiteStatsInit.php new file mode 100644 index 0000000000..f8886909a9 --- /dev/null +++ b/includes/SiteStatsInit.php @@ -0,0 +1,206 @@ +dbr = $database; + } elseif ( $database ) { + $this->dbr = self::getDB( DB_MASTER ); + } else { + $this->dbr = self::getDB( DB_REPLICA, 'vslow' ); + } + } + + /** + * Count the total number of edits + * @return int + */ + public function edits() { + $this->edits = $this->dbr->selectField( 'revision', 'COUNT(*)', '', __METHOD__ ); + $this->edits += $this->dbr->selectField( 'archive', 'COUNT(*)', '', __METHOD__ ); + + return $this->edits; + } + + /** + * Count pages in article space(s) + * @return int + */ + public function articles() { + $config = MediaWikiServices::getInstance()->getMainConfig(); + + $tables = [ 'page' ]; + $conds = [ + 'page_namespace' => MWNamespace::getContentNamespaces(), + 'page_is_redirect' => 0, + ]; + + if ( $config->get( 'ArticleCountMethod' ) == 'link' ) { + $tables[] = 'pagelinks'; + $conds[] = 'pl_from=page_id'; + } elseif ( $config->get( 'ArticleCountMethod' ) == 'comma' ) { + // To make a correct check for this, we would need, for each page, + // to load the text, maybe uncompress it, maybe decode it and then + // check if there's one comma. + // But one thing we are sure is that if the page is empty, it can't + // contain a comma :) + $conds[] = 'page_len > 0'; + } + + $this->articles = $this->dbr->selectField( + $tables, + 'COUNT(DISTINCT page_id)', + $conds, + __METHOD__ + ); + + return $this->articles; + } + + /** + * Count total pages + * @return int + */ + public function pages() { + $this->pages = $this->dbr->selectField( 'page', 'COUNT(*)', '', __METHOD__ ); + + return $this->pages; + } + + /** + * Count total users + * @return int + */ + public function users() { + $this->users = $this->dbr->selectField( 'user', 'COUNT(*)', '', __METHOD__ ); + + return $this->users; + } + + /** + * Count total files + * @return int + */ + public function files() { + $this->files = $this->dbr->selectField( 'image', 'COUNT(*)', '', __METHOD__ ); + + return $this->files; + } + + /** + * Do all updates and commit them. More or less a replacement + * for the original initStats, but without output. + * + * @param IDatabase|bool $database + * - bool: Whether to use the master DB + * - IDatabase: Database connection to use + * @param array $options Array of options, may contain the following values + * - activeUsers bool: Whether to update the number of active users (default: false) + */ + public static function doAllAndCommit( $database, array $options = [] ) { + $options += [ 'update' => false, 'activeUsers' => false ]; + + // Grab the object and count everything + $counter = new self( $database ); + + $counter->edits(); + $counter->articles(); + $counter->pages(); + $counter->users(); + $counter->files(); + + $counter->refresh(); + + // Count active users if need be + if ( $options['activeUsers'] ) { + SiteStatsUpdate::cacheUpdate( self::getDB( DB_MASTER ) ); + } + } + + /** + * Insert a dummy row with all zeroes if no row is present + */ + public static function doPlaceholderInit() { + $dbw = self::getDB( DB_MASTER ); + $exists = $dbw->selectField( 'site_stats', '1', [ 'ss_row_id' => 1 ], __METHOD__ ); + if ( $exists === false ) { + $dbw->insert( + 'site_stats', + [ 'ss_row_id' => 1 ] + array_fill_keys( SiteStats::selectFields(), 0 ), + __METHOD__, + [ 'IGNORE' ] + ); + } + } + + /** + * Refresh site_stats + */ + public function refresh() { + $values = [ + 'ss_row_id' => 1, + 'ss_total_edits' => $this->edits === null ? $this->edits() : $this->edits, + 'ss_good_articles' => $this->articles === null ? $this->articles() : $this->articles, + 'ss_total_pages' => $this->pages === null ? $this->pages() : $this->pages, + 'ss_users' => $this->users === null ? $this->users() : $this->users, + 'ss_images' => $this->files === null ? $this->files() : $this->files, + ]; + + self::getDB( DB_MASTER )->upsert( + 'site_stats', + $values, + [ 'ss_row_id' ], + $values, + __METHOD__ + ); + } + + /** + * @param int $index + * @return IDatabase + */ + private static function getDB( $index ) { + return MediaWikiServices::getInstance()->getDBLoadBalancer()->getConnection( $index ); + } +} diff --git a/includes/Storage/RevisionStore.php b/includes/Storage/RevisionStore.php index f8481fed82..d832104ca1 100644 --- a/includes/Storage/RevisionStore.php +++ b/includes/Storage/RevisionStore.php @@ -42,6 +42,9 @@ use MediaWiki\User\UserIdentityValue; use Message; use MWException; use MWUnknownContentModelException; +use Psr\Log\LoggerAwareInterface; +use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; use RecentChange; use stdClass; use Title; @@ -61,7 +64,8 @@ use Wikimedia\Rdbms\LoadBalancer; * @note This was written to act as a drop-in replacement for the corresponding * static methods in Revision. */ -class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup { +class RevisionStore + implements IDBAccessObject, RevisionFactory, RevisionLookup, LoggerAwareInterface { /** * @var SqlBlobStore @@ -88,18 +92,30 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup */ private $cache; + /** + * @var CommentStore + */ + private $commentStore; + + /** + * @var LoggerInterface + */ + private $logger; + /** * @todo $blobStore should be allowed to be any BlobStore! * * @param LoadBalancer $loadBalancer * @param SqlBlobStore $blobStore * @param WANObjectCache $cache + * @param CommentStore $commentStore * @param bool|string $wikiId */ public function __construct( LoadBalancer $loadBalancer, SqlBlobStore $blobStore, WANObjectCache $cache, + CommentStore $commentStore, $wikiId = false ) { Assert::parameterType( 'string|boolean', $wikiId, '$wikiId' ); @@ -107,7 +123,13 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup $this->loadBalancer = $loadBalancer; $this->blobStore = $blobStore; $this->cache = $cache; + $this->commentStore = $commentStore; $this->wikiId = $wikiId; + $this->logger = new NullLogger(); + } + + public function setLogger( LoggerInterface $logger ) { + $this->logger = $logger; } /** @@ -173,24 +195,35 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup * @return Title * @throws RevisionAccessException */ - public function getTitle( $pageId, $revId, $queryFlags = 0 ) { + public function getTitle( $pageId, $revId, $queryFlags = self::READ_NORMAL ) { if ( !$pageId && !$revId ) { throw new InvalidArgumentException( '$pageId and $revId cannot both be 0 or null' ); } - list( $dbMode, $dbOptions, , ) = DBAccessObjectUtils::getDBOptions( $queryFlags ); - $titleFlags = $dbMode == DB_MASTER ? Title::GAID_FOR_UPDATE : 0; - $title = null; + // This method recalls itself with READ_LATEST if READ_NORMAL doesn't get us a Title + // So ignore READ_LATEST_IMMUTABLE flags and handle the fallback logic in this method + if ( DBAccessObjectUtils::hasFlags( $queryFlags, self::READ_LATEST_IMMUTABLE ) ) { + $queryFlags = self::READ_NORMAL; + } + + $canUseTitleNewFromId = ( $pageId !== null && $pageId > 0 && $this->wikiId === false ); + list( $dbMode, $dbOptions ) = DBAccessObjectUtils::getDBOptions( $queryFlags ); + $titleFlags = ( $dbMode == DB_MASTER ? Title::GAID_FOR_UPDATE : 0 ); // Loading by ID is best, but Title::newFromID does not support that for foreign IDs. - if ( $pageId !== null && $pageId > 0 && $this->wikiId === false ) { + if ( $canUseTitleNewFromId ) { // TODO: better foreign title handling (introduce TitleFactory) $title = Title::newFromID( $pageId, $titleFlags ); + if ( $title ) { + return $title; + } } // rev_id is defined as NOT NULL, but this revision may not yet have been inserted. - if ( !$title && $revId !== null && $revId > 0 ) { - $dbr = $this->getDbConnectionRef( $dbMode ); + $canUseRevId = ( $revId !== null && $revId > 0 ); + + if ( $canUseRevId ) { + $dbr = $this->getDBConnectionRef( $dbMode ); // @todo: Title::getSelectFields(), or Title::getQueryInfo(), or something like that $row = $dbr->selectRow( [ 'revision', 'page' ], @@ -209,17 +242,25 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup ); if ( $row ) { // TODO: better foreign title handling (introduce TitleFactory) - $title = Title::newFromRow( $row ); + return Title::newFromRow( $row ); } } - if ( !$title ) { - throw new RevisionAccessException( - "Could not determine title for page ID $pageId and revision ID $revId" - ); + // If we still don't have a title, fallback to master if that wasn't already happening. + if ( $dbMode !== DB_MASTER ) { + $title = $this->getTitle( $pageId, $revId, self::READ_LATEST ); + if ( $title ) { + $this->logger->info( + __METHOD__ . ' fell back to READ_LATEST and got a Title.', + [ 'trace' => wfDebugBacktrace() ] + ); + return $title; + } } - return $title; + throw new RevisionAccessException( + "Could not determine title for page ID $pageId and revision ID $revId" + ); } /** @@ -257,8 +298,8 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup } /** - * Insert a new revision into the database, returning the new revision ID - * number on success and dies horribly on failure. + * Insert a new revision into the database, returning the new revision record + * on success and dies horribly on failure. * * MCR migration note: this replaces Revision::insertOn * @@ -360,7 +401,7 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup } list( $commentFields, $commentCallback ) = - CommentStore::newKey( 'rev_comment' )->insertWithTempTable( $dbw, $comment ); + $this->commentStore->insertWithTempTable( $dbw, 'rev_comment', $comment ); $row += $commentFields; if ( $this->contentHandlerUseDB ) { @@ -1036,9 +1077,9 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup $user = $this->getUserIdentityFromRowObject( $row, 'ar_' ); - $comment = CommentStore::newKey( 'ar_comment' ) + $comment = $this->commentStore // Legacy because $row may have come from self::selectFields() - ->getCommentLegacy( $this->getDBConnection( DB_REPLICA ), $row, true ); + ->getCommentLegacy( $this->getDBConnection( DB_REPLICA ), 'ar_comment', $row, true ); $mainSlot = $this->emulateMainSlot_1_29( $row, $queryFlags, $title ); $slots = new RevisionSlots( [ 'main' => $mainSlot ] ); @@ -1106,9 +1147,9 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup $user = $this->getUserIdentityFromRowObject( $row ); - $comment = CommentStore::newKey( 'rev_comment' ) + $comment = $this->commentStore // Legacy because $row may have come from self::selectFields() - ->getCommentLegacy( $this->getDBConnection( DB_REPLICA ), $row, true ); + ->getCommentLegacy( $this->getDBConnection( DB_REPLICA ), 'rev_comment', $row, true ); $mainSlot = $this->emulateMainSlot_1_29( $row, $queryFlags, $title ); $slots = new RevisionSlots( [ 'main' => $mainSlot ] ); @@ -1581,7 +1622,7 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup 'rev_sha1', ] ); - $commentQuery = CommentStore::newKey( 'rev_comment' )->getJoin(); + $commentQuery = $this->commentStore->getJoin( 'rev_comment' ); $ret['tables'] = array_merge( $ret['tables'], $commentQuery['tables'] ); $ret['fields'] = array_merge( $ret['fields'], $commentQuery['fields'] ); $ret['joins'] = array_merge( $ret['joins'], $commentQuery['joins'] ); @@ -1638,7 +1679,7 @@ class RevisionStore implements IDBAccessObject, RevisionFactory, RevisionLookup * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` */ public function getArchiveQueryInfo() { - $commentQuery = CommentStore::newKey( 'ar_comment' )->getJoin(); + $commentQuery = $this->commentStore->getJoin( 'ar_comment' ); $ret = [ 'tables' => [ 'archive' ] + $commentQuery['tables'], 'fields' => [ diff --git a/includes/StubObject.php b/includes/StubObject.php index baf5109952..067f11f63e 100644 --- a/includes/StubObject.php +++ b/includes/StubObject.php @@ -19,6 +19,7 @@ * * @file */ +use Wikimedia\ObjectFactory; /** * Class to implement stub globals, which are globals that delay loading the diff --git a/includes/Title.php b/includes/Title.php index 9aad401ec8..1be986376f 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -1812,10 +1812,10 @@ class Title implements LinkTarget { if ( $this->isExternal() ) { $target = SpecialPage::getTitleFor( 'GoToInterwiki', - $this->getPrefixedDBKey() + $this->getPrefixedDBkey() ); } - return $target->getFullUrl( $query, false, $proto ); + return $target->getFullURL( $query, false, $proto ); } /** @@ -2735,8 +2735,8 @@ class Title implements LinkTarget { if ( $this->mTitleProtection === null ) { $dbr = wfGetDB( DB_REPLICA ); - $commentStore = new CommentStore( 'pt_reason' ); - $commentQuery = $commentStore->getJoin(); + $commentStore = CommentStore::getStore(); + $commentQuery = $commentStore->getJoin( 'pt_reason' ); $res = $dbr->select( [ 'protected_titles' ] + $commentQuery['tables'], [ @@ -2757,7 +2757,7 @@ class Title implements LinkTarget { 'user' => $row['user'], 'expiry' => $dbr->decodeExpiry( $row['expiry'] ), 'permission' => $row['permission'], - 'reason' => $commentStore->getComment( $row )->text, + 'reason' => $commentStore->getComment( 'pt_reason', $row )->text, ]; } else { $this->mTitleProtection = false; @@ -4500,7 +4500,7 @@ class Title implements LinkTarget { } if ( $this->isExternal() ) { - return true; // any interwiki link might be viewable, for all we know + return true; // any interwiki link might be viewable, for all we know } switch ( $this->mNamespace ) { diff --git a/includes/WebRequest.php b/includes/WebRequest.php index cd62737c56..0a7f416cff 100644 --- a/includes/WebRequest.php +++ b/includes/WebRequest.php @@ -123,9 +123,9 @@ class WebRequest { if ( !preg_match( '!^https?://!', $url ) ) { $url = 'http://unused' . $url; } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $a = parse_url( $url ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $a ) { $path = isset( $a['path'] ) ? $a['path'] : ''; @@ -956,7 +956,7 @@ class WebRequest { 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; diff --git a/includes/actions/InfoAction.php b/includes/actions/InfoAction.php index 3d3340600b..1165a268ef 100644 --- a/includes/actions/InfoAction.php +++ b/includes/actions/InfoAction.php @@ -441,7 +441,8 @@ class InfoAction extends FormlessAction { if ( $title->inNamespace( NS_FILE ) ) { $fileObj = wfFindFile( $title ); if ( $fileObj !== false ) { - $output = $fileObj->getSha1(); + // Convert the base-36 sha1 value obtained from database to base-16 + $output = Wikimedia\base_convert( $fileObj->getSha1(), 36, 16, 40 ); $pageInfo['header-basic'][] = [ $this->msg( 'pageinfo-file-hash' ), $output diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php index 1a126dba52..62d73f480c 100644 --- a/includes/api/ApiBase.php +++ b/includes/api/ApiBase.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -1408,7 +1404,7 @@ abstract class ApiBase extends ContextSource { 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; diff --git a/includes/api/ApiBlock.php b/includes/api/ApiBlock.php index df30a2de75..f4aea986f0 100644 --- a/includes/api/ApiBlock.php +++ b/includes/api/ApiBlock.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiCheckToken.php b/includes/api/ApiCheckToken.php index e1be8efad2..5d641d83e4 100644 --- a/includes/api/ApiCheckToken.php +++ b/includes/api/ApiCheckToken.php @@ -1,7 +1,5 @@ getTitle(); if ( isset( $this->props['ids'] ) ) { - $vals["{$prefix}id"] = $title->getArticleId(); + $vals["{$prefix}id"] = $title->getArticleID(); $vals["{$prefix}revid"] = $rev->getId(); } if ( isset( $this->props['title'] ) ) { diff --git a/includes/api/ApiDelete.php b/includes/api/ApiDelete.php index 96c291c660..e19f1f2216 100644 --- a/includes/api/ApiDelete.php +++ b/includes/api/ApiDelete.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiDisabled.php b/includes/api/ApiDisabled.php index 684c42547f..32111894b8 100644 --- a/includes/api/ApiDisabled.php +++ b/includes/api/ApiDisabled.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiEditPage.php b/includes/api/ApiEditPage.php index 26d4fd1e43..e887ef50f2 100644 --- a/includes/api/ApiEditPage.php +++ b/includes/api/ApiEditPage.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiEmailUser.php b/includes/api/ApiEmailUser.php index 84ea2662d3..535a3e8047 100644 --- a/includes/api/ApiEmailUser.php +++ b/includes/api/ApiEmailUser.php @@ -1,9 +1,5 @@ * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiExpandTemplates.php b/includes/api/ApiExpandTemplates.php index 7c86e09d3d..fe49b25937 100644 --- a/includes/api/ApiExpandTemplates.php +++ b/includes/api/ApiExpandTemplates.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFeedContributions.php b/includes/api/ApiFeedContributions.php index cae1e150ee..61a9035895 100644 --- a/includes/api/ApiFeedContributions.php +++ b/includes/api/ApiFeedContributions.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFileRevert.php b/includes/api/ApiFileRevert.php index 736898edcf..b68b948293 100644 --- a/includes/api/ApiFileRevert.php +++ b/includes/api/ApiFileRevert.php @@ -1,9 +1,5 @@ * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFormatBase.php b/includes/api/ApiFormatBase.php index 5e14e30710..18c36deb07 100644 --- a/includes/api/ApiFormatBase.php +++ b/includes/api/ApiFormatBase.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -69,8 +65,7 @@ abstract class ApiFormatBase extends ApiBase { * @note If $this->getIsWrappedHtml() || $this->getIsHtml(), you'll very * likely want to fall back to this class's version. * @since 1.27 - * @return string Generally this should be "api-result.$ext", and must be - * encoded for inclusion in a Content-Disposition header's filename parameter. + * @return string Generally this should be "api-result.$ext" */ public function getFilename() { if ( $this->getIsWrappedHtml() ) { @@ -216,10 +211,25 @@ abstract class ApiFormatBase extends ApiBase { // Set a Content-Disposition header so something downloading an API // response uses a halfway-sensible filename (T128209). + $header = 'Content-Disposition: inline'; $filename = $this->getFilename(); - $this->getMain()->getRequest()->response()->header( - "Content-Disposition: inline; filename=\"{$filename}\"" - ); + $compatFilename = mb_convert_encoding( $filename, 'ISO-8859-1' ); + if ( preg_match( '/^[0-9a-zA-Z!#$%&\'*+\-.^_`|~]+$/', $compatFilename ) ) { + $header .= '; filename=' . $compatFilename; + } else { + $header .= '; filename="' + . preg_replace( '/([\0-\x1f"\x5c\x7f])/', '\\\\$1', $compatFilename ) . '"'; + } + if ( $compatFilename !== $filename ) { + $value = "UTF-8''" . rawurlencode( $filename ); + // rawurlencode() encodes more characters than RFC 5987 specifies. Unescape the ones it allows. + $value = strtr( $value, [ + '%21' => '!', '%23' => '#', '%24' => '$', '%26' => '&', '%2B' => '+', '%5E' => '^', + '%60' => '`', '%7C' => '|', + ] ); + $header .= '; filename*=' . $value; + } + $this->getMain()->getRequest()->response()->header( $header ); } /** diff --git a/includes/api/ApiFormatFeedWrapper.php b/includes/api/ApiFormatFeedWrapper.php index 3ab5ab9e61..262eb1f760 100644 --- a/includes/api/ApiFormatFeedWrapper.php +++ b/includes/api/ApiFormatFeedWrapper.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFormatJson.php b/includes/api/ApiFormatJson.php index e5dafae602..6d8e74309f 100644 --- a/includes/api/ApiFormatJson.php +++ b/includes/api/ApiFormatJson.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFormatNone.php b/includes/api/ApiFormatNone.php index 91c73a1b58..602e3c18ce 100644 --- a/includes/api/ApiFormatNone.php +++ b/includes/api/ApiFormatNone.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFormatPhp.php b/includes/api/ApiFormatPhp.php index 671f356194..b05097afe3 100644 --- a/includes/api/ApiFormatPhp.php +++ b/includes/api/ApiFormatPhp.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFormatRaw.php b/includes/api/ApiFormatRaw.php index ebaeb2ce25..9ec4a2c3fb 100644 --- a/includes/api/ApiFormatRaw.php +++ b/includes/api/ApiFormatRaw.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiFormatXml.php b/includes/api/ApiFormatXml.php index e4dfda0f57..cc1bd820f0 100644 --- a/includes/api/ApiFormatXml.php +++ b/includes/api/ApiFormatXml.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiHelp.php b/includes/api/ApiHelp.php index 529b32cda4..8d24859078 100644 --- a/includes/api/ApiHelp.php +++ b/includes/api/ApiHelp.php @@ -1,9 +1,5 @@ @gmail.com", * Daniel Cannon (cannon dot danielc at gmail dot com) * diff --git a/includes/api/ApiLogout.php b/includes/api/ApiLogout.php index d56c096c7b..c663d1e4bb 100644 --- a/includes/api/ApiLogout.php +++ b/includes/api/ApiLogout.php @@ -1,9 +1,5 @@ @gmail.com", * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiMain.php b/includes/api/ApiMain.php index 82753a19f3..008015b881 100644 --- a/includes/api/ApiMain.php +++ b/includes/api/ApiMain.php @@ -1,7 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -57,72 +55,72 @@ class ApiMain extends ApiBase { * 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, ]; /** @@ -1039,7 +1037,7 @@ class ApiMain extends ApiBase { // None of the rest have any messages for non-error types } elseif ( $e instanceof UsageException ) { // User entered incorrect parameters - generate error response - $data = MediaWiki\quietCall( [ $e, 'getMessageArray' ] ); + $data = Wikimedia\quietCall( [ $e, 'getMessageArray' ] ); $code = $data['code']; $info = $data['info']; unset( $data['code'], $data['info'] ); @@ -1399,9 +1397,9 @@ class ApiMain extends ApiBase { $this->getRequest()->response()->statusHeader( 304 ); // Avoid outputting the compressed representation of a zero-length body - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); ini_set( 'zlib.output_compression', 0 ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); wfClearOutputBuffers(); return false; diff --git a/includes/api/ApiMergeHistory.php b/includes/api/ApiMergeHistory.php index 79e9909567..86b4427074 100644 --- a/includes/api/ApiMergeHistory.php +++ b/includes/api/ApiMergeHistory.php @@ -1,9 +1,5 @@ * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiModuleManager.php b/includes/api/ApiModuleManager.php index b5e47ac9c9..e02c862778 100644 --- a/includes/api/ApiModuleManager.php +++ b/includes/api/ApiModuleManager.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -82,12 +78,12 @@ class ApiModuleManager extends ContextSource { * @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 * diff --git a/includes/api/ApiMove.php b/includes/api/ApiMove.php index e7b280803e..281456434a 100644 --- a/includes/api/ApiMove.php +++ b/includes/api/ApiMove.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiOptions.php b/includes/api/ApiOptions.php index bb5a261728..4b76906030 100644 --- a/includes/api/ApiOptions.php +++ b/includes/api/ApiOptions.php @@ -1,9 +1,5 @@ setOption( $key, $value ); $changed = true; } else { - $this->addWarning( [ 'apiwarn-validationfailed', wfEscapeWikitext( $key ), $validation ] ); + $this->addWarning( [ 'apiwarn-validationfailed', wfEscapeWikiText( $key ), $validation ] ); } } diff --git a/includes/api/ApiPageSet.php b/includes/api/ApiPageSet.php index 774ea1ad5d..48303a5748 100644 --- a/includes/api/ApiPageSet.php +++ b/includes/api/ApiPageSet.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -1532,7 +1528,7 @@ class ApiPageSet extends ApiBase { $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; } } diff --git a/includes/api/ApiParamInfo.php b/includes/api/ApiParamInfo.php index 93fc51a7c6..bfd3d614b3 100644 --- a/includes/api/ApiParamInfo.php +++ b/includes/api/ApiParamInfo.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiParse.php b/includes/api/ApiParse.php index ec015da712..3326fab5e4 100644 --- a/includes/api/ApiParse.php +++ b/includes/api/ApiParse.php @@ -1,7 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -346,6 +344,8 @@ class ApiParse extends ApiBase { $result_array['text'] = $p_result->getText( [ 'allowTOC' => !$params['disabletoc'], 'enableSectionEditLinks' => !$params['disableeditsection'], + 'unwrap' => $params['wrapoutputclass'] === '', + 'deduplicateStyles' => !$params['disablestylededuplication'], ] ); $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text'; } @@ -540,9 +540,9 @@ class ApiParse extends ApiBase { if ( $params['disabletidy'] ) { $popts->setTidy( false ); } - $popts->setWrapOutputClass( - $params['wrapoutputclass'] === '' ? false : $params['wrapoutputclass'] - ); + if ( $params['wrapoutputclass'] !== '' ) { + $popts->setWrapOutputClass( $params['wrapoutputclass'] ); + } $reset = null; $suppressCache = false; @@ -878,6 +878,7 @@ class ApiParse extends ApiBase { 'disablelimitreport' => false, 'disableeditsection' => false, 'disabletidy' => false, + 'disablestylededuplication' => false, 'generatexml' => [ ApiBase::PARAM_DFLT => false, ApiBase::PARAM_HELP_MSG => [ diff --git a/includes/api/ApiPatrol.php b/includes/api/ApiPatrol.php index 06e8ae28c2..a20aca4db3 100644 --- a/includes/api/ApiPatrol.php +++ b/includes/api/ApiPatrol.php @@ -2,8 +2,6 @@ /** * API for MediaWiki 1.14+ * - * Created on Sep 2, 2008 - * * Copyright © 2008 Soxred93 soxred93@gmail.com, * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiProtect.php b/includes/api/ApiProtect.php index 1be4b10382..f67d3b3e0e 100644 --- a/includes/api/ApiProtect.php +++ b/includes/api/ApiProtect.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQuery.php b/includes/api/ApiQuery.php index 31bcc7a704..e49024d1ed 100644 --- a/includes/api/ApiQuery.php +++ b/includes/api/ApiQuery.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -44,26 +40,26 @@ class ApiQuery extends ApiBase { * @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, ]; /** @@ -71,41 +67,41 @@ class ApiQuery extends ApiBase { * @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, ]; /** @@ -113,12 +109,12 @@ class ApiQuery extends ApiBase { * @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, ]; /** diff --git a/includes/api/ApiQueryAllCategories.php b/includes/api/ApiQueryAllCategories.php index aa89158f90..4f833e0ce5 100644 --- a/includes/api/ApiQueryAllCategories.php +++ b/includes/api/ApiQueryAllCategories.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryAllDeletedRevisions.php b/includes/api/ApiQueryAllDeletedRevisions.php index 765b5c7f1d..32d081e439 100644 --- a/includes/api/ApiQueryAllDeletedRevisions.php +++ b/includes/api/ApiQueryAllDeletedRevisions.php @@ -1,7 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryAllMessages.php b/includes/api/ApiQueryAllMessages.php index 271d281124..40abcaf2d2 100644 --- a/includes/api/ApiQueryAllMessages.php +++ b/includes/api/ApiQueryAllMessages.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryAllPages.php b/includes/api/ApiQueryAllPages.php index a084279a2b..40909a49ce 100644 --- a/includes/api/ApiQueryAllPages.php +++ b/includes/api/ApiQueryAllPages.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryAllRevisions.php b/includes/api/ApiQueryAllRevisions.php index c8db6a1189..68236465d1 100644 --- a/includes/api/ApiQueryAllRevisions.php +++ b/includes/api/ApiQueryAllRevisions.php @@ -1,7 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -49,7 +45,7 @@ class ApiQueryAllUsers extends ApiQueryBase { $activeUserDays = $this->getConfig()->get( 'ActiveUserDays' ); $db = $this->getDB(); - $commentStore = new CommentStore( 'ipb_reason' ); + $commentStore = CommentStore::getStore(); $prop = $params['prop']; if ( !is_null( $prop ) ) { @@ -264,7 +260,7 @@ class ApiQueryAllUsers extends ApiQueryBase { $data['blockedby'] = $row->ipb_by_text; $data['blockedbyid'] = (int)$row->ipb_by; $data['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp ); - $data['blockreason'] = $commentStore->getComment( $row )->text; + $data['blockreason'] = $commentStore->getComment( 'ipb_reason', $row )->text; $data['blockexpiry'] = $row->ipb_expiry; } if ( $row->ipb_deleted ) { diff --git a/includes/api/ApiQueryBacklinks.php b/includes/api/ApiQueryBacklinks.php index 830cc48477..35cb83ace3 100644 --- a/includes/api/ApiQueryBacklinks.php +++ b/includes/api/ApiQueryBacklinks.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryBacklinksprop.php b/includes/api/ApiQueryBacklinksprop.php index ef02d095c8..fb90e25c38 100644 --- a/includes/api/ApiQueryBacklinksprop.php +++ b/includes/api/ApiQueryBacklinksprop.php @@ -2,8 +2,6 @@ /** * API module to handle links table back-queries * - * Created on Aug 19, 2014 - * * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryBase.php b/includes/api/ApiQueryBase.php index 179e6f7b25..84169cb843 100644 --- a/includes/api/ApiQueryBase.php +++ b/includes/api/ApiQueryBase.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -259,7 +255,7 @@ abstract class ApiQueryBase extends ApiBase { /** * Equivalent to addWhere(array($field => $value)) * @param string $field Field name - * @param string|string[] $value Value; ignored if null or empty array; + * @param string|string[] $value Value; ignored if null or empty array */ protected function addWhereFld( $field, $value ) { if ( $value !== null && !( is_array( $value ) && !$value ) ) { @@ -455,7 +451,7 @@ abstract class ApiQueryBase extends ApiBase { 'ipb_expiry', 'ipb_timestamp' ] ); - $commentQuery = CommentStore::newKey( 'ipb_reason' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'ipb_reason' ); $this->addTables( $commentQuery['tables'] ); $this->addFields( $commentQuery['fields'] ); $this->addJoinConds( $commentQuery['joins'] ); diff --git a/includes/api/ApiQueryBlocks.php b/includes/api/ApiQueryBlocks.php index 698c13c53d..10695b30ca 100644 --- a/includes/api/ApiQueryBlocks.php +++ b/includes/api/ApiQueryBlocks.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -37,7 +33,7 @@ class ApiQueryBlocks extends ApiQueryBase { public function execute() { $db = $this->getDB(); - $commentStore = new CommentStore( 'ipb_reason' ); + $commentStore = CommentStore::getStore(); $params = $this->extractRequestParams(); $this->requireMaxOneParameter( $params, 'users', 'ip' ); @@ -68,7 +64,7 @@ class ApiQueryBlocks extends ApiQueryBase { $fld_flags ); if ( $fld_reason ) { - $commentQuery = $commentStore->getJoin(); + $commentQuery = $commentStore->getJoin( 'ipb_reason' ); $this->addTables( $commentQuery['tables'] ); $this->addFields( $commentQuery['fields'] ); $this->addJoinConds( $commentQuery['joins'] ); @@ -212,7 +208,7 @@ class ApiQueryBlocks extends ApiQueryBase { $block['expiry'] = ApiResult::formatExpiry( $row->ipb_expiry ); } if ( $fld_reason ) { - $block['reason'] = $commentStore->getComment( $row )->text; + $block['reason'] = $commentStore->getComment( 'ipb_reason', $row )->text; } if ( $fld_range && !$row->ipb_auto ) { $block['rangestart'] = IP::formatHex( $row->ipb_range_start ); diff --git a/includes/api/ApiQueryCategories.php b/includes/api/ApiQueryCategories.php index f728dc5fa8..7b447cb942 100644 --- a/includes/api/ApiQueryCategories.php +++ b/includes/api/ApiQueryCategories.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryCategoryInfo.php b/includes/api/ApiQueryCategoryInfo.php index 25e9b27499..02361a2708 100644 --- a/includes/api/ApiQueryCategoryInfo.php +++ b/includes/api/ApiQueryCategoryInfo.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryCategoryMembers.php b/includes/api/ApiQueryCategoryMembers.php index e3265d1cdc..37d078873e 100644 --- a/includes/api/ApiQueryCategoryMembers.php +++ b/includes/api/ApiQueryCategoryMembers.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryContributors.php b/includes/api/ApiQueryContributors.php index f802d9ef8c..25b7c84028 100644 --- a/includes/api/ApiQueryContributors.php +++ b/includes/api/ApiQueryContributors.php @@ -2,8 +2,6 @@ /** * Query the list of contributors to a page * - * Created on Nov 14, 2013 - * * Copyright © 2013 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryDeletedRevisions.php b/includes/api/ApiQueryDeletedRevisions.php index 3339fec5e5..f57906593a 100644 --- a/includes/api/ApiQueryDeletedRevisions.php +++ b/includes/api/ApiQueryDeletedRevisions.php @@ -1,7 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -44,7 +40,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase { $user = $this->getUser(); $db = $this->getDB(); - $commentStore = new CommentStore( 'ar_comment' ); + $commentStore = CommentStore::getStore(); $params = $this->extractRequestParams( false ); $prop = array_flip( $params['prop'] ); $fld_parentid = isset( $prop['parentid'] ); @@ -121,7 +117,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase { $this->addFieldsIf( 'ar_sha1', $fld_sha1 ); if ( $fld_comment || $fld_parsedcomment ) { - $commentQuery = $commentStore->getJoin(); + $commentQuery = $commentStore->getJoin( 'ar_comment' ); $this->addTables( $commentQuery['tables'] ); $this->addFields( $commentQuery['fields'] ); $this->addJoinConds( $commentQuery['joins'] ); @@ -329,7 +325,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase { $anyHidden = true; } if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_COMMENT, $user ) ) { - $comment = $commentStore->getComment( $row )->text; + $comment = $commentStore->getComment( 'ar_comment', $row )->text; if ( $fld_comment ) { $rev['comment'] = $comment; } diff --git a/includes/api/ApiQueryDisabled.php b/includes/api/ApiQueryDisabled.php index a94af695b6..86100077a2 100644 --- a/includes/api/ApiQueryDisabled.php +++ b/includes/api/ApiQueryDisabled.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryDuplicateFiles.php b/includes/api/ApiQueryDuplicateFiles.php index 0eaeaece73..dfe3cf3543 100644 --- a/includes/api/ApiQueryDuplicateFiles.php +++ b/includes/api/ApiQueryDuplicateFiles.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryExtLinksUsage.php b/includes/api/ApiQueryExtLinksUsage.php index 43f41312fd..fc5d8a0425 100644 --- a/includes/api/ApiQueryExtLinksUsage.php +++ b/includes/api/ApiQueryExtLinksUsage.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryExternalLinks.php b/includes/api/ApiQueryExternalLinks.php index 71fd6d1b4b..fd196aab09 100644 --- a/includes/api/ApiQueryExternalLinks.php +++ b/includes/api/ApiQueryExternalLinks.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryFilearchive.php b/includes/api/ApiQueryFilearchive.php index 838fc2bda4..ebffb151c8 100644 --- a/includes/api/ApiQueryFilearchive.php +++ b/includes/api/ApiQueryFilearchive.php @@ -2,8 +2,6 @@ /** * API for MediaWiki 1.12+ * - * Created on May 10, 2010 - * * Copyright © 2010 Sam Reed * Copyright © 2008 Vasiliev Victor vasilvv@gmail.com, * based on ApiQueryAllPages.php @@ -43,7 +41,7 @@ class ApiQueryFilearchive extends ApiQueryBase { $user = $this->getUser(); $db = $this->getDB(); - $commentStore = new CommentStore( 'fa_description' ); + $commentStore = CommentStore::getStore(); $params = $this->extractRequestParams(); @@ -157,7 +155,7 @@ class ApiQueryFilearchive extends ApiQueryBase { if ( $fld_description && Revision::userCanBitfield( $row->fa_deleted, File::DELETED_COMMENT, $user ) ) { - $file['description'] = $commentStore->getComment( $row )->text; + $file['description'] = $commentStore->getComment( 'fa_description', $row )->text; if ( isset( $prop['parseddescription'] ) ) { $file['parseddescription'] = Linker::formatComment( $file['description'], $title ); diff --git a/includes/api/ApiQueryGeneratorBase.php b/includes/api/ApiQueryGeneratorBase.php index 5acd75f7ef..a7df33a195 100644 --- a/includes/api/ApiQueryGeneratorBase.php +++ b/includes/api/ApiQueryGeneratorBase.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryIWBacklinks.php b/includes/api/ApiQueryIWBacklinks.php index a10ba164a2..90aed6ecbb 100644 --- a/includes/api/ApiQueryIWBacklinks.php +++ b/includes/api/ApiQueryIWBacklinks.php @@ -2,8 +2,6 @@ /** * API for MediaWiki 1.17+ * - * Created on May 14, 2010 - * * Copyright © 2010 Sam Reed * Copyright © 2006 Yuri Astrakhan "@gmail.com" * diff --git a/includes/api/ApiQueryIWLinks.php b/includes/api/ApiQueryIWLinks.php index 9313af30ef..08c8abf163 100644 --- a/includes/api/ApiQueryIWLinks.php +++ b/includes/api/ApiQueryIWLinks.php @@ -2,8 +2,6 @@ /** * API for MediaWiki 1.17+ * - * Created on May 14, 2010 - * * Copyright © 2010 Sam Reed * Copyright © 2006 Yuri Astrakhan "@gmail.com" * diff --git a/includes/api/ApiQueryImageInfo.php b/includes/api/ApiQueryImageInfo.php index 0603923230..e447f4f487 100644 --- a/includes/api/ApiQueryImageInfo.php +++ b/includes/api/ApiQueryImageInfo.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -546,9 +542,9 @@ class ApiQueryImageInfo extends ApiQueryBase { } if ( $meta ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $metadata = unserialize( $file->getMetadata() ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $metadata && $version !== 'latest' ) { $metadata = $file->convertMetadataVersion( $metadata, $version ); } diff --git a/includes/api/ApiQueryImages.php b/includes/api/ApiQueryImages.php index 01a54de9e9..06a3ba08f0 100644 --- a/includes/api/ApiQueryImages.php +++ b/includes/api/ApiQueryImages.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryInfo.php b/includes/api/ApiQueryInfo.php index bff19780f6..5294b1d8e7 100644 --- a/includes/api/ApiQueryInfo.php +++ b/includes/api/ApiQueryInfo.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -107,15 +103,15 @@ class ApiQueryInfo extends ApiQueryBase { } $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 ] ); @@ -318,7 +314,7 @@ class ApiQueryInfo extends ApiQueryBase { $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 diff --git a/includes/api/ApiQueryLangBacklinks.php b/includes/api/ApiQueryLangBacklinks.php index fd67d7c464..9b993128fd 100644 --- a/includes/api/ApiQueryLangBacklinks.php +++ b/includes/api/ApiQueryLangBacklinks.php @@ -2,8 +2,6 @@ /** * API for MediaWiki 1.17+ * - * Created on May 14, 2011 - * * Copyright © 2011 Sam Reed * Copyright © 2006 Yuri Astrakhan "@gmail.com" * diff --git a/includes/api/ApiQueryLangLinks.php b/includes/api/ApiQueryLangLinks.php index df33d02724..2d8e44cda5 100644 --- a/includes/api/ApiQueryLangLinks.php +++ b/includes/api/ApiQueryLangLinks.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryLinks.php b/includes/api/ApiQueryLinks.php index 119db3e6a9..67bf619c89 100644 --- a/includes/api/ApiQueryLinks.php +++ b/includes/api/ApiQueryLinks.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryLogEvents.php b/includes/api/ApiQueryLogEvents.php index 3066720d1c..f3453001c4 100644 --- a/includes/api/ApiQueryLogEvents.php +++ b/includes/api/ApiQueryLogEvents.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -45,7 +41,7 @@ class ApiQueryLogEvents extends ApiQueryBase { public function execute() { $params = $this->extractRequestParams(); $db = $this->getDB(); - $this->commentStore = new CommentStore( 'log_comment' ); + $this->commentStore = CommentStore::getStore(); $this->requireMaxOneParameter( $params, 'title', 'prefix', 'namespace' ); $prop = array_flip( $params['prop'] ); @@ -97,7 +93,7 @@ class ApiQueryLogEvents extends ApiQueryBase { $this->addFieldsIf( 'log_params', $this->fld_details ); if ( $this->fld_comment || $this->fld_parsedcomment ) { - $commentQuery = $this->commentStore->getJoin(); + $commentQuery = $this->commentStore->getJoin( 'log_comment' ); $this->addTables( $commentQuery['tables'] ); $this->addFields( $commentQuery['fields'] ); $this->addJoinConds( $commentQuery['joins'] ); @@ -342,7 +338,7 @@ class ApiQueryLogEvents extends ApiQueryBase { $anyHidden = true; } if ( LogEventsList::userCan( $row, LogPage::DELETED_COMMENT, $user ) ) { - $comment = $this->commentStore->getComment( $row )->text; + $comment = $this->commentStore->getComment( 'log_comment', $row )->text; if ( $this->fld_comment ) { $vals['comment'] = $comment; } diff --git a/includes/api/ApiQueryPagePropNames.php b/includes/api/ApiQueryPagePropNames.php index 2d56983c61..f280ef0615 100644 --- a/includes/api/ApiQueryPagePropNames.php +++ b/includes/api/ApiQueryPagePropNames.php @@ -1,7 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -59,8 +55,8 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase { $this->addFieldsIf( 'pt_create_perm', isset( $prop['level'] ) ); if ( isset( $prop['comment'] ) || isset( $prop['parsedcomment'] ) ) { - $commentStore = new CommentStore( 'pt_reason' ); - $commentQuery = $commentStore->getJoin(); + $commentStore = CommentStore::getStore(); + $commentQuery = $commentStore->getJoin( 'pt_reason' ); $this->addTables( $commentQuery['tables'] ); $this->addFields( $commentQuery['fields'] ); $this->addJoinConds( $commentQuery['joins'] ); @@ -134,12 +130,12 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase { } if ( isset( $prop['comment'] ) ) { - $vals['comment'] = $commentStore->getComment( $row )->text; + $vals['comment'] = $commentStore->getComment( 'pt_reason', $row )->text; } if ( isset( $prop['parsedcomment'] ) ) { $vals['parsedcomment'] = Linker::formatComment( - $commentStore->getComment( $row )->text, $titles + $commentStore->getComment( 'pt_reason', $row )->text, $titles ); } diff --git a/includes/api/ApiQueryQueryPage.php b/includes/api/ApiQueryQueryPage.php index 46c2265501..a828e11772 100644 --- a/includes/api/ApiQueryQueryPage.php +++ b/includes/api/ApiQueryQueryPage.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryRandom.php b/includes/api/ApiQueryRandom.php index ce62226fc6..636191d387 100644 --- a/includes/api/ApiQueryRandom.php +++ b/includes/api/ApiQueryRandom.php @@ -1,10 +1,6 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -65,7 +61,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { } $this->tokenFunctions = [ - 'patrol' => [ 'ApiQueryRecentChanges', 'getPatrolToken' ] + 'patrol' => [ self::class, 'getPatrolToken' ] ]; Hooks::run( 'APIQueryRecentChangesTokens', [ &$this->tokenFunctions ] ); @@ -354,8 +350,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { $this->token = $params['token']; if ( $this->fld_comment || $this->fld_parsedcomment || $this->token ) { - $this->commentStore = new CommentStore( 'rc_comment' ); - $commentQuery = $this->commentStore->getJoin(); + $this->commentStore = CommentStore::getStore(); + $commentQuery = $this->commentStore->getJoin( 'rc_comment' ); $this->addTables( $commentQuery['tables'] ); $this->addFields( $commentQuery['fields'] ); $this->addJoinConds( $commentQuery['joins'] ); @@ -510,7 +506,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { $anyHidden = true; } if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_COMMENT, $user ) ) { - $comment = $this->commentStore->getComment( $row )->text; + $comment = $this->commentStore->getComment( 'rc_comment', $row )->text; if ( $this->fld_comment ) { $vals['comment'] = $comment; } diff --git a/includes/api/ApiQueryRevisions.php b/includes/api/ApiQueryRevisions.php index a04b7c545c..ef0223aae5 100644 --- a/includes/api/ApiQueryRevisions.php +++ b/includes/api/ApiQueryRevisions.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -60,7 +56,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase { } $this->tokenFunctions = [ - 'rollback' => [ 'ApiQueryRevisions', 'getRollbackToken' ] + 'rollback' => [ self::class, 'getRollbackToken' ] ]; Hooks::run( 'APIQueryRevisionsTokens', [ &$this->tokenFunctions ] ); diff --git a/includes/api/ApiQueryRevisionsBase.php b/includes/api/ApiQueryRevisionsBase.php index 2ffd02488b..f888434da8 100644 --- a/includes/api/ApiQueryRevisionsBase.php +++ b/includes/api/ApiQueryRevisionsBase.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQuerySearch.php b/includes/api/ApiQuerySearch.php index 2c681f57af..7d46a5fb08 100644 --- a/includes/api/ApiQuerySearch.php +++ b/includes/api/ApiQuerySearch.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php index 6bab8269a6..f924736de0 100644 --- a/includes/api/ApiQuerySiteinfo.php +++ b/includes/api/ApiQuerySiteinfo.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -852,7 +848,7 @@ class ApiQuerySiteinfo extends ApiQueryBase { 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' ); diff --git a/includes/api/ApiQueryTags.php b/includes/api/ApiQueryTags.php index b340b57d79..ed5fe8a5c3 100644 --- a/includes/api/ApiQueryTags.php +++ b/includes/api/ApiQueryTags.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -45,7 +41,7 @@ class ApiQueryContributions extends ApiQueryBase { // Parse some parameters $this->params = $this->extractRequestParams(); - $this->commentStore = new CommentStore( 'rev_comment' ); + $this->commentStore = CommentStore::getStore(); $prop = array_flip( $this->params['prop'] ); $this->fld_ids = isset( $prop['ids'] ); @@ -349,7 +345,7 @@ class ApiQueryContributions extends ApiQueryBase { $this->addFieldsIf( 'rc_patrolled', $this->fld_patrolled ); if ( $this->fld_comment || $this->fld_parsedcomment ) { - $commentQuery = $this->commentStore->getJoin(); + $commentQuery = $this->commentStore->getJoin( 'rev_comment' ); $this->addTables( $commentQuery['tables'] ); $this->addFields( $commentQuery['fields'] ); $this->addJoinConds( $commentQuery['joins'] ); @@ -436,7 +432,7 @@ class ApiQueryContributions extends ApiQueryBase { ); if ( $userCanView ) { - $comment = $this->commentStore->getComment( $row )->text; + $comment = $this->commentStore->getComment( 'rev_comment', $row )->text; if ( $this->fld_comment ) { $vals['comment'] = $comment; } diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php index 036515d6f5..fa151c9851 100644 --- a/includes/api/ApiQueryUserInfo.php +++ b/includes/api/ApiQueryUserInfo.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php index 8fc99bbcf9..824c4d5223 100644 --- a/includes/api/ApiQueryUsers.php +++ b/includes/api/ApiQueryUsers.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -77,7 +73,7 @@ class ApiQueryUsers extends ApiQueryBase { } $this->tokenFunctions = [ - 'userrights' => [ 'ApiQueryUsers', 'getUserrightsToken' ], + 'userrights' => [ self::class, 'getUserrightsToken' ], ]; Hooks::run( 'APIQueryUsersTokens', [ &$this->tokenFunctions ] ); @@ -99,7 +95,7 @@ class ApiQueryUsers extends ApiQueryBase { public function execute() { $db = $this->getDB(); - $commentStore = new CommentStore( 'ipb_reason' ); + $commentStore = CommentStore::getStore(); $params = $this->extractRequestParams(); $this->requireMaxOneParameter( $params, 'userids', 'users' ); @@ -239,7 +235,8 @@ class ApiQueryUsers extends ApiQueryBase { $data[$key]['blockedby'] = $row->ipb_by_text; $data[$key]['blockedbyid'] = (int)$row->ipb_by; $data[$key]['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp ); - $data[$key]['blockreason'] = $commentStore->getComment( $row )->text; + $data[$key]['blockreason'] = $commentStore->getComment( 'ipb_reason', $row ) + ->text; $data[$key]['blockexpiry'] = $row->ipb_expiry; } diff --git a/includes/api/ApiQueryWatchlist.php b/includes/api/ApiQueryWatchlist.php index 710550abec..69f1838786 100644 --- a/includes/api/ApiQueryWatchlist.php +++ b/includes/api/ApiQueryWatchlist.php @@ -1,9 +1,5 @@ @gmail.com" * * This program is free software; you can redistribute it and/or modify @@ -91,7 +87,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { } if ( $this->fld_comment || $this->fld_parsedcomment ) { - $this->commentStore = new CommentStore( 'rc_comment' ); + $this->commentStore = CommentStore::getStore(); } } @@ -361,7 +357,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { Revision::DELETED_COMMENT, $user ) ) { - $comment = $this->commentStore->getComment( $recentChangeInfo )->text; + $comment = $this->commentStore->getComment( 'rc_comment', $recentChangeInfo )->text; if ( $this->fld_comment ) { $vals['comment'] = $comment; } diff --git a/includes/api/ApiQueryWatchlistRaw.php b/includes/api/ApiQueryWatchlistRaw.php index b0b1cde92b..0adbfdbfd3 100644 --- a/includes/api/ApiQueryWatchlistRaw.php +++ b/includes/api/ApiQueryWatchlistRaw.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiRevisionDelete.php b/includes/api/ApiRevisionDelete.php index d7bc931e28..9a793e2f99 100644 --- a/includes/api/ApiRevisionDelete.php +++ b/includes/api/ApiRevisionDelete.php @@ -1,7 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiSerializable.php b/includes/api/ApiSerializable.php index a41f655c94..31d00cc83c 100644 --- a/includes/api/ApiSerializable.php +++ b/includes/api/ApiSerializable.php @@ -1,7 +1,5 @@ " * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiTokens.php b/includes/api/ApiTokens.php index fc2951a9db..ff1914c870 100644 --- a/includes/api/ApiTokens.php +++ b/includes/api/ApiTokens.php @@ -1,9 +1,5 @@ [ '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 ] ); diff --git a/includes/api/ApiUnblock.php b/includes/api/ApiUnblock.php index 887edaae81..b748cb3288 100644 --- a/includes/api/ApiUnblock.php +++ b/includes/api/ApiUnblock.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiUndelete.php b/includes/api/ApiUndelete.php index 3aa7b608dc..ee5c3a2f54 100644 --- a/includes/api/ApiUndelete.php +++ b/includes/api/ApiUndelete.php @@ -1,9 +1,5 @@ .@gmail.com" * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/ApiUpload.php b/includes/api/ApiUpload.php index cfe1968938..93e432b951 100644 --- a/includes/api/ApiUpload.php +++ b/includes/api/ApiUpload.php @@ -1,9 +1,5 @@ * * This program is free software; you can redistribute it and/or modify @@ -728,26 +724,26 @@ class ApiUpload extends ApiBase { */ 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: diff --git a/includes/api/ApiWatch.php b/includes/api/ApiWatch.php index efe21f11d6..38be178bdd 100644 --- a/includes/api/ApiWatch.php +++ b/includes/api/ApiWatch.php @@ -1,9 +1,5 @@ @gmail.com", * * This program is free software; you can redistribute it and/or modify diff --git a/includes/api/i18n/ar.json b/includes/api/i18n/ar.json index 44be54691d..57d4b05200 100644 --- a/includes/api/i18n/ar.json +++ b/includes/api/i18n/ar.json @@ -10,9 +10,11 @@ "محمد أحمد عبد الفتاح", "ديفيد", "ASHmed", - "Yasser Yousssef" + "Yasser Yousssef", + "Azouz.anis" ] }, + "apihelp-main-extended-description": "
\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
\nStatus: يجب أن تعمل جميع الميزات المعروضة في هذه الصفحة، إلا أن واجهة برمجة التطبيقات لا تزال قيد التطوير النشط، وقد تتغير في أي وقت. الاشتراك في\nErroneous requests:عند إرسال طلبات خاطئة إلى api, فالـHTTP سيتم إرسال رأس مع المفتاح \"MediaWiki-API-Error\" ومن ثم سيتم تعيين قيمة رأس ورمز الخطأ المرسل مرة أخرى إلى نفس القيمة. لمزيد من المعلومات، راجع [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n

Testing: لسهولة إختبار طلبات API، انظر [[Special:ApiSandbox]].

", "apihelp-main-param-action": "أي فعل للعمل.", "apihelp-main-param-format": "صيغة الخرج.", "apihelp-main-param-assertuser": "التحقق من أن المستخدم الحالي هو المستخدم المسمى.", diff --git a/includes/api/i18n/cs.json b/includes/api/i18n/cs.json index ea42e243ea..d7648b1cec 100644 --- a/includes/api/i18n/cs.json +++ b/includes/api/i18n/cs.json @@ -11,10 +11,11 @@ "Danny B.", "LordMsz", "Dvorapa", - "Matěj Suchánek" + "Matěj Suchánek", + "Ilimanaq29" ] }, - "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentace]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n
\nStav: Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\nChybné požadavky: Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:Special:MyLanguage/API:Errors_and_warnings|v dokumentaci]].\n\nTestování: Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentace]]\n* [[mw:Special:MyLanguage/API:FAQ|Otázky a odpovědi]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n
\nStav: Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\nChybné požadavky: Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:Special:MyLanguage/API:Errors_and_warnings|v dokumentaci]].\n\nTestování: Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].", "apihelp-main-param-action": "Která akce se má provést.", "apihelp-main-param-format": "Formát výstupu.", "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „maxlag“ s hlášením typu „Waiting for $host: $lag seconds lagged“.
Více informací najdete v [[mw:Special:MyLanguage/Manual:Maxlag_parameter|příručce]].", @@ -161,6 +162,7 @@ "apihelp-options-example-reset": "Vrátit všechna nastavení.", "apihelp-parse-param-summary": "Shrnutí, které se má parsovat.", "apihelp-parse-paramvalue-prop-displaytitle": "Přidává název parsovaného wikitextu.", + "apihelp-parse-param-disablestylededuplication": "Neodstraňovat duplicitní in-line styly ve výstupu parseru.", "apihelp-parse-param-preview": "Parsovat v režimu náhledu.", "apihelp-parse-example-page": "Parsovat stránku.", "apihelp-parse-example-text": "Parsovat wikitext.", @@ -287,6 +289,7 @@ "api-help-permissions-granted-to": "Uděleno {{PLURAL:$1|skupině|skupinám}}: $2", "api-help-right-apihighlimits": "Používání vyšších limitů v API dotazech (pomalé dotazy: $1, rychlé dotazy: $2). Limity pro pomalé dotazy se vztahují i na vícehodnotové parametry.", "api-help-open-in-apisandbox": "[otevřít v pískovišti]", + "apierror-blocked": "Byla vám zablokována možnost editace.", "apierror-mustbeloggedin": "Abyste mohli $1, musíte být přihlášeni.", "apierror-nosuchsection-what": "$2 neobsahuje sekci $1.", "apierror-sectionsnotsupported-what": "$1 nepodporuje sekce.", diff --git a/includes/api/i18n/de.json b/includes/api/i18n/de.json index 218454d5a1..37a259d52e 100644 --- a/includes/api/i18n/de.json +++ b/includes/api/i18n/de.json @@ -22,7 +22,7 @@ "Tacsipacsi" ] }, - "apihelp-main-extended-description": "
\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
\nStatus: 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\nFehlerhafte Anfragen: 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\nTesten: Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\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
\nStatus: 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\nFehlerhafte Anfragen: 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

Testen: Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].

", "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 maxlag zurückgegeben mit einer Nachricht wie Waiting for $host: $lag seconds lagged.
Siehe [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Handbuch: Maxlag parameter]] für weitere Informationen.", @@ -509,6 +509,7 @@ "apihelp-query+allrevisions-example-ns-main": "Liste die ersten 50 Bearbeitungen im Hauptnamensraum auf.", "apihelp-query+mystashedfiles-param-prop": "Welche Eigenschaften für die Dateien abgerufen werden sollen.", "apihelp-query+mystashedfiles-paramvalue-prop-size": "Ruft die Dateigröße und Bildabmessungen ab.", + "apihelp-query+mystashedfiles-paramvalue-prop-type": "Ruft den MIME- und Medientyp der Datei ab.", "apihelp-query+mystashedfiles-param-limit": "Wie viele Dateien zurückgegeben werden sollen.", "apihelp-query+alltransclusions-summary": "Liste alle Transklusionen auf (eingebettete Seiten die {{x}} benutzen), einschließlich nicht vorhandener.", "apihelp-query+alltransclusions-param-from": "Der Titel der Transklusion bei dem die Auflistung beginnen soll.", diff --git a/includes/api/i18n/en.json b/includes/api/i18n/en.json index a897f06658..168901971b 100644 --- a/includes/api/i18n/en.json +++ b/includes/api/i18n/en.json @@ -7,7 +7,7 @@ }, "apihelp-main-summary": "", - "apihelp-main-extended-description": "
\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
\nStatus: 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\nErroneous requests: 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\nTesting: For ease of testing API requests, see [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\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
\nStatus: 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\nErroneous requests: 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

Testing: For ease of testing API requests, see [[Special:ApiSandbox]].

", "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 maxlag is returned with a message like Waiting for $host: $lag seconds lagged.
See [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] for more information.", @@ -391,6 +391,7 @@ "apihelp-parse-param-disablepp": "Use $1disablelimitreport instead.", "apihelp-parse-param-disableeditsection": "Omit edit section links from the parser output.", "apihelp-parse-param-disabletidy": "Do not run HTML cleanup (e.g. tidy) on the parser output.", + "apihelp-parse-param-disablestylededuplication": "Do not deduplicate inline stylesheets in the parser output.", "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model $1; replaced by $2prop=parsetree).", "apihelp-parse-param-preview": "Parse in preview mode.", "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).", diff --git a/includes/api/i18n/fa.json b/includes/api/i18n/fa.json index 5af3bda008..a799d00f7d 100644 --- a/includes/api/i18n/fa.json +++ b/includes/api/i18n/fa.json @@ -191,6 +191,7 @@ "apihelp-opensearch-param-suggest": "کاری نکنید اگر [[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]] false است.", "apihelp-opensearch-param-format": "فرمت خروجی.", "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با Te آغاز می‌شوند", + "apihelp-options-summary": "تغییر ترجیحات کاربر جاری", "apihelp-options-param-reset": "ترجیحات را به مقادیر پیش فرض سایت بازمی گرداند.", "apihelp-options-example-reset": "بازنشانی همه تنظیمات.", "apihelp-paraminfo-param-helpformat": "ساختار راهنمای رشته‌ها", diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json index 2f27b58110..3e5fb41913 100644 --- a/includes/api/i18n/fr.json +++ b/includes/api/i18n/fr.json @@ -33,7 +33,7 @@ "Kenjiraw" ] }, - "apihelp-main-extended-description": "
\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
\nÉtat : 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\nRequêtes erronées : 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\nTest : Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\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
\nÉtat : 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\nRequêtes erronées : 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

Test : Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].

", "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 maxlag est renvoyé avec un message tel que Attente de $host : $lag secondes de délai.
Voyez [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.", @@ -387,6 +387,7 @@ "apihelp-parse-param-disablepp": "Utiliser $1disablelimitreport à la place.", "apihelp-parse-param-disableeditsection": "Omettre les liens de modification de section de la sortie de l’analyseur.", "apihelp-parse-param-disabletidy": "Ne pas exécuter de nettoyage du code HTML (par exemple, réagencer) sur la sortie de l'analyseur.", + "apihelp-parse-param-disablestylededuplication": "Ne pas dupliquer les feuilles de style incluses, dans la sortie de l'analyseur.", "apihelp-parse-param-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu $1 ; remplacé par $2prop=parsetree).", "apihelp-parse-param-preview": "Analyser en mode aperçu.", "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).", diff --git a/includes/api/i18n/he.json b/includes/api/i18n/he.json index 109ea0e82a..2e689461ad 100644 --- a/includes/api/i18n/he.json +++ b/includes/api/i18n/he.json @@ -1491,6 +1491,8 @@ "api-help-param-direction": "באיזה כיוון למנות:\n;newer:לרשום את הישנים ביותר בהתחלה. לתשומת לבך: $1start חייב להיות לפני $1end.\n;older:לרשום את החדשים ביותר בהתחלה (בררת מחדל). לתשומת לבך: $1start חייב להיות אחרי $1end.", "api-help-param-continue": "כשיש עוד תוצאות, להשתמש בזה בשביל להמשיך.", "api-help-param-no-description": "(ללא תיאור)", + "api-help-param-maxbytes": "לא יכול להיות ארוך {{PLURAL:$1|מבית אחד|מ־$1 בתים}}.", + "api-help-param-maxchars": "לא יכול להיות ארוך {{PLURAL:$1|מתו אחד|מ־$1 תווים}}.", "api-help-examples": "{{PLURAL:$1|דוגמה|דוגמאות}}:", "api-help-permissions": "{{PLURAL:$1|הרשאה|הרשאות}}:", "api-help-permissions-granted-to": "{{PLURAL:$1|הוענק ל|הוענקו ל}}: $2", diff --git a/includes/api/i18n/hu.json b/includes/api/i18n/hu.json index 02915a743a..7c03097460 100644 --- a/includes/api/i18n/hu.json +++ b/includes/api/i18n/hu.json @@ -10,7 +10,7 @@ "Dj" ] }, - "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentáció]]\n* [[mw:Special:MyLanguage/API:FAQ|GYIK]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Levelezőlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-bejelentések]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Hibabejelentések és kérések]\n
\nStátusz: Minden ezen a lapon látható funkciónak működnie kell, de az API jelenleg is aktív fejlesztés alatt áll, és bármikor változhat. Iratkozz fel a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce levelezőlistára] a frissítések követéséhez.\n\nHibás kérések: Ha az API hibás kérést kap, egy HTTP-fejlécet küld vissza „MediaWiki-API-Error” kulccsal, és a fejléc értéke és a visszaküldött hibakód ugyanarra az értékre lesz állítva. További információért lásd: [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Hibák és figyelmeztetések]].\n\nTesztelés: Az API-kérések könnyebb teszteléséhez használható az [[Special:ApiSandbox|API-homokozó]].", + "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentáció]]\n* [[mw:Special:MyLanguage/API:FAQ|GYIK]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Levelezőlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-bejelentések]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Hibabejelentések és kérések]\n
\nStátusz: Minden ezen a lapon látható funkciónak működnie kell, de az API jelenleg is aktív fejlesztés alatt áll, és bármikor változhat. Iratkozz fel a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce levelezőlistára] a frissítések követéséhez.\n\nHibás kérések: Ha az API hibás kérést kap, egy HTTP-fejlécet küld vissza „MediaWiki-API-Error” kulccsal, és a fejléc értéke és a visszaküldött hibakód ugyanarra az értékre lesz állítva. További információért lásd: [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Hibák és figyelmeztetések]].\n\n

Tesztelés: Az API-kérések könnyebb teszteléséhez használható az [[Special:ApiSandbox|API-homokozó]].

", "apihelp-main-param-action": "Milyen műveletet hajtson végre.", "apihelp-main-param-format": "A kimenet formátuma.", "apihelp-main-param-smaxage": "Az s-maxage gyorsítótár-vezérlő HTTP-fejléc beállítása ennyi másodpercre. A hibák soha nincsenek gyorsítótárazva.", diff --git a/includes/api/i18n/it.json b/includes/api/i18n/it.json index 568203622f..25da0e6e4b 100644 --- a/includes/api/i18n/it.json +++ b/includes/api/i18n/it.json @@ -19,7 +19,7 @@ "Margherita.mignanelli" ] }, - "apihelp-main-extended-description": "
\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
\nStato: 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\nIstruzioni sbagliate: 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\nTest: per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\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
\nStato: 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\nIstruzioni sbagliate: 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

Test: per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].

", "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 user, o che abbia i permessi di bot se si è impostato bot.", diff --git a/includes/api/i18n/ja.json b/includes/api/i18n/ja.json index 094c406164..f51b03fe0c 100644 --- a/includes/api/i18n/ja.json +++ b/includes/api/i18n/ja.json @@ -15,7 +15,7 @@ "Omotecho" ] }, - "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|説明文書]]\n* [[mw:Special:MyLanguage/API:FAQ|よくある質問]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api メーリングリスト]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグの報告とリクエスト]\n
\n状態: このページに表示されている機能は全て動作するはずですが、この API は未だ活発に開発されており、変更される可能性があります。アップデートの通知を受け取るには、[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n誤ったリクエスト: 誤ったリクエストが API に送られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]] を参照してください。\n\nテスト: API のリクエストのテストは、[[Special:ApiSandbox]]で簡単に行えます。", + "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|説明文書]]\n* [[mw:Special:MyLanguage/API:FAQ|よくある質問]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api メーリングリスト]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグの報告とリクエスト]\n
\n状態: このページに表示されている機能は全て動作するはずですが、この API は未だ活発に開発されており、変更される可能性があります。アップデートの通知を受け取るには、[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n誤ったリクエスト: 誤ったリクエストが API に送られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]] を参照してください。\n\n

テスト: API のリクエストのテストは、[[Special:ApiSandbox]]で簡単に行えます。

", "apihelp-main-param-action": "実行する操作です。", "apihelp-main-param-format": "出力する形式です。", "apihelp-main-param-smaxage": "s-maxage HTTP キャッシュ コントロール ヘッダー に、この秒数を設定します。エラーがキャッシュされることはありません。", diff --git a/includes/api/i18n/pt-br.json b/includes/api/i18n/pt-br.json index 1688438bc5..706b93c3f2 100644 --- a/includes/api/i18n/pt-br.json +++ b/includes/api/i18n/pt-br.json @@ -17,7 +17,7 @@ "Hamilton Abreu" ] }, - "apihelp-main-extended-description": "
\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 Bugs & solicitações]\n
\nStatus: Todos os recursos exibidos nesta página devem estar funcionando, mas a API ainda está em desenvolvimento ativo e pode mudar a qualquer momento. Inscrever-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para aviso de atualizações.\n\nRequisições incorretas: Quando requisições erradas são enviadas para a API, um cabeçalho HTTP será enviado com a chave \"MediaWiki-API-Error\" e então o valor do cabeçalho e o código de erro enviados de volta serão definidos para o mesmo valor. Para mais informações, veja [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Erros e avisos]].\n\nTestando: Para facilitar o teste das requisições da API, consulte [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\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
\nEstado: 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\nPedidos incorretos: 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

\nTestes: Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].\n

", "apihelp-main-param-action": "Qual ação executar.", "apihelp-main-param-format": "O formato da saída.", "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki está instalado em um cluster replicado no banco de dados. Para salvar as ações que causam mais atraso na replicação do site, esse parâmetro pode fazer o cliente aguardar até que o atraso da replicação seja menor do que o valor especificado. Em caso de atraso excessivo, o código de erro maxlag é retornado com uma mensagem como Waiting for $host: $lag seconds lagged.
Veja [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] para mais informações.", diff --git a/includes/api/i18n/pt.json b/includes/api/i18n/pt.json index f4a4662c63..aa697fbdb9 100644 --- a/includes/api/i18n/pt.json +++ b/includes/api/i18n/pt.json @@ -8,13 +8,14 @@ "Hamilton Abreu", "Mansil", "Felipe L. Ewald", - "Athena in Wonderland" + "Athena in Wonderland", + "Waldir" ] }, - "apihelp-main-extended-description": "
\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
\nEstado: 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\nPedidos incorretos: 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\nTestes: Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].", + "apihelp-main-extended-description": "
\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
\nEstado: 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\nPedidos incorretos: 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

\nTestes: Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].\n

", "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 maxlag é devolvido com uma mensagem como À espera do servidor $host: $lag segundos de atraso.
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 maxlag é devolvido com uma mensagem como À espera do servidor $host: $lag segundos de atraso.
Consulte [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Parâmetro maxlag]] para mais informações.", "apihelp-main-param-smaxage": "Definir no cabeçalho HTTP s-maxage 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 max-age 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 user, verificar que o utilizador está autenticado. Se definido com o valor bot, verificar que o utilizador tem o privilégio de conta robô.", @@ -303,7 +304,7 @@ "apihelp-opensearch-example-te": "Encontrar as páginas que começam por Te.", "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 userjs- (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 $1reset 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 (|), 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 $1optionvalue.", @@ -401,7 +402,7 @@ "apihelp-purge-example-simple": "Purgar as páginas Main Page e API.", "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.", @@ -410,7 +411,7 @@ "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 query-continue 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 Main Page.", + "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 Main Page.", "apihelp-query-example-allpages": "Obter as revisões das páginas que começam por API/.", "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.", @@ -490,7 +491,7 @@ "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. * (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.).", @@ -719,7 +720,7 @@ "apihelp-query+embeddedin-example-simple": "Mostrar as páginas que transcluem Template:Stub.", "apihelp-query+embeddedin-example-generator": "Obter informação sobre as páginas que transcluem Template:Stub.", "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 $1query está definido, o protocolo é http. Deixe este parâmetro e $1query 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.", @@ -839,7 +840,7 @@ "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 Main Page.", "apihelp-query+info-example-protection": "Obter informação geral e de proteção sobre a página Main Page.", - "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 $1blprefix.", @@ -884,10 +885,10 @@ "apihelp-query+langlinks-example-simple": "Obter as hiperligações interlínguas da página Main Page.", "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 Main Page.", + "apihelp-query+links-example-simple": "Obter as hiperligações da página Main Page.", "apihelp-query+links-example-generator": "Obter informação sobre as páginas ligadas na página Main Page.", "apihelp-query+links-example-namespaces": "Obter as hiperligações da página Main Page 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.", @@ -1083,14 +1084,14 @@ "apihelp-query+search-example-simple": "Pesquisar meaning.", "apihelp-query+search-example-text": "Pesquisar meaning nos textos.", "apihelp-query+search-example-generator": "Obter informação sobre as páginas devolvidas por uma pesquisa do termo meaning.", - "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 $1inlanguagecode).", "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.", @@ -1106,14 +1107,14 @@ "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 [[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]).", "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.", diff --git a/includes/api/i18n/qqq.json b/includes/api/i18n/qqq.json index 1e4bfc8d29..e76988058b 100644 --- a/includes/api/i18n/qqq.json +++ b/includes/api/i18n/qqq.json @@ -371,6 +371,7 @@ "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}", "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}", "apihelp-parse-param-disabletidy": "{{doc-apihelp-param|parse|disabletidy}}", + "apihelp-parse-param-disablestylededuplication": "{{doc-apihelp-param|parse|disablestylededuplication}}", "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}", "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}", "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}", diff --git a/includes/api/i18n/ru.json b/includes/api/i18n/ru.json index b45300f1f3..9ee35274fc 100644 --- a/includes/api/i18n/ru.json +++ b/includes/api/i18n/ru.json @@ -30,7 +30,7 @@ "Jack who built the house" ] }, - "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Документация]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n
\nСтатус: Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\nОшибочные запросы: Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\nТестирование: для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Документация]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n
\nСтатус: Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\nОшибочные запросы: Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n

Тестирование: для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].

", "apihelp-main-param-action": "Действие, которое следует выполнить.", "apihelp-main-param-format": "Формат вывода.", "apihelp-main-param-maxlag": "Значение максимального отставания может использоваться, когда MediaWiki установлена на кластер из реплицируемых баз данных. Чтобы избежать ухудшения ситуации с отставанием репликации сайта, этот параметр может заставить клиента ждать, когда задержка репликации станет ниже указанного значения. В случае чрезмерной задержки возвращается код ошибки «maxlag» с сообщением «Waiting for $host: $lag seconds lagged».
См. подробнее на странице с описанием [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: параметра Maxlag]].", diff --git a/includes/api/i18n/sv.json b/includes/api/i18n/sv.json index b1df86efee..8e5228a7d4 100644 --- a/includes/api/i18n/sv.json +++ b/includes/api/i18n/sv.json @@ -19,7 +19,7 @@ "Bengtsson96" ] }, - "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Vanliga frågor]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Sändlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-nyheter]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Buggar och begäran]\n
\nStatus: Alla funktioner som visas på denna sida bör fungera, men API:et är fortfarande under utveckling och kan ändras när som helst. Prenumerera på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ sändlistan mediawiki-api-announce] för uppdateringsaviseringar.\n\nFelaktiga begäran: När felaktiga begäran skickas till API:et kommer en HTTP-header skickas med nyckeln \"MediaWiki-API-Error\" och sedan kommer både värdet i headern och felkoden som skickades tillbaka anges som samma värde. För mer information se [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fel och varningar]].\n\nTestning: För enkelt testning av API-begäran, se [[Special:ApiSandbox]].", + "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Vanliga frågor]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Sändlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-nyheter]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Buggar och begäran]\n
\nStatus: Alla funktioner som visas på denna sida bör fungera, men API:et är fortfarande under utveckling och kan ändras när som helst. Prenumerera på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ sändlistan mediawiki-api-announce] för uppdateringsaviseringar.\n\nFelaktiga begäran: När felaktiga begäran skickas till API:et kommer en HTTP-header skickas med nyckeln \"MediaWiki-API-Error\" och sedan kommer både värdet i headern och felkoden som skickades tillbaka anges som samma värde. För mer information se [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fel och varningar]].\n\n

Testning: För enkelt testning av API-begäran, se [[Special:ApiSandbox]].

", "apihelp-main-param-action": "Vilken åtgärd som ska utföras.", "apihelp-main-param-format": "Formatet för utdata.", "apihelp-main-param-smaxage": "Ange headervärdet s-maxage till så här många sekunder. Fel cachelagras aldrig.", diff --git a/includes/api/i18n/zh-hans.json b/includes/api/i18n/zh-hans.json index bb87dd1781..c081ffc69c 100644 --- a/includes/api/i18n/zh-hans.json +++ b/includes/api/i18n/zh-hans.json @@ -26,7 +26,7 @@ "NeverBehave" ] }, - "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|文档]]\n* [[mw:Special:MyLanguage/API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n
\n状态信息:本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n错误请求:当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:Special:MyLanguage/API:Errors_and_warnings|API:错误与警告]]。\n\n测试中:测试API请求的易用性,请参见[[Special:ApiSandbox]]。", + "apihelp-main-extended-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|文档]]\n* [[mw:Special:MyLanguage/API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n
\n状态信息:本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n错误请求:当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:Special:MyLanguage/API:Errors_and_warnings|API:错误与警告]]。\n\n

测试中:测试API请求的易用性,请参见[[Special:ApiSandbox]]。

", "apihelp-main-param-action": "要执行的操作。", "apihelp-main-param-format": "输出的格式。", "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码maxlag会返回消息,例如等待$host中:延迟$lag秒。
参见[[mw:Special:MyLanguage/Manual:Maxlag_parameter|手册:Maxlag参数]]以获取更多信息。", diff --git a/includes/auth/AuthManager.php b/includes/auth/AuthManager.php index af070c25cb..47c0df5609 100644 --- a/includes/auth/AuthManager.php +++ b/includes/auth/AuthManager.php @@ -31,6 +31,7 @@ use Status; use StatusValue; use User; use WebRequest; +use Wikimedia\ObjectFactory; /** * This serves as the entry point to the authentication system. @@ -2292,7 +2293,7 @@ class AuthManager implements LoggerAwareInterface { $ret = []; foreach ( $specs as $spec ) { - $provider = \ObjectFactory::getObjectFromSpec( $spec ); + $provider = ObjectFactory::getObjectFromSpec( $spec ); if ( !$provider instanceof $class ) { throw new \RuntimeException( "Expected instance of $class, got " . get_class( $provider ) diff --git a/includes/auth/AuthManagerAuthPlugin.php b/includes/auth/AuthManagerAuthPlugin.php index 9a1e44547c..4f84b4c67d 100644 --- a/includes/auth/AuthManagerAuthPlugin.php +++ b/includes/auth/AuthManagerAuthPlugin.php @@ -20,6 +20,7 @@ namespace MediaWiki\Auth; +use Psr\Log\LoggerInterface; use User; /** @@ -31,7 +32,7 @@ class AuthManagerAuthPlugin extends \AuthPlugin { /** @var string|null */ protected $domain = null; - /** @var \\Psr\\Log\\LoggerInterface */ + /** @var LoggerInterface */ protected $logger = null; public function __construct() { diff --git a/includes/auth/LegacyHookPreAuthenticationProvider.php b/includes/auth/LegacyHookPreAuthenticationProvider.php index 97bbde7532..95fe3ab852 100644 --- a/includes/auth/LegacyHookPreAuthenticationProvider.php +++ b/includes/auth/LegacyHookPreAuthenticationProvider.php @@ -58,14 +58,14 @@ class LegacyHookPreAuthenticationProvider extends AbstractPreAuthenticationProvi $msg = null; if ( !\Hooks::run( 'LoginUserMigrated', [ $user, &$msg ] ) ) { return $this->makeFailResponse( - $user, null, LoginForm::USER_MIGRATED, $msg, 'LoginUserMigrated' + $user, LoginForm::USER_MIGRATED, $msg, 'LoginUserMigrated' ); } $abort = LoginForm::ABORTED; $msg = null; if ( !\Hooks::run( 'AbortLogin', [ $user, $password, &$abort, &$msg ] ) ) { - return $this->makeFailResponse( $user, null, $abort, $msg, 'AbortLogin' ); + return $this->makeFailResponse( $user, $abort, $msg, 'AbortLogin' ); } return StatusValue::newGood(); @@ -103,7 +103,7 @@ class LegacyHookPreAuthenticationProvider extends AbstractPreAuthenticationProvi // Hook point to add extra creation throttles and blocks $this->logger->debug( __METHOD__ . ": a hook blocked auto-creation: $abortError\n" ); return $this->makeFailResponse( - $user, $user, LoginForm::ABORTED, $abortError, 'AbortAutoAccount' + $user, LoginForm::ABORTED, $abortError, 'AbortAutoAccount' ); } } @@ -114,13 +114,12 @@ class LegacyHookPreAuthenticationProvider extends AbstractPreAuthenticationProvi /** * Construct an appropriate failure response * @param User $user - * @param User|null $creator * @param int $constant One of the LoginForm::… constants * @param string|null $msg Optional message key, will be derived from $constant otherwise * @param string $hook Name of the hook for error logging and exception messages * @return StatusValue */ - protected function makeFailResponse( $user, $creator, $constant, $msg, $hook ) { + private function makeFailResponse( User $user, $constant, $msg, $hook ) { switch ( $constant ) { case LoginForm::SUCCESS: // WTF? diff --git a/includes/cache/CacheDependency.php b/includes/cache/CacheDependency.php index 32dc8c0bea..4ff10047a4 100644 --- a/includes/cache/CacheDependency.php +++ b/includes/cache/CacheDependency.php @@ -181,11 +181,11 @@ class FileDependency extends CacheDependency { function loadDependencyValues() { if ( is_null( $this->timestamp ) ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); # Dependency on a non-existent file stores "false" # This is a valid concept! $this->timestamp = filemtime( $this->filename ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } } @@ -193,9 +193,9 @@ class FileDependency extends CacheDependency { * @return bool */ function isExpired() { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $lastmod = filemtime( $this->filename ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $lastmod === false ) { if ( $this->timestamp === false ) { # Still nonexistent diff --git a/includes/cache/FileCacheBase.php b/includes/cache/FileCacheBase.php index f2da08a394..ce5a019b7c 100644 --- a/includes/cache/FileCacheBase.php +++ b/includes/cache/FileCacheBase.php @@ -179,9 +179,9 @@ abstract class FileCacheBase { * @return void */ public function clearCache() { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); unlink( $this->cachePath() ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); $this->mCached = false; } diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index 48721866aa..63c03af25b 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -193,7 +193,6 @@ class MessageCache { $po = ParserOptions::newFromAnon(); $po->setEditSection( false ); $po->setAllowUnsafeRawHtml( false ); - $po->setWrapOutputClass( false ); return $po; } @@ -203,11 +202,6 @@ class MessageCache { // from malicious sources. As a precaution, disable // the parser tag when parsing messages. $this->mParserOptions->setAllowUnsafeRawHtml( false ); - // Wrapping messages in an extra
is probably not expected. If - // they're outside the content area they probably shouldn't be - // targeted by CSS that's targeting the parser output, and if - // they're inside they already are from the outer div. - $this->mParserOptions->setWrapOutputClass( false ); } return $this->mParserOptions; @@ -1126,7 +1120,7 @@ class MessageCache { $wgParser->firstCallInit(); # Clone it and store it $class = $wgParserConf['class']; - if ( $class == 'ParserDiffTest' ) { + if ( $class == ParserDiffTest::class ) { # Uncloneable $this->mParser = new $class( $wgParserConf ); } else { diff --git a/includes/cache/localisation/LocalisationCache.php b/includes/cache/localisation/LocalisationCache.php index 5e0a688e81..dd9e8e194a 100644 --- a/includes/cache/localisation/LocalisationCache.php +++ b/includes/cache/localisation/LocalisationCache.php @@ -199,22 +199,22 @@ class LocalisationCache { 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: @@ -517,15 +517,15 @@ class LocalisationCache { */ protected function readPHPFile( $_fileName, $_fileType ) { // Disable APC caching - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $_apcEnabled = ini_set( 'apc.cache_by_default', '0' ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); include $_fileName; - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); ini_set( 'apc.cache_by_default', $_apcEnabled ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $_fileType == 'core' || $_fileType == 'extension' ) { $data = compact( self::$allKeys ); diff --git a/includes/changes/CategoryMembershipChange.php b/includes/changes/CategoryMembershipChange.php index 6fa6907007..f095b64f82 100644 --- a/includes/changes/CategoryMembershipChange.php +++ b/includes/changes/CategoryMembershipChange.php @@ -71,7 +71,7 @@ class CategoryMembershipChange { $this->timestamp = $revision->getTimestamp(); } $this->revision = $revision; - $this->newForCategorizationCallback = [ 'RecentChange', 'newForCategorization' ]; + $this->newForCategorizationCallback = [ RecentChange::class, 'newForCategorization' ]; } /** diff --git a/includes/changes/RecentChange.php b/includes/changes/RecentChange.php index a47186581a..dfaa39816e 100644 --- a/includes/changes/RecentChange.php +++ b/includes/changes/RecentChange.php @@ -235,7 +235,7 @@ class RecentChange { 'rc_log_type', 'rc_log_action', 'rc_params', - ] + CommentStore::newKey( 'rc_comment' )->getFields(); + ] + CommentStore::getStore()->getFields( 'rc_comment' ); } /** @@ -248,7 +248,7 @@ class RecentChange { * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` */ public static function getQueryInfo() { - $commentQuery = CommentStore::newKey( 'rc_comment' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'rc_comment' ); return [ 'tables' => [ 'recentchanges' ] + $commentQuery['tables'], 'fields' => [ @@ -372,7 +372,7 @@ class RecentChange { $row = $this->mAttribs; $comment = $row['rc_comment']; unset( $row['rc_comment'], $row['rc_comment_text'], $row['rc_comment_data'] ); - $row += CommentStore::newKey( 'rc_comment' )->insert( $dbw, $comment ); + $row += CommentStore::getStore()->insert( $dbw, 'rc_comment', $comment ); # Don't reuse an existing rc_id for the new row, if one happens to be # set for some reason. @@ -995,9 +995,10 @@ class RecentChange { } } - $comment = CommentStore::newKey( 'rc_comment' ) + $comment = CommentStore::getStore() // Legacy because $row may have come from self::selectFields() - ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row, true )->text; + ->getCommentLegacy( wfGetDB( DB_REPLICA ), 'rc_comment', $row, true ) + ->text; $this->mAttribs['rc_comment'] = &$comment; $this->mAttribs['rc_comment_text'] = &$comment; $this->mAttribs['rc_comment_data'] = null; @@ -1011,7 +1012,8 @@ class RecentChange { */ public function getAttribute( $name ) { if ( $name === 'rc_comment' ) { - return CommentStore::newKey( 'rc_comment' )->getComment( $this->mAttribs, true )->text; + return CommentStore::getStore() + ->getComment( 'rc_comment', $this->mAttribs, true )->text; } return isset( $this->mAttribs[$name] ) ? $this->mAttribs[$name] : null; } @@ -1108,9 +1110,9 @@ class RecentChange { public function parseParams() { $rcParams = $this->getAttribute( 'rc_params' ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $unserializedParams = unserialize( $rcParams ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return $unserializedParams; } diff --git a/includes/changetags/ChangeTags.php b/includes/changetags/ChangeTags.php index 95848ea085..7e4dd006ac 100644 --- a/includes/changetags/ChangeTags.php +++ b/includes/changetags/ChangeTags.php @@ -408,19 +408,24 @@ class ChangeTags { 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; diff --git a/includes/changetags/ChangeTagsList.php b/includes/changetags/ChangeTagsList.php index afbbb2bf5b..1559e1d6f7 100644 --- a/includes/changetags/ChangeTagsList.php +++ b/includes/changetags/ChangeTagsList.php @@ -43,10 +43,10 @@ abstract class ChangeTagsList extends RevisionListBase { ) { 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" ); diff --git a/includes/clientpool/SquidPurgeClient.php b/includes/clientpool/SquidPurgeClient.php index be802f9bec..3388860508 100644 --- a/includes/clientpool/SquidPurgeClient.php +++ b/includes/clientpool/SquidPurgeClient.php @@ -95,9 +95,9 @@ class SquidPurgeClient { } $this->socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); socket_set_nonblock( $this->socket ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $ok = socket_connect( $this->socket, $ip, $this->port ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$ok ) { $error = socket_last_error( $this->socket ); if ( $error !== self::EINPROGRESS ) { @@ -153,12 +153,12 @@ class SquidPurgeClient { } elseif ( IP::isIPv6( $this->host ) ) { throw new MWException( '$wgSquidServers does not support IPv6' ); } else { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $this->ip = gethostbyname( $this->host ); if ( $this->ip === $this->host ) { $this->ip = false; } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } } return $this->ip; @@ -178,11 +178,11 @@ class SquidPurgeClient { */ public function close() { if ( $this->socket ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); socket_set_block( $this->socket ); socket_shutdown( $this->socket ); socket_close( $this->socket ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } $this->socket = null; $this->readBuffer = ''; @@ -252,9 +252,9 @@ class SquidPurgeClient { $buf = substr( $this->writeBuffer, 0, self::BUFFER_SIZE ); $flags = 0; } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $bytesSent = socket_send( $socket, $buf, strlen( $buf ), $flags ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $bytesSent === false ) { $error = socket_last_error( $socket ); @@ -278,9 +278,9 @@ class SquidPurgeClient { } $buf = ''; - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $bytesRead = socket_recv( $socket, $buf, self::BUFFER_SIZE, 0 ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $bytesRead === false ) { $error = socket_last_error( $socket ); if ( $error != self::EAGAIN && $error != self::EINTR ) { diff --git a/includes/clientpool/SquidPurgeClientPool.php b/includes/clientpool/SquidPurgeClientPool.php index 7b327d653d..f6109f1d88 100644 --- a/includes/clientpool/SquidPurgeClientPool.php +++ b/includes/clientpool/SquidPurgeClientPool.php @@ -66,9 +66,9 @@ class SquidPurgeClientPool { } $exceptSockets = null; $timeout = min( $startTime + $this->timeout - microtime( true ), 1 ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $numReady = socket_select( $readSockets, $writeSockets, $exceptSockets, $timeout ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $numReady === false ) { wfDebugLog( 'squid', __METHOD__ . ': Error in stream_select: ' . socket_strerror( socket_last_error() ) . "\n" ); diff --git a/includes/compat/ObjectFactory.php b/includes/compat/ObjectFactory.php new file mode 100644 index 0000000000..7646238018 --- /dev/null +++ b/includes/compat/ObjectFactory.php @@ -0,0 +1,27 @@ +config = $s; + public function setConfig( Config $config ) { + $this->config = $config; } /** - * Get the Config object - * * @return Config */ public function getConfig() { @@ -103,8 +99,6 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Get the stats object - * * @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected) * * @return IBufferingStatsdDataFactory @@ -114,8 +108,6 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Get the timing object - * * @return Timing */ public function getTiming() { @@ -127,17 +119,13 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Set the WebRequest object - * - * @param WebRequest $r + * @param WebRequest $request */ - public function setRequest( WebRequest $r ) { - $this->request = $r; + public function setRequest( WebRequest $request ) { + $this->request = $request; } /** - * Get the WebRequest object - * * @return WebRequest */ public function getRequest() { @@ -149,17 +137,13 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Set the Title object - * - * @param Title $t + * @param Title $title */ - public function setTitle( Title $t ) { - $this->title = $t; + public function setTitle( Title $title ) { + $this->title = $title; } /** - * Get the Title object - * * @return Title|null */ public function getTitle() { @@ -189,13 +173,11 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Set the WikiPage object - * * @since 1.19 - * @param WikiPage $p + * @param WikiPage $wikiPage */ - public function setWikiPage( WikiPage $p ) { - $this->wikipage = $p; + public function setWikiPage( WikiPage $wikiPage ) { + $this->wikipage = $wikiPage; } /** @@ -216,17 +198,13 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Set the OutputPage object - * - * @param OutputPage $o + * @param OutputPage $output */ - public function setOutput( OutputPage $o ) { - $this->output = $o; + public function setOutput( OutputPage $output ) { + $this->output = $output; } /** - * Get the OutputPage object - * * @return OutputPage */ public function getOutput() { @@ -238,17 +216,13 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Set the User object - * - * @param User $u + * @param User $user */ - public function setUser( User $u ) { - $this->user = $u; + public function setUser( User $user ) { + $this->user = $user; } /** - * Get the User object - * * @return User */ public function getUser() { @@ -260,18 +234,16 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Set the Language object - * - * @param Language|string $l Language instance or language code + * @param Language|string $language Language instance or language code * @throws MWException * @since 1.19 */ - public function setLanguage( $l ) { - if ( $l instanceof Language ) { - $this->lang = $l; - } elseif ( is_string( $l ) ) { - $l = RequestContext::sanitizeLangCode( $l ); - $obj = Language::factory( $l ); + public function setLanguage( $language ) { + if ( $language instanceof Language ) { + $this->lang = $language; + } elseif ( is_string( $language ) ) { + $language = RequestContext::sanitizeLangCode( $language ); + $obj = Language::factory( $language ); $this->lang = $obj; } else { throw new MWException( __METHOD__ . " was passed an invalid type of data." ); @@ -279,8 +251,6 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Get the Language object - * * @return Language * @since 1.19 */ @@ -293,18 +263,14 @@ class DerivativeContext extends ContextSource implements MutableContext { } /** - * Set the Skin object - * - * @param Skin $s + * @param Skin $skin */ - public function setSkin( Skin $s ) { - $this->skin = clone $s; + public function setSkin( Skin $skin ) { + $this->skin = clone $skin; $this->skin->setContext( $this ); } /** - * Get the Skin object - * * @return Skin */ public function getSkin() { diff --git a/includes/context/IContextSource.php b/includes/context/IContextSource.php index 5a856cf7c1..6e48e1eba7 100644 --- a/includes/context/IContextSource.php +++ b/includes/context/IContextSource.php @@ -51,16 +51,13 @@ * shutdown by separate persistence handler objects, for example. */ interface IContextSource extends MessageLocalizer { + /** - * Get the WebRequest object - * * @return WebRequest */ public function getRequest(); /** - * Get the Title object - * * @return Title|null */ public function getTitle(); @@ -87,30 +84,22 @@ interface IContextSource extends MessageLocalizer { public function getWikiPage(); /** - * Get the OutputPage object - * * @return OutputPage */ public function getOutput(); /** - * Get the User object - * * @return User */ public function getUser(); /** - * Get the Language object - * * @return Language * @since 1.19 */ public function getLanguage(); /** - * Get the Skin object - * * @return Skin */ public function getSkin(); @@ -124,8 +113,6 @@ interface IContextSource extends MessageLocalizer { public function getConfig(); /** - * Get the stats object - * * @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected) * * @since 1.25 @@ -134,8 +121,6 @@ interface IContextSource extends MessageLocalizer { public function getStats(); /** - * Get the timing object - * * @since 1.27 * @return Timing */ diff --git a/includes/context/MutableContext.php b/includes/context/MutableContext.php index 189b346c98..56ec96015b 100644 --- a/includes/context/MutableContext.php +++ b/includes/context/MutableContext.php @@ -23,60 +23,45 @@ */ interface MutableContext { + /** - * Set the Config object - * * @param Config $config */ public function setConfig( Config $config ); /** - * Set the WebRequest object - * - * @param WebRequest $r + * @param WebRequest $request */ - public function setRequest( WebRequest $r ); + public function setRequest( WebRequest $request ); /** - * Set the Title object - * - * @param Title $t + * @param Title $title */ - public function setTitle( Title $t ); + public function setTitle( Title $title ); /** - * Set the WikiPage object - * - * @param WikiPage $p + * @param WikiPage $wikiPage */ - public function setWikiPage( WikiPage $p ); + public function setWikiPage( WikiPage $wikiPage ); /** - * Set the OutputPage object - * - * @param OutputPage $o + * @param OutputPage $output */ - public function setOutput( OutputPage $o ); + public function setOutput( OutputPage $output ); /** - * Set the User object - * - * @param User $u + * @param User $user */ - public function setUser( User $u ); + public function setUser( User $user ); /** - * Set the Language object - * - * @param Language|string $l Language instance or language code + * @param Language|string $language Language instance or language code */ - public function setLanguage( $l ); + public function setLanguage( $language ); /** - * Set the Skin object - * - * @param Skin $s + * @param Skin $skin */ - public function setSkin( Skin $s ); + public function setSkin( Skin $skin ); } diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php index 47d1684e60..db3a7a9695 100644 --- a/includes/context/RequestContext.php +++ b/includes/context/RequestContext.php @@ -101,17 +101,13 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Set the WebRequest object - * - * @param WebRequest $r + * @param WebRequest $request */ - public function setRequest( WebRequest $r ) { - $this->request = $r; + public function setRequest( WebRequest $request ) { + $this->request = $request; } /** - * Get the WebRequest object - * * @return WebRequest */ public function getRequest() { @@ -129,8 +125,6 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Get the Stats object - * * @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected) * * @return IBufferingStatsdDataFactory @@ -140,8 +134,6 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Get the timing object - * * @return Timing */ public function getTiming() { @@ -154,8 +146,6 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Set the Title object - * * @param Title|null $title */ public function setTitle( Title $title = null ) { @@ -165,8 +155,6 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Get the Title object - * * @return Title|null */ public function getTitle() { @@ -212,18 +200,16 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Set the WikiPage object - * * @since 1.19 - * @param WikiPage $p + * @param WikiPage $wikiPage */ - public function setWikiPage( WikiPage $p ) { - $pageTitle = $p->getTitle(); + public function setWikiPage( WikiPage $wikiPage ) { + $pageTitle = $wikiPage->getTitle(); if ( !$this->hasTitle() || !$pageTitle->equals( $this->getTitle() ) ) { $this->setTitle( $pageTitle ); } // Defer this to the end since setTitle sets it to null. - $this->wikipage = $p; + $this->wikipage = $wikiPage; } /** @@ -249,15 +235,13 @@ class RequestContext implements IContextSource, MutableContext { } /** - * @param OutputPage $o + * @param OutputPage $output */ - public function setOutput( OutputPage $o ) { - $this->output = $o; + public function setOutput( OutputPage $output ) { + $this->output = $output; } /** - * Get the OutputPage object - * * @return OutputPage */ public function getOutput() { @@ -269,17 +253,13 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Set the User object - * - * @param User $u + * @param User $user */ - public function setUser( User $u ) { - $this->user = $u; + public function setUser( User $user ) { + $this->user = $user; } /** - * Get the User object - * * @return User */ public function getUser() { @@ -311,18 +291,16 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Set the Language object - * - * @param Language|string $l Language instance or language code + * @param Language|string $language Language instance or language code * @throws MWException * @since 1.19 */ - public function setLanguage( $l ) { - if ( $l instanceof Language ) { - $this->lang = $l; - } elseif ( is_string( $l ) ) { - $l = self::sanitizeLangCode( $l ); - $obj = Language::factory( $l ); + public function setLanguage( $language ) { + if ( $language instanceof Language ) { + $this->lang = $language; + } elseif ( is_string( $language ) ) { + $language = self::sanitizeLangCode( $language ); + $obj = Language::factory( $language ); $this->lang = $obj; } else { throw new MWException( __METHOD__ . " was passed an invalid type of data." ); @@ -380,18 +358,14 @@ class RequestContext implements IContextSource, MutableContext { } /** - * Set the Skin object - * - * @param Skin $s + * @param Skin $skin */ - public function setSkin( Skin $s ) { - $this->skin = clone $s; + public function setSkin( Skin $skin ) { + $this->skin = clone $skin; $this->skin->setContext( $this ); } /** - * Get the Skin object - * * @return Skin */ public function getSkin() { @@ -583,7 +557,7 @@ class RequestContext implements IContextSource, MutableContext { $wgUser = $context->getUser(); // b/c if ( $session && MediaWiki\Session\PHPSessionHandler::isEnabled() ) { session_id( $session->getId() ); - MediaWiki\quietCall( 'session_start' ); + Wikimedia\quietCall( 'session_start' ); } $request = new FauxRequest( [], false, $session ); $request->setIP( $params['ip'] ); diff --git a/includes/db/DatabaseOracle.php b/includes/db/DatabaseOracle.php index e2feb1fa7c..eb28b30138 100644 --- a/includes/db/DatabaseOracle.php +++ b/includes/db/DatabaseOracle.php @@ -62,9 +62,9 @@ class DatabaseOracle extends Database { function __destruct() { if ( $this->mOpened ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $this->close(); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } } @@ -128,7 +128,7 @@ class DatabaseOracle extends Database { $session_mode = $this->mFlags & DBO_SYSDBA ? OCI_SYSDBA : OCI_DEFAULT; - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); if ( $this->mFlags & DBO_PERSISTENT ) { $this->mConn = oci_pconnect( $this->mUser, @@ -154,7 +154,7 @@ class DatabaseOracle extends Database { $session_mode ); } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $this->mUser != $this->mDBname ) { // change current schema in session @@ -215,7 +215,7 @@ class DatabaseOracle extends Database { $explain_count ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ); if ( $stmt === false ) { @@ -234,7 +234,7 @@ class DatabaseOracle extends Database { } } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $explain_count > 0 ) { return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table ' . @@ -354,7 +354,7 @@ class DatabaseOracle extends Database { return $e['code']; } - function affectedRows() { + protected function fetchAffectedRowCount() { return $this->mAffectedRows; } @@ -522,7 +522,7 @@ class DatabaseOracle extends Database { } } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); if ( oci_execute( $stmt, $this->execFlags() ) === false ) { $e = oci_error( $stmt ); @@ -537,7 +537,7 @@ class DatabaseOracle extends Database { $this->mAffectedRows = oci_num_rows( $stmt ); } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( isset( $lob ) ) { foreach ( $lob as $lob_v ) { @@ -1047,9 +1047,9 @@ class DatabaseOracle extends Database { } $sql = 'ALTER SESSION SET CURRENT_SCHEMA=' . strtoupper( $db ); $stmt = oci_parse( $this->mConn, $sql ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $success = oci_execute( $stmt ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$success ) { $e = oci_error( $stmt ); if ( $e['code'] != '1435' ) { @@ -1296,7 +1296,7 @@ class DatabaseOracle extends Database { } } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); if ( oci_execute( $stmt, $this->execFlags() ) === false ) { $e = oci_error( $stmt ); @@ -1311,7 +1311,7 @@ class DatabaseOracle extends Database { $this->mAffectedRows = oci_num_rows( $stmt ); } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( isset( $lob ) ) { foreach ( $lob as $lob_v ) { diff --git a/includes/db/MWLBFactory.php b/includes/db/MWLBFactory.php index aa1918d51f..5c79117f78 100644 --- a/includes/db/MWLBFactory.php +++ b/includes/db/MWLBFactory.php @@ -46,7 +46,7 @@ abstract class MWLBFactory { $lbConf += [ 'localDomain' => new DatabaseDomain( $mainConfig->get( 'DBname' ), - null, + $mainConfig->get( 'DBmwschema' ), $mainConfig->get( 'DBprefix' ) ), 'profiler' => Profiler::instance(), @@ -64,7 +64,7 @@ abstract class MWLBFactory { // 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' ) ) ) { @@ -132,7 +132,7 @@ abstract class MWLBFactory { 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' ); diff --git a/includes/debug/logger/LegacyLogger.php b/includes/debug/logger/LegacyLogger.php index 06ec5743fc..7bd505d089 100644 --- a/includes/debug/logger/LegacyLogger.php +++ b/includes/debug/logger/LegacyLogger.php @@ -467,7 +467,7 @@ class LegacyLogger extends AbstractLogger { $transport = UDPTransport::newFromString( $file ); $transport->emit( $text ); } else { - \MediaWiki\suppressWarnings(); + \Wikimedia\suppressWarnings(); $exists = file_exists( $file ); $size = $exists ? filesize( $file ) : false; if ( !$exists || @@ -475,7 +475,7 @@ class LegacyLogger extends AbstractLogger { ) { file_put_contents( $file, $text, FILE_APPEND ); } - \MediaWiki\restoreWarnings(); + \Wikimedia\restoreWarnings(); } } diff --git a/includes/debug/logger/LegacySpi.php b/includes/debug/logger/LegacySpi.php index 8e750cab25..cb0e066cd2 100644 --- a/includes/debug/logger/LegacySpi.php +++ b/includes/debug/logger/LegacySpi.php @@ -26,7 +26,7 @@ namespace MediaWiki\Logger; * Usage: * @code * $wgMWLoggerDefaultSpi = [ - * 'class' => '\\MediaWiki\\Logger\\LegacySpi', + * 'class' => \MediaWiki\Logger\LegacySpi::class, * ]; * @endcode * diff --git a/includes/debug/logger/LoggerFactory.php b/includes/debug/logger/LoggerFactory.php index c183ff1538..d6931942cc 100644 --- a/includes/debug/logger/LoggerFactory.php +++ b/includes/debug/logger/LoggerFactory.php @@ -20,7 +20,7 @@ namespace MediaWiki\Logger; -use ObjectFactory; +use Wikimedia\ObjectFactory; /** * PSR-3 logger instance factory. diff --git a/includes/debug/logger/MonologSpi.php b/includes/debug/logger/MonologSpi.php index 197b269b0a..ec27ad1cdc 100644 --- a/includes/debug/logger/MonologSpi.php +++ b/includes/debug/logger/MonologSpi.php @@ -22,7 +22,7 @@ namespace MediaWiki\Logger; use MediaWiki\Logger\Monolog\BufferHandler; use Monolog\Logger; -use ObjectFactory; +use Wikimedia\ObjectFactory; /** * LoggerFactory service provider that creates loggers implemented by @@ -40,7 +40,7 @@ use ObjectFactory; * default SPI provider: * @code * $wgMWLoggerDefaultSpi = [ - * 'class' => '\\MediaWiki\\Logger\\MonologSpi', + * 'class' => \MediaWiki\Logger\MonologSpi::class, * 'args' => [ [ * 'loggers' => [ * '@default' => [ @@ -54,29 +54,29 @@ use ObjectFactory; * ], * '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 ); @@ -88,7 +88,7 @@ use ObjectFactory; * 'buffer' => true, * ], * 'udp2log' => [ - * 'class' => '\\MediaWiki\\Logger\\Monolog\\LegacyHandler', + * 'class' => \MediaWiki\Logger\Monolog\LegacyHandler::class, * 'args' => [ * 'udp://127.0.0.1:8420/mediawiki * ], @@ -97,10 +97,10 @@ use ObjectFactory; * ], * '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 ], * ], * ], diff --git a/includes/debug/logger/NullSpi.php b/includes/debug/logger/NullSpi.php index 4862157d8c..d65c185133 100644 --- a/includes/debug/logger/NullSpi.php +++ b/includes/debug/logger/NullSpi.php @@ -29,7 +29,7 @@ use Psr\Log\NullLogger; * Usage: * * $wgMWLoggerDefaultSpi = [ - * 'class' => '\\MediaWiki\\Logger\\NullSpi', + * 'class' => \MediaWiki\Logger\NullSpi::class, * ]; * * @see \MediaWiki\Logger\LoggerFactory diff --git a/includes/deferred/MWCallableUpdate.php b/includes/deferred/MWCallableUpdate.php index 5b822af492..9803b7a491 100644 --- a/includes/deferred/MWCallableUpdate.php +++ b/includes/deferred/MWCallableUpdate.php @@ -14,14 +14,18 @@ class MWCallableUpdate implements DeferrableUpdate, DeferrableCallback { /** * @param callable $callback * @param string $fname Calling method - * @param IDatabase|null $dbw Abort if this DB is rolled back [optional] (since 1.28) + * @param IDatabase|IDatabase[]|null $dbws Abort if any of the specified DB handles have + * a currently pending transaction which later gets rolled back [optional] (since 1.28) */ - public function __construct( callable $callback, $fname = 'unknown', IDatabase $dbw = null ) { + public function __construct( callable $callback, $fname = 'unknown', $dbws = [] ) { $this->callback = $callback; $this->fname = $fname; - if ( $dbw && $dbw->trxLevel() ) { - $dbw->onTransactionResolution( [ $this, 'cancelOnRollback' ], $fname ); + $dbws = is_array( $dbws ) ? $dbws : [ $dbws ]; + foreach ( $dbws as $dbw ) { + if ( $dbw && $dbw->trxLevel() ) { + $dbw->onTransactionResolution( [ $this, 'cancelOnRollback' ], $fname ); + } } } diff --git a/includes/deferred/SiteStatsUpdate.php b/includes/deferred/SiteStatsUpdate.php index 44876a68ef..ad1f172460 100644 --- a/includes/deferred/SiteStatsUpdate.php +++ b/includes/deferred/SiteStatsUpdate.php @@ -25,6 +25,8 @@ use Wikimedia\Rdbms\IDatabase; * Class for handling updates to the site_stats table */ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { + /** @var BagOStuff */ + protected $stash; /** @var int */ protected $edits = 0; /** @var int */ @@ -44,6 +46,8 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { $this->articles = $good; $this->pages = $pages; $this->users = $users; + + $this->stash = MediaWikiServices::getInstance()->getMainObjectStash(); } public function merge( MergeableUpdate $update ) { @@ -72,11 +76,9 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { } public function doUpdate() { - global $wgSiteStatsAsyncFactor; - $this->doUpdateContextStats(); - $rate = $wgSiteStatsAsyncFactor; // convenience + $rate = MediaWikiServices::getInstance()->getMainConfig()->get( 'SiteStatsAsyncFactor' ); // If set to do so, only do actual DB updates 1 every $rate times. // The other times, just update "pending delta" values in memcached. if ( $rate && ( $rate < 0 || mt_rand( 0, $rate - 1 ) != 0 ) ) { @@ -91,12 +93,13 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { * Do not call this outside of SiteStatsUpdate */ public function tryDBUpdateInternal() { - global $wgSiteStatsAsyncFactor; + $services = MediaWikiServices::getInstance(); + $config = $services->getMainConfig(); - $dbw = wfGetDB( DB_MASTER ); - $lockKey = wfWikiID() . ':site_stats'; // prepend wiki ID + $dbw = $services->getDBLoadBalancer()->getConnection( DB_MASTER ); + $lockKey = $dbw->getDomainID() . ':site_stats'; // prepend wiki ID $pd = []; - if ( $wgSiteStatsAsyncFactor ) { + if ( $config->get( 'SiteStatsAsyncFactor' ) ) { // Lock the table so we don't have double DB/memcached updates if ( !$dbw->lockIsFree( $lockKey, __METHOD__ ) || !$dbw->lock( $lockKey, __METHOD__, 1 ) // 1 sec timeout @@ -125,7 +128,7 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { $dbw->update( 'site_stats', [ $updates ], [], __METHOD__ ); } - if ( $wgSiteStatsAsyncFactor ) { + if ( $config->get( 'SiteStatsAsyncFactor' ) ) { // Decrement the async deltas now that we applied them $this->removePendingDeltas( $pd ); // Commit the updates and unlock the table @@ -140,9 +143,11 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { * @param IDatabase $dbw * @return bool|mixed */ - public static function cacheUpdate( $dbw ) { - global $wgActiveUserDays; - $dbr = wfGetDB( DB_REPLICA, 'vslow' ); + public static function cacheUpdate( IDatabase $dbw ) { + $services = MediaWikiServices::getInstance(); + $config = $services->getMainConfig(); + + $dbr = $services->getDBLoadBalancer()->getConnection( DB_REPLICA, 'vslow' ); # Get non-bot users than did some recent action other than making accounts. # If account creation is included, the number gets inflated ~20+ fold on enwiki. $activeUsers = $dbr->selectField( @@ -153,8 +158,8 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { 'rc_user != 0', 'rc_bot' => 0, 'rc_log_type != ' . $dbr->addQuotes( 'newusers' ) . ' OR rc_log_type IS NULL', - 'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - - $wgActiveUserDays * 24 * 3600 ) ), + 'rc_timestamp >= ' . $dbr->addQuotes( + $dbr->timestamp( time() - $config->get( 'ActiveUserDays' ) * 24 * 3600 ) ), ], __METHOD__ ); @@ -208,13 +213,13 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { } /** - * @param BagOStuff $cache + * @param BagOStuff $stash * @param string $type * @param string $sign ('+' or '-') * @return string */ - private function getTypeCacheKey( BagOStuff $cache, $type, $sign ) { - return $cache->makeKey( 'sitestatsupdate', 'pendingdelta', $type, $sign ); + private function getTypeCacheKey( BagOStuff $stash, $type, $sign ) { + return $stash->makeKey( 'sitestatsupdate', 'pendingdelta', $type, $sign ); } /** @@ -224,15 +229,14 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { * @param int $delta Delta (positive or negative) */ protected function adjustPending( $type, $delta ) { - $cache = MediaWikiServices::getInstance()->getMainObjectStash(); if ( $delta < 0 ) { // decrement - $key = $this->getTypeCacheKey( $cache, $type, '-' ); + $key = $this->getTypeCacheKey( $this->stash, $type, '-' ); } else { // increment - $key = $this->getTypeCacheKey( $cache, $type, '+' ); + $key = $this->getTypeCacheKey( $this->stash, $type, '+' ); } $magnitude = abs( $delta ); - $cache->incrWithInit( $key, 0, $magnitude, $magnitude ); + $this->stash->incrWithInit( $key, 0, $magnitude, $magnitude ); } /** @@ -240,16 +244,20 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { * @return array Positive and negative deltas for each type */ protected function getPendingDeltas() { - $cache = MediaWikiServices::getInstance()->getMainObjectStash(); - $pending = []; foreach ( [ 'ss_total_edits', 'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ] as $type ) { // Get pending increments and pending decrements $flg = BagOStuff::READ_LATEST; - $pending[$type]['+'] = (int)$cache->get( $this->getTypeCacheKey( $cache, $type, '+' ), $flg ); - $pending[$type]['-'] = (int)$cache->get( $this->getTypeCacheKey( $cache, $type, '-' ), $flg ); + $pending[$type]['+'] = (int)$this->stash->get( + $this->getTypeCacheKey( $this->stash, $type, '+' ), + $flg + ); + $pending[$type]['-'] = (int)$this->stash->get( + $this->getTypeCacheKey( $this->stash, $type, '-' ), + $flg + ); } return $pending; @@ -260,12 +268,11 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { * @param array $pd Result of getPendingDeltas(), used for DB update */ protected function removePendingDeltas( array $pd ) { - $cache = MediaWikiServices::getInstance()->getMainObjectStash(); - foreach ( $pd as $type => $deltas ) { foreach ( $deltas as $sign => $magnitude ) { // Lower the pending counter now that we applied these changes - $cache->decr( $this->getTypeCacheKey( $cache, $type, $sign ), $magnitude ); + $key = $this->getTypeCacheKey( $this->stash, $type, $sign ); + $this->stash->decr( $key, $magnitude ); } } } diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index 7e05be6675..e76bffcace 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -650,6 +650,12 @@ class DifferenceEngine extends ContextSource { } } + /** + * @param WikiPage $page + * @param Revision $rev + * + * @return ParserOutput|bool False if the revision was not found + */ protected function getParserOutput( WikiPage $page, Revision $rev ) { $parserOptions = $page->makeParserOptions( $this->getContext() ); diff --git a/includes/edit/PreparedEdit.php b/includes/edit/PreparedEdit.php index 62624f4d91..910d221a7c 100644 --- a/includes/edit/PreparedEdit.php +++ b/includes/edit/PreparedEdit.php @@ -87,27 +87,4 @@ class PreparedEdit { */ public $oldContent; - /** - * $newContent in text form - * - * @var string - * @deprecated since 1.21 - */ - public $newText; - - /** - * $oldContent in text from - * - * @var string - * @deprecated since 1.21 - */ - public $oldText; - - /** - * $pstContent in text form - * - * @var string - * @deprecated since 1.21 - */ - public $pst; } diff --git a/includes/exception/MWException.php b/includes/exception/MWException.php index 6d95919a87..16f226c78f 100644 --- a/includes/exception/MWException.php +++ b/includes/exception/MWException.php @@ -55,7 +55,7 @@ class MWException extends Exception { global $wgLang; foreach ( $this->getTrace() as $frame ) { - if ( isset( $frame['class'] ) && $frame['class'] === 'LocalisationCache' ) { + if ( isset( $frame['class'] ) && $frame['class'] === LocalisationCache::class ) { return false; } } diff --git a/includes/exception/MWExceptionHandler.php b/includes/exception/MWExceptionHandler.php index d863a2bb58..78a5df961b 100644 --- a/includes/exception/MWExceptionHandler.php +++ b/includes/exception/MWExceptionHandler.php @@ -170,6 +170,8 @@ class MWExceptionHandler { public static function handleError( $level, $message, $file = null, $line = null ) { + global $wgPropagateErrors; + if ( in_array( $level, self::$fatalErrorTypes ) ) { return call_user_func_array( 'MWExceptionHandler::handleFatalError', func_get_args() @@ -213,9 +215,10 @@ class MWExceptionHandler { $e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line ); self::logError( $e, 'error', $severity ); - // This handler is for logging only. Return false will instruct PHP - // to continue regular handling. - return false; + // If $wgPropagateErrors is true return false so PHP shows/logs the error normally. + // Ignore $wgPropagateErrors if the error should break execution, or track_errors is set + // (which means someone is counting on regular PHP error handling behavior). + return !( $wgPropagateErrors || $level == E_RECOVERABLE_ERROR || ini_get( 'track_errors' ) ); } /** @@ -300,7 +303,7 @@ TXT; $logger = LoggerFactory::getInstance( 'fatal' ); $logger->error( $msg, [ 'fatal_exception' => [ - 'class' => 'ErrorException', + 'class' => ErrorException::class, 'message' => "PHP Fatal Error: {$message}", 'code' => $level, 'file' => $file, @@ -661,7 +664,7 @@ TXT; $catcher = self::CAUGHT_BY_HANDLER; // The set_error_handler callback is independent from error_reporting. // Filter out unwanted errors manually (e.g. when - // MediaWiki\suppressWarnings is active). + // Wikimedia\suppressWarnings is active). $suppressed = ( error_reporting() & $e->getSeverity() ) === 0; if ( !$suppressed ) { $logger = LoggerFactory::getInstance( $channel ); diff --git a/includes/exception/MWExceptionRenderer.php b/includes/exception/MWExceptionRenderer.php index b22e87bf4a..dc8dfd0b3e 100644 --- a/includes/exception/MWExceptionRenderer.php +++ b/includes/exception/MWExceptionRenderer.php @@ -90,7 +90,7 @@ class MWExceptionRenderer { 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; } } diff --git a/includes/export/WikiExporter.php b/includes/export/WikiExporter.php index 6e2a5a4f0c..6ce55eaa4e 100644 --- a/includes/export/WikiExporter.php +++ b/includes/export/WikiExporter.php @@ -278,7 +278,7 @@ class WikiExporter { } $result = null; // Assuring $result is not undefined, if exception occurs early - $commentQuery = CommentStore::newKey( 'log_comment' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'log_comment' ); try { $result = $this->db->select( [ 'logging', 'user' ] + $commentQuery['tables'], @@ -399,7 +399,7 @@ class WikiExporter { Hooks::run( 'ModifyExportQuery', [ $this->db, &$tables, &$cond, &$opts, &$join ] ); - $commentQuery = CommentStore::newKey( 'rev_comment' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'rev_comment' ); # Do the query! $result = $this->db->select( diff --git a/includes/export/XmlDumpWriter.php b/includes/export/XmlDumpWriter.php index c46eb61ca3..e1c12de1b9 100644 --- a/includes/export/XmlDumpWriter.php +++ b/includes/export/XmlDumpWriter.php @@ -219,7 +219,7 @@ class XmlDumpWriter { if ( isset( $row->rev_deleted ) && ( $row->rev_deleted & Revision::DELETED_COMMENT ) ) { $out .= " " . Xml::element( 'comment', [ 'deleted' => 'deleted' ] ) . "\n"; } else { - $comment = CommentStore::newKey( 'rev_comment' )->getComment( $row )->text; + $comment = CommentStore::getStore()->getComment( 'rev_comment', $row )->text; if ( $comment != '' ) { $out .= " " . Xml::elementClean( 'comment', [], strval( $comment ) ) . "\n"; } @@ -303,7 +303,7 @@ class XmlDumpWriter { if ( $row->log_deleted & LogPage::DELETED_COMMENT ) { $out .= " " . Xml::element( 'comment', [ 'deleted' => 'deleted' ] ) . "\n"; } else { - $comment = CommentStore::newKey( 'log_comment' )->getComment( $row )->text; + $comment = CommentStore::getStore()->getComment( 'log_comment', $row )->text; if ( $comment != '' ) { $out .= " " . Xml::elementClean( 'comment', null, strval( $comment ) ) . "\n"; } diff --git a/includes/filebackend/FileBackendGroup.php b/includes/filebackend/FileBackendGroup.php index 8182d62ec6..9239c6cc34 100644 --- a/includes/filebackend/FileBackendGroup.php +++ b/includes/filebackend/FileBackendGroup.php @@ -91,7 +91,7 @@ class FileBackendGroup { // Get the FS backend configuration $autoBackends[] = [ 'name' => $backendName, - 'class' => 'FSFileBackend', + 'class' => FSFileBackend::class, 'lockManager' => 'fsLockManager', 'containerPaths' => [ "{$repoName}-public" => "{$directory}", @@ -155,7 +155,7 @@ class FileBackendGroup { $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. @@ -190,9 +190,9 @@ class FileBackendGroup { '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' ), @@ -202,7 +202,7 @@ class FileBackendGroup { 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; } diff --git a/includes/filebackend/lockmanager/LockManagerGroup.php b/includes/filebackend/lockmanager/LockManagerGroup.php index e6f992c321..5d79dac0c2 100644 --- a/includes/filebackend/lockmanager/LockManagerGroup.php +++ b/includes/filebackend/lockmanager/LockManagerGroup.php @@ -116,7 +116,7 @@ class LockManagerGroup { 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'] ); diff --git a/includes/filerepo/FileRepo.php b/includes/filerepo/FileRepo.php index 5d22b8d80d..e430bc8f43 100644 --- a/includes/filerepo/FileRepo.php +++ b/includes/filerepo/FileRepo.php @@ -124,7 +124,7 @@ class FileRepo { 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 */ @@ -132,6 +132,13 @@ class FileRepo { /** @var array callable|bool Override these in the base class */ protected $oldFileFactoryKey = false; + /** @var string URL of where to proxy thumb.php requests to. + * Example: http://127.0.0.1:8888/wiki/dev/thumb/ + */ + protected $thumbProxyUrl; + /** @var string Secret key to pass as an X-Swift-Secret header to the proxied thumb service */ + protected $thumbProxySecret; + /** * @param array|null $info * @throws MWException @@ -159,7 +166,7 @@ class FileRepo { $optionalSettings = [ 'descBaseUrl', 'scriptDirUrl', 'articleUrl', 'fetchDescription', 'thumbScriptUrl', 'pathDisclosureProtection', 'descriptionCacheExpiry', - 'scriptExtension', 'favicon' + 'scriptExtension', 'favicon', 'thumbProxyUrl', 'thumbProxySecret' ]; foreach ( $optionalSettings as $var ) { if ( isset( $info[$var] ) ) { @@ -611,6 +618,24 @@ class FileRepo { return $this->thumbScriptUrl; } + /** + * Get the URL thumb.php requests are being proxied to + * + * @return string + */ + public function getThumbProxyUrl() { + return $this->thumbProxyUrl; + } + + /** + * Get the secret key for the proxied thumb service + * + * @return string + */ + public function getThumbProxySecret() { + return $this->thumbProxySecret; + } + /** * Returns true if the repository can transform files via a 404 handler * @@ -1293,9 +1318,9 @@ class FileRepo { } // Cleanup for disk source files... foreach ( $sourceFSFilesToDelete as $file ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); unlink( $file ); // FS cleanup - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } return $status; @@ -1722,7 +1747,7 @@ class FileRepo { * @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; diff --git a/includes/filerepo/ForeignAPIRepo.php b/includes/filerepo/ForeignAPIRepo.php index 45a5c8247f..5a37701285 100644 --- a/includes/filerepo/ForeignAPIRepo.php +++ b/includes/filerepo/ForeignAPIRepo.php @@ -29,7 +29,7 @@ use MediaWiki\Logger\LoggerFactory; * Example config: * * $wgForeignFileRepos[] = [ - * 'class' => 'ForeignAPIRepo', + * 'class' => ForeignAPIRepo::class, * 'name' => 'shared', * 'apibase' => 'https://en.wikipedia.org/w/api.php', * 'fetchDescription' => true, // Optional @@ -53,7 +53,7 @@ class ForeignAPIRepo extends FileRepo { '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) diff --git a/includes/filerepo/ForeignDBRepo.php b/includes/filerepo/ForeignDBRepo.php index bce3005c67..7879448bb6 100644 --- a/includes/filerepo/ForeignDBRepo.php +++ b/includes/filerepo/ForeignDBRepo.php @@ -58,9 +58,9 @@ class ForeignDBRepo extends LocalRepo { 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 diff --git a/includes/filerepo/ForeignDBViaLBRepo.php b/includes/filerepo/ForeignDBViaLBRepo.php index bcd253fb4a..249cd27cfe 100644 --- a/includes/filerepo/ForeignDBViaLBRepo.php +++ b/includes/filerepo/ForeignDBViaLBRepo.php @@ -37,10 +37,10 @@ class ForeignDBViaLBRepo extends LocalRepo { 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; diff --git a/includes/filerepo/LocalRepo.php b/includes/filerepo/LocalRepo.php index f5b83ae5cc..1bf534649f 100644 --- a/includes/filerepo/LocalRepo.php +++ b/includes/filerepo/LocalRepo.php @@ -34,17 +34,17 @@ use Wikimedia\Rdbms\IDatabase; */ 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 ); diff --git a/includes/filerepo/file/ArchivedFile.php b/includes/filerepo/file/ArchivedFile.php index 7f48659ba3..6577ab6742 100644 --- a/includes/filerepo/file/ArchivedFile.php +++ b/includes/filerepo/file/ArchivedFile.php @@ -242,7 +242,7 @@ class ArchivedFile { 'fa_deleted', 'fa_deleted_timestamp', /* Used by LocalFileRestoreBatch */ 'fa_sha1', - ] + CommentStore::newKey( 'fa_description' )->getFields(); + ] + CommentStore::getStore()->getFields( 'fa_description' ); } /** @@ -255,7 +255,7 @@ class ArchivedFile { * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` */ public static function getQueryInfo() { - $commentQuery = CommentStore::newKey( 'fa_description' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'fa_description' ); return [ 'tables' => [ 'filearchive' ] + $commentQuery['tables'], 'fields' => [ @@ -302,9 +302,9 @@ class ArchivedFile { $this->metadata = $row->fa_metadata; $this->mime = "$row->fa_major_mime/$row->fa_minor_mime"; $this->media_type = $row->fa_media_type; - $this->description = CommentStore::newKey( 'fa_description' ) + $this->description = CommentStore::getStore() // Legacy because $row may have come from self::selectFields() - ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text; + ->getCommentLegacy( wfGetDB( DB_REPLICA ), 'fa_description', $row )->text; $this->user = $row->fa_user; $this->user_text = $row->fa_user_text; $this->timestamp = $row->fa_timestamp; diff --git a/includes/filerepo/file/File.php b/includes/filerepo/file/File.php index 4e79de2d56..d4605d3ca8 100644 --- a/includes/filerepo/file/File.php +++ b/includes/filerepo/file/File.php @@ -148,7 +148,7 @@ abstract class File implements IDBAccessObject { 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 = []; @@ -2186,7 +2186,7 @@ abstract class File implements IDBAccessObject { $metadata = $this->getMetadata(); if ( is_string( $metadata ) ) { - $metadata = MediaWiki\quietCall( 'unserialize', $metadata ); + $metadata = Wikimedia\quietCall( 'unserialize', $metadata ); } if ( !is_array( $metadata ) ) { diff --git a/includes/filerepo/file/ForeignAPIFile.php b/includes/filerepo/file/ForeignAPIFile.php index 16c154f788..2a40942527 100644 --- a/includes/filerepo/file/ForeignAPIFile.php +++ b/includes/filerepo/file/ForeignAPIFile.php @@ -33,7 +33,7 @@ class ForeignAPIFile extends File { /** @var array */ private $mInfo = []; - protected $repoClass = 'ForeignApiRepo'; + protected $repoClass = ForeignApiRepo::class; /** * @param Title|string|bool $title @@ -340,8 +340,10 @@ class ForeignAPIFile extends File { $iter = $this->repo->getBackend()->getFileList( [ 'dir' => $dir ] ); $files = []; - foreach ( $iter as $file ) { - $files[] = $file; + if ( $iter ) { + foreach ( $iter as $file ) { + $files[] = $file; + } } return $files; diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index 4248f953e1..7cf2749f00 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -84,7 +84,7 @@ class LocalFile extends File { protected $deleted; /** @var string */ - protected $repoClass = 'LocalRepo'; + protected $repoClass = LocalRepo::class; /** @var int Number of line to return by nextHistoryLine() (constructor) */ private $historyLine; @@ -215,7 +215,7 @@ class LocalFile extends File { 'img_user_text', 'img_timestamp', 'img_sha1', - ] + CommentStore::newKey( 'img_description' )->getFields(); + ] + CommentStore::getStore()->getFields( 'img_description' ); } /** @@ -230,7 +230,7 @@ class LocalFile extends File { * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` */ public static function getQueryInfo( array $options = [] ) { - $commentQuery = CommentStore::newKey( 'img_description' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'img_description' ); $ret = [ 'tables' => [ 'image' ] + $commentQuery['tables'], 'fields' => [ @@ -566,8 +566,8 @@ class LocalFile extends File { function decodeRow( $row, $prefix = 'img_' ) { $decoded = $this->unprefixRow( $row, $prefix ); - $decoded['description'] = CommentStore::newKey( 'description' ) - ->getComment( (object)$decoded )->text; + $decoded['description'] = CommentStore::getStore() + ->getComment( 'description', (object)$decoded )->text; $decoded['timestamp'] = wfTimestamp( TS_MW, $decoded['timestamp'] ); @@ -1292,7 +1292,7 @@ class LocalFile extends File { $options = []; $handler = MediaHandler::getHandler( $props['mime'] ); if ( $handler ) { - $metadata = MediaWiki\quietCall( 'unserialize', $props['metadata'] ); + $metadata = Wikimedia\quietCall( 'unserialize', $props['metadata'] ); if ( !is_array( $metadata ) ) { $metadata = []; @@ -1424,9 +1424,9 @@ class LocalFile extends File { # Test to see if the row exists using INSERT IGNORE # This avoids race conditions by locking the row until the commit, and also # doesn't deadlock. SELECT FOR UPDATE causes a deadlock for every race condition. - $commentStore = new CommentStore( 'img_description' ); + $commentStore = CommentStore::getStore(); list( $commentFields, $commentCallback ) = - $commentStore->insertWithTempTable( $dbw, $comment ); + $commentStore->insertWithTempTable( $dbw, 'img_description', $comment ); $dbw->insert( 'image', [ 'img_name' => $this->getName(), @@ -1522,7 +1522,9 @@ class LocalFile extends File { [ 'image_comment_temp' => [ 'LEFT JOIN', [ 'imgcomment_name = img_name' ] ] ] ); foreach ( $res as $row ) { - list( , $callback ) = $commentStore->insertWithTempTable( $dbw, $row->img_description ); + list( , $callback ) = $commentStore->insertWithTempTable( + $dbw, 'img_description', $row->img_description + ); $callback( $row->img_name ); } } @@ -2403,10 +2405,7 @@ class LocalFileDeleteBatch { $now = time(); $dbw = $this->file->repo->getMasterDB(); - $commentStoreImgDesc = new CommentStore( 'img_description' ); - $commentStoreOiDesc = new CommentStore( 'oi_description' ); - $commentStoreFaDesc = new CommentStore( 'fa_description' ); - $commentStoreFaReason = new CommentStore( 'fa_deleted_reason' ); + $commentStore = CommentStore::getStore(); $encTimestamp = $dbw->addQuotes( $dbw->timestamp( $now ) ); $encUserId = $dbw->addQuotes( $this->user->getId() ); @@ -2454,7 +2453,7 @@ class LocalFileDeleteBatch { $fields += array_map( [ $dbw, 'addQuotes' ], - $commentStoreFaReason->insert( $dbw, $this->reason ) + $commentStore->insert( $dbw, 'fa_deleted_reason', $this->reason ) ); if ( $wgCommentTableSchemaMigrationStage <= MIGRATION_WRITE_BOTH ) { @@ -2484,7 +2483,9 @@ class LocalFileDeleteBatch { [ 'image_comment_temp' => [ 'LEFT JOIN', [ 'imgcomment_name = img_name' ] ] ] ); foreach ( $res as $row ) { - list( , $callback ) = $commentStoreImgDesc->insertWithTempTable( $dbw, $row->img_description ); + list( , $callback ) = $commentStore->insertWithTempTable( + $dbw, 'img_description', $row->img_description + ); $callback( $row->img_name ); } } @@ -2508,9 +2509,9 @@ class LocalFileDeleteBatch { ); $rowsInsert = []; if ( $res->numRows() ) { - $reason = $commentStoreFaReason->createComment( $dbw, $this->reason ); + $reason = $commentStore->createComment( $dbw, $this->reason ); foreach ( $res as $row ) { - $comment = $commentStoreOiDesc->getComment( $row ); + $comment = $commentStore->getComment( 'oi_description', $row ); $rowsInsert[] = [ // Deletion-specific fields 'fa_storage_group' => 'deleted', @@ -2535,8 +2536,8 @@ class LocalFileDeleteBatch { 'fa_user_text' => $row->oi_user_text, 'fa_timestamp' => $row->oi_timestamp, 'fa_sha1' => $row->oi_sha1 - ] + $commentStoreFaReason->insert( $dbw, $reason ) - + $commentStoreFaDesc->insert( $dbw, $comment ); + ] + $commentStore->insert( $dbw, 'fa_deleted_reason', $reason ) + + $commentStore->insert( $dbw, 'fa_description', $comment ); } } @@ -2734,9 +2735,7 @@ class LocalFileRestoreBatch { $dbw = $this->file->repo->getMasterDB(); - $commentStoreImgDesc = new CommentStore( 'img_description' ); - $commentStoreOiDesc = new CommentStore( 'oi_description' ); - $commentStoreFaDesc = new CommentStore( 'fa_description' ); + $commentStore = CommentStore::getStore(); $status = $this->file->repo->newGood(); @@ -2824,12 +2823,12 @@ class LocalFileRestoreBatch { ]; } - $comment = $commentStoreFaDesc->getComment( $row ); + $comment = $commentStore->getComment( 'fa_description', $row ); if ( $first && !$exists ) { // This revision will be published as the new current version $destRel = $this->file->getRel(); list( $commentFields, $commentCallback ) = - $commentStoreImgDesc->insertWithTempTable( $dbw, $comment ); + $commentStore->insertWithTempTable( $dbw, 'img_description', $comment ); $insertCurrent = [ 'img_name' => $row->fa_name, 'img_size' => $row->fa_size, @@ -2885,7 +2884,7 @@ class LocalFileRestoreBatch { 'oi_minor_mime' => $props['minor_mime'], 'oi_deleted' => $this->unsuppress ? 0 : $row->fa_deleted, 'oi_sha1' => $sha1 - ] + $commentStoreOiDesc->insert( $dbw, $comment ); + ] + $commentStore->insert( $dbw, 'oi_description', $comment ); } $deleteIds[] = $row->fa_id; diff --git a/includes/filerepo/file/OldLocalFile.php b/includes/filerepo/file/OldLocalFile.php index 69e6896f0e..d08d0aefad 100644 --- a/includes/filerepo/file/OldLocalFile.php +++ b/includes/filerepo/file/OldLocalFile.php @@ -127,7 +127,7 @@ class OldLocalFile extends LocalFile { 'oi_timestamp', 'oi_deleted', 'oi_sha1', - ] + CommentStore::newKey( 'oi_description' )->getFields(); + ] + CommentStore::getStore()->getFields( 'oi_description' ); } /** @@ -142,7 +142,7 @@ class OldLocalFile extends LocalFile { * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` */ public static function getQueryInfo( array $options = [] ) { - $commentQuery = CommentStore::newKey( 'oi_description' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'oi_description' ); $ret = [ 'tables' => [ 'oldimage' ] + $commentQuery['tables'], 'fields' => [ @@ -434,7 +434,7 @@ class OldLocalFile extends LocalFile { return false; } - $commentFields = CommentStore::newKey( 'oi_description' )->insert( $dbw, $comment ); + $commentFields = CommentStore::getStore()->insert( $dbw, 'oi_description', $comment ); $dbw->insert( 'oldimage', [ 'oi_name' => $this->getName(), diff --git a/includes/gallery/ImageGalleryBase.php b/includes/gallery/ImageGalleryBase.php index 80fd22ebaa..318329726a 100644 --- a/includes/gallery/ImageGalleryBase.php +++ b/includes/gallery/ImageGalleryBase.php @@ -113,12 +113,12 @@ abstract class ImageGalleryBase extends ContextSource { 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 ] ); @@ -207,22 +207,26 @@ abstract class ImageGalleryBase extends ContextSource { /** * Set how wide each image will be, in pixels. * - * @param int $num Integer > 0; invalid numbers will be ignored + * @param string $num Number. Unit other than 'px is invalid. Invalid numbers + * and those below 0 are ignored. */ public function setWidths( $num ) { - if ( $num > 0 ) { - $this->mWidths = (int)$num; + $parsed = Parser::parseWidthParam( $num, false ); + if ( isset( $parsed['width'] ) && $parsed['width'] > 0 ) { + $this->mWidths = $parsed['width']; } } /** * Set how high each image will be, in pixels. * - * @param int $num Integer > 0; invalid numbers will be ignored + * @param string $num Number. Unit other than 'px is invalid. Invalid numbers + * and those below 0 are ignored. */ public function setHeights( $num ) { - if ( $num > 0 ) { - $this->mHeights = (int)$num; + $parsed = Parser::parseWidthParam( $num, false ); + if ( isset( $parsed['width'] ) && $parsed['width'] > 0 ) { + $this->mHeights = $parsed['width']; } } diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index 296c4b3bb9..78e7625915 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -21,6 +21,8 @@ * @file */ +use Wikimedia\ObjectFactory; + /** * Object handling generic submission, CSRF protection, layout and * other logic for UI forms. in a reusable manner. @@ -128,44 +130,44 @@ 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; diff --git a/includes/htmlform/HTMLFormElement.php b/includes/htmlform/HTMLFormElement.php index 66d6143329..2830b9c258 100644 --- a/includes/htmlform/HTMLFormElement.php +++ b/includes/htmlform/HTMLFormElement.php @@ -1,7 +1,7 @@ addClasses( [ 'mw-htmlform-hide-if' ] ); } if ( $this->modules ) { - // JS code must be able to read this before infusing (before OOjs UI is even loaded), + // JS code must be able to read this before infusing (before OOUI is even loaded), // so we put this in a separate attribute (not with the rest of the config). // And it's not needed anymore after infusing, so we don't put it in JS config at all. $this->setAttributes( [ 'data-mw-modules' => implode( ',', $this->modules ) ] ); diff --git a/includes/htmlform/HTMLFormField.php b/includes/htmlform/HTMLFormField.php index 9c301e6aa7..aab881129b 100644 --- a/includes/htmlform/HTMLFormField.php +++ b/includes/htmlform/HTMLFormField.php @@ -673,7 +673,7 @@ abstract class HTMLFormField { } /** - * Whether the field should be automatically infused. Note that all OOjs UI HTMLForm fields are + * Whether the field should be automatically infused. Note that all OOUI HTMLForm fields are * infusable (you can call OO.ui.infuse() on them), but not all are infused by default, since * there is no benefit in doing it e.g. for buttons and it's a small performance hit on page load. * @@ -686,7 +686,7 @@ abstract class HTMLFormField { /** * Get the list of extra ResourceLoader modules which must be loaded client-side before it's - * possible to infuse this field's OOjs UI widget. + * possible to infuse this field's OOUI widget. * * @return string[] */ diff --git a/includes/htmlform/fields/HTMLMultiSelectField.php b/includes/htmlform/fields/HTMLMultiSelectField.php index 09bacadb69..e8a7e992ca 100644 --- a/includes/htmlform/fields/HTMLMultiSelectField.php +++ b/includes/htmlform/fields/HTMLMultiSelectField.php @@ -102,7 +102,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable 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 ) . ' ' . diff --git a/includes/htmlform/fields/HTMLRadioField.php b/includes/htmlform/fields/HTMLRadioField.php index c98e1ec07b..f3bcc0e1eb 100644 --- a/includes/htmlform/fields/HTMLRadioField.php +++ b/includes/htmlform/fields/HTMLRadioField.php @@ -78,7 +78,7 @@ class HTMLRadioField extends HTMLFormField { $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 ) { diff --git a/includes/http/CurlHttpRequest.php b/includes/http/CurlHttpRequest.php index 3da3eb325c..44bdddbaab 100644 --- a/includes/http/CurlHttpRequest.php +++ b/includes/http/CurlHttpRequest.php @@ -111,14 +111,14 @@ class CurlHttpRequest extends MWHttpRequest { } if ( $this->followRedirects && $this->canFollowRedirects() ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); if ( !curl_setopt( $curlHandle, CURLOPT_FOLLOWLOCATION, true ) ) { $this->logger->debug( __METHOD__ . ": Couldn't set CURLOPT_FOLLOWLOCATION. " . "Probably open_basedir is set.\n" ); // Continue the processing. If it were in curl_setopt_array, // processing would have halted on its entry } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } if ( $this->profiler ) { diff --git a/includes/http/MWHttpRequest.php b/includes/http/MWHttpRequest.php index fff72ec09f..70691b4cff 100644 --- a/includes/http/MWHttpRequest.php +++ b/includes/http/MWHttpRequest.php @@ -49,7 +49,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface { protected $reqHeaders = []; protected $url; protected $parsedUrl; - /** @var callable */ + /** @var callable */ protected $callback; protected $maxRedirects = 5; protected $followRedirects = false; @@ -79,7 +79,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface { protected $profileName; /** - * @var LoggerInterface; + * @var LoggerInterface */ protected $logger; @@ -175,13 +175,16 @@ abstract class MWHttpRequest implements LoggerAwareInterface { * Generate a new request object * Deprecated: @see HttpRequestFactory::create * @param string $url Url to use - * @param array $options (optional) extra params to pass (see Http::request()) + * @param array|null $options (optional) extra params to pass (see Http::request()) * @param string $caller The method making this request, for profiling * @throws DomainException * @return MWHttpRequest * @see MWHttpRequest::__construct */ - public static function factory( $url, $options = null, $caller = __METHOD__ ) { + public static function factory( $url, array $options = null, $caller = __METHOD__ ) { + if ( $options === null ) { + $options = []; + } return \MediaWiki\MediaWikiServices::getInstance() ->getHttpRequestFactory() ->create( $url, $options, $caller ); diff --git a/includes/import/ImportStreamSource.php b/includes/import/ImportStreamSource.php index 94a2b937e0..cf382e4804 100644 --- a/includes/import/ImportStreamSource.php +++ b/includes/import/ImportStreamSource.php @@ -53,9 +53,9 @@ class ImportStreamSource implements ImportSource { * @return Status */ static function newFromFile( $filename ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $file = fopen( $filename, 'rt' ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$file ) { return Status::newFatal( "importcantopen" ); } diff --git a/includes/import/WikiImporter.php b/includes/import/WikiImporter.php index 5978550c54..8991f5ef4d 100644 --- a/includes/import/WikiImporter.php +++ b/includes/import/WikiImporter.php @@ -65,7 +65,7 @@ class WikiImporter { $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 ); diff --git a/includes/import/WikiRevision.php b/includes/import/WikiRevision.php index edb0c9af1c..3513f8ce42 100644 --- a/includes/import/WikiRevision.php +++ b/includes/import/WikiRevision.php @@ -729,7 +729,7 @@ class WikiRevision { 'log_namespace' => $this->getTitle()->getNamespace(), 'log_title' => $this->getTitle()->getDBkey(), 'log_params' => $this->params - ] + CommentStore::newKey( 'log_comment' )->insert( $dbw, $this->getComment() ); + ] + CommentStore::getStore()->insert( $dbw, 'log_comment', $this->getComment() ); $dbw->insert( 'logging', $data, __METHOD__ ); return true; diff --git a/includes/installer/DatabaseInstaller.php b/includes/installer/DatabaseInstaller.php index 62acebf382..e6ee70edfd 100644 --- a/includes/installer/DatabaseInstaller.php +++ b/includes/installer/DatabaseInstaller.php @@ -730,10 +730,10 @@ abstract class DatabaseInstaller { return $status; } global $IP; - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $rows = file( "$IP/maintenance/interwiki.list", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); $interwikis = []; if ( !$rows ) { return Status::newFatal( 'config-install-interwiki-list' ); diff --git a/includes/installer/DatabaseUpdater.php b/includes/installer/DatabaseUpdater.php index 176d0af7f5..2083500ed0 100644 --- a/includes/installer/DatabaseUpdater.php +++ b/includes/installer/DatabaseUpdater.php @@ -1072,7 +1072,7 @@ abstract class DatabaseUpdater { "maintenance/populateLogUsertext.php.\n" ); - $task = $this->maintenance->runChild( 'PopulateLogUsertext' ); + $task = $this->maintenance->runChild( PopulateLogUsertext::class ); $task->execute(); $this->output( "done.\n" ); } @@ -1088,7 +1088,7 @@ abstract class DatabaseUpdater { "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" ); } @@ -1128,7 +1128,7 @@ abstract class DatabaseUpdater { } $this->output( "Updating category collations..." ); - $task = $this->maintenance->runChild( 'UpdateCollation' ); + $task = $this->maintenance->runChild( UpdateCollation::class ); $task->execute(); $this->output( "...done.\n" ); } @@ -1139,7 +1139,7 @@ abstract class DatabaseUpdater { */ 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" ); } @@ -1177,7 +1177,9 @@ abstract class DatabaseUpdater { /** * @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(); @@ -1224,7 +1226,7 @@ abstract class DatabaseUpdater { "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" ); } @@ -1236,7 +1238,7 @@ abstract class DatabaseUpdater { */ 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" ); } diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index 5ea9bfea32..dbd143c8e4 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -243,7 +243,6 @@ abstract class Installer { * @var array */ protected $objectCaches = [ - 'xcache' => 'xcache_get', 'apc' => 'apc_fetch', 'apcu' => 'apcu_fetch', 'wincache' => 'wincache_ucache_get' @@ -364,7 +363,7 @@ abstract class Installer { // disable (problematic) object cache types explicitly, preserving all other (working) ones // bug T113843 - $emptyCache = [ 'class' => 'EmptyBagOStuff' ]; + $emptyCache = [ 'class' => EmptyBagOStuff::class ]; $objectCaches = [ CACHE_NONE => $emptyCache, @@ -447,7 +446,6 @@ abstract class Installer { $this->parserTitle = Title::newFromText( 'Installer' ); $this->parserOptions = new ParserOptions( $wgUser ); // language will be wrong :( $this->parserOptions->setEditSection( false ); - $this->parserOptions->setWrapOutputClass( false ); // Don't try to access DB before user language is initialised $this->setParserLanguage( Language::factory( 'en' ) ); } @@ -600,9 +598,9 @@ abstract class Installer { // phpcs:ignore MediaWiki.VariableAnalysis.UnusedGlobalVariables global $wgExtensionDirectory, $wgStyleDirectory; - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $_lsExists = file_exists( "$IP/LocalSettings.php" ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$_lsExists ) { return false; @@ -689,6 +687,7 @@ abstract class Installer { $out = $wgParser->parse( $text, $this->parserTitle, $this->parserOptions, $lineStart ); $html = $out->getText( [ 'enableSectionEditLinks' => false, + 'unwrap' => true, ] ); } catch ( MediaWiki\Services\ServiceDisabledException $e ) { $html = ' ' . htmlspecialchars( $text ); @@ -806,14 +805,14 @@ abstract class Installer { * @return bool */ protected function envCheckPCRE() { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $regexd = preg_replace( '/[\x{0430}-\x{04FF}]/iu', '', '-АБВГД-' ); // Need to check for \p support too, as PCRE can be compiled // with utf8 support, but not unicode property support. // check that \p{Zs} (space separators) matches // U+3000 (Ideographic space) $regexprop = preg_replace( '/\p{Zs}/u', '', "-\xE3\x80\x80-" ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $regexd != '--' || $regexprop != '--' ) { $this->showError( 'config-pcre-no-utf8' ); @@ -857,9 +856,6 @@ abstract class Installer { $caches = []; foreach ( $this->objectCaches as $name => $function ) { if ( function_exists( $function ) ) { - if ( $name == 'xcache' && !wfIniGetBool( 'xcache.var_size' ) ) { - continue; - } $caches[$name] = true; } } @@ -1209,7 +1205,7 @@ abstract class Installer { // it would be good to check other popular languages here, but it'll be slow. - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); foreach ( $scriptTypes as $ext => $contents ) { foreach ( $contents as $source ) { @@ -1228,14 +1224,14 @@ abstract class Installer { unlink( $dir . $file ); if ( $text == 'exec' ) { - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return $ext; } } } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return false; } @@ -1568,7 +1564,7 @@ abstract class Installer { $user->saveSettings(); // Update user count - $ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 ); + $ssUpdate = SiteStatsUpdate::factory( [ 'users' => 1 ] ); $ssUpdate->doUpdate(); } $status = Status::newGood(); @@ -1677,7 +1673,7 @@ abstract class Installer { // implementation that won't stomp on PHP's cookies. $GLOBALS['wgSessionProviders'] = [ [ - 'class' => 'InstallerSessionProvider', + 'class' => InstallerSessionProvider::class, 'args' => [ [ 'priority' => 1, ] ] @@ -1704,8 +1700,8 @@ abstract class Installer { * Some long-running pages (Install, Upgrade) will want to do this */ protected function disableTimeLimit() { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); set_time_limit( 0 ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); } } diff --git a/includes/installer/InstallerOverrides.php b/includes/installer/InstallerOverrides.php index eba3a20d6c..c9154b9a86 100644 --- a/includes/installer/InstallerOverrides.php +++ b/includes/installer/InstallerOverrides.php @@ -30,9 +30,9 @@ class InstallerOverrides { 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; diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php index 44086a125e..bce540557d 100644 --- a/includes/installer/MysqlUpdater.php +++ b/includes/installer/MysqlUpdater.php @@ -432,7 +432,7 @@ class MysqlUpdater extends DatabaseUpdater { } protected function doOldLinksUpdate() { - $cl = $this->maintenance->runChild( 'ConvertLinks' ); + $cl = $this->maintenance->runChild( ConvertLinks::class ); $cl->execute(); } @@ -942,7 +942,7 @@ class MysqlUpdater extends DatabaseUpdater { $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(); } @@ -965,7 +965,7 @@ class MysqlUpdater extends DatabaseUpdater { "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" ); } @@ -977,7 +977,7 @@ class MysqlUpdater extends DatabaseUpdater { "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(); } } diff --git a/includes/installer/SqliteInstaller.php b/includes/installer/SqliteInstaller.php index d5909f4e1f..6f168720c7 100644 --- a/includes/installer/SqliteInstaller.php +++ b/includes/installer/SqliteInstaller.php @@ -160,9 +160,9 @@ class SqliteInstaller extends DatabaseInstaller { # Called early on in the installer, later we just want to sanity check # if it's still writable if ( $create ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $ok = wfMkdirParents( $dir, 0700, __METHOD__ ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( !$ok ) { return Status::newFatal( 'config-sqlite-mkdir-error', $dir ); } @@ -321,7 +321,7 @@ EOT; return "# SQLite-specific settings \$wgSQLiteDataDir = \"{$dir}\"; \$wgObjectCaches[CACHE_DB] = [ - 'class' => 'SqlBagOStuff', + 'class' => SqlBagOStuff::class, 'loggroup' => 'SQLBagOStuff', 'server' => [ 'type' => 'sqlite', diff --git a/includes/installer/i18n/af.json b/includes/installer/i18n/af.json index 6b337931fe..58c6b72ce0 100644 --- a/includes/installer/i18n/af.json +++ b/includes/installer/i18n/af.json @@ -41,7 +41,6 @@ "config-no-db": "Kon nie 'n geskikte databasisdrywer vind nie!", "config-memory-raised": "PHP se memory_limit is $1, en is verhoog tot $2.", "config-memory-bad": "'''Waarskuwing:''' PHP se memory_limit is $1.\nDit is waarskynlik te laag.\nDie installasie mag moontlik faal!", - "config-xcache": "[Http://trac.lighttpd.net/xcache/ XCache] is geïnstalleer", "config-apc": "[Http://www.php.net/apc APC] is geïnstalleer", "config-wincache": "[Http://www.iis.net/download/WinCacheForPhp WinCache] is geïnstalleer", "config-diff3-bad": "GNU diff3 nie gevind nie.", diff --git a/includes/installer/i18n/ar.json b/includes/installer/i18n/ar.json index b50247bad7..9d7d0af5d7 100644 --- a/includes/installer/i18n/ar.json +++ b/includes/installer/i18n/ar.json @@ -51,17 +51,16 @@ "config-help-restart": "هل تريد إزالة البيانات المحفوظة التي قد قمت بإدخالها وإعادة تشغيل عملية التثبيت؟", "config-restart": "نعم، إعادة التشغيل", "config-welcome": "=== التحقق من البيئة ===\nسوف يتم الآن التحقق من أن البيئة مناسبة لتنصيب ميديا ويكي.\nتذكر تضمين هذه المعلومات اذا اردت طلب المساعدة عن كيفية إكمال التنصيب.", - "config-copyright": "=== حقوق النسخ والشروط ===\n\n$1\n\nهذا البرنامج هو برنامج حر؛ يمكنك إعادة توزيعه و/أو تعديله تحت شروط رخصة جنو العامة على أن هذا البرنامج قد نُشر من قِبل مؤسسة البرمجيات الحرة؛ إما النسخة 2 من الرخصة، أو أي نسخة أخرى بعدها (من إختيارك)\n\nتم توزيع هذا البرنامج على أمل ان يكون مفيدًا ولكن دون أية ضمانات؛ دون حتى أية ضمانات مفهومة ضمنيًا أو رواجات أو أية أسباب محددة.\nأنظر رخصة جنو العامة لمزيد من المعلومات.\n\nمن المفترض أنك إستملت نسخة عن رخصة جنو العامة مع هذا البرنامج؛ اذا لم تقعل إكتب رسالة إلى مؤسسة البرمجيات الحرة المحدودة، شارع 51 فرانكلين الطابق الخامس، بوسطن MA 02110-1301 الولايات المتخدة أو [http://www.gnu.org/copyleft/gpl.html read it online].", + "config-copyright": "=== حقوق النسخ والشروط ===\n\n$1\n\nهذا البرنامج هو برنامج حر؛ يمكنك إعادة توزيعه و/أو تعديله تحت شروط رخصة جنو العامة على أن هذا البرنامج قد نُشر من قِبل مؤسسة البرمجيات الحرة؛ إما النسخة 2 من الرخصة، أو أي نسخة أخرى بعدها (من إختيارك)\n\nتم توزيع هذا البرنامج على أمل ان يكون مفيدًا ولكن دون أية ضمانات؛ دون حتى أية ضمانات مفهومة ضمنيًا أو رواجات أو أية أسباب محددة.\nأنظر رخصة جنو العامة لمزيد من المعلومات.\n\nمن المفترض أنك إستملت نسخة عن رخصة جنو العامة مع هذا البرنامج؛ اذا لم تقعل إكتب رسالة إلى مؤسسة البرمجيات الحرة المحدودة، شارع 51 فرانكلين الطابق الخامس، بوسطن MA 02110-1301 الولايات المتخدة أو [https://www.gnu.org/copyleft/gpl.html read it online].", "config-sidebar": "* [https://www.mediawiki.org موقع ميدياويكي]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents دليل المستخدم]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents دليل الإداري]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ الأسئلة المتكررة]\n----\n* إقراءني\n* ملاحظات الإصدار\n* النسخ\n* الترقية", "config-env-good": "جرى التحقق من البيئة. يمكنك تنصيب ميدياويكي.", "config-env-bad": "جرى التحقق من البيئة. لا يمكنك تنصيب ميدياويكي.", "config-env-php": "بي إتش بي $1 مثبت.", "config-env-hhvm": "نصبت HHVM $1.", "config-outdated-sqlite": "تحذير: لديك SQLite $1, which وهو أقل من الحد الأدنى المطلوب للنسخة $2. SQLite سوف يكون غير متوفر.", - "config-xcache": "تثبيت [http://xcache.lighttpd.net/ XCache]", "config-apc": "تثبيت [http://www.php.net/apc APC]", "config-apcu": "تثبيت [http://www.php.net/apcu APCu]", - "config-wincache": "تثبيت [http://www.iis.net/download/WinCacheForPhp WinCache]", + "config-wincache": "تثبيت [https://www.iis.net/download/WinCacheForPhp WinCache]", "config-diff3-bad": "جنو diff3 غير موجود.", "config-imagemagick": "تم العثور على ImageMagick: $1.\nسيتم تمكين تصغير الصور إذا قمت بتمكين التحميل.", "config-no-scaling": "لا يمكن أن تجد مكتبة GD أو ImageMagick; سيتم تعطيل تصغير الصور.", diff --git a/includes/installer/i18n/ast.json b/includes/installer/i18n/ast.json index 7db3e0849c..5b24d7c183 100644 --- a/includes/installer/i18n/ast.json +++ b/includes/installer/i18n/ast.json @@ -44,14 +44,14 @@ "config-help-restart": "¿Quier llimpiar tolos datos guardaos qu'escribió y reaniciar el procesu d'instalación?", "config-restart": "Sí, reanicialu", "config-welcome": "=== Comprobaciones del entornu ===\nAgora van facese unes comprobaciones básiques para ver si l'entornu ye afayadizu pa la instalación de MediaWiki.\nAlcuérdese d'incluir esta información si necesita encontu pa completar la instalación.", - "config-copyright": "=== Drechos d'autor y condiciones d'usu ===\n\n$1\n\nEsti programa ye software llibre; puedes redistribuilu y/o camudalu baxo les condiciones de la llicencia pública xeneral GNU tal como la publica la Free Software Foundation; versión 2 o (como prefieras) cualquier versión posterior.\n\nEsti programa distribúese cola esperanza de que pueda ser útil, pero ensin garantía denguna; nin siquiera la garantía implícita de comercialidá o \nadautación a un fin determináu.\nVer la Llicencia pública xeneral GNU pa más detalles.\n\nHabríes de tener recibío una copia de la llicencia pública xeneral GNU xunto con esti programa; sinón, escribi a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lléila en llinia].", + "config-copyright": "=== Drechos d'autor y condiciones d'usu ===\n\n$1\n\nEsti programa ye software llibre; puedes redistribuilu y/o camudalu baxo les condiciones de la llicencia pública xeneral GNU tal como la publica la Free Software Foundation; versión 2 o (como prefieras) cualquier versión posterior.\n\nEsti programa distribúese cola esperanza de que pueda ser útil, pero ensin garantía denguna; nin siquiera la garantía implícita de comercialidá o \nadautación a un fin determináu.\nVer la Llicencia pública xeneral GNU pa más detalles.\n\nHabríes de tener recibío una copia de la llicencia pública xeneral GNU xunto con esti programa; sinón, escribi a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [https://www.gnu.org/copyleft/gpl.html lléila en llinia].", "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/gl Páxina principal de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía del usuariu]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guía del alministrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Entrugues frecuentes]\n----\n* Lléame\n* Notes de llanzamientu\n* Copia\n* Anovamientu", "config-env-good": "Comprobóse l'entornu.\nPue instalar MediaWiki.", "config-env-bad": "Comprobóse l'entornu.\nNun pue instalar MediaWiki.", "config-env-php": "PHP $1 ta instaláu.", "config-env-hhvm": "HHVM $1 ta instaláu.", - "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl estensión intl PECL] pa la normalización Unicode.", - "config-unicode-pure-php-warning": "'''Avisu:''' La [http://pecl.php.net/intl estensión intl PECL] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi xestiona un sitiu con un tráficu altu, tendría de lleer una migaya sobro la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", + "config-unicode-using-intl": "Usando la [https://pecl.php.net/intl estensión intl PECL] pa la normalización Unicode.", + "config-unicode-pure-php-warning": "'''Avisu:''' La [https://pecl.php.net/intl estensión intl PECL] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi xestiona un sitiu con un tráficu altu, tendría de lleer una migaya sobro la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", "config-unicode-update-warning": "'''Avisu:''' La versión instalada del envoltoriu de normalización Unicode usa una versión antigua de la biblioteca [http://site.icu-project.org/ de los proyeutos ICU].\nTendría [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations d'anovala] si ye importante pa vusté usar Unicode.", "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesites instalar un controlador de base de datos pa PHP.\n{{PLURAL:$2|Tien sofitu el tipu de base de datos siguiente|Tienen sofitu los tipos de base de datos siguientes}}: $1.\n\nSi compilasti PHP tu mesmu, reconfigúralu con un cliente de base de datos activáu, por exemplu, usando ./configure --with-mysqli.\nSi instalasti PHP dende un paquete de Debian o Ubuntu, necesites instalar tamién,por exemplu, el paquete php5-mysql.", "config-outdated-sqlite": "'''Avisu:''' tien SQLite $1, que ye inferior a la versión mínima necesaria $2. SQLite nun tará disponible.", @@ -60,12 +60,11 @@ "config-pcre-no-utf8": "Erru fatal: Paez que'l módulu PCRE de PHP foi compiláu ensin el soporte PCRE_UTF8.\nMediaWiki requier compatibilidá con UTF_8 pa furrular correutamente.", "config-memory-raised": "El parámetru memory_limit de PHP ye $1. Auméntase a $2.", "config-memory-bad": "Alvertencia:: el parámetru memory_limit de PHP ye $1.\nProbablemente sía demasiáu baxu.\n¡La instalación puede fallar!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] ta instaláu", "config-apc": "[http://www.php.net/apc APC] ta instaláu", "config-apcu": "[http://www.php.net/apcu APCu] ta instaláu", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ta instaláu", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] ta instaláu", "config-no-cache-apcu": "Warning: Non pudo atopase[http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caxé d'oxetos nun ta activáu.", - "config-mod-security": "Alvertencia: El to servidor web tien activáu [http://modsecurity.org/mod_security]/mod_security2 .Munches de les sos configuraciones comunes pueden causar problemes a MediaWiki o otru software que dexe a los usuarios publicar conteníu arbitrario. De ser posible, tendríes de desactivalo. Si non, consulta la [http://modsecurity.org/documentation/ mod_security documentation] o contacta col alministrador del to servidor si atopes erros aleatorios.", + "config-mod-security": "Alvertencia: El to servidor web tien activáu [https://modsecurity.org/mod_security]/mod_security2 .Munches de les sos configuraciones comunes pueden causar problemes a MediaWiki o otru software que dexe a los usuarios publicar conteníu arbitrario. De ser posible, tendríes de desactivalo. Si non, consulta la [https://modsecurity.org/documentation/ mod_security documentation] o contacta col alministrador del to servidor si atopes erros aleatorios.", "config-diff3-bad": "Nun s'alcontró GNU diff3.", "config-git": "Alcontróse'l software de control de versiones Git: $1.", "config-git-bad": "Nun s'alcontró el software de control de versiones Git.", diff --git a/includes/installer/i18n/ba.json b/includes/installer/i18n/ba.json index 909a1a2ea9..a9c2c7f74e 100644 --- a/includes/installer/i18n/ba.json +++ b/includes/installer/i18n/ba.json @@ -51,14 +51,14 @@ "config-help-restart": "Һеҙ үҙегеҙ индергән һәм һаҡланған әлеге мәғлүмәттәрҙе юйып, урынлаштырыуҙың яңы процессын ебәрергә теләйһегеҙме?", "config-restart": "Эйе, яңынан башларға", "config-welcome": "=== Даирәне тикшереү ===", - "config-copyright": "=== Авторлыҡ хоҡуҡтары һәм шарттар ===\n\n$1\n\nMediaWiki - ирекле программа тьәминәте. Һеҙ уны ирекле программа тьәминәте фонды баҫып сығарған GNU General Public License лицензия талаптарына ярашлы рәүештә тарата һәм/йәки үҙгәртә алаһығыҙ;икенсе версияһына йәки ниндәйҙә булһа һуңғы версияһына ярашлы рәүештә.\nMediaWiki - файҙалы булыу өмөтө менән таратыла, ләкин бер ниндәй ҙә гарантияларһыҙ, хатта күҙ уңында тотолған гарантияларһыҙ коммерция ҡимәтенән тыш йәки ниндәй ҙә булһа маҡсатҡа яраҡһыҙ . Ҡара. тулыраҡ мәғлүмәт алыу өсөн GNU General Public License лицезияһы. \nҺеҙ копияһын GNU General Public Licenseошо программа менән бергә алырға тейеш инегеҙ, әгәр алмаһағыҙ, Free Software Foundation, Inc. ошо адрес буйынса яҙығыҙ:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA йәки [http://www.gnu.org/copyleft/gpl.html уны онлайнда уҡығыҙ].", + "config-copyright": "=== Авторлыҡ хоҡуҡтары һәм шарттар ===\n\n$1\n\nMediaWiki - ирекле программа тьәминәте. Һеҙ уны ирекле программа тьәминәте фонды баҫып сығарған GNU General Public License лицензия талаптарына ярашлы рәүештә тарата һәм/йәки үҙгәртә алаһығыҙ;икенсе версияһына йәки ниндәйҙә булһа һуңғы версияһына ярашлы рәүештә.\nMediaWiki - файҙалы булыу өмөтө менән таратыла, ләкин бер ниндәй ҙә гарантияларһыҙ, хатта күҙ уңында тотолған гарантияларһыҙ коммерция ҡимәтенән тыш йәки ниндәй ҙә булһа маҡсатҡа яраҡһыҙ . Ҡара. тулыраҡ мәғлүмәт алыу өсөн GNU General Public License лицезияһы. \nҺеҙ копияһын GNU General Public Licenseошо программа менән бергә алырға тейеш инегеҙ, әгәр алмаһағыҙ, Free Software Foundation, Inc. ошо адрес буйынса яҙығыҙ:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA йәки [https://www.gnu.org/copyleft/gpl.html уны онлайнда уҡығыҙ].", "config-sidebar": "* [https://www.mediawiki.org Сайт MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/ru Ҡулланыусылар өсөн белешмә]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/ru Администраторҙар өсөн белешмә]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ru FAQ]\n----\n* Readme-файл\n* Сығарылыш тураһында мәғлүмәт\n* Лицензия\n* Яңыртыуҙар", "config-env-good": "Мөхитте тикшереү уңышлы тамамланды. MediaWiki урынлаштырырға мөмкин.", "config-env-bad": "Мөхит тикшерелде. Һеҙ MediaWiki урынлаштыра алмайһығыҙ.", "config-env-php": "PHP: $1 өлгөһө урынлаштырылды.", "config-env-hhvm": "HHVM $1 урынлаштырылды.", - "config-unicode-using-intl": " [http://pecl.php.net/intl ҡушылмаһы файҙаланасаҡ, «intl» для PECL] Юникод нормаль эшләһен өсөн.", - "config-unicode-pure-php-warning": "'''Иғтибар!''': [http://pecl.php.net/intl ҡушылмаһы intl из PECL] Юникод өсөн рөхсәт ителмәгән PHP менән бик әкрен эшләйәсәк.\nҺеҙҙең сайт бик көсөргәнешле эшләһә [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникодты нормалләштереү] өсөн уҡығыҙ.", + "config-unicode-using-intl": " [https://pecl.php.net/intl ҡушылмаһы файҙаланасаҡ, «intl» для PECL] Юникод нормаль эшләһен өсөн.", + "config-unicode-pure-php-warning": "'''Иғтибар!''': [https://pecl.php.net/intl ҡушылмаһы intl из PECL] Юникод өсөн рөхсәт ителмәгән PHP менән бик әкрен эшләйәсәк.\nҺеҙҙең сайт бик көсөргәнешле эшләһә [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникодты нормалләштереү] өсөн уҡығыҙ.", "config-unicode-update-warning": "\"Иҫкәртеү\". Ҡуйылған тышлыҡ Юникодты нормаға килтереүҙең иҫке китапхана версияһын ҡуллана[http://site.icu-project.org/ проекта ICU].Әгәр Юникодты тулы мәғәнәһендә ҡулланырға теләһәгеҙ, һеҙ [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations версияны яңыртырға] тейешһегеҙ.", "config-no-db": "Мәғлүмәттәр базаһына тура килгән драйверҙарҙы табып булманы!Һеҙгә PHP өсөн мәғлүмәттәр базаһының драйверҙарын ҡуйырға кәрәк.{{PLURAL:$2|сираттағы төр ҡулланыла|сираттағы төрҙәр ҡулланыла}}мәғлүмәттәр базалары:$1.\nӘгәр һеҙ үҙегеҙ PHP -ға компиляция яһаған булһағыҙ, мәғлүмәттәр базаһына клиентты индереп уны яңынан, мәҫәлән, ./configure --with-mysqli ярҙамы менән көйләгеҙ. Әгәр ҙә һеҙ PHP -ны Debian йәки Ubuntu пакеттарынан ҡуйһағыҙ, һеҙгә, мәҫәлән, php5-mysql пакетын да ҡуйырға кәрәк булыр.", "config-outdated-sqlite": "'''Киҫәтеү''': Һеҙҙә SQLite $1 ҡуйылған, $2 тейешле өлгөнән түбән . SQLite асылмаясаҡ.", @@ -67,11 +67,10 @@ "config-pcre-no-utf8": "'''Фаталь хата'''. PHP өсөн PCRE модуле PCRE_UTF8 менән яраҡлыштырылмаған.\nMediaWiki дөрөҫ эшләһен өсөн UTF-8 талап ителә.", "config-memory-raised": "Хәтер сикләнгән PHP (memory_limit) $1 $2 тиклем арттырылған.", "config-memory-bad": "'''Иғтибар:''' PHP күләме memory_limit $1 тәшкил итә.\nБәлки, был саманан тыш аҙҙыр. \nҠуйылыштың уңышһыҙлыҡҡа осрауы бар!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] урынлаштырылды", "config-apc": "[http://www.php.net/apc APC] урынлаштырылды", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] урынлыштырылды", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] урынлыштырылды", "config-no-cache-apcu": "'''Иғтибар:''' [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] табылманы йәки [http://www.iis.net/download/WinCacheForPhp WinCache].\nОбъекттарҙы кэшлау һүндереләсәк..", - "config-mod-security": "Иғтибар: һеҙҙең веб-серверығыҙҙа [http://modsecurity.org/ mod_security]/mod_security2 ҡабыҙылған. Уның күп кенә стандарт көйләүҙәре MediaWiki йәки бүтән ПО ҡулланыусыларға серверға ирекле контент ебәрегрә мөмкинлек буйынса проблемалар тыуҙырыуы мөмкин.\nКөтөлмәгән хаталарға тап булһағыҙ, ошонда [http://modsecurity.org/documentation/ документации mod_security]йәки үҙегеҙҙең хостинг-провайдерығыҙға мөрәжәғәт итегеҙ.", + "config-mod-security": "Иғтибар: һеҙҙең веб-серверығыҙҙа [https://modsecurity.org/ mod_security]/mod_security2 ҡабыҙылған. Уның күп кенә стандарт көйләүҙәре MediaWiki йәки бүтән ПО ҡулланыусыларға серверға ирекле контент ебәрегрә мөмкинлек буйынса проблемалар тыуҙырыуы мөмкин.\nКөтөлмәгән хаталарға тап булһағыҙ, ошонда [https://modsecurity.org/documentation/ документации mod_security]йәки үҙегеҙҙең хостинг-провайдерығыҙға мөрәжәғәт итегеҙ.", "config-diff3-bad": "GNU diff3 табылманы.", "config-git": "Git өлгөләрҙе контролләү системаһы табылды: $1.", "config-git-bad": "Git өлгөләре менән идара итеү программаһы табылды?", @@ -223,7 +222,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 йәки яңырағы", "config-license-pd": "Йәмәғәт милке", "config-license-cc-choose": "Creative Commons бер лицензияны һайлағыҙ", - "config-license-help": "Күпселек дөйөм ҡулланыуҙағы викиҙар үҙ материалдарын [http://freedomdefined.org/Definition/Ru ирекле лицензия] шарттарында файҙаланыуға рөхсәт бирә.\nБыл берҙәмлек тойғоһон булдыррыға ярҙам итә, ҡатнашыу ваҡытын оҙайтыуға дәртләндерә. Әммә шәхси йәки корпоратив викиҙар өсөн бындай ихтыяж юҡ. \n\nӘгәр һеҙ Википедия текстарын файҙаланырға йәки Википедияға үҙ викиғыҙҙан текстар күсереү мөмкинлеге булыуын теләһәгеҙ, \n{{int:config-license-cc-by-sa}} һайлағыҙ.\nВикипедия элек GNU Free Documentation License лицензияһын файҙалана ине.\nGFDL файҙаланыла ала, әммә ул аңлау өсөн ҡатмарлы һәм материалдарҙы ҡабатлап ҡулланыуҙы ауырлаштыра.", + "config-license-help": "Күпселек дөйөм ҡулланыуҙағы викиҙар үҙ материалдарын [https://freedomdefined.org/Definition/Ru ирекле лицензия] шарттарында файҙаланыуға рөхсәт бирә.\nБыл берҙәмлек тойғоһон булдыррыға ярҙам итә, ҡатнашыу ваҡытын оҙайтыуға дәртләндерә. Әммә шәхси йәки корпоратив викиҙар өсөн бындай ихтыяж юҡ. \n\nӘгәр һеҙ Википедия текстарын файҙаланырға йәки Википедияға үҙ викиғыҙҙан текстар күсереү мөмкинлеге булыуын теләһәгеҙ, \n{{int:config-license-cc-by-sa}} һайлағыҙ.\nВикипедия элек GNU Free Documentation License лицензияһын файҙалана ине.\nGFDL файҙаланыла ала, әммә ул аңлау өсөн ҡатмарлы һәм материалдарҙы ҡабатлап ҡулланыуҙы ауырлаштыра.", "config-email-settings": "Электрон почта көйләүҙәре", "config-enable-email": "e-mail сығыусы почтаны рәхсәт итергә", "config-enable-email-help": "Электрон почта эшләһен өсөн, [http://www.php.net/manual/ru/mail.configuration.php PHP көйләүҙәрен] башҡарырға кәрәк.\nӘгәр электрон почта мөмкинлектәре кәрәкмәһә, һүндерергә була.", diff --git a/includes/installer/i18n/be-tarask.json b/includes/installer/i18n/be-tarask.json index ffcbe39433..4c4504e261 100644 --- a/includes/installer/i18n/be-tarask.json +++ b/includes/installer/i18n/be-tarask.json @@ -47,14 +47,14 @@ "config-help-restart": "Ці жадаеце выдаліць усе ўведзеныя зьвесткі і пачаць працэс усталяваньня зноў?", "config-restart": "Так, пачаць зноў", "config-welcome": "== Праверка асяродзьдзя ==\nЗараз будуць праведзеныя праверкі для запэўніваньня, што гэтае асяродзьдзе адпаведнае для ўсталяваньня MediaWiki.\nНе забудзьце далучыць гэтую інфармацыю, калі вам спатрэбіцца дапамога для завяршэньня ўсталяваньня.", - "config-copyright": "== Аўтарскае права і ўмовы ==\n\n$1\n\nThis 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.\n\nThis 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'''.\nSee the GNU General Public License for more details.\n\nYou 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. or [http://www.gnu.org/copyleft/gpl.html read it online].", + "config-copyright": "== Аўтарскае права і ўмовы ==\n\n$1\n\nThis 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.\n\nThis 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'''.\nSee the GNU General Public License for more details.\n\nYou 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. or [https://www.gnu.org/copyleft/gpl.html read it online].", "config-sidebar": "* [https://www.mediawiki.org Хатняя старонка MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Даведка для ўдзельнікаў]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Даведка для адміністратараў]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Адказы на частыя пытаньні]\n----\n* Прачытайце\n* Паляпшэньні ў вэрсіі\n* Капіяваньне\n* Абнаўленьне", "config-env-good": "Асяродзьдзе было праверанае.\nВы можаце ўсталёўваць MediaWiki.", "config-env-bad": "Асяродзьдзе было праверанае.\nУсталяваньне MediaWiki немагчымае.", "config-env-php": "Усталяваны PHP $1.", "config-env-hhvm": "HHVM $1 усталяваная.", - "config-unicode-using-intl": "Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі", - "config-unicode-pure-php-warning": "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.\nКалі ў Вас сайт з высокай наведвальнасьцю, раім пачытаць пра [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-нармалізацыю].", + "config-unicode-using-intl": "Выкарыстоўваецца [https://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі", + "config-unicode-pure-php-warning": "'''Папярэджаньне''': [https://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.\nКалі ў Вас сайт з высокай наведвальнасьцю, раім пачытаць пра [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-нармалізацыю].", "config-unicode-update-warning": "'''Папярэджаньне''': усталяваная вэрсія бібліятэкі для Unicode-нармалізацыі выкарыстоўвае састарэлую вэрсію бібліятэкі з [http://site.icu-project.org/ праекту ICU].\nРаім [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations абнавіць], калі ваш сайт будзе працаваць з Unicode.", "config-no-db": "Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.\n{{PLURAL:$2|Падтрымліваецца наступны тып базы|Падтрымліваюцца наступныя тыпы базаў}} зьвестак: $1.\n\nКалі вы скампілявалі PHP самастойна, зьмяніце канфігурацыю, каб уключыць кліента базы зьвестак, напрыклад, з дапамогай ./configure --with-mysqli.\nКалі вы ўсталявалі PHP з пакунку Debian або Ubuntu, тады вам трэба дадаткова ўсталяваць, напрыклад, пакунак php5-mysql.", "config-outdated-sqlite": "'''Папярэджаньне''': усталяваны SQLite $1, у той час, калі мінімальная сумяшчальная вэрсія — $2. SQLite ня будзе даступны.", @@ -63,12 +63,11 @@ "config-pcre-no-utf8": "'''Фатальная памылка''': модуль PCRE для PHP скампіляваны без падтрымкі PCRE_UTF8.\nMediaWiki патрабуе падтрымкі UTF-8 для слушнай працы.", "config-memory-raised": "Абмежаваньне на даступную для PHP памяць memory_limit было падвышанае з $1 да $2.", "config-memory-bad": "'''Папярэджаньне:''' памер PHP memory_limit складае $1.\nВерагодна, гэта вельмі мала.\nУсталяваньне можа быць няўдалым!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] усталяваны", "config-apc": "[http://www.php.net/apc APC] усталяваны", "config-apcu": "[http://www.php.net/apcu APCu] ўсталяваны", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] усталяваны", - "config-no-cache-apcu": "Папярэджаньне: ня знойдзеныя [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ці [http://www.iis.net/download/WinCacheForPhp WinCache]. Кэшаваньне аб’ектаў адключанае.", - "config-mod-security": "'''Папярэджаньне''': на Вашым ўэб-сэрверы ўключаны [http://modsecurity.org/ mod_security]. У выпадку няслушнай наладцы, ён можа стаць прычынай праблемаў для MediaWiki ці іншага праграмнага забесьпячэньня, якое дазваляе ўдзельнікам дасылаць на сэрвэр любы зьмест.\nГлядзіце [http://modsecurity.org/documentation/ дакумэнтацыю mod_security] ці зьвярніцеся ў падтрымку Вашага хосту, калі ў Вас узьнікаюць выпадковыя праблемы.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] усталяваны", + "config-no-cache-apcu": "Папярэджаньне: ня знойдзеныя [http://www.php.net/apcu APCu] ці [http://www.iis.net/download/WinCacheForPhp WinCache]. Кэшаваньне аб’ектаў адключанае.", + "config-mod-security": "'''Папярэджаньне''': на Вашым ўэб-сэрверы ўключаны [https://modsecurity.org/ mod_security]. У выпадку няслушнай наладцы, ён можа стаць прычынай праблемаў для MediaWiki ці іншага праграмнага забесьпячэньня, якое дазваляе ўдзельнікам дасылаць на сэрвэр любы зьмест.\nГлядзіце [https://modsecurity.org/documentation/ дакумэнтацыю mod_security] ці зьвярніцеся ў падтрымку Вашага хосту, калі ў Вас узьнікаюць выпадковыя праблемы.", "config-diff3-bad": "GNU diff3 ня знойдзены.", "config-git": "Знойдзеная сыстэма канстролю вэрсіяў Git: $1", "config-git-bad": "Сыстэма кантролю вэрсіяў Git ня знойдзеная.", @@ -226,7 +225,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 ці болей позьняя", "config-license-pd": "Грамадзкі набытак", "config-license-cc-choose": "Выберыце іншую ліцэнзію Creative Commons", - "config-license-help": "Шматлікія адкрытыя вікі публікуюць увесь унёсак у праект на ўмовах [http://freedomdefined.org/Definition вольнай ліцэнзіі].\nГэта дазваляе ствараць эфэкт супольнай уласнасьці і садзейнічае доўгатэрміноваму ўнёску.\nДля прыватных і карпаратыўных вікі гэта не зьяўляецца неабходнасьцю.\n\nКалі Вы жадаеце выкарыстоўваць тэкст зь Вікіпэдыі, і жадаеце, каб Вікіпэдыя магла прымаць тэксты, скапіяваныя з Вашай вікі, Вам неабходна выбраць ліцэнзію {{int:config-license-cc-by-sa}}.\n\nРаней Вікіпэдыя выкарыстоўвала ліцэнзію GNU Free Documentation.\nЯна ўсё яшчэ дзейнічае, але яна ўтрымлівае некаторыя моманты, якія ўскладняюць паўторнае выкарыстаньне і інтэрпрэтацыю матэрыялаў.", + "config-license-help": "Шматлікія адкрытыя вікі публікуюць увесь унёсак у праект на ўмовах [https://freedomdefined.org/Definition вольнай ліцэнзіі].\nГэта дазваляе ствараць эфэкт супольнай уласнасьці і садзейнічае доўгатэрміноваму ўнёску.\nДля прыватных і карпаратыўных вікі гэта не зьяўляецца неабходнасьцю.\n\nКалі Вы жадаеце выкарыстоўваць тэкст зь Вікіпэдыі, і жадаеце, каб Вікіпэдыя магла прымаць тэксты, скапіяваныя з Вашай вікі, Вам неабходна выбраць ліцэнзію {{int:config-license-cc-by-sa}}.\n\nРаней Вікіпэдыя выкарыстоўвала ліцэнзію GNU Free Documentation.\nЯна ўсё яшчэ дзейнічае, але яна ўтрымлівае некаторыя моманты, якія ўскладняюць паўторнае выкарыстаньне і інтэрпрэтацыю матэрыялаў.", "config-email-settings": "Налады электроннай пошты", "config-enable-email": "Дазволіць выходзячыя электронныя лісты", "config-enable-email-help": "Калі Вы жадаеце, каб працавала электронная пошта, неабходна сканфігураваць PHP [http://www.php.net/manual/en/mail.configuration.php адпаведным чынам].\nКалі Вы не жадаеце выкарыстоўваць магчымасьці электроннай пошты, Вы можаце яе адключыць.", @@ -256,7 +255,7 @@ "config-cache-options": "Налады кэшаваньня аб’ектаў:", "config-cache-help": "Кэшаваньне аб’ектаў павялічвае хуткасьць працы MediaWiki праз кэшаваньне зьвестак, якія часта выкарыстоўваюцца.\nВельмі рэкамэндуем уключыць гэта для сярэдніх і буйных сайтаў, таксама будзе карысна для дробных сайтаў.", "config-cache-none": "Без кэшаваньня (ніякія магчымасьці не страчваюцца, але хуткасьць працы буйных сайтаў можа зьнізіцца)", - "config-cache-accel": "Кэшаваньне аб’ектаў PHP (APC, APCu, XCache ці WinCache)", + "config-cache-accel": "Кэшаваньне аб’ектаў PHP (APC, APCu ці WinCache)", "config-cache-memcached": "Выкарыстоўваць Memcached (патрабуе дадатковай канфігурацыі)", "config-memcached-servers": "Сэрвэры memcached:", "config-memcached-help": "Сьпіс IP-адрасоў, якія будуць выкарыстоўвацца Memcached.\nАдрасы павінны быць у асобным радку з пазначэньнем порту, які будзе выкарыстоўвацца. Напрыклад:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/bg.json b/includes/installer/i18n/bg.json index 8668ed557a..9030febb91 100644 --- a/includes/installer/i18n/bg.json +++ b/includes/installer/i18n/bg.json @@ -46,14 +46,14 @@ "config-help-restart": "Необходимо е потвърждение за изтриване на всички въведени и съхранени данни и започване отначало на процеса по инсталация.", "config-restart": "Да, започване отначало", "config-welcome": "=== Проверка на условията ===\nЩе бъдат извършени основни проверки, които да установят дали условията са подходящи за инсталиране на МедияУики.\nАко е необходима помощ по време на инсталацията, резултатите от направените проверки трябва също да бъдат предоставени.", - "config-copyright": "=== Авторски права и условия ===\n\n$1\n\nТази програма е свободен софтуер, който може да се променя и/или разпространява според Общия публичен лиценз на GNU, както е публикуван от Free Software Foundation във версия на Лиценза 2 или по-късна версия.\n\nТази програма се разпространява с надеждата, че ще е полезна, но без каквито и да е гаранции; без дори косвена гаранция за продаваемост или пригодност за конкретна употреба .\nЗа повече подробности се препоръчва преглеждането на Общия публичен лиценз на GNU.\n\nКъм програмата трябва да е приложено копие на Общия публичен лиценз на GNU; ако не, можете да пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, или да [http://www.gnu.org/copyleft/gpl.html го прочетете онлайн].", + "config-copyright": "=== Авторски права и условия ===\n\n$1\n\nТази програма е свободен софтуер, който може да се променя и/или разпространява според Общия публичен лиценз на GNU, както е публикуван от Free Software Foundation във версия на Лиценза 2 или по-късна версия.\n\nТази програма се разпространява с надеждата, че ще е полезна, но без каквито и да е гаранции; без дори косвена гаранция за продаваемост или пригодност за конкретна употреба .\nЗа повече подробности се препоръчва преглеждането на Общия публичен лиценз на GNU.\n\nКъм програмата трябва да е приложено копие на Общия публичен лиценз на GNU; ако не, можете да пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, или да [https://www.gnu.org/copyleft/gpl.html го прочетете онлайн].", "config-sidebar": "* [https://www.mediawiki.org Сайт на МедияУики]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Наръчник на потребителя]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Наръчник на администратора]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧЗВ]\n----\n* Документация\n* Бележки за версията\n* Авторски права\n* Обновяване", "config-env-good": "Средата беше проверена.\nИнсталирането на МедияУики е възможно.", "config-env-bad": "Средата беше проверена.\nНе е възможна инсталация на МедияУики.", "config-env-php": "Инсталирана е версия на PHP $1.", "config-env-hhvm": "HHVM $1 е инсталиран.", - "config-unicode-using-intl": "Използване на разширението [http://pecl.php.net/intl intl PECL] за нормализация на Уникод.", - "config-unicode-pure-php-warning": "Внимание: [http://pecl.php.net/intl Разширението intl PECL] не е налично за справяне с нормализацията на Уникод, превключване към по-бавното изпълнение на чист PHP.\nАко сайтът е с голям трафик, препоръчително е запознаването с [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализацията на Уникод].", + "config-unicode-using-intl": "Използване на разширението [https://pecl.php.net/intl intl PECL] за нормализация на Уникод.", + "config-unicode-pure-php-warning": "Внимание: [https://pecl.php.net/intl Разширението intl PECL] не е налично за справяне с нормализацията на Уникод, превключване към по-бавното изпълнение на чист PHP.\nАко сайтът е с голям трафик, препоръчително е да се запознаете с [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализацията на Уникод].", "config-unicode-update-warning": "Предупреждение: Инсталираната версия на Обвивката за нормализация на Unicode използва по-старата версия на библиотеката на [http://site.icu-project.org/ проекта ICU].\nНеобходимо е да [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations инсталирате по-нова версия], в случай че сте загрижени за използването на Unicode.", "config-no-db": "Не може да бъде открит подходящ драйвер за база данни! Необходимо е да инсталирате драйвер за база данни за PHP.\n{{PLURAL:$2|Поддържа се следния тип|Поддържат се следните типове}} бази от данни: $1.\n\nАко сами сте компилирали PHP, преконфигурирайте го с включен клиент за база данни, например чрез използване на ./configure --with-mysqli.\nАко сте инсталирали PHP от пакет за Debian или Ubuntu, необходимо е също така да инсталирате и модула php5-mysql.", "config-outdated-sqlite": "Внимание: имате инсталиран SQLite $1, а минималната допустима версия е $2. SQLite ще бъде недостъпна за ползване.", @@ -62,12 +62,11 @@ "config-pcre-no-utf8": "'''Фатално''': Модулът PCRE на PHP изглежда е компилиран без поддръжка на PCRE_UTF8.\nЗа да функционира правилно, МедияУики изисква поддръжка на UTF-8.", "config-memory-raised": "memory_limit на PHP е $1, увеличаване до $2.", "config-memory-bad": "Внимание: memory_limit на PHP е $1.\nСтойността вероятно е твърде ниска.\nВъзможно е инсталацията да се провали!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] е инсталиран", "config-apc": "[http://www.php.net/apc APC] е инсталиран", "config-apcu": "[http://www.php.net/apc APC] е инсталиран", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] е инсталиран", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] е инсталиран", "config-no-cache-apcu": "Внимание: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] и [http://www.iis.net/download/WinCacheForPhp WinCache] не могат да бъдат открити.\nКеширането на обекти не е активирано.", - "config-mod-security": "Предупреждение: [http://modsecurity.org/ mod_security]/mod_security2 е включено на вашия уеб сървър. Много от обичайните му конфигурации пораждат проблеми с МедияУики и друг софтуер, който позволява публикуване на произволно съдържание.\nАко е възможно, моля изключете го. В противен случай се обърнете към [http://modsecurity.org/documentation/ документацията на mod_security] или се свържете с поддръжката на хостинга си, ако се сблъскате със случайни грешки.", + "config-mod-security": "Предупреждение: [https://modsecurity.org/ mod_security]/mod_security2 е включено на вашия уеб сървър. Много от обичайните му конфигурации пораждат проблеми с МедияУики и друг софтуер, който позволява публикуване на произволно съдържание.\nАко е възможно, моля изключете го. В противен случай се обърнете към [https://modsecurity.org/documentation/ документацията на mod_security] или се свържете с поддръжката на хостинга си, ако се сблъскате със случайни грешки.", "config-diff3-bad": "GNU diff3 не беше намерен.", "config-git": "Налична е системата за контрол на версиите Git: $1.", "config-git-bad": "Не е намерен софтуер за контрол на версиите Git.", @@ -222,7 +221,7 @@ "config-license-gfdl": "Лиценз за свободна документация на GNU 1.3 или по-нов", "config-license-pd": "Обществено достояние", "config-license-cc-choose": "Избиране на друг лиценз от Криейтив Комънс", - "config-license-help": "Много публични уикита поставят всички приноси под [http://freedomdefined.org/Definition/Bg свободен лиценз].\nТова помага за създаването на усещане за общност и насърчава дългосрочните приноси. \nТова не е необходимо като цяло за частно или корпоративно уики.\n\nАко искате да използвате текстове от Уикипедия, и искате Уикипедия да може да приема текстове, копирани от вашето уики, трябва да изберете лиценз {{int:config-license-cc-by-sa}}.\n\nЛицензът за свободна документация на GNU е старият лиценз на съдържанието на Уикипедия.\nТой все още е валиден лиценз, но някои негови условия са трудни за разбиране и правят по-сложни повторното използване и интерпретацията.", + "config-license-help": "Много публични уикита поставят всички приноси под [https://freedomdefined.org/Definition/Bg свободен лиценз].\nТова помага за създаването на усещане за общност и насърчава дългосрочните приноси. \nТова не е необходимо като цяло за частно или корпоративно уики.\n\nАко искате да използвате текстове от Уикипедия, и искате Уикипедия да може да приема текстове, копирани от вашето уики, трябва да изберете лиценз {{int:config-license-cc-by-sa}}.\n\nЛицензът за свободна документация на GNU е старият лиценз на съдържанието на Уикипедия.\nТой все още е валиден лиценз, но някои негови условия са трудни за разбиране и правят по-сложни повторното използване и интерпретацията.", "config-email-settings": "Настройки за е-поща", "config-enable-email": "Разрешаване на изходящи е-писма", "config-enable-email-help": "За да работят възможностите за използване на е-поща, необходимо е [http://www.php.net/manual/en/mail.configuration.php настройките за поща на PHP] да бъдат конфигурирани правилно.\nАко няма да се използват услугите за е-поща в уикито, те могат да бъдат изключени тук.", diff --git a/includes/installer/i18n/bn.json b/includes/installer/i18n/bn.json index dc423a647e..132a06d127 100644 --- a/includes/installer/i18n/bn.json +++ b/includes/installer/i18n/bn.json @@ -44,9 +44,8 @@ "config-env-php": "পিএইচপি $1 ইন্সটল করা হয়েছে।", "config-env-hhvm": "HHVM $1 ইনস্টল করা হয়েছে।", "config-memory-raised": "পিএইচপির memory_limit হচ্ছে $1, বৃদ্ধি পেয়ে $2 হয়েছে।", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] ইনস্টল করা হয়েছে", "config-apc": "[http://www.php.net/apc এপিসি] ইনস্টল হয়েছে", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ইনস্টল করা হয়েছে", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] ইনস্টল করা হয়েছে", "config-diff3-bad": "GNU diff3 পাওয়া যায়নি।", "config-git": "Git সংস্করণের নিয়ন্ত্রণ সফটওয়্যার পাওয়া গেছে: $1।", "config-git-bad": "Git সংস্করণের নিয়ন্ত্রণ সফটওয়্যার পাওয়া যায়নি।", diff --git a/includes/installer/i18n/br.json b/includes/installer/i18n/br.json index f38c7695a3..f41ef23289 100644 --- a/includes/installer/i18n/br.json +++ b/includes/installer/i18n/br.json @@ -46,14 +46,14 @@ "config-help-restart": "Ha c'hoant hoc'h eus da ziverkañ an holl roadennoù hoc'h eus ebarzhet ha da adlañsañ an argerzh staliañ ?", "config-restart": "Ya, adloc'hañ anezhañ", "config-welcome": "=== Gwiriadennoù a denn d'an endro ===\nRekis eo un nebeud gwiriadennoù diazez da welet hag azas eo an endro evit gallout staliañ MediaWiki.\nHo pet soñj merkañ disoc'hoù ar gwiriadennoù-se m'ho pez ezhomm skoazell e-pad ar staliadenn.", - "config-copyright": "=== Gwiriañ aozer ha Termenoù implijout ===\n\n$1\n\nUr meziant frank eo ar programm-mañ; gallout a rit skignañ anezhañ ha/pe kemmañ anezhañ dindan termenoù ar GNU Aotre-implijout Foran Hollek evel m'emañ embannet gant Diazezadur ar Meziantoù Frank; pe diouzh stumm 2 an aotre-implijout, pe (evel mar karit) diouzh ne vern pe stumm nevesoc'h.\n\nIngalet eo ar programm gant ar spi e vo talvoudus met n'eus '''tamm gwarant ebet'''; hep zoken gwarant empleg ar '''varc'hadusted''' pe an '''azaster ouzh ur pal bennak'''. Gwelet ar GNU Aotre-Implijout Foran Hollek evit muioc'h a ditouroù.\n\nSañset oc'h bezañ resevet un eilskrid eus ar GNU Aotre-implijout Foran Hollek a-gevret gant ar programm-mañ; ma n'hoc'h eus ket, skrivit da Diazezadur ar Meziantoù Frank/Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, SUA pe [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lennit anezhañ enlinenn].", + "config-copyright": "=== Gwiriañ aozer ha Termenoù implijout ===\n\n$1\n\nUr meziant frank eo ar programm-mañ; gallout a rit skignañ anezhañ ha/pe kemmañ anezhañ dindan termenoù ar GNU Aotre-implijout Foran Hollek evel m'emañ embannet gant Diazezadur ar Meziantoù Frank; pe diouzh stumm 2 an aotre-implijout, pe (evel mar karit) diouzh ne vern pe stumm nevesoc'h.\n\nIngalet eo ar programm gant ar spi e vo talvoudus met n'eus '''tamm gwarant ebet'''; hep zoken gwarant empleg ar '''varc'hadusted''' pe an '''azaster ouzh ur pal bennak'''. Gwelet ar GNU Aotre-Implijout Foran Hollek evit muioc'h a ditouroù.\n\nSañset oc'h bezañ resevet un eilskrid eus ar GNU Aotre-implijout Foran Hollek a-gevret gant ar programm-mañ; ma n'hoc'h eus ket, skrivit da Diazezadur ar Meziantoù Frank/Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, SUA pe [https://www.gnu.org/licenses/old-licenses/gpl-2.0.html lennit anezhañ enlinenn].", "config-sidebar": "* [https://www.mediawiki.org MediaWiki degemer]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Sturlevr an implijerien]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Sturlevr ar verourien]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAG]\n----\n* Lennit-me\n* Notennoù embann\n* Oc'h eilañ\n* O hizivaat", "config-env-good": "Gwiriet eo bet an endro.\nGallout a rit staliañ MediaWiki.", "config-env-bad": "Gwiriet eo bet an endro.\nNe c'hallit ket staliañ MediaWiki.", "config-env-php": "Staliet eo PHP $1.", "config-env-hhvm": "HHVM $1 zo staliet.", - "config-unicode-using-intl": "Oc'h implijout [http://pecl.php.net/intl an astenn PECL intl] evit ar reolata Unicode.", - "config-unicode-pure-php-warning": "Diwallit : N'haller ket ober gant an [http://pecl.php.net/intl intl astenn PECL] evit merañ reoladur Unicode; distreiñ d'ar stumm gorrek emplementet e PHP-rik.\nMa rit war-dro ul lec'hienn darempredet-stank e vo mat deoc'h lenn un tammig bihan diwar-benn se war [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations reolennadur Unicode].", + "config-unicode-using-intl": "Oc'h implijout [https://pecl.php.net/intl an astenn PECL intl] evit ar reolata Unicode.", + "config-unicode-pure-php-warning": "Diwallit : N'haller ket ober gant an [https://pecl.php.net/intl intl astenn PECL] evit merañ reoladur Unicode; distreiñ d'ar stumm gorrek emplementet e PHP-rik.\nMa rit war-dro ul lec'hienn darempredet-stank e vo mat deoc'h lenn un tammig bihan diwar-benn se war [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations reolennadur Unicode].", "config-unicode-update-warning": "'''Diwallit''': ober a ra stumm staliet endalc'her skoueriekaat Unicode gant ur stumm kozh eus [http://site.icu-project.org/ levraoueg meziantoù ar raktres ICU].\nDleout a rafec'h [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations hizivaat] ma seblant deoc'h bezañ pouezus ober gant Unicode.", "config-no-db": "N'eus ket bet gallet kavout ur sturier diazoù roadennoù a zere ! Ret eo deoc'h staliañ ur sturier diazoù roadennoù evit PHP.\nSkoret eo {{PLURAL:$2|ar seurt|ar seurtoù}} diazoù roadennoù da-heul : $1.\n\nMard eo bet kempunet PHP ganeoc'h-c'hwi hoc'h-unan, adkeflugnit-eñ en ur weredekaat un arval diaz roadennoù, da skouer en ur ober gant /configure --with-mysqli.\nM'hoc'h eus staliet PHP adalek ur pakad Debian pe Ubuntu, eo ret deoc'h staliañ, da skouer, ar pakad php5-mysql ivez.", "config-outdated-sqlite": "Taolit pled : ober a rit gant SQLite $1, hag a zo izeloc'h eget ar stumm $2 ret bihanañ. Ne vo ket posupl ober gant SQLite.", @@ -62,12 +62,11 @@ "config-pcre-no-utf8": "'''Fazi groñs ''': evit doare eo bet kempunet modulenn PCRE PHP hep ar skor PCRE_UTF8.\nEzhomm en deus MediaWiki eus UTF-8 evit mont plaen en-dro.", "config-memory-raised": "memory_limit ar PHP zo $1, kemmet e $2.", "config-memory-bad": "'''Diwallit :''' Da $1 emañ arventenn memory_limit PHP.\nRe izel eo moarvat.\nMarteze e c'hwito ar staliadenn !", - "config-xcache": "Staliet eo [http://xcache.lighttpd.net/ XCache]", "config-apc": "Staliet eo [http://www.php.net/apc APC]", "config-apcu": "Staliet eo [http://www.php.net/apcu APCu]", - "config-wincache": "Staliet eo [http://www.iis.net/download/WinCacheForPhp WinCache]", + "config-wincache": "Staliet eo [https://www.iis.net/download/WinCacheForPhp WinCache]", "config-no-cache-apcu": "Taolit pled : N'eus ket bet gallet kavout [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] pe [http://www.iis.net/download/WinCacheForPhp WinCache].\nN'eo ket gweredekaet ar c'hrubuilhañ traezoù.", - "config-mod-security": "Taolit pled : Gweredekaet eo [http://modsecurity.org/ mod_security]/mod_security2 gant ho servijer web. Ma n'eo ket kfluniet mat e c'hall tegas trubuilhoù da MediaWiki ha meziantoù all a aotre implijerien da ouzhpennañ danvez evel ma karont.\nE kement ha m'eo posupl e tlefe bezañ diweredekaet. A-hend-all, sellit ouzh [http://modsecurity.org/documentation/ mod_security an teuliadur] pe kit e darempred gant skoazell ho herberc'hier m'en em gavit gant fazioù dargouezhek.", + "config-mod-security": "Taolit pled : Gweredekaet eo [https://modsecurity.org/ mod_security]/mod_security2 gant ho servijer web. Ma n'eo ket kfluniet mat e c'hall tegas trubuilhoù da MediaWiki ha meziantoù all a aotre implijerien da ouzhpennañ danvez evel ma karont.\nE kement ha m'eo posupl e tlefe bezañ diweredekaet. A-hend-all, sellit ouzh [https://modsecurity.org/documentation/ mod_security an teuliadur] pe kit e darempred gant skoazell ho herberc'hier m'en em gavit gant fazioù dargouezhek.", "config-diff3-bad": "N'eo ket bet kavet GNU diff3.", "config-git": "Kavet eo bet ar meziant kontrolliñ adstummoù Git : $1.", "config-git-bad": "N'eo ket bet kavet ar meziant kontrolliñ stummoù Git.", diff --git a/includes/installer/i18n/bs.json b/includes/installer/i18n/bs.json index 66139728c0..07a0e2ee01 100644 --- a/includes/installer/i18n/bs.json +++ b/includes/installer/i18n/bs.json @@ -50,10 +50,9 @@ "config-no-db": "Ne mogu pronaći pogodan upravljački program za bazu podataka! Morate ga instalirati za PHP-bazu.\n{{PLURAL:$2|Podržana je sljedeća vrsta|Podržane su sljedeće vrste}} baze podataka: $1.\n\nAko se sami kompajlirali PHP, omogućite klijent baze podataka u postavkama koristeći, naprimjer, ./configure --with-mysqli.\nAko ste instalirali PHP iz paketa za Debian ili Ubuntu, onda također morate instalirati, naprimjer, paket php5-mysql.", "config-memory-raised": "memory_limit za PHP iznosi $1, poviÅ¡en na $2.", "config-memory-bad": "Upozorenje: memory_limit za PHP iznosi $1.\nOvo je vjerovatno premalo.\nInstalacija možda neće uspjeti!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] je instaliran", "config-apc": "[http://www.php.net/apc APC] je instaliran", "config-apcu": "[http://www.php.net/apcu APCu] je instaliran", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je instaliran", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] je instaliran", "config-diff3-bad": "GNU diff3 nije pronađen.", "config-git": "Pronađen je Git program za kontrolu verzija: $1.", "config-git-bad": "Nije pronađen Git program za kontrolu verzija.", diff --git a/includes/installer/i18n/ca.json b/includes/installer/i18n/ca.json index 54a7de8cb3..983c5c297e 100644 --- a/includes/installer/i18n/ca.json +++ b/includes/installer/i18n/ca.json @@ -51,19 +51,18 @@ "config-help-restart": "Voleu esborrar totes les dades que heu introduït i tornar a començar el procés d'instal·lació?", "config-restart": "Sí, torna a començar", "config-welcome": "=== Comprovacions de l'entorn ===\nS'efectuaran comprovacions bàsiques per veure si l'entorn és adequat per a la instal·lació del MediaWiki.\nRecordeu d'incloure aquesta informació si heu de demanar ajuda sobre com completar la instal·lació.", - "config-copyright": "=== Drets d'autor i condicions ===\n\n$1\n\nAquest programa és de programari lliure; podeu redistribuir-lo i/o modificar-lo sota les condicions de la Llicència Pública General GNU com es publicada per la Free Software Foundation; qualsevol versió 2 de la llicència, o (opcionalment) qualsevol versió posterior.\n\nAquest programa és distribueix amb l'esperança que serà útil, però sense cap garantia; sense ni tan sols la garantia implícita de \ncomerciabilitat o idoneïtat per a un propòsit particular.\nConsulteu la Llicència Pública General GNU, per a més detalls.\n\nHauríeu d'haver rebut una còpia de la Llicència Pública General GNU amb aquest programa; si no, escriviu a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA o [http://www.gnu.org/copyleft/gpl.html per llegir-lo en línia].", + "config-copyright": "=== Drets d'autor i condicions ===\n\n$1\n\nAquest programa és de programari lliure; podeu redistribuir-lo i/o modificar-lo sota les condicions de la Llicència Pública General GNU com es publicada per la Free Software Foundation; qualsevol versió 2 de la llicència, o (opcionalment) qualsevol versió posterior.\n\nAquest programa és distribueix amb l'esperança que serà útil, però sense cap garantia; sense ni tan sols la garantia implícita de \ncomerciabilitat o idoneïtat per a un propòsit particular.\nConsulteu la Llicència Pública General GNU, per a més detalls.\n\nHauríeu d'haver rebut una còpia de la Llicència Pública General GNU amb aquest programa; si no, escriviu a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA o [https://www.gnu.org/copyleft/gpl.html per llegir-lo en línia].", "config-sidebar": "* [https://www.mediawiki.org la Pàgina d'inici]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guia de l'usuari]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guia de l'administrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ PMF]\n----\n* Llegeix-me\n* Notes de la versió\n* Còpia\n* Actualització", "config-env-good": "S'ha comprovat l'entorn.\nPodeu instal·lar el MediaWiki.", "config-env-bad": "S'ha comprovat l'entorn.\nNo podeu instal·lar el MediaWiki.", "config-env-php": "El PHP $1 està instal·lat.", "config-env-hhvm": "L’HHVM $1 és instal·lat.", - "config-unicode-using-intl": "S'utilitza l'[http://pecl.php.net/intl extensió intl PECL] per a la normalització de l'Unicode.", + "config-unicode-using-intl": "S'utilitza l'[https://pecl.php.net/intl extensió intl PECL] per a la normalització de l'Unicode.", "config-memory-raised": "El memory_limit del PHP és $1 i s'ha aixecat a $2.", "config-memory-bad": "Avís: El memory_limit del PHP és $1.\nAixò és probablement massa baix.\nLa instal·lació pot fallar!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] està instal·lat", "config-apc": "L’[http://www.php.net/apc APC] està instal·lat", "config-apcu": "[http://www.php.net/apcu APCu] està instal·lat", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] està instal·lat", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] està instal·lat", "config-diff3-bad": "No s'ha trobat el GNU diff3.", "config-git": "S'ha trobat el programari de control de versions Git: $1.", "config-git-bad": "No s'ha trobat el programari de control de versions Git.", diff --git a/includes/installer/i18n/ce.json b/includes/installer/i18n/ce.json index b1cc0f2b14..b58ff41d67 100644 --- a/includes/installer/i18n/ce.json +++ b/includes/installer/i18n/ce.json @@ -27,7 +27,7 @@ "config-page-copying": "Лицензи", "config-page-upgradedoc": "Карлаяккхар", "config-page-existingwiki": "Йолуш йолу вики", - "config-copyright": "=== Авторан бакъонаш а хьал а ===\n\n$1\nMediaWiki ю маьрша программин латораг, шу йиш ю фондас арахецна йолу GNU General Public License лицензица и яржо я хийца а.\n\nMediaWiki яржош ю и шуна пайдане хир яц те аьлла, амма цхьа юкъарахилар доцуш. Хь. кхин. лицензи мадарра GNU General Public License .\n\nШоьга кхача езаш яра [{{SERVER}}{{SCRIPTPATH}}/COPYING копи GNU General Public License] хӀокху программица, кхаьчна яцахь язъе Free Software Foundation, Inc., адрес тӀе: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA я [//www.gnu.org/licenses/old-licenses/gpl-2.0.html еша и онлайнехь].", + "config-copyright": "=== Авторан бакъонаш а хьал а ===\n\n$1\nMediaWiki ю маьрша программин латораг, шу йиш ю фондас арахецна йолу GNU General Public License лицензица и яржо я хийца а.\n\nMediaWiki яржош ю и шуна пайдане хир яц те аьлла, амма цхьа юкъарахилар доцуш. Хь. кхин. лицензи мадарра GNU General Public License .\n\nШоьга кхача езаш яра [{{SERVER}}{{SCRIPTPATH}}/COPYING копи GNU General Public License] хӀокху программица, кхаьчна яцахь язъе Free Software Foundation, Inc., адрес тӀе: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA я [https://www.gnu.org/licenses/old-licenses/gpl-2.0.html еша и онлайнехь].", "config-no-fts3": "'''Тергам бе''': SQLite гулйина хуттург йоцуш [//sqlite.org/fts3.html FTS3] — лахар болхбеш хир дац оцу бухца.", "config-no-cli-uri": "'''ДӀахьедар''': --scriptpath параметр язйина яц, иза Ӏадйитаран кепаца лелош ю: $1 .", "config-db-name": "Хаамийн базан цӀе:", diff --git a/includes/installer/i18n/ckb.json b/includes/installer/i18n/ckb.json index 20f2f24bd2..a53e4706df 100644 --- a/includes/installer/i18n/ckb.json +++ b/includes/installer/i18n/ckb.json @@ -32,7 +32,7 @@ "config-restart": "بەڵێ، دەستی پێ بکەرەوە", "config-env-php": "PHP $1 دامەزراوە.", "config-apc": "[http://www.php.net/apc APC] دامەزراوە", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] دامەزراوە", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] دامەزراوە", "config-db-type": "جۆری داتابەیس:", "config-db-host": "خانەخوێی داتابەیس:", "config-db-name": "ناوی بنکەدراوە:", diff --git a/includes/installer/i18n/cs.json b/includes/installer/i18n/cs.json index 5ac35c89ce..ad2b910b23 100644 --- a/includes/installer/i18n/cs.json +++ b/includes/installer/i18n/cs.json @@ -9,7 +9,8 @@ "Paxt", "Matěj Suchánek", "LordMsz", - "Seb35" + "Seb35", + "Ilimanaq29" ] }, "config-desc": "Instalační program pro MediaWiki", @@ -49,14 +50,14 @@ "config-help-restart": "Chcete smazat vÅ¡echny údaje, které jste zadali, a spustit proces instalace znovu od začátku?", "config-restart": "Ano, restartovat", "config-welcome": "=== Kontrola prostředí ===\nNyní se provedou základní kontroly, aby se zjistilo, zda je toto prostředí použitelné k instalaci MediaWiki.\nPokud budete potřebovat k dokončení instalace pomoc, nezapomeňte sdělit výsledky těchto testů.", - "config-copyright": "=== Licence a podmínky ===\n$1\n\nTento program je svobodný software; můžete jej šířit nebo modifikovat podle podmínek GNU General Public License, vydávané Free Software Foundation; buď verze 2 této licence anebo (podle vaÅ¡eho uvážení) kterékoli pozdější verze.\n\nTento program je distribuován v naději, že bude užitečný, avÅ¡ak '''bez jakékoli záruky'''; neposkytují se ani odvozené záruky '''prodejnosti''' anebo '''vhodnosti pro určitý účel'''.\nPodrobnosti se dočtete v textu GNU General Public License.\n\nKopii GNU General Public License jste měli obdržet spolu s tímto programem; pokud ne, napiÅ¡te na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nebo [http://www.gnu.org/copyleft/gpl.html si ji přečtěte online].", + "config-copyright": "=== Licence a podmínky ===\n$1\n\nTento program je svobodný software; můžete jej šířit nebo modifikovat podle podmínek GNU General Public License, vydávané Free Software Foundation; buď verze 2 této licence anebo (podle vaÅ¡eho uvážení) kterékoli pozdější verze.\n\nTento program je distribuován v naději, že bude užitečný, avÅ¡ak '''bez jakékoli záruky'''; neposkytují se ani odvozené záruky '''prodejnosti''' anebo '''vhodnosti pro určitý účel'''.\nPodrobnosti se dočtete v textu GNU General Public License.\n\nKopii GNU General Public License jste měli obdržet spolu s tímto programem; pokud ne, napiÅ¡te na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nebo [https://www.gnu.org/copyleft/gpl.html si ji přečtěte online].", "config-sidebar": "* [https://www.mediawiki.org Oficiální web MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Uživatelská příručka]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrátorská příručka]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Čti mě\n* Poznámky k vydání\n* Licence\n* Upgrade", "config-env-good": "Prostředí bylo zkontrolováno.\nMůžete nainstalovat MediaWiki.", "config-env-bad": "Prostředí bylo zkontrolováno.\nMediaWiki nelze nainstalovat.", "config-env-php": "Je nainstalováno PHP $1.", "config-env-hhvm": "Je nainstalováno HHVM $1.", - "config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].", - "config-unicode-pure-php-warning": "Upozornění: Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návÅ¡těvností, měli byste si přečíst něco o [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].", + "config-unicode-using-intl": "Pro normalizaci Unicode se používá [https://pecl.php.net/intl PECL rozšíření intl].", + "config-unicode-pure-php-warning": "Upozornění: Není dostupné [https://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návÅ¡těvností, měli byste si přečíst něco o [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].", "config-unicode-update-warning": "Upozornění: Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ji aktualizovat].", "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte nainstalovat databázový ovladač pro PHP.\n{{PLURAL:$2|Je podporován následující typ databáze|Jsou podporovány následující typy databází}}: $1.\n\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí ./configure --with-mysqli.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul php5-mysql.", "config-outdated-sqlite": "Upozornění: Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.", @@ -65,12 +66,11 @@ "config-pcre-no-utf8": "Kritická chyba: PHP modul PCRE byl zřejmě přeložen bez podpory PCRE_UTF8.\nMediaWiki vyžaduje ke správné funkci podporu UTF-8.", "config-memory-raised": "memory_limit v PHP byl nastaven na $1, zvýšen na $2.", "config-memory-bad": "Upozornění: memory_limit je v PHP nastaven na $1.\nTo je pravděpodobně příliÅ¡ málo.\nInstalace může selhat!", - "config-xcache": "Je nainstalována [http://xcache.lighttpd.net/ XCache]", "config-apc": "Je nainstalováno [http://www.php.net/apc APC]", "config-apcu": "Je nainstalováno [http://www.php.net/apcu APCu]", - "config-wincache": "Je nainstalována [http://www.iis.net/download/WinCacheForPhp WinCache]", - "config-no-cache-apcu": "Upozornění: Nebylo nalezeno [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache], ani [http://www.iis.net/download/WinCacheForPhp WinCache].\nKeÅ¡ování objektů bude vypnuto.", - "config-mod-security": "Upozornění: váš webový server má zapnuto [http://modsecurity.org/ mod_security]/mod_security2. Mnoho běžných konfigurací bude způsobovat potíže MediaWiki a dalším programům, které umožňují ukládat libovolný obsah.\nPokud je to možné, mělo by se to vypnout. Jinak se v případě, že narazíte na náhodné chyby, podívejte do [http://modsecurity.org/documentation/ dokumentace mod_security] nebo kontaktujte technickou podporu vaÅ¡eho poskytovatele.", + "config-wincache": "Je nainstalováno [https://www.iis.net/download/WinCacheForPhp WinCache]", + "config-no-cache-apcu": "Upozornění: Nebylo nalezeno [http://www.php.net/apcu APCu], \nani [http://www.iis.net/download/WinCacheForPhp WinCache].\nCachování objektů není povoleno.", + "config-mod-security": "Upozornění: váš webový server má zapnuto [https://modsecurity.org/ mod_security]/mod_security2. Mnoho běžných konfigurací bude způsobovat potíže MediaWiki a dalším programům, které umožňují ukládat libovolný obsah.\nPokud je to možné, mělo by se to vypnout. Jinak se v případě, že narazíte na náhodné chyby, podívejte do [https://modsecurity.org/documentation/ dokumentace mod_security] nebo kontaktujte technickou podporu vaÅ¡eho poskytovatele.", "config-diff3-bad": "Nebyl nalezen GNU diff3.", "config-git": "Nalezen software pro správu verzí Git: $1.", "config-git-bad": "Software pro správu verzí Git nebyl nalezen.", @@ -228,7 +228,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 nebo novější", "config-license-pd": "Volné dílo", "config-license-cc-choose": "Zvolit vlastní licenci Creative Commons", - "config-license-help": "Mnoho veřejných wiki vÅ¡echny příspěvky zveřejňuje pod některou [http://freedomdefined.org/Definition/Cs svobodnou licencí].\nTo pomáhá vytvořit duch komunitního vlastnictví a povzbuzuje dlouhodobé přispívání.\nTo obecně není potřeba u soukromé nebo firemní wiki.\n\nPokud chcete být schopni používat text z Wikipedie a chcete, aby Wikipedie byla schopna přijímat text okopírovaný z vaší wiki, měli byste zvolit {{int:config-license-cc-by-sa}}.\n\nDříve Wikipedie používala GNU Free Documentation License.\nGFDL je platná licence, ale složité jí porozumět.\nTaké je komplikované používat obsah licencovaný pod GFDL.", + "config-license-help": "Mnoho veřejných wiki vÅ¡echny příspěvky zveřejňuje pod některou [https://freedomdefined.org/Definition/Cs svobodnou licencí].\nTo pomáhá vytvořit duch komunitního vlastnictví a povzbuzuje dlouhodobé přispívání.\nTo obecně není potřeba u soukromé nebo firemní wiki.\n\nPokud chcete být schopni používat text z Wikipedie a chcete, aby Wikipedie byla schopna přijímat text okopírovaný z vaší wiki, měli byste zvolit {{int:config-license-cc-by-sa}}.\n\nDříve Wikipedie používala GNU Free Documentation License.\nGFDL je platná licence, ale složité jí porozumět.\nTaké je komplikované používat obsah licencovaný pod GFDL.", "config-email-settings": "Nastavení e-mailu", "config-enable-email": "Zapnout odchozí e-mail", "config-enable-email-help": "Pokud chcete, aby e-mail fungoval, je potřeba správně nakonfigurovat [http://www.php.net/manual/en/mail.configuration.php e-mailová nastavení PHP].\nPokud nechcete žádné e-mailové funkce, můžete je zde vypnout.", @@ -258,7 +258,7 @@ "config-cache-options": "Nastavení cachování objektů:", "config-cache-help": "Cachování objektů se používá pro vylepÅ¡ení rychlosti MediaWiki tím, že se cachují často používaná data.\nStředním až velkým serverům se jeho zapnutí důrazně doporučuje, i menší servery pocítí jeho výhody.", "config-cache-none": "Bez cachování (o žádnou funkcionalitu nepřijdete, na větších wiki vÅ¡ak může dojít ke zhorÅ¡ení rychlosti)", - "config-cache-accel": "Cachování PHP objektů (APC, APCu, XCache nebo WinCache)", + "config-cache-accel": "Cachování PHP objektů (APC, APCu nebo WinCache)", "config-cache-memcached": "Použít Memcached (vyžaduje další nastavení a konfiguraci)", "config-memcached-servers": "Servery Memcached:", "config-memcached-help": "Seznam IP adres, které se mají používat pro Memcached.\nUveďte jednu na řádek spolu s portem. Například:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/csb.json b/includes/installer/i18n/csb.json index defaf1bb06..34cf29fe7c 100644 --- a/includes/installer/i18n/csb.json +++ b/includes/installer/i18n/csb.json @@ -34,10 +34,9 @@ "config-env-php": "PHP $1 je wjinastalowóné", "config-env-hhvm": "HHVM $1 je wjinastalowóné", "config-memory-raised": "Paraméter PHP memory_limit $1 òstôł zwikszony do $2.", - "config-xcache": "[Http://trac.lighttpd.net/xcache/ XCache] je wjinstalowóny", "config-apc": "[Http://www.php.net/apc APC] je wjinstalowóny", "config-apcu": "[http://www.php.net/apcu APCu] je wjinstalowóny", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je wjinstalowóny", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] je wjinstalowóny", "config-diff3-bad": "Felënk GNU diff3.", "config-mysql-innodb": "InnoDB", "config-mysql-myisam": "MyISAM", diff --git a/includes/installer/i18n/de-ch.json b/includes/installer/i18n/de-ch.json index fe4aa4c12b..d307c8daa4 100644 --- a/includes/installer/i18n/de-ch.json +++ b/includes/installer/i18n/de-ch.json @@ -5,8 +5,8 @@ "Das Schäfchen" ] }, - "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine Kopie der GNU General Public License sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.", - "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit grosser Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.", + "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine Kopie der GNU General Public License sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [https://www.gnu.org/copyleft/gpl.html online gelesen] werden.", + "config-unicode-pure-php-warning": "'''Warnung:''' Die [https://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit grosser Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.", "config-uploads-not-safe": "'''Warnung:''' Das Standardverzeichnis für hochgeladene Dateien $1 ist für die willkürliche Ausführung von Skripten anfällig.\nObwohl MediaWiki die hochgeladenen Dateien auf Sicherheitsrisiken überprüft, wird dennoch dringend empfohlen, diese [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security Sicherheitslücke] zu schliessen, bevor das Hochladen von Dateien aktiviert wird.", - "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 ''Creative-Commons''-Lizenz „Namensnennung – Weitergabe unter gleichen Bedingungen“ 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äss dieser Lizenz lizenzierte Inhalte wiederzuverwenden." + "config-license-help": "Viele öffentliche Wikis publizieren alle Beiträge unter einer [https://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 ''Creative-Commons''-Lizenz „Namensnennung – Weitergabe unter gleichen Bedingungen“ 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äss dieser Lizenz lizenzierte Inhalte wiederzuverwenden." } diff --git a/includes/installer/i18n/de.json b/includes/installer/i18n/de.json index 9a79e344cd..00005d33c9 100644 --- a/includes/installer/i18n/de.json +++ b/includes/installer/i18n/de.json @@ -56,14 +56,14 @@ "config-help-restart": "Sollen alle bereits eingegebenen Daten gelöscht und der Installationsvorgang erneut gestartet werden?", "config-restart": "Ja, erneut starten", "config-welcome": "=== Prüfung der Installationsumgebung ===\nDie Basisprüfungen werden jetzt durchgeführt, um festzustellen, ob die Installationsumgebung für MediaWiki geeignet ist.\nNotiere diese Informationen und gib sie an, sofern du Hilfe beim Installieren benötigst.", - "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine Kopie der GNU General Public License sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.", + "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine Kopie der GNU General Public License sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [https://www.gnu.org/copyleft/gpl.html online gelesen] werden.", "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzer­anleitung]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratoren­anleitung]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* Lies mich\n* Versions­informationen\n* Lizenz­bestimmungen\n* Aktualisierung", "config-env-good": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann installiert werden.", "config-env-bad": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann nicht installiert werden.", "config-env-php": "Die Skriptsprache „PHP“ ($1) ist installiert.", "config-env-hhvm": "HHVM $1 ist installiert.", - "config-unicode-using-intl": "Zur Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.", - "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.", + "config-unicode-using-intl": "Zur Unicode-Normalisierung wird die [https://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.", + "config-unicode-pure-php-warning": "'''Warnung:''' Die [https://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.", "config-unicode-update-warning": "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek des [http://site.icu-project.org/ ICU-Projekts].\nDiese sollte [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.", "config-no-db": "Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.\n{{PLURAL:$2|Das folgende Datenbanksystem wird|Die folgenden Datenbanksysteme werden}} unterstützt: $1\n\nWenn du PHP selbst kompiliert hast, konfiguriere es erneut mit einem aktivierten Datenbankclient, zum Beispiel durch Verwendung von ./configure --with-mysqli.\nWenn du PHP von einem Debian- oder Ubuntu-Paket installiert hast, dann musst du auch beispielsweise das php5-mysql-Paket installieren.", "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ist installiert. Allerdings benötigt MediaWiki SQLite $2 oder höher. SQLite wird daher nicht verfügbar sein.", @@ -72,12 +72,11 @@ "config-pcre-no-utf8": "'''Fataler Fehler:''' Das PHP-Modul PCRE scheint ohne PCRE_UTF8-Unterstützung kompiliert worden zu sein.\nMediaWiki benötigt die UTF-8-Unterstützung, um fehlerfrei lauffähig zu sein.", "config-memory-raised": "Der PHP-Parameter memory_limit betrug $1 und wurde auf $2 erhöht.", "config-memory-bad": "'''Warnung:''' Der PHP-Parameter memory_limit beträgt $1.\nDieser Wert ist wahrscheinlich zu niedrig.\nDer Installationsvorgang könnte eventuell scheitern!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] ist installiert", "config-apc": "[http://www.php.net/apc APC] ist installiert", "config-apcu": "[http://www.php.net/apcu APCu] ist installiert", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert", - "config-no-cache-apcu": "Warnung: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] konnten nicht gefunden werden.\nDer Objektcache ist nicht aktiviert.", - "config-mod-security": "'''Warnung:''' Auf dem Webserver wurde [http://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann dies zu Problemen mit MediaWiki sowie anderer Software auf dem Server führen und es Benutzern ermöglichen, beliebige Inhalte im Wiki einzustellen.\nFür weitere Informationen empfehlen wir die [http://modsecurity.org/documentation/ Dokumentation zu ModSecurity] oder den Kontakt zum Hoster, sofern Fehler auftreten.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] ist installiert", + "config-no-cache-apcu": "Warnung: [http://www.php.net/apcu APCu] oder [http://www.iis.net/download/WinCacheForPhp WinCache] konnten nicht gefunden werden.\nDer Objektcache ist nicht aktiviert.", + "config-mod-security": "'''Warnung:''' Auf dem Webserver wurde [https://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann dies zu Problemen mit MediaWiki sowie anderer Software auf dem Server führen und es Benutzern ermöglichen, beliebige Inhalte im Wiki einzustellen.\nFür weitere Informationen empfehlen wir die [https://modsecurity.org/documentation/ Dokumentation zu ModSecurity] oder den Kontakt zum Hoster, sofern Fehler auftreten.", "config-diff3-bad": "GNU diff3 wurde nicht gefunden.", "config-git": "Die Versionsverwaltungssoftware „Git“ wurde gefunden: $1.", "config-git-bad": "Die Versionsverwaltungssoftware „Git“ wurde nicht gefunden.", @@ -234,8 +233,8 @@ "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-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-license-cc-choose": "Eine andere Creative-Commons-Lizenz auswählen", + "config-license-help": "Viele öffentliche Wikis publizieren alle Beiträge unter einer [https://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-enable-email-help": "Sofern die E-Mail-Funktionen genutzt werden sollen, müssen die entsprechenden [http://www.php.net/manual/en/mail.configuration.php PHP-E-Mail-Einstellungen] richtig konfiguriert werden.\nFür den Fall, dass die E-Mail-Funktionen nicht benötigt werden, können sie hier deaktiviert werden.", @@ -265,7 +264,7 @@ "config-cache-options": "Einstellungen für die Zwischenspeicherung von Objekten:", "config-cache-help": "Das Objektcaching wird dazu genutzt, die Geschwindigkeit von MediaWiki zu verbessern, indem häufig genutzte Daten zwischengespeichert werden.\nEs wird sehr empfohlen, es für mittelgroße bis große Wikis zu nutzen, aber auch für kleine Wikis ergeben sich erkennbare Geschwindigkeitsverbesserungen.", "config-cache-none": "Kein Objektcaching (es wird keine Funktion entfernt, allerdings kann dies die Leistungsfähigkeit größerer Wikis negativ beeinflussen)", - "config-cache-accel": "Objektcaching von PHP (APC, APCu, XCache oder WinCache)", + "config-cache-accel": "Objektcaching von PHP (APC, APCu oder WinCache)", "config-cache-memcached": "Memcached Cacheserver (erfordert einen zusätzlichen Installationsvorgang mitsamt Konfiguration)", "config-memcached-servers": "Memcached Cacheserver", "config-memcached-help": "Liste der für Memcached nutzbaren IP-Adressen.\nEs sollte eine je Zeile mitsamt des vorgesehenen Ports angegeben werden. Beispiele:\n127.0.0.1:11211 oder\n192.168.1.25:1234 usw.", diff --git a/includes/installer/i18n/dty.json b/includes/installer/i18n/dty.json index a986e009fa..896a453eda 100644 --- a/includes/installer/i18n/dty.json +++ b/includes/installer/i18n/dty.json @@ -41,12 +41,12 @@ "config-help-restart": "Do you want to clear all saved data that you have entered and restart the installation process?", "config-restart": "हुन्छ, पुनः सुचारू गद्दे", "config-welcome": "=== Environmental checks ===\nBasic checks will now be performed to see if this environment is suitable for MediaWiki installation.\nRemember to include this information if you seek support on how to complete the installation.", - "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis 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.\n\nThis 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.\nSee the GNU General Public License for more details.\n\nYou 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, or [http://www.gnu.org/copyleft/gpl.html read it online].", + "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis 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.\n\nThis 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.\nSee the GNU General Public License for more details.\n\nYou 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, or [https://www.gnu.org/copyleft/gpl.html read it online].", "config-sidebar": "* [https://www.mediawiki.org MediaWiki home]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrator's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Read me\n* Release notes\n* Copying\n* Upgrading", "config-env-good": "The environment has been checked.\nYou can install MediaWiki.", "config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.", "config-env-php": "PHP $1 is installed.", "config-env-hhvm": "HHVM $1 स्थापना गरिएको छ ।", - "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.", - "config-unicode-pure-php-warning": "Warning: The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization]." + "config-unicode-using-intl": "Using the [https://pecl.php.net/intl intl PECL extension] for Unicode normalization.", + "config-unicode-pure-php-warning": "Warning: The [https://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization]." } diff --git a/includes/installer/i18n/el.json b/includes/installer/i18n/el.json index 0c057fc9ac..0c93b3acc7 100644 --- a/includes/installer/i18n/el.json +++ b/includes/installer/i18n/el.json @@ -10,7 +10,8 @@ "Giorgos456", "Badseed", "Macofe", - "KATRINE1992" + "KATRINE1992", + "Nikosgranturismogt" ] }, "config-desc": "Το πρόγραμμα εγκατάστασης για το MediaWiki", @@ -50,22 +51,21 @@ "config-help-restart": "Θέλετε να καταργήσετε όλα τα αποθηκευμένα δεδομένα που έχετε εισαγάγει και να επανεκκινήσετε τη διαδικασία εγκατάστασης;", "config-restart": "Ναι, επανεκκίνηση", "config-welcome": "=== Περιβαλλοντικοί έλεγχοι ===\nΤώρα θα γίνουν βασικοί έλεγχοι για να δούμε αν αυτό το περιβάλλον είναι κατάλληλο για την εγκατάσταση του MediaWiki.\nΘυμηθείτε να συμπεριλάβετε αυτές τις πληροφορίες εάν αναζητήσετε υποστήριξη για το πώς να ολοκληρώσετε την εγκατάσταση.", - "config-copyright": "=== Πνευματικά δικαιώματα και Όροι ===\n\n$1\n\nΑυτό το πρόγραμμα είναι ελεύθερο λογισμικό• μπορείτε να το αναδιανείμετε ή και να το τροποποιήσετε υπό τους όρους της Γενικής Άδειας Δημόσιας Χρήσης GNU, όπως αυτή δημοσιεύεται από το Ίδρυμα Ελεύθερου Λογισμικού• είτε της έκδοσης 2 της Άδειας, είτε (κατά την επιλογή σας) οποιασδήποτε μεταγενέστερης έκδοσης.\n\nΑυτό το πρόγραμμα διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά χωρίς καμία εγγύηση• χωρίς καν την υπονοούμενη εγγύηση της εμπορευσιμότητας ή της καταλληλοτότητας για συγκεκριμένο σκοπό.\nΔείτε την Γενική Άδεια Δημόσιας Χρήσης GNU για περισσότερες λεπτομέρειες.\n\nΘα πρέπει να έχετε λάβει ένα αντίγραφο της Γενικής Άδειας Δημόσιας Χρήσης GNU μαζί με αυτό το πρόγραμμα• αν όχι, γράψτε στο Free Software Foundation,\n51 Franklin Street, Fifth Floor,\nBoston, MA 02110-1335\nUSA ή [http://www.gnu.org/copyleft/gpl.html διαβάστε online].", + "config-copyright": "=== Πνευματικά δικαιώματα και Όροι ===\n\n$1\n\nΑυτό το πρόγραμμα είναι ελεύθερο λογισμικό• μπορείτε να το αναδιανείμετε ή και να το τροποποιήσετε υπό τους όρους της Γενικής Άδειας Δημόσιας Χρήσης GNU, όπως αυτή δημοσιεύεται από το Ίδρυμα Ελεύθερου Λογισμικού• είτε της έκδοσης 2 της Άδειας, είτε (κατά την επιλογή σας) οποιασδήποτε μεταγενέστερης έκδοσης.\n\nΑυτό το πρόγραμμα διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά χωρίς καμία εγγύηση• χωρίς καν την υπονοούμενη εγγύηση της εμπορευσιμότητας ή της καταλληλοτότητας για συγκεκριμένο σκοπό.\nΔείτε την Γενική Άδεια Δημόσιας Χρήσης GNU για περισσότερες λεπτομέρειες.\n\nΘα πρέπει να έχετε λάβει ένα αντίγραφο της Γενικής Άδειας Δημόσιας Χρήσης GNU μαζί με αυτό το πρόγραμμα• αν όχι, γράψτε στο Free Software Foundation,\n51 Franklin Street, Fifth Floor,\nBoston, MA 02110-1335\nUSA ή [https://www.gnu.org/copyleft/gpl.html διαβάστε online].", "config-sidebar": "* [https://www.mediawiki.org Αρχική MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Οδηγός Χρήστη]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Οδηγός Διαχειριστή]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Συχνές ερωτήσεις]\n----\n* Διαβάστε με\n* Σημειώσεις έκδοσης\n* Αντιγραφή\n* Αναβάθμιση", "config-env-good": "Το περιβάλλον έχει ελεγχθεί.\nΜπορείτε να εγκαταστήσετε το MediaWiki.", "config-env-bad": "Το περιβάλλον έχει ελεγχθεί.\nΔεν μπορείτε να εγκαταστήσετε το MediaWiki.", "config-env-php": "H PHP $1 είναι εγκατεστημένη.", "config-env-hhvm": "Το HHVM $1 είναι εγκατεστημένο.", - "config-unicode-using-intl": "Χρησιμοποιώντας την [http://pecl.php.net/intl επέκταση intl PECL] για κανονικοποίηση Unicode.", - "config-unicode-pure-php-warning": "Προειδοποίηση: Η [http://pecl.php.net/intl επέκταση intl PECL] δεν είναι διαθέσιμη για να χειριστεί την κανονικοποίηση Unicode, επιστρέφουμε στην αργή αμιγώς PHP εφαρμογή.\nΕάν λειτουργείτε έναν ιστότοπο υψηλής επισκεψιμότητας, θα πρέπει να ρίξετε μια ματιά στην [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations κανονικοποίηση Unicode].", + "config-unicode-using-intl": "Χρησιμοποιώντας την [https://pecl.php.net/intl επέκταση intl PECL] για κανονικοποίηση Unicode.", + "config-unicode-pure-php-warning": "Προειδοποίηση: Η [https://pecl.php.net/intl επέκταση intl PECL] δεν είναι διαθέσιμη για να χειριστεί την κανονικοποίηση Unicode, επιστρέφουμε στην αργή αμιγώς PHP εφαρμογή.\nΕάν λειτουργείτε έναν ιστότοπο υψηλής επισκεψιμότητας, θα πρέπει να ρίξετε μια ματιά στην [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations κανονικοποίηση Unicode].", "config-no-db": "Δεν βρέθηκε κάποιο κατάλληλο πρόγραμμα οδήγησης βάσης δεδομένων! Θα πρέπει να εγκαταστήσετε ένα πρόγραμμα οδήγησης βάσης δεδομένων για PHP.\nΟ παρακάτω {{PLURAL:$2|τύπος βάσης δεδομένων|τύποι βάσεων δεδομένων}} υποστηρίζονται: $1.\n\nΑν κάνετε compile την PHP μόνοι σας, ρυθμίστε ξανά τις παραμέτρους με κάποιον ενεργοποιημένο εξυπηρετητή βάσεων δεδομένων, για παράδειγμα, χρησιμοποιώντας την εντολή ./configure --with-mysqli.\nΕάν έχετε εγκαταστήσει την PHP από κάποιο πακέτο στο Debian ή στο Ubuntu, τότε θα πρέπει να εγκαταστήσετε επίσης, για παράδειγμα, το πακέτο php5-mysql.", "config-outdated-sqlite": "Προειδοποίηση: έχετε την SQLite έκδοση $1, που είναι χαμηλότερη από την ελάχιστη απαιτούμενη έκδοση $2. Η SQLite δεν θα είναι διαθέσιμη.", "config-pcre-no-utf8": "Κρίσιμο: Το PCRE module της PHP φαίνεται να έχει μεταγλωττιστεί χωρίς υποστήριξη PCRE_UTF8.\nΓια τη σωστή λειτουργία του MediaWiki απαιτείται υποστήριξη UTF-8.", "config-memory-raised": "Το memory_limit της PHP είναι $1 και αυξήθηκε σε $2.", "config-memory-bad": "Προειδοποίηση: το memory_limit της PHP είναι $1.\nΑυτή η τιμή είναι πιθανώς πολύ χαμηλή.\n\nΗ εγκατάσταση ενδέχεται να αποτύχει!", - "config-xcache": "[http://xcache.lighttpd.net/ Το XCache] είναι εγκατεστημένο", "config-apc": "Το [http://www.php.net/apc APC] είναι εγκατεστημένο", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp Το WinCache] είναι εγκατεστημένο", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp Το WinCache] είναι εγκατεστημένο", "config-diff3-bad": "Το GNU diff3 δεν βρέθηκε.", "config-git": "Βρέθηκε η Git έκδοση λογισμικού ελέγχου: $1.", "config-git-bad": "Η Git έκδοση του λογισμικού ελέγχου δεν βρέθηκε.", @@ -234,6 +234,8 @@ "config-help-tooltip": "κλικ για ανάπτυξη", "config-nofile": "Το αρχείο «$1» δεν μπορεί να βρεθεί. Μήπως έχει διαγραφεί;", "config-extension-link": "Γνωρίζατε ότι το wiki σας υποστηρίζει [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions επεκτάσεις];\n\nΜπορείτε να περιηγηθείτε [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category επεκτάσεις ανά κατηγορία] ή το [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] για να δείτε την πλήρη λίστα των επεκτάσεων.", - "mainpagetext": "To MediaWiki εγκαταστάθηκε με επιτυχία.", + "config-skins-screenshots": "$1 (στιγμιότυπα: $2)", + "config-screenshot": "στιγμιότυπο", + "mainpagetext": "To MediaWiki εγκαταστάθηκε.", "mainpagedocfooter": "Συμβουλευτείτε το [https://meta.wikimedia.org/wiki/Help:Contents Οδηγός Χρήστη] για πληροφορίες σχετικά με το λογισμικό wiki.\n\n== Ξεκινώντας ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings ρυθμίσεις Διαμόρφωσης λίστα]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ το MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce το MediaWiki απελευθέρωση mailing list]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Έχουν MediaWiki για τη γλώσσα σας]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Μάθετε πώς να καταπολεμήσετε το spam στο wiki σας]" } diff --git a/includes/installer/i18n/en-gb.json b/includes/installer/i18n/en-gb.json index 30796e3de6..7476c890ba 100644 --- a/includes/installer/i18n/en-gb.json +++ b/includes/installer/i18n/en-gb.json @@ -8,9 +8,9 @@ "config-desc": "The installer for MediaWiki", "config-title": "MediaWiki $1 installation", "config-information": "Information", - "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.\n\nThis 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'''.\nSee the GNU General Public Licence for more details.\n\nYou should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].", - "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalisation.", - "config-unicode-pure-php-warning": "'''Warning:''' The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalisation, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalisation].", + "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.\n\nThis 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'''.\nSee the GNU General Public Licence for more details.\n\nYou should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [https://www.gnu.org/copyleft/gpl.html read it online].", + "config-unicode-using-intl": "Using the [https://pecl.php.net/intl intl PECL extension] for Unicode normalisation.", + "config-unicode-pure-php-warning": "'''Warning:''' The [https://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalisation, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalisation].", "config-unicode-update-warning": "'''Warning:''' The installed version of the Unicode normalisation wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.", "config-unknown-collation": "'''Warning:''' Database is using unrecognised collation.", "config-profile-fishbowl": "Authorised editors only", @@ -18,7 +18,7 @@ "config-license-none": "No licence footer", "config-license-gfdl": "GNU Free Documentation Licence 1.3 or later", "config-license-cc-choose": "Select a custom Creative Commons licence", - "config-license-help": "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free licence].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose {{int:config-license-cc-by-sa}}.\n\nWikipedia previously used the GNU Free Documentation Licence.\nThe GFDL is a valid licence, but it is difficult to understand.\nIt is also difficult to reuse content licenced under the GFDL.", + "config-license-help": "Many public wikis put all contributions under a [https://freedomdefined.org/Definition free licence].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose {{int:config-license-cc-by-sa}}.\n\nWikipedia previously used the GNU Free Documentation Licence.\nThe GFDL is a valid licence, but it is difficult to understand.\nIt is also difficult to reuse content licenced under the GFDL.", "config-cc-error": "The Creative Commons licence chooser gave no result.\nEnter the licence name manually.", "config-cc-not-chosen": "Choose which Creative Commons licence you want and click \"proceed\".", "config-install-stats": "Initialising statistics" diff --git a/includes/installer/i18n/en.json b/includes/installer/i18n/en.json index 6d4c485263..f1b70806b4 100644 --- a/includes/installer/i18n/en.json +++ b/includes/installer/i18n/en.json @@ -39,14 +39,14 @@ "config-help-restart": "Do you want to clear all saved data that you have entered and restart the installation process?", "config-restart": "Yes, restart it", "config-welcome": "=== Environmental checks ===\nBasic checks will now be performed to see if this environment is suitable for MediaWiki installation.\nRemember to include this information if you seek support on how to complete the installation.", - "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis 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.\n\nThis 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.\nSee the GNU General Public License for more details.\n\nYou 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, or [http://www.gnu.org/copyleft/gpl.html read it online].", + "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis 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.\n\nThis 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.\nSee the GNU General Public License for more details.\n\nYou 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, or [https://www.gnu.org/copyleft/gpl.html read it online].", "config-sidebar": "* [https://www.mediawiki.org MediaWiki home]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrator's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Read me\n* Release notes\n* Copying\n* Upgrading", "config-env-good": "The environment has been checked.\nYou can install MediaWiki.", "config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.", "config-env-php": "PHP $1 is installed.", "config-env-hhvm": "HHVM $1 is installed.", - "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.", - "config-unicode-pure-php-warning": "Warning: The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].", + "config-unicode-using-intl": "Using the [https://pecl.php.net/intl intl PECL extension] for Unicode normalization.", + "config-unicode-pure-php-warning": "Warning: The [https://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].", "config-unicode-update-warning": "Warning: The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.", "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database {{PLURAL:$2|type is|types are}} supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using ./configure --with-mysqli.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the php5-mysql package.", "config-outdated-sqlite": "Warning: you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.", @@ -55,12 +55,11 @@ "config-pcre-no-utf8": "Fatal: PHP's PCRE module seems to be compiled without PCRE_UTF8 support.\nMediaWiki requires UTF-8 support to function correctly.", "config-memory-raised": "PHP's memory_limit is $1, raised to $2.", "config-memory-bad": "Warning: PHP's memory_limit is $1.\nThis is probably too low.\nThe installation may fail!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] is installed", "config-apc": "[http://www.php.net/apc APC] is installed", "config-apcu": "[http://www.php.net/apcu APCu] is installed", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is installed", - "config-no-cache-apcu": "Warning: Could not find [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObject caching is not enabled.", - "config-mod-security": "Warning: Your web server has [http://modsecurity.org/ mod_security]/mod_security2 enabled. Many common configurations of this will cause problems for MediaWiki and other software that allows users to post arbitrary content.\nIf possible, this should be disabled. Otherwise, refer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] is installed", + "config-no-cache-apcu": "Warning: Could not find [http://www.php.net/apcu APCu] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObject caching is not enabled.", + "config-mod-security": "Warning: Your web server has [https://modsecurity.org/ mod_security]/mod_security2 enabled. Many common configurations of this will cause problems for MediaWiki and other software that allows users to post arbitrary content.\nIf possible, this should be disabled. Otherwise, refer to [https://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.", "config-diff3-bad": "GNU diff3 not found.", "config-git": "Found the Git version control software: $1.", "config-git-bad": "Git version control software not found.", @@ -218,7 +217,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 or later", "config-license-pd": "Public Domain", "config-license-cc-choose": "Select a custom Creative Commons license", - "config-license-help": "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free license].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose {{int:config-license-cc-by-sa}}.\n\nWikipedia previously used the GNU Free Documentation License.\nThe GFDL is a valid license, but it is difficult to understand.\nIt is also difficult to reuse content licensed under the GFDL.", + "config-license-help": "Many public wikis put all contributions under a [https://freedomdefined.org/Definition free license].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose {{int:config-license-cc-by-sa}}.\n\nWikipedia previously used the GNU Free Documentation License.\nThe GFDL is a valid license, but it is difficult to understand.\nIt is also difficult to reuse content licensed under the GFDL.", "config-email-settings": "Email settings", "config-enable-email": "Enable outbound email", "config-enable-email-help": "If you want email to work, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] need to be configured correctly.\nIf you do not want any email features, you can disable them here.", @@ -248,7 +247,7 @@ "config-cache-options": "Settings for object caching:", "config-cache-help": "Object caching is used to improve the speed of MediaWiki by caching frequently used data.\nMedium to large sites are highly encouraged to enable this, and small sites will see benefits as well.", "config-cache-none": "No caching (no functionality is removed, but speed may be impacted on larger wiki sites)", - "config-cache-accel": "PHP object caching (APC, APCu, XCache or WinCache)", + "config-cache-accel": "PHP object caching (APC, APCu or WinCache)", "config-cache-memcached": "Use Memcached (requires additional setup and configuration)", "config-memcached-servers": "Memcached servers:", "config-memcached-help": "List of IP addresses to use for Memcached.\nShould specify one per line and specify the port to be used. For example:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/eo.json b/includes/installer/i18n/eo.json index 50c0ec043e..c1c5edf9d0 100644 --- a/includes/installer/i18n/eo.json +++ b/includes/installer/i18n/eo.json @@ -37,9 +37,8 @@ "config-env-bad": "La medio estis kontrolita.\nNe eblas instali MediaWiki.", "config-env-php": "PHP $1 estas instalita.", "config-env-hhvm": "HHVM $1 instalatas.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] estas instalita.", "config-apc": "[http://www.php.net/apc APC] estas instalita", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] estas instalita", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] estas instalita", "config-diff3-bad": "GNU diff3 ne estis trovita.", "config-db-type": "Tipo de datumbazo:", "config-db-wiki-settings": "Identigu ĉi tiun vikion", diff --git a/includes/installer/i18n/es.json b/includes/installer/i18n/es.json index 1df61566ca..05df002535 100644 --- a/includes/installer/i18n/es.json +++ b/includes/installer/i18n/es.json @@ -74,14 +74,14 @@ "config-help-restart": "¿Deseas borrar todos los datos guardados que has escrito y reiniciar el proceso de instalación?", "config-restart": "Sí, reiniciarlo", "config-welcome": "=== Comprobación del entorno ===\nAhora se van a realizar comprobaciones básicas para ver si el entorno es adecuado para la instalación de MediaWiki.\nRecuerda suministrar los resultados de tales comprobaciones si necesitas ayuda para completar la instalación.", - "config-copyright": "=== Derechos de autor y Términos de uso ===\n\n$1\n\nEste programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefieras).\n\nEste programa es distribuido con la esperanza de que sea útil, pero sin ninguna garantía; inclusive, sin la garantía implícita de la posibilidad de ser comercializado o de idoneidad para cualquier finalidad específica.\nConsulta la Licencia Pública General de GNU para más detalles.\n\nEn conjunto con este programa debes haber recibido una copia de la Licencia Pública General de GNU; caso contrario, pídela por escrito a la Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léela en Internet].", + "config-copyright": "=== Derechos de autor y Términos de uso ===\n\n$1\n\nEste programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefieras).\n\nEste programa es distribuido con la esperanza de que sea útil, pero sin ninguna garantía; inclusive, sin la garantía implícita de la posibilidad de ser comercializado o de idoneidad para cualquier finalidad específica.\nConsulta la Licencia Pública General de GNU para más detalles.\n\nEn conjunto con este programa debes haber recibido una copia de la Licencia Pública General de GNU; caso contrario, pídela por escrito a la Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [https://www.gnu.org/copyleft/gpl.html léela en Internet].", "config-sidebar": "* [https://www.mediawiki.org Página principal de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía del usuario]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guía del administrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas frecuentes]\n----\n* Léeme\n* Notas de la versión\n* Copia\n* Actualización", "config-env-good": "El entorno ha sido comprobado.\nPuedes instalar MediaWiki.", "config-env-bad": "El entorno ha sido comprobado.\nNo puedes instalar MediaWiki.", "config-env-php": "PHP $1 está instalado.", "config-env-hhvm": "HHVM $1 está instalado.", - "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.", - "config-unicode-pure-php-warning": "Advertencia: la [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Se utilizará la implementación más lenta en PHP puro.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", + "config-unicode-using-intl": "Usando la [https://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.", + "config-unicode-pure-php-warning": "Advertencia: la [https://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Se utilizará la implementación más lenta en PHP puro.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", "config-unicode-update-warning": "Atención: la versión instalada del contenedor de normalización de Unicode utiliza una versión anticuada de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberías [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations modernizarla] si te interesa utilizar Unicode.", "config-no-db": "No se encontró un controlador adecuado para la base de datos. Necesitas instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|Se admite el siguiente gestor de bases de datos|Se admiten los siguientes gestores de bases de datos}}: $1.\n\nSi compilaste PHP por tu cuenta, debes reconfigurarlo activando un cliente de base de datos, por ejemplo, mediante ./configure --with-mysqli.\nSi instalaste PHP desde un paquete de Debian o Ubuntu, también debes instalar, por ejemplo, el paquete php5-mysql.", "config-outdated-sqlite": "Advertencia: tienes SQLite $1, que es inferior a la mínima versión requerida: $2. SQLite no estará disponible.", @@ -90,12 +90,11 @@ "config-pcre-no-utf8": "'''Error fatal ''': Parece que el módulo PCRE de PHP fue compilado sin el soporte PCRE_UTF8.\nMediaWiki requiere compatibilidad con UTF-8 para funcionar correctamente.", "config-memory-raised": "El parámetro memory_limit de PHP es $1. Se aumenta a $2.", "config-memory-bad": "Advertencia: el parámetro memory_limit de PHP es $1.\nProbablemente sea demasiado bajo.\n¡La instalación puede fallar!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado", "config-apc": "[http://www.php.net/apc APC] está instalado", "config-apcu": "[http://www.php.net/apcu APCu] está instalado", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] está instalado", "config-no-cache-apcu": "Advertencia: No se pudo encontrar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está activado.", - "config-mod-security": "Advertencia: tu servidor web tiene activado [http://modsecurity.org/ mod_security]/mod_security2. Muchas de sus configuraciones comunes pueden causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrario. De ser posible, deberías desactivarlo. Si no, consulta la [http://modsecurity.org/documentation/ documentación de mod_security] o contacta con el administrador de tu servidor si encuentras errores aleatorios.", + "config-mod-security": "Advertencia: tu servidor web tiene activado [https://modsecurity.org/ mod_security]/mod_security2. Muchas de sus configuraciones comunes pueden causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrario. De ser posible, deberías desactivarlo. Si no, consulta la [https://modsecurity.org/documentation/ documentación de mod_security] o contacta con el administrador de tu servidor si encuentras errores aleatorios.", "config-diff3-bad": "GNU diff3 no se encuentra.", "config-git": "Se encontró el software de control de versiones Git: $1.", "config-git-bad": "No se encontró el software de control de versiones Git.", @@ -253,7 +252,7 @@ "config-license-gfdl": "Licencia de documentación libre de GNU 1.3 o posterior", "config-license-pd": "Dominio público", "config-license-cc-choose": "Selecciona una licencia personalizada de Creative Commons", - "config-license-help": "Muchos wikis públicos ponen todas las contribuciones bajo una [http://freedomdefined.org/Definition licencia libre].\nEsto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.\nEsto no es generalmente necesario para un wiki privado o corporativo.\n\nSi deseas poder utilizar texto de Wikipedia, y deseas que Wikipedia pueda aceptar el texto copiado de tu wiki, debes elegir {{int:config-license-cc-by-sa}}.\n\nWikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).\nLa GFDL es una licencia válida, pero es difícil de entender.\nTambién es difícil reutilizar el contenido licenciado bajo la GFDL.", + "config-license-help": "Muchos wikis públicos ponen todas las contribuciones bajo una [https://freedomdefined.org/Definition licencia libre].\nEsto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.\nEsto no es generalmente necesario para un wiki privado o corporativo.\n\nSi deseas poder utilizar texto de Wikipedia, y deseas que Wikipedia pueda aceptar el texto copiado de tu wiki, debes elegir {{int:config-license-cc-by-sa}}.\n\nWikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).\nLa GFDL es una licencia válida, pero es difícil de entender.\nTambién es difícil reutilizar el contenido licenciado bajo la GFDL.", "config-email-settings": "Configuración de correo electrónico", "config-enable-email": "Activar el envío de correos electrónicos", "config-enable-email-help": "Si quieres que el correo electrónico funcione, la [http://www.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.\nSi no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.", diff --git a/includes/installer/i18n/eu.json b/includes/installer/i18n/eu.json index a9b01f58ff..e94c71b220 100644 --- a/includes/installer/i18n/eu.json +++ b/includes/installer/i18n/eu.json @@ -45,14 +45,14 @@ "config-help-restart": "Ezabatu nahi duzu gorde duzun informazio guztia eta berrebiarazi instalazio prozesua?", "config-restart": "Bai, berriz hasi", "config-welcome": "=== Ingurumen-egiaztapenak ===\n\nOinarrizko kontrola burutzen ari da, ikusteko ia ingurumena aproposa da MediaWikia instalatzeko.\nLaguntza behar izanez gero instalazio prozesua amaitzeko ez ahaztu sartzea informazio hau .", - "config-copyright": "=== Copyright eta terminoak ===\n\n$1\n\nPrograma hau software librea da; birbana eta / edo alda dezakezu GNU Lizentzia Publiko Orokorraren baldintzapean, Free Software Foundation-ek argitaratutakoaren arabera; Lizentziaren 2. bertsioa edo (nahiago baduzu) bertsio berriago bat.\n\nPrograma hau baliagarria izango delakoan elkarbantzen da, baina bermerik gabe ; merkaturatze edo helburu jakin baterako gaitasuna berme inplizitua ere izan gabe.\nIkus GNU Lizentzia Publiko Orokorra xehetasun gehiagorako.\n\n izan beharko zenuke GNU Lizentzia Publiko Orokorraren kopia programa honekin batera; bestela, idatzi Free Software Foundation-en, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, AEB, edo [http://www.gnu.org/copyleft/gpl.html irakurri ezazu online]. .", + "config-copyright": "=== Copyright eta terminoak ===\n\n$1\n\nPrograma hau software librea da; birbana eta / edo alda dezakezu GNU Lizentzia Publiko Orokorraren baldintzapean, Free Software Foundation-ek argitaratutakoaren arabera; Lizentziaren 2. bertsioa edo (nahiago baduzu) bertsio berriago bat.\n\nPrograma hau baliagarria izango delakoan elkarbantzen da, baina bermerik gabe ; merkaturatze edo helburu jakin baterako gaitasuna berme inplizitua ere izan gabe.\nIkus GNU Lizentzia Publiko Orokorra xehetasun gehiagorako.\n\n izan beharko zenuke GNU Lizentzia Publiko Orokorraren kopia programa honekin batera; bestela, idatzi Free Software Foundation-en, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, AEB, edo [https://www.gnu.org/copyleft/gpl.html irakurri ezazu online]. .", "config-sidebar": "* [https://www.mediawiki.org MediaWiki nagusia]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Erabiltzaileentzako Gida]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratzaileentzako Gida]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MEG]\n----\n* Irakur nazazu\n* Oharren argitalpena\n* Kopiaketa\n* Eguneratzea", "config-env-good": "Ingurumena egiaztatu egin da. \nMediaWiki instalatu ahal duzu.", "config-env-bad": "Ingurumena egiaztatu egin da.\nEzin duzu MediaWiki-a instalatu.", "config-env-php": "PHP $1 instalatuta dago.", "config-env-hhvm": "HHVM $1 instalatuta dago.", - "config-unicode-using-intl": "[http://pecl.php.net/intl intl PECL extension] erabiltzen Unicode-ren normalizaziorako.", - "config-unicode-pure-php-warning": "Oharra: [http://pecl.php.net/intl intl PECL extension] ez dago prest Unicode-ren normalizazioa jasatzeko,PHP hutsaren ezarpena motelara itzultzen.\n\nTrafiko handiko gune bat exekutatzen baduzu, apur bat irakurri beharko zenuke [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization]-ri buruz.", + "config-unicode-using-intl": "[https://pecl.php.net/intl intl PECL extension] erabiltzen Unicode-ren normalizaziorako.", + "config-unicode-pure-php-warning": "Oharra: [https://pecl.php.net/intl intl PECL extension] ez dago prest Unicode-ren normalizazioa jasatzeko,PHP hutsaren ezarpena motelara itzultzen.\n\nTrafiko handiko gune bat exekutatzen baduzu, apur bat irakurri beharko zenuke [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization]-ri buruz.", "config-unicode-update-warning": "Oharra: Unicode-ren normalizazioaren bilgarriaren bertsio instalatua [http://site.icu-project.org/ ICU proiektuaren] liburutegia bertsio zaharrago bat erabiltzen du.\n[Https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] behar duzu Unicode erabiltzeagatik kezkatuta bazaude.", "config-no-db": "Ezin izan da aurkitu datu-basearen driver egoki bat! Instalatu behar duzu PHP-ko datu-basearen driver bat. Hurrengo datu {{PLURAL:$2|basea|baseak}} onartzen {{PLURAL:$2|da|dira}}:$1\n\n\nPHP-k zuk konpilatu baduzu, berkonfiguratu datu-basearen bezeroarekin gaituta, adibidez, ./configure --with-mysqli. erabiliz.\nDebian edo Ubuntu pakete batetik PHPa instalatu baduzu, orduan instalatu behar duzu ere bai hurrengo adibide bezalako bat php5-mysql", "config-outdated-sqlite": "Warning: SQLite $1 daukazu, hau da, gutxieneko bertsioa $2 baino atzeratutagoa da. SQLite ez dago erabilgarri.", @@ -61,12 +61,11 @@ "config-pcre-no-utf8": "Fatal: PHREko PCRE modulua PCRE_UTF8 ko laguntza gabe bildu da.\nMediaWiki-k UTF-8 euskarria behar du behar bezala funtziona dezan.", "config-memory-raised": "PHP-ko memory_limit $1 da, $2-ra igota.", "config-memory-bad": "Warning: PHPko memory_limit $1 da.\nZiurrenik hau oso baxua da.\nInstalazioa huts egin dezake!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalatuta dago", "config-apc": "[http://www.php.net/apc APC] instalatuta dago", "config-apcu": "[http://www.php.net/apcu APCu] instalatuta dago", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] instalatuta dago", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] instalatuta dago", "config-no-cache-apcu": "Warning: Ezin izan da [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] edo [http://www.iis.net/download/WinCacheForPhp WinCache] aurkitu.\nObjektu katxea ez dago aktibatuta.", - "config-mod-security": "Warning: Zure web zerbitzariak [http://modsecurity.org/mod_security] / mod_security2 aktibatu du. Honen konfigurazio komun asko sortu ahal dituzte arazoak MediaWikin eta beste software batzuetan, hautazko edukia argitaratzeko aukera ematen dutenei erabiltzaileei.\nAhal izanez gero, desgaitu egin beharko litzateke. Bestela, kontsultatu [http://modsecurity.org/documentation/ mod_security documentation] edo jarri harremanetan zure ostalariarekin ausazko akatsak aurkitzen badituzu.", + "config-mod-security": "Warning: Zure web zerbitzariak [https://modsecurity.org/mod_security] / mod_security2 aktibatu du. Honen konfigurazio komun asko sortu ahal dituzte arazoak MediaWikin eta beste software batzuetan, hautazko edukia argitaratzeko aukera ematen dutenei erabiltzaileei.\nAhal izanez gero, desgaitu egin beharko litzateke. Bestela, kontsultatu [https://modsecurity.org/documentation/ mod_security documentation] edo jarri harremanetan zure ostalariarekin ausazko akatsak aurkitzen badituzu.", "config-diff3-bad": "GNU diff3 ez da aurkitu.", "config-git": "Git bertsio-kontrol software aurkitu da: $1", "config-git-bad": "Git bertsio-kontrol software ez da aurkitu.", @@ -224,7 +223,7 @@ "config-license-gfdl": "\nGNU Free Documentation License 1.3 edo berriagoa", "config-license-pd": "Domeinu Askea", "config-license-cc-choose": "Aukeratu Creative Commons lizentzia pertsonalizatua", - "config-license-help": "Wikilari publiko askok ekarpen guztiak jartzen dituzte [http://freedomdefined.org/Definition lizentzia aske] azpian.\nHonek komunitatearen jabetza zentzuaren kontzeptua sortzen laguntzen du eta epe luzerako ekarpena bultzatzen du.\nEz da, oro har, wiki pribatu edo korporatiborik behar.\n\nWikipediatik testua erabiltzeko aukera izan nahi baduzu eta Wikipediak zure wikietatik kopiatutako testua onartzeko gai izatea nahi baduzu, {{int:config-license-cc-by-sa}} aukeratu beharko zenuke.\n\nWikipedia lehenago erabili izan du GNU Dokumentazio Librearen Lizentzia.\nGFDL baliozko lizentzia da, baina ulertzeko zaila da.\nGFDLren baimenarekin lotutako edukiak berrerabiltzea ere zaila da.", + "config-license-help": "Wikilari publiko askok ekarpen guztiak jartzen dituzte [https://freedomdefined.org/Definition lizentzia aske] azpian.\nHonek komunitatearen jabetza zentzuaren kontzeptua sortzen laguntzen du eta epe luzerako ekarpena bultzatzen du.\nEz da, oro har, wiki pribatu edo korporatiborik behar.\n\nWikipediatik testua erabiltzeko aukera izan nahi baduzu eta Wikipediak zure wikietatik kopiatutako testua onartzeko gai izatea nahi baduzu, {{int:config-license-cc-by-sa}} aukeratu beharko zenuke.\n\nWikipedia lehenago erabili izan du GNU Dokumentazio Librearen Lizentzia.\nGFDL baliozko lizentzia da, baina ulertzeko zaila da.\nGFDLren baimenarekin lotutako edukiak berrerabiltzea ere zaila da.", "config-email-settings": "E-posta hobespenak", "config-enable-email": "Aktibatu irteerako emaila.", "config-enable-email-help": "Lan egiteko email-a nahi baduzu, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] ondo konfiguratu egin behar da. Email ezaugarririk ez baduzu nahi, hemen kendu ditzakezu.", diff --git a/includes/installer/i18n/fa.json b/includes/installer/i18n/fa.json index 97a09a3e9c..aff2fd3a19 100644 --- a/includes/installer/i18n/fa.json +++ b/includes/installer/i18n/fa.json @@ -55,14 +55,14 @@ "config-help-restart": "آیا می‌خواهید همهٔ اطلاعات ذخیره شده‌ای که وارد کرده‌اید را پاک کنید و دوباره روند نصب را شروع کنید؟", "config-restart": "بله، دوباره شروع کن", "config-welcome": "===بررسی‌های محیطی===\nبرای فهمیدن اینکه این محیط برای نصب مدیاویکی مناسب است، اکنون بررسی‌های اساسی انجام خواهد‌شد.\nاگر به دنبال پشتیبانی در چگونگی تکمیل نصب هستید،به یاد داشته باشید این اطلاعات را بگنجانید.", - "config-copyright": "=== حق رونوشت و شرایط ===\n\n$1\n\nاین برنامه، نرم‌افزاری آزاد است. می‌توانید تحت شرایط نگارش Û² یا (بنا به نظر خود) هر نگارش جدیدتری از پروانهٔ جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده، بازنشرش کرده و/یا تغییرش دهید.\n\n\nاین برنامه با این امید توزیع شده که مفید باشد، ولی بدون هیچ ضمانتی، حتا ضمانت ضمنی معامله‌پذیری یا تناسب برای کاربردی خاص .\n\nبرای جزئیات بیشتر، پروانهٔ جامع همگانی گنو را ببینید.\n\n\nباید همراه این برنامه، نگارشی از پروانهٔ جامع همگانی گنو را گرفته باشید. اگر چنین نیست، با بنیاد نرم‌افزار آزاد به نشانی 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA مکاتبه کرده یا [http://www.gnu.org/copyleft/gpl.html پروانه را برخط بخوانید].", + "config-copyright": "=== حق رونوشت و شرایط ===\n\n$1\n\nاین برنامه، نرم‌افزاری آزاد است. می‌توانید تحت شرایط نگارش Û² یا (بنا به نظر خود) هر نگارش جدیدتری از پروانهٔ جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده، بازنشرش کرده و/یا تغییرش دهید.\n\n\nاین برنامه با این امید توزیع شده که مفید باشد، ولی بدون هیچ ضمانتی، حتا ضمانت ضمنی معامله‌پذیری یا تناسب برای کاربردی خاص .\n\nبرای جزئیات بیشتر، پروانهٔ جامع همگانی گنو را ببینید.\n\n\nباید همراه این برنامه، نگارشی از پروانهٔ جامع همگانی گنو را گرفته باشید. اگر چنین نیست، با بنیاد نرم‌افزار آزاد به نشانی 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA مکاتبه کرده یا [https://www.gnu.org/copyleft/gpl.html پروانه را برخط بخوانید].", "config-sidebar": "* [https://www.mediawiki.org صفحهٔ اصلی مدیاویکی]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents راهنمای کاربر]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents راهنمای مدیر]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ پرسش‌های رایج]\n----\n* مرا بخوان\n* یادداشت‌های انتشار\n* نسخه برداری\n* ارتقا", "config-env-good": "محیط بررسی شده‌است.\nشما می‌توانید مدیاویکی را نصب کنید.", "config-env-bad": "محیط بررسی شده‌است.\nشما نمی‌توانید مدیاویکی را نصب کنید.", "config-env-php": "پی‌اچ‌پی $1 نصب شده‌است.", "config-env-hhvm": "اچ‌اچ‌وی‌ام $1 نصب شده‌است.", - "config-unicode-using-intl": "برای یونیکد عادی از [http://pecl.php.net/intl افزونهٔ intl برای PECL] استفاده کنید.", - "config-unicode-pure-php-warning": "'''هشدار:''' [http://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\n\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.", + "config-unicode-using-intl": "برای یونیکد عادی از [https://pecl.php.net/intl افزونهٔ intl برای PECL] استفاده کنید.", + "config-unicode-pure-php-warning": "'''هشدار:''' [https://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\n\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.", "config-unicode-update-warning": "'''هشدار:''' نسخهٔ نصب شدهٔ پوشهٔ یونیکد عادی از ورژن قدیمی‌تر کتابخانه [http://site.icu-project.org/ the ICU project's] استفاده می‌کند.\n\nاگر کلاً علاقه‌مند به استفاده از یونیکد هستید باید [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade].", "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب {{PLURAL:$2|سوأل کنید.|سوأل کنید.}}\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از ./configure --with-mysqli استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.", "config-outdated-sqlite": "''' هشدار:''' شما اس‌کیولایت $1 دارید، که پایین‌تر از حداقل نسخهٔ $2 مورد نیاز است.اس‌کیولایت در دسترس نخواهد بود.", @@ -71,12 +71,11 @@ "config-pcre-no-utf8": "مخرب: به‌ نظر می‌رسد پودمان پی‌سی‌آراییِ پی‌اچ‌پی بدون پشتیبانی پی‌سی‌آرایی_یو‌تی‌اف۸ تهیه شده‌است.\nمدیاویکی برای درست عمل کردن نیازمند پشتیبانی یوتی‌اف-Û¸ است.", "config-memory-raised": "PHP's memory_limit, نسخهٔ $1 است، به نسخهٔ $2 ارتقاء داده شده‌است.", "config-memory-bad": "'''هشدار:''' PHP's memory_limit نسخهٔ $1 است.\nاین ممکن است خیلی پایین باشد.\nممکن است نصب با مشکل رو‌به‌رو شود.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] نصب شده‌است.", "config-apc": "[http://www.php.net/apc APC] نصب شده‌است.", "config-apcu": "[http://www.php.net/apcu APCu] نصب شده‌است", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] نصب شده‌است.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] نصب شده‌است.", "config-no-cache-apcu": "هشدار: پیوند [http://www.php.net/apcu APCu]، [http://xcache.lighttpd.net/ XCache] یا [http://www.iis.net/download/WinCacheForPhp WinCache] یافت نشد. ذخیره شی فعال نیست.", - "config-mod-security": "'''هشدار:''' وب سرور شما [http://modsecurity.org/ mod_security] فعال است.اگر اشتباه پیکربندی شده‌‌ باشد،می تواند باعث ایجاد مشکلاتی برای مدیاویکی یا دیگر نرم‌افزاری شود که به کاربران اجازه می‌دهد پیام دلخواه ارسال کنند.\nبه [http://modsecurity.org/documentation/ mod_security documentation] مراجعه کنید یا اگر با خطاهای اتفاقی مواجه شدید با پشتیبانی میزبان خود در تماس باشید.", + "config-mod-security": "'''هشدار:''' وب سرور شما [https://modsecurity.org/ mod_security] فعال است.اگر اشتباه پیکربندی شده‌‌ باشد،می تواند باعث ایجاد مشکلاتی برای مدیاویکی یا دیگر نرم‌افزاری شود که به کاربران اجازه می‌دهد پیام دلخواه ارسال کنند.\nبه [https://modsecurity.org/documentation/ mod_security documentation] مراجعه کنید یا اگر با خطاهای اتفاقی مواجه شدید با پشتیبانی میزبان خود در تماس باشید.", "config-diff3-bad": "جی‌ان‌یو دیف۳ پیدا نشد.", "config-git": "کنترل نسخهٔ نرم‌افزار گیت پیدا شد: $1.", "config-git-bad": "کنترل نسخهٔ نرم‌افزار گیت پیدا نشد.", @@ -231,7 +230,7 @@ "config-license-gfdl": "مجوز اسنادومدارک آزاد جی‌ان‌یو Û±.Û³ یا بالاتر", "config-license-pd": "مالکیت عمومی", "config-license-cc-choose": "انتخاب یک مجوز سفارشی عوام خلاق", - "config-license-help": "بسیاری از وبگاه‌ها ویرایش‌های ها را با [http://freedomdefined.org/Definition اجازه‌نامهٔ آزاد] منتشر می‌کنند.\nاین کار به داشتن حس مالکیت جمعی کمک می‌کند و ویرایش‌های طولانی مدت را اشاعه می‌دهد.\nاین برای ویکی‌های خصوصی یا سازمانی الزامی نیست.\n\nاگر شما می‌خواهید از متون ویکی‌پدیا استفاده کنید، یا اینکه به ویکی‌پدیا اجازه دهید از متون شما استفاده کند باید متون خود را با {{int:config-license-cc-by-sa}} منتشر کنید.\n\nویکی‌پدیا در گذشته از اجازه‌نامهٔ داده‌های آزاد گنو استفاده می‌کرد.\nاین اجازه‌نامه مورد قبول است، ولی فهم آن آسان نیست.\nهمچنین استفادهٔ دوباره از متون تحت اجازه‌نامهٔ داده‌های آزاد گنو به سختی انجام می‌گیرد.", + "config-license-help": "بسیاری از وبگاه‌ها ویرایش‌های ها را با [https://freedomdefined.org/Definition اجازه‌نامهٔ آزاد] منتشر می‌کنند.\nاین کار به داشتن حس مالکیت جمعی کمک می‌کند و ویرایش‌های طولانی مدت را اشاعه می‌دهد.\nاین برای ویکی‌های خصوصی یا سازمانی الزامی نیست.\n\nاگر شما می‌خواهید از متون ویکی‌پدیا استفاده کنید، یا اینکه به ویکی‌پدیا اجازه دهید از متون شما استفاده کند باید متون خود را با {{int:config-license-cc-by-sa}} منتشر کنید.\n\nویکی‌پدیا در گذشته از اجازه‌نامهٔ داده‌های آزاد گنو استفاده می‌کرد.\nاین اجازه‌نامه مورد قبول است، ولی فهم آن آسان نیست.\nهمچنین استفادهٔ دوباره از متون تحت اجازه‌نامهٔ داده‌های آزاد گنو به سختی انجام می‌گیرد.", "config-email-settings": "تنظیمات ایمیل", "config-enable-email": "فعال‌سازی ایمیل خروجی", "config-enable-email-help": "اگر می‌خواهید ارسال ایمیل کار کند، [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] نیازمند پیکربندی صحیح است.\nاگر هیچ قابلیت ایمیلی نمی‌خواهید، می‌توانید آنها را اینجا غیر‌فعال کنید.", @@ -317,6 +316,7 @@ "config-install-mainpage-failed": "قادر به درج صفحهٔ اصلی نمی‌باشد:$1", "config-install-done": "'''تبریک!'''\nبا موفقیت مدیاویکی را نصب کردید.\nبرنامه نصب‌کننده پرونده LocalSettings.php را درست کرد.\nکه شامل تمام تنظیمات می‌باشد.\n\nشما نیاز به دریافت آن دارید و آن را در پایهٔ نصب ویکی قرار دهید (همان پوشهٔ index.php). دریافت باید به صورت خودکار شروع شده‌باشد.\n\nاگر دریافت شروع نشد یا اگر آن را لغو کردید با کلیک روی پیوند زیر می‌توانید آن را دریافت کنید:\n\n$3\n\n'''توجه داشته باشید:''' اگر این را الآن انجام ندهید، این پرونده تولیدشده در صورتی که نصب را بدون دریافت آن تمام کردید بعداً در اختیار شما قرار نخواهد گرفت.\n\nوقتی انجام شد شما می‌توانید '''[$2 وارد ویکی شوید]'''.", "config-install-done-path": "تبریک!\nمدیاویکی با موفقیت نصب گردید.\nبرنامه نصب‌کننده یک پرونده LocalSettings.php ایجاد کرده است که شامل تمام تنظیمات می‌باشد.\n\nلازم است شما آن را دریافت کرده و در $4 قرار دهید. اِن دریافت می باِست به صورت خودکار شروع شده‌باشد.\n\nاگر دریافت شروع نشده بود و یا آن را لغو کرده اید با کلیک روی پیوند زیر می‌توانید آن را دریافت کنید:\n\n$3\n\nتوجه: اگر این کار را هم اکنون انجام ندهید و بدون دریافت آن از برنامه نصب خارج شويد، این پرونده تنظیمات تولیدشده در آینده در اختیار شما قرار نخواهد داشت.\n\nوقتی که آن کار را انجام داديد، می‌توانید [$2 وارد ويکی خودتان شويد].", + "config-install-success": "مدیاویکی به صورت موفقیت‌آمیز نصب شد. شما می‌توانید\nاز <$1$2> برای دیدن ویکی‌تان بازدید کنید.\nاگر پرسشی داشتید، فهرست سوال‌های متداول ما را مطالعه کنید:\n یا از یکی از انجمن‌های پشیبانی ما که در آن صفحه فهرست شده‌اند استفاده کنید.", "config-download-localsettings": "دریافت LocalSettings.php", "config-help": "راهنما", "config-help-tooltip": "برای گسترش کلیک کنید", diff --git a/includes/installer/i18n/fi.json b/includes/installer/i18n/fi.json index 6b204bc862..c1332b15eb 100644 --- a/includes/installer/i18n/fi.json +++ b/includes/installer/i18n/fi.json @@ -61,23 +61,22 @@ "config-help-restart": "Haluatko poistaa kaikki annetut tiedot ja aloittaa asennuksen alusta?", "config-restart": "Kyllä", "config-welcome": "=== Ympäristön tarkistukset ===\nVarmistetaan MediaWikin asennettavuus tähän ympäristöön.\nMuista antaa nämä tiedot, jos tarvitset apua asennuksen aikana.", - "config-copyright": "=== Tekijänoikeudet ja käyttöehdot ===\n\n$1\n\nTämä ohjelma on vapaa ohjelmisto; voit levittää sitä ja/tai muokata sitä Free Software Foundationin GNU General Public Licensen ehdoilla, joko version 2 tai (halutessasi) minkä tahansa myöhemmän version mukaisesti.\n\nTätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.kopio GNU General Public Licensestä tämän ohjelman mukana; jos et, kirjoita siitä osoitteeseen Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tai [http://www.gnu.org/copyleft/gpl.html lue se verkossa].", + "config-copyright": "=== Tekijänoikeudet ja käyttöehdot ===\n\n$1\n\nTämä ohjelma on vapaa ohjelmisto; voit levittää sitä ja/tai muokata sitä Free Software Foundationin GNU General Public Licensen ehdoilla, joko version 2 tai (halutessasi) minkä tahansa myöhemmän version mukaisesti.\n\nTätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.kopio GNU General Public Licensestä tämän ohjelman mukana; jos et, kirjoita siitä osoitteeseen Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tai [https://www.gnu.org/copyleft/gpl.html lue se verkossa].", "config-sidebar": "* [https://www.mediawiki.org MediaWikin kotisivu]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Käyttöopas]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Hallintaopas]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ UKK]\n----\n* Lue minut\n* Julkaisutiedot\n* Kopiointi\n* Päivittäminen", "config-env-good": "Asennusympäristö on tarkastettu.\nVoit asentaa MediaWikin.", "config-env-bad": "Asennusympäristö on tarkastettu.\nEt voi asentaa MediaWikiä.", "config-env-php": "PHP $1 on asennettu.", "config-env-hhvm": "HHVM $1 on asennettu.", - "config-unicode-using-intl": "Käyttää [http://pecl.php.net/intl intl PECL-laajennusta] Unicode-normalisaatioon.", + "config-unicode-using-intl": "Käyttää [https://pecl.php.net/intl intl PECL-laajennusta] Unicode-normalisaatioon.", "config-no-db": "Sopivaa tietokanta-ajuria ei löytynyt! Sinun täytyy asentaa tietokanta-ajuri PHP:lle.\n{{PLURAL:$2|Seuraava tietokantatyyppi on tuettu|Seuraavat tietokantatyypit ovat tuettuja}}: $1.\n\nJos koostit PHP:n itse, määritä se uudelleen tietokanta-asiakkaan ollessa käytössä, esimerkiksi koodilla ./configure --with-mysqli.\nJos asensit PHP:n Debian- tai Ubuntu-pakkauksesta, sinun on myös asennettava esimerkiksi php5-mysql-pakkaus.", "config-outdated-sqlite": "Varoitus: sinulla on käytössä SQLite $1, joke on vanhempi kuin vähintään vaadittava versio $2. SQLite ei ole saatavilla.", "config-no-fts3": "Varoitus: SQLite on koostettu ilman [//sqlite.org/fts3.html FTS3-moduulia], hakuominaisuudet eivät ole käytössä tässä taustajärjestelmässä.", "config-pcre-old": "Tärkeää: PCRE $1 tai uudempi versio tarvitaan.\nPHP-binäärisi on linkitetty versiolla PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Lisätietoja].", "config-memory-raised": "PHP:n memory_limit on $1, nostetaan arvoon $2.", "config-memory-bad": "'''Varoitus:''' PHP:n memory_limit on $1.\nTämä on luultavasti liian alhainen.\nAsennus saattaa epäonnistua!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] on asennettu", "config-apc": "[http://www.php.net/apc APC] on asennettu.", "config-apcu": "[http://www.php.net/apcu APCu] on asennettu", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] on asennettu", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] on asennettu", "config-diff3-bad": "GNU diff3:a ei löytynyt.", "config-git": "Löydetty Git versionhallintaohjelmisto: $1", "config-git-bad": "Git versionhallintaohjelmistoa ei löydy.", @@ -223,7 +222,7 @@ "config-license-gfdl": "GNU Free Documentation -lisenssi 1.3 tai uudempi", "config-license-pd": "Public domain", "config-license-cc-choose": "Valitse mukautettu Creative Commons -lisenssi", - "config-license-help": "Monet julkiset wikit käyttävät muokkauksiin [http://freedomdefined.org/Definition vapaata lisenssiä].\nTämä auttaa luomaan yhteisöllisen omistajuuden tunteen ja kannustaa pitkäkestoiseen muokkaamiseen.\nSe ei ole yleensä tarpeen yksityiselle tai yrityksen wikille.\n\nJos haluat pystyä käyttämään tekstiä Wikipediasta, ja haluat Wikipedian pystyvän hyväksymään wikistäsi kopioitua tekstiä, sinun tulisi valita {{int:config-license-cc-by-sa}}.\n\nWikipedia käytti aiemmin GNU Free Documentation Licenseä.\nGFDL on kelvollinen lisenssi, mutta vaikea ymmärtää.\nOn myös vaikeaa käyttää uudelleen GFDL-lisensöityä sisältöä.", + "config-license-help": "Monet julkiset wikit käyttävät muokkauksiin [https://freedomdefined.org/Definition vapaata lisenssiä].\nTämä auttaa luomaan yhteisöllisen omistajuuden tunteen ja kannustaa pitkäkestoiseen muokkaamiseen.\nSe ei ole yleensä tarpeen yksityiselle tai yrityksen wikille.\n\nJos haluat pystyä käyttämään tekstiä Wikipediasta, ja haluat Wikipedian pystyvän hyväksymään wikistäsi kopioitua tekstiä, sinun tulisi valita {{int:config-license-cc-by-sa}}.\n\nWikipedia käytti aiemmin GNU Free Documentation Licenseä.\nGFDL on kelvollinen lisenssi, mutta vaikea ymmärtää.\nOn myös vaikeaa käyttää uudelleen GFDL-lisensöityä sisältöä.", "config-email-settings": "Sähköpostiasetukset", "config-enable-email": "Ota käyttöön sähköpostien lähetys", "config-enable-email-help": "Jotta sähköposti toimii, [http://www.php.net/manual/en/mail.configuration.php PHP:n sähköpostiasetukset] täytyy asettaa oikein.\nJos et halua käyttää sähköpostiominaisuuksia, ne voi kytkeä pois päältä tästä.", diff --git a/includes/installer/i18n/fo.json b/includes/installer/i18n/fo.json index e907dc2f5a..44a070782a 100644 --- a/includes/installer/i18n/fo.json +++ b/includes/installer/i18n/fo.json @@ -36,8 +36,8 @@ "config-restart": "Ja, byrja umaftur", "config-env-php": "PHP $1 er innstallerað.", "config-env-hhvm": "HHVM $1 er lagt inn.", - "config-unicode-using-intl": "Brúkar [http://pecl.php.net/intl intl PECL ískoytið] til Unicode normalisering.", - "config-unicode-pure-php-warning": "Ávaring: [http://pecl.php.net/intl intl PECL ískoytið] er ikki tøkt at handfara Unicode normalisering, fellur aftur til eina spakuligari reina-PHP verkseting.\nUm tú koyrir eina netsíðu við høgari ferðslu, so eigur tú at lesa eitt sindur um [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalisering].", + "config-unicode-using-intl": "Brúkar [https://pecl.php.net/intl intl PECL ískoytið] til Unicode normalisering.", + "config-unicode-pure-php-warning": "Ávaring: [https://pecl.php.net/intl intl PECL ískoytið] er ikki tøkt at handfara Unicode normalisering, fellur aftur til eina spakuligari reina-PHP verkseting.\nUm tú koyrir eina netsíðu við høgari ferðslu, so eigur tú at lesa eitt sindur um [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalisering].", "config-unicode-update-warning": "Ávaring: Tann innlagda versjónin av Unicode normalisering wrapper nýtir eina eldri versjón av [http://site.icu-project.org/ bókasavninum hjá ICU verkætlanini].\nTú eigur at [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations fremja uppstigning] um tú stúrir fyri at nýta Unicode.", "config-diff3-bad": "GNU diff3 ikki funnið.", "config-git": "Fann Git version control forritið: $1.", diff --git a/includes/installer/i18n/fr.json b/includes/installer/i18n/fr.json index 57c6acbc44..2d9b94f4ca 100644 --- a/includes/installer/i18n/fr.json +++ b/includes/installer/i18n/fr.json @@ -69,14 +69,14 @@ "config-help-restart": "Voulez-vous effacer toutes les données enregistrées que vous avez entrées et relancer le processus d'installation ?", "config-restart": "Oui, le relancer", "config-welcome": "=== Vérifications liées à l’environnement ===\nDes vérifications de base vont maintenant être effectuées pour voir si cet environnement est adapté à l’installation de MediaWiki.\nRappelez-vous d’inclure ces informations si vous recherchez de l’aide sur la manière de terminer l’installation.", - "config-copyright": "=== Droit d’auteur et conditions ===\n\n$1\n\nCe programme est un logiciel libre : vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation (version 2 de la Licence, ou, à votre choix, toute version ultérieure).\n\nCe programme est distribué dans l’espoir qu’il sera utile, mais '''sans aucune garantie''' : sans même les garanties implicites de '''commercialisabilité''' ou d’'''adéquation à un usage particulier'''.\nVoir la Licence Publique Générale GNU pour plus de détails.\n\nVous devriez avoir reçu une copie de la Licence Publique Générale GNU avec ce programme ; dans le cas contraire, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ou [http://www.gnu.org/copyleft/gpl.html lisez-la en ligne].", + "config-copyright": "=== Droit d’auteur et conditions ===\n\n$1\n\nCe programme est un logiciel libre : vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation (version 2 de la Licence, ou, à votre choix, toute version ultérieure).\n\nCe programme est distribué dans l’espoir qu’il sera utile, mais '''sans aucune garantie''' : sans même les garanties implicites de '''commercialisabilité''' ou d’'''adéquation à un usage particulier'''.\nVoir la Licence Publique Générale GNU pour plus de détails.\n\nVous devriez avoir reçu une copie de la Licence Publique Générale GNU avec ce programme ; dans le cas contraire, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ou [https://www.gnu.org/copyleft/gpl.html lisez-la en ligne].", "config-sidebar": "* [https://www.mediawiki.org Accueil MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guide de l’utilisateur]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guide de l’administrateur]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Lisez-moi\n* Notes de publication\n* Copie\n* Mise à jour", "config-env-good": "L’environnement a été vérifié.\nVous pouvez installer MediaWiki.", "config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.", "config-env-php": "PHP $1 est installé.", "config-env-hhvm": "HHVM $1 est installé.", - "config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l’extension PECL intl] pour la normalisation Unicode.", - "config-unicode-pure-php-warning": "Attention : L’[http://pecl.php.net/intl extension PECL intl] n’est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP seulement.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).", + "config-unicode-using-intl": "Utilisation de [https://pecl.php.net/intl l’extension PECL intl] pour la normalisation Unicode.", + "config-unicode-pure-php-warning": "Attention : L’[https://pecl.php.net/intl extension PECL intl] n’est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP seulement.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).", "config-unicode-update-warning": "Attention : la version installée du normalisateur Unicode utilise une ancienne version de la bibliothèque logicielle du [http://site.icu-project.org/ ''Projet ICU''].\nVous devriez faire une [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations mise à jour] si vous êtes concerné par l’usage d’Unicode.", "config-no-db": "Impossible de trouver un pilote de base de données approprié ! Vous devez installer un pilote de base de données pour PHP. {{PLURAL:$2|Le type suivant|Les types suivants}} de bases de données {{PLURAL:$2|est reconnu|sont reconnus}} : $1.\n\nSi vous avez compilé PHP vous-même, reconfigurez-le avec un client de base de données actif, par exemple en utilisant ./configure --with-mysqli. Si vous avez installé PHP depuis un paquet Debian ou Ubuntu, alors vous devrez aussi installer, par exemple, le paquet php5-mysql.", "config-outdated-sqlite": "Attention : vous avez SQLite $1, qui est inférieur à la version minimale requise $2. SQLite sera indisponible.", @@ -85,12 +85,11 @@ "config-pcre-no-utf8": "Erreur fatale : le module PCRE de PHP semble être compilé sans la prise en charge de PCRE_UTF8.\nMediaWiki a besoin de la gestion d’UTF-8 pour fonctionner correctement.", "config-memory-raised": "Le paramètre memory_limit de PHP était à $1, porté à $2.", "config-memory-bad": "Attention : Le paramètre memory_limit de PHP est à $1.\nCette valeur est probablement trop faible.\nIl est possible que l’installation échoue !", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] est installé", "config-apc": "[http://www.php.net/apc APC] est installé", "config-apcu": "[http://www.php.net/apcu APCu] est installé", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] est installé", - "config-no-cache-apcu": "Attention : impossible de trouver [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nLa mise en cache d’objets n’est pas activée.", - "config-mod-security": "Attention : votre serveur web a [http://modsecurity.org/ mod_security] activé. S’il est mal configuré, cela peut poser des problèmes à MediaWiki ou à d’autres applications qui permettent aux utilisateurs de publier un contenu quelconque. Si possible, ceci devrait être désactivé. Sinon, reportez-vous à [http://modsecurity.org/documentation/ la documentation de mod_security] ou contactez l’assistance de votre hébergeur si vous rencontrez des erreurs aléatoires.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] est installé", + "config-no-cache-apcu": "Attention : impossible de trouver [http://www.php.net/apcu APCu] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nLa mise en cache d’objets n’est pas activée.", + "config-mod-security": "Attention : votre serveur web a [https://modsecurity.org/ mod_security] activé. S’il est mal configuré, cela peut poser des problèmes à MediaWiki ou à d’autres applications qui permettent aux utilisateurs de publier un contenu quelconque. Si possible, ceci devrait être désactivé. Sinon, reportez-vous à [https://modsecurity.org/documentation/ la documentation de mod_security] ou contactez l’assistance de votre hébergeur si vous rencontrez des erreurs aléatoires.", "config-diff3-bad": "GNU diff3 introuvable.", "config-git": "Logiciel de contrôle de version Git trouvé : $1.", "config-git-bad": "Logiciel de contrôle de version Git non trouvé.", @@ -248,7 +247,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 ou ultérieure", "config-license-pd": "Domaine public", "config-license-cc-choose": "Sélectionner une licence Creative Commons personnalisée", - "config-license-help": "Beaucoup de wikis publics mettent l’ensemble des contributions sous une [http://freedomdefined.org/Definition/Fr licence libre].\nCela contribue à créer un sentiment d’appartenance à une communauté et encourage les contributions sur le long terme.\nCe n’est généralement pas nécessaire pour un wiki privé ou d’entreprise.\n\nSi vous souhaitez utiliser des textes de Wikipédia, et souhaitez que Wikipédia puisse réutiliser des textes copiés depuis votre wiki, vous devriez choisir {{int:config-license-cc-by-sa}}.\n\nWikipédia utilisait auparavant la Licence de Documentation Libre GNU (GFDL).\nC’est une licence valide, mais difficile à comprendre. \nIl est aussi difficile de réutiliser du contenu sous la licence GFDL.", + "config-license-help": "Beaucoup de wikis publics mettent l’ensemble des contributions sous une [https://freedomdefined.org/Definition/Fr licence libre].\nCela contribue à créer un sentiment d’appartenance à une communauté et encourage les contributions sur le long terme.\nCe n’est généralement pas nécessaire pour un wiki privé ou d’entreprise.\n\nSi vous souhaitez utiliser des textes de Wikipédia, et souhaitez que Wikipédia puisse réutiliser des textes copiés depuis votre wiki, vous devriez choisir {{int:config-license-cc-by-sa}}.\n\nWikipédia utilisait auparavant la Licence de Documentation Libre GNU (GFDL).\nC’est une licence valide, mais difficile à comprendre. \nIl est aussi difficile de réutiliser du contenu sous la licence GFDL.", "config-email-settings": "Paramètres de courriel", "config-enable-email": "Activer les courriels sortants", "config-enable-email-help": "Si vous souhaitez utiliser le courriel, vous devez [http://www.php.net/manual/en/mail.configuration.php configurer des paramètres PHP] (texte en anglais).\nSi vous ne voulez pas du service de courriel, vous pouvez le désactiver ici.", @@ -278,7 +277,7 @@ "config-cache-options": "Paramètres pour la mise en cache des objets:", "config-cache-help": "La mise en cache des objets améliore la vitesse de MediaWiki en mettant en cache les données fréquemment utilisées.\nLes sites de taille moyenne à grande sont fortement encouragés à l'activer. Les petits sites y verront également des avantages.", "config-cache-none": "Pas de mise en cache (aucune fonctionnalité n'a été supprimée, mais la vitesse peut changer sur les wikis importants)", - "config-cache-accel": "Mise en cache des objets PHP (APC, APCu, XCache ou WinCache)", + "config-cache-accel": "Mise en cache des objets PHP (APC, APCu ou WinCache)", "config-cache-memcached": "Utiliser Memcached (nécessite une installation et une configuration supplémentaires)", "config-memcached-servers": "serveurs pour Memcached :", "config-memcached-help": "Liste des adresses IP à utiliser pour Memcached.\nUne par ligne, en indiquant le port à utiliser. Par exemple :\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/frc.json b/includes/installer/i18n/frc.json index d07b2e9821..5eac7d390b 100644 --- a/includes/installer/i18n/frc.json +++ b/includes/installer/i18n/frc.json @@ -28,7 +28,7 @@ "config-restart": "Oui, le relancer", "config-env-php": "PHP $1 est installé.", "config-env-hhvm": "HHVM $1 est installé.", - "config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.", + "config-unicode-using-intl": "Utilisation de [https://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.", "config-diff3-bad": "GNU diff3 introuvable.", "config-db-username": "Nom d’useur de la base de données:", "config-db-password": "Mot de passe de la base de données:", diff --git a/includes/installer/i18n/frp.json b/includes/installer/i18n/frp.json index 5a2edf9c9a..7f943f2435 100644 --- a/includes/installer/i18n/frp.json +++ b/includes/installer/i18n/frp.json @@ -30,9 +30,8 @@ "config-page-existingwiki": "Vouiqui ègzistent", "config-env-php": "PHP $1 est enstalâ.", "config-memory-raised": "Lo paramètre memory_limit de PHP ére a $1, portâ a $2.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] est enstalâ", "config-apc": "[http://www.php.net/apc APC] est enstalâ", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] est enstalâ", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] est enstalâ", "config-diff3-bad": "GNU diff3 entrovâblo.", "config-db-type": "Tipo de bâsa de balyês :", "config-db-host": "Hôto de la bâsa de balyês :", diff --git a/includes/installer/i18n/gl.json b/includes/installer/i18n/gl.json index 08434f6af1..50b124e8d4 100644 --- a/includes/installer/i18n/gl.json +++ b/includes/installer/i18n/gl.json @@ -47,14 +47,14 @@ "config-help-restart": "Quere eliminar todos os datos gardados e reiniciar o proceso de instalación?", "config-restart": "Si, reiniciala", "config-welcome": "=== Comprobación da contorna ===\nCómpre realizar agora unhas comprobacións básicas para ver se a contorna é axeitada para a instalación de MediaWiki.\nLembre incluír esta información se necesita axuda para completar a instalación.", - "config-copyright": "=== Dereitos de autor e termos de uso ===\n\n$1\n\nEste programa é software libre; pode redistribuílo e/ou modificalo segundo os termos da licenza pública xeral GNU publicada pola Free Software Foundation; versión 2 ou (na súa escolla) calquera outra posterior.\n\nEste programa distribúese coa esperanza de que poida ser útil, pero sen garantía ningunha; nin sequera a garantía implícita de comercialización ou adecuación a unha finalidade específica.\nOlle a licenza pública xeral GNU para obter máis detalles.\n\nDebería recibir unha copia da licenza pública xeral GNU xunto ao programa; se non é así, escriba á Free Software Foundation, Inc., rúa Franklin, número 51, quinto andar, Boston, Massachusetts, 02110-1301, Estados Unidos de América ou [http://www.gnu.org/copyleft/gpl.html lea a licenza en liña].", + "config-copyright": "=== Dereitos de autor e termos de uso ===\n\n$1\n\nEste programa é software libre; pode redistribuílo e/ou modificalo segundo os termos da licenza pública xeral GNU publicada pola Free Software Foundation; versión 2 ou (na súa escolla) calquera outra posterior.\n\nEste programa distribúese coa esperanza de que poida ser útil, pero sen garantía ningunha; nin sequera a garantía implícita de comercialización ou adecuación a unha finalidade específica.\nOlle a licenza pública xeral GNU para obter máis detalles.\n\nDebería recibir unha copia da licenza pública xeral GNU xunto ao programa; se non é así, escriba á Free Software Foundation, Inc., rúa Franklin, número 51, quinto andar, Boston, Massachusetts, 02110-1301, Estados Unidos de América ou [https://www.gnu.org/copyleft/gpl.html lea a licenza en liña].", "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/gl Páxina principal de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía de usuario]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guía de administrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas máis frecuentes]\n----\n* Léame\n* Notas de lanzamento\n* Copia\n* Actualizacións", "config-env-good": "Rematou a comprobación da contorna.\nPode instalar MediaWiki.", "config-env-bad": "Rematou a comprobación da contorna.\nNon pode instalar MediaWiki.", "config-env-php": "Está instalado o PHP $1.", "config-env-hhvm": "Está instalado o HHVM $1.", - "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.", - "config-unicode-pure-php-warning": "Atención: A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á execución lenta de PHP puro.\nSe o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", + "config-unicode-using-intl": "Usando a [https://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.", + "config-unicode-pure-php-warning": "Atención: A [https://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á execución lenta de PHP puro.\nSe o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", "config-unicode-update-warning": "Atención: A versión instalada da envoltura de normalización Unicode emprega unha versión vella da biblioteca [http://site.icu-project.org/ do proxecto ICU].\nDebería [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] se o uso de Unicode é importante para vostede.", "config-no-db": "Non se puido atopar un controlador axeitado para a base de datos! Necesita instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|Acéptase o seguinte tipo|Acéptanse os seguintes tipos}} de base de datos: $1.\n\nSe compilou o PHP vostede mesmo, reconfigúreo activando un cliente de base de datos, por exemplo, usando ./configure --with-mysqli.\nSe instalou o PHP desde un paquete Debian ou Ubuntu, entón tamén necesita instalar, por exemplo, o módulo php5-mysql.", "config-outdated-sqlite": "Atención: Ten o SQLite $1, que é inferior á versión mínima necesaria: $2. O SQLite non estará dispoñible.", @@ -63,12 +63,11 @@ "config-pcre-no-utf8": "Erro fatal: Semella que o módulo PCRE do PHP foi compilado sen o soporte PCRE_UTF8.\nMediaWiki necesita soporte UTF-8 para funcionar correctamente.", "config-memory-raised": "O parámetro memory_limit do PHP é $1. Aumentado a $2.", "config-memory-bad": "Atención: O parámetro memory_limit do PHP é $1.\nProbablemente é un valor baixo de máis.\nA instalación pode fallar!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado", "config-apc": "[http://www.php.net/apc APC] está instalado", "config-apcu": "[http://www.php.net/apcu APCu] está instalado", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] está instalado", "config-no-cache-apcu": "Advertencia: Non se puido atopar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nA caché de obxectos non está activada.", - "config-mod-security": "Atención: O seu servidor web ten o [http://modsecurity.org/ mod_security] activado. Se estivese mal configurado, pode causar problemas a MediaWiki ou calquera outro software que permita aos usuarios publicar contidos arbitrarios.\nOlle a [http://modsecurity.org/documentation/ documentación do mod_security] ou póñase en contacto co soporte do seu servidor se atopa erros aleatorios.", + "config-mod-security": "Atención: O seu servidor web ten o [https://modsecurity.org/ mod_security] activado. Se estivese mal configurado, pode causar problemas a MediaWiki ou calquera outro software que permita aos usuarios publicar contidos arbitrarios.\nOlle a [https://modsecurity.org/documentation/ documentación do mod_security] ou póñase en contacto co soporte do seu servidor se atopa erros aleatorios.", "config-diff3-bad": "GNU diff3 non se atopou.", "config-git": "Atopouse o software de control da versión de Git: $1.", "config-git-bad": "Non se atopou o software de control da versión de Git.", @@ -226,7 +225,7 @@ "config-license-gfdl": "Licenza de documentación libre de GNU 1.3 ou posterior", "config-license-pd": "Dominio público", "config-license-cc-choose": "Seleccione unha licenza Creative Commons personalizada", - "config-license-help": "Moitos wikis públicos liberan todas as súas contribucións baixo unha [http://freedomdefined.org/Definition/Gl licenza libre].\nIsto axuda a crear un sentido de propiedade comunitaria e anima a seguir contribuíndo durante moito tempo.\nXeralmente, non é necesario nos wikis privados ou de empresas.\n\nSe quere poder empregar textos da Wikipedia, así como que a Wikipedia poida aceptar textos copiados do seu wiki, escolla a licenza {{int:config-license-cc-by-sa}}.\n\nA licenza de documentación libre de GNU era a licenza anterior da Wikipedia.\nMalia aínda ser unha licenza válida, é difícil de entender.\nTamén é difícil reusar contidos baixo esta licenza.", + "config-license-help": "Moitos wikis públicos liberan todas as súas contribucións baixo unha [https://freedomdefined.org/Definition/Gl licenza libre].\nIsto axuda a crear un sentido de propiedade comunitaria e anima a seguir contribuíndo durante moito tempo.\nXeralmente, non é necesario nos wikis privados ou de empresas.\n\nSe quere poder empregar textos da Wikipedia, así como que a Wikipedia poida aceptar textos copiados do seu wiki, escolla a licenza {{int:config-license-cc-by-sa}}.\n\nA licenza de documentación libre de GNU era a licenza anterior da Wikipedia.\nMalia aínda ser unha licenza válida, é difícil de entender.\nTamén é difícil reusar contidos baixo esta licenza.", "config-email-settings": "Configuración do correo electrónico", "config-enable-email": "Activar os correos electrónicos de saída", "config-enable-email-help": "Se quere que o correo electrónico funcione, cómpre configurar os [http://www.php.net/manual/en/mail.configuration.php parámetros PHP] correctamente.\nSe non quere ningunha característica no correo, pode desactivalas aquí.", diff --git a/includes/installer/i18n/gsw.json b/includes/installer/i18n/gsw.json index 73331d976a..44f5eb2b75 100644 --- a/includes/installer/i18n/gsw.json +++ b/includes/installer/i18n/gsw.json @@ -36,22 +36,21 @@ "config-help-restart": "Witt alli Date, wu Du yygee hesch, lesche un d Inschtallation nomol aafange?", "config-restart": "Jo, nomol aafange", "config-welcome": "=== Priefig vu dr Inschtallationsumgäbig ===\nBasispriefige wäre durgfiert zum Feschtstelle, eb d Inschtallationsumgäbig fir d Inschtallation vu MediaWiki geignet isch.\nDu sottsch d Ergebnis vu däre Priefig aagee, wänn Du bi dr Inschtallation Hilf bruchsch.", - "config-copyright": "=== Copyright un Nutzigsbedingige ===\n\n$1\n\nDes Programm isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre.\n\nDes Programm wird in dr Hoffnig verteilt, ass es nitzli isch, aber '''ohni jedi Garanti''' un sogar ohni di impliziert Garanti vun ere '''Märtgängigkeit''' oder '''Eignig fir e bstimmte Zwäck'''. Doderzue git meh Hiiwys in dr GNU General Public-Lizänz.\n\nE Kopi vu dr GNU General Public-Lizänz sott zämme mit däm Programm verteilt wore syy. Wänn des nit eso isch, cha ne Kopi bi dr Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftli aagforderet oder [http://www.gnu.org/copyleft/gpl.html online gläse] wäre.", + "config-copyright": "=== Copyright un Nutzigsbedingige ===\n\n$1\n\nDes Programm isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre.\n\nDes Programm wird in dr Hoffnig verteilt, ass es nitzli isch, aber '''ohni jedi Garanti''' un sogar ohni di impliziert Garanti vun ere '''Märtgängigkeit''' oder '''Eignig fir e bstimmte Zwäck'''. Doderzue git meh Hiiwys in dr GNU General Public-Lizänz.\n\nE Kopi vu dr GNU General Public-Lizänz sott zämme mit däm Programm verteilt wore syy. Wänn des nit eso isch, cha ne Kopi bi dr Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftli aagforderet oder [https://www.gnu.org/copyleft/gpl.html online gläse] wäre.", "config-sidebar": "* [https://www.mediawiki.org MediaWiki Websyte vu MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Nutzeraaleitig zue MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Adminischtratoreaaleitig zue MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Vilmol gstellti Froge zue MediaWiki]", "config-env-good": "D Inschtallationsumgäbig isch prieft wore.\nDu chasch MediaWiki inschtalliere.", "config-env-bad": "D Inschtallationsumgäbigisch prieft wore.\nDu chasch MediaWiki nit inschtalliere.", "config-env-php": "PHP $1 isch inschtalliert.", - "config-unicode-using-intl": "For d Unicode-Normalisierig wird d [http://pecl.php.net/intl PECL-Erwyterig intl] yygsetzt.", - "config-unicode-pure-php-warning": "'''Warnig:''' D [http://pecl.php.net/intl PECL-Erwyterig intl] isch fir d Unicode-Normalisierig nit verfiegbar. Wäge däm wird di langsam pure-PHP-Implementierig brucht.\nWänn Du ne Websyte mit ere große Bsuechrzahl bedrybsch, sottsch e weng ebis läse iber [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierig (en)].", + "config-unicode-using-intl": "For d Unicode-Normalisierig wird d [https://pecl.php.net/intl PECL-Erwyterig intl] yygsetzt.", + "config-unicode-pure-php-warning": "'''Warnig:''' D [https://pecl.php.net/intl PECL-Erwyterig intl] isch fir d Unicode-Normalisierig nit verfiegbar. Wäge däm wird di langsam pure-PHP-Implementierig brucht.\nWänn Du ne Websyte mit ere große Bsuechrzahl bedrybsch, sottsch e weng ebis läse iber [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierig (en)].", "config-unicode-update-warning": "'''Warnig:''' Di inschtalliert Version vum Unicode-Normalisierigswrapper verwändet e elteri Version vu dr Bibliothek vum [http://site.icu-project.org/ ICU-Projäkt].\nDu sottsch si [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aktualisiere], wänn Dor d Verwändig vu Unicode wichtig isch.", "config-no-db": "S isch kei adäquate Datebanktryyber gfunde wore!", "config-no-fts3": "'''Warnig:''' SQLite isch ohni s [//sqlite.org/fts3.html FTS3-Modul] kumpiliert wore, s stehn kei Suechfunktione z Verfiegig.", "config-pcre-no-utf8": "'''Fatale Fähler: S PHP-Modul PCRE isch schyns ohni PCRE_UTF8-Unterstitzig kompiliert wore.'''\nMediaWiki brucht d UTF-8-Unterstitzi zum fählerfrej lauffähig syy.", "config-memory-raised": "Dr PHP-Parameter memory_limit lyt bi $1 un isch uf $2 uffegsetzt wore.", "config-memory-bad": "'''Warnig:''' Dr PHP-Parameter memory_limit lyt bi $1.\nDää Wärt isch wahrschyns z nider.\nDr Inschtallationsvorgang chennt wäge däm fählschlaa!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] isch inschtalliert", "config-apc": "[http://www.php.net/apc APC] isch inschtalliert", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] isch inschtalliert", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] isch inschtalliert", "config-diff3-bad": "GNU diff3 isch nit gfunde wore.", "config-imagemagick": "ImageMagick isch gfunde wore: $1.\nMiniaturaasichte vu Bilder sin megli, sobald s Uffelade vu Dateie aktiviert isch.", "config-help": "Hilf", diff --git a/includes/installer/i18n/he.json b/includes/installer/i18n/he.json index 7583455207..ec3c782272 100644 --- a/includes/installer/i18n/he.json +++ b/includes/installer/i18n/he.json @@ -50,14 +50,14 @@ "config-help-restart": "האם ברצונך לנקות את כל הנתונים שהזנת ולהתחיל מחדש את תהליך ההתקנה?", "config-restart": "כן, להפעיל מחדש", "config-welcome": "=== בדיקות סביבה ===\nבדיקות בסיסיות תתבצענה עכשיו כדי לראות אם הסביבה הזאת מתאימה להתקנת מדיה־ויקי.\nנא לזכור לכלול את המידע הזה בעת בקשת תמיכה עם השלמת ההתקנה.", - "config-copyright": "=== זכויות יוצרים ותנאים ===\n\n$1\n\nתכנית זו היא תכנה חופשית; באפשרותך להפיצה מחדש ו/או לשנות אותה על פי תנאי הרישיון הציבורי הכללי של GNU כפי שפורסם על ידי קרן התכנה החופשית; בין אם גרסה 2 של הרישיון, ובין אם (לפי בחירתך) כל גרסה מאוחרת שלו.\n\nתכנית זו מופצת בתקווה שתהיה מועילה, אבל '''בלא אחריות כלשהי'''; ואפילו ללא האחריות המשתמעת בדבר '''מסחריותה''' או '''התאמתה למטרה '''מסוימת'''. לפרטים נוספים, ניתן לעיין ברישיון הציבורי הכללי של GNU.\n\nלתכנית זו אמור היה להיות מצורף עותק של הרישיון הציבורי הכללי של GNU; אם לא קיבלת אותו, אפשר לכתוב ל־Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA או [http://www.gnu.org/copyleft/gpl.html לקרוא אותו דרך האינטרנט].", + "config-copyright": "=== זכויות יוצרים ותנאים ===\n\n$1\n\nתכנית זו היא תכנה חופשית; באפשרותך להפיצה מחדש ו/או לשנות אותה על פי תנאי הרישיון הציבורי הכללי של GNU כפי שפורסם על ידי קרן התכנה החופשית; בין אם גרסה 2 של הרישיון, ובין אם (לפי בחירתך) כל גרסה מאוחרת שלו.\n\nתכנית זו מופצת בתקווה שתהיה מועילה, אבל '''בלא אחריות כלשהי'''; ואפילו ללא האחריות המשתמעת בדבר '''מסחריותה''' או '''התאמתה למטרה '''מסוימת'''. לפרטים נוספים, ניתן לעיין ברישיון הציבורי הכללי של GNU.\n\nלתכנית זו אמור היה להיות מצורף עותק של הרישיון הציבורי הכללי של GNU; אם לא קיבלת אותו, אפשר לכתוב ל־Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA או [https://www.gnu.org/copyleft/gpl.html לקרוא אותו דרך האינטרנט].", "config-sidebar": "* [https://www.mediawiki.org אתר הבית של מדיה־ויקי]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents המדריך למשתמש]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents המדריך למנהל]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ שו״ת]\n----\n* קרא אותי\n* הערות גרסה\n* העתקה\n* שדרוג", "config-env-good": "הסביבה שלכם נבדקה.\nאפשר להתקין מדיה־ויקי.", "config-env-bad": "הסביבה שלכם נבדקה.\nאי־אפשר להתקין מדיה־ויקי.", "config-env-php": "מותקנת PHP $1.", "config-env-hhvm": "מותקנת HHVM $1.", - "config-unicode-using-intl": "משתמש ב[http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.", - "config-unicode-pure-php-warning": "אזהרה: [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].", + "config-unicode-using-intl": "משתמש ב[https://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.", + "config-unicode-pure-php-warning": "אזהרה: [https://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].", "config-unicode-update-warning": "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].\nכדאי [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations לעדכן] אם הטיפול ביוניקוד חשוב לך.", "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\n{{PLURAL:$2|נתמך הסוג הבא של מסד נתונים|נתמכים הסוגים הבאים של מסדי נתונים}}: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות ./configure --with-mysqli.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול php5-mysql.", "config-outdated-sqlite": "'''אזהרה''': במערכת מתוקן SQLite $1. גרסה זו לא נתמכת ולשימוש ב־SQLite נדרשת גרסה $2 לפחות. SQLlite לא יהיה זמין.", @@ -66,12 +66,11 @@ "config-pcre-no-utf8": "שגיאה סופנית: נראה שמודול PCRE של PHP מהודר ללא תמיכה ב־PCRE_UTF8.\nמדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.", "config-memory-raised": "ערך האפשרות memory_limit של PHP הוא $1, הועלה ל־$2.", "config-memory-bad": "'''אזהרה:''' ערך האפשרות memory_limit של PHP הוא $1.\nזה כנראה נמוך מדי.\nההתקנה עשויה להיכשל!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] מותקן", "config-apc": "[http://www.php.net/apc APC] מותקן", "config-apcu": "[http://www.php.net/apcu APCu] מותקן", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] מותקן", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] מותקן", "config-no-cache-apcu": "אזהרה: לא נמצא [http://www.php.net/apcu APCu]‏, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].\nמטמון עצמים לא מופעל.", - "config-mod-security": "'''אזהרה''': בשרת הווב שלך מופעל [http://modsecurity.org/ mod_security]. אם הוא לא מוגדר טוב, זה יכול לגרום לבעיות במדיה־ויקי ובתכנה אחרת שמאפשרת למשתמשים לשלוח תוכן שרירותי.\nיש לקרוא את [http://modsecurity.org/documentation/ התיעוד של mod_security] או ליצור קשר עם אנשי התמיכה של שירותי האירוח שלכם אם מופיעות לך שגיאות אקראיות.", + "config-mod-security": "'''אזהרה''': בשרת הווב שלך מופעל [https://modsecurity.org/ mod_security]. אם הוא לא מוגדר טוב, זה יכול לגרום לבעיות במדיה־ויקי ובתכנה אחרת שמאפשרת למשתמשים לשלוח תוכן שרירותי.\nיש לקרוא את [https://modsecurity.org/documentation/ התיעוד של mod_security] או ליצור קשר עם אנשי התמיכה של שירותי האירוח שלכם אם מופיעות לך שגיאות אקראיות.", "config-diff3-bad": "GNU diff3 לא נמצא.", "config-git": "נמצאה Git, תכנת בקרת התצורה: $1.", "config-git-bad": "תכנת בקרת התצורה Git לא נמצאה.", @@ -226,7 +225,7 @@ "config-license-gfdl": "רישיון חופשי למסמכים של גנו גרסה 1.3 או חדשה יותר", "config-license-pd": "נחלת הכלל", "config-license-cc-choose": "בחירת רישיון קריאייטיב קומונז מותאם אישית", - "config-license-help": "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות [http://freedomdefined.org/Definition ברישיון חופשי].\nזה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן.\nזה בדרך כלל לא נחוץ לאתר ויקי פרטי או אתר של חברה מסחרית.\n\nאם האפשרות להשתמש בטקסט מוויקיפדיה והאפשרות שוויקיפדיה תוכל תקבל עותקים של טקסטים מהוויקי שלך חשובות לך, כדאי לבחור ב{{int:config-license-cc-by-sa}}.\n\nויקיפדיה השתמשה בעבר ברישיון החופשי למסמכים של גנו (GNU FDL או GFDL).\nהוא עדיין רישיון תקין, אבל קשה להבנה.\nכמו־כן, קשה לעשות שימוש חוזר ביצירות שפורסמו לפי GFDL.", + "config-license-help": "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות [https://freedomdefined.org/Definition ברישיון חופשי].\nזה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן.\nזה בדרך כלל לא נחוץ לאתר ויקי פרטי או אתר של חברה מסחרית.\n\nאם האפשרות להשתמש בטקסט מוויקיפדיה והאפשרות שוויקיפדיה תוכל תקבל עותקים של טקסטים מהוויקי שלך חשובות לך, כדאי לבחור ב{{int:config-license-cc-by-sa}}.\n\nויקיפדיה השתמשה בעבר ברישיון החופשי למסמכים של גנו (GNU FDL או GFDL).\nהוא עדיין רישיון תקין, אבל קשה להבנה.\nכמו־כן, קשה לעשות שימוש חוזר ביצירות שפורסמו לפי GFDL.", "config-email-settings": "הגדרות דוא״ל", "config-enable-email": "להפעיל דוא״ל יוצא", "config-enable-email-help": "אם אתם רוצים שדוא״ל יעבוד, [http://www.php.net/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון.\nאם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.", @@ -312,6 +311,7 @@ "config-install-mainpage-failed": "לא הצליחה הכנסת דף ראשי: $1.", "config-install-done": "מזל טוב!\nהתקנת את תוכנת מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלך.\n\nיש להוריד אותו ולהכניס אותו לתיקיית הבסיס שבה הותקן הוויקי שלך (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלת אותה, אפשר להתחיל אותה מחדש באמצעות לחיצה על הקישור הבא:\n\n$3\n\nלתשומת לבך: אם ההורדה לא תבוצע כעת, קובץ ההגדרות לא יהיה זמין מאוחר יותר אם תוכנת ההתקנה תיסגר לפני שהקובץ יורד.\n\nלאחר שביצעת את הפעולות שלהלן, באפשרותך [$2 להיכנס לאתר הוויקי שלך].", "config-install-done-path": "מזל טוב!\nהתקנת את תוכנת מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלך.\n\nיש להוריד אותו ולהכניס אותו לתיקייה $4. ההורדה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלת אותה, אפשר להתחיל אותה מחדש באמצעות לחיצה על הקישור הבא:\n\n$3\n\nלתשומת לבך: אם ההורדה לא תבוצע כעת, קובץ ההגדרות לא יהיה זמין מאוחר יותר אם תוכנת ההתקנה תיסגר לפני שהקובץ יורד.\n\nלאחר שביצעת את הפעולות שלהלן, באפשרותך [$2 להיכנס לאתר הוויקי שלך].", + "config-install-success": "מדיה־ויקי הותקנה בהצלחה. עכשיו אפשר\nלבקר בכתובת <$1$2> כדי לצפות בוויקי שלך.\nאם יש לך שאלות, ר' את רשימת השאלות הנפוצות שלנו:\n ואפשר גם להשתמש\nבאתרי התמיכה שקישורים אליהם מופיעים באותו הדף.", "config-download-localsettings": "הורדת LocalSettings.php", "config-help": "עזרה", "config-help-tooltip": "להרחיב", diff --git a/includes/installer/i18n/hi.json b/includes/installer/i18n/hi.json index 9863beb1a0..5e9e1e20ac 100644 --- a/includes/installer/i18n/hi.json +++ b/includes/installer/i18n/hi.json @@ -47,10 +47,9 @@ "config-env-php": "PHP $1 स्थापित किया गया है।", "config-env-hhvm": "एचएचवीएम $1 स्थापित किया गया है।", "config-memory-raised": "पीएचपी की memory_limit सीमा $1 है, जो $2 तक बढ़ गई है।", - "config-xcache": "[http://xcache.lighttpd.net/ एक्सकैश] स्थापित है।", "config-apc": "[http://www.php.net/apc एपीसी] स्थापित है।", "config-apcu": "[http://www.php.net/apcu एपीसीयू] स्थापित है।", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp विनकैश] स्थापित है।", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp विनकैश] स्थापित है।", "config-using-32bit": "<विशेष>चेतावनी: आपका सिस्टम 32-बिट पूर्णांक के साथ चल रहा है यह [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit विवेचित नहीं है]।", "config-db-type": "डेटाबेस प्रकार:", "config-db-host": "डेटाबेस होस्ट:", diff --git a/includes/installer/i18n/hrx.json b/includes/installer/i18n/hrx.json index 6bee175d79..343f50b9b7 100644 --- a/includes/installer/i18n/hrx.json +++ b/includes/installer/i18n/hrx.json @@ -42,13 +42,13 @@ "config-help-restart": "Solle all bereits ingebne Daten gelöscht und der Installationsvoargang erneit oogefäng sin?", "config-restart": "Jo, erneit oonfänge", "config-welcome": "=== Prüfung von die Installationsumgebung ===\nDie Basisprüfunge were jetzt doorrichgefüahrt, um festzustelle, ob die Installationsumgebung für MediaWiki geeichnet ist.\nNotier die Informatione und geb se an, sofern du Hellf beim Installiere benötichst.", - "config-copyright": "=== Lizenz und Nutzungsbedingunge ===\n\n$1\n\nDas Programm ist freie Software, d. h. es kann, gemäss den Bedingunge der von der Free Software Foundation veröffentlichte ''GNU General Public License'', weiterverteilt und/oder modifiziert sin. Dabei kann die Version 2, orrer noh eichnem Ermess, jede neuire Version von der Lizenz verwennet sin.\n\nDas Programm weard in der Hoffnung verteilt, dass das nützlich sein weard, dennoch '''ohne jechliche Garantie''' und sogoor ohne die implizierte Garantie von ener '''Marrektgängigkeit''' orrer '''Eichnung für en bestimmte Zweck'''. Hierzu sind weitre Hinweise in der ''GNU General Public License'' enthalt.\n\nEn Kopie von der GNU General Public License sollt zusammer mit dem Programm verteilt woard sin. Sofern das net der Fall woar, kann en Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich verlangt sin orrer uff ehre Website [http://www.gnu.org/copyleft/gpl.html online gelesen] sin.", + "config-copyright": "=== Lizenz und Nutzungsbedingunge ===\n\n$1\n\nDas Programm ist freie Software, d. h. es kann, gemäss den Bedingunge der von der Free Software Foundation veröffentlichte ''GNU General Public License'', weiterverteilt und/oder modifiziert sin. Dabei kann die Version 2, orrer noh eichnem Ermess, jede neuire Version von der Lizenz verwennet sin.\n\nDas Programm weard in der Hoffnung verteilt, dass das nützlich sein weard, dennoch '''ohne jechliche Garantie''' und sogoor ohne die implizierte Garantie von ener '''Marrektgängigkeit''' orrer '''Eichnung für en bestimmte Zweck'''. Hierzu sind weitre Hinweise in der ''GNU General Public License'' enthalt.\n\nEn Kopie von der GNU General Public License sollt zusammer mit dem Programm verteilt woard sin. Sofern das net der Fall woar, kann en Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich verlangt sin orrer uff ehre Website [https://www.gnu.org/copyleft/gpl.html online gelesen] sin.", "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzeroonleitung]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratorenoonleitung]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häifig gestellte Frache]\n----\n* Lies mich\n* Versionsinformatione\n* Lizenzbestimmunge\n* Aktualisierung", "config-env-good": "Die Installationsumgebung woard geprüft.\nMediaWiki kann installiert sin.", "config-env-bad": "Die Installationsumgebung woard geprüft.\nMediaWiki kann net installiert sin.", "config-env-php": "Die Skriptsproch „PHP“ ($1) ist installiert.", - "config-unicode-using-intl": "Zur Unicode-Normalisierung weard die [http://pecl.php.net/intl PECL-Erweiterung intl] ingesetzt.", - "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung net verfüchbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt weard.\nSofern en Webseit mit grosser Benutzeranzoohl betrieb weard, sollte weitre Informatione uff der Webseite [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] geles sin.", + "config-unicode-using-intl": "Zur Unicode-Normalisierung weard die [https://pecl.php.net/intl PECL-Erweiterung intl] ingesetzt.", + "config-unicode-pure-php-warning": "'''Warnung:''' Die [https://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung net verfüchbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt weard.\nSofern en Webseit mit grosser Benutzeranzoohl betrieb weard, sollte weitre Informatione uff der Webseite [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] geles sin.", "config-unicode-update-warning": "'''Warnung:''' Die installierte Version von der Unicode-Normalisierungswrappers nutzt en ältre Version von der [http://site.icu-project.org/ ICU-Projekts] sein Bibliothek.\nDie sollte [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aktualisiert] sin, sofern uff die Verwennung von Unicode Wert geleht weard.", "config-no-db": "Es konnt ken adäquater Datenbanktreiwer gefund sin. Es muss doher en Datenbanktreiwer für PHP installiert sin.\nDie folchende Datebanksysteme werre unnerstützt: $1\n\nWenn du PHP sellebst kompiliert host, konfigurier es erneit mit en aktiviert Datebankclient, zum Beispiel dorrich Verwennung von ./configure --with-mysqli.\nWenn du PHP von en Debian- orrer Ubuntu-Paket installiert host, dann musst du ooch beispielsweis das php5-mysql-Paket installiere.", "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ist installiert. Allerdings benöticht MediaWiki SQLite $2 orrer höcher. SQLite weard doher net verfüchbar sin.", @@ -57,10 +57,9 @@ "config-pcre-no-utf8": "'''Fataler Fehler:''' Das PHP-Modul PCRE scheint ohne PCRE_UTF8-Unterstützung kompiliert worre sin.\nMediaWiki benöticht die UTF-8-Unnerstützung, um fehlerfrei looffähich zu sin.", "config-memory-raised": "Der PHP-Parameter memory_limit betruch $1 und woard uff $2 erhöcht.", "config-memory-bad": "'''Warnung:''' Der PHP-Parameter memory_limit beträcht $1.\nDer Weart ist wahrscheinlich zu niedrich.\nDer Installationsvoargang könnt doher scheitre!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] ist installiert", "config-apc": "[http://www.php.net/apc APC] ist installiert", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert", - "config-mod-security": "'''Warnung:''' Uff dem Webserver woard [http://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann das zu Probleme mit MediaWiki sowie annrer Software uff dem Server führe und es Benutzer ermöchliche beliebiche Inhalte im Wiki Renzustelle.\nFür weitre Informatione empfehle mir die [http://modsecurity.org/documentation/ Dokumentation zu ModSecurity] orrer den Kontakt zum Hoster, sofern Fehler ufftrete.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] ist installiert", + "config-mod-security": "'''Warnung:''' Uff dem Webserver woard [https://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann das zu Probleme mit MediaWiki sowie annrer Software uff dem Server führe und es Benutzer ermöchliche beliebiche Inhalte im Wiki Renzustelle.\nFür weitre Informatione empfehle mir die [https://modsecurity.org/documentation/ Dokumentation zu ModSecurity] orrer den Kontakt zum Hoster, sofern Fehler ufftrete.", "config-diff3-bad": "GNU diff3 woard net gefund.", "config-git": "Die Versionsverwaltungssoftware „Git“ woard gefund: $1.", "config-git-bad": "Die Versionsverwaltungssoftware „Git“ woard net gefund.", @@ -212,7 +211,7 @@ "config-license-gfdl": "GNU-Lizenz für freie Dokumentation 1.3 orrer höcher", "config-license-pd": "Gemeinfreiheit", "config-license-cc-choose": "En benutzerdefiniert Creative-Commons-Lizenz auswähle", - "config-license-help": "Viele öffentliche Wikis publiziere all Beiträche unner en [http://freedomdefined.org/Definition/De freie Lizenz].\nDas träht dozu bei en Gefühl von Gemeinschaft zu schaffe und ermuticht zu längerfristicher Mitoorweit.\nDahinchege ist im Allgemeinen en freie Lizenz uff geschlossne Wikis net notwennich.\n\nSoweit man Texte aus der Wikipedia verwenne möcht und umgekehrt, sollt die Creative Commons-Lizenz \"Noomenennung, Weitergäb unner gleiche Bedingunge\" gewählt sin.\n\nDie Wikipedia nutzte voarmols die GNU-Lizenz für freie Dokumentation (GFDL).\nDie GFDL ist en gültiche Lizenz, wo awer schwear zu verstehn ist.\nEs ist zudem schwierich gemäss die Lizenz lizenziert Inhalte wiederzuverwenne.", + "config-license-help": "Viele öffentliche Wikis publiziere all Beiträche unner en [https://freedomdefined.org/Definition/De freie Lizenz].\nDas träht dozu bei en Gefühl von Gemeinschaft zu schaffe und ermuticht zu längerfristicher Mitoorweit.\nDahinchege ist im Allgemeinen en freie Lizenz uff geschlossne Wikis net notwennich.\n\nSoweit man Texte aus der Wikipedia verwenne möcht und umgekehrt, sollt die Creative Commons-Lizenz \"Noomenennung, Weitergäb unner gleiche Bedingunge\" gewählt sin.\n\nDie Wikipedia nutzte voarmols die GNU-Lizenz für freie Dokumentation (GFDL).\nDie GFDL ist en gültiche Lizenz, wo awer schwear zu verstehn ist.\nEs ist zudem schwierich gemäss die Lizenz lizenziert Inhalte wiederzuverwenne.", "config-email-settings": "E-Mail-Instellunge", "config-enable-email": "Ausgehende E-Mails ermöchliche", "config-enable-email-help": "Soweit die E-Mail-Funktione benutzt sin solle, müsse die entsprechende [http://www.php.net/manual/en/mail.configuration.php PHP-E-Mail-Einstellungen] richtich konfiguriert sin.\nFür den Fall, dass die E-Mail-Funktione net benöticht sin, könne die dohier deaktiviert sin.", diff --git a/includes/installer/i18n/hsb.json b/includes/installer/i18n/hsb.json index e875961adb..1544d21004 100644 --- a/includes/installer/i18n/hsb.json +++ b/includes/installer/i18n/hsb.json @@ -46,16 +46,15 @@ "config-env-good": "Wokolina je so skontrolowała.\nMóžeÅ¡ MediaWiki instalować.", "config-env-bad": "Wokolina je so skontrolowała.\nNjemóžeÅ¡ MediaWiki instalować.", "config-env-php": "PHP $1 je instalowany.", - "config-unicode-using-intl": "Za normalizaciju Unicode so [http://pecl.php.net/intl PECL-rozšěrjenje intl] wužiwa.", + "config-unicode-using-intl": "Za normalizaciju Unicode so [https://pecl.php.net/intl PECL-rozšěrjenje intl] wužiwa.", "config-no-db": "Njeda so přihódny ćěrjak datoweje banki namakać! DyrbiÅ¡ ćěrjak datoweje banki za PHP instalować.\nSlědowace typy datoweje banki so podpěruja: $1.\n\nJeli sy PHP sam kompilował, konfiguruj jón znowa z aktiwizowanym programom datoweje banki, na přikład z pomocu ./configure --with-mysqli.\nJeli sy PHP z Debianoweho abo Ubuntuoweho paketa instalował, dyrbiÅ¡ tež paket php5-mysql instalować.", "config-outdated-sqlite": "'''Warnowanje''': maÅ¡ SQLite $1, kotryž je starÅ¡i hač minimalna trěbna wersija $2. SQLite njebudźe k dispoziciji stać.", "config-no-fts3": "'''Warnowanje''': SQLite je so bjez [//sqlite.org/fts3.html FTS3-modula] kompilował, pytanske funkcije njebudu k dispoziciji stać.", "config-pcre-no-utf8": "'''Ćežki zmylk''': Zda so, zo PCRE-modul za PHP ma so bjez PCRE_UTF8-podpěry kompilować.\nMediaWiki trjeba UTF-8-podpěru, zo by korektnje fungował.", "config-memory-raised": "PHP-parameter memory_limit je $1, je so na hódnotu $2 zwyÅ¡ił.", "config-memory-bad": "'''Warnowanje:''' PHP-parameter memory_limit ma hódnotu $1,\nTo je najskerje přeniske.\nInstalacija móhła so njeporadźić!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] je instalowany", "config-apc": "[http://www.php.net/apc APC] je instalowany", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je instalowany", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] je instalowany", "config-diff3-bad": "GNU diff3 njenamakany.", "config-no-uri": "'''Zmylk:''' Aktualny URI njeda so postajić.\nInstalacija bu přetorhnjena.", "config-no-cli-uri": "'''Warnowanje''': Žana skriptowa šćežka (--scriptpath) podata, standard so wužiwa: $1.", diff --git a/includes/installer/i18n/hu-formal.json b/includes/installer/i18n/hu-formal.json index 882a084daf..f6c1663e13 100644 --- a/includes/installer/i18n/hu-formal.json +++ b/includes/installer/i18n/hu-formal.json @@ -14,7 +14,7 @@ "config-page-welcome": "Üdvözli a MediaWiki!", "config-help-restart": "Szeretné törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?", "config-welcome": "=== Környezet ellenőrzése ===\nAlapvető ellenőrzés, ami megmondja, hogy a környezet alkalmas-e a MediaWiki számára.\nHa probléma merülne fel a telepítés során, meg kell adnia mások számára az alább megjelenő információkat.", - "config-unicode-pure-php-warning": "Figyelmeztetés: Az [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el Unicode normalizáláshoz, helyette a lassú, PHP alapú implementáció lesz használva.\nHa nagy látogatottságú oldalt üzemeltet, itt találhat információkat [http://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations a témáról].", + "config-unicode-pure-php-warning": "Figyelmeztetés: Az [https://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el Unicode normalizáláshoz, helyette a lassú, PHP alapú implementáció lesz használva.\nHa nagy látogatottságú oldalt üzemeltet, itt találhat információkat [http://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations a témáról].", "config-imagemagick": "Az ImageMagick megtalálható a rendszeren: $1.\nA bélyegképek készítése engedélyezve lesz, ha engedélyezi a feltöltéseket.", "config-db-name-help": "Válassza ki a wikije azonosítására használt nevet.\nNem tartalmazhat szóközt.\n\nHa megosztott webtárhelyet használ, a szolgáltatója vagy egy konkrét adatbázisnevet ad önnek használatra, vagy létrehozhat egyet a vezérlőpulton keresztül.", "config-db-install-help": "Adja meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.", diff --git a/includes/installer/i18n/hu.json b/includes/installer/i18n/hu.json index da7ff87f43..9f5e286207 100644 --- a/includes/installer/i18n/hu.json +++ b/includes/installer/i18n/hu.json @@ -12,14 +12,15 @@ "Máté", "Seb35", "Urbalazs", - "MeskoBalazs" + "MeskoBalazs", + "Bencemac" ] }, "config-desc": "A MediaWiki telepítője", "config-title": "A MediaWiki $1 telepítése", "config-information": "Információ", - "config-localsettings-upgrade": "Már létezik a LocalSettings.php fájl.\nA telepített szoftver frissítéséhez írd be az alábbi mezőbe a $wgUpgradeKey beállítás értékét, melyet a LocalSettings.php nevű fájlban találhatsz meg.", - "config-localsettings-cli-upgrade": "A LocalSettings.php fájl megtalálható.\nA telepített rendszer frissítéséhez futtasd az update.php-t.", + "config-localsettings-upgrade": "Már létezik a LocalSettings.php fájl.\nA telepített szoftver frissítéséhez írd be az alábbi mezőbe a $wgUpgradeKey beállítás értékét, melyet a LocalSettings.php-ban találhatsz meg.", + "config-localsettings-cli-upgrade": "Már létezik a LocalSettings.php fájl.\nA telepített rendszer frissítéséhez futtasd az update.php-t.", "config-localsettings-key": "Frissítési kulcs:", "config-localsettings-badkey": "A megadott frissítési kulcs érvénytelen.", "config-upgrade-key-missing": "A telepítő a MediaWiki meglévő példányát észlelte.\nA telepített rendszer frissítéséhez helyezd el az alábbi sort a LocalSettings.php végére:\n\n$1", @@ -51,33 +52,32 @@ "config-page-existingwiki": "Létező wiki", "config-help-restart": "Szeretnéd törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?", "config-restart": "Igen, újraindítás", - "config-welcome": "=== A környezet ellenőrzése ===\nNéhány alapvető ellenőrzés kerül végrehajtásra, hogy kiderüljön ,hogy ez a környezet alkalmas-e a MediaWiki telepítésére.\nHa telepítéssel kapcsolatos segítségre van szükséged, add meg ezen ellenőrzések eredményét.", - "config-copyright": "=== Licenc és feltételek ===\n\n$1\n\nEz a program szabad szoftver; terjeszthető illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi változata szerint.\n\nEz a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb '''garancia nélkül''', az '''eladhatóságra''' vagy '''valamely célra való alkalmazhatóságra''' való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz.\n\nA felhasználónak a programmal együtt meg kell kapnia a GNU General Public License egy példányát; ha mégsem kapta meg, akkor írjon a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. címre, vagy [http://www.gnu.org/copyleft/gpl.html tekintse meg online].", + "config-welcome": "=== A környezet ellenőrzése ===\nNéhány alapvető ellenőrzés hajtódik végre, hogy kiderüljön, hogy ez a környezet alkalmas-e a MediaWiki telepítésére.\nHa segítséget kérsz a telepítéssel kapcsolatban, add meg ezen ellenőrzések eredményét.", + "config-copyright": "=== Licenc és feltételek ===\n\n$1\n\nEz a program szabad szoftver; terjeszthető, illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi változata szerint.\n\nEz a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb garancia nélkül, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz.\n\nA felhasználónak a programmal együtt meg kell kapnia a GNU General Public License egy példányát; ha mégsem kapta meg, akkor írjon a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. címre, vagy [https://www.gnu.org/copyleft/gpl.html tekintse meg online].", "config-sidebar": "* [https://www.mediawiki.org A MediaWiki honlapja]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Felhasználói kézikönyv]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Útmutató adminisztrátoroknak]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ GyIK]\n----\n* Ismertető\n* Kiadási megjegyzések\n* Másolás\n* Frissítés", "config-env-good": "A környezet ellenőrzése befejeződött.\nA MediaWiki telepíthető.", "config-env-bad": "A környezet ellenőrzése befejeződött.\nA MediaWiki nem telepíthető.", "config-env-php": "A PHP verziója: $1", "config-env-hhvm": "HHVM verziója: $1", - "config-unicode-using-intl": "A rendszer Unicode normalizálására az [http://pecl.php.net/intl intl PECL kiterjesztést] használja.", - "config-unicode-pure-php-warning": "Figyelmeztetés: A Unicode-normalizáláshoz szükséges [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP-alapú implementáció lesz használatban.\nHa nagy látogatottságú oldalt üzemeltetsz, [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations itt] találhatsz további információkat a témáról.", + "config-unicode-using-intl": "A rendszer Unicode normalizálására az [https://pecl.php.net/intl intl PECL kiterjesztést] használja.", + "config-unicode-pure-php-warning": "Figyelmeztetés: A Unicode-normalizáláshoz szükséges [https://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP-alapú implementáció lesz használatban.\nHa nagy látogatottságú oldalt üzemeltetsz, [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations itt] találhatsz további információkat a témáról.", "config-unicode-update-warning": "Figyelmeztetés: A Unicode normalizáláshoz szükséges burkolókönyvtár [http://site.icu-project.org/ az ICU projekt] függvénykönyvtárának régebbi változatát használja.\nHa ügyelni kívánsz a Unicode használatára, fontold meg a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations frissítését].", "config-no-db": "Nem sikerült egyetlen használható adatbázis-illesztőprogramot sem találni. Telepítened kell egyet a PHP-hez.\nA következő {{PLURAL:$2|adatbázistípus támogatott|adatbázistípusok támogatottak}}: $1.\n\nHa a PHP-t magad fordítottad, konfiguráld újra úgy, hogy engedélyezve legyen egy adatbáziskliens, pl. a ./configure --with-mysqli parancs használatával.\nHa a PHP-t Debian vagy Ubuntu csomaggal telepítetted, akkor szükséged lesz például a php5-mysql csomagra is.", "config-outdated-sqlite": "Figyelmeztetés: SQLite $1 verziód van, ami alacsonyabb a legalább szükséges $2 verziónál. Az SQLite nem lesz elérhető.", "config-no-fts3": "Figyelmeztetés: Az SQLite [//sqlite.org/fts3.html FTS3 modul] nélkül lett fordítva, a keresési funkciók nem fognak működni ezen a rendszeren.", - "config-pcre-old": "Kritikus hiba: PCRE $1 vagy későbbi szükséges.\nA Te PHP binárisod PCRE $2-vel lett linkelve.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE További információ].", + "config-pcre-old": "Kritikus hiba: PCRE $1 vagy későbbi szükséges.\nA te PHP binárisod a PCRE $2 verziójával van linkelve.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE További információ].", "config-pcre-no-utf8": "Kritikus hiba: Úgy tűnik, hogy a PHP PRCE modulja PRCE_UTF8 támogatás nélkül lett fordítva.\nA MediaWikinek UTF-8-támogatásra van szüksége a helyes működéshez.", "config-memory-raised": "A PHP memory_limit beállításának értéke: $1. Meg lett növelve a következő értékre: $2.", "config-memory-bad": "Figyelmeztetés: A PHP memory_limit beállításának értéke $1.\nEz az érték valószínűleg túl kevés, a telepítés sikertelen lehet.", - "config-xcache": "Az [http://xcache.lighttpd.net/ XCache] telepítve van", "config-apc": "Az [http://www.php.net/apc APC] telepítve van", "config-apcu": "Az [http://www.php.net/apcu APCu] telepítve van", - "config-wincache": "A [http://www.iis.net/download/WinCacheForPhp WinCache] telepítve van", - "config-no-cache-apcu": "Figyelmeztetés: nem találhatók a következők: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] vagy [http://www.iis.net/download/WinCacheForPhp WinCache].\nAz objektum gyorsítótárazása nincs engedélyezve.", + "config-wincache": "A [https://www.iis.net/download/WinCacheForPhp WinCache] telepítve van", + "config-no-cache-apcu": "Figyelmeztetés: nem találhatók a következők: [http://www.php.net/apcu APCu] vagy [http://www.iis.net/download/WinCacheForPhp WinCache].\nAz objektum gyorsítótárazása nincs engedélyezve.", "config-diff3-bad": "GNU diff3 nem található.", "config-git": "Megtaláltam a Git verziókezelő szoftvert: $1.", "config-git-bad": "A Git verziókezelő rendszer nem található.", "config-imagemagick": "Az ImageMagick megtalálható a rendszeren: $1.\nA bélyegképek készítése engedélyezve lesz a feltöltések engedélyezése esetén.", - "config-gd": "A GD grafikai könyvtár elérhető.\nBélyegképek készítése működni fog, miután engedélyezted a fájlfeltöltést.", + "config-gd": "A GD grafikai könyvtár elérhető.\nA bélyegképek készítése engedélyezve lesz a feltöltések engedélyezése esetén.", "config-no-scaling": "Nem található a GD könyvtár és az ImageMagick.\nA bélyegképek készítése le lesz tiltva.", "config-no-uri": "Hiba: Nem sikerült megállapítani a jelenlegi URI-t.\nA telepítés megszakítva.", "config-no-cli-uri": "Figyelmeztetés: Nincs --scriptpath megadva, használom az alapértelmezettet: $1.", @@ -92,14 +92,14 @@ "config-db-host-oracle": "Adatbázis TNS:", "config-db-wiki-settings": "A wiki azonosítása", "config-db-name": "Adatbázisnév:", - "config-db-name-help": "Válassz egy nevet a wiki azonosítására.\nNe tartalmazzon szóközt.\n\nHa megosztott webtárhelyet használsz, a szolgáltatód vagy egy konkrét adatbázisnevet ad neked használatra, vagy te magad hozhatsz létre adatbázisokat a vezérlőpulton keresztül.", + "config-db-name-help": "Válassz egy nevet a wiki azonosítására.\nNe tartalmazzon szóközt.\n\nHa megosztott webtárhelyet használsz, a szolgáltatód vagy megadja a használandó adatbázisnevet, vagy te magad hozhatsz létre adatbázisokat egy vezérlőpulton keresztül.", "config-db-name-oracle": "Adatbázisséma:", "config-db-account-oracle-warn": "Oracle adatbázisba való telepítésnek három támogatott módja van:\n\nHa a telepítési folyamat során adatbázisfiókot szeretnél létrehozni, akkor egy olyan fiókot kell használnod, mely rendelkezik SYSDBA jogosultsággal, majd meg kell adnod a létrehozandó, webes hozzáféréshez használt fiók adatait. Emellett a fiók kézzel is létrehozható, ekkor ennek az adatait kell megadni (a fióknak rendelkeznie kell megfelelő jogosul adatbázis-objektumok létrehozásához), vagy megadhatsz két fiókot: egyet a létrehozáshoz szükséges jogosultságokkal, és egy korlátozottat a webes hozzáféréshez.\n\nA megfelelő jogosultságokkal rendelkező fiók létrehozásához használható szkript a szoftver „maintenance/oracle/” könyvtárában található. Ne feledd, hogy korlátozott fiók használatakor az alapértelmezett fiókkal nem végezhetőek el a karbantartási műveletek.", "config-db-install-account": "A telepítéshez használt felhasználói fiók adatai", - "config-db-username": "Felhasználónév:", - "config-db-password": "Jelszó:", - "config-db-install-username": "Írd be az adatbázisrendszerhez való csatlakozáshoz használt felhasználónevet.\nEz nem a MediaWiki fiók felhasználóneve; ez az adatbázisrendszeren használt felhasználóneved.", - "config-db-install-password": "Írd be az adatbázisrendszerhez való csatlakozáshoz használt jelszót.\nEz nem a MediaWiki-fiók jelszava; ez az adatbázisrendszeren használt jelszavad.", + "config-db-username": "Adatbázis-felhasználónév:", + "config-db-password": "Adatbázisjelszó:", + "config-db-install-username": "Írd be a telepítés alatt az adatbázisrendszerhez való csatlakozáshoz használt felhasználónevet.\nEz nem a MediaWiki-fiók felhasználóneve; ez az adatbázisrendszeren használt felhasználóneved.", + "config-db-install-password": "Írd be a telepítés alatt az adatbázisrendszerhez való csatlakozáshoz használt jelszót.\nEz nem a MediaWiki-fiók jelszava; ez az adatbázisrendszeren használt jelszavad.", "config-db-install-help": "Add meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.", "config-db-account-lock": "Általános működés során is ezen információk használata", "config-db-wiki-account": "Általános működéshez használt felhasználói adatok", @@ -212,14 +212,14 @@ "config-profile-help": "A wikik akkor működnek a legjobban, ha minél több felhasználó számára engedélyezett a szerkesztés.\nA MediaWikiben könnyű ellenőrizni a legutóbbi változtatásokat,és visszaállítani a naiv vagy káros felhasználók által okozott károkat.\n\nA MediaWiki azonban számos helyzetben hasznos lehet, és néha nem könnyű mindenkit meggyőzni a wiki előnyeiről.\nVálaszthatsz!\n\n{{int:config-profile-wiki}}kben bárki szerkeszthet, akár bejelentkezés nélkül is. A {{int:config-profile-no-anon}} beállítás további biztonságot nyújt, azonban elijesztheti az alkalmi szerkesztőket.\n\nLehetőség van arra is, hogy {{lc:{{int:config-profile-fishbowl}}}} módosíthassák a lapokat, de a nyilvánosság ekkor megtekintheti a lapokat és azok laptörténetét is. {{int:config-profile-private}} esetén csak az engedélyezett szerkesztők tekinthetik meg a lapokat, és ugyanez a csoport szerkeszthet.\n\nTelepítés után jóval összetettebb jogosultságrendszer állítható össze, további információ a [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights kézikönyv kapcsolódó bejegyzésében].", "config-license": "Szerzői jog és licenc:", "config-license-none": "Nincs licencjelzés", - "config-license-cc-by-sa": "Creative Commons Nevezd meg! - Így add tovább!", + "config-license-cc-by-sa": "Creative Commons Nevezd meg! – Így add tovább!", "config-license-cc-by": "Creative Commons Nevezd meg!", "config-license-cc-by-nc-sa": "Creative Commons Nevezd meg! - Ne add el! - Így add tovább!", "config-license-cc-0": "Creative Commons Zero (közkincs)", "config-license-gfdl": "GNU Szabad Dokumentációs Licenc 1.3 vagy újabb", "config-license-pd": "Közkincs", "config-license-cc-choose": "Creative Commons-licenc választása", - "config-license-help": "A legtöbb wiki valamilyen [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.\nEz erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.\nÁltalában nem szükséges magán- vagy vállalati wiki esetén.\n\nHa a Wikipédiáról szeretnél szövegeket másolni, és azt szeretnéd, hogy a Wikipédián felhasználhassák a wikidben található szöveget, akkor a {{int:config-license-cc-by-sa}} lehetőséget válaszd.\n\nA Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.\nEz a licenc még ma is használható, azonban nem könnyű megérteni,\ntovábbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.", + "config-license-help": "A legtöbb wiki valamilyen [https://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.\nEz erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.\nÁltalában nem szükséges magán- vagy vállalati wiki esetén.\n\nHa a Wikipédiáról szeretnél szövegeket másolni, és azt szeretnéd, hogy a Wikipédián felhasználhassák a wikidben található szöveget, akkor a {{int:config-license-cc-by-sa}} lehetőséget válaszd.\n\nA Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.\nEz a licenc még ma is használható, azonban nem könnyű megérteni,\ntovábbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.", "config-email-settings": "E-mail beállítások", "config-enable-email": "Kimenő e-mailek engedélyezése", "config-enable-email-help": "E-mailek küldéséhez [http://www.php.net/manual/en/mail.configuration.php a PHP mail beállításait] megfelelően meg kell adni.\nHa nem akarsz semmilyen e-mailes funkciót használni, itt tilthatod le őket.", @@ -249,7 +249,7 @@ "config-cache-options": "Objektum-gyorsítótárazás beállításai:", "config-cache-help": "Az objektumgyorsítótárazás célja, hogy felgyorsítsa a MediaWiki működését a gyakran használt adatok gyorsítótárazásával.\nKözepes vagy nagyobb oldalak esetén erősen ajánlott a használata, de kisebb oldalak esetén is hasznos lehet.", "config-cache-none": "Nincs gyorsítótárazás (minden funkció működik, de nagyobb wiki esetében lassabb működést eredményezhet)", - "config-cache-accel": "PHP-objektumok gyorsítótárazása (APC, APCu, XCache vagy WinCache)", + "config-cache-accel": "PHP-objektumok gyorsítótárazása (APC, APCu vagy WinCache)", "config-cache-memcached": "Memcached használata (további telepítés és konfigurálás szükséges)", "config-memcached-servers": "Memcached-szerverek:", "config-memcached-help": "Azon IP-címek listája, melyeket a Memcached használhat.\nVesszővel kell elválasztani őket, és meg kell adni a portot is. Például:\n 127.0.0.1:11211\n 192.168.1.25:11211", diff --git a/includes/installer/i18n/ia.json b/includes/installer/i18n/ia.json index 76748956de..d20b3e7b87 100644 --- a/includes/installer/i18n/ia.json +++ b/includes/installer/i18n/ia.json @@ -43,14 +43,14 @@ "config-help-restart": "Vole tu rader tote le datos salveguardate que tu ha entrate e reinitiar le processo de installation?", "config-restart": "Si, reinitia lo", "config-welcome": "=== Verificationes del ambiente ===\nVerificationes de base essera ora exequite pro determinar si iste ambiente es apte pro le installation de MediaWiki.\nNon oblida de includer iste information si tu cerca adjuta pro completar le installation.", - "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nIste programma es software libere; vos pote redistribuer lo e/o modificar lo sub le conditiones del Licentia Public General de GNU publicate per le Free Software Foundation; version 2 del Licentia, o (a vostre option) qualcunque version posterior.\n\nIste programma es distribuite in le sperantia que illo sia utile, ma '''sin garantia''', sin mesmo le implicite garantia de '''commercialisation''' o '''aptitude pro un proposito particular'''.\nVide le Licentia Public General de GNU pro plus detalios.\n\nVos deberea haber recipite un exemplar del Licentia Public General de GNU con iste programma; si non, scribe al Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lege lo in linea].", + "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nIste programma es software libere; vos pote redistribuer lo e/o modificar lo sub le conditiones del Licentia Public General de GNU publicate per le Free Software Foundation; version 2 del Licentia, o (a vostre option) qualcunque version posterior.\n\nIste programma es distribuite in le sperantia que illo sia utile, ma '''sin garantia''', sin mesmo le implicite garantia de '''commercialisation''' o '''aptitude pro un proposito particular'''.\nVide le Licentia Public General de GNU pro plus detalios.\n\nVos deberea haber recipite un exemplar del Licentia Public General de GNU con iste programma; si non, scribe al Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [https://www.gnu.org/copyleft/gpl.html lege lo in linea].", "config-sidebar": "* [https://www.mediawiki.org Pagina principal de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guida pro usatores]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guida pro administratores]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Lege me\n* Notas de iste version\n* Conditiones de copia\n* Actualisation", "config-env-good": "Le ambiente ha essite verificate.\nTu pote installar MediaWiki.", "config-env-bad": "Le ambiente ha essite verificate.\nTu non pote installar MediaWiki.", "config-env-php": "PHP $1 es installate.", "config-env-hhvm": "HHVM $1 es installate.", - "config-unicode-using-intl": "Le [http://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.", - "config-unicode-pure-php-warning": "'''Aviso''': Le [http://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].", + "config-unicode-using-intl": "Le [https://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.", + "config-unicode-pure-php-warning": "'''Aviso''': Le [https://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].", "config-unicode-update-warning": "'''Aviso''': Le version installate del bibliotheca inveloppante pro normalisation Unicode usa un version ancian del bibliotheca del [http://site.icu-project.org/ projecto ICU].\nTu deberea [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualisar lo] si le uso de Unicode importa a te.", "config-no-db": "Non poteva trovar un driver appropriate pro le base de datos! Es necessari installar un driver de base de datos pro PHP.\nLe sequente {{PLURAL:$2|typo|typos}} de base de datos es supportate: $1.\n\nSi tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo, usante ./configure --with-mysqli.\nSi tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe etiam installar, per exemplo, le modulo php5-mysql.", "config-outdated-sqlite": "'''Attention''': tu ha SQLite $1, que es inferior al version minimal requirite, $2. SQLite essera indisponibile.", @@ -59,12 +59,11 @@ "config-pcre-no-utf8": "'''Fatal''': Le modulo PCRE de PHP pare haber essite compilate sin supporto de PCRE_UTF8.\nMediaWiki require supporto de UTF-8 pro functionar correctemente.", "config-memory-raised": "Le memory_limit de PHP es $1, elevate a $2.", "config-memory-bad": "'''Aviso:''' Le memory_limit de PHP es $1.\nIsto es probabilemente troppo basse.\nLe installation pote faller!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] es installate", "config-apc": "[http://www.php.net/apc APC] es installate", "config-apcu": "[http://www.php.net/apcu APCu] es installate", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] es installate", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] es installate", "config-no-cache-apcu": "Attention: Impossibile trovar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nLe cache de objectos non es activate.", - "config-mod-security": "'''Attention''': [http://modsecurity.org/ mod_security] es active in tu servitor web. Si mal configurate, isto pote causar problemas pro MediaWiki o altere software que permitte al usatores de publicar contento arbitrari.\nConsulta le [http://modsecurity.org/documentation/ documentation de mod_security] o contacta le servicio de adjuta de tu host si tu incontra estranie errores.", + "config-mod-security": "'''Attention''': [https://modsecurity.org/ mod_security] es active in tu servitor web. Si mal configurate, isto pote causar problemas pro MediaWiki o altere software que permitte al usatores de publicar contento arbitrari.\nConsulta le [https://modsecurity.org/documentation/ documentation de mod_security] o contacta le servicio de adjuta de tu host si tu incontra estranie errores.", "config-diff3-bad": "GNU diff3 non trovate.", "config-git": "Systema de controlo de version Git trovate: $1", "config-git-bad": "Systema de controlo de version Git non trovate.", @@ -222,7 +221,7 @@ "config-license-gfdl": "Licentia GNU pro Documentation Libere 1.3 o plus recente", "config-license-pd": "Dominio public", "config-license-cc-choose": "Seliger un licentia Creative Commons personalisate", - "config-license-help": "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].\nIsto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.\nIsto non es generalmente necessari pro un wiki private o de interprisa.\n\nSi tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger {{int:config-license-cc-by-sa}}.\n\nWikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).\nIste es un licentia valide, ma es difficile a comprender.\nIl es anque difficile reusar le contento licentiate sub GFDL.", + "config-license-help": "Multe wikis public pone tote le contributiones sub un [https://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].\nIsto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.\nIsto non es generalmente necessari pro un wiki private o de interprisa.\n\nSi tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger {{int:config-license-cc-by-sa}}.\n\nWikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).\nIste es un licentia valide, ma es difficile a comprender.\nIl es anque difficile reusar le contento licentiate sub GFDL.", "config-email-settings": "Configuration de e-mail", "config-enable-email": "Activar le e-mail sortiente", "config-enable-email-help": "Si tu vole que e-mail functiona, [http://www.php.net/manual/en/mail.configuration.php le optiones de e-mail de PHP] debe esser configurate correctemente.\nSi tu non vole functiones de e-mail, tu pote disactivar los hic.", diff --git a/includes/installer/i18n/id.json b/includes/installer/i18n/id.json index 9c4f7d7d1a..6e1834f4ec 100644 --- a/includes/installer/i18n/id.json +++ b/includes/installer/i18n/id.json @@ -55,14 +55,14 @@ "config-help-restart": "Apakah Anda ingin menghapus semua data tersimpan yang telah Anda masukkan dan mengulang proses instalasi?", "config-restart": "Ya, nyalakan ulang", "config-welcome": "=== Pengecekan lingkungan ===\nPengecekan dasar kini akan dilakukan untuk melihat apakah lingkungan ini memadai untuk instalasi MediaWiki.\nIngatlah untuk menyertakan informasi ini jika Anda mencari bantuan tentang cara menyelesaikan instalasi.", - "config-copyright": "=== Hak cipta dan persyaratan ===\n\n$1\n\nProgram ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.\n\nProgram ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi tanpa jaminan apa pun; bahkan tanpa jaminan tersirat untuk dapat diperjualbelikan atau sesuai untuk tujuan tertentu.\nLihat GNU General Public License untuk lebih jelasnya.\n\nAnda seharusnya telah menerima salinan dari GNU General Public License bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].", + "config-copyright": "=== Hak cipta dan persyaratan ===\n\n$1\n\nProgram ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.\n\nProgram ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi tanpa jaminan apa pun; bahkan tanpa jaminan tersirat untuk dapat diperjualbelikan atau sesuai untuk tujuan tertentu.\nLihat GNU General Public License untuk lebih jelasnya.\n\nAnda seharusnya telah menerima salinan dari GNU General Public License bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [https://www.gnu.org/copyleft/gpl.html baca versi daring].", "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/id Situs MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/id Pedoman Pengguna]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/id Pedoman Administrator]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/id FAQ]\n----\n* Read me\n* Release notes\n* Copying\n* Upgrading", "config-env-good": "Kondisi telah diperiksa.\nAnda dapat menginstal MediaWiki.", "config-env-bad": "Kondisi telah diperiksa.\nAnda tidak dapat menginstal MediaWiki.", "config-env-php": "PHP $1 diinstal.", "config-env-hhvm": "HHVM $1 telah dipasang.", - "config-unicode-using-intl": "Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.", - "config-unicode-pure-php-warning": "Peringatan: [http://pecl.php.net/intl intl Ekstensi PECL] tidak tersedia untuk menangani normalisasi Unicode, dikembalikan untuk melambatkan implementasi PHP asli.\nApabila Anda menjalankan situs dengan lalu-lintas tinggi, Anda harus membaca [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].", + "config-unicode-using-intl": "Menggunakan [https://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.", + "config-unicode-pure-php-warning": "Peringatan: [https://pecl.php.net/intl intl Ekstensi PECL] tidak tersedia untuk menangani normalisasi Unicode, dikembalikan untuk melambatkan implementasi PHP asli.\nApabila Anda menjalankan situs dengan lalu-lintas tinggi, Anda harus membaca [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].", "config-unicode-update-warning": "Peringatan: Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].\nAnda harus [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations meningkatkan versinya] jika ingin menggunakan Unicode.", "config-no-db": "Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.\n{{PLURAL:$2|Jenis|Jenis}} basis data yang didukung: $1.\n\nJika Anda mengompilasi PHP sendiri, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan ./configure --with-mysqli.\nJika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal seperti paket php5-mysql.", "config-outdated-sqlite": "Peringatan: Anda menggunakan SQLite $1, yang lebih rendah dari versi minimum yang diperlukan $2. SQLite akan tidak tersedia.", @@ -71,11 +71,10 @@ "config-pcre-no-utf8": "'''Fatal''': Modul PCRE PHP tampaknya dikompilasi tanpa dukungan PCRE_UTF8.\nMediaWiki memerlukan dukungan UTF-8 untuk berfungsi dengan benar.", "config-memory-raised": "memory_limit PHP adalah $1, dinaikkan ke $2.", "config-memory-bad": "'''Peringatan:''' memory_limit PHP adalah $1.\nIni terlalu rendah.\nInstalasi terancam gagal!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] telah diinstal", "config-apc": "[http://www.php.net/apc APC] telah diinstal", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] telah diinstal", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] telah diinstal", "config-no-cache-apcu": "Peringatan: Tidak dapat menemukan [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] atau [http://www.iis.net/download/WinCacheForPhp WinCache]. Singgahan obyek tidak diaktifkan.", - "config-mod-security": "Peringatan: Server web Anda memiliki [http://modsecurity.org/ mod_security] yang diaktifkan. Jika salah dalam mengkonfigurasi, ini dapat menyebabkan masalah untuk MediaWiki atau perangkat lunak lain yang memungkinkan pengguna untuk mengirim sembarang konten.\nLihat [http://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi layanan host Anda jika Anda mengalami kesalahan acak.", + "config-mod-security": "Peringatan: Server web Anda memiliki [https://modsecurity.org/ mod_security] yang diaktifkan. Jika salah dalam mengkonfigurasi, ini dapat menyebabkan masalah untuk MediaWiki atau perangkat lunak lain yang memungkinkan pengguna untuk mengirim sembarang konten.\nLihat [https://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi layanan host Anda jika Anda mengalami kesalahan acak.", "config-diff3-bad": "GNU diff3 tidak ditemukan.", "config-git": "Menemukan perangkat lunak kontrol versi Git: $1.", "config-git-bad": "Perangkat lunak kontrol versi Git tidak ditemukan.", @@ -231,7 +230,7 @@ "config-license-gfdl": "Lisensi Dokumentasi Bebas GNU 1.3 atau versi terbaru", "config-license-pd": "Domain Umum", "config-license-cc-choose": "Pilih lisensi Creative Commons kustom", - "config-license-help": "Banyak wiki publik melisensikan semua kontribusi di bawah [http://freedomdefined.org/Definition lisensi bebas].\nHal ini membantu menciptakan rasa kepemilikan komunitas dan mendorong kontribusi jangka panjang.\nHal ini umumnya tidak diperlukan untuk wiki pribadi atau perusahaan.\n\nJika Anda ingin dapat menggunakan teks dari Wikipedia dan Anda ingin agar Wikipedia dapat menerima teks yang disalin dari wiki Anda, Anda harus memilih {{int:config-license-cc-by-sa}}.\n\nWikipedia sebelumnya menggunakan GNU Free Documentation License.\nLisensi ini masih sah, namun sulit dipahami.\nSelain itu, sulit untuk menggunakan ulang konten yang dilisensikan di bawah GFDL.", + "config-license-help": "Banyak wiki publik melisensikan semua kontribusi di bawah [https://freedomdefined.org/Definition lisensi bebas].\nHal ini membantu menciptakan rasa kepemilikan komunitas dan mendorong kontribusi jangka panjang.\nHal ini umumnya tidak diperlukan untuk wiki pribadi atau perusahaan.\n\nJika Anda ingin dapat menggunakan teks dari Wikipedia dan Anda ingin agar Wikipedia dapat menerima teks yang disalin dari wiki Anda, Anda harus memilih {{int:config-license-cc-by-sa}}.\n\nWikipedia sebelumnya menggunakan GNU Free Documentation License.\nLisensi ini masih sah, namun sulit dipahami.\nSelain itu, sulit untuk menggunakan ulang konten yang dilisensikan di bawah GFDL.", "config-email-settings": "Pengaturan surel", "config-enable-email": "Aktifkan surel keluar", "config-enable-email-help": "Jika Anda ingin mengaktifkan surel, [http://www.php.net/manual/en/mail.configuration.php setelah surel PHP] perlu dikonfigurasi dengan benar.\nJika Anda tidak perlu fitur surel, Anda dapat menonaktifkannya di sini.", diff --git a/includes/installer/i18n/is.json b/includes/installer/i18n/is.json index 37f243da43..78be96be42 100644 --- a/includes/installer/i18n/is.json +++ b/includes/installer/i18n/is.json @@ -31,12 +31,11 @@ "config-page-upgradedoc": "Uppfærsla", "config-page-existingwiki": "Fyrirliggjandi wiki", "config-restart": "Já, endurræsa", - "config-copyright": "=== Höfundarréttur og skilmálar ===\n\n$1\n\nÞetta er frjáls hugbúnaður; þú mátt dreifa honum og/eða breyta samkvæmt skilmálum í almenna GNU GPL notkunarleyfinu eins og það er gefið út af Frjálsu hugbúnaðarstofnuninni; annaðhvort útgáfu 2 af GPL-leyfinu, eða (ef þér sýnist svo) einhverri nýrri útgáfu leyfisins.\n\nHugbúnaði þessum er dreift í þeirri von að hann geti verið gagnlegur, en ÁN ALLRAR ÁBYRGÐAR; einnig án þeirrar ábyrgðar sem gefin er í skyn með SELJANLEIKA eða EIGINLEIKUM TIL TILTEKINNA NOTA. Sjá almenna GNU GPL notkunarleyfið fyrir nánari upplýsingar.\n\nÞað ætti að hafa fylgt afrit af almenna GNU GPL notkunarleyfinu með forritinu; ef ekki skrifið þá Fjálsu hugbúnarstofnuninni: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, eða [http://www.gnu.org/copyleft/gpl.html lestu það á netinu].", + "config-copyright": "=== Höfundarréttur og skilmálar ===\n\n$1\n\nÞetta er frjáls hugbúnaður; þú mátt dreifa honum og/eða breyta samkvæmt skilmálum í almenna GNU GPL notkunarleyfinu eins og það er gefið út af Frjálsu hugbúnaðarstofnuninni; annaðhvort útgáfu 2 af GPL-leyfinu, eða (ef þér sýnist svo) einhverri nýrri útgáfu leyfisins.\n\nHugbúnaði þessum er dreift í þeirri von að hann geti verið gagnlegur, en ÁN ALLRAR ÁBYRGÐAR; einnig án þeirrar ábyrgðar sem gefin er í skyn með SELJANLEIKA eða EIGINLEIKUM TIL TILTEKINNA NOTA. Sjá almenna GNU GPL notkunarleyfið fyrir nánari upplýsingar.\n\nÞað ætti að hafa fylgt afrit af almenna GNU GPL notkunarleyfinu með forritinu; ef ekki skrifið þá Fjálsu hugbúnarstofnuninni: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, eða [https://www.gnu.org/copyleft/gpl.html lestu það á netinu].", "config-env-php": "PHP $1 er uppsett.", "config-env-hhvm": "HHVM $1 er uppsett.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] er uppsett", "config-apc": "[http://www.php.net/apc APC] er uppsett", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] er uppsett", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] er uppsett", "config-diff3-bad": "GNU diff3 fannst ekki.", "config-using-server": "Nota \"$1\" sem heiti á þjóni.", "config-using-uri": "Nota \"$1$2\" sem slóð á þjón.", diff --git a/includes/installer/i18n/it.json b/includes/installer/i18n/it.json index 5453e4533b..d9b0dbc0bb 100644 --- a/includes/installer/i18n/it.json +++ b/includes/installer/i18n/it.json @@ -60,14 +60,14 @@ "config-help-restart": "Vuoi cancellare tutti i dati salvati che hai inserito e riavviare il processo di installazione?", "config-restart": "Sì, riavvia", "config-welcome": "=== Controllo dell'ambiente ===\nSaranno eseguiti controlli di base per vedere se questo ambiente è adatto per l'installazione di MediaWiki.\nRicordati di includere queste informazioni se chiedi assistenza su come completare l'installazione.", - "config-copyright": "=== Copyright e termini ===\n\n$1\n\nQuesto programma è un software libero; puoi redistribuirlo e/o modificarlo secondo i termini della GNU General Public License, come pubblicata dalla Free Software Foundation; o la versione 2 della Licenza o (a propria scelta) qualunque versione successiva.\n\nQuesto programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di NEGOZIABILITÀ o di APPLICABILITÀ PER UN PARTICOLARE SCOPO.\nSi veda la GNU General Public License per maggiori dettagli.\n\nQuesto programma deve essere distribuito assieme ad una copia della GNU General Public License; in caso contrario, se ne può ottenere una scrivendo alla Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oppure [http://www.gnu.org/copyleft/gpl.html leggerla in rete].", + "config-copyright": "=== Copyright e termini ===\n\n$1\n\nQuesto programma è un software libero; puoi redistribuirlo e/o modificarlo secondo i termini della GNU General Public License, come pubblicata dalla Free Software Foundation; o la versione 2 della Licenza o (a propria scelta) qualunque versione successiva.\n\nQuesto programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di NEGOZIABILITÀ o di APPLICABILITÀ PER UN PARTICOLARE SCOPO.\nSi veda la GNU General Public License per maggiori dettagli.\n\nQuesto programma deve essere distribuito assieme ad una copia della GNU General Public License; in caso contrario, se ne può ottenere una scrivendo alla Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oppure [https://www.gnu.org/copyleft/gpl.html leggerla in rete].", "config-sidebar": "* [https://www.mediawiki.org Pagina principale MediaWiki]\n* [https://www.mediawiki.org/wiki/Aiuto:Guida ai contenuti per utenti]\n* [https://www.mediawiki.org/wiki/Manuale:Guida ai contenuti per admin]\n* [https://www.mediawiki.org/wiki/Manuale:FAQ FAQ]\n----\n* Leggimi\n* Note di versione\n* Copie\n* Aggiornamenti", "config-env-good": "L'ambiente è stato controllato.\nÈ possibile installare MediaWiki.", "config-env-bad": "L'ambiente è stato controllato.\nNon è possibile installare MediaWiki.", "config-env-php": "PHP $1 è installato.", "config-env-hhvm": "HHVM $1 è installato.", - "config-unicode-using-intl": "Usa [http://pecl.php.net/intl l'estensione PECL intl] per la normalizzazione Unicode.", - "config-unicode-pure-php-warning": "'''Attenzione:''' [http://pecl.php.net/intl l'estensione PECL intl] non è disponibile per gestire la normalizzazione Unicode, quindi si torna alla lenta implementazione in PHP puro.\nSe esegui un sito ad alto traffico, dovresti leggere alcune considerazioni sulla [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzazione Unicode].", + "config-unicode-using-intl": "Usa [https://pecl.php.net/intl l'estensione PECL intl] per la normalizzazione Unicode.", + "config-unicode-pure-php-warning": "'''Attenzione:''' [https://pecl.php.net/intl l'estensione PECL intl] non è disponibile per gestire la normalizzazione Unicode, quindi si torna alla lenta implementazione in PHP puro.\nSe esegui un sito ad alto traffico, dovresti leggere alcune considerazioni sulla [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzazione Unicode].", "config-unicode-update-warning": "'''Attenzione:''' la versione installata del gestore per la normalizzazione Unicode usa una vecchia versione della libreria [http://site.icu-project.org/ del progetto ICU].\nDovresti [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aggiornare] se vuoi usare l'Unicode.", "config-no-db": "Impossibile trovare un driver adatto per il database! È necessario installare un driver per PHP.\n{{PLURAL:$2|Il seguente formato di database è supportato|I seguenti formati di database sono supportati}}: $1.\n\nSe compili PHP autonomamente, riconfiguralo attivando un client database, per esempio utilizzando ./configure --with-mysqli.\nQualora avessi installato PHP per mezzo di un pacchetto Debian o Ubuntu, allora devi installare anche il pacchetto php5-mysql.", "config-outdated-sqlite": "'''Attenzione''': è presente SQLite $1 mentre è richiesta la versione $2, SQLite non sarà disponibile.", @@ -76,12 +76,11 @@ "config-pcre-no-utf8": "'''Errore''': Il modulo PCRE di PHP sembra essere stato compilato senza il supporto PCRE_UTF8, ma MediaWiki lo richiede per funzionare correttamente.", "config-memory-raised": "Il valore memory_limit di PHP è $1, aumentato a $2.", "config-memory-bad": "''Attenzione:''' Il valore di memory_limit di PHP è $1.\nProbabilmente è troppo basso.\nL'installazione potrebbe non riuscire!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato", "config-apc": "[http://www.php.net/apc APC] è installato", "config-apcu": "[http://www.php.net/apc APC] è installato", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] è installato", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] è installato", "config-no-cache-apcu": "'''Attenzione:''' [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] non sono stati trovati.\nLa caching degli oggetti non è attivata.", - "config-mod-security": "Attenzione: Il tuo server web ha il [http://modsecurity.org/ mod_security] abilitato. Se non correttamente configurato, può creare problemi a MediaWiki o ad altro software che permette agli utenti di pubblicare contenuto.\nFai riferimento alla [http://modsecurity.org/documentation/ documentazione sul mod_security] o contatta il supporto tecnico del tuo provider di hosting se si verificano errori.", + "config-mod-security": "Attenzione: Il tuo server web ha il [https://modsecurity.org/ mod_security] abilitato. Se non correttamente configurato, può creare problemi a MediaWiki o ad altro software che permette agli utenti di pubblicare contenuto.\nFai riferimento alla [https://modsecurity.org/documentation/ documentazione sul mod_security] o contatta il supporto tecnico del tuo provider di hosting se si verificano errori.", "config-diff3-bad": "GNU diff3 non trovato.", "config-git": "Trovato software di controllo della versione Git: $1.", "config-git-bad": "Software di controllo della versione Git non trovato.", @@ -235,7 +234,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 o versioni successive", "config-license-pd": "Pubblico dominio", "config-license-cc-choose": "Seleziona una delle licenze Creative Commons", - "config-license-help": "Molti wiki pubblici rilasciano i loro contributi con una [http://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.\n\nSe vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere {{int:config-license-cc-by-sa}}.\n\nIn precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.", + "config-license-help": "Molti wiki pubblici rilasciano i loro contributi con una [https://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.\n\nSe vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere {{int:config-license-cc-by-sa}}.\n\nIn precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.", "config-email-settings": "Impostazioni email", "config-enable-email": "Abilita la posta elettronica in uscita", "config-enable-email-help": "Se vuoi che funzionino le email, le [http://www.php.net/manual/en/mail.configuration.php PHP's impostazioni della posta] devono essere configurate correttamente.\nSe non si desidera alcuna funzionalità di posta elettronica, puoi disabilitarla qui.", @@ -265,7 +264,7 @@ "config-cache-options": "Impostazioni per la cache di oggetti:", "config-cache-help": "La memorizzazione di oggetti nella cache è utilizzata per migliorare la velocità di MediaWiki attraverso l'allocazione nella cache dei dati utilizzati di frequente.\nPer siti di dimensioni medie e grandi, è caldamente consigliato attivare la cache, ma anche per piccoli siti se ne vedranno i benefici.", "config-cache-none": "Nessuna memorizzazione in cache (nessuna funzionalità viene impedita, ma sui siti wiki più grandi la velocità potrebbe risentirne)", - "config-cache-accel": "Mettere in cache oggetti PHP (APC, APCu, XCache o WinCache)", + "config-cache-accel": "Mettere in cache oggetti PHP (APC, APCu o WinCache)", "config-cache-memcached": "Usa Memcached (richiede ulteriori attività di installazione e configurazione)", "config-memcached-servers": "Server di memcached:", "config-memcached-help": "Elenco di indirizzi IP da utilizzare per Memcached.\nDovresti specificarne uno per riga e indicare la porta da utilizzare. Per esempio:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/ja.json b/includes/installer/i18n/ja.json index 3f226624cc..9262dd078d 100644 --- a/includes/installer/i18n/ja.json +++ b/includes/installer/i18n/ja.json @@ -62,14 +62,14 @@ "config-help-restart": "入力した保存データをすべて消去して、インストール作業を再起動しますか?", "config-restart": "はい、再起動します", "config-welcome": "=== 環境の確認 ===\n基本的な確認では、現在の環境が MediaWiki のインストールに適しているかを確認します。\nインストール方法について助けが必要になった場合は、必ずこの確認結果を添えてください。", - "config-copyright": "=== 著作権および規約 ===\n$1\n\nこの作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行する GNU 一般公衆利用許諾書 (GNU General Public License) (バージョン 2、またはそれ以降のライセンス) の規約に基づき、このライブラリを再配布および改変できます。\n\nこの作品は、有用であることを期待して配布されていますが、商用または特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。\n詳しくは、 GNU 一般公衆利用許諾書をご覧ください。\n\nあなたはこのプログラムと共に、GNU 一般公衆利用許諾契約書の複製を受け取ったはずです。受け取っていない場合は、フリーソフトウェア財団 (宛先は the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA) まで請求するか、または[http://www.gnu.org/copyleft/gpl.html オンラインでお読みください]。", + "config-copyright": "=== 著作権および規約 ===\n$1\n\nこの作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行する GNU 一般公衆利用許諾書 (GNU General Public License) (バージョン 2、またはそれ以降のライセンス) の規約に基づき、このライブラリを再配布および改変できます。\n\nこの作品は、有用であることを期待して配布されていますが、商用または特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。\n詳しくは、 GNU 一般公衆利用許諾書をご覧ください。\n\nあなたはこのプログラムと共に、GNU 一般公衆利用許諾契約書の複製を受け取ったはずです。受け取っていない場合は、フリーソフトウェア財団 (宛先は the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA) まで請求するか、または[https://www.gnu.org/copyleft/gpl.html オンラインでお読みください]。", "config-sidebar": "* [https://www.mediawiki.org MediaWikiのホーム]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 利用者向け案内]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 管理者向け案内]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* お読みください\n* リリースノート\n* コピー\n* アップグレード", "config-env-good": "環境を確認しました。\nMediaWiki をインストールできます。", "config-env-bad": "環境を確認しました。\nMediaWiki のインストールはできません。", "config-env-php": "PHP $1がインストールされています。", "config-env-hhvm": "HHVM $1 がインストールされています。", - "config-unicode-using-intl": "Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。", - "config-unicode-pure-php-warning": "警告: Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。\n高トラフィックのサイトを運営する場合は、[https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正規化]をお読みください。", + "config-unicode-using-intl": "Unicode正規化に[https://pecl.php.net/intl intl PECL 拡張機能]を使用。", + "config-unicode-pure-php-warning": "警告: Unicode 正規化の処理に [https://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。\n高トラフィックのサイトを運営する場合は、[https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正規化]をお読みください。", "config-unicode-update-warning": "警告: インストールされているバージョンの Unicode 正規化ラッパーは、[http://site.icu-project.org/ ICU プロジェクト]のライブラリの古いバージョンを使用しています。\nUnicode を少しでも利用する可能性がある場合は、[https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations アップグレード]してください。", "config-no-db": "適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。\n以下の種類のデータベース{{PLURAL:$2|のタイプ}}に対応しています: $1\n\nPHP を自分でコンパイルした場合は、例えば ./configure --with-mysqli を実行して、データベース クライアントを使用できるように再設定してください。\nDebian または Ubuntu のパッケージから PHP をインストールした場合は、モジュール (例: php5-mysql) もインストールする必要があります。", "config-outdated-sqlite": "警告: あなたは SQLite $1 を使用していますが、最低限必要なバージョン $2 より古いバージョンです。SQLite は利用できません。", @@ -78,12 +78,11 @@ "config-pcre-no-utf8": "致命的エラー: PHP の PCRE が PCRE_UTF8 対応なしでコンパイルされているようです。\nMediaWiki を正しく動作させるには、UTF-8 対応が必要です。", "config-memory-raised": "PHPのmemory_limitは$1で、$2に引き上げられました。", "config-memory-bad": "警告: PHPのmemory_limitに$1に設定されています。\nこの値はおそらく小さすぎます。\nインストールが失敗するおそれがあります!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] がインストール済み", "config-apc": "[http://www.php.net/apc APC] がインストール済み", "config-apcu": "[http://www.php.net/apc APC] がインストール済みです。", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] がインストール済み", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] がインストール済み", "config-no-cache-apcu": "警告: [http://www.php.net/apcu APCu]、 [http://xcache.lighttpd.net/ XCache]、 [http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。\nオブジェクトのキャッシュは有効化されません。", - "config-mod-security": "警告: あなたのウェブサーバーでは [http://modsecurity.org/ mod_security] が有効になっています。正しく構成されていない場合は、MediaWiki や利用者にコンテンツの投稿を許可するその他のソフトウェアに問題が発生する場合があります。\n[http://modsecurity.org/documentation/ mod_security の説明文書]を確認するか、ランダムなエラーが発生した場合はあなたのホストのサポートにお問い合わせください。", + "config-mod-security": "警告: あなたのウェブサーバーでは [https://modsecurity.org/ mod_security] が有効になっています。正しく構成されていない場合は、MediaWiki や利用者にコンテンツの投稿を許可するその他のソフトウェアに問題が発生する場合があります。\n[https://modsecurity.org/documentation/ mod_security の説明文書]を確認するか、ランダムなエラーが発生した場合はあなたのホストのサポートにお問い合わせください。", "config-diff3-bad": "GNU diff3 が見つかりません。", "config-git": "バージョン管理ソフトウェア Git が見つかりました: $1", "config-git-bad": "バージョン管理ソフトウェア Git が見つかりません。", @@ -240,7 +239,7 @@ "config-license-gfdl": "GNU フリー文書利用許諾契約書 1.3 以降", "config-license-pd": "パブリック・ドメイン", "config-license-cc-choose": "その他のクリエイティブ・コモンズ・ライセンスを選択する", - "config-license-help": "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]のもとに置かれています。\nこうすることにより、コミュニティによる共有の感覚が生まれ、長期的な寄稿が促されます。\n私的ウィキや企業のウィキでは、通常、フリーライセンスにする必要はありません。\n\nウィキペディアにあるテキストをあなたのウィキで利用し、逆にあなたのウィキにあるテキストをウィキペディアに複製することを許可したい場合には、{{int:config-license-cc-by-sa}}を選択するべきです。\n\nウィキペディアは以前、GNUフリー文書利用許諾契約書(GFDL)を使用していました。\nGFDLは有効なライセンスですが、内容を理解するのは困難です。\nまた、GFDLのもとに置かれているコンテンツの再利用も困難です。", + "config-license-help": "多くの公開ウィキでは、すべての寄稿物が[https://freedomdefined.org/Definition フリーライセンス]のもとに置かれています。\nこうすることにより、コミュニティによる共有の感覚が生まれ、長期的な寄稿が促されます。\n私的ウィキや企業のウィキでは、通常、フリーライセンスにする必要はありません。\n\nウィキペディアにあるテキストをあなたのウィキで利用し、逆にあなたのウィキにあるテキストをウィキペディアに複製することを許可したい場合には、{{int:config-license-cc-by-sa}}を選択するべきです。\n\nウィキペディアは以前、GNUフリー文書利用許諾契約書(GFDL)を使用していました。\nGFDLは有効なライセンスですが、内容を理解するのは困難です。\nまた、GFDLのもとに置かれているコンテンツの再利用も困難です。", "config-email-settings": "メールの設定", "config-enable-email": "メール送信を有効にする", "config-enable-email-help": "メールを使用したい場合は、[http://www.php.net/manual/en/mail.configuration.php PHP のメール設定]が正しく設定されている必要があります。\nメールの機能を使用しない場合は、ここで無効にすることができます。", diff --git a/includes/installer/i18n/ka.json b/includes/installer/i18n/ka.json index f5771aa3cc..fb47fcd282 100644 --- a/includes/installer/i18n/ka.json +++ b/includes/installer/i18n/ka.json @@ -27,9 +27,8 @@ "config-sidebar": "* [https://www.mediawiki.org მედიავიკის ვებ-გვერდი]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/ka მომხმარებლების დახმარება]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/ka ადმინისტრატორების დახმარება]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ka FAQ]\n----\n* წამიკითხე\n* ინფორმაცია გამოშვებაზე\n* ლიცენზია\n* განახლება", "config-env-php": "PHP $1 დაინსტალირებულია", "config-env-hhvm": "HHVM $1 დაინსტალირებულია.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] დაყენდა", "config-apc": "[http://www.php.net/apc APC] დაყენდა", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] დაყენდა", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] დაყენდა", "config-diff3-bad": "GNU diff3 ვერ მოიძებნა.", "config-db-type": "მონაცემთა ბაზის ტიპი:", "config-db-host-oracle": "მონაცემთა ბაზის TNS:", diff --git a/includes/installer/i18n/ko.json b/includes/installer/i18n/ko.json index fcc54689e8..e9314ed4fc 100644 --- a/includes/installer/i18n/ko.json +++ b/includes/installer/i18n/ko.json @@ -52,14 +52,14 @@ "config-help-restart": "입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?", "config-restart": "예, 다시 시작합니다", "config-welcome": "=== 사용 환경 검사 ===\n기본 검사는 지금 이 환경이 미디어위키 설치에 적합한지 수행합니다.\n설치를 완료하는 방법에 대한 지원을 찾는다면 이 정보를 포함해야 하는 것을 기억하세요.", - "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 ê·¸ 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 상용으로 사용되거나 특정 목적에 맞을 것이라는 것을 보증하지 않습니다.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오.\n\n당신은 이 프로그램을 통해 GNU 일반 공중 사용 허가서 전문을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.", + "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 ê·¸ 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 상용으로 사용되거나 특정 목적에 맞을 것이라는 것을 보증하지 않습니다.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오.\n\n당신은 이 프로그램을 통해 GNU 일반 공중 사용 허가서 전문을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [https://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.", "config-sidebar": "* [https://www.mediawiki.org 미디어위키 홈]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 사용자 가이드]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 관리자 가이드]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* 읽어보기\n* 릴리스 노트\n* 전문\n* 업그레이드하기", "config-env-good": "환경이 확인되었습니다.\n미디어위키를 설치할 수 있습니다.", "config-env-bad": "환경이 확인되었습니다.\n미디어위키를 설치할 수 없습니다.", "config-env-php": "PHP $1이(가) 설치되어 있습니다.", "config-env-hhvm": "HHVM $1이(가) 설치되어 있습니다.", - "config-unicode-using-intl": "유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.", - "config-unicode-pure-php-warning": "경고: 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보셔야 합니다.", + "config-unicode-using-intl": "유니코드 정규화에 [https://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.", + "config-unicode-pure-php-warning": "경고: 유니코드 정규화를 처리할 [https://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보셔야 합니다.", "config-unicode-update-warning": "경고: 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.", "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP용 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 {{PLURAL:$2|유형을}} 지원합니다: $1.\n\nPHP를 직접 컴파일했다면, 예를 들어 ./configure --with-mysqli을 사용하여, 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분투 패키지에서 PHP를 설치했다면 php5-mysql 패키지도 설치해야 합니다.", "config-outdated-sqlite": "경고: 최소 요구 버전 $2 보다 낮은 SQLite $1이(가) 있습니다. SQLite를 사용할 수 없습니다.", @@ -68,12 +68,11 @@ "config-pcre-no-utf8": "치명: PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 올바르게 작동하려면 UTF-8을 지원해야 합니다.", "config-memory-raised": "PHP의 memory_limit는 $1이며 $2(으)로 늘렸습니다.", "config-memory-bad": "경고: PHP의 memory_limit는 $1입니다.\n아마도 너무 낮은 것 같습니다.\n설치가 실패할 수 있습니다!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache]가 설치되었습니다", "config-apc": "[http://www.php.net/apc APC]가 설치되었습니다", "config-apcu": "[http://www.php.net/apcu APCu]가 설치되었습니다", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]가 설치되었습니다", - "config-no-cache-apcu": "경고: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] 또는 [http://www.iis.net/download/WinCacheForPhp WinCache]를 찾을 수 없습니다.\n개체 캐싱을 활성화할 수 없습니다.", - "config-mod-security": "경고: 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 내용을 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.\n[http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache]가 설치되었습니다", + "config-no-cache-apcu": "경고: [http://www.php.net/apcu APCu] 또는 [http://www.iis.net/download/WinCacheForPhp WinCache]를 찾을 수 없습니다.", + "config-mod-security": "경고: 웹 서버에 [https://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 내용을 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.\n[https://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.", "config-diff3-bad": "GNU diff3를 찾을 수 없습니다.", "config-git": "Git 버전 관리 소프트웨어를 찾았습니다: $1.", "config-git-bad": "Git 버전 관리 소프트웨어를 찾을 수 없습니다.", @@ -229,7 +228,7 @@ "config-license-gfdl": "GNU 자유 문서 사용 허가서 1.3 이상", "config-license-pd": "퍼블릭 도메인", "config-license-cc-choose": "다른 크리에이티브 커먼즈 라이선스 선택", - "config-license-help": "많은 공개 위키는 모든 기여를 [http://freedomdefined.org/Definition 자유 라이선스]에 따르도록 합니다.\n이렇게 하면 커뮤니티에 대한 소유권을 이해할 수 있도록 하고 장기적인 기여를 장려합니다.\n일반적으로 개인 또는 회사 위키에게는 필요하지 않습니다.\n\n위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 {{int:config-license-cc-by-sa}}으로 선택해야 합니다.\n\n위키백과는 이전에 GNU 자유 문서 사용 허가서(GFDL)를 사용했습니다.\nGFDL은 유효한 라이선스이지만 내용을 이해하기 어렵습니다.\nGFDL에 따라 사용이 허가된 내용을 재사용하는 것도 어렵습니다.", + "config-license-help": "많은 공개 위키는 모든 기여를 [https://freedomdefined.org/Definition 자유 라이선스]에 따르도록 합니다.\n이렇게 하면 커뮤니티에 대한 소유권을 이해할 수 있도록 하고 장기적인 기여를 장려합니다.\n일반적으로 개인 또는 회사 위키에게는 필요하지 않습니다.\n\n위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 {{int:config-license-cc-by-sa}}으로 선택해야 합니다.\n\n위키백과는 이전에 GNU 자유 문서 사용 허가서(GFDL)를 사용했습니다.\nGFDL은 유효한 라이선스이지만 내용을 이해하기 어렵습니다.\nGFDL에 따라 사용이 허가된 내용을 재사용하는 것도 어렵습니다.", "config-email-settings": "이메일 설정", "config-enable-email": "발신 이메일 활성화", "config-enable-email-help": "이메일을 작동하려면 [http://www.php.net/manual/en/mail.configuration.php PHP의 메일 설정]을 올바르게 설정해야 합니다.\n이메일 기능을 사용하지 않으려면 이를 비활성화할 수 있습니다.", @@ -259,7 +258,7 @@ "config-cache-options": "개체 캐싱을 위한 설정:", "config-cache-help": "개체 캐싱은 자주 사용하는 데이터를 캐싱하여 미디어위키의 속도를 개선하는 데 사용합니다.\n큰 규모의 사이트는 이를 많이 사용하도록 권장하고 있으며, 소규모 사이트들도 물론 혜택을 ë³¼ 수 있습니다.", "config-cache-none": "캐시하지 않음 (기능이 삭제되지는 않지만 큰 위키 사이트에 속도가 영향을 받을 수 있습니다)", - "config-cache-accel": "PHP 개체 캐싱 (APC, APCu, XCache 또는 WinCache)", + "config-cache-accel": "PHP 개체 캐싱 (APC, APCu 또는 WinCache)", "config-cache-memcached": "Memcached 사용 (추가적인 설치와 설정이 필요합니다)", "config-memcached-servers": "Memcached 서버:", "config-memcached-help": "Memcached의 사용하기 위한 IP 주소 목록입니다.\n한 줄에 하나씩 사용할 포트를 지정해야 합니다. 예를 들어:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/ksh.json b/includes/installer/i18n/ksh.json index 9a33d5b8c2..2ccf4e04bc 100644 --- a/includes/installer/i18n/ksh.json +++ b/includes/installer/i18n/ksh.json @@ -44,14 +44,14 @@ "config-help-restart": "Wells De all Ding enjejovve Saache fottjeschmeße han, un dä janze Vörjang vun fürre aan neu aanfange?", "config-restart": "Joh, neu aanfange!", "config-welcome": "=== Ömjevong Pröhfe ===\nMer maache en Aanzahl jrundlääje Pröhvunge, öm erus ze fenge, ov di Ömjävvong heh paß för Mediawiki opzesäze.\nWann de Hölp bem Opsäze hölls, saach wigger, wat heh erus kohm, alsu wat heh schteiht.", - "config-copyright": "=== Urhävverrääsch un Lizänzbedengunge ===\n\n$1\n\nDat Projramm heh es frei, mer kann et wiggerjävve un verdeijle un och verändere onger dä Bedengunge vun de GNU General Public License (Alljemeine öffentlesche Lizänz) wi se vun de Free Software Foundation (de Schteftung för frei Projramme) veröffentlesch woode es. Dobei kanns De Der de Version 2 vun dä Lizanz ußsöhke, udder jeede Version donoh, wi et Der jefällt.\n\nDat Projramm weed wigger jejovve met dä Hoffnung, dat et jät nöz, ävver der ohne Jarrantie, sujaa der ohne de onußjeshproche Jarantie, verkoufbaa ze sin, udder för öhnds_ene beshtemmpte Zweck ze bruche ze sin.\nLiß de GNU General Public License sellver, öm mieh ze erfahre.\n\nDo sullts en Kopie vun dä alljemene öffentlesche Lizänz vun dä GNU (GNU General Public License) zosamme met heh däm Projramm krääje han. Wann dat nit esu es, schrief aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, udder [http://www.gnu.org/copyleft/gpl.html liß se online övver et Internet].", + "config-copyright": "=== Urhävverrääsch un Lizänzbedengunge ===\n\n$1\n\nDat Projramm heh es frei, mer kann et wiggerjävve un verdeijle un och verändere onger dä Bedengunge vun de GNU General Public License (Alljemeine öffentlesche Lizänz) wi se vun de Free Software Foundation (de Schteftung för frei Projramme) veröffentlesch woode es. Dobei kanns De Der de Version 2 vun dä Lizanz ußsöhke, udder jeede Version donoh, wi et Der jefällt.\n\nDat Projramm weed wigger jejovve met dä Hoffnung, dat et jät nöz, ävver der ohne Jarrantie, sujaa der ohne de onußjeshproche Jarantie, verkoufbaa ze sin, udder för öhnds_ene beshtemmpte Zweck ze bruche ze sin.\nLiß de GNU General Public License sellver, öm mieh ze erfahre.\n\nDo sullts en Kopie vun dä alljemene öffentlesche Lizänz vun dä GNU (GNU General Public License) zosamme met heh däm Projramm krääje han. Wann dat nit esu es, schrief aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, udder [https://www.gnu.org/copyleft/gpl.html liß se online övver et Internet].", "config-sidebar": "* [https://www.mediawiki.org MediaWiki sing Hompäjdsch]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Handbohch för Aanwänder]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Handbohch för Administratohre un Wiki_Köbesse]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Öff jeschtallte Frohre met Antwoote]\n----\n* Liß Mesch! (Read me)\n* Release notes Övver heh di Projrammversion\n* Copying — Lizänzbeshtemmunge\n* Upgrading — Ob en neu Projrammversion jonn", "config-env-good": "De Ömjävvöng es jepröhf.\nDo kanns MehdijaWikki opsäze.", "config-env-bad": "De Ömjävong es jeprööf.\nDo kanns MehdijaWikki nit opsäze.", "config-env-php": "PHP $1 es doh.", "config-env-hhvm": "HHVM $1 es enschtalleerd.", - "config-unicode-using-intl": "För et Unicode-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz intl uss em PECL] nämme.", - "config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [http://pecl.php.net/intl Zohsaz intl uss em PECL] för et UNICODE-Nommalisehre nit fenge. Dröm nämme mer dat eijfache, ävver ärsch lahme, PHP-Projrammschtök doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch di Sigg övver et [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations UNICODE-Nommaliseere] (es op Änglesch) aanloore.", + "config-unicode-using-intl": "För et Unicode-Nommaliseere dom_mer dä [https://pecl.php.net/intl Zohsaz intl uss em PECL] nämme.", + "config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [https://pecl.php.net/intl Zohsaz intl uss em PECL] för et UNICODE-Nommalisehre nit fenge. Dröm nämme mer dat eijfache, ävver ärsch lahme, PHP-Projrammschtök doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch di Sigg övver et [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations UNICODE-Nommaliseere] (es op Änglesch) aanloore.", "config-unicode-update-warning": "'''Opjepaß:''' Dat Projramm för der Unicode zo normaliseere boud em Momang op en ählter Version vun dä Bibliothek vum [http://site.icu-project.org/ ICU-Projäk] op.\nDoht di [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations op der neuste Shtand bränge], wann auf dat Wiki em Äänz Unicode bruche sull.", "config-no-db": "Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.\nMer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.\nMer künne met heh dä {{PLURAL:$2|Daatebangk|Daatebangke|Daatebangk}} ömjonn: $1.\n\nWann De nit om eijene Rääshner bes, moß De Dinge provider bedde, dat hä Der ene zopaß Driiver enresht.\nWann de PHP sellver övversaz häs, donn e Zohjangsprojramm för en Daatebangk enbenge, för e Beishpell met: ./configure --with-mysqli.\nWann De PHP uss enem Debian udder Ubuntu Pakätt enjeresht häs, moß De dann och noch et php5-mysql op Dinge Räschner bränge.", "config-outdated-sqlite": "'''Opjepaß:''' SQLite $1 es enschtaleert. Avver MediaWiki bruch SQLite $2 udder hühter. SQLite kann dröm nit enjesaz wääde.", @@ -60,11 +60,10 @@ "config-pcre-no-utf8": "'''Dä:''' Et PHP-Modul PCRE schingk ohne de PCRE_UTF8-Aandeile övversaz ze sin.\nMediaWiki bruch dä UTF-8-Krohm ävver, öm ohne Fähler loufe ze künne.", "config-memory-raised": "Der jrühzte zohjelasse Shpeisherbedarf vum PHP, et memory_limit, shtund op $1 un es op $2 erop jesaz woode.", "config-memory-bad": "'''Opjepaß:''' Dem PHP singe Parameeter memory_limit es $1.\nDat es wall ze winnisch.\nEt Enreeschte kunnt doh draan kappott jon!", - "config-xcache": "Dä [http://xcache.lighttpd.net/ XCache] es ennjeresht.", "config-apc": "Dä [http://www.php.net/apc APC] es ennjeresht.", - "config-wincache": "Dä [http://www.iis.net/download/WinCacheForPhp WinCache] es ennjeresht.", + "config-wincache": "Dä [https://www.iis.net/download/WinCacheForPhp WinCache] es ennjeresht.", "config-no-cache-apcu": "'''Opjepaß:''' Mer kunnte dä [http://www.php.net/apcu APCu], dä [http://xcache.lighttpd.net/ XCache] udder dä [http://www.iis.net/download/WinCacheForPhp WinCache] nit fenge.\nEt object caching es nit müjjelesch un es ußjeschalldt.", - "config-mod-security": "Opjepaß: Dinge Wäbßööver hät [http://modsecurity.org/ mod_security] enjeschalldt. Jenohch schtandattmähßejje Enschtällonge heh em Wikki künne Problehme met MehdijaWikki un och met ander Projramme aanschtivvelle, di zohlohße, dat vun ußerhallef öhndsene Krohm op dä Webßööver jebraat wähde künnt.\nWann müjjelesch sullt mer dat affschallde. Söns beloor Der di Sigg [http://modsecurity.org/documentation/ mod_security documentation] udder donn met dä Fachlück för Dinge Webßööver kalle, wann zohfälleje un koomijje Fähler bemärke deihß.", + "config-mod-security": "Opjepaß: Dinge Wäbßööver hät [https://modsecurity.org/ mod_security] enjeschalldt. Jenohch schtandattmähßejje Enschtällonge heh em Wikki künne Problehme met MehdijaWikki un och met ander Projramme aanschtivvelle, di zohlohße, dat vun ußerhallef öhndsene Krohm op dä Webßööver jebraat wähde künnt.\nWann müjjelesch sullt mer dat affschallde. Söns beloor Der di Sigg [https://modsecurity.org/documentation/ mod_security documentation] udder donn met dä Fachlück för Dinge Webßööver kalle, wann zohfälleje un koomijje Fähler bemärke deihß.", "config-diff3-bad": "Mer han GNU diff3 nit jefonge.", "config-git": "Mer han de Väsjohn $1 vun däm Väsjohnsverwalldongsprojamm Git jefonge.", "config-git-bad": "Dat Väsjohnsverwalldongsprojamm Git ham_mer nit jefonge.", @@ -220,7 +219,7 @@ "config-license-gfdl": "De GNU-Lizänz för frei Dokemäntazjuhne, Version 1.3 udder en späädere", "config-license-pd": "Allmende (jemeinfrei, public domain)", "config-license-cc-choose": "En Creative Commons Lizänz, sellver ußjesöhk:", - "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsch onger en [http://freedomdefined.org/Definition freije Lizänz] schtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesch emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un dröm han well, dat mer för Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''Creative Commons, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''GNU Free Documentation License''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze verschtonn un et Wiggerjävve un widder Bruche es ens schwieerejer domet.", + "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsch onger en [https://freedomdefined.org/Definition freije Lizänz] schtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesch emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un dröm han well, dat mer för Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''Creative Commons, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''GNU Free Documentation License''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze verschtonn un et Wiggerjävve un widder Bruche es ens schwieerejer domet.", "config-email-settings": "Enschtellunge för de e-mail", "config-enable-email": "De e-mail noh druße zohlohße", "config-enable-email-help": "Sulle \ne-mails zohjelohße sin, moß mer, domet et noher flupp, dä Datteij [http://www.php.net/manual/en/mail.configuration.php Enschtällonge em PHP för de e-mail] zopaß jemaat han.\nWann kein e-mails nüüdesch sin, kam_mer se heh afschallde.", diff --git a/includes/installer/i18n/ku-latn.json b/includes/installer/i18n/ku-latn.json index b68b9d8fe6..dd2ba4646b 100644 --- a/includes/installer/i18n/ku-latn.json +++ b/includes/installer/i18n/ku-latn.json @@ -26,9 +26,8 @@ "config-page-upgradedoc": "Bilindkirin", "config-page-existingwiki": "Wîkiya heye", "config-restart": "Erê, jinûve bide destpêkirin", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] hate avakirin", "config-apc": "[http://www.php.net/apc APC] hate avakirin", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] hate avakirin", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] hate avakirin", "config-diff3-bad": "GNU diff3 nehate dîtin.", "config-db-type": "Cureya danegehê:", "config-db-wiki-settings": "Vî wîkîyê bide danasîn", diff --git a/includes/installer/i18n/lb.json b/includes/installer/i18n/lb.json index e795211477..66fb4cad0a 100644 --- a/includes/installer/i18n/lb.json +++ b/includes/installer/i18n/lb.json @@ -49,10 +49,9 @@ "config-no-db": "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.\n{{PLURAL:$2|Dësn Datebank-Typ gëtt|Dës Datebank-Type ginn}} ënnerstëtzt: $1.\n\nWann Dir PHP selwer compiléiert hutt, da rekonfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir ./configure --with-mysqli benotzt.\nWann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.", "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.", "config-memory-bad": "'''Opgepasst:''' De Parameter memory_limit vu PHP ass $1.\nDat ass wahrscheinlech ze niddreg.\nD'Installatioun kéint net funktionéieren.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] ass installéiert", "config-apc": "[http://www.php.net/apc APC] ass installéiert", "config-apcu": "[http://www.php.net/apcu APCu] ass installéiert.", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ass installéiert", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] ass installéiert", "config-diff3-bad": "GNU diff3 gouf net fonnt.", "config-git": "D'Software Git fir d'Kontroll vu Versioune gouf fonnt: $1.", "config-git-bad": "D'Software fir d'Kontroll vun de Versiounen 'Git' gouf net fonnt.", diff --git a/includes/installer/i18n/lij.json b/includes/installer/i18n/lij.json index 0ecc09781a..7a7ed57c66 100644 --- a/includes/installer/i18n/lij.json +++ b/includes/installer/i18n/lij.json @@ -41,14 +41,14 @@ "config-help-restart": "Ti voeu scassâ tutti i dæti sarvæ che ti t'hæ inseio e riavviâ o processo de installaçion?", "config-restart": "Scì, riavvia", "config-welcome": "=== Controllo de l'ambiente ===\nSaiâ eseguio di controlli de base pe vedde se questo ambiente o l'è adatto pe l'installaçion de MediaWiki.\nRegordite de includde queste informaçioin se ti domandi ascistença insce comme completâ l'installaçion.", - "config-copyright": "=== Copyright e termini ===\n\n$1\n\nQuesto programma o l'è un software libero; ti poeu redistriboîlo e/ò modificâlo segondo i termi da GNU General Public License, comme pubbricâ da-a Free Software Foundation; ò a verscion 2 da Liçença ò (a proppia scelta) qualunque verscion succesciva.\n\nQuesto programma o l'è distribuio inta sperança ch'o segge utile, ma SENSA ARCUNA GARANTIA; sença manco a garantia impliçita de NEGOSSIABILITÆ o de APPRICABILITÆ PE UN PARTICOL SCOPO.\nS'amie a GNU General Public License pe maggioî dettaggi.\n\nQuesto programma o dev'ese distribuio insemme a una copia da GNU General Public License; in caxo contraio, se ne poeu otegnî un-a scrivendo a-a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oppù [http://www.gnu.org/copyleft/gpl.html lezila inta ræ'].", + "config-copyright": "=== Copyright e termini ===\n\n$1\n\nQuesto programma o l'è un software libero; ti poeu redistriboîlo e/ò modificâlo segondo i termi da GNU General Public License, comme pubbricâ da-a Free Software Foundation; ò a verscion 2 da Liçença ò (a proppia scelta) qualunque verscion succesciva.\n\nQuesto programma o l'è distribuio inta sperança ch'o segge utile, ma SENSA ARCUNA GARANTIA; sença manco a garantia impliçita de NEGOSSIABILITÆ o de APPRICABILITÆ PE UN PARTICOL SCOPO.\nS'amie a GNU General Public License pe maggioî dettaggi.\n\nQuesto programma o dev'ese distribuio insemme a una copia da GNU General Public License; in caxo contraio, se ne poeu otegnî un-a scrivendo a-a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oppù [https://www.gnu.org/copyleft/gpl.html lezila inta ræ'].", "config-sidebar": "* [https://www.mediawiki.org Paggina prinçipâ MediaWiki]\n* [https://www.mediawiki.org/wiki/Agiutto:Guidda a-i contegnui pe utenti]\n* [https://www.mediawiki.org/wiki/Manoâ:Guidda ai contegnui per admin]\n* [https://www.mediawiki.org/wiki/Manoâ:FAQ FAQ]\n----\n* Lezime\n* Notte de verscion\n* Copie\n* Aggiornamenti", "config-env-good": "L'ambiente o l'è stæto controllou.\nL'è poscibile installâ MediaWiki.", "config-env-bad": "L'ambiente o l'è stæto controllou.\nNon l'è poscibbile installâ MediaWiki.", "config-env-php": "PHP $1 o l'è installou.", "config-env-hhvm": "HHVM $1 o l'è installou.", - "config-unicode-using-intl": "Adoeuvia [http://pecl.php.net/intl l'estenscion PECL intl] pe-a normalizzaçion Unicode.", - "config-unicode-pure-php-warning": "'''Attençion:''' [http://pecl.php.net/intl l'estenscion PECL intl] a no l'è disponibile pe gestî a normalizzaçion Unicode, quindi se torna a-a lenta implementaçion in PHP puo.\nSe ti esegui un scito a ato traffego, ti doviesci leze arcun-e conscidiaçioin in sciâ [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaçion Unicode].", + "config-unicode-using-intl": "Adoeuvia [https://pecl.php.net/intl l'estenscion PECL intl] pe-a normalizzaçion Unicode.", + "config-unicode-pure-php-warning": "'''Attençion:''' [https://pecl.php.net/intl l'estenscion PECL intl] a no l'è disponibile pe gestî a normalizzaçion Unicode, quindi se torna a-a lenta implementaçion in PHP puo.\nSe ti esegui un scito a ato traffego, ti doviesci leze arcun-e conscidiaçioin in sciâ [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaçion Unicode].", "config-unicode-update-warning": "'''Attençion:''' a verscion installaa do gestô pe-a normalizzaçion Unicode a l'adoeuvia una vegia verscion da libraia [http://site.icu-project.org/ do progetto ICU].\nTi doviesci [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aggiornâ] se ti voeu doeuviâ l'Unicode.", "config-no-db": "Imposcibile trovâ un driver adatto pe-o database! L'è necessaio installâ un driver pe PHP.\n{{PLURAL:$2|O seguente formato de database o l'è supportou|I seguenti formati de database son supportæ}}: $1.\n\nSe ti compilli PHP aotonomamente, riconfiguilo attivando un client database, presempio utilizzando ./configure --with-mysqli.\nQualoa t'avesci installou PHP pe mezo de 'n pacchetto Debian ò Ubuntu, alloa ti devi installâ o pacchetto php5-mysql ascì.", "config-outdated-sqlite": "'''Atençion''': ti g'hæ SQLite $1, ma te ghe voeu comme minnimo a verscion $2. SQLite o no saiâ disponibile.", @@ -57,12 +57,11 @@ "config-pcre-no-utf8": "'''Fatale''': o modulo PCRE de PHP pâ ch'o segge stæto compilou sença o supporto PCRE_UTF8. A MediaWiki a-o richiede pe fonçionâ corettamente.", "config-memory-raised": "O valô memory_limit de PHP o l'è $1, aomentou a $2.", "config-memory-bad": "''Atençion:''' O valô de memory_limit do PHP o l'è $1.\nFoscia o l'è troppo basso.\nL'installaçion a porriæ fallî!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] o l'è installou", "config-apc": "[http://www.php.net/apc APC] o l'è installou", "config-apcu": "[http://www.php.net/apc APC] o l'è installou", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] o l'è installou", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] o l'è installou", "config-no-cache-apcu": "'''Atençion:''' [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ò [http://www.iis.net/download/WinCacheForPhp WinCache] no son stæti trovæ.\nA caching di ogetti a no l'è attivâ.", - "config-mod-security": "Atençion: O to serviou web o g'ha o [http://modsecurity.org/ mod_security] abilitou. Gh'è tante configuaçioin che crean di problemi a-a MediaWiki ò a atro software ch'o permette a-i utenti de pubbricâ quâ-se-segge contegnuo. Se poscibbile o doviæ ese disabilitou.\nFanni rifeimento a-a [http://modsecurity.org/documentation/ documentaçion insce-o mod_security] ò contatta o supporto tecnico do to provider de hosting se se veifica di erroî.", + "config-mod-security": "Atençion: O to serviou web o g'ha o [https://modsecurity.org/ mod_security] abilitou. Gh'è tante configuaçioin che crean di problemi a-a MediaWiki ò a atro software ch'o permette a-i utenti de pubbricâ quâ-se-segge contegnuo. Se poscibbile o doviæ ese disabilitou.\nFanni rifeimento a-a [https://modsecurity.org/documentation/ documentaçion insce-o mod_security] ò contatta o supporto tecnico do to provider de hosting se se veifica di erroî.", "config-diff3-bad": "GNU diff3 non trovou.", "config-git": "Trovou software de controllo da verscion Git: $1.", "config-git-bad": "Software de controllo da verscion Git non trovou.", @@ -216,7 +215,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 o verscioin sucescive", "config-license-pd": "Pubbrico dominnio", "config-license-cc-choose": "Seleçion-a un-a de liçençie Creative Commons", - "config-license-help": "Tante wiki pubbriche rilascian i so contributi co-ina [http://freedomdefined.org/Definition liçençia libbera]. Sto fæto o l'agiutta a creâ un senso de propietæ condivisa inta comunitæ e o l'incoragisce a contriboî a longo termine. O no l'è generalmente necessaio pe 'na wiki privâ ò aziendale.\n\nSe ti voeu doeuviâ di scriti da Wikipedia, ò ti dexiddei che a Wikipedia a posse vese in graddo de acetâ di scriti copiæ da-a to wiki, ti doviesci scellie {{int:config-license-cc-by-sa}}.\n\nIn precedença a Wikipedia a l'ha doeuviou a GNU Free Documentation License. A GFDL a l'è 'na liçençia vallida, ma a l'è difiççile da capî e a complica o riutilizzo di contegnui.", + "config-license-help": "Tante wiki pubbriche rilascian i so contributi co-ina [https://freedomdefined.org/Definition liçençia libbera]. Sto fæto o l'agiutta a creâ un senso de propietæ condivisa inta comunitæ e o l'incoragisce a contriboî a longo termine. O no l'è generalmente necessaio pe 'na wiki privâ ò aziendale.\n\nSe ti voeu doeuviâ di scriti da Wikipedia, ò ti dexiddei che a Wikipedia a posse vese in graddo de acetâ di scriti copiæ da-a to wiki, ti doviesci scellie {{int:config-license-cc-by-sa}}.\n\nIn precedença a Wikipedia a l'ha doeuviou a GNU Free Documentation License. A GFDL a l'è 'na liçençia vallida, ma a l'è difiççile da capî e a complica o riutilizzo di contegnui.", "config-email-settings": "Impostaçioin e-mail", "config-enable-email": "Abillita a sciortia da posta elettronica", "config-enable-email-help": "Se ti voeu che fonçion-e l'e-mail, e [http://www.php.net/manual/en/mail.configuration.php PHP's impostaçioin della posta] dev'esan configuæ corettamente.\nSe non ti dexiddei arcun-a fonçionalitæ de posta eletronnica, ti a poeu disabilitâ chie.", diff --git a/includes/installer/i18n/lki.json b/includes/installer/i18n/lki.json index 45f1331436..9547e423b0 100644 --- a/includes/installer/i18n/lki.json +++ b/includes/installer/i18n/lki.json @@ -44,14 +44,14 @@ "config-help-restart": "آیا می‌خواهید همهٔ اطلاعات ذخیره شده‌ای که وارد کرده‌اید را پاک کنید و دوباره روند نصب را شروع کنید؟", "config-restart": "أرێ، دوواره راه‌اندازی Ú©Ø©", "config-welcome": "===بررسی‌های محیطی===\nبرای فهمیدن اینکه این محیط برای نصب مدیاویکی مناسب است، اکنون بررسی‌های اساسی انجام خواهد‌شد.\nاگر به دنبال پشتیبانی در چگونگی تکمیل نصب هستید،به یاد داشته باشید این اطلاعات را بگنجانید.", - "config-copyright": "===حق چاپ و شرایط===\n$1\nاین برنامه، یک نرم‌افزاری آزاد است. شما می‌توانید آن را بازتوزیع کرده و/یا با شرایط نگارش Û² یا (با نظر خودتان) هر نگارش جدیدتری از پروانه جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده، تغییر دهید.\n\nاین برنامه با امید این که مفید واقع‌ شود توزیع شده‌است،اما '''بدون هیچ ضمانتی'''; حتی بدون اشارهٔ ضمانتی از '''قابلیت عرضه''' یا ''' صلاحیت برای یک هدف خاص'''.\nبرای جزئیات بیش‌تر پروانه جامع همگانی گنو را مشاهده کنید.\n\nشما باید یک نگارش ازمجوز عمومی کلی همراه این برنامه دریافت کرده باشید. در غیر این صورت با بنیاد نرم‌افزار آزاد، ایالات متحده امریکا، بوستون، خیابان فرانکلین، پلاک ۵۱، طبقه پنجم، صندوق پستی MAÛ°Û²Û±Û±Û°-Û±Û³Û° مکاتبه کنید، یا [http://www.gnu.org/copyleft/gpl.html در این‌جا به صورت برخط بخوانید].", + "config-copyright": "===حق چاپ و شرایط===\n$1\nاین برنامه، یک نرم‌افزاری آزاد است. شما می‌توانید آن را بازتوزیع کرده و/یا با شرایط نگارش Û² یا (با نظر خودتان) هر نگارش جدیدتری از پروانه جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده، تغییر دهید.\n\nاین برنامه با امید این که مفید واقع‌ شود توزیع شده‌است،اما '''بدون هیچ ضمانتی'''; حتی بدون اشارهٔ ضمانتی از '''قابلیت عرضه''' یا ''' صلاحیت برای یک هدف خاص'''.\nبرای جزئیات بیش‌تر پروانه جامع همگانی گنو را مشاهده کنید.\n\nشما باید یک نگارش ازمجوز عمومی کلی همراه این برنامه دریافت کرده باشید. در غیر این صورت با بنیاد نرم‌افزار آزاد، ایالات متحده امریکا، بوستون، خیابان فرانکلین، پلاک ۵۱، طبقه پنجم، صندوق پستی MAÛ°Û²Û±Û±Û°-Û±Û³Û° مکاتبه کنید، یا [https://www.gnu.org/copyleft/gpl.html در این‌جا به صورت برخط بخوانید].", "config-sidebar": "* [https://www.mediawiki.org وةڵگة اصلی مدیاویکی]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents راهنمای کاربر]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents راهنمای مدیر]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ پرسش‌های رایج]\n----\n* مرا بخوان\n* یادداشت‌های انتشار\n* نسخه برداری\n* ارتقا", "config-env-good": "محیط بررسی شده‌است.\nشما می‌توانید مدیاویکی را نصب کنید.", "config-env-bad": "محیط بررسی شده‌است.\nشما نمی‌توانید مدیاویکی را نصب کنید.", "config-env-php": "پی‌اچ‌پی $1 نصب شده‌است.", "config-env-hhvm": "HHVM $1 نصب شده‌است.", - "config-unicode-using-intl": "برای یونیکد عادی از [http://pecl.php.net/intl intl PECL extension] استفاده کنید.", - "config-unicode-pure-php-warning": "'''هشدار:''' [http://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.", + "config-unicode-using-intl": "برای یونیکد عادی از [https://pecl.php.net/intl intl PECL extension] استفاده کنید.", + "config-unicode-pure-php-warning": "'''هشدار:''' [https://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.", "config-unicode-update-warning": "'''هشدار:''' نسخهٔ نصب شدهٔ پوشهٔ یونیکد عادی از ورژن قدیمی‌تر کتابخانه [http://site.icu-project.org/ the ICU project's] استفاده می‌کند.\nاگر کلاً علاقه‌مند به استفاده از یونیکد هستید باید [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade].", "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب {{PLURAL:$2|سوأل کنید.|پرسش کنید.}}\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از ./configure --with-mysqli استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.", "config-outdated-sqlite": "''' هشدار:''' شما اس‌کیولایت $1 دارید، که پایین‌تر از حداقل نسخهٔ $2 مورد نیاز است.اس‌کیولایت در دسترس نخواهد بود.", diff --git a/includes/installer/i18n/lt.json b/includes/installer/i18n/lt.json index 07e4c907fe..4506139f9e 100644 --- a/includes/installer/i18n/lt.json +++ b/includes/installer/i18n/lt.json @@ -52,10 +52,9 @@ "config-env-hhvm": "HHVM $1 yra įdiegtas.", "config-outdated-sqlite": "Ä®spėjimas: jÅ«s turite SQLite $1, kuri yra mažesnė nei minimali reikalinga versija $2. SQLite nebus prieinama.", "config-memory-raised": "PHP memory_limit yra $1, padidintas iki $2.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] yra įdiegtas", "config-apc": "[http://www.php.net/apc APC] yra įdiegtas", "config-apcu": "[http://www.php.net/apcu APCu] yra įdiegtas", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] yra įdiegtas", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] yra įdiegtas", "config-no-cache-apcu": "Ä®spėjimas: Nepavyko rasti [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObjekto spartinimas neįjungtas.", "config-diff3-bad": "GNU diff3 nerastas.", "config-git": "Rasta Git versijų kontrolės sistema: $1.", diff --git a/includes/installer/i18n/mg.json b/includes/installer/i18n/mg.json index 2a270fc3ff..44930c5123 100644 --- a/includes/installer/i18n/mg.json +++ b/includes/installer/i18n/mg.json @@ -37,14 +37,14 @@ "config-help-restart": "Tianao hofafana avokoa ve ny data voaangona natsofokao ary hamerina ny fizotran'ny fametrahana ?", "config-restart": "Eny, avereno atao", "config-welcome": "=== Fanamarinana mikasika ny tontolo ===\nNy fanamarihana tsotsotra dia atao hijerena raha mety ho ana rindrankajy Mediawiki ny tontolo.\nTadidio ny mametraka ireto torohay ireo raha mitady fanohanana mikasika ny fomba famaranana ny fametrahana ianao.", - "config-copyright": "== Zom-pamorona ary fepetra ==\n\n$1\n\n\nIo fandaharana dia rindrambaiko maimaim-poana; dia afaka zarazarain ary ovaina araka ny fepetra ao amin'ny GNU General Public License navoakan'ny Free Software Foundation; na versiona 2 ao amin'ny lisansa, na (araka ny safidinao) versiona tatỳ aoriana.\n\nIo fandaharaa io dia zaraina amin'ny fanantenana fa ho ilaina, anefa kosa dia tsy misy fiantohana; tsy misy fiantohana mikasika ny fivarotana azy na famendrehana ho azo ampiasaina amin'ny tranga iray manokana.\nJereo ny GNU General Public License hahazoana zavatra amin'ny antsipiriany.\n\nIanao dia tokony nandray kôpian'nyGNU General Public License miaraka amin'ny fandaharana ity; raha tsy izany, manorata any amin'ny Free Software Foundation, Inc., 51 Franklin Street, Fahadimy Floor, Boston, MA 02110-1301, USA, na [http://www.gnu.org/copyleft/gpl.html vakio ao amin'ny Internet izany].", + "config-copyright": "== Zom-pamorona ary fepetra ==\n\n$1\n\n\nIo fandaharana dia rindrambaiko maimaim-poana; dia afaka zarazarain ary ovaina araka ny fepetra ao amin'ny GNU General Public License navoakan'ny Free Software Foundation; na versiona 2 ao amin'ny lisansa, na (araka ny safidinao) versiona tatỳ aoriana.\n\nIo fandaharaa io dia zaraina amin'ny fanantenana fa ho ilaina, anefa kosa dia tsy misy fiantohana; tsy misy fiantohana mikasika ny fivarotana azy na famendrehana ho azo ampiasaina amin'ny tranga iray manokana.\nJereo ny GNU General Public License hahazoana zavatra amin'ny antsipiriany.\n\nIanao dia tokony nandray kôpian'nyGNU General Public License miaraka amin'ny fandaharana ity; raha tsy izany, manorata any amin'ny Free Software Foundation, Inc., 51 Franklin Street, Fahadimy Floor, Boston, MA 02110-1301, USA, na [https://www.gnu.org/copyleft/gpl.html vakio ao amin'ny Internet izany].", "config-sidebar": "* [https://www.mediawiki.org MediaWiki fandraisana]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Torolalan'ny mampiasa]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Torolalan'ny mpandrindra]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Fanontaniana mipetraka matetika]\n----\n* Vakio aho\n* Naoty famoahana\n* Fandikàna\n* Fampihatsaràna", "config-env-good": "Voamarina ny tontolo.\nAfaka apetrakao i MediaWiki.", "config-env-bad": "Voamarina ny tontolo.\nTsy afaka mametraka an'i MediaWiki ianao.", "config-env-php": "Misy ato PHP $1.", "config-env-hhvm": "Misy ato HHVM $1.", - "config-unicode-using-intl": "Mampiasa ny [http://pecl.php.net/intl itatra PECL intl] ho an'ny fampifenerana Unicode.", - "config-unicode-pure-php-warning": "Fampitandremana: Ny [http://pecl.php.net/intl itatra PECL intl] dia tsy misy mba hahazakana ny fampifenerana Unicode, ka mitontona amin'ny implementasiona PHP ranoray noho ny tsifisiany.\nRaha hametraka tranonkala be mpamangy ianao dia tokony mamaky ny [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (amin'ny teny anglisy)", + "config-unicode-using-intl": "Mampiasa ny [https://pecl.php.net/intl itatra PECL intl] ho an'ny fampifenerana Unicode.", + "config-unicode-pure-php-warning": "Fampitandremana: Ny [https://pecl.php.net/intl itatra PECL intl] dia tsy misy mba hahazakana ny fampifenerana Unicode, ka mitontona amin'ny implementasiona PHP ranoray noho ny tsifisiany.\nRaha hametraka tranonkala be mpamangy ianao dia tokony mamaky ny [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (amin'ny teny anglisy)", "config-db-type": "Karazana banky angona:", "config-db-host": "Anaran'ny lohamilin'ny banky angona:", "config-db-host-help": "Raha lohamila hafa ny lohamilin'ny banky angona, dia atsofohy eto ny anaran'ilay lohamilina na ny adiresy IP-ny.\n\nRaha mampiasa fampiantranoana iombonana ianao dia tokony hanome anao ny anaran-dohamilina izy ao amin'ny toromariny.\n\nRaha mametraka amin'ny lohamilina Windows ianao sady mampiasa MySQL, dia mety tsy mandeha ny anaran-dohamilina \"localhost\". Raha tsy mandeha ilay izy dia \"127.0.0.1\" no atao adiresy IP an-toerana.\n\nRaha mampiasa PostgreSQL ianao, dia avelaho ho fotsy ity saha ity ahafahana mifandray amin'ny alalan'ny socket Unix.", diff --git a/includes/installer/i18n/mk.json b/includes/installer/i18n/mk.json index ee5bb8de23..a9ae2fe12e 100644 --- a/includes/installer/i18n/mk.json +++ b/includes/installer/i18n/mk.json @@ -44,14 +44,14 @@ "config-help-restart": "Дали сакате да ги исчистите сите зачувани податоци што ги внесовте и да ја започнете воспоставката одново?", "config-restart": "Да, почни одново", "config-welcome": "=== Проверки на околината ===\nСега ќе се извршиме основни проверки за да се востанови дали околината е погодна за воспоставкa на МедијаВики. Не заборавајте да ги приложите овие информации ако барате помош со довршување на воспоставката.", - "config-copyright": "=== Авторски права и услови ===\n\n$1\n\nОва е слободна програмска опрема (free software); можете да го редистрибуирате и/или менувате согласно условите на ГНУ-овата општа јавна лиценца (GNU General Public License) на Фондацијата за слободна програмска опрема (Free Software Foundation); верзија 2 или било која понова верзија на лиценцата (по ваш избор).\n\nОвој програм се нуди со надеж дека ќе биде корисен, но '''без никаква гаранција'''; дури ни подразбраната гаранција за '''продажна способност''' или '''погодност за определена цел'''.\nПовеќе информации ќе најдете во текстот на ГНУ-овата општа јавна лиценца.\n\nБи требало да имате добиено примерок од ГНУ-овата општа јавна лиценца заедно со програмов; ако немате добиено, тогаш пишете ни на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или [http://www.gnu.org/copyleft/gpl.html прочитајте ја тука].", + "config-copyright": "=== Авторски права и услови ===\n\n$1\n\nОва е слободна програмска опрема (free software); можете да го редистрибуирате и/или менувате согласно условите на ГНУ-овата општа јавна лиценца (GNU General Public License) на Фондацијата за слободна програмска опрема (Free Software Foundation); верзија 2 или било која понова верзија на лиценцата (по ваш избор).\n\nОвој програм се нуди со надеж дека ќе биде корисен, но '''без никаква гаранција'''; дури ни подразбраната гаранција за '''продажна способност''' или '''погодност за определена цел'''.\nПовеќе информации ќе најдете во текстот на ГНУ-овата општа јавна лиценца.\n\nБи требало да имате добиено примерок од ГНУ-овата општа јавна лиценца заедно со програмов; ако немате добиено, тогаш пишете ни на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или [https://www.gnu.org/copyleft/gpl.html прочитајте ја тука].", "config-sidebar": "* [https://www.mediawiki.org Домашна страница на МедијаВики]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Водич за корисници]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Водич за администратори]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧПП]\n----\n* Прочитај ме\n* Белешки за изданието\n* Копирање\n* Надградување", "config-env-good": "Околината е проверена.\nМожете да го воспоставите МедијаВики.", "config-env-bad": "Околината е проверена.\nНе можете да го воспоставите МедијаВики.", "config-env-php": "PHP $1 е воспоставен.", "config-env-hhvm": "HHVM $1 е воспоставен.", - "config-unicode-using-intl": "Со додатокот [http://pecl.php.net/intl intl PECL] за уникодна нормализација.", - "config-unicode-pure-php-warning": "'''Предупредување''': Додатокот [http://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP.\n\nАко имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations уникодната нормализација].", + "config-unicode-using-intl": "Со додатокот [https://pecl.php.net/intl intl PECL] за уникодна нормализација.", + "config-unicode-pure-php-warning": "'''Предупредување''': Додатокот [https://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP.\n\nАко имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations уникодната нормализација].", "config-unicode-update-warning": "'''Предупредување:''' Воспоставената верзија на обвивката за уникодна нормализација користи постара верзија на библиотеката на [http://site.icu-project.org/ проектот ICU].\nЗа да користите Уникод, ќе треба да направите [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations надградба].", "config-no-db": "Не можев да најдам соодветен двигател за базата на податоци! Ќе треба да воспоставите двигател за PHP-база.\n{{PLURAL:$2|Поддржан се следниов вид|Поддржани се следниве видови}} бази: $1.\n\nДоколку самите го срочивте овој PHP, овозможете го базниот клиент во поставките — на пр. со ./configure --with-mysqli.\nАко овој PHP го воспоставите од пакет на Debian или Ubuntu, тогаш ќе треба исто така да го воспоставите, на пр., пакетот php5-mysql.", "config-outdated-sqlite": "'''Предупредување''': имате SQLite $1. Најстарата допуштена верзија е $2. Затоа, SQLite ќе биде недостапен.", @@ -60,12 +60,11 @@ "config-pcre-no-utf8": "Кобно: PCRE-модулот на PHP е срочен без поддршка за PCRE_UTF8.\nМедијаВики бара поддршка за UTF-8 за да може да работи правилно.", "config-memory-raised": "memory_limit за PHP изнесува $1, зголемен на $2.", "config-memory-bad": "Предупредување: memory_limit за PHP изнесува $1.\nОва е веројатно премалку.\nВоспоставката може да не успее!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] е воспоставен", "config-apc": "[http://www.php.net/apc APC] е воспоставен", "config-apcu": "[http://www.php.net/apcu APCu] е воспоставен", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] е воспоставен", - "config-no-cache-apcu": "Предупредување: Не можев да го најдам [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nМеѓускладирањето на објекти не е овозможено", - "config-mod-security": "'''Предупредување''': на вашиот опслужувач има овозможено [http://modsecurity.org/ mod_security]. Ако не е поставено како што треба, ова може да предизвика проблеми кај МедијаВики и други програми што им овозможуваат на корисниците да објавуваат произволни содржини.\nПогледнете ја [http://modsecurity.org/documentation/ mod_security документацијата] или обратете се кај домаќинот ако наидете на случајни грешки.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] е воспоставен", + "config-no-cache-apcu": "Предупредување: Не можев да го најдам [http://www.php.net/apcu APCu] или [http://www.iis.net/download/WinCacheForPhp WinCache].", + "config-mod-security": "'''Предупредување''': на вашиот опслужувач има овозможено [https://modsecurity.org/ mod_security]. Ако не е поставено како што треба, ова може да предизвика проблеми кај МедијаВики и други програми што им овозможуваат на корисниците да објавуваат произволни содржини.\nПогледнете ја [https://modsecurity.org/documentation/ mod_security документацијата] или обратете се кај домаќинот ако наидете на случајни грешки.", "config-diff3-bad": "GNU diff3 не е пронајден.", "config-git": "Го пронајдов Git програмот за контрола на верзии: $1.", "config-git-bad": "Не го пронајдов Git-програмот за контрола на верзии.", @@ -223,7 +222,7 @@ "config-license-gfdl": "ГНУ-ова лиценца за слободна документација 1.3 или понова", "config-license-pd": "Јавна сопственост", "config-license-cc-choose": "Одберете друга лиценца на Криејтив комонс по ваш избор", - "config-license-help": "Многу јавни викија ги ставаат сите придонеси под [http://freedomdefined.org/Definition слободна лиценца].\nСо ова се создава атмосфера на општа сопственост и поттикнува долгорочно учество.\nОва не е неопходно за викија на поединечни физички или правни лица.\n\nАко сакате да користите текст од Википедија, и сакате Википедија да прифаќа текст прекопиран од вашето вики, тогаш треба да ја одберете лиценцата {{int:config-license-cc-by-sa}}..\n\nГНУ-овата лиценца за слободна документација (ГЛСД) е старата лиценца на Википедија.\nОваа лиценца сè уште важи, но е тешка за разбирање.\nИсто така треба да се има на ум дека пренамената на содржините под ГЛСД не е лесна.", + "config-license-help": "Многу јавни викија ги ставаат сите придонеси под [https://freedomdefined.org/Definition слободна лиценца].\nСо ова се создава атмосфера на општа сопственост и поттикнува долгорочно учество.\nОва не е неопходно за викија на поединечни физички или правни лица.\n\nАко сакате да користите текст од Википедија, и сакате Википедија да прифаќа текст прекопиран од вашето вики, тогаш треба да ја одберете лиценцата {{int:config-license-cc-by-sa}}..\n\nГНУ-овата лиценца за слободна документација (ГЛСД) е старата лиценца на Википедија.\nОваа лиценца сè уште важи, но е тешка за разбирање.\nИсто така треба да се има на ум дека пренамената на содржините под ГЛСД не е лесна.", "config-email-settings": "Нагодувања за е-пошта", "config-enable-email": "Овозможи излезна е-пошта", "config-enable-email-help": "Ако сакате да работи е-поштата, [http://www.php.net/manual/en/mail.configuration.php поштенските нагодувања на PHP] треба да се правилно наместени.\nАко воопшто не сакате никакви функции за е-пошта, тогаш можете да ги оневозможите тука.", @@ -253,7 +252,7 @@ "config-cache-options": "Нагодувања за меѓускладирање на објекти:", "config-cache-help": "Меѓускладирањето на објекти се користи за зголемување на брзината на МедијаВики со меѓускладирање на често употребуваните податоци.\nОва многу се препорачува на средни до големи викија, но од тоа ќе имаат полза и малите викија.", "config-cache-none": "Без меѓускладирање (не се остранува ниедна функција, но може да влијае на брзината кај поголеми викија)", - "config-cache-accel": "Меѓускладирање на PHP-објекти (APC, APCu, XCache или WinCache)", + "config-cache-accel": "Меѓускладирање на PHP-објекти (APC, APCu или WinCache)", "config-cache-memcached": "Користи Memcached (бара дополнително поставување и нагодување)", "config-memcached-servers": "Memcached-опслужувачи:", "config-memcached-help": "Список на IP-адреси за употреба во Memcached.\nТреба да се наведе по една во секој ред, како и портата што ќе се користи. На пример:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/mr.json b/includes/installer/i18n/mr.json index d3e0e173ca..8e7cbee327 100644 --- a/includes/installer/i18n/mr.json +++ b/includes/installer/i18n/mr.json @@ -42,19 +42,18 @@ "config-help-restart": "आपण टाकून जतन केलेला सर्व डाटा आपणास साफ करावयाचा व उभारणीची प्रक्रिया पुन्हा सुरू करावयाची आहे काय?", "config-restart": "होय, परत चालू करा", "config-welcome": "=== पारिसरीक तपासण्या ===\nमिडियाविकिच्या उभारणीस हा परिसर योग्य आहे काय याच्या मूळ तपासण्या आता केल्या जातील.\nजर आपणास पुढे याची उभारणी करण्याबद्दल साहाय्य लागल्यास, याचा अंतर्भाव करणे लक्षात ठेवा.", - "config-copyright": "=== प्रताधिकार व अटी ===\n\n$1\nहा कार्यसंच,हे एक मुक्त संचेतन आहे;आपण त्यास पुनर्वितरीत व/किंवा त्यास फ्री सॉफ्टवेअर फाऊंडेशन द्वारे प्रकाशित, GNU जनरल पब्लिक लायसन्स अंतर्गत बदलु शकता;या परवान्याची आवृत्ती २ किंवा (आपल्या इच्छेनुसार)त्यानंतरची आवृत्ती.\n\nहा कार्यसंचाचे वितरण,पण, कोणत्याही हमीशिवाय; याशिवाय व्यापारीकरणाच्या कोणत्याही अभिप्रेत आश्वासनाशिवाय किंवा एखाद्या विशिष्ट कार्यासाठीच्या अर्हतेशिवायही आशा ठेऊन केले आहे कि, तो उपयोगी असेल.\nअधिक माहितीसाठी GNU जनरल पब्लिक लायसन्स बघा.\nआपणास या कार्यसंचासमवेत GNU जनरल पब्लिक लायसन्सची प्रत मिळाली असेल,नसल्यास,फ्री सॉफ्टवेअर फाऊंडेशनला या पत्त्यावर लिहा.Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. किंवा त्यास [http://www.gnu.org/copyleft/gpl.html ऑनलाईन वाचा].", + "config-copyright": "=== प्रताधिकार व अटी ===\n\n$1\nहा कार्यसंच,हे एक मुक्त संचेतन आहे;आपण त्यास पुनर्वितरीत व/किंवा त्यास फ्री सॉफ्टवेअर फाऊंडेशन द्वारे प्रकाशित, GNU जनरल पब्लिक लायसन्स अंतर्गत बदलु शकता;या परवान्याची आवृत्ती २ किंवा (आपल्या इच्छेनुसार)त्यानंतरची आवृत्ती.\n\nहा कार्यसंचाचे वितरण,पण, कोणत्याही हमीशिवाय; याशिवाय व्यापारीकरणाच्या कोणत्याही अभिप्रेत आश्वासनाशिवाय किंवा एखाद्या विशिष्ट कार्यासाठीच्या अर्हतेशिवायही आशा ठेऊन केले आहे कि, तो उपयोगी असेल.\nअधिक माहितीसाठी GNU जनरल पब्लिक लायसन्स बघा.\nआपणास या कार्यसंचासमवेत GNU जनरल पब्लिक लायसन्सची प्रत मिळाली असेल,नसल्यास,फ्री सॉफ्टवेअर फाऊंडेशनला या पत्त्यावर लिहा.Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. किंवा त्यास [https://www.gnu.org/copyleft/gpl.html ऑनलाईन वाचा].", "config-sidebar": "* [https://www.mediawiki.org मिडियाविकि गृह]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents सदस्य मार्गदर्शिका]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents प्रशासकाची मार्गदर्शिका]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ एफएक्यू]\n----\n* रीड मी\n* विमोचन टिप्पण्या\n* नकलविणे\n* दर्जोन्नती करणे", "config-env-good": "पारिसरीक तपासणी झाली आहे.\nआपण मिडियाविकि उभारू शकता.", "config-env-bad": "पारिसरीक तपासणी झाली आहे.\nआपण मिडियाविकि उभारू शकत नाही.", "config-env-php": "PHP $1 उभारल्या गेली.", "config-env-hhvm": "HHVM $1 उभारल्या गेली.", - "config-unicode-using-intl": "यूनिकोड सामान्यिकरणासाठी [http://pecl.php.net/intl intl PECL विस्तारक] वापरत आहे.", + "config-unicode-using-intl": "यूनिकोड सामान्यिकरणासाठी [https://pecl.php.net/intl intl PECL विस्तारक] वापरत आहे.", "config-outdated-sqlite": "इशारा: आपणापाशी SQLite $1 आहे, जी किमान आवश्यक आवृत्ती $2 पेक्षा, निम्न आहे. SQLite अनुपलब्ध राहील.", "config-memory-raised": "पीएचपीची memory_limit ही $1 आहे, त्यास $2 ला वाढविली.", "config-memory-bad": "पीएचपीची memory_limit ही $1 आहे.\nही बरीच खालच्या स्तरावरची आहे.\nउभारणी अयशस्वी होऊ शकते!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] उभारली", "config-apc": "[http://www.php.net/apc APC] उभारली आहे", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] उभारली आहे", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] उभारली आहे", "config-diff3-bad": "GNU diff3 सापडली नाही.", "config-git-bad": "गीट आवृत्ती नियमन संचेतन सापडली नाही.", "config-db-type": "डाटाबेसचा प्रकार:", diff --git a/includes/installer/i18n/ms.json b/includes/installer/i18n/ms.json index 61acd3ecf6..c848c4235f 100644 --- a/includes/installer/i18n/ms.json +++ b/includes/installer/i18n/ms.json @@ -47,21 +47,20 @@ "config-help-restart": "Adakah anda ingin untuk membersihkan semua data yang disimpan yang anda telah masukkan dan memulakan semula proses pemasangan?", "config-restart": "Ya, mula semula", "config-welcome": "=== Pemeriksaan persekitaran ===\nPemeriksaan asas kini boleh dilakukan untuk melihat jika persekitaran ini adalah sesuai untuk pemasangan MediaWiki.\nIngat untuk memasukkan maklumat ini jika anda mahukan sokongan tentang bagaimana untuk menyelesaikan pemasangan.", - "config-copyright": "=== Hakcipta dan Syarat-Syarat ===\n\n$1\n\nProgram ini merupakan perisian bebas; anda boleh mengedarkannya semula dan/atau mengubahsuainya di bawah syarat-syarat Lesen Awam GNU seperti yang diterbitkan oleh Yayasan Perisian Bebas; sama ada versi 2 Lesen ini atau (mengikut pilihan anda) mana-mana versi selepas ini.\n\nProgram ini diedarkan dengan harapan bahawa ia akan menjadi berguna, tetapi '''tanpa sebarang waranti'''; tanpa jaminan yang tersirat '''kebolehdagangan''' atau '''kesesuaian untuk tujuan tertentu'''.\nLihat Lesen Awam GNU untuk maklumat lanjut.\n\nAnda sepatutnya telah menerima satu salinan Lesen Awam GNU bersama-sama dengan program ini, jika tidak, menulis surat kepada Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [http://www.gnu.org/copyleft/gpl.html membacanya dalam talian].", + "config-copyright": "=== Hakcipta dan Syarat-Syarat ===\n\n$1\n\nProgram ini merupakan perisian bebas; anda boleh mengedarkannya semula dan/atau mengubahsuainya di bawah syarat-syarat Lesen Awam GNU seperti yang diterbitkan oleh Yayasan Perisian Bebas; sama ada versi 2 Lesen ini atau (mengikut pilihan anda) mana-mana versi selepas ini.\n\nProgram ini diedarkan dengan harapan bahawa ia akan menjadi berguna, tetapi '''tanpa sebarang waranti'''; tanpa jaminan yang tersirat '''kebolehdagangan''' atau '''kesesuaian untuk tujuan tertentu'''.\nLihat Lesen Awam GNU untuk maklumat lanjut.\n\nAnda sepatutnya telah menerima satu salinan Lesen Awam GNU bersama-sama dengan program ini, jika tidak, menulis surat kepada Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [https://www.gnu.org/copyleft/gpl.html membacanya dalam talian].", "config-sidebar": "* [https://www.mediawiki.org Laman utama MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Panduan Pengguna]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Panduan Penyelia]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soalan lazim]\n----\n* Baca saya\n* Nota keluaran\n* Menyalin\n* Menaik taraf", "config-env-good": "Persekitaran telah diperiksa.\nAnda boleh memasang MediaWiki.", "config-env-bad": "Persekitaran telah diperiksa. \nAnda tidak boleh memasang MediaWiki.", "config-env-php": "PHP $1 dipasang.", - "config-unicode-using-intl": "[http://pecl.php.net/intl Sambungan intl PECL] digunakan untuk penormalan Unicode.", + "config-unicode-using-intl": "[https://pecl.php.net/intl Sambungan intl PECL] digunakan untuk penormalan Unicode.", "config-unicode-update-warning": "Amaran: Versi pembalut penormalan Unicode yang terpasang menggunakan perpustakaan [http://site.icu-project.org/ projek ICU] dalam versi yang lampau.\nAnda harus [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations menaik taraf] jika Unicode penting bagi anda.", "config-outdated-sqlite": "Amaran: anda mempunyai SQLite $1 yang lebih rendah daripada versi keperluan minimum $1. SQLite tidak akan disediakan.", "config-no-fts3": "Amaran: SQLite disusun tanpa [//sqlite.org/fts3.html modil FTS3], maka ciri-ciri pencarian tidak akan disediakan pada backend ini.", "config-pcre-old": "Amaran keras: PCRE $1 ke atas diperlukan.\nBinari PHP anda berpaut dengan PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Keterangan lanjut].", "config-memory-bad": "Amaran: memory_limit (Had memori) PHP ialah $1.\nIni mungkin terlalu rendah.\nPemasangan mungkin akan gagal!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] dipasang", "config-apc": "[http://www.php.net/apc APC] dipasang", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] dipasang", - "config-mod-security": "Amaran: Pelayan web anda dihidupkan [http://modsecurity.org/ mod_security]/mod_security2. Kebanyakan konfigurasinya yang umum boleh menimbulkan kesulitan untuk MediaWiki dan perisian-perisian lain yang membolehkan pengguna untuk mengeposkan kandungan yang sewenang-wenang.\nJika boleh, ciri-ciri ini harus dimatikan. Jika tidak, rujuki [http://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi bantuan hos anda jika anda menghadapi ralat sembarangan.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] dipasang", + "config-mod-security": "Amaran: Pelayan web anda dihidupkan [https://modsecurity.org/ mod_security]/mod_security2. Kebanyakan konfigurasinya yang umum boleh menimbulkan kesulitan untuk MediaWiki dan perisian-perisian lain yang membolehkan pengguna untuk mengeposkan kandungan yang sewenang-wenang.\nJika boleh, ciri-ciri ini harus dimatikan. Jika tidak, rujuki [https://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi bantuan hos anda jika anda menghadapi ralat sembarangan.", "config-diff3-bad": "GNU diff3 tidak dijumpai.", "config-git": "Perisian kawalan versi Git dijumpai: $1.", "config-git-bad": "Perisian kawalan versi Git tidak dijumpai.", diff --git a/includes/installer/i18n/mzn.json b/includes/installer/i18n/mzn.json index b8218463d5..1763fcde59 100644 --- a/includes/installer/i18n/mzn.json +++ b/includes/installer/i18n/mzn.json @@ -29,12 +29,11 @@ "config-env-bad": "محیط بررسی بیه.\nشما نتوندی مدیاویکی ره نصب هاکنی.", "config-env-php": "پی‌اچ‌پی $1 نصب بیه.", "config-env-hhvm": "اچ‌اچ‌وی‌ام $1 نصب بیه.", - "config-unicode-using-intl": "عادی یونیکد وسه [http://pecl.php.net/intl افزونهٔ intl برای PECL] جه استفاده هاکن.", + "config-unicode-using-intl": "عادی یونیکد وسه [https://pecl.php.net/intl افزونهٔ intl برای PECL] جه استفاده هاکن.", "config-memory-raised": "PHP's memory_limit, نسخهٔ $1 هسته، ونه نسخهٔ $2 ره بَیری آپگریت هاکنی.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] نصب بیه.", "config-apc": "[http://www.php.net/apc APC] نصب بیه.", "config-apcu": "[http://www.php.net/apcu APCu] نصب بیه.", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] نصب بیه.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] نصب بیه.", "config-diff3-bad": "GNU diff3 پیدا نیه.", "config-mysql-binary": "باینری", "config-mysql-utf8": "UTF-8", diff --git a/includes/installer/i18n/nan.json b/includes/installer/i18n/nan.json index 697b9fb04a..b3aa13737b 100644 --- a/includes/installer/i18n/nan.json +++ b/includes/installer/i18n/nan.json @@ -42,13 +42,13 @@ "config-help-restart": "你敢欲共你拍的佮保存的資料攏清掉,並且重開始安裝的動作?", "config-restart": "是,重來", "config-welcome": "=== 環境檢測 ===\n這馬欲做基本的檢測,看環境是毋是適合裝 MediaWiki。\n若你愛有支援,才裝會起來,請共遮的資訊記起來。", - "config-copyright": "=== 版權聲明佮授權條款 ===\n\n$1\n\n本程式是自由軟體;你會當照自由軟體基金會所發表的 GNU 通用公共授權條款規定,共本程式重新發佈抑是修改;無論你是照本授權條款的第二版抑第二版以後的任何版本(你會當家己選) 。\n\n本程式發佈的目的是希望會當提供幫助,但是 無負任何擔保責任;抑無表示講對 販賣性 抑 特定用途的適用性 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n你應該已隨本程式收著 GNU 通用公共授權條款的副本;若無,請寫批通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線頂看]。", + "config-copyright": "=== 版權聲明佮授權條款 ===\n\n$1\n\n本程式是自由軟體;你會當照自由軟體基金會所發表的 GNU 通用公共授權條款規定,共本程式重新發佈抑是修改;無論你是照本授權條款的第二版抑第二版以後的任何版本(你會當家己選) 。\n\n本程式發佈的目的是希望會當提供幫助,但是 無負任何擔保責任;抑無表示講對 販賣性 抑 特定用途的適用性 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n你應該已隨本程式收著 GNU 通用公共授權條款的副本;若無,請寫批通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [https://www.gnu.org/copyleft/gpl.html 線頂看]。", "config-sidebar": "* [www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 頭頁]\n* [www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理者指南]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hant 四常問題集]\n----\n* 讀我說明\n* 發行說明\n* 版權聲明\n* 升級", "config-env-good": "環境檢查已完成。\n你會當安裝 MediaWiki。", "config-env-bad": "環境檢查已完成。\n你無法度安裝 MediaWiki。", "config-env-php": "PHP $1 已經安裝。", - "config-unicode-using-intl": "用 [http://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。", - "config-unicode-pure-php-warning": "警告: 無法度用 [http://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,所以退回用純 PHP 實作的正規化程式,這種方式處理速度較慢。\n\n若你的網站瀏覽人數誠濟,你應該先看 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。", + "config-unicode-using-intl": "用 [https://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。", + "config-unicode-pure-php-warning": "警告: 無法度用 [https://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,所以退回用純 PHP 實作的正規化程式,這種方式處理速度較慢。\n\n若你的網站瀏覽人數誠濟,你應該先看 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。", "config-unicode-update-warning": "警告:這馬安裝的 Unicode 正規化包裝程式用舊版 [http://site.icu-project.org/ ICU 計劃] 的程式庫。\n若你需要用 Unicode,你應該先進行 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升級]。", "config-no-db": "揣無適合的資料庫驅動程式!你需要安裝 PHP 資料庫驅動程式。\n這馬支援下跤類型的資料庫: $1 。\n\n若你是家己編譯 PHP,你需要重新設定並且開資料庫客戶端,譬如:用 ./configure --with-mysqli 指令參數。\n如你是用 Debian 或 Ubuntu 的套件安裝,你著需要閣另外安裝,例:php5-mysql 套件。", "config-outdated-sqlite": "警告:你已經安裝 SQLite $1,毋閣伊的版本比會當裝的版本 $2閣較舊。所以你無法度用 SQLite。", diff --git a/includes/installer/i18n/nap.json b/includes/installer/i18n/nap.json index 84fb9a3c5c..fa4125732a 100644 --- a/includes/installer/i18n/nap.json +++ b/includes/installer/i18n/nap.json @@ -43,14 +43,14 @@ "config-help-restart": "Vulite scancellà tutt' 'e date astipate c'avite nzertato e riabbià 'o prucesso d'installazione?", "config-restart": "Sì, riabbìa", "config-welcome": "=== Cuntrollo 'e ll'ambiente ===\nSarranno eseguite 'e cuntrolle bbase pe' putè vedè si st'ambiente è adatto pe' ne ffà l'installazione 'e MediaWiki.\nArricurdateve d'includere sti nfurmaziune si spiate assistenza ncopp' 'a maniera 'e cumpletà l'installazione.", - "config-copyright": "=== Copyright e termine ===\n\n$1\n\nChistu programma è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nChistu programma è destribbuito c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICULARE.\nIate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nCu stu programma avísseve 'a ricevere na copia d' 'a Licienza GNU GPL cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html liggite sta paggena ncopp' 'a l'Internet].", + "config-copyright": "=== Copyright e termine ===\n\n$1\n\nChistu programma è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nChistu programma è destribbuito c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICULARE.\nIate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nCu stu programma avísseve 'a ricevere na copia d' 'a Licienza GNU GPL cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [https://www.gnu.org/copyleft/gpl.html liggite sta paggena ncopp' 'a l'Internet].", "config-sidebar": "* [https://www.mediawiki.org Paggina prencepale MediaWiki]\n* [https://www.mediawiki.org/wiki/Aiuto:Guida a 'e cuntenute pe' l'utente]\n* [https://www.mediawiki.org/wiki/Manuale:Guida a 'e cuntenute pe l'ammenistrature]\n* [https://www.mediawiki.org/wiki/Manuale:FAQ FAQ]\n----\n* Lieggeme\n* Note 'e verziona\n* Copie\n* Agghiurnamento", "config-env-good": "L'ambiente è stato cuntrullato.\nÈ pussibbele installare MediaWiki.", "config-env-bad": "L'ambiente è stato cuntrullato.\nNun se può installà MediaWiki.", "config-env-php": "PHP $1 è installato.", "config-env-hhvm": "HHVM $1 è installato.", - "config-unicode-using-intl": "Aúsa [http://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.", - "config-unicode-pure-php-warning": "Attenziò: L' [http://pecl.php.net/intl estensione intl PECL] nun è a disposizione pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].", + "config-unicode-using-intl": "Aúsa [https://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.", + "config-unicode-pure-php-warning": "Attenziò: L' [https://pecl.php.net/intl estensione intl PECL] nun è a disposizione pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].", "config-unicode-update-warning": "Attenziò: 'A verziona installata 'e normalizzazione Unicode aùsa 'a verziona viecchia d' 'o [http://site.icu-project.org/ pruggetto ICU].\nV'avite 'a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agghiurnà] si state a penzà ncopp' 'o fatto d'ausà Unicode.", "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n{{PLURAL:$2|'O furmato suppurtato|'E furmate suppurtate}} 'e database ccà annanze: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo ./configure --with-mysqli.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto php5-mysql.", "config-outdated-sqlite": "'''Attenziò''': tenite 'o SQLite $1 pe' tramente ca ce vulesse 'a verziona $2, SQLite nun sarrà a disposizione.", @@ -59,11 +59,10 @@ "config-pcre-no-utf8": "Fatale: 'E module PCRE d' 'o PHP pare ca se so' compilate senza PCRE_UTF8 supporto.\nA MediaWiki serve nu supporto UTF-8 pe' putè funziunà apposto.", "config-memory-raised": "'O valore 'e PHP memory_limit è $1, aumentato a $2.", "config-memory-bad": "Attenziò: 'o valore 'e PHP memory_limit è $1.\nProbabbilmente troppo basso.\n'A installazione se putesse scassà!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato", "config-apc": "[http://www.php.net/apc APC] è installato", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] è installato", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] è installato", "config-no-cache-apcu": "Attenziò: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] nun so' state truvate.\n'A funziona caching 'e ll'oggette non è apicciata.", - "config-mod-security": "Attenziò: 'O servitore web vuosto téne [http://modsecurity.org/ mod_security]/mod_security2 appicciato. Ce stanno tante mpustaziune commune ca 'o facessero causà prubbleme a MediaWiki e ll'ati software ca permettessero ll'utente 'e pubbrecà cuntenute.\nSi putite, stutate sta funziona. Sinò, riferite 'a [http://modsecurity.org/documentation/ documentaziona ncopp' 'o mod_security] o cuntattate 'o host vuosto pe' ve dà supporto quanno se scummogliasse cocch'errore.", + "config-mod-security": "Attenziò: 'O servitore web vuosto téne [https://modsecurity.org/ mod_security]/mod_security2 appicciato. Ce stanno tante mpustaziune commune ca 'o facessero causà prubbleme a MediaWiki e ll'ati software ca permettessero ll'utente 'e pubbrecà cuntenute.\nSi putite, stutate sta funziona. Sinò, riferite 'a [https://modsecurity.org/documentation/ documentaziona ncopp' 'o mod_security] o cuntattate 'o host vuosto pe' ve dà supporto quanno se scummogliasse cocch'errore.", "config-diff3-bad": "GNU diff3 nun truvato.", "config-git": "Truvato software 'e cuntrollo d' 'a verziona Git: $1.", "config-git-bad": "Software 'e cuntrollo d' 'a verziona Git nun truvato.", @@ -215,7 +214,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 o verziune aroppo", "config-license-pd": "Pubbreco duminio", "config-license-cc-choose": "Sciglite na licienza Creative Commons ca vulite", - "config-license-help": "Nu cuofeno 'e wiki pubbrece lassano 'e cuntribbute lloro cu na [http://freedomdefined.org/Definition licienza libbera]. Chesto aiutasse a crià nu senso 'e pruprietà spartuta dint'a communità e ncuraggiasse a cuntribbuiì a nu tèrmene luongo. Nun è generalmente necessario pe' nu wiki privato o aziendale.\n\nSi vulite ausà testi 'a Wikipedia, o vulite ca Wikipedia se pozza miette 'n grado d'accettà teste cupiate d' 'o wiki vuosto, avissev'a scegiere {{int:config-license-cc-by-sa}}.\n\nApprimma Wikipedia aveva ausato 'a GNU Free Documentation License. 'A GFDL è una licienza valida, ma è di difficile comprensiona e complica 'o riutilizzo 'e cuntenute.", + "config-license-help": "Nu cuofeno 'e wiki pubbrece lassano 'e cuntribbute lloro cu na [https://freedomdefined.org/Definition licienza libbera]. Chesto aiutasse a crià nu senso 'e pruprietà spartuta dint'a communità e ncuraggiasse a cuntribbuiì a nu tèrmene luongo. Nun è generalmente necessario pe' nu wiki privato o aziendale.\n\nSi vulite ausà testi 'a Wikipedia, o vulite ca Wikipedia se pozza miette 'n grado d'accettà teste cupiate d' 'o wiki vuosto, avissev'a scegiere {{int:config-license-cc-by-sa}}.\n\nApprimma Wikipedia aveva ausato 'a GNU Free Documentation License. 'A GFDL è una licienza valida, ma è di difficile comprensiona e complica 'o riutilizzo 'e cuntenute.", "config-email-settings": "Mpustaziune email", "config-enable-email": "Premmette mmasciate elettroniche r'asciuta", "config-enable-email-help": "Si vulite ca 'o sistema 'e mmasciate mail funziunasse, [http://www.php.net/manual/en/mail.configuration.php 'e mpustaziune PHP] s'avesser'a ffà bbuone.\nSi nun vulite 'a funziona mmasciata e-mail, allora stutate chiste llàn.", diff --git a/includes/installer/i18n/nb.json b/includes/installer/i18n/nb.json index c271a90ad3..276d8a9435 100644 --- a/includes/installer/i18n/nb.json +++ b/includes/installer/i18n/nb.json @@ -49,14 +49,14 @@ "config-help-restart": "Ønsker du Ã¥ fjerne alle lagrede data som du har skrevet inn og starte installasjonsprosessen pÃ¥ nytt?", "config-restart": "Ja, start pÃ¥ nytt", "config-welcome": "=== Miljøsjekker ===\nGrunnleggende sjekker utføres for Ã¥ se om dette miljøet er egnet for en MediaWiki-installasjon.\nDu bør oppgi resultatene fra disse sjekkene om du trenger hjelp under installasjonen.", - "config-copyright": "=== Opphavsrett og vilkÃ¥r ===\n\n$1\n\nMediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon.\n\nDette programmet er distribuert i hÃ¥p om at det vil være nyttig, men '''uten noen garanti'''; ikke engang implisitt garanti av '''salgbarhet''' eller '''egnethet for et bestemt formÃ¥l'''.\nSe GNU General Public License for flere detaljer.\n\nDu skal ha mottatt en kopi av GNU General Public License sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [http://www.gnu.org/copyleft/gpl.html les det pÃ¥ nettet].", + "config-copyright": "=== Opphavsrett og vilkÃ¥r ===\n\n$1\n\nMediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon.\n\nDette programmet er distribuert i hÃ¥p om at det vil være nyttig, men '''uten noen garanti'''; ikke engang implisitt garanti av '''salgbarhet''' eller '''egnethet for et bestemt formÃ¥l'''.\nSe GNU General Public License for flere detaljer.\n\nDu skal ha mottatt en kopi av GNU General Public License sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [https://www.gnu.org/copyleft/gpl.html les det pÃ¥ nettet].", "config-sidebar": "* [https://www.mediawiki.org MediaWiki hjem]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Brukerguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratorguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ OSS]\n----\n* Les meg\n* Utgivelsesnotater\n* Kopiering\n* Oppgradering", "config-env-good": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.", "config-env-bad": "Miljøet har blitt sjekket.\nDu kan ikke installere MediaWiki.", "config-env-php": "PHP $1 er installert.", "config-env-hhvm": "HHVM $1 er installert.", - "config-unicode-using-intl": "Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.", - "config-unicode-pure-php-warning": "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for Ã¥ hÃ¥ndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].", + "config-unicode-using-intl": "Bruker [https://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.", + "config-unicode-pure-php-warning": "'''Advarsel''': [https://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for Ã¥ hÃ¥ndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].", "config-unicode-update-warning": "Advarsel: Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.\nDu bør [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations oppgradere] om du er bekymret for Ã¥ bruke Unicode.", "config-no-db": "Fant ingen passende databasedriver! Du mÃ¥ installere en databasedriver for PHP.\nFølgende {{PLURAL:$2|databasetype|databasetyper}} støttes: $1\n\nOm du kompilerte PHP selv, rekonfigurer den med en aktivert databaseklient, for eksempel ved Ã¥ bruke ./configure --with-mysqli.\nOm du installerte PHP fra en Debian- eller Ubuntu-pakke, mÃ¥ du ogsÃ¥ installere for eksempel php5-mysql-pakken.", "config-outdated-sqlite": "'''Advarsel''': Du har SQLite $1, som er en eldre versjon enn minimumskravet SQLite $2. SQLite vil ikke være tilgjengelig.", @@ -65,12 +65,11 @@ "config-pcre-no-utf8": "'''Fatal''': PHPs PCRE modul ser ut til Ã¥ være kompilert uten PCRE_UTF8-støtte.\nMediaWiki krever UTF-8-støtte for Ã¥ fungere riktig.", "config-memory-raised": "PHPs memory_limit er $1, økt til $2.", "config-memory-bad": "'''Advarsel:''' PHPs memory_limit er $1.\nDette er sannsynligvis for lavt.\nInstallasjonen kan mislykkes!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] er installert", "config-apc": "[http://www.php.net/apc APC] er installert", "config-apcu": "[http://www.php.net/apcu APCu] er installert", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] er installert", - "config-no-cache-apcu": "Advarsel: Kunne ikke finne [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nObjekthurtiglagring er ikke aktivert.", - "config-mod-security": "'''Advarsel''': Din web-tjener har [http://modsecurity.org/ mod_security] pÃ¥slÃ¥tt. Hvis denne er feilinnstilt, kan det gi problemer for MediaWiki eller annen programvare som tillater brukere Ã¥ poste vilkÃ¥rlig innhold.\nSjekk [http://modsecurity.org/documentation/ mod_security-dokumentasjonen] eller ta kontakt med din nettleverandør hvis du opplever tilfeldige feil.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] er installert", + "config-no-cache-apcu": "Advarsel: Kunne ikke finne [http://www.php.net/apcu APCu] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nObjekthurtiglagring er ikke aktivert.", + "config-mod-security": "'''Advarsel''': Din web-tjener har [https://modsecurity.org/ mod_security] pÃ¥slÃ¥tt. Hvis denne er feilinnstilt, kan det gi problemer for MediaWiki eller annen programvare som tillater brukere Ã¥ poste vilkÃ¥rlig innhold.\nSjekk [https://modsecurity.org/documentation/ mod_security-dokumentasjonen] eller ta kontakt med din nettleverandør hvis du opplever tilfeldige feil.", "config-diff3-bad": "GNU diff3 ikke funnet.", "config-git": "Har funnet Git version control software: $1.", "config-git-bad": "Git version control software ble ikke funnet.", @@ -228,7 +227,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 eller senere", "config-license-pd": "Offentlig eiendom", "config-license-cc-choose": "Velg en egendefinert Creative Commons-lisens", - "config-license-help": "Mange Ã¥pne wikier legger alle bidrag under en [http://freedomdefined.org/Definition gratislisens].\nDette gir en følelse av felleseie og stimulerer til langvarige bidrag.\nDette er normalt unødvendig for en privat eller virksomhetsbegrenset wiki.\n\nHvis du ønsker Ã¥ kunne bruke tekst fra Wikipedia, og at Wikipedia skal kunne ta i mot tekst kopiert fra din wiki, bør du velge {{int:config-license-cc-by-sa}}.\n\nWikipedia brukte tidligere GNU Free Documentation License.\nGFDL er en grei lisens, med vanskelig Ã¥ forstÃ¥.\nDet er ogsÃ¥ vanskelig Ã¥ gjenbruke innhold lisensiert under GFDL.", + "config-license-help": "Mange Ã¥pne wikier legger alle bidrag under en [https://freedomdefined.org/Definition gratislisens].\nDette gir en følelse av felleseie og stimulerer til langvarige bidrag.\nDette er normalt unødvendig for en privat eller virksomhetsbegrenset wiki.\n\nHvis du ønsker Ã¥ kunne bruke tekst fra Wikipedia, og at Wikipedia skal kunne ta i mot tekst kopiert fra din wiki, bør du velge {{int:config-license-cc-by-sa}}.\n\nWikipedia brukte tidligere GNU Free Documentation License.\nGFDL er en grei lisens, med vanskelig Ã¥ forstÃ¥.\nDet er ogsÃ¥ vanskelig Ã¥ gjenbruke innhold lisensiert under GFDL.", "config-email-settings": "E-postinnstillinger", "config-enable-email": "Aktiver utgÃ¥ende e-post", "config-enable-email-help": "Hvis du vil at e-post skal virke mÃ¥ [http://www.php.net/manual/en/mail.configuration.php PHPs e-postinnstillinger] bli konfigurert riktig.\nHvis du ikke ønsker noen e-postfunksjoner kan du deaktivere dem her.", @@ -258,7 +257,7 @@ "config-cache-options": "Innstillinger for objekt-mellomlagring:", "config-cache-help": "Objekt-mellomlagring brukes for Ã¥ forbedre hastigheten for MediaWiki. Ofte forekommende data lagres for gjenbruk.\nMiddels til store nettsteder bør absolutt aktivisere mellomlagring, med ogsÃ¥ smÃ¥ nettsteder kan ha nytte av dette.", "config-cache-none": "Ingen mellomlagring (ingen funksjonalitet mistes, men hastigheten kan bli dÃ¥rlig for store wikier-nettsteder)", - "config-cache-accel": "Mellomlagring av PHP-objekter (APC, APCu, XCache eller WinCache)", + "config-cache-accel": "Mellomlagring av PHP-objekter (APCu eller WinCache)", "config-cache-memcached": "Bruk Memcached (krever tilleggsoppsett og -konfigurering)", "config-memcached-servers": "Memcached-servere:", "config-memcached-help": "Liste av IP-adresser for bruk fra Memcached.\nDet bør angis en per linje sammen med porten som brukes. For eksempel:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/nl-informal.json b/includes/installer/i18n/nl-informal.json index 8b8dbc6776..566f72aa82 100644 --- a/includes/installer/i18n/nl-informal.json +++ b/includes/installer/i18n/nl-informal.json @@ -14,14 +14,14 @@ "config-your-language": "Jouw taal:", "config-help-restart": "Wil je alle opgeslagen gegevens die je hebt ingevoerd wissen en het installatieproces opnieuw starten?", "config-welcome": "=== Controle omgeving ===\nEr worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.\nAls je hulp nodig hebt bij de installatie, lever deze gegevens dan ook aan.", - "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. Je mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar eigen keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoor je een exemplaar van de GNU General Public License ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].", + "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. Je mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar eigen keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoor je een exemplaar van de GNU General Public License ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [https://www.gnu.org/copyleft/gpl.html lees de licentie online].", "config-env-good": "De omgeving is gecontroleerd.\nJe kunt MediaWiki installeren.", "config-env-bad": "De omgeving is gecontroleerd.\nJe kunt MediaWiki niet installeren.", - "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls je MediaWiki voor een website met veel verkeer installeert, lees je dan in over [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].", + "config-unicode-pure-php-warning": "'''Waarschuwing''': de [https://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls je MediaWiki voor een website met veel verkeer installeert, lees je dan in over [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].", "config-unicode-update-warning": "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].\nJe moet [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations bijwerken] als Unicode voor jou van belang is.", "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP.\nJe moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls je op een gedeelde omgeving zit, vraag dan aan je hostingprovider een geschikte databasedriver te installeren.\nAls je PHP zelf hebt gecompileerd, wijzig dan je instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via ./configure --with-mysql.\nAls je PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.", "config-outdated-sqlite": "''' Waarschuwing:''' je gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.", - "config-mod-security": "'''Waarschuwing:''' je webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nLees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van je provider als je tegen problemen aanloopt.", + "config-mod-security": "'''Waarschuwing:''' je webserver heeft de module [https://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nLees de [https://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van je provider als je tegen problemen aanloopt.", "config-imagemagick": "ImageMagick aangetroffen: $1.\nHet aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.", "config-gd": "Ingebouwde GD grafische bibliotheek aangetroffen.\nHet aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.", "config-uploads-not-safe": "'''Waarschuwing:''' je uploadmap $1 kan gebruikt worden voor het arbitrair uitvoeren van scripts.\nHoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.", @@ -55,7 +55,7 @@ "config-subscribe-noemail": "Je hebt geprobeerd je te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.\nGeef een e-mailadres op als je je wilt abonneren op de mailinglijst.", "config-almost-done": "Je bent bijna klaar!\nAls je wilt kan je de overige instellingen overslaan en de wiki nu installeren.", "config-profile-help": "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.\nIn MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.\n\nDaarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.\nDaarom biedt dit installatieprogramma je de volgende keuzes voor de basisinstelling van gebruikersvrijheden:\n\nEen '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.\nEen wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.\n\nHet scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.\nIn een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken.\n\nMeer complexe instellingen voor gebruikersrechten zijn te maken na de installatie; hierover is meer te lezen in de [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights handleiding].", - "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls je teksten uit Wikipedia wilt kunnen gebruiken en je wilt het mogelijk maken teksten uit je wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.", + "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [https://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls je teksten uit Wikipedia wilt kunnen gebruiken en je wilt het mogelijk maken teksten uit je wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.", "config-enable-email-help": "Als je wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls je niet wilt dat e-mailen mogelijk is, dan kan je de instellingen hier uitschakelen.", "config-upload-help": "Het toestaan van het uploaden van bestanden stelt je server mogelijk bloot aan beveiligingsrisico's.\nEr is meer [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.\n\nOm het bestandsuploads mogelijk te maken kan je de rechten op de submap images onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.\nDaarmee wordt deze functie ingeschakeld.", "config-logo-help": "Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.\nUpload een afbeelding met de juiste afmetingen en voer de URL hier in.\n\nAls je geen logo wilt gebruiken, kan je dit veld leeg laten.", diff --git a/includes/installer/i18n/nl.json b/includes/installer/i18n/nl.json index dd2cef4317..81416ccc1a 100644 --- a/includes/installer/i18n/nl.json +++ b/includes/installer/i18n/nl.json @@ -61,14 +61,14 @@ "config-help-restart": "Wilt u alle opgeslagen gegevens die u hebt ingevoerd wissen en het installatieproces opnieuw starten?", "config-restart": "Ja, opnieuw starten", "config-welcome": "=== Controle omgeving ===\nEr worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.\nLever deze gegevens aan als u ondersteuning vraagt bij de installatie.", - "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoort u een exemplaar van de GNU General Public License ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].", + "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoort u een exemplaar van de GNU General Public License ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [https://www.gnu.org/copyleft/gpl.html lees de licentie online].", "config-sidebar": "* [https://www.mediawiki.org MediaWiki-thuispagina]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen] (Engelstalig)\n----\n* Leesmij (Engelstalig)\n* Release notes (Engelstalig)\n* Kopiëren (Engelstalig)\n* Versie bijwerken (Engelstalig)", "config-env-good": "De omgeving is gecontroleerd.\nU kunt MediaWiki installeren.", "config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.", "config-env-php": "PHP $1 is geïnstalleerd.", "config-env-hhvm": "HHVM $1 is geïnstalleerd.", - "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.", - "config-unicode-pure-php-warning": "Waarschuwing: de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzamere PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].", + "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [https://pecl.php.net/intl PECL-extensie intl] gebruikt.", + "config-unicode-pure-php-warning": "Waarschuwing: de [https://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzamere PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].", "config-unicode-update-warning": "Waarschuwing: de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].\nU moet [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.", "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP! U moet een databasedriver installeren voor PHP.\n{{PLURAL:$2|Het volgende databasetype wordt|De volgende databasetypes worden}} ondersteund: $1.\n\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via ./configure --with-mysqli.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook bijvoorbeeld de module php5-mysql.", "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.", @@ -77,12 +77,11 @@ "config-pcre-no-utf8": "Onherstelbare fout: de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.\nMediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.", "config-memory-raised": "PHP's memory_limit is $1 en is verhoogd tot $2.", "config-memory-bad": "'''Waarschuwing:''' PHP's memory_limit is $1.\nDit is waarschijnlijk te laag.\nDe installatie kan mislukken!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd", "config-apc": "[http://www.php.net/apc APC] is op dit moment geïnstalleerd", "config-apcu": "[http://www.php.net/apcu APCu] is geïnstalleerd", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd", "config-no-cache-apcu": "Waarschuwing: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] of [http://www.iis.net/download/WinCacheForPhp WinCache] is niet aangetroffen.\nHet cachen van objecten is niet ingeschakeld.", - "config-mod-security": "Waarschuwing: Uw webserver heeft de module [http://modsecurity.org/ mod_security]/mod_security2 ingeschakeld. Veel standaard instellingen hiervan zorgen voor problemen in combinatie met MediaWiki en andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nIndien mogelijk, zou deze moeten worden uitgeschakeld. Lees anders de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.", + "config-mod-security": "Waarschuwing: Uw webserver heeft de module [https://modsecurity.org/ mod_security]/mod_security2 ingeschakeld. Veel standaard instellingen hiervan zorgen voor problemen in combinatie met MediaWiki en andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nIndien mogelijk, zou deze moeten worden uitgeschakeld. Lees anders de [https://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.", "config-diff3-bad": "GNU diff3 niet aangetroffen.", "config-git": "Versiecontrolesoftware git is aangetroffen: $1", "config-git-bad": "Geen git versiecontrolesoftware aangetroffen.", @@ -240,7 +239,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 of hoger", "config-license-pd": "Publiek domein", "config-license-cc-choose": "Een Creative Commons-licentie selecteren", - "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie {{int:config-license-cc-by-sa}}.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.", + "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [https://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie {{int:config-license-cc-by-sa}}.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.", "config-email-settings": "E-mailinstellingen", "config-enable-email": "Uitgaande e-mail inschakelen", "config-enable-email-help": "Als u wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.", diff --git a/includes/installer/i18n/oc.json b/includes/installer/i18n/oc.json index 3573c3ef94..7ac065be92 100644 --- a/includes/installer/i18n/oc.json +++ b/includes/installer/i18n/oc.json @@ -39,11 +39,10 @@ "config-env-bad": "L’environament es estat verificat.\nPodètz pas installar MediaWiki.", "config-env-php": "PHP $1 es installat.", "config-env-hhvm": "HHVM $1 es installat.", - "config-unicode-using-intl": "Utilizacion de [http://pecl.php.net/intl l'extension PECL intl] per la normalizacion Unicode.", + "config-unicode-using-intl": "Utilizacion de [https://pecl.php.net/intl l'extension PECL intl] per la normalizacion Unicode.", "config-memory-raised": "Lo paramètre memory_limit de PHP èra a $1, portat a $2.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] es installat", "config-apc": "[http://www.php.net/apc APC] es installat", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] es installat", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] es installat", "config-diff3-bad": "GNU diff3 pas trobat.", "config-git": "Logicial de contraròtle de version Git trobat : $1.", "config-git-bad": "Logicial de contraròtle de version Git pas trobat.", diff --git a/includes/installer/i18n/pl.json b/includes/installer/i18n/pl.json index 7d2ab8f979..ba766e1723 100644 --- a/includes/installer/i18n/pl.json +++ b/includes/installer/i18n/pl.json @@ -22,7 +22,8 @@ "The Polish", "Macofe", "Sethakill", - "Peter Bowman" + "Peter Bowman", + "Ankam" ] }, "config-desc": "Instalator MediaWiki", @@ -62,14 +63,14 @@ "config-help-restart": "Czy chcesz usunąć wszystkie zapisane dane i uruchomić ponownie proces instalacji?", "config-restart": "Tak, zacznij od nowa", "config-welcome": "=== Sprawdzenie środowiska instalacji ===\nTeraz zostaną wykonane podstawowe testy sprawdzające czy to środowisko jest odpowiednie dla instalacji MediaWiki.\nJeśli potrzebujesz pomocy podczas instalacji, załącz wyniki tych testów.", - "config-copyright": "=== Prawa autorskie i warunki użytkowania ===\n\n$1\n\nTo oprogramowanie jest wolne; możesz je rozprowadzać dalej i modyfikować zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation w wersji 2 tej licencji lub (według Twojego wyboru) którejś z późniejszych jej wersji.\n\nNiniejsze oprogramowanie jest rozpowszechniane w nadziei, że będzie użyteczne, ale '''bez żadnej gwarancji'''; nawet bez domniemanej gwarancji '''handlowej''' lub '''przydatności do określonego celu'''.\nZobacz treść licencji GNU General Public License, aby uzyskać więcej szczegółów.\n\nRazem z oprogramowaniem powinieneś otrzymać kopię licencji GNU General Public License. Jeśli jej nie otrzymałeś, napisz do Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. lub [http://www.gnu.org/copyleft/gpl.html przeczytaj ją online].", + "config-copyright": "=== Prawa autorskie i warunki użytkowania ===\n\n$1\n\nTo oprogramowanie jest wolne; możesz je rozprowadzać dalej i modyfikować zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation w wersji 2 tej licencji lub (według Twojego wyboru) którejś z późniejszych jej wersji.\n\nNiniejsze oprogramowanie jest rozpowszechniane w nadziei, że będzie użyteczne, ale '''bez żadnej gwarancji'''; nawet bez domniemanej gwarancji '''handlowej''' lub '''przydatności do określonego celu'''.\nZobacz treść licencji GNU General Public License, aby uzyskać więcej szczegółów.\n\nRazem z oprogramowaniem powinieneś otrzymać kopię licencji GNU General Public License. Jeśli jej nie otrzymałeś, napisz do Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. lub [https://www.gnu.org/copyleft/gpl.html przeczytaj ją online].", "config-sidebar": "* [https://www.mediawiki.org Strona domowa MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Podręcznik użytkownika]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Podręcznik administratora]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Odpowiedzi na często zadawane pytania]\n----\n* Przeczytaj to\n* Informacje o tej wersji\n* Kopiowanie\n* Aktualizacja", "config-env-good": "Środowisko oprogramowania zostało sprawdzone.\nMożesz teraz zainstalować MediaWiki.", "config-env-bad": "Środowisko oprogramowania zostało sprawdzone.\nNie możesz zainstalować MediaWiki.", "config-env-php": "Zainstalowane jest PHP w wersji $1.", "config-env-hhvm": "Zainstalowany jest HHVM $1.", - "config-unicode-using-intl": "Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.", - "config-unicode-pure-php-warning": "Uwaga: [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.\nJeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizacji Unicode].", + "config-unicode-using-intl": "Korzystanie z [https://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.", + "config-unicode-pure-php-warning": "Uwaga: [https://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.\nJeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizacji Unicode].", "config-unicode-update-warning": "Uwaga: zainstalowana wersja normalizacji Unicode korzysta z nieaktualnej biblioteki [http://site.icu-project.org/ projektu ICU].\nPowinieneś [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations wykonać aktualizację], jeśli chcesz korzystać w pełni z Unicode.", "config-no-db": "Nie można odnaleźć właściwego sterownika bazy danych! Musisz zainstalować sterownik bazy danych dla PHP.\nMożna użyć {{PLURAL:$2|następującego typu bazy|następujących typów baz}} danych: $1.\n\nJeśli skompilowałeś PHP samodzielnie, skonfiguruj go ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia ./configure --with-mysqli.\nJeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować np. moduł php5-mysql.", "config-outdated-sqlite": "'''Ostrzeżenie''': masz SQLite $1, która jest niższa od minimalnej wymaganej wersji $2 . SQLite będzie niedostępne.", @@ -78,12 +79,11 @@ "config-pcre-no-utf8": "'''Błąd krytyczny''' – wydaje się, że moduł PCRE w PHP został skompilowany bez wsparcia dla UTF‐8.\nMediaWiki wymaga wsparcia dla UTF‐8 do prawidłowego działania.", "config-memory-raised": "PHP memory_limit było ustawione na $1, zostanie zwiększone do $2.", "config-memory-bad": "'''Uwaga:''' PHP memory_limit jest ustawione na $1.\nTo jest prawdopodobnie zbyt mało.\nInstalacja może się nie udać!", - "config-xcache": "[Http://trac.lighttpd.net/xcache/ XCache] jest zainstalowany", "config-apc": "[Http://www.php.net/apc APC] jest zainstalowany", "config-apcu": "[http://www.php.net/apcu APCu] jest zainstalowany", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany", - "config-no-cache-apcu": "Ostrzeżenie: Nie można znaleźć [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].\nPamięć podręczna obiektów nie zostanie włączona.", - "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli jest niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany", + "config-no-cache-apcu": "Ostrzeżenie: Nie można było znaleźć [http://www.php.net/apcu APCu] ani [http://www.iis.net/download/WinCacheForPhp WinCache].\nPamięć podręczna obiektów nie została włączona.", + "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [https://modsecurity.org/ mod_security]. Jeśli jest niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [https://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.", "config-diff3-bad": "Nie znaleziono GNU diff3.", "config-git": "Znaleziono oprogramowanie kontroli wersji Git: $1.", "config-git-bad": "Oprogramowanie systemu kontroli wersji Git nie zostało znalezione.", @@ -237,7 +237,7 @@ "config-license-gfdl": "GNU licencja wolnej dokumentacji 1.3 lub nowsza", "config-license-pd": "Domena publiczna", "config-license-cc-choose": "Wybierz własną licencję Creative Commons", - "config-license-help": "Wiele publicznych wiki umieszcza wszystkie dopisane treści na [http://freedomdefined.org/Definition wolnej licencji].\nPomaga to tworzyć poczucie wspólnoty i zachęca do długoterminowego wkładu.\nNie jest to zazwyczaj konieczne w prywatnych lub firmowych wiki.\n\nJeśli chcesz móc użyć tekstu z Wikipedii i chcesz Wikipedia mogła zaakceptować tekst skopiowany z twojej wiki, należy wybrać {{int:config-license-cc-by-sa}}.\n\nWikipedia używała poprzednio GNU Free Documentation License.\nGFDL jest poprawną licencję, ale trudno ją zrozumieć.\nTrudno także ponowne użyć zawartości na licencji GFDL.", + "config-license-help": "Wiele publicznych wiki umieszcza wszystkie dopisane treści na [https://freedomdefined.org/Definition wolnej licencji].\nPomaga to tworzyć poczucie wspólnoty i zachęca do długoterminowego wkładu.\nNie jest to zazwyczaj konieczne w prywatnych lub firmowych wiki.\n\nJeśli chcesz móc użyć tekstu z Wikipedii i chcesz Wikipedia mogła zaakceptować tekst skopiowany z twojej wiki, należy wybrać {{int:config-license-cc-by-sa}}.\n\nWikipedia używała poprzednio GNU Free Documentation License.\nGFDL jest poprawną licencję, ale trudno ją zrozumieć.\nTrudno także ponowne użyć zawartości na licencji GFDL.", "config-email-settings": "Ustawienia e-maili", "config-enable-email": "Włącz wychodzące wiadomości e–mail", "config-enable-email-help": "Jeśli chcesz, aby działał e-mail, [http://www.php.net/manual/en/mail.configuration.php Ustawienia poczty PHP] muszą być poprawnie wprowadzone.\nJeśli nie chcesz jakichś funkcji poczty e-mail, można je wyłączyć tutaj.", @@ -267,7 +267,7 @@ "config-cache-options": "Ustawienia buforowania obiektów:", "config-cache-help": "Buforowanie obiektów jest używane do przyspieszenia MediaWiki przez trzymanie w pamięci podręcznej często używanych danych.\nŚrednie oraz duże witryny są wysoce zachęcane by je włączyć, ale małe witryny również dostrzegą korzyści.", "config-cache-none": "Brak buforowania (wszystkie funkcje będą działać, ale mogą wystąpić kłopoty z wydajnością na dużych witrynach wiki)", - "config-cache-accel": "Buforowania obiektów PHP (APC, APCu, XCache lub WinCache)", + "config-cache-accel": "Buforowania obiektów PHP (APC, APCu lub WinCache)", "config-cache-memcached": "Użyj Memcached (wymaga dodatkowej instalacji i konfiguracji)", "config-memcached-servers": "Serwery Memcached:", "config-memcached-help": "Lista adresów IP do wykorzystania przez Memcached.\nAdresy powinny być umieszczane po jednym w linii i określać również wykorzystywany port. Na przykład:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/pms.json b/includes/installer/i18n/pms.json index e97db42612..e89b5db7e4 100644 --- a/includes/installer/i18n/pms.json +++ b/includes/installer/i18n/pms.json @@ -47,14 +47,14 @@ "config-help-restart": "Veul-lo scancelé tùit ij dat salvà ch'a l'ha anserì e anandié torna ël process d'instalassion?", "config-restart": "É!, felo torna parte", "config-welcome": "=== Contròj d'ambient ===\nDle verìfiche ëd base a saran adess fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki.\nCh'as visa d'anserì coste anformassion s'a sërca d'agiut su com completé l'instalassion.", - "config-copyright": "=== Drit d'Autor e Condission ===\n\n$1\n\nCost-sì a l'é un programa lìber e a gràtis: a peul ridistribuilo e/o modifichelo sota le condission dla licensa pùblica general GNU com publicà da la Free Software Foundation; la version 2 dla Licensa, o (a toa sèrnìa) qualsëssìa version pi recenta.\n\nCost programa a l'é distribuì ant la speransa ch'a sia ùtil, ma '''sensa gnun-e garansìe'''; sensa gnanca la garansia implìssita ëd '''comersiabilità''' o '''d'esse adat a un but particolar'''.\n\nA dovrìa avèj arseivù na còpia ëd la licensa pùblica general GNU ansema a sto programa; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA opura [http://www.gnu.org/copyleft/gpl.html ch'a la lesa an linia].", + "config-copyright": "=== Drit d'Autor e Condission ===\n\n$1\n\nCost-sì a l'é un programa lìber e a gràtis: a peul ridistribuilo e/o modifichelo sota le condission dla licensa pùblica general GNU com publicà da la Free Software Foundation; la version 2 dla Licensa, o (a toa sèrnìa) qualsëssìa version pi recenta.\n\nCost programa a l'é distribuì ant la speransa ch'a sia ùtil, ma '''sensa gnun-e garansìe'''; sensa gnanca la garansia implìssita ëd '''comersiabilità''' o '''d'esse adat a un but particolar'''.\n\nA dovrìa avèj arseivù na còpia ëd la licensa pùblica general GNU ansema a sto programa; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA opura [https://www.gnu.org/copyleft/gpl.html ch'a la lesa an linia].", "config-sidebar": "* [https://www.mediawiki.org Intrada MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guida dl'Utent]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guida dl'Aministrator]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soens an ciamo]\n----\n* Ch'am lesa\n* Nòte ëd publicassion\n* Còpia\n* Agiornament", "config-env-good": "L'ambient a l'é stàit controlà.\nIt peule instalé MediaWiki.", "config-env-bad": "L'ambient a l'é stàit controlà.\nIt peule pa instalé MediaWiki.", "config-env-php": "PHP $1 a l'é instalà.", "config-env-hhvm": "HHVM $1 a l'é instalà.", - "config-unicode-using-intl": "As deuvra l'[http://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.", - "config-unicode-pure-php-warning": "'''Avis:''' L'[http://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa.\nS'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisassion Unicode].", + "config-unicode-using-intl": "As deuvra l'[https://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.", + "config-unicode-pure-php-warning": "'''Avis:''' L'[https://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa.\nS'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisassion Unicode].", "config-unicode-update-warning": "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU].\nA dovrìa fé n'[https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.", "config-no-db": "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.\n{{PLURAL:$2|La sòrt ëd base ëd dàit mantnùa a l'é costa|Le sòrt ëd base ëd dàit mantùe a son coste}} sì-dapress: $1.\n\nS'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand ./configure --with-mysqli.\nS'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò anstalé, për esempi, ël mòdul php5-mysql.", "config-outdated-sqlite": "'''Avis''': chiel a l'ha SQLite $1, che a l'é pi vej che la version mìnima dont a-i é damanca $2. SQLite a sarà pa disponìbil.", @@ -62,10 +62,9 @@ "config-pcre-no-utf8": "'''Fatal''': ël mòdul PCRE ëd PHP a smija esse compilà sensa l'apògg PCRE_UTF8.\nMediaWiki a ciama l'apògg d'UTF8 për marcé për da bin.", "config-memory-raised": "memory_limit ëd PHP a l'é $1, aussà a $2.", "config-memory-bad": "'''Avis:''' memory_limit ëd PHP a l'é $1.\nSossì a l'é probabilment tròp bass.\nL'instalassion a peul falì!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] a l'é instalà", "config-apc": "[http://www.php.net/apc APC] a l'é instalà", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] a l'é instalà", - "config-mod-security": "'''Avis''': Sò servent për l'aragnà a l'ha [http://modsecurity.org/ mod_security] abilità. Se mal configurà, a peul causé dij problema për MediaWiki o d'àutri programa ch'a përmëtto a j'utent dë spedì un contnù qualsëssìa.\nCh'a fasa arferiment a la [http://modsecurity.org/documentation/ mod_security documentassion] o ch'a contata l'echip ëd sò servissi s'a-j rivo dj'eror casuaj.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] a l'é instalà", + "config-mod-security": "'''Avis''': Sò servent për l'aragnà a l'ha [https://modsecurity.org/ mod_security] abilità. Se mal configurà, a peul causé dij problema për MediaWiki o d'àutri programa ch'a përmëtto a j'utent dë spedì un contnù qualsëssìa.\nCh'a fasa arferiment a la [https://modsecurity.org/documentation/ mod_security documentassion] o ch'a contata l'echip ëd sò servissi s'a-j rivo dj'eror casuaj.", "config-diff3-bad": "GNU diff3 pa trovà.", "config-imagemagick": "Trovà ImageMagick: $1.\nLa miniaturisassion ëd figure a sarà abilità s'it abìlite le carie.", "config-gd": "Trovà la librarìa gràfica antëgrà GD.\nLa miniaturisassion ëd figure a sarà abilità s'a abìlita ij cariament.", @@ -204,7 +203,7 @@ "config-license-gfdl": "Licensa GNU Free Documentation 1.3 o pi neuva", "config-license-pd": "Domini Pùblich", "config-license-cc-choose": "Selessioné na licensa Creative Commons përsonalisà", - "config-license-help": "Vàire wiki pùbliche a buto tute le contribussion sota na [http://freedomdefined.org/Definition licensa lìbera]. Sòn a giuta a creé un sens d'apartenensa a la comunità e a ancoragia ëd contribussion ëd longa durà.\nA l'é generalment nen necessari për na wiki privà o d'asienda.\n\nS'a veul podèj dovré dij test da Wikipedia, e a veul che Wikipedia a aceta dij test copià da soa wiki, a dovrìa serne '''Creative Commons Attribution Share Alike'''.\n\nWikipedia prima a dovrava la GNU Free Documentation License.\nLa GDFL a l'é anco' na licensa bon-a, ma a l'é malfé da capila.\nA l'é ëdcò mal fé riutilisé dël contnù licensià sota la GDFL.", + "config-license-help": "Vàire wiki pùbliche a buto tute le contribussion sota na [https://freedomdefined.org/Definition licensa lìbera]. Sòn a giuta a creé un sens d'apartenensa a la comunità e a ancoragia ëd contribussion ëd longa durà.\nA l'é generalment nen necessari për na wiki privà o d'asienda.\n\nS'a veul podèj dovré dij test da Wikipedia, e a veul che Wikipedia a aceta dij test copià da soa wiki, a dovrìa serne '''Creative Commons Attribution Share Alike'''.\n\nWikipedia prima a dovrava la GNU Free Documentation License.\nLa GDFL a l'é anco' na licensa bon-a, ma a l'é complicà capila.\nA l'é ëdcò mal fé riutilisé dël contnù licensià sota la GDFL.", "config-email-settings": "Ampostassion ëd pòsta eletrònica", "config-enable-email": "Abilité ij mëssagi ëd pòsta eletrònica an surtìa", "config-enable-email-help": "S'a veul che la pòsta eletrònica a marcia, j'[http://www.php.net/manual/en/mail.configuration.php ampostassion ëd pòsta eletrònica PHP] a devo esse configurà për da bin.\nS'a veul pa 'd funsion ëd pòsta eletrònica, a dev disabiliteje ambelessì.", diff --git a/includes/installer/i18n/ps.json b/includes/installer/i18n/ps.json index 5e8d7dec02..68c2376ba7 100644 --- a/includes/installer/i18n/ps.json +++ b/includes/installer/i18n/ps.json @@ -30,9 +30,8 @@ "config-restart": "هو، سر له نوي يې پيل کړه", "config-env-php": "د $1 PHP نصب شو.", "config-env-hhvm": "HHVM $1 نصب شو.", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] نصب شو", "config-apc": "[http://www.php.net/apc APC] نصب شو", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] نصب شو", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] نصب شو", "config-diff3-bad": "جي ان يو ډيف3 و نه موندل شو.", "config-using-server": "د پالنگر نوم \"$1\" کارېږي.", "config-using-uri": "د پالنگر URL \"$1$2\" کارېږي.", diff --git a/includes/installer/i18n/pt-br.json b/includes/installer/i18n/pt-br.json index 7a490513d6..2d692ed688 100644 --- a/includes/installer/i18n/pt-br.json +++ b/includes/installer/i18n/pt-br.json @@ -62,14 +62,14 @@ "config-help-restart": "Deseja limpar todos os dados salvos que você introduziu e reiniciar o processo de instalação?", "config-restart": "Sim, reiniciar", "config-welcome": "=== Verificações de ambiente ===\nSerão realizadas verificações básicas para determinar se este ambiente é apropriado para a instalação do MediaWiki.\nLembre-se de incluir estas informações se for procurar por suporte para como concluir a instalação.", - "config-copyright": "=== Direitos autorais e Termos de uso ===\n\n$1\n\nEste programa é software livre; você pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas sem qualquer garantia; inclusive, sem a garantia implícita da possibilidade de ser comercializado ou de adequação para qualquer finalidade específica.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa você deve ter recebido uma cópia da licença GNU General Public License; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].", + "config-copyright": "=== Direitos autorais e Termos de uso ===\n\n$1\n\nEste programa é software livre; você pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas sem qualquer garantia; inclusive, sem a garantia implícita da possibilidade de ser comercializado ou de adequação para qualquer finalidade específica.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa você deve ter recebido uma cópia da licença GNU General Public License; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [https://www.gnu.org/copyleft/gpl.html leia-a na internet].", "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki Página principal do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Manual do usuário]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Manual do administrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Leia-me\n* Notas de lançamento\n* Licença\n* Atualizando", "config-env-good": "O ambiente foi verificado.\nVocê pode instalar o MediaWiki.", "config-env-bad": "O ambiente foi verificado.\nVocê não pode instalar o MediaWiki.", "config-env-php": "O PHP $1 está instalado.", "config-env-hhvm": "O HHVM $1 está instalado.", - "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.", - "config-unicode-pure-php-warning": "Aviso: A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode, abortando e passando para a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalização Unicode].", + "config-unicode-using-intl": "Usando a [https://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.", + "config-unicode-pure-php-warning": "Aviso: A [https://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode, abortando e passando para a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalização Unicode].", "config-unicode-update-warning": "Aviso: A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://www.site.icu-project.org/projeto ICU].\nVocê deve [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizar] se você tem quaisquer preocupações com o uso do Unicode.", "config-no-db": "Não foi possível encontrar um driver apropriado para a banco de dados! Você precisa instalar um driver de banco de dados para PHP. {{PLURAL:$2|É aceito o seguinte tipo|São aceitos os seguintes tipos}} de banco de dados: $1.\n\nSe você compilou o PHP, reconfigure-o com um cliente de banco de dados ativado, por exemplo, usando ./configure --with-mysqli.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então também precisa instalar, por exemplo, o pacote php5-mysql.", "config-outdated-sqlite": "Aviso: você tem o SQLite versão $1, que é menor do que a versão mínima necessária $2. O SQLite não estará disponível.", @@ -78,12 +78,11 @@ "config-pcre-no-utf8": "Erro fatal: O módulo PCRE do PHP parece ser compilado sem suporte a PCRE_UTF8.\nO MediaWiki requer suporte a UTF-8 para funcionar corretamente.", "config-memory-raised": "A configuração memory_limit do PHP era $1; foi aumentada para $2.", "config-memory-bad": "Aviso: A configuração memory_limit do PHP é $1.\nIsso provavelmente é muito baixo.\nA instalação pode falhar!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado", "config-apc": "[http://www.php.net/apc APC] está instalado", "config-apcu": "[http://www.php.net/apcu APCu] está instalado", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado", - "config-no-cache-apcu": "Aviso: Não se pode encontrar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nO caching de objetos não foi ativado.", - "config-mod-security": "Aviso: Seu servidor web tem [http://modsecurity.org/ mod_security2] habilitado. Muitas configurações comuns de módulo podem causar problemas para o MediaWiki ou outro software que permite aos usuários postar conteúdo arbitrário.\nSe possível, ele dever ser desativad. Consulte a [http://modsecurity.org/documentation/ documentação do mod_security] ou entre em contato com o suporte do seu host se você encontrar erros aleatórios.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] está instalado", + "config-no-cache-apcu": "Aviso: Não foram encontrados o [http://www.php.net/apcu APCu], ou o [http://www.iis.net/download/WinCacheForPhp WinCache].\nA cache de objetos não está ativa.", + "config-mod-security": "Aviso: Seu servidor web tem [https://modsecurity.org/ mod_security2] habilitado. Muitas configurações comuns de módulo podem causar problemas para o MediaWiki ou outro software que permite aos usuários postar conteúdo arbitrário.\nSe possível, ele dever ser desativad. Consulte a [https://modsecurity.org/documentation/ documentação do mod_security] ou entre em contato com o suporte do seu host se você encontrar erros aleatórios.", "config-diff3-bad": "O GNU diff3 não foi encontrado.", "config-git": "Foi encontrado o software de controle de versão Git: $1.", "config-git-bad": "O software de controle de versão Git não foi encontrado.", @@ -241,7 +240,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 ou posterior", "config-license-pd": "Domínio público", "config-license-cc-choose": "Selecionar uma licença personalizada da organização Creative Commons", - "config-license-help": "Muitas wikis públicas colocam todas as contribuições sob uma [http://freedomdefined.org/Definition licença livre].\nIsso ajuda a criar um senso de propriedade da comunidade e incentiva a contribuição de longo prazo.\nGeralmente não é necessário para uma empresa privada ou wiki corporativa.\nSe você quiser poder usar o texto da Wikipédia e quiser que a Wikipédia possa aceitar o texto copiado da sua wiki, você deve escolher {{int:config-license-cc-by-sa}}.\n\nA Wikipédia usou anteriormente a Licença de Documentação Livre GNU.\n A GFDL é uma licença válida, mas é difícil de entender.\nTambém é difícil reutilizar conteúdo licenciado sob o GFDL.", + "config-license-help": "Muitas wikis públicas colocam todas as contribuições sob uma [https://freedomdefined.org/Definition licença livre].\nIsso ajuda a criar um senso de propriedade da comunidade e incentiva a contribuição de longo prazo.\nGeralmente não é necessário para uma empresa privada ou wiki corporativa.\nSe você quiser poder usar o texto da Wikipédia e quiser que a Wikipédia possa aceitar o texto copiado da sua wiki, você deve escolher {{int:config-license-cc-by-sa}}.\n\nA Wikipédia usou anteriormente a Licença de Documentação Livre GNU.\n A GFDL é uma licença válida, mas é difícil de entender.\nTambém é difícil reutilizar conteúdo licenciado sob o GFDL.", "config-email-settings": "Configurações de e-mail", "config-enable-email": "Ativar envio de e-mail", "config-enable-email-help": "Se você quer que o e-mail funcione, estas [http://www.php.net/manual/en/mail.configuration.php configurações de e-mail PHP] precisam ser configuradas corretamente.\nSe você não quiser usar nenhuma das funcionalidades, você pode desabilitá-las aqui.", @@ -271,7 +270,7 @@ "config-cache-options": "Configuração da cache de objetos:", "config-cache-help": "O cache de objetos é usado para melhorar o desempenho do MediaWiki, armazenando 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-none": "Sem cache (nenhuma funcionalidade é removida, mas a velocidade pode ser afetada em wikis maiores)", - "config-cache-accel": "Cache de objetos PHP (APC, APCu, XCache ou WinCache)", + "config-cache-accel": "Cache de objetos do PHP (APC, APCu, ou WinCache)", "config-cache-memcached": "Usar Memcached (requer instalação e configurações adicionais)", "config-memcached-servers": "Servidores Memcached:", "config-memcached-help": "Lista de endereços IP a serem usados para Memcached.\nDeve especificar um por linha e especificar a porta a ser utilizada. Por exemplo:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/pt.json b/includes/installer/i18n/pt.json index 760986d01d..1609492237 100644 --- a/includes/installer/i18n/pt.json +++ b/includes/installer/i18n/pt.json @@ -60,14 +60,14 @@ "config-help-restart": "Deseja limpar todos os dados gravados que introduziu e reiniciar o processo de instalação?", "config-restart": "Sim, reiniciar", "config-welcome": "=== Verificações do ambiente ===\nSerão agora realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.\nLembre-se de fornecer esta informação se necessitar de pedir ajuda para concluir a instalação.", - "config-copyright": "=== Direitos de autor e Condições de uso ===\n\n$1\n\nEste programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa deve ter recebido uma cópia da licença GNU General Public License; se não a recebeu, peça-a por escrito a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].", + "config-copyright": "=== Direitos de autor e Condições de uso ===\n\n$1\n\nEste programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa deve ter recebido uma cópia da licença GNU General Public License; se não a recebeu, peça-a por escrito a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [https://www.gnu.org/copyleft/gpl.html leia-a na internet].", "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/pt Ajuda]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/pt Manual técnico]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Leia-me\n* Notas de lançamento\n* Cópia\n* Atualização", "config-env-good": "O ambiente foi verificado.\nPode instalar o MediaWiki.", "config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.", "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": "Aviso: 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-using-intl": "A usar a [https://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.", + "config-unicode-pure-php-warning": "Aviso: A [https://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": "Aviso: 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 ./configure --with-mysqli.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também, por exemplo, o pacote php5-mysql.", "config-outdated-sqlite": "Aviso: Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.", @@ -76,12 +76,11 @@ "config-pcre-no-utf8": "'''Erro fatal''': O módulo PCRE do PHP parece ter sido compilado sem suporte PCRE_UTF8.\nO MediaWiki necessita do suporte UTF-8 para funcionar corretamente.", "config-memory-raised": "A configuração memory_limit do PHP era $1; foi aumentada para $2.", "config-memory-bad": "Aviso: A configuração memory_limit do PHP é $1.\nIsto é provavelmente demasiado baixo.\nA instalação poderá falhar!", - "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalada", "config-apc": "[http://www.php.net/apc APC] instalada", "config-apcu": "[http://www.php.net/apcu APCu] instalado", - "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] instalada", - "config-no-cache-apcu": "Aviso: Não foram encontrados o [http://www.php.net/apcu APCu], o [http://xcache.lighttpd.net/ XCache] ou o [http://www.iis.net/download/WinCacheForPhp WinCache].\nA cache de objetos não está ativa.", - "config-mod-security": "Aviso: O seu servidor de Internet tem o [http://modsecurity.org/ mod_security]/mod_security2 ativado. Muitas das suas configurações normais podem causar problemas ao MediaWiki e a outros programas, permitindo que os utilizadores publiquem conteúdos arbitrários.\nSe possível, isto deve ser desativado. Se não, consulte a [http://modsecurity.org/documentation/ mod_security documentação] ou peça apoio ao fornecedor do alojamento do seu servidor se encontrar erros aleatórios.", + "config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] instalada", + "config-no-cache-apcu": "Aviso: Não foi encontrado o [http://www.php.net/apcu APCu] nem o [http://www.iis.net/download/WinCacheForPhp WinCache].\nA cache de objetos não está ativa.", + "config-mod-security": "Aviso: O seu servidor de Internet tem o [https://modsecurity.org/ mod_security]/mod_security2 ativado. Muitas das suas configurações normais podem causar problemas ao MediaWiki e a outros programas, permitindo que os utilizadores publiquem conteúdos arbitrários.\nSe possível, isto deve ser desativado. Se não, consulte a [https://modsecurity.org/documentation/ mod_security documentação] ou peça apoio ao fornecedor do alojamento do seu servidor se encontrar erros aleatórios.", "config-diff3-bad": "O GNU diff3 não foi encontrado.", "config-git": "Foi encontrado o software de controlo de versões Git: $1.", "config-git-bad": "Não foi encontrado o software de controlo de versões Git.", @@ -193,7 +192,7 @@ "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", @@ -239,7 +238,7 @@ "config-license-gfdl": "GNU Free Documentation License 1.3 ou posterior", "config-license-pd": "Domínio Público", "config-license-cc-choose": "Selecionar uma licença personalizada Creative Commons", - "config-license-help": "Muitas wikis de acesso público licenciam todas as colaborações com uma [http://freedomdefined.org/Definition licença livre].\nIsto ajuda a criar um sentido de propriedade da comunidade e encoraja as colaborações a longo prazo.\nTal não é geralmente necessário nas wikis privadas ou corporativas.\n\nSe pretende que seja possível usar textos da Wikipédia na sua wiki e que seja possível a Wikipédia aceitar textos copiados da sua wiki, deve escolher a licença {{int:config-license-cc-by-sa}}..\n\nA licença anterior da Wikipédia era a licença GNU Free Documentation License.\nA GFDL é uma licença válida, mas de difícil compreensão.\nTambém é difícil reutilizar conteúdos licenciados com a GFDL.", + "config-license-help": "Muitas wikis de acesso público licenciam todas as colaborações com uma [https://freedomdefined.org/Definition licença livre].\nIsto ajuda a criar um sentido de propriedade da comunidade e encoraja as colaborações a longo prazo.\nTal não é geralmente necessário nas wikis privadas ou corporativas.\n\nSe pretende que seja possível usar textos da Wikipédia na sua wiki e que seja possível a Wikipédia aceitar textos copiados da sua wiki, deve escolher a licença {{int:config-license-cc-by-sa}}..\n\nA licença anterior da Wikipédia era a licença GNU Free Documentation License.\nA GFDL é uma licença válida, mas de difícil compreensão.\nTambém é difícil reutilizar conteúdos licenciados com a GFDL.", "config-email-settings": "Definições do correio eletrónico", "config-enable-email": "Ativar mensagens eletrónicas de saída", "config-enable-email-help": "Se quer que o correio eletrónico funcione, as [http://www.php.net/manual/en/mail.configuration.php definições de correio eletrónico do PHP] têm de estar configuradas corretamente.\nSe não pretende viabilizar qualquer funcionalidade de correio eletrónico, pode desativá-lo aqui.", @@ -261,15 +260,15 @@ "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-accel": "Cache de objetos do PHP (APC, APCu ou WinCache)", "config-cache-memcached": "Usar Memcached (requer instalação e configurações adicionais)", "config-memcached-servers": "Servidores Memcached:", "config-memcached-help": "Lista de endereços IP que serão usados para o Memcached.\nDeve-se colocar um por linha e indicar a porta a utilizar. Por exemplo:\n 127.0.0.1:11211\n 192.168.1.25:1234", diff --git a/includes/installer/i18n/qqq.json b/includes/installer/i18n/qqq.json index 2fc95ceaa7..d82c74b162 100644 --- a/includes/installer/i18n/qqq.json +++ b/includes/installer/i18n/qqq.json @@ -19,7 +19,8 @@ "Waldir", "Jdforrester", "Liuxinyu970226", - "Metalhead64" + "Metalhead64", + "Tacsipacsi" ] }, "config-desc": "Short description of the installer.", @@ -30,7 +31,7 @@ "config-localsettings-key": "Label for the upgrade key that confirms a user upgrading through the web UI has access to LocalSettings.php. Details at https://www.mediawiki.org/wiki/Manual:Upgrading#Web_browser.", "config-localsettings-badkey": "Error message when an incorrect upgrade key has been provided while trying to upgrade.", "config-upgrade-key-missing": "Used in info box. Parameters:\n* $1 - the upgrade key, enclosed in
 tag.",
-	"config-localsettings-incomplete": "{{doc-important|Do not translate LocalSettings.php and {{int:Config-continue}}.}}\nParameters:\n* $1 - name of variable (any one of required variables or installer-specific global variables)",
+	"config-localsettings-incomplete": "{{doc-important|Do not translate LocalSettings.php and {{int:Config-continue}}.}}\nParameters:\n* $1 - name of variable (any one of required variables or installer-specific global variables)",
 	"config-localsettings-connection-error": "{{doc-important|Do not translate LocalSettings.php.}}\nUsed as error message. Parameters:\n* $1 - (probably empty string)",
 	"config-session-error": "Parameters:\n* $1 is the error that was encountered with the session.",
 	"config-session-expired": "Parameters:\n* $1 is the configured session lifetime.",
@@ -75,7 +76,6 @@
 	"config-pcre-no-utf8": "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.\n{{Related|Config-fatal}}",
 	"config-memory-raised": "Parameters:\n* $1 is the configured memory_limit.\n* $2 is the value to which memory_limit was raised.",
 	"config-memory-bad": "Parameters:\n* $1 is the configured memory_limit.",
-	"config-xcache": "Message indicates if this program is available",
 	"config-apc": "Message indicates if this program is available",
 	"config-apcu": "Message indicates if this program is available",
 	"config-wincache": "Message indicates if this program is available",
diff --git a/includes/installer/i18n/ro.json b/includes/installer/i18n/ro.json
index 14c60fe573..0d3f312338 100644
--- a/includes/installer/i18n/ro.json
+++ b/includes/installer/i18n/ro.json
@@ -47,9 +47,8 @@
 	"config-env-bad": "Verificarea mediului a fost efectuată.\nNu puteți instala MediaWiki.",
 	"config-env-php": "PHP $1 este instalat.",
 	"config-env-hhvm": "HHVM $1 este instalat.",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] este instalat",
 	"config-apc": "[http://www.php.net/apc APC] este instalat",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] este instalat",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] este instalat",
 	"config-diff3-bad": "GNU diff3 nu a fost găsit.",
 	"config-no-uri": "Eroare: Nu pot determina URI-ul curent.\nInstalare întreruptă.",
 	"config-db-type": "Tipul bazei de date:",
diff --git a/includes/installer/i18n/ru.json b/includes/installer/i18n/ru.json
index 3142e71d12..f47e3f76b2 100644
--- a/includes/installer/i18n/ru.json
+++ b/includes/installer/i18n/ru.json
@@ -24,7 +24,8 @@
 			"StasR",
 			"Irus",
 			"Mailman",
-			"Facenapalm"
+			"Facenapalm",
+			"Movses"
 		]
 	},
 	"config-desc": "Инсталлятор MediaWiki",
@@ -64,14 +65,14 @@
 	"config-help-restart": "Вы хотите удалить все сохранённые данные, которые вы ввели, и запустить процесс установки заново?",
 	"config-restart": "Да, начать заново",
 	"config-welcome": "=== Проверка окружения ===\nБудут проведены базовые проверки с целью определить, подходит ли данная система для установки MediaWiki.\nНе забудьте включить эту информацию, если вам потребуется помощь для завершения установки.",
-	"config-copyright": "=== Авторские права и условия ===\n\n$1\n\nMediaWiki — свободное программное обеспечение, которое вы можете распространять и/или изменять в соответствии с условиями лицензии GNU General Public License, опубликованной фондом свободного программного обеспечения; второй версии, либо любой более поздней версии.\n\nMediaWiki распространяется в надежде, что она будет полезной, но без каких-либо гарантий, даже без подразумеваемых гарантий коммерческой ценности или пригодности для определённой цели. См. лицензию GNU General Public License для более подробной информации.\n\nВы должны были получить копию GNU General Public License вместе с этой программой, если нет, то напишите Free Software Foundation, Inc., по адресу: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [http://www.gnu.org/copyleft/gpl.html прочтите её онлайн].",
+	"config-copyright": "=== Авторские права и условия ===\n\n$1\n\nMediaWiki — свободное программное обеспечение, которое вы можете распространять и/или изменять в соответствии с условиями лицензии GNU General Public License, опубликованной фондом свободного программного обеспечения; второй версии, либо любой более поздней версии.\n\nMediaWiki распространяется в надежде, что она будет полезной, но без каких-либо гарантий, даже без подразумеваемых гарантий коммерческой ценности или пригодности для определённой цели. См. лицензию GNU General Public License для более подробной информации.\n\nВы должны были получить копию GNU General Public License вместе с этой программой, если нет, то напишите Free Software Foundation, Inc., по адресу: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [https://www.gnu.org/copyleft/gpl.html прочтите её онлайн].",
 	"config-sidebar": "* [https://www.mediawiki.org Сайт MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/ru Справка для пользователей]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/ru Справка для администраторов]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ru FAQ]\n----\n* Readme-файл\n* Информация о выпуске\n* Лицензия\n* Обновление",
 	"config-env-good": "Проверка внешней среды была успешно проведена.\nВы можете установить MediaWiki.",
 	"config-env-bad": "Была проведена проверка внешней среды.\nВы не можете установить MediaWiki.",
 	"config-env-php": "Установленная версия PHP: $1.",
 	"config-env-hhvm": "HHVM $1 установлена.",
-	"config-unicode-using-intl": "Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.",
-	"config-unicode-pure-php-warning": "'''Внимание!''': [http://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.\nЕсли ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникода].",
+	"config-unicode-using-intl": "Будет использовано [https://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.",
+	"config-unicode-pure-php-warning": "'''Внимание!''': [https://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.\nЕсли ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникода].",
 	"config-unicode-update-warning": "'''Предупреждение''': установленная версия обёртки нормализации Юникода использует старую версию библиотеки [http://site.icu-project.org/ проекта ICU].\nВы должны [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations обновить версию], если хотите полноценно использовать Юникод.",
 	"config-no-db": "Не удалось найти подходящие драйвера баз данных! Вам необходимо установить драйвера базы данных для PHP.\n{{PLURAL:$2|Поддерживается следующий тип|Поддерживаются следующие типы}} баз данных: $1.\n\nЕсли вы скомпилировали PHP сами, перенастройте его с включением клиента баз данных, например, с помощью ./configure --with-mysqli.\nЕсли вы установили PHP из пакетов Debian или Ubuntu, то вам также необходимо установить, например, пакет php5-mysql.",
 	"config-outdated-sqlite": "'''Предупреждение''': у Вас установлен SQLite  $1, версия которого ниже требуемой $2 . SQLite будет недоступен.",
@@ -80,12 +81,11 @@
 	"config-pcre-no-utf8": "'''Фатальная ошибка'''. Модуль PCRE для PHP, похоже, собран без поддержки PCRE_UTF8.\nMediaWiki требует поддержки UTF-8 для корректной работы.",
 	"config-memory-raised": "Ограничение на доступную PHP память (memory_limit) поднято с $1 до $2.",
 	"config-memory-bad": "'''Внимание:''' размер PHP memory_limit составляет $1.\nВероятно, этого слишком мало.\nУстановка может потерпеть неудачу!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] установлен",
 	"config-apc": "[http://www.php.net/apc APC] установлен",
 	"config-apcu": "[http://www.php.net/apcu APCu] установлен",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] установлен",
-	"config-no-cache-apcu": "'''Внимание:''' Не найдены [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nКэширование объектов будет отключено.",
-	"config-mod-security": "Внимание: На вашем веб-сервере включен [http://modsecurity.org/ mod_security]/mod_security2. Многие его стандартные настройки могут вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный контент.\nОбратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в службу поддержки вашего хостинг-провайдера, если вы сталкиваетесь со случайными ошибками.",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] установлен",
+	"config-no-cache-apcu": "Внимание: Не найдены [http://www.php.net/apcu APCu] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nКэширование объектов будет отключено.",
+	"config-mod-security": "Внимание: На вашем веб-сервере включён [https://modsecurity.org/ mod_security]/mod_security2. Многие его стандартные настройки могут вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный контент.\nПо возможности он должен быть отключён. Обратитесь к [https://modsecurity.org/documentation/ документации mod_security] или в службу поддержки вашего хостинг-провайдера, если вы сталкиваетесь со случайными ошибками.",
 	"config-diff3-bad": "GNU diff3 не найден.",
 	"config-git": "Найдена система контроля версий Git: $1.",
 	"config-git-bad": "Программное обеспечение по управлению версиями Git не найдено.",
@@ -243,7 +243,7 @@
 	"config-license-gfdl": "GNU Free Documentation License 1.3 или более поздняя",
 	"config-license-pd": "Общественное достояние",
 	"config-license-cc-choose": "Выберите одну из лицензий Creative Commons",
-	"config-license-help": "Многие общедоступные вики разрешают использовать свои материалы на условиях [http://freedomdefined.org/Definition/Ru свободных лицензий].\nЭто помогает созданию чувства общности, стимулирует долгосрочное участие.\nНо в этом нет необходимости для частных или корпоративных вики.\n\nЕсли вы хотите использовать тексты из Википедии или хотите, что в Википедию можно было копировать тексты из вашей вики, вам следует выбрать {{int:config-license-cc-by-sa}}.\n\nВикипедия ранее использовала лицензию GNU Free Documentation License.\nGFDL может быть использована, но она сложна для понимания и осложняет повторное использование материалов.",
+	"config-license-help": "Многие общедоступные вики разрешают использовать свои материалы на условиях [https://freedomdefined.org/Definition/Ru свободных лицензий].\nЭто помогает созданию чувства общности, стимулирует долгосрочное участие.\nНо в этом нет необходимости для частных или корпоративных вики.\n\nЕсли вы хотите использовать тексты из Википедии или хотите, что в Википедию можно было копировать тексты из вашей вики, вам следует выбрать {{int:config-license-cc-by-sa}}.\n\nВикипедия ранее использовала лицензию GNU Free Documentation License.\nGFDL может быть использована, но она сложна для понимания и осложняет повторное использование материалов.",
 	"config-email-settings": "Настройки электронной почты",
 	"config-enable-email": "Включить исходящие e-mail",
 	"config-enable-email-help": "Если вы хотите, чтобы электронная почта работала, необходимо выполнить [http://www.php.net/manual/ru/mail.configuration.php соответствующие настройки PHP].\nЕсли вы не хотите использовать возможности электронной почты в вики, вы можете её отключить.",
@@ -273,7 +273,7 @@
 	"config-cache-options": "Параметры кэширования объектов:",
 	"config-cache-help": "Кэширование объектов используется для повышения скорости MediaWiki путем кэширования часто используемых данных.\nДля средних и больших сайтов кеширование настоятельно рекомендуется включать, а для небольших сайтов кеширование может показать преимущество.",
 	"config-cache-none": "Без кэширования (никакой функционал не теряется, но крупные вики-сайты могут работать медленнее)",
-	"config-cache-accel": "Кэширование PHP-объектов (APC, APCu, XCache или WinCache)",
+	"config-cache-accel": "Кэширование PHP-объектов (APC, APCu или WinCache)",
 	"config-cache-memcached": "Использовать Memcached (требует дополнительной настройки)",
 	"config-memcached-servers": "Сервера Memcached:",
 	"config-memcached-help": "Список IP-адресов, используемых Memcached.\nПеречислите по одному адресу на строку с указанием портов. Например:\n 127.0.0.1:11211\n 192.168.1.25:1234",
diff --git a/includes/installer/i18n/sco.json b/includes/installer/i18n/sco.json
index c79c22d37e..292e6361ef 100644
--- a/includes/installer/i18n/sco.json
+++ b/includes/installer/i18n/sco.json
@@ -45,14 +45,14 @@
 	"config-help-restart": "Div ye wish tae clear aw hained data that ye'v entered n restairt the instawlation process?",
 	"config-restart": "Ai, restart it",
 	"config-welcome": "=== Environmêntal checks ===\nBasic checks will nou be performed tae see gif this environment is suitable fer MediaWiki installâtion.\nMynd tae inclæde this information gif ye seek heelp oan hou tae complete the installâtion.",
-	"config-copyright": "=== Copiericht n Terms ===\n\n$1\n\nThis program is free saffware; ye can redistreebute it n/or modifie it unner the terms o the GNU General Public License aes published bi the Free Software Foundation; either version 2 o the License, or (yer optie) onie later version.\n\nThis program is distributed in the hope that it will be uiseful, but wioot onie warrantie; wioot even the implied warrantie o merchantabeelity or fitness fer ae parteecular purpose.\nSee the GNU General Public License fer mair details.\n\nYe shid hae receeved  ae copie o the GNU General Publeec License alang wi this program; gif naw, write til the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or [http://www.gnu.org/copyleft/gpl.html read it online].",
+	"config-copyright": "=== Copiericht n Terms ===\n\n$1\n\nThis program is free saffware; ye can redistreebute it n/or modifie it unner the terms o the GNU General Public License aes published bi the Free Software Foundation; either version 2 o the License, or (yer optie) onie later version.\n\nThis program is distributed in the hope that it will be uiseful, but wioot onie warrantie; wioot even the implied warrantie o merchantabeelity or fitness fer ae parteecular purpose.\nSee the GNU General Public License fer mair details.\n\nYe shid hae receeved  ae copie o the GNU General Publeec License alang wi this program; gif naw, write til the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or [https://www.gnu.org/copyleft/gpl.html read it online].",
 	"config-sidebar": "* [https://www.mediawiki.org MediaWiki home]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrator's Guide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Read me\n* Release notes\n* Copiein\n* Upgradin",
 	"config-env-good": "The environment haes been checked.\nYe can install MediaWiki.",
 	"config-env-bad": "The environment haes been checked.\nYe canna install MediaWiki.",
 	"config-env-php": "PHP $1 is instâlled.",
 	"config-env-hhvm": "HHVM $1 is instawed.",
-	"config-unicode-using-intl": "Uising the [http://pecl.php.net/intl intl PECL extension] fer Unicode normalization.",
-	"config-unicode-pure-php-warning": "Warnishment: The [http://pecl.php.net/intl intl PECL extension] is no available tae haunle Unicode normalisation, fawin back tae slaw pure-PHP implementation.\nGif ye rin ae hei-traffic steid, ye shid read ae wee bit oan [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
+	"config-unicode-using-intl": "Uising the [https://pecl.php.net/intl intl PECL extension] fer Unicode normalization.",
+	"config-unicode-pure-php-warning": "Warnishment: The [https://pecl.php.net/intl intl PECL extension] is no available tae haunle Unicode normalisation, fawin back tae slaw pure-PHP implementation.\nGif ye rin ae hei-traffic steid, ye shid read ae wee bit oan [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
 	"config-unicode-update-warning": "Wairnin: The installed version o the Unicode normalisation wrapper uises an aulder version o [http://site.icu-project.org/ the ICU project's] library.\nYe shoud [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if ye are at aw concerned aboot uisin Unicode.",
 	"config-no-db": "Could nae find a suitable database driver! Ye need tae install a database driver for PHP.\nThe follaein database {{PLURAL:$2|type is|types are}} supportit: $1.\n\nIf you compiled PHP yersel, reconfigur it wi a database client enabled, for example, uisin ./configure --with-mysqli.\nIf ye installed PHP frae a Debian or Ubuntu package, then ye an aa need tae install, for example, the php5-mysql package.",
 	"config-outdated-sqlite": "Warnishment: ye have SQLite $1, this is lower than minimum required version $2. SQLite will be onavailable.",
@@ -61,11 +61,10 @@
 	"config-pcre-no-utf8": "Fatal: PHP's PCRE module seems tae be compiled wioot PCRE_UTF8 support.\nMediaWiki requires UTF-8 support tae function correctly.",
 	"config-memory-raised": "PHP's memerie_limit is $1, raised til $2.",
 	"config-memory-bad": "Warnishment: PHP's memerie_limit is $1.\nThis is proably ower low.\nThe installation micht fail!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] is installed.",
 	"config-apc": "[http://www.php.net/apc APC] is installed.",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is instawed.",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] is instawed.",
 	"config-no-cache-apcu": "Wairnin: Could nae find [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObject cachin isna enabled.",
-	"config-mod-security": "Warnishment: Yer wab server haes [http://modsecurity.org/ mod_security] enabled. Gif misconfeegured, it can cause problems fer MediaWiki or ither saffware that allous uisers tae post arbitrie content.\nRefer til [http://modsecurity.org/documentation/ mod_security documentation] or contact yer host's support gif ye encounter random mistaks.",
+	"config-mod-security": "Warnishment: Yer wab server haes [https://modsecurity.org/ mod_security] enabled. Gif misconfeegured, it can cause problems fer MediaWiki or ither saffware that allous uisers tae post arbitrie content.\nRefer til [https://modsecurity.org/documentation/ mod_security documentation] or contact yer host's support gif ye encounter random mistaks.",
 	"config-diff3-bad": "GNU diff3 naw foond.",
 	"config-git": "Foond the Git version control saffware: $1.",
 	"config-git-bad": "Git version control saffware no foond.",
@@ -217,7 +216,7 @@
 	"config-license-gfdl": "GNU Free Documentâtion License 1.3 or later",
 	"config-license-pd": "Public Domain",
 	"config-license-cc-choose": "Select ae custym Creative Commyns license",
-	"config-license-help": "Monie publeec wikis pit aw contreebutions unner ae [http://freedomdefined.org/Defineetion free license].\nThis heelps tae creaut ae sense o communitie ainership n encoorages lang-term contreebution.\nIt's naw generallie necessair fer ae preevate or corporate wiki.\n\nGif ye wish tae be able tae uise tex fae Wikipædia, n ye want Wikipædia tae be able tae accept tex copied fae yer wiki, than ye shid chuise Creative Commons Attribution Shair Alike.\n\nWikipædia preeveeooslie uised the GNU Free Documentation License.\nThe GFDL is ae valid license, but it's difficult tae unnerstaunn.\nMairower, it's difficult tae reuise content licensed unner the GFDL.",
+	"config-license-help": "Monie publeec wikis pit aw contreebutions unner ae [https://freedomdefined.org/Defineetion free license].\nThis heelps tae creaut ae sense o communitie ainership n encoorages lang-term contreebution.\nIt's naw generallie necessair fer ae preevate or corporate wiki.\n\nGif ye wish tae be able tae uise tex fae Wikipædia, n ye want Wikipædia tae be able tae accept tex copied fae yer wiki, than ye shid chuise Creative Commons Attribution Shair Alike.\n\nWikipædia preeveeooslie uised the GNU Free Documentation License.\nThe GFDL is ae valid license, but it's difficult tae unnerstaunn.\nMairower, it's difficult tae reuise content licensed unner the GFDL.",
 	"config-email-settings": "Wab-mail settins",
 	"config-enable-email": "Enable ootboond wab-mail",
 	"config-enable-email-help": "Gif ye want wab-mail tae wark, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settins] need tae be confeegured jyst richt.\nGif ye dinna want oni wab-mail features, ye can disable theim here.",
diff --git a/includes/installer/i18n/sl.json b/includes/installer/i18n/sl.json
index 86d88a3d6b..0bd079b8e1 100644
--- a/includes/installer/i18n/sl.json
+++ b/includes/installer/i18n/sl.json
@@ -3,7 +3,8 @@
 		"authors": [
 			"Dbc334",
 			"Eleassar",
-			"Yerpo"
+			"Yerpo",
+			"HairyFotr"
 		]
 	},
 	"config-desc": "Namestitveni program za MediaWiki",
@@ -48,11 +49,10 @@
 	"config-env-bad": "Okolje je pregledano.\nNe morete namestiti MediaWiki.",
 	"config-env-php": "Nameščen je PHP $1.",
 	"config-env-hhvm": "HHVM $1 je nameščen.",
-	"config-unicode-using-intl": "Uporaba [http://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.",
+	"config-unicode-using-intl": "Uporaba [https://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.",
 	"config-memory-raised": "PHP-jev memory_limit je $1, dvignjen na $2.",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] je nameščen",
 	"config-apc": "[http://www.php.net/apc APC] je nameščen",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je nameščen",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] je nameščen",
 	"config-diff3-bad": "GNU diff3 ni bilo mogoče najti.",
 	"config-using-server": "Uporabljam ime strežnika \"$1\".",
 	"config-using-uri": "Uporabljam URL strežnika \"$1$2\".",
@@ -165,7 +165,7 @@
 	"config-cc-again": "Izberi ponovno ...",
 	"config-cc-not-chosen": "Izberite licenco Creative Commons, ki jo želite uporabiti, in kliknite »proceed«.",
 	"config-advanced-settings": "Napredna konfiguracija",
-	"config-cache-accel": "Predpomnjenje predmetov PHP (APC, APCu, XCache ali WinCache)",
+	"config-cache-accel": "Predpomnjenje predmetov PHP (APC, APCu ali WinCache)",
 	"config-cache-memcached": "Uporabi Memcached (zahteva dodatno namestitev in konfiguracijo)",
 	"config-memcached-servers": "Strežniki Memcached:",
 	"config-memcache-badip": "Vnesli ste neveljaven IP-naslov za Memcached: $1",
diff --git a/includes/installer/i18n/sr-ec.json b/includes/installer/i18n/sr-ec.json
index 02f633593e..335bc6a6e6 100644
--- a/includes/installer/i18n/sr-ec.json
+++ b/includes/installer/i18n/sr-ec.json
@@ -6,12 +6,14 @@
 			"Milicevic01",
 			"Aktron",
 			"Сербијана",
-			"Zoranzoki21"
+			"Zoranzoki21",
+			"Acamicamacaraca"
 		]
 	},
 	"config-desc": "Инсталација за Медијавики",
 	"config-title": "Инсталација Медијавикија $1",
-	"config-information": "Информације",
+	"config-information": "Информација",
+	"config-localsettings-key": "Кључ за уградњу:",
 	"config-session-error": "Грешка при започињању сесије: $1",
 	"config-session-expired": "Ваши подаци о сесији су истекли.\nСесије су подешене да трају $1.\nЊихов рок можете повећати постављањем session.gc_maxlifetime у php.ini.\nПоново покрените инсталацију.",
 	"config-no-session": "Ваши подаци о сесији су изгубљени!\nПроверите Ваш php.ini и обезбедите да је session.save_path постављен на одговарајући директоријум.",
@@ -22,12 +24,12 @@
 	"config-back": "← Назад",
 	"config-continue": "Настави →",
 	"config-page-language": "Језик",
-	"config-page-welcome": "Добро дошли на МедијаВики!",
+	"config-page-welcome": "Добро дошли на Медијавики!",
 	"config-page-dbconnect": "Повезивање са базом података",
 	"config-page-upgrade": "Надоградња постојеће инсталације",
 	"config-page-dbsettings": "Подешавања базе података",
 	"config-page-name": "Назив",
-	"config-page-options": "Поставке",
+	"config-page-options": "Подешавања",
 	"config-page-install": "Инсталирај",
 	"config-page-complete": "Завршено!",
 	"config-page-restart": "Поновно покретање инсталације",
@@ -40,13 +42,17 @@
 	"config-restart": "Да, покрени поново",
 	"config-env-php": "PHP $1 је инсталиран.",
 	"config-env-hhvm": "HHVM $1 је инсталиран.",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] је инсталиран",
 	"config-apc": "[http://www.php.net/apc APC] је инсталиран",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] је инсталиран",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] је инсталиран",
 	"config-db-type": "Тип базе података:",
 	"config-db-host": "Хост базе података",
+	"config-db-wiki-settings": "Идентификуј овај вики",
 	"config-db-name": "Назив базе података:",
-	"config-db-password": "Лозинка за базу података:",
+	"config-db-name-oracle": "Шема базе података:",
+	"config-db-username": "Корисничко име базе података:",
+	"config-db-password": "Лозинка базе података:",
+	"config-db-port": "Порт базе података:",
+	"config-db-schema": "Шема за Медијавики:",
 	"config-type-mysql": "MySQL (или компактибилан)",
 	"config-type-postgres": "PostgreSQL",
 	"config-type-sqlite": "SQLite",
@@ -60,13 +66,13 @@
 	"config-mysql-myisam": "MyISAM",
 	"config-mysql-utf8": "UTF-8",
 	"config-mssql-auth": "Тип провере идентитета:",
-	"config-mssql-sqlauth": "Провера идентитета за SQL Server",
-	"config-mssql-windowsauth": "Провера идентитета Windows-а",
+	"config-mssql-sqlauth": "Провера идентитета SQL Server-а",
+	"config-mssql-windowsauth": "Провера идентитета Виндоуса",
 	"config-site-name": "Име викија:",
-	"config-admin-name": "Корисничко име:",
+	"config-admin-name": "Ваше корисничко име:",
 	"config-admin-password": "Лозинка:",
 	"config-admin-email": "Имејл адреса:",
-	"config-optional-skip": "Досадно ми је, хајде да инсталирамо вики.",
+	"config-optional-skip": "Досадно ми је, само инсталирај вики.",
 	"config-profile-no-anon": "Неопходно је отворити налог",
 	"config-profile-fishbowl": "Само овлашћени корисници",
 	"config-profile-private": "Приватна вики",
@@ -76,16 +82,25 @@
 	"config-license-cc-by": "Creative Commons Ауторство (CC BY)",
 	"config-license-cc-by-nc-sa": "Creative Commons Ауторство-Некомерцијално-Делити под истим условима (CC BY-NC-SA)",
 	"config-license-cc-0": "Creative Commons Zero (јавно власништво)",
-	"config-license-gfdl": "ГНУ-ова лиценца за слободну документацију верзија 1.3 или новија верзија",
+	"config-license-gfdl": "ГНУ-ова лиценца за слободну документацију издање 1.3 или новије",
 	"config-license-pd": "Јавно власништво",
 	"config-email-settings": "Подешавања имејла",
 	"config-cc-not-chosen": "Одаберите која Кријејтив комонс лиценца вам одговара и потврдите.",
 	"config-skins": "Теме",
 	"config-install-step-done": "готово",
 	"config-install-step-failed": "није успело",
+	"config-install-extensions": "Обухвата екстензије",
+	"config-install-schema": "Прављење шеме",
+	"config-install-tables": "Прављење табела",
+	"config-install-keys": "Генеришем тајне кључеве",
 	"config-install-mainpage-exists": "Главна страна већ постоји, прескакање",
+	"config-install-mainpage-failed": "Не могу да убацим главну страну: „$1”",
+	"config-download-localsettings": "Преузми LocalSettings.php",
 	"config-help": "помоћ",
 	"config-help-tooltip": "кликните да проширите",
+	"config-nofile": "Не могу да пронађем датотеку „$1”. Није ли она била избрисана?",
+	"config-skins-screenshots": "„$1” (снимци екрана: $2)",
+	"config-screenshot": "снимак екрана",
 	"mainpagetext": "Медијавики је успешно инсталиран.",
-	"mainpagedocfooter": "Погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]"
+	"mainpagedocfooter": "Погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописни списак о издањима Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борите против спама на Вашој вики]"
 }
diff --git a/includes/installer/i18n/sv.json b/includes/installer/i18n/sv.json
index 861e3e62e4..74b8ac19e8 100644
--- a/includes/installer/i18n/sv.json
+++ b/includes/installer/i18n/sv.json
@@ -49,14 +49,14 @@
 	"config-help-restart": "Vill du rensa all sparad data som du har angivit och starta om installationen?",
 	"config-restart": "Ja, starta om",
 	"config-welcome": "=== Miljökontroller ===\nGrundläggande kontroller kommer nu att utföras för att se om denna miljö är lämplig för installation av MediaWiki.\nKom ihåg att ta med denna information om du söker stöd för hur du skall slutföra installationen.",
-	"config-copyright": "=== Upphovsrätt och Villkor ===\n\n$1\n\nDetta program är fri programvara; du kan vidaredistribuera den och/eller modifiera det enligt villkoren i GNU General Public License som publicerats av Free Software Foundation; antingen genom version 2 av licensen, eller (på ditt initiativ) någon senare version.\n\nDetta program är distribuerat i hopp om att det kommer att vara användbart, men '''utan någon garanti'''; utan att ens ha en underförstådd garanti om '''säljbarhet''' eller '''lämplighet för ett särskilt ändamål'''.\nSe GNU General Public License för mer detaljer.\n\nDu bör ha fått en kopia av GNU General Public License tillsammans med detta program; om inte, skriv till Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, eller [http://www.gnu.org/copyleft/gpl.html läs den online].",
+	"config-copyright": "=== Upphovsrätt och Villkor ===\n\n$1\n\nDetta program är fri programvara; du kan vidaredistribuera den och/eller modifiera det enligt villkoren i GNU General Public License som publicerats av Free Software Foundation; antingen genom version 2 av licensen, eller (på ditt initiativ) någon senare version.\n\nDetta program är distribuerat i hopp om att det kommer att vara användbart, men '''utan någon garanti'''; utan att ens ha en underförstådd garanti om '''säljbarhet''' eller '''lämplighet för ett särskilt ändamål'''.\nSe GNU General Public License för mer detaljer.\n\nDu bör ha fått en kopia av GNU General Public License tillsammans med detta program; om inte, skriv till Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, eller [https://www.gnu.org/copyleft/gpl.html läs den online].",
 	"config-sidebar": "* [https://www.mediawiki.org MediaWikis webbplats]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Användarguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratörguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Frågor och svar]\n----\n* Läs mig\n* Utgivningsanteckningar\n* Kopiering\n* Uppgradering",
 	"config-env-good": "Miljön har kontrollerats.\nDu kan installera MediaWiki.",
 	"config-env-bad": "Miljön har kontrollerats.\nDu kan inte installera MediaWiki.",
 	"config-env-php": "PHP $1 är installerat.",
 	"config-env-hhvm": "HHVM $1 är installerat.",
-	"config-unicode-using-intl": "Använder [http://pecl.php.net/intl intl PECL-tillägget] för Unicode-normalisering.",
-	"config-unicode-pure-php-warning": "'''Varning:''' [http://pecl.php.net/intl intl PECL-tillägget] är inte tillgängligt för att hantera Unicode-normalisering, faller tillbaka till en långsamt implementering i ren PHP.\nOm du driver en högtrafikerad webbplats bör du läsa lite om [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
+	"config-unicode-using-intl": "Använder [https://pecl.php.net/intl intl PECL-tillägget] för Unicode-normalisering.",
+	"config-unicode-pure-php-warning": "'''Varning:''' [https://pecl.php.net/intl intl PECL-tillägget] är inte tillgängligt för att hantera Unicode-normalisering, faller tillbaka till en långsamt implementering i ren PHP.\nOm du driver en högtrafikerad webbplats bör du läsa lite om [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
 	"config-unicode-update-warning": "Varning: Den installerade versionen av Unicode-normaliserings \"wrappern\" använder en äldre version av [http://site.icu-project.org/ ICU projektets] bibliotek.\nDu bör [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations uppgradera] om är intresserad av att använda Unicode.",
 	"config-no-db": "Kunde inte hitta en lämplig databasdrivrutin! Du måste installera en databasdrivrutin för PHP.\nFöljande databas{{PLURAL:$2|typ |typer}} stöds: $1.\n\nI du själv kompilerat din PHP, konfigurera den med en databasklient aktiverad genom att t.ex. använda ./configure --with-mysqli.\nOm du installerade PHP från ett Debian- eller Ubuntupaket måste du även installera, t.ex. php5-mysql-paketet.",
 	"config-outdated-sqlite": "'''Varning:''' du har SQLite $1, vilket är lägre än minimikravet version $2. SQLite kommer inte att vara tillgänglig.",
@@ -65,12 +65,11 @@
 	"config-pcre-no-utf8": "'''Kritiskt:''' PHP:s PCRE-modul verkar vara kompilerat utan PCRE_UTF8-stöd.\nMediaWiki kräver stöd för UTF-8 för att fungera korrekt.",
 	"config-memory-raised": "PHPs memory_limit är $1, ökad till $2.",
 	"config-memory-bad": "''' Varning:''' PHP:s memory_limit är $1.\nDetta är förmodligen för lågt.\nInstallationen kan misslyckas!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] är installerat",
 	"config-apc": "[http://www.php.net/apc APC] är installerat",
 	"config-apcu": "[http://www.php.net/apcu APCu] är installerat",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] är installerat",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] är installerat",
 	"config-no-cache-apcu": "'''Varning:''' Kunde inte hitta [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nCachelagring av objekt är inte aktiverat.",
-	"config-mod-security": "'''Varning:''' Din webbserver har [http://modsecurity.org/ mod_security] aktiverat. Om felaktigt konfigurerat kan den skapa problem för MediaWiki eller annan programvara som tillåter användaren att posta godtyckligt innehåll.\nTitta på [http://modsecurity.org/documentation/ mod_security-dokumentationen] eller kontakta din värd om du påträffar slumpmässiga fel.",
+	"config-mod-security": "'''Varning:''' Din webbserver har [https://modsecurity.org/ mod_security] aktiverat. Om felaktigt konfigurerat kan den skapa problem för MediaWiki eller annan programvara som tillåter användaren att posta godtyckligt innehåll.\nTitta på [https://modsecurity.org/documentation/ mod_security-dokumentationen] eller kontakta din värd om du påträffar slumpmässiga fel.",
 	"config-diff3-bad": "GNU diff3 hittades inte.",
 	"config-git": "Hittade Git-mjukvara för versionskontroll: $1.",
 	"config-git-bad": "Git-mjukvara för versionskontroll hittades inte.",
@@ -225,7 +224,7 @@
 	"config-license-gfdl": "GNU Free Documentation License 1.3 eller senare",
 	"config-license-pd": "Public Domain",
 	"config-license-cc-choose": "Välj en anpassad Creative Commons-licens",
-	"config-license-help": "Många publika wikis släpper alla bidrag under en  [http://freedomdefined.org/Definition fri licens].\nDetta bidrar till en känsla av gemensamt ägandeskap och uppmuntrar till långsiktiga bidrag.\nDet är i allmänhet inte nödvändigt för en privat eller företagswiki.\n\nOm du vill kunna använda text från Wikipedia, och du vill att Wikipedia ska kunna acceptera text kopierad ifrån din wiki bör du välja {{int:config-license-cc-by-sa}}.\n\nWikipedia använde tidigare  GNU Free Documentation License.\nGFDL är en giltig licens, men svår att förstå.\nDet är även svårt att återanvända innehåll som licensierats under GFDL.",
+	"config-license-help": "Många publika wikis släpper alla bidrag under en  [https://freedomdefined.org/Definition fri licens].\nDetta bidrar till en känsla av gemensamt ägandeskap och uppmuntrar till långsiktiga bidrag.\nDet är i allmänhet inte nödvändigt för en privat eller företagswiki.\n\nOm du vill kunna använda text från Wikipedia, och du vill att Wikipedia ska kunna acceptera text kopierad ifrån din wiki bör du välja {{int:config-license-cc-by-sa}}.\n\nWikipedia använde tidigare  GNU Free Documentation License.\nGFDL är en giltig licens, men svår att förstå.\nDet är även svårt att återanvända innehåll som licensierats under GFDL.",
 	"config-email-settings": "E-postinställningar",
 	"config-enable-email": "Aktivera utgående e-post",
 	"config-enable-email-help": "Om du vill att e-post ska fungera behöver,[http://www.php.net/manual/en/mail.configuration.php PHPs e-postinställningar] vara konfigurerad på rätt sätt.\nOm du inte vill ha några e-postfunktioner, kan du inaktivera dem här.",
diff --git a/includes/installer/i18n/te.json b/includes/installer/i18n/te.json
index 1978af0d06..9f7c531e6e 100644
--- a/includes/installer/i18n/te.json
+++ b/includes/installer/i18n/te.json
@@ -44,18 +44,17 @@
 	"config-help-restart": "మీరు భద్రపరిచిన డేటా మొత్తాన్ని తీసివేసి స్థాపనను తిరిగి ప్రారంభించాలా?",
 	"config-restart": "ఔను, తిరిగి ప్రారంభించు",
 	"config-welcome": "=== పర్యావరణ పరీక్షలు ===\nఈ పర్యావరణం MediaWiki స్థాపనకు అనుకూలంగా ఉందో లేదో చూసే ప్రాథమిక పరీక్షలు ఇపుడు చేస్తాం.\nస్థాపనను ఎలా పూర్తి చెయ్యాలనే విషయమై మీకు సహాయం అడిగేటపుడు, ఈ సమాచారాన్ని ఇవ్వాలని గుర్తుంచుకోండి.",
-	"config-copyright": "=== కాపీహక్కు, నిబంధనలు===\n\n$1\n\nఇది ఉచిత సాఫ్ట్‌వేరు; ఫ్రీ సాఫ్ట్‌వేర్ ఫౌండేషన్ వారు ప్రచురించిన GNU జనరల్ పబ్లిక్ లైసెన్సును (2వ లేదా తరువాతి వర్షన్) అనుసరించి దీన్ని పంపిణీ చెయ్యవచ్చు లేదా మార్చుకోనూవచ్చు.\n\nదీని వలన ఉపయోగం ఉంటుందనే నమ్మకంతో ప్రచురింపబడింది. కానీ ఎటువంటి వారంటీ లేదు;  వర్తకం చేయదగ్గ   లేదా  ఒక అవసరానికి సరిపడే సామర్థ్యం ఉన్నదనే అంతరార్థ వారంటీ కూడా లేదు.\nమరిన్ని వివరాలకు GNU జనరల్ పబ్లిక్ లైసెన్స్ చూడండి.\n\nమీరు ఈ ప్రోగ్రాముతో పాటు  GNU జనరల్ పబ్లిక్ లైసెన్స్ ప్రతిని  అందుకుని ఉండాలి; లేకపోతే, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA కు జాబు రాయండి లేదా [http://www.gnu.org/copyleft/gpl.html ఆన్‌లైన్‌లో చదివండి].",
+	"config-copyright": "=== కాపీహక్కు, నిబంధనలు===\n\n$1\n\nఇది ఉచిత సాఫ్ట్‌వేరు; ఫ్రీ సాఫ్ట్‌వేర్ ఫౌండేషన్ వారు ప్రచురించిన GNU జనరల్ పబ్లిక్ లైసెన్సును (2వ లేదా తరువాతి వర్షన్) అనుసరించి దీన్ని పంపిణీ చెయ్యవచ్చు లేదా మార్చుకోనూవచ్చు.\n\nదీని వలన ఉపయోగం ఉంటుందనే నమ్మకంతో ప్రచురింపబడింది. కానీ ఎటువంటి వారంటీ లేదు;  వర్తకం చేయదగ్గ   లేదా  ఒక అవసరానికి సరిపడే సామర్థ్యం ఉన్నదనే అంతరార్థ వారంటీ కూడా లేదు.\nమరిన్ని వివరాలకు GNU జనరల్ పబ్లిక్ లైసెన్స్ చూడండి.\n\nమీరు ఈ ప్రోగ్రాముతో పాటు  GNU జనరల్ పబ్లిక్ లైసెన్స్ ప్రతిని  అందుకుని ఉండాలి; లేకపోతే, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA కు జాబు రాయండి లేదా [https://www.gnu.org/copyleft/gpl.html ఆన్‌లైన్‌లో చదివండి].",
 	"config-sidebar": "* [https://www.mediawiki.org MediaWiki మొదటిపేజీ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents వాడుకరుల మార్గదర్శి]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents అధికారుల మార్గదర్శి]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* చదవాల్సినవి\n* విడుదల గమనికలు\n* కాపీ చెయ్యడం\n* ఉన్నతీకరించడం",
 	"config-env-good": "పర్యావరణాన్ని పరీక్షించాం.\nఇక మీరు MediaWiki ని స్థాపించుకోవచ్చు.",
 	"config-env-bad": "పర్యావరణాన్ని పరీక్షించాం.\nమీరు MediaWiki ని స్థాపించలేరు.",
 	"config-env-php": "PHP $1 స్థాపించబడింది.",
-	"config-unicode-using-intl": "యూనికోడు నార్మలైజేషన్ కోసం [http://pecl.php.net/intl intl PECL పొడిగింత] ను వాడుతున్నాం.",
+	"config-unicode-using-intl": "యూనికోడు నార్మలైజేషన్ కోసం [https://pecl.php.net/intl intl PECL పొడిగింత] ను వాడుతున్నాం.",
 	"config-outdated-sqlite": "హెచ్చరిక: మీ వద్ద SQLite $1 ఉంది. అదికావలసిన వెర్షను $2 కంటే దిగువది. SQLite అందుబాటులో ఉండదు.",
 	"config-memory-raised": "PHP యొక్క memory_limit $1, దాన్ని $2 కి పెంచాం.",
 	"config-memory-bad": "హెచ్చరిక: PHP యొక్క memory_limit $1.\nబహుశా ఇది మరీ తక్కువ.\nస్థాపన విఫలం కావచ్చు!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] స్థాపించబడింది",
 	"config-apc": "[http://www.php.net/apc APC] స్థాపించబడింది",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] స్థాపించబడింది",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] స్థాపించబడింది",
 	"config-diff3-bad": "GNU diff3 కనబడలేదు.",
 	"config-no-uri": "లోపం: ప్రస్తుత URI ఏమిటో నిర్ధారించలేకపోయాం.\nస్థాపన ఆగిపోయింది.",
 	"config-using-server": "సర్వరు పేరు \"$1\" ను వాడుతున్నాం.",
diff --git a/includes/installer/i18n/th.json b/includes/installer/i18n/th.json
index b60f2a6b23..d15387fba7 100644
--- a/includes/installer/i18n/th.json
+++ b/includes/installer/i18n/th.json
@@ -45,14 +45,14 @@
 	"config-help-restart": "คุณต้องการล้างข้อมูลทั้งหมดที่คุณกรอกและเริ่มกระบวนการติดตั้งใหม่อีกครั้งหรือไม่?",
 	"config-restart": "ใช่ เริ่มใหม่อีกครั้ง",
 	"config-welcome": "=== การตรวจสอบสภาพแวดล้อม ===\nการตรวจสอบเบื้องต้นจะกระทำขึ้น เพื่อยืนยันว่าสภาพแวดล้อมปัจจุบันเหมาะสมสำหรับการติดตั้ง MediaWiki หรือไม่\nโปรดจำไว้ว่าให้รวบรวมผลลัพธ์การตรวจสอบนี้ ถ้าคุณต้องการแสวงหาการสนับสนุนเพื่อที่จะติดตั้งให้สมบูรณ์",
-	"config-copyright": "=== ลิขสิทธิ์และเงื่อนไข ===\n\n$1\n\nโปรแกรมนี้เป็นซอฟต์แวร์เสรี คุณสามารถนำโปรแกรมนี้มาเผยแพร่ซ้ำและ/หรือดัดแปลงได้ภายใต้เงื่อนไขของสัญญาอนุญาตสาธารณะทั่วไปของ GNU (GNU General Public License) ซึ่งเผยแพร่โดย Free Software Foundation (สัญญาอนุญาตรุ่น 2 ขึ้นไป)\n\nโปรแกรมนี้ถูกเผยแพร่โดยหวังว่าจะเป็นประโยชน์แก่ผู้ใช้ แต่จะไม่มีการรับประกันใด ๆ แม้แต่การรับประกันเกี่ยวกับการนำไปใช้ในการซื้อขาย หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ\nสำหรับรายละเอียดเพิ่มเติม โปรดดูที่สัญญาอนุญาตสาธารณะทั่วไปของ GNU\n\nคุณควรได้รับสำเนาของสัญญาอนุญาตสาธารณะทั่วไปของ GNU มาพร้อมกับโปรแกรมนี้ ถ้าไม่ได้รับ ให้ขอได้ที่ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, \nหรือ[http://www.gnu.org/copyleft/gpl.html อ่านออนไลน์ที่นี่]",
+	"config-copyright": "=== ลิขสิทธิ์และเงื่อนไข ===\n\n$1\n\nโปรแกรมนี้เป็นซอฟต์แวร์เสรี คุณสามารถนำโปรแกรมนี้มาเผยแพร่ซ้ำและ/หรือดัดแปลงได้ภายใต้เงื่อนไขของสัญญาอนุญาตสาธารณะทั่วไปของ GNU (GNU General Public License) ซึ่งเผยแพร่โดย Free Software Foundation (สัญญาอนุญาตรุ่น 2 ขึ้นไป)\n\nโปรแกรมนี้ถูกเผยแพร่โดยหวังว่าจะเป็นประโยชน์แก่ผู้ใช้ แต่จะไม่มีการรับประกันใด ๆ แม้แต่การรับประกันเกี่ยวกับการนำไปใช้ในการซื้อขาย หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ\nสำหรับรายละเอียดเพิ่มเติม โปรดดูที่สัญญาอนุญาตสาธารณะทั่วไปของ GNU\n\nคุณควรได้รับสำเนาของสัญญาอนุญาตสาธารณะทั่วไปของ GNU มาพร้อมกับโปรแกรมนี้ ถ้าไม่ได้รับ ให้ขอได้ที่ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, \nหรือ[https://www.gnu.org/copyleft/gpl.html อ่านออนไลน์ที่นี่]",
 	"config-sidebar": "* [https://www.mediawiki.org โฮมเพจของ MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents แนวปฏิบัติของผู้ใช้]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents แนวปฏิบัติของผู้ดูแลระบบ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ คำถามที่ถามบ่อย]\n----\n* อ่านเอกสารกำกับ\n* บันทึกการเผยแพร่\n* การคัดลอก\n* การอัปเกรด",
 	"config-env-good": "ตรวจสอบสภาพแวดล้อมแล้ว\nคุณสามารถติดตั้ง MediaWiki",
 	"config-env-bad": "ตรวจสอบสภาพแวดล้อมแล้ว\nคุณไม่สามารถติดตั้ง MediaWiki",
 	"config-env-php": "มี PHP $1 ติดตั้งอยู่",
 	"config-env-hhvm": "มี HHVM $1 ติดตั้งอยู่",
-	"config-unicode-using-intl": "ใช้[http://pecl.php.net/intl ส่วนขยาย intl PECL] สำหรับการปรับ Unicode เข้าสู่รูปปกติ (Unicode normalization)",
-	"config-unicode-pure-php-warning": "คำเตือน: [http://pecl.php.net/intl intl ส่วนขยาย PECL] ไม่พร้อมใช้งานสำหรับการจัดมาตรฐาน Unicode กำลังกลับไปใช้ PHP ที่แท้จริงแบบช้า\nถ้าคุณเปิดดำเนินการไซต์ที่มีปริมาณการใช้งานสูง คุณควรอ่านดูเกี่ยวกับ[https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations การจัดมาตรฐาน Unicode] สักเล็กน้อย",
+	"config-unicode-using-intl": "ใช้[https://pecl.php.net/intl ส่วนขยาย intl PECL] สำหรับการปรับ Unicode เข้าสู่รูปปกติ (Unicode normalization)",
+	"config-unicode-pure-php-warning": "คำเตือน: [https://pecl.php.net/intl intl ส่วนขยาย PECL] ไม่พร้อมใช้งานสำหรับการจัดมาตรฐาน Unicode กำลังกลับไปใช้ PHP ที่แท้จริงแบบช้า\nถ้าคุณเปิดดำเนินการไซต์ที่มีปริมาณการใช้งานสูง คุณควรอ่านดูเกี่ยวกับ[https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations การจัดมาตรฐาน Unicode] สักเล็กน้อย",
 	"config-no-db": "ไม่พบไดรเวอร์ฐานข้อมูลที่เหมาะสม! คุณจำเป็นต้องติดตั้งไดรเวอร์ฐานข้อมูลสำหรับ PHP\nชนิดฐานข้อมูลต่อไปนี้ได้รับการสนับสนุน: $1\n\nถ้าคุณคอมไพล์ PHP ด้วยตนเอง ให้กำหนดค่าใหม่อีกครั้งโดยเปิดใช้งานไคลเอนต์ฐานข้อมูล ตัวอย่างเช่น ใช้ ./configure --with-mysqli\nถ้าคุณติดตั้ง PHP จากแพกเกจ Debian หรือ Ubuntu คุณก็จำเป็นต้องติดตั้งแพกเกจต่อไปนี้ ตัวอย่างเช่น แพกเกจ php5-mysql",
 	"config-outdated-sqlite": "คำเตือน: คุณมี SQLite $1 ซึ่งต่ำกว่ารุ่นขั้นต่ำที่ต้องการ $2 ดังนั้น SQLite จะไม่พร้อมให้ใช้งาน",
 	"config-no-fts3": "คำเตือน: SQLite ถูกคอมไพล์โดยไม่มี[//sqlite.org/fts3.html โมดูล FTS3] คุณลักษณะการค้นหาจะไม่พร้อมใช้งานบนแบ็กเอนด์นี้",
@@ -60,12 +60,11 @@
 	"config-pcre-no-utf8": "ข้อผิดพลาดร้ายแรง: โมดูล PCRE ของ PHP ดูเหมือนจะถูกคอมไพล์โดยไม่มีการรองรับ PCRE_UTF8\nMediaWiki ต้องการการรองรับ UTF-8 เพื่อให้ทำงานได้อย่างถูกต้อง",
 	"config-memory-raised": "memory_limit ของ PHP คือ $1 ได้เพิ่มเป็น $2",
 	"config-memory-bad": "คำเตือน: memory_limit ของ PHP คือ $1.\nเป็นไปได้ว่ามันอาจต่ำเกินไป\nการติดตั้งอาจล้มเหลวได้!",
-	"config-xcache": "มี [http://xcache.lighttpd.net/ XCache] ติดตั้งอยู่",
 	"config-apc": "มี [http://www.php.net/apc APC] ติดตั้งอยู่",
 	"config-apcu": "มี [http://www.php.net/apcu APCu] ติดตั้งอยู่",
-	"config-wincache": "มี [http://www.iis.net/download/WinCacheForPhp WinCache] ติดตั้งอยู่",
+	"config-wincache": "มี [https://www.iis.net/download/WinCacheForPhp WinCache] ติดตั้งอยู่",
 	"config-no-cache-apcu": "คำเตือน: ไม่พบ [http://www.php.net/apcu APCu] [http://xcache.lighttpd.net/ XCache] หรือ [http://www.iis.net/download/WinCacheForPhp WinCache]\nการแคชวัตถุไม่ได้ถูกเปิดใช้งาน",
-	"config-mod-security": "คำเตือน: เว็บเซิร์ฟเวอร์ของคุณมี [http://modsecurity.org/ mod_security]/mod_security2 เปิดใช้งานอยู่ การตั้งค่าทั่วไปหลายอย่างของสิ่งนี้จะก่อให้เกิดปัญหาสำหรับ MediaWiki และซอฟต์แวร์อื่นที่อนุญาตให้ผู้ใช้สามารถโพสต์เนื้อหาได้ตามที่ผู้ใช้\nหากเป็นไปได้ ควรปิดใช้งานคุณลักษณะนี้ หรือมิฉะนั้นก็ อ้างไปยัง[http://modsecurity.org/documentation/ เอกสารกำกับการใช้งาน mod_security] หรือติดต่อการสนับสนุนจากโฮสต์ของคุณ ถ้าคุณพบข้อผิดพลาดโดยสุ่ม",
+	"config-mod-security": "คำเตือน: เว็บเซิร์ฟเวอร์ของคุณมี [https://modsecurity.org/ mod_security]/mod_security2 เปิดใช้งานอยู่ การตั้งค่าทั่วไปหลายอย่างของสิ่งนี้จะก่อให้เกิดปัญหาสำหรับ MediaWiki และซอฟต์แวร์อื่นที่อนุญาตให้ผู้ใช้สามารถโพสต์เนื้อหาได้ตามที่ผู้ใช้\nหากเป็นไปได้ ควรปิดใช้งานคุณลักษณะนี้ หรือมิฉะนั้นก็ อ้างไปยัง[https://modsecurity.org/documentation/ เอกสารกำกับการใช้งาน mod_security] หรือติดต่อการสนับสนุนจากโฮสต์ของคุณ ถ้าคุณพบข้อผิดพลาดโดยสุ่ม",
 	"config-diff3-bad": "ไม่พบ GNU diff3",
 	"config-git": "พบซอฟต์แวร์ควบคุมรุ่น Git: $1",
 	"config-git-bad": "ไม่พบซอฟต์แวร์ควบคุมรุ่น Git",
diff --git a/includes/installer/i18n/tl.json b/includes/installer/i18n/tl.json
index 89705f3ee7..54a20168e0 100644
--- a/includes/installer/i18n/tl.json
+++ b/includes/installer/i18n/tl.json
@@ -48,14 +48,14 @@
 	"config-help-restart": "Nais mo bang hawiin ang lahat ng nasagip na datong ipinasok mo at muling simulan ang proseso ng pagluluklok?",
 	"config-restart": "Oo, muling simulan ito",
 	"config-welcome": "=== Pagsusuring pangkapaligiran ===\nIsasagawa ang payak na mga pagsusuri upang makita kung ang kapaligirang ito ay angkop para sa pagluluklok ng MediaWiki.\nTandaan na dapat isama mo itong impormasyon kung kailangan mo ng tulong kung paano tapusin ang instalasyon.",
-	"config-copyright": "=== Karapatang-ari at Tadhana ===\n\n$1\n\nAng programang ito ay malayang software; maaari mo itong ipamahagi at/o baguhin sa ilalim ng mga tadhana ng Pangkalahatang Pampublikong Lisensiyang GNU ayon sa pagkakalathala ng Free Software Foundation; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon.\n\nIpinamamahagi ang programang ito na umaasang magiging gamitin, subaliut '''walang anumang katiyakan'''; na walang pahiwatig ng '''pagiging mabenta''' o '''kaangkupan para sa isang tiyak na layunin'''.\nTingnan ang Pangkalahatang Pampublikong Lisensiyang GNU para sa mas maraming detalye.\n\nDapat nakatanggap ka ng isang sipi ng Pangkalahatang Pampublikong Lisensiyang GNU kasama ng programang ito; kung hindi, sumulat sa Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/licenses//gpl.html basahin ito sa Internet].",
+	"config-copyright": "=== Karapatang-ari at Tadhana ===\n\n$1\n\nAng programang ito ay malayang software; maaari mo itong ipamahagi at/o baguhin sa ilalim ng mga tadhana ng Pangkalahatang Pampublikong Lisensiyang GNU ayon sa pagkakalathala ng Free Software Foundation; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon.\n\nIpinamamahagi ang programang ito na umaasang magiging gamitin, subaliut '''walang anumang katiyakan'''; na walang pahiwatig ng '''pagiging mabenta''' o '''kaangkupan para sa isang tiyak na layunin'''.\nTingnan ang Pangkalahatang Pampublikong Lisensiyang GNU para sa mas maraming detalye.\n\nDapat nakatanggap ka ng isang sipi ng Pangkalahatang Pampublikong Lisensiyang GNU kasama ng programang ito; kung hindi, sumulat sa Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [https://www.gnu.org/licenses//gpl.html basahin ito sa Internet].",
 	"config-sidebar": "* [https://www.mediawiki.org Tahanan ng MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gabay ng Tagagamit]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Gabay ng Tagapangasiwa]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Mga Malimit Itanong]\n----\n* Basahin ako\n* Mga tala ng paglalabas\n* Pagkopya\n* Pagsasapanahon",
 	"config-env-good": "Nasuri na ang kapaligiran.\nMailuluklok mo ang MediaWiki.",
 	"config-env-bad": "Nasuri na ang kapaligiran.\nHindi mo mailuklok ang MediaWiki.",
 	"config-env-php": "Naitalaga ang PHP na $1.",
 	"config-env-hhvm": "Naka-install ang HHVM $1.",
-	"config-unicode-using-intl": "Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.",
-	"config-unicode-pure-php-warning": "'''Babala''': Ang [http://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.\nKapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
+	"config-unicode-using-intl": "Ginagamit ang [https://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.",
+	"config-unicode-pure-php-warning": "'''Babala''': Ang [https://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.\nKapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
 	"config-unicode-update-warning": "'''Babala''': Ang nakaluklok na bersiyon ng pambalot ng pagpapanormal ng Unikodigo ay gumagamit ng isang mas matandang bersiyon ng aklatan ng [http://site.icu-project.org/ proyekto ng ICU].\nDapat kang [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations magtaas ng uri] kung may pag-aalala ka hinggil sa paggamit ng Unikodigo.",
 	"config-no-db": "Hindi matagpuan ang isang angkop na tagapagmaneho ng kalipunan ng datos! Kailangan mong magluklok ng isang tagapagmaneho ng kalipunan ng dato para sa PHP.\nTinatangkilik ang {{PLURAL:$2|mga}} sumusunod na uri ng kalipunan ng dato: $1.\n\nKung ikaw mismo ang nangalap ng PHP, muling isaayos ito na pinagagana ang isang kliyente ng kalipunan ng dato, halimbawa na ang paggamit ng ./configure --with-mysqli.\nKung iniluklok mo ang PHP mula sa isang pakete ng Debian o Ubuntu, kung gayon kailangan mo ring magluklok, halimbawa ay ang paketeng php5-mysql.",
 	"config-outdated-sqlite": "'''Babala''': mayroong kang $1 ng SQLite, na mas mababa kaysa sa pinaka mababang kailangang bersiyon na $2. Magiging hindi makukuha ang SQLite.",
@@ -63,10 +63,9 @@
 	"config-pcre-no-utf8": "'''Malubha''': Tila tinipon ang modyul na PCRE ng PHP na wala ang suporta ng PCRE_UTF8.\nNangangailangan ang MediaWiki ng suporta ng UTF-8 upang maging tama ang pag-andar.",
 	"config-memory-raised": "Ang hangganan_ng_alaala ng PHP ay $1, itinaas sa $2.",
 	"config-memory-bad": "'''Babala:''' Ang hangganan_ng_alaala ng PHP ay $1.\nIto ay maaaring napakababa.\nMaaaring mabigo ang pagluluklok!",
-	"config-xcache": "Ininstala na ang [http://xcache.lighttpd.net/ XCache]",
 	"config-apc": "Ininstala na ang [http://www.php.net/apc APC]",
-	"config-wincache": "Ininstala na ang [http://www.iis.net/download/WinCacheForPhp WinCache]",
-	"config-mod-security": "'''Babala''': Ang tagapaghain mo ng sangkasaputan ay pinagana na mayroong [http://modsecurity.org/ mod_security]. Kung mali ang kaayusan, makapagdurulot ito ng mga suliranin para sa MediaWiki o ibang mga sopwer na nagpapahintulot sa mga tagagamit na magpaskil ng hindi makatwirang nilalaman.\nSumangguni sa [http://modsecurity.org/documentation/ mod_security kasulatan] o makipag-ugnayan sa suporta ng iyong tagapagpasinaya kapag nakatagpo ng alin mang mga kamalian.",
+	"config-wincache": "Ininstala na ang [https://www.iis.net/download/WinCacheForPhp WinCache]",
+	"config-mod-security": "'''Babala''': Ang tagapaghain mo ng sangkasaputan ay pinagana na mayroong [https://modsecurity.org/ mod_security]. Kung mali ang kaayusan, makapagdurulot ito ng mga suliranin para sa MediaWiki o ibang mga sopwer na nagpapahintulot sa mga tagagamit na magpaskil ng hindi makatwirang nilalaman.\nSumangguni sa [https://modsecurity.org/documentation/ mod_security kasulatan] o makipag-ugnayan sa suporta ng iyong tagapagpasinaya kapag nakatagpo ng alin mang mga kamalian.",
 	"config-diff3-bad": "Hindi natagpuan ang GNU diff3.",
 	"config-imagemagick": "Natagpuan ang ImageMagick: $1.\nPapaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.",
 	"config-gd": "Natagpuan ang pinasadyang nakapaloob na grapiks ng GD.\nPapaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.",
@@ -209,7 +208,7 @@
 	"config-license-gfdl": "Lisensiyang 1.3 ng Malayang Dokumentasyon ng GNU o mas lalong huli",
 	"config-license-pd": "Nasasakupan ng Madla",
 	"config-license-cc-choose": "Pumili ng isang pasadyang Lisensiya ng Malikhaing mga Pangkaraniwan",
-	"config-license-help": "Maraming mga pangmadlang wiki ang naglalagay ng lahat ng mga ambag sa ilalim ng [http://freedomdefined.org/Definition lisensiyang malaya].\nNakakatulong ito sa paglikha ng isang diwa ng pagmamay-ari ng pamayanan at nakapanghihikayat ng ambag na pangmahabang panahon.\nSa pangkalahatan, hindi kailangan ang isang wiking pribado o pangsamahan.\n\nKung nais mong magamit ang teksto magmula sa Wikipedia, at nais mong makatanggap ang Wikipedia ng tekstong kinopya magmula sa wiki mo, dapat mong piliin ang {{int:config-license-cc-by-sa}}.\n\nDating ginamit ng Wikipedia ang Lisensiya ng Kasulatang Malaya ng GNU (GNU Free Documentation License o GFDL).\nIsang katanggap-tanggap na lisensiya ang GFDL, subalit mahirap itong maunawaan.\nMahirap din ang paggamit na muli ng nilalaman na nasa ilalim ng GFDL.",
+	"config-license-help": "Maraming mga pangmadlang wiki ang naglalagay ng lahat ng mga ambag sa ilalim ng [https://freedomdefined.org/Definition lisensiyang malaya].\nNakakatulong ito sa paglikha ng isang diwa ng pagmamay-ari ng pamayanan at nakapanghihikayat ng ambag na pangmahabang panahon.\nSa pangkalahatan, hindi kailangan ang isang wiking pribado o pangsamahan.\n\nKung nais mong magamit ang teksto magmula sa Wikipedia, at nais mong makatanggap ang Wikipedia ng tekstong kinopya magmula sa wiki mo, dapat mong piliin ang {{int:config-license-cc-by-sa}}.\n\nDating ginamit ng Wikipedia ang Lisensiya ng Kasulatang Malaya ng GNU (GNU Free Documentation License o GFDL).\nIsang katanggap-tanggap na lisensiya ang GFDL, subalit mahirap itong maunawaan.\nMahirap din ang paggamit na muli ng nilalaman na nasa ilalim ng GFDL.",
 	"config-email-settings": "Mga katakdaan ng e-liham",
 	"config-enable-email": "Paganahin ang palabas na e-liham",
 	"config-enable-email-help": "Kung nais mong gumana ang e-liham, ang mga katakdaan ng liham ng [http://www.php.net/manual/en/mail.configuration.php PHP] ay kailangang maging wasto ang pagkakaayos.\nKung ayaw mo nang anumang mga katampukan ng e-liham, maaari mong huwag paganahin ang mga ito rito.",
diff --git a/includes/installer/i18n/tr.json b/includes/installer/i18n/tr.json
index 3365ad8df3..6d942979db 100644
--- a/includes/installer/i18n/tr.json
+++ b/includes/installer/i18n/tr.json
@@ -59,14 +59,14 @@
 	"config-help-restart": "Girişini yaptığınız tüm kayıtlı verileri silerek, yükleme işlemini yeniden başlatmak ister misiniz?",
 	"config-restart": "Evet, yeniden başlat",
 	"config-welcome": "===Ortam Kontrolleri===\nOrtamın Mediawiki kurulumuna uygun olup olmadığını anlamak için basit kontroller yapılacak.\nKurulumu nasıl tamamlayacağınız konusunda destek isterken bu bilgileri eklemeyi unutmayın.",
-	"config-copyright": "=== Telif Hakları ve Koşulları ===\n\n$1\n\nBu program ücretsiz bir yazılımdır; yeniden dağıtabilir veya Özgür Yazılım Kuruluşu tarafından yayınlanan (GNU) Genel Kamu Lisansı koşulları altında değiştirebilirsiniz; isterseniz ikinci lisans sürümünü veya (sizin seçeneğiniz) herhangi bir sonraki lisans sürümünü kullanabilirsiniz.\n\nBu program, faydalı olacağı umuduyla dağıtılmaktadır, ancak ''' herhangi bir garantisi yoktur '''; ''' uygunluk ''' veya ''' belirli bir amaca uygunluk ''' gibi dolaylı garantileri bile yoktur.\nDaha fazla ayrıntı için (GNU) Genel Kamu Lisansına bakınız.\n\nBu program ile birlikte bir (GNU) Genel Kamu Lisansının bir kopyasını  almış olmanız gerekir; bu program (GNU) Genel Kamu Lisansı ile dağıtılmadıysa, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, ABD adresine yazın veya [http://www.gnu.org/copyleft/gpl.html online olarak okuyun].",
+	"config-copyright": "=== Telif Hakları ve Koşulları ===\n\n$1\n\nBu program ücretsiz bir yazılımdır; yeniden dağıtabilir veya Özgür Yazılım Kuruluşu tarafından yayınlanan (GNU) Genel Kamu Lisansı koşulları altında değiştirebilirsiniz; isterseniz ikinci lisans sürümünü veya (sizin seçeneğiniz) herhangi bir sonraki lisans sürümünü kullanabilirsiniz.\n\nBu program, faydalı olacağı umuduyla dağıtılmaktadır, ancak ''' herhangi bir garantisi yoktur '''; ''' uygunluk ''' veya ''' belirli bir amaca uygunluk ''' gibi dolaylı garantileri bile yoktur.\nDaha fazla ayrıntı için (GNU) Genel Kamu Lisansına bakınız.\n\nBu program ile birlikte bir (GNU) Genel Kamu Lisansının bir kopyasını  almış olmanız gerekir; bu program (GNU) Genel Kamu Lisansı ile dağıtılmadıysa, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, ABD adresine yazın veya [https://www.gnu.org/copyleft/gpl.html online olarak okuyun].",
 	"config-sidebar": "* [https://www.mediawiki.org MediaWiki anasayfa]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Kullanıcı Kılavuzu]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Hizmetli Rehberi]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ SSS]\n----\n* Beni oku\n* Sürüm notları\n* Kopyalama\n* Yükseltme",
 	"config-env-good": "Ortam kontrol edildi.\nMediaWiki'yi kurabilirsiniz.",
 	"config-env-bad": "Ortam kontrol edildi.\nMediaWiki'yi kuramazsınız.",
 	"config-env-php": "PHP $1 kurulu.",
 	"config-env-hhvm": "HHVM $1 kuruldu",
-	"config-unicode-using-intl": "Unikod normalleştirmesi için [http://pecl.php.net/intl intl PECL uzantısı] kullanılıyor.",
-	"config-unicode-pure-php-warning": "Uyarı: [http://pecl.php.net/intl intl PECL uzantısı] Unicode normalizasyonunu kaldırabilecek şekilde müsait değil; bu yüzden sayfa saf PHP uygulamasına dönüyor. Yüksek trafik alan bir sayfa çalıştırıyorsanız, [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalizasyonu] ile ilgili biraz bilgi almalısınız.",
+	"config-unicode-using-intl": "Unikod normalleştirmesi için [https://pecl.php.net/intl intl PECL uzantısı] kullanılıyor.",
+	"config-unicode-pure-php-warning": "Uyarı: [https://pecl.php.net/intl intl PECL uzantısı] Unicode normalizasyonunu kaldırabilecek şekilde müsait değil; bu yüzden sayfa saf PHP uygulamasına dönüyor. Yüksek trafik alan bir sayfa çalıştırıyorsanız, [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalizasyonu] ile ilgili biraz bilgi almalısınız.",
 	"config-unicode-update-warning": "Uyarı: Yüklü durumdaki Unicode normalleştirme sarıcı [http://site.icu-project.org/ ICU proje] kütüphanesinin eski bir sürümünü kullanır.\nUnicode kullanımı konusunda endişeleriniz varsa [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations yükseltme] yapmanız gerekmektedir.",
 	"config-no-db": "Uygun bir veri tabanı sürücüsü bulunamadı! PHP için bir veri tabanı sürücüsü kurmanız gerekir. Şu veri tabanı {{PLURAL:$2|türleri|türleri}} desteklenmektedir: $1\n\nEğer PHP'yi kendiniz derlediyseniz, bu durumda ./configure --with-mysqli kullanarak etkinleştirilmiş veri tabanı istemcisi ile yeniden yapılandırmalısınız.\nPHP'yi bir Debian veya Ubuntu paketinden yüklediyseniz, bu durumda php5-mysql paketini de kurmanız gerekir.",
 	"config-outdated-sqlite": "Uyarı: Elinizde SQLite $1 var. Gerekli minimum sürüm: $2. SQLite kullanılamayacaktır.",
@@ -75,12 +75,11 @@
 	"config-pcre-no-utf8": "Önemli hata: PHP'nin PCRE modülü PCRE_UTF8 desteği olmadan derlenmiş gözüküyor.\nMediaWiki'nin doğru çalışabilmesi için UTF-8 desteği gereklidir.",
 	"config-memory-raised": "PHP'nin memory_limit (hafıza sınırı) değeri $1, $2'ye yükseltildi.",
 	"config-memory-bad": "Uyarı: PHP'nin memory_limit (hafıza sınırı) değeri $1.\nBu büyük ihtimalle çok düşük.\nKurulum başarısız olabilir!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] kurulu",
 	"config-apc": "[http://www.php.net/apc APC] kurulu",
 	"config-apcu": "[http://www.php.net/apcu APCu] yüklendi",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] kurulu",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] kurulu",
 	"config-no-cache-apcu": "Uyarı: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ya da [http://www.iis.net/download/WinCacheForPhp WinCache] kurulumu bulunamadı.\nNesne önbellekleme etkin değil.",
-	"config-mod-security": "'''Uyarı:''' Web sunucunuz [http://modsecurity.org/mod_security2 mod_security] etkin. Bunun birçok yaygın yapılandırması bulunur ve eğer yanlış yapılandırılmış ise, bu MediaWiki ve kullanıcılara isteğe bağlı içerik göndermesine izin veren diğer yazılımlar için sorun oluşturabilir.\nMümkünse bu devre dışı bırakılmalıdır. Aksi takdirde rastgele hatalar alırsanız [http://modsecurity.org/documentation/ mod_security belgelemesine] bakın ya da sunucunuzun desteğine başvurun.",
+	"config-mod-security": "'''Uyarı:''' Web sunucunuz [https://modsecurity.org/mod_security2 mod_security] etkin. Bunun birçok yaygın yapılandırması bulunur ve eğer yanlış yapılandırılmış ise, bu MediaWiki ve kullanıcılara isteğe bağlı içerik göndermesine izin veren diğer yazılımlar için sorun oluşturabilir.\nMümkünse bu devre dışı bırakılmalıdır. Aksi takdirde rastgele hatalar alırsanız [https://modsecurity.org/documentation/ mod_security belgelemesine] bakın ya da sunucunuzun desteğine başvurun.",
 	"config-diff3-bad": "GNU diff3 bulunamadı.",
 	"config-git": "Sürüm kontrol yazılımı Git bulundu: $1.",
 	"config-git-bad": "Sürüm kontrol yazılımı Git bulunamadı.",
diff --git a/includes/installer/i18n/tt-cyrl.json b/includes/installer/i18n/tt-cyrl.json
index 2cc0d1ac2c..acd128162d 100644
--- a/includes/installer/i18n/tt-cyrl.json
+++ b/includes/installer/i18n/tt-cyrl.json
@@ -27,9 +27,8 @@
 	"config-page-upgradedoc": "Яңарту",
 	"config-page-existingwiki": "Хәзерге вики",
 	"config-restart": "Әйе, яңадан башларга",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] куелды",
 	"config-apc": "[http://www.php.net/apc APC] куелды",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] куелды",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] куелды",
 	"config-diff3-bad": "GNU diff3 табылмады.",
 	"config-git": "Git юрамалар идарә итү системасы табылды: $1.",
 	"config-db-type": "Мәгълүмат базасы төре:",
diff --git a/includes/installer/i18n/uk.json b/includes/installer/i18n/uk.json
index 54339c3b3d..3bfa1a09a5 100644
--- a/includes/installer/i18n/uk.json
+++ b/includes/installer/i18n/uk.json
@@ -12,7 +12,8 @@
 			"아라",
 			"Amire80",
 			"Piramidion",
-			"Macofe"
+			"Macofe",
+			"Movses"
 		]
 	},
 	"config-desc": "Інсталятор MediaWiki",
@@ -52,14 +53,14 @@
 	"config-help-restart": "Ви бажаєте видалити всі введені та збережені вами дані і запустити процес установки спочатку?",
 	"config-restart": "Так, перезапустити установку",
 	"config-welcome": "=== Перевірка оточення ===\nБудуть проведені базові перевірки, щоб виявити, чи можлива установка MediaWiki у даній системі.\nНе забудьте включити цю інформацію, якщо ви звернетеся по підтримку, як завершити установку.",
-	"config-copyright": "=== Авторське право і умови ===\n\n$1\n\nЦя програма є вільним програмним забезпеченням; Ви можете розповсюджувати та/або змінювати її під ліцензією GNU General Public License, опублікованою Фондом вільного програмного забезпечення; версією 2 цієї ліцензії або будь-якою пізнішою на Ваш вибір.\n\nЦя програма поширюється з надією на те, що вона буде корисною, однак '''без жодних гарантій'''; навіть без неявної гарантії '''комерційної цінності''' або '''придатності для певних цілей'''.\nДив. GNU General Public License для детальної інформації.\n\nВи повинні були отримати копію GNU General Public License разом із цією програмою; якщо ж ні, зверніться до Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. або [http://www.gnu.org/copyleft/gpl.html ознайомтесь з нею онлайн].",
+	"config-copyright": "=== Авторське право і умови ===\n\n$1\n\nЦя програма є вільним програмним забезпеченням; Ви можете розповсюджувати та/або змінювати її під ліцензією GNU General Public License, опублікованою Фондом вільного програмного забезпечення; версією 2 цієї ліцензії або будь-якою пізнішою на Ваш вибір.\n\nЦя програма поширюється з надією на те, що вона буде корисною, однак '''без жодних гарантій'''; навіть без неявної гарантії '''комерційної цінності''' або '''придатності для певних цілей'''.\nДив. GNU General Public License для детальної інформації.\n\nВи повинні були отримати копію GNU General Public License разом із цією програмою; якщо ж ні, зверніться до Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. або [https://www.gnu.org/copyleft/gpl.html ознайомтесь з нею онлайн].",
 	"config-sidebar": "* [https://www.mediawiki.org Сайт MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Посібник користувача]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Посібник адміністратора]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Read me\n* Інформація про випуск\n* Ліцензія\n* Оновлення",
 	"config-env-good": "Перевірку середовища успішно завершено.\nВи можете встановити MediaWiki.",
 	"config-env-bad": "Було проведено перевірку середовища. Ви не можете встановити MediaWiki.",
 	"config-env-php": "Встановлено версію PHP: $1.",
 	"config-env-hhvm": "HHVM $1  встановлено.",
-	"config-unicode-using-intl": "Використовувати [http://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.",
-	"config-unicode-pure-php-warning": "'''Увага''': [http://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.\nЯкщо ваш сайт має високий трафік, вам варто почитати про [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормалізацію Юнікоду].",
+	"config-unicode-using-intl": "Використовувати [https://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.",
+	"config-unicode-pure-php-warning": "'''Увага''': [https://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.\nЯкщо ваш сайт має високий трафік, вам варто почитати про [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормалізацію Юнікоду].",
 	"config-unicode-update-warning": "'''Увага''': Встановлена версія обгортки нормалізації Юнікоду використовує стару версію бібліотеки [http://site.icu-project.org/ проекту ICU].\nВи маєте [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations оновити версію], якщо плануєте повноцінно використовувати Юнікод.",
 	"config-no-db": "Не вдалося знайти потрібний драйвер бази даних! Вам необхідно встановити драйвер бази даних для PHP. Підтримуються {{PLURAL:$2|такий тип|такі типи}} баз даних: $1.\n\nЯкщо ви скомпілювали PHP самостійно, переналаштуйте його з увімкненим клієнтом бази даних, наприклад за допомогою ./configure --with-mysqli.\n\nЯкщо установлено PHP з пакетів Debian або Ubuntu, тоді ви також повинні встановити, наприклад, пакунок php5-mysql.",
 	"config-outdated-sqlite": "'''Увага''': у Вас встановлена версія SQLite $1, а це нижче, ніж мінімально необхідна версія $2. SQLite буде недоступним.",
@@ -68,12 +69,11 @@
 	"config-pcre-no-utf8": "'''Помилка''': PCRE-модуть PHP, вочевидь, було зібрано без підтримки PCRE_UTF8.\nMediaWiki вимагає підтримку UTF-8 для коректної роботи.",
 	"config-memory-raised": "Обмеження пам'яті PHP (memory_limit) $1, піднято до $2.",
 	"config-memory-bad": "'''Увага:''' Розмір пам'яті PHP (memory_limit) становить $1.\nІмовірно, це замало.\nВстановлення може не вдатись!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] встановлено",
 	"config-apc": "[http://www.php.net/apc APC] встановлено",
 	"config-apcu": "[http://www.php.net/apcu APCu] встановлено",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] встановлено",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] встановлено",
 	"config-no-cache-apcu": "Увага: Не вдалося знайти [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] чи [http://www.iis.net/download/WinCacheForPhp WinCache].\nКешування об'єктів не ввімкнено.",
-	"config-mod-security": "'''Увага''': на Вашому веб-сервері увімкнено [http://modsecurity.org/ mod_security]. У разі неправильних налаштувать, він може викликати проблеми MediaWiki або іншого ПЗ, яке дозволяє користувачам надсилати довільний вміст.\nЗверніться до [http://modsecurity.org/documentation/ документації mod_security] або підтримки Вашого хостера, якщо під час роботи виникають незрозумілі помилки.",
+	"config-mod-security": "'''Увага''': на Вашому веб-сервері увімкнено [https://modsecurity.org/ mod_security]. У разі неправильних налаштувать, він може викликати проблеми MediaWiki або іншого ПЗ, яке дозволяє користувачам надсилати довільний вміст.\nЗверніться до [https://modsecurity.org/documentation/ документації mod_security] або підтримки Вашого хостера, якщо під час роботи виникають незрозумілі помилки.",
 	"config-diff3-bad": "GNU diff3 не знайдено.",
 	"config-git": "Знайшов програму управління версіями Git: $1.",
 	"config-git-bad": "Програму управління версіями Git  не знайдено.",
@@ -228,7 +228,7 @@
 	"config-license-gfdl": "GNU Free Documentation License 1.3 або пізніша",
 	"config-license-pd": "Суспільне надбання (Public Domain)",
 	"config-license-cc-choose": "Виберіть одну з ліцензій Creative Commons",
-	"config-license-help": "Чимало загальнодоступних вікі публікують увесь свій вміст під [http://freedomdefined.org/Definition вільною ліцензією]. Це розвиває відчуття спільної власності і заохочує довготривалу участь. У загальному випадку для приватної чи корпоративної вікі у цьому немає необхідності.\n\nЯкщо Ви хочете мати змогу використовувати текст з Вікіпедії і дати Вікіпедії змогу використовувати текст, скопійований з Вашої вікі, вам необхідно обрати {{int:config-license-cc-by-sa}}.\n\nРаніше Вікіпедія використовувала GNU Free Documentation License.\nGFDL — допустима ліцензія, але у ній важко розібратися, а контент під GFDL важко використовувати повторно.",
+	"config-license-help": "Чимало загальнодоступних вікі публікують увесь свій вміст під [https://freedomdefined.org/Definition вільною ліцензією]. Це розвиває відчуття спільної власності і заохочує довготривалу участь. У загальному випадку для приватної чи корпоративної вікі у цьому немає необхідності.\n\nЯкщо Ви хочете мати змогу використовувати текст з Вікіпедії і дати Вікіпедії змогу використовувати текст, скопійований з Вашої вікі, вам необхідно обрати {{int:config-license-cc-by-sa}}.\n\nРаніше Вікіпедія використовувала GNU Free Documentation License.\nGFDL — допустима ліцензія, але у ній важко розібратися, а контент під GFDL важко використовувати повторно.",
 	"config-email-settings": "Налаштування електронної пошти",
 	"config-enable-email": "Увімкнути вихідну електронну пошту",
 	"config-enable-email-help": "Якщо Ви хочете, що електронна пошта працювала, необхідно виставити коректні [http://www.php.net/manual/en/mail.configuration.php налаштування пошти у PHP].\nЯкщо Вам не потрібні жодні можливості електронної пошти у вікі, можете тут їх відключити.",
@@ -314,6 +314,7 @@
 	"config-install-mainpage-failed": "Не вдається вставити головну сторінку: $1",
 	"config-install-done": "Вітаємо!\nВи успішно встановили MediaWiki.\n\nІнсталятор згенерував файл LocalSettings.php, який містить усі Ваші налаштування.\n\nВам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.\n\nЯкщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:\n\n$3\n\nПримітка: Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.\n\nПісля виконання дій, описаних вище, Ви зможете [$2 увійти у свою вікі].",
 	"config-install-done-path": "Вітаємо!\nВи встановили Медіавікі.\n\nІнсталятор створив файл LocalSettings.php.\nУ ньому містяться всі Ваші налаштування.\n\nВам потрібно завантажити його й помістити в $4. Завантаження повинно було автоматично розпочатись.\n\nЯкщо завантаження не було запропоновано, або Ви його скасували, Ви можете перезапустити завантаження натиснувши на посилання нижче:\n\n$3\n\nЗверніть увагу: Якщо Ви не зробите це зараз, цей згенерований файл налаштувань не буде доступним для Вас пізніше якщо Ви вийдете зі встановлення не завантаживши його.\n\nКоли це було зроблено Ви можете [$2 зайти до своєї вікі].",
+	"config-install-success": "Mediawiki успішно встановлено. Зараз ви можете перейти до <$1$2>, щоб переглянути свою вікі. Якщо у вас є питання, ознайомтеся з нашим FAQ:  або використовуйте один з форумів підтримки, які вказано на цій сторінці.",
 	"config-download-localsettings": "Завантажити LocalSettings.php",
 	"config-help": "допомога",
 	"config-help-tooltip": "натисніть, щоб розгорнути",
diff --git a/includes/installer/i18n/vi.json b/includes/installer/i18n/vi.json
index 1c441cd7e5..4b9da0e1fe 100644
--- a/includes/installer/i18n/vi.json
+++ b/includes/installer/i18n/vi.json
@@ -46,14 +46,14 @@
 	"config-help-restart": "Bạn có muốn xóa tất cả dữ liệu được lưu mà bạn vừa nhập và khởi động lại quá trình cài đặt?",
 	"config-restart": "Có, khởi động lại nó",
 	"config-welcome": "=== Kiểm tra môi trường ===\nBây giờ sẽ kiểm tra sơ qua môi trường này có phù hợp cho việc cài đặt MediaWiki.\nHãy nhớ bao gồm thông tin này khi nào xin hỗ trợ hoàn thành việc cài đặt.",
-	"config-copyright": "=== Bản quyền và Điều khoản ===\n\n$1\n\nChương trình này là phần mềm tự do; bạn có thể phân phối lại và/hoặc chỉnh sửa nó dưới điều khoản của Giấy phép Công cộng GNU (GNU General Public License) do Quỹ Phần mềm Tự do (Free Software Foundation) xuất bản; hoặc phiên bản 2 của giấy phép đó, hoặc (tùy theo ý bạn) bất kỳ phiên bản nào sau này.\n\nChương trình này được phân phối với hy vọng rằng nó sẽ hữu ích, nhưng không có bất kỳ bảo hành nào; không có thậm chí bảo hành bao hàm về khả năng thương mại hoặc sự thích hợp với một mục đích cụ thể.\nXem Giấy phép Công cộng GNU để biết thêm chi tiết.\n\nBạn phải nhận một bản sao của Giấy phép Công cộng GNU đi kèm chương trình này; nếu không, hãy viết thư cho Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Hoa Kỳ, hoặc [http://www.gnu.org/copyleft/gpl.html đọc nó trên mạng].",
+	"config-copyright": "=== Bản quyền và Điều khoản ===\n\n$1\n\nChương trình này là phần mềm tự do; bạn có thể phân phối lại và/hoặc chỉnh sửa nó dưới điều khoản của Giấy phép Công cộng GNU (GNU General Public License) do Quỹ Phần mềm Tự do (Free Software Foundation) xuất bản; hoặc phiên bản 2 của giấy phép đó, hoặc (tùy theo ý bạn) bất kỳ phiên bản nào sau này.\n\nChương trình này được phân phối với hy vọng rằng nó sẽ hữu ích, nhưng không có bất kỳ bảo hành nào; không có thậm chí bảo hành bao hàm về khả năng thương mại hoặc sự thích hợp với một mục đích cụ thể.\nXem Giấy phép Công cộng GNU để biết thêm chi tiết.\n\nBạn phải nhận một bản sao của Giấy phép Công cộng GNU đi kèm chương trình này; nếu không, hãy viết thư cho Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Hoa Kỳ, hoặc [https://www.gnu.org/copyleft/gpl.html đọc nó trên mạng].",
 	"config-sidebar": "* [https://www.mediawiki.org/wiki/Special:MyLanguage/MediaWiki Trang chủ MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Hướng dẫn sử dụng]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Hướng dẫn quản lý]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Câu thường hỏi]\n----\n* Cần đọc trước\n* Ghi chú phát hành\n* Sao chép\n* Nâng cấp",
 	"config-env-good": "Đã kiểm tra môi trường.\nBạn có thể cài đặt MediaWiki.",
 	"config-env-bad": "Đã kiểm tra môi trường.\nBạn không thể cài đặt MediaWiki.",
 	"config-env-php": "PHP $1 đã được cài đặt.",
 	"config-env-hhvm": "HHVM $1 được cài đặt.",
-	"config-unicode-using-intl": "Sẽ sử dụng [http://pecl.php.net/intl phần mở rộng PECL intl] để chuẩn hóa Unicode.",
-	"config-unicode-pure-php-warning": "Cảnh báo:  [http://pecl.php.net/intl intl PECL extension] không được phép xử lý Unicode chuẩn hóa, trả lại thực thi PHP-gốc chậm.\nNếu bạn chạy một site lưu lượng lớn, bạn phải để ý qua một chút trên  [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
+	"config-unicode-using-intl": "Sẽ sử dụng [https://pecl.php.net/intl phần mở rộng PECL intl] để chuẩn hóa Unicode.",
+	"config-unicode-pure-php-warning": "Cảnh báo:  [https://pecl.php.net/intl intl PECL extension] không được phép xử lý Unicode chuẩn hóa, trả lại thực thi PHP-gốc chậm.\nNếu bạn chạy một site lưu lượng lớn, bạn phải để ý qua một chút trên  [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
 	"config-unicode-update-warning": "Cảnh báo: Phiên bản cài đặt của gói Unicode chuẩn hóa sử dụng một phiên bản cũ của thư viện [http://site.icu-project.org/ the ICU project].\nBạn phải [https://www.mediawiki.org/wiki/Special:MyLanguage/nâng cấp Unicode_normalization_considerations] nếu bạn quan tâm đến việc sử dụng Unicode.",
 	"config-no-db": "Không tìm thấy một trình điều khiển cơ sở dữ liệu phù hợp! Bạn cần phải cài một trình điều khiển cơ sở dữ liệu cho PHP.\n{{PLURAL:$2|Loại|Các loại}} cơ sở dữ liệu sau đây được hỗ trợ: $1.\n\nNếu bạn đã biên dịch PHP lấy, cấu hình lại nó mà kích hoạt một trình khách cơ sở dữ liệu, ví dụ bằng lệnh ./configure --with-mysqli.\nNếu bạn đã cài PHP từ một gói Debian hoặc Ubuntu, thì bạn cũng cần phải cài ví dụ gói php5-mysql.",
 	"config-outdated-sqlite": "Chú ý: Bạn có SQLite $1, phiên bản này thấp hơn phiên bản yêu câu tối thiểu $2. SQLite sẽ không có tác dụng.",
@@ -62,12 +62,11 @@
 	"config-pcre-no-utf8": "Lỗi chí tử: Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.",
 	"config-memory-raised": "memory_limit của PHP là $1, tăng lên $2.",
 	"config-memory-bad": "Cảnh báo: memory_limit của PHP là $1.\nGiá trị này có lẽ quá thấp.\nCài đặt có thể bị thất bại!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] đã được cài đặt",
 	"config-apc": "[http://www.php.net/apc APC] đã được cài đặt",
 	"config-apcu": "[http://www.php.net/apcu APCu] đã được cài đặt",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] đã được cài đặt",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] đã được cài đặt",
 	"config-no-cache-apcu": "Cảnh báo: Không tìm thấy [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache], hoặc [http://www.iis.net/download/WinCacheForPhp WinCache].\nVùng nhớ đệm đối tượng không được kích hoạt.",
-	"config-mod-security": "Cảnh báo: [http://modsecurity.org/ mod_security]/mod_security2 đã được kích hoạt trên máy chủ Web của bạn. Nhiều cấu hình phổ biến của phần mềm này sẽ gây vấn đề cho MediaWiki và những phần mềm khác cho phép người dùng đăng các nội dung tùy tiện.\nNếu có thể, bạn nên vô hiệu nó. Còn không, tra cứu [http://modsecurity.org/documentation/ tài liệu mod_security] hoặc liên hệ với nhà cung cấp hỗ trợ cho máy chủ nếu bạn gặp những lỗi ngẫu nhiên nào đó.",
+	"config-mod-security": "Cảnh báo: [https://modsecurity.org/ mod_security]/mod_security2 đã được kích hoạt trên máy chủ Web của bạn. Nhiều cấu hình phổ biến của phần mềm này sẽ gây vấn đề cho MediaWiki và những phần mềm khác cho phép người dùng đăng các nội dung tùy tiện.\nNếu có thể, bạn nên vô hiệu nó. Còn không, tra cứu [https://modsecurity.org/documentation/ tài liệu mod_security] hoặc liên hệ với nhà cung cấp hỗ trợ cho máy chủ nếu bạn gặp những lỗi ngẫu nhiên nào đó.",
 	"config-diff3-bad": "Không tìm thấy GNU diff3.",
 	"config-git": "Đã tìm thấy phần mềm điều khiển phiên bản Git: $1.",
 	"config-git-bad": "Không tìm thấy phần mềm điều khiển phiên bản Git.",
@@ -222,7 +221,7 @@
 	"config-license-gfdl": "Giấy pháp Tài liệu Tự do GNU 1.3 trở lên",
 	"config-license-pd": "Phạm vi công cộng",
 	"config-license-cc-choose": "Chọn một giấy phép Creative Commons tùy biến",
-	"config-license-help": "Nhiều wiki công khai phát hành tất cả các đóng góp theo một [http://freedomdefined.org/Definition/Vi?uselang=vi giấy phép tự do].\nĐiều này giúp tạo nên thái độ cộng đồng sở hữu và ủng hộ sự đóng góp lâu dài.\nNói chung, một wiki riêng tư hoặc của công ty không nhất thiết phải sử dụng một giấy phép tự do.\n\nNếu bạn muốn được phép sử dụng văn bản từ Wikipedia và muốn Wikipedia nhận được những văn bản được sao chép từ wiki của bạn, bạn nên chọn {{int:config-license-cc-by-sa}}.\n\nWikipedia từng sử dụng Giấy phép Tài liệu Tự do GNU.\nGFDL là một giấy phép hợp lệ nhưng khó hiểu trên thực tế.\nNội dung được phát hành theo GFDL cũng khó tái sử dụng.",
+	"config-license-help": "Nhiều wiki công khai phát hành tất cả các đóng góp theo một [https://freedomdefined.org/Definition/Vi?uselang=vi giấy phép tự do].\nĐiều này giúp tạo nên thái độ cộng đồng sở hữu và ủng hộ sự đóng góp lâu dài.\nNói chung, một wiki riêng tư hoặc của công ty không nhất thiết phải sử dụng một giấy phép tự do.\n\nNếu bạn muốn được phép sử dụng văn bản từ Wikipedia và muốn Wikipedia nhận được những văn bản được sao chép từ wiki của bạn, bạn nên chọn {{int:config-license-cc-by-sa}}.\n\nWikipedia từng sử dụng Giấy phép Tài liệu Tự do GNU.\nGFDL là một giấy phép hợp lệ nhưng khó hiểu trên thực tế.\nNội dung được phát hành theo GFDL cũng khó tái sử dụng.",
 	"config-email-settings": "Thiết lập thư điện tử",
 	"config-enable-email": "Cho phép gửi thư điện tử đi",
 	"config-enable-email-help": "Nếu bạn muốn khả năng gửi thư điện tử, [http://www.php.net/manual/en/mail.configuration.php thiết lập mail của PHP] cần phải được cấu hình đúng.\nNếu bạn không muốn sử dụng bất kỳ tính năng thư điện tử nào, bạn có thể vô hiệu chúng ở đây.",
diff --git a/includes/installer/i18n/war.json b/includes/installer/i18n/war.json
index ef7694a743..75d2350fea 100644
--- a/includes/installer/i18n/war.json
+++ b/includes/installer/i18n/war.json
@@ -44,8 +44,8 @@
 	"config-welcome": "=== Mga pagpanginano panlibong ===\nMagkakamay-ada yano nga panginano para masabtan kun ini nga libong in naaangay para hiton pagtataod hiton MediaWiki. Hinumdomi iton paglakip hinin nga impormasyon kun karuyag mo mangaro hin suporta kun paunan-on humanon an pagtataod.",
 	"config-env-php": "Gin-install an PHP $1.",
 	"config-env-hhvm": "Gin-install an HHVM $1.",
-	"config-unicode-using-intl": "Gamita an [http://pecl.php.net/intl intl PECL extension] para han normalisasyon han Unicode.",
-	"config-unicode-pure-php-warning": "Pahimatngon: An [http://pecl.php.net/intl intl PECL extension] in waray akos kumapot hin Unicode normalization, tungod hini mabalik ha mahinay nga puro-PHP nga implementasyon.\nKun nagpapadalagan ka hin high-traffic site, alayon pagbasa hin guti han [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
+	"config-unicode-using-intl": "Gamita an [https://pecl.php.net/intl intl PECL extension] para han normalisasyon han Unicode.",
+	"config-unicode-pure-php-warning": "Pahimatngon: An [https://pecl.php.net/intl intl PECL extension] in waray akos kumapot hin Unicode normalization, tungod hini mabalik ha mahinay nga puro-PHP nga implementasyon.\nKun nagpapadalagan ka hin high-traffic site, alayon pagbasa hin guti han [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
 	"config-no-db": "Diri nakakabiling hin naaangay nga database driver! Kinahanglan mo magtaod hin uska database driver para han PHP. An masunod nga mga klase hin database in ginsusuporatahan: $1.\n\nKun ikaw mismo an nag-compile han PHP, kinahanglan ma-reconfigure iton nga para maapandar an database client, pananglitan, han paggamit han ./configure --with-mysqli.\nKun gintaod mo an PHP tikang ha uska Debian o Ubuntu nga pakete, kinahanglan nimo magtaod liwat, pananglitan, hiton an php5-mysql nga pakete.",
 	"config-pcre-old": "Nangangarat-an: Nagkikinahanglan hin PCRE $1 o mas urhi pa.\nAn imo PHP nga binaryo in nakasumpay hin PCRE $2. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE More information].",
 	"config-db-name": "Ngaran han database:",
diff --git a/includes/installer/i18n/yi.json b/includes/installer/i18n/yi.json
index 25724f55a9..5c5aff5a01 100644
--- a/includes/installer/i18n/yi.json
+++ b/includes/installer/i18n/yi.json
@@ -39,9 +39,8 @@
 	"config-env-bad": "מ'האט קאנטראלירט די סביבה.\nאיר קענט נישט אינסטאלירן מעדיעוויקי.",
 	"config-env-php": "PHP $1 איז אינצטאלירט.",
 	"config-env-hhvm": "HHVM $1 איז אינסטאלירט.",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] איז אינסטאלירט",
 	"config-apc": "[http://www.php.net/apc APC] איז אינסטאלירט",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] איז אינסטאלירט",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] איז אינסטאלירט",
 	"config-diff3-bad": "GNU diff3 נישט געטראפן.",
 	"config-using-server": "באניצן סארווער־נאמען \"$1\".",
 	"config-using-uri": "באניצן סארווער־אדרעס \"$1$2\".",
diff --git a/includes/installer/i18n/zh-hans.json b/includes/installer/i18n/zh-hans.json
index f5fa9f2470..635fc34793 100644
--- a/includes/installer/i18n/zh-hans.json
+++ b/includes/installer/i18n/zh-hans.json
@@ -62,14 +62,14 @@
 	"config-help-restart": "是否要清除所有已输入且保存的数据,并重新启动安装过程吗?",
 	"config-restart": "是的,重启吧",
 	"config-welcome": "=== 环境检查 ===\n将简单检查当前环境是否适合安装MediaWiki。如果您要寻求安装过程的支持,请记得附上此信息。",
-	"config-copyright": "=== 版权和条款 ===\n\n$1\n\n本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。\n\n本程序是基于使用目的而加以发布,然而'''不负任何担保责任''';亦无对'''适售性'''或'''特定目的适用性'''所为的默示性担保。详情请参照GNU通用公共授权。\n\n您应已收到附随于本程序的GNU通用公共授权的副本;如果没有,请写信至自由软件基金会:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[http://www.gnu.org/copyleft/gpl.html 在线阅读]。",
+	"config-copyright": "=== 版权和条款 ===\n\n$1\n\n本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。\n\n本程序是基于使用目的而加以发布,然而'''不负任何担保责任''';亦无对'''适售性'''或'''特定目的适用性'''所为的默示性担保。详情请参照GNU通用公共授权。\n\n您应已收到附随于本程序的GNU通用公共授权的副本;如果没有,请写信至自由软件基金会:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[https://www.gnu.org/copyleft/gpl.html 在线阅读]。",
 	"config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/zh-hans MediaWiki首页]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh-hans 用户指南]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 管理员指南]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans 常见问题解答]\n----\n* 自述文件\n* 发行说明\n* 协议副本\n* 升级",
 	"config-env-good": "环境检查已经完成。您可以安装MediaWiki。",
 	"config-env-bad": "环境检查已经完成。您不能安装MediaWiki。",
 	"config-env-php": "PHP $1已安装。",
 	"config-env-hhvm": "HHVM $1已安装。",
-	"config-unicode-using-intl": "使用[http://pecl.php.net/intl intl PECL扩展程序]标准化Unicode。",
-	"config-unicode-pure-php-warning": "警告:因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。如果您运行着一个高流量的网站,请参阅 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode标准化]一文。",
+	"config-unicode-using-intl": "使用[https://pecl.php.net/intl intl PECL扩展程序]标准化Unicode。",
+	"config-unicode-pure-php-warning": "警告:因为尚未安装 [https://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。如果您运行着一个高流量的网站,请参阅 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode标准化]一文。",
 	"config-unicode-update-warning": "警告:Unicode正常化封装器的已安装版本使用了旧版本的[http://site.icu-project.org/ ICU项目]库。如果您需要使用Unicode,请将其[https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升级]。",
 	"config-no-db": "无法找到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库{{PLURAL:$2|类型}}:$1。\n\n如果您自己编译了PHP,请通过启用数据库客户端重新配置它,例如使用 ./configure --with-mysqli。如果您从 Debian 或 Ubuntu 安装包安装了PHP,那么您也需要安装,例如 php5-mysql 安装包。",
 	"config-outdated-sqlite": "警告:您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
@@ -78,16 +78,15 @@
 	"config-pcre-no-utf8": "致命错误:PHP的PCRE模块在编译时可能没有包含PCRE_UTF8支持。\nMediaWiki需要UTF-8支持才能正常工作。",
 	"config-memory-raised": "PHP的内存使用上限memory_limit为$1,自动提升到$2。",
 	"config-memory-bad": "警告:PHP的内存使用上限memory_limit为$1。\n该设定可能过低,并导致安装失败!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache]已安装",
 	"config-apc": "[http://www.php.net/apc APC]已安装",
 	"config-apcu": "已安装[http://www.php.net/apcu APCu]",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]已安装",
-	"config-no-cache-apcu": "警告:找不到[http://www.php.net/apcu APCu]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache]。\n对象缓存未启用。",
-	"config-mod-security": "警告:您的web服务器已启用[http://modsecurity.org/ mod_security]/mod_security2。它的很多常见配置可能导致MediaWiki及其他软件允许用户发布任意内容的问题。如果可能,这应当被禁用。否则,当您遭遇随机错误时,请参考[http://modsecurity.org/documentation/ mod_security 文档]或联络您的主机支持。",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache]已安装",
+	"config-no-cache-apcu": "警告:找不到[http://www.php.net/apcu APCu]或[http://www.iis.net/download/WinCacheForPhp WinCache]。对象缓存未启用。",
+	"config-mod-security": "警告:您的web服务器已启用[https://modsecurity.org/ mod_security]/mod_security2。它的很多常见配置可能导致MediaWiki及其他软件允许用户发布任意内容的问题。如果可能,这应当被禁用。否则,当您遭遇随机错误时,请参考[https://modsecurity.org/documentation/ mod_security 文档]或联络您的主机支持。",
 	"config-diff3-bad": "找不到GNU diff3。",
 	"config-git": "发现Git版本控制软件:$1",
 	"config-git-bad": "Git版本控制软件未找到。",
-	"config-imagemagick": "已找到ImageMagick:$1。如果你启用了上传功能,缩略图功能也将被启用。",
+	"config-imagemagick": "已找到ImageMagick:$1。如果您启用了上传功能,缩略图功能也将被启用。",
 	"config-gd": "已找到内建的GD图形库。如果你启用了上传功能,缩略图功能也将被启用。",
 	"config-no-scaling": "找不到GD库或ImageMagick。缩略图功能将不可用。",
 	"config-no-uri": "错误:无法确定当前的URI。\n安装已中断。",
@@ -238,7 +237,7 @@
 	"config-license-gfdl": "GNU自由文档许可证1.3或更高版本",
 	"config-license-pd": "公有领域",
 	"config-license-cc-choose": "选择自定义的知识共享许可证",
-	"config-license-help": "许多公共wiki将所有用户贡献置于[http://freedomdefined.org/Definition 自由许可证]之下。这有助于构建社区的主人翁意识,并鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。\n\n如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,您应当选择{{int:config-license-cc-by-sa}}。\n\nGNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
+	"config-license-help": "许多公共wiki将所有用户贡献置于[https://freedomdefined.org/Definition 自由许可证]之下。这有助于构建社区的主人翁意识,并鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。\n\n如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,您应当选择{{int:config-license-cc-by-sa}}。\n\nGNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
 	"config-email-settings": "电子邮件设置",
 	"config-enable-email": "启用出站电子邮件",
 	"config-enable-email-help": "如果您希望使用电子邮件功能,请正确配置[http://www.php.net/manual/en/mail.configuration.php PHP的邮件设定]。如果您不需要任何电子邮件功能,请在此处禁用它。",
@@ -268,7 +267,7 @@
 	"config-cache-options": "对象缓存设置:",
 	"config-cache-help": "对象缓存可通过缓存频繁使用的数据来提高MediaWiki的速度。高度推荐中到大型的网站启用该功能,小型网站亦能从其中受益。",
 	"config-cache-none": "无缓存(不影响功能,但对较大型的wiki网站会有速度影响)",
-	"config-cache-accel": "PHP对象缓存(APC、APCu、XCache或WinCache)",
+	"config-cache-accel": "PHP对象缓存(APC、APCu或WinCache)",
 	"config-cache-memcached": "使用Memcached(需要另外安装并配置)",
 	"config-memcached-servers": "Memcached服务器:",
 	"config-memcached-help": "用于Memcached的IP地址列表。请保持每行一条,并指定要使用的端口。例如:\n127.0.0.1:11211\n192.168.1.25:1234",
diff --git a/includes/installer/i18n/zh-hant.json b/includes/installer/i18n/zh-hant.json
index b00320f399..acc830266d 100644
--- a/includes/installer/i18n/zh-hant.json
+++ b/includes/installer/i18n/zh-hant.json
@@ -61,14 +61,14 @@
 	"config-help-restart": "是否要清除所有已輸入且儲存的資料,並重新開始安裝程序嗎?",
 	"config-restart": "是的,重新開始",
 	"config-welcome": "=== 環境檢查 ===\n現在會做基本的檢查,檢查環境是否符合 MediaWiki 安裝所需。\n若您要尋求如何完成安裝的協助,請記得提供以下訊息。",
-	"config-copyright": "=== 版權聲明與授權條款 ===\n\n$1\n\n本程式為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但 不負任何擔保責任;亦無隱含對 適售性 或 特定用途的適用性 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 GNU 通用公共授權條款的副本;如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線上閱讀]。",
+	"config-copyright": "=== 版權聲明與授權條款 ===\n\n$1\n\n本程式為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但 不負任何擔保責任;亦無隱含對 適售性 或 特定用途的適用性 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 GNU 通用公共授權條款的副本;如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [https://www.gnu.org/copyleft/gpl.html 線上閱讀]。",
 	"config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 首頁]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理員指南]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh 常見問題集]\n----\n* 讀我說明\n* 發行說明\n* 版權聲明\n* 升級",
 	"config-env-good": "環境檢查已完成。\n您可以安裝 MediaWiki。",
 	"config-env-bad": "環境檢查已完成。\n您無法安裝 MediaWiki。",
 	"config-env-php": "PHP $1 已安裝。",
 	"config-env-hhvm": "HHVM $1 已安裝。",
-	"config-unicode-using-intl": "使用 [http://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。",
-	"config-unicode-pure-php-warning": "警告: 無法使用 [http://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,故回退使用純 PHP 實作的正規化程式,此方式處理速度較緩慢。\n\n如果您的網站瀏覽人次很高,您應先閱讀 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。",
+	"config-unicode-using-intl": "使用 [https://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。",
+	"config-unicode-pure-php-warning": "警告: 無法使用 [https://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,故回退使用純 PHP 實作的正規化程式,此方式處理速度較緩慢。\n\n如果您的網站瀏覽人次很高,您應先閱讀 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。",
 	"config-unicode-update-warning": "警告:目前安裝的 Unicode 正規化包裝程式使用了舊版 [http://site.icu-project.org/ ICU 計劃] 的程式庫。\n若您需要使用 Unicode,您應先進行 [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升級]。",
 	"config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下{{PLURAL:$2|類型|類型}}的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫客戶端,例:使用 ./configure --with-mysqli 指令參數。\n如果您是使用 Debian 或 Ubuntu 的套件安裝 PHP ,您則需要額外安裝,例:php5-mysql 套件。",
 	"config-outdated-sqlite": "警告:您已安裝 SQLite $1,但是它的版本低於最低需求版本 $2。 因此您無法使用 SQLite。",
@@ -77,12 +77,11 @@
 	"config-pcre-no-utf8": "嚴重: PHP 的 PCRE 模組在編譯時未包含 PCRE_UTF8 支援。\nMediaWiki 需要支援 UTF-8 才可正常運作。",
 	"config-memory-raised": "PHP 的記憶體使用上限 memory_limit 目前為 $1,自動提高到 $2。",
 	"config-memory-bad": "警告:PHP 的記憶體使用上限 memory_limit 為 $1。\n該設定值可能過低。\n這可能導致後續的安裝失敗!",
-	"config-xcache": "[http://xcache.lighttpd.net/ XCache] 已安裝",
 	"config-apc": "[http://www.php.net/apc APC] 已安裝",
 	"config-apcu": "已安裝[http://www.php.net/apcu APCu]",
-	"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] 已安裝",
-	"config-no-cache-apcu": "警告:找不到[http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache]。未開啟物件緩存。",
-	"config-mod-security": "警告:您的網頁伺服器已開啟 [http://modsecurity.org/ mod_security] 模組,如果設定不恰當會導致使用者可在 MediaWiki 或其他應用程式發佈任意的內容。\n若您遇到任何問題,請參考 [http://modsecurity.org/documentation/ mod_security 文件] 或聯繫您的伺服器技術支援人員。",
+	"config-wincache": "[https://www.iis.net/download/WinCacheForPhp WinCache] 已安裝",
+	"config-no-cache-apcu": "警告:找不到[http://www.php.net/apcu APCu]或[http://www.iis.net/download/WinCacheForPhp WinCache]。未開啟物件快取。",
+	"config-mod-security": "警告:您的網頁伺服器已開啟 [https://modsecurity.org/ mod_security] 模組,如果設定不恰當會導致使用者可在 MediaWiki 或其他應用程式發佈任意的內容。\n若您遇到任何問題,請參考 [https://modsecurity.org/documentation/ mod_security 文件] 或聯繫您的伺服器技術支援人員。",
 	"config-diff3-bad": "找不到 GNU diff3。",
 	"config-git": "找到 Git 版本控制軟體:$1。",
 	"config-git-bad": "查無 Git 版本控制軟體。",
@@ -237,7 +236,7 @@
 	"config-license-gfdl": "GNU 自由文件授權條款 1.3 或更高版本",
 	"config-license-pd": "公有領域",
 	"config-license-cc-choose": "請選擇一個自訂的創作共用授權條款",
-	"config-license-help": "許多開放式 Wiki 會以 [http://freedomdefined.org/Definition 自由授權條款] 的方式釋放出編者的所有貢獻,這有助於構建社群的所有權,並且能鼓勵長期貢獻。對於封閉式的 Wiki 或公司 Wiki 則是非必要的。\n\n如果您希望使用來自維基百科(Wikipedia)的內容,並希望維基百科能接受您的 Wiki 內容,請應選擇 {{int:config-license-cc-by-sa}} 授權條款。\n\n維基百科(Wikipedia)先前是使用 GNU 自由文件授權條款,\n但該授權條款的內容較難理解,因此較難再利用在該條款底下的內容。",
+	"config-license-help": "許多開放式 Wiki 會以 [https://freedomdefined.org/Definition 自由授權條款] 的方式釋放出編者的所有貢獻,這有助於構建社群的所有權,並且能鼓勵長期貢獻。對於封閉式的 Wiki 或公司 Wiki 則是非必要的。\n\n如果您希望使用來自維基百科(Wikipedia)的內容,並希望維基百科能接受您的 Wiki 內容,請應選擇 {{int:config-license-cc-by-sa}} 授權條款。\n\n維基百科(Wikipedia)先前是使用 GNU 自由文件授權條款,\n但該授權條款的內容較難理解,因此較難再利用在該條款底下的內容。",
 	"config-email-settings": "E-mail 設定",
 	"config-enable-email": "開啟外寄電子郵件",
 	"config-enable-email-help": "如果您要使用電子郵件功能,請正確設定 [http://www.php.net/manual/en/mail.configuration.php PHP 的郵件設定]。\n如果您不需要使用電子郵件功能,請在此處關閉。",
@@ -267,7 +266,7 @@
 	"config-cache-options": "物件快取設定:",
 	"config-cache-help": "物件快取是用來增進 MediaWiki 速度的一項功能,透過快取經常使用的資料。\n中型到大型的網站我們會建議開啟這個選項,對小型的網站也有一定程度的效果。",
 	"config-cache-none": "不快取 (不會影響功能,但在大型 Wiki 網站可能會有處理速度的問題)",
-	"config-cache-accel": "使用 PHP 物件快取 (APC、APCu、XCache 或 WinCache)",
+	"config-cache-accel": "使用 PHP 物件快取 (APC、APCu、或是 WinCache)",
 	"config-cache-memcached": "使用 Memcached (需要額外安裝與設定)",
 	"config-memcached-servers": "Memcached 伺服器:",
 	"config-memcached-help": "請列出 Memcached 伺服器的 IP 位址。\n每一行只指定一個位置並且要註明使用的埠號,例如:\n 127.0.0.1:11211\n 192.168.1.25:1234",
diff --git a/includes/interwiki/Interwiki.php b/includes/interwiki/Interwiki.php
index 2156820578..5a996d9d11 100644
--- a/includes/interwiki/Interwiki.php
+++ b/includes/interwiki/Interwiki.php
@@ -32,7 +32,7 @@ class Interwiki {
 	/** @var string The URL of the wiki, with "$1" as a placeholder for an article name. */
 	protected $mURL;
 
-	/** @var string The URL of the file api.php  */
+	/** @var string The URL of the file api.php */
 	protected $mAPI;
 
 	/** @var string The name of the database (for a connection to be established
diff --git a/includes/libs/CryptRand.php b/includes/libs/CryptRand.php
index 859d58b5dd..474c564aeb 100644
--- a/includes/libs/CryptRand.php
+++ b/includes/libs/CryptRand.php
@@ -94,9 +94,9 @@ class CryptRand {
 		$files[] = dirname( __DIR__ );
 
 		foreach ( $files as $file ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$stat = stat( $file );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			if ( $stat ) {
 				// stat() duplicates data into numeric and string keys so kill off all the numeric ones
 				foreach ( $stat as $k => $v ) {
@@ -310,9 +310,9 @@ class CryptRand {
 			}
 			// /dev/urandom is generally considered the best possible commonly
 			// available random source, and is available on most *nix systems.
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$urandom = fopen( "/dev/urandom", "rb" );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 
 			// Attempt to read all our random data from urandom
 			// php's fread always does buffered reads based on the stream's chunk_size
diff --git a/includes/libs/JavaScriptMinifier.php b/includes/libs/JavaScriptMinifier.php
index a1a93d2b46..5ecfc7cc9b 100644
--- a/includes/libs/JavaScriptMinifier.php
+++ b/includes/libs/JavaScriptMinifier.php
@@ -498,6 +498,13 @@ class JavaScriptMinifier {
 					} while ( $end - 2 < $length && $s[$end - 2] === '\\' );
 					// Correction (1): Undo speculative add, keep only one (end of regexp)
 					$end--;
+					if ( $end > $length ) {
+						// Correction (2): Loop wrongly assumed "]" was seen
+						// String ended without ending char class or regexp. Correct $end.
+						// TODO: This is invalid and should throw.
+						$end--;
+						break;
+					}
 				}
 				// Search past the regexp modifiers (gi)
 				while ( $end < $length && ctype_alpha( $s[$end] ) ) {
diff --git a/includes/libs/MultiHttpClient.php b/includes/libs/MultiHttpClient.php
index 16168e6b59..053a5ff45b 100644
--- a/includes/libs/MultiHttpClient.php
+++ b/includes/libs/MultiHttpClient.php
@@ -48,7 +48,7 @@ use Psr\Log\NullLogger;
 class MultiHttpClient implements LoggerAwareInterface {
 	/** @var resource */
 	protected $multiHandle = null; // curl_multi handle
-	/** @var string|null SSL certificates path  */
+	/** @var string|null SSL certificates path */
 	protected $caBundlePath;
 	/** @var int */
 	protected $connTimeout = 10;
@@ -421,9 +421,14 @@ class MultiHttpClient implements LoggerAwareInterface {
 
 	/**
 	 * @return resource
+	 * @throws Exception
 	 */
 	protected function getCurlMulti() {
 		if ( !$this->multiHandle ) {
+			if ( !function_exists( 'curl_multi_init' ) ) {
+				throw new Exception( "PHP cURL extension missing. " .
+									 "Check https://www.mediawiki.org/wiki/Manual:CURL" );
+			}
 			$cmh = curl_multi_init();
 			curl_multi_setopt( $cmh, CURLMOPT_PIPELINING, (int)$this->usePipelining );
 			curl_multi_setopt( $cmh, CURLMOPT_MAXCONNECTS, (int)$this->maxConnsPerHost );
diff --git a/includes/libs/ObjectFactory.php b/includes/libs/ObjectFactory.php
deleted file mode 100644
index 6c47c3cafa..0000000000
--- a/includes/libs/ObjectFactory.php
+++ /dev/null
@@ -1,198 +0,0 @@
- false to the specification.
-	 *
-	 * The specification may also contain a 'calls' key that describes method
-	 * calls to make on the newly created object before returning it. This
-	 * pattern is often known as "setter injection". The value of this key is
-	 * expected to be an associative array with method names as keys and
-	 * argument lists as values. The argument list will be expanded (or not)
-	 * in the same way as the 'args' key for the main object.
-	 *
-	 * @param array $spec Object specification
-	 * @return object
-	 * @throws InvalidArgumentException when object specification does not
-	 * contain 'class' or 'factory' keys
-	 * @throws ReflectionException when 'args' are supplied and 'class'
-	 * constructor is non-public or non-existent
-	 */
-	public static function getObjectFromSpec( $spec ) {
-		$args = isset( $spec['args'] ) ? $spec['args'] : [];
-		$expandArgs = !isset( $spec['closure_expansion'] ) ||
-			$spec['closure_expansion'] === true;
-
-		if ( $expandArgs ) {
-			$args = static::expandClosures( $args );
-		}
-
-		if ( isset( $spec['class'] ) ) {
-			$clazz = $spec['class'];
-			if ( !$args ) {
-				$obj = new $clazz();
-			} else {
-				$obj = static::constructClassInstance( $clazz, $args );
-			}
-		} elseif ( isset( $spec['factory'] ) ) {
-			$obj = call_user_func_array( $spec['factory'], $args );
-		} else {
-			throw new InvalidArgumentException(
-				'Provided specification lacks both factory and class parameters.'
-			);
-		}
-
-		if ( isset( $spec['calls'] ) && is_array( $spec['calls'] ) ) {
-			// Call additional methods on the newly created object
-			foreach ( $spec['calls'] as $method => $margs ) {
-				if ( $expandArgs ) {
-					$margs = static::expandClosures( $margs );
-				}
-				call_user_func_array( [ $obj, $method ], $margs );
-			}
-		}
-
-		return $obj;
-	}
-
-	/**
-	 * Iterate a list and call any closures it contains.
-	 *
-	 * @param array $list List of things
-	 * @return array List with any Closures replaced with their output
-	 */
-	protected static function expandClosures( $list ) {
-		return array_map( function ( $value ) {
-			if ( is_object( $value ) && $value instanceof Closure ) {
-				// If $value is a Closure, call it.
-				return $value();
-			} else {
-				return $value;
-			}
-		}, $list );
-	}
-
-	/**
-	 * Construct an instance of the given class using the given arguments.
-	 *
-	 * PHP's `call_user_func_array()` doesn't work with object construction so
-	 * we have to use other measures. Starting with PHP 5.6.0 we could use the
-	 * "splat" operator (`...`) to unpack the array into an argument list.
-	 * Sadly there is no way to conditionally include a syntax construct like
-	 * a new operator in a way that allows older versions of PHP to still
-	 * parse the file. Instead, we will try a loop unrolling technique that
-	 * works for 0-10 arguments. If we are passed 11 or more arguments we will
-	 * take the performance penalty of using
-	 * `ReflectionClass::newInstanceArgs()` to construct the desired object.
-	 *
-	 * @param string $clazz Class name
-	 * @param array $args Constructor arguments
-	 * @return mixed Constructed instance
-	 */
-	public static function constructClassInstance( $clazz, $args ) {
-		// $args should be a non-associative array; show nice error if that's not the case
-		if ( $args && array_keys( $args ) !== range( 0, count( $args ) - 1 ) ) {
-			throw new InvalidArgumentException( __METHOD__ . ': $args cannot be an associative array' );
-		}
-
-		// TODO: when PHP min version supported is >=5.6.0 replace this
-		// with `return new $clazz( ... $args );`.
-		$obj = null;
-		switch ( count( $args ) ) {
-			case 0:
-				$obj = new $clazz();
-				break;
-			case 1:
-				$obj = new $clazz( $args[0] );
-				break;
-			case 2:
-				$obj = new $clazz( $args[0], $args[1] );
-				break;
-			case 3:
-				$obj = new $clazz( $args[0], $args[1], $args[2] );
-				break;
-			case 4:
-				$obj = new $clazz( $args[0], $args[1], $args[2], $args[3] );
-				break;
-			case 5:
-				$obj = new $clazz(
-					$args[0], $args[1], $args[2], $args[3], $args[4]
-				);
-				break;
-			case 6:
-				$obj = new $clazz(
-					$args[0], $args[1], $args[2], $args[3], $args[4],
-					$args[5]
-				);
-				break;
-			case 7:
-				$obj = new $clazz(
-					$args[0], $args[1], $args[2], $args[3], $args[4],
-					$args[5], $args[6]
-				);
-				break;
-			case 8:
-				$obj = new $clazz(
-					$args[0], $args[1], $args[2], $args[3], $args[4],
-					$args[5], $args[6], $args[7]
-				);
-				break;
-			case 9:
-				$obj = new $clazz(
-					$args[0], $args[1], $args[2], $args[3], $args[4],
-					$args[5], $args[6], $args[7], $args[8]
-				);
-				break;
-			case 10:
-				$obj = new $clazz(
-					$args[0], $args[1], $args[2], $args[3], $args[4],
-					$args[5], $args[6], $args[7], $args[8], $args[9]
-				);
-				break;
-			default:
-				// Fall back to using ReflectionClass and curse the developer
-				// who decided that 11+ args was a reasonable method
-				// signature.
-				$ref = new ReflectionClass( $clazz );
-				$obj = $ref->newInstanceArgs( $args );
-		}
-		return $obj;
-	}
-}
diff --git a/includes/libs/XhprofData.php b/includes/libs/XhprofData.php
index 8762446a03..5af22ed5b2 100644
--- a/includes/libs/XhprofData.php
+++ b/includes/libs/XhprofData.php
@@ -209,14 +209,14 @@ class XhprofData {
 			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,
diff --git a/includes/libs/filebackend/FileBackend.php b/includes/libs/filebackend/FileBackend.php
index 51308c1371..08f960a646 100644
--- a/includes/libs/filebackend/FileBackend.php
+++ b/includes/libs/filebackend/FileBackend.php
@@ -175,7 +175,7 @@ abstract class FileBackend implements LoggerAwareInterface {
 			: 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']
 			: '';
@@ -1597,7 +1597,7 @@ abstract class FileBackend implements LoggerAwareInterface {
 	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();
 		}
diff --git a/includes/libs/filebackend/FileBackendMultiWrite.php b/includes/libs/filebackend/FileBackendMultiWrite.php
index f8ca7e5aef..9c367af5ad 100644
--- a/includes/libs/filebackend/FileBackendMultiWrite.php
+++ b/includes/libs/filebackend/FileBackendMultiWrite.php
@@ -87,6 +87,9 @@ class FileBackendMultiWrite extends FileBackend {
 	 *                      This will apply such updates post-send for web requests. Note that
 	 *                      any checks from "syncChecks" are still synchronous.
 	 *
+	 * Bogus warning
+	 * @suppress PhanAccessMethodProtected
+	 *
 	 * @param array $config
 	 * @throws FileBackendError
 	 */
diff --git a/includes/libs/filebackend/FileBackendStore.php b/includes/libs/filebackend/FileBackendStore.php
index b8eec3f01d..06b263a8c6 100644
--- a/includes/libs/filebackend/FileBackendStore.php
+++ b/includes/libs/filebackend/FileBackendStore.php
@@ -60,7 +60,7 @@ abstract class FileBackendStore extends FileBackend {
 	/**
 	 * @see FileBackend::__construct()
 	 * Additional $config params include:
-	 *   - srvCache     : BagOStuff cache to APC/XCache or the like.
+	 *   - srvCache     : BagOStuff cache to APC or the like.
 	 *   - wanCache     : WANObjectCache object to use for persistent caching.
 	 *   - mimeCallback : Callback that takes (storage path, content, file system path) and
 	 *                    returns the MIME type of the file or 'unknown/unknown'. The file
@@ -378,9 +378,9 @@ abstract class FileBackendStore extends FileBackend {
 		unset( $params['latest'] ); // sanity
 
 		// Check that the specified temp file is valid...
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$ok = ( is_file( $tmpPath ) && filesize( $tmpPath ) == 0 );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( !$ok ) { // not present or not empty
 			$status->fatal( 'backend-fail-opentemp', $tmpPath );
 
@@ -696,9 +696,9 @@ abstract class FileBackendStore extends FileBackend {
 	protected function doGetFileContentsMulti( array $params ) {
 		$contents = [];
 		foreach ( $this->doGetLocalReferenceMulti( $params ) as $path => $fsFile ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$contents[$path] = $fsFile ? file_get_contents( $fsFile->getPath() ) : false;
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 		}
 
 		return $contents;
@@ -1008,13 +1008,13 @@ abstract class FileBackendStore extends FileBackend {
 	 */
 	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
diff --git a/includes/libs/filebackend/HTTPFileStreamer.php b/includes/libs/filebackend/HTTPFileStreamer.php
index 9730acb8cd..9f8959cba0 100644
--- a/includes/libs/filebackend/HTTPFileStreamer.php
+++ b/includes/libs/filebackend/HTTPFileStreamer.php
@@ -84,9 +84,9 @@ class HTTPFileStreamer {
 				is_int( $header ) ? HttpStatus::header( $header ) : header( $header );
 			};
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$info = stat( $this->path );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !is_array( $info ) ) {
 			if ( $sendErrors ) {
diff --git a/includes/libs/filebackend/MemoryFileBackend.php b/includes/libs/filebackend/MemoryFileBackend.php
index 0341a2af1d..548c85c85d 100644
--- a/includes/libs/filebackend/MemoryFileBackend.php
+++ b/includes/libs/filebackend/MemoryFileBackend.php
@@ -70,9 +70,9 @@ class MemoryFileBackend extends FileBackendStore {
 			return $status;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$data = file_get_contents( $params['src'] );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( $data === false ) { // source doesn't exist?
 			$status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
 
diff --git a/includes/libs/filebackend/SwiftFileBackend.php b/includes/libs/filebackend/SwiftFileBackend.php
index 27ce212bad..bce83348d7 100644
--- a/includes/libs/filebackend/SwiftFileBackend.php
+++ b/includes/libs/filebackend/SwiftFileBackend.php
@@ -87,7 +87,7 @@ class SwiftFileBackend extends FileBackendStore {
 	 *                             - levels : the number of hash levels (and digits)
 	 *                             - repeat : hash subdirectories are prefixed with all the
 	 *                                        parent hash directory names (e.g. "a/ab/abc")
-	 *   - cacheAuthInfo      : Whether to cache authentication tokens in APC, XCache, ect.
+	 *   - cacheAuthInfo      : Whether to cache authentication tokens in APC, etc.
 	 *                          If those are not available, then the main cache will be used.
 	 *                          This is probably insecure in shared hosting environments.
 	 *   - rgwS3AccessKey     : Rados Gateway S3 "access key" value on the account.
@@ -335,9 +335,9 @@ class SwiftFileBackend extends FileBackendStore {
 			return $status;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$sha1Hash = sha1_file( $params['src'] );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( $sha1Hash === false ) { // source doesn't exist?
 			$status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
 
diff --git a/includes/libs/filebackend/fileop/StoreFileOp.php b/includes/libs/filebackend/fileop/StoreFileOp.php
index bba762f0dd..69ae47f428 100644
--- a/includes/libs/filebackend/fileop/StoreFileOp.php
+++ b/includes/libs/filebackend/fileop/StoreFileOp.php
@@ -77,9 +77,9 @@ class StoreFileOp extends FileOp {
 	}
 
 	protected function getSourceSha1Base36() {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$hash = sha1_file( $this->params['src'] );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( $hash !== false ) {
 			$hash = Wikimedia\base_convert( $hash, 16, 36, 31 );
 		}
diff --git a/includes/libs/filebackend/fsfile/FSFile.php b/includes/libs/filebackend/fsfile/FSFile.php
index dacad1cb26..553c9aaf17 100644
--- a/includes/libs/filebackend/fsfile/FSFile.php
+++ b/includes/libs/filebackend/fsfile/FSFile.php
@@ -75,9 +75,9 @@ class FSFile {
 	 * @return string|bool TS_MW timestamp or false on failure
 	 */
 	public function getTimestamp() {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$timestamp = filemtime( $this->path );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( $timestamp !== false ) {
 			$timestamp = wfTimestamp( TS_MW, $timestamp );
 		}
@@ -168,9 +168,9 @@ class FSFile {
 			return $this->sha1Base36;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$this->sha1Base36 = sha1_file( $this->path );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( $this->sha1Base36 !== false ) {
 			$this->sha1Base36 = Wikimedia\base_convert( $this->sha1Base36, 16, 36, 31 );
diff --git a/includes/libs/filebackend/fsfile/TempFSFile.php b/includes/libs/filebackend/fsfile/TempFSFile.php
index fed6812f5b..00d2028790 100644
--- a/includes/libs/filebackend/fsfile/TempFSFile.php
+++ b/includes/libs/filebackend/fsfile/TempFSFile.php
@@ -62,9 +62,9 @@ class TempFSFile extends FSFile {
 				$tmpDirectory = self::getUsableTempDirectory();
 			}
 			$path = wfTempDir() . '/' . $prefix . $hex . $ext;
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$newFileHandle = fopen( $path, 'x' );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			if ( $newFileHandle ) {
 				fclose( $newFileHandle );
 				$tmpFile = new self( $path );
@@ -119,9 +119,9 @@ class TempFSFile extends FSFile {
 	 */
 	public function purge() {
 		$this->canDelete = false; // done
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$ok = unlink( $this->path );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		unset( self::$pathsCollect[$this->path] );
 
@@ -179,9 +179,9 @@ class TempFSFile extends FSFile {
 	 */
 	public static function purgeAllOnShutdown() {
 		foreach ( self::$pathsCollect as $path ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			unlink( $path );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 		}
 	}
 
diff --git a/includes/libs/lockmanager/FSLockManager.php b/includes/libs/lockmanager/FSLockManager.php
index 7f33a0abdf..f2624e721a 100644
--- a/includes/libs/lockmanager/FSLockManager.php
+++ b/includes/libs/lockmanager/FSLockManager.php
@@ -122,13 +122,13 @@ class FSLockManager extends LockManager {
 			if ( isset( $this->handles[$path] ) ) {
 				$handle = $this->handles[$path];
 			} else {
-				MediaWiki\suppressWarnings();
+				Wikimedia\suppressWarnings();
 				$handle = fopen( $this->getLockPath( $path ), 'a+' );
 				if ( !$handle ) { // lock dir missing?
 					mkdir( $this->lockDir, 0777, true );
 					$handle = fopen( $this->getLockPath( $path ), 'a+' ); // try again
 				}
-				MediaWiki\restoreWarnings();
+				Wikimedia\restoreWarnings();
 			}
 			if ( $handle ) {
 				// Either a shared or exclusive lock
diff --git a/includes/libs/lockmanager/MemcLockManager.php b/includes/libs/lockmanager/MemcLockManager.php
index aecdf60cda..6274d60518 100644
--- a/includes/libs/lockmanager/MemcLockManager.php
+++ b/includes/libs/lockmanager/MemcLockManager.php
@@ -69,10 +69,10 @@ class MemcLockManager extends QuorumLockManager {
 		$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." );
 		}
 
diff --git a/includes/libs/mime/MimeAnalyzer.php b/includes/libs/mime/MimeAnalyzer.php
index 4d860bb593..8d842cbb7b 100644
--- a/includes/libs/mime/MimeAnalyzer.php
+++ b/includes/libs/mime/MimeAnalyzer.php
@@ -643,9 +643,9 @@ EOT;
 	 */
 	private function doGuessMimeType( $file, $ext ) {
 		// Read a chunk of the file
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$f = fopen( $file, 'rb' );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$f ) {
 			return 'unknown/unknown';
@@ -833,9 +833,9 @@ EOT;
 			}
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$gis = getimagesize( $file );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( $gis && isset( $gis['mime'] ) ) {
 			$mime = $gis['mime'];
diff --git a/includes/libs/mime/XmlTypeCheck.php b/includes/libs/mime/XmlTypeCheck.php
index 648fb67f9f..9770515ec0 100644
--- a/includes/libs/mime/XmlTypeCheck.php
+++ b/includes/libs/mime/XmlTypeCheck.php
@@ -376,7 +376,7 @@ class XmlTypeCheck {
 		if ( !$externalCallback && !$generalCallback && !$checkIfSafe ) {
 			return;
 		}
-		$dtd = $reader->readOuterXML();
+		$dtd = $reader->readOuterXml();
 		$callbackReturn = false;
 
 		if ( $generalCallback ) {
diff --git a/includes/libs/objectcache/MemcachedClient.php b/includes/libs/objectcache/MemcachedClient.php
index b937736d4f..59131b976a 100644
--- a/includes/libs/objectcache/MemcachedClient.php
+++ b/includes/libs/objectcache/MemcachedClient.php
@@ -788,13 +788,13 @@ class MemcachedClient {
 		$timeout = $this->_connect_timeout;
 		$errno = $errstr = null;
 		for ( $i = 0; !$sock && $i < $this->_connect_attempts; $i++ ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			if ( $this->_persistent == 1 ) {
 				$sock = pfsockopen( $ip, $port, $errno, $errstr, $timeout );
 			} else {
 				$sock = fsockopen( $ip, $port, $errno, $errstr, $timeout );
 			}
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 		}
 		if ( !$sock ) {
 			$this->_error_log( "Error connecting to $host: $errstr" );
diff --git a/includes/libs/objectcache/MultiWriteBagOStuff.php b/includes/libs/objectcache/MultiWriteBagOStuff.php
index 643f318315..b03052267a 100644
--- a/includes/libs/objectcache/MultiWriteBagOStuff.php
+++ b/includes/libs/objectcache/MultiWriteBagOStuff.php
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Cache
  */
+use Wikimedia\ObjectFactory;
 
 /**
  * A cache class that replicates all writes to multiple child caches. Reads
diff --git a/includes/libs/objectcache/ReplicatedBagOStuff.php b/includes/libs/objectcache/ReplicatedBagOStuff.php
index 8239491f72..56b6e0ecc2 100644
--- a/includes/libs/objectcache/ReplicatedBagOStuff.php
+++ b/includes/libs/objectcache/ReplicatedBagOStuff.php
@@ -18,6 +18,7 @@
  * @file
  * @ingroup Cache
  */
+use Wikimedia\ObjectFactory;
 
 /**
  * A cache class that directs writes to one set of servers and reads to
diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php
index 409f507969..eec766b9d7 100644
--- a/includes/libs/objectcache/WANObjectCache.php
+++ b/includes/libs/objectcache/WANObjectCache.php
@@ -47,17 +47,23 @@ use Psr\Log\NullLogger;
  * There are three supported ways to handle broadcasted operations:
  *   - a) Configure the 'purge' EventRelayer to point to a valid PubSub endpoint
  *         that has subscribed listeners on the cache servers applying the cache updates.
- *   - b) Ignore the 'purge' EventRelayer configuration (default is NullEventRelayer)
- *         and set up mcrouter as the underlying cache backend, using one of the memcached
- *         BagOStuff classes as 'cache'. Use OperationSelectorRoute in the mcrouter settings
- *         to configure 'set' and 'delete' operations to go to all DCs via AllAsyncRoute and
- *         configure other operations to go to the local DC via PoolRoute (for reference,
- *         see https://github.com/facebook/mcrouter/wiki/List-of-Route-Handles).
- *   - c) Ignore the 'purge' EventRelayer configuration (default is NullEventRelayer)
- *         and set up dynomite as cache middleware between the web servers and either
- *         memcached or redis. This will also broadcast all key setting operations, not just purges,
- *         which can be useful for cache warming. Writes are eventually consistent via the
- *         Dynamo replication model (see https://github.com/Netflix/dynomite).
+ *   - b) Ommit the 'purge' EventRelayer parameter and set up mcrouter as the underlying cache
+ *        backend, using a memcached BagOStuff class for the 'cache' parameter. The 'region'
+ *        and 'cluster' parameters must be provided and 'mcrouterAware' must be set to 'true'.
+ *        Configure mcrouter as follows:
+ *          - 1) Use Route Prefixing based on region (datacenter) and cache cluster.
+ *                See https://github.com/facebook/mcrouter/wiki/Routing-Prefix and
+ *                https://github.com/facebook/mcrouter/wiki/Multi-cluster-broadcast-setup
+ *          - 2) To increase the consistency of delete() and touchCheckKey() during cache
+ *                server membership changes, you can use the OperationSelectorRoute to
+ *                configure 'set' and 'delete' operations to go to all servers in the cache
+ *                cluster, instead of just one server determined by hashing.
+ *                See https://github.com/facebook/mcrouter/wiki/List-of-Route-Handles
+ *   - c) Ommit the 'purge' EventRelayer parameter and set up dynomite as cache middleware
+ *         between the web servers and either memcached or redis. This will also broadcast all
+ *         key setting operations, not just purges, which can be useful for cache warming.
+ *         Writes are eventually consistent via the Dynamo replication model.
+ *         See https://github.com/Netflix/dynomite
  *
  * Broadcasted operations like delete() and touchCheckKey() are done asynchronously
  * in all datacenters this way, though the local one should likely be near immediate.
@@ -87,6 +93,12 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	protected $purgeChannel;
 	/** @var EventRelayer Bus that handles purge broadcasts */
 	protected $purgeRelayer;
+	/** @bar bool Whether to use mcrouter key prefixing for routing */
+	protected $mcrouterAware;
+	/** @var string Physical region for mcrouter use */
+	protected $region;
+	/** @var string Cache cluster name for mcrouter use */
+	protected $cluster;
 	/** @var LoggerInterface */
 	protected $logger;
 	/** @var StatsdDataFactoryInterface */
@@ -122,8 +134,6 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	const LOCK_TTL = 10;
 	/** Default remaining TTL at which to consider pre-emptive regeneration */
 	const LOW_TTL = 30;
-	/** Default time-since-expiry on a miss that makes a key "hot" */
-	const LOCK_TSE = 1;
 
 	/** Never consider performing "popularity" refreshes until a key reaches this age */
 	const AGE_NEW = 60;
@@ -200,6 +210,16 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	 *       callback supplied by the getWithSetCallback() caller. The result will be saved
 	 *       as normal. The handler is expected to call the WAN cache callback at an opportune
 	 *       time (e.g. HTTP post-send), though generally within a few 100ms. [optional]
+	 *   - region: the current physical region. This is required when using mcrouter as the
+	 *       backing store proxy. [optional]
+	 *   - cluster: name of the cache cluster used by this WAN cache. The name must be the
+	 *       same in all datacenters; the ("region","cluster") tuple is what distinguishes
+	 *       the counterpart cache clusters among all the datacenter. The contents of
+	 *       https://github.com/facebook/mcrouter/wiki/Config-Files give background on this.
+	 *       This is required when using mcrouter as the backing store proxy. [optional]
+	 *   - mcrouterAware: set as true if mcrouter is the backing store proxy and mcrouter
+	 *       is configured to interpret /// key prefixes as routes. This
+	 *       requires that "region" and "cluster" are both set above. [optional]
 	 */
 	public function __construct( array $params ) {
 		$this->cache = $params['cache'];
@@ -209,6 +229,10 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 		$this->purgeRelayer = isset( $params['relayers']['purge'] )
 			? $params['relayers']['purge']
 			: new EventRelayerNull( [] );
+		$this->region = isset( $params['region'] ) ? $params['region'] : 'main';
+		$this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : 'wan-main';
+		$this->mcrouterAware = !empty( $params['mcrouterAware'] );
+
 		$this->setLogger( isset( $params['logger'] ) ? $params['logger'] : new NullLogger() );
 		$this->stats = isset( $params['stats'] ) ? $params['stats'] : new NullStatsdDataFactory();
 		$this->asyncHandler = isset( $params['asyncHandler'] ) ? $params['asyncHandler'] : null;
@@ -258,7 +282,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	 * (e.g. the default REPEATABLE-READ in innoDB). Even for mutable data, that
 	 * isolation can largely be maintained by doing the following:
 	 *   - a) Calling delete() on entity change *and* creation, before DB commit
-	 *   - b) Keeping transaction duration shorter than delete() hold-off TTL
+	 *   - b) Keeping transaction duration shorter than the delete() hold-off TTL
+	 *   - c) Disabling interim key caching via useInterimHoldOffCaching() before get() calls
 	 *
 	 * However, pre-snapshot values might still be seen if an update was made
 	 * in a remote datacenter but the purge from delete() didn't relay yet.
@@ -419,6 +444,12 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	 *
 	 * 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 );
@@ -535,6 +566,10 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	 *
 	 * 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.
@@ -1769,9 +1804,18 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	 * @return bool Success
 	 */
 	protected function relayPurge( $key, $ttl, $holdoff ) {
-		if ( $this->purgeRelayer instanceof EventRelayerNull ) {
+		if ( $this->mcrouterAware ) {
+			// See https://github.com/facebook/mcrouter/wiki/Multi-cluster-broadcast-setup
+			// Wildcards select all matching routes, e.g. the WAN cluster on all DCs
+			$ok = $this->cache->set(
+				"/*/{$this->cluster}/{$key}",
+				$this->makePurgeValue( $this->getCurrentTime(), self::HOLDOFF_NONE ),
+				$ttl
+			);
+		} elseif ( $this->purgeRelayer instanceof EventRelayerNull ) {
 			// This handles the mcrouter and the single-DC case
-			$ok = $this->cache->set( $key,
+			$ok = $this->cache->set(
+				$key,
 				$this->makePurgeValue( $this->getCurrentTime(), self::HOLDOFF_NONE ),
 				$ttl
 			);
@@ -1800,8 +1844,12 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 	 * @return bool Success
 	 */
 	protected function relayDelete( $key ) {
-		if ( $this->purgeRelayer instanceof EventRelayerNull ) {
-			// This handles the mcrouter and the single-DC case
+		if ( $this->mcrouterAware ) {
+			// See https://github.com/facebook/mcrouter/wiki/Multi-cluster-broadcast-setup
+			// Wildcards select all matching routes, e.g. the WAN cluster on all DCs
+			$ok = $this->cache->delete( "/*/{$this->cluster}/{$key}" );
+		} elseif ( $this->purgeRelayer instanceof EventRelayerNull ) {
+			// Some other proxy handles broadcasting or there is only one datacenter
 			$ok = $this->cache->delete( $key );
 		} else {
 			$event = $this->cache->modifySimpleRelayEvent( [
diff --git a/includes/libs/objectcache/XCacheBagOStuff.php b/includes/libs/objectcache/XCacheBagOStuff.php
deleted file mode 100644
index 47c29064b1..0000000000
--- a/includes/libs/objectcache/XCacheBagOStuff.php
+++ /dev/null
@@ -1,68 +0,0 @@
-isInteger( $val ) ) {
-				$val = intval( $val );
-			} else {
-				$val = unserialize( $val );
-			}
-		} elseif ( is_null( $val ) ) {
-			return false;
-		}
-
-		return $val;
-	}
-
-	public function set( $key, $value, $expire = 0, $flags = 0 ) {
-		if ( !$this->isInteger( $value ) ) {
-			$value = serialize( $value );
-		}
-
-		xcache_set( $key, $value, $expire );
-		return true;
-	}
-
-	public function delete( $key ) {
-		xcache_unset( $key );
-		return true;
-	}
-
-	public function incr( $key, $value = 1 ) {
-		return xcache_inc( $key, $value );
-	}
-
-	public function decr( $key, $value = 1 ) {
-		return xcache_dec( $key, $value );
-	}
-}
diff --git a/includes/libs/rdbms/TransactionProfiler.php b/includes/libs/rdbms/TransactionProfiler.php
index a828cd3f1c..c353a224c6 100644
--- a/includes/libs/rdbms/TransactionProfiler.php
+++ b/includes/libs/rdbms/TransactionProfiler.php
@@ -177,7 +177,7 @@ class TransactionProfiler implements LoggerAwareInterface {
 	public function transactionWritingIn( $server, $db, $id ) {
 		$name = "{$server} ({$db}) (TRX#$id)";
 		if ( isset( $this->dbTrxHoldingLocks[$name] ) ) {
-			$this->logger->info( "Nested transaction for '$name' - out of sync." );
+			$this->logger->warning( "Nested transaction for '$name' - out of sync." );
 		}
 		$this->dbTrxHoldingLocks[$name] = [
 			'start' => microtime( true ),
@@ -206,7 +206,7 @@ class TransactionProfiler implements LoggerAwareInterface {
 		$elapsed = ( $eTime - $sTime );
 
 		if ( $isWrite && $n > $this->expect['maxAffected'] ) {
-			$this->logger->info(
+			$this->logger->warning(
 				"Query affected $n row(s):\n" . $query . "\n" .
 				( new RuntimeException() )->getTraceAsString() );
 		}
@@ -271,7 +271,7 @@ class TransactionProfiler implements LoggerAwareInterface {
 	public function transactionWritingOut( $server, $db, $id, $writeTime = 0.0, $affected = 0 ) {
 		$name = "{$server} ({$db}) (TRX#$id)";
 		if ( !isset( $this->dbTrxMethodTimes[$name] ) ) {
-			$this->logger->info( "Detected no transaction for '$name' - out of sync." );
+			$this->logger->warning( "Detected no transaction for '$name' - out of sync." );
 			return;
 		}
 
@@ -317,7 +317,7 @@ class TransactionProfiler implements LoggerAwareInterface {
 				list( $query, $sTime, $end ) = $info;
 				$trace .= sprintf( "%d\t%.6f\t%s\n", $i, ( $end - $sTime ), $query );
 			}
-			$this->logger->info( "Sub-optimal transaction on DB(s) [{dbs}]: \n{trace}", [
+			$this->logger->warning( "Sub-optimal transaction on DB(s) [{dbs}]: \n{trace}", [
 				'dbs' => implode( ', ', array_keys( $this->dbTrxHoldingLocks[$name]['conns'] ) ),
 				'trace' => $trace
 			] );
@@ -336,7 +336,7 @@ class TransactionProfiler implements LoggerAwareInterface {
 			return;
 		}
 
-		$this->logger->info(
+		$this->logger->warning(
 			"Expectation ({measure} <= {max}) by {by} not met (actual: {actual}):\n{query}\n" .
 			( new RuntimeException() )->getTraceAsString(),
 			[
diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php
index 323c147824..d1814e18b5 100644
--- a/includes/libs/rdbms/database/Database.php
+++ b/includes/libs/rdbms/database/Database.php
@@ -29,7 +29,7 @@ use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Wikimedia\ScopedCallback;
 use Wikimedia\Timestamp\ConvertibleTimestamp;
-use MediaWiki;
+use Wikimedia;
 use BagOStuff;
 use HashBagOStuff;
 use InvalidArgumentException;
@@ -126,6 +126,8 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 	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.
@@ -336,53 +338,51 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 	 * @since 1.18
 	 */
 	final public static function factory( $dbType, $p = [] ) {
-		static $canonicalDBTypes = [
-			'mysql' => [ 'mysqli' ],
-			'postgres' => [],
-			'sqlite' => [],
-			'oracle' => [],
-			'mssql' => [],
-		];
-		static $classAliases = [
-			'DatabaseMssql' => DatabaseMssql::class,
-			'DatabaseMysqli' => DatabaseMysqli::class,
-			'DatabaseSqlite' => DatabaseSqlite::class,
-			'DatabasePostgres' => DatabasePostgres::class
+		// For database types with built-in support, the below maps type to IDatabase
+		// implementations. For types with multipe driver implementations (PHP extensions),
+		// an array can be used, keyed by extension name. In case of an array, the
+		// optional 'driver' parameter can be used to force a specific driver. Otherwise,
+		// we auto-detect the first available driver. For types without built-in support,
+		// an class named "Database" us used, eg. DatabaseFoo for type 'foo'.
+		static $builtinTypes = [
+			'mssql' => DatabaseMssql::class,
+			'mysql' => [ 'mysqli' => DatabaseMysqli::class ],
+			'sqlite' => DatabaseSqlite::class,
+			'postgres' => DatabasePostgres::class,
 		];
 
-		$driver = false;
 		$dbType = strtolower( $dbType );
-		if ( isset( $canonicalDBTypes[$dbType] ) && $canonicalDBTypes[$dbType] ) {
-			$possibleDrivers = $canonicalDBTypes[$dbType];
-			if ( !empty( $p['driver'] ) ) {
-				if ( in_array( $p['driver'], $possibleDrivers ) ) {
-					$driver = $p['driver'];
-				} else {
-					throw new InvalidArgumentException( __METHOD__ .
-						" type '$dbType' does not support driver '{$p['driver']}'" );
-				}
+		$class = false;
+		if ( isset( $builtinTypes[$dbType] ) ) {
+			$possibleDrivers = $builtinTypes[$dbType];
+			if ( is_string( $possibleDrivers ) ) {
+				$class = $possibleDrivers;
 			} else {
-				foreach ( $possibleDrivers as $posDriver ) {
-					if ( extension_loaded( $posDriver ) ) {
-						$driver = $posDriver;
-						break;
+				if ( !empty( $p['driver'] ) ) {
+					if ( !isset( $possibleDrivers[$p['driver']] ) ) {
+						throw new InvalidArgumentException( __METHOD__ .
+							" type '$dbType' does not support driver '{$p['driver']}'" );
+					} else {
+						$class = $possibleDrivers[$p['driver']];
+					}
+				} else {
+					foreach ( $possibleDrivers as $posDriver => $possibleClass ) {
+						if ( extension_loaded( $posDriver ) ) {
+							$class = $possibleClass;
+							break;
+						}
 					}
 				}
 			}
 		} else {
-			$driver = $dbType;
+			$class = 'Database' . ucfirst( $dbType );
 		}
 
-		if ( $driver === false || $driver === '' ) {
+		if ( $class === false ) {
 			throw new InvalidArgumentException( __METHOD__ .
 				" no viable database extension found for type '$dbType'" );
 		}
 
-		$class = 'Database' . ucfirst( $driver );
-		if ( isset( $classAliases[$class] ) ) {
-			$class = $classAliases[$class];
-		}
-
 		if ( class_exists( $class ) && is_subclass_of( $class, IDatabase::class ) ) {
 			// Resolve some defaults for b/c
 			$p['host'] = isset( $p['host'] ) ? $p['host'] : false;
@@ -1004,8 +1004,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 	}
 
 	/**
-	 * 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
@@ -1031,7 +1030,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 		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 );
 		}
@@ -2240,51 +2241,49 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 	}
 
 	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;
 	}
 
 	/**
@@ -2349,6 +2348,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 			$where = false;
 		}
 
+		$affectedRowCount = 0;
 		$useTrx = !$this->mTrxLevel;
 		if ( $useTrx ) {
 			$this->begin( $fname, self::TRANSACTION_INTERNAL );
@@ -2357,11 +2357,13 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 			# 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 );
@@ -2371,6 +2373,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 		if ( $useTrx ) {
 			$this->commit( $fname, self::FLUSHING_INTERNAL );
 		}
+		$this->affectedRowCount = $affectedRowCount;
 
 		return $ok;
 	}
@@ -3189,6 +3192,17 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 		}
 	}
 
+	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
@@ -3355,9 +3369,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 		$fname = false,
 		callable $inputCallback = null
 	) {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$fp = fopen( $filename, 'r' );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( false === $fp ) {
 			throw new RuntimeException( "Could not open \"{$filename}\".\n" );
@@ -3796,9 +3810,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 		if ( $this->mConn ) {
 			// Avoid connection leaks for sanity. Normally, resources close at script completion.
 			// The connection might already be closed in zend/hhvm by now, so suppress warnings.
-			\MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$this->closeConnection();
-			\MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			$this->mConn = false;
 			$this->mOpened = false;
 		}
diff --git a/includes/libs/rdbms/database/DatabaseMssql.php b/includes/libs/rdbms/database/DatabaseMssql.php
index 53beb65f9a..9a0e8c9cf5 100644
--- a/includes/libs/rdbms/database/DatabaseMssql.php
+++ b/includes/libs/rdbms/database/DatabaseMssql.php
@@ -27,7 +27,7 @@
 
 namespace Wikimedia\Rdbms;
 
-use MediaWiki;
+use Wikimedia;
 use Exception;
 use stdClass;
 
@@ -111,9 +111,9 @@ class DatabaseMssql extends Database {
 			$connectionInfo['PWD'] = $password;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$this->mConn = sqlsrv_connect( $server, $connectionInfo );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( $this->mConn === false ) {
 			throw new DBConnectionError( $this, $this->lastError() );
@@ -353,7 +353,7 @@ class DatabaseMssql extends Database {
 	/**
 	 * @return int
 	 */
-	public function affectedRows() {
+	protected function fetchAffectedRowCount() {
 		return $this->mAffectedRows;
 	}
 
diff --git a/includes/libs/rdbms/database/DatabaseMysqlBase.php b/includes/libs/rdbms/database/DatabaseMysqlBase.php
index 305a056900..bd2d274cc5 100644
--- a/includes/libs/rdbms/database/DatabaseMysqlBase.php
+++ b/includes/libs/rdbms/database/DatabaseMysqlBase.php
@@ -24,7 +24,7 @@ namespace Wikimedia\Rdbms;
 
 use DateTime;
 use DateTimeZone;
-use MediaWiki;
+use Wikimedia;
 use InvalidArgumentException;
 use Exception;
 use stdClass;
@@ -63,6 +63,8 @@ abstract class DatabaseMysqlBase extends Database {
 
 	/** @var string|null */
 	private $serverVersion = null;
+	/** @var bool|null */
+	private $insertSelectIsSafe = null;
 
 	/**
 	 * Additional $params include:
@@ -75,6 +77,7 @@ abstract class DatabaseMysqlBase extends Database {
 	 *       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]
@@ -98,6 +101,8 @@ abstract class DatabaseMysqlBase extends Database {
 		}
 		$this->sqlMode = isset( $params['sqlMode'] ) ? $params['sqlMode'] : '';
 		$this->utf8Mode = !empty( $params['utf8Mode'] );
+		$this->insertSelectIsSafe = isset( $params['insertSelectIsSafe'] )
+			? (bool)$params['insertSelectIsSafe'] : null;
 
 		parent::__construct( $params );
 	}
@@ -154,10 +159,10 @@ abstract class DatabaseMysqlBase extends Database {
 			$this->reportConnectionError( $error );
 		}
 
-		if ( $dbName != '' ) {
-			MediaWiki\suppressWarnings();
+		if ( strlen( $dbName ) ) {
+			Wikimedia\suppressWarnings();
 			$success = $this->selectDB( $dbName );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			if ( !$success ) {
 				$this->queryLogger->error(
 					"Error selecting database {db_name} on server {db_server}",
@@ -252,9 +257,9 @@ abstract class DatabaseMysqlBase extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$ok = $this->mysqlFreeResult( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( !$ok ) {
 			throw new DBUnexpectedError( $this, "Unable to free MySQL result" );
 		}
@@ -277,9 +282,9 @@ abstract class DatabaseMysqlBase extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$row = $this->mysqlFetchObject( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		$errno = $this->lastErrno();
 		// Unfortunately, mysql_fetch_object does not reset the last errno.
@@ -313,9 +318,9 @@ abstract class DatabaseMysqlBase extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$row = $this->mysqlFetchArray( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		$errno = $this->lastErrno();
 		// Unfortunately, mysql_fetch_array does not reset the last errno.
@@ -349,9 +354,9 @@ abstract class DatabaseMysqlBase extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$n = $this->mysqlNumRows( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		// Unfortunately, mysql_num_rows does not reset the last errno.
 		// We are not checking for any errors here, since
@@ -462,12 +467,12 @@ abstract class DatabaseMysqlBase extends Database {
 	public function lastError() {
 		if ( $this->mConn ) {
 			# Even if it's non-zero, it can still be invalid
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$error = $this->mysqlError( $this->mConn );
 			if ( !$error ) {
 				$error = $this->mysqlError();
 			}
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 		} else {
 			$error = $this->mysqlError();
 		}
@@ -501,6 +506,56 @@ abstract class DatabaseMysqlBase extends Database {
 		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
@@ -834,8 +889,10 @@ abstract class DatabaseMysqlBase extends Database {
 			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)" );
@@ -855,14 +912,17 @@ abstract class DatabaseMysqlBase extends Database {
 		// 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
@@ -882,9 +942,7 @@ abstract class DatabaseMysqlBase extends Database {
 		$row = $this->fetchObject( $res );
 
 		if ( $row ) {
-			$pos = isset( $row->Exec_master_log_pos )
-				? $row->Exec_master_log_pos
-				: $row->Exec_Master_Log_Pos;
+			$pos = $row->Exec_Master_Log_Pos;
 			// Also fetch the last-applied GTID set (MariaDB)
 			if ( $this->useGTIDs ) {
 				$res = $this->query( "SHOW GLOBAL VARIABLES LIKE 'gtid_slave_pos'", __METHOD__ );
diff --git a/includes/libs/rdbms/database/DatabaseMysqli.php b/includes/libs/rdbms/database/DatabaseMysqli.php
index c1a56988d5..09ea66cac8 100644
--- a/includes/libs/rdbms/database/DatabaseMysqli.php
+++ b/includes/libs/rdbms/database/DatabaseMysqli.php
@@ -172,7 +172,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
 	/**
 	 * @return int
 	 */
-	function affectedRows() {
+	protected function fetchAffectedRowCount() {
 		$conn = $this->getBindingHandle();
 
 		return $conn->affected_rows;
diff --git a/includes/libs/rdbms/database/DatabasePostgres.php b/includes/libs/rdbms/database/DatabasePostgres.php
index 8c21d726b0..8fbb7de7ce 100644
--- a/includes/libs/rdbms/database/DatabasePostgres.php
+++ b/includes/libs/rdbms/database/DatabasePostgres.php
@@ -24,7 +24,7 @@ namespace Wikimedia\Rdbms;
 
 use Wikimedia\Timestamp\ConvertibleTimestamp;
 use Wikimedia\WaitConditionLoop;
-use MediaWiki;
+use Wikimedia;
 use Exception;
 
 /**
@@ -266,9 +266,9 @@ class DatabasePostgres extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$ok = pg_free_result( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( !$ok ) {
 			throw new DBUnexpectedError( $this, "Unable to free Postgres result\n" );
 		}
@@ -278,9 +278,9 @@ class DatabasePostgres extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$row = pg_fetch_object( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		# @todo FIXME: HACK HACK HACK HACK debug
 
 		# @todo hashar: not sure if the following test really trigger if the object
@@ -300,9 +300,9 @@ class DatabasePostgres extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$row = pg_fetch_array( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		$conn = $this->getBindingHandle();
 		if ( pg_last_error( $conn ) ) {
@@ -319,9 +319,9 @@ class DatabasePostgres extends Database {
 		if ( $res instanceof ResultWrapper ) {
 			$res = $res->result;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$n = pg_num_rows( $res );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		$conn = $this->getBindingHandle();
 		if ( pg_last_error( $conn ) ) {
@@ -384,7 +384,7 @@ class DatabasePostgres extends Database {
 		}
 	}
 
-	public function affectedRows() {
+	protected function fetchAffectedRowCount() {
 		if ( !is_null( $this->mAffectedRows ) ) {
 			// Forced result for simulated queries
 			return $this->mAffectedRows;
diff --git a/includes/libs/rdbms/database/DatabaseSqlite.php b/includes/libs/rdbms/database/DatabaseSqlite.php
index 2b0660707c..01772cf809 100644
--- a/includes/libs/rdbms/database/DatabaseSqlite.php
+++ b/includes/libs/rdbms/database/DatabaseSqlite.php
@@ -56,6 +56,9 @@ class DatabaseSqlite extends Database {
 	/** @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
@@ -82,16 +85,7 @@ class DatabaseSqlite extends Database {
 			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'] );
 			}
 		}
 
@@ -302,6 +296,14 @@ class DatabaseSqlite extends Database {
 		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
 	 *
@@ -494,7 +496,7 @@ class DatabaseSqlite extends Database {
 	/**
 	 * @return int
 	 */
-	function affectedRows() {
+	protected function fetchAffectedRowCount() {
 		return $this->mAffectedRows;
 	}
 
@@ -1033,6 +1035,17 @@ class DatabaseSqlite extends Database {
 		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
 	}
diff --git a/includes/libs/rdbms/database/IDatabase.php b/includes/libs/rdbms/database/IDatabase.php
index 85b3481fe3..0964dd55fe 100644
--- a/includes/libs/rdbms/database/IDatabase.php
+++ b/includes/libs/rdbms/database/IDatabase.php
@@ -1255,6 +1255,11 @@ interface IDatabase {
 	 * 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.
diff --git a/includes/libs/rdbms/database/position/MySQLMasterPos.php b/includes/libs/rdbms/database/position/MySQLMasterPos.php
index 0657cf3dc0..9ca6b111eb 100644
--- a/includes/libs/rdbms/database/position/MySQLMasterPos.php
+++ b/includes/libs/rdbms/database/position/MySQLMasterPos.php
@@ -99,7 +99,7 @@ class MySQLMasterPos implements DBMasterPos {
 	 * @note: this returns false for multi-source replication GTID sets
 	 * @see https://mariadb.com/kb/en/mariadb/gtid
 	 * @see https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html
-	 * @return array Map of (domain => integer position) or false
+	 * @return array Map of (domain => integer position); possibly empty
 	 */
 	protected function getGtidCoordinates() {
 		$gtidInfos = [];
diff --git a/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php b/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php
index 298ec61934..4b79044655 100644
--- a/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php
+++ b/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php
@@ -15,7 +15,7 @@ class MssqlResultWrapper extends ResultWrapper {
 		$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 {
diff --git a/includes/libs/rdbms/lbfactory/LBFactorySingle.php b/includes/libs/rdbms/lbfactory/LBFactorySingle.php
index cd998c3e7b..587ab23c02 100644
--- a/includes/libs/rdbms/lbfactory/LBFactorySingle.php
+++ b/includes/libs/rdbms/lbfactory/LBFactorySingle.php
@@ -102,6 +102,8 @@ class LBFactorySingle extends LBFactory {
 	 * @param array $params
 	 */
 	public function forEachLB( $callback, array $params = [] ) {
-		call_user_func_array( $callback, array_merge( [ $this->lb ], $params ) );
+		if ( isset( $this->lb ) ) { // may not be set during _destruct()
+			call_user_func_array( $callback, array_merge( [ $this->lb ], $params ) );
+		}
 	}
 }
diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
index ee3c86f1ee..04b3ea33f1 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
@@ -49,7 +49,7 @@ class LoadBalancer implements ILoadBalancer {
 	/** @var bool Whether to disregard replica DB lag as a factor in replica DB selection */
 	private $mAllowLagged;
 	/** @var int Seconds to spend waiting on replica DB lag to resolve */
-	private $mWaitTimeout;
+	private $waitTimeout;
 	/** @var array The LoadMonitor configuration */
 	private $loadMonitorConfig;
 	/** @var array[] $aliases Map of (table => (dbname, schema, prefix) map) */
@@ -122,6 +122,8 @@ class LoadBalancer implements ILoadBalancer {
 
 	/** @var int Default 'maxLag' when unspecified */
 	const MAX_LAG_DEFAULT = 10;
+	/** @var int Default 'waitTimeout' when unspecified */
+	const MAX_WAIT_DEFAULT = 10;
 	/** @var int Seconds to cache master server read-only status */
 	const TTL_CACHE_READONLY = 5;
 
@@ -151,7 +153,9 @@ class LoadBalancer implements ILoadBalancer {
 			: DatabaseDomain::newUnspecified();
 		$this->setLocalDomain( $localDomain );
 
-		$this->mWaitTimeout = isset( $params['waitTimeout'] ) ? $params['waitTimeout'] : 10;
+		$this->waitTimeout = isset( $params['waitTimeout'] )
+			? $params['waitTimeout']
+			: self::MAX_WAIT_DEFAULT;
 
 		$this->mReadIndex = -1;
 		$this->mConns = [
@@ -511,7 +515,7 @@ class LoadBalancer implements ILoadBalancer {
 	}
 
 	public function waitForAll( $pos, $timeout = null ) {
-		$timeout = $timeout ?: $this->mWaitTimeout;
+		$timeout = $timeout ?: $this->waitTimeout;
 
 		$oldPos = $this->mWaitForPos;
 		try {
@@ -522,7 +526,7 @@ class LoadBalancer implements ILoadBalancer {
 			for ( $i = 1; $i < $serverCount; $i++ ) {
 				if ( $this->mLoads[$i] > 0 ) {
 					$start = microtime( true );
-					$ok = $this->doWait( $i, true, max( 1, (int)$timeout ) ) && $ok;
+					$ok = $this->doWait( $i, true, $timeout ) && $ok;
 					$timeout -= ( microtime( true ) - $start );
 					if ( $timeout <= 0 ) {
 						break; // timeout reached
@@ -571,11 +575,11 @@ class LoadBalancer implements ILoadBalancer {
 	 * Wait for a given replica DB to catch up to the master pos stored in $this
 	 * @param int $index Server index
 	 * @param bool $open Check the server even if a new connection has to be made
-	 * @param int $timeout Max seconds to wait; default is mWaitTimeout
+	 * @param int $timeout Max seconds to wait; default is "waitTimeout" given to __construct()
 	 * @return bool
 	 */
 	protected function doWait( $index, $open = false, $timeout = null ) {
-		$close = false; // close the connection afterwards
+		$timeout = max( 1, $timeout ?: $this->waitTimeout );
 
 		// Check if we already know that the DB has reached this point
 		$server = $this->getServerName( $index );
@@ -586,25 +590,32 @@ class LoadBalancer implements ILoadBalancer {
 			$knownReachedPos instanceof DBMasterPos &&
 			$knownReachedPos->hasReached( $this->mWaitForPos )
 		) {
-			$this->replLogger->debug( __METHOD__ .
+			$this->replLogger->debug(
+				__METHOD__ .
 				': replica DB {dbserver} known to be caught up (pos >= $knownReachedPos).',
-				[ 'dbserver' => $server ] );
+				[ 'dbserver' => $server ]
+			);
 			return true;
 		}
 
 		// Find a connection to wait on, creating one if needed and allowed
+		$close = false; // close the connection afterwards
 		$conn = $this->getAnyOpenConnection( $index );
 		if ( !$conn ) {
 			if ( !$open ) {
-				$this->replLogger->debug( __METHOD__ . ': no connection open for {dbserver}',
-					[ 'dbserver' => $server ] );
+				$this->replLogger->debug(
+					__METHOD__ . ': no connection open for {dbserver}',
+					[ 'dbserver' => $server ]
+				);
 
 				return false;
 			} else {
 				$conn = $this->openConnection( $index, self::DOMAIN_ANY );
 				if ( !$conn ) {
-					$this->replLogger->warning( __METHOD__ . ': failed to connect to {dbserver}',
-						[ 'dbserver' => $server ] );
+					$this->replLogger->warning(
+						__METHOD__ . ': failed to connect to {dbserver}',
+						[ 'dbserver' => $server ]
+					);
 
 					return false;
 				}
@@ -614,16 +625,32 @@ class LoadBalancer implements ILoadBalancer {
 			}
 		}
 
-		$this->replLogger->info( __METHOD__ . ': Waiting for replica DB {dbserver} to catch up...',
-			[ 'dbserver' => $server ] );
-		$timeout = $timeout ?: $this->mWaitTimeout;
+		$this->replLogger->info(
+			__METHOD__ .
+			': Waiting for replica DB {dbserver} to catch up...',
+			[ 'dbserver' => $server ]
+		);
+
 		$result = $conn->masterPosWait( $this->mWaitForPos, $timeout );
 
-		if ( $result == -1 || is_null( $result ) ) {
-			// Timed out waiting for replica DB, use master instead
+		if ( $result === null ) {
+			$this->replLogger->warning(
+				__METHOD__ . ': Errored out waiting on {host} pos {pos}',
+				[
+					'host' => $server,
+					'pos' => $this->mWaitForPos,
+					'trace' => ( new RuntimeException() )->getTraceAsString()
+				]
+			);
+			$ok = false;
+		} elseif ( $result == -1 ) {
 			$this->replLogger->warning(
 				__METHOD__ . ': Timed out waiting on {host} pos {pos}',
-				[ 'host' => $server, 'pos' => $this->mWaitForPos ]
+				[
+					'host' => $server,
+					'pos' => $this->mWaitForPos,
+					'trace' => ( new RuntimeException() )->getTraceAsString()
+				]
 			);
 			$ok = false;
 		} else {
@@ -825,7 +852,7 @@ class LoadBalancer implements ILoadBalancer {
 					// Use the local domain table prefix if the local domain is specified
 					$server['tablePrefix'] = $this->localDomain->getTablePrefix();
 				}
-				$conn = $this->reallyOpenConnection( $server, $this->localDomain->getDatabase() );
+				$conn = $this->reallyOpenConnection( $server, $this->localDomain );
 				$host = $this->getServerName( $i );
 				if ( $conn->isOpen() ) {
 					$this->connLogger->debug( "Connected to database $i at '$host'." );
@@ -926,7 +953,7 @@ class LoadBalancer implements ILoadBalancer {
 			$server['foreignPoolRefCount'] = 0;
 			$server['foreign'] = true;
 			$server['autoCommitOnly'] = $autoCommit;
-			$conn = $this->reallyOpenConnection( $server, $dbName );
+			$conn = $this->reallyOpenConnection( $server, $domainInstance );
 			if ( !$conn->isOpen() ) {
 				$this->connLogger->warning( __METHOD__ . ": connection error for $i/$domain" );
 				$this->errorConnection = $conn;
@@ -969,18 +996,29 @@ class LoadBalancer implements ILoadBalancer {
 	 * Returns a Database object whether or not the connection was successful.
 	 *
 	 * @param array $server
-	 * @param string|null $dbNameOverride Use "" to not select any database
+	 * @param DatabaseDomain $domainOverride Use an unspecified domain to not select any database
 	 * @return Database
 	 * @throws DBAccessError
 	 * @throws InvalidArgumentException
 	 */
-	protected function reallyOpenConnection( array $server, $dbNameOverride ) {
+	protected function reallyOpenConnection( array $server, DatabaseDomain $domainOverride ) {
 		if ( $this->disabled ) {
 			throw new DBAccessError();
 		}
 
-		if ( $dbNameOverride !== null ) {
-			$server['dbname'] = $dbNameOverride;
+		// Handle $domainOverride being a specified or an unspecified domain
+		if ( $domainOverride->getDatabase() === null ) {
+			// Normally, an RDBMS requires a DB name specified on connection and the $server
+			// configuration array is assumed to already specify an appropriate DB name.
+			if ( $server['type'] === 'mysql' ) {
+				// For MySQL, DATABASE and SCHEMA are synonyms, connections need not specify a DB,
+				// and the DB name in $server might not exist due to legacy reasons (the default
+				// domain used to ignore the local LB domain, even when mismatched).
+				$server['dbname'] = null;
+			}
+		} else {
+			$server['dbname'] = $domainOverride->getDatabase();
+			$server['schema'] = $domainOverride->getSchema();
 		}
 
 		// Let the handle know what the cluster master is (e.g. "db1052")
@@ -1334,7 +1372,7 @@ class LoadBalancer implements ILoadBalancer {
 		$this->trxRoundId = false;
 		$this->forEachOpenMasterConnection(
 			function ( IDatabase $conn ) use ( $fname, $restore ) {
-				if ( $conn->writesOrCallbacksPending() ) {
+				if ( $conn->writesOrCallbacksPending() || $conn->explicitTrxActive() ) {
 					$conn->rollback( $fname, $conn::FLUSHING_ALL_PEERS );
 				}
 				if ( $restore ) {
@@ -1410,7 +1448,7 @@ class LoadBalancer implements ILoadBalancer {
 	}
 
 	public function hasOrMadeRecentMasterChanges( $age = null ) {
-		$age = ( $age === null ) ? $this->mWaitTimeout : $age;
+		$age = ( $age === null ) ? $this->waitTimeout : $age;
 
 		return ( $this->hasMasterChanges()
 			|| $this->lastMasterChangeTimestamp() > microtime( true ) - $age );
@@ -1620,10 +1658,12 @@ class LoadBalancer implements ILoadBalancer {
 	/**
 	 * @param IDatabase $conn
 	 * @param DBMasterPos|bool $pos
-	 * @param int $timeout
+	 * @param int|null $timeout
 	 * @return bool
 	 */
-	public function safeWaitForMasterPos( IDatabase $conn, $pos = false, $timeout = 10 ) {
+	public function safeWaitForMasterPos( IDatabase $conn, $pos = false, $timeout = null ) {
+		$timeout = max( 1, $timeout ?: $this->waitTimeout );
+
 		if ( $this->getServerCount() <= 1 || !$conn->getLBInfo( 'replica' ) ) {
 			return true; // server is not a replica DB
 		}
@@ -1644,8 +1684,11 @@ class LoadBalancer implements ILoadBalancer {
 			$result = $conn->masterPosWait( $pos, $timeout );
 			if ( $result == -1 || is_null( $result ) ) {
 				$msg = __METHOD__ . ': Timed out waiting on {host} pos {pos}';
-				$this->replLogger->warning( $msg,
-					[ 'host' => $conn->getServer(), 'pos' => $pos ] );
+				$this->replLogger->warning( $msg, [
+					'host' => $conn->getServer(),
+					'pos' => $pos,
+					'trace' => ( new RuntimeException() )->getTraceAsString()
+				] );
 				$ok = false;
 			} else {
 				$this->replLogger->info( __METHOD__ . ': Done' );
@@ -1653,8 +1696,13 @@ class LoadBalancer implements ILoadBalancer {
 			}
 		} else {
 			$ok = false; // something is misconfigured
-			$this->replLogger->error( 'Could not get master pos for {host}',
-				[ 'host' => $conn->getServer() ] );
+			$this->replLogger->error(
+				__METHOD__ . ': could not get master pos for {host}',
+				[
+					'host' => $conn->getServer(),
+					'trace' => ( new RuntimeException() )->getTraceAsString()
+				]
+			);
 		}
 
 		return $ok;
@@ -1698,7 +1746,7 @@ class LoadBalancer implements ILoadBalancer {
 		$oldDomain = $this->localDomain->getId();
 		$this->setLocalDomain( new DatabaseDomain(
 			$this->localDomain->getDatabase(),
-			null,
+			$this->localDomain->getSchema(),
 			$prefix
 		) );
 
diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php b/includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php
index c73756330a..be80cc5eab 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php
@@ -72,9 +72,9 @@ class LoadBalancerSingle extends LoadBalancer {
 		return new static( [ 'connection' => $db ] + $params );
 	}
 
-	protected function reallyOpenConnection( array $server, $dbNameOverride ) {
+	protected function reallyOpenConnection( array $server, DatabaseDomain $domainOverride ) {
 		return $this->db;
 	}
 }
 
-class_alias( 'Wikimedia\Rdbms\LoadBalancerSingle', 'LoadBalancerSingle' );
+class_alias( LoadBalancerSingle::class, 'LoadBalancerSingle' );
diff --git a/includes/libs/xmp/XMP.php b/includes/libs/xmp/XMP.php
index 88e816a72a..1955915890 100644
--- a/includes/libs/xmp/XMP.php
+++ b/includes/libs/xmp/XMP.php
@@ -343,9 +343,9 @@ class XMPReader implements LoggerAwareInterface {
 			}
 			if ( $this->charset !== 'UTF-8' ) {
 				// don't convert if already utf-8
-				MediaWiki\suppressWarnings();
+				Wikimedia\suppressWarnings();
 				$content = iconv( $this->charset, 'UTF-8//IGNORE', $content );
-				MediaWiki\restoreWarnings();
+				Wikimedia\restoreWarnings();
 			}
 
 			// Ensure the XMP block does not have an xml doctype declaration, which
@@ -571,7 +571,7 @@ class XMPReader implements LoggerAwareInterface {
 
 		// Even with LIBXML_NOWARNING set, XMLReader::read gives a warning
 		// when parsing truncated XML, which causes unit tests to fail.
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		while ( $reader->read() ) {
 			if ( $reader->nodeType === XMLReader::ELEMENT ) {
 				// Reached the first element without hitting a doctype declaration
@@ -585,7 +585,7 @@ class XMPReader implements LoggerAwareInterface {
 				break;
 			}
 		}
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !is_null( $result ) ) {
 			return $result;
diff --git a/includes/logging/LogEntry.php b/includes/logging/LogEntry.php
index bf35d78d25..35502c78d2 100644
--- a/includes/logging/LogEntry.php
+++ b/includes/logging/LogEntry.php
@@ -170,7 +170,7 @@ class DatabaseLogEntry extends LogEntryBase {
 	 * @return array
 	 */
 	public static function getSelectQueryData() {
-		$commentQuery = CommentStore::newKey( 'log_comment' )->getJoin();
+		$commentQuery = CommentStore::getStore()->getJoin( 'log_comment' );
 
 		$tables = [ 'logging', 'user' ] + $commentQuery['tables'];
 		$fields = [
@@ -265,9 +265,9 @@ class DatabaseLogEntry extends LogEntryBase {
 	public function getParameters() {
 		if ( !isset( $this->params ) ) {
 			$blob = $this->getRawParameters();
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$params = LogEntryBase::extractParams( $blob );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			if ( $params !== false ) {
 				$this->params = $params;
 				$this->legacy = false;
@@ -324,7 +324,7 @@ class DatabaseLogEntry extends LogEntryBase {
 	}
 
 	public function getComment() {
-		return CommentStore::newKey( 'log_comment' )->getComment( $this->row )->text;
+		return CommentStore::getStore()->getComment( 'log_comment', $this->row )->text;
 	}
 
 	public function getDeleted() {
@@ -382,9 +382,9 @@ class RCDatabaseLogEntry extends DatabaseLogEntry {
 	}
 
 	public function getComment() {
-		return CommentStore::newKey( 'rc_comment' )
+		return CommentStore::getStore()
 			// Legacy because the row may have used RecentChange::selectFields()
-			->getCommentLegacy( wfGetDB( DB_REPLICA ), $this->row )->text;
+			->getCommentLegacy( wfGetDB( DB_REPLICA ), 'rc_comment', $this->row )->text;
 	}
 
 	public function getDeleted() {
@@ -626,7 +626,7 @@ class ManualLogEntry extends LogEntryBase {
 		if ( isset( $this->deleted ) ) {
 			$data['log_deleted'] = $this->deleted;
 		}
-		$data += CommentStore::newKey( 'log_comment' )->insert( $dbw, $comment );
+		$data += CommentStore::getStore()->insert( $dbw, 'log_comment', $comment );
 
 		$dbw->insert( 'logging', $data, __METHOD__ );
 		$this->id = $dbw->insertId();
diff --git a/includes/logging/LogPage.php b/includes/logging/LogPage.php
index 77d9aa21ba..c84352eb79 100644
--- a/includes/logging/LogPage.php
+++ b/includes/logging/LogPage.php
@@ -104,7 +104,7 @@ class LogPage {
 			'log_page' => $this->target->getArticleID(),
 			'log_params' => $this->params
 		];
-		$data += CommentStore::newKey( 'log_comment' )->insert( $dbw, $this->comment );
+		$data += CommentStore::getStore()->insert( $dbw, 'log_comment', $this->comment );
 		$dbw->insert( 'logging', $data, __METHOD__ );
 		$newId = $dbw->insertId();
 
diff --git a/includes/mail/EmailNotification.php b/includes/mail/EmailNotification.php
index 2931d9dd3c..67b7142a07 100644
--- a/includes/mail/EmailNotification.php
+++ b/includes/mail/EmailNotification.php
@@ -90,7 +90,7 @@ class EmailNotification {
 		LinkTarget $linkTarget,
 		$timestamp
 	) {
-		// wfDeprecated( __METHOD__, '1.27' );
+		wfDeprecated( __METHOD__, '1.27' );
 		$config = RequestContext::getMain()->getConfig();
 		if ( !$config->get( 'EnotifWatchlist' ) && !$config->get( 'ShowUpdatedMarker' ) ) {
 			return [];
diff --git a/includes/mail/UserMailer.php b/includes/mail/UserMailer.php
index cb07fd5c58..fb0f2f99f0 100644
--- a/includes/mail/UserMailer.php
+++ b/includes/mail/UserMailer.php
@@ -360,13 +360,13 @@ class UserMailer {
 				require_once 'Mail.php';
 			}
 
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 
 			// Create the mail object using the Mail::factory method
 			$mail_object =& Mail::factory( 'smtp', $wgSMTP );
 			if ( PEAR::isError( $mail_object ) ) {
 				wfDebug( "PEAR::Mail factory failed: " . $mail_object->getMessage() . "\n" );
-				MediaWiki\restoreWarnings();
+				Wikimedia\restoreWarnings();
 				return Status::newFatal( 'pear-mail-error', $mail_object->getMessage() );
 			}
 
@@ -386,11 +386,11 @@ class UserMailer {
 				$status = self::sendWithPear( $mail_object, $chunk, $headers, $body );
 				// FIXME : some chunks might be sent while others are not!
 				if ( !$status->isOK() ) {
-					MediaWiki\restoreWarnings();
+					Wikimedia\restoreWarnings();
 					return $status;
 				}
 			}
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			return Status::newGood();
 		} else {
 			// PHP mail()
diff --git a/includes/media/Bitmap.php b/includes/media/Bitmap.php
index 617a910295..712906e0e7 100644
--- a/includes/media/Bitmap.php
+++ b/includes/media/Bitmap.php
@@ -203,9 +203,9 @@ class BitmapHandler extends TransformationalImageHandler {
 				'-layers', 'merge',
 				'-background', 'white',
 			];
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$xcfMeta = unserialize( $image->getMetadata() );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			if ( $xcfMeta
 				&& isset( $xcfMeta['colorType'] )
 				&& $xcfMeta['colorType'] === 'greyscale-alpha'
diff --git a/includes/media/DjVu.php b/includes/media/DjVu.php
index eb7b6ba08e..2541e35bc5 100644
--- a/includes/media/DjVu.php
+++ b/includes/media/DjVu.php
@@ -265,9 +265,9 @@ class DjVuHandler extends ImageHandler {
 			return $metadata;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$unser = unserialize( $metadata );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( is_array( $unser ) ) {
 			if ( isset( $unser['error'] ) ) {
 				return false;
@@ -321,7 +321,7 @@ class DjVuHandler extends ImageHandler {
 	 * @return array
 	 */
 	protected function extractTreesFromMetadata( $metadata ) {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		try {
 			// Set to false rather than null to avoid further attempts
 			$metaTree = false;
@@ -344,7 +344,7 @@ class DjVuHandler extends ImageHandler {
 		} catch ( Exception $e ) {
 			wfDebug( "Bogus multipage XML metadata\n" );
 		}
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		return [ 'MetaTree' => $metaTree, 'TextTree' => $textTree ];
 	}
diff --git a/includes/media/DjVuImage.php b/includes/media/DjVuImage.php
index d25111c445..adcac2523a 100644
--- a/includes/media/DjVuImage.php
+++ b/includes/media/DjVuImage.php
@@ -117,9 +117,9 @@ class DjVuImage {
 	}
 
 	function getInfo() {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$file = fopen( $this->mFilename, 'rb' );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( $file === false ) {
 			wfDebug( __METHOD__ . ": missing or failed file read\n" );
 
diff --git a/includes/media/Exif.php b/includes/media/Exif.php
index cd457f0bec..a38e79b725 100644
--- a/includes/media/Exif.php
+++ b/includes/media/Exif.php
@@ -292,9 +292,9 @@ class Exif {
 
 		$this->debugFile( $this->basename, __FUNCTION__, true );
 		if ( function_exists( 'exif_read_data' ) ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$data = exif_read_data( $this->file, 0, true );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 		} else {
 			throw new MWException( "Internal error: exif_read_data not present. " .
 				"\$wgShowEXIF may be incorrectly set or not checked by an extension." );
@@ -467,17 +467,17 @@ class Exif {
 					break;
 			}
 			if ( $charset ) {
-				MediaWiki\suppressWarnings();
+				Wikimedia\suppressWarnings();
 				$val = iconv( $charset, 'UTF-8//IGNORE', $val );
-				MediaWiki\restoreWarnings();
+				Wikimedia\restoreWarnings();
 			} else {
 				// if valid utf-8, assume that, otherwise assume windows-1252
 				$valCopy = $val;
 				UtfNormal\Validator::quickIsNFCVerify( $valCopy ); // validates $valCopy.
 				if ( $valCopy !== $val ) {
-					MediaWiki\suppressWarnings();
+					Wikimedia\suppressWarnings();
 					$val = iconv( 'Windows-1252', 'UTF-8//IGNORE', $val );
-					MediaWiki\restoreWarnings();
+					Wikimedia\restoreWarnings();
 				}
 			}
 
diff --git a/includes/media/ExifBitmap.php b/includes/media/ExifBitmap.php
index 0e10abb9f9..426721095c 100644
--- a/includes/media/ExifBitmap.php
+++ b/includes/media/ExifBitmap.php
@@ -99,9 +99,9 @@ class ExifBitmapHandler extends BitmapHandler {
 		if ( $metadata === self::BROKEN_FILE ) {
 			return self::METADATA_GOOD;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$exif = unserialize( $metadata );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( !isset( $exif['MEDIAWIKI_EXIF_VERSION'] )
 			|| $exif['MEDIAWIKI_EXIF_VERSION'] != Exif::version()
 		) {
@@ -223,9 +223,9 @@ class ExifBitmapHandler extends BitmapHandler {
 		if ( !$data ) {
 			return 0;
 		}
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$data = unserialize( $data );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( isset( $data['Orientation'] ) ) {
 			# See http://sylvana.net/jpegcrop/exif_orientation.html
 			switch ( $data['Orientation'] ) {
diff --git a/includes/media/GIF.php b/includes/media/GIF.php
index 5f23855c81..d65f872634 100644
--- a/includes/media/GIF.php
+++ b/includes/media/GIF.php
@@ -131,9 +131,9 @@ class GIFHandler extends BitmapHandler {
 			return self::METADATA_GOOD;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$data = unserialize( $metadata );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$data || !is_array( $data ) ) {
 			wfDebug( __METHOD__ . " invalid GIF metadata\n" );
@@ -161,9 +161,9 @@ class GIFHandler extends BitmapHandler {
 
 		$original = parent::getLongDesc( $image );
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$metadata = unserialize( $image->getMetadata() );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$metadata || $metadata['frameCount'] <= 1 ) {
 			return $original;
@@ -198,9 +198,9 @@ class GIFHandler extends BitmapHandler {
 	 */
 	public function getLength( $file ) {
 		$serMeta = $file->getMetadata();
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$metadata = unserialize( $serMeta );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$metadata || !isset( $metadata['duration'] ) || !$metadata['duration'] ) {
 			return 0.0;
diff --git a/includes/media/GIFMetadataExtractor.php b/includes/media/GIFMetadataExtractor.php
index ac5fc81c9a..a26539a87a 100644
--- a/includes/media/GIFMetadataExtractor.php
+++ b/includes/media/GIFMetadataExtractor.php
@@ -161,9 +161,9 @@ class GIFMetadataExtractor {
 					UtfNormal\Validator::quickIsNFCVerify( $dataCopy );
 
 					if ( $dataCopy !== $data ) {
-						MediaWiki\suppressWarnings();
+						Wikimedia\suppressWarnings();
 						$data = iconv( 'windows-1252', 'UTF-8', $data );
-						MediaWiki\restoreWarnings();
+						Wikimedia\restoreWarnings();
 					}
 
 					$commentCount = count( $comment );
diff --git a/includes/media/IPTC.php b/includes/media/IPTC.php
index 894043a4e5..441c515f89 100644
--- a/includes/media/IPTC.php
+++ b/includes/media/IPTC.php
@@ -75,7 +75,7 @@ class IPTC {
 					 * Title, person. Not sure if this is best
 					 * approach since we no longer have the two fields
 					 * separate. each byline title entry corresponds to a
-					 * specific byline.                          */
+					 * specific byline. */
 
 					$bylines = self::convIPTC( $val, $c );
 					if ( isset( $parsed['2#085'] ) ) {
@@ -445,9 +445,9 @@ class IPTC {
 	 */
 	private static function convIPTCHelper( $data, $charset ) {
 		if ( $charset ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$data = iconv( $charset, "UTF-8//IGNORE", $data );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			if ( $data === false ) {
 				$data = "";
 				wfDebugLog( 'iptc', __METHOD__ . " Error converting iptc data charset $charset to utf-8" );
diff --git a/includes/media/ImageHandler.php b/includes/media/ImageHandler.php
index 1eefddbd4f..a0a160321c 100644
--- a/includes/media/ImageHandler.php
+++ b/includes/media/ImageHandler.php
@@ -201,9 +201,9 @@ abstract class ImageHandler extends MediaHandler {
 	}
 
 	function getImageSize( $image, $path ) {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$gis = getimagesize( $path );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		return $gis;
 	}
diff --git a/includes/media/JpegMetadataExtractor.php b/includes/media/JpegMetadataExtractor.php
index 211845cc8f..229a891db8 100644
--- a/includes/media/JpegMetadataExtractor.php
+++ b/includes/media/JpegMetadataExtractor.php
@@ -102,9 +102,9 @@ class JpegMetadataExtractor {
 				// turns $com to valid utf-8.
 				// thus if no change, its utf-8, otherwise its something else.
 				if ( $com !== $oldCom ) {
-					MediaWiki\suppressWarnings();
+					Wikimedia\suppressWarnings();
 					$com = $oldCom = iconv( 'windows-1252', 'UTF-8//IGNORE', $oldCom );
-					MediaWiki\restoreWarnings();
+					Wikimedia\restoreWarnings();
 				}
 				// Try it again, if its still not a valid string, then probably
 				// binary junk or some really weird encoding, so don't extract.
diff --git a/includes/media/MediaHandler.php b/includes/media/MediaHandler.php
index 5dca24bcba..c76930cfc7 100644
--- a/includes/media/MediaHandler.php
+++ b/includes/media/MediaHandler.php
@@ -158,9 +158,9 @@ abstract class MediaHandler {
 	function convertMetadataVersion( $metadata, $version = 1 ) {
 		if ( !is_array( $metadata ) ) {
 			// unserialize to keep return parameter consistent.
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$ret = unserialize( $metadata );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 
 			return $ret;
 		}
diff --git a/includes/media/MediaTransformOutput.php b/includes/media/MediaTransformOutput.php
index 5366c4fa44..3506684a50 100644
--- a/includes/media/MediaTransformOutput.php
+++ b/includes/media/MediaTransformOutput.php
@@ -47,13 +47,13 @@ abstract class MediaTransformOutput {
 	/** @var bool|string */
 	protected $page;
 
-	/** @var bool|string Filesystem path to the thumb  */
+	/** @var bool|string Filesystem path to the thumb */
 	protected $path;
 
 	/** @var bool|string Language code, false if not set */
 	protected $lang;
 
-	/** @var bool|string Permanent storage path  */
+	/** @var bool|string Permanent storage path */
 	protected $storagePath = false;
 
 	/**
diff --git a/includes/media/PNG.php b/includes/media/PNG.php
index b6288bc3f4..6748b26b09 100644
--- a/includes/media/PNG.php
+++ b/includes/media/PNG.php
@@ -117,9 +117,9 @@ class PNGHandler extends BitmapHandler {
 			return self::METADATA_GOOD;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$data = unserialize( $metadata );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$data || !is_array( $data ) ) {
 			wfDebug( __METHOD__ . " invalid png metadata\n" );
@@ -146,9 +146,9 @@ class PNGHandler extends BitmapHandler {
 		global $wgLang;
 		$original = parent::getLongDesc( $image );
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$metadata = unserialize( $image->getMetadata() );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$metadata || $metadata['frameCount'] <= 0 ) {
 			return $original;
@@ -184,9 +184,9 @@ class PNGHandler extends BitmapHandler {
 	 */
 	public function getLength( $file ) {
 		$serMeta = $file->getMetadata();
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$metadata = unserialize( $serMeta );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$metadata || !isset( $metadata['duration'] ) || !$metadata['duration'] ) {
 			return 0.0;
diff --git a/includes/media/PNGMetadataExtractor.php b/includes/media/PNGMetadataExtractor.php
index c12ca0bf10..78ed0bcdc5 100644
--- a/includes/media/PNGMetadataExtractor.php
+++ b/includes/media/PNGMetadataExtractor.php
@@ -202,9 +202,9 @@ class PNGMetadataExtractor {
 					// if compressed
 					if ( $items[2] == "\x01" ) {
 						if ( function_exists( 'gzuncompress' ) && $items[4] === "\x00" ) {
-							MediaWiki\suppressWarnings();
+							Wikimedia\suppressWarnings();
 							$items[5] = gzuncompress( $items[5] );
-							MediaWiki\restoreWarnings();
+							Wikimedia\restoreWarnings();
 
 							if ( $items[5] === false ) {
 								// decompression failed
@@ -246,9 +246,9 @@ class PNGMetadataExtractor {
 					fseek( $fh, self::$crcSize, SEEK_CUR );
 					continue;
 				}
-				MediaWiki\suppressWarnings();
+				Wikimedia\suppressWarnings();
 				$content = iconv( 'ISO-8859-1', 'UTF-8', $content );
-				MediaWiki\restoreWarnings();
+				Wikimedia\restoreWarnings();
 
 				if ( $content === false ) {
 					throw new Exception( __METHOD__ . ": Read error (error with iconv)" );
@@ -286,9 +286,9 @@ class PNGMetadataExtractor {
 						continue;
 					}
 
-					MediaWiki\suppressWarnings();
+					Wikimedia\suppressWarnings();
 					$content = gzuncompress( $content );
-					MediaWiki\restoreWarnings();
+					Wikimedia\restoreWarnings();
 
 					if ( $content === false ) {
 						// decompression failed
@@ -297,9 +297,9 @@ class PNGMetadataExtractor {
 						continue;
 					}
 
-					MediaWiki\suppressWarnings();
+					Wikimedia\suppressWarnings();
 					$content = iconv( 'ISO-8859-1', 'UTF-8', $content );
-					MediaWiki\restoreWarnings();
+					Wikimedia\restoreWarnings();
 
 					if ( $content === false ) {
 						throw new Exception( __METHOD__ . ": Read error (error with iconv)" );
diff --git a/includes/media/SVG.php b/includes/media/SVG.php
index 10be97a5cd..9085421af8 100644
--- a/includes/media/SVG.php
+++ b/includes/media/SVG.php
@@ -249,10 +249,10 @@ class SvgHandler extends ImageHandler {
 		$ok = symlink( $srcPath, $lnPath );
 		/** @noinspection PhpUnusedLocalVariableInspection */
 		$cleaner = new ScopedCallback( function () use ( $tmpDir, $lnPath ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			unlink( $lnPath );
 			rmdir( $tmpDir );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 		} );
 		if ( !$ok ) {
 			wfDebugLog( 'thumbnail',
@@ -418,9 +418,9 @@ class SvgHandler extends ImageHandler {
 	}
 
 	function unpackMetadata( $metadata ) {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$unser = unserialize( $metadata );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( isset( $unser['version'] ) && $unser['version'] == self::SVG_METADATA_VERSION ) {
 			return $unser;
 		} else {
diff --git a/includes/media/SVGMetadataExtractor.php b/includes/media/SVGMetadataExtractor.php
index 9b22cbee1a..fc93b2331f 100644
--- a/includes/media/SVGMetadataExtractor.php
+++ b/includes/media/SVGMetadataExtractor.php
@@ -106,17 +106,17 @@ class SVGReader {
 		// Because we cut off the end of the svg making an invalid one. Complicated
 		// try catch thing to make sure warnings get restored. Seems like there should
 		// be a better way.
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		try {
 			$this->read();
 		} catch ( Exception $e ) {
 			// Note, if this happens, the width/height will be taken to be 0x0.
 			// Should we consider it the default 512x512 instead?
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 			libxml_disable_entity_loader( $oldDisable );
 			throw $e;
 		}
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		libxml_disable_entity_loader( $oldDisable );
 	}
 
diff --git a/includes/media/WebP.php b/includes/media/WebP.php
index e0af6def45..295a9785b5 100644
--- a/includes/media/WebP.php
+++ b/includes/media/WebP.php
@@ -63,9 +63,9 @@ class WebPHandler extends BitmapHandler {
 				return self::METADATA_GOOD;
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$data = unserialize( $metadata );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( !$data || !is_array( $data ) ) {
 				wfDebug( __METHOD__ . " invalid WebP metadata\n" );
@@ -235,9 +235,9 @@ class WebPHandler extends BitmapHandler {
 			$metadata = $file->getMetadata();
 		}
 
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$metadata = unserialize( $metadata );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 
 		if ( $metadata == false ) {
 			return false;
diff --git a/includes/media/XCF.php b/includes/media/XCF.php
index 1b6c4c87ed..491fef2182 100644
--- a/includes/media/XCF.php
+++ b/includes/media/XCF.php
@@ -217,9 +217,9 @@ class XCFHandler extends BitmapHandler {
 	 * @return bool
 	 */
 	public function canRender( $file ) {
-		MediaWiki\suppressWarnings();
+		Wikimedia\suppressWarnings();
 		$xcfMeta = unserialize( $file->getMetadata() );
-		MediaWiki\restoreWarnings();
+		Wikimedia\restoreWarnings();
 		if ( isset( $xcfMeta['colorType'] ) && $xcfMeta['colorType'] === 'index-coloured' ) {
 			return false;
 		}
diff --git a/includes/objectcache/SqlBagOStuff.php b/includes/objectcache/SqlBagOStuff.php
index 6691f73d2e..6d35658151 100644
--- a/includes/objectcache/SqlBagOStuff.php
+++ b/includes/objectcache/SqlBagOStuff.php
@@ -681,9 +681,9 @@ class SqlBagOStuff extends BagOStuff {
 	 */
 	protected function unserialize( $serial ) {
 		if ( function_exists( 'gzinflate' ) ) {
-			MediaWiki\suppressWarnings();
+			Wikimedia\suppressWarnings();
 			$decomp = gzinflate( $serial );
-			MediaWiki\restoreWarnings();
+			Wikimedia\restoreWarnings();
 
 			if ( false !== $decomp ) {
 				$serial = $decomp;
diff --git a/includes/page/Article.php b/includes/page/Article.php
index dadf311da0..343c4c8d6f 100644
--- a/includes/page/Article.php
+++ b/includes/page/Article.php
@@ -2553,7 +2553,7 @@ class Article implements Page {
 	 * @see WikiPage::updateRedirectOn
 	 */
 	public function updateRedirectOn( $dbw, $redirectTitle, $lastRevIsRedirect = null ) {
-		return $this->mPage->updateRedirectOn( $dbw, $redirectTitle, $lastRevIsRedirect = null );
+		return $this->mPage->updateRedirectOn( $dbw, $redirectTitle, $lastRevIsRedirect );
 	}
 
 	/**
diff --git a/includes/page/CategoryPage.php b/includes/page/CategoryPage.php
index 2d7e8f24fd..491726bedd 100644
--- a/includes/page/CategoryPage.php
+++ b/includes/page/CategoryPage.php
@@ -27,7 +27,7 @@
  */
 class CategoryPage extends Article {
 	# Subclasses can change this to override the viewer class.
-	protected $mCategoryViewerClass = 'CategoryViewer';
+	protected $mCategoryViewerClass = CategoryViewer::class;
 
 	/**
 	 * @var WikiCategoryPage
diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php
index d403ab5810..c7bb8ecc62 100644
--- a/includes/page/WikiPage.php
+++ b/includes/page/WikiPage.php
@@ -2128,15 +2128,6 @@ class WikiPage implements Page, IDBAccessObject {
 		$edit->newContent = $content;
 		$edit->oldContent = $this->getContent( Revision::RAW );
 
-		// NOTE: B/C for hooks! don't use these fields!
-		$edit->newText = $edit->newContent
-			? ContentHandler::getContentText( $edit->newContent )
-			: '';
-		$edit->oldText = $edit->oldContent
-			? ContentHandler::getContentText( $edit->oldContent )
-			: '';
-		$edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialFormat ) : '';
-
 		if ( $edit->output ) {
 			$edit->output->setCacheTime( wfTimestampNow() );
 		}
@@ -2280,7 +2271,9 @@ class WikiPage implements Page, IDBAccessObject {
 		$edits = $options['changed'] ? 1 : 0;
 		$total = $options['created'] ? 1 : 0;
 
-		DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, $edits, $good, $total ) );
+		DeferredUpdates::addUpdate( SiteStatsUpdate::factory(
+			[ 'edits' => $edits, 'articles' => $good, 'total' => $total ]
+		) );
 		DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $content ) );
 
 		// If this is another user's talk page, update newtalk.
@@ -2526,7 +2519,7 @@ class WikiPage implements Page, IDBAccessObject {
 			$cascade = false;
 
 			if ( $limit['create'] != '' ) {
-				$commentFields = CommentStore::newKey( 'pt_reason' )->insert( $dbw, $reason );
+				$commentFields = CommentStore::getStore()->insert( $dbw, 'pt_reason', $reason );
 				$dbw->replace( 'protected_titles',
 					[ [ 'pt_namespace', 'pt_title' ] ],
 					[
@@ -2853,8 +2846,7 @@ class WikiPage implements Page, IDBAccessObject {
 			$content = null;
 		}
 
-		$revCommentStore = new CommentStore( 'rev_comment' );
-		$arCommentStore = new CommentStore( 'ar_comment' );
+		$commentStore = CommentStore::getStore();
 
 		$revQuery = Revision::getQueryInfo();
 		$bitfield = false;
@@ -2890,7 +2882,7 @@ class WikiPage implements Page, IDBAccessObject {
 		$ipRevIds = [];
 
 		foreach ( $res as $row ) {
-			$comment = $revCommentStore->getComment( $row );
+			$comment = $commentStore->getComment( 'rev_comment', $row );
 			$rowInsert = [
 				'ar_namespace'  => $namespace,
 				'ar_title'      => $dbKey,
@@ -2907,7 +2899,7 @@ class WikiPage implements Page, IDBAccessObject {
 				'ar_page_id'    => $id,
 				'ar_deleted'    => $suppress ? $bitfield : $row->rev_deleted,
 				'ar_sha1'       => $row->rev_sha1,
-			] + $arCommentStore->insert( $dbw, $comment );
+			] + $commentStore->insert( $dbw, 'ar_comment', $comment );
 			if ( $wgContentHandlerUseDB ) {
 				$rowInsert['ar_content_model'] = $row->rev_content_model;
 				$rowInsert['ar_content_format'] = $row->rev_content_format;
@@ -3028,7 +3020,9 @@ class WikiPage implements Page, IDBAccessObject {
 		}
 
 		// Update site status
-		DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, - (int)$countable, -1 ) );
+		DeferredUpdates::addUpdate( SiteStatsUpdate::factory(
+			[ 'edits' => 1, 'articles' => -$countable, 'pages' => -1 ]
+		) );
 
 		// Delete pagelinks, update secondary indexes, etc
 		$updates = $this->getDeletionUpdates( $content );
diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php
index ad56afc413..c6a10aefbc 100644
--- a/includes/parser/CoreParserFunctions.php
+++ b/includes/parser/CoreParserFunctions.php
@@ -1005,10 +1005,10 @@ class CoreParserFunctions {
 		if ( $argA == 'nowiki' ) {
 			// {{filepath: | option [| size] }}
 			$isNowiki = true;
-			$parsedWidthParam = $parser->parseWidthParam( $argB );
+			$parsedWidthParam = Parser::parseWidthParam( $argB );
 		} else {
 			// {{filepath: [| size [|option]] }}
-			$parsedWidthParam = $parser->parseWidthParam( $argA );
+			$parsedWidthParam = Parser::parseWidthParam( $argA );
 			$isNowiki = ( $argB == 'nowiki' );
 		}
 
diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php
index dcd16eb4fa..b2d8511de8 100644
--- a/includes/parser/Parser.php
+++ b/includes/parser/Parser.php
@@ -270,15 +270,15 @@ class Parser {
 			$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" );
 	}
@@ -5210,7 +5210,7 @@ class Parser {
 
 				# Special case; width and height come in one variable together
 				if ( $type === 'handler' && $paramName === 'width' ) {
-					$parsedWidthParam = $this->parseWidthParam( $value );
+					$parsedWidthParam = self::parseWidthParam( $value );
 					if ( isset( $parsedWidthParam['width'] ) ) {
 						$width = $parsedWidthParam['width'];
 						if ( $handler->validateParam( 'width', $width ) ) {
@@ -6053,11 +6053,12 @@ class Parser {
 	 * Parsed a width param of imagelink like 300px or 200x300px
 	 *
 	 * @param string $value
+	 * @param bool $parseHeight
 	 *
 	 * @return array
 	 * @since 1.20
 	 */
-	public function parseWidthParam( $value ) {
+	public static function parseWidthParam( $value, $parseHeight = true ) {
 		$parsedWidthParam = [];
 		if ( $value === '' ) {
 			return $parsedWidthParam;
@@ -6065,7 +6066,7 @@ class Parser {
 		$m = [];
 		# (T15500) In both cases (width/height and width only),
 		# permit trailing "px" for backward compatibility.
-		if ( preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
+		if ( $parseHeight && preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
 			$width = intval( $m[1] );
 			$height = intval( $m[2] );
 			$parsedWidthParam['width'] = $width;
diff --git a/includes/parser/ParserOptions.php b/includes/parser/ParserOptions.php
index f99089b895..ca8e739f9a 100644
--- a/includes/parser/ParserOptions.php
+++ b/includes/parser/ParserOptions.php
@@ -65,7 +65,6 @@ class ParserOptions {
 		'stubthreshold' => true,
 		'printable' => true,
 		'userlang' => true,
-		'wrapclass' => true,
 	];
 
 	/**
@@ -780,13 +779,17 @@ class ParserOptions {
 	/**
 	 * CSS class to use to wrap output from Parser::parse()
 	 * @since 1.30
-	 * @param string|bool $className Set false to disable wrapping.
+	 * @param string $className Class name to use for wrapping.
+	 *   Passing false to indicate "no wrapping" was deprecated in MediaWiki 1.31.
 	 * @return string|bool Current value
 	 */
 	public function setWrapOutputClass( $className ) {
 		if ( $className === true ) { // DWIM, they probably want the default class name
 			$className = 'mw-parser-output';
 		}
+		if ( $className === false ) {
+			wfDeprecated( __METHOD__ . '( false )', '1.31' );
+		}
 		return $this->setOption( 'wrapclass', $className );
 	}
 
@@ -1059,8 +1062,8 @@ class ParserOptions {
 				'printable' => false,
 				'allowUnsafeRawHtml' => true,
 				'wrapclass' => 'mw-parser-output',
-				'currentRevisionCallback' => [ 'Parser', 'statelessFetchRevision' ],
-				'templateCallback' => [ 'Parser', 'statelessFetchTemplate' ],
+				'currentRevisionCallback' => [ Parser::class, 'statelessFetchRevision' ],
+				'templateCallback' => [ Parser::class, 'statelessFetchTemplate' ],
 				'speculativeRevIdCallback' => null,
 			];
 
diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php
index 153a7708f4..19375e0c21 100644
--- a/includes/parser/ParserOutput.php
+++ b/includes/parser/ParserOutput.php
@@ -21,12 +21,14 @@
  * @file
  * @ingroup Parser
  */
+
 class ParserOutput extends CacheTime {
 	/**
-	 * Feature flag to indicate to extensions that MediaWiki core supports and
+	 * Feature flags to indicate to extensions that MediaWiki core supports and
 	 * uses getText() stateless transforms.
 	 */
 	const SUPPORTS_STATELESS_TRANSFORMS = 1;
+	const SUPPORTS_UNWRAP_TRANSFORM = 1;
 
 	/**
 	 * @var string $mText The output text
@@ -266,29 +268,60 @@ class ParserOutput extends CacheTime {
 	 *     to generate one and `__NOTOC__` wasn't used. Default is true,
 	 *     but might be statefully overridden.
 	 *  - enableSectionEditLinks: (bool) Include section edit links, assuming
-	 *    section edit link tokens are present in the HTML. Default is true,
+	 *     section edit link tokens are present in the HTML. Default is true,
 	 *     but might be statefully overridden.
+	 *  - unwrap: (bool) Remove a wrapping mw-parser-output div. Default is false.
+	 *  - deduplicateStyles: (bool) When true, which is the default, `#s',
+				function ( $m ) use ( &$seen ) {
+					$attr = Sanitizer::decodeTagAttributes( $m[1] );
+					if ( !isset( $attr['data-mw-deduplicate'] ) ) {
+						return $m[0];
+					}
+
+					$key = $attr['data-mw-deduplicate'];
+					if ( !isset( $seen[$key] ) ) {
+						$seen[$key] = true;
+						return $m[0];
+					}
+
+					// We were going to use an empty 
+
+
+
+
+
+
+
+
 EOF;
 
 		return [
 			'No stateless options, default state' => [
 				[], [], $text, <<Test document.
+

Test document.

Contents

    @@ -181,12 +196,12 @@ EOF;

    Section 3[edit]

    Three -

    +

EOF ], 'No stateless options, TOC statefully disabled' => [ [], [ 'mTOCEnabled' => false ], $text, <<Test document. +

Test document.

Section 1[edit]

@@ -200,12 +215,12 @@ EOF

Section 3[edit]

Three -

+

EOF ], 'No stateless options, section edits statefully disabled' => [ [], [ 'mEditSectionTokens' => false ], $text, <<Test document. +

Test document.

Contents

    @@ -230,14 +245,14 @@ EOF

    Section 3

    Three -

    +

EOF ], 'Stateless options override stateful settings' => [ [ 'allowTOC' => true, 'enableSectionEditLinks' => true ], [ 'mTOCEnabled' => false, 'mEditSectionTokens' => false ], $text, <<Test document. +

Test document.

Contents

    @@ -262,12 +277,12 @@ EOF

    Section 3[edit]

    Three -

    +

EOF ], 'Statelessly disable section edit links' => [ [ 'enableSectionEditLinks' => false ], [], $text, <<Test document. +

Test document.

Contents

    @@ -292,13 +307,43 @@ EOF

    Section 3

    Three -

    +

EOF ], 'Statelessly disable TOC' => [ [ 'allowTOC' => false ], [], $text, <<

Test document. +

+ +

Section 1[edit]

+

One +

+

Section 2[edit]

+

Two +

+

Section 2.1[edit]

+

Two point one +

+

Section 3[edit]

+

Three +

+EOF + ], + 'Statelessly unwrap text' => [ + [ 'unwrap' => true ], [], $text, <<Test document.

+

Section 1[edit]

One @@ -314,6 +359,31 @@ EOF

EOF ], + 'Unwrap without a mw-parser-output wrapper' => [ + [ 'unwrap' => true ], [], '
Content
', '
Content
' + ], + 'Unwrap with extra comment at end' => [ + [ 'unwrap' => true ], [], '

Test document.

+', '

Test document.

+' + ], + 'Style deduplication' => [ + [], [], $dedupText, <<This is a test document.

+ + + + + + + + + +EOF + ], + 'Style deduplication disabled' => [ + [ 'deduplicateStyles' => false ], [], $dedupText, $dedupText + ], ]; // phpcs:enable } diff --git a/tests/phpunit/includes/parser/PreprocessorTest.php b/tests/phpunit/includes/parser/PreprocessorTest.php index ab138996a2..c415b58642 100644 --- a/tests/phpunit/includes/parser/PreprocessorTest.php +++ b/tests/phpunit/includes/parser/PreprocessorTest.php @@ -37,8 +37,8 @@ class PreprocessorTest extends MediaWikiTestCase { protected $mPreprocessors; protected static $classNames = [ - 'Preprocessor_DOM', - 'Preprocessor_Hash' + Preprocessor_DOM::class, + Preprocessor_Hash::class ]; protected function setUp() { diff --git a/tests/phpunit/includes/parser/SanitizerTest.php b/tests/phpunit/includes/parser/SanitizerTest.php index 2cf9553f94..6590338d36 100644 --- a/tests/phpunit/includes/parser/SanitizerTest.php +++ b/tests/phpunit/includes/parser/SanitizerTest.php @@ -517,6 +517,7 @@ class SanitizerTest extends MediaWikiTestCase { * @dataProvider provideStripAllTags * * @covers Sanitizer::stripAllTags() + * @covers RemexStripTagHandler * * @param string $input * @param string $expected diff --git a/tests/phpunit/includes/parser/TagHooksTest.php b/tests/phpunit/includes/parser/TagHooksTest.php index 7e31cba60f..bc09adc809 100644 --- a/tests/phpunit/includes/parser/TagHooksTest.php +++ b/tests/phpunit/includes/parser/TagHooksTest.php @@ -5,6 +5,7 @@ * @group Parser * * @covers Parser + * @covers BlockLevelPass * @covers StripState * * @covers Preprocessor_DOM @@ -46,7 +47,6 @@ class TagHooksTest extends MediaWikiTestCase { private function getParserOptions() { global $wgContLang; $popt = ParserOptions::newFromUserAndLang( new User, $wgContLang ); - $popt->setWrapOutputClass( false ); return $popt; } @@ -63,7 +63,7 @@ class TagHooksTest extends MediaWikiTestCase { Title::newFromText( 'Test' ), $this->getParserOptions() ); - $this->assertEquals( "

FooOneBaz\n

", $parserOutput->getText() ); + $this->assertEquals( "

FooOneBaz\n

", $parserOutput->getText( [ 'unwrap' => true ] ) ); $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle } @@ -98,7 +98,7 @@ class TagHooksTest extends MediaWikiTestCase { Title::newFromText( 'Test' ), $this->getParserOptions() ); - $this->assertEquals( "

FooOneBaz\n

", $parserOutput->getText() ); + $this->assertEquals( "

FooOneBaz\n

", $parserOutput->getText( [ 'unwrap' => true ] ) ); $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle } diff --git a/tests/phpunit/includes/password/BcryptPasswordTest.php b/tests/phpunit/includes/password/BcryptPasswordTest.php index 167341036d..952f541750 100644 --- a/tests/phpunit/includes/password/BcryptPasswordTest.php +++ b/tests/phpunit/includes/password/BcryptPasswordTest.php @@ -10,7 +10,7 @@ class BcryptPasswordTest extends PasswordTestCase { protected function getTypeConfigs() { return [ 'bcrypt' => [ - 'class' => 'BcryptPassword', + 'class' => BcryptPassword::class, 'cost' => 9, ] ]; } diff --git a/tests/phpunit/includes/password/EncryptedPasswordTest.php b/tests/phpunit/includes/password/EncryptedPasswordTest.php index 7ed971100c..6dfdea6994 100644 --- a/tests/phpunit/includes/password/EncryptedPasswordTest.php +++ b/tests/phpunit/includes/password/EncryptedPasswordTest.php @@ -9,7 +9,7 @@ class EncryptedPasswordTest extends PasswordTestCase { protected function getTypeConfigs() { return [ 'both' => [ - 'class' => 'EncryptedPassword', + 'class' => EncryptedPassword::class, 'underlying' => 'pbkdf2', 'secrets' => [ md5( 'secret1' ), @@ -18,7 +18,7 @@ class EncryptedPasswordTest extends PasswordTestCase { 'cipher' => 'aes-256-cbc', ], 'secret1' => [ - 'class' => 'EncryptedPassword', + 'class' => EncryptedPassword::class, 'underlying' => 'pbkdf2', 'secrets' => [ md5( 'secret1' ), @@ -26,7 +26,7 @@ class EncryptedPasswordTest extends PasswordTestCase { 'cipher' => 'aes-256-cbc', ], 'secret2' => [ - 'class' => 'EncryptedPassword', + 'class' => EncryptedPassword::class, 'underlying' => 'pbkdf2', 'secrets' => [ md5( 'secret2' ), @@ -34,7 +34,7 @@ class EncryptedPasswordTest extends PasswordTestCase { 'cipher' => 'aes-256-cbc', ], 'pbkdf2' => [ - 'class' => 'Pbkdf2Password', + 'class' => Pbkdf2Password::class, 'algo' => 'sha256', 'cost' => '10', 'length' => '64', diff --git a/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php b/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php index cee4fbb083..6a965a0387 100644 --- a/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php +++ b/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php @@ -8,7 +8,7 @@ class LayeredParameterizedPasswordTest extends PasswordTestCase { protected function getTypeConfigs() { return [ 'testLargeLayeredTop' => [ - 'class' => 'LayeredParameterizedPassword', + 'class' => LayeredParameterizedPassword::class, 'types' => [ 'testLargeLayeredBottom', 'testLargeLayeredBottom', @@ -18,13 +18,13 @@ class LayeredParameterizedPasswordTest extends PasswordTestCase { ], ], 'testLargeLayeredBottom' => [ - 'class' => 'Pbkdf2Password', + 'class' => Pbkdf2Password::class, 'algo' => 'sha512', 'cost' => 1024, 'length' => 512, ], 'testLargeLayeredFinal' => [ - 'class' => 'BcryptPassword', + 'class' => BcryptPassword::class, 'cost' => 5, ] ]; diff --git a/tests/phpunit/includes/password/MWOldPasswordTest.php b/tests/phpunit/includes/password/MWOldPasswordTest.php index 51e739cae7..50100826f1 100644 --- a/tests/phpunit/includes/password/MWOldPasswordTest.php +++ b/tests/phpunit/includes/password/MWOldPasswordTest.php @@ -8,7 +8,7 @@ class MWOldPasswordTest extends PasswordTestCase { protected function getTypeConfigs() { return [ 'A' => [ - 'class' => 'MWOldPassword', + 'class' => MWOldPassword::class, ] ]; } diff --git a/tests/phpunit/includes/password/MWSaltedPasswordTest.php b/tests/phpunit/includes/password/MWSaltedPasswordTest.php index 53a6ad138b..5616868dad 100644 --- a/tests/phpunit/includes/password/MWSaltedPasswordTest.php +++ b/tests/phpunit/includes/password/MWSaltedPasswordTest.php @@ -8,7 +8,7 @@ class MWSaltedPasswordTest extends PasswordTestCase { protected function getTypeConfigs() { return [ 'B' => [ - 'class' => 'MWSaltedPassword', + 'class' => MWSaltedPassword::class, ] ]; } diff --git a/tests/phpunit/includes/password/PasswordFactoryTest.php b/tests/phpunit/includes/password/PasswordFactoryTest.php index 5d585f3221..01b0de2c25 100644 --- a/tests/phpunit/includes/password/PasswordFactoryTest.php +++ b/tests/phpunit/includes/password/PasswordFactoryTest.php @@ -6,14 +6,14 @@ class PasswordFactoryTest extends MediaWikiTestCase { public function testRegister() { $pf = new PasswordFactory; - $pf->register( 'foo', [ 'class' => 'InvalidPassword' ] ); + $pf->register( 'foo', [ 'class' => InvalidPassword::class ] ); $this->assertArrayHasKey( 'foo', $pf->getTypes() ); } public function testSetDefaultType() { $pf = new PasswordFactory; - $pf->register( '1', [ 'class' => 'InvalidPassword' ] ); - $pf->register( '2', [ 'class' => 'InvalidPassword' ] ); + $pf->register( '1', [ 'class' => InvalidPassword::class ] ); + $pf->register( '2', [ 'class' => InvalidPassword::class ] ); $pf->setDefaultType( '1' ); $this->assertSame( '1', $pf->getDefaultType() ); $pf->setDefaultType( '2' ); @@ -31,7 +31,7 @@ class PasswordFactoryTest extends MediaWikiTestCase { public function testInit() { $config = new HashConfig( [ 'PasswordConfig' => [ - 'foo' => [ 'class' => 'InvalidPassword' ], + 'foo' => [ 'class' => InvalidPassword::class ], ], 'PasswordDefault' => 'foo' ] ); @@ -43,7 +43,7 @@ class PasswordFactoryTest extends MediaWikiTestCase { public function testNewFromCiphertext() { $pf = new PasswordFactory; - $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] ); + $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] ); $pw = $pf->newFromCiphertext( ':B:salt:d529e941509eb9e9b9cfaeae1fe7ca23' ); $this->assertInstanceOf( MWSaltedPassword::class, $pw ); } @@ -58,13 +58,13 @@ class PasswordFactoryTest extends MediaWikiTestCase { */ public function testNewFromCiphertextErrors( $hash ) { $pf = new PasswordFactory; - $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] ); + $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] ); $pf->newFromCiphertext( $hash ); } public function testNewFromType() { $pf = new PasswordFactory; - $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] ); + $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] ); $pw = $pf->newFromType( 'B' ); $this->assertInstanceOf( MWSaltedPassword::class, $pw ); } @@ -74,26 +74,26 @@ class PasswordFactoryTest extends MediaWikiTestCase { */ public function testNewFromTypeError() { $pf = new PasswordFactory; - $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] ); + $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] ); $pf->newFromType( 'bogus' ); } public function testNewFromPlaintext() { $pf = new PasswordFactory; - $pf->register( 'A', [ 'class' => 'MWOldPassword' ] ); - $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] ); + $pf->register( 'A', [ 'class' => MWOldPassword::class ] ); + $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] ); $pf->setDefaultType( 'A' ); - $this->assertInstanceOf( 'InvalidPassword', $pf->newFromPlaintext( null ) ); - $this->assertInstanceOf( 'MWOldPassword', $pf->newFromPlaintext( 'password' ) ); - $this->assertInstanceOf( 'MWSaltedPassword', + $this->assertInstanceOf( InvalidPassword::class, $pf->newFromPlaintext( null ) ); + $this->assertInstanceOf( MWOldPassword::class, $pf->newFromPlaintext( 'password' ) ); + $this->assertInstanceOf( MWSaltedPassword::class, $pf->newFromPlaintext( 'password', $pf->newFromType( 'B' ) ) ); } public function testNeedsUpdate() { $pf = new PasswordFactory; - $pf->register( 'A', [ 'class' => 'MWOldPassword' ] ); - $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] ); + $pf->register( 'A', [ 'class' => MWOldPassword::class ] ); + $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] ); $pf->setDefaultType( 'A' ); $this->assertFalse( $pf->needsUpdate( $pf->newFromType( 'A' ) ) ); @@ -105,6 +105,6 @@ class PasswordFactoryTest extends MediaWikiTestCase { } public function testNewInvalidPassword() { - $this->assertInstanceOf( 'InvalidPassword', PasswordFactory::newInvalidPassword() ); + $this->assertInstanceOf( InvalidPassword::class, PasswordFactory::newInvalidPassword() ); } } diff --git a/tests/phpunit/includes/password/PasswordTest.php b/tests/phpunit/includes/password/PasswordTest.php index d0177d0d4a..65c9199310 100644 --- a/tests/phpunit/includes/password/PasswordTest.php +++ b/tests/phpunit/includes/password/PasswordTest.php @@ -36,6 +36,6 @@ class PasswordTest extends MediaWikiTestCase { $passwordFactory = new PasswordFactory(); $invalid = $passwordFactory->newFromPlaintext( null ); - $this->assertInstanceOf( 'InvalidPassword', $invalid ); + $this->assertInstanceOf( InvalidPassword::class, $invalid ); } } diff --git a/tests/phpunit/includes/password/Pbkdf2PasswordFallbackTest.php b/tests/phpunit/includes/password/Pbkdf2PasswordFallbackTest.php index 605d1905c6..cf851c8113 100644 --- a/tests/phpunit/includes/password/Pbkdf2PasswordFallbackTest.php +++ b/tests/phpunit/includes/password/Pbkdf2PasswordFallbackTest.php @@ -9,7 +9,7 @@ class Pbkdf2PasswordFallbackTest extends PasswordTestCase { protected function getTypeConfigs() { return [ 'pbkdf2' => [ - 'class' => 'Pbkdf2Password', + 'class' => Pbkdf2Password::class, 'algo' => 'sha256', 'cost' => '10000', 'length' => '128', diff --git a/tests/phpunit/includes/password/Pbkdf2PasswordTest.php b/tests/phpunit/includes/password/Pbkdf2PasswordTest.php index ff069cd94b..7e97ab1af9 100644 --- a/tests/phpunit/includes/password/Pbkdf2PasswordTest.php +++ b/tests/phpunit/includes/password/Pbkdf2PasswordTest.php @@ -10,7 +10,7 @@ class Pbkdf2PasswordTest extends PasswordTestCase { protected function getTypeConfigs() { return [ 'pbkdf2' => [ - 'class' => 'Pbkdf2Password', + 'class' => Pbkdf2Password::class, 'algo' => 'sha256', 'cost' => '10000', 'length' => '128', diff --git a/tests/phpunit/includes/poolcounter/PoolCounterTest.php b/tests/phpunit/includes/poolcounter/PoolCounterTest.php index 6caf3e5450..f7f2013cb4 100644 --- a/tests/phpunit/includes/poolcounter/PoolCounterTest.php +++ b/tests/phpunit/includes/poolcounter/PoolCounterTest.php @@ -21,13 +21,13 @@ class PoolCounterTest extends MediaWikiTestCase { 'maxqueue' => 100, ]; - $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' ) + $poolCounter = $this->getMockBuilder( PoolCounterAbstractMock::class ) ->setConstructorArgs( [ $poolCounterConfig, 'testCounter', 'someKey' ] ) // don't mock anything - the proper syntax would be setMethods(null), but due // to a PHPUnit bug that does not work with getMockForAbstractClass() ->setMethods( [ 'idontexist' ] ) ->getMockForAbstractClass(); - $this->assertInstanceOf( 'PoolCounter', $poolCounter ); + $this->assertInstanceOf( PoolCounter::class, $poolCounter ); } public function testConstructWithSlots() { @@ -39,15 +39,15 @@ class PoolCounterTest extends MediaWikiTestCase { 'maxqueue' => 100, ]; - $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' ) + $poolCounter = $this->getMockBuilder( PoolCounterAbstractMock::class ) ->setConstructorArgs( [ $poolCounterConfig, 'testCounter', 'key' ] ) ->setMethods( [ 'idontexist' ] ) // don't mock anything ->getMockForAbstractClass(); - $this->assertInstanceOf( 'PoolCounter', $poolCounter ); + $this->assertInstanceOf( PoolCounter::class, $poolCounter ); } public function testHashKeyIntoSlots() { - $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' ) + $poolCounter = $this->getMockBuilder( PoolCounterAbstractMock::class ) // don't mock anything - the proper syntax would be setMethods(null), but due // to a PHPUnit bug that does not work with getMockForAbstractClass() ->setMethods( [ 'idontexist' ] ) diff --git a/tests/phpunit/includes/preferences/DefaultPreferencesFactoryTest.php b/tests/phpunit/includes/preferences/DefaultPreferencesFactoryTest.php index 9c85df2fba..c10152344b 100644 --- a/tests/phpunit/includes/preferences/DefaultPreferencesFactoryTest.php +++ b/tests/phpunit/includes/preferences/DefaultPreferencesFactoryTest.php @@ -3,6 +3,7 @@ use MediaWiki\Auth\AuthManager; use MediaWiki\MediaWikiServices; use MediaWiki\Preferences\DefaultPreferencesFactory; +use Wikimedia\ObjectFactory; use Wikimedia\TestingAccessWrapper; /** diff --git a/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php b/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php index 3e9c567ec8..fdf01525d4 100644 --- a/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php +++ b/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php @@ -27,8 +27,8 @@ class RCFeedIntegrationTest extends MediaWikiTestCase { * @covers MachineReadableRCFeedFormatter::getLine */ public function testNotify() { - $feed = $this->getMockBuilder( 'RCFeedEngine' ) - ->setConstructorArgs( [ [ 'formatter' => 'JSONRCFeedFormatter' ] ] ) + $feed = $this->getMockBuilder( RCFeedEngine::class ) + ->setConstructorArgs( [ [ 'formatter' => JSONRCFeedFormatter::class ] ] ) ->setMethods( [ 'send' ] ) ->getMock(); @@ -71,7 +71,7 @@ class RCFeedIntegrationTest extends MediaWikiTestCase { 'wgRCFeeds' => [ 'myfeed' => [ 'uri' => 'test://localhost:1234', - 'formatter' => 'JSONRCFeedFormatter', + 'formatter' => JSONRCFeedFormatter::class, ], ], 'wgRCEngines' => [ diff --git a/tests/phpunit/includes/registration/ExtensionJsonValidatorTest.php b/tests/phpunit/includes/registration/ExtensionJsonValidatorTest.php new file mode 100644 index 0000000000..d69ad5973a --- /dev/null +++ b/tests/phpunit/includes/registration/ExtensionJsonValidatorTest.php @@ -0,0 +1,84 @@ + + * + * 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. + * + */ + +/** + * @covers ExtensionJsonValidator + */ +class ExtensionJsonValidatorTest extends MediaWikiTestCase { + + /** + * @dataProvider provideValidate + */ + public function testValidate( $file, $expected ) { + // If a dependency is missing, skip this test. + $validator = new ExtensionJsonValidator( function ( $msg ) { + $this->markTestSkipped( $msg ); + } ); + + if ( is_string( $expected ) ) { + $this->setExpectedException( + ExtensionJsonValidationError::class, + $expected + ); + } + + $dir = __DIR__ . '/../../data/registration/'; + $this->assertSame( + $expected, + $validator->validate( $dir . $file ) + ); + } + + public function provideValidate() { + return [ + [ + 'notjson.txt', + 'notjson.txt is not valid JSON' + ], + [ + 'no_manifest_version.json', + 'no_manifest_version.json does not have manifest_version set.' + ], + [ + 'old_manifest_version.json', + 'old_manifest_version.json is using a non-supported schema version' + ], + [ + 'newer_manifest_version.json', + 'newer_manifest_version.json is using a non-supported schema version' + ], + [ + 'bad_spdx.json', + "bad_spdx.json did not pass validation. +[license-name] Invalid SPDX license identifier, see " + ], + [ + 'invalid.json', + "invalid.json did not pass validation. +[license-name] Array value found, but a string is required" + ], + [ + 'good.json', + true + ], + ]; + } + +} diff --git a/tests/phpunit/includes/registration/ExtensionProcessorTest.php b/tests/phpunit/includes/registration/ExtensionProcessorTest.php index acf4710ffd..d9e091dc8d 100644 --- a/tests/phpunit/includes/registration/ExtensionProcessorTest.php +++ b/tests/phpunit/includes/registration/ExtensionProcessorTest.php @@ -2,6 +2,9 @@ use Wikimedia\TestingAccessWrapper; +/** + * @covers ExtensionProcessor + */ class ExtensionProcessorTest extends MediaWikiTestCase { private $dir, $dirname; @@ -21,9 +24,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { 'name' => 'FooBar', ]; - /** - * @covers ExtensionProcessor::extractInfo - */ public function testExtractInfo() { // Test that attributes that begin with @ are ignored $processor = new ExtensionProcessor(); @@ -31,6 +31,8 @@ class ExtensionProcessorTest extends MediaWikiTestCase { '@metadata' => [ 'foobarbaz' ], 'AnAttribute' => [ 'omg' ], 'AutoloadClasses' => [ 'FooBar' => 'includes/FooBar.php' ], + 'SpecialPages' => [ 'Foo' => 'SpecialFoo' ], + 'callback' => 'FooBar::onRegistration', ], 1 ); $extracted = $processor->getExtractedInfo(); @@ -38,12 +40,17 @@ class ExtensionProcessorTest extends MediaWikiTestCase { $this->assertArrayHasKey( 'AnAttribute', $attributes ); $this->assertArrayNotHasKey( '@metadata', $attributes ); $this->assertArrayNotHasKey( 'AutoloadClasses', $attributes ); + $this->assertSame( + [ 'FooBar' => 'FooBar::onRegistration' ], + $extracted['callbacks'] + ); + $this->assertSame( + [ 'Foo' => 'SpecialFoo' ], + $extracted['globals']['wgSpecialPages'] + ); } - /** - * @covers ExtensionProcessor::extractInfo - */ - public function testExtractInfo_namespaces() { + public function testExtractNamespaces() { // Test that namespace IDs can be overwritten if ( !defined( 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_X' ) ) { define( 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_X', 123456 ); @@ -56,13 +63,20 @@ class ExtensionProcessorTest extends MediaWikiTestCase { 'id' => 332200, 'constant' => 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_A', 'name' => 'Test_A', - 'content' => 'TestModel' + 'defaultcontentmodel' => 'TestModel', + 'gender' => [ + 'male' => 'Male test', + 'female' => 'Female test', + ], + 'subpages' => true, + 'content' => true, + 'protection' => 'userright', ], [ // Test_X will use ID 123456 not 334400 'id' => 334400, 'constant' => 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_X', 'name' => 'Test_X', - 'content' => 'TestModel' + 'defaultcontentmodel' => 'TestModel' ], ] ], 1 ); @@ -90,6 +104,13 @@ class ExtensionProcessorTest extends MediaWikiTestCase { $this->assertSame( 'Test_X', $extracted['attributes']['ExtensionNamespaces'][123456] ); $this->assertSame( 'Test_A', $extracted['attributes']['ExtensionNamespaces'][332200] ); + $this->assertSame( + [ 'male' => 'Male test', 'female' => 'Female test' ], + $extracted['globals']['wgExtraGenderNamespaces'][332200] + ); + // A has subpages, X does not + $this->assertTrue( $extracted['globals']['wgNamespacesWithSubpages'][332200] ); + $this->assertArrayNotHasKey( 123456, $extracted['globals']['wgNamespacesWithSubpages'] ); } public static function provideRegisterHooks() { @@ -152,7 +173,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { } /** - * @covers ExtensionProcessor::extractHooks * @dataProvider provideRegisterHooks */ public function testRegisterHooks( $pre, $info, $expected ) { @@ -162,9 +182,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { $this->assertEquals( $expected, $extracted['globals']['wgHooks'] ); } - /** - * @covers ExtensionProcessor::extractConfig1 - */ public function testExtractConfig1() { $processor = new ExtensionProcessor; $info = [ @@ -191,9 +208,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { $this->assertEquals( 'somevalue', $extracted['globals']['egBar'] ); } - /** - * @covers ExtensionProcessor::extractConfig2 - */ public function testExtractConfig2() { $processor = new ExtensionProcessor; $info = [ @@ -201,6 +215,13 @@ class ExtensionProcessorTest extends MediaWikiTestCase { 'Bar' => [ 'value' => 'somevalue' ], 'Foo' => [ 'value' => 10 ], 'Path' => [ 'value' => 'foo.txt', 'path' => true ], + 'Namespaces' => [ + 'value' => [ + '10' => true, + '12' => false, + ], + 'merge_strategy' => 'array_plus', + ], ], ] + self::$default; $info2 = [ @@ -218,10 +239,13 @@ class ExtensionProcessorTest extends MediaWikiTestCase { $this->assertEquals( "{$this->dirname}/foo.txt", $extracted['globals']['wgPath'] ); // Custom prefix: $this->assertEquals( 'somevalue', $extracted['globals']['egBar'] ); + $this->assertSame( + [ 10 => true, 12 => false, ExtensionRegistry::MERGE_STRATEGY => 'array_plus' ], + $extracted['globals']['wgNamespaces'] + ); } /** - * @covers ExtensionProcessor::addConfigGlobal() * @expectedException RuntimeException */ public function testDuplicateConfigKey1() { @@ -242,7 +266,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { } /** - * @covers ExtensionProcessor::addConfigGlobal() * @expectedException RuntimeException */ public function testDuplicateConfigKey2() { @@ -287,7 +310,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { } /** - * @covers ExtensionProcessor::extractExtensionMessagesFiles * @dataProvider provideExtractExtensionMessagesFiles */ public function testExtractExtensionMessagesFiles( $input, $expected ) { @@ -314,7 +336,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { } /** - * @covers ExtensionProcessor::extractMessagesDirs * @dataProvider provideExtractMessagesDirs */ public function testExtractMessagesDirs( $input, $expected ) { @@ -326,18 +347,14 @@ class ExtensionProcessorTest extends MediaWikiTestCase { } } - /** - * @covers ExtensionProcessor::extractCredits - */ public function testExtractCredits() { $processor = new ExtensionProcessor(); $processor->extractInfo( $this->dir, self::$default, 1 ); - $this->setExpectedException( 'Exception' ); + $this->setExpectedException( Exception::class ); $processor->extractInfo( $this->dir, self::$default, 1 ); } /** - * @covers ExtensionProcessor::extractResourceLoaderModules * @dataProvider provideExtractResourceLoaderModules */ public function testExtractResourceLoaderModules( $input, $expected ) { @@ -380,8 +397,8 @@ class ExtensionProcessorTest extends MediaWikiTestCase { // Input [ 'ResourceFileModulePaths' => [ - 'localBasePath' => '', - 'remoteExtPath' => 'FooBar', + 'localBasePath' => 'modules', + 'remoteExtPath' => 'FooBar/modules', ], 'ResourceModules' => [ // No paths @@ -412,8 +429,8 @@ class ExtensionProcessorTest extends MediaWikiTestCase { 'wgResourceModules' => [ 'test.foo' => [ 'styles' => 'foo.js', - 'localBasePath' => $dir, - 'remoteExtPath' => 'FooBar', + 'localBasePath' => "$dir/modules", + 'remoteExtPath' => 'FooBar/modules', ], 'test.bar' => [ 'styles' => 'bar.js', @@ -423,14 +440,14 @@ class ExtensionProcessorTest extends MediaWikiTestCase { 'test.class' => [ 'class' => 'FooBarModule', 'extra' => 'argument', - 'localBasePath' => $dir, - 'remoteExtPath' => 'FooBar', + 'localBasePath' => "$dir/modules", + 'remoteExtPath' => 'FooBar/modules', ], 'test.class.with.path' => [ 'class' => 'FooBarPathModule', 'extra' => 'argument', 'localBasePath' => $dir, - 'remoteExtPath' => 'FooBar', + 'remoteExtPath' => 'FooBar/modules', ] ], ], @@ -543,9 +560,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { /** * Attributes under manifest_version 2 - * - * @covers ExtensionProcessor::extractAttributes - * @covers ExtensionProcessor::getExtractedInfo */ public function testExtractAttributes() { $processor = new ExtensionProcessor(); @@ -581,8 +595,6 @@ class ExtensionProcessorTest extends MediaWikiTestCase { /** * Attributes under manifest_version 1 - * - * @covers ExtensionProcessor::extractInfo */ public function testAttributes1() { $processor = new ExtensionProcessor(); @@ -599,12 +611,97 @@ class ExtensionProcessorTest extends MediaWikiTestCase { ], 1 ); + $processor->extractInfo( + $this->dir, + [ + 'name' => 'FooBar2', + 'FizzBuzzMorePlugins' => [ + 'ext.bar.fizzbuzz', + ] + ], + 1 + ); $info = $processor->getExtractedInfo(); $this->assertArrayHasKey( 'FooBarPlugins', $info['attributes'] ); $this->assertSame( [ 'ext.baz.foobar' ], $info['attributes']['FooBarPlugins'] ); $this->assertArrayHasKey( 'FizzBuzzMorePlugins', $info['attributes'] ); - $this->assertSame( [ 'ext.baz.fizzbuzz' ], $info['attributes']['FizzBuzzMorePlugins'] ); + $this->assertSame( + [ 'ext.baz.fizzbuzz', 'ext.bar.fizzbuzz' ], + $info['attributes']['FizzBuzzMorePlugins'] + ); + } + + public function testAttributes1_notarray() { + $processor = new ExtensionProcessor(); + $this->setExpectedException( + InvalidArgumentException::class, + "The value for 'FooBarPlugins' should be an array (from {$this->dir})" + ); + $processor->extractInfo( + $this->dir, + [ + 'FooBarPlugins' => 'ext.baz.foobar', + ] + self::$default, + 1 + ); + } + + public function testExtractPathBasedGlobal() { + $processor = new ExtensionProcessor(); + $processor->extractInfo( + $this->dir, + [ + 'ParserTestFiles' => [ + 'tests/parserTests.txt', + 'tests/extraParserTests.txt', + ], + 'ServiceWiringFiles' => [ + 'includes/ServiceWiring.php' + ], + ] + self::$default, + 1 + ); + $globals = $processor->getExtractedInfo()['globals']; + $this->assertArrayHasKey( 'wgParserTestFiles', $globals ); + $this->assertSame( [ + "{$this->dirname}/tests/parserTests.txt", + "{$this->dirname}/tests/extraParserTests.txt" + ], $globals['wgParserTestFiles'] ); + $this->assertArrayHasKey( 'wgServiceWiringFiles', $globals ); + $this->assertSame( [ + "{$this->dirname}/includes/ServiceWiring.php" + ], $globals['wgServiceWiringFiles'] ); + } + + public function testGetRequirements() { + $info = self::$default + [ + 'requires' => [ + 'MediaWiki' => '>= 1.25.0', + 'extensions' => [ + 'Bar' => '*' + ] + ] + ]; + $processor = new ExtensionProcessor(); + $this->assertSame( + $info['requires'], + $processor->getRequirements( $info ) + ); + $this->assertSame( + [], + $processor->getRequirements( [] ) + ); + } + + public function testGetExtraAutoloaderPaths() { + $processor = new ExtensionProcessor(); + $this->assertSame( + [ "{$this->dirname}/vendor/autoload.php" ], + $processor->getExtraAutoloaderPaths( $this->dirname, [ + 'load_composer_autoloader' => true, + ] ) + ); } /** diff --git a/tests/phpunit/includes/registration/ExtensionRegistryTest.php b/tests/phpunit/includes/registration/ExtensionRegistryTest.php index 5916b4510b..67bc088d78 100644 --- a/tests/phpunit/includes/registration/ExtensionRegistryTest.php +++ b/tests/phpunit/includes/registration/ExtensionRegistryTest.php @@ -1,9 +1,57 @@ dataDir = __DIR__ . '/../../data/registration'; + } + + public function testQueue_invalid() { + $registry = new ExtensionRegistry(); + $path = __DIR__ . '/doesnotexist.json'; + $this->setExpectedException( + Exception::class, + "$path does not exist!" + ); + $registry->queue( $path ); + } + + public function testQueue() { + $registry = new ExtensionRegistry(); + $path = "{$this->dataDir}/good.json"; + $registry->queue( $path ); + $this->assertArrayHasKey( + $path, + $registry->getQueue() + ); + $registry->clearQueue(); + $this->assertEmpty( $registry->getQueue() ); + } + + public function testLoadFromQueue_empty() { + $registry = new ExtensionRegistry(); + $registry->loadFromQueue(); + $this->assertEmpty( $registry->getAllThings() ); + } + + public function testLoadFromQueue_late() { + $registry = new ExtensionRegistry(); + $registry->finish(); + $registry->queue( "{$this->dataDir}/good.json" ); + $this->setExpectedException( + MWException::class, + "The following paths tried to load late: {$this->dataDir}/good.json" + ); + $registry->loadFromQueue(); + } + /** - * @covers ExtensionRegistry::exportExtractedData * @dataProvider provideExportExtractedDataGlobals */ public function testExportExtractedDataGlobals( $desc, $before, $globals, $expected ) { @@ -28,7 +76,7 @@ class ExtensionRegistryTest extends MediaWikiTestCase { 'autoloaderPaths' => [] ]; $registry = new ExtensionRegistry(); - $class = new ReflectionClass( 'ExtensionRegistry' ); + $class = new ReflectionClass( ExtensionRegistry::class ); $method = $class->getMethod( 'exportExtractedData' ); $method->setAccessible( true ); $method->invokeArgs( $registry, [ $info ] ); diff --git a/tests/phpunit/includes/registration/VersionCheckerTest.php b/tests/phpunit/includes/registration/VersionCheckerTest.php index 15d0c2b663..4a2810bb58 100644 --- a/tests/phpunit/includes/registration/VersionCheckerTest.php +++ b/tests/phpunit/includes/registration/VersionCheckerTest.php @@ -54,6 +54,7 @@ class VersionCheckerTest extends PHPUnit_Framework_TestCase { 'FakeDependency' => [ 'version' => '1.0.0', ], + 'NoVersionGiven' => [], ] ); $this->assertEquals( $expected, $checker->checkArray( [ 'FakeExtension' => $given, @@ -78,6 +79,39 @@ class VersionCheckerTest extends PHPUnit_Framework_TestCase { ], [] ], + [ + [ + 'extensions' => [ + 'NoVersionGiven' => '*' + ] + ], + [], + ], + [ + [ + 'extensions' => [ + 'NoVersionGiven' => '1.0', + ] + ], + [ 'NoVersionGiven does not expose its version, but FakeExtension requires: 1.0.' ], + ], + [ + [ + 'extensions' => [ + 'Missing' => '*', + ] + ], + [ 'FakeExtension requires Missing to be installed.' ], + ], + [ + [ + 'extensions' => [ + 'FakeDependency' => '2.0.0', + ] + ], + // phpcs:ignore Generic.Files.LineLength.TooLong + [ 'FakeExtension is not compatible with the current installed version of FakeDependency (1.0.0), it requires: 2.0.0.' ], + ] ]; } @@ -111,7 +145,7 @@ class VersionCheckerTest extends PHPUnit_Framework_TestCase { ], ] ); - $this->setExpectedException( 'UnexpectedValueException' ); + $this->setExpectedException( UnexpectedValueException::class ); $checker->checkArray( [ 'FakeExtension' => [ 'FakeDependency' => 'not really valid', diff --git a/tests/phpunit/includes/resourceloader/MessageBlobStoreTest.php b/tests/phpunit/includes/resourceloader/MessageBlobStoreTest.php index 7521e880fb..c00432efe8 100644 --- a/tests/phpunit/includes/resourceloader/MessageBlobStoreTest.php +++ b/tests/phpunit/includes/resourceloader/MessageBlobStoreTest.php @@ -14,7 +14,7 @@ class MessageBlobStoreTest extends PHPUnit_Framework_TestCase { parent::setUp(); // MediaWiki tests defaults $wgMainWANCache to CACHE_NONE. // Use hash instead so that caching is observed - $this->wanCache = $this->getMockBuilder( 'WANObjectCache' ) + $this->wanCache = $this->getMockBuilder( WANObjectCache::class ) ->setConstructorArgs( [ [ 'cache' => new HashBagOStuff(), 'pool' => 'test', @@ -32,7 +32,7 @@ class MessageBlobStoreTest extends PHPUnit_Framework_TestCase { } protected function makeBlobStore( $methods = null, $rl = null ) { - $blobStore = $this->getMockBuilder( 'MessageBlobStore' ) + $blobStore = $this->getMockBuilder( MessageBlobStore::class ) ->setConstructorArgs( [ $rl ] ) ->setMethods( $methods ) ->getMock(); diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php index c83f5004db..e51d0d6252 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php @@ -42,9 +42,7 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { protected static function makeSampleModules() { $modules = [ 'test' => [], - 'test.top' => [ 'position' => 'top' ], - 'test.private.top' => [ 'group' => 'private', 'position' => 'top' ], - 'test.private.bottom' => [ 'group' => 'private', 'position' => 'bottom' ], + 'test.private' => [ 'group' => 'private' ], 'test.shouldembed.empty' => [ 'shouldEmbed' => true, 'isKnownEmpty' => true ], 'test.shouldembed' => [ 'shouldEmbed' => true ], @@ -75,7 +73,6 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { ], 'test.scripts' => [], - 'test.scripts.top' => [ 'position' => 'top' ], 'test.scripts.user' => [ 'group' => 'user' ], 'test.scripts.user.empty' => [ 'group' => 'user', 'isKnownEmpty' => true ], 'test.scripts.raw' => [ 'isRaw' => true ], @@ -115,9 +112,7 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { $client = new ResourceLoaderClientHtml( $context ); $client->setModules( [ 'test', - 'test.private.bottom', - 'test.private.top', - 'test.top', + 'test.private', 'test.shouldembed.empty', 'test.shouldembed', 'test.unregistered', @@ -133,15 +128,13 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { $client->setModuleScripts( [ 'test.scripts', 'test.scripts.user.empty', - 'test.scripts.top', 'test.scripts.shouldembed', 'test.unregistered.scripts', ] ); $expected = [ 'states' => [ - 'test.private.top' => 'loading', - 'test.private.bottom' => 'loading', + 'test.private' => 'loading', 'test.shouldembed.empty' => 'ready', 'test.shouldembed' => 'loading', 'test.styles.pure' => 'ready', @@ -149,27 +142,23 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { 'test.styles.private' => 'ready', 'test.styles.shouldembed' => 'ready', 'test.scripts' => 'loading', - 'test.scripts.top' => 'loading', 'test.scripts.user.empty' => 'ready', 'test.scripts.shouldembed' => 'loading', ], 'general' => [ 'test', - 'test.top', ], 'styles' => [ 'test.styles.pure', ], 'scripts' => [ 'test.scripts', - 'test.scripts.top', 'test.scripts.shouldembed', ], 'embed' => [ 'styles' => [ 'test.styles.private', 'test.styles.shouldembed' ], 'general' => [ - 'test.private.bottom', - 'test.private.top', + 'test.private', 'test.shouldembed', ], ], @@ -193,15 +182,15 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { $client = new ResourceLoaderClientHtml( $context ); $client->setConfig( [ 'key' => 'value' ] ); $client->setModules( [ - 'test.top', - 'test.private.top', + 'test', + 'test.private', ] ); $client->setModuleStyles( [ 'test.styles.pure', 'test.styles.private', ] ); $client->setModuleScripts( [ - 'test.scripts.top', + 'test.scripts', ] ); $client->setExemptStates( [ 'test.exempt' => 'ready', @@ -211,10 +200,10 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { $expected = '' . "\n" . '' . "\n" . '' . "\n" . '' . "\n" @@ -266,9 +255,9 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase { ], [ 'context' => [], - 'modules' => [ 'test.private.top' ], + 'modules' => [ 'test.private' ], 'only' => ResourceLoaderModule::TYPE_COMBINED, - 'output' => '', + 'output' => '', ], [ 'context' => [], diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php index e5b338ed97..3f5704d6f4 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php @@ -59,7 +59,7 @@ class ResourceLoaderImageModuleTest extends ResourceLoaderTestCase { return [ [ [ - 'class' => 'ResourceLoaderImageModule', + 'class' => ResourceLoaderImageModule::class, 'prefix' => 'oo-ui-icon', 'variants' => self::$commonImageVariants, 'images' => self::$commonImageData, @@ -100,7 +100,7 @@ class ResourceLoaderImageModuleTest extends ResourceLoaderTestCase { ], [ [ - 'class' => 'ResourceLoaderImageModule', + 'class' => ResourceLoaderImageModule::class, 'selectorWithoutVariant' => '.mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before', 'selectorWithVariant' => '.mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before', @@ -239,7 +239,7 @@ TEXT } private function getImageMock( ResourceLoaderContext $context, $dataUriReturnValue ) { - $image = $this->getMockBuilder( 'ResourceLoaderImage' ) + $image = $this->getMockBuilder( ResourceLoaderImage::class ) ->disableOriginalConstructor() ->getMock(); $image->method( 'getDataUri' ) diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php index 7c7f1cf5c4..0ea4e2bd63 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php @@ -149,9 +149,9 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase { * @covers ResourceLoaderModule::expandRelativePaths */ public function testPlaceholderize() { - $getRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'getRelativePaths' ); + $getRelativePaths = new ReflectionMethod( ResourceLoaderModule::class, 'getRelativePaths' ); $getRelativePaths->setAccessible( true ); - $expandRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'expandRelativePaths' ); + $expandRelativePaths = new ReflectionMethod( ResourceLoaderModule::class, 'expandRelativePaths' ); $expandRelativePaths->setAccessible( true ); $this->setMwGlobals( [ diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderOOUIImageModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderOOUIImageModuleTest.php index 491fff6b1c..ea220f1148 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderOOUIImageModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderOOUIImageModuleTest.php @@ -10,7 +10,7 @@ class ResourceLoaderOOUIImageModuleTest extends ResourceLoaderTestCase { */ public function testNonDefaultSkin() { $module = new ResourceLoaderOOUIImageModule( [ - 'class' => 'ResourceLoaderOOUIImageModule', + 'class' => ResourceLoaderOOUIImageModule::class, 'name' => 'icons', 'rootPath' => 'tests/phpunit/data/resourceloader/oouiimagemodule', ] ); @@ -22,7 +22,7 @@ class ResourceLoaderOOUIImageModuleTest extends ResourceLoaderTestCase { function () { } ); - $r = new ReflectionMethod( 'ExtensionRegistry', 'exportExtractedData' ); + $r = new ReflectionMethod( ExtensionRegistry::class, 'exportExtractedData' ); $r->setAccessible( true ); $r->invoke( ExtensionRegistry::getInstance(), [ 'globals' => [], diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php index 03a609b664..564f50bc35 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php @@ -56,7 +56,7 @@ mw.loader.register( [ 'msg' => 'Version falls back gracefully if getVersionHash throws', 'modules' => [ 'test.fail' => ( - ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' ) + ( $mock = $this->getMockBuilder( ResourceLoaderTestModule::class ) ->setMethods( [ 'getVersionHash' ] )->getMock() ) && $mock->method( 'getVersionHash' )->will( $this->throwException( new Exception ) @@ -81,7 +81,7 @@ mw.loader.state( { 'msg' => 'Use version from getVersionHash', 'modules' => [ 'test.version' => ( - ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' ) + ( $mock = $this->getMockBuilder( ResourceLoaderTestModule::class ) ->setMethods( [ 'getVersionHash' ] )->getMock() ) && $mock->method( 'getVersionHash' )->willReturn( '1234567' ) ) ? $mock : $mock @@ -101,7 +101,7 @@ mw.loader.register( [ 'msg' => 'Re-hash version from getVersionHash if too long', 'modules' => [ 'test.version' => ( - ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' ) + ( $mock = $this->getMockBuilder( ResourceLoaderTestModule::class ) ->setMethods( [ 'getVersionHash' ] )->getMock() ) && $mock->method( 'getVersionHash' )->willReturn( '12345678' ) ) ? $mock : $mock diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index f45f8aee15..0bc558ad62 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -86,7 +86,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { */ public function testRegisterInvalidName() { $resourceLoader = new EmptyResourceLoader(); - $this->setExpectedException( 'MWException', "name 'test!invalid' is invalid" ); + $this->setExpectedException( MWException::class, "name 'test!invalid' is invalid" ); $resourceLoader->register( 'test!invalid', new ResourceLoaderTestModule() ); } @@ -95,7 +95,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { */ public function testRegisterInvalidType() { $resourceLoader = new EmptyResourceLoader(); - $this->setExpectedException( 'MWException', 'ResourceLoader module info type error' ); + $this->setExpectedException( MWException::class, 'ResourceLoader module info type error' ); $resourceLoader->register( 'test', new stdClass() ); } @@ -336,7 +336,9 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { */ public function testAddSourceDupe() { $rl = new ResourceLoader; - $this->setExpectedException( 'MWException', 'ResourceLoader duplicate source addition error' ); + $this->setExpectedException( + MWException::class, 'ResourceLoader duplicate source addition error' + ); $rl->addSource( 'foo', 'https://example.org/w/load.php' ); $rl->addSource( 'foo', 'https://example.com/w/load.php' ); } @@ -346,7 +348,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { */ public function testAddSourceInvalid() { $rl = new ResourceLoader; - $this->setExpectedException( 'MWException', 'with no "loadScript" key' ); + $this->setExpectedException( MWException::class, 'with no "loadScript" key' ); $rl->addSource( 'foo', [ 'x' => 'https://example.org/w/load.php' ] ); } @@ -446,7 +448,7 @@ mw.example(); ResourceLoader::clearCache(); $this->setMwGlobals( 'wgResourceLoaderDebug', true ); - $rl = TestingAccessWrapper::newFromClass( 'ResourceLoader' ); + $rl = TestingAccessWrapper::newFromClass( ResourceLoader::class ); $this->assertEquals( $case['expected'], $rl->makeLoaderImplementScript( @@ -465,8 +467,8 @@ mw.example(); * @covers ResourceLoader::makeLoaderImplementScript */ public function testMakeLoaderImplementScriptInvalid() { - $this->setExpectedException( 'MWException', 'Invalid scripts error' ); - $rl = TestingAccessWrapper::newFromClass( 'ResourceLoader' ); + $this->setExpectedException( MWException::class, 'Invalid scripts error' ); + $rl = TestingAccessWrapper::newFromClass( ResourceLoader::class ); $rl->makeLoaderImplementScript( 'test', // name 123, // scripts @@ -753,7 +755,7 @@ mw.example(); 'foo' => self::getSimpleModuleMock( 'foo();' ), 'ferry' => self::getFailFerryMock(), 'bar' => self::getSimpleModuleMock( 'bar();' ), - 'startup' => [ 'class' => 'ResourceLoaderStartUpModule' ], + 'startup' => [ 'class' => ResourceLoaderStartUpModule::class ], ] ); $context = $this->getResourceLoaderContext( [ diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php index 78eec6a6f7..0aa37d23d3 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php @@ -12,7 +12,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { */ public function testConstructor( $params ) { $module = new ResourceLoaderWikiModule( $params ); - $this->assertInstanceOf( 'ResourceLoaderWikiModule', $module ); + $this->assertInstanceOf( ResourceLoaderWikiModule::class, $module ); } public static function provideConstructor() { @@ -97,7 +97,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { * @dataProvider provideIsKnownEmpty */ public function testIsKnownEmpty( $titleInfo, $group, $expected ) { - $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' ) + $module = $this->getMockBuilder( ResourceLoaderWikiModule::class ) ->setMethods( [ 'getTitleInfo', 'getGroup' ] ) ->getMock(); $module->expects( $this->any() ) @@ -106,7 +106,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { $module->expects( $this->any() ) ->method( 'getGroup' ) ->will( $this->returnValue( $group ) ); - $context = $this->getMockBuilder( 'ResourceLoaderContext' ) + $context = $this->getMockBuilder( ResourceLoaderContext::class ) ->disableOriginalConstructor() ->getMock(); $this->assertEquals( $expected, $module->isKnownEmpty( $context ) ); @@ -157,14 +157,14 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { ]; $expected = $titleInfo; - $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' ) + $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class ) ->setMethods( [ 'getPages' ] ) ->getMock(); $module->method( 'getPages' )->willReturn( $pages ); // Can't mock static methods $module::$returnFetchTitleInfo = $titleInfo; - $context = $this->getMockBuilder( 'ResourceLoaderContext' ) + $context = $this->getMockBuilder( ResourceLoaderContext::class ) ->disableOriginalConstructor() ->getMock(); @@ -192,7 +192,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { ]; $expected = $titleInfo; - $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' ) + $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class ) ->setMethods( [ 'getPages' ] ) ->getMock(); $module->method( 'getPages' )->willReturn( $pages ); @@ -231,7 +231,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { $titleInfo = []; // Set up objects - $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' ) + $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class ) ->setMethods( [ 'getPages' ] ) ->getMock(); $module->method( 'getPages' )->willReturn( $pages ); $module::$returnFetchTitleInfo = $titleInfo; @@ -299,7 +299,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { */ public function testGetContent( $expected, $title ) { $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader ); - $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' ) + $module = $this->getMockBuilder( ResourceLoaderWikiModule::class ) ->setMethods( [ 'getContentObj' ] ) ->getMock(); $module->expects( $this->any() ) ->method( 'getContentObj' )->willReturn( null ); @@ -331,7 +331,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { public function testGetContentForRedirects() { // Set up context and module object $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader ); - $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' ) + $module = $this->getMockBuilder( ResourceLoaderWikiModule::class ) ->setMethods( [ 'getPages', 'getContentObj' ] ) ->getMock(); $module->expects( $this->any() ) diff --git a/tests/phpunit/includes/search/SearchEnginePrefixTest.php b/tests/phpunit/includes/search/SearchEnginePrefixTest.php index 4c5bab3fcc..3f59295ab6 100644 --- a/tests/phpunit/includes/search/SearchEnginePrefixTest.php +++ b/tests/phpunit/includes/search/SearchEnginePrefixTest.php @@ -63,8 +63,8 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase { $this->search = MediaWikiServices::getInstance()->newSearchEngine(); $this->search->setNamespaces( [] ); - $this->originalHandlers = TestingAccessWrapper::newFromClass( 'Hooks' )->handlers; - TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = []; + $this->originalHandlers = TestingAccessWrapper::newFromClass( Hooks::class )->handlers; + TestingAccessWrapper::newFromClass( Hooks::class )->handlers = []; SpecialPageFactory::resetList(); } @@ -72,7 +72,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase { public function tearDown() { parent::tearDown(); - TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = $this->originalHandlers; + TestingAccessWrapper::newFromClass( Hooks::class )->handlers = $this->originalHandlers; SpecialPageFactory::resetList(); } @@ -337,7 +337,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase { * @covers PrefixSearch::searchBackend */ public function testSearchBackend( array $case ) { - $search = $stub = $this->getMockBuilder( 'SearchEngine' ) + $search = $stub = $this->getMockBuilder( SearchEngine::class ) ->setMethods( [ 'completionSearchBackend' ] )->getMock(); $return = SearchSuggestionSet::fromStrings( $case['provision'] ); diff --git a/tests/phpunit/includes/search/SearchEngineTest.php b/tests/phpunit/includes/search/SearchEngineTest.php index 9711eabb31..e8077769e1 100644 --- a/tests/phpunit/includes/search/SearchEngineTest.php +++ b/tests/phpunit/includes/search/SearchEngineTest.php @@ -220,12 +220,12 @@ class SearchEngineTest extends MediaWikiLangTestCase { /** * @var $mockEngine SearchEngine */ - $mockEngine = $this->getMockBuilder( 'SearchEngine' ) + $mockEngine = $this->getMockBuilder( SearchEngine::class ) ->setMethods( [ 'makeSearchFieldMapping' ] )->getMock(); $mockFieldBuilder = function ( $name, $type ) { $mockField = - $this->getMockBuilder( 'SearchIndexFieldDefinition' )->setConstructorArgs( [ + $this->getMockBuilder( SearchIndexFieldDefinition::class )->setConstructorArgs( [ $name, $type ] )->getMock(); @@ -258,7 +258,7 @@ class SearchEngineTest extends MediaWikiLangTestCase { $fields = $mockEngine->getSearchIndexFields(); $this->assertArrayHasKey( 'language', $fields ); $this->assertArrayHasKey( 'category', $fields ); - $this->assertInstanceOf( 'SearchIndexField', $fields['testField'] ); + $this->assertInstanceOf( SearchIndexField::class, $fields['testField'] ); $mapping = $fields['testField']->getMapping( $mockEngine ); $this->assertArrayHasKey( 'testData', $mapping ); @@ -287,7 +287,7 @@ class SearchEngineTest extends MediaWikiLangTestCase { } public function addAugmentors( &$setAugmentors, &$rowAugmentors ) { - $setAugmentor = $this->createMock( 'ResultSetAugmentor' ); + $setAugmentor = $this->createMock( ResultSetAugmentor::class ); $setAugmentor->expects( $this->once() ) ->method( 'augmentAll' ) ->willReturnCallback( function ( SearchResultSet $resultSet ) { @@ -301,7 +301,7 @@ class SearchEngineTest extends MediaWikiLangTestCase { } ); $setAugmentors['testSet'] = $setAugmentor; - $rowAugmentor = $this->createMock( 'ResultAugmentor' ); + $rowAugmentor = $this->createMock( ResultAugmentor::class ); $rowAugmentor->expects( $this->exactly( 2 ) ) ->method( 'augment' ) ->willReturnCallback( function ( SearchResult $result ) { diff --git a/tests/phpunit/includes/services/ServiceContainerTest.php b/tests/phpunit/includes/services/ServiceContainerTest.php index f4f56504e2..768ed9106f 100644 --- a/tests/phpunit/includes/services/ServiceContainerTest.php +++ b/tests/phpunit/includes/services/ServiceContainerTest.php @@ -71,7 +71,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $name = 'TestService92834576'; - $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); + $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); $services->getService( $name ); } @@ -113,7 +113,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $name = 'TestService92834576'; - $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); + $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); $services->peekService( $name ); } @@ -143,7 +143,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { return $theService; } ); - $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' ); + $this->setExpectedException( MediaWiki\Services\ServiceAlreadyDefinedException::class ); $services->defineService( $name, function () use ( $theService ) { return $theService; @@ -240,7 +240,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { ]; // loading the same file twice should fail, because - $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' ); + $this->setExpectedException( MediaWiki\Services\ServiceAlreadyDefinedException::class ); $services->loadWiringFiles( $wiringFiles ); } @@ -298,7 +298,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); + $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); $services->redefineService( $name, function () use ( $theService ) { return $theService; @@ -318,7 +318,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { // create the service, so it can no longer be redefined $services->getService( $name ); - $this->setExpectedException( 'MediaWiki\Services\CannotReplaceActiveServiceException' ); + $this->setExpectedException( MediaWiki\Services\CannotReplaceActiveServiceException::class ); $services->redefineService( $name, function () use ( $theService ) { return $theService; @@ -328,7 +328,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { public function testDisableService() { $services = $this->newServiceContainer( [ 'Foo' ] ); - $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' ) + $destructible = $this->getMockBuilder( MediaWiki\Services\DestructibleService::class ) ->getMock(); $destructible->expects( $this->once() ) ->method( 'destroy' ); @@ -367,7 +367,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $this->assertContains( 'Bar', $services->getServiceNames() ); $this->assertContains( 'Qux', $services->getServiceNames() ); - $this->setExpectedException( 'MediaWiki\Services\ServiceDisabledException' ); + $this->setExpectedException( MediaWiki\Services\ServiceDisabledException::class ); $services->getService( 'Qux' ); } @@ -377,7 +377,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); + $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); $services->redefineService( $name, function () use ( $theService ) { return $theService; @@ -387,7 +387,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { public function testDestroy() { $services = $this->newServiceContainer(); - $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' ) + $destructible = $this->getMockBuilder( MediaWiki\Services\DestructibleService::class ) ->getMock(); $destructible->expects( $this->once() ) ->method( 'destroy' ); @@ -406,7 +406,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { // destroy the container $services->destroy(); - $this->setExpectedException( 'MediaWiki\Services\ContainerDisabledException' ); + $this->setExpectedException( MediaWiki\Services\ContainerDisabledException::class ); $services->getService( 'Bar' ); } diff --git a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php index 90550d2b2b..476799406f 100644 --- a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php +++ b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php @@ -184,7 +184,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { public function testNewSessionInfoForRequest() { $provider = $this->getProvider(); $user = static::getTestSysop()->getUser(); - $request = $this->getMockBuilder( 'FauxRequest' ) + $request = $this->getMockBuilder( \FauxRequest::class ) ->setMethods( [ 'getIP' ] )->getMock(); $request->expects( $this->any() )->method( 'getIP' ) ->will( $this->returnValue( '127.0.0.1' ) ); @@ -212,7 +212,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { $provider->setLogger( $logger ); $user = static::getTestSysop()->getUser(); - $request = $this->getMockBuilder( 'FauxRequest' ) + $request = $this->getMockBuilder( \FauxRequest::class ) ->setMethods( [ 'getIP' ] )->getMock(); $request->expects( $this->any() )->method( 'getIP' ) ->will( $this->returnValue( '127.0.0.1' ) ); @@ -264,7 +264,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { ], $logger->getBuffer() ); $logger->clearBuffer(); - $request2 = $this->getMockBuilder( 'FauxRequest' ) + $request2 = $this->getMockBuilder( \FauxRequest::class ) ->setMethods( [ 'getIP' ] )->getMock(); $request2->expects( $this->any() )->method( 'getIP' ) ->will( $this->returnValue( '10.0.0.1' ) ); diff --git a/tests/phpunit/includes/session/CookieSessionProviderTest.php b/tests/phpunit/includes/session/CookieSessionProviderTest.php index a47fd9a18b..c1df365aac 100644 --- a/tests/phpunit/includes/session/CookieSessionProviderTest.php +++ b/tests/phpunit/includes/session/CookieSessionProviderTest.php @@ -157,7 +157,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase { ); $msg = $provider->whyNoSession(); - $this->assertInstanceOf( 'Message', $msg ); + $this->assertInstanceOf( \Message::class, $msg ); $this->assertSame( 'sessionprovider-nocookies', $msg->getKey() ); } @@ -415,7 +415,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase { ); TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false; - $mock = $this->getMockBuilder( 'stdClass' ) + $mock = $this->getMockBuilder( stdClass::class ) ->setMethods( [ 'onUserSetCookies' ] ) ->getMock(); $mock->expects( $this->never() )->method( 'onUserSetCookies' ); @@ -563,14 +563,14 @@ class CookieSessionProviderTest extends MediaWikiTestCase { } protected function getSentRequest() { - $sentResponse = $this->getMockBuilder( 'FauxResponse' ) + $sentResponse = $this->getMockBuilder( \FauxResponse::class ) ->setMethods( [ 'headersSent', 'setCookie', 'header' ] )->getMock(); $sentResponse->expects( $this->any() )->method( 'headersSent' ) ->will( $this->returnValue( true ) ); $sentResponse->expects( $this->never() )->method( 'setCookie' ); $sentResponse->expects( $this->never() )->method( 'header' ); - $sentRequest = $this->getMockBuilder( 'FauxRequest' ) + $sentRequest = $this->getMockBuilder( \FauxRequest::class ) ->setMethods( [ 'response' ] )->getMock(); $sentRequest->expects( $this->any() )->method( 'response' ) ->will( $this->returnValue( $sentResponse ) ); @@ -608,7 +608,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase { TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false; // Anonymous user - $mock = $this->getMockBuilder( 'stdClass' ) + $mock = $this->getMockBuilder( stdClass::class ) ->setMethods( [ 'onUserSetCookies' ] )->getMock(); $mock->expects( $this->never() )->method( 'onUserSetCookies' ); $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'UserSetCookies' => [ $mock ] ] ); diff --git a/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php b/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php index 086fa28bde..6dd32fcdaf 100644 --- a/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php +++ b/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php @@ -91,7 +91,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase { $this->assertFalse( $provider->canChangeUser() ); $msg = $provider->whyNoSession(); - $this->assertInstanceOf( 'Message', $msg ); + $this->assertInstanceOf( \Message::class, $msg ); $this->assertSame( 'sessionprovider-nocookies', $msg->getKey() ); } @@ -158,7 +158,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase { } protected function getSentRequest() { - $sentResponse = $this->getMockBuilder( 'FauxResponse' ) + $sentResponse = $this->getMockBuilder( \FauxResponse::class ) ->setMethods( [ 'headersSent', 'setCookie', 'header' ] ) ->getMock(); $sentResponse->expects( $this->any() )->method( 'headersSent' ) @@ -166,7 +166,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase { $sentResponse->expects( $this->never() )->method( 'setCookie' ); $sentResponse->expects( $this->never() )->method( 'header' ); - $sentRequest = $this->getMockBuilder( 'FauxRequest' ) + $sentRequest = $this->getMockBuilder( \FauxRequest::class ) ->setMethods( [ 'response' ] )->getMock(); $sentRequest->expects( $this->any() )->method( 'response' ) ->will( $this->returnValue( $sentResponse ) ); diff --git a/tests/phpunit/includes/session/MetadataMergeExceptionTest.php b/tests/phpunit/includes/session/MetadataMergeExceptionTest.php index 0981f026a1..8cb4302a4e 100644 --- a/tests/phpunit/includes/session/MetadataMergeExceptionTest.php +++ b/tests/phpunit/includes/session/MetadataMergeExceptionTest.php @@ -14,7 +14,7 @@ class MetadataMergeExceptionTest extends MediaWikiTestCase { $data = [ 'foo' => 'bar' ]; $ex = new MetadataMergeException(); - $this->assertInstanceOf( 'UnexpectedValueException', $ex ); + $this->assertInstanceOf( \UnexpectedValueException::class, $ex ); $this->assertSame( [], $ex->getContext() ); $ex2 = new MetadataMergeException( 'Message', 42, $ex, $data ); diff --git a/tests/phpunit/includes/session/PHPSessionHandlerTest.php b/tests/phpunit/includes/session/PHPSessionHandlerTest.php index 0a2e84e11a..28fc04aded 100644 --- a/tests/phpunit/includes/session/PHPSessionHandlerTest.php +++ b/tests/phpunit/includes/session/PHPSessionHandlerTest.php @@ -109,7 +109,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { $reset[] = $this->getResetter( $rProp ); $this->setMwGlobals( [ - 'wgSessionProviders' => [ [ 'class' => 'DummySessionProvider' ] ], + 'wgSessionProviders' => [ [ 'class' => \DummySessionProvider::class ] ], 'wgObjectCacheSessionExpiry' => 2, ] ); @@ -130,9 +130,9 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { ); $wrap->setEnableFlags( 'warn' ); - \MediaWiki\suppressWarnings(); + \Wikimedia\suppressWarnings(); ini_set( 'session.serialize_handler', $handler ); - \MediaWiki\restoreWarnings(); + \Wikimedia\restoreWarnings(); if ( ini_get( 'session.serialize_handler' ) !== $handler ) { $this->markTestSkipped( "Cannot set session.serialize_handler to \"$handler\"" ); } diff --git a/tests/phpunit/includes/session/SessionBackendTest.php b/tests/phpunit/includes/session/SessionBackendTest.php index e0d1c307ab..ae19278cb6 100644 --- a/tests/phpunit/includes/session/SessionBackendTest.php +++ b/tests/phpunit/includes/session/SessionBackendTest.php @@ -2,6 +2,7 @@ namespace MediaWiki\Session; +use Config; use MediaWikiTestCase; use User; use Wikimedia\TestingAccessWrapper; @@ -14,9 +15,16 @@ 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; @@ -25,6 +33,7 @@ class SessionBackendTest extends MediaWikiTestCase { * 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 ) { @@ -142,14 +151,14 @@ class SessionBackendTest extends MediaWikiTestCase { $this->assertSame( self::SESSIONID, $backend->getId() ); $this->assertSame( $id, $backend->getSessionId() ); $this->assertSame( $this->provider, $backend->getProvider() ); - $this->assertInstanceOf( 'User', $backend->getUser() ); + $this->assertInstanceOf( User::class, $backend->getUser() ); $this->assertSame( 'UTSysop', $backend->getUser()->getName() ); $this->assertSame( $info->wasPersisted(), $backend->isPersistent() ); $this->assertSame( $info->wasRemembered(), $backend->shouldRememberUser() ); $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, @@ -164,7 +173,7 @@ class SessionBackendTest extends MediaWikiTestCase { $this->assertSame( self::SESSIONID, $backend->getId() ); $this->assertSame( $id, $backend->getSessionId() ); $this->assertSame( $this->provider, $backend->getProvider() ); - $this->assertInstanceOf( 'User', $backend->getUser() ); + $this->assertInstanceOf( User::class, $backend->getUser() ); $this->assertTrue( $backend->getUser()->isAnon() ); $this->assertSame( $info->wasPersisted(), $backend->isPersistent() ); $this->assertSame( $info->wasRemembered(), $backend->shouldRememberUser() ); @@ -258,7 +267,7 @@ class SessionBackendTest extends MediaWikiTestCase { public function testResetId() { $id = session_id(); - $builder = $this->getMockBuilder( 'DummySessionProvider' ) + $builder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'persistsSessionId', 'sessionIdWasReset' ] ); $this->provider = $builder->getMock(); @@ -294,7 +303,7 @@ class SessionBackendTest extends MediaWikiTestCase { } public function testPersist() { - $this->provider = $this->getMockBuilder( 'DummySessionProvider' ) + $this->provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'persistSession' ] )->getMock(); $this->provider->expects( $this->once() )->method( 'persistSession' ); $backend = $this->getBackend(); @@ -314,7 +323,7 @@ class SessionBackendTest extends MediaWikiTestCase { } public function testUnpersist() { - $this->provider = $this->getMockBuilder( 'DummySessionProvider' ) + $this->provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'unpersistSession' ] )->getMock(); $this->provider->expects( $this->once() )->method( 'unpersistSession' ); $backend = $this->getBackend(); @@ -367,7 +376,7 @@ class SessionBackendTest extends MediaWikiTestCase { public function testSetUser() { $user = static::getTestSysop()->getUser(); - $this->provider = $this->getMockBuilder( 'DummySessionProvider' ) + $this->provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'canChangeUser' ] )->getMock(); $this->provider->expects( $this->any() )->method( 'canChangeUser' ) ->will( $this->returnValue( false ) ); @@ -498,7 +507,7 @@ class SessionBackendTest extends MediaWikiTestCase { ->setMethods( [ 'onSessionMetadata' ] )->getMock(); $neverHook->expects( $this->never() )->method( 'onSessionMetadata' ); - $builder = $this->getMockBuilder( 'DummySessionProvider' ) + $builder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'persistSession', 'unpersistSession' ] ); $neverProvider = $builder->getMock(); @@ -746,7 +755,7 @@ class SessionBackendTest extends MediaWikiTestCase { $testData = [ 'foo' => 'foo!', 'bar', [ 'baz', null ] ]; // Not persistent - $this->provider = $this->getMockBuilder( 'DummySessionProvider' ) + $this->provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'persistSession' ] )->getMock(); $this->provider->expects( $this->never() )->method( 'persistSession' ); $this->onSessionMetadataCalled = false; @@ -772,7 +781,7 @@ class SessionBackendTest extends MediaWikiTestCase { $this->assertNotEquals( 0, $wrap->expires ); // Persistent - $this->provider = $this->getMockBuilder( 'DummySessionProvider' ) + $this->provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'persistSession' ] )->getMock(); $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' ); $this->onSessionMetadataCalled = false; @@ -799,7 +808,7 @@ class SessionBackendTest extends MediaWikiTestCase { $this->assertNotEquals( 0, $wrap->expires ); // Not persistent, not expiring - $this->provider = $this->getMockBuilder( 'DummySessionProvider' ) + $this->provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'persistSession' ] )->getMock(); $this->provider->expects( $this->never() )->method( 'persistSession' ); $this->onSessionMetadataCalled = false; @@ -891,7 +900,7 @@ class SessionBackendTest extends MediaWikiTestCase { $manager->globalSessionRequest = $request; session_id( self::SESSIONID ); - \MediaWiki\quietCall( 'session_start' ); + \Wikimedia\quietCall( 'session_start' ); $_SESSION['foo'] = __METHOD__; $backend->resetId(); $this->assertNotEquals( self::SESSIONID, $backend->getId() ); @@ -929,7 +938,7 @@ class SessionBackendTest extends MediaWikiTestCase { $manager->globalSessionRequest = $request; session_id( self::SESSIONID . 'x' ); - \MediaWiki\quietCall( 'session_start' ); + \Wikimedia\quietCall( 'session_start' ); $backend->unpersist(); $this->assertSame( self::SESSIONID . 'x', session_id() ); @@ -940,7 +949,7 @@ class SessionBackendTest extends MediaWikiTestCase { } public function testGetAllowedUserRights() { - $this->provider = $this->getMockBuilder( 'DummySessionProvider' ) + $this->provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'getAllowedUserRights' ] ) ->getMock(); $this->provider->expects( $this->any() )->method( 'getAllowedUserRights' ) diff --git a/tests/phpunit/includes/session/SessionManagerTest.php b/tests/phpunit/includes/session/SessionManagerTest.php index 9eb46bc381..e042f7655a 100644 --- a/tests/phpunit/includes/session/SessionManagerTest.php +++ b/tests/phpunit/includes/session/SessionManagerTest.php @@ -14,7 +14,14 @@ use Wikimedia\TestingAccessWrapper; */ 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(); @@ -23,7 +30,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'SessionCacheType' => 'testSessionStore', 'ObjectCacheSessionExpiry' => 100, 'SessionProviders' => [ - [ 'class' => 'DummySessionProvider' ], + [ 'class' => \DummySessionProvider::class ], ] ] ); $this->logger = new \TestLogger( false, function ( $m ) { @@ -138,7 +145,7 @@ class SessionManagerTest extends MediaWikiTestCase { $id2 = ''; $idEmpty = 'empty-session-------------------'; - $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' ) + $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'provideSessionInfo', 'newSessionInfo', '__toString', 'describe', 'unpersistSession' ] ); @@ -397,7 +404,7 @@ class SessionManagerTest extends MediaWikiTestCase { // Failure to create an empty session $manager = $this->getManager(); - $provider = $this->getMockBuilder( 'DummySessionProvider' ) + $provider = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'provideSessionInfo', 'newSessionInfo', '__toString' ] ) ->getMock(); $provider->expects( $this->any() )->method( 'provideSessionInfo' ) @@ -422,7 +429,7 @@ class SessionManagerTest extends MediaWikiTestCase { $pmanager = TestingAccessWrapper::newFromObject( $manager ); $request = new \FauxRequest(); - $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' ) + $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'provideSessionInfo', 'newSessionInfo', '__toString' ] ); $expectId = null; @@ -646,7 +653,7 @@ class SessionManagerTest extends MediaWikiTestCase { $user = User::newFromName( 'UTSysop' ); $manager = $this->getManager(); - $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' ) + $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'invalidateSessionsForUser', '__toString' ] ); $provider1 = $providerBuilder->getMock(); @@ -674,7 +681,7 @@ class SessionManagerTest extends MediaWikiTestCase { public function testGetVaryHeaders() { $manager = $this->getManager(); - $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' ) + $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'getVaryHeaders', '__toString' ] ); $provider1 = $providerBuilder->getMock(); @@ -718,7 +725,7 @@ class SessionManagerTest extends MediaWikiTestCase { public function testGetVaryCookies() { $manager = $this->getManager(); - $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' ) + $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'getVaryCookies', '__toString' ] ); $provider1 = $providerBuilder->getMock(); @@ -751,7 +758,7 @@ class SessionManagerTest extends MediaWikiTestCase { $manager = TestingAccessWrapper::newFromObject( $realManager ); $this->config->set( 'SessionProviders', [ - [ 'class' => 'DummySessionProvider' ], + [ 'class' => \DummySessionProvider::class ], ] ); $providers = $manager->getProviders(); $this->assertArrayHasKey( 'DummySessionProvider', $providers ); @@ -761,8 +768,8 @@ class SessionManagerTest extends MediaWikiTestCase { $this->assertSame( $realManager, $provider->getManager() ); $this->config->set( 'SessionProviders', [ - [ 'class' => 'DummySessionProvider' ], - [ 'class' => 'DummySessionProvider' ], + [ 'class' => \DummySessionProvider::class ], + [ 'class' => \DummySessionProvider::class ], ] ); $manager->sessionProviders = null; try { @@ -780,7 +787,7 @@ class SessionManagerTest extends MediaWikiTestCase { $manager = TestingAccessWrapper::newFromObject( $this->getManager() ); $manager->setLogger( new \Psr\Log\NullLogger() ); - $mock = $this->getMockBuilder( 'stdClass' ) + $mock = $this->getMockBuilder( stdClass::class ) ->setMethods( [ 'shutdown' ] )->getMock(); $mock->expects( $this->once() )->method( 'shutdown' ); @@ -871,7 +878,7 @@ class SessionManagerTest extends MediaWikiTestCase { public function testPreventSessionsForUser() { $manager = $this->getManager(); - $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' ) + $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class ) ->setMethods( [ 'preventSessionsForUser', '__toString' ] ); $provider1 = $providerBuilder->getMock(); diff --git a/tests/phpunit/includes/session/SessionTest.php b/tests/phpunit/includes/session/SessionTest.php index adf0f5db50..f84d435f77 100644 --- a/tests/phpunit/includes/session/SessionTest.php +++ b/tests/phpunit/includes/session/SessionTest.php @@ -365,9 +365,9 @@ class SessionTest extends MediaWikiTestCase { $hmac = hash_hmac( 'sha256', $sealed, $hmacKey, true ); $encrypted = base64_encode( $hmac ) . '.' . $sealed; $session->set( 'test', $encrypted ); - \MediaWiki\suppressWarnings(); + \Wikimedia\suppressWarnings(); $this->assertEquals( 'defaulted', $session->getSecret( 'test', 'defaulted' ) ); - \MediaWiki\restoreWarnings(); + \Wikimedia\restoreWarnings(); } } diff --git a/tests/phpunit/includes/session/TestBagOStuff.php b/tests/phpunit/includes/session/TestBagOStuff.php index bac2088d9a..f9e30f06ab 100644 --- a/tests/phpunit/includes/session/TestBagOStuff.php +++ b/tests/phpunit/includes/session/TestBagOStuff.php @@ -14,53 +14,44 @@ class TestBagOStuff extends \CachedBagOStuff { /** * @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 ); } diff --git a/tests/phpunit/includes/session/UserInfoTest.php b/tests/phpunit/includes/session/UserInfoTest.php index c38edd694a..4d79a9567a 100644 --- a/tests/phpunit/includes/session/UserInfoTest.php +++ b/tests/phpunit/includes/session/UserInfoTest.php @@ -41,7 +41,7 @@ class UserInfoTest extends MediaWikiTestCase { $this->assertSame( $user->getId(), $userinfo->getId() ); $this->assertSame( $user->getName(), $userinfo->getName() ); $this->assertSame( $user->getToken( true ), $userinfo->getToken() ); - $this->assertInstanceOf( 'User', $userinfo->getUser() ); + $this->assertInstanceOf( User::class, $userinfo->getUser() ); $userinfo2 = $userinfo->verified(); $this->assertNotSame( $userinfo2, $userinfo ); $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo ); @@ -51,7 +51,7 @@ class UserInfoTest extends MediaWikiTestCase { $this->assertSame( $user->getId(), $userinfo2->getId() ); $this->assertSame( $user->getName(), $userinfo2->getName() ); $this->assertSame( $user->getToken( true ), $userinfo2->getToken() ); - $this->assertInstanceOf( 'User', $userinfo2->getUser() ); + $this->assertInstanceOf( User::class, $userinfo2->getUser() ); $this->assertSame( $userinfo2, $userinfo2->verified() ); $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 ); @@ -76,7 +76,7 @@ class UserInfoTest extends MediaWikiTestCase { $this->assertSame( $user->getId(), $userinfo->getId() ); $this->assertSame( $user->getName(), $userinfo->getName() ); $this->assertSame( $user->getToken( true ), $userinfo->getToken() ); - $this->assertInstanceOf( 'User', $userinfo->getUser() ); + $this->assertInstanceOf( User::class, $userinfo->getUser() ); $userinfo2 = $userinfo->verified(); $this->assertNotSame( $userinfo2, $userinfo ); $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo ); @@ -86,7 +86,7 @@ class UserInfoTest extends MediaWikiTestCase { $this->assertSame( $user->getId(), $userinfo2->getId() ); $this->assertSame( $user->getName(), $userinfo2->getName() ); $this->assertSame( $user->getToken( true ), $userinfo2->getToken() ); - $this->assertInstanceOf( 'User', $userinfo2->getUser() ); + $this->assertInstanceOf( User::class, $userinfo2->getUser() ); $this->assertSame( $userinfo2, $userinfo2->verified() ); $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 ); @@ -103,7 +103,7 @@ class UserInfoTest extends MediaWikiTestCase { $this->assertSame( $user->getId(), $userinfo->getId() ); $this->assertSame( $user->getName(), $userinfo->getName() ); $this->assertSame( '', $userinfo->getToken() ); - $this->assertInstanceOf( 'User', $userinfo->getUser() ); + $this->assertInstanceOf( User::class, $userinfo->getUser() ); $userinfo2 = $userinfo->verified(); $this->assertNotSame( $userinfo2, $userinfo ); $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo ); @@ -113,7 +113,7 @@ class UserInfoTest extends MediaWikiTestCase { $this->assertSame( $user->getId(), $userinfo2->getId() ); $this->assertSame( $user->getName(), $userinfo2->getName() ); $this->assertSame( '', $userinfo2->getToken() ); - $this->assertInstanceOf( 'User', $userinfo2->getUser() ); + $this->assertInstanceOf( User::class, $userinfo2->getUser() ); $this->assertSame( $userinfo2, $userinfo2->verified() ); $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 ); diff --git a/tests/phpunit/includes/site/CachingSiteStoreTest.php b/tests/phpunit/includes/site/CachingSiteStoreTest.php index adf95e6cde..0fdcf6dab2 100644 --- a/tests/phpunit/includes/site/CachingSiteStoreTest.php +++ b/tests/phpunit/includes/site/CachingSiteStoreTest.php @@ -42,13 +42,13 @@ class CachingSiteStoreTest extends MediaWikiTestCase { $sites = $store->getSites(); - $this->assertInstanceOf( 'SiteList', $sites ); + $this->assertInstanceOf( SiteList::class, $sites ); /** * @var Site $site */ foreach ( $sites as $site ) { - $this->assertInstanceOf( 'Site', $site ); + $this->assertInstanceOf( Site::class, $site ); } foreach ( $testSites as $site ) { @@ -79,11 +79,11 @@ class CachingSiteStoreTest extends MediaWikiTestCase { $this->assertTrue( $store->saveSites( $sites ) ); $site = $store->getSite( 'ertrywuutr' ); - $this->assertInstanceOf( 'Site', $site ); + $this->assertInstanceOf( Site::class, $site ); $this->assertEquals( 'en', $site->getLanguageCode() ); $site = $store->getSite( 'sdfhxujgkfpth' ); - $this->assertInstanceOf( 'Site', $site ); + $this->assertInstanceOf( Site::class, $site ); $this->assertEquals( 'nl', $site->getLanguageCode() ); } @@ -91,7 +91,7 @@ class CachingSiteStoreTest extends MediaWikiTestCase { * @covers CachingSiteStore::reset */ public function testReset() { - $dbSiteStore = $this->getMockBuilder( 'SiteStore' ) + $dbSiteStore = $this->getMockBuilder( SiteStore::class ) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/phpunit/includes/site/DBSiteStoreTest.php b/tests/phpunit/includes/site/DBSiteStoreTest.php index ae85f8a1a2..7c16f6c51f 100644 --- a/tests/phpunit/includes/site/DBSiteStoreTest.php +++ b/tests/phpunit/includes/site/DBSiteStoreTest.php @@ -51,13 +51,13 @@ class DBSiteStoreTest extends MediaWikiTestCase { $sites = $store->getSites(); - $this->assertInstanceOf( 'SiteList', $sites ); + $this->assertInstanceOf( SiteList::class, $sites ); /** * @var Site $site */ foreach ( $sites as $site ) { - $this->assertInstanceOf( 'Site', $site ); + $this->assertInstanceOf( Site::class, $site ); } foreach ( $expectedSites as $site ) { @@ -88,13 +88,13 @@ class DBSiteStoreTest extends MediaWikiTestCase { $this->assertTrue( $store->saveSites( $sites ) ); $site = $store->getSite( 'ertrywuutr' ); - $this->assertInstanceOf( 'Site', $site ); + $this->assertInstanceOf( Site::class, $site ); $this->assertEquals( 'en', $site->getLanguageCode() ); $this->assertTrue( is_int( $site->getInternalId() ) ); $this->assertTrue( $site->getInternalId() >= 0 ); $site = $store->getSite( 'sdfhxujgkfpth' ); - $this->assertInstanceOf( 'Site', $site ); + $this->assertInstanceOf( Site::class, $site ); $this->assertEquals( 'nl', $site->getLanguageCode() ); $this->assertTrue( is_int( $site->getInternalId() ) ); $this->assertTrue( $site->getInternalId() >= 0 ); diff --git a/tests/phpunit/includes/site/FileBasedSiteLookupTest.php b/tests/phpunit/includes/site/FileBasedSiteLookupTest.php index ed6fbfeede..05aa6d393a 100644 --- a/tests/phpunit/includes/site/FileBasedSiteLookupTest.php +++ b/tests/phpunit/includes/site/FileBasedSiteLookupTest.php @@ -66,7 +66,7 @@ class FileBasedSiteLookupTest extends PHPUnit_Framework_TestCase { } private function getSiteLookup( SiteList $sites ) { - $siteLookup = $this->getMockBuilder( 'SiteLookup' ) + $siteLookup = $this->getMockBuilder( SiteLookup::class ) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/phpunit/includes/site/SiteExporterTest.php b/tests/phpunit/includes/site/SiteExporterTest.php index 09cdea7a08..3a41b5fc69 100644 --- a/tests/phpunit/includes/site/SiteExporterTest.php +++ b/tests/phpunit/includes/site/SiteExporterTest.php @@ -34,7 +34,7 @@ class SiteExporterTest extends PHPUnit_Framework_TestCase { use MediaWikiCoversValidator; public function testConstructor_InvalidArgument() { - $this->setExpectedException( 'InvalidArgumentException' ); + $this->setExpectedException( InvalidArgumentException::class ); new SiteExporter( 'Foo' ); } @@ -77,7 +77,7 @@ class SiteExporterTest extends PHPUnit_Framework_TestCase { } private function newSiteStore( SiteList $sites ) { - $store = $this->getMockBuilder( 'SiteStore' )->getMock(); + $store = $this->getMockBuilder( SiteStore::class )->getMock(); $store->expects( $this->once() ) ->method( 'saveSites' ) diff --git a/tests/phpunit/includes/site/SiteImporterTest.php b/tests/phpunit/includes/site/SiteImporterTest.php index 8a43bf8020..373dcc2912 100644 --- a/tests/phpunit/includes/site/SiteImporterTest.php +++ b/tests/phpunit/includes/site/SiteImporterTest.php @@ -34,7 +34,7 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase { use MediaWikiCoversValidator; private function newSiteImporter( array $expectedSites, $errorCount ) { - $store = $this->getMockBuilder( 'SiteStore' )->getMock(); + $store = $this->getMockBuilder( SiteStore::class )->getMock(); $store->expects( $this->once() ) ->method( 'saveSites' ) @@ -46,7 +46,7 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase { ->method( 'getSites' ) ->will( $this->returnValue( new SiteList() ) ); - $errorHandler = $this->getMockBuilder( 'Psr\Log\LoggerInterface' )->getMock(); + $errorHandler = $this->getMockBuilder( Psr\Log\LoggerInterface::class )->getMock(); $errorHandler->expects( $this->exactly( $errorCount ) ) ->method( 'error' ); @@ -148,9 +148,9 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase { } public function testImportFromXML_malformed() { - $this->setExpectedException( 'Exception' ); + $this->setExpectedException( Exception::class ); - $store = $this->getMockBuilder( 'SiteStore' )->getMock(); + $store = $this->getMockBuilder( SiteStore::class )->getMock(); $importer = new SiteImporter( $store ); $importer->importFromXML( 'THIS IS NOT XML' ); } diff --git a/tests/phpunit/includes/site/SiteTest.php b/tests/phpunit/includes/site/SiteTest.php index 59f046b2ef..ac5f956e7a 100644 --- a/tests/phpunit/includes/site/SiteTest.php +++ b/tests/phpunit/includes/site/SiteTest.php @@ -283,12 +283,12 @@ class SiteTest extends MediaWikiTestCase { * @covers Site::unserialize */ public function testSerialization( Site $site ) { - $this->assertInstanceOf( 'Serializable', $site ); + $this->assertInstanceOf( Serializable::class, $site ); $serialization = serialize( $site ); $newInstance = unserialize( $serialization ); - $this->assertInstanceOf( 'Site', $newInstance ); + $this->assertInstanceOf( Site::class, $newInstance ); $this->assertEquals( $serialization, serialize( $newInstance ) ); } diff --git a/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php b/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php index 6514beb01f..c411ed8799 100644 --- a/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php +++ b/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php @@ -100,7 +100,7 @@ class SitesCacheFileBuilderTest extends PHPUnit_Framework_TestCase { } private function getSiteLookup( SiteList $sites ) { - $siteLookup = $this->getMockBuilder( 'SiteLookup' ) + $siteLookup = $this->getMockBuilder( SiteLookup::class ) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/phpunit/includes/skins/SkinFactoryTest.php b/tests/phpunit/includes/skins/SkinFactoryTest.php index 0944ea2c0c..4289fd9188 100644 --- a/tests/phpunit/includes/skins/SkinFactoryTest.php +++ b/tests/phpunit/includes/skins/SkinFactoryTest.php @@ -11,7 +11,7 @@ class SkinFactoryTest extends MediaWikiTestCase { return new SkinFallback(); } ); $this->assertTrue( true ); // No exception thrown - $this->setExpectedException( 'InvalidArgumentException' ); + $this->setExpectedException( InvalidArgumentException::class ); $factory->register( 'invalid', 'Invalid', 'Invalid callback' ); } @@ -20,7 +20,7 @@ class SkinFactoryTest extends MediaWikiTestCase { */ public function testMakeSkinWithNoBuilders() { $factory = new SkinFactory(); - $this->setExpectedException( 'SkinException' ); + $this->setExpectedException( SkinException::class ); $factory->makeSkin( 'nobuilderregistered' ); } @@ -32,7 +32,7 @@ class SkinFactoryTest extends MediaWikiTestCase { $factory->register( 'unittest', 'Unittest', function () { return true; // Not a Skin object } ); - $this->setExpectedException( 'UnexpectedValueException' ); + $this->setExpectedException( UnexpectedValueException::class ); $factory->makeSkin( 'unittest' ); } @@ -46,8 +46,8 @@ class SkinFactoryTest extends MediaWikiTestCase { } ); $skin = $factory->makeSkin( 'testfallback' ); - $this->assertInstanceOf( 'Skin', $skin ); - $this->assertInstanceOf( 'SkinFallback', $skin ); + $this->assertInstanceOf( Skin::class, $skin ); + $this->assertInstanceOf( SkinFallback::class, $skin ); $this->assertEquals( 'fallback', $skin->getSkinName() ); } diff --git a/tests/phpunit/includes/skins/SkinTemplateTest.php b/tests/phpunit/includes/skins/SkinTemplateTest.php index e8260ac2ee..06b0667738 100644 --- a/tests/phpunit/includes/skins/SkinTemplateTest.php +++ b/tests/phpunit/includes/skins/SkinTemplateTest.php @@ -7,13 +7,12 @@ * * @author Bene* < benestar.wikimedia@gmail.com > */ - class SkinTemplateTest extends MediaWikiTestCase { /** * @dataProvider makeListItemProvider */ public function testMakeListItem( $expected, $key, $item, $options, $message ) { - $template = $this->getMockForAbstractClass( 'BaseTemplate' ); + $template = $this->getMockForAbstractClass( BaseTemplate::class ); $this->assertEquals( $expected, diff --git a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php index f79f6e48c5..9ac546dc51 100644 --- a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php +++ b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php @@ -83,7 +83,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase { SpecialPageFactory::resetList(); $page = SpecialPageFactory::getPage( 'testdummy' ); - $this->assertInstanceOf( 'SpecialPage', $page ); + $this->assertInstanceOf( SpecialPage::class, $page ); $page2 = SpecialPageFactory::getPage( 'testdummy' ); $this->assertEquals( $shouldReuseInstance, $page2 === $page, "Should re-use instance:" ); @@ -93,7 +93,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase { * @covers SpecialPageFactory::getNames */ public function testGetNames() { - $this->mergeMwGlobalArrayValue( 'wgSpecialPages', [ 'testdummy' => 'SpecialAllPages' ] ); + $this->mergeMwGlobalArrayValue( 'wgSpecialPages', [ 'testdummy' => SpecialAllPages::class ] ); SpecialPageFactory::resetList(); $names = SpecialPageFactory::getNames(); diff --git a/tests/phpunit/includes/specialpage/SpecialPageTest.php b/tests/phpunit/includes/specialpage/SpecialPageTest.php index c665f3cf13..2ad397299b 100644 --- a/tests/phpunit/includes/specialpage/SpecialPageTest.php +++ b/tests/phpunit/includes/specialpage/SpecialPageTest.php @@ -67,7 +67,7 @@ class SpecialPageTest extends MediaWikiTestCase { $specialPage->getContext()->setUser( $user ); $specialPage->getContext()->setLanguage( Language::factory( 'en' ) ); - $this->setExpectedException( 'UserNotLoggedIn', $expected ); + $this->setExpectedException( UserNotLoggedIn::class, $expected ); // $specialPage->requireLogin( [ $reason [, $title ] ] ) call_user_func_array( diff --git a/tests/phpunit/includes/specials/ImageListPagerTest.php b/tests/phpunit/includes/specials/ImageListPagerTest.php index 22bdefdff3..10c6d04c9e 100644 --- a/tests/phpunit/includes/specials/ImageListPagerTest.php +++ b/tests/phpunit/includes/specials/ImageListPagerTest.php @@ -8,7 +8,6 @@ * * @group Database */ - class ImageListPagerTest extends MediaWikiTestCase { /** * @expectedException MWException diff --git a/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php b/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php index 1208a20ce0..1d87a3a926 100644 --- a/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php +++ b/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php @@ -20,7 +20,7 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase { /** List query pages that can not be tested automatically */ protected $manualTest = [ - 'LinkSearchPage' + LinkSearchPage::class ]; /** @@ -30,7 +30,7 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase { * https://bugs.mysql.com/bug.php?id=10327 */ protected $reopensTempTable = [ - 'BrokenRedirects', + BrokenRedirects::class, ]; /** diff --git a/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php b/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php index ab3ac55324..05a63dbc49 100644 --- a/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php +++ b/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php @@ -19,7 +19,7 @@ class SpecialEditWatchlistTest extends SpecialPageTestBase { } public function testNotLoggedIn_throwsException() { - $this->setExpectedException( 'UserNotLoggedIn' ); + $this->setExpectedException( UserNotLoggedIn::class ); $this->executeSpecialPage(); } diff --git a/tests/phpunit/includes/specials/SpecialPreferencesTest.php b/tests/phpunit/includes/specials/SpecialPreferencesTest.php index c8158aeca8..bdfbb62e7e 100644 --- a/tests/phpunit/includes/specials/SpecialPreferencesTest.php +++ b/tests/phpunit/includes/specials/SpecialPreferencesTest.php @@ -25,7 +25,7 @@ class SpecialPreferencesTest extends MediaWikiTestCase { // Set a low limit $this->setMwGlobals( 'wgMaxSigChars', 2 ); - $user = $this->createMock( 'User' ); + $user = $this->createMock( User::class ); $user->expects( $this->any() ) ->method( 'isAnon' ) ->will( $this->returnValue( false ) ); diff --git a/tests/phpunit/includes/specials/SpecialSearchTest.php b/tests/phpunit/includes/specials/SpecialSearchTest.php index 94924ee1e7..f0a5726699 100644 --- a/tests/phpunit/includes/specials/SpecialSearchTest.php +++ b/tests/phpunit/includes/specials/SpecialSearchTest.php @@ -194,7 +194,7 @@ class SpecialSearchTest extends MediaWikiTestCase { ); $mockSearchEngine = $this->mockSearchEngine( $searchResults ); - $search = $this->getMockBuilder( 'SpecialSearch' ) + $search = $this->getMockBuilder( SpecialSearch::class ) ->setMethods( [ 'getSearchEngine' ] ) ->getMock(); $search->expects( $this->any() ) @@ -213,7 +213,7 @@ class SpecialSearchTest extends MediaWikiTestCase { } protected function mockSearchEngine( $results ) { - $mock = $this->getMockBuilder( 'SearchEngine' ) + $mock = $this->getMockBuilder( SearchEngine::class ) ->setMethods( [ 'searchText', 'searchTitle' ] ) ->getMock(); diff --git a/tests/phpunit/includes/specials/SpecialUncategorizedcategoriesTest.php b/tests/phpunit/includes/specials/SpecialUncategorizedcategoriesTest.php index 2ecef79bf1..80bd365f35 100644 --- a/tests/phpunit/includes/specials/SpecialUncategorizedcategoriesTest.php +++ b/tests/phpunit/includes/specials/SpecialUncategorizedcategoriesTest.php @@ -9,7 +9,7 @@ class UncategorizedCategoriesPageTest extends MediaWikiTestCase { */ public function testGetQueryInfo( $msgContent, $expected ) { $msg = new RawMessage( $msgContent ); - $mockContext = $this->getMockBuilder( 'RequestContext' )->getMock(); + $mockContext = $this->getMockBuilder( RequestContext::class )->getMock(); $mockContext->method( 'msg' )->willReturn( $msg ); $special = new UncategorizedCategoriesPage(); $special->setContext( $mockContext ); diff --git a/tests/phpunit/includes/specials/SpecialWatchlistTest.php b/tests/phpunit/includes/specials/SpecialWatchlistTest.php index a0fe33921f..5adbed813d 100644 --- a/tests/phpunit/includes/specials/SpecialWatchlistTest.php +++ b/tests/phpunit/includes/specials/SpecialWatchlistTest.php @@ -56,7 +56,7 @@ class SpecialWatchlistTest extends SpecialPageTestBase { } public function testNotLoggedIn_throwsException() { - $this->setExpectedException( 'UserNotLoggedIn' ); + $this->setExpectedException( UserNotLoggedIn::class ); $this->executeSpecialPage(); } diff --git a/tests/phpunit/includes/title/ForeignTitleTest.php b/tests/phpunit/includes/title/ForeignTitleTest.php index 25ff186b25..f2fccc7577 100644 --- a/tests/phpunit/includes/title/ForeignTitleTest.php +++ b/tests/phpunit/includes/title/ForeignTitleTest.php @@ -68,7 +68,7 @@ class ForeignTitleTest extends MediaWikiTestCase { } public function testUnknownNamespaceError() { - $this->setExpectedException( 'MWException' ); + $this->setExpectedException( MWException::class ); $title = new ForeignTitle( null, 'this', 'that' ); $title->getNamespaceId(); } diff --git a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php index e7ac940b92..e1b98ec341 100644 --- a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php +++ b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php @@ -64,7 +64,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase { * @return GenderCache */ private function getGenderCache() { - $genderCache = $this->getMockBuilder( 'GenderCache' ) + $genderCache = $this->getMockBuilder( GenderCache::class ) ->disableOriginalConstructor() ->getMock(); @@ -385,7 +385,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase { * @dataProvider provideParseTitle_invalid */ public function testParseTitle_invalid( $text ) { - $this->setExpectedException( 'MalformedTitleException' ); + $this->setExpectedException( MalformedTitleException::class ); $codec = $this->makeCodec( 'en' ); $codec->parseTitle( $text, NS_MAIN ); diff --git a/tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php b/tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php index 93ce08009f..008cf5d939 100644 --- a/tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php +++ b/tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php @@ -80,7 +80,7 @@ class SubpageImportTitleFactoryTest extends MediaWikiTestCase { * @dataProvider failureProvider */ public function testFailures( Title $rootPage ) { - $this->setExpectedException( 'MWException' ); + $this->setExpectedException( MWException::class ); new SubpageImportTitleFactory( $rootPage ); } } diff --git a/tests/phpunit/includes/title/TitleValueTest.php b/tests/phpunit/includes/title/TitleValueTest.php index f8335549f4..d221b431a0 100644 --- a/tests/phpunit/includes/title/TitleValueTest.php +++ b/tests/phpunit/includes/title/TitleValueTest.php @@ -78,7 +78,7 @@ class TitleValueTest extends MediaWikiTestCase { * @dataProvider badConstructorProvider */ public function testConstructionErrors( $ns, $text, $fragment, $interwiki ) { - $this->setExpectedException( 'InvalidArgumentException' ); + $this->setExpectedException( InvalidArgumentException::class ); new TitleValue( $ns, $text, $fragment, $interwiki ); } diff --git a/tests/phpunit/includes/upload/UploadStashTest.php b/tests/phpunit/includes/upload/UploadStashTest.php index f46ad20646..39acbb0740 100644 --- a/tests/phpunit/includes/upload/UploadStashTest.php +++ b/tests/phpunit/includes/upload/UploadStashTest.php @@ -105,7 +105,7 @@ class UploadStashTest extends MediaWikiTestCase { $stash->stashFile( $this->tmpFile ); $this->fail( 'Expected UploadStashFileException not thrown' ); } catch ( UploadStashFileException $e ) { - $this->assertInstanceOf( 'ILocalizedException', $e ); + $this->assertInstanceOf( ILocalizedException::class, $e ); } catch ( Exception $e ) { $this->fail( 'Unexpected exception class ' . get_class( $e ) ); } diff --git a/tests/phpunit/includes/user/BotPasswordTest.php b/tests/phpunit/includes/user/BotPasswordTest.php index 09cf350729..3bbc2dfaf2 100644 --- a/tests/phpunit/includes/user/BotPasswordTest.php +++ b/tests/phpunit/includes/user/BotPasswordTest.php @@ -32,14 +32,14 @@ class BotPasswordTest extends MediaWikiTestCase { $this->testUser = $this->getMutableTestUser(); $this->testUserName = $this->testUser->getUser()->getName(); - $mock1 = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock1 = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock1->expects( $this->any() )->method( 'isAttached' ) ->will( $this->returnValue( true ) ); $mock1->expects( $this->any() )->method( 'lookupUserNames' ) ->will( $this->returnValue( [ $this->testUserName => 42, 'UTDummy' => 43, 'UTInvalid' => 0 ] ) ); $mock1->expects( $this->never() )->method( 'lookupCentralIds' ); - $mock2 = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock2 = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock2->expects( $this->any() )->method( 'isAttached' ) ->will( $this->returnValue( false ) ); $mock2->expects( $this->any() )->method( 'lookupUserNames' ) @@ -96,7 +96,7 @@ class BotPasswordTest extends MediaWikiTestCase { public function testBasics() { $user = $this->testUser->getUser(); $bp = BotPassword::newFromUser( $user, 'BotPassword' ); - $this->assertInstanceOf( 'BotPassword', $bp ); + $this->assertInstanceOf( BotPassword::class, $bp ); $this->assertTrue( $bp->isSaved() ); $this->assertSame( 42, $bp->getUserCentralId() ); $this->assertSame( 'BotPassword', $bp->getAppId() ); @@ -124,7 +124,7 @@ class BotPasswordTest extends MediaWikiTestCase { 'user' => $user, 'appId' => 'DoesNotExist' ] ); - $this->assertInstanceOf( 'BotPassword', $bp ); + $this->assertInstanceOf( BotPassword::class, $bp ); $this->assertFalse( $bp->isSaved() ); $this->assertSame( 42, $bp->getUserCentralId() ); $this->assertSame( 'DoesNotExist', $bp->getAppId() ); @@ -137,7 +137,7 @@ class BotPasswordTest extends MediaWikiTestCase { 'restrictions' => MWRestrictions::newFromJson( '{"IPAddresses":["127.0.0.0/8"]}' ), 'grants' => [ 'test' ], ] ); - $this->assertInstanceOf( 'BotPassword', $bp ); + $this->assertInstanceOf( BotPassword::class, $bp ); $this->assertFalse( $bp->isSaved() ); $this->assertSame( 43, $bp->getUserCentralId() ); $this->assertSame( 'DoesNotExist2', $bp->getAppId() ); @@ -149,7 +149,7 @@ class BotPasswordTest extends MediaWikiTestCase { 'centralId' => 45, 'appId' => 'DoesNotExist' ] ); - $this->assertInstanceOf( 'BotPassword', $bp ); + $this->assertInstanceOf( BotPassword::class, $bp ); $this->assertFalse( $bp->isSaved() ); $this->assertSame( 45, $bp->getUserCentralId() ); $this->assertSame( 'DoesNotExist', $bp->getAppId() ); @@ -159,7 +159,7 @@ class BotPasswordTest extends MediaWikiTestCase { 'user' => $user, 'appId' => 'BotPassword' ] ); - $this->assertInstanceOf( 'BotPassword', $bp ); + $this->assertInstanceOf( BotPassword::class, $bp ); $this->assertFalse( $bp->isSaved() ); $this->assertNull( BotPassword::newUnsaved( [ @@ -187,12 +187,12 @@ class BotPasswordTest extends MediaWikiTestCase { $bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) ); $password = $bp->getPassword(); - $this->assertInstanceOf( 'Password', $password ); + $this->assertInstanceOf( Password::class, $password ); $this->assertTrue( $password->equals( 'foobaz' ) ); $bp->centralId = 44; $password = $bp->getPassword(); - $this->assertInstanceOf( 'InvalidPassword', $password ); + $this->assertInstanceOf( InvalidPassword::class, $password ); $bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) ); $dbw = wfGetDB( DB_MASTER ); @@ -203,21 +203,21 @@ class BotPasswordTest extends MediaWikiTestCase { __METHOD__ ); $password = $bp->getPassword(); - $this->assertInstanceOf( 'InvalidPassword', $password ); + $this->assertInstanceOf( InvalidPassword::class, $password ); } public function testInvalidateAllPasswordsForUser() { $bp1 = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) ); $bp2 = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 43, 'BotPassword' ) ); - $this->assertNotInstanceOf( 'InvalidPassword', $bp1->getPassword(), 'sanity check' ); - $this->assertNotInstanceOf( 'InvalidPassword', $bp2->getPassword(), 'sanity check' ); + $this->assertNotInstanceOf( InvalidPassword::class, $bp1->getPassword(), 'sanity check' ); + $this->assertNotInstanceOf( InvalidPassword::class, $bp2->getPassword(), 'sanity check' ); BotPassword::invalidateAllPasswordsForUser( $this->testUserName ); - $this->assertInstanceOf( 'InvalidPassword', $bp1->getPassword() ); - $this->assertNotInstanceOf( 'InvalidPassword', $bp2->getPassword() ); + $this->assertInstanceOf( InvalidPassword::class, $bp1->getPassword() ); + $this->assertNotInstanceOf( InvalidPassword::class, $bp2->getPassword() ); $bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) ); - $this->assertInstanceOf( 'InvalidPassword', $bp->getPassword() ); + $this->assertInstanceOf( InvalidPassword::class, $bp->getPassword() ); } public function testRemoveAllPasswordsForUser() { @@ -312,7 +312,7 @@ class BotPasswordTest extends MediaWikiTestCase { ); // Failed restriction - $request = $this->getMockBuilder( 'FauxRequest' ) + $request = $this->getMockBuilder( FauxRequest::class ) ->setMethods( [ 'getIP' ] ) ->getMock(); $request->expects( $this->any() )->method( 'getIP' ) @@ -333,7 +333,7 @@ class BotPasswordTest extends MediaWikiTestCase { 'sanity check' ); $status = BotPassword::login( "{$this->testUserName}@BotPassword", 'foobaz', $request ); - $this->assertInstanceOf( 'Status', $status ); + $this->assertInstanceOf( Status::class, $status ); $this->assertTrue( $status->isGood() ); $session = $status->getValue(); $this->assertInstanceOf( MediaWiki\Session\Session::class, $session ); @@ -368,7 +368,7 @@ class BotPasswordTest extends MediaWikiTestCase { $this->assertFalse( $bp->save( 'update', $passwordHash ) ); $this->assertTrue( $bp->save( 'insert', $passwordHash ) ); $bp2 = BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST ); - $this->assertInstanceOf( 'BotPassword', $bp2 ); + $this->assertInstanceOf( BotPassword::class, $bp2 ); $this->assertEquals( $bp->getUserCentralId(), $bp2->getUserCentralId() ); $this->assertEquals( $bp->getAppId(), $bp2->getAppId() ); $this->assertEquals( $bp->getToken(), $bp2->getToken() ); @@ -376,7 +376,7 @@ class BotPasswordTest extends MediaWikiTestCase { $this->assertEquals( $bp->getGrants(), $bp2->getGrants() ); $pw = TestingAccessWrapper::newFromObject( $bp )->getPassword(); if ( $password === null ) { - $this->assertInstanceOf( 'InvalidPassword', $pw ); + $this->assertInstanceOf( InvalidPassword::class, $pw ); } else { $this->assertTrue( $pw->equals( $password ) ); } @@ -388,11 +388,11 @@ class BotPasswordTest extends MediaWikiTestCase { $this->assertTrue( $bp->save( 'update' ) ); $this->assertNotEquals( $token, $bp->getToken() ); $bp2 = BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST ); - $this->assertInstanceOf( 'BotPassword', $bp2 ); + $this->assertInstanceOf( BotPassword::class, $bp2 ); $this->assertEquals( $bp->getToken(), $bp2->getToken() ); $pw = TestingAccessWrapper::newFromObject( $bp )->getPassword(); if ( $password === null ) { - $this->assertInstanceOf( 'InvalidPassword', $pw ); + $this->assertInstanceOf( InvalidPassword::class, $pw ); } else { $this->assertTrue( $pw->equals( $password ) ); } diff --git a/tests/phpunit/includes/user/CentralIdLookupTest.php b/tests/phpunit/includes/user/CentralIdLookupTest.php index 789cf08fbf..dc9fe2add8 100644 --- a/tests/phpunit/includes/user/CentralIdLookupTest.php +++ b/tests/phpunit/includes/user/CentralIdLookupTest.php @@ -9,16 +9,16 @@ use Wikimedia\TestingAccessWrapper; class CentralIdLookupTest extends MediaWikiTestCase { public function testFactory() { - $mock = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock = $this->getMockForAbstractClass( CentralIdLookup::class ); $this->setMwGlobals( [ 'wgCentralIdLookupProviders' => [ - 'local' => [ 'class' => 'LocalIdLookup' ], - 'local2' => [ 'class' => 'LocalIdLookup' ], + 'local' => [ 'class' => LocalIdLookup::class ], + 'local2' => [ 'class' => LocalIdLookup::class ], 'mock' => [ 'factory' => function () use ( $mock ) { return $mock; } ], - 'bad' => [ 'class' => 'stdClass' ], + 'bad' => [ 'class' => stdClass::class ], ], 'wgCentralIdLookupProvider' => 'mock', ] ); @@ -29,13 +29,13 @@ class CentralIdLookupTest extends MediaWikiTestCase { $local = CentralIdLookup::factory( 'local' ); $this->assertNotSame( $mock, $local ); - $this->assertInstanceOf( 'LocalIdLookup', $local ); + $this->assertInstanceOf( LocalIdLookup::class, $local ); $this->assertSame( $local, CentralIdLookup::factory( 'local' ) ); $this->assertSame( 'local', $local->getProviderId() ); $local2 = CentralIdLookup::factory( 'local2' ); $this->assertNotSame( $local, $local2 ); - $this->assertInstanceOf( 'LocalIdLookup', $local2 ); + $this->assertInstanceOf( LocalIdLookup::class, $local2 ); $this->assertSame( 'local2', $local2->getProviderId() ); $this->assertNull( CentralIdLookup::factory( 'unconfigured' ) ); @@ -44,14 +44,14 @@ class CentralIdLookupTest extends MediaWikiTestCase { public function testCheckAudience() { $mock = TestingAccessWrapper::newFromObject( - $this->getMockForAbstractClass( 'CentralIdLookup' ) + $this->getMockForAbstractClass( CentralIdLookup::class ) ); $user = static::getTestSysop()->getUser(); $this->assertSame( $user, $mock->checkAudience( $user ) ); $user = $mock->checkAudience( CentralIdLookup::AUDIENCE_PUBLIC ); - $this->assertInstanceOf( 'User', $user ); + $this->assertInstanceOf( User::class, $user ); $this->assertSame( 0, $user->getId() ); $this->assertNull( $mock->checkAudience( CentralIdLookup::AUDIENCE_RAW ) ); @@ -65,7 +65,7 @@ class CentralIdLookupTest extends MediaWikiTestCase { } public function testNameFromCentralId() { - $mock = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock->expects( $this->once() )->method( 'lookupCentralIds' ) ->with( $this->equalTo( [ 15 => null ] ), @@ -86,7 +86,7 @@ class CentralIdLookupTest extends MediaWikiTestCase { * @param bool $succeeds */ public function testLocalUserFromCentralId( $name, $succeeds ) { - $mock = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock->expects( $this->any() )->method( 'isAttached' ) ->will( $this->returnValue( true ) ); $mock->expects( $this->once() )->method( 'lookupCentralIds' ) @@ -101,13 +101,13 @@ class CentralIdLookupTest extends MediaWikiTestCase { 42, CentralIdLookup::AUDIENCE_RAW, CentralIdLookup::READ_LATEST ); if ( $succeeds ) { - $this->assertInstanceOf( 'User', $user ); + $this->assertInstanceOf( User::class, $user ); $this->assertSame( $name, $user->getName() ); } else { $this->assertNull( $user ); } - $mock = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock->expects( $this->any() )->method( 'isAttached' ) ->will( $this->returnValue( false ) ); $mock->expects( $this->once() )->method( 'lookupCentralIds' ) @@ -133,7 +133,7 @@ class CentralIdLookupTest extends MediaWikiTestCase { } public function testCentralIdFromName() { - $mock = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock->expects( $this->once() )->method( 'lookupUserNames' ) ->with( $this->equalTo( [ 'FooBar' => 0 ] ), @@ -149,7 +149,7 @@ class CentralIdLookupTest extends MediaWikiTestCase { } public function testCentralIdFromLocalUser() { - $mock = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock->expects( $this->any() )->method( 'isAttached' ) ->will( $this->returnValue( true ) ); $mock->expects( $this->once() )->method( 'lookupUserNames' ) @@ -167,7 +167,7 @@ class CentralIdLookupTest extends MediaWikiTestCase { ) ); - $mock = $this->getMockForAbstractClass( 'CentralIdLookup' ); + $mock = $this->getMockForAbstractClass( CentralIdLookup::class ); $mock->expects( $this->any() )->method( 'isAttached' ) ->will( $this->returnValue( false ) ); $mock->expects( $this->never() )->method( 'lookupUserNames' ); diff --git a/tests/phpunit/includes/user/UserArrayFromResultTest.php b/tests/phpunit/includes/user/UserArrayFromResultTest.php index cf980b1278..beaacec800 100644 --- a/tests/phpunit/includes/user/UserArrayFromResultTest.php +++ b/tests/phpunit/includes/user/UserArrayFromResultTest.php @@ -7,7 +7,7 @@ class UserArrayFromResultTest extends MediaWikiTestCase { private function getMockResultWrapper( $row = null, $numRows = 1 ) { - $resultWrapper = $this->getMockBuilder( 'ResultWrapper' ) + $resultWrapper = $this->getMockBuilder( Wikimedia\Rdbms\ResultWrapper::class ) ->disableOriginalConstructor(); $resultWrapper = $resultWrapper->getMock(); @@ -57,7 +57,7 @@ class UserArrayFromResultTest extends MediaWikiTestCase { $this->assertEquals( $resultWrapper, $object->res ); $this->assertSame( 0, $object->key ); - $this->assertInstanceOf( 'User', $object->current ); + $this->assertInstanceOf( User::class, $object->current ); $this->assertEquals( $username, $object->current->mName ); } @@ -88,7 +88,7 @@ class UserArrayFromResultTest extends MediaWikiTestCase { $username = 'addshore'; $userRow = $this->getRowWithUsername( $username ); $object = $this->getUserArrayFromResult( $this->getMockResultWrapper( $userRow ) ); - $this->assertInstanceOf( 'User', $object->current() ); + $this->assertInstanceOf( User::class, $object->current() ); $this->assertEquals( $username, $object->current()->mName ); } diff --git a/tests/phpunit/includes/user/UserTest.php b/tests/phpunit/includes/user/UserTest.php index ea7f715b5f..4c1a5fd103 100644 --- a/tests/phpunit/includes/user/UserTest.php +++ b/tests/phpunit/includes/user/UserTest.php @@ -121,7 +121,7 @@ class UserTest extends MediaWikiTestCase { $this->assertContains( 'nukeworld', $rights ); // Add a Session that limits rights - $mock = $this->getMockBuilder( stdclass::class ) + $mock = $this->getMockBuilder( stdClass::class ) ->setMethods( [ 'getAllowedUserRights', 'deregisterSession', 'getSessionId' ] ) ->getMock(); $mock->method( 'getAllowedUserRights' )->willReturn( [ 'test', 'writetest' ] ); diff --git a/tests/phpunit/includes/utils/BatchRowUpdateTest.php b/tests/phpunit/includes/utils/BatchRowUpdateTest.php index d80a61c4fb..f06a35319e 100644 --- a/tests/phpunit/includes/utils/BatchRowUpdateTest.php +++ b/tests/phpunit/includes/utils/BatchRowUpdateTest.php @@ -241,7 +241,7 @@ class BatchRowUpdateTest extends MediaWikiTestCase { protected function mockDb() { // @TODO: mock from Database // FIXME: the constructor normally sets mAtomicLevels and mSrvCache - $databaseMysql = $this->getMockBuilder( 'DatabaseMysqli' ) + $databaseMysql = $this->getMockBuilder( Wikimedia\Rdbms\DatabaseMysqli::class ) ->disableOriginalConstructor() ->getMock(); $databaseMysql->expects( $this->any() ) diff --git a/tests/phpunit/includes/utils/ClassCollectorTest.php b/tests/phpunit/includes/utils/ClassCollectorTest.php index 8e07b5efde..796d459a67 100644 --- a/tests/phpunit/includes/utils/ClassCollectorTest.php +++ b/tests/phpunit/includes/utils/ClassCollectorTest.php @@ -33,6 +33,12 @@ class ClassCollectorTest extends PHPUnit_Framework_TestCase { "class_alias( Foo::class, 'Bar' );", [ 'Bar' ], ], + [ + // Namespaced class is not currently supported. Must use namespace declaration + // earlier in the file. + "class_alias( Example\Foo::class, 'Bar' );", + [], + ], [ "namespace Example;\nclass Foo {}\nclass_alias( Foo::class, 'Bar' );", [ 'Example\Foo', 'Bar' ], diff --git a/tests/phpunit/includes/utils/MWRestrictionsTest.php b/tests/phpunit/includes/utils/MWRestrictionsTest.php index 4c05326275..c411e53319 100644 --- a/tests/phpunit/includes/utils/MWRestrictionsTest.php +++ b/tests/phpunit/includes/utils/MWRestrictionsTest.php @@ -21,7 +21,7 @@ class MWRestrictionsTest extends PHPUnit_Framework_TestCase { */ public function testNewDefault() { $ret = MWRestrictions::newDefault(); - $this->assertInstanceOf( 'MWRestrictions', $ret ); + $this->assertInstanceOf( MWRestrictions::class, $ret ); $this->assertSame( '{"IPAddresses":["0.0.0.0/0","::/0"]}', $ret->toJson() @@ -41,7 +41,7 @@ class MWRestrictionsTest extends PHPUnit_Framework_TestCase { public function testArray( $data, $expect ) { if ( $expect === true ) { $ret = MWRestrictions::newFromArray( $data ); - $this->assertInstanceOf( 'MWRestrictions', $ret ); + $this->assertInstanceOf( MWRestrictions::class, $ret ); $this->assertSame( $data, $ret->toArray() ); } else { try { @@ -89,7 +89,7 @@ class MWRestrictionsTest extends PHPUnit_Framework_TestCase { public function testJson( $json, $expect ) { if ( is_array( $expect ) ) { $ret = MWRestrictions::newFromJson( $json ); - $this->assertInstanceOf( 'MWRestrictions', $ret ); + $this->assertInstanceOf( MWRestrictions::class, $ret ); $this->assertSame( $expect, $ret->toArray() ); $this->assertSame( $json, $ret->toJson( false ) ); @@ -180,7 +180,7 @@ class MWRestrictionsTest extends PHPUnit_Framework_TestCase { public function provideCheck() { $ret = []; - $mockBuilder = $this->getMockBuilder( 'FauxRequest' ) + $mockBuilder = $this->getMockBuilder( FauxRequest::class ) ->setMethods( [ 'getIP' ] ); foreach ( self::provideCheckIP() as $checkIP ) { diff --git a/tests/phpunit/includes/utils/UIDGeneratorTest.php b/tests/phpunit/includes/utils/UIDGeneratorTest.php index 230c9354b9..c6b8bdd474 100644 --- a/tests/phpunit/includes/utils/UIDGeneratorTest.php +++ b/tests/phpunit/includes/utils/UIDGeneratorTest.php @@ -18,7 +18,7 @@ class UIDGeneratorTest extends PHPUnit_Framework_TestCase { * @covers UIDGenerator::newTimestampedUID88 */ public function testTimestampedUID( $method, $digitlen, $bits, $tbits, $hostbits ) { - $id = call_user_func( [ 'UIDGenerator', $method ] ); + $id = call_user_func( [ UIDGenerator::class, $method ] ); $this->assertEquals( true, ctype_digit( $id ), "UID made of digit characters" ); $this->assertLessThanOrEqual( $digitlen, strlen( $id ), "UID has the right number of digits" ); @@ -27,7 +27,7 @@ class UIDGeneratorTest extends PHPUnit_Framework_TestCase { $ids = []; for ( $i = 0; $i < 300; $i++ ) { - $ids[] = call_user_func( [ 'UIDGenerator', $method ] ); + $ids[] = call_user_func( [ UIDGenerator::class, $method ] ); } $lastId = array_shift( $ids ); diff --git a/tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php b/tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php index ef2486d152..5e36e94c87 100644 --- a/tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php +++ b/tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php @@ -1,15 +1,46 @@ getMockBuilder( CommentStore::class ) + ->disableOriginalConstructor() + ->getMock(); + $mockStore->expects( $this->any() ) + ->method( 'getFields' ) + ->willReturn( [ 'commentstore' => 'fields' ] ); + $mockStore->expects( $this->any() ) + ->method( 'getJoin' ) + ->willReturn( [ + 'tables' => [ 'commentstore' => 'table' ], + 'fields' => [ 'commentstore' => 'field' ], + 'joins' => [ 'commentstore' => 'join' ], + ] ); + return $mockStore; + } + + /** + * @param PHPUnit_Framework_MockObject_MockObject|Database $mockDb + * @return WatchedItemQueryService + */ + private function newService( $mockDb ) { + return new WatchedItemQueryService( + $this->getMockLoadBalancer( $mockDb ), + $this->getMockCommentStore() + ); + } + /** * @return PHPUnit_Framework_MockObject_MockObject|Database */ @@ -232,7 +263,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ] ), ] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $startFrom = null; @@ -392,7 +423,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $startFrom = [ '20160203123456', 42 ]; } ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); TestingAccessWrapper::newFromObject( $queryService )->extensions = [ $mockExtension ]; $startFrom = null; @@ -477,58 +508,11 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { [ [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ], null, + [ 'commentstore' => 'table' ], + [ 'commentstore' => 'field' ], [], - [ - 'rc_comment_text' => 'rc_comment', - 'rc_comment_data' => 'NULL', - 'rc_comment_cid' => 'NULL', - ], - [], - [], - [], - [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD ], - ], - [ - [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ], - null, - [ 'comment_rc_comment' => 'comment' ], - [ - 'rc_comment_text' => 'COALESCE( comment_rc_comment.comment_text, rc_comment )', - 'rc_comment_data' => 'comment_rc_comment.comment_data', - 'rc_comment_cid' => 'comment_rc_comment.comment_id', - ], - [], - [], - [ 'comment_rc_comment' => [ 'LEFT JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ], - [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_BOTH ], - ], - [ - [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ], - null, - [ 'comment_rc_comment' => 'comment' ], - [ - 'rc_comment_text' => 'COALESCE( comment_rc_comment.comment_text, rc_comment )', - 'rc_comment_data' => 'comment_rc_comment.comment_data', - 'rc_comment_cid' => 'comment_rc_comment.comment_id', - ], - [], - [], - [ 'comment_rc_comment' => [ 'LEFT JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ], - [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_NEW ], - ], - [ - [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_COMMENT ] ], - null, - [ 'comment_rc_comment' => 'comment' ], - [ - 'rc_comment_text' => 'comment_rc_comment.comment_text', - 'rc_comment_data' => 'comment_rc_comment.comment_data', - 'rc_comment_cid' => 'comment_rc_comment.comment_id', - ], [], - [], - [ 'comment_rc_comment' => [ 'JOIN', 'comment_rc_comment.comment_id = rc_comment_id' ] ], - [ 'wgCommentTableSchemaMigrationStage' => MIGRATION_NEW ], + [ 'commentstore' => 'join' ], ], [ [ 'includeFields' => [ WatchedItemQueryService::INCLUDE_PATROL_INFO ] ], @@ -836,23 +820,8 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { array $expectedExtraFields, array $expectedExtraConds, array $expectedDbOptions, - array $expectedExtraJoinConds, - array $globals = [] + array $expectedExtraJoinConds ) { - // Sigh. This test class doesn't extend MediaWikiTestCase, so we have to reinvent setMwGlobals(). - if ( $globals ) { - $resetGlobals = []; - foreach ( $globals as $k => $v ) { - $resetGlobals[$k] = $GLOBALS[$k]; - $GLOBALS[$k] = $v; - } - $reset = new ScopedCallback( function () use ( $resetGlobals ) { - foreach ( $resetGlobals as $k => $v ) { - $GLOBALS[$k] = $v; - } - } ); - } - $expectedTables = array_merge( [ 'recentchanges', 'watchlist', 'page' ], $expectedExtraTables ); $expectedFields = array_merge( [ @@ -904,7 +873,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ) ->will( $this->returnValue( [] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options, $startFrom ); @@ -941,7 +910,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $user = $this->getMockNonAnonUserWithIdAndNoPatrolRights( 1 ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, [ 'filters' => [ $filtersOption ] ] @@ -1002,7 +971,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ->method( 'getType' ) ->will( $this->returnValue( $dbType ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options ); @@ -1101,7 +1070,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $user = $this->getMockNonAnonUserWithIdAndRestrictedPermissions( 1, $notAllowedAction ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options ); $this->assertEmpty( $items ); @@ -1141,7 +1110,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ) ->will( $this->returnValue( [] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, [ 'allRevisions' => true ] ); @@ -1226,7 +1195,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $mockDb->expects( $this->never() ) ->method( $this->anything() ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $this->setExpectedException( InvalidArgumentException::class, $expectedInExceptionMessage ); @@ -1268,7 +1237,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ) ->will( $this->returnValue( [] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $items = $queryService->getWatchedItemsWithRecentChangeInfo( @@ -1310,7 +1279,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ) ->will( $this->returnValue( [] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $items = $queryService->getWatchedItemsWithRecentChangeInfo( @@ -1338,7 +1307,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ) ->will( $this->returnValue( [] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $otherUser = $this->getMockUnrestrictedNonAnonUserWithId( 2 ); $otherUser->expects( $this->once() ) @@ -1369,7 +1338,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $mockDb->expects( $this->never() ) ->method( $this->anything() ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockUnrestrictedNonAnonUserWithId( 1 ); $otherUser = $this->getMockUnrestrictedNonAnonUserWithId( 2 ); $otherUser->expects( $this->once() ) @@ -1406,7 +1375,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ] ), ] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $user = $this->getMockNonAnonUserWithId( 1 ); $items = $queryService->getWatchedItemsForUser( $user ); @@ -1506,7 +1475,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ) ->will( $this->returnValue( [] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $items = $queryService->getWatchedItemsForUser( $user, $options ); $this->assertEmpty( $items ); @@ -1619,7 +1588,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { ) ->will( $this->returnValue( [] ) ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $items = $queryService->getWatchedItemsForUser( $user, $options ); $this->assertEmpty( $items ); @@ -1657,7 +1626,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { array $options, $expectedInExceptionMessage ) { - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $this->getMockDb() ) ); + $queryService = $this->newService( $this->getMockDb() ); $this->setExpectedException( InvalidArgumentException::class, $expectedInExceptionMessage ); $queryService->getWatchedItemsForUser( $this->getMockNonAnonUserWithId( 1 ), $options ); @@ -1669,7 +1638,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $mockDb->expects( $this->never() ) ->method( $this->anything() ); - $queryService = new WatchedItemQueryService( $this->getMockLoadBalancer( $mockDb ) ); + $queryService = $this->newService( $mockDb ); $items = $queryService->getWatchedItemsForUser( $this->getMockAnonUser() ); $this->assertEmpty( $items ); diff --git a/tests/phpunit/includes/watcheditem/WatchedItemStoreIntegrationTest.php b/tests/phpunit/includes/watcheditem/WatchedItemStoreIntegrationTest.php index 61b62aa66b..3102929ec7 100644 --- a/tests/phpunit/includes/watcheditem/WatchedItemStoreIntegrationTest.php +++ b/tests/phpunit/includes/watcheditem/WatchedItemStoreIntegrationTest.php @@ -106,6 +106,23 @@ class WatchedItemStoreIntegrationTest extends MediaWikiTestCase { ); } + public function testWatchBatchAndClearItems() { + $user = $this->getUser(); + $title1 = Title::newFromText( 'WatchedItemStoreIntegrationTestPage1' ); + $title2 = Title::newFromText( 'WatchedItemStoreIntegrationTestPage2' ); + $store = MediaWikiServices::getInstance()->getWatchedItemStore(); + + $store->addWatchBatchForUser( $user, [ $title1, $title2 ] ); + + $this->assertTrue( $store->isWatched( $user, $title1 ) ); + $this->assertTrue( $store->isWatched( $user, $title2 ) ); + + $store->clearUserWatchedItems( $user ); + + $this->assertFalse( $store->isWatched( $user, $title1 ) ); + $this->assertFalse( $store->isWatched( $user, $title2 ) ); + } + public function testUpdateResetAndSetNotificationTimestamp() { $user = $this->getUser(); $otherUser = ( new TestUser( 'WatchedItemStoreIntegrationTestUser_otherUser' ) )->getUser(); diff --git a/tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php b/tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php index 82a11936a1..52e653cb4c 100644 --- a/tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php +++ b/tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php @@ -2,6 +2,7 @@ use MediaWiki\Linker\LinkTarget; use Wikimedia\Rdbms\LoadBalancer; use Wikimedia\ScopedCallback; +use Wikimedia\TestingAccessWrapper; /** * @author Addshore @@ -104,10 +105,82 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { return new WatchedItemStore( $loadBalancer, $cache, - $readOnlyMode + $readOnlyMode, + 1000 ); } + public function testClearWatchedItems() { + $user = $this->getMockNonAnonUserWithId( 7 ); + + $mockDb = $this->getMockDb(); + $mockDb->expects( $this->once() ) + ->method( 'selectField' ) + ->with( + 'watchlist', + 'COUNT(*)', + [ + 'wl_user' => $user->getId(), + ], + $this->isType( 'string' ) + ) + ->will( $this->returnValue( 12 ) ); + $mockDb->expects( $this->once() ) + ->method( 'delete' ) + ->with( + 'watchlist', + [ 'wl_user' => 7 ], + $this->isType( 'string' ) + ); + + $mockCache = $this->getMockCache(); + $mockCache->expects( $this->never() )->method( 'get' ); + $mockCache->expects( $this->never() )->method( 'set' ); + $mockCache->expects( $this->once() ) + ->method( 'delete' ) + ->with( 'RM-KEY' ); + + $store = $this->newWatchedItemStore( + $this->getMockLoadBalancer( $mockDb ), + $mockCache, + $this->getMockReadOnlyMode() + ); + TestingAccessWrapper::newFromObject( $store ) + ->cacheIndex = [ 0 => [ 'F' => [ 7 => 'RM-KEY', 9 => 'KEEP-KEY' ] ] ]; + + $this->assertTrue( $store->clearUserWatchedItems( $user ) ); + } + + public function testClearWatchedItems_tooManyItemsWatched() { + $user = $this->getMockNonAnonUserWithId( 7 ); + + $mockDb = $this->getMockDb(); + $mockDb->expects( $this->once() ) + ->method( 'selectField' ) + ->with( + 'watchlist', + 'COUNT(*)', + [ + 'wl_user' => $user->getId(), + ], + $this->isType( 'string' ) + ) + ->will( $this->returnValue( 99999 ) ); + + $mockCache = $this->getMockCache(); + $mockCache->expects( $this->never() )->method( 'get' ); + $mockCache->expects( $this->never() )->method( 'set' ); + $mockCache->expects( $this->never() )->method( 'delete' ); + + $store = $this->newWatchedItemStore( + $this->getMockLoadBalancer( $mockDb ), + $mockCache, + $this->getMockReadOnlyMode() + ); + + $this->assertFalse( $store->clearUserWatchedItems( $user ) ); + } + public function testCountWatchedItems() { $user = $this->getMockNonAnonUserWithId( 1 ); @@ -1118,7 +1191,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $this->getMockNonAnonUserWithId( 1 ), new TitleValue( 0, 'SomeDbKey' ) ); - $this->assertInstanceOf( 'WatchedItem', $watchedItem ); + $this->assertInstanceOf( WatchedItem::class, $watchedItem ); $this->assertEquals( 1, $watchedItem->getUser()->getId() ); $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() ); $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() ); @@ -1317,7 +1390,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $this->getMockNonAnonUserWithId( 1 ), new TitleValue( 0, 'SomeDbKey' ) ); - $this->assertInstanceOf( 'WatchedItem', $watchedItem ); + $this->assertInstanceOf( WatchedItem::class, $watchedItem ); $this->assertEquals( 1, $watchedItem->getUser()->getId() ); $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() ); $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() ); @@ -1457,7 +1530,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $this->assertInternalType( 'array', $watchedItems ); $this->assertCount( 2, $watchedItems ); foreach ( $watchedItems as $watchedItem ) { - $this->assertInstanceOf( 'WatchedItem', $watchedItem ); + $this->assertInstanceOf( WatchedItem::class, $watchedItem ); } $this->assertEquals( new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ), @@ -1516,7 +1589,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $this->getMockReadOnlyMode() ); - $this->setExpectedException( 'InvalidArgumentException' ); + $this->setExpectedException( InvalidArgumentException::class ); $store->getWatchedItemsForUser( $this->getMockNonAnonUserWithId( 1 ), [ 'sort' => 'foo' ] diff --git a/tests/phpunit/maintenance/MaintenanceBaseTestCase.php b/tests/phpunit/maintenance/MaintenanceBaseTestCase.php index 9d73a512c8..bdcf7e5fa7 100644 --- a/tests/phpunit/maintenance/MaintenanceBaseTestCase.php +++ b/tests/phpunit/maintenance/MaintenanceBaseTestCase.php @@ -2,6 +2,7 @@ namespace MediaWiki\Tests\Maintenance; +use Maintenance; use MediaWikiTestCase; use Wikimedia\TestingAccessWrapper; diff --git a/tests/phpunit/maintenance/backupTextPassTest.php b/tests/phpunit/maintenance/backupTextPassTest.php index ce7197dc62..ad9bf3ea97 100644 --- a/tests/phpunit/maintenance/backupTextPassTest.php +++ b/tests/phpunit/maintenance/backupTextPassTest.php @@ -179,7 +179,7 @@ class TextPassDumperDatabaseTest extends DumpTestCase { ]; // The mock itself - $prefetchMock = $this->getMockBuilder( 'BaseDump' ) + $prefetchMock = $this->getMockBuilder( BaseDump::class ) ->setMethods( [ 'prefetch' ] ) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/phpunit/structure/ApiStructureTest.php b/tests/phpunit/structure/ApiStructureTest.php index cbc74f4ed7..6d8655137f 100644 --- a/tests/phpunit/structure/ApiStructureTest.php +++ b/tests/phpunit/structure/ApiStructureTest.php @@ -50,7 +50,7 @@ class ApiStructureTest extends MediaWikiTestCase { */ private function checkMessage( $msg, $what ) { $msg = ApiBase::makeMessage( $msg, self::getMain()->getContext() ); - $this->assertInstanceOf( 'Message', $msg, "$what message" ); + $this->assertInstanceOf( Message::class, $msg, "$what message" ); $this->assertTrue( $msg->exists(), "$what message {$msg->getKey()} exists" ); } diff --git a/tests/phpunit/structure/AutoLoaderTest.php b/tests/phpunit/structure/AutoLoaderTest.php index d45a58c5d3..217232e3b5 100644 --- a/tests/phpunit/structure/AutoLoaderTest.php +++ b/tests/phpunit/structure/AutoLoaderTest.php @@ -58,9 +58,9 @@ class AutoLoaderTest extends MediaWikiTestCase { continue; } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $contents = file_get_contents( $filePath ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $contents === false ) { $actual[$class] = "[couldn't read file '$filePath']"; diff --git a/tests/phpunit/suites/UploadFromUrlTestSuite.php b/tests/phpunit/suites/UploadFromUrlTestSuite.php index f2e6858abe..6fb428bb8e 100644 --- a/tests/phpunit/suites/UploadFromUrlTestSuite.php +++ b/tests/phpunit/suites/UploadFromUrlTestSuite.php @@ -30,7 +30,7 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite { $tmpGlobals['wgStylePath'] = '/skins'; $tmpGlobals['wgThumbnailScriptPath'] = false; $tmpGlobals['wgLocalFileRepo'] = [ - 'class' => 'LocalRepo', + 'class' => LocalRepo::class, 'name' => 'local', 'url' => 'http://example.com/images', 'hashLevels' => 2, diff --git a/tests/phpunit/tests/MediaWikiTestCaseTest.php b/tests/phpunit/tests/MediaWikiTestCaseTest.php index fb2957be83..1850f6fe5c 100644 --- a/tests/phpunit/tests/MediaWikiTestCaseTest.php +++ b/tests/phpunit/tests/MediaWikiTestCaseTest.php @@ -165,7 +165,7 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase { $logger2 = LoggerFactory::getInstance( 'foo' ); $this->assertNotSame( $logger1, $logger2 ); - $this->assertInstanceOf( '\Psr\Log\LoggerInterface', $logger2 ); + $this->assertInstanceOf( \Psr\Log\LoggerInterface::class, $logger2 ); } /** diff --git a/tests/qunit/QUnitTestResources.php b/tests/qunit/QUnitTestResources.php index b168754bf8..8390ab3c58 100644 --- a/tests/qunit/QUnitTestResources.php +++ b/tests/qunit/QUnitTestResources.php @@ -33,7 +33,6 @@ return [ 'mediawiki.page.startup', 'test.sinonjs', ], - 'position' => 'top', 'targets' => [ 'desktop', 'mobile' ], ], diff --git a/tests/qunit/data/testrunner.js b/tests/qunit/data/testrunner.js index 59432945c2..06c146c298 100644 --- a/tests/qunit/data/testrunner.js +++ b/tests/qunit/data/testrunner.js @@ -6,18 +6,21 @@ /** * Make a safe copy of localEnv: - * - Creates a copy so that when the same object reference to module hooks is - * used by multipe test hooks, our QUnit.module extension will not wrap the - * callbacks multiple times. Instead, they wrap using a new object. - * - Normalise setup/teardown to avoid having to repeat this in each extension + * - Creates a new object that inherits, instead of modifying the original. + * This prevents recursion in the event that a test suite stores inherits + * hooks object statically and passes it to multiple QUnit.module() calls. + * - Supporting QUnit 1.x 'setup' and 'teardown' hooks * (deprecated in QUnit 1.16, removed in QUnit 2). - * - Strip any other properties. */ function makeSafeEnv( localEnv ) { - return { - beforeEach: localEnv.setup || localEnv.beforeEach, - afterEach: localEnv.teardown || localEnv.afterEach - }; + var wrap = localEnv ? Object.create( localEnv ) : {}; + if ( wrap.setup ) { + wrap.beforeEach = wrap.beforeEach || wrap.setup; + } + if ( wrap.teardown ) { + wrap.afterEach = wrap.afterEach || wrap.teardown; + } + return wrap; } /** @@ -73,13 +76,16 @@ useFakeTimers: false, useFakeServer: false }; - // Extend QUnit.module to provide a Sinon sandbox. + // Extend QUnit.module with: + // - Add support for QUnit 1.x 'setup' and 'teardown' hooks + // - Add a Sinon sandbox to the test context. + // - Add a test fixture to the test context. ( function () { var orgModule = QUnit.module; QUnit.module = function ( name, localEnv, executeNow ) { - var orgBeforeEach, orgAfterEach, orgExecute; + var orgExecute, orgBeforeEach, orgAfterEach; if ( nested ) { - // In a nested module, don't re-run our handlers. + // In a nested module, don't re-add our hooks, QUnit does that already. return orgModule.apply( this, arguments ); } if ( arguments.length === 2 && typeof localEnv === 'function' ) { @@ -98,49 +104,17 @@ }; } - localEnv = localEnv || {}; + localEnv = makeSafeEnv( localEnv ); orgBeforeEach = localEnv.beforeEach; orgAfterEach = localEnv.afterEach; + localEnv.beforeEach = function () { + // Sinon sandbox var config = sinon.getConfig( sinon.config ); config.injectInto = this; sinon.sandbox.create( config ); - if ( orgBeforeEach ) { - return orgBeforeEach.apply( this, arguments ); - } - }; - localEnv.afterEach = function () { - var ret; - if ( orgAfterEach ) { - ret = orgAfterEach.apply( this, arguments ); - } - - this.sandbox.verifyAndRestore(); - return ret; - }; - return orgModule( name, localEnv, executeNow ); - }; - }() ); - - // Extend QUnit.module to provide a fixture element. - ( function () { - var orgModule = QUnit.module; - QUnit.module = function ( name, localEnv, executeNow ) { - var orgBeforeEach, orgAfterEach; - if ( nested ) { - // In a nested module, don't re-run our handlers. - return orgModule.apply( this, arguments ); - } - if ( arguments.length === 2 && typeof localEnv === 'function' ) { - executeNow = localEnv; - localEnv = undefined; - } - - localEnv = localEnv || {}; - orgBeforeEach = localEnv.beforeEach; - orgAfterEach = localEnv.afterEach; - localEnv.beforeEach = function () { + // Fixture element this.fixture = document.createElement( 'div' ); this.fixture.id = 'qunit-fixture'; document.body.appendChild( this.fixture ); @@ -154,23 +128,11 @@ if ( orgAfterEach ) { ret = orgAfterEach.apply( this, arguments ); } - + this.sandbox.verifyAndRestore(); this.fixture.parentNode.removeChild( this.fixture ); return ret; }; - return orgModule( name, localEnv, executeNow ); - }; - }() ); - // Extend QUnit.module to normalise localEnv. - // NOTE: This MUST be the last QUnit.module extension so that the above extensions - // may safely modify the object and assume beforeEach/afterEach. - ( function () { - var orgModule = QUnit.module; - QUnit.module = function ( name, localEnv, executeNow ) { - if ( typeof localEnv === 'object' ) { - localEnv = makeSafeEnv( localEnv ); - } return orgModule( name, localEnv, executeNow ); }; }() ); @@ -239,98 +201,101 @@ } return function ( orgEnv ) { - var localEnv = orgEnv ? makeSafeEnv( orgEnv ) : {}; - // MediaWiki env testing - localEnv.config = orgEnv && orgEnv.config || {}; - localEnv.messages = orgEnv && orgEnv.messages || {}; - - return { - beforeEach: function () { - // Greetings, mock environment! - mw.config = new MwMap(); - mw.config.set( freshConfigCopy( localEnv.config ) ); - mw.messages = new MwMap(); - mw.messages.set( freshMessagesCopy( localEnv.messages ) ); - // Update reference to mw.messages - mw.jqueryMsg.setParserDefaults( { - messages: mw.messages - } ); - - this.suppressWarnings = suppressWarnings; - this.restoreWarnings = restoreWarnings; + var localEnv, orgBeforeEach, orgAfterEach; - // Start tracking ajax requests - $( document ).on( 'ajaxSend', trackAjax ); - - if ( localEnv.beforeEach ) { - return localEnv.beforeEach.apply( this, arguments ); - } - }, + localEnv = makeSafeEnv( orgEnv ); + // MediaWiki env testing + localEnv.config = localEnv.config || {}; + localEnv.messages = localEnv.messages || {}; - afterEach: function () { - var timers, pending, $activeLen, ret; + orgBeforeEach = localEnv.beforeEach; + orgAfterEach = localEnv.afterEach; - if ( localEnv.afterEach ) { - ret = localEnv.afterEach.apply( this, arguments ); - } + localEnv.beforeEach = function () { + // Greetings, mock environment! + mw.config = new MwMap(); + mw.config.set( freshConfigCopy( localEnv.config ) ); + mw.messages = new MwMap(); + mw.messages.set( freshMessagesCopy( localEnv.messages ) ); + // Update reference to mw.messages + mw.jqueryMsg.setParserDefaults( { + messages: mw.messages + } ); + + this.suppressWarnings = suppressWarnings; + this.restoreWarnings = restoreWarnings; + + // Start tracking ajax requests + $( document ).on( 'ajaxSend', trackAjax ); - // Stop tracking ajax requests - $( document ).off( 'ajaxSend', trackAjax ); + if ( orgBeforeEach ) { + return orgBeforeEach.apply( this, arguments ); + } + }; + localEnv.afterEach = function () { + var timers, pending, $activeLen, ret; - // As a convenience feature, automatically restore warnings if they're - // still suppressed by the end of the test. - restoreWarnings(); + if ( orgAfterEach ) { + ret = orgAfterEach.apply( this, arguments ); + } - // Farewell, mock environment! - mw.config = liveConfig; - mw.messages = liveMessages; - // Restore reference to mw.messages - mw.jqueryMsg.setParserDefaults( { - messages: liveMessages + // Stop tracking ajax requests + $( document ).off( 'ajaxSend', trackAjax ); + + // As a convenience feature, automatically restore warnings if they're + // still suppressed by the end of the test. + restoreWarnings(); + + // Farewell, mock environment! + mw.config = liveConfig; + mw.messages = liveMessages; + // Restore reference to mw.messages + mw.jqueryMsg.setParserDefaults( { + messages: liveMessages + } ); + + // Tests should use fake timers or wait for animations to complete + // Check for incomplete animations/requests/etc and throw if there are any. + if ( $.timers && $.timers.length !== 0 ) { + timers = $.timers.length; + $.each( $.timers, function ( i, timer ) { + var node = timer.elem; + mw.log.warn( 'Unfinished animation #' + i + ' in ' + timer.queue + ' queue on ' + + mw.html.element( node.nodeName.toLowerCase(), $( node ).getAttrs() ) + ); } ); + // Force animations to stop to give the next test a clean start + $.timers = []; + $.fx.stop(); - // Tests should use fake timers or wait for animations to complete - // Check for incomplete animations/requests/etc and throw if there are any. - if ( $.timers && $.timers.length !== 0 ) { - timers = $.timers.length; - $.each( $.timers, function ( i, timer ) { - var node = timer.elem; - mw.log.warn( 'Unfinished animation #' + i + ' in ' + timer.queue + ' queue on ' + - mw.html.element( node.nodeName.toLowerCase(), $( node ).getAttrs() ) - ); - } ); - // Force animations to stop to give the next test a clean start - $.timers = []; - $.fx.stop(); - - throw new Error( 'Unfinished animations: ' + timers ); - } + throw new Error( 'Unfinished animations: ' + timers ); + } - // Test should use fake XHR, wait for requests, or call abort() - $activeLen = $.active; - if ( $activeLen !== undefined && $activeLen !== 0 ) { - pending = ajaxRequests.filter( function ( ajax ) { - return ajax.xhr.state() === 'pending'; - } ); - if ( pending.length !== $activeLen ) { - mw.log.warn( 'Pending requests does not match jQuery.active count' ); - } - // Force requests to stop to give the next test a clean start - ajaxRequests.forEach( function ( ajax, i ) { - mw.log.warn( - 'AJAX request #' + i + ' (state: ' + ajax.xhr.state() + ')', - ajax.options - ); - ajax.xhr.abort(); - } ); - ajaxRequests = []; - - throw new Error( 'Pending AJAX requests: ' + pending.length + ' (active: ' + $activeLen + ')' ); + // Test should use fake XHR, wait for requests, or call abort() + $activeLen = $.active; + if ( $activeLen !== undefined && $activeLen !== 0 ) { + pending = ajaxRequests.filter( function ( ajax ) { + return ajax.xhr.state() === 'pending'; + } ); + if ( pending.length !== $activeLen ) { + mw.log.warn( 'Pending requests does not match jQuery.active count' ); } + // Force requests to stop to give the next test a clean start + ajaxRequests.forEach( function ( ajax, i ) { + mw.log.warn( + 'AJAX request #' + i + ' (state: ' + ajax.xhr.state() + ')', + ajax.options + ); + ajax.xhr.abort(); + } ); + ajaxRequests = []; - return ret; + throw new Error( 'Pending AJAX requests: ' + pending.length + ' (active: ' + $activeLen + ')' ); } + + return ret; }; + return localEnv; }; }() ); @@ -657,4 +622,31 @@ } ); } ); + QUnit.module( 'testrunner-hooks-outer', function () { + var beforeHookWasExecuted = false, + afterHookWasExecuted = false; + QUnit.module( 'testrunner-hooks', { + before: function () { + beforeHookWasExecuted = true; + + // This way we can be sure that module `testrunner-hook-after` will always + // be executed after module `testrunner-hooks` + QUnit.module( 'testrunner-hooks-after' ); + QUnit.test( + '`after` hook for module `testrunner-hooks` was executed', + function ( assert ) { + assert.ok( afterHookWasExecuted ); + } + ); + }, + after: function () { + afterHookWasExecuted = true; + } + } ); + + QUnit.test( '`before` hook was executed', function ( assert ) { + assert.ok( beforeHookWasExecuted ); + } ); + } ); + }( jQuery, mediaWiki, QUnit ) ); diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js index 8ad1290016..50fa6d1509 100644 --- a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js +++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js @@ -22,4 +22,93 @@ ); } ); } ); + + QUnit.test( '.isCategory("")', function ( assert ) { + this.server.respondWith( /titles=$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true}' + ] ); + return new mw.Api().isCategory( '' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + + QUnit.test( '.isCategory("#")', function ( assert ) { + this.server.respondWith( /titles=%23$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true,"query":{"normalized":[{"fromencoded":false,"from":"#","to":""}]}}' + ] ); + return new mw.Api().isCategory( '#' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + + QUnit.test( '.isCategory("mw:")', function ( assert ) { + this.server.respondWith( /titles=mw%3A$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true,"query":{"interwiki":[{"title":"mw:","iw":"mw"}]}}' + ] ); + return new mw.Api().isCategory( 'mw:' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + + QUnit.test( '.isCategory("|")', function ( assert ) { + this.server.respondWith( /titles=%1F%7C$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true,"query":{"pages":[{"title":"|","invalidreason":"The requested page title contains invalid characters: \\"|\\".","invalid":true}]}}' + ] ); + return new mw.Api().isCategory( '|' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + + QUnit.test( '.getCategories("")', function ( assert ) { + this.server.respondWith( /titles=$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true}' + ] ); + return new mw.Api().getCategories( '' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + + QUnit.test( '.getCategories("#")', function ( assert ) { + this.server.respondWith( /titles=%23$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true,"query":{"normalized":[{"fromencoded":false,"from":"#","to":""}]}}' + ] ); + return new mw.Api().getCategories( '#' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + + QUnit.test( '.getCategories("mw:")', function ( assert ) { + this.server.respondWith( /titles=mw%3A$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true,"query":{"interwiki":[{"title":"mw:","iw":"mw"}]}}' + ] ); + return new mw.Api().getCategories( 'mw:' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + + QUnit.test( '.getCategories("|")', function ( assert ) { + this.server.respondWith( /titles=%1F%7C$/, [ + 200, + { 'Content-Type': 'application/json' }, + '{"batchcomplete":true,"query":{"pages":[{"title":"|","invalidreason":"The requested page title contains invalid characters: \\"|\\".","invalid":true}]}}' + ] ); + return new mw.Api().getCategories( '|' ).then( function ( response ) { + assert.equal( response, false ); + } ); + } ); + }( mediaWiki ) ); diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.edit.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.edit.test.js index 13d7dcc287..4ce7c5db03 100644 --- a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.edit.test.js +++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.edit.test.js @@ -47,6 +47,47 @@ } ); } ); + QUnit.test( 'edit( mw.Title, transform String )', function ( assert ) { + this.server.respond( function ( req ) { + if ( /query.+titles=Sandbox/.test( req.url ) ) { + req.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( { + curtimestamp: '2016-01-02T12:00:00Z', + query: { + pages: [ { + pageid: 1, + ns: 0, + title: 'Sandbox', + revisions: [ { + timestamp: '2016-01-01T12:00:00Z', + contentformat: 'text/x-wiki', + contentmodel: 'wikitext', + content: 'Sand.' + } ] + } ] + } + } ) ); + } + if ( /edit.+basetimestamp=2016-01-01.+starttimestamp=2016-01-02.+text=Box%2E/.test( req.requestBody ) ) { + req.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( { + edit: { + result: 'Success', + oldrevid: 11, + newrevid: 13, + newtimestamp: '2016-01-03T12:00:00Z' + } + } ) ); + } + } ); + + return new mw.Api() + .edit( new mw.Title( 'Sandbox' ), function ( revision ) { + return revision.content.replace( 'Sand', 'Box' ); + } ) + .then( function ( edit ) { + assert.equal( edit.newrevid, 13 ); + } ); + } ); + QUnit.test( 'edit( title, transform Promise )', function ( assert ) { this.server.respond( function ( req ) { if ( /query.+titles=Async/.test( req.url ) ) { @@ -129,6 +170,32 @@ } ); } ); + QUnit.test( 'edit( invalid-title, transform String )', function ( assert ) { + this.server.respond( function ( req ) { + if ( /query.+titles=%1F%7C/.test( req.url ) ) { + req.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( { + query: { + pages: [ { + title: '|', + invalidreason: 'The requested page title contains invalid characters: "|".', + invalid: true + } ] + } + } ) ); + } + } ); + + return new mw.Api() + .edit( '|', function ( revision ) { + return revision.content.replace( 'Sand', 'Box' ); + } ) + .then( function () { + return $.Deferred().reject( 'Unexpected success' ); + }, function ( reason ) { + assert.equal( reason, 'invalidtitle' ); + } ); + } ); + QUnit.test( 'create( title, content )', function ( assert ) { this.server.respond( function ( req ) { if ( /edit.+text=Sand/.test( req.requestBody ) ) { diff --git a/thumb.php b/thumb.php index 7c3e757241..3b714135bc 100644 --- a/thumb.php +++ b/thumb.php @@ -235,9 +235,9 @@ function wfStreamThumb( array $params ) { // Fix IE brokenness $imsString = preg_replace( '/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"] ); // Calculate time - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $imsUnix = strtotime( $imsString ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( wfTimestamp( TS_UNIX, $img->getTimestamp() ) <= $imsUnix ) { HttpStatus::header( 304 ); return; @@ -337,7 +337,16 @@ function wfStreamThumb( array $params ) { return; } - list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath ); + $thumbProxyUrl = $img->getRepo()->getThumbProxyUrl(); + + if ( strlen( $thumbProxyUrl ) ) { + wfProxyThumbnailRequest( $img, $thumbName ); + // No local fallback when in proxy mode + return; + } else { + // Generate the thumbnail locally + list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath ); + } /** @var MediaTransformOutput|MediaTransformError|bool $thumb */ @@ -377,6 +386,43 @@ function wfStreamThumb( array $params ) { } } +/** + * Proxies thumbnail request to a service that handles thumbnailing + * + * @param File $img + * @param string $thumbName + */ +function wfProxyThumbnailRequest( $img, $thumbName ) { + $thumbProxyUrl = $img->getRepo()->getThumbProxyUrl(); + + // Instead of generating the thumbnail ourselves, we proxy the request to another service + $thumbProxiedUrl = $thumbProxyUrl . $img->getThumbRel( $thumbName ); + + $req = MWHttpRequest::factory( $thumbProxiedUrl ); + $secret = $img->getRepo()->getThumbProxySecret(); + + // Pass a secret key shared with the proxied service if any + if ( strlen( $secret ) ) { + $req->setHeader( 'X-Swift-Secret', $secret ); + } + + // Send request to proxied service + $status = $req->execute(); + + // Simply serve the response from the proxied service as-is + header( 'HTTP/1.1 ' . $req->getStatus() ); + + $headers = $req->getResponseHeaders(); + + foreach ( $headers as $key => $values ) { + foreach ( $values as $value ) { + header( $key . ': ' . $value, false ); + } + } + + echo $req->getContent(); +} + /** * Actually try to generate a new thumbnail * @@ -572,7 +618,7 @@ function wfExtractThumbParams( $file, $params ) { * @return void */ function wfThumbErrorText( $status, $msgText ) { - wfThumbError( $status, htmlspecialchars( $msgText ) ); + wfThumbError( $status, htmlspecialchars( $msgText, ENT_NOQUOTES ) ); } /** @@ -602,9 +648,10 @@ function wfThumbError( $status, $msgHtml, $msgText = null, $context = [] ) { if ( $wgShowHostnames ) { header( 'X-MW-Thumbnail-Renderer: ' . wfHostname() ); $url = htmlspecialchars( - isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' + isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '', + ENT_NOQUOTES ); - $hostname = htmlspecialchars( wfHostname() ); + $hostname = htmlspecialchars( wfHostname(), ENT_NOQUOTES ); $debug = "\n\n"; } else { $debug = '';