Merge "resourceloader: Set the request base parameters on server-side"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 26 Jun 2019 23:00:05 +0000 (23:00 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 26 Jun 2019 23:00:05 +0000 (23:00 +0000)
91 files changed:
RELEASE-NOTES-1.34
autoload.php
docs/hooks.txt
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/Linker.php
includes/OutputPage.php
includes/Rest/Handler.php
includes/Rest/Router.php
includes/api/ApiQueryLanguageinfo.php
includes/api/i18n/es.json
includes/cache/LinkBatch.php
includes/changes/ChangesFeed.php
includes/export/WikiExporter.php
includes/filerepo/file/LocalFile.php
includes/installer/i18n/ca.json
includes/installer/i18n/ia.json
includes/installer/i18n/sr-ec.json
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/logging/BlockLogFormatter.php
includes/resourceloader/ResourceLoaderImage.php
includes/search/PrefixSearch.php
includes/session/SessionManager.php
includes/session/SessionManagerInterface.php
includes/skins/SkinFactory.php
includes/specialpage/QueryPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialEmailUser.php
includes/specials/SpecialMute.php [new file with mode: 0644]
includes/specials/SpecialUserrights.php
includes/specials/helpers/LoginHelper.php
includes/user/User.php
languages/i18n/ar.json
languages/i18n/az.json
languages/i18n/be-tarask.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/exif/ml.json
languages/i18n/exif/sr-ec.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/fy.json
languages/i18n/gcr.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/it.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lrc.json
languages/i18n/mk.json
languages/i18n/nan.json
languages/i18n/nl.json
languages/i18n/nqo.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sh.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/tr.json
languages/i18n/uk.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesEn.php
resources/Resources.php
resources/src/mediawiki.special.mute.js [new file with mode: 0644]
resources/src/mediawiki.special.pageLanguage.js
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/Revision/FallbackSlotRoleHandlerTest.php
tests/phpunit/includes/Revision/RevisionStoreFactoryTest.php
tests/phpunit/includes/Revision/SlotRoleHandlerTest.php
tests/phpunit/includes/Revision/SlotRoleRegistryTest.php
tests/phpunit/includes/libs/rdbms/connectionmanager/ConnectionManagerTest.php
tests/phpunit/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManagerTest.php
tests/phpunit/includes/logging/BlockLogFormatterTest.php
tests/phpunit/includes/logging/LogFormatterTestCase.php
tests/phpunit/includes/session/SessionManagerTest.php
tests/phpunit/includes/specials/SpecialMuteTest.php [new file with mode: 0644]

index 5c0b57e..549f7e8 100644 (file)
@@ -33,6 +33,9 @@ For notes on 1.33.x and older releases, see HISTORY.
   the code as the request identificator. Otherwise, the sent header will be
   ignored and the request ID will either be taken from Apache's mod_unique
   module or will be generated by Mediawiki itself (depending on the set-up).
+* $wgEnableSpecialMute (T218265) - This configuration controls whether
+  Special:Mute is available and whether to include a link to it on emails
+  originating from Special:Email.
 
 ==== Changed configuration ====
 * $wgUseCdn, $wgCdnServers, $wgCdnServersNoPurge, and $wgCdnMaxAge – These four
@@ -57,7 +60,8 @@ For notes on 1.33.x and older releases, see HISTORY.
   wikidiff2.moved_paragraph_detection_cutoff.
 
 === New user-facing features in 1.34 ===
-* …
+* Special:Mute has been added as a quick way for users to block unwanted emails
+  from other users originating from Special:EmailUser.
 
 === New developer features in 1.34 ===
 * Language::formatTimePeriod now supports the new 'avoidhours' option to output
@@ -230,6 +234,19 @@ because of Phabricator reports.
 * OutputPage::wrapWikiMsg() no longer accepts an options parameter. This was
   deprecated since 1.20.
 * Skin::outputPage() no longer accepts a context. This was deprecated in 1.20.
+* Linker::link() no longer accepts a string for the query array, as was
+  deprecated in 1.20.
+* PrefixSearch::titleSearch(), deprecated in 1.23, has been removed. Use the
+  SearchEngine::defaultPrefixSearch or ::completionSearch() methods instead.
+* The UserRights hook, deprecated in 1.26, has been removed. Instead, use the
+  UserGroupsChanged hook.
+* Skin::getDefaultInstance(), deprecated in 1.27, has been removed. Get the
+  instance from MediaWikiServices instead.
+* The UserLoadFromSession hook, deprecated in 1.27, has been removed.
+* The wfResetSessionID global function, deprecated in 1.27, has been removed.
+  Use MediaWiki\Session\SessionManager instead.
+* The wfGetLBFactory global function, deprecated in 1.27, has been removed.
+  Use MediaWikiServices::getInstance()->getDBLoadBalancerFactory().
 * …
 
 === Deprecations in 1.34 ===
index 698dbf2..0b93f49 100644 (file)
@@ -1388,6 +1388,7 @@ $wgAutoloadLocalClasses = [
        'SpecialLockdb' => __DIR__ . '/includes/specials/SpecialLockdb.php',
        'SpecialLog' => __DIR__ . '/includes/specials/SpecialLog.php',
        'SpecialMergeHistory' => __DIR__ . '/includes/specials/SpecialMergeHistory.php',
+       'SpecialMute' => __DIR__ . '/includes/specials/SpecialMute.php',
        'SpecialMyLanguage' => __DIR__ . '/includes/specials/SpecialMyLanguage.php',
        'SpecialMycontributions' => __DIR__ . '/includes/specials/redirects/SpecialMycontributions.php',
        'SpecialMypage' => __DIR__ . '/includes/specials/redirects/SpecialMypage.php',
index b275adc..99a3d1a 100644 (file)
@@ -3744,14 +3744,6 @@ $name: user name
 $user: user object
 &$s: database query object
 
-'UserLoadFromSession': DEPRECATED since 1.27! Create a
-MediaWiki\Session\SessionProvider instead.
-Called to authenticate users on external/environmental means; occurs before
-session is loaded.
-$user: user object being loaded
-&$result: set this to a boolean value to abort the normal authentication
-  process
-
 'UserLoadOptions': When user options/preferences are being loaded from the
 database.
 $user: User object
@@ -3832,12 +3824,6 @@ message(s).
 &$user: user retrieving new talks messages
 &$talks: array of new talks page(s)
 
-'UserRights': DEPRECATED since 1.26! Use UserGroupsChanged instead.
-After a user's group memberships are changed.
-&$user: User object that was changed
-$add: Array of strings corresponding to groups added
-$remove: Array of strings corresponding to groups removed
-
 'UserSaveOptions': Called just before saving user preferences. Hook handlers can
 either add or manipulate options, or reset one back to it's default to block
 changing it. Hook handlers are also allowed to abort the process by returning
index 2075432..10155f6 100644 (file)
@@ -1689,6 +1689,16 @@ $wgEnableEmail = true;
  */
 $wgEnableUserEmail = true;
 
+/**
+ * Set to true to enable the Special Mute page. This allows users
+ * to mute unwanted communications from other users, and is linked
+ * to from emails originating from Special:Email.
+ *
+ * @since 1.34
+ * @deprecated 1.34
+ */
+$wgEnableSpecialMute = false;
+
 /**
  * Set to true to enable user-to-user e-mail blacklist.
  *
index fed9234..05c4655 100644 (file)
@@ -30,7 +30,6 @@ use MediaWiki\MediaWikiServices;
 use MediaWiki\ProcOpenError;
 use MediaWiki\Session\SessionManager;
 use MediaWiki\Shell\Shell;
-use Wikimedia\ScopedCallback;
 use Wikimedia\WrappedString;
 use Wikimedia\AtEase\AtEase;
 
@@ -2430,28 +2429,6 @@ function wfRelativePath( $path, $from ) {
        return implode( DIRECTORY_SEPARATOR, $pieces );
 }
 
-/**
- * Reset the session id
- *
- * @deprecated since 1.27, use MediaWiki\Session\SessionManager instead
- * @since 1.22
- */
-function wfResetSessionID() {
-       wfDeprecated( __FUNCTION__, '1.27' );
-       $session = SessionManager::getGlobalSession();
-       $delay = $session->delaySave();
-
-       $session->resetId();
-
-       // Make sure a session is started, since that's what the old
-       // wfResetSessionID() did.
-       if ( session_id() !== $session->getId() ) {
-               wfSetupSession( $session->getId() );
-       }
-
-       ScopedCallback::consume( $delay );
-}
-
 /**
  * Initialise php session
  *
@@ -2600,19 +2577,6 @@ function wfGetLB( $wiki = false ) {
        }
 }
 
-/**
- * Get the load balancer factory object
- *
- * @deprecated since 1.27, use MediaWikiServices::getInstance()->getDBLoadBalancerFactory() instead.
- * TODO: Remove in MediaWiki 1.35
- *
- * @return \Wikimedia\Rdbms\LBFactory
- */
-function wfGetLBFactory() {
-       wfDeprecated( __METHOD__, '1.27' );
-       return MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
-}
-
 /**
  * Find a file.
  * @deprecated since 1.34, use MediaWikiServices
index 39f4394..01f695a 100644 (file)
@@ -89,12 +89,6 @@ class Linker {
                        return "<!-- ERROR -->$html";
                }
 
-               if ( is_string( $query ) ) {
-                       // some functions withing core using this still hand over query strings
-                       wfDeprecated( __METHOD__ . ' with parameter $query as string (should be array)', '1.20' );
-                       $query = wfCgiToArray( $query );
-               }
-
                $services = MediaWikiServices::getInstance();
                $options = (array)$options;
                if ( $options ) {
@@ -694,8 +688,8 @@ class Linker {
                        $label = $title->getPrefixedText();
                }
                $encLabel = htmlspecialchars( $label );
-               $file = MediaWikiServices::getInstance()->getRepoGroup()->findFile( $title );
-               $currentExists = $time ? ( $file != false ) : false;
+               $currentExists = $time
+                       && MediaWikiServices::getInstance()->getRepoGroup()->findFile( $title ) !== false;
 
                if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads )
                        && !$currentExists
index b8cbff1..4ccb0d4 100644 (file)
@@ -2278,7 +2278,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * T23672: Add Accept-Language to Vary and Key headers if there's no 'variant' parameter in GET.
+        * T23672: Add Accept-Language to Vary header if there's no 'variant' parameter in GET.
         *
         * For example:
         *   /w/index.php?title=Main_page will vary based on Accept-Language; but
index 472e1cc..cee403f 100644 (file)
@@ -3,6 +3,9 @@
 namespace MediaWiki\Rest;
 
 abstract class Handler {
+       /** @var Router */
+       private $router;
+
        /** @var RequestInterface */
        private $request;
 
@@ -14,15 +17,25 @@ abstract class Handler {
 
        /**
         * Initialise with dependencies from the Router. This is called after construction.
+        * @internal
         */
-       public function init( RequestInterface $request, array $config,
+       public function init( Router $router, RequestInterface $request, array $config,
                ResponseFactory $responseFactory
        ) {
+               $this->router = $router;
                $this->request = $request;
                $this->config = $config;
                $this->responseFactory = $responseFactory;
        }
 
+       /**
+        * Get the Router. The return type declaration causes it to raise
+        * a fatal error if init() has not yet been called.
+        */
+       protected function getRouter(): Router {
+               return $this->router;
+       }
+
        /**
         * Get the current request. The return type declaration causes it to raise
         * a fatal error if init() has not yet been called.
index 39bee89..279c15e 100644 (file)
@@ -237,8 +237,9 @@ class Router {
                $spec = $match['userData'];
                $objectFactorySpec = array_intersect_key( $spec,
                        [ 'factory' => true, 'class' => true, 'args' => true ] );
+               /** @var $handler Handler (annotation for PHPStorm) */
                $handler = ObjectFactory::getObjectFromSpec( $objectFactorySpec );
-               $handler->init( $request, $spec, $this->responseFactory );
+               $handler->init( $this, $request, $spec, $this->responseFactory );
 
                try {
                        return $this->executeHandler( $handler );
index 72b59b0..1c2d490 100644 (file)
@@ -233,7 +233,7 @@ class ApiQueryLanguageinfo extends ApiQueryBase {
                return [
                        "$pathUrl"
                                => "apihelp-$pathMsg-example-simple",
-                       "$pathUrl&{$prefix}prop=autonym|name&lang=de"
+                       "$pathUrl&{$prefix}prop=autonym|name&uselang=de"
                                => "apihelp-$pathMsg-example-autonym-name-de",
                        "$pathUrl&{$prefix}prop=fallbacks|variants&{$prefix}code=oc"
                                => "apihelp-$pathMsg-example-fallbacks-variants-oc",
index af345d5..6473c35 100644 (file)
        "apihelp-query+languageinfo-summary": "Devolver información sobre los idiomas disponibles.",
        "apihelp-query+languageinfo-paramvalue-prop-code": "El código lingüístico (es específico de MediaWiki, pero existen coincidencias con otras normas.)",
        "apihelp-query+languageinfo-paramvalue-prop-dir": "La dirección de escritura del idioma (bien <code>ltr</code> o bien <code>rtl</code>).",
+       "apihelp-query+languageinfo-example-simple": "Obtener los códigos lingüísticos de todos los idiomas admitidos.",
        "apihelp-query+languageinfo-example-autonym-name-de": "Obtener los endónimos y los nombres alemanes de todos los idiomas compatibles.",
        "apihelp-query+languageinfo-example-fallbacks-variants-oc": "Obtener los idiomas de reserva y las variantes del occitano.",
        "apihelp-query+languageinfo-example-bcp47-dir": "Obtener el código lingüístico BCP-47 y la dirección de todos los idiomas compatibles.",
        "api-help-param-deprecated": "En desuso.",
        "api-help-param-required": "Este parámetro es obligatorio.",
        "api-help-datatypes-header": "Tipos de datos",
-       "api-help-datatypes": "Las entradas en MediaWiki deberían estar en UTF-8 según la norma NFC. MediaWiki puede tratar de convertir otros formatos, pero esto puede provocar errores en algunas operaciones (tales como las [[Special:ApiHelp/edit|ediciones]] con controles MD5).\n\nAlgunos tipos de parámetros en las solicitudes de API requieren de una explicación más detallada:\n;boolean\n:Los parámetros booleanos trabajo como cajas de verificación de HTML: si el parámetro está definido, independientemente de su valor, se considera verdadero. Para un valor falso, se debe omitir el parámetro  por completo.\n;marca de tiempo\n:Las marcas de tiempo se pueden definir en varios formatos. Se recomienda seguir la norma ISO 8601 de fecha y hora. Todas las horas están en UTC, ignorándose cualquier indicación de zona horaria.\n:* Fecha y hora en ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (los signos de puntuación y la <kbd>Z</kbd> son opcionales)\n:* Fecha y hora en ISO 8601 con fracciones de segundo (que se omiten), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (los guiones, los dos puntos y la <kbd>Z</kbd> son opcionales)\n:* Formato MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato genérico de número, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (la zona horaria opcional, sea <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> o <kbd>-<var>##</var></kbd> se omite)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (la zona horaria es opcional), <kbd><var>lun</var>, <var>15</var> <var>ene</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (la zona horaria es opcional), <kbd><var>lunes</var>, <var>15</var>-<var>ene</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato ctime de C, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Número de segundos desde 1970-01-01T00:00:00Z en forma de número entero de entre 1 y 13 cifras (sin <kbd>0</kbd>)\n:* La cadena <kbd>now</kbd>\n\n;separador alternativo de valores múltiples\n:Los parámetros que toman valores múltiples se envían normalmente utilizando la barra vertical para separar los valores, p. ej., <kbd>param=valor1|valor2</kbd> o <kbd>param=valor1%7Cvalor2</kbd>. Si un valor tiene que contener el carácter de barra vertical, utiliza U+001F (separador de unidades) como separador ''y'' prefija el valor con, p. ej. <kbd>param=%1Fvalor1%1Fvalor2</kbd>.",
+       "api-help-datatypes": "El formato de entrada de MediaWiki debe ser UTF-8 normalizado por NFC. MediaWiki puede intentar convertir otros formatos, pero ello podría causar que algunas operaciones, como las [[Special:ApiHelp/edit|ediciones]] con comprobaciones MD5, fallen.\n\nAlgunos tipos de parámetros para las solicitudes de API requieren una explicación más a fondo:\n;boolean\n:Los parámetros booleanos funcionan como las casillas de verificación en HTML: si se especifica el parámetro, sin importar su valor, se considera verdadero. Para un valor falso, omítase el parámetro completamente.\n;timestamp\n:Los cronomarcadores pueden especificarse en varios formatos; para obtener detalles, consúltense [[mw:Special:MyLanguage/Timestamp|los formatos de entrada de la biblioteca Timestamp documentados en mediawiki.org]]. Se recomienda el formato ISO 8601: <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd>. Además, es posible utilizar la cadena <kbd>now</kbd> para especificar la fecha y la hora actuales.\n;separador alternativo para valores múltiples\n:Normalmente, los parámetros que reciben varios valores se envían con estos separados por una pleca; p. ej., <kbd>parámetro=valor1|valor2</kbd> o <kbd>parámetro=valor1%7Cvalor2</kbd>. Si un valor debe contener una pleca, utilícese U+001F (separador de unidades) como el separador ''y'' prefíjese el valor con U+001F; p. ej., <kbd>parámetro=%1Fvalor1%1Fvalor2</kbd>.",
        "api-help-param-type-limit": "Tipo: entero o <kbd>max</kbd>",
        "api-help-param-type-integer": "Tipo: {{PLURAL:$1|1=entero|2=lista de enteros}}",
        "api-help-param-type-boolean": "Tipo: booleano/lógico ([[Special:ApiHelp/main#main/datatypes|detalles]])",
index 2573f8a..3edfe1b 100644 (file)
@@ -146,7 +146,7 @@ class LinkBatch {
        }
 
        /**
-        * Add a ResultWrapper containing IDs and titles to a LinkCache object.
+        * Add a result wrapper containing IDs and titles to a LinkCache object.
         * As normal, titles will go into the static Title cache field.
         * This function *also* stores extra fields of the title used for link
         * parsing to avoid extra DB queries.
@@ -187,7 +187,7 @@ class LinkBatch {
        }
 
        /**
-        * Perform the existence test query, return a ResultWrapper with page_id fields
+        * Perform the existence test query, return a result wrapper with page_id fields
         * @return bool|IResultWrapper
         */
        public function doQuery() {
index bb9114a..69c709c 100644 (file)
@@ -93,7 +93,7 @@ class ChangesFeed {
                $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
                foreach ( $sorted as $obj ) {
                        $title = Title::makeTitle( $obj->rc_namespace, $obj->rc_title );
-                       $talkpage = $nsInfo->hasTalkNamespace( $obj->rc_namespace )
+                       $talkpage = $nsInfo->hasTalkNamespace( $obj->rc_namespace ) && $title->isValid()
                                ? $title->getTalkPage()->getFullURL()
                                : '';
 
index 8b42be1..fb1053c 100644 (file)
@@ -27,7 +27,7 @@
  * @defgroup Dump Dump
  */
 
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
@@ -468,7 +468,7 @@ class WikiExporter {
         * The result set should be sorted/grouped by page to avoid duplicate
         * page records in the output.
         *
-        * @param ResultWrapper $results
+        * @param IResultWrapper $results
         * @param object $lastRow the last row output from the previous call (or null if none)
         * @return object the last row processed
         */
@@ -517,7 +517,7 @@ class WikiExporter {
        }
 
        /**
-        * @param ResultWrapper $resultset
+        * @param IResultWrapper $resultset
         * @return int the log_id value of the last item output, or null if none
         */
        protected function outputLogStream( $resultset ) {
index 1e1bde3..d7d6bf7 100644 (file)
@@ -1906,7 +1906,7 @@ class LocalFile extends File {
         * @return Status
         */
        function move( $target ) {
-               $localRepo = MediaWikiServices::getInstance()->getRepoGroup();
+               $localRepo = MediaWikiServices::getInstance()->getRepoGroup()->getLocalRepo();
                if ( $this->getRepo()->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
                }
@@ -1923,8 +1923,8 @@ class LocalFile extends File {
                wfDebugLog( 'imagemove', "Finished moving {$this->name}" );
 
                // Purge the source and target files...
-               $oldTitleFile = $localRepo->findFile( $this->title );
-               $newTitleFile = $localRepo->findFile( $target );
+               $oldTitleFile = $localRepo->newFile( $this->title );
+               $newTitleFile = $localRepo->newFile( $target );
                // To avoid slow purges in the transaction, move them outside...
                DeferredUpdates::addUpdate(
                        new AutoCommitUpdate(
index c9abc94..44cd45e 100644 (file)
        "config-env-bad": "S'ha comprovat l'entorn.\nNo podeu instal·lar el MediaWiki.",
        "config-env-php": "El PHP $1 està instal·lat.",
        "config-env-hhvm": "L’HHVM $1 és instal·lat.",
-       "config-unicode-using-intl": "S'utilitza l'[https://pecl.php.net/intl extensió intl PECL] per a la normalització de l'Unicode.",
-       "config-unicode-pure-php-warning": "<strong>Avís:</strong> L'[https://pecl.php.net/intl extensió intl PECL] no és disponible per gestionar la normalització d'Unicode. Es reverteix a una implementació més lenta en PHP pur.\nSi administreu un lloc web amb molt de trànsit, hauríeu de consultar la guia de [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalització d'Unicode].",
+       "config-unicode-using-intl": "S'utilitza l'[https://php.net/manual/en/book.intl.php extensió intl de PHP] per a la normalització de l'Unicode.",
+       "config-unicode-pure-php-warning": "<strong>Avís:</strong> L'[https://php.net/manual/en/book.intl.php extensió intl de PHP] no és disponible per gestionar la normalització d'Unicode. Es reverteix a una implementació més lenta en PHP pur.\nSi administreu un lloc web amb molt de trànsit, hauríeu de consultar la guia de [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalització d'Unicode].",
        "config-unicode-update-warning": "<strong>Avís:</strong> La versió instal·lada del contenidor de normalització d'Unicode utilitza una versió antiga de la biblioteca [http://site.icu-project.org/ del projecte ICU].\nHauríeu [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations d'actualitzar-la] si us importa poder utilitzar Unicode.",
        "config-no-db": "No s'ha pogut trobar un controlador adequat per a la base de dades. Instal·leu-ne un per al PHP.\nHi ha suport per {{PLURAL:$2|al tipus de base de dades següent|als tipus de base de dades següents}}: $1\n\nSi heu compilat el PHP manualment, torneu a configurar-lo amb un client de base de dades habilitat, per exemple fent servir <code>./configure --with-mysqli</code>.\nSi heu instal·lat el PHP d'un paquet de Debian o Ubuntu, també cal que instal·leu, per exemple, el paquet <code>php-mysql</code>.",
-       "config-outdated-sqlite": "<strong>Avís:</strong> teniu el SQLite $1, que és menor que la versió mínima necessària $2. SQLite no estarà disponible.",
+       "config-outdated-sqlite": "<strong>Avís:</strong> teniu el SQLite $2, que és menor que la versió mínima necessària $1. SQLite no estarà disponible.",
        "config-no-fts3": "<strong>Avís:</strong> SQLite està compilat sense el [//sqlite.org/fts3.html mòdul FTS3], per tant les funcionalitats de cerca no estaran disponibles en aquesta instal·lació.",
        "config-pcre-old": "<strong>Error fatal:</strong> Cal el PCRE $1 o superior.\nEl binari PHP que utilitzeu està enllaçat amb el PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Més informació].",
+       "config-pcre-no-utf8": "<strong>Fatal:</strong> El mòdul PCRE de PHP sembla que no va compilar-se per funcionar amb PCRE_UTF8.\nMediaWiki necessita que UTF-8 funcioni correctament.",
        "config-memory-raised": "El <code>memory_limit</code> del PHP és $1 i s'ha aixecat a $2.",
        "config-memory-bad": "<strong>Avís:</strong> El <code>memory_limit</code> del PHP és $1.\nAixò és probablement massa baix.\nLa instal·lació pot fallar!",
        "config-apc": "L'[https://www.php.net/apc APC] està instal·lat",
        "config-apcu": "L'[https://www.php.net/apcu APCu] està instal·lat",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] està instal·lat",
+       "config-no-cache-apcu": "<strong>Avís:</strong> no s'ha pogut trobar [https://www.php.net/apcu APCu] o [https://www.iis.net/downloads/microsoft/wincache-extension WinCache].\nNo s'habilitarà la memòria cau d'objectes.",
        "config-diff3-bad": "No s'ha trobat el GNU diff3. Podeu ignorar-ho per ara, però us podeu trobar amb conflictes d'edició més habitualment.",
        "config-git": "S'ha trobat el programari de control de versions Git: <code>$1</code>.",
        "config-git-bad": "No s'ha trobat el programari de control de versions Git. Podeu ignorar-ho per ara, però la pàgina Especial:Versió no mostrarà els resums de publicacions.",
        "config-admin-error-password": "S'ha produït un error intern en definir una contrasenya per a l'administrador «<nowiki>$1</nowiki>»: <pre>$2</pre>",
        "config-admin-error-bademail": "Heu introduït una adreça electrònica no vàlida.",
        "config-subscribe": "Subscriu a la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce llista de correu d'anunci de noves versions].",
+       "config-subscribe-noemail": "Us heu provat de subscriure a la llista de correu d'anuncis de noves versions sense proporcionar-hi una adreça electrònica.\nProporcioneu-ne una si voleu subscriure-us a la llista de correu electrònic.",
        "config-pingback": "Comparteix dades d'aquesta instal·lació amb els desenvolupadors de MediaWiki.",
        "config-almost-done": "Gairebé ja heu acabat!\nPodeu ometre el que queda de la configuració i procedir amb la instal·lació del wiki.",
        "config-optional-continue": "Fes-me més preguntes.",
        "config-email-auth": "Habilita l'autenticació per correu electrònic",
        "config-email-auth-help": "Si s'habilita l'opció, els usuaris hauran de confirmar llur adreça electrònica utilitzant un enllaç que els enviarem quan la defineixin o la canviïn.\nNomés les adreces electròniques autenticades poden rebre correus d'altres usuaris o canviar les notificacions de correu.\nDefinir aquesta opció és <strong>recomanat</strong> per a wikis públics per tal d'evitar els possibles abusos de l'ús del correu.",
        "config-email-sender": "Adreça electrònica de retorn:",
+       "config-email-sender-help": "Introduïu una adreça electrònica per utilitzar-la com a adreça de retorn dels missatges electrònics de sortida.\nAquí és on s'enviaran els missatges que no arribin a lloc.\nMolts servidors de correu electrònic necessiten com a mínim que la part del nom de domini sigui vàlida.",
        "config-upload-settings": "Imatges i càrregues de fitxers",
        "config-upload-enable": "Habilita la càrrega de fitxers",
        "config-upload-help": "Les càrregues de fitxers potencialment exposen el vostre servidor a riscos de seguretat.\nPer a més informació, llegiu la [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security secció de seguretat] del manual.\n\nPer habilitar les càrregues de fitxer, canvieu el mode del subdirectori <code>images</code> del directori arrel de MediaWiki per tal que el servidor web pugui escriure-hi.\nA continuació, habiliteu-ne l'opció.",
        "config-upload-deleted": "Directori pels arxius suprimits:",
        "config-upload-deleted-help": "Trieu un directori per a arxivar els fitxers suprimits.\nIdealment no hauria de ser accessible des del web.",
        "config-logo": "URL del logo:",
+       "config-logo-help": "L'aparença per defecte de MediaWiki inclou un espai per a un logotip de 135x160 píxels sobre el menú de la barra lateral.\nCarregueu una imatge de la mida apropiada i introduïu un URL aquí.\n\nPodeu utilitzar <code>$wgStylePath</code> o <code>$wgScriptPath</code> si el vostre logotip es relatiu a aquests camins.\n\nSi no voleu cap logotip, deixeu el quadre en blanc.",
        "config-instantcommons": "Habilita Instant Commons",
        "config-instantcommons-help": "[https://www.mediawiki.org/wiki/InstantCommons Instant Commons] és una característica que permet que els wikis utilitzin imatges, sons i altres fitxers multimèdies que es troben al lloc web de [https://commons.wikimedia.org/ Wikimedia Commons].\nPer a això, cal que el MediaWiki tingui accés a Internet.\n\nPer a més informació d'aquesta característica, amb instuccions de com definir altres wikis apart de Wikimedia Commons, consulteu [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos el manual].",
        "config-cc-error": "El selector de llicència Creative Commons no ha donat cap resultat.\nIntroduïu la llicència manualment.",
        "config-extensions": "Extensions",
        "config-extensions-help": "Les extensions que es llisten a dalt s'han detecta en el directori <code>./extensions</code>.\n\nPoden necessitar configuració addicional, però ja podeu habilitar-les.",
        "config-skins": "Aparences",
-       "config-skins-help": "S'han detectat els temes llistats a dalt en el directori <code>./skins</code>. Heu d'habilitar-ne com a mínim un i trieu-ne el predeterminat.",
-       "config-skins-use-as-default": "Utilitza aquest tema per defecte",
-       "config-skins-missing": "No s'ha trobat cap tema; MediaWiki utilitzarà el tema per defecte fins que hi instal·leu alguns adequats.",
+       "config-skins-help": "S'han detectat les aparences llistades a dalt en el directori <code>./skins</code>. Heu d'habilitar-ne com a mínim un i trieu-ne el predeterminat.",
+       "config-skins-use-as-default": "Utilitza aquesta aparença per defecte",
+       "config-skins-missing": "No s'ha trobat cap aparença; MediaWiki utilitzarà l'aparença per defecte fins que hi instal·leu algunes adequades.",
        "config-skins-must-enable-some": "Heu de triar com a mínim un tema per habilitar.",
-       "config-skins-must-enable-default": "Cal habilitar el tema triat per defecte.",
+       "config-skins-must-enable-default": "Cal habilitar l'aparença triada per defecte.",
        "config-install-alreadydone": "<strong>Avís:</strong> Sembla que ja havíeu instal·lat MediaWiki i esteu provant d'instal·lar-lo de nou.\nProcediu a la pàgina següent.",
        "config-install-begin": "En fer clic a «{{int:config-continue}}» s’iniciarà la instal·lació del MediaWiki. Si encara voleu fer canvis, feu clic a «{{int:config-back}}».",
        "config-install-step-done": "fet",
index 67f769f..2b85baa 100644 (file)
@@ -51,8 +51,8 @@
        "config-env-bad": "Le ambiente ha essite verificate.\nTu non pote installar MediaWiki.",
        "config-env-php": "PHP $1 es installate.",
        "config-env-hhvm": "HHVM $1 es installate.",
-       "config-unicode-using-intl": "Le [https://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.",
-       "config-unicode-pure-php-warning": "'''Aviso''': Le [https://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].",
+       "config-unicode-using-intl": "Le [https://php.net/manual/en/book.intl.php extension PHP intl] es usate pro le normalisation Unicode.",
+       "config-unicode-pure-php-warning": "'''Aviso''': Le [https://php.net/manual/en/book.intl.php extension PHP intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te super le [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].",
        "config-unicode-update-warning": "'''Aviso''': Le version installate del bibliotheca inveloppante pro normalisation Unicode usa un version ancian del bibliotheca del [http://site.icu-project.org/ projecto ICU].\nTu deberea [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualisar lo] si le uso de Unicode importa a te.",
        "config-no-db": "Non poteva trovar un driver appropriate pro le base de datos! Es necessari installar un driver de base de datos pro PHP.\nLe sequente {{PLURAL:$2|typo|typos}} de base de datos es supportate: $1.\n\nSi tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo, usante <code>./configure --with-mysqli</code>.\nSi tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe etiam installar, per exemplo, le modulo <code>php-mysql</code>.",
        "config-outdated-sqlite": "<strong>Attention</strong>: tu ha SQLite $2, que es inferior al minime version requirite, $1. SQLite essera indisponibile.",
index 39d803c..12b5620 100644 (file)
        "config-install-done": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у базу ваше вики инсталације (исти директоријум као index.php). Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој вики]</strong>.",
        "config-install-done-path": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у <code>$4</code>. Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој вики]</strong>.",
        "config-install-success": "MediaWiki је успешно инсталиран. Сада можете посетити <$1$2> да бисте видели свој вики.\nАко имате питања, погледајте нашу листу често постављаних питања: <https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или користите један од форума за подршку који су повезани на тој страници.",
+       "config-install-db-success": "База података је успешно подешена",
        "config-download-localsettings": "Преузми датотеку <code>LocalSettings.php</code>",
        "config-help": "помоћ",
        "config-help-tooltip": "кликните да бисте проширили",
index faed1bf..037ae99 100644 (file)
@@ -1222,6 +1222,8 @@ interface IDatabase {
         * @since 1.16
         * @param array[]|string|LikeMatch $param
         * @return string Fully built LIKE statement
+        * @phan-suppress-next-line PhanMismatchVariadicComment
+        * @phan-param array|string|LikeMatch ...$param T226223
         */
        public function buildLike( $param );
 
index c08655c..6617ab1 100644 (file)
@@ -1001,11 +1001,8 @@ class LoadBalancer implements ILoadBalancer {
                if ( isset( $this->conns[$connKey][$i][0] ) ) {
                        $conn = $this->conns[$connKey][$i][0];
                } else {
-                       if ( !isset( $this->servers[$i] ) || !is_array( $this->servers[$i] ) ) {
-                               throw new InvalidArgumentException( "No server with index '$i'" );
-                       }
                        // Open a new connection
-                       $server = $this->servers[$i];
+                       $server = $this->getServerInfoStrict( $i );
                        $server['serverIndex'] = $i;
                        $server['autoCommitOnly'] = $autoCommit;
                        $conn = $this->reallyOpenConnection( $server, $this->localDomain );
@@ -1115,11 +1112,8 @@ class LoadBalancer implements ILoadBalancer {
                }
 
                if ( !$conn ) {
-                       if ( !isset( $this->servers[$i] ) || !is_array( $this->servers[$i] ) ) {
-                               throw new InvalidArgumentException( "No server with index '$i'" );
-                       }
                        // Open a new connection
-                       $server = $this->servers[$i];
+                       $server = $this->getServerInfoStrict( $i );
                        $server['serverIndex'] = $i;
                        $server['foreignPoolRefCount'] = 0;
                        $server['foreign'] = true;
@@ -1337,7 +1331,7 @@ class LoadBalancer implements ILoadBalancer {
        }
 
        public function getServerName( $i ) {
-               $name = $this->servers[$i]['hostName'] ?? $this->servers[$i]['host'] ?? '';
+               $name = $this->servers[$i]['hostName'] ?? ( $this->servers[$i]['host'] ?? '' );
 
                return ( $name != '' ) ? $name : 'localhost';
        }
@@ -1942,7 +1936,7 @@ class LoadBalancer implements ILoadBalancer {
                        foreach ( $lagTimes as $i => $lag ) {
                                if ( $this->genericLoads[$i] > 0 && $lag > $maxLag ) {
                                        $maxLag = $lag;
-                                       $host = $this->servers[$i]['host'];
+                                       $host = $this->getServerInfoStrict( $i, 'host' );
                                        $maxIndex = $i;
                                }
                        }
@@ -2150,6 +2144,28 @@ class LoadBalancer implements ILoadBalancer {
                }
        }
 
+       /**
+        * @param int $i Server index
+        * @param string|null $field Server index field [optional]
+        * @return array|mixed
+        * @throws InvalidArgumentException
+        */
+       private function getServerInfoStrict( $i, $field = null ) {
+               if ( !isset( $this->servers[$i] ) || !is_array( $this->servers[$i] ) ) {
+                       throw new InvalidArgumentException( "No server with index '$i'" );
+               }
+
+               if ( $field !== null ) {
+                       if ( !array_key_exists( $field, $this->servers[$i] ) ) {
+                               throw new InvalidArgumentException( "No field '$field' in server index '$i'" );
+                       }
+
+                       return $this->servers[$i][$field];
+               }
+
+               return $this->servers[$i];
+       }
+
        function __destruct() {
                // Avoid connection leaks for sanity
                $this->disable();
index ddecf9e..ead290f 100644 (file)
@@ -127,7 +127,7 @@ class BlockLogFormatter extends LogFormatter {
        public function getPreloadTitles() {
                $title = $this->entry->getTarget();
                // Preload user page for non-autoblocks
-               if ( substr( $title->getText(), 0, 1 ) !== '#' ) {
+               if ( substr( $title->getText(), 0, 1 ) !== '#' && $title->isValid() ) {
                        return [ $title->getTalkPage() ];
                }
                return [];
index 2e2da70..c1b3dc3 100644 (file)
@@ -146,6 +146,7 @@ class ResourceLoaderImage {
         *
         * @param ResourceLoaderContext $context Any context
         * @return string
+        * @throws MWException If no matching path is found
         */
        public function getPath( ResourceLoaderContext $context ) {
                $desc = $this->descriptor;
@@ -167,7 +168,11 @@ class ResourceLoaderImage {
                if ( isset( $desc[$context->getDirection()] ) ) {
                        return $this->basePath . '/' . $desc[$context->getDirection()];
                }
-               return $this->basePath . '/' . $desc['default'];
+               if ( isset( $desc['default'] ) ) {
+                       return $this->basePath . '/' . $desc['default'];
+               } else {
+                       throw new MWException( 'No matching path found' );
+               }
        }
 
        /**
index 3b7a0a9..3fff6c1 100644 (file)
@@ -30,22 +30,6 @@ use MediaWiki\MediaWikiServices;
  * @ingroup Search
  */
 abstract class PrefixSearch {
-       /**
-        * Do a prefix search of titles and return a list of matching page names.
-        * @deprecated Since 1.23, use TitlePrefixSearch or StringPrefixSearch classes
-        *
-        * @param string $search
-        * @param int $limit
-        * @param array $namespaces Used if query is not explicitly prefixed
-        * @param int $offset How many results to offset from the beginning
-        * @return array Array of strings
-        */
-       public static function titleSearch( $search, $limit, $namespaces = [], $offset = 0 ) {
-               wfDeprecated( __METHOD__, '1.23' );
-               $prefixSearch = new StringPrefixSearch;
-               return $prefixSearch->search( $search, $limit, $namespaces, $offset );
-       }
-
        /**
         * Do a prefix search of titles and return a list of matching page names.
         *
index 98c0499..3810565 100644 (file)
@@ -329,12 +329,9 @@ final class SessionManager implements SessionManagerInterface {
                        $headers = [];
                        foreach ( $this->getProviders() as $provider ) {
                                foreach ( $provider->getVaryHeaders() as $header => $options ) {
-                                       if ( !isset( $headers[$header] ) ) {
-                                               $headers[$header] = [];
-                                       }
-                                       if ( is_array( $options ) ) {
-                                               $headers[$header] = array_unique( array_merge( $headers[$header], $options ) );
-                                       }
+                                       # Note that the $options value returned has been deprecated
+                                       # and is ignored.
+                                       $headers[$header] = null;
                                }
                        }
                        $this->varyHeaders = $headers;
index c6990fe..7c05cfc 100644 (file)
@@ -96,6 +96,9 @@ interface SessionManagerInterface extends LoggerAwareInterface {
         * }
         * @endcode
         *
+        * Note that the $options argument to OutputPage::addVaryHeader() has
+        * been deprecated and should always be null.
+        *
         * @return array
         */
        public function getVaryHeaders();
index eb71fe6..98d3456 100644 (file)
@@ -21,8 +21,6 @@
  * @file
  */
 
-use MediaWiki\MediaWikiServices;
-
 /**
  * Factory class to create Skin objects
  *
@@ -43,15 +41,6 @@ class SkinFactory {
         */
        private $displayNames = [];
 
-       /**
-        * @deprecated in 1.27
-        * @return SkinFactory
-        */
-       public static function getDefaultInstance() {
-               wfDeprecated( __METHOD__, '1.27' );
-               return MediaWikiServices::getInstance()->getSkinFactory();
-       }
-
        /**
         * Register a new Skin factory function.
         *
index 700672f..eb179bf 100644 (file)
@@ -660,7 +660,7 @@ abstract class QueryPage extends SpecialPage {
                # an OutputPage, and let them get on with it
                $this->outputResults( $out,
                        $this->getSkin(),
-                       $dbr, # Should use ResultWrapper for this
+                       $dbr, # Should use IResultWrapper for this
                        $res,
                        min( $this->numRows, $this->limit ), # do not format the one extra row, if exist
                        $this->offset );
@@ -738,13 +738,13 @@ abstract class QueryPage extends SpecialPage {
        }
 
        /**
-        * Creates a new LinkBatch object, adds all pages from the passed ResultWrapper (MUST include
+        * Creates a new LinkBatch object, adds all pages from the passed result wrapper (MUST include
         * title and optional the namespace field) and executes the batch. This operation will pre-cache
         * LinkCache information like page existence and information for stub color and redirect hints.
         *
-        * @param IResultWrapper $res The ResultWrapper object to process. Needs to include the title
+        * @param IResultWrapper $res The result wrapper to process. Needs to include the title
         *  field and namespace field, if the $ns parameter isn't set.
-        * @param null $ns Use this namespace for the given titles in the ResultWrapper object,
+        * @param null $ns Use this namespace for the given titles in the result wrapper,
         *  instead of the namespace value of $res.
         */
        protected function executeLBFromResultWrapper( IResultWrapper $res, $ns = null ) {
index 9a793c3..40172ab 100644 (file)
@@ -232,6 +232,7 @@ class SpecialPageFactory {
                'EmailAuthentication',
                'EnableEmail',
                'EnableJavaScriptTest',
+               'EnableSpecialMute',
                'PageLanguageUseDB',
                'SpecialPages',
        ];
@@ -282,9 +283,14 @@ class SpecialPageFactory {
                                $this->list['JavaScriptTest'] = \SpecialJavaScriptTest::class;
                        }
 
+                       if ( $this->options->get( 'EnableSpecialMute' ) ) {
+                               $this->list['Mute'] = \SpecialMute::class;
+                       }
+
                        if ( $this->options->get( 'PageLanguageUseDB' ) ) {
                                $this->list['PageLanguage'] = \SpecialPageLanguage::class;
                        }
+
                        if ( $this->options->get( 'ContentHandlerUseDB' ) ) {
                                $this->list['ChangeContentModel'] = \SpecialChangeContentModel::class;
                        }
index e1606b2..122fa9b 100644 (file)
@@ -375,6 +375,15 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                $text .= $context->msg( 'emailuserfooter',
                        $from->name, $to->name )->inContentLanguage()->text();
 
+               if ( $config->get( 'EnableSpecialMute' ) ) {
+                       $specialMutePage = SpecialPage::getTitleFor( 'Mute', $context->getUser()->getName() );
+                       $text .= "\n" . $context->msg(
+                               'specialmute-email-footer',
+                               $specialMutePage->getCanonicalURL(),
+                               $context->getUser()->getName()
+                       );
+               }
+
                // Check and increment the rate limits
                if ( $context->getUser()->pingLimiter( 'emailuser' ) ) {
                        throw new ThrottledError();
diff --git a/includes/specials/SpecialMute.php b/includes/specials/SpecialMute.php
new file mode 100644 (file)
index 0000000..4f34785
--- /dev/null
@@ -0,0 +1,213 @@
+<?php
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+use MediaWiki\Preferences\MultiUsernameFilter;
+
+/**
+ * A special page that allows users to modify their notification
+ * preferences
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialMute extends FormSpecialPage {
+
+       /** @var User */
+       private $target;
+
+       /** @var int */
+       private $targetCentralId;
+
+       /** @var bool */
+       private $enableUserEmailBlacklist;
+
+       /** @var bool */
+       private $enableUserEmail;
+
+       /** @var CentralIdLookup */
+       private $centralIdLookup;
+
+       public function __construct() {
+               // TODO: inject all these dependencies once T222388 is resolved
+               $config = RequestContext::getMain()->getConfig();
+               $this->enableUserEmailBlacklist = $config->get( 'EnableUserEmailBlacklist' );
+               $this->enableUserEmail = $config->get( 'EnableUserEmail' );
+
+               $this->centralIdLookup = CentralIdLookup::factory();
+
+               parent::__construct( 'Mute', '', false );
+       }
+
+       /**
+        * Entry point for special pages
+        *
+        * @param string $par
+        */
+       public function execute( $par ) {
+               $this->requireLogin( 'specialmute-login-required' );
+               $this->loadTarget( $par );
+
+               parent::execute( $par );
+
+               $out = $this->getOutput();
+               $out->addModules( 'mediawiki.special.pageLanguage' );
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function requiresUnblock() {
+               return false;
+       }
+
+       /**
+        * @inheritDoc
+        */
+       protected function getDisplayFormat() {
+               return 'ooui';
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function onSuccess() {
+               $out = $this->getOutput();
+               $out->addWikiMsg( 'specialmute-success' );
+       }
+
+       /**
+        * @param array $data
+        * @param HTMLForm|null $form
+        * @return bool
+        */
+       public function onSubmit( array $data, HTMLForm $form = null ) {
+               if ( !empty( $data['MuteEmail'] ) ) {
+                       $this->muteEmailsFromTarget();
+               } else {
+                       $this->unmuteEmailsFromTarget();
+               }
+
+               return true;
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function getDescription() {
+               return $this->msg( 'specialmute' )->text();
+       }
+
+       /**
+        * Un-mute emails from target
+        */
+       private function unmuteEmailsFromTarget() {
+               $blacklist = $this->getBlacklist();
+
+               $key = array_search( $this->targetCentralId, $blacklist );
+               if ( $key !== false ) {
+                       unset( $blacklist[$key] );
+                       $blacklist = implode( "\n", $blacklist );
+
+                       $user = $this->getUser();
+                       $user->setOption( 'email-blacklist', $blacklist );
+                       $user->saveSettings();
+               }
+       }
+
+       /**
+        * Mute emails from target
+        */
+       private function muteEmailsFromTarget() {
+               // avoid duplicates just in case
+               if ( !$this->isTargetBlacklisted() ) {
+                       $blacklist = $this->getBlacklist();
+
+                       $blacklist[] = $this->targetCentralId;
+                       $blacklist = implode( "\n", $blacklist );
+
+                       $user = $this->getUser();
+                       $user->setOption( 'email-blacklist', $blacklist );
+                       $user->saveSettings();
+               }
+       }
+
+       /**
+        * @inheritDoc
+        */
+       protected function alterForm( HTMLForm $form ) {
+               $form->setId( 'mw-specialmute-form' );
+               $form->setHeaderText( $this->msg( 'specialmute-header', $this->target )->parse() );
+               $form->setSubmitTextMsg( 'specialmute-submit' );
+               $form->setSubmitID( 'save' );
+       }
+
+       /**
+        * @inheritDoc
+        */
+       protected function getFormFields() {
+               if ( !$this->enableUserEmailBlacklist || !$this->enableUserEmail ) {
+                       throw new ErrorPageError( 'specialmute', 'specialmute-error-email-blacklist-disabled' );
+               }
+
+               if ( !$this->getUser()->getEmailAuthenticationTimestamp() ) {
+                       throw new ErrorPageError( 'specialmute', 'specialmute-error-email-preferences' );
+               }
+
+               $fields['MuteEmail'] = [
+                       'type' => 'check',
+                       'label-message' => 'specialmute-label-mute-email',
+                       'default' => $this->isTargetBlacklisted(),
+               ];
+
+               return $fields;
+       }
+
+       /**
+        * @param string $username
+        */
+       private function loadTarget( $username ) {
+               $target = User::newFromName( $username );
+               if ( !$target || !$target->getId() ) {
+                       throw new ErrorPageError( 'specialmute', 'specialmute-error-invalid-user' );
+               } else {
+                       $this->target = $target;
+                       $this->targetCentralId = $this->centralIdLookup->centralIdFromLocalUser( $target );
+               }
+       }
+
+       /**
+        * @return bool
+        */
+       private function isTargetBlacklisted() {
+               $blacklist = $this->getBlacklist();
+               return in_array( $this->targetCentralId, $blacklist );
+       }
+
+       /**
+        * @return array
+        */
+       private function getBlacklist() {
+               $blacklist = $this->getUser()->getOption( 'email-blacklist' );
+               if ( !$blacklist ) {
+                       return [];
+               }
+
+               return MultiUsernameFilter::splitIds( $blacklist );
+       }
+}
index fc54890..1c87f7a 100644 (file)
@@ -405,8 +405,6 @@ class UserrightsPage extends SpecialPage {
                wfDebug( 'newGroups: ' . print_r( $newGroups, true ) . "\n" );
                wfDebug( 'oldUGMs: ' . print_r( $oldUGMs, true ) . "\n" );
                wfDebug( 'newUGMs: ' . print_r( $newUGMs, true ) . "\n" );
-               // Deprecated in favor of UserGroupsChanged hook
-               Hooks::run( 'UserRights', [ &$user, $add, $remove ], '1.26' );
 
                // Only add a log entry if something actually changed
                if ( $newGroups != $oldGroups || $newUGMs != $oldUGMs ) {
index 6c9bea5..f66eccf 100644 (file)
@@ -25,6 +25,7 @@ class LoginHelper extends ContextSource {
                'resetpass-no-info',
                'confirmemail_needlogin',
                'prefsnologintext2',
+               'specialmute-login-required',
        ];
 
        /**
index 3a57c0b..6025d3c 100644 (file)
@@ -1346,13 +1346,6 @@ class User implements IDBAccessObject, UserIdentity {
         * @return bool True if the user is logged in, false otherwise.
         */
        private function loadFromSession() {
-               // Deprecated hook
-               $result = null;
-               Hooks::run( 'UserLoadFromSession', [ $this, &$result ], '1.27' );
-               if ( $result !== null ) {
-                       return $result;
-               }
-
                // MediaWiki\Session\Session already did the necessary authentication of the user
                // returned here, so just use it if applicable.
                $session = $this->getRequest()->getSession();
index 189c3a2..30b511d 100644 (file)
        "restrictionsfield-help": "عنوان أيبي أو نطاق CIDR واحد لكل سطر. لتفعيل كل شيء، استخدم:\n<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "خطأ: $1",
        "edit-error-long": "الأخطاء:\n\n$1",
+       "specialmute": "كتم الصوت",
+       "specialmute-success": "تم تحديث تفضيلات كتم الصوت بنجاح، شاهد كل المستخدمين الصامتين في [[Special:Preferences]].",
+       "specialmute-submit": "تأكيد",
+       "specialmute-label-mute-email": "كتم رسائل البريد الإلكتروني من هذا المستخدم",
+       "specialmute-header": "يُرجَى تحديد تفضيلات كتم الصوت لـ{{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "لا يمكن العثور على اسم المستخدم المطلوب.",
+       "specialmute-error-email-blacklist-disabled": "لم يتم تمكين كتم المستخدمين من إرسال رسائل البريد الإلكتروني إليك.",
+       "specialmute-error-email-preferences": "يجب تأكيد عنوان بريدك الإلكتروني قبل أن تتمكن من كتم صوت المستخدم، يمكنك القيام بذلك من [[Special:Preferences]].",
+       "specialmute-email-footer": "[$1 إدارة تفضيلات البريد الإلكتروني لـ{{BIDI:$2}}.]",
+       "specialmute-login-required": "يُرجَى تسجيل الدخول لتغيير تفضيلات الصمت الخاصة بك.",
        "revid": "المراجعة $1",
        "pageid": "معرف الصفحة $1",
        "interfaceadmin-info": "$1\n\nتم فصل صلاحيات تحرير ملفات CSS/JS/JSON على مستوى الموقع مؤخرً من صلاحية  <code>editinterface</code>، إذا لم تفهم سبب حصولك على هذا الخطأ، فراجع  [[mw:MediaWiki_1.32/interface-admin]].",
index 23fc89c..07496b9 100644 (file)
        "feedback-subject": "Mövzu:",
        "feedback-submit": "Təsdiq et",
        "feedback-thanks-title": "Təşəkkür!",
-       "searchsuggest-search": "{{grammar:prepositional|{{SITENAME}}}} axtar",
+       "searchsuggest-search": "{{grammar:prepositional|{{SITENAME}}}} saytında axtar",
        "api-error-unknown-warning": "Naməlum xəbərdarlıq: \"$1\".",
        "api-error-unknownerror": "Naməlum xəta: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|saniyə|saniyə}}",
index c347ae2..312da36 100644 (file)
        "restrictionsfield-help": "Адзін IP-адрас ці CIDR-дыяпазон на радок. Каб дазволіць усё, ужывайце:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Памылка: $1",
        "edit-error-long": "Памылкі:\n\n$1",
+       "specialmute": "Заглушаныя ўдзельнікі",
        "revid": "вэрсія $1",
        "pageid": "Ідэнтыфікатар старонкі $1",
        "interfaceadmin-info": "$1\n\nДазволы на рэдагаваньне агульнасайтавых CSS/JS/JSON-файлаў былі нядаўна вылучаныя з права <code>editinterface</code>. Калі вы не разумееце, чаму атрымліваеце гэтую памылку, глядзіце [[mw:MediaWiki_1.32/interface-admin]].",
index 314ad7b..4ba7b23 100644 (file)
        "history": "Historial de canvis",
        "history_short": "Historial",
        "history_small": "historial",
-       "updatedmarker": "actualitzat des de la darrera visita",
+       "updatedmarker": "actualitzat des de la vostra darrera visita",
        "printableversion": "Versió per a impressora",
        "permalink": "Enllaç permanent",
        "print": "Imprimir",
index 9e18328..a4b4b79 100644 (file)
        "history": "Historie stránky",
        "history_short": "Historie",
        "history_small": "historie",
-       "updatedmarker": "změněno od poslední návštěvy",
+       "updatedmarker": "změněno od vaší poslední návštěvy",
        "printableversion": "Verze k tisku",
        "permalink": "Trvalý odkaz",
        "print": "Vytisknout",
index 169cda8..e7ae281 100644 (file)
        "credentialsform-account": "Kontonavn:",
        "edit-error-short": "Fejl: $1",
        "edit-error-long": "Fejl:\n\n$1",
+       "specialmute-submit": "Bekræft",
        "revid": "version $1",
        "pageid": "side id: $1",
        "gotointerwiki": "Forlader {{SITENAME}}",
index f28fa42..2c1eb37 100644 (file)
        "undo-summary": "[[Special:Contributions/$2|$2]]i ([[User talk:$2|werênayış]]) vurnayışê $1i peyser gırewt",
        "undo-summary-username-hidden": "Rewizyona veri $1'i hewada",
        "cantcreateaccount-text": "Hesabvıraştışê na IP adrese ('''$1''') terefê [[User:$3|$3]] kılit biyo.\n\nSebebo ke terefê $3 ra diyao ''$2''",
-       "viewpagelogs": "Qeydanê na pele bımocne",
+       "viewpagelogs": "Qandê ena pela roceka bıvinê",
        "nohistory": "Verorê vurnayışanê na perer çıni yo.",
        "currentrev": "Çımraviyarnayışo rocane",
        "currentrev-asof": "$1 ra tepiya weziyeta pela",
        "last": "verên",
        "page_first": "verên",
        "page_last": "peyên",
-       "histlegend": "Ferqê weçinayıÅ\9fi: Qutiya versiyonan qandé  têversanayıÅ\9f iÅ\9faret ke u dest be ''enter''i ya zi gocega cêrêne rone.<br />\nCetwel: <strong>({{int:ferq}})</strong> = ferqê versiyonê peyêni, <strong>({{int:peyên}})</strong> = ferqê versiyonê verêni, <strong>{{int:q}}</strong> = vırnayışo werdiyo.",
-       "history-fieldset-title": "Çımraviyarnayışan parzûn ke",
+       "histlegend": "Ferqê weçinayıÅ\9fi: Qutiya versiyonan qandê têversanayıÅ\9f iÅ\9faret kerê u dest be ''enter''i ya zi gocega cêrêne rone.<br />\nCetwel: <strong>({{int:ferq}})</strong> = ferqê versiyonê peyêni, <strong>({{int:peyên}})</strong> = ferqê versiyonê verêni, <strong>{{int:q}}</strong> = vırnayışo werdiyo.",
+       "history-fieldset-title": "Revizyona parzun kerê",
        "history-show-deleted": "Tenya çımraviyarnayışanê esterıteyan bımocne",
        "histfirst": "Verênêr",
        "histlast": "Peyênêr",
        "suppress": "Fetesnayene",
        "querypage-disabled": "Na pelaya xısusi,sebeb de performansi ra qefılneyê.",
        "apihelp": "Peştiya APIyi",
-       "apihelp-no-such-module": "Modulê \"$1\" çıniyo.",
+       "apihelp-no-such-module": "Modulê \"$1\" nêvineya.",
        "apisandbox": "API qumdor",
        "apisandbox-api-disabled": "API na site de dewre ra veciyayo.",
        "apisandbox-submit": "Bıwazê",
        "cantrollback": "karbero peyin têna paşt dayo, no semedi ra vuriyayiş tepiya nêgeriyeni.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}} hetê [[Special:Contributions/$2|{{int:contribslink}}]]) ra perrê ıney[[:$1]] de vırnayış biyo u no vırnayiş tepeya nêgêriyeno;\nyewna ten perre de vırnayiş kerdo u perre tepiya nêgeriyeno.\n\noyo ke vırnayışo peyên kerdo: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Xulasay vurnayışi: <em>$1</em> bi",
-       "revertpage": "Hetê [[Special:Contributions/$2|$2]] ([[User talk:$2|Mesac]]) ra vurnayiş biyo u ney vurnayişi tepiya geriyayo u no [[User:$1|$1]] kes o ke cuwa ver revizyon kerdo revizyonê no kesi tepiya anciyayo.",
+       "revertpage": "Terefê [[Special:Contributions/$2|$2]] ([[User talk:$2|Mesac]]) ra vurnayışê [[User:$1|$1]] peyser gêriyayo.",
        "revertpage-nouser": "No keso ke vuriyayiş kerdo vuriyayişé{{GENDER:$1|[[User:$1|$1]]}} ker o",
-       "rollback-success": "Terefê {{GENDER:$3|$1}}i ra vuriyayışi peyser gêriyayi; peyser geyriya be revizyonê {{GENDER:$4|$2}}i.",
+       "rollback-success": "Terefê {{GENDER:$3|$1}}i ra vuriyayış peyser gêriya; revizyonê {{GENDER:$4|$2}} peyser ard.",
        "sessionfailure-title": "Seans xeripiya",
        "sessionfailure": "cıkewtışê hesabê şıma de yew problem aseno;\nno kar semedê dızdiyê hesabi ibtal biyo.\nkerem kerê \"tepiya\" şiyerê u pel o ke şıma tera ameyî u o pel newe ra bar kerê , newe ra tesel/cereb kerê.",
        "changecontentmodel": "Modelê zerrekê pele bıvurne",
index ffcdf09..e0ae02b 100644 (file)
        "deletionlog": "Καταγραφές διαγραφών",
        "log-name-create": "Αρχείο καταγραφών δημιουργίας σελίδων",
        "log-description-create": "Παρακάτω υπάρχει ένας κατάλογος των πιο πρόσφατων δημιουργιών σελίδας.",
-       "logentry-create-create": "$1 δημιούργησε τη σελίδα $3",
+       "logentry-create-create": "{{GENDER:$2|Ο|Η}} $1 δημιούργησε τη σελίδα $3",
        "reverted": "Επαναφορά σε προηγούμενη αναθεώρηση",
        "deletecomment": "Λόγος:",
        "deleteotherreason": "Άλλος/πρόσθετος λόγος:",
index 425cf2b..244b281 100644 (file)
        "restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Error: $1",
        "edit-error-long": "Errors:\n\n$1",
+       "specialmute": "Mute",
+       "specialmute-success": "Your mute preferences have been successfully updated. See all muted users in [[Special:Preferences]].",
+       "specialmute-submit": "Confirm",
+       "specialmute-label-mute-email": "Mute emails from this user",
+       "specialmute-header": "Please select your mute preferences for {{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "The username requested could not be found.",
+       "specialmute-error-email-blacklist-disabled": "Muting users from sending you emails is not enabled.",
+       "specialmute-error-email-preferences": "You must confirm your email address before you can mute a user. You may do so from [[Special:Preferences]].",
+       "specialmute-email-footer": "[$1 Manage email preferences for {{BIDI:$2}}.]",
+       "specialmute-login-required": "Please log in to change your mute preferences.",
        "revid": "revision $1",
        "pageid": "page ID $1",
        "interfaceadmin-info": "$1\n\nPermissions for editing of sitewide CSS/JS/JSON files were recently separated from the <code>editinterface</code> right. If you do not understand why you are getting this error, see [[mw:MediaWiki_1.32/interface-admin]].",
index 597dca2..ec385bd 100644 (file)
        "restrictionsfield-help": "Unu IP-adreso aŭ CIDR-intervalo per linio. Por permesigi ĉion, uzu:<pre>0.0.0.0/0</code>\n<code>::/0</pre>",
        "edit-error-short": "Eraro: $1",
        "edit-error-long": "Eraroj:\n\n$1",
+       "specialmute": "Silentigi",
+       "specialmute-submit": "Konfirmi",
+       "specialmute-label-mute-email": "Kaŝi retmesaĝojn el ĉi tiu uzanto",
+       "specialmute-error-invalid-user": "La petita uzantnomo ne troviĝis.",
+       "specialmute-email-footer": "[$1 Administri preferojn pri retpoŝto por {{BIDI:$2}}.]",
        "revid": "revizio $1",
        "pageid": "Identigilo de paĝo $1",
        "interfaceadmin-info": "$1\n\nPermesoj pri redaktado de tut-retejaj CSS/JavaScript/JSON-dosieroj estis lastatempe disigitaj for de la rajto <code>editinterface</code>. Se vi ne komprenas kial vi ricevis ĉi tiun eraron, vidu la paĝon [[mw:MediaWiki_1.32/interface-admin]].",
index 34a3ec0..234c7d9 100644 (file)
        "history": "Historial",
        "history_short": "Historial",
        "history_small": "historial",
-       "updatedmarker": "actualizado desde mi última visita",
+       "updatedmarker": "actualizado desde tu última visita",
        "printableversion": "Versión para imprimir",
        "permalink": "Enlace permanente",
        "print": "Imprimir",
        "restrictionsfield-help": "Una dirección IP o intervalo de CIDR por renglón. Para activarlo todo, utiliza <pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Error: $1",
        "edit-error-long": "Errores:\n\n$1",
+       "specialmute": "Silenciar",
+       "specialmute-submit": "Confirmar",
+       "specialmute-error-invalid-user": "No se encontró el nombre de usuario solicitado.",
        "revid": "revisión $1",
        "pageid": "ID de página $1",
        "interfaceadmin-info": "$1\n\nLos permisos para editar los archivos con formato CSS, JS y JSON en todo el sitio han sido recientemente separados del permiso <code>editinterface</code>. Si no comprendes por qué recibes este error, por favor lee [[mw:MediaWiki_1.32/interface-admin]].",
index 4e35fab..26398ed 100644 (file)
@@ -31,7 +31,7 @@
        "exif-make": "ഛായാഗ്രാഹി നിർമ്മാതാവ്",
        "exif-model": "ഛായാഗ്രാഹി മോഡൽ",
        "exif-software": "ഉപയോഗിച്ച സോഫ്റ്റ്‌വെയർ",
-       "exif-artist": "ഛായാഗ്രാഹക",
+       "exif-artist": "ഛായാഗ്രാഹക(ൻ)",
        "exif-copyright": "പകർപ്പവകാശ ഉടമ",
        "exif-exifversion": "എക്സിഫ് (Exif) പതിപ്പ്",
        "exif-flashpixversion": "പിന്തുണയുള്ള ഫ്ലാഷ്‌‌പിക്സ് പതിപ്പ്",
index cf2b244..044703b 100644 (file)
@@ -6,7 +6,8 @@
                        "Milicevic01",
                        "Rancher",
                        "Sasa Stefanovic",
-                       "Сербијана"
+                       "Сербијана",
+                       "Zoranzoki21"
                ]
        },
        "exif-imagewidth": "Ширина",
        "exif-photometricinterpretation-2": "RGB",
        "exif-photometricinterpretation-3": "Палета",
        "exif-photometricinterpretation-4": "Маска транспарентности",
+       "exif-photometricinterpretation-5": "Одвојено (вероватно CMYK)",
        "exif-photometricinterpretation-6": "YCbCr",
        "exif-photometricinterpretation-8": "CIE L*a*b*",
+       "exif-photometricinterpretation-9": "CIE L*a*b* (ICC кодирање)",
+       "exif-photometricinterpretation-10": "CIE L*a*b* (ITU кодирање)",
        "exif-unknowndate": "Непознат датум",
        "exif-orientation-1": "Нормално",
        "exif-orientation-2": "Обрнуто по хоризонтали",
index 58edc36..f0b6aea 100644 (file)
        "history": "تاریخچهٔ صفحه",
        "history_short": "تاریخچه",
        "history_small": "تاریخچه",
-       "updatedmarker": "به‌روزشده از آخرین باری که سرزده‌ام",
+       "updatedmarker": "به‌روزشده از آخرین باری که سرزده‌اید",
        "printableversion": "نسخهٔ قابل چاپ",
        "permalink": "پیوند پایدار",
        "print": "چاپ",
        "autoblockedtext": "دسترسی نشانی آی‌پی شما قطع شده‌است، زیرا این نشانی آی‌پی توسط کاربر دیگری استفاده شده که دسترسی او توسط $1 قطع شده‌است.\nدلیل ارائه‌شده چنین است:\n\n:''$2''\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما می‌توانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمی‌توانید از قابلیت «{{int:emailuser}}» استفاده کنید مگر آنکه نشانی ایمیل معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این قابلیت برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
        "systemblockedtext": "نام کاربری یا نشانی آی‌پی شما خودکار توسط مدیاویکی مسدود شده‌است.\nدلیل ارائه‌شده:\n\n:<em>$2</em>\n\n* آغاز بلاک: $8\n* پایان بلاک: $6\n* قطع دسترسی‌شده مورد نظر: $7\n\nنشانی آی‌پی کنونی شما $3 است.\nخواهشمند است تمام جزئیات بالا را در هر پرس‌وجویی که انجام می‌دهید قرار دهید.",
        "blockednoreason": "دلیلی مشخص نشده‌است",
+       "blockedtext-composite": "<strong>نام کاربری یا نشانی آی‌پی شما خودکار توسط مدیاویکی مسدود شده‌است.</strong>\nدلیل ارائه‌شده:\n\n:<em>$2</em>\n\n* آغاز بلاک: $8\n* پایان بلاک: $6\n\nنشانی آی‌پی کنونی شما $3 است.\nخواهشمند است تمام جزئیات بالا را در هر پرس‌وجویی که انجام می‌دهید قرار دهید.",
+       "blockedtext-composite-reason": "حساب/آی‌پی شما به چند طریق بسته شده‌است",
        "whitelistedittext": "برای ویرایش مقاله‌ها باید $1.",
        "confirmedittext": "شما باید، پیش از ویرایش صفحات، آدرس ایمیل خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.",
        "nosuchsectiontitle": "چنین بخشی پیدا نشد",
        "restrictionsfield-help": "یک نشانی آی‌پی یا بازهٔ سی‌آی‌دی‌ار در هر خط وارد کنید. برای فعال کردن همه‌چیز، این مقدار را استفاده کنید: <code>0.0.0.0/0</code><br /><code>::/0</code>",
        "edit-error-short": "خطا: $1",
        "edit-error-long": "خطاها:\n\n$1",
+       "specialmute": "بی‌صدا",
+       "specialmute-success": "تنظیمات بی‌صدا به روز شد. دیدن فهرست همهٔ کاربرانی که در [[Special:Preferences|ترجیحاتتان]] به عنوان بی‌صدا انتخاب کردید.",
+       "specialmute-submit": "تأیید",
+       "specialmute-label-mute-email": "بی‌صدا کردن ایمیل از این کاربر",
+       "specialmute-header": "لطفاً ترجیحات بی‌صدا برای {{BIDI:[[User:$1]]}} را انتخاب کنید.",
+       "specialmute-error-invalid-user": "نام کاربری درخواست شده یافت نشد.",
+       "specialmute-error-email-blacklist-disabled": "بی‌صدا کردن کاربران برای ارسال ایمیل فعال نشده‌است.",
+       "specialmute-error-email-preferences": "پیش از بی‌صدا کردن دیگر کاربران باید آدرس ایمیلیتان را تائید کنید. که از [[Special:Preferences|ترجیحاتتان]] مقدور است.",
+       "specialmute-email-footer": "[$1 مدیریت ترجیحات ایمیل برای {{BIDI:$2}}.]",
+       "specialmute-login-required": "لطفاً برای تغییر ترجیحات بی‌صدا به سامانه وارد شوید.",
        "revid": "نسخهٔ $1",
        "pageid": "شناسهٔ صفحهٔ $1",
        "interfaceadmin-info": "\n$1\n\nدسترسی‌ها برای ویرایش فایل‌های CSS/JS/JSON که اخیراً از دسترسی <code>editinterface</code> جدا شده‌اند. اگر نمی دانید که چرا این خطا رخ داده‌است [[mw:MediaWiki_1.32/interface-admin]] را مطالعه کنید.",
index e2e5507..cee8a41 100644 (file)
        "history": "Historique de la page",
        "history_short": "Historique",
        "history_small": "historique",
-       "updatedmarker": "modifié depuis ma dernière visite",
+       "updatedmarker": "modifié depuis votre dernière visite",
        "printableversion": "Version imprimable",
        "permalink": "Lien permanent",
        "print": "Imprimer",
index f96d3bc..2f62520 100644 (file)
        "rcfilters-filter-previousrevision-label": "Net de lêste ferzje",
        "rcfilters-filter-previousrevision-description": "Alle wizigings dy't net de \"lêste ferzje\" binne.",
        "rcfilters-filter-excluded": "Utsein",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:net</strong> $1",
        "rcfilters-exclude-button-off": "Seleksje omkeare",
        "rcfilters-exclude-button-on": "Omkearde seleksje",
        "rcfilters-view-tags": "Lebele bewurkings",
        "deletecomment": "Reden:",
        "deleteotherreason": "Oare/eventuele reden:",
        "deletereasonotherlist": "Oare reden",
-       "deletereason-dropdown": "*Faak-brûkte redenen\n** Frege troch de skriuwer\n** Skeining fan auteursrjocht\n** Fandalisme",
+       "deletereason-dropdown": "* Gongbere wiskredens\n** Spam\n** Fandalisme\n** Skeining fan auteursrjochten\n** Frege troch de skriuwer\n** Misse trochferwizing",
        "rollback": "Wizigings weromdraaie",
        "rollback-confirmation-yes": "Weromdraaie",
        "rollbacklink": "weromdraaie",
        "confirmemail_send": "Stjoer in befêstigingskoade",
        "confirmemail_sent": "Befêstiginskoade tastjoerd.",
        "confirmemail_sendfailed": "De befêstigingskoade koe net stjoerd wurde. Faaks stean der ferkearde tekens yn it e-postadres.\n\nBerjocht: $1",
-       "confirmemail_invalid": "Dizze befêstiginskoade jildt net (mear).\nFaaks is de koade ferrûn.",
+       "confirmemail_invalid": "Unjildige befêstigingskoade.\nDe koade soe ferrûn wêze kinne.",
        "confirmemail_needlogin": "Jo moatte $1 om jo e-mailadres befêstigje te kinnen.",
        "confirmemail_success": "Jo netpostadres is befêstige. Jo kinne jo no oanmelde en de wiki brûke.",
        "confirmemail_loggedin": "Jo e-mailadres is no befêstige.",
        "confirmemail_subject": "Befêstiging e-mailadres foar {{SITENAME}}",
-       "confirmemail_body": "Immen, nei gedachten jo, hat him by {{SITENAME}} oanmelde as \"$2\", mei dit netpostadres ($1).\n\nHjirtroch komme ek de netpostfunksjes fan {{SITENAME}} foar jo beskikber. Iepenje de neikommende keppeling om te befêstigjen dat jo wier josels by {{SITENAME}} mei dit netpostadres oanmelde hawwe:\n\n$3\n\nAt jo dat *net* wienen, brûk dy keppeling dan net, en klik hjir:\n\n$5\n\nDizze befêstigingskoade ferrint dan op $4.",
+       "confirmemail_body": "Immen, nei alle gedachten jo, mei it IP-adres $1,\nhat it akkount \"$2\" op {{SITENAME}} oanmakke mei dit e-mailadres.\n\nOm te befêstigjen dat dat akkount wier jowes is en de e-mailfunksjes\nop {{SITENAME}} beskikber makke wurde kinne, iepenje dan dizze\nferwizing yn jo webblêder:\n\n$3\n\nAt jo it akkount *net* oanmakke hawwe, folgje dan dizze ferwizing\nom it befêstigjen fan it e-mailadres ôf te sizzen:\n\n$5\n\nDe befêstigingskoade ferrint op $4.",
+       "invalidateemail": "Befêstigjen e-mail ôfsizze",
        "scarytranscludetoolong": "[URL-adres is te lang]",
        "confirmrecreate": "Sûnt jo begûn binne dizze side te bewurkjen, hat meidogger [[User:$1|$1]] ([[User talk:$1|oerlis]]) de side wiske. De reden dy't derfoar jûn waard wie:\n: ''$2''\nWolle jo de side wier op 'e nij skriuwe?",
        "unit-pixel": "px",
index 6fd1e82..db8f738 100644 (file)
@@ -5,7 +5,7 @@
                        "Léon973"
                ]
        },
-       "tog-underline": "Soulignman dé lyannaj :",
+       "tog-underline": "Soulignman dyannaj :",
        "tog-hideminor": "Maské modifikasyon minò-ya annan modifikasyon résan-yan",
        "tog-hidepatrolled": "Maské modifikasyon-yan ki rouli annan modifikasyon résan-yan",
        "tog-newpageshidepatrolled": "Maské paj-ya ki rouli annan lis dé nouvèl paj",
@@ -30,7 +30,7 @@
        "tog-enotifrevealaddr": "Afiché mo adrès élègtronnik annan kourilèt di notifikasyon",
        "tog-shownumberswatching": "Afiché nonm-an di itilizatò an kour",
        "tog-oldsig": "Zòt signatir atchwèl :",
-       "tog-fancysig": "Trété signatir-a kou di wikitègs (san lyannaj otonmantik)",
+       "tog-fancysig": "Trété signatir-a kou wikitègs (san yannaj otonmantik)",
        "tog-uselivepreview": "Afiché apèrsou san roucharjé paj-a",
        "tog-forceeditsummary": "Avèrti mo lò mo pa èspésifyé di rézimen di modifikasyon",
        "tog-watchlisthideown": "Maské mo pròp modifikasyon annan lis di swivi",
        "listingcontinuesabbrev": "(swit)",
        "index-category": "Paj endèksé",
        "noindex-category": "Paj ki pa endèksé",
-       "broken-file-category": "Paj ké lyannaj di fiché brizé",
+       "broken-file-category": "Paj ké yannaj-ya di fiché ki brizé",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "category-header-numerals": "$1–$2",
        "about": "Apropo",
        "tagline": "Di {{SITENAME}}",
        "help": "Lèd",
        "search": "Sasé",
-       "search-ignored-headings": " #<!-- pa modifyé sa lign --><pre>\n# Tit dé sègsyon ki ké fika ignoré pa sasé-a.\n# Chanjman-yan ki éfègtchwé isi ka pran léfè lò ki paj-a ké tit-a sa endègsé.\n# Zòt pouvé fòrsé réyendègsasyon di paj-a an éfègtchwan roun modifikasyon vid.\n# Sentags-a sa swivant-a :\n#   * Tousa ki ka swiv roun « # » jouk finisman-an di lign-an sa roun koumantèr.\n#   * Tout lign ki pa-vid sa tit ègzak-a pou ignoré, kas konprann osi.\nRéférans\nLyannaj ègstèrn\nWè osi\n #</pre><!-- pa modifyé sa lign -->",
+       "search-ignored-headings": " #<!-- pa modifyé sa lign --><pre>\n# Tit sègsyon-yan ki ké fika ignoré pa sasé-a.\n# Chanjman-yan ki éfègtchwé isi ka pran léfè lò ki paj-a ké tit-a sa endègsé.\n# Zòt pouvé fòrsé réyendègsasyon-an di paj-a an éfègtchwan roun modifikasyon ki vid.\n# Sentags-a sa swivant-a :\n#   * Tousa ki ka swiv roun « # » jouk finisman-an di lign-an sa roun koumantèr.\n#   * Tout lign ki pa-vid sa tit ègzak-a pou ignoré, kas konprann osi.\nRéférans\nYannaj èstèrn\nWè osi\n #</pre><!-- pa modifyé sa lign -->",
        "searchbutton": "Sasé",
        "go": "Konsilté",
        "searcharticle": "Kontinwé",
        "history": "Listorik di paj-a",
        "history_short": "Listorik",
        "history_small": "listorik",
-       "updatedmarker": "modifyé dipi mo dannyé vizit",
-       "printableversion": "Vèrsyon enprimab",
-       "permalink": "Lyannaj pèrmannan",
+       "updatedmarker": "modifyé dipi zòt dannyé vizit",
+       "printableversion": "Vèrsyon ki enprimab",
+       "permalink": "Yannaj ki pèrmannan",
        "print": "Enprimé",
        "view": "Lir",
        "view-foreign": "Wè asou $1",
        "lastmodifiedat": "Dannyé modifikasyon di sa paj té fè $1 à $2.",
        "viewcount": "Sa paj {{PLURAL:$1|0=pa té janmen konsilté|1=té konsilté roun sèl fwè|té konsilté $1 fwè}}.",
        "protectedpage": "Paj protéjé",
-       "jumpto": "Alé à",
+       "jumpto": "Alé bò :",
        "jumptonavigation": "navigasyon",
        "jumptosearch": "sasé",
        "view-pool-error": "Dézolé, sèrvò-ya sa sircharjé pou moman-an.\nTròp itilizatò ka sasé konsilté sa paj.\nSouplé, atann enpé anvan di éséyé òkò d’aksédé à sala.\n\n$1",
        "nstab-category": "Katégori",
        "mainpage-nstab": "Paj prensipal",
        "nosuchaction": "Agsyon enkonnèt",
-       "nosuchactiontext": "Lagsyon-an ki èspésifyé annan URL-a sa envalid.\nZòt pitèt mal rantré URL-a oben swivi roun lyannaj ki éronnen.\nLi pouvé égalman endiké roun annonmanli annan logisyèl-a ki itilizé pa {{SITENAME}}.",
+       "nosuchactiontext": "Lagsyon-an ki èspésifyé annan URL-a sa envalid.\nZòt pitèt mal rantré URL-a oben swivi roun yannaj ki éronnen.\nLi pouvé égalman endiké roun annonmanli annan logisyèl-a ki itilizé pa {{SITENAME}}.",
        "nosuchspecialpage": "Paj èspésyal inègzistant",
        "nospecialpagetext": "<strong>Zòt doumandé oun paj èspésyal ki pa ka ègzisté.</strong>\n\nOun lis dé paj èspésyal valid ka trouvé so kò asou [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Lérò",
        "readonly": "Baz di data vérouyé",
        "enterlockreason": "Endiké rézon-an di vérouyaj ensi ki roun èstimasyon di so douré",
        "readonlytext": "Ajou-ya ké mizajou-ya di baz di data fika atchwèlman bloké, probabman pou pèrmèt mentnans-a di baz-a, apré sa, tout bagaj ké rantré annòrd.\n\nAdministratò sistenm-an ki vérouyé baz di data fourni lèsplikasyon-an ki ka swiv :<br /> $1",
-       "missing-article": "Baz-a di data pa trouvé tègs-a di roun paj ki li té divèt trouvé, ki entitilé « $1 » $2.\n\nJénéralman, sala ka sirvini an swivan roun lyannaj bò'd roun dif ki périmen oben bò'd listorik-a di roun paj ki siprimen.\n\nSi a pa sa ki la, zòt pitèt trouvé roun annonmanli annan progranm-an.\nSouplé, signalé li à roun [[Special:ListUsers/sysop|administratò]] é pa bliyé di endiké li URL-a di paj-a.",
+       "missing-article": "Baz-a di data pa trouvé tègs-a di roun paj ki li té divèt trouvé, ki entitilé « $1 » $2.\n\nJénéralman, sala ka sirvini an swivan roun yannaj bò'd roun dif ki périmen oben bò'd listorik-a di roun paj ki siprimen.\n\nSi a pa sa, a pitèt roun annonmanli annan progranm-an.\nSouplé, signalé li bay roun [[Special:ListUsers/sysop|administratò]] é pa bliyé di endiké li URL-a di paj-a.",
        "missingarticle-rev": "(niméro di vèrsyon : $1)",
        "missingarticle-diff": "(diff : $1, $2)",
        "readonly_lag": "Baz-a di data té otonmatikman vérouyé pannan ki sèrvò-ya ségondèr ka réyaligné yé kò asou sèrvò prensipal-a",
        "badtitletext": "Tit di paj doumandé pa valid, vid, oben mal fòrmé si a roun tit entèr-lanng oben entèr-projè.\nI ka kontni pitèt oun oben plizyò karaktèr ki pa pouvé fika itilizé annan tit-ya.",
        "title-invalid-empty": "Tit di paj doumandé sa vid oben ka kontni sèlman non-an di roun lèspas di non.",
        "title-invalid-utf8": "Tit di paj doumandé ka kontni roun sékans UTF-8 envalid.",
-       "title-invalid-interwiki": "Paj siblé-a ka kontni roun lyannaj entèrwiki ki pa pouvé fika itilizé annan tit-ya.",
+       "title-invalid-interwiki": "Paj sib-a ka kontni roun yannaj entèrwiki ki pa pouvé fika itilizé annan tit-ya.",
        "title-invalid-talk-namespace": "Tit di paj doumandé ka fè référans à roun paj di diskisyon ki pa pouvé ègzisté.",
        "title-invalid-characters": "Tit di paj doumandé ka kontni dé karaktèr ki pa valid : « $1 ».",
        "title-invalid-relative": "Tit ka kontni oun chimen roulatif. Tit-ya ki ka référansé dé paj roulativ (./, ../) pa valid pas li sa souvan itilizé pa navigatò di itilizatò-a.",
        "createacct-email-ph": "Antré zòt adrès di kourilèt",
        "createacct-another-email-ph": "Antré adrès-a di kourilèt",
        "createaccountmail": "Itilizé roun modipas aléyatwè ki tanporèr é voyé li pou adrès-a di kourilèt ki èspésifyé",
-       "createaccountmail-help": "Pouvé fika itilizé pou kréyé roun kont pou rounòt moun san konèt mo di pas-a.",
+       "createaccountmail-help": "Pouvé fika itilizé pou kréyé roun kont pou rounòt moun san konnèt modipas-a.",
        "createacct-realname": "Non réyèl (fakiltatif)",
        "createacct-reason": "Motif",
        "createacct-reason-ph": "Poukisa zòt kréyé rounòt kont",
        "login-userblocked": "{{GENDER:$1|Sa itilizatò}} bloké. Konnègsyon-an pa otorizé.",
        "wrongpassword": "Non-an di itilizatò oben modipas enkorèk.\nSouplé, éséyé òkò.",
        "wrongpasswordempty": "Zòt pa rantré pyès modipas.\nSouplé, éséyé òkò.",
-       "passwordtooshort": "Zòt mo di pas divèt kontni omwen $1 karaktèr{{PLURAL:$1|}}.",
+       "passwordtooshort": "Zòt modipas divèt kontni onmwen $1 karaktèr{{PLURAL:$1|}}.",
        "passwordtoolong": "Modipas-ya pa pouvé dépasé $1 karagtèr{{PLURAL:$1|}}.",
        "passwordtoopopular": "Modipas ki tròp kouran pa pouvé fika itilizé. Souplé, chwézi roun modipas ki pi difisil pou sonjé.",
-       "password-name-match": "Zòt mo di pas divèt fika diféran di zòt non d'itilizatò.",
+       "password-name-match": "Zòt modipas divèt fika diféran di zòt non di itilizatò.",
        "password-login-forbidden": "Litilizasyon-an di sa non d'itilizatò oben di sa modipas sa entèrdi.",
        "mailmypassword": "Réynisyalizé modipas-a",
        "passwordremindertitle": "Nouvèl modipas tanporèr pou {{SITENAME}}",
        "loginlanguagelabel": "Lanng : $1",
        "suspicious-userlogout": "Zòt doumann di konnègsyon té roufizé pas i sanblé ki li té voyé pa roun navigatò défègtché oben dipi kach-a di roun sèrvis mandatèr.",
        "createacct-another-realname-tip": "Véritab non-an sa òpsyonnèl.\nSi zòt désidé di fourni li, i ké fika itilizé pou krédité lotò-a di so travay-ya.",
-       "pt-login": "Konnègté so kò",
+       "pt-login": "Konnègté sokò",
        "pt-login-button": "Konnègté so kò",
        "pt-login-continue-button": "Kontinwé konnègsyon-an",
        "pt-createaccount": "Kréyé roun kont",
-       "pt-userlogout": "Dékonnègté so kò",
+       "pt-userlogout": "Dékonnègté sokò",
        "php-mail-error-unknown": "Lérò enkonnèt annan fongsyon-an <kod>mail()</kod> di PHP.",
        "user-mail-no-addy": "Enposib di voyé roun kourilèt san adrès di kourilèt.",
        "user-mail-no-body": "Lésè di voyé di roun kourilèt ké roun kò vid oben anòrmalman kourt.",
        "botpasswords-label-needsreset": "(Modipas-a divèt fika réynisyalizé)",
        "botpasswords-label-appid": "Non di robo :",
        "botpasswords-label-create": "Kréyé",
-       "botpasswords-label-update": "Mété à jou",
+       "botpasswords-label-update": "Fè roun mizajou",
        "botpasswords-label-cancel": "Annilé",
        "botpasswords-label-delete": "Siprimen",
        "botpasswords-label-resetpassword": "Réynisyalizé modipas-a",
        "botpasswords-insert-failed": "Échèk di ajou-a di non di robo « $1 ». Ès i té ja ajouté ?",
        "botpasswords-update-failed": "Léchèk di mizajou di non di robo « $1 ». Ès i té ja siprimen ?",
        "botpasswords-created-title": "Modipas di robo kréyé",
-       "botpasswords-created-body": "Mo di pas pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té kréyé.",
+       "botpasswords-created-body": "Modipas-a pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » fika kréyé.",
        "botpasswords-updated-title": "Modipas di robo mizajou",
-       "botpasswords-updated-body": "Mo di pas pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té mizajou.",
+       "botpasswords-updated-body": "Modipas-a pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » fika mizajou.",
        "botpasswords-deleted-title": "Modipas di robo siprimen",
        "botpasswords-deleted-body": "Modipas-a pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té siprimen.",
        "botpasswords-newpassword": "Nouvèl modipas-a pou konnègté so kò à<strong>$1</strong> sa <strong>$2</strong>. <em>Souplé, anréjistré li pou fè référans asou li iltèryòrman.</em><br> (Pou ansyen robo-ya ki ka nésésité ki non-an ki fourni pou konnègsyon-an ka fika menm-an ki non-an di itilizatò évantchwèl, zòt pouvé osi itilizé <strong>$3</strong> kou non di itilizatò é <strong>$4</strong> kou modipas).",
        "botpasswords-no-provider": "BotPasswordsSessionProvider pa disponnib.",
        "botpasswords-restriction-failed": "Rèstrigsyon-yan di modipas di robo ka anpéché sa konnègsyon.",
        "botpasswords-invalid-name": "Non-an d'itilizatò ki èspésifyé pa ka kontni di séparatò di modipas di robo (« $1 »).",
-       "botpasswords-not-exist": "{{GENDER:$1|Itilizatò|Itilizatris}}-a « $1 » pa gen di mo di pas di robo nonmen « $2 ».",
+       "botpasswords-not-exist": "{{GENDER:$1|Itilizatò|Itilizatris}}-a « $1 » pa gen di modipas di robo ki nonmen « $2 ».",
        "botpasswords-needs-reset": "Modipas-a di robo di non « $2 » di itilizatò-a « $1 » divèt fika réynisyalizé.",
        "resetpass_forbidden": "Modipas-ya pa pouvé fika chanjé.",
        "resetpass_forbidden-reason": "Modipas-ya pa pouvé fika chanjé : $1",
        "bold_tip": "Tègs gra",
        "italic_sample": "Tègs italik",
        "italic_tip": "Tègs italik",
-       "link_sample": "Tit di lyannaj",
-       "link_tip": "Lyannaj entèrn",
-       "extlink_sample": "http://www.example.com/ tit di lyannaj",
-       "extlink_tip": "Lyannaj ègstèrn (pa bliyé préfigs-a http://)",
+       "link_sample": "Tit di yannaj",
+       "link_tip": "Yannaj entèrn",
+       "extlink_sample": "http://www.example.com/ tit di yannaj",
+       "extlink_tip": "Yannaj èstèrn (pa bliyé préfigs-a http://)",
        "headline_sample": "Tègs di tit",
        "headline_tip": "Soutit nivo 2",
        "nowiki_sample": "Rantré tègs-a ki pa fòrmaté isi",
        "nowiki_tip": "Ignoré sentags wiki-a",
        "image_tip": "Fiché enséré",
-       "media_tip": "Lyannaj bò'd roun fiché médja",
+       "media_tip": "Yannaj bò'd roun fiché médja",
        "sig_tip": "Zòt signatir ké dat",
        "hr_tip": "Lign orizontal (pa an abizé)",
        "summary": "Rézimen :",
        "blockedtitle": "Itilizatò-a bloké.",
        "blockedtext": "<strong>Zòt kont itilizatò oben zòt adrès IP fika bloké.</strong>\n\nBlokaj té éfègtchwé pa $1.\nRézon-an ki évoké ka swiv : <em>$2</em>.\n\n* Koumansman di blokaj : $8\n* Lèspirasyon di blokaj : $6\n* Kont bloké : $7.\n\nZòt pouvé kontagté $1 oben rounòt [[{{MediaWiki:Grouppage-sysop}}|administratò]] pou diskité apropo di sa.\nZòt pouvé itilizé fongsyon-an « {{int:emailuser}} » rounso si roun adrès di kourilèt valid sa èspésifyé annan zòt [[Special:Preferences|préférans]] é rounso si sa fongsyonnalité pa fika bloké ba zòt.\nZòt adrès IP atchwèl sa $3 é zòt idantifyan di blokaj sa $5.\nSouplé, enkli tout détay-ya lasou'l annan chak rékèt ki zòt ké fè.",
        "blockednoreason": "pyès rézon bay",
-       "loginreqlink": "konnègté so kò",
+       "loginreqlink": "konnègté sokò",
        "accmailtitle": "Modipas voyé.",
        "newarticle": "(Nòv)",
-       "newarticletext": "Zòt swiv roun lyannaj bò'd roun paj ki pa ka ègzisté òkò. \nAfen di kréyé sa paj, rantré zòt tègs annan bwèt-a ki apré (zòt pouvé konsilté [$1 paj di lèd-a] pou plis di lenfòrmasyon).\nSi zòt vini{{GENDER:|}} isi pa lérò, kliké asou bouton-an <strong>Viré</strong> di zòt navigatò.",
+       "newarticletext": "Zòt swiv roun yannaj bò'd roun paj ki pa ka ègzisté òkò. \nAfen di kréyé sa paj, rantré zòt tègs annan bwèt-a ki apré (zòt pouvé konsilté [$1 paj di lèd-a] pou plis lenfòrmasyon).\nSi zòt vini{{GENDER:|}} isi pa lérò, kliké asou bouton-an <strong>Viré</strong> di zòt navigatò.",
        "anontalkpagetext": "----\n<em>Zòt asou paj-q di diskisyon di roun itilizatò annonnim ki pa òkò kréyé di kont oben ki pa ka itilizé roun</em>.\nPou sa rézon, nou divèt itilizé so adrès IP pou idantifyé li.\nOun adrès konran IP pouvé fika patajé pa plizyò itilizatò.\nSi zòt sa roun itiliza{{GENDER:|ò}} annonnim é si zòt ka kontasté ki dé koumantèr ki pa ka konsèrnen zòt, fika adrésé ba zòt, zòt pouvé [[Special:CreateAccount|kréyé roun kont]] oben [[Special:UserLogin|konnègté zòt kò]] pou évité tout konfizyon fitir ké ròt kontribitò annonnim.",
-       "noarticletext": "I pa gen atchwèlman pyès tègs asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|lansé oun sasé asou sa tit]] annan ròt paj-ya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sasé annan lopérasyon-yan ki lyannen]\noben [{{fullurl:{{FULLPAGENAME}}|action=edit}} kréyé sa paj]</span>.",
+       "noarticletext": "I gen atchwèlman pyès tègs asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|lansé oun sasé asou sa tit]] annan ròt paj-ya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sasé annan lopérasyon-yan ki yannen]\noben [{{fullurl:{{FULLPAGENAME}}|action=edit}} kréyé sa paj]</span>.",
        "noarticletext-nopermission": "I pa gen atchwèlman pyès tègs asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|fè roun sasé asou sa tit]] annan ròt paj-ya,\noben <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|paj={{FULLPAGENAMEE}}}} sasé annan journal-ya ki asosyé]</span>, mé zòt pa gen pèrmisyon-an di kréyé sa paj.",
        "userpage-userdoesnotexist-view": "Kont itilizatò-a « $1 » pa anréjistré.",
        "clearyourcache": "<strong>Nòt :</strong> apré zòt anréjistré zòt modifikasyon, zòt divèt fòrsé roucharjman konplè di kach di zòt navigatò pou wè chanjman-yan.\n* <strong>Firefox / Safari :</strong> mentni touch-a <em>Maj</em> (<em>Shift</em>) an klikan asou bouton-an <em>Atchwalizé</em> oben présé <em>Ctrl-F5</em> oben <em>Ctrl-R</em> (<em>⌘-R</em> asou roun Mac) \n* <strong>Google Chrome :</strong> apiyé asou <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> asou roun Mac) \n* <strong>Internet Explorer :</strong> mentni touch-a <em>Ctrl</em> an klikan asou bouton-an <em>Atchwalizé</em> oben présé <em>Ctrl-F5</em> \n* <strong>Opera :</strong> alé annan <em>Menu → Settings</em> (<em>Opera → Préférences</em> asou roun Mac) é answit à <em>Konfidansyalité & sékrité → Éfasé data di lésplorasyon-yan → Zimaj ké fiché an kach</em>.",
        "page_first": "pronmyé",
        "page_last": "dannyé",
        "histlegend": "Sélègsyon di diff : koché bouton radjo-ya dé vèrsyon ki à konparé é apiyé asou rantré oben asou bouton-an ki anba.<br />\nLéjann : <strong>({{int:cur}})</strong> = diférans ké dannyé vèrsyon-an, <strong>({{int:last}})</strong> = diférans ké vèrsyon présédan-an, <strong>{{int:minoreditletter}}</strong> = modifikasyon minò.",
-       "history-fieldset-title": "Sasé dé révizyon",
+       "history-fieldset-title": "Filtré vèrsyon-yan",
        "histfirst": "Pli ansyenn",
        "histlast": "Pli résan-yan",
-       "historyempty": "(vid)",
+       "historyempty": "vid",
        "history-feed-title": "Listorik dé vèrsyon",
        "history-feed-description": "Listorik dé vèrsyon pou sa paj asou wiki-a",
-       "history-feed-item-nocomment": "$1 à $2",
+       "history-feed-item-nocomment": "$1  $2",
        "rev-delundel": "afiché/maské",
        "rev-showdeleted": "afiché",
        "revdelete-show-file-submit": "Enren",
        "boteditletter": "b",
        "rc-change-size-new": "$1 {{PLURAL:$1|ògtè}} apré chanjman",
        "rc-old-title": "kréyé inisyalman ké tit « $1 »",
-       "recentchangeslinked": "Swivi dé paj ki lyannen",
-       "recentchangeslinked-feed": "Swivi dé paj ki lyannen",
-       "recentchangeslinked-toolbox": "Swivi dé paj ki lyannen",
-       "recentchangeslinked-title": "Swivi dé paj asosyé à « $1 »",
-       "recentchangeslinked-summary": "Rantré roun non di paj pou wè modifikasyon-yan ki fè résaman asou dé paj ki lyannen dipi oben bò'd sa paj (pou wè manm-yan di roun katégori, rantré {{ns:category}}:Non di katégori). Modifikasyon-yan dé paj di [[Special:Watchlist|zòt lis di swivi]] sa <strong>an gra</strong>.",
+       "recentchangeslinked": "Swivi di paj-ya ki yannen",
+       "recentchangeslinked-feed": "Swivi di paj-ya ki yannen",
+       "recentchangeslinked-toolbox": "Swivi di paj-ya ki yannen",
+       "recentchangeslinked-title": "Swivi di paj-ya ki asosyé ké « $1 »",
+       "recentchangeslinked-summary": "Rantré roun non di paj pou wè modifikasyon-yan ki fèt résaman asou paj-ya ki yannen dipi oben bò'd sa paj (pou wè manm-yan di roun katégori, rantré {{ns:category}}:Non di katégori). Modifikasyon-yan di paj-ya di [[Special:Watchlist|zòt lis di swivi]] sa <strong>an gra</strong>.",
        "recentchangeslinked-page": "Non di paj :",
-       "recentchangeslinked-to": "Afiché modifikasyon-yan dé paj ki ka konpòrté roun lyannaj bò'd paj-a ki bay plito ki lenvèrs-a",
+       "recentchangeslinked-to": "Afiché modifikasyon-yan di paj-ya ki ka konpòrté roun yannaj bò'd paj-a ki bay plito ki lenvèrs-a",
        "upload": "Enpòrté roun fiché",
        "uploadlogpage": "Journal di enpo di fiché",
        "filedesc": "Dèskripsyon",
        "sharedupload-desc-here": "Sa fiché ka provini di $1. Li pouvé fika itilizé pa ròt projè.\nSo dèskripsyon asou so [$2 paj di dèskripsyon] sa afiché anba.",
        "filepage-nofile": "Pyès fiché di sa non ka ègzisté.",
        "upload-disallowed-here": "Zòt pa pouvé ranplasé sa fiché.",
-       "randompage": "Paj an azò",
+       "randompage": "Paj  azò",
        "statistics": "Èstatistik",
        "double-redirect-fixer": "Korègtò di roudirègsyon",
        "nbytes": "$1 {{PLURAL:$1|ògtè}}",
        "contribsub2": "Pou {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Pyès modifikasyon korèspondan à sa kritèr trouvé.",
        "uctop": "atchwèl",
-       "month": "À partir di mwa (é présédan) :",
-       "year": "À partir di lannen (é présédant) :",
+       "month": "Apati di mwè (ké anvan) :",
+       "year": "Apati di lannen (ké anvan) :",
        "sp-contributions-newbies": "Montré ren ki kontribisyon-yan dé nouvèl itilizatò",
        "sp-contributions-blocklog": "journal dé blokaj",
        "sp-contributions-uploads": "enpòr",
        "sp-contributions-toponly": "Montré ki kontribisyon-yan ki sa dannyé-ya dé artik",
        "sp-contributions-newonly": "Afiché inikman modifikasyon-yan ki sa dé kréyasyon di paj",
        "sp-contributions-submit": "Sasé",
-       "whatlinkshere": "Paj ki lyannen",
+       "whatlinkshere": "Paj ki yannen",
        "whatlinkshere-title": "Paj ki ka pwenté bò'd « $1 »",
        "whatlinkshere-page": "Paj :",
-       "linkshere": "Paj-ya ki anba ka kontni roun lyannaj bò'd <strong>$2</strong> :",
-       "nolinkshere": "Pyès paj ka kontni lyannaj bò'd <strong>$2</strong>.",
+       "linkshere": "Paj-ya ki anba ka kontni roun yannaj bò'd <strong>$2</strong> :",
+       "nolinkshere": "Pyès paj yannen bò'd <strong>$2</strong>.",
        "isredirect": "paj di roudirègsyon",
        "istemplate": "enklizyon",
-       "isimage": "lyannaj bò'd fiché-a",
+       "isimage": "yannaj bò'd fiché-a",
        "whatlinkshere-prev": "{{PLURAL:$1|présédant|$1 présédant}}",
        "whatlinkshere-next": "{{PLURAL:$1|swivant|$1 swivant}}",
-       "whatlinkshere-links": "← lyannaj",
+       "whatlinkshere-links": "← yannaj",
        "whatlinkshere-hideredirs": "$1 roudirègsyon-yan",
        "whatlinkshere-hidetrans": "$1 enklizyon-yan",
-       "whatlinkshere-hidelinks": "$1 lyannaj-ya",
-       "whatlinkshere-hideimages": "$1 lyannaj-ya bò'd fiché-a",
+       "whatlinkshere-hidelinks": "$1 yannaj-ya",
+       "whatlinkshere-hideimages": "$1 yannaj-ya bò'd fiché-a",
        "whatlinkshere-filters": "Filt",
        "ipboptions": "2 lò:2 hours,1 jou:1 day,3 jou:3 days,1 simenn:1 week,2 simenn:2 weeks,1 mwa:1 month,3 mwa:3 months,6 mwa:6 months,1 lan:1 year,endéfiniman:infinite",
        "infiniteblock": "enfini",
        "tooltip-pt-watchlist": "Oun lis dé paj don zòt ka swiv modifikasyon",
        "tooltip-pt-mycontris": "Oun lis di {{GENDER:|zòt}} kontribisyon",
        "tooltip-pt-login": "Nou ka ankourajé zòt à konnègté zòt kò ; soupannan, zòt pa blijé di fè li",
-       "tooltip-pt-logout": "Dékonnègté so kò",
+       "tooltip-pt-logout": "Dékonnègté sokò",
        "tooltip-pt-createaccount": "Nou ka ankourajé zòt à kréyé roun kont itilizatò é konnègté zòt kò ; soupannan, zòt pa blijé di fè li",
        "tooltip-ca-talk": "Diskisyon o sijè di sa paj di kontni",
        "tooltip-ca-edit": "Modifyé wikikod-a",
        "tooltip-n-portal": "Apropo di projè, sa ki zòt pouvé fè, koté trouvé lenfòrmasyon-yan",
        "tooltip-n-currentevents": "Trouvé plis d'enfòrmasyon asou atchwalité an kour",
        "tooltip-n-recentchanges": "Lis dé modifikasyon résan asou wiki-a",
-       "tooltip-n-randompage": "Afiché roun paj an azò",
-       "tooltip-n-help": "Aksè à lèd",
-       "tooltip-t-whatlinkshere": "Lis dé paj ki lyannen ki ka pwenté asou sala",
-       "tooltip-t-recentchangeslinked": "Lis dé modifikasyon résan ki lyannen ké sa paj",
+       "tooltip-n-randompage": "Afiché roun paj  azò",
+       "tooltip-n-help": "Laksè bò lèd-a",
+       "tooltip-t-whatlinkshere": "Lis di paj-ya ki yannen ki ka pwenté asou sala",
+       "tooltip-t-recentchangeslinked": "Lis di modifikasyon-yan ki résan ki yannen ké sa paj",
        "tooltip-feed-atom": "Flux Atom pou sa paj",
        "tooltip-t-contributions": "Wè lis dé kontribisyon di {{GENDER:$1|sa itilizatò|sa itilizatris}}",
        "tooltip-t-emailuser": "Voyé roun kourilèt pou {{GENDER:$1|sa itilizatò}}",
        "tooltip-t-upload": "Télévèrsé dé fiché",
        "tooltip-t-specialpages": "Lis di tout paj èspésyal",
-       "tooltip-t-print": "Vèrsyon enprimab di sa paj",
+       "tooltip-t-print": "Vèrsyon ki enprimab di sa paj",
        "tooltip-t-permalink": "Adrès pèrmanant di sa vèrsyon di paj-a",
        "tooltip-ca-nstab-main": "Wè kontni di paj-a",
        "tooltip-ca-nstab-user": "Wè paj di itilizatò",
index 450d6b2..d41c894 100644 (file)
@@ -11,7 +11,8 @@
                        "Bfpage",
                        "Macofe",
                        "Lucas",
-                       "LeGuyanaisPure"
+                       "LeGuyanaisPure",
+                       "Schery19"
                ]
        },
        "tog-underline": "Souliyen lyen yo :",
        "tog-watchlisthideliu": "Kache modifikasyon yo ki fèt pa itilizatè yo ki enskri nan lis swivi mwen",
        "tog-watchlisthideanons": "Kache modifikasyon anònim nan lis swivi mwen",
        "tog-watchlisthidepatrolled": "Kache modifikasyon ki siveye yo nan lis swivi mwen",
+       "tog-watchlisthidecategorization": "Kache kategorizasyon paj yo",
        "tog-ccmeonemails": "Voye yon kopi imèl mwen voye ba lòt ban mwen",
        "tog-diffonly": "Pa montre enfòmasyon yon paj ki anba chanjman yo montre nan konparezon",
        "tog-showhiddencats": "Montre kategori kache yo",
        "tog-norollbackdiff": "Pa montre chanjman yo lè mwen fè yon revokasyon",
        "tog-useeditwarning": "Avèti lè m ap kite yon paj chanjman san m pa sovgade",
        "tog-prefershttps": "Toujou sèvi ak yon koneksyon sekirize lè m ap konekte",
+       "tog-showrollbackconfirmation": "Montre yon demann konfimasyon lè gen klik sou yon lyen revokasyon",
        "underline-always": "Toujou",
        "underline-never": "Jamè",
        "underline-default": "Dekorasyon ou navigatè pa defo",
        "october-date": "$1 oktòb",
        "november-date": "$1 novanm",
        "december-date": "$1 desanm",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Kategori|Kategori yo}}",
        "category_header": "Paj yo ki nan kategori « $1 »",
        "subcategories": "Soukategori yo",
        "newwindow": "(Ouvè nan yon lòt fenèt)",
        "cancel": "Anile",
        "moredotdotdot": "Pi plis …",
-       "morenotlisted": "Lis sa a pa konplè.",
+       "morenotlisted": "Lis sa ka pa konplè.",
        "mypage": "Paj",
        "mytalk": "Diskisyon",
        "anontalk": "Diskite",
        "returnto": "Ritounen nan paj $1.",
        "tagline": "Yon atik de {{SITENAME}}.",
        "help": "Èd",
+       "help-mediawiki": "Èd konsènan MediaWiki",
        "search": "Chache",
        "searchbutton": "Fouye",
        "go": "Ale",
        "history": "Istorik paj la",
        "history_short": "Istorik",
        "history_small": "Istwa",
-       "updatedmarker": "Aktyalize depi dènyè visit mwen",
+       "updatedmarker": "Aktyalize depi dènyè visit ou",
        "printableversion": "Vèsyon ou kapab enprime",
        "permalink": "Lyen pou tout tan",
        "print": "Enprime",
        "talk": "Diskisyon",
        "views": "Afichay yo",
        "toolbox": "Bwat zouti",
+       "tool-link-userrights": "Chanje {{GENDER:$1|itilizatè}} gwoup yo",
+       "tool-link-userrights-readonly": "Gade {{GENDER:$1|itilizatè}} gwoup yo",
+       "tool-link-emailuser": "Voye yon mail bay {{GENDER:$1|itilizatè }}",
        "imagepage": "Wè paj fichye",
        "mediawikipage": "Wè paj mesaj",
        "templatepage": "Wè paj modèl",
        "ok": "OK",
        "retrievedfrom": "Rekipere depi «&nbsp;$1&nbsp;»",
        "youhavenewmessages": "Ou genyen $1 ($2).",
-       "youhavenewmessagesmanyusers": "Ou gen $2 de plizyè itilizatè $2.",
+       "youhavenewmessagesmanyusers": "Ou gen $1 de plizyè itilizatè $2.",
+       "newmessageslinkplural": "{{PLURAL:$1|yon nouvo mesaj|999=nouvo mesaj yo}}",
+       "newmessagesdifflinkplural": "Dènye {{PLURAL:$1|chanjman|999=chanjman yo}}",
        "youhavenewmessagesmulti": "Ou genyen nouvo mesaj sou $1.",
        "editsection": "modifye",
        "editold": "modifye",
        "hidetoc": "kache",
        "collapsible-collapse": "Redui",
        "collapsible-expand": "Etann",
-       "confirmable-confirm": "Eske w si?",
+       "confirmable-confirm": "Eske {{GENDER:$1|w}} si?",
        "confirmable-yes": "Wi",
        "confirmable-no": "Non",
        "thisisdeleted": "Ou vle wè oubyen restore $1 ?",
        "nospecialpagetext": "<strong>Paj espesial ou demande-a envalid.</strong>\n\nOu ka jwenn yon lis paj espesial ki valid yo la [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erè",
        "databaseerror": "Erè nan bazdone.",
+       "databaseerror-text": "Gen yon erè rekèt bazdone ki fèt.\nSa ka endike yon erè nan lojisyèl la",
+       "databaseerror-textcl": "Yon erè rekèt bazdone fèt.",
+       "databaseerror-query": "Rekèt: $1",
+       "databaseerror-function": "Fonksyon: $1",
+       "databaseerror-error": "Erè: $1",
        "laggedslavemode": "'''Atansyon:''' paj sa a kapab pa anrejistre modifikasyon ki fèk fèt yo.",
        "readonly": "Bazdone a fèmen toutbon.",
        "enterlockreason": "Bay yon rezon pou fème bazdone a ak yon estimasyon ki lè w ap ouvri l ankò",
index f4017f4..2d675bf 100644 (file)
        "restrictionsfield-help": "Egy IP-cím vagy CIDR-tartomány soronként. Minden engedélyezéséhez használd a következő tartományokat:\n<pre>\n0.0.0.0/0\n::/0\n</pre>",
        "edit-error-short": "Hiba: $1",
        "edit-error-long": "Hibák:\n\n$1",
+       "specialmute": "Némítás",
+       "specialmute-submit": "Megerősítés",
+       "specialmute-label-mute-email": "E-mailek némítása ettől a felhasználótól",
+       "specialmute-error-invalid-user": "A kért felhasználónév nem található.",
+       "specialmute-error-email-blacklist-disabled": "Felhasználók e-mailküldési lehetőségének némítása nincs bekapcsolva.",
+       "specialmute-error-email-preferences": "Először meg kell erősítened az e-mail-címedet, mielőtt lenémíthatnál egy felhasználót. Ezt a [[Special:Preferences]] oldalon tudod megtenni.",
+       "specialmute-email-footer": "[$1 {{BIDI:$2}} e-mail beállításainak kezelése.]",
+       "specialmute-login-required": "Kérjük, jelentkezz be a némítási beállításaid módosításához.",
        "revid": "$1 változat",
        "pageid": "$1 lapazonosító",
        "interfaceadmin-info": "$1\n\nA CSS/JS/JSON lapok szerkesztéséhez szükséges jogosultság a közelmúltban elválasztásra került a <code>editinterface</code> jogtól. Amennyiben nem érted, miért látod ezt az üzenetet, [[mw:MediaWiki_1.32/interface-admin|itt tudhatsz meg többet]].",
index 63969ab..2a92a13 100644 (file)
        "history": "Historia del pagina",
        "history_short": "Historia",
        "history_small": "historia",
-       "updatedmarker": "actualisate post mi ultime visita",
+       "updatedmarker": "actualisate post tu ultime visita",
        "printableversion": "Version pro imprimer",
        "permalink": "Ligamine permanente",
        "print": "Imprimer",
index 4ec70e0..1dd959a 100644 (file)
        "history": "Cronologia della pagina",
        "history_short": "Cronologia",
        "history_small": "cronologia",
-       "updatedmarker": "modificata dalla mia ultima visita",
+       "updatedmarker": "modificata dalla tua ultima visita",
        "printableversion": "Versione stampabile",
        "permalink": "Link permanente",
        "print": "Stampa",
        "restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Errore: $1",
        "edit-error-long": "Errori:\n\n$1",
+       "specialmute": "Muto",
+       "specialmute-submit": "Conferma",
+       "specialmute-error-invalid-user": "Impossibile trovare il nome utente richiesto.",
        "revid": "versione $1",
        "pageid": "ID della pagina $1",
        "rawhtml-notallowed": "I tag &lt;html&gt; non possono essere utilizzati al di fuori delle normali pagine.",
index ae0377a..94249e8 100644 (file)
        "restrictionsfield-help": "줄 단위의 하나의 IP 주소 또는 CIDR 대역입니다. 모든 곳에 적용하려면, 다음을 사용하세요:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "오류: $1",
        "edit-error-long": "오류:\n\n$1",
+       "specialmute": "알림 미표시",
+       "specialmute-success": "알림 미표시 환경 설정이 성공적으로 업데이트되었습니다. [[Special:Preferences]]에서 알림이 표시되지 않는 모든 사용자를 확인하십시오.",
+       "specialmute-submit": "확인",
+       "specialmute-label-mute-email": "이 사용자의 이메일 알림을 표시하지 않습니다",
+       "specialmute-header": "{{BIDI:[[User:$1]]}}의 알림 미표시 환경 설정을 선택해 주십시오.",
+       "specialmute-error-invalid-user": "요청한 사용자 이름을 찾을 수 없습니다.",
+       "specialmute-error-email-blacklist-disabled": "이메일 보내기로부터 사용자 알림 미표시가 활성화되어 있지 않습니다.",
+       "specialmute-error-email-preferences": "사용자의 알림을 미표시 처리하기 전에 이메일 주소를 확인해야 합니다. [[Special:Preferences]]에서 이 작업을 할 수 있습니다.",
+       "specialmute-email-footer": "[$1 {{BIDI:$2}}의 이메일 환경 설정을 관리합니다.]",
+       "specialmute-login-required": "알림 미표시 환경 설정을 변경하려면 로그인해 주십시오.",
        "revid": "$1 판",
        "pageid": "페이지 ID $1",
        "interfaceadmin-info": "$1\n\n사이트 전체에 쓰이는 CSS/JS/JSON 파일의 편집 권한이 최근 <code>editinterface</code> 권한에서 분리되었습니다. 왜 이 오류가 발생하는지 이해가 되지 않는다면, [[mw:MediaWiki_1.32/interface-admin]]을 참고하십시오.",
index 0ae2c67..d61a2e6 100644 (file)
        "restrictionsfield-label": "Zougeloossen IP-Beräicher:",
        "edit-error-short": "Feeler: $1",
        "edit-error-long": "Feeler:\n\n$1",
+       "specialmute": "Toun aus",
+       "specialmute-submit": "Confirméieren",
+       "specialmute-error-invalid-user": "De Gefrote Benotzernumm gouf net fonnt.",
        "revid": "Versioun $1",
        "gotointerwiki": "{{SITENAME}} verloossen",
        "gotointerwiki-invalid": "De spezifizéierten Titel ass net valabel.",
index dee85ef..2a90040 100644 (file)
        "post-expand-template-inclusion-warning": "زٱنڳیار چۊئٱ د ڤٱر گرتٱ ٱندازاٛ یٱ کاْ فرٱ گٱپٱ.پاراٛیؽ د چۊئٱیا ناْ د ڤٱر نماٛیرٱ.",
        "post-expand-template-inclusion-category": "بٱلگٱیا د ڤٱر گرتٱ چۊئٱ هؽسن کاْ ٱندازٱش د هٱد اومایٱ ڤ دٱر",
        "post-expand-template-argument-warning": "زٱنڳیار اؽ بٱلگٱ د ڤٱر گرتٱ هٱدٱقٱل یاٛ چۊئٱ سی چٱک چنٱ یٱ کاْ ٱندازٱ فرٱ گٱپٱ.\nگٱپسنؽا پاک بینٱ.",
-       "post-expand-template-argument-category": "بÙ\84Ú¯Ù\87 Ø¯ Ù\88ر Ú¯Ø±ØªÙ\87 Ú\86Ù\88ئÙ\87 Ú\86Ú© Ú\86Ù\86Û\8cا Ø¯ Ø¨Û\8cÙ\86 Ø±Ø¦ØªÙ\87",
-       "parser-template-loop-warning": "حلقه چوئه دیاری کرده:[[$1]]",
-       "parser-template-recursion-depth-warning": "محدÙ\88دÛ\8cت Ù¾Û\8c Û\8cا Ù\88رئشتÙ\86 Ú\86Ù\88ئÙ\87 Ø±Ø¯ Ø¨Û\8c($1)",
-       "language-converter-depth-warning": "محدÙ\88دÛ\8cت Ù¾Û\8c Û\8cا Ø²Ù\88Ù\86 Ù\88اÙ\84رÙ\86 Ø±Ø¯ Ø¨Û\8c($1)",
-       "node-count-exceeded-category": "بÙ\84Ú¯Ù\87 Û\8cا Ú©Ù\87 Ø¯ Ø¨Û\8cشرÙ\88Ù\86Ù\87 Ø´Ù\85ارÙ\87 Ú¯Ø±Ù\88 Ù\81رÙ\87 Ù¾Ø¦Ø´Ú©Ø±Ø¯ Ú©Ø±Ø¯Ù\86Ù\87",
-       "node-count-exceeded-category-desc": "زیردسه سی بلگه یایی که د ونو اشمارنه فره پئشکرد کرده.",
-       "node-count-exceeded-warning": "بÙ\84Ú¯Ù\87 Ø¯ Ø¨Û\8cشترÙ\88Ù\86Ù\87 Ø´Ù\85ارÙ\87 Ú¯Ø±Ù\88 Ù\81رÙ\87 Ù¾Ø¦شکرد کرد",
-       "expansion-depth-exceeded-category": "بÙ\84Ú¯Ù\87 Û\8cاÛ\8cÛ\8c Ú©Ù\87 Ø¯ Ø¨Û\8cشترÙ\88Ù\86Ù\87 Ù¾Û\8c Û\8cا Ù\88Ù\88Ù\84Ù\87 Ú©Ø±Ø¯Ù\86 Ù\81رÙ\87 Ù¾Ø¦Ø´Ú©Ø±Ø¯ Ú©Ø±Ø¯Ù\86Ù\87",
-       "expansion-depth-exceeded-category-desc": "زیر دسه سی بلگه یایی که د ونو پی یا ووله بیین فره پئشکرد کرده.",
-       "expansion-depth-exceeded-warning": "بÙ\84Ú¯Ù\87 Ø¯ Ù¾Û\8c Û\8cا Ù\88Ù\88Ù\84Ù\87 Ø¨Û\8cÛ\8cÙ\86 Ù¾Ø¦شکرد کرد",
-       "parser-unstrip-loop-warning": "گردوله د فرمونه Unstrip پیدا بیه",
-       "unstrip-depth-warning": "د بیشترونه د سرچشمه رئتن د دستور Unstrip واروتر رئتیته($1)",
-       "converter-manual-rule-error": "خطا د قانون والرشتن دسی زون",
-       "undo-success": "نبوئه ویرایشت نه انجومشیو بکیت.\nلطفا ای فرخی که ها د هار نه وارسی بکیت تا یه کاریه که میهات انجوم بئیت، و اوسه آلشتیا هار نه اماییه بکیت سی یه که خمثی کردن ویرایشت نه انجوم بئیت.",
+       "post-expand-template-argument-category": "بٱÙ\84Ú¯Ù± Ø¯ Ú¤Ù±Ø± Ú¯Ø±ØªÙ± Ú\86Û\8aئٱ Ú\86Ù±Ú© Ú\86Ù\86Ù± Ø¯ Ø¨Ø§Ù\9bÙ\86 Ø±Ù±ØªÙ±",
+       "parser-template-loop-warning": "هٱلقٱ چۊئٱ دؽاری کردٱ:[[$1]]",
+       "parser-template-recursion-depth-warning": "مÙ±Ù\87دÛ\8aدÛ\8cٱت Ù¾Û\8c Û\8cا Ú¤Ø±Ú¯Ù±Ø´ØªÙ\86 Ú\86Û\8aئٱ Ø±Ù±Ø¯ Ø¨Û\8c($1)",
+       "language-converter-depth-warning": "مÙ±Ù\87دÛ\8aدÛ\8cٱت Ù¾Û\8c Û\8cا Ø²Ú¤Ù\88Ý© Ú¤Ø§Ù\84Ù\9bرÙ\86 Ø±Ù±Ø¯ Ø¨Û\8c($1)",
+       "node-count-exceeded-category": "بٱÙ\84Ú¯Ù±Û\8cا Ú©Ø§Ù\92 Ø¯ Ø¨Ø½Ø´Ø±Ù\88Ù\86Ù± Ø´Ù\85ارٱ Ú¯Ø±Û\8a Ù\81رٱ Ù¾Û\8cشکرد Ú©Ø±Ø¯Ù\86Ù±",
+       "node-count-exceeded-category-desc": "زؽردٱسٱ سی بٱلگٱیایؽ کاْ د ڤنو اْشمارنٱ فرٱ پیشکرد کردٱ.",
+       "node-count-exceeded-warning": "بٱÙ\84Ú¯Ù± Ø¯ Ø¨Ø½Ø´ØªØ±Ù\88Ù\86Ù± Ø´Ù\85ارٱ Ú¯Ø±Û\8a Ù\81رٱ Ù¾Û\8cشکرد کرد",
+       "expansion-depth-exceeded-category": "بٱÙ\84Ú¯Ù±Û\8cاÛ\8cؽ Ú©Ø§Ù\92 Ø¯ Ø¨Ø½Ø´ØªØ±Ù\88Ù\86Ù± Ù¾Û\8c Û\8cا Ú¤Ù\84Ù± Ú©Ø±Ø¯Ù\86 Ù\81رٱ Ù¾Û\8cشکرد Ú©Ø±Ø¯Ù\86Ù±",
+       "expansion-depth-exceeded-category-desc": "زؽر دٱسٱ سی بٱلگٱیایؽ کاْ د ڤنو پی یا ڤلٱ بیئن فرٱ پیشکرد کردٱ.",
+       "expansion-depth-exceeded-warning": "بٱÙ\84Ú¯Ù± Ø¯ Ù¾Û\8c Û\8cا Ú¤Ù\84Ù± Ø¨Û\8cئÙ\86 Ù¾Û\8cشکرد کرد",
+       "parser-unstrip-loop-warning": "گردۊلٱ د فرمونٱ Unstrip پاٛدا بیٱ",
+       "unstrip-depth-warning": "د بؽشترونٱ د سرچشمٱ رٱتن د دٱسدۊر Unstrip ڤارۉتر رٱتؽتٱ($1)",
+       "converter-manual-rule-error": "خٱتا د قانۊن ڤالٛرشتن دٱسی زڤوݩ",
+       "undo-success": "نمۊئٱ ڤیرایش ناْ ٱنجومشیو بٱکؽت.\nلوتفٱن اؽ فٱرخؽ کاْ ها د هار ناْ ڤارسی بٱکؽت تا یاٛ کارؽ کاْ مؽهایت ٱنجوم باٛیؽت،ۉ اۊساْ آلشتؽا هار ناْآمادٱ بٱکؽت سی یٱ کاْ خونسا کردن ڤیرایش ناْ ٱنجوم باٛیؽت.",
        "undo-failure": "سی ری ڤ ری بیئن اؽ ڤیرایش ڤا ڤیرایشؽا مؽنجایی، نمۊئٱ اؽ ڤیرایش ناْ خونسا بٱکؽت.",
-       "undo-norev": "نبوئه ای ویرایشت نه خومثی بکیت سی یه که یا وجود ناره یا پاکسا بیه.",
-       "undo-nochange": "وه نظر میا که ای ویرایشت د ایسنیا خومثی بیه.",
-       "undo-summary": "Ø®Ù\88Ù\85Ø«Û\8c Ø¨Û\8cئÙ\86 Ù\88اÙ\86ئرÛ\8c Ù\88ا $1 [[Special:Contributions/$2|$2]] ([[User talk:$2|Ú\86Ú© Ú\86Ù\86Ù\87]])",
-       "undo-summary-username-hidden": "Ø®Ù\88Ù\85Ø«Û\8c Ø¨Û\8cئÙ\86 Ù\88اÙ\86ئرÛ\8c $1 Ù\88ا Û\8cÙ\87 Ú¯Ù\84 Ú©Ø§Ø±Û\8cار Ù\82اÙ\85 Ø¨Û\8cÙ\87",
-       "cantcreateaccount-text": "حساو دروس بیه و ا ای تیرنشون آی پی(<strong>$1</strong>) وه دس ای [[کاریار:$3|$3]] قلف بیه.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
+       "undo-norev": "نمۊئٱ اؽ ڤیرایش ناْ خونسا بٱکؽت سی یٱ کاْ یا ڤوجۊد نارٱ یا پاکسا بیٱ.",
+       "undo-nochange": "ڤ نٱزٱر مؽا کاْ اؽ ڤیرایش د ایسنیا خونسی بیٱ.",
+       "undo-summary": "Ø®Ù\88Ù\86سا Ø¨Û\8cئÙ\86 Ú¤Ø§Ù\86رÛ\8c Ú¤Ø§ $1 [[Special:Contributions/$2|$2]] ([[User talk:$2|Ú\86Ù±Ú© Ú\86Ù\86Ù±]])",
+       "undo-summary-username-hidden": "Ø®Ù\88Ù\86سا Ø¨Û\8cئÙ\86 Ú¤Ø§Ù\86رÛ\8c $1 Ú¤Ø§ Û\8cاÙ\9b Ú©Ø§Ø±Û\8cار Ù\82اÛ\8cÙ\85 Ø¨Û\8cÙ±",
+       "cantcreateaccount-text": "هساو دۏرس بیٱ ڤا اؽ تیرنشوݩ آی پی(<strong>$1</strong>) ڤ دٱس اؽ [[کاریار:$3|$3]] قلف بیٱ.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
        "cantcreateaccount-range-text": "حساو دروس بیه وا تیرنشون آی پی که د پوشینه <strong>$1</strong> ، که وه ئم مینونه دار تیرنشون آی پی شما ئم هئ(<strong>$4</strong>)، وه دس [[کاریار:$3|$3]]قلف بیه.\n\nدلیل دئه بیه وا $3، \"$2\" ئه.",
-       "viewpagelogs": "ساÙ\9bÙ\84Ù\9b Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù±Û\8cا Ø§Ø¨ بٱلگٱ بٱکؽت",
+       "viewpagelogs": "ساÙ\9bÙ\84Ù\9b Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù±Û\8cا Ø§Ø½ بٱلگٱ بٱکؽت",
        "nohistory": "هیچ ویرگار ویرایشتی د ای بلگه نئ.",
        "currentrev": "آخرین دوواره دیئن",
        "currentrev-asof": "آخری ڤانری چی $1",
        "exbeforeblank": "مینونه حالی دمایی:\"$1\" بی",
        "delete-confirm": "پاکسا کئردئن \"$1\"",
        "delete-legend": "پاکسا کئردئن",
-       "historywarning": "<strong>هشدار:</strong> بلگه یی که شما میهایت پاکساش بکیت دش یه گل ویرگارچه واگرد $1 {{PLURAL:$1|وانئری|وانئریا}} ئه:",
+       "historywarning": "<strong>هوشدار:</strong> بٱلگاٛیؽ کاْ شما مؽهایت پاکساش بٱکؽت دش یاٛ ڤیرگارچٱ ڤاگرد $1 {{PLURAL:$1|ڤانری|ڤانریا}} ئٱ:",
        "confirmdeletetext": "شما د حال و بار پاکسا کردن یه گل بلگه یا عسگ د رسینه جا واگرد همه ویرگارچه ونیت.\nلطف بکیت ای کنشتکاری نه پشت راسکاری بکیت و یه دل بوئیت که سرانجوم ای کار نه دونیت و ای کار نه مطابق وا [[{{MediaWiki:Policy-url}}|سیاستیا]] انجوم دئیته.",
        "actioncomplete": "عملكرد كامل بيه",
        "actionfailed": "عملكرد شكست حرده",
index 82c78a0..eb80f11 100644 (file)
        "history": "историја",
        "history_short": "Историја",
        "history_small": "историја",
-       "updatedmarker": "подновено Ð¾Ð´ Ð¼Ð¾Ñ\98ата последна посета",
+       "updatedmarker": "подновено Ð¾Ð´ Ð²Ð°Ñ\88ата последна посета",
        "printableversion": "Верзија за печатење",
        "permalink": "Постојана врска",
        "print": "Печати",
        "systemblockedtext": "Вашето корисничко име или IP-адреса е автоматски блокирано од МедијаВики.\nНаведената причина гласи:\n\n:<em>$2</em>\n\n* Почеток на блокот: $8\n* Истек на блокот: $6\n* Блокот е наменет за: $7\n\nВашата тековна IP-адреса гласи $3.\nПрепишете ги сите горенаведени поединости доколку сакате да се распрашате кај надлежните во врска со блокот.",
        "blockednoreason": "не е наведена причина",
        "blockedtext-composite": "<strong>Вашето корисничко име или IP-адреса е блокирано.</strong>\n\nНаведената причина гласи:\n\n:<em>$2</em>.\n\n* Почеток на блокот: $8\n* Истек на најдолгиот блок: $6\n\nВашата тековна IP-адреса гласи $3.\nПрепишете ги сите горенаведени поединости доколку сакате да се распрашате кај надлежните во врска со блокот.",
-       "blockedtext-composite-reason": "Вашата сметка или IP-адреса има неколку блокови",
+       "blockedtext-composite-reason": "Вашата сметка или IP-адреса има неколку блокови",
        "whitelistedittext": "Мора да сте $1 за да уредувате страници.",
        "confirmedittext": "Морате да ја потврдите вашата е-поштенска адреса пред да уредувате страници.\nПоставете ја и валидирајте ја вашата е-поштенска адреса преку вашите [[Special:Preferences|нагодувања]].",
        "nosuchsectiontitle": "Не можам да го пронајдам заглавието",
        "accmailtext": "На $2 е спратена е случајно создадена лозинка за [[User talk:$1|$1]] е испратена. Истата може да се смени на страницата ''[[Special:ChangePassword|Менување на лозинка]]'' откако ќе се најавите.",
        "newarticle": "(нова)",
        "newarticletext": "Дојдовте на врска до страница која сѐ уште не постои.\nЗа да ја создадете страницата, напишете текст во полето подолу ([$1 помош]). Ако сте овде по грешка, само систнете на копчето '''назад''' во вашиот прелистувач.",
-       "anontalkpagetext": "----\n<em>Ова е разговорна страница со анонимен корисник кој сè уште не регистрирал корисничка сметка или не ја користи.<em>\nЗатоа мораме да ја користиме неговата бројчена IP-адреса за да го препознаеме.\nЕдна ваква IP-адреса може да ја делат повеќе корисници.\nАко сте анонимен корисник и сметате дека кон вас се упатени нерелевантни коментари, тогаш [[Special:CreateAccount|создајте корисничка сметка]] или [[Special:UserLogin|најавете се]] за да избегнете поистоветување со други анонимни корисници во иднина.''",
+       "anontalkpagetext": "----\n<em>Ова е разговорна страница со анонимен корисник кој сè уште не регистрирал корисничка сметка или не ја користи.<em>\nЗатоа мораме да ја користиме неговата бројчена IP-адреса за да го препознаеме.\nЕдна ваква IP-адреса може да ја делат повеќе корисници.\nАко сте анонимен корисник и сметате дека кон вас се упатени нерелевантни коментари, тогаш [[Special:CreateAccount|создајте корисничка сметка]] или [[Special:UserLogin|најавете се]] за да избегнете поистоветување со други анонимни корисници во иднина.",
        "noarticletext": "Таква страница сè уште не постои.\nМожете да проверите [[Special:Search/{{PAGENAME}}|дали насловот се споменува]] во други статии,\nда ги <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пребарате дневниците],\nили да [{{fullurl:{{FULLPAGENAME}}|action=edit}} ја создадете]</span>.",
        "noarticletext-nopermission": "Таква страница сè уште не постои.\nМожете да проверите [[Special:Search/{{PAGENAME}}|дали насловот се споменува]] во други статии или пак да <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пребарате поврзаните дневници]</span>, но немате дозвола да ја создадете страницата.",
        "missing-revision": "Не ја пронајдов преработката бр. $1 на страницата со наслов „{{FULLPAGENAME}}“.\n\nОва обично се должи на застарена врска за разлики што води кон избришана страница.\nПовеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
        "restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
        "edit-error-short": "Грешка: $1",
        "edit-error-long": "Грешки:\n\n$1",
+       "specialmute": "Искл. известувања",
+       "specialmute-success": "Промените се успешно направени. Погледајте ги сите исклучени корисници на [[Special:Preferences]].",
+       "specialmute-submit": "Потврди",
+       "specialmute-label-mute-email": "Исклучи е-пошта од корисников",
+       "specialmute-header": "Изберете поставки за известувања од {{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "Не можев да го најдам корисничкото име.",
+       "specialmute-error-email-blacklist-disabled": "Исклучувањето на е-пошта од корисници не е овозможено.",
+       "specialmute-error-email-preferences": "Ќе мора да ја потврдите вашата е-пошта пред да исклучите известувања од други. Тоа се прави на страницата [[Special:Preferences]].",
+       "specialmute-email-footer": "[$1 Раководење со поставки за е-пошта од {{BIDI:$2}}.]",
+       "specialmute-login-required": "Најавете се за да ги направите промените.",
        "revid": "преработка $1",
        "pageid": "назнака на страницата $1",
        "interfaceadmin-info": "$1\n\nДозволите за уредување на CSS/JS/JSON податотеки низ цело вики неодамна се одвоени од правото <code>editinterface</code>. Ако не разбирате зошто ја добивате оваа грешка, погл. [[mw:MediaWiki_1.32/interface-admin]].",
index dead74a..2900229 100644 (file)
        "prot_1movedto2": "[[$1]] sóa khì tī [[$2]]",
        "protect-legend": "Khak-tēng beh pó-hō·",
        "protectcomment": "Lí-iû:",
+       "protect-default": "Ún-chún só͘-ū iōng-chiá",
        "protect-level-autoconfirmed": "Ta ín-chún chū-tōng khak-jīn iōng-chiá",
        "protect-level-sysop": "Ta ín-chún koán-lí jîn-oân",
        "protect-expiring": "chì $1 (UTC) kòe-kî",
        "logentry-move-move": "$1 {{GENDER:$2|sóa}} $3 chit ia̍h khì $4",
        "logentry-move-move_redir": "$1 iōng choán-ia̍h {{GENDER:$2|sóa}} ia̍h-bīn $3 kòe $4",
        "logentry-newusers-create": "已經{{GENDER:$2|開好}}用者口座 $1",
+       "logentry-protect-protect": "$1 {{GENDER:$2|pó-hō͘ liáu}} $3 $4",
        "searchsuggest-search": "Chhoē {{SITENAME}}",
        "expandtemplates": "Khok-chhiong pang-bô͘",
        "expand_templates_input": "Su-ji̍p bûn-jī:",
index 40e2855..8d3c9be 100644 (file)
        "restrictionsfield-help": "Een IP-adres of CIDR bereik per lijn. Om alles toe te staan, gebruik:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Fout: $1",
        "edit-error-long": "Fouten:\n\n$1",
+       "specialmute": "Negeren",
+       "specialmute-success": "Het bijwerken van uw voorkeur voor het negeren is geslaagd. Bekijk een lijst met alle genegeerde gebruikers in [[Special:Preferences|uw voorkeuren]].",
+       "specialmute-submit": "Bevestig",
+       "specialmute-label-mute-email": "Negeer e-mails van deze gebruiker",
+       "specialmute-header": "Selecteer uw voorkeur voor het negeren van {{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "De ingevoerde gebruikersnaam kon niet worden gevonden.",
+       "specialmute-error-email-blacklist-disabled": "Het negeren van e-mails verstuurd door andere gebruikers is niet ingeschakeld.",
+       "specialmute-error-email-preferences": "U moet uw e-mailadres bevestigen voordat u een gebruiker kunt negeren. U kunt dit doen in [[Special:Preferences|uw voorkeuren]].",
+       "specialmute-email-footer": "[$1 E-mail voorkeuren beheren voor {{BIDI:$2}}.]",
+       "specialmute-login-required": "U moet aanmelden om voorkeuren voor het negeren van gebruikers in te stellen.",
        "revid": "versie $1",
        "pageid": "Pagina-ID $1",
        "interfaceadmin-info": "$1\n\nRechten voor het bewerken van wikibrede CSS/JS/JSON-bestanden zijn recentelijk gescheiden van het <code>editinterface</code> recht. Als u niet begrijpt waarom u deze foutmelding te zien krijgt, ga dan naar [[mw:MediaWiki_1.32/interface-admin]].",
index 69b22cc..d2d6457 100644 (file)
        "history": "ߞߐߜߍ ߟߊ߫ ߘߐ߬ߝߐ",
        "history_short": "ߘߐ߬ߝߐ",
        "history_small": "ߕߊ߬ߡߌ߲߬ߣߍ߲",
-       "updatedmarker": "ß\8a߬ ß\9fß\8fß²ß\98ß\90ߦß\8a ß\9eß\8a߬ߦß\8c߯ ß\92 ß ߊ߫ ߞߐߟߊ߫ ߓߐߒߡߊߟߌ ߟߎ߬ ߡߊ߬",
+       "updatedmarker": "ß\8a߬ ß\9fß\8fß²ß\98ß\90ߦß\8a ß\9eß\8a߬ߦß\8c߯ ß\8c ß\9fߊ߫ ߞߐߟߊ߫ ߓߐߒߡߊߟߌ ߟߎ߬ ߡߊ߬",
        "printableversion": "ߓߐߞߏߣߊ߲߫ ߜߌ߬ߙߌ߲߬ߘߌ߬ߕߊ",
        "permalink": "ߛߘߌ߬ߜߋ߲߬ ߓߟߏߕߍ߰ߓߊߟߌ",
        "print": "ߜߌ߬ߙߌ߲߬ߘߌ߬ߟߌ",
        "right-move-categorypages": "ߦߌߟߡߊ߫ ߞߐߜߍ ߟߎ߬ ߛߋ߲߬ߓߐ߫",
        "right-movefile": "ߞߐߕߐ߮ ߟߎ߬ ߛߋ߲߬ߓߐ߫",
        "right-upload": "ߞߐߕߐ߮ ߟߎ߬ ߟߊߦߟߍ߬",
+       "right-reupload": "ߛߋ߲߬ߠߊ߬ ߞߐߕߐ߮ ߖߏ߬ߛߌ߬",
+       "right-reupload-own": "ߌ ߖߍ߬ߘߍ ߟߊ߫ ߞߐߕߐ߯ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬ ߖߏ߰ߛߌ߬",
+       "right-upload_by_url": "ߞߐߕߐ߮ ߘߏ߫ ߟߊߦߟߍ߬ ߞߊ߬ ߓߐ߫ URL ߘߐ߫",
        "right-writeapi": "ߛߓߍߟߌ API ߟߊߓߊ߯ߙߊ߫",
        "right-delete": "ߞߐߜߍ ߟߎ߬ ߖߏ߰ߛߌ߬",
        "right-bigdelete": "ߞߐߜߍ߫ ߘߝߐ߬ ߓߟߋ߬ߓߟߋ߬ߡߊ ߟߎ߬ ߖߏ߰ߛߌ߬",
        "right-editmyuserjson": "ߌ ߖߍ߬ߘߍ ߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ JSON ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "right-editmyuserjs": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ JavaScript ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "right-viewmywatchlist": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߦߋ߫",
+       "right-editmyoptions": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߟߊߝߌߛߦߊߟߌ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "right-unwatchedpages": "ߞߐߜߍ߫ ߜߋ߬ߟߎ߲߬ߓߊߟߌ ߟߎ߬ ߛߙߍߘߍ ߦߋ߫",
+       "right-mergehistory": "ߞߐߜߍ ߟߊ߫ ߘߐ߬ߝߐ ߟߎ߬ ߞߍߢߐ߲߮ߞߊ߲߬",
+       "right-userrights": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߤߊߞߍ ߓߍ߯ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "right-userrights-interwiki": "ߥߞߌ ߘߏ ߟߎ߬ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬ ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ ߤߊߞߍ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "right-siteadmin": "ߓߟߏߡߟߊ ߝߊ߲ ߣߍ߰ ߊ߬ ߣߌ߫ ߞߵߊ߬ ߟߊߞߊ߬",
+       "right-sendemail": "ߢߎߡߍߙߋ߲ ߗߋ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߡߊ߬",
        "grant-group-email": "ߢߎߡߍߙߋ߲ ߗߋ߫",
        "grant-createaccount": "ߖߊ߬ߕߋ߬ߘߊ ߘߏ߫ ߛߌ߲ߘߌ߫",
        "grant-createeditmovepage": "ߞߐߜߍ ߛߌ߲ߘߌ߫߸ ߡߊߦߟߍ߬ߡߊ߲߫߸ ߊ߬ ߣߌ߫ ߞߵߊ߬ ߛߋ߲߬ߓߐ߫",
        "action-viewmyprivateinfo": "ߌ ߘߎ߲߬ߘߎ߬ߡߊ߬ ߞߌߓߊߙߏߦߊ ߟߎ߬ ߦߋ߫",
        "action-editmyprivateinfo": "ߌ ߘߎ߲߬ߘߎ߬ߡߊ߬ ߞߌߓߊߙߏߦߊ ߡߊߦߟߍ߬ߡߊ߲߫",
        "action-editcontentmodel": "ߞߐߜߍ ߣߌ߲߬ ߞߣߐߘߐ ߛߎ߮ߦߊ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-editusercss": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ CSS ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ ߞߐߕߐ߮ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-edituserjson": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߟߊ߫ JSON ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-edituserjs": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߟߊ߫ JavaScript ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-editsitecss": "ߞߍߦߙߐ ߞߣߍ CSS ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-editsitejson": "ߞߍߦߙߐ ߞߣߍ JSON ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-editsitejs": "ߞߍߦߙߐ ߞߣߍ JavaScript ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-editmyusercss": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ CSS ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ ߞߐߕߐ߮ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-editmyuserjson": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ JSON ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-editmyuserjs": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ JavaScript ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-viewsuppressed": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߟߊ߫ ߟߢߊ߬ߟߌ߬ ߢߡߊߘߏ߲߰ߣߍ߲ ߠߎ߬ ߦߋ߫",
+       "action-unblockself": "ߌ ߖߍ߬ߘߍ ߓߊ߬ߟߌ߬ߣߍ߲ ߓߐ߫",
+       "nchanges": "$1 {{PLURAL:$1|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ߞߊ߬ߦߌ߯ ߓߐߒߡߊߟߌ ߟߊߓߊ߲}}",
        "enhancedrc-history": "ߕߊ߬ߡߌ߲߬ߣߍ߲",
        "recentchanges": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߎߘߊ ߟߎ߬",
        "recentchanges-legend": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߎߘߊ ߟߎ߫ ߟߊ߬ߓߍ߲߬ߢߐ߰ߡߦߊ߬ߘߊ",
        "recentchanges-summary": "ߥߞߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߎ߲ߓߊ ߡߍ߲ ߠߎ߬ ߞߍߣߍ߲߫ ߞߐߜߍ ߣߌ߲߬ ߞߊ߲߬߸ ߏ߬ ߟߎ߫ ߣߐ߬ߣߐ߬.",
        "recentchanges-noresult": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߬ ߛߌ߫ ߓߍ߲߬ߢߐ߲߰ߦߊ߬ߣߍ߲߬ ߕߍ߫ ߛߎߡߊ߲ߡߕߊ ߢߌ߲߬ ߠߎ߫ ߡߊ߬ ߕߎ߬ߡߊ߬ ߟߊߕߍ߰ߣߍ߲ ߦߌ߬ߘߊ ߘߐ߫.",
+       "recentchanges-timeout": "ߢߌߣߌ߲ߣߌ߲ ߣߌ߲߬ ߕߎ߬ߡߊ ߓߘߊ߫ ߕߊ߬ߡߌ߲߬. ߌ ߞߊߞߊ߲߫ ߞߊ߬ ߢߊߢߌߣߌ߲߫ ߜߘߍ߫ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߞߍ߫.",
+       "recentchanges-network": "ߞߊ߬ ߓߍ߲߬ ߛߋߒߞߏߟߦߊ ߝߎ߬ߕߎ߲߬ߕߌ ߡߊ߬߸ ߞߐߝߟߌ߫ ߛߌ߫ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߟߊߢߎ߲߫ ߠߊ߫. ߌ ߞߊߘߊ߲߫ ߞߊ߬ ߞߐߜߍ ߣߌ߲߬ ߠߊߛߎߡߦߊ߫ ߖߊ߰ߣߌ߲߫.",
+       "recentchanges-notargetpage": "ߞߐߜߍ ߕߐ߮ ߟߊߘߏ߲߬ ߛߊ߲ߝߍ߬߸ ߦߟߍ߬ߡߊ߲ ߡߍ߲ ߦߋ߫ ߞߐߜߍ ߘߐ߫߸ ߞߵߏ߬ ߦߋ߫.",
        "recentchanges-label-newpage": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߣߌ߲߬ ߓߘߊ߫ ߘߐߜߍ߫ ߞߎߘߊ ߟߊߘߊ߲߫",
        "recentchanges-label-minor": "ߢߟߊߞߎߘߦߊ߫ ߝߕߌߣߍ߲ ߠߋ߬",
        "recentchanges-label-bot": "ߡߐ߰ߡߐ߮ ߟߋ߫ ߣߐ߬ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ ߣߌ߲߬ ߞߍ߫ ߟߊ߫",
        "rcfilters-quickfilters": "ߞߎ߲߬ߕߐ߰ ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲ ߠߎ߬",
        "rcfilters-quickfilters-placeholder-title": "ߛߌ߲ߘߌߣߍ߲ ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲߬ ߕߍ߫ ߡߎߣߎ߲߬",
        "rcfilters-savedqueries-defaultlabel": "ߞߎ߲߬ߕߐ߰ ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲ ߠߎ߬",
+       "rcfilters-savedqueries-rename": "ߊ߬ ߕߐ߯ߟߊ߫",
+       "rcfilters-savedqueries-setdefault": "ߊ߬ ߞߍ߫ ߓߐߛߎ߲ ߘߌ߫",
+       "rcfilters-savedqueries-unsetdefault": "ߊ߬ ߓߐ߫ ߓߐߛߎ߲ ߘߐ߫",
+       "rcfilters-savedqueries-remove": "ߊ߬ ߖߏ߰ߛߌ߬",
+       "rcfilters-savedqueries-new-name-label": "ߕߐ߮",
+       "rcfilters-savedqueries-cancel-label": "ߊ߬ ߘߐߛߊ߬",
+       "rcfilters-filterlist-whatsthis": "ߣߌ߲߬ ߦߋ߫ ߓߊ߯ߙߊ߫ ߟߊ߫ ߘߌ߬؟",
+       "rcfilters-highlightbutton-title": "ߞߐߝߟߌ߫ ߡߊߦߋߙߋ߲ߣߍ߲ ߠߎ߬",
+       "rcfilters-highlightmenu-title": "ߞߐ߬ߟߐ ߘߏ߫ ߓߊߓߌ߬ߟߊ߬",
+       "rcfilters-filter-editsbyself-label": "ߡߍ߲ ߠߎ߬ ߡߊߦߟߍ߬ߡߊ߲߬ߣߍ߲߬ ߌ ߓߟߏ߫",
+       "rcfilters-filter-editsbyself-description": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲.",
+       "rcfilters-filter-editsbyother-label": "ߘߏ ߟߎ߬ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬",
+       "rcfilters-filter-editsbyother-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߓߍ߯ ߝߴߌ ߕߊ ߟߎ߬.",
+       "rcfilters-filter-user-experience-level-registered-label": "ߕߐ߯ߛߓߍߣߍ߲",
+       "rcfilters-filter-user-experience-level-registered-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߊ߫ ߜߊ߲߬ߞߎ߲߬ߣߍ߲ ߠߎ߬",
+       "rcfilters-filter-user-experience-level-unregistered-label": "ߕߐ߯ߛߓߍߓߊߟߌ",
+       "rcfilters-filter-user-experience-level-unregistered-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߊ ߡߍ߲ ߜߊ߲߬ߞߎ߲߬ߣߍ߲߬ ߕߍ߫.",
+       "rcfilters-filter-user-experience-level-learner-label": "ߞߊ߬ߙߊ߲߬ߠߊ ߟߎ߬",
+       "rcfilters-filter-bots-label": "ߓߏߕ",
+       "rcfilters-filter-bots-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߛߌ߲ߘߌߣߍ߲߫ ߞߍߒߖߘߍߦߋ߫ ߖߐ߯ߙߊ߲ ߠߎ߬ ߘߐ߫.",
+       "rcfilters-filter-humans-label": "ߡߐ߱ (ߓߏߕ  ߕߍ߫)",
+       "rcfilters-filter-humans-description": "ߡߐ߱ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߊ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ ߣߐ.",
+       "rcfilters-filter-reviewstatus-unpatrolled-label": "ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߓߊߟߌ",
+       "rcfilters-filter-minor-label": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߘߋ߬ߣߍ߲ ߠߎ߬",
+       "rcfilters-filtergroup-watchlist": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߞߐߜߍ ߟߎ߬",
+       "rcfilters-filter-watchlist-watched-label": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߘߐ߫",
+       "rcfilters-filtergroup-changetype": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߛߎ߯ߦߊ",
+       "rcfilters-filter-pageedits-label": "ߞߐߜߐ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "rcfilters-filter-pageedits-description": "ߞߐߜߍ ߛߌ߲ߘߟߌ",
+       "rcfilters-filter-newpages-label": "ߞߐߜߍ ߛߌ߲ߘߟߌ",
+       "rcfilters-filter-newpages-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߞߐߜߍ߫ ߞߎߘߊ߫ ߟߊߘߊ߲߫ ߠߊ߫.",
+       "rcfilters-filter-categorization-label": "ߦߌߟߡߊ߫ ߡߊߦߟߍߡߊ߲",
+       "rcfilters-target-page-placeholder": "ߞߐߜߍ ߕߐ߮ ߟߊߘߏ߲߬ (ߥߟߊ߫ ߦߌߟߡߊ)",
        "rcnotefrom": "ߘߎ߰ߟߊ ߘߐ߫ {{PLURAL:$5|is the change|are the changes}} ߞߊ߬ߦߌ߯ <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
+       "rclistfromreset": "ߞߐߜߍ ߓߊߕߐߡߐ߲ߠߌ߲ ߡߊߦߟߍ߬ߡߊ߲߫",
        "rclistfrom": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߎߘߊ ߟߎ߫ ߦߌ߬ߘߊ ߘߊߡߌ߬ߣߊ߬ ߣߌ߲߭ ߡߊ߬ $2, $3",
        "rcshowhideminor": "$1 ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߘߋ߬ߣߍ߲",
        "rcshowhideminor-show": "ߊ߬ ߦߌ߬ߘߊ߬",
        "rcshowhideanons-show": "ߦߌ߬ߘߊ߬ߟߌ",
        "rcshowhideanons-hide": "ߊ߬ ߢߡߊߘߏ߲߰",
        "rcshowhidepatr": "$1 ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ߣߍ߲߫ ߞߣߐ߬ߜߍ߲߬ߣߍ߲ ߠߎ߬",
+       "rcshowhidepatr-show": "ߊ߬ ߦߌ߬ߘߊ߬",
+       "rcshowhidepatr-hide": "ߊ߬ ߢߡߊߘߏ߲߰",
        "rcshowhidemine": "ߒ ߠߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߣߍ߲ ߠߎ߬ $1",
        "rcshowhidemine-show": "ߊ߬ ߦߌ߬ߘߊ߬",
        "rcshowhidemine-hide": "ߊ߬ ߦߡߊߘߏ߲߰",
+       "rcshowhidecategorization": "$1 ߞߐߜߍ ߦߌߟߡߊߦߊߟߌ",
+       "rcshowhidecategorization-show": "ߊ߬ ߦߌ߬ߘߊ߬",
+       "rcshowhidecategorization-hide": "ߊ߬ ߢߡߊߘߏ߲߰",
        "rclinks": "ߕߋ߬ߟߋ $2 ߕߊ߬ߡߌ߲߬ߣߍ߲ ߣߌ߲߬ ߡߝߊ߬ߟߋ߲߬ߠߌ߲߬ ߟߊ߬ߓߊ߲ $1 ߦߌ߬ߘߊ߬",
        "diff": "ߝߘߏ߬ߢߐ߲߰ߡߊ",
        "hist": "ߞߊ߬ߞߘߐ",
        "newpageletter": "ߞ",
        "boteditletter": "ߓ",
        "rc-change-size-new": "$1 {{PLURAL:$1|ߝߌ߬ߘߊ߲|ߝߌ߬ߘߊ߲ ߠߎ߬}} ߢߟߊߞߎߘߦߊ ߞߐ߫",
+       "newsectionsummary": "/* $1 */ ߞߣߐߘߐ߫ ߞߎߘߊ߫",
+       "rc-enhanced-expand": "ߝߊߙߊ߲ߝߊ߯ߛߌ ߟߎ߬ ߦߌ߬ߘߊ߬",
+       "rc-enhanced-hide": "ߝߊߙߊ߲ߝߊ߯ߛߌ ߟߎ߬ ߢߡߊߘߏ߲߰",
        "rc-old-title": "ߊ߬ ߓߊߞߘߐ ߟߊߘߊ߲߫ ߣߍ߲߫ ߦߋ߫ ߕߊ߲߬ ߠߋ߫ \"$1\"",
        "recentchangeslinked": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߜߋ߲߬ߞߘߎ߬ߢߐ߲߰ߡߊ ߟߎ߬",
        "recentchangeslinked-toolbox": "ߢߟߊߞߎߘߦߊߟߌ߫ ߜߋ߲߬ߞߘߎ߬ߡߊ ߟߎ߬",
        "recentchangeslinked-page": "ߞߐߜߍ ߕߐ߮:",
        "recentchangeslinked-to": "ߞߐߜߍ ߛߘߌ߬ߜߋ߲ ߠߎ߬ ߦߌ߬ߘߊ߬߸ ߞߊ߬ ߞߐߜߍ ߣߌ߬ ߞߋߟߋ߲ߘߌ߫",
        "upload": "ߞߐߕߐ߮ ߟߊߦߟߍ",
+       "uploadbtn": "ߞߐߕߐ߮ ߟߊߦߟߍ߬",
        "uploadlogpage": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߘߏ߫ ߟߊߦߟߍ߬",
+       "filename": "ߞߐߕߐ߮ ߕߐ߮",
        "filedesc": "ߟߊߘߛߏߣߍ߲",
+       "fileuploadsummary": "ߟߊ߬ߘߛߏ߬ߟߌ:",
+       "filereuploadsummary": "ߞߐߕߐ߮ ߡߊߦߟߍ߬ߡߊ߲:",
+       "filesource": "ߛߎ߲:",
+       "savefile": "ߞߐߕߐ߮ ߟߊߞߎ߲߬ߘߎ߬",
+       "upload-dialog-title": "ߞߐߕߐ߮ ߟߊߦߟߍ߬",
+       "upload-dialog-button-cancel": "ߊ߬ ߘߐߛߊ߬",
+       "upload-dialog-button-back": "ߌ ߞߐߛߊ߬ߦߌ߬",
        "license": "ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ ߦߴߌ ߘߐ߫:",
        "license-header": "ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ ߦߴߌ ߘߐ߫",
        "imgfile": "ߞߐߕߐ߮",
index 6a3e2c0..6cac408 100644 (file)
        "restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Błąd: $1",
        "edit-error-long": "Błędy:\n\n$1",
+       "specialmute": "Ignoruj",
+       "specialmute-success": "Twoje preferencje ignorowania zostały pomyślnie zaktualizowane. Zobacz wszystkich ignorowanych użytkowników w [[Special:Preferences|preferencjach]].",
+       "specialmute-submit": "Potwierdź",
+       "specialmute-label-mute-email": "Ignoruj e-maile od tego użytkownika",
+       "specialmute-header": "Wybierz swoje preferencje ignorowania dla {{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "Pożądana nazwa użytkownika nie została odnaleziona.",
+       "specialmute-error-email-blacklist-disabled": "Ignorowanie e-maili od użytkowników nie jest włączone.",
+       "specialmute-error-email-preferences": "Musisz potwierdzić swój adres e-mail zanim będziesz {{GENDER:|mógł|mogła}} ignorować użytkownika. Możesz to zrobić w [[Special:Preferences|preferencjach]].",
+       "specialmute-email-footer": "[$1 Zarządzaj preferencjami ignorowania dla {{BIDI:$2}}.]",
+       "specialmute-login-required": "Zaloguj się, aby zmienić swoje preferencje wyignorowania.",
        "revid": "wersja $1",
        "pageid": "ID strony: $1",
        "interfaceadmin-info": "$1\n\nUprawnienia do edycji plików CSS/JS/JSON całej witryny zostały wydzielone z dotychczasowego uprawnienia <code>editinterface</code>. Jeżeli nie rozumiesz, dlaczego otrzymujesz ten komunikat, przeczytaj [[mw:MediaWiki_1.32/interface-admin]].",
index dff37f4..175e0b4 100644 (file)
        "history": "Histórico da página",
        "history_short": "Histórico",
        "history_small": "histórico",
-       "updatedmarker": "atualizado desde a minha última visita",
+       "updatedmarker": "atualizado desde sua última visita",
        "printableversion": "Versão para impressão",
        "permalink": "Ligação permanente",
        "print": "Imprimir",
        "restrictionsfield-help": "Um endereço IP ou intervalo CIDR por linha. Para ativar tudo, use\n<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Erro: $1",
        "edit-error-long": "Erros:\n$1",
+       "specialmute": "Silenciar",
+       "specialmute-success": "Suas preferências de silêncio foram atualizadas com sucesso. Ver todos os usuários silenciados em [[Special:Preferences]].",
+       "specialmute-submit": "Confirmar",
+       "specialmute-label-mute-email": "Silenciar e-mails deste usuário",
+       "specialmute-header": "Por favor, selecione suas preferências de mudo para {{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "O nome de usuário solicitado não foi encontrado.",
+       "specialmute-error-email-blacklist-disabled": "O silenciamento de usuários do envio de e-mails não está ativado.",
+       "specialmute-error-email-preferences": "Você deve confirmar seu endereço de e-mail antes de poder silenciar um usuário. Você pode fazer isso de [[Special:Preferences]].",
+       "specialmute-email-footer": "[$1 Gerenciar preferências de email para {{BIDI:$2}}.]",
+       "specialmute-login-required": "Por favor, entre para alterar suas preferências de mudo.",
        "revid": "revisão $1",
        "pageid": "ID da página $1",
        "interfaceadmin-info": "$1\n\nAs permissões para edição de arquivos CSS/JS/JSON em todo o site foram separadas recentemente do direito <code>editinterface</code>. Se você não entende porque está recebendo este erro, veja [[mw:MediaWiki_1.32/interface-admin]].",
index 507bbfd..63ff375 100644 (file)
        "restrictionsfield-help": "Placeholder text displayed in restriction fields (e.g. on Special:BotPassword).",
        "edit-error-short": "Error message. Parameters:\n* $1 - the error details\nSee also:\n* {{msg-mw|edit-error-long}}\n{{Identical|Error}}",
        "edit-error-long": "Error message. Parameters:\n* $1 - the error details\nSee also:\n* {{msg-mw|edit-error-short}}\n{{Identical|Error}}",
+       "specialmute": "The name of the special page [[Special:Mute]].",
+       "specialmute-success": "The content of [[Special:Mute]] with a successful message indicating that your mute preferences have been updated after the form has been submitted.",
+       "specialmute-submit": "Submit button on [[Special:Mute]] form.\n{{Identical|Confirm}}",
+       "specialmute-label-mute-email": "Label for the checkbox that mutes/unmutes emails from the specified user.",
+       "specialmute-header": "Used as header text on [[Special:Mute]]. Shown before the form with the muting options.\n* $1 - User selected for muting",
+       "specialmute-error-invalid-user": "Error displayed when the username cannot be found.",
+       "specialmute-error-email-blacklist-disabled": "Error displayed when email blacklist is not enabled.",
+       "specialmute-error-email-preferences": "Error displayed when the user has not confirmed their email address.",
+       "specialmute-email-footer": "Email footer linking to [[Special:Mute]] preselecting the sender to manage muting options.\n* $1 - Url linking to [[Special:Mute]].\n* $2 - The user sending the email.",
+       "specialmute-login-required": "Error displayed when a user tries to access [[Special:Mute]] before logging in.",
        "revid": "Used to format a revision ID number in text. Parameters:\n* $1 - Revision ID number.\n{{Identical|Revision}}",
        "pageid": "Used to format a page ID number in text. Parameters:\n* $1 - Page ID number.",
        "interfaceadmin-info": "Part of the error message shown when someone with the <code>editinterface</code> right but without the appropriate <code>editsite*</code> right tries to edit a sitewide CSS/JSON/JS page.",
index fe264b6..cdf5c9c 100644 (file)
        "history": "Storie d'a pàgene",
        "history_short": "Cunde",
        "history_small": "cunde",
-       "updatedmarker": "aggiornate da l'urtema visita meje",
+       "updatedmarker": "aggiornate da l'urtema visita toje",
        "printableversion": "Versione ca se stambe",
        "permalink": "Collegamende ca remane pe sembre",
        "print": "Stambe",
        "virus-scanfailed": "condrolle fallite (codece $1)",
        "virus-unknownscanner": "antivirus scanusciute:",
        "logouttext": "'''Tu tè scollegate.'''\n\nNote Bbuene ca certe pàggene ponne condinuà a essere viste cumme ce tu ste angore collegate, fine a quanne a cache d'u browser no se sdevache.",
+       "logging-out-notify": "Ste isse, aspitte.",
        "logout-failed": "Non ge puè assè mò: $1",
        "cannotlogoutnow-title": "Non ge puè assè mò",
        "cannotlogoutnow-text": "Non ge puè assè quanne ste ause $1.",
        "uploadstash-bad-path-unknown-type": "Tipe scanusciute \"$1\".",
        "uploadstash-bad-path-unrecognized-thumb-name": "Nome d'a miniature non acchiate.",
        "uploadstash-bad-path-bad-format": "'A chiave \"$1\" non ge ste jndr'à 'nu formate appropriate.",
+       "uploadstash-file-not-found-no-thumb": "No ge se pò avè 'a miniature.",
+       "uploadstash-file-not-found-no-local-path": "Nisciune percorse locale pa vôsce in scale.",
+       "uploadstash-file-not-found-no-object": "Non ge pozze ccrejà 'nu oggette file locale pa miniature.",
+       "uploadstash-file-not-found-no-remote-thumb": "Recupere d'a miniature schiute a male: $1\nURL = $2",
        "uploadstash-no-extension": "L'estenzione jè vacande.",
        "uploadstash-zero-length": "'U file tène lunghezze zero.",
        "invalid-chunk-offset": "distanze d'u chunk invalide",
        "blocklist-userblocks": "Scunne le blocche sus a le cunde de l'utinde",
        "blocklist-tempblocks": "Scunne le blocche temboranèe",
        "blocklist-addressblocks": "Scunne le blocche de le IP singole",
+       "blocklist-type": "Tipe:",
+       "blocklist-type-opt-all": "Tutte",
+       "blocklist-type-opt-sitewide": "Tutte 'u site",
+       "blocklist-type-opt-partial": "Parziale",
        "blocklist-rangeblocks": "Scunne le indervalle de blocche",
        "blocklist-timestamp": "Orarie de stambe",
        "blocklist-target": "Destinazione",
        "blocklink": "blocche",
        "unblocklink": "sblocche",
        "change-blocklink": "cange 'u blocche",
+       "empty-username": "(nisciune nome utende disponibbele)",
        "contribslink": "condrebbute",
        "emaillink": "manne 'n'e-mail",
        "autoblocker": "Autobloccate purcè l'indirizze IP tune ha state ausate urtemamende da \"[[User:$1|$1]]\".\n'U mutive date pu blocche de $1 ète \"$2\"",
        "block-log-flags-hiddenname": "nome de l'utende scunnute",
        "range_block_disabled": "L'abbilità de le amministrature de ccrejà blocche a indervalle jè disabbilitate.",
        "ipb_expiry_invalid": "L'orarije de scadenze non g'è valide.",
+       "ipb_expiry_old": "L'ore de scadenza jè jndr'à 'u passate.",
        "ipb_expiry_temp": "Le blocche sus a le nome de l'utinde scunnute onna essere permanende.",
        "ipb_hide_invalid": "Non ge se pò scangellà stu cunde utende; tène cchiù de troppe  {{PLURAL:$1|'nu cangiamede|$1 cangiaminde}}.",
        "ipb_already_blocked": "\"$1\" jè ggià blocchete",
        "linkaccounts-submit": "Colleghe le cunde",
        "unlinkaccounts": "Scolleghe le cunde",
        "unlinkaccounts-success": "'U cunde ha state scollegate.",
+       "specialmute": "Citte",
+       "specialmute-submit": "Conferme",
+       "specialmute-error-invalid-user": "'U nome utende rechieste non g'è state acchiate.",
        "revid": "revisione $1",
        "pageid": "ID d'a pàgene $1",
        "rawhtml-notallowed": "Le tag &lt;html&gt; non ge ponne essere ausate fore da le pàggene normale.",
        "gotointerwiki-invalid": "'U titole specificate non g'è valide.",
        "pagedata-bad-title": "Titole invalide: $1.",
        "passwordpolicies-group": "Gruppe",
-       "passwordpolicies-policies": "Politeche"
+       "passwordpolicies-policies": "Politeche",
+       "userlogout-continue": "Vue ccù isse?"
 }
index 43629e3..7136fb7 100644 (file)
        "history": "История",
        "history_short": "История",
        "history_small": "история",
-       "updatedmarker": "обновлено Ð¿Ð¾Ñ\81ле Ð¼Ð¾его последнего посещения",
+       "updatedmarker": "обновлено Ð¿Ð¾Ñ\81ле Ð²Ð°Ñ\88его последнего посещения",
        "printableversion": "Версия для печати",
        "permalink": "Постоянная ссылка",
        "print": "Печать",
        "autoblockedtext": "Ваш IP-адрес автоматически заблокирован в связи с тем, что он ранее использовался кем-то из участников, заблокированных администратором $1. \nБыла указана следующая причина блокировки:\n\n: «$2».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\n\nОбратите внимание, что вы не сможете использовать функцию «{{int:emailuser}}», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\n\nВаш IP-адрес — $3, идентификатор блокировки — #$5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
        "systemblockedtext": "Ваше имя участника или IP-адрес были автоматически заблокированы MediaWiki.\nУказана следующая причина:\n\n:<em>$2</em>\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВаш текущий IP-адрес $3.\nПожалуйста, указывайте все эти сведения в любых своих обращениях.",
        "blockednoreason": "причина не указана",
-       "blockedtext-composite": "<strong>Ваше имя участника или IP-адрес были заблокированы.</strong>\nУказана следующая причина:\n\n:<em>$2</em>\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n\nВаш текущий IP-адрес $3.\nПожалуйста, указывайте все эти сведения в любых своих обращениях.",
+       "blockedtext-composite": "<strong>Ваше имя участника или IP-адрес были заблокированы.</strong>\n\nУказана следующая причина:\n\n:<em>$2</em>\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n\nВаш текущий IP-адрес $3.\nПожалуйста, указывайте все эти сведения в любых своих обращениях.",
        "blockedtext-composite-reason": "Есть несколько блокировок вашей учётной записи и/или IP-адреса",
        "whitelistedittext": "Вы должны $1 для изменения страниц.",
        "confirmedittext": "Вы должны подтвердить свой адрес электронной почты перед правкой страниц.\nПожалуйста, введите и подтвердите свой адрес электронной почты в своих [[Special:Preferences|персональных настройках]].",
        "restrictionsfield-help": "По одному IP-адресу или CIDR-диапазону в строке. Чтобы разрешить всё, используйте:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Ошибка: $1",
        "edit-error-long": "Ошибки:\n\n$1",
+       "specialmute": "Откл. уведомления",
+       "specialmute-success": "Изменения были успешно сделаны. Просмотрите всех отключённых участников на [[Special:Preferences]].",
+       "specialmute-submit": "Подтвердить",
+       "specialmute-label-mute-email": "Отключить эл. почту от этого участника",
+       "specialmute-header": "Пожалуйста, выберите настройки уведомлений от {{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "Указанное вами имя участника не может быть найдено.",
+       "specialmute-error-email-preferences": "Вы должны подтвердить вашу электронную почту, прежде чем отключить уведомление от других. Это можно сделать на странице [[Special:Preferences]].",
+       "specialmute-email-footer": "[$1 Управление настройками эл. почты для {{BIDI:$2}}.]",
+       "specialmute-login-required": "Пожалуйста, войдите, чтобы совершить изменения.",
        "revid": "версия $1",
        "pageid": "ID страницы $1",
        "interfaceadmin-info": "$1\n\nПрава на редактирование общесайтных CSS/JS/JSON-файлов были недавно вынесены из права <code>editinterface</code>. Если вы не понимаете, почему вы наткнулись на эту ошибку, см. [[mw:MediaWiki_1.32/interface-admin]].",
index 0171ad6..7cc15a5 100644 (file)
        "protectedinterface": "Тота сторінка є частёв інтрефейсу проґрамового забеспечіня той вікі і єй можуть едітовати лем адміністраторы проєкту.\nЖебы придати або змінити переклады, просиме хоснуйте [https://translatewiki.net/ translatewiki.net], локалізачный проєкт MediaWiki.",
        "editinginterface": "<strong>Позірь:</strong> Едітуєте сторінку, котра є частинов текстового інтерфейсу.\nЗміны той сторінкы выкличуть зміну інтерфейсу про іншых хоснователїв той вікі.",
        "translateinterface": "Додати ці змінити переклады на вшыткых вікі просиме хоснуйте [https://translatewiki.net/ translatewiki.net] — проєкт, што ся занимать локалізаціов MediaWiki.",
-       "cascadeprotected": "СÑ\82оÑ\80Ñ\96нка Ñ\94 Ð·Ð°Ð¼Ð½ÐºÑ\83Ñ\82а, Ð±Ð¾ Ñ\94 Ð²Ð»Ð¾Ð¶ÐµÐ½Ð° Ð´Ð¾  {{PLURAL:$1|наÑ\81лÑ\97дÑ\83Ñ\8eÑ\87ой Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b Ð·Ð°Ð¼ÐºÐ½Ñ\83Ñ\82Ñ\8b|наÑ\81лÑ\97дÑ\83Ñ\8eÑ\87Ñ\96Ñ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ð·Ð°Ð¼Ð½ÐºÐ½Ñ\83Ñ\82Ñ\8bÑ\85|наÑ\81лÑ\97дÑ\83Ñ\8eÑ\87Ñ\96Ñ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ð·Ð°Ð¼Ð½ÐºÐ½Ñ\83Ñ\82Ñ\8bÑ\85}} ÐºÐ°Ñ\81кадовÑ\8bм Ð·Ð°Ð¼ÐºÐ¾м:\n$2",
+       "cascadeprotected": "СÑ\82оÑ\80Ñ\96нка Ñ\94 Ð·Ð°Ð¼ÐºÐ½Ñ\83Ñ\82а, Ð±Ð¾ Ñ\94 Ð²Ð»Ð¾Ð¶ÐµÐ½Ð° Ð´Ð¾ {{PLURAL:$1|наÑ\81лÑ\97дÑ\83Ñ\8eÑ\87ой Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b Ð·Ð°Ð¼ÐºÐ½Ñ\83Ñ\82Ñ\8b|наÑ\81лÑ\97дÑ\83Ñ\8eÑ\87Ñ\96Ñ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ð·Ð°Ð¼ÐºÐ½Ñ\83Ñ\82Ñ\8bÑ\85}} â\80\9eкаÑ\81кадовÑ\8bмâ\80\9c Ð·Ð°Ð¼ÐºÐ½Ñ\83Ñ\82Ñ\8fм:\n$2",
        "namespaceprotected": "Не маєте права едітовати сторінкы в просторї  назв «$1».",
        "customcssprotected": "Не маєте права едітовати тоту сторінку з CSS, бо обсягує персоналны наставлїна іншого хоснователя.",
        "customjsonprotected": "Не маєте права едітовати тоту сторінку з JSON, бо обсягує персоналны наставлїна іншого хоснователя.",
        "mypreferencesprotected": "Не мате дозволїня мінити свої наставлїня.",
        "ns-specialprotected": "Шпеціалны сторінкы не є можне едітовати.",
        "titleprotected": "Створїня сторінкы з таков назвов было заборонене хоснователём [[User:$1|$1]] з причінов: <em>$2</em>.",
-       "filereadonlyerror": "Ð\9dе Ð³Ð¾Ð´Ð½Ð¾ Ð·Ð¼Ñ\96ниÑ\82и Ñ\84айл â\80\9e$1â\80\9c, Ð±Ð¾ Ð°Ñ\80Ñ\85Ñ\96в Ñ\84айлÑ\96в â\80\9e$2â\80\9c Ñ\94 Ñ\82епеÑ\80Ñ\8c Ð»ÐµÐ¼ Ð½Ð° Ñ\87Ñ\96Ñ\82анÑ\8f.\n\nÐ\90дмÑ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ñ\81еÑ\80веÑ\80а, ÐºÐ¾Ñ\82Ñ\80Ñ\8bй Ð°Ñ\80Ñ\85Ñ\96в Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð², Ð´Ð¾Ð´Ð°Ð² Ñ\82оÑ\82о Ð¿Ð¾Ñ\8fÑ\81нÑ\97нÑ\8f: â\80\9e''$3''“.",
+       "filereadonlyerror": "Ð\9dе Ð±Ñ\8bло Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð¼Ñ\96ниÑ\82и Ñ\84айл â\80\9e$1â\80\9c, Ð±Ð¾ Ð°Ñ\80Ñ\85Ñ\96в Ñ\84айлÑ\96в â\80\9e$2â\80\9c Ñ\94 Ñ\82епеÑ\80Ñ\8c Ð»ÐµÐ¼ Ð½Ð° Ñ\87Ñ\96Ñ\82анÑ\8f.\n\nÐ\90дмÑ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ñ\81еÑ\80веÑ\80а, ÐºÐ¾Ñ\82Ñ\80Ñ\8bй Ð°Ñ\80Ñ\85Ñ\96в Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð², Ð´Ð¾Ð´Ð°Ð² Ñ\82оÑ\82о Ð¿Ð¾Ñ\8fÑ\81нÑ\97нÑ\8f: â\80\9e$3“.",
        "invalidtitle": "Неприпустна назва",
        "invalidtitle-knownnamespace": "Непряавилна назва в просторї назв „$2“ і текстом „$3“",
        "invalidtitle-unknownnamespace": "Неправилна назва з незнамым чіслом простору назв $1 і текстом „$2“",
        "nocookieslogin": "{{SITENAME}} хоснує cookies про приголошіня хоснователїв. Вы маєте cookies выпнуты. Просиме Вас, повольте їх і спобуйте знова.",
        "nocookiesfornew": "Конто хоснователя не было створене, бо сьме не были годны потвердити ёго походжіня.\nУтвердите ся, же маєте дозволены cookies, обновте тоту сторінку і спробуйте то знову.",
        "noname": "Мусите увести мено свого конта.",
-       "loginsuccesstitle": "УÑ\81пÑ\96Ñ\88не Ð¿Ñ\80иголоÑ\88Ñ\96нÑ\8f",
+       "loginsuccesstitle": "Ð\9fÑ\80иголоÑ\88енÑ\8bй(а)",
        "loginsuccess": "'''Теперь працуєте {{grammar:locative|{{SITENAME}}}} під меном $1.'''",
        "nosuchuser": "Не екзістує хоснователь з меном «$1».\nУ хосновательскых мен ся розлишують малы/великы писмена.\nСконтролюйте запис, або собі [[Special:CreateAccount|зареґіструйте нове конто]].",
        "nosuchusershort": "Хоснователь з меном $1 не екзістує.\nПеревірте правилность написаня мена.",
index 48bf8f8..48fcb81 100644 (file)
        "databaseerror-query": "Upit: $1",
        "databaseerror-function": "Funkcija: $1",
        "databaseerror-error": "Greška: $1",
-       "transaction-duration-limit-exceeded": "Da se izbjegne veliko zaostajanje replikacije, transakcija je prekinuta zato što je trajanje zapisivanja ($1) prekoračilo ograničenje od {{PLURAL:$2|jedne sekunde|$2 sekunde|$2 sekundi}}.\nAko mijenjate mnogo stavki odjednom, uradite to u više navrata.",
+       "transaction-duration-limit-exceeded": "Da se izbjegne veliko zaostajanje odgovorâ, transakcija je prekinuta zato što prekoračeno je trajanje zapisivanja ($1), ograničeno {{PLURAL:$2|jednom sekundom|$2 sekunde|$2 sekundi}}.\nAko mijenjate više stavki odjednom, uradite ovo na više navrata umjesto zajednički.",
        "laggedslavemode": "'''Upozorenje''': Stranica ne mora sadržavati posljednja ažuriranja.",
        "readonly": "Baza podataka je zaključana",
        "enterlockreason": "Unesite razlog za zaključavanje, uključujući procjenu vremena otključavanja",
        "autoblockedtext": "Vaša IP adresa je automatski blokirana jer je korištena od strane drugog korisnika, a blokirao ju je $1.\nNaveden je slijedeći razlog:\n\n:<em>$2</em>\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Blokirani korisnik: $7\n\nMožete kontaktirati $1 ili nekog drugog iz grupe [[{{MediaWiki:Grouppage-sysop}}|administratora]] i zahtijevati da Vas deblokira.\n\nZapamtite da ne možete koristiti opciju \"{{int:emailuser}}\" ukoliko nije unesena validna e-mail adresa u [[Special:Preferences|Vašim postavkama]] te Vas ne spriječava ga je koristite.\n\nVaša trenutna IP adresa je $3, a ID blokade je $5.\nMolimo da navedete sve gore navedene detalje u zahtjevu za deblokadu.",
        "systemblockedtext": "MediaWiki je automatski blokirao Vaše korisničko ime ili IP-adresu.\nDat je sljedeći razlog:\n\n:<em>$2</em>\n\n* Početak bloka: $8\n* Istek bloka: $6\n* Blok je namijenjen za: $7\n\nVaša trenutna IP-adresa je $3.\nPrepišite sve gorenavedene pojedinosti ukoliko želite da vlasti pitaju za blok.",
        "blockednoreason": "razlog nije naveden",
+       "blockedtext-composite": "<strong>Vaše korisničko ime ili IP-adresa je blokirano.</strong>\n\nDat je sljedeći razlog:\n\n:<em>$2</em>.\n\n* Početak bloka: $8\n* Istek najdužeg bloka: $6\n\nVaša trenutna IP-adresa je $3.\nPrepišite sve gorenavedene pojedinosti ukoliko želite da vlasti pitaju za blok.",
+       "blockedtext-composite-reason": "Vaš račun i/ili IP adresa ima nekoliko blokova",
        "whitelistedittext": "Da bi ste uređivali stranice, morate se $1.",
        "confirmedittext": "Morate potvrditi Vašu e-mail adresu prije nego počnete mijenjati stranice.\nMolimo da postavite i verifikujete Vašu e-mail adresu putem Vaših [[Special:Preferences|korisničkih opcija]].",
        "nosuchsectiontitle": "Ne mogu pronaći sekciju",
        "accmailtext": "Nasumično odabrana šifra za [[User talk:$1|$1]] je poslata na adresu $2.\n\nŠifra/lozinka za ovaj novi račun može biti promijenjena na stranici ''[[Special:ChangePassword|izmjene šifre]]'' nakon prijave.",
        "newarticle": "(Novi)",
        "newarticletext": "Preko linka ste došli na stranicu koja još uvijek ne postoji.\n* Ako želite stvoriti stranicu, počnite tipkati u okviru dolje (v. [$1 stranicu za pomoć] za više informacija).\n* Ukoliko ste došli greškom, pritisnike dugme '''Nazad''' ('''back''') na vašem pregledniku.",
-       "anontalkpagetext": "----''Ovo je stranica za razgovor za anonimnog korisnika koji još nije napravio račun ili ga ne koristi.\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo identifikovali njega ili nju.\nTakvu adresu može dijeliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene nebitne primjedbe, molimo Vas da [[Special:CreateAccount|napravite račun]] ili se [[Special:UserLogin|prijavite]] da biste izbjegli buduću zabunu sa ostalim anonimnim korisnicima.''",
+       "anontalkpagetext": "----\n<em>Ovo je razgovorna stranica s anonimnim korisnikom koji još nije napravio račun ili ga ne koristi.</em>\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo identifikovali njega ili nju.\nTakvu adresu može dijeliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene nebitne primjedbe, molimo Vas da [[Special:CreateAccount|napravite račun]] ili se [[Special:UserLogin|prijavite]] da biste izbjegli buduću zabunu sa ostalim anonimnim korisnicima.",
        "noarticletext": "Na ovoj stranici trenutno nema teksta.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] u drugim stranicama,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretraživati srodne registre],\nili [{{fullurl:{{FULLPAGENAME}}|action=edit}} napraviti ovu stranicu]</span>.",
        "noarticletext-nopermission": "Trenutno nema teksta na ovoj stranici.\nMožete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane registre]</span>. alio nemate dozvolu za stvaranje ove stranice.",
        "missing-revision": "Ne mogu da pronađem izmenu br. $1 na stranici pod nazivom „{{FULLPAGENAME}}“.\n\nOvo se obično dešava kada pratite zastarjelu vezu do stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
        "copyrightwarning2": "Zapamtite da svaki doprinos na stranici {{SITENAME}} može biti izmijenjen, promijenjen ili uklonjen od strane ostalih korisnika. Ako ne želite da ovo desi sa Vašim tekstom, onda ga nemojte slati ovdje.<br />\nTakođer nam garantujete da ste ovo Vi napisali, ili da ste ga kopirali iz javne domene ili sličnog slobodnog izvora informacija (pogledajte $1 za više detalja).\n'''NE ŠALJITE DJELA ZAŠTIĆENA AUTORSKIM PRAVOM BEZ DOZVOLE!'''",
        "editpage-cannot-use-custom-model": "Model sadržaja ove stranice se ne može promijeniti.",
        "longpageerror": "'''Greška: tekst koji ste uneli je veličine {{PLURAL:$1|jedan kilobajt|$1 kilobajta|$1 kilobajta}}, što je veće od {{PLURAL:$2|dozvoljenog jednog kilobajta|dozvoljena $2 kilobajta|dozvoljenih $2 kilobajta}}.'''\nStranica ne može biti sačuvana.",
-       "readonlywarning": "<strong>Upozorenje: baza podataka je zaključana radi održavanja, tako da trenutno nećete moći da sačuvate izmene.</strong>\nMožda biste želeli sačuvati tekst za kasnije u nekoj tekstualnoj datoteci.\n\nAdministrator koji je zaključao bazu dao je sledeće objašnjenje: $1",
+       "readonlywarning": "<strong>Upozorenje: baza podataka je zaključana radi održavanja, i stoga trenutno nećete moći da sačuvate izmjene.</strong>\n\nPreporučujemo Vam prekopirati tekst na strani i sačuvati ga za kasnije.\n\nAdministrator koji je zaključao bazu dao je sledeće objašnjenje: $1",
        "protectedpagewarning": "'''PAŽNJA: Ova stranica je zaključana tako da samo korisnici sa administratorskim privilegijama mogu da je mijenjaju.'''\nPosljednja stavka u registru je prikazana ispod kao referenca:",
        "semiprotectedpagewarning": "<strong>Pažnja:</strong> Ova stranica je zaključana tako da je samo automatski potvrđeni korisnici mogu uređivati.\nPosljednja stavka registra je prikazana ispod kao referenca:",
        "cascadeprotectedwarning": "<strong>Upozorenje:</strong> Ova stranica je zaključana tako da je samo korisnici sa [[Special:ListGroupRights|određenim pravima]] mogu mijenjati, jer je ona uključena u {{PLURAL:$1|sljedeću, prenosivo zaštićenu stranicu|sljedeće, prenosivo zaštićene stranice}}:",
        "edit-gone-missing": "Stranica se nije mogla osvježiti.\nIzgleda da je obrisana.",
        "edit-conflict": "Sukob izmjena.",
        "edit-no-change": "Vaša izmjena je ignorirana, jer nije bilo promjena teksta stranice.",
+       "edit-slots-cannot-add": "{{PLURAL:$1|Sljedeći slot ovdje nije podržan|Sljedeći slotovi ovdje nisu podržani}}: $2.",
+       "edit-slots-cannot-remove": "{{PLURAL:$1|Sljedeći slot je obavezan i ne može da se ukloni|Sljedeći slotovi su obavezni i ne mogu da se uklone}}: $2.",
+       "edit-slots-missing": "{{PLURAL:$1|Sljedeći slot nedostaje|Sljedeći slotovi nedostaju}}: $2.",
        "postedit-confirmation-created": "Stranica je stvorena.",
        "postedit-confirmation-restored": "Stranica je obnovljena.",
        "postedit-confirmation-saved": "Vaša izmjena je snimljena.",
        "anonymous": "{{PLURAL:$1|Anonimni korisnik|$1 anonimna korisnika|$1 anonimnih korisnika}} projekta {{SITENAME}}",
        "siteuser": "{{SITENAME}} korisnik $1",
        "anonuser": "{{SITENAME}} anonimni korisnik $1",
-       "lastmodifiedatby": "Ovu stranicu je posljednji put promjenio $3, u $2, $1",
+       "lastmodifiedatby": "Ovu stranicu je posljednji put {{GENDER:$4|uredio|uredila}} $3 u $2 na datum $1.",
        "othercontribs": "Bazirano na radu od strane korisnika $1.",
        "others": "ostali",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|korisnik}}|korisnika}} $1",
        "version-poweredby-others": "ostali",
        "version-poweredby-translators": "translatewiki.net prevodioci",
        "version-credits-summary": "Htjeli bismo da zahvalimo sljedećim osobama na njihovom doprinosu [[Special:Version|MediaWiki]].",
-       "version-license-info": "Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija.\n\nMediawiki se distriburia u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte GNU opću javnu licencu za više detalja.\n\nTrebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] zajedno s ovim programom, ako niste, pišite Fondaciji Slobodnog Softvera na adresu  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online].",
+       "version-license-info": "Mediawiki je slobodni softver; možete ga redistribuirati i/ili mijenjati pod uslovima GNU-ove opće javne licence Fondacije slobodnog softvera; ili u verziji 2 Licence, ili nekoj od kasniji verzija (po vašoj volji).\n\nMediaWiki se nudi u nadi da će biti korisna, ali <em>BEZ IKAKVIH GARANCIJA</em>; čak i bez podrazumjevane garancije o <strong>KOMERCIJALNOSTI</strong> ili <strong>PRIKLADNOSTI ZA ODREĐENU SVRHU</strong>. Za više informacija, pogledajte GNU-ovu opću javnu licencu.\n\nZajedno s ovim programom trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/COPYING primjerak GNU-ove opće javne licence]; ako niste dobili primjerak, pišite na Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ili je [//www.gnu.org/licenses/old-licenses/gpl-2.0.html pročitajte ovdje].",
        "version-software": "Instalirani softver",
        "version-software-product": "Proizvod",
        "version-software-version": "Verzija",
        "restrictionsfield-help": "Jedna IP-adresa ili CIDR-opseg po redu. Da omogućite sve, koristite<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
        "edit-error-short": "Greška: $1",
        "edit-error-long": "Greške:\n\n$1",
+       "specialmute": "Iskl. obavještenja",
+       "specialmute-success": "Promjene su uspješno napravljene. Pogledajte sve isključene korisnike na [[Special:Preferences]].",
+       "specialmute-submit": "Potvrdi / Потврди",
+       "specialmute-label-mute-email": "Isključi e-poštu od ovog korisnika",
+       "specialmute-header": "Izaberite postavke za obavještenja od {{BIDI:[[User:$1]]}}.",
+       "specialmute-error-invalid-user": "Nisam mogao naći korisničko ime.",
+       "specialmute-error-email-blacklist-disabled": "Isključavanje e-pošte od korisnika nije omogućeno.",
+       "specialmute-error-email-preferences": "Morat ćete potvrditi svoju e-poštu prije isključivanja obavijesti od drugih. To je učinjeno na stranici [[Special:Preferences]].",
+       "specialmute-email-footer": "[$1 Upravljanje postavkama e-pošte od {{BIDI:$2}}.]",
+       "specialmute-login-required": "Molimo Vas prijavite se da biste napravili promjene.",
        "revid": "izmjena $1",
        "pageid": "ID stranice $1",
        "interfaceadmin-info": "$1\n\nDozvole za uređivanje CSS/JS/JSON datoteka preko cijelog wikija nedavno su odvojene od prava <code>editinterface</code>. Ako ne razumijete zašto ste dobili ovu grešku, pogl. [[mw:MediaWiki_1.32/interface-admin]].",
index fad8fb8..da11bf7 100644 (file)
        "history": "Zgodovina strani",
        "history_short": "Zgodovina",
        "history_small": "zgodovina",
-       "updatedmarker": "Posodobljeno od mojega zadnjega obiska",
+       "updatedmarker": "posodobljeno od vašega zadnjega obiska",
        "printableversion": "Različica za tisk",
        "permalink": "Trajna povezava",
        "print": "Tisk",
index f30aa1c..1b8aa35 100644 (file)
        "databaseerror-query": "Упит: $1",
        "databaseerror-function": "Функција: $1",
        "databaseerror-error": "Грешка: $1",
+       "transaction-duration-limit-exceeded": "Због избегавања великих заостајања репликације, ова трансакција је прекинута због тога што је трајање записивања ($1) премашило $2 секунди ограничења. \nУколико мењате више ставки одједном, правите ово на више мањих операција.",
        "laggedslavemode": "<strong>Упозорење:</strong> страница можда не садржи недавна ажурирања.",
        "readonly": "База података је закључана",
        "enterlockreason": "Унесите разлог за закључавање, укључујући и време откључавања",
        "rcfilters-restore-default-filters": "Врати подразумеване филтере",
        "rcfilters-clear-all-filters": "Обришите све филтере",
        "rcfilters-show-new-changes": "Нове промене од $1",
-       "rcfilters-search-placeholder": "ФилÑ\82Ñ\80иÑ\80аÑ\98Ñ\82е Ð¿Ñ\80омене (коÑ\80иÑ\81Ñ\82иÑ\82е Ð¼ÐµÐ½Ð¸ Ð¸Ð»Ð¸ Ð¿Ñ\80еÑ\82Ñ\80агÑ\83 Ð·Ð° име филтера)",
+       "rcfilters-search-placeholder": "ФилÑ\82Ñ\80иÑ\80аÑ\98Ñ\82е Ð¿Ñ\80омене (коÑ\80иÑ\81Ñ\82иÑ\82е Ð¼ÐµÐ½Ð¸ Ð¸Ð»Ð¸ Ð¿Ñ\80еÑ\82Ñ\80ажиÑ\82е име филтера)",
        "rcfilters-invalid-filter": "Неважећи филтер",
        "rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
        "rcfilters-filterlist-title": "Филтери",
index 695f57d..f2532a2 100644 (file)
@@ -82,7 +82,8 @@
                        "Nirmos (Wikimedia)",
                        "Psl85",
                        "Sturban",
-                       "Taylor"
+                       "Taylor",
+                       "Mjälten"
                ]
        },
        "tog-underline": "Stryk under länkar:",
        "history": "Sidhistorik",
        "history_short": "Historik",
        "history_small": "historik",
-       "updatedmarker": "uppdaterad sedan senaste besöket",
+       "updatedmarker": "uppdaterad sedan ditt senaste besök",
        "printableversion": "Utskriftsvänlig version",
        "permalink": "Permanent länk",
        "print": "Skriv ut",
        "rcfilters-view-tags-tooltip": "Filtrera resultat med redigeringsmärken",
        "rcfilters-view-return-to-default-tooltip": "Återvänd till huvudfiltreringsmenyn",
        "rcfilters-view-tags-help-icon-tooltip": "Läs mer om taggade redigeringar",
-       "rcfilters-liveupdates-button": "Liveuppdateringar",
-       "rcfilters-liveupdates-button-title-on": "Stäng av liveuppdateringar",
+       "rcfilters-liveupdates-button": "Realtidsuppdateringar",
+       "rcfilters-liveupdates-button-title-on": "Stäng av uppdateringar i realtid",
        "rcfilters-liveupdates-button-title-off": "Visa nya ändringar när de händer",
        "rcfilters-watchlist-markseen-button": "Markera alla ändringar som sedda",
        "rcfilters-watchlist-edit-watchlist-button": "Redigera din lista över bevakade sidor",
        "uploaded-setting-href-svg": "Användning av taggen \"set\" för att lägga till attributen \"href\" till överordnade element blockeras.",
        "uploaded-wrong-setting-svg": "Användning av \"set\"-taggen för att lägga till ett remote-/data-/skriptmål till något attribut är blokerat. Hittade <code>&lt;set to=\"$1\"&gt;</code> i den uppladdade SVG-filen.",
        "uploaded-setting-handler-svg": "SVG som anger \"handler\"-attributet med remote/data/skript är blockerat. Hittade <code>$1=\"$2\"</code> i den uppladdade SVG-filen.",
-       "uploaded-remote-url-svg": "SVG som anger style-attributet med en fjärr-URL är blockerat. Hittade <code>$1=\"$2\"</code> i den uppladdade SVG-filen.",
+       "uploaded-remote-url-svg": "SVG som anger stilattributet med en fjärr-URL är blockerat. Hittade <code>$1=\"$2\"</code> i den uppladdade SVG-filen.",
        "uploaded-image-filter-svg": "Hittade bildfilter med URL: <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploadscriptednamespace": "Denna SVG-fil innehåller den ogiltiga namnrymden \"<nowiki>$1</nowiki>\".",
        "uploadinvalidxml": "XML-koden i den uppladdade filen kunde inte tolkas.",
index ffce23c..6a68b4a 100644 (file)
        "history": "Sayfa geçmişi",
        "history_short": "Geçmiş",
        "history_small": "geçmiş",
-       "updatedmarker": "son ziyaretimden sonra güncellenmiş",
+       "updatedmarker": "son ziyaretinizden bu yana güncellendi",
        "printableversion": "Yazdırılabilir sürüm",
        "permalink": "Kalıcı bağlantı",
        "print": "Yazdır",
        "autoblockedtext": "IP adresiniz otomatik olarak engellendi, çünkü $1 tarafından engellenmiş başka bir kullanıcı tarafından kullanılmaktaydı.\nBelirtilen sebep şudur:\n\n:<em>$2</em>\n\n* Engellemenin başlangıcı: $8\n* Engellemenin bitişi: $6\n* Bloke edilmesi istenen: $7\n\nEngelleme hakkında tartışmak için $1 ile veya diğer [[{{MediaWiki:Grouppage-sysop}}|hizmetlilerden]] biriyle irtibata geçebilirsiniz.\n\nNot, [[Special:Preferences|kullanıcı tercihlerinize]] geçerli bir e-posta adresi kaydetmediyseniz  \"{{int:emailuser}}\" özelliğinden faydalanamayabilirsiniz ve bu özelliği kullanmaktan engellenmediniz.\n\nŞu anki IP numaranız $3 ve engellenme ID'niz #$5.\nLütfen yapacağınız herhangi bir sorguda yukarıdaki bütün detayları bulundurun.",
        "systemblockedtext": "Kullanıcı adınız veya IP adresiniz MediaWiki tarafından otomatik olarak engellendi.\nSebebi:\n\n:<em>$2</em>\n\n* Engelin başlangıcı: $8\n* Engelin süresi: $6\n* Engellenmesi istenen: $7\n\nMevcut IP adresiniz $3.\nLütfen yukarıdaki tüm ayrıntıları, yaptığınız sorgularda belirtin.",
        "blockednoreason": "sebep verilmedi",
+       "blockedtext-composite": "<strong>Kullanıcı adınız veya IP adresiniz engellendi.</strong>\n\nSebebi:\n\n:<em>$2</em>.\n\n* Engel başlama tarihi: $8\n* Engelin süresi: $6\n\nGeçerli IP adresiniz $3.\nLütfen yukarıdaki tüm detayları yaptığınız tüm sorgulara dahil ediniz.",
+       "blockedtext-composite-reason": "Hesabınızda ve/veya IP adresinizde birden fazla engel mevcut.",
        "whitelistedittext": "Değişiklik yapabilmek için $1.",
        "confirmedittext": "Sayfa değiştirmeden önce e-posta adresinizi onaylamalısınız. Lütfen [[Special:Preferences|tercihler]] kısmından e-postanızı ekleyin ve onaylayın.",
        "nosuchsectiontitle": "Bölüm bulunamadı",
        "revision-info": "$2 tarafından oluşturulmuş $1 tarihli sürüm $7",
        "previousrevision": "← Önceki hâli",
        "nextrevision": "Sonraki hâli →",
-       "currentrevisionlink": "En güncel hâli",
+       "currentrevisionlink": "Güncel sürüm",
        "cur": "gün",
        "next": "sonraki",
        "last": "son",
        "mergehistory-fail-no-change": "Geçmiş birleştirme hiçbir sürümü birleştirmedi. Lütfen sayfa ve zaman parametrelerini bir kez daha kontrol edin.",
        "mergehistory-fail-permission": "Geçmiş birleştirmek için gerekli izinler yok.",
        "mergehistory-fail-self-merge": "Kaynak ve hedef sayfa aynı.",
+       "mergehistory-fail-timestamps-overlap": "Kaynak revizyonları çakışıyor veya hedef revizyonlarından sonra geliyor.",
        "mergehistory-fail-toobig": "Limit olarak belirlenen $1 {{PLURAL:$1|sürümden|sürümden}} daha fazlasını taşımak gerekeceği için geçmiş birleştirme gerçekleştirilemiyor.",
        "mergehistory-no-source": "Kaynak sayfa $1 bulunmamaktadır.",
        "mergehistory-no-destination": "Hedef sayfa $1 bulunmamaktadır.",
        "action-changetags": "tekil sürümlere veya günlük kayıtlarına etiket ekleme veya çıkarma",
        "action-deletechangetags": "etiketleri veritabanından sil",
        "action-purge": "bu sayfayı temizle",
+       "action-apihighlimits": "API sorgularında daha yüksek sınır kullan",
+       "action-autoconfirmed": "IP-tabanlı hız limitleri etkilenmez",
+       "action-bigdelete": "uzun tarihli sayfaları sil",
+       "action-blockemail": "bir kullanıcının e-posta göndermesini engelle",
+       "action-bot": "otomatik bir işlem gibi muamele gör",
+       "action-editprotected": "\"{{int:protect-level-sysop}}\" olarak korunan sayfalarda değişiklik yap",
+       "action-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" olarak korunan sayfalarda değişiklik yap",
        "action-editinterface": "Kullanıcı arayüzünü değiştir",
        "action-editusercss": "Diğer kullanıcıların CSS sayfalarını değiştir",
        "action-edituserjson": "Diğer kullanıcıların JSON sayfalarını değiştir",
        "action-edituserjs": "Diğer kullanıcıların JavaScript sayfalarını değiştir",
+       "action-editsitecss": "sitewide CSS düzenle",
+       "action-editsitejson": "sitewide JSON'u düzenle",
+       "action-editsitejs": "sitewide JavaScript'i düzenle",
+       "action-editmyusercss": "kendi kullanıcı CSS dosyaları düzenle",
+       "action-editmyuserjson": "kendi kullanıcı JSON dosyalarını düzenle",
+       "action-editmyuserjs": "kendi kullanıcı JavaScript dosyalarını düzenle",
+       "action-viewsuppressed": "herhangi bir kullanıcıdan saklanan sürümleri göster",
        "action-hideuser": "Herkesten gizleyerek bir kullanıcı adını engelle",
+       "action-ipblock-exempt": "IP engellemelerini, otomatik engellemelerini ve aralık engellemelerini atla",
+       "action-unblockself": "kendi engellini kaldır",
+       "action-noratelimit": "derecelendirme sınırlamalarından etkilenme",
+       "action-reupload-own": "kendisi tarafından yüklenen mevcut dosyaların üzerine yaz",
+       "action-nominornewtalk": "kullanıcı tartışma sayfalarında yaptığı küçük değişiklikler kullanıcıya yeni mesaj bildirimiyle bildirilmez",
+       "action-markbotedits": "geri döndürülen değişikliklerini bot değişiklikleri olarak işaretle",
+       "action-patrolmarks": "son değişiklikler gözleme işaretlerini gör",
+       "action-override-export-depth": "sayfaları, derinlik 5'e kadar bağlantılı sayfalarla beraber dışa aktar",
+       "action-suppressredirect": "sayfaları taşırken kaynak sayfalardan yönlendirmeler oluşturma",
        "nchanges": "$1 {{PLURAL:$1|değişiklik|değişiklik}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|son ziyaretten bu yana}}",
        "enhancedrc-history": "geçmiş",
        "rcfilters-filter-categorization-description": "Kategorilere eklenen veya kaldırılan sayfaların kayıtları.",
        "rcfilters-filter-logactions-label": "Günlüğü tutulan işlemler",
        "rcfilters-filter-logactions-description": "Hizmetli işlemleri, hesap oluşturmalar, sayfa silmeler, yüklemeler...",
-       "rcfilters-filtergroup-lastrevision": "En son sürümler",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "\"Küçük değişiklikler\" filtresi, bir veya daha fazla değişiklik türü filtresiyle çakışıyor çünkü belirli değişiklik türleri \"küçük\" olarak belirlenemez. Çakışan filtreler yukarıdaki Aktif filtreler alanında işaretlenmiştir.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Bazı değişiklik türleri \"küçük\" olarak belirlenemez, bu nedenle bu filtre şu değişiklik filtreleriyle çakışıyor: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Bu değişiklik filtresi \"Küçük değişiklikler\" filtresiyle çakışıyor. Bazı değişiklik türleri \"küçük\" olarak tanımlanamaz.",
+       "rcfilters-filtergroup-lastrevision": "Güncel sürümler",
        "rcfilters-filter-lastrevision-label": "Son revizyon",
        "rcfilters-filter-lastrevision-description": "Bir sayfadaki en yeni değişiklik.",
-       "rcfilters-filter-previousrevision-label": "Son revizyon değil",
+       "rcfilters-filter-previousrevision-label": "Güncel sürüm değil",
+       "rcfilters-filter-previousrevision-description": "\"Güncel sürüm\" olmayan tüm değişiklikler",
        "rcfilters-filter-excluded": "Hariç",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1</strong>",
        "rcfilters-exclude-button-off": "Seçileni hariç tut",
        "rcfilters-exclude-button-on": "Seçilen hariç",
        "rcfilters-view-tags": "Etiketli düzenlemeler",
        "recentchangeslinked-page": "Sayfa adı:",
        "recentchangeslinked-to": "Belirtilen sayfadan verilenler yerine, sayfaya verilen bağlantıları göster.",
        "recentchanges-page-added-to-category": "[[:$1]] kategoriye eklendi",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] kategoriye eklendi,  [[Special:WhatLinksHere/$1|bu sayfa diğer sayfalara dahil edildi]]",
        "recentchanges-page-removed-from-category": "[[:$1]] kategoriden çıkarıldı",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] kategoriden kaldırıldı, [[Special:WhatLinksHere/$1|bu sayfa diğer sayfalara dahil edildi]]",
        "autochange-username": "MediaWiki otomatik değişimi",
        "upload": "Dosya yükle",
        "uploadbtn": "Dosya yükle",
        "reuploaddesc": "Yükleme formuna geri dön.",
        "upload-tryagain": "Değiştirilmiş dosya açıklamasını gönder",
+       "upload-tryagain-nostash": "Yeniden yüklenen dosyayı ve değiştirilen açıklamayı gönder",
        "uploadnologin": "Oturum açık değil",
        "uploadnologintext": "Dosya yükleyebilmek için $1manız gerekiyor.",
        "upload_directory_missing": "Yükleme dizini ($1) kayıp ve websunucusu tarafından oluşturulamıyor.",
        "file-thumbnail-no": "Bu dosyanın adı <strong>$1</strong> ile başlıyor.\nBu başka bir resim küçültülmüş sürümüne benziyor ''(thumbnail)''\nEğer sizde bu resmin tam çöznürlükteki sürümü varsa onu yükleyin, aksi takdirde lütfen dosya adını değiştirin.",
        "fileexists-forbidden": "Bu isimde bir dosya zaten var, ve üzerine yazılamıyor.\nDosyanızı yinede yüklemek istiyorsanız, lütfen geri dönüp yeni bir isim kullanın. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Bu isimde bir dosya ortak havuzda zaten mevcut.\nDosyanızı yinede yüklemek istiyorsanız, lütfen geri gidip yeni bir isim kullanın. [[File:$1|thumb|center|$1]]",
+       "fileexists-no-change": "Yükleme, mevcut <strong>[[:$1]]</strong> sürümünün tam bir kopyasıdır.",
+       "fileexists-duplicate-version": "Yükleme, <strong>[[:$1]]</strong> dosyasının {{PLURAL:$2|eski bir sürümünün|eski sürümlerinin}} tam bir kopyasıdır.",
        "file-exists-duplicate": "Bu dosya aşağıdaki {{PLURAL:$1|dosyanın|dosyaların}} kopyasıdır:",
        "file-deleted-duplicate": "Bu dosyanın özdeşi olan başka bir dosya ([[:$1]]) daha önceden silindi. Bu dosyayı yeniden yüklemeden önce diğer dosyanın silme kayıtlarını kontrol etmelisiniz.",
        "file-deleted-duplicate-notitle": "Bu dosyaya eş bir dosya daha önceden silinmiş, ve başlık bastırılmış.\nDosyayı tekrar yüklemeye devam etmeden önce, bastırılmış dosya verisini görme yetkisine sahip birisine durumu gözden geçirmesini istemelisiniz.",
        "uploadwarning": "Yükleme uyarısı",
        "uploadwarning-text": "Lütfen aşağıdaki dosya açıklamasını değiştirin ve tekrar deneyin.",
+       "uploadwarning-text-nostash": "Lütfen dosyayı yeniden yükleyin, aşağıdaki açıklamayı değiştirin ve tekrar deneyin.",
        "savefile": "Dosyayı kaydet",
        "uploaddisabled": "Geçici olarak şu anda bu wiki'ye herhangi bir dosya yüklenemez. Lütfen daha sonra bir daha deneyiniz.",
        "copyuploaddisabled": "URL ile yükleme devre dışı.",
        "php-uploaddisabledtext": "PHP dosyası yüklemeleri devre dışıdır. Lütfen file_uploads ayarını kontrol edin.",
        "uploadscripted": "Bu dosya bir internet tarayıcısı tarafından hatalı çevrilebilecek bir HTML veya script kodu içermektedir.",
        "upload-scripted-pi-callback": "XML-stylesheet işleme talimatları içeren bir dosyalar yüklenemez.",
+       "upload-scripted-dtd": "Standart olmayan bir DTD bildirimi içeren SVG dosyaları yüklenemiyor.",
        "uploaded-script-svg": "Yüklenen SVG dosyasında komutlanabilir (scriptable) öğe bulundu: \"$1\"",
        "uploaded-hostile-svg": "Yüklenen SVG dosyasının \"style\" öğesinde güvensiz CSS bulundu.",
        "uploaded-event-handler-on-svg": "SVG dosyalarında event-handler özniteliğini <code>$1=\"$2\"</code> şeklinde ayarlanmasına izin verilmiyor.",
        "uploaded-href-unsafe-target-svg": "Yüklenen SVG dosyasında <code>&lt;$1 $2=\"$3\"&gt;</code> güvensiz hedefine href veri: URI bulundu.",
        "uploaded-animate-svg": "\"animate\" etiketi bulundu, href'i değiştiriyor olabilir. Yüklenen SVG dosyasındaki \"from\" özniteliği kullanılıyor  <code>&lt;$1 $2=\"$3\"&gt;</code>",
+       "uploaded-setting-event-handler-svg": "Olay işleyicisi özniteliklerini ayarlama engellenir, yüklenen SVG dosyasında <code>&lt;$1 $2=\"$3\"&gt;</code> bulundu.",
+       "uploaded-setting-href-svg": "Üst ögeye \"href\" özelliğini eklemek için \"set\" etiketinin kullanılması engellenir.",
        "uploadscriptednamespace": "Bu SVG dosyası geçersiz \"<nowiki>$1</nowiki>\" alan adını içermektedir.",
        "uploadinvalidxml": "Yüklenen dosyadaki XML işlenemedi.",
        "uploadvirus": "Bu dosya virüslüdür! Detayları: $1",
        "deleteprotected": "Bu sayfayı silemezsiniz çünkü sayfa korumaya alınmış.",
        "deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya [[Özel:SayfayaBağlantılar/{{FULLPAGENAME}}|başka sayfalardan]] bağlantılar var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
        "rollback": "değişiklikleri geri al",
+       "rollback-confirmation-confirm": "Lütfen onaylayın:",
+       "rollback-confirmation-yes": "Geri döndürme",
+       "rollback-confirmation-no": "İptal",
        "rollbacklink": "geri döndür",
        "rollbacklinkcount": "$1 {{PLURAL:$1|değişikliği|değişikliği}} geri döndür",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|değişiklikten|değişiklikten}} daha fazlasını geri döndür",
        "rollbackfailed": "geri alma işlemi başarısız",
+       "rollback-missingparam": "İstek üzerine gerekli parametreler eksik.",
        "rollback-missingrevision": "Sürüm verisi yüklenemedi.",
        "cantrollback": "Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geri döndürülemiyor;\nbaşka birisi sayfada değişiklik yaptı ya da sayfayı geri döndürdü.\n\nSon değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "sp-contributions-blocked-notice-anon": "Bu IP adresi şu anda engellenmiş.\nSon engelleme günlüğü girdisi kaynak amacıyla aşağıda verilmiştir:",
        "sp-contributions-search": "Katkıları ara",
        "sp-contributions-username": "IP adresi veya kullanıcı adı:",
-       "sp-contributions-toponly": "Sadece son revizyon olan değişiklikleri göster",
+       "sp-contributions-toponly": "Sadece güncel sürüm olan değişiklikleri göster",
        "sp-contributions-newonly": "Yalnızca yeni sayfa oluşturan değişiklikleri görüntüle",
        "sp-contributions-hideminor": "Küçük değişiklikleri gizle",
        "sp-contributions-submit": "Ara",
        "markedaspatrollednotify": "$1 için bu değişiklik kontrol edildi olarak işaretlendi.",
        "markedaspatrollederrornotify": "Kontrol edildi olarak işaretleme başarısız oldu.",
        "patrol-log-page": "Devriye günlüğü",
-       "patrol-log-header": "Bu gözlenmiş revizyonların günlüğüdür.",
+       "patrol-log-header": "Bu onaylanmış sürümlerin günlüğüdür.",
        "confirm-markpatrolled-button": "TAMAM",
        "deletedrevision": "$1 sayılı eski sürüm silindi.",
        "filedeleteerror-short": "$1 dosyanın silinmesinde hata oldu",
        "mw-widgets-categoryselector-add-category-placeholder": "Bir kategori ekle...",
        "mw-widgets-usersmultiselect-placeholder": "Daha fazla ekle...",
        "date-range-from": "Şu tarihten:",
-       "date-range-to": "Bu güne kadar:",
+       "date-range-to": "Şu güne kadar:",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "çerez tabanlı oturumlar",
        "sessionprovider-nocookies": "Çerezler devre dışı olabilir. Çerkezlerin aktif olduğuna emin olun ve yeniden başlatin.",
        "randomrootpage": "Rasgele kök sayfa",
index 3537faa..dc556f2 100644 (file)
        "history": "Історія сторінки",
        "history_short": "Історія",
        "history_small": "історія",
-       "updatedmarker": "оновлено Ð¿Ñ\96Ñ\81лÑ\8f Ð¼ого останнього перегляду",
+       "updatedmarker": "оновлено Ð¿Ñ\96Ñ\81лÑ\8f Ð\92аÑ\88ого останнього перегляду",
        "printableversion": "Версія до друку",
        "permalink": "Постійне посилання",
        "print": "Друк",
        "autoblockedtext": "Ваша IP-адреса автоматично заблокована у зв'язку з тим, що вона раніше використовувалася кимось із користувачів, якого заблокував $1.\nПричина блокування блокування:\n\n:<em>$2</em>\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете скористатися функцією \"{{int:emailuser}}\", так як не маєте дійсної електронної пошти, зареєстрованої в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте ці дані у своїх запитах.",
        "systemblockedtext": "Ваше ім'я користувача або IP-адресу було автоматично заблоковано MediaWiki.\nВказана причина:\n\n:<em>$2</em>\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Ціль блокування: $7\n\nВаша поточна IP-адреса — $3.\nБудь ласка, додайте всі вказані подробиці до будь-яких запитів, які Ви будете робити.",
        "blockednoreason": "не вказано причини",
+       "blockedtext-composite": "<strong>Ваше ім'я користувача або IP-адресу було заблоковано.</strong>\n\nВказана причина:\n\n:<em>$2</em>.\n\n* Початок блокування: $8\n* Закінчення найдовшого блокування: $6\n\nВаша поточна IP-адреса — $3.\nБудь ласка, додайте всі вказані подробиці до будь-яких запитів, які Ви будете робити.",
+       "blockedtext-composite-reason": "Встановлено кілька блокувань для Вашого облікового запису та/або IP-адреси",
        "whitelistedittext": "Ви повинні $1, щоб редагувати сторінки.",
        "confirmedittext": "Ви повинні підтвердити вашу адресу електронної пошти перед редагуванням сторінок.\nБудь-ласка вкажіть і підтвердіть вашу електронну адресу на [[Special:Preferences|сторінці налаштувань]].",
        "nosuchsectiontitle": "Не вдається знайти розділ",
index 0b3b932..27e1acf 100644 (file)
        "rcfilters-savedqueries-add-new-title": "儲存而家個篩選條件設定",
        "rcfilters-restore-default-filters": "恢復返預設篩選條件",
        "rcfilters-clear-all-filters": "清走全部篩選條件",
-       "rcfilters-show-new-changes": "睇吓最新嘅改動",
+       "rcfilters-show-new-changes": "睇下自$1以來新嘅改動",
        "rcfilters-search-placeholder": "篩選條件最近改動(瀏覽或者開始輸入)",
        "rcfilters-invalid-filter": "無效嘅篩選條件",
        "rcfilters-empty-filter": "無用到篩選條件。顯示晒全部貢獻。",
        "blockip": "封鎖{{GENDER:$1|用戶}}",
        "blockiptext": "使用以下嘅表格嚟去阻止指定嘅IP地址或用戶名嘅寫權限。\n僅當僅當為咗避免有版畀人惡意破壞嘅時候先可以使用,而且唔可以違反[[{{MediaWiki:Policy-url}}|政策]]。\n喺下面填寫阻止嘅確切原因(比如:引用咗某啲已經破壞咗嘅頁面)。\n你可以用[https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]語法格式封鎖 IP 範圍,IPv4最大容許範圍係 /$1,IPv6就係 /$2。",
        "ipaddressorusername": "IP地址或用戶名:",
-       "ipbreason": "原因:",
-       "ipbreason-dropdown": "*å\85±ç\94¨å°\81é\8e\96å\8e\9få\9b \n** æ\8f\92å\85¥é\8c¯å\98\85è³\87æ\96\99\n** é\9f¿é \81é\9d¢åº¦æ\8b\8eèµ°\n** 亂加入外部連結\n** 響頁度加入冇意義嘅嘢\n** 嚇人/騷擾\n** 濫用多個戶口\n** 唔能夠接受嘅用戶名",
+       "ipbreason": "原因",
+       "ipbreason-dropdown": "*常ç\94¨å°\81é\8e\96å\8e\9få\9b \n** å\8a å\85¥é\8c¯å\98\85è³\87æ\96\99\n** é\9f¿é \81é\9d¢åº¦æ\8b\8eèµ°å\86\85容\n** 亂加入外部連結\n** 響頁度加入冇意義嘅嘢\n** 嚇人/騷擾\n** 濫用多個戶口\n** 唔能夠接受嘅用戶名",
        "ipb-hardblock": "唔畀簽到用戶用呢個IP位址去改文",
        "ipbcreateaccount": "防止開新戶口",
        "ipbemailban": "防止用戶傳送電郵",
index a7183f3..c5f1879 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "建议在登录时更改",
        "easydeflate-invaliddeflate": "提供的内容未被适当缩小",
        "unprotected-js": "基于安全原因,JavaScript不能在未保护页面中载入。请在“MediaWiki:”名字空间或者用户子页面中添加JavaScript。",
-       "userlogout-continue": "如果你希望登出请[$1 点这里]。"
+       "userlogout-continue": "您确定要登出吗?"
 }
index c01c98a..39d9be7 100644 (file)
        "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"{{int:emailuser}}\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細資料。",
        "systemblockedtext": "您的使用者名稱或 IP 位址已被 MediaWiki 自動封鎖,原因如下:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 被封鎖的使用者:$7\n\n您目前的 IP 位址為 $3。\n請在做詢問時附上以上資訊。",
        "blockednoreason": "未說明原因",
+       "blockedtext-composite": "<strong>您的使用者名稱或 IP 位址已被封鎖。</strong>\n\n原因如下:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 最長的封鎖結束時間:$6\n\n您目前的 IP 位址為 $3。\n請在做詢問時附上以上資訊。",
+       "blockedtext-composite-reason": "有多個封鎖目標為您的帳號和/或IP位址",
        "whitelistedittext": "請先 $1 才可編輯頁面。",
        "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件地址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件地址。",
        "nosuchsectiontitle": "找不到章節",
        "passwordpolicies-policyflag-suggestchangeonlogin": "建議在登入時更改",
        "easydeflate-invaliddeflate": "提供的內容未被正常的壓縮",
        "unprotected-js": "基於安全因素,JavaScript 不能從未保護的頁面來載入。請僅在 MediaWiki:命名空間或使用者子頁面中建立 JavaScript。",
-       "userlogout-continue": "若您想要登出請[$1 繼續前至登出頁面]。"
+       "userlogout-continue": "您想要登出嗎?"
 }
index 666b28f..22313a4 100644 (file)
@@ -447,6 +447,7 @@ $specialPageAliases = [
        'Mostlinkedtemplates'       => [ 'MostTranscludedPages', 'MostLinkedTemplates', 'MostUsedTemplates' ],
        'Mostrevisions'             => [ 'MostRevisions' ],
        'Movepage'                  => [ 'MovePage' ],
+       'Mute'                      => [ 'Mute' ],
        'Mycontributions'           => [ 'MyContributions' ],
        'MyLanguage'                => [ 'MyLanguage' ],
        'Mypage'                    => [ 'MyPage' ],
index b90ead4..9c26986 100644 (file)
@@ -2150,7 +2150,10 @@ return [
                ],
        ],
        'mediawiki.special.pageLanguage' => [
-               'scripts' => 'resources/src/mediawiki.special.pageLanguage.js',
+               'scripts' => [
+                       'resources/src/mediawiki.special.mute.js',
+                       'resources/src/mediawiki.special.pageLanguage.js'
+               ],
                'dependencies' => [
                        'oojs-ui-core',
                ],
diff --git a/resources/src/mediawiki.special.mute.js b/resources/src/mediawiki.special.mute.js
new file mode 100644 (file)
index 0000000..3d494d0
--- /dev/null
@@ -0,0 +1,23 @@
+( function () {
+       'use strict';
+
+       $( function () {
+               var $inputs = $( '#mw-specialmute-form input:checkbox' ),
+                       saveButton, $saveButton = $( '#save' );
+
+               function isFormChanged() {
+                       return $inputs.is( function () {
+                               return this.checked !== this.defaultChecked;
+                       } );
+               }
+
+               if ( $saveButton.length ) {
+                       saveButton = OO.ui.infuse( $saveButton );
+                       saveButton.setDisabled( !isFormChanged() );
+
+                       $inputs.on( 'change', function () {
+                               saveButton.setDisabled( !isFormChanged() );
+                       } );
+               }
+       } );
+}() );
index 8b70e1f..8538e95 100644 (file)
@@ -4,8 +4,10 @@
 ( function () {
        $( function () {
                // Select the 'Language select' option if user is trying to select language
-               OO.ui.infuse( $( '#mw-pl-languageselector' ) ).on( 'change', function () {
-                       OO.ui.infuse( $( '#mw-pl-options' ) ).setValue( '2' );
-               } );
+               if ( $( '#mw-pl-languageselector' ).length ) {
+                       OO.ui.infuse( $( '#mw-pl-languageselector' ) ).on( 'change', function () {
+                               OO.ui.infuse( $( '#mw-pl-options' ) ).setValue( '2' );
+                       } );
+               }
        } );
 }() );
index 5f0067d..25de1a3 100644 (file)
@@ -2250,7 +2250,6 @@ class OutputPageTest extends MediaWikiTestCase {
         * @param array[] $calls For each array, call addVaryHeader() with those arguments
         * @param string[] $cookies Array of cookie names to vary on
         * @param string $vary Text of expected Vary header (including the 'Vary: ')
-        * @param string $key Text of expected Key header (including the 'Key: ')
         */
        public function testVaryHeaders( array $calls, array $cookies, $vary ) {
                // Get rid of default Vary fields
index aedf292..898a35f 100644 (file)
@@ -11,13 +11,11 @@ use Title;
  */
 class FallbackSlotRoleHandlerTest extends MediaWikiTestCase {
 
+       /**
+        * @return Title
+        */
        private function makeBlankTitleObject() {
-               /** @var Title $title */
-               $title = $this->getMockBuilder( Title::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               return $title;
+               return $this->createMock( Title::class );
        }
 
        /**
index 138d6bc..4f06ee2 100644 (file)
@@ -151,13 +151,10 @@ class RevisionStoreFactoryTest extends MediaWikiTestCase {
        }
 
        /**
-        * @return \PHPUnit_Framework_MockObject_MockObject|SlotRoleRegistry
+        * @return SlotRoleRegistry
         */
        private function getMockSlotRoleRegistry() {
-               $mock = $this->getMockBuilder( SlotRoleRegistry::class )
-                       ->disableOriginalConstructor()->getMock();
-
-               return $mock;
+               return $this->createMock( SlotRoleRegistry::class );
        }
 
        /**
index 67e9464..372a879 100644 (file)
@@ -11,13 +11,11 @@ use Title;
  */
 class SlotRoleHandlerTest extends MediaWikiTestCase {
 
+       /**
+        * @return Title
+        */
        private function makeBlankTitleObject() {
-               /** @var Title $title */
-               $title = $this->getMockBuilder( Title::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               return $title;
+               return $this->createMock( Title::class );
        }
 
        /**
index 4d8030d..c48a33a 100644 (file)
@@ -17,13 +17,11 @@ use Wikimedia\Assert\PostconditionException;
  */
 class SlotRoleRegistryTest extends MediaWikiTestCase {
 
+       /**
+        * @return Title
+        */
        private function makeBlankTitleObject() {
-               /** @var Title $title */
-               $title = $this->getMockBuilder( Title::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               return $title;
+               return $this->createMock( Title::class );
        }
 
        private function makeNameTableStore( array $names = [] ) {
index dd86a73..857f709 100644 (file)
@@ -13,6 +13,7 @@ use Wikimedia\Rdbms\ConnectionManager;
  * @author Daniel Kinzler
  */
 class ConnectionManagerTest extends \PHPUnit\Framework\TestCase {
+       use \PHPUnit4And6Compat;
 
        /**
         * @return IDatabase|PHPUnit_Framework_MockObject_MockObject
@@ -26,11 +27,7 @@ class ConnectionManagerTest extends \PHPUnit\Framework\TestCase {
         * @return LoadBalancer|PHPUnit_Framework_MockObject_MockObject
         */
        private function getLoadBalancerMock() {
-               $lb = $this->getMockBuilder( LoadBalancer::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               return $lb;
+               return $this->createMock( LoadBalancer::class );
        }
 
        public function testGetReadConnection_nullGroups() {
index 8d7d104..3492c3d 100644 (file)
@@ -13,6 +13,7 @@ use Wikimedia\Rdbms\SessionConsistentConnectionManager;
  * @author Daniel Kinzler
  */
 class SessionConsistentConnectionManagerTest extends \PHPUnit\Framework\TestCase {
+       use \PHPUnit4And6Compat;
 
        /**
         * @return IDatabase|PHPUnit_Framework_MockObject_MockObject
@@ -26,11 +27,7 @@ class SessionConsistentConnectionManagerTest extends \PHPUnit\Framework\TestCase
         * @return LoadBalancer|PHPUnit_Framework_MockObject_MockObject
         */
        private function getLoadBalancerMock() {
-               $lb = $this->getMockBuilder( LoadBalancer::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               return $lb;
+               return $this->createMock( LoadBalancer::class );
        }
 
        public function testGetReadConnection() {
index bc0ca2a..b6f8f9c 100644 (file)
@@ -34,6 +34,30 @@ class BlockLogFormatterTest extends LogFormatterTestCase {
                                                'duration' => 'infinite',
                                                'flags' => [ 'anononly' ],
                                        ],
+                                       'preload' => [ new TitleValue( NS_USER_TALK, 'Logtestuser' ) ],
+                               ],
+                       ],
+
+                       // With blank page title (T224811)
+                       [
+                               [
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => '',
+                                       'params' => [],
+                               ],
+                               [
+                                       'text' => 'Sysop blocked (no username available) '
+                                               . 'with an expiration time of indefinite',
+                                       'api' => [
+                                               'duration' => 'infinite',
+                                               'flags' => [],
+                                       ],
+                                       'preload' => [],
                                ],
                        ],
 
index 883af71..fc2ab91 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+use MediaWiki\Linker\LinkTarget;
 
 /**
  * @since 1.26
@@ -22,6 +23,22 @@ abstract class LogFormatterTestCase extends MediaWikiLangTestCase {
                        self::removeApiMetaData( $formatter->formatParametersForApi() ),
                        'Api log params is equal to expected array'
                );
+
+               if ( isset( $extra['preload'] ) ) {
+                       $this->assertArrayEquals(
+                               $this->getLinkTargetsAsStrings( $extra['preload'] ),
+                               $this->getLinkTargetsAsStrings(
+                                       $formatter->getPreloadTitles()
+                               )
+                       );
+               }
+       }
+
+       private function getLinkTargetsAsStrings( array $linkTargets ) {
+               return array_map( function ( LinkTarget $t ) {
+                       return $t->getInterwiki() . ':' . $t->getNamespace() . ':'
+                               . $t->getDBkey() . '#' . $t->getFragment();
+               }, $linkTargets );
        }
 
        protected function isLegacy( $extra ) {
index b33cd24..cd0867d 100644 (file)
@@ -711,10 +711,10 @@ class SessionManagerTest extends MediaWikiTestCase {
                ] );
 
                $expect = [
-                       'Foo' => [],
-                       'Bar' => [ 'X', 'Bar1', 3 => 'Bar2' ],
-                       'Quux' => [ 'Quux' ],
-                       'Baz' => [],
+                       'Foo' => null,
+                       'Bar' => null,
+                       'Quux' => null,
+                       'Baz' => null,
                ];
 
                $this->assertEquals( $expect, $manager->getVaryHeaders() );
diff --git a/tests/phpunit/includes/specials/SpecialMuteTest.php b/tests/phpunit/includes/specials/SpecialMuteTest.php
new file mode 100644 (file)
index 0000000..e31357c
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+
+/**
+ * @group SpecialPage
+ * @covers SpecialMute
+ */
+class SpecialMuteTest extends SpecialPageTestBase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( [
+                       'wgEnableUserEmailBlacklist' => true
+               ] );
+       }
+
+       /**
+        * @inheritDoc
+        */
+       protected function newSpecialPage() {
+               return new SpecialMute();
+       }
+
+       /**
+        * @covers SpecialMute::execute
+        * @expectedExceptionMessage username requested could not be found
+        * @expectedException ErrorPageError
+        */
+       public function testInvalidTarget() {
+               $user = $this->getTestUser()->getUser();
+               $this->executeSpecialPage(
+                       'InvalidUser', null, 'qqx', $user
+               );
+       }
+
+       /**
+        * @covers SpecialMute::execute
+        * @expectedExceptionMessage Muting users from sending you emails is not enabled
+        * @expectedException ErrorPageError
+        */
+       public function testEmailBlacklistNotEnabled() {
+               $this->setMwGlobals( [
+                       'wgEnableUserEmailBlacklist' => false
+               ] );
+
+               $user = $this->getTestUser()->getUser();
+               $this->executeSpecialPage(
+                       $user->getName(), null, 'qqx', $user
+               );
+       }
+
+       /**
+        * @covers SpecialMute::execute
+        * @expectedException UserNotLoggedIn
+        */
+       public function testUserNotLoggedIn() {
+               $this->executeSpecialPage( 'TestUser' );
+       }
+
+       /**
+        * @covers SpecialMute::execute
+        */
+       public function testMuteAddsUserToEmailBlacklist() {
+               $this->setMwGlobals( [
+                       'wgCentralIdLookupProvider' => 'local',
+               ] );
+
+               $targetUser = $this->getTestUser()->getUser();
+
+               $loggedInUser = $this->getMutableTestUser()->getUser();
+               $loggedInUser->setOption( 'email-blacklist', "999" );
+               $loggedInUser->confirmEmail();
+               $loggedInUser->saveSettings();
+
+               $fauxRequest = new FauxRequest( [ 'wpMuteEmail' => 1 ], true );
+               list( $html, ) = $this->executeSpecialPage(
+                       $targetUser->getName(), $fauxRequest, 'qqx', $loggedInUser
+               );
+
+               $this->assertContains( 'specialmute-success', $html );
+               $this->assertEquals(
+                       "999\n" . $targetUser->getId(),
+                       $loggedInUser->getOption( 'email-blacklist' )
+               );
+       }
+
+       /**
+        * @covers SpecialMute::execute
+        */
+       public function testUnmuteRemovesUserFromEmailBlacklist() {
+               $this->setMwGlobals( [
+                       'wgCentralIdLookupProvider' => 'local',
+               ] );
+
+               $targetUser = $this->getTestUser()->getUser();
+
+               $loggedInUser = $this->getMutableTestUser()->getUser();
+               $loggedInUser->setOption( 'email-blacklist', "999\n" . $targetUser->getId() );
+               $loggedInUser->confirmEmail();
+               $loggedInUser->saveSettings();
+
+               $fauxRequest = new FauxRequest( [ 'wpMuteEmail' => false ], true );
+               list( $html, ) = $this->executeSpecialPage(
+                       $targetUser->getName(), $fauxRequest, 'qqx', $loggedInUser
+               );
+
+               $this->assertContains( 'specialmute-success', $html );
+               $this->assertEquals( "999", $loggedInUser->getOption( 'email-blacklist' ) );
+       }
+}