Merge "Handle null data return in HTMLForm"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 26 Apr 2016 14:37:17 +0000 (14:37 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 26 Apr 2016 14:37:17 +0000 (14:37 +0000)
108 files changed:
Gemfile
Gemfile.lock
Rakefile
autoload.php
docs/extension.schema.json
includes/DefaultSettings.php
includes/EventRelayerGroup.php
includes/LinkTarget.php [deleted file]
includes/Linker.php
includes/MediaWikiServices.php
includes/Revision.php
includes/ServiceWiring.php
includes/Setup.php
includes/Title.php
includes/WatchedItem.php
includes/WatchedItemStore.php
includes/api/ApiQueryInfo.php
includes/api/i18n/es.json
includes/api/i18n/fi.json
includes/api/i18n/hsn.json [new file with mode: 0644]
includes/api/i18n/ur.json [new file with mode: 0644]
includes/cache/LinkBatch.php
includes/db/DatabaseMssql.php
includes/debug/MWDebug.php
includes/deferred/CdnCacheUpdate.php
includes/htmlform/HTMLCheckField.php
includes/htmlform/HTMLForm.php
includes/htmlform/OOUIHTMLForm.php
includes/htmlform/VFormHTMLForm.php
includes/installer/i18n/hsn.json [new file with mode: 0644]
includes/libs/eventrelayer/EventRelayer.php
includes/libs/eventrelayer/EventRelayerKafka.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/MultiWriteBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/linker/LinkTarget.php [new file with mode: 0644]
includes/logging/RightsLogFormatter.php
includes/mail/EmailNotification.php
includes/objectcache/ObjectCache.php
includes/parser/Parser.php
includes/registration/ExtensionProcessor.php
includes/specialpage/SpecialPage.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExport.php
includes/specials/SpecialSearch.php [changed mode: 0755->0644]
includes/specials/SpecialUpload.php
includes/specials/pagers/ImageListPager.php
includes/title/MediaWikiPageLinkRenderer.php
includes/title/MediaWikiTitleCodec.php
includes/title/PageLinkRenderer.php
includes/title/TitleFormatter.php
includes/title/TitleValue.php
includes/user/User.php
languages/data/Names.php
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/cs.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/inh.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/lb.json
languages/i18n/lt.json
languages/i18n/lzh.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/pl.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ru.json
languages/i18n/sa.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/war.json
languages/i18n/zh-hans.json
maintenance/namespaceDupes.php
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki/ForeignApi.js
resources/src/mediawiki/api.js
tests/browser/ci.yml [new file with mode: 0644]
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/WatchedItemStoreUnitTest.php
tests/phpunit/includes/WatchedItemUnitTest.php
tests/phpunit/includes/libs/objectcache/BagOStuffTest.php
tests/phpunit/includes/title/TitleValueTest.php

diff --git a/Gemfile b/Gemfile
index 636d4ee..fa3a025 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -1,4 +1,5 @@
 source 'https://rubygems.org'
 
-gem 'mediawiki_selenium', '~> 1.6.5'
+gem 'mediawiki_selenium', '~> 1.7'
+gem 'rake', '~> 11.1', '>= 11.1.1'
 gem 'rubocop', '~> 0.32.1', require: false
index 8684be9..2bbabd1 100644 (file)
@@ -17,9 +17,9 @@ GEM
       faker (>= 1.1.2)
       yml_reader (>= 0.6)
     diff-lcs (1.2.5)
-    domain_name (0.5.20160128)
+    domain_name (0.5.20160310)
       unf (>= 0.0.5, < 1.0.0)
-    faker (1.6.1)
+    faker (1.6.3)
       i18n (~> 0.5)
     faraday (0.9.2)
       multipart-post (>= 1.2, < 3)
@@ -29,7 +29,7 @@ GEM
     ffi (1.9.10)
     gherkin (2.12.2)
       multi_json (~> 1.3)
-    headless (2.2.0)
+    headless (2.2.3)
     http-cookie (1.0.2)
       domain_name (~> 0.5)
     i18n (0.7.0)
@@ -37,7 +37,7 @@ GEM
     mediawiki_api (0.5.0)
       faraday (~> 0.9, >= 0.9.0)
       faraday-cookie_jar (~> 0.0, >= 0.0.6)
-    mediawiki_selenium (1.6.5)
+    mediawiki_selenium (1.7.0)
       cucumber (~> 1.3, >= 1.3.20)
       headless (~> 2.0, >= 2.1.0)
       json (~> 1.8, >= 1.8.1)
@@ -48,8 +48,8 @@ GEM
       rspec-expectations (~> 2.14, >= 2.14.4)
       syntax (~> 1.2, >= 1.2.0)
       thor (~> 0.19, >= 0.19.1)
-    mime-types (2.99)
-    multi_json (1.11.2)
+    mime-types (2.99.1)
+    multi_json (1.11.3)
     multi_test (0.1.2)
     multipart-post (2.0.0)
     netrc (0.11.0)
@@ -63,6 +63,7 @@ GEM
       ast (>= 1.1, < 3.0)
     powerpack (0.1.1)
     rainbow (2.0.0)
+    rake (11.1.1)
     rest-client (1.8.0)
       http-cookie (>= 1.0.2, < 2.0)
       mime-types (>= 1.16, < 3.0)
@@ -77,25 +78,28 @@ GEM
       rainbow (>= 1.99.1, < 3.0)
       ruby-progressbar (~> 1.4)
     ruby-progressbar (1.7.5)
-    rubyzip (1.1.7)
-    selenium-webdriver (2.50.0)
+    rubyzip (1.2.0)
+    selenium-webdriver (2.53.0)
       childprocess (~> 0.5)
-      multi_json (~> 1.0)
       rubyzip (~> 1.0)
       websocket (~> 1.0)
     syntax (1.2.0)
     thor (0.19.1)
     unf (0.1.4)
       unf_ext
-    unf_ext (0.0.7.1)
+    unf_ext (0.0.7.2)
     watir-webdriver (0.9.1)
       selenium-webdriver (>= 2.46.2)
-    websocket (1.2.2)
+    websocket (1.2.3)
     yml_reader (0.7)
 
 PLATFORMS
   ruby
 
 DEPENDENCIES
-  mediawiki_selenium (~> 1.6.5)
+  mediawiki_selenium (~> 1.7)
+  rake (~> 11.1, >= 11.1.1)
   rubocop (~> 0.32.1)
+
+BUNDLED WITH
+   1.10.6
index 6eef121..59f5480 100644 (file)
--- a/Rakefile
+++ b/Rakefile
@@ -8,6 +8,9 @@ RuboCop::RakeTask.new(:rubocop) do |task|
   task.options = ['-c', '.rubocop.yml']
 end
 
+require 'mediawiki_selenium/rake_task'
+MediawikiSelenium::RakeTask.new(site_tag: false)
+
 task default: [:test]
 
 desc 'Run all build/tests commands (CI entry point)'
index d3b7ba7..9b155bb 100644 (file)
@@ -697,7 +697,6 @@ $wgAutoloadLocalClasses = [
        'LinkFilter' => __DIR__ . '/includes/LinkFilter.php',
        'LinkHolderArray' => __DIR__ . '/includes/parser/LinkHolderArray.php',
        'LinkSearchPage' => __DIR__ . '/includes/specials/SpecialLinkSearch.php',
-       'LinkTarget' => __DIR__ . '/includes/LinkTarget.php',
        'Linker' => __DIR__ . '/includes/Linker.php',
        'LinksDeletionUpdate' => __DIR__ . '/includes/deferred/LinksDeletionUpdate.php',
        'LinksUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php',
@@ -780,6 +779,7 @@ $wgAutoloadLocalClasses = [
        'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
        'MediaWiki\\Languages\\Data\\Names' => __DIR__ . '/languages/data/Names.php',
        'MediaWiki\\Languages\\Data\\ZhConversion' => __DIR__ . '/languages/data/ZhConversion.php',
+       'MediaWiki\\Linker\\LinkTarget' => __DIR__ . '/includes/linker/LinkTarget.php',
        'MediaWiki\\Logger\\LegacyLogger' => __DIR__ . '/includes/debug/logger/LegacyLogger.php',
        'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
        'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
index 370e18e..f1decd3 100644 (file)
                                                                },
                                                                "skipFunction": {
                                                                        "type": "string",
-                                                                       "description": "Modules that provide fallback functionality can provide a \"skip function\". This function, if provided, will be passed along to the module registry on the client. When this module is loaded (either directly or as a dependency of another module), then this function is executed first. If the function returns true, the module will instantly be considered \"ready\" without requesting the associated module resources. The value returned here must be valid javascript for execution in a private function. It must not contain the \"function () {\" and \"}\" wrapper though."
+                                                                       "description": "Path to a file containing a JavaScript \"skip function\", if desired."
                                                                },
                                                                "scripts": {
                                                                        "type": ["string", "array"],
                "FilterLogTypes": {
                        "type": "object"
                },
+               "ActionFilteredLogs": {
+                       "type": "object",
+                       "description": "List of log types which can be filtered by log actions",
+                       "patternProperties": {
+                               "^[a-z-]+$": {
+                                       "type": "object",
+                                       "patternProperties": {
+                                               "^[a-z-]+$": {
+                                                       "type": "array",
+                                                       "items": {
+                                                               "type": "string"
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               },
                "LogNames": {
                        "type": "object"
                },
index 08084f4..ccfb10a 100644 (file)
@@ -2169,7 +2169,7 @@ $wgLanguageConverterCacheType = CACHE_ANYTHING;
  * given, giving a callable function which will generate a suitable cache object.
  */
 $wgObjectCaches = [
-       CACHE_NONE => [ 'class' => 'EmptyBagOStuff' ],
+       CACHE_NONE => [ 'class' => 'EmptyBagOStuff', 'reportDupes' => false ],
        CACHE_DB => [ 'class' => 'SqlBagOStuff', 'loggroup' => 'SQLBagOStuff' ],
 
        CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
@@ -2189,12 +2189,12 @@ $wgObjectCaches = [
                'loggroup'  => 'SQLBagOStuff'
        ],
 
-       'apc' => [ 'class' => 'APCBagOStuff' ],
-       'xcache' => [ 'class' => 'XCacheBagOStuff' ],
-       'wincache' => [ 'class' => 'WinCacheBagOStuff' ],
+       'apc' => [ 'class' => 'APCBagOStuff', 'reportDupes' => false ],
+       'xcache' => [ 'class' => 'XCacheBagOStuff', 'reportDupes' => false ],
+       'wincache' => [ 'class' => 'WinCacheBagOStuff', 'reportDupes' => false ],
        'memcached-php' => [ 'class' => 'MemcachedPhpBagOStuff', 'loggroup' => 'memcached' ],
        'memcached-pecl' => [ 'class' => 'MemcachedPeclBagOStuff', 'loggroup' => 'memcached' ],
-       'hash' => [ 'class' => 'HashBagOStuff' ],
+       'hash' => [ 'class' => 'HashBagOStuff', 'reportDupes' => false ],
 ];
 
 /**
@@ -2223,27 +2223,24 @@ $wgMainWANCache = false;
  *
  * The format is an associative array where the key is a cache identifier, and
  * the value is an associative array of parameters. The "cacheId" parameter is
- * a cache identifier from $wgObjectCaches. The "relayerConfig" parameter is an
- * array used to construct an EventRelayer object. The "pool" parameter is a
- * string that is used as a PubSub channel prefix. The "loggroup" parameter
- * controls where log events are sent.
+ * a cache identifier from $wgObjectCaches. The "channels" parameter is a map of
+ * actions ('purge') to PubSub channels defined in $wgEventRelayerConfig.
+ * The "loggroup" parameter controls where log events are sent.
  *
  * @since 1.26
  */
 $wgWANObjectCaches = [
        CACHE_NONE => [
-               'class'         => 'WANObjectCache',
-               'cacheId'       => CACHE_NONE,
-               'pool'          => 'mediawiki-main-none',
-               'relayerConfig' => [ 'class' => 'EventRelayerNull' ]
+               'class'    => 'WANObjectCache',
+               'cacheId'  => CACHE_NONE,
+               'channels' => []
        ]
        /* Example of a simple single data-center cache:
-       'memcached-php' => array(
-               'class'         => 'WANObjectCache',
-               'cacheId'       => 'memcached-php',
-               'pool'          => 'mediawiki-main-memcached',
-               'relayerConfig' => array( 'class' => 'EventRelayerNull' )
-       )
+       'memcached-php' => [
+               'class'    => 'WANObjectCache',
+               'cacheId'  => 'memcached-php',
+               'channels' => [ 'purge' => 'wancache-main-memcached-purge' ]
+       ]
        */
 ];
 
@@ -8060,7 +8057,7 @@ $wgPopularPasswordFile = __DIR__ . '/../serialized/commonpasswords.cdb';
 $wgMaxUserDBWriteDuration = false;
 
 /**
- * Mapping of event channels to EventRelayer configuration.
+ * Mapping of event channels (or channel categories) to EventRelayer configuration.
  *
  * By setting up a PubSub system (like Kafka) and enabling a corresponding EventRelayer class
  * that uses it, MediaWiki can broadcast events to all subscribers. Certain features like WAN
@@ -8068,7 +8065,13 @@ $wgMaxUserDBWriteDuration = false;
  * subscribe to the channel and take actions based on the events. For example, a local daemon
  * can run on each CDN cache node and perfom local purges based on the URL purge channel events.
  *
- * The 'default' channel is for all channels without an explicit entry here.
+ * Some extensions may want to use "channel categories" so that different channels can also share
+ * the same custom relayer instance (e.g. when it's likely to be overriden). They can use
+ * EventRelayerGroup::getRelayer() based on the category but call notify() on various different
+ * actual channels. One reason for this would be that some system have very different performance
+ * vs durability needs, so one system (e.g. Kafka) may not be suitable for all uses.
+ *
+ * The 'default' key is for all channels (or channel categories) without an explicit entry here.
  *
  * @since 1.27
  */
index 9dfac79..9360693 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+use MediaWiki\MediaWikiServices;
+
 /**
  * Factory class for spawning EventRelayer objects using configuration
  *
@@ -12,25 +14,19 @@ class EventRelayerGroup {
        /** @var EventRelayer[] */
        protected $relayers = [];
 
-       /** @var EventRelayerGroup */
-       protected static $instance = null;
-
        /**
-        * @param Config $config
+        * @param array[] $config Channel configuration
         */
-       protected function __construct( Config $config ) {
-               $this->configByChannel = $config->get( 'EventRelayerConfig' );
+       public function __construct( array $config ) {
+               $this->configByChannel = $config;
        }
 
        /**
+        * @deprecated since 1.27 Use MediaWikiServices::getInstance()->getEventRelayerGroup()
         * @return EventRelayerGroup
         */
        public static function singleton() {
-               if ( !self::$instance ) {
-                       self::$instance = new self( RequestContext::getMain()->getConfig() );
-               }
-
-               return self::$instance;
+               return MediaWikiServices::getInstance()->getEventRelayerGroup();
        }
 
        /**
diff --git a/includes/LinkTarget.php b/includes/LinkTarget.php
deleted file mode 100644 (file)
index 8246f7d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/**
- * @author Addshore
- *
- * @since 1.27
- */
-interface LinkTarget {
-
-       /**
-        * Get the namespace index.
-        *
-        * @return int Namespace index
-        */
-       public function getNamespace();
-
-       /**
-        * Get the link fragment (i.e. the bit after the #) in text form.
-        *
-        * @return string link fragment
-        */
-       public function getFragment();
-
-       /**
-        * Whether the link target has a fragment
-        *
-        * @return bool
-        */
-       public function hasFragment();
-
-       /**
-        * Get the main part with underscores.
-        *
-        * @return string Main part of the link, with underscores (for use in href attributes)
-        */
-       public function getDBkey();
-
-       /**
-        * Returns the link in text form, without namespace prefix or fragment.
-        *
-        * This is computed from the DB key by replacing any underscores with spaces.
-        *
-        * @return string
-        */
-       public function getText();
-
-}
index a5c85a9..ccf948a 100644 (file)
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * Some internal bits split of from Skin.php. These functions are used
@@ -270,24 +271,23 @@ class Linker {
        /**
         * Returns the Url used to link to a Title
         *
-        * @param Title $target
+        * @param LinkTarget $target
         * @param array $query Query parameters
         * @param array $options
         * @return string
         */
-       private static function linkUrl( $target, $query, $options ) {
+       private static function linkUrl( LinkTarget $target, $query, $options ) {
                # We don't want to include fragments for broken links, because they
                # generally make no sense.
                if ( in_array( 'broken', $options, true ) && $target->hasFragment() ) {
-                       $target = clone $target;
-                       $target->setFragment( '' );
+                       $target = $target->createFragmentTarget( '' );
                }
 
                # If it's a broken link, add the appropriate query pieces, unless
                # there's already an action specified, or unless 'edit' makes no sense
                # (i.e., for a nonexistent special page).
                if ( in_array( 'broken', $options, true ) && empty( $query['action'] )
-                       && !$target->isSpecialPage() ) {
+                       && $target->getNamespace() !== NS_SPECIAL ) {
                        $query['action'] = 'edit';
                        $query['redlink'] = '1';
                }
@@ -300,7 +300,8 @@ class Linker {
                        $proto = PROTO_RELATIVE;
                }
 
-               $ret = $target->getLinkURL( $query, false, $proto );
+               $title = Title::newFromLinkTarget( $target );
+               $ret = $title->getLinkURL( $query, false, $proto );
                return $ret;
        }
 
index 3f4d8ed..9a942a5 100644 (file)
@@ -152,6 +152,13 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'StatsdDataFactory' );
        }
 
+       /**
+        * @return EventRelayerGroup
+        */
+       public function getEventRelayerGroup() {
+               return $this->getService( 'EventRelayerGroup' );
+       }
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service getter here, don't forget to add a test
        // case for it in MediaWikiServicesTest::provideGetters() and in
index 79cab79..40daf3d 100644 (file)
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * @todo document
index 7e1d4e3..991a67d 100644 (file)
@@ -78,6 +78,10 @@ return [
                );
        },
 
+       'EventRelayerGroup' => function( MediaWikiServices $services ) {
+               return new EventRelayerGroup( $services->getMainConfig()->get( 'EventRelayerConfig' ) );
+       },
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service here, don't forget to add a getter function
        // in the MediaWikiServices class. The convenience getter should just call
index cddb436..9898b84 100644 (file)
@@ -618,10 +618,9 @@ if ( $wgMainWANCache === false ) {
        // Sites using multiple datacenters can configure a relayer.
        $wgMainWANCache = 'mediawiki-main-default';
        $wgWANObjectCaches[$wgMainWANCache] = [
-               'class'         => 'WANObjectCache',
-               'cacheId'       => $wgMainCacheType,
-               'pool'          => 'mediawiki-main-default',
-               'relayerConfig' => [ 'class' => 'EventRelayerNull' ]
+               'class'    => 'WANObjectCache',
+               'cacheId'  => $wgMainCacheType,
+               'channels' => [ 'purge' => 'wancache-main-default-purge' ]
        ];
 }
 
index 3fd4631..6f38283 100644 (file)
@@ -21,6 +21,7 @@
  *
  * @file
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * Represents a title within MediaWiki.
@@ -1376,7 +1377,8 @@ class Title implements LinkTarget {
         * specified fragment before setting, so it assumes you're passing it with
         * an initial "#".
         *
-        * Deprecated for public use, use Title::makeTitle() with fragment parameter.
+        * Deprecated for public use, use Title::makeTitle() with fragment parameter,
+        * or Title::createFragmentTarget().
         * Still in active use privately.
         *
         * @private
@@ -1386,6 +1388,23 @@ class Title implements LinkTarget {
                $this->mFragment = strtr( substr( $fragment, 1 ), '_', ' ' );
        }
 
+       /**
+        * Creates a new Title for a different fragment of the same page.
+        *
+        * @since 1.27
+        * @param string $fragment
+        * @return Title
+        */
+       public function createFragmentTarget( $fragment ) {
+               return self::makeTitle(
+                       $this->getNamespace(),
+                       $this->getText(),
+                       $fragment,
+                       $this->getInterwiki()
+               );
+
+       }
+
        /**
         * Prefix some arbitrary text with the namespace or interwiki prefix
         * of this object
index 4dbe0f6..db6ce87 100644 (file)
@@ -18,6 +18,7 @@
  * @file
  * @ingroup Watchlist
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * Representation of a pair of user and title for watchlist entries.
index 5e99f8e..2180b2d 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
+use MediaWiki\Linker\LinkTarget;
 use Wikimedia\Assert\Assert;
 
 /**
index ea1b94e..b94f567 100644 (file)
@@ -23,6 +23,7 @@
  *
  * @file
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * A query module to show basic page information.
index 9ab2ec2..284c23c 100644 (file)
@@ -80,7 +80,7 @@
        "apihelp-delete-param-reason": "Motivo de la eliminación. Si no se especifica, se generará uno automáticamente.",
        "apihelp-delete-param-tags": "Cambio de etiquetas para aplicar a la entrada en la eliminación del registro.",
        "apihelp-delete-param-watch": "Añadir esta página a la lista de seguimiento del usuario actual.",
-       "apihelp-delete-param-watchlist": "Incondicionalmente agregar o remover la página de la actual watchlist del usuario, usar las preferencias o no cambiar watch.",
+       "apihelp-delete-param-watchlist": "Incondicionalmente agregar o remover la página de la lista de seguimiento del usuario actual, usar las preferencias o no cambiar el seguimiento.",
        "apihelp-delete-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
        "apihelp-delete-example-simple": "Borrar <kbd>Main Page</kbd>.",
        "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> con el motivo <kbd>Preparing for move</kbd>.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
        "apihelp-expandtemplates-param-revid": "Revisión de ID, para <nowiki>{{REVISIONID}}</nowiki> y variables similares.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "El wikitexto expandido.",
-       "apihelp-expandtemplates-paramvalue-prop-categories": "Cualquier categoría presente en la entrada que no están representados en el wikitexto resultado.",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Cualesquiera categorías presentes en la entrada que no están representadas en salida de wikitexto.",
        "apihelp-expandtemplates-paramvalue-prop-properties": "Propiedades de página definidas por palabras mágicas en el wikitexto.",
        "apihelp-expandtemplates-paramvalue-prop-ttl": "El tiempo máximo tras el cual deberían invalidarse los resultados en caché.",
        "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Da las variables de configuración JavaScript específicas para la página.",
index 8456b61..b2398af 100644 (file)
@@ -6,7 +6,8 @@
                        "Pitke",
                        "Stryn",
                        "Jaakkoh",
-                       "01miki10"
+                       "01miki10",
+                       "Silvonen"
                ]
        },
        "apihelp-main-param-action": "Mikä toiminto suoritetaan.",
@@ -91,6 +92,7 @@
        "apihelp-move-param-noredirect": "Älä luo ohjausta.",
        "apihelp-move-param-watch": "Lisää sivu ja ohjaus nykyisen käyttäjän tarkkailulistalle.",
        "apihelp-move-param-unwatch": "Poista sivu ja ohjaus nykyisen käyttäjän tarkkailulistalta.",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Lisää linkin otsikon.",
        "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
        "apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
        "apihelp-upload-param-stash": "Mikäli valittu, palvelin säilöö tiedoston väliaikaisesti tallentamisen sijaan."
diff --git a/includes/api/i18n/hsn.json b/includes/api/i18n/hsn.json
new file mode 100644 (file)
index 0000000..a646923
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "SolidBlock"
+               ]
+       },
+       "apihelp-main-param-action": "要搞得操作。",
+       "apihelp-main-param-format": "出的格式。"
+}
diff --git a/includes/api/i18n/ur.json b/includes/api/i18n/ur.json
new file mode 100644 (file)
index 0000000..c0f1bcf
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Obaid Raza"
+               ]
+       },
+       "apihelp-delete-example-simple": "حذف <kbd>صفحۂ اول</kbd>."
+}
index 5dc8110..c5bd290 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Cache
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * Class representing a list of titles
index ce34537..5c46c1a 100644 (file)
@@ -1131,6 +1131,35 @@ class DatabaseMssql extends Database {
                return strlen( $name ) && $name[0] == '[' && substr( $name, -1, 1 ) == ']';
        }
 
+       /**
+        * MS SQL supports more pattern operators than other databases (ex: [,],^)
+        *
+        * @param string $s
+        * @return string
+        */
+       protected function escapeLikeInternal( $s ) {
+               return addcslashes( $s, '\%_[]^' );
+       }
+
+       /**
+        * MS SQL requires specifying the escape character used in a LIKE query
+        * or using Square brackets to surround characters that are to be escaped
+        * http://msdn.microsoft.com/en-us/library/ms179859.aspx
+        * Here we take the Specify-Escape-Character approach since it's less
+        * invasive, renders a query that is closer to other DB's and better at
+        * handling square bracket escaping
+        *
+        * @return string Fully built LIKE statement
+        */
+       public function buildLike() {
+               $params = func_get_args();
+               if ( count( $params ) > 0 && is_array( $params[0] ) ) {
+                       $params = $params[0];
+               }
+
+               return parent::buildLike( $params ) . " ESCAPE '\' ";
+       }
+
        /**
         * @param string $db
         * @return bool
index 81770d5..13d25a8 100644 (file)
@@ -368,6 +368,9 @@ class MWDebug {
                        $sql
                );
 
+               // last check for invalid utf8
+               $sql = UtfNormal\Validator::cleanUp( $sql );
+
                self::$query[] = [
                        'sql' => $sql,
                        'function' => $function,
index 32f6adc..65ff9f3 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Assert\Assert;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Handles purging appropriate CDN URLs given a title (or titles)
@@ -109,7 +110,8 @@ class CdnCacheUpdate implements DeferrableUpdate, MergeableUpdate {
                wfDebugLog( 'squid', __METHOD__ . ': ' . implode( ' ', $urlArr ) );
 
                // Reliably broadcast the purge to all edge nodes
-               $relayer = EventRelayerGroup::singleton()->getRelayer( 'cdn-url-purges' );
+               $relayer = MediaWikiServices::getInstance()->getEventRelayerGroup()
+                                       ->getRelayer( 'cdn-url-purges' );
                $relayer->notify(
                        'cdn-url-purges',
                        [
index a59b15e..4a6b804 100644 (file)
@@ -111,7 +111,7 @@ class HTMLCheckField extends HTMLFormField {
        /**
         * @param WebRequest $request
         *
-        * @return string
+        * @return bool
         */
        function loadDataFromRequest( $request ) {
                $invert = isset( $this->mParams['invert'] ) && $this->mParams['invert'];
@@ -125,7 +125,7 @@ class HTMLCheckField extends HTMLFormField {
                                ? !$request->getBool( $this->mName )
                                : $request->getBool( $this->mName );
                } else {
-                       return $this->getDefault();
+                       return (bool)$this->getDefault();
                }
        }
 }
index 1d27c46..8f8caf2 100644 (file)
@@ -1146,10 +1146,12 @@ class HTMLForm extends ContextSource {
                        }
                }
 
-               $html = Html::rawElement( 'span',
-                       [ 'class' => 'mw-htmlform-submit-buttons' ], "\n$buttons" ) . "\n";
+               if ( !$buttons ) {
+                       return '';
+               }
 
-               return $html;
+               return Html::rawElement( 'span',
+                       [ 'class' => 'mw-htmlform-submit-buttons' ], "\n$buttons" ) . "\n";
        }
 
        /**
index 4f8365e..278d453 100644 (file)
@@ -121,10 +121,12 @@ class OOUIHTMLForm extends HTMLForm {
                        ] + $attrs );
                }
 
-               $html = Html::rawElement( 'div',
-                       [ 'class' => 'mw-htmlform-submit-buttons' ], "\n$buttons" ) . "\n";
+               if ( !$buttons ) {
+                       return '';
+               }
 
-               return $html;
+               return Html::rawElement( 'div',
+                       [ 'class' => 'mw-htmlform-submit-buttons' ], "\n$buttons" ) . "\n";
        }
 
        protected function wrapFieldSetSection( $legend, $section, $attributes ) {
index c446615..f3cba48 100644 (file)
@@ -137,9 +137,11 @@ class VFormHTMLForm extends HTMLForm {
                        $buttons .= Html::element( 'input', $attrs ) . "\n";
                }
 
-               $html = Html::rawElement( 'div',
-                       [ 'class' => 'mw-htmlform-submit-buttons' ], "\n$buttons" ) . "\n";
+               if ( !$buttons ) {
+                       return '';
+               }
 
-               return $html;
+               return Html::rawElement( 'div',
+                       [ 'class' => 'mw-htmlform-submit-buttons' ], "\n$buttons" ) . "\n";
        }
 }
diff --git a/includes/installer/i18n/hsn.json b/includes/installer/i18n/hsn.json
new file mode 100644 (file)
index 0000000..cebc979
--- /dev/null
@@ -0,0 +1,35 @@
+{
+       "@metadata": {
+               "authors": [
+                       "SolidBlock"
+               ]
+       },
+       "config-desc": "MediaWiki安装程序",
+       "config-title": "MediaWiki $1配置",
+       "config-information": "信息",
+       "config-localsettings-upgrade": "发现哒<code>LocalSettings.php</code>文件。要提升啯杂配置,就于啯杂框框中输入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中寻它。",
+       "config-localsettings-cli-upgrade": "查噶<code>LocalSettings.php</code>文件。要升级啯杂配置,请直接走<code>update.php</code>。",
+       "config-localsettings-key": "升级密钥:",
+       "config-localsettings-badkey": "啯杂密钥是错的。",
+       "config-session-error": "搞会话碰哒鬼:$1",
+       "config-your-language": "您使用的语言:",
+       "config-wiki-language": "Wiki语言:",
+       "config-back": "← 后退",
+       "config-continue": "行克 →",
+       "config-page-language": "语言",
+       "config-page-welcome": "欢迎使用MediaWiki!",
+       "config-page-name": "名字",
+       "config-page-options": "选项",
+       "config-page-install": "装下克",
+       "config-page-complete": "搞好哒!",
+       "config-page-readme": "自述",
+       "config-page-copying": "复制",
+       "config-page-upgradedoc": "升级",
+       "config-page-existingwiki": "现成的wiki",
+       "config-help-restart": "要不要哈消嘎输入且存好的东西,并且重新开始装?",
+       "config-restart": "嗯,重搞",
+       "config-env-good": "环境检查哈好哒。你可以安装MediaWiki哒。",
+       "config-env-bad": "环境检查好哒,可惜你搞不了MediaWiki。",
+       "config-env-php": "PHP $1装哒。",
+       "config-env-hhvm": "HHVM $1装哒。"
+}
index f28a4c0..b0cd413 100644 (file)
@@ -54,10 +54,6 @@ abstract class EventRelayer implements LoggerAwareInterface {
                return $this->doNotify( $channel, $events );
        }
 
-       /**
-        * Set logger instance.
-        * @param LoggerInterface $logger
-        */
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
        }
index 3555a23..999eb43 100644 (file)
@@ -7,7 +7,6 @@ use Kafka\Produce;
  * 'relayerConfig' => [ 'class' => 'EventRelayerKafka', 'KafkaEventHost' => 'localhost:9092' ],
  */
 class EventRelayerKafka extends EventRelayer {
-
        /**
         * Configuration.
         *
@@ -25,9 +24,11 @@ class EventRelayerKafka extends EventRelayer {
        /**
         * Create Kafka producer.
         *
-        * @param Config $config
+        * @param array $params
         */
        public function __construct( array $params ) {
+               parent::__construct( $params );
+
                $this->config = new HashConfig( $params );
                if ( !$this->config->has( 'KafkaEventHost' ) ) {
                        throw new InvalidArgumentException( "KafkaEventHost must be configured" );
@@ -40,17 +41,12 @@ class EventRelayerKafka extends EventRelayer {
         */
        protected function getKafkaProducer() {
                if ( !$this->producer ) {
-                       $this->producer = Produce::getInstance( null, null, $this->config->get( 'KafkaEventHost' ) );
+                       $this->producer = Produce::getInstance(
+                               null, null, $this->config->get( 'KafkaEventHost' ) );
                }
                return $this->producer;
        }
 
-       /**
-        * (non-PHPdoc)
-        *
-        * @see EventRelayer::doNotify()
-        *
-        */
        protected function doNotify( $channel, array $events ) {
                $jsonEvents = array_map( 'json_encode', $events );
                try {
index 1aed280..8e3c0a5 100644 (file)
@@ -55,9 +55,21 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        /** @var LoggerInterface */
        protected $logger;
 
+       /** @var callback|null */
+       protected $asyncHandler;
+
        /** @var bool */
        private $debugMode = false;
 
+       /** @var array */
+       private $duplicateKeyLookups = [];
+
+       /** @var bool */
+       private $reportDupes = false;
+
+       /** @var bool */
+       private $dupeTrackScheduled = false;
+
        /** Possible values for getLastError() */
        const ERR_NONE = 0; // no error
        const ERR_NO_RESPONSE = 1; // no response
@@ -71,6 +83,16 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        const WRITE_SYNC = 1; // synchronously write to all locations for replicated stores
        const WRITE_CACHE_ONLY = 2; // Only change state of the in-memory cache
 
+       /**
+        * $params include:
+        *   - logger: Psr\Log\LoggerInterface instance
+        *   - keyspace: Default keyspace for $this->makeKey()
+        *   - asyncHandler: Callable to use for scheduling tasks after the web request ends.
+        *      In CLI mode, it should run the task immediately.
+        *   - reportDupes: Whether to emit warning log messages for all keys that were
+        *      requested more than once (requires an asyncHandler).
+        * @param array $params
+        */
        public function __construct( array $params = [] ) {
                if ( isset( $params['logger'] ) ) {
                        $this->setLogger( $params['logger'] );
@@ -81,6 +103,14 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
                if ( isset( $params['keyspace'] ) ) {
                        $this->keyspace = $params['keyspace'];
                }
+
+               $this->asyncHandler = isset( $params['asyncHandler'] )
+                       ? $params['asyncHandler']
+                       : null;
+
+               if ( !empty( $params['reportDupes'] ) && is_callable( $this->asyncHandler ) ) {
+                       $this->reportDupes = true;
+               }
        }
 
        /**
@@ -144,9 +174,44 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
                // B/C for ( $key, &$casToken = null, $flags = 0 )
                $flags = is_int( $oldFlags ) ? $oldFlags : $flags;
 
+               $this->trackDuplicateKeys( $key );
+
                return $this->doGet( $key, $flags );
        }
 
+       /**
+        * Track the number of times that a given key has been used.
+        * @param string $key
+        */
+       private function trackDuplicateKeys( $key ) {
+               if ( !$this->reportDupes ) {
+                       return;
+               }
+
+               if ( !isset( $this->duplicateKeyLookups[$key] ) ) {
+                       // Track that we have seen this key. This N-1 counting style allows
+                       // easy filtering with array_filter() later.
+                       $this->duplicateKeyLookups[$key] = 0;
+               } else {
+                       $this->duplicateKeyLookups[$key] += 1;
+
+                       if ( $this->dupeTrackScheduled === false ) {
+                               $this->dupeTrackScheduled = true;
+                               // Schedule a callback that logs keys processed more than once by get().
+                               call_user_func( $this->asyncHandler, function () {
+                                       $dups = array_filter( $this->duplicateKeyLookups );
+                                       foreach ( $dups as $key => $count ) {
+                                               $this->logger->warning(
+                                                       'Duplicate get(): "{key}" fetched {count} times',
+                                                       // Count is N-1 of the actual lookup count
+                                                       [ 'key' => $key, 'count' => $count + 1, ]
+                                               );
+                                       }
+                               } );
+                       }
+               }
+       }
+
        /**
         * @param string $key
         * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
index 3e88cb1..fe61470 100644 (file)
@@ -33,8 +33,6 @@ class MultiWriteBagOStuff extends BagOStuff {
        protected $caches;
        /** @var bool Use async secondary writes */
        protected $asyncWrites = false;
-       /** @var callback|null */
-       protected $asyncHandler;
 
        /** Idiom for "write to all backends" */
        const ALL = INF;
@@ -58,8 +56,6 @@ class MultiWriteBagOStuff extends BagOStuff {
         *      safe to use for modules when cached values: are immutable,
         *      invalidation uses logical TTLs, invalidation uses etag/timestamp
         *      validation against the DB, or merge() is used to handle races.
-        *   - asyncHandler: callable that takes a callback and runs it after the
-        *      current web request ends. In CLI mode, it should run it immediately.
         * @param array $params
         * @throws InvalidArgumentException
         */
@@ -88,9 +84,6 @@ class MultiWriteBagOStuff extends BagOStuff {
                        }
                }
 
-               $this->asyncHandler = isset( $params['asyncHandler'] )
-                       ? $params['asyncHandler']
-                       : null;
                $this->asyncWrites = (
                        isset( $params['replication'] ) &&
                        $params['replication'] === 'async' &&
index dd2e0d5..18cc10e 100644 (file)
@@ -69,10 +69,10 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        protected $cache;
        /** @var HashBagOStuff Script instance PHP cache */
        protected $procCache;
-       /** @var string Cache pool name */
-       protected $pool;
+       /** @var string Purge channel name */
+       protected $purgeChannel;
        /** @var EventRelayer Bus that handles purge broadcasts */
-       protected $relayer;
+       protected $purgeRelayer;
        /** @var LoggerInterface */
        protected $logger;
 
@@ -134,25 +134,27 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
        const MAX_PC_KEYS = 1000; // max keys to keep in process cache
 
+       const DEFAULT_PURGE_CHANNEL = 'wancache-purge';
+
        /**
         * @param array $params
-        *   - cache   : BagOStuff object
-        *   - pool    : pool name
-        *   - relayer : EventRelayer object
-        *   - logger  : LoggerInterface object
+        *   - cache    : BagOStuff object for a persistent cache
+        *   - channels : Map of (action => channel string). Actions include "purge".
+        *   - relayers : Map of (action => EventRelayer object). Actions include "purge".
+        *   - logger   : LoggerInterface object
         */
        public function __construct( array $params ) {
                $this->cache = $params['cache'];
-               $this->pool = $params['pool'];
-               $this->relayer = $params['relayer'];
                $this->procCache = new HashBagOStuff( [ 'maxKeys' => self::MAX_PC_KEYS ] );
+               $this->purgeChannel = isset( $params['channels']['purge'] )
+                       ? $params['channels']['purge']
+                       : self::DEFAULT_PURGE_CHANNEL;
+               $this->purgeRelayer = isset( $params['relayers']['purge'] )
+                       ? $params['relayers']['purge']
+                       : new EventRelayerNull( [] );
                $this->setLogger( isset( $params['logger'] ) ? $params['logger'] : new NullLogger() );
        }
 
-       /**
-        * Set logger instance.
-        * @param LoggerInterface $logger
-        */
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
        }
@@ -673,12 +675,12 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *
         *             return CatConfig::newFromRow( $dbr->selectRow( ... ) );
         *         },
-        *         array(
+        *         [
         *             // Calling touchCheckKey() on this key invalidates the cache
-        *             'checkKeys' => array( $cache->makeKey( 'site-cat-config' ) ),
+        *             'checkKeys' => [ $cache->makeKey( 'site-cat-config' ) ],
         *             // Try to only let one datacenter thread manage cache updates at a time
         *             'lockTSE' => 30
-        *         )
+        *         ]
         *     );
         * @endcode
         *
@@ -698,15 +700,15 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *
         *             return CatState::newFromResults( $dbr->select( ... ) );
         *         },
-        *         array(
+        *         [
         *              // The "check" keys that represent things the value depends on;
         *              // Calling touchCheckKey() on any of them invalidates the cache
-        *             'checkKeys' => array(
+        *             'checkKeys' => [
         *                 $cache->makeKey( 'sustenance-bowls', $cat->getRoomId() ),
         *                 $cache->makeKey( 'people-present', $cat->getHouseId() ),
         *                 $cache->makeKey( 'cat-laws', $cat->getCityId() ),
-        *             )
-        *         )
+        *             ]
+        *         ]
         *     );
         * @endcode
         *
@@ -724,7 +726,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *             $setOpts += Database::getCacheSetOptions( $dbr );
         *
         *             // Start off with the last cached list
-        *             $list = $oldValue ?: array();
+        *             $list = $oldValue ?: [];
         *             // Fetch the last 100 relevant rows in descending order;
         *             // only fetch rows newer than $list[0] to reduce scanning
         *             $rows = iterator_to_array( $dbr->select( ... ) );
@@ -732,7 +734,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *             return array_slice( array_merge( $new, $list ), 0, 100 );
         *        },
         *        // Try to only let one datacenter thread manage cache updates at a time
-        *        array( 'lockTSE' => 30 )
+        *        [ 'lockTSE' => 30 ]
         *     );
         * @endcode
         *
@@ -950,7 +952,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        'sbt' => true, // substitute $UNIXTIME$ with actual microtime
                ] );
 
-               $ok = $this->relayer->notify( "{$this->pool}:purge", $event );
+               $ok = $this->purgeRelayer->notify( $this->purgeChannel, $event );
                if ( !$ok ) {
                        $this->lastRelayError = self::ERR_RELAY;
                }
@@ -970,7 +972,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        'key' => $key,
                ] );
 
-               $ok = $this->relayer->notify( "{$this->pool}:purge", $event );
+               $ok = $this->purgeRelayer->notify( $this->purgeChannel, $event );
                if ( !$ok ) {
                        $this->lastRelayError = self::ERR_RELAY;
                }
diff --git a/includes/linker/LinkTarget.php b/includes/linker/LinkTarget.php
new file mode 100644 (file)
index 0000000..2764f46
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ * @author Addshore
+ */
+namespace MediaWiki\Linker;
+
+/**
+ * @since 1.27
+ */
+interface LinkTarget {
+
+       /**
+        * Get the namespace index.
+        *
+        * @return int Namespace index
+        */
+       public function getNamespace();
+
+       /**
+        * Get the link fragment (i.e. the bit after the #) in text form.
+        *
+        * @return string link fragment
+        */
+       public function getFragment();
+
+       /**
+        * Whether the link target has a fragment
+        *
+        * @return bool
+        */
+       public function hasFragment();
+
+       /**
+        * Get the main part with underscores.
+        *
+        * @return string Main part of the link, with underscores (for use in href attributes)
+        */
+       public function getDBkey();
+
+       /**
+        * Returns the link in text form, without namespace prefix or fragment.
+        *
+        * This is computed from the DB key by replacing any underscores with spaces.
+        *
+        * @return string
+        */
+       public function getText();
+
+       /**
+        * Creates a new LinkTarget for a different fragment of the same page.
+        * It is expected that the same type of object will be returned, but the
+        * only requirement is that it is a LinkTarget.
+        *
+        * @param string $fragment The fragment name, or "" for the entire page.
+        *
+        * @return LinkTarget
+        */
+       public function createFragmentTarget( $fragment );
+}
index 1fd4b7f..be73c86 100644 (file)
@@ -97,13 +97,15 @@ class RightsLogFormatter extends LogFormatter {
                        $params[3] = $this->msg( 'rightsnone' )->text();
                }
                if ( count( $newGroups ) ) {
-                       // Array_values is used here because of bug 42211
+                       // Array_values is used here because of T44211
                        // see use of array_unique in UserrightsPage::doSaveUserGroups on $newGroups.
                        $params[4] = $lang->listToText( array_values( $newGroups ) );
                } else {
                        $params[4] = $this->msg( 'rightsnone' )->text();
                }
 
+               $params[5] = $userName;
+
                return $params;
        }
 
index fe24c34..664c111 100644 (file)
@@ -23,6 +23,7 @@
  * @author Tim Starling
  * @author Luke Welling lwelling@wikimedia.org
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * This module processes the email notifications when the current page is
index 6d26419..24846e6 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Functions to get cache objects
@@ -174,11 +175,13 @@ class ObjectCache {
                } elseif ( isset( $params['class'] ) ) {
                        $class = $params['class'];
                        // Automatically set the 'async' update handler
-                       if ( $class === 'MultiWriteBagOStuff' ) {
-                               $params['asyncHandler'] = isset( $params['asyncHandler'] )
-                                       ? $params['asyncHandler']
-                                       : 'DeferredUpdates::addCallableUpdate';
-                       }
+                       $params['asyncHandler'] = isset( $params['asyncHandler'] )
+                               ? $params['asyncHandler']
+                               : 'DeferredUpdates::addCallableUpdate';
+                       // Enable reportDupes by default
+                       $params['reportDupes'] = isset( $params['reportDupes'] )
+                               ? $params['reportDupes']
+                               : true;
                        // Do b/c logic for MemcachedBagOStuff
                        if ( is_subclass_of( $class, 'MemcachedBagOStuff' ) ) {
                                if ( !isset( $params['servers'] ) ) {
@@ -296,8 +299,11 @@ class ObjectCache {
                }
 
                $params = $wgWANObjectCaches[$id];
-               $class = $params['relayerConfig']['class'];
-               $params['relayer'] = new $class( $params['relayerConfig'] );
+               foreach ( $params['channels'] as $action => $channel ) {
+                       $params['relayers'][$action] = MediaWikiServices::getInstance()->getEventRelayerGroup()
+                               ->getRelayer( $channel );
+                       $params['channels'][$action] = $channel;
+               }
                $params['cache'] = self::newFromId( $params['cacheId'] );
                if ( isset( $params['loggroup'] ) ) {
                        $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
index 8209ea9..a1d62e5 100644 (file)
@@ -739,8 +739,7 @@ class Parser {
 
                if ( $t->hasFragment() ) {
                        # Strip the fragment to avoid various odd effects
-                       $this->mTitle = clone $t;
-                       $this->mTitle->setFragment( '' );
+                       $this->mTitle = $t->createFragmentTarget( '' );
                } else {
                        $this->mTitle = $t;
                }
index 7c60aa5..f977124 100644 (file)
@@ -34,6 +34,7 @@ class ExtensionProcessor implements Processor {
                'LogTypes',
                'LogRestrictions',
                'FilterLogTypes',
+               'ActionFilteredLogs',
                'LogNames',
                'LogHeaders',
                'LogActions',
index fb153fc..0907f8f 100644 (file)
@@ -59,6 +59,9 @@ class SpecialPage {
        /**
         * Get a localised Title object for a specified special page name
         *
+        * @since 1.9
+        * @since 1.21 $fragment parameter added
+        *
         * @param string $name
         * @param string|bool $subpage Subpage string, or false to not use a subpage
         * @param string $fragment The link fragment (after the "#")
index c1abd6e..f2fa921 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @defgroup Watchlist Users watchlist handling
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * Implements Special:EditWatchlist
index ede367e..3e66ab0 100644 (file)
@@ -168,6 +168,7 @@ class SpecialExport extends SpecialPage {
                        // This should provide safer streaming for pages with history
                        wfResetOutputBuffers();
                        $request->response()->header( "Content-type: application/xml; charset=utf-8" );
+                       $request->response()->header( "X-Robots-Tag: noindex,nofollow" );
 
                        if ( $request->getCheck( 'wpDownload' ) ) {
                                // Provide a sane filename suggestion
old mode 100755 (executable)
new mode 100644 (file)
index 82e07fd..75308aa 100644 (file)
@@ -180,6 +180,11 @@ class SpecialUpload extends SpecialPage {
                        throw new UserBlockedError( $user->getBlock() );
                }
 
+               // Global blocks
+               if ( $user->isBlockedGlobally() ) {
+                       throw new UserBlockedError( $user->getGlobalBlock() );
+               }
+
                # Check whether we actually want to allow changing stuff
                $this->checkReadOnly();
 
index 45fe5c4..40706fa 100644 (file)
@@ -490,7 +490,7 @@ class ImageListPager extends TablePager {
                        case 'img_description':
                                return Linker::formatComment( $value );
                        case 'count':
-                               return intval( $value ) + 1;
+                               return $this->getLanguage()->formatNum( intval( $value ) + 1 );
                        case 'top':
                                // Messages: listfiles-latestversion-yes, listfiles-latestversion-no
                                return $this->msg( 'listfiles-latestversion-' . $value );
index b458578..a565271 100644 (file)
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * A service for generating links from page titles.
index 22d5f0d..7c08be4 100644 (file)
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * A codec for %MediaWiki page titles.
index 1c5f0f7..e26fe1a 100644 (file)
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * Represents a link rendering service for %MediaWiki.
index 4edc5db..96f396c 100644 (file)
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * A title formatter service for MediaWiki.
index 18a06ea..c23d698 100644 (file)
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use MediaWiki\Linker\LinkTarget;
 use Wikimedia\Assert\Assert;
 
 /**
@@ -131,11 +132,12 @@ class TitleValue implements LinkTarget {
        /**
         * Creates a new TitleValue for a different fragment of the same page.
         *
+        * @since 1.27
         * @param string $fragment The fragment name, or "" for the entire page.
         *
         * @return TitleValue
         */
-       public function createFragmentTitle( $fragment ) {
+       public function createFragmentTarget( $fragment ) {
                return new TitleValue( $this->namespace, $this->dbkey, $fragment );
        }
 
index c1e096b..601f9a5 100644 (file)
@@ -275,8 +275,8 @@ class User implements IDBAccessObject {
        protected $mImplicitGroups;
        /** @var array */
        protected $mFormerGroups;
-       /** @var bool */
-       protected $mBlockedGlobally;
+       /** @var Block */
+       protected $mGlobalBlock;
        /** @var bool */
        protected $mLocked;
        /** @var bool */
@@ -1992,8 +1992,22 @@ class User implements IDBAccessObject {
         * @return bool True if blocked, false otherwise
         */
        public function isBlockedGlobally( $ip = '' ) {
-               if ( $this->mBlockedGlobally !== null ) {
-                       return $this->mBlockedGlobally;
+               return $this->getGlobalBlock( $ip ) instanceof Block;
+       }
+
+       /**
+        * Check if user is blocked on all wikis.
+        * Do not use for actual edit permission checks!
+        * This is intended for quick UI checks.
+        *
+        * @param string $ip IP address, uses current client if none given
+        * @return Block|null Block object if blocked, null otherwise
+        * @throws FatalError
+        * @throws MWException
+        */
+       public function getGlobalBlock( $ip = '' ) {
+               if ( $this->mGlobalBlock !== null ) {
+                       return $this->mGlobalBlock ?: null;
                }
                // User is already an IP?
                if ( IP::isIPAddress( $this->getName() ) ) {
@@ -2002,9 +2016,17 @@ class User implements IDBAccessObject {
                        $ip = $this->getRequest()->getIP();
                }
                $blocked = false;
-               Hooks::run( 'UserIsBlockedGlobally', [ &$this, $ip, &$blocked ] );
-               $this->mBlockedGlobally = (bool)$blocked;
-               return $this->mBlockedGlobally;
+               $block = null;
+               Hooks::run( 'UserIsBlockedGlobally', [ &$this, $ip, &$blocked, &$block ] );
+
+               if ( $blocked && $block === null ) {
+                       // back-compat: UserIsBlockedGlobally didn't have $block param first
+                       $block = new Block;
+                       $block->setTarget( $ip );
+               }
+
+               $this->mGlobalBlock = $blocked ? $block : false;
+               return $this->mGlobalBlock ?: null;
        }
 
        /**
index 994eb09..a7de1f9 100644 (file)
@@ -84,7 +84,7 @@ class Names {
                'bbc-latn' => 'Batak Toba', # Batak Toba
                'bcc' => 'جهلسری بلوچی', # Southern Balochi
                'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
-               'be' => 'беларуская', #  Belarusian normative
+               'be' => 'беларуская', # Belarusian normative
                'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E", # Belarusian in Taraskievica orthography
                'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E", # (be-tarask compat)
                'bg' => 'български', # Bulgarian
@@ -384,8 +384,8 @@ class Names {
                'so' => 'Soomaaliga', # Somali
                'sq' => 'shqip', # Albanian
                'sr' => 'српски / srpski', # Serbian (multiple scripts - defaults to Cyrillic)
-               'sr-ec' => "српски (ћирилица)\xE2\x80\x8E",       # Serbian Cyrillic ekavian
-               'sr-el' => "srpski (latinica)\xE2\x80\x8E",     # Serbian Latin ekavian
+               'sr-ec' => "српски (ћирилица)\xE2\x80\x8E", # Serbian Cyrillic ekavian
+               'sr-el' => "srpski (latinica)\xE2\x80\x8E", # Serbian Latin ekavian
                'srn' => 'Sranantongo', # Sranan Tongo
                'ss' => 'SiSwati', # Swati
                'st' => 'Sesotho', # Southern Sotho
@@ -427,9 +427,9 @@ class Names {
                'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
                'uk' => 'українська', # Ukrainian
                'ur' => 'اردو', # Urdu
-               'uz' => 'oʻzbekcha/ўзбекча',    # Uzbek (multiple scripts - defaults to Latin)
-               'uz-cyrl' => 'ўзбекча',  # Uzbek Cyrillic
-               'uz-latn' => 'oʻzbekcha',      # Uzbek Latin (default)
+               'uz' => 'oʻzbekcha/ўзбекча', # Uzbek (multiple scripts - defaults to Latin)
+               'uz-cyrl' => 'ўзбекча', # Uzbek Cyrillic
+               'uz-latn' => 'oʻzbekcha', # Uzbek Latin (default)
                've' => 'Tshivenda', # Venda
                'vec' => 'vèneto', # Venetian
                'vep' => 'vepsän kel’', # Veps
index c3f3afc..882a694 100644 (file)
@@ -77,6 +77,7 @@
        "tog-watchdefault": "أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي",
        "tog-watchmoves": "أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي",
        "tog-watchdeletion": "أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي",
+       "tog-watchuploads": "أضف الملفات الجديدة التي رفعتها إلى قائمة مراقبتي",
        "tog-watchrollback": "أضف إلى قائمة مراقبتي الصفحات التي كنت أجريت فيها استرجاعات",
        "tog-minordefault": "أشِّر كل التعديلات على أنها طفيفة مبدئيا",
        "tog-previewontop": "أظهر معاينة النص فوق صندوق التحرير",
        "title-invalid-utf8": "عنوان الصفحة المطلوب يحتوي سلسلة محارف UTF-8 غير صالحة.",
        "title-invalid-interwiki": "عنوان الصفحة المطلوب يتضمن وصلة لحلقة لغة وهو ما لا يمكن استخدامه في العناوين.",
        "title-invalid-talk-namespace": "عنوان الصفحة المطلوبة يشير إلى صفحة نقاش غير موجودة.",
-       "title-invalid-characters": "عنوان الصفحة المطلوب يتضمن محارف غير صالحة: \"$1\"",
+       "title-invalid-characters": "عنوان الصفحة المطلوب يتضمن رموزًا غير صالحة: \"$1\"",
        "title-invalid-leading-colon": "عنوان الصفحة المطلوب يتضمن فاصلة غير صالحة في بدايته.",
        "perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.",
        "perfcachedts": "البيانات التالية مخزنة، وكان آخر تحديث لها في $1. العدد الأقصى للنتائج المخزنة هو {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}}.",
index 07317f0..c5f50c6 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protexó}} a $3 $4 [en cascada]",
        "logentry-protect-modify": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4 [en cascada]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de {{GENDER:$3|$3}} dende $4 a $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de {{GENDER:$6|$3}} dende $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|promocionó}} automáticamente de $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|xubió}} $3",
index ab8571a..0a74b0a 100644 (file)
        "resetpass_forbidden": "رمزلر دَییشیلمز",
        "resetpass-no-info": "بو صحیفه‌نی دوغرو گؤردوگونوز اوچون سیستمه گیرمه‌لیسینیز.",
        "resetpass-submit-loggedin": "رمزی دَییشدیر",
-       "resetpass-submit-cancel": "Ù\84غÙ\88 Ø§Ø¦Øª",
+       "resetpass-submit-cancel": "Ù\88ازگئÚ\86",
        "resetpass-wrong-oldpass": "یانلیش گئچیجی یا ایندیکی رمز.\nاولا بیلر سیز باشاریلیق‌لا رمزینیزی دَییشمیسینیز یوخسا یئنی گئچرلی رمز ایسته‌میسینیز.",
        "resetpass-recycled": "لوطفا گیریش رمزینیزی ایندیکی اولمایان بیر ایری گیریش رمزینه دَییشین",
        "resetpass-temp-emailed": "سیز بیر کدلانمیش موقت ایمیل له گیریش ائدیب سیز.\nگیریشینیزه سون وئرمک اوچون یئنی دن بیر گیریش رمزی وئرمه لی سیز:",
        "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
        "feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
        "feedback-bugornote": "بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].\nاو اولماسا، بو آشاغیداکی ساده فورم‌دان ایستیفاده ائده بیلرسینیز. سیزین باخیشینیز، ایستیفاده‌چی آدینیزلا، «[$3 $2]» صحیفه‌سینه آرتیریلاجاق‌دیر.",
-       "feedback-cancel": "Ù\84غÙ\88 Ø§Ø¦Øª",
+       "feedback-cancel": "Ù\88ازگئÚ\86",
        "feedback-close": "اولدو",
        "feedback-error-title": "خطا",
        "feedback-error1": "خطا: API-دان تانینمامیش نتیجه",
index 4216c9d..3098604 100644 (file)
        "recentchangeslinked-page": "Назва старонкі:",
        "recentchangeslinked-to": "Замест гэтага паказваць зьмены на старонках, што спасылаюцца на гэтую старонку",
        "recentchanges-page-added-to-category": "[[:$1]] дададзеная да катэгорыі",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 старонка была дададзеная|$2 старонкі былі дададзеныя|$2 старонак былі дададзеныя}}]] да катэгорыі",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] дададзеная да катэгорыі, [[Special:WhatLinksHere/$1|гэтая старонка ўключаная ў іншыя старонкі]]",
        "recentchanges-page-removed-from-category": "[[:$1]] выдаленая з катэгорыі",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|старонка была выдаленая|старонкі былі выдаленыя|старонак былі выдаленыя}}]] з катэгорыі",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] выдаленая з катэгорыі, [[Special:WhatLinksHere/$1|гэтая старонка ўключаная ў іншыя старонкі]]",
        "autochange-username": "Аўтаматычная зьмена MediaWiki",
        "upload": "Загрузіць файл",
        "uploadbtn": "Загрузіць файл",
        "apisandbox-submit-invalid-fields-title": "Некаторыя палі няслушныя",
        "apisandbox-submit-invalid-fields-message": "Калі ласка, выпраўце пазначаныя палі і паспрабуйце яшчэ раз.",
        "apisandbox-results": "Вынікі",
+       "apisandbox-sending-request": "Адпраўка API-запыту…",
+       "apisandbox-loading-results": "Атрымліваем API-вынікі…",
        "apisandbox-request-url-label": "URL-адрас запыту:",
        "apisandbox-request-time": "Час запыту: {{PLURAL:$1|$1 мс}}",
        "booksources": "Крыніцы кніг",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|абараніў|абараніла}} $3 $4 [каскадна]",
        "logentry-protect-modify": "$1 {{GENDER:$2|зьмяніў узровень|зьмяніла ўзровень}} абароны для $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|зьмяніў узровень|зьмяніла ўзровень}} абароны для $3 $4 [каскадна]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} прыналежнасьць {{GENDER:$3|$3}} да групы з $4 на $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} прыналежнасьць {{GENDER:$6|$3}} да групы з $4 на $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групаў",
        "logentry-rights-autopromote": "$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
index f14a77b..b6c5cf0 100644 (file)
        "filerevert-badversion": "Не съществува предишна локална версия на файла със зададения времеви отпечатък.",
        "filedelete": "Изтриване на $1",
        "filedelete-legend": "Изтриване на файл",
-       "filedelete-intro": "На път сте да изтриете '''[[Media:$1|$1]]''' заедно с цялата му редакционна история.",
+       "filedelete-intro": "На път сте да изтриете файла '''[[Media:$1|$1]]''' заедно с цялата му редакционна история.",
        "filedelete-intro-old": "Изтривате версията на '''[[Media:$1|$1]]''' към [$4 $3, $2].",
        "filedelete-comment": "Причина:",
        "filedelete-submit": "Изтриване",
        "delete-legend": "Изтриване",
        "historywarning": "<strong>Внимание:</strong> Страницата, която възнамерявате да изтриете, има история с приблизително $1 {{PLURAL:$1|редакция|редакции}}:",
        "historyaction-submit": "Показване",
-       "confirmdeletetext": "Ð\9dа Ð¿Ñ\8aÑ\82 Ñ\81Ñ\82е Ð±ÐµÐ·Ð²Ñ\8aзвÑ\80аÑ\82но Ð´Ð° Ð¸Ð·Ñ\82Ñ\80иеÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð»Ð¸ Ñ\84айл, Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81 Ñ\86Ñ\8fлаÑ\82а Ð¿Ñ\80илежаÑ\89а Ñ\80едакÑ\86ионна Ð¸Ñ\81Ñ\82оÑ\80иÑ\8f, Ð¾Ñ\82 Ð±Ð°Ð·Ð°Ñ\82а Ð¾Ñ\82 Ð´Ð°Ð½Ð½Ð¸.\nПотвърдете, че искате това, разбирате последствията и правите това в съответствие с [[{{MediaWiki:Policy-url}}|линията на поведение]].",
+       "confirmdeletetext": "Ð\9dа Ð¿Ñ\8aÑ\82 Ñ\81Ñ\82е Ð´Ð° Ð¸Ð·Ñ\82Ñ\80иеÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81 Ñ\86Ñ\8fлаÑ\82а Ñ\9d Ñ\80едакÑ\86ионна Ð¸Ñ\81Ñ\82оÑ\80иÑ\8f.\nПотвърдете, че искате това, разбирате последствията и правите това в съответствие с [[{{MediaWiki:Policy-url}}|линията на поведение]].",
        "actioncomplete": "Действието беше изпълнено",
        "actionfailed": "Действието не сполучи",
        "deletedtext": "Страницата „$1“ беше изтрита. Вижте $2 за запис на последните изтривания.",
index a54966c..2863646 100644 (file)
        "broken-file-category": "تاکدیمان گو خرابین لینکان بی فایلا",
        "about": "بی باره ها",
        "article": "محتوائین تاکدیم",
-       "newwindow": "(نوکین دَروازگی تا پاچ بیئت)",
+       "newwindow": "(نوکین دروازگئ تا پاچ بکنێت)",
        "cancel": "کنسیل",
        "moredotdotdot": "گیشتیر...",
        "morenotlisted": "ای لڑ\t لیست کامل نه اینت.",
        "wrongpassword": "ای پاسورد یا چیهر گالا که داخل کورته ایت صحیح نه اینت.\nمهربانی بکنیت، پدا امتحان بکینت.",
        "wrongpasswordempty": "ای پاسورد یا چیهر گالا که داخل کورته ایت ، خالی اینت.\nمهربانی پدا کوشش بکنیت.",
        "passwordtooshort": "پاسورد باید کم شه کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته بیئت.",
-       "passwordtoolong": "پاسورد نه باید گیشتیر شه {{PLURAL:$1|۱ حرف|$1 حرفا}}  داشته بیئت.",
+       "passwordtoolong": "پاسوردئ حروف نه‌باید شه {{PLURAL:$1|۱ کلمه|$1 کلمه}}‌ئا گیشتیر به‌ینت.",
        "password-name-match": "شمی چیهرگال یا پاسورد باید شه شمی کار زورکی ئین ناما فرق داشته بیئت.",
        "password-login-forbidden": "استفاده شه ای کار زوروکی ناما و شه ای چیهرگالا اجازه نه اینت.",
        "mailmypassword": "پاک کورتین پاسوردئ",
        "sitejspreview": "'''شه هوشا مه بَریت که شما فقط جاوااسکریپت ئی دیم دیست ئا گیندیت.'''\n'''ای جاوااسکریپت تا انون ذخیره نه بوته!'''",
        "updated": "(نوک بوته ئین)",
        "note": "'''نکته:'''",
-       "previewnote": "'''بئ Ù\87Ù\88Ø´ Ø¦Ø§ Ø¯Ø§Ø´ØªÙ\87 Ø¨Û\8cئت Ú©Ù\87 Ø§Û\8c Ù¾Ù\87 Ù\82ت Ø¯Û\8cÙ\85 Ø§Û\8cÙ\86ت.'''\nØ´Ù\85Û\8c ØªØºÛ\8cرات ØªØ§ Ø§Ù\86Ù\88Ù\86 Ø²Ù\87 Ø®Û\8cرÙ\87 Ù\86Ù\87 بوته انت!",
-       "continue-editing": "شوتین بی ایڈ\tیٹ\tی نیمگا",
+       "previewnote": "'''Ø´Ù\88Ù\85Û\8c Ù\87Ù\88شا Ø¨Û\8cت Ú©Ù\87 Ø§Û\8c Ù\81Ù\82Ø· Ø¯Û\8cÙ\85â\80\8cدÛ\8cست Ø§Û\8cÙ\86ت.'''\nÙ\88 Ø´Ù\88Ù\85Û\8c ØªØºÛ\8cر Ù\88 Ù¹Ú¯Ù\84 ØªØ§ Ø§Ù\86Ù\88Ù\86 Ø°Ø®Û\8cرÙ\87 Ù\86Ù\87â\80\8cبوته انت!",
+       "continue-editing": "شوتین په ایڈیٹ کورتینئ بخشا",
        "editing": "به $1 ئی دستکاری کورتینێ حالا",
        "creating": "$1 جۆڑ ئه بيت",
        "editingsection": "به $1 ئی دستکاری کورتینێ حالا (چونڑ)",
        "difference-title": "$1: نخسه ئانی مانجینا فرق",
        "difference-title-multipage": "$1 و $2:تاکدیمانئ مانجینی فرق",
        "difference-multipage": "(تاکدیمانی مانجینا فرق)",
-       "lineno": "$1‌ئین سطر:",
+       "lineno": "$1‌ین سطر:",
        "compareselectedversions": "انتخاب بوته ئین نخسه ئانی مقایسه",
        "showhideselectedversions": "انتخاب بوته ئین نخسه ئانی پدیداری تغیر",
        "editundo": "خنثی‌ کورتین",
        "shown-title": "نشان داتین $1 ئی {{PLURAL:$1|نتیجه|نتیجه}} بی هر تاکدیمی تا",
        "viewprevnext": "نشان داتین ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''تاکدیمئ گو «[[:$1]]» ئی ئنوانا بی ای ویکی تا وجود داریت .'''",
-       "searchmenu-new": "<strong> «[[:$1]]» ئی تاکدیما بی ای ویکی تا جوڑ بکنیت!</strong> {{PLURAL:$2|0=همچنان آ تاکدیما کی گو وتئ گشتینا ودئ کورته ایت، بگیندیت.|و همچنان وتئ گشتینئ ودئ بوته ئین نتیجه ئانا بگیندیت.}}",
+       "searchmenu-new": "<strong> «[[:$1]]» ئی تاکدیما بِه ای ویکی‌ئی تا جۆڑ بکنێت!</strong> {{PLURAL:$2|0=همیرنگ آ دیمان که گو وتي گشتینا ودي کورته‌ایت، بگیندێت .|و هم وتي گشتینئ نتیجه‌ئانه که ودي بوته انت، بگیندێت.}}",
        "searchprofile-articles": "تاکدیمانی محتوا",
        "searchprofile-images": "چینکه رسانه ئی",
        "searchprofile-everything": "موچی چیز",
        "search-showingresults": "{{PLURAL:$4|نتیجه ئان <strong>$1</strong> شه <strong>$3</strong>|نتیجه ئان <strong>$1 - $2</strong> شه <strong>$3</strong>}}",
        "search-nonefound": "نتیجه په چیزی که شما لوٹیته‌تیت به‌دست نه یات.",
        "powersearch-legend": "پیشرفته ئین گشتین",
-       "powersearch-ns": "گشتین بی نامئ فضائان:",
+       "powersearch-ns": "گشتین بِه نامئ فضا ئاني تا:",
        "powersearch-togglelabel": "چیک کورتین:",
        "powersearch-toggleall": "موچ",
        "powersearch-togglenone": "هیچ‌گوجام",
-       "powersearch-remember": "اتنخاب په دیگرین گشتین ئان بی خاتیر داشته بئیت",
+       "powersearch-remember": "انتخاب په دیگه گشتین‌ئاني خاتیرا شه شومی هوشا مه‌روت",
        "search-external": "خارجی ئین گشتین",
        "searchdisabled": "گشتین بی {{SITENAME}} ئی تا فعال نه اینت.\nموقتاً توانیت شه Google ئی گردگ ئا استفاده کنیت.\nتوجه کنیت که بدست آته ئین نتایج شه گردگا بی آ ممکینین طریقه ئا مه بیئنت.",
        "search-error": "یک خطایی بی گردگئ وختا رخ داته : $1",
        "sp-contributions-toponly": "فقط آخیرین نخسه ئانی  ایڈیٹ نشان داته بئنت",
        "sp-contributions-newonly": "فقط نشان داتین آ ایڈیٹانی که دیمی جۆڑ کورتینی هستنت",
        "sp-contributions-submit": "گشتین",
-       "whatlinkshere": "لینک بئ ای تاکدیما",
+       "whatlinkshere": "لینک په ای تاکدیما",
        "whatlinkshere-title": "تاکدیمان که گو  «$1» لینک دارنت",
        "whatlinkshere-page": "تاکدیم:",
        "linkshere": "جهلگین دیم بئ  '''[[:$1]]''' ئا لینک داریت:",
        "ipbemailban": "دیمگیری شه ایمیلی دیم داتینا",
        "ipbsubmit": "ای کار زوروک بسته بیئت",
        "ipbother": "دیگه وخت:",
-       "ipboptions": "Û² Ø³Ø§Ø¦Øª:2 hours,Û± Ø±Ù\88Ú\86:1 day,Û³ Ø±Ù\88Ú\86:3 days,Û± Ù\87پتگ:1 week,Û² Ù\87پتگ:2 weeks,Û± Ù\85اÙ\87:1 month,Û³ Ù\85اÙ\87:3 months,Û¶ Ù\85اÙ\87:6 months,Û± Ø³Ø§Ù\84:1 year,بÛ\8câ\80\8cپاÛ\8cاÙ\86:infinite",
+       "ipboptions": "Û² Ø³Ø§Ø¹Øª:2 hours,Û± Ø±Ù\88Ú\86:1 day,Û³ Ø±Ù\88Ú\86:3 days,Û± Ù\87پتÙ\87â\80\8cÚ¯:1 week,Û² Ù\87پتÙ\87â\80\8cÚ¯:2 weeks,Û± Ù\85اÙ\87:1 month,Û³ Ù\85اÙ\87:3 months,Û¶ Ù\85اÙ\87:6 months,Û± Ø³Ø§Ù\84:1 year,ابدÙ\8a:infinite",
        "ipbhidename": "چیهرداتین کار زوروکئ ناما شه ایڈیٹان و لیستا",
        "ipbwatchuser": "ای کار زوروکئ ، کارزوروکین و حبر وگپ ئی دیمانی دیستین",
        "ipb-disableusertalk": "دیمگیری کورتین شه ایڈیٹ کورتین ئا گپ و حبر ئی تاکدیمئ شه کار زوروکئ جیندئ نیمگا وختی که آ بلاک اینت",
index 1a205ff..1fa3148 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|zamknul|zamknula}} stránku $3 $4 [kaskádovým zámkem]",
        "logentry-protect-modify": "$1 {{GENDER:$2|změnil|změnila}} úroveň ochrany stránky $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|změnil|změnila}} úroveň ochrany stránky $3 $4 [kaskádový zámek]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|změnil|změnila}} členství {{GENDER:$3|uživatele|uživatelky}} $3 ve skupinách z $4 na $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|změnil|změnila}} členství {{GENDER:$6|uživatele|uživatelky}} $3 ve skupinách z $4 na $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|byl automaticky povýšen|byla automaticky povýšena}} z $4 na $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|načetl|načetla}} $3",
index 2b45b47..454c0b1 100644 (file)
@@ -16,7 +16,8 @@
                        "Macofe",
                        "Matma Rex",
                        "Diafol",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Dafyddt"
                ]
        },
        "tog-underline": "Tanlinellu cysylltiadau:",
        "specialloguserlabel": "Gwneuthurwr:",
        "speciallogtitlelabel": "Targed (teitl neu {{ns:user}}:username ar gyfer y defnyddiwr):",
        "log": "Logiau",
+       "logeventslist-submit": "Dangos",
        "all-logs-page": "Pob lòg cyhoeddus",
        "alllogstext": "Mae pob cofnod yn holl logiau {{SITENAME}} wedi cael eu rhestru yma.\nGallwch weld chwiliad mwy penodol trwy ddewis y math o lòg, enw'r defnyddiwr, neu'r dudalen benodedig.\nSylwer bod llythrennau mawr neu fach o bwys i'r chwiliad.",
        "logempty": "Does dim eitemau yn cyfateb yn y lòg.",
        "cachedspecial-viewing-cached-ts": "Rydych yn edrych ar fersiwn o'r dudalen a roddwyd ar gadw mewn celc. Gall fod yn wahanol i'r fersiwn cyfoes.",
        "cachedspecial-refresh-now": "Gweld y diwygiad diweddaraf.",
        "categories": "Categorïau",
+       "categories-submit": "Dangos",
        "categoriespagetext": "Mae'r {{PLURAL:$1|categori|categori|categorïau|categorïau|categorïau|categorïau}} isod yn cynnwys tudalennau neu ffeiliau amlgyfrwng.\nNi ddangosir [[Special:UnusedCategories|categorïau gwag]] yma.\nGweler hefyd [[Special:WantedCategories|categorïau sydd eu hangen]].",
        "categoriesfrom": "Dangos categorïau gan ddechrau gyda:",
        "deletedcontributions": "Cyfraniadau defnyddiwr i dudalennau dilëedig",
        "wlheader-showupdated": "Mae tudalennau sydd wedi newid ers i chi eu gweld ddiwethaf wedi'u '''hamlygu'''.",
        "wlnote": "Isod, {{PLURAL:$1|yw'r golygiad diweddaraf |yw'r golygiadau diweddaraf <strong>$1</strong> changes}} yn y {{PLURAL:$2|hour|<strong>$2</strong> awr}}, fel ag y mae ar $3, $4.",
        "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:",
        "wlshowhideminor": "golygiadau bychan",
        "wlshowhidebots": "botiau",
        "delete-confirm": "Dileu \"$1\"",
        "delete-legend": "Dileu",
        "historywarning": "<strong>Rhybudd:</strong> bu tua $1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad|golygiad|o olygiadau}} yn hanes y dudalen rydych ar fin ei dileu:",
+       "historyaction-submit": "Dangos",
        "confirmdeletetext": "Rydych chi ar fin dileu tudalen neu ddelwedd, ynghŷd â'i hanes, o'r data-bas, a hynny'n barhaol.\nOs gwelwch yn dda, cadarnhewch eich bod chi wir yn bwriadu gwneud hyn, eich bod yn deall y canlyniadau, ac yn ei wneud yn ôl [[{{MediaWiki:Policy-url}}|polisïau {{SITENAME}}]].",
        "actioncomplete": "Wedi cwblhau'r weithred",
        "actionfailed": "Methodd y weithred",
index 77e9418..2a80b92 100644 (file)
        "botpasswords-label-delete": "Slet",
        "botpasswords-label-resetpassword": "Nulstil adgangskode",
        "botpasswords-label-grants": "Tilgængelige bevillinger:",
+       "botpasswords-label-restrictions": "Begrænsninger for brug:",
        "resetpass_forbidden": "Adgangskoder kan ikke ændres",
        "resetpass-no-info": "Du skal være logget på for at komme direkte til denne side.",
        "resetpass-submit-loggedin": "Skift adgangskode",
        "mergehistory-empty": "Der findes ingen sammenflettelige udgaver",
        "mergehistory-done": "$3 {{PLURAL:$3|version|versioner}} af $1 blev flettet sammen med [[:$2]].",
        "mergehistory-fail": "Sammenfletningen kunne ikke gennemføres. Vær venlig at kontrollere sidenavne og tidsafgrænsning.",
+       "mergehistory-fail-bad-timestamp": "Tidsangivelsen er ugyldig.",
        "mergehistory-fail-toobig": "Ude af stand til at flette historiken sammen, fordi flere end grænsen på $1 {{PLURAL:$1|version|versioner}} ville blive flyttet.",
        "mergehistory-no-source": "Kildesiden $1 findes ikke.",
        "mergehistory-no-destination": "Destinationssiden $1 findes ikke.",
        "userrights": "Håndtering af brugerrettigheder",
        "userrights-lookup-user": "Administrér brugergrupper",
        "userrights-user-editname": "Skriv et brugernavn:",
-       "editusergroup": "Redigér brugergrupper",
+       "editusergroup": "Redigér {{GENDER:$1|brugergrupper}}",
        "editinguser": "Ændrer brugerrettigheder for {{GENDER:$1|brugeren}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Redigér brugergrupper",
-       "saveusergroups": "Gem brugergrupper",
+       "saveusergroups": "Gem {{GENDER:$1|brugergrupper}}",
        "userrights-groupsmember": "Medlem af:",
        "userrights-groupsmember-auto": "Implicit medlem af:",
        "userrights-groups-help": "Du kan ændre denne brugers gruppemedlemsskaber:\n* Et markeret afkrydsningsfelt betyder at brugeren er medlen af den pågældende gruppe.\n* Et umarkeret felt betyder at brugeren ikke er medlem af gruppen.\n* En * betyder at du ikke kan fravælge gruppen, når den først er tilføjet og omvendt.",
        "upload-dialog-button-done": "Færdig",
        "upload-dialog-button-save": "Gem",
        "upload-dialog-button-upload": "Læg op",
+       "upload-form-label-infoform-title": "Detaljer",
        "upload-form-label-infoform-name": "Navn",
        "upload-form-label-infoform-description": "Beskrivelse",
        "upload-form-label-usage-filename": "Filnavn",
        "mostrevisions": "Sider med de fleste ændringer",
        "prefixindex": "Alle sider der begynder med",
        "prefixindex-namespace": "Alle sider (i navnerummet $1) der begynder med",
+       "prefixindex-submit": "Vis",
        "prefixindex-strip": "Strip præfiks i listen",
        "shortpages": "Korte sider",
        "longpages": "Lange sider",
        "usereditcount": "{{PLURAL:$1|én redigering|$1 redigeringer}}",
        "usercreated": "{{GENDER:$3|Oprettet}} den $1 $2",
        "newpages": "Nyeste sider",
+       "newpages-submit": "Vis",
        "newpages-username": "Brugernavn:",
        "ancientpages": "Ældste sider",
        "move": "Flyt",
        "apisandbox-intro": "Brug denne side til at eksperimentere med '''MediaWiki web service API'''.\nVi henviser til [//www.mediawiki.org/wiki/API:Main_page dokumentationen af API] for yderligere oplysninger om brug af API.  Eksempel: [//www.mediawiki.org/wiki/API#A_simple_example få indholdet af en forside]. Vælg en handling at se flere eksempler.\n\nBemærk, at selv om dette er en sandkasse, vil handlinger du udfører på denne side redigere wikien.",
        "apisandbox-submit": "Lav forespørgsel",
        "apisandbox-reset": "Ryd",
-       "apisandbox-examples": "Eksempel",
-       "apisandbox-results": "Resultat",
+       "apisandbox-examples": "Eksempler",
+       "apisandbox-results": "Resultater",
        "apisandbox-request-url-label": "Forespurgt URL:",
-       "apisandbox-request-time": "Forespørgselstid: $1",
+       "apisandbox-request-time": "Forespørgselstid: {{PLURAL:$1|$1 ms}}",
        "booksources": "Bogkilder",
        "booksources-search-legend": "Søgning efter bøger",
        "booksources-search": "Søg",
        "rollback-success": "Ændringerne fra $1 er fjernet,\nog den seneste version af $2 er gendannet.",
        "sessionfailure-title": "Sessionsfejl",
        "sessionfailure": "Der lader til at være et problem med din loginsession; denne handling blev annulleret som en sikkerhedsforanstaltning mod kapring af sessionen. Tryk på \"tilbage\"-knappen og genindlæs den side du kom fra, og prøv dernæst igen.",
+       "changecontentmodel-title-label": "Sidetitel",
+       "changecontentmodel-reason-label": "Begrundelse:",
        "protectlogpage": "Skrivebeskyttelseslog",
        "protectlogtext": "Herunder er en liste over ændringer til sidebeskyttelser.\nSe [[Special:ProtectedPages|listen over beskyttede sider]] for listen over sidebeskyttelser, der er i kraft i øjeblikket.",
        "protectedarticle": "[[$1]] beskyttet",
        "movenotallowedfile": "Du har ikke tilladelse til at flytte filer.",
        "cant-move-user-page": "Du har ikke tilladelse til at flytte brugersider (bortset fra undersider).",
        "cant-move-to-user-page": "Du har ikke tilladelse til at flytte brugersider (bortset fra til brugerundersider).",
-       "newtitle": "Til ny titel",
+       "newtitle": "Ny titel:",
        "move-watch": "Overvåg siden",
        "movepagebtn": "Flyt side",
        "pagemovedsub": "Flytning gennemført",
        "version-libraries": "Installerede biblioteker",
        "version-libraries-library": "Bibliotek",
        "version-libraries-version": "Version",
+       "version-libraries-license": "Licens",
+       "version-libraries-description": "Beskrivelse",
+       "version-libraries-authors": "Forfattere",
        "redirect": "Omdirigering pga. fil, bruger-, side- eller udgave-ID",
        "redirect-summary": "Denne specialside omdirigerer til en fil (hvis filnavnet er angivet), en side (hvis udgave ID'et eller side ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet). Eksempler på brug: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] eller [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Vis",
        "tags-activate-submit": "Aktiver",
        "tags-deactivate-reason": "Årsag:",
        "tags-deactivate-submit": "Deaktiver",
-       "tags-edit-existing-tags-none": "\"Ingen\"",
+       "tags-edit-existing-tags-none": "<em>Ingen</em>",
        "tags-edit-reason": "Årsag:",
        "comparepages": "Sammenlign sider",
        "compare-page1": "Side 1",
        "feedback-subject": "Emne:",
        "feedback-submit": "Send",
        "feedback-thanks": "Tak! Dine tilbagemeldinger er blevet noteret på siden \"[$2 $1]\".",
+       "feedback-thanks-title": "Tak!",
        "searchsuggest-search": "Søg",
        "searchsuggest-containing": "indeholder...",
        "api-error-badaccess-groups": "Du har ikke tilladelse til at overføre filer til denne wiki.",
        "limitreport-ppvisitednodes": "Antal nodebesøg for preprocessor",
        "limitreport-ppgeneratednodes": "Antal noder genereret af preprocessor",
        "limitreport-postexpandincludesize": "Inkluderet størrelse efter udvidelse",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-templateargumentsize": "Skabelon argumentstørrelse",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-expansiondepth": "Største udvidelsesdybde",
        "limitreport-expensivefunctioncount": "Antal dyre parserfunktioner",
        "expandtemplates": "Udfold skabeloner",
        "pagelang-select-lang": "Vælg sprog",
        "right-pagelang": "Ændre sidesproget",
        "mediastatistics": "Mediestatistik",
+       "mediastatistics-table-mimetype": "MIME-type",
+       "mediastatistics-table-extensions": "Mulige filendelser",
        "mediastatistics-table-count": "Antal filer",
        "mediastatistics-table-totalbytes": "Samlet størrelse",
        "mediastatistics-header-unknown": "Ukendt",
        "mediastatistics-header-text": "Tekstformat",
        "mediastatistics-header-executable": "Kørbare filer",
        "mediastatistics-header-archive": "Komprimerede formater",
+       "mediastatistics-header-total": "Alle filer",
        "json-error-state-mismatch": "Ugyldig eller fejlbehæftet JSON",
        "json-error-syntax": "Syntaksfejl",
        "special-characters-group-latin": "Latin",
index 0b1a874..c680d81 100644 (file)
        "hidden-category-category": "Versteckte Kategorien",
        "category-subcat-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Unterkategorie:|{{PLURAL:$1|Folgende Unterkategorie ist eine von insgesamt $2 Unterkategorien in dieser Kategorie:|Es werden $1 von insgesamt $2 Unterkategorien in dieser Kategorie angezeigt:}}}}",
        "category-subcat-count-limited": "Diese Kategorie enthält folgende {{PLURAL:$1|Unterkategorie|$1 Unterkategorien}}:",
-       "category-article-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Seite:|{{PLURAL:$1|Folgende Seite ist eine von insgesamt $2 Seiten in dieser Kategorie:|Es werden $1 von insgesamt $2 Seiten in dieser Kategorie angezeigt:}}}}",
+       "category-article-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Seite:|{{PLURAL:$1|Folgende Seite ist eine von insgesamt $2 Seiten in dieser Kategorie:|Es werden $1 von insgesamt $2 Seiten in dieser Kategorie angezeigt.}}}}",
        "category-article-count-limited": "Folgende {{PLURAL:$1|Seite ist|$1 Seiten sind}} in dieser Kategorie enthalten:",
        "category-file-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Datei:|{{PLURAL:$1|Folgende Datei ist eine von insgesamt $2 Dateien in dieser Kategorie:|Es werden $1 von insgesamt $2 Dateien in dieser Kategorie angezeigt:}}}}",
        "category-file-count-limited": "Folgende {{PLURAL:$1|Datei ist|$1 Dateien sind}} in dieser Kategorie enthalten:",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|schützte}} die Seite $3 $4 [kaskadierend]",
        "logentry-protect-modify": "$1 {{GENDER:$2|änderte}} den Schutzstatus der Seite $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|änderte}} den Schutzstatus der Seite $3 $4 [kaskadierend]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für {{GENDER:$3|$3}} von $4 zu $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für {{GENDER:$6|$3}} von $4 zu $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3",
        "logentry-rights-autopromote": "$1 wurde automatisch von $4 zu $5 {{GENDER:$2|zugeordnet}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|lud}} $3 hoch",
index f2cdbe2..f8c267a 100644 (file)
        "userpage-userdoesnotexist": "User account \"$1\" is not registered.\nPlease check if you want to create/edit this page.",
        "userpage-userdoesnotexist-view": "User account \"$1\" is not registered.",
        "blocked-notice-logextract": "This user is currently blocked.\nThe latest block log entry is provided below for reference:",
-       "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Clear the cache in <em>Tools → Preferences</em>",
+       "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Go to <em>Menu → Settings</em> (<em>Opera → Preferences</em> on a Mac) and then to <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "usercssyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new CSS before saving.",
        "userjsyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new JavaScript before saving.",
        "usercsspreview": "<strong>Remember that you are only previewing your user CSS.\nIt has not yet been saved!</strong>",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protected}} $3 $4 [cascading]",
        "logentry-protect-modify": "$1 {{GENDER:$2|changed}} protection level for $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|changed}} protection level for $3 $4 [cascading]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for {{GENDER:$3|$3}} from $4 to $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for {{GENDER:$6|$3}} from $4 to $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|changed}} group membership for $3",
        "logentry-rights-autopromote": "$1 was automatically {{GENDER:$2|promoted}} from $4 to $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
index ddf8744..eba4a99 100644 (file)
        "talkpagelinktext": "diskuto",
        "specialpage": "Speciala Paĝo",
        "personaltools": "Personaj iloj",
-       "articlepage": "Rigardi artikolon",
+       "articlepage": "Vidi paĝenhavon",
        "talk": "Diskuto",
        "views": "Vidoj",
        "toolbox": "Iloj",
-       "userpage": "Rigardi personan paĝon",
+       "userpage": "Vidi uzantan paĝon",
        "projectpage": "Rigardi projektopaĝon",
        "imagepage": "Vidi dosieropaĝon",
        "mediawikipage": "Vidi mesaĝopaĝon",
        "perfcached": "La sekvantaj informoj venas el kaŝmemoro kaj eble ne estas ĝisdataj. Maksimumo de {{PLURAL:$1|unu rezulto estas disponebla|$1 rezultoj estas disponeblaj}} en la kaŝmemoro.",
        "perfcachedts": "La jenaj datumoj estas el kaŝmemoro kaj estis laste ĝisdatigitaj $1. Maksimumo de {{PLURAL:$4|unu rezulto estas disponebla|$4 rezultoj estas disponeblaj}} en la kaŝmemoro.",
        "querypage-no-updates": "Ĝisdatigoj por ĉi tiu paĝo estas nune neebligitaj.\nDatumoj ĉi tie ne estos nune refreŝigitaj.",
-       "viewsource": "Rigardi vikitekston",
+       "viewsource": "Vidi vikitekston",
        "viewsource-title": "Vidi fonton por $1",
        "actionthrottled": "Agado limigita",
        "actionthrottledtext": "Por kontraŭi misuzon, vi estas limigita farante ĉi tiun agon tro pluroble en mallonga tempdaŭro, kaj vi transpasis ĉi tiun limon. Bonvolu refaru post kelkaj minutoj.",
        "protectedpagetext": "Tiu ĉi paĝo estas ŝlosita por malebligi redaktadon.",
-       "viewsourcetext": "Vi povas rigardi kaj kopii la fonton de la paĝo.",
+       "viewsourcetext": "Vi povas vidi kaj kopii la fonton de la paĝo.",
        "viewyourtext": "Vi povas vidi kaj kopii la fonton de <strong>viaj redaktoj</strong> al ĉi tiu paĝo.",
        "protectedinterface": "Ĉi tiu paĝo provizas interfacan tekston por la programaro, kaj estas ŝlosita por malebligi misuzon.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
        "editinginterface": "<strong>Atentu:</strong> Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.\nŜanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
        "noemail": "Retpoŝtadreso ne estas registrita por uzanto \"$1\".",
        "noemailcreate": "Vi devas provizi validan retadreson",
        "passwordsent": "Oni sendis novan pasvorton al la retpoŝtadreso\nregistrita por \"$1\".\nBonvolu ensaluti denove ricevinte ĝin.",
-       "blocked-mailpassword": "Via IP-adreso estas forbarita de redaktado, kaj tial\nne rajtas uzi la pasvorto-rekovran funkcion por malebligi misuzon.",
+       "blocked-mailpassword": "Via IP-adreso estas forbarita de redaktado. Por preventi fiuzojn, la pasvorto-restaŭron estas malpermesita per tiu IP-adreso.",
        "eauthentsent": "Konfirma retmesaĝo estis sendita al la nomita retadreso. Antaŭ ol iu ajn alia mesaĝo estos sendita al la konto, vi devos sekvi la instrukciojn en la mesaĝo por konfirmi ke la konto ja estas via.",
        "throttled-mailpassword": "Retpoŝto kun reŝargita pasvorto estis jam sendita ene de la {{PLURAL:$1|lasta horo|lastaj $1 horoj}}.\nPor preventi misuzon, nur unu reŝargita pasvorto estos sendita dum {{PLURAL:$1|horo|$1 horoj}}.",
        "mailerror": "Okazis eraro sendante retpoŝtaĵon: $1",
        "newpassword": "Nova pasvorto",
        "retypenew": "Retajpi novan pasvorton",
        "resetpass_submit": "Fari pasvorton kaj ensaluti",
-       "changepassword-success": "Via pasvorto estis sukcese ŝanĝita!",
+       "changepassword-success": "Via pasvorto estis ŝanĝita!",
        "changepassword-throttled": "Vi tro ofte provis ensaluti al ĉi tiu konto.\nBonvolu atendi $1 antaŭ ol reprovi.",
        "botpasswords": "Robotaj pasvortoj",
        "botpasswords-summary": "<em>Robotaj pasvortoj</em> ebligas aliron al uzanto-konto per API sen uzado de ĉefaj ensalutaj datumoj de la konto. La uzanto-rajtoj disponeblaj dum ensaluto per robota pasvorto povas esti limigitaj.\n\nSe vi ne scias, kial vi devus fari tion, vi probable maldevus fari tion. Neniu devus peti vin generi pasvorton tie ĉi kaj transdoni ĝin al li.",
        "botpasswords-label-cancel": "Nuligi",
        "botpasswords-label-delete": "Forigi",
        "botpasswords-label-resetpassword": "Rekomencigi la pasvorton",
+       "botpasswords-label-grants": "Uzeblaj permesdonoj:",
+       "botpasswords-help-grants": "Ĉiu permesdono provizas aliron al listitaj uzantaj permisoj, kiujn uzantkonto jam havas. Vidu la [[Special:ListGrants|tabelon de permisdonoj]] por pli da informo.",
        "botpasswords-label-restrictions": "Limigoj de uzado:",
+       "botpasswords-label-grants-column": "Permisdonita",
        "botpasswords-bad-appid": "La robota nomo \"$1\" estas malvalida.",
        "botpasswords-insert-failed": "Aldono de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi jam estis aldonita?",
        "botpasswords-update-failed": "Ĝisdatigo de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi estis forigita?",
        "botpasswords-updated-body": "La robota pasvorto por robota nomo \"$1\" de la uzanto \"$2\" estis ĝisdatigita.",
        "botpasswords-deleted-title": "Robota pasvorto forigita",
        "botpasswords-deleted-body": "La robota pasvorto por robota nomo \"$1\" de la uzanto \"$2\" estis forigita.",
+       "botpasswords-newpassword": "La nova pasvorto por ensaluti kun <strong>$1</strong> estas <strong>$2</strong>. <em>Bonvolu registri tiun por referenconto.",
+       "botpasswords-no-provider": "Robotopasvortensalutoprovizilo (''BotPasswordsSessionProvider'') maldisponeblas.",
+       "botpasswords-restriction-failed": "Limigoj pri robota pasvorto maleblas tiun uzantonomon.",
+       "botpasswords-invalid-name": "La difinita uzantnomo malenhavas la robotopasvortan disigilon (\"$1\").",
+       "botpasswords-not-exist": "Uzanto \"$1\" ne havas robotopasvorton, kiu nomiĝas \"$2\".",
        "resetpass_forbidden": "Pasvortoj ne estas ŝanĝeblaj",
        "resetpass-no-info": "Vi devas ensaluti por atingi ĉi tiun paĝon rekte.",
        "resetpass-submit-loggedin": "Ŝanĝi pasvorton",
        "passwordreset-emailtext-user": "Uzanto $1 de {{SITENAME}} petis restarigo de via pasvorto por {{SITENAME}}\n($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi devas ensaluti kaj elekti novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas ŝanĝi\nĝin, vi povas ignori ĉi tiun mesaĝon kaj uzi vian malnovan pasvorton.",
        "passwordreset-emailelement": "Salutnomo: \n$1\n\nProvizora pasvorto: \n$2",
        "passwordreset-emailsentemail": "Se tiu ĉu retpoŝta adreso estas kunligita kun via konto, tiam al ĉi tiu adreso estos sendita retpoŝto por renovigi pasvorton.",
+       "passwordreset-emailsentusername": "Se estas retpoŝta adreso, kiu estas asocigita kun tiu uzantnomo, tiam sendos retpôstan mesaĝon pri reasigno de pasvorto.",
        "passwordreset-emailsent-capture": "Retpoŝto kun renovigita pasvorto estis sendita, kiu estas montrata malsupre.",
        "passwordreset-emailerror-capture": "Retpoŝto kun renovigita pasvorto estis generita, montrata sube, sed sendado al la {{GENDER:$2|uzanto}} malsukcesis: $1",
        "changeemail": "Ŝanĝi aŭ forigi retpoŝtadreson",
        "nosuchsectiontext": "Vi provis redakti sekcion, kiu ne ekzistas.\nĜi eble estis movita aŭ forigita dum vi rigardis la paĝon.",
        "loginreqtitle": "Nepre ensaluti",
        "loginreqlink": "ensaluti",
-       "loginreqpagetext": "Vi devas $1 por rigardi aliajn paĝojn.",
+       "loginreqpagetext": "Bonvolu $1 por vidi aliajn paĝojn.",
        "accmailtitle": "La pasvorto estas sendita.",
        "accmailtext": "Hazarde generita pasvorto por [[User talk:$1|$1]] estis sendita al $2.\n\nLa pasvorto por ĉi tiu nova konto povas esti ŝanĝita en la paĝo ''[[Special:ChangePassword|ŝanĝi pasvorton]]'' dum ensalutado.",
        "newarticle": "(Nova)",
        "copyrightwarning2": "Bonvolu noti ke ĉiuj kontribuoj al {{SITENAME}} povas esti reredaktitaj, ŝanĝitaj aŭ forigitaj de aliaj kontribuantoj. Se vi ne deziras, ke viaj verkoj estu senkompate reredaktitaj, ne publikigu ilin ĉi tie.<br />\nVi ankaŭ promesu al ni ke vi verkis tion mem aŭ kopiis el publika domajno aŭ simila libera fonto (vidu $1 por detaloj).\n'''NE PROPONU KOPIRAJTITAJN VERKOJN SEN PERMESO!'''",
        "editpage-cannot-use-custom-model": "La enhavomodelo de ĉi tiu paĝo ne povas esti ŝanĝata.",
        "longpageerror": "'''Eraro: La teksto, kiun vi prezentis, longas {{PLURAL:$1|$1 kilobajton|$1 kilobajtojn}}, kio estas pli longa ol la maksimumo de {{PLURAL:$2|$2 kilobajto|$2 kilobajtoj}}.'''\nĜi ne povas esti konservita.",
-       "readonlywarning": "'''AVERTO: La datumbazo estas ŝlosita por teknika laboro, do vi ne povas konservi viajn redaktojn ĉi-momente.\nVi eble volus elkopii kaj englui la tekston al tekstdosiero por konservi ĝin por posta uzo.'''\n\nLa administranto kiu ŝlosis ĝin donis ĉi tiun eksplikaĵon: $1",
+       "readonlywarning": "'''AVERTO: La datumbazo estas ŝlosita por teknika laboro, do vi ne povas konservi viajn redaktojn ĉi-momente.'''\nVi eble volus elkopii kaj alglui vian tekston al tekstdosiero kaj konservi ĝin por posta uzo.\n\nLa administranto kiu ŝlosis ĝin donis ĉi tiun eksplikaĵon: $1",
        "protectedpagewarning": "'''Averto: Ĉi tiu paĝo estas ŝlosita kontraŭ redaktado krom de administrantoj.'''\nJen la lasta protokolero provizita por via referenco:",
        "semiprotectedpagewarning": "'''Notu:''' Ĉi tiu paĝo estas ŝlosita tiel ke nur ensalutintaj uzantoj povas redakti ĝin.\nJen la lasta protokolero por via referenco:",
        "cascadeprotectedwarning": "<strong>Averto:</strong> Ĉi tiu paĝo estas ŝlosita, tiel ke nur uzantoj kun administrantaj privilegioj povas redakti ĝin, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan kaskade protektitan paĝon|sekvajn kaskade protektitajn paĝojn}}:",
        "permissionserrors": "Eraro pri permeso",
        "permissionserrorstext": "Vi ne rajtas fari tion pro la {{PLURAL:$1|sekva kialo|sekvaj kialoj}}:",
        "permissionserrorstext-withaction": "Vi ne rajtas $2, pro la {{PLURAL:$1|jena kialo|jenaj kialoj}}:",
-       "contentmodelediterror": "Vi ne povas prilabori ĉi tiun version, ĉar ĝia enhavomodelo <code>$1</code> kaj la aktuala enhavomodelo de la paĝo estas <code>$2</code>.",
+       "contentmodelediterror": "Vi ne povas prilabori ĉi tiun reviziaĵo, ĉar ĝia enhavoŝablono estas <code>$1</code>, kiu malsamas la aktualan enhavoŝablonon de la paĝo <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Averto: Vi rekreas paĝon, kiu estis antaŭe forigita.'''\n\nVi konsideru, ĉu konvenas daŭre redakti ĉi tiun paĝon.\nJen la protokolo de forigoj kaj alinomigado por via oportuno:",
        "moveddeleted-notice": "Ĉi tiu paĝo estis forigita.\nPliaj detaloj estas en protokolo pri forigado kaj alinomado de tiu ĉi paĝo.",
+       "moveddeleted-notice-recent": "Pardonon, tiu paĝo freŝdate estis forigita (en la dauro de la lasta 24 horoj).\nLa forigo kaj la movprotokolo pri la paĝo estas provizitaj sube por referenco.",
        "log-fulllog": "Vidi kompletan protokolon",
        "edit-hook-aborted": "Redakto estis ĉesigita per etendaĵo de la Vikia softvaro.\nĜi ne donis eksplikon.",
        "edit-gone-missing": "Ne eblis ĝisdatigi la paĝon.\nVerŝajne ĝi estis forigita.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Malplena objeto",
        "content-json-empty-array": "Malplena tabelo",
+       "duplicate-args-warning": "'''Averto:''' [[:$1]] vokas je [[:$2]] kun pli ol unu valoro por la parametro \"$3\". Nur la lasta liverita valoro estas uzonta.",
        "duplicate-args-category": "Paĝoj kun pluroblaj argumentoj en ŝablonvokoj",
        "duplicate-args-category-desc": "La paĝo enhavas uzon de ŝablono kun pluroble uzitaj argumentoj, kiel ekzemple <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> aŭ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Averto: Ĉi tiu paĝo enhavas tro da multekostaj sintaksaj funkcio-vokoj.\n\nĜi havu malpli ol $2 {{PLURAL:$2|vokon|vokojn}}, sed nun estas $1 {{PLURAL:$1|voko|vokoj}}.",
        "cantcreateaccounttitle": "Ne eblas krei konton",
        "cantcreateaccount-text": "Konto-kreado de ĉi tiu IP-adreso ('''$1''') estis forbarita de [[User:$3|$3]].\n\nLa kialo donata de $3 estas ''$2''.",
        "cantcreateaccount-range-text": "La kreado de kontoj de IP-adresoj en la intervalo <strong>$1</strong>, kiu inkludas vian IP-adreson (<strong>$4</strong>), estis blokita de [[User:$3|$3]].\n\nLa donita kialo de $3 estas <em>$2</em>",
-       "viewpagelogs": "Rigardi la protokolojn por tiu ĉi paĝo",
+       "viewpagelogs": "Vidi la protokolojn por tiu ĉi paĝo",
        "nohistory": "Ne ekzistas historio de redaktoj por ĉi tiu paĝo.",
        "currentrev": "Aktuala versio",
        "currentrev-asof": "Nuna versio ekde $1",
        "revdelete-unsuppress": "Forigi limigojn al restarigitaj versioj",
        "revdelete-log": "Kialo:",
        "revdelete-submit": "Apliki al {{PLURAL:$1|elektita revizio|elektitaj revizioj}}",
-       "revdelete-success": "'''Revizia videbleco estas sukcese ĝisdatigita.'''",
+       "revdelete-success": "'''Revizivideblecon ĝisdatigis.'''",
        "revdelete-failure": "'''Videblecon de revizio ne eblis ĝisdatigi:'''\n$1",
-       "logdelete-success": "'''Videbleco de evento sukcese farita.'''",
+       "logdelete-success": "'''Protokolovideblecon ensignitan.'''",
        "logdelete-failure": "'''Protokola videbleco ne estis akordebla:'''\n$1",
        "revdel-restore": "Ŝanĝi videblecon",
        "pagehist": "Paĝa historio",
        "mergehistory-fail-bad-timestamp": "Tempomarko estas malvalida.",
        "mergehistory-fail-invalid-source": "Fonta paĝo estas malvalida.",
        "mergehistory-fail-invalid-dest": "Cela paĝo estas malvalida.",
+       "mergehistory-fail-no-change": "Historio-kunfandado kunfandis neniun revizion. Bonvolu rekontroli la paĝon kaj la tempo-parametrojn.",
+       "mergehistory-fail-permission": "Nesufiĉa permesoj por kunfadi historion.",
+       "mergehistory-fail-self-merge": "Fonta kaj cela paĝoj samas.",
+       "mergehistory-fail-timestamps-overlap": "Fonta revizio surkunigas aŭ postokuras la celan revizion.",
        "mergehistory-fail-toobig": "Ne eblas kunigi historiojn ĉar pli ol sojlo de $1 {{PLURAL:$1|revizio|revizioj}} estus {{PLURAL:$1|movita|movitaj}}.",
        "mergehistory-no-source": "Fontpaĝo $1 ne ekzistas.",
        "mergehistory-no-destination": "Celpaĝo $1 ne ekzistas.",
        "lineno": "Linio $1:",
        "compareselectedversions": "Kompari la elektitajn versiojn",
        "showhideselectedversions": "Montri/kaŝi elektitajn versiojn",
-       "editundo": "malfari",
+       "editundo": "Redaktomalfaru",
        "diff-empty": "(Neniu diferenco)",
        "diff-multi-sameuser": "({{PLURAL:$1|Unu meza versio|$1 mezaj versioj}} de la sama uzanto ne montriĝas)",
        "diff-multi-otherusers": "({{PLURAL:$1|Unu meza versio|$1 mezaj versioj}} de {{PLURAL:$2|alia uzanto|$2 uzantoj}} ne montriĝas)",
        "search-category": "(kategorio $1)",
        "search-file-match": "(kongruas kun dosiera enhavo)",
        "search-suggest": "Ĉu vi intenciis: $1",
+       "search-rewritten": "Montru rezultojn por $1. Serĉita anstataŭ $2.",
        "search-interwiki-caption": "Kunprojektoj",
        "search-interwiki-default": "Rezultoj de $1:",
        "search-interwiki-more": "(plu)",
        "showingresultsinrange": "Malsupre montriĝas {{PLURAL:$1|<strong>1</strong> rezulto|<strong>$1</strong> rezultoj}} en la intervalo #<strong>$2</strong> ĝis #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Rezulto <strong>$1</strong> el <strong>$3</strong>|Rezultoj <strong>$1 - $2</strong> el <strong>$3</strong>}}",
        "search-nonefound": "La serĉomendo rezultis kun neniuj trafoj.",
+       "search-nonefound-thiswiki": "Neniu rezulto kongruis la peton tra tiu retejo.",
        "powersearch-legend": "Progresa serĉo",
        "powersearch-ns": "Serĉi en nomspacoj:",
        "powersearch-togglelabel": "Elekti:",
        "prefs-help-recentchangescount": "Ĉi tiu inkluzivas lastajn ŝanĝojn, paĝajn historiojn, kaj protokolojn.",
        "prefs-help-watchlist-token2": "Tio estas la sekreta ŝlosilo al la retfluo de via atentaro.\nĈiu, kiu konas ĝin, povas legi vian atentaron. Do, ne kunhavigu ĝin.\nSe vi devas, [[Special:ResetTokens|vi povas rekomencigi ĝin]].",
        "savedprefs": "Viaj preferoj estas konservitaj.",
+       "savedrights": "La uzanto-rajtojn de {{GENDER:$1|$1}} konservigis.",
        "timezonelegend": "Horzono:",
        "localtime": "Loka tempo:",
        "timezoneuseserverdefault": "Uzi defaŭlton de servilo ($1)",
        "userrights": "Prizorgi rajtojn de uzantoj",
        "userrights-lookup-user": "Administri grupojn de uzantoj",
        "userrights-user-editname": "Entajpu salutnomon:",
-       "editusergroup": "Redakti grupojn de uzantoj",
+       "editusergroup": "Redakti grupojn de {{GENDER:$1|uzanto}}",
        "editinguser": "Ŝanĝado de uzanto-rajtoj de la {{GENDER:$1|uzanto|uzantino}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Redakti grupojn de uzantoj",
-       "saveusergroups": "Konservi grupojn de uzantoj",
+       "saveusergroups": "Konservi grupojn de {{GENDER:$1|viruzuloj|uzulinoj|uzantoj}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Implica membro de:",
        "userrights-groups-help": "Vi povas modifi la grupojn kiun ĉi uzanto enestas.\n* Markita markbutono signifas ke la uzanto estas en tiu grupo.\n* Nemarkita markbutono signifas ke la uzanto ne estas in tiu grupo.\n* Steleto (*) signifas ke vi ne povas forigi la grupon post vi aldonis ĝin, aŭ male.",
        "userrights-changeable-col": "Grupoj kiujn vi povas ŝanĝi",
        "userrights-unchangeable-col": "Grupoj kiujn vi ne povas ŝanĝi",
        "userrights-conflict": "Konflikto ĉe la ŝanĝo de uzantorajtoj! Bonvolu kontroli kaj konfirmi viajn ŝanĝojn.",
-       "userrights-removed-self": "Vi sukcese nuligis viajn proprajn rajtojn. Do vi ne plu rajtas aliri ĉi tiun paĝon.",
+       "userrights-removed-self": "Vi nuligis viajn proprajn rajtojn, do vi ne plu rajtas aliri ĉi tiun paĝon.",
        "group": "Grupo:",
        "group-user": "Uzantoj",
        "group-autoconfirmed": "Aŭtomate konfirmitaj uzantoj",
        "group-bot": "Robotoj",
        "group-sysop": "Administrantoj",
        "group-bureaucrat": "Burokratoj",
-       "group-suppress": "Superrigardoj",
+       "group-suppress": "Foriganaro",
        "group-all": "(ĉiuj)",
        "group-user-member": "{{GENDER:$1|uzanto|uzantino}}",
        "group-autoconfirmed-member": "{{GENDER:$1|aŭtomate konfirmita uzanto|aŭtomate konfirmita uzantino}}",
        "grouppage-bot": "{{ns:project}}:Robotoj",
        "grouppage-sysop": "{{ns:project}}:Administrantoj",
        "grouppage-bureaucrat": "{{ns:project}}:Burokratoj",
-       "grouppage-suppress": "{{ns:project}}:Superrigardo",
+       "grouppage-suppress": "{{ns:project}}:Forigi",
        "right-read": "Legi paĝojn",
        "right-edit": "Redakti paĝojn",
        "right-createpage": "Kreu paĝojn (kiuj ne estas diskuto-paĝoj)",
        "right-createtalk": "Krei diskuto-paĝojn",
        "right-createaccount": "Krei novajn uzanto-kontojn",
+       "right-autocreateaccount": "Aŭtomate ensaluti eksteruzantan konton",
        "right-minoredit": "Marki redaktojn kiel etajn",
        "right-move": "Movi paĝojn",
        "right-move-subpages": "Alinomigi paĝojn kun ĝiaj subpaĝoj",
        "right-bigdelete": "Forigi paĝojn kun grandaj historioj",
        "right-deletelogentry": "Forigi kaj malforigi specifajn enmetojn en la registro.",
        "right-deleterevision": "Forigi kaj malforigi specifajn versiojn de paĝoj",
-       "right-deletedhistory": "Rigardi listanojn de forigitaj historioj, sen ties asociaj tekstoj",
+       "right-deletedhistory": "Vidi forigitajn historieroj, sen ties asociaj tekstoj",
        "right-deletedtext": "Rigardi forigitan tekston kaj ŝanĝojn inter forigitaj revizioj.",
        "right-browsearchive": "Serĉi forigitajn paĝojn",
        "right-undelete": "Restarigi paĝon",
        "right-edituserjs": "Redaktu JS-dosierojn de aliaj uzantoj",
        "right-editmyusercss": "Redakti viajn proprajn CSS-dosierojn",
        "right-editmyuserjs": "Redakti viajn proprajn JavaScript-dosierojn",
-       "right-viewmywatchlist": "Rigardi vian atentaron",
+       "right-viewmywatchlist": "Vidi vian propran atentaron",
        "right-editmywatchlist": "Redakti vian propran atentaron. Notu, ke kelkaj agoj ankoraŭ ebligas aldoni paĝojn sen ĉi tiu rajto.",
        "right-viewmyprivateinfo": "Vidi viajn proprajn privatajn informojn (ekz. retpoŝtan adreson, veran nomon)",
        "right-editmyprivateinfo": "Redakti viajn proprajn privatajn informojn (ekz. retpoŝtan adreson, veran nomon)",
        "right-importupload": "Importi paĝojn de dosiera alŝuto",
        "right-patrol": "Marki redaktojn kiel patrolitajn",
        "right-autopatrol": "Fari redaktojn aŭtomate markitajn kiel patrolitajn",
-       "right-patrolmarks": "Rigardi patrolmarkojn de lastaj ŝanĝoj",
+       "right-patrolmarks": "Vidi patrolmarkojn de lastaj ŝanĝoj",
        "right-unwatchedpages": "Vidi la liston de nepriatentitaj paĝoj",
        "right-mergehistory": "Kunfandigi la historiojn de paĝoj",
        "right-userrights": "Redakti ĉiujn uzanto-rajtojn",
        "right-managechangetags": "Kreado kaj forigado de [[Special:Tags|etikedoj]] de datumbazo",
        "right-applychangetags": "Aldoni [[Special:Tags|etikedojn]] al propraj ŝanĝoj",
        "right-changetags": "Aldoni kaj forigi arbitrajn [[Special:Tags|etikedojn]] ĉe unuopaj revizioj kaj protokoleroj",
+       "grant-generic": "\"$1\" rajtaro",
+       "grant-group-page-interaction": "Interagi paĝojn",
+       "grant-group-file-interaction": "Interagi aŭdvidaĵajn dosierojn",
+       "grant-group-watchlist-interaction": "Interagi vian atentaron",
        "grant-group-email": "Sendi retpoŝton",
+       "grant-group-high-volume": "Efektivigi ampleksege aktivecon",
+       "grant-group-customization": "Personecigoj kaj preferoj",
+       "grant-group-administration": "Efektivigi administrajn agojn",
+       "grant-group-other": "Diversaj aktivecoj",
+       "grant-blockusers": "Bloki kaj malbloki uzantojn",
        "grant-createaccount": "Krei kontojn",
+       "grant-createeditmovepage": "Krei, redakti kaj alinomi paĝojn",
+       "grant-delete": "Forigi paĝojn, reviziaĵojn kaj protokolerojn",
+       "grant-editinterface": "Redakti la MediaVikian nomspacon kaj la CSS/Ĝavoskripto de uzanto",
+       "grant-editmycssjs": "Redakti vian uzantan CSS/Ĝavoskripton",
+       "grant-editmyoptions": "Redakti vian uzantan preferojn",
+       "grant-editmywatchlist": "Redakti vian atentaron",
+       "grant-editpage": "Redakti ekzistantajn paĝojn",
+       "grant-editprotected": "Redakti protektitajn paĝojn",
+       "grant-highvolume": "Ampleksegaj redaktado",
+       "grant-oversight": "Kaŝi uzantojn kaj forigi reviziaĵojn",
+       "grant-patrol": "Patroli ŝanĝojn al pâgoj",
+       "grant-protect": "Protekti kaj malprotekti paĝojn",
+       "grant-rollback": "Malvalidi ŝanĝojn al paĝoj",
+       "grant-sendemail": "Retpoŝti al aliaj uzantoj",
+       "grant-uploadeditmovefile": "Alŝuti, anstataŭigi kaj alinomi dosierojn",
+       "grant-uploadfile": "Alŝuti novajn dosierojn",
+       "grant-basic": "Bazaj rajtoj",
+       "grant-viewdeleted": "Vidi forigitajn dosierojn kaj paĝojn",
+       "grant-viewmywatchlist": "Rigardi vian atentaron",
        "newuserlogpage": "Protokolo de uzanto-kreado",
        "newuserlogpagetext": "Jen protokolo de lastaj kreadoj de uzantoj.",
        "rightslog": "Protokolo de uzanto-rajtoj",
        "action-createpage": "krei paĝojn",
        "action-createtalk": "krei diskuto-paĝojn",
        "action-createaccount": "krei ĉi tiun uzanto-konton",
-       "action-history": "rigardi historion de tiu ĉi paĝo",
+       "action-autocreateaccount": "Aŭtomate krei tiun eksteruzantan konton",
+       "action-history": "vidi historion de tiu ĉi paĝo",
        "action-minoredit": "marki ĉi tiun redakton eta",
        "action-move": "movi ĉi tiun paĝon",
        "action-move-subpages": "movi ĉi tiun paĝon, kaj ties subpaĝojn",
        "rcshowhidemine": "$1 miajn redaktojn",
        "rcshowhidemine-show": "Montri",
        "rcshowhidemine-hide": "Kaŝi",
+       "rcshowhidecategorization": "$1 paĝokategoriadon",
        "rcshowhidecategorization-show": "Montri",
        "rcshowhidecategorization-hide": "Kaŝi",
        "rclinks": "Montri $1 lastajn ŝanĝojn dum la $2 lastaj tagoj.<br />$3",
        "recentchangeslinked-summary": "Jen listo de ŝanĝoj faritaj lastatempe al paĝoj ligitaj el specifa paĝo (aŭ al membroj de specifa kategorio).\nPaĝoj en [[Special:Watchlist|via atentaro]] estas '''grasaj'''.",
        "recentchangeslinked-page": "Nomo de paĝo:",
        "recentchangeslinked-to": "Montru ŝanĝojn al paĝoj ligitaj al la specifa paĝo anstataŭe.",
+       "recentchanges-page-added-to-category": "[[:$1]] kategorialdonita",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] kategorialdonita, [[Special:WhatLinksHere/$1|tiu paĝo estas inkluzivita ene de aliaj paĝoj]]",
+       "recentchanges-page-removed-from-category": "[[:$1]] kategoriforigita",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] kategoriforigita, [[Special:WhatLinksHere/$1|tiu paĝo estas inkluzivita ene de aliaj paĝoj]]",
+       "autochange-username": "Aŭtomata ŝanĝo de Mediavikio",
        "upload": "Alŝuti dosieron",
        "uploadbtn": "Alŝuti dosieron",
        "reuploaddesc": "Reveni al la alŝuta formularo.",
        "uploaddisabledtext": "Alŝutado de dosieroj estas malebligita.",
        "php-uploaddisabledtext": "Dosiera alŝutado estas malŝalta en PHP. Bonvolu kontroli la preferon file_uploads.",
        "uploadscripted": "HTML-aĵo aŭ skriptokodaĵo troviĝas en tiu ĉi tiu dosiero, kiun TTT-foliumilo eble interpretus erare.",
+       "upload-scripted-pi-callback": "Malalŝuteblas dosieron, kiu enhavas instrukcion de XML-stilfolia traktado",
+       "uploaded-script-svg": "Trovis skriptelbero \"$1\" en la alŝutita SVGa dosiero.",
+       "uploaded-hostile-svg": "Trovis malsekura CSS en la stilero de alŝutita SVGa dosiero.",
+       "uploaded-event-handler-on-svg": "Ensigni eventotraktilajn atributojn <code>$1=\"$2\"</code> estas malpermisita en SVGaj dosieroj.",
+       "uploaded-href-attribute-svg": "Atributoj je \"href\" en SVGaj dosieroj nur povas ligi al \"http://\" aŭ \"https://\" celoj, trovis  <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Trovis je \"href\" ligita al malsekuraj datenoj: URIa celo <code>&lt;$1 $2=\"$3\"&gt;</code> en la alŝuta SVGa dosiero.",
+       "uploaded-animate-svg": "Trovis markon je \"animate\", kiu povus ŝanĝi la atributon je \"href\", per uzi la atributon je \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> en la alŝuta SVGa dosiero.",
+       "uploaded-setting-event-handler-svg": "Ensigni eventotraktilajn atributojn estas blokita, trovis <code>&lt;$1 $2=\"$3\"&gt;</code> en la alŝuta SVGa dosiero.",
+       "uploaded-setting-href-svg": "Uzi la markon je \"set\" por aldoni atributon je \"href\" al ujero estas blokita.",
        "uploadscriptednamespace": "Ĉi tiu SVG-dosiero enhavas nevalidan nomspacon \"$1\"",
        "uploadinvalidxml": "Ne eblas interpreti la XML-sintakson en la alŝutita dosiero",
        "uploadvirus": "Viruso troviĝas en la dosiero! Detaloj: $1",
        "uploadstash-badtoken": "Malsukcesis tiu ago, eble pro tio ke viaj ensalutiloj senvalidiĝis. Reprovu.",
        "uploadstash-errclear": "Sensukcesis la forigo de la dosieroj.",
        "uploadstash-refresh": "Aktualigi la dosierliston.",
+       "uploadstash-thumbnail": "Vidi bildetigon",
        "invalid-chunk-offset": "Malvalida deŝovo de dosierpeco",
        "img-auth-accessdenied": "Atingo malpermisita",
        "img-auth-nopathinfo": "Mankas PATH_INFO (informo pri dosiervojo).\nVia servilo ne estas konfigurita por sendi ĉi tiun informon.\nEble ĝi estas CGI-bazita kaj ne subtenas img_auth.\nVidu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization (angle).",
        "listfiles-latestversion-no": "Ne",
        "file-anchor-link": "Dosiero",
        "filehist": "Dosiera historio",
-       "filehist-help": "Klaku daton/tempon por rigardi la dosieron kiel ĝin ŝajnitan tiame.",
+       "filehist-help": "Klaku daton/tempon por vidi la dosieron kiel ĝin ŝajnitan tiame.",
        "filehist-deleteall": "forigi ĉiujn",
        "filehist-deleteone": "forigi",
        "filehist-revert": "restarigi",
        "linkstoimage": "La {{PLURAL:$1|jena paĝo|jenaj paĝoj}} ligas al ĉi tiu dosiero:",
        "linkstoimage-more": "Pli ol $1 {{PLURAL:$1|paĝo|paĝoj}} ligas ĉi tiun dosieron.\nLa jena listo montras la {{PLURAL:$1|unua paĝligilo|unuaj $1 paĝligiloj}} al nur ĉi tiu dosiero.\n[[Special:WhatLinksHere/$2|Plena listo]] estas atingebla.",
        "nolinkstoimage": "Neniu paĝo ligas al ĉi tiu dosiero.",
-       "morelinkstoimage": "Rigardi [[Special:WhatLinksHere/$1|pliajn ligilojn]] al ĉi tiu dosiero.",
+       "morelinkstoimage": "Vidi [[Special:WhatLinksHere/$1|pliajn ligilojn]] al ĉi tiu dosiero.",
        "linkstoimage-redirect": "$1 (alidirektilo al dosiero) $2",
        "duplicatesoffile": "La {{PLURAL:$1|jena dosiero estas duplikato|jenaj dosieroj estas duplikatoj}} de ĉi tiu dosiero ([[Special:FileDuplicateSearch/$2|pluaj detaloj]]):",
        "sharedupload": "Ĉi tiu dosiero estas de $1 kaj estas uzebla de aliaj projektoj.",
        "nopagetext": "La cela paĝo kiun vi enigis ne ekzistas.",
        "pager-newer-n": "{{PLURAL:$1|pli nova 1|pli novaj $1}}",
        "pager-older-n": "{{PLURAL:$1|pli malnova 1|pli malnovaj $1}}",
-       "suppress": "Superrigardo",
+       "suppress": "Forigu",
        "querypage-disabled": "Tiu ĉi speciala paĝo estas malfunkciigita pro rendimentaj kialoj.",
        "apihelp": "Helpo pri API",
        "apihelp-no-such-module": "Modulo \"$1\" ne estis trovita.",
        "listgrouprights-namespaceprotection-header": "Nomspacaj restriktoj",
        "listgrouprights-namespaceprotection-namespace": "Nomspaco",
        "listgrouprights-namespaceprotection-restrictedto": "Rajtoj, kiuj permesas al uzanto redakti",
+       "listgrants": "Rajdonaro",
        "trackingcategories": "Kategorioj por kontrolado",
        "trackingcategories-summary": "Ĉi tiu paĝo listigas kategoriojn por kontrolado, aŭtomate farita de la Mediavikia programaro. Ties nomoj estas ŝanĝebla, ŝanĝante la paran sistemmesaĝon en la nomspaco {{ns:8}}.",
        "trackingcategories-msg": "Kategorio pri kontrolado",
        "deleteprotected": "Vi ne povas forigi ĉi tiun paĝon ĉar ĝi estis protektita.",
        "deleting-backlinks-warning": "'''Atentigo:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Aliaj paĝoj]] ligas al aŭ transkludas tiun ĉi forigotan paĝon.",
        "rollback": "Restarigi antaŭan redakton",
-       "rollbacklink": "malfari",
+       "rollbacklink": "malvalidi",
        "rollbacklinkcount": "nuligi $1 {{PLURAL:$1|redakton|redaktojn}}",
        "rollbacklinkcount-morethan": "nuligi pli ol $1 {{PLURAL:$1|redakton|redaktojn}}",
        "rollbackfailed": "Malfaro malsukcesis",
        "tooltip-watchlistedit-raw-submit": "Ĝisdatigi atentaron",
        "tooltip-recreate": "Rekrei la paĝon malgraŭ ĝi estis forigita",
        "tooltip-upload": "Ekalŝuti",
-       "tooltip-rollback": "\"Restarigi antaŭan\" restarigas redakto(j)n al ĉi tiu paĝo de la lasta kontribuanto per unu klako.",
+       "tooltip-rollback": "\"Malvalidi\" malfaras redakto(j)n al ĉi tiu paĝo de la lasta kontribuanto per unu klako.",
        "tooltip-undo": "\"Malfari\" malfaris ĉi tiun redakton kaj malfermas la redakto-paĝon en antaŭvida reĝimo. Permesas aldoni kialon en la resumo.",
        "tooltip-preferences-save": "Konservi preferojn",
        "tooltip-summary": "Enigu mallongan resumon",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
        "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "api-error-blacklisted": "Bonvolu elekti alian, priskriban titolon.",
-       "randomrootpage": "Hazarda radika paĝo"
+       "randomrootpage": "Hazarda radika paĝo",
+       "log-action-filter-all": "Ĉia",
+       "log-action-filter-protect-unprotect": "Malprotektado",
+       "log-action-filter-upload-upload": "Novalŝuta",
+       "log-action-filter-upload-overwrite": "Realŝuta"
 }
index 789bc54..210f886 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegió}} a $3 $4 [en cascada]",
        "logentry-protect-modify": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4 [en cascada]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece {{GENDER:$3|$3}}: de $4 a $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece {{GENDER:$6|$3}}: de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece $3",
        "logentry-rights-autopromote": "$1 ha sido {{GENDER:$2|promocionado|promocionada}} automáticamente de $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|subió}} $3",
index 4868e64..eac16c4 100644 (file)
        "noemail": "هیچ آدرس ایمیلی برای کاربر «$1» ثبت نشده است.",
        "noemailcreate": "شما باید یک آدرس ایمیل درست فراهم کنید",
        "passwordsent": "گذرواژه‌ای جدید به آدرس ایمیل ثبت شده برای «$1» ارسال شد.\nلطفاً پس از دریافت آن، دوباره به سیستم وارد شوید.",
-       "blocked-mailpassword": "نشانی آی‌پی شما از ویرایش بازداشته شده‌است و از این رو به منظور جلوگیری از سوءاستفاده اجازهٔ بهره‌گیری از قابلیت بازیابی گذرواژه را ندارد.",
+       "blocked-mailpassword": "نشانی آی‌پی شما از ویرایش بازداشته شده‌است. به منظور جلوگیری از سوءاستفاده اجازهٔ بهره‌گیری از قابلیت بازیابی گذرواژه از این آی‌پی را ندارد.",
        "eauthentsent": "یک ایمیل تأیید برای آدرس ایمیل به نشانی مورد نظر ارسال شد.\nقبل از اینکه ایمیل دیگری قابل ارسال به این آدرس باشد، باید دستورهایی که در آن ایمیل آمده است را جهت تأیید این مساله که این آدرس متعلق به شماست، اجرا کنید.",
        "throttled-mailpassword": "یک ایمیل بازنشانی گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته فرستاده شده است.\nبرای جلوگیری از سوءاستفاده، هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک ایمیل بازنشانی گذرواژه فرستاده می‌شود.",
        "mailerror": "خطا در ارسال ایمیل: $1",
        "watchlistedit-raw-done": "فهرست پی‌گیری‌های شما به روز شد.",
        "watchlistedit-raw-added": "$1 عنوان به فهرست پی‌گیری‌ها اضافه {{PLURAL:$1|شد|شدند}}:",
        "watchlistedit-raw-removed": "$1 عنوان حذف {{PLURAL:$1|شد|شدند}}:",
-       "watchlistedit-clear-title": "Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8c Ù¾Ø§Ú©Ø³Ø§Ø²Û\8câ\80\8cشدÙ\87",
+       "watchlistedit-clear-title": "پاکسازÛ\8c Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8c",
        "watchlistedit-clear-legend": "پاکسازی فهرست پیگیری",
        "watchlistedit-clear-explain": "همه عناوین از فهرست پیگیریهای شما حذف خواهد شد",
        "watchlistedit-clear-titles": "عنوان‌ها:",
index 2ceee0c..a2001d4 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|suojasi}} kohteen $3 $4 [tarttuvasti]",
        "logentry-protect-modify": "$1 {{GENDER:$2|muutti}} suojauksen tasoa kohteessa $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|muutti}} suojauksen tasoa kohteessa $3 $4 [tarttuvasti]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$3|$3}} oikeudet ryhmistä $4 ryhmiin $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$6|$3}} oikeudet ryhmistä $4 ryhmiin $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|muutti}} käyttäjän $3 jäsenyyttä ryhmässä",
        "logentry-rights-autopromote": "Käyttäjän $1 oikeudet {{GENDER:$2|muuttuivat}} automaattisesti ryhmistä $4 ryhmiin $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|tallensi}} tiedoston $3",
index 2325bee..00cc2da 100644 (file)
        "anonusers": "{{PLURAL:$2|l'utilisateur anonyme|les utilisateurs anonymes}} $1 de {{SITENAME}}",
        "creditspage": "Crédits de la page",
        "nocredits": "Il n'y a pas d'informations d'attribution disponibles pour cette page.",
-       "spamprotectiontitle": "Filtre de protection anti-pollution",
-       "spamprotectiontext": "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pollution. Ceci est probablement dû à l'introduction d'un lien vers un site externe apparaissant sur la liste noire.",
-       "spamprotectionmatch": "La chaîne de caractères « '''$1''' » a déclenché le détecteur de pollution.",
+       "spamprotectiontitle": "Filtre de protection anti-pollupostage",
+       "spamprotectiontext": "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-spam. Ceci est probablement dû à l'introduction d'un lien vers un site externe apparaissant sur la liste noire.",
+       "spamprotectionmatch": "Le texte suivant a déclenché notre filtre de protection anti-pollupostage : $1",
        "spambot_username": "Nettoyage de pourriels par MediaWiki",
        "spam_reverting": "Rétablissement de la dernière version ne contenant pas de lien vers $1",
        "spam_blanking": "Toutes les versions contenant des liens vers $1 sont blanchies",
        "specialpages-group-pagetools": "Outils pour les pages",
        "specialpages-group-wiki": "Données et outils",
        "specialpages-group-redirects": "Pages spéciales redirigées",
-       "specialpages-group-spam": "Outils anti-pourriel",
+       "specialpages-group-spam": "Outils anti-spam",
        "specialpages-group-developer": "Outils du développeur",
        "blankpage": "Page vide",
        "intentionallyblankpage": "Cette page est laissée intentionnellement (presque) vide.",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|a protégé}} $3 $4 [protection en cascade]",
        "logentry-protect-modify": "$1 {{GENDER:$2|a modifié}} le niveau de protection de $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|a modifié}} le niveau de protection de $3 $4 [protection en cascade]",
-       "logentry-rights-rights": "$1 a modifié l’appartenance au groupe pour $3 de $4 à $5",
+       "logentry-rights-rights": "$1 a modifié l’appartenance au groupe pour {{GENDER:$6|$3}} de $4 à $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|a été promu}} automatiquement de $4 à $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|a téléchargé}} $3",
index 4cf6c83..0a4357f 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protexeu}} a $3 $4 [en cascada]",
        "logentry-protect-modify": "$1 {{GENDER:$2|cambiou}} o nivel de protección de $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|cambiou}} o nivel de protección de $3 $4 [en cascada]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence {{GENDER:$3|$3}} de $4 a $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence {{GENDER:$6|$3}} de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3",
        "logentry-rights-autopromote": "$1 foi {{GENDER:$2|promovido|promovida}} automaticamente de $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|cargou}} \"$3\"",
index 372611e..ef46c80 100644 (file)
        "article": "דף תוכן",
        "newwindow": "(נפתח בחלון חדש)",
        "cancel": "ביטול",
-       "moredotdotdot": "עוד",
+       "moredotdotdot": "עוד...",
        "morenotlisted": "רשימה זו אינה מלאה.",
        "mypage": "דף משתמש",
        "mytalk": "שיחה",
        "accmailtitle": "הסיסמה נשלחה",
        "accmailtext": "סיסמה אקראית עבור [[User talk:$1|$1]] נשלחה אל $2. ניתן לשנותה בדף '''[[Special:ChangePassword|שינוי הסיסמה]]''' לאחר הכניסה.",
        "newarticle": "(חדש)",
-       "newarticletext": "×\94×\92עת×\9d ×\9c×\93×£ ×©×¢×\93×\99×\99×\9f ×\90×\99× × ×\95 ×§×\99×\99×\9d.\n×\9b×\93×\99 ×\9c×\99צ×\95ר ×\90ת ×\94×\93×£ ×\94×\96×\94, ×\94ת×\97×\99×\9c×\95 ×\9c×\94ק×\9c×\99×\93 ×\91ת×\99×\91ת ×\94×\98קס×\98 למטה (ראו את [$1 דף העזרה] למידע נוסף).\nאם הגעתם לכאן בטעות, לחצו על כפתור ה<strong>חזרה</strong> (Back) בדפדפן שלכם.",
+       "newarticletext": "×\94×\92עת×\9d ×\9c×\93×£ ×©×¢×\93×\99×\99×\9f ×\90×\99× ×\95 ×§×\99×\99×\9d.\n×\9b×\93×\99 ×\9c×\99צ×\95ר ×\90ת ×\94×\93×£ ×\94×\96×\94, ×\94ת×\97×\99×\9c×\95 ×\9c×\94ק×\9c×\99×\93 ×\91ת×\99×\91ת ×\94×\98קס×\98 ×©למטה (ראו את [$1 דף העזרה] למידע נוסף).\nאם הגעתם לכאן בטעות, לחצו על כפתור ה<strong>חזרה</strong> (Back) בדפדפן שלכם.",
        "anontalkpagetext": "----\n<em>זהו דף שיחה של משתמש אנונימי שעדיין לא יצר חשבון במערכת, או שהוא לא משתמש בו.</em>\nלכן עלינו להשתמש בכתובת ה־IP המספרית כדי לזהותו.\nייתכן שכתובת IP זו תהיה משותפת למספר משתמשים.\nאם אתם משתמשים אנונימיים ומרגישים שקיבלתם הודעות בלתי רלוונטיות, אנא [[Special:UserLogin/signup|צרו חשבון]] או [[Special:UserLogin|היכנסו לחשבון]] כדי להימנע מבלבול עתידי עם משתמשים אנונימיים נוספים.",
-       "noarticletext": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאו [{{fullurl:{{FULLPAGENAME}}|action=edit}} ליצור את הדף]</span>.",
-       "noarticletext-nopermission": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d,\n×\90×\95 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\90ת ×\94×\93×£ ×\91×\99×\95×\9e× ×\99×\9d]</span>,\n×\90×\9a ×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ליצור את הדף.",
+       "noarticletext": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9a [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאו [{{fullurl:{{FULLPAGENAME}}|action=edit}} ליצור את הדף]</span>.",
+       "noarticletext-nopermission": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9a [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d ×\90×\95 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\90ת ×\94×\93×£ ×\91×\99×\95×\9e× ×\99×\9d]</span>, ×\90×\9a ×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 ליצור את הדף.",
        "missing-revision": "גרסה #$1 של הדף \"{{FULLPAGENAME}}\" אינה קיימת.\n\nזה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
        "userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בִּדקו אם ברצונכם ליצור/לערוך את הדף הזה.",
        "userpage-userdoesnotexist-view": "חשבון המשתמש \"$1\" אינו רשום.",
        "mergehistory-no-destination": "דף היעד $1 אינו קיים.",
        "mergehistory-invalid-source": "דף המקור חייב להיות בעל כותרת תקינה.",
        "mergehistory-invalid-destination": "דף היעד חייב להיות בעל כותרת תקינה.",
-       "mergehistory-autocomment": "×\9e×\99×\96×\92 ×\90ת [[:$1]] לתוך [[:$2]]",
-       "mergehistory-comment": "×\9e×\99×\96×\92 ×\90ת [[:$1]] לתוך [[:$2]]: $3",
+       "mergehistory-autocomment": "×\94×\93×£ [[:$1]] ×\9e×\95×\96×\92 לתוך [[:$2]]",
+       "mergehistory-comment": "×\94×\93×£ [[:$1]] ×\9e×\95×\96×\92 לתוך [[:$2]]: $3",
        "mergehistory-same-destination": "דפי המקור והיעד זהים",
        "mergehistory-reason": "סיבה:",
        "mergelog": "יומן מיזוגים",
        "powersearch-ns": "חיפוש על־פי מרחבי שם:",
        "powersearch-togglelabel": "בחירה:",
        "powersearch-toggleall": "הכול",
-       "powersearch-togglenone": "אף אחד",
+       "powersearch-togglenone": "×\90×£ ×\9c×\90 ×\90×\97×\93",
        "powersearch-remember": "שמירת הבחירה עבור חיפושים עתידיים",
        "search-external": "חיפוש חיצוני",
        "searchdisabled": "חיפוש ב{{grammar:תחילית|{{SITENAME}}}} אינו מופעל כעת.\nבינתיים אפשר לחפש באמצעות גוגל.\nשימו לב שייתכן שהמידע של {{SITENAME}} שם אינו מעודכן.",
        "brokenredirects-delete": "מחיקה",
        "withoutinterwiki": "דפים ללא קישורי שפה",
        "withoutinterwiki-summary": "הדפים הבאים אינם מקשרים לגרסאות שלהם בשפות אחרות:",
-       "withoutinterwiki-legend": "×\94×\93פ×\99×\9d ×\94×\9eת×\97×\99×\9c×\99×\9d ×\91â\80¦",
+       "withoutinterwiki-legend": "ת×\97×\99×\9c×\99ת",
        "withoutinterwiki-submit": "הצגה",
        "fewestrevisions": "הדפים בעלי מספר העריכות הנמוך ביותר",
        "nbytes": "{{PLURAL:$1|בית אחד|$1 בתים}}",
        "mostimages": "הקבצים המקושרים ביותר",
        "mostinterwikis": "הדפים עם המספר הרב ביותר של קישורי בינוויקי",
        "mostrevisions": "הדפים עם מספר העריכות הגבוה ביותר",
-       "prefixindex": "רש×\99×\9eת ×\94×\93פ×\99×\9d ×\94×\9eת×\97×\99×\9c×\99×\9d ×\91â\80¦",
-       "prefixindex-namespace": "רש×\99×\9eת ×\94×\93פ×\99×\9d ×\94×\9eת×\97×\99×\9c×\99×\9d ×\91â\80¦ (במרחב השם $1)",
+       "prefixindex": "×\9b×\9c ×\93פ×\99×\9d ×¢×\9d ×\94ת×\97×\99×\9c×\99ת",
+       "prefixindex-namespace": "×\9b×\9c ×\93פ×\99×\9d ×¢×\9d ×\94ת×\97×\99×\9c×\99ת (במרחב השם $1)",
        "prefixindex-submit": "הצגה",
        "prefixindex-strip": "הסתרת התחילית ברשימה",
        "shortpages": "דפים קצרים",
        "undeletedrevisions-files": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}} ו{{PLURAL:$2|קובץ אחד|־$2 קבצים}} שוחזרו",
        "undeletedfiles": "{{PLURAL:$1|שוחזר קובץ אחד|שוחזרו $1 קבצים}}",
        "cannotundelete": "השחזור נכשל:\n$1",
-       "undeletedpage": "'''הדף $1 שוחזר בהצלחה.'''\n\nראו את [[Special:Log/delete|יומן המחיקות]] לרשימה של מחיקות ושחזורים אחרונים.",
+       "undeletedpage": "<strong>הדף $1 שוחזר</strong>\n\nראו את [[Special:Log/delete|יומן המחיקות]] לרשימה של המחיקות והשחזורים שבוצעו לאחרונה.",
        "undelete-header": "ראו את [[Special:Log/delete|יומן המחיקות]] לדפים שנמחקו לאחרונה.",
        "undelete-search-title": "חיפוש דפים שנמחקו",
        "undelete-search-box": "חיפוש דפים שנמחקו",
        "import-upload-filename": "שם הקובץ:",
        "import-comment": "הערה:",
        "importtext": "נא לייצא את הקובץ מאתר המקור באמצעות ב[[Special:Export|כלי הייצוא]].\nשמרו אותו למחשב שלכם והעלו אותו לכאן.",
-       "importstart": "×\9e×\99×\99×\91×\90 ×\93פ×\99×\9dâ\80¦",
-       "import-revision-count": "&rlm;{{PLURAL:$1|גרסה אחת|$1 גרסאות}}",
+       "importstart": "×\99×\99×\91×\95×\90 ×\93פ×\99×\9d...",
+       "import-revision-count": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}}",
        "importnopages": "אין דפים לייבוא.",
        "imported-log-entries": "{{PLURAL:$1|יובאה פעולת יומן אחת|יובאו $1 פעולות יומן}}.",
        "importfailed": "הייבוא נכשל: <nowiki>$1</nowiki>",
        "notificationemail_body_removed": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nהסיר את כתובת הדואר האלקטרוני של החשבון \"$2\" ב{{grammar:תחילית|{{SITENAME}}}}.\n\nאם לא אתם עשיתם זאת, אנא צרו קשר מיידי עם מפעיל מערכת באתר.",
        "scarytranscludedisabled": "[הכללת דפים בין אתרים מבוטלת]",
        "scarytranscludefailed": "[אחזור התבנית נכשל עבור $1]",
-       "scarytranscludefailed-httpstatus": "[אחזור התבנית נכשל עבור $1&rlm;: HTTP $2]",
+       "scarytranscludefailed-httpstatus": "[אחזור התבנית נכשל עבור $1: מצב HTTP $2]",
        "scarytranscludetoolong": "[כתובת ה־URL ארוכה מדי]",
        "deletedwhileediting": "<strong>אזהרה:</strong> דף זה נמחק לאחר שהתחלת לערוך!",
        "confirmrecreate": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו, מהסיבה הבאה:\n: <em>$2</em>\nיש לאשר שאכן ברצונך ליצור מחדש את הדף.",
        "htmlform-user-not-valid": "<strong>$1</strong> אינו שם משתמש תקין.",
        "sqlite-has-fts": "$1 עם תמיכה בחיפוש בטקסט מלא",
        "sqlite-no-fts": "$1 ללא תמיכה בחיפוש בטקסט מלא",
-       "logentry-delete-delete": "$1 {{GENDER:$2|מחק|מחקה}} את הדף $3&rlm;",
-       "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3&rlm;",
+       "logentry-delete-delete": "$1 {{GENDER:$2|מחק|מחקה}} את הדף $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3",
        "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-import-interwiki": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מאתר ויקי אחר",
        "logentry-import-interwiki-details": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מ־$5&rlm; ({{PLURAL:$4|גרסה אחת|$4 גרסאות}})&rlm;",
        "logentry-merge-merge": "$1 {{GENDER:$2|מיזג|מיזגה}} את $3 לתוך $4 (גרסאות עד $5)",
-       "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}&rlm;",
-       "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה",
+       "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4 בלי להשאיר הפניה",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4 תוך דריסת הפניה",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4 תוך דריסת הפניה ובלי להשאיר הפניה",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|סימן|סימנה}} את הגרסה $4 בדף $3 כבדוקה",
        "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|סימן|סימנה}} אוטומטית את הגרסה $4 בדף $3 כבדוקה",
        "logentry-newusers-newusers": "חשבון המשתמש $1 {{GENDER:$2|נוצר}}",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|הפעיל|הפעילה}} הגנה על הדף $3 $4 [מדורג]",
        "logentry-protect-modify": "$1 {{GENDER:$2|שינה|שינתה}} את רמת ההגנה של הדף $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|שינה|שינתה}} את רמת ההגנה של הדף $3 $4 [מדורג]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של {{GENDER:$3|$3}} מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}&rlm;",
+       "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של {{GENDER:$6|$3}} מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3&rlm;",
        "logentry-rights-autopromote": "$1 קודם אוטומטית מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|העלה|העלתה}} את $3",
        "log-description-tag": "הדף הזה מראה מתי משתמשים הוסיפו [[Special:Tags|תגיות]] לגרסאות או רשומות יומן מסוימות או הסירו אותן. היומן אינו מציג פעולות תיוג שבוצעו כחלק מעריכה, מחיקה או פעולה דומה.",
        "logentry-tag-update-add-revision": "$1 {{GENDER:$2|הוסיף|הוסיפה}} את {{PLURAL:$7|התגית|התגיות}} $6 לגרסה $4 של הדף $3",
        "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|הוסיף|הוסיפה}} את {{PLURAL:$7|התגית|התגיות}} $6 לרשומת היומן $5 של הדף $3",
-       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|×\94ס×\99ר|×\94ס×\99ר×\94}} ×\90ת {{PLURAL:$9|×\94ת×\92×\99ת|×\94ת×\92×\99×\95ת}} $8 ×\9e×\94×\92רס×\94 $4 ×©×\9c ×\94×\93×£ $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|הסיר|הסירה}} את {{PLURAL:$9|התגית|התגיות}} $8 מגרסה $4 של הדף $3",
        "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|הסיר|הסירה}} את {{PLURAL:$9|התגית|התגיות}} $8 מרשומת היומן $5 של הדף $3",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|עדכן|עדכנה}} את התגיות בגרסה $4 של הדף $3 ({{PLURAL:$7|הוסיף|הוסיפה}} את $6; {{PLURAL:$9|הסיר|הסירה}} את $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|עדכן|עדכנה}} את התגיות ברשומת היומן $5 של הדף $3 ({{PLURAL:$7|הוסיף|הוסיפה}} את $6; {{PLURAL:$9|הסיר|הסירה}} את $8)",
index faa6b5a..5e2b5fa 100644 (file)
        "category-subcat-count-limited": "Укх катагa чу {{PLURAL:$1|1=$1 к|алкатаг|$1 к|алкатагаш}}.",
        "category-article-count": "{{PLURAL:$2|Укх катага цхьа оаг|ув мара чулоацац.|{{PLURAL:$1|1=$1 оаг|ув хьахекха я|$1 оаг|oнаш хьахекха я}} укх катага $2 йолачарeх.}}",
        "category-article-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 оаг|ув|$1 оаг|oнаш}}.",
-       "category-file-count": "{{PLURAL:$2|Укх катагори чу цаI мара файл дац.|{{PLURAL:$1|1=$1 файл хьахьокхаш я|$1 файл хьахьокхаш я}} укх категори $2 долачарeх.}}",
+       "category-file-count": "{{PLURAL:$2|Укх катагори чу цаI мара файл яц.|{{PLURAL:$1|1=$1 файл хьахьокхаш я|$1 файл хьахьокхаш я}} укх категори $2 долачарeх.}}",
        "category-file-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 лурдар|$1 лурдараш}}.",
        "listingcontinuesabbrev": "д|ахо",
        "index-category": "Д|ахьожама оаг|онаш",
        "loginlanguagelabel": "Мотт: $1",
        "pt-login": "Чувала/яла",
        "pt-createaccount": "Учёта яздар кхолла",
+       "pt-userlogout": "Аравала/яла",
        "changepassword": "КъайладIоaгIа дIахувцар",
        "oldpassword": "Къаьна къайладIоагӀа:",
        "newpassword": "Керда къайладIоагӀа:",
        "post-expand-template-inclusion-category": "Чулоаца чIабала мегаш дола дустам дукхалена тӀехьайоала оагӀувнаш",
        "post-expand-template-argument-warning": "Зем бе! Ер оагӀув цаӀ куцкепа |аьлдош мара чулоацац, юхадастара сел доккха дустам йолаш.\nЦу тайпара |аьлдешаш ӀокӀаладаькха да.",
        "post-expand-template-argument-category": "Куцкепий теркамза |аьлдешаш чулоаца оагӀувнаш",
-       "viewpagelogs": "Укх оагӀува тептараш хьокха",
+       "viewpagelogs": "Укх оагӀон тептараш хьокха",
        "currentrev-asof": "тӀеххьара верси $1",
        "revisionasof": "Верси $1",
        "revision-info": "$1; $2 хувцам",
        "prevpage": "($1) хьалхара оагIув",
        "allpagesfrom": "Цу тайпара ювлаж йола оагIувнаш белгал е:",
        "allpagesto": "Укх оагIувнаш тIа бIарга дита:",
-       "allarticles": "Еррига оагIувнаш",
+       "allarticles": "Еррига оагIонаш",
        "allpagessubmit": "Кхоачашде",
        "categories": "Категореш",
        "linksearch": "Т|ера|инкаш лахар",
        "mycontris": "Са къахьегам",
        "contribsub2": "{{GENDER:$3|$1}} ($2) баь болх",
        "uctop": "(xIанзара)",
-       "month": "ЦÑ\85Ñ\8cан бетт (кхы хьалхагIа)",
-       "year": "ЦÑ\85Ñ\8cан Ñ\88еÑ\80а (кхы хьалхагIа):",
+       "month": "УкÑ\85 бетт (кхы хьалхагIа)",
+       "year": "УкÑ\85 Ñ\88еÑ\80 (кхы хьалхагIа):",
        "sp-contributions-newbies": "Керда даязья йоазоначера мара баь бола къахьегам ма хьокха",
        "sp-contributions-blocklog": "чIегаш",
        "sp-contributions-uploads": "чуяьккхамаш",
        "movepage-moved": "'''\"$1\" оагув \"$2\" хьийца я'''",
        "articleexists": "Изза мо цIи йола оагIув, йолаш я е оаш тила цIи мегаш яц.\nДехар да, кхыйола цIи хьаржа.",
        "movetalk": "МаIан чулоаца дувцама оагIувни цIи хувца",
-       "movelogpage": "Ð¥Ñ\83вÑ\86ама тептар",
+       "movelogpage": "ЦIи Ñ\85Ñ\83вÑ\86аÑ\80а тептар",
        "movereason": "Бахьан",
        "revertmove": "юхаяьккха",
        "export": "ОагIувий эхфортам",
        "tooltip-ca-history": "Укх оагIон даь хувцамаш тIа дола тептар",
        "tooltip-ca-protect": "Eр оагIув лорае",
        "tooltip-ca-delete": "Ер оагIув дIаяькха",
-       "tooltip-ca-move": "Укх оагIува цIи хувца",
+       "tooltip-ca-move": "Укх оагIон цIи хувца",
        "tooltip-ca-watch": "Ер оагIув хьай теркам беча каьхата тIа тIаяьккха",
        "tooltip-ca-unwatch": "Ер оагIув теркам беча каьхата тIара дIаяькха",
        "tooltip-search": "Хьалáха {{grammar:prepositional|{{SITENAME}}}} чу",
index 84399c0..3c1eed2 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|ha protetto}} $3 $4 [ricorsiva]",
        "logentry-protect-modify": "$1 {{GENDER:$2|ha modificato}} il livello di protezione per $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|ha modificato}} il livello di protezione per $3 $4 [ricorsiva]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di {{GENDER:$3|$3}} dal gruppo $4 al gruppo $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di {{GENDER:$6|$3}} dal gruppo $4 al gruppo $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ha modificato}} l'appartenenza a gruppi di $3",
        "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa|stato/a promosso/a}} automaticamente da $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|ha caricato}} $3",
index c9fa64a..1546fb8 100644 (file)
        "logentry-protect-protect-cascade": "$1 が $3 を {{GENDER:$2|保護}}しました $4 [カスケード]",
        "logentry-protect-modify": "$1 が $3 の保護レベルを{{GENDER:$2|変更}}しました $4",
        "logentry-protect-modify-cascade": "$1 が $3 の保護レベルを{{GENDER:$2|変更}}しました $4 [カスケード]",
-       "logentry-rights-rights": "$1 が {{GENDER:$3|$3}} の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}",
+       "logentry-rights-rights": "$1 が {{GENDER:$6|$3}} の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}",
        "logentry-rights-rights-legacy": "$1 が $3 の所属グループを{{GENDER:$2|変更しました}}",
        "logentry-rights-autopromote": "$1 が $4 から $5 に自動的に{{GENDER:$2|昇格しました}}",
        "logentry-upload-upload": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
index 67b6536..9e1c92a 100644 (file)
        "logentry-newusers-autocreate": "De Benotzerkont $1 gouf automatesch {{GENDER:$2|ugeluecht}}",
        "logentry-protect-protect": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gespaart",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gespaart [Kaskadespär]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen {{GENDER:$3|d'|de}} $3 gehéiert vu(n) $4 op $5 geännert",
+       "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen {{GENDER:$6|d'|de}} $3 gehéiert vu(n) $4 op $5 geännert",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert geännert",
        "logentry-rights-autopromote": "De Benotzer $1 {{GENDER:$2|krut}} d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
        "logentry-upload-upload": "$1 huet $3 {{GENDER:$2|eropgelueden}}",
index 3daa2d9..6220352 100644 (file)
        "watchlistedit-raw-done": "Jūsų stebimųjų sąrašas buvo atnaujintas.",
        "watchlistedit-raw-added": "$1 {{PLURAL:$1|puslapis buvo pridėtas|puslapiai buvo pridėti|puslapių buvo pridėta}}:",
        "watchlistedit-raw-removed": "$1 {{PLURAL:$1|puslapis buvo pašalintas|puslapiai buvo pašalinti|puslapių buvo pašalinta}}:",
-       "watchlistedit-clear-title": "Išvalytas stebimųjų sąrašas",
+       "watchlistedit-clear-title": "Išvalyti stebimųjų sąrašą",
        "watchlistedit-clear-legend": "Išvalyti stebimųjų sąrašą",
        "watchlistedit-clear-explain": "Visi pavadinimai bus pašalinti iš jūsų stebimųjų sąrašo",
        "watchlistedit-clear-titles": "Pavadinimai:",
index f1a6561..1272972 100644 (file)
@@ -20,7 +20,8 @@
                        "Nemo bis",
                        "飞舞回堂前",
                        "Macofe",
-                       "Bowleerin"
+                       "Bowleerin",
+                       "SolidBlock"
                ]
        },
        "tog-underline": "鏈墊線:",
        "view-foreign": "觀於$1",
        "edit": "纂",
        "create": "立",
+       "create-local": "增地言",
        "editthispage": "纂",
        "create-this-page": "立",
        "delete": "刪",
        "preview": "草覽",
        "showpreview": "示覽",
        "showdiff": "示異",
-       "anoneditwarning": "'''警示:'''子未登簿,IP將誌。",
+       "anoneditwarning": "'''警示:'''子未登簿,若確纂,IP將誌。茍[$1 登]或[$2 開戶口],是纂欲存以子名,及他效。",
        "anonpreviewwarning": "''子未登簿,IP將誌。''",
        "missingsummary": "'''醒示:'''子未概之,復「{{int:savearticle}}」則文倍焉。",
        "missingcommenttext": "請贊之",
        "categories": "類",
        "categoriespagetext": "大典{{PLURAL:$1|類中}}有頁或媒。\n[[Special:UnusedCategories|未類]]無示之。\n閱[[Special:WantedCategories|需類]]也。",
        "categoriesfrom": "示此項起之類:",
-       "special-categories-sort-count": "排數",
-       "special-categories-sort-abc": "排字",
        "deletedcontributions": "已刪之積",
        "deletedcontributions-title": "所棄之事",
        "sp-deletedcontributions-contribs": "積",
        "importlogpagetext": "秩入匯自他山之審。",
        "import-logentry-upload-detail": "有審$1",
        "import-logentry-interwiki-detail": "$1審自$2",
-       "tooltip-pt-userpage": "述平生、紹身家、銘字號",
+       "tooltip-pt-userpage": "{{GENDER:|君自}}卷",
        "tooltip-pt-anonuserpage": "君IP之舍",
-       "tooltip-pt-mytalk": "與眾論、往魚雁、湧文滔",
+       "tooltip-pt-mytalk": "{{GENDER:|君之}}議室",
        "tooltip-pt-anontalk": "此IP所修之議",
-       "tooltip-pt-preferences": "更符驛、排版式、投所好",
+       "tooltip-pt-preferences": "{{GENDER:|君之}}好",
        "tooltip-pt-watchlist": "收矚目、治眼線、賞萌茂",
-       "tooltip-pt-mycontris": "刻勛功、追作續、慰苦勞",
+       "tooltip-pt-mycontris": "{{GENDER:|君之}}勛表",
        "tooltip-pt-login": "設書齋、錄功績、廣放哨",
        "tooltip-pt-logout": "凡事盡,乘雲飄",
        "tooltip-pt-createaccount": "勸君增簿以登,然非必須之舉",
        "spambot_username": "MediaWiki清濫",
        "spam_reverting": "還新審之無鏈$1者。",
        "spam_blanking": "審皆鏈$1,遂令白頁。",
+       "simpleantispam-label": "反亂查。\n'''勿'''是文入!",
        "pageinfo-header-restrictions": "頁錮",
        "pageinfo-robot-index": "可",
        "pageinfo-robot-noindex": "不可",
        "file-nohires": "無以更晰。",
        "svg-long-desc": "SVG檔,貌有像素$1矩$2,幅$3",
        "show-big-image": "全幅",
+       "show-big-image-size": "$1×$2微格",
        "file-info-gif-looped": "循",
        "file-info-gif-frames": "$1幀",
        "file-info-png-looped": "循",
        "exif-model": "型號",
        "exif-artist": "作者",
        "exif-exifversion": "Exif版本",
+       "exif-colorspace": "色間",
        "exif-datetimeoriginal": "數據生成之日期時辰",
        "exif-datetimedigitized": "數位化之日期時辰",
        "exif-exposuretime": "曝光",
        "exif-contrast": "對比",
        "exif-saturation": "飽和度",
        "exif-sharpness": "清晰度",
+       "exif-orientation-1": "常",
        "exif-meteringmode-255": "其他",
        "exif-flash-fired-0": "閃無火",
        "exif-flash-fired-1": "閃開火",
        "version-software-version": "版",
        "fileduplicatesearch": "擇重檔",
        "fileduplicatesearch-summary": "以重檔之切去查重也。",
-       "fileduplicatesearch-legend": "尋重",
        "fileduplicatesearch-filename": "名:",
        "fileduplicatesearch-submit": "尋",
        "fileduplicatesearch-info": "像素$1矩$2<br />大小:$3<br />MIME類型:$4",
        "intentionallyblankpage": "此頁為白也,試速之用",
        "external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
        "tag-filter": "[[Special:Tags|標]] 之濾:",
+       "tag-list-wrapper": "([[Special:Tags|簽]]: $2)",
        "tags-title": "標",
        "tags-tag": "標名",
        "tags-source-header": "源",
index 4ac3aa6..1bd4a2b 100644 (file)
        "databaseerror-query": "揣:$1",
        "databaseerror-function": "功能:$1",
        "databaseerror-error": "chhò-gō͘",
-       "transaction-duration-limit-exceeded": "Ūi tio̍h mài sán-seng koân liōng ê têng-hok iân-sî, pún kài choán-sàng in-ūi sia-ji̍p sî-kan ($1) chhiau-kòe $2 bió ê chè-hān, í-keng hong hòng-khì.\nNā chún lí sī beh chi̍t kái kái-tōng kúi--a-ê hāng-bo̍k, chhì ēng chē pái sió chhau-chok khòaⁿ-māi.",
+       "transaction-duration-limit-exceeded": "Ūi tio̍h mài sán-seng koân liōng ê têng-hok iân-sî, pún kài choán-sàng in-ūi sia-ji̍p sî-kan ($1) chhiau-kòe {{PLURAL:$2|bió-cheng}} ê chè-hān, í-keng hong hòng-khì.\nNā chún lí sī beh chi̍t kái kái-tōng kúi--a-ê hāng-bo̍k, chhì ēng chē pái sió chhau-chok khòaⁿ-māi.",
        "laggedslavemode": "'''提醒:'''頁內容可能毋是上新的。",
        "readonly": "Chu-liāu-khò· só tiâu leh",
        "enterlockreason": "Phah beh hong-só ê lí-iû, pau-koah ko͘-kè siáⁿ-mi̍h sî-chūn ē kái-tû hong-só.",
        "missingarticle-rev": "(修訂版本#:$1)",
        "missingarticle-diff": "(精差:$1,$2)",
        "readonly_lag": "佇附屬的資料庫更新到主要資料庫資料的時陣,資料庫會自動鎖定。",
+       "nonwrite-api-promise-error": "Tī leh HTTP header ê 'Promise-Non-Write-API-Action' í-keng sàng--chhut-khì m̄-koh chit-ê iau-kiû sī sàng kòe 1-ê API siá-ji̍p module.",
        "internalerror": "Loē-pō͘ ê chhò-ngō͘",
        "internalerror_info": "Loē-pō͘ ê chhò-ngō͘: $1",
+       "internalerror-fatal-exception": "\"$1\" lūi ê tì-miā lē-gōa",
        "filecopyerror": "Bô-hoat-tō· kā tóng-àn \"$1\" khó·-pih khì \"$2\".",
        "filerenameerror": "Bô-hoat-tō· kā tóng-àn \"$1\" kái-miâ chò \"$2\".",
        "filedeleteerror": "Bô-hoat-tō· kā tóng-àn \"$1\" thâi tiāu",
        "directorycreateerror": "Bô-hoat-tō͘ khui bo̍k-lo̍k \"$1\".",
+       "directoryreadonlyerror": "Bo̍k-lio̍k \"$1\" sī taⁿ ē-tàng tha̍k--ê.",
+       "directorynotreadableerror": "Bo̍k-lio̍k \"$1\" sī bē-tàng tha̍k--ê",
        "filenotfound": "Chhōe bô tóng-àn \"$1\".",
        "unexpected": "Koài-koài ê pió-tat: \"$1\"=\"$2\"。",
        "formerror": "Chhò-gō·: bô-hoat-tō· kā pió sàng chhut khì.",
        "no-null-revision": "袂當予\"$1\"產生一个空的修訂本。",
        "badtitle": "M̄-chiâⁿ piau-tê",
        "badtitletext": "Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.",
+       "title-invalid-empty": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k sī khang--ê he̍k-chiá kaⁿ-taⁿ hâm liáu miâ-khong-kan.",
+       "title-invalid-utf8": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k hâm liáu bô chiàⁿ-khak ê 1 lia̍t UTF-8 ê jī.",
+       "title-invalid-interwiki": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k pau-hâm liáu 1-ê bē-tàng ēng ùi tê-bo̍k ê interwiki liân-kiat.",
        "perfcached": "Ē-kha ê chu-liāu tùi lâi--ê, só·-í bô it-tēng sī siōng sin ê. Tī khoài-chhûn-khu siōng chē ē-tàng khǹg{{PLURAL:$1| pit|$1 pit}} chu-liāu.",
        "perfcachedts": "Ē-kha ê chu-liāu tùi lâi--ê, tī $1 keng-sin--koè. Tī khoài-chûn-khu siōng chē ē-tàng khǹg {{PLURAL:$4|pit|$4 pit}} chu-liāu.",
        "querypage-no-updates": "Chit-má bē-sái kái chit ia̍h.\nChia ê chu-liāu bē-tàng sui tiông-sin chéng-lí.",
index c0886a6..dbd48f3 100644 (file)
@@ -31,6 +31,7 @@
        "tog-watchdefault": "Azzecca 'e paggene e li files cagnàte a l'elenco 'e cuntrollo",
        "tog-watchmoves": "Azzecca 'e paggene e li files spustate a l'elenco 'e cuntrollo",
        "tog-watchdeletion": "Azzecca 'e paggene e li files scancellate a l'elenco 'e cuntrollo",
+       "tog-watchuploads": "Azzecca 'e file nuove ca sto a carrecà dint'a lista 'e paggene cuntrullate",
        "tog-watchrollback": "Azzecca 'e paggene addò aggio fatto nu rollback ('o torna arreto) a l'elenco 'e cuntrollo",
        "tog-minordefault": "Indica ogne cagnamento comme piccerillo (predefinito)",
        "tog-previewontop": "Vide previsióne primma d' 'a casella 'e modifica",
        "recentchangeslinked-page": "Nomme d' 'a paggena",
        "recentchangeslinked-to": "Mmusta sulamente 'e cagnamiente a 'e paggene cullegate a chilla specificata",
        "recentchanges-page-added-to-category": "[[:$1]] azzeccato â categurìa",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|na paggena|$2 paggene}}]] azzeccate â categurìa",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] azzeccata â categurìa,  [[Special:WhatLinksHere/$1|sta paggena azzeccat' a 'e categurìe]]",
        "recentchanges-page-removed-from-category": "[[:$1]] luvato d' 'a categurìa",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|na paggena|$2 paggena}}]] luvate d' 'a categurìa",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]]  luvate 'e categurìa, [[Special:WhatLinksHere/$1|sta paggena è azzeccata dint'a n'ati paggene]]",
        "autochange-username": "Cagnamiento automateco MediaWiki",
        "upload": "Carreca file",
        "uploadbtn": "Carreca file",
        "confirmemail_body_set": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha mpustato nu cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
        "confirmemail_invalidated": "Cunferma 'e l'indirizze e-mail scangelleta",
        "invalidateemail": "Scancella 'a cunferma 'e l'e-mail",
+       "notificationemail_subject_changed": "L'indirizzo email riggistrato ncopp'a {{SITENAME}} è stato cagnato",
+       "notificationemail_subject_removed": "L'indirizzo email riggistrato dint'a {{SITENAME}} è stato luvato",
+       "notificationemail_body_changed": "Coccheruno, probbabilmente vuje, 'a ll'indirizzo IP $1,\nave cagnato l'indirizze e-mail d' 'o cunto \"$2\" a \"$3\" ncopp'a {{SITENAME}}.\n\nSi nun eravate vuje, pe' piacere tuzzuliate mò mò n'ammenistratore.",
+       "notificationemail_body_removed": "Coccheruno, probbabilmente vuje, 'a ll'indirizzo IP $1,\nave luvato l'indirizze e-mail d' 'o cunto \"$2\" ncopp'a {{SITENAME}}.\n\nSi nun eravate vuje, pe' piacere tuzzuliate mò mò n'ammenistratore.",
        "scarytranscludedisabled": "['A funziona cullegamiento nfra site wiki è stata stutata]",
        "scarytranscludefailed": "[L'analisi d' 'o template s'è scassato pe' $1]",
        "scarytranscludefailed-httpstatus": "[L'analisi d' 'o template s'è scassato pe' $1: HTTP $2]",
        "watchlistedit-raw-done": "L'elenco 'e paggene cuntrullate è stato agghiurnato.",
        "watchlistedit-raw-added": "{{PLURAL:$1|nu titolo è|$1 titule so'}} stat'azzeccate:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|nu titolo è stato luvato|$1 titule so' state luvate}}:",
-       "watchlistedit-clear-title": "Elenco 'e cuntrollo pulezzato",
+       "watchlistedit-clear-title": "Pulezza 'a lista 'e cuntrollo",
        "watchlistedit-clear-legend": "Pulezza l'elenco 'e paggene cuntrullate",
        "watchlistedit-clear-explain": "Tutte sti titule se luvarranno 'a l'elenco 'e paggene cuntrullate vuosto",
        "watchlistedit-clear-titles": "Titule:",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|pruteggette}} $3 $4 [cascading]",
        "logentry-protect-modify": "$1 {{GENDER:$2|cagnaje}} 'o livello 'e prutezione pe' $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|cagnaje}} 'o livello 'e prutezione pe' $3 $4 [cascading]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' {{GENDER:$3|$3}} 'a $4 a $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' {{GENDER:$6|$3}} 'a $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3",
        "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa}} automatecamente 'a $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|ave carrecato}} $3",
        "sessionprovider-nocookies": "'E cookie ponno stà stutate. Vedite si 'e cookie stann'appicciate e accumminciate n'ata vota.",
        "randomrootpage": "Paggena 'e rareca a ccaso",
        "log-action-filter-block": "Tipo 'e blocco:",
+       "log-action-filter-contentmodel": "Tipo 'e cagnamiento 'e mudell'e cuntenute (contentmodel)",
        "log-action-filter-delete": "Tipo 'e scancellazione:",
+       "log-action-filter-import": "Tipo 'e import:",
+       "log-action-filter-managetags": "Tipo 'e aziona 'e gistinone 'etichette:",
+       "log-action-filter-move": "Tipo 'e spostamento:",
+       "log-action-filter-newusers": "Tipo e' criazione utenza:",
        "log-action-filter-patrol": "Tipo 'e verifica:",
        "log-action-filter-protect": "Tipo 'e protezione:",
+       "log-action-filter-rights": "Tipo 'e cagnamiento 'e deritte",
+       "log-action-filter-suppress": "Tipo 'e suppressione",
        "log-action-filter-upload": "Tipo 'e carreca:",
        "log-action-filter-all": "Tutte",
        "log-action-filter-block-block": "Blocco",
        "log-action-filter-block-reblock": "Modifica blocco",
        "log-action-filter-block-unblock": "Sblocca",
+       "log-action-filter-contentmodel-change": "Cagnamiento 'e mudello 'e cuntenute (Contentmodel)",
+       "log-action-filter-contentmodel-new": "Criazione 'e na paggena 'e mudello 'e cuntenute nun standard",
        "log-action-filter-delete-delete": "Scancellazione 'e paggena",
        "log-action-filter-delete-restore": "Arrepigliament' 'e paggena",
        "log-action-filter-delete-event": "Scancellazione d' 'o reggistro",
        "log-action-filter-delete-revision": "Scancellazione d' 'a verziona",
+       "log-action-filter-import-interwiki": "Mpurtaziona transwiki",
+       "log-action-filter-import-upload": "Mpurtazione 'e XML carrecato",
+       "log-action-filter-managetags-create": "Criazione 'etichetta",
+       "log-action-filter-managetags-delete": "Scancellazione 'etichetta",
+       "log-action-filter-managetags-activate": "Appiccia 'etichetta",
+       "log-action-filter-managetags-deactivate": "Stuta etichetta",
+       "log-action-filter-move-move": "Móve senza sovrascrivere 'e redirect",
+       "log-action-filter-move-move_redir": "Móve senza sovrascrivere 'e redirect",
+       "log-action-filter-newusers-create": "Criazione 'a n'utente anonimo",
+       "log-action-filter-newusers-create2": "Criazione 'a n'utente riggistrato",
+       "log-action-filter-newusers-autocreate": "Criazione automatica",
+       "log-action-filter-newusers-byemail": "Criazione cu na password mannata via email",
        "log-action-filter-patrol-patrol": "Verifica manuale",
        "log-action-filter-patrol-autopatrol": "Verifica automatica",
        "log-action-filter-protect-protect": "Prutezione",
        "log-action-filter-protect-modify": "Cagna prutezione",
        "log-action-filter-protect-unprotect": "Sprutezione",
+       "log-action-filter-protect-move_prot": "Prutezione spustata",
+       "log-action-filter-rights-rights": "Cagnamento manuale",
+       "log-action-filter-rights-autopromote": "Cagnamento automatico",
+       "log-action-filter-suppress-event": "Scancellazione 'e riggistro",
+       "log-action-filter-suppress-revision": "Scancellazione 'e verziona",
+       "log-action-filter-suppress-delete": "Scancellazione 'e paggena",
+       "log-action-filter-suppress-block": "Scancellazione 'utente 'a blocco",
+       "log-action-filter-suppress-reblock": "Scancellazione utente 'a re-blocco",
        "log-action-filter-upload-upload": "Carreca nova",
        "log-action-filter-upload-overwrite": "Recarreca"
 }
index 9815492..77a6e8b 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|zabezpieczył|zabezpieczyła|zabezpieczył(a)}} $3 $4 [kaskadowo]",
        "logentry-protect-modify": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4 [kaskadowo]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} przynależność {{GENDER:$3|$3}} do grupy z $4 do $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} przynależność {{GENDER:$6|$3}} do grupy z $4 do $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup",
        "logentry-rights-autopromote": "$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)",
        "logentry-upload-upload": "$1 {{GENDER:$2|przesłał|przesłała}} $3",
index 66a5bb5..51f26c1 100644 (file)
@@ -69,7 +69,8 @@
                        "Önni",
                        "Diniscoelho",
                        "Josep Maria Roca Peña",
-                       "Luan"
+                       "Luan",
+                       "Gato Preto"
                ]
        },
        "tog-underline": "Sublinhar ligações:",
index ee3bd1e..9764245 100644 (file)
                        "Aursani",
                        "Robin van der Vliet",
                        "Conquistador",
-                       "Frigory"
+                       "Frigory",
+                       "Psychoslave"
                ]
        },
        "sidebar": "{{notranslate}}",
        "botpasswords-label-cancel": "Button label for a button to cancel the creation or edit of a bot password.\n{{Identical|Cancel}}",
        "botpasswords-label-delete": "Button label for the button to delete a bot password.\n{{Identical|Delete}}",
        "botpasswords-label-resetpassword": "Label for the checkbox to reset the actual password for the current bot password.",
-       "botpasswords-label-grants": "Label for the checkmatrix for selecting grants allowed when the bot password is used.",
+       "botpasswords-label-grants": "Label for the checkmatrix for selecting grants allowed when the bot password is used.\n\ngrant: Vidu http://komputeko.net/index_en.php?vorto=grant sed \"konced/i\" egale funkcius.",
        "botpasswords-help-grants": "Help text for the grant selection checkmatrix.",
        "botpasswords-label-restrictions": "Label for the textarea field in which JSON defining access restrictions (e.g. which IP address ranges are allowed) is entered.",
        "botpasswords-label-grants-column": "Label for the checkbox column on the checkmatrix for selecting grants allowed when the bot password is used.",
        "userpage-userdoesnotexist": "Error message displayed when trying to edit or create a page or a subpage that belongs to a user who is not registered on the wiki.\n\nParameters:\n* $1 - a username\n{{identical|userdoesnotexist}}",
        "userpage-userdoesnotexist-view": "Shown in user pages of non-existing users. See for example [{{canonicalurl:User:Foo}} User:Foo].\n\nParameters:\n* $1 - a username\n{{identical|userdoesnotexist}}",
        "blocked-notice-logextract": "{{gender}}\nParameters:\n* $1 - (Optional) the name of the blocked user. Can be used for GENDER.",
-       "clearyourcache": "Text at the top of .js/.css pages",
+       "clearyourcache": "Text at the top of .js/.css pages.\n\nWhen translating browser function names, check how they are translated in the localized versions of these web browsers in your language. If a browser is not translated to it, use English or another language in which browsers are most commonly used by the speakers of your language.",
        "usercssyoucanpreview": "Text displayed on every CSS page.\n\nSee also:\n* {{msg-mw|Userjsyoucanpreview}}\n* {{msg-mw|Showpreview}}",
        "userjsyoucanpreview": "Text displayed on every JavaScript page.\n\nSee also:\n* {{msg-mw|Usercssyoucanpreview}}\n* {{msg-mw|Showpreview}}",
        "usercsspreview": "Text displayed on preview of every user .css subpage.\n\nSee also:\n* {{msg-mw|Sitecsspreview}}",
        "logentry-protect-protect-cascade": "{{Logentry|[[Special:Log/protect]]}}\n\n* $4 - protect expiry (formatted with {{msg-mw|protect-summary-desc}}, multiple possible)\nFor word \"cascading\" see {{msg-mw|protect-summary-cascade}}",
        "logentry-protect-modify": "{{Logentry|[[Special:Log/protect]]}}\n\n* $4 - protect expiry (formatted with {{msg-mw|protect-summary-desc}}, multiple possible)",
        "logentry-protect-modify-cascade": "{{Logentry|[[Special:Log/protect]]}}\n\n* $4 - protect expiry (formatted with {{msg-mw|protect-summary-desc}}, multiple possible)\nFor word \"cascading\" see {{msg-mw|protect-summary-cascade}}",
-       "logentry-rights-rights": "* $1 - username\n* $2 - (see below)\n* $3 - username, also used for GENDER support\n* $4 - list of user groups or {{msg-mw|Rightsnone}}\n* $5 - list of user groups or {{msg-mw|Rightsnone}}\n----\n{{Logentry|[[Special:Log/rights]]}}",
+       "logentry-rights-rights": "* $1 - (see below)\n* $2 - (see below)\n* $3 - target user, like $1\n* $4 - list of user groups or {{msg-mw|Rightsnone}}\n* $5 - list of user groups or {{msg-mw|Rightsnone}}\n* $6 - target user, can be used with GENDER\n----\n{{Logentry|[[Special:Log/rights]]}}",
        "logentry-rights-rights-legacy": "* $1 - username\n* $2 - (see below)\n* $3 - username\n----\n{{Logentry|[[Special:Log/rights]]}}",
-       "logentry-rights-autopromote": "* $1 - username\n* $2 - (see below)\n* $3 - (see below)\n* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $5 - comma separated list of new user groups\n----\n{{Logentry|[[Special:Log/rights]]}}",
+       "logentry-rights-autopromote": "* $1 - username\n* $2 - (see below)\n* $3 - (see below) - unused\n* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $5 - comma separated list of new user groups\n* $6 - target user, can be used with GENDER for $3 - unused\n----\n{{Logentry|[[Special:Log/rights]]}}",
        "logentry-upload-upload": "{{Logentry|[[Special:Log/upload]]}}",
        "logentry-upload-overwrite": "{{Logentry|[[Special:Log/upload]]}}",
        "logentry-upload-revert": "{{Logentry|[[Special:Log/upload]]}}",
index 83e123e..bda02c8 100644 (file)
        "logentry-protect-protect-cascade": "$1 защитил{{GENDER:$2||а}} $3 $4 [каскадно]",
        "logentry-protect-modify": "$1 изменил{{GENDER:$2||а}} уровень защиты $3 $4",
        "logentry-protect-modify-cascade": "$1 изменил{{GENDER:$2||а}} уровень защиты $3 $4 [каскадно]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для {{GENDER:$3|$3}} с $4 на $5",
+       "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||а}} автоматически переведен{{GENDER:$2||а}} из $4 в $5",
        "logentry-upload-upload": "$1 загрузил{{GENDER:$2||а}} $3",
index 52c19c7..6bd7f31 100644 (file)
        "export-addnstext": "नामस्थानात् पुटानि योजयतु ।",
        "export-addns": "संयोजयति",
        "export-download": "सञ्चिका इव रक्षतु ।",
-       "export-templates": "पà¥\8dराà¤\95à¥\83तà¥\80à¤\83 à¤\85नरà¥\8dभावयतà¥\81 à¥¤",
+       "export-templates": "फलà¤\95ानि à¤\86यातà¤\82 à¤\95रà¥\8bतà¥\81",
        "export-pagelinks": "...इत्यस्य गाहाय अनुबद्धपुटानि अन्तरभावयतु ।",
        "allmessages": "व्यवस्था सन्देशाः",
        "allmessagesname": "नाम",
        "thumbnail_gd-library": "अपूर्णं जि.जि.ग्रन्थालयानुन्यासः : विनष्टः कार्यकलापः $1",
        "thumbnail_image-missing": "सञ्चिका विनष्टा इति भाति : $1",
        "thumbnail_image-failure-limit": "एतत् थम्बलाईन् सिद्धं कर्तुं सद्यः जाताः बहवः असफलाः प्रयासाः सन्ति ($1 उत अधिकाः) । कृपया पुनः प्रयतताम् ।",
-       "import": "पà¥\83षà¥\8dठानाà¤\82 à¤¨à¤¿à¤°à¥\8dयातं करोतु",
+       "import": "पà¥\83षà¥\8dठमà¥\8d à¤\86यातं करोतु",
        "importinterwiki": "अन्यस्मात् विकि-जालस्थानात् पृष्ठानि आयातं करोतु",
        "import-interwiki-text": "आयातं कर्तुम् कञ्चन विकि-प्रकल्पं, किञ्चित् पृष्ठं च चिनोतु ।\nसंस्करणस्य दिनाङ्कं, सम्पादकस्य नाम यथा स्थाने भविष्यति ।\nअन्यस्मात् विकि-प्रकल्पात् आयातकृताः सर्वाः संरक्षिताऽऽवल्यः [[Special:Log/import|आयातसंरक्षिताऽऽल्यां]] भविष्यन्ति ।",
        "import-interwiki-sourcewiki": "स्रोत-विकि :",
        "import-interwiki-sourcepage": "स्रोतपृष्ठम् :",
-       "import-interwiki-history": "à¤\8fततà¥\8dपà¥\81à¤\9fारà¥\8dथà¤\82 à¤¸à¤°à¥\8dवà¥\87तिहासानà¥\8d à¤ªà¥\81नरावà¥\83तà¥\8dतà¥\80à¤\83 à¤\9a à¤ªà¥\8dरà¤\95à¥\83तà¥\80à¤\83 à¤\95रà¥\8bतà¥\81 à¥¤",
-       "import-interwiki-templates": "पà¥\8dराà¤\95à¥\83तà¥\80à¤\83 à¤\85नरà¥\8dभावयतà¥\81 à¥¤",
+       "import-interwiki-history": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤°à¥\8dवमà¥\8d à¤\87तिहासमà¥\8d à¤\86यतà¤\82 à¤\95रà¥\8bतà¥\81",
+       "import-interwiki-templates": "सरà¥\8dवà¥\88à¤\83 à¤\89पफलà¤\95à¥\88à¤\83 à¤¸à¤¹ (फलà¤\95à¥\87 à¤ªà¥\8dरयà¥\81à¤\95à¥\8dतानि) à¤\86यातà¤\82 à¤\95रà¥\8bतà¥\81",
        "import-interwiki-submit": "आयातं करोतु ।",
        "import-mapping-default": "मूलस्थितिम् आयातं करोतु",
        "import-mapping-namespace": "नामाकाशे आयातं करोतु :",
        "import-upload-filename": "सञ्चिकानाम",
        "import-comment": "टिप्पणी :",
        "importtext": "[[Special:Export|export utility]] एतेनानुबन्धेन स्रोतविकितः सञ्चिकानां निर्यातं करोतु । भवदीयसङ्गणके सुरक्ष्य अत्र उत्तारयतु ।",
-       "importstart": "पà¥\81à¤\9fानामà¥\8d à¤\86यातà¤\83....",
+       "importstart": "à¤\86यातà¤\95ारà¥\8dयà¤\82 à¤ªà¥\8dरà¤\9aलति...",
        "import-revision-count": "$1 {{PLURAL:$1|पुनरावृत्तिः}}",
        "importnopages": "आयातं कर्तुं पुटानि न सन्ति ।",
        "imported-log-entries": "आयातकृतम्$1{{PLURAL:$1|log entry|प्रवेशसूचिकाः}}.",
index 531eb67..1a85f04 100644 (file)
        "logentry-protect-protect-cascade": "$1 je {{GENDER:$2|zaščitil|zaščitila|zaščitil(-a)}} $3 $4 [kaskadno]",
        "logentry-protect-modify": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stopnjo zaščite $3 $4",
        "logentry-protect-modify-cascade": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stopnjo zaščite $3 $4 [kaskadno]",
-       "logentry-rights-rights": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice {{GENDER:$3|uporabnika|uporabnice}} $3 z $4 na $5",
+       "logentry-rights-rights": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice {{GENDER:$6|uporabnika|uporabnice}} $3 z $4 na $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice uporabnika $3",
        "logentry-rights-autopromote": "$1 je {{GENDER:$2|bil samodejno povišan|bila samodejno povišana|bil(-a) samodejno povišan(-a)}} z $4 na $5",
        "logentry-upload-upload": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
index 49d865a..3d08fa1 100644 (file)
        "logentry-protect-protect-cascade": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4 [преносива заштита]",
        "logentry-protect-modify": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4",
        "logentry-protect-modify-cascade": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4 [преносива заштита]",
-       "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за {{GENDER:$3|$3}} из $4 у $5",
+       "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",
        "logentry-upload-upload": "$1 је {{GENDER:$2|послао|послала}} $3",
index aa2c828..696e8f4 100644 (file)
        "logentry-protect-protect-cascade": "$1 je {{GENDER:$2|zaštitio|zaštitila}} $3 $4 [prenosiva zaštita]",
        "logentry-protect-modify": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4",
        "logentry-protect-modify-cascade": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4 [prenosiva zaštita]",
-       "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za {{GENDER:$3|$3}} iz $4 u $5",
+       "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za {{GENDER:$6|$3}} iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3",
        "logentry-rights-autopromote": "$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5",
        "logentry-upload-upload": "$1 je {{GENDER:$2|poslao|poslala}} $3",
index 1cdb3a1..56419fa 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|skyddade}} $3 $4 [kaskaderande]",
        "logentry-protect-modify": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4 [kaskaderande]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för {{GENDER:$3|$3}} från $4 till $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för {{GENDER:$6|$3}} från $4 till $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|laddade upp}} $3",
        "feedback-bugnew": "Jag kontrollerade. Rapportera ett nytt fel",
        "feedback-bugornote": "Om du har möjlighet att ge en detaljerad teknisk beskrivning av felet kan du lämna en [$1 buggrapport]. \nAnvänd annars formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn.",
        "feedback-cancel": "Avbryt",
-       "feedback-close": "Färdig",
+       "feedback-close": "Fixat",
        "feedback-external-bug-report-button": "Registrera en teknisk uppgift",
        "feedback-dialog-title": "Skicka återkoppling",
        "feedback-dialog-intro": "Du kan använda det enkla formuläret nedan för att skicka in din återkoppling. Din kommentar kommer att läggas till på sidan \"$1\" tillsammans med ditt användarnamn.",
        "log-action-filter-delete-restore": "Återställde sida",
        "log-action-filter-delete-event": "Radering av logg",
        "log-action-filter-delete-revision": "Radering av sidversion",
-       "log-action-filter-move-move": "Flyttning utan att skriva över omdirigeringar",
-       "log-action-filter-move-move_redir": "Flyttning med att skriva över omdirigeringar",
+       "log-action-filter-import-upload": "Importera med XML-uppladdning",
+       "log-action-filter-managetags-create": "Märke skapad",
+       "log-action-filter-managetags-delete": "Märke raderad",
+       "log-action-filter-managetags-activate": "Märke aktiverad",
+       "log-action-filter-managetags-deactivate": "Märke inaktiverad",
+       "log-action-filter-move-move": "Flyttning utan överskrivning av omdirigeringar",
+       "log-action-filter-move-move_redir": "Flyttning med överskrivning av omdirigeringar",
        "log-action-filter-newusers-create": "Skapade av anonyma användare",
        "log-action-filter-newusers-create2": "Skapade av registrerade användare",
        "log-action-filter-newusers-autocreate": "Skapades automatiskt",
index 9bc092e..e29e5e5 100644 (file)
        "prefs-help-signature": "Tartışma sayfalarındaki yorumlar \"<nowiki>~~~~</nowiki>\" ile imzalanmalıdır, bu imzanıza ve zaman damgasına dönüştürülür.",
        "badsig": "Geçersiz ham imza; HTML etiketlerini kontrol edin.",
        "badsiglength": "İmzanız çok uzun.\n$1 {{PLURAL:$1|karakterin|karakterin}} altında olmalı.",
-       "yourgender": "Cinsel kimlik?",
+       "yourgender": "Cinsiyet?",
        "gender-unknown": "Açıklamak istemiyorum",
        "gender-male": "Erkek",
        "gender-female": "Kadın",
        "rcshowhidemine": "Benim değişikliklerimi $1",
        "rcshowhidemine-show": "göster",
        "rcshowhidemine-hide": "gizle",
-       "rcshowhidecategorization": "$1 sayfa kategorizasyonu",
+       "rcshowhidecategorization": "sayfa kategorizasyonunu $1",
        "rcshowhidecategorization-show": "Göster",
        "rcshowhidecategorization-hide": "Gizle",
        "rclinks": "Son $2 günde yapılan son $1 değişikliği göster;<br /> $3",
index 3bf57f7..96f7c0b 100644 (file)
        "badretype": "Кертелгән серсүзләр бер үк түгел.",
        "userexists": "Кертелгән исем кулланыла.\nЗинһар, башка исем сайлагыз.",
        "loginerror": "Керү хатасы",
+       "createacct-error": "Хисап язмазын булдыруда хата китте",
        "createaccounterror": "Хисап язмасын төзеп булмый: $1",
        "nocookiesnew": "Кулланучы теркәлгән, ләкин үз хисап язмасы белән кермәгән. {{SITENAME}} кулланучыны тану өчен «cookies» куллана. Сездә «cookies» тыелган. Зинһар, башта аларны рөхсәт итегез, аннан исем һәм серсүз белән керегез.",
        "nocookieslogin": "{{SITENAME}} кулланучыны тану өчен «cookies» куллана. Сез аларны сүндергәнсез. Зинһар, аларны кабызып, яңадан керегез.",
        "botpasswords-label-restrictions": "Куллану чикләүләре:",
        "botpasswords-label-grants-column": "Рөхсәт",
        "botpasswords-bad-appid": "Атамасы «$1» булган бот исеме ярамый.",
+       "botpasswords-created-title": "Бот серсүзе булдырылды",
        "resetpass_forbidden": "Серсүз үзгәртелә алмый",
        "resetpass-no-info": "Бу битне карау өчен сез системага үз хисап язмагыз ярдәмендә керергә тиеш.",
        "resetpass-submit-loggedin": "Серсүзне үзгәртү",
index 9e1f36c..84d2d2e 100644 (file)
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|захистив|захистила}} $3 $4 [каскадно]",
        "logentry-protect-modify": "$1 {{GENDER:$2|змінив|змінила}} налаштування захисту $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|змінив|змінила}} налаштування захисту $3 $4 [каскадно]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для {{GENDER:$3|$3}} із $4 на $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для {{GENDER:$6|$3}} із $4 на $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для $3",
        "logentry-rights-autopromote": "$1 було автоматично переведено із $4 в $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
index abceeb0..aae60f7 100644 (file)
        "exif-iimcategory": "زمرہ",
        "exif-orientation-1": "عام",
        "exif-meteringmode-0": "نامعلوم",
+       "exif-dc-contributor": "ترمیم کنندگان",
        "namespacesall": "تمام",
        "monthsall": "تمام",
        "deletedwhileediting": "انتباہ: آپ کے ترمیم شروع کرنے کے بعد یہ صفحہ حذف کیا جا چکا ہے!",
index 28dc0d8..b4e8ba2 100644 (file)
@@ -28,6 +28,7 @@
        "tog-watchdefault": "Igdugang in mga pakli ngan mga paypay nga akon ginliwat ngadto han akon angay timan-an",
        "tog-watchmoves": "Igdugang in mga pakli nga mga paypay nga akon ginpamalhin ngadto han akon angay timan-an",
        "tog-watchdeletion": "Igdugang in mga pakli ngan mga paypay nga akon ginpamara ngadto han akon angay timan-an",
+       "tog-watchuploads": "Dugngi an mga file nga akon gin-upload ha akon watchlist",
        "tog-watchrollback": "Igdugang an mga pakli ha akon watchlist an ak mga gin-rollback",
        "tog-minordefault": "Tigamni an ngatanan nga mga pagliwat nga gudti hin default",
        "tog-previewontop": "Igpakita in prevista o pan-ugsa-nga-lantaw ugsa hiton pagliwat nga kahon",
@@ -45,6 +46,7 @@
        "tog-watchlisthidebots": "Tago-a an ginliwat hin bot tikang han angay timan-an",
        "tog-watchlisthideminor": "Tago-a an mga gagmay nga pagliwat tikang han angay timan-an",
        "tog-watchlisthideliu": "Igatag an mga ginliwat han naka log-in nga mga gumaramit tikang ha gintitiman-an",
+       "tog-watchlistreloadautomatically": "Igreload automatic an akon watchlist kada pagbabag-o han filter (kinahanglan hin JavaScript)",
        "tog-watchlisthideanons": "Igtago an mga ginliwat han mga waray nagpakilala nga nagamit tikang ha gintitiman-an",
        "tog-watchlisthidepatrolled": "Igatag an mga pinatrolya nga mga pagliwat tikang ha angay timan-an",
        "tog-watchlisthidecategorization": "Igtago an kategorisasyon han mga pakli",
        "cachedspecial-refresh-now": "Igkita an pinakaurhi.",
        "categories": "Mga kaarangay",
        "categoriesfrom": "Igpakita in mga kaarangay nga natikang ha:",
-       "special-categories-sort-count": "igtalaan ha pag-ihap",
-       "special-categories-sort-abc": "igtalaan ha abakadahan",
        "deletedcontributions": "Mga ginpara nga mga ámot hin nágámit",
        "deletedcontributions-title": "Ginpara nga mga amot han nagamit",
        "sp-deletedcontributions-contribs": "mga amot",
        "version-entrypoints-header-entrypoint": "Surudlan",
        "version-entrypoints-header-url": "URL",
        "fileduplicatesearch": "Pamiling hin nadoble nga mga paypay",
-       "fileduplicatesearch-legend": "Pamiling hin nadoble",
        "fileduplicatesearch-filename": "Ngaran han paypay:",
        "fileduplicatesearch-submit": "Pamilnga",
        "fileduplicatesearch-noresults": "Waray nabilngan nga paypay nga an ngaran in \"$1\".",
index 81aa690..299d974 100644 (file)
        "history-feed-item-nocomment": "$2 $1",
        "history-feed-empty": "所请求的页面不存在。它可能已被删除或重命名。\n尝试[[Special:Search|搜索本站]]获得相关的新建页面。",
        "history-edit-tags": "编辑选定修订版本的标签",
-       "rev-deleted-comment": "(编辑摘要被除)",
+       "rev-deleted-comment": "(编辑摘要被除)",
        "rev-deleted-user": "(用户名被删除)",
        "rev-deleted-event": "(日志详情已移除)",
        "rev-deleted-user-contribs": "[用户名或IP地址被删除 - 编辑在贡献中隐藏]",
        "search-result-size": "$1($2个字)",
        "search-result-category-size": "$1个成员($2个子分类,$3个文件)",
        "search-redirect": "(重定向自“$1”)",
-       "search-section": "(“$1”段落)",
+       "search-section": "(“$1”章节)",
        "search-category": "(分类$1)",
        "search-file-match": "(匹配文件内容)",
        "search-suggest": "您是不是要找:$1",
        "rc_categories": "分类限制(用“|”分隔):",
        "rc_categories_any": "任何选择的",
        "rc-change-size-new": "更改后有$1字节",
-       "newsectionsummary": "/* $1 */ 新段落",
+       "newsectionsummary": "/* $1 */ 新章节",
        "rc-enhanced-expand": "显示细节",
        "rc-enhanced-hide": "隐藏细节",
        "rc-old-title": "最初创建为“$1”",
        "logentry-protect-protect-cascade": "$1{{GENDER:$2|保护了}}$3 $4[级联]",
        "logentry-protect-modify": "$1{{GENDER:$2|更改了}}$3的保护等级$4",
        "logentry-protect-modify-cascade": "$1{{GENDER:$2|更改了}}$3的保护等级$4[级联]",
-       "logentry-rights-rights": "$1已将{{GENDER:$3|$3}}的用户组从$4{{GENDER:$2|更改}}至$5",
+       "logentry-rights-rights": "$1已将{{GENDER:$6|$3}}的用户组从$4{{GENDER:$2|更改}}至$5",
        "logentry-rights-rights-legacy": "$1更改$3的用户组",
        "logentry-rights-autopromote": "$1被自动地{{GENDER:$2|提升}}自$4至$5",
        "logentry-upload-upload": "$1{{GENDER:$2|上传}}$3",
index 55f361c..8fd25a6 100644 (file)
@@ -24,6 +24,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\Linker\LinkTarget;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
index 3e6ee56..975ec2a 100644 (file)
@@ -1,13 +1,11 @@
 /**
- * MediaWiki Print style sheet for CSS2-capable browsers.
- * Copyright Gabriel Wicke, http://www.aulinx.de/
+ * MediaWiki print style sheet
+ * Largely based on work by Gabriel Wicke
  *
- * Derived from the plone (http://plone.org/) styles
+ * Originally derived from Plone (https://plone.org/) styles
  * Copyright Alexander Limi
  */
 
-/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-
 /**
  * Hide all the elements irrelevant for printing
  */
@@ -18,73 +16,83 @@ div.top,
 div#column-one,
 .mw-editsection,
 .mw-editsection-like,
-div#f-poweredbyico,
-div#f-copyrightico,
-li#about,
-li#disclaimer,
-li#mobileview,
-li#privacy,
 #footer-places,
 .mw-hidden-catlinks,
 .usermessage,
 .patrollink,
 .ns-0 .mw-redirectedfrom,
+div.magnify,
 #mw-navigation,
-#siteNotice {
+#siteNotice,
+/* Deprecated, changed in core */
+div#f-poweredbyico,
+div#f-copyrightico,
+li#about,
+li#disclaimer,
+li#mobileview,
+li#privacy {
        display: none;
 }
 
-/**
- * Pagination
- */
-.wikitable, .thumb, img {
-       page-break-inside: avoid;
-}
-
-h2, h3, h4, h5, h6 {
-       page-break-after: avoid;
-}
-
-p {
-       widows: 3;
-       orphans: 3;
-}
-
 /**
  * Generic HTML elements
  */
 body {
-       background: white;
-       color: black;
+       background: #fff;
+       color: #000;
        margin: 0;
        padding: 0;
 }
 
-ul {
-       list-style-type: square;
-}
-
-h1, h2, h3, h4, h5, h6 {
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
        font-weight: bold;
+       /* Pagination */
+       page-break-after: avoid;
 }
 
 dt {
        font-weight: bold;
 }
 
+ul {
+       list-style-type: square;
+}
+
 p {
        margin: 1em 0;
        line-height: 1.2em;
+       /* Pagination */
+       orphans: 3;
+       widows: 3;
 }
 
-pre, .mw-code {
-       border: 1pt dashed black;
-       white-space: pre;
+pre,
+.mw-code {
+       background: #fff;
+       color: #000;
+       border: 1pt dashed #000;
+       padding: 1em 0;
        font-size: 8pt;
+       white-space: pre;
+       word-wrap: break-word;
        overflow: auto;
-       padding: 1em 0;
-       background: white;
-       color: black;
+}
+
+img,
+.wikitable,
+.thumb {
+       /* Pagination */
+       page-break-inside: avoid;
+}
+
+img {
+       border: 0;
+       vertical-align: middle;
 }
 
 /**
@@ -96,12 +104,12 @@ pre, .mw-code {
 }
 
 .mw-body {
-       background: white;
-       border: none !important;
+       background: #fff;
+       color: #000;
+       border: 0 !important;
        padding: 0 !important;
        margin: 0 !important;
        direction: ltr;
-       color: black;
 }
 
 #column-content {
@@ -114,8 +122,8 @@ pre, .mw-code {
 }
 
 #toc {
-       border: 1px solid #aaaaaa;
        background-color: #f9f9f9;
+       border: 1pt solid #aaa;
        padding: 5px;
        display: table;
 }
@@ -145,18 +153,13 @@ pre, .mw-code {
 }
 
 #footer {
-       background: white;
-       color: black;
+       background: #fff;
+       color: #000;
        margin-top: 1em;
-       border-top: 1px solid #AAA;
+       border-top: 1pt solid #aaa;
        direction: ltr;
 }
 
-img {
-       border: none;
-       vertical-align: middle;
-}
-
 /**
  * Links
  */
@@ -168,13 +171,14 @@ a {
 /* Expand URLs for printing */
 .mw-body a.external.text:after,
 .mw-body a.external.autonumber:after {
-       content: " (" attr(href) ")";
+       content: " (" attr( href ) ")";
+       word-wrap: break-word;
 }
 
 /* Expand protocol-relative URLs for printing */
 .mw-body a.external.text[href^='//']:after,
 .mw-body a.external.autonumber[href^='//']:after {
-       content: " (https:" attr(href) ")";
+       content: " (https:" attr( href ) ")";
 }
 
 /* MSIE/Win doesn't understand 'inherit' */
@@ -182,7 +186,7 @@ a,
 a.external,
 a.new,
 a.stub {
-       color: black !important;
+       color: #000 !important;
        text-decoration: none !important;
 }
 
@@ -230,23 +234,23 @@ div.center {
  * Thumbnails
  */
 div.thumb {
-       border: none;
+       background-color: transparent;
+       border: 0;
        width: auto;
        margin-top: 0.5em;
        margin-bottom: 0.8em;
-       background-color: transparent;
 }
 
 div.thumbinner {
-       border: 1px solid #cccccc;
+       background-color: #fff;
+       border: 1pt solid #ccc;
        padding: 3px !important;
-       background-color: White;
        font-size: 94%;
        text-align: center;
 }
 
 html .thumbimage {
-       border: 1px solid #cccccc;
+       border: 1pt solid #ccc;
 }
 
 html .thumbcaption {
@@ -259,10 +263,6 @@ html .thumbcaption {
        word-wrap: break-word;
 }
 
-div.magnify {
-       display: none;
-}
-
 /* @noflip */
 div.tright {
        float: right;
@@ -278,7 +278,7 @@ div.tleft {
 }
 
 img.thumbborder {
-       border: 1px solid #dddddd;
+       border: 1pt solid #ddd;
 }
 
 /**
@@ -287,25 +287,28 @@ img.thumbborder {
  */
 table.wikitable,
 table.mw_metadata {
+       background: #fff;
        margin: 1em 0;
-       border: 1px #aaa solid;
-       background: white;
+       border: 1pt solid #aaa;
        border-collapse: collapse;
 }
 
-table.wikitable > tr > th, table.wikitable > tr > td,
-table.wikitable > * > tr > th, table.wikitable > * > tr > td,
-.mw_metadata th, .mw_metadata td {
-       border: 1px #aaa solid;
+table.wikitable > tr > th,
+table.wikitable > tr > td,
+table.wikitable > * > tr > th,
+table.wikitable > * > tr > td,
+.mw_metadata th,
+.mw_metadata td {
+       border: 1pt solid #aaa;
        padding: 0.2em;
 }
 
 table.wikitable > tr > th,
 table.wikitable > * > tr > th,
 .mw_metadata th {
-       text-align: center;
-       background: white;
+       background: #fff;
        font-weight: bold;
+       text-align: center;
 }
 
 table.wikitable > caption,
@@ -315,7 +318,7 @@ table.wikitable > caption,
 
 table.listing,
 table.listing td {
-       border: 1pt solid black;
+       border: 1pt solid #000;
        border-collapse: collapse;
 }
 
@@ -328,26 +331,23 @@ a.sortheader {
  */
 .catlinks ul {
        display: inline;
-       margin: 0;
        padding: 0;
-       list-style: none;
-       list-style-type: none;
-       list-style-image: none;
+       list-style: none none;
 }
 
 .catlinks li {
        display: inline-block;
        line-height: 1.15em;
        padding: 0 .4em;
-       border-left: 1px solid #AAA;
+       border-left: 1pt solid #aaa;
        margin: 0.1em 0;
 }
 
 .catlinks li:first-child {
        padding-left: .2em;
-       border-left: none;
+       border-left: 0;
 }
 
 .printfooter {
-       padding: 1em 0 1em 0;
+       padding: 1em 0;
 }
index daebac1..4c618d4 100644 (file)
@@ -119,6 +119,9 @@ abbr[title],
 /* Comment portions of RC entries */
 span.comment {
        font-style: italic;
+       unicode-bidi: -moz-isolate;
+       unicode-bidi: -webkit-isolate;
+       unicode-bidi: isolate;
 }
 
 /**
index 49af809..9836403 100644 (file)
@@ -80,8 +80,9 @@
                                } else if ( page.invalidreason ) {
                                        resultOut = mw.html.escape( page.invalidreason );
                                }
-                               $spinnerDestCheck.remove();
                                uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
+                       } ).always( function () {
+                               $spinnerDestCheck.remove();
                        } );
                },
 
                                prop: 'text',
                                pst: true
                        } ).done( function ( result ) {
-                               $spinnerLicense.remove();
                                uploadLicense.processResult( result, license );
+                       } ).always( function () {
+                               $spinnerLicense.remove();
                        } );
                },
 
index b8cc059..899daa5 100644 (file)
@@ -94,7 +94,9 @@
                        url = ( ajaxOptions && ajaxOptions.url ) || this.defaults.ajax.url;
                        origin = ( parameters && parameters.origin ) || this.defaults.parameters.origin;
                        url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) +
-                               'origin=' + encodeURIComponent( origin );
+                               // Depending on server configuration, MediaWiki may forbid periods in URLs, due to an IE 6
+                               // XSS bug. So let's escape them here. See WebRequest::checkUrlExtension() and T30235.
+                               'origin=' + encodeURIComponent( origin ).replace( /\./g, '%2E' );
                        newAjaxOptions = $.extend( {}, ajaxOptions, { url: url } );
                } else {
                        newAjaxOptions = ajaxOptions;
index b4ff40a..1f21fc6 100644 (file)
                                // Prevent jQuery from overriding the Content-Type header
                                ajaxOptions.contentType = false;
                        } else {
-                               // Some deployed MediaWiki >= 1.17 forbid periods in URLs, due to an IE XSS bug
-                               // So let's escape them here. See bug #28235
                                // This works because jQuery accepts data as a query string or as an Object
-                               ajaxOptions.data = $.param( parameters ).replace( /\./g, '%2E' );
-
+                               ajaxOptions.data = $.param( parameters );
                                // If we extracted a token parameter, add it back in.
                                if ( token ) {
                                        ajaxOptions.data += '&token=' + encodeURIComponent( token );
                                }
 
+                               // Depending on server configuration, MediaWiki may forbid periods in URLs, due to an IE 6
+                               // XSS bug. So let's escape them here. See WebRequest::checkUrlExtension() and T30235.
+                               ajaxOptions.data = ajaxOptions.data.replace( /\./g, '%2E' );
+
                                if ( ajaxOptions.contentType === 'multipart/form-data' ) {
                                        // We were asked to emulate but can't, so drop the Content-Type header, otherwise
                                        // it'll be wrong and the server will fail to decode the POST body
diff --git a/tests/browser/ci.yml b/tests/browser/ci.yml
new file mode 100644 (file)
index 0000000..8c9865e
--- /dev/null
@@ -0,0 +1,8 @@
+BROWSER:
+  - firefox
+
+MEDIAWIKI_ENVIRONMENT:
+  - beta
+
+PLATFORM:
+  - Linux
index 1889575..a89bd90 100644 (file)
@@ -25,6 +25,7 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase {
                        'SiteStore' => [ 'getSiteStore', SiteStore::class ],
                        'SiteLookup' => [ 'getSiteLookup', SiteLookup::class ],
                        'StatsdDataFactory' => [ 'getStatsdDataFactory', StatsdDataFactory::class ],
+                       'EventRelayerGroup' => [ 'getEventRelayerGroup', EventRelayerGroup::class ],
                ];
        }
 
@@ -49,6 +50,7 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase {
                        'SiteStore' => [ 'SiteStore', SiteStore::class ],
                        'SiteLookup' => [ 'SiteLookup', SiteLookup::class ],
                        'StatsdDataFactory' => [ 'StatsdDataFactory', StatsdDataFactory::class ],
+                       'EventRelayerGroup' => [ 'EventRelayerGroup', EventRelayerGroup::class ],
                ];
        }
 
index b3465e1..7d025d2 100644 (file)
@@ -665,4 +665,41 @@ class TitleTest extends MediaWikiTestCase {
                        'exists() should re-query database when GAID_FOR_UPDATE is used'
                );
        }
+
+       public function provideCreateFragmentTitle() {
+               return [
+                       [ Title::makeTitle( NS_MAIN, 'Test' ), 'foo' ],
+                       [ Title::makeTitle( NS_TALK, 'Test', 'foo' ), '' ],
+                       [ Title::makeTitle( NS_CATEGORY, 'Test', 'foo' ), 'bar' ],
+                       [ Title::makeTitle( NS_MAIN, 'Test1', '', 'interwiki' ), 'baz' ]
+               ];
+       }
+
+       /**
+        * @covers Title::createFragmentTarget
+        * @dataProvider provideCreateFragmentTitle
+        */
+       public function testCreateFragmentTitle( Title $title, $fragment ) {
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [
+                       'InterwikiLoadPrefix' => [
+                               function ( $prefix, &$iwdata ) {
+                                       if ( $prefix === 'interwiki' ) {
+                                               $iwdata = [
+                                                       'iw_url' => 'http://example.com/',
+                                                       'iw_local' => 0,
+                                                       'iw_trans' => 0,
+                                               ];
+                                               return false;
+                                       }
+                               },
+                       ],
+               ] );
+
+               $fragmentTitle = $title->createFragmentTarget( $fragment );
+
+               $this->assertEquals( $title->getNamespace(), $fragmentTitle->getNamespace() );
+               $this->assertEquals( $title->getText(), $fragmentTitle->getText() );
+               $this->assertEquals( $title->getInterwiki(), $fragmentTitle->getInterwiki() );
+               $this->assertEquals( $fragment, $fragmentTitle->getFragment() );
+       }
 }
index 96e200d..a8beb91 100644 (file)
@@ -252,4 +252,29 @@ class BagOStuffTest extends MediaWikiTestCase {
                $this->assertType( 'ScopedCallback', $value1, 'First reentrant call returned lock' );
                $this->assertType( 'ScopedCallback', $value1, 'Second reentrant call returned lock' );
        }
+
+       /**
+        * @covers BagOStuff::__construct
+        * @covers BagOStuff::trackDuplicateKeys
+        */
+       public function testReportDupes() {
+               $logger = $this->getMock( 'Psr\Log\NullLogger' );
+               $logger->expects( $this->once() )
+                       ->method( 'warning' )
+                       ->with( 'Duplicate get(): "{key}" fetched {count} times', [
+                               'key' => 'foo',
+                               'count' => 2,
+                       ] );
+
+               $cache = new HashBagOStuff( [
+                       'reportDupes' => true,
+                       'asyncHandler' => 'DeferredUpdates::addCallableUpdate',
+                       'logger' => $logger,
+               ] );
+               $cache->get( 'foo' );
+               $cache->get( 'bar' );
+               $cache->get( 'foo' );
+
+               DeferredUpdates::doUpdates();
+       }
 }
index 013bbc1..913253b 100644 (file)
@@ -85,7 +85,7 @@ class TitleValueTest extends MediaWikiTestCase {
         * @dataProvider fragmentTitleProvider
         */
        public function testCreateFragmentTitle( TitleValue $title, $fragment ) {
-               $fragmentTitle = $title->createFragmentTitle( $fragment );
+               $fragmentTitle = $title->createFragmentTarget( $fragment );
 
                $this->assertEquals( $title->getNamespace(), $fragmentTitle->getNamespace() );
                $this->assertEquals( $title->getText(), $fragmentTitle->getText() );