Merge "Don't hard-code Preferences page name"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 21 Aug 2017 22:41:17 +0000 (22:41 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 21 Aug 2017 22:41:17 +0000 (22:41 +0000)
175 files changed:
.stylelintrc [deleted file]
.stylelintrc.json [new file with mode: 0644]
RELEASE-NOTES-1.30
docs/uidesign/child-selector-emu.html [deleted file]
includes/Block.php
includes/Category.php
includes/DefaultSettings.php
includes/EditPage.php
includes/MediaWiki.php
includes/MergeHistory.php
includes/OutputPage.php
includes/Preferences.php
includes/Revision.php
includes/SiteStats.php
includes/StreamFile.php
includes/api/ApiParamInfo.php
includes/api/i18n/nl.json
includes/auth/AuthManager.php
includes/auth/CreateFromLoginAuthenticationRequest.php
includes/cache/HTMLFileCache.php
includes/cache/MessageCache.php
includes/collation/IcuCollation.php
includes/config/EtcdConfig.php
includes/dao/DBAccessObjectUtils.php
includes/dao/IDBAccessObject.php
includes/debug/logger/monolog/WikiProcessor.php
includes/deferred/DeferredUpdates.php
includes/deferred/LinksDeletionUpdate.php
includes/deferred/LinksUpdate.php
includes/exception/MWExceptionRenderer.php
includes/filerepo/FileBackendDBRepoWrapper.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/file/File.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/fields/HTMLFormFieldWithButton.php
includes/installer/i18n/be-tarask.json
includes/installer/i18n/fa.json
includes/installer/i18n/fr.json
includes/installer/i18n/ko.json
includes/installer/i18n/nl.json
includes/installer/i18n/pt.json
includes/jobqueue/jobs/CategoryMembershipChangeJob.php
includes/jobqueue/jobs/RefreshLinksJob.php
includes/libs/GenericArrayObject.php
includes/libs/HashRing.php
includes/libs/MultiHttpClient.php
includes/libs/filebackend/HTTPFileStreamer.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/MultiWriteBagOStuff.php
includes/libs/objectcache/RESTBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/objectcache/WANObjectCacheReaper.php
includes/libs/rdbms/ChronologyProtector.php
includes/libs/rdbms/TransactionProfiler.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/database/position/MySQLMasterPos.php
includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php
includes/libs/rdbms/exception/DBQueryError.php
includes/libs/rdbms/lbfactory/ILBFactory.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/rdbms/loadmonitor/ILoadMonitor.php
includes/libs/rdbms/loadmonitor/LoadMonitor.php
includes/libs/stats/BufferingStatsdDataFactory.php
includes/libs/stats/IBufferingStatsdDataFactory.php
includes/libs/stats/NullStatsdDataFactory.php
includes/libs/stats/SamplingStatsdClient.php
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_Hash.php
includes/revisiondelete/RevDelItem.php
includes/revisiondelete/RevisionDeleter.php
includes/services/ServiceContainer.php
includes/session/CookieSessionProvider.php
includes/skins/SkinTemplate.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialWatchlist.php
includes/tidy/Balancer.php
includes/tidy/RemexCompatMunger.php
includes/upload/UploadBase.php
includes/user/User.php
includes/utils/BatchRowIterator.php
includes/utils/UIDGenerator.php
includes/widget/SearchInputWidget.php
includes/widget/SelectWithInputWidget.php
languages/Language.php
languages/i18n/af.json
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/ba.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bho.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/cy.json
languages/i18n/de.json
languages/i18n/en.json
languages/i18n/et.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/gl.json
languages/i18n/got.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/it.json
languages/i18n/jv.json
languages/i18n/kab.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lki.json
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/pl.json
languages/i18n/pnb.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/shi.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/tay.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/uk.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/Maintenance.php
maintenance/namespaceDupes.php
maintenance/rebuildrecentchanges.php
phpcs.xml
resources/Resources.php
resources/lib/jquery/jquery.migrate.js
resources/src/jquery/jquery.mwExtension.js [deleted file]
resources/src/mediawiki.less/mediawiki.ui/variables.less
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ChangesListViewModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
resources/src/mediawiki.rcfilters/mw.rcfilters.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.HighlightColorPickerWidget.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MarkSeenButtonWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.TagItemWidget.js
tests/parser/ParserTestRunner.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js [deleted file]

diff --git a/.stylelintrc b/.stylelintrc
deleted file mode 100644 (file)
index 27e289d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       "extends": "stylelint-config-wikimedia",
-       "rules": {
-               "no-descending-specificity": null,
-
-               "selector-no-id": null
-       }
-}
diff --git a/.stylelintrc.json b/.stylelintrc.json
new file mode 100644 (file)
index 0000000..27e289d
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "extends": "stylelint-config-wikimedia",
+       "rules": {
+               "no-descending-specificity": null,
+
+               "selector-no-id": null
+       }
+}
index 9474f21..dd39561 100644 (file)
@@ -168,6 +168,9 @@ changes to languages because of Phabricator reports.
 * WikiImporter now requires the second parameter to be an instance of the Config,
   class. Prior to that, the Config parameter was optional (a behavior deprecated in
   1.25).
+* Removed 'jquery.mwExtension' module. (deprecated since 1.26)
+* mediawiki.ui: Deprecate greys, which are not part of WikimediaUI color palette
+  any more.
 
 == Compatibility ==
 MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
diff --git a/docs/uidesign/child-selector-emu.html b/docs/uidesign/child-selector-emu.html
deleted file mode 100644 (file)
index 9db4c54..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-       <title>CSS Child selector emulation for IE 6</title>
-       <style>
-               /** Common rules **/
-               body  { background-color: #CCC; }
-               table { border:1px black solid; }
-               caption {
-                       background-color: #98fb98;
-                       border:1px solid #40FF40;
-               }
-
-               /** "old" rules" **/
-               table.global th,
-               table.global td
-               {
-                       border: 1px red solid;
-                       background-color:white;
-                       padding:1em;
-               }
-               table.global th
-               {
-                       background-color: #ffc0cb;
-               }
-
-               /** second table. Try to emulate child selector */
-               table.childemu th,
-               table.childemu td {
-                       border: 1px red solid;
-                       background-color:white;
-                       padding:1em;
-               }
-               table.childemu th
-               {
-                       background-color: #ffc0cb;
-               }
-
-               /** Reset style applied in childemu classes */
-               /** TODO: find the real default value!! */
-               table.childemu tr * th,
-               table.childemu tr * td {
-                       border: none;
-                       background-color: transparent;
-                       padding: 0;
-               }
-
-
-               /** child selector emulation */
-       </style>
-</head>
-<body>
-<p>
-The following table show how nested tables inherit colors from the wikitable class (here it was renamed "global").
-</p>
-<table class="global">
-<caption>Global table</caption>
-<tr>
-       <th>TH: should have pink bg</th>
-</tr>
-<tr>
-       <td>TD: white bg</td>
-</tr>
-<tr>
-       <td>
-               <table class="nested">
-               <caption>Nested table</caption>
-               <tr>
-                       <th>Nested TH: transparent</th>
-                       <td>Nested TD: transparent</td>
-               </tr>
-               </table>
-       </td>
-</tr>
-</table>
-
-<p>
-With child selector we could limit the wikitable styling to the direct childs of the table. Unfortunately, Internet Explorer 6.0 does not support child selector. See <a href="https://bugzilla.wikimedia.org/show_bug.cgi?id=33752">our bug #33752</a>.
-</p>
-<table class="childemu">
-<caption>Global table</caption>
-<tr>
-       <th>TH: should have pink bg</th>
-</tr>
-<tr>
-       <td>TD: white bg</td>
-</tr>
-<tr>
-       <td>
-               <table class="nested">
-               <caption>Nested table</caption>
-               <tr>
-                       <th>Nested TH: transparent</th>
-                       <td>Nested TD: transparent</td>
-               </tr>
-               </table>
-       </td>
-</tr>
-</table>
-<p><strong>NOTE:</strong>The nested caption keep the green background. The nested table keep the black border. This is because those declarations are global so we did not reset them.</p>
index 843ea54..5066038 100644 (file)
@@ -1513,7 +1513,7 @@ class Block {
         *
         * @param string $cookieValue The string in which to find the ID.
         *
-        * @return integer|null The block ID, or null if the HMAC is present and invalid.
+        * @return int|null The block ID, or null if the HMAC is present and invalid.
         */
        public static function getIdFromCookieValue( $cookieValue ) {
                // Extract the ID prefix from the cookie value (may be the whole value, if no bang found).
index c22ea64..629962d 100644 (file)
@@ -48,7 +48,7 @@ class Category {
 
        /**
         * Set up all member variables using a database query.
-        * @param integer $mode
+        * @param int $mode
         * @throws MWException
         * @return bool True on success, false on failure.
         */
index 4e162f6..2613889 100644 (file)
@@ -4901,7 +4901,7 @@ $wgDefaultUserOptions = [
        'date' => 'default',
        'diffonly' => 0,
        'disablemail' => 0,
-       'editfont' => 'default',
+       'editfont' => 'monospace',
        'editondblclick' => 0,
        'editsectiononrightclick' => 0,
        'enotifminoredits' => 0,
@@ -6846,6 +6846,11 @@ $wgStructuredChangeFiltersEnableExperimentalViews = false;
  */
 $wgStructuredChangeFiltersEnableLiveUpdate = false;
 
+/**
+ * Whether to enable RCFilters app on Special:Watchlist
+ */
+$wgStructuredChangeFiltersOnWatchlist = false;
+
 /**
  * Use new page patrolling to check new pages on Special:Newpages
  */
index 49341c5..914e7aa 100644 (file)
@@ -336,7 +336,7 @@ class EditPage {
        /** @var string */
        public $edittime = '';
 
-       /** @var integer */
+       /** @var int */
        private $editRevId = null;
 
        /** @var string */
@@ -1726,7 +1726,7 @@ class EditPage {
         *   - spam (string): Spam string from content if any spam is detected by
         *     matchSpamRegex.
         *   - sectionanchor (string): Section anchor for a section save.
-        *   - nullEdit (boolean): Set if doEditContent is OK.  True if null edit,
+        *   - nullEdit (bool): Set if doEditContent is OK.  True if null edit,
         *     false otherwise.
         *   - redirect (bool): Set if doEditContent is OK. True if resulting
         *     revision is a redirect.
index 4e47184..10b9e2b 100644 (file)
@@ -970,7 +970,7 @@ class MediaWiki {
        }
 
        /**
-        * @param integer $n Number of jobs to try to run
+        * @param int $n Number of jobs to try to run
         * @param LoggerInterface $runJobsLogger
         */
        private function triggerSyncJobs( $n, LoggerInterface $runJobsLogger ) {
@@ -979,7 +979,7 @@ class MediaWiki {
        }
 
        /**
-        * @param integer $n Number of jobs to try to run
+        * @param int $n Number of jobs to try to run
         * @param LoggerInterface $runJobsLogger
         * @return bool Success
         */
index 48ff97b..9d63869 100644 (file)
@@ -56,7 +56,7 @@ class MergeHistory {
        /** @var MWTimestamp|bool Timestamp upto which history from the source will be merged */
        protected $timestampLimit;
 
-       /** @var integer Number of revisions merged (for Special:MergeHistory success message) */
+       /** @var int Number of revisions merged (for Special:MergeHistory success message) */
        protected $revisionsMerged;
 
        /**
index 2a3a7cd..dd21194 100644 (file)
@@ -1998,10 +1998,10 @@ class OutputPage extends ContextSource {
         * the TTL is higher the older the $mtime timestamp is. Essentially, the
         * TTL is 90% of the age of the object, subject to the min and max.
         *
-        * @param string|integer|float|bool|null $mtime Last-Modified timestamp
-        * @param integer $minTTL Mimimum TTL in seconds [default: 1 minute]
-        * @param integer $maxTTL Maximum TTL in seconds [default: $wgSquidMaxage]
-        * @return integer TTL in seconds
+        * @param string|int|float|bool|null $mtime Last-Modified timestamp
+        * @param int $minTTL Mimimum TTL in seconds [default: 1 minute]
+        * @param int $maxTTL Maximum TTL in seconds [default: $wgSquidMaxage]
+        * @return int TTL in seconds
         * @since 1.28
         */
        public function adaptCdnTTL( $mtime, $minTTL = 0, $maxTTL = 0 ) {
index 04a3637..c64e8a8 100644 (file)
@@ -832,10 +832,10 @@ class Preferences {
                                'section' => 'editing/editor',
                                'label-message' => 'editfont-style',
                                'options' => [
-                                       $context->msg( 'editfont-default' )->text() => 'default',
                                        $context->msg( 'editfont-monospace' )->text() => 'monospace',
                                        $context->msg( 'editfont-sansserif' )->text() => 'sans-serif',
                                        $context->msg( 'editfont-serif' )->text() => 'serif',
+                                       $context->msg( 'editfont-default' )->text() => 'default',
                                ]
                        ];
                }
@@ -920,6 +920,9 @@ class Preferences {
                $defaultPreferences['rcfilters-saved-queries'] = [
                        'type' => 'api',
                ];
+               $defaultPreferences['rcfilters-wl-saved-queries'] = [
+                       'type' => 'api',
+               ];
                $defaultPreferences['rcfilters-rclimit'] = [
                        'type' => 'api',
                ];
index 3d4d161..e457beb 100644 (file)
@@ -752,7 +752,7 @@ class Revision implements IDBAccessObject {
         * This should only be used for proposed revisions that turn out to be null edits
         *
         * @since 1.28
-        * @param integer $id User ID
+        * @param int $id User ID
         * @param string $name User name
         */
        public function setUserIdAndName( $id, $name ) {
@@ -1584,7 +1584,7 @@ class Revision implements IDBAccessObject {
         * Get the text cache TTL
         *
         * @param WANObjectCache $cache
-        * @return integer
+        * @return int
         */
        private static function getCacheTTL( WANObjectCache $cache ) {
                global $wgRevisionCacheExpiry;
index 6a2d0e2..ce87596 100644 (file)
@@ -294,7 +294,7 @@ class SiteStatsInit {
 
        /**
         * @param bool|IDatabase $database
-        * - boolean: Whether to use the master DB
+        * - bool: Whether to use the master DB
         * - IDatabase: Database connection to use
         */
        public function __construct( $database = false ) {
@@ -379,10 +379,10 @@ class SiteStatsInit {
         * for the original initStats, but without output.
         *
         * @param IDatabase|bool $database
-        * - boolean: Whether to use the master DB
+        * - bool: Whether to use the master DB
         * - IDatabase: Database connection to use
         * @param array $options Array of options, may contain the following values
-        * - activeUsers boolean: Whether to update the number of active users (default: false)
+        * - activeUsers bool: Whether to update the number of active users (default: false)
         */
        public static function doAllAndCommit( $database, array $options = [] ) {
                $options += [ 'update' => false, 'activeUsers' => false ];
index cce3fc4..71113a8 100644 (file)
@@ -38,7 +38,7 @@ class StreamFile {
         * @param array $headers Any additional headers to send if the file exists
         * @param bool $sendErrors Send error messages if errors occur (like 404)
         * @param array $optHeaders HTTP request header map (e.g. "range") (use lowercase keys)
-        * @param integer $flags Bitfield of STREAM_* constants
+        * @param int $flags Bitfield of STREAM_* constants
         * @throws MWException
         * @return bool Success
         */
@@ -64,7 +64,7 @@ class StreamFile {
         * Send out a standard 404 message for a file
         *
         * @param string $fname Full name and path of the file to stream
-        * @param integer $flags Bitfield of STREAM_* constants
+        * @param int $flags Bitfield of STREAM_* constants
         * @since 1.24
         */
        public static function send404Message( $fname, $flags = 0 ) {
@@ -75,7 +75,7 @@ class StreamFile {
         * Convert a Range header value to an absolute (start, end) range tuple
         *
         * @param string $range Range header value
-        * @param integer $size File size
+        * @param int $size File size
         * @return array|string Returns error string on failure (start, end, length)
         * @since 1.24
         */
index 17b0093..480575c 100644 (file)
@@ -163,7 +163,7 @@ class ApiParamInfo extends ApiBase {
        /**
         * List all submodules of a module
         * @param ApiBase $module
-        * @param boolean $recursive
+        * @param bool $recursive
         * @return string[]
         */
        private function listAllSubmodules( ApiBase $module, $recursive ) {
index 0273eca..ff99dff 100644 (file)
        "apihelp-opensearch-param-search": "Zoektekst.",
        "apihelp-opensearch-param-limit": "Het maximaal aantal weer te geven resultaten.",
        "apihelp-opensearch-param-namespace": "Te doorzoeken naamruimten.",
-       "apihelp-opensearch-param-suggest": "Niets doen als <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> onwaar is.",
+       "apihelp-opensearch-param-suggest": "Niets doen als <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> onwaar is.",
        "apihelp-opensearch-param-redirects": "Hoe om te gaan met doorverwijzingen:\n;return:Geef de doorverwijzing terug.\n;resolve:Geef de doelpagina terug. Kan minder dan de limiet $1 resultaten teruggeven.\nOm historische redenen is de standaardinstelling \"return\" voor <code>$1format=json<code> en \"resolve\" voor andere formaten.",
        "apihelp-opensearch-param-format": "Het uitvoerformaat.",
        "apihelp-opensearch-param-warningsaserror": "Als er waarschuwingen zijn met <kbd>format=json</kbd>, geef dan een API-fout terug in plaats van deze te negeren.",
        "apihelp-query+revisions-param-tag": "Alleen versies weergeven met dit label.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Versietekst.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Labels voor de versie.",
-       "apihelp-query+revisions+base-param-difftotextpst": "\"pre-save\"-transformatie uitvoeren op de tekst alvorens de verschillen te bepalen. Alleen geldig als dit wordt gebruikt met <var>$1difftotext</var>.",
+       "apihelp-query+revisions+base-param-difftotextpst": "Gebruik in plaats hiervan [[Special:ApiHelp/compare|action=compare]]. \"pre-save\"-transformatie uitvoeren op de tekst alvorens de verschillen te bepalen. Alleen geldig als dit wordt gebruikt met <var>$1difftotext</var>.",
        "apihelp-query+search-summary": "Voer een volledige tekst zoekopdracht uit.",
        "apihelp-query+search-param-limit": "Hoeveel pagina's te tonen.",
        "apihelp-query+search-example-simple": "Zoeken naar <kbd>betekenis</kbd>.",
index c3f798f..b2528fe 100644 (file)
@@ -2131,7 +2131,7 @@ class AuthManager implements LoggerAwareInterface {
         * @param AuthenticationRequest[] &$reqs
         * @param string $action
         * @param string|null $username
-        * @param boolean $forceAction
+        * @param bool $forceAction
         */
        private function fillRequests( array &$reqs, $action, $username, $forceAction = false ) {
                foreach ( $reqs as $req ) {
index ddeb13d..db82797 100644 (file)
@@ -66,7 +66,7 @@ class CreateFromLoginAuthenticationRequest extends AuthenticationRequest {
         * Indicate whether this request contains any state for the specified
         * action.
         * @param string $action One of the AuthManager::ACTION_* constants
-        * @return boolean
+        * @return bool
         */
        public function hasStateForAction( $action ) {
                switch ( $action ) {
@@ -83,7 +83,7 @@ class CreateFromLoginAuthenticationRequest extends AuthenticationRequest {
         * Indicate whether this request contains state for the specified
         * action sufficient to replace other primary-required requests.
         * @param string $action One of the AuthManager::ACTION_* constants
-        * @return boolean
+        * @return bool
         */
        public function hasPrimaryStateForAction( $action ) {
                switch ( $action ) {
index b0a3a1c..7ae2ee0 100644 (file)
@@ -87,7 +87,7 @@ class HTMLFileCache extends FileCacheBase {
        /**
         * Check if pages can be cached for this request/user
         * @param IContextSource $context
-        * @param integer $mode One of the HTMLFileCache::MODE_* constants (since 1.28)
+        * @param int $mode One of the HTMLFileCache::MODE_* constants (since 1.28)
         * @return bool
         */
        public static function useFileCache( IContextSource $context, $mode = self::MODE_NORMAL ) {
@@ -140,7 +140,7 @@ class HTMLFileCache extends FileCacheBase {
        /**
         * Read from cache to context output
         * @param IContextSource $context
-        * @param integer $mode One of the HTMLFileCache::MODE_* constants
+        * @param int $mode One of the HTMLFileCache::MODE_* constants
         * @return void
         */
        public function loadFromFileCache( IContextSource $context, $mode = self::MODE_NORMAL ) {
index 16c1ac5..768f980 100644 (file)
@@ -253,7 +253,7 @@ class MessageCache {
         * is disabled.
         *
         * @param string $code Language to which load messages
-        * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache [optional]
+        * @param int $mode Use MessageCache::FOR_UPDATE to skip process cache [optional]
         * @throws MWException
         * @return bool
         */
@@ -396,7 +396,7 @@ class MessageCache {
        /**
         * @param string $code
         * @param array &$where List of wfDebug() comments
-        * @param integer $mode Use MessageCache::FOR_UPDATE to use DB_MASTER
+        * @param int $mode Use MessageCache::FOR_UPDATE to use DB_MASTER
         * @return bool|string True on success or one of ("cantacquire", "disabled")
         */
        protected function loadFromDBWithLock( $code, array &$where, $mode = null ) {
@@ -458,7 +458,7 @@ class MessageCache {
         * on-demand from the database later.
         *
         * @param string $code Language code
-        * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache
+        * @param int $mode Use MessageCache::FOR_UPDATE to skip process cache
         * @return array Loaded messages for storing in caches
         */
        protected function loadFromDB( $code, $mode = null ) {
@@ -755,7 +755,7 @@ class MessageCache {
 
        /**
         * @param string $key A language message cache key that stores blobs
-        * @param integer $timeout Wait timeout in seconds
+        * @param int $timeout Wait timeout in seconds
         * @return null|ScopedCallback
         */
        protected function getReentrantScopedLock( $key, $timeout = self::WAIT_SEC ) {
index d93362b..54b04ee 100644 (file)
@@ -36,7 +36,7 @@ class IcuCollation extends Collation {
        /** @var Language */
        protected $digitTransformLanguage;
 
-       /** @var boolean */
+       /** @var bool */
        private $useNumericCollation = false;
 
        /** @var array */
index 6605c38..d7dc45a 100644 (file)
@@ -45,11 +45,11 @@ class EtcdConfig implements Config, LoggerAwareInterface {
        private $directory;
        /** @var string */
        private $encoding;
-       /** @var integer */
+       /** @var int */
        private $baseCacheTTL;
-       /** @var integer */
+       /** @var int */
        private $skewCacheTTL;
-       /** @var integer */
+       /** @var int */
        private $timeout;
 
        /**
index cc63446..ee10368 100644 (file)
@@ -28,8 +28,8 @@
  */
 class DBAccessObjectUtils implements IDBAccessObject {
        /**
-        * @param integer $bitfield
-        * @param integer $flags IDBAccessObject::READ_* constant
+        * @param int $bitfield
+        * @param int $flags IDBAccessObject::READ_* constant
         * @return bool Bitfield has flag $flag set
         */
        public static function hasFlags( $bitfield, $flags ) {
@@ -42,7 +42,7 @@ class DBAccessObjectUtils implements IDBAccessObject {
         * The fallback DB index and options are to be used if the entity is not found
         * with the initial DB index, typically querying the master DB to avoid lag
         *
-        * @param integer $bitfield Bitfield of IDBAccessObject::READ_* constants
+        * @param int $bitfield Bitfield of IDBAccessObject::READ_* constants
         * @return array List of DB indexes and options in this order:
         *   - DB_MASTER or DB_REPLICA constant for the initial query
         *   - SELECT options array for the initial query
index 5acf3ae..e18a090 100644 (file)
  */
 interface IDBAccessObject {
        /** Constants for object loading bitfield flags (higher => higher QoS) */
-       /** @var integer Read from a replica DB/non-quorum */
+       /** @var int Read from a replica DB/non-quorum */
        const READ_NORMAL = 0;
-       /** @var integer Read from the master/quorum */
+       /** @var int Read from the master/quorum */
        const READ_LATEST = 1;
-       /* @var integer Read from the master/quorum and lock out other writers */
+       /* @var int Read from the master/quorum and lock out other writers */
        const READ_LOCKING = 3; // READ_LATEST (1) and "LOCK IN SHARE MODE" (2)
-       /** @var integer Read from the master/quorum and lock out other writers and locking readers */
+       /** @var int Read from the master/quorum and lock out other writers and locking readers */
        const READ_EXCLUSIVE = 7; // READ_LOCKING (3) and "FOR UPDATE" (4)
 
-       /** @var integer Read from a replica DB or without a quorum, using the master/quorum on miss */
+       /** @var int Read from a replica DB or without a quorum, using the master/quorum on miss */
        const READ_LATEST_IMMUTABLE = 8;
 
        // Convenience constant for tracking how data was loaded (higher => higher QoS)
index 5e32887..e39a2c3 100644 (file)
@@ -35,15 +35,13 @@ class WikiProcessor {
         */
        public function __invoke( array $record ) {
                global $wgVersion;
-               $record['extra'] = array_merge(
-                       $record['extra'],
-                       [
-                               'host' => wfHostname(),
-                               'wiki' => wfWikiID(),
-                               'mwversion' => $wgVersion,
-                               'reqId' => \WebRequest::getRequestId(),
-                       ]
-               );
+               $record['extra']['host'] = wfHostname();
+               $record['extra']['wiki'] = wfWikiID();
+               $record['extra']['mwversion'] = $wgVersion;
+               $record['extra']['reqId'] = \WebRequest::getRequestId();
+               if ( PHP_SAPI === 'cli' && isset( $_SERVER['argv'] ) ) {
+                       $record['extra']['cli_argv'] = implode( ' ', $_SERVER['argv'] );
+               }
                return $record;
        }
 
index e8f27ef..40069f3 100644 (file)
@@ -71,7 +71,7 @@ class DeferredUpdates {
         * In CLI mode, callback magic will also be used to run updates when safe
         *
         * @param DeferrableUpdate $update Some object that implements doUpdate()
-        * @param integer $stage DeferredUpdates constant (PRESEND or POSTSEND) (since 1.27)
+        * @param int $stage DeferredUpdates constant (PRESEND or POSTSEND) (since 1.27)
         */
        public static function addUpdate( DeferrableUpdate $update, $stage = self::POSTSEND ) {
                global $wgCommandLineMode;
@@ -105,7 +105,7 @@ class DeferredUpdates {
         * @see MWCallableUpdate::__construct()
         *
         * @param callable $callable
-        * @param integer $stage DeferredUpdates constant (PRESEND or POSTSEND) (since 1.27)
+        * @param int $stage DeferredUpdates constant (PRESEND or POSTSEND) (since 1.27)
         * @param IDatabase|null $dbw Abort if this DB is rolled back [optional] (since 1.28)
         */
        public static function addCallableUpdate(
@@ -118,7 +118,7 @@ class DeferredUpdates {
         * Do any deferred updates and clear the list
         *
         * @param string $mode Use "enqueue" to use the job queue when possible [Default: "run"]
-        * @param integer $stage DeferredUpdates constant (PRESEND, POSTSEND, or ALL) (since 1.27)
+        * @param int $stage DeferredUpdates constant (PRESEND, POSTSEND, or ALL) (since 1.27)
         */
        public static function doUpdates( $mode = 'run', $stage = self::ALL ) {
                $stageEffective = ( $stage === self::ALL ) ? self::POSTSEND : $stage;
@@ -165,7 +165,7 @@ class DeferredUpdates {
         *
         * @param DeferrableUpdate[] &$queue List of DeferrableUpdate objects
         * @param string $mode Use "enqueue" to use the job queue when possible
-        * @param integer $stage Class constant (PRESEND, POSTSEND) (since 1.28)
+        * @param int $stage Class constant (PRESEND, POSTSEND) (since 1.28)
         * @throws ErrorPageError Happens on top-level calls
         * @throws Exception Happens on second-level calls
         */
@@ -238,7 +238,7 @@ class DeferredUpdates {
         * @param DeferrableUpdate $update
         * @param LBFactory $lbFactory
         * @param string $mode
-        * @param integer $stage
+        * @param int $stage
         * @return ErrorPageError|null
         */
        private static function runUpdate(
@@ -322,7 +322,7 @@ class DeferredUpdates {
        }
 
        /**
-        * @return integer Number of enqueued updates
+        * @return int Number of enqueued updates
         * @since 1.28
         */
        public static function pendingUpdatesCount() {
@@ -330,7 +330,7 @@ class DeferredUpdates {
        }
 
        /**
-        * @param integer $stage DeferredUpdates constant (PRESEND, POSTSEND, or ALL)
+        * @param int $stage DeferredUpdates constant (PRESEND, POSTSEND, or ALL)
         * @return DeferrableUpdate[]
         * @since 1.29
         */
index 3dd9de6..f579a1f 100644 (file)
@@ -29,7 +29,7 @@ use Wikimedia\Rdbms\IDatabase;
 class LinksDeletionUpdate extends DataUpdate implements EnqueueableDataUpdate {
        /** @var WikiPage */
        protected $page;
-       /** @var integer */
+       /** @var int */
        protected $pageId;
        /** @var string */
        protected $timestamp;
@@ -39,7 +39,7 @@ class LinksDeletionUpdate extends DataUpdate implements EnqueueableDataUpdate {
 
        /**
         * @param WikiPage $page Page we are updating
-        * @param integer|null $pageId ID of the page we are updating [optional]
+        * @param int|null $pageId ID of the page we are updating [optional]
         * @param string|null $timestamp TS_MW timestamp of deletion
         * @throws MWException
         */
index c6facd9..18a87e8 100644 (file)
@@ -192,7 +192,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
         * Acquire a lock for performing link table updates for a page on a DB
         *
         * @param IDatabase $dbw
-        * @param integer $pageId
+        * @param int $pageId
         * @param string $why One of (job, atomicity)
         * @return ScopedCallback
         * @throws RuntimeException
index 60d760f..bb5e4f4 100644 (file)
@@ -33,7 +33,7 @@ class MWExceptionRenderer {
 
        /**
         * @param Exception|Throwable $e Original exception
-        * @param integer $mode MWExceptionExposer::AS_* constant
+        * @param int $mode MWExceptionExposer::AS_* constant
         * @param Exception|Throwable|null $eNew New exception from attempting to show the first
         */
        public static function output( $e, $mode, $eNew = null ) {
@@ -262,7 +262,7 @@ class MWExceptionRenderer {
        }
 
        /**
-        * @param integer $code
+        * @param int $code
         */
        private static function statusHeader( $code ) {
                if ( !headers_sent() ) {
index c37a942..0d5a15d 100644 (file)
@@ -282,7 +282,7 @@ class FileBackendDBRepoWrapper extends FileBackend {
        /**
         * Get a connection to the repo file registry DB
         *
-        * @param integer $index
+        * @param int $index
         * @return DBConnRef
         */
        protected function getDB( $index ) {
index 56ccc64..55a19e8 100644 (file)
@@ -511,7 +511,7 @@ class ForeignAPIRepo extends FileRepo {
         * @param string $url
         * @param string $timeout
         * @param array $options
-        * @param integer|bool &$mtime Resulting Last-Modified UNIX timestamp if received
+        * @param int|bool &$mtime Resulting Last-Modified UNIX timestamp if received
         * @return bool|string
         */
        public static function httpGet(
index 71e1c63..460fe51 100644 (file)
@@ -862,7 +862,7 @@ abstract class File implements IDBAccessObject {
         *
         * Overridden by LocalFile to actually query the DB
         *
-        * @param integer $flags Bitfield of File::READ_* constants
+        * @param int $flags Bitfield of File::READ_* constants
         */
        public function load( $flags = 0 ) {
        }
index 7293b99..465736b 100644 (file)
@@ -1893,7 +1893,7 @@ class HTMLForm extends ContextSource {
         * 'novalidate' attribute will be added on the `<form>` element. It will be removed if the user
         * agent has JavaScript support, in htmlform.js.
         *
-        * @return boolean
+        * @return bool
         * @since 1.29
         */
        public function needsJSForHtml5FormValidation() {
index 77ddc1a..3f1c590 100644 (file)
@@ -357,7 +357,7 @@ abstract class HTMLFormField {
         * (wpFormIdentifier).
         *
         * @param WebRequest $request
-        * @return boolean
+        * @return bool
         */
        protected function isSubmitAttempt( WebRequest $request ) {
                return $request->getCheck( 'wpEditToken' ) || $request->getCheck( 'wpFormIdentifier' );
@@ -1218,7 +1218,7 @@ abstract class HTMLFormField {
         * Whether this field requires the user agent to have JavaScript enabled for the client-side HTML5
         * form validation to work correctly.
         *
-        * @return boolean
+        * @return bool
         * @since 1.29
         */
        public function needsJSForHtml5FormValidation() {
index bcb07bd..b2290ce 100644 (file)
@@ -6,7 +6,7 @@ class HTMLFormFieldWithButton extends HTMLFormField {
        /** @var string $mButtonClass CSS class for the button in this field */
        protected $mButtonClass = '';
 
-       /** @var string|integer $mButtonId Element ID for the button in this field */
+       /** @var string|int $mButtonId Element ID for the button in this field */
        protected $mButtonId = '';
 
        /** @var string $mButtonName Name the button in this field */
index 096767f..b427c19 100644 (file)
        "config-nofile": "Файл «$1» ня знойдзены. Ці быў ён выдалены?",
        "config-extension-link": "Ці ведаеце вы, што вашая вікі падтрымлівае [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 матрыцу пашырэньняў], каб пабачыць поўны сьпіс.",
        "config-skins-screenshots": "$1 (здымкі экрану: $2)",
+       "config-screenshot": "здымак экрану",
        "mainpagetext": "<strong>MediaWiki была ўсталяваная.</strong>",
        "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 Частыя пытаньні MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Пераклад MediaWiki на вашую мову]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Даведайцеся, як змагацца з спамам у вашай вікі]"
 }
index 6282ca1..97a09a3 100644 (file)
@@ -91,6 +91,7 @@
        "config-no-cli-uploads-check": "'''هشدار:''' فهرست پیش‌فرض ارسال‌های شما (<code>$1</code>) برای آسیب‌پذیری اجرای متن دلخواه در طول نصب سی‌ال آی بررسی نشده‌است.",
        "config-brokenlibxml": "دستگاه شما دارای تلفیقی از نسخه‌های پی‌اچ‌پی و لیبکسمل۲ است که ناقص است و می‌تواند دلیل از بین رفتن اطلاعات مخفی در مدیاویکی و دیگر برنامه‌های کاربردی شبکه باشد.\nارتقاء به لیبکسمل۲  ۲.۷.۳ یا بالاتر ([https://bugs.php.net/bug.php?id=45996 bug filed with PHP]) ارتفاء دهید.\nنصب شکست خورد ماند.",
        "config-suhosin-max-value-length": "سوهُسین نصب شده‌است و پارامتر جت <code>length</code> را به $1 بایت محدود می‌کند.\n قسمت بارکنندهٔ منبع مدیاویکی پیرامون این محدوده کار خواهد‌کرد، اما عملکرد آن را پایین می‌آورد. اگر به هیچ وجه ممکن نیست، باید <code>suhosin.get.max_value_length</code> را به ۱۰۲۴ یا بالاتر در <code>php.ini</code> تنظیم کنید، و \n<code>$wgResourceLoaderMaxQueryLength</code> را به مقدار مشابه در <code>LocalSettings.php</code> تنظیم کنید.",
+       "config-using-32bit": "<strong>هشدار:</strong> سیستم شما به‌نظر می‌آید با اعداد صحیح ۳۲ بیت اجرا شده باشد. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit توصیه نمی‌شود].",
        "config-db-type": "نوع پایگاه اطلاعات:",
        "config-db-host": "میزبان پایگاه اطلاعات:",
        "config-db-host-help": "اگر سرور پایگاه اطلاعاتی شما در سرور دیگری است، نام گروه و آدرس آی‌پی را اینجا وارد کنید.\nاگر از گروه شبکهٔ اشتراک گذاری استفاده می‌کنید، تهیه‌کنندهٔ گروه‌تان باید نام گروه صحیح در اسنادومدارک را به شما بدهد.\nاگر در حال نصب یک سرور ویندوز هستید و از مای‌اس‌کیو‌ال استفاده می‌کنید، ممکن است استفاده از \"گروه داخلی\" برای نام سرور کار نکند.اگر کار نکرد، \"۱۲۷.۰.۰.۱\" را برای آدرس آی‌پی داخلی امتحان کنید.\nاگر از پستگِرِاس‌کیوال استفاده می‌کنید،برای اتصال از طریق یک سوکت یونیکس این زمینه را خالی رها کنید.",
        "config-db-account-oracle-warn": "برای نصب برنامهٔ اوراکل به عنوان پایگاه اطلاعاتی در بخش گذشته،سه سناریو پشتیبانی شده است:\nاگر مایل به ایجاد حساب پایگاه اطلاعاتی به عنوان بخشی از روند نصب هستید، لطفاً یک حساب با نقش اس‌وای‌اس‌دی‌بی‌ای به عنوان حساب پایگاه اطلاعاتی برای نصب تهیه کنید و اعتبارنامه‌های مطلوبی را برای حساب دردسترس شبکه تعیین کنید، به عبارتی دیگر یا می‌توانید حساب دردسترس شبکه را به طور دستی ایجاد کنید و تنها آن حساب را تهیه کنید (اگر مستلزم مجوزهایی برای ایجاد موضوعات طرح کلی باشد) یا دو حساب دیگر تهیه کنید،یکی با ایجاد مزایا و یک حساب محدود برای دسترسی شبکه.\nمتنی برای ایجاد یک حساب با مزایای لازم بنویسید که می‌تواند در فهرست\"نگهداری/برنامهٔ اوراکل\" این نصب یافت شود. به یاد داشته باشید که استفاده از یک حساب محدود،همهٔ قابلیت‌های نگهداری با حساب پیش‌فرض را غیرفعال خواهد کرد.",
        "config-db-install-account": "حساب کاربری برای نصب",
        "config-db-username": "نام کاربری پایگاه اطلاعات:",
-       "config-db-password": "گذرواژه پایگاه داده‌ها:",
+       "config-db-password": "گذرواژه پایگاه‌های داده:",
        "config-db-install-username": "نام کاربری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌شد.\nاین نام کاربری حساب مدیاویکی نیست; نام کاربری برای پایگاه اطلاعاتی شما است.",
        "config-db-install-password": "رمز عبوری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌شد.\nاین رمز عبور برای حساب مدیاویکی نیست;رمز عبور برای پایگاه اطلاعاتی شما است.",
        "config-db-install-help": "نام کاربری و رمز عبوری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌ٰشد.",
        "config-help-tooltip": "برای گسترش کلیک کنید",
        "config-nofile": "پروندهٔ «$1» یافت نشد. آیا حذف شده‌است؟",
        "config-extension-link": "آیا می‌دانستید که ویکی شما [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions] را پشتیبانی می‌کند؟\nشما می‌توانید [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category]",
+       "config-skins-screenshots": "$1 (تصاویر: $2)",
+       "config-screenshot": "تصویر",
        "mainpagetext": "'''مدیاویکی با موفقیت نصب شد.'''",
        "mainpagedocfooter": "از [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents راهنمای کاربری]\nبرای اطلاعات بیشتر در مورد به‌کارگیری نرم‌افزار ویکی استفاده کنید.\n\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/Localisation#Translation_resources محلی‌سازی مدیاویکی به زبان شما]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam یادگیری روش‌های مقابله با هرزنگاری در ویکی]"
 }
index 9122967..84e0a42 100644 (file)
        "config-no-cli-uploads-check": "'''Attention:''' Votre répertoire par défaut pour les imports(<code>$1</code>) n'est pas contrôlé concernant la vulnérabilité d'exécution de scripts arbitraires lors de l'installation CLI.",
        "config-brokenlibxml": "Votre système utilise une combinaison de versions de PHP et libxml2 qui est boguée et peut engendrer des corruptions cachées de données dans MediaWiki et d’autres applications web.\nVeuillez mettre à jour votre système vers libxml2 2.7.3 ou plus récent ([https://bugs.php.net/bug.php?id=45996 bogue déposé auprès de PHP]).\nInstallation interrompue.",
        "config-suhosin-max-value-length": "Suhosin est installé et limite la <code>longueur</code> du paramètre GET à $1 octets.\nLe composant ResourceLoader de MediaWiki va répondre en respectant cette limite, mais ses performances seront dégradées. Si possible, vous devriez définir <code>suhosin.get.max_value_length</code> à 1024 ou plus dans le fichier <code>php.ini</code>, et fixer <code>$wgResourceLoaderMaxQueryLength</code> à la même valeur dans <code>LocalSettings.php</code>.",
+       "config-using-32bit": "<strong>Attention:</strong> votre système semble utiliser les entiers sur 32 bits. Ceci n'est [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit pas recommandé].",
        "config-db-type": "Type de base de données :",
        "config-db-host": "Nom d’hôte de la base de données :",
        "config-db-host-help": "Si votre serveur de base de données est sur un serveur différent, saisissez ici son nom d’hôte ou son adresse IP.\n\nSi vous utilisez un hébergement mutualisé, votre hébergeur doit vous avoir fourni le nom d’hôte correct dans sa documentation.\n\nSi vous installez sur un serveur Windows et utilisez MySQL, « localhost » peut ne pas fonctionner comme nom de serveur. S’il ne fonctionne pas, essayez « 127.0.0.1 » comme adresse IP locale.\n\nSi vous utilisez PostgreSQL, laissez ce champ vide pour vous connecter via un socket Unix.",
        "config-help-tooltip": "cliquer pour agrandir",
        "config-nofile": "Le fichier « $1 » est introuvable. A-t-il été supprimé ?",
        "config-extension-link": "Saviez-vous que votre wiki prend en charge [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions par catégorie] ou la [https://www.mediawiki.org/wiki/Extension_Matrix matrice des extensions] pour voir la liste complète des extensions.",
+       "config-skins-screenshots": "$1 (captures d'écran: $2)",
+       "config-screenshot": "Captures d’écrans",
        "mainpagetext": "<strong>MediaWiki a été installé.</strong>",
        "mainpagedocfooter": "Consultez le [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guide de l’utilisateur du contenu] pour plus d’informations sur l’utilisation de ce logiciel de wiki.\n\n== Pour démarrer ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]"
 }
index ee01751..66f095a 100644 (file)
        "config-help-tooltip": "확장하려면 클릭",
        "config-nofile": "\"$1\" 파일을 찾을 수 없습니다. 이미 삭제되었나요?",
        "config-extension-link": "당신의 위키가 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?\n\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 분류별 확장 기능]을 찾아보실 수 있습니다.",
+       "config-skins-screenshots": "$1 (스크린샷: $2)",
        "config-screenshot": "스크린샷",
        "mainpagetext": "<strong>미디어위키가 설치되었습니다.</strong>",
        "mainpagedocfooter": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.\n\n== 시작하기 ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 설정하기 목록]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ 미디어위키 FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 릴리스 메일링 리스트]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 내 언어로 미디어위키 지역화]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 당신의 위키에서 스팸에 대처하는 법을 배우세요]"
index 4db6cfb..442054a 100644 (file)
        "config-help-tooltip": "klik om uit te vouwen",
        "config-nofile": "Het bestand \"$1\" is niet gevonden. Is het verwijderd?",
        "config-extension-link": "Weet u dat u [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\n\nU kunt [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category uitbreidingen op categorie] bekijken of ga naar de [https://www.mediawiki.org/wiki/Extension_Matrix uitbreidingenmatrix] om de volledige lijst met uitbreidingen te bekijken.",
+       "config-skins-screenshots": "$1 (schermafbeeldingen: $2)",
+       "config-screenshot": "schermafbeelding",
        "mainpagetext": "<strong>De installatie van MediaWiki is geslaagd.</strong>",
        "mainpagedocfooter": "Raadpleeg de [https://meta.wikimedia.org/wiki/Special:MyLanguage/Help:Contents handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Leer hoe u spam kunt voorkomen op uw wiki]"
 }
index 884f956..a6ebd92 100644 (file)
@@ -94,6 +94,7 @@
        "config-no-cli-uploads-check": "<strong>Aviso:</strong> O diretório por omissão para carregamentos, <code>$1</code>, não é verificado para determinar se é vulnerável à execução de listas arbitrárias de comandos durante a instalação por CLI (\"Command-line Interface\").",
        "config-brokenlibxml": "O seu sistema tem uma combinação de versões do PHP e do libxml2 conhecida por ser problemática, podendo causar corrupção de dados no MediaWiki e noutras aplicações da Internet.\nAtualize para a versão 2.7.3 ou posterior do libxml2 ([https://bugs.php.net/bug.php?id=45996 incidência reportada no PHP]).\nInstalação cancelada.",
        "config-suhosin-max-value-length": "O Suhosin está instalado e limita o parâmetro GET <code>length</code> a $1 bytes.\nO componente ResourceLoader do MediaWiki consegue exceder este limite, mas prejudicando o desempenho.\nSe lhe for possível, deve atribuir ao parâmetro <code>suhosin.get.max_value_length</code> o valor 1024 ou maior no ficheiro <code>php.ini</code>, e definir o mesmo valor para <code>$wgResourceLoaderMaxQueryLength</code> no ficheiro LocalSettings.php.",
+       "config-using-32bit": "<strong>Aviso:</strong> o seu sistema parece estar a funcionar com inteiros de 32 bits. Isto  [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit não é recomendado].",
        "config-db-type": "Tipo da base de dados:",
        "config-db-host": "Servidor da base de dados:",
        "config-db-host-help": "Se a base de dados estiver num servidor separado, introduza aqui o nome ou o endereço IP desse servidor.\n\nSe estiver a usar um servidor partilhado, o fornecedor do alojamento deve fornecer o nome do servidor na documentação.\n\nSe está a fazer a instalação num servidor Windows com MySQL, usar como nome do servidor \"localhost\" poderá não funcionar. Se não funcionar, tente usar \"127.0.0.1\" como endereço IP local.\n\nSe estiver a usar PostgreSQL, deixe este campo em branco para fazer a ligação através de um socket Unix.",
index 3a0063c..3907fc6 100644 (file)
@@ -34,7 +34,7 @@ use Wikimedia\Rdbms\LBFactory;
  * @since 1.27
  */
 class CategoryMembershipChangeJob extends Job {
-       /** @var integer|null */
+       /** @var int|null */
        private $ticket;
 
        const ENQUEUE_FUDGE_SEC = 60;
index 0c84a13..b4ead5d 100644 (file)
@@ -39,9 +39,9 @@ use Wikimedia\Rdbms\DBReplicationWaitError;
 class RefreshLinksJob extends Job {
        /** @var float Cache parser output when it takes this long to render */
        const PARSE_THRESHOLD_SEC = 1.0;
-       /** @var integer Lag safety margin when comparing root job times to last-refresh times */
+       /** @var int Lag safety margin when comparing root job times to last-refresh times */
        const CLOCK_FUDGE = 10;
-       /** @var integer How many seconds to wait for replica DBs to catch up */
+       /** @var int How many seconds to wait for replica DBs to catch up */
        const LAG_WAIT_TIMEOUT = 15;
 
        function __construct( Title $title, array $params ) {
index f76d9a2..79d1374 100644 (file)
@@ -45,7 +45,7 @@ abstract class GenericArrayObject extends ArrayObject {
        /**
         * @see SiteList::getNewOffset()
         * @since 1.20
-        * @var integer
+        * @var int
         */
        protected $indexOffset = 0;
 
@@ -56,7 +56,7 @@ abstract class GenericArrayObject extends ArrayObject {
         *
         * @since 1.20
         *
-        * @return integer
+        * @return int
         */
        protected function getNewOffset() {
                while ( $this->offsetExists( $this->indexOffset ) ) {
@@ -167,7 +167,7 @@ abstract class GenericArrayObject extends ArrayObject {
         *
         * @since 1.20
         *
-        * @param integer|string $index
+        * @param int|string $index
         * @param mixed $value
         *
         * @return bool
index a4aabcd..be40965 100644 (file)
@@ -35,7 +35,7 @@ class HashRing {
        protected $liveRing;
        /** @var Array (location => UNIX timestamp) */
        protected $ejectionExpiries = [];
-       /** @var integer UNIX timestamp */
+       /** @var int UNIX timestamp */
        protected $ejectionNextExpiry = INF;
 
        const RING_SIZE = 268435456; // 2^28
@@ -93,7 +93,7 @@ class HashRing {
         * Get the location of an item on the ring, as well as the next locations
         *
         * @param string $item
-        * @param integer $limit Maximum number of locations to return
+        * @param int $limit Maximum number of locations to return
         * @return array List of locations
         */
        public function getLocations( $item, $limit ) {
@@ -152,7 +152,7 @@ class HashRing {
         * Remove a location from the "live" hash ring
         *
         * @param string $location
-        * @param integer $ttl Seconds
+        * @param int $ttl Seconds
         * @return bool Whether some non-ejected locations are left
         */
        public function ejectFromLiveRing( $location, $ttl ) {
@@ -218,7 +218,7 @@ class HashRing {
         * Get the location of an item on the "live" ring, as well as the next locations
         *
         * @param string $item
-        * @param integer $limit Maximum number of locations to return
+        * @param int $limit Maximum number of locations to return
         * @return array List of locations
         * @throws UnexpectedValueException
         */
index 6c48cee..16168e6 100644 (file)
@@ -50,13 +50,13 @@ class MultiHttpClient implements LoggerAwareInterface {
        protected $multiHandle = null; // curl_multi handle
        /** @var string|null SSL certificates path  */
        protected $caBundlePath;
-       /** @var integer */
+       /** @var int */
        protected $connTimeout = 10;
-       /** @var integer */
+       /** @var int */
        protected $reqTimeout = 300;
        /** @var bool */
        protected $usePipelining = false;
-       /** @var integer */
+       /** @var int */
        protected $maxConnsPerHost = 50;
        /** @var string|null proxy */
        protected $proxy;
index a7d064b..9730acb 100644 (file)
@@ -63,7 +63,7 @@ class HTTPFileStreamer {
         * @param array $headers Any additional headers to send if the file exists
         * @param bool $sendErrors Send error messages if errors occur (like 404)
         * @param array $optHeaders HTTP request header map (e.g. "range") (use lowercase keys)
-        * @param integer $flags Bitfield of STREAM_* constants
+        * @param int $flags Bitfield of STREAM_* constants
         * @throws MWException
         * @return bool Success
         */
@@ -179,7 +179,7 @@ class HTTPFileStreamer {
         * Send out a standard 404 message for a file
         *
         * @param string $fname Full name and path of the file to stream
-        * @param integer $flags Bitfield of STREAM_* constants
+        * @param int $flags Bitfield of STREAM_* constants
         * @since 1.24
         */
        public static function send404Message( $fname, $flags = 0 ) {
@@ -202,7 +202,7 @@ class HTTPFileStreamer {
         * Convert a Range header value to an absolute (start, end) range tuple
         *
         * @param string $range Range header value
-        * @param integer $size File size
+        * @param int $size File size
         * @return array|string Returns error string on failure (start, end, length)
         * @since 1.24
         */
index a262e0e..f834ccf 100644 (file)
@@ -47,7 +47,7 @@ use Wikimedia\WaitConditionLoop;
 abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        /** @var array[] Lock tracking */
        protected $locks = [];
-       /** @var integer ERR_* class constant */
+       /** @var int ERR_* class constant */
        protected $lastError = self::ERR_NONE;
        /** @var string */
        protected $keyspace = 'local';
@@ -55,7 +55,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        protected $logger;
        /** @var callback|null */
        protected $asyncHandler;
-       /** @var integer Seconds */
+       /** @var int Seconds */
        protected $syncTimeout;
 
        /** @var bool */
@@ -70,7 +70,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        /** @var callable[] */
        protected $busyCallbacks = [];
 
-       /** @var integer[] Map of (ATTR_* class constant => QOS_* class constant) */
+       /** @var int[] Map of (ATTR_* class constant => QOS_* class constant) */
        protected $attrMap = [];
 
        /** Possible values for getLastError() */
@@ -142,7 +142,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * @param string $key
         * @param int $ttl Time-to-live (seconds)
         * @param callable $callback Callback that derives the new value
-        * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
+        * @param int $flags Bitfield of BagOStuff::READ_* constants [optional]
         * @return mixed The cached value if found or the result of $callback otherwise
         * @since 1.27
         */
@@ -172,8 +172,8 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * higher tiers using standard TTLs.
         *
         * @param string $key
-        * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
-        * @param integer $oldFlags [unused]
+        * @param int $flags Bitfield of BagOStuff::READ_* constants [optional]
+        * @param int $oldFlags [unused]
         * @return mixed Returns false on failure and if the item does not exist
         */
        public function get( $key, $flags = 0, $oldFlags = null ) {
@@ -220,7 +220,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
 
        /**
         * @param string $key
-        * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
+        * @param int $flags Bitfield of BagOStuff::READ_* constants [optional]
         * @return mixed Returns false on failure and if the item does not exist
         */
        abstract protected function doGet( $key, $flags = 0 );
@@ -230,7 +230,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         *
         * @param string $key
         * @param mixed &$casToken
-        * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
+        * @param int $flags Bitfield of BagOStuff::READ_* constants [optional]
         * @return mixed Returns false on failure and if the item does not exist
         * @throws Exception
         */
@@ -503,7 +503,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        /**
         * Get an associative array containing the item for each of the keys that have items.
         * @param array $keys List of strings
-        * @param integer $flags Bitfield; supports READ_LATEST [optional]
+        * @param int $flags Bitfield; supports READ_LATEST [optional]
         * @return array
         */
        public function getMulti( array $keys, $flags = 0 ) {
@@ -766,8 +766,8 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        }
 
        /**
-        * @param integer $flag ATTR_* class constant
-        * @return integer QOS_* class constant
+        * @param int $flag ATTR_* class constant
+        * @return int QOS_* class constant
         * @since 1.28
         */
        public function getQoS( $flag ) {
@@ -778,7 +778,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * Merge the flag maps of one or more BagOStuff objects into a "lowest common denominator" map
         *
         * @param BagOStuff[] $bags
-        * @return integer[] Resulting flag map (class ATTR_* constant => class QOS_* constant)
+        * @return int[] Resulting flag map (class ATTR_* constant => class QOS_* constant)
         */
        protected function mergeFlagMaps( array $bags ) {
                $map = [];
index baa3c32..6d583da 100644 (file)
@@ -31,7 +31,7 @@
 class HashBagOStuff extends BagOStuff {
        /** @var mixed[] */
        protected $bag = [];
-       /** @var integer Max entries allowed */
+       /** @var int Max entries allowed */
        protected $maxCacheKeys;
 
        const KEY_VAL = 0;
index 65f3a8a..200ab79 100644 (file)
@@ -171,7 +171,7 @@ class MultiWriteBagOStuff extends BagOStuff {
        /**
         * Apply a write method to the first $count backing caches
         *
-        * @param integer $count
+        * @param int $count
         * @param bool $asyncWrites
         * @param string $method
         * @param mixed $args,...
index 5d2577b..d3aa9f5 100644 (file)
@@ -57,7 +57,7 @@ class RESTBagOStuff extends BagOStuff {
 
        /**
         * @param string $key
-        * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
+        * @param int $flags Bitfield of BagOStuff::READ_* constants [optional]
         * @return mixed Returns false on failure and if the item does not exist
         */
        protected function doGet( $key, $flags = 0 ) {
index a80ed8d..c1c9cc1 100644 (file)
@@ -92,11 +92,11 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        /** @var int ERR_* constant for the "last error" registry */
        protected $lastRelayError = self::ERR_NONE;
 
-       /** @var integer Callback stack depth for getWithSetCallback() */
+       /** @var int Callback stack depth for getWithSetCallback() */
        private $callbackDepth = 0;
        /** @var mixed[] Temporary warm-up cache */
        private $warmupCache = [];
-       /** @var integer Key fetched */
+       /** @var int Key fetched */
        private $warmupKeyMisses = 0;
 
        /** Max time expected to pass between delete() and DB commit finishing */
@@ -148,7 +148,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        const FLD_FLAGS = 4; // key to the flags bitfield
        const FLD_HOLDOFF = 5; // key to any hold-off TTL
 
-       /** @var integer Treat this value as expired-on-arrival */
+       /** @var int Treat this value as expired-on-arrival */
        const FLG_STALE = 1;
 
        const ERR_NONE = 0; // no error
@@ -404,7 +404,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *
         * @param string $key Cache key
         * @param mixed $value
-        * @param integer $ttl Seconds to live. Special values are:
+        * @param int $ttl Seconds to live. Special values are:
         *   - WANObjectCache::TTL_INDEFINITE: Cache forever
         * @param array $opts Options map:
         *   - lag : Seconds of replica DB lag. Typically, this is either the replica DB lag
@@ -537,7 +537,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * idempotence, the $ttl should not vary for different delete() calls on the same key.
         *
         * @param string $key Cache key
-        * @param integer $ttl Tombstone TTL; Default: WANObjectCache::HOLDOFF_TTL
+        * @param int $ttl Tombstone TTL; Default: WANObjectCache::HOLDOFF_TTL
         * @return bool True if the item was purged or not found, false on failure
         */
        final public function delete( $key, $ttl = self::HOLDOFF_TTL ) {
@@ -797,7 +797,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @see WANObjectCache::set()
         *
         * @param string $key Cache key
-        * @param integer $ttl Seconds to live for key updates. Special values are:
+        * @param int $ttl Seconds to live for key updates. Special values are:
         *   - WANObjectCache::TTL_INDEFINITE: Cache forever
         *   - WANObjectCache::TTL_UNCACHEABLE: Do not cache at all
         * @param callable $callback Value generation function
@@ -929,7 +929,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @see WANObjectCache::getWithSetCallback()
         *
         * @param string $key
-        * @param integer $ttl
+        * @param int $ttl
         * @param callback $callback
         * @param array $opts Options map for getWithSetCallback()
         * @param float &$asOf Cache generation timestamp of returned value [returned]
@@ -1098,7 +1098,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @endcode
         *
         * @param ArrayIterator $keyedIds Result of WANObjectCache::makeMultiKeys()
-        * @param integer $ttl Seconds to live for key updates
+        * @param int $ttl Seconds to live for key updates
         * @param callable $callback Callback the yields entity regeneration callbacks
         * @param array $opts Options map
         * @return array Map of (cache key => value) in the same order as $keyedIds
@@ -1184,7 +1184,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @endcode
         *
         * @param ArrayIterator $keyedIds Result of WANObjectCache::makeMultiKeys()
-        * @param integer $ttl Seconds to live for key updates
+        * @param int $ttl Seconds to live for key updates
         * @param callable $callback Callback the yields entity regeneration callbacks
         * @param array $opts Options map
         * @return array Map of (cache key => value) in the same order as $keyedIds
@@ -1393,8 +1393,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        }
 
        /**
-        * @param integer $flag ATTR_* class constant
-        * @return integer QOS_* class constant
+        * @param int $flag ATTR_* class constant
+        * @return int QOS_* class constant
         * @since 1.28
         */
        public function getQoS( $flag ) {
@@ -1417,11 +1417,11 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *     $ttl = $cache->adaptiveTTL( $mtime, $cache::TTL_DAY );
         * @endcode
         *
-        * @param integer|float $mtime UNIX timestamp
-        * @param integer $maxTTL Maximum TTL (seconds)
-        * @param integer $minTTL Minimum TTL (seconds); Default: 30
+        * @param int|float $mtime UNIX timestamp
+        * @param int $maxTTL Maximum TTL (seconds)
+        * @param int $minTTL Minimum TTL (seconds); Default: 30
         * @param float $factor Value in the range (0,1); Default: .2
-        * @return integer Adaptive TTL
+        * @return int Adaptive TTL
         * @since 1.28
         */
        public function adaptiveTTL( $mtime, $maxTTL, $minTTL = 30, $factor = .2 ) {
@@ -1439,7 +1439,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        }
 
        /**
-        * @return integer Number of warmup key cache misses last round
+        * @return int Number of warmup key cache misses last round
         * @since 1.30
         */
        public function getWarmupKeyMisses() {
@@ -1452,8 +1452,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * This must set the key to "PURGED:<UNIX timestamp>:<holdoff>"
         *
         * @param string $key Cache key
-        * @param integer $ttl How long to keep the tombstone [seconds]
-        * @param integer $holdoff HOLDOFF_* constant controlling how long to ignore sets for this key
+        * @param int $ttl How long to keep the tombstone [seconds]
+        * @param int $holdoff HOLDOFF_* constant controlling how long to ignore sets for this key
         * @return bool Success
         */
        protected function relayPurge( $key, $ttl, $holdoff ) {
@@ -1540,8 +1540,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * and get hits too. Similar to worthRefreshExpiring(), randomization is used.
         *
         * @param float $asOf UNIX timestamp of the value
-        * @param integer $ageNew Age of key when this might recommend refreshing (seconds)
-        * @param integer $timeTillRefresh Age of key when it should be refreshed if popular (seconds)
+        * @param int $ageNew Age of key when this might recommend refreshing (seconds)
+        * @param int $timeTillRefresh Age of key when it should be refreshed if popular (seconds)
         * @param float $now The current UNIX timestamp
         * @return bool
         */
@@ -1590,7 +1590,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * Do not use this method outside WANObjectCache
         *
         * @param mixed $value
-        * @param integer $ttl [0=forever]
+        * @param int $ttl [0=forever]
         * @param float $now Unix Current timestamp just before calling set()
         * @return array
         */
index 1696c59..14737b1 100644 (file)
@@ -48,7 +48,7 @@ class WANObjectCacheReaper implements LoggerAwareInterface {
 
        /** @var string */
        protected $channel;
-       /** @var integer */
+       /** @var int */
        protected $initialStartWindow;
 
        /**
index 8b1aabe..f002d3e 100644 (file)
@@ -61,9 +61,9 @@ class ChronologyProtector implements LoggerAwareInterface {
        /** @var float[] Map of (DB master name => 1) */
        protected $shutdownTouchDBs = [];
 
-       /** @var integer Seconds to store positions */
+       /** @var int Seconds to store positions */
        const POSITION_TTL = 60;
-       /** @var integer Max time to wait for positions to appear */
+       /** @var int Max time to wait for positions to appear */
        const POS_WAIT_TIMEOUT = 5;
 
        /**
index 8ac4161..af431a6 100644 (file)
@@ -99,7 +99,7 @@ class TransactionProfiler implements LoggerAwareInterface {
         * With conflicting expectations, the most narrow ones will be used
         *
         * @param string $event (writes,queries,conns,mConns)
-        * @param integer $value Maximum count of the event
+        * @param int $value Maximum count of the event
         * @param string $fname Caller
         * @since 1.25
         */
@@ -199,7 +199,7 @@ class TransactionProfiler implements LoggerAwareInterface {
         * @param string $query Function name or generalized SQL
         * @param float $sTime Starting UNIX wall time
         * @param bool $isWrite Whether this is a write query
-        * @param integer $n Number of affected rows
+        * @param int $n Number of affected rows
         */
        public function recordQueryCompletion( $query, $sTime, $isWrite = false, $n = 0 ) {
                $eTime = microtime( true );
@@ -266,7 +266,7 @@ class TransactionProfiler implements LoggerAwareInterface {
         * @param string $db DB name
         * @param string $id ID string of transaction
         * @param float $writeTime Time spent in write queries
-        * @param integer $affected Number of rows affected by writes
+        * @param int $affected Number of rows affected by writes
         */
        public function transactionWritingOut( $server, $db, $id, $writeTime = 0.0, $affected = 0 ) {
                $name = "{$server} ({$db}) (TRX#$id)";
index cec13b5..01020e9 100644 (file)
@@ -108,7 +108,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        protected $mTablePrefix = '';
        /** @var string */
        protected $mSchema = '';
-       /** @var integer */
+       /** @var int */
        protected $mFlags;
        /** @var array */
        protected $mLBInfo = [];
@@ -197,11 +197,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         */
        private $mTrxWriteDuration = 0.0;
        /**
-        * @var integer Number of write queries for the current transaction
+        * @var int Number of write queries for the current transaction
         */
        private $mTrxWriteQueryCount = 0;
        /**
-        * @var integer Number of rows affected by write queries for the current transaction
+        * @var int Number of rows affected by write queries for the current transaction
         */
        private $mTrxWriteAffectedRows = 0;
        /**
@@ -209,7 +209,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         */
        private $mTrxWriteAdjDuration = 0.0;
        /**
-        * @var integer Number of write queries counted in mTrxWriteAdjDuration
+        * @var int Number of write queries counted in mTrxWriteAdjDuration
         */
        private $mTrxWriteAdjQueryCount = 0;
        /**
@@ -1054,7 +1054,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         *
         * @param string $sql A SQL write query
         * @param float $runtime Total runtime, including RTT
-        * @param integer $affected Affected row count
+        * @param int $affected Affected row count
         */
        private function updateTrxWriteQueryTime( $sql, $runtime, $affected ) {
                // Whether this is indicative of replica DB runtime (except for RBR or ws_repl)
@@ -2591,7 +2591,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        /**
         * Do not use this method outside of Database/DBError classes
         *
-        * @param integer|string $errno
+        * @param int|string $errno
         * @return bool Whether the given query error was a connection drop
         */
        public function wasConnectionError( $errno ) {
@@ -2711,7 +2711,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         *
         * This method should not be used outside of Database/LoadBalancer
         *
-        * @param integer $trigger IDatabase::TRIGGER_* constant
+        * @param int $trigger IDatabase::TRIGGER_* constant
         * @since 1.20
         * @throws Exception
         */
@@ -2791,7 +2791,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         *
         * This method should not be used outside of Database/LoadBalancer
         *
-        * @param integer $trigger IDatabase::TRIGGER_* constant
+        * @param int $trigger IDatabase::TRIGGER_* constant
         * @throws Exception
         * @since 1.20
         */
index b82603e..9375efc 100644 (file)
@@ -277,7 +277,7 @@ interface IDatabase {
        /**
         * Get the number of affected rows from pending write queries
         *
-        * @return integer
+        * @return int
         * @since 1.30
         */
        public function pendingWriteRowsAffected();
index 06776fe..0657cf3 100644 (file)
@@ -24,7 +24,7 @@ class MySQLMasterPos implements DBMasterPos {
 
        /**
         * @param string $file Binlog file name
-        * @param integer $pos Binlog position
+        * @param int $pos Binlog position
         * @param string $gtid Comma separated GTID set [optional]
         */
        function __construct( $file, $pos, $gtid = '' ) {
index 4e28397..298ec61 100644 (file)
@@ -5,7 +5,7 @@ namespace Wikimedia\Rdbms;
 use stdClass;
 
 class MssqlResultWrapper extends ResultWrapper {
-       /** @var integer|null */
+       /** @var int|null */
        private $mSeekTo = null;
 
        /**
index bc2a865..6a4076f 100644 (file)
@@ -27,7 +27,7 @@ namespace Wikimedia\Rdbms;
 class DBQueryError extends DBExpectedError {
        /** @var string */
        public $error;
-       /** @var integer */
+       /** @var int */
        public $errno;
        /** @var string */
        public $sql;
index ff6635d..4cfa542 100644 (file)
@@ -138,7 +138,7 @@ interface ILBFactory {
 
        /**
         * Prepare all tracked load balancers for shutdown
-        * @param integer $mode One of the class SHUTDOWN_* constants
+        * @param int $mode One of the class SHUTDOWN_* constants
         * @param callable|null $workCallback Work to mask ChronologyProtector writes
         */
        public function shutdown(
index 1665a5e..36de39e 100644 (file)
@@ -49,7 +49,7 @@ class LoadBalancer implements ILoadBalancer {
        private $mGroupLoads;
        /** @var bool Whether to disregard replica DB lag as a factor in replica DB selection */
        private $mAllowLagged;
-       /** @var integer Seconds to spend waiting on replica DB lag to resolve */
+       /** @var int Seconds to spend waiting on replica DB lag to resolve */
        private $mWaitTimeout;
        /** @var array The LoadMonitor configuration */
        private $loadMonitorConfig;
@@ -79,7 +79,7 @@ class LoadBalancer implements ILoadBalancer {
 
        /** @var Database DB connection object that caused a problem */
        private $errorConnection;
-       /** @var integer The generic (not query grouped) replica DB index (of $mServers) */
+       /** @var int The generic (not query grouped) replica DB index (of $mServers) */
        private $mReadIndex;
        /** @var bool|DBMasterPos False if not set */
        private $mWaitForPos;
@@ -91,7 +91,7 @@ class LoadBalancer implements ILoadBalancer {
        private $mLastError = 'Unknown error';
        /** @var string|bool Reason the LB is read-only or false if not */
        private $readOnlyReason = false;
-       /** @var integer Total connections opened */
+       /** @var int Total connections opened */
        private $connsOpened = 0;
        /** @var string|bool String if a requested DBO_TRX transaction round is active */
        private $trxRoundId = false;
@@ -111,17 +111,17 @@ class LoadBalancer implements ILoadBalancer {
        /** @var callable Exception logger */
        private $errorLogger;
 
-       /** @var boolean */
+       /** @var bool */
        private $disabled = false;
-       /** @var boolean */
+       /** @var bool */
        private $chronProtInitialized = false;
 
-       /** @var integer Warn when this many connection are held */
+       /** @var int Warn when this many connection are held */
        const CONN_HELD_WARN_THRESHOLD = 10;
 
-       /** @var integer Default 'max lag' when unspecified */
+       /** @var int Default 'max lag' when unspecified */
        const MAX_LAG_DEFAULT = 10;
-       /** @var integer Seconds to cache master server read-only status */
+       /** @var int Seconds to cache master server read-only status */
        const TTL_CACHE_READONLY = 5;
 
        const KEY_LOCAL = 'local';
@@ -845,7 +845,7 @@ class LoadBalancer implements ILoadBalancer {
         *
         * @param int $i Server index
         * @param string $domain Domain ID to open
-        * @param integer $flags Class CONN_* constant bitfield
+        * @param int $flags Class CONN_* constant bitfield
         * @return Database
         */
        private function openForeignConnection( $i, $domain, $flags = 0 ) {
index fba5e13..a0877a4 100644 (file)
@@ -58,7 +58,7 @@ interface ILoadMonitor extends LoggerAwareInterface {
         *
         * Values may be "false" if replication is too broken to estimate
         *
-        * @param integer[] $serverIndexes
+        * @param int[] $serverIndexes
         * @param string $domain
         * @return array Map of (server index => float|int|bool)
         */
index d4e73c9..4db9e10 100644 (file)
@@ -205,7 +205,7 @@ class LoadMonitor implements ILoadMonitor {
        }
 
        /**
-        * @param integer $index Server index
+        * @param int $index Server index
         * @param IDatabase|null $conn Connection handle or null on connection failure
         * @return float
         */
index 73c6a8f..d75d9c0 100644 (file)
@@ -101,7 +101,7 @@ class BufferingStatsdDataFactory extends StatsdDataFactory implements IBuffering
 
        /**
         * Check whether this data factory has any data.
-        * @return boolean
+        * @return bool
         */
        public function hasData() {
                return !empty( $this->buffer );
index 64ee267..f77b26c 100644 (file)
@@ -10,7 +10,7 @@ use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
 interface IBufferingStatsdDataFactory extends StatsdDataFactoryInterface {
        /**
         * Check whether this data factory has any data.
-        * @return boolean
+        * @return bool
         */
        public function hasData();
 
index 75d6b9e..7369751 100644 (file)
@@ -76,7 +76,7 @@ class NullStatsdDataFactory implements IBufferingStatsdDataFactory {
         * This function creates a 'updateCount' StatsdData object.
         *
         * @param string|array $key The metric(s) to decrement.
-        * @param integer $delta The delta to add to the each metric
+        * @param int $delta The delta to add to the each metric
         *
         * @return mixed
         */
@@ -108,7 +108,7 @@ class NullStatsdDataFactory implements IBufferingStatsdDataFactory {
 
        /**
         * Check whether this data factory has any data.
-        * @return boolean
+        * @return bool
         */
        public function hasData() {
                return false;
index 4db2b60..1da9468 100644 (file)
@@ -77,7 +77,7 @@ class SamplingStatsdClient extends StatsdClient {
         *        strings are not allowed here as sampleData requires a StatsdDataInterface
         * @param int $sampleRate
         *
-        * @return integer the data sent in bytes
+        * @return int the data sent in bytes
         */
        public function send( $data, $sampleRate = 1 ) {
                if ( !is_array( $data ) ) {
index 7311f71..f52cd8d 100644 (file)
@@ -1920,7 +1920,7 @@ class Article implements Page {
 
        /**
         * Check if the page can be cached
-        * @param integer $mode One of the HTMLFileCache::MODE_* constants (since 1.28)
+        * @param int $mode One of the HTMLFileCache::MODE_* constants (since 1.28)
         * @return bool
         */
        public function isFileCacheable( $mode = HTMLFileCache::MODE_NORMAL ) {
index e60f103..d5a2f3f 100644 (file)
@@ -1638,7 +1638,7 @@ class WikiPage implements Page, IDBAccessObject {
 
        /**
         * @param Content $content Pre-save transform content
-        * @param integer $flags
+        * @param int $flags
         * @param User $user
         * @param string $summary
         * @param array $meta
@@ -1812,7 +1812,7 @@ class WikiPage implements Page, IDBAccessObject {
 
        /**
         * @param Content $content Pre-save transform content
-        * @param integer $flags
+        * @param int $flags
         * @param User $user
         * @param string $summary
         * @param array $meta
@@ -2111,13 +2111,13 @@ class WikiPage implements Page, IDBAccessObject {
         * @param Revision $revision
         * @param User $user User object that did the revision
         * @param array $options Array of options, following indexes are used:
-        * - changed: boolean, whether the revision changed the content (default true)
-        * - created: boolean, whether the revision created the page (default false)
-        * - moved: boolean, whether the page was moved (default false)
-        * - restored: boolean, whether the page was undeleted (default false)
+        * - changed: bool, whether the revision changed the content (default true)
+        * - created: bool, whether the revision created the page (default false)
+        * - moved: bool, whether the page was moved (default false)
+        * - restored: bool, whether the page was undeleted (default false)
         * - oldrevision: Revision object for the pre-update revision (default null)
-        * - oldcountable: boolean, null, or string 'no-change' (default null):
-        *   - boolean: whether the page was counted as an article before that
+        * - oldcountable: bool, null, or string 'no-change' (default null):
+        *   - bool: whether the page was counted as an article before that
         *     revision, only used in changed is true and created is false
         *   - null: if created is false, don't update the article count; if created
         *     is true, do update the article count
@@ -2919,7 +2919,7 @@ class WikiPage implements Page, IDBAccessObject {
        /**
         * Lock the page row for this title+id and return page_latest (or 0)
         *
-        * @return integer Returns 0 if no row was found with this title+id
+        * @return int Returns 0 if no row was found with this title+id
         * @since 1.27
         */
        public function lockAndGetLatest() {
@@ -3414,7 +3414,7 @@ class WikiPage implements Page, IDBAccessObject {
         *
         * @param array $added The names of categories that were added
         * @param array $deleted The names of categories that were deleted
-        * @param integer $id Page ID (this should be the original deleted page ID)
+        * @param int $id Page ID (this should be the original deleted page ID)
         */
        public function updateCategoryCounts( array $added, array $deleted, $id = 0 ) {
                $id = $id ?: $this->getId();
index cfb0c3e..2dd4085 100644 (file)
@@ -211,10 +211,10 @@ class ParserOutput extends CacheTime {
         */
        private $mFlags = [];
 
-       /** @var integer|null Assumed rev ID for {{REVISIONID}} if no revision is set */
+       /** @var int|null Assumed rev ID for {{REVISIONID}} if no revision is set */
        private $mSpeculativeRevId;
 
-       /** @var integer Upper bound of expiry based on parse duration */
+       /** @var int Upper bound of expiry based on parse duration */
        private $mMaxAdaptiveExpiry = INF;
 
        const EDITSECTION_REGEX =
@@ -291,7 +291,7 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * @param integer $id
+        * @param int $id
         * @since 1.28
         */
        public function setSpeculativeRevIdUsed( $id ) {
@@ -1075,7 +1075,7 @@ class ParserOutput extends CacheTime {
        /**
         * Lower the runtime adaptive TTL to at most this value
         *
-        * @param integer $ttl
+        * @param int $ttl
         * @since 1.28
         */
        public function updateRuntimeAdaptiveExpiry( $ttl ) {
index 9ea8fa3..8e84cb2 100644 (file)
@@ -1715,7 +1715,7 @@ class PPNode_Hash_Tree implements PPNode {
         * store array can be accessed via getNextSibling().
         *
         * @param array $store
-        * @param integer $index
+        * @param int $index
         */
        public function __construct( array $store, $index ) {
                $this->store = $store;
@@ -1728,7 +1728,7 @@ class PPNode_Hash_Tree implements PPNode {
         * on what is at the relevant store index.
         *
         * @param array $store
-        * @param integer $index
+        * @param int $index
         * @return PPNode_Hash_Tree|PPNode_Hash_Attr|PPNode_Hash_Text
         */
        public static function factory( array $store, $index ) {
@@ -1787,7 +1787,7 @@ class PPNode_Hash_Tree implements PPNode {
         * return a temporary proxy object: different instances will be returned
         * if this is called more than once on the same node.
         *
-        * @return PPNode_Hash_Tree|PPNode_Hash_Attr|PPNode_Hash_Text|boolean
+        * @return PPNode_Hash_Tree|PPNode_Hash_Attr|PPNode_Hash_Text|bool
         */
        public function getFirstChild() {
                if ( !isset( $this->rawChildren[0] ) ) {
@@ -1802,7 +1802,7 @@ class PPNode_Hash_Tree implements PPNode {
         * return a temporary proxy object: different instances will be returned
         * if this is called more than once on the same node.
         *
-        * @return PPNode_Hash_Tree|PPNode_Hash_Attr|PPNode_Hash_Text|boolean
+        * @return PPNode_Hash_Tree|PPNode_Hash_Attr|PPNode_Hash_Text|bool
         */
        public function getNextSibling() {
                return self::factory( $this->store, $this->index + 1 );
@@ -2027,7 +2027,7 @@ class PPNode_Hash_Text implements PPNode {
         * store array can be accessed via getNextSibling().
         *
         * @param array $store
-        * @param integer $index
+        * @param int $index
         */
        public function __construct( array $store, $index ) {
                $this->value = $store[$index];
@@ -2156,7 +2156,7 @@ class PPNode_Hash_Attr implements PPNode {
         * store array can be accessed via getNextSibling().
         *
         * @param array $store
-        * @param integer $index
+        * @param int $index
         */
        public function __construct( array $store, $index ) {
                $descriptor = $store[$index];
index b114c75..bf97bd4 100644 (file)
@@ -37,7 +37,7 @@ abstract class RevDelItem extends RevisionItemBase {
        /**
         * Get the current deletion bitfield value
         *
-        * @return integer
+        * @return int
         */
        abstract public function getBits();
 
index 4a807fb..76fa590 100644 (file)
@@ -234,7 +234,7 @@ class RevisionDeleter {
         * @since 1.22
         * @param array $bitPars ExtractBitParams() params
         * @param int $oldfield Current bitfield
-        * @return integer
+        * @return int
         */
        public static function extractBitfield( array $bitPars, $oldfield ) {
                // Build the actual new rev_deleted bitfield
index 633cfc9..9f09e22 100644 (file)
@@ -56,7 +56,7 @@ class ServiceContainer implements DestructibleService {
        private $serviceInstantiators = [];
 
        /**
-        * @var boolean[] disabled status, per service name
+        * @var bool[] disabled status, per service name
         */
        private $disabled = [];
 
@@ -66,7 +66,7 @@ class ServiceContainer implements DestructibleService {
        private $extraInstantiationParams;
 
        /**
-        * @var boolean
+        * @var bool
         */
        private $destroyed = false;
 
index 79fc720..74925bd 100644 (file)
@@ -420,7 +420,7 @@ class CookieSessionProvider extends SessionProvider {
         * Cookies that are session-length do not call this function.
         *
         * @param string $cookieName
-        * @param boolean $shouldRememberUser Whether the user should be remembered
+        * @param bool $shouldRememberUser Whether the user should be remembered
         *   long-term
         * @return int Cookie expiration time in seconds; 0 for session cookies
         */
index 5ad1b11..cbffe1e 100644 (file)
@@ -306,8 +306,8 @@ class SkinTemplate extends Skin {
                $tpl->set( 'pagetitle', $out->getHTMLTitle() );
                $tpl->set( 'displaytitle', $out->mPageLinkTitle );
 
-               $tpl->setRef( 'thispage', $this->thispage );
-               $tpl->setRef( 'titleprefixeddbkey', $this->thispage );
+               $tpl->set( 'thispage', $this->thispage );
+               $tpl->set( 'titleprefixeddbkey', $this->thispage );
                $tpl->set( 'titletext', $title->getText() );
                $tpl->set( 'articleid', $title->getArticleID() );
 
@@ -336,32 +336,32 @@ class SkinTemplate extends Skin {
                                        'href' => $link
                                ];
                        }
-                       $tpl->setRef( 'feeds', $feeds );
+                       $tpl->set( 'feeds', $feeds );
                } else {
                        $tpl->set( 'feeds', false );
                }
 
-               $tpl->setRef( 'mimetype', $wgMimeType );
-               $tpl->setRef( 'jsmimetype', $wgJsMimeType );
+               $tpl->set( 'mimetype', $wgMimeType );
+               $tpl->set( 'jsmimetype', $wgJsMimeType );
                $tpl->set( 'charset', 'UTF-8' );
-               $tpl->setRef( 'wgScript', $wgScript );
-               $tpl->setRef( 'skinname', $this->skinname );
+               $tpl->set( 'wgScript', $wgScript );
+               $tpl->set( 'skinname', $this->skinname );
                $tpl->set( 'skinclass', static::class );
-               $tpl->setRef( 'skin', $this );
-               $tpl->setRef( 'stylename', $this->stylename );
+               $tpl->set( 'skin', $this );
+               $tpl->set( 'stylename', $this->stylename );
                $tpl->set( 'printable', $out->isPrintable() );
                $tpl->set( 'handheld', $request->getBool( 'handheld' ) );
-               $tpl->setRef( 'loggedin', $this->loggedin );
+               $tpl->set( 'loggedin', $this->loggedin );
                $tpl->set( 'notspecialpage', !$title->isSpecialPage() );
                $tpl->set( 'searchaction', $this->escapeSearchLink() );
                $tpl->set( 'searchtitle', SpecialPage::getTitleFor( 'Search' )->getPrefixedDBkey() );
                $tpl->set( 'search', trim( $request->getVal( 'search' ) ) );
-               $tpl->setRef( 'stylepath', $wgStylePath );
-               $tpl->setRef( 'articlepath', $wgArticlePath );
-               $tpl->setRef( 'scriptpath', $wgScriptPath );
-               $tpl->setRef( 'serverurl', $wgServer );
-               $tpl->setRef( 'logopath', $wgLogo );
-               $tpl->setRef( 'sitename', $wgSitename );
+               $tpl->set( 'stylepath', $wgStylePath );
+               $tpl->set( 'articlepath', $wgArticlePath );
+               $tpl->set( 'scriptpath', $wgScriptPath );
+               $tpl->set( 'serverurl', $wgServer );
+               $tpl->set( 'logopath', $wgLogo );
+               $tpl->set( 'sitename', $wgSitename );
 
                $userLang = $this->getLanguage();
                $userLangCode = $userLang->getHtmlCode();
@@ -374,8 +374,8 @@ class SkinTemplate extends Skin {
                $tpl->set( 'capitalizeallnouns', $userLang->capitalizeAllNouns() ? ' capitalize-all-nouns' : '' );
                $tpl->set( 'showjumplinks', true ); // showjumplinks preference has been removed
                $tpl->set( 'username', $this->loggedin ? $this->username : null );
-               $tpl->setRef( 'userpage', $this->userpage );
-               $tpl->setRef( 'userpageurl', $this->userpageUrlDetails['href'] );
+               $tpl->set( 'userpage', $this->userpage );
+               $tpl->set( 'userpageurl', $this->userpageUrlDetails['href'] );
                $tpl->set( 'userlang', $userLangCode );
 
                // Users can have their language set differently than the
index 645fbb2..52db51a 100644 (file)
@@ -553,6 +553,105 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                LoggerFactory::getInstance( 'objectcache' )
                        ) );
                }
+
+               $this->includeRcFiltersApp();
+       }
+
+       /**
+        * Include the modules and configuration for the RCFilters app.
+        * Conditional on the user having the feature enabled.
+        */
+       protected function includeRcFiltersApp() {
+               if ( $this->isStructuredFilterUiEnabled() ) {
+                       $out = $this->getOutput();
+                       $jsData = $this->getStructuredFilterJsData();
+
+                       $messages = [];
+                       foreach ( $jsData['messageKeys'] as $key ) {
+                               $messages[$key] = $this->msg( $key )->plain();
+                       }
+
+                       $out->addHTML(
+                               ResourceLoader::makeInlineScript(
+                                       ResourceLoader::makeMessageSetScript( $messages )
+                               )
+                       );
+
+                       $experimentalStructuredChangeFilters =
+                               $this->getConfig()->get( 'StructuredChangeFiltersEnableExperimentalViews' );
+
+                       $out->addJsConfigVars( 'wgStructuredChangeFilters', $jsData['groups'] );
+                       $out->addJsConfigVars(
+                               'wgStructuredChangeFiltersEnableExperimentalViews',
+                               $experimentalStructuredChangeFilters
+                       );
+                       $out->addJsConfigVars(
+                               'wgStructuredChangeFiltersEnableLiveUpdate',
+                               $this->getConfig()->get( 'StructuredChangeFiltersEnableLiveUpdate' )
+                       );
+                       $out->addJsConfigVars(
+                               'wgRCFiltersChangeTags',
+                               $this->buildChangeTagList()
+                       );
+                       $out->addJsConfigVars(
+                               'StructuredChangeFiltersDisplayConfig',
+                               [
+                                       'maxDays' => (int)$this->getConfig()->get( 'RCMaxAge' ) / ( 24 * 3600 ), // Translate to days
+                                       'limitArray' => $this->getConfig()->get( 'RCLinkLimits' ),
+                                       'daysArray' => $this->getConfig()->get( 'RCLinkDays' ),
+                               ]
+                       );
+               }
+       }
+
+       /**
+        * Fetch the change tags list for the front end
+        *
+        * @return Array Tag data
+        */
+       protected function buildChangeTagList() {
+               $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
+               $softwareActivatedTags = array_fill_keys( ChangeTags::listSoftwareActivatedTags(), 0 );
+
+               // Hit counts disabled for perf reasons, see T169997
+               /*
+               $tagStats = ChangeTags::tagUsageStatistics();
+               $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags, $tagStats );
+
+               // Sort by hits
+               arsort( $tagHitCounts );
+               */
+               $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags );
+
+               // Build the list and data
+               $result = [];
+               foreach ( $tagHitCounts as $tagName => $hits ) {
+                       if (
+                               // Only get active tags
+                               isset( $explicitlyDefinedTags[ $tagName ] ) ||
+                               isset( $softwareActivatedTags[ $tagName ] )
+                       ) {
+                               // Parse description
+                               $desc = ChangeTags::tagLongDescriptionMessage( $tagName, $this->getContext() );
+
+                               $result[] = [
+                                       'name' => $tagName,
+                                       'label' => Sanitizer::stripAllTags(
+                                               ChangeTags::tagDescription( $tagName, $this->getContext() )
+                                       ),
+                                       'description' => $desc ? Sanitizer::stripAllTags( $desc->parse() ) : '',
+                                       'cssClass' => Sanitizer::escapeClass( 'mw-tag-' . $tagName ),
+                                       'hits' => $hits,
+                               ];
+                       }
+               }
+
+               // Instead of sorting by hit count (disabled, see above), sort by display name
+               usort( $result, function ( $a, $b ) {
+                       return strcasecmp( $a['label'], $b['label'] );
+               } );
+
+               return $result;
        }
 
        /**
@@ -779,19 +878,20 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         * @return FormOptions
         */
        public function getDefaultOptions() {
-               $config = $this->getConfig();
                $opts = new FormOptions();
-               $structuredUI = $this->getUser()->getOption( 'rcenhancedfilters' );
+               $structuredUI = $this->isStructuredFilterUiEnabled();
                // If urlversion=2 is set, ignore the filter defaults and set them all to false/empty
                $useDefaults = $this->getRequest()->getInt( 'urlversion' ) !== 2;
 
                // Add all filters
+               /** @var ChangesListFilterGroup $filterGroup */
                foreach ( $this->filterGroups as $filterGroup ) {
                        // URL parameters can be per-group, like 'userExpLevel',
                        // or per-filter, like 'hideminor'.
                        if ( $filterGroup->isPerGroupRequestParameter() ) {
                                $opts->add( $filterGroup->getName(), $useDefaults ? $filterGroup->getDefault() : '' );
                        } else {
+                               /** @var ChangesListBooleanFilter $filter */
                                foreach ( $filterGroup->getFilters() as $filter ) {
                                        $opts->add( $filter->getName(), $useDefaults ? $filter->getDefault( $structuredUI ) : false );
                                }
@@ -857,8 +957,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        'messageKeys' => [],
                ];
 
-               $context = $this->getContext();
-
                usort( $this->filterGroups, function ( $a, $b ) {
                        return $b->getPriority() - $a->getPriority();
                } );
@@ -1055,9 +1153,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                &$join_conds, FormOptions $opts
        ) {
                $dbr = $this->getDB();
-               $user = $this->getUser();
 
-               $context = $this->getContext();
                foreach ( $this->filterGroups as $filterGroup ) {
                        // URL parameters can be per-group, like 'userExpLevel',
                        // or per-filter, like 'hideminor'.
@@ -1279,12 +1375,11 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                ) . "\n";
                $legend .= Html::closeElement( 'dl' ) . "\n";
 
-               # Collapsibility
-               $legendHeading = $this->getUser()->getOption(
-                       'rcenhancedfilters'
-               ) ?
+               $legendHeading = $this->isStructuredFilterUiEnabled() ?
                        $context->msg( 'rcfilters-legend-heading' )->parse() :
                        $context->msg( 'recentchanges-legend-heading' )->parse();
+
+               # Collapsible
                $legend =
                        '<div class="mw-changeslist-legend">' .
                                $legendHeading .
@@ -1305,6 +1400,11 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        'mediawiki.special.changeslist',
                ] );
                $out->addModules( 'mediawiki.special.changeslist.legend.js' );
+
+               if ( $this->isStructuredFilterUiEnabled() ) {
+                       $out->addModules( 'mediawiki.rcfilters.filters.ui' );
+                       $out->addModuleStyles( 'mediawiki.rcfilters.filters.base.styles' );
+               }
        }
 
        protected function getGroupName() {
@@ -1426,4 +1526,13 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $conds[] = reset( $conditions );
                }
        }
+
+       /**
+        * Check whether the structured filter UI is enabled
+        *
+        * @return bool
+        */
+       protected function isStructuredFilterUiEnabled() {
+               return $this->getUser()->getOption( 'rcenhancedfilters' );
+       }
 }
index 8d77091..a6d4a3e 100644 (file)
@@ -32,12 +32,12 @@ class MediaStatisticsPage extends QueryPage {
        protected $totalCount = 0, $totalBytes = 0;
 
        /**
-        * @var integer $totalPerType Combined file size of all files in a section
+        * @var int $totalPerType Combined file size of all files in a section
         */
        protected $totalPerType = 0;
 
        /**
-        * @var integer $totalSize Combined file size of all files
+        * @var int $totalSize Combined file size of all files
         */
        protected $totalSize = 0;
 
index e3b73a9..ede4898 100644 (file)
@@ -391,10 +391,6 @@ class SpecialNewpages extends IncludableSpecialPage {
                $oldTitleText = '';
                $oldTitle = Title::makeTitle( $result->rc_namespace, $result->rc_title );
 
-               if ( count( $classes ) ) {
-                       $attribs['class'] = implode( ' ', $classes );
-               }
-
                if ( !$title->equals( $oldTitle ) ) {
                        $oldTitleText = $oldTitle->getPrefixedText();
                        $oldTitleText = Html::rawElement(
@@ -411,6 +407,10 @@ class SpecialNewpages extends IncludableSpecialPage {
                Hooks::run( 'NewPagesLineEnding', [ $this, &$ret, $result, &$classes, &$attribs ] );
                $attribs = wfArrayFilterByKey( $attribs, [ Sanitizer::class, 'isReservedDataAttribute' ] );
 
+               if ( count( $classes ) ) {
+                       $attribs['class'] = implode( ' ', $classes );
+               }
+
                return Html::rawElement( 'li', $attribs, $ret ) . "\n";
        }
 
index 0b48d40..4659b9d 100644 (file)
@@ -164,94 +164,12 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                parent::execute( $subpage );
 
                if ( $this->isStructuredFilterUiEnabled() ) {
-                       $jsData = $this->getStructuredFilterJsData();
-
-                       $messages = [];
-                       foreach ( $jsData['messageKeys'] as $key ) {
-                               $messages[$key] = $this->msg( $key )->plain();
-                       }
-
-                       $out->addHTML(
-                               ResourceLoader::makeInlineScript(
-                                       ResourceLoader::makeMessageSetScript( $messages )
-                               )
-                       );
-
-                       $experimentalStructuredChangeFilters =
-                               $this->getConfig()->get( 'StructuredChangeFiltersEnableExperimentalViews' );
-
-                       $out->addJsConfigVars( 'wgStructuredChangeFilters', $jsData['groups'] );
+                       $out->addJsConfigVars( 'wgStructuredChangeFiltersLiveUpdateSupported', true );
                        $out->addJsConfigVars(
-                               'wgStructuredChangeFiltersEnableExperimentalViews',
-                               $experimentalStructuredChangeFilters
+                               'wgStructuredChangeFiltersSavedQueriesPreferenceName',
+                               'rcfilters-saved-queries'
                        );
-                       $out->addJsConfigVars(
-                               'wgStructuredChangeFiltersEnableLiveUpdate',
-                               $this->getConfig()->get( 'StructuredChangeFiltersEnableLiveUpdate' )
-                       );
-                       $out->addJsConfigVars(
-                               'wgRCFiltersChangeTags',
-                               $this->buildChangeTagList()
-                       );
-                       $out->addJsConfigVars(
-                               'StructuredChangeFiltersDisplayConfig',
-                               [
-                                       'maxDays' => (int)$this->getConfig()->get( 'RCMaxAge' ) / ( 24 * 3600 ), // Translate to days
-                                       'limitArray' => $this->getConfig()->get( 'RCLinkLimits' ),
-                                       'daysArray' => $this->getConfig()->get( 'RCLinkDays' ),
-                               ]
-                       );
-               }
-       }
-
-       /**
-        * Fetch the change tags list for the front end
-        *
-        * @return Array Tag data
-        */
-       protected function buildChangeTagList() {
-               $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
-               $softwareActivatedTags = array_fill_keys( ChangeTags::listSoftwareActivatedTags(), 0 );
-
-               // Hit counts disabled for perf reasons, see T169997
-               /*
-               $tagStats = ChangeTags::tagUsageStatistics();
-               $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags, $tagStats );
-
-               // Sort by hits
-               arsort( $tagHitCounts );
-               */
-               $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags );
-
-               // Build the list and data
-               $result = [];
-               foreach ( $tagHitCounts as $tagName => $hits ) {
-                       if (
-                               // Only get active tags
-                               isset( $explicitlyDefinedTags[ $tagName ] ) ||
-                               isset( $softwareActivatedTags[ $tagName ] )
-                       ) {
-                               // Parse description
-                               $desc = ChangeTags::tagLongDescriptionMessage( $tagName, $this->getContext() );
-
-                               $result[] = [
-                                       'name' => $tagName,
-                                       'label' => Sanitizer::stripAllTags(
-                                               ChangeTags::tagDescription( $tagName, $this->getContext() )
-                                       ),
-                                       'description' => $desc ? Sanitizer::stripAllTags( $desc->parse() ) : '',
-                                       'cssClass' => Sanitizer::escapeClass( 'mw-tag-' . $tagName ),
-                                       'hits' => $hits,
-                               ];
-                       }
                }
-
-               // Instead of sorting by hit count (disabled, see above), sort by display name
-               usort( $result, function ( $a, $b ) {
-                       return strcasecmp( $a['label'], $b['label'] );
-               } );
-
-               return $result;
        }
 
        /**
@@ -540,8 +458,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        && $this->getUser()->getOption( 'shownumberswatching' );
                $watcherCache = [];
 
-               $dbr = $this->getDB();
-
                $counter = 1;
                $list = ChangesList::newFromContext( $this->getContext(), $this->filterGroups );
                $list->initChangesListRows( $rows );
@@ -636,7 +552,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        ++$count;
                        $addSubmit = ( $count === $extraOptsCount ) ? $submit : '';
 
-                       $out .= Xml::openElement( 'tr' );
+                       $out .= Xml::openElement( 'tr', [ 'class' => $name . 'Form' ] );
                        if ( is_array( $optionRow ) ) {
                                $out .= Xml::tags(
                                        'td',
@@ -673,11 +589,11 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $rcoptions = Xml::fieldset(
                        $this->msg( 'recentchanges-legend' )->text(),
                        $panelString,
-                       [ 'class' => 'rcoptions' ]
+                       [ 'class' => 'rcoptions cloptions' ]
                );
 
                // Insert a placeholder for RCFilters
-               if ( $this->getUser()->getOption( 'rcenhancedfilters' ) ) {
+               if ( $this->isStructuredFilterUiEnabled() ) {
                        $rcfilterContainer = Html::element(
                                'div',
                                [ 'class' => 'rcfilters-container' ]
@@ -729,7 +645,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                        $topLinksAttributes = [ 'class' => 'mw-recentchanges-toplinks' ];
 
-                       if ( $this->getUser()->getOption( 'rcenhancedfilters' ) ) {
+                       if ( $this->isStructuredFilterUiEnabled() ) {
                                $contentTitle = Html::rawElement( 'div',
                                        [ 'class' => 'mw-recentchanges-toplinks-title' ],
                                        $this->msg( 'rcfilters-other-review-tools' )->parse()
@@ -785,17 +701,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                return $extraOpts;
        }
 
-       /**
-        * Check whether the structured filter UI is enabled
-        *
-        * @return bool
-        */
-       protected function isStructuredFilterUiEnabled() {
-               return $this->getUser()->getOption(
-                       'rcenhancedfilters'
-               );
-       }
-
        /**
         * Add page-specific modules.
         */
@@ -803,10 +708,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                parent::addModules();
                $out = $this->getOutput();
                $out->addModules( 'mediawiki.special.recentchanges' );
-               if ( $this->isStructuredFilterUiEnabled() ) {
-                       $out->addModules( 'mediawiki.rcfilters.filters.ui' );
-                       $out->addModuleStyles( 'mediawiki.rcfilters.filters.base.styles' );
-               }
        }
 
        /**
@@ -1030,7 +931,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                $filterGroups = $this->getFilterGroups();
 
-               $context = $this->getContext();
                foreach ( $filterGroups as $groupName => $group ) {
                        if ( !$group->isPerGroupRequestParameter() ) {
                                foreach ( $group->getFilters() as $key => $filter ) {
@@ -1047,7 +947,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                                                        [ $key => 1 - $options[$key] ], $nondefaults );
 
                                                $attribs = [
-                                                       'class' => "$msg rcshowhideoption",
+                                                       'class' => "$msg rcshowhideoption clshowhideoption",
                                                        'data-filter-name' => $filter->getName(),
                                                ];
 
index 1d76e36..b20b331 100644 (file)
@@ -32,6 +32,8 @@ use Wikimedia\Rdbms\IDatabase;
  * @ingroup SpecialPage
  */
 class SpecialWatchlist extends ChangesListSpecialPage {
+       private $maxDays;
+
        public function __construct( $page = 'Watchlist', $restriction = 'viewmywatchlist' ) {
                parent::__construct( $page, $restriction );
 
@@ -93,6 +95,20 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                }
 
                parent::execute( $subpage );
+
+               if ( $this->isStructuredFilterUiEnabled() ) {
+                       $output->addJsConfigVars( 'wgStructuredChangeFiltersLiveUpdateSupported', false );
+                       $output->addJsConfigVars(
+                               'wgStructuredChangeFiltersSavedQueriesPreferenceName',
+                               'rcfilters-wl-saved-queries'
+                       );
+               }
+       }
+
+       protected function isStructuredFilterUiEnabled() {
+               return parent::isStructuredFilterUiEnabled()
+                       && ( $this->getConfig()->get( 'StructuredChangeFiltersOnWatchlist' )
+                               || $this->getRequest()->getBool( 'rcfilters' ) );
        }
 
        /**
@@ -126,6 +142,47 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        protected function registerFilters() {
                parent::registerFilters();
 
+               $this->registerFilterGroup( new ChangesListStringOptionsFilterGroup( [
+                       'name' => 'watchlistactivity',
+                       'title' => 'rcfilters-filtergroup-watchlistactivity',
+                       'class' => ChangesListStringOptionsFilterGroup::class,
+                       'priority' => 3,
+                       'isFullCoverage' => true,
+                       'filters' => [
+                               [
+                                       'name' => 'unseen',
+                                       'label' => 'rcfilters-filter-watchlistactivity-unseen-label',
+                                       'description' => 'rcfilters-filter-watchlistactivity-unseen-description',
+                                       'cssClassSuffix' => 'watchedunseen',
+                                       'isRowApplicableCallable' => function ( $ctx, $rc ) {
+                                               $changeTs = $rc->getAttribute( 'rc_timestamp' );
+                                               $lastVisitTs = $rc->getAttribute( 'wl_notificationtimestamp' );
+                                               return $changeTs >= $lastVisitTs;
+                                       },
+                               ],
+                               [
+                                       'name' => 'seen',
+                                       'label' => 'rcfilters-filter-watchlistactivity-seen-label',
+                                       'description' => 'rcfilters-filter-watchlistactivity-seen-description',
+                                       'cssClassSuffix' => 'watchedseen',
+                                       'isRowApplicableCallable' => function ( $ctx, $rc ) {
+                                               $changeTs = $rc->getAttribute( 'rc_timestamp' );
+                                               $lastVisitTs = $rc->getAttribute( 'wl_notificationtimestamp' );
+                                               return $changeTs < $lastVisitTs;
+                                       }
+                               ],
+                       ],
+                       'default' => ChangesListStringOptionsFilterGroup::NONE,
+                       'queryCallable' => function ( $specialPageClassName, $context, $dbr,
+                                                                                 &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedValues ) {
+                               if ( $selectedValues === [ 'seen' ] ) {
+                                       $conds[] = 'rc_timestamp < wl_notificationtimestamp';
+                               } elseif ( $selectedValues === [ 'unseen' ] ) {
+                                       $conds[] = 'rc_timestamp >= wl_notificationtimestamp';
+                               }
+                       }
+               ] ) );
+
                $user = $this->getUser();
 
                $significance = $this->getFilterGroup( 'significance' );
@@ -172,12 +229,14 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                $opts->add( 'days', $user->getOption( 'watchlistdays' ), FormOptions::FLOAT );
                $opts->add( 'extended', $user->getBoolOption( 'extendwatchlist' ) );
+               $opts->add( 'limit', $user->getIntOption( 'wllimit' ), FormOptions::INT );
 
                return $opts;
        }
 
        public function validateOptions( FormOptions $opts ) {
                $opts->validateBounds( 'days', 0, $this->maxDays );
+               $opts->validateIntBounds( 'limit', 0, 5000 );
                parent::validateOptions( $opts );
        }
 
@@ -300,7 +359,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                $query_options = array_merge( [
                        'ORDER BY' => 'rc_timestamp DESC',
-                       'LIMIT' => $user->getIntOption( 'wllimit' )
+                       'LIMIT' => $opts['limit']
                ], $query_options );
                $join_conds = array_merge(
                        [
@@ -458,6 +517,11 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                }
 
                $s = $list->beginRecentChangesList();
+
+               if ( $this->isStructuredFilterUiEnabled() ) {
+                       $s .= $this->makeLegend();
+               }
+
                $userShowHiddenCats = $this->getUser()->getBoolOption( 'showhiddencats' );
                $counter = 1;
                foreach ( $rows as $obj ) {
@@ -518,6 +582,24 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                $this->setTopText( $opts );
 
+               $form = '';
+
+               $form .= Xml::openElement( 'form', [
+                       'method' => 'get',
+                       'action' => wfScript(),
+                       'id' => 'mw-watchlist-form'
+               ] );
+               $form .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
+               $form .= Xml::fieldset(
+                       $this->msg( 'watchlist-options' )->text(),
+                       false,
+                       [ 'id' => 'mw-watchlist-options', 'class' => 'cloptions' ]
+               );
+
+               if ( !$this->isStructuredFilterUiEnabled() ) {
+                       $form .= $this->makeLegend();
+               }
+
                $lang = $this->getLanguage();
                if ( $opts['days'] > 0 ) {
                        $days = $opts['days'];
@@ -525,16 +607,23 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        $days = $this->maxDays;
                }
                $timestamp = wfTimestampNow();
-               $wlInfo = $this->msg( 'wlnote' )->numParams( $numRows, round( $days * 24 ) )->params(
-                       $lang->userDate( $timestamp, $user ), $lang->userTime( $timestamp, $user )
-               )->parse() . "<br />\n";
+               $wlInfo = Html::rawElement(
+                       'span',
+                       [ 'class' => 'wlinfo' ],
+                       $this->msg( 'wlnote' )->numParams( $numRows, round( $days * 24 ) )->params(
+                               $lang->userDate( $timestamp, $user ), $lang->userTime( $timestamp, $user )
+                       )->parse()
+               ) . "<br />\n";
 
                $nondefaults = $opts->getChangedValues();
-               $cutofflinks = $this->msg( 'wlshowtime' ) . ' ' . $this->cutoffselector( $opts );
+               $cutofflinks = Html::rawElement(
+                       'span',
+                       [ 'class' => 'cldays cloption' ],
+                       $this->msg( 'wlshowtime' ) . ' ' . $this->cutoffselector( $opts )
+               );
 
                # Spit out some control panel links
                $links = [];
-               $context = $this->getContext();
                $namesOfDisplayedFilters = [];
                foreach ( $this->getFilterGroups() as $groupName => $group ) {
                        if ( !$group->isPerGroupRequestParameter() ) {
@@ -545,7 +634,8 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                                        $nondefaults,
                                                        $filter->getShowHide(),
                                                        $filterName,
-                                                       $opts[$filterName]
+                                                       $opts[$filterName],
+                                                       $filter->isFeatureAvailableOnStructuredUi( $this )
                                                );
                                        }
                                }
@@ -562,17 +652,19 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        unset( $hiddenFields[$filterName] );
                }
 
-               # Create output
-               $form = '';
-
                # Namespace filter and put the whole form together.
                $form .= $wlInfo;
                $form .= $cutofflinks;
-               $form .= $this->msg( 'watchlist-hide' ) .
+               $form .= Html::rawElement(
+                       'span',
+                       [ 'class' => 'clshowhide' ],
+                       $this->msg( 'watchlist-hide' ) .
                        $this->msg( 'colon-separator' )->escaped() .
-                       implode( ' ', $links );
+                       implode( ' ', $links )
+               );
                $form .= "\n<br />\n";
-               $form .= Html::namespaceSelector(
+
+               $namespaceForm = Html::namespaceSelector(
                        [
                                'selected' => $opts['namespace'],
                                'all' => '',
@@ -583,27 +675,66 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                'class' => 'namespaceselector',
                        ]
                ) . "\n";
-               $form .= '<span class="mw-input-with-label">' . Xml::checkLabel(
+               $namespaceForm .= '<span class="mw-input-with-label">' . Xml::checkLabel(
                        $this->msg( 'invert' )->text(),
                        'invert',
                        'nsinvert',
                        $opts['invert'],
                        [ 'title' => $this->msg( 'tooltip-invert' )->text() ]
                ) . "</span>\n";
-               $form .= '<span class="mw-input-with-label">' . Xml::checkLabel(
+               $namespaceForm .= '<span class="mw-input-with-label">' . Xml::checkLabel(
                        $this->msg( 'namespace_association' )->text(),
                        'associated',
                        'nsassociated',
                        $opts['associated'],
                        [ 'title' => $this->msg( 'tooltip-namespace_association' )->text() ]
                ) . "</span>\n";
-               $form .= Xml::submitButton( $this->msg( 'watchlist-submit' )->text() ) . "\n";
+               $form .= Html::rawElement(
+                       'span',
+                       [ 'class' => 'namespaceForm cloption' ],
+                       $namespaceForm
+               );
+
+               $form .= Xml::submitButton(
+                       $this->msg( 'watchlist-submit' )->text(),
+                       [ 'class' => 'cloption-submit' ]
+               ) . "\n";
                foreach ( $hiddenFields as $key => $value ) {
                        $form .= Html::hidden( $key, $value ) . "\n";
                }
                $form .= Xml::closeElement( 'fieldset' ) . "\n";
                $form .= Xml::closeElement( 'form' ) . "\n";
-               $this->getOutput()->addHTML( $form );
+
+               // Insert a placeholder for RCFilters
+               if ( $this->isStructuredFilterUiEnabled() ) {
+                       $rcfilterContainer = Html::element(
+                               'div',
+                               [ 'class' => 'rcfilters-container' ]
+                       );
+
+                       $loadingContainer = Html::rawElement(
+                               'div',
+                               [ 'class' => 'rcfilters-spinner' ],
+                               Html::element(
+                                       'div',
+                                       [ 'class' => 'rcfilters-spinner-bounce' ]
+                               )
+                       );
+
+                       // Wrap both with rcfilters-head
+                       $this->getOutput()->addHTML(
+                               Html::rawElement(
+                                       'div',
+                                       [ 'class' => 'rcfilters-head' ],
+                                       $rcfilterContainer . $form
+                               )
+                       );
+
+                       // Add spinner
+                       $this->getOutput()->addHTML( $loadingContainer );
+               } else {
+                       $this->getOutput()->addHTML( $form );
+               }
 
                $this->setBottomText( $opts );
        }
@@ -655,7 +786,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
        function setTopText( FormOptions $opts ) {
                $nondefaults = $opts->getChangedValues();
-               $form = "";
+               $form = '';
                $user = $this->getUser();
 
                $numItems = $this->countItems();
@@ -692,32 +823,27 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        $form .= Xml::closeElement( 'form' ) . "\n";
                }
 
-               $form .= Xml::openElement( 'form', [
-                       'method' => 'get',
-                       'action' => wfScript(),
-                       'id' => 'mw-watchlist-form'
-               ] );
-               $form .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
-               $form .= Xml::fieldset(
-                       $this->msg( 'watchlist-options' )->text(),
-                       false,
-                       [ 'id' => 'mw-watchlist-options' ]
-               );
-
-               $form .= $this->makeLegend();
-
                $this->getOutput()->addHTML( $form );
        }
 
-       protected function showHideCheck( $options, $message, $name, $value ) {
+       protected function showHideCheck( $options, $message, $name, $value, $inStructuredUi ) {
                $options[$name] = 1 - (int)$value;
 
-               return '<span class="mw-input-with-label">' . Xml::checkLabel(
-                       $this->msg( $message, '' )->text(),
-                       $name,
-                       $name,
-                       (int)$value
-               ) . '</span>';
+               $attribs = [ 'class' => 'mw-input-with-label clshowhideoption cloption' ];
+               if ( $inStructuredUi ) {
+                       $attribs[ 'data-feature-in-structured-ui' ] = true;
+               }
+
+               return Html::rawElement(
+                       'span',
+                       $attribs,
+                       Xml::checkLabel(
+                               $this->msg( $message, '' )->text(),
+                               $name,
+                               $name,
+                               (int)$value
+                       )
+               );
        }
 
        /**
index b29a3af..947a572 100644 (file)
@@ -1528,7 +1528,7 @@ class BalanceActiveFormattingElements {
        /**
         * Determine whether an element is in the list of formatting elements.
         * @param BalanceElement $elt
-        * @return boolean
+        * @return bool
         */
        public function isInList( BalanceElement $elt ) {
                return $this->head === $elt || $elt->prevAFE;
index a797398..73bc5f8 100644 (file)
@@ -129,7 +129,7 @@ class RemexCompatMunger implements TreeHandler {
         * Insert a p-wrapper
         *
         * @param SerializerNode $parent
-        * @param integer $sourceStart
+        * @param int $sourceStart
         * @return SerializerNode
         */
        private function insertPWrapper( SerializerNode $parent, $sourceStart ) {
@@ -220,12 +220,12 @@ class RemexCompatMunger implements TreeHandler {
         * FIXME: fostering ($preposition == BEFORE) is mostly done by inserting as
         * normal, the full algorithm is not followed.
         *
-        * @param integer $preposition
+        * @param int $preposition
         * @param Element|SerializerNode|null $refElement
         * @param Element $element
         * @param bool $void
-        * @param integer $sourceStart
-        * @param integer $sourceLength
+        * @param int $sourceStart
+        * @param int $sourceLength
         */
        public function insertElement( $preposition, $refElement, Element $element, $void,
                $sourceStart, $sourceLength
@@ -313,7 +313,7 @@ class RemexCompatMunger implements TreeHandler {
         *
         * @param SerializerNode $parentNode
         * @param bool $inline
-        * @param integer $pos The source position
+        * @param int $pos The source position
         * @return SerializerNode
         */
        private function splitTagStack( SerializerNode $parentNode, $inline, $pos ) {
index 2ee40a8..da3f9f8 100644 (file)
@@ -247,7 +247,7 @@ abstract class UploadBase {
 
        /**
         * @param string $tempPath File system path to temporary file containing the upload
-        * @param integer $fileSize
+        * @param int $fileSize
         */
        protected function setTempFile( $tempPath, $fileSize = null ) {
                $this->mTempPath = $tempPath;
index 71a4272..08f054d 100644 (file)
@@ -302,7 +302,7 @@ class User implements IDBAccessObject {
        /** @var Block */
        private $mBlockedFromCreateAccount = false;
 
-       /** @var integer User::READ_* constant bitfield used to load data */
+       /** @var int User::READ_* constant bitfield used to load data */
        protected $queryFlagsUsed = self::READ_NORMAL;
 
        public static $idCacheByName = [];
@@ -357,7 +357,7 @@ class User implements IDBAccessObject {
        /**
         * Load the user table data for this object from the source given by mFrom.
         *
-        * @param integer $flags User::READ_* constant bitfield
+        * @param int $flags User::READ_* constant bitfield
         */
        public function load( $flags = self::READ_NORMAL ) {
                global $wgFullyInitialised;
@@ -419,7 +419,7 @@ class User implements IDBAccessObject {
 
        /**
         * Load user table data, given mId has already been set.
-        * @param integer $flags User::READ_* constant bitfield
+        * @param int $flags User::READ_* constant bitfield
         * @return bool False if the ID does not exist, true otherwise
         */
        public function loadFromId( $flags = self::READ_NORMAL ) {
@@ -450,7 +450,7 @@ class User implements IDBAccessObject {
        /**
         * @since 1.27
         * @param string $wikiId
-        * @param integer $userId
+        * @param int $userId
         */
        public static function purge( $wikiId, $userId ) {
                $cache = ObjectCache::getMainWANInstance();
@@ -759,7 +759,7 @@ class User implements IDBAccessObject {
        /**
         * Get database id given a user name
         * @param string $name Username
-        * @param integer $flags User::READ_* constant bitfield
+        * @param int $flags User::READ_* constant bitfield
         * @return int|null The corresponding user's ID, or null if user is nonexistent
         */
        public static function idFromName( $name, $flags = self::READ_NORMAL ) {
@@ -1252,7 +1252,7 @@ class User implements IDBAccessObject {
         * Load user and user_group data from the database.
         * $this->mId must be set, this is how the user is identified.
         *
-        * @param integer $flags User::READ_* constant bitfield
+        * @param int $flags User::READ_* constant bitfield
         * @return bool True if the user exists, false if the user is anonymous
         */
        public function loadFromDatabase( $flags = self::READ_LATEST ) {
index cab6a3d..60720c8 100644 (file)
@@ -44,7 +44,7 @@ class BatchRowIterator implements RecursiveIterator {
        protected $primaryKey;
 
        /**
-        * @var integer $batchSize The number of rows to fetch per iteration
+        * @var int $batchSize The number of rows to fetch per iteration
         */
        protected $batchSize;
 
@@ -76,7 +76,7 @@ class BatchRowIterator implements RecursiveIterator {
        private $current = [];
 
        /**
-        * @var integer key 0-indexed number of pages fetched since self::reset()
+        * @var int key 0-indexed number of pages fetched since self::reset()
         */
        private $key;
 
@@ -89,7 +89,7 @@ class BatchRowIterator implements RecursiveIterator {
         * @param IDatabase $db The database to read from
         * @param string|array $table The name or names of the table to read from
         * @param string|array $primaryKey The name or names of the primary key columns
-        * @param integer $batchSize The number of rows to fetch per iteration
+        * @param int $batchSize The number of rows to fetch per iteration
         * @throws InvalidArgumentException
         */
        public function __construct( IDatabase $db, $table, $primaryKey, $batchSize ) {
@@ -167,7 +167,7 @@ class BatchRowIterator implements RecursiveIterator {
        }
 
        /**
-        * @return integer 0-indexed count of the page number fetched
+        * @return int 0-indexed count of the page number fetched
         */
        public function key() {
                return $this->key;
index dd9f2d9..736109b 100644 (file)
@@ -542,7 +542,7 @@ class UIDGenerator {
 
        /**
         * @param array $time Result of UIDGenerator::millitime()
-        * @param integer $delta Number of intervals to add on to the timestamp
+        * @param int $delta Number of intervals to add on to the timestamp
         * @return string 60 bits of "100ns intervals since 15 October 1582" (rolls over in 3400)
         * @throws RuntimeException
         */
index 90792fc..773c291 100644 (file)
@@ -22,7 +22,7 @@ class SearchInputWidget extends TitleInputWidget {
         * @param array $config Configuration options
         * @param int|null $config['pushPending'] Whether the input should be visually marked as
         *  "pending", while requesting suggestions (default: false)
-        * @param boolean|null $config['performSearchOnClick'] If true, the script will start a search
+        * @param bool|null $config['performSearchOnClick'] If true, the script will start a search
         *  whenever a user hits a suggestion. If false, the text of the suggestion is inserted into the
         *  text field only (default: true)
         * @param string $config['dataLocation'] Where the search input field will be
index 8faae82..d2dda75 100644 (file)
@@ -24,7 +24,7 @@ class SelectWithInputWidget extends \OOUI\Widget {
         * @param array $config Configuration options
         * @param array $config['textinput'] Configuration for the TextInputWidget
         * @param array $config['dropdowninput'] Configuration for the DropdownInputWidget
-        * @param boolean $config['or'] Configuration for whether the widget is dropdown AND input
+        * @param bool $config['or'] Configuration for whether the widget is dropdown AND input
         *                              or dropdown OR input
         */
        public function __construct( array $config = [] ) {
index 9db7dec..c514cdc 100644 (file)
@@ -4279,7 +4279,7 @@ class Language {
         *
         * @since 1.28
         * @param Language $lang
-        * @return boolean
+        * @return bool
         */
        public function equals( Language $lang ) {
                return $lang->getCode() === $this->mCode;
@@ -4343,7 +4343,7 @@ class Language {
 
        /**
         * @param string $code
-        * @param boolean $fallback Whether we're going through language fallback chain
+        * @param bool $fallback Whether we're going through language fallback chain
         * @return string Name of the language class
         */
        public static function classFromCode( $code, $fallback = true ) {
index 0affa8c..ab9746f 100644 (file)
@@ -23,7 +23,8 @@
                        "Macofe",
                        "Fwolff",
                        "Oesjaar",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Biggs ZA"
                ]
        },
        "tog-underline": "Onderstreep skakels.",
        "actionthrottled": "Outo-rem op aksie uitgevoer",
        "actionthrottledtext": "As 'n teen-strooi aksie, word u beperk om hierdie aksie te veel keer in 'n kort tyd uit te voer, en u het hierdie limiet oorskry.\nProbeer asseblief weer oor 'n paar minute.",
        "protectedpagetext": "Hierdie bladsy is beskerm om wysigings en ander aksies te verhoed.",
-       "viewsourcetext": "U mag die bronteks van hierdie bladsy lees en kopieer.",
+       "viewsourcetext": "U het toestemming om die bronteks te bekyk en te kopieer.",
        "viewyourtext": "U kan '''u wysigings''' aan die bronteks van hierdie bladsy bekyk en kopieer:",
        "protectedinterface": "Hierdie bladsy verskaf teks vir die koppelvlak van die sagteware, en is beskerm om misbruik te voorkom.\nGebruik asseblief [https://translatewiki.net/ translatewiki.net] om vertalings by te voeg of te wysig.",
        "editinginterface": "'''Waarskuwing:''' U is besig om 'n bladsy te redigeer wat koppelvlakinligting aan die programmatuur voorsien. Wysigings aan hierdie bladsy sal die voorkoms van die gebruikerskoppelvlak vir ander gebruikers beïnvloed. Vir vertalings, oorweeg om eerder [https://translatewiki.net/wiki/Main_Page?setlang=af translatewiki.net] (die vertalingsprojek vir MediaWiki) te gebruik.",
        "page_first": "eerste",
        "page_last": "laaste",
        "histlegend": "Byskrif: (huidige) = verskil van huidige weergawe,\n(vorige) = verskil van vorige weergawe, M = klein wysiging",
-       "history-fieldset-title": "Soek vir wysigings",
+       "history-fieldset-title": "Soek na wysigings",
        "history-show-deleted": "Slegs geskrapte",
        "histfirst": "oudste",
        "histlast": "nuutste",
        "compare-invalid-title": "Die titel wat u verskaf het is ongeldig.",
        "compare-title-not-exists": "Die titel wat u verskaf het bestaan ​​nie.",
        "compare-revision-not-exists": "Die hersiening wat u verskaf het bestaan ​​nie.",
+       "diff-form": "'n '''vorm'''",
        "dberr-problems": "Jammer! Die webwerf ondervind op die oomblik tegniese probleme.",
        "dberr-again": "Wag 'n paar minute en probeer dan weer.",
        "dberr-info": "(Kan nie die databasisbediener kontak nie: $1)",
index b1604f8..a00d2a7 100644 (file)
        "rcfilters-restore-default-filters": "استرجاع المرشحات الافتراضية",
        "rcfilters-clear-all-filters": "مسح كل المرشحات",
        "rcfilters-show-new-changes": "عرض أحدث التغييرات",
-       "rcfilters-previous-changes-label": "تغييرات تم عرضها سابقًا",
        "rcfilters-search-placeholder": "رشح أحدث التغييرات (تصفح أو ابدأ الكتابة)",
        "rcfilters-invalid-filter": "مرشح غير صحيح",
        "rcfilters-empty-filter": "لا مرشحات فعالة. كل المساهمات معروضة.",
        "watching": "يراقب...",
        "unwatching": "إزالة المراقبة...",
        "watcherrortext": "حدث خطأ أثناء تغيير إعدادات الرصد الخاصة بك \"$1\".",
-       "watchlist-unwatch": "×",
-       "watchlist-unwatch-undo": "+",
        "enotif_reset": "علم على كل الصفحات كمرئية",
        "enotif_impersonal_salutation": "مستخدم {{SITENAME}}",
        "enotif_subject_deleted": "الصفحة {{SITENAME}} $1 حذفها {{الجنس: $2 | $2 }}",
index cd7a962..4e7ca5a 100644 (file)
        "rcfilters-restore-default-filters": "Restaurar los filtros predeterminaos",
        "rcfilters-clear-all-filters": "Borrar tolos filtros",
        "rcfilters-show-new-changes": "Ver los cambeos más recién",
-       "rcfilters-previous-changes-label": "Cambeos vistos anteriormente",
        "rcfilters-search-placeholder": "Filtriar los cambeos recién (restola o empieza a escribir)",
        "rcfilters-invalid-filter": "Filtru inválidu",
        "rcfilters-empty-filter": "Nun hai filtros activos. Amuésense toles contribuciones.",
index f74f325..68f80d1 100644 (file)
@@ -65,6 +65,7 @@
        "tog-watchlisthideminor": "Әҙ үҙгәрештәрҙе күҙәтеү исемлегенән йәшерергә",
        "tog-watchlisthideliu": "Танылған ҡулланыусыларҙың үҙгәртеүҙәрен күҙәтеү исемлегенән йәшерергә",
        "tog-watchlistreloadautomatically": "Һөҙгөс үҙгәргән һайын күҙәтеү исемлеген автоматик рәүештә яңыртырға (JavaScript кәрәк)",
+       "tog-watchlistunwatchlinks": "Күҙәтеү исемлегендәге яҙмаларға туранан-тура индереү/алыу (JavaScript кәрәк)",
        "tog-watchlisthideanons": "Аноним ҡулланыусыларҙың үҙгәртеүҙерен күҙәтеү исемлегенән йәшерергә",
        "tog-watchlisthidepatrolled": "Тикшерелгән үҙгәртеүҙәрҙе күҙәтеү исемлегенән йәшерергә",
        "tog-watchlisthidecategorization": "Биттәр категоризацияһын йәшереү",
        "rcfilters-restore-default-filters": "Фильтрҙарҙың һүҙһеҙ үтәлгәнен кире ҡуйырға",
        "rcfilters-clear-all-filters": "Бөтә фильтрҙарҙы ла таҙартырға",
        "rcfilters-show-new-changes": "Һуңғы үҙгәртеүҙәрҙе ҡарап сығырға",
-       "rcfilters-previous-changes-label": "Элек ҡаралған үҙгәртеүҙәр",
        "rcfilters-search-placeholder": "Фильтрҙарҙың һуңғы үҙгәрештәре (ҡарап сығығыҙ йәки индерә башлағыҙ)",
        "rcfilters-invalid-filter": "Ярамаған фильтр",
        "rcfilters-empty-filter": "Әүҙем фильтрҙар юҡ. Бөтә үҙгәртеүҙәр ҙә күрһәтелә.",
        "apisandbox-alert-field": "Был ҡыр дәүмәле ярамай.",
        "apisandbox-continue": "Дауам итергә",
        "apisandbox-continue-clear": "Таҙартыу",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries дауам итәсәк] һуңғы һорау; {{int:apisandbox-continue-clear}} дауам итеү менән бәйләнгән параметрҙарҙы юйырға.",
+       "apisandbox-param-limit": "максималь сикте ҡулланыуҙы <kbd>максимальное</kbd> ҡуйығыҙ.",
        "apisandbox-multivalue-all-namespaces": "$1 (Барлыҡ исемдәр яланы)",
        "apisandbox-multivalue-all-values": "$1 (барлыҡ мәғәнәләр)",
        "booksources": "Китап сығанаҡтары",
        "magiclink-tracking-pmid": "PMID серле һылтанмаһын ҡулланған биттәр",
        "magiclink-tracking-pmid-desc": "Был бит PMID серле һылтанмаһын ҡуллана. Ҡара [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] нисек күсереү тураһында.",
        "magiclink-tracking-isbn": "ISBN серле һылтанмаһын ҡулланған биттәр",
+       "magiclink-tracking-isbn-desc": "Был биттең ISBN серле һылтанмаһы бар. Ҡара [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] уға нисек күсеү тураһында.",
        "specialloguserlabel": "Башҡарыусы:",
        "speciallogtitlelabel": "Маҡсат (исем йәки ҡулланыусы {{ns:user}}):",
        "log": "Журналдар",
        "activeusers-intro": "Был — һуңғы $1 {{PLURAL:$1|көн}} эсендә ниҙер башҡарған ҡатнашыусылар исемлеге.",
        "activeusers-count": "Һуңғы {{PLURAL:$3|$3 көндә}} $1 {{PLURAL:$1|үҙгәртеү}}",
        "activeusers-from": "Ошондай хәрефтәрҙән башланған ҡатнашыусыларҙы күрһәтергә:",
+       "activeusers-groups": "Был төркөмдәргә ҡараған ҡатнашыусыларҙы күрһәтеү:",
+       "activeusers-excludegroups": "Был төркөмдәрҙең ҡатнашыусыларын һыҙырға:",
        "activeusers-noresult": "Ҡатнашыусылар табылманы",
        "activeusers-submit": "Әүҙем ҡулланыусыларҙы күрһәтергә",
        "listgrouprights": "Ҡатнашыусылар төркөмө хоҡуҡтары",
        "trackingcategories-msg": "Күҙәтеүсе категория",
        "trackingcategories-name": "Хәбәр исеме",
        "trackingcategories-desc": "Категорияға индереү критерийҙары",
+       "restricted-displaytitle-ignored": "Күренгән атамалары кире ҡағылған биттәр",
+       "restricted-displaytitle-ignored-desc": "Был биттә кире ҡағылған <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> бар, сөнки уның атамаһы биттең исеменә тап килмәй.",
        "noindex-category-desc": "Бит эҙләүсе роботтар тарафынан индексацияланмай, сөнки унда \"тылсымлы һүҙ\" <code><nowiki>__NOINDEX__</nowiki></code> бар һәм ул был флаг рөхсәт ителгән исемдәр киңлегендә урынлашҡан.",
        "index-category-desc": "Биттә «тылсымлы һүҙ» бар<nowiki>__INDEX__</nowiki> (бит рөхсәт ителгән исемдәр арауығында ята), шуға күрә эҙләү системаһында индекслана.",
        "post-expand-template-inclusion-category-desc": "Барлыҡ ҡалыптарҙы ла күрһәткәндән һуң биттең күләме арта<code>$wgMaxArticleSize</code>, шуға күрә ҡайһы берҙәре тулыһынса күрһәтелмәне.",
        "watchnologin": "Үҙегеҙҙе танытырға кәрәк",
        "addwatch": "Күҙәтеү исемлегенә өҫтәргә",
        "addedwatchtext": "\"[[:$1]]\" бите [[Special:Watchlist|күҙәтеү исемлегегеҙгә]] өҫтәлде.\nБыл биттә һәм уның фекер алышыу битендә буласаҡ бар үҙгәртеүҙәр ундағы исемлектә күрһәтеләсәк.",
+       "addedwatchtext-talk": "«[[:$1]]» үҙенә бәйләнгән бит менән бергә һеҙҙең [[Special:Watchlist|күҙәтеү исемлеге]]нә өҫтәлде.",
        "addedwatchtext-short": "\"$1\" бите Һеҙҙең күҙәтеү исемлегенә өҫтәлгән",
        "removewatch": "Күҙәтеү исемлегенән сығарырға",
        "removedwatchtext": "«[[:$1]]» мәҡәләһе һәм уның фекер алышыу бите һеҙҙең [[Special:Watchlist|күҙәтеү исемлегенән]] сығарылды.",
+       "removedwatchtext-talk": "«[[:$1]]» үҙенә бәйләнгән бит менән бергә һеҙҙең [[Special:Watchlist|күҙәтеү исемлеге]]нән алып ташланды.",
        "removedwatchtext-short": "\"$1\" бите һеҙҙең күҙәтеү исемлегенән алып ташланды.",
        "watch": "Күҙәтергә",
        "watchthispage": "Был битте күҙәтергә",
        "enotif_lastdiff": "Был үҙгәртеүҙе күреү өсөн, $1 ҡарағыҙ",
        "enotif_anon_editor": "танылмаған ҡатнашыусы $1",
        "enotif_body": "Хөрмәтле $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nМөхәррирләү аңлатмаһы: $PAGESUMMARY $PAGEMINOREDIT\n\nҮҙгәртеүсе менән бәйләнеш өсөн:\nЭл. почта адресы: $PAGEEDITOR_EMAIL\nВики бите: $PAGEEDITOR_WIKI\n\nӘгәр һеҙ был биткә иҫәп яҙмағыҙ буйынса инмәһәгеҙ, бынан һуң буласаҡ үҙгәртеүҙәр тураһында белдереү алмаясаҡһығыҙ. \nҺеҙ шулай уҡ күҙәтеү исемлегедәге бар биттәр өсөн белдереү көйләүен һүндерә алаһығыҙ.\n\n {{grammar:genitive|{{SITENAME}}}}  белдереү системаһы\n\n--\nБелдереүҙәрен көйләүен үҙгәртергә:\n{{canonicalurl:{{#special:Preferences}}}}\n\nКүҙәтеү исемлеге көйләүҙәрен үҙгәртергә:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nКүҙәтеү исемлегенән биттәрҙе юйырға:\n$UNWATCHURL\n\nКире бәйләнеш һәм ярҙам:\n$HELPPAGE",
+       "enotif_minoredit": "Был әҙ үҙгәреш",
        "created": "булдырылды",
        "changed": "үҙгәртелгән",
        "deletepage": "Битте юйырға",
        "delete-warning-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\nБитте юйыу {{SITENAME}} проектының эшмәкәрлеге боҙолоуына килтереүе мөмкин, һаҡлыҡ менән эш итегеҙ.",
        "deleteprotected": "Был бит һаҡланған, уны юйҙыра алмайһығыҙ.",
        "deleting-backlinks-warning": "<strong>Иҫкәртеү:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Башҡа ҡатнашыусылар]] һеҙ юйырға теләгән биткә һылтана.",
+       "deleting-subpages-warning": "<strong>Иҫкәрмә:</strong> Һеҙ юйырға йыйынған биттә [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|$1 бәләкәй бит|$1 бәләкәй биттәре|51=50 бәләкәй биттән ашыу}}]] бар.",
        "rollback": "Үҙгәртеүҙәрҙе кире ҡайтарырға",
        "rollbacklink": "кире",
        "rollbacklinkcount": "$1 {{PLURAL:$1|1=төҙәтеүҙе|төҙәтеүҙе}} кире алырға",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|1=төҙәтеүҙән|төҙәтеүҙән}} күберәк кире алырға",
        "rollbackfailed": "Кире ҡайтарырғанда барлыҡҡа килгән хата",
+       "rollback-missingparam": "Һеҙ һораған параметрҙар юҡ.",
+       "rollback-missingrevision": "Версияның билдәләмәләрен тейәп булманы",
        "cantrollback": "Үҙгәртеүҙәрҙе кире алыу мөмкин түгел. Битте һуңғы үҙгәртеүсе ҡатнашыусы уның берҙән-бер авторы булып тора.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|фекер алышыу]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])  кереткән [[:$1]] һуңғы үҙгәртеүҙәрҙе кире алыу мөмкин түгел; башҡа ҡатнашыусы был битте мөхәррирләгән йәки үҙгәртеүҙәрҙе кире алған инде.\n\nҺуңғы үҙгәртеүҙәрҙе [[User:$3|$3]] ([[User talk:$3| фекер алышыу]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) кереткән.",
        "editcomment": "Үҙгәртеүҙең тасуирламаһы <em>$1</em> ине.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|фекер алышыу]]) уҙгәртеүҙәре [[User:$1|$1]] өлгөһөнә ҡайтарылды",
        "revertpage-nouser": "(Ҡатнашыусының исеме йәшерелгән) үҙгәртеүҙәре {{GENDER:$1|[[User:$1|$1]]}}өлгөһөнә ҡайтарылды",
        "rollback-success": "{{GENDER:$3|$1}} үҙгәртеүҙәре кире алынды; {{GENDER:$4|$2}} версияһына ҡайтарылды.",
+       "rollback-success-notify": "Төҙәтеүҙәр кире тейәлгән $1; һуңғы $2 версияға кире ҡайтыу. [$3 Үҙгәрештәрҙе күрһәтеү]",
        "sessionfailure-title": "Сеанс хатаһы",
        "sessionfailure": "Хәҙерге сеанста хаталар килеп сыҡҡан, булырға тейеш;\n\"сеансты баҫып алыу\"ға юл ҡуймау өсөн был ғәмәл үтәлмәне.\nАлдағы биткә кире  ҡайтығыҙ, битте яңыртығыҙ һәм яңынан ҡабатлап ҡарағыҙ.",
        "changecontentmodel": "Биттең контент моделен мөхәррирләү",
        "changecontentmodel-success-text": "[[:$1]] эстәлек моделе үҙгәртелде",
        "changecontentmodel-cannot-convert": "[[:$1]]  эстәлеге $2 тибына үҙгәртелә алмай",
        "changecontentmodel-nodirectediting": "$1 эстәлеге моделен тураға мөхәррирләп булмай",
+       "changecontentmodel-emptymodels-title": "Йөкмәткенең рөхсәтле төрҙәре юҡ",
+       "changecontentmodel-emptymodels-text": "[[:$1]]тағы йөкмәтке башҡа бер төргә лә үҙгәрә алмай.",
        "log-name-contentmodel": "Эстәлек моделен үҙгәртеүҙәр журналы",
        "log-description-contentmodel": "Бында биттең эстәлек моделенең үҙгәртеүҙәре һәм стандарт эстәлек моделенән айырмалы модель буйынса төҙөлгән биттәр күрһәтелгән.",
        "logentry-contentmodel-new": "$1 $3 {{GENDER:$2|}} битен булдырҙы, стандарт булмаған «$5» моделе ҡулланылды.",
        "modifiedarticleprotection": "\"[[$1]]\" битенең һаҡлау дәрәжәһен үҙгәрткән",
        "unprotectedarticle": "«[[$1]]» битенән һаҡлау алынды",
        "movedarticleprotection": "һаҡлау көйләүҙәрен «[[$2]]» битенән «[[$1]]» битенә күсергән",
+       "protectedarticle-comment": "[[$1]]тигән битте {{GENDER:$2||а}} һаҡланы",
+       "modifiedarticleprotection-comment": "[[$1]] өсөн {{GENDER:$2||а}}һаҡланыу кимәлен үҙгәртте",
+       "unprotectedarticle-comment": "«[[$1]]»нан {{GENDER:$2||а}} һаҡланыуы алынды",
        "protect-title": "\"$1\" битенең һаҡлау дәрәжәһен үҙгәртеү",
        "protect-title-notallowed": "\"$1\" битенең һаҡлау дәрәжәһен байҡау",
        "prot_1movedto2": "[[$1]] битенең исемен [[$2]] тип үҙгәрткән",
        "undeletehistorynoadmin": "Мәҡәлә юйылған.\nТүбәндә юйыу сәбәптәре һәм мәҡәләне юйғанға тиклем мөхәррирләүсе ҡатнашыусылар исемлеге килтерелгән. \nЮйылған мәҡәләне хакимдәр генә ҡарай ала.",
        "undelete-revision": "$1 битенең $3 ҡатнашыусыһының ($4 $5 мөхәррирләгән) юйылған өлгөһө:",
        "undeleterevision-missing": "Был өлгө дөрөҫ түгел йәки бөтөнләй юҡ.\nҺеҙ дөрөҫ булмаған һылтанма аша кергәнһегеҙ йәки был өлгө архивтан юйылған, булырға тейеш.",
+       "undeleterevision-duplicate-revid": "$1 {{PLURAL:$1|версия|версиялар}} терелтелмәйәсәк, сөнки {{PLURAL:$1|ул|улар}} <code>rev_id</code> инде ҡулланыла.",
        "undelete-nodiff": "Алдағы өлгө табылманы.",
        "undeletebtn": "Тергеҙергә",
        "undeletelink": "ҡарарға/тергеҙергә",
        "undelete-search-title": "Юйылған биттәрҙе эҙләү",
        "undelete-search-box": "Юйылған биттәрҙе эҙләү",
        "undelete-search-prefix": "Ошолай башланған биттәрҙе күрһәтергә:",
+       "undelete-search-full": "Шундай атамалары булған биттәрҙе күрһәтергә:",
        "undelete-search-submit": "Эҙләү",
        "undelete-no-results": "Юйыу яҙмалары архивында кәрәкле биттәр юҡ.",
        "undelete-filename-mismatch": "$1 ваҡыт билдәһе менән файл өлгөһөн тергеҙеү мөмкин түгел: файл исеме тап килмәй",
        "sp-contributions-username": "Ҡулланыусының IP-адресы йәки исеме:",
        "sp-contributions-toponly": "Һуңғы өлгөләрҙе генә күрһәтергә",
        "sp-contributions-newonly": "Яңы бит яһаған төҙәтеүҙәрҙе генә күрһәтергә",
+       "sp-contributions-hideminor": "Әҙ төҙәтеүҙәрҙе йәшерергә",
        "sp-contributions-submit": "Эҙлә",
        "whatlinkshere": "Бында һылтанмалар",
        "whatlinkshere-title": "«$1» битенә һылтанған биттәр",
        "unblocked-id": "$1 биге алынған",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] блоктан азат ителде",
        "blocklist": "Тыйылған ҡатнашыусылар",
+       "autoblocklist": "Автоблоклауҙар",
+       "autoblocklist-submit": "Табыу",
+       "autoblocklist-legend": "Автоблокировкалар исемлеге",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Локаль автоблокировка|Локаль автоблокировкалар}}",
+       "autoblocklist-total-autoblocks": "Автоблоктар барлығы: $1",
+       "autoblocklist-empty": "Автоблокировкалар исемлеге буш.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Башҡа автоблокировка|Башҡа автоблокировкалар}}",
        "ipblocklist": "Тыйылған ҡатнашыусылар",
        "ipblocklist-legend": "Бикләнгән ҡатнашыусыны эҙләү",
        "blocklist-userblocks": "Иҫәп яҙыуҙарын бикләүҙе йәшер",
        "proxyblockreason": "Һеҙҙең IP адресығыҙ бикләнгән, сөнки ул — асыҡ прокси.\nЗинһар, Интернет менән тәъмин итеүсегеҙгә йәки ярҙам хеҙмәтенә мөрәжәғәт итегеҙ һәм уларға был едти хәүефһеҙлек хатаһы тураһында хәбәр итегеҙ.",
        "sorbsreason": "Һеҙҙең IP адресығыҙ {{SITENAME}} проекты ҡулланған DNSBL исемлегендә асыҡ прокси тип иҫәпләнә.",
        "sorbs_create_account_reason": "Һеҙҙең IP адресығыҙ {{SITENAME}} проекты ҡулланған DNSBL исемлегендә асыҡ прокси тип иҫәпләнә.\nҺеҙ иҫәп яҙмаһы булдыра алмайһығыҙ.",
+       "softblockrangesreason": "Һеҙҙең IP-адрестан аноним төҙәтеүҙәр тыйылған ($1). Зинһар, системаға инегеҙ.",
        "xffblockreason": "X-Forwarded-For атамаһы эсенә ингән һәм һеҙҙекеме, һеҙ ҡулланған прокси-серверҙыҡымы булған IP-адрес бикләнде. Бикләүҙең тәүсәбәбе ошо ине: $1",
        "cant-see-hidden-user": "Һеҙ бикләргә тырышҡан ҡатнашыусы әлеге ваҡытта бикләнгән һәм йәшерелгән.\nҠатнашыусыларҙы йәшереү хоҡуғығыҙ булмағанға күрә, һеҙ был бикләүҙе ҡарай йәки үҙгәртә алмайһығыҙ.",
        "ipbblocked": "Үҙегеҙ бикләнгән ваҡытта һеҙ башҡа ҡатнашыусыларҙы бикләй йәки бикте ала алмайһығыҙ.",
        "cant-move-to-user-page": "Һеҙҙең битте ҡатнашыусы бите итеп үҙгәртергә хоҡуғығыҙ юҡ (ҡатнашыусы биттәренән тыш).",
        "cant-move-category-page": "Һеҙҙең категория исемен үҙгәртергә хоҡуғығыҙ юҡ",
        "cant-move-to-category-page": "Һеҙҙең битте категория бите тип төҙәтергә хоҡуғығыҙ юҡ.",
+       "cant-move-subpages": "Һеҙгә бәләкәй биттәрҙең исемен алыштырырға рөхсәт юҡ.",
+       "namespace-nosubpages": "«$1» исемдәр яланы яңы бит булдырырға рәхсәт итмәй.",
        "newtitle": "Яңы атама",
        "move-watch": "Был битте күҙәтеү исемлегенә өҫтәргә",
        "movepagebtn": "Биттең исемен үҙгәртергә",
        "movelogpagetext": "Түбәндә — исемдәре үҙгәртелгән биттәр.",
        "movesubpage": "{{PLURAL:$1|ярҙамсы бит}}",
        "movesubpagetext": "Был биттә $1 {{PLURAL:$1|ярҙамсы бит}}.",
+       "movesubpagetalktext": "Фекер алышыу битендә $1 {{PLURAL: $ 1 | бәләкәй бит| бәләкәй биттәр}} бар. Улар аҫта күрһәтелгән.",
        "movenosubpage": "Был биткә бер бит тә кермәгән.",
        "movereason": "Сәбәп:",
        "revertmove": "кирегә",
        "tooltip-pt-mycontris": "{{GENDER:|Һеҙҙең}} төҙәтеүҙәр исемлеге",
        "tooltip-pt-anoncontribs": "Был IP-адрестан яһалған төҙәтеүҙәр",
        "tooltip-pt-login": "Бында теркәлеү үтергә була, әммә был эш мәжбүри түгел",
+       "tooltip-pt-login-private": "Был викиҙы ҡулланыу өсөн һеҙгә инергә кәрәк.",
        "tooltip-pt-logout": "Сығырға",
        "tooltip-pt-createaccount": "Мотлаҡ булмаһа ла, Һеҙгә иҫәп яҙмаһы төҙөргә һәм системала танылырға тәҡдим итәбеҙ",
        "tooltip-ca-talk": "Биттең эстәлеге тураһында фекерләшеү",
        "pageinfo-length": "Бит оҙонлоғо (байттарҙа)",
        "pageinfo-article-id": "Бит идентификаторы",
        "pageinfo-language": "Бит эстәлегенең теле",
+       "pageinfo-language-change": "Үҙгәртергә",
        "pageinfo-content-model": "Бит эстәлегенең моделе",
+       "pageinfo-content-model-change": "Үҙгәрт",
        "pageinfo-robot-policy": "Эҙләү роботтары тарафынан индексацияланыу",
        "pageinfo-robot-index": "Рөхсәт ителгән",
        "pageinfo-robot-noindex": "Рөхсәт ителмәй",
        "pageinfo-category-pages": "Биттәр һаны",
        "pageinfo-category-subcats": "Категория бүлемдәре һаны",
        "pageinfo-category-files": "Файлдар һаны",
+       "pageinfo-user-id": "Ҡатнашыусыны раҫлау",
        "markaspatrolleddiff": "Тикшерелгән, тип билдәләргә",
        "markaspatrolledtext": "Бил битте тикшерелгән, тип билдәләргә",
        "markaspatrolledtext-file": "Был өлөгөнө патрулләнгән тип ҡуйырға",
        "patrol-log-header": "Был — тикшерелгән өлгөләр яҙмалары журналы.",
        "log-show-hide-patrol": "тикшереү яҙмалары журналын $1",
        "log-show-hide-tag": "$1 билдәләр журналы",
+       "confirm-markpatrolled-button": "Яҡшы",
+       "confirm-markpatrolled-top": "$2 битенең $3 версияһын тикшерелгән тип һанарғамы?",
        "deletedrevision": "Иҫке $1 өлгөһө юйылды",
        "filedeleteerror-short": "Файлды юйыу хатаһы: $1",
        "filedeleteerror-long": "Файлды юйыу ваҡытында хаталар килеп сыҡты:\n\n$1",
        "newimages-summary": "Был махсус бит һуңғы тейәлгән файлдарҙы күрһәтә.",
        "newimages-legend": "Һайлау",
        "newimages-label": "Файл исеме (йәки өлөшө):",
+       "newimages-user": "Ҡатнашыусының исеме һәм IP-адресы",
+       "newimages-newbies": "Яңы иҫәп яҙмалары индергән өлөштө генә күрһәтергә",
        "newimages-showbots": "Роботтан тейегәнде күрһәтергә",
        "newimages-hidepatrolled": "Патрулләнгән күсереүҙәрҙе йәшерергә",
+       "newimages-mediatype": "Медиа төрө:",
        "noimages": "Рәсемдәр юҡ.",
+       "gallery-slideshow-toggle": "Миниатюраларҙы алыштырырға",
        "ilsubmit": "Эҙләү",
        "bydate": "булдырыу көнө буйынса",
        "sp-newimages-showfrom": "$1 $2 ваҡытынан башлап яңы файлдарҙы күрһәтергә",
        "confirmemail_body_set": "Кемдер (бәлки, һеҙҙер) $1 IP-адресынан \n{{SITENAME}}  проектында \"$2\" иҫәп яҙмаһының электрон почта адресы итеп ошо адресты күрһәткән.\n\nБыл иҫәп яҙмаһы ысынлап та һеҙҙеке икәнен раҫлау һәм {{SITENAME}} сайтынан хат ебәреү мөмкинлектәрен яңынан тоҡандырыу өсөн, браузерығыҙҙа түбәндәге һылтанманы асығыҙ:\n\n$3\n\nӘгәр иҫәп яҙмаһы һеҙҙеке *түгел* икән,\nэлектрон почта адресын раҫлауҙы үткәрмәү өсөн түбәндәге һылтанманы асығыҙ:\n\n$5\n\nБыл раҫлау коды $4 ғәмәлдән сыға.",
        "confirmemail_invalidated": "Электрон почта адресын раҫлау туҡтатылды",
        "invalidateemail": "Электрон почта адресын раҫлауҙы туҡтатыу",
+       "notificationemail_subject_changed": "{{SITENAME}} өсөн электрон почтаһы адресы үҙгәртелгән",
+       "notificationemail_subject_removed": "{{SITENAME}} теркәлгән электрон почта адресы юйылған",
+       "notificationemail_body_changed": "Кемдер, бәлки һеҙҙер, $1 IP-адресынан, {{SITENAME}} \"$3\" да \"$2\" иҫәп яҙмаһының электрон почтаһы адресын үҙгәрткән.\n\nӘгәр быны һеҙ эшләмәһәгеҙ, тиҙ генә сайттың администраторына белгертегеҙ.",
+       "notificationemail_body_removed": "Кемдер, бәлки һеҙҙер, $1 IP-адресынан, {{SITENAME}} та \"$2\" иҫәп яҙмаһының электрон почтаһы адресын юйған.\n\nӘгәр быны һеҙ эшләмәһәгеҙ, тиҙ генә сайттың администраторына белгертегеҙ.",
        "scarytranscludedisabled": "[Интервики индереү мөмкинлеге һүндерелгән]",
        "scarytranscludefailed": "[$1 ҡалыбына мөрәжәғәт итеү хатаһы]",
        "scarytranscludefailed-httpstatus": "[$1 өсөн ҡалып алып булманы: HTTP $2]",
        "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|фекер алышыу]]) был битте һеҙ мөхәррирләй башлағандан һуң юйған, сәбәбе:\n: ''$2''\nЗинһар, был битте ысынлап та яңынан булдырырға теләүегеҙҙе раҫлағыҙ.",
        "confirmrecreate-noreason": "[[User:$1|$1]] ([[User talk:$1|фекер алышыу]]) һеҙ был битте мөхәррирләй башлағандан һуң юйған. Зинһар, был битте ысынлап та яңынан яһарға теләүегеҙҙе раҫлағыҙ.",
        "recreate": "Яңынан булдырырға",
+       "confirm-purge-title": "Был биттең кешын таҙартыу",
        "confirm_purge_button": "Тамам",
        "confirm-purge-top": "Был биттең кэшын таҙартырғамы?",
        "confirm-purge-bottom": "Биттең кэшы таҙартылғандан һун, уның һуңғы өлгөһө күрһәтеләсәк.",
index 7927eb9..eed1f17 100644 (file)
        "rcfilters-restore-default-filters": "Аднавіць фільтры па змоўчаньні",
        "rcfilters-clear-all-filters": "Ачысьціць усе фільтры",
        "rcfilters-show-new-changes": "Праглядзець найноўшыя зьмены",
-       "rcfilters-previous-changes-label": "Раней прагледжаныя зьмены",
        "rcfilters-search-placeholder": "Фільтар апошніх зьменаў (праглядзець або пачніце друкаваць)",
        "rcfilters-invalid-filter": "Няслушны фільтар",
        "rcfilters-empty-filter": "Няма актыўных фільтраў. Паказаны ўвесь унёсак.",
        "rcfilters-filterlist-noresults": "Фільтры ня знойдзеныя",
        "rcfilters-noresults-conflict": "Няма вынікаў, бо крытэры пошуку супярэчаць адзін аднаму",
        "rcfilters-state-message-subset": "Гэты фільтар ня мае эфэкту, бо яго вынікі ўключаныя ў вынікі больш {{PLURAL:$2|шырокага фільтру|шырокіх фільтраў}} (паспрабуйце вылучэньне, каб вызначыць яго): $1",
-       "rcfilters-state-message-fullcoverage": "Выбар усіх фільтраў у групе — тое ж самае, што і выбар ніводнага, адпаведна, гэты фільтар ня мае эфэкту. Група ўключае: $1",
+       "rcfilters-state-message-fullcoverage": "Ð\92Ñ\8bбаÑ\80 Ñ\83Ñ\81Ñ\96Ñ\85 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80аÑ\9e Ñ\83 Ð³Ñ\8dÑ\82ай Ð³Ñ\80Ñ\83пе â\80\94 Ñ\82ое Ð¶ Ñ\81амае, Ñ\88Ñ\82о Ñ\96 Ð²Ñ\8bбаÑ\80 Ð½Ñ\96воднага, Ð°Ð´Ð¿Ð°Ð²ÐµÐ´Ð½Ð°, Ð³Ñ\8dÑ\82Ñ\8b Ñ\84Ñ\96лÑ\8cÑ\82аÑ\80 Ð½Ñ\8f Ð¼Ð°Ðµ Ñ\8dÑ\84Ñ\8dкÑ\82Ñ\83. Ð\93Ñ\80Ñ\83па Ñ\9eклÑ\8eÑ\87ае: $1",
        "rcfilters-filtergroup-authorship": "Аўтарства ўнёску",
        "rcfilters-filter-editsbyself-label": "Зьмены, зробленыя вамі",
        "rcfilters-filter-editsbyself-description": "Ваш уласны ўнёсак.",
        "pageswithprop-legend": "Старонкі з уласьцівасьцямі старонак",
        "pageswithprop-text": "На гэтай старонцы адлюстроўваюцца старонкі, якія ўжываюць пэўную ўласьцівасьць старонкі.",
        "pageswithprop-prop": "Імя ўласьцівасьці:",
+       "pageswithprop-reverse": "Сартаваць у адваротным парадку",
+       "pageswithprop-sortbyvalue": "Сартаваць паводле значэньня ўласьцівасьці",
        "pageswithprop-submit": "Паказаць",
        "pageswithprop-prophidden-long": "доўгае тэкставае значэньне ўласьцівасьці схавана ($1)",
        "pageswithprop-prophidden-binary": "двайковае значэньне ўласьцівасьці схавана ($1)",
index f7ccc4d..7d3f435 100644 (file)
@@ -40,7 +40,8 @@
                        "Spas.Z.Spasov",
                        "АдмиралАнимЕ",
                        "Irus",
-                       "Kareyac"
+                       "Kareyac",
+                       "ShockD"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
        "virus-unknownscanner": "непознат антивирус:",
        "logouttext": "<strong>Излязохте от системата.</strong>\n\nОбърнете внимание, че някои страници все още ще се показват така, сякаш сте влезли, докато не изтриете кеша на браузъра.",
        "cannotlogoutnow-title": "Не може да излезете сега",
+       "cannotlogoutnow-text": "Излизането не е възможно, когато се използва $1.",
        "welcomeuser": "Здравейте, $1!",
        "welcomecreation-msg": "Вашата сметка беше създадена.\nМожете да промените [[Special:Preferences|настройките на {{SITENAME}}]] според предпочитанията си.",
        "yourname": "Потребителско име:",
        "cannotlogin-title": "Не може да влезете в",
        "cannotlogin-text": "Влизането в системата не е възможно.",
        "cannotloginnow-title": "Не може да влезете сега",
+       "cannotloginnow-text": "Влизането не е възможно, когато се използва $1.",
        "cannotcreateaccount-title": "Невъзможно е да бъде създадена потребителска сметка",
+       "cannotcreateaccount-text": "Директното създаване на сметки не е позволено на това Уики.",
        "yourdomainname": "Вашият домейн:",
        "password-change-forbidden": "Не можете да променяте пароли в това уики.",
        "externaldberror": "Възникна грешка в базата от данни при външното удостоверяване, или не ви е позволено да обновявате външната си сметка.",
        "permissionserrorstext": "Нямате правата да извършите това действие по {{PLURAL:$1|следната причина|следните причини}}:",
        "permissionserrorstext-withaction": "Нямате разрешение за $2 поради {{PLURAL:$1|следната причина|следните причини}}:",
        "recreate-moveddeleted-warn": "<strong>Внимание: Създавате страница, която по-рано вече е била изтрита.</strong>\n\nОбмислете добре дали е уместно повторното създаване на страницата.\nЗа ваша информация по-долу е посочена причината за предишното изтриване на страницата:",
-       "moveddeleted-notice": "Тази Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð±Ð¸Ð»Ð° Ð¸Ð·Ñ\82Ñ\80иÑ\82а.\nÐ\97а Ñ\81пÑ\80авка, Ð¿Ð¾-долÑ\83 Ñ\81а Ð²ÐºÐ»Ñ\8eÑ\87ени Ð¸Ð·Ð²Ð°Ð´ÐºÐ¸ Ð¾Ñ\82 Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86иÑ\82е Ð½Ð° Ð¸Ð·Ñ\82Ñ\80иваниÑ\8fÑ\82а Ð¸ Ð¿Ñ\80емеÑ\81Ñ\82ваниÑ\8fÑ\82а.",
+       "moveddeleted-notice": "Тази Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð¸Ð·Ñ\82Ñ\80иÑ\82а.\nÐ\94невниÑ\86иÑ\82е Ð½Ð° Ð¸Ð·Ñ\82Ñ\80иваниÑ\8fÑ\82а, Ð·Ð°Ñ\89иÑ\82иÑ\82е Ð¸ Ð¿Ñ\80емеÑ\81Ñ\82ваниÑ\8fÑ\82а Ðµ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ Ð¿Ð¾-долÑ\83.",
        "log-fulllog": "Преглеждане на пълния дневник",
        "edit-hook-aborted": "Редакцията беше прекъсната от кука.\nНе беше посочена причина за това.",
        "edit-gone-missing": "Страницата не можа да се обнови.\nВероятно междувременно е била изтрита.",
        "filetype-unwanted-type": "<strong>„.$1“</strong> е нежелан файлов формат.\n{{PLURAL:$3|Препоръчителният файлов формат е|Препоръчителните файлови формати са}} $2.",
        "filetype-banned-type": "'''„.$1“''' не {{PLURAL:$4|е позволен файлов формат|са позволени файлови формати}}. {{PLURAL:$3|Позволеният файлов формат е|Позволените файлови формати са}} $2.",
        "filetype-missing": "Файлът няма разширение (напр. „.jpg“).",
-       "empty-file": "Ð\9fодадениÑ\8fÑ\82 Ð¾Ñ\82 Ð²Ð°Ñ\81 Ñ\84айл Ð±ÐµÑ\88е Ð¿Ñ\80азен.",
+       "empty-file": "Подаденият от вас файл е празен.",
        "file-too-large": "Подаденият от вас файл беше твърде голям.",
        "filename-tooshort": "Името на файла е твърде кратко.",
        "filetype-banned": "Този тип файл е забранен.",
        "watchlist-details": "{{PLURAL:$1|Една наблюдавана страница|$1 наблюдавани страници}} от списъка Ви за наблюдение (без беседи).",
        "wlheader-enotif": "Известяването по е-поща е включено.",
        "wlheader-showupdated": "Страниците, които са били променени след последния път, когато сте ги посетили, са показани в '''получер'''.",
-       "wlnote": "{{PLURAL:$1|Показана е последната промяна|Показани са последните <strong>$1</strong> промени}} през {{PLURAL:$2|последния час|последните <strong>$2</strong> часа}}, започвайки от от $3, $4.",
+       "wlnote": "{{PLURAL:$1|Показана е последната промяна|Показани са последните <strong>$1</strong> промени}} през {{PLURAL:$2|последния час|последните <strong>$2</strong> часа}}, започвайки от $3, $4.",
        "wlshowlast": "Показване на последните $1 часа $2 дни",
        "watchlist-hide": "Скриване",
        "watchlist-submit": "Показване",
        "compare-invalid-title": "Посоченото заглавие е невалидно.",
        "compare-title-not-exists": "Посоченото заглавие не съществува.",
        "compare-revision-not-exists": "Посочената версия не съществува.",
+       "diff-form": "'''формуляр'''",
        "dberr-problems": "Съжаляваме! Сайтът изпитва технически затруднения.",
        "dberr-again": "Изчакайте няколко минути и опитайте да презаредите.",
        "dberr-info": "(Няма достъп до базата от данни: $1)",
        "logentry-delete-delete": "$1 {{GENDER:$2|изтри}} страницата $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|изтри}} пренасочване $3 чрез препокриване",
        "logentry-delete-restore": "$1 {{GENDER:$2|възстанови}} страницата $3 ($4)",
+       "logentry-delete-event": "$1 {{GENDER:$2|промени}} видимостта на {{PLURAL:$5|едно събитие|$5 събития}} от дневника в $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|промени}} видимостта на {{PLURAL:$5|една редакция|$5 редакции}} в страница $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|промени}} видимостта на събитията от дневниците за страница $3",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|промени}} видимостта на версиите на страница $3",
        "revdelete-content-hid": "скрито съдържание",
        "revdelete-summary-hid": "скрито резюме на редакцията",
        "revdelete-uname-hid": "скрито потребителско име",
+       "revdelete-content-unhid": "показано съдържание",
+       "revdelete-summary-unhid": "показано резюме на редакцията",
+       "revdelete-uname-unhid": "показано потребителско име",
        "revdelete-restricted": "добавени ограничения за администраторите",
        "revdelete-unrestricted": "премахнати ограничения за администраторите",
        "logentry-block-block": "$1 {{GENDER:$2|блокира }} {{GENDER:$4|$3}} със срок на изтичане $5 $6",
        "logentry-newusers-create2": "$1 {{GENDER:$2|създаде}} потребителска сметка $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|създаде}} потребителската сметка $3, като паролата за нея беше изпратена по е-поща",
        "logentry-newusers-autocreate": "Сметката $1 беше {{GENDER:$2|създадена}} автоматично",
+       "logentry-protect-protect": "\n$1 {{GENDER:$2|защити}} $3 $4",
+       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|защити}} $3 $4 [каскадно]",
        "logentry-rights-rights": "$1 {{GENDER:$2|промени}} потребителската група на {{GENDER:$6|$3}} от $4 на $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|промени}} потребителската група на $3",
        "logentry-rights-autopromote": "$1 е автоматично {{GENDER:$2|повишен|повишена}} от $4 до $5",
index 3bd3da1..3ca3fd5 100644 (file)
        "permissionserrorstext-withaction": "नीचे दिहल {{PLURAL:$1|कारण|कारणन}} के चलते रउआँ के $2 के परमीशन नइखे:",
        "contentmodelediterror": "रउआँ एह अवतरण के संपादन नइखीं कर सकत काहें से कि एकर सामग्री मॉडल <code>$1</code> बा जवन पन्ना के के वर्तमान मॉडल <code>$2</code> से अलग बाटे।",
        "recreate-moveddeleted-warn": "<strong>चेतावनी: रउआँ एगो अइसन पन्ना दुबारा बनावे जा रहल बानी जेवन पहिले हटावल जा चुकल बा</strong>\n\nआपके ई बिचार क लेवे के चाहीं की आगे संपादन कइल ठीक बा की ना।\n\nसुविधा खातिर, ए पन्ना के हटवले आ स्थानांतरण के लॉग नीचे दिहल जात बा:",
-       "moveddeleted-notice": "à¤\88 à¤ªà¤¨à¥\8dना à¤¹à¤\9fा à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾à¥¤\nसà¤\82दरà¥\8dभ à¤\96ातिर à¤¹à¤\9fावà¥\87 आ स्थानांतरण के लॉग नीचे दिहल जात बाटे।",
+       "moveddeleted-notice": "à¤\88 à¤ªà¤¨à¥\8dना à¤¹à¤\9fा à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾à¥¤\nसà¤\82दरà¥\8dभ à¤\96ातिर à¤¹à¤\9fवलà¥\87, à¤¸à¥\81रà¤\95à¥\8dषा आ स्थानांतरण के लॉग नीचे दिहल जात बाटे।",
        "moveddeleted-notice-recent": "माफ करीं, ई पन्ना हाले में हटा दिहल गइल बा (पछिला 24 घंटा के भीतर)।\nहटवले आ स्थानांतरण के लॉग हवाला खातिर नीचे दिहल जा रहल बा।",
        "log-fulllog": "पूरा लॉग देखीं",
        "edit-hook-aborted": "संपादन के हुक निरस्त क दिहलस।\nई कौनों कारन ना बतवलस।",
        "searchrelated": "संबंधित",
        "searchall": "सगरी",
        "showingresults": "नीचे देखावल जा रहल बा {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
+       "search-showingresults": "{{PLURAL:$4|<strong>$1</strong> के रिजल्ट <strong>$3</strong>|<strong>$3</strong> में से <strong>$1 - $2</strong> के रिजल्ट}}",
        "search-nonefound": "राउर खोज से मेल खात कौनों परिणाम नइखे मिलत",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "सन्दर्भ में खोजीं",
        "metadata-help": "ए फाइल में एक्स्ट्रा जानकारी उपलब्ध बा, हो सकत बा कि ई डिजिटल कैमरा या स्कैनर से लेवल गइल होखे। अगर ई वर्तमान फाइल एकरी ओरिजनल फाइल से सुधार के बनल बा त हो सकेला कुछ जानकारी ना लउके।",
        "metadata-expand": "विस्तृत विवरण देखाईं",
        "metadata-collapse": "विस्तृत विवरण छुपाँईं",
+       "metadata-fields": "एह सनेसा में बतावल गइल इमेज मेटाडेटा फील्ड सभ इमेज के पन्ना पर के डिस्प्ले में शामिल कइल जइहें जब मेटाडेटा सारणी के सिकुड़ा दिहल गइल होखी।\nबाकी सगरी डिफाल्ट रूप से छिपल रहिहें।\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "चौड़ाई",
        "exif-imagelength": "ऊँचाई",
        "exif-bitspersample": "अवयव प्रति बीट",
index d45d38e..28755d8 100644 (file)
        "contentmodelediterror": "আপনি এই পুনর্বিবেচনা সম্পাদনা করতে পারবেন না কারণ এর বিষয়বস্তু মডেল <code>$1</code>, যা বর্তমান বিষয়বস্তু মডেল <code>$2</code>-এর থেকে ভিন্ন।",
        "recreate-moveddeleted-warn": "'''সতর্কীকরণ: আপনি এমন একটি পাতা পুনরায় তৈরি করছেন যা পূর্বে অপসারণ করা হয়েছিল।'''\n\nআপনি পাতাটি সম্পাদনা চালিয়ে যাওয়া ঠিক হবে কিনা, তা বিবেচনা করুন।\nআপনার সুবিধার্থে পাতাটির অপলুপ্তি লগ এখানে দেয়া হলো:",
        "moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এ পাতার অবলুপ্তি লগ দেওয়া হলো।",
-       "moveddeleted-notice-recent": "দুঃখিত, এই পাতাটি সাম্প্রতি অপসারিত হয়েছে (সর্বশেষ ২৪ ঘণ্টায়)।\nসূত্র হিসেবে নিচে এই পাতা অপসারণ ও স্থানান্তর লগ দেয়া হয়েছে।",
+       "moveddeleted-notice-recent": "দুঃখিত, এই পাতাটি সাম্প্রতি অপসারিত হয়েছে (সর্বশেষ ২৪ ঘণ্টায়)।\nসূত্র হিসেবে নিচে এই পাতা অপসারণ, সুরক্ষা ও স্থানান্তর লগ দেয়া হয়েছে।",
        "log-fulllog": "সম্পূর্ণ লগ দেখুন",
        "edit-hook-aborted": "হূক দ্বারা সম্পাদনা পরিত্যক্ত হয়েছে।\nএর কোন ব্যাখ্যা নাই।",
        "edit-gone-missing": "পাতাটি হালনাগাদ হয়নি।\nসম্ভবতঃ পাতাটি মুছে ফেলা হয়েছে।",
        "compare-invalid-title": "আপনার প্রদেয় শিরোনামটি সঠিক নয়।",
        "compare-title-not-exists": "আপনার কাঙ্ক্ষিত শিরোনামটি নেই।",
        "compare-revision-not-exists": "আপনার কাঙ্ক্ষিত সংস্করণটি নেই।",
-       "diff-form": "à¦\8fà¦\95à¦\9fি '''ফরম'''",
+       "diff-form": "পারà§\8dথà¦\95à§\8dয",
        "permanentlink-submit": "এই সংশোধনে যান",
        "dberr-problems": " দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।",
        "dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
index 1bce36f..b893335 100644 (file)
        "filedelete-intro-old": "Brišete verziju datoteke '''[[Media:$1|$1]]''' od [$4 $3, $2].",
        "filedelete-comment": "Razlog:",
        "filedelete-submit": "Obriši",
-       "filedelete-success": "'''$1''' je obrisano.",
+       "filedelete-success": "Datoteka <strong>$1</strong> je obrisana.",
        "filedelete-success-old": "Verzija datoteke '''[[Media:$1|$1]]''' od $3, $2 je obrisana.",
        "filedelete-nofile": "'''$1''' ne postoji.",
        "filedelete-nofile-old": "Ne postoji arhivirana verzija '''$1''' sa navedenim atributima.",
index c6c91c5..d1acb7b 100644 (file)
@@ -86,7 +86,7 @@
        "tog-shownumberswatching": "Mostra el nombre d'usuaris que hi vigilen",
        "tog-oldsig": "La vostra signatura actual:",
        "tog-fancysig": "Tractar la signatura com a text wiki (sense enllaç automàtic)",
-       "tog-uselivepreview": "Utilitza la previsualització automàtica",
+       "tog-uselivepreview": "Mostra previsualitzacions sense recarregar la pàgina",
        "tog-forceeditsummary": "Avisa'm en deixar el resum de la modificació en blanc",
        "tog-watchlisthideown": "Amaga les meues edicions de la llista de seguiment",
        "tog-watchlisthidebots": "Amaga de la llista de seguiment les edicions fetes per usuaris bots",
        "permissionserrorstext-withaction": "No teniu permís per a $2, {{PLURAL:$1|pel motiu següent|pels motius següents}}:",
        "contentmodelediterror": "No podeu modificar aquesta revisió perquè el seu model de contingut és <code>$1</code>, que difereix del model de contingut actual de la pàgina <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Avís: esteu creant una pàgina que s'ha suprimit prèviament.'''\n\nHauríeu de considerar si és realment necessari continuar editant aquesta pàgina.\nA continuació s'ofereix el registre de supressions i de reanomenaments de la pàgina:",
-       "moveddeleted-notice": "S'ha suprimit aquesta pàgina.\nA continuació us mostrem com a referència el registre d'esborraments i reanomenaments de la pàgina.",
-       "moveddeleted-notice-recent": "S’ha suprimit aquesta pàgina recentment (en les últimes 24 hores).\nA continuació us mostrem com a referència el registre de supressions i reanomenaments de la pàgina.",
+       "moveddeleted-notice": "S'ha suprimit aquesta pàgina.\nA continuació us mostrem com a referència el registre d'esborraments, proteccions i reanomenaments de la pàgina.",
+       "moveddeleted-notice-recent": "S’ha suprimit aquesta pàgina recentment (en les últimes 24 hores).\nA continuació us mostrem com a referència el registre de supressions, proteccions i reanomenaments de la pàgina.",
        "log-fulllog": "Veure tot el registre",
        "edit-hook-aborted": "Modificació avortada pel hook.\nNo s'ha donat cap explicació.",
        "edit-gone-missing": "No s'ha pogut actualitzar la pàgina.\nSembla haver estat esborrada.",
        "prefs-editwatchlist-clear": "Neteja la llista de seguiment",
        "prefs-watchlist-days": "Nombre de dies per mostrar en la llista de seguiment:",
        "prefs-watchlist-days-max": "Màxim $1 {{PLURAL:$1|dia|dies}}",
-       "prefs-watchlist-edits": "Nombre de modificacions a mostrar en una llista estesa de seguiment:",
+       "prefs-watchlist-edits": "Nombre màxim de modificacions a mostrar en la llista de seguiment:",
        "prefs-watchlist-edits-max": "Nombre màxim: 1000",
        "prefs-watchlist-token": "Testimoni de llista de seguiment:",
        "prefs-misc": "Altres preferències",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vegeu també la [[Special:NewPages|llista de pàgines noves]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Mostra",
+       "rcfilters-legend-heading": "<strong>Llista d'abreviatures:</strong>",
+       "rcfilters-other-review-tools": "<strong>Altres eines de supervisió</strong>",
        "rcfilters-group-results-by-page": "Agrupa els resultats per pàgina",
+       "rcfilters-grouping-title": "Agrupació",
        "rcfilters-activefilters": "Filtres actius",
+       "rcfilters-advancedfilters": "Filtres avançats",
+       "rcfilters-days-title": "Darrers dies",
        "rcfilters-hours-title": "Hores recents",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|dia|dies}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|hores}}",
        "rcfilters-quickfilters": "Filtres desats",
        "rcfilters-quickfilters-placeholder-title": "Encara no s’ha desat cap enllaç",
        "rcfilters-savedqueries-defaultlabel": "Filtres desats",
        "rcfilters-savedqueries-setdefault": "Defineix per defecte",
        "rcfilters-savedqueries-remove": "Suprimeix",
        "rcfilters-savedqueries-new-name-label": "Nom",
+       "rcfilters-savedqueries-new-name-placeholder": "Descriviu el propòsit del filtre",
        "rcfilters-savedqueries-apply-label": "Crea un filtre",
        "rcfilters-savedqueries-cancel-label": "Cancel·la",
        "rcfilters-savedqueries-add-new-title": "Desa els paràmetres de filtres actuals",
        "rcfilters-invalid-filter": "Filtre no vàlid",
        "rcfilters-empty-filter": "No hi ha cap filtre actiu. Es mostren totes les contribucions.",
        "rcfilters-filterlist-title": "Filtres",
-       "rcfilters-filterlist-whatsthis": "Què és això?",
+       "rcfilters-filterlist-whatsthis": "Com funciona això?",
        "rcfilters-highlightbutton-title": "Ressalta els resultats",
        "rcfilters-highlightmenu-title": "Selecciona un color",
        "rcfilters-highlightmenu-help": "Seleccioneu un color per ressaltar la propietat",
        "rcfilters-filter-categorization-description": "Registres de pàgines afegides o suprimides de les categories.",
        "rcfilters-filter-logactions-label": "Accions registrades",
        "rcfilters-filter-logactions-description": "Accions administratives, creacions de comptes, eliminacions de pàgines, càrregues…",
-       "rcfilters-filtergroup-lastRevision": "Darrera revisió",
+       "rcfilters-filtergroup-lastRevision": "Darreres revisions",
        "rcfilters-filter-lastrevision-label": "Darrera revisió",
        "rcfilters-filter-lastrevision-description": "El canvi més recent a una pàgina.",
        "rcfilters-filter-previousrevision-label": "Revisions anteriors",
index e6c038a..b22898c 100644 (file)
        "compare-rev2": "پێداچوونەوەی ٢",
        "compare-submit": "ھەڵسەنگاندن",
        "compare-invalid-title": "ئەم سەردێڕە دەستنیشانت کردووە نادروستە.",
+       "diff-form": "یەک '''فۆرم'''",
        "dberr-problems": "ببورە! ئەم ماڵپەڕە ئێستا خەریک ئەزموونێکی کێشەی تەکنیکیە.",
        "dberr-again": "چەن خولک ڕاوەستە و نوێی بکەوە.",
        "dberr-info": "(ناتوانیت بگەیت بە بنکەدراو: $1)",
        "logentry-rights-rights": "$1 ئەندامێتیی {{GENDER:$6|$3}}ی لە $4 بۆ $5 {{GENDER:$2|گۆڕی}}",
        "logentry-upload-upload": "$1 $3ی {{GENDER:$2|بار کرد}}",
        "logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
+       "logentry-managetags-create": "$1 تاگی \"$4\"ی دروست کرد",
        "rightsnone": "(ھیچ)",
        "feedback-back": "گەڕانەوە",
        "feedback-cancel": "ھەڵوەشاندنەوە",
index ac75826..a4b923f 100644 (file)
        "rcfilters-restore-default-filters": "Obnovit výchozí filtry",
        "rcfilters-clear-all-filters": "Zrušit všechny filtry",
        "rcfilters-show-new-changes": "Zobrazit nejnovější změny",
-       "rcfilters-previous-changes-label": "Dříve prohlédnuté změny",
        "rcfilters-search-placeholder": "Filtrovat nedávné změny (prohlížejte nebo začněte psát)",
        "rcfilters-invalid-filter": "Neplatný filtr",
        "rcfilters-empty-filter": "Žádné aktivní filtry. Zobrazeny jsou všechny příspěvky.",
index 6a78683..425e17f 100644 (file)
        "index-category": "Indeksowóné starnë",
        "noindex-category": "Nieindeksowóné starnë",
        "broken-file-category": "Starnë lënkùjącé do nieegzystëjących lopków",
-       "about": "Ò serwise",
+       "about": "Ò serwisu",
        "article": "Artikel",
        "newwindow": "(òtmëkô sã w nowim òknie)",
        "cancel": "Anulëje",
index d4ad69f..85449b7 100644 (file)
        "tog-shownumberswatching": "Dangos y nifer o ddefnyddwyr sy'n gwylio",
        "tog-oldsig": "Eich llofnod cyfredol:",
        "tog-fancysig": "Trin y llofnod fel testun wici (heb gyswllt wici awtomatig)",
-       "tog-uselivepreview": "Defnyddio rhagolwg byw",
+       "tog-uselivepreview": "Defnyddio rhagolwg heb ail-lwytho'r ddalen",
        "tog-forceeditsummary": "Tynnu fy sylw pan adawaf flwch crynodeb golygu yn wag",
        "tog-watchlisthideown": "Cuddio fy ngolygiadau fy hunan yn fy rhestr wylio",
        "tog-watchlisthidebots": "Cuddio golygiadau bot yn fy rhestr wylio",
        "tog-watchlisthideminor": "Cuddio golygiadau bychain rhag y rhestr wylio",
        "tog-watchlisthideliu": "Cuddio golygiadau gan ddefnyddwyr mewngofnodedig rhag y rhestr wylio",
        "tog-watchlistreloadautomatically": "Ail-lwyther y Rhestr wylio yn otomatigpan newider ffiltr (angen JavaScript)",
+       "tog-watchlistunwatchlinks": "Ychwanegwch ddolenau 'gwylio/heb eu gwylio' i'r cofnodion rydych yn eu gwylio (angen JavaScript)",
        "tog-watchlisthideanons": "Cuddio golygiadau gan ddefnyddwyr anhysbys rhag y rhestr wylio",
        "tog-watchlisthidepatrolled": "Cuddio golygiadau sydd wedi derbyn ymweliad patrôl rhag y rhestr wylio",
        "tog-watchlisthidecategorization": "Cuddiwch y categoriau",
        "title-invalid-characters": "Mae'r ddalen a geisiwch yn cynnwys symbloau na ellir eu derbyn: \"$1\".",
        "title-invalid-relative": "Mae gan y teitl lwybr perthnasol. Mae cynnwys (./, ../) yn annilys, gan eu bod yn bygro'r porwr.",
        "title-invalid-magic-tilde": "Mae'r ddalen a geisiwch yn cynnwys symbolau annilys: (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Mae teitl y ddalen a geisiwch yn rhy hir o lawer. Rhaid iddi fod yn llai na $1 {{PLURAL:$1|beit|beit}} mewn cod UTF-8.",
+       "title-invalid-too-long": "Mae teitl y ddalen a geisiwch yn rhy hir. Rhaid iddi fod yn llai na $1 {{PLURAL:$1|beit}} mewn cod UTF-8.",
        "title-invalid-leading-colon": "Mae teitl y ddalen a geisiwch yn cynnwys colon annilys, ar y dechrau.",
        "perfcached": "Mae'r wybodaeth ganlynol yn gopi cadw; mae'n bosib nad y fersiwn diweddaraf ydyw. Cedwir hyd at {{PLURAL:$1||un canlyniad yn unig|ddau ganlyniad|dri canlyniad|$1 chanlyniad|$1 canlyniad}} yn y copi cadw.",
        "perfcachedts": "Rhoddwyd y data canlynol ar gadw mewn celc a ddiweddarwyd ddiwethaf am $1. Cedwir hyd at {{PLURAL:$4||un canlyniad yn unig|ddau ganlyniad|dri canlyniad|$4 chanlyniad|$4 canlyniad}} yn y celc.",
        "protectedinterface": "Testun ar gyfer rhyngwyneb y wici yw cynnwys y dudalen hon. Clowyd y dudalen er mwyn ei diogeli. Os am gyfieithu'r neges neu ei newid ym mhob wici yn hytrach nag yn hwn yn unig, defnyddiwch [https://translatewiki.net/ translatewiki.net], y prosiect MediaWiki sy'n hyrwyddo'r gwaith cyfieithu.",
        "editinginterface": "<strong>Dalier sylw:</strong> Rydych yn golygu tudalen sy'n rhan o destun rhyngwyneb y meddalwedd. Bydd newidiadau i'r dudalen hon yn effeithio ar y rhyngwyneb a ddefnyddir ar y wici hwn yn unig.",
        "translateinterface": "I ychwanegu neu newid y cyfieithiad ar gyfer pob wici, defnyddiwch [https://translatewiki.net/ translatewiki.net], sef prosiect lleol MediaWiki.",
-       "cascadeprotected": "Diogelwyd y ddalen hon rhag ei newid, oherwydd ei bod wedi ei chynnwys yn y {{PLURAL:$1|ddalen ganlynol|ddalen ganlynol|dalennau canlynol|dalennau canlynol|dalennau canlynol|dalennau canlynol}}, a ddiogelwyd, a'r dewisiad hwn yn weithredol: $2",
+       "cascadeprotected": "Diogelwyd y ddalen hon rhag ei newid, oherwydd ei bod wedi ei chynnwys yn y {{PLURAL:$1|ddalen ganlynol|dalennau canlynol}}, a ddiogelwyd, gyda'r dewisiad hwn yn weithredol: $2",
        "namespaceprotected": "Nid oes caniatâd gennych i olygu tudalennau yn y parth '''$1'''.",
        "customcssprotected": "Nid oes caniatâd ganddoch i olygu'r dudalen CSS hon oherwydd bod gosodiadau personol defnyddiwr arall arno.",
        "customjsprotected": "Nid oes caniatâd ganddoch i olygu'r dudalen JavaScript hon oherwydd bod gosodiadau personol defnyddiwr arall arno.",
        "mypreferencesprotected": "Nid oes caniatad gennych i olygu eich dewisiadau eich hunan.",
        "ns-specialprotected": "Ni ellir golygu tudalennau arbennig.",
        "titleprotected": "Diogelwyd y teitl hwn rhag ei greu gan [[User:$1|$1]].\nRhoddwyd y rheswm hwn - <em>$2</em>.",
-       "filereadonlyerror": "Nid oes modd newid y ffeil \"$1\" oherwydd nad oes modd gwneud dim heblaw darllen storfa'r ffeil yn \"$2\" yn unig.\n\nY rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw \"''$3''\".",
+       "filereadonlyerror": "Nid oes modd newid y ffeil \"$1\" gan fod ffeil \"$2\" yn y modd 'darllen-yn-unig'.\n\nY rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw \"''$3''\".",
        "invalidtitle-knownnamespace": "Teitl annilys o'r enw \"$3\" yn y parth \"$2\"",
        "invalidtitle-unknownnamespace": "Teitl annilys ag iddi'r rhif parth anhysbys $1 a'r enw \"$2\"",
        "exception-nologin": "Nid ydych wedi mewngofnodi",
        "createacct-email-ph": "Rhowch eich cyfeiriad ebost",
        "createacct-another-email-ph": "Rhowch y cyfeiriad e-bost",
        "createaccountmail": "Defnyddio cyfrinair ar hap dros dro a'i anfon i'r cyfeiriad e-bost a roddwyd",
+       "createaccountmail-help": "Gellir creu cyfri ar gyfer person arall heb ddysgu'r cyfrinair.",
        "createacct-realname": "Enw cywir (dewisiol)",
        "createacct-reason": "Rheswm",
        "createacct-reason-ph": "Pam ydych yn creu cyfrif arall?",
        "noname": "Dydych chi ddim wedi cynnig enw defnyddiwr dilys.",
        "loginsuccesstitle": "Llwyddodd y mewngofnodi",
        "loginsuccess": "'''Yr ydych wedi mewngofnodi i {{SITENAME}} fel \"$1\".'''",
-       "nosuchuser": "Does dim defnyddiwr o'r enw \"$1\".\nMae'r rhaglen yn gwahaniaethu rhwng llythrennau bach a mawr.\nSicrhewch eich bod chi wedi sillafu'r enw'n gywir, neu [[Special:CreateAccount|crëwch gyfrif newydd]].",
+       "nosuchuser": "Does dim defnyddiwr o'r enw \"$1\".\nMae'r rhaglen yn gwahaniaethu rhwng llythrennau bach a mawr.\nGwirwch eich sillafu, neu [[Special:CreateAccount|crëwch gyfrif newydd]].",
        "nosuchusershort": "Does dim defnyddiwr o'r enw \"$1\". Gwiriwch eich sillafu.",
        "nouserspecified": "Mae'n rhaid nodi enw defnyddiwr.",
        "login-userblocked": "Mae'r defnyddiwr hwn wedi ei flocio. Ni ellir mewngofnodi.",
        "eauthentsent": "Anfonwyd e-bost o gadarnhâd at y cyfeiriad a benwyd.\nCyn y gellir anfon unrhywbeth arall at y cyfeiriad hwnnw rhaid i chi ddilyn y cyfarwyddiadau yn yr e-bost er mwyn cadarnhau mai chi sydd berchen y cyfeiriad hwnnw.",
        "throttled-mailpassword": "Anfonwyd e-bost atoch eisoes i'ch atgoffa o'ch cyfrinair, a hynny yn ystod y $1 {{PLURAL:$1|awr}} diwethaf.\nEr mwyn rhwystro camddefnydd, dim ond un e-bost i'ch atgoffa o'ch cyfrinair gaiff ei anfon bob yn $1 {{PLURAL:$1|awr}}.",
        "mailerror": "Gwall wrth ddanfon yr e-bost: $1",
-       "acct_creation_throttle_hit": "Mae ymwelwyr sy'n defnyddio'ch cyfeiriad IP wedi creu $1 {{PLURAL:$1|cyfrif|cyfrif|gyfrif|chyfrif|chyfrif|cyfrif}} yn ystod y diwrnod diwethaf, sef y mwyafswm a ganiateir mewn diwrnod.\nFelly ni chaiff defnyddwyr sy'n defnyddio'r cyfeiriad IP hwn greu rhagor o gyfrifon ar hyn o bryd.",
+       "acct_creation_throttle_hit": "Mae ymwelwyr sy'n defnyddio'ch cyfeiriad IP wedi creu $1 {{PLURAL:$1|cyfrif|cyfrif|gyfrif|chyfrif|chyfrif|cyfrif}} yn ystod y $2 diwethaf, sef yr uchafswm a ganiateir yn y cyfnod hwn.\nO ganlyniad, ni chaiff defnyddwyr sy'n defnyddio'r cyfeiriad IP hwn greu rhagor o gyfrifon ar hyn o bryd.",
        "emailauthenticated": "Cadarnhawyd eich cyfeiriad e-bost am $3 ar $2.",
        "emailnotauthenticated": "Nid yw eich cyfeiriad e-bost wedi'i gadarnhau eto. Ni fydd unrhyw negeseuon e-bost yn cael eu hanfon atoch ar gyfer y nodweddion canlynol.",
        "noemailprefs": "Mae'n rhaid i chi gynnig cyfeiriad e-bost er mwyn i'r nodweddion hyn weithio.",
        "createaccount-title": "Creu cyfrif ar {{SITENAME}}",
        "createaccount-text": "Creodd rhywun gyfrif o'r enw $2 ar {{SITENAME}} ($4) ar gyfer y cyfeiriad e-bost hwn. \"$3\" yw'r cyfrinair ar gyfer \"$2\". Dylech fewngofnodi a newid eich cyfrinair yn syth.\n\nRhydd ichi anwybyddu'r neges hon os mai camgymeriad oedd creu'r cyfrif.",
        "login-throttled": "Rydych wedi ceisio mewngofnodi gormod o weithiau ar ben ei gilydd.\nOedwch $1 cyn mentro eto.",
-       "login-abort-generic": "Ni lwyddodd y mewngofnodi - Rhoddwyd y gorau iddo",
+       "login-abort-generic": "Ni lwyddodd y mewngofnodi",
        "login-migrated-generic": "Trosglwyddwyd eich cyfrif ac nid yw eich enw defnyddiwr bellach yn bodoli ar y wici hwn.",
        "loginlanguagelabel": "Iaith: $1",
        "suspicious-userlogout": "Gwrthodwyd eich cais i allgofnodi oherwydd ei fod yn ymddangos mai gweinydd wedi torri neu ddirprwy gelc a anfonodd y cais.",
        "permissionserrorstext": "Nid yw'r gallu ganddoch i weithredu yn yr achos yma, am y {{PLURAL:$1|rheswm|rheswm|rhesymau|rhesymau|rhesymau|rhesymau}} canlynol:",
        "permissionserrorstext-withaction": "Nid yw'r gallu hwn ($2) ganddoch, am y {{PLURAL:$1|rheswm|rheswm|rhesymau|rhesymau|rhesymau|rhesymau}} canlynol:",
        "recreate-moveddeleted-warn": "'''Dalier sylw: Rydych yn ail-greu tudalen a ddilewyd rhywdro.'''\n\nYstyriwch a fyddai'n dda o beth i barhau i olygu'r dudalen hon.\nDyma'r logiau dileu a symud ar gyfer y dudalen, er gwybodaeth:",
-       "moveddeleted-notice": "Dilëwyd y dudalen hon.\nDangosir y logiau dileu a symud ar gyfer y dudalen isod.",
+       "moveddeleted-notice": "Dilëwyd y ddalen hon.\nDangosir y logiau dileu, cloi a symud ar gyfer y ddalen isod.",
        "moveddeleted-notice-recent": "Ymddiheurwn! Dilewyd y ddalen hon yn ddiweddar (yn y 24 awr diwethaf).\nEr gwybodaeth, darperir isod yr holl wybodaeth berthnasol.",
        "log-fulllog": "Gweld y lòg cyflawn",
        "edit-hook-aborted": "Terfynwyd y golygiad cyn pryd gan fachyn.\nNi roddodd eglurhad.",
        "page_last": "olaf",
        "histlegend": "Cymharu dau fersiwn: marciwch y cylchoedd ar y ddau fersiwn i'w cymharu, yna pwyswch ar 'return' neu'r botwm 'Cymharer y fersiynau dewisedig'.<br />\nEglurhad: '''({{int:cur}})''' = gwahaniaethau rhyngddo a'r fersiwn cyfredol,\n'''({{int:last}})''' = gwahaniaethau rhyngddo a'r fersiwn cynt, '''({{int:minoreditletter}})''' = golygiad bychan",
        "history-fieldset-title": "Chwilio drwy'r hanes",
-       "history-show-deleted": "Y rhai a ddilëwyd yn unig",
+       "history-show-deleted": "Yr ddalen a adolygwyd yn unig a ddilëwyd",
        "histfirst": "cynharaf",
        "histlast": "diweddaraf",
        "historysize": "({{PLURAL:$1|$1 beit|$1 beit|$1 feit|$1 beit|$1 beit|$1 beit}})",
        "search-file-match": "(yn cyfateb i gynnwys y ffeil)",
        "search-suggest": "Ai am hyn y chwiliwch: $1",
        "search-rewritten": "Dangosir canlyniadauar gyfer $1. Chwiliwch am $2.",
-       "search-interwiki-caption": "Chwaer-brosiectau",
+       "search-interwiki-caption": "Canlyniadau o chhwaer-brosiectau",
        "search-interwiki-default": "Y canlyniadau o $1:",
        "search-interwiki-more": "(rhagor)",
        "search-interwiki-more-results": "rhagor o ganlyniadau",
        "prefs-editwatchlist-clear": "Clirio eich rhestr wylio",
        "prefs-watchlist-days": "Nifer y diwrnodau i'w dangos yn y rhestr wylio:",
        "prefs-watchlist-days-max": "Hyd at $1 {{PLURAL:$1||diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}}",
-       "prefs-watchlist-edits": "Nifer y golygiadau i'w dangos wrth ehangu'r rhestr wylio:",
+       "prefs-watchlist-edits": "Uchafswm nifer y golygiadau i'w dangos yn eich rhestr wylio:",
        "prefs-watchlist-edits-max": "Hyd at uchafswm o 1000",
        "prefs-watchlist-token": "Tocyn y rhestr wylio:",
        "prefs-misc": "Amrywiol",
        "prefs-help-prefershttps": "Bydd y dewis yma'n cael ei roi ar waith y tro nesaf i chi fewngofnodi.",
        "prefswarning-warning": "Rydych wedi newid eich Dewisiadau, ac nid ydynt eto wedi'u cadw.\nOs gadewch y dudalen hon heb glicio \"$1\" yna fe gollwch y newidiadau hyn.",
        "prefs-tabs-navigation-hint": "Awgrym: Gallwch ddefnyddio'r allweddellau sy'n saethau i'r chwith neu i'r dde i lywio rhwng y tabiau ar restr y tabiau.",
-       "userrights": "Rheoli galluoedd defnyddwyr",
+       "userrights": "Galluoedd defnyddwyr",
        "userrights-lookup-user": "Dewisiwch ddefnyddiwr",
        "userrights-user-editname": "Rhowch enw defnyddiwr:",
        "editusergroup": "Golygu grwpiau defnyddwyr",
        "saveusergroups": "Cadw'r Grwpiau {{GENDER:$1|Defnyddwyr}}",
        "userrights-groupsmember": "Yn aelod o:",
        "userrights-groupsmember-auto": "Ac ynghlwm wrth aelodaeth y grwpiau uchod, yn aelod o:",
-       "userrights-groups-help": "Gallwch newid y grwpiau y perthyn y defnyddiwr hwn iddynt:\n* Mae defnyddiwr yn perthyn i grŵp pan mae tic yn y bocs.\n* Nid yw defnyddiwr yn perthyn i grŵp pan nad oes tic yn y bocs.\n* Mae * yn golygu na fyddwch yn gallu dad-wneud unrhyw newid yn y grŵp hwnnw.",
+       "userrights-groups-help": "Gallwch newid y grwpiau y perthyn y defnyddiwr hwn iddynt:\n* Mae defnyddiwr yn perthyn i grŵp pan mae tic yn y bocs.\n* Nid yw defnyddiwr yn perthyn i grŵp pan nad oes tic yn y bocs.\n* Mae * yn golygu na fyddwch yn gallu dad-wneud unrhyw newid yn y grŵp hwnnw.\n* Mae # yn golygu mai yn ôl yn unig y medrwch chi droi'r cyfnod y daw'r grwp i ben, nid ymlaen.",
        "userrights-reason": "Rheswm:",
        "userrights-no-interwiki": "Nid yw'r gallu ganddoch i newid galluoedd defnyddwyr ar wicïau eraill.",
        "userrights-nodatabase": "Nid yw'r bas data $1 yn bod neu nid yw'n un lleol.",
        "userrights-expiry-existing": "Amser dod i ben: $3, $2",
        "userrights-expiry-othertime": "Cyfnod arall:",
        "userrights-expiry-options": "1 dydd:1 day,1 wythnos:1 week,1 mis:1 month,3 mis:3 months,6 mis:6 months,1 blynedd:1 year",
+       "userrights-invalid-expiry": "Mae terfyn amser y grwp \"$1\" yn annilys.",
        "userrights-conflict": "Gwrthdaro oherwydd newid i hawliau defnyddiwr! Adolygwch eich newidiadau a'u cadarnhau.",
        "group": "Grŵp:",
        "group-user": "Defnyddwyr",
        "grant-group-email": "Danfon ebost",
        "grant-group-customization": "Eich dewisiadau chi",
        "grant-group-administration": "Rhoi materion gweinyddol ar waith",
+       "grant-group-private-information": "Edrychwch ar ddata preifat amdanoch",
+       "grant-group-other": "Gweithgaredd amrywiol",
        "grant-blockusers": "Blociwch a dadflociwch defnyddwyr",
        "grant-createaccount": "Crewch gyfri",
        "grant-createeditmovepage": "Creu, golygu a symud dalennau",
        "grant-highvolume": "Golygu nifer ar yr un pryd",
        "grant-oversight": "Cuddiwch y defnyddwyr a'u golygiadau",
        "grant-patrol": "Newidiadau patrol y dalennau",
+       "grant-privateinfo": "Edrychwch ar wybodaeth preifat",
        "grant-protect": "Cloi a datgloi dalennau",
        "grant-rollback": "Dadwneud newidiadau dalennau",
        "grant-sendemail": "Danfonwch ebost i ddefnyddwyr",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Dangos",
+       "rcfilters-legend-heading": "<strong>Rhestr o fyrfoddau:</strong>",
+       "rcfilters-other-review-tools": "<strong>Teclynau adolygu eraill</strong>",
+       "rcfilters-group-results-by-page": "Canlyniadau'r grwp bob yn ddalen",
+       "rcfilters-grouping-title": "Grwpio",
        "rcfilters-activefilters": "Hidlau sydd ar waith",
+       "rcfilters-advancedfilters": "Ffiltrau ychwanegol",
+       "rcfilters-limit-title": "Newidiadau a ddangosir",
+       "rcfilters-limit-shownum": "Dangos y {{PLURAL:$1|newid}}",
+       "rcfilters-days-title": "Dyddiau diweddar",
+       "rcfilters-hours-title": "Oriau diweddar",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|diwrnod}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|awr}}",
+       "rcfilters-quickfilters": "Ffiltrau a arbedwyd",
+       "rcfilters-quickfilters-placeholder-title": "Dim dolenni wedi'u cadw hyd yma",
+       "rcfilters-savedqueries-defaultlabel": "Ffiltrau a arbedwyd",
+       "rcfilters-savedqueries-rename": "Ailenwi",
+       "rcfilters-savedqueries-setdefault": "Gosod yn ddiofyn (''Set as default'')",
+       "rcfilters-savedqueries-unsetdefault": "Diddymu fel gweithred ddiofyn (''Remove as default'')",
+       "rcfilters-savedqueries-remove": "Cael gwared",
+       "rcfilters-savedqueries-new-name-label": "Enw",
+       "rcfilters-savedqueries-new-name-placeholder": "Disgrifiwch bwrpas y ffiltr",
+       "rcfilters-savedqueries-apply-label": "Crewch ffiltr",
        "rcfilters-restore-default-filters": "Ailosodwch y ffiltrau di-ofyn",
        "rcfilters-clear-all-filters": "Cliriwch yr holl hidlau (ffiltrau)",
        "rcfilters-search-placeholder": "Ffiltrwch y newidiadau diweddaraf",
        "rcfilters-highlightmenu-title": "Dewisiwch liw",
        "rcfilters-highlightmenu-help": "Dewisiwch liw sy'n cyd-fynd gyda'r nodwedd hon",
        "rcfilters-filterlist-noresults": "Dim hidl ar gael",
-       "rcfilters-filter-editsbyself-label": "Eich golygiadau chi",
-       "rcfilters-filter-editsbyself-description": "Golygiadau gennych chi.",
-       "rcfilters-filter-editsbyother-label": "Golygiadau gan eraill",
-       "rcfilters-filter-editsbyother-description": "Golygiadau a grewyd gan eraill (nid gennych chi).",
-       "rcfilters-filtergroup-userExpLevel": "Lefel profiad (defnyddwyr cofrestredig yn unig)",
-       "rcfilters-filter-user-experience-level-registered-label": "Cofrestr",
+       "rcfilters-filter-editsbyself-label": "Eich newidiadau chi",
+       "rcfilters-filter-editsbyself-description": "Eich cyfraniadau chi.",
+       "rcfilters-filter-editsbyother-label": "Newidiadau gan eraill",
+       "rcfilters-filter-editsbyother-description": "Pob golygiad ond nid gennych chi.",
+       "rcfilters-filtergroup-userExpLevel": "Cofrestriad y Defnyddiwr a'i brofiad",
+       "rcfilters-filter-user-experience-level-registered-label": "Cofrestrwyd",
        "rcfilters-filter-user-experience-level-registered-description": "Golygyddion sydd wedi mewngofnodi.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Heb gofrestru",
        "rcfilters-filter-user-experience-level-unregistered-description": "Golygyddion nad ydynt wedi cofrestru.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Newydd-ddyfodiaid",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Defnyddwyr cofrestredig gyda llai na 10 golygiad a 4 diwrnod o weithgaredd.",
+       "rcfilters-filter-user-experience-level-learner-label": "Dysgwyr",
+       "rcfilters-filter-user-experience-level-learner-description": "Defnyddwyr cofrestredig ble mae eu profiad yn syrthio rhwng \"Newydd-ddyfodiaid\" a \"Defnyddwyr profiadol.\"",
+       "rcfilters-filter-user-experience-level-experienced-label": "Defnyddwyr profiadol",
+       "rcfilters-filter-user-experience-level-experienced-description": "Defnyddwyr profiadol gyda mwy na 500 golygiad a 30 diwrnod o weithgaredd.",
+       "rcfilters-filtergroup-automated": "Cyfraniadau otomatig",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Golygiaidau a wnaed gyda theclynnau otomatig.",
+       "rcfilters-filter-humans-label": "Dynol (nid bot)",
+       "rcfilters-filter-humans-description": "Golygiadau a wnaed gan olygyddion go-iawn.",
+       "rcfilters-filtergroup-reviewstatus": "Statws adolygu",
        "rcfilters-filter-patrolled-label": "Wedi derbyn patrol",
        "rcfilters-filter-patrolled-description": "Marciwyd y golygiadau fel rhai sydd wedi derbyn patrol.",
+       "rcfilters-filter-unpatrolled-label": "Heb ei gadarnhau (''Unpatrolled'')",
        "rcfilters-filter-unpatrolled-description": "Ni farciwyd y golygiadau fel rhai sydd wedi derbyn patrol.",
+       "rcfilters-filtergroup-significance": "Arwyddocaol",
+       "rcfilters-filter-minor-label": "Golygiadau bach",
+       "rcfilters-filter-minor-description": "Golygiadau a nodwyd gan y golygydd fel rhai bach.",
+       "rcfilters-filter-major-label": "Golygiadau nad ydynt yn rhai bach",
+       "rcfilters-filter-major-description": "Golygiadau nad ydynt yn rhai bach.",
+       "rcfilters-filtergroup-watchlist": "Dalennau sy'n cael eu gwylio",
+       "rcfilters-filter-watchlist-watched-label": "Ar y Rhestr Wylio",
+       "rcfilters-filter-watchlist-watched-description": "Newidiadau i'r dalennau yn eich Rhestr Wylio.",
+       "rcfilters-filter-watchlist-watchednew-label": "Newidiadau newydd i'ch Rhestr Wylio",
+       "rcfilters-filter-watchlist-notwatched-label": "Heb fod yn eich Rhestr Wylio",
+       "rcfilters-filter-watchlist-notwatched-description": "Popeth ar wahan i'r newidiadau i'ch Rhestr Wylio.",
+       "rcfilters-filtergroup-changetype": "Math o newid",
+       "rcfilters-filter-pageedits-label": "Golygiadau i'r ddalen",
+       "rcfilters-filter-pageedits-description": "Golygiadau i gynnwys wici, y sgyrsiau, categoriau...",
+       "rcfilters-filter-newpages-label": "Dalennau a grewyd",
+       "rcfilters-filter-newpages-description": "Golygiadau creu dalennau",
+       "rcfilters-filter-categorization-label": "Newidiadau i'r Categoriau",
+       "rcfilters-filter-categorization-description": "Cofnodion y dalennau a ychwanegwyd neu a symudwyd o'r categoriau.",
+       "rcfilters-filter-logactions-label": "Gweithredoedd a logiwyd",
+       "rcfilters-filtergroup-lastRevision": "Yr adolygiadau diweddaraf",
+       "rcfilters-filter-lastrevision-label": "Yr adolygiad diweddaraf",
+       "rcfilters-filter-lastrevision-description": "Dim ond yn newidiadau diweddaraf i'r ddalen.",
+       "rcfilters-filter-previousrevision-label": "Nid yr adolygiad diweddaraf",
+       "rcfilters-filter-previousrevision-description": "Pob newid nad ydynt yn yr \"adolygiad diweddaraf\".",
+       "rcfilters-filter-excluded": "Eithriadau",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:nid</strong> $1",
+       "rcfilters-liveupdates-button": "Diweddariadau, byw (''Live updates'')",
+       "rcfilters-liveupdates-button-title-on": "Diffod y 'Diweddariadau, byw'",
+       "rcfilters-liveupdates-button-title-off": "Arddangos newidiadau wrth iddynt ddigwydd",
        "rcnotefrom": "Isod rhestrir pob newid er <strong>$3, $4</strong> (ymddengys <strong>$1</strong> ohonynt).",
+       "rclistfromreset": "Ailosod dyddiad yr hyn rydych wedi'i ddewis",
        "rclistfrom": "Dangos newidiadau newydd, gan ddechrau ers $3 $2",
        "rcshowhideminor": "$1 golygiadau bychain",
        "rcshowhideminor-show": "Dangoser",
        "rcshowhidecategorization": "Categoreiddio tudalen $1",
        "rcshowhidecategorization-show": "Dangos",
        "rcshowhidecategorization-hide": "Cuddio",
-       "rclinks": "Dangos y $1 newid diweddaraf yn ystod y(r) $2 diwrnod diwethaf",
+       "rclinks": "Dangos y $1 newid diweddaraf yn y $2 diwrnod diwethaf",
        "diff": "gwahan",
        "hist": "hanes",
        "hide": "Cuddier",
        "recentchangeslinked-page": "Tudalen:",
        "recentchangeslinked-to": "Dangos newidiadau i'r tudalennau â chyswllt arnynt sy'n arwain at y dudalen a enwir",
        "recentchanges-page-added-to-category": "Ychwanegwyd [[:$1]] at y categori",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] ac [[Special:WhatLinksHere/$1|{{PLURAL:$2|un ddalen|$2 dalen}}]] wedi'u hychwanegu at y categori",
+       "recentchanges-page-added-to-category-bundled": "ychwanegwyd [[:$1]] i'r categori, ac mae'r [[Special:WhatLinksHere/$1|ddalen hon o fewn dalennau eraill}}]]",
        "recentchanges-page-removed-from-category": "Symudwyd [[:$1]] o'r categori",
        "upload": "Uwchlwytho ffeil",
        "uploadbtn": "Uwchlwytho ffeil",
        "apihelp-no-such-module": "Ni chafwyd hyd i fodiwl \"$1\".",
        "apisandbox": "Pwll tywod API",
        "apisandbox-fullscreen": "Ehangu'r panel",
+       "apisandbox-fullscreen-tooltip": "Engangu'r blwch tywod i lenwi ffenest y porwr",
        "apisandbox-unfullscreen": "Dangos y ddalen",
+       "apisandbox-unfullscreen-tooltip": "Lleihau'r blwch tywod, er mwyn gweld y dolennau fforio (''navigation links'')",
        "apisandbox-submit": "Gwnewch gais",
        "apisandbox-reset": "Clirio",
        "apisandbox-retry": "Ailgeisio",
        "apisandbox-helpurls": "Dolennau cymorth",
        "apisandbox-examples": "Engreifftiau",
+       "apisandbox-dynamic-parameters": "Paramedrau ychwanegol",
+       "apisandbox-dynamic-parameters-add-label": "Ychwanegu paramedrau",
+       "apisandbox-dynamic-parameters-add-placeholder": "Enw'r paramedr",
        "apisandbox-results": "Canlyniadau",
        "apisandbox-continue": "Parhau",
        "apisandbox-continue-clear": "Clirio",
        "emailccsubject": "Copi o'ch neges at $1: $2",
        "emailsent": "Neges e-bost wedi'i hanfon",
        "emailsenttext": "Mae eich neges e-bost wedi cael ei hanfon.",
-       "emailuserfooter": "Danfonwyd yr ebost {{GENDER:$1|hwn}} gan $1 i {{GENDER:$2|$2}} drwy \"{{int:emailuser}}\" ar {{SITENAME}}.",
+       "emailuserfooter": "Danfonwyd yr ebost {{GENDER:$1|hwn}} gan $1 i {{GENDER:$2|$2}} drwy \"{{int:emailuser}}\" ar {{SITENAME}}. Os ydych {{GENDER:$2|chi'n}} ateb yr ebost hwn, yna bydd {{GENDER:$2|eich}} ebost yn cael ei danfon yn uniongyrchol i'r  {{GENDER:$1|danfonwr gwreiddiol}}, ac felly'n datgelu {{GENDER:$2|eich}} cyfeiriad ebost {{GENDER:$1|iddyn nhw}}.",
        "usermessage-summary": "Yn gadael neges am ddigwyddiad yn y sustem.",
        "usermessage-editor": "Golygydd neges y system",
        "watchlist": "Rhestr wylio",
        "watchnologin": "Nid ydych wedi mewngofnodi",
        "addwatch": "Ychwanegu at y rhestr wylio",
        "addedwatchtext": "Mae \"[[:$1]]\"  a'i dudalen Sgwrs wedi cael eu hychwanegu at eich [[Special:Watchlist|rhestr wylio]].",
+       "addedwatchtext-talk": "Mae \"[[:$1]]\" wedi'i ychwanegu i'ch [[Special:Watchlist|Rhestr Wylio]].",
        "addedwatchtext-short": "Mae'r dudalen \"$1\"  wedi'i hychwanegu i'ch rhestr wylio.",
        "removewatch": "Tynnu oddi ar eich rhestr wylio",
        "removedwatchtext": "Mae'r dudalen \"[[:$1]]\" a'i thudalen Sgwrs wedi'u tynnu oddi ar [[Special:Watchlist|eich rhestr wylio]].",
+       "removedwatchtext-talk": "Mae \"[[:$1]]\" wedi'i ddileu o'ch  [[Special:Watchlist|Rhestr Wylio]].",
        "removedwatchtext-short": "Mae'r dudalen \"$1\" wedi'i thynnu o'ch tudalen wylio.",
        "watch": "Gwylio",
        "watchthispage": "Gwylier y dudalen hon",
        "wlshowlast": "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r newidiadau.",
        "watchlist-hide": "Cuddio",
        "watchlist-submit": "Dangos",
-       "wlshowtime": "Dangos y diwethaf:",
+       "wlshowtime": "Dangos y cyfnod:",
        "wlshowhideminor": "golygiadau bychan",
        "wlshowhidebots": "botiau",
        "wlshowhideliu": "defnyddwyr cofrestredig",
        "wlshowhideanons": "defnyddwyr heb gofnodi",
        "wlshowhidepatr": "golygiadau sydd wedi derbyn patrol",
        "wlshowhidemine": "fy ngolygiadau",
+       "wlshowhidecategorization": "categori'r ddalen",
        "watchlist-options": "Dewisiadau ar gyfer y rhestr wylio",
        "watching": "Wrthi'n ychwanegu...",
        "unwatching": "Wrthi'n tynnu...",
        "enotif_body_intro_restored": "Adferwyd y dudalen $1 ar {{SITENAME}} ar $PAGEEDITDATE gan {{gender:$2|$2}}. Gweler y diwygiad cyfredol ohoni ar $3.",
        "enotif_body_intro_changed": "Newidiwyd y dudalen $1 ar {{SITENAME}} ar $PAGEEDITDATE gan {{gender:$2|$2}}. Gweler y diwygiad cyfredol ohoni ar $3.",
        "enotif_lastvisited": "Gwelwch $1 am bob newid ers eich ymweliad blaenorol.",
-       "enotif_lastdiff": "Gallwch weld y newid ar $1.",
+       "enotif_lastdiff": "Gallwch weld y newid ar $1",
        "enotif_anon_editor": "defnyddiwr anhysbys $1",
        "enotif_body": "Annwyl $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nCrynodeb y golygydd: $PAGESUMMARY $PAGEMINOREDIT\n\nCysylltu â'r golygydd:\ne-bost: $PAGEEDITOR_EMAIL\nwici: $PAGEEDITOR_WIKI\n\nOs bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi tra eich bod wedi mewngofnodi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.\n\n             Sustem hysbysu {{SITENAME}}\n\n--\nI newid eich gosodiadau negeseuon hysbysu, ewch i \n{{canonicalurl:{{#special:Preferences}}}}\n\nI newid eich gosodiadau gwylio, ewch i\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nI dynnu'r dudalen oddi ar eich rhestr wylio, ewch i\n$UNWATCHURL\n\nAm fwy o gymorth ac adborth:\n$HELPPAGE",
+       "enotif_minoredit": "Golygiad bach yw hwn",
        "created": "crëwyd",
        "changed":