From: jenkins-bot Date: Thu, 8 Feb 2018 22:20:04 +0000 (+0000) Subject: Merge "jquery.textSelection: Implement 'encapsulateSelection' in terms of the other... X-Git-Tag: 1.31.0-rc.0~658 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=fdc57ad1c724b9296af2153b6f9e98712d54067b;hp=ce6be3292e7d44d06f0aba8b98fbbbab80c5630c Merge "jquery.textSelection: Implement 'encapsulateSelection' in terms of the other commands" --- diff --git a/RELEASE-NOTES-1.31 b/RELEASE-NOTES-1.31 index 84f814922d..88d927ef28 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 @@ -57,6 +59,7 @@ production. * 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 ==== diff --git a/autoload.php b/autoload.php index 09abbfff08..9618a8f7f3 100644 --- a/autoload.php +++ b/autoload.php @@ -1720,7 +1720,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 c79bdfb50c..c3ff8d6659 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "ext-mbstring": "*", "ext-xml": "*", "liuggio/statsd-php-client": "1.0.18", - "mediawiki/at-ease": "1.1.0", + "mediawiki/at-ease": "1.2.0", "oojs/oojs-ui": "0.25.2", "oyejorge/less.php": "1.7.0.14", "php": ">=5.5.9", 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/includes/DefaultSettings.php b/includes/DefaultSettings.php index 4a625cbf77..bdbeb70d6e 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -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. * @@ -2333,7 +2333,6 @@ $wgObjectCaches = [ 'apc' => [ 'class' => APCBagOStuff::class, 'reportDupes' => false ], 'apcu' => [ 'class' => APCUBagOStuff::class, 'reportDupes' => false ], - 'xcache' => [ 'class' => XCacheBagOStuff::class, 'reportDupes' => false ], 'wincache' => [ 'class' => WinCacheBagOStuff::class, 'reportDupes' => false ], 'memcached-php' => [ 'class' => MemcachedPhpBagOStuff::class, 'loggroup' => 'memcached' ], 'memcached-pecl' => [ 'class' => MemcachedPeclBagOStuff::class, 'loggroup' => 'memcached' ], 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/ServiceWiring.php b/includes/ServiceWiring.php index 397a7d25c3..3a9474be1d 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -398,8 +398,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 { @@ -477,7 +475,8 @@ return [ $store = new RevisionStore( $services->getDBLoadBalancer(), $blobStore, - $services->getMainWANObjectCache() + $services->getMainWANObjectCache(), + $services->getCommentStore() ); $store->setLogger( LoggerFactory::getInstance( 'RevisionStore' ) ); diff --git a/includes/Storage/RevisionStore.php b/includes/Storage/RevisionStore.php index bce3ba1729..d832104ca1 100644 --- a/includes/Storage/RevisionStore.php +++ b/includes/Storage/RevisionStore.php @@ -92,6 +92,11 @@ class RevisionStore */ private $cache; + /** + * @var CommentStore + */ + private $commentStore; + /** * @var LoggerInterface */ @@ -103,12 +108,14 @@ class RevisionStore * @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' ); @@ -116,6 +123,7 @@ class RevisionStore $this->loadBalancer = $loadBalancer; $this->blobStore = $blobStore; $this->cache = $cache; + $this->commentStore = $commentStore; $this->wikiId = $wikiId; $this->logger = new NullLogger(); } @@ -290,8 +298,8 @@ class RevisionStore } /** - * 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 * @@ -393,7 +401,7 @@ class RevisionStore } list( $commentFields, $commentCallback ) = - CommentStore::getStore()->insertWithTempTable( $dbw, 'rev_comment', $comment ); + $this->commentStore->insertWithTempTable( $dbw, 'rev_comment', $comment ); $row += $commentFields; if ( $this->contentHandlerUseDB ) { @@ -1069,7 +1077,7 @@ class RevisionStore $user = $this->getUserIdentityFromRowObject( $row, 'ar_' ); - $comment = CommentStore::getStore() + $comment = $this->commentStore // Legacy because $row may have come from self::selectFields() ->getCommentLegacy( $this->getDBConnection( DB_REPLICA ), 'ar_comment', $row, true ); @@ -1139,7 +1147,7 @@ class RevisionStore $user = $this->getUserIdentityFromRowObject( $row ); - $comment = CommentStore::getStore() + $comment = $this->commentStore // Legacy because $row may have come from self::selectFields() ->getCommentLegacy( $this->getDBConnection( DB_REPLICA ), 'rev_comment', $row, true ); @@ -1614,7 +1622,7 @@ class RevisionStore 'rev_sha1', ] ); - $commentQuery = CommentStore::getStore()->getJoin( 'rev_comment' ); + $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'] ); @@ -1671,7 +1679,7 @@ class RevisionStore * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` */ public function getArchiveQueryInfo() { - $commentQuery = CommentStore::getStore()->getJoin( 'ar_comment' ); + $commentQuery = $this->commentStore->getJoin( 'ar_comment' ); $ret = [ 'tables' => [ 'archive' ] + $commentQuery['tables'], 'fields' => [ diff --git a/includes/api/ApiFormatBase.php b/includes/api/ApiFormatBase.php index 471ce21553..18c36deb07 100644 --- a/includes/api/ApiFormatBase.php +++ b/includes/api/ApiFormatBase.php @@ -65,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() ) { @@ -212,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/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/filerepo/file/ForeignAPIFile.php b/includes/filerepo/file/ForeignAPIFile.php index 8dcb289abd..2a40942527 100644 --- a/includes/filerepo/file/ForeignAPIFile.php +++ b/includes/filerepo/file/ForeignAPIFile.php @@ -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/installer/Installer.php b/includes/installer/Installer.php index e42146d51b..439b370ce2 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' @@ -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; } } diff --git a/includes/installer/i18n/en.json b/includes/installer/i18n/en.json index fee7b13374..f1b70806b4 100644 --- a/includes/installer/i18n/en.json +++ b/includes/installer/i18n/en.json @@ -55,11 +55,10 @@ "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": "[https://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": "[https://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-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.", @@ -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/hu.json b/includes/installer/i18n/hu.json index 8ed9f438e4..b1d3841be0 100644 --- a/includes/installer/i18n/hu.json +++ b/includes/installer/i18n/hu.json @@ -18,8 +18,8 @@ "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,8 +51,8 @@ "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 [https://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ő.", @@ -64,7 +64,7 @@ "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.", @@ -77,7 +77,7 @@ "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,7 +212,7 @@ "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)", 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/libs/filebackend/FileBackendStore.php b/includes/libs/filebackend/FileBackendStore.php
index da8b4ce9da..dba5a1c700 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
diff --git a/includes/libs/filebackend/SwiftFileBackend.php b/includes/libs/filebackend/SwiftFileBackend.php
index 27ce212bad..e606162a28 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.
diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php
index d9398196f5..eec766b9d7 100644
--- a/includes/libs/objectcache/WANObjectCache.php
+++ b/includes/libs/objectcache/WANObjectCache.php
@@ -134,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;
@@ -284,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.
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/loadbalancer/LoadBalancer.php b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
index 4ce7c6c5a7..f41088251a 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
@@ -526,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
@@ -579,7 +579,7 @@ class LoadBalancer implements ILoadBalancer {
 	 * @return bool
 	 */
 	protected function doWait( $index, $open = false, $timeout = null ) {
-		$close = false; // close the connection afterwards
+		$timeout = max( 1, $timeout ?: $this->mWaitTimeout );
 
 		// Check if we already know that the DB has reached this point
 		$server = $this->getServerName( $index );
@@ -599,6 +599,7 @@ class LoadBalancer implements ILoadBalancer {
 		}
 
 		// 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 ) {
@@ -630,7 +631,6 @@ class LoadBalancer implements ILoadBalancer {
 			[ 'dbserver' => $server ]
 		);
 
-		$timeout = $timeout ?: $this->mWaitTimeout;
 		$result = $conn->masterPosWait( $this->mWaitForPos, $timeout );
 
 		if ( $result === null ) {
diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php
index 282d764239..cf990c2839 100644
--- a/includes/specialpage/ChangesListSpecialPage.php
+++ b/includes/specialpage/ChangesListSpecialPage.php
@@ -1625,13 +1625,9 @@ abstract class ChangesListSpecialPage extends SpecialPage {
 		# Collapsible
 		$collapsedState = $this->getRequest()->getCookie( 'changeslist-state' );
 		$collapsedClass = $collapsedState === 'collapsed' ? ' mw-collapsed' : '';
-		# Enhanced mode
-		$enhancedMode = $this->getRequest()->getBool( 'enhanced', $user->getOption( 'usenewrc' ) );
-		$enhancedClass = $enhancedMode ? ' mw-enhanced' : '';
 
-		$legendClasses = $collapsedClass . $enhancedClass;
 		$legend =
-			'
' . + '
' . $legendHeading . '
' . $legend . '
' . '
'; diff --git a/includes/utils/UIDGenerator.php b/includes/utils/UIDGenerator.php index 68ef57ae24..164615ae78 100644 --- a/includes/utils/UIDGenerator.php +++ b/includes/utils/UIDGenerator.php @@ -364,7 +364,7 @@ class UIDGenerator { $counter = null; // post-increment persistent counter value - // Use APC/eAccelerator/xcache if requested, available, and not in CLI mode; + // Use APC/etc if requested, available, and not in CLI mode; // Counter values would not survive accross script instances in CLI mode. $cache = null; if ( ( $flags & self::QUICK_VOLATILE ) && !wfIsCLI() ) { diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index ab2a94caa6..8e263b63e8 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -1131,7 +1131,7 @@ "right-upload": "Загрузка файлаў", "right-reupload": "Перазапіс існых файлаў", "right-reupload-own": "Перазапіс уласных існых файлаў", - "right-reupload-shared": "перазапіс файлаў з агульнага сховішча лякальнымі", + "right-reupload-shared": "Перазапіс файлаў з агульнага сховішча лякальнымі", "right-upload_by_url": "загрузка файлаў з URL-адрасу", "right-purge": "ачыстка кэшу старонак бяз запыту пацьверджаньня", "right-autoconfirmed": "ня дзейнічаюць абмежаваньні хуткасьці па IP", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index e8f0f45c1a..ff9c9a86d0 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -1577,7 +1577,7 @@ "img-auth-nologinnWL": "Не сте влезли в системата и „$1“ не е в разрешения списък.", "img-auth-nofile": "Файлът „$1“ не съществува.", "img-auth-isdir": "Опитвате се да осъществите достъп до директорията „$1“.\nРазрешен е само достъп до файловете.", - "img-auth-streaming": "Излъчване \"$1\"", + "img-auth-streaming": "Излъчване „$1“.", "img-auth-public": "Функцията на img_auth.php е да извлича файлове от частни уикита.\nТова уики е конфигурирано като публично.\nС цел оптимална сигурност, функцията img_auth.php е деактивирана.", "img-auth-noread": "Потребителят няма достъп за четене на „$1“.", "http-invalid-url": "Невалиден адрес: $1", @@ -2025,7 +2025,7 @@ "deletepage": "Изтриване", "confirm": "Потвърждаване", "excontent": "съдържанието беше: „$1“", - "excontentauthor": "съдържанието беше: „$1“, като единственият автор беше \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|беседа]])", + "excontentauthor": "съдържанието беше: „$1“, като единственият автор беше „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|беседа]])", "exbeforeblank": "премахнато преди това съдържание: „$1“", "delete-confirm": "Изтриване на „$1“", "delete-legend": "Изтриване", diff --git a/languages/i18n/bqi.json b/languages/i18n/bqi.json index 9b68a28e4d..2f2e150f2e 100644 --- a/languages/i18n/bqi.json +++ b/languages/i18n/bqi.json @@ -149,7 +149,7 @@ "search": "پئی جوٙری", "searchbutton": "پئی جوٙری", "go": "رۉ", - "searcharticle": "برو", + "searcharticle": "رۉ", "history": "گزارش صفحه", "history_short": "گزارش تاریخی", "history_small": "ڤیرگار", @@ -158,19 +158,19 @@ "print": "چاپ گرهڌن", "view": "ديئن", "view-foreign": "مئن $1 نه بوینین", - "edit": "اصلاح", + "edit": "ۋیرایشد", "create": "راس كردن", "create-local": "یأ توزی ڤولات نشيني إزافإ کونين", "delete": "حذف", "protect": "حفاظت وحمایت", "protect_change": "آلإشت کونين", "newpage": "صفحه تازه", - "talkpagelinktext": "چأک چئنە", + "talkpagelinktext": "چٱک چناٛ", "specialpage": "صفحه مخصوص", "personaltools": "ابزارهای شخصی", - "talk": "بحث", + "talk": "گٱپ", "views": "مشاهدات", - "toolbox": "اوزار گه", + "toolbox": "ٱۋزارا", "imagepage": "دیدن صفحه مدیا", "mediawikipage": "دیدن صفحه پیام", "templatepage": "دیدن صفحه قالب", @@ -188,7 +188,7 @@ "jumptonavigation": "راندن یا هدایت کردن", "jumptosearch": "جستن", "pool-errorunknown": "خطا نادیار", - "aboutsite": "راجوڤ بئ {{SITENAME}}", + "aboutsite": "راجوۋ باٛ {{SITENAME}}", "aboutpage": "Project:راجڤ بئ", "copyright": "محتوا باای شماره قابل دسترسیه\n $1.", "copyrightpage": "{{ns:project}}:کپی رایت", @@ -198,7 +198,7 @@ "disclaimerpage": "Project: تیە پوشنیدٙئنئ کولی", "edithelp": "کمک برای اصلاح", "helppage-top-gethelp": "هومیاري", - "mainpage": "سأرآسوٙنە", + "mainpage": "سرتال", "mainpage-description": "صفحه اصلی", "policy-url": "Project:خط مشی", "portal": "درگاه کاربران", @@ -215,12 +215,12 @@ "retrievedfrom": "دوڤارتئ جوٙری ز \"$1\"", "youhavenewmessages": "پیام تاره داری $1 ($2).", "youhavenewmessagesmulti": "ایسا پیام تازه دارین منه\n$1", - "editsection": "ڤیرایئشت کاری", + "editsection": "ۋیرایشد کردن", "editold": "اصلاح", "viewsourceold": "دیدن منبع", "editlink": "ڤیرایئشت", "viewsourcelink": "سئیل سرچشمه کنین", - "editsectionhint": "ڤیرایئشت بأرجا: $1", + "editsectionhint": "ۋیرایشد بٱرجا: $1", "toc": "محتواها", "showtoc": "نمایش", "hidetoc": "قایم", @@ -237,7 +237,7 @@ "site-atom-feed": "حأڤال خوٙنئ Atom سی $1", "page-rss-feed": "خبرخو RSS سی «$1»", "page-atom-feed": "هأڤال خۈن Atom سي $1", - "red-link-title": "$1 (چونو بألگئ یی نیدٙئس)", + "red-link-title": "$1 (چونو بلگاٛیی نیڌس)", "nstab-main": "بلگه", "nstab-user": "صفحه کاربر", "nstab-media": "بلگأ ڤارسگأري", @@ -248,7 +248,7 @@ "nstab-template": "قالب یا الگو", "nstab-help": "بألگإ هومیاری", "nstab-category": "دسته", - "mainpage-nstab": "سأرآسوٙنە", + "mainpage-nstab": "سرتال", "nosuchspecialpage": "چونو بلگاٛ ۋیجاٛیی دیاری نیکوناٛ", "error": "خطا", "databaseerror-query": "جوستکاری: $1", @@ -799,7 +799,7 @@ "watchlisttools-raw": "اصلاح لیست خام پی‌گیری‌ها", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|چک چنه]])", "version": "ترجمه یا تفسیر", - "specialpages": "صفحات ویژه", + "specialpages": "بلگاٛ آ ۋیجٱ", "tag-filter": "[[Special:سردیسا|سرديس]] فيلتر:", "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|سرديس|سرديسا}}]]: $2)", "logentry-delete-delete": "$1 بألگأ {{GENDER:$2|پاکسا ڤابيأ}} $3", diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index f4b5f6b152..d8aae31e23 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -84,7 +84,7 @@ "tog-enotifrevealaddr": "Näytä sähköpostiosoitteeni muille lähetetyissä ilmoituksissa", "tog-shownumberswatching": "Näytä sivua tarkkailevien käyttäjien määrä", "tog-oldsig": "Nykyinen allekirjoituksesi:", - "tog-fancysig": "Muotoilematon allekirjoitus ilman automaattista linkkiä", + "tog-fancysig": "Käsittele allekirjoitusta wikitekstinä (ilman automaattista linkkiä)", "tog-uselivepreview": "Näytä esikatselu lataamatta sivua uudelleen", "tog-forceeditsummary": "Huomauta minua, jos en ole kirjoittanut yhteenvetoa", "tog-watchlisthideown": "Piilota omat muokkaukset tarkkailulistalta", diff --git a/languages/i18n/kum.json b/languages/i18n/kum.json index 489bae1f8a..bd008e6f59 100644 --- a/languages/i18n/kum.json +++ b/languages/i18n/kum.json @@ -185,6 +185,7 @@ "headline_tip": "2 даражаны язывбашы", "nowiki_sample": "Форматланмагъа гере тюгюл матынны бери сал", "nowiki_tip": "Вики форматлавну сан этме", + "image_tip": "Гийирилген саплам", "media_tip": "Сапламгъа байланыв", "sig_tip": "Къол басымынг ва заман мюгьюрю", "hr_tip": "Гёнделен гьыз (къоралап къолла)", diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json index 25df335952..4fcbd645bf 100644 --- a/languages/i18n/lrc.json +++ b/languages/i18n/lrc.json @@ -78,15 +78,15 @@ "january": "جانۋیٱ", "february": "فۋریٱ", "march": "مارس", - "april": "آڤریل", - "may_long": "مئی", - "june": "جوٙأن", + "april": "آۋریل", + "may_long": "ماٛی", + "june": "جۊٱن", "july": "جوٙلای", "august": "آگوست", - "september": "سئپتامر", - "october": "ئوکتوبر", - "november": "نوڤامر", - "december": "دئسامر", + "september": "سپتامر", + "october": "اوکتوبر", + "november": "نوۋامر", + "december": "داٛسامر", "january-gen": "جانڤیە", "february-gen": "فئڤریە", "march-gen": "مارس", @@ -99,7 +99,7 @@ "october-gen": "ئوکتوبر", "november-gen": "نوڤامر", "december-gen": "دئسامر", - "jan": "جانڤیە", + "jan": "جانۋیٱ", "feb": "فۋریٱ", "mar": "مارس", "apr": "آڤریل", @@ -110,7 +110,7 @@ "sep": "سئپتامر", "oct": "ئوکتوڤر", "nov": "نوڤامر", - "dec": "دئسامر", + "dec": "داٛسامر", "january-date": "جانڤیە $1", "february-date": "فئڤریە $1", "march-date": "مارس $1", @@ -150,13 +150,13 @@ "mypage": "بألگە", "mytalk": "چأک چئنە", "anontalk": "دئبارە تیرنئشوٙن ئی آی پی قئسە بأکیت", - "navigation": "ناڤجوری", + "navigation": "ناۋجۊری", "and": " و", "faq": "ئف ئی کیوٙ", "actions": "کونئشتکاریا", - "namespaces": "نوم ڤأرگە یا", - "variants": "آلئشگأریا", - "navigation-heading": "نوم جاگە ناڤگأردی", + "namespaces": "نوم ۋارگٱیا", + "variants": "آلشتگریا", + "navigation-heading": "نوم جاگٱ ناۋگردی", "errorpagetitle": "غألأط", "returnto": "ڤورگأشتئن د $1.", "tagline": "د {{SITENAME}}", @@ -173,7 +173,7 @@ "print": "چاپ گئرئتئن", "view": "ديئن", "view-foreign": "د $1 نه بوینیت", - "edit": "ڤیرایئشت", + "edit": "ۋیرایشت", "edit-local": "توضی ڤولات نئشینی نە ڤیرایئشت بأکیت", "create": "راس كئردئن", "create-local": "بئ گئل توضی ڤولات نئشینی ئضاف بأکیت", @@ -186,26 +186,26 @@ "newpage": "بألگە نۊ", "talkpagelinktext": "چٱک چنٱ", "specialpage": "بألگە ڤیجە", - "personaltools": "أڤزاریا شأصقی", + "personaltools": "ٱۋزاریا شٱخسی", "talk": "گأپ", - "views": "ديئنيا", - "toolbox": "أڤزاریا", + "views": "دیاٛن", + "toolbox": "ٱۋزاریا", "imagepage": "ديئن بألگە جانیا", "mediawikipage": "ديئن بألگە پئيغوم", "templatepage": "ديئن بألگە چوٙأ", "viewhelppage": "ديئن بألگە هومیاری", "categorypage": "ديئن بألگە دأسە بأنی", "viewtalkpage": "دیئن چأک چئنە یا", - "otherlanguages": "د زوٙنا هأنی", + "otherlanguages": "د زۊنیا هٱنی", "redirectedfrom": "(ڤاگأردوٙنی د$1)", "redirectpagesub": "بألگە ڤاگأردوٙنی", "redirectto": "ڤاگأردوٙنی سی:", "lastmodifiedat": "ای بلگٱ ایسنیا آلشت بیٱ د $1، د $2.", "viewcount": "ئی بألگە ها د دأسرئسی {{PLURAL:$1|یئ گئل|$1 چأن گئل}}.", "protectedpage": "بألگە پأر و پیم کاری بییە", - "jumpto": "پئرئستئن د:", - "jumptonavigation": "ناڤجوٙری", - "jumptosearch": "پئی جوٙری", + "jumpto": "پراٛستن د:", + "jumptonavigation": "ناۋجۊری", + "jumptosearch": "پی جۊری", "view-pool-error": "د بأدبأختی،ئیسئ رئسینە جایا فئرە شولوٙغە.\nکاریاریا فئرە یی میهان ئی بألگە نە سئیل بأکأن.\nدئما یە کئ میهایت د نۊ ئی بألگە نە سئیل بأکیت یئ گوری آهئرە داری بأکیت.", "generic-pool-error": "د بأدبأختی،ئیسئ رئسینە جایا فئرە شولوٙغە.\nکاریاریا فئرە یی میهان ئی بألگە نە سئیل بأکأن.\nدئما یە کئ میهایت د نۊ ئی بألگە نە سئیل بأکیت یئ گوری آهئرە داری بأکیت.", "pool-timeout": "گات آهئرە داری سی قولف کئردئن تأموم بییە", @@ -224,7 +224,7 @@ "edithelp": "هومياری سی ڤیرایئشت", "helppage-top-gethelp": "هومياری", "mainpage": "سرآسۊنٱ", - "mainpage-description": "سأرآسوٙنە", + "mainpage-description": "سرآسۊنٱ", "policy-url": "پوروجە:رأدیارجوٙری", "portal": "دأرآسوٙنە کومولە یأکی", "portal-url": "پوروجٱ:درآسۊنٱ کومولٱیکی", @@ -461,9 +461,9 @@ "loginlanguagelabel": "زوٙن:$1", "suspicious-userlogout": "د حاست ڤئ دأر رأتئن شوما تیە پوشی بییە سی یە کئ ڤئ نأظأر یما کئ ڤئ سی یئ گئل دوڤارتە نیأر گأن یا یئ گئل پوروکسی کئ ها د ڤیرگە کأش کئل بییە.", "createacct-another-realname-tip": "نوم راستأکی دئل ڤئ حاییە.\nأر شوما ڤئنە نئها ئمایە بأکیت، یە سی هوم نئسبأت دأئن کاریاری سی کاریاش ڤئ کار گئرئتئ بوٙە.", - "pt-login": "ڤامین ئوٙمائن", + "pt-login": "ۋامین اۊمائن", "pt-login-button": "ڤامین ئوٙمائن", - "pt-createaccount": "حئساڤ راس بأکیت", + "pt-createaccount": "هساۋ راست بکیت", "pt-userlogout": "د ساموٙنە دئرئوٙمائن", "php-mail-error-unknown": "خأطا نادیار د آلئشتگئر PHP's mail()", "user-mail-no-addy": "سی کئل کئردئن أنجومانامە د یئ گئل أنجومانامە بی تیرنئشوٙن أنجومانامه تئلاش بییە.", @@ -1907,7 +1907,7 @@ "tooltip-whatlinkshere-invert": "ای جعون نه سی نهو کردن هوم پیوند بلگه یایی که نوم جاشو انتخاو بیه، انتخاو بکیت.", "namespace_association": "نوم جایا یکاگرته", "tooltip-namespace_association": "ای جعوه نه وارسی بکیت ای جعوه د ور گرته چک چنه یا داسون نوم ورگه شریکی و نوم ورگه انتخاو بیه ئه", - "blanknamespace": "أصلی", + "blanknamespace": "ٱسلی", "contributions": "{{GENDER:$1|کاریار}} هومیاریا", "contributions-title": "ھومیاری كاریار سی $1", "mycontris": "هومياریا", @@ -2251,12 +2251,12 @@ "tooltip-search": "پی جوری {{SITENAME}}", "tooltip-search-go": "رؤ د بلگه ای که یه نوم راستکی ها مینش الوت ار دش بوئه", "tooltip-search-fulltext": "بلگيانه سی چنس نیسسه یی پی جوری کو", - "tooltip-p-logo": "سرآسونه نه بونيت", + "tooltip-p-logo": "ساٛیل سرآسۊنٱ بکیت", "tooltip-n-mainpage": "سرآسونه نه بونيت", "tooltip-n-mainpage-description": "سرآسونه نه بونيت", "tooltip-n-portal": "دباره پروجه،شما می تونیت(تونيت) چی بکیت، د کجا ای چیانه بجوریت", "tooltip-n-currentevents": "ساوند دونسمنديايی كه هان د پيشومدل تازه باو پيدا كو", - "tooltip-n-recentchanges": "یه گل نومگه سی آلشتیا ایسنی د ویکی", + "tooltip-n-recentchanges": "یاٛ گاٛل نومگٱ سی آلشتکاریا د ۋیکی", "tooltip-n-randompage": "سوار كرد بلگه بختكی", "tooltip-n-help": "یه گل جاگه سی فهمسن", "tooltip-t-whatlinkshere": "یه گل نومگه د همه بلگه یایی كه ايچه هوم پیوند دارن", @@ -2267,7 +2267,7 @@ "tooltip-t-emailuser": "سی ای كارور ايميل كل كو", "tooltip-t-info": "دونسمنیا بیشتر دباره ای بلگه", "tooltip-t-upload": "سوارکردن جانیایا", - "tooltip-t-specialpages": "نومگه همه بلگه یا ویجه", + "tooltip-t-specialpages": "نومگٱ همٱ بلگٱیا ۋیجٱ", "tooltip-t-print": "نسقه پلا بيئنی سی ای بلگه", "tooltip-t-permalink": "هوم پیوند همیشه یی سی دوواره دیئن ای بلگه", "tooltip-ca-nstab-main": "ديئن مینونه بلگه", @@ -2347,7 +2347,7 @@ "pageinfo-hidden-categories": "$1{{PLURAL:$1|دسه|دسه يا}} قام بیه", "pageinfo-templates": "{{PLURAL:$1|چوئه|چوئه یا}} وه کار گرته بیه($1)", "pageinfo-transclusions": "{{PLURAL:$1|بلگه|بلگه یا}} وه کار گرته بیه د ($1)", - "pageinfo-toolboxlink": "دونسمنیا بلگه", + "pageinfo-toolboxlink": "دۊنسمنیا بلگٱ", "pageinfo-redirectsto": "واگردونی سی", "pageinfo-redirectsto-info": "دونسمنیا", "pageinfo-contentpage": "اشمارده بیه وه عنوان مینونه بلگه", @@ -3185,7 +3185,7 @@ "feedback-thanks": "منموندارتونیم! دمادار حوال حون شما د بلگه «[$1 $2]» ثبت بی.", "feedback-thanks-title": "دتو منمونیم!", "feedback-useragent": "راوط کاریا:", - "searchsuggest-search": "پاٛی جۊری", + "searchsuggest-search": "پی جۊری", "searchsuggest-containing": "د حال و بار مینونه دار...", "api-error-badtoken": "خطا مینجا:رازینه امنیتی اشتوا", "api-error-emptypage": "یه گل بلگه تازه راس بکیت،بلگه یا حالی صلادار کاری نیئن.", diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json index 12dc6b862f..8055a379f6 100644 --- a/languages/i18n/lt.json +++ b/languages/i18n/lt.json @@ -1360,7 +1360,7 @@ "rcfilters-filter-user-experience-level-newcomer-label": "Naujokai", "rcfilters-filter-user-experience-level-newcomer-description": "Registruoti naudotojai, turintys mažiau nei 10 keitimų ir 4 aktyvias dienas.", "rcfilters-filter-user-experience-level-learner-label": "Mokiniai", - "rcfilters-filter-user-experience-level-learner-description": "Registruoti naudotojai, kurių patirties lygis yra tarp „Naujokų“ ir „Patyrusių vartotojų“", + "rcfilters-filter-user-experience-level-learner-description": "Registruoti naudotojai, kurių patirties lygis yra tarp „Naujokų“ ir „Patyrusių vartotojų“.", "rcfilters-filter-user-experience-level-experienced-label": "Patyrę vartotojai", "rcfilters-filter-user-experience-level-experienced-description": "Registruoti naudotojai, turintys daugiau nei 500 keitimų ir 30 dienų veiklos.", "rcfilters-filtergroup-automated": "Automatiniai indeliai", @@ -3371,10 +3371,18 @@ "tag-mw-contentmodelchange-description": "Pakeitimai, kurie [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel keičia puslapio turinio modelį]", "tag-mw-new-redirect": "Naujas nukreipimas", "tag-mw-new-redirect-description": "Keitimai sukuriantys naują nukreipimą arba pakeičiantys nukreipimo puslapį", + "tag-mw-removed-redirect": "Pašalintas nukreipimas", + "tag-mw-removed-redirect-description": "Keitimai, paverčiantys nukreipiamąjį puslapį nenukreipiamuoju", + "tag-mw-changed-redirect-target": "Pakeistas nukreipimo puslapis", + "tag-mw-changed-redirect-target-description": "Keitimai, pakeičiantys nukreipimą iš vieno puslapio į kitą", + "tag-mw-blank": "Panaikinta", "tag-mw-blank-description": "Keitimai, ištrinantys visą puslapio turinį", "tag-mw-replace": "Pakeista", + "tag-mw-replace-description": "Keitimai, pašalinantys daugiau nei 90% puslapio turinio", "tag-mw-rollback": "Atmesti", + "tag-mw-rollback-description": "Keitimai, sugrąžinantys buvusią versiją naudojant atmetimo nuorodą", "tag-mw-undo": "Anuliuoti", + "tag-mw-undo-description": "Keitimai, anuliuojantys buvusią versiją naudojant anuliavimo nuorodą", "tags-title": "Žymos", "tags-intro": "Šiame puslapyje yra žymų, kuriomis programinė įranga gali pažymėti keitimus, sąrašas bei jų reikšmės.", "tags-tag": "Žymos pavadinimas", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index 342a1afbac..80bb903fa8 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -1505,7 +1505,7 @@ "upload-preferred": "{{PLURAL:$2|Претпочитан податотечен тип|Претпочитани податотечни типови}}: $1.", "upload-prohibited": "{{PLURAL:$2|Недозволен податотечен тип|Недозволени податотечни типови}}: $1.", "uploadlogpage": "Дневник на подигања", - "uploadlogpagetext": "Наведен е список на најновите подигања на податотеки.\nПогледнете ја [[Special:NewFiles|галеријата на нови податотеки]] за визуелен преглед.", + "uploadlogpagetext": "Наведен е список на најновите подигања на податотеки.\nПогледнете ја [[Special:NewFiles|галеријата на нови податотеки]] за нагледен преглед.", "filename": "Име на податотеката", "filedesc": "Опис", "fileuploadsummary": "Опис:", diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json index 517ae535a1..e10dd2b6bf 100644 --- a/languages/i18n/ml.json +++ b/languages/i18n/ml.json @@ -1036,7 +1036,7 @@ "prefswarning-warning": "താങ്കളുടെ ക്രമീകരണങ്ങളിൽ താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ ഇതുവരെ സേവ് ചെയ്തിട്ടില്ല.\n\"$1\" ഞെക്കാതെയാണ് താങ്കൾ ഈ താളിൽ നിന്നും പോകുന്നതെങ്കിൽ താങ്കളുടെ ക്രമീകരണങ്ങൾ സേവ് ചെയ്യപ്പെടുന്നതല്ല.", "prefs-tabs-navigation-hint": "സൂചന: ടാബുകളുടെ പട്ടികയിലെ ടാബുകളിലൂടെ നീങ്ങാൻ ഇടത്തും വലത്തും ആരോ കീകൾ ഉപയോഗിക്കാവുന്നതാണ്.", "userrights": "ഉപയോക്തൃ അവകാശ പരിപാലനം", - "userrights-lookup-user": "ഉപയോക്തൃസംഘങ്ങളെ പരിപാലിക്കുക", + "userrights-lookup-user": "ഉപയോക്താവിനെ തിരഞ്ഞെടുക്കുക", "userrights-user-editname": "ഒരു ഉപയോക്തൃനാമം ടൈപ്പു ചെയ്യുക:", "editusergroup": "{{GENDER:$1|ഉപയോക്തൃസംഘങ്ങൾ}} തിരുത്തുക", "editinguser": "{{GENDER:$1|user}} [[User:$1|$1]] $2 എന്ന ഉപയോക്താവിന്റെ ഉപയോക്തൃ അവകാശങ്ങൾ തിരുത്തുന്നു", @@ -1050,6 +1050,12 @@ "userrights-nodatabase": "$1 എന്ന ഡാറ്റാബേസ് നിലവിലില്ല അല്ലെങ്കിൽ പ്രാദേശികമല്ല.", "userrights-changeable-col": "താങ്കൾക്ക് മാറ്റാവുന്ന സംഘങ്ങൾ", "userrights-unchangeable-col": "താങ്കൾക്ക് മാറ്റാനാവാത്ത സംഘങ്ങൾ", + "userrights-expiry-current": "$1-നു കാലഹരണപ്പെടുന്നു", + "userrights-expiry-none": "കാലഹരണപ്പെടില്ല", + "userrights-expiry": "കാലഹരണപ്പെടേണ്ടത്:", + "userrights-expiry-existing": "നിലവിലെ കാലഹരണ കാലാവധി: $3, $2", + "userrights-expiry-othertime": "മറ്റ് കാലയളവ്:", + "userrights-expiry-options": "ഒരു ദിവസം:1 day,ഒരു ആഴ്ച:1 week,ഒരു മാസം:1 month,3 മാസം:3 months,6 മാസം:6 months,ഒരു വർഷം:1 year", "userrights-conflict": "ഉപയോക്തൃ അവകാശങ്ങളുടെ മാറ്റം സമരസപ്പെടായ്കയുണ്ടായി! ദയവായി താങ്കളുടെ മാറ്റങ്ങൾ വീണ്ടും സംശോധനം ചെയ്ത് സ്ഥിരീകരിച്ച് നടപ്പിലാക്കുക.", "group": "സംഘം:", "group-user": "ഉപയോക്താക്കൾ", diff --git a/languages/i18n/mzn.json b/languages/i18n/mzn.json index 77f1af4e7b..2aeac60550 100644 --- a/languages/i18n/mzn.json +++ b/languages/i18n/mzn.json @@ -492,6 +492,7 @@ "recentchanges-label-plusminus": "صفحه‌ی ِقایده انده بایت تغییر هاکرده", "recentchanges-legend-heading": "اختصارون:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|تازه بساته صفحه‌ئون]] ره هم هارشین)", + "rcfilters-legend-heading": "اختصاری کلماتِ معنی:", "rclistfrom": "نِمایش تازه‌دگاردسته‌ئون با شروع از $3 $2", "rcshowhideminor": "پچیک دچی‌یه‌ئون $1", "rcshowhideminor-show": "سِراق هِدائِن", @@ -552,14 +553,24 @@ "sharedupload-desc-here": "این پرونده $1 دله دَره و ممکن هسته دیگه پروژه‌ئون دله هم استفاده بواشه.\nتوضیحات موجود [$2 پرونده توضیحات صفحه میون اونجه]، سِراق هِدا وونّه.", "shared-repo-name-wikimediacommons": "ویکی‌تلمبار", "upload-disallowed-here": "متأسفانه شما نتوندی این پرونده ره بازنویس هاکنی.", + "unwatchedpages": "دمبال‌نکارده صفحه‌ئون", + "unusedtemplates": "استفاده‌نیی شابلون‌ها", "randompage": "شانسی صفحه", "statistics": "آمار", + "doubleredirects": "دِ وَری دکشی‌ئون", + "brokenredirects": "رِقِد بورده دکشی‌ئون", + "withoutinterwiki": "صفحه‌ئونی که دیگه زوونون جه میون‌ویکی ندارنه", "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}", "nmembers": "$1 {{PLURAL:$1|عضو}}", "specialpage-empty": "این صفحه دله هچّی دَنی‌یه", + "lonelypages": "صغیر صفحه‌ئون", + "uncategorizedcategories": "رج‌وندی نیی رج‌ئون", + "uncategorizedtemplates": "رج‌وندی نَیی شابلون‌ها", "unusedcategories": "کـار نـأزو رج‌ئون", "unusedimages": "کـار نأزو فایل‌ئون", + "wantedcategories": "بخاستی رج‌ئون", "wantedpages": "صفحه‌ئونی که خامبی", + "wantedtemplates": "بخاستی شابلون‌ها", "prefixindex": "تموم صفحه‌ئون پیشوند دار", "shortpages": "پچیک صفحه‌ئون", "longpages": "بِلند صفحه‌ئون", @@ -581,6 +592,7 @@ "allarticles": "همه صفحه‌ئون", "allpagessubmit": "بـور", "categories": "رج‌ئون", + "deletedcontributions": "حذف‌بیی دچی‌یه‌ئون", "linksearch": "دأیا لـیـنـک‌ئون", "listgrouprights-members": "(کارورون لیست)", "mailnologintext": "برای برسنی‌ین پوست الکترونیکی به کارورون دیگه ونه [[Special:UserLogin|بورین سامانه دله]] و نشونی پوست الکترونیکی معتبری تو [[Special:Preferences|ترجیحات]] خادت ره داشته بایی.", @@ -656,6 +668,8 @@ "whatlinkshere-hidetrans": "$1 تراگنجانشون", "whatlinkshere-hidelinks": "$1 لینک", "whatlinkshere-filters": "فیلترون", + "block": "کارور ره دَوِستن", + "unblock": "کارور ره وا اینگوئن", "blockip": "کارور ره دَوستن", "ipbsubmit": "ای کارور دأبه‌س بأوه", "ipboptions": "۲ ساعت:2 hours,۱ روز:1 day,۳ روز:3 days,۱ هفته:1 week,۲ هفته:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌پایون:infinite", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index d0fccc4a34..f905add7cd 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -770,13 +770,13 @@ "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону $1, који укључује и вашу IP адресу ($4) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је $2", "viewpagelogs": "Дневници ове странице", "nohistory": "Не постоји историја измена ове странице.", - "currentrev": "Текућа измена", - "currentrev-asof": "Текућа измена од $2 у $3", + "currentrev": "Тренутна измена", + "currentrev-asof": "Тренутна измена од $2 у $3", "revisionasof": "Измена од $2 у $3", "revision-info": "Измена од $1 коју је {{GENDER:$6|уредио $2|уредила $2}}$7", "previousrevision": "← Старија измена", "nextrevision": "Новија измена →", - "currentrevisionlink": "Текућа измена", + "currentrevisionlink": "Тренутна измена", "cur": "трен", "next": "след", "last": "разл", diff --git a/languages/i18n/yi.json b/languages/i18n/yi.json index 1dd47aed0b..c4c61e2571 100644 --- a/languages/i18n/yi.json +++ b/languages/i18n/yi.json @@ -3051,6 +3051,7 @@ "tag-filter-submit": "פֿילטער", "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|טאַג|טאַגן}}]]: $2)", "tag-mw-new-redirect": "נייע ווייטערפֿירונג", + "tag-mw-changed-redirect-target": "ווייטערפֿירונג־ציל געענדערט", "tag-mw-undo": "אַנולירן", "tags-title": "טאַגן", "tags-intro": "דער בלאַט ווײַזט די טאַגן מיט וואס דאס ווייכווארג קען צייכענען אַ רעדאַגירונג, און זייער באַטייַט.", diff --git a/maintenance/dictionary/mediawiki.dic b/maintenance/dictionary/mediawiki.dic index 7c3c95d712..e3c7e0ffdd 100644 --- a/maintenance/dictionary/mediawiki.dic +++ b/maintenance/dictionary/mediawiki.dic @@ -4585,7 +4585,6 @@ wrongpassword x xanalytics xbitmap -xcache xcancel xdebug xdiff diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less index c379e2702a..e9e331b171 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less @@ -55,24 +55,10 @@ } } - &-enhancedView { - .mw-changeslist-legend { - z-index: 1; - - &:not( .mw-collapsed ) { - .box-shadow( 0 1px 1px rgba( 0, 0, 0, 0.15 ) ); - } - } - } - .mw-changeslist-legend { background-color: @background-color-base; + position: relative; // We want to keep the legend accessible when results are overlaid border: 1px solid @colorGray12; - - &:not( .mw-enhanced ) { - // We want to keep the legend accessible when results are overlaid - position: relative; - } } .mw-changeslist-overlay { diff --git a/resources/src/mediawiki.special/mediawiki.special.changeslist.css b/resources/src/mediawiki.special/mediawiki.special.changeslist.css index 44adbf3dc9..65860ea08c 100644 --- a/resources/src/mediawiki.special/mediawiki.special.changeslist.css +++ b/resources/src/mediawiki.special/mediawiki.special.changeslist.css @@ -46,17 +46,11 @@ } .mw-changeslist-legend.mw-collapsed { - margin: 0; + margin-bottom: 0; } -/* Prevent pushing down of content if legend is initially collapsed */ -.mw-changeslist-legend.mw-collapsed ~ ul:first-of-type > li:first-child { +/* Prevent pushing down the content if legend is collapsed */ +.mw-changeslist-legend.mw-collapsed ~ ul:first-of-type > li:first-child, +.mw-changeslist-legend.mw-collapsed + h4 + div > table.mw-changeslist-line:first-child { clear: right; } - -/* Absolute positioning to avoid table overlap with floating elements */ -.mw-changeslist > .mw-changeslist-legend.mw-enhanced { - background-color: #fff; - position: absolute; - right: 0; -} diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php index 3f4c8c0c88..01a34b8220 100644 --- a/tests/phpunit/MediaWikiTestCase.php +++ b/tests/phpunit/MediaWikiTestCase.php @@ -267,7 +267,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { CACHE_MEMCACHED => $hashCache, 'apc' => $hashCache, 'apcu' => $hashCache, - 'xcache' => $hashCache, 'wincache' => $hashCache, ] + $baseConfig->get( 'ObjectCaches' ); diff --git a/tests/phpunit/includes/RevisionDbTestBase.php b/tests/phpunit/includes/RevisionDbTestBase.php index 511b109538..b36fd7dbb4 100644 --- a/tests/phpunit/includes/RevisionDbTestBase.php +++ b/tests/phpunit/includes/RevisionDbTestBase.php @@ -396,7 +396,8 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase { $store = new RevisionStore( $services->getDBLoadBalancer(), $services->getService( '_SqlBlobStore' ), - $services->getMainWANObjectCache() + $services->getMainWANObjectCache(), + $services->getCommentStore() ); $store->setContentHandlerUseDB( $this->getContentHandlerUseDB() ); diff --git a/tests/phpunit/includes/RevisionTest.php b/tests/phpunit/includes/RevisionTest.php index 872a23eb5a..57c0531602 100644 --- a/tests/phpunit/includes/RevisionTest.php +++ b/tests/phpunit/includes/RevisionTest.php @@ -1,5 +1,6 @@ getWANObjectCache(); - $blobStore = new RevisionStore( $lb, $this->getBlobStore(), $cache ); + $blobStore = new RevisionStore( + $lb, + $this->getBlobStore(), + $cache, + MediaWikiServices::getInstance()->getCommentStore() + ); return $blobStore; } diff --git a/tests/phpunit/includes/Storage/RevisionStoreDbTest.php b/tests/phpunit/includes/Storage/RevisionStoreDbTest.php index 6c908549ae..d31ca5c395 100644 --- a/tests/phpunit/includes/Storage/RevisionStoreDbTest.php +++ b/tests/phpunit/includes/Storage/RevisionStoreDbTest.php @@ -133,6 +133,7 @@ class RevisionStoreDbTest extends MediaWikiTestCase { $loadBalancer, $blobStore, new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ), + MediaWikiServices::getInstance()->getCommentStore(), $wikiId ); diff --git a/tests/phpunit/includes/Storage/RevisionStoreTest.php b/tests/phpunit/includes/Storage/RevisionStoreTest.php index bee94f3bc6..8e8de6ea31 100644 --- a/tests/phpunit/includes/Storage/RevisionStoreTest.php +++ b/tests/phpunit/includes/Storage/RevisionStoreTest.php @@ -4,6 +4,7 @@ namespace MediaWiki\Tests\Storage; use HashBagOStuff; use Language; +use MediaWiki\MediaWikiServices; use MediaWiki\Storage\RevisionAccessException; use MediaWiki\Storage\RevisionStore; use MediaWiki\Storage\SqlBlobStore; @@ -30,7 +31,8 @@ class RevisionStoreTest extends MediaWikiTestCase { return new RevisionStore( $loadBalancer ? $loadBalancer : $this->getMockLoadBalancer(), $blobStore ? $blobStore : $this->getMockSqlBlobStore(), - $WANObjectCache ? $WANObjectCache : $this->getHashWANObjectCache() + $WANObjectCache ? $WANObjectCache : $this->getHashWANObjectCache(), + MediaWikiServices::getInstance()->getCommentStore() ); } @@ -597,7 +599,7 @@ class RevisionStoreTest extends MediaWikiTestCase { $blobStore = new SqlBlobStore( wfGetLB(), $cache ); $blobStore->setLegacyEncoding( $encoding, Language::factory( $locale ) ); - $store = new RevisionStore( wfGetLB(), $blobStore, $cache ); + $store = $this->getRevisionStore( wfGetLB(), $blobStore, $cache ); $record = $store->newRevisionFromRow( $this->makeRow( $row ), @@ -623,7 +625,7 @@ class RevisionStoreTest extends MediaWikiTestCase { $blobStore = new SqlBlobStore( wfGetLB(), $cache ); $blobStore->setLegacyEncoding( 'windows-1252', Language::factory( 'en' ) ); - $store = new RevisionStore( wfGetLB(), $blobStore, $cache ); + $store = $this->getRevisionStore( wfGetLB(), $blobStore, $cache ); $record = $store->newRevisionFromRow( $this->makeRow( $row ), diff --git a/tests/phpunit/includes/api/format/ApiFormatBaseTest.php b/tests/phpunit/includes/api/format/ApiFormatBaseTest.php index d6a13904eb..55f760f64d 100644 --- a/tests/phpunit/includes/api/format/ApiFormatBaseTest.php +++ b/tests/phpunit/includes/api/format/ApiFormatBaseTest.php @@ -82,7 +82,7 @@ class ApiFormatBaseTest extends ApiFormatTestBase { $this->assertSame( "$ct; charset=utf-8", strtolower( $response->getHeader( 'Content-Type' ) ) ); $this->assertSame( 'DENY', $response->getHeader( 'X-Frame-Options' ) ); $this->assertSame( $file, $printer->getFilename() ); - $this->assertSame( "inline; filename=\"$file\"", $response->getHeader( 'Content-Disposition' ) ); + $this->assertSame( "inline; filename=$file", $response->getHeader( 'Content-Disposition' ) ); $this->assertSame( $status, $response->getStatusCode() ); return $text; @@ -144,6 +144,49 @@ class ApiFormatBaseTest extends ApiFormatTestBase { ]; } + /** + * @dataProvider provideFilenameEncoding + */ + public function testFilenameEncoding( $filename, $expect ) { + $ret = parent::encodeData( [], [], [ + 'name' => 'mock', + 'class' => ApiFormatBase::class, + 'factory' => function ( ApiMain $main, $format ) use ( $filename ) { + $mock = $this->getMockFormatter( $main, $format, [ 'getFilename' ] ); + $mock->method( 'getFilename' )->willReturn( $filename ); + return $mock; + }, + 'returnPrinter' => true, + ] ); + $response = $ret['printer']->getMain()->getRequest()->response(); + + $this->assertSame( "inline; $expect", $response->getHeader( 'Content-Disposition' ) ); + } + + public static function provideFilenameEncoding() { + return [ + 'something simple' => [ + 'foo.xyz', 'filename=foo.xyz' + ], + 'more complicated, but still simple' => [ + 'foo.!#$%&\'*+-^_`|~', 'filename=foo.!#$%&\'*+-^_`|~' + ], + 'Needs quoting' => [ + 'foo\\bar.xyz', 'filename="foo\\\\bar.xyz"' + ], + 'Needs quoting (2)' => [ + 'foo (bar).xyz', 'filename="foo (bar).xyz"' + ], + 'Needs quoting (3)' => [ + "foo\t\"b\x5car\"\0.xyz", "filename=\"foo\x5c\t\x5c\"b\x5c\x5car\x5c\"\x5c\0.xyz\"" + ], + 'Non-ASCII characters' => [ + 'fóo bár.🙌!', + "filename=\"f\xF3o b\xE1r.?!\"; filename*=UTF-8''f%C3%B3o%20b%C3%A1r.%F0%9F%99%8C!" + ] + ]; + } + public function testBasics() { $printer = $this->getMockFormatter( null, 'mock' ); $this->assertTrue( $printer->canPrintErrors() ); @@ -220,7 +263,7 @@ class ApiFormatBaseTest extends ApiFormatTestBase { ); $this->assertSame( 'DENY', $response->getHeader( 'X-Frame-Options' ) ); $this->assertSame( - 'inline; filename="api-result.html"', $response->getHeader( 'Content-Disposition' ) + 'inline; filename=api-result.html', $response->getHeader( 'Content-Disposition' ) ); } diff --git a/tests/phpunit/includes/auth/AuthManagerTest.php b/tests/phpunit/includes/auth/AuthManagerTest.php index b8f7b733b6..e4056ee712 100644 --- a/tests/phpunit/includes/auth/AuthManagerTest.php +++ b/tests/phpunit/includes/auth/AuthManagerTest.php @@ -2,10 +2,13 @@ namespace MediaWiki\Auth; +use Config; use MediaWiki\Session\SessionInfo; use MediaWiki\Session\UserInfo; +use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; use StatusValue; +use WebRequest; use Wikimedia\ScopedCallback; use Wikimedia\TestingAccessWrapper; @@ -19,7 +22,7 @@ class AuthManagerTest extends \MediaWikiTestCase { protected $request; /** @var Config */ protected $config; - /** @var \\Psr\\Log\\LoggerInterface */ + /** @var LoggerInterface */ protected $logger; protected $preauthMocks = []; diff --git a/tests/phpunit/includes/parser/ParserIntegrationTest.php b/tests/phpunit/includes/parser/ParserIntegrationTest.php index 8d17d21d72..0390aeb478 100644 --- a/tests/phpunit/includes/parser/ParserIntegrationTest.php +++ b/tests/phpunit/includes/parser/ParserIntegrationTest.php @@ -12,7 +12,17 @@ use Wikimedia\ScopedCallback; * @group Parser * @group ParserTests * - * @todo covers tags + * @covers Parser + * @covers BlockLevelPass + * @covers CoreParserFunctions + * @covers CoreTagHooks + * @covers Sanitizer + * @covers Preprocessor + * @covers Preprocessor_DOM + * @covers Preprocessor_Hash + * @covers DateFormatter + * @covers LinkHolderArray + * @covers StripState */ class ParserIntegrationTest extends PHPUnit_Framework_TestCase {